From 5b6a8a06c2975e81cb501e6b34e86d195897586d Mon Sep 17 00:00:00 2001 From: Kevin McCormack Date: Tue, 7 Jun 2022 09:45:42 -0400 Subject: [PATCH 1/2] Set Ruby to 3.1.2 --- .bundle/config | 2 ++ .ruby-version | 2 +- Gemfile | 2 +- Gemfile.lock | 33 ++++++++++++++++----------------- lib/compiler.rb | 6 +++--- lib/compiler/utils.rb | 6 +++--- test/roundtrip/test_rubyc.rb | 4 ++-- 7 files changed, 28 insertions(+), 27 deletions(-) create mode 100644 .bundle/config diff --git a/.bundle/config b/.bundle/config new file mode 100644 index 000000000..d13a8592a --- /dev/null +++ b/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_JOBS: "4" diff --git a/.ruby-version b/.ruby-version index bff6ce5c1..7bde84d06 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -ruby-2.7.1 +ruby-3.1.2 diff --git a/Gemfile b/Gemfile index b7e8b4cc5..074faaf0a 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,7 @@ source 'https://rubygems.org' -ruby '2.7.1' +ruby '3.1.2' gem 'activesupport', '~> 6.0', '>= 6.0.3.2', require: 'active_support/all' gem 'minitest', '~> 5.14', '>= 5.14.1' diff --git a/Gemfile.lock b/Gemfile.lock index dd4e2a4e5..a557ba4b0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,8 +1,8 @@ GIT remote: https://github.com/kern/minitest-reporters.git - revision: 9cb9e78aed69bfe4eed6c27b5b795e8bb4ad708f + revision: 466b060a906298148836e368916aee930d28f618 specs: - minitest-reporters (1.4.2) + minitest-reporters (1.5.0) ansi builder minitest (>= 5.0) @@ -11,29 +11,28 @@ GIT GEM remote: https://rubygems.org/ specs: - activesupport (6.0.3.2) + activesupport (6.1.6) concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 0.7, < 2) - minitest (~> 5.1) - tzinfo (~> 1.1) - zeitwerk (~> 2.2, >= 2.2.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) ansi (1.5.0) builder (3.2.4) coderay (1.1.3) - concurrent-ruby (1.1.6) - i18n (1.8.3) + concurrent-ruby (1.1.10) + i18n (1.10.0) concurrent-ruby (~> 1.0) method_source (1.0.0) - minitest (5.14.1) + minitest (5.15.0) pry (0.13.1) coderay (~> 1.1) method_source (~> 1.0) - rake (13.0.1) - ruby-progressbar (1.10.1) - thread_safe (0.3.6) - tzinfo (1.2.7) - thread_safe (~> 0.1) - zeitwerk (2.4.0) + rake (13.0.6) + ruby-progressbar (1.11.0) + tzinfo (2.0.4) + concurrent-ruby (~> 1.0) + zeitwerk (2.5.4) PLATFORMS mswin64 @@ -48,7 +47,7 @@ DEPENDENCIES rake (~> 13.0, >= 13.0.1) RUBY VERSION - ruby 2.7.1p83 + ruby 3.1.2p20 BUNDLED WITH 2.1.4 diff --git a/lib/compiler.rb b/lib/compiler.rb index 1839f95ff..1ce544861 100644 --- a/lib/compiler.rb +++ b/lib/compiler.rb @@ -487,7 +487,7 @@ def log(message = nil) warn message end - def stuff(library, &block) + def stuff(library, &) source = File.join PRJ_ROOT, 'vendor', library target = File.join @options[:tmpdir], library @@ -498,7 +498,7 @@ def stuff(library, &block) log "=> Stuffing #{library}..." @utils.capture_run_io "stuff_#{library}" do - @utils.chdir(target, &block) + @utils.chdir(target, &) end log "=> Stuffed #{library}" @@ -789,7 +789,7 @@ def local_toolchain_env { 'CI' => 'true', 'GEM_PATH' => File.join(@ruby_install, 'lib', 'ruby', 'gems', self.class.ruby_api_version), - 'PATH' => "#{File.join(@ruby_install, 'bin')}:#{ENV['PATH']}", + 'PATH' => "#{File.join(@ruby_install, 'bin')}:#{ENV.fetch('PATH', nil)}", 'ENCLOSE_IO_USE_ORIGINAL_RUBY' => 'true', 'ENCLOSE_IO_RUBYC_1ST_PASS' => 'true', 'ENCLOSE_IO_RUBYC_2ND_PASS' => nil diff --git a/lib/compiler/utils.rb b/lib/compiler/utils.rb index 00a1a024f..9ff39ca70 100644 --- a/lib/compiler/utils.rb +++ b/lib/compiler/utils.rb @@ -77,9 +77,9 @@ def run_allow_failures(*args) status end - def chdir(path, &block) + def chdir(path, &) warn "-> cd #{path}" unless @options[:quiet] - Dir.chdir(path, &block) + Dir.chdir(path, &) warn "-> cd #{Dir.pwd}" unless @options[:quiet] end @@ -90,7 +90,7 @@ def cp(from, to) def cp_r(from, to, options = {}) warn "-> cp -r #{from.inspect} #{to.inspect}" unless @options[:quiet] - FileUtils.cp_r(from, to, options) + FileUtils.cp_r(from, to, **options) end def rm(path) diff --git a/test/roundtrip/test_rubyc.rb b/test/roundtrip/test_rubyc.rb index d25e2a2ff..95b514831 100644 --- a/test/roundtrip/test_rubyc.rb +++ b/test/roundtrip/test_rubyc.rb @@ -30,14 +30,14 @@ def ruby(*args) Thread.new do until (raw_line = stdout.gets).nil? - parsed_line = Hash[timestamp: Time.now, line: raw_line.to_s] + parsed_line = { timestamp: Time.now, line: raw_line.to_s } $stdout.puts "rubyc's ruby STDOUT: #{parsed_line}" end end Thread.new do until (raw_line = stderr.gets).nil? - parsed_line = Hash[timestamp: Time.now, line: raw_line.to_s] + parsed_line = { timestamp: Time.now, line: raw_line.to_s } warn "rubyc's ruby STDERR: #{parsed_line}" end end From 428e4142b901ee5edd2ef1085970ef4354106f3b Mon Sep 17 00:00:00 2001 From: Kevin McCormack Date: Wed, 8 Jun 2022 08:53:09 -0400 Subject: [PATCH 2/2] Update ruby source from v3_1_2 --- ruby/.appveyor.yml | 104 + ruby/.cirrus.yml | 64 + ruby/.dir-locals.el | 2 + ruby/.document | 10 +- ruby/.gdbinit | 26 +- ruby/.gitattributes | 8 + ruby/.github/CODEOWNERS | 10 + ruby/.github/SECURITY.md | 9 + ruby/.github/codeql/codeql-config.yml | 3 + ruby/.github/workflows/baseruby.yml | 65 + ruby/.github/workflows/bundled_gems.yml | 131 + ruby/.github/workflows/check_dependencies.yml | 65 + ruby/.github/workflows/codeql-analysis.yml | 61 + ruby/.github/workflows/compilers.yml | 247 + ruby/.github/workflows/mingw.yml | 148 + ruby/.github/workflows/mjit.yml | 97 + ruby/.github/workflows/spec_guards.yml | 53 + ruby/.github/workflows/ubuntu.yml | 129 + ruby/.github/workflows/windows.yml | 135 + ruby/.github/workflows/yjit-ubuntu.yml | 112 + ruby/.github/workflows/yjit_asm_tests.yml | 38 + ruby/.gitignore | 234 + ruby/.travis.yml | 510 +- ruby/BSDL | 6 +- ruby/CONTRIBUTING.md | 3 +- ruby/ChangeLog | 55893 ---- ruby/LEGAL | 750 +- ruby/NEWS | 826 - ruby/NEWS.md | 657 + ruby/README.ja.md | 46 +- ruby/README.md | 74 +- ruby/aclocal.m4 | 47 - ruby/addr2line.c | 361 +- ruby/addr2line.h | 5 +- ruby/appveyor.yml | 94 - ruby/array.c | 4597 +- ruby/array.rb | 69 + ruby/ast.c | 226 +- ruby/ast.rb | 266 +- ruby/ast.rbinc | 7 +- ruby/autogen.sh | 17 + ruby/basictest/test.rb | 16 +- ruby/benchmark/README.md | 12 +- ruby/benchmark/array_max_float.yml | 30 + ruby/benchmark/array_max_int.yml | 31 + ruby/benchmark/array_max_str.yml | 30 + ruby/benchmark/array_min.yml | 31 + ruby/benchmark/array_sample.yml | 4 + ruby/benchmark/attr_accessor.yml | 29 + ruby/benchmark/buffer_get.yml | 9 + ruby/benchmark/enum_lazy_flat_map.yml | 16 + ruby/benchmark/enum_lazy_zip.yml | 22 + ruby/benchmark/enum_tally.yml | 4 + ruby/benchmark/fiber_chain.yml | 0 ruby/benchmark/fiber_locals.yml | 8 + ruby/benchmark/float_methods.yml | 14 + ruby/benchmark/float_neg_posi.yml | 8 + ruby/benchmark/float_to_s.yml | 7 + ruby/benchmark/hash_aref_array.rb | 5 + ruby/benchmark/hash_defaults.yml | 6 + ruby/benchmark/hash_first.yml | 11 + ruby/benchmark/iseq_load_from_binary.yml | 25 + ruby/benchmark/ivar_extend.yml | 23 + ruby/benchmark/kernel_clone.yml | 6 + ruby/benchmark/kernel_float.yml | 5 + ruby/benchmark/kernel_tap.yml | 6 + ruby/benchmark/kernel_then.yml | 6 + ruby/benchmark/keyword_arguments.yml | 13 + .../lib/benchmark_driver/runner/mjit.rb | 34 + .../lib/benchmark_driver/runner/mjit_exec.rb | 6 +- .../lib/benchmark_driver/runner/ractor.rb | 122 + ruby/benchmark/masgn.yml | 29 + ruby/benchmark/method_bind_call.yml | 16 + ruby/benchmark/mjit_exec_jt2jt.yml | 4 +- ruby/benchmark/mjit_exec_vm2jt.yml | 4 +- ruby/benchmark/mjit_exec_vm2vm.yml | 4 +- ruby/benchmark/mjit_exivar.yml | 18 + ruby/benchmark/mjit_integer.yml | 32 + ruby/benchmark/mjit_kernel.yml | 20 + ruby/benchmark/mjit_leave.yml | 8 + ruby/benchmark/mjit_opt_cc_insns.yml | 27 + ruby/benchmark/mjit_struct_aref.yml | 10 + ruby/benchmark/nilclass.yml | 6 + ruby/benchmark/num_zero_p.yml | 8 + ruby/benchmark/numeric_methods.yml | 13 + ruby/benchmark/object_allocate.yml | 21 + ruby/benchmark/objspace_dump_all.yml | 13 + ruby/benchmark/pm_array.yml | 19 + ruby/benchmark/ractor_const.yml | 4 + ruby/benchmark/ractor_float_to_s.yml | 8 + ruby/benchmark/string_casecmp.yml | 26 + ruby/benchmark/string_casecmp_p.yml | 26 + ruby/benchmark/string_downcase.yml | 8 + ruby/benchmark/string_slice.yml | 11 + ruby/benchmark/string_split.yml | 25 +- ruby/benchmark/string_swapcase.yml | 8 + ruby/benchmark/string_upcase.yml | 8 + ruby/benchmark/time_at.yml | 7 + ruby/benchmark/time_new.yml | 4 + ruby/benchmark/time_parse.yml | 8 + ruby/benchmark/vm1_attr_ivar.yml | 14 - ruby/benchmark/vm1_attr_ivar_set.yml | 14 - ruby/benchmark/vm1_block.yml | 9 - ruby/benchmark/vm1_blockparam.yml | 7 - ruby/benchmark/vm1_blockparam_call.yml | 8 - ruby/benchmark/vm1_blockparam_pass.yml | 12 - ruby/benchmark/vm1_blockparam_yield.yml | 8 - ruby/benchmark/vm1_const.yml | 7 - ruby/benchmark/vm1_ensure.yml | 14 - ruby/benchmark/vm1_float_simple.yml | 8 - ruby/benchmark/vm1_gc_short_lived.yml | 9 - .../vm1_gc_short_with_complex_long.yml | 25 - ruby/benchmark/vm1_gc_short_with_long.yml | 13 - ruby/benchmark/vm1_gc_short_with_symbol.yml | 13 - ruby/benchmark/vm1_gc_wb_ary.yml | 12 - ruby/benchmark/vm1_gc_wb_ary_promoted.yml | 15 - ruby/benchmark/vm1_gc_wb_obj.yml | 15 - ruby/benchmark/vm1_gc_wb_obj_promoted.yml | 17 - ruby/benchmark/vm1_ivar.yml | 6 - ruby/benchmark/vm1_ivar_set.yml | 5 - ruby/benchmark/vm1_length.yml | 8 - ruby/benchmark/vm1_lvar_init.yml | 21 - ruby/benchmark/vm1_lvar_set.yml | 4 - ruby/benchmark/vm1_neq.yml | 7 - ruby/benchmark/vm1_not.yml | 6 - ruby/benchmark/vm1_rescue.yml | 6 - ruby/benchmark/vm1_simplereturn.yml | 7 - ruby/benchmark/vm1_swap.yml | 7 - ruby/benchmark/vm1_yield.yml | 13 - ruby/benchmark/vm2_array.yml | 4 - ruby/benchmark/vm2_bigarray.yml | 105 - ruby/benchmark/vm2_bighash.yml | 4 - ruby/benchmark/vm2_case.yml | 13 - ruby/benchmark/vm2_case_lit.yml | 23 - ruby/benchmark/vm2_defined_method.yml | 8 - ruby/benchmark/vm2_dstr.yml | 6 - ruby/benchmark/vm2_eval.yml | 4 - ruby/benchmark/vm2_fiber_allocate.yml | 8 - ruby/benchmark/vm2_fiber_count.yml | 10 - ruby/benchmark/vm2_fiber_reuse.yml | 14 - ruby/benchmark/vm2_fiber_reuse_gc.yml | 12 - ruby/benchmark/vm2_fiber_switch.yml | 9 - ruby/benchmark/vm2_freezestring.yml | 10 - ruby/benchmark/vm2_method.yml | 8 - ruby/benchmark/vm2_method_missing.yml | 11 - ruby/benchmark/vm2_method_with_block.yml | 8 - ruby/benchmark/vm2_module_ann_const_set.yml | 4 - ruby/benchmark/vm2_module_const_set.yml | 8 - ruby/benchmark/vm2_mutex.yml | 8 - ruby/benchmark/vm2_newlambda.yml | 4 - ruby/benchmark/vm2_poly_method.yml | 24 - ruby/benchmark/vm2_poly_method_ov.yml | 24 - ruby/benchmark/vm2_poly_same_method.yml | 25 - ruby/benchmark/vm2_poly_singleton.yml | 18 - ruby/benchmark/vm2_proc.yml | 12 - ruby/benchmark/vm2_raise1.yml | 16 - ruby/benchmark/vm2_raise2.yml | 16 - ruby/benchmark/vm2_regexp.yml | 8 - ruby/benchmark/vm2_send.yml | 11 - ruby/benchmark/vm2_string_literal.yml | 4 - ruby/benchmark/vm2_struct_big_aref_hi.yml | 7 - ruby/benchmark/vm2_struct_big_aref_lo.yml | 7 - ruby/benchmark/vm2_struct_big_aset.yml | 11 - ruby/benchmark/vm2_struct_big_href_hi.yml | 7 - ruby/benchmark/vm2_struct_big_href_lo.yml | 7 - ruby/benchmark/vm2_struct_big_hset.yml | 11 - ruby/benchmark/vm2_struct_small_aref.yml | 7 - ruby/benchmark/vm2_struct_small_aset.yml | 11 - ruby/benchmark/vm2_struct_small_href.yml | 7 - ruby/benchmark/vm2_struct_small_hset.yml | 7 - ruby/benchmark/vm2_super.yml | 17 - ruby/benchmark/vm2_unif1.yml | 7 - ruby/benchmark/vm2_zsuper.yml | 18 - ruby/benchmark/vm_array.yml | 4 + ruby/benchmark/vm_attr_ivar.yml | 14 + ruby/benchmark/vm_attr_ivar_set.yml | 14 + .../{vm3_backtrace.rb => vm_backtrace.rb} | 0 ruby/benchmark/vm_bigarray.yml | 105 + ruby/benchmark/vm_bighash.yml | 4 + ruby/benchmark/vm_block.yml | 9 + ruby/benchmark/vm_block_handler.yml | 27 + ruby/benchmark/vm_blockparam.yml | 7 + ruby/benchmark/vm_blockparam_call.yml | 8 + ruby/benchmark/vm_blockparam_pass.yml | 12 + ruby/benchmark/vm_blockparam_yield.yml | 8 + ruby/benchmark/vm_case.yml | 13 + ruby/benchmark/vm_case_classes.yml | 9 + ruby/benchmark/vm_case_lit.yml | 23 + ...rmethodcache.rb => vm_clearmethodcache.rb} | 0 ruby/benchmark/vm_const.yml | 7 + ruby/benchmark/vm_cvar.yml | 20 + ruby/benchmark/vm_defined_method.yml | 8 + ruby/benchmark/vm_dstr.yml | 6 + ruby/benchmark/vm_dstr_ary.rb | 6 + ruby/benchmark/vm_dstr_bool.rb | 7 + ruby/benchmark/vm_dstr_class_module.rb | 10 + ruby/benchmark/vm_dstr_digit.rb | 7 + ruby/benchmark/vm_dstr_int.rb | 5 + ruby/benchmark/vm_dstr_nil.rb | 6 + ruby/benchmark/vm_dstr_obj.rb | 6 + ruby/benchmark/vm_dstr_obj_def.rb | 8 + ruby/benchmark/vm_dstr_str.rb | 6 + ruby/benchmark/vm_dstr_sym.rb | 6 + ruby/benchmark/vm_ensure.yml | 14 + ruby/benchmark/vm_eval.yml | 4 + ruby/benchmark/vm_fiber_allocate.yml | 8 + ruby/benchmark/vm_fiber_count.yml | 10 + ruby/benchmark/vm_fiber_reuse.yml | 14 + ruby/benchmark/vm_fiber_reuse_gc.yml | 12 + ruby/benchmark/vm_fiber_switch.yml | 9 + ruby/benchmark/vm_float_simple.yml | 8 + ruby/benchmark/vm_freezestring.yml | 10 + ruby/benchmark/{vm3_gc.rb => vm_gc.rb} | 0 .../{vm3_gc_old_full.rb => vm_gc_old_full.rb} | 0 ...ld_immediate.rb => vm_gc_old_immediate.rb} | 0 .../{vm3_gc_old_lazy.rb => vm_gc_old_lazy.rb} | 0 ruby/benchmark/vm_gc_short_lived.yml | 9 + .../vm_gc_short_with_complex_long.yml | 25 + ruby/benchmark/vm_gc_short_with_long.yml | 13 + ruby/benchmark/vm_gc_short_with_symbol.yml | 13 + ruby/benchmark/vm_gc_wb_ary.yml | 12 + ruby/benchmark/vm_gc_wb_ary_promoted.yml | 15 + ruby/benchmark/vm_gc_wb_obj.yml | 15 + ruby/benchmark/vm_gc_wb_obj_promoted.yml | 17 + ruby/benchmark/vm_iclass_super.yml | 20 + ruby/benchmark/vm_ivar.yml | 6 + ruby/benchmark/vm_ivar_init.yml | 14 + ruby/benchmark/vm_ivar_of_class.yml | 12 + ruby/benchmark/vm_ivar_of_class_set.yml | 11 + ruby/benchmark/vm_ivar_set.yml | 5 + ruby/benchmark/vm_ivar_set_subclass.yml | 17 + ruby/benchmark/vm_length.yml | 8 + ruby/benchmark/vm_lvar_init.yml | 21 + ruby/benchmark/vm_lvar_set.yml | 4 + ruby/benchmark/vm_method.yml | 8 + ruby/benchmark/vm_method_missing.yml | 11 + ruby/benchmark/vm_method_with_block.yml | 8 + ruby/benchmark/vm_module_ann_const_set.yml | 4 + ruby/benchmark/vm_module_const_set.yml | 8 + ruby/benchmark/vm_mutex.yml | 8 + ruby/benchmark/vm_neq.yml | 7 + ruby/benchmark/vm_newlambda.yml | 4 + ruby/benchmark/vm_not.yml | 6 + ruby/benchmark/vm_poly_method.yml | 24 + ruby/benchmark/vm_poly_method_ov.yml | 24 + ruby/benchmark/vm_poly_same_method.yml | 25 + ruby/benchmark/vm_poly_singleton.yml | 18 + ruby/benchmark/vm_proc.yml | 12 + ruby/benchmark/vm_raise1.yml | 16 + ruby/benchmark/vm_raise2.yml | 16 + ruby/benchmark/vm_regexp.yml | 8 + ruby/benchmark/vm_rescue.yml | 6 + ruby/benchmark/vm_send.yml | 14 + ruby/benchmark/vm_send_cfunc.yml | 3 + ruby/benchmark/vm_simplereturn.yml | 7 + ruby/benchmark/vm_string_literal.yml | 4 + ruby/benchmark/vm_struct_big_aref_hi.yml | 7 + ruby/benchmark/vm_struct_big_aref_lo.yml | 7 + ruby/benchmark/vm_struct_big_aset.yml | 11 + ruby/benchmark/vm_struct_big_href_hi.yml | 7 + ruby/benchmark/vm_struct_big_href_lo.yml | 7 + ruby/benchmark/vm_struct_big_hset.yml | 11 + ruby/benchmark/vm_struct_small_aref.yml | 7 + ruby/benchmark/vm_struct_small_aset.yml | 11 + ruby/benchmark/vm_struct_small_href.yml | 7 + ruby/benchmark/vm_struct_small_hset.yml | 7 + ruby/benchmark/vm_super.yml | 17 + ruby/benchmark/vm_swap.yml | 7 + ruby/benchmark/vm_thread_condvar1.rb | 8 +- ruby/benchmark/vm_thread_condvar2.rb | 10 +- ruby/benchmark/vm_unif1.yml | 7 + ruby/benchmark/vm_yield.yml | 13 + ruby/benchmark/vm_zsuper.yml | 18 + ruby/bignum.c | 292 +- ruby/bin/bundle | 27 - ruby/bin/bundler | 27 - ruby/bin/irb | 27 - ruby/bin/racc | 27 - ruby/bin/racc2y | 27 - ruby/bin/rdoc | 27 - ruby/bin/ri | 27 - ruby/bin/y2racc | 27 - ruby/bootstraptest/pending.rb | 23 - ruby/bootstraptest/runner.rb | 30 +- ruby/bootstraptest/test_eval.rb | 39 +- ruby/bootstraptest/test_fiber.rb | 4 +- ruby/bootstraptest/test_flow.rb | 8 +- ruby/bootstraptest/test_insns.rb | 18 +- ruby/bootstraptest/test_jump.rb | 25 +- ruby/bootstraptest/test_proc.rb | 17 +- ruby/bootstraptest/test_ractor.rb | 1582 + ruby/bootstraptest/test_syntax.rb | 8 +- ruby/bootstraptest/test_thread.rb | 17 +- ruby/bootstraptest/test_yjit.rb | 2737 + ruby/bootstraptest/test_yjit_30k_ifelse.rb | 241023 +++++++++++++++ ruby/bootstraptest/test_yjit_30k_methods.rb | 121018 ++++++++ ruby/builtin.c | 30 +- ruby/builtin.h | 14 +- ruby/ccan/list/list.h | 2 +- ruby/class.c | 1312 +- ruby/common.mk | 14993 +- ruby/compar.c | 43 +- ruby/compile.c | 6334 +- ruby/complex.c | 190 +- ruby/configure | 128 +- ruby/configure.ac | 1367 +- ruby/constant.h | 15 +- ruby/cont.c | 1284 +- ruby/coroutine/amd64/Context.S | 4 +- ruby/coroutine/amd64/Context.h | 10 +- ruby/coroutine/arm32/Context.S | 23 +- ruby/coroutine/arm32/Context.h | 10 +- ruby/coroutine/arm64/Context.S | 22 +- ruby/coroutine/arm64/Context.h | 10 +- ruby/coroutine/copy/Context.c | 141 - ruby/coroutine/copy/Context.h | 86 - ruby/coroutine/emscripten/Context.c | 8 + ruby/coroutine/emscripten/Context.h | 77 + ruby/coroutine/ppc64le/Context.S | 9 +- ruby/coroutine/ppc64le/Context.h | 8 + ruby/coroutine/pthread/Context.c | 272 + ruby/coroutine/pthread/Context.h | 63 + ruby/coroutine/riscv64/Context.S | 87 + ruby/coroutine/riscv64/Context.h | 46 + ruby/coroutine/ucontext/Context.c | 5 +- ruby/coroutine/ucontext/Context.h | 11 +- ruby/coroutine/universal/Context.S | 12 + ruby/coroutine/universal/Context.h | 17 + ruby/coroutine/win32/Context.asm | 2 +- ruby/coroutine/win32/Context.h | 10 +- ruby/coroutine/win64/Context.S | 2 +- ruby/coroutine/win64/Context.asm | 2 +- ruby/coroutine/win64/Context.h | 10 +- ruby/coroutine/x86/Context.S | 4 +- ruby/coroutine/x86/Context.h | 10 +- ruby/coverage/README | 2 +- ruby/cygwin/GNUmakefile.in | 22 +- ruby/darray.h | 198 + ruby/debug.c | 295 +- ruby/debug_counter.c | 29 +- ruby/debug_counter.h | 161 +- ruby/defs/gmake.mk | 116 +- ruby/defs/id.def | 28 +- ruby/dir.c | 711 +- ruby/dir.rb | 314 + ruby/dln.c | 1007 +- ruby/dln.h | 26 +- ruby/dln_find.c | 40 +- ruby/doc/.document | 1 + ruby/doc/ChangeLog-0.60_to_1.1 | 8 +- ruby/doc/ChangeLog-1.9.3 | 30 +- ruby/doc/ChangeLog-2.0.0 | 6 +- ruby/doc/ChangeLog-2.1.0 | 4 +- ruby/doc/ChangeLog-2.4.0 | 4 +- ruby/doc/ChangeLog-YARV | 48 +- ruby/doc/NEWS-2.0.0 | 5 +- ruby/doc/NEWS-2.1.0 | 2 +- ruby/doc/NEWS-2.2.0 | 10 +- ruby/doc/NEWS-2.3.0 | 70 +- ruby/doc/NEWS-2.4.0 | 52 +- ruby/doc/NEWS-2.5.0 | 2 +- ruby/doc/NEWS-2.6.0 | 218 +- ruby/doc/NEWS-2.7.0 | 835 + ruby/doc/NEWS-3.0.0.md | 817 + ruby/doc/bsearch.rdoc | 120 + ruby/doc/case_mapping.rdoc | 116 + ruby/doc/contributing.rdoc | 59 +- ruby/doc/contributors.rdoc | 793 - ruby/doc/csv/arguments/io.rdoc | 5 + ruby/doc/csv/options/common/col_sep.rdoc | 63 + ruby/doc/csv/options/common/quote_char.rdoc | 42 + ruby/doc/csv/options/common/row_sep.rdoc | 100 + .../csv/options/generating/force_quotes.rdoc | 17 + .../csv/options/generating/quote_empty.rdoc | 12 + .../options/generating/write_converters.rdoc | 33 + .../options/generating/write_empty_value.rdoc | 15 + .../csv/options/generating/write_headers.rdoc | 29 + .../options/generating/write_nil_value.rdoc | 14 + ruby/doc/csv/options/parsing/converters.rdoc | 46 + ruby/doc/csv/options/parsing/empty_value.rdoc | 13 + .../csv/options/parsing/field_size_limit.rdoc | 39 + .../options/parsing/header_converters.rdoc | 43 + ruby/doc/csv/options/parsing/headers.rdoc | 63 + .../csv/options/parsing/liberal_parsing.rdoc | 19 + ruby/doc/csv/options/parsing/nil_value.rdoc | 12 + .../csv/options/parsing/return_headers.rdoc | 22 + ruby/doc/csv/options/parsing/skip_blanks.rdoc | 31 + ruby/doc/csv/options/parsing/skip_lines.rdoc | 37 + ruby/doc/csv/options/parsing/strip.rdoc | 15 + .../options/parsing/unconverted_fields.rdoc | 27 + ruby/doc/csv/recipes/filtering.rdoc | 156 + ruby/doc/csv/recipes/generating.rdoc | 244 + ruby/doc/csv/recipes/parsing.rdoc | 543 + ruby/doc/csv/recipes/recipes.rdoc | 6 + ruby/doc/dig_methods.rdoc | 82 + ruby/doc/documentation_guide.rdoc | 281 + ruby/doc/dtrace_probes.rdoc | 78 +- ruby/doc/extension.ja.rdoc | 69 +- ruby/doc/extension.rdoc | 233 +- ruby/doc/fiber.md | 232 + ruby/doc/globals.rdoc | 3 - ruby/doc/hacking.md | 85 + ruby/doc/implicit_conversion.rdoc | 198 + ruby/doc/irb/irb.rd.ja | 17 +- ruby/doc/keywords.rdoc | 2 + ruby/doc/maintainers.rdoc | 311 +- ruby/doc/make_cheatsheet.md | 124 + ruby/doc/marshal.rdoc | 4 +- ruby/doc/memory_view.md | 167 + ruby/doc/optparse/argument_converters.rdoc | 380 + ruby/doc/optparse/creates_option.rdoc | 7 + ruby/doc/optparse/option_params.rdoc | 509 + ruby/doc/optparse/ruby/argument_keywords.rb | 6 + ruby/doc/optparse/ruby/argument_strings.rb | 6 + ruby/doc/optparse/ruby/argv.rb | 2 + ruby/doc/optparse/ruby/array.rb | 6 + ruby/doc/optparse/ruby/basic.rb | 17 + ruby/doc/optparse/ruby/block.rb | 9 + ruby/doc/optparse/ruby/collected_options.rb | 8 + ruby/doc/optparse/ruby/custom_converter.rb | 9 + ruby/doc/optparse/ruby/date.rb | 6 + ruby/doc/optparse/ruby/datetime.rb | 6 + ruby/doc/optparse/ruby/decimal_integer.rb | 7 + ruby/doc/optparse/ruby/decimal_numeric.rb | 7 + ruby/doc/optparse/ruby/default_values.rb | 8 + ruby/doc/optparse/ruby/descriptions.rb | 15 + .../optparse/ruby/explicit_array_values.rb | 9 + .../doc/optparse/ruby/explicit_hash_values.rb | 9 + ruby/doc/optparse/ruby/false_class.rb | 6 + ruby/doc/optparse/ruby/float.rb | 6 + ruby/doc/optparse/ruby/help.rb | 18 + ruby/doc/optparse/ruby/help_banner.rb | 7 + ruby/doc/optparse/ruby/help_format.rb | 25 + ruby/doc/optparse/ruby/help_program_name.rb | 7 + ruby/doc/optparse/ruby/integer.rb | 6 + ruby/doc/optparse/ruby/long_names.rb | 9 + ruby/doc/optparse/ruby/long_optional.rb | 6 + ruby/doc/optparse/ruby/long_required.rb | 6 + ruby/doc/optparse/ruby/long_simple.rb | 9 + ruby/doc/optparse/ruby/long_with_negation.rb | 6 + ruby/doc/optparse/ruby/match_converter.rb | 9 + ruby/doc/optparse/ruby/matched_values.rb | 6 + ruby/doc/optparse/ruby/method.rb | 11 + ruby/doc/optparse/ruby/missing_options.rb | 12 + ruby/doc/optparse/ruby/mixed_names.rb | 12 + ruby/doc/optparse/ruby/name_abbrev.rb | 9 + ruby/doc/optparse/ruby/no_abbreviation.rb | 10 + ruby/doc/optparse/ruby/numeric.rb | 6 + ruby/doc/optparse/ruby/object.rb | 6 + ruby/doc/optparse/ruby/octal_integer.rb | 7 + ruby/doc/optparse/ruby/optional_argument.rb | 9 + ruby/doc/optparse/ruby/parse.rb | 13 + ruby/doc/optparse/ruby/parse_bang.rb | 13 + ruby/doc/optparse/ruby/proc.rb | 13 + ruby/doc/optparse/ruby/regexp.rb | 6 + ruby/doc/optparse/ruby/required_argument.rb | 9 + ruby/doc/optparse/ruby/shellwords.rb | 6 + ruby/doc/optparse/ruby/short_names.rb | 9 + ruby/doc/optparse/ruby/short_optional.rb | 6 + ruby/doc/optparse/ruby/short_range.rb | 6 + ruby/doc/optparse/ruby/short_required.rb | 6 + ruby/doc/optparse/ruby/short_simple.rb | 9 + ruby/doc/optparse/ruby/string.rb | 6 + ruby/doc/optparse/ruby/terminator.rb | 6 + ruby/doc/optparse/ruby/time.rb | 6 + ruby/doc/optparse/ruby/true_class.rb | 6 + ruby/doc/optparse/ruby/uri.rb | 6 + ruby/doc/optparse/tutorial.rdoc | 835 + ruby/doc/ractor.md | 952 + ruby/doc/regexp.rdoc | 50 +- ruby/doc/standard_library.rdoc | 90 +- ruby/doc/syntax.rdoc | 5 +- ruby/doc/syntax/calling_methods.rdoc | 54 +- ruby/doc/syntax/comments.rdoc | 216 + ruby/doc/syntax/control_expressions.rdoc | 16 +- ruby/doc/syntax/literals.rdoc | 231 +- ruby/doc/syntax/methods.rdoc | 167 +- ruby/doc/syntax/miscellaneous.rdoc | 30 + ruby/doc/syntax/pattern_matching.rdoc | 540 + ruby/doc/syntax/refinements.rdoc | 5 +- ruby/doc/time/in.rdoc | 7 + ruby/doc/time/mon-min.rdoc | 8 + ruby/doc/time/msec.rdoc | 2 + ruby/doc/time/nsec.rdoc | 2 + ruby/doc/time/sec.rdoc | 2 + ruby/doc/time/sec_i.rdoc | 1 + ruby/doc/time/usec.rdoc | 2 + ruby/doc/time/year.rdoc | 1 + ruby/doc/time/zone_and_in.rdoc | 8 + ruby/doc/yjit/yjit.md | 233 + ruby/doc/yjit/yjit_hacking.md | 75 + ruby/enc/Makefile.in | 2 + ruby/enc/ascii.c | 2 + ruby/enc/cp949.c | 2 +- ruby/enc/depend | 5933 +- ruby/enc/encdb.c | 2 +- ruby/enc/euc_jp.c | 4 +- ruby/enc/iso_8859_11.c | 2 +- ruby/enc/iso_8859_6.c | 2 +- ruby/enc/iso_8859_8.c | 2 +- ruby/enc/shift_jis.c | 4 +- ruby/enc/trans/escape.trans | 3 +- ruby/enc/trans/ibm720-tbl.rb | 122 + ruby/enc/trans/newline.trans | 10 +- ruby/enc/trans/single_byte.trans | 3 +- ruby/enc/unicode.c | 4 + .../enc/unicode/{12.1.0 => 13.0.0}/casefold.h | 4448 +- .../unicode/{12.1.0 => 13.0.0}/name2ctype.h | 5861 +- ruby/enc/unicode/case-folding.rb | 2 +- ruby/enc/windows_1250.c | 2 +- ruby/enc/windows_1251.c | 2 +- ruby/enc/windows_1252.c | 2 +- ruby/enc/windows_1253.c | 2 +- ruby/enc/windows_1254.c | 2 +- ruby/enc/windows_1257.c | 2 +- ruby/enc/windows_31j.c | 2 +- ruby/encindex.h | 5 +- ruby/enclose_io.h | 17 - ruby/enclose_io_common.h | 372 - ruby/enclose_io_prelude.h | 19 - ruby/enclose_io_unix.c | 1435 - ruby/enclose_io_unix.h | 48 - ruby/enclose_io_win32.c | 1325 - ruby/enclose_io_win32.h | 74 - ruby/enclose_io_winapi.h | 246 - ruby/encoding.c | 708 +- ruby/enum.c | 2606 +- ruby/enumerator.c | 705 +- ruby/error.c | 623 +- ruby/eval.c | 487 +- ruby/eval_error.c | 71 +- ruby/eval_intern.h | 101 +- ruby/eval_jump.c | 2 +- ruby/ext/-test-/RUBY_ALIGNOF/c.c | 15 + ruby/ext/-test-/RUBY_ALIGNOF/cpp.cpp | 9 + ruby/ext/-test-/RUBY_ALIGNOF/depend | 161 + ruby/ext/-test-/RUBY_ALIGNOF/extconf.rb | 6 + ruby/ext/-test-/arith_seq/extract/depend | 147 + ruby/ext/-test-/array/concat/depend | 161 + ruby/ext/-test-/array/concat/extconf.rb | 2 + ruby/ext/-test-/array/concat/to_ary_concat.c | 38 + ruby/ext/-test-/array/resize/depend | 147 + ruby/ext/-test-/array/resize/resize.c | 6 +- ruby/ext/-test-/auto_ext.rb | 1 + ruby/ext/-test-/bignum/big2str.c | 14 +- ruby/ext/-test-/bignum/bigzero.c | 2 +- ruby/ext/-test-/bignum/depend | 1047 +- ruby/ext/-test-/bignum/div.c | 10 +- ruby/ext/-test-/bignum/intpack.c | 42 +- ruby/ext/-test-/bignum/mul.c | 30 +- ruby/ext/-test-/bignum/str2big.c | 18 +- ruby/ext/-test-/bug-14834/depend | 147 + ruby/ext/-test-/bug-3571/depend | 147 + ruby/ext/-test-/bug-5832/depend | 147 + ruby/ext/-test-/bug_reporter/depend | 147 + ruby/ext/-test-/class/depend | 294 + ruby/ext/-test-/cxxanyargs/cxxanyargs.cpp | 346 +- ruby/ext/-test-/cxxanyargs/depend | 14 +- ruby/ext/-test-/cxxanyargs/extconf.rb | 19 +- ruby/ext/-test-/debug/depend | 441 + ruby/ext/-test-/enumerator_kw/depend | 147 + ruby/ext/-test-/exception/depend | 597 + ruby/ext/-test-/fatal/depend | 147 + ruby/ext/-test-/fatal/rb_fatal.c | 3 +- ruby/ext/-test-/file/depend | 459 + ruby/ext/-test-/float/depend | 294 + ruby/ext/-test-/funcall/depend | 147 + .../gvl/call_without_gvl/call_without_gvl.c | 10 +- ruby/ext/-test-/gvl/call_without_gvl/depend | 147 + ruby/ext/-test-/hash/depend | 294 + ruby/ext/-test-/integer/core_ext.c | 18 +- ruby/ext/-test-/integer/depend | 452 +- ruby/ext/-test-/iseq_load/depend | 147 + ruby/ext/-test-/iter/depend | 441 + ruby/ext/-test-/load/protect/depend | 147 + ruby/ext/-test-/marshal/compat/depend | 147 + ruby/ext/-test-/marshal/internal_ivar/depend | 147 + ruby/ext/-test-/marshal/usr/depend | 147 + ruby/ext/-test-/memory_status/depend | 147 + ruby/ext/-test-/memory_status/memory_status.c | 19 +- ruby/ext/-test-/memory_view/depend | 162 + ruby/ext/-test-/memory_view/extconf.rb | 5 + ruby/ext/-test-/memory_view/memory_view.c | 450 + ruby/ext/-test-/method/depend | 294 + ruby/ext/-test-/notimplement/depend | 147 + ruby/ext/-test-/num2int/depend | 147 + ruby/ext/-test-/path_to_class/depend | 147 + ruby/ext/-test-/popen_deadlock/depend | 148 + ruby/ext/-test-/popen_deadlock/extconf.rb | 1 + ruby/ext/-test-/postponed_job/depend | 147 + ruby/ext/-test-/postponed_job/postponed_job.c | 31 + ruby/ext/-test-/printf/depend | 156 + ruby/ext/-test-/proc/depend | 441 + ruby/ext/-test-/random/depend | 320 + ruby/ext/-test-/random/extconf.rb | 3 + ruby/ext/-test-/random/init.c | 11 + ruby/ext/-test-/random/loop.c | 110 + ruby/ext/-test-/rational/depend | 162 +- ruby/ext/-test-/rational/rat.c | 23 +- ruby/ext/-test-/rb_call_super_kw/depend | 147 + ruby/ext/-test-/recursion/depend | 147 + ruby/ext/-test-/regexp/depend | 294 + ruby/ext/-test-/scan_args/depend | 147 + ruby/ext/-test-/scan_args/scan_args.c | 10 - ruby/ext/-test-/st/foreach/depend | 147 + ruby/ext/-test-/st/numhash/depend | 147 + ruby/ext/-test-/st/numhash/numhash.c | 2 +- ruby/ext/-test-/st/update/depend | 147 + ruby/ext/-test-/string/capacity.c | 11 +- ruby/ext/-test-/string/coderange.c | 8 +- ruby/ext/-test-/string/cstr.c | 13 +- ruby/ext/-test-/string/depend | 2465 +- ruby/ext/-test-/string/enc_str_buf_cat.c | 14 + ruby/ext/-test-/string/fstring.c | 15 + ruby/ext/-test-/string/normalize.c | 2 +- ruby/ext/-test-/string/rb_interned_str.c | 14 + ruby/ext/-test-/struct/depend | 588 + ruby/ext/-test-/symbol/depend | 294 + ruby/ext/-test-/thread_fd/depend | 160 + ruby/ext/-test-/thread_fd/extconf.rb | 2 + ruby/ext/-test-/thread_fd/thread_fd.c | 30 + ruby/ext/-test-/thread_fd_close/depend | 13 - ruby/ext/-test-/thread_fd_close/extconf.rb | 2 - .../-test-/thread_fd_close/thread_fd_close.c | 14 - ruby/ext/-test-/time/depend | 446 + ruby/ext/-test-/time/leap_second.c | 2 +- ruby/ext/-test-/tracepoint/depend | 294 + ruby/ext/-test-/tracepoint/gc_hook.c | 3 - ruby/ext/-test-/typeddata/depend | 147 + ruby/ext/-test-/typeddata/typeddata.c | 4 +- ruby/ext/-test-/vm/depend | 147 + ruby/ext/-test-/wait/depend | 173 + ruby/ext/-test-/wait/extconf.rb | 2 + ruby/ext/-test-/wait/wait.c | 39 + ruby/ext/-test-/wait_for_single_fd/depend | 17 - ruby/ext/-test-/wait_for_single_fd/extconf.rb | 4 - .../wait_for_single_fd/wait_for_single_fd.c | 94 - ruby/ext/-test-/win32/console/attribute.c | 8 +- ruby/ext/.document | 17 +- ruby/ext/Setup | 1 - ruby/ext/Setup.atheos | 1 - ruby/ext/Setup.nt | 1 - ruby/ext/bigdecimal/bigdecimal.c | 2324 +- ruby/ext/bigdecimal/bigdecimal.gemspec | 19 +- ruby/ext/bigdecimal/bigdecimal.h | 233 +- ruby/ext/bigdecimal/bits.h | 141 + ruby/ext/bigdecimal/depend | 311 + ruby/ext/bigdecimal/extconf.rb | 47 +- ruby/ext/bigdecimal/feature.h | 68 + ruby/ext/bigdecimal/lib/bigdecimal/util.rb | 35 +- ruby/ext/bigdecimal/missing.c | 27 + ruby/ext/bigdecimal/missing.h | 235 + ruby/ext/bigdecimal/missing/dtoa.c | 3462 + ruby/ext/bigdecimal/static_assert.h | 54 + ruby/ext/bigdecimal/util/depend | 14 - ruby/ext/cgi/escape/depend | 156 + ruby/ext/cgi/escape/escape.c | 16 +- ruby/ext/continuation/depend | 147 + ruby/ext/coverage/coverage.c | 328 +- ruby/ext/coverage/depend | 161 + ruby/ext/date/date.gemspec | 9 +- ruby/ext/date/date_core.c | 511 +- ruby/ext/date/date_parse.c | 23 +- ruby/ext/date/date_strftime.c | 2 +- ruby/ext/date/date_strptime.c | 1 + ruby/ext/date/depend | 617 + ruby/ext/date/extconf.rb | 6 +- ruby/ext/date/lib/date.rb | 5 +- ruby/ext/date/prereq.mk | 9 +- ruby/ext/date/update-abbr | 25 +- ruby/ext/date/zonetab.h | 14 +- ruby/ext/date/zonetab.list | 14 +- ruby/ext/dbm/dbm.c | 1156 - ruby/ext/dbm/dbm.gemspec | 20 - ruby/ext/dbm/depend | 14 - ruby/ext/dbm/extconf.rb | 295 - ruby/ext/digest/bubblebabble/depend | 147 + ruby/ext/digest/bubblebabble/extconf.rb | 2 - ruby/ext/digest/depend | 147 + ruby/ext/digest/digest.c | 10 +- ruby/ext/digest/digest.gemspec | 44 + ruby/ext/digest/digest.h | 8 + ruby/ext/digest/digest_conf.rb | 69 +- ruby/ext/digest/extconf.rb | 2 +- ruby/ext/digest/lib/digest.rb | 18 +- ruby/ext/digest/lib/digest/loader.rb | 3 + ruby/ext/digest/lib/digest/version.rb | 5 + ruby/ext/digest/md5/depend | 311 +- ruby/ext/digest/md5/extconf.rb | 2 - ruby/ext/digest/md5/md5.c | 2 +- ruby/ext/digest/md5/md5init.c | 9 +- ruby/ext/digest/md5/md5ossl.h | 15 - ruby/ext/digest/rmd160/depend | 311 +- ruby/ext/digest/rmd160/extconf.rb | 6 +- ruby/ext/digest/rmd160/rmd160init.c | 9 +- ruby/ext/digest/rmd160/rmd160ossl.h | 20 - ruby/ext/digest/sha1/depend | 311 +- ruby/ext/digest/sha1/extconf.rb | 4 +- ruby/ext/digest/sha1/sha1init.c | 9 +- ruby/ext/digest/sha1/sha1ossl.h | 22 - ruby/ext/digest/sha2/depend | 310 +- ruby/ext/digest/sha2/extconf.rb | 4 +- ruby/ext/digest/sha2/lib/sha2.rb | 2 +- ruby/ext/digest/sha2/lib/sha2/loader.rb | 3 + ruby/ext/digest/sha2/sha2.c | 14 +- ruby/ext/digest/sha2/sha2init.c | 8 +- ruby/ext/digest/sha2/sha2ossl.h | 27 - ruby/ext/etc/depend | 157 + ruby/ext/etc/etc.c | 72 +- ruby/ext/etc/etc.gemspec | 3 +- ruby/ext/etc/extconf.rb | 2 + ruby/ext/extmk.rb | 1 + ruby/ext/fcntl/depend | 147 + ruby/ext/fcntl/fcntl.c | 14 + ruby/ext/fcntl/fcntl.gemspec | 8 +- ruby/ext/fiber/depend | 3 - ruby/ext/fiber/extconf.rb | 4 - ruby/ext/fiber/fiber.c | 8 - ruby/ext/fiddle/closure.c | 35 +- ruby/ext/fiddle/conversions.c | 221 +- ruby/ext/fiddle/conversions.h | 17 +- ruby/ext/fiddle/depend | 1231 + ruby/ext/fiddle/extconf.rb | 134 +- ruby/ext/fiddle/extlibs | 12 +- ruby/ext/fiddle/fiddle.c | 167 +- ruby/ext/fiddle/fiddle.gemspec | 57 +- ruby/ext/fiddle/fiddle.h | 131 +- ruby/ext/fiddle/function.c | 357 +- ruby/ext/fiddle/handle.c | 74 +- ruby/ext/fiddle/lib/fiddle.rb | 16 +- ruby/ext/fiddle/lib/fiddle/cparser.rb | 121 +- ruby/ext/fiddle/lib/fiddle/function.rb | 11 + ruby/ext/fiddle/lib/fiddle/import.rb | 8 +- ruby/ext/fiddle/lib/fiddle/struct.rb | 381 +- ruby/ext/fiddle/lib/fiddle/types.rb | 35 +- ruby/ext/fiddle/lib/fiddle/version.rb | 3 + ruby/ext/fiddle/libffi-3.2.1/ChangeLog | 5505 - ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libffi | 584 - .../fiddle/libffi-3.2.1/ChangeLog.libffi-3.1 | 6000 - ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libgcj | 40 - ruby/ext/fiddle/libffi-3.2.1/ChangeLog.v1 | 764 - ruby/ext/fiddle/libffi-3.2.1/LICENSE | 21 - ruby/ext/fiddle/libffi-3.2.1/Makefile.am | 258 - ruby/ext/fiddle/libffi-3.2.1/Makefile.in | 2177 - ruby/ext/fiddle/libffi-3.2.1/README | 447 - ruby/ext/fiddle/libffi-3.2.1/acinclude.m4 | 92 - ruby/ext/fiddle/libffi-3.2.1/aclocal.m4 | 1961 - ruby/ext/fiddle/libffi-3.2.1/compile | 347 - ruby/ext/fiddle/libffi-3.2.1/config.guess | 1558 - ruby/ext/fiddle/libffi-3.2.1/config.sub | 1788 - ruby/ext/fiddle/libffi-3.2.1/configure | 21768 -- ruby/ext/fiddle/libffi-3.2.1/configure.ac | 625 - ruby/ext/fiddle/libffi-3.2.1/depcomp | 791 - ruby/ext/fiddle/libffi-3.2.1/doc/libffi.info | 765 - ruby/ext/fiddle/libffi-3.2.1/doc/libffi.texi | 770 - ruby/ext/fiddle/libffi-3.2.1/doc/stamp-vti | 4 - ruby/ext/fiddle/libffi-3.2.1/doc/version.texi | 4 - ruby/ext/fiddle/libffi-3.2.1/fficonfig.h.in | 214 - .../generate-darwin-source-and-headers.py | 209 - .../fiddle/libffi-3.2.1/include/Makefile.am | 9 - .../fiddle/libffi-3.2.1/include/Makefile.in | 587 - ruby/ext/fiddle/libffi-3.2.1/include/ffi.h.in | 492 - .../fiddle/libffi-3.2.1/include/ffi_common.h | 132 - ruby/ext/fiddle/libffi-3.2.1/install-sh | 527 - ruby/ext/fiddle/libffi-3.2.1/libffi.pc.in | 11 - .../libffi.xcodeproj/project.pbxproj | 637 - ruby/ext/fiddle/libffi-3.2.1/libtool-ldflags | 106 - ruby/ext/fiddle/libffi-3.2.1/libtool-version | 29 - ruby/ext/fiddle/libffi-3.2.1/ltmain.sh | 9655 - ruby/ext/fiddle/libffi-3.2.1/m4/asmcfi.m4 | 13 - .../fiddle/libffi-3.2.1/m4/ax_append_flag.m4 | 69 - .../fiddle/libffi-3.2.1/m4/ax_cc_maxopt.m4 | 181 - .../libffi-3.2.1/m4/ax_cflags_warn_all.m4 | 122 - .../libffi-3.2.1/m4/ax_check_compile_flag.m4 | 72 - .../libffi-3.2.1/m4/ax_compiler_vendor.m4 | 84 - .../libffi-3.2.1/m4/ax_configure_args.m4 | 70 - .../libffi-3.2.1/m4/ax_enable_builddir.m4 | 301 - .../fiddle/libffi-3.2.1/m4/ax_gcc_archflag.m4 | 225 - .../libffi-3.2.1/m4/ax_gcc_x86_cpuid.m4 | 79 - ruby/ext/fiddle/libffi-3.2.1/m4/libtool.m4 | 7986 - ruby/ext/fiddle/libffi-3.2.1/m4/ltoptions.m4 | 384 - ruby/ext/fiddle/libffi-3.2.1/m4/ltsugar.m4 | 123 - ruby/ext/fiddle/libffi-3.2.1/m4/ltversion.m4 | 23 - .../ext/fiddle/libffi-3.2.1/m4/lt~obsolete.m4 | 98 - ruby/ext/fiddle/libffi-3.2.1/man/Makefile.am | 8 - ruby/ext/fiddle/libffi-3.2.1/man/Makefile.in | 541 - ruby/ext/fiddle/libffi-3.2.1/man/ffi.3 | 41 - ruby/ext/fiddle/libffi-3.2.1/man/ffi_call.3 | 103 - .../fiddle/libffi-3.2.1/man/ffi_prep_cif.3 | 68 - .../libffi-3.2.1/man/ffi_prep_cif_var.3 | 73 - ruby/ext/fiddle/libffi-3.2.1/mdate-sh | 224 - ruby/ext/fiddle/libffi-3.2.1/missing | 215 - ruby/ext/fiddle/libffi-3.2.1/msvcc.sh | 257 - .../ext/fiddle/libffi-3.2.1/src/aarch64/ffi.c | 1179 - .../libffi-3.2.1/src/aarch64/ffitarget.h | 63 - .../fiddle/libffi-3.2.1/src/aarch64/sysv.S | 333 - ruby/ext/fiddle/libffi-3.2.1/src/alpha/ffi.c | 288 - .../fiddle/libffi-3.2.1/src/alpha/ffitarget.h | 53 - ruby/ext/fiddle/libffi-3.2.1/src/alpha/osf.S | 387 - .../fiddle/libffi-3.2.1/src/arc/arcompact.S | 135 - ruby/ext/fiddle/libffi-3.2.1/src/arc/ffi.c | 268 - .../fiddle/libffi-3.2.1/src/arc/ffitarget.h | 53 - ruby/ext/fiddle/libffi-3.2.1/src/arm/ffi.c | 931 - .../fiddle/libffi-3.2.1/src/arm/ffitarget.h | 71 - .../fiddle/libffi-3.2.1/src/arm/gentramp.sh | 118 - ruby/ext/fiddle/libffi-3.2.1/src/arm/sysv.S | 491 - .../fiddle/libffi-3.2.1/src/arm/trampoline.S | 4450 - ruby/ext/fiddle/libffi-3.2.1/src/avr32/ffi.c | 423 - .../fiddle/libffi-3.2.1/src/avr32/ffitarget.h | 55 - ruby/ext/fiddle/libffi-3.2.1/src/avr32/sysv.S | 208 - ruby/ext/fiddle/libffi-3.2.1/src/bfin/ffi.c | 196 - .../fiddle/libffi-3.2.1/src/bfin/ffitarget.h | 43 - ruby/ext/fiddle/libffi-3.2.1/src/bfin/sysv.S | 179 - ruby/ext/fiddle/libffi-3.2.1/src/closures.c | 688 - ruby/ext/fiddle/libffi-3.2.1/src/cris/ffi.c | 386 - .../fiddle/libffi-3.2.1/src/cris/ffitarget.h | 56 - ruby/ext/fiddle/libffi-3.2.1/src/cris/sysv.S | 215 - ruby/ext/fiddle/libffi-3.2.1/src/debug.c | 64 - ruby/ext/fiddle/libffi-3.2.1/src/dlmalloc.c | 5161 - ruby/ext/fiddle/libffi-3.2.1/src/frv/eabi.S | 128 - ruby/ext/fiddle/libffi-3.2.1/src/frv/ffi.c | 292 - .../fiddle/libffi-3.2.1/src/frv/ffitarget.h | 62 - ruby/ext/fiddle/libffi-3.2.1/src/ia64/ffi.c | 586 - .../fiddle/libffi-3.2.1/src/ia64/ffitarget.h | 55 - .../fiddle/libffi-3.2.1/src/ia64/ia64_flags.h | 40 - ruby/ext/fiddle/libffi-3.2.1/src/ia64/unix.S | 560 - .../fiddle/libffi-3.2.1/src/java_raw_api.c | 374 - ruby/ext/fiddle/libffi-3.2.1/src/m32r/ffi.c | 232 - .../fiddle/libffi-3.2.1/src/m32r/ffitarget.h | 53 - ruby/ext/fiddle/libffi-3.2.1/src/m32r/sysv.S | 121 - ruby/ext/fiddle/libffi-3.2.1/src/m68k/ffi.c | 362 - .../fiddle/libffi-3.2.1/src/m68k/ffitarget.h | 54 - ruby/ext/fiddle/libffi-3.2.1/src/m68k/sysv.S | 330 - ruby/ext/fiddle/libffi-3.2.1/src/m88k/ffi.c | 400 - .../fiddle/libffi-3.2.1/src/m88k/ffitarget.h | 49 - ruby/ext/fiddle/libffi-3.2.1/src/m88k/obsd.S | 209 - ruby/ext/fiddle/libffi-3.2.1/src/metag/ffi.c | 330 - .../fiddle/libffi-3.2.1/src/metag/ffitarget.h | 53 - ruby/ext/fiddle/libffi-3.2.1/src/metag/sysv.S | 311 - .../fiddle/libffi-3.2.1/src/microblaze/ffi.c | 321 - .../libffi-3.2.1/src/microblaze/ffitarget.h | 53 - .../fiddle/libffi-3.2.1/src/microblaze/sysv.S | 302 - ruby/ext/fiddle/libffi-3.2.1/src/mips/ffi.c | 1050 - .../fiddle/libffi-3.2.1/src/mips/ffitarget.h | 247 - ruby/ext/fiddle/libffi-3.2.1/src/mips/n32.S | 576 - ruby/ext/fiddle/libffi-3.2.1/src/mips/o32.S | 381 - ruby/ext/fiddle/libffi-3.2.1/src/moxie/eabi.S | 101 - ruby/ext/fiddle/libffi-3.2.1/src/moxie/ffi.c | 272 - .../fiddle/libffi-3.2.1/src/moxie/ffitarget.h | 52 - ruby/ext/fiddle/libffi-3.2.1/src/nios2/ffi.c | 304 - .../fiddle/libffi-3.2.1/src/nios2/ffitarget.h | 52 - ruby/ext/fiddle/libffi-3.2.1/src/nios2/sysv.S | 136 - ruby/ext/fiddle/libffi-3.2.1/src/or1k/ffi.c | 328 - .../fiddle/libffi-3.2.1/src/or1k/ffitarget.h | 58 - ruby/ext/fiddle/libffi-3.2.1/src/or1k/sysv.S | 107 - ruby/ext/fiddle/libffi-3.2.1/src/pa/ffi.c | 719 - .../fiddle/libffi-3.2.1/src/pa/ffitarget.h | 85 - ruby/ext/fiddle/libffi-3.2.1/src/pa/hpux32.S | 368 - ruby/ext/fiddle/libffi-3.2.1/src/pa/linux.S | 357 - .../ext/fiddle/libffi-3.2.1/src/powerpc/aix.S | 328 - .../libffi-3.2.1/src/powerpc/aix_closure.S | 447 - .../ext/fiddle/libffi-3.2.1/src/powerpc/asm.h | 125 - .../fiddle/libffi-3.2.1/src/powerpc/darwin.S | 378 - .../libffi-3.2.1/src/powerpc/darwin_closure.S | 571 - .../ext/fiddle/libffi-3.2.1/src/powerpc/ffi.c | 141 - .../libffi-3.2.1/src/powerpc/ffi_darwin.c | 1359 - .../libffi-3.2.1/src/powerpc/ffi_linux64.c | 943 - .../libffi-3.2.1/src/powerpc/ffi_powerpc.h | 77 - .../libffi-3.2.1/src/powerpc/ffi_sysv.c | 931 - .../libffi-3.2.1/src/powerpc/ffitarget.h | 183 - .../fiddle/libffi-3.2.1/src/powerpc/linux64.S | 261 - .../src/powerpc/linux64_closure.S | 392 - .../libffi-3.2.1/src/powerpc/ppc_closure.S | 384 - .../fiddle/libffi-3.2.1/src/powerpc/sysv.S | 220 - ruby/ext/fiddle/libffi-3.2.1/src/prep_cif.c | 253 - ruby/ext/fiddle/libffi-3.2.1/src/raw_api.c | 267 - ruby/ext/fiddle/libffi-3.2.1/src/s390/ffi.c | 792 - .../fiddle/libffi-3.2.1/src/s390/ffitarget.h | 69 - ruby/ext/fiddle/libffi-3.2.1/src/s390/sysv.S | 434 - ruby/ext/fiddle/libffi-3.2.1/src/sh/ffi.c | 717 - .../fiddle/libffi-3.2.1/src/sh/ffitarget.h | 54 - ruby/ext/fiddle/libffi-3.2.1/src/sh/sysv.S | 850 - ruby/ext/fiddle/libffi-3.2.1/src/sh64/ffi.c | 469 - .../fiddle/libffi-3.2.1/src/sh64/ffitarget.h | 58 - ruby/ext/fiddle/libffi-3.2.1/src/sh64/sysv.S | 539 - ruby/ext/fiddle/libffi-3.2.1/src/sparc/ffi.c | 681 - .../fiddle/libffi-3.2.1/src/sparc/ffitarget.h | 73 - ruby/ext/fiddle/libffi-3.2.1/src/sparc/v8.S | 346 - ruby/ext/fiddle/libffi-3.2.1/src/sparc/v9.S | 307 - ruby/ext/fiddle/libffi-3.2.1/src/tile/ffi.c | 355 - .../fiddle/libffi-3.2.1/src/tile/ffitarget.h | 65 - ruby/ext/fiddle/libffi-3.2.1/src/tile/tile.S | 360 - ruby/ext/fiddle/libffi-3.2.1/src/types.c | 106 - ruby/ext/fiddle/libffi-3.2.1/src/vax/elfbsd.S | 195 - ruby/ext/fiddle/libffi-3.2.1/src/vax/ffi.c | 276 - .../fiddle/libffi-3.2.1/src/vax/ffitarget.h | 49 - ruby/ext/fiddle/libffi-3.2.1/src/x86/darwin.S | 444 - .../fiddle/libffi-3.2.1/src/x86/darwin64.S | 416 - ruby/ext/fiddle/libffi-3.2.1/src/x86/ffi.c | 937 - ruby/ext/fiddle/libffi-3.2.1/src/x86/ffi64.c | 676 - .../fiddle/libffi-3.2.1/src/x86/ffitarget.h | 152 - .../ext/fiddle/libffi-3.2.1/src/x86/freebsd.S | 463 - ruby/ext/fiddle/libffi-3.2.1/src/x86/sysv.S | 483 - ruby/ext/fiddle/libffi-3.2.1/src/x86/unix64.S | 432 - ruby/ext/fiddle/libffi-3.2.1/src/x86/win32.S | 1351 - ruby/ext/fiddle/libffi-3.2.1/src/x86/win64.S | 519 - ruby/ext/fiddle/libffi-3.2.1/src/xtensa/ffi.c | 298 - .../libffi-3.2.1/src/xtensa/ffitarget.h | 53 - .../ext/fiddle/libffi-3.2.1/src/xtensa/sysv.S | 253 - .../fiddle/libffi-3.2.1/testsuite/Makefile.am | 85 - .../fiddle/libffi-3.2.1/testsuite/Makefile.in | 590 - .../libffi-3.2.1/testsuite/config/default.exp | 1 - .../libffi-3.2.1/testsuite/lib/libffi.exp | 413 - .../testsuite/lib/target-libpath.exp | 283 - .../libffi-3.2.1/testsuite/lib/wrapper.exp | 45 - .../testsuite/libffi.call/call.exp | 43 - .../testsuite/libffi.call/closure_fn0.c | 89 - .../testsuite/libffi.call/closure_fn1.c | 81 - .../testsuite/libffi.call/closure_fn2.c | 81 - .../testsuite/libffi.call/closure_fn3.c | 82 - .../testsuite/libffi.call/closure_fn4.c | 89 - .../testsuite/libffi.call/closure_fn5.c | 92 - .../testsuite/libffi.call/closure_fn6.c | 90 - .../testsuite/libffi.call/closure_loc_fn0.c | 95 - .../testsuite/libffi.call/closure_simple.c | 55 - .../testsuite/libffi.call/cls_12byte.c | 94 - .../testsuite/libffi.call/cls_16byte.c | 95 - .../testsuite/libffi.call/cls_18byte.c | 96 - .../testsuite/libffi.call/cls_19byte.c | 102 - .../testsuite/libffi.call/cls_1_1byte.c | 89 - .../testsuite/libffi.call/cls_20byte.c | 91 - .../testsuite/libffi.call/cls_20byte1.c | 93 - .../testsuite/libffi.call/cls_24byte.c | 113 - .../testsuite/libffi.call/cls_2byte.c | 90 - .../testsuite/libffi.call/cls_3_1byte.c | 95 - .../testsuite/libffi.call/cls_3byte1.c | 90 - .../testsuite/libffi.call/cls_3byte2.c | 90 - .../testsuite/libffi.call/cls_4_1byte.c | 98 - .../testsuite/libffi.call/cls_4byte.c | 90 - .../testsuite/libffi.call/cls_5_1_byte.c | 109 - .../testsuite/libffi.call/cls_5byte.c | 98 - .../testsuite/libffi.call/cls_64byte.c | 124 - .../testsuite/libffi.call/cls_6_1_byte.c | 113 - .../testsuite/libffi.call/cls_6byte.c | 99 - .../testsuite/libffi.call/cls_7_1_byte.c | 117 - .../testsuite/libffi.call/cls_7byte.c | 97 - .../testsuite/libffi.call/cls_8byte.c | 88 - .../testsuite/libffi.call/cls_9byte1.c | 90 - .../testsuite/libffi.call/cls_9byte2.c | 91 - .../testsuite/libffi.call/cls_align_double.c | 93 - .../testsuite/libffi.call/cls_align_float.c | 91 - .../libffi.call/cls_align_longdouble.c | 92 - .../libffi.call/cls_align_longdouble_split.c | 134 - .../libffi.call/cls_align_longdouble_split2.c | 117 - .../testsuite/libffi.call/cls_align_pointer.c | 95 - .../testsuite/libffi.call/cls_align_sint16.c | 91 - .../testsuite/libffi.call/cls_align_sint32.c | 91 - .../testsuite/libffi.call/cls_align_sint64.c | 92 - .../testsuite/libffi.call/cls_align_uint16.c | 91 - .../testsuite/libffi.call/cls_align_uint32.c | 91 - .../testsuite/libffi.call/cls_align_uint64.c | 93 - .../testsuite/libffi.call/cls_dbls_struct.c | 66 - .../testsuite/libffi.call/cls_double.c | 43 - .../testsuite/libffi.call/cls_double_va.c | 61 - .../testsuite/libffi.call/cls_float.c | 42 - .../testsuite/libffi.call/cls_longdouble.c | 107 - .../testsuite/libffi.call/cls_longdouble_va.c | 61 - .../testsuite/libffi.call/cls_multi_schar.c | 74 - .../testsuite/libffi.call/cls_multi_sshort.c | 74 - .../libffi.call/cls_multi_sshortchar.c | 86 - .../testsuite/libffi.call/cls_multi_uchar.c | 91 - .../testsuite/libffi.call/cls_multi_ushort.c | 74 - .../libffi.call/cls_multi_ushortchar.c | 86 - .../testsuite/libffi.call/cls_pointer.c | 74 - .../testsuite/libffi.call/cls_pointer_stack.c | 142 - .../testsuite/libffi.call/cls_schar.c | 44 - .../testsuite/libffi.call/cls_sint.c | 42 - .../testsuite/libffi.call/cls_sshort.c | 42 - .../testsuite/libffi.call/cls_struct_va1.c | 114 - .../testsuite/libffi.call/cls_uchar.c | 42 - .../testsuite/libffi.call/cls_uchar_va.c | 44 - .../testsuite/libffi.call/cls_uint.c | 43 - .../testsuite/libffi.call/cls_uint_va.c | 45 - .../testsuite/libffi.call/cls_ulong_va.c | 45 - .../testsuite/libffi.call/cls_ulonglong.c | 47 - .../testsuite/libffi.call/cls_ushort.c | 43 - .../testsuite/libffi.call/cls_ushort_va.c | 44 - .../testsuite/libffi.call/err_bad_abi.c | 36 - .../testsuite/libffi.call/err_bad_typedef.c | 26 - .../testsuite/libffi.call/ffitest.h | 135 - .../testsuite/libffi.call/float.c | 59 - .../testsuite/libffi.call/float1.c | 58 - .../testsuite/libffi.call/float2.c | 58 - .../testsuite/libffi.call/float3.c | 72 - .../testsuite/libffi.call/float4.c | 62 - .../testsuite/libffi.call/float_va.c | 107 - .../testsuite/libffi.call/huge_struct.c | 343 - .../libffi-3.2.1/testsuite/libffi.call/many.c | 59 - .../testsuite/libffi.call/many2.c | 57 - .../testsuite/libffi.call/negint.c | 52 - .../testsuite/libffi.call/nested_struct.c | 152 - .../testsuite/libffi.call/nested_struct1.c | 161 - .../testsuite/libffi.call/nested_struct10.c | 133 - .../testsuite/libffi.call/nested_struct11.c | 121 - .../testsuite/libffi.call/nested_struct2.c | 110 - .../testsuite/libffi.call/nested_struct3.c | 111 - .../testsuite/libffi.call/nested_struct4.c | 111 - .../testsuite/libffi.call/nested_struct5.c | 112 - .../testsuite/libffi.call/nested_struct6.c | 131 - .../testsuite/libffi.call/nested_struct7.c | 111 - .../testsuite/libffi.call/nested_struct8.c | 131 - .../testsuite/libffi.call/nested_struct9.c | 131 - .../testsuite/libffi.call/problem1.c | 90 - .../testsuite/libffi.call/promotion.c | 59 - .../testsuite/libffi.call/pyobjc-tc.c | 114 - .../testsuite/libffi.call/return_dbl.c | 36 - .../testsuite/libffi.call/return_dbl1.c | 43 - .../testsuite/libffi.call/return_dbl2.c | 42 - .../testsuite/libffi.call/return_fl.c | 35 - .../testsuite/libffi.call/return_fl1.c | 36 - .../testsuite/libffi.call/return_fl2.c | 49 - .../testsuite/libffi.call/return_fl3.c | 42 - .../testsuite/libffi.call/return_ldl.c | 34 - .../testsuite/libffi.call/return_ll.c | 41 - .../testsuite/libffi.call/return_ll1.c | 43 - .../testsuite/libffi.call/return_sc.c | 36 - .../testsuite/libffi.call/return_sl.c | 38 - .../testsuite/libffi.call/return_uc.c | 38 - .../testsuite/libffi.call/return_ul.c | 38 - .../testsuite/libffi.call/stret_large.c | 145 - .../testsuite/libffi.call/stret_large2.c | 148 - .../testsuite/libffi.call/stret_medium.c | 124 - .../testsuite/libffi.call/stret_medium2.c | 125 - .../testsuite/libffi.call/strlen.c | 44 - .../testsuite/libffi.call/strlen2.c | 49 - .../testsuite/libffi.call/strlen3.c | 49 - .../testsuite/libffi.call/strlen4.c | 55 - .../testsuite/libffi.call/struct1.c | 67 - .../testsuite/libffi.call/struct2.c | 67 - .../testsuite/libffi.call/struct3.c | 60 - .../testsuite/libffi.call/struct4.c | 64 - .../testsuite/libffi.call/struct5.c | 66 - .../testsuite/libffi.call/struct6.c | 64 - .../testsuite/libffi.call/struct7.c | 74 - .../testsuite/libffi.call/struct8.c | 81 - .../testsuite/libffi.call/struct9.c | 68 - .../testsuite/libffi.call/testclosure.c | 70 - .../testsuite/libffi.call/uninitialized.c | 61 - .../testsuite/libffi.call/unwindtest.cc | 117 - .../libffi.call/unwindtest_ffi_call.cc | 54 - .../libffi-3.2.1/testsuite/libffi.call/va_1.c | 196 - .../testsuite/libffi.call/va_struct1.c | 121 - .../testsuite/libffi.call/va_struct2.c | 123 - .../testsuite/libffi.call/va_struct3.c | 125 - ruby/ext/fiddle/libffi-3.2.1/texinfo.tex | 10079 - ruby/ext/fiddle/memory_view.c | 321 + ruby/ext/fiddle/pinned.c | 123 + ruby/ext/fiddle/pointer.c | 171 +- ruby/ext/fiddle/win32/fficonfig.h | 0 ruby/ext/fiddle/win32/libffi-config.rb | 2 +- ruby/ext/fiddle/win32/libffi.mk.tmpl | 0 ruby/ext/gdbm/README | 1 - ruby/ext/gdbm/depend | 14 - ruby/ext/gdbm/extconf.rb | 19 - ruby/ext/gdbm/gdbm.c | 1306 - ruby/ext/gdbm/gdbm.gemspec | 21 - ruby/ext/io/console/console.c | 98 +- ruby/ext/io/console/depend | 157 + ruby/ext/io/console/extconf.rb | 7 +- ruby/ext/io/console/io-console.gemspec | 24 +- ruby/ext/io/nonblock/depend | 156 + ruby/ext/io/nonblock/io-nonblock.gemspec | 25 + ruby/ext/io/wait/depend | 157 + ruby/ext/io/wait/extconf.rb | 1 + ruby/ext/io/wait/io-wait.gemspec | 27 + ruby/ext/io/wait/wait.c | 163 +- ruby/ext/json/VERSION | 1 + ruby/ext/json/extconf.rb | 1 + ruby/ext/json/generator/depend | 157 + ruby/ext/json/generator/generator.c | 155 +- ruby/ext/json/generator/generator.h | 7 +- ruby/ext/json/json.gemspec | 98 +- ruby/ext/json/lib/json.rb | 578 +- ruby/ext/json/lib/json/add/complex.rb | 1 - ruby/ext/json/lib/json/add/rational.rb | 1 - ruby/ext/json/lib/json/common.rb | 493 +- ruby/ext/json/lib/json/version.rb | 2 +- ruby/ext/json/parser/depend | 156 + ruby/ext/json/parser/extconf.rb | 26 + ruby/ext/json/parser/parser.c | 4736 +- ruby/ext/json/parser/parser.h | 7 +- ruby/ext/json/parser/parser.rl | 157 +- ruby/ext/json/parser/prereq.mk | 4 +- ruby/ext/monitor/depend | 147 + ruby/ext/monitor/lib/monitor.rb | 6 +- ruby/ext/monitor/monitor.c | 20 +- ruby/ext/nkf/depend | 156 + ruby/ext/nkf/nkf-utf8/config.h | 2 +- ruby/ext/nkf/nkf-utf8/nkf.c | 10 +- ruby/ext/nkf/nkf-utf8/nkf.h | 4 +- ruby/ext/nkf/nkf.c | 4 +- ruby/ext/nkf/nkf.gemspec | 24 + ruby/ext/objspace/depend | 490 +- ruby/ext/objspace/lib/objspace.rb | 91 + ruby/ext/objspace/lib/objspace/trace.rb | 45 + ruby/ext/objspace/object_tracing.c | 89 +- ruby/ext/objspace/objspace.c | 278 +- ruby/ext/objspace/objspace_dump.c | 660 +- ruby/ext/openssl/History.md | 232 + ruby/ext/openssl/depend | 5124 +- ruby/ext/openssl/deprecation.rb | 27 - ruby/ext/openssl/extconf.rb | 108 +- ruby/ext/openssl/lib/openssl.rb | 33 +- ruby/ext/openssl/lib/openssl/bn.rb | 2 +- ruby/ext/openssl/lib/openssl/buffering.rb | 42 +- ruby/ext/openssl/lib/openssl/cipher.rb | 2 +- ruby/ext/openssl/lib/openssl/config.rb | 474 - ruby/ext/openssl/lib/openssl/digest.rb | 22 +- ruby/ext/openssl/lib/openssl/hmac.rb | 78 + ruby/ext/openssl/lib/openssl/marshal.rb | 30 + ruby/ext/openssl/lib/openssl/pkcs5.rb | 2 +- ruby/ext/openssl/lib/openssl/pkey.rb | 436 +- ruby/ext/openssl/lib/openssl/ssl.rb | 56 +- ruby/ext/openssl/lib/openssl/version.rb | 5 + ruby/ext/openssl/lib/openssl/x509.rb | 178 +- ruby/ext/openssl/openssl.gemspec | 42 +- ruby/ext/openssl/openssl_missing.c | 66 - ruby/ext/openssl/openssl_missing.h | 102 +- ruby/ext/openssl/ossl.c | 174 +- ruby/ext/openssl/ossl.h | 36 +- ruby/ext/openssl/ossl_asn1.c | 45 +- ruby/ext/openssl/ossl_bn.c | 415 +- ruby/ext/openssl/ossl_bn.h | 3 +- ruby/ext/openssl/ossl_cipher.c | 67 +- ruby/ext/openssl/ossl_config.c | 453 +- ruby/ext/openssl/ossl_config.h | 11 +- ruby/ext/openssl/ossl_digest.c | 93 +- ruby/ext/openssl/ossl_engine.c | 45 +- ruby/ext/openssl/ossl_hmac.c | 197 +- ruby/ext/openssl/ossl_kdf.c | 30 +- ruby/ext/openssl/ossl_ns_spki.c | 2 +- ruby/ext/openssl/ossl_ocsp.c | 71 +- ruby/ext/openssl/ossl_ocsp.h | 6 +- ruby/ext/openssl/ossl_pkcs12.c | 24 +- ruby/ext/openssl/ossl_pkcs7.c | 119 +- ruby/ext/openssl/ossl_pkcs7.h | 16 + ruby/ext/openssl/ossl_pkey.c | 1433 +- ruby/ext/openssl/ossl_pkey.h | 107 +- ruby/ext/openssl/ossl_pkey_dh.c | 458 +- ruby/ext/openssl/ossl_pkey_dsa.c | 491 +- ruby/ext/openssl/ossl_pkey_ec.c | 473 +- ruby/ext/openssl/ossl_pkey_rsa.c | 589 +- ruby/ext/openssl/ossl_rand.c | 34 +- ruby/ext/openssl/ossl_ssl.c | 762 +- ruby/ext/openssl/ossl_ssl_session.c | 53 +- ruby/ext/openssl/ossl_ts.c | 1539 + ruby/ext/openssl/ossl_ts.h | 16 + ruby/ext/openssl/ossl_version.h | 15 - ruby/ext/openssl/ossl_x509.c | 87 +- ruby/ext/openssl/ossl_x509cert.c | 176 +- ruby/ext/openssl/ossl_x509crl.c | 17 +- ruby/ext/openssl/ossl_x509ext.c | 17 +- ruby/ext/openssl/ossl_x509name.c | 19 +- ruby/ext/openssl/ossl_x509req.c | 17 +- ruby/ext/openssl/ossl_x509store.c | 292 +- ruby/ext/openssl/ruby_missing.h | 24 - ruby/ext/pathname/depend | 156 + ruby/ext/pathname/lib/pathname.rb | 26 +- ruby/ext/pathname/pathname.c | 35 +- ruby/ext/pathname/pathname.gemspec | 25 + ruby/ext/psych/depend | 780 + ruby/ext/psych/lib/psych.rb | 336 +- ruby/ext/psych/lib/psych/class_loader.rb | 18 +- ruby/ext/psych/lib/psych/core_ext.rb | 2 +- ruby/ext/psych/lib/psych/exception.rb | 4 +- ruby/ext/psych/lib/psych/handler.rb | 2 +- .../lib/psych/handlers/document_stream.rb | 2 +- ruby/ext/psych/lib/psych/handlers/recorder.rb | 2 +- ruby/ext/psych/lib/psych/json/stream.rb | 4 +- ruby/ext/psych/lib/psych/json/tree_builder.rb | 2 +- ruby/ext/psych/lib/psych/nodes.rb | 14 +- ruby/ext/psych/lib/psych/nodes/node.rb | 8 +- ruby/ext/psych/lib/psych/nodes/scalar.rb | 2 +- ruby/ext/psych/lib/psych/scalar_scanner.rb | 19 +- ruby/ext/psych/lib/psych/syntax_error.rb | 2 +- ruby/ext/psych/lib/psych/tree_builder.rb | 2 +- ruby/ext/psych/lib/psych/versions.rb | 6 +- ruby/ext/psych/lib/psych/visitors.rb | 12 +- .../ext/psych/lib/psych/visitors/json_tree.rb | 2 +- ruby/ext/psych/lib/psych/visitors/to_ruby.rb | 55 +- ruby/ext/psych/lib/psych/visitors/visitor.rb | 20 +- .../ext/psych/lib/psych/visitors/yaml_tree.rb | 62 +- ruby/ext/psych/psych.c | 9 +- ruby/ext/psych/psych.gemspec | 17 +- ruby/ext/psych/psych_parser.c | 34 +- ruby/ext/psych/psych_yaml_tree.c | 12 - ruby/ext/psych/yaml/api.c | 36 +- ruby/ext/psych/yaml/config.h | 82 +- ruby/ext/psych/yaml/dumper.c | 2 +- ruby/ext/psych/yaml/emitter.c | 54 +- ruby/ext/psych/yaml/loader.c | 306 +- ruby/ext/psych/yaml/parser.c | 7 +- ruby/ext/psych/yaml/scanner.c | 68 +- ruby/ext/psych/yaml/yaml.h | 72 +- ruby/ext/psych/yaml/yaml_private.h | 8 +- ruby/ext/pty/depend | 166 +- ruby/ext/pty/extconf.rb | 4 +- ruby/ext/pty/pty.c | 84 +- ruby/ext/racc/cparse/cparse.c | 36 +- ruby/ext/racc/cparse/depend | 147 + ruby/ext/racc/cparse/extconf.rb | 3 +- ruby/ext/rbconfig/sizeof/depend | 294 + ruby/ext/readline/depend | 156 + ruby/ext/readline/depend-gem | 4 + ruby/ext/readline/readline-ext.gemspec | 4 +- ruby/ext/readline/readline.c | 19 +- ruby/ext/ripper/depend | 188 +- ruby/ext/ripper/eventids2.c | 10 +- ruby/ext/ripper/extconf.rb | 3 +- ruby/ext/ripper/lib/ripper/lexer.rb | 141 +- ruby/ext/ripper/lib/ripper/sexp.rb | 37 +- ruby/ext/ripper/ripper.c | 8968 +- ruby/ext/ripper/ripper.y | 92 +- ruby/ext/ripper/tools/dsl.rb | 3 + ruby/ext/ripper/tools/preproc.rb | 12 +- ruby/ext/sdbm/_sdbm.c | 952 - ruby/ext/sdbm/depend | 27 - ruby/ext/sdbm/extconf.rb | 5 - ruby/ext/sdbm/init.c | 1067 - ruby/ext/sdbm/sdbm.gemspec | 21 - ruby/ext/sdbm/sdbm.h | 86 - ruby/ext/socket/ancdata.c | 26 +- ruby/ext/socket/basicsocket.c | 77 +- ruby/ext/socket/depend | 2550 +- ruby/ext/socket/extconf.rb | 9 +- ruby/ext/socket/ifaddr.c | 3 +- ruby/ext/socket/init.c | 282 +- ruby/ext/socket/ipsocket.c | 25 +- ruby/ext/socket/mkconstants.rb | 33 +- ruby/ext/socket/option.c | 4 +- ruby/ext/socket/raddrinfo.c | 239 +- ruby/ext/socket/rubysocket.h | 98 +- ruby/ext/socket/socket.c | 171 +- ruby/ext/socket/sockssocket.c | 2 +- ruby/ext/socket/tcpserver.c | 24 +- ruby/ext/socket/tcpsocket.c | 28 +- ruby/ext/socket/udpsocket.c | 29 +- ruby/ext/socket/unixserver.c | 23 +- ruby/ext/socket/unixsocket.c | 8 +- ruby/ext/stringio/depend | 156 + ruby/ext/stringio/stringio.c | 99 +- ruby/ext/stringio/stringio.gemspec | 5 +- ruby/ext/strscan/depend | 157 + ruby/ext/strscan/strscan.c | 52 +- ruby/ext/strscan/strscan.gemspec | 18 +- ruby/ext/syslog/depend | 147 + ruby/ext/syslog/syslog.gemspec | 23 + ruby/ext/win32/lib/Win32API.rb | 47 - ruby/ext/win32/lib/win32/importer.rb | 9 - ruby/ext/win32/lib/win32/registry.rb | 10 +- ruby/ext/win32/lib/win32/resolv.rb | 13 - ruby/ext/win32/lib/win32/resolv9x.rb | 253 - ruby/ext/win32/lib/win32/sspi.rb | 627 +- ruby/ext/win32ole/sample/xml.rb | 12 +- ruby/ext/win32ole/win32ole.c | 20 +- ruby/ext/win32ole/win32ole.gemspec | 22 + ruby/ext/win32ole/win32ole.h | 4 +- ruby/ext/win32ole/win32ole_error.c | 3 + ruby/ext/win32ole/win32ole_error.h | 4 +- ruby/ext/win32ole/win32ole_method.c | 4 +- ruby/ext/win32ole/win32ole_method.h | 2 +- ruby/ext/win32ole/win32ole_record.c | 2 + ruby/ext/win32ole/win32ole_record.h | 2 +- ruby/ext/win32ole/win32ole_type.c | 4 +- ruby/ext/win32ole/win32ole_type.h | 2 +- ruby/ext/win32ole/win32ole_typelib.c | 2 + ruby/ext/win32ole/win32ole_typelib.h | 2 +- ruby/ext/win32ole/win32ole_variable.c | 2 + ruby/ext/win32ole/win32ole_variable.h | 2 +- ruby/ext/win32ole/win32ole_variant.c | 8 +- ruby/ext/win32ole/win32ole_variant.h | 2 +- ruby/ext/win32ole/win32ole_variant_m.c | 4 +- ruby/ext/win32ole/win32ole_variant_m.h | 2 +- ruby/ext/zlib/depend | 156 + ruby/ext/zlib/extconf.rb | 13 +- ruby/ext/zlib/win32/zlib-1.2.11-mswin.patch | 95 + ruby/ext/zlib/zlib.c | 349 +- ruby/ext/zlib/zlib.gemspec | 10 +- ruby/file.c | 688 +- ruby/gc.c | 5758 +- ruby/gc.h | 24 +- ruby/gc.rb | 230 +- ruby/gc.rbinc | 7 +- ruby/gem_prelude.rb | 21 +- ruby/gem_prelude.rbinc | 23 - ruby/gems/bundled_gems | 22 +- ruby/gems/minitest-5.13.0.gem | Bin 83968 -> 0 bytes ruby/gems/minitest-5.13.0/.autotest | 34 - ruby/gems/minitest-5.13.0/History.rdoc | 1367 - ruby/gems/minitest-5.13.0/Manifest.txt | 27 - ruby/gems/minitest-5.13.0/README.rdoc | 763 - ruby/gems/minitest-5.13.0/Rakefile | 72 - ruby/gems/minitest-5.13.0/design_rationale.rb | 52 - ruby/gems/minitest-5.13.0/lib/hoe/minitest.rb | 32 - ruby/gems/minitest-5.13.0/lib/minitest.rb | 1056 - .../lib/minitest/assertions.rb | 794 - .../minitest-5.13.0/lib/minitest/autorun.rb | 13 - .../minitest-5.13.0/lib/minitest/benchmark.rb | 455 - .../lib/minitest/expectations.rb | 302 - .../gems/minitest-5.13.0/lib/minitest/hell.rb | 11 - .../gems/minitest-5.13.0/lib/minitest/mock.rb | 240 - .../minitest-5.13.0/lib/minitest/parallel.rb | 70 - .../minitest-5.13.0/lib/minitest/pride.rb | 4 - .../lib/minitest/pride_plugin.rb | 142 - .../gems/minitest-5.13.0/lib/minitest/spec.rb | 342 - .../gems/minitest-5.13.0/lib/minitest/test.rb | 220 - .../gems/minitest-5.13.0/lib/minitest/unit.rb | 45 - ruby/gems/minitest-5.13.0/minitest.gemspec | 35 - .../test/minitest/metametameta.rb | 117 - .../test/minitest/test_minitest_assertions.rb | 1437 - .../test/minitest/test_minitest_benchmark.rb | 137 - .../test/minitest/test_minitest_mock.rb | 872 - .../test/minitest/test_minitest_reporter.rb | 299 - .../test/minitest/test_minitest_spec.rb | 1041 - .../test/minitest/test_minitest_test.rb | 1080 - ruby/gems/net-telnet-0.2.0.gem | Bin 16896 -> 0 bytes ruby/gems/net-telnet-0.2.0/.gitignore | 9 - ruby/gems/net-telnet-0.2.0/.travis.yml | 10 - ruby/gems/net-telnet-0.2.0/Gemfile | 4 - ruby/gems/net-telnet-0.2.0/LICENSE.txt | 56 - ruby/gems/net-telnet-0.2.0/README.md | 62 - ruby/gems/net-telnet-0.2.0/Rakefile | 9 - ruby/gems/net-telnet-0.2.0/bin/console | 14 - ruby/gems/net-telnet-0.2.0/bin/setup | 7 - ruby/gems/net-telnet-0.2.0/lib/net-telnet.rb | 1 - ruby/gems/net-telnet-0.2.0/lib/net/telnet.rb | 763 - .../lib/net/telnet/version.rb | 5 - ruby/gems/net-telnet-0.2.0/net-telnet.gemspec | 37 - ruby/gems/power_assert-1.1.7.gem | Bin 15872 -> 0 bytes ruby/gems/power_assert-1.1.7/.gitignore | 9 - ruby/gems/power_assert-1.1.7/.travis.yml | 22 - ruby/gems/power_assert-1.1.7/BSDL | 22 - ruby/gems/power_assert-1.1.7/COPYING | 57 - ruby/gems/power_assert-1.1.7/Gemfile | 9 - ruby/gems/power_assert-1.1.7/LEGAL | 4 - ruby/gems/power_assert-1.1.7/README.rdoc | 81 - ruby/gems/power_assert-1.1.7/Rakefile | 59 - ruby/gems/power_assert-1.1.7/bin/console | 12 - ruby/gems/power_assert-1.1.7/bin/setup | 6 - .../power_assert-1.1.7/lib/power_assert.rb | 98 - .../lib/power_assert/colorize.rb | 9 - .../lib/power_assert/configuration.rb | 46 - .../lib/power_assert/context.rb | 238 - .../power_assert/enable_tracepoint_events.rb | 91 - .../lib/power_assert/inspector.rb | 61 - .../lib/power_assert/parser.rb | 251 - .../lib/power_assert/version.rb | 3 - .../power_assert-1.1.7/power_assert.gemspec | 44 - ruby/gems/rake-13.0.1.gem | Bin 87552 -> 0 bytes .../rake-13.0.1/.github/workflows/macos.yml | 22 - .../.github/workflows/ubuntu-rvm.yml | 28 - .../rake-13.0.1/.github/workflows/ubuntu.yml | 20 - .../rake-13.0.1/.github/workflows/windows.yml | 20 - ruby/gems/rake-13.0.1/CONTRIBUTING.rdoc | 43 - ruby/gems/rake-13.0.1/Gemfile | 10 - ruby/gems/rake-13.0.1/History.rdoc | 2368 - ruby/gems/rake-13.0.1/MIT-LICENSE | 21 - ruby/gems/rake-13.0.1/README.rdoc | 155 - ruby/gems/rake-13.0.1/Rakefile | 41 - ruby/gems/rake-13.0.1/bin/bundle | 105 - ruby/gems/rake-13.0.1/bin/console | 7 - ruby/gems/rake-13.0.1/bin/rake | 29 - ruby/gems/rake-13.0.1/bin/rdoc | 29 - ruby/gems/rake-13.0.1/bin/rubocop | 29 - ruby/gems/rake-13.0.1/bin/setup | 6 - .../rake-13.0.1/doc/command_line_usage.rdoc | 158 - ruby/gems/rake-13.0.1/doc/example/Rakefile1 | 38 - ruby/gems/rake-13.0.1/doc/example/Rakefile2 | 35 - ruby/gems/rake-13.0.1/doc/example/a.c | 6 - ruby/gems/rake-13.0.1/doc/example/b.c | 6 - ruby/gems/rake-13.0.1/doc/example/main.c | 11 - ruby/gems/rake-13.0.1/doc/glossary.rdoc | 42 - ruby/gems/rake-13.0.1/doc/jamis.rb | 592 - ruby/gems/rake-13.0.1/doc/proto_rake.rdoc | 127 - ruby/gems/rake-13.0.1/doc/rake.1 | 156 - ruby/gems/rake-13.0.1/doc/rakefile.rdoc | 622 - ruby/gems/rake-13.0.1/doc/rational.rdoc | 151 - ruby/gems/rake-13.0.1/exe/rake | 27 - ruby/gems/rake-13.0.1/lib/rake.rb | 71 - ruby/gems/rake-13.0.1/lib/rake/application.rb | 824 - ruby/gems/rake-13.0.1/lib/rake/backtrace.rb | 24 - ruby/gems/rake-13.0.1/lib/rake/clean.rb | 78 - ruby/gems/rake-13.0.1/lib/rake/cloneable.rb | 17 - ruby/gems/rake-13.0.1/lib/rake/cpu_counter.rb | 107 - .../rake-13.0.1/lib/rake/default_loader.rb | 15 - .../rake-13.0.1/lib/rake/dsl_definition.rb | 195 - ruby/gems/rake-13.0.1/lib/rake/early_time.rb | 22 - ruby/gems/rake-13.0.1/lib/rake/ext/core.rb | 26 - ruby/gems/rake-13.0.1/lib/rake/ext/string.rb | 176 - .../lib/rake/file_creation_task.rb | 25 - ruby/gems/rake-13.0.1/lib/rake/file_list.rb | 435 - ruby/gems/rake-13.0.1/lib/rake/file_task.rb | 54 - ruby/gems/rake-13.0.1/lib/rake/file_utils.rb | 134 - .../rake-13.0.1/lib/rake/file_utils_ext.rb | 134 - .../rake-13.0.1/lib/rake/invocation_chain.rb | 57 - .../lib/rake/invocation_exception_mixin.rb | 17 - ruby/gems/rake-13.0.1/lib/rake/late_time.rb | 18 - ruby/gems/rake-13.0.1/lib/rake/linked_list.rb | 112 - .../rake-13.0.1/lib/rake/loaders/makefile.rb | 54 - ruby/gems/rake-13.0.1/lib/rake/multi_task.rb | 14 - ruby/gems/rake-13.0.1/lib/rake/name_space.rb | 38 - ruby/gems/rake-13.0.1/lib/rake/packagetask.rb | 222 - ruby/gems/rake-13.0.1/lib/rake/phony.rb | 16 - .../rake-13.0.1/lib/rake/private_reader.rb | 21 - ruby/gems/rake-13.0.1/lib/rake/promise.rb | 100 - .../rake-13.0.1/lib/rake/pseudo_status.rb | 30 - ruby/gems/rake-13.0.1/lib/rake/rake_module.rb | 67 - .../rake-13.0.1/lib/rake/rake_test_loader.rb | 27 - .../lib/rake/rule_recursion_overflow_error.rb | 20 - ruby/gems/rake-13.0.1/lib/rake/scope.rb | 43 - ruby/gems/rake-13.0.1/lib/rake/task.rb | 434 - .../lib/rake/task_argument_error.rb | 8 - .../rake-13.0.1/lib/rake/task_arguments.rb | 109 - .../gems/rake-13.0.1/lib/rake/task_manager.rb | 331 - ruby/gems/rake-13.0.1/lib/rake/tasklib.rb | 12 - ruby/gems/rake-13.0.1/lib/rake/testtask.rb | 224 - .../lib/rake/thread_history_display.rb | 49 - ruby/gems/rake-13.0.1/lib/rake/thread_pool.rb | 163 - .../gems/rake-13.0.1/lib/rake/trace_output.rb | 23 - ruby/gems/rake-13.0.1/lib/rake/version.rb | 10 - ruby/gems/rake-13.0.1/lib/rake/win32.rb | 51 - ruby/gems/rake-13.0.1/rake.gemspec | 24 - ruby/gems/test-unit-3.3.4.gem | Bin 133120 -> 0 bytes ruby/gems/test-unit-3.3.4/COPYING | 67 - ruby/gems/test-unit-3.3.4/GPL | 339 - ruby/gems/test-unit-3.3.4/LGPL | 502 - ruby/gems/test-unit-3.3.4/PSFL | 271 - ruby/gems/test-unit-3.3.4/README.md | 101 - ruby/gems/test-unit-3.3.4/Rakefile | 80 - .../doc/text/getting-started.md | 246 - ruby/gems/test-unit-3.3.4/doc/text/how-to.md | 90 - ruby/gems/test-unit-3.3.4/doc/text/news.md | 1453 - ruby/gems/test-unit-3.3.4/lib/test-unit.rb | 34 - ruby/gems/test-unit-3.3.4/lib/test/unit.rb | 514 - .../lib/test/unit/assertion-failed-error.rb | 25 - .../lib/test/unit/assertions.rb | 2256 - .../lib/test/unit/attribute-matcher.rb | 26 - .../lib/test/unit/attribute.rb | 227 - .../lib/test/unit/auto-runner-loader.rb | 17 - .../lib/test/unit/autorunner.rb | 537 - .../lib/test/unit/code-snippet-fetcher.rb | 56 - .../lib/test/unit/collector.rb | 73 - .../lib/test/unit/collector/descendant.rb | 19 - .../lib/test/unit/collector/dir.rb | 108 - .../lib/test/unit/collector/load.rb | 197 - .../lib/test/unit/collector/objectspace.rb | 34 - .../lib/test/unit/collector/xml.rb | 249 - .../lib/test/unit/color-scheme.rb | 198 - .../test-unit-3.3.4/lib/test/unit/color.rb | 134 - .../lib/test/unit/data-sets.rb | 116 - .../test-unit-3.3.4/lib/test/unit/data.rb | 371 - .../test-unit-3.3.4/lib/test/unit/diff.rb | 746 - .../test-unit-3.3.4/lib/test/unit/error.rb | 158 - .../lib/test/unit/exception-handler.rb | 82 - .../test-unit-3.3.4/lib/test/unit/failure.rb | 169 - .../lib/test/unit/fault-location-detector.rb | 100 - .../test-unit-3.3.4/lib/test/unit/fixture.rb | 298 - .../lib/test/unit/notification.rb | 138 - .../test-unit-3.3.4/lib/test/unit/omission.rb | 198 - .../test-unit-3.3.4/lib/test/unit/pending.rb | 155 - .../test-unit-3.3.4/lib/test/unit/priority.rb | 196 - .../lib/test/unit/runner/console.rb | 84 - .../lib/test/unit/runner/emacs.rb | 8 - .../lib/test/unit/runner/xml.rb | 15 - .../lib/test/unit/test-suite-creator.rb | 103 - .../test-unit-3.3.4/lib/test/unit/testcase.rb | 899 - .../lib/test/unit/testresult.rb | 132 - .../lib/test/unit/testsuite.rb | 175 - .../lib/test/unit/ui/console/outputlevel.rb | 15 - .../lib/test/unit/ui/console/testrunner.rb | 750 - .../lib/test/unit/ui/emacs/testrunner.rb | 49 - .../lib/test/unit/ui/testrunner.rb | 53 - .../lib/test/unit/ui/testrunnermediator.rb | 114 - .../lib/test/unit/ui/testrunnerutilities.rb | 41 - .../lib/test/unit/ui/xml/testrunner.rb | 224 - .../lib/test/unit/util/backtracefilter.rb | 59 - .../lib/test/unit/util/method-owner-finder.rb | 28 - .../lib/test/unit/util/observable.rb | 90 - .../lib/test/unit/util/output.rb | 32 - .../lib/test/unit/util/procwrapper.rb | 48 - .../test-unit-3.3.4/lib/test/unit/version.rb | 5 - ruby/gems/test-unit-3.3.4/sample/adder.rb | 13 - .../gems/test-unit-3.3.4/sample/subtracter.rb | 12 - .../gems/test-unit-3.3.4/sample/test_adder.rb | 20 - .../test-unit-3.3.4/sample/test_subtracter.rb | 20 - ruby/gems/test-unit-3.3.4/sample/test_user.rb | 23 - ruby/gems/test-unit-3.3.4/test-unit.gemspec | 41 - .../test/collector/test-descendant.rb | 182 - .../test/collector/test-load.rb | 475 - .../test/collector/test_dir.rb | 407 - .../test/collector/test_objectspace.rb | 102 - .../test/fixtures/header-label.csv | 3 - .../test/fixtures/header-label.tsv | 3 - .../test-unit-3.3.4/test/fixtures/header.csv | 3 - .../test-unit-3.3.4/test/fixtures/header.tsv | 3 - .../test/fixtures/no-header.csv | 2 - .../test/fixtures/no-header.tsv | 2 - .../test-unit-3.3.4/test/fixtures/plus.csv | 3 - ruby/gems/test-unit-3.3.4/test/run-test.rb | 22 - .../test-unit-3.3.4/test/test-assertions.rb | 2187 - .../test/test-attribute-matcher.rb | 38 - .../test-unit-3.3.4/test/test-attribute.rb | 123 - .../test-unit-3.3.4/test/test-code-snippet.rb | 79 - .../test-unit-3.3.4/test/test-color-scheme.rb | 82 - ruby/gems/test-unit-3.3.4/test/test-color.rb | 47 - ruby/gems/test-unit-3.3.4/test/test-data.rb | 419 - ruby/gems/test-unit-3.3.4/test/test-diff.rb | 518 - .../test-unit-3.3.4/test/test-emacs-runner.rb | 60 - ruby/gems/test-unit-3.3.4/test/test-error.rb | 26 - .../gems/test-unit-3.3.4/test/test-failure.rb | 33 - .../test/test-fault-location-detector.rb | 163 - .../gems/test-unit-3.3.4/test/test-fixture.rb | 713 - .../test-unit-3.3.4/test/test-notification.rb | 33 - .../test-unit-3.3.4/test/test-omission.rb | 81 - .../gems/test-unit-3.3.4/test/test-pending.rb | 70 - .../test-unit-3.3.4/test/test-priority.rb | 184 - .../test-unit-3.3.4/test/test-test-case.rb | 1279 - .../test-unit-3.3.4/test/test-test-result.rb | 113 - .../test/test-test-suite-creator.rb | 97 - .../test-unit-3.3.4/test/test-test-suite.rb | 151 - .../test/testunit-test-util.rb | 33 - .../test/ui/test_testrunmediator.rb | 20 - .../test/util/test-method-owner-finder.rb | 38 - .../test-unit-3.3.4/test/util/test-output.rb | 11 - .../test/util/test_backtracefilter.rb | 52 - .../test/util/test_observable.rb | 102 - .../test/util/test_procwrapper.rb | 36 - ruby/gems/xmlrpc-0.3.0.gem | Bin 28672 -> 0 bytes ruby/gems/xmlrpc-0.3.0/.gitignore | 9 - ruby/gems/xmlrpc-0.3.0/.travis.yml | 6 - ruby/gems/xmlrpc-0.3.0/Gemfile | 3 - ruby/gems/xmlrpc-0.3.0/LICENSE.txt | 56 - ruby/gems/xmlrpc-0.3.0/README.md | 60 - ruby/gems/xmlrpc-0.3.0/Rakefile | 10 - ruby/gems/xmlrpc-0.3.0/bin/console | 14 - ruby/gems/xmlrpc-0.3.0/bin/setup | 8 - ruby/gems/xmlrpc-0.3.0/lib/xmlrpc.rb | 293 - ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/base64.rb | 63 - ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/client.rb | 629 - ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/config.rb | 39 - ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/create.rb | 287 - ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/datetime.rb | 124 - ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/marshal.rb | 67 - ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/parser.rb | 642 - ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/server.rb | 708 - ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/utils.rb | 172 - ruby/gems/xmlrpc-0.3.0/xmlrpc.gemspec | 35 - ruby/golf_prelude.c | 215 - ruby/goruby.c | 12 +- ruby/hash.c | 3926 +- ruby/id_table.c | 14 +- ruby/id_table.h | 2 + ruby/include/ruby.h | 31 +- ruby/include/ruby/assert.h | 254 +- ruby/include/ruby/atomic.h | 890 + ruby/include/ruby/backward.h | 76 +- ruby/include/ruby/backward/2/assume.h | 58 + ruby/include/ruby/backward/2/attributes.h | 165 + ruby/include/ruby/backward/2/bool.h | 36 + .../ruby/backward/2/gcc_version_since.h | 37 + ruby/include/ruby/backward/2/inttypes.h | 131 + ruby/include/ruby/backward/2/limits.h | 99 + ruby/include/ruby/backward/2/long_long.h | 73 + ruby/include/ruby/backward/2/r_cast.h | 32 + ruby/include/ruby/backward/2/rmodule.h | 36 + ruby/include/ruby/backward/2/stdalign.h | 30 + ruby/include/ruby/backward/2/stdarg.h | 69 + ruby/include/ruby/backward/classext.h | 18 - ruby/include/ruby/backward/cxxanyargs.hpp | 413 +- ruby/include/ruby/backward/rubyio.h | 6 - ruby/include/ruby/backward/rubysig.h | 47 - ruby/include/ruby/backward/st.h | 6 - ruby/include/ruby/backward/util.h | 6 - ruby/include/ruby/debug.h | 597 +- ruby/include/ruby/defines.h | 530 +- ruby/include/ruby/encoding.h | 450 +- ruby/include/ruby/fiber/scheduler.h | 336 + ruby/include/ruby/intern.h | 1268 +- ruby/include/ruby/internal/anyargs.h | 375 + ruby/include/ruby/internal/arithmetic.h | 38 + ruby/include/ruby/internal/arithmetic/char.h | 81 + .../include/ruby/internal/arithmetic/double.h | 72 + .../include/ruby/internal/arithmetic/fixnum.h | 60 + ruby/include/ruby/internal/arithmetic/gid_t.h | 41 + ruby/include/ruby/internal/arithmetic/int.h | 264 + .../ruby/internal/arithmetic/intptr_t.h | 74 + ruby/include/ruby/internal/arithmetic/long.h | 356 + .../ruby/internal/arithmetic/long_long.h | 135 + .../include/ruby/internal/arithmetic/mode_t.h | 41 + ruby/include/ruby/internal/arithmetic/off_t.h | 62 + ruby/include/ruby/internal/arithmetic/pid_t.h | 41 + ruby/include/ruby/internal/arithmetic/short.h | 113 + .../include/ruby/internal/arithmetic/size_t.h | 66 + .../ruby/internal/arithmetic/st_data_t.h | 75 + ruby/include/ruby/internal/arithmetic/uid_t.h | 41 + ruby/include/ruby/internal/assume.h | 90 + ruby/include/ruby/internal/attr/alloc_size.h | 32 + ruby/include/ruby/internal/attr/artificial.h | 46 + ruby/include/ruby/internal/attr/cold.h | 37 + ruby/include/ruby/internal/attr/const.h | 46 + ruby/include/ruby/internal/attr/constexpr.h | 84 + ruby/include/ruby/internal/attr/deprecated.h | 75 + ruby/include/ruby/internal/attr/diagnose_if.h | 42 + .../ruby/internal/attr/enum_extensibility.h | 32 + ruby/include/ruby/internal/attr/error.h | 32 + ruby/include/ruby/internal/attr/flag_enum.h | 33 + ruby/include/ruby/internal/attr/forceinline.h | 40 + ruby/include/ruby/internal/attr/format.h | 38 + .../include/ruby/internal/attr/maybe_unused.h | 38 + ruby/include/ruby/internal/attr/noalias.h | 69 + ruby/include/ruby/internal/attr/nodiscard.h | 45 + ruby/include/ruby/internal/attr/noexcept.h | 91 + ruby/include/ruby/internal/attr/noinline.h | 35 + ruby/include/ruby/internal/attr/nonnull.h | 34 + ruby/include/ruby/internal/attr/noreturn.h | 48 + ruby/include/ruby/internal/attr/pure.h | 43 + ruby/include/ruby/internal/attr/restrict.h | 44 + .../ruby/internal/attr/returns_nonnull.h | 37 + ruby/include/ruby/internal/attr/warning.h | 32 + ruby/include/ruby/internal/attr/weakref.h | 32 + ruby/include/ruby/internal/cast.h | 50 + ruby/include/ruby/internal/compiler_is.h | 45 + .../include/ruby/internal/compiler_is/apple.h | 40 + .../include/ruby/internal/compiler_is/clang.h | 37 + ruby/include/ruby/internal/compiler_is/gcc.h | 45 + .../include/ruby/internal/compiler_is/intel.h | 40 + ruby/include/ruby/internal/compiler_is/msvc.h | 56 + .../ruby/internal/compiler_is/sunpro.h | 54 + ruby/include/ruby/internal/compiler_since.h | 61 + ruby/include/ruby/internal/config.h | 153 + ruby/include/ruby/internal/constant_p.h | 38 + ruby/include/ruby/internal/core.h | 35 + ruby/include/ruby/internal/core/rarray.h | 590 + ruby/include/ruby/internal/core/rbasic.h | 158 + ruby/include/ruby/internal/core/rbignum.h | 80 + ruby/include/ruby/internal/core/rclass.h | 140 + ruby/include/ruby/internal/core/rdata.h | 410 + ruby/include/ruby/internal/core/rfile.h | 51 + ruby/include/ruby/internal/core/rhash.h | 144 + ruby/include/ruby/internal/core/rmatch.h | 146 + ruby/include/ruby/internal/core/robject.h | 185 + ruby/include/ruby/internal/core/rregexp.h | 168 + ruby/include/ruby/internal/core/rstring.h | 577 + ruby/include/ruby/internal/core/rstruct.h | 121 + ruby/include/ruby/internal/core/rtypeddata.h | 604 + ruby/include/ruby/internal/ctype.h | 545 + ruby/include/ruby/internal/dllexport.h | 112 + ruby/include/ruby/internal/dosish.h | 89 + .../ruby/internal/encoding/coderange.h | 202 + ruby/include/ruby/internal/encoding/ctype.h | 243 + .../include/ruby/internal/encoding/encoding.h | 1058 + .../include/ruby/internal/encoding/pathname.h | 184 + ruby/include/ruby/internal/encoding/re.h | 46 + ruby/include/ruby/internal/encoding/sprintf.h | 78 + ruby/include/ruby/internal/encoding/string.h | 346 + ruby/include/ruby/internal/encoding/symbol.h | 100 + .../ruby/internal/encoding/transcode.h | 558 + ruby/include/ruby/internal/error.h | 582 + ruby/include/ruby/internal/eval.h | 373 + ruby/include/ruby/internal/event.h | 154 + ruby/include/ruby/internal/fl_type.h | 967 + ruby/include/ruby/internal/gc.h | 57 + ruby/include/ruby/internal/glob.h | 113 + ruby/include/ruby/internal/globals.h | 209 + ruby/include/ruby/internal/has/attribute.h | 163 + ruby/include/ruby/internal/has/builtin.h | 119 + ruby/include/ruby/internal/has/c_attribute.h | 38 + .../include/ruby/internal/has/cpp_attribute.h | 86 + .../ruby/internal/has/declspec_attribute.h | 47 + ruby/include/ruby/internal/has/extension.h | 33 + ruby/include/ruby/internal/has/feature.h | 31 + ruby/include/ruby/internal/has/warning.h | 31 + ruby/include/ruby/internal/intern/array.h | 657 + ruby/include/ruby/internal/intern/bignum.h | 846 + ruby/include/ruby/internal/intern/class.h | 382 + ruby/include/ruby/internal/intern/compar.h | 62 + ruby/include/ruby/internal/intern/complex.h | 253 + ruby/include/ruby/internal/intern/cont.h | 260 + ruby/include/ruby/internal/intern/dir.h | 42 + ruby/include/ruby/internal/intern/enum.h | 73 + .../include/ruby/internal/intern/enumerator.h | 259 + ruby/include/ruby/internal/intern/error.h | 301 + ruby/include/ruby/internal/intern/eval.h | 222 + ruby/include/ruby/internal/intern/file.h | 213 + ruby/include/ruby/internal/intern/gc.h | 392 + ruby/include/ruby/internal/intern/hash.h | 318 + ruby/include/ruby/internal/intern/io.h | 661 + ruby/include/ruby/internal/intern/load.h | 218 + ruby/include/ruby/internal/intern/marshal.h | 112 + ruby/include/ruby/internal/intern/numeric.h | 208 + ruby/include/ruby/internal/intern/object.h | 569 + ruby/include/ruby/internal/intern/parse.h | 194 + ruby/include/ruby/internal/intern/proc.h | 353 + ruby/include/ruby/internal/intern/process.h | 273 + ruby/include/ruby/internal/intern/random.h | 116 + ruby/include/ruby/internal/intern/range.h | 89 + ruby/include/ruby/internal/intern/rational.h | 172 + ruby/include/ruby/internal/intern/re.h | 249 + ruby/include/ruby/internal/intern/ruby.h | 77 + ruby/include/ruby/internal/intern/select.h | 86 + .../ruby/internal/intern/select/largesize.h | 217 + .../ruby/internal/intern/select/posix.h | 144 + .../ruby/internal/intern/select/win32.h | 259 + ruby/include/ruby/internal/intern/signal.h | 152 + ruby/include/ruby/internal/intern/sprintf.h | 159 + ruby/include/ruby/internal/intern/string.h | 1821 + ruby/include/ruby/internal/intern/struct.h | 203 + ruby/include/ruby/internal/intern/thread.h | 492 + ruby/include/ruby/internal/intern/time.h | 161 + ruby/include/ruby/internal/intern/variable.h | 628 + ruby/include/ruby/internal/intern/vm.h | 435 + ruby/include/ruby/internal/interpreter.h | 304 + ruby/include/ruby/internal/iterator.h | 513 + ruby/include/ruby/internal/memory.h | 670 + ruby/include/ruby/internal/method.h | 205 + ruby/include/ruby/internal/module.h | 177 + ruby/include/ruby/internal/newobj.h | 195 + ruby/include/ruby/internal/rgengc.h | 443 + ruby/include/ruby/internal/scan_args.h | 534 + ruby/include/ruby/internal/special_consts.h | 295 + ruby/include/ruby/internal/static_assert.h | 77 + ruby/include/ruby/internal/stdalign.h | 135 + ruby/include/ruby/internal/stdbool.h | 51 + ruby/include/ruby/internal/symbol.h | 332 + ruby/include/ruby/internal/value.h | 133 + ruby/include/ruby/internal/value_type.h | 449 + ruby/include/ruby/internal/variable.h | 337 + ruby/include/ruby/internal/warning_push.h | 124 + ruby/include/ruby/internal/xmalloc.h | 392 + ruby/include/ruby/io.h | 921 +- ruby/include/ruby/io/buffer.h | 91 + ruby/include/ruby/memory_view.h | 325 + ruby/include/ruby/missing.h | 133 +- ruby/include/ruby/ractor.h | 264 + ruby/include/ruby/random.h | 304 + ruby/include/ruby/re.h | 198 +- ruby/include/ruby/regex.h | 21 +- ruby/include/ruby/ruby.h | 3010 +- ruby/include/ruby/st.h | 2 +- ruby/include/ruby/subst.h | 9 +- ruby/include/ruby/thread.h | 202 +- ruby/include/ruby/thread_native.h | 181 +- ruby/include/ruby/util.h | 257 +- ruby/include/ruby/version.h | 158 +- ruby/include/ruby/vm.h | 61 +- ruby/include/ruby/win32.h | 97 +- ruby/inits.c | 42 +- ruby/insns.def | 174 +- ruby/internal.h | 2715 +- ruby/internal/array.h | 113 + ruby/internal/bignum.h | 246 + ruby/internal/bits.h | 565 + ruby/internal/class.h | 196 + ruby/internal/compar.h | 49 + ruby/internal/compile.h | 35 + ruby/internal/compilers.h | 107 + ruby/internal/complex.h | 29 + ruby/internal/cont.h | 24 + ruby/internal/dir.h | 16 + ruby/internal/enc.h | 19 + ruby/internal/encoding.h | 30 + ruby/internal/enum.h | 18 + ruby/internal/enumerator.h | 21 + ruby/internal/error.h | 191 + ruby/internal/eval.h | 32 + ruby/internal/file.h | 38 + ruby/internal/fixnum.h | 184 + ruby/internal/gc.h | 186 + ruby/internal/hash.h | 243 + ruby/internal/imemo.h | 243 + ruby/internal/inits.h | 50 + ruby/internal/io.h | 38 + ruby/internal/load.h | 18 + ruby/internal/loadpath.h | 16 + ruby/internal/math.h | 23 + ruby/internal/missing.h | 18 + ruby/internal/numeric.h | 271 + ruby/internal/object.h | 83 + ruby/internal/parse.h | 23 + ruby/internal/proc.h | 32 + ruby/internal/process.h | 137 + ruby/internal/random.h | 16 + ruby/internal/range.h | 40 + ruby/internal/rational.h | 72 + ruby/internal/re.h | 30 + ruby/internal/sanitizers.h | 190 + ruby/internal/serial.h | 23 + ruby/internal/signal.h | 21 + ruby/internal/static_assert.h | 16 + ruby/internal/string.h | 141 + ruby/internal/struct.h | 153 + ruby/internal/symbol.h | 41 + ruby/internal/thread.h | 53 + ruby/internal/time.h | 34 + ruby/internal/transcode.h | 20 + ruby/internal/util.h | 27 + ruby/internal/variable.h | 83 + ruby/internal/vm.h | 133 + ruby/internal/warnings.h | 16 + ruby/io.c | 2961 +- ruby/io.rb | 4 +- ruby/io.rbinc | 7 +- ruby/io_buffer.c | 2214 + ruby/iseq.c | 618 +- ruby/iseq.h | 40 +- ruby/kernel.rb | 178 + ruby/lib/.document | 25 - ruby/lib/English.gemspec | 22 + ruby/lib/abbrev.gemspec | 22 + ruby/lib/base64.gemspec | 20 + ruby/lib/base64.rb | 6 +- ruby/lib/benchmark.rb | 29 +- ruby/lib/benchmark/benchmark.gemspec | 4 +- ruby/lib/benchmark/version.rb | 3 +- ruby/lib/bundler.rb | 103 +- ruby/lib/bundler/.document | 1 + ruby/lib/bundler/build_metadata.rb | 10 +- ruby/lib/bundler/bundler.gemspec | 11 +- ruby/lib/bundler/cli.rb | 173 +- ruby/lib/bundler/cli/add.rb | 2 +- ruby/lib/bundler/cli/binstubs.rb | 8 +- ruby/lib/bundler/cli/cache.rb | 11 +- ruby/lib/bundler/cli/check.rb | 6 +- ruby/lib/bundler/cli/clean.rb | 2 +- ruby/lib/bundler/cli/common.rb | 31 +- ruby/lib/bundler/cli/config.rb | 11 +- ruby/lib/bundler/cli/console.rb | 2 +- ruby/lib/bundler/cli/doctor.rb | 31 +- ruby/lib/bundler/cli/exec.rb | 15 +- ruby/lib/bundler/cli/fund.rb | 36 + ruby/lib/bundler/cli/gem.rb | 247 +- ruby/lib/bundler/cli/info.rb | 44 +- ruby/lib/bundler/cli/init.rb | 4 +- ruby/lib/bundler/cli/inject.rb | 2 +- ruby/lib/bundler/cli/install.rb | 72 +- ruby/lib/bundler/cli/issue.rb | 9 +- ruby/lib/bundler/cli/list.rb | 30 +- ruby/lib/bundler/cli/lock.rb | 6 +- ruby/lib/bundler/cli/open.rb | 3 +- ruby/lib/bundler/cli/outdated.rb | 170 +- ruby/lib/bundler/cli/package.rb | 48 - ruby/lib/bundler/cli/platform.rb | 2 +- ruby/lib/bundler/cli/plugin.rb | 10 + ruby/lib/bundler/cli/pristine.rb | 5 + ruby/lib/bundler/cli/remove.rb | 3 +- ruby/lib/bundler/cli/show.rb | 2 +- ruby/lib/bundler/cli/update.rb | 29 +- ruby/lib/bundler/compact_index_client.rb | 12 +- .../lib/bundler/compact_index_client/cache.rb | 29 +- .../compact_index_client/gem_parser.rb | 28 + .../bundler/compact_index_client/updater.rb | 35 +- ruby/lib/bundler/current_ruby.rb | 9 +- ruby/lib/bundler/definition.rb | 578 +- ruby/lib/bundler/dep_proxy.rb | 25 +- ruby/lib/bundler/dependency.rb | 19 +- ruby/lib/bundler/digest.rb | 71 + ruby/lib/bundler/dsl.rb | 145 +- ruby/lib/bundler/endpoint_specification.rb | 34 +- ruby/lib/bundler/env.rb | 4 +- ruby/lib/bundler/environment_preserver.rb | 31 +- ruby/lib/bundler/errors.rb | 23 +- ruby/lib/bundler/feature_flag.rb | 8 - ruby/lib/bundler/fetcher.rb | 40 +- ruby/lib/bundler/fetcher/base.rb | 2 +- ruby/lib/bundler/fetcher/compact_index.rb | 27 +- ruby/lib/bundler/fetcher/downloader.rb | 17 +- ruby/lib/bundler/fetcher/index.rb | 32 +- ruby/lib/bundler/friendly_errors.rb | 68 +- ruby/lib/bundler/gem_helper.rb | 84 +- ruby/lib/bundler/gem_helpers.rb | 61 +- ruby/lib/bundler/gem_remote_fetcher.rb | 43 - ruby/lib/bundler/gem_version_promoter.rb | 8 +- ruby/lib/bundler/gemdeps.rb | 29 - ruby/lib/bundler/graph.rb | 2 +- ruby/lib/bundler/index.rb | 18 +- ruby/lib/bundler/injector.rb | 39 +- ruby/lib/bundler/inline.rb | 5 +- ruby/lib/bundler/installer.rb | 91 +- ruby/lib/bundler/installer/gem_installer.rb | 32 +- .../bundler/installer/parallel_installer.rb | 71 +- ruby/lib/bundler/installer/standalone.rb | 40 +- ruby/lib/bundler/lazy_specification.rb | 88 +- ruby/lib/bundler/lockfile_generator.rb | 4 +- ruby/lib/bundler/lockfile_parser.rb | 63 +- ruby/lib/bundler/man/.document | 1 + ruby/{ => lib/bundler}/man/bundle-add.1 | 12 +- ruby/lib/bundler/man/bundle-add.1.ronn | 52 + ruby/{ => lib/bundler}/man/bundle-binstubs.1 | 8 +- ruby/lib/bundler/man/bundle-binstubs.1.ronn | 41 + ruby/{ => lib/bundler}/man/bundle-cache.1 | 2 +- .../bundler/man/bundle-cache.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-check.1 | 2 +- .../bundler/man/bundle-check.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-clean.1 | 2 +- .../bundler/man/bundle-clean.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-config.1 | 83 +- ruby/lib/bundler/man/bundle-config.1.ronn | 396 + ruby/{ => lib/bundler}/man/bundle-doctor.1 | 2 +- .../bundler/man/bundle-doctor.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-exec.1 | 2 +- .../bundler/man/bundle-exec.1.ronn} | 0 ruby/lib/bundler/man/bundle-gem.1 | 115 + ruby/lib/bundler/man/bundle-gem.1.ronn | 117 + ruby/{ => lib/bundler}/man/bundle-info.1 | 2 +- .../bundler/man/bundle-info.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-init.1 | 2 +- .../bundler/man/bundle-init.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-inject.1 | 2 +- .../bundler/man/bundle-inject.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-install.1 | 35 +- ruby/lib/bundler/man/bundle-install.1.ronn | 405 + ruby/lib/bundler/man/bundle-list.1 | 50 + ruby/lib/bundler/man/bundle-list.1.ronn | 33 + ruby/{ => lib/bundler}/man/bundle-lock.1 | 2 +- .../bundler/man/bundle-lock.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-open.1 | 2 +- .../bundler/man/bundle-open.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-outdated.1 | 2 +- .../bundler/man/bundle-outdated.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-platform.1 | 2 +- .../bundler/man/bundle-platform.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-pristine.1 | 2 +- .../bundler/man/bundle-pristine.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-remove.1 | 2 +- .../bundler/man/bundle-remove.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-show.1 | 2 +- .../bundler/man/bundle-show.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle-update.1 | 10 +- ruby/lib/bundler/man/bundle-update.1.ronn | 351 + ruby/{ => lib/bundler}/man/bundle-viz.1 | 2 +- .../bundler/man/bundle-viz.1.ronn} | 0 ruby/{ => lib/bundler}/man/bundle.1 | 2 +- .../bundler/man/bundle.1.ronn} | 0 ruby/{ => lib/bundler}/man/gemfile.5 | 36 +- ruby/{ => lib/bundler}/man/gemfile.5.ronn | 18 +- ruby/lib/bundler/man/index.txt | 25 + ruby/lib/bundler/mirror.rb | 4 +- ruby/lib/bundler/plugin.rb | 67 +- ruby/lib/bundler/plugin/api/source.rb | 24 +- ruby/lib/bundler/plugin/dsl.rb | 2 +- ruby/lib/bundler/plugin/index.rb | 14 +- ruby/lib/bundler/plugin/installer.rb | 22 +- ruby/lib/bundler/plugin/installer/rubygems.rb | 2 +- ruby/lib/bundler/plugin/source_list.rb | 6 +- ruby/lib/bundler/process_lock.rb | 2 +- ruby/lib/bundler/psyched_yaml.rb | 37 - ruby/lib/bundler/remote_specification.rb | 14 +- ruby/lib/bundler/resolver.rb | 270 +- ruby/lib/bundler/resolver/spec_group.rb | 109 +- ruby/lib/bundler/retry.rb | 4 +- ruby/lib/bundler/ruby_version.rb | 4 +- ruby/lib/bundler/rubygems_ext.rb | 135 +- ruby/lib/bundler/rubygems_gem_installer.rb | 77 +- ruby/lib/bundler/rubygems_integration.rb | 202 +- ruby/lib/bundler/runtime.rb | 47 +- ruby/lib/bundler/self_manager.rb | 168 + ruby/lib/bundler/settings.rb | 209 +- ruby/lib/bundler/setup.rb | 4 +- ruby/lib/bundler/shared_helpers.rb | 29 +- ruby/lib/bundler/similarity_detector.rb | 2 +- ruby/lib/bundler/source.rb | 23 +- ruby/lib/bundler/source/git.rb | 66 +- ruby/lib/bundler/source/git/git_proxy.rb | 172 +- ruby/lib/bundler/source/metadata.rb | 6 +- ruby/lib/bundler/source/path.rb | 14 +- ruby/lib/bundler/source/path/installer.rb | 20 +- ruby/lib/bundler/source/rubygems.rb | 242 +- ruby/lib/bundler/source/rubygems/remote.rb | 2 +- ruby/lib/bundler/source/rubygems_aggregate.rb | 68 + ruby/lib/bundler/source_list.rb | 164 +- ruby/lib/bundler/source_map.rb | 58 + ruby/lib/bundler/spec_set.rb | 67 +- ruby/lib/bundler/stub_specification.rb | 32 +- ruby/lib/bundler/templates/Executable.bundler | 14 +- ruby/lib/bundler/templates/Gemfile | 2 - ruby/lib/bundler/templates/gems.rb | 3 - .../bundler/templates/newgem/CHANGELOG.md.tt | 5 + .../templates/newgem/CODE_OF_CONDUCT.md.tt | 104 +- ruby/lib/bundler/templates/newgem/Gemfile.tt | 13 +- .../lib/bundler/templates/newgem/README.md.tt | 11 +- ruby/lib/bundler/templates/newgem/Rakefile.tt | 37 +- .../bundler/templates/newgem/bin/console.tt | 1 + .../templates/newgem/circleci/config.yml.tt | 13 + .../templates/newgem/ext/newgem/extconf.rb.tt | 2 + .../newgem/github/workflows/main.yml.tt | 27 + .../bundler/templates/newgem/gitlab-ci.yml.tt | 9 + .../bundler/templates/newgem/lib/newgem.rb.tt | 6 +- .../templates/newgem/lib/newgem/version.rb.tt | 2 + .../templates/newgem/newgem.gemspec.tt | 44 +- .../bundler/templates/newgem/rubocop.yml.tt | 13 + .../templates/newgem/sig/newgem.rbs.tt | 8 + .../templates/newgem/spec/newgem_spec.rb.tt | 2 + .../templates/newgem/spec/spec_helper.rb.tt | 3 +- .../bundler/templates/newgem/standard.yml.tt | 3 + .../newgem/test/minitest/test_helper.rb.tt | 6 + .../newgem/test/minitest/test_newgem.rb.tt | 13 + .../templates/newgem/test/newgem_test.rb.tt | 11 - .../newgem/test/test-unit/newgem_test.rb.tt | 15 + .../newgem/test/test-unit/test_helper.rb.tt | 6 + .../templates/newgem/test/test_helper.rb.tt | 4 - ruby/lib/bundler/ui/shell.rb | 12 +- ruby/lib/bundler/uri_credentials_filter.rb | 4 +- ruby/lib/bundler/vendor/.document | 1 + .../connection_pool/lib/connection_pool.rb | 113 +- .../lib/connection_pool/monotonic_time.rb | 66 - .../lib/connection_pool/timed_stack.rb | 40 +- .../lib/connection_pool/version.rb | 2 +- .../lib/connection_pool/wrapper.rb | 57 + .../vendor/fileutils/lib/fileutils/version.rb | 5 - .../bundler/vendor/molinillo/lib/molinillo.rb | 1 - .../molinillo/lib/molinillo/compatibility.rb | 26 - .../delegates/specification_provider.rb | 7 + .../lib/molinillo/dependency_graph.rb | 40 +- .../lib/molinillo/dependency_graph/tag.rb | 4 +- .../lib/molinillo/dependency_graph/vertex.rb | 16 +- .../vendor/molinillo/lib/molinillo/errors.rb | 6 +- .../molinillo/lib/molinillo/gem_metadata.rb | 2 +- .../modules/specification_provider.rb | 13 +- .../molinillo/lib/molinillo/resolution.rb | 96 +- .../lib/net/http/persistent.rb | 271 +- ruby/lib/bundler/vendor/thor/lib/thor.rb | 18 +- .../bundler/vendor/thor/lib/thor/actions.rb | 10 +- .../thor/lib/thor/actions/create_link.rb | 3 +- .../lib/thor/actions/file_manipulation.rb | 16 +- .../thor/lib/thor/actions/inject_into_file.rb | 3 +- ruby/lib/bundler/vendor/thor/lib/thor/base.rb | 9 + .../core_ext/hash_with_indifferent_access.rb | 6 + .../thor/lib/thor/core_ext/io_binary_read.rb | 12 - .../thor/lib/thor/core_ext/ordered_hash.rb | 129 - .../lib/bundler/vendor/thor/lib/thor/error.rb | 15 +- .../vendor/thor/lib/thor/parser/arguments.rb | 6 +- .../vendor/thor/lib/thor/parser/options.rb | 37 +- .../lib/bundler/vendor/thor/lib/thor/shell.rb | 2 +- .../vendor/thor/lib/thor/shell/basic.rb | 33 +- .../vendor/thor/lib/thor/shell/color.rb | 6 +- ruby/lib/bundler/vendor/thor/lib/thor/util.rb | 2 +- .../bundler/vendor/thor/lib/thor/version.rb | 2 +- ruby/lib/bundler/vendor/tmpdir/lib/tmpdir.rb | 154 + ruby/lib/bundler/vendor/tsort/lib/tsort.rb | 453 + ruby/lib/bundler/vendor/uri/lib/uri.rb | 1 - ruby/lib/bundler/vendor/uri/lib/uri/common.rb | 97 +- ruby/lib/bundler/vendor/uri/lib/uri/ftp.rb | 1 - .../lib/bundler/vendor/uri/lib/uri/generic.rb | 11 +- ruby/lib/bundler/vendor/uri/lib/uri/http.rb | 1 - ruby/lib/bundler/vendor/uri/lib/uri/https.rb | 1 - ruby/lib/bundler/vendor/uri/lib/uri/ldap.rb | 2 +- ruby/lib/bundler/vendor/uri/lib/uri/mailto.rb | 1 - .../vendor/uri/lib/uri/rfc2396_parser.rb | 15 +- .../vendor/uri/lib/uri/rfc3986_parser.rb | 13 +- .../lib/bundler/vendor/uri/lib/uri/version.rb | 2 +- ruby/lib/bundler/vendor/uri/lib/uri/ws.rb | 84 + ruby/lib/bundler/vendor/uri/lib/uri/wss.rb | 22 + ruby/lib/bundler/vendored_persistent.rb | 7 - ruby/lib/bundler/vendored_tmpdir.rb | 4 + ruby/lib/bundler/vendored_tsort.rb | 4 + ruby/lib/bundler/version.rb | 2 +- ruby/lib/bundler/worker.rb | 25 +- ruby/lib/bundler/yaml_serializer.rb | 2 +- ruby/lib/cgi.rb | 1 + ruby/lib/cgi/cgi.gemspec | 24 +- ruby/lib/cgi/cookie.rb | 1 - ruby/lib/cgi/session.rb | 58 +- ruby/lib/cgi/session/pstore.rb | 16 +- ruby/lib/cgi/util.rb | 22 +- ruby/lib/cgi/version.rb | 3 - ruby/lib/csv.rb | 2325 +- ruby/lib/csv/csv.gemspec | 52 +- ruby/lib/csv/fields_converter.rb | 10 +- ruby/lib/csv/input_record_separator.rb | 31 + ruby/lib/csv/parser.rb | 74 +- ruby/lib/csv/row.rb | 414 +- ruby/lib/csv/table.rb | 319 +- ruby/lib/csv/version.rb | 2 +- ruby/lib/csv/writer.rb | 52 +- ruby/lib/debug.rb | 1106 - ruby/lib/delegate.rb | 25 +- ruby/lib/delegate/delegate.gemspec | 20 +- ruby/lib/delegate/version.rb | 3 - ruby/lib/did_you_mean.rb | 63 +- ruby/lib/did_you_mean/core_ext/name_error.rb | 13 +- .../initializer_name_correction.rb | 20 - .../experimental/ivar_name_correction.rb | 76 - ruby/lib/did_you_mean/formatter.rb | 44 + .../formatters/plain_formatter.rb | 35 +- .../formatters/verbose_formatter.rb | 52 +- ruby/lib/did_you_mean/spell_checker.rb | 18 +- .../spell_checkers/method_name_checker.rb | 10 +- .../variable_name_checker.rb | 3 + .../pattern_key_name_checker.rb | 20 + .../spell_checkers/require_path_checker.rb | 39 + ruby/lib/did_you_mean/tree_spell_checker.rb | 150 +- ruby/lib/did_you_mean/verbose.rb | 6 +- ruby/lib/did_you_mean/version.rb | 2 +- ruby/lib/drb/drb.gemspec | 43 + ruby/lib/drb/drb.rb | 9 - ruby/lib/drb/observer.rb | 2 +- ruby/lib/drb/ssl.rb | 2 +- ruby/lib/drb/version.rb | 3 + ruby/lib/erb.gemspec | 31 + ruby/lib/erb.rb | 16 +- ruby/lib/erb/version.rb | 5 + ruby/lib/error_highlight.rb | 2 + ruby/lib/error_highlight/base.rb | 461 + ruby/lib/error_highlight/core_ext.rb | 52 + .../error_highlight/error_highlight.gemspec | 27 + ruby/lib/error_highlight/formatter.rb | 23 + ruby/lib/error_highlight/version.rb | 3 + ruby/lib/fileutils.gemspec | 4 +- ruby/lib/fileutils.rb | 57 +- ruby/lib/find.gemspec | 24 + ruby/lib/find.rb | 4 +- ruby/lib/forwardable.rb | 11 +- ruby/lib/forwardable/forwardable.gemspec | 23 +- ruby/lib/forwardable/version.rb | 5 - ruby/lib/getoptlong.rb | 13 +- ruby/lib/getoptlong/getoptlong.gemspec | 19 +- ruby/lib/getoptlong/version.rb | 3 - ruby/lib/ipaddr.gemspec | 28 +- ruby/lib/ipaddr.rb | 139 +- ruby/lib/irb.rb | 225 +- ruby/lib/irb/cmd/fork.rb | 4 +- ruby/lib/irb/cmd/help.rb | 3 +- ruby/lib/irb/cmd/info.rb | 32 + ruby/lib/irb/cmd/ls.rb | 101 + ruby/lib/irb/cmd/measure.rb | 43 + ruby/lib/irb/cmd/nop.rb | 14 +- ruby/lib/irb/cmd/pushws.rb | 1 - ruby/lib/irb/cmd/show_source.rb | 93 + ruby/lib/irb/cmd/whereami.rb | 20 + ruby/lib/irb/color.rb | 87 +- ruby/lib/irb/color_printer.rb | 47 + ruby/lib/irb/completion.rb | 171 +- ruby/lib/irb/context.rb | 67 +- ruby/lib/irb/easter-egg.rb | 3 +- ruby/lib/irb/ext/change-ws.rb | 1 - ruby/lib/irb/ext/history.rb | 2 - ruby/lib/irb/ext/loader.rb | 66 +- ruby/lib/irb/ext/save-history.rb | 25 +- ruby/lib/irb/ext/tracer.rb | 1 - ruby/lib/irb/ext/use-loader.rb | 4 +- ruby/lib/irb/ext/workspaces.rb | 1 - ruby/lib/irb/extend-command.rb | 48 +- ruby/lib/irb/help.rb | 1 - ruby/lib/irb/init.rb | 117 +- ruby/lib/irb/input-method.rb | 192 +- ruby/lib/irb/inspector.rb | 30 +- ruby/lib/irb/irb.gemspec | 50 +- ruby/lib/irb/lc/help-message | 23 +- ruby/lib/irb/lc/ja/help-message | 2 + ruby/lib/irb/ruby-lex.rb | 580 +- ruby/lib/irb/ruby_logo.aa | 1 - ruby/lib/irb/version.rb | 4 +- ruby/lib/irb/workspace.rb | 12 +- ruby/lib/irb/xmp.rb | 2 +- ruby/lib/logger.rb | 19 +- ruby/lib/logger/formatter.rb | 7 +- ruby/lib/logger/log_device.rb | 2 +- ruby/lib/logger/logger.gemspec | 6 +- ruby/lib/logger/version.rb | 2 +- ruby/lib/matrix.rb | 2407 - ruby/lib/matrix/eigenvalue_decomposition.rb | 882 - ruby/lib/matrix/lup_decomposition.rb | 219 - ruby/lib/matrix/matrix.gemspec | 28 - ruby/lib/matrix/version.rb | 5 - ruby/lib/mkmf.rb | 130 +- ruby/lib/mutex_m.gemspec | 4 +- ruby/lib/mutex_m.rb | 16 +- ruby/lib/net/ftp.rb | 1533 - ruby/lib/net/http.rb | 105 +- ruby/lib/net/http/backward.rb | 38 +- ruby/lib/net/http/generic_request.rb | 10 +- ruby/lib/net/http/header.rb | 52 +- ruby/lib/net/http/net-http.gemspec | 35 + ruby/lib/net/http/response.rb | 5 +- ruby/lib/net/imap.rb | 3728 - ruby/lib/net/net-protocol.gemspec | 36 + ruby/lib/net/pop.rb | 1023 - ruby/lib/net/pop/net-pop.gemspec | 27 - ruby/lib/net/pop/version.rb | 6 - ruby/lib/net/protocol.rb | 13 +- ruby/lib/net/smtp.rb | 1072 - ruby/lib/net/smtp/net-smtp.gemspec | 27 - ruby/lib/net/smtp/version.rb | 6 - ruby/lib/observer.rb | 27 +- ruby/lib/observer/observer.gemspec | 17 +- ruby/lib/observer/version.rb | 3 - ruby/lib/open-uri.gemspec | 25 + ruby/lib/open-uri.rb | 34 +- ruby/lib/open3.rb | 12 + ruby/lib/open3/open3.gemspec | 18 +- ruby/lib/open3/version.rb | 2 +- ruby/lib/optparse.rb | 167 +- ruby/lib/optparse/kwargs.rb | 5 + ruby/lib/optparse/optparse.gemspec | 29 + ruby/lib/ostruct.rb | 267 +- ruby/lib/ostruct/ostruct.gemspec | 19 +- ruby/lib/ostruct/version.rb | 5 - ruby/lib/pp.gemspec | 27 + ruby/lib/pp.rb | 119 +- ruby/lib/prettyprint.gemspec | 22 + ruby/lib/prettyprint.rb | 6 +- ruby/lib/prime.gemspec | 27 - ruby/lib/prime.rb | 463 - ruby/lib/pstore.rb | 2 + ruby/lib/pstore/pstore.gemspec | 17 +- ruby/lib/pstore/version.rb | 3 - ruby/lib/racc/compat.rb | 9 +- ruby/lib/racc/debugflags.rb | 9 +- ruby/lib/racc/exception.rb | 5 +- ruby/lib/racc/grammar.rb | 45 +- ruby/lib/racc/grammarfileparser.rb | 17 +- ruby/lib/racc/info.rb | 7 +- ruby/lib/racc/iset.rb | 9 +- ruby/lib/racc/logfilegenerator.rb | 9 +- ruby/lib/racc/parser-text.rb | 26 +- ruby/lib/racc/parser.rb | 26 +- ruby/lib/racc/parserfilegenerator.rb | 52 +- ruby/lib/racc/pre-setup | 13 - ruby/lib/racc/racc.gemspec | 103 +- ruby/lib/racc/rdoc/grammar.en.rdoc | 219 - ruby/lib/racc/sourcetext.rb | 9 +- ruby/lib/racc/state.rb | 5 +- ruby/lib/racc/statetransitiontable.rb | 23 +- ruby/lib/random/formatter.rb | 217 + ruby/lib/rdoc.rb | 21 + ruby/lib/rdoc/any_method.rb | 60 +- ruby/lib/rdoc/context.rb | 12 +- ruby/lib/rdoc/context/section.rb | 13 - ruby/lib/rdoc/cross_reference.rb | 50 +- ruby/lib/rdoc/erb_partial.rb | 2 +- ruby/lib/rdoc/erbio.rb | 4 +- ruby/lib/rdoc/generator/darkfish.rb | 10 +- ruby/lib/rdoc/generator/pot.rb | 6 +- .../generator/template/darkfish/_head.rhtml | 7 +- .../template/darkfish/_sidebar_VCS_info.rhtml | 4 +- .../template/darkfish/_sidebar_classes.rhtml | 4 +- .../template/darkfish/_sidebar_extends.rhtml | 14 +- .../template/darkfish/_sidebar_in_files.rhtml | 4 +- .../template/darkfish/_sidebar_includes.rhtml | 14 +- .../darkfish/_sidebar_installed.rhtml | 12 +- .../template/darkfish/_sidebar_methods.rhtml | 10 +- .../template/darkfish/_sidebar_pages.rhtml | 10 +- .../template/darkfish/_sidebar_parent.rhtml | 10 +- .../template/darkfish/_sidebar_sections.rhtml | 8 +- .../darkfish/_sidebar_table_of_contents.rhtml | 8 +- .../generator/template/darkfish/class.rhtml | 88 +- .../generator/template/darkfish/css/rdoc.css | 22 +- .../darkfish/fonts/SourceCodePro-Bold.ttf | Bin 71200 -> 138268 bytes .../darkfish/fonts/SourceCodePro-Regular.ttf | Bin 71692 -> 138680 bytes .../generator/template/darkfish/index.rhtml | 7 +- .../template/darkfish/servlet_root.rhtml | 31 +- .../template/darkfish/table_of_contents.rhtml | 32 +- ruby/lib/rdoc/i18n.rb | 2 +- ruby/lib/rdoc/markdown.rb | 519 +- ruby/lib/rdoc/markdown/literals.rb | 15 +- ruby/lib/rdoc/markup.rb | 1 + ruby/lib/rdoc/markup/attr_span.rb | 10 +- ruby/lib/rdoc/markup/attribute_manager.rb | 121 +- ruby/lib/rdoc/markup/formatter.rb | 2 +- ruby/lib/rdoc/markup/pre_process.rb | 4 +- ruby/lib/rdoc/markup/table.rb | 47 + ruby/lib/rdoc/markup/to_html.rb | 52 +- ruby/lib/rdoc/markup/to_html_crossref.rb | 18 +- ruby/lib/rdoc/markup/to_joined_paragraph.rb | 1 + ruby/lib/rdoc/markup/to_rdoc.rb | 28 + ruby/lib/rdoc/markup/to_table_of_contents.rb | 1 + ruby/lib/rdoc/options.rb | 67 +- ruby/lib/rdoc/parser.rb | 14 +- ruby/lib/rdoc/parser/c.rb | 112 +- ruby/lib/rdoc/parser/changelog.rb | 159 +- ruby/lib/rdoc/parser/ruby.rb | 18 + ruby/lib/rdoc/rd/block_parser.rb | 2 +- ruby/lib/rdoc/rd/inline_parser.rb | 2 +- ruby/lib/rdoc/rdoc.gemspec | 7 +- ruby/lib/rdoc/rdoc.rb | 71 +- ruby/lib/rdoc/ri/driver.rb | 29 +- ruby/lib/rdoc/ri/paths.rb | 20 +- ruby/lib/rdoc/ri/task.rb | 2 +- ruby/lib/rdoc/rubygems_hook.rb | 8 +- ruby/lib/rdoc/servlet.rb | 7 +- ruby/lib/rdoc/store.rb | 4 +- ruby/lib/rdoc/text.rb | 16 +- ruby/lib/rdoc/version.rb | 2 +- ruby/lib/readline.gemspec | 28 +- ruby/lib/readline.rb | 1 + ruby/lib/reline.rb | 239 +- ruby/lib/reline/ansi.rb | 279 +- ruby/lib/reline/config.rb | 136 +- ruby/lib/reline/general_io.rb | 34 +- ruby/lib/reline/history.rb | 42 +- ruby/lib/reline/key_actor/base.rb | 12 + ruby/lib/reline/key_actor/emacs.rb | 16 +- ruby/lib/reline/key_actor/vi_command.rb | 8 +- ruby/lib/reline/key_actor/vi_insert.rb | 4 +- ruby/lib/reline/key_stroke.rb | 80 +- ruby/lib/reline/kill_ring.rb | 12 + ruby/lib/reline/line_editor.rb | 1810 +- ruby/lib/reline/reline.gemspec | 15 +- ruby/lib/reline/terminfo.rb | 134 + ruby/lib/reline/unicode.rb | 176 +- ruby/lib/reline/unicode/east_asian_width.rb | 2279 +- ruby/lib/reline/version.rb | 2 +- ruby/lib/reline/windows.rb | 426 +- ruby/lib/resolv-replace.gemspec | 22 + ruby/lib/resolv.gemspec | 22 + ruby/lib/resolv.rb | 32 +- ruby/lib/rexml/attlistdecl.rb | 63 - ruby/lib/rexml/attribute.rb | 205 - ruby/lib/rexml/cdata.rb | 68 - ruby/lib/rexml/child.rb | 97 - ruby/lib/rexml/comment.rb | 80 - ruby/lib/rexml/doctype.rb | 287 - ruby/lib/rexml/document.rb | 291 - ruby/lib/rexml/dtd/attlistdecl.rb | 11 - ruby/lib/rexml/dtd/dtd.rb | 47 - ruby/lib/rexml/dtd/elementdecl.rb | 18 - ruby/lib/rexml/dtd/entitydecl.rb | 57 - ruby/lib/rexml/dtd/notationdecl.rb | 40 - ruby/lib/rexml/element.rb | 1269 - ruby/lib/rexml/encoding.rb | 51 - ruby/lib/rexml/entity.rb | 171 - ruby/lib/rexml/formatters/default.rb | 116 - ruby/lib/rexml/formatters/pretty.rb | 142 - ruby/lib/rexml/formatters/transitive.rb | 58 - ruby/lib/rexml/functions.rb | 447 - ruby/lib/rexml/instruction.rb | 79 - ruby/lib/rexml/light/node.rb | 196 - ruby/lib/rexml/namespace.rb | 59 - ruby/lib/rexml/node.rb | 76 - ruby/lib/rexml/output.rb | 30 - ruby/lib/rexml/parent.rb | 166 - ruby/lib/rexml/parseexception.rb | 52 - ruby/lib/rexml/parsers/baseparser.rb | 594 - ruby/lib/rexml/parsers/lightparser.rb | 59 - ruby/lib/rexml/parsers/pullparser.rb | 197 - ruby/lib/rexml/parsers/sax2parser.rb | 273 - ruby/lib/rexml/parsers/streamparser.rb | 61 - ruby/lib/rexml/parsers/treeparser.rb | 101 - ruby/lib/rexml/parsers/ultralightparser.rb | 57 - ruby/lib/rexml/parsers/xpathparser.rb | 675 - ruby/lib/rexml/quickpath.rb | 266 - ruby/lib/rexml/rexml.gemspec | 84 - ruby/lib/rexml/rexml.rb | 32 - ruby/lib/rexml/sax2listener.rb | 98 - ruby/lib/rexml/security.rb | 28 - ruby/lib/rexml/source.rb | 298 - ruby/lib/rexml/streamlistener.rb | 93 - ruby/lib/rexml/text.rb | 424 - ruby/lib/rexml/undefinednamespaceexception.rb | 9 - ruby/lib/rexml/validation/relaxng.rb | 539 - ruby/lib/rexml/validation/validation.rb | 144 - .../rexml/validation/validationexception.rb | 10 - ruby/lib/rexml/xmldecl.rb | 130 - ruby/lib/rexml/xmltokens.rb | 85 - ruby/lib/rexml/xpath.rb | 81 - ruby/lib/rexml/xpath_parser.rb | 968 - ruby/lib/rinda/rinda.gemspec | 28 + ruby/lib/rss.rb | 94 - ruby/lib/rss/0.9.rb | 462 - ruby/lib/rss/1.0.rb | 485 - ruby/lib/rss/2.0.rb | 143 - ruby/lib/rss/atom.rb | 1025 - ruby/lib/rss/content.rb | 34 - ruby/lib/rss/content/1.0.rb | 10 - ruby/lib/rss/content/2.0.rb | 12 - ruby/lib/rss/converter.rb | 171 - ruby/lib/rss/dublincore.rb | 164 - ruby/lib/rss/dublincore/1.0.rb | 13 - ruby/lib/rss/dublincore/2.0.rb | 13 - ruby/lib/rss/dublincore/atom.rb | 17 - ruby/lib/rss/image.rb | 198 - ruby/lib/rss/itunes.rb | 425 - ruby/lib/rss/maker.rb | 79 - ruby/lib/rss/maker/0.9.rb | 509 - ruby/lib/rss/maker/1.0.rb | 436 - ruby/lib/rss/maker/2.0.rb | 224 - ruby/lib/rss/maker/atom.rb | 173 - ruby/lib/rss/maker/base.rb | 945 - ruby/lib/rss/maker/content.rb | 22 - ruby/lib/rss/maker/dublincore.rb | 122 - ruby/lib/rss/maker/entry.rb | 164 - ruby/lib/rss/maker/feed.rb | 427 - ruby/lib/rss/maker/image.rb | 112 - ruby/lib/rss/maker/itunes.rb | 243 - ruby/lib/rss/maker/slash.rb | 34 - ruby/lib/rss/maker/syndication.rb | 19 - ruby/lib/rss/maker/taxonomy.rb | 119 - ruby/lib/rss/maker/trackback.rb | 62 - ruby/lib/rss/parser.rb | 589 - ruby/lib/rss/rexmlparser.rb | 50 - ruby/lib/rss/rss.gemspec | 80 - ruby/lib/rss/rss.rb | 1342 - ruby/lib/rss/slash.rb | 52 - ruby/lib/rss/syndication.rb | 69 - ruby/lib/rss/taxonomy.rb | 148 - ruby/lib/rss/trackback.rb | 291 - ruby/lib/rss/utils.rb | 200 - ruby/lib/rss/version.rb | 4 - ruby/lib/rss/xml-stylesheet.rb | 106 - ruby/lib/rss/xml.rb | 72 - ruby/lib/rss/xmlparser.rb | 95 - ruby/lib/rss/xmlscanner.rb | 122 - ruby/lib/ruby2_keywords.gemspec | 23 + ruby/lib/rubygems.rb | 484 +- ruby/lib/rubygems/available_set.rb | 10 +- ruby/lib/rubygems/basic_specification.rb | 38 +- ruby/lib/rubygems/bundler_version_finder.rb | 79 +- ruby/lib/rubygems/command.rb | 53 +- ruby/lib/rubygems/command_manager.rb | 21 +- ruby/lib/rubygems/commands/build_command.rb | 66 +- ruby/lib/rubygems/commands/cert_command.rb | 109 +- ruby/lib/rubygems/commands/check_command.rb | 10 +- ruby/lib/rubygems/commands/cleanup_command.rb | 36 +- .../lib/rubygems/commands/contents_command.rb | 14 +- .../rubygems/commands/dependency_command.rb | 66 +- .../rubygems/commands/environment_command.rb | 6 +- ruby/lib/rubygems/commands/fetch_command.rb | 47 +- .../commands/generate_index_command.rb | 6 +- ruby/lib/rubygems/commands/help_command.rb | 10 +- ruby/lib/rubygems/commands/info_command.rb | 15 +- ruby/lib/rubygems/commands/install_command.rb | 40 +- ruby/lib/rubygems/commands/list_command.rb | 17 +- ruby/lib/rubygems/commands/lock_command.rb | 6 +- ruby/lib/rubygems/commands/mirror_command.rb | 4 +- ruby/lib/rubygems/commands/open_command.rb | 10 +- .../lib/rubygems/commands/outdated_command.rb | 10 +- ruby/lib/rubygems/commands/owner_command.rb | 21 +- .../lib/rubygems/commands/pristine_command.rb | 58 +- ruby/lib/rubygems/commands/push_command.rb | 73 +- ruby/lib/rubygems/commands/query_command.rb | 362 +- ruby/lib/rubygems/commands/rdoc_command.rb | 20 +- ruby/lib/rubygems/commands/search_command.rb | 16 +- ruby/lib/rubygems/commands/server_command.rb | 93 +- ruby/lib/rubygems/commands/setup_command.rb | 339 +- ruby/lib/rubygems/commands/signin_command.rb | 6 +- ruby/lib/rubygems/commands/signout_command.rb | 4 +- ruby/lib/rubygems/commands/sources_command.rb | 24 +- .../commands/specification_command.rb | 28 +- ruby/lib/rubygems/commands/stale_command.rb | 6 +- .../rubygems/commands/uninstall_command.rb | 14 +- ruby/lib/rubygems/commands/unpack_command.rb | 14 +- ruby/lib/rubygems/commands/update_command.rb | 139 +- ruby/lib/rubygems/commands/which_command.rb | 4 +- ruby/lib/rubygems/commands/yank_command.rb | 21 +- ruby/lib/rubygems/config_file.rb | 36 +- ruby/lib/rubygems/core_ext/kernel_require.rb | 65 +- ruby/lib/rubygems/core_ext/kernel_warn.rb | 25 +- ruby/lib/rubygems/core_ext/tcpsocket_init.rb | 52 + ruby/lib/rubygems/defaults.rb | 126 +- ruby/lib/rubygems/dependency.rb | 25 +- ruby/lib/rubygems/dependency_installer.rb | 100 +- ruby/lib/rubygems/dependency_list.rb | 22 +- ruby/lib/rubygems/deprecate.rb | 110 +- ruby/lib/rubygems/doctor.rb | 22 +- ruby/lib/rubygems/errors.rb | 23 +- ruby/lib/rubygems/exceptions.rb | 63 +- ruby/lib/rubygems/ext.rb | 12 +- ruby/lib/rubygems/ext/build_error.rb | 2 + ruby/lib/rubygems/ext/builder.rb | 74 +- ruby/lib/rubygems/ext/cmake_builder.rb | 15 +- ruby/lib/rubygems/ext/configure_builder.rb | 13 +- ruby/lib/rubygems/ext/ext_conf_builder.rb | 47 +- ruby/lib/rubygems/ext/rake_builder.rb | 13 +- ruby/lib/rubygems/gem_runner.rb | 29 +- ruby/lib/rubygems/gemcutter_utilities.rb | 137 +- ruby/lib/rubygems/indexer.rb | 29 +- ruby/lib/rubygems/install_default_message.rb | 4 +- ruby/lib/rubygems/install_message.rb | 4 +- ruby/lib/rubygems/install_update_options.rb | 43 +- ruby/lib/rubygems/installer.rb | 303 +- .../rubygems/installer_uninstaller_utils.rb | 29 + ruby/lib/rubygems/local_remote_options.rb | 10 +- ruby/lib/rubygems/mock_gem_ui.rb | 8 +- ruby/lib/rubygems/name_tuple.rb | 15 +- ruby/lib/rubygems/openssl.rb | 7 + ruby/lib/rubygems/optparse.rb | 3 + ruby/lib/rubygems/optparse/.document | 1 + .../lib/rubygems/optparse/lib/optionparser.rb | 2 + ruby/lib/rubygems/optparse/lib/optparse.rb | 2230 + ruby/lib/rubygems/optparse/lib/optparse/ac.rb | 54 + .../rubygems/optparse/lib/optparse/date.rb | 18 + .../rubygems/optparse/lib/optparse/kwargs.rb | 22 + .../optparse/lib/optparse/shellwords.rb | 7 + .../rubygems/optparse/lib/optparse/time.rb | 11 + .../lib/rubygems/optparse/lib/optparse/uri.rb | 7 + .../rubygems/optparse/lib/optparse/version.rb | 71 + ruby/lib/rubygems/package.rb | 148 +- ruby/lib/rubygems/package/digest_io.rb | 2 - ruby/lib/rubygems/package/file_source.rb | 2 - ruby/lib/rubygems/package/io_source.rb | 6 +- ruby/lib/rubygems/package/old.rb | 6 +- ruby/lib/rubygems/package/tar_header.rb | 10 +- ruby/lib/rubygems/package/tar_reader.rb | 5 +- ruby/lib/rubygems/package/tar_reader/entry.rb | 3 - ruby/lib/rubygems/package/tar_writer.rb | 14 +- ruby/lib/rubygems/package_task.rb | 12 +- ruby/lib/rubygems/path_support.rb | 27 +- ruby/lib/rubygems/platform.rb | 126 +- ruby/lib/rubygems/psych_additions.rb | 2 +- ruby/lib/rubygems/psych_tree.rb | 2 - ruby/lib/rubygems/query_utils.rb | 351 + ruby/lib/rubygems/rdoc.rb | 14 +- ruby/lib/rubygems/remote_fetcher.rb | 98 +- ruby/lib/rubygems/request.rb | 27 +- ruby/lib/rubygems/request/connection_pools.rb | 8 +- ruby/lib/rubygems/request/http_pool.rb | 4 +- ruby/lib/rubygems/request/https_pool.rb | 2 - ruby/lib/rubygems/request_set.rb | 41 +- .../request_set/gem_dependency_api.rb | 14 +- ruby/lib/rubygems/request_set/lockfile.rb | 30 +- .../rubygems/request_set/lockfile/parser.rb | 2 - .../request_set/lockfile/tokenizer.rb | 6 +- ruby/lib/rubygems/requirement.rb | 64 +- ruby/lib/rubygems/resolver.rb | 88 +- .../rubygems/resolver/activation_request.rb | 12 +- ruby/lib/rubygems/resolver/api_set.rb | 55 +- .../rubygems/resolver/api_set/gem_parser.rb | 20 + .../rubygems/resolver/api_specification.rb | 34 +- ruby/lib/rubygems/resolver/best_set.rb | 6 +- ruby/lib/rubygems/resolver/composed_set.rb | 8 +- ruby/lib/rubygems/resolver/conflict.rb | 6 +- ruby/lib/rubygems/resolver/current_set.rb | 2 - .../rubygems/resolver/dependency_request.rb | 4 +- ruby/lib/rubygems/resolver/git_set.rb | 2 - .../rubygems/resolver/git_specification.rb | 4 +- ruby/lib/rubygems/resolver/index_set.rb | 4 +- .../rubygems/resolver/index_specification.rb | 34 +- .../resolver/installed_specification.rb | 2 - ruby/lib/rubygems/resolver/installer_set.rb | 65 +- .../rubygems/resolver/local_specification.rb | 2 - ruby/lib/rubygems/resolver/lock_set.rb | 6 +- .../rubygems/resolver/lock_specification.rb | 2 - ruby/lib/rubygems/resolver/molinillo.rb | 2 +- .../resolver/molinillo/lib/molinillo.rb | 11 +- .../molinillo/delegates/resolution_state.rb | 7 + .../delegates/specification_provider.rb | 8 + .../lib/molinillo/dependency_graph.rb | 49 +- .../lib/molinillo/dependency_graph/action.rb | 1 + .../dependency_graph/add_edge_no_circular.rb | 3 +- .../molinillo/dependency_graph/add_vertex.rb | 3 +- .../molinillo/dependency_graph/delete_edge.rb | 3 +- .../dependency_graph/detach_vertex_named.rb | 3 +- .../lib/molinillo/dependency_graph/log.rb | 13 +- .../molinillo/dependency_graph/set_payload.rb | 3 +- .../lib/molinillo/dependency_graph/tag.rb | 7 +- .../lib/molinillo/dependency_graph/vertex.rb | 63 +- .../molinillo/lib/molinillo/errors.rb | 84 +- .../molinillo/lib/molinillo/gem_metadata.rb | 3 +- .../modules/specification_provider.rb | 14 +- .../molinillo/lib/molinillo/modules/ui.rb | 4 +- .../molinillo/lib/molinillo/resolution.rb | 675 +- .../molinillo/lib/molinillo/resolver.rb | 5 +- .../resolver/molinillo/lib/molinillo/state.rb | 12 +- .../lib/rubygems/resolver/requirement_list.rb | 2 - ruby/lib/rubygems/resolver/set.rb | 3 - ruby/lib/rubygems/resolver/source_set.rb | 2 - .../rubygems/resolver/spec_specification.rb | 16 +- ruby/lib/rubygems/resolver/specification.rb | 18 +- ruby/lib/rubygems/resolver/stats.rb | 2 - ruby/lib/rubygems/resolver/vendor_set.rb | 2 - .../rubygems/resolver/vendor_specification.rb | 2 - ruby/lib/rubygems/s3_uri_signer.rb | 16 +- ruby/lib/rubygems/safe_yaml.rb | 26 +- ruby/lib/rubygems/security.rb | 142 +- ruby/lib/rubygems/security/policy.rb | 20 +- ruby/lib/rubygems/security/signer.rb | 21 +- ruby/lib/rubygems/security/trust_dir.rb | 5 +- ruby/lib/rubygems/security_option.rb | 10 +- ruby/lib/rubygems/server.rb | 879 - ruby/lib/rubygems/source.rb | 53 +- ruby/lib/rubygems/source/git.rb | 19 +- ruby/lib/rubygems/source/installed.rb | 2 - ruby/lib/rubygems/source/local.rb | 6 +- ruby/lib/rubygems/source/lock.rb | 2 - ruby/lib/rubygems/source/specific_file.rb | 2 - ruby/lib/rubygems/source/vendor.rb | 2 - ruby/lib/rubygems/source_list.rb | 25 +- ruby/lib/rubygems/source_local.rb | 7 - ruby/lib/rubygems/source_specific_file.rb | 6 - ruby/lib/rubygems/spec_fetcher.rb | 95 +- ruby/lib/rubygems/specification.rb | 494 +- ruby/lib/rubygems/specification_policy.rb | 165 +- .../DigiCertHighAssuranceEVRootCA.pem | 23 - .../rubygems.org/AddTrustExternalCARoot.pem | 25 - .../GlobalSignRootCA.pem | 0 .../rubygems.org/GlobalSignRootCA_R3.pem | 21 + ruby/lib/rubygems/stub_specification.rb | 41 +- ruby/lib/rubygems/syck_hack.rb | 79 - ruby/lib/rubygems/test_case.rb | 1537 - ruby/lib/rubygems/test_utilities.rb | 380 - ruby/lib/rubygems/text.rb | 41 +- ruby/lib/rubygems/tsort.rb | 3 + ruby/lib/rubygems/tsort/.document | 1 + ruby/lib/rubygems/tsort/lib/tsort.rb | 454 + ruby/lib/rubygems/uninstaller.rb | 119 +- .../rubygems/unknown_command_spell_checker.rb | 21 + ruby/lib/rubygems/uri.rb | 111 + ruby/lib/rubygems/uri_formatter.rb | 5 +- ruby/lib/rubygems/uri_parser.rb | 36 - ruby/lib/rubygems/uri_parsing.rb | 23 - ruby/lib/rubygems/user_interaction.rb | 57 +- ruby/lib/rubygems/util.rb | 18 +- ruby/lib/rubygems/util/licenses.rb | 123 +- ruby/lib/rubygems/util/list.rb | 2 - ruby/lib/rubygems/validator.rb | 8 +- ruby/lib/rubygems/version.rb | 29 +- ruby/lib/rubygems/version_option.rb | 12 +- ruby/lib/securerandom.gemspec | 22 + ruby/lib/securerandom.rb | 271 +- ruby/lib/set.rb | 622 +- ruby/lib/set/set.gemspec | 23 + ruby/lib/set/sorted_set.rb | 6 + ruby/lib/shellwords.gemspec | 22 + ruby/lib/shellwords.rb | 39 +- ruby/lib/singleton.rb | 4 +- ruby/lib/singleton/singleton.gemspec | 17 +- ruby/lib/singleton/version.rb | 3 - ruby/lib/tempfile.gemspec | 24 + ruby/lib/tempfile.rb | 48 +- ruby/lib/time.gemspec | 24 + ruby/lib/time.rb | 48 +- ruby/lib/timeout.rb | 31 +- ruby/lib/timeout/timeout.gemspec | 17 +- ruby/lib/timeout/version.rb | 3 - ruby/lib/tmpdir.gemspec | 26 + ruby/lib/tmpdir.rb | 33 +- ruby/lib/tracer.rb | 291 - ruby/lib/tracer/tracer.gemspec | 23 - ruby/lib/tracer/version.rb | 5 - ruby/lib/tsort.gemspec | 22 + ruby/lib/un.gemspec | 24 + ruby/lib/un.rb | 57 +- ruby/lib/unicode_normalize/tables.rb | 36 + ruby/lib/uri.rb | 25 +- ruby/lib/uri/common.rb | 121 +- ruby/lib/uri/file.rb | 2 +- ruby/lib/uri/ftp.rb | 4 +- ruby/lib/uri/generic.rb | 31 +- ruby/lib/uri/http.rb | 43 +- ruby/lib/uri/https.rb | 4 +- ruby/lib/uri/ldap.rb | 4 +- ruby/lib/uri/ldaps.rb | 3 +- ruby/lib/uri/mailto.rb | 3 +- ruby/lib/uri/rfc2396_parser.rb | 35 +- ruby/lib/uri/rfc3986_parser.rb | 23 +- ruby/lib/uri/uri.gemspec | 4 +- ruby/lib/uri/version.rb | 2 +- ruby/lib/uri/ws.rb | 83 + ruby/lib/uri/wss.rb | 23 + ruby/lib/weakref.rb | 1 + ruby/lib/weakref/weakref.gemspec | 34 + ruby/lib/webrick/httpproxy.rb | 350 - ruby/lib/webrick/server.rb | 378 - ruby/lib/webrick/utils.rb | 270 - ruby/lib/webrick/version.rb | 18 - ruby/lib/webrick/webrick.gemspec | 76 - ruby/lib/yaml.rb | 2 +- ruby/lib/yaml/store.rb | 2 +- ruby/lib/yaml/yaml.gemspec | 4 +- ruby/libexec/bundle | 18 +- ruby/{bin => libexec}/erb | 4 +- ruby/libexec/racc | 60 +- ruby/libexec/racc2y | 195 - ruby/libexec/y2racc | 339 - ruby/load.c | 438 +- ruby/localeinit.c | 5 +- ruby/main.c | 113 +- ruby/man/bundle-add.1.txt | 58 - ruby/man/bundle-add.ronn | 46 - ruby/man/bundle-binstubs.1.txt | 48 - ruby/man/bundle-binstubs.ronn | 43 - ruby/man/bundle-cache.1.txt | 78 - ruby/man/bundle-check.1.txt | 33 - ruby/man/bundle-clean.1.txt | 26 - ruby/man/bundle-config.1.txt | 528 - ruby/man/bundle-config.ronn | 399 - ruby/man/bundle-doctor.1.txt | 44 - ruby/man/bundle-exec.1.txt | 178 - ruby/man/bundle-gem.1 | 80 - ruby/man/bundle-gem.1.txt | 91 - ruby/man/bundle-gem.ronn | 78 - ruby/man/bundle-info.1.txt | 21 - ruby/man/bundle-init.1.txt | 34 - ruby/man/bundle-inject.1.txt | 32 - ruby/man/bundle-install.1.txt | 401 - ruby/man/bundle-install.ronn | 383 - ruby/man/bundle-list.1 | 50 - ruby/man/bundle-list.1.txt | 43 - ruby/man/bundle-list.ronn | 33 - ruby/man/bundle-lock.1.txt | 93 - ruby/man/bundle-open.1.txt | 29 - ruby/man/bundle-outdated.1.txt | 131 - ruby/man/bundle-package.1 | 55 - ruby/man/bundle-package.1.txt | 79 - ruby/man/bundle-package.ronn | 72 - ruby/man/bundle-platform.1.txt | 57 - ruby/man/bundle-pristine.1.txt | 44 - ruby/man/bundle-remove.1.txt | 34 - ruby/man/bundle-show.1.txt | 27 - ruby/man/bundle-update.1.txt | 390 - ruby/man/bundle-update.ronn | 350 - ruby/man/bundle-viz.1.txt | 39 - ruby/man/bundle.1.txt | 116 - ruby/man/gemfile.5.txt | 649 - ruby/man/irb.1 | 24 +- ruby/man/ruby.1 | 6 +- ruby/marshal.c | 311 +- ruby/marshal.rb | 40 + ruby/math.c | 65 +- ruby/memory_view.c | 872 + ruby/method.h | 45 +- ruby/mini_builtin.c | 18 +- ruby/miniprelude.c | 49 +- ruby/misc/expand_tabs.rb | 61 +- ruby/misc/lldb_cruby.py | 455 +- ruby/misc/lldb_disasm.py | 239 + ruby/misc/lldb_yjit.py | 47 + ruby/misc/rb_optparse.bash | 5 +- ruby/misc/rb_optparse.zsh | 13 +- ruby/misc/test_yjit_asm.sh | 10 + ruby/misc/yjit_asm_tests.c | 443 + ruby/missing/alloca.c | 2 +- ruby/missing/crypt.h | 5 +- ruby/missing/dtoa.c | 111 +- ruby/missing/dup2.c | 60 - ruby/missing/erf.c | 15 - ruby/missing/explicit_bzero.c | 4 +- ruby/missing/file.h | 3 +- ruby/missing/fileblocks.c | 1 - ruby/missing/finite.c | 9 - ruby/missing/flock.c | 2 +- ruby/missing/isinf.c | 69 - ruby/missing/isnan.c | 32 - ruby/missing/langinfo.c | 2 +- ruby/missing/signbit.c | 19 - ruby/missing/stdbool.h | 20 - ruby/missing/tgamma.c | 17 +- ruby/mjit.c | 449 +- ruby/mjit.h | 182 +- ruby/mjit_compile.c | 318 +- ruby/mjit_compile.inc | 35 +- ruby/mjit_worker.c | 728 +- ruby/nilclass.rb | 25 + ruby/node.c | 194 +- ruby/node.h | 88 +- ruby/numeric.c | 3792 +- ruby/numeric.rb | 332 + ruby/object.c | 1368 +- ruby/pack.c | 138 +- ruby/pack.rb | 66 +- ruby/pack.rbinc | 7 +- ruby/parse.c | 8930 +- ruby/parse.h | 11 +- ruby/parse.y | 2228 +- ruby/prelude.rb | 15 - ruby/prelude.rbinc | 7 +- ruby/probes.d | 11 - ruby/probes_helper.h | 2 + ruby/proc.c | 726 +- ruby/process.c | 1104 +- ruby/ractor.c | 3261 + ruby/ractor.rb | 838 + ruby/ractor_core.h | 346 + ruby/random.c | 770 +- ruby/range.c | 1396 +- ruby/rational.c | 405 +- ruby/re.c | 309 +- ruby/regcomp.c | 47 +- ruby/regerror.c | 4 +- ruby/regexec.c | 8 +- ruby/regint.h | 10 +- ruby/regparse.c | 18 +- ruby/revision.h | 6 +- ruby/ruby-runner.c | 2 +- ruby/ruby.c | 642 +- ruby/ruby_assert.h | 23 +- ruby/ruby_atomic.h | 267 +- ruby/safe.c | 145 - ruby/sample/drb/README.ja.rdoc | 2 +- ruby/sample/drb/README.rdoc | 2 +- ruby/sample/drb/dchats.rb | 2 +- ruby/sample/drb/name.rb | 3 +- ruby/sample/exyacc.rb | 2 +- ruby/sample/list.rb | 5 +- ruby/sample/openssl/c_rehash.rb | 3 +- ruby/sample/openssl/cert2text.rb | 7 +- ruby/sample/openssl/certstore.rb | 7 +- ruby/sample/openssl/echo_cli.rb | 2 +- ruby/sample/openssl/echo_svr.rb | 8 +- ruby/sample/openssl/gen_csr.rb | 14 +- ruby/sample/openssl/smime_read.rb | 11 +- ruby/sample/openssl/smime_write.rb | 15 +- ruby/sample/rss/blend.rb | 79 - ruby/sample/rss/convert.rb | 69 - ruby/sample/rss/list_description.rb | 91 - ruby/sample/rss/re_read.rb | 64 - ruby/sample/rss/rss_recent.rb | 85 - ruby/sample/testunit/adder.rb | 13 - ruby/sample/testunit/subtracter.rb | 12 - ruby/sample/testunit/tc_adder.rb | 18 - ruby/sample/testunit/tc_subtracter.rb | 18 - ruby/sample/testunit/ts_examples.rb | 7 - ruby/sample/trick2013/mame/remarks.markdown | 4 +- ruby/sample/trick2015/kinaba/entry.rb | 2 +- .../trick2018/01-kinaba/remarks.markdown | 2 +- ruby/sample/webrick/demo-app.rb | 66 - ruby/sample/webrick/demo-multipart.cgi | 12 - ruby/sample/webrick/demo-servlet.rb | 6 - ruby/sample/webrick/demo-urlencoded.cgi | 12 - ruby/sample/webrick/hello.cgi | 11 - ruby/sample/webrick/hello.rb | 8 - ruby/sample/webrick/httpd.rb | 23 - ruby/sample/webrick/httpproxy.rb | 25 - ruby/sample/webrick/httpsd.rb | 33 - ruby/scheduler.c | 316 + ruby/signal.c | 159 +- ruby/siphash.c | 17 +- ruby/spec/README.md | 2 +- ruby/spec/bundler/bundler/bundler_spec.rb | 73 +- ruby/spec/bundler/bundler/cli_spec.rb | 89 +- .../compact_index_client/updater_spec.rb | 46 +- ruby/spec/bundler/bundler/definition_spec.rb | 100 +- ruby/spec/bundler/bundler/dep_proxy_spec.rb | 22 +- ruby/spec/bundler/bundler/digest_spec.rb | 17 + ruby/spec/bundler/bundler/dsl_spec.rb | 134 +- .../bundler/endpoint_specification_spec.rb | 23 +- ruby/spec/bundler/bundler/env_spec.rb | 60 +- .../bundler/fetcher/compact_index_spec.rb | 5 +- .../bundler/fetcher/downloader_spec.rb | 18 +- .../bundler/bundler/fetcher/index_spec.rb | 119 +- ruby/spec/bundler/bundler/fetcher_spec.rb | 7 +- .../bundler/bundler/friendly_errors_spec.rb | 33 +- ruby/spec/bundler/bundler/gem_helper_spec.rb | 158 +- .../bundler/gem_version_promoter_spec.rb | 4 +- .../installer/parallel_installer_spec.rb | 33 + .../installer/spec_installation_spec.rb | 4 + ruby/spec/bundler/bundler/mirror_spec.rb | 2 + .../bundler/bundler/plugin/api/source_spec.rb | 6 + ruby/spec/bundler/bundler/plugin/dsl_spec.rb | 2 +- .../spec/bundler/bundler/plugin/index_spec.rb | 23 +- .../bundler/bundler/plugin/installer_spec.rb | 2 +- ruby/spec/bundler/bundler/plugin_spec.rb | 39 +- .../spec/bundler/bundler/psyched_yaml_spec.rb | 9 - .../bundler/rubygems_integration_spec.rb | 23 +- ruby/spec/bundler/bundler/settings_spec.rb | 25 +- .../bundler/bundler/shared_helpers_spec.rb | 68 +- .../bundler/source/git/git_proxy_spec.rb | 49 +- ruby/spec/bundler/bundler/source/git_spec.rb | 49 +- .../bundler/bundler/source/rubygems_spec.rb | 14 + ruby/spec/bundler/bundler/source_list_spec.rb | 80 +- ruby/spec/bundler/bundler/source_spec.rb | 2 +- .../bundler/stub_specification_spec.rb | 33 +- ruby/spec/bundler/bundler/ui/shell_spec.rb | 19 +- ruby/spec/bundler/bundler/worker_spec.rb | 47 + ruby/spec/bundler/cache/gems_spec.rb | 67 +- ruby/spec/bundler/cache/git_spec.rb | 68 +- ruby/spec/bundler/cache/path_spec.rb | 43 +- ruby/spec/bundler/cache/platform_spec.rb | 4 +- ruby/spec/bundler/commands/add_spec.rb | 119 +- ruby/spec/bundler/commands/binstubs_spec.rb | 164 +- ruby/spec/bundler/commands/cache_spec.rb | 139 +- ruby/spec/bundler/commands/check_spec.rb | 264 +- ruby/spec/bundler/commands/clean_spec.rb | 141 +- ruby/spec/bundler/commands/config_spec.rb | 153 +- ruby/spec/bundler/commands/console_spec.rb | 51 +- ruby/spec/bundler/commands/doctor_spec.rb | 48 +- ruby/spec/bundler/commands/exec_spec.rb | 554 +- ruby/spec/bundler/commands/fund_spec.rb | 82 + ruby/spec/bundler/commands/help_spec.rb | 29 +- ruby/spec/bundler/commands/info_spec.rb | 120 +- ruby/spec/bundler/commands/init_spec.rb | 34 +- ruby/spec/bundler/commands/inject_spec.rb | 38 +- ruby/spec/bundler/commands/install_spec.rb | 577 +- ruby/spec/bundler/commands/licenses_spec.rb | 10 +- ruby/spec/bundler/commands/list_spec.rb | 39 +- ruby/spec/bundler/commands/lock_spec.rb | 258 +- ruby/spec/bundler/commands/newgem_spec.rb | 1159 +- ruby/spec/bundler/commands/open_spec.rb | 15 +- ruby/spec/bundler/commands/outdated_spec.rb | 880 +- .../commands/post_bundle_message_spec.rb | 137 +- ruby/spec/bundler/commands/pristine_spec.rb | 76 +- ruby/spec/bundler/commands/remove_spec.rb | 223 +- ruby/spec/bundler/commands/show_spec.rb | 35 +- ruby/spec/bundler/commands/update_spec.rb | 1042 +- ruby/spec/bundler/commands/version_spec.rb | 12 +- ruby/spec/bundler/commands/viz_spec.rb | 25 +- .../install/allow_offline_install_spec.rb | 22 +- ruby/spec/bundler/install/binstubs_spec.rb | 2 +- ruby/spec/bundler/install/bundler_spec.rb | 145 +- ruby/spec/bundler/install/deploy_spec.rb | 204 +- ruby/spec/bundler/install/failure_spec.rb | 101 +- .../install/gemfile/eval_gemfile_spec.rb | 54 +- .../bundler/install/gemfile/gemspec_spec.rb | 249 +- ruby/spec/bundler/install/gemfile/git_spec.rb | 372 +- .../bundler/install/gemfile/groups_spec.rb | 167 +- .../bundler/install/gemfile/install_if.rb | 44 - .../install/gemfile/install_if_spec.rb | 44 + .../bundler/install/gemfile/lockfile_spec.rb | 8 +- .../spec/bundler/install/gemfile/path_spec.rb | 258 +- .../bundler/install/gemfile/platform_spec.rb | 264 +- .../spec/bundler/install/gemfile/ruby_spec.rb | 41 +- .../bundler/install/gemfile/sources_spec.rb | 1324 +- .../install/gemfile/specific_platform_spec.rb | 384 +- ruby/spec/bundler/install/gemfile_spec.rb | 60 +- .../install/gems/compact_index_spec.rb | 308 +- .../install/gems/dependency_api_spec.rb | 173 +- ruby/spec/bundler/install/gems/flex_spec.rb | 102 +- ruby/spec/bundler/install/gems/fund_spec.rb | 137 + .../install/gems/native_extensions_spec.rb | 73 +- .../bundler/install/gems/post_install_spec.rb | 2 +- .../bundler/install/gems/resolving_spec.rb | 200 +- .../bundler/install/gems/standalone_spec.rb | 274 +- ruby/spec/bundler/install/gems/sudo_spec.rb | 36 +- ruby/spec/bundler/install/gems/win32_spec.rb | 3 +- ruby/spec/bundler/install/gemspecs_spec.rb | 21 +- ruby/spec/bundler/install/git_spec.rb | 47 +- .../spec/bundler/install/global_cache_spec.rb | 113 +- ruby/spec/bundler/install/path_spec.rb | 99 +- ruby/spec/bundler/install/prereleases_spec.rb | 21 +- .../spec/bundler/install/process_lock_spec.rb | 2 +- ruby/spec/bundler/install/redownload_spec.rb | 21 +- .../bundler/install/security_policy_spec.rb | 16 +- ruby/spec/bundler/install/yanked_spec.rb | 37 +- ruby/spec/bundler/lock/git_spec.rb | 1 + ruby/spec/bundler/lock/lockfile_spec.rb | 612 +- ruby/spec/bundler/other/cli_dispatch_spec.rb | 6 +- ruby/spec/bundler/other/ext_spec.rb | 4 +- .../bundler/other/major_deprecation_spec.rb | 432 +- ruby/spec/bundler/other/platform_spec.rb | 672 +- ruby/spec/bundler/plugins/command_spec.rb | 6 +- ruby/spec/bundler/plugins/install_spec.rb | 76 +- .../bundler/plugins/source/example_spec.rb | 86 +- ruby/spec/bundler/plugins/source_spec.rb | 3 + ruby/spec/bundler/plugins/uninstall_spec.rb | 49 + ruby/spec/bundler/quality_es_spec.rb | 20 +- ruby/spec/bundler/quality_spec.rb | 170 +- .../bundler/realworld/dependency_api_spec.rb | 4 +- .../bundler/realworld/double_check_spec.rb | 10 +- ruby/spec/bundler/realworld/edgecases_spec.rb | 468 +- ruby/spec/bundler/realworld/ffi_spec.rb | 57 + .../realworld/fixtures/warbler/.gitignore | 1 + .../realworld/fixtures/warbler/Gemfile | 7 + .../realworld/fixtures/warbler/Gemfile.lock | 30 + .../fixtures/warbler/bin/warbler-example.rb | 3 + .../fixtures/warbler/demo/demo.gemspec | 10 + .../realworld/gemfile_source_header_spec.rb | 2 +- .../bundler/realworld/mirror_probe_spec.rb | 43 +- ruby/spec/bundler/realworld/parallel_spec.rb | 6 +- ruby/spec/bundler/realworld/slow_perf_spec.rb | 22 + ruby/spec/bundler/resolver/basic_spec.rb | 2 +- ruby/spec/bundler/resolver/platform_spec.rb | 264 +- ruby/spec/bundler/runtime/executable_spec.rb | 54 +- ruby/spec/bundler/runtime/gem_tasks_spec.rb | 56 +- ruby/spec/bundler/runtime/inline_spec.rb | 143 +- ruby/spec/bundler/runtime/load_spec.rb | 16 +- ruby/spec/bundler/runtime/platform_spec.rb | 186 +- ruby/spec/bundler/runtime/require_spec.rb | 41 +- .../bundler/runtime/self_management_spec.rb | 126 + ruby/spec/bundler/runtime/setup_spec.rb | 471 +- .../runtime/with_unbundled_env_spec.rb | 134 +- ruby/spec/bundler/spec_helper.rb | 85 +- .../bundler/support/api_request_limit_hax.rb | 16 + .../bundler/support/artifice/compact_index.rb | 12 +- .../compact_index_concurrent_download.rb | 4 +- .../artifice/compact_index_creds_diff_host.rb | 2 +- .../support/artifice/compact_index_extra.rb | 8 +- .../artifice/compact_index_extra_api.rb | 10 +- .../artifice/compact_index_partial_update.rb | 6 +- ..._partial_update_no_etag_not_incremental.rb | 40 + .../compact_index_range_not_satisfiable.rb | 2 +- .../artifice/compact_index_rate_limited.rb | 2 +- .../spec/bundler/support/artifice/endpoint.rb | 73 +- .../bundler/support/artifice/endpoint_500.rb | 3 +- .../support/artifice/endpoint_api_missing.rb | 18 - .../artifice/endpoint_creds_diff_host.rb | 2 +- .../support/artifice/endpoint_extra.rb | 8 +- .../support/artifice/endpoint_extra_api.rb | 8 +- ...oint_marshal_fail_basic_authentication.rb} | 0 .../artifice/endpoint_mirror_source.rb | 2 +- ruby/spec/bundler/support/artifice/fail.rb | 5 - ruby/spec/bundler/support/artifice/vcr.rb | 21 +- ruby/spec/bundler/support/artifice/windows.rb | 7 +- ruby/spec/bundler/support/build_metadata.rb | 49 + ruby/spec/bundler/support/builders.rb | 318 +- ruby/spec/bundler/support/bundle.rb | 8 + .../spec/bundler/support/command_execution.rb | 13 +- ruby/spec/bundler/support/filters.rb | 20 +- ruby/spec/bundler/support/hax.rb | 60 +- ruby/spec/bundler/support/helpers.rb | 451 +- ruby/spec/bundler/support/indexes.rb | 13 +- ruby/spec/bundler/support/matchers.rb | 121 +- ruby/spec/bundler/support/parallel.rb | 5 - ruby/spec/bundler/support/path.rb | 198 +- ruby/spec/bundler/support/platforms.rb | 16 +- ruby/spec/bundler/support/rubygems_ext.rb | 172 +- .../support/rubygems_version_manager.rb | 51 +- ruby/spec/bundler/support/sometimes.rb | 57 - ruby/spec/bundler/support/streams.rb | 19 - ruby/spec/bundler/support/switch_rubygems.rb | 4 + ruby/spec/bundler/update/gemfile_spec.rb | 16 +- ruby/spec/bundler/update/gems/fund_spec.rb | 50 + .../bundler/update/gems/post_install_spec.rb | 8 +- ruby/spec/bundler/update/git_spec.rb | 120 +- ruby/spec/bundler/update/path_spec.rb | 1 + ruby/spec/bundler/update/redownload_spec.rb | 8 +- ruby/spec/default.mspec | 20 +- ruby/spec/mspec/.rspec | 1 + ruby/spec/mspec/Gemfile | 4 +- ruby/spec/mspec/Gemfile.lock | 29 +- ruby/spec/mspec/README.md | 6 +- .../mspec/lib/mspec/expectations/should.rb | 20 +- ruby/spec/mspec/lib/mspec/guards/bug.rb | 19 +- ruby/spec/mspec/lib/mspec/guards/guard.rb | 2 +- ruby/spec/mspec/lib/mspec/guards/platform.rb | 13 +- ruby/spec/mspec/lib/mspec/guards/version.rb | 37 +- ruby/spec/mspec/lib/mspec/helpers.rb | 1 - .../lib/mspec/helpers/frozen_error_class.rb | 17 - ruby/spec/mspec/lib/mspec/helpers/io.rb | 4 - ruby/spec/mspec/lib/mspec/helpers/numeric.rb | 8 + ruby/spec/mspec/lib/mspec/helpers/ruby_exe.rb | 29 +- ruby/spec/mspec/lib/mspec/helpers/scratch.rb | 4 + ruby/spec/mspec/lib/mspec/helpers/tmp.rb | 13 +- ruby/spec/mspec/lib/mspec/helpers/warning.rb | 2 + ruby/spec/mspec/lib/mspec/matchers/include.rb | 4 +- .../mspec/lib/mspec/matchers/match_yaml.rb | 6 +- .../mspec/lib/mspec/matchers/raise_error.rb | 37 +- ruby/spec/mspec/lib/mspec/mocks/mock.rb | 2 +- .../runner/actions/constants_leak_checker.rb | 11 +- .../lib/mspec/runner/actions/leakchecker.rb | 26 +- .../mspec/lib/mspec/runner/actions/timeout.rb | 2 +- ruby/spec/mspec/lib/mspec/runner/context.rb | 35 +- ruby/spec/mspec/lib/mspec/runner/example.rb | 12 +- ruby/spec/mspec/lib/mspec/runner/exception.rb | 31 +- .../spec/mspec/lib/mspec/runner/formatters.rb | 1 + .../lib/mspec/runner/formatters/junit.rb | 6 +- .../lib/mspec/runner/formatters/method.rb | 14 +- .../lib/mspec/runner/formatters/spinner.rb | 2 +- .../lib/mspec/runner/formatters/stats.rb | 57 + ruby/spec/mspec/lib/mspec/runner/mspec.rb | 86 +- ruby/spec/mspec/lib/mspec/runner/object.rb | 4 +- ruby/spec/mspec/lib/mspec/runner/parallel.rb | 2 +- ruby/spec/mspec/lib/mspec/utils/format.rb | 6 +- ruby/spec/mspec/lib/mspec/utils/options.rb | 16 +- ruby/spec/mspec/lib/mspec/utils/script.rb | 13 +- ruby/spec/mspec/lib/mspec/utils/version.rb | 2 +- ruby/spec/mspec/lib/mspec/utils/warnings.rb | 40 +- ruby/spec/mspec/spec/commands/mkspec_spec.rb | 194 +- .../spec/mspec/spec/commands/mspec_ci_spec.rb | 72 +- .../mspec/spec/commands/mspec_run_spec.rb | 74 +- ruby/spec/mspec/spec/commands/mspec_spec.rb | 106 +- .../mspec/spec/commands/mspec_tag_spec.rb | 170 +- .../spec/expectations/expectations_spec.rb | 18 +- .../mspec/spec/expectations/should_spec.rb | 18 +- ruby/spec/mspec/spec/fixtures/config.mspec | 2 - ruby/spec/mspec/spec/fixtures/my_ruby | 2 +- .../spec/{expectations => fixtures}/should.rb | 2 + .../mspec/spec/guards/block_device_spec.rb | 26 +- ruby/spec/mspec/spec/guards/bug_spec.rb | 84 +- ruby/spec/mspec/spec/guards/conflict_spec.rb | 30 +- ruby/spec/mspec/spec/guards/endian_spec.rb | 34 +- ruby/spec/mspec/spec/guards/feature_spec.rb | 82 +- ruby/spec/mspec/spec/guards/guard_spec.rb | 222 +- ruby/spec/mspec/spec/guards/platform_spec.rb | 188 +- .../spec/mspec/spec/guards/quarantine_spec.rb | 20 +- ruby/spec/mspec/spec/guards/superuser_spec.rb | 22 +- ruby/spec/mspec/spec/guards/support_spec.rb | 28 +- ruby/spec/mspec/spec/guards/user_spec.rb | 10 +- ruby/spec/mspec/spec/guards/version_spec.rb | 90 +- ruby/spec/mspec/spec/helpers/argf_spec.rb | 16 +- ruby/spec/mspec/spec/helpers/argv_spec.rb | 10 +- ruby/spec/mspec/spec/helpers/datetime_spec.rb | 18 +- ruby/spec/mspec/spec/helpers/fixture_spec.rb | 8 +- ruby/spec/mspec/spec/helpers/flunk_spec.rb | 10 +- ruby/spec/mspec/spec/helpers/fs_spec.rb | 60 +- ruby/spec/mspec/spec/helpers/io_spec.rb | 50 +- .../mspec/spec/helpers/mock_to_path_spec.rb | 14 +- ruby/spec/mspec/spec/helpers/numeric_spec.rb | 14 +- ruby/spec/mspec/spec/helpers/ruby_exe_spec.rb | 165 +- ruby/spec/mspec/spec/helpers/scratch_spec.rb | 10 +- .../spec/helpers/suppress_warning_spec.rb | 4 +- ruby/spec/mspec/spec/helpers/tmp_spec.rb | 12 +- .../spec/integration/interpreter_spec.rb | 8 +- .../spec/integration/object_methods_spec.rb | 6 +- ruby/spec/mspec/spec/integration/run_spec.rb | 36 +- ruby/spec/mspec/spec/integration/tag_spec.rb | 12 +- ruby/spec/mspec/spec/matchers/base_spec.rb | 140 +- .../spec/matchers/be_an_instance_of_spec.rb | 22 +- .../spec/matchers/be_ancestor_of_spec.rb | 10 +- .../spec/mspec/spec/matchers/be_close_spec.rb | 24 +- .../spec/matchers/be_computed_by_spec.rb | 14 +- .../spec/mspec/spec/matchers/be_empty_spec.rb | 10 +- .../spec/mspec/spec/matchers/be_false_spec.rb | 16 +- .../mspec/spec/matchers/be_kind_of_spec.rb | 22 +- ruby/spec/mspec/spec/matchers/be_nan_spec.rb | 12 +- ruby/spec/mspec/spec/matchers/be_nil_spec.rb | 14 +- .../spec/matchers/be_true_or_false_spec.rb | 8 +- ruby/spec/mspec/spec/matchers/be_true_spec.rb | 16 +- .../mspec/spec/matchers/block_caller_spec.rb | 6 +- .../spec/mspec/spec/matchers/complain_spec.rb | 43 +- ruby/spec/mspec/spec/matchers/eql_spec.rb | 22 +- .../mspec/spec/matchers/equal_element_spec.rb | 78 +- ruby/spec/mspec/spec/matchers/equal_spec.rb | 20 +- .../spec/matchers/have_class_variable_spec.rb | 18 +- .../mspec/spec/matchers/have_constant_spec.rb | 14 +- .../matchers/have_instance_method_spec.rb | 20 +- .../matchers/have_instance_variable_spec.rb | 18 +- .../mspec/spec/matchers/have_method_spec.rb | 24 +- .../have_private_instance_method_spec.rb | 20 +- .../spec/matchers/have_private_method_spec.rb | 16 +- .../have_protected_instance_method_spec.rb | 20 +- .../have_public_instance_method_spec.rb | 20 +- .../matchers/have_singleton_method_spec.rb | 16 +- .../spec/matchers/include_any_of_spec.rb | 26 +- ruby/spec/mspec/spec/matchers/include_spec.rb | 22 +- .../spec/mspec/spec/matchers/infinity_spec.rb | 18 +- .../mspec/spec/matchers/match_yaml_spec.rb | 22 +- ruby/spec/mspec/spec/matchers/output_spec.rb | 48 +- .../mspec/spec/matchers/output_to_fd_spec.rb | 30 +- .../mspec/spec/matchers/raise_error_spec.rb | 127 +- .../mspec/spec/matchers/respond_to_spec.rb | 26 +- .../mspec/spec/matchers/signed_zero_spec.rb | 18 +- ruby/spec/mspec/spec/mocks/mock_spec.rb | 238 +- ruby/spec/mspec/spec/mocks/proxy_spec.rb | 196 +- .../mspec/spec/runner/actions/filter_spec.rb | 44 +- .../mspec/spec/runner/actions/tag_spec.rb | 144 +- .../mspec/spec/runner/actions/taglist_spec.rb | 70 +- .../spec/runner/actions/tagpurge_spec.rb | 66 +- .../mspec/spec/runner/actions/tally_spec.rb | 167 +- .../mspec/spec/runner/actions/timer_spec.rb | 22 +- ruby/spec/mspec/spec/runner/context_spec.rb | 369 +- ruby/spec/mspec/spec/runner/example_spec.rb | 60 +- ruby/spec/mspec/spec/runner/exception_spec.rb | 50 +- .../mspec/spec/runner/filters/match_spec.rb | 16 +- .../mspec/spec/runner/filters/profile_spec.rb | 70 +- .../mspec/spec/runner/filters/regexp_spec.rb | 18 +- .../mspec/spec/runner/filters/tag_spec.rb | 48 +- .../spec/runner/formatters/describe_spec.rb | 24 +- .../spec/runner/formatters/dotted_spec.rb | 119 +- .../mspec/spec/runner/formatters/file_spec.rb | 34 +- .../mspec/spec/runner/formatters/html_spec.rb | 88 +- .../spec/runner/formatters/junit_spec.rb | 100 +- .../spec/runner/formatters/method_spec.rb | 69 +- .../spec/runner/formatters/multi_spec.rb | 20 +- .../spec/runner/formatters/specdoc_spec.rb | 30 +- .../spec/runner/formatters/spinner_spec.rb | 32 +- .../spec/runner/formatters/summary_spec.rb | 4 +- .../mspec/spec/runner/formatters/unit_spec.rb | 33 +- .../mspec/spec/runner/formatters/yaml_spec.rb | 79 +- ruby/spec/mspec/spec/runner/mspec_spec.rb | 300 +- ruby/spec/mspec/spec/runner/shared_spec.rb | 20 +- ruby/spec/mspec/spec/runner/tag_spec.rb | 96 +- ruby/spec/mspec/spec/spec_helper.rb | 21 +- ruby/spec/mspec/spec/utils/deprecate_spec.rb | 10 +- ruby/spec/mspec/spec/utils/name_map_spec.rb | 78 +- ruby/spec/mspec/spec/utils/options_spec.rb | 491 +- ruby/spec/mspec/spec/utils/script_spec.rb | 252 +- ruby/spec/mspec/spec/utils/version_spec.rb | 30 +- ruby/spec/mspec/tool/remove_old_guards.rb | 9 +- ruby/spec/mspec/tool/sync/sync-rubyspec.rb | 58 +- ruby/spec/mspec/tool/tag_from_output.rb | 13 +- ruby/spec/mspec/tool/wrap_with_guard.rb | 28 + ruby/spec/ruby/.mspec.constants | 6 + ruby/spec/ruby/.rubocop.yml | 18 +- ruby/spec/ruby/.rubocop_todo.yml | 67 +- ruby/spec/ruby/CONTRIBUTING.md | 91 +- ruby/spec/ruby/README.md | 33 +- .../ruby/command_line/backtrace_limit_spec.rb | 48 + ruby/spec/ruby/command_line/dash_e_spec.rb | 2 +- .../ruby/command_line/dash_encoding_spec.rb | 8 +- ruby/spec/ruby/command_line/dash_l_spec.rb | 31 + ruby/spec/ruby/command_line/dash_r_spec.rb | 19 +- .../ruby/command_line/dash_upper_e_spec.rb | 3 +- .../ruby/command_line/dash_upper_k_spec.rb | 4 +- .../ruby/command_line/dash_upper_s_spec.rb | 2 +- .../ruby/command_line/dash_upper_u_spec.rb | 6 +- .../ruby/command_line/dash_upper_w_spec.rb | 27 + ruby/spec/ruby/command_line/dash_v_spec.rb | 3 +- ruby/spec/ruby/command_line/dash_w_spec.rb | 6 + ruby/spec/ruby/command_line/dash_x_spec.rb | 2 +- .../ruby/command_line/error_message_spec.rb | 8 +- ruby/spec/ruby/command_line/feature_spec.rb | 27 +- .../ruby/command_line/fixtures/backtrace.rb | 35 + .../fixtures/bin/hybrid_launcher.sh | 2 +- .../ruby/command_line/fixtures/test_file.rb | 2 +- ruby/spec/ruby/command_line/rubyopt_spec.rb | 60 +- .../ruby/command_line/syntax_error_spec.rb | 4 +- ruby/spec/ruby/core/argf/binmode_spec.rb | 2 +- ruby/spec/ruby/core/argf/bytes_spec.rb | 14 +- ruby/spec/ruby/core/argf/chars_spec.rb | 14 +- ruby/spec/ruby/core/argf/codepoints_spec.rb | 14 +- ruby/spec/ruby/core/argf/lines_spec.rb | 14 +- ruby/spec/ruby/core/argf/shared/fileno.rb | 2 +- ruby/spec/ruby/core/array/any_spec.rb | 6 +- ruby/spec/ruby/core/array/append_spec.rb | 10 +- .../ruby/core/array/bsearch_index_spec.rb | 2 +- ruby/spec/ruby/core/array/clear_spec.rb | 6 +- ruby/spec/ruby/core/array/clone_spec.rb | 4 +- ruby/spec/ruby/core/array/compact_spec.rb | 4 +- ruby/spec/ruby/core/array/concat_spec.rb | 8 +- ruby/spec/ruby/core/array/deconstruct_spec.rb | 11 + ruby/spec/ruby/core/array/delete_at_spec.rb | 4 +- ruby/spec/ruby/core/array/delete_if_spec.rb | 8 +- ruby/spec/ruby/core/array/delete_spec.rb | 4 +- ruby/spec/ruby/core/array/difference_spec.rb | 28 +- ruby/spec/ruby/core/array/drop_spec.rb | 13 + ruby/spec/ruby/core/array/drop_while_spec.rb | 13 + ruby/spec/ruby/core/array/element_set_spec.rb | 111 +- ruby/spec/ruby/core/array/empty_spec.rb | 6 +- ruby/spec/ruby/core/array/fill_spec.rb | 25 +- ruby/spec/ruby/core/array/filter_spec.rb | 18 +- ruby/spec/ruby/core/array/fixtures/classes.rb | 4 +- ruby/spec/ruby/core/array/flatten_spec.rb | 52 +- ruby/spec/ruby/core/array/frozen_spec.rb | 6 +- ruby/spec/ruby/core/array/hash_spec.rb | 2 +- ruby/spec/ruby/core/array/initialize_spec.rb | 6 +- ruby/spec/ruby/core/array/insert_spec.rb | 8 +- ruby/spec/ruby/core/array/intersect_spec.rb | 17 + .../spec/ruby/core/array/intersection_spec.rb | 88 +- ruby/spec/ruby/core/array/minmax_spec.rb | 14 + ruby/spec/ruby/core/array/multiply_spec.rb | 34 +- ruby/spec/ruby/core/array/pop_spec.rb | 14 +- ruby/spec/ruby/core/array/prepend_spec.rb | 6 +- ruby/spec/ruby/core/array/reject_spec.rb | 8 +- ruby/spec/ruby/core/array/reverse_spec.rb | 4 +- ruby/spec/ruby/core/array/rotate_spec.rb | 8 +- ruby/spec/ruby/core/array/sample_spec.rb | 25 +- ruby/spec/ruby/core/array/shared/clone.rb | 8 +- ruby/spec/ruby/core/array/shared/collect.rb | 16 +- .../ruby/core/array/shared/intersection.rb | 84 + ruby/spec/ruby/core/array/shared/join.rb | 15 + ruby/spec/ruby/core/array/shared/keep_if.rb | 8 +- ruby/spec/ruby/core/array/shared/push.rb | 6 +- ruby/spec/ruby/core/array/shared/replace.rb | 4 +- ruby/spec/ruby/core/array/shared/slice.rb | 351 +- ruby/spec/ruby/core/array/shared/union.rb | 2 +- ruby/spec/ruby/core/array/shared/unshift.rb | 8 +- ruby/spec/ruby/core/array/shift_spec.rb | 8 +- ruby/spec/ruby/core/array/shuffle_spec.rb | 12 +- ruby/spec/ruby/core/array/slice_spec.rb | 92 +- ruby/spec/ruby/core/array/sort_by_spec.rb | 8 +- ruby/spec/ruby/core/array/sort_spec.rb | 22 +- ruby/spec/ruby/core/array/sum_spec.rb | 29 + ruby/spec/ruby/core/array/take_spec.rb | 13 + ruby/spec/ruby/core/array/take_while_spec.rb | 13 + ruby/spec/ruby/core/array/to_h_spec.rb | 72 +- ruby/spec/ruby/core/array/union_spec.rb | 26 +- ruby/spec/ruby/core/array/uniq_spec.rb | 32 +- ruby/spec/ruby/core/array/values_at_spec.rb | 12 + .../core/basicobject/instance_eval_spec.rb | 8 +- .../core/basicobject/instance_exec_spec.rb | 8 +- .../singleton_method_added_spec.rb | 59 + ruby/spec/ruby/core/binding/eval_spec.rb | 103 +- .../ruby/core/binding/fixtures/classes.rb | 14 + ruby/spec/ruby/core/binding/irb_spec.rb | 22 +- .../ruby/core/binding/source_location_spec.rb | 10 +- .../builtin_constants_spec.rb | 12 +- ruby/spec/ruby/core/class/allocate_spec.rb | 2 +- ruby/spec/ruby/core/class/initialize_spec.rb | 2 +- ruby/spec/ruby/core/class/new_spec.rb | 15 +- ruby/spec/ruby/core/class/subclasses_spec.rb | 38 + ruby/spec/ruby/core/class/superclass_spec.rb | 2 +- ruby/spec/ruby/core/comparable/lt_spec.rb | 6 + .../spec/ruby/core/complex/comparison_spec.rb | 27 + .../ruby/core/complex/equal_value_spec.rb | 2 +- ruby/spec/ruby/core/complex/exponent_spec.rb | 2 +- ruby/spec/ruby/core/complex/finite_spec.rb | 12 +- ruby/spec/ruby/core/complex/spaceship_spec.rb | 27 - ruby/spec/ruby/core/complex/to_c_spec.rb | 12 + ruby/spec/ruby/core/complex/to_f_spec.rb | 2 +- ruby/spec/ruby/core/complex/to_i_spec.rb | 2 +- ruby/spec/ruby/core/complex/to_r_spec.rb | 2 +- .../core/conditionvariable/broadcast_spec.rb | 40 + .../conditionvariable/marshal_dump_spec.rb | 0 .../core/conditionvariable/signal_spec.rb | 77 + .../ruby/core/conditionvariable/wait_spec.rb | 175 + ruby/spec/ruby/core/data/constants_spec.rb | 20 +- ruby/spec/ruby/core/dir/children_spec.rb | 212 +- ruby/spec/ruby/core/dir/each_child_spec.rb | 152 +- ruby/spec/ruby/core/dir/entries_spec.rb | 13 +- ruby/spec/ruby/core/dir/exists_spec.rb | 15 - ruby/spec/ruby/core/dir/fileno_spec.rb | 2 +- ruby/spec/ruby/core/dir/fixtures/common.rb | 17 +- ruby/spec/ruby/core/dir/foreach_spec.rb | 12 + ruby/spec/ruby/core/dir/glob_spec.rb | 64 +- ruby/spec/ruby/core/dir/home_spec.rb | 6 +- ruby/spec/ruby/core/dir/mkdir_spec.rb | 34 +- ruby/spec/ruby/core/dir/shared/glob.rb | 213 +- ruby/spec/ruby/core/dir/shared/open.rb | 2 +- .../ruby/core/encoding/compatible_spec.rb | 2 +- .../core/encoding/converter/constants_spec.rb | 52 +- .../ruby/core/encoding/converter/new_spec.rb | 4 +- .../core/encoding/converter/putback_spec.rb | 13 +- .../core/encoding/default_external_spec.rb | 8 + .../incomplete_input_spec.rb | 1 - ruby/spec/ruby/core/encoding/list_spec.rb | 14 +- .../ruby/core/encoding/locale_charmap_spec.rb | 21 +- .../spec/ruby/core/encoding/replicate_spec.rb | 21 + ruby/spec/ruby/core/enumerable/all_spec.rb | 155 +- ruby/spec/ruby/core/enumerable/any_spec.rb | 159 +- ruby/spec/ruby/core/enumerable/chain_spec.rb | 30 +- ruby/spec/ruby/core/enumerable/chunk_spec.rb | 5 + .../ruby/core/enumerable/each_cons_spec.rb | 4 +- .../ruby/core/enumerable/each_slice_spec.rb | 4 +- ruby/spec/ruby/core/enumerable/filter_spec.rb | 6 +- .../ruby/core/enumerable/fixtures/classes.rb | 2 +- ruby/spec/ruby/core/enumerable/grep_spec.rb | 42 +- ruby/spec/ruby/core/enumerable/grep_v_spec.rb | 42 +- ruby/spec/ruby/core/enumerable/minmax_spec.rb | 34 +- ruby/spec/ruby/core/enumerable/none_spec.rb | 121 +- ruby/spec/ruby/core/enumerable/one_spec.rb | 143 +- .../ruby/core/enumerable/shared/collect.rb | 69 + ruby/spec/ruby/core/enumerable/sort_spec.rb | 2 +- ruby/spec/ruby/core/enumerable/sum_spec.rb | 9 + ruby/spec/ruby/core/enumerable/tally_spec.rb | 47 + ruby/spec/ruby/core/enumerable/to_h_spec.rb | 80 +- ruby/spec/ruby/core/enumerable/uniq_spec.rb | 8 +- .../arithmetic_sequence/begin_spec.rb | 19 +- .../arithmetic_sequence/each_spec.rb | 24 +- .../arithmetic_sequence/end_spec.rb | 17 +- .../enumerator/arithmetic_sequence/eq_spec.rb | 24 +- .../arithmetic_sequence/exclude_end_spec.rb | 22 +- .../arithmetic_sequence/first_spec.rb | 12 +- .../arithmetic_sequence/hash_spec.rb | 26 +- .../arithmetic_sequence/inspect_spec.rb | 26 +- .../arithmetic_sequence/last_spec.rb | 12 +- .../arithmetic_sequence/new_spec.rb | 24 +- .../arithmetic_sequence/size_spec.rb | 22 +- .../arithmetic_sequence/step_spec.rb | 16 +- .../ruby/core/enumerator/chain/each_spec.rb | 18 +- .../core/enumerator/chain/initialize_spec.rb | 44 +- .../core/enumerator/chain/inspect_spec.rb | 20 +- .../ruby/core/enumerator/chain/rewind_spec.rb | 96 +- .../ruby/core/enumerator/chain/size_spec.rb | 30 +- ruby/spec/ruby/core/enumerator/each_spec.rb | 6 +- .../ruby/core/enumerator/initialize_spec.rb | 10 +- .../core/enumerator/lazy/chunk_while_spec.rb | 5 + .../ruby/core/enumerator/lazy/eager_spec.rb | 29 + .../core/enumerator/lazy/filter_map_spec.rb | 16 + .../ruby/core/enumerator/lazy/filter_spec.rb | 6 +- .../core/enumerator/lazy/initialize_spec.rb | 2 +- .../core/enumerator/lazy/slice_after_spec.rb | 5 + .../core/enumerator/lazy/slice_before_spec.rb | 5 + .../core/enumerator/lazy/slice_when_spec.rb | 5 + .../core/enumerator/lazy/with_index_spec.rb | 30 + ruby/spec/ruby/core/enumerator/new_spec.rb | 132 +- ruby/spec/ruby/core/enumerator/next_spec.rb | 11 + ruby/spec/ruby/core/enumerator/plus_spec.rb | 46 +- .../spec/ruby/core/enumerator/produce_spec.rb | 36 + .../core/enumerator/yielder/append_spec.rb | 11 + .../core/enumerator/yielder/to_proc_spec.rb | 18 + .../core/enumerator/yielder/yield_spec.rb | 10 + ruby/spec/ruby/core/env/delete_spec.rb | 7 + .../ruby/core/env/element_reference_spec.rb | 5 +- ruby/spec/ruby/core/env/empty_spec.rb | 6 +- ruby/spec/ruby/core/env/except_spec.rb | 36 + ruby/spec/ruby/core/env/fetch_spec.rb | 3 +- ruby/spec/ruby/core/env/filter_spec.rb | 16 +- ruby/spec/ruby/core/env/fixtures/common.rb | 9 + ruby/spec/ruby/core/env/index_spec.rb | 14 +- ruby/spec/ruby/core/env/shared/key.rb | 14 +- ruby/spec/ruby/core/env/shift_spec.rb | 42 +- ruby/spec/ruby/core/env/slice_spec.rb | 40 +- ruby/spec/ruby/core/env/to_h_spec.rb | 100 +- ruby/spec/ruby/core/env/values_at_spec.rb | 3 +- .../ruby/core/exception/backtrace_spec.rb | 2 +- .../destination_encoding_name_spec.rb | 23 - .../exception/destination_encoding_spec.rb | 23 - ruby/spec/ruby/core/exception/errno_spec.rb | 27 +- .../ruby/core/exception/error_bytes_spec.rb | 12 - .../ruby/core/exception/error_char_spec.rb | 12 - .../ruby/core/exception/exit_value_spec.rb | 10 +- .../ruby/core/exception/frozen_error_spec.rb | 8 - .../ruby/core/exception/full_message_spec.rb | 142 +- .../ruby/core/exception/hierarchy_spec.rb | 8 +- .../core/exception/incomplete_input_spec.rb | 5 - .../ruby/core/exception/initialize_spec.rb | 1 - .../ruby/core/exception/interrupt_spec.rb | 18 +- .../spec/ruby/core/exception/io_error_spec.rb | 6 - .../ruby/core/exception/key_error_spec.rb | 20 +- .../ruby/core/exception/name_error_spec.rb | 28 +- ruby/spec/ruby/core/exception/name_spec.rb | 4 +- .../core/exception/no_method_error_spec.rb | 46 +- .../ruby/core/exception/range_error_spec.rb | 7 - .../core/exception/readagain_bytes_spec.rb | 12 - ruby/spec/ruby/core/exception/reason_spec.rb | 10 +- .../spec/ruby/core/exception/receiver_spec.rb | 6 +- ruby/spec/ruby/core/exception/result_spec.rb | 14 +- .../core/exception/signal_exception_spec.rb | 12 +- ruby/spec/ruby/core/exception/signm_spec.rb | 6 +- ruby/spec/ruby/core/exception/signo_spec.rb | 6 +- .../exception/source_encoding_name_spec.rb | 23 - .../core/exception/source_encoding_spec.rb | 23 - ruby/spec/ruby/core/exception/status_spec.rb | 6 +- ruby/spec/ruby/core/exception/success_spec.rb | 12 +- .../core/exception/system_call_error_spec.rb | 15 +- .../ruby/core/exception/system_exit_spec.rb | 17 + .../core/exception/system_stack_error_spec.rb | 7 - .../ruby/core/exception/top_level_spec.rb | 45 + .../exception/uncaught_throw_error_spec.rb | 6 - ruby/spec/ruby/core/false/to_s_spec.rb | 2 +- ruby/spec/ruby/core/fiber/blocking_spec.rb | 62 + ruby/spec/ruby/core/fiber/fixtures/classes.rb | 12 + ruby/spec/ruby/core/fiber/raise_spec.rb | 121 + ruby/spec/ruby/core/fiber/resume_spec.rb | 37 +- ruby/spec/ruby/core/fiber/shared/blocking.rb | 41 + .../spec/ruby/core/file/absolute_path_spec.rb | 6 + ruby/spec/ruby/core/file/atime_spec.rb | 22 +- ruby/spec/ruby/core/file/basename_spec.rb | 15 + ruby/spec/ruby/core/file/ctime_spec.rb | 2 +- ruby/spec/ruby/core/file/dirname_spec.rb | 16 + ruby/spec/ruby/core/file/exists_spec.rb | 6 - ruby/spec/ruby/core/file/expand_path_spec.rb | 6 +- ruby/spec/ruby/core/file/extname_spec.rb | 10 + ruby/spec/ruby/core/file/ftype_spec.rb | 8 + ruby/spec/ruby/core/file/join_spec.rb | 9 + ruby/spec/ruby/core/file/lchmod_spec.rb | 22 +- ruby/spec/ruby/core/file/link_spec.rb | 2 +- ruby/spec/ruby/core/file/lstat_spec.rb | 4 +- ruby/spec/ruby/core/file/lutime_spec.rb | 58 +- ruby/spec/ruby/core/file/mtime_spec.rb | 2 +- ruby/spec/ruby/core/file/open_spec.rb | 58 +- ruby/spec/ruby/core/file/realpath_spec.rb | 6 + ruby/spec/ruby/core/file/shared/path.rb | 49 +- ruby/spec/ruby/core/file/shared/read.rb | 4 +- ruby/spec/ruby/core/file/size_spec.rb | 4 +- ruby/spec/ruby/core/file/stat/nlink_spec.rb | 2 +- ruby/spec/ruby/core/file/stat/owned_spec.rb | 6 +- ruby/spec/ruby/core/file/stat/pipe_spec.rb | 4 +- ruby/spec/ruby/core/file/stat_spec.rb | 18 +- ruby/spec/ruby/core/file/truncate_spec.rb | 6 +- ruby/spec/ruby/core/file/umask_spec.rb | 4 +- ruby/spec/ruby/core/file/utime_spec.rb | 21 +- ruby/spec/ruby/core/filetest/exists_spec.rb | 6 - ruby/spec/ruby/core/float/comparison_spec.rb | 64 +- ruby/spec/ruby/core/float/finite_spec.rb | 8 +- ruby/spec/ruby/core/float/inspect_spec.rb | 6 + ruby/spec/ruby/core/float/nan_spec.rb | 6 +- ruby/spec/ruby/core/float/negative_spec.rb | 33 + ruby/spec/ruby/core/float/next_float_spec.rb | 2 +- ruby/spec/ruby/core/float/positive_spec.rb | 33 + ruby/spec/ruby/core/float/prev_float_spec.rb | 2 +- ruby/spec/ruby/core/float/round_spec.rb | 13 + .../shared/arithmetic_exception_in_coerce.rb | 32 +- .../shared/comparison_exception_in_coerce.rb | 34 +- ruby/spec/ruby/core/float/shared/quo.rb | 4 +- ruby/spec/ruby/core/float/shared/to_s.rb | 308 + ruby/spec/ruby/core/float/to_s_spec.rb | 308 +- ruby/spec/ruby/core/float/uminus_spec.rb | 2 +- ruby/spec/ruby/core/float/zero_spec.rb | 6 +- ruby/spec/ruby/core/gc/auto_compact_spec.rb | 26 + ruby/spec/ruby/core/gc/disable_spec.rb | 2 +- ruby/spec/ruby/core/gc/enable_spec.rb | 2 +- .../ruby/core/gc/measure_total_time_spec.rb | 19 + .../ruby/core/gc/profiler/disable_spec.rb | 2 +- .../spec/ruby/core/gc/profiler/enable_spec.rb | 2 +- ruby/spec/ruby/core/gc/start_spec.rb | 4 + ruby/spec/ruby/core/gc/stat_spec.rb | 62 +- ruby/spec/ruby/core/gc/total_time_spec.rb | 15 + ruby/spec/ruby/core/hash/any_spec.rb | 4 +- ruby/spec/ruby/core/hash/clear_spec.rb | 6 +- ruby/spec/ruby/core/hash/compact_spec.rb | 4 +- .../core/hash/compare_by_identity_spec.rb | 6 +- .../ruby/core/hash/deconstruct_keys_spec.rb | 25 + ruby/spec/ruby/core/hash/default_proc_spec.rb | 6 +- ruby/spec/ruby/core/hash/default_spec.rb | 6 +- ruby/spec/ruby/core/hash/delete_if_spec.rb | 6 +- ruby/spec/ruby/core/hash/delete_spec.rb | 6 +- .../ruby/core/hash/element_reference_spec.rb | 14 + ruby/spec/ruby/core/hash/empty_spec.rb | 10 +- ruby/spec/ruby/core/hash/except_spec.rb | 34 + ruby/spec/ruby/core/hash/filter_spec.rb | 12 +- ruby/spec/ruby/core/hash/fixtures/name.rb | 30 + ruby/spec/ruby/core/hash/index_spec.rb | 6 +- ruby/spec/ruby/core/hash/initialize_spec.rb | 10 +- ruby/spec/ruby/core/hash/keep_if_spec.rb | 6 +- ruby/spec/ruby/core/hash/merge_spec.rb | 24 +- ruby/spec/ruby/core/hash/rehash_spec.rb | 24 +- ruby/spec/ruby/core/hash/reject_spec.rb | 10 +- .../core/hash/ruby2_keywords_hash_spec.rb | 47 + ruby/spec/ruby/core/hash/shared/each.rb | 53 +- ruby/spec/ruby/core/hash/shared/eql.rb | 2 +- ruby/spec/ruby/core/hash/shared/index.rb | 22 +- ruby/spec/ruby/core/hash/shared/replace.rb | 8 +- ruby/spec/ruby/core/hash/shared/select.rb | 8 +- ruby/spec/ruby/core/hash/shared/store.rb | 25 +- ruby/spec/ruby/core/hash/shared/update.rb | 26 +- ruby/spec/ruby/core/hash/shift_spec.rb | 6 +- ruby/spec/ruby/core/hash/slice_spec.rb | 82 +- ruby/spec/ruby/core/hash/to_h_spec.rb | 58 +- ruby/spec/ruby/core/hash/to_proc_spec.rb | 16 +- .../ruby/core/hash/transform_keys_spec.rb | 204 +- .../ruby/core/hash/transform_values_spec.rb | 8 +- ruby/spec/ruby/core/integer/allbits_spec.rb | 62 +- ruby/spec/ruby/core/integer/anybits_spec.rb | 60 +- ruby/spec/ruby/core/integer/chr_spec.rb | 13 + ruby/spec/ruby/core/integer/coerce_spec.rb | 10 +- .../spec/ruby/core/integer/comparison_spec.rb | 24 +- ruby/spec/ruby/core/integer/digits_spec.rb | 9 + ruby/spec/ruby/core/integer/div_spec.rb | 2 +- ruby/spec/ruby/core/integer/divide_spec.rb | 8 +- ruby/spec/ruby/core/integer/downto_spec.rb | 2 +- .../core/integer/element_reference_spec.rb | 79 + ruby/spec/ruby/core/integer/gcd_spec.rb | 4 +- ruby/spec/ruby/core/integer/gcdlcm_spec.rb | 4 +- ruby/spec/ruby/core/integer/gt_spec.rb | 8 +- ruby/spec/ruby/core/integer/gte_spec.rb | 8 +- ruby/spec/ruby/core/integer/integer_spec.rb | 6 +- ruby/spec/ruby/core/integer/lcm_spec.rb | 4 +- .../spec/ruby/core/integer/left_shift_spec.rb | 13 +- ruby/spec/ruby/core/integer/lt_spec.rb | 8 +- ruby/spec/ruby/core/integer/lte_spec.rb | 13 +- ruby/spec/ruby/core/integer/minus_spec.rb | 8 +- ruby/spec/ruby/core/integer/multiply_spec.rb | 8 +- ruby/spec/ruby/core/integer/nobits_spec.rb | 60 +- ruby/spec/ruby/core/integer/plus_spec.rb | 23 +- ruby/spec/ruby/core/integer/pow_spec.rb | 82 +- .../ruby/core/integer/right_shift_spec.rb | 13 +- ruby/spec/ruby/core/integer/round_spec.rb | 26 +- .../core/integer/shared/comparison_coerce.rb | 22 - ruby/spec/ruby/core/integer/shared/equal.rb | 4 +- .../spec/ruby/core/integer/shared/exponent.rb | 9 +- .../core/integer/shared/integer_rounding.rb | 16 +- ruby/spec/ruby/core/integer/sqrt_spec.rb | 46 +- ruby/spec/ruby/core/integer/to_r_spec.rb | 2 +- .../ruby/core/integer/try_convert_spec.rb | 40 + ruby/spec/ruby/core/integer/upto_spec.rb | 2 +- ruby/spec/ruby/core/integer/zero_spec.rb | 21 + ruby/spec/ruby/core/io/binmode_spec.rb | 4 + ruby/spec/ruby/core/io/bytes_spec.rb | 66 +- ruby/spec/ruby/core/io/chars_spec.rb | 28 +- ruby/spec/ruby/core/io/close_on_exec_spec.rb | 16 +- ruby/spec/ruby/core/io/close_read_spec.rb | 2 +- ruby/spec/ruby/core/io/close_spec.rb | 47 +- ruby/spec/ruby/core/io/close_write_spec.rb | 2 +- ruby/spec/ruby/core/io/codepoints_spec.rb | 43 +- ruby/spec/ruby/core/io/copy_stream_spec.rb | 40 + ruby/spec/ruby/core/io/dup_spec.rb | 31 +- ruby/spec/ruby/core/io/each_codepoint_spec.rb | 2 +- ruby/spec/ruby/core/io/eof_spec.rb | 26 +- .../ruby/core/io/external_encoding_spec.rb | 9 + ruby/spec/ruby/core/io/fixtures/classes.rb | 7 +- .../spec/ruby/core/io/fixtures/copy_in_out.rb | 2 + ruby/spec/ruby/core/io/gets_spec.rb | 8 +- ruby/spec/ruby/core/io/initialize_spec.rb | 2 +- .../ruby/core/io/internal_encoding_spec.rb | 9 + ruby/spec/ruby/core/io/ioctl_spec.rb | 4 +- ruby/spec/ruby/core/io/lineno_spec.rb | 36 + ruby/spec/ruby/core/io/lines_spec.rb | 54 +- ruby/spec/ruby/core/io/nonblock_spec.rb | 70 + ruby/spec/ruby/core/io/open_spec.rb | 4 +- ruby/spec/ruby/core/io/pipe_spec.rb | 12 +- ruby/spec/ruby/core/io/popen_spec.rb | 4 +- ruby/spec/ruby/core/io/pread_spec.rb | 74 +- ruby/spec/ruby/core/io/print_spec.rb | 6 +- ruby/spec/ruby/core/io/puts_spec.rb | 6 +- ruby/spec/ruby/core/io/pwrite_spec.rb | 62 +- ruby/spec/ruby/core/io/read_nonblock_spec.rb | 2 +- ruby/spec/ruby/core/io/read_spec.rb | 2 +- ruby/spec/ruby/core/io/readlines_spec.rb | 58 +- ruby/spec/ruby/core/io/reopen_spec.rb | 8 +- ruby/spec/ruby/core/io/rewind_spec.rb | 2 +- ruby/spec/ruby/core/io/seek_spec.rb | 6 +- .../ruby/core/io/set_encoding_by_bom_spec.rb | 77 + ruby/spec/ruby/core/io/shared/each.rb | 4 +- ruby/spec/ruby/core/io/shared/new.rb | 54 +- ruby/spec/ruby/core/io/shared/pos.rb | 4 +- ruby/spec/ruby/core/io/shared/readlines.rb | 16 +- ruby/spec/ruby/core/io/sysopen_spec.rb | 4 +- ruby/spec/ruby/core/io/sysread_spec.rb | 5 + ruby/spec/ruby/core/io/sysseek_spec.rb | 5 + ruby/spec/ruby/core/io/ungetbyte_spec.rb | 19 +- ruby/spec/ruby/core/io/ungetc_spec.rb | 25 +- ruby/spec/ruby/core/io/write_nonblock_spec.rb | 2 +- ruby/spec/ruby/core/io/write_spec.rb | 18 +- ruby/spec/ruby/core/kernel/Complex_spec.rb | 62 +- ruby/spec/ruby/core/kernel/Float_spec.rb | 38 +- ruby/spec/ruby/core/kernel/Integer_spec.rb | 169 +- ruby/spec/ruby/core/kernel/__dir___spec.rb | 23 +- ruby/spec/ruby/core/kernel/at_exit_spec.rb | 32 +- ruby/spec/ruby/core/kernel/autoload_spec.rb | 19 +- ruby/spec/ruby/core/kernel/backtick_spec.rb | 28 +- .../ruby/core/kernel/caller_locations_spec.rb | 56 +- ruby/spec/ruby/core/kernel/caller_spec.rb | 28 +- ruby/spec/ruby/core/kernel/class_spec.rb | 2 +- ruby/spec/ruby/core/kernel/clone_spec.rb | 128 +- ruby/spec/ruby/core/kernel/dup_spec.rb | 2 +- ruby/spec/ruby/core/kernel/eval_spec.rb | 91 +- ruby/spec/ruby/core/kernel/extend_spec.rb | 4 +- .../spec/ruby/core/kernel/fixtures/__dir__.rb | 2 + .../spec/ruby/core/kernel/fixtures/at_exit.rb | 3 + .../spec/ruby/core/kernel/fixtures/classes.rb | 36 +- .../core/kernel/fixtures/warn_core_method.rb | 14 + .../ruby/core/kernel/fixtures/warn_require.rb | 1 + .../kernel/fixtures/warn_require_caller.rb | 2 + ruby/spec/ruby/core/kernel/format_spec.rb | 1 + ruby/spec/ruby/core/kernel/freeze_spec.rb | 32 +- ruby/spec/ruby/core/kernel/frozen_spec.rb | 40 +- .../ruby/core/kernel/initialize_clone_spec.rb | 28 + .../ruby/core/kernel/initialize_copy_spec.rb | 29 + .../ruby/core/kernel/initialize_dup_spec.rb | 20 + ruby/spec/ruby/core/kernel/inspect_spec.rb | 8 + .../spec/ruby/core/kernel/instance_of_spec.rb | 2 +- .../core/kernel/instance_variable_get_spec.rb | 2 +- .../core/kernel/instance_variable_set_spec.rb | 10 +- .../core/kernel/instance_variables_spec.rb | 15 +- ruby/spec/ruby/core/kernel/iterator_spec.rb | 14 +- ruby/spec/ruby/core/kernel/lambda_spec.rb | 44 +- ruby/spec/ruby/core/kernel/match_spec.rb | 10 +- ruby/spec/ruby/core/kernel/nil_spec.rb | 10 +- ruby/spec/ruby/core/kernel/open_spec.rb | 25 +- ruby/spec/ruby/core/kernel/p_spec.rb | 8 +- ruby/spec/ruby/core/kernel/pp_spec.rb | 12 +- ruby/spec/ruby/core/kernel/print_spec.rb | 12 + ruby/spec/ruby/core/kernel/printf_spec.rb | 17 +- ruby/spec/ruby/core/kernel/proc_spec.rb | 22 +- .../spec/ruby/core/kernel/public_send_spec.rb | 8 + ruby/spec/ruby/core/kernel/raise_spec.rb | 40 + ruby/spec/ruby/core/kernel/rand_spec.rb | 46 +- .../ruby/core/kernel/require_relative_spec.rb | 10 + ruby/spec/ruby/core/kernel/respond_to_spec.rb | 3 +- .../spec/ruby/core/kernel/shared/dup_clone.rb | 34 +- ruby/spec/ruby/core/kernel/shared/lambda.rb | 4 +- ruby/spec/ruby/core/kernel/shared/method.rb | 8 +- ruby/spec/ruby/core/kernel/shared/require.rb | 109 +- ruby/spec/ruby/core/kernel/shared/sprintf.rb | 915 +- .../core/kernel/shared/sprintf_encoding.rb | 18 +- .../ruby/core/kernel/singleton_class_spec.rb | 2 +- ruby/spec/ruby/core/kernel/sleep_spec.rb | 8 +- ruby/spec/ruby/core/kernel/srand_spec.rb | 18 +- ruby/spec/ruby/core/kernel/system_spec.rb | 20 +- ruby/spec/ruby/core/kernel/taint_spec.rb | 29 +- ruby/spec/ruby/core/kernel/tainted_spec.rb | 21 +- ruby/spec/ruby/core/kernel/then_spec.rb | 6 +- ruby/spec/ruby/core/kernel/trap_spec.rb | 5 +- ruby/spec/ruby/core/kernel/trust_spec.rb | 22 +- ruby/spec/ruby/core/kernel/untaint_spec.rb | 22 +- ruby/spec/ruby/core/kernel/untrust_spec.rb | 21 +- ruby/spec/ruby/core/kernel/untrusted_spec.rb | 26 +- ruby/spec/ruby/core/kernel/warn_spec.rb | 243 +- ruby/spec/ruby/core/kernel/yield_self_spec.rb | 6 +- ruby/spec/ruby/core/main/fixtures/classes.rb | 8 + ruby/spec/ruby/core/main/private_spec.rb | 43 +- ruby/spec/ruby/core/main/public_spec.rb | 40 +- .../ruby/core/main/ruby2_keywords_spec.rb | 11 + ruby/spec/ruby/core/marshal/dump_spec.rb | 46 +- .../core/marshal/fixtures/marshal_data.rb | 62 +- ruby/spec/ruby/core/marshal/shared/load.rb | 285 +- .../spec/ruby/core/matchdata/captures_spec.rb | 8 + .../core/matchdata/element_reference_spec.rb | 8 + .../ruby/core/matchdata/fixtures/classes.rb | 3 + .../ruby/core/matchdata/match_length_spec.rb | 34 + ruby/spec/ruby/core/matchdata/match_spec.rb | 34 + .../ruby/core/matchdata/post_match_spec.rb | 8 + .../ruby/core/matchdata/pre_match_spec.rb | 8 + ruby/spec/ruby/core/matchdata/string_spec.rb | 4 +- ruby/spec/ruby/core/matchdata/to_a_spec.rb | 8 + ruby/spec/ruby/core/matchdata/to_s_spec.rb | 8 + ruby/spec/ruby/core/math/tan_spec.rb | 4 +- .../ruby/core/method/case_compare_spec.rb | 6 +- ruby/spec/ruby/core/method/compose_spec.rb | 133 +- .../spec/ruby/core/method/fixtures/classes.rb | 6 + ruby/spec/ruby/core/method/shared/to_s.rb | 49 +- .../ruby/core/method/source_location_spec.rb | 22 +- ruby/spec/ruby/core/method/unbind_spec.rb | 29 +- .../ruby/core/module/alias_method_spec.rb | 40 +- ruby/spec/ruby/core/module/allocate_spec.rb | 14 - .../ruby/core/module/append_features_spec.rb | 4 +- .../ruby/core/module/attr_accessor_spec.rb | 48 +- .../spec/ruby/core/module/attr_reader_spec.rb | 23 +- ruby/spec/ruby/core/module/attr_spec.rb | 27 +- .../spec/ruby/core/module/attr_writer_spec.rb | 35 +- ruby/spec/ruby/core/module/autoload_spec.rb | 147 +- .../module/class_variable_defined_spec.rb | 2 +- .../core/module/class_variable_get_spec.rb | 2 +- .../core/module/class_variable_set_spec.rb | 8 +- .../ruby/core/module/const_defined_spec.rb | 5 + ruby/spec/ruby/core/module/const_get_spec.rb | 8 + ruby/spec/ruby/core/module/const_set_spec.rb | 25 +- .../core/module/const_source_location_spec.rb | 220 + ruby/spec/ruby/core/module/constants_spec.rb | 20 +- .../ruby/core/module/define_method_spec.rb | 112 +- .../core/module/deprecate_constant_spec.rb | 25 +- .../autoload_during_require_current_file.rb | 5 + .../core/module/fixtures/autoload_location.rb | 3 + .../autoload_required_directly_no_constant.rb | 2 + ruby/spec/ruby/core/module/fixtures/refine.rb | 12 + ruby/spec/ruby/core/module/include_spec.rb | 298 + ruby/spec/ruby/core/module/included_spec.rb | 2 +- .../ruby/core/module/method_added_spec.rb | 21 + .../ruby/core/module/method_defined_spec.rb | 92 +- .../ruby/core/module/module_function_spec.rb | 40 +- ruby/spec/ruby/core/module/name_spec.rb | 26 +- ruby/spec/ruby/core/module/prepend_spec.rb | 410 +- .../core/module/private_class_method_spec.rb | 12 + .../module/private_method_defined_spec.rb | 90 +- ruby/spec/ruby/core/module/private_spec.rb | 24 +- .../module/protected_method_defined_spec.rb | 90 +- ruby/spec/ruby/core/module/protected_spec.rb | 24 +- .../core/module/public_class_method_spec.rb | 16 + .../core/module/public_method_defined_spec.rb | 2 +- ruby/spec/ruby/core/module/public_spec.rb | 25 +- ruby/spec/ruby/core/module/refine_spec.rb | 655 +- .../ruby/core/module/remove_const_spec.rb | 21 + .../ruby/core/module/remove_method_spec.rb | 41 +- .../ruby/core/module/ruby2_keywords_spec.rb | 112 + .../ruby/core/module/shared/class_eval.rb | 44 + .../ruby/core/module/shared/set_visibility.rb | 34 + .../ruby/core/module/singleton_class_spec.rb | 10 +- ruby/spec/ruby/core/module/to_s_spec.rb | 23 + .../ruby/core/module/undef_method_spec.rb | 19 +- ruby/spec/ruby/core/module/using_spec.rb | 90 + ruby/spec/ruby/core/mutex/owned_spec.rb | 12 + ruby/spec/ruby/core/mutex/sleep_spec.rb | 18 +- ruby/spec/ruby/core/mutex/unlock_spec.rb | 2 +- ruby/spec/ruby/core/nil/case_compare_spec.rb | 13 + ruby/spec/ruby/core/nil/match_spec.rb | 28 +- ruby/spec/ruby/core/nil/nil_spec.rb | 2 +- ruby/spec/ruby/core/nil/to_i_spec.rb | 2 +- ruby/spec/ruby/core/nil/to_s_spec.rb | 2 +- ruby/spec/ruby/core/numeric/clone_spec.rb | 32 + ruby/spec/ruby/core/numeric/dup_spec.rb | 16 + ruby/spec/ruby/core/numeric/integer_spec.rb | 2 +- ruby/spec/ruby/core/numeric/negative_spec.rb | 4 +- ruby/spec/ruby/core/numeric/positive_spec.rb | 4 +- ruby/spec/ruby/core/numeric/quo_spec.rb | 9 + ruby/spec/ruby/core/numeric/real_spec.rb | 2 +- ruby/spec/ruby/core/numeric/shared/step.rb | 90 +- ruby/spec/ruby/core/numeric/step_spec.rb | 118 +- ruby/spec/ruby/core/numeric/zero_spec.rb | 4 +- .../ruby/core/objectspace/_id2ref_spec.rb | 41 +- .../core/objectspace/define_finalizer_spec.rb | 128 +- .../core/objectspace/garbage_collect_spec.rb | 4 +- .../core/objectspace/weakmap/each_key_spec.rb | 11 + .../objectspace/weakmap/each_pair_spec.rb | 11 + .../core/objectspace/weakmap/each_spec.rb | 11 + .../objectspace/weakmap/each_value_spec.rb | 11 + .../weakmap/element_reference_spec.rb | 24 + .../objectspace/weakmap/element_set_spec.rb | 61 + .../core/objectspace/weakmap/include_spec.rb | 6 + .../core/objectspace/weakmap/inspect_spec.rb | 25 + .../ruby/core/objectspace/weakmap/key_spec.rb | 6 + .../core/objectspace/weakmap/keys_spec.rb | 6 + .../core/objectspace/weakmap/length_spec.rb | 6 + .../core/objectspace/weakmap/member_spec.rb | 6 + .../core/objectspace/weakmap/shared/each.rb | 10 + .../objectspace/weakmap/shared/include.rb | 34 + .../objectspace/weakmap/shared/members.rb | 14 + .../core/objectspace/weakmap/shared/size.rb | 14 + .../core/objectspace/weakmap/size_spec.rb | 6 + .../core/objectspace/weakmap/values_spec.rb | 6 + .../ruby/core/objectspace/weakmap_spec.rb | 12 + ruby/spec/ruby/core/proc/compose_spec.rb | 218 +- ruby/spec/ruby/core/proc/eql_spec.rb | 8 +- ruby/spec/ruby/core/proc/equal_value_spec.rb | 8 +- .../core/proc/fixtures/source_location.rb | 2 +- ruby/spec/ruby/core/proc/hash_spec.rb | 2 +- ruby/spec/ruby/core/proc/lambda_spec.rb | 4 +- ruby/spec/ruby/core/proc/new_spec.rb | 14 +- ruby/spec/ruby/core/proc/parameters_spec.rb | 4 +- .../ruby/core/proc/ruby2_keywords_spec.rb | 64 + ruby/spec/ruby/core/proc/shared/call.rb | 3 + .../ruby/core/proc/shared/call_arguments.rb | 2 +- ruby/spec/ruby/core/proc/shared/compose.rb | 2 +- ruby/spec/ruby/core/proc/shared/equal.rb | 14 +- ruby/spec/ruby/core/proc/shared/to_s.rb | 11 +- .../ruby/core/proc/source_location_spec.rb | 10 +- .../ruby/core/process/clock_getres_spec.rb | 40 +- ruby/spec/ruby/core/process/constants_spec.rb | 22 + ruby/spec/ruby/core/process/euid_spec.rb | 2 +- ruby/spec/ruby/core/process/exec_spec.rb | 20 +- .../spec/ruby/core/process/fixtures/clocks.rb | 42 - .../ruby/core/process/getpriority_spec.rb | 8 +- ruby/spec/ruby/core/process/getrlimit_spec.rb | 13 +- ruby/spec/ruby/core/process/groups_spec.rb | 4 + ruby/spec/ruby/core/process/kill_spec.rb | 2 +- .../ruby/core/process/last_status_spec.rb | 26 +- ruby/spec/ruby/core/process/maxgroups_spec.rb | 2 +- ruby/spec/ruby/core/process/pid_spec.rb | 2 +- ruby/spec/ruby/core/process/setrlimit_spec.rb | 13 +- ruby/spec/ruby/core/process/spawn_spec.rb | 94 +- .../core/process/status/equal_value_spec.rb | 4 +- .../ruby/core/process/status/exited_spec.rb | 7 +- .../core/process/status/exitstatus_spec.rb | 4 +- .../ruby/core/process/status/signaled_spec.rb | 6 +- .../ruby/core/process/status/success_spec.rb | 14 +- .../ruby/core/process/status/termsig_spec.rb | 4 +- .../ruby/core/process/status/to_i_spec.rb | 4 +- .../ruby/core/process/status/wait_spec.rb | 102 + ruby/spec/ruby/core/process/times_spec.rb | 25 +- ruby/spec/ruby/core/process/wait_spec.rb | 3 +- ruby/spec/ruby/core/queue/initialize_spec.rb | 38 + ruby/spec/ruby/core/random/bytes_spec.rb | 6 +- ruby/spec/ruby/core/random/default_spec.rb | 34 +- ruby/spec/ruby/core/random/new_seed_spec.rb | 4 +- ruby/spec/ruby/core/random/new_spec.rb | 2 +- ruby/spec/ruby/core/random/rand_spec.rb | 6 +- .../ruby/core/random/random_number_spec.rb | 4 +- ruby/spec/ruby/core/random/raw_seed_spec.rb | 7 +- ruby/spec/ruby/core/random/urandom_spec.rb | 9 - ruby/spec/ruby/core/range/bsearch_spec.rb | 305 +- .../spec/ruby/core/range/case_compare_spec.rb | 25 +- ruby/spec/ruby/core/range/count_spec.rb | 14 + ruby/spec/ruby/core/range/cover_spec.rb | 1 + ruby/spec/ruby/core/range/dup_spec.rb | 4 +- ruby/spec/ruby/core/range/each_spec.rb | 56 +- ruby/spec/ruby/core/range/equal_value_spec.rb | 10 + ruby/spec/ruby/core/range/exclude_end_spec.rb | 20 +- ruby/spec/ruby/core/range/first_spec.rb | 6 + ruby/spec/ruby/core/range/hash_spec.rb | 10 +- ruby/spec/ruby/core/range/initialize_spec.rb | 15 +- ruby/spec/ruby/core/range/inspect_spec.rb | 17 + ruby/spec/ruby/core/range/last_spec.rb | 4 + ruby/spec/ruby/core/range/max_spec.rb | 23 + ruby/spec/ruby/core/range/min_spec.rb | 15 + ruby/spec/ruby/core/range/minmax_spec.rb | 170 + ruby/spec/ruby/core/range/new_spec.rb | 34 +- ruby/spec/ruby/core/range/percent_spec.rb | 24 +- ruby/spec/ruby/core/range/shared/cover.rb | 140 +- .../core/range/shared/cover_and_include.rb | 12 + .../ruby/core/range/shared/equal_value.rb | 6 + ruby/spec/ruby/core/range/size_spec.rb | 19 + ruby/spec/ruby/core/range/step_spec.rb | 199 +- ruby/spec/ruby/core/range/to_a_spec.rb | 19 + ruby/spec/ruby/core/range/to_s_spec.rb | 12 + .../ruby/core/rational/comparison_spec.rb | 2 +- ruby/spec/ruby/core/rational/rational_spec.rb | 4 + .../ruby/core/regexp/case_compare_spec.rb | 10 + ruby/spec/ruby/core/regexp/casefold_spec.rb | 4 +- ruby/spec/ruby/core/regexp/initialize_spec.rb | 12 +- ruby/spec/ruby/core/regexp/last_match_spec.rb | 44 +- ruby/spec/ruby/core/regexp/new_spec.rb | 2 +- ruby/spec/ruby/core/regexp/options_spec.rb | 6 +- ruby/spec/ruby/core/regexp/shared/new.rb | 6 +- ruby/spec/ruby/core/regexp/union_spec.rb | 10 + ruby/spec/ruby/core/signal/trap_spec.rb | 131 +- ruby/spec/ruby/core/string/bytes_spec.rb | 6 +- ruby/spec/ruby/core/string/capitalize_spec.rb | 41 +- ruby/spec/ruby/core/string/casecmp_spec.rb | 24 +- ruby/spec/ruby/core/string/center_spec.rb | 35 +- ruby/spec/ruby/core/string/chomp_spec.rb | 41 +- ruby/spec/ruby/core/string/chop_spec.rb | 28 +- ruby/spec/ruby/core/string/clear_spec.rb | 6 +- ruby/spec/ruby/core/string/crypt_spec.rb | 16 +- .../ruby/core/string/delete_prefix_spec.rb | 123 +- ruby/spec/ruby/core/string/delete_spec.rb | 24 +- .../ruby/core/string/delete_suffix_spec.rb | 123 +- ruby/spec/ruby/core/string/downcase_spec.rb | 36 +- ruby/spec/ruby/core/string/dump_spec.rb | 22 +- .../core/string/each_grapheme_cluster_spec.rb | 16 +- .../spec/ruby/core/string/element_set_spec.rb | 22 +- ruby/spec/ruby/core/string/empty_spec.rb | 10 +- ruby/spec/ruby/core/string/encode_spec.rb | 89 +- ruby/spec/ruby/core/string/end_with_spec.rb | 52 +- .../spec/ruby/core/string/fixtures/classes.rb | 11 + .../ruby/core/string/force_encoding_spec.rb | 6 +- .../core/string/grapheme_clusters_spec.rb | 14 +- ruby/spec/ruby/core/string/gsub_spec.rb | 102 +- ruby/spec/ruby/core/string/index_spec.rb | 3 +- ruby/spec/ruby/core/string/insert_spec.rb | 10 +- ruby/spec/ruby/core/string/inspect_spec.rb | 18 +- ruby/spec/ruby/core/string/ljust_spec.rb | 35 +- ruby/spec/ruby/core/string/lstrip_spec.rb | 37 +- ruby/spec/ruby/core/string/match_spec.rb | 2 +- ruby/spec/ruby/core/string/modulo_spec.rb | 43 +- ruby/spec/ruby/core/string/ord_spec.rb | 4 +- ruby/spec/ruby/core/string/partition_spec.rb | 3 + ruby/spec/ruby/core/string/percent_spec.rb | 13 - ruby/spec/ruby/core/string/prepend_spec.rb | 6 +- ruby/spec/ruby/core/string/reverse_spec.rb | 31 +- ruby/spec/ruby/core/string/rindex_spec.rb | 2 +- ruby/spec/ruby/core/string/rjust_spec.rb | 35 +- ruby/spec/ruby/core/string/rpartition_spec.rb | 16 + ruby/spec/ruby/core/string/rstrip_spec.rb | 19 +- ruby/spec/ruby/core/string/scan_spec.rb | 8 + ruby/spec/ruby/core/string/scrub_spec.rb | 61 +- ruby/spec/ruby/core/string/setbyte_spec.rb | 4 +- ruby/spec/ruby/core/string/shared/chars.rb | 4 +- .../ruby/core/string/shared/codepoints.rb | 4 +- ruby/spec/ruby/core/string/shared/concat.rb | 20 +- .../spec/ruby/core/string/shared/each_line.rb | 56 +- ruby/spec/ruby/core/string/shared/eql.rb | 2 +- ruby/spec/ruby/core/string/shared/length.rb | 29 + .../spec/ruby/core/string/shared/partition.rb | 36 + ruby/spec/ruby/core/string/shared/replace.rb | 16 +- ruby/spec/ruby/core/string/shared/slice.rb | 168 +- ruby/spec/ruby/core/string/shared/strip.rb | 20 + ruby/spec/ruby/core/string/shared/succ.rb | 26 +- ruby/spec/ruby/core/string/shared/to_s.rb | 4 +- ruby/spec/ruby/core/string/shared/to_sym.rb | 2 +- ruby/spec/ruby/core/string/slice_spec.rb | 164 +- ruby/spec/ruby/core/string/split_spec.rb | 208 +- ruby/spec/ruby/core/string/squeeze_spec.rb | 26 +- ruby/spec/ruby/core/string/start_with_spec.rb | 72 +- ruby/spec/ruby/core/string/strip_spec.rb | 41 +- ruby/spec/ruby/core/string/sub_spec.rb | 69 +- ruby/spec/ruby/core/string/swapcase_spec.rb | 41 +- ruby/spec/ruby/core/string/to_i_spec.rb | 18 +- ruby/spec/ruby/core/string/tr_s_spec.rb | 26 +- ruby/spec/ruby/core/string/tr_spec.rb | 26 +- ruby/spec/ruby/core/string/uminus_spec.rb | 65 +- ruby/spec/ruby/core/string/undump_spec.rb | 834 +- .../core/string/unicode_normalized_spec.rb | 8 +- ruby/spec/ruby/core/string/unpack/m_spec.rb | 14 + .../ruby/core/string/unpack/shared/basic.rb | 20 + ruby/spec/ruby/core/string/unpack/w_spec.rb | 10 + ruby/spec/ruby/core/string/unpack1_spec.rb | 20 + ruby/spec/ruby/core/string/upcase_spec.rb | 42 +- ruby/spec/ruby/core/string/uplus_spec.rb | 2 +- ruby/spec/ruby/core/string/upto_spec.rb | 6 + .../ruby/core/string/valid_encoding_spec.rb | 18 +- .../ruby/core/struct/deconstruct_keys_spec.rb | 78 + .../spec/ruby/core/struct/deconstruct_spec.rb | 12 + ruby/spec/ruby/core/struct/dig_spec.rb | 10 + ruby/spec/ruby/core/struct/filter_spec.rb | 10 +- ruby/spec/ruby/core/struct/hash_spec.rb | 22 +- ruby/spec/ruby/core/struct/new_spec.rb | 143 +- ruby/spec/ruby/core/struct/to_h_spec.rb | 78 +- ruby/spec/ruby/core/struct/values_at_spec.rb | 6 +- .../spec/ruby/core/symbol/all_symbols_spec.rb | 11 +- ruby/spec/ruby/core/symbol/casecmp_spec.rb | 2 +- ruby/spec/ruby/core/symbol/comparison_spec.rb | 2 +- ruby/spec/ruby/core/symbol/end_with_spec.rb | 10 + ruby/spec/ruby/core/symbol/match_spec.rb | 17 + ruby/spec/ruby/core/symbol/name_spec.rb | 19 + ruby/spec/ruby/core/symbol/start_with_spec.rb | 10 + ruby/spec/ruby/core/symbol/to_proc_spec.rb | 47 +- .../spec/ruby/core/systemexit/success_spec.rb | 4 +- ruby/spec/ruby/core/thread/alive_spec.rb | 20 +- .../backtrace/location/absolute_path_spec.rb | 82 +- .../backtrace/location/base_label_spec.rb | 27 + .../location/fixtures/absolute_path_main.rb | 2 + .../backtrace/location/fixtures/path.rb | 2 + .../thread/backtrace/location/lineno_spec.rb | 10 + .../thread/backtrace/location/path_spec.rb | 35 + .../core/thread/backtrace_locations_spec.rb | 48 + ruby/spec/ruby/core/thread/backtrace_spec.rb | 34 + .../spec/ruby/core/thread/element_set_spec.rb | 4 +- ruby/spec/ruby/core/thread/exclusive_spec.rb | 66 +- ruby/spec/ruby/core/thread/fetch_spec.rb | 54 +- .../ruby/core/thread/handle_interrupt_spec.rb | 125 + .../ruby/core/thread/ignore_deadlock_spec.rb | 21 + ruby/spec/ruby/core/thread/join_spec.rb | 5 + ruby/spec/ruby/core/thread/list_spec.rb | 4 +- ruby/spec/ruby/core/thread/new_spec.rb | 12 +- .../core/thread/pending_interrupt_spec.rb | 32 + ruby/spec/ruby/core/thread/raise_spec.rb | 2 +- .../core/thread/report_on_exception_spec.rb | 24 +- ruby/spec/ruby/core/thread/shared/to_s.rb | 6 +- ruby/spec/ruby/core/thread/shared/wakeup.rb | 3 +- ruby/spec/ruby/core/thread/stop_spec.rb | 20 +- ruby/spec/ruby/core/thread/to_s_spec.rb | 6 +- ruby/spec/ruby/core/time/_dump_spec.rb | 4 +- ruby/spec/ruby/core/time/at_spec.rb | 176 +- ruby/spec/ruby/core/time/ceil_spec.rb | 7 +- ruby/spec/ruby/core/time/dup_spec.rb | 4 +- ruby/spec/ruby/core/time/floor_spec.rb | 7 +- ruby/spec/ruby/core/time/friday_spec.rb | 4 +- ruby/spec/ruby/core/time/getlocal_spec.rb | 102 +- ruby/spec/ruby/core/time/gmt_spec.rb | 4 +- ruby/spec/ruby/core/time/hash_spec.rb | 4 +- ruby/spec/ruby/core/time/inspect_spec.rb | 29 + ruby/spec/ruby/core/time/minus_spec.rb | 20 +- ruby/spec/ruby/core/time/monday_spec.rb | 4 +- ruby/spec/ruby/core/time/new_spec.rb | 316 +- ruby/spec/ruby/core/time/plus_spec.rb | 20 +- ruby/spec/ruby/core/time/saturday_spec.rb | 4 +- ruby/spec/ruby/core/time/shared/now.rb | 22 +- ruby/spec/ruby/core/time/shared/to_i.rb | 7 + ruby/spec/ruby/core/time/subsec_spec.rb | 2 +- ruby/spec/ruby/core/time/succ_spec.rb | 46 +- ruby/spec/ruby/core/time/sunday_spec.rb | 4 +- ruby/spec/ruby/core/time/thursday_spec.rb | 4 +- ruby/spec/ruby/core/time/tuesday_spec.rb | 4 +- ruby/spec/ruby/core/time/utc_spec.rb | 2 +- ruby/spec/ruby/core/time/wednesday_spec.rb | 4 +- .../spec/ruby/core/tracepoint/binding_spec.rb | 2 + .../ruby/core/tracepoint/callee_id_spec.rb | 1 + .../core/tracepoint/defined_class_spec.rb | 1 + .../spec/ruby/core/tracepoint/disable_spec.rb | 9 +- ruby/spec/ruby/core/tracepoint/enable_spec.rb | 633 +- .../spec/ruby/core/tracepoint/enabled_spec.rb | 5 +- .../ruby/core/tracepoint/eval_script_spec.rb | 29 +- ruby/spec/ruby/core/tracepoint/event_spec.rb | 1 + .../ruby/core/tracepoint/fixtures/classes.rb | 6 + .../spec/ruby/core/tracepoint/inspect_spec.rb | 113 +- ruby/spec/ruby/core/tracepoint/lineno_spec.rb | 14 +- .../ruby/core/tracepoint/method_id_spec.rb | 10 +- ruby/spec/ruby/core/tracepoint/new_spec.rb | 21 +- .../ruby/core/tracepoint/parameters_spec.rb | 37 +- ruby/spec/ruby/core/tracepoint/path_spec.rb | 16 +- .../core/tracepoint/raised_exception_spec.rb | 6 +- .../ruby/core/tracepoint/return_value_spec.rb | 6 +- ruby/spec/ruby/core/tracepoint/self_spec.rb | 10 +- ruby/spec/ruby/core/tracepoint/trace_spec.rb | 3 +- ruby/spec/ruby/core/true/case_compare_spec.rb | 13 + ruby/spec/ruby/core/true/to_s_spec.rb | 2 +- .../ruby/core/unboundmethod/shared/to_s.rb | 9 + .../unboundmethod/source_location_spec.rb | 4 +- .../core/warning/element_reference_spec.rb | 22 + .../ruby/core/warning/element_set_spec.rb | 37 + ruby/spec/ruby/core/warning/warn_spec.rb | 26 +- ruby/spec/ruby/default.mspec | 1 + ruby/spec/ruby/fixtures/code/concurrent.rb | 2 +- ruby/spec/ruby/fixtures/code_loading.rb | 15 + ruby/spec/ruby/fixtures/constants.rb | 18 +- ruby/spec/ruby/language/BEGIN_spec.rb | 5 + ruby/spec/ruby/language/END_spec.rb | 15 + ruby/spec/ruby/language/README | 2 +- ruby/spec/ruby/language/alias_spec.rb | 7 +- ruby/spec/ruby/language/block_spec.rb | 199 +- ruby/spec/ruby/language/break_spec.rb | 18 + ruby/spec/ruby/language/case_spec.rb | 9 + ruby/spec/ruby/language/class_spec.rb | 18 + .../spec/ruby/language/class_variable_spec.rb | 32 + ruby/spec/ruby/language/comment_spec.rb | 15 + ruby/spec/ruby/language/constants_spec.rb | 145 +- ruby/spec/ruby/language/def_spec.rb | 47 +- ruby/spec/ruby/language/defined_spec.rb | 93 +- ruby/spec/ruby/language/delegation_spec.rb | 68 + ruby/spec/ruby/language/ensure_spec.rb | 108 +- .../language/fixtures/constant_visibility.rb | 18 +- .../spec/ruby/language/fixtures/delegation.rb | 11 + .../ruby/language/fixtures/rescue_captures.rb | 107 + ruby/spec/ruby/language/fixtures/return.rb | 8 +- .../language/fixtures/squiggly_heredoc.rb | 32 + ruby/spec/ruby/language/fixtures/super.rb | 46 + ruby/spec/ruby/language/hash_spec.rb | 106 +- ruby/spec/ruby/language/heredoc_spec.rb | 28 + ruby/spec/ruby/language/lambda_spec.rb | 95 +- ruby/spec/ruby/language/method_spec.rb | 765 +- ruby/spec/ruby/language/module_spec.rb | 20 +- .../ruby/language/numbered_parameters_spec.rb | 120 + ruby/spec/ruby/language/numbers_spec.rb | 8 + .../language/optional_assignments_spec.rb | 105 + .../ruby/language/pattern_matching_spec.rb | 1302 + ruby/spec/ruby/language/predefined_spec.rb | 181 +- ruby/spec/ruby/language/proc_spec.rb | 26 + ruby/spec/ruby/language/range_spec.rb | 19 +- .../language/regexp/back-references_spec.rb | 87 + .../language/regexp/character_classes_spec.rb | 6 + .../ruby/language/regexp/empty_checks_spec.rb | 135 + .../ruby/language/regexp/encoding_spec.rb | 29 + .../spec/ruby/language/regexp/escapes_spec.rb | 16 + .../ruby/language/regexp/grouping_spec.rb | 40 + .../language/regexp/interpolation_spec.rb | 2 +- .../ruby/language/regexp/repetition_spec.rb | 94 + .../regexp/subexpression_call_spec.rb | 50 + ruby/spec/ruby/language/regexp_spec.rb | 13 + ruby/spec/ruby/language/rescue_spec.rb | 112 +- ruby/spec/ruby/language/return_spec.rb | 380 +- ruby/spec/ruby/language/safe_spec.rb | 125 +- ruby/spec/ruby/language/send_spec.rb | 36 +- .../ruby/language/singleton_class_spec.rb | 4 +- .../ruby/language/source_encoding_spec.rb | 4 +- ruby/spec/ruby/language/string_spec.rb | 58 +- ruby/spec/ruby/language/super_spec.rb | 46 + ruby/spec/ruby/language/variables_spec.rb | 103 +- ruby/spec/ruby/language/yield_spec.rb | 28 + .../spec/ruby/library/English/English_spec.rb | 8 +- ruby/spec/ruby/library/English/alias_spec.rb | 14 + .../spec/ruby/library/base64/decode64_spec.rb | 4 + .../library/bigdecimal/BigDecimal_spec.rb | 112 +- ruby/spec/ruby/library/bigdecimal/abs_spec.rb | 2 +- ruby/spec/ruby/library/bigdecimal/add_spec.rb | 8 +- .../library/bigdecimal/comparison_spec.rb | 2 +- .../ruby/library/bigdecimal/constants_spec.rb | 6 +- ruby/spec/ruby/library/bigdecimal/div_spec.rb | 16 +- .../ruby/library/bigdecimal/divmod_spec.rb | 6 +- .../ruby/library/bigdecimal/exponent_spec.rb | 2 +- .../ruby/library/bigdecimal/finite_spec.rb | 8 +- ruby/spec/ruby/library/bigdecimal/fix_spec.rb | 2 +- .../spec/ruby/library/bigdecimal/frac_spec.rb | 2 +- ruby/spec/ruby/library/bigdecimal/gt_spec.rb | 2 +- ruby/spec/ruby/library/bigdecimal/gte_spec.rb | 2 +- ruby/spec/ruby/library/bigdecimal/lt_spec.rb | 2 +- ruby/spec/ruby/library/bigdecimal/lte_spec.rb | 2 +- .../ruby/library/bigdecimal/minus_spec.rb | 18 +- .../spec/ruby/library/bigdecimal/mode_spec.rb | 2 +- ruby/spec/ruby/library/bigdecimal/nan_spec.rb | 22 +- .../spec/ruby/library/bigdecimal/plus_spec.rb | 6 +- .../ruby/library/bigdecimal/precs_spec.rb | 39 +- ruby/spec/ruby/library/bigdecimal/quo_spec.rb | 4 +- .../ruby/library/bigdecimal/remainder_spec.rb | 38 +- .../ruby/library/bigdecimal/shared/clone.rb | 17 +- .../ruby/library/bigdecimal/shared/modulo.rb | 28 +- .../ruby/library/bigdecimal/shared/mult.rb | 20 +- .../ruby/library/bigdecimal/shared/power.rb | 4 +- .../ruby/library/bigdecimal/shared/quo.rb | 10 +- .../ruby/library/bigdecimal/shared/to_int.rb | 2 +- ruby/spec/ruby/library/bigdecimal/sub_spec.rb | 8 +- .../spec/ruby/library/bigdecimal/to_f_spec.rb | 2 +- .../spec/ruby/library/bigdecimal/to_s_spec.rb | 17 + .../ruby/library/bigdecimal/truncate_spec.rb | 6 +- .../ruby/library/bigdecimal/uminus_spec.rb | 2 +- .../spec/ruby/library/bigdecimal/util_spec.rb | 6 +- .../spec/ruby/library/bigdecimal/zero_spec.rb | 26 +- .../spec/ruby/library/cgi/cookie/to_s_spec.rb | 13 +- ruby/spec/ruby/library/cgi/escapeHTML_spec.rb | 4 + ruby/spec/ruby/library/cgi/escape_spec.rb | 16 +- .../ruby/library/cgi/unescapeHTML_spec.rb | 5 + ruby/spec/ruby/library/cgi/unescape_spec.rb | 4 +- .../conditionvariable/broadcast_spec.rb | 67 - .../library/conditionvariable/signal_spec.rb | 104 - .../library/conditionvariable/wait_spec.rb | 132 - .../library/coverage/fixtures/eval_code.rb | 11 + .../spec/ruby/library/coverage/result_spec.rb | 37 +- .../ruby/library/csv/liberal_parsing_spec.rb | 6 +- ruby/spec/ruby/library/date/constants_spec.rb | 4 +- ruby/spec/ruby/library/date/gregorian_spec.rb | 2 +- ruby/spec/ruby/library/date/infinity_spec.rb | 14 +- ruby/spec/ruby/library/date/julian_spec.rb | 4 +- ruby/spec/ruby/library/date/parse_spec.rb | 17 + ruby/spec/ruby/library/date/shared/civil.rb | 8 +- ruby/spec/ruby/library/date/strftime_spec.rb | 15 +- .../ruby/library/datetime/strftime_spec.rb | 16 +- .../library/delegate/delegator/eql_spec.rb | 55 +- .../ruby/library/digest/bubblebabble_spec.rb | 2 +- .../ruby/library/digest/hexencode_spec.rb | 2 +- .../library/digest/instance/append_spec.rb | 7 + .../ruby/library/digest/instance/new_spec.rb | 19 + .../library/digest/instance/shared/update.rb | 8 + .../library/digest/instance/update_spec.rb | 7 + .../library/digest/md5/shared/constants.rb | 1 + .../library/digest/sha1/shared/constants.rb | 3 +- .../library/digest/sha2/hexdigest_spec.rb | 32 + .../ruby/library/digest/sha256/file_spec.rb | 4 + .../library/digest/sha256/shared/constants.rb | 1 + .../library/digest/sha384/shared/constants.rb | 1 + .../library/digest/sha512/shared/constants.rb | 1 + .../spec/ruby/library/erb/fixtures/classes.rb | 6 +- ruby/spec/ruby/library/erb/new_spec.rb | 19 +- .../library/erb/util/shared/url_encode.rb | 16 +- ruby/spec/ruby/library/etc/confstr_spec.rb | 2 +- ruby/spec/ruby/library/etc/getgrgid_spec.rb | 7 - ruby/spec/ruby/library/etc/getgrnam_spec.rb | 2 +- ruby/spec/ruby/library/etc/group_spec.rb | 2 +- .../ruby/library/etc/struct_group_spec.rb | 2 +- .../ruby/library/etc/struct_passwd_spec.rb | 2 +- ruby/spec/ruby/library/fiber/current_spec.rb | 16 +- ruby/spec/ruby/library/fiber/resume_spec.rb | 33 +- ruby/spec/ruby/library/fiber/transfer_spec.rb | 56 +- .../ruby/library/getoptlong/shared/get.rb | 10 +- .../library/getoptlong/terminated_spec.rb | 6 +- .../library/ipaddr/ipv4_conversion_spec.rb | 8 +- ruby/spec/ruby/library/ipaddr/new_spec.rb | 49 +- .../ruby/library/logger/logger/debug_spec.rb | 4 +- .../ruby/library/logger/logger/error_spec.rb | 4 +- .../ruby/library/logger/logger/fatal_spec.rb | 4 +- .../ruby/library/logger/logger/info_spec.rb | 4 +- .../ruby/library/logger/logger/warn_spec.rb | 4 +- .../library/mathn/bignum/exponent_spec.rb | 21 - .../library/mathn/complex/Complex_spec.rb | 14 - .../library/mathn/fixnum/exponent_spec.rb | 17 - .../ruby/library/mathn/float/exponent_spec.rb | 17 - .../mathn/integer/from_prime_division_spec.rb | 11 - .../mathn/integer/prime_division_spec.rb | 21 - .../library/mathn/math/fixtures/classes.rb | 3 - .../ruby/library/mathn/math/rsqrt_spec.rb | 17 - .../ruby/library/mathn/math/shared/rsqrt.rb | 21 - .../ruby/library/mathn/math/shared/sqrt.rb | 25 - .../spec/ruby/library/mathn/math/sqrt_spec.rb | 17 - ruby/spec/ruby/library/mathn/mathn_spec.rb | 13 - .../library/mathn/rational/Rational_spec.rb | 14 - .../library/mathn/rational/inspect_spec.rb | 15 - ruby/spec/ruby/library/matrix/I_spec.rb | 9 +- .../ruby/library/matrix/antisymmetric_spec.rb | 5 +- ruby/spec/ruby/library/matrix/build_spec.rb | 117 +- ruby/spec/ruby/library/matrix/clone_spec.rb | 37 +- ruby/spec/ruby/library/matrix/coerce_spec.rb | 11 +- ruby/spec/ruby/library/matrix/collect_spec.rb | 9 +- .../ruby/library/matrix/column_size_spec.rb | 19 +- ruby/spec/ruby/library/matrix/column_spec.rb | 53 +- .../ruby/library/matrix/column_vector_spec.rb | 37 +- .../library/matrix/column_vectors_spec.rb | 37 +- ruby/spec/ruby/library/matrix/columns_spec.rb | 67 +- ruby/spec/ruby/library/matrix/conj_spec.rb | 9 +- .../ruby/library/matrix/conjugate_spec.rb | 9 +- .../ruby/library/matrix/constructor_spec.rb | 103 +- ruby/spec/ruby/library/matrix/det_spec.rb | 11 +- .../ruby/library/matrix/determinant_spec.rb | 11 +- .../spec/ruby/library/matrix/diagonal_spec.rb | 105 +- ruby/spec/ruby/library/matrix/divide_spec.rb | 83 +- ruby/spec/ruby/library/matrix/each_spec.rb | 119 +- .../library/matrix/each_with_index_spec.rb | 133 +- .../eigenvalue_matrix_spec.rb | 13 +- .../eigenvalues_spec.rb | 35 +- .../eigenvector_matrix_spec.rb | 33 +- .../eigenvectors_spec.rb | 37 +- .../initialize_spec.rb | 39 +- .../eigenvalue_decomposition/to_a_spec.rb | 27 +- .../library/matrix/element_reference_spec.rb | 31 +- ruby/spec/ruby/library/matrix/empty_spec.rb | 107 +- ruby/spec/ruby/library/matrix/eql_spec.rb | 15 +- .../ruby/library/matrix/equal_value_spec.rb | 15 +- .../spec/ruby/library/matrix/exponent_spec.rb | 94 +- .../ruby/library/matrix/find_index_spec.rb | 221 +- ruby/spec/ruby/library/matrix/hash_spec.rb | 21 +- .../ruby/library/matrix/hermitian_spec.rb | 53 +- .../spec/ruby/library/matrix/identity_spec.rb | 9 +- ruby/spec/ruby/library/matrix/imag_spec.rb | 9 +- .../ruby/library/matrix/imaginary_spec.rb | 9 +- ruby/spec/ruby/library/matrix/inspect_spec.rb | 39 +- ruby/spec/ruby/library/matrix/inv_spec.rb | 11 +- .../ruby/library/matrix/inverse_from_spec.rb | 9 +- ruby/spec/ruby/library/matrix/inverse_spec.rb | 11 +- .../library/matrix/lower_triangular_spec.rb | 39 +- .../lup_decomposition/determinant_spec.rb | 33 +- .../lup_decomposition/initialize_spec.rb | 21 +- .../matrix/lup_decomposition/l_spec.rb | 27 +- .../matrix/lup_decomposition/p_spec.rb | 27 +- .../matrix/lup_decomposition/solve_spec.rb | 85 +- .../matrix/lup_decomposition/to_a_spec.rb | 53 +- .../matrix/lup_decomposition/u_spec.rb | 27 +- ruby/spec/ruby/library/matrix/map_spec.rb | 9 +- ruby/spec/ruby/library/matrix/minor_spec.rb | 135 +- ruby/spec/ruby/library/matrix/minus_spec.rb | 65 +- .../spec/ruby/library/matrix/multiply_spec.rb | 105 +- ruby/spec/ruby/library/matrix/new_spec.rb | 11 +- ruby/spec/ruby/library/matrix/normal_spec.rb | 41 +- .../ruby/library/matrix/orthogonal_spec.rb | 41 +- .../ruby/library/matrix/permutation_spec.rb | 51 +- ruby/spec/ruby/library/matrix/plus_spec.rb | 65 +- ruby/spec/ruby/library/matrix/rank_spec.rb | 29 +- ruby/spec/ruby/library/matrix/real_spec.rb | 63 +- ruby/spec/ruby/library/matrix/rect_spec.rb | 9 +- .../ruby/library/matrix/rectangular_spec.rb | 9 +- ruby/spec/ruby/library/matrix/regular_spec.rb | 45 +- ruby/spec/ruby/library/matrix/round_spec.rb | 31 +- .../spec/ruby/library/matrix/row_size_spec.rb | 19 +- ruby/spec/ruby/library/matrix/row_spec.rb | 55 +- .../ruby/library/matrix/row_vector_spec.rb | 33 +- .../ruby/library/matrix/row_vectors_spec.rb | 37 +- ruby/spec/ruby/library/matrix/rows_spec.rb | 65 +- .../ruby/library/matrix/scalar/Fail_spec.rb | 9 +- .../ruby/library/matrix/scalar/Raise_spec.rb | 9 +- .../ruby/library/matrix/scalar/divide_spec.rb | 9 +- .../library/matrix/scalar/exponent_spec.rb | 9 +- .../library/matrix/scalar/included_spec.rb | 9 +- .../library/matrix/scalar/initialize_spec.rb | 9 +- .../ruby/library/matrix/scalar/minus_spec.rb | 9 +- .../library/matrix/scalar/multiply_spec.rb | 9 +- .../ruby/library/matrix/scalar/plus_spec.rb | 9 +- ruby/spec/ruby/library/matrix/scalar_spec.rb | 93 +- .../spec/ruby/library/matrix/singular_spec.rb | 47 +- ruby/spec/ruby/library/matrix/square_spec.rb | 41 +- .../ruby/library/matrix/symmetric_spec.rb | 45 +- ruby/spec/ruby/library/matrix/t_spec.rb | 9 +- ruby/spec/ruby/library/matrix/to_a_spec.rb | 17 +- ruby/spec/ruby/library/matrix/to_s_spec.rb | 9 +- ruby/spec/ruby/library/matrix/tr_spec.rb | 11 +- ruby/spec/ruby/library/matrix/trace_spec.rb | 11 +- .../ruby/library/matrix/transpose_spec.rb | 9 +- ruby/spec/ruby/library/matrix/unit_spec.rb | 9 +- ruby/spec/ruby/library/matrix/unitary_spec.rb | 50 +- .../library/matrix/upper_triangular_spec.rb | 39 +- .../matrix/vector/cross_product_spec.rb | 21 +- .../ruby/library/matrix/vector/each2_spec.rb | 81 +- .../ruby/library/matrix/vector/eql_spec.rb | 23 +- .../matrix/vector/inner_product_spec.rb | 33 +- .../library/matrix/vector/normalize_spec.rb | 29 +- ruby/spec/ruby/library/matrix/zero_spec.rb | 75 +- ruby/spec/ruby/library/monitor/enter_spec.rb | 28 + .../ruby/library/monitor/new_cond_spec.rb | 88 + .../ruby/library/monitor/synchronize_spec.rb | 41 + .../ruby/library/monitor/try_enter_spec.rb | 39 + ruby/spec/ruby/library/net/FTPError_spec.rb | 11 +- .../ruby/library/net/FTPPermError_spec.rb | 17 +- .../ruby/library/net/FTPProtoError_spec.rb | 17 +- .../ruby/library/net/FTPReplyError_spec.rb | 17 +- .../ruby/library/net/FTPTempError_spec.rb | 17 +- ruby/spec/ruby/library/net/ftp/abort_spec.rb | 97 +- ruby/spec/ruby/library/net/ftp/acct_spec.rb | 111 +- ruby/spec/ruby/library/net/ftp/binary_spec.rb | 33 +- ruby/spec/ruby/library/net/ftp/chdir_spec.rb | 145 +- ruby/spec/ruby/library/net/ftp/close_spec.rb | 47 +- ruby/spec/ruby/library/net/ftp/closed_spec.rb | 31 +- .../spec/ruby/library/net/ftp/connect_spec.rb | 93 +- .../ruby/library/net/ftp/debug_mode_spec.rb | 33 +- .../library/net/ftp/default_passive_spec.rb | 11 +- ruby/spec/ruby/library/net/ftp/delete_spec.rb | 113 +- ruby/spec/ruby/library/net/ftp/dir_spec.rb | 13 +- ruby/spec/ruby/library/net/ftp/get_spec.rb | 31 +- .../library/net/ftp/getbinaryfile_spec.rb | 13 +- ruby/spec/ruby/library/net/ftp/getdir_spec.rb | 11 +- .../ruby/library/net/ftp/gettextfile_spec.rb | 13 +- ruby/spec/ruby/library/net/ftp/help_spec.rb | 103 +- .../ruby/library/net/ftp/initialize_spec.rb | 559 +- .../net/ftp/last_response_code_spec.rb | 13 +- .../library/net/ftp/last_response_spec.rb | 39 +- .../ruby/library/net/ftp/lastresp_spec.rb | 13 +- ruby/spec/ruby/library/net/ftp/list_spec.rb | 13 +- ruby/spec/ruby/library/net/ftp/login_spec.rb | 379 +- ruby/spec/ruby/library/net/ftp/ls_spec.rb | 13 +- ruby/spec/ruby/library/net/ftp/mdtm_spec.rb | 59 +- ruby/spec/ruby/library/net/ftp/mkdir_spec.rb | 97 +- ruby/spec/ruby/library/net/ftp/mtime_spec.rb | 73 +- ruby/spec/ruby/library/net/ftp/nlst_spec.rb | 141 +- ruby/spec/ruby/library/net/ftp/noop_spec.rb | 59 +- ruby/spec/ruby/library/net/ftp/open_spec.rb | 73 +- .../spec/ruby/library/net/ftp/passive_spec.rb | 39 +- ruby/spec/ruby/library/net/ftp/put_spec.rb | 31 +- .../library/net/ftp/putbinaryfile_spec.rb | 13 +- .../ruby/library/net/ftp/puttextfile_spec.rb | 13 +- ruby/spec/ruby/library/net/ftp/pwd_spec.rb | 101 +- ruby/spec/ruby/library/net/ftp/quit_spec.rb | 51 +- ruby/spec/ruby/library/net/ftp/rename_spec.rb | 159 +- ruby/spec/ruby/library/net/ftp/resume_spec.rb | 33 +- .../ruby/library/net/ftp/retrbinary_spec.rb | 47 +- .../ruby/library/net/ftp/retrlines_spec.rb | 55 +- .../ruby/library/net/ftp/return_code_spec.rb | 35 +- ruby/spec/ruby/library/net/ftp/rmdir_spec.rb | 111 +- .../spec/ruby/library/net/ftp/sendcmd_spec.rb | 103 +- .../ruby/library/net/ftp/set_socket_spec.rb | 13 +- ruby/spec/ruby/library/net/ftp/site_spec.rb | 101 +- ruby/spec/ruby/library/net/ftp/size_spec.rb | 91 +- ruby/spec/ruby/library/net/ftp/status_spec.rb | 105 +- .../ruby/library/net/ftp/storbinary_spec.rb | 73 +- .../ruby/library/net/ftp/storlines_spec.rb | 65 +- ruby/spec/ruby/library/net/ftp/system_spec.rb | 91 +- .../spec/ruby/library/net/ftp/voidcmd_spec.rb | 103 +- .../spec/ruby/library/net/ftp/welcome_spec.rb | 39 +- .../net/http/HTTPClientExcepton_spec.rb | 14 +- .../net/http/HTTPServerException_spec.rb | 24 +- .../net/http/http/fixtures/http_server.rb | 150 +- .../ruby/library/net/http/http/get2_spec.rb | 2 +- .../ruby/library/net/http/http/get_spec.rb | 72 +- .../ruby/library/net/http/http/head2_spec.rb | 2 +- .../ruby/library/net/http/http/post2_spec.rb | 2 +- .../ruby/library/net/http/http/post_spec.rb | 2 +- .../ruby/library/net/http/http/put2_spec.rb | 2 +- .../library/net/http/http/request_get_spec.rb | 2 +- .../net/http/http/request_head_spec.rb | 2 +- .../net/http/http/request_post_spec.rb | 2 +- .../library/net/http/http/request_put_spec.rb | 2 +- .../net/http/http/send_request_spec.rb | 4 +- .../net/http/http/shared/request_get.rb | 2 +- .../net/http/http/shared/request_head.rb | 2 +- .../net/http/http/shared/request_post.rb | 2 +- .../net/http/http/shared/request_put.rb | 2 +- .../http/httpresponse/body_permitted_spec.rb | 12 +- .../net/http/httpresponse/error_spec.rb | 7 +- .../net/http/httpresponse/error_type_spec.rb | 7 +- .../http/httpresponse/exception_type_spec.rb | 7 +- .../net/http/httpresponse/read_body_spec.rb | 1 + .../net/http/httpresponse/read_new_spec.rb | 1 + .../net/http/httpresponse/shared/body.rb | 2 + .../net/http/httpresponse/value_spec.rb | 7 +- .../objectspace/memsize_of_all_spec.rb | 22 + .../library/objectspace/memsize_of_spec.rb | 6 +- .../trace_object_allocations_spec.rb | 131 + .../library/openssl/config/freeze_spec.rb | 26 +- ruby/spec/ruby/library/openssl/digest_spec.rb | 63 + .../ruby/library/openssl/hmac/digest_spec.rb | 2 +- .../library/openssl/hmac/hexdigest_spec.rb | 2 +- .../ruby/library/openstruct/frozen_spec.rb | 2 + .../library/openstruct/marshal_load_spec.rb | 2 +- .../library/openstruct/method_missing_spec.rb | 29 +- .../spec/ruby/library/openstruct/to_h_spec.rb | 60 +- .../ruby/library/pathname/absolute_spec.rb | 8 +- .../spec/ruby/library/pathname/divide_spec.rb | 6 + ruby/spec/ruby/library/pathname/glob_spec.rb | 57 + .../ruby/library/pathname/inspect_spec.rb | 10 + ruby/spec/ruby/library/pathname/new_spec.rb | 2 +- .../ruby/library/pathname/pathname_spec.rb | 30 + ruby/spec/ruby/library/pathname/plus_spec.rb | 6 + .../ruby/library/pathname/relative_spec.rb | 8 +- ruby/spec/ruby/library/pathname/root_spec.rb | 10 +- .../spec/ruby/library/pathname/shared/plus.rb | 8 + ruby/spec/ruby/library/prime/each_spec.rb | 247 +- ruby/spec/ruby/library/prime/instance_spec.rb | 31 +- .../prime/int_from_prime_division_spec.rb | 19 +- .../library/prime/integer/each_prime_spec.rb | 19 +- .../prime/integer/from_prime_division_spec.rb | 19 +- .../prime/integer/prime_division_spec.rb | 31 +- .../ruby/library/prime/integer/prime_spec.rb | 27 +- ruby/spec/ruby/library/prime/next_spec.rb | 11 +- .../ruby/library/prime/prime_division_spec.rb | 37 +- ruby/spec/ruby/library/prime/prime_spec.rb | 27 +- ruby/spec/ruby/library/prime/succ_spec.rb | 11 +- .../ruby/library/rbconfig/rbconfig_spec.rb | 53 + .../library/rbconfig/sizeof/limits_spec.rb | 58 +- .../rbconfig/unicode_emoji_version_spec.rb | 10 +- .../library/rbconfig/unicode_version_spec.rb | 22 +- .../library/rexml/attribute/clone_spec.rb | 17 +- .../library/rexml/attribute/element_spec.rb | 33 +- .../rexml/attribute/equal_value_spec.rb | 25 +- .../ruby/library/rexml/attribute/hash_spec.rb | 21 +- .../rexml/attribute/initialize_spec.rb | 45 +- .../library/rexml/attribute/inspect_spec.rb | 29 +- .../library/rexml/attribute/namespace_spec.rb | 39 +- .../library/rexml/attribute/node_type_spec.rb | 15 +- .../library/rexml/attribute/prefix_spec.rb | 25 +- .../library/rexml/attribute/remove_spec.rb | 31 +- .../ruby/library/rexml/attribute/to_s_spec.rb | 21 +- .../library/rexml/attribute/to_string_spec.rb | 21 +- .../library/rexml/attribute/value_spec.rb | 21 +- .../library/rexml/attribute/write_spec.rb | 35 +- .../library/rexml/attribute/xpath_spec.rb | 27 +- .../ruby/library/rexml/attributes/add_spec.rb | 11 +- .../library/rexml/attributes/append_spec.rb | 11 +- .../rexml/attributes/delete_all_spec.rb | 51 +- .../library/rexml/attributes/delete_spec.rb | 43 +- .../rexml/attributes/each_attribute_spec.rb | 33 +- .../library/rexml/attributes/each_spec.rb | 37 +- .../attributes/element_reference_spec.rb | 27 +- .../rexml/attributes/element_set_spec.rb | 39 +- .../rexml/attributes/get_attribute_ns_spec.rb | 23 +- .../rexml/attributes/get_attribute_spec.rb | 45 +- .../rexml/attributes/initialize_spec.rb | 27 +- .../library/rexml/attributes/length_spec.rb | 11 +- .../rexml/attributes/namespaces_spec.rb | 9 +- .../library/rexml/attributes/prefixes_spec.rb | 37 +- .../library/rexml/attributes/size_spec.rb | 11 +- .../library/rexml/attributes/to_a_spec.rb | 27 +- .../ruby/library/rexml/cdata/clone_spec.rb | 15 +- .../library/rexml/cdata/initialize_spec.rb | 37 +- .../ruby/library/rexml/cdata/to_s_spec.rb | 11 +- .../ruby/library/rexml/cdata/value_spec.rb | 11 +- .../rexml/document/add_element_spec.rb | 51 +- .../ruby/library/rexml/document/add_spec.rb | 89 +- .../ruby/library/rexml/document/clone_spec.rb | 33 +- .../library/rexml/document/doctype_spec.rb | 23 +- .../library/rexml/document/encoding_spec.rb | 33 +- .../rexml/document/expanded_name_spec.rb | 23 +- .../ruby/library/rexml/document/new_spec.rb | 55 +- .../library/rexml/document/node_type_spec.rb | 11 +- .../ruby/library/rexml/document/root_spec.rb | 17 +- .../rexml/document/stand_alone_spec.rb | 31 +- .../library/rexml/document/version_spec.rb | 21 +- .../ruby/library/rexml/document/write_spec.rb | 57 +- .../library/rexml/document/xml_decl_spec.rb | 23 +- .../rexml/element/add_attribute_spec.rb | 65 +- .../rexml/element/add_attributes_spec.rb | 35 +- .../library/rexml/element/add_element_spec.rb | 62 +- .../rexml/element/add_namespace_spec.rb | 35 +- .../library/rexml/element/add_text_spec.rb | 37 +- .../library/rexml/element/attribute_spec.rb | 27 +- .../library/rexml/element/attributes_spec.rb | 27 +- .../ruby/library/rexml/element/cdatas_spec.rb | 37 +- .../ruby/library/rexml/element/clone_spec.rb | 47 +- .../library/rexml/element/comments_spec.rb | 31 +- .../rexml/element/delete_attribute_spec.rb | 61 +- .../rexml/element/delete_element_spec.rb | 81 +- .../rexml/element/delete_namespace_spec.rb | 37 +- .../library/rexml/element/document_spec.rb | 23 +- .../each_element_with_attribute_spec.rb | 57 +- .../element/each_element_with_text_spec.rb | 49 +- .../rexml/element/element_reference_spec.rb | 29 +- .../library/rexml/element/get_text_spec.rb | 27 +- .../rexml/element/has_attributes_spec.rb | 25 +- .../rexml/element/has_elements_spec.rb | 27 +- .../library/rexml/element/has_text_spec.rb | 23 +- .../library/rexml/element/inspect_spec.rb | 41 +- .../rexml/element/instructions_spec.rb | 33 +- .../library/rexml/element/namespace_spec.rb | 41 +- .../library/rexml/element/namespaces_spec.rb | 51 +- .../ruby/library/rexml/element/new_spec.rb | 55 +- .../rexml/element/next_element_spec.rb | 31 +- .../library/rexml/element/node_type_spec.rb | 11 +- .../library/rexml/element/prefixes_spec.rb | 35 +- .../rexml/element/previous_element_spec.rb | 31 +- .../ruby/library/rexml/element/raw_spec.rb | 35 +- .../ruby/library/rexml/element/root_spec.rb | 43 +- .../ruby/library/rexml/element/text_spec.rb | 87 +- .../ruby/library/rexml/element/texts_spec.rb | 23 +- .../library/rexml/element/whitespace_spec.rb | 33 +- .../library/rexml/node/each_recursive_spec.rb | 35 +- .../rexml/node/find_first_recursive_spec.rb | 41 +- .../rexml/node/index_in_parent_spec.rb | 23 +- .../rexml/node/next_sibling_node_spec.rb | 33 +- .../ruby/library/rexml/node/parent_spec.rb | 31 +- .../rexml/node/previous_sibling_node_spec.rb | 33 +- .../library/rexml/shared/elements_to_a.rb | 2 +- .../ruby/library/rexml/text/append_spec.rb | 15 +- .../ruby/library/rexml/text/clone_spec.rb | 15 +- .../library/rexml/text/comparison_spec.rb | 39 +- .../ruby/library/rexml/text/empty_spec.rb | 17 +- .../library/rexml/text/indent_text_spec.rb | 35 +- .../ruby/library/rexml/text/inspect_spec.rb | 11 +- ruby/spec/ruby/library/rexml/text/new_spec.rb | 91 +- .../ruby/library/rexml/text/node_type_spec.rb | 11 +- .../ruby/library/rexml/text/normalize_spec.rb | 11 +- .../rexml/text/read_with_substitution_spec.rb | 17 +- .../spec/ruby/library/rexml/text/to_s_spec.rb | 25 +- .../library/rexml/text/unnormalize_spec.rb | 11 +- .../ruby/library/rexml/text/value_spec.rb | 55 +- .../spec/ruby/library/rexml/text/wrap_spec.rb | 29 +- .../text/write_with_substitution_spec.rb | 53 +- ruby/spec/ruby/library/ripper/lex_spec.rb | 23 + ruby/spec/ruby/library/ripper/sexp_spec.rb | 13 + .../gem/load_path_insert_index_spec.rb | 10 + .../securerandom/random_number_spec.rb | 2 +- .../ruby/library/set/case_compare_spec.rb | 12 +- .../ruby/library/set/case_equality_spec.rb | 6 +- .../library/set/compare_by_identity_spec.rb | 16 +- ruby/spec/ruby/library/set/comparison_spec.rb | 29 + .../library/set/enumerable/to_set_spec.rb | 10 +- ruby/spec/ruby/library/set/filter_spec.rb | 6 +- .../ruby/library/set/initialize_clone_spec.rb | 18 + ruby/spec/ruby/library/set/initialize_spec.rb | 25 + ruby/spec/ruby/library/set/join_spec.rb | 31 + .../ruby/library/set/pretty_print_spec.rb | 20 +- .../ruby/library/set/sortedset/add_spec.rb | 59 +- .../ruby/library/set/sortedset/append_spec.rb | 11 +- .../set/sortedset/case_equality_spec.rb | 7 +- .../library/set/sortedset/classify_spec.rb | 41 +- .../ruby/library/set/sortedset/clear_spec.rb | 25 +- .../library/set/sortedset/collect_spec.rb | 11 +- .../library/set/sortedset/constructor_spec.rb | 21 +- .../library/set/sortedset/delete_if_spec.rb | 57 +- .../ruby/library/set/sortedset/delete_spec.rb | 55 +- .../library/set/sortedset/difference_spec.rb | 11 +- .../ruby/library/set/sortedset/divide_spec.rb | 53 +- .../ruby/library/set/sortedset/each_spec.rb | 39 +- .../ruby/library/set/sortedset/empty_spec.rb | 15 +- .../ruby/library/set/sortedset/eql_spec.rb | 23 +- .../library/set/sortedset/equal_value_spec.rb | 19 +- .../library/set/sortedset/exclusion_spec.rb | 27 +- .../ruby/library/set/sortedset/filter_spec.rb | 7 +- .../set/sortedset/flatten_merge_spec.rb | 11 +- .../library/set/sortedset/flatten_spec.rb | 67 +- .../ruby/library/set/sortedset/hash_spec.rb | 19 +- .../library/set/sortedset/include_spec.rb | 11 +- .../library/set/sortedset/initialize_spec.rb | 49 +- .../library/set/sortedset/inspect_spec.rb | 15 +- .../set/sortedset/intersection_spec.rb | 17 +- .../library/set/sortedset/keep_if_spec.rb | 47 +- .../ruby/library/set/sortedset/length_spec.rb | 11 +- .../ruby/library/set/sortedset/map_spec.rb | 11 +- .../ruby/library/set/sortedset/member_spec.rb | 11 +- .../ruby/library/set/sortedset/merge_spec.rb | 29 +- .../ruby/library/set/sortedset/minus_spec.rb | 11 +- .../ruby/library/set/sortedset/plus_spec.rb | 11 +- .../set/sortedset/pretty_print_cycle_spec.rb | 15 +- .../set/sortedset/pretty_print_spec.rb | 23 +- .../set/sortedset/proper_subset_spec.rb | 51 +- .../set/sortedset/proper_superset_spec.rb | 51 +- .../ruby/library/set/sortedset/reject_spec.rb | 63 +- .../library/set/sortedset/replace_spec.rb | 25 +- .../ruby/library/set/sortedset/select_spec.rb | 11 +- .../ruby/library/set/sortedset/size_spec.rb | 11 +- .../library/set/sortedset/sortedset_spec.rb | 22 + .../ruby/library/set/sortedset/subset_spec.rb | 51 +- .../library/set/sortedset/subtract_spec.rb | 25 +- .../library/set/sortedset/superset_spec.rb | 51 +- .../ruby/library/set/sortedset/to_a_spec.rb | 25 +- .../ruby/library/set/sortedset/union_spec.rb | 17 +- ruby/spec/ruby/library/set/to_s_spec.rb | 12 +- .../socket/addrinfo/getnameinfo_spec.rb | 22 +- .../socket/addrinfo/initialize_spec.rb | 50 +- .../socket/addrinfo/ipv4_loopback_spec.rb | 8 +- .../socket/addrinfo/ipv4_multicast_spec.rb | 10 +- .../socket/addrinfo/ipv4_private_spec.rb | 12 +- .../socket/addrinfo/ipv6_linklocal_spec.rb | 12 +- .../socket/addrinfo/ipv6_mc_global_spec.rb | 16 +- .../socket/addrinfo/ipv6_mc_linklocal_spec.rb | 14 +- .../socket/addrinfo/ipv6_mc_nodelocal_spec.rb | 12 +- .../socket/addrinfo/ipv6_mc_orglocal_spec.rb | 12 +- .../socket/addrinfo/ipv6_mc_sitelocal_spec.rb | 12 +- .../socket/addrinfo/ipv6_multicast_spec.rb | 20 +- .../socket/addrinfo/ipv6_sitelocal_spec.rb | 12 +- .../socket/addrinfo/ipv6_unique_local_spec.rb | 12 +- .../socket/addrinfo/ipv6_unspecified_spec.rb | 6 +- .../socket/addrinfo/ipv6_v4compat_spec.rb | 10 +- .../socket/addrinfo/ipv6_v4mapped_spec.rb | 10 +- .../library/socket/addrinfo/listen_spec.rb | 2 +- .../socket/basicsocket/local_address_spec.rb | 10 + .../socket/basicsocket/read_nonblock_spec.rb | 64 +- .../socket/basicsocket/recv_nonblock_spec.rb | 21 + .../basicsocket/recvmsg_nonblock_spec.rb | 15 + .../socket/basicsocket/remote_address_spec.rb | 10 + .../library/socket/basicsocket/send_spec.rb | 8 + .../basicsocket/sendmsg_nonblock_spec.rb | 7 +- .../socket/basicsocket/write_nonblock_spec.rb | 62 +- .../socket/constants/constants_spec.rb | 2 +- .../ruby/library/socket/shared/address.rb | 249 + .../socket/socket/accept_nonblock_spec.rb | 3 + .../ruby/library/socket/socket/bind_spec.rb | 4 + .../socket/socket/gethostbyaddr_spec.rb | 22 +- .../socket/socket/gethostbyname_spec.rb | 16 +- .../ruby/library/socket/socket/listen_spec.rb | 6 +- .../socket/socket/tcp_server_sockets_spec.rb | 2 +- .../ruby/library/socket/socket/tcp_spec.rb | 2 +- .../socket/socket/udp_server_loop_spec.rb | 4 +- .../socket/socket/udp_server_sockets_spec.rb | 2 +- .../ruby/library/socket/socket/unix_spec.rb | 2 +- .../socket/socket/unpack_sockaddr_un_spec.rb | 2 +- .../library/socket/tcpserver/accept_spec.rb | 20 + .../socket/tcpsocket/gethostbyname_spec.rb | 16 +- .../socket/tcpsocket/initialize_spec.rb | 5 + .../ruby/library/socket/tcpsocket/new_spec.rb | 5 - .../socket/tcpsocket/recv_nonblock_spec.rb | 14 + .../library/socket/tcpsocket/shared/new.rb | 15 + .../library/socket/udpsocket/inspect_spec.rb | 14 +- .../udpsocket/recvfrom_nonblock_spec.rb | 7 + .../library/socket/unixsocket/open_spec.rb | 2 +- .../library/socket/unixsocket/shared/new.rb | 2 +- .../spec/ruby/library/stringio/append_spec.rb | 8 +- .../ruby/library/stringio/binmode_spec.rb | 14 + ruby/spec/ruby/library/stringio/bytes_spec.rb | 28 +- ruby/spec/ruby/library/stringio/chars_spec.rb | 28 +- .../ruby/library/stringio/codepoints_spec.rb | 16 +- .../ruby/library/stringio/each_char_spec.rb | 2 +- .../library/stringio/each_codepoint_spec.rb | 2 +- .../ruby/library/stringio/getpass_spec.rb | 11 + ruby/spec/ruby/library/stringio/gets_spec.rb | 5 +- .../ruby/library/stringio/initialize_spec.rb | 22 +- .../ruby/library/stringio/inspect_spec.rb | 19 + ruby/spec/ruby/library/stringio/lines_spec.rb | 56 +- ruby/spec/ruby/library/stringio/open_spec.rb | 4 +- ruby/spec/ruby/library/stringio/print_spec.rb | 10 +- .../spec/ruby/library/stringio/printf_spec.rb | 2 +- ruby/spec/ruby/library/stringio/puts_spec.rb | 15 +- .../ruby/library/stringio/readline_spec.rb | 5 +- .../ruby/library/stringio/readlines_spec.rb | 5 +- .../spec/ruby/library/stringio/reopen_spec.rb | 46 +- .../spec/ruby/library/stringio/shared/each.rb | 5 +- .../spec/ruby/library/stringio/shared/read.rb | 4 +- .../ruby/library/stringio/shared/write.rb | 8 +- .../ruby/library/stringio/ungetbyte_spec.rb | 38 +- .../ruby/library/stringscanner/append_spec.rb | 2 +- .../ruby/library/stringscanner/check_spec.rb | 11 + .../library/stringscanner/check_until_spec.rb | 6 + .../ruby/library/stringscanner/concat_spec.rb | 2 +- .../ruby/library/stringscanner/exist_spec.rb | 6 + .../stringscanner/matched_size_spec.rb | 21 +- .../library/stringscanner/scan_until_spec.rb | 6 + .../library/stringscanner/search_full_spec.rb | 6 + .../stringscanner/shared/matched_size.rb | 21 - .../ruby/library/stringscanner/size_spec.rb | 17 + .../library/stringscanner/skip_until_spec.rb | 6 + ruby/spec/ruby/library/syslog/close_spec.rb | 2 +- ruby/spec/ruby/library/syslog/ident_spec.rb | 2 +- ruby/spec/ruby/library/syslog/log_spec.rb | 8 +- ruby/spec/ruby/library/syslog/mask_spec.rb | 2 +- ruby/spec/ruby/library/syslog/shared/log.rb | 9 +- .../spec/ruby/library/timeout/timeout_spec.rb | 16 + .../ruby/library/weakref/fixtures/classes.rb | 6 +- .../library/weakref/weakref_alive_spec.rb | 2 +- .../win32ole/win32ole_param/input_spec.rb | 2 +- .../win32ole/win32ole_variable/value_spec.rb | 2 +- .../library/yaml/add_builtin_type_spec.rb | 2 - .../ruby/library/yaml/add_domain_type_spec.rb | 2 - .../library/yaml/add_private_type_spec.rb | 2 - .../ruby/library/yaml/add_ruby_type_spec.rb | 2 - .../ruby/library/yaml/detect_implicit_spec.rb | 2 - ruby/spec/ruby/library/yaml/dump_spec.rb | 7 +- ruby/spec/ruby/library/yaml/each_node_spec.rb | 2 - ruby/spec/ruby/library/yaml/emitter_spec.rb | 2 - .../spec/ruby/library/yaml/fixtures/common.rb | 6 - .../ruby/library/yaml/generic_parser_spec.rb | 2 - .../ruby/library/yaml/load_documents_spec.rb | 10 - ruby/spec/ruby/library/yaml/load_spec.rb | 135 +- .../ruby/library/yaml/object_maker_spec.rb | 2 - .../ruby/library/yaml/parse_documents_spec.rb | 2 - ruby/spec/ruby/library/yaml/parser_spec.rb | 2 - .../spec/ruby/library/yaml/quick_emit_spec.rb | 2 - .../ruby/library/yaml/read_type_class_spec.rb | 2 - ruby/spec/ruby/library/yaml/shared/load.rb | 136 + ruby/spec/ruby/library/yaml/tagurize_spec.rb | 11 - ruby/spec/ruby/library/yaml/transfer_spec.rb | 2 - .../ruby/library/yaml/try_implicit_spec.rb | 2 - .../ruby/library/yaml/unsafe_load_spec.rb | 9 + ruby/spec/ruby/library/zlib/adler32_spec.rb | 2 +- ruby/spec/ruby/library/zlib/crc32_spec.rb | 2 +- .../ruby/library/zlib/gzipfile/close_spec.rb | 2 +- .../ruby/library/zlib/gzipfile/closed_spec.rb | 4 +- .../zlib/zstream/flush_next_out_spec.rb | 2 +- ruby/spec/ruby/optional/capi/README | 9 +- ruby/spec/ruby/optional/capi/array_spec.rb | 46 +- .../ruby/optional/capi/basic_object_spec.rb | 24 + ruby/spec/ruby/optional/capi/bignum_spec.rb | 6 +- ruby/spec/ruby/optional/capi/binding_spec.rb | 19 + ruby/spec/ruby/optional/capi/class_spec.rb | 71 +- .../spec/ruby/optional/capi/constants_spec.rb | 105 +- ruby/spec/ruby/optional/capi/data_spec.rb | 7 + ruby/spec/ruby/optional/capi/debug_spec.rb | 66 + ruby/spec/ruby/optional/capi/encoding_spec.rb | 207 +- .../spec/ruby/optional/capi/exception_spec.rb | 89 + ruby/spec/ruby/optional/capi/ext/array_spec.c | 38 +- .../optional/capi/ext/basic_object_spec.c | 19 + .../spec/ruby/optional/capi/ext/bignum_spec.c | 4 +- .../ruby/optional/capi/ext/binding_spec.c | 19 + .../ruby/optional/capi/ext/boolean_spec.c | 2 +- .../capi/ext/class_id_under_autoload_spec.c | 8 + ruby/spec/ruby/optional/capi/ext/class_spec.c | 26 +- .../capi/ext/class_under_autoload_spec.c | 8 + .../ruby/optional/capi/ext/constants_spec.c | 383 +- ruby/spec/ruby/optional/capi/ext/data_spec.c | 14 +- ruby/spec/ruby/optional/capi/ext/debug_spec.c | 93 + .../ruby/optional/capi/ext/encoding_spec.c | 123 +- .../ruby/optional/capi/ext/exception_spec.c | 13 + ruby/spec/ruby/optional/capi/ext/fiber_spec.c | 69 + ruby/spec/ruby/optional/capi/ext/float_spec.c | 9 + ruby/spec/ruby/optional/capi/ext/gc_spec.c | 17 +- .../ruby/optional/capi/ext/globals_spec.c | 13 +- ruby/spec/ruby/optional/capi/ext/hash_spec.c | 17 + .../ruby/optional/capi/ext/integer_spec.c | 9 +- ruby/spec/ruby/optional/capi/ext/io_spec.c | 33 +- .../spec/ruby/optional/capi/ext/kernel_spec.c | 45 +- .../ruby/optional/capi/ext/language_spec.c | 42 + .../spec/ruby/optional/capi/ext/module_spec.c | 31 + .../capi/ext/module_under_autoload_spec.c | 8 + .../ruby/optional/capi/ext/numeric_spec.c | 7 +- .../spec/ruby/optional/capi/ext/object_spec.c | 84 +- ruby/spec/ruby/optional/capi/ext/proc_spec.c | 5 + .../spec/ruby/optional/capi/ext/rbasic_spec.c | 100 + .../spec/ruby/optional/capi/ext/regexp_spec.c | 20 +- ruby/spec/ruby/optional/capi/ext/rubyspec.h | 39 +- .../spec/ruby/optional/capi/ext/string_spec.c | 196 +- .../spec/ruby/optional/capi/ext/struct_spec.c | 4 - .../spec/ruby/optional/capi/ext/symbol_spec.c | 15 + .../spec/ruby/optional/capi/ext/thread_spec.c | 6 +- .../ruby/optional/capi/ext/tracepoint_spec.c | 49 + .../ruby/optional/capi/ext/typed_data_spec.c | 72 +- ruby/spec/ruby/optional/capi/ext/util_spec.c | 19 +- ruby/spec/ruby/optional/capi/fiber_spec.rb | 89 + .../spec/ruby/optional/capi/fixtures/class.rb | 3 + .../ruby/optional/capi/fixtures/module.rb | 4 + .../spec/ruby/optional/capi/fixtures/read.txt | 1 + ruby/spec/ruby/optional/capi/float_spec.rb | 13 + ruby/spec/ruby/optional/capi/gc_spec.rb | 26 + ruby/spec/ruby/optional/capi/globals_spec.rb | 29 +- ruby/spec/ruby/optional/capi/hash_spec.rb | 19 +- ruby/spec/ruby/optional/capi/integer_spec.rb | 15 + ruby/spec/ruby/optional/capi/io_spec.rb | 36 + ruby/spec/ruby/optional/capi/kernel_spec.rb | 147 +- ruby/spec/ruby/optional/capi/language_spec.rb | 37 + ruby/spec/ruby/optional/capi/module_spec.rb | 59 +- ruby/spec/ruby/optional/capi/numeric_spec.rb | 72 +- ruby/spec/ruby/optional/capi/object_spec.rb | 162 +- ruby/spec/ruby/optional/capi/proc_spec.rb | 24 +- ruby/spec/ruby/optional/capi/rbasic_spec.rb | 43 + ruby/spec/ruby/optional/capi/regexp_spec.rb | 43 +- ruby/spec/ruby/optional/capi/shared/rbasic.rb | 63 + ruby/spec/ruby/optional/capi/spec_helper.rb | 39 +- ruby/spec/ruby/optional/capi/string_spec.rb | 225 +- ruby/spec/ruby/optional/capi/struct_spec.rb | 6 +- ruby/spec/ruby/optional/capi/symbol_spec.rb | 39 + ruby/spec/ruby/optional/capi/thread_spec.rb | 42 +- ruby/spec/ruby/optional/capi/time_spec.rb | 84 +- .../ruby/optional/capi/tracepoint_spec.rb | 56 + .../ruby/optional/capi/typed_data_spec.rb | 28 + ruby/spec/ruby/optional/capi/util_spec.rb | 115 +- ruby/spec/ruby/security/cve_2010_1330_spec.rb | 2 - ruby/spec/ruby/security/cve_2013_4164_spec.rb | 4 - ruby/spec/ruby/security/cve_2014_8080_spec.rb | 50 +- .../spec/ruby/security/cve_2017_17742_spec.rb | 57 +- .../spec/ruby/security/cve_2018_16396_spec.rb | 4 - ruby/spec/ruby/security/cve_2018_8778_spec.rb | 2 - ruby/spec/ruby/security/cve_2018_8780_spec.rb | 20 +- ruby/spec/ruby/security/cve_2019_8321_spec.rb | 26 +- ruby/spec/ruby/security/cve_2019_8322_spec.rb | 24 +- ruby/spec/ruby/security/cve_2019_8323_spec.rb | 8 +- ruby/spec/ruby/security/cve_2019_8325_spec.rb | 6 +- .../spec/ruby/security/cve_2020_10663_spec.rb | 42 + ruby/spec/ruby/shared/enumerable/minmax.rb | 24 + ruby/spec/ruby/shared/enumerator/enum_for.rb | 7 + ruby/spec/ruby/shared/fiber/resume.rb | 21 - ruby/spec/ruby/shared/file/executable.rb | 2 +- ruby/spec/ruby/shared/file/identical.rb | 6 +- ruby/spec/ruby/shared/file/readable.rb | 5 +- ruby/spec/ruby/shared/file/world_readable.rb | 12 +- ruby/spec/ruby/shared/file/world_writable.rb | 12 +- ruby/spec/ruby/shared/file/writable.rb | 2 +- ruby/spec/ruby/shared/hash/key_error.rb | 28 +- ruby/spec/ruby/shared/io/putc.rb | 2 +- ruby/spec/ruby/shared/kernel/raise.rb | 90 +- ruby/spec/ruby/shared/process/exit.rb | 26 +- ruby/spec/ruby/shared/rational/Rational.rb | 54 +- .../arithmetic_exception_in_coerce.rb | 32 +- ruby/spec/ruby/shared/rational/coerce.rb | 5 + ruby/spec/ruby/shared/rational/comparison.rb | 30 +- ruby/spec/ruby/shared/rational/divmod.rb | 2 +- ruby/spec/ruby/shared/rational/exponent.rb | 36 +- ruby/spec/ruby/shared/string/end_with.rb | 54 + ruby/spec/ruby/shared/string/start_with.rb | 72 + ruby/spec/ruby/shared/string/times.rb | 26 +- .../ruby/shared/time/strftime_for_time.rb | 8 + ruby/sprintf.c | 42 +- ruby/squash.h | 244 - ruby/squash/cache.h | 68 - ruby/squash/common.h | 80 - ruby/squash/decompress.h | 42 - ruby/squash/dir.h | 94 - ruby/squash/dirent.h | 36 - ruby/squash/fdtable.h | 32 - ruby/squash/file.h | 78 - ruby/squash/fs.h | 132 - ruby/squash/hash.h | 63 - ruby/squash/mutex.h | 32 - ruby/squash/nonstd.h | 34 - ruby/squash/private.h | 35 - ruby/squash/squashfs_fs.h | 318 - ruby/squash/stack.h | 54 - ruby/squash/table.h | 41 - ruby/squash/traverse.h | 69 - ruby/squash/util.h | 41 - ruby/squash/windows.h | 107 - ruby/squash_cache.c | 99 - ruby/squash_decompress.c | 44 - ruby/squash_dir.c | 487 - ruby/squash_dirent.c | 215 - ruby/squash_extract.c | 265 - ruby/squash_fd.c | 241 - ruby/squash_file.c | 329 - ruby/squash_fs.c | 434 - ruby/squash_hash.c | 131 - ruby/squash_mutex.c | 49 - ruby/squash_nonstd-makedev.c | 35 - ruby/squash_nonstd-stat.c | 58 - ruby/squash_private.c | 47 - ruby/squash_readlink.c | 85 - ruby/squash_scandir.c | 66 - ruby/squash_stack.c | 130 - ruby/squash_stat.c | 82 - ruby/squash_table.c | 66 - ruby/squash_traverse.c | 322 - ruby/squash_util.c | 84 - ruby/st.c | 284 +- ruby/strftime.c | 31 +- ruby/string.c | 3480 +- ruby/struct.c | 792 +- ruby/symbol.c | 528 +- ruby/symbol.h | 8 +- ruby/template/Doxyfile.tmpl | 2509 +- ruby/template/GNUmakefile.in | 8 + ruby/template/Makefile.in | 181 +- ruby/template/builtin_binary.inc.tmpl | 30 + ruby/template/call_iseq_optimized.inc.tmpl | 68 + ruby/template/configure-ext.mk.tmpl | 8 +- ruby/template/encdb.h.tmpl | 21 +- ruby/template/exts.mk.tmpl | 17 +- ruby/template/fake.rb.in | 4 +- ruby/template/id.c.tmpl | 2 - ruby/template/prelude.c.tmpl | 69 +- ruby/template/ruby-gdb.in | 6 + ruby/template/ruby-lldb.in | 6 + ruby/template/ruby.pc.in | 16 +- ruby/template/sizes.c.tmpl | 2 +- ruby/template/transdb.h.tmpl | 4 +- ruby/test/-ext-/array/test_resize.rb | 6 + ruby/test/-ext-/array/test_to_ary_concat.rb | 20 + ruby/test/-ext-/bignum/test_big2str.rb | 10 +- ruby/test/-ext-/bignum/test_div.rb | 8 +- ruby/test/-ext-/bignum/test_mul.rb | 52 +- ruby/test/-ext-/bignum/test_pack.rb | 448 +- ruby/test/-ext-/bignum/test_str2big.rb | 12 +- .../-ext-/bug_reporter/test_bug_reporter.rb | 5 +- ruby/test/-ext-/debug/test_profile_frames.rb | 50 +- ruby/test/-ext-/float/test_nextafter.rb | 2 +- ruby/test/-ext-/funcall/test_passing_block.rb | 23 +- ruby/test/-ext-/gvl/test_last_thread.rb | 2 +- ruby/test/-ext-/gvl/test_ubf_async_safe.rb | 2 +- ruby/test/-ext-/integer/test_integer.rb | 10 +- ruby/test/-ext-/num2int/test_num2int.rb | 4 +- .../-ext-/postponed_job/test_postponed_job.rb | 7 + ruby/test/-ext-/rational/test_rat.rb | 44 +- ruby/test/-ext-/string/test_capacity.rb | 37 +- ruby/test/-ext-/string/test_cstr.rb | 8 +- ruby/test/-ext-/string/test_ellipsize.rb | 2 +- .../test/-ext-/string/test_enc_str_buf_cat.rb | 9 + ruby/test/-ext-/string/test_fstring.rb | 16 + ruby/test/-ext-/string/test_interned_str.rb | 12 + ruby/test/-ext-/string/test_normalize.rb | 8 +- ruby/test/-ext-/string/test_rb_str_dup.rb | 6 +- .../-ext-/symbol/test_inadvertent_creation.rb | 8 +- ruby/test/-ext-/test_notimplement.rb | 7 + ruby/test/-ext-/test_printf.rb | 4 +- ruby/test/-ext-/test_random.rb | 27 + ruby/test/-ext-/test_scan_args.rb | 121 +- .../test_thread_fd_close.rb | 2 +- ruby/test/-ext-/tracepoint/test_tracepoint.rb | 14 +- ruby/test/-ext-/wait/test_wait.rb | 36 + .../test_wait_for_single_fd.rb | 49 - ruby/test/-ext-/win32/test_console_attr.rb | 14 +- ruby/test/benchmark/test_benchmark.rb | 11 +- ruby/test/bigdecimal/helper.rb | 39 + ruby/test/bigdecimal/test_bigdecimal.rb | 440 +- ruby/test/bigdecimal/test_bigdecimal_util.rb | 60 +- ruby/test/bigdecimal/test_bigmath.rb | 2 +- ruby/test/bigdecimal/test_ractor.rb | 23 + ruby/test/bigdecimal/testbase.rb | 28 - ruby/test/cgi/test_cgi_cookie.rb | 5 + ruby/test/cgi/test_cgi_core.rb | 4 + ruby/test/cgi/test_cgi_util.rb | 50 +- ruby/test/coverage/test_coverage.rb | 180 + ruby/test/csv/helper.rb | 24 + ruby/test/csv/interface/test_read.rb | 94 + ruby/test/csv/interface/test_read_write.rb | 76 +- ruby/test/csv/interface/test_write.rb | 34 + ruby/test/csv/parse/test_convert.rb | 2 +- ruby/test/csv/parse/test_general.rb | 8 +- ruby/test/csv/parse/test_invalid.rb | 13 + ruby/test/csv/parse/test_skip_lines.rb | 13 + ruby/test/csv/parse/test_strip.rb | 34 + ruby/test/csv/test_encodings.rb | 22 + ruby/test/csv/test_row.rb | 3 + ruby/test/csv/test_table.rb | 4 +- ruby/test/csv/write/test_converters.rb | 8 +- ruby/test/csv/write/test_force_quotes.rb | 78 + ruby/test/csv/write/test_general.rb | 16 +- ruby/test/date/test_date.rb | 12 + ruby/test/date/test_date_marshal.rb | 7 + ruby/test/date/test_date_parse.rb | 71 + ruby/test/date/test_date_ractor.rb | 27 + ruby/test/date/test_date_strftime.rb | 2 +- ruby/test/dbm/test_dbm.rb | 634 - .../core_ext/test_name_error_extension.rb | 7 +- ruby/test/did_you_mean/fixtures/book.rb | 2 +- ruby/test/did_you_mean/helper.rb | 4 + .../spell_checking/test_class_name_check.rb | 4 +- .../spell_checking/test_method_name_check.rb | 7 + .../test_pattern_key_name_check.rb | 20 + .../spell_checking/test_require_path_check.rb | 32 + .../test_uncorrectable_name_check.rb | 2 +- ruby/test/did_you_mean/test_spell_checker.rb | 1 + .../did_you_mean/test_tree_spell_checker.rb | 203 +- .../did_you_mean/test_verbose_formatter.rb | 21 - .../did_you_mean/tree_spell/human_typo.rb | 34 +- .../tree_spell/test_change_word.rb | 2 +- ruby/test/digest/test_digest.rb | 8 +- ruby/test/digest/test_ractor.rb | 101 + ruby/test/drb/drbtest.rb | 6 +- ruby/test/drb/test_drb.rb | 8 +- ruby/test/drb/test_drbssl.rb | 3 +- ruby/test/drb/ut_drb.rb | 2 +- ruby/test/erb/test_erb.rb | 12 +- ruby/test/erb/test_erb_command.rb | 14 +- .../error_highlight/test_error_highlight.rb | 1197 + ruby/test/etc/test_etc.rb | 28 +- ruby/test/excludes/TestArray.rb | 1 + ruby/test/fiber/http.rb | 54 + ruby/test/fiber/scheduler.rb | 358 + ruby/test/fiber/test_address_resolve.rb | 278 + ruby/test/fiber/test_backtrace.rb | 22 + ruby/test/fiber/test_enumerator.rb | 51 + ruby/test/fiber/test_io.rb | 175 + ruby/test/fiber/test_io_buffer.rb | 125 + ruby/test/fiber/test_mutex.rb | 220 + ruby/test/fiber/test_process.rb | 51 + ruby/test/fiber/test_ractor.rb | 23 + ruby/test/fiber/test_scheduler.rb | 107 + ruby/test/fiber/test_sleep.rb | 71 + ruby/test/fiber/test_thread.rb | 108 + ruby/test/fiber/test_timeout.rb | 51 + ruby/test/fiddle/helper.rb | 56 +- ruby/test/fiddle/test_c_struct_builder.rb | 69 + ruby/test/fiddle/test_c_struct_entry.rb | 130 +- ruby/test/fiddle/test_c_union_entity.rb | 15 +- ruby/test/fiddle/test_closure.rb | 25 + ruby/test/fiddle/test_cparser.rb | 169 +- ruby/test/fiddle/test_func.rb | 76 +- ruby/test/fiddle/test_function.rb | 118 +- ruby/test/fiddle/test_handle.rb | 35 +- ruby/test/fiddle/test_import.rb | 372 +- ruby/test/fiddle/test_memory_view.rb | 143 + ruby/test/fiddle/test_pinned.rb | 28 + ruby/test/fiddle/test_pointer.rb | 116 +- ruby/test/fileutils/test_fileutils.rb | 57 +- .../fake_sorted_set_gem/sorted_set.rb | 9 + ruby/test/gdbm/test_gdbm.rb | 734 - ruby/test/io/console/test_io_console.rb | 79 +- ruby/test/io/wait/test_io_wait_uncommon.rb | 36 +- ruby/test/io/wait/test_ractor.rb | 18 + ruby/test/irb/test_cmd.rb | 558 + ruby/test/irb/test_color.rb | 122 +- ruby/test/irb/test_color_printer.rb | 68 + ruby/test/irb/test_completion.rb | 73 +- ruby/test/irb/test_context.rb | 390 +- ruby/test/irb/test_history.rb | 211 + ruby/test/irb/test_init.rb | 57 +- .../irb/test_raise_no_backtrace_exception.rb | 38 + ruby/test/irb/test_ruby_lex.rb | 503 +- ruby/test/irb/test_workspace.rb | 28 +- ruby/test/irb/yamatanooroti/test_rendering.rb | 228 + ruby/test/json/fixtures/fail29.json | 1 + ruby/test/json/fixtures/fail30.json | 1 + ruby/test/json/fixtures/fail31.json | 1 + ruby/test/json/fixtures/fail32.json | 1 + ruby/test/json/json_addition_test.rb | 4 - ruby/test/json/json_common_interface_test.rb | 43 + ruby/test/json/json_fixtures_test.rb | 10 +- ruby/test/json/json_generator_test.rb | 54 +- ruby/test/json/json_parser_test.rb | 25 + ruby/test/json/ractor_test.rb | 30 + ruby/test/json/test_helper.rb | 6 +- ruby/test/lib/jit_support.rb | 44 +- ruby/test/logger/helper.rb | 13 - ruby/test/logger/test_formatter.rb | 35 + ruby/test/logger/test_logdevice.rb | 4 +- ruby/test/logger/test_logger.rb | 20 +- ruby/test/logger/test_logperiod.rb | 2 +- ruby/test/logger/test_severity.rb | 2 +- ruby/test/matrix/test_matrix.rb | 795 - ruby/test/matrix/test_vector.rb | 335 - ruby/test/misc/test_ruby_mode.rb | 183 - ruby/test/mkmf/test_egrep_cpp.rb | 15 + ruby/test/mkmf/test_install.rb | 30 + ruby/test/mkmf/test_libs.rb | 9 +- ruby/test/mkmf/test_mkmf.rb | 15 + ruby/test/monitor/test_monitor.rb | 47 +- ruby/test/net/ftp/test_buffered_socket.rb | 48 - ruby/test/net/ftp/test_ftp.rb | 2570 - ruby/test/net/ftp/test_mlsx_entry.rb | 98 - ruby/test/net/http/test_http.rb | 91 +- ruby/test/net/http/test_http_request.rb | 6 +- ruby/test/net/http/test_httpresponse.rb | 4 + ruby/test/net/http/test_https.rb | 119 +- ruby/test/net/http/utils.rb | 6 +- ruby/test/net/imap/test_imap.rb | 794 - .../net/imap/test_imap_response_parser.rb | 311 - ruby/test/net/pop/test_pop.rb | 166 - ruby/test/net/smtp/test_response.rb | 100 - ruby/test/net/smtp/test_smtp.rb | 200 - ruby/test/net/smtp/test_ssl_socket.rb | 97 - ruby/test/objspace/test_objspace.rb | 147 +- ruby/test/open-uri/test_open-uri.rb | 264 +- .../openssl/fixtures/pkey/certificate.der | Bin 0 -> 1325 bytes ruby/test/openssl/fixtures/pkey/empty.der | 0 ruby/test/openssl/fixtures/pkey/empty.pem | 0 ruby/test/openssl/fixtures/pkey/fullchain.pem | 56 + ruby/test/openssl/fixtures/pkey/garbage.txt | 1 + ruby/test/openssl/test_asn1.rb | 53 +- ruby/test/openssl/test_bn.rb | 124 +- ruby/test/openssl/test_buffering.rb | 11 +- ruby/test/openssl/test_cipher.rb | 84 +- ruby/test/openssl/test_config.rb | 178 +- ruby/test/openssl/test_digest.rb | 64 +- ruby/test/openssl/test_engine.rb | 4 +- ruby/test/openssl/test_fips.rb | 2 +- ruby/test/openssl/test_hmac.rb | 26 +- ruby/test/openssl/test_kdf.rb | 2 +- ruby/test/openssl/test_ns_spki.rb | 6 +- ruby/test/openssl/test_ocsp.rb | 44 +- ruby/test/openssl/test_ossl.rb | 65 + ruby/test/openssl/test_pair.rb | 31 +- ruby/test/openssl/test_pkcs12.rb | 299 +- ruby/test/openssl/test_pkcs7.rb | 42 +- ruby/test/openssl/test_pkey.rb | 172 + ruby/test/openssl/test_pkey_dh.rb | 107 +- ruby/test/openssl/test_pkey_dsa.rb | 86 +- ruby/test/openssl/test_pkey_ec.rb | 195 +- ruby/test/openssl/test_pkey_rsa.rb | 374 +- ruby/test/openssl/test_random.rb | 2 +- ruby/test/openssl/test_ssl.rb | 676 +- ruby/test/openssl/test_ssl_session.rb | 11 +- ruby/test/openssl/test_ts.rb | 680 + ruby/test/openssl/test_x509attr.rb | 12 +- ruby/test/openssl/test_x509cert.rb | 139 +- ruby/test/openssl/test_x509crl.rb | 45 +- ruby/test/openssl/test_x509ext.rb | 15 +- ruby/test/openssl/test_x509name.rb | 36 +- ruby/test/openssl/test_x509req.rb | 33 +- ruby/test/openssl/test_x509store.rb | 414 +- ruby/test/openssl/ut_eof.rb | 14 +- ruby/test/openssl/utils.rb | 138 +- ruby/test/optparse/test_acceptable.rb | 1 - ruby/test/optparse/test_did_you_mean.rb | 16 +- ruby/test/optparse/test_optparse.rb | 30 + ruby/test/ostruct/test_ostruct.rb | 194 +- ruby/test/pathname/test_pathname.rb | 128 +- ruby/test/pathname/test_ractor.rb | 22 + ruby/test/psych/helper.rb | 40 +- ruby/test/psych/test_alias_and_anchor.rb | 12 +- ruby/test/psych/test_array.rb | 6 +- ruby/test/psych/test_class.rb | 4 +- ruby/test/psych/test_coder.rb | 135 +- ruby/test/psych/test_date_time.rb | 4 +- ruby/test/psych/test_deprecated.rb | 4 +- ruby/test/psych/test_document.rb | 2 +- ruby/test/psych/test_emitter.rb | 10 +- ruby/test/psych/test_encoding.rb | 4 +- ruby/test/psych/test_exception.rb | 61 +- ruby/test/psych/test_hash.rb | 18 +- ruby/test/psych/test_marshalable.rb | 12 +- ruby/test/psych/test_merge_keys.rb | 34 +- ruby/test/psych/test_nil.rb | 4 +- ruby/test/psych/test_numeric.rb | 1 + ruby/test/psych/test_object.rb | 4 +- ruby/test/psych/test_object_references.rb | 12 +- ruby/test/psych/test_omap.rb | 4 +- ruby/test/psych/test_parser.rb | 16 +- ruby/test/psych/test_psych.rb | 181 +- ruby/test/psych/test_ractor.rb | 50 + ruby/test/psych/test_safe_load.rb | 64 +- ruby/test/psych/test_scalar_scanner.rb | 50 +- ruby/test/psych/test_serialize_subclasses.rb | 4 +- ruby/test/psych/test_set.rb | 6 +- ruby/test/psych/test_string.rb | 27 +- ruby/test/psych/test_struct.rb | 6 +- ruby/test/psych/test_yaml.rb | 39 +- ruby/test/psych/test_yaml_special_cases.rb | 6 +- ruby/test/psych/test_yamlstore.rb | 47 +- ruby/test/psych/visitors/test_to_ruby.rb | 5 +- ruby/test/psych/visitors/test_yaml_tree.rb | 13 +- ruby/test/racc/assets/ifelse.y | 14 + ruby/test/racc/assets/mof.y | 6 +- ruby/test/racc/case.rb | 110 + ruby/test/racc/helper.rb | 115 - ruby/test/racc/regress/cadenza | 190 +- ruby/test/racc/regress/cast | 1552 +- ruby/test/racc/regress/csspool | 396 +- ruby/test/racc/regress/edtf | 446 +- ruby/test/racc/regress/huia | 675 +- ruby/test/racc/regress/journey | 2 +- ruby/test/racc/regress/liquor | 218 +- ruby/test/racc/regress/machete | 48 +- ruby/test/racc/regress/mediacloth | 454 +- ruby/test/racc/regress/mof | 192 +- ruby/test/racc/regress/namae | 70 +- ruby/test/racc/regress/nasl | 1292 +- ruby/test/racc/regress/nokogiri-css | 124 +- ruby/test/racc/regress/opal | 7650 +- ruby/test/racc/regress/php_serialization | 36 +- ruby/test/racc/regress/riml | 2238 +- ruby/test/racc/regress/ruby18 | 7408 +- ruby/test/racc/regress/ruby22 | 7892 +- ruby/test/racc/regress/tp_plus | 430 +- ruby/test/racc/regress/twowaysql | 42 +- ruby/test/racc/test_chk_y.rb | 2 +- ruby/test/racc/test_grammar_file_parser.rb | 2 +- ruby/test/racc/test_racc_command.rb | 19 +- ruby/test/racc/test_scan_y.rb | 2 +- ruby/test/rdoc/support/test_case.rb | 29 +- ruby/test/rdoc/test_rdoc_any_method.rb | 48 + ruby/test/rdoc/test_rdoc_class_module.rb | 8 +- ruby/test/rdoc/test_rdoc_context.rb | 2 +- ruby/test/rdoc/test_rdoc_context_section.rb | 8 - ruby/test/rdoc/test_rdoc_cross_reference.rb | 11 +- ruby/test/rdoc/test_rdoc_extend.rb | 8 +- .../test/rdoc/test_rdoc_generator_darkfish.rb | 24 +- .../rdoc/test_rdoc_generator_json_index.rb | 2 +- ruby/test/rdoc/test_rdoc_include.rb | 11 +- ruby/test/rdoc/test_rdoc_markdown.rb | 61 +- .../test_rdoc_markup_attribute_manager.rb | 25 +- ruby/test/rdoc/test_rdoc_markup_to_html.rb | 50 + .../rdoc/test_rdoc_markup_to_html_crossref.rb | 21 + .../test/rdoc/test_rdoc_markup_to_markdown.rb | 4 +- ruby/test/rdoc/test_rdoc_normal_class.rb | 4 +- ruby/test/rdoc/test_rdoc_options.rb | 79 +- ruby/test/rdoc/test_rdoc_parser_c.rb | 66 + ruby/test/rdoc/test_rdoc_parser_changelog.rb | 169 + ruby/test/rdoc/test_rdoc_parser_ruby.rb | 48 + ruby/test/rdoc/test_rdoc_rdoc.rb | 63 +- ruby/test/rdoc/test_rdoc_ri_driver.rb | 52 +- ruby/test/rdoc/test_rdoc_ri_paths.rb | 10 +- ruby/test/rdoc/test_rdoc_rubygems_hook.rb | 81 +- ruby/test/rdoc/test_rdoc_servlet.rb | 12 +- ruby/test/rdoc/test_rdoc_store.rb | 21 +- ruby/test/rdoc/test_rdoc_task.rb | 4 +- ruby/test/rdoc/test_rdoc_text.rb | 10 + ruby/test/rdoc/test_rdoc_top_level.rb | 7 +- ruby/test/rdoc/xref_data.rb | 17 + ruby/test/rdoc/xref_test_case.rb | 8 + ruby/test/readline/helper.rb | 5 + ruby/test/readline/test_readline.rb | 172 +- ruby/test/readline/test_readline_history.rb | 7 +- ruby/test/reline/helper.rb | 49 +- ruby/test/reline/test_config.rb | 171 + ruby/test/reline/test_history.rb | 31 +- ruby/test/reline/test_key_actor_emacs.rb | 462 +- ruby/test/reline/test_key_actor_vi.rb | 293 +- ruby/test/reline/test_key_stroke.rb | 49 +- ruby/test/reline/test_kill_ring.rb | 12 + ruby/test/reline/test_macro.rb | 4 +- ruby/test/reline/test_reline.rb | 193 +- ruby/test/reline/test_reline_key.rb | 53 + ruby/test/reline/test_string_processing.rb | 60 +- ruby/test/reline/test_terminfo.rb | 32 + ruby/test/reline/test_unicode.rb | 25 + ruby/test/reline/test_within_pipe.rb | 30 +- .../reline/windows/test_key_event_record.rb | 41 + ruby/test/reline/yamatanooroti/multiline_repl | 211 + .../yamatanooroti/termination_checker.rb | 30 + .../reline/yamatanooroti/test_rendering.rb | 1234 +- ruby/test/resolv/test_addr.rb | 22 + ruby/test/resolv/test_dns.rb | 145 +- ruby/test/rexml/data/LostineRiver.kml.gz | Bin 50154 -> 0 bytes ruby/test/rexml/data/ProductionSupport.xml | 29 - ruby/test/rexml/data/axis.xml | 25 - ruby/test/rexml/data/bad.xml | 5 - ruby/test/rexml/data/basic.xml | 11 - ruby/test/rexml/data/basicupdate.xml | 47 - ruby/test/rexml/data/broken.rss | 20 - ruby/test/rexml/data/contents.xml | 70 - ruby/test/rexml/data/dash.xml | 12 - ruby/test/rexml/data/defaultNamespace.xml | 6 - ruby/test/rexml/data/doctype_test.xml | 34 - ruby/test/rexml/data/documentation.xml | 542 - ruby/test/rexml/data/euc.xml | 296 - ruby/test/rexml/data/evaluate.xml | 28 - ruby/test/rexml/data/fibo.xml | 29 - ruby/test/rexml/data/foo.xml | 10 - ruby/test/rexml/data/google.2.xml | 156 - ruby/test/rexml/data/id.xml | 21 - ruby/test/rexml/data/iso8859-1.xml | 4 - ruby/test/rexml/data/jaxen24.xml | 2 - ruby/test/rexml/data/jaxen3.xml | 15 - ruby/test/rexml/data/lang.xml | 11 - ruby/test/rexml/data/lang0.xml | 18 - ruby/test/rexml/data/message.xml | 27 - ruby/test/rexml/data/moreover.xml | 244 - ruby/test/rexml/data/much_ado.xml | 6850 - ruby/test/rexml/data/namespaces.xml | 18 - ruby/test/rexml/data/nitf.xml | 67 - ruby/test/rexml/data/numbers.xml | 18 - .../test/rexml/data/ofbiz-issues-full-177.xml | 13971 - ruby/test/rexml/data/pi.xml | 13 - ruby/test/rexml/data/pi2.xml | 6 - ruby/test/rexml/data/project.xml | 1 - ruby/test/rexml/data/simple.xml | 2 - ruby/test/rexml/data/stream_accents.xml | 4 - ruby/test/rexml/data/t63-1.xml | Bin 161690 -> 0 bytes ruby/test/rexml/data/t63-2.svg | 2828 - ruby/test/rexml/data/t75.xml | 31 - ruby/test/rexml/data/test/tests.xml | 683 - ruby/test/rexml/data/test/tests.xsl | 369 - ruby/test/rexml/data/testNamespaces.xml | 22 - ruby/test/rexml/data/testsrc.xml | 64 - ruby/test/rexml/data/text.xml | 10 - ruby/test/rexml/data/ticket_61.xml | 4 - ruby/test/rexml/data/ticket_68.xml | 590 - ruby/test/rexml/data/tutorial.xml | 678 - ruby/test/rexml/data/underscore.xml | 6 - ruby/test/rexml/data/utf16.xml | Bin 207464 -> 0 bytes ruby/test/rexml/data/web.xml | 42 - ruby/test/rexml/data/web2.xml | 7 - ruby/test/rexml/data/working.rss | 202 - ruby/test/rexml/data/xmlfile-bug.xml | 15 - ruby/test/rexml/data/xp.tst | 27 - ruby/test/rexml/data/yahoo.xml | 80 - ruby/test/rexml/formatter/test_default.rb | 19 - ruby/test/rexml/functions/test_base.rb | 261 - ruby/test/rexml/functions/test_boolean.rb | 75 - ruby/test/rexml/functions/test_local_name.rb | 44 - ruby/test/rexml/functions/test_number.rb | 38 - ruby/test/rexml/listener.rb | 51 - .../parse/test_document_type_declaration.rb | 50 - ruby/test/rexml/parse/test_element.rb | 51 - .../rexml/parse/test_notation_declaration.rb | 100 - .../parse/test_processing_instruction.rb | 25 - ruby/test/rexml/parser/test_sax2.rb | 203 - ruby/test/rexml/parser/test_stream.rb | 32 - ruby/test/rexml/parser/test_tree.rb | 43 - ruby/test/rexml/parser/test_ultra_light.rb | 70 - ruby/test/rexml/rexml_test_utils.rb | 10 - ruby/test/rexml/test_attribute.rb | 14 - ruby/test/rexml/test_attributes.rb | 223 - ruby/test/rexml/test_attributes_mixin.rb | 32 - ruby/test/rexml/test_changing_encoding.rb | 45 - ruby/test/rexml/test_comment.rb | 26 - ruby/test/rexml/test_contrib.rb | 585 - ruby/test/rexml/test_core.rb | 1517 - ruby/test/rexml/test_doctype.rb | 157 - ruby/test/rexml/test_document.rb | 416 - ruby/test/rexml/test_element.rb | 18 - ruby/test/rexml/test_elements.rb | 119 - ruby/test/rexml/test_encoding.rb | 108 - ruby/test/rexml/test_entity.rb | 206 - ruby/test/rexml/test_instruction.rb | 14 - ruby/test/rexml/test_jaxen.rb | 131 - ruby/test/rexml/test_light.rb | 107 - ruby/test/rexml/test_lightparser.rb | 16 - ruby/test/rexml/test_listener.rb | 131 - ruby/test/rexml/test_martin_fowler.rb | 40 - ruby/test/rexml/test_namespace.rb | 41 - ruby/test/rexml/test_order.rb | 110 - ruby/test/rexml/test_preceding_sibling.rb | 41 - ruby/test/rexml/test_pullparser.rb | 103 - ruby/test/rexml/test_rexml_issuezilla.rb | 19 - ruby/test/rexml/test_sax.rb | 287 - ruby/test/rexml/test_stream.rb | 130 - ruby/test/rexml/test_text.rb | 75 - ruby/test/rexml/test_ticket_80.rb | 59 - ruby/test/rexml/test_validation_rng.rb | 793 - ruby/test/rexml/test_xml_declaration.rb | 48 - ruby/test/rexml/xpath/test_attribute.rb | 38 - .../xpath/test_axis_preceding_sibling.rb | 40 - ruby/test/rexml/xpath/test_base.rb | 1125 - ruby/test/rexml/xpath/test_compare.rb | 256 - ruby/test/rexml/xpath/test_node.rb | 43 - ruby/test/rexml/xpath/test_predicate.rb | 83 - ruby/test/rexml/xpath/test_text.rb | 77 - ruby/test/rinda/test_rinda.rb | 16 +- ruby/test/ripper/dummyparser.rb | 6 +- ruby/test/ripper/test_lexer.rb | 90 + ruby/test/ripper/test_parser_events.rb | 135 +- ruby/test/ripper/test_ripper.rb | 9 + ruby/test/ripper/test_scanner_events.rb | 35 +- ruby/test/ripper/test_sexp.rb | 64 + ruby/test/rss/dot.png | Bin 111 -> 0 bytes ruby/test/rss/rss-assertions.rb | 2120 - ruby/test/rss/rss-testcase.rb | 479 - ruby/test/rss/test_1.0.rb | 308 - ruby/test/rss/test_2.0.rb | 412 - ruby/test/rss/test_accessor.rb | 104 - ruby/test/rss/test_atom.rb | 684 - ruby/test/rss/test_content.rb | 105 - ruby/test/rss/test_dublincore.rb | 270 - ruby/test/rss/test_image.rb | 215 - ruby/test/rss/test_inherit.rb | 41 - ruby/test/rss/test_itunes.rb | 356 - ruby/test/rss/test_maker_0.9.rb | 477 - ruby/test/rss/test_maker_1.0.rb | 519 - ruby/test/rss/test_maker_2.0.rb | 758 - ruby/test/rss/test_maker_atom_entry.rb | 394 - ruby/test/rss/test_maker_atom_feed.rb | 455 - ruby/test/rss/test_maker_content.rb | 48 - ruby/test/rss/test_maker_dc.rb | 150 - ruby/test/rss/test_maker_image.rb | 63 - ruby/test/rss/test_maker_itunes.rb | 487 - ruby/test/rss/test_maker_slash.rb | 38 - ruby/test/rss/test_maker_sy.rb | 45 - ruby/test/rss/test_maker_taxo.rb | 82 - ruby/test/rss/test_maker_trackback.rb | 42 - ruby/test/rss/test_maker_xml-stylesheet.rb | 84 - ruby/test/rss/test_parser.rb | 121 - ruby/test/rss/test_parser_1.0.rb | 529 - ruby/test/rss/test_parser_2.0.rb | 123 - ruby/test/rss/test_parser_atom_entry.rb | 164 - ruby/test/rss/test_parser_atom_feed.rb | 277 - ruby/test/rss/test_setup_maker_0.9.rb | 247 - ruby/test/rss/test_setup_maker_1.0.rb | 551 - ruby/test/rss/test_setup_maker_2.0.rb | 309 - ruby/test/rss/test_setup_maker_atom_entry.rb | 410 - ruby/test/rss/test_setup_maker_atom_feed.rb | 446 - ruby/test/rss/test_setup_maker_itunes.rb | 144 - ruby/test/rss/test_setup_maker_slash.rb | 39 - ruby/test/rss/test_slash.rb | 65 - ruby/test/rss/test_syndication.rb | 126 - ruby/test/rss/test_taxonomy.rb | 173 - ruby/test/rss/test_to_s.rb | 701 - ruby/test/rss/test_trackback.rb | 136 - ruby/test/rss/test_xml-stylesheet.rb | 109 - ruby/test/ruby/enc/test_emoji_breaks.rb | 57 +- ruby/test/ruby/enc/test_regex_casefold.rb | 2 +- ruby/test/ruby/marshaltestlib.rb | 2 +- ruby/test/ruby/test_alias.rb | 55 + ruby/test/ruby/test_argf.rb | 116 +- ruby/test/ruby/test_arithmetic_sequence.rb | 18 +- ruby/test/ruby/test_array.rb | 420 +- ruby/test/ruby/test_assignment.rb | 58 + ruby/test/ruby/test_ast.rb | 227 +- ruby/test/ruby/test_autoload.rb | 51 +- ruby/test/ruby/test_backtrace.rb | 56 + ruby/test/ruby/test_basicinstructions.rb | 5 +- ruby/test/ruby/test_bignum.rb | 97 +- ruby/test/ruby/test_call.rb | 9 + ruby/test/ruby/test_case.rb | 12 + ruby/test/ruby/test_class.rb | 103 +- ruby/test/ruby/test_complex.rb | 5 + ruby/test/ruby/test_const.rb | 28 +- ruby/test/ruby/test_defined.rb | 161 +- ruby/test/ruby/test_dir.rb | 235 +- ruby/test/ruby/test_dir_m17n.rb | 53 +- ruby/test/ruby/test_econv.rb | 19 +- ruby/test/ruby/test_encoding.rb | 33 +- ruby/test/ruby/test_enum.rb | 184 +- ruby/test/ruby/test_enumerator.rb | 38 +- ruby/test/ruby/test_env.rb | 979 +- ruby/test/ruby/test_eval.rb | 83 +- ruby/test/ruby/test_exception.rb | 514 +- ruby/test/ruby/test_fiber.rb | 177 +- ruby/test/ruby/test_file_exhaustive.rb | 117 +- ruby/test/ruby/test_fixnum.rb | 1 - ruby/test/ruby/test_float.rb | 36 +- ruby/test/ruby/test_frozen_error.rb | 57 + ruby/test/ruby/test_gc.rb | 87 +- ruby/test/ruby/test_gc_compact.rb | 131 +- ruby/test/ruby/test_hash.rb | 397 +- ruby/test/ruby/test_inlinecache.rb | 110 + ruby/test/ruby/test_insns_leaf.rb | 46 + ruby/test/ruby/test_integer.rb | 45 + ruby/test/ruby/test_io.rb | 248 +- ruby/test/ruby/test_io_buffer.rb | 330 + ruby/test/ruby/test_io_m17n.rb | 12 +- ruby/test/ruby/test_iseq.rb | 208 +- ruby/test/ruby/test_iterator.rb | 3 +- ruby/test/ruby/test_jit.rb | 247 +- ruby/test/ruby/test_jit_debug.rb | 17 + ruby/test/ruby/test_keyword.rb | 2235 +- ruby/test/ruby/test_lambda.rb | 109 + ruby/test/ruby/test_lazy_enumerator.rb | 8 + ruby/test/ruby/test_literal.rb | 63 +- ruby/test/ruby/test_m17n.rb | 14 +- ruby/test/ruby/test_m17n_comb.rb | 25 +- ruby/test/ruby/test_marshal.rb | 190 +- ruby/test/ruby/test_math.rb | 54 +- ruby/test/ruby/test_memory_view.rb | 341 + ruby/test/ruby/test_method.rb | 195 +- ruby/test/ruby/test_method_cache.rb | 76 + ruby/test/ruby/test_module.rb | 831 +- ruby/test/ruby/test_name_error.rb | 156 + ruby/test/ruby/test_nomethod_error.rb | 109 + ruby/test/ruby/test_notimp.rb | 85 - ruby/test/ruby/test_numeric.rb | 96 +- ruby/test/ruby/test_object.rb | 54 +- ruby/test/ruby/test_objectspace.rb | 53 +- ruby/test/ruby/test_optimization.rb | 96 +- ruby/test/ruby/test_pack.rb | 38 +- ruby/test/ruby/test_parse.rb | 211 +- ruby/test/ruby/test_pattern_matching.rb | 383 +- ruby/test/ruby/test_primitive.rb | 78 +- ruby/test/ruby/test_proc.rb | 313 +- ruby/test/ruby/test_process.rb | 213 +- ruby/test/ruby/test_rand.rb | 353 +- ruby/test/ruby/test_random_formatter.rb | 123 + ruby/test/ruby/test_range.rb | 20 +- ruby/test/ruby/test_rational.rb | 34 + ruby/test/ruby/test_refinement.rb | 298 +- ruby/test/ruby/test_regexp.rb | 189 +- ruby/test/ruby/test_require.rb | 125 +- ruby/test/ruby/test_require_lib.rb | 3 +- ruby/test/ruby/test_rubyoptions.rb | 119 +- ruby/test/ruby/test_rubyvm.rb | 57 +- ruby/test/ruby/test_rubyvm_jit.rb | 91 + ruby/test/ruby/test_rubyvm_mjit.rb | 91 - ruby/test/ruby/test_settracefunc.rb | 386 +- ruby/test/ruby/test_sprintf.rb | 15 - ruby/test/ruby/test_stack.rb | 82 + ruby/test/ruby/test_string.rb | 202 +- ruby/test/ruby/test_struct.rb | 94 +- ruby/test/ruby/test_super.rb | 114 + ruby/test/ruby/test_symbol.rb | 39 +- ruby/test/ruby/test_syntax.rb | 354 +- ruby/test/ruby/test_thread.rb | 72 +- ruby/test/ruby/test_thread_cv.rb | 63 +- ruby/test/ruby/test_thread_queue.rb | 103 +- ruby/test/ruby/test_time.rb | 105 +- ruby/test/ruby/test_time_tz.rb | 33 +- ruby/test/ruby/test_transcode.rb | 50 +- ruby/test/ruby/test_undef.rb | 16 + ruby/test/ruby/test_variable.rb | 77 +- ruby/test/ruby/test_vm_dump.rb | 2 +- ruby/test/ruby/test_weakmap.rb | 9 + ruby/test/ruby/test_yjit.rb | 687 + ruby/test/rubygems/bogussources.rb | 9 - .../null-required-ruby-version.gemspec.rz | Bin 0 -> 403 bytes .../null-required-rubygems-version.gemspec.rz | Bin 0 -> 421 bytes ruby/test/rubygems/data/null-type.gemspec.rz | Bin 554 -> 504 bytes ruby/test/rubygems/encrypted_private_key.pem | 52 +- ruby/test/rubygems/helper.rb | 1609 + .../rubygems/installer_test_case.rb | 38 +- .../rubygems/package/tar_test_case.rb | 8 +- .../packages/ascii_binder-0.1.10.1.gem | Bin 0 -> 244736 bytes .../ill-formatted-platform-1.0.0.10.gem | Bin 0 -> 10240 bytes .../rubygems/plugin/load/rubygems_plugin.rb | 2 - ruby/test/rubygems/private_ec_key.pem | 9 + .../rubygems/commands/crash_command.rb | 2 - ruby/test/rubygems/rubygems_plugin.rb | 2 - .../rubygems/specifications/bar-0.0.2.gemspec | 2 - .../specifications/rubyforge-0.0.1.gemspec | 12 + ruby/test/rubygems/test_bundled_ca.rb | 89 +- ruby/test/rubygems/test_config.rb | 8 +- ruby/test/rubygems/test_deprecate.rb | 95 +- ruby/test/rubygems/test_exit.rb | 11 + ruby/test/rubygems/test_gem.rb | 903 +- ruby/test/rubygems/test_gem_available_set.rb | 10 +- .../test_gem_bundler_version_finder.rb | 81 +- ruby/test/rubygems/test_gem_command.rb | 47 +- .../test/rubygems/test_gem_command_manager.rb | 83 +- .../test_gem_commands_build_command.rb | 279 +- .../test_gem_commands_cert_command.rb | 151 +- .../test_gem_commands_check_command.rb | 14 +- .../test_gem_commands_cleanup_command.rb | 69 +- .../test_gem_commands_contents_command.rb | 75 +- .../test_gem_commands_dependency_command.rb | 8 +- .../test_gem_commands_environment_command.rb | 48 +- .../test_gem_commands_fetch_command.rb | 153 +- ...est_gem_commands_generate_index_command.rb | 10 +- .../test_gem_commands_help_command.rb | 30 +- .../test_gem_commands_info_command.rb | 16 +- .../test_gem_commands_install_command.rb | 381 +- .../test_gem_commands_list_command.rb | 6 +- .../test_gem_commands_lock_command.rb | 6 +- .../test/rubygems/test_gem_commands_mirror.rb | 6 +- .../test_gem_commands_open_command.rb | 29 +- .../test_gem_commands_outdated_command.rb | 20 +- .../test_gem_commands_owner_command.rb | 72 +- .../test_gem_commands_pristine_command.rb | 85 +- .../test_gem_commands_push_command.rb | 105 +- .../test_gem_commands_query_command.rb | 40 +- .../test_gem_commands_search_command.rb | 4 +- .../test_gem_commands_server_command.rb | 54 +- .../test_gem_commands_setup_command.rb | 385 +- .../test_gem_commands_signin_command.rb | 61 +- .../test_gem_commands_signout_command.rb | 9 +- .../test_gem_commands_sources_command.rb | 112 +- ...test_gem_commands_specification_command.rb | 80 +- .../test_gem_commands_stale_command.rb | 4 +- .../test_gem_commands_uninstall_command.rb | 15 +- .../test_gem_commands_unpack_command.rb | 8 +- .../test_gem_commands_update_command.rb | 225 +- .../test_gem_commands_which_command.rb | 16 +- .../test_gem_commands_yank_command.rb | 56 +- ruby/test/rubygems/test_gem_config_file.rb | 49 +- ruby/test/rubygems/test_gem_dependency.rb | 30 +- .../rubygems/test_gem_dependency_installer.rb | 390 +- .../test/rubygems/test_gem_dependency_list.rb | 24 +- .../test_gem_dependency_resolution_error.rb | 6 +- ruby/test/rubygems/test_gem_doctor.rb | 88 +- ruby/test/rubygems/test_gem_ext_builder.rb | 142 +- .../rubygems/test_gem_ext_cmake_builder.rb | 47 +- .../test_gem_ext_configure_builder.rb | 38 +- .../rubygems/test_gem_ext_ext_conf_builder.rb | 77 +- .../rubygems/test_gem_ext_rake_builder.rb | 69 +- ruby/test/rubygems/test_gem_gem_runner.rb | 47 +- .../rubygems/test_gem_gemcutter_utilities.rb | 49 +- .../test_gem_impossible_dependencies_error.rb | 4 +- ruby/test/rubygems/test_gem_indexer.rb | 26 +- .../test_gem_install_update_options.rb | 34 +- ruby/test/rubygems/test_gem_installer.rb | 928 +- .../rubygems/test_gem_local_remote_options.rb | 6 +- ruby/test/rubygems/test_gem_name_tuple.rb | 4 +- ruby/test/rubygems/test_gem_package.rb | 214 +- ruby/test/rubygems/test_gem_package_old.rb | 22 +- .../rubygems/test_gem_package_tar_header.rb | 31 +- .../rubygems/test_gem_package_tar_reader.rb | 4 +- .../test_gem_package_tar_reader_entry.rb | 20 +- .../rubygems/test_gem_package_tar_writer.rb | 53 +- ruby/test/rubygems/test_gem_package_task.rb | 63 +- ruby/test/rubygems/test_gem_path_support.rb | 14 +- ruby/test/rubygems/test_gem_platform.rb | 80 +- ruby/test/rubygems/test_gem_rdoc.rb | 22 +- ruby/test/rubygems/test_gem_remote_fetcher.rb | 495 +- ruby/test/rubygems/test_gem_request.rb | 94 +- .../test_gem_request_connection_pools.rb | 8 +- ruby/test/rubygems/test_gem_request_set.rb | 123 +- ...test_gem_request_set_gem_dependency_api.rb | 42 +- .../rubygems/test_gem_request_set_lockfile.rb | 18 +- .../test_gem_request_set_lockfile_parser.rb | 28 +- ...test_gem_request_set_lockfile_tokenizer.rb | 248 +- ruby/test/rubygems/test_gem_requirement.rb | 109 +- ruby/test/rubygems/test_gem_resolver.rb | 40 +- .../test_gem_resolver_activation_request.rb | 4 +- .../rubygems/test_gem_resolver_api_set.rb | 121 +- .../test_gem_resolver_api_specification.rb | 10 +- .../rubygems/test_gem_resolver_best_set.rb | 37 +- .../test_gem_resolver_composed_set.rb | 4 +- .../rubygems/test_gem_resolver_conflict.rb | 6 +- .../test_gem_resolver_dependency_request.rb | 4 +- .../rubygems/test_gem_resolver_git_set.rb | 6 +- .../test_gem_resolver_git_specification.rb | 9 +- .../rubygems/test_gem_resolver_index_set.rb | 8 +- .../test_gem_resolver_index_specification.rb | 6 +- ...st_gem_resolver_installed_specification.rb | 4 +- .../test_gem_resolver_installer_set.rb | 44 +- .../test_gem_resolver_local_specification.rb | 6 +- .../rubygems/test_gem_resolver_lock_set.rb | 10 +- .../test_gem_resolver_lock_specification.rb | 4 +- .../test_gem_resolver_requirement_list.rb | 4 +- .../test_gem_resolver_specification.rb | 8 +- .../rubygems/test_gem_resolver_vendor_set.rb | 10 +- .../test_gem_resolver_vendor_specification.rb | 4 +- ruby/test/rubygems/test_gem_security.rb | 96 +- .../test/rubygems/test_gem_security_policy.rb | 75 +- .../test/rubygems/test_gem_security_signer.rb | 38 +- .../rubygems/test_gem_security_trust_dir.rb | 20 +- ruby/test/rubygems/test_gem_server.rb | 612 - ruby/test/rubygems/test_gem_silent_ui.rb | 22 +- ruby/test/rubygems/test_gem_source.rb | 43 +- .../rubygems/test_gem_source_fetch_problem.rb | 14 +- ruby/test/rubygems/test_gem_source_git.rb | 49 +- .../rubygems/test_gem_source_installed.rb | 18 +- ruby/test/rubygems/test_gem_source_list.rb | 5 +- ruby/test/rubygems/test_gem_source_local.rb | 20 +- ruby/test/rubygems/test_gem_source_lock.rb | 24 +- .../rubygems/test_gem_source_specific_file.rb | 20 +- .../test_gem_source_subpath_problem.rb | 49 + ruby/test/rubygems/test_gem_source_vendor.rb | 18 +- ruby/test/rubygems/test_gem_spec_fetcher.rb | 19 +- ruby/test/rubygems/test_gem_specification.rb | 1146 +- ruby/test/rubygems/test_gem_stream_ui.rb | 10 +- .../rubygems/test_gem_stub_specification.rb | 35 +- ruby/test/rubygems/test_gem_text.rb | 12 +- ruby/test/rubygems/test_gem_uninstaller.rb | 189 +- ...test_gem_unsatisfiable_dependency_error.rb | 4 +- ruby/test/rubygems/test_gem_uri.rb | 39 + ruby/test/rubygems/test_gem_uri_formatter.rb | 4 +- ruby/test/rubygems/test_gem_util.rb | 36 +- ruby/test/rubygems/test_gem_validator.rb | 6 +- ruby/test/rubygems/test_gem_version.rb | 27 +- ruby/test/rubygems/test_gem_version_option.rb | 6 +- ruby/test/rubygems/test_kernel.rb | 59 +- ruby/test/rubygems/test_project_sanity.rb | 11 +- ruby/test/rubygems/test_remote_fetch_error.rb | 6 +- ruby/test/rubygems/test_require.rb | 397 +- ruby/test/rubygems/test_rubygems.rb | 71 + ruby/test/rubygems/utilities.rb | 371 + ruby/test/runner.rb | 5 +- ruby/test/sdbm/test_sdbm.rb | 544 - ruby/test/socket/test_addrinfo.rb | 16 +- ruby/test/socket/test_basicsocket.rb | 4 +- ruby/test/socket/test_socket.rb | 17 +- ruby/test/socket/test_tcp.rb | 45 + ruby/test/socket/test_unix.rb | 20 +- ruby/test/stringio/test_ractor.rb | 23 + ruby/test/stringio/test_stringio.rb | 75 +- ruby/test/strscan/test_ractor.rb | 28 + ruby/test/strscan/test_stringscanner.rb | 17 + ruby/test/test_delegate.rb | 53 +- ruby/test/test_extlibs.rb | 2 - ruby/test/test_getoptlong.rb | 163 + ruby/test/test_ipaddr.rb | 86 +- ruby/test/test_mutex_m.rb | 32 + ruby/test/test_open3.rb | 24 +- ruby/test/test_pp.rb | 28 +- ruby/test/test_prime.rb | 280 - ruby/test/test_pstore.rb | 4 +- ruby/test/test_securerandom.rb | 121 +- ruby/test/test_set.rb | 162 +- ruby/test/test_sorted_set.rb | 45 + ruby/test/test_syslog.rb | 7 +- ruby/test/test_time.rb | 9 + ruby/test/test_timeout.rb | 19 + ruby/test/test_tmpdir.rb | 56 +- ruby/test/test_tracer.rb | 234 - ruby/test/test_trick.rb | 191 + ruby/test/test_win32api.rb | 27 - ruby/test/uri/test_common.rb | 22 + ruby/test/uri/test_generic.rb | 60 +- ruby/test/uri/test_http.rb | 31 +- ruby/test/uri/test_ldap.rb | 4 + ruby/test/uri/test_parser.rb | 5 + ruby/test/uri/test_ws.rb | 71 + ruby/test/webrick/test_filehandler.rb | 353 - ruby/test/webrick/utils.rb | 82 - ruby/test/win32ole/test_win32ole.rb | 2 +- ruby/test/win32ole/test_win32ole_event.rb | 3 +- ruby/test/yaml/test_store.rb | 4 +- ruby/test/zlib/test_zlib.rb | 225 +- ruby/thread.c | 1494 +- ruby/thread_pthread.c | 402 +- ruby/thread_pthread.h | 50 +- ruby/thread_sync.c | 622 +- ruby/thread_win32.c | 133 +- ruby/thread_win32.h | 35 +- ruby/time.c | 1326 +- ruby/timev.h | 1 + ruby/timev.rb | 312 + ruby/tool/actions-commit-info.sh | 17 - ruby/tool/bisect.sh | 17 +- ruby/tool/bundler/dev_gems.rb | 24 + ruby/tool/bundler/dev_gems.rb.lock | 75 + ruby/tool/bundler/rubocop_gems.rb | 11 + ruby/tool/bundler/rubocop_gems.rb.lock | 63 + ruby/tool/bundler/standard_gems.rb | 11 + ruby/tool/bundler/standard_gems.rb.lock | 69 + ruby/tool/bundler/test_gems.rb | 12 + ruby/tool/bundler/test_gems.rb.lock | 44 + ruby/tool/ci_functions.sh | 29 + ruby/tool/config.guess | 1663 +- ruby/tool/config.sub | 1794 +- ruby/tool/disable_ipv6.sh | 9 + ruby/tool/downloader.rb | 39 +- .../dummy-rake-compiler/rake/extensiontask.rb | 9 + ruby/tool/enc-unicode.rb | 6 +- ruby/tool/extlibs.rb | 86 +- ruby/tool/fake.rb | 2 + ruby/tool/fetch-bundled_gems.rb | 24 +- ruby/tool/format-release | 39 +- ruby/tool/gem-unpack.rb | 3 +- ruby/tool/ifchange | 29 + ruby/tool/intern_ids.rb | 35 + ruby/tool/leaked-globals | 31 +- ruby/tool/lib/-test-/integer.rb | 4 +- ruby/tool/lib/colorize.rb | 14 +- ruby/tool/lib/core_assertions.rb | 751 + ruby/tool/lib/envutil.rb | 49 +- ruby/tool/lib/gc_checker.rb | 36 + ruby/tool/lib/gc_compact_checker.rb | 10 - ruby/tool/lib/leakchecker.rb | 134 +- ruby/tool/lib/memory_status.rb | 6 +- ruby/tool/lib/minitest/README.txt | 457 - ruby/tool/lib/minitest/autorun.rb | 14 - ruby/tool/lib/minitest/benchmark.rb | 418 - ruby/tool/lib/minitest/mock.rb | 196 - ruby/tool/lib/minitest/unit.rb | 1434 - ruby/tool/lib/profile_test_all.rb | 2 +- ruby/tool/lib/test/unit.rb | 757 +- ruby/tool/lib/test/unit/assertions.rb | 810 +- ruby/tool/lib/test/unit/core_assertions.rb | 420 - ruby/tool/lib/test/unit/parallel.rb | 82 +- ruby/tool/lib/test/unit/testcase.rb | 280 +- ruby/tool/lib/vcs.rb | 215 +- ruby/{ => tool}/lib/webrick.rb | 9 +- ruby/{ => tool}/lib/webrick/.document | 0 ruby/{ => tool}/lib/webrick/accesslog.rb | 0 ruby/{ => tool}/lib/webrick/cgi.rb | 0 ruby/{ => tool}/lib/webrick/compat.rb | 0 ruby/{ => tool}/lib/webrick/config.rb | 0 ruby/{ => tool}/lib/webrick/cookie.rb | 0 ruby/{ => tool}/lib/webrick/htmlutils.rb | 0 ruby/{ => tool}/lib/webrick/httpauth.rb | 0 .../lib/webrick/httpauth/authenticator.rb | 2 +- .../lib/webrick/httpauth/basicauth.rb | 0 .../lib/webrick/httpauth/digestauth.rb | 0 .../lib/webrick/httpauth/htdigest.rb | 0 .../lib/webrick/httpauth/htgroup.rb | 0 .../lib/webrick/httpauth/htpasswd.rb | 0 .../{ => tool}/lib/webrick/httpauth/userdb.rb | 0 ruby/tool/lib/webrick/httpproxy.rb | 354 + ruby/{ => tool}/lib/webrick/httprequest.rb | 19 +- ruby/{ => tool}/lib/webrick/httpresponse.rb | 0 ruby/{ => tool}/lib/webrick/https.rb | 0 ruby/{ => tool}/lib/webrick/httpserver.rb | 0 ruby/{ => tool}/lib/webrick/httpservlet.rb | 0 .../lib/webrick/httpservlet/abstract.rb | 0 .../lib/webrick/httpservlet/cgi_runner.rb | 0 .../lib/webrick/httpservlet/cgihandler.rb | 0 .../lib/webrick/httpservlet/erbhandler.rb | 0 .../lib/webrick/httpservlet/filehandler.rb | 17 +- .../lib/webrick/httpservlet/prochandler.rb | 0 ruby/{ => tool}/lib/webrick/httpstatus.rb | 0 ruby/{ => tool}/lib/webrick/httputils.rb | 1 + ruby/{ => tool}/lib/webrick/httpversion.rb | 0 ruby/{ => tool}/lib/webrick/log.rb | 0 ruby/tool/lib/webrick/server.rb | 381 + ruby/{ => tool}/lib/webrick/ssl.rb | 4 +- ruby/tool/lib/webrick/utils.rb | 265 + ruby/tool/lib/webrick/version.rb | 18 + ruby/tool/m4/_colorize_result_prepare.m4 | 3 +- ruby/tool/m4/ac_msg_result.m4 | 2 +- ruby/tool/m4/colorize_result.m4 | 2 +- ruby/tool/m4/ruby_append_option.m4 | 2 +- ruby/tool/m4/ruby_append_options.m4 | 2 +- ruby/tool/m4/ruby_check_builtin_func.m4 | 2 +- ruby/tool/m4/ruby_check_builtin_setjmp.m4 | 10 +- ruby/tool/m4/ruby_check_printf_prefix.m4 | 11 +- ruby/tool/m4/ruby_check_setjmp.m4 | 10 +- ruby/tool/m4/ruby_check_signedness.m4 | 2 +- ruby/tool/m4/ruby_check_sizeof.m4 | 2 +- ruby/tool/m4/ruby_check_sysconf.m4 | 8 +- ruby/tool/m4/ruby_cppoutfile.m4 | 6 +- ruby/tool/m4/ruby_decl_attribute.m4 | 6 +- ruby/tool/m4/ruby_default_arch.m4 | 6 +- ruby/tool/m4/ruby_define_if.m4 | 12 +- ruby/tool/m4/ruby_defint.m4 | 2 +- ruby/tool/m4/ruby_dtrace_available.m4 | 4 +- ruby/tool/m4/ruby_dtrace_postprocess.m4 | 4 +- ruby/tool/m4/ruby_func_attribute.m4 | 2 +- ruby/tool/m4/ruby_mingw32.m4 | 6 +- ruby/tool/m4/ruby_prepend_option.m4 | 2 +- ruby/tool/m4/ruby_prog_gnu_ld.m4 | 2 +- ruby/tool/m4/ruby_replace_funcs.m4 | 8 +- ruby/tool/m4/ruby_replace_type.m4 | 2 +- ruby/tool/m4/ruby_rm_recursive.m4 | 6 +- ruby/tool/m4/ruby_setjmp_type.m4 | 4 +- ruby/tool/m4/ruby_stack_grow_direction.m4 | 6 +- ruby/tool/m4/ruby_thread.m4 | 33 + ruby/tool/m4/ruby_try_cflags.m4 | 4 +- ruby/tool/m4/ruby_try_cxxflags.m4 | 17 + ruby/tool/m4/ruby_try_ldflags.m4 | 4 +- ruby/tool/m4/ruby_type_attribute.m4 | 2 +- ruby/tool/m4/ruby_universal_arch.m4 | 39 +- ruby/tool/m4/ruby_werror_flag.m4 | 2 +- ruby/tool/make-snapshot | 28 +- ruby/tool/merger.rb | 5 +- ruby/tool/mjit_tabs.rb | 67 + ruby/tool/mk_builtin_binary.rb | 44 - ruby/tool/mk_builtin_loader.rb | 309 +- ruby/tool/mk_call_iseq_optimized.rb | 74 - ruby/tool/mkconfig.rb | 42 +- ruby/tool/mkrunnable.rb | 26 +- ruby/tool/pure_parser.rb | 8 +- ruby/tool/rbinstall.rb | 371 +- ruby/tool/rbuninstall.rb | 18 +- ruby/tool/redmine-backporter.rb | 43 +- ruby/tool/releng/gen-mail.rb | 50 + ruby/tool/releng/gen-release-note.rb | 36 + ruby/tool/releng/update-www-meta.rb | 213 + ruby/tool/ruby_vm/helpers/c_escape.rb | 6 +- ruby/tool/ruby_vm/helpers/dumper.rb | 3 +- ruby/tool/ruby_vm/helpers/scanner.rb | 3 +- ruby/tool/ruby_vm/loaders/insns_def.rb | 8 +- ruby/tool/ruby_vm/models/bare_instructions.rb | 4 + ruby/tool/ruby_vm/models/typemap.rb | 1 - ruby/tool/ruby_vm/views/_insn_entry.erb | 6 +- ruby/tool/ruby_vm/views/_insn_len_info.erb | 23 +- ruby/tool/ruby_vm/views/_insn_name_info.erb | 30 +- .../tool/ruby_vm/views/_insn_operand_info.erb | 29 +- ruby/tool/ruby_vm/views/_leaf_helpers.erb | 62 +- .../views/_mjit_compile_getinlinecache.erb | 31 + .../tool/ruby_vm/views/_mjit_compile_insn.erb | 6 +- .../ruby_vm/views/_mjit_compile_insn_body.erb | 20 +- .../views/_mjit_compile_invokebuiltin.erb | 29 + .../tool/ruby_vm/views/_mjit_compile_ivar.erb | 75 +- .../ruby_vm/views/_mjit_compile_pc_and_sp.erb | 8 +- .../tool/ruby_vm/views/_mjit_compile_send.erb | 148 +- ruby/tool/ruby_vm/views/_sp_inc_helpers.erb | 8 +- .../tool/ruby_vm/views/_trace_instruction.erb | 9 +- ruby/tool/ruby_vm/views/mjit_compile.inc.erb | 61 +- ruby/tool/runruby.rb | 10 +- ruby/tool/search-cgvars.rb | 55 + ruby/tool/strip-rdoc.rb | 30 +- ruby/tool/sync_default_gems.rb | 528 +- ruby/tool/test-bundled-gems.rb | 69 +- ruby/tool/test-coverage.rb | 2 +- ruby/tool/test/minitest/metametameta.rb | 71 - .../test/minitest/test_minitest_benchmark.rb | 131 - ruby/tool/test/minitest/test_minitest_mock.rb | 404 - ruby/tool/test/minitest/test_minitest_unit.rb | 1790 - ruby/tool/test/runner.rb | 2 +- ruby/tool/test/testunit/metametameta.rb | 70 + ruby/tool/test/testunit/test_assertion.rb | 2 +- ruby/tool/test/testunit/test_hideskip.rb | 2 +- ruby/tool/test/testunit/test_minitest_unit.rb | 1474 + ruby/tool/test/testunit/test_parallel.rb | 33 +- ruby/tool/test/testunit/test_redefinition.rb | 13 +- ruby/tool/test/testunit/test_sorting.rb | 57 + .../tests_for_parallel/test4test_hungup.rb | 15 + ruby/{ => tool}/test/webrick/.htaccess | 0 ruby/{ => tool}/test/webrick/test_cgi.rb | 2 +- ruby/{ => tool}/test/webrick/test_config.rb | 0 ruby/{ => tool}/test/webrick/test_cookie.rb | 0 .../webrick/test_do_not_reverse_lookup.rb | 0 ruby/tool/test/webrick/test_filehandler.rb | 403 + ruby/{ => tool}/test/webrick/test_htgroup.rb | 0 .../{ => tool}/test/webrick/test_htmlutils.rb | 0 ruby/{ => tool}/test/webrick/test_httpauth.rb | 0 .../{ => tool}/test/webrick/test_httpproxy.rb | 3 +- .../test/webrick/test_httprequest.rb | 12 + .../test/webrick/test_httpresponse.rb | 34 +- ruby/{ => tool}/test/webrick/test_https.rb | 0 .../test/webrick/test_httpserver.rb | 2 +- .../test/webrick/test_httpstatus.rb | 0 .../{ => tool}/test/webrick/test_httputils.rb | 0 .../test/webrick/test_httpversion.rb | 0 ruby/{ => tool}/test/webrick/test_server.rb | 28 + .../test/webrick/test_ssl_server.rb | 0 ruby/{ => tool}/test/webrick/test_utils.rb | 0 ruby/tool/test/webrick/utils.rb | 84 + ruby/{ => tool}/test/webrick/webrick.cgi | 0 ruby/{ => tool}/test/webrick/webrick.rhtml | 0 .../test/webrick/webrick_long_filename.cgi | 0 ruby/tool/transcode-tblgen.rb | 28 +- ruby/tool/transform_mjit_header.rb | 52 +- ruby/tool/travis_wait.sh | 18 + ruby/tool/update-bundled_gems.rb | 20 + ruby/tool/update-deps | 17 +- ruby/tool/ytab.sed | 1 + ruby/trace_point.rb | 82 +- ruby/trace_point.rbinc | 7 +- ruby/transcode.c | 183 +- ruby/transcode_data.h | 5 +- ruby/transient_heap.c | 179 +- ruby/transient_heap.h | 9 +- ruby/util.c | 43 +- ruby/variable.c | 1241 +- ruby/variable.h | 14 +- ruby/version.c | 17 +- ruby/version.h | 21 +- ruby/vm.c | 999 +- ruby/vm_args.c | 510 +- ruby/vm_backtrace.c | 729 +- ruby/vm_callinfo.h | 487 + ruby/vm_core.h | 543 +- ruby/vm_debug.h | 100 +- ruby/vm_dump.c | 263 +- ruby/vm_eval.c | 919 +- ruby/vm_exec.c | 52 +- ruby/vm_exec.h | 38 +- ruby/vm_insnhelper.c | 3167 +- ruby/vm_insnhelper.h | 64 +- ruby/vm_method.c | 1245 +- ruby/vm_opts.h | 11 +- ruby/vm_sync.c | 299 + ruby/vm_sync.h | 137 + ruby/vm_trace.c | 228 +- ruby/vsnprintf.c | 12 +- ruby/warning.rb | 16 +- ruby/warning.rbinc | 7 +- ruby/win32/Makefile.sub | 156 +- ruby/win32/configure.bat | 22 +- ruby/win32/dir.h | 9 +- ruby/win32/file.c | 35 +- ruby/win32/ifchange.bat | 30 +- ruby/win32/mkexports.rb | 14 +- ruby/win32/resource.rb | 2 +- ruby/win32/ruby.manifest | 8 + ruby/win32/setup.mak | 33 +- ruby/win32/win32.c | 438 +- ruby/yjit.c | 187 + ruby/yjit.h | 73 + ruby/yjit.rb | 279 + ruby/yjit_asm.c | 1835 + ruby/yjit_asm.h | 408 + ruby/yjit_codegen.c | 5062 + ruby/yjit_codegen.h | 23 + ruby/yjit_core.c | 1369 + ruby/yjit_core.h | 307 + ruby/yjit_iface.c | 1310 + ruby/yjit_iface.h | 38 + ruby/yjit_utils.c | 109 + 5905 files changed, 739807 insertions(+), 497545 deletions(-) create mode 100644 ruby/.appveyor.yml create mode 100644 ruby/.cirrus.yml create mode 100644 ruby/.gitattributes create mode 100644 ruby/.github/CODEOWNERS create mode 100644 ruby/.github/SECURITY.md create mode 100644 ruby/.github/codeql/codeql-config.yml create mode 100644 ruby/.github/workflows/baseruby.yml create mode 100644 ruby/.github/workflows/bundled_gems.yml create mode 100644 ruby/.github/workflows/check_dependencies.yml create mode 100644 ruby/.github/workflows/codeql-analysis.yml create mode 100644 ruby/.github/workflows/compilers.yml create mode 100644 ruby/.github/workflows/mingw.yml create mode 100644 ruby/.github/workflows/mjit.yml create mode 100644 ruby/.github/workflows/spec_guards.yml create mode 100644 ruby/.github/workflows/ubuntu.yml create mode 100644 ruby/.github/workflows/windows.yml create mode 100644 ruby/.github/workflows/yjit-ubuntu.yml create mode 100644 ruby/.github/workflows/yjit_asm_tests.yml create mode 100644 ruby/.gitignore delete mode 100644 ruby/ChangeLog delete mode 100644 ruby/NEWS create mode 100644 ruby/NEWS.md delete mode 100644 ruby/appveyor.yml create mode 100644 ruby/array.rb create mode 100755 ruby/autogen.sh create mode 100644 ruby/benchmark/array_max_float.yml create mode 100644 ruby/benchmark/array_max_int.yml create mode 100644 ruby/benchmark/array_max_str.yml create mode 100644 ruby/benchmark/array_min.yml create mode 100644 ruby/benchmark/array_sample.yml create mode 100644 ruby/benchmark/attr_accessor.yml create mode 100644 ruby/benchmark/buffer_get.yml create mode 100644 ruby/benchmark/enum_lazy_flat_map.yml create mode 100644 ruby/benchmark/enum_lazy_zip.yml create mode 100644 ruby/benchmark/enum_tally.yml mode change 100755 => 100644 ruby/benchmark/fiber_chain.yml create mode 100644 ruby/benchmark/fiber_locals.yml create mode 100644 ruby/benchmark/float_methods.yml create mode 100644 ruby/benchmark/float_neg_posi.yml create mode 100644 ruby/benchmark/float_to_s.yml create mode 100644 ruby/benchmark/hash_aref_array.rb create mode 100644 ruby/benchmark/hash_defaults.yml create mode 100644 ruby/benchmark/hash_first.yml create mode 100644 ruby/benchmark/iseq_load_from_binary.yml create mode 100644 ruby/benchmark/ivar_extend.yml create mode 100644 ruby/benchmark/kernel_clone.yml create mode 100644 ruby/benchmark/kernel_float.yml create mode 100644 ruby/benchmark/kernel_tap.yml create mode 100644 ruby/benchmark/kernel_then.yml create mode 100644 ruby/benchmark/keyword_arguments.yml create mode 100644 ruby/benchmark/lib/benchmark_driver/runner/mjit.rb create mode 100644 ruby/benchmark/lib/benchmark_driver/runner/ractor.rb create mode 100644 ruby/benchmark/masgn.yml create mode 100644 ruby/benchmark/method_bind_call.yml create mode 100644 ruby/benchmark/mjit_exivar.yml create mode 100644 ruby/benchmark/mjit_integer.yml create mode 100644 ruby/benchmark/mjit_kernel.yml create mode 100644 ruby/benchmark/mjit_leave.yml create mode 100644 ruby/benchmark/mjit_opt_cc_insns.yml create mode 100644 ruby/benchmark/mjit_struct_aref.yml create mode 100644 ruby/benchmark/nilclass.yml create mode 100644 ruby/benchmark/num_zero_p.yml create mode 100644 ruby/benchmark/numeric_methods.yml create mode 100644 ruby/benchmark/object_allocate.yml create mode 100644 ruby/benchmark/objspace_dump_all.yml create mode 100644 ruby/benchmark/pm_array.yml create mode 100644 ruby/benchmark/ractor_const.yml create mode 100644 ruby/benchmark/ractor_float_to_s.yml create mode 100644 ruby/benchmark/string_casecmp.yml create mode 100644 ruby/benchmark/string_casecmp_p.yml create mode 100644 ruby/benchmark/string_slice.yml create mode 100644 ruby/benchmark/time_at.yml create mode 100644 ruby/benchmark/time_new.yml create mode 100644 ruby/benchmark/time_parse.yml delete mode 100644 ruby/benchmark/vm1_attr_ivar.yml delete mode 100644 ruby/benchmark/vm1_attr_ivar_set.yml delete mode 100644 ruby/benchmark/vm1_block.yml delete mode 100644 ruby/benchmark/vm1_blockparam.yml delete mode 100644 ruby/benchmark/vm1_blockparam_call.yml delete mode 100644 ruby/benchmark/vm1_blockparam_pass.yml delete mode 100644 ruby/benchmark/vm1_blockparam_yield.yml delete mode 100644 ruby/benchmark/vm1_const.yml delete mode 100644 ruby/benchmark/vm1_ensure.yml delete mode 100644 ruby/benchmark/vm1_float_simple.yml delete mode 100644 ruby/benchmark/vm1_gc_short_lived.yml delete mode 100644 ruby/benchmark/vm1_gc_short_with_complex_long.yml delete mode 100644 ruby/benchmark/vm1_gc_short_with_long.yml delete mode 100644 ruby/benchmark/vm1_gc_short_with_symbol.yml delete mode 100644 ruby/benchmark/vm1_gc_wb_ary.yml delete mode 100644 ruby/benchmark/vm1_gc_wb_ary_promoted.yml delete mode 100644 ruby/benchmark/vm1_gc_wb_obj.yml delete mode 100644 ruby/benchmark/vm1_gc_wb_obj_promoted.yml delete mode 100644 ruby/benchmark/vm1_ivar.yml delete mode 100644 ruby/benchmark/vm1_ivar_set.yml delete mode 100644 ruby/benchmark/vm1_length.yml delete mode 100644 ruby/benchmark/vm1_lvar_init.yml delete mode 100644 ruby/benchmark/vm1_lvar_set.yml delete mode 100644 ruby/benchmark/vm1_neq.yml delete mode 100644 ruby/benchmark/vm1_not.yml delete mode 100644 ruby/benchmark/vm1_rescue.yml delete mode 100644 ruby/benchmark/vm1_simplereturn.yml delete mode 100644 ruby/benchmark/vm1_swap.yml delete mode 100644 ruby/benchmark/vm1_yield.yml delete mode 100644 ruby/benchmark/vm2_array.yml delete mode 100644 ruby/benchmark/vm2_bigarray.yml delete mode 100644 ruby/benchmark/vm2_bighash.yml delete mode 100644 ruby/benchmark/vm2_case.yml delete mode 100644 ruby/benchmark/vm2_case_lit.yml delete mode 100644 ruby/benchmark/vm2_defined_method.yml delete mode 100644 ruby/benchmark/vm2_dstr.yml delete mode 100644 ruby/benchmark/vm2_eval.yml delete mode 100644 ruby/benchmark/vm2_fiber_allocate.yml delete mode 100644 ruby/benchmark/vm2_fiber_count.yml delete mode 100644 ruby/benchmark/vm2_fiber_reuse.yml delete mode 100644 ruby/benchmark/vm2_fiber_reuse_gc.yml delete mode 100644 ruby/benchmark/vm2_fiber_switch.yml delete mode 100644 ruby/benchmark/vm2_freezestring.yml delete mode 100644 ruby/benchmark/vm2_method.yml delete mode 100644 ruby/benchmark/vm2_method_missing.yml delete mode 100644 ruby/benchmark/vm2_method_with_block.yml delete mode 100644 ruby/benchmark/vm2_module_ann_const_set.yml delete mode 100644 ruby/benchmark/vm2_module_const_set.yml delete mode 100644 ruby/benchmark/vm2_mutex.yml delete mode 100644 ruby/benchmark/vm2_newlambda.yml delete mode 100644 ruby/benchmark/vm2_poly_method.yml delete mode 100644 ruby/benchmark/vm2_poly_method_ov.yml delete mode 100644 ruby/benchmark/vm2_poly_same_method.yml delete mode 100644 ruby/benchmark/vm2_poly_singleton.yml delete mode 100644 ruby/benchmark/vm2_proc.yml delete mode 100644 ruby/benchmark/vm2_raise1.yml delete mode 100644 ruby/benchmark/vm2_raise2.yml delete mode 100644 ruby/benchmark/vm2_regexp.yml delete mode 100644 ruby/benchmark/vm2_send.yml delete mode 100644 ruby/benchmark/vm2_string_literal.yml delete mode 100644 ruby/benchmark/vm2_struct_big_aref_hi.yml delete mode 100644 ruby/benchmark/vm2_struct_big_aref_lo.yml delete mode 100644 ruby/benchmark/vm2_struct_big_aset.yml delete mode 100644 ruby/benchmark/vm2_struct_big_href_hi.yml delete mode 100644 ruby/benchmark/vm2_struct_big_href_lo.yml delete mode 100644 ruby/benchmark/vm2_struct_big_hset.yml delete mode 100644 ruby/benchmark/vm2_struct_small_aref.yml delete mode 100644 ruby/benchmark/vm2_struct_small_aset.yml delete mode 100644 ruby/benchmark/vm2_struct_small_href.yml delete mode 100644 ruby/benchmark/vm2_struct_small_hset.yml delete mode 100644 ruby/benchmark/vm2_super.yml delete mode 100644 ruby/benchmark/vm2_unif1.yml delete mode 100644 ruby/benchmark/vm2_zsuper.yml create mode 100644 ruby/benchmark/vm_array.yml create mode 100644 ruby/benchmark/vm_attr_ivar.yml create mode 100644 ruby/benchmark/vm_attr_ivar_set.yml rename ruby/benchmark/{vm3_backtrace.rb => vm_backtrace.rb} (100%) create mode 100644 ruby/benchmark/vm_bigarray.yml create mode 100644 ruby/benchmark/vm_bighash.yml create mode 100644 ruby/benchmark/vm_block.yml create mode 100644 ruby/benchmark/vm_block_handler.yml create mode 100644 ruby/benchmark/vm_blockparam.yml create mode 100644 ruby/benchmark/vm_blockparam_call.yml create mode 100644 ruby/benchmark/vm_blockparam_pass.yml create mode 100644 ruby/benchmark/vm_blockparam_yield.yml create mode 100644 ruby/benchmark/vm_case.yml create mode 100644 ruby/benchmark/vm_case_classes.yml create mode 100644 ruby/benchmark/vm_case_lit.yml rename ruby/benchmark/{vm3_clearmethodcache.rb => vm_clearmethodcache.rb} (100%) create mode 100644 ruby/benchmark/vm_const.yml create mode 100644 ruby/benchmark/vm_cvar.yml create mode 100644 ruby/benchmark/vm_defined_method.yml create mode 100644 ruby/benchmark/vm_dstr.yml create mode 100644 ruby/benchmark/vm_dstr_ary.rb create mode 100644 ruby/benchmark/vm_dstr_bool.rb create mode 100644 ruby/benchmark/vm_dstr_class_module.rb create mode 100644 ruby/benchmark/vm_dstr_digit.rb create mode 100644 ruby/benchmark/vm_dstr_int.rb create mode 100644 ruby/benchmark/vm_dstr_nil.rb create mode 100644 ruby/benchmark/vm_dstr_obj.rb create mode 100644 ruby/benchmark/vm_dstr_obj_def.rb create mode 100644 ruby/benchmark/vm_dstr_str.rb create mode 100644 ruby/benchmark/vm_dstr_sym.rb create mode 100644 ruby/benchmark/vm_ensure.yml create mode 100644 ruby/benchmark/vm_eval.yml create mode 100644 ruby/benchmark/vm_fiber_allocate.yml create mode 100644 ruby/benchmark/vm_fiber_count.yml create mode 100644 ruby/benchmark/vm_fiber_reuse.yml create mode 100644 ruby/benchmark/vm_fiber_reuse_gc.yml create mode 100644 ruby/benchmark/vm_fiber_switch.yml create mode 100644 ruby/benchmark/vm_float_simple.yml create mode 100644 ruby/benchmark/vm_freezestring.yml rename ruby/benchmark/{vm3_gc.rb => vm_gc.rb} (100%) rename ruby/benchmark/{vm3_gc_old_full.rb => vm_gc_old_full.rb} (100%) rename ruby/benchmark/{vm3_gc_old_immediate.rb => vm_gc_old_immediate.rb} (100%) rename ruby/benchmark/{vm3_gc_old_lazy.rb => vm_gc_old_lazy.rb} (100%) create mode 100644 ruby/benchmark/vm_gc_short_lived.yml create mode 100644 ruby/benchmark/vm_gc_short_with_complex_long.yml create mode 100644 ruby/benchmark/vm_gc_short_with_long.yml create mode 100644 ruby/benchmark/vm_gc_short_with_symbol.yml create mode 100644 ruby/benchmark/vm_gc_wb_ary.yml create mode 100644 ruby/benchmark/vm_gc_wb_ary_promoted.yml create mode 100644 ruby/benchmark/vm_gc_wb_obj.yml create mode 100644 ruby/benchmark/vm_gc_wb_obj_promoted.yml create mode 100644 ruby/benchmark/vm_iclass_super.yml create mode 100644 ruby/benchmark/vm_ivar.yml create mode 100644 ruby/benchmark/vm_ivar_init.yml create mode 100644 ruby/benchmark/vm_ivar_of_class.yml create mode 100644 ruby/benchmark/vm_ivar_of_class_set.yml create mode 100644 ruby/benchmark/vm_ivar_set.yml create mode 100644 ruby/benchmark/vm_ivar_set_subclass.yml create mode 100644 ruby/benchmark/vm_length.yml create mode 100644 ruby/benchmark/vm_lvar_init.yml create mode 100644 ruby/benchmark/vm_lvar_set.yml create mode 100644 ruby/benchmark/vm_method.yml create mode 100644 ruby/benchmark/vm_method_missing.yml create mode 100644 ruby/benchmark/vm_method_with_block.yml create mode 100644 ruby/benchmark/vm_module_ann_const_set.yml create mode 100644 ruby/benchmark/vm_module_const_set.yml create mode 100644 ruby/benchmark/vm_mutex.yml create mode 100644 ruby/benchmark/vm_neq.yml create mode 100644 ruby/benchmark/vm_newlambda.yml create mode 100644 ruby/benchmark/vm_not.yml create mode 100644 ruby/benchmark/vm_poly_method.yml create mode 100644 ruby/benchmark/vm_poly_method_ov.yml create mode 100644 ruby/benchmark/vm_poly_same_method.yml create mode 100644 ruby/benchmark/vm_poly_singleton.yml create mode 100644 ruby/benchmark/vm_proc.yml create mode 100644 ruby/benchmark/vm_raise1.yml create mode 100644 ruby/benchmark/vm_raise2.yml create mode 100644 ruby/benchmark/vm_regexp.yml create mode 100644 ruby/benchmark/vm_rescue.yml create mode 100644 ruby/benchmark/vm_send.yml create mode 100644 ruby/benchmark/vm_send_cfunc.yml create mode 100644 ruby/benchmark/vm_simplereturn.yml create mode 100644 ruby/benchmark/vm_string_literal.yml create mode 100644 ruby/benchmark/vm_struct_big_aref_hi.yml create mode 100644 ruby/benchmark/vm_struct_big_aref_lo.yml create mode 100644 ruby/benchmark/vm_struct_big_aset.yml create mode 100644 ruby/benchmark/vm_struct_big_href_hi.yml create mode 100644 ruby/benchmark/vm_struct_big_href_lo.yml create mode 100644 ruby/benchmark/vm_struct_big_hset.yml create mode 100644 ruby/benchmark/vm_struct_small_aref.yml create mode 100644 ruby/benchmark/vm_struct_small_aset.yml create mode 100644 ruby/benchmark/vm_struct_small_href.yml create mode 100644 ruby/benchmark/vm_struct_small_hset.yml create mode 100644 ruby/benchmark/vm_super.yml create mode 100644 ruby/benchmark/vm_swap.yml create mode 100644 ruby/benchmark/vm_unif1.yml create mode 100644 ruby/benchmark/vm_yield.yml create mode 100644 ruby/benchmark/vm_zsuper.yml delete mode 100755 ruby/bin/bundle delete mode 100755 ruby/bin/bundler delete mode 100755 ruby/bin/irb delete mode 100755 ruby/bin/racc delete mode 100755 ruby/bin/racc2y delete mode 100755 ruby/bin/rdoc delete mode 100755 ruby/bin/ri delete mode 100755 ruby/bin/y2racc create mode 100644 ruby/bootstraptest/test_ractor.rb create mode 100644 ruby/bootstraptest/test_yjit.rb create mode 100644 ruby/bootstraptest/test_yjit_30k_ifelse.rb create mode 100644 ruby/bootstraptest/test_yjit_30k_methods.rb delete mode 100644 ruby/coroutine/copy/Context.c delete mode 100644 ruby/coroutine/copy/Context.h create mode 100644 ruby/coroutine/emscripten/Context.c create mode 100644 ruby/coroutine/emscripten/Context.h create mode 100644 ruby/coroutine/pthread/Context.c create mode 100644 ruby/coroutine/pthread/Context.h create mode 100644 ruby/coroutine/riscv64/Context.S create mode 100644 ruby/coroutine/riscv64/Context.h create mode 100644 ruby/coroutine/universal/Context.S create mode 100644 ruby/coroutine/universal/Context.h create mode 100644 ruby/darray.h create mode 100644 ruby/dir.rb create mode 100644 ruby/doc/NEWS-2.7.0 create mode 100644 ruby/doc/NEWS-3.0.0.md create mode 100644 ruby/doc/bsearch.rdoc create mode 100644 ruby/doc/case_mapping.rdoc delete mode 100644 ruby/doc/contributors.rdoc create mode 100644 ruby/doc/csv/arguments/io.rdoc create mode 100644 ruby/doc/csv/options/common/col_sep.rdoc create mode 100644 ruby/doc/csv/options/common/quote_char.rdoc create mode 100644 ruby/doc/csv/options/common/row_sep.rdoc create mode 100644 ruby/doc/csv/options/generating/force_quotes.rdoc create mode 100644 ruby/doc/csv/options/generating/quote_empty.rdoc create mode 100644 ruby/doc/csv/options/generating/write_converters.rdoc create mode 100644 ruby/doc/csv/options/generating/write_empty_value.rdoc create mode 100644 ruby/doc/csv/options/generating/write_headers.rdoc create mode 100644 ruby/doc/csv/options/generating/write_nil_value.rdoc create mode 100644 ruby/doc/csv/options/parsing/converters.rdoc create mode 100644 ruby/doc/csv/options/parsing/empty_value.rdoc create mode 100644 ruby/doc/csv/options/parsing/field_size_limit.rdoc create mode 100644 ruby/doc/csv/options/parsing/header_converters.rdoc create mode 100644 ruby/doc/csv/options/parsing/headers.rdoc create mode 100644 ruby/doc/csv/options/parsing/liberal_parsing.rdoc create mode 100644 ruby/doc/csv/options/parsing/nil_value.rdoc create mode 100644 ruby/doc/csv/options/parsing/return_headers.rdoc create mode 100644 ruby/doc/csv/options/parsing/skip_blanks.rdoc create mode 100644 ruby/doc/csv/options/parsing/skip_lines.rdoc create mode 100644 ruby/doc/csv/options/parsing/strip.rdoc create mode 100644 ruby/doc/csv/options/parsing/unconverted_fields.rdoc create mode 100644 ruby/doc/csv/recipes/filtering.rdoc create mode 100644 ruby/doc/csv/recipes/generating.rdoc create mode 100644 ruby/doc/csv/recipes/parsing.rdoc create mode 100644 ruby/doc/csv/recipes/recipes.rdoc create mode 100644 ruby/doc/dig_methods.rdoc create mode 100644 ruby/doc/documentation_guide.rdoc create mode 100644 ruby/doc/fiber.md create mode 100644 ruby/doc/hacking.md create mode 100644 ruby/doc/implicit_conversion.rdoc create mode 100644 ruby/doc/make_cheatsheet.md create mode 100644 ruby/doc/memory_view.md create mode 100644 ruby/doc/optparse/argument_converters.rdoc create mode 100644 ruby/doc/optparse/creates_option.rdoc create mode 100644 ruby/doc/optparse/option_params.rdoc create mode 100644 ruby/doc/optparse/ruby/argument_keywords.rb create mode 100644 ruby/doc/optparse/ruby/argument_strings.rb create mode 100644 ruby/doc/optparse/ruby/argv.rb create mode 100644 ruby/doc/optparse/ruby/array.rb create mode 100644 ruby/doc/optparse/ruby/basic.rb create mode 100644 ruby/doc/optparse/ruby/block.rb create mode 100644 ruby/doc/optparse/ruby/collected_options.rb create mode 100644 ruby/doc/optparse/ruby/custom_converter.rb create mode 100644 ruby/doc/optparse/ruby/date.rb create mode 100644 ruby/doc/optparse/ruby/datetime.rb create mode 100644 ruby/doc/optparse/ruby/decimal_integer.rb create mode 100644 ruby/doc/optparse/ruby/decimal_numeric.rb create mode 100644 ruby/doc/optparse/ruby/default_values.rb create mode 100644 ruby/doc/optparse/ruby/descriptions.rb create mode 100644 ruby/doc/optparse/ruby/explicit_array_values.rb create mode 100644 ruby/doc/optparse/ruby/explicit_hash_values.rb create mode 100644 ruby/doc/optparse/ruby/false_class.rb create mode 100644 ruby/doc/optparse/ruby/float.rb create mode 100644 ruby/doc/optparse/ruby/help.rb create mode 100644 ruby/doc/optparse/ruby/help_banner.rb create mode 100644 ruby/doc/optparse/ruby/help_format.rb create mode 100644 ruby/doc/optparse/ruby/help_program_name.rb create mode 100644 ruby/doc/optparse/ruby/integer.rb create mode 100644 ruby/doc/optparse/ruby/long_names.rb create mode 100644 ruby/doc/optparse/ruby/long_optional.rb create mode 100644 ruby/doc/optparse/ruby/long_required.rb create mode 100644 ruby/doc/optparse/ruby/long_simple.rb create mode 100644 ruby/doc/optparse/ruby/long_with_negation.rb create mode 100644 ruby/doc/optparse/ruby/match_converter.rb create mode 100644 ruby/doc/optparse/ruby/matched_values.rb create mode 100644 ruby/doc/optparse/ruby/method.rb create mode 100644 ruby/doc/optparse/ruby/missing_options.rb create mode 100644 ruby/doc/optparse/ruby/mixed_names.rb create mode 100644 ruby/doc/optparse/ruby/name_abbrev.rb create mode 100644 ruby/doc/optparse/ruby/no_abbreviation.rb create mode 100644 ruby/doc/optparse/ruby/numeric.rb create mode 100644 ruby/doc/optparse/ruby/object.rb create mode 100644 ruby/doc/optparse/ruby/octal_integer.rb create mode 100644 ruby/doc/optparse/ruby/optional_argument.rb create mode 100644 ruby/doc/optparse/ruby/parse.rb create mode 100644 ruby/doc/optparse/ruby/parse_bang.rb create mode 100644 ruby/doc/optparse/ruby/proc.rb create mode 100644 ruby/doc/optparse/ruby/regexp.rb create mode 100644 ruby/doc/optparse/ruby/required_argument.rb create mode 100644 ruby/doc/optparse/ruby/shellwords.rb create mode 100644 ruby/doc/optparse/ruby/short_names.rb create mode 100644 ruby/doc/optparse/ruby/short_optional.rb create mode 100644 ruby/doc/optparse/ruby/short_range.rb create mode 100644 ruby/doc/optparse/ruby/short_required.rb create mode 100644 ruby/doc/optparse/ruby/short_simple.rb create mode 100644 ruby/doc/optparse/ruby/string.rb create mode 100644 ruby/doc/optparse/ruby/terminator.rb create mode 100644 ruby/doc/optparse/ruby/time.rb create mode 100644 ruby/doc/optparse/ruby/true_class.rb create mode 100644 ruby/doc/optparse/ruby/uri.rb create mode 100644 ruby/doc/optparse/tutorial.rdoc create mode 100644 ruby/doc/ractor.md create mode 100644 ruby/doc/syntax/pattern_matching.rdoc create mode 100644 ruby/doc/time/in.rdoc create mode 100644 ruby/doc/time/mon-min.rdoc create mode 100644 ruby/doc/time/msec.rdoc create mode 100644 ruby/doc/time/nsec.rdoc create mode 100644 ruby/doc/time/sec.rdoc create mode 100644 ruby/doc/time/sec_i.rdoc create mode 100644 ruby/doc/time/usec.rdoc create mode 100644 ruby/doc/time/year.rdoc create mode 100644 ruby/doc/time/zone_and_in.rdoc create mode 100644 ruby/doc/yjit/yjit.md create mode 100644 ruby/doc/yjit/yjit_hacking.md create mode 100644 ruby/enc/trans/ibm720-tbl.rb rename ruby/enc/unicode/{12.1.0 => 13.0.0}/casefold.h (90%) rename ruby/enc/unicode/{12.1.0 => 13.0.0}/name2ctype.h (90%) mode change 100755 => 100644 ruby/enc/unicode/case-folding.rb delete mode 100644 ruby/enclose_io.h delete mode 100644 ruby/enclose_io_common.h delete mode 100644 ruby/enclose_io_prelude.h delete mode 100644 ruby/enclose_io_unix.c delete mode 100644 ruby/enclose_io_unix.h delete mode 100644 ruby/enclose_io_win32.c delete mode 100644 ruby/enclose_io_win32.h delete mode 100644 ruby/enclose_io_winapi.h create mode 100644 ruby/ext/-test-/RUBY_ALIGNOF/c.c create mode 100644 ruby/ext/-test-/RUBY_ALIGNOF/cpp.cpp create mode 100644 ruby/ext/-test-/RUBY_ALIGNOF/depend create mode 100644 ruby/ext/-test-/RUBY_ALIGNOF/extconf.rb create mode 100644 ruby/ext/-test-/array/concat/depend create mode 100644 ruby/ext/-test-/array/concat/extconf.rb create mode 100644 ruby/ext/-test-/array/concat/to_ary_concat.c create mode 100644 ruby/ext/-test-/memory_view/depend create mode 100644 ruby/ext/-test-/memory_view/extconf.rb create mode 100644 ruby/ext/-test-/memory_view/memory_view.c create mode 100644 ruby/ext/-test-/random/depend create mode 100644 ruby/ext/-test-/random/extconf.rb create mode 100644 ruby/ext/-test-/random/init.c create mode 100644 ruby/ext/-test-/random/loop.c create mode 100644 ruby/ext/-test-/string/rb_interned_str.c create mode 100644 ruby/ext/-test-/thread_fd/depend create mode 100644 ruby/ext/-test-/thread_fd/extconf.rb create mode 100644 ruby/ext/-test-/thread_fd/thread_fd.c delete mode 100644 ruby/ext/-test-/thread_fd_close/depend delete mode 100644 ruby/ext/-test-/thread_fd_close/extconf.rb delete mode 100644 ruby/ext/-test-/thread_fd_close/thread_fd_close.c create mode 100644 ruby/ext/-test-/wait/depend create mode 100644 ruby/ext/-test-/wait/extconf.rb create mode 100644 ruby/ext/-test-/wait/wait.c delete mode 100644 ruby/ext/-test-/wait_for_single_fd/depend delete mode 100644 ruby/ext/-test-/wait_for_single_fd/extconf.rb delete mode 100644 ruby/ext/-test-/wait_for_single_fd/wait_for_single_fd.c create mode 100644 ruby/ext/bigdecimal/bits.h create mode 100644 ruby/ext/bigdecimal/feature.h create mode 100644 ruby/ext/bigdecimal/missing.c create mode 100644 ruby/ext/bigdecimal/missing.h create mode 100644 ruby/ext/bigdecimal/missing/dtoa.c create mode 100644 ruby/ext/bigdecimal/static_assert.h delete mode 100644 ruby/ext/bigdecimal/util/depend delete mode 100644 ruby/ext/dbm/dbm.c delete mode 100644 ruby/ext/dbm/dbm.gemspec delete mode 100644 ruby/ext/dbm/depend delete mode 100644 ruby/ext/dbm/extconf.rb create mode 100644 ruby/ext/digest/digest.gemspec create mode 100644 ruby/ext/digest/lib/digest/loader.rb create mode 100644 ruby/ext/digest/lib/digest/version.rb delete mode 100644 ruby/ext/digest/md5/md5ossl.h delete mode 100644 ruby/ext/digest/rmd160/rmd160ossl.h delete mode 100644 ruby/ext/digest/sha1/sha1ossl.h create mode 100644 ruby/ext/digest/sha2/lib/sha2/loader.rb delete mode 100644 ruby/ext/digest/sha2/sha2ossl.h delete mode 100644 ruby/ext/fiber/depend delete mode 100644 ruby/ext/fiber/extconf.rb delete mode 100644 ruby/ext/fiber/fiber.c create mode 100644 ruby/ext/fiddle/lib/fiddle/version.rb delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/ChangeLog delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libffi delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libffi-3.1 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libgcj delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/ChangeLog.v1 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/LICENSE delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/Makefile.am delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/Makefile.in delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/README delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/acinclude.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/aclocal.m4 delete mode 100755 ruby/ext/fiddle/libffi-3.2.1/compile delete mode 100755 ruby/ext/fiddle/libffi-3.2.1/config.guess delete mode 100755 ruby/ext/fiddle/libffi-3.2.1/config.sub delete mode 100755 ruby/ext/fiddle/libffi-3.2.1/configure delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/configure.ac delete mode 100755 ruby/ext/fiddle/libffi-3.2.1/depcomp delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/doc/libffi.info delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/doc/libffi.texi delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/doc/stamp-vti delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/doc/version.texi delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/fficonfig.h.in delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/generate-darwin-source-and-headers.py delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/include/Makefile.am delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/include/Makefile.in delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/include/ffi.h.in delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/include/ffi_common.h delete mode 100755 ruby/ext/fiddle/libffi-3.2.1/install-sh delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/libffi.pc.in delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/libffi.xcodeproj/project.pbxproj delete mode 100755 ruby/ext/fiddle/libffi-3.2.1/libtool-ldflags delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/libtool-version delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/ltmain.sh delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/asmcfi.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/ax_append_flag.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/ax_cc_maxopt.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/ax_cflags_warn_all.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/ax_check_compile_flag.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/ax_compiler_vendor.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/ax_configure_args.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/ax_enable_builddir.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/ax_gcc_archflag.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/ax_gcc_x86_cpuid.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/libtool.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/ltoptions.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/ltsugar.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/ltversion.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/m4/lt~obsolete.m4 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/man/Makefile.am delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/man/Makefile.in delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/man/ffi.3 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/man/ffi_call.3 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/man/ffi_prep_cif.3 delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/man/ffi_prep_cif_var.3 delete mode 100755 ruby/ext/fiddle/libffi-3.2.1/mdate-sh delete mode 100755 ruby/ext/fiddle/libffi-3.2.1/missing delete mode 100755 ruby/ext/fiddle/libffi-3.2.1/msvcc.sh delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/aarch64/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/aarch64/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/aarch64/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/alpha/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/alpha/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/alpha/osf.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/arc/arcompact.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/arc/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/arc/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/arm/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/arm/ffitarget.h delete mode 100755 ruby/ext/fiddle/libffi-3.2.1/src/arm/gentramp.sh delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/arm/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/arm/trampoline.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/avr32/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/avr32/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/avr32/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/bfin/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/bfin/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/bfin/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/closures.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/cris/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/cris/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/cris/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/debug.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/dlmalloc.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/frv/eabi.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/frv/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/frv/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/ia64/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/ia64/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/ia64/ia64_flags.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/ia64/unix.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/java_raw_api.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/m32r/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/m32r/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/m32r/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/m68k/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/m68k/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/m68k/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/m88k/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/m88k/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/m88k/obsd.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/metag/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/metag/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/metag/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/microblaze/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/microblaze/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/microblaze/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/mips/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/mips/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/mips/n32.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/mips/o32.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/moxie/eabi.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/moxie/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/moxie/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/nios2/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/nios2/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/nios2/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/or1k/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/or1k/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/or1k/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/pa/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/pa/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/pa/hpux32.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/pa/linux.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/aix.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/aix_closure.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/asm.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/darwin.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/darwin_closure.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_darwin.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_linux64.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_powerpc.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_sysv.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/linux64.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/linux64_closure.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ppc_closure.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/powerpc/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/prep_cif.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/raw_api.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/s390/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/s390/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/s390/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/sh/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/sh/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/sh/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/sh64/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/sh64/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/sh64/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/sparc/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/sparc/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/sparc/v8.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/sparc/v9.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/tile/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/tile/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/tile/tile.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/types.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/vax/elfbsd.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/vax/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/vax/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/x86/darwin.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/x86/darwin64.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/x86/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/x86/ffi64.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/x86/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/x86/freebsd.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/x86/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/x86/unix64.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/x86/win32.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/x86/win64.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/xtensa/ffi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/xtensa/ffitarget.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/src/xtensa/sysv.S delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/Makefile.am delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/Makefile.in delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/config/default.exp delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/lib/libffi.exp delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/lib/target-libpath.exp delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/lib/wrapper.exp delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/call.exp delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn0.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn3.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn4.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn5.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn6.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_loc_fn0.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_simple.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_12byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_16byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_18byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_19byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_1_1byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_20byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_20byte1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_24byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_2byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_3_1byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_3byte1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_3byte2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_4_1byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_4byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_5_1_byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_5byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_64byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_6_1_byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_6byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_7_1_byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_7byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_8byte.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_9byte1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_9byte2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_double.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_float.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_longdouble.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_longdouble_split.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_longdouble_split2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_pointer.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_sint16.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_sint32.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_sint64.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_uint16.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_uint32.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_uint64.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_dbls_struct.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_double.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_double_va.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_float.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_longdouble.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_longdouble_va.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_schar.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_sshort.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_sshortchar.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_uchar.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_ushort.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_ushortchar.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_pointer.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_pointer_stack.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_schar.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_sint.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_sshort.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_struct_va1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uchar.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uchar_va.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uint.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uint_va.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ulong_va.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ulonglong.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ushort.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ushort_va.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/err_bad_abi.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/err_bad_typedef.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/ffitest.h delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float3.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float4.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float_va.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/huge_struct.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/many.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/many2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/negint.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct10.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct11.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct3.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct4.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct5.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct6.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct7.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct8.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct9.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/problem1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/promotion.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/pyobjc-tc.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_dbl.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_dbl1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_dbl2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl3.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ldl.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ll.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ll1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_sc.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_sl.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_uc.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ul.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_large.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_large2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_medium.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_medium2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen3.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen4.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct3.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct4.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct5.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct6.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct7.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct8.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct9.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/testclosure.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/uninitialized.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/unwindtest.cc delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/unwindtest_ffi_call.cc delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_struct1.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_struct2.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_struct3.c delete mode 100644 ruby/ext/fiddle/libffi-3.2.1/texinfo.tex create mode 100644 ruby/ext/fiddle/memory_view.c create mode 100644 ruby/ext/fiddle/pinned.c mode change 100755 => 100644 ruby/ext/fiddle/win32/fficonfig.h mode change 100755 => 100644 ruby/ext/fiddle/win32/libffi.mk.tmpl delete mode 100644 ruby/ext/gdbm/README delete mode 100644 ruby/ext/gdbm/depend delete mode 100644 ruby/ext/gdbm/extconf.rb delete mode 100644 ruby/ext/gdbm/gdbm.c delete mode 100644 ruby/ext/gdbm/gdbm.gemspec create mode 100644 ruby/ext/io/nonblock/io-nonblock.gemspec create mode 100644 ruby/ext/io/wait/io-wait.gemspec create mode 100644 ruby/ext/json/VERSION create mode 100644 ruby/ext/nkf/nkf.gemspec create mode 100644 ruby/ext/objspace/lib/objspace.rb create mode 100644 ruby/ext/objspace/lib/objspace/trace.rb delete mode 100644 ruby/ext/openssl/deprecation.rb delete mode 100644 ruby/ext/openssl/lib/openssl/config.rb create mode 100644 ruby/ext/openssl/lib/openssl/hmac.rb create mode 100644 ruby/ext/openssl/lib/openssl/marshal.rb create mode 100644 ruby/ext/openssl/lib/openssl/version.rb create mode 100644 ruby/ext/openssl/ossl_ts.c create mode 100644 ruby/ext/openssl/ossl_ts.h delete mode 100644 ruby/ext/openssl/ossl_version.h delete mode 100644 ruby/ext/openssl/ruby_missing.h create mode 100644 ruby/ext/pathname/pathname.gemspec create mode 100644 ruby/ext/readline/depend-gem delete mode 100644 ruby/ext/sdbm/_sdbm.c delete mode 100644 ruby/ext/sdbm/depend delete mode 100644 ruby/ext/sdbm/extconf.rb delete mode 100644 ruby/ext/sdbm/init.c delete mode 100644 ruby/ext/sdbm/sdbm.gemspec delete mode 100644 ruby/ext/sdbm/sdbm.h create mode 100644 ruby/ext/syslog/syslog.gemspec delete mode 100644 ruby/ext/win32/lib/Win32API.rb delete mode 100644 ruby/ext/win32/lib/win32/importer.rb delete mode 100644 ruby/ext/win32/lib/win32/resolv9x.rb create mode 100644 ruby/ext/win32ole/win32ole.gemspec create mode 100644 ruby/ext/zlib/win32/zlib-1.2.11-mswin.patch delete mode 100644 ruby/gem_prelude.rbinc delete mode 100644 ruby/gems/minitest-5.13.0.gem delete mode 100644 ruby/gems/minitest-5.13.0/.autotest delete mode 100644 ruby/gems/minitest-5.13.0/History.rdoc delete mode 100644 ruby/gems/minitest-5.13.0/Manifest.txt delete mode 100644 ruby/gems/minitest-5.13.0/README.rdoc delete mode 100644 ruby/gems/minitest-5.13.0/Rakefile delete mode 100644 ruby/gems/minitest-5.13.0/design_rationale.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/hoe/minitest.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest/assertions.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest/autorun.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest/benchmark.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest/expectations.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest/hell.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest/mock.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest/parallel.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest/pride.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest/pride_plugin.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest/spec.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest/test.rb delete mode 100644 ruby/gems/minitest-5.13.0/lib/minitest/unit.rb delete mode 100644 ruby/gems/minitest-5.13.0/minitest.gemspec delete mode 100644 ruby/gems/minitest-5.13.0/test/minitest/metametameta.rb delete mode 100644 ruby/gems/minitest-5.13.0/test/minitest/test_minitest_assertions.rb delete mode 100644 ruby/gems/minitest-5.13.0/test/minitest/test_minitest_benchmark.rb delete mode 100644 ruby/gems/minitest-5.13.0/test/minitest/test_minitest_mock.rb delete mode 100644 ruby/gems/minitest-5.13.0/test/minitest/test_minitest_reporter.rb delete mode 100644 ruby/gems/minitest-5.13.0/test/minitest/test_minitest_spec.rb delete mode 100644 ruby/gems/minitest-5.13.0/test/minitest/test_minitest_test.rb delete mode 100644 ruby/gems/net-telnet-0.2.0.gem delete mode 100644 ruby/gems/net-telnet-0.2.0/.gitignore delete mode 100644 ruby/gems/net-telnet-0.2.0/.travis.yml delete mode 100644 ruby/gems/net-telnet-0.2.0/Gemfile delete mode 100644 ruby/gems/net-telnet-0.2.0/LICENSE.txt delete mode 100644 ruby/gems/net-telnet-0.2.0/README.md delete mode 100644 ruby/gems/net-telnet-0.2.0/Rakefile delete mode 100755 ruby/gems/net-telnet-0.2.0/bin/console delete mode 100755 ruby/gems/net-telnet-0.2.0/bin/setup delete mode 100644 ruby/gems/net-telnet-0.2.0/lib/net-telnet.rb delete mode 100644 ruby/gems/net-telnet-0.2.0/lib/net/telnet.rb delete mode 100644 ruby/gems/net-telnet-0.2.0/lib/net/telnet/version.rb delete mode 100644 ruby/gems/net-telnet-0.2.0/net-telnet.gemspec delete mode 100644 ruby/gems/power_assert-1.1.7.gem delete mode 100644 ruby/gems/power_assert-1.1.7/.gitignore delete mode 100644 ruby/gems/power_assert-1.1.7/.travis.yml delete mode 100644 ruby/gems/power_assert-1.1.7/BSDL delete mode 100644 ruby/gems/power_assert-1.1.7/COPYING delete mode 100644 ruby/gems/power_assert-1.1.7/Gemfile delete mode 100644 ruby/gems/power_assert-1.1.7/LEGAL delete mode 100644 ruby/gems/power_assert-1.1.7/README.rdoc delete mode 100644 ruby/gems/power_assert-1.1.7/Rakefile delete mode 100755 ruby/gems/power_assert-1.1.7/bin/console delete mode 100755 ruby/gems/power_assert-1.1.7/bin/setup delete mode 100644 ruby/gems/power_assert-1.1.7/lib/power_assert.rb delete mode 100644 ruby/gems/power_assert-1.1.7/lib/power_assert/colorize.rb delete mode 100644 ruby/gems/power_assert-1.1.7/lib/power_assert/configuration.rb delete mode 100644 ruby/gems/power_assert-1.1.7/lib/power_assert/context.rb delete mode 100644 ruby/gems/power_assert-1.1.7/lib/power_assert/enable_tracepoint_events.rb delete mode 100644 ruby/gems/power_assert-1.1.7/lib/power_assert/inspector.rb delete mode 100644 ruby/gems/power_assert-1.1.7/lib/power_assert/parser.rb delete mode 100644 ruby/gems/power_assert-1.1.7/lib/power_assert/version.rb delete mode 100644 ruby/gems/power_assert-1.1.7/power_assert.gemspec delete mode 100644 ruby/gems/rake-13.0.1.gem delete mode 100644 ruby/gems/rake-13.0.1/.github/workflows/macos.yml delete mode 100644 ruby/gems/rake-13.0.1/.github/workflows/ubuntu-rvm.yml delete mode 100644 ruby/gems/rake-13.0.1/.github/workflows/ubuntu.yml delete mode 100644 ruby/gems/rake-13.0.1/.github/workflows/windows.yml delete mode 100644 ruby/gems/rake-13.0.1/CONTRIBUTING.rdoc delete mode 100644 ruby/gems/rake-13.0.1/Gemfile delete mode 100644 ruby/gems/rake-13.0.1/History.rdoc delete mode 100644 ruby/gems/rake-13.0.1/MIT-LICENSE delete mode 100644 ruby/gems/rake-13.0.1/README.rdoc delete mode 100644 ruby/gems/rake-13.0.1/Rakefile delete mode 100755 ruby/gems/rake-13.0.1/bin/bundle delete mode 100755 ruby/gems/rake-13.0.1/bin/console delete mode 100755 ruby/gems/rake-13.0.1/bin/rake delete mode 100755 ruby/gems/rake-13.0.1/bin/rdoc delete mode 100755 ruby/gems/rake-13.0.1/bin/rubocop delete mode 100755 ruby/gems/rake-13.0.1/bin/setup delete mode 100644 ruby/gems/rake-13.0.1/doc/command_line_usage.rdoc delete mode 100644 ruby/gems/rake-13.0.1/doc/example/Rakefile1 delete mode 100644 ruby/gems/rake-13.0.1/doc/example/Rakefile2 delete mode 100644 ruby/gems/rake-13.0.1/doc/example/a.c delete mode 100644 ruby/gems/rake-13.0.1/doc/example/b.c delete mode 100644 ruby/gems/rake-13.0.1/doc/example/main.c delete mode 100644 ruby/gems/rake-13.0.1/doc/glossary.rdoc delete mode 100644 ruby/gems/rake-13.0.1/doc/jamis.rb delete mode 100644 ruby/gems/rake-13.0.1/doc/proto_rake.rdoc delete mode 100644 ruby/gems/rake-13.0.1/doc/rake.1 delete mode 100644 ruby/gems/rake-13.0.1/doc/rakefile.rdoc delete mode 100644 ruby/gems/rake-13.0.1/doc/rational.rdoc delete mode 100755 ruby/gems/rake-13.0.1/exe/rake delete mode 100644 ruby/gems/rake-13.0.1/lib/rake.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/application.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/backtrace.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/clean.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/cloneable.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/cpu_counter.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/default_loader.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/dsl_definition.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/early_time.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/ext/core.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/ext/string.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/file_creation_task.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/file_list.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/file_task.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/file_utils.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/file_utils_ext.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/invocation_chain.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/invocation_exception_mixin.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/late_time.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/linked_list.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/loaders/makefile.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/multi_task.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/name_space.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/packagetask.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/phony.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/private_reader.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/promise.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/pseudo_status.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/rake_module.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/rake_test_loader.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/rule_recursion_overflow_error.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/scope.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/task.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/task_argument_error.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/task_arguments.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/task_manager.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/tasklib.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/testtask.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/thread_history_display.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/thread_pool.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/trace_output.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/version.rb delete mode 100644 ruby/gems/rake-13.0.1/lib/rake/win32.rb delete mode 100644 ruby/gems/rake-13.0.1/rake.gemspec delete mode 100644 ruby/gems/test-unit-3.3.4.gem delete mode 100644 ruby/gems/test-unit-3.3.4/COPYING delete mode 100644 ruby/gems/test-unit-3.3.4/GPL delete mode 100644 ruby/gems/test-unit-3.3.4/LGPL delete mode 100644 ruby/gems/test-unit-3.3.4/PSFL delete mode 100644 ruby/gems/test-unit-3.3.4/README.md delete mode 100644 ruby/gems/test-unit-3.3.4/Rakefile delete mode 100644 ruby/gems/test-unit-3.3.4/doc/text/getting-started.md delete mode 100644 ruby/gems/test-unit-3.3.4/doc/text/how-to.md delete mode 100644 ruby/gems/test-unit-3.3.4/doc/text/news.md delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test-unit.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/assertion-failed-error.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/assertions.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/attribute-matcher.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/attribute.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/auto-runner-loader.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/autorunner.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/code-snippet-fetcher.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/collector.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/collector/descendant.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/collector/dir.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/collector/load.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/collector/objectspace.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/collector/xml.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/color-scheme.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/color.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/data-sets.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/data.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/diff.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/error.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/exception-handler.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/failure.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/fault-location-detector.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/fixture.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/notification.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/omission.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/pending.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/priority.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/runner/console.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/runner/emacs.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/runner/xml.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/test-suite-creator.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/testcase.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/testresult.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/testsuite.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/ui/console/outputlevel.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/ui/console/testrunner.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/ui/emacs/testrunner.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/ui/testrunner.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/ui/testrunnermediator.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/ui/testrunnerutilities.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/ui/xml/testrunner.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/util/backtracefilter.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/util/method-owner-finder.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/util/observable.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/util/output.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/util/procwrapper.rb delete mode 100644 ruby/gems/test-unit-3.3.4/lib/test/unit/version.rb delete mode 100644 ruby/gems/test-unit-3.3.4/sample/adder.rb delete mode 100644 ruby/gems/test-unit-3.3.4/sample/subtracter.rb delete mode 100644 ruby/gems/test-unit-3.3.4/sample/test_adder.rb delete mode 100644 ruby/gems/test-unit-3.3.4/sample/test_subtracter.rb delete mode 100644 ruby/gems/test-unit-3.3.4/sample/test_user.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test-unit.gemspec delete mode 100644 ruby/gems/test-unit-3.3.4/test/collector/test-descendant.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/collector/test-load.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/collector/test_dir.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/collector/test_objectspace.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/fixtures/header-label.csv delete mode 100644 ruby/gems/test-unit-3.3.4/test/fixtures/header-label.tsv delete mode 100644 ruby/gems/test-unit-3.3.4/test/fixtures/header.csv delete mode 100644 ruby/gems/test-unit-3.3.4/test/fixtures/header.tsv delete mode 100644 ruby/gems/test-unit-3.3.4/test/fixtures/no-header.csv delete mode 100644 ruby/gems/test-unit-3.3.4/test/fixtures/no-header.tsv delete mode 100644 ruby/gems/test-unit-3.3.4/test/fixtures/plus.csv delete mode 100755 ruby/gems/test-unit-3.3.4/test/run-test.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-assertions.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-attribute-matcher.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-attribute.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-code-snippet.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-color-scheme.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-color.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-data.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-diff.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-emacs-runner.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-error.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-failure.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-fault-location-detector.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-fixture.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-notification.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-omission.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-pending.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-priority.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-test-case.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-test-result.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-test-suite-creator.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/test-test-suite.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/testunit-test-util.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/ui/test_testrunmediator.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/util/test-method-owner-finder.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/util/test-output.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/util/test_backtracefilter.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/util/test_observable.rb delete mode 100644 ruby/gems/test-unit-3.3.4/test/util/test_procwrapper.rb delete mode 100644 ruby/gems/xmlrpc-0.3.0.gem delete mode 100644 ruby/gems/xmlrpc-0.3.0/.gitignore delete mode 100644 ruby/gems/xmlrpc-0.3.0/.travis.yml delete mode 100644 ruby/gems/xmlrpc-0.3.0/Gemfile delete mode 100644 ruby/gems/xmlrpc-0.3.0/LICENSE.txt delete mode 100644 ruby/gems/xmlrpc-0.3.0/README.md delete mode 100644 ruby/gems/xmlrpc-0.3.0/Rakefile delete mode 100755 ruby/gems/xmlrpc-0.3.0/bin/console delete mode 100755 ruby/gems/xmlrpc-0.3.0/bin/setup delete mode 100644 ruby/gems/xmlrpc-0.3.0/lib/xmlrpc.rb delete mode 100644 ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/base64.rb delete mode 100644 ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/client.rb delete mode 100644 ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/config.rb delete mode 100644 ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/create.rb delete mode 100644 ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/datetime.rb delete mode 100644 ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/marshal.rb delete mode 100644 ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/parser.rb delete mode 100644 ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/server.rb delete mode 100644 ruby/gems/xmlrpc-0.3.0/lib/xmlrpc/utils.rb delete mode 100644 ruby/gems/xmlrpc-0.3.0/xmlrpc.gemspec delete mode 100644 ruby/golf_prelude.c create mode 100644 ruby/include/ruby/atomic.h create mode 100644 ruby/include/ruby/backward/2/assume.h create mode 100644 ruby/include/ruby/backward/2/attributes.h create mode 100644 ruby/include/ruby/backward/2/bool.h create mode 100644 ruby/include/ruby/backward/2/gcc_version_since.h create mode 100644 ruby/include/ruby/backward/2/inttypes.h create mode 100644 ruby/include/ruby/backward/2/limits.h create mode 100644 ruby/include/ruby/backward/2/long_long.h create mode 100644 ruby/include/ruby/backward/2/r_cast.h create mode 100644 ruby/include/ruby/backward/2/rmodule.h create mode 100644 ruby/include/ruby/backward/2/stdalign.h create mode 100644 ruby/include/ruby/backward/2/stdarg.h delete mode 100644 ruby/include/ruby/backward/classext.h delete mode 100644 ruby/include/ruby/backward/rubyio.h delete mode 100644 ruby/include/ruby/backward/rubysig.h delete mode 100644 ruby/include/ruby/backward/st.h delete mode 100644 ruby/include/ruby/backward/util.h create mode 100644 ruby/include/ruby/fiber/scheduler.h create mode 100644 ruby/include/ruby/internal/anyargs.h create mode 100644 ruby/include/ruby/internal/arithmetic.h create mode 100644 ruby/include/ruby/internal/arithmetic/char.h create mode 100644 ruby/include/ruby/internal/arithmetic/double.h create mode 100644 ruby/include/ruby/internal/arithmetic/fixnum.h create mode 100644 ruby/include/ruby/internal/arithmetic/gid_t.h create mode 100644 ruby/include/ruby/internal/arithmetic/int.h create mode 100644 ruby/include/ruby/internal/arithmetic/intptr_t.h create mode 100644 ruby/include/ruby/internal/arithmetic/long.h create mode 100644 ruby/include/ruby/internal/arithmetic/long_long.h create mode 100644 ruby/include/ruby/internal/arithmetic/mode_t.h create mode 100644 ruby/include/ruby/internal/arithmetic/off_t.h create mode 100644 ruby/include/ruby/internal/arithmetic/pid_t.h create mode 100644 ruby/include/ruby/internal/arithmetic/short.h create mode 100644 ruby/include/ruby/internal/arithmetic/size_t.h create mode 100644 ruby/include/ruby/internal/arithmetic/st_data_t.h create mode 100644 ruby/include/ruby/internal/arithmetic/uid_t.h create mode 100644 ruby/include/ruby/internal/assume.h create mode 100644 ruby/include/ruby/internal/attr/alloc_size.h create mode 100644 ruby/include/ruby/internal/attr/artificial.h create mode 100644 ruby/include/ruby/internal/attr/cold.h create mode 100644 ruby/include/ruby/internal/attr/const.h create mode 100644 ruby/include/ruby/internal/attr/constexpr.h create mode 100644 ruby/include/ruby/internal/attr/deprecated.h create mode 100644 ruby/include/ruby/internal/attr/diagnose_if.h create mode 100644 ruby/include/ruby/internal/attr/enum_extensibility.h create mode 100644 ruby/include/ruby/internal/attr/error.h create mode 100644 ruby/include/ruby/internal/attr/flag_enum.h create mode 100644 ruby/include/ruby/internal/attr/forceinline.h create mode 100644 ruby/include/ruby/internal/attr/format.h create mode 100644 ruby/include/ruby/internal/attr/maybe_unused.h create mode 100644 ruby/include/ruby/internal/attr/noalias.h create mode 100644 ruby/include/ruby/internal/attr/nodiscard.h create mode 100644 ruby/include/ruby/internal/attr/noexcept.h create mode 100644 ruby/include/ruby/internal/attr/noinline.h create mode 100644 ruby/include/ruby/internal/attr/nonnull.h create mode 100644 ruby/include/ruby/internal/attr/noreturn.h create mode 100644 ruby/include/ruby/internal/attr/pure.h create mode 100644 ruby/include/ruby/internal/attr/restrict.h create mode 100644 ruby/include/ruby/internal/attr/returns_nonnull.h create mode 100644 ruby/include/ruby/internal/attr/warning.h create mode 100644 ruby/include/ruby/internal/attr/weakref.h create mode 100644 ruby/include/ruby/internal/cast.h create mode 100644 ruby/include/ruby/internal/compiler_is.h create mode 100644 ruby/include/ruby/internal/compiler_is/apple.h create mode 100644 ruby/include/ruby/internal/compiler_is/clang.h create mode 100644 ruby/include/ruby/internal/compiler_is/gcc.h create mode 100644 ruby/include/ruby/internal/compiler_is/intel.h create mode 100644 ruby/include/ruby/internal/compiler_is/msvc.h create mode 100644 ruby/include/ruby/internal/compiler_is/sunpro.h create mode 100644 ruby/include/ruby/internal/compiler_since.h create mode 100644 ruby/include/ruby/internal/config.h create mode 100644 ruby/include/ruby/internal/constant_p.h create mode 100644 ruby/include/ruby/internal/core.h create mode 100644 ruby/include/ruby/internal/core/rarray.h create mode 100644 ruby/include/ruby/internal/core/rbasic.h create mode 100644 ruby/include/ruby/internal/core/rbignum.h create mode 100644 ruby/include/ruby/internal/core/rclass.h create mode 100644 ruby/include/ruby/internal/core/rdata.h create mode 100644 ruby/include/ruby/internal/core/rfile.h create mode 100644 ruby/include/ruby/internal/core/rhash.h create mode 100644 ruby/include/ruby/internal/core/rmatch.h create mode 100644 ruby/include/ruby/internal/core/robject.h create mode 100644 ruby/include/ruby/internal/core/rregexp.h create mode 100644 ruby/include/ruby/internal/core/rstring.h create mode 100644 ruby/include/ruby/internal/core/rstruct.h create mode 100644 ruby/include/ruby/internal/core/rtypeddata.h create mode 100644 ruby/include/ruby/internal/ctype.h create mode 100644 ruby/include/ruby/internal/dllexport.h create mode 100644 ruby/include/ruby/internal/dosish.h create mode 100644 ruby/include/ruby/internal/encoding/coderange.h create mode 100644 ruby/include/ruby/internal/encoding/ctype.h create mode 100644 ruby/include/ruby/internal/encoding/encoding.h create mode 100644 ruby/include/ruby/internal/encoding/pathname.h create mode 100644 ruby/include/ruby/internal/encoding/re.h create mode 100644 ruby/include/ruby/internal/encoding/sprintf.h create mode 100644 ruby/include/ruby/internal/encoding/string.h create mode 100644 ruby/include/ruby/internal/encoding/symbol.h create mode 100644 ruby/include/ruby/internal/encoding/transcode.h create mode 100644 ruby/include/ruby/internal/error.h create mode 100644 ruby/include/ruby/internal/eval.h create mode 100644 ruby/include/ruby/internal/event.h create mode 100644 ruby/include/ruby/internal/fl_type.h create mode 100644 ruby/include/ruby/internal/gc.h create mode 100644 ruby/include/ruby/internal/glob.h create mode 100644 ruby/include/ruby/internal/globals.h create mode 100644 ruby/include/ruby/internal/has/attribute.h create mode 100644 ruby/include/ruby/internal/has/builtin.h create mode 100644 ruby/include/ruby/internal/has/c_attribute.h create mode 100644 ruby/include/ruby/internal/has/cpp_attribute.h create mode 100644 ruby/include/ruby/internal/has/declspec_attribute.h create mode 100644 ruby/include/ruby/internal/has/extension.h create mode 100644 ruby/include/ruby/internal/has/feature.h create mode 100644 ruby/include/ruby/internal/has/warning.h create mode 100644 ruby/include/ruby/internal/intern/array.h create mode 100644 ruby/include/ruby/internal/intern/bignum.h create mode 100644 ruby/include/ruby/internal/intern/class.h create mode 100644 ruby/include/ruby/internal/intern/compar.h create mode 100644 ruby/include/ruby/internal/intern/complex.h create mode 100644 ruby/include/ruby/internal/intern/cont.h create mode 100644 ruby/include/ruby/internal/intern/dir.h create mode 100644 ruby/include/ruby/internal/intern/enum.h create mode 100644 ruby/include/ruby/internal/intern/enumerator.h create mode 100644 ruby/include/ruby/internal/intern/error.h create mode 100644 ruby/include/ruby/internal/intern/eval.h create mode 100644 ruby/include/ruby/internal/intern/file.h create mode 100644 ruby/include/ruby/internal/intern/gc.h create mode 100644 ruby/include/ruby/internal/intern/hash.h create mode 100644 ruby/include/ruby/internal/intern/io.h create mode 100644 ruby/include/ruby/internal/intern/load.h create mode 100644 ruby/include/ruby/internal/intern/marshal.h create mode 100644 ruby/include/ruby/internal/intern/numeric.h create mode 100644 ruby/include/ruby/internal/intern/object.h create mode 100644 ruby/include/ruby/internal/intern/parse.h create mode 100644 ruby/include/ruby/internal/intern/proc.h create mode 100644 ruby/include/ruby/internal/intern/process.h create mode 100644 ruby/include/ruby/internal/intern/random.h create mode 100644 ruby/include/ruby/internal/intern/range.h create mode 100644 ruby/include/ruby/internal/intern/rational.h create mode 100644 ruby/include/ruby/internal/intern/re.h create mode 100644 ruby/include/ruby/internal/intern/ruby.h create mode 100644 ruby/include/ruby/internal/intern/select.h create mode 100644 ruby/include/ruby/internal/intern/select/largesize.h create mode 100644 ruby/include/ruby/internal/intern/select/posix.h create mode 100644 ruby/include/ruby/internal/intern/select/win32.h create mode 100644 ruby/include/ruby/internal/intern/signal.h create mode 100644 ruby/include/ruby/internal/intern/sprintf.h create mode 100644 ruby/include/ruby/internal/intern/string.h create mode 100644 ruby/include/ruby/internal/intern/struct.h create mode 100644 ruby/include/ruby/internal/intern/thread.h create mode 100644 ruby/include/ruby/internal/intern/time.h create mode 100644 ruby/include/ruby/internal/intern/variable.h create mode 100644 ruby/include/ruby/internal/intern/vm.h create mode 100644 ruby/include/ruby/internal/interpreter.h create mode 100644 ruby/include/ruby/internal/iterator.h create mode 100644 ruby/include/ruby/internal/memory.h create mode 100644 ruby/include/ruby/internal/method.h create mode 100644 ruby/include/ruby/internal/module.h create mode 100644 ruby/include/ruby/internal/newobj.h create mode 100644 ruby/include/ruby/internal/rgengc.h create mode 100644 ruby/include/ruby/internal/scan_args.h create mode 100644 ruby/include/ruby/internal/special_consts.h create mode 100644 ruby/include/ruby/internal/static_assert.h create mode 100644 ruby/include/ruby/internal/stdalign.h create mode 100644 ruby/include/ruby/internal/stdbool.h create mode 100644 ruby/include/ruby/internal/symbol.h create mode 100644 ruby/include/ruby/internal/value.h create mode 100644 ruby/include/ruby/internal/value_type.h create mode 100644 ruby/include/ruby/internal/variable.h create mode 100644 ruby/include/ruby/internal/warning_push.h create mode 100644 ruby/include/ruby/internal/xmalloc.h create mode 100644 ruby/include/ruby/io/buffer.h create mode 100644 ruby/include/ruby/memory_view.h create mode 100644 ruby/include/ruby/ractor.h create mode 100644 ruby/include/ruby/random.h create mode 100644 ruby/internal/array.h create mode 100644 ruby/internal/bignum.h create mode 100644 ruby/internal/bits.h create mode 100644 ruby/internal/class.h create mode 100644 ruby/internal/compar.h create mode 100644 ruby/internal/compile.h create mode 100644 ruby/internal/compilers.h create mode 100644 ruby/internal/complex.h create mode 100644 ruby/internal/cont.h create mode 100644 ruby/internal/dir.h create mode 100644 ruby/internal/enc.h create mode 100644 ruby/internal/encoding.h create mode 100644 ruby/internal/enum.h create mode 100644 ruby/internal/enumerator.h create mode 100644 ruby/internal/error.h create mode 100644 ruby/internal/eval.h create mode 100644 ruby/internal/file.h create mode 100644 ruby/internal/fixnum.h create mode 100644 ruby/internal/gc.h create mode 100644 ruby/internal/hash.h create mode 100644 ruby/internal/imemo.h create mode 100644 ruby/internal/inits.h create mode 100644 ruby/internal/io.h create mode 100644 ruby/internal/load.h create mode 100644 ruby/internal/loadpath.h create mode 100644 ruby/internal/math.h create mode 100644 ruby/internal/missing.h create mode 100644 ruby/internal/numeric.h create mode 100644 ruby/internal/object.h create mode 100644 ruby/internal/parse.h create mode 100644 ruby/internal/proc.h create mode 100644 ruby/internal/process.h create mode 100644 ruby/internal/random.h create mode 100644 ruby/internal/range.h create mode 100644 ruby/internal/rational.h create mode 100644 ruby/internal/re.h create mode 100644 ruby/internal/sanitizers.h create mode 100644 ruby/internal/serial.h create mode 100644 ruby/internal/signal.h create mode 100644 ruby/internal/static_assert.h create mode 100644 ruby/internal/string.h create mode 100644 ruby/internal/struct.h create mode 100644 ruby/internal/symbol.h create mode 100644 ruby/internal/thread.h create mode 100644 ruby/internal/time.h create mode 100644 ruby/internal/transcode.h create mode 100644 ruby/internal/util.h create mode 100644 ruby/internal/variable.h create mode 100644 ruby/internal/vm.h create mode 100644 ruby/internal/warnings.h create mode 100644 ruby/io_buffer.c create mode 100644 ruby/kernel.rb delete mode 100644 ruby/lib/.document create mode 100644 ruby/lib/English.gemspec create mode 100644 ruby/lib/abbrev.gemspec create mode 100644 ruby/lib/base64.gemspec create mode 100644 ruby/lib/bundler/.document create mode 100644 ruby/lib/bundler/cli/fund.rb delete mode 100644 ruby/lib/bundler/cli/package.rb create mode 100644 ruby/lib/bundler/compact_index_client/gem_parser.rb create mode 100644 ruby/lib/bundler/digest.rb delete mode 100644 ruby/lib/bundler/gem_remote_fetcher.rb delete mode 100644 ruby/lib/bundler/gemdeps.rb create mode 100644 ruby/lib/bundler/man/.document rename ruby/{ => lib/bundler}/man/bundle-add.1 (80%) create mode 100644 ruby/lib/bundler/man/bundle-add.1.ronn rename ruby/{ => lib/bundler}/man/bundle-binstubs.1 (86%) create mode 100644 ruby/lib/bundler/man/bundle-binstubs.1.ronn rename ruby/{ => lib/bundler}/man/bundle-cache.1 (98%) rename ruby/{man/bundle-cache.ronn => lib/bundler/man/bundle-cache.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-check.1 (95%) rename ruby/{man/bundle-check.ronn => lib/bundler/man/bundle-check.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-clean.1 (92%) rename ruby/{man/bundle-clean.ronn => lib/bundler/man/bundle-clean.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-config.1 (84%) create mode 100644 ruby/lib/bundler/man/bundle-config.1.ronn rename ruby/{ => lib/bundler}/man/bundle-doctor.1 (95%) rename ruby/{man/bundle-doctor.ronn => lib/bundler/man/bundle-doctor.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-exec.1 (99%) rename ruby/{man/bundle-exec.ronn => lib/bundler/man/bundle-exec.1.ronn} (100%) create mode 100644 ruby/lib/bundler/man/bundle-gem.1 create mode 100644 ruby/lib/bundler/man/bundle-gem.1.ronn rename ruby/{ => lib/bundler}/man/bundle-info.1 (89%) rename ruby/{man/bundle-info.ronn => lib/bundler/man/bundle-info.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-init.1 (95%) rename ruby/{man/bundle-init.ronn => lib/bundler/man/bundle-init.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-inject.1 (93%) rename ruby/{man/bundle-inject.ronn => lib/bundler/man/bundle-inject.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-install.1 (92%) create mode 100644 ruby/lib/bundler/man/bundle-install.1.ronn create mode 100644 ruby/lib/bundler/man/bundle-list.1 create mode 100644 ruby/lib/bundler/man/bundle-list.1.ronn rename ruby/{ => lib/bundler}/man/bundle-lock.1 (98%) rename ruby/{man/bundle-lock.ronn => lib/bundler/man/bundle-lock.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-open.1 (92%) rename ruby/{man/bundle-open.ronn => lib/bundler/man/bundle-open.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-outdated.1 (98%) rename ruby/{man/bundle-outdated.ronn => lib/bundler/man/bundle-outdated.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-platform.1 (96%) rename ruby/{man/bundle-platform.ronn => lib/bundler/man/bundle-platform.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-pristine.1 (97%) rename ruby/{man/bundle-pristine.ronn => lib/bundler/man/bundle-pristine.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-remove.1 (94%) rename ruby/{man/bundle-remove.ronn => lib/bundler/man/bundle-remove.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-show.1 (93%) rename ruby/{man/bundle-show.ronn => lib/bundler/man/bundle-show.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle-update.1 (96%) create mode 100644 ruby/lib/bundler/man/bundle-update.1.ronn rename ruby/{ => lib/bundler}/man/bundle-viz.1 (96%) rename ruby/{man/bundle-viz.ronn => lib/bundler/man/bundle-viz.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/bundle.1 (98%) rename ruby/{man/bundle.ronn => lib/bundler/man/bundle.1.ronn} (100%) rename ruby/{ => lib/bundler}/man/gemfile.5 (97%) rename ruby/{ => lib/bundler}/man/gemfile.5.ronn (97%) create mode 100644 ruby/lib/bundler/man/index.txt delete mode 100644 ruby/lib/bundler/psyched_yaml.rb create mode 100644 ruby/lib/bundler/self_manager.rb create mode 100644 ruby/lib/bundler/source/rubygems_aggregate.rb create mode 100644 ruby/lib/bundler/source_map.rb create mode 100644 ruby/lib/bundler/templates/newgem/CHANGELOG.md.tt create mode 100644 ruby/lib/bundler/templates/newgem/circleci/config.yml.tt create mode 100644 ruby/lib/bundler/templates/newgem/github/workflows/main.yml.tt create mode 100644 ruby/lib/bundler/templates/newgem/gitlab-ci.yml.tt create mode 100644 ruby/lib/bundler/templates/newgem/rubocop.yml.tt create mode 100644 ruby/lib/bundler/templates/newgem/sig/newgem.rbs.tt create mode 100644 ruby/lib/bundler/templates/newgem/standard.yml.tt create mode 100644 ruby/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt create mode 100644 ruby/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt delete mode 100644 ruby/lib/bundler/templates/newgem/test/newgem_test.rb.tt create mode 100644 ruby/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt create mode 100644 ruby/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt delete mode 100644 ruby/lib/bundler/templates/newgem/test/test_helper.rb.tt create mode 100644 ruby/lib/bundler/vendor/.document delete mode 100644 ruby/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb create mode 100644 ruby/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb delete mode 100644 ruby/lib/bundler/vendor/fileutils/lib/fileutils/version.rb delete mode 100644 ruby/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb delete mode 100644 ruby/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb delete mode 100644 ruby/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb create mode 100644 ruby/lib/bundler/vendor/tmpdir/lib/tmpdir.rb create mode 100644 ruby/lib/bundler/vendor/tsort/lib/tsort.rb create mode 100644 ruby/lib/bundler/vendor/uri/lib/uri/ws.rb create mode 100644 ruby/lib/bundler/vendor/uri/lib/uri/wss.rb create mode 100644 ruby/lib/bundler/vendored_tmpdir.rb create mode 100644 ruby/lib/bundler/vendored_tsort.rb delete mode 100644 ruby/lib/cgi/version.rb create mode 100644 ruby/lib/csv/input_record_separator.rb delete mode 100644 ruby/lib/debug.rb delete mode 100644 ruby/lib/delegate/version.rb delete mode 100644 ruby/lib/did_you_mean/experimental/initializer_name_correction.rb delete mode 100644 ruby/lib/did_you_mean/experimental/ivar_name_correction.rb create mode 100644 ruby/lib/did_you_mean/formatter.rb create mode 100644 ruby/lib/did_you_mean/spell_checkers/pattern_key_name_checker.rb create mode 100644 ruby/lib/did_you_mean/spell_checkers/require_path_checker.rb create mode 100644 ruby/lib/drb/drb.gemspec create mode 100644 ruby/lib/drb/version.rb create mode 100644 ruby/lib/erb.gemspec create mode 100644 ruby/lib/erb/version.rb create mode 100644 ruby/lib/error_highlight.rb create mode 100644 ruby/lib/error_highlight/base.rb create mode 100644 ruby/lib/error_highlight/core_ext.rb create mode 100644 ruby/lib/error_highlight/error_highlight.gemspec create mode 100644 ruby/lib/error_highlight/formatter.rb create mode 100644 ruby/lib/error_highlight/version.rb create mode 100644 ruby/lib/find.gemspec delete mode 100644 ruby/lib/forwardable/version.rb delete mode 100644 ruby/lib/getoptlong/version.rb create mode 100644 ruby/lib/irb/cmd/info.rb create mode 100644 ruby/lib/irb/cmd/ls.rb create mode 100644 ruby/lib/irb/cmd/measure.rb create mode 100644 ruby/lib/irb/cmd/show_source.rb create mode 100644 ruby/lib/irb/cmd/whereami.rb create mode 100644 ruby/lib/irb/color_printer.rb delete mode 100644 ruby/lib/matrix.rb delete mode 100644 ruby/lib/matrix/eigenvalue_decomposition.rb delete mode 100644 ruby/lib/matrix/lup_decomposition.rb delete mode 100644 ruby/lib/matrix/matrix.gemspec delete mode 100644 ruby/lib/matrix/version.rb delete mode 100644 ruby/lib/net/ftp.rb create mode 100644 ruby/lib/net/http/net-http.gemspec delete mode 100644 ruby/lib/net/imap.rb create mode 100644 ruby/lib/net/net-protocol.gemspec delete mode 100644 ruby/lib/net/pop.rb delete mode 100644 ruby/lib/net/pop/net-pop.gemspec delete mode 100644 ruby/lib/net/pop/version.rb delete mode 100644 ruby/lib/net/smtp.rb delete mode 100644 ruby/lib/net/smtp/net-smtp.gemspec delete mode 100644 ruby/lib/net/smtp/version.rb delete mode 100644 ruby/lib/observer/version.rb create mode 100644 ruby/lib/open-uri.gemspec create mode 100644 ruby/lib/optparse/optparse.gemspec delete mode 100644 ruby/lib/ostruct/version.rb create mode 100644 ruby/lib/pp.gemspec create mode 100644 ruby/lib/prettyprint.gemspec delete mode 100644 ruby/lib/prime.gemspec delete mode 100644 ruby/lib/prime.rb delete mode 100644 ruby/lib/pstore/version.rb delete mode 100644 ruby/lib/racc/pre-setup delete mode 100644 ruby/lib/racc/rdoc/grammar.en.rdoc create mode 100644 ruby/lib/random/formatter.rb create mode 100644 ruby/lib/rdoc/markup/table.rb create mode 100644 ruby/lib/reline/terminfo.rb create mode 100644 ruby/lib/resolv-replace.gemspec create mode 100644 ruby/lib/resolv.gemspec delete mode 100644 ruby/lib/rexml/attlistdecl.rb delete mode 100644 ruby/lib/rexml/attribute.rb delete mode 100644 ruby/lib/rexml/cdata.rb delete mode 100644 ruby/lib/rexml/child.rb delete mode 100644 ruby/lib/rexml/comment.rb delete mode 100644 ruby/lib/rexml/doctype.rb delete mode 100644 ruby/lib/rexml/document.rb delete mode 100644 ruby/lib/rexml/dtd/attlistdecl.rb delete mode 100644 ruby/lib/rexml/dtd/dtd.rb delete mode 100644 ruby/lib/rexml/dtd/elementdecl.rb delete mode 100644 ruby/lib/rexml/dtd/entitydecl.rb delete mode 100644 ruby/lib/rexml/dtd/notationdecl.rb delete mode 100644 ruby/lib/rexml/element.rb delete mode 100644 ruby/lib/rexml/encoding.rb delete mode 100644 ruby/lib/rexml/entity.rb delete mode 100644 ruby/lib/rexml/formatters/default.rb delete mode 100644 ruby/lib/rexml/formatters/pretty.rb delete mode 100644 ruby/lib/rexml/formatters/transitive.rb delete mode 100644 ruby/lib/rexml/functions.rb delete mode 100644 ruby/lib/rexml/instruction.rb delete mode 100644 ruby/lib/rexml/light/node.rb delete mode 100644 ruby/lib/rexml/namespace.rb delete mode 100644 ruby/lib/rexml/node.rb delete mode 100644 ruby/lib/rexml/output.rb delete mode 100644 ruby/lib/rexml/parent.rb delete mode 100644 ruby/lib/rexml/parseexception.rb delete mode 100644 ruby/lib/rexml/parsers/baseparser.rb delete mode 100644 ruby/lib/rexml/parsers/lightparser.rb delete mode 100644 ruby/lib/rexml/parsers/pullparser.rb delete mode 100644 ruby/lib/rexml/parsers/sax2parser.rb delete mode 100644 ruby/lib/rexml/parsers/streamparser.rb delete mode 100644 ruby/lib/rexml/parsers/treeparser.rb delete mode 100644 ruby/lib/rexml/parsers/ultralightparser.rb delete mode 100644 ruby/lib/rexml/parsers/xpathparser.rb delete mode 100644 ruby/lib/rexml/quickpath.rb delete mode 100644 ruby/lib/rexml/rexml.gemspec delete mode 100644 ruby/lib/rexml/rexml.rb delete mode 100644 ruby/lib/rexml/sax2listener.rb delete mode 100644 ruby/lib/rexml/security.rb delete mode 100644 ruby/lib/rexml/source.rb delete mode 100644 ruby/lib/rexml/streamlistener.rb delete mode 100644 ruby/lib/rexml/text.rb delete mode 100644 ruby/lib/rexml/undefinednamespaceexception.rb delete mode 100644 ruby/lib/rexml/validation/relaxng.rb delete mode 100644 ruby/lib/rexml/validation/validation.rb delete mode 100644 ruby/lib/rexml/validation/validationexception.rb delete mode 100644 ruby/lib/rexml/xmldecl.rb delete mode 100644 ruby/lib/rexml/xmltokens.rb delete mode 100644 ruby/lib/rexml/xpath.rb delete mode 100644 ruby/lib/rexml/xpath_parser.rb create mode 100644 ruby/lib/rinda/rinda.gemspec delete mode 100644 ruby/lib/rss.rb delete mode 100644 ruby/lib/rss/0.9.rb delete mode 100644 ruby/lib/rss/1.0.rb delete mode 100644 ruby/lib/rss/2.0.rb delete mode 100644 ruby/lib/rss/atom.rb delete mode 100644 ruby/lib/rss/content.rb delete mode 100644 ruby/lib/rss/content/1.0.rb delete mode 100644 ruby/lib/rss/content/2.0.rb delete mode 100644 ruby/lib/rss/converter.rb delete mode 100644 ruby/lib/rss/dublincore.rb delete mode 100644 ruby/lib/rss/dublincore/1.0.rb delete mode 100644 ruby/lib/rss/dublincore/2.0.rb delete mode 100644 ruby/lib/rss/dublincore/atom.rb delete mode 100644 ruby/lib/rss/image.rb delete mode 100644 ruby/lib/rss/itunes.rb delete mode 100644 ruby/lib/rss/maker.rb delete mode 100644 ruby/lib/rss/maker/0.9.rb delete mode 100644 ruby/lib/rss/maker/1.0.rb delete mode 100644 ruby/lib/rss/maker/2.0.rb delete mode 100644 ruby/lib/rss/maker/atom.rb delete mode 100644 ruby/lib/rss/maker/base.rb delete mode 100644 ruby/lib/rss/maker/content.rb delete mode 100644 ruby/lib/rss/maker/dublincore.rb delete mode 100644 ruby/lib/rss/maker/entry.rb delete mode 100644 ruby/lib/rss/maker/feed.rb delete mode 100644 ruby/lib/rss/maker/image.rb delete mode 100644 ruby/lib/rss/maker/itunes.rb delete mode 100644 ruby/lib/rss/maker/slash.rb delete mode 100644 ruby/lib/rss/maker/syndication.rb delete mode 100644 ruby/lib/rss/maker/taxonomy.rb delete mode 100644 ruby/lib/rss/maker/trackback.rb delete mode 100644 ruby/lib/rss/parser.rb delete mode 100644 ruby/lib/rss/rexmlparser.rb delete mode 100644 ruby/lib/rss/rss.gemspec delete mode 100644 ruby/lib/rss/rss.rb delete mode 100644 ruby/lib/rss/slash.rb delete mode 100644 ruby/lib/rss/syndication.rb delete mode 100644 ruby/lib/rss/taxonomy.rb delete mode 100644 ruby/lib/rss/trackback.rb delete mode 100644 ruby/lib/rss/utils.rb delete mode 100644 ruby/lib/rss/version.rb delete mode 100644 ruby/lib/rss/xml-stylesheet.rb delete mode 100644 ruby/lib/rss/xml.rb delete mode 100644 ruby/lib/rss/xmlparser.rb delete mode 100644 ruby/lib/rss/xmlscanner.rb create mode 100644 ruby/lib/ruby2_keywords.gemspec create mode 100644 ruby/lib/rubygems/core_ext/tcpsocket_init.rb create mode 100644 ruby/lib/rubygems/installer_uninstaller_utils.rb create mode 100644 ruby/lib/rubygems/openssl.rb create mode 100644 ruby/lib/rubygems/optparse.rb create mode 100644 ruby/lib/rubygems/optparse/.document create mode 100644 ruby/lib/rubygems/optparse/lib/optionparser.rb create mode 100644 ruby/lib/rubygems/optparse/lib/optparse.rb create mode 100644 ruby/lib/rubygems/optparse/lib/optparse/ac.rb create mode 100644 ruby/lib/rubygems/optparse/lib/optparse/date.rb create mode 100644 ruby/lib/rubygems/optparse/lib/optparse/kwargs.rb create mode 100644 ruby/lib/rubygems/optparse/lib/optparse/shellwords.rb create mode 100644 ruby/lib/rubygems/optparse/lib/optparse/time.rb create mode 100644 ruby/lib/rubygems/optparse/lib/optparse/uri.rb create mode 100644 ruby/lib/rubygems/optparse/lib/optparse/version.rb create mode 100644 ruby/lib/rubygems/query_utils.rb create mode 100644 ruby/lib/rubygems/resolver/api_set/gem_parser.rb delete mode 100644 ruby/lib/rubygems/server.rb delete mode 100644 ruby/lib/rubygems/source_local.rb delete mode 100644 ruby/lib/rubygems/source_specific_file.rb delete mode 100644 ruby/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem delete mode 100644 ruby/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem rename ruby/lib/rubygems/ssl_certs/{index.rubygems.org => rubygems.org}/GlobalSignRootCA.pem (100%) create mode 100644 ruby/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem delete mode 100644 ruby/lib/rubygems/syck_hack.rb delete mode 100644 ruby/lib/rubygems/test_case.rb delete mode 100644 ruby/lib/rubygems/test_utilities.rb create mode 100644 ruby/lib/rubygems/tsort.rb create mode 100644 ruby/lib/rubygems/tsort/.document create mode 100644 ruby/lib/rubygems/tsort/lib/tsort.rb create mode 100644 ruby/lib/rubygems/unknown_command_spell_checker.rb create mode 100644 ruby/lib/rubygems/uri.rb delete mode 100644 ruby/lib/rubygems/uri_parser.rb delete mode 100644 ruby/lib/rubygems/uri_parsing.rb create mode 100644 ruby/lib/securerandom.gemspec create mode 100644 ruby/lib/set/set.gemspec create mode 100644 ruby/lib/set/sorted_set.rb create mode 100644 ruby/lib/shellwords.gemspec delete mode 100644 ruby/lib/singleton/version.rb create mode 100644 ruby/lib/tempfile.gemspec create mode 100644 ruby/lib/time.gemspec delete mode 100644 ruby/lib/timeout/version.rb create mode 100644 ruby/lib/tmpdir.gemspec delete mode 100644 ruby/lib/tracer.rb delete mode 100644 ruby/lib/tracer/tracer.gemspec delete mode 100644 ruby/lib/tracer/version.rb create mode 100644 ruby/lib/tsort.gemspec create mode 100644 ruby/lib/un.gemspec create mode 100644 ruby/lib/uri/ws.rb create mode 100644 ruby/lib/uri/wss.rb create mode 100644 ruby/lib/weakref/weakref.gemspec delete mode 100644 ruby/lib/webrick/httpproxy.rb delete mode 100644 ruby/lib/webrick/server.rb delete mode 100644 ruby/lib/webrick/utils.rb delete mode 100644 ruby/lib/webrick/version.rb delete mode 100644 ruby/lib/webrick/webrick.gemspec rename ruby/{bin => libexec}/erb (99%) delete mode 100755 ruby/libexec/racc2y delete mode 100755 ruby/libexec/y2racc delete mode 100644 ruby/man/bundle-add.1.txt delete mode 100644 ruby/man/bundle-add.ronn delete mode 100644 ruby/man/bundle-binstubs.1.txt delete mode 100644 ruby/man/bundle-binstubs.ronn delete mode 100644 ruby/man/bundle-cache.1.txt delete mode 100644 ruby/man/bundle-check.1.txt delete mode 100644 ruby/man/bundle-clean.1.txt delete mode 100644 ruby/man/bundle-config.1.txt delete mode 100644 ruby/man/bundle-config.ronn delete mode 100644 ruby/man/bundle-doctor.1.txt delete mode 100644 ruby/man/bundle-exec.1.txt delete mode 100644 ruby/man/bundle-gem.1 delete mode 100644 ruby/man/bundle-gem.1.txt delete mode 100644 ruby/man/bundle-gem.ronn delete mode 100644 ruby/man/bundle-info.1.txt delete mode 100644 ruby/man/bundle-init.1.txt delete mode 100644 ruby/man/bundle-inject.1.txt delete mode 100644 ruby/man/bundle-install.1.txt delete mode 100644 ruby/man/bundle-install.ronn delete mode 100644 ruby/man/bundle-list.1 delete mode 100644 ruby/man/bundle-list.1.txt delete mode 100644 ruby/man/bundle-list.ronn delete mode 100644 ruby/man/bundle-lock.1.txt delete mode 100644 ruby/man/bundle-open.1.txt delete mode 100644 ruby/man/bundle-outdated.1.txt delete mode 100644 ruby/man/bundle-package.1 delete mode 100644 ruby/man/bundle-package.1.txt delete mode 100644 ruby/man/bundle-package.ronn delete mode 100644 ruby/man/bundle-platform.1.txt delete mode 100644 ruby/man/bundle-pristine.1.txt delete mode 100644 ruby/man/bundle-remove.1.txt delete mode 100644 ruby/man/bundle-show.1.txt delete mode 100644 ruby/man/bundle-update.1.txt delete mode 100644 ruby/man/bundle-update.ronn delete mode 100644 ruby/man/bundle-viz.1.txt delete mode 100644 ruby/man/bundle.1.txt delete mode 100644 ruby/man/gemfile.5.txt create mode 100644 ruby/marshal.rb create mode 100644 ruby/memory_view.c create mode 100644 ruby/misc/lldb_disasm.py create mode 100644 ruby/misc/lldb_yjit.py mode change 100755 => 100644 ruby/misc/rb_optparse.zsh create mode 100755 ruby/misc/test_yjit_asm.sh create mode 100644 ruby/misc/yjit_asm_tests.c delete mode 100644 ruby/missing/dup2.c delete mode 100644 ruby/missing/fileblocks.c delete mode 100644 ruby/missing/finite.c delete mode 100644 ruby/missing/isinf.c delete mode 100644 ruby/missing/isnan.c delete mode 100644 ruby/missing/signbit.c delete mode 100644 ruby/missing/stdbool.h create mode 100644 ruby/nilclass.rb create mode 100644 ruby/numeric.rb create mode 100644 ruby/ractor.c create mode 100644 ruby/ractor.rb create mode 100644 ruby/ractor_core.h delete mode 100644 ruby/safe.c delete mode 100755 ruby/sample/rss/blend.rb delete mode 100755 ruby/sample/rss/convert.rb delete mode 100755 ruby/sample/rss/list_description.rb delete mode 100755 ruby/sample/rss/re_read.rb delete mode 100755 ruby/sample/rss/rss_recent.rb delete mode 100644 ruby/sample/testunit/adder.rb delete mode 100644 ruby/sample/testunit/subtracter.rb delete mode 100644 ruby/sample/testunit/tc_adder.rb delete mode 100644 ruby/sample/testunit/tc_subtracter.rb delete mode 100644 ruby/sample/testunit/ts_examples.rb delete mode 100644 ruby/sample/webrick/demo-app.rb delete mode 100644 ruby/sample/webrick/demo-multipart.cgi delete mode 100644 ruby/sample/webrick/demo-servlet.rb delete mode 100644 ruby/sample/webrick/demo-urlencoded.cgi delete mode 100644 ruby/sample/webrick/hello.cgi delete mode 100644 ruby/sample/webrick/hello.rb delete mode 100644 ruby/sample/webrick/httpd.rb delete mode 100644 ruby/sample/webrick/httpproxy.rb delete mode 100644 ruby/sample/webrick/httpsd.rb create mode 100644 ruby/scheduler.c create mode 100644 ruby/spec/bundler/bundler/digest_spec.rb delete mode 100644 ruby/spec/bundler/bundler/psyched_yaml_spec.rb create mode 100644 ruby/spec/bundler/commands/fund_spec.rb delete mode 100644 ruby/spec/bundler/install/gemfile/install_if.rb create mode 100644 ruby/spec/bundler/install/gemfile/install_if_spec.rb create mode 100644 ruby/spec/bundler/install/gems/fund_spec.rb create mode 100644 ruby/spec/bundler/plugins/uninstall_spec.rb create mode 100644 ruby/spec/bundler/realworld/ffi_spec.rb create mode 100644 ruby/spec/bundler/realworld/fixtures/warbler/.gitignore create mode 100644 ruby/spec/bundler/realworld/fixtures/warbler/Gemfile create mode 100644 ruby/spec/bundler/realworld/fixtures/warbler/Gemfile.lock create mode 100644 ruby/spec/bundler/realworld/fixtures/warbler/bin/warbler-example.rb create mode 100644 ruby/spec/bundler/realworld/fixtures/warbler/demo/demo.gemspec create mode 100644 ruby/spec/bundler/realworld/slow_perf_spec.rb create mode 100644 ruby/spec/bundler/runtime/self_management_spec.rb create mode 100644 ruby/spec/bundler/support/api_request_limit_hax.rb create mode 100644 ruby/spec/bundler/support/artifice/compact_index_partial_update_no_etag_not_incremental.rb delete mode 100644 ruby/spec/bundler/support/artifice/endpoint_api_missing.rb rename ruby/spec/bundler/support/artifice/{endopint_marshal_fail_basic_authentication.rb => endpoint_marshal_fail_basic_authentication.rb} (100%) create mode 100644 ruby/spec/bundler/support/build_metadata.rb create mode 100644 ruby/spec/bundler/support/bundle.rb delete mode 100644 ruby/spec/bundler/support/parallel.rb delete mode 100644 ruby/spec/bundler/support/sometimes.rb delete mode 100644 ruby/spec/bundler/support/streams.rb create mode 100644 ruby/spec/bundler/support/switch_rubygems.rb create mode 100644 ruby/spec/bundler/update/gems/fund_spec.rb create mode 100644 ruby/spec/mspec/.rspec delete mode 100644 ruby/spec/mspec/lib/mspec/helpers/frozen_error_class.rb create mode 100644 ruby/spec/mspec/lib/mspec/runner/formatters/stats.rb rename ruby/spec/mspec/spec/{expectations => fixtures}/should.rb (96%) create mode 100755 ruby/spec/mspec/tool/wrap_with_guard.rb create mode 100644 ruby/spec/ruby/command_line/backtrace_limit_spec.rb create mode 100644 ruby/spec/ruby/command_line/dash_l_spec.rb create mode 100644 ruby/spec/ruby/command_line/fixtures/backtrace.rb create mode 100644 ruby/spec/ruby/core/array/deconstruct_spec.rb create mode 100644 ruby/spec/ruby/core/array/intersect_spec.rb create mode 100644 ruby/spec/ruby/core/array/minmax_spec.rb create mode 100644 ruby/spec/ruby/core/array/shared/intersection.rb create mode 100644 ruby/spec/ruby/core/class/subclasses_spec.rb create mode 100644 ruby/spec/ruby/core/complex/comparison_spec.rb delete mode 100644 ruby/spec/ruby/core/complex/spaceship_spec.rb create mode 100644 ruby/spec/ruby/core/complex/to_c_spec.rb create mode 100644 ruby/spec/ruby/core/conditionvariable/broadcast_spec.rb rename ruby/spec/ruby/{library => core}/conditionvariable/marshal_dump_spec.rb (100%) create mode 100644 ruby/spec/ruby/core/conditionvariable/signal_spec.rb create mode 100644 ruby/spec/ruby/core/conditionvariable/wait_spec.rb delete mode 100644 ruby/spec/ruby/core/dir/exists_spec.rb create mode 100644 ruby/spec/ruby/core/enumerator/lazy/eager_spec.rb create mode 100644 ruby/spec/ruby/core/enumerator/lazy/filter_map_spec.rb create mode 100644 ruby/spec/ruby/core/enumerator/lazy/with_index_spec.rb create mode 100644 ruby/spec/ruby/core/enumerator/produce_spec.rb create mode 100644 ruby/spec/ruby/core/enumerator/yielder/to_proc_spec.rb create mode 100644 ruby/spec/ruby/core/env/except_spec.rb create mode 100644 ruby/spec/ruby/core/env/fixtures/common.rb delete mode 100644 ruby/spec/ruby/core/exception/destination_encoding_name_spec.rb delete mode 100644 ruby/spec/ruby/core/exception/destination_encoding_spec.rb delete mode 100644 ruby/spec/ruby/core/exception/error_bytes_spec.rb delete mode 100644 ruby/spec/ruby/core/exception/error_char_spec.rb delete mode 100644 ruby/spec/ruby/core/exception/incomplete_input_spec.rb delete mode 100644 ruby/spec/ruby/core/exception/initialize_spec.rb delete mode 100644 ruby/spec/ruby/core/exception/range_error_spec.rb delete mode 100644 ruby/spec/ruby/core/exception/readagain_bytes_spec.rb delete mode 100644 ruby/spec/ruby/core/exception/source_encoding_name_spec.rb delete mode 100644 ruby/spec/ruby/core/exception/source_encoding_spec.rb create mode 100644 ruby/spec/ruby/core/exception/system_exit_spec.rb delete mode 100644 ruby/spec/ruby/core/exception/system_stack_error_spec.rb create mode 100644 ruby/spec/ruby/core/exception/top_level_spec.rb create mode 100644 ruby/spec/ruby/core/fiber/blocking_spec.rb create mode 100644 ruby/spec/ruby/core/fiber/fixtures/classes.rb create mode 100644 ruby/spec/ruby/core/fiber/raise_spec.rb create mode 100644 ruby/spec/ruby/core/fiber/shared/blocking.rb delete mode 100644 ruby/spec/ruby/core/file/exists_spec.rb delete mode 100644 ruby/spec/ruby/core/filetest/exists_spec.rb create mode 100644 ruby/spec/ruby/core/float/inspect_spec.rb create mode 100644 ruby/spec/ruby/core/float/negative_spec.rb create mode 100644 ruby/spec/ruby/core/float/positive_spec.rb create mode 100644 ruby/spec/ruby/core/float/shared/to_s.rb create mode 100644 ruby/spec/ruby/core/gc/auto_compact_spec.rb create mode 100644 ruby/spec/ruby/core/gc/measure_total_time_spec.rb create mode 100644 ruby/spec/ruby/core/gc/total_time_spec.rb create mode 100644 ruby/spec/ruby/core/hash/deconstruct_keys_spec.rb create mode 100644 ruby/spec/ruby/core/hash/except_spec.rb create mode 100644 ruby/spec/ruby/core/hash/fixtures/name.rb create mode 100644 ruby/spec/ruby/core/hash/ruby2_keywords_hash_spec.rb create mode 100644 ruby/spec/ruby/core/integer/try_convert_spec.rb create mode 100644 ruby/spec/ruby/core/integer/zero_spec.rb create mode 100644 ruby/spec/ruby/core/io/fixtures/copy_in_out.rb create mode 100644 ruby/spec/ruby/core/io/nonblock_spec.rb create mode 100644 ruby/spec/ruby/core/io/set_encoding_by_bom_spec.rb create mode 100644 ruby/spec/ruby/core/kernel/fixtures/__dir__.rb create mode 100644 ruby/spec/ruby/core/kernel/fixtures/at_exit.rb create mode 100644 ruby/spec/ruby/core/kernel/fixtures/warn_core_method.rb create mode 100644 ruby/spec/ruby/core/kernel/fixtures/warn_require.rb create mode 100644 ruby/spec/ruby/core/kernel/fixtures/warn_require_caller.rb create mode 100644 ruby/spec/ruby/core/kernel/initialize_clone_spec.rb create mode 100644 ruby/spec/ruby/core/kernel/initialize_copy_spec.rb create mode 100644 ruby/spec/ruby/core/kernel/initialize_dup_spec.rb create mode 100644 ruby/spec/ruby/core/main/ruby2_keywords_spec.rb create mode 100644 ruby/spec/ruby/core/matchdata/fixtures/classes.rb create mode 100644 ruby/spec/ruby/core/matchdata/match_length_spec.rb create mode 100644 ruby/spec/ruby/core/matchdata/match_spec.rb delete mode 100644 ruby/spec/ruby/core/module/allocate_spec.rb create mode 100644 ruby/spec/ruby/core/module/const_source_location_spec.rb create mode 100644 ruby/spec/ruby/core/module/fixtures/autoload_during_require_current_file.rb create mode 100644 ruby/spec/ruby/core/module/fixtures/autoload_location.rb create mode 100644 ruby/spec/ruby/core/module/fixtures/autoload_required_directly_no_constant.rb create mode 100644 ruby/spec/ruby/core/module/ruby2_keywords_spec.rb create mode 100644 ruby/spec/ruby/core/nil/case_compare_spec.rb create mode 100644 ruby/spec/ruby/core/numeric/clone_spec.rb create mode 100644 ruby/spec/ruby/core/numeric/dup_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/each_key_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/each_pair_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/each_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/each_value_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/element_reference_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/element_set_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/include_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/inspect_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/key_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/keys_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/length_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/member_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/shared/each.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/shared/include.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/shared/members.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/shared/size.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/size_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap/values_spec.rb create mode 100644 ruby/spec/ruby/core/objectspace/weakmap_spec.rb create mode 100644 ruby/spec/ruby/core/proc/ruby2_keywords_spec.rb create mode 100644 ruby/spec/ruby/core/process/status/wait_spec.rb create mode 100644 ruby/spec/ruby/core/queue/initialize_spec.rb delete mode 100644 ruby/spec/ruby/core/random/urandom_spec.rb create mode 100644 ruby/spec/ruby/core/range/count_spec.rb create mode 100644 ruby/spec/ruby/core/range/minmax_spec.rb delete mode 100644 ruby/spec/ruby/core/string/percent_spec.rb create mode 100644 ruby/spec/ruby/core/string/shared/partition.rb create mode 100644 ruby/spec/ruby/core/string/shared/strip.rb create mode 100644 ruby/spec/ruby/core/struct/deconstruct_keys_spec.rb create mode 100644 ruby/spec/ruby/core/struct/deconstruct_spec.rb create mode 100644 ruby/spec/ruby/core/symbol/end_with_spec.rb create mode 100644 ruby/spec/ruby/core/symbol/name_spec.rb create mode 100644 ruby/spec/ruby/core/symbol/start_with_spec.rb create mode 100644 ruby/spec/ruby/core/thread/backtrace/location/fixtures/absolute_path_main.rb create mode 100644 ruby/spec/ruby/core/thread/backtrace/location/fixtures/path.rb create mode 100644 ruby/spec/ruby/core/thread/handle_interrupt_spec.rb create mode 100644 ruby/spec/ruby/core/thread/ignore_deadlock_spec.rb create mode 100644 ruby/spec/ruby/core/thread/pending_interrupt_spec.rb create mode 100644 ruby/spec/ruby/core/true/case_compare_spec.rb create mode 100644 ruby/spec/ruby/core/warning/element_reference_spec.rb create mode 100644 ruby/spec/ruby/core/warning/element_set_spec.rb create mode 100644 ruby/spec/ruby/language/END_spec.rb create mode 100644 ruby/spec/ruby/language/comment_spec.rb create mode 100644 ruby/spec/ruby/language/delegation_spec.rb create mode 100644 ruby/spec/ruby/language/fixtures/delegation.rb create mode 100644 ruby/spec/ruby/language/fixtures/rescue_captures.rb create mode 100644 ruby/spec/ruby/language/numbered_parameters_spec.rb create mode 100644 ruby/spec/ruby/language/pattern_matching_spec.rb create mode 100644 ruby/spec/ruby/language/regexp/empty_checks_spec.rb create mode 100644 ruby/spec/ruby/language/regexp/subexpression_call_spec.rb create mode 100644 ruby/spec/ruby/library/English/alias_spec.rb delete mode 100644 ruby/spec/ruby/library/conditionvariable/broadcast_spec.rb delete mode 100644 ruby/spec/ruby/library/conditionvariable/signal_spec.rb delete mode 100644 ruby/spec/ruby/library/conditionvariable/wait_spec.rb create mode 100644 ruby/spec/ruby/library/coverage/fixtures/eval_code.rb create mode 100644 ruby/spec/ruby/library/digest/instance/append_spec.rb create mode 100644 ruby/spec/ruby/library/digest/instance/new_spec.rb create mode 100644 ruby/spec/ruby/library/digest/instance/shared/update.rb create mode 100644 ruby/spec/ruby/library/digest/instance/update_spec.rb create mode 100644 ruby/spec/ruby/library/digest/sha2/hexdigest_spec.rb delete mode 100644 ruby/spec/ruby/library/mathn/bignum/exponent_spec.rb delete mode 100644 ruby/spec/ruby/library/mathn/complex/Complex_spec.rb delete mode 100644 ruby/spec/ruby/library/mathn/fixnum/exponent_spec.rb delete mode 100644 ruby/spec/ruby/library/mathn/float/exponent_spec.rb delete mode 100644 ruby/spec/ruby/library/mathn/integer/from_prime_division_spec.rb delete mode 100644 ruby/spec/ruby/library/mathn/integer/prime_division_spec.rb delete mode 100644 ruby/spec/ruby/library/mathn/math/fixtures/classes.rb delete mode 100644 ruby/spec/ruby/library/mathn/math/rsqrt_spec.rb delete mode 100644 ruby/spec/ruby/library/mathn/math/shared/rsqrt.rb delete mode 100644 ruby/spec/ruby/library/mathn/math/shared/sqrt.rb delete mode 100644 ruby/spec/ruby/library/mathn/math/sqrt_spec.rb delete mode 100644 ruby/spec/ruby/library/mathn/mathn_spec.rb delete mode 100644 ruby/spec/ruby/library/mathn/rational/Rational_spec.rb delete mode 100644 ruby/spec/ruby/library/mathn/rational/inspect_spec.rb create mode 100644 ruby/spec/ruby/library/monitor/enter_spec.rb create mode 100644 ruby/spec/ruby/library/monitor/new_cond_spec.rb create mode 100644 ruby/spec/ruby/library/monitor/synchronize_spec.rb create mode 100644 ruby/spec/ruby/library/monitor/try_enter_spec.rb create mode 100644 ruby/spec/ruby/library/objectspace/memsize_of_all_spec.rb create mode 100644 ruby/spec/ruby/library/objectspace/trace_object_allocations_spec.rb create mode 100644 ruby/spec/ruby/library/openssl/digest_spec.rb create mode 100644 ruby/spec/ruby/library/pathname/divide_spec.rb create mode 100644 ruby/spec/ruby/library/pathname/glob_spec.rb create mode 100644 ruby/spec/ruby/library/pathname/inspect_spec.rb create mode 100644 ruby/spec/ruby/library/pathname/pathname_spec.rb create mode 100644 ruby/spec/ruby/library/pathname/plus_spec.rb create mode 100644 ruby/spec/ruby/library/pathname/shared/plus.rb create mode 100644 ruby/spec/ruby/library/ripper/lex_spec.rb create mode 100644 ruby/spec/ruby/library/ripper/sexp_spec.rb create mode 100644 ruby/spec/ruby/library/rubygems/gem/load_path_insert_index_spec.rb create mode 100644 ruby/spec/ruby/library/set/comparison_spec.rb create mode 100644 ruby/spec/ruby/library/set/initialize_clone_spec.rb create mode 100644 ruby/spec/ruby/library/set/join_spec.rb create mode 100644 ruby/spec/ruby/library/set/sortedset/sortedset_spec.rb create mode 100644 ruby/spec/ruby/library/socket/basicsocket/local_address_spec.rb create mode 100644 ruby/spec/ruby/library/socket/basicsocket/remote_address_spec.rb create mode 100644 ruby/spec/ruby/library/socket/shared/address.rb delete mode 100644 ruby/spec/ruby/library/socket/tcpsocket/new_spec.rb create mode 100644 ruby/spec/ruby/library/stringio/getpass_spec.rb create mode 100644 ruby/spec/ruby/library/stringio/inspect_spec.rb delete mode 100644 ruby/spec/ruby/library/stringscanner/shared/matched_size.rb create mode 100644 ruby/spec/ruby/library/stringscanner/size_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/add_builtin_type_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/add_domain_type_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/add_private_type_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/add_ruby_type_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/detect_implicit_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/each_node_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/emitter_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/generic_parser_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/load_documents_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/object_maker_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/parse_documents_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/parser_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/quick_emit_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/read_type_class_spec.rb create mode 100644 ruby/spec/ruby/library/yaml/shared/load.rb delete mode 100644 ruby/spec/ruby/library/yaml/tagurize_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/transfer_spec.rb delete mode 100644 ruby/spec/ruby/library/yaml/try_implicit_spec.rb create mode 100644 ruby/spec/ruby/library/yaml/unsafe_load_spec.rb create mode 100644 ruby/spec/ruby/optional/capi/basic_object_spec.rb create mode 100644 ruby/spec/ruby/optional/capi/binding_spec.rb create mode 100644 ruby/spec/ruby/optional/capi/debug_spec.rb create mode 100644 ruby/spec/ruby/optional/capi/ext/basic_object_spec.c create mode 100644 ruby/spec/ruby/optional/capi/ext/binding_spec.c create mode 100644 ruby/spec/ruby/optional/capi/ext/debug_spec.c create mode 100644 ruby/spec/ruby/optional/capi/ext/fiber_spec.c create mode 100644 ruby/spec/ruby/optional/capi/ext/language_spec.c create mode 100644 ruby/spec/ruby/optional/capi/ext/rbasic_spec.c create mode 100644 ruby/spec/ruby/optional/capi/ext/tracepoint_spec.c create mode 100644 ruby/spec/ruby/optional/capi/fiber_spec.rb create mode 100644 ruby/spec/ruby/optional/capi/fixtures/read.txt create mode 100644 ruby/spec/ruby/optional/capi/language_spec.rb create mode 100644 ruby/spec/ruby/optional/capi/rbasic_spec.rb create mode 100644 ruby/spec/ruby/optional/capi/shared/rbasic.rb create mode 100644 ruby/spec/ruby/optional/capi/tracepoint_spec.rb create mode 100644 ruby/spec/ruby/security/cve_2020_10663_spec.rb create mode 100644 ruby/spec/ruby/shared/enumerable/minmax.rb create mode 100644 ruby/spec/ruby/shared/string/end_with.rb create mode 100644 ruby/spec/ruby/shared/string/start_with.rb delete mode 100644 ruby/squash.h delete mode 100644 ruby/squash/cache.h delete mode 100644 ruby/squash/common.h delete mode 100644 ruby/squash/decompress.h delete mode 100644 ruby/squash/dir.h delete mode 100644 ruby/squash/dirent.h delete mode 100644 ruby/squash/fdtable.h delete mode 100644 ruby/squash/file.h delete mode 100644 ruby/squash/fs.h delete mode 100644 ruby/squash/hash.h delete mode 100644 ruby/squash/mutex.h delete mode 100644 ruby/squash/nonstd.h delete mode 100644 ruby/squash/private.h delete mode 100644 ruby/squash/squashfs_fs.h delete mode 100644 ruby/squash/stack.h delete mode 100644 ruby/squash/table.h delete mode 100644 ruby/squash/traverse.h delete mode 100644 ruby/squash/util.h delete mode 100644 ruby/squash/windows.h delete mode 100644 ruby/squash_cache.c delete mode 100644 ruby/squash_decompress.c delete mode 100644 ruby/squash_dir.c delete mode 100644 ruby/squash_dirent.c delete mode 100644 ruby/squash_extract.c delete mode 100644 ruby/squash_fd.c delete mode 100644 ruby/squash_file.c delete mode 100644 ruby/squash_fs.c delete mode 100644 ruby/squash_hash.c delete mode 100644 ruby/squash_mutex.c delete mode 100644 ruby/squash_nonstd-makedev.c delete mode 100644 ruby/squash_nonstd-stat.c delete mode 100644 ruby/squash_private.c delete mode 100644 ruby/squash_readlink.c delete mode 100644 ruby/squash_scandir.c delete mode 100644 ruby/squash_stack.c delete mode 100644 ruby/squash_stat.c delete mode 100644 ruby/squash_table.c delete mode 100644 ruby/squash_traverse.c delete mode 100644 ruby/squash_util.c create mode 100644 ruby/template/builtin_binary.inc.tmpl create mode 100644 ruby/template/call_iseq_optimized.inc.tmpl create mode 100755 ruby/template/ruby-gdb.in create mode 100755 ruby/template/ruby-lldb.in create mode 100644 ruby/test/-ext-/array/test_to_ary_concat.rb create mode 100644 ruby/test/-ext-/string/test_interned_str.rb create mode 100644 ruby/test/-ext-/test_random.rb rename ruby/test/-ext-/{thread_fd_close => thread_fd}/test_thread_fd_close.rb (93%) create mode 100644 ruby/test/-ext-/wait/test_wait.rb delete mode 100644 ruby/test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb create mode 100644 ruby/test/bigdecimal/helper.rb create mode 100644 ruby/test/bigdecimal/test_ractor.rb delete mode 100644 ruby/test/bigdecimal/testbase.rb create mode 100644 ruby/test/csv/write/test_force_quotes.rb create mode 100644 ruby/test/date/test_date_ractor.rb delete mode 100644 ruby/test/dbm/test_dbm.rb create mode 100644 ruby/test/did_you_mean/spell_checking/test_pattern_key_name_check.rb create mode 100644 ruby/test/did_you_mean/spell_checking/test_require_path_check.rb delete mode 100644 ruby/test/did_you_mean/test_verbose_formatter.rb create mode 100644 ruby/test/digest/test_ractor.rb create mode 100644 ruby/test/error_highlight/test_error_highlight.rb create mode 100644 ruby/test/excludes/TestArray.rb create mode 100644 ruby/test/fiber/http.rb create mode 100644 ruby/test/fiber/scheduler.rb create mode 100644 ruby/test/fiber/test_address_resolve.rb create mode 100644 ruby/test/fiber/test_backtrace.rb create mode 100644 ruby/test/fiber/test_enumerator.rb create mode 100644 ruby/test/fiber/test_io.rb create mode 100644 ruby/test/fiber/test_io_buffer.rb create mode 100644 ruby/test/fiber/test_mutex.rb create mode 100644 ruby/test/fiber/test_process.rb create mode 100644 ruby/test/fiber/test_ractor.rb create mode 100644 ruby/test/fiber/test_scheduler.rb create mode 100644 ruby/test/fiber/test_sleep.rb create mode 100644 ruby/test/fiber/test_thread.rb create mode 100644 ruby/test/fiber/test_timeout.rb create mode 100644 ruby/test/fiddle/test_c_struct_builder.rb create mode 100644 ruby/test/fiddle/test_memory_view.rb create mode 100644 ruby/test/fiddle/test_pinned.rb create mode 100644 ruby/test/fixtures/fake_sorted_set_gem/sorted_set.rb delete mode 100644 ruby/test/gdbm/test_gdbm.rb create mode 100644 ruby/test/io/wait/test_ractor.rb create mode 100644 ruby/test/irb/test_cmd.rb create mode 100644 ruby/test/irb/test_color_printer.rb create mode 100644 ruby/test/irb/test_history.rb create mode 100644 ruby/test/irb/yamatanooroti/test_rendering.rb create mode 100644 ruby/test/json/fixtures/fail29.json create mode 100644 ruby/test/json/fixtures/fail30.json create mode 100644 ruby/test/json/fixtures/fail31.json create mode 100644 ruby/test/json/fixtures/fail32.json create mode 100644 ruby/test/json/ractor_test.rb delete mode 100644 ruby/test/logger/helper.rb create mode 100644 ruby/test/logger/test_formatter.rb delete mode 100644 ruby/test/matrix/test_matrix.rb delete mode 100644 ruby/test/matrix/test_vector.rb delete mode 100644 ruby/test/misc/test_ruby_mode.rb create mode 100644 ruby/test/mkmf/test_egrep_cpp.rb create mode 100644 ruby/test/mkmf/test_install.rb create mode 100644 ruby/test/mkmf/test_mkmf.rb delete mode 100644 ruby/test/net/ftp/test_buffered_socket.rb delete mode 100644 ruby/test/net/ftp/test_ftp.rb delete mode 100644 ruby/test/net/ftp/test_mlsx_entry.rb delete mode 100644 ruby/test/net/imap/test_imap.rb delete mode 100644 ruby/test/net/imap/test_imap_response_parser.rb delete mode 100644 ruby/test/net/pop/test_pop.rb delete mode 100644 ruby/test/net/smtp/test_response.rb delete mode 100644 ruby/test/net/smtp/test_smtp.rb delete mode 100644 ruby/test/net/smtp/test_ssl_socket.rb create mode 100644 ruby/test/openssl/fixtures/pkey/certificate.der create mode 100644 ruby/test/openssl/fixtures/pkey/empty.der create mode 100644 ruby/test/openssl/fixtures/pkey/empty.pem create mode 100644 ruby/test/openssl/fixtures/pkey/fullchain.pem create mode 100644 ruby/test/openssl/fixtures/pkey/garbage.txt create mode 100644 ruby/test/openssl/test_ossl.rb create mode 100644 ruby/test/openssl/test_pkey.rb create mode 100644 ruby/test/openssl/test_ts.rb create mode 100644 ruby/test/pathname/test_ractor.rb create mode 100644 ruby/test/psych/test_ractor.rb create mode 100644 ruby/test/racc/assets/ifelse.y create mode 100644 ruby/test/racc/case.rb delete mode 100644 ruby/test/racc/helper.rb create mode 100644 ruby/test/reline/test_reline_key.rb create mode 100644 ruby/test/reline/test_terminfo.rb create mode 100644 ruby/test/reline/test_unicode.rb create mode 100644 ruby/test/reline/windows/test_key_event_record.rb create mode 100755 ruby/test/reline/yamatanooroti/multiline_repl create mode 100644 ruby/test/reline/yamatanooroti/termination_checker.rb delete mode 100644 ruby/test/rexml/data/LostineRiver.kml.gz delete mode 100644 ruby/test/rexml/data/ProductionSupport.xml delete mode 100644 ruby/test/rexml/data/axis.xml delete mode 100644 ruby/test/rexml/data/bad.xml delete mode 100644 ruby/test/rexml/data/basic.xml delete mode 100644 ruby/test/rexml/data/basicupdate.xml delete mode 100644 ruby/test/rexml/data/broken.rss delete mode 100644 ruby/test/rexml/data/contents.xml delete mode 100644 ruby/test/rexml/data/dash.xml delete mode 100644 ruby/test/rexml/data/defaultNamespace.xml delete mode 100644 ruby/test/rexml/data/doctype_test.xml delete mode 100644 ruby/test/rexml/data/documentation.xml delete mode 100644 ruby/test/rexml/data/euc.xml delete mode 100644 ruby/test/rexml/data/evaluate.xml delete mode 100644 ruby/test/rexml/data/fibo.xml delete mode 100644 ruby/test/rexml/data/foo.xml delete mode 100644 ruby/test/rexml/data/google.2.xml delete mode 100644 ruby/test/rexml/data/id.xml delete mode 100644 ruby/test/rexml/data/iso8859-1.xml delete mode 100644 ruby/test/rexml/data/jaxen24.xml delete mode 100644 ruby/test/rexml/data/jaxen3.xml delete mode 100644 ruby/test/rexml/data/lang.xml delete mode 100644 ruby/test/rexml/data/lang0.xml delete mode 100644 ruby/test/rexml/data/message.xml delete mode 100644 ruby/test/rexml/data/moreover.xml delete mode 100644 ruby/test/rexml/data/much_ado.xml delete mode 100644 ruby/test/rexml/data/namespaces.xml delete mode 100644 ruby/test/rexml/data/nitf.xml delete mode 100644 ruby/test/rexml/data/numbers.xml delete mode 100644 ruby/test/rexml/data/ofbiz-issues-full-177.xml delete mode 100644 ruby/test/rexml/data/pi.xml delete mode 100644 ruby/test/rexml/data/pi2.xml delete mode 100644 ruby/test/rexml/data/project.xml delete mode 100644 ruby/test/rexml/data/simple.xml delete mode 100644 ruby/test/rexml/data/stream_accents.xml delete mode 100644 ruby/test/rexml/data/t63-1.xml delete mode 100644 ruby/test/rexml/data/t63-2.svg delete mode 100644 ruby/test/rexml/data/t75.xml delete mode 100644 ruby/test/rexml/data/test/tests.xml delete mode 100644 ruby/test/rexml/data/test/tests.xsl delete mode 100644 ruby/test/rexml/data/testNamespaces.xml delete mode 100644 ruby/test/rexml/data/testsrc.xml delete mode 100644 ruby/test/rexml/data/text.xml delete mode 100644 ruby/test/rexml/data/ticket_61.xml delete mode 100644 ruby/test/rexml/data/ticket_68.xml delete mode 100644 ruby/test/rexml/data/tutorial.xml delete mode 100644 ruby/test/rexml/data/underscore.xml delete mode 100644 ruby/test/rexml/data/utf16.xml delete mode 100644 ruby/test/rexml/data/web.xml delete mode 100644 ruby/test/rexml/data/web2.xml delete mode 100644 ruby/test/rexml/data/working.rss delete mode 100644 ruby/test/rexml/data/xmlfile-bug.xml delete mode 100644 ruby/test/rexml/data/xp.tst delete mode 100644 ruby/test/rexml/data/yahoo.xml delete mode 100644 ruby/test/rexml/formatter/test_default.rb delete mode 100644 ruby/test/rexml/functions/test_base.rb delete mode 100644 ruby/test/rexml/functions/test_boolean.rb delete mode 100644 ruby/test/rexml/functions/test_local_name.rb delete mode 100644 ruby/test/rexml/functions/test_number.rb delete mode 100644 ruby/test/rexml/listener.rb delete mode 100644 ruby/test/rexml/parse/test_document_type_declaration.rb delete mode 100644 ruby/test/rexml/parse/test_element.rb delete mode 100644 ruby/test/rexml/parse/test_notation_declaration.rb delete mode 100644 ruby/test/rexml/parse/test_processing_instruction.rb delete mode 100644 ruby/test/rexml/parser/test_sax2.rb delete mode 100644 ruby/test/rexml/parser/test_stream.rb delete mode 100644 ruby/test/rexml/parser/test_tree.rb delete mode 100644 ruby/test/rexml/parser/test_ultra_light.rb delete mode 100644 ruby/test/rexml/rexml_test_utils.rb delete mode 100644 ruby/test/rexml/test_attribute.rb delete mode 100644 ruby/test/rexml/test_attributes.rb delete mode 100644 ruby/test/rexml/test_attributes_mixin.rb delete mode 100644 ruby/test/rexml/test_changing_encoding.rb delete mode 100644 ruby/test/rexml/test_comment.rb delete mode 100644 ruby/test/rexml/test_contrib.rb delete mode 100644 ruby/test/rexml/test_core.rb delete mode 100644 ruby/test/rexml/test_doctype.rb delete mode 100644 ruby/test/rexml/test_document.rb delete mode 100644 ruby/test/rexml/test_element.rb delete mode 100644 ruby/test/rexml/test_elements.rb delete mode 100644 ruby/test/rexml/test_encoding.rb delete mode 100644 ruby/test/rexml/test_entity.rb delete mode 100644 ruby/test/rexml/test_instruction.rb delete mode 100644 ruby/test/rexml/test_jaxen.rb delete mode 100644 ruby/test/rexml/test_light.rb delete mode 100644 ruby/test/rexml/test_lightparser.rb delete mode 100644 ruby/test/rexml/test_listener.rb delete mode 100644 ruby/test/rexml/test_martin_fowler.rb delete mode 100644 ruby/test/rexml/test_namespace.rb delete mode 100644 ruby/test/rexml/test_order.rb delete mode 100644 ruby/test/rexml/test_preceding_sibling.rb delete mode 100644 ruby/test/rexml/test_pullparser.rb delete mode 100644 ruby/test/rexml/test_rexml_issuezilla.rb delete mode 100644 ruby/test/rexml/test_sax.rb delete mode 100644 ruby/test/rexml/test_stream.rb delete mode 100644 ruby/test/rexml/test_text.rb delete mode 100644 ruby/test/rexml/test_ticket_80.rb delete mode 100644 ruby/test/rexml/test_validation_rng.rb delete mode 100644 ruby/test/rexml/test_xml_declaration.rb delete mode 100644 ruby/test/rexml/xpath/test_attribute.rb delete mode 100644 ruby/test/rexml/xpath/test_axis_preceding_sibling.rb delete mode 100644 ruby/test/rexml/xpath/test_base.rb delete mode 100644 ruby/test/rexml/xpath/test_compare.rb delete mode 100644 ruby/test/rexml/xpath/test_node.rb delete mode 100644 ruby/test/rexml/xpath/test_predicate.rb delete mode 100644 ruby/test/rexml/xpath/test_text.rb delete mode 100644 ruby/test/rss/dot.png delete mode 100644 ruby/test/rss/rss-assertions.rb delete mode 100644 ruby/test/rss/rss-testcase.rb delete mode 100644 ruby/test/rss/test_1.0.rb delete mode 100644 ruby/test/rss/test_2.0.rb delete mode 100644 ruby/test/rss/test_accessor.rb delete mode 100644 ruby/test/rss/test_atom.rb delete mode 100644 ruby/test/rss/test_content.rb delete mode 100644 ruby/test/rss/test_dublincore.rb delete mode 100644 ruby/test/rss/test_image.rb delete mode 100644 ruby/test/rss/test_inherit.rb delete mode 100644 ruby/test/rss/test_itunes.rb delete mode 100644 ruby/test/rss/test_maker_0.9.rb delete mode 100644 ruby/test/rss/test_maker_1.0.rb delete mode 100644 ruby/test/rss/test_maker_2.0.rb delete mode 100644 ruby/test/rss/test_maker_atom_entry.rb delete mode 100644 ruby/test/rss/test_maker_atom_feed.rb delete mode 100644 ruby/test/rss/test_maker_content.rb delete mode 100644 ruby/test/rss/test_maker_dc.rb delete mode 100644 ruby/test/rss/test_maker_image.rb delete mode 100644 ruby/test/rss/test_maker_itunes.rb delete mode 100644 ruby/test/rss/test_maker_slash.rb delete mode 100644 ruby/test/rss/test_maker_sy.rb delete mode 100644 ruby/test/rss/test_maker_taxo.rb delete mode 100644 ruby/test/rss/test_maker_trackback.rb delete mode 100644 ruby/test/rss/test_maker_xml-stylesheet.rb delete mode 100644 ruby/test/rss/test_parser.rb delete mode 100644 ruby/test/rss/test_parser_1.0.rb delete mode 100644 ruby/test/rss/test_parser_2.0.rb delete mode 100644 ruby/test/rss/test_parser_atom_entry.rb delete mode 100644 ruby/test/rss/test_parser_atom_feed.rb delete mode 100644 ruby/test/rss/test_setup_maker_0.9.rb delete mode 100644 ruby/test/rss/test_setup_maker_1.0.rb delete mode 100644 ruby/test/rss/test_setup_maker_2.0.rb delete mode 100644 ruby/test/rss/test_setup_maker_atom_entry.rb delete mode 100644 ruby/test/rss/test_setup_maker_atom_feed.rb delete mode 100644 ruby/test/rss/test_setup_maker_itunes.rb delete mode 100644 ruby/test/rss/test_setup_maker_slash.rb delete mode 100644 ruby/test/rss/test_slash.rb delete mode 100644 ruby/test/rss/test_syndication.rb delete mode 100644 ruby/test/rss/test_taxonomy.rb delete mode 100644 ruby/test/rss/test_to_s.rb delete mode 100644 ruby/test/rss/test_trackback.rb delete mode 100644 ruby/test/rss/test_xml-stylesheet.rb create mode 100644 ruby/test/ruby/test_frozen_error.rb create mode 100644 ruby/test/ruby/test_inlinecache.rb create mode 100644 ruby/test/ruby/test_insns_leaf.rb create mode 100644 ruby/test/ruby/test_io_buffer.rb create mode 100644 ruby/test/ruby/test_jit_debug.rb create mode 100644 ruby/test/ruby/test_memory_view.rb create mode 100644 ruby/test/ruby/test_method_cache.rb create mode 100644 ruby/test/ruby/test_name_error.rb create mode 100644 ruby/test/ruby/test_nomethod_error.rb delete mode 100644 ruby/test/ruby/test_notimp.rb create mode 100644 ruby/test/ruby/test_random_formatter.rb create mode 100644 ruby/test/ruby/test_rubyvm_jit.rb delete mode 100644 ruby/test/ruby/test_rubyvm_mjit.rb create mode 100644 ruby/test/ruby/test_stack.rb create mode 100644 ruby/test/ruby/test_yjit.rb delete mode 100644 ruby/test/rubygems/bogussources.rb create mode 100644 ruby/test/rubygems/data/null-required-ruby-version.gemspec.rz create mode 100644 ruby/test/rubygems/data/null-required-rubygems-version.gemspec.rz create mode 100644 ruby/test/rubygems/helper.rb rename ruby/{lib => test}/rubygems/installer_test_case.rb (83%) rename ruby/{lib => test}/rubygems/package/tar_test_case.rb (95%) create mode 100644 ruby/test/rubygems/packages/ascii_binder-0.1.10.1.gem create mode 100644 ruby/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem create mode 100644 ruby/test/rubygems/private_ec_key.pem create mode 100644 ruby/test/rubygems/specifications/rubyforge-0.0.1.gemspec create mode 100644 ruby/test/rubygems/test_exit.rb delete mode 100644 ruby/test/rubygems/test_gem_server.rb create mode 100644 ruby/test/rubygems/test_gem_source_subpath_problem.rb create mode 100644 ruby/test/rubygems/test_gem_uri.rb create mode 100644 ruby/test/rubygems/test_rubygems.rb create mode 100644 ruby/test/rubygems/utilities.rb delete mode 100644 ruby/test/sdbm/test_sdbm.rb create mode 100644 ruby/test/stringio/test_ractor.rb create mode 100644 ruby/test/strscan/test_ractor.rb create mode 100644 ruby/test/test_getoptlong.rb delete mode 100644 ruby/test/test_prime.rb create mode 100644 ruby/test/test_sorted_set.rb delete mode 100644 ruby/test/test_tracer.rb create mode 100644 ruby/test/test_trick.rb delete mode 100644 ruby/test/test_win32api.rb create mode 100644 ruby/test/uri/test_ws.rb delete mode 100644 ruby/test/webrick/test_filehandler.rb delete mode 100644 ruby/test/webrick/utils.rb create mode 100644 ruby/timev.rb delete mode 100755 ruby/tool/actions-commit-info.sh create mode 100644 ruby/tool/bundler/dev_gems.rb create mode 100644 ruby/tool/bundler/dev_gems.rb.lock create mode 100644 ruby/tool/bundler/rubocop_gems.rb create mode 100644 ruby/tool/bundler/rubocop_gems.rb.lock create mode 100644 ruby/tool/bundler/standard_gems.rb create mode 100644 ruby/tool/bundler/standard_gems.rb.lock create mode 100644 ruby/tool/bundler/test_gems.rb create mode 100644 ruby/tool/bundler/test_gems.rb.lock create mode 100644 ruby/tool/ci_functions.sh mode change 100755 => 120000 ruby/tool/config.guess mode change 100755 => 120000 ruby/tool/config.sub create mode 100755 ruby/tool/disable_ipv6.sh create mode 100644 ruby/tool/dummy-rake-compiler/rake/extensiontask.rb create mode 100755 ruby/tool/intern_ids.rb create mode 100644 ruby/tool/lib/core_assertions.rb create mode 100644 ruby/tool/lib/gc_checker.rb delete mode 100644 ruby/tool/lib/gc_compact_checker.rb delete mode 100644 ruby/tool/lib/minitest/README.txt delete mode 100644 ruby/tool/lib/minitest/autorun.rb delete mode 100644 ruby/tool/lib/minitest/benchmark.rb delete mode 100644 ruby/tool/lib/minitest/mock.rb delete mode 100644 ruby/tool/lib/minitest/unit.rb delete mode 100644 ruby/tool/lib/test/unit/core_assertions.rb rename ruby/{ => tool}/lib/webrick.rb (96%) rename ruby/{ => tool}/lib/webrick/.document (100%) rename ruby/{ => tool}/lib/webrick/accesslog.rb (100%) rename ruby/{ => tool}/lib/webrick/cgi.rb (100%) rename ruby/{ => tool}/lib/webrick/compat.rb (100%) rename ruby/{ => tool}/lib/webrick/config.rb (100%) rename ruby/{ => tool}/lib/webrick/cookie.rb (100%) rename ruby/{ => tool}/lib/webrick/htmlutils.rb (100%) rename ruby/{ => tool}/lib/webrick/httpauth.rb (100%) rename ruby/{ => tool}/lib/webrick/httpauth/authenticator.rb (98%) rename ruby/{ => tool}/lib/webrick/httpauth/basicauth.rb (100%) rename ruby/{ => tool}/lib/webrick/httpauth/digestauth.rb (100%) rename ruby/{ => tool}/lib/webrick/httpauth/htdigest.rb (100%) rename ruby/{ => tool}/lib/webrick/httpauth/htgroup.rb (100%) rename ruby/{ => tool}/lib/webrick/httpauth/htpasswd.rb (100%) rename ruby/{ => tool}/lib/webrick/httpauth/userdb.rb (100%) create mode 100644 ruby/tool/lib/webrick/httpproxy.rb rename ruby/{ => tool}/lib/webrick/httprequest.rb (96%) rename ruby/{ => tool}/lib/webrick/httpresponse.rb (100%) rename ruby/{ => tool}/lib/webrick/https.rb (100%) rename ruby/{ => tool}/lib/webrick/httpserver.rb (100%) rename ruby/{ => tool}/lib/webrick/httpservlet.rb (100%) rename ruby/{ => tool}/lib/webrick/httpservlet/abstract.rb (100%) rename ruby/{ => tool}/lib/webrick/httpservlet/cgi_runner.rb (100%) rename ruby/{ => tool}/lib/webrick/httpservlet/cgihandler.rb (100%) rename ruby/{ => tool}/lib/webrick/httpservlet/erbhandler.rb (100%) rename ruby/{ => tool}/lib/webrick/httpservlet/filehandler.rb (97%) rename ruby/{ => tool}/lib/webrick/httpservlet/prochandler.rb (100%) rename ruby/{ => tool}/lib/webrick/httpstatus.rb (100%) rename ruby/{ => tool}/lib/webrick/httputils.rb (99%) rename ruby/{ => tool}/lib/webrick/httpversion.rb (100%) rename ruby/{ => tool}/lib/webrick/log.rb (100%) create mode 100644 ruby/tool/lib/webrick/server.rb rename ruby/{ => tool}/lib/webrick/ssl.rb (98%) create mode 100644 ruby/tool/lib/webrick/utils.rb create mode 100644 ruby/tool/lib/webrick/version.rb create mode 100644 ruby/tool/m4/ruby_thread.m4 create mode 100644 ruby/tool/m4/ruby_try_cxxflags.m4 create mode 100644 ruby/tool/mjit_tabs.rb delete mode 100644 ruby/tool/mk_builtin_binary.rb delete mode 100644 ruby/tool/mk_call_iseq_optimized.rb create mode 100755 ruby/tool/releng/gen-mail.rb create mode 100755 ruby/tool/releng/gen-release-note.rb create mode 100755 ruby/tool/releng/update-www-meta.rb create mode 100644 ruby/tool/ruby_vm/views/_mjit_compile_getinlinecache.erb create mode 100644 ruby/tool/ruby_vm/views/_mjit_compile_invokebuiltin.erb create mode 100644 ruby/tool/search-cgvars.rb mode change 100644 => 100755 ruby/tool/sync_default_gems.rb delete mode 100644 ruby/tool/test/minitest/metametameta.rb delete mode 100644 ruby/tool/test/minitest/test_minitest_benchmark.rb delete mode 100644 ruby/tool/test/minitest/test_minitest_mock.rb delete mode 100644 ruby/tool/test/minitest/test_minitest_unit.rb create mode 100644 ruby/tool/test/testunit/metametameta.rb create mode 100644 ruby/tool/test/testunit/test_minitest_unit.rb create mode 100644 ruby/tool/test/testunit/tests_for_parallel/test4test_hungup.rb rename ruby/{ => tool}/test/webrick/.htaccess (100%) rename ruby/{ => tool}/test/webrick/test_cgi.rb (98%) rename ruby/{ => tool}/test/webrick/test_config.rb (100%) rename ruby/{ => tool}/test/webrick/test_cookie.rb (100%) rename ruby/{ => tool}/test/webrick/test_do_not_reverse_lookup.rb (100%) create mode 100644 ruby/tool/test/webrick/test_filehandler.rb rename ruby/{ => tool}/test/webrick/test_htgroup.rb (100%) rename ruby/{ => tool}/test/webrick/test_htmlutils.rb (100%) rename ruby/{ => tool}/test/webrick/test_httpauth.rb (100%) rename ruby/{ => tool}/test/webrick/test_httpproxy.rb (99%) rename ruby/{ => tool}/test/webrick/test_httprequest.rb (97%) rename ruby/{ => tool}/test/webrick/test_httpresponse.rb (85%) rename ruby/{ => tool}/test/webrick/test_https.rb (100%) rename ruby/{ => tool}/test/webrick/test_httpserver.rb (99%) rename ruby/{ => tool}/test/webrick/test_httpstatus.rb (100%) rename ruby/{ => tool}/test/webrick/test_httputils.rb (100%) rename ruby/{ => tool}/test/webrick/test_httpversion.rb (100%) rename ruby/{ => tool}/test/webrick/test_server.rb (84%) rename ruby/{ => tool}/test/webrick/test_ssl_server.rb (100%) rename ruby/{ => tool}/test/webrick/test_utils.rb (100%) create mode 100644 ruby/tool/test/webrick/utils.rb rename ruby/{ => tool}/test/webrick/webrick.cgi (100%) rename ruby/{ => tool}/test/webrick/webrick.rhtml (100%) rename ruby/{ => tool}/test/webrick/webrick_long_filename.cgi (100%) create mode 100755 ruby/tool/travis_wait.sh create mode 100755 ruby/tool/update-bundled_gems.rb create mode 100644 ruby/vm_callinfo.h create mode 100644 ruby/vm_sync.c create mode 100644 ruby/vm_sync.h create mode 100644 ruby/win32/ruby.manifest create mode 100644 ruby/yjit.c create mode 100644 ruby/yjit.h create mode 100644 ruby/yjit.rb create mode 100644 ruby/yjit_asm.c create mode 100644 ruby/yjit_asm.h create mode 100644 ruby/yjit_codegen.c create mode 100644 ruby/yjit_codegen.h create mode 100644 ruby/yjit_core.c create mode 100644 ruby/yjit_core.h create mode 100644 ruby/yjit_iface.c create mode 100644 ruby/yjit_iface.h create mode 100644 ruby/yjit_utils.c diff --git a/ruby/.appveyor.yml b/ruby/.appveyor.yml new file mode 100644 index 000000000..9ebe41e1c --- /dev/null +++ b/ruby/.appveyor.yml @@ -0,0 +1,104 @@ +--- +version: '{build}' +init: + - git config --global user.name git + - git config --global user.email svn-admin@ruby-lang.org + - git config --global core.autocrlf false + - git config --global core.eol lf + - git config --global advice.detachedHead 0 +shallow_clone: true +clone_depth: 10 +platform: + - x64 +skip_commits: + message: /^\[DOC\]/ + files: + - doc/* + - '**/*.md' + - '**/*.rdoc' +environment: + ruby_version: "24-%Platform%" + zlib_version: "1.2.11" + matrix: + - build: vs + vs: 120 + ssl: OpenSSL + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 + GEMS_FOR_TEST: "" + - build: vs + vs: 140 + ssl: OpenSSL-v111 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 + GEMS_FOR_TEST: "" + RELINE_TEST_ENCODING: "UTF-8" +for: +- + matrix: + only: + - build: vs + install: + - ver + - chcp + - SET BITS=%Platform:x86=32% + - SET BITS=%BITS:x=% + - SET OPENSSL_DIR=C:\%ssl%-Win%BITS% + - CALL SET vcvars=%%^VS%VS%COMNTOOLS^%%..\..\VC\vcvarsall.bat + - SET vcvars + - '"%vcvars%" %Platform:x64=amd64%' + - SET ruby_path=C:\Ruby%ruby_version:-x86=% + - SET PATH=\usr\local\bin;%ruby_path%\bin;%PATH%;C:\msys64\mingw64\bin;C:\msys64\usr\bin + - ruby --version + - 'cl' + - echo> Makefile srcdir=. + - echo>> Makefile MSC_VER=0 + - echo>> Makefile RT=none + - echo>> Makefile RT_VER=0 + - echo>> Makefile BUILTIN_ENCOBJS=nul + - type win32\Makefile.sub >> Makefile + - nmake %mflags% up VCSUP="echo Update OK" + - nmake %mflags% extract-extlibs + - del Makefile + - mkdir \usr\local\bin + - mkdir \usr\local\include + - mkdir \usr\local\lib + - SET ZLIB_ZIP=.downloaded-cache\zlib%zlib_version:.=%.zip + - if not exist %ZLIB_ZIP% curl -fsSL -o %ZLIB_ZIP% --retry 10 https://zlib.net/zlib%zlib_version:.=%.zip + - 7z x -aos -o%APPVEYOR_BUILD_FOLDER%\ext\zlib %ZLIB_ZIP% + - for %%I in (%OPENSSL_DIR%\*.dll) do mklink /h \usr\local\bin\%%~nxI %%I + - attrib +r /s /d + - mkdir %Platform%-mswin_%vs% + build_script: + - cd %APPVEYOR_BUILD_FOLDER% + - cd %Platform%-mswin_%vs% + - ..\win32\configure.bat --without-ext=+,dbm,gdbm,readline --with-opt-dir=/usr/local --with-openssl-dir=%OPENSSL_DIR:\=/% + - nmake -l + - nmake install-nodoc + - \usr\bin\ruby -v -e "p :locale => Encoding.find('locale'), :filesystem => Encoding.find('filesystem')" + - if not "%GEMS_FOR_TEST%" == "" \usr\bin\gem install --no-document %GEMS_FOR_TEST% + - \usr\bin\ruby -ropenssl -e "puts 'Build ' + OpenSSL::OPENSSL_VERSION, 'Runtime ' + OpenSSL::OPENSSL_LIBRARY_VERSION" + test_script: + - set /a JOBS=%NUMBER_OF_PROCESSORS% + - nmake -l "TESTOPTS=-v -q" btest + - nmake -l "TESTOPTS=-v -q" test-basic + - nmake -l "TESTOPTS=-v --timeout-scale=3.0 --excludes=../test/excludes/_appveyor -j%JOBS% --exclude readline --exclude win32ole --exclude test_bignum --exclude test_syntax --exclude test_open-uri --exclude test_bundled_ca" test-all + # separately execute tests without -j which may crash worker with -j. + - nmake -l "TESTOPTS=-v --timeout-scale=3.0 --excludes=../test/excludes/_appveyor" test-all TESTS="../test/win32ole ../test/ruby/test_bignum.rb ../test/ruby/test_syntax.rb ../test/open-uri/test_open-uri.rb ../test/rubygems/test_bundled_ca.rb" + - nmake -l test-spec MSPECOPT=-fs # not using `-j` because sometimes `mspec -j` silently dies on Windows +notifications: + - provider: Webhook + method: POST + url: + secure: CcFlJNDJ/a6to7u3Z4Fnz6dScEPNx7hTha2GkSRlV+1U6dqmxY/7uBcLXYb9gR3jfQk6w+2o/HrjNAyXMNGU/JOka3s2WRI4VKitzM+lQ08owvJIh0R7LxrGH0J2e81U # ruby-lang slack: ruby/simpler-alerts-bot + body: >- + {{^isPullRequest}} + { + "ci": "AppVeyor CI", + "env": "Visual Studio 2013 / 2015", + "url": "{{buildUrl}}", + "commit": "{{commitId}}", + "branch": "{{branch}}" + } + {{/isPullRequest}} + on_build_success: false + on_build_failure: true + on_build_status_changed: false diff --git a/ruby/.cirrus.yml b/ruby/.cirrus.yml new file mode 100644 index 000000000..c8fb326c8 --- /dev/null +++ b/ruby/.cirrus.yml @@ -0,0 +1,64 @@ +# This CI is used to test Arm cases. We can set the maximum 16 tasks. +# The entire testing design is inspired from .github/workflows/compilers.yml. + +# By default, Cirrus mounts an empty volume to `/tmp` +# which triggers all sorts of warnings like "system temporary path is world-writable: /tmp". +# Lets workaround it by specifying a custom volume mount point. +env: + CIRRUS_VOLUME: /cirrus-ci-volume + LANG: C.UTF-8 + +task: + name: Arm64 Graviton2 / $CC + skip: "changesIncludeOnly('doc/**', '**.{md,rdoc}')" + arm_container: + # We use the arm64 images at http://ghcr.io/ruby/ruby-ci-image . + image: ghcr.io/ruby/ruby-ci-image:$CC + # Define the used cpu core in each matrix task. We can use total 16 cpu + # cores in entire matrix. [cpu] = [total cpu: 16] / [number of tasks] + cpu: 8 + # We can request maximum 4 GB per cpu. + # [memory per task] = [memory per cpu: 4 GB] * [cpu] + memory: 32G + env: + CIRRUS_CLONE_DEPTH: 50 + optflags: '-O1' + debugflags: '-ggdb3' + RUBY_PREFIX: /tmp/ruby-prefix + RUBY_DEBUG: ci rgengc + RUBY_TESTOPTS: >- + -q + --color=always + --tty=no + matrix: + CC: clang-12 + CC: gcc-11 + id_script: id + set_env_script: + # Set `GNUMAKEFLAGS`, because the flags are GNU make specific. Note using + # the `make` environment variable used in compilers.yml causes some rubygems + # tests to fail. + # https://github.com/rubygems/rubygems/issues/4921 + - echo "GNUMAKEFLAGS=-s -j$((1 + $CIRRUS_CPU))" >> $CIRRUS_ENV + print_env_script: + - echo "GNUMAKEFLAGS=$GNUMAKEFLAGS" + # Arm containers are executed in AWS's EKS, and it's not yet supporting IPv6 + # See https://github.com/aws/containers-roadmap/issues/835 + disable_ipv6_script: sudo ./tool/disable_ipv6.sh + autogen_script: ./autogen.sh + configure_script: >- + ./configure -C + --enable-debug-env + --disable-install-doc + --with-ext=-test-/cxxanyargs,+ + --prefix="$RUBY_PREFIX" + make_extract-extlibs_script: make extract-extlibs + make_incs_script: make incs + make_script: make + make_leaked-globals_script: make leaked-globals + make_test_script: make test + make_install_script: make install + install_gems_for_test_script: $RUBY_PREFIX/bin/gem install --no-doc timezone tzinfo + make_test-tool_script: make test-tool + make_test-all_script: make test-all + make_test-spec_script: make test-spec diff --git a/ruby/.dir-locals.el b/ruby/.dir-locals.el index 7c32d1f7e..8f4b96445 100644 --- a/ruby/.dir-locals.el +++ b/ruby/.dir-locals.el @@ -24,6 +24,8 @@ (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) diff --git a/ruby/.document b/ruby/.document index 8a418e5d4..6e08f4269 100644 --- a/ruby/.document +++ b/ruby/.document @@ -11,10 +11,18 @@ prelude.rb rbconfig.rb +array.rb ast.rb +dir.rb gc.rb io.rb +kernel.rb +marshal.rb +numeric.rb +nilclass.rb pack.rb +ractor.rb +timev.rb trace_point.rb warning.rb @@ -25,7 +33,7 @@ lib ext # rdoc files -NEWS +NEWS.md README.md README.ja.md diff --git a/ruby/.gdbinit b/ruby/.gdbinit index 0d4462269..8979e8b47 100644 --- a/ruby/.gdbinit +++ b/ruby/.gdbinit @@ -136,7 +136,7 @@ define rp 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 + output/x ((struct RArray*)($arg0))->as.heap.aux.shared_root printf " " else printf "(ownership) capa=%ld ", ((struct RArray*)($arg0))->as.heap.aux.capa @@ -156,12 +156,12 @@ define rp else if ($flags & RUBY_T_MASK) == RUBY_T_HASH printf "%sT_HASH%s: ", $color_type, $color_end, - if (((struct RHash *)($arg0))->basic->flags & RHASH_ST_TABLE_FLAG) + if (((struct RHash *)($arg0))->basic.flags & RHASH_ST_TABLE_FLAG) printf "st len=%ld ", ((struct RHash *)($arg0))->as.st->num_entries 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) + ((((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) end print (struct RHash *)($arg0) else @@ -264,6 +264,10 @@ define rp if ($flags & RUBY_T_MASK) == RUBY_T_ZOMBIE 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) @@ -300,6 +304,7 @@ define rp end end end + end end document rp Print a Ruby's VALUE. @@ -1097,11 +1102,11 @@ define print_id set $arylen = $ary->as.heap.len end set $result = $aryptr[($serial % ID_ENTRY_UNIT) * ID_ENTRY_SIZE + $t] - if $result != RUBY_Qnil + if $result != RUBY_Qnil print_string $result - else - echo undef - end + else + echo undef + end end end end @@ -1274,7 +1279,7 @@ document rb_count_objects Counts all objects grouped by type. end -# Details: https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/MachineInstructionsTraceWithGDB +# Details: https://bugs.ruby-lang.org/projects/ruby-master/wiki/MachineInstructionsTraceWithGDB define trace_machine_instructions set logging on set height 0 @@ -1319,8 +1324,7 @@ define print_flags printf "RUBY_FL_PROMOTED0 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_PROMOTED0 ? "1" : "0" printf "RUBY_FL_PROMOTED1 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_PROMOTED1 ? "1" : "0" printf "RUBY_FL_FINALIZE : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_FINALIZE ? "1" : "0" - printf "RUBY_FL_TAINT : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_TAINT ? "1" : "0" - printf "RUBY_FL_UNTRUSTED : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_UNTRUSTED ? "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" diff --git a/ruby/.gitattributes b/ruby/.gitattributes new file mode 100644 index 000000000..d0c2d266b --- /dev/null +++ b/ruby/.gitattributes @@ -0,0 +1,8 @@ +*.gemspec diff=ruby +*.rb diff=ruby +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/ruby/.github/CODEOWNERS b/ruby/.github/CODEOWNERS new file mode 100644 index 000000000..15abc79af --- /dev/null +++ b/ruby/.github/CODEOWNERS @@ -0,0 +1,10 @@ +# Lines starting with '#' are comments. +# Each line is a file pattern followed by one or more owners. +# Code owners will be automatically tagged as reviewers when a pull request is opened + +# YJIT sources and tests +yjit* @maximecb @xrxr @tenderlove +doc/yjit/* @maximecb @xrxr @tenderlove +bootstraptest/test_yjit* @maximecb @xrxr @tenderlove +test/ruby/test_yjit* @maximecb @xrxr @tenderlove +.github/workflows/yjit* @maximecb @xrxr @tenderlove diff --git a/ruby/.github/SECURITY.md b/ruby/.github/SECURITY.md new file mode 100644 index 000000000..56baa2994 --- /dev/null +++ b/ruby/.github/SECURITY.md @@ -0,0 +1,9 @@ +# Security Policy + +## Supported Versions + +See . + +## Reporting a Vulnerability + +See . diff --git a/ruby/.github/codeql/codeql-config.yml b/ruby/.github/codeql/codeql-config.yml new file mode 100644 index 000000000..91f82b842 --- /dev/null +++ b/ruby/.github/codeql/codeql-config.yml @@ -0,0 +1,3 @@ +name: "CodeQL config for the Ruby language" + +languages: cpp diff --git a/ruby/.github/workflows/baseruby.yml b/ruby/.github/workflows/baseruby.yml new file mode 100644 index 000000000..cf86c2d7d --- /dev/null +++ b/ruby/.github/workflows/baseruby.yml @@ -0,0 +1,65 @@ +name: BASERUBY Check + +on: + push: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + pull_request: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + +concurrency: + group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} + cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} + +jobs: + baseruby: + name: BASERUBY + runs-on: ubuntu-20.04 + if: ${{ !startsWith(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} + strategy: + matrix: + ruby: + - ruby-2.2 +# - ruby-2.3 +# - ruby-2.4 +# - ruby-2.5 +# - ruby-2.6 + - ruby-2.7 + - ruby-3.0 + + steps: + - uses: actions/checkout@v2 + - uses: actions/cache@v2 + with: + path: .downloaded-cache + key: downloaded-cache + - uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + bundler: none + - run: echo "GNUMAKEFLAGS=-j$((1 + $(nproc --all)))" >> $GITHUB_ENV + - run: sudo apt-get install build-essential autoconf bison + - run: ./autogen.sh + - run: ./configure --disable-install-doc + - run: make common-srcs + - run: make incs + - run: make all + - run: make test + - uses: k0kubun/action-slack@v2.0.0 + with: + payload: | + { + "ci": "GitHub Actions", + "env": "${{ github.workflow }} / BASERUBY @ ${{ matrix.ruby }}", + "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "commit": "${{ github.sha }}", + "branch": "${{ github.ref }}".split('/').reverse()[0] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot + if: ${{ failure() && github.event_name == 'push' }} diff --git a/ruby/.github/workflows/bundled_gems.yml b/ruby/.github/workflows/bundled_gems.yml new file mode 100644 index 000000000..12fb2b06e --- /dev/null +++ b/ruby/.github/workflows/bundled_gems.yml @@ -0,0 +1,131 @@ +name: bundled_gems + +on: + push: + paths: + - '.github/workflows/bundled_gems.yml' + - 'gems/bundled_gems' + pull_request: + paths: + - '.github/workflows/bundled_gems.yml' + - 'gems/bundled_gems' + schedule: + - cron: '45 6 * * *' + +jobs: + update: + if: ${{ github.event_name != 'schedule' || github.repository == 'ruby/ruby' }} + name: update ${{ github.workflow }} + runs-on: ubuntu-latest + steps: + - name: git config + run: | + git config --global advice.detachedHead 0 + git config --global init.defaultBranch garbage + + - name: Set ENV + run: | + echo "GNUMAKEFLAGS=-j$((1 + $(nproc --all)))" >> $GITHUB_ENV + echo "TODAY=$(date +%F)" >> $GITHUB_ENV + + - uses: actions/checkout@v2 + + - uses: actions/cache@v2 + with: + path: .downloaded-cache + key: downloaded-cache-${{ github.sha }} + restore-keys: | + downloaded-cache + + - name: Download previous gems list + run: | + data=bundled_gems.json + mkdir -p .downloaded-cache + ln -s .downloaded-cache/$data . + curl -O -R -z ./$data https://stdgems.org/$data + + - name: Update bundled gems list + run: | + ruby -i~ tool/update-bundled_gems.rb gems/bundled_gems + + - name: Maintain updated gems list in NEWS + run: | + require 'json' + news = File.read("NEWS.md") + prev = news[/since the \*+(\d+\.\d+\.\d+)\*+/, 1] + prevs = [prev, prev.sub(/\.\d+\z/, '')] + %W[bundled].each do |type| + last = JSON.parse(File.read("#{type}_gems.json"))['gems'].filter_map do |g| + v = g['versions'].values_at(*prevs).compact.first + g = g['gem'] + g = 'RubyGems' if g == 'rubygems' + [g, v] if v + end.to_h + changed = File.foreach("gems/#{type}_gems").filter_map do |l| + next if l.start_with?("#") + g, v = l.split(" ", 3) + [g, v] unless last[g] == v + end + changed, added = changed.partition {|g, _| last[g]} + news.sub!(/^\*\s+The following #{type} gems? are updated\.(\n\s+\*\s+)\K.*(?:\1.*)*/) do + changed.map {|g, v|"#{g} #{v}"}.join($1) + end or exit + news.sub!(/^\*\s+The following default gems are now bundled.*(\n\s+\*\s+)\K.*(?:\1.*)*/) do + added.map {|g, v|"#{g} #{v}"}.join($1) + end if added + File.write("NEWS.md", news) + end + shell: ruby {0} + + - name: Check diffs + id: diff + run: | + git add -- NEWS.md + git diff --no-ext-diff --ignore-submodules --quiet -- gems/bundled_gems + continue-on-error: true + + - name: Install libraries + run: | + set -x + sudo apt-get update -q || : + sudo apt-get install --no-install-recommends -q -y build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev bison autoconf ruby + if: ${{ steps.diff.outcome == 'failure' }} + + - name: Build + run: | + ./autogen.sh + ./configure -C --disable-install-doc + make + if: ${{ steps.diff.outcome == 'failure' }} + + - name: Test bundled gems + run: | + make -s test-bundled-gems + git add -- gems/bundled_gems + timeout-minutes: 30 + env: + RUBY_TESTOPTS: "-q --tty=no" + TEST_BUNDLED_GEMS_ALLOW_FAILURES: "" + if: ${{ steps.diff.outcome == 'failure' }} + + - name: Show diffs + id: show + run: | + git diff --cached --color --no-ext-diff --ignore-submodules --exit-code -- + continue-on-error: true + + - name: Commit + run: | + git pull --ff-only origin ${GITHUB_REF#refs/heads/} + message="Update bundled gems list at " + if [ ${{ steps.diff.outcome }} = success ]; then + git commit --message="${message}${GITHUB_SHA:0:30} [ci skip]" + else + git commit --message="${message}${TODAY}" + fi + 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.show.outcome == 'failure' }} diff --git a/ruby/.github/workflows/check_dependencies.yml b/ruby/.github/workflows/check_dependencies.yml new file mode 100644 index 000000000..6c7e8e578 --- /dev/null +++ b/ruby/.github/workflows/check_dependencies.yml @@ -0,0 +1,65 @@ +name: Check Dependencies +on: + push: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + pull_request: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + +concurrency: + group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} + cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} + +jobs: + update-deps: + strategy: + matrix: + os: [ubuntu-20.04] + fail-fast: true + runs-on: ${{ matrix.os }} + if: ${{ !startsWith(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} + steps: + - name: Install libraries + run: | + set -x + sudo apt-get update -q || : + sudo apt-get install --no-install-recommends -q -y build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev bison autoconf ruby + if: ${{ contains(matrix.os, 'ubuntu') }} + - name: Install libraries + run: | + brew upgrade + brew install gmp libffi openssl@1.1 zlib autoconf automake libtool readline + if: ${{ contains(matrix.os, 'macos') }} + - name: git config + run: | + git config --global advice.detachedHead 0 + git config --global init.defaultBranch garbage + - uses: actions/checkout@v2 + - uses: actions/cache@v2 + with: + path: .downloaded-cache + key: downloaded-cache + - run: ./autogen.sh + - name: Run configure + run: ./configure -C --disable-install-doc --disable-rubygems --with-gcc 'optflags=-O0' 'debugflags=-save-temps=obj -g' + - run: make all golf + - run: ruby tool/update-deps --fix + - run: git diff --no-ext-diff --ignore-submodules --exit-code + - uses: k0kubun/action-slack@v2.0.0 + with: + payload: | + { + "ci": "GitHub Actions", + "env": "${{ matrix.os }} / Dependencies need to update", + "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "commit": "${{ github.sha }}", + "branch": "${{ github.ref }}".split('/').reverse()[0] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot + if: ${{ failure() && github.event_name == 'push' }} diff --git a/ruby/.github/workflows/codeql-analysis.yml b/ruby/.github/workflows/codeql-analysis.yml new file mode 100644 index 000000000..f81c79902 --- /dev/null +++ b/ruby/.github/workflows/codeql-analysis.yml @@ -0,0 +1,61 @@ +name: "Code scanning - action" + +on: + push: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + pull_request: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + schedule: + - cron: '0 12 * * 4' + +concurrency: + group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} + cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} + +jobs: + CodeQL-Build: + + # CodeQL runs on ubuntu-latest and windows-latest + runs-on: ubuntu-latest + if: ${{ !startsWith(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} + + env: + enable_install_doc: no + + steps: + - name: Install libraries + run: | + set -x + sudo apt-get update -q || : + sudo apt-get install --no-install-recommends -q -y build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev bison autoconf ruby + + - name: Checkout repository + uses: actions/checkout@v2 + + - uses: actions/cache@v2 + with: + path: .downloaded-cache + key: downloaded-cache + + - name: Remove an obsolete rubygems vendored file + run: sudo rm /usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb + + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + config-file: ./.github/codeql/codeql-config.yml + + - name: Set ENV + run: echo "GNUMAKEFLAGS=-j$((1 + $(nproc --all)))" >> $GITHUB_ENV + + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/ruby/.github/workflows/compilers.yml b/ruby/.github/workflows/compilers.yml new file mode 100644 index 000000000..2af9fa55d --- /dev/null +++ b/ruby/.github/workflows/compilers.yml @@ -0,0 +1,247 @@ +name: Compilations + +on: + push: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + pull_request: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + +concurrency: + group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} + cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} + +# Github actions does not support YAML anchors. This creative use of +# environment variables (plus the "echo $GITHUB_ENV" hack) is to reroute that +# restriction. +env: + default_cc: clang-14 + append_cc: '' + crosshost: '' + + # -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. + optflags: '-O1' + + # -g0 disables backtraces when SEGV. Do not set that. + debugflags: '-ggdb3' + + default_configure: >- + --enable-debug-env + --disable-install-doc + --with-ext=-test-/cxxanyargs,+ + append_configure: >- + --without-valgrind + --without-jemalloc + --without-gmp + + UPDATE_UNICODE: >- + UNICODE_FILES=. + UNICODE_PROPERTY_FILES=. + UNICODE_AUXILIARY_FILES=. + UNICODE_EMOJI_FILES=. + CONFIGURE_TTY: never + GITPULLOPTIONS: --no-tags origin ${{github.ref}} + RUBY_DEBUG: ci rgengc + RUBY_TESTOPTS: >- + -q + --color=always + --tty=no + +jobs: + compile: + strategy: + fail-fast: false + matrix: + entry: + - { key: default_cc, name: gcc-11, value: gcc-11, container: gcc-11 } + - { key: default_cc, name: gcc-10, value: gcc-10, container: gcc-10 } + - { key: default_cc, name: gcc-9, value: gcc-9, container: gcc-9 } + - { key: default_cc, name: gcc-8, value: gcc-8, container: gcc-8 } + - { key: default_cc, name: gcc-7, value: gcc-7, container: gcc-7 } + - { key: default_cc, name: gcc-6, value: gcc-6, container: gcc-6 } + - { key: default_cc, name: gcc-5, value: gcc-5, container: gcc-5 } + - { key: default_cc, name: gcc-4.8, value: gcc-4.8, container: gcc-4.8 } + - key: default_cc + name: 'gcc-11 LTO' + value: 'gcc-11 -O2 -flto=auto -ffat-lto-objects' + container: gcc-11 + shared: '--disable-shared' + # check: true + - { key: default_cc, name: clang-14, value: clang-14, container: clang-14 } + - { key: default_cc, name: clang-13, value: clang-13, container: clang-13 } + - { key: default_cc, name: clang-12, value: clang-12, container: clang-12 } + - { key: default_cc, name: clang-11, value: clang-11, container: clang-11 } + - { key: default_cc, name: clang-10, value: clang-10, container: clang-10 } + - { key: default_cc, name: clang-9, value: clang-9, container: clang-9 } + - { key: default_cc, name: clang-8, value: clang-8, container: clang-8 } + - { key: default_cc, name: clang-7, value: clang-7, container: clang-7 } + - { key: default_cc, name: clang-6.0, value: clang-6.0, container: clang-6.0 } + - { key: default_cc, name: clang-5.0, value: clang-5.0, container: clang-5.0 } + - { key: default_cc, name: clang-4.0, value: clang-4.0, container: clang-4.0 } + - { key: default_cc, name: clang-3.9, value: clang-3.9, container: clang-3.9 } + - key: default_cc + name: 'clang-14 LTO' + value: 'clang-14 -O2 -flto=auto' + container: clang-14 + shared: '--disable-shared' + # check: true + + - { key: crosshost, name: aarch64-linux-gnu, value: aarch64-linux-gnu, container: crossbuild-essential-arm64 } +# - { key: crosshost, name: arm-linux-gnueabi, value: arm-linux-gnueabi } +# - { key: crosshost, name: arm-linux-gnueabihf, value: arm-linux-gnueabihf } +# - { key: crosshost, name: i686-w64-mingw32, value: i686-w64-mingw32 } +# - { key: crosshost, name: powerpc-linux-gnu, value: powerpc-linux-gnu } + - { key: crosshost, name: powerpc64le-linux-gnu, value: powerpc64le-linux-gnu, container: crossbuild-essential-ppc64el } + - { key: crosshost, name: s390x-linux-gnu, value: s390x-linux-gnu, container: crossbuild-essential-s390x } + - { key: crosshost, name: x86_64-w64-mingw32, value: x86_64-w64-mingw32, container: mingw-w64 } + + - { key: append_cc, name: c99, value: '-std=c99 -Werror=pedantic -pedantic-errors' } +# - { key: append_cc, name: c11, value: '-std=c11 -Werror=pedantic -pedantic-errors' } +# - { key: append_cc, name: c17, value: '-std=c17 -Werror=pedantic -pedantic-errors' } + - { key: append_cc, name: c2x, value: '-std=c2x -Werror=pedantic -pedantic-errors' } + - { key: CXXFLAGS, name: c++98, value: '-std=c++98 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } +# - { key: CXXFLAGS, name: c++11, value: '-std=c++11 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } +# - { key: CXXFLAGS, name: c++14, value: '-std=c++14 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } +# - { key: CXXFLAGS, name: c++17, value: '-std=c++17 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } + - { key: CXXFLAGS, name: c++2a, value: '-std=c++2a -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } + + - { key: optflags, name: '-O0', value: '-O0 -march=x86-64 -mtune=generic' } +# - { key: optflags, name: '-O3', value: '-O3 -march=x86-64 -mtune=generic', check: true } + + - { key: append_configure, name: gmp, value: '--with-gmp' } + - { key: append_configure, name: jemalloc, value: '--with-jemalloc' } + - { key: append_configure, name: valgrind, value: '--with-valgrind' } + - { key: append_configure, name: 'coroutine=ucontext', value: '--with-coroutine=ucontext' } + - { key: append_configure, name: 'coroutine=pthread', value: '--with-coroutine=pthread' } + - { key: append_configure, name: disable-jit-support, value: '--disable-jit-support' } + - { key: append_configure, name: disable-dln, value: '--disable-dln' } + - { key: append_configure, name: disable-rubygems, value: '--disable-rubygems' } + + - { key: cppflags, name: OPT_THREADED_CODE=1, value: '-DOPT_THREADED_CODE=1' } + - { key: cppflags, name: OPT_THREADED_CODE=2, value: '-DOPT_THREADED_CODE=2' } + - { key: cppflags, name: OPT_THREADED_CODE=3, value: '-DOPT_THREADED_CODE=3' } + + - { key: cppflags, name: NDEBUG, value: '-DNDEBUG' } + - { key: cppflags, name: RUBY_DEBUG, value: '-DRUBY_DEBUG' } +# - { key: cppflags, name: ARRAY_DEBUG, value: '-DARRAY_DEBUG' } +# - { key: cppflags, name: BIGNUM_DEBUG, value: '-DBIGNUM_DEBUG' } +# - { key: cppflags, name: CCAN_LIST_DEBUG, value: '-DCCAN_LIST_DEBUG' } +# - { key: cppflags, name: CPDEBUG=-1, value: '-DCPDEBUG=-1' } +# - { key: cppflags, name: ENC_DEBUG, value: '-DENC_DEBUG' } +# - { key: cppflags, name: GC_DEBUG, value: '-DGC_DEBUG' } +# - { key: cppflags, name: HASH_DEBUG, value: '-DHASH_DEBUG' } +# - { key: cppflags, name: ID_TABLE_DEBUG, value: '-DID_TABLE_DEBUG' } +# - { key: cppflags, name: RGENGC_DEBUG=-1, value: '-DRGENGC_DEBUG=-1' } +# - { key: cppflags, name: SYMBOL_DEBUG, value: '-DSYMBOL_DEBUG' } +# - { key: cppflags, name: THREAD_DEBUG=-1, value: '-DTHREAD_DEBUG=-1' } + +# - { key: cppflags, name: RGENGC_CHECK_MODE, value: '-DRGENGC_CHECK_MODE' } +# - { key: cppflags, name: TRANSIENT_HEAP_CHECK_MODE, value: '-DTRANSIENT_HEAP_CHECK_MODE' } +# - { key: cppflags, name: VM_CHECK_MODE, value: '-DVM_CHECK_MODE' } + + - { key: cppflags, name: USE_EMBED_CI=0, value: '-DUSE_EMBED_CI=0' } + - { key: cppflags, name: USE_FLONUM=0, value: '-DUSE_FLONUM=0' } +# - { key: cppflags, name: USE_GC_MALLOC_OBJ_INFO_DETAILS, value: '-DUSE_GC_MALLOC_OBJ_INFO_DETAILS' } + - { key: cppflags, name: USE_LAZY_LOAD, value: '-DUSE_LAZY_LOAD' } +# - { key: cppflags, name: USE_RINCGC=0, value: '-DUSE_RINCGC=0' } +# - { key: cppflags, name: USE_SYMBOL_GC=0, value: '-DUSE_SYMBOL_GC=0' } +# - { key: cppflags, name: USE_THREAD_CACHE=0, value: '-DUSE_THREAD_CACHE=0' } +# - { key: cppflags, name: USE_TRANSIENT_HEAP=0, value: '-DUSE_TRANSIENT_HEAP=0' } +# - { key: cppflags, name: USE_RUBY_DEBUG_LOG=1, value: '-DUSE_RUBY_DEBUG_LOG=1' } + + - { key: cppflags, name: DEBUG_FIND_TIME_NUMGUESS, value: '-DDEBUG_FIND_TIME_NUMGUESS' } + - { key: cppflags, name: DEBUG_INTEGER_PACK, value: '-DDEBUG_INTEGER_PACK' } +# - { key: cppflags, name: ENABLE_PATH_CHECK, value: '-DENABLE_PATH_CHECK' } + + - { key: cppflags, name: GC_DEBUG_STRESS_TO_CLASS, value: '-DGC_DEBUG_STRESS_TO_CLASS' } +# - { key: cppflags, name: GC_ENABLE_LAZY_SWEEP=0, value: '-DGC_ENABLE_LAZY_SWEEP=0' } +# - { key: cppflags, name: GC_PROFILE_DETAIL_MEMOTY, value: '-DGC_PROFILE_DETAIL_MEMOTY' } +# - { key: cppflags, name: GC_PROFILE_MORE_DETAIL, value: '-DGC_PROFILE_MORE_DETAIL' } + +# - { key: cppflags, name: CALC_EXACT_MALLOC_SIZE, value: '-DCALC_EXACT_MALLOC_SIZE' } +# - { key: cppflags, name: MALLOC_ALLOCATED_SIZE_CHECK, value: '-DMALLOC_ALLOCATED_SIZE_CHECK' } + +# - { key: cppflags, name: IBF_ISEQ_ENABLE_LOCAL_BUFFER, value: '-DIBF_ISEQ_ENABLE_LOCAL_BUFFER' } + +# - { key: cppflags, name: RGENGC_ESTIMATE_OLDMALLOC, value: '-DRGENGC_ESTIMATE_OLDMALLOC' } +# - { key: cppflags, name: RGENGC_FORCE_MAJOR_GC, value: '-DRGENGC_FORCE_MAJOR_GC' } +# - { key: cppflags, name: RGENGC_OBJ_INFO, value: '-DRGENGC_OBJ_INFO' } +# - { key: cppflags, name: RGENGC_OLD_NEWOBJ_CHECK, value: '-DRGENGC_OLD_NEWOBJ_CHECK' } +# - { key: cppflags, name: RGENGC_PROFILE, value: '-DRGENGC_PROFILE' } + +# - { key: cppflags, name: VM_DEBUG_BP_CHECK, value: '-DVM_DEBUG_BP_CHECK' } +# - { key: cppflags, name: VM_DEBUG_VERIFY_METHOD_CACHE, value: '-DVM_DEBUG_VERIFY_METHOD_CACHE' } + + - { key: cppflags, name: MJIT_FORCE_ENABLE, value: '-DMJIT_FORCE_ENABLE' } + - { key: cppflags, name: YJIT_FORCE_ENABLE, value: '-DYJIT_FORCE_ENABLE' } + + name: ${{ matrix.entry.name }} + runs-on: ubuntu-latest + container: + image: ghcr.io/ruby/ruby-ci-image:${{ matrix.entry.container || 'clang-14' }} + options: --user root + if: ${{ !startsWith(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} + steps: + - run: id + working-directory: + - run: mkdir build + working-directory: + - name: setenv + run: | + echo "${{ matrix.entry.key }}=${{ matrix.entry.value }}" >> $GITHUB_ENV + echo "GNUMAKEFLAGS=-sj$((1 + $(nproc --all)))" >> $GITHUB_ENV + - uses: actions/checkout@v2 + with: + path: src + - uses: actions/cache@v2 + with: + path: src/.downloaded-cache + key: downloaded-cache + - run: ./autogen.sh + working-directory: src + - name: Run configure + run: > + ../src/configure -C ${default_configure} ${append_configure} + ${{ matrix.entry.key == 'crosshost' && '--host="${crosshost}"' || '--with-gcc="${default_cc} ${append_cc}"' }} + ${{ matrix.entry.shared || '--enable-shared' }} + - run: make extract-extlibs + - run: make incs + - run: make + - run: make leaked-globals + - run: make test + - run: make install + if: ${{ matrix.entry.check }} + - run: make prepare-gems + if: ${{ matrix.entry.check }} + - run: make test-tool + if: ${{ matrix.entry.check }} + - run: make test-all TESTS='-- ruby -ext-' + if: ${{ matrix.entry.check }} + - run: make test-spec + if: ${{ matrix.entry.check }} + + - uses: k0kubun/action-slack@v2.0.0 + with: + payload: | + { + "ci": "GitHub Actions", + "env": "${{ github.workflow }} / ${{ matrix.entry.name }}", + "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "commit": "${{ github.sha }}", + "branch": "${{ github.ref }}".split('/').reverse()[0] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot + if: ${{ failure() && github.event_name == 'push' }} + +defaults: + run: + working-directory: build diff --git a/ruby/.github/workflows/mingw.yml b/ruby/.github/workflows/mingw.yml new file mode 100644 index 000000000..0d7eef67c --- /dev/null +++ b/ruby/.github/workflows/mingw.yml @@ -0,0 +1,148 @@ +name: MinGW +on: + push: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + pull_request: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + +concurrency: + group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} + cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} + +# Notes: +# Actions console encoding causes issues, see test-all & test-spec steps +# +jobs: + make: + runs-on: windows-2022 + name: ${{ github.workflow }} (${{ matrix.msystem }}) + env: + MSYSTEM: ${{ matrix.msystem }} + MSYS2_ARCH: x86_64 + CHOST: "x86_64-w64-mingw32" + CFLAGS: "-march=x86-64 -mtune=generic -O3 -pipe -fstack-protector-strong" + CXXFLAGS: "-march=x86-64 -mtune=generic -O3 -pipe" + CPPFLAGS: "-D_FORTIFY_SOURCE=2 -D__USE_MINGW_ANSI_STDIO=1 -DFD_SETSIZE=2048" + LDFLAGS: "-pipe -fstack-protector-strong" + UPDATE_UNICODE: "UNICODE_FILES=. UNICODE_PROPERTY_FILES=. UNICODE_AUXILIARY_FILES=. UNICODE_EMOJI_FILES=." + GITPULLOPTIONS: --no-tags origin ${{github.ref}} + strategy: + matrix: + include: + - msystem: "MINGW64" + base_ruby: 2.6 + test_task: [ "check" ] # to make job names consistent + - msystem: "UCRT64" + base_ruby: head + test_task: [ "check" ] # to make job names consistent + fail-fast: false + if: ${{ !startsWith(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} + steps: + - run: mkdir build + working-directory: + - name: git config + 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 + - uses: actions/checkout@v2 + with: + path: src + - uses: actions/cache@v2 + with: + path: src/.downloaded-cache + key: downloaded-cache + - name: Set up Ruby & MSYS2 + uses: MSP-Greg/ruby-setup-ruby@win-ucrt-1 + with: + ruby-version: ${{ matrix.base_ruby }} + - name: set env + run: | + echo "GNUMAKEFLAGS=-j$((2 * NUMBER_OF_PROCESSORS))" >> $GITHUB_ENV + echo "TEST_JOBS=$((15 * NUMBER_OF_PROCESSORS / 10))" >> $GITHUB_ENV + + - name: where check + run: | + # show where + result=true + for e in gcc.exe ragel.exe make.exe bison.exe libcrypto-1_1-x64.dll libssl-1_1-x64.dll; do + echo '##['group']'$'\033[93m'$e$'\033[m' + where $e || result=false + echo '##['endgroup']' + done + $result + + - name: autogen + run: | + ./autogen.sh + working-directory: src + + - name: configure + run: > + ../src/configure --disable-install-doc --prefix=/. + --build=$CHOST --host=$CHOST --target=$CHOST + + - name: update + run: | + make incs + + - name: download gems + run: | + make update-gems + + - name: make all + timeout-minutes: 20 + run: | + make + + - run: make leaked-globals + + - name: make install + run: | + make DESTDIR=../install install-nodoc + + - name: test + timeout-minutes: 5 + run: | + make test + + - name: test-all + timeout-minutes: 45 + run: | + # Actions uses UTF8, causes test failures, similar to normal OS setup + chcp.com 437 + make test-all + env: + RUBY_TESTOPTS: -j${{env.TEST_JOBS}} --retry --job-status=normal --show-skip --timeout-scale=1.5 + BUNDLER_VERSION: + + - name: test-spec + timeout-minutes: 10 + run: | + make test-spec + + - uses: k0kubun/action-slack@v2.0.0 + with: + payload: | + { + "ci": "GitHub Actions", + "env": "${{ github.workflow }} / ${{ matrix.test_task }}", + "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "commit": "${{ github.sha }}", + "branch": "${{ github.ref }}".split('/').reverse()[0] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot + if: ${{ failure() && github.event_name == 'push' }} + +defaults: + run: + working-directory: build + shell: sh diff --git a/ruby/.github/workflows/mjit.yml b/ruby/.github/workflows/mjit.yml new file mode 100644 index 000000000..75e5b1088 --- /dev/null +++ b/ruby/.github/workflows/mjit.yml @@ -0,0 +1,97 @@ +name: MJIT +on: + push: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + pull_request: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + +concurrency: + group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} + cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} + +jobs: + make: + strategy: + matrix: + test_task: [ "check" ] # to make job names consistent + jit_opts: [ "--mjit", "--mjit-wait" ] + fail-fast: false + runs-on: ubuntu-latest + if: ${{ !startsWith(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} + env: + TESTOPTS: '-q --tty=no' + RUN_OPTS: '--disable-gems ${{ matrix.jit_opts }} --mjit-debug=-ggdb3' + GITPULLOPTIONS: --no-tags origin ${{github.ref}} + steps: + - run: mkdir build + working-directory: + - name: Install libraries + run: | + set -x + sudo apt-get update -q || : + sudo apt-get install --no-install-recommends -q -y build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev bison autoconf ruby + - name: git config + run: | + git config --global advice.detachedHead 0 + git config --global init.defaultBranch garbage + - uses: actions/checkout@v2 + with: + path: src + - uses: actions/cache@v2 + with: + path: src/.downloaded-cache + key: downloaded-cache + - name: Fixed world writable dirs + run: | + chmod -v go-w $HOME $HOME/.config + sudo chmod -R go-w /usr/share + sudo bash -c 'IFS=:; for d in '"$PATH"'; do chmod -v go-w $d; done' || : + - name: Set ENV + run: | + echo "GNUMAKEFLAGS=-j$((1 + $(nproc --all)))" >> $GITHUB_ENV + - run: ./autogen.sh + working-directory: src + - name: Run configure + run: ../src/configure -C --disable-install-doc cppflags=-DVM_CHECK_MODE + - run: make incs + - run: make + - run: sudo make -s install + - run: sudo apt-get install gdb # used by test / test-all failure + - name: Run test + run: | + ulimit -c unlimited + make -s test RUN_OPTS="$RUN_OPTS" + timeout-minutes: 60 + - name: Run test-all + run: | + ulimit -c unlimited + make -s test-all RUN_OPTS="$RUN_OPTS" + timeout-minutes: 60 + - name: Run test-spec + run: | + ulimit -c unlimited + make -s test-spec RUN_OPTS="$RUN_OPTS" + timeout-minutes: 60 + - uses: k0kubun/action-slack@v2.0.0 + with: + payload: | + { + "ci": "GitHub Actions", + "env": "${{ github.workflow }} / ${{ matrix.test_task }} ${{ matrix.jit_opts }}", + "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "commit": "${{ github.sha }}", + "branch": "${{ github.ref }}".split('/').reverse()[0] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot + if: ${{ failure() && github.event_name == 'push' }} + +defaults: + run: + working-directory: build diff --git a/ruby/.github/workflows/spec_guards.yml b/ruby/.github/workflows/spec_guards.yml new file mode 100644 index 000000000..3f829650d --- /dev/null +++ b/ruby/.github/workflows/spec_guards.yml @@ -0,0 +1,53 @@ +name: Rubyspec Version Guards Check + +on: + push: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + pull_request: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + +concurrency: + group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} + cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} + +jobs: + rubyspec: + name: Rubyspec + runs-on: ubuntu-20.04 + if: ${{ !startsWith(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} + 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-2.7 + - ruby-3.0 + + steps: + - uses: actions/checkout@v2 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + bundler: none + - run: gem install webrick + - run: ruby ../mspec/bin/mspec + working-directory: spec/ruby + - uses: k0kubun/action-slack@v2.0.0 + with: + payload: | + { + "ci": "GitHub Actions", + "env": "${{ github.workflow }} / rubyspec @ ${{ matrix.ruby }}", + "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "commit": "${{ github.sha }}", + "branch": "${{ github.ref }}".split('/').reverse()[0] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot + if: ${{ failure() && github.event_name == 'push' }} diff --git a/ruby/.github/workflows/ubuntu.yml b/ruby/.github/workflows/ubuntu.yml new file mode 100644 index 000000000..ff79dad88 --- /dev/null +++ b/ruby/.github/workflows/ubuntu.yml @@ -0,0 +1,129 @@ +name: Ubuntu +on: + push: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + pull_request: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + +concurrency: + group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} + cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} + +jobs: + make: + strategy: + matrix: + test_task: ["check", "test-bundler-parallel", "test-bundled-gems"] + os: + - ubuntu-20.04 +# - ubuntu-18.04 + configure: ["", "cppflags=-DRUBY_DEBUG"] + include: + - test_task: "check" + os: ubuntu-20.04 + configure: "--host=i686-$OSTYPE" + - test_task: "test-all TESTS=--repeat-count=2" + os: ubuntu-20.04 + configure: "" + fail-fast: false + env: + GITPULLOPTIONS: --no-tags origin ${{github.ref}} + RUBY_DEBUG: ci + runs-on: ${{ matrix.os }} + if: ${{ !startsWith(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} + steps: + - run: mkdir build + working-directory: + - name: Set ENV + env: + configure: ${{matrix.configure}} + run: | + echo "GNUMAKEFLAGS=-j$((1 + $(nproc --all)))" >> $GITHUB_ENV + arch=`echo " $configure" | sed '/.* --host=/!d;s///;s/[- ].*//'` + echo "SETARCH=${arch:+setarch $arch}" >> $GITHUB_ENV + - name: Install libraries + run: | + set -x + arch="${SETARCH##* }" + arch=${arch:+:${arch/i[3-6]86/i386}} + ${arch:+sudo dpkg --add-architecture ${arch#:}} + sudo apt-get update -q || : + sudo apt-get install --no-install-recommends -q -y \ + ${arch:+cross}build-essential${arch/:/-} \ + libssl-dev${arch} libyaml-dev${arch} libreadline6-dev${arch} \ + zlib1g-dev${arch} libncurses5-dev${arch} libffi-dev${arch} \ + bison autoconf ruby + sudo apt-get install -q -y pkg-config${arch} || : + - name: git config + run: | + git config --global advice.detachedHead 0 + git config --global init.defaultBranch garbage + - uses: actions/checkout@v2 + with: + path: src + - uses: actions/cache@v2 + with: + path: src/.downloaded-cache + key: downloaded-cache + - name: Fixed world writable dirs + run: | + chmod -v go-w $HOME $HOME/.config + sudo chmod -R go-w /usr/share + sudo bash -c 'IFS=:; for d in '"$PATH"'; do chmod -v go-w $d; done' || : + - run: ./autogen.sh + working-directory: src + - name: Run configure + env: + arch: ${{matrix.arch}} + run: >- + $SETARCH ../src/configure -C --disable-install-doc ${{ matrix.configure }} + ${arch:+--target=$arch-$OSTYPE} + - run: $SETARCH make incs + - run: $SETARCH make + - run: $SETARCH make leaked-globals + if: ${{ matrix.test_task == 'check' }} + - run: $SETARCH make prepare-gems + if: ${{ matrix.test_task == 'check' }} + - name: Create dummy files in build dir + run: | + $SETARCH ./miniruby -e '(("a".."z").to_a+("A".."Z").to_a+("0".."9").to_a+%w[foo bar test zzz]).each{|basename|File.write("#{basename}.rb", "raise %(do not load #{basename}.rb)")}' + if: ${{ matrix.test_task == 'check' }} + - name: make ${{ matrix.test_task }} + run: | + $SETARCH make -s ${{ matrix.test_task }} ${TESTS:+TESTS=`echo "$TESTS" | sed 's| |$/ -n!/|g;s|^|-n!/|;s|$|$$/|'`} + timeout-minutes: 40 + env: + RUBY_TESTOPTS: "-q --tty=no" + TESTS: ${{ matrix.test_task == 'check' && matrix.skipped_tests || '' }} + TEST_BUNDLED_GEMS_ALLOW_FAILURES: "" + - name: make skipped tests + run: | + $SETARCH make -s test-all TESTS=`echo "$TESTS" | sed 's| |$/ -n/|g;s|^|-n/|;s|$|$$/|'` + env: + GNUMAKEFLAGS: "" + RUBY_TESTOPTS: "-v --tty=no" + TESTS: ${{ matrix.skipped_tests }} + if: ${{ matrix.test_task == 'check' && matrix.skipped_tests != '' }} + - uses: k0kubun/action-slack@v2.0.0 + with: + payload: | + { + "ci": "GitHub Actions", + "env": "${{ matrix.os }} / ${{ matrix.test_task }}${{ matrix.configure }}", + "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "commit": "${{ github.sha }}", + "branch": "${{ github.ref }}".split('/').reverse()[0] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot + if: ${{ failure() && github.event_name == 'push' }} + +defaults: + run: + working-directory: build diff --git a/ruby/.github/workflows/windows.yml b/ruby/.github/workflows/windows.yml new file mode 100644 index 000000000..574bfbf47 --- /dev/null +++ b/ruby/.github/workflows/windows.yml @@ -0,0 +1,135 @@ +name: Windows +on: + push: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + pull_request: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + +concurrency: + group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} + cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} + +jobs: + make: + strategy: + matrix: + include: + - vs: 2019 + os: windows-2019 + vcvars: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"' + # - vs: 2022 + # os: windows-2022 + # vcvars: '"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"' + fail-fast: false + runs-on: ${{ matrix.os }} + if: ${{ !startsWith(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} + name: VisualStudio ${{ matrix.vs }} + env: + GITPULLOPTIONS: --no-tags origin ${{github.ref}} + VCVARS: ${{ matrix.vcvars }} + PATCH: C:\msys64\usr\bin\patch.exe + steps: + - run: md build + working-directory: + - uses: msys2/setup-msys2@v2 + id: setup-msys2 + with: + update: true + install: >- + patch + if: ${{ matrix.os != 'windows-2019' }} + - name: patch path + shell: msys2 {0} + run: echo PATCH=$(cygpath -wa $(command -v patch)) >> $GITHUB_ENV + if: ${{ steps.setup-msys2.outcome == 'success' }} + - uses: actions/cache@v2 + with: + path: C:\vcpkg\downloads + key: ${{ runner.os }}-vcpkg-download-${{ matrix.os }}-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-vcpkg-download-${{ matrix.os }}- + ${{ runner.os }}-vcpkg-download- + - name: Install libraries with vcpkg + run: | + vcpkg --triplet x64-windows install readline zlib + - uses: actions/cache@v2 + with: + path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey + key: ${{ runner.os }}-chocolatey-${{ matrix.os }}-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-chocolatey-${{ matrix.os }}- + ${{ runner.os }}-chocolatey- + - name: Install libraries with chocolatey + run: | + # Using Choco-Install for retries, but it doesn't detect failures properly + # if you pass multiple package names in a single command. + Choco-Install -PackageName openssl + Choco-Install -PackageName winflexbison3 + shell: pwsh + - name: git config + 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 + - uses: actions/checkout@v2 + with: + path: src + - uses: actions/cache@v2 + with: + path: src/.downloaded-cache + key: downloaded-cache + - name: setup env + # %TEMP% is inconsistent with %TMP% and test-all expects they are consistent. + # https://github.com/actions/virtual-environments/issues/712#issuecomment-613004302 + run: | + set | C:\msys64\usr\bin\sort > old.env + call %VCVARS% + set TMP=%USERPROFILE%\AppData\Local\Temp + set TEMP=%USERPROFILE%\AppData\Local\Temp + set /a TEST_JOBS=(15 * %NUMBER_OF_PROCESSORS% / 10) > nul + set | C:\msys64\usr\bin\sort > new.env + C:\msys64\usr\bin\comm -13 old.env new.env >> %GITHUB_ENV% + del *.env + - name: Configure + run: | + ../src/win32/configure.bat --disable-install-doc --enable-bundled-libffi --with-opt-dir=C:/vcpkg/installed/x64-windows --with-openssl-dir="C:/Program Files/OpenSSL-Win64" + - run: nmake incs + - run: nmake extract-extlibs + - run: nmake + env: + YACC: win_bison + - run: nmake test + timeout-minutes: 5 + - run: nmake test-all + env: + RUBY_TESTOPTS: -j${{env.TEST_JOBS}} --job-status=normal + timeout-minutes: 60 + continue-on-error: ${{ matrix.continue-on-error || false }} + - run: nmake test-spec + timeout-minutes: 10 + continue-on-error: ${{ matrix.continue-on-error || false }} + - uses: k0kubun/action-slack@v2.0.0 + with: + payload: | + { + "ci": "GitHub Actions", + "env": "VS${{ matrix.vs }} / ${{ matrix.test_task || 'check' }}", + "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "commit": "${{ github.sha }}", + "branch": "${{ github.ref }}".split('/').reverse()[0] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot + if: ${{ failure() && github.event_name == 'push' }} + +defaults: + run: + working-directory: build + shell: cmd diff --git a/ruby/.github/workflows/yjit-ubuntu.yml b/ruby/.github/workflows/yjit-ubuntu.yml new file mode 100644 index 000000000..c479b8a62 --- /dev/null +++ b/ruby/.github/workflows/yjit-ubuntu.yml @@ -0,0 +1,112 @@ +name: YJIT Ubuntu +on: + push: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + pull_request: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + +concurrency: + group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} + cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} + +jobs: + make: + strategy: + matrix: + test_task: ["check"] # "test-bundler-parallel", + os: + - ubuntu-20.04 +# - ubuntu-18.04 + yjit_opts: [ + "--yjit", + "--yjit --yjit-call-threshold=1", + ] + configure: ["", "cppflags=-DRUBY_DEBUG"] + include: + - test_task: "test-all TESTS=--repeat-count=2" + os: ubuntu-20.04 + configure: "" + yjit_enable_env: RUBY_YJIT_ENABLE + - test_task: "test-bundled-gems" + os: ubuntu-20.04 + configure: "cppflags=-DRUBY_DEBUG" + yjit_enable_env: RUBY_YJIT_ENABLE + fail-fast: false + env: + GITPULLOPTIONS: --no-tags origin ${{github.ref}} + RUN_OPTS: ${{ matrix.yjit_opts }} + RUBY_DEBUG: ci + runs-on: ${{ matrix.os }} + if: ${{ !startsWith(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} + steps: + - run: mkdir build + working-directory: + - name: Install libraries + run: | + set -x + sudo apt-get update -q || : + sudo apt-get install --no-install-recommends -q -y build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev bison autoconf ruby + - name: git config + run: | + git config --global advice.detachedHead 0 + git config --global init.defaultBranch garbage + - uses: actions/checkout@v2 + with: + path: src + - uses: actions/cache@v2 + with: + path: src/.downloaded-cache + key: downloaded-cache + - name: Fixed world writable dirs + run: | + chmod -v go-w $HOME $HOME/.config + sudo chmod -R go-w /usr/share + sudo bash -c 'IFS=:; for d in '"$PATH"'; do chmod -v go-w $d; done' || : + - name: Set ENV + run: | + echo "GNUMAKEFLAGS=-j$((1 + $(nproc --all)))" >> $GITHUB_ENV + - run: ./autogen.sh + working-directory: src + - name: Run configure + run: ../src/configure -C --disable-install-doc ${{ matrix.configure }} + - run: make incs + - run: make + - run: make leaked-globals + if: ${{ matrix.test_task == 'check' }} + - run: make prepare-gems + if: ${{ matrix.test_task == 'check' }} + - name: Create dummy files in build dir + run: | + ./miniruby -e '(("a".."z").to_a+("A".."Z").to_a+("0".."9").to_a+%w[foo bar test zzz]).each{|basename|File.write("#{basename}.rb", "raise %(do not load #{basename}.rb)")}' + if: ${{ matrix.test_task == 'check' }} + - name: Enable YJIT through ENV + run: echo "RUBY_YJIT_ENABLE=1" >> $GITHUB_ENV + if: ${{ matrix.yjit_enable_env }} + - run: make -s ${{ matrix.test_task }} RUN_OPTS="$RUN_OPTS" + timeout-minutes: 60 + env: + RUBY_TESTOPTS: "-q --tty=no" + TEST_BUNDLED_GEMS_ALLOW_FAILURES: "" + - uses: k0kubun/action-slack@v2.0.0 + with: + payload: | + { + "ci": "GitHub Actions", + "env": "${{ matrix.os }} / ${{ matrix.test_task }}${{ matrix.configure }}", + "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "commit": "${{ github.sha }}", + "branch": "${{ github.ref }}".split('/').reverse()[0] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot + if: ${{ failure() && github.event_name == 'push' }} + +defaults: + run: + working-directory: build diff --git a/ruby/.github/workflows/yjit_asm_tests.yml b/ruby/.github/workflows/yjit_asm_tests.yml new file mode 100644 index 000000000..8a9052dd4 --- /dev/null +++ b/ruby/.github/workflows/yjit_asm_tests.yml @@ -0,0 +1,38 @@ +name: YJIT x86 assembler tests + +on: + push: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + pull_request: + paths-ignore: + - 'doc/**' + - '**.md' + - '**.rdoc' + +concurrency: + group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} + cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} + +jobs: + test: + runs-on: ubuntu-latest + if: ${{ !startsWith(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} + steps: + - name: Install dependencies + run: | + set -x + sudo apt-get update -q || : + sudo apt-get install --no-install-recommends -q -y build-essential + - name: git config + run: | + git config --global advice.detachedHead 0 + git config --global init.defaultBranch garbage + - uses: actions/checkout@v2 + with: + path: src + - name: Run ASM tests + run: ./misc/test_yjit_asm.sh + working-directory: src diff --git a/ruby/.gitignore b/ruby/.gitignore new file mode 100644 index 000000000..31bfd787a --- /dev/null +++ b/ruby/.gitignore @@ -0,0 +1,234 @@ +*-*-*.def +*-*-*.exp +*-*-*.lib +*.a +*.bak +*.bc +*.bundle +*.dSYM +*.dmyh +*.dylib +*.elc +*.i +*.ii +*.inc +*.log +*.o +*.obj +*.old +*.orig +*.pch +*.pdb +*.rbinc +*.rej +*.s +*.sav +*.sl +*.so +*.swp +*.yarb +*~ +.*.list +.*.time +.DS_Store +.bundle +.ccmalloc +.ext +.pc +.ppack +.svn +.time +.ruby-version +Makefile +cygruby*.def +extconf.h +y.output +y.tab.c +*.gcda +*.gcno +*.gcov +*.vscode +lcov*.info + +# / +/*-fake.rb +/*.dll +/*.exe +/*.res +/*.pc +/*.rc +/*_prelude.c +/.downloaded-cache +/.top-enc.mk +/build*/ +/COPYING.LIB +/ChangeLog +/Doxyfile +/GNUmakefile +/README.atheos +/README.fat-patch +/README.v6 +/TAGS +/archive +/autom4te*.cache +/automake +/benchmark/benchmark-driver +/beos +/bmlog-* +/breakpoints.gdb +/config.cache +/config.h +/config.h.in +/config.status +/config.status.lineno +/configure +/coverage/simplecov +/coverage/simplecov-html +/coverage/doclie +/coverage/.last_run.json +/coverage/.resultset.json* +/coverage/assets +/coverage/index.html +/doc/capi +/enc.mk +/encdb.h +/exts.mk +/goruby +/id.[ch] +/largefile.h +/lcov-c-out +/lcov-rb-out +/lcov-out +/lex.c +/libruby*.* +/miniprelude.c +/miniruby +/newdate.rb +/newline.c +/newver.rb +/parse.c +/parse.h +/patches +/patches-master +/pitest.rb +/ppack +/prelude.c +/preview +/probes.dmyh +/probes.h +/rbconfig.rb +/rename2.h +/repack +/revision.h +/revision.tmp +/riscos +/rubicon +/ruby +/ruby-runner +/ruby-runner.h +/ruby-man.rd.gz +/run.gdb +/sizes.c +/static-ruby +/test.rb +/test-coverage.dat +/tmp +/transdb.h +/uncommon.mk +/verconf.h +/verconf.mk +/web +/yasmdata.rb + +# /bin/ + +/bin/*.exe +/bin/*.dll + +# /benchmark/ +/benchmark/bm_require.data +/benchmark/bmx_*.rb +/benchmark/fasta.output.* +/benchmark/wc.input + +/enc/*.def +/enc/*.exp +/enc/*.lib +/enc/jis/props.h +/enc/unicode/data + +# /coroutine/ +!/coroutine/**/*.s + +# /enc/trans/ +/enc/trans/*.c +/enc/trans/*.def +/enc/trans/*.exp +/enc/trans/*.lib + +# /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/-test-/gems +/ext/-test-/gems + +# /ext/etc/ +/ext/etc/constdefs.h + +# /ext/fiddle/ +/ext/fiddle/libffi-* + +# /ext/rbconfig/ +/ext/rbconfig/sizeof/sizes.c +/ext/rbconfig/sizeof/limits.c + +# /ext/ripper/ +/ext/ripper/eventids1.c +/ext/ripper/.eventids2-check +/ext/ripper/eventids2table.c +/ext/ripper/ripper.* +/ext/ripper/ids1 +/ext/ripper/ids2 + +# /ext/socket/ +/ext/socket/constants.h +/ext/socket/constdefs.h +/ext/socket/constdefs.c + +# /gems +/gems/*.gem +/gems/src +/gems/*-* + +# /lib/ +/lib/ruby/[1-9]*.* +/lib/ruby/vendor_ruby + +# /spec/bundler +/.rspec_status + +# /tool/ +/tool/config.guess +/tool/config.sub + +# /win32/ +/win32/*.ico + +# MJIT +/rb_mjit_header.h +/mjit_config.h +/include/ruby-*/*/rb_mjit_min_header-*.h diff --git a/ruby/.travis.yml b/ruby/.travis.yml index 71945e349..f8c66f715 100644 --- a/ruby/.travis.yml +++ b/ruby/.travis.yml @@ -6,22 +6,16 @@ # 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. +# We only manage non-amd64 free pipelines. +# https://docs.travis-ci.com/user/billing-overview/ language: c os: linux -dist: xenial +if: commit_message !~ /^\[DOC\]/ + +dist: focal git: quiet: true @@ -34,6 +28,10 @@ cache: env: global: + # The tests skipped in `make test-all`. + - TEST_ALL_SKIPPED_TESTS= + # The tests executed separately by `make test-all`. + - TEST_ALL_SEPARATED_TESTS= # Reset timestamps early - _=$(touch NEWS && find . -type f -exec touch -r NEWS {} +) - CONFIGURE_TTY=no @@ -46,415 +44,118 @@ env: - SETARCH= - RUBY_PREFIX=/tmp/ruby-prefix - GEMS_FOR_TEST='timezone tzinfo' - - UPDATE_UNICODE="UNICODE_FILES=. UNICODE_PROPERTY_FILES=. UNICODE_AUXILIARY_FILES=. UNICODE_EMOJI_FILES=." # https://github.com/travis-ci/travis-build/blob/e411371dda21430a60f61b8f3f57943d2fe4d344/lib/travis/build/bash/travis_apt_get_options.bash#L7 - travis_apt_get_options='--allow-downgrades --allow-remove-essential --allow-change-held-packages' - travis_apt_get_options="-yq --no-install-suggests --no-install-recommends $travis_apt_get_options" + # -O1 is faster than -O3 in our tests. + - optflags=-O1 + # -g0 disables backtraces when SEGV. Do not set that. + - debugflags=-ggdb3 .org.ruby-lang.ci.matrix-definitions: - - &cron-only - if: (type = cron) AND (branch = master) AND (fork = false) - - - &make-test-only - script: - - $SETARCH make -s test TESTOPTS="${TESTOPTS=$JOBS -q --tty=no}" - - - &gcc-8 - compiler: gcc-8 - # # Not using addon to control retries - # addons: - # apt: - # sources: - # - ubuntu-toolchain-r-test - before_install: - - tool/travis_retry.sh sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" - - tool/travis_retry.sh sudo bash -c "rm -rf '${TRAVIS_ROOT}/var/lib/apt/lists/'* && exec apt-get update -yq" - - |- - ${BEFORE_INSTALL} - tool/travis_retry.sh sudo -E apt-get $travis_apt_get_options install \ - ccache \ - gcc-8 \ - g++-8 \ - libffi-dev \ - libgdbm-dev \ - libgmp-dev \ - libjemalloc-dev \ - libncurses5-dev \ - libncursesw5-dev \ - libreadline6-dev \ - libssl-dev \ - libyaml-dev \ - openssl \ - valgrind \ - zlib1g-dev - - - &clang-8 - compiler: clang-8 - addons: - apt: - # Not doing this manually unlike other sources, because it has been stable. - sources: - - llvm-toolchain-xenial-8 - config: - retries: true + - &gcc-10 + compiler: gcc-10 before_install: - tool/travis_retry.sh sudo bash -c "rm -rf '${TRAVIS_ROOT}/var/lib/apt/lists/'* && exec apt-get update -yq" - - |- - tool/travis_retry.sh sudo -E apt-get $travis_apt_get_options install \ - clang-8 \ - llvm-8-tools \ - libffi-dev \ - libgdbm-dev \ - libgmp-dev \ - libjemalloc-dev \ - libncurses5-dev \ - libncursesw5-dev \ - libreadline6-dev \ - libssl-dev \ - libyaml-dev \ - openssl \ - valgrind \ - zlib1g-dev + - >- + tool/travis_retry.sh sudo -E apt-get $travis_apt_get_options install + ccache + gcc-10 + g++-10 + libffi-dev + libgdbm-dev + libncurses-dev + libncursesw5-dev + libreadline-dev + libssl-dev + libyaml-dev + openssl + zlib1g-dev # -------- - - &x86_64-linux - name: x86_64-linux - <<: *gcc-8 - - &arm64-linux name: arm64-linux arch: arm64 - <<: *gcc-8 + <<: *gcc-10 + + - &ppc64le-linux + name: ppc64le-linux + arch: ppc64le + <<: *gcc-10 - &s390x-linux name: s390x-linux arch: s390x - <<: *gcc-8 - - - &jemalloc - name: --with-jemalloc - <<: *gcc-8 - <<: *cron-only - env: - - CONFIG_FLAG='--with-gmp --with-jemalloc --with-valgrind' - - - &assertions - name: RUBY_DEBUG=1 - <<: *gcc-8 - #<<: *cron-only - <<: *make-test-only - env: - - GEMS_FOR_TEST= - - cppflags='-DRUBY_DEBUG -DVM_CHECK_MODE=1 -DTRANSIENT_HEAP_CHECK_MODE -DRGENGC_CHECK_MODE -DENC_DEBUG' - - - &VM_CHECK_MODE - name: VM_CHECK_MODE=3 - <<: *gcc-8 - <<: *cron-only - <<: *make-test-only - env: - - GEMS_FOR_TEST= - - cppflags=-DVM_CHECK_MODE=0x0003 - - - &SUPPORT_JOKE - name: SUPPORT_JOKE - <<: *gcc-8 - <<: *cron-only - <<: *make-test-only - env: - - BEFORE_INSTALL="sed vm_opts.h -e 's/OPT_SUPPORT_JOKE *0/OPT_SUPPORT_JOKE 1/' -i" - - - &CPDEBUG - name: CPDEBUG - <<: *gcc-8 - <<: *cron-only - <<: *make-test-only - env: - - cppflags=-DCPDEBUG - - - &WITH_COROUTINE_UCONTEXT - name: COROUTINE=ucontext - <<: *gcc-8 - <<: *cron-only - env: - - CONFIG_FLAG='--with-coroutine=ucontext' - - - &WITH_COROUTINE_COPY - name: COROUTINE=copy - <<: *gcc-8 - <<: *cron-only - env: - - CONFIG_FLAG='--with-coroutine=copy' - - - &TOKEN_THREADED_CODE - name: TOKEN_THREADED_CODE - <<: *gcc-8 - <<: *cron-only - <<: *make-test-only - env: - - GEMS_FOR_TEST= - - cppflags=-DOPT_THREADED_CODE=1 - - - &CALL_THREADED_CODE - name: CALL_THREADED_CODE - <<: *gcc-8 - <<: *cron-only - <<: *make-test-only - env: - - GEMS_FOR_TEST= - - cppflags=-DOPT_THREADED_CODE=2 - - - &NO_THREADED_CODE - name: NO_THREADED_CODE - <<: *gcc-8 - <<: *cron-only - <<: *make-test-only - env: - - GEMS_FOR_TEST= - - cppflags=-DOPT_THREADED_CODE=3 - - - &ASAN - name: -fsanitize=address - <<: *clang-8 - #<<: *cron-only - <<: *make-test-only - env: - - GEMS_FOR_TEST= - - ASAN_OPTIONS=detect_leaks=0 - - cflags='-U_FORTIFY_SOURCE -march=native -fsanitize=address -fno-omit-frame-pointer -fPIC' - - debugflags=-ggdb3 - - optflags=-O1 - - LD=clang-8 - - LDFLAGS='-fsanitize=address -fPIC' - - CONFIG_FLAG='--with-out-ext=openssl --without-gmp --without-jemalloc --without-valgrind' - - - &MSAN - name: -fsanitize=memory - <<: *clang-8 - #<<: *cron-only - <<: *make-test-only - env: - - GEMS_FOR_TEST= - - cflags='-U_FORTIFY_SOURCE -fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -fPIC' - - optflags=-O1 - - LD=clang-8 - - LDFLAGS='-fsanitize=memory -fPIC' - - CONFIG_FLAG='--with-out-ext=openssl --without-gmp --without-jemalloc --without-valgrind' - - - &UBSAN - name: -fsanitize=undefined - <<: *clang-8 - #<<: *cron-only - <<: *make-test-only - env: - - GEMS_FOR_TEST= - - cflags='-U_FORTIFY_SOURCE -fsanitize=undefined,integer,nullability -fno-sanitize=implicit-integer-sign-change,unsigned-integer-overflow' - - cppflags=-DUNALIGNED_WORD_ACCESS=0 - - debugflags=-ggdb3 - - optflags='-O1 -march=native' - - LD=clang-8 - - LDFLAGS='-fsanitize=undefined,integer,nullability -fno-sanitize=implicit-integer-sign-change,unsigned-integer-overflow' - - - &i686-linux - name: i686-linux - compiler: gcc-8 - env: - - GCC_FLAGS=-m32 - - CXX='g++-8 -m32' - - debugflags=-g0 - - SETARCH='setarch i686 --verbose --3gb' - # # Not using addon to control retries - # addons: - # apt: - # sources: - # - ubuntu-toolchain-r-test - before_install: - - tool/travis_retry.sh sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" - - tool/travis_retry.sh sudo bash -c "rm -rf '${TRAVIS_ROOT}/var/lib/apt/lists/'* && exec apt-get update -yq" - - |- - tool/travis_retry.sh sudo -E apt-get $travis_apt_get_options install \ - gcc-8-multilib \ - g++-8 \ - g++-8-multilib \ - libstdc++-8-dev:i386 \ - libffi-dev:i386 \ - libffi6:i386 \ - libgdbm-dev:i386 \ - libgdbm3:i386 \ - libncurses5-dev:i386 \ - libncurses5:i386 \ - libncursesw5-dev:i386 \ - libreadline6-dev:i386 \ - libreadline6:i386 \ - libssl-dev:i386 \ - libssl1.0.0:i386 \ - linux-libc-dev:i386 \ - zlib1g-dev:i386 \ - zlib1g:i386 + <<: *gcc-10 - &arm32-linux name: arm32-linux arch: arm64 - # https://packages.ubuntu.com/xenial/crossbuild-essential-armhf + # https://packages.ubuntu.com/focal/crossbuild-essential-armhf compiler: arm-linux-gnueabihf-gcc env: - - debugflags=-g0 - SETARCH='setarch linux32 --verbose --32bit' + # The "TestReadline#test_interrupt_in_other_thread" started failing on arm32 + # from https://www.travis-ci.com/github/ruby/ruby/jobs/529005145 + - TEST_ALL_SKIPPED_TESTS=test_interrupt_in_other_thread before_install: - sudo dpkg --add-architecture armhf - tool/travis_retry.sh sudo bash -c "rm -rf '${TRAVIS_ROOT}/var/lib/apt/lists/'* && exec apt-get update -yq" - - |- - tool/travis_retry.sh sudo -E apt-get $travis_apt_get_options install \ - ccache \ - crossbuild-essential-armhf \ - libc6:armhf \ - libstdc++-5-dev:armhf \ - libffi-dev:armhf \ - libffi6:armhf \ - libgdbm-dev:armhf \ - libgdbm3:armhf \ - libncurses5-dev:armhf \ - libncurses5:armhf \ - libncursesw5-dev:armhf \ - libreadline6-dev:armhf \ - libreadline6:armhf \ - libssl-dev:armhf \ - libssl1.0.0:armhf \ - linux-libc-dev:armhf \ - zlib1g-dev:armhf \ - zlib1g:armhf - - - &pedanticism - name: -std=c99 -pedantic - compiler: clang - <<: *make-test-only - env: - - GEMS_FOR_TEST= - - GCC_FLAGS='-std=c99 -Werror=pedantic -pedantic-errors' - - CONFIG_FLAG= - - JOBS= - >- - warnflags=' - -Wall - -Wextra - -Werror=deprecated-declarations - -Werror=division-by-zero - -Werror=extra-tokens - -Werror=implicit-function-declaration - -Werror=implicit-int - -Werror=pointer-arith - -Werror=shorten-64-to-32 - -Werror=write-strings - -Wmissing-noreturn - -Wno-constant-logical-operand - -Wno-missing-field-initializers - -Wno-overlength-strings - -Wno-parentheses-equality - -Wno-self-assign - -Wno-tautological-compare - -Wno-unused-local-typedef - -Wno-unused-parameter - -Wunused-variable' - - LDFLAGS=-Wno-unused-command-line-argument - - - &rubyspec - name: Check ruby/spec version guards on Ruby 2.4 - language: ruby - rvm: 2.4.6 - before_install: - install: - before_script: chmod -R u+w spec/ruby - # -j randomly hangs. - script: ruby -C spec/ruby ../mspec/bin/mspec . - after_failure: - - echo "ruby/spec failed on Ruby 2.4. This is likely because of a missing ruby_version_is guard, please add it. See spec/README.md." - - - &baseruby - name: "BASERUBY: Ruby 2.2" - <<: *gcc-8 - <<: *make-test-only - language: ruby - rvm: 2.2 - - - &dependency - name: Check dependencies in makefiles - language: ruby - before_install: - install: - before_script: - - |- - ruby -e 'new = [] - Dir.glob("ext/**/extconf.rb") {|ex| - unless File.exist?(dep = File.dirname(ex)+"/depend") - puts "Adding "+dep - File.copy_stream("template/depend.tmpl", dep) - new << dep - end - } - exec("git", "add", *new) unless new.empty?' - - git diff --cached - - "> config.status" - - "> .rbconfig.time" - - sed -f tool/prereq.status template/Makefile.in common.mk > Makefile - - make touch-unicode-files - - make -s $JOBS $UPDATE_UNICODE up - - make -s $JOBS srcs - - rm -f config.status Makefile rbconfig.rb .rbconfig.time - - $SETARCH ./configure -C --disable-install-doc --prefix=$RUBY_PREFIX --disable-rubygems 'optflags=-O0' 'debugflags=-save-temps=obj -g' - - ruby tool/update-deps --fix - script: - - git diff --no-ext-diff --ignore-submodules --exit-code - after_failure: - - echo "Dependencies need to update" - env: - - CONFIG_FLAG= + tool/travis_retry.sh sudo -E apt-get $travis_apt_get_options install + ccache + crossbuild-essential-armhf + libc6:armhf + libstdc++-10-dev:armhf + libffi-dev:armhf + libgdbm-dev:armhf + libncurses-dev:armhf + libncursesw5-dev:armhf + libreadline-dev:armhf + libssl-dev:armhf + linux-libc-dev:armhf + zlib1g-dev:armhf matrix: include: - # Build every commit: - - <<: *x86_64-linux - - <<: *arm64-linux - - <<: *i686-linux + # Build every commit (Allowed Failures): - <<: *arm32-linux + # Comment out as the 2nd arm64 pipeline is unstable. + # - <<: *arm64-linux + - <<: *ppc64le-linux - <<: *s390x-linux - - <<: *pedanticism - - <<: *assertions - - <<: *baseruby - - <<: *rubyspec - - <<: *dependency - # Build every commit (Allowed Failures): - - <<: *ASAN - - <<: *MSAN - - <<: *UBSAN - # Cron only: - - <<: *jemalloc - - <<: *VM_CHECK_MODE - - <<: *SUPPORT_JOKE - - <<: *CPDEBUG - - <<: *WITH_COROUTINE_UCONTEXT - - <<: *WITH_COROUTINE_COPY - - <<: *TOKEN_THREADED_CODE - - <<: *CALL_THREADED_CODE - - <<: *NO_THREADED_CODE allow_failures: + # We see multiple errors indicating errors on the Travis environment itself in a short while: + # https://app.travis-ci.com/github/ruby/ruby/jobs/544382885 + # https://app.travis-ci.com/github/ruby/ruby/jobs/544361370 + # It's not a fault of Ruby's arm32 support but just Travis arm32 seems unsable. + - name: arm32-linux + # - name: arm64-linux + # We see "Some worker was crashed." in about 40% of recent ppc64le-linux jobs + # e.g. https://app.travis-ci.com/github/ruby/ruby/jobs/530959548 + - name: ppc64le-linux + # Tentatively disable, because often hungs up **after** all tests + # have finished successfully and saving caches. - name: s390x-linux - - name: -fsanitize=address - - name: -fsanitize=memory - - name: -fsanitize=undefined fast_finish: true before_script: - - date # Debugging "Permission defined" failure on darwin like https://travis-ci.org/ruby/ruby/jobs/508683759 - - dpkg --print-architecture - - dpkg --print-foreign-architectures - - setarch --list - - echo JOBS=${JOBS} SETARCH=${SETARCH} - - $SETARCH uname -a - - $SETARCH uname -r + - . tool/ci_functions.sh + - |- + if [ -n "${TEST_ALL_SKIPPED_TESTS}" ]; then + TEST_ALL_OPTS="${TEST_ALL_OPTS} $(ci_to_excluded_test_opts "${TEST_ALL_SKIPPED_TESTS}")" + if [ -z "${TEST_ALL_SEPARATED_TESTS}" ]; then + TEST_ALL_SEPARATED_TESTS="${TEST_ALL_SKIPPED_TESTS}" + fi + fi + - |- + if [ -n "${TEST_ALL_SEPARATED_TESTS}" ]; then + TEST_ALL_OPTS_SEPARATED="$(ci_to_included_test_opts "${TEST_ALL_SEPARATED_TESTS}")" + fi + - echo TEST_ALL_OPTS="${TEST_ALL_OPTS}" TEST_ALL_OPTS_SEPARATED="${TEST_ALL_OPTS_SEPARATED}" - rm -fr .ext autom4te.cache - - echo $TERM - |- [ -d ~/.downloaded-cache ] || mkdir ~/.downloaded-cache @@ -462,9 +163,8 @@ before_script: - "> config.status" - "> .rbconfig.time" - sed -f tool/prereq.status template/Makefile.in common.mk > Makefile - - date; make touch-unicode-files - - date; make -s $JOBS $UPDATE_UNICODE up - - date; make -s $JOBS srcs + - make -s $JOBS up + - make -s $JOBS srcs - rm -f config.status Makefile rbconfig.rb .rbconfig.time - |- if [ -d ~/config_2nd ]; then @@ -476,7 +176,6 @@ before_script: - chmod -R a-w . - chmod -R u+w build config_1st config_2nd - cd build - - ccache --show-stats - |- case "$CC" in gcc*) CC="ccache $CC${GCC_FLAGS:+ }$GCC_FLAGS -fno-diagnostics-color";; @@ -496,20 +195,7 @@ before_script: - mv ../config_2nd ~ - chmod u-w .. - $SETARCH make -s $JOBS - - |- - date; : # Debugging "Permission defined" failure on darwin like https://travis-ci.org/ruby/ruby/jobs/508683759 - if ! make install; then - if [ "$(uname)" = Darwin ]; then - # Debugging "Permission defined" failure on darwin like https://travis-ci.org/ruby/ruby/jobs/508683759 - set -x - date - ./miniruby -e 'ARGV.map{|path|[path,File.stat(path)]}.sort_by{|path,st|st.mtime}.each{|path,st|p mtime:st.mtime.to_f, ctime:st.ctime.to_f, path:path}' .ext/.timestamp/.RUBYCOMMONDIR*time .ext/common/bigdecimal/*.rb ../ext/bigdecimal/lib/bigdecimal/*.rb . .. .ext .ext/common .ext/common/bigdecimal ext/bigdecimal ../ext ../ext/bigdecimal ../ext/bigdecimal/lib ../ext/bigdecimal/lib/bigdecimal - make COPY='cp -f' install - else - exit 1 - fi - fi - - ccache --show-stats + - make -s install - |- [ -z "${GEMS_FOR_TEST}" ] || $RUBY_PREFIX/bin/gem install --no-document $GEMS_FOR_TEST @@ -517,17 +203,18 @@ before_script: script: - $SETARCH make -s test -o showflags TESTOPTS="${TESTOPTS=$JOBS -q --tty=no}" - - travis_wait 50 $SETARCH make -s test-all -o exts TESTOPTS="${TESTOPTS} ${TEST_ALL_OPTS}" RUBYOPT="-w" + - ../tool/travis_wait.sh $SETARCH make -s test-all -o exts TESTOPTS="$JOBS -q --tty=no ${TEST_ALL_OPTS}" RUBYOPT="-w" + # Run the failing tests separately returning ok status to check if it works, + # visualize them. + - | + if [ -n "${TEST_ALL_OPTS_SEPARATED}" ]; then + $SETARCH make -s test-all -o exts TESTOPTS="$JOBS -v --tty=no ${TEST_ALL_OPTS_SEPARATED}" RUBYOPT="-w" || : + fi - $SETARCH make -s test-spec MSPECOPT=-ff # not using `-j` because sometimes `mspec -j` silently dies - $SETARCH make -s -o showflags leaked-globals -# Branch matrix. Not all branches are Travis-ready so we limit branches here. -branches: - only: - - master - - ruby_2_4 - - ruby_2_5 - - ruby_2_6 +# We enable Travis on the specific branches or forked repositories here. +if: (repo = ruby/ruby AND (branch = master OR branch =~ /^ruby_\d_\d$/)) OR repo != ruby/ruby # We want to be notified when something happens. notifications: @@ -539,12 +226,11 @@ notifications: template: - "%{message} by @%{author}: See %{build_url}" - slack: - rooms: - - secure: ah7UEHBvncXT7bM5mvYIQAO+tIyV/wl7nXLb7wQD16dO2v8Gragy0mWjB79Q09hrrMGmp6H9bCDpdGS80boIA5EHaHoG4QaP0i9bsSt8U2AMWgZtfyIgQKJ4H2kXkGlrjO+AXTgnIkP7LNjdgAVUUTGQPb26T3QmoN2Splt+fIQ= # ruby:#alerts - on_pull_requests: false - on_success: change + webhooks: + urls: + - secure: mRsoS/UbqDkKkW5p3AEqM27d4SZnV6Gsylo3bm8T/deltQzTsGzZwrm7OIBXZv0UFZdE68XmPlyHfZFLSP2V9QZ7apXMf9/vw0GtcSe1gchtnjpAPF6lYBn7nMCbVPPx9cS0dwL927fjdRM1vj7IKZ2bk4F0lAJ25R25S6teqdk= # ruby-lang slack: ruby/simpler-alerts-bot (travis) + on_success: never on_failure: always email: - - ko1c-failure@atdot.net + - jaruga@ruby-lang.org diff --git a/ruby/BSDL b/ruby/BSDL index a009caefe..66d93598a 100644 --- a/ruby/BSDL +++ b/ruby/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/ruby/CONTRIBUTING.md b/ruby/CONTRIBUTING.md index ffdf2dd4b..7363c106a 100644 --- a/ruby/CONTRIBUTING.md +++ b/ruby/CONTRIBUTING.md @@ -1,4 +1,5 @@ -Please see the [official issue tracker] and wiki [HowToContribute]. +Please see the [official issue tracker], [doc/contributing.rdoc] and wiki [HowToContribute]. [official issue tracker]: https://bugs.ruby-lang.org +[doc/contributing.rdoc]: contributing.rdoc [HowToContribute]: https://bugs.ruby-lang.org/projects/ruby/wiki/HowToContribute diff --git a/ruby/ChangeLog b/ruby/ChangeLog deleted file mode 100644 index ba9e2921a..000000000 --- a/ruby/ChangeLog +++ /dev/null @@ -1,55893 +0,0 @@ --*- coding: utf-8 -*- - -commit a0c7c23c9cec0d0ffcba012279cd652d28ad5bf3 - Author: NARUSE, Yui - Date: 2020-03-31 19:27:41 +0900 - - v2.7.1p83 - -commit f832d957b837d5167058a3f8579d66e5b5d3472e - Author: NARUSE, Yui - Date: 2020-03-31 19:26:10 +0900 - - ext/socket/init.c: do not return uninitialized buffer - - BasicSocket#read_nonblock and some methods changes the size of a buffer - string, but when no data is available, the buffer is returned as - uninitialized. - - Co-Authored-By: Samuel Williams - -commit 5caee29164de6477b5cad1328b56e696a41d5025 - Author: git - Date: 2020-03-31 16:31:53 +0900 - - * 2020-03-31 [ci skip] - -commit bb93659fefd7f4557129043742771a33bd30c255 - Author: Jeremy Evans - Date: 2020-03-31 16:10:57 +0900 - - Fix pp when passed a empty ruby2_keywords-flagged hash as array element (#2966) - - This causes problems because the hash is passed to a block not - accepting keywords. Because the hash is empty and keyword flagged, - it is removed before calling the block. This doesn't cause an - ArgumentError because it is a block and not a lambda. Just like - any other block not passed required arguments, arguments not - passed are set to nil. - - Issues like this are a strong reason not to have ruby2_keywords - by default. - - Fixes [Bug #16519] - - This backports 28d31ead34baff1c4abc0d7d902ef4bc1d576fb2 and - 0ea759eac9234afc47e8fb1bcacfe9ee12c8ffb6, but needed to be modified - for 2.7 as 2.7 will perform empty keyword to positional hash - conversion for required arguments, which will happen if "v" in the - seplist method is empty when yielded. - - Co-authored-by: NARUSE, Yui - -commit d04856bdc502eec4055da1e5cf717639c314e189 - Author: git - Date: 2020-03-30 19:15:42 +0900 - - * 2020-03-30 [ci skip] - -commit b5fa156b7907b8ea1baf8b9f0cb6a66b0fecb3d4 - Author: Alan Wu - Date: 2020-03-11 23:37:14 +0900 - - Clear all trace events during teardown - - Since 0c2d81dada, not all trace events are cleared during VM teardown. - This causes a crash when there is a tracepoint for - `RUBY_INTERNAL_EVENT_GC_EXIT` active during teardown. - - The commit looks like a refactoring commit so I think this change was - unintentional. - - [Bug #16682] - - (cherry picked from commit b385f7670ffa420790bc548747fa4b58c4c5d8f6) - -commit 0057fe4063b57b445d6ffc893e442f362e3a19e0 - Author: aycabta - Date: 2020-03-30 19:09:50 +0900 - - Ruby 2.7 backport about IRB (#2990) - - * [ruby/reline] Sort completion list - - #### Legacy mode: - - ```console - $ irb --legacy - irb(main):001:0> l[TAB][TAB] - lambda load local_variables loop - ``` - - #### Before this patch: - - ```console - $ irb - irb(main):001:0> l[TAB][TAB] - local_variables - loop - lambda - load - ``` - - #### After this patch: - - ```console - $ irb - irb(main):001:0> l[TAB][TAB] - lambda - load - local_variables - loop - ``` - - https://github.com/ruby/reline/commit/6074069c7d - - * Drop an invalid char as UTF-8 - - * Add test_completion_with_indent_and_completer_quote_characters - - This is for 8a705245e55575d4d310a2e956b89a36a5931971. - - * [ruby/irb] Add tests for RubyLex - - The set_auto_indent method calculates the correct number of spaces for - indenting a line. We think there might be a few bugs in this method so - we are testing the current functionality to make sure nothing breaks - when we address those bugs. - - Example test failure: - - ``` - 1) Failure: - TestIRB::TestRubyLex#test_auto_indent [/Users/Ben/Projects/irb/test/irb/test_ruby_lex.rb:75]: - Calculated the wrong number of spaces for: - def each_top_level_statement - initialize_input - catch(:TERM_INPUT) do - loop do - begin - prompt - unless l = lex - throw :TERM_INPUT if @line == '' - else - . - <10> expected but was - <12>. - ``` - - https://github.com/ruby/irb/commit/752d5597ab - - * [ruby/reline] Degenerate the terminal size to [$LINES, $COLUMNS] if it is unknown - - This is a workaround for https://github.com/ruby/irb/issues/50 - - https://github.com/ruby/reline/commit/5725677d1a - - * [ruby/irb] Fix newline depth with multiple braces - - This commit fixes the check_newline_depth_difference method to multiple - open braces on one line into account. Before this change we were - subtracting from the depth in check_newline_depth_difference on - every open brace. This is the right thing to do if the opening and - closing brace are on the same line. For example in a method definition we - have an opening and closing parentheses we want to add 1 to our depth, - and then remove it. - - ``` - def foo() - end - ``` - - However this isn't the correct behavior when the brace spans multiple - lines. If a brace spans multiple lines we don't want to subtract from - check_newline_depth_difference and we want to treat the braces the same - way as we do `end` and allow check_corresponding_token_depth to pop the - correct depth. - - Example of bad behavior: - - ``` - def foo() - [ - ] - puts 'bar' - end - ``` - - Example of desired behavior: - - ``` - def foo() - [ - ] - puts 'bar' - end - ``` - - https://github.com/ruby/irb/commit/7dc8af01e0 - - * text/readline/test_readline.rb - fix skip on Reline (#2743) - - TestRelineAsReadline#test_input_metachar passes on MinGW - - * Add "require 'openstruct'" what is forgotten - - * [ruby/irb] Fix lib name of OpenStruct - - https://github.com/ruby/irb/commit/1f3a84ab6b - - * Add load path and require for ruby/ruby - - * Rescue EOFError - - If C-d is pressed before IRB is ready, IRB crashes because EOFError occurs. - - * Complete indented and quoted string correctly - - def foo - ''.upca[TAB] - - This will be completed to be: - - def foo - ''.upcase - - The indent was gone. This commit fixes the bug. - - * [ruby/irb] Fix crashing when multiple open braces per line - - https://github.com/ruby/irb/issues/55 - - If we had put multiple open braces on a line the with no closing brace - spaces_of_nest array keeps getting '0' added to it. This means that when - we pop off of this array we are saying that we should be in position zero - for the next line. This is an issue because we don't always want to be - in position 0 after a closing brace. - - Example: - ``` - [[[ - ] - ] - ] - ``` - In the above example the 'spaces_of_nest' array looks like this after - the first line is entered: [0,0,0]. We really want to be indented 4 - spaces for the 1st closing brace 2 for the 2nd and 0 for the 3rd. i.e. - we want it to be: [0,2,4]. - - We also saw this issue with a heredoc inside of an array. - - ``` - [<") - it fails with: - irb/completion.rb:206:in `<<': wrong number of arguments (given 3, expected 1) (ArgumentError) - - Using Array#push instead of Array#append fixes compatibility. - - https://github.com/ruby/irb/commit/5b7bbf9c34 - - * Reline: Use a more robust detection of MinTTY - - The previous detection per get_screen_size fails when stdout is passed - to a pipe. That is the case when running ruby tests in parallel ("-j" switch). - In this case Reline believes that it's running on MinTTY and the tests - are running with ANSI IOGate instead of the Windows adapter on MINGW. - So parallel test results were different to that of a single process. - This commit fixes these differencies. - - The code is taken from git sources and translated to ruby. - NtQueryObject() is replaced by GetFileInformationByHandleEx(), because - NtQueryObject() is undocumented and is more difficult to use: - https://github.com/git-for-windows/git/blob/c5a03b1e29c69f3f06c8fabd92493edb73469176/compat/winansi.c#L558 - - * Reline: Fix changed test results due to change to UTF-8 on Windows - - In commit f8ea2860b0cac1aec79978e6c44168802958e8af the Reline encoding - for native windows console was changed to hardcoded UTF-8. - This caused failures in reline and readline tests, but they were hidden, - because parallel ruby tests incorrectly used Reline::ANSI as IOGate. - Tests failures were raised in single process mode, but not with -j switch. - - This patch corrects encodings on native Windows console. - - * [ruby/irb] [ruby/irb] Rewrite an expression to detect multiline - - https://github.com/ruby/irb/commit/ed5cf375a6 - - https://github.com/ruby/irb/commit/5b7bbf9c34 - - * [ruby/reline] Implement vi_change_meta - - https://github.com/ruby/reline/commit/8538e0e10f - - * Always refer to Reline::IOGate.encoding - - * Always use UTF-8 for Reline::GeneralIO on Windows - - * Use test_mode on Reline::History::Test for encoding - - * [ruby/reline] Support GNOME style Home/End key sequences [Bug #16510] - - https://github.com/ruby/reline/commit/788f0df845 - - * [ruby/irb] Add a new easter egg: dancing ruby - - https://github.com/ruby/irb/commit/e37dc7e58e - - * [ruby/irb] Exclude useless files from RDoc - - https://github.com/ruby/irb/commit/8f1ab2400c - - * [ruby/irb] Exclude useless files from RDoc - - * Fix inaccuracy in encoding tests - - These tests assume - Encoding.find('locale') == Encoding.find('external') - and fail if they are distinct. - - * [ruby/reline] Fix Reline::Windows#scroll_down - - I mistook Right and Bottom. - - https://github.com/ruby/reline/commit/8be401c5f5 - - * [ruby/reline] Bypass cursor down when a char is rendered at eol on Windows - - A newline is automatically inserted if a character is rendered at eol on - Windows command prompt. - - https://github.com/ruby/reline/commit/4bfea07e4a - - * [ruby/reline] Organize special keys escape sequences - - https://github.com/ruby/reline/commit/41deb1a3d9 - - * [ruby/readline-ext] Remove unnecessary -I$(top_srcdir) when it's an individual gem - - https://github.com/ruby/readline-ext/commit/efaca4a5f4 - - * [ruby/readline-ext] Check TestRelineAsReadline existance - - https://github.com/ruby/readline-ext/commit/c0a6303168 - - * [ruby/readline-ext] The ruby/assert.h is adopted by Ruby 2.7 or later - - https://github.com/ruby/readline-ext/commit/106c31fc1b - - * Revert "[ruby/readline-ext] Include ruby/assert.h in ruby/ruby.h so that assertions can be there" - - This reverts commit 425b2064d394639101854c83a061a0918b33b857. - - This cherry-pick was a mistake. - - * [ruby/readline-ext] Use require check instead of DONT_RUN_RELINE_TEST env - - https://github.com/ruby/readline-ext/commit/1df99d1481 - - * [ruby/readline-ext] Add spec.extensions - - https://github.com/ruby/readline-ext/commit/8c33abb13c - - * [ruby/readline-ext] Use rake/extensiokntask to build - - https://github.com/ruby/readline-ext/commit/b0b5f709bd - - * Fix readline build dependency - - * [ruby/irb] Add test_complete_symbol - - https://github.com/ruby/irb/commit/dbbf086c1f - - * [ruby/irb] Check doc namespace correctly - - IRB::InputCompletor::PerfectMatchedProc crashes when doc not found because a - variable name was incorrect. - - https://github.com/ruby/irb/commit/889fd4928f - - * [ruby/irb] Fix auto indent with closed brace - - A closed brace in auto-indent shouldn't affect the next brace in the same line, - but it behaves like below: - - p() { - } - - It's a bug. - - https://github.com/ruby/irb/commit/fbe59e344f - - * [ruby/irb] Use 0.step instead of (..0).each for Ruby 2.5 - - https://github.com/ruby/irb/commit/5d628ca40e - - * Revert "[ruby/irb] Add test_complete_symbol" - - This reverts commit 3af3431c2c145134996e66f3d8d9ade8ad81bde0. - - * [ruby/irb] fix reserved words and completion for them - - https://github.com/ruby/irb/commit/6184b227ad - - * Add test_complete_symbol - - The previous version of the test method used a symbol, ":abcdefg" to complete - but longer symbols that can be completed are defined by other test methods of - other libs. - - * test/irb/test_completion.rb: suppress a warning: unused literal ignored - - * [ruby/reline] Use IO#write instead of IO#print - - IO#print always adds a string of $\ automatically. - - https://github.com/ruby/reline/commit/a93119c847 - - * [ruby/irb] Version 1.2.2 - - https://github.com/ruby/irb/commit/a71753f15a - - * [ruby/reline] Version 0.1.3 - - https://github.com/ruby/reline/commit/ea2b182466 - - * [ruby/irb] Include easter-egg.rb in gemspec - - `irb` doesn't run because this file isn't included in the gem. - https://github.com/ruby/irb/commit/73cda56d25 - - * [ruby/irb] Version 1.2.3 - - https://github.com/ruby/irb/commit/dd56e06df5 - - * support multi-run test for test_readline.rb - - * [ruby/irb] `yield` outside method definition is a syntax error - - https://github.com/ruby/irb/commit/dbc7b059c7 - - * test/readline - allow ENV control of test class creation - - In ruby/ruby, the tests run on both readline & reline by creating four test classes: - ``` - TestReadline - TestReadlineHistory - - TestRelineAsReadline - TestRelineAsReadlineHistory - ``` - - Reline inports the test files and uses them in its CI. Adding the ENV control allows it to only run the `TestRelineAsReadline` classes. - - * Omit test_using_quoting_detection_proc_with_multibyte_input temporarily for random order test - - * support random order test. - - test_readline: - HISTORY should be empty. - - test_using_quoting_detection_proc: - test_using_quoting_detection_proc_with_multibyte_input: - Readline.completer_quote_characters= and - Readline.completer_word_break_characters= doesn't accept nil, - so skip if previous values are nil. - - * Set Readline.completion_append_character = nil always - - GNU Readline add a white space when Readline.completion_append_character is - not initialized. - - * Fix a typo [ci skip] - - * skip test if Reline.completion_proc is nil. - - Some other tests can set Reline.completion_proc, so if it is nil, - simply skip this test. - - * Reset Reline.point - - TestRelineAsReadline#test_insert_text expects Readline.point == 0 - at the beginning of the test, but a test violate this assumption. - - * Convert incompatible encoding symbol names - - * Ignore incompatible convert of symbols - - * Add workaround for test-bundler failure - - https://github.com/ruby/actions/runs/500526558?check_suite_focus=true#step:16:127 - ``` - Failures: - - 1) Bundler.setup when Bundler is bundled doesn't blow up - Failure/Error: expect(err).to be_empty - - expected `"fatal: not a git repository (or any of the parent directories): .git\nfatal: not a git repository (o...the parent directories): .git\nfatal: not a git repository (or any of the parent directories): .git".empty?` to return true, got false - - Commands: - $ /home/runner/work/actions/actions/snapshot-master/ruby \ - -I/home/runner/work/actions/actions/snapshot-master/lib:/home/runner/work/actions/actions/snapshot-master/spec/bundler \ - -rsupport/hax -rsupport/artifice/fail \ - /home/runner/work/actions/actions/snapshot-master/libexec/bundle install --retry 0 - Resolving dependencies... - Using bundler 2.1.4 - Bundle complete! 1 Gemfile dependency, 1 gem now installed. - Use `bundle info [gemname]` to see where a bundled gem is installed. - fatal: not a git repository (or any of the parent directories): .git - fatal: not a git repository (or any of the parent directories): .git - fatal: not a git repository (or any of the parent directories): .git - # $? => 0 - - $ /home/runner/work/actions/actions/snapshot-master/ruby \ - -I/home/runner/work/actions/actions/snapshot-master/lib:/home/runner/work/actions/actions/snapshot-master/spec/bundler \ - -rsupport/hax -rsupport/artifice/fail \ - /home/runner/work/actions/actions/snapshot-master/libexec/bundle exec ruby -e \ - require\ \'bundler\'\;\ Bundler.setup - fatal: not a git repository (or any of the parent directories): .git - fatal: not a git repository (or any of the parent directories): .git - fatal: not a git repository (or any of the parent directories): .git - # $? => 0 - # ./spec/bundler/runtime/setup_spec.rb:1056:in `block (3 levels) in ' - # ./spec/bundler/spec_helper.rb:111:in `block (3 levels) in ' - # ./spec/bundler/spec_helper.rb:111:in `block (2 levels) in ' - # ./spec/bundler/spec_helper.rb:78:in `block (2 levels) in ' - make: *** [yes-test-bundler] Error 1 - ``` - - * [ruby/irb] Unnamed groups are not captured when named groups are used - - https://github.com/ruby/irb/commit/0a641a69b0 - - * [ruby/reline] Work with wrong $/ value correctly - - https://github.com/ruby/reline/commit/962ebf5a1b - - * [ruby/irb] Detect multiple lines output simplify - - The old implementation performance test code: - - require 'objspace' - puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001) - /\A.*\Z/ !~ ('abc' * 20_000_000) - puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001) - - and run `time test.rb`: - - 2.5868 MB - 62.226 MB - - real 0m1.307s - user 0m0.452s - sys 0m0.797s - - The new implementation performance test code: - - require 'objspace' - puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001) - ('abc' * 20_000_000).include?("\n") - puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001) - - and run `time test.rb`: - - 2.5861 MB - 62.226 MB - - real 0m0.132s - user 0m0.088s - sys 0m0.042s - - https://github.com/ruby/irb/commit/40d6610baf - - * [ruby/reline] Suppress error in case INPUTRC env is empty - - https://github.com/ruby/reline/commit/bce7e7562b - - * [ruby/reline] Add yamatanooroti rendering test - - https://github.com/ruby/reline/commit/f092519525 - - * [ruby/reline] Rename test suite name of yamatanooroti test - - https://github.com/ruby/reline/commit/b0f32f5de4 - - * [ruby/reline] Add a comment why rescue yamatanooroti loading error on the test - - https://github.com/ruby/reline/commit/2a8061daec - - * [ruby/irb] Suppress crashing when EncodingError has occurred without lineno - - https://github.com/ruby/irb/commit/13572d8cdc - - * [ruby/reline] Suppress error when check ambiguous char width in LANG=C - - https://github.com/ruby/reline/commit/623dffdd75 - - * [ruby/io-console] Enable only interrupt bits on `intr: true` - - https://github.com/ruby/io-console/commit/baaf929041 - - * [ruby/io-console] bump up to 0.5.4 - - * [ruby/io-console] Update the minimum requirement of Ruby version - - https://github.com/ruby/io-console/commit/73e7b6318a - - * [ruby/io-console] Filter Ruby engine name rather than just /ruby/ - - This breaks tests using this path on JRuby because the `jruby` - executable turns into `jjruby` after the sub. - - https://github.com/ruby/io-console/commit/e5951aa34c - - * [ruby/io-console] bump up to 0.5.5 - - * [ruby/io-console] Prefer keyword arguments - - https://github.com/ruby/io-console/commit/5facbfc4c8 - - * [ruby/io-console] [DOC] Improved about `intr:` - - https://github.com/ruby/io-console/commit/82b630cd79 - - * [ruby/io-console] Just ignore the extension on other than CRuby - - https://github.com/ruby/io-console/commit/41b6f09574 - - * [ruby/io-console] bump up to 0.5.6 - - Co-authored-by: KOBAYASHI Shuji - Co-authored-by: Ben - Co-authored-by: Yusuke Endoh - Co-authored-by: MSP-Greg - Co-authored-by: Nobuyoshi Nakada - Co-authored-by: Kenta Murata - Co-authored-by: Lars Kanis - Co-authored-by: Lars Kanis - Co-authored-by: Alan Wu - Co-authored-by: Hiroshi SHIBATA - Co-authored-by: Nobuhiro IMAI - Co-authored-by: Nick Lewis - Co-authored-by: S-H-GAMELINKS - Co-authored-by: Koichi Sasada - Co-authored-by: Kazuhiro NISHIYAMA - Co-authored-by: Charles Oliver Nutter - -commit ecf874edea92796c63cc2b50b36b1179de5114c6 - Author: git - Date: 2020-03-28 06:14:02 +0900 - - * 2020-03-28 [ci skip] - -commit 22c3014e36219b072fd6b1e963c4c64c7015a3cd - Author: Yusuke Endoh - Date: 2020-03-03 20:54:31 +0900 - - Suppress an "assigned but unused variable" warning - - (cherry picked from commit 501f2c44e6ae79c02a5c4d0f872fc7fa77258fcf) - -commit 44f7e3883e49d287a96f7ef36b5c935d833300e5 - Author: Nobuyoshi Nakada - Date: 2020-03-03 15:48:53 +0900 - - Preserve `kwarg` flag and fix up f5c904c2a9 - - (cherry picked from commit c8d0bf0156878df03a71fffc97c44abf7333d5d7) - -commit aeda3a7f036aa7c768abffd1965972c658f49c22 - Author: Yusuke Endoh - Date: 2020-03-02 22:37:04 +0900 - - Suppress "assigned but unused variable" warnings - - (cherry picked from commit 65dd50fc25f6522536d5c4749055384bde1f9371) - -commit 004c298738dc0924e7483b0c3f41c798dabe9e5b - Author: Nobuyoshi Nakada - Date: 2020-03-02 15:49:03 +0900 - - Allow newlines inside braced pattern - - (cherry picked from commit f5c904c2a907013e22ff74bc3686952c5448d493) - -commit 93aaa0bcce829b880d8f52a9168d17c93ecde85b - Author: Kazuki Tsujimoto - Date: 2020-03-01 14:23:51 +0900 - - Allow trailing comma in hash pattern - - (cherry picked from commit d25a4f413dce6ad3a8baaf61591415b9a8cce082) - -commit 5ccf57f23eb7a35ac699edc2fc598c47fa1844a0 - Author: Nobuyoshi Nakada - Date: 2020-03-25 22:00:15 +0900 - - Make RbConfig::CONFIG values mutable [Bug #16738] - - As `RbConfig.expand` modifies the argument and involved `CONFIG` - values, its values should be mutable. - - (cherry picked from commit 4adb2d655dcd54b28366b4d17e86b21e2b622cd1) - -commit 7b5133801340cfa7e4e4e5dd61384cb90c3f6085 - Author: Hiroshi SHIBATA - Date: 2020-01-08 16:11:52 +0900 - - Merge bundler-2.1.4 - -commit 572021c6e4e01c3b8ece90ad42fdd4ee71b8acc5 - Author: git - Date: 2020-03-26 23:51:12 +0900 - - * 2020-03-26 [ci skip] - -commit c9a7643a7e5993975e7e8c985df157d73b16a490 - Author: Yusuke Endoh - Date: 2020-03-21 15:46:33 +0900 - - test/openssl/test_ssl.rb: ignore SSLError when the connection is closed - - "test_close_after_socket_close" checks if ssl.close is no-op even after - the wrapped socket is closed. The test itself is fair, but the other - endpoint that is reading the SSL connection may fail with SSLError: - "SSL_read: unexpected eof while reading" in some environments: - - https://github.com/ruby/ruby/actions/runs/60085389 (MinGW) - https://rubyci.org/logs/rubyci.s3.amazonaws.com/android28-x86_64/ruby-master/log/20200321T034442Z.fail.html.gz - ``` - 1) Failure: - OpenSSL::TestSSL#test_close_after_socket_close [D:/a/ruby/ruby/src/test/openssl/utils.rb:299]: - exceptions on 1 threads: - SSL_read: unexpected eof while reading - ``` - - This changeset rescues and ignores the SSLError in the test. - - (cherry picked from commit be76e86e69106c6906322dc30aa75c3ff65da63c) - -commit 897d4e31b0e5b29405480ed3236bc8c5c6cac3fa - Author: Koichi Sasada - Date: 2020-03-07 03:55:54 +0900 - - check ar_table first. - - RHASH_AR_TABLE_SIZE() has assertion that it is a ar_talbe. - The last commit breaks this assumption so check ar_table first. - - (cherry picked from commit c3584dfacce4d0f2058d8403de6fdce4fd4d686b) - -commit ab6f78bc926f6fc12dc8d7846056fc9c04d63ead - Author: Koichi Sasada - Date: 2020-03-07 03:32:15 +0900 - - check ar_table after `#hash` call - - ar_table can be converted to st_table just after `ar_do_hash()` - function which calls `#hash` method. We need to check - the representation to detect this mutation. - [Bug #16676] - - (cherry picked from commit 4c019f5a626523e99e2827ed917802e3097c380d) - -commit e4efca87ba1aa5b6a94b9007040ac3e783c26b43 - Author: Koichi Sasada - Date: 2020-03-26 01:16:50 +0900 - - check flags passed to rb_nogvl() - - RB_NOGVL_UBF_ASYNC_SAFE is wrongly specified because flags - is not checked. - [Bug #15499] 23444302 - - (cherry picked from commit ff98931daca1265e5bd33025d160c77e452c399e) - -commit 2a3027b7b54a3118731f70c9e88aabbd495bb9fe - Author: Alan Wu - Date: 2020-03-14 09:59:55 +0900 - - Add missing write barrier for Hash#transform_values{,!} - - 21994b7fd686f263544fcac1616ecf3189fb78b3 removed the write barrier that - was present in rb_hash_aset(). Re-insert it to not crash during GC. - - [Bug #16689] - - (cherry picked from commit 713dc619f5372a645b66bef9dacee217c4101cb4) - -commit 95c3bb6c426a11253644a86137bb67c542fd5799 - Author: Nobuyoshi Nakada - Date: 2020-03-16 17:26:10 +0900 - - Do not make disabled directories at installation [Bug #12392] - - (cherry picked from commit 8a6ba10f9dd456cf54de800203cf04bbe42271fb) - -commit 1853efc46dba862c50df7710cfbacded999ae2ec - Author: NARUSE, Yui - Date: 2020-03-26 21:17:07 +0900 - - Use power_assert 1.1.7 - - Mainly for pry compatibility in test - https://github.com/k-tsj/power_assert/commit/dcc14cbef48d9790187fa400a5df7531d81a5971 - - Also include "Show full_message if available" - https://github.com/k-tsj/power_assert/commit/53ce0400bf47f722830d6604be0a2e30cccabf34 - -commit 47b08728cf3d0441a3da4dc1dcdd578817b0e036 - Author: Jean Boussier - Date: 2020-03-12 21:55:20 +0900 - - [ruby/stringio] StringIO#initialize default to the source string encoding - - [Bug #16497] - - https://github.com/ruby/stringio/commit/4958a5ccab - (cherry picked from commit e257c08f2ec27e2d66cdfa7e2415deb492522e22) - -commit 3efbd527a86203406664a01126784a10eb136405 - Author: Jeremy Evans - Date: 2020-01-25 05:13:41 +0900 - - Do not autosplat when calling proc with empty keyword splat - - With the removal of the splatted argument when using an empty - keyword splat, the autosplat code considered an empty keyword - splat the same as no argument at all. However, that results - in autosplat behavior changing dependent on the content of - the splatted hash, which is not what anyone would expect or - want. This change always skips an autosplat if keywords were - provided. - - Fixes [Bug #16560] - - (cherry picked from commit c1d8829ef515ee51fadeadd7dd022b5c47a71cdd) - -commit c858a10ce87033beec63516fe6407b50c6539177 - Author: git - Date: 2020-03-15 19:35:48 +0900 - - * 2020-03-15 [ci skip] - -commit a36ead3f4fe801ddaebe6d1ed905e9e3276dbac7 - Author: Takashi Kokubun - Date: 2020-02-29 16:58:33 +0900 - - Prevent unloading methods used in root_fiber while calling another Fiber (#2939) - - Fixing SEGVs like: - http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2744905 - http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2744420 - http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2741400 - [Bug #16664] - - (cherry picked from commit adcf0316d1ecedae2a9157ad941550e0c0fb510b) - -commit 17e925b9917f4877f2da8c64316feb3ce1ca2932 - Author: Takashi Kokubun - Date: 2020-02-29 16:20:44 +0900 - - Avoid infinite loop on --jit-wait - - (cherry picked from commit a8dcab723316997d9e01c89d6df969edce75bdca) - -commit c6944377d798e088042f2944b81aa3fa8a4e5411 - Author: Jean Boussier - Date: 2020-02-03 20:29:37 +0900 - - Fix SimpleDelegator respond_to? regression - - In 2.6, SimpleDelegator would always use the target `respond_to?` - - In 2.7.0 it doesn't if the target does not inherit from Object. - - This breaks compatibility for delegated objects that inherit - from BasicObject and redefine `respond_to?`. [Bug #16606] - - (cherry picked from commit f2552216d43040cd42bbb9fd484eab6c70856fe6) - -commit d07a6dc10efa71123b36a4a3ff7d2ec6e52804d7 - Author: Nobuyoshi Nakada - Date: 2020-01-21 11:47:04 +0900 - - delegate.rb: fixed keyword arguments in DelegateClass - - `Delegator.delegating_block` should delegate keyword arguments - separately. [ruby-core:96949] - - (cherry picked from commit 9bcf4f3db26249772c983896ebbc9ff41f4614db) - -commit e70d52b0c377f8b2ed04311710c0ca9f4ebabd90 - Author: Jeremy Evans - Date: 2020-02-25 06:19:37 +0900 - - Make ruby2_keywords methods correctly handle **{} optimization - - Previously, this code: - - ruby2_keywords def foo(*a) a.last end - foo(**{}) - - Returned an empty frozen hash. However, the final hash should - not be frozen in this case, as it wouldn't be if foo accepted - a keyword splat. - - Use a new unfrozen empty hash instead of reusing the frozen empty - hash in this case. - - Fixes [Bug #16642] - -commit b3fabedc7043593812c9ad507b4648a55d74df99 - Author: git - Date: 2020-03-14 20:27:57 +0900 - - * 2020-03-14 [ci skip] - -commit e7555d467b882fa8213f17643b00557ed420b640 - Author: Takashi Kokubun - Date: 2019-12-31 16:20:17 +0900 - - Drop MinGW build from AppVeyor - - in favor of #2791 - - (cherry picked from commit b00418732c89ce42c1c4cef57d08344659fbdd2b) - -commit 0d24fb774d84d4a99454ce10fd343da00049a588 - Author: Jeremy Evans - Date: 2020-03-09 23:57:16 +0900 - - Don't display singleton class in Method#inspect unless method defined there - - Previously, if an object has a singleton class, and you call - Object#method on the object, the resulting string would include - the object's singleton class, even though the method was not - defined in the singleton class. - - Change this so the we only show the singleton class if the method - is defined in the singleton class. - - Fixes [Bug #15608] - - (cherry picked from commit e02bd0e713ef920e6d12c27f16548f48ec5c2cf0) - -commit eabf35a5d298c68f45dc600477fc586d7b868788 - Author: Nobuyoshi Nakada - Date: 2020-02-10 12:15:48 +0900 - - Fixed duplicated warning - - As `command_rhs` is always a "value expression", `command_asgn` - does not need the same check. [Bug #16619] - - (cherry picked from commit 6e6844320de989cb88a154e2ac75066ccea1bba2) - -commit fa48a26d886d86469a0075d91d152252e9fc0c8c - Author: Nobuyoshi Nakada - Date: 2020-02-24 15:33:50 +0900 - - Fixed symbol misused as ID - - `rb_funcallv_public` and `rb_respond_to` require an `ID`, not a - `Symbol`. [Bug #16649] - - (cherry picked from commit 8b6e2685a4b7c7de905f7ed60c02ef85e0724754) - -commit 3e7e1b965b06f3c843972d7e2f6e3d040374d67f - Author: Nobuyoshi Nakada - Date: 2020-02-18 14:34:26 +0900 - - Pass keyword arguments to IOs properly [Bug #16639] - - (cherry picked from commit 041c2932e336b509b0ddc1fdbd9f160bce8d4893) - -commit 2339be74e737b4c5f5330f845af2e7db0c7450e1 - Author: Yusuke Endoh - Date: 2020-02-15 16:27:03 +0900 - - lib/drb/drb.rb: Use ruby2_keywords for keyword separation - - [Bug #16634] - - (cherry picked from commit fb472ca7adbaceb35aae1b3a6b948720ffc9eb53) - -commit c7e0ce67430b5e312eb626a2c2f4b6a810b3b68b - Author: Nobuyoshi Nakada - Date: 2020-02-04 15:21:49 +0900 - - Add the loaded feature after no exception raised - - Retrying after rescued `require` should try to load the same - library again. [Bug #16607] - - (cherry picked from commit 7d6903dc476f982e7b432adbeef3a3d9372a309f) - -commit 7518b4e945675df9aca223c30ca711e1d82341ec - Author: NARUSE, Yui - Date: 2020-03-13 22:31:29 +0900 - - fix the order of definition - -commit fcaa00e58fd3a4cbaa19c6558783b43ee324d19e - Author: Hiroshi SHIBATA - Date: 2020-03-07 20:42:44 +0900 - - Use osuosl instead of GitHub releases - - Because the package provided by GitHub releases is different from sourceware. - - (cherry picked from commit 47a1872cd8b901b8aab6dedce7fa3807c97d290d) - -commit 6a2d779027818eda418c9118f700b36816e833a5 - Author: Hiroshi SHIBATA - Date: 2020-03-07 19:57:28 +0900 - - Switch to download libffi source package to github releases from sourceware.org - - [Bug #16681] - (cherry picked from commit 86022167461dc90b70164e2bb23316959bbfd6ba) - -commit 60d98fad86da1ada204c53789431ac0f5f3390ff - Author: Nobuyoshi Nakada - Date: 2020-01-17 23:49:26 +0900 - - [ruby/io-console] Set `OPOST` when `intr` is true - - To enable implementation-defined output processing, for the - compatibility with readline. [Bug #16509] - - https://bugs.ruby-lang.org/issues/16509 - - https://github.com/ruby/io-console/commit/8c8b0b6757 - (cherry picked from commit 4e56ec4ef74cf77dbcb4ce7c669e0595cd0d12fa) - -commit 9f504bb474770f1cac68988eac2a410e41c4bbb8 - Author: Nobuyoshi Nakada - Date: 2020-02-09 16:56:40 +0900 - - Separate objspace argument for rb_gc_disable and rb_gc_enable - - (cherry picked from commit aeaf0dc55595b8a5bfdd92007fb85ef13855c632) - -commit 047dfbdf69e1a300109c729c66b6a761032402dd - Author: Nobuyoshi Nakada - Date: 2020-01-28 09:18:12 +0900 - - Skip empty directories to install [Bug #16596] - - (cherry picked from commit 33d02e6bc7502c5a3f09c59908a8c9f08a474b8d) - -commit 5bdbee96e479f714c7f9b6b98f012268cbd9051b - Author: NARUSE, Yui - Date: 2020-03-13 21:43:44 +0900 - - Squashed commit of the following: [Backport #16516] - - commit c98c492578d898dc07a04b8240d8d5b1508ffafa - Author: Nobuyoshi Nakada - Date: Fri Jan 17 16:56:53 2020 +0900 - - Added test for f38b3e8c707ebdcad05aa9485cf1760640b74fbb - - commit f38b3e8c707ebdcad05aa9485cf1760640b74fbb - Author: Nobuyoshi Nakada - Date: Thu Jan 16 18:34:31 2020 +0900 - - Fixed the location of args node with numbered parameter - -commit a9284ecb90176b4d8e9aa264da14ea08931be48f - Author: Nobuyoshi Nakada - Date: 2020-02-09 16:41:56 +0900 - - Disable GC until VM objects get initialized [Bug #16616] - -commit 215eb86a7729bf0db487f399031ad55a1062fada - Author: Jean Boussier - Date: 2020-01-15 22:40:01 +0900 - - Increase the frozen_strings table initial size - - It was set to 1000 in a4a2b9be7a55bb61d17cf9673ed0d2a93bb52d31. - - However on ruby-2.7.0p0, there are much more than 1k frozen string right after boot: - - ``` - $ ruby -robjspace -e 'p ObjectSpace.each_object(String).select { |s| s.frozen? && ObjectSpace.dump(s).include?(%{"fstring":true})}.uniq.count' - 5948 - ``` - -commit 8a54630a6608d9b1a9d32db2ba33289a5454810d - Author: git - Date: 2020-03-13 21:32:13 +0900 - - * 2020-03-13 [ci skip] - -commit 3c93ed59773ca547239850d16f06451afbb0aeec - Author: Adam Isom - Date: 2020-01-17 06:42:36 +0900 - - Update documentation for Array/Hash Argument section of methods.rdoc - - [Bug #16514] - -commit c3cd92582f970812be51310e377c82b6d9e7be92 - Author: Kazuhiro NISHIYAMA - Date: 2020-02-20 00:13:44 +0900 - - Use `brew upgrade` instead of `brew update` - -commit 0149863dff42e0b7b6876cc3669aa3efcab6776e - Author: git - Date: 2020-02-20 16:36:30 +0900 - - * 2020-02-20 [ci skip] - -commit eaee631d5eda03f77ec39ec6fc1826a06ab06205 - Author: Takashi Kokubun - Date: 2020-02-19 16:16:19 +0900 - - Avoid jumping to a wrong destination - - when the next insn is already compiled by former branches. - -commit ccc3b9119c39a6cb08a643ab3d15a9c07ec28b1a - Author: git - Date: 2020-02-18 15:30:37 +0900 - - * 2020-02-18 [ci skip] - -commit 789c1df10a13a53d0504d4ba87c4e246692b1973 - Author: NARUSE, Yui - Date: 2020-02-18 15:30:00 +0900 - - increment teeny - -commit 0643eb2e59dbd80f9be001c2ec77c980e8aeff3f - Author: Ryuta Kamizono - Date: 2020-01-19 12:49:40 +0900 - - Fix typo s/test_ruby2_keywords_hash!/test_ruby2_keywords_hash/ - - In #2818, `Hash.ruby2_keywords!` has renamed to `Hash.ruby2_keywords_hash`. - -commit 9820f9ee0aaccd78e6e0489e8915d3925c6ee97c - Author: Yusuke Endoh - Date: 2020-01-06 18:22:43 +0900 - - hash.c: Add a feature to manipulate ruby2_keywords flag - - It was found that a feature to check and add ruby2_keywords flag to an - existing Hash is needed when arguments are serialized and deserialized. - It is possible to do the same without explicit APIs, but it would be - good to provide them as a core feature. - - https://github.com/rails/rails/pull/38105#discussion_r361863767 - - Hash.ruby2_keywords_hash?(hash) checks if hash is flagged or not. - Hash.ruby2_keywords_hash(hash) returns a duplicated hash that has a - ruby2_keywords flag, - - [Bug #16486] - -commit 420a88d3da6deb5f7d4d8e088cb3737b9a23d29d - Author: git - Date: 2020-02-13 15:23:02 +0900 - - * 2020-02-13 [ci skip] - -commit 78cbe7106b67d007ffdcc1276b352212eaaef4b2 - Author: Nobuyoshi Nakada - Date: 2020-01-31 12:52:22 +0900 - - Return the makefile content - - Block for `create_makefile` is expected to return the content of - the makefile. - -commit b8e62ccaecf49372833d7eeeb3fdfded4bb2f042 - Author: NARUSE, Yui - Date: 2020-01-31 08:00:56 +0900 - - Move .IGNORE in extconf.rb - -commit a89821243da3c80e08bf46669e16ae46d687c80b - Author: NARUSE, Yui - Date: 2020-01-31 06:34:49 +0900 - - Support nmake - -commit a930174d798b58ee10493bf192d277ffe08518a7 - Author: NARUSE, Yui - Date: 2020-01-31 02:46:05 +0900 - - Ignore expected errors on compiling C++ source [Bug #16331] - - BSD make can run parallel more aggressively than GNU make. It communicate - with other make process through -J option in MAKEFLAGS environment variable - to notify a build failure happend in an other pararell make process. - https://www.freebsd.org/cgi/man.cgi?make - - It usually works well but ext/-test-/cxxanyargs/Makefile has two targets - which are expected to fail (failure.o and failurem1.o). - - Additional note: - To test and debug this issue, following command will speed up it. - `make -f exts.mk -j8 clean all` - -commit 95ab9cd8f453099d7649dc0e0eec55ea891340f5 - Author: Nobuyoshi Nakada - Date: 2020-02-11 15:52:25 +0900 - - Restart timer thread even after preparation failed - - If the timer thread is left stopped, memory crash or segfault can - happen. [Bug #16624] - -commit 9c07f803db1c20241fa73e91a8a959d6cbb82e8b - Author: NARUSE, Yui - Date: 2020-01-30 13:36:47 +0900 - - check ruby_2_7 branch - -commit 49430aa4e5bf4020dbdb1cce3bc547cffad6ffae - Author: Nobuyoshi Nakada - Date: 2020-01-19 11:02:18 +0900 - - Allow rexml to fail on macOS of Github Actions - - And revert "Stop test-bundled-gems on macOS for now", - 28b290f7f4cb332dab3ddf3132e1916d413ea65c. - -commit 30a9dc4aa9cb1985cfe5bd318b8b35dacc103127 - Author: Nobuyoshi Nakada - Date: 2020-01-19 09:48:33 +0900 - - Stop test-bundled-gems on macOS for now - -commit 095a937dc2c0924dbfda7f7625ac2921a10de231 - Author: Yusuke Endoh - Date: 2020-01-17 17:25:05 +0900 - - .github/workflows/cygwin.yml: Removed - - There is no active maintainer for cygwin. The CI failure is too noisy. - - [Misc #16407] - -commit 5eced3c030f39d10e193c5e33a70365d8e011bb1 - Author: Nobuyoshi Nakada - Date: 2020-01-13 10:02:04 +0900 - - Checkout with git on cygwin for EOL code - - `shell: bash` runs bash on msys which prefers git on msys too, - then checked out in CRLF mode. Cygwin sed doesn't consider the CR - a part of EOL code, though. - -commit 6ec6acd76ed7c718a469841afe4f32571e757c9d - Author: Hiroshi SHIBATA - Date: 2020-01-12 09:59:10 +0900 - - Allow failures with rss tests on test-bundled-gems - -commit 504b082f364e35516b2727c11713c28b684b5af0 - Author: Kazuhiro NISHIYAMA - Date: 2020-01-11 16:24:16 +0900 - - Add branch option to checkout on push - -commit 5dc82455aef4a42817208e11fbfbcdc1351f0734 - Author: Takashi Kokubun - Date: 2020-01-06 18:52:19 +0900 - - Slightly change the job wording [ci skip] - - mame-san said it's weird - -commit 7d4243254629004007a390f7f1afc4a570a1fd00 - Author: Takashi Kokubun - Date: 2020-01-06 18:45:47 +0900 - - Support running Actions on a fork - - Since 8c9450e7b875db846b19cc631af0d7fee66db5c6, we increased the chance - to run GitHub Actions on a fork, as we usually use a topic branch - instead of master when filing a pull request. - - This patch makes it possible to reuse the same GitHub Actions config on - a fork repository. - -commit bd48a28b1cb9848d194a82139d018f87dd689f99 - Author: Takashi Kokubun - Date: 2020-01-06 18:42:30 +0900 - - Directly refer to GitHub events - - instead of unnecessarily defining env vars - -commit 48f82ad28961c0998b1d426493614875bb487d29 - Author: Takashi Kokubun - Date: 2020-01-01 15:03:07 +0900 - - Remove code to prevent double build on trunk - - trunk branch was deleted. - -commit fdd9d7cd41cde130889d84414395da22706972c8 - Author: Takashi Kokubun - Date: 2020-01-01 14:26:39 +0900 - - More consistent failure notifications - - The format is the same as Travis / AppVeyor now. - -commit 531bbec111d588ad497dd528eae3ac36e2af2632 - Author: Takashi Kokubun - Date: 2020-01-01 08:27:40 +0900 - - Make test run condition consistent with other jobs - - When `make all` fails, we should not run tests and output of such run is - confusing. - -commit 4d04b32986bb73bfd5d5e56bcd17cfa82c90885c - Author: Takashi Kokubun - Date: 2020-01-01 03:24:00 +0900 - - Run tests in the consistent order - - `make check` runs test -> test-all -> test-spec, and other CIs follow that too. - -commit 24621f23e5cc9403910b82e671c2b299ec65bd67 - Author: Takashi Kokubun - Date: 2020-01-01 02:37:03 +0900 - - Fix an outdated comment - - We're actually using it for PR :p - -commit e3dfd9f2b5729d4d8ac4541110af409ee218aadd - Author: MSP-Greg - Date: 2020-01-01 02:35:43 +0900 - - Actions MinGW - fix test-all (#2803) - -commit a24d2f3b8cf98d067f6648a0609b6251d3e0a464 - Author: Takashi Kokubun - Date: 2020-01-01 02:34:29 +0900 - - Use actions/checkout for PR (#2804) - -commit 77dfa520d476143b8be6c4805354838012b4d335 - Author: Takashi Kokubun - Date: 2019-12-31 18:49:08 +0900 - - Official actions/checkout is useless - - It died again https://github.com/ruby/ruby/runs/368837347 - -commit 124878c6aad7c708d7121199bea29962713d319a - Author: Takashi Kokubun - Date: 2019-12-31 16:46:17 +0900 - - Make Slack notifications consistent - -commit 110b4e974ddb74472a0eb3ce181705b47eb28d50 - Author: Takashi Kokubun - Date: 2019-12-31 16:42:20 +0900 - - There's no such target - -commit 4d9f106eaefeee4b160d3c5580039c64ff9c01ae - Author: Takashi Kokubun - Date: 2019-12-31 16:30:34 +0900 - - Make all Actions job names consistent - - like "{platform} / make ({make target}, ...)" - -commit ca48fa8e81ca19f4d0c24017662245c933be86eb - Author: Takashi Kokubun - Date: 2019-12-31 16:23:25 +0900 - - Do not doubly build on trunk - -commit 44ef8af4fb0a793f020147e3f077cd061953c8fa - Author: MSP-Greg - Date: 2019-12-31 16:19:31 +0900 - - MinGW on Actions (#2791) - - * MinGW - skip spec in spec/ruby/optional/capi/thread_spec.rb - - C-API Thread function rb_thread_call_without_gvl - -- runs a C function with the global lock unlocked and unlocks IO with the generic RUBY_UBF_IO - - stops/freezes spec tests - - See https://bugs.ruby-lang.org/issues/16265 - - * MinGW - skip test test/resolv/test_dns.rb - - Test times out in CI (both AppVeyor & Actions), cannot repo locally - - * MinGW - skip test test/ruby/test_thread_queue.rb - - * Add Actions mingw.yml - -commit 6646c2b2ab7efd389075ad5f187b458c4bc138cc - Author: Takashi Kokubun - Date: 2019-12-31 16:09:24 +0900 - - Revert "Remove TEST_BUNDLED_GEMS_ALLOW_FAILURES" - - This reverts commit 75e8dd58f69c190c9698d0133942032903fb2f07. - - We seem to randomly hit another issue these days: - https://github.com/ruby/ruby/runs/368756135 - https://github.com/ruby/ruby/runs/368756191 - -commit 716e05b82338d75452e86c999ae3e5874a642ecd - Author: Nobuyoshi Nakada - Date: 2020-01-27 10:46:57 +0900 - - Fixed a segfault `GC.verify_compaction_references` - - Which is by coercion of `Qundef`, when any keyword argument - without `toward:` option is given. [Bug #16598] - -commit 52bb32d6b71365cb24273de3eed5a712206815f3 - Author: Alan Wu - Date: 2019-12-31 08:13:55 +0900 - - Fix Proc#<< spec - - [Bug #16406] - -commit db4d136889afbf59e69efcfd495fd91cd401f378 - Author: Nobuyoshi Nakada - Date: 2020-01-16 11:25:43 +0900 - - `Regexp` in `MatchData` can be `nil` - - `String#sub` with a string pattern defers creating a `Regexp` - until `MatchData#regexp` creates a `Regexp` from the matched - string. `Regexp#last_match(group_name)` accessed its content - without creating the `Regexp` though. [Bug #16508] - -commit 8e8841f6bf58031a1fe5b0dbacb5a1fb442102df - Author: Koichi Sasada - Date: 2020-01-13 03:36:47 +0900 - - reload AR table body for transient heap. - - ar_talbe (Hash representation for <=8 size) can use transient heap - and the memory area can move. So we need to restore `pair' ptr after - `func` call (which can run any programs) because of moving. - [Bug #16503] - -commit 48f324e92f9b36edc267f9871e35039cbd1c2eb9 - Author: Yusuke Endoh - Date: 2020-01-09 08:21:42 +0900 - - lib/net/imap.rb: use `&blk` instead of Kernel#proc with no block - - [Bug #16488] - -commit 580edc25aa00930bdb71b244d70a2007905f5fec - Author: Koichi Sasada - Date: 2020-01-06 11:36:51 +0900 - - script_compiled event on compile error. - - script_compiled event for TracePoint should not be invoked on - compile error (SyntaxError) because it is not "compiled". - [Bug #16459] - -commit 647ee6f091eafcce70ffb75ddf7e121e192ab217 - Author: aycabta - Date: 2019-12-25 18:46:39 +0900 - - [ruby/reline] Version 0.1.2 - - https://github.com/ruby/reline/commit/b41024e317 - -commit 1341a279a4becd91f35b23eca6d129990eccc8bb - Author: aycabta - Date: 2019-12-25 18:45:02 +0900 - - Save last breaking point to complete - -commit a52e364e6541a6e234718ac63aa7eb5c3f2c832f - Author: NARUSE, Yui - Date: 2019-12-25 18:02:53 +0900 - - fix version regexp - -commit ecbf7fe27ce444782f0a48fc41f8043a25078666 - Author: NARUSE, Yui - Date: 2019-12-25 17:01:26 +0900 - - fix typo - -commit a65e8644fb97491314387e4138cabf6378a8e8d5 - Author: NARUSE, Yui - Date: 2019-12-25 15:48:56 +0900 - - v2.7.0p0 - -commit 75dca097b873222eaf3c70b7f43e3ffb98b7f2ed - Author: Yusuke Endoh - Date: 2019-12-25 14:13:15 +0900 - - [bundler/bundler] Do `require "rubygems"` only when needed - - This require causes circular require. - - ``` - $ touch empty_file - - $ RUBYGEMS_GEMDEPS=empty_file ./local/bin/ruby -w -e '' - /home/mame/work/ruby/local/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92: warning: /home/mame/work/ruby/local/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92: warning: loading in progress, circular require considered harmful - /home/mame/work/ruby/local/lib/ruby/2.7.0/rubygems.rb - from :1:in `' - from :1:in `require' - from /home/mame/work/ruby/local/lib/ruby/2.7.0/rubygems.rb:1417:in `' - from /home/mame/work/ruby/local/lib/ruby/2.7.0/rubygems.rb:1203:in `use_gemdeps' - from /home/mame/work/ruby/local/lib/ruby/2.7.0/rubygems/user_interaction.rb:47:in `use_ui' - from /home/mame/work/ruby/local/lib/ruby/2.7.0/rubygems.rb:1204:in `block in use_gemdeps' - from /home/mame/work/ruby/local/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require' - from /home/mame/work/ruby/local/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require' - from /home/mame/work/ruby/local/lib/ruby/2.7.0/bundler.rb:11:in `' - from /home/mame/work/ruby/local/lib/ruby/2.7.0/bundler.rb:11:in `require_relative' - from /home/mame/work/ruby/local/lib/ruby/2.7.0/bundler/rubygems_integration.rb:3:in `' - from /home/mame/work/ruby/local/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require' - from /home/mame/work/ruby/local/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require' - ``` - - https://github.com/bundler/bundler/commit/c7c5bcea92 - -commit 27453b04c85249372950b6b12fabbef8c0d1a80b - Author: Kenta Murata - Date: 2019-12-25 15:21:50 +0900 - - Update the version of bigdecimal to 2.0.0 (#2784) - - Notes: - Merged-By: mrkn - -commit 56e002981fab73a94c6038cb9de82aba6ff84eb4 - Author: Nobuyoshi Nakada - Date: 2019-12-25 14:47:31 +0900 - - Show the error line only when same as the current - -commit 9808e010907bb16068497d9f0f8593a7165fa42d - Author: Koichi Sasada - Date: 2019-12-25 14:37:53 +0900 - - export a function for MJIT. - - rb_iseq_complete() can be used by MJIT. - -commit d9bf9c572f461c282fa6e65833e98bc7d453a66f - Author: Koichi Sasada - Date: 2019-12-25 14:10:35 +0900 - - take care of USE_LAZY_LOAD=1. - - On USE_LAZY_LOAD=1, the iseq should be loaded. So rb_iseq_check() - is needed. Furthermore, now lazy loading with builtin_function_table - is not supported, so it should cancel lazy loading. - -commit 81e377023c490998a3fec245ca2fb2b3c710c2c6 - Author: Yusuke Endoh - Date: 2019-12-25 13:35:22 +0900 - - range.c: Range#min with a beginless one now raises an explicit exception - - [Bug #16450] - -commit cd6c013b075c9c27437f30efcee9d4dd9e0ee1c5 - Author: aycabta - Date: 2019-12-25 12:55:31 +0900 - - Add readline and readline-ext to default gems list in NEWS - -commit 227c3d642631262acfbf140c566a7841c32b372f - Author: Koichi Sasada - Date: 2019-12-25 12:06:02 +0900 - - add ref to NEWS entry - -commit 3345eab934073bdd8394ee8a46fc18954999af76 - Author: Yusuke Endoh - Date: 2019-12-25 11:37:27 +0900 - - NEWS: add a ticket reference - -commit b9e35d27096290f9544dca685fb4cf5bd0e09397 - Author: Yusuke Endoh - Date: 2019-12-25 11:31:44 +0900 - - NEWS: add a ticket reference - -commit e0929c44ddc7490dc97cabf12c7505173316a623 - Author: Yusuke Endoh - Date: 2019-12-25 11:27:13 +0900 - - NEWS: add ticket references - -commit eb3f19b9b896094ae9754de1b48fed86fb35fe39 - Author: Nobuyoshi Nakada - Date: 2019-12-25 11:17:24 +0900 - - update-bundled_gems: drop branch name on github [ci skip] - -commit 00710d10761ad1aa752cf2c035e3bfbde40092b6 - Author: aycabta - Date: 2019-12-25 10:47:53 +0900 - - [ruby/readline] Version 0.0.2 - - https://github.com/ruby/readline/commit/42b71f3fc0 - -commit e51a34511c9e4394467cde24deee19cf8536a3e7 - Author: aycabta - Date: 2019-12-25 10:47:34 +0900 - - [ruby/readline] Use a box to make easier to see the message - - https://github.com/ruby/readline/commit/e49e942053 - -commit 57c74841c7bc2bb2ffbb8ed89597e993116e26a8 - Author: aycabta - Date: 2019-12-25 10:44:52 +0900 - - [ruby/readline] Fix any wrong in messages - - https://github.com/ruby/readline/commit/a2cf437c8f - -commit de0f4f2fd7620e2486f5aef031dad18324437c2b - Author: aycabta - Date: 2019-12-25 10:30:24 +0900 - - [ruby/readline] Version 0.0.1 - - https://github.com/ruby/readline/commit/d2363cad33 - -commit 5d20865708552a522d5eb39c4d9238f96693f8f2 - Author: aycabta - Date: 2019-12-25 10:25:15 +0900 - - [ruby/readline] Add post_install_message - - https://github.com/ruby/readline/commit/03126372b5 - -commit 999a2819a75e40aec405e088d01b12eda341025d - Author: aycabta - Date: 2019-12-25 10:31:03 +0900 - - [ruby/readline-ext] Version 0.1.0 - - https://github.com/ruby/readline-ext/commit/f5abaf5be1 - -commit 246242700867ed3fdce8288897d74bd261379018 - Author: aycabta - Date: 2019-12-25 10:08:06 +0900 - - [ruby/reline] Version 0.1.1 - - https://github.com/ruby/reline/commit/923f97d068 - -commit ed5b4bae6a4f991a0c5299581bd0b137a98d3723 - Author: aycabta - Date: 2019-12-25 09:52:25 +0900 - - The behavior of vi_end_of_transmission should be the same of vi_list_or_eof - -commit 03c504ac59a2bf78bab925379e93184d81296e96 - Author: Hiroshi SHIBATA - Date: 2019-12-25 09:38:12 +0900 - - Commented-out btest on cygwin environment of GitHub Actions - -commit 622e47a1dbeee52fb218b816943b69cb88e17ae6 - Author: aycabta - Date: 2019-12-25 09:29:46 +0900 - - ^D on non-empty line in vi mode behaves like Enter - -commit 8e6d51e09a93ae2c57d56105a5fd39fb92855394 - Author: Yuki Nishijima - Date: 2019-12-25 08:41:26 +0900 - - Sync did_you_mean - -commit 2b2be71cabf987effd2783747eedf573af1400cf - Author: Yuki Nishijima - Date: 2019-12-25 08:23:59 +0900 - - Add did_you_mean's promotion to the NEWS - - Notes: - Merged: https://github.com/ruby/ruby/pull/2782 - -commit 1857b4427817755bb0879ca67e1b2f3276f95d4c - Author: Hiroshi SHIBATA - Date: 2019-12-25 07:28:02 +0900 - - Merge Bundler 2.1.2 from bundler/bundler. - - [Misc #16449][ruby-core:96458] - -commit da0a0bae8b50087d140309b27eb4d4b4776c27e4 - Author: Marcus Stollsteimer - Date: 2019-12-25 06:13:49 +0900 - - NEWS: add meaning of "CoW" ("copy-on-write") - -commit ceba5b70889666b82b80910a441cf4a92b5c7160 - Author: Marcus Stollsteimer - Date: 2019-12-25 05:50:27 +0900 - - [DOC] Fix typo in Time#inspect - -commit f3067deb88badf8d15e49d13f082284f58b2c62b - Author: Alan Wu - Date: 2019-12-25 04:54:20 +0900 - - Revert "Add NEWS entry about Module#name performance (#2779)" (#2781) - - This reverts commit 3e9221d94a12b54c1285923b642364acdbc31c7e. - - Notes: - Merged-By: XrXr - -commit 3e9221d94a12b54c1285923b642364acdbc31c7e - Author: Alan Wu - Date: 2019-12-25 04:02:50 +0900 - - Add NEWS entry about Module#name performance (#2779) - - Notes: - Merged-By: XrXr - -commit 5220145ea289d9eb955b373f31773fab2d4f0271 - Author: Koichi Sasada - Date: 2019-12-25 01:32:37 +0900 - - add debug_counter access functions. - - These functions are enabled only on USE_DEBUG_COUNTER=1. - -commit 9b617ffa8884f9f80a0b1bdb89169d8139ba5001 - Author: git - Date: 2019-12-25 01:00:40 +0900 - - * 2019-12-25 [ci skip] - -commit 3679023df822d8bf3f88b9b2e4b849318d2c409e - Author: Marcus Stollsteimer - Date: 2019-12-25 00:57:30 +0900 - - [DOC] Fix typo and language - -commit 8c017824c8eeffe11070ce69c914725af314d9f6 - Author: Hiroshi SHIBATA - Date: 2019-12-24 22:31:38 +0900 - - Added entry for json-2.3.0 - -commit 1cd2ebed616473ed56730292879e8bc9d6dfd060 - Author: Hiroshi SHIBATA - Date: 2019-12-24 21:39:37 +0900 - - Update the news entries for RubyGems and Bundler - -commit 05b0410f91360e15511903580f0401b123f3abce - Author: Marcus Stollsteimer - Date: 2019-12-24 21:17:00 +0900 - - [ruby/irb] Fix typo - - https://github.com/ruby/irb/commit/4bb1340687 - -commit 54083fd41bf876b42e1a97acdc7574c8edbb87ed - Author: Marcus Stollsteimer - Date: 2019-12-24 21:01:47 +0900 - - [DOC] Fix grammar in Process module docs - -commit 66e518f7b3e0bf307f86a51e6db02c3d1ec8df84 - Author: Marcus Stollsteimer - Date: 2019-12-24 21:01:24 +0900 - - [DOC] Fix typo - -commit 4ba9347554ab1ac79fdaf1d5b3320776a2b10615 - Author: Nobuyoshi Nakada - Date: 2019-12-24 18:49:57 +0900 - - `Object#=~` warning also obeys `Warning[:deprecated]` - -commit a3c5dbf29191aa8622d8be7d990c4ac2f9392427 - Author: Nobuyoshi Nakada - Date: 2019-12-24 14:56:17 +0900 - - Scale sleeping times to wait for the OS operations - -commit 7758849cb5432ae974f616668f9c9bab415bb18a - Author: aycabta - Date: 2019-12-24 18:39:48 +0900 - - Remove unused variable - -commit 42e2a322f100c7c798fcfbcbbfe0b4cdaf3f5855 - Author: aycabta - Date: 2019-12-24 18:32:50 +0900 - - The delete-char-or-list shows completed list when called at end of line - - It doesn't behave the same as the delete-char. - -commit b03aea62abfbdc7c8ee53c30a27127c3c394a6ba - Author: Marcus Stollsteimer - Date: 2019-12-24 18:02:22 +0900 - - NEWS: fix method references for Range#{cover?,include?} - -commit 44a1f51695058159ff2f191c97a082bed9665137 - Author: Marcus Stollsteimer - Date: 2019-12-24 17:49:22 +0900 - - NEWS: improve sections for warning option / Warning - -commit 27b4f477d960c75f3ff5cd5e045b307cad314ec7 - Author: Marcus Stollsteimer - Date: 2019-12-24 17:03:42 +0900 - - [DOC] Improve docs for Enumerator.produce, Enumerator.new - -commit 81504e83e72bf125476528e5f119604d9697f682 - Author: Nobuyoshi Nakada - Date: 2019-12-24 15:47:59 +0900 - - Synchronize with a Queue instead of sleeping - -commit 47ad57f2450251f47b3f8e1f744d782269bbcdeb - Author: Koichi Sasada - Date: 2019-12-24 15:38:46 +0900 - - Revert "Scale sleeping times" - - This reverts commit e57d6194218efc73c30f3fed9dd321d2e357030b. - - Test fails: - http://ci.rvm.jp/results/trunk-gc-asserts@ruby-sky1/2518563 - http://ci.rvm.jp/results/trunk-gc_compact@silicon-docker/2518533 - -commit c47106699cf2bcf426285efcd795223c200a3120 - Author: Nobuyoshi Nakada - Date: 2019-12-24 14:57:55 +0900 - - NEWS: added references to warning option [ci skip] - -commit e57d6194218efc73c30f3fed9dd321d2e357030b - Author: Nobuyoshi Nakada - Date: 2019-12-24 14:56:17 +0900 - - Scale sleeping times - -commit adf498b84f56e57b74b72a3ddcc512f6d2078cef - Author: Nobuyoshi Nakada - Date: 2019-12-24 13:24:41 +0900 - - Moved warning option section and added a reference [ci skip] - -commit 302e896833bc611ba39c8697712313fd2dbd70cc - Author: Nobuyoshi Nakada - Date: 2019-12-24 13:12:28 +0900 - - Added warning.rb to .document - -commit 3739ddc36f462b794ec05c0cfc36458a8d1e17a7 - Author: Nobuyoshi Nakada - Date: 2019-12-24 12:11:42 +0900 - - Added `-W:experimental` to `--help` [Feature #16420] - -commit d0f1eb3e4ef7cde2d78b493b3ba1561eee79b18f - Author: Nobuyoshi Nakada - Date: 2019-12-24 11:28:18 +0900 - - Separated command line option in NEWS [ci skip] - -commit 5a62fb1277fb351a1a11b89b0f8510c8f1a0cdff - Author: Nobuyoshi Nakada - Date: 2019-12-24 11:14:13 +0900 - - Mentioned `-W:` command option in NEWS [ci skip] - -commit f2e1e6cba451375d8eb839bf2e7c9a39bccc044c - Author: zverok - Date: 2019-12-22 06:23:20 +0900 - - Enhance explanations for beginless range and #clamp, and add missing feature - - Notes: - Merged: https://github.com/ruby/ruby/pull/2769 - -commit e954be14d07e54b8dbf71c0fa227e5818eaa01e6 - Author: Nobuyoshi Nakada - Date: 2019-12-24 10:27:18 +0900 - - Get rid of false positive misspellings - - [Bug #16437] - -commit 992aa2cda50140abbca165024682eae998756e2d - Author: Nobuyoshi Nakada - Date: 2019-12-24 10:24:45 +0900 - - enc/x_emoji.h: fixed dead-links [ci skip] - - English version pages seem no longer provided. - -commit f09a4ff265093742c356c69bcf56db68bd6cf064 - Author: manga_osyo - Date: 2019-12-24 09:53:36 +0900 - - Added NEWS for Feature 15373 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2777 - -commit 360f153fcaab637486aa2669d354d53e0eb1c3d2 - Author: Koichi Sasada - Date: 2019-12-24 10:23:38 +0900 - - remove "experimental" from numbered parameter. - - Numbered parameter is not an experimental feature, - confirmed by Matz. - https://twitter.com/yukihiro_matz/status/1209271452798607361 - -commit 5e17834fc900a699241764ef0baacd53992d7f07 - Author: aycabta - Date: 2019-12-24 09:55:05 +0900 - - [ruby/reline] Version 0.1.0 - - https://github.com/ruby/reline/commit/55d4dfec1e - -commit 8316b330fb04413bb480462941cb6b14c5352e2e - Author: aycabta - Date: 2019-12-24 09:54:38 +0900 - - [ruby/irb] Version 1.2.1 - - https://github.com/ruby/irb/commit/8da0c74640 - -commit 0e528ae9cb5c1078e4d07287e403cb548e97f0a3 - Author: aycabta - Date: 2019-12-24 09:53:43 +0900 - - [ruby/irb] Remove warning message to bundle on Ruby 2.7.0 - - https://github.com/ruby/irb/commit/d9a7844f50 - -commit 0231661939310951c8ed339d8600a53a21015918 - Author: Marcus Stollsteimer - Date: 2019-12-24 08:13:46 +0900 - - [DOC] Fix wording in Math::E documentation - -commit 30c5e8c4b9353dfb716033901cec7529eace3922 - Author: aycabta - Date: 2019-12-24 08:03:00 +0900 - - [ruby/rdoc] Version 6.2.1 - - https://github.com/ruby/rdoc/commit/c65e14d112 - -commit 2bf0743edcf6fd70cd73952e1e023821c4549a9e - Author: aycabta - Date: 2019-12-24 07:58:49 +0900 - - Update parsers of RDoc that are generated by Racc - -commit adc9b3ca7f4e75e368731fe8a7092ce078bcec04 - Author: aycabta - Date: 2019-12-24 07:41:37 +0900 - - [ruby/rdoc] Support newline in the middle of constant definition - - https://github.com/ruby/rdoc/commit/74d3984324 - -commit e50e55269358520dc55595a9c3e074d351d96b66 - Author: aycabta - Date: 2019-12-24 07:00:35 +0900 - - [ruby/rdoc] Treat Proc#call syntax sugar for constant correctly - - https://github.com/ruby/rdoc/commit/957d041ae0 - -commit 819b604037c317d2b53a1aaca67aef25da2d5ec9 - Author: Marc-Andre Lafortune - Date: 2019-12-23 16:34:16 +0900 - - Reword keyword arguments warning messages to convey these are deprecation warnings - -commit df6f5c44af1f261fa940ec3954468be8b820450e - Author: Marcus Stollsteimer - Date: 2019-12-24 06:41:58 +0900 - - [DOC] Fix invalid code to make it syntax highlighted - -commit a7b5018495c4a6b82d779958b086647226ce61e7 - Author: Marcus Stollsteimer - Date: 2019-12-24 06:07:02 +0900 - - [DOC] Use capitalized "Ruby" - -commit ba9ccef81811e9387c0189d596189236b25d0dba - Author: Marcus Stollsteimer - Date: 2019-12-24 06:04:59 +0900 - - [DOC] Various fixes in bug triaging guide - -commit aa01441fd29be8be28644db7abac9f7940fcc814 - Author: git - Date: 2019-12-24 04:17:11 +0900 - - * 2019-12-24 [ci skip] - -commit f201700051cc107b55c425bf331ce6d7ad3ef22b - Author: Koichi Sasada - Date: 2019-12-24 04:16:40 +0900 - - move a NEWS entry about inline method cache - -commit 16fddfe352828d26aaa6cdbce696e62de04511ce - Author: Marcus Stollsteimer - Date: 2019-12-23 23:02:59 +0900 - - [DOC] Improve readability of requirements for <=> - -commit 9a42e0c7ed4dcc57043a8a35a50686625adba686 - Author: Marcus Stollsteimer - Date: 2019-12-23 22:46:58 +0900 - - NEWS: add reference for [Feature #14405] - -commit de1a462454f4196490263c9be8be16a44513f5a0 - Author: Marcus Stollsteimer - Date: 2019-12-23 22:45:24 +0900 - - NEWS: revise grammar, language, markup, etc. - -commit bbde77cd2694e87646842777e873d849bbf5703e - Author: Marcus Stollsteimer - Date: 2019-12-23 17:46:08 +0900 - - NEWS: fix some typos, grammar, and language - -commit 100fc2750b8f2c4dbe0aaa6c622bbf5f6d61e3c0 - Author: Koichi Sasada - Date: 2019-12-23 17:04:31 +0900 - - fix wmap_finalize. - - wmap_finalize expects id2ref() returns a corresponding object - even if the object is dead. Make id2ref_obj_tbl() for this - purpose. - -commit 9eeaae432b9a894e28e3906435f3d454d8fd025c - Author: Koichi Sasada - Date: 2019-12-23 16:30:45 +0900 - - add more debug counters to count numeric objects. - -commit 7779ade48c2786992e41c0ab87761ab467f4be49 - Author: Marc-Andre Lafortune - Date: 2019-12-23 15:59:17 +0900 - - NEWS: Fix issue reference [#15807] [DOC] - -commit dadf1255b6e13578f888c239f0dc6fb201fd40bb - Author: Marc-Andre Lafortune - Date: 2019-12-23 15:55:39 +0900 - - README: Add Range#minmax to the list of potential incompatibilities [#15929] [DOC] - -commit 3e1adf573110ddce8f900d9473dde7fa7de9c0e2 - Author: Marc-Andre Lafortune - Date: 2019-12-23 15:48:38 +0900 - - README: Improve wording [DOC] - -commit 7df2503b7770147a8589a594bf30726f733b1d86 - Author: Marc-Andre Lafortune - Date: 2019-12-23 15:37:45 +0900 - - NEWS: Hint at potential incompatibility with Range#minmax [#15807] - -commit a96f8cecc2488126d7298ea304da8bad3dde1792 - Author: Koichi Sasada - Date: 2019-12-23 15:02:14 +0900 - - ObjectSpace._id2ref should check liveness. - - objspace->id_to_obj_tbl can contain dead objects because of lazy - sweep, so that it should check liveness. - -commit 672a61b97fe0cdb256611c707e7cc69856208467 - Author: Yuki Nishijima - Date: 2019-12-23 14:47:03 +0900 - - Port https://github.com/ruby/did_you_mean/commit/dd1dd86e6c3188c36224d5dd4389676e6653a727 - -commit 92d0958257965adf426e6f6c654c5935a690bf5b - Author: Kazuhiro NISHIYAMA - Date: 2019-12-23 13:23:08 +0900 - - FrozenError.new accepts :receiver instead of 2nd argument [ci skip] - - [ruby-core:96227] [Feature #16419] - -commit 3142a6beb28db36dc9150f1ad6752cd1e19a8712 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-23 12:07:15 +0900 - - Revert "Changed behavior on windows platforms too [ci skip]" - - This reverts commit 1bf8d5e9797f6304b2e27cb7f42d467f84de0ff4. - - Because 204dc3f39f12b4e2640555306bd1dd4530344277 reverts 61aff0cd189e67fa6f2565639ad0128fa33b88fc - -commit 204dc3f39f12b4e2640555306bd1dd4530344277 - Author: NAKAMURA Usaku - Date: 2019-12-23 11:54:25 +0900 - - Revert "Should return "." for File.extname("file.") also on Windows" - - We want to introduce consistency and better compatibility with unixen, - but the Windows APIs do not have consistency fundamentally and - we can not found any logical way... - - This reverts commit 61aff0cd189e67fa6f2565639ad0128fa33b88fc. - -commit 048f797bf019cdf303d70494fba63d4a4e606462 - Author: Marc-Andre Lafortune - Date: 2019-12-23 10:54:50 +0900 - - [ruby/prime] Bump version - -commit 446c243da35831de701ff6dd6c3c6da8252b6a10 - Author: Marc-Andre Lafortune - Date: 2019-12-23 09:44:43 +0900 - - [ruby/ostruct] Bump version - -commit 9be3295d53b6fd9f8a3ad8157aa0655b1976d8ac - Author: Marc-Andre Lafortune - Date: 2019-12-23 09:40:32 +0900 - - [ruby/ostruct] Create OpenStruct::VERSION - -commit 49d94248ebfb7a51e342f8102d21ad132a40f91a - Author: Marc-Andre Lafortune - Date: 2019-12-23 09:34:42 +0900 - - [ruby/ostruct] Move gemspec - -commit 48d1acdf25b13bd9e28bf6baa3f74ec082a27a00 - Author: Marc-Andre Lafortune - Date: 2019-12-23 08:33:19 +0900 - - [ruby/matrix] Bump version - -commit 1ed87dd3c4fb085955bb3848579a3ed7aba38507 - Author: Nobuyoshi Nakada - Date: 2019-12-22 13:56:20 +0900 - - Add NEWS about Warning.[] [Feature #16345] [ci skip] - -commit 5de284ec78220e75643f89b454ce999da0c1c195 - Author: Nobuyoshi Nakada - Date: 2019-12-23 10:37:30 +0900 - - Fixed a typo in an exception class name - -commit 5f18635a800eee29fd051ea758a2ec561f090ebe - Author: Nobuyoshi Nakada - Date: 2019-12-23 10:10:23 +0900 - - make-snapshot: fixed mode - - "X" must be used in conjunction with "+". - -commit 80d5d220b948517306e23b18260768ab8fe008bc - Author: Nobuyoshi Nakada - Date: 2019-12-23 08:42:53 +0900 - - Fix typo in commit logs by log-fix notes - -commit 4de2297d74fbc0a0e69ac8bcc2aad5b192fd11b6 - Author: Takashi Kokubun - Date: 2019-12-23 09:07:07 +0900 - - Re-apply f85e8d2a8b keeping characters < 80 - -commit f156f70b3192ddab41e432e743936a09a5aaae09 - Author: Yusuke Endoh - Date: 2019-12-23 09:02:49 +0900 - - Revert "Fixed misspellings" - - This reverts commit f85e8d2a8b2a37740334db4fd92ef820f05ddbc5. - - It violated the limit of width (> 80) and caused the test failure - -commit f85e8d2a8b2a37740334db4fd92ef820f05ddbc5 - Author: Nobuyoshi Nakada - Date: 2019-12-23 08:31:46 +0900 - - Fixed misspellings - - Fixed misspellings reported at [Bug #16437] - -commit a4b99f97642d31fc8ddd537155ff6cf61be6a43c - Author: zverok - Date: 2019-12-23 05:56:44 +0900 - - Fix typos of previous docs PR - - In #2612 I made two typos (extra ,, and copy-pasted - same line of code instead of showing two different - ones), fixing them. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2771 - -commit c1bd1bf27236b33965dd92c1b2297edc91327cfb - Author: zverok - Date: 2019-12-14 01:59:23 +0900 - - Document Module#const_source_location - - Notes: - Merged: https://github.com/ruby/ruby/pull/2750 - -commit ade6543f4cf7dfb1ab4585a1bfca20f3d64d5add - Author: Alan Wu - Date: 2019-12-23 08:21:13 +0900 - - Adjust sentence in doc [ci skip] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2773 - - Merged-By: XrXr - -commit bb05cdcd78b3e3d54f0ad9afc01de383ed33dc1c - Author: Marcus Stollsteimer - Date: 2019-12-23 06:36:14 +0900 - - [DOC] Improve documentation for Enumerable#tally - -commit 7c37f2cb1ad248a1db327f3522a8e3ffa5c5412f - Author: Marcus Stollsteimer - Date: 2019-12-23 03:46:24 +0900 - - Some fixes in Enumerator::Lazy docs - - * fix list in #flat_map - * fix wrong indentation in #filter_map and #with_index - * other small fixes - -commit 679bc4f9cb6a5471df903436c6240ca2157986dd - Author: Nobuyoshi Nakada - Date: 2019-09-08 21:04:46 +0900 - - [ruby/reline] Use IO#raw to read one byte - - https://github.com/ruby/reline/commit/be17740e82 - -commit 3a18e43caac4ce31702c9b79de3b6e8af05ef173 - Author: git - Date: 2019-12-23 00:17:25 +0900 - - * 2019-12-23 [ci skip] - -commit 1bf8d5e9797f6304b2e27cb7f42d467f84de0ff4 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-23 00:16:51 +0900 - - Changed behavior on windows platforms too [ci skip] - - at 61aff0cd189e67fa6f2565639ad0128fa33b88fc [Bug #15267] - -commit d339de9d1a11923cd6d435d995ee479d08791720 - Author: zverok - Date: 2019-12-22 06:05:45 +0900 - - Enhance docs for Module#deprecate_constant - - Notes: - Merged: https://github.com/ruby/ruby/pull/2768 - -commit 5a0102cb615f27f2daef8af6d9ae996926b2d167 - Author: zverok - Date: 2019-12-22 05:58:14 +0900 - - Enhance Range docs - - * Change === docs to mention it uses cover? - * Add different example to === docs to showcase - behavior better - * Change include? docs to mention cover? - and clarify the difference - - Notes: - Merged: https://github.com/ruby/ruby/pull/2768 - -commit 4988843188c7a1666b11e1390acd7b991941c3a8 - Author: zverok - Date: 2019-12-22 05:37:35 +0900 - - Actualize Time#inspect docs - - Notes: - Merged: https://github.com/ruby/ruby/pull/2768 - -commit 5fa9c2eeb04a2e44a2a028d933bc95f219a6a282 - Author: zverok - Date: 2019-12-22 05:31:30 +0900 - - Actualize Method#inspect docs - - Notes: - Merged: https://github.com/ruby/ruby/pull/2768 - -commit d78fcfb7ab351fd4861e42985db34e9bda3509a7 - Author: zverok - Date: 2019-12-22 05:21:20 +0900 - - Fix FrozenError#receiver and #initialize docs - - Notes: - Merged: https://github.com/ruby/ruby/pull/2768 - -commit e568bb5649a93c60aaa51c1e5308054079815bcc - Author: zverok - Date: 2019-12-22 05:17:35 +0900 - - Update private visibility explanation - - Notes: - Merged: https://github.com/ruby/ruby/pull/2768 - -commit 03b983d54c17615e36d56d2937a685fc8c3f2cdb - Author: zverok - Date: 2019-12-21 05:51:22 +0900 - - Document numbered block parameters - - Notes: - Merged: https://github.com/ruby/ruby/pull/2767 - -commit 890c834ec6bb03fab4fee6f5b14f99660a64d207 - Author: BurdetteLamar - Date: 2019-12-17 07:58:53 +0900 - - Enhancements for ENV doc - - Notes: - Merged: https://github.com/ruby/ruby/pull/2757 - -commit 54be15f3256fd2dbb0d5d7962e9dfac2b87c797b - Author: QuestionDriven - Date: 2019-12-17 16:11:02 +0900 - - [Doc] Fix sample in Encoding#names - - Notes: - Merged: https://github.com/ruby/ruby/pull/2760 - -commit 9654241d5d5717b7cd6ddedb6c192e971f9d473a - Author: QuestionDriven - Date: 2019-12-17 16:05:17 +0900 - - [Doc] Fix wrong example in Encoding.aliases - - Notes: - Merged: https://github.com/ruby/ruby/pull/2760 - -commit cc87037f1c5a143af8089555e704505fcf0b2879 - Author: Nobuyoshi Nakada - Date: 2019-12-22 22:49:17 +0900 - - Fixed misspellings - - Fixed misspellings reported at [Bug #16437], missed and a new - typo. - -commit 7c33ee5ddfafe737add2a7f4c4975108f9196dbd - Author: Benoit Daloze - Date: 2019-12-22 19:39:22 +0900 - - Move version guard outside to make it clear the method was added in Ruby 2.5 - -commit d76c8cfecdaa2960153b5b24ccd0d61f9af60abd - Author: Nobuyoshi Nakada - Date: 2019-12-22 15:18:22 +0900 - - RDoc of Warning.[] and .[]= [Feature #16345] [ci skip] - -commit d2ac6d4d9f57b34eeb94bd6302b54a632051ce64 - Author: Nobuyoshi Nakada - Date: 2019-12-22 14:45:42 +0900 - - Manage deprecation warning by the flag - -commit 58527a79263c6572bd4f97d0a0e0359c0ace6f3c - Author: Nobuyoshi Nakada - Date: 2019-12-22 13:52:59 +0900 - - [ruby/io-console] bump up to 0.5.3 - -commit ced4c5dace63dcb5aabe4d9c480e02e7581b8816 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-12-22 11:40:07 +0900 - - add NEWS about cache improvement [ci skip] - -commit efd4a11ada731ce18f5eb1500c76f77b4d0f313f - Author: Nobuyoshi Nakada - Date: 2019-12-22 11:46:09 +0900 - - Support multibyte input - -commit cf59e1476d01be27dc88cbee5f6c6cf87f007043 - Author: Koichi Sasada - Date: 2019-12-22 06:28:13 +0900 - - fix a thread test. - - * Use Queue for synchronization. - * Don't use `sleep 0.2` and use `th.join` because created thread - can raise an exception after 0.2 seconds. - -commit fa1bf8ab37caad5fa0679adc0ecb8f6f5cec2eea - Author: Yusuke Endoh - Date: 2019-12-19 23:13:21 +0900 - - [ruby/reline] Support Ctrl+right as em_next_word, and Ctrl+left as ed_prev_word - - https://github.com/ruby/reline/commit/e98ad3b486 - -commit 644336eef54c8ee2aeb7fd6c55fcd5620bcfa5b4 - Author: Koichi Sasada - Date: 2019-12-22 05:20:08 +0900 - - add a NEWS entry for [Feature #16163] - -commit 75acbd5f0076970d48bc423c2b058adbdb5da9e8 - Author: Yusuke Endoh - Date: 2019-12-22 03:31:27 +0900 - - compile.c: avoid newarraykwsplat for arguments - - `foo(*rest, post, **empty_kw)` is compiled like - `foo(*rest + [post, **empty_kw])`, and `**empty_kw` is removed by - "newarraykwsplat" instruction. - However, the method call still has a flag of KW_SPLAT, so "post" is - considered as a keyword hash, which caused a segfault. - Note that the flag cannot be removed if "empty_kw" is not always empty. - - This change fixes the issue by compiling arguments with "newarray" - instead of "newarraykwsplat". - - [Bug #16442] - -commit 3a29f05ba5ba7ed4b821ba5f566eeb3ff3c5c3b1 - Author: NARUSE, Yui - Date: 2019-12-22 01:39:17 +0900 - - Move stats under a dict - -commit 61aff0cd189e67fa6f2565639ad0128fa33b88fc - Author: NAKAMURA Usaku - Date: 2019-12-22 02:36:55 +0900 - - Should return "." for File.extname("file.") also on Windows - - But not changes another cases, such as "file.rb." - [Bug #15267] - -commit 29ea228efc5af08a0e91fafe155617f20e22976b - Author: git - Date: 2019-12-22 01:58:02 +0900 - - * 2019-12-22 [ci skip] - -commit 0835a971ef84dfebefbc73ddd468450cbfb90974 - Author: aycabta - Date: 2019-12-18 22:57:25 +0900 - - Remove TODO comment - -commit 616f1357c3030fad73c42ea061a7f21b0df57fb5 - Author: Yusuke Endoh - Date: 2019-12-14 16:14:43 +0900 - - [ruby/irb] Make nesting level up for `1.times do` - - Follow up of the previous commit - - https://github.com/ruby/irb/commit/ab207353d3 - -commit a3cc2a2fbde23637fb924f75e977599b7a475118 - Author: Yusuke Endoh - Date: 2019-12-14 16:07:21 +0900 - - [ruby/irb] Fix auto-indent for `1.times do` - - Fixes #47 - - https://github.com/ruby/irb/commit/6b8eca4635 - -commit ec1de789a98923417cf983cb3cdaed003c0f8be6 - Author: Yusuke Endoh - Date: 2019-12-14 15:46:42 +0900 - - [ruby/reline] Preserve the input buffer across cursor_pos - - The old version of cursor_pos discards the input buffer, which made IRB - ignore the input immediately after IRB is invoked. - - This change keeps the input before cursor_pos by using ungetc. - - https://github.com/ruby/reline/commit/4a8cca331f - -commit 7fd6077d9896cc10244fb9416ef87ae461c079db - Author: Nobuyoshi Nakada - Date: 2019-12-14 11:01:49 +0900 - - [ruby/reline] Consider Reline::ANSI.input at prep - - https://github.com/ruby/reline/commit/b111cde3c3 - -commit 85a337f986fe6da99c7f8358f790f17b122b3903 - Author: Alan Wu - Date: 2019-07-14 01:04:01 +0900 - - Kernel#lambda: return forwarded block as non-lambda proc - - Before this commit, Kernel#lambda can't tell the difference between a - directly passed literal block and one passed with an ampersand. - - A block passed with an ampersand is semantically speaking already a - non-lambda proc. When Kernel#lambda receives a non-lambda proc, it - should simply return it. - - Implementation wise, when the VM calls a method with a literal block, it - places the code for the block on the calling control frame and passes a - pointer (block handler) to the callee. Before this commit, the VM - forwards block arguments by simply forwarding the block handler, which - leaves the slot for block code unused when a control frame forwards its - block argument. I use the vacant space to indicate that a frame has - forwarded its block argument and inspect that in Kernel#lambda to detect - forwarded blocks. - - This is a very ad-hoc solution and relies *heavily* on the way block - passing works in the VM. However, it's the most self-contained solution - I have. - - [Bug #15620] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2289 - -commit ddb6023d64a8c96348b4e67603753e2916a04f28 - Author: Alan Wu - Date: 2019-07-15 13:35:30 +0900 - - Add spec for capturing Kernel#lambda with Kernel#method - - Notes: - Merged: https://github.com/ruby/ruby/pull/2289 - -commit e0b336c8ce84e1456fc6126ca232289667db3e19 - Author: Alan Wu - Date: 2019-07-15 12:41:43 +0900 - - Add specs for calling into Kernel#lambda with super - - Notes: - Merged: https://github.com/ruby/ruby/pull/2289 - -commit ea405ee8ed00c03e0521ff4b852d8f3bea849243 - Author: Yusuke Endoh - Date: 2019-12-21 10:06:14 +0900 - - test/ruby/test_pattern_matching.rb: suppress "unused variable" warning - -commit 9eded02446e34d4db1051f5f18c2d7d554e792d3 - Author: Jeremy Evans - Date: 2019-12-21 03:47:56 +0900 - - Add Array#minmax, Range#minmax, and Proc#ruby2_keywords to NEWS - -commit 63ce77929ab0ebe992e91a1bad436a5d8e6488a9 - Author: git - Date: 2019-12-21 00:07:13 +0900 - - * 2019-12-21 [ci skip] - -commit 484c1be8956b7bb7a0253c6d6c7a740c341487fa - Author: Nobuyoshi Nakada - Date: 2019-12-20 23:51:17 +0900 - - Added `-W:experimental` command line option - - [Feature #16420] - -commit 07e595fdbd75ed44473073cdf8cd758572d11709 - Author: Nobuyoshi Nakada - Date: 2019-12-20 23:48:15 +0900 - - Added `experimental` warning category - - [Feature #16420] - -commit dd7f0c87c9da8e695c38a6529deb6e0f24f6d06c - Author: Nobuyoshi Nakada - Date: 2019-12-20 23:36:19 +0900 - - Hoisted out new_case3 - -commit a84ad24386d27269b90794146c2a351c1d79471b - Author: Nobuyoshi Nakada - Date: 2019-12-20 23:05:22 +0900 - - Added -W: command line option - - To manage `Warning[category]` flags. Only `-W:deprecated` and - `-W:no-deprecated` are available now. [Feature #16345] - -commit 6876aa38f607cdd6fb24910e54143d9110d025c9 - Author: Nobuyoshi Nakada - Date: 2019-12-20 22:50:46 +0900 - - Added `FEATURE_SET_RESTORE` macro - -commit 1fea3a7636cfaf25baba1e9f208c68a8a8ba52cc - Author: Yusuke Endoh - Date: 2019-12-20 21:37:46 +0900 - - NEWS: Update the explanation of pattern matching - - Add an example of " in ", an example of - NoMatchingPatternError, and mention that the slides are slightly - obsolete. - -commit f7aee584987e24768670e96b1455ed1193f91ef2 - Author: Yusuke Endoh - Date: 2019-12-20 19:41:15 +0900 - - vm_args.c: rephrase the warning message of keyword argument separation - - (old) - test.rb:4: warning: The last argument is used as the keyword parameter - test.rb:1: warning: for `foo' defined here; maybe ** should be added to the call? - - (new) - test.rb:4: warning: The last argument is used as keyword parameters; maybe ** should be added to the call - test.rb:1: warning: The called method `foo' is defined here - -commit 2b2030f265e4ec0782de9c8dd9f8828a1a0af1b5 - Author: Nobuyoshi Nakada - Date: 2019-12-20 15:05:10 +0900 - - Refined the warning message for $, and $; - - [Bug #16438] - -commit 7a94225e7d04f17ddd37433c3904b04fec97f281 - Author: Nobuyoshi Nakada - Date: 2019-12-20 14:54:44 +0900 - - Refined the warning message for numbered-parameter like variables - - [Bug #16438] - -commit a8bddb3a189545a2bef8ee7cffdb328d8de7974c - Author: Nobuyoshi Nakada - Date: 2019-12-20 14:29:42 +0900 - - Refined the warning message for numbered-parameter like variables - - [Bug #16438] - -commit 435a4ca2a38f3be1f5d2db0f71487a52c8285e9c - Author: Nobuyoshi Nakada - Date: 2019-12-20 14:14:07 +0900 - - Makes the receiver to FrozenError.new a keyword parameter - - [Feature #16419] - -commit 216b62aa87f069c51085e9f9abb548930370bc53 - Author: NARUSE, Yui - Date: 2019-12-20 14:10:37 +0900 - - use UTC to use previous day in midnight - -commit e68999c82c4863d33a6f893661fba1b7538c5671 - Author: Nobuyoshi Nakada - Date: 2019-12-20 12:19:45 +0900 - - Fixed misspellings - - Fixed misspellings reported at [Bug #16437], for default gems. - -commit e672494cd737b8fea3a186aeb5c2c17d1a18cb96 - Author: Hiroshi SHIBATA - Date: 2019-12-20 11:50:32 +0900 - - Merge RubyGems 3.1.2 - -commit fac60be324260cd834478fedf934e59b97935dbf - Author: Nobuyoshi Nakada - Date: 2019-12-20 09:39:50 +0900 - - shell.rb is no longer bundled [ci skip] - -commit db166290088fb7d39d01f68b9860253893d4f1a7 - Author: Nobuyoshi Nakada - Date: 2019-12-20 09:19:39 +0900 - - Fixed misspellings - - Fixed misspellings reported at [Bug #16437], only in ruby and rubyspec. - -commit 2898367b3a1de00ca78067cc17dd4d1f8df37778 - Author: Nobuyoshi Nakada - Date: 2019-12-20 08:18:19 +0900 - - Warn also numbered parameter like methods - -commit 3816cd945d68eac7ca8fecbc9d71f878ff3e7b3d - Author: Kazuhiro NISHIYAMA - Date: 2019-12-20 01:40:00 +0900 - - Add `URI#open` to warning message - -commit 844f1fada6f364dc26bd6eb6de2c4299a69e272a - Author: git - Date: 2019-12-20 01:37:11 +0900 - - * 2019-12-20 [ci skip] - -commit 27ddb6e99848c397a415b785315896ab50308076 - Author: Nobuyoshi Nakada - Date: 2019-12-20 01:01:17 +0900 - - Warn also numbered parameter like parameters - - [Feature #16433] - -commit c6c67254fb17b3196a7b0d3fda4650f6b20a467d - Author: Nobuyoshi Nakada - Date: 2019-12-17 17:17:07 +0900 - - Added rb_warn_deprecated - -commit 7aa8a786740fd84bd718b0c055f190b25a8f0277 - Author: Nobuyoshi Nakada - Date: 2019-12-17 17:16:12 +0900 - - Manage deprecation warnings about keyword argument - -commit 9bf9de3d9d2f67bc401151fb94abf75b5eff5913 - Author: Nobuyoshi Nakada - Date: 2019-12-17 14:52:15 +0900 - - Made the warning for deprecated constants follow the category flag - -commit 76035e5bb6a5b44621fd1c11a0553780474d1c01 - Author: Nobuyoshi Nakada - Date: 2019-12-16 18:19:01 +0900 - - Adjusted the format - -commit e732e0074e53e7ddbaf863197ec3775d7e9d4516 - Author: git - Date: 2019-12-19 02:08:51 +0900 - - * 2019-12-19 [ci skip] - -commit 1e88f6eb95672cae2b0628895a9ee9a5d384e048 - Author: Aaron Patterson - Date: 2019-12-18 10:26:11 +0900 - - Refactor free page insertion - - I am trying to fix this error: - - http://ci.rvm.jp/results/trunk-gc_compact@silicon-docker/2491596 - - Somehow we have a page in the `free_pages` list that is full. This - commit refactors the code so that any time we add a page to the - `free_pages` list, we do it via `heap_add_freepage`. That function then - asserts that the free slots on that page are not 0. - -commit efbc0d499c0dc5b74698418c76e58098c6c113e1 - Author: Hiroshi SHIBATA - Date: 2019-12-18 14:53:19 +0900 - - Merge bundler-2.1.1 from bundler/bundler - -commit fa7fa5c86b0674eca233922045e4d3dd4ee49cb7 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-12-18 13:03:54 +0900 - - delete rb_vm_call() - - Nobody uses it any longer. - -commit dcb603bbdbe3a8ea6f6d07198c8711cf9a44a4d2 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-12-18 12:57:46 +0900 - - describe mc_miss_reuse_call [ci skip] - -commit fcd8bafd086a7105b535ec1691f960e37d5c911b - Author: Nobuyoshi Nakada - Date: 2019-12-18 13:35:58 +0900 - - Use a temporary file for chown test - - Errno::EROFS may occur when the source tree is placed in a - read-only filesystem. - -commit c147eeff7c2b8d4b8864c8be6496abf7f622a983 - Author: Nobuyoshi Nakada - Date: 2019-12-18 13:29:55 +0900 - - [ruby/io-console] Skip Interrupt test on Linux - - Hangs up only in ruby/ruby on Travis-CI. - - https://github.com/ruby/io-console/commit/de39aa6dd6 - -commit f054f11a38f66af17a0aed8e0d2d46731eaab27d - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-12-17 15:49:41 +0900 - - per-method serial number - - Methods and their definitions can be allocated/deallocated on-the-fly. - One pathological situation is when a method is deallocated then another - one is allocated immediately after that. Address of those old/new method - entries/definitions can be the same then, depending on underlying - malloc/free implementation. - - So pointer comparison is insufficient. We have to check the contents. - To do so we introduce def->method_serial, which is an integer unique to - that specific method definition. - - PS: Note that method_serial being uintptr_t rather than rb_serial_t is - intentional. This is because rb_serial_t can be bigger than a pointer - on a 32bit system (rb_serial_t is at least 64bit). In order to preserve - old packing of struct rb_call_cache, rb_serial_t is inappropriate. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2759 - -commit 77e3078ede833e86a1ee0e2ce745b15e892bdbf6 - Author: Nobuyoshi Nakada - Date: 2019-12-18 10:25:18 +0900 - - [ruby/io-console] Set raw mode strictly same as cfmakeraw - - * Default VMIN and VTIME to minimum input. - * Disable parity check bits explicitly. - * Disable all bits for flow control on input. - - Co-Authored-By: NARUSE, Yui - - https://github.com/ruby/io-console/commit/5ce201a686 - -commit 254477248cde5bf82c4f256dca05b13d01c9774c - Author: John Hawthorn - Date: 2019-12-13 08:47:59 +0900 - - Skip optimized method check for most method IDs - - Previously every time a method was defined on a module, we would - recursively walk all subclasses to see if the module was included in a - class which the VM optimizes for (such as Integer#+). - - For most method definitions we can tell immediately that this won't be - the case based on the method's name. To do this we just keep a hash with - method IDs of optimized methods and if our new method isn't in that list - we don't need to check subclasses at all. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2752 - -commit 9245462499e7c3216a468aadccdc11e69de8cd54 - Author: John Hawthorn - Date: 2019-12-13 15:43:00 +0900 - - Replace debug test with assertion - - It's a Ruby bug if this ever happens check it as an assertion instead of - paying the cost of the check every time. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2752 - -commit a01d22b8c16d9bd44767cced8d45398493af0a7c - Author: John Hawthorn - Date: 2019-12-12 08:47:49 +0900 - - Check type with BUILTIN_TYPE in method cache clear - - We know that this is a heap-allocated object (a CLASS, MODULE, or - ICLASS) so we don't need to check if it is an immediate value. This - should be very slightly faster. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2752 - -commit 8e56d3a6ab7cc05be586010acd9f85384d53403a - Author: John Hawthorn - Date: 2019-12-13 09:42:34 +0900 - - Define PREV_CLASS_SERIAL - - Avoids generating a "throwaway" sentinel class serial. There wasn't any - read harm in doing so (we're at no risk of exhaustion and there'd be no - measurable performance impact), but if feels cleaner that all class - serials actually end up assigned and used (especially now that we won't - overwrite them in a single method definition). - - Notes: - Merged: https://github.com/ruby/ruby/pull/2752 - -commit d7a50a5cc694ab28608a9d5a2e39c2766330ffe6 - Author: John Hawthorn - Date: 2019-12-12 06:10:39 +0900 - - Avoid revisiting seen nodes clearing method cache - - rb_clear_method_cache_by_class calls rb_class_clear_method_cache - recursively on subclasses, where it will bump the class serial and clear - some other data (callable_m_tbl, and some mjit data). - - Previously this could end up taking a long time to clear all the classes - if the module was included a few levels deep and especially if there - were multiple paths to it in the dependency tree (ie. a class includes - two modules which both include the same other module) as we end up - revisiting class/iclass/module objects multiple times. - - This commit avoids revisiting the same object, by short circuiting when - revisit the same object. We can check this efficiently by comparing the - class serial of each object we visit with the next class serial at the - start. We know that any objects with a higher class serial have already - been visited. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2752 - -commit 8a40dce0ff2964df22e06ae9a08f50592d17caf0 - Author: git - Date: 2019-12-18 00:08:43 +0900 - - * 2019-12-18 [ci skip] - -commit bcec03af05649a8132f5e4e49c2c64762e60b605 - Author: Nobuyoshi Nakada - Date: 2019-12-18 00:08:21 +0900 - - Revert "Skip interruptible raw mode test on Travis-CI" - - This reverts commit 65731a1330ed02691e3c343d2feeb8d0a72af3fd. - -commit 07ed8f2f916a512b35bc69b49f1c482a2ea6e9dd - Author: Nobuyoshi Nakada - Date: 2019-12-17 23:26:07 +0900 - - [ruby/io-console] Skip interrupt - - https://github.com/ruby/io-console/commit/8ed5a2bcc3 - -commit 905a926ea84e199478e32e6da5cd0e8d756132f1 - Author: Nobuyoshi Nakada - Date: 2019-12-17 18:20:37 +0900 - - [ruby/io-console] Timeout in the child process - - https://github.com/ruby/io-console/commit/b8411689a5 - -commit 4b7d27ca0de5e1294fa2072d948953ef49753fc5 - Author: Nobuyoshi Nakada - Date: 2019-12-17 17:24:21 +0900 - - [ruby/io-console] Use IO.console instead of STDIN - - https://github.com/ruby/io-console/commit/9e3ec5b936 - -commit 1b86309b04709ce0a64a9206ca638eccda9d4fec - Author: Nobuyoshi Nakada - Date: 2019-12-17 23:38:18 +0900 - - Squelch filter-branch warning and sleeping - -commit ffa7ceceaf7d9f0268db9021eb0df6f197dcb3c8 - Author: mihaibuzgau - Date: 2019-12-17 19:47:15 +0900 - - [rubygems/rubygems] Move `require uri` to source_list - - https://github.com/rubygems/rubygems/commit/c6b4df5bfc - -commit 299db379575da122bc20745811fc1e20ba01f3ce - Author: Kazuhiro NISHIYAMA - Date: 2019-12-17 09:46:45 +0900 - - Use while instead of loop - - Notes: - Merged: https://github.com/ruby/ruby/pull/2758 - -commit 9d3ffcfbfc742ed5053b59678dbf97773a7dddc1 - Author: Koichi Sasada - Date: 2019-12-17 20:22:00 +0900 - - disable assertion. - - This assertion is not needed because we found the bug. - ba11a74745. - -commit 65731a1330ed02691e3c343d2feeb8d0a72af3fd - Author: Nobuyoshi Nakada - Date: 2019-12-17 17:18:42 +0900 - - Skip interruptible raw mode test on Travis-CI - -commit b226a68141bd60db4b14264cb579e3eab9b6bcbd - Author: mihaibuzgau - Date: 2019-12-16 21:42:34 +0900 - - [rubygems/rubygems] require `uri` in source.rb - - https://github.com/rubygems/rubygems/commit/8de4d0272e - -commit ea717d1ce1199bbd2e6532f1607bab6e1a1f9274 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-12-17 13:22:24 +0900 - - convert macros into inline functions - - For better readability. - -commit d616926af916d140f0bd1be3cdc232193d46286a - Author: aycabta - Date: 2019-12-17 14:20:51 +0900 - - Remove an unnecessary variable - -commit 8f52604b478fee5243080116b8e62f0c1f5cb9a0 - Author: Masataka Pocke Kuwabara - Date: 2019-12-09 00:48:13 +0900 - - Remove unnecessary double bangs from Pathname#root? - - Notes: - Merged: https://github.com/ruby/ruby/pull/2732 - -commit 9421c7804191b73aa9fde8f14235b3a1f37ffd4b - Author: Nobuyoshi Nakada - Date: 2019-12-16 12:33:13 +0900 - - [ruby/logger] Fixed leaked tempfile - - https://github.com/ruby/logger/commit/fb3eff153f - -commit 4f9a4c1a8f6a31def5fdf58582f064cf644a5828 - Author: aycabta - Date: 2019-12-17 13:47:06 +0900 - - Remove unnecessary branches - -commit e36319249b1a9967a83e66df2661769c136594ad - Author: Nobuyoshi Nakada - Date: 2019-12-17 13:57:58 +0900 - - [ruby/io-console] bump up to 0.5.2 - -commit b39d5da97426c6f65e2b39b307ce19d774d93ddd - Author: Yusuke Endoh - Date: 2019-12-14 19:15:02 +0900 - - [ruby/io-console] Use TCSANOW to prevent from discarding the input buffer - - TCSAFLUSH discards the buffer read before the mode change, which makes - IRB ignore the buffer input immediately after invoked. TCSANOW - preserves the buffer. - - https://github.com/ruby/io-console/commit/b362920182 - -commit 81eb2d16efcb29899e88e30a25ca5440195e2393 - Author: Nobuyoshi Nakada - Date: 2019-12-13 11:41:31 +0900 - - [ruby/io-console] Disable implementation-defined special control characters - - In raw mode with interrupt enabled. - - https://github.com/ruby/io-console/commit/e9e8e3ff17 - -commit ec89a0f8033215817d9c6f9300d9513178e785b7 - Author: Nobuyoshi Nakada - Date: 2019-12-13 12:14:10 +0900 - - [ruby/io-console] Added the test for intr option - - https://github.com/ruby/io-console/commit/4f01db102d - -commit a9d17af242748c160cb79909fd881e06141fe428 - Author: Nobuyoshi Nakada - Date: 2019-12-10 10:07:00 +0900 - - [ruby/io-console] Removed dead code - - https://github.com/ruby/io-console/commit/a49462ed97 - -commit 64ce658ec5a6d6fc6eb969f607e703fd9372287a - Author: aycabta - Date: 2019-12-17 13:30:54 +0900 - - Fix return condition according to the condition to skip - -commit a1713bedb1de676fdd7d9bf3458b931c4702a1af - Author: Thomas Leitner - Date: 2019-10-04 17:03:32 +0900 - - [ruby/reline] Implement completion_append_character - - There is already the possibility to set Reline.completion_append_character. - However, it is not used by the line editor. - - https://github.com/ruby/reline/commit/ab798931b9 - -commit 11db4d3a3b315ed2495ec0cdde4449554c002bff - Author: Nobuyoshi Nakada - Date: 2019-12-14 11:05:16 +0900 - - [ruby/reline] Disable any implementation-defined special control characters - - Including dsusp, lnext, and so on. - - https://github.com/ruby/reline/commit/a44abe586b - -commit fbe229906b6e55c2e7bb1e68452d5c225503b9ca - Author: Koichi Sasada - Date: 2019-12-17 13:14:52 +0900 - - add debug counter to count `call` reusing cases. - -commit 618d09115185efa05f6948247d86087f4aa96118 - Author: aycabta - Date: 2019-12-17 13:10:39 +0900 - - Support change search direction - -commit a14a0244b48c422e392547b198af6fb57f7ca568 - Author: aycabta - Date: 2019-12-17 12:47:09 +0900 - - Support forward-search-history by C-s - -commit c687be4bc01c9ce52ea990945d9304d6fe59fe9b - Author: Nobuyoshi Nakada - Date: 2019-12-17 11:53:30 +0900 - - Added a test for [Bug #16159] - -commit ebe5b66ca8e639468e14c4134a415403d949385e - Author: Nobuyoshi Nakada - Date: 2019-12-17 10:48:17 +0900 - - Reduce tzset calls - - Set up-to-date flag always when calling tzset(). - -commit d6a2bce64a7fa1099e507e1d36b5f1533f42f60f - Author: Yusuke Endoh - Date: 2019-12-17 10:31:20 +0900 - - time.c (find_time_t): fix round-to-zero bug - - `find_time_t` did not work correctly for year older than the Epoch - because it used C's integer division (which rounds negative to zero). - - For example, `TIme.new(1933)` returned a wrong time whose year is 1922 - in Asia/Kuala_Lumpur because there is no 00:00:00 1st Jan. 1933 in the - time zone. - - ``` - $ TZ=Asia/Kuala_Lumpur ruby -e 'p Time.new(1933)' - 1932-12-31 00:00:00 +0700 - ``` - - This change fixes the issue by using `DIV` macro instead of `/`. - Now `Time.new(1933)` returns a time in 1933. - - ``` - $ TZ=Asia/Kuala_Lumpur ruby -e 'p Time.new(1933)' - 1933-01-01 00:20:00 +0720 - ``` - - [Bug #16159] - -commit 5da4a310ccf7f4131c1814a2c9279a5682777f1b - Author: NARUSE, Yui - Date: 2019-12-17 00:49:17 +0900 - - close datasocket on stor of server side - -commit 5be34d6a3310065850c0c530db6936415124b5d9 - Author: NARUSE, Yui - Date: 2019-12-10 19:25:00 +0900 - - ensure to close the data connection [Bug #16413] - -commit 95213f6df6a23918d57a743975708c638da42aae - Author: aycabta - Date: 2019-12-15 10:29:44 +0900 - - Check whether Readline.completion_append_character= exists - -commit b12bc3b0461f7331db6e27865fa7a8ef29a0f652 - Author: Eric Wong - Date: 2019-12-17 03:28:44 +0900 - - thread.c: avoid needless read after select|ppoll - - We do not need to issue pipe|eventfd read(2) syscall - unless select, ppoll|poll declares the FD needs reading. - -commit bba6386d9568123a7c76693e3a5fa5e33562a640 - Author: Yusuke Endoh - Date: 2019-12-17 00:44:32 +0900 - - test/ruby/test_process.rb: suppress "unused variable" warning - -commit c6b1342d29a71e44c0275516d4f8408ce07bf397 - Author: git - Date: 2019-12-17 00:01:56 +0900 - - * 2019-12-17 [ci skip] - -commit 6a75a460536a32fb62184dc5d8d66ddd737a9bad - Author: Richard Viney - Date: 2017-01-22 10:50:08 +0900 - - Make prettyprint’s cycle detection aware of Delegator instances - - Fixes [Bug #13144] - - Co-Authored-By: Nobuyoshi Nakada - -commit 251f5d8226dbde06ba06e980e3b741b45ae3826d - Author: Yusuke Endoh - Date: 2019-12-16 23:39:10 +0900 - - Revert "lib/net/http/response.rb: support raw deflate correctly" - - This reverts commit 5105240b1e851410020b3b3f1a2bead7ffdd4291. - - In RFC 2616: - - ``` - deflate - The "zlib" format defined in RFC 1950 [31] in combination with - the "deflate" compression mechanism described in RFC 1951 [29]. - ``` - - So "Content-Encoding: deflate" means zlib format, not raw deflate. - - [Bug #11268] - -commit 5105240b1e851410020b3b3f1a2bead7ffdd4291 - Author: Yusuke Endoh - Date: 2019-12-16 23:20:42 +0900 - - lib/net/http/response.rb: support raw deflate correctly - - Net::HTTP had used `Zlib::Inflate.new(32 + Zlib::MAX_WBITS)` for all - content encoding (deflate, zlib, and gzip). - But the argument `32 + Zlib::MAX_WBITS` means zlib and gzip decoding - with automatic header detection, so (raw) deflate compression had not - been supported. - - This change makes it support raw deflate correctly by passing an - argument `-Zlib::MAX_WBITS` (which means raw deflate) to - `Zlib::Inflate.new`. All deflate-mode tests are fixed too. - - [Bug #11268] - -commit d6fd39030d8b14eef117c1e5e265e0b769a9f4fd - Author: BurdetteLamar - Date: 2019-12-14 04:46:54 +0900 - - Enhancements for ENV doc - - Notes: - Merged: https://github.com/ruby/ruby/pull/2751 - -commit d8db343a21b175563fa58a7d33c600ae7c7973cc - Author: Hiroshi SHIBATA - Date: 2019-12-16 20:47:02 +0900 - - Merge RubyGems 3.1.1 and update the NEWS entry for RubyGems - -commit ba11a74745e10fac88a74c2da2e0032ccf254265 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-12-16 17:38:41 +0900 - - ensure cc->def == cc->me->def - - The equation shall hold for every call cache. However prior to this - changeset cc->me could be updated without also updating cc->def. Let's - make it sure by introducing new macro named CC_SET_ME which sets cc->me - and cc->def at once. - -commit 6545d5bbb9517a9364bd59a12a98d3e00516e07e - Author: Kazuhiro NISHIYAMA - Date: 2019-12-16 16:59:23 +0900 - - Use CDN instead of raw.githubusercontent.com - -commit 8b921813aa8d5ea8f4e6c1e700ad48a120c500ab - Author: Kazuhiro NISHIYAMA - Date: 2019-12-16 16:58:21 +0900 - - Fix open without close [ci skip] - -commit 04e95f8985066b4ae1e97b045efda98bdefa07bd - Author: Nobuyoshi Nakada - Date: 2019-12-16 11:19:59 +0900 - - Get rid of infinite recursion at loading transcoder - - Disable encoding US-ASCII path to filesystem on Windows too. - [Bug #16392] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2755 - -commit d2f04d332f2ff04f25202ed38e23de526a9aea46 - Author: Nobuyoshi Nakada - Date: 2019-12-16 09:44:01 +0900 - - Kernel#abort without arguments should print error info - - [Bug #16424] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2754 - -commit 1e80a208cc44cbbdd4e49d6146eea29cde5cd42a - Author: Hiroshi SHIBATA - Date: 2019-12-16 10:09:13 +0900 - - Update the NEWS entry for Bundler 2.1.0 - -commit 2344d8ac9aefae6258b1967014d17564cf2d2e43 - Author: git - Date: 2019-12-16 10:05:44 +0900 - - * 2019-12-16 [ci skip] - -commit f47c38245ff6976c5d1fc27a79f239bba00fc333 - Author: Breno Leitao - Date: 2019-12-16 10:05:21 +0900 - - gc.h: Add SET_MACHINE_STACK_END specific for Powerpc64 (#1767) - - Currently we are not able to grab the correct end/top of the stack on - powerpc64 due to the fact that it uses the fallback function. - - The fallback function does not return the correct top of the stack - because it adds a new frame and the returned top of the stack contains - this frame overhead that could be something around 112 bytes on - Powerpc64. - - This patch simply gets the correct top of the stack pointer, which is - always on r1 register according to both ABI v1 and ABI v2 (Little - endian). - - Signed-off-by: Breno Leitao - -commit e8c62836a6292bf2f691de458b24ea50c51b452a - Author: Nobuyoshi Nakada - Date: 2019-12-15 23:13:16 +0900 - - IO#set_encoding_by_bom should err when encoding is already set - - Except for ASCII-8BIT. [Bug #16422] - -commit eeb99fb52500b571b1239442a7d17d335cfde060 - Author: Yusuke Endoh - Date: 2019-12-15 22:19:45 +0900 - - tool/gen-mailmap.rb: odaira is removed as he is added in upstream - - https://github.com/ruby/ruby-commit-hook/commit/ddc83bea6fe6f4696e140b605db10ef0c922bba6 - -commit 48bab6fe1eb77b481bffbc97fdbf5ba74c45a07a - Author: Yusuke Endoh - Date: 2019-12-15 21:59:30 +0900 - - tool/gen-mailmap.rb: Added for generating git `.mailmap` file - - `.mailmap` can be used To show canonical names and email addresses. - It is helpful for statistics of committers. - -commit a83c46e3fd1e3480404c6dda4c4cda73533a6a1d - Author: Kazuhiro NISHIYAMA - Date: 2019-12-15 20:03:47 +0900 - - Add more debug info - - closed server doesn't have useful info. - So call inspect before close. - And add local debug code in comment. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11x/ruby-master/log/20191215T092405Z.fail.html.gz - ``` - 1) Failure: - IMAPTest#test_connection_closed_without_greeting [/export/home/rubyci/chkbuild-tmp/tmp/build/20191215T092405Z/ruby/test/net/imap/test_imap.rb:483]: - [Net::IMAP::Error] exception expected, not ##, :server=>#, :port=>41748, :server_addr=>"::1"}>. - ``` - -commit 980ddca47e892535c1da897b33ac7bc727efd52d - Author: Hiroshi SHIBATA - Date: 2019-12-15 16:48:40 +0900 - - Prepare to release rubygems-3.1.0 - -commit 9f43160014905db159ec67e3ee2b485d870de05d - Author: David Rodríguez - Date: 2019-12-14 22:15:43 +0900 - - Delegate should be supported now - - Since `did_you_mean` dropped its dependency on it. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2753 - -commit 286cb3395f8be493b21d0bdf13bcf40fe5c3ab50 - Author: Hiroshi SHIBATA - Date: 2019-12-14 21:19:28 +0900 - - Fixed test failures with gem command path on ruby core repo. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2753 - -commit 0fab9005387549d5c5b13cf330012d02e5312bc2 - Author: David Rodríguez - Date: 2019-12-14 04:41:13 +0900 - - Vendor thor 1.0.0 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2753 - -commit 38002a8adbd98266426940d829429a30af0622a4 - Author: Hiroshi SHIBATA - Date: 2019-12-14 19:49:16 +0900 - - Prepare to release bundler-2.1.0 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2753 - -commit e2b192f7d5b4f0e2133bb6cf03cfc609258826be - Author: Kazuhiro NISHIYAMA - Date: 2019-12-15 14:47:36 +0900 - - rand(beginless_range) raise Errno::EDOM instead of TypeError - - same as `rand(endless_range)` - - Before: - ``` - $ ruby -e 'rand(..1)' - Traceback (most recent call last): - 2: from -e:1:in `
' - 1: from -e:1:in `rand' - -e:1:in `-': nil can't be coerced into Integer (TypeError) - ``` - - After: - ``` - $ ruby -e 'rand(..1)' - Traceback (most recent call last): - 1: from -e:1:in `
' - -e:1:in `rand': Numerical argument out of domain (Errno::EDOM) - ``` - -commit db2ea9b0c5fb49a04af1b299a37e92f81d7cccd2 - Author: Nobuyoshi Nakada - Date: 2019-12-15 00:21:19 +0900 - - [DOC] Fixed the class name in FrozenError#receiver - -commit 38b9d213f1fc474549d7ca6858ed4f1d1436d1ee - Author: Nobuyoshi Nakada - Date: 2019-12-15 00:18:09 +0900 - - Revert "[DOC] Fixed the class name in FrozenError#receiver" - - This reverts commit 5f56a5fc9be9ea7b088795c2d3871c2352a020c2. - `FrozenError.new(mesg, nil).receiver` should not raise an - ArgumentError. - -commit 52b1ba0b0242dc8b10b24df716ec439cd4b2bd88 - Author: git - Date: 2019-12-15 00:15:23 +0900 - - * 2019-12-15 [ci skip] - -commit 5f56a5fc9be9ea7b088795c2d3871c2352a020c2 - Author: Nobuyoshi Nakada - Date: 2019-12-14 23:57:44 +0900 - - [DOC] Fixed the class name in FrozenError#receiver - -commit 33f0ef44fde7b042d15056cea9af49d160268537 - Author: Nobuyoshi Nakada - Date: 2019-12-14 23:56:28 +0900 - - [DOC] Fixed the FrozenError.new result [ci skip] - -commit 9e0256836370d6294114320f1b5fa9b3b16b8ae2 - Author: Benoit Daloze - Date: 2019-12-14 20:26:30 +0900 - - Improve highlighting in RubyVM::AbstractSyntaxTree docs when using `ri` - -commit b4b22b9278007b106fe40c0191f8dcf5e7e8c0f2 - Author: Benoit Daloze - Date: 2019-12-14 20:16:58 +0900 - - Clarify in the documentation that RubyVM::AbstractSyntaxTree is not stable API - - * See [Feature #14844]. - -commit 4cc83f9ac60d18ba330dc7f8e92eae1ffce67322 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-14 16:05:49 +0900 - - [Feature #13083] is already reverted - -commit 90cdcefa78ee9f3c7c78db2c5f3df0fdba25d83f - Author: Kazuhiro NISHIYAMA - Date: 2019-12-14 16:05:15 +0900 - - Update warnings in NEWS - -commit e2708068ad65f7f9986adf4fb3a4fa660f430a5a - Author: Yuki Nishijima - Date: 2019-12-14 11:39:58 +0900 - - Drop delegate dependency - - Original comment: - https://github.com/ruby/did_you_mean/commit/2f26c9ee770f28da0942c42cbc9e5800535b75e1 - -commit f3240eb67dc4c807f6489a8a5ccb6eeec239efe5 - Author: Marcus Stollsteimer - Date: 2019-12-14 06:07:59 +0900 - - NEWS: fix pattern matching example - -commit 835703c69f2b1b770b1e3c8c9dd73aca4ed734e6 - Author: git - Date: 2019-12-14 00:40:25 +0900 - - * 2019-12-14 [ci skip] - -commit 84b873e381c6928965e36d0a83c899a01b65e646 - Author: Nobuyoshi Nakada - Date: 2019-12-13 14:35:11 +0900 - - [ruby/irb] Restore environment variables - - https://github.com/ruby/irb/commit/236590882c - -commit ab1f3d63b0b08fcb8e90557a0d8d72e624221557 - Author: Hiroshi SHIBATA - Date: 2019-12-13 22:10:28 +0900 - - Fixed a typo - -commit 2ef5f012c1d1dcef18d3c4c56d0d07fc72362be7 - Author: Hiroshi SHIBATA - Date: 2019-12-13 22:00:28 +0900 - - Added explicitly loading `Gem::Command` class - -commit eb512c5a9530322280991441954b0405cadeebf1 - Author: Nobuyoshi Nakada - Date: 2019-12-13 21:38:50 +0900 - - warn should be a global function - -commit a2e87123499f6eef9c03089f61f174dd4b3cc673 - Author: Nobuyoshi Nakada - Date: 2019-12-13 20:51:58 +0900 - - Fix visibility as module_function - -commit 6183addf6a4b94db7fe5b9187ac66fa11c8d2825 - Author: Nobuyoshi Nakada - Date: 2019-11-12 18:34:49 +0900 - - Add `Warning.[]` and `Warning.[]=` - - Notes: - Merged: https://github.com/ruby/ruby/pull/2739 - -commit f3b1b645edfc5a8c938da74a5ed44564b9e2fc08 - Author: Nobuyoshi Nakada - Date: 2019-12-10 20:54:01 +0900 - - Create backtrace location array directly - - Notes: - Merged: https://github.com/ruby/ruby/pull/2739 - -commit 0b5268afbcf11c299e11102c366e836ae55cc39f - Author: Nobuyoshi Nakada - Date: 2019-12-10 20:22:42 +0900 - - Moved Kernel#warn to warning.rb - - Notes: - Merged: https://github.com/ruby/ruby/pull/2739 - -commit 82cc2843a92b286cc13afd0860a4e111d4ea2a0b - Author: Hiroshi SHIBATA - Date: 2019-12-13 20:19:08 +0900 - - Prepare to release RubyGems 3.1.0 final version. - -commit 26774351dc5f494253ba031e4bc453dc4dddb2cf - Author: Kazuhiro NISHIYAMA - Date: 2019-12-13 18:06:36 +0900 - - Ignore error of `apt-get update` in MJIT workflow too - -commit d5c73681f8fd9e17b5378cb029fc88e98d7b6abb - Author: Kazuhiro NISHIYAMA - Date: 2019-12-13 18:04:21 +0900 - - Ignore error of `apt-get update` on GitHub Actions - -commit 97a17a51b8e6eca31fd6421511f1907e6e95b415 - Author: Koichi Sasada - Date: 2019-12-13 17:26:12 +0900 - - readable function names for inline functions. - - Now, C functions written by __builtin_cexpr!(code) and others are - named as "__builtin_inline#{n}". However, it is difficult to know - what the function is. This patch rename them into - "__builtin_foo_#{lineno}" when cexpr! is in 'foo' method. - -commit 1140625cd31f7ad74c42dc625b9dab389b12653c - Author: Matt Valentine-House - Date: 2019-12-12 22:37:31 +0900 - - Allow more than one major version number in target_os - -commit c2dfc6d869979124a46fb0c5404956891c27575f - Author: aycabta - Date: 2019-12-13 03:57:32 +0900 - - Show a menu before a document - - IRB should show a menu first if a completed list has plural items. But just - shows document without menu if a completed list with plural items includes a - perfect matched item. The behavior is a bug. This commit fixes it. - -commit b8d6c883b3f49e6339da4fa5111dbdbe7d3c6df5 - Author: Nobuyoshi Nakada - Date: 2019-12-13 08:52:07 +0900 - - Improved the test for Thread#inspect [Feature #16412] - -commit fa5f7a8f7ef0d03b8ac97d25a0460c0dc6bb33f3 - Author: git - Date: 2019-12-13 00:05:20 +0900 - - * 2019-12-13 [ci skip] - -commit 69b6f8fd047c5c9e0fa6f65656fda762f8ecfc5e - Author: aycabta - Date: 2019-12-13 00:04:01 +0900 - - Check whether TestReadline is defined - -commit 93b27c69cc65b5019df061bb8fefaa097bf8a33d - Author: Nobuyoshi Nakada - Date: 2019-12-12 23:26:29 +0900 - - Show the failed message too - -commit 68321dd1fa6f55e578bc9776f906ee1f948c7095 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-12 22:04:07 +0900 - - Move `rescue` for debug into block of assert_raise - -commit dd60856f8ddaa0652bf019589f05705e00279b8c - Author: Nobuyoshi Nakada - Date: 2019-12-12 20:53:59 +0900 - - [cygwin] fix File.absolute_path? test - - Paths start with the root are absolute on cygwin, regardless the - drive letter. - -commit b6f25318c5a1efca0ab963b49ae69db82787e783 - Author: Nobuyoshi Nakada - Date: 2019-12-12 20:50:01 +0900 - - Cygwin path cannot be mapped to a UNC as-is - -commit c20dd2f75491fc6e78dab55b492c507ee3bb670d - Author: Kazuhiro NISHIYAMA - Date: 2019-12-12 17:38:27 +0900 - - Add more debug info when Errno::EINVAL - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11x/ruby-master/log/20191212T072406Z.fail.html.gz - -commit 54e089df9e37d438687effd092feda2442116c62 - Author: Koichi Sasada - Date: 2019-12-12 17:02:36 +0900 - - show self on control frame dump. - - control frame detailed info on RUBY_DEBUG=ci should also show - self information. - -commit 55b7ba368696033f2e89b77cbcd4a05dec97b139 - Author: Jeremy Evans - Date: 2019-08-22 05:59:36 +0900 - - Make super in instance_eval in method in module raise TypeError - - This makes behavior the same as super in instance_eval in method - in class. The reason this wasn't implemented before is that - there is a check to determine if the self in the current context - is of the expected class, and a module itself can be included - in multiple classes, so it doesn't have an expected class. - - Implementing this requires giving iclasses knowledge of which - class created them, so that super call in the module method - knows the expected class for super calls. This reference - is called includer, and should only be set for iclasses. - - Note that the approach Ruby uses in this check is not robust. If - you instance_eval another object of the same class and call super, - instead of an TypeError, you get super called with the - instance_eval receiver instead of the method receiver. Truly - fixing super would require keeping a reference to the super object - (method receiver) in each frame where scope has changed, and using - that instead of current self when calling super. - - Fixes [Bug #11636] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2717 - -commit 1a4a9bdb5da973f8a89e699ce6d0fb1ca21090bd - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-12-12 13:59:52 +0900 - - proper initialization of struct RVALUE - - This changeset makes no difference unless GC_DEBUG is on. When that flag is - set, struct RVALUE is bigger than struct RObject. We have to take care of the - additional fields. Otherwise we get a SIGSEGV like shown below. - - The way obj is initialized in this patch works for both GC_DEBUG is on and off. - See also ISO/IEC 9899:1999 section 6.7.8 paragraph #21. - - ``` - Program received signal SIGSEGV, Segmentation fault. - __strlen_avx2 () at ../sysdeps/x86_64/multiarch/strlen-avx2.S:62 - 62 ../sysdeps/x86_64/multiarch/strlen-avx2.S: No such file or directory - (gdb) bt - #0 __strlen_avx2 () at ../sysdeps/x86_64/multiarch/strlen-avx2.S:62 - #1 0x00005555557dd9a7 in BSD_vfprintf (fp=0x7fffffff6be0, fmt0=0x5555558f3059 "@%s:%d", ap=0x7fffffff6dd0) at vsnprintf.c:1027 - #2 0x00005555557db6f5 in ruby_do_vsnprintf (str=0x555555bfc58d "", n=211, fmt=0x5555558f3059 "@%s:%d", ap=0x7fffffff6dd0) at sprintf.c:1022 - #3 0x00005555557db909 in ruby_snprintf (str=0x555555bfc58d "", n=211, fmt=0x5555558f3059 "@%s:%d") at sprintf.c:1040 - #4 0x0000555555661ef4 in rb_raw_obj_info (buff=0x555555bfc560 "0x0000555555d2bfa0 [0 ] T_STRING (String)", buff_size=256, obj=93825000456096) at gc.c:11449 - #5 0x000055555565baaf in obj_info (obj=93825000456096) at gc.c:11612 - #6 0x000055555565bae1 in rgengc_remembered (objspace=0x555555c0a1c0, obj=93825000456096) at gc.c:6618 - #7 0x0000555555666987 in newobj_init (klass=93824999964192, flags=5, v1=0, v2=0, v3=0, wb_protected=1, objspace=0x555555c0a1c0, obj=93825000456096) at gc.c:2134 - #8 0x0000555555666e49 in newobj_slowpath (klass=93824999964192, flags=5, v1=0, v2=0, v3=0, objspace=0x555555c0a1c0, wb_protected=1) at gc.c:2209 - #9 0x0000555555666b94 in newobj_slowpath_wb_protected (klass=93824999964192, flags=5, v1=0, v2=0, v3=0, objspace=0x555555c0a1c0) at gc.c:2220 - #10 0x000055555565751b in newobj_of (klass=93824999964192, flags=5, v1=0, v2=0, v3=0, wb_protected=1) at gc.c:2256 - #11 0x00005555556575ca in rb_wb_protected_newobj_of (klass=93824999964192, flags=5) at gc.c:2272 - #12 0x00005555557f36ea in str_alloc (klass=93824999964192) at string.c:728 - #13 0x00005555557f2128 in rb_str_buf_new (capa=0) at string.c:1317 - #14 0x000055555578c66d in rb_reg_preprocess (p=0x555555cc8148 "^-(.)(.+)?", end=0x555555cc8152 "", enc=0x555555cc7c80, fixed_enc=0x7fffffff74e8, err=0x7fffffff75f0 "") at re.c:2682 - #15 0x000055555578ea13 in rb_reg_initialize (obj=93825000046736, s=0x555555cc8148 "^-(.)(.+)?", len=10, enc=0x555555cc7c80, options=0, err=0x7fffffff75f0 "", sourcefile=0x555555d1a5c0 "lib/optparse.rb", sourceline=1460) at re.c:2808 - #16 0x000055555578e285 in rb_reg_initialize_str (obj=93825000046736, str=93825000046904, options=0, err=0x7fffffff75f0 "", sourcefile=0x555555d1a5c0 "lib/optparse.rb", sourceline=1460) at re.c:2869 - #17 0x000055555578ee02 in rb_reg_compile (str=93825000046904, options=0, sourcefile=0x555555d1a5c0 "lib/optparse.rb", sourceline=1460) at re.c:2958 - #18 0x0000555555748dfb in rb_parser_reg_compile (p=0x555555d1f760, str=93825000046904, options=0) at parse.y:12157 - #19 0x00005555557581c3 in parser_reg_compile (p=0x555555d1f760, str=93825000046904, options=0) at parse.y:12151 - #20 0x00005555557580ac in reg_compile (p=0x555555d1f760, str=93825000046904, options=0) at parse.y:12167 - #21 0x0000555555746ebb in new_regexp (p=0x555555d1f760, node=0x555555dece68, options=0, loc=0x7fffffff89e8) at parse.y:10072 - #22 0x000055555573d1f5 in ruby_yyparse (p=0x555555d1f760) at parse.y:4395 - #23 0x000055555574a582 in yycompile0 (arg=93825000404832) at parse.y:5945 - #24 0x00005555558c6898 in rb_suppress_tracing (func=0x55555574a470 , arg=93825000404832) at vm_trace.c:427 - #25 0x0000555555748290 in yycompile (vparser=93824999283456, p=0x555555d1f760, fname=93824999283624, line=1) at parse.y:5994 - #26 0x00005555557481ae in rb_parser_compile_file_path (vparser=93824999283456, fname=93824999283624, file=93824999283400, start=1) at parse.y:6098 - #27 0x00005555557cdd35 in load_file_internal (argp_v=140737488331760) at ruby.c:2023 - #28 0x00005555556438c5 in rb_ensure (b_proc=0x5555557cd610 , data1=140737488331760, e_proc=0x5555557cddd0 , data2=140737488331760) at eval.c:1128 - #29 0x00005555557cb68b in load_file (parser=93824999283456, fname=93824999283624, f=93824999283400, script=0, opt=0x7fffffffa468) at ruby.c:2142 - #30 0x00005555557cb339 in rb_parser_load_file (parser=93824999283456, fname_v=93824999283624) at ruby.c:2164 - #31 0x00005555556ba3e1 in load_iseq_eval (ec=0x555555c0a650, fname=93824999283624) at load.c:579 - #32 0x00005555556b857a in require_internal (ec=0x555555c0a650, fname=93824999284352, exception=1) at load.c:1016 - #33 0x00005555556b7967 in rb_require_string (fname=93824999284464) at load.c:1105 - #34 0x00005555556b7939 in rb_f_require (obj=93824999994824, fname=93824999284464) at load.c:811 - #35 0x00005555558b7ae0 in call_cfunc_1 (recv=93824999994824, argc=1, argv=0x7ffff7ecd0a8, func=0x5555556b7920 ) at vm_insnhelper.c:2348 - #36 0x00005555558a8889 in vm_call_cfunc_with_frame (ec=0x555555c0a650, reg_cfp=0x7ffff7fccfa0, calling=0x7fffffffaab0, cd=0x555555d76a10, empty_kw_splat=0) at vm_insnhelper.c:2513 - #37 0x000055555589fb5c in vm_call_cfunc (ec=0x555555c0a650, reg_cfp=0x7ffff7fccfa0, calling=0x7fffffffaab0, cd=0x555555d76a10) at vm_insnhelper.c:2538 - #38 0x000055555589f22e in vm_call_method_each_type (ec=0x555555c0a650, cfp=0x7ffff7fccfa0, calling=0x7fffffffaab0, cd=0x555555d76a10) at vm_insnhelper.c:2924 - #39 0x000055555589ef47 in vm_call_method (ec=0x555555c0a650, cfp=0x7ffff7fccfa0, calling=0x7fffffffaab0, cd=0x555555d76a10) at vm_insnhelper.c:3038 - #40 0x0000555555866dbd in vm_call_general (ec=0x555555c0a650, reg_cfp=0x7ffff7fccfa0, calling=0x7fffffffaab0, cd=0x555555d76a10) at vm_insnhelper.c:3075 - #41 0x00005555558ae557 in vm_sendish (ec=0x555555c0a650, reg_cfp=0x7ffff7fccfa0, cd=0x555555d76a10, block_handler=0, method_explorer=0x5555558ae5d0 ) at vm_insnhelper.c:4021 - #42 0x000055555587745b in vm_exec_core (ec=0x555555c0a650, initial=0) at insns.def:801 - #43 0x0000555555899b9c in rb_vm_exec (ec=0x555555c0a650, mjit_enable_p=1) at vm.c:1907 - #44 0x000055555589aaf0 in rb_iseq_eval_main (iseq=0x555555c1da80) at vm.c:2166 - #45 0x0000555555641f0b in rb_ec_exec_node (ec=0x555555c0a650, n=0x555555c1da80) at eval.c:277 - #46 0x0000555555641d62 in ruby_run_node (n=0x555555c1da80) at eval.c:335 - #47 0x000055555557a188 in main (argc=11, argv=0x7fffffffc848) at main.c:50 - (gdb) fr 7 - #7 0x0000555555666987 in newobj_init (klass=93824999964192, flags=5, v1=0, v2=0, v3=0, wb_protected=1, objspace=0x555555c0a1c0, obj=93825000456096) at gc.c:2134 - 2134 if (rgengc_remembered(objspace, (VALUE)obj)) rb_bug("newobj: %s is remembered.", obj_info(obj)); - (gdb) p ((struct RVALUE*)obj)->file - $1 = 0x65a5992b0fb25ce7 - (gdb) - ``` - -commit 35eb12c06397e770392a41343cbffc4b204e15c9 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-12-12 12:39:24 +0900 - - add casts - - %p is for void *. Because fprintf is a function with variadic arguments - automatic cast from any pointer to void * does not work. We have to be - explicit. - -commit f40143fe7c55e3b2209f57e7ec4b3ad1d9468a1e - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-12-12 12:37:58 +0900 - - fix arity mismatch - - I missed this in bc3e7924bc66d3ef77b219c72f3e59cc154550a3 because the - function is inside of a #ifdef. - -commit 12de92a3682f7a54941c511e6394068df2adefb3 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-12-12 11:11:39 +0900 - - implement make test-all TESTS=--gc-compact - - 79eb5e1acac2339c6ec71db723298bdfcd92b233 implemented - RUBY_TEST_GC_COMPACT=1 so why not make it also possible via the command - line argument. - -commit 53e8589c69d1345235d9f02ecbcf6aa32fa9d39c - Author: Hiroshi SHIBATA - Date: 2019-12-12 09:14:09 +0900 - - Import json-2.3.0 from flori/json - -commit 7d991a0571ab33f44c00fdc227f076d1eaf5fb2b - Author: aycabta - Date: 2019-12-12 08:40:44 +0900 - - Suppress to crash IRB if completed list has nil - -commit 50ae8895f32f5fc620f0a0f288dae62815cb2a6f - Author: Rei Odaira - Date: 2019-12-12 04:31:38 +0900 - - debug_counter.c: include ruby/config.h before stdio.h - to define _LARGE_FILES - -commit 27ac034f196967f54edf00474880886624d30245 - Author: Koichi Sasada - Date: 2019-12-12 04:26:03 +0900 - - support gc_compact_checker on parallel test. - -commit 7dbbba38a0a6acd41a43eb0c4fc416fe35e2345a - Author: Aaron Patterson - Date: 2019-10-12 09:13:02 +0900 - - Make sure we don't push MOVED or NONE on the stack - -commit 79eb5e1acac2339c6ec71db723298bdfcd92b233 - Author: Koichi Sasada - Date: 2019-12-12 03:31:13 +0900 - - call GC.compact after each test. - - RUBY_TEST_GC_COMPACT=1 enables GC.compact checker which calls - GC.compact after each test. - -commit 51cc5a26df5f47ecdd88398ba1a50a8e62182649 - Author: aycabta - Date: 2019-12-12 03:18:44 +0900 - - Some tests failed with before GNU Readline 6.0 on Windows - -commit fe4502336680270d886b502e4b35ecb3de2f2164 - Author: git - Date: 2019-12-12 03:13:32 +0900 - - * 2019-12-12 [ci skip] - -commit 0f90630983db3257c544c698761a00456af81d85 - Author: Aaron Patterson - Date: 2019-12-12 03:12:14 +0900 - - Update method tables only if there is a class ext pointer - - This makes reference updating look similar to marking, and may avoid - dereferencing a wrong pointer. - -commit cae657c32492a9b4e72b5e290c143e2c84d4c42d - Author: Yusuke Endoh - Date: 2019-12-11 21:54:18 +0900 - - Fix .travis.yml to keep s390x-linux as allow_features - - [Misc #16360] - -commit 47a365dd580f2dfe0f0d56155587dfdf2fc7afb7 - Author: Yusuke Endoh - Date: 2019-12-11 20:44:39 +0900 - - Move s390x-linux to allow_failures matrix - - ref [Misc #16360] - -commit 49ffae7ca66f3e0bc3e2d87092197d3514d5925e - Author: Jeremy Evans - Date: 2019-12-02 12:59:07 +0900 - - [ruby/forwardable] Bump version to 1.3.1 - - https://github.com/ruby/forwardable/commit/aa07c55f3f - -commit 0dcd3340fb5f91112ce66c53315eff92b9f10fb7 - Author: Jeremy Evans - Date: 2019-12-02 12:57:06 +0900 - - [ruby/forwardable] Make def_*_delegator return name of method defined (Fixes #10) - - This restores compatibility with previous versions. This behavior - was previously undefined, but it makes sense for the name of the - defined method to be returned. - - https://github.com/ruby/forwardable/commit/a52ef3451e - -commit c2f6aa4e4810f8f2aabc35bf4c98ee030ff504b9 - Author: aycabta - Date: 2019-12-11 19:39:37 +0900 - - The result of Readline.completion_proc should have the same encoding of Encoding.default_external - -commit 3098798044ada5a81862aa4668aaf7548f9b1c99 - Author: Nobuyoshi Nakada - Date: 2019-12-11 16:41:37 +0900 - - Test `Thread#to_s` when used from to_s_spec.rb - -commit d2d42081ce76954ff55392a6e07e3eb4f26c696c - Author: Nobuyoshi Nakada - Date: 2019-12-11 16:19:49 +0900 - - `Thread#to_s` has been added at ruby 2.5 - -commit eb9c0070535bc088ab2921613830ba983bfe07a1 - Author: Koichi Sasada - Date: 2019-12-11 16:48:19 +0900 - - skip continuous failure test. - - On mingw this test fails and not solved long time, so skip it. - Please revert it when it solved. - - https://ci.appveyor.com/project/ruby/ruby/builds/29458671/job/9nbcjnfe6p0xnxoe - -commit 1269157a6e46895c0eda2ea202d44790bbe815c8 - Author: Koichi Sasada - Date: 2019-12-11 16:10:26 +0900 - - Thread#to_s is not same as #inspect on old version. - - Thread#to_s returns simple Object#to_s until Ruby 2.4. - -commit 7f5014e6e884d7fa091e3e6462827b910417267c - Author: Koichi Sasada - Date: 2019-12-11 15:45:23 +0900 - - rely on sorted compiled binary array. - - `builtin_binary` is sorted by miniruby loading order and this - loading order should be same on ruby. So we can believe sorted - order of `builtin_binary` on boot time. - -commit 0afee4d80355dd03f0dfefe6120e2e1808d9cb50 - Author: Nobuyoshi Nakada - Date: 2019-12-11 14:27:21 +0900 - - Show the failed message - -commit 7fa821a80d60992f019c98ac813e2fc6e9775031 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-11 14:01:23 +0900 - - Try to use `set-output` - - because commit info are not necessary in env. - -commit 6025783a3b0b37517728c635250669449bb21a53 - Author: Koichi Sasada - Date: 2019-12-11 14:00:32 +0900 - - fix for old MRI versions - -commit fe8caf0ab93e69b743470d16f6cf7416fe9c98da - Author: Koichi Sasada - Date: 2019-12-11 13:37:00 +0900 - - add dependency pointed by update-deps - -commit 35adc47e7eb1640d35e4d294af7e9651d918608d - Author: Kazuhiro NISHIYAMA - Date: 2019-12-11 13:08:21 +0900 - - Create dummy files when check only - - because foo.rb in build directory breaks test-bundler - https://github.com/ruby/ruby/runs/343168046#step:20:125 - -commit cf948a3d3f37c4a786611f5b48c9c020f6020161 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-10 23:01:23 +0900 - - Do not load q.rb in build directory - - Notes: - Merged: https://github.com/ruby/ruby/pull/2736 - -commit 4f5dc15b049eacb9070e2c941183fed68c41f81e - Author: Kazuhiro NISHIYAMA - Date: 2019-12-10 21:44:34 +0900 - - Create more dummy files in build directory - - Notes: - Merged: https://github.com/ruby/ruby/pull/2736 - -commit 1ed0212bcf76ec244ca5b75c65f09e5b04158377 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-10 18:31:01 +0900 - - Do not load files in build directory - - related https://bugs.ruby-lang.org/issues/16177 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2736 - -commit 85e43e1dfecef69b935c48c235cc20f21bd4f0d4 - Author: Jeremy Evans - Date: 2019-12-11 06:38:12 +0900 - - Fix Enumerator::Lazy#with_index - - * Make it correctly handle lambdas - * Make it iterate over the block if block is given - - The original implementation was flawed, based on lazy_set_method - instead of lazy_add_method. - - Note that there is no implicit map when passing a block, the return - value of the block passed to with_index is ignored, just as it - is for Enumerator#with_index. Also like Enumerator#with_index, - when called with a block, the return value is an enumerator without - the index. - - Fixes [Bug #16414] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2742 - -commit 8a80bfcfd4d510a20a62e21d8d2f4119cb823d4f - Author: Jean byroot Boussier - Date: 2019-12-10 19:49:39 +0900 - - Make Thread#to_s consistent with Method and Proc to_s - - Notes: - Merged: https://github.com/ruby/ruby/pull/2738 - -commit 6a7af800dbd45946caaadfc4a1212fc523afe58b - Author: aycabta - Date: 2019-12-11 11:36:21 +0900 - - Add a message for CompatibilityError - -commit 7e9b1609dae0998a4418179f40dc488842c56e5d - Author: Eli Sadoff <9064062+snood1205@users.noreply.github.com> - Date: 2019-12-11 11:25:54 +0900 - - Added documentation for integer range sums (#1593) - -commit 86e2c013d7ade7c93077d599e155aae0f3b632e8 - Author: git - Date: 2019-12-11 11:25:00 +0900 - - * remove trailing spaces. [ci skip] - -commit bbbf451bffbc5605b53726c5977d96bffc10d162 - Author: Koichi Sasada - Date: 2019-12-11 11:22:27 +0900 - - Update tool/mk_builtin_binary.rb - - Co-Authored-By: Sutou Kouhei - - Notes: - Merged: https://github.com/ruby/ruby/pull/2735 - -commit 40026a408df5e3576380f6c1d8bf6c119fa2e32b - Author: Koichi Sasada - Date: 2019-12-10 17:39:04 +0900 - - support cross-compilation. - - On cross-compilation, compiled binary can no be created because - compiled binary should be created by same interpreter (on cross- - compilation, host ruby is used to build ruby (BASERUBY)). - So that cross-compilation system loads required scripts in text. - It is same as miniruby. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2735 - -commit 9c2807b2df14984e3c81d72a381d9a4d288b3fbe - Author: Koichi Sasada - Date: 2019-12-10 17:13:42 +0900 - - remove prelude.c - - prelude.c is an automatically generated file by template/prelude.c.tmpl. - However it does not contain any required functions. So remove it from - dependency. - - Also miniprelude.c is included by mini_builtin.c and does not need - to make miniprelude.o. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2735 - -commit 2c5c60754cafe9895b7a7421cd0552eaa2ae8b09 - Author: Koichi Sasada - Date: 2019-12-10 16:19:13 +0900 - - use compiled binary for gem_prelude.rb. - - `gem_prelude.rb` is not compiled yet. This patch compile it to - compiled binary. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2735 - -commit 943f3e5fd463bf2a4a3a4e92b5134e238b9c931d - Author: Koichi Sasada - Date: 2019-12-09 16:20:35 +0900 - - add include guard - - Notes: - Merged: https://github.com/ruby/ruby/pull/2735 - -commit 69aa927a40618591082085fe04c010d516dd50d3 - Author: Corey Farwell - Date: 2017-04-18 06:58:51 +0900 - - Indicate `find_all` and `select` methods are aliases. - - This matches the documentation for `Enumerable::inject` and `Enumerable::reduce` which are also aliases. - -commit 0fafb83b3878b11de18de7a2d09927842eaf5fb7 - Author: git - Date: 2019-12-11 11:13:28 +0900 - - * 2019-12-11 [ci skip] - -commit ec54ac938104517dd61887006ef8cc324b3b1b35 - Author: aycabta - Date: 2019-12-11 11:12:54 +0900 - - Support Readline.completion_quote_character by Reline - -commit 8e49ef5a691cc9a249acae8c7335ec53bf445dc3 - Author: Nobuyoshi Nakada - Date: 2019-12-10 23:13:40 +0900 - - [ruby/io-console] update depend for f9c0fe77c0e - -commit 2a2a707829168b898508ae27a0458719a36bd316 - Author: Hiroshi SHIBATA - Date: 2019-12-10 21:21:19 +0900 - - Followed up 38722fa179fcec549300b2f35206f4eb168f202e - -commit 95f570d0d349a7fd86c6425c9c5d7d87cc5ecd46 - Author: Hiroshi SHIBATA - Date: 2019-12-10 20:56:09 +0900 - - [ruby/logger] bump version to 1.4.2 - - https://github.com/ruby/logger/commit/d6c01cc652 - -commit 0b10d46a577bb6b0e8e177f5c3f17f8d61007d6c - Author: Jeremy Evans - Date: 2019-08-21 13:28:14 +0900 - - [ruby/logger] Enable more timezone tests on OpenBSD - - https://github.com/ruby/logger/commit/bcd7e227e8 - -commit 7a1c56f978907d03876772d942619ec90cbbfa6b - Author: Jeremy Evans - Date: 2019-11-18 10:34:56 +0900 - - [ruby/logger] Document that shift_age of 0 disables log file rotation - - Fixes Ruby Bug 16349. - - https://github.com/ruby/logger/commit/b1b6d06f2d - -commit 38722fa179fcec549300b2f35206f4eb168f202e - Author: Jeremy Evans - Date: 2019-10-15 10:08:10 +0900 - - [ruby/logger] Raise ArgumentError for invalid shift_age - - Consider 'now' and 'everytime' as valid values for the previous - behavior of rotating every time. - - Fixes Ruby Bug 15977 - - https://github.com/ruby/logger/commit/f92979a376 - -commit eb18cb3e476db3bc44d489e090e1535237c4c6c9 - Author: George Claghorn - Date: 2019-09-07 07:28:05 +0900 - - [ruby/logger] Honor Logger#level overrides - - https://github.com/ruby/logger/commit/7365c995bf - -commit af11efd377965b6601bb54aa79072ef0789dc525 - Author: NARUSE, Yui - Date: 2019-12-10 19:06:13 +0900 - - fix ipaddr parameter of Net::HTTP.start to support proxy - - 54072e329cab7207fba133caba4fc12b45add8f9 - -commit aedbee52c0e21358c33e775eab41c634905f63c3 - Author: Nobuyoshi Nakada - Date: 2019-12-10 18:49:53 +0900 - - Prefer $(CHDIR) for the case srcdir contains symlinks - -commit 79d2a1b004b06692279bb647e0eee712e55d14c4 - Author: Hiroshi SHIBATA - Date: 2019-12-10 18:41:05 +0900 - - Update regression tests for 1.4.16 - -commit 8299bcd9465b98bd40711bb9c0d4488aba0b72e1 - Author: Yusuke Endoh - Date: 2019-12-10 18:18:04 +0900 - - .indent.pro: Removed because it is no longer used - -commit c596e01a49d8c77b6dacc931a24eb4b7876617b7 - Author: Yusuke Endoh - Date: 2019-12-10 18:05:51 +0900 - - Move SECURITY.md into .github/ to reduce the files on the top directory - -commit fe0df7dcfc92b81d3508473a08584f8372418323 - Author: aycabta - Date: 2019-12-10 17:27:43 +0900 - - Change encoding of completion strings - -commit 60c53ff6ee1eed054fc3d78ad6c06cbfc56900d6 - Author: Yusuke Endoh - Date: 2019-12-10 17:10:23 +0900 - - vm_core.h (iseq_unique_id): prefer uintptr_t instead of unsigned long - - It produced a warning about type cast in LLP64 (i.e., windows). - -commit e27d2013db18d124d1362b6cc81ecec806ef1a0d - Author: Hiroshi SHIBATA - Date: 2019-12-10 17:03:46 +0900 - - Import racc-1.4.1 from ruby/racc. - -commit 43544f8617a81fbaef03d926777df4a5311cdb74 - Author: Hiroshi SHIBATA - Date: 2019-12-10 17:03:13 +0900 - - Added the missing gemspec of racc - -commit 58e5ab78d0a88d9153770a82cff9b553f53dd5d5 - Author: Nobuyoshi Nakada - Date: 2019-12-10 15:26:14 +0900 - - [ruby/io-console] bump up to 0.5.1 - -commit 2419b3dba6d86ea40a148f7547ff87b2074ca582 - Author: Nobuyoshi Nakada - Date: 2019-12-10 10:44:21 +0900 - - [ruby/io-console] Suppress an unused-variable warning - - https://github.com/ruby/io-console/commit/ae5c72e481 - -commit f9c0fe77c0ef6c5da1d8454bf6be6841c984d606 - Author: Nobuyoshi Nakada - Date: 2019-12-10 10:09:33 +0900 - - [ruby/io-console] Use rb_thread_call_without_gvl instead of the deprecated function - - https://github.com/ruby/io-console/commit/21338ab287 - -commit 09723b98f7a8db4ce6d22cd282525275154736fe - Author: Nobuyoshi Nakada - Date: 2019-12-10 10:08:43 +0900 - - [ruby/io-console] Warn vtime option without intr flag - - https://github.com/ruby/io-console/commit/499ff3de48 - -commit 0c2787b9b29d839876ac68afbd6209a8407fcb30 - Author: Nobuyoshi Nakada - Date: 2019-12-10 10:05:25 +0900 - - [ruby/io-console] bump up to 0.5.0 - -commit 1bdabaa6b13344c195698ca5b0ced323cb93e2e1 - Author: Konstantin Papkovskiy - Date: 2017-08-15 23:35:58 +0900 - - base64.rb: improve performance of Base64.urlsafe_encode64 - - * lib/base64.rb: avoid unnecessary memory allocations - -commit 3ca3c8d768f6d81da72df4798736c2e0059d19f9 - Author: Yusuke Endoh - Date: 2019-12-10 14:15:35 +0900 - - lib/net/http.rb: align the indentation - -commit 7be550d046c726c2a3aa625ceb260d9b2268fb5a - Author: Kazuhiro NISHIYAMA - Date: 2019-12-10 12:41:09 +0900 - - Stop Thread.new in `DRb::TimerIdConv::TimerHolder2#on_gc` - - and add more stop_pool after stop_service - -commit 129c3216d966fc25209a7e50418413ffecd25281 - Author: Nobuyoshi Nakada - Date: 2019-12-10 12:11:56 +0900 - - [cygwin] Removed unnecessary packages - - Notes: - Merged: https://github.com/ruby/ruby/pull/2734 - -commit cd35c0954085758ec1fb5a5fcfb7d6d9d5e71a90 - Author: Nobuyoshi Nakada - Date: 2019-12-10 12:11:37 +0900 - - [cygwin] Removed unnecessary `-c` options - - Notes: - Merged: https://github.com/ruby/ruby/pull/2734 - -commit ec931ee9e13b939f6693032564ee9beeec5a4a1f - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-12-10 11:42:29 +0900 - - forward declare struct timespec - - ... like we do so for struct timeval at several hundreds of lines above. - Depending on OS/Compiler, this can be the first place for the struct to - appear. To make sure the struct is global, we need a forward - declaration at this point. - -commit c50d9dc67d350ad4e21ff1af39635bb5a6114282 - Author: Yusuke Endoh - Date: 2019-12-10 11:26:22 +0900 - - test/ruby/test_keywords.rb: suppress a warning - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/ubuntu1604/ruby-master/log/20191210T003005Z.log.html.gz - ``` - .../test/ruby/test_keyword.rb:2711: warning: `*' interpreted as argument prefix - ``` - -commit 660388f6c5b148ea6f84d589482391bf78f35c6b - Author: Yusuke Endoh - Date: 2019-12-10 09:41:33 +0900 - - test/net/http/test_https.rb (test_get_SNI_failure): stop proxy settings - - Because the test fails under HTTP proxy settings. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris10-gcc/ruby-master/log/20191210T000004Z.fail.html.gz - ``` - 1) Failure: - TestNetHTTPS#test_get_SNI_failure [/export/home/users/chkbuild/cb-gcc/tmp/build/20191210T000004Z/ruby/test/net/http/test_https.rb:81]: - [OpenSSL::SSL::SSLError] exception expected, not #. - ``` - - The new SNI feature introduced at 54072e329c may need to be improved for - HTTP proxy environment. - -commit 6a22b2a091eda81a473eb1b0cc69fe0792560e27 - Author: aycabta - Date: 2019-12-10 07:01:26 +0900 - - Support completion with case-insensitive fashion - - Reline performs completion in a case-insensitive fashon if - Readline.completion_case_fold or completion-ignore-case of .inputrc are set - "on". - -commit 562fd754b55aaaf794fa8eb5461eb0ee87725464 - Author: git - Date: 2019-12-10 00:10:44 +0900 - - * 2019-12-10 [ci skip] - -commit f45c0dc23980d7fd8167d290ea7c354cf2cdb500 - Author: Jeremy Evans - Date: 2019-12-06 04:01:20 +0900 - - Add Proc#ruby2_keywords - - This allows passing keywords through a normal argument splat in a - Proc. While needing ruby2_keywords support for methods is more - common, there is code that delegates keywords through normal - argument splats in procs, including code in Rails. For that - reason, it makes sense to expose this for procs as well. - - Internally, ruby2_keywords is not tied to methods, but iseqs, - so this just allows for setting the ruby2_keywords for the iseq - related to the proc. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2728 - -commit c2dc27d6435f40ff24f553cf47816a1c696bbbba - Author: NARUSE, Yui - Date: 2019-12-09 20:48:35 +0900 - - fix typo of 54072e329cab7207fba133caba4fc12b45add8f9 - -commit 54072e329cab7207fba133caba4fc12b45add8f9 - Author: NARUSE, Yui - Date: 2019-12-09 20:19:11 +0900 - - Add ipaddr optional parameter to Net::HTTP#start - - to replace the address for TCP/IP connection [Feature #5180] - - There're 3 layers of hostname: - * host address for TCP/IP - * TLS server name - * HTTP Host header value - To test DNS round robin or check server certificate from server local, - people sometimes want to connect server with given IP address but keep - TLS server name and HTTP Host header value. - - closes [Feature #15215] - closes https://github.com/ruby/ruby/pull/1893 - closes https://github.com/ruby/ruby/pull/1977 - -commit 194327942690a7997c7b48d34cc105c6ec8b8d40 - Author: Hiroshi SHIBATA - Date: 2019-12-09 19:16:51 +0900 - - Added workaround for CoreAssertions used by ruby/logger. - -commit 4b36832ba64a8879a4b0702d6d5079ddd9d3078e - Author: Hiroshi SHIBATA - Date: 2019-12-09 19:11:18 +0900 - - Merge the upstream changes for test-unit on ruby/logger. - - This commits are based with: - https://github.com/ruby/logger/commit/f067f7d1aa743b467d633ec6d1790bd93ed9e25b - https://github.com/ruby/logger/commit/86058f420d8f6909500cccceb24f58bef0597b4d - https://github.com/ruby/logger/commit/02db6e8ed85d1f4ba974f08fee292bad400d9fc2 - -commit ff7cc0dc34832a074ce42e383439b87ea63b42f7 - Author: sonots - Date: 2019-08-20 21:10:08 +0900 - - [ruby/logger] 1.4.1 - - https://github.com/ruby/logger/commit/5987f518d1 - -commit 895f86c81b95143ecdcca6a8cd4e9367a33b0aaa - Author: Hiroshi SHIBATA - Date: 2019-08-20 16:39:38 +0900 - - [ruby/logger] Fixes #38 - - https://github.com/ruby/logger/commit/31efbb29ff - -commit 0fe1b0508249bc6d64a67c17307a0037f29add74 - Author: sonots - Date: 2019-08-20 03:02:21 +0900 - - [ruby/logger] 1.4.0 - - https://github.com/ruby/logger/commit/8127ce0b56 - -commit 6158e28f8d02026e21317d8a0c2cb2115b3a0660 - Author: Akira Matsuda - Date: 2019-07-31 14:38:38 +0900 - - [ruby/logger] Avoid creating [] and "" when logging an Exception that has no backtrace - - https://github.com/ruby/logger/commit/75fd308053 - -commit 0aafc32995b935b6c46c8439a3e2da008cd683fc - Author: sonots - Date: 2019-03-22 01:14:14 +0900 - - [ruby/logger] frozen_string_literal: true - - https://github.com/ruby/logger/commit/a057eede7b - -commit 22548195d59d8b5e421c586bec81615a0a1091bc - Author: Alan Wu - Date: 2019-07-15 14:52:06 +0900 - - [ruby/logger] Fix typo - - https://github.com/ruby/logger/commit/5f70168ac5 - -commit 8395a6a9a0696d1a0a6aa6a019a1a919ee2c854f - Author: Kazuhiro NISHIYAMA - Date: 2019-12-09 15:05:17 +0900 - - Add badge of Cygwin - - Notes: - Merged: https://github.com/ruby/ruby/pull/2733 - -commit a5e6a50cb8e4acd4feee2ad3a61eac568f2c62b6 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-09 15:04:59 +0900 - - Add cache of cygwin packages - - Notes: - Merged: https://github.com/ruby/ruby/pull/2733 - -commit ea8f03e86c57ff28154345865a2560b8895f3e68 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-09 15:03:10 +0900 - - Remove unused branch name - - Notes: - Merged: https://github.com/ruby/ruby/pull/2733 - -commit 801eafcc146808399f9ca53b3f3b730b81235abb - Author: Kazuhiro NISHIYAMA - Date: 2019-12-09 14:29:38 +0900 - - Split cygwin-chocolatey cache - - Notes: - Merged: https://github.com/ruby/ruby/pull/2733 - -commit c19e62ddc9d7160d470f76dae823e9546d0a7bf3 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-09 14:06:06 +0900 - - Remove debug print - - Notes: - Merged: https://github.com/ruby/ruby/pull/2733 - -commit 156fb72d7015b420c57b0bd230693f52d8d75b32 - Author: Yusuke Endoh - Date: 2019-12-09 15:22:48 +0900 - - vm_args.c (rb_warn_check): Use iseq_unique_id instead of its pointer - - (This is the second try of 036bc1da6c6c9b0fa9b7f5968d897a9554dd770e.) - - If iseq is GC'ed, the pointer of iseq may be reused, which may hide a - deprecation warning of keyword argument change. - - http://ci.rvm.jp/results/trunk-test1@phosphorus-docker/2474221 - - ``` - 1) Failure: - TestKeywordArguments#test_explicit_super_kwsplat [/tmp/ruby/v2/src/trunk-test1/test/ruby/test_keyword.rb:549]: - --- expected - +++ actual - @@ -1 +1 @@ - -/The keyword argument is passed as the last hash parameter.* for `m'/m - +"" - ``` - - This change ad-hocly adds iseq_unique_id for each iseq, and use it - instead of iseq pointer. This covers the case where caller is GC'ed. - Still, the case where callee is GC'ed, is not covered. - - But anyway, it is very rare that iseq is GC'ed. Even when it occurs, it - just hides some warnings. It's no big deal. - -commit 07664f3aec1b80f6ffe3929258c9a246f0bdcc48 - Author: aycabta - Date: 2019-12-09 14:21:05 +0900 - - Remove workaround encoding modification - -commit a14c01441b12552386c69233b0bcc53d06ed0b92 - Author: aycabta - Date: 2019-12-09 14:20:25 +0900 - - Fix encoding compatibility checking of completion correctly - -commit 3cdb37d9db9b7776f6adf96c70eacc39773718b4 - Author: Yusuke Endoh - Date: 2019-12-09 13:49:24 +0900 - - Revert "vm_args.c (rb_warn_check): Use iseq_unique_id instead of its pointer" - - This reverts commit 036bc1da6c6c9b0fa9b7f5968d897a9554dd770e. - - This caused a failure on iseq_binary mode. - http://ci.rvm.jp/results/trunk-iseq_binary@silicon-docker/2474587 - - Numbering iseqs is not trivial due to dump/load. - -commit 39c7230a7a7a039639d2cb3587c054554a1beb18 - Author: Yusuke Endoh - Date: 2019-12-09 13:49:17 +0900 - - Revert "vm_args.c (rb_warn_check): Use unique_id * 2 instead of unique_id" - - This reverts commit 751a9b32e5a53336768eb878de1827245a3292bf. - -commit 8b07c122b7785fde6b06dd31b09f59a7cbdac2cd - Author: Kazuhiro NISHIYAMA - Date: 2019-12-09 13:46:23 +0900 - - Stop pool threads in test/rinda too - -commit 751a9b32e5a53336768eb878de1827245a3292bf - Author: Yusuke Endoh - Date: 2019-12-09 12:30:00 +0900 - - vm_args.c (rb_warn_check): Use unique_id * 2 instead of unique_id - - The function assumed that the LSB of `callee` was 0. - -commit 036bc1da6c6c9b0fa9b7f5968d897a9554dd770e - Author: Yusuke Endoh - Date: 2019-12-09 12:04:58 +0900 - - vm_args.c (rb_warn_check): Use iseq_unique_id instead of its pointer - - If iseq is GC'ed, the pointer of iseq may be reused, which may hide a - deprecation warning of keyword argument change. - - http://ci.rvm.jp/results/trunk-test1@phosphorus-docker/2474221 - - ``` - 1) Failure: - TestKeywordArguments#test_explicit_super_kwsplat [/tmp/ruby/v2/src/trunk-test1/test/ruby/test_keyword.rb:549]: - --- expected - +++ actual - @@ -1 +1 @@ - -/The keyword argument is passed as the last hash parameter.* for `m'/m - +"" - ``` - - This change ad-hocly adds iseq_unique_id for each iseq, and use it - instead of iseq pointer. This covers the case where caller is GC'ed. - Still, the case where callee is GC'ed, is not covered. - - But anyway, it is very rare that iseq is GC'ed. Even when it occurs, it - just hides some warnings. It's no big deal. - -commit 0e71fbc18e97007ac9a9b242b800f34057f5f287 - Author: git - Date: 2019-12-09 00:13:07 +0900 - - * 2019-12-09 [ci skip] - -commit 963b84a51bf0b80da44ab775d788a911b676a6a9 - Author: Nobuyoshi Nakada - Date: 2019-12-08 23:37:04 +0900 - - Separate steps - - Notes: - Merged: https://github.com/ruby/ruby/pull/2731 - -commit 5e65e65bd935954190a5d481def788524c4ae169 - Author: Nobuyoshi Nakada - Date: 2019-12-08 23:00:46 +0900 - - Set PATH at once - - Notes: - Merged: https://github.com/ruby/ruby/pull/2731 - -commit d00349f99470cfddd522ee1e7fa9a5f6dc126771 - Author: Nobuyoshi Nakada - Date: 2019-12-08 23:09:39 +0900 - - Fixed the checking out source - - Notes: - Merged: https://github.com/ruby/ruby/pull/2731 - -commit 689e74485598d2c023fc2a00fac80b717b6f29b7 - Author: Daisuke Fujimura (fd0) - Date: 2019-12-06 23:53:25 +0900 - - Add .github/workflows/cygwin.yml - - Notes: - Merged: https://github.com/ruby/ruby/pull/2731 - -commit 0d63a2104777e467568a31037a6573e1879870c7 - Author: aycabta - Date: 2019-12-08 18:29:39 +0900 - - Skip completion tests for Editline - -commit c38bc172bee99ff71440a1ebb4c38e6d092e0807 - Author: aycabta - Date: 2019-12-08 08:35:31 +0900 - - Fix encoding of completed list - -commit 2eb674377371d276b9de5ce06a591419f00f7c42 - Author: git - Date: 2019-12-08 08:10:50 +0900 - - * 2019-12-08 [ci skip] - -commit c9b06d4a4e52b6ae705ebb16cafe455671780770 - Author: aycabta - Date: 2019-12-08 08:01:27 +0900 - - Add test_simple_completion for Readline - -commit be13b897ead62debd6d2e7696e5d28a8e8781620 - Author: aycabta - Date: 2019-12-07 22:02:24 +0900 - - Show failed commits only when exists - -commit 0ff84eda4e130ae17abccbb8aa92ad47e83d151d - Author: aycabta - Date: 2019-12-07 20:28:23 +0900 - - [ruby/irb] Version 1.2.0 - - https://github.com/ruby/irb/commit/da6577a88c - -commit 2e595c2d780814cc4d1357c687b44fd7208ff313 - Author: aycabta - Date: 2019-12-07 20:26:01 +0900 - - [ruby/irb] New IRB needs Ruby 2.5 or later - - https://github.com/ruby/irb/commit/4be3158358 - -commit ad6837dd609654b02885199b25f7d79b1122b64a - Author: aycabta - Date: 2019-12-07 20:21:08 +0900 - - [ruby/irb] Revert "Reidline mode needs Reline what needs String#grapheme_clusters" - - This reverts commit 2b0b19b87c60d2cdb329979acbb96e12a1f940e7. - - New IRB parser needs new Ripper what has lex_state too. The new Ripper is - adopted by Ruby 2.5 or later. - - https://github.com/ruby/irb/commit/9ab6e35a2c - -commit c2afddccb36c10ac0eb530bfc3b38765882126d8 - Author: aycabta - Date: 2019-12-07 19:51:03 +0900 - - [ruby/irb] Reidline mode needs Reline what needs String#grapheme_clusters - - https://github.com/ruby/irb/commit/2b0b19b87c - -commit e72ffc55ba3cc9bf20c892d2d090a77f40c49ada - Author: aycabta - Date: 2019-12-07 12:11:55 +0900 - - [ruby/reline] Support Ruby 2.5 or later for String#grapheme_clusters - - https://github.com/ruby/reline/commit/33e8c8f15b - -commit ebbc77836b74a74d7c07a9b91fff886219956e3c - Author: Yusuke Endoh - Date: 2019-12-07 13:15:47 +0900 - - test/ruby/test_file_exhaustive.rb: shorten the name of temporary dir - - ``` - 1) Error: - TestFileExhaustive#test_socket_p: - ArgumentError: too long unix socket path (109bytes given but 108bytes max) - /export/home/users/chkbuild/cb-sunc/tmp/build/20191207T024036Z/ruby/test/ruby/test_file_exhaustive.rb:155:in `initialize' - ``` - -commit dcf89b20d7b79b51e268ea3ffcfdc0829edf7643 - Author: git - Date: 2019-12-07 01:28:20 +0900 - - * 2019-12-07 [ci skip] - -commit 544431e028e9d678f2989c35876a05c53f07e0ec - Author: Namrata Bhave - Date: 2019-12-07 01:27:58 +0900 - - Adding s390x support (#2727) - -commit 2f6a8baac6a84935cef1f10adbba2f47df4a2346 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-06 15:56:14 +0900 - - Test interfaces include localhost - - When interfaces do not include localhost, - some other tests may fail. - -commit 2c8d186c6e4fd03ea57466fa6dce6bad40d09401 - Author: Aaron Patterson - Date: 2019-10-12 09:06:41 +0900 - - Introduce an "Inline IVAR cache" struct - - This commit introduces an "inline ivar cache" struct. The reason we - need this is so compaction can differentiate from an ivar cache and a - regular inline cache. Regular inline caches contain references to - `VALUE` and ivar caches just contain references to the ivar index. With - this new struct we can easily update references for inline caches (but - not inline var caches as they just contain an int) - -commit 38b7f947a2c76aad29a2e42f3bd0848854d96519 - Author: git - Date: 2019-12-06 00:13:22 +0900 - - * 2019-12-06 [ci skip] - -commit 693cba1a136aafb0faa25f93434a2e8dbad320de - Author: Kazuhiro NISHIYAMA - Date: 2019-12-06 00:11:11 +0900 - - Detect started threads when require only - -commit 173b864668777ef157a0c82b6e6f1a6aa0f06ac9 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-05 23:56:14 +0900 - - Do not start thread when `require 'drb/drb'` only - -commit 6477d98e49dbe04deb03caee1a58a34c3b79d4e4 - Author: Yusuke Endoh - Date: 2019-12-05 23:46:42 +0900 - - test/lib/jit_support.rb: Update the regexp for icc - - MJIT_CC is always an absolute path. - -commit d43b9eb22de1b1cd8de09a161cc836413cc158a1 - Author: Yusuke Endoh - Date: 2019-12-05 22:37:08 +0900 - - lib/drb/drb.rb: suppress warning: instance variable @pool_proxy not initialized - -commit f4d9daf2b6f23af08296c7ccb770e1de1bc723bd - Author: Yusuke Endoh - Date: 2019-12-05 22:24:58 +0900 - - coroutine/ucontext/Context.c: define __EXTENSIONS__ explicitly - - instead of ruby/config.h, per samuel's request. - - https://github.com/ruby/ruby/commit/dbfd4b780e3914a3f27e92c2248254452bf0fd6b#diff-7fd78c3cc8a19b7e0637502983ec26ff - -commit c3abbc1b2f52015dc839fd96545380dbc11c77a9 - Author: Nobuyoshi Nakada - Date: 2019-12-05 16:18:22 +0900 - - ext/openssl/extconf.rb: check with -Werror=deprecated-declarations - - This reverts commit 0d7d8b2989e1738dd902d354cc41186899e6b71e, - but restore `$warnflags` without the flag, to get rid of using - deprecated functions. - -commit 4c88107c54b06c1a3e89970eb243c8ac887d84e1 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-05 18:14:31 +0900 - - Fix `warning: already initialized constant DidYouMean::VERSION` - - ``` - .../gems/did_you_mean-1.3.1/lib/did_you_mean/version.rb:2: warning: already initialized constant DidYouMean::VERSION - .../lib/did_you_mean/version.rb:2: warning: previous definition of VERSION was here - ``` - -commit 75b644350a80bc31449b7cee741d309643dc27e1 - Author: Nobuyoshi Nakada - Date: 2019-12-05 17:57:05 +0900 - - ext/psych/extconf.rb: braced VPATH is for nmake only - -commit 0bca34ddaaf15caa852007f401707c1785aa8ed6 - Author: Yusuke Endoh - Date: 2019-12-05 16:55:31 +0900 - - test/io/console/test_io_console.rb: add a memo for the mysterious hack - -commit 264d5aff5afecb08b0a2ccafedc0a43de4f8d16a - Author: aycabta - Date: 2019-12-05 16:28:54 +0900 - - Change encoding of completion list...for more tests - -commit ee579200082329db66e153c465cb8332e55bacb2 - Author: Koichi Sasada - Date: 2019-12-05 15:01:37 +0900 - - move an interrupt point. - - `args_ptr` can be corrupted by interrupt handlers. - Pointed by nagachika . - -commit b40bb27e3594bbc2e9c9ac00dfa5612ebae3151b - Author: Yusuke Endoh - Date: 2019-12-05 15:38:29 +0900 - - test/io/console/test_io_console.rb: Try the hack for Solaris - - I'm not entirely sure why, but test_set_winsize_console gets stuck on - Solaris (and if I recall, macOS). I found a hack for FreeBSD, so I want - to give it a try on Solaris too. - -commit fa1db8f938c083ce1416f999fe8b3cf33f9f18f1 - Author: Takashi Kokubun - Date: 2019-12-05 15:25:11 +0900 - - Add missing dependency - - https://travis-ci.org/ruby/ruby/jobs/620972117 - -commit 72cff5f3af47ec8d694feef97516089e86d89673 - Author: Takashi Kokubun - Date: 2019-12-05 15:18:42 +0900 - - MJIT_CC and MJIT_SUPPORT are not a prefix - - 0b19e15a1239bff9ae854f522f954206ec910cf8 was also for "MJIT_SUPPORT" - too. - -commit 5fbb4555b427909aed4fe2376c4c583849c1d51c - Author: Takashi Kokubun - Date: 2019-12-05 15:16:07 +0900 - - Prefer using MJIT_CC for JIT support check - - because Solaris might have CC=cc and we'd like to check full path - MJIT_CC=/opt/developerstudio12.5/bin/cc instead. - -commit 199bd851e40438380b2e0f57662a212200e3ba1a - Author: Yusuke Endoh - Date: 2019-12-05 14:51:07 +0900 - - parse.y: suppress "set but not used" warnings on ripper.y - -commit edb80dfe3e6086fb9d5d905a40cdd6ec61a2e1ee - Author: Koichi Sasada - Date: 2019-12-05 14:39:03 +0900 - - add additional CF info for CI env - - Introduce new RUBY_DEBUG option 'ci' to inform Ruby interpreter - that an interpreter is running on CI environment. - - With this option, `rb_bug()` shows more information includes - method entry information, local variables information for each - control frame. - -commit c88afd532895a8527f7c9fffb2c635805d01f626 - Author: Koichi Sasada - Date: 2019-12-05 14:38:46 +0900 - - fix parameter - -commit 0d7d8b2989e1738dd902d354cc41186899e6b71e - Author: Yusuke Endoh - Date: 2019-12-05 14:41:38 +0900 - - ext/openssl/extconf.rb: do not use -Werror=deprecated-declarations - - It fails to build on Solaris: - - ``` - ossl_cipher.c: 関数 ‘ossl_cipher_init’ 内: - ossl_cipher.c:228:2: エラー: ‘EVP_md5’ is deprecated [-Werror=deprecated-declarations] - 228 | EVP_BytesToKey(EVP_CIPHER_CTX_cipher(ctx), EVP_md5(), iv, - | ^~~~~~~~~~~~~~ - In file included from /usr/include/openssl/x509.h:73, - from /usr/include/openssl/x509v3.h:63, - from ossl.h:23, - from ossl_cipher.c:10: - /usr/include/openssl/evp.h:732:26: 備考: ã“ã“ã§å®£è¨€ã•ã‚Œã¦ã„ã¾ã™ - 732 | DEPRECATED const EVP_MD *EVP_md5(void); - | ^~~~~~~ - ``` - - I agree that `-Werror=` is a good habit, but adding it by default is too - aggressive. - -commit c0d118f41a3a66ab76a553f184efe431524b952d - Author: Jun Aruga - Date: 2019-12-05 14:17:16 +0900 - - Fix "cannot find the function: strcpy()" error on arm32 on Travis CI. (#2686) - - This issue happened when `libc.so` and `libm.so` path were not found - and `ldd ruby` command also failed to print the shared dependencies - in `test/fiddle/helper.rb`. - - See https://travis-ci.org/ruby/ruby/jobs/611483288#L3018 - /home/travis/build/ruby/ruby/build/.ext/common/fiddle/import.rb:299:in `import_function': cannot find the function: strcpy() (Fiddle::DLError) - - * Set libc6:armhf as a installing dependency explicitly. - * Remove arm32 from allow_failures. - -commit ed5d032ea33a465fd7152a236a4aca0ff5653bf3 - Author: Antonio Terceiro - Date: 2019-11-26 09:25:53 +0900 - - debug.rb: expand filenames in breakpoints - - When debugging some local code, specifying a breakpoint to a local - filename does not work, i.e. - - break lib/foo.rb:10 - - Expanding the filename makes it work. FWIW byebug has the same behavior. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2694 - -commit 20031f8b74a224bed88bfd149d59d6176c4f58e2 - Author: aycabta - Date: 2019-12-05 13:06:08 +0900 - - Change encoding of completion list - -commit df76f2c577b6567b617be2df9451123cc450d1cc - Author: Alan Wu - Date: 2019-12-05 11:02:21 +0900 - - Make TracePoint.stat a singleton method again (#2726) - - [Bug #16399] - - Notes: - Merged-By: XrXr - -commit e4db0443bcfc94f9183e8ea72fb4ab560aa005bf - Author: Jeremy Evans - Date: 2019-07-23 11:56:02 +0900 - - Make rb_eval_string_wrap specify a cref so constant setting works correctly - - Fixes [Bug #10466] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2722 - -commit 18d3b5a93a2d52412f8f563d58db682b41d5c98c - Author: Yuki Nishijima - Date: 2019-12-05 09:55:01 +0900 - - Do not attempt to call methods on the receiver if it is a basic object - -commit 88ee375dd6c93523bd5d8f9517e49215b9d8cf67 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-05 09:43:45 +0900 - - Revert "Add debug option to check ci failures on solaris" - - This reverts commit f289e3994bbc6560e2e4e5905b52c35c829c972d. - -commit fbf10ed5b3f37b7cd9950ac8d1f1c81255525d36 - Author: git - Date: 2019-12-05 09:03:49 +0900 - - * 2019-12-05 [ci skip] - -commit e3587ed8498dcf7a3a8178030f7ae66cd0719c57 - Author: aycabta - Date: 2019-12-04 22:32:12 +0900 - - Support disable-completion - -commit ad8fbf444abdf1480d87c95b2868741f98eb953f - Author: aycabta - Date: 2019-12-04 22:26:40 +0900 - - Fix variable catch - -commit fb11e6089dbe9d995510977def038a21882bcffe - Author: Nobuyoshi Nakada - Date: 2019-12-04 21:52:29 +0900 - - [DOC] Added File::FNM_SYSCASE example [Bug #16391] [ci skip] - -commit dbfd4b780e3914a3f27e92c2248254452bf0fd6b - Author: Yusuke Endoh - Date: 2019-12-04 20:59:39 +0900 - - coroutine/ucontext/Context.c: Include "ruby/config.h" for Solaris - - getcontext, makecontext, and swapcontext seem to be available only when - `__EXTENSION__` is defined on Solaris. - -commit a0bc0e1ba15e83c72426ac243ea96e6497c49859 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-04 18:43:19 +0900 - - Fix thread leak in drb - - Notes: - Merged: https://github.com/ruby/ruby/pull/2724 - -commit 00bbdf4451d0e66f0f7823e77c47ac310614c1c3 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-12-04 15:31:51 +0900 - - implement Range#count - - As matz requested in [Bug #16366]. - -commit c6e3db0c66312af1e932c21006437419efa9ac75 - Author: Koichi Sasada - Date: 2019-12-04 13:36:41 +0900 - - new_cond before mon_initialize - - MonitorMixin#new_cond can be called before mon_initialize, so we - need to initialize `@monitor` before it. - - https://bugs.ruby-lang.org/issues/16255#note-4 - -commit f9e5c74cd24025a5aa19e318e8fecabf207f1b7b - Author: Yusuke Endoh - Date: 2019-12-04 10:33:35 +0900 - - compile.c: stop wrong peephole optimization when covearge is enabled - - jump-jump optimization ignores the event flags of the jump instruction - being skipped, which leads to overlook of line events. - - This changeset stops the wrong optimization when coverage measurement is - neabled and when the jump instruction has any event flag. - - Note that this issue is not only for coverage but also for TracePoint, - and this change does not fix TracePoint. - However, fixing it fundamentally is tough (which requires revamp of - the compiler). This issue is critical in terms of coverage measurement, - but minor for TracePoint (ko1 said), so we here choose a stopgap - measurement. - - [Bug #15980] [Bug #16397] - - Note for backporters: this changeset can be viewed by `git diff -w`. - -commit 5a404efd29d255402e30f4f23a09d4e5398600b8 - Author: Nobuyoshi Nakada - Date: 2019-12-04 10:06:54 +0900 - - [ruby/io-console] Fixed `intr: false` mode on Windows - - https://github.com/ruby/io-console/commit/4c172c01aa - -commit 447d583536274a2489efc8792653ad35d6f7128a - Author: Jeremy Evans - Date: 2019-08-28 03:48:50 +0900 - - Silence incorrect assigned but unused variable warnings in ripper - - To only emit the warnings in correct cases would require tracking - local variable usage in ripper, which ripper currently does not do. - - Fixes [Bug #15188] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2719 - -commit a91637c516779d9ecee5f323e211f0ed71eb06ad - Author: Jeremy Evans - Date: 2019-10-03 07:20:10 +0900 - - Make {Method,UnboundMethod}#super_method handle clone/bind/unbind - - This wasn't working previously because the iclass entry wasn't - being copied, and without an iclass entry, super_method returns - nil. - - Fixes [Bug #15629] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2723 - -commit f9754f0ea08e0d4fb28681a86cbc6ec2d884dba5 - Author: Yusuke Endoh - Date: 2019-12-04 08:22:48 +0900 - - compile.c: trivial refactoring - - Use `for` instead of `while` to make it explicit that it is a traverse - of bytecode. - -commit 8852fa876039ed177fd5e867f36177d8a9ff411c - Author: NARUSE, Yui - Date: 2019-12-04 01:26:29 +0900 - - Revert "Regexp#match{?} with nil raises TypeError as String, Symbol (#1506)" - - This reverts commit 2a22a6b2d8465934e75520a7fdcf522d50890caf. - Revert [Feature #13083] - -commit 08074eb71229b4c9f669f7bfb215bbb43525bfc0 - Author: NARUSE, Yui - Date: 2019-12-04 01:26:28 +0900 - - Revert "Revert nil error and adding deprecation message" - - This reverts commit 452bee3ee8d68059fabd9b1c7a75661b14e3933e. - -commit a705f6472c3e34422776d886bbc9f98676d8c0eb - Author: NARUSE, Yui - Date: 2019-12-04 01:26:27 +0900 - - Revert "Improve warning message" - - This reverts commit 31110d820cc1258cbc84b46ecc65b254c7d5529a. - -commit 34a66b1f36e9a065cf8433598b3fce03ce2c711e - Author: NARUSE, Yui - Date: 2019-12-04 01:26:24 +0900 - - Revert "Fix warnings in Regexp#{match,match?} specs" - - This reverts commit 782d1b8fb0a039cedef9ad9c94f432dad51901e6. - -commit a029b54ec716812ade37fef1f857c49f821a8cc8 - Author: Jeremy Evans - Date: 2019-08-29 08:41:39 +0900 - - Make Enumerator::Chain#each treat lambdas as lambda - - Previously, lambdas were converted to procs because of how - rb_block_call works. Switch to rb_funcall_with_block, which - handles procs as procs and lambdas as lambdas. - - Fixes [Bug #15613] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2720 - -commit 47c97e1e843159c3c4d57f8c5e22daea57c3ffe1 - Author: Jeremy Evans - Date: 2019-08-12 12:53:37 +0900 - - Do not lose existing constant visibility when autoloading - - This copies the private/deprecate constant visibility across the - autoload. It still is backwards compatible with setting the - private/deprecate constant visibility in the autoloaded file. - However, if you explicitly set public constant in the autoloaded - file, that will be reset after the autoload. - - Fixes [Bug #11055] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2716 - -commit b96d559c696c5141bdb6717442818f1206ff9d2e - Author: git - Date: 2019-12-04 00:27:58 +0900 - - * 2019-12-04 [ci skip] - -commit 5c2c3966851ed074eb468ad36d8d75e53b8eab6c - Author: Jeremy Evans - Date: 2019-08-26 04:09:19 +0900 - - Check interrupts before starting thread - - Fixes a hang when Thread.new calls Thread.new in a loop. - - Fixes [Bug #13688] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2715 - -commit 7f2cd2ae6fea76ff3a2b95b69e6e2f749e8a249f - Author: KOSAKI Motohiro - Date: 2019-12-03 19:50:16 +0900 - - fix typo - -commit a1f98cd4c1d55efe4998ecd3d94508634baefc23 - Author: Yusuke Endoh - Date: 2019-12-03 17:56:50 +0900 - - vm_args.c: make the keyword deprecation message helpful - - ``` - $ ./miniruby -e 'def foo(kw: 1); end; h = {kw: 1}; foo(h)' - -e:1: warning: The last argument is used as the keyword parameter - -e:1: warning: for `foo' defined here; maybe ** should be added to the call? - ``` - -commit 409e4ab740de3852c3667217bcf41b55040f638f - Author: Yusuke Endoh - Date: 2019-12-03 17:05:07 +0900 - - tool/lib/test/unit/parallel.rb: fail explicitly when failing to get io - - `(ulimit -n 30; make test-tool)` fails with unexplicit message: - "undefined method `write' for nil:NilClass" due to lack of stdout. - - This change makes it explicit. [Bug #5577] - -commit e42d9d8df87f58b9bfa65647249822df25851375 - Author: Nobuyoshi Nakada - Date: 2019-12-03 14:51:14 +0900 - - Fixed the inverted condition - -commit 9165fcdfa309052a2adc3c6100ab24204de6c2d1 - Author: Nobuyoshi Nakada - Date: 2019-12-03 14:46:49 +0900 - - Wrap statements in AS_IF properly - -commit 027e847cd2540553c9ddcf1b39028c43258a3fb4 - Author: aycabta - Date: 2019-12-03 13:02:01 +0900 - - Fix auto-indent behavior correctly - -commit 14a17063a11a01d518b4bbaf0eb967330aec3984 - Author: Nobuyoshi Nakada - Date: 2019-12-03 08:12:57 +0900 - - Fixed stack overflow [Bug #16382] - - Get rid of infinite recursion in expanding a load path to the real - path while loading a transcoder. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2714 - -commit 8bddf1bc9bdd1db7ce2e3fec15f2f06ff355b0a7 - Author: Yusuke Endoh - Date: 2019-12-03 08:02:38 +0900 - - mjit.c: fix a mismatch of malloc'ed type - - Coverity Scan found this issue. - -commit 424ad9a49360be56244609c02678e8f055d92073 - Author: Benoit Daloze - Date: 2019-12-03 05:23:10 +0900 - - Make more attempts to check for the precision of Process.times - - * Process.clock_getres specs use 10_000 but that's quite slow for - the Process.times spec. - -commit c688487fae22e0f73b4e2a9ea5749cb224c25e48 - Author: git - Date: 2019-12-03 01:41:22 +0900 - - * 2019-12-03 [ci skip] - -commit a92560132b1bff6a01782cfeacd62756b4b34d21 - Author: aycabta - Date: 2019-12-03 01:17:07 +0900 - - Support incremental search by last determined word - - In the incremental search by C-r, search word is saved when it's determined. In - the next incremental search by C-r, if a user presses C-r again with the empty - search word, the determined previous search word is used to search. - -commit bce38f706e9c434d8fd7c0e2e14bb4acdd085777 - Author: aycabta - Date: 2019-12-02 09:15:07 +0900 - - The C-r in vi command mode is also incremental search - -commit a47d6c256ff684392f00516a917735a14aec64b0 - Author: Takashi Kokubun - Date: 2019-12-02 17:12:29 +0900 - - Fix random failure on getusage-missing environments - - `* 1e6` makes a spurious result about floating point number's precision. - - ``` - irb(main)[01:0]> 16.028 - => 16.028 - irb(main)[02:0]> (16.028 * 1e6) - => 16027999.999999998 - ``` - -commit 1a88adcd75d92cb36ef5b1d5f4aeb40e6fe4dcb7 - Author: Kazuhiro NISHIYAMA - Date: 2019-12-02 15:21:15 +0900 - - Fix Leaked file descriptor in test/did_you_mean - - https://github.com/ruby/ruby/commit/de74d2c3b0005048a2c4433bde68b9be10c86f01/checks?check_suite_id=336910877#step:19:131 - ``` - Leaked file descriptor: NameErrorExtensionTest#test_correctable_error_objects_are_dumpable: 7 : # - ``` - - Notes: - Merged: https://github.com/ruby/ruby/pull/2712 - -commit 185f7608737a550a0891a7fc5a6a4ee32721bce3 - Author: Takashi Kokubun - Date: 2019-12-02 16:23:40 +0900 - - Debug random failure of ruby-spec on ci.rvm.jp - -commit 9afaf139f232e8b2c697d33e984945464744def1 - Author: Nobuyoshi Nakada - Date: 2019-12-02 14:15:42 +0900 - - Revert "builtin_binary.inc needs miniruby itself for RubyVM.each_builtin" - - This reverts commit 2615030c521afc822c66a7e139ccba3d2365ab56, - which doesn't work when cross compiling, except for mingw. - -commit 2615030c521afc822c66a7e139ccba3d2365ab56 - Author: Nobuyoshi Nakada - Date: 2019-12-02 14:03:46 +0900 - - builtin_binary.inc needs miniruby itself for RubyVM.each_builtin - -commit a7b9f085ff952fcb18f82de39b3bf9ab7e5ba3e7 - Author: Nobuyoshi Nakada - Date: 2019-12-02 13:20:00 +0900 - - Disable _FORTIFY_SOURCE on mingw for now - - It causes a link error due to some `__*_chk` functions on mingw. - -commit b1c92363a74b0e649a685ae47ae400fbaab7b29d - Author: Nobuyoshi Nakada - Date: 2019-12-02 13:16:55 +0900 - - Wait for the main thread to start reading by Queue - - Otherwise, the written data to pty before the reading started may - be just lost. - -commit de74d2c3b0005048a2c4433bde68b9be10c86f01 - Author: Takashi Kokubun - Date: 2019-12-02 10:32:50 +0900 - - Simplify variable declaration by C99 - -commit 103b04128f4e40b87bb9c7fb2916d2a800bfd94f - Author: aycabta - Date: 2019-12-02 04:17:47 +0900 - - Support incremental search again by C-r in incremental search - -commit b3ea0980db87404c2b7763a3fdbe898c3812843d - Author: Takashi Kokubun - Date: 2019-12-02 03:53:58 +0900 - - Check MJIT support in one place - - to fix test failure on trunk-no-mjit - https://gist.github.com/ko1/32ab982ffd7555988818773c08f97123 - -commit 6bc8b4d8ea6cb8865225c0afcf1abd9e4b725376 - Author: Takashi Kokubun - Date: 2019-12-02 03:51:04 +0900 - - Skip --jit-debug= test on mswin - - it fails like - https://ci.appveyor.com/project/ruby/ruby/builds/29235837/job/v0apdjj4qx8afars - -commit c7f05310a248e44ef9747a159a0e9bc289bb7090 - Author: aycabta - Date: 2019-12-02 03:30:38 +0900 - - Process Backspace key in incremental search correctly - -commit e15b0313a78a6f381720cf362a1a94bda49f62ff - Author: aycabta - Date: 2019-12-02 03:05:10 +0900 - - Search history to back in the middle of histories - -commit 4d7a6d04b2c71aabb9d6e619f4405887806a5be8 - Author: KOSAKI Motohiro - Date: 2019-12-02 01:21:05 +0900 - - Avoid unnecessary tzset() call - - Akatsuki reported ENV['TZ'] = 'UTC' improved 7x-8x faster on following code. - t = Time.now; 100000.times { Time.new(2019) }; Time.now - t - https://hackerslab.aktsk.jp/2019/12/01/141551 - - commit 4bc1669127(reduce tzset) dramatically improved this situation. But still, - TZ=UTC is faster than default. - - This patch removs unnecessary tzset() call completely. - - Performance check - ---------------------- - test program: t = Time.now; 100000.times { Time.new(2019) }; Time.now - t - before: 0.387sec - before(w/ TZ): 0.197sec - after: 0.162sec - after(w/ TZ): 0.165sec - - OK. Now, Time creation 2x faster *and* TZ=UTC doesn't improve anything. - We can forget this hack completely. :) - - Side note: - This patch slightly changes Time.new(t) behavior implicitly. Before this patch, it might changes - default timezone implicitly. But after this patch, it doesn't. You need to reset TZ - (I mean ENV['TZ'] = nil) explicitly. - But I don't think this is big impact. Don't try to change /etc/localtime on runtime. - - Side note2: following test might be useful for testing "ENV['TZ'] = nil". - ----------------------------------------- - % cat <<'End' | sudo sh -s - rm -f /etc/localtime-; cp -a /etc/localtime /etc/localtime- - rm /etc/localtime; ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime - ./ruby -e ' - p Time.new(2000).zone # JST - File.unlink("/etc/localtime"); File.symlink("/usr/share/zoneinfo/America/Los_Angeles", "/etc/localtime") - p Time.new(2000).zone # JST (ruby does not follow /etc/localtime modification automatically) - ENV["TZ"] = nil - p Time.new(2000).zone # PST (ruby detect /etc/localtime modification) - ' - rm /etc/localtime; cp -a /etc/localtime- /etc/localtime; rm /etc/localtime- - End - -commit 43811cc3b36739816788cbbac7a49b9bbf756293 - Author: git - Date: 2019-12-02 00:05:20 +0900 - - * 2019-12-02 [ci skip] - -commit 7f0d51704a5cb789c16a6c05db455469f0b2601d - Author: aycabta - Date: 2019-12-02 00:03:59 +0900 - - Remove obsolete code - -commit 8cb3f29abf9290838bdc3b9904868c78752427e8 - Author: aycabta - Date: 2019-12-01 23:53:59 +0900 - - The ed_search_prev_history should always search to backward - -commit f1cfc7da180a8cf26f758fbe553e6653e4a4dc53 - Author: aycabta - Date: 2019-12-01 22:11:59 +0900 - - Reline::HISTORY can take Range object - -commit 617a3735aedc12fe82b6806d6d3a37c3f977fef1 - Author: Benoit Daloze - Date: 2019-12-01 22:11:42 +0900 - - Update to ruby/spec@dcf4955 - -commit 60d362b0bb0fb56bd3ef61c93f71bff997ccb824 - Author: Benoit Daloze - Date: 2019-12-01 22:11:40 +0900 - - Update to ruby/mspec@aa28e95 - -commit ab516e263c06fbd755d4805ad529c32b1b8292b5 - Author: Nobuyoshi Nakada - Date: 2019-12-01 21:14:58 +0900 - - [ruby/spec] Fix failures with LC_ALL=C - - https://github.com/ruby/spec/commit/51047687c0 - https://github.com/ruby/spec/commit/2b87b467cc - -commit 4e03a7298b3a99de9c57f9a4934d38445cad1b10 - Author: Nobuyoshi Nakada - Date: 2019-12-01 20:26:28 +0900 - - Constified mjit_init - -commit cb760f36aae42a63738394f170444b6ae4405b82 - Author: Nobuyoshi Nakada - Date: 2019-12-01 19:29:04 +0900 - - Constified - -commit 91af5542b503054ea059b6c4faa5cd821784774a - Author: Takashi Kokubun - Date: 2019-12-01 19:00:08 +0900 - - Fix a mistake excluding NULL in the end - -commit 8a677a6e80b3b7e1f52073b362083a78eb87397f - Author: Takashi Kokubun - Date: 2019-12-01 18:35:30 +0900 - - Workaround missing strndup on Windows - - https://ci.appveyor.com/project/ruby/ruby/builds/29230976/job/c910t37313edb97k - -commit 3e2753ad2e0b643f5c731fb162f5805d82435032 - Author: Takashi Kokubun - Date: 2019-12-01 18:25:54 +0900 - - Use build dir for testing --jit-debug - - to fix failure like https://github.com/ruby/ruby/runs/327745536 - -commit a19d625e667024fe27dcee04dd748e914bc24762 - Author: Takashi Kokubun - Date: 2019-12-01 17:56:27 +0900 - - Allow specifying arbitrary MJIT flags by --jit-debug - - This is a secret feature for me. It's only for testing and any behavior - with this flag override is unsupported. - - I needed this because I sometimes want to add debug options but do not - want to disable optimizations, for using Linux perf. - -commit bdc62dfc8ecffd27dd5ad6756cce88eac5c993f5 - Author: Nobuyoshi Nakada - Date: 2019-12-01 14:38:33 +0900 - - Fixed type of an index variable - -commit 9914d6e992a69587e6d43ba7eaa6cdda9f178f8e - Author: Yuki Nishijima - Date: 2019-12-01 13:26:09 +0900 - - Relax test strictness for error message from KeyError - -commit cc7455dd1e98e297dbea2fd92e491bd36f1b473e - Author: Yuki Nishijima - Date: 2019-12-01 12:29:02 +0900 - - Relax test requirements for DYM's verbose formatter - -commit 56faa13a1c5261a0d046a4c0203e88fccfafae17 - Author: Koichi Sasada - Date: 2019-12-01 12:24:50 +0900 - - remove spaces to pass a test. - - 23d7f4c5e1ce164e78d77de694dccc0c41f6de3d breaks a test which expect - to match error message. To avoid this failure, use #strip for expect - and actual results. - -commit 23d7f4c5e1ce164e78d77de694dccc0c41f6de3d - Author: git - Date: 2019-12-01 11:08:39 +0900 - - * remove trailing spaces. [ci skip] - -commit 0fef526606c72e7d2a3c83aebd9204da34016d96 - Author: Yuki Nishijima - Date: 2019-11-30 11:40:07 +0900 - - Do not call 'gem "did_you_mean"' for now - - This will slow down the time that the +require+ method takes to load DYM, - but this has caused a build failure in a certain situation: - - https://ci.appveyor.com/project/ruby/ruby/builds/29214253/job/r9u9c8p95tnlftt3#L24965 - - which is reported as a separate bug: - - https://bugs.ruby-lang.org/issues/16382?next_issue_id=16381 - - For now this commit should fix the builds, but we should come back and - add back the 'gem' call. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2689 - -commit 171803d5d34feb1b4244ca81b9db0a7bc2171c85 - Author: Kevin Deisz - Date: 2019-10-29 23:08:37 +0900 - - Promote did_you_mean to default gem - - At the moment, there are some problems with regard to bundler + did_you_mean because of did_you_mean being a bundled gem. Since the vendored version of thor inside bundler and ruby itself explicitly requires did_you_mean, it can become difficult to load it when using Bundler.setup. See this issue: https://github.com/yuki24/did_you_mean/issues/117#issuecomment-482733159 for more details. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2689 - -commit a2fc6a51dd2e1a153559038795e1e2509f9c6a94 - Author: David Rodríguez - Date: 2019-11-30 22:03:12 +0900 - - [ruby/fileutils] Fix test failure under ruby 2.4 - - `Exception#full_message` is only defined on ruby 2.5.0 and above. - - https://github.com/ruby/fileutils/commit/a8968f41ed - -commit fa0f3eff228bb26de6d5b0e1238b1f358165dbd0 - Author: David Rodríguez - Date: 2019-11-30 22:01:18 +0900 - - [ruby/fileutils] Fix error printing test failure - - `exception_details` is not defined anywhere. - - This commit fixes the following test crash in ruby 2.4 - - ``` - Error: test_assert_output_lines(TestFileUtils): NoMethodError: undefined method `exception_details' for # - ``` - - And replaces it with an actual test failure: - - ``` - [Test::Unit::CoreAssertions::MiniTest::Assertion] exception expected, not # - Did you mean? message>. - ``` - - https://github.com/ruby/fileutils/commit/2f38ba6e82 - -commit 5b1f7f26b4ff3b05e1c184ae87154a323b1be915 - Author: Takashi Kokubun - Date: 2019-12-01 06:29:00 +0900 - - Skip if getrusage is not supported - - 1243255c3a36433041012b6107a5ac48658a0895 broke ci.rvm.jp tests like - http://ci.rvm.jp/results/trunk_clang_39@silicon-docker/2445098. - - 253232c028a5565dbeecc05fab5e81b35ab58bcc works only if getrusage is supported. - -commit 1243255c3a36433041012b6107a5ac48658a0895 - Author: Benoit Daloze - Date: 2019-12-01 05:26:52 +0900 - - Update to ruby/spec@4eec3dc - -commit ab8345271eb87ff155d8bd5f22f53a4cf2902c26 - Author: Benoit Daloze - Date: 2019-12-01 05:26:49 +0900 - - Update to ruby/mspec@a401f63 - -commit 93a512414cbe3713f478038f6d4f5fe81c4eb62a - Author: git - Date: 2019-12-01 02:18:45 +0900 - - * 2019-12-01 [ci skip] - -commit 5e0479f26afe1505afd9014ea96a206a88845828 - Author: Nobuyoshi Nakada - Date: 2019-10-01 12:23:25 +0900 - - ENV.update should not call block on existing keys - - [Bug #16192] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2512 - -commit b94d06096b8f2a375719ce09370e004fcb277b25 - Author: Hiroshi SHIBATA - Date: 2019-11-30 18:20:02 +0900 - - [ruby/zlib] Bump version to 1.1.0 - - https://github.com/ruby/zlib/commit/5af77c1ee8 - -commit 7ebcee6b7634889f0bd92aaedf079845065ac797 - Author: Hiroshi SHIBATA - Date: 2019-11-30 18:13:16 +0900 - - [ruby/gdbm] Bump version to 2.1.0 - - https://github.com/ruby/gdbm/commit/ffb2b063a3 - -commit 56567c76487d42f12283ecf074d45adae96ca5f0 - Author: Hiroshi SHIBATA - Date: 2019-11-30 18:03:57 +0900 - - [ruby/etc] Bump version to 1.1.0 - - https://github.com/ruby/etc/commit/78987ce56a - -commit 08c866d5281777e1f8f8503f7ebdec9aee62ed63 - Author: Hiroshi SHIBATA - Date: 2019-11-30 18:05:51 +0900 - - [ruby/fileutils] Bump version to 1.4.1 - - https://github.com/ruby/fileutils/commit/da15e3ce06 - -commit 06b9b78e21f5da5f348a932c3e7f21468674e4f1 - Author: Hiroshi SHIBATA - Date: 2019-11-30 17:54:44 +0900 - - [ruby/dbm] Bump version to 1.1.0 - - https://github.com/ruby/dbm/commit/163078359d - -commit 32e547954fbbcbdd6f4468bf3be9e7eaa5d32f0f - Author: Hiroshi SHIBATA - Date: 2019-11-30 17:58:39 +0900 - - Revert "[ruby/fileutils] Fix #install with "X" mode option" - - This reverts commit eab88d20eaa925d5e61a2a65820a099b46ccf3f8. - - The some CI was broken with this. - -commit 5e9f08647cead8b7fa303a5da88c5e96035f3497 - Author: Nobuyoshi Nakada - Date: 2019-08-28 21:58:25 +0900 - - [ruby/webrick] Check the feature by itself, instead of the version number - - https://github.com/ruby/webrick/commit/79d7922de9 - -commit a98632d5c20e41e05074384b8f760af407e6d52a - Author: Jeremy Evans - Date: 2019-08-12 04:57:11 +0900 - - [ruby/webrick] Enabled chunked encoding if Transfer-Encoding: chunked header is set - - Patch from Leonard Garvey. - - Fixes Ruby Bug 9986. - - https://github.com/ruby/webrick/commit/8cff7f3995 - -commit edfbffb241a894eece57155a22a89637b33cfe58 - Author: Hiroshi SHIBATA - Date: 2019-11-30 17:39:58 +0900 - - [ruby/webrick] Bump version to 1.6.0 - - https://github.com/ruby/webrick/commit/c5635fa5e2 - -commit c75100d00401c32b3245ce8da5b8a045976216ca - Author: Jeremy Evans - Date: 2019-08-27 13:41:27 +0900 - - [ruby/webrick] Allow WEBrick::HTTPServlet::CGIHandler :CGIInterpreter option to be array - - This way you don't need to escape each entry. - - Implements Ruby Feature 15170. - - https://github.com/ruby/webrick/commit/d8086e600c - -commit f7cf5416e471cd34153058952063da3457468e58 - Author: zverok - Date: 2019-10-26 19:27:17 +0900 - - [ruby/webrick] Document HTTPResponse#body callable option - - https://github.com/ruby/webrick/commit/d51836d03d - -commit ea4272d02b02719e266c7cf30141e6275e38f9a7 - Author: Hiroshi SHIBATA - Date: 2019-11-30 17:23:13 +0900 - - [ruby/fileutils] Bump version to 1.4.0 - - https://github.com/ruby/fileutils/commit/f92145b10b - -commit 3b9e1c0b2e5b3c507c94fd36c87288e789ee9c2a - Author: Hiroshi SHIBATA - Date: 2019-11-30 17:32:38 +0900 - - Move gemspec of fileutils under the toplevel of lib directory. - -commit eab88d20eaa925d5e61a2a65820a099b46ccf3f8 - Author: Nobuyoshi Nakada - Date: 2019-10-03 01:39:02 +0900 - - [ruby/fileutils] Fix #install with "X" mode option - - `FileUtils#install` methed raises an unexpected `TypeError`, when - called with `mode:` option which has `"X"`. - - ``` - $ ruby -rfileutils -e 'FileUtils.install("tmp/a", "tmp/b", mode: "o+X")' - /opt/local/lib/ruby/2.7.0/fileutils.rb:942:in `directory?': no implicit conversion of File::Stat into String (TypeError) - from /opt/local/lib/ruby/2.7.0/fileutils.rb:942:in `block (3 levels) in symbolic_modes_to_i' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:933:in `each_char' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:933:in `each' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:933:in `inject' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:933:in `block (2 levels) in symbolic_modes_to_i' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:931:in `each' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:931:in `each_slice' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:931:in `block in symbolic_modes_to_i' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:926:in `each' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:926:in `inject' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:926:in `symbolic_modes_to_i' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:973:in `fu_mode' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:883:in `block in install' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:1588:in `block in fu_each_src_dest' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:1604:in `fu_each_src_dest0' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:1586:in `fu_each_src_dest' - from /opt/local/lib/ruby/2.7.0/fileutils.rb:877:in `install' - from -e:1:in `
' - ``` - - In spite of that `symbolic_modes_to_i` considers the `File::Stat` - `path` case at the beginning, in `"X"` case, `path` is passed to - `FileTest.directory?` method which requires a `String`. In such - case, the mode in `path` should be examined instead. - - https://github.com/ruby/fileutils/commit/2ea54ade2f - -commit aab74fc938453233a5f11a093ad6129a0be230d1 - Author: Nobuyoshi Nakada - Date: 2019-10-03 01:17:26 +0900 - - [ruby/fileutils] Added `test_install_mode_option` - - https://github.com/ruby/fileutils/commit/bb10efe104 - -commit 0a7d26bea1b2d7ab4c36e471d387d1a9907a486d - Author: Nobuyoshi Nakada - Date: 2019-10-03 00:55:19 +0900 - - [ruby/fileutils] Remove version.rb - - Loading separate version.rb unnecessary increases every start-up - time. In the other hand, the gemspec file is parsed only when - building the gem file. - - https://github.com/ruby/fileutils/commit/8359cf7cce - -commit c064018a7584fe03403a3b175ac25dbbb1162c8c - Author: Kazuhiro NISHIYAMA - Date: 2019-11-19 15:13:35 +0900 - - Make extract-gems only if test_task is check - - Notes: - Merged: https://github.com/ruby/ruby/pull/2678 - -commit bb3542cc6b3db5477c2a9efd76905a4133545da1 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-13 21:28:53 +0900 - - Add update-gems before extract-gems - - (windows.yml used `nmake up`) - - Notes: - Merged: https://github.com/ruby/ruby/pull/2678 - -commit 2eb4afb10bd9a3849eb34292f33240ac3ef19905 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-13 19:45:14 +0900 - - Add extract-gems to GitHub Actions CI - - Notes: - Merged: https://github.com/ruby/ruby/pull/2678 - -commit cf14592872684956df7c014de0f9808c8aaf0e22 - Author: Hiroshi SHIBATA - Date: 2019-11-30 16:01:23 +0900 - - [ruby/readline-ext] Prepare to gem release - - https://github.com/ruby/readline-ext/commit/e5b969215a - -commit 856f9990a90e601ec5245a934d1da153591fcf3b - Author: Hiroshi SHIBATA - Date: 2019-11-30 15:50:57 +0900 - - [ruby/forwardable] Bump version to 1.3.0 - - https://github.com/ruby/forwardable/commit/e56f0f83c6 - -commit 9fa0166a580e72adf02562b7d60672c6c362d4b7 - Author: Jeremy Evans - Date: 2019-09-08 04:41:16 +0900 - - [ruby/forwardable] Fix keyword argument separation warnings on Ruby 2.7+ - - Do so in a way that is also compatible with previous versions. - - https://github.com/ruby/forwardable/commit/b2dd340988 - -commit af4b3f16ceed36f8b18856120940c9de6e6a0eee - Author: Hiroshi SHIBATA - Date: 2019-11-30 15:26:01 +0900 - - [ruby/stringio] Bump version to 0.1.0 - - https://github.com/ruby/stringio/commit/4c1e267e1a - -commit 990025cf60eb6586c13f5f055880ac60afbac646 - Author: Hiroshi SHIBATA - Date: 2019-11-30 15:16:13 +0900 - - [ruby/stringio] RbConfig::LIMITS only provide after Ruby 2.5 - - https://github.com/ruby/stringio/commit/1fed3aacd3 - -commit e764dff3641fd66fda1b9cf33cb7ddeb30e0b38a - Author: Hiroshi SHIBATA - Date: 2019-11-30 14:31:00 +0900 - - [ruby/date] Bump version to 3.0.0 - - https://github.com/ruby/date/commit/202b2dad93 - -commit 80705e2c4fe7c1e968830880ea4408990e3f3c39 - Author: Hiroshi SHIBATA - Date: 2019-11-30 14:48:26 +0900 - - Add to support the single commit for sync_default_gems.rb - -commit f8cc05dec37f78b15814d0b936786d4e84d7d448 - Author: aycabta - Date: 2019-11-30 11:14:35 +0900 - - Use @eof variable for ReidlineInputMethod#eof? - - "IRB::InputMethod#eof?" requires eof status each user input but - "ReidlineInputMethod#eof?" used "Reline.eof?" what is singleton data. - "ReidlineInputMethod#eof?" is changed to use the result of user input. - -commit 0b1b2f2442744f0add4dec47e475e25cde602dcf - Author: Hiroshi SHIBATA - Date: 2019-11-29 21:31:55 +0900 - - Remove e2mmap from sync_default_gems.rb - - Notes: - Merged: https://github.com/ruby/ruby/pull/2699 - -commit c50d30f659ff22981444b3e4684fe9e6f2809055 - Author: Hiroshi SHIBATA - Date: 2019-11-29 17:48:43 +0900 - - Simplified ErrDimensionMismatch class - - Notes: - Merged: https://github.com/ruby/ruby/pull/2699 - -commit 2f66c443d79bb3a2d5518dbe58ca86885bc23d5c - Author: Hiroshi SHIBATA - Date: 2019-11-29 17:46:13 +0900 - - Support argument for ErrNotRegular - - Notes: - Merged: https://github.com/ruby/ruby/pull/2699 - -commit 0c59bfae0a3a9f5a3420a1eac42753480d8d95f7 - Author: Hiroshi SHIBATA - Date: 2019-11-29 17:29:21 +0900 - - Also replace E2MM to standard exception class - - Notes: - Merged: https://github.com/ruby/ruby/pull/2699 - -commit 0950ef9a9a8e14dce44c36cf1ecaad187716a059 - Author: Hiroshi SHIBATA - Date: 2019-11-29 17:15:56 +0900 - - Remove e2mmap entries from docs - - Notes: - Merged: https://github.com/ruby/ruby/pull/2699 - -commit c1059e99d3f74fdd5d9a9792544a9ebc8a10edf7 - Author: Hiroshi SHIBATA - Date: 2019-11-29 17:11:11 +0900 - - Support existence usecase for the custom exception classes - - Notes: - Merged: https://github.com/ruby/ruby/pull/2699 - -commit 5044260dcd1d1b51f2e217ca519431ab5a1cf8c2 - Author: Hiroshi SHIBATA - Date: 2019-11-29 16:50:54 +0900 - - replace raise method from e2mmap on Scalar class - - Notes: - Merged: https://github.com/ruby/ruby/pull/2699 - -commit 9b950310be874753935a6ef4e8f94b3686f70540 - Author: Hiroshi SHIBATA - Date: 2019-11-29 16:35:51 +0900 - - raise method accepts 3 argument with exception class - - Notes: - Merged: https://github.com/ruby/ruby/pull/2699 - -commit f47f2076fed1546d993a376ce3c35ca81b1f0c6a - Author: Hiroshi SHIBATA - Date: 2019-11-27 12:17:03 +0900 - - Retire to maintain e2mmap on ruby core - - Notes: - Merged: https://github.com/ruby/ruby/pull/2699 - -commit 04511b994e19de65fff84dd55a246842a2f9ad29 - Author: Hiroshi SHIBATA - Date: 2019-11-27 12:11:34 +0900 - - Remove re-define embedded error classes and extract argument on custom error classes - - Notes: - Merged: https://github.com/ruby/ruby/pull/2699 - -commit d82c541ae439b3c28ec71e9d6b839c2f304df273 - Author: Hiroshi SHIBATA - Date: 2019-11-27 11:48:04 +0900 - - Use simple exception classes instead of e2mmap - - Notes: - Merged: https://github.com/ruby/ruby/pull/2699 - -commit 0c273b2279e65c57161e0859f2d4e9f6e649b751 - Author: Jeremy Evans - Date: 2019-11-29 10:28:13 +0900 - - Suppress class variable overtaken warning when original modules are the same - - This issue was exposed by recent commits to better support including - refined modules. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2709 - -commit 8a1f313e2e6ecf43a1ccad6cca35f738c6052b3c - Author: git - Date: 2019-11-30 00:21:48 +0900 - - * 2019-11-30 [ci skip] - -commit d1ef4fd08e60adcbcb4feeb55f767ff3d80b65a0 - Author: Nobuyoshi Nakada - Date: 2019-11-30 00:15:29 +0900 - - Make single line pattern matching void expression - - Instead of returning `nil`, raise a syntax error if its value is - used. [Feature #16355] - -commit 36da0b3da1aed77e0dffb3f54038f01ff574972b - Author: Koichi Sasada - Date: 2019-11-29 17:39:06 +0900 - - check interrupts at each frame pop timing. - - Asynchronous events such as signal trap, finalization timing, - thread switching and so on are managed by "interrupt_flag". - Ruby's threads check this flag periodically and if a thread - does not check this flag, above events doesn't happen. - - This checking is CHECK_INTS() (related) macro and it is placed - at some places (laeve instruction and so on). However, at the end - of C methods, C blocks (IMEMO_IFUNC) etc there are no checking - and it can introduce uninterruptible thread. - - To modify this situation, we decide to place CHECK_INTS() at - vm_pop_frame(). It increases interrupt checking points. - [Bug #16366] - - This patch can introduce unexpected events... - -commit c4686b92359d298f281f3943ba205858e183e7af - Author: aycabta - Date: 2019-11-29 17:36:54 +0900 - - Revert "Treat :@1, :@@1, @1, and @@1 correctly to check termination" - - This reverts commit 5e275dd2af4d9d24cdb1cfc0f232f348dae9c2cd. - - ...The @1 type numberd parameter is reverted from Ruby syntax. - -commit bbbe481dc36b2bbd33f2d1062e149d5db7602bc1 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-29 17:32:52 +0900 - - Add SECURITY.md [ci skip] - - for https://github.com/ruby/ruby/security/policy - -commit 191ce5344ec42c91571f8f47c85be9138262b1c7 - Author: Yusuke Endoh - Date: 2019-09-13 17:02:08 +0900 - - Reduce duplicated warnings for the change of Ruby 3 keyword arguments - - By this change, the following code prints only one warning. - - ``` - def foo(**opt); end - 100.times { foo({kw:1}) } - ``` - - A global variable `st_table *caller_to_callees` is a map from caller to - a set of callee methods. It remembers that a warning is already printed - for each pair of caller and callee. - - [Feature #16289] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2458 - -commit 3a87826d0c3dd4c42e327e0cd4fb0806d898497f - Author: Yusuke Endoh - Date: 2019-11-29 16:51:13 +0900 - - vm_method.c: add top-level ruby2_keywords - - This is a top-level version of Module#ruby2_keywords. - It can be used for functions (top-level methods) that delegates - arguments. [Feature #16364] - -commit 5ad32d5504499f1a915d5d30e59dfd98da6759c6 - Author: Nobuyoshi Nakada - Date: 2019-11-29 11:25:23 +0900 - - `LoadError` is not a subclass of `StandardError` - -commit f83bebdf7a76e1ade3c5dc9d54cbffb9f761b453 - Author: Nobuyoshi Nakada - Date: 2019-11-29 11:19:09 +0900 - - Skip useless test - - `JSONGeneratorTest#test_remove_const_seg` is meaningful only for - the extension library version, but nonsense for pure ruby version. - -commit ba1cb388a9b29856ff1e1127a10c2ac727dabfc4 - Author: Nobuyoshi Nakada - Date: 2019-11-29 11:17:27 +0900 - - Fixed the position in NEWS [Feature #16348] - - [ci skip] - -commit a593186a02714cb92ae2748c2b7c46a6c50b0977 - Author: Nobuyoshi Nakada - Date: 2019-11-29 11:09:08 +0900 - - Nmake needs `VPATH` - -commit 98006cea4fd517671dae508fade13203bc18301a - Author: Nobuyoshi Nakada - Date: 2019-11-29 10:16:33 +0900 - - Add dependency on bundled yaml.h when using - -commit 6b460a79489bf65dee0a4c9f42324d3836888dd3 - Author: Koichi Sasada - Date: 2019-11-29 03:24:30 +0900 - - export func for MJIT - -commit f38b6d197f84ba8890daf4d708c0d17c1d339700 - Author: Koichi Sasada - Date: 2019-11-29 03:22:24 +0900 - - Revert "export for MJIT" - - This reverts commit 2e6f1cf8b264f4c8499c4e5f18bf662fdade04ff. - -commit e4e41840ad378ccd3144fe84ffd3aa55f6610ca5 - Author: Koichi Sasada - Date: 2019-11-29 03:22:13 +0900 - - Revert "* remove trailing spaces. [ci skip]" - - This reverts commit 27d0d7c0d39076d4bbacd3c3f3864322699db7b4. - -commit 27d0d7c0d39076d4bbacd3c3f3864322699db7b4 - Author: git - Date: 2019-11-29 03:18:19 +0900 - - * remove trailing spaces. [ci skip] - -commit 2e6f1cf8b264f4c8499c4e5f18bf662fdade04ff - Author: Koichi Sasada - Date: 2019-11-29 03:17:34 +0900 - - export for MJIT - -commit e5705c351c82f43bfa0c45903c72a69f307cce60 - Author: git - Date: 2019-11-29 03:11:40 +0900 - - * 2019-11-29 [ci skip] - -commit d104ebf2c4fef4751e067ea7a2c7e664a843e088 - Author: git - Date: 2019-11-29 03:11:28 +0900 - - * remove trailing spaces. [ci skip] - -commit dd723771c118da71aa58bb74537cacaec425542a - Author: Koichi Sasada - Date: 2019-11-29 03:02:44 +0900 - - fastpath for ivar read of FL_EXIVAR objects. - - vm_getivar() provides fastpath for T_OBJECT by caching an index - of ivar. This patch also provides fastpath for FL_EXIVAR objects. - FL_EXIVAR objects have an each ivar array and index can be cached - as T_OBJECT. To access this ivar array, generic_iv_tbl is exposed - by rb_ivar_generic_ivtbl() (declared in variable.h which is newly - introduced). - - Benchmark script: - - Benchmark.driver(repeat_count: 3){|x| - x.executable name: 'clean', command: %w'../clean/miniruby' - x.executable name: 'trunk', command: %w'./miniruby' - - objs = [Object.new, 'str', {a: 1, b: 2}, [1, 2]] - - objs.each.with_index{|obj, i| - rep = obj.inspect - rep = 'Object.new' if /\#/ =~ rep - x.prelude str = %Q{ - v#{i} = #{rep} - def v#{i}.foo - @iv # ivar access method (attr_reader) - end - v#{i}.instance_variable_set(:@iv, :iv) - } - puts str - x.report %Q{ - v#{i}.foo - } - } - } - - Result: - - v0.foo # T_OBJECT - - clean: 85387141.8 i/s - trunk: 85249373.6 i/s - 1.00x slower - - v1.foo # T_STRING - - trunk: 57894407.5 i/s - clean: 39957178.6 i/s - 1.45x slower - - v2.foo # T_HASH - - trunk: 56629413.2 i/s - clean: 39227088.9 i/s - 1.44x slower - - v3.foo # T_ARRAY - - trunk: 55797530.2 i/s - clean: 38263572.9 i/s - 1.46x slower - -commit b5fbefbf2c14742f6d46ecdf3ce712062dfb1d0a - Author: NARUSE, Yui - Date: 2019-11-17 23:24:59 +0900 - - Added Symbol#start_with? and Symbol#end_with? method. [Feature #16348] - -commit 76871dea6b05ee441f25c6f694ac21525ed25f93 - Author: NARUSE, Yui - Date: 2019-11-28 23:31:01 +0900 - - Use more template feature of w.r-l.o - -commit 0b453e2a55eefbe1bbb0b76faf61b9b6ab121d48 - Author: Nobuyoshi Nakada - Date: 2019-11-28 21:45:43 +0900 - - Get rid of inadvertent label [ci skip] - -commit 2fa3b4565ad904b09419dc77f4fff03aee1a8358 - Author: Nobuyoshi Nakada - Date: 2019-11-28 21:31:53 +0900 - - Merged common statements [Bug #16242] - -commit f0a5a07fa5b98a2e7fcd028cebd7770c6d8916a7 - Author: Nobuyoshi Nakada - Date: 2019-11-28 18:12:38 +0900 - - Removed unused variable [Bug #16242] - -commit a0579f3606561a74e323f6193b9504c06845236c - Author: Jeremy Evans - Date: 2019-10-12 17:02:51 +0900 - - Make prepending a refined module after inclusion not break refinements - - After the previous commit, this was still broken. The reason it - was broken is that a refined module that hasn't been prepended to - yet keeps the refined methods in the module's method table. When - prepending, the module's method table is moved to the origin - iclass, and then the refined methods are moved from the method - table to a new method table in the module itself. - - Unfortunately, that means that if a class has included the module, - prepending breaks the refinements, because when the methods are - moved from the origin iclass method table to the module method - table, they are removed from the method table from the iclass - created when the module was included earlier. - - Fix this by always creating an origin class when including a - module that has any refinements, even if the refinements are - not currently used. I wasn't sure the best way to do that. - The approach I choose was to use an object flag. The flag is - set on the module when Module#refine is called, and if the - flag is present when the module is included in another module - or class, an origin iclass is created for the module. - - Fixes [Bug #13446] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2550 - -commit 5069c5f5214ce68df8b3954321ad9114c5368dc3 - Author: Jeremy Evans - Date: 2019-10-12 16:01:37 +0900 - - Honor refinements for modules that prepend other modules - - This previously did not work, and the reason it did not work is - that: - - 1) Refining a module or class that prepends other modules places - the refinements in the class itself and not the origin iclass. - - 2) Inclusion of a module that prepends other modules skips the - module itself, including only iclasses for the prepended modules - and the origin iclass. - - Those two behaviors combined meant that the method table for the - refined methods for the included module never ends up in the - method lookup chain for the class including the module. - - Fix this by not skipping the module itself when the module is - included. This requires some code rearranging in - rb_include_class_new to make sure the correct method tables and - origin settings are used for the created iclass. - - As origin iclasses shouldn't be exposed to Ruby, this also - requires skipping modules that have origin iclasses in - Module#ancestors (classes that have origin iclasses were already - skipped). - - Fixes [Bug #16242] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2550 - -commit 4325f080862b36a3e3ddee472169f65758612ad3 - Author: aycabta - Date: 2019-11-28 15:32:21 +0900 - - Add require "irb" to test/irb/test_completion.rb - -commit 7d75e94ea967a47e1ca1083f6d1090eaac7ca58e - Author: aycabta - Date: 2019-11-28 15:15:41 +0900 - - Fix regexp to complete complex literal - - IRB completion logic always needed exponential notation for complex literal - such as 3e6i but it's bug. I fixed to support complex literal without - exponential notation such as 3i. - -commit 8b4ee5d6ba92a385eedc9235ce0a2d5618deecf0 - Author: Nobuyoshi Nakada - Date: 2019-11-28 13:44:25 +0900 - - Raise `NoMatchingPatternError` when expr `in` pat doesn't match - - * `expr in pattern` should raise `NoMatchingError` when unmatched - * `expr in pattern` should return `nil`. (this is unspecified, but - this feature is experimental, at all) - - [Feature #16355] - -commit 18953416def52824c46a68370c4b34f5b720ee3f - Author: y-yagi - Date: 2019-11-28 13:24:01 +0900 - - Fix documentation of `MonitorMixin#new_cond` [ci skip] (#2707) - - Since https://github.com/ruby/ruby/pull/2576, - `new_cond` uses the Monitor object, not the receiver. - -commit c688026455a3a37b233333aa90bdd4633b3e6a91 - Author: Nobuyoshi Nakada - Date: 2019-11-28 10:52:33 +0900 - - Suppress strict-aliasing warning by x86_64-w64-mingw32-gcc 7.4.0 - -commit abe8fb49f0365c23df06857549b7a3a32d212ed5 - Author: aycabta - Date: 2019-11-28 09:32:51 +0900 - - Delete newline when C-k on emacs mode at EOL - -commit 7769975c3ccf1f08c15f4c6de8451783683e281d - Author: aycabta - Date: 2019-11-28 08:26:10 +0900 - - Remove two removed constants - -commit 2d0a1a1869e601dc0d50a86a89fe98edcbd24f09 - Author: aycabta - Date: 2019-11-27 11:58:38 +0900 - - Fix ghost method line no - -commit f9debf343788a6460e1e67bd7efc470d73e69f21 - Author: Jeremy Evans - Date: 2019-11-28 08:13:35 +0900 - - Update documentation for ruby2_keywords [ci skip] - -commit 416cccc6ec4fde7220edbf848424514f5d5b5743 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-27 19:09:47 +0900 - - Drop windows-2016 on GitHub Actions - - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/software-installed-on-github-hosted-runners#windows-server-2016 - > Note: The Windows Server 2016 virtual environment will be removed on December 3, 2019. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2704 - -commit cdcaf041127430b30ee4b32452762666495a732a - Author: git - Date: 2019-11-28 03:03:51 +0900 - - * 2019-11-28 [ci skip] - -commit 299a13612e54accd9d3661bafde8f67142a78d54 - Author: Jeremy Evans - Date: 2019-11-28 02:03:00 +0900 - - Don't modify rest array when using ruby2_keywords - - Previously, the rest array was modified, but it turns out that is - not necessary. Not modifying the rest array fixes cases when the - rest array is used more than once. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2706 - -commit 6f27fa4f7d52bfaea4fd1bd7605bda28e302e74c - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-27 14:42:30 +0900 - - prefer class_serial over m_tbl - - Decades ago, among all the data that a class has, its method - table was no doubt the most frequently accessed data. Previous - data structures were based on that assumption. - - Today that is no longer true. The most frequently accessed field - moved to class_serial. That field is not always as wide as VALUE - but if it is, let us swap m_tbl and class_serial. - - Calculating ------------------------------------- - ours trunk - Optcarrot Lan_Master.nes 47.363 46.630 fps - - Comparison: - Optcarrot Lan_Master.nes - ours: 47.4 fps - trunk: 46.6 fps - 1.02x slower - - Notes: - Merged: https://github.com/ruby/ruby/pull/2701 - -commit 177bc652a8110c1350c0e6df8cb17158e44e18dd - Author: git - Date: 2019-11-27 03:57:46 +0900 - - * 2019-11-27 [ci skip] - -commit a3e6f52c17061f012c4e638b3343b57752ed7603 - Author: Koichi Sasada - Date: 2019-11-26 12:20:53 +0900 - - rename __builtin_inline!(code) and introduce others. - - rename __builtin_inline!(code) to __builtin_cstmt(code). - Also this commit introduce the following inlining C code features. - - * __builtin_cstmt!(STMT) - - (renamed from __builtin_inline!) - - Define a function which run STMT implicitly and call this function at - evatuation time. Note that you need to return some value in STMT. - If there is a local variables (includes method parameters), you can - read these values. - - static VALUE func(ec, self) { - VALUE x = ...; - STMT - } - - Usage: - def double a - # a is readable from C code. - __builtin_cstmt! 'return INT2FIX(FIX2INT(a) * 2);' - end - - * __builtin_cexpr!(EXPR) - - Define a function which invoke EXPR implicitly like `__builtin_cstmt!`. - Different from cstmt!, which compiled with `return EXPR;`. - (`return` and `;` are added implicitly) - - static VALUE func(ec, self) { - VALUE x = ...; - return EXPPR; - } - - Usage: - def double a - __builtin_cexpr! 'INT2FIX(FIX2INT(a) * 2)' - end - - * __builtin_cconst!(EXPR) - - Define a function which invoke EXPR implicitly like cexpr!. - However, the function is called once at compile time, not evaluated time. - Any local variables are not accessible (because there is no local variable - at compile time). - - Usage: - GCC = __builtin_cconst! '__GNUC__' - - * __builtin_cinit!(STMT) - - STMT are writtein in auto-generated code. - This code does not return any value. - - Usage: - - __builtin_cinit! '#include ' - def no_compression? - __builtin_cconst! 'Z_NO_COMPRESSION ? Qtrue : Qfalse' - end - -commit 9e01fcd0cb79a05daa50d99c888cc7eeb9c79426 - Author: Nobuyoshi Nakada - Date: 2019-11-26 22:54:35 +0900 - - [ripper] Fixed unique key check in pattern matching - - Check keys - * by an internal table, instead of unstable dispatched results - * and by parsed key values, instead of escaped forms in the source - -commit 22dfd14c179632d773b97e708255b6c183a740aa - Author: Nobuyoshi Nakada - Date: 2019-11-26 15:40:34 +0900 - - Hoisted out `push_pvtbl`/`pop_pvtbl` - -commit 497f13aea6bae0e2443f21b4eb35fee9df3424d7 - Author: Nobuyoshi Nakada - Date: 2019-11-26 15:33:40 +0900 - - Wrap `p_kw` in an array at `p_kwarg` - - Not in `p_kw` itself, which makes key and variable/expr pair only - now. - -commit 265b5382b21db28e52d0314ef47025f881dcbf0f - Author: Nobuyoshi Nakada - Date: 2019-11-26 14:00:08 +0900 - - Allow `$10` and more in the Ripper DSL - -commit 7db719c51652f0de6cae079c6ce0723dd00a9939 - Author: Nobuyoshi Nakada - Date: 2019-11-26 19:08:56 +0900 - - Write rbinc files to the source directory - - Update the target file itself of the dependency on this script. - Fall back to the current working directory if unwritable. - -commit 8b208293963cafa1469947a9957b59ce68895af1 - Author: aycabta - Date: 2019-11-26 19:07:29 +0900 - - Remove an unnecessary variable - -commit 82525fcce192aa5582480164f5c109f9f2fe621b - Author: Hiroshi SHIBATA - Date: 2019-11-26 18:25:56 +0900 - - Add sync task for ruby/openssl - -commit 1fe31737d826bcc0a875419f5451679ae7ec04eb - Author: Takashi Kokubun - Date: 2019-11-26 18:20:19 +0900 - - Slightly fix the warning message [ci skip] - - I'm not sure, but maybe it was grammatically incorrect? - -commit 958641d9919f19a1e37c633e9dc44d2986904628 - Author: Takashi Kokubun - Date: 2019-11-26 18:17:56 +0900 - - Suggest an alternative to suppress the irb warning - -commit 5a6e3e7552382a4863ef5a8833798edb22abb3c7 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-26 16:19:18 +0900 - - Add `--with-openssl-dir` to windows on GitHub Actions - - https://github.com/ruby/ruby/commit/7bd7a013b14fb6c4403ff243ec5db13c5c71f552/checks?check_suite_id=328682567#step:10:1634 - ``` - *** Following extensions are not compiled: - openssl: - Could not be configured. It will not be installed. - " d:/a/ruby/ruby/src/ext/openssl/extconf.rb:97: OpenSSL library could not be found. You might want to use --with-openssl-dir= option to specify the prefix where OpenSSL is installed." - ``` - -commit 307e899d78057f7b5b504034eea103f4a8a89ba3 - Author: git - Date: 2019-11-26 11:46:22 +0900 - - * 2019-11-26 [ci skip] - -commit 7bd7a013b14fb6c4403ff243ec5db13c5c71f552 - Author: NAKAMURA Usaku - Date: 2019-11-26 11:44:11 +0900 - - Fix `$(RMALL) -r` on Windows - - `set recursive=1 &` sets `1 ` to `recursive`, not `1`. - -commit 26625bc33c32e0945bf727234a3ce6da1eb0ddc4 - Author: Nobuyoshi Nakada - Date: 2019-11-19 17:17:00 +0900 - - [ripper] Quoted label without expression must be a local variable - - The difference from 0b8c73aa65add5c57b46b0cfdf4e661508802172 is to - add the result of `string_add` event to marking objects. - - ```C - RNODE($1)->nd_rval = add_mark_object(p, $$); - ``` - -commit 86461fc28cd9c05670ece440d337f255b33e6def - Author: Nobuyoshi Nakada - Date: 2019-11-25 16:52:50 +0900 - - lldb_cruby.py: improved dump of Symbol - - [ci skip] - -commit 09e76e982801a838688ea80be29844ed91c23f46 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-25 15:05:53 +0900 - - Improve consistency of bool/true/false - -commit e27acb61485189fd7647741b6ca19920989dec03 - Author: Koichi Sasada - Date: 2019-11-25 14:02:15 +0900 - - add fast path for argc==0. - - If calling builtin functions with no arguments, we don't need to - calculate argv location. - -commit 5c6235a83cc6a20c27f3e3a94381b4efcad4c3fc - Author: Kazuhiro NISHIYAMA - Date: 2019-11-25 12:10:05 +0900 - - Set TRUE/FALSE to `bool ruby_tz_uptodate_p` instead of 1/FALSE - -commit 714a0cefc10b8f0a2a89e6cfb06723d72f2a5b99 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-25 10:54:09 +0900 - - Fix a typo [ci skip] - -commit a5f0d1d71598451dd8461ba52a3a143cb33afdd3 - Author: Junichi Ito - Date: 2019-11-25 10:16:59 +0900 - - Remove duplicated line in NEWS [ci skip] - - [ruby-core:95935] [Misc #16365] - -commit 9af52c0d099083fb6b56f39584a0909baa9e7a10 - Author: Nobuyoshi Nakada - Date: 2019-11-25 09:19:42 +0900 - - lldb_cruby.py: fixed dump of embedded RArray - - [ci skip] - -commit ce50af21af3d23e292b73f955a8b12ea9c2038e3 - Author: PaweÅ‚ Przeniczny - Date: 2019-11-25 07:08:16 +0900 - - Fix the docs for Proc#>>. - - The docs are wrong about the behaviour of `#>>` (looks like it was copied from `#<<`) - In `(prc >> g).call(n)` _prc_ is called first (with _n_), *then* _g_ is called with the result. - - Code examples are OK. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2691 - -commit fd956c72eaeb07d26d61310a9e4b55b500237c02 - Author: aycabta - Date: 2019-11-25 07:27:15 +0900 - - Cache loaded module to suppress method redefined warnings - -commit 90872520674dcc070d693430ee139042ba514591 - Author: git - Date: 2019-11-25 06:50:27 +0900 - - * 2019-11-25 [ci skip] - -commit 51ea1abb5f2ed70387dda28a5d0d9ee817367d61 - Author: aycabta - Date: 2019-11-25 05:38:09 +0900 - - Remove e2mmap dependency - -commit efbca15116d4aea1588c6ba4ef0eb72c3c55c1db - Author: aycabta - Date: 2019-11-25 03:10:35 +0900 - - Remove lib/irb/slex.rb - -commit 1aeb201d28ae2a10f7856be72ac6d705982b67ab - Author: aycabta - Date: 2019-11-24 23:29:09 +0900 - - Remove debug code... - -commit 411644186b3bc9515fe7f60627bc1dea5d89cc36 - Author: git - Date: 2019-11-24 23:15:25 +0900 - - * 2019-11-24 [ci skip] - -commit 745ab168185fc8f3c9d9dbd3a2355738776aee6d - Author: aycabta - Date: 2019-11-24 22:42:08 +0900 - - Disable tracer ext of IRB when tracer doesn't found - -commit b563439274a402e33541f5695b1bfd4ac1085638 - Author: Nobuyoshi Nakada - Date: 2019-11-23 16:00:39 +0900 - - Show include directive differences only when under git - - When building from tarballs, the source directory is not a git - repository. - -commit 9318e1ff3e700250dba277924672634c6ecf2940 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-23 11:41:27 +0900 - - Use realpath to try to fix failures with symlinks - -commit 818708edab6e950a8c1828816b73d36f05585f9f - Author: Takashi Kokubun - Date: 2019-11-23 07:22:33 +0900 - - Stop using undefined matrix.os for macOS - - and use github.workflow instead. Applied a similar change to MJIT too. - -commit b0614a0f968d40fb1bad31592fc9a607dbac447d - Author: aycabta - Date: 2019-11-23 05:44:35 +0900 - - Tracer.set_get_line_procs should support block and Proc object - - Original Tracer.set_get_line_procs is implemented by - "def set_get_line_procs(p = proc)". It means that original - Tracer.set_get_line_procs supports block and Proc object. - -commit 1ee010a3171978007a4550e8077f1e4b646bd80a - Author: aycabta - Date: 2019-11-23 05:20:23 +0900 - - Tracer.add_filter should support block and Proc object - - Original Tracer.add_filter is implemented by "def add_filter(p = proc)". It - means that original Tracer.add_filter supports block and Proc object. - -commit 8e743fad4e9124bd59bb5f14473cb188db9d3c34 - Author: John Hawthorn - Date: 2019-11-22 04:05:48 +0900 - - Count pinned slots using only bitmap - - This is significantly faster than checking BUILTIN_TYPEs because we - access significantly less memory. We also use popcount to count entire - words at a time. - - The only functional difference from the previous implementation is that - T_ZOMBIE objects will no longer be counted. However those are temporary - objects which should be small in number, and this method has always been - an estimate. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2688 - -commit 26fd8d962ce42b7eb8d1c1eb43ddfa1ff24dc3aa - Author: John Hawthorn - Date: 2019-11-21 07:18:40 +0900 - - Optimize pinned page sorting - - Previously we would count the pinned objects on each comparison. Since - sorting is O(N log N) and we calculated this on both left and right - pages on each comparison this resulted in a extra iterations over the - slots. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2688 - -commit 3f4199b0af791572b7abf63f33bb3b0b9b53d08f - Author: John Hawthorn - Date: 2019-11-21 07:07:20 +0900 - - Use value of use_verifier in gc_compact - - Notes: - Merged: https://github.com/ruby/ruby/pull/2688 - -commit 144bff43fc0b69361f6aa29448d24dd161b7d359 - Author: git - Date: 2019-11-23 01:58:08 +0900 - - * 2019-11-23 [ci skip] - -commit 271cb9acd268c6074b86426e25ee61b5987e5fb3 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-23 01:55:29 +0900 - - Suppress git error message - - `fatal: not a git repository (or any of the parent directories): .git` - -commit d7f100226d41df364b048c7956b5140922970e9a - Author: Kazuhiro NISHIYAMA - Date: 2019-11-23 01:29:53 +0900 - - Skip test_validate_gemspec when tarball and git installed too - - `git --version` failed as expected when git is not installed, - but unexpectedly pass when git installed and pwd is not in git working directory. - So use `git rev-parse` instead, and it failed when git installed too. - -commit 053f78e13988e9253d1f207bf5e23d9505112b32 - Author: Yusuke Endoh - Date: 2019-11-22 23:56:18 +0900 - - internal.h: Add a prototype declaration for rb_gvar_readonly_setter - - emscripten fails to compile ruby due to lack of this. - -commit 994435d0efa9931d0475de923c4e6c227d03e398 - Author: Vít Ondruch - Date: 2019-11-22 17:47:30 +0900 - - Revert "Update dependencies" - - This reverts commit e1b234148829f65bea9f5ecc7018beb782ea6023. - - This allows to build Psych against system libyaml again on Fedora. - - [Bug #16359] - -commit 35608760ffae00e0daebecd260191019a9b32648 - Author: NARUSE, Yui - Date: 2019-11-22 19:05:58 +0900 - - Add github repo to remove_tag - -commit a93d0a4e62c50a53ccdc3b2bc114f75a25bfc40f - Author: Nobuyoshi Nakada - Date: 2019-11-22 18:39:39 +0900 - - Check -1 arity for C++ - -commit f9d20a1bf157885975aacffdcb22f2b210f1258d - Author: git - Date: 2019-11-22 13:58:32 +0900 - - * 2019-11-22 [ci skip] - -commit 8eb0a9e5668032e750b91739cc40f3180278728d - Author: Kazuhiro NISHIYAMA - Date: 2019-11-22 13:55:59 +0900 - - Use jsDelivr instead of raw.githubusercontent.com - - Try to fix download error on Solaris CI - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11x/ruby-master/log/20191121T162422Z.fail.html.gz - ``` - tool/downloader.rb:243:in `rescue in download': failed to download config.guess (RuntimeError) - Net::HTTPFatalError: 503 "Service Unavailable": https://raw.githubusercontent.com/gcc-mirror/gcc/master/config.guess - ``` - -commit 88d6009d91c197049da9d6efeb406aec5eb5d551 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-21 23:10:30 +0900 - - Use more strict regexp to avoid to match naninanirb.rb - -commit ffab1bfdfcb9f1448c063e93f04209c90327ad9c - Author: Nobuyoshi Nakada - Date: 2019-11-21 15:17:34 +0900 - - Fixed for old git - -commit 97a5af62a318fcd93a4e5e4428d576c0280ddbae - Author: Nobuyoshi Nakada - Date: 2019-11-21 10:57:36 +0900 - - Skip updating revision.h when the revision is unchanged - - note: GNU make only. - -commit a9d4f2d03c847ec1c89dc03a5076a9fa29ffa61f - Author: Jeremy Evans - Date: 2019-06-22 02:33:06 +0900 - - Support %U/%u/%W/%w/%V/%g/%G formats in Time.strptime - - Most of these formats were documented as supported, but were not - actually supported. Document that %g and %G are supported. - - If %U/%W is specified without yday and mon/mday are not specified, - then Date.strptime is used to get the appropriate yday. - - If cwyear is specifier without the year, or cwday and cweek are - specified without mday and mon, then use Date.strptime and convert - the resulting value to Time, since Time.make_time cannot handle - those conversions - - Fixes [Bug #9836] - Fixes [Bug #14241] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2685 - -commit 8f1062127e40767240aa0a0fe18fd48687bc04e9 - Author: aycabta - Date: 2019-11-21 07:28:18 +0900 - - Add test/reline/test_string_processing.rb - -commit 9131e62f1862a1736d37d934cda603dc91b2c831 - Author: aycabta - Date: 2019-11-21 07:05:27 +0900 - - [ruby/reline] Version 0.0.7 - - https://github.com/ruby/reline/commit/09d370bdc19e62f0a27c2240e19b07963afd922f - -commit f30f78e2e054d72d4997db8c14eda81479270ee8 - Author: aycabta - Date: 2019-11-21 05:21:31 +0900 - - Version 0.0.6 - -commit e4127cdd3e2597d1814c59cb842d4dff0ba73921 - Author: aycabta - Date: 2019-11-21 05:25:01 +0900 - - Version 1.1.0 - -commit 95f20f463aa07fbb2e5efbdb89a93d94861cdc49 - Author: aycabta - Date: 2019-11-21 07:00:01 +0900 - - Consider escape sequence to calculate prompt width - -commit 1197a036ae1c48ac0842bb2a0dc8af213def47d7 - Author: Koichi Sasada - Date: 2019-11-21 04:37:29 +0900 - - Add a proper cast to pass JIT tests on mswin. - - https://ci.appveyor.com/project/ruby/ruby/builds/29001248/job/ye80bsrmewdgw294 - -commit eee70b41d4c04caa06a68cc4847a600eb7322cb8 - Author: aycabta - Date: 2019-11-21 02:44:15 +0900 - - Add a warning message and --legacy of an alias of --singleline - -commit 9d6f78822c61348989802848150f103f0a4ef7d0 - Author: Y. Ushiki - Date: 2019-10-30 08:49:03 +0900 - - Refactor filter_backtrace - -commit 04d0d93ebf8692170218fa9d55216aaca74be30b - Author: Y. Ushiki - Date: 2019-10-30 08:43:19 +0900 - - Fix filter_backtrace for context-mode 0 - -commit 91bf3b7a77e187794cc84549f330e5675fb5d367 - Author: aycabta - Date: 2019-10-30 09:32:16 +0900 - - Use singleline/multiline instead of readline/reidline - -commit 9b52bacc62c3db13ea18fa5ea4d9b9a92b5fcb86 - Author: Nobuyoshi Nakada - Date: 2019-11-21 02:14:20 +0900 - - Refined inspection of argument forwarding - -commit f835a74da45f95073d12f84c3b8de9fb2f1e9ff6 - Author: git - Date: 2019-11-21 00:48:59 +0900 - - * 2019-11-21 [ci skip] - -commit 6723aa07e591a13996b5af205c589200d44c5249 - Author: manga_osyo - Date: 2019-11-20 09:13:42 +0900 - - Change argument `Proc` to `#call` defined object. - This is the same as the behavior of Readline. - -commit 81586a4d9fd6afe1c39f737a704c5010faf22192 - Author: manga_osyo - Date: 2019-11-16 11:13:19 +0900 - - Add keys. - -commit 777973084e599cf9efa490173709b187fb507f90 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-20 17:56:59 +0900 - - Add tests of argument forwarding's parameters and inspect - -commit 633625a083c5f02e78355cb12818056e54330e88 - Author: aycabta - Date: 2019-11-20 17:55:03 +0900 - - Mintty on Cygwin isn't a kind of command prompt, can process ANSI escape code - -commit ae818b589efcb5dca47d9ceb888cb658ef56e286 - Author: Koichi Sasada - Date: 2019-11-20 17:21:38 +0900 - - add a NEWS entry for Method#inspect - -commit fc22b0eaa3fa073f622917364cbb573cd6ba2bfc - Author: Nobuyoshi Nakada - Date: 2019-11-20 16:27:57 +0900 - - Always forward declaration is needed - - `rb_resolve_refined_method_callable` is referenced in - `refine_sym_proc_call`, even when pre-compiling mjit header on - mswin. - -commit 83900528ad6a2cf37360abe2bcebb16787177838 - Author: Nobuyoshi Nakada - Date: 2019-11-20 16:23:59 +0900 - - Turn C4047 warning into error - - Warned at making precompiled header on mswin. - - ``` - building rb_mjit_header-2.7.0.pch - vm.c - d:\a\ruby\ruby\src\vm_args.c(1117): warning C4047: '=': 'const rb_callable_method_entry_t *' differs in levels of indirection from 'int' - rb_mjit_header-2.7.0.pch updated - ``` - -commit 7608baf92ae2f3b29786e7fca021c8c8d24016f8 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-20 15:51:10 +0900 - - re-add function prototypes - - This commit reverts a part of 0e8219f591f3f17cb7ee361e8a60dbef08145883 - which broke icc. See also https://rubyci.org/logs/rubyci.s3.amazonaws.com/icc-x64/ruby-master/log/20191120T010006Z.fail.html.gz - -commit f90b22e3dc99fd8eff2235e847e52266d20e8488 - Author: Nobuyoshi Nakada - Date: 2019-11-20 15:37:05 +0900 - - Revert the line for nextafter.c for FreeBSD make - -commit 50cc9341450cfbdf9a40df3d38600d8d2854a0a3 - Author: zverok - Date: 2019-11-20 09:33:20 +0900 - - Update representation (discussed on ruby tracker) - - Notes: - Merged: https://github.com/ruby/ruby/pull/2618 - -commit baf482bab4776f781c3569d9f581e38bbf0548e1 - Author: zverok - Date: 2019-10-27 20:32:17 +0900 - - Fix test_module.rb - - Notes: - Merged: https://github.com/ruby/ruby/pull/2618 - -commit 4b583cff97025394fab4a014a2a8606dfb557475 - Author: zverok - Date: 2019-10-27 19:39:33 +0900 - - Method parameters inspect - - Example: - - def m(a, b=nil, *c, d:, e: nil, **rest, &block) - end - p method(:m) - #=> #, *c, d:, e: , **rest, &block) ...> - - Notes: - Merged: https://github.com/ruby/ruby/pull/2618 - -commit da0d7211aa85b90f2246e2d9abfe08105f7ddedb - Author: aycabta - Date: 2019-11-20 10:04:41 +0900 - - Fix indent of a line when a newline is inserted to the next - -commit 9306602f24e5c9be4cdae5ed7e69e746ae9e175e - Author: aycabta - Date: 2019-11-20 09:58:33 +0900 - - Replace typo "bock" with "block" - -commit 19a310b0ac6bfc78340d37963ea2655783760bee - Author: aycabta - Date: 2019-11-20 09:56:13 +0900 - - A preceding token of "do" of block has EXPR_CMDARG or EXPR_ENDFN - - meth do # the preceding token of "do" has EXPR_CMDARG - end - - meth() do # the preceding token of "do" has EXPR_ENDFN - end - -commit 49b4507fd3caed356e4039da5820a7c843c6b05a - Author: aycabta - Date: 2019-11-20 08:39:43 +0900 - - Number sign comment (# bla bla) is a kind of newline character - -commit bc0da8e3ff409f09888ffe98e6e66b503ebc8083 - Author: aycabta - Date: 2019-11-19 20:58:11 +0900 - - Generate history file path correctly when $HOME/.irbrc doesn't exist - -commit ff41663403d3eb76d95f465cb94e14d2faaa04d1 - Author: Kazuki Tsujimoto - Date: 2019-11-20 00:35:47 +0900 - - Fix memory corruption in Enumerable#reverse_each [ruby-dev:50867] [Bug #16354] - -commit 61131edba7c885a6d12c4d6f0e502fb40381f184 - Author: Nobuyoshi Nakada - Date: 2019-11-20 00:55:14 +0900 - - Revert "[ripper] Quoted label without expression must be a local variable" - - This reverts commit 0b8c73aa65add5c57b46b0cfdf4e661508802172, which - seems breaking RVALUE consistency check. - -commit f3c9803528d429a7b5e47f400caa33dfadd94da7 - Author: git - Date: 2019-11-20 00:07:26 +0900 - - * 2019-11-20 [ci skip] - -commit 2439948bcc0ec9daf91cf79301195e59bad49aff - Author: Kazuki Tsujimoto - Date: 2019-11-19 23:53:01 +0900 - - Avoid needless object allocation - -commit 822d7ae31659e4ab60c4d1aa6d088577d6bc74b0 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-19 17:34:43 +0900 - - Add a test - - and rename from b.rb - - [ruby-core:95055] [Bug #16177] - -commit 0b8c73aa65add5c57b46b0cfdf4e661508802172 - Author: Nobuyoshi Nakada - Date: 2019-11-19 17:17:00 +0900 - - [ripper] Quoted label without expression must be a local variable - -commit a5fe08fdd9d11f12a6837291ee588ab933a823b6 - Author: Koichi Sasada - Date: 2019-11-19 16:56:56 +0900 - - care about TAG_FATAL. - - TAG_FATAL represents interpreter closing state and ec->errinfo - contains FIXNUM (eTerminateSignal, etc). If we need to change the - state, then errinfo is also changed because TAG_RAISE assumes that - ec->errinfo contains a Exception object. - - Without this patch, TAG_FATAL is ignored and no ec->errinfo change - so that it causes critical issue. - [Bug #16177] - -commit c53aec73ddf94bb9a06bead62c3bf58c5ba49bd3 - Author: Nobuyoshi Nakada - Date: 2019-11-19 15:06:11 +0900 - - Configure static extensions only if in charge - - Get rid of races in parallel configuration when using the - ext/Setup file. - -commit f6239ce0fc906c9d407e7da33f447575670a79bd - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-19 13:16:04 +0900 - - peep-hole optimize VM instructions - - Some minor optimizations. - - Calculating ------------------------------------- - ours trunk - vm2_regexp 8.479M 8.346M i/s - 6.000M times in 0.707612s 0.718916s - vm2_regexp_invert 8.605M 8.350M i/s - 6.000M times in 0.697298s 0.718576s - - Comparison: - vm2_regexp - ours: 8479223.3 i/s - trunk: 8345893.8 i/s - 1.02x slower - - vm2_regexp_invert - ours: 8604647.4 i/s - trunk: 8349852.8 i/s - 1.03x slower - - Calculating ------------------------------------- - ours+jit trunk+jit - Optcarrot Lan_Master.nes 68.603 64.167 fps - - Comparison: - Optcarrot Lan_Master.nes - ours+jit: 68.6 fps - trunk+jit: 64.2 fps - 1.07x slower - -commit 75e8dd58f69c190c9698d0133942032903fb2f07 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-19 13:06:00 +0900 - - Remove TEST_BUNDLED_GEMS_ALLOW_FAILURES - - https://github.com/seattlerb/minitest/pull/798 is closed - -commit 0e8219f591f3f17cb7ee361e8a60dbef08145883 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-18 12:13:08 +0900 - - make functions static - - These functions are used from within a compilation unit so we can - make them static, for better binary size. This changeset reduces - the size of generated ruby binary from 26,590,128 bytes to - 26,584,472 bytes on my macihne. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2682 - -commit 78e266da1dede1c81e634982e76a129c5720d80e - Author: Samuel Williams - Date: 2019-11-19 11:40:00 +0900 - - Clarify documentation for `InstructionSequence#compile`. - - We incorrectly assumed that the `file` argument should be the file name and - caused https://github.com/scoutapp/scout_apm_ruby/issues/307 because - exception backtrace did not contain correct path. This documentation - clarifies the role of the different arguments and provides extra - examples. - -commit cef9ebfbd3565f9feb25d0140da3176ea26bf4a9 - Author: Nobuyoshi Nakada - Date: 2019-11-13 15:28:12 +0900 - - Suppress `stty` error on Apple Terminal - - `stty` called in `Reline::ANSI.deprep` command shows the following - error message on macOS Apple Terminal, with some settings. - - ``` - $ LANG=C irb - irb(main):001:0> - stty: 'standard input': unable to perform all requested operations - stty: 'standard input': unable to perform all requested operations - ``` - -commit 473e314791964019e017410fb761b873d61e591c - Author: Nobuyoshi Nakada - Date: 2019-11-13 15:22:39 +0900 - - Prefer dedecated assertions - -commit 0be0d90ab0566df186ad7dc3b9e5ec9e06e296a3 - Author: Takashi Kokubun - Date: 2019-11-19 02:31:36 +0900 - - pack is not using invokebuiltin anymore - -commit fea24bbfdbe17da1038355fe7e0f7063f8c26c87 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-18 23:41:26 +0900 - - Fix glob base in bundler.gemspec - - Notes: - Merged: https://github.com/ruby/ruby/pull/2683 - -commit 9aa75795f9f438d5c874d8e418c3c7cdd63024fa - Author: Kazuhiro NISHIYAMA - Date: 2019-11-18 23:39:57 +0900 - - Skip some tests if extracted from tarball - - Notes: - Merged: https://github.com/ruby/ruby/pull/2683 - -commit e9992bcab03b1646d18b4a417643273a7bbb6158 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-18 23:36:51 +0900 - - Allow unknown if ruby core - - Notes: - Merged: https://github.com/ruby/ruby/pull/2683 - -commit 9067f43c0ae6d42222a0dd2cd55380b11343ddd1 - Author: git - Date: 2019-11-19 00:27:05 +0900 - - * 2019-11-19 [ci skip] - -commit 0c0278b90a6fe1e71e0e5c27069b8b2976e2a7cf - Author: Yusuke Endoh - Date: 2019-11-19 00:25:49 +0900 - - test/-ext-/string/test_fstring.rb: suppress a warning for taint - -commit 373769c93995abeeb546bdcd9e6527c77aefa1d4 - Author: Yusuke Endoh - Date: 2019-11-19 00:12:50 +0900 - - NEWS: Add an example for the warning of "yield in singleton class" - -commit f09fc1b0344e65aeb9c11aaeb23c99954265fe4d - Author: Nobuyoshi Nakada - Date: 2019-11-18 23:14:13 +0900 - - Dependents on probes.h need the dummy header too - -commit e1b234148829f65bea9f5ecc7018beb782ea6023 - Author: Nobuyoshi Nakada - Date: 2019-08-07 23:22:06 +0900 - - Update dependencies - -commit 39492d6ce6ee11cbb275dc6f48c73de93f8549ce - Author: Nobuyoshi Nakada - Date: 2019-08-10 00:02:17 +0900 - - Build ruby-runner - -commit 227220b25aad9841eb979c18a0251b71de824e88 - Author: Nobuyoshi Nakada - Date: 2019-08-10 00:02:17 +0900 - - Skip dependencies on timestamp files - -commit 209164e44f0bd0bbd938bf726e88d0dd29f84d55 - Author: Nobuyoshi Nakada - Date: 2019-11-18 18:42:22 +0900 - - Renamed assembly file like as e64f71f812324d098bed12ed68c2bc1d6e780c90 - -commit 7a9b2039b7b82f081f2cab40a4fbbc8b01231ca4 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-18 12:00:19 +0900 - - delete unused codes - - Suppress compiler warnings. - -commit 57cd4623cfb56d12eb308eaf5fb09612e4572c19 - Author: Koichi Sasada - Date: 2019-11-18 13:36:34 +0900 - - should not use __func__ - -commit 22c9504905114cfb58ebc0aa631200f0caafd4e0 - Author: Nobuyoshi Nakada - Date: 2019-11-18 11:05:08 +0900 - - rb_tainted_str_new_with_enc is no longer used - -commit 5e34ab5406942d43b4c0fbccfc153409d0386d1e - Author: Koichi Sasada - Date: 2019-11-18 10:36:48 +0900 - - add casts. - - add casts to avoid compile error. - http://ci.rvm.jp/results/trunk_clang_39@silicon-docker/2402215 - -commit c3693bbaaa39d36210060fb4478751d66c0052ad - Author: Koichi Sasada - Date: 2019-11-18 10:24:38 +0900 - - catch up last commit. - - Array#pack uses `opt_invokebuiltin_delegate_leave` now. - -commit 71fee9bc720ba7a117062bf3f78b6086527b656c - Author: Koichi Sasada - Date: 2019-11-15 17:49:49 +0900 - - vm_invoke_builtin_delegate with start index. - - opt_invokebuiltin_delegate and opt_invokebuiltin_delegate_leave - invokes builtin functions with same parameters of the method. - This technique eliminate stack push operations. However, delegation - parameters should be completely same as given parameters. - (e.g. `def foo(a, b, c) __builtin_foo(a, b, c)` is okay, but - __builtin_foo(b, c) is not allowed) - - This patch relaxes this restriction. ISeq has a local variables - table which includes parameters. For example, the method defined - as `def foo(a, b, c) x=y=nil`, then local variables table contains - [a, b, c, x, y]. If calling builtin-function with arguments which - are sub-array of the lvar table, use opt_invokebuiltin_delegate - instruction with start index. For example, `__builtin_foo(b, c)`, - `__builtin_bar(c, x, y)` is okay, and so on. - -commit 93ce4f1cd7c96f0fdbeebc87a9fa64d07cede729 - Author: Koichi Sasada - Date: 2019-11-18 10:14:56 +0900 - - update deps. - - https://travis-ci.org/ruby/ruby/jobs/613242256#L2205 - -commit b753929806d0e42cdfde3f1a8dcdbf678f937e44 - Author: git - Date: 2019-11-18 08:00:52 +0900 - - * remove trailing spaces. [ci skip] - -commit 4c7dc9fbe604cc0c8343b1225c96d4e5219b8147 - Author: Jeremy Evans - Date: 2019-11-15 05:15:01 +0900 - - Update NEWS for $SAFE/taint changes - - Notes: - Merged: https://github.com/ruby/ruby/pull/2476 - -commit 3a0de05beeb997ec77d35755d9d303e1ca858cb7 - Author: Jeremy Evans - Date: 2019-10-05 00:44:33 +0900 - - Remove mention of $SAFE and taint from doc [ci skip] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2476 - -commit c257303ae78d0e307a80dbe5ccd405abc6e8d44d - Author: Jeremy Evans - Date: 2019-09-26 07:49:21 +0900 - - Deprecate rb_eval_cmd, add rb_eval_cmd_kw - - rb_eval_cmd takes a safe level, and now that $SAFE is deprecated, - it should be deprecated as well. - - Replace with rb_eval_cmd_kw, which takes a keyword flag. Switch - the two callers to this function. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2476 - -commit d03da13b17484cb3f8697e9125e028eb65ef7a39 - Author: Jeremy Evans - Date: 2019-11-15 09:56:02 +0900 - - [ruby/strscan] Remove taint support - - Ruby 2.7 deprecates taint and it no longer has an effect. - The lack of taint support should not cause a problem in - previous Ruby versions. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2476 - -commit afbd8f384a54b934debe6e48cfc299fb2c7669e9 - Author: Jeremy Evans - Date: 2019-10-19 04:28:44 +0900 - - [ruby/openssl] Remove taint support - - Ruby 2.7 deprecates taint and it no longer has an effect. - The lack of taint support should not cause a problem in - previous Ruby versions. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2476 - -commit 17e8a6eff4954a37966c10f35db6551fce1d80a7 - Author: Jeremy Evans - Date: 2019-10-19 04:25:15 +0900 - - [ruby/io-console] Remove taint support - - Ruby 2.7 deprecates taint and it no longer has an effect. - The lack of taint support should not cause a problem in - previous Ruby versions. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2476 - -commit 398cd3cc7dda375c2d21355057c11ecb4abeda70 - Author: Jeremy Evans - Date: 2019-10-19 04:10:03 +0900 - - [ruby/etc] Remove taint support - - Ruby 2.7 deprecates taint and it no longer has an effect. - The lack of taint support should not cause a problem in - previous Ruby versions. - - Still untaint the tmpdir object on Ruby <2.7, as returning - a tainted string there could cause problems. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2476 - -commit 23f1fb066303838a0d045b5981fe3c4ad077399e - Author: Jeremy Evans - Date: 2019-11-15 05:30:56 +0900 - - [ruby/rss] Only check taint on Ruby <2.7 - - Ruby 2.7 deprecates taint and it no longer has an effect. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2476 - -commit 50013f7ebcafeea7f5163dc6ed1b1bf58c465ac7 - Author: Jeremy Evans - Date: 2019-10-19 03:33:09 +0900 - - [ruby/rexml] Only taint on Ruby <2.7 - - Ruby 2.7 deprecates taint and it no longer has an effect. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2476 - -commit ab42e5a486a5b27107296fa34056f03ac878e306 - Author: Jeremy Evans - Date: 2019-11-15 11:54:13 +0900 - - More fixes for $SAFE/taint post merging - - Notes: - Merged: https://github.com/ruby/ruby/pull/2476 - -commit ffd0820ab317542f8780aac475da590a4bdbc7a8 - Author: Jeremy Evans - Date: 2019-09-25 12:59:12 +0900 - - Deprecate taint/trust and related methods, and make the methods no-ops - - This removes the related tests, and puts the related specs behind - version guards. This affects all code in lib, including some - libraries that may want to support older versions of Ruby. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2476 - -commit c5c05460ac20abcbc0ed686eb4acf06da7a39a79 - Author: Jeremy Evans - Date: 2019-09-21 11:06:22 +0900 - - Warn on access/modify of $SAFE, and remove effects of modifying $SAFE - - This removes the security features added by $SAFE = 1, and warns for access - or modification of $SAFE from Ruby-level, as well as warning when calling - all public C functions related to $SAFE. - - This modifies some internal functions that took a safe level argument - to no longer take the argument. - - rb_require_safe now warns, rb_require_string has been added as a - version that takes a VALUE and does not warn. - - One public C function that still takes a safe level argument and that - this doesn't warn for is rb_eval_cmd. We may want to consider - adding an alternative method that does not take a safe level argument, - and warn for rb_eval_cmd. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2476 - -commit 7b6a8b5b54448235e17ed187d9d73f56893e1b6f - Author: git - Date: 2019-11-18 03:25:17 +0900 - - * 2019-11-18 [ci skip] - -commit 7c6bedfe5c8a3a36d79bdc63f04d7ccb0a82234e - Author: aycabta - Date: 2019-11-18 03:23:45 +0900 - - Remove unnecessary check - -commit e7c5c60095537dabda7be5102ae66bd39a1ad133 - Author: aycabta - Date: 2019-11-17 23:25:37 +0900 - - [ruby/irb] Remove ruby-token.rb from spec.files - - https://github.com/ruby/irb/commit/0180dc74bc - -commit be95d591609ffea7727628a8af6f4c0a6b75d849 - Author: aycabta - Date: 2019-11-17 23:11:58 +0900 - - [ruby/irb] Version 1.1.0.pre.4 - - https://github.com/ruby/irb/commit/4945d0e676 - -commit 910f9b833855089802ff86a2ca00d43c9a0b618c - Author: aycabta - Date: 2019-11-17 23:12:18 +0900 - - [ruby/reline] Version 0.0.5 - - https://github.com/ruby/reline/commit/d57c7ea252 - -commit a8e4a9f03ade7fd67fbd8ab1271750dd45eca282 - Author: git - Date: 2019-11-17 13:12:06 +0900 - - * 2019-11-17 [ci skip] - -commit 449b2b9214256b059ed883770222382d3bc90578 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-17 13:11:25 +0900 - - Fix typos - -commit 11ae47c2669b64b64e2b34dd6dff02e72fd60881 - Author: aycabta - Date: 2019-11-15 16:50:11 +0900 - - [ruby/reline] Restore left cursor key support on Unix like OSes... - - https://github.com/ruby/reline/commit/98b72af751 - -commit fa7618e4c1b382cb5863161017ef89116af3e24f - Author: aycabta - Date: 2019-11-15 16:50:11 +0900 - - Implement em_set_mark and em_exchange_mark - -commit 6744593b8cd836967b40a4d76a9ac301b9e0f973 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-15 11:01:06 +0900 - - Fix a typo [ci skip] - -commit 018be445e9e9061364e8ba20dee9d25cb6f20e55 - Author: git - Date: 2019-11-15 03:56:58 +0900 - - * 2019-11-15 [ci skip] - -commit 9c1abe2a6c5e6288ed208000fbf811d145af9355 - Author: Koichi Sasada - Date: 2019-11-15 03:51:06 +0900 - - load prelude.rb by builtin features. - - The script in prelude.rb was embed in MRI to load it (eval this - script at everyboot). - This commit change the loading process of prelude.rb. MRI doesn't - eval a script, but load from compiled binary with builtin feature. - - So that Init_prelude() does not load `prelude.rb` now. - -commit c9ffe751d126a302d0e7e53e645e44084e339dde - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-13 12:41:39 +0900 - - delete unused functions - - Looking at the list of symbols inside of libruby-static.a, I found - hundreds of functions that are defined, but used from nowhere. - - There can be reasons for each of them (e.g. some functions are - specific to some platform, some are useful when debugging, etc). - However it seems the functions deleted here exist for no reason. - - This changeset reduces the size of ruby binary from 26,671,456 - bytes to 26,592,864 bytes on my machine. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2677 - -commit 4d615a0c8f4759ce4f6b96b643ef957837bdf20e - Author: Nobuyoshi Nakada - Date: 2019-11-14 16:37:25 +0900 - - `#@1` is no longer an embedded variable - -commit 703e05b0eee3017a63690155e55a97d678f073cb - Author: Hiroshi SHIBATA - Date: 2019-11-14 16:09:36 +0900 - - Added default gems entry to NEWS - -commit 3b614ec48a283e61334c70806f076cea3b2192ca - Author: Hiroshi SHIBATA - Date: 2019-11-14 16:07:48 +0900 - - Update RubyGems and Bundler entries on NEWS - -commit 48edaf8b8a03ef7a1c4f936c8c92e9dcf4271872 - Author: Yusuke Endoh - Date: 2019-11-14 13:00:25 +0900 - - test/ruby/test_proc.rb: suppress "method redefined" warnings - -commit 179062dd808c0a48e16269a2c42b10235cbbacd8 - Author: Koichi Sasada - Date: 2019-11-14 04:18:41 +0900 - - move rb_vm_lvar_exposed() correctly. - - rb_vm_lvar_exposed() is prepared for __builtin_inline!(), needed for - mini_builtin.c and builtin.c. However, it's only on builtin.c. - So move it to make it as a part of VM. - -commit a8f9e25ca8cc160683711baed00008461db2ad16 - Author: Takashi Kokubun - Date: 2019-11-14 02:37:25 +0900 - - Suspend many fibers test on JIT for now - - https://github.com/ruby/ruby/runs/301411717 - - No C backtrace information and this is hard to fix immediately. - As CI doesn't provide helpful information, this should be debugged - locally or at least have more logs there. - -commit afc93e96ffa93aa02b3e432037b3f88d002f5eea - Author: Takashi Kokubun - Date: 2019-11-14 02:30:53 +0900 - - Make GitHub Actions notification more like Travis - - Build's sequential number is a link in Travis, and also YYYY-MM-DD-XX is - a little hard to parse. - -commit a102bcab418dc61ccfe6a49870393c42305d2895 - Author: git - Date: 2019-11-14 01:48:41 +0900 - - * 2019-11-14 [ci skip] - -commit 3a408aff578bcde428ebdd4560d819c1ba792f2c - Author: Koichi Sasada - Date: 2019-11-14 01:48:08 +0900 - - try to remove vm_core.h - -commit 7f2c98b11d9eedd7028a1ccb2c1f88db71db28ca - Author: Kazuhiro NISHIYAMA - Date: 2019-11-13 19:56:33 +0900 - - Use shallow-since instead of depth - - commit number of today requires log since 0:00 UTC. - So commits of 24 hours are enough. - - https://www.git-scm.com/docs/git-clone#Documentation/git-clone.txt---depthltdepthgt - > Implies --single-branch unless --no-single-branch is given to fetch the histories near the tips of all branches. - - So I add `--single-branch` too. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2680 - -commit 990728170c5e4d6b763fa42c48ce82473d753aad - Author: Kazuhiro NISHIYAMA - Date: 2019-11-13 19:49:07 +0900 - - Add commit number of today to notification of mjit CI too - - Notes: - Merged: https://github.com/ruby/ruby/pull/2679 - -commit e7ea6e078fecb70fbc91b04878b69f696749afac - Author: Nobuyoshi Nakada - Date: 2019-11-13 16:53:12 +0900 - - Check more likely condition first [Feature #16335] - -commit 3324bc9d172e52114add3a0cdd426b5648cdc33b - Author: Takashi Kokubun - Date: 2019-11-13 16:09:59 +0900 - - Skip tailcall test for MJIT - - failing in https://github.com/ruby/ruby/runs/300579218 - -commit bdf71a3ef032ed4675a6f3217cf5c9efb062c0b1 - Author: Takashi Kokubun - Date: 2019-11-13 16:04:25 +0900 - - Fix MJIT test's Slack notification - -commit 57dc3ff73dcc5ef5ca080e841db58862c89b03d8 - Author: Hiroshi SHIBATA - Date: 2019-11-13 13:34:06 +0900 - - Removed sync library from sync tool - -commit 7913daf36c25cefd66887993e0946c54b7d7d294 - Author: Dylan Thacker-Smith - Date: 2019-11-08 01:14:47 +0900 - - Add missing Makefile dependencies for the tool/insns2vm.rb script - - Notes: - Merged: https://github.com/ruby/ruby/pull/2657 - -commit ac112f2b5dc7e16ccde8f048be80946187a033b0 - Author: Dylan Thacker-Smith - Date: 2019-11-06 15:47:32 +0900 - - Avoid top-level search for nested constant reference from nil in defined? - - Fixes [Bug #16332] - - Constant access was changed to no longer allow top-level constant access - through `nil`, but `defined?` wasn't changed at the same time to stay - consistent. - - Use a separate defined type to distinguish between a constant - referenced from the current lexical scope and one referenced from - another namespace. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2657 - -commit a5b6d7bca84fce6e13c68e8753893c4697960e3a - Author: aycabta - Date: 2019-11-13 15:10:05 +0900 - - Suppress warnings except for when last evaluation - - Co-authored-by: Kazuhiro NISHIYAMA - -commit c33d29fba5a04bd31242eb51e54d2ec198c34ba3 - Author: Takashi Kokubun - Date: 2019-11-13 15:13:49 +0900 - - We're not using Azure Pipelines anymore - -commit dca2eb350c13de4446df92b958a40f14d67c97b8 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-13 15:11:34 +0900 - - Update badges of GitHub Actions - -commit d336db6568cc96dfee503c053e8f444dc7243858 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-13 15:04:49 +0900 - - Fix a typo - -commit 68ea892daf6e4073919d58ae83c7ff7389fbf184 - Author: Takashi Kokubun - Date: 2019-11-13 14:55:03 +0900 - - Remove obsoleted Wercker status badge - -commit 331655cbe7139a287267c90b3ab46ed856aebb5b - Author: Takashi Kokubun - Date: 2019-11-13 14:48:05 +0900 - - Migrate Wercker MJIT tests to Actions (#2676) - - * Migrate Wercker MJIT tests to Actions - - * Support pull request for testing - - * Capitalize other jobs too - - * Make it a command name for consistency [ci skip] - - * Remove wercker.yml - - * Add --jit-verbose=2 for debugging - - * Install MJIT headers - - * Separate install for sudo - - * Trigger build - - Notes: - Merged-By: k0kubun - -commit c4064aef7f48c51add6c24467da64528d5a2a2a5 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-13 13:22:46 +0900 - - Add commit number of today to notification of GitHub Actions - - Notes: - Merged: https://github.com/ruby/ruby/pull/2675 - -commit 245977b2861f5fa6a7341333ca9b1897e959489b - Author: Takashi Kokubun - Date: 2019-11-13 13:56:52 +0900 - - Stop debugging the same thing twice - - See L25-28 - -commit 9ee88a070f797d5eb9516c6a17359463fb5c37b9 - Author: Takashi Kokubun - Date: 2019-11-13 13:56:15 +0900 - - Remove MSPECOPT formerly for debugging - - At least the comment looks obsoleted. Aren't we using $JOBS already? - -commit 02b6451c17cf81d138cd653fa989080246a1a63a - Author: Takashi Kokubun - Date: 2019-11-13 13:44:00 +0900 - - Improve Actions job name shown on toolip - - Hoping to make it like `make (check, ...)`, `make (test-bundler, ...)` - instead of `latest (...)` because some of the jobs are already not - running on a latest platform. - -commit 3118c7a2d20c6894a53480501d53daa4e6d3a743 - Author: Takashi Kokubun - Date: 2019-11-13 13:38:05 +0900 - - Run test-bundler / test-bundled-gems for Ubuntu - - only once. Doing it on multiple Ubuntu versions may not worth it. - -commit 9980728ad61dc544d2ce5b981b54af36fa6e2a82 - Author: Takashi Kokubun - Date: 2019-11-13 13:22:33 +0900 - - Remove Drone CI in favor of Travis arm32 - -commit 3ad78264dc7e680a004a8ea1397d4ac9297134ba - Author: Kazuhiro NISHIYAMA - Date: 2019-11-13 13:13:52 +0900 - - Use style of set-env - - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/development-tools-for-github-actions#set-an-environment-variable-set-env - -commit 546e50c2fb1fc749399b1a6cf3ce9e01c27b9398 - Author: Hiroshi SHIBATA - Date: 2019-11-13 10:35:52 +0900 - - Merge released version of RubyGems 3.1.0.pre3 - -commit 63f363b70dc08efd6b2d3f59183d4de1e882ef81 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-13 10:31:02 +0900 - - Update dependencies - - patch from https://travis-ci.org/ruby/ruby/jobs/611152175#L2204 - -commit bb9ecd026a6cadd5d0f85ac061649216806ed935 - Author: Hiroshi SHIBATA - Date: 2019-11-13 07:57:02 +0900 - - Merge Bundler 2.1.0.pre3 released version - - Notes: - Merged: https://github.com/ruby/ruby/pull/2674 - -commit 00d56bdf66a3aeaadbc84196aacbd8d4e698cf79 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-13 09:55:54 +0900 - - Try to fix error on solaris - - Add vm_core.h before builtin.h to pack.c for VM_CORE_H_EC_DEFINED. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris11s-sunc/ruby-master/log/20191112T102505Z.fail.html.gz - ``` - compiling dmyenc.c - linking miniruby - Undefined first referenced - symbol in file - rb_vm_lvar_exposed pack.o - ld: fatal: symbol referencing errors - gmake: *** [miniruby] Error 2 - ``` - -commit ae33f93836b556f36d5ffc4a7bca2c1b379c56d8 - Author: Yuichiro Kaneko - Date: 2019-11-13 09:50:58 +0900 - - Update comment of Ripper.lex - - This is follow up of 1f7cb4bee9. - -commit 4bbfe1f7c42300e2212b8f6794d5254b4db8df1c - Author: Jun Aruga - Date: 2019-10-16 00:08:00 +0900 - - Add arm32 case on Travis. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2673 - -commit a5448c46bdde27cb5ba8a800b29a84ced8047e94 - Author: git - Date: 2019-11-13 02:29:13 +0900 - - * 2019-11-13 [ci skip] - -commit 4334c9315af972337fcad82c0056152c45808348 - Author: Takashi Kokubun - Date: 2019-11-07 02:10:27 +0900 - - Remove arm64 from allow_failures - - Notes: - Merged: https://github.com/ruby/ruby/pull/2672 - -commit bf34ade7ef32f89aa5ba238d0a780f23eacb0487 - Author: Nobuyoshi Nakada - Date: 2019-11-12 22:58:09 +0900 - - Show the name `Kernel#proc` in the warning message - -commit 3816622fbedd034d338fcb1bbdc80d163e302ae6 - Author: manga_osyo - Date: 2019-11-11 14:59:17 +0900 - - Fixed `assert_equal` first argument to be expected. - -commit fe45bee09312a233466171f40d6826e5e4f1f2f0 - Author: osyo-manga - Date: 2019-11-10 16:00:41 +0900 - - Reline#readline and Reline#readmultiline to private. - -commit f36a53d03821624d30b3e91a7a75307b06e3a03c - Author: Hiroshi SHIBATA - Date: 2019-11-12 15:44:19 +0900 - - Only enabled mon_owned condition with Ruby 2.5+ - -commit 3bf8ffad714efa98949e25095f1c5e2844318958 - Author: Nobuyoshi Nakada - Date: 2019-11-12 18:02:28 +0900 - - Added assertions for realpath and realdirpath - - It is said that realpath(3) and realdirpath(3) on some platforms - may return a relative path. - -commit 0f2837847d5bfb65d20a89d196393212635fbe9e - Author: Kazuhiro NISHIYAMA - Date: 2019-11-12 17:46:39 +0900 - - Add ticket number of `FrozenError#receiver` [ci skip] - -commit fb6a489af2765a3b56e301adf0019af6bbad6156 - Author: Nobuyoshi Nakada - Date: 2019-10-24 01:06:59 +0900 - - Revert "Method reference operator" - - This reverts commit 67c574736912003c377218153f9d3b9c0c96a17b. - [Feature #16275] - -commit b41a19f92fdd9c8567e0650ceebb72386a96e395 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-12 17:22:19 +0900 - - Add matrix.os to cache key (#2671) - - * Add matrix.os to cache key - * Use multi-line string instead of array - ref https://github.com/actions/cache/issues/44 - - Notes: - Merged-By: znz - -commit a58b4eee25b79432d98a1c665edaf5ec0a054b2e - Author: Nobuyoshi Nakada - Date: 2019-11-12 17:14:10 +0900 - - Warn on `...` at EOL - -commit d1ae2bc27fd4183e6abb9e83691e192bfe1e5316 - Author: Yusuke Endoh - Date: 2019-11-12 17:04:11 +0900 - - NEWS: Make it clear that delegation syntax `(...)` requires parentheses - - Ref [Feature #16253] - -commit fb02e3192cef96284501c82dfa024ea8a2b0ea80 - Author: Nobuyoshi Nakada - Date: 2019-11-12 16:35:01 +0900 - - Create `RUBYCOMMONDIR` directory in advance - - As well as the directory per architecture. - - Closes https://github.com/ruby/ruby/pull/2669 - -commit 14db635097ef89a299531770ba8ed5800a58ab8f - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-12 16:15:58 +0900 - - add NEWS about _1 as a local variable [ci skip] - -commit b0fb9bda9ade532da9012c375c0026470484a346 - Author: Nobuyoshi Nakada - Date: 2019-11-12 00:09:34 +0900 - - Strip the last line which become trailing spaces - -commit dd0217a8696667960e834ba95534ac5731997f3d - Author: Nobuyoshi Nakada - Date: 2019-11-12 00:07:26 +0900 - - Inline function should be static - -commit 2de3feab44c928c30f35a4a3a445b4fdfc225024 - Author: Nobuyoshi Nakada - Date: 2019-11-12 00:08:39 +0900 - - Get rid of `__` prefix which is presereved by C standard - -commit 7c22898a3a5a10c8c71683918b53ec2d17fdc621 - Author: Nobuyoshi Nakada - Date: 2019-11-12 15:42:53 +0900 - - Disable tOROP at EXPR_BEG - - Both cannot appear there anyway. - -commit dbaf589fb84a5b42111c85f993430133d8cae32f - Author: Hiroshi SHIBATA - Date: 2019-11-12 12:49:05 +0900 - - Update Rake 13.0.1 - -commit 593f0b88533c9d327b33d098bb6b3b51df871966 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-12 11:27:55 +0900 - - Try to use actions/cache on windows - - Notes: - Merged: https://github.com/ruby/ruby/pull/2670 - -commit b38b26c62dc12da1d4fcee39de0c0cad598f5995 - Author: Jeremy Evans - Date: 2019-10-19 03:44:47 +0900 - - [ruby/bigdecimal] Remove taint checking - - This removes the taint checking. Taint support is deprecated in - Ruby 2.7 and has no effect. I don't think removing the taint - checks in earlier ruby versions will cause any problems. - - https://github.com/ruby/bigdecimal/commit/1918d466f3 - -commit db33ab470cb4765f1b54384b51850e0db80f5aad - Author: Aaron Patterson - Date: 2019-10-18 05:48:24 +0900 - - [ruby/psych] Add a note about safe_load - - https://github.com/ruby/psych/commit/0910ae5575 - -commit 30fdee65d96924e0793ec702fcda909a2cac71ea - Author: Jeremy Evans - Date: 2019-10-19 04:34:59 +0900 - - [ruby/psych] Remove taint support - - Ruby 2.7 deprecates taint and it no longer has an effect. - The lack of taint support should not cause a problem in - previous Ruby versions. - - I'm not sure if the untaint calls in deduplicate are still needed - after the removal of tainting in the parser. If they are not - needed, they should be removed. - - https://github.com/ruby/psych/commit/73c1a2b4e0 - -commit 5ef41c91f0a1bca1617aaa4367ccf8e32c04b2d9 - Author: Jean Boussier - Date: 2019-07-25 05:08:59 +0900 - - [ruby/psych] Set required_ruby_version to 2.4.0 - - https://github.com/ruby/psych/commit/4f1746a3c6 - -commit fd6445b7e8bab9d340be6f76688a8b96f1b52029 - Author: Koichi Sasada - Date: 2019-11-12 10:02:47 +0900 - - Monitor#exit: check monitor ownership. - - Monitor#exit should be called by only onwer Thread. However, there - is not check for it. - -commit fef4370b409c990228cded2c425a6afb3bec2906 - Author: Koichi Sasada - Date: 2019-11-12 09:48:49 +0900 - - check more. - -commit ed90ec3e0d8ff7789569b40ba36d3b3ce0e706e6 - Author: Nobuyoshi Nakada - Date: 2019-11-12 09:11:16 +0900 - - Clear current argument name at empty block argument [Bug #16343] - -commit 4a30fabfcfd72bd61bf1dad61f168eaba6100f12 - Author: Koichi Sasada - Date: 2019-11-12 09:35:26 +0900 - - Monitor owner state check correctly. - - Monitor can be owned at the beginning of this method. - -commit 2407e8972561143b34970fb5d9095be32676c685 - Author: Yusuke Endoh - Date: 2019-11-12 08:39:38 +0900 - - Revert "Use untaint for File.symlink in kernel_require.rb" - - This reverts commit d9978ce5d397866afae536db2aa708af3b7a4b2f. - - Untaint was tentatively restored due to test failures. But now, the - failed tests have been removed, so we can revert the tentative fix. - -commit 9594f57f3df6c2538f96f018fa5f9a775ac7dde1 - Author: Yusuke Endoh - Date: 2019-11-12 08:31:13 +0900 - - test/ruby/test_require.rb: Remove the tests of require with $SAFE - - The taint mechanism is decided to be removed at 2.7. [Feature #16131] - So, this change removes the tests that expects a SecurityError when - requiring a file under $SAFE >= 1. - - The reason why they should be removed in advance is because the upstream - of rubygems has already removed a call to "untaint" method, which makes - the tests fail. - -commit d9978ce5d397866afae536db2aa708af3b7a4b2f - Author: Hiroshi SHIBATA - Date: 2019-11-12 08:03:26 +0900 - - Use untaint for File.symlink in kernel_require.rb - - Partly reverted 7d463e360b9c4718b17378eb52783116a01b884b - -commit b8d242d221641752a495ca43f8f211a3ad73d467 - Author: Koichi Sasada - Date: 2019-11-12 04:33:28 +0900 - - release RUBYGEMS_ACTIVATION_MONITOR correctly. - - `File.symlink? safe_lp` can raise SecurityError and raising an - exception can leave RUBYGEMS_ACTIVATION_MONITOR locking. This - patch release it correctly. - -commit 4be1e84d7894751799cc9d8ae2dec720952a02a3 - Author: Koichi Sasada - Date: 2019-11-12 04:13:54 +0900 - - more messages - -commit a815053a3ea16382bea8b420a3070b4da3c3bb94 - Author: Koichi Sasada - Date: 2019-11-12 04:03:33 +0900 - - check monitor is owning for debug - -commit 99be207c2acabe0030c376fd731608d9cd7c69b6 - Author: Koichi Sasada - Date: 2019-11-11 17:17:26 +0900 - - add a NEWS entry about builtin features. - -commit c02de30efbca2a2d89cdf188a27991f7ae15b9da - Author: Yusuke Endoh - Date: 2019-11-12 01:30:42 +0900 - - tool/lib/leakchecker.rb: show the code location that allocated leaked fd - - by using ObjectSpace.trace_object_allocations. - - `make test-all LEAK_CHECKER_TRACE_OBJECT_ALLOCATION=true` will print not - only leaked fds but also where it was created. - -commit b72eda3c59cd0a15ed3536a3c0cd8aebd225f16b - Author: Yusuke Endoh - Date: 2019-11-12 01:25:42 +0900 - - lib/rubygems.rb: Suppress "Resolving dependencies..." - - And suppress "Leaked file descriptor" again. - -commit 14b5c4cb66175553bda1cab70715d54fe46bffc7 - Author: git - Date: 2019-11-12 01:23:23 +0900 - - * 2019-11-12 [ci skip] - -commit b2b12792720fe83afc1a64b41ca76fde6b7d74c5 - Author: NARUSE, Yui - Date: 2019-11-12 01:22:09 +0900 - - format-release uses the result of GitHub Actions - -commit 0ba1ea7fbfc059e0e0114b4fc0bd66f3058d8b48 - Author: NARUSE, Yui - Date: 2019-11-12 01:00:22 +0900 - - Always use git.ruby-lang.org as origin - - naruse sets remote.origin.pushUrl = nonexistent as fail-safe - configuration to avoid accidentally push a new branch to origin. - -commit 45bb6f28db04a1f267f5b8d79392cb35087510d8 - Author: aycabta - Date: 2019-11-11 22:55:32 +0900 - - Remove ruby-token.rb - -commit bcfe94b7f20fa3a581fc5d6f2aef837327bfb770 - Author: Hiroshi SHIBATA - Date: 2019-11-11 22:17:50 +0900 - - Revert "Revert "Promote uri to default gems"" - - This reverts commit fdfad905227a0e2e4c224d87181041fb75d5082e. - - f1f27da6c457684fdbfc0352297e6847f675ce4c resolved this. - -commit f1f27da6c457684fdbfc0352297e6847f675ce4c - Author: Hiroshi SHIBATA - Date: 2019-11-11 21:49:21 +0900 - - Revert "Try to revert the test failure with Ruby CI" - - This reverts commit 8b27c23b5d55bd707a89bb5d95d2bdba9e132c1a. - -commit 8b27c23b5d55bd707a89bb5d95d2bdba9e132c1a - Author: Hiroshi SHIBATA - Date: 2019-11-11 20:19:29 +0900 - - Try to revert the test failure with Ruby CI - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian9/ruby-master/log/20191111T093005Z.fail.html.gz - -commit 9d3213ac856e1f5930bda555d4d65b173c6cdf83 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-11 19:03:43 +0900 - - Skip test_validate_gemspec unless git installed - -commit 7585bc31877d4f9725f8de51b4a2faf47acb6f34 - Author: Hiroshi SHIBATA - Date: 2019-11-11 17:57:45 +0900 - - Merge Bundler 2.1.0.pre.3 - - Features: - - Add caller information to some deprecation messages to make them easier to fix [#7361](https://github.com/bundler/bundler/pull/7361) - - Reconcile `bundle cache` vs `bundle package` everywhere. Now in docs, CLI help and everywhere else `bundle cache` is the preferred version and `bundle package` remains as an alias [#7389](https://github.com/bundler/bundler/pull/7389) - - Display some basic `bundler` documentation together with ruby's RDoc based documentation [#7394](https://github.com/bundler/bundler/pull/7394) - - Bugfixes: - - Fix typos deprecation message and upgrading docs [#7374](https://github.com/bundler/bundler/pull/7374) - - Deprecation warnings about `taint` usage on ruby 2.7 [#7385](https://github.com/bundler/bundler/pull/7385) - - Fix `--help` flag not correctly delegating to `man` when used with command aliases [#7388](https://github.com/bundler/bundler/pull/7388) - - `bundle add` should cache newly added gems if an application cache exists [#7393](https://github.com/bundler/bundler/pull/7393) - - Stop using an insecure folder as a "fallback home" when user home is not defined [#7416](https://github.com/bundler/bundler/pull/7416) - - Fix `bundler/inline` warning about `Bundler.root` redefinition [#7417](https://github.com/bundler/bundler/pull/7417) - - Notes: - Merged: https://github.com/ruby/ruby/pull/2668 - -commit fd69f82675bf93a848e5aa58d117bf8bbf604188 - Author: NARUSE, Yui - Date: 2019-11-11 17:37:21 +0900 - - Revert "Warn EOF char in comment" - - This reverts commit 69ec3f70fab0c1c537c68fb135cc315181b1d750. - -commit ba5b51ca5968314f5ca92fee0afaea44a78eb0b1 - Author: NARUSE, Yui - Date: 2019-11-11 17:37:14 +0900 - - Revert "Elaborated EOF char message a little" - - This reverts commit 6eaac7cfac668d6669be694fd7b723c4982ed218. - -commit 7d463e360b9c4718b17378eb52783116a01b884b - Author: Hiroshi SHIBATA - Date: 2019-11-11 15:03:57 +0900 - - Merge RubyGems 3.1.0.pre3 - - * Fix gem pristine not accounting for user installed gems. Pull request - #2914 by Luis Sagastume. - * Refactor keyword argument test for Ruby 2.7. Pull request #2947 by - SHIBATA Hiroshi. - * Fix errors at frozen Gem::Version. Pull request #2949 by Nobuyoshi - Nakada. - * Remove taint usage on Ruby 2.7+. Pull request #2951 by Jeremy Evans. - * Check Manifest.txt is up to date. Pull request #2953 by David Rodríguez. - * Clarify symlink conditionals in tests. Pull request #2962 by David - Rodríguez. - * Update command line parsing to work under ps. Pull request #2966 by - David Rodríguez. - * Properly test `Gem::Specifications.stub_for`. Pull request #2970 by - David Rodríguez. - * Fix Gem::LOADED_SPECS_MUTEX handling for recursive locking. Pull request - #2985 by MSP-Greg. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2666 - -commit 31416423809f64d4b5ea6b9651cced3179cc5ced - Author: Koichi Sasada - Date: 2019-11-11 16:38:46 +0900 - - __builtin_inline! - - Add an experimental `__builtin_inline!(c_expression)` special intrinsic - which run a C code snippet. - In `c_expression`, you can access the following variables: - * ec (rb_execution_context_t *) - * self (const VALUE) - * local variables (const VALUE) - Not that you can read these variables, but you can not write them. - You need to return from this expression and return value will be a - result of __builtin_inline!(). - - Examples: - `def foo(x) __builtin_inline!('return rb_p(x);'); end` calls `p(x)`. - `def double(x) __builtin_inline!('return INT2NUM(NUM2INT(x) * 2);')` - returns x*2. - -commit 05a5c69e1a06a3853afb3744fa9925910b78904f - Author: Koichi Sasada - Date: 2019-11-10 07:16:56 +0900 - - add deps for miniprelude.c - -commit 9142f802f1126d65abb1aad5e2bc91b5b833fe7e - Author: Koichi Sasada - Date: 2019-11-10 02:25:57 +0900 - - rewrite comment. - - Pointed by nagachika-san. - https://ruby-trunk-changes.hatenablog.com/entry/ruby_trunk_changes_20191109 - -commit 65f7e3156f66bb4eba944c8ad2a463b9452b1a29 - Author: Nobuyoshi Nakada - Date: 2019-11-11 15:56:59 +0900 - - Removed duplicate file - - "./tests/test_helper.rb" and "tests/test_helper.rb" in `s.files` - are same. - -commit 31ee6f6f5d7f562f065dfe364bb9afb09274948c - Author: Nobuyoshi Nakada - Date: 2019-11-11 13:10:55 +0900 - - Extract gem files after update - - So that test/optparse/test_did_you_mean.rb can find did_you_mean.rb. - -commit 6eaac7cfac668d6669be694fd7b723c4982ed218 - Author: Nobuyoshi Nakada - Date: 2019-11-11 12:57:40 +0900 - - Elaborated EOF char message a little - -commit 390293525a8c8564c62f7691414194705a193b40 - Author: Nobuyoshi Nakada - Date: 2019-11-11 12:19:40 +0900 - - Remove binary data at installation - - And revert "Relaxed warning assertions", - 6f9be8505d172b110ec449478a791d70b9b74afb. - -commit 6f9be8505d172b110ec449478a791d70b9b74afb - Author: Nobuyoshi Nakada - Date: 2019-11-11 12:09:19 +0900 - - Relaxed warning assertions - -commit 69ec3f70fab0c1c537c68fb135cc315181b1d750 - Author: Nobuyoshi Nakada - Date: 2019-11-11 09:59:40 +0900 - - Warn EOF char in comment - -commit ade038889468e7755d7ebfe75975e0e77d1e1dec - Author: Nobuyoshi Nakada - Date: 2019-11-11 09:35:37 +0900 - - Fixed embedded document with EOF char - -commit b42656b9c403da1bac8e1dd7534f0a7a09df67b0 - Author: Yuichiro Kaneko - Date: 2019-11-11 09:22:46 +0900 - - Ignore *.rbinc files - -commit b5dff926e710a4fb069596f1911c998a28e3262a - Author: Nobuyoshi Nakada - Date: 2019-11-11 09:16:00 +0900 - - Prefer assert_syntax_error and assert_valid_syntax - -commit a73389393906939ed9208562e6ec5eb3d21775e3 - Author: Takashi Kokubun - Date: 2019-11-11 07:12:13 +0900 - - Fix uplevel of test_jit - -commit fcd9bc28e3d7d301bcdf6eea8ffa25c0c3ec184f - Author: Takashi Kokubun - Date: 2019-11-11 06:54:44 +0900 - - qsymbols and symbols should be colored as Symbol - -commit 25c53a8eec4f73f4d0d127144b24bf68218149e3 - Author: Takashi Kokubun - Date: 2019-11-11 06:41:34 +0900 - - Colorize on_symbols_beg (%I) - -commit 958d954a1909edc1e297c54db7bbab53a289a0b8 - Author: git - Date: 2019-11-11 06:34:25 +0900 - - * 2019-11-11 [ci skip] - -commit b5996b25ae8ff7e7961fea245c5ea8476b029134 - Author: Takashi Kokubun - Date: 2019-11-11 06:33:23 +0900 - - Colorize string quotes as bold - - like pry - -commit 6e70fa49b111e2a2839297b057a3df354cae265a - Author: Kazuki Tsujimoto - Date: 2019-11-10 22:34:49 +0900 - - Disallow omission of parentheses/brackets in single line pattern matching [Feature #16182] - -commit ef03d48cb20aa7739a4ac8eb4e109525a47fcc9f - Author: Yuichiro Kaneko - Date: 2019-11-10 22:18:08 +0900 - - Fix a typo - -commit 4570284ce14c9f00114039e9b619584a8cad6a50 - Author: Takashi Kokubun - Date: 2019-11-10 14:56:38 +0900 - - Test opt_invokebuiltin_delegate_leave in test_jit - -commit 5c168c7e7f73d400db45980115dedab4deefcda7 - Author: Takashi Kokubun - Date: 2019-11-10 14:40:38 +0900 - - Support RB_BUILTIN in ISeq#to_a - -commit 0483d01f6bdd3d16b31244a7aaadb4c31f6ecee7 - Author: Takashi Kokubun - Date: 2019-11-10 14:16:10 +0900 - - Test invokebuiltin in test_jit - - ISeq#to_a is commented out because it's broken now - -commit 11aa07c27071878d9f7748995febe7df96f0405d - Author: Nobuyoshi Nakada - Date: 2019-11-10 10:52:12 +0900 - - Define NULLCMD as printing NUL [Bug #16331] - -commit 2c55ba7191a69dd4db34572754162308f0a9acdd - Author: Nobuyoshi Nakada - Date: 2019-11-10 10:09:26 +0900 - - Define NULLCMD as an empty label [Bug #16331] - -commit faa4f4f23fbb6b48b158cc38d9b509fd00838976 - Author: Nobuyoshi Nakada - Date: 2019-11-10 09:15:12 +0900 - - Get rid of FreeBSD make incompatibility [Bug #16331] - - FreeBSD make works differently with `-j` option. - - > -j max_jobs - > Specify the maximum number of jobs that `make` may have running - > at any one time. The value is saved in `.MAKE.JOBS.` Turns - > compatibility mode off, unless the `B` flag is also specified. - > When compatibility mode is off, all commands associated with a - > target are executed in a single shell invocation as opposed to - > the traditional one shell invocation per line. This can break - > traditional scripts which change directories on each command - > invocation and then expect to start with a fresh environment on - > the next line. It is more efficient to correct the scripts - > rather than turn backwards compatibility on. - - Stop using exit, cd, exec in middle of commands. - -commit ff767dd914d0aa91e2c6ec29bba7ff3739225b0c - Author: git - Date: 2019-11-10 06:23:55 +0900 - - * 2019-11-10 [ci skip] - -commit e0094df29d2175b8163027687671bc638a993c72 - Author: Takashi Kokubun - Date: 2019-11-10 06:22:51 +0900 - - Extend sleep duration for Solaris - -commit 03fdf02321d4ac3123fb6908e7be53e232a92b67 - Author: Nobuyoshi Nakada - Date: 2019-11-09 23:00:32 +0900 - - Removed trial and errors - -commit a68205c5c19277e9ece8409b1f6af7e226989dff - Author: Nobuyoshi Nakada - Date: 2019-11-09 22:40:14 +0900 - - Specify the permission - - To make the temporary directory non-writable by group and others. - -commit 774cfb065567d07c4cf172cbb1708acda5e0fde4 - Author: Nobuyoshi Nakada - Date: 2019-11-09 22:15:15 +0900 - - Fixed the debug print - -commit 20bc038ea31ee799103bb89068537ed4e4f699b4 - Author: Nobuyoshi Nakada - Date: 2019-11-09 21:58:55 +0900 - - Debug-print tmpdir info - -commit f48655d04d463a89b7ac15bc3942ec6c574c6cd9 - Author: David Rodríguez - Date: 2019-11-08 23:03:02 +0900 - - Remove unneeded exec bits from some files - - I noticed that some files in rubygems were executable, and I could think - of no reason why they should be. - - In general, I think ruby files should never have the executable bit set - unless they include a shebang, so I run the following command over the - whole repo: - - ```bash - find . -name '*.rb' -type f -executable -exec bash -c 'grep -L "^#!" $1 || chmod -x $1' _ {} \; - ``` - - Notes: - Merged: https://github.com/ruby/ruby/pull/2662 - -commit fcf37ca2fef8248966dcd9143aaea569fc87953c - Author: Nobuyoshi Nakada - Date: 2019-11-09 20:02:28 +0900 - - Fix builtin script paths - - Do not search builtin scripts by using VPATH, to get rid of weird - nmake VPATH. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2665 - -commit 79f0e7aafd0532666a00a49ef8feb838b5e9e208 - Author: Kazuki Tsujimoto - Date: 2019-11-09 21:12:29 +0900 - - Fix typos - -commit fdfad905227a0e2e4c224d87181041fb75d5082e - Author: Hiroshi SHIBATA - Date: 2019-11-09 20:14:17 +0900 - - Revert "Promote uri to default gems" - - This reverts commit c5b4d2a2592942766dc2789f46105b91eba7026a. - - This commit affects with activation feature of RubyGems. - [Bug #16337][ruby-core:95768] - -commit 4dd1caa12964c6932009a3548de121a861435b8e - Author: Nobuyoshi Nakada - Date: 2019-11-09 20:08:01 +0900 - - Updated miniprelude.o dependency - -commit e3c852441177caa4b251fa33c83a65e4263a4146 - Author: Nobuyoshi Nakada - Date: 2019-11-09 19:43:14 +0900 - - Full-path of builtin scripts no longer needed - -commit dfaac2b37253ff25ec873c2fbd93abfa7f789248 - Author: Nobuyoshi Nakada - Date: 2019-11-09 19:28:45 +0900 - - Embed builtin ruby scripts in miniprelude.c - - Instead of reading from the files by the full-path at runtime. As - rbinc files need to be included in distributed tarballs, the - full-paths at the packaging are unavailable at compilation times. - -commit 4dc4b1890499d6a836655957e78908ee891a42ce - Author: Nobuyoshi Nakada - Date: 2019-11-09 19:15:10 +0900 - - Fixed commit miss - -commit 95aed94d2aba5ff93425f26ae6181607996d8ca3 - Author: Nobuyoshi Nakada - Date: 2019-11-09 18:44:06 +0900 - - Fixed `#line` directives in miniprelude.c - -commit 352096ef6047538bfedb974a7c1b1156f5a0e811 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-09 16:43:47 +0900 - - Add debug print - -commit 43ceedecc0b9990b5bac2e65de5e439c41a9996b - Author: Koichi Sasada - Date: 2019-11-09 16:15:17 +0900 - - use STACK_ADDR_FROM_TOP() - - vm_invoke_builtin() accesses VM stack via cfp->sp. However, MJIT - can use their own stack. To access them appropriately, we need to - use STACK_ADDR_FROM_TOP(). - -commit 50bc7e7e9f0da6b27db06ac063257de0b97ed9b3 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-09 15:20:52 +0900 - - Add debug print - - http://ci.rvm.jp/results/trunk-mjit@silicon-docker/2380788 - ``` - test_all # terminated with exception (report_on_exception is true): - :134:in `pack': no implicit conversion of false into String (TypeError) - from /tmp/ruby/v2/src/trunk-mjit/tool/lib/test/unit/parallel.rb:160:in `_report' - from /tmp/ruby/v2/src/trunk-mjit/tool/lib/test/unit/parallel.rb:45:in `block in _run_suite' - ``` - -commit 352887b731f02c42abf6b905cde1737cc2249290 - Author: Hiroshi SHIBATA - Date: 2019-11-09 11:08:24 +0900 - - Remove YAML::VERSION because it conflicts with Psych::VERSION - -commit 21f7cca2c6394aaaec9189a7cb08a9ad8a2196e3 - Author: Koichi Sasada - Date: 2019-11-09 09:59:32 +0900 - - initialize kw special local var. - - A method which has keyword parameters has an implicit local variable - to specify which keywords are (un)specified. - - vm_call_iseq_setup_kwparm_nokwarg() is special function to invoke - a ISeq method without any keyword arguments. However, it should - also initialize the special local var. Without this initialization, - the implicit lvar can points a freed (T_NONE) object. - -commit c5b4d2a2592942766dc2789f46105b91eba7026a - Author: Hiroshi SHIBATA - Date: 2019-11-08 20:26:33 +0900 - - Promote uri to default gems - -commit 8c9438d219885fb26ca2e7cfc6ca38dd0bcb3db6 - Author: Hiroshi SHIBATA - Date: 2019-11-08 20:18:08 +0900 - - Promote yaml to default gems - -commit 2a0ed5691efbc602a4403ec09e6f91e89baa5507 - Author: Hiroshi SHIBATA - Date: 2019-11-08 19:21:47 +0900 - - Promote timeout to default gems - -commit 9a90a4d953a4d1f8e5977cd8d2bab59637de5348 - Author: Hiroshi SHIBATA - Date: 2019-11-08 15:47:46 +0900 - - Fixup 368ee984ed52f6abe1fdf8360ad72e6cf1cbfa66 - -commit 5f206cebb995ec3b0ff279c6a78c2a952b3c1be7 - Author: Hiroshi SHIBATA - Date: 2019-11-08 15:47:18 +0900 - - Promote observer to default gems. But not yet released - -commit 3d731c3694ac793ee525922fd902757d50b06702 - Author: Hiroshi SHIBATA - Date: 2019-11-08 15:39:39 +0900 - - Promote readline to default gems named readline-ext - -commit fc1d06b25d0ba3b1fb14b55cbff0218d8298bcf0 - Author: Hiroshi SHIBATA - Date: 2019-11-08 14:31:43 +0900 - - Added gemspec for readline gem that is wrapper library for reline and readline extension - -commit b5d884922053962c955df1ce54d9dabc98888272 - Author: Koichi Sasada - Date: 2019-11-09 07:09:01 +0900 - - Revert "don't embed full-path." - - This reverts commit dfac2e9eb3d697e56d91151584f1d3cf9d2c79c9. - - It does not work if cwd is different from builddir... - -commit dfac2e9eb3d697e56d91151584f1d3cf9d2c79c9 - Author: Koichi Sasada - Date: 2019-11-09 06:55:38 +0900 - - don't embed full-path. - - miniruby load *.rb from srcdir. To specify file path, - tool/mk_builtin_loader.rb embed full path of each *.rb file. - However it prevent to pre-generation of required files for tarball. - This patch generate srcdir/*.rb from __FILE__ information. - -commit 3b6954f8b9189f599e1f17636f8667a95ee94193 - Author: John Hawthorn - Date: 2019-11-08 07:50:05 +0900 - - Fix passing actual object_id to finalizer - - Previously we were passing the memory_id. This was broken previously if - compaction was run (which changes the memory_id) and now that object_id - is a monotonically increasing number it was always broken. - - This commit fixes this by deferring removal from the object_id table - until finalizers have run (for objects with finalizers) and also copying - the SEEN_OBJ_ID flag onto the zombie objects. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2658 - -commit 9deca1a3b91271159e164188367f003978737f42 - Author: Yusuke Endoh - Date: 2019-11-09 00:22:25 +0900 - - Try to fix test-spec failure on macOS - - Not sure what is happening, but spec/ruby/security/cve_2018_6914_spec.rb - fails on macOS. - https://github.com/ruby/ruby/runs/294462511#step:10:134 - - I suspect that the state of a directory is weird immediately after it is - created (not writable or even world writable?). This change tries to - make sure that ENV["TMPDIR"] is actually used by Dir.tmpdir. - -commit 88b9a0f7fe664098177f4d2f10aed08c4a42b03e - Author: Nobuyoshi Nakada - Date: 2019-11-09 00:20:42 +0900 - - Prettify builtin_binary format - -commit cd706c52168222e3badab82c24df22008d264ca9 - Author: git - Date: 2019-11-09 00:04:07 +0900 - - * 2019-11-09 [ci skip] - -commit 579aa4dc52b87510190a8d4bd2aaaf36fd49f3b6 - Author: Nobuyoshi Nakada - Date: 2019-11-09 00:03:29 +0900 - - Fixed the dependency - -commit 248d0008db6d3bfeadce0861a8902a4f8e45f07e - Author: Nobuyoshi Nakada - Date: 2019-11-08 23:59:22 +0900 - - Added pack.rb to BUILTIN_RB_SRCS - -commit a3141e3c76ef057080d5aab22130a326378094e2 - Author: Yusuke Endoh - Date: 2019-11-08 11:54:39 +0900 - - Rubified the APIs of pack.c - - Notes: - Merged: https://github.com/ruby/ruby/pull/2659 - -commit 882179a0ecc0dfb1f212334f3c92f90ffc817167 - Author: Yusuke Endoh - Date: 2019-11-08 12:58:17 +0900 - - tool/mk_builtin_loader.rb: check if op is an array or not - - The insn array includes not only an array but also some literal objects. - -commit 11e21f1982cbe41860b3f6755505ce063b74fc33 - Author: Nobuyoshi Nakada - Date: 2019-11-08 23:00:36 +0900 - - Make prefix static - -commit ff2d99406db4cd8aa0164c86525eedf627acffbe - Author: Nobuyoshi Nakada - Date: 2019-11-08 22:21:13 +0900 - - Update builtin include files - -commit 7acf7a4f9036a176f0b09cb23646e6bfb1af1c2f - Author: Nobuyoshi Nakada - Date: 2019-11-08 18:18:05 +0900 - - Add VPATH to rbinc rule for nmake - - Notes: - Merged: https://github.com/ruby/ruby/pull/2660 - -commit e02b819482f4e78b47599a6ce7624d4d9a13eb09 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-08 13:56:10 +0900 - - delete cc->aux.inc_sp - - Nobody uses it. - -commit 2e29b651093d158c23f6553972769c8ccb7dbd94 - Author: Nobuyoshi Nakada - Date: 2019-11-08 16:37:42 +0900 - - Add file mode to generated files [ci skip] - -commit 99b1c19be44d229f9ad0a84fd5963b0a810865c9 - Author: Nobuyoshi Nakada - Date: 2019-11-08 14:26:21 +0900 - - builtin.h must be included *AFTER* vm_core.h - -commit 20971799f26c6466f63ab179ce2d3384155b9760 - Author: Nobuyoshi Nakada - Date: 2019-11-08 16:24:24 +0900 - - Renamed `load_*.inc` as `*.rbinc` to utilize a suffix rule - -commit 6e72b72881b42e28d2f97ee023587e3d071fb64b - Author: aycabta - Date: 2019-11-08 16:17:53 +0900 - - Suppress "shadowing outer local variable" warning in 2.5 - -commit 83c563cfa403af1141fc0080d2b6eec344db6726 - Author: Koichi Sasada - Date: 2019-11-08 16:16:25 +0900 - - cstr -> bytes - - rb_iseq_ibf_load_cstr() accepts bytes, but not NUL-terminate - C string. To make it clear, rename it to _bytes. - -commit 0b29662606bb80762d58938e847441020301406f - Author: Koichi Sasada - Date: 2019-11-08 15:32:01 +0900 - - fix line break code (fix to LF) - -commit 054cb6d389da6a260830e4bd262aab2ee8fe2cb2 - Author: Koichi Sasada - Date: 2019-11-08 15:29:59 +0900 - - forget to add gc.rb - -commit 8fa41971c204555b889c9722586b8baee55a0ca8 - Author: Koichi Sasada - Date: 2019-11-08 15:27:32 +0900 - - use builtins for GC. - - Define a part of GC in gc.rb. - -commit 2eb02dfd3b650b54d6f3f5a63541e8165c997edd - Author: Koichi Sasada - Date: 2019-11-08 15:13:24 +0900 - - Stop compiling if type mismatch was found. - - If there is a type mismatch between expected builtin function type - and actual function type, C compiler shows warning. - - For example, `__builtin_func(1, 2)` expects - `func(rb_ec_t*, VALUE self, VALUE p1, VALUE p2)` function definition. - - However, it is easy to overlook "warning" messages. So this patch - changes to stop compiling as an error if there is a mismatch. - -commit 0ad0a8ff580a298dedc73c6679dd74d98c845ba9 - Author: Nobuyoshi Nakada - Date: 2019-11-08 14:26:21 +0900 - - builtin.h must be included *AFTER* vm_core.h - -commit 61cff5c51c63358148d33bf3b6be678d44b9df76 - Author: Nobuyoshi Nakada - Date: 2019-11-08 13:21:29 +0900 - - Removed BOM [ci skip] - -commit cfccd59cb1adfee7b1f402609a4ee32298a26d87 - Author: Kazuki Tsujimoto - Date: 2019-11-08 12:44:31 +0900 - - Fix typo - -commit 90fc5552580b8d6223a513dfa6ee5d0f8532b22a - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-08 12:07:03 +0900 - - name the result of calccall - - This is a pure refactoring for better understanding of what is - happening here. Should change nothing but readability. - -commit d4da74ea786da7906fdb85e593593a9c6c11fe96 - Author: Kazuki Tsujimoto - Date: 2019-11-08 11:37:07 +0900 - - Define Struct#deconstruct_keys - -commit 766115010932d977142097f60c76dd20af73196e - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-08 11:11:21 +0900 - - revival of __func__ - - dad2abc69fdd1af52df353b8604017bd6a5c6a99 deleted __func__ but ruby - already use this feature under RUBY_FUNCTION_NAME_STRING macro. - Use it. - -commit a1a08ac9aabdde2cc8406f5210848a4885d14b52 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-08 10:24:57 +0900 - - describe vm_cache_check_for_class_serial [ci skip] - - Added comments describing what it is. Requested by ko1. - -commit eaa011ffdb55a315a6b35a52c3636c673f9ea836 - Author: Koichi Sasada - Date: 2019-11-08 10:10:37 +0900 - - Change requirements of BASERUBY. - - "BASERUBY: Ruby 1.9.3" test on Travis-CI checks builds on Ruby 1.9.3. - However this version is too old and 46acd0075d requires Ruby 2.2 and - later. - -commit 365557f111b453289a5e2ce0cdda0899ae248c71 - Author: Koichi Sasada - Date: 2019-11-08 09:39:28 +0900 - - Define IO#read/write_nonblock with builtins. - - IO#read/write_nonblock methods are defined in prelude.rb with - special private method __read/write_nonblock to reduce keyword - parameters overhead. We can move them into io.rb with builtin - functions. - -commit dad2abc69fdd1af52df353b8604017bd6a5c6a99 - Author: Koichi Sasada - Date: 2019-11-08 10:02:21 +0900 - - do not use __func__. - - Microsoft Visual Studio 12.0 doesn't support it. - -commit 08ff9edb533301cf1622d541832938577dbcd993 - Author: Koichi Sasada - Date: 2019-11-08 09:30:11 +0900 - - fix line break code (fix to LF) - -commit 46b9ca6c54ad7c4bb43df6a45854c5ffed980168 - Author: Koichi Sasada - Date: 2019-11-08 09:26:16 +0900 - - fix type - -commit 4c00b9e8eb0390c398eb67ba3762a26380d180c3 - Author: git - Date: 2019-11-08 09:09:47 +0900 - - * remove trailing spaces. [ci skip] - -commit a47d058ebf6890f4ad81c9c3419e767b4f093815 - Author: Koichi Sasada - Date: 2019-11-07 18:29:20 +0900 - - use builtin for RubyVM::AbstractSyntaxTree. - - Define RubyVM::AbstractSyntaxTree in ast.rb - with __builtin functions. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2655 - -commit e2a45cb984ba75083a577b38ee9643800579a280 - Author: Koichi Sasada - Date: 2019-11-07 18:22:08 +0900 - - use builtin for TracePoint. - - Define TracePoint in trace_point.rb and use __builtin_ syntax. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2655 - -commit 46acd0075d80c2f886498f089fde1e9d795d50c4 - Author: Koichi Sasada - Date: 2019-11-07 16:58:00 +0900 - - support builtin features with Ruby and C. - - Support loading builtin features written in Ruby, which implement - with C builtin functions. - [Feature #16254] - - Several features: - - (1) Load .rb file at boottime with native binary. - - Now, prelude.rb is loaded at boottime. However, this file is contained - into the interpreter as a text format and we need to compile it. - This patch contains a feature to load from binary format. - - (2) __builtin_func() in Ruby call func() written in C. - - In Ruby file, we can write `__builtin_func()` like method call. - However this is not a method call, but special syntax to call - a function `func()` written in C. C functions should be defined - in a file (same compile unit) which load this .rb file. - - Functions (`func` in above example) should be defined with - (a) 1st parameter: rb_execution_context_t *ec - (b) rest parameters (0 to 15). - (c) VALUE return type. - This is very similar requirements for functions used by - rb_define_method(), however `rb_execution_context_t *ec` - is new requirement. - - (3) automatic C code generation from .rb files. - - tool/mk_builtin_loader.rb creates a C code to load .rb files - needed by miniruby and ruby command. This script is run by - BASERUBY, so *.rb should be written in BASERUBY compatible - syntax. This script load a .rb file and find all of __builtin_ - prefix method calls, and generate a part of C code to export - functions. - - tool/mk_builtin_binary.rb creates a C code which contains - binary compiled Ruby files needed by ruby command. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2655 - -commit dddf5afb7947f5aba1ff875e9f5eb163f8c3d6c7 - Author: Aaron Patterson - Date: 2019-11-08 05:46:14 +0900 - - Add a counter for compaction - - Keep track of the number of times the compactor ran. I would like to - use this as a way to keep track of inline cache reference updates. - -commit 597ec4354333573d69f57dad931cb8ef477d191a - Author: git - Date: 2019-11-08 02:31:29 +0900 - - * 2019-11-08 [ci skip] - -commit b99833baec2e567e38758f4fd017c90c7ce57d75 - Author: John Hawthorn - Date: 2019-11-01 09:21:01 +0900 - - Use a monotonically increasing number for object_id - - This changes object_id from being based on the objects location in - memory (or a nearby memory location in the case of a conflict) to be - based on an always increasing number. - - This number is a Ruby Integer which allows it to overflow the size of a - pointer without issue (very unlikely to happen in real programs - especially on 64-bit, but a nice guarantee). - - This changes obj_to_id_tbl and id_to_obj_tbl to both be maps of Ruby - objects to Ruby objects (previously they were Ruby object to C integer) - which simplifies updating them after compaction as we can run them - through gc_update_table_refs. - - Co-authored-by: Aaron Patterson - -commit d62abc47c83a79687a41f375338564ece0f403ce - Author: Nobuyoshi Nakada - Date: 2019-11-07 23:33:45 +0900 - - Suppress unused variable warning - -commit 6aa80d5583daf71a4d45400af7e23e9d6151b1a3 - Author: NARUSE, Yui - Date: 2019-11-07 18:53:51 +0900 - - Use FIX2LONG instead of FIX2INT like 26843cbcd0 - -commit 26843cbcd0b97489f98aa123e700c4e893b1da5e - Author: NARUSE, Yui - Date: 2019-11-07 18:48:51 +0900 - - Use FIX2LONG to avoid unexpected exception - - Though it won't happen in the real world in this context, FIX2INT may - raise an exception and it cause to generate extra code. - -commit d45a013a1a3bcc860e6f7f303220b3297e2abdbc - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-07 12:59:57 +0900 - - extend rb_call_cache - - Prior to this changeset, majority of inline cache mishits resulted - into the same method entry when rb_callable_method_entry() resolves - a method search. Let's not call the function at the first place on - such situations. - - In doing so we extend the struct rb_call_cache from 44 bytes (in - case of 64 bit machine) to 64 bytes, and fill the gap with - secondary class serial(s). Call cache's class serials now behavies - as a LRU cache. - - Calculating ------------------------------------- - ours 2.7 2.6 - vm2_poly_same_method 2.339M 1.744M 1.369M i/s - 6.000M times in 2.565086s 3.441329s 4.381386s - - Comparison: - vm2_poly_same_method - ours: 2339103.0 i/s - 2.7: 1743512.3 i/s - 1.34x slower - 2.6: 1369429.8 i/s - 1.71x slower - - Notes: - Merged: https://github.com/ruby/ruby/pull/2583 - -commit 3c252651e1ee28d015dbe1648dfdf0140232b733 - Author: Hiroshi SHIBATA - Date: 2019-11-07 17:09:22 +0900 - - Fixed test failure related Net::Protocol - -commit c916f9600b39e9363af782cb4dddef36264bd82b - Author: Hiroshi SHIBATA - Date: 2019-11-07 16:44:38 +0900 - - SMTP is not module - -commit fc85bdeb77ae642348bb797ef9ffb65913dfc77c - Author: Hiroshi SHIBATA - Date: 2019-11-07 16:34:03 +0900 - - Promote cgi to default gems - -commit 223d3c460a25e47577b6414e3ed141e54864c8dd - Author: Hiroshi SHIBATA - Date: 2019-11-07 15:38:40 +0900 - - Promote net-smtp to default gems - -commit eb0b13596d9130683937f11b207baf258b266edc - Author: Hiroshi SHIBATA - Date: 2019-11-07 15:24:59 +0900 - - Promote net-pop to default gems - -commit 77c94e0dd80019fe78e299dd1981ba9992ad7a46 - Author: Hiroshi SHIBATA - Date: 2019-11-07 13:53:05 +0900 - - Promote benchmark to default gems - -commit 1159dbf305603b60a1e5d2b9ff77a9cf30775296 - Author: Hiroshi SHIBATA - Date: 2019-11-07 13:21:46 +0900 - - Promote delegate to default gems - -commit 3b0bd34001bbb7ba98e9594278a8fcbb7b734af9 - Author: Hiroshi SHIBATA - Date: 2019-11-07 11:17:12 +0900 - - Promote pstore to default gems - -commit 6797c3e371c3e91a2796f2ec1f3b4a3f24edf1d6 - Author: Hiroshi SHIBATA - Date: 2019-11-07 08:48:45 +0900 - - Promote getoptlong to default gems - -commit 478f6e2b34c985bd2305895b9eec6918338e8ee2 - Author: Hiroshi SHIBATA - Date: 2019-11-07 08:43:10 +0900 - - Fixed an Errno::ENOENT with non-test libraries - -commit a396bef8d8b72328d411abe7a275736ad995fbcb - Author: Kazuki Tsujimoto - Date: 2019-11-07 14:00:59 +0900 - - Disallow duplicated pattern variable - -commit 1e620c67af3d37b6f120765daf29e96a643325ab - Author: Kazuki Tsujimoto - Date: 2019-11-07 13:20:11 +0900 - - Add missing semicolon - -commit d0d743ad4558a572769f0f11ece11fda068652b3 - Author: Aaron Patterson - Date: 2019-11-07 09:29:09 +0900 - - Remove duplicate code - - These functions are the same, so remove one. - - Co-authored-by: John Hawthorn - -commit e58814d150b0652f5e11958b36b85d977fdd0426 - Author: Aaron Patterson - Date: 2019-11-07 08:12:28 +0900 - - Revert "Use a monotonically increasing number for object_id" - - This reverts commit bd2b314a05ae9192b3143e1e678a37c370d8a9ce. - -commit bd2b314a05ae9192b3143e1e678a37c370d8a9ce - Author: John Hawthorn - Date: 2019-11-01 09:21:01 +0900 - - Use a monotonically increasing number for object_id - - This changes object_id from being based on the objects location in - memory (or a nearby memory location in the case of a conflict) to be - based on an always increasing number. - - This number is a Ruby Integer which allows it to overflow the size of a - pointer without issue (very unlikely to happen in real programs - especially on 64-bit, but a nice guarantee). - - This changes obj_to_id_tbl and id_to_obj_tbl to both be maps of Ruby - objects to Ruby objects (previously they were Ruby object to C integer) - which simplifies updating them after compaction as we can run them - through gc_update_table_refs. - - Co-authored-by: Aaron Patterson - - Notes: - Merged: https://github.com/ruby/ruby/pull/2638 - -commit d1630d41adb13c646a9d76cf541d3c26b6bbb10f - Author: Hiroshi SHIBATA - Date: 2019-11-06 22:17:03 +0900 - - Promote open3 to default gems - -commit fb7fe7f16c53b0633ba9dcea11dd07da708e0275 - Author: Hiroshi SHIBATA - Date: 2019-11-06 22:05:24 +0900 - - Added rubygems url for published gem - -commit ec2603c353680762960d76129a21225e8f1434da - Author: Hiroshi SHIBATA - Date: 2019-11-06 11:33:03 +0900 - - fallback standard structure library to sync_lib_gem method - -commit 91135f6d2900b1b8ae41998a921b6382ebba395c - Author: Hiroshi SHIBATA - Date: 2019-11-06 11:29:51 +0900 - - Promote singleton to default gems - -commit 40e161a61238625e1ef021311759b2159be5b50a - Author: Benoit Daloze - Date: 2019-11-07 07:10:15 +0900 - - Exclude some clocks on armv8 too - - * See https://bugs.ruby-lang.org/issues/16234#note-16 - -commit a1be11eb122cadc27ae597b9e0db66abfdca2c27 - Author: Takashi Kokubun - Date: 2019-11-07 02:52:45 +0900 - - Revert "Remove arm64 from allow_failures" - - This reverts commit 212f4d49bac844b3c0fa52f2185b3df30aa62e75. - - It worked on PR, but master branch builds have another build issue. - https://travis-ci.org/ruby/ruby/jobs/608303393 - -commit 212f4d49bac844b3c0fa52f2185b3df30aa62e75 - Author: Takashi Kokubun - Date: 2019-11-07 02:10:27 +0900 - - Remove arm64 from allow_failures - -commit 7750edd1e6822d4d5ee809d55691478af712ad95 - Author: git - Date: 2019-11-07 02:09:00 +0900 - - * 2019-11-07 [ci skip] - -commit f5c7fc495a4b33db985f0d5286db2ec230e1ffb9 - Author: Jun Aruga - Date: 2019-11-02 00:27:34 +0900 - - Fix spawn_spec.rb for Travis arm64 environment. - - The process group id (/proc/[pid]/stat 5th field) is 0 - in the Travis arm64 environment. - - This is a case where it is available. - - $ cat /proc/4543/stat - 4543 (ruby) S 4525 4525 1384 34818 4525 4194304 37443 1754841 0 0 366 105 2291 391 20 0 3 0 1381328 1428127744 11475 18446744073709551615 94195983785984 94195986670225 140728933833312 0 0 0 0 0 1107394127 0 0 0 17 2 0 0 1 0 0 94195987686512 94195987708942 94196017770496 140728933835483 140728933835595 140728933835595 140728933842904 0 - - This is a case where it is not available in Travis arm64 environment. - - $ cat /proc/19179/stat - 19179 (ruby) S 19160 0 0 0 -1 4194560 37618 1710547 313 163 770 665 5206 1439 20 0 2 0 17529566 1196347392 10319 18446744073709551615 187650811428864 187650815023116 281474602721280 0 0 0 0 4096 1107390031 0 0 0 17 22 0 0 0 0 0 187650815091456 187650815114064 187651414974464 281474602725080 281474602725211 281474602725211 281474602729420 0 - - See "man proc" for detail. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2653 - -commit 2fd465540f6dacaf16a8b679b6da000e90845a00 - Author: Nobuyoshi Nakada - Date: 2019-11-06 12:45:11 +0900 - - Numbered parameter is an ID_LOCAL now [Bug #16293] - -commit 82e840ad15bba42b399a21de746967a731240ec2 - Author: Nobuyoshi Nakada - Date: 2019-11-06 12:41:55 +0900 - - Numbered parameter cannot appear outside block now [Bug #16293] - -commit f72dc407f2f682063cf3d7683b879b430481b4ce - Author: Nobuyoshi Nakada - Date: 2019-11-06 11:17:09 +0900 - - Prohibit calling undefined allocator [Bug #16297] - -commit 5251d189829abc405a5f0422b8874bab7cd79c46 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-06 09:45:27 +0900 - - Time#strftime does not support `%Q` - - ``` - % ruby -r date -e 't=Time.utc(2001,2,3,4,5,6,7);p t; p [t, t.to_date, t.to_datetime].map{|d|d.strftime("%Q")}' - 2001-02-03 04:05:06.000007 UTC - ["%Q", "981158400000", "981173106000"] - ``` - -commit aa94245a09887f95bc0cd353b3462108d76d13ed - Author: Nobuyoshi Nakada - Date: 2019-11-06 08:54:32 +0900 - - Undefine MatchData.allocate [Feature #16294] - -commit 7460c884fb06a2c50a4a771761003ed78c8b28ce - Author: Aaron Patterson - Date: 2019-11-05 09:04:58 +0900 - - Use an identity hash for pinning Ripper objects - - Ripper reuses parse.y for its implementation. Ripper changes the - grammar productions to sometimes return Ruby objects. This Ruby objects - are put in to the parser's stack, so they must be kept alive. This is - where the "mark_ary" comes in. The mark array ensures that Ruby objects - created and pushed on the stack during the course of parsing will stay - alive for the life of the parsing functions. - - Unfortunately, Arrays do not prevent their contents from moving. If the - compactor runs, objects on the parser stack could move because the array - won't prevent them from moving. But the GC doesn't know about the - parser stack, so it can't update references in that stack (it will - update them in the array). - - This commit changes the mark array to be an identity hash. Since the - identity hash relies on memory addresses for the definition of identity, - the GC will not allow keys in an identity hash to move. We can prevent - movement of objects in the parser stack by sticking them in an identity - hash. - -commit d47b643428a5c19d5a0c2f2213c95ab03d63a24c - Author: git - Date: 2019-11-06 00:39:55 +0900 - - * 2019-11-06 [ci skip] - -commit 07f2062c8ffecc774a4ebc1f39ff2c4940592be4 - Author: Mark Abraham - Date: 2019-11-05 22:31:52 +0900 - - Improve string literal concatenation for C++11 - - Downstream C++ projects that compile with C++11 or newer and include - the generated config.h file issue compiler warnings. Both C and C++ - compilers do string-literal token pasting regardless of whitespace - between the tokens to paste. C++ compilers since C++11 require such - spaces, to avoid ambiguity with the new style of string literals - introduced then. This change fixes such projects without affecting - core Ruby. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2650 - -commit 6aacef49483ed83697dc013a4b33606338dffd39 - Author: aycabta - Date: 2019-11-05 21:06:29 +0900 - - Assert return value of Readline.readline only if Ruby is before 2.7 - -commit c4b627e2daf76e2f8922c62c8e0a6c2a10c8b435 - Author: Jeremy Evans - Date: 2019-10-19 01:53:59 +0900 - - Only taint on Ruby <2.7 - - Ruby 2.7 deprecates taint and it no longer has an effect. - -commit 652800cc09788805368983730c6b25183ae60d92 - Author: Jeremy Evans - Date: 2019-10-19 01:50:07 +0900 - - Only untaint line on Ruby <2.7 - - Untaint is deprecated and has no effect on Ruby 2.7+. - -commit c6a52cffd13a42b4c95ccbdf7e32a7da25e494b7 - Author: Nobuyoshi Nakada - Date: 2019-11-05 17:08:51 +0900 - - Separated `@counter` and `@tally` so that "-ft" works with "-j" - -commit fa52a924aa418e363b191179b2ad3eba2506d559 - Author: Nobuyoshi Nakada - Date: 2019-11-05 16:14:03 +0900 - - Enable "-f" option in multi_exec mode - - Make `MultiFormatter` a module and extend the formatter specified - by "-f" option. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2649 - -commit 19f91f788016ef98e30ead047e53edeb7a5f2566 - Author: Nobuyoshi Nakada - Date: 2019-11-05 15:50:28 +0900 - - `DottedFormatter#finish` consistency - - Removed optional parameter `printed_exceptions`, and clear - `exceptions` just after printing each exception, instead. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2649 - -commit dfb3322d27aa05f506818209ab6a10a77221b86d - Author: Nobuyoshi Nakada - Date: 2019-11-05 15:47:25 +0900 - - `DottedFormatter#state` consistency - - Let the method of `DottedFormatter` subclasses have the same - arity. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2649 - -commit bea322a352d820007dd4e6cab88af5de01854736 - Author: NARUSE, Yui - Date: 2019-11-05 17:30:54 +0900 - - Revert "[EXPERIMENTAL] Make Symbol#to_s return a frozen String [Feature #16150]" - - This reverts commit 6ffc045a817fbdf04a6945d3c260b55b0fa1fd1e. - -commit 853d91a04a4d133fc90b35c90570dc1c656a7922 - Author: Lars Kanis - Date: 2019-11-04 19:00:13 +0900 - - Fix coroutine support on win32 - - Ruby master branch currently fails on win32 MINGW at this spec: - https://github.com/ruby/spec/blob/master/core/thread/element_set_spec.rb - - MINGW makes use of setjmp3() implemented in MSVCRT.DLL. - This function traverses the SEH list up to a terminating pointer 0xFFFFFFFF. - It therefore currently segfaults on NULL. - The SEH linked list must be terminated by 0xFFFFFFFF instead of NULL. - - This fixes the issue mentioned here: - https://github.com/ruby/ruby/pull/2279#issuecomment-509508810 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2645 - -commit 7c07300491de502cd94e07fcbf9b30f2df31a0d5 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-05 13:46:08 +0900 - - let the .bss section initialize static variables - - ISO/IEC 9899:1999 section 6.7.8 specifies the values of static - storage which are not explicitly initialized. According to that - these initializers can be omitted. Doing so improvoes future - compatibility against addition / deletion of the fields of this - struct. - -commit 6ff1250739c57ce7f234a2148d3f6214da01b7e5 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-29 11:37:25 +0900 - - rb_method_basic_definition_p with CC - - Noticed that rb_method_basic_definition_p is frequently called. - Its callers include vm_caller_setup_args_block(), - rb_hash_default_value(), rb_num_neative_int_p(), and a lot more. - - It seems worth caching the method resolution part. Majority of - rb_method_basic_definion_p() usages take fixed class and fixed - method id combinations. - - Calculating ------------------------------------- - ours trunk - so_matrix 2.379 2.115 i/s - 1.000 times in 0.420409s 0.472879s - - Comparison: - so_matrix - ours: 2.4 i/s - trunk: 2.1 i/s - 1.12x slower - - Notes: - Merged: https://github.com/ruby/ruby/pull/2629 - -commit 1390d56ecfac2e430df94c4d4a60d8fa80d11166 - Author: Nobuyoshi Nakada - Date: 2019-11-05 10:28:44 +0900 - - Set $JOBS to Tests for parallel tests - -commit 8869384367a1b5e856b2f4b7b7d56296c71a572c - Author: Nobuyoshi Nakada - Date: 2019-11-05 10:28:01 +0900 - - Moved Init_encoding from wrong place [Bug #16292] - -commit 30a74aaef00a99364f5423439ac44babf5066dc0 - Author: Kazuhiro NISHIYAMA - Date: 2019-11-05 10:09:44 +0900 - - Fix a typo in WARN_EOL - -commit c7632fa80cd693be27b9bf85f1402b9c8812f325 - Author: Nobuyoshi Nakada - Date: 2019-11-05 08:26:10 +0900 - - Do not occupy `ARGV` by XRUBY command - - Instead run test-bundled-gems.rb by `ENV['RUBY']`, which should be - set by runruby.rb. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2646 - -commit ebbe396d3c89345a1c36c0b5154e314cc33e19b7 - Author: John Hawthorn - Date: 2019-11-04 13:51:30 +0900 - - Use ident hash for top-level recursion check - - We track recursion in order to not infinite loop in ==, inspect, and - similar methods by keeping a thread-local 1 or 2 level hash. This allows - us to track when we have seen the same object (ex. using inspect) or - same pair of objects (ex. using ==) in this stack before and to treat - that differently. - - Previously both levels of this Hash used the object's memory_id as a key - (using object_id would be slow and wasteful). Unfortunately, prettyprint - (pp.rb) uses this thread local variable to "pretend" to be inspect and - inherit its same recursion behaviour. - - This commit changes the top-level hash to be an identity hash and to use - objects as keys instead of their object_ids. - - I'd like to have also converted the 2nd level hash to an ident hash, but - it would have prevented an optimization which avoids allocating a 2nd - level hash for only a single element, which we want to keep because it's - by far the most common case. - - So the new format of this hash is: - - { object => true } (not paired) - { lhs_object => rhs_object_memory_id } (paired, single object) - { lhs_object => { rhs_object_memory_id => true, ... } } (paired, many objects) - - We must also update pp.rb to match this (using identity hashes). - - Notes: - Merged: https://github.com/ruby/ruby/pull/2644 - -commit 7c3bc0aa13abf3d46382860f76abb609a60376d6 - Author: Nobuyoshi Nakada - Date: 2019-11-05 08:07:59 +0900 - - Put an empty line [ci skip] - -commit 74bb8fb3480d0b0acaa6ef0bb93cc990cc7bf639 - Author: Burdette Lamar - Date: 2019-11-05 08:03:01 +0900 - - More rdoc for ENV - - Notes: - Merged: https://github.com/ruby/ruby/pull/2641 - -commit 9d04fa71fcd5352aadcdff43636ee915666bf749 - Author: Nobuyoshi Nakada - Date: 2019-11-05 02:14:31 +0900 - - Updated minitest to 5.13.0 - -commit c0c9a00f8301e100e2e05ffd101e2b8ff2bfe2ec - Author: Nobuyoshi Nakada - Date: 2019-11-05 00:48:22 +0900 - - Simplify test tasks - - Removed `if` conditions separating `test-bundled-gems`, and pass - `TESTOPTS` and `TEST_BUNDLED_GEMS_ALLOW_FAILURES` via `env`. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2643 - -commit 929a4aa722524f4567eed0d8b27d644f912c22f7 - Author: Nobuyoshi Nakada - Date: 2019-11-05 02:02:14 +0900 - - Adjust a function signature - -commit ec54261b01b1c744c22bacffd1e880f17db9df0b - Author: Aaron Patterson - Date: 2019-10-31 08:28:21 +0900 - - Fix zero free objects assertion - - This commit is to attempt fixing this error: - - http://ci.rvm.jp/results/trunk-gc-asserts@ruby-sky1/2353281 - - Each non-full heap_page struct contains a reference to the next page - that contains free slots. Compaction could fill any page, including - pages that happen to be linked to as "pages which contain free slots". - - To fix this, we'll iterate each page, and rebuild the "free page list" - depending on the number of actual free slots on that page. If there are - no free slots on the page, we'll set the free_next pointer to NULL. - - Finally we'll pop one page off the "free page list" and set it as the - "using page" for the next allocation. - -commit a087e027bf7cf0fbb825f1d55668f85ab1f3c9e6 - Author: Nobuyoshi Nakada - Date: 2019-11-05 01:32:26 +0900 - - Fixed conditional expressions with only one void side - -commit bd3463ee3591ab18dc06a4024ef6f78cc485d053 - Author: git - Date: 2019-11-05 00:07:22 +0900 - - * 2019-11-05 [ci skip] - -commit 4e8336bae853e712eb884b87560621c2da4c4743 - Author: Nobuyoshi Nakada - Date: 2019-11-04 23:58:36 +0900 - - Share test-bundled-gems-run in common.mk - -commit e91e3274bebc803b97971ad0a6f4ee3a8c646a60 - Author: Nobuyoshi Nakada - Date: 2019-11-04 23:37:53 +0900 - - Keep `lex.pcur` after `looking_at_eol_p` - -commit 26316cc350109ba71d42f944f3b976985627c042 - Author: Nobuyoshi Nakada - Date: 2019-11-04 21:23:11 +0900 - - Warn `if` and `elsif` at EOL [EXPERIMENTAL] - - It is unnatural and probably a typo. - -commit c303854e134043d905baff2385add44cc2c28756 - Author: Yusuke Endoh - Date: 2019-11-04 22:27:37 +0900 - - Revert "Warn `if` and `elsif` at EOL [EXPERIMENTAL]" - - This reverts commit ba35c14325ebbf1da8f200df83c45ee9937ff8a1. - This is because ripper fails symbol lookup error. - -commit ba35c14325ebbf1da8f200df83c45ee9937ff8a1 - Author: Nobuyoshi Nakada - Date: 2019-11-04 21:23:11 +0900 - - Warn `if` and `elsif` at EOL [EXPERIMENTAL] - - It is unnatural and probably a typo. - -commit cf377c5556cb03f180a8bbc200fab0f04a540edb - Author: Kazuhiro NISHIYAMA - Date: 2019-11-04 17:12:18 +0900 - - Fix a typo [ci skip] - -commit ffa9298076c4bfd1443b1231e1d7e7965ede5db9 - Author: Nobuyoshi Nakada - Date: 2019-11-04 16:38:36 +0900 - - Fixed a typo - -commit 823f25bb969a19c6c7055dabc5b33cd1fa709ac8 - Author: Nobuyoshi Nakada - Date: 2019-11-04 09:38:34 +0900 - - sync_default_gems.rb: Show the progress at fetching - - It looks like hanging up when fetching from a remote first time. - -commit cbbdb4e5a2eb46750d3c455def99486d23fc625b - Author: Nobuyoshi Nakada - Date: 2019-10-31 00:54:50 +0900 - - [ruby/racc] Strip trailing whitespaces at the last line of actions - - https://github.com/ruby/racc/commit/a887ebe529 - -commit 046be65c08e10973fccc19a04b95a9422a2dae65 - Author: git - Date: 2019-11-04 09:18:29 +0900 - - * 2019-11-04 [ci skip] - -commit df62d6522a6f679642e9b10dbf1edb1d9b646e91 - Author: Nobuyoshi Nakada - Date: 2019-11-04 09:14:18 +0900 - - Use the dedicated function `rb_io_check_io` - -commit 5a7487bdcd96ac7c66e773f1458691ff8fc41265 - Author: Nobuyoshi Nakada - Date: 2019-11-03 23:20:01 +0900 - - Added assertions for linebreak - -commit 7b2cd548aa52fa434006dccff62a6050ed5fd881 - Author: Nobuyoshi Nakada - Date: 2019-11-03 23:18:01 +0900 - - [DOC] mentioned `\R` [ci skip] - -commit f8b3d7d1599ecaa6760d947609f966a7a5b22e2c - Author: Nobuyoshi Nakada - Date: 2019-11-03 22:53:17 +0900 - - [DOC] \s in regexp is not same as in string [ci skip] - -commit 782d1b8fb0a039cedef9ad9c94f432dad51901e6 - Author: Benoit Daloze - Date: 2019-11-03 19:25:42 +0900 - - Fix warnings in Regexp#{match,match?} specs - -commit fbacfe6820cf4f7e115103057b6263cd038da175 - Author: Benoit Daloze - Date: 2019-11-03 19:11:20 +0900 - - Update NEWS entry for Feature #13083 - -commit 4a166237074edeaf5b7c1a0fb3c0bb4489c0dbf4 - Author: Benoit Daloze - Date: 2019-11-03 19:08:58 +0900 - - Remove incorrect NEWS entry, only Regexp#match and #match? changed - -commit 985e6ced9945df943a595aafc0a12faec125e853 - Author: git - Date: 2019-11-03 19:03:24 +0900 - - * 2019-11-03 [ci skip] - -commit 31110d820cc1258cbc84b46ecc65b254c7d5529a - Author: Kenichi Kamiya - Date: 2019-11-03 09:24:55 +0900 - - Improve warning message - - https://github.com/ruby/ruby/pull/2637#discussion_r341812475 - -commit 452bee3ee8d68059fabd9b1c7a75661b14e3933e - Author: Kenichi Kamiya - Date: 2019-11-02 00:54:36 +0900 - - Revert nil error and adding deprecation message - - Notes: - Merged: https://github.com/ruby/ruby/pull/2637 - -commit 772b0613c583773cd2eda23bce8275926a351e79 - Author: Burdette Lamar - Date: 2019-11-02 15:32:49 +0900 - - Correct documented return values for certain ENV methods (#2620) - -commit e6f0fd8af4a326f97bf886c6c9911463ac12dc0c - Author: git - Date: 2019-11-02 00:15:05 +0900 - - * 2019-11-02 [ci skip] - -commit ea97933645ad507c3015c7b2ca17035cf3008f96 - Author: aycabta - Date: 2019-11-01 23:45:07 +0900 - - Use prompt_list to calculate height by lines - -commit 10c2a085480eb8694750e55a613dbbe3eb22a999 - Author: Justin McNally - Date: 2019-10-08 12:12:17 +0900 - - Clean up implementation of SOCKSSocket, its confusing and undocumented - - Notes: - Merged: https://github.com/ruby/ruby/pull/2539 - -commit 68e0bfcd4a7add4140832f156a11f5aa3fbca41d - Author: Justin McNally - Date: 2019-10-08 12:36:22 +0900 - - Prefer libsocksd over libsocks - - Notes: - Merged: https://github.com/ruby/ruby/pull/2538 - -commit b8004103873f4e18bfaefea8e2f540f451c4ae68 - Author: Justin McNally - Date: 2019-10-08 12:04:27 +0900 - - Support libsocksd socks library for SOCKSSocket - - Notes: - Merged: https://github.com/ruby/ruby/pull/2538 - -commit c56d8deaff7dede58e7017bee58f40b86dcda3f4 - Author: Alan Wu - Date: 2019-10-25 03:43:04 +0900 - - Mention correct class name in uninitialized error - - I think this meant to mention `MatchData`? This is a breaking change, but - should be a minor one. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2608 - -commit cc8116b03e89b9c5fca5ace90a8141cff58d549b - Author: Kazuhiro NISHIYAMA - Date: 2019-09-30 18:03:30 +0900 - - Fix a typo [ci skip] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2510 - -commit 6abf4c4802c15c54742e3e8db9bfcab4207704b9 - Author: Nobuyoshi Nakada - Date: 2019-11-01 17:24:52 +0900 - - [ruby/date] Added update-zonetab target - - https://github.com/ruby/date/commit/9bc6e30a82 - -commit b2126d3fcfd2a946fe95947506620bb5e6c1f424 - Author: Jeremy Evans - Date: 2019-11-01 12:55:57 +0900 - - [ruby/date] Remove unneeded line in update-abbr - - https://github.com/ruby/date/commit/ae14e5f293 - -commit 469545307f7b688d0b7a15a5cfd33bcecb775123 - Author: Jeremy Evans - Date: 2019-11-01 03:29:37 +0900 - - [ruby/date] Add more timezone abbreviations - - This gets the time zone abbreviations from - https://www.timeanddate.com/time/zones/, and adds unambiguous time - zones not already present in zonetab.list. See bin/update-abbr - for the program used. - - This regenerates zonetab.h using prereq.mk (requires gperf). - - Only one test line is added, just to make sure a new time zone - abbreviation is picked up. - - Fixes Ruby Bug 16286 - - https://github.com/ruby/date/commit/702e8b3033 - -commit 51825c04db26c26ad43a76daaecf13a767ce34ea - Author: git - Date: 2019-11-01 16:59:02 +0900 - - * 2019-11-01 [ci skip] - -commit 72f997edf66cb766b97feac709888c57852be084 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-01 16:48:31 +0900 - - mark functions that do not return NULL as such. - - Apply __attribute__((__returns_nonnull__)) when available. - -commit f5e406327200672f95d61c4ca4ffc9de03e6a5a7 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-01 15:56:02 +0900 - - ruby_mimmalloc can return NULL - - malloc can fail. Should treat such situations. - -commit fb495b2928545e44cc9859f7cc743032d92ca9ee - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-01 14:33:44 +0900 - - rb_aligned_malloc can return NULL - - Looking at gc.c, rb_aligned_malloc contains `return NULL;` so it - has to be taken care of. Note however that posix_memalign(3posix) - does _not_ set errno. - -commit 2c889e9b05e2d2902096af02687cc6e3c7424c30 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-11-01 14:32:05 +0900 - - RUBY_ATTR_ALOC_SIZE for clang - - clang also supports __attribute__((__alloc_size__)) so why not use - it when the compiler says it does. - -commit 63f70eb65160a53443ec76365e78a80948b54824 - Author: Nobuyoshi Nakada - Date: 2019-10-31 22:21:11 +0900 - - [ruby/zlib] Removed no longer used variables - - https://github.com/ruby/zlib/commit/3e98e4cac3 - -commit 0aaa15f6362e307c9ef636e9625027b96e577dfb - Author: Alan Wu - Date: 2019-10-26 08:15:24 +0900 - - [ruby/zlib] Fix setting mtime to zero in GzipWriter - - Before this change, it was not possible to write out zero for the - timestamp part of a Gzip file's header, as calling GzipWriter#mtime with - zero was ignored. - - Judging from the docs for `GzipWriter#mtime=`, it should be possible to - indicate that no timestamp is available by calling the method with zero. - - https://github.com/ruby/zlib/commit/310be39cac - -commit d6ed7a984c8fd991ce2614d2f228239f8eb490b5 - Author: Jeremy Evans - Date: 2019-10-28 07:23:05 +0900 - - Fix verbose warning being emitted - - Fixes Ruby Bug 16281. - -commit 5f6fbf8725b6e4bc026480d7b95f7ac21198c591 - Author: Yusuke Endoh - Date: 2019-10-31 17:11:23 +0900 - - spec: Fix syntax errors - - Follow up of 473882e01f7e55753733e2607ace633b5041f11f - -commit 473882e01f7e55753733e2607ace633b5041f11f - Author: Hiroshi SHIBATA - Date: 2019-10-31 16:50:00 +0900 - - Skip tainted examples for stringio - -commit ebc884461b0d8c3144c05abeb793e381903de6b2 - Author: Jeremy Evans - Date: 2019-10-19 04:39:49 +0900 - - [ruby/stringio] Remove taint support - - Ruby 2.7 deprecates taint and it no longer has an effect. - The lack of taint support should not cause a problem in - previous Ruby versions. - - https://github.com/ruby/stringio/commit/60ee9ccd95 - -commit 3895e548bd2d75cdf47cd247e84d6071247dd3b3 - Author: Jeremy Evans - Date: 2019-10-27 10:20:46 +0900 - - [ruby/date] Revert "Simplify #inspect" - - This reverts commit af01edd7d8575f544f647dbe8cde5b6ae535d459. - - Revert requested by Yui Naruse. - - https://github.com/ruby/date/commit/875d563557 - -commit fce940aac722575a78cd4cbe5f86dd3f3b40d13c - Author: glaszig - Date: 2019-08-09 09:41:47 +0900 - - [ruby/date] introduce Date::Error, raise Date::Error for every - "invalid " type of exception - - https://github.com/ruby/date/commit/3e55c09ba4 - -commit e4cd0d72876bae43b9369c1305db52370db47215 - Author: Jeremy Evans - Date: 2019-10-19 01:36:11 +0900 - - [ruby/fileutils] Remove use of untaint on Ruby 2.7 to avoid deprecation warnings - - https://github.com/ruby/fileutils/commit/5ac9a8a1f7 - -commit 39281d57743ebe5c1cdcc226399845dc7b17663a - Author: Hiroshi SHIBATA - Date: 2019-08-03 19:37:07 +0900 - - [ruby/gdbm] Use Gemfile instead of Gem::Specification#add_development_dependency. - - https://github.com/ruby/gdbm/commit/bd2e7f6647 - -commit b93ab7d693f5a4bec5d0e7c7ea282a6e24fe5a93 - Author: Jeremy Evans - Date: 2019-10-19 04:22:03 +0900 - - [ruby/gdbm] Remove taint support - - Ruby 2.7 deprecates taint and it no longer has an effect. - The lack of taint support should not cause a problem in - previous Ruby versions. - - https://github.com/ruby/gdbm/commit/f9aaa1a08d - -commit 290903dba01d97bc6869886eccef0378dcdd5e0c - Author: Jeremy Evans - Date: 2019-10-19 04:45:15 +0900 - - [ruby/zlib] Remove taint support - - Ruby 2.7 deprecates taint and it no longer has an effect. - The lack of taint support should not cause a problem in - previous Ruby versions. - - https://github.com/ruby/zlib/commit/21711ed0ce - -commit bc7fbb6f02f47f2e1ac2bcb3175324bb96c08247 - Author: Martin Dürst - Date: 2019-10-31 15:19:59 +0900 - - Mention update to Unicode Emoji version 12.1 in NEWS. - - Also fixed some grammatical errors. [ci skip] - -commit c38ba75780c4641816a8090629d1b5eea22fd137 - Author: Hiroshi SHIBATA - Date: 2019-10-31 10:18:57 +0900 - - Fixed the sync task for json - - * Ignode to change ext/json/depend - * Fixed to ignore json_pure files - -commit 79d96b42df8850b7ba5dd3a78cb72c23cf8cbe91 - Author: Aaron Patterson - Date: 2019-10-31 10:05:32 +0900 - - Revert "Fix zero free objects assertion" - - This reverts commit e1bf29314feee6aaf535917da0178e868e7ff3fa. - - I'm not sure why this broke stuff, I need to investigate later. - -commit e1bf29314feee6aaf535917da0178e868e7ff3fa - Author: Aaron Patterson - Date: 2019-10-31 08:28:21 +0900 - - Fix zero free objects assertion - - This commit is to attempt fixing this error: - - http://ci.rvm.jp/results/trunk-gc-asserts@ruby-sky1/2353281 - - Each non-full heap_page struct contains a reference to the next page - that contains free slots. Compaction could fill any page, including - pages that happen to be linked to as "pages which contain free slots". - - To fix this, we'll iterate each page, and rebuild the "free page list" - depending on the number of actual free slots on that page. If there are - no free slots on the page, we'll set the free_next pointer to NULL. - - Finally we'll pop one page off the "free page list" and set it as the - "using page" for the next allocation. - -commit e08f2e47e302db71621cfe2e770c087a5cf5146d - Author: Hiroshi SHIBATA - Date: 2019-10-31 06:57:06 +0900 - - Also ignore mswin platform - - Notes: - Merged: https://github.com/ruby/ruby/pull/2635 - -commit 8540efd3429c51682d2d0822935163f0930826b9 - Author: Hiroshi SHIBATA - Date: 2019-10-30 22:17:01 +0900 - - Ignore test_racc_command with linux platform - - Notes: - Merged: https://github.com/ruby/ruby/pull/2635 - -commit 1c03026ea3cd90cbc37eb4c612aca3c6129032c8 - Author: Hiroshi SHIBATA - Date: 2019-10-30 21:38:55 +0900 - - Try to run assert_output_unchanged with racc tests - - Notes: - Merged: https://github.com/ruby/ruby/pull/2635 - -commit 5f8795a07b163fe3f373ad443db1949de21c747b - Author: git - Date: 2019-10-31 00:38:16 +0900 - - * 2019-10-31 [ci skip] - -commit 4c7f789e942e78ebd3a7e3bf458c6cbe2133d692 - Author: Alan Wu - Date: 2019-10-30 09:08:01 +0900 - - Allow only one argument for keyword_init struct - - ``` - irb(main):001:0> RUBY_VERSION - => "2.6.5" - irb(main):002:0> S = Struct.new(:foo, keyword_init: true) - => S(keyword_init: true) - irb(main):003:0> S.new({foo: 23424}, 234) # I don't think this is intentional - => # - irb(main):004:0> - ``` - - Tightening this up should inform users when they are confused about - whether a struct is `keyword_init`. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2634 - -commit 6c3ed0d71cb1b59be5b2fbc886b5dd962ab74d35 - Author: Hiroshi SHIBATA - Date: 2019-10-30 21:36:59 +0900 - - Update the latest versions from upstream repository of racc - -commit e6d611ad37ab1a8eb04fceecdfe3a61967383256 - Author: Hiroshi SHIBATA - Date: 2019-10-30 21:01:30 +0900 - - Regenerate the output results for test fixtures of racc - -commit d3272fcba3196738403def453ef0a5119ce16953 - Author: Hiroshi SHIBATA - Date: 2019-10-30 21:00:01 +0900 - - Update the latest structure for racc upstream - -commit c54635c08b89612bbf2faa50b86fd6d5c8758506 - Author: Martin Dürst - Date: 2019-10-30 08:25:45 +0900 - - Update Unicode Emoji version from 12.0 to 12.1. - - This update does not add any new codepoint assignments, it just - expands the range of emoji codepoint sequences recommended for - public interchange. - - Depending on how emoji data files are cached, this commit may - require manual intervention in some build environments - (including some CI systems). - -commit 92c13380e853a8996574fadc8a498c96156674fe - Author: git - Date: 2019-10-30 00:14:03 +0900 - - * 2019-10-30 [ci skip] - -commit 22dbbbeb32b88708b9ea371e856c48c5d9ad3e63 - Author: Aaron Patterson - Date: 2019-10-30 00:13:38 +0900 - - Compacting the heap can cause GC, so disable it - - When we compact the heap, various st tables are updated, particularly - the table that contains the object id map. Updating an st table can - cause a GC to occur, and we need to prevent any GC from happening while - moving or updating references. - -commit fee5cde00be7342dc6c00d0b0a0276d09e5252e3 - Author: Nobuyoshi Nakada - Date: 2019-10-29 22:39:30 +0900 - - Fix tests for CVE-2018-6914 - - Since the current working directory is not involved in `Tempfile` - and `Dir.mktmpdir` (except for the last resort), it is incorrect - to derive the traversal path from it. Also, since the rubyspec - temporary directory is created under the build directory, this is - not involved in the target method. Fixed sporadic errors in - test-spec. - -commit ad4da86669454dee86844b3e0a3ecf9177084db3 - Author: Nobuyoshi Nakada - Date: 2019-10-29 12:12:07 +0900 - - Check for nonnull attribute in configure - -commit 9195ed18cacb0d448c818d2a80db105d8b3cea3c - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-29 16:05:39 +0900 - - Revert "Check for nonnull attribute in configure" - - This reverts commit 54eb51d72bc43f90b595f0d7ffb5069ebf1a56d9. - - Windows build failure. See also https://github.com/ruby/ruby/runs/278718805 - -commit 7bf51ced5571d6180722f2be1b50c048a02b2e70 - Author: Yusuke Endoh - Date: 2019-10-29 14:34:31 +0900 - - test/rubygems/test_gem.rb: early failure when there is /tmp/Gemfile - - Some test cases in rubygems assume that /tmp/Gemfile does not exist. - If it does, they fail with very difficult-to-understand message: - - ``` - [ 149/2108] TestGemBundlerVersionFinder#test_bundler_version_with_bundle_update_bundler = 0.00 - 1) Failure: - TestGemBundlerVersionFinder#test_bundler_version_with_bundle_update_bundler [/home/mame/work/ruby/test/rubygems/test_gem_bundler_version_finder.rb:38]: - Expected Gem::Version.new("2.0.2") to be nil. - ``` - - I spent one hour to debug this issue. To prevent the same accident, - this change makes the test suite stop when /tmp/Gemfile explicitly. - -commit 79a7fd91208989d180027a9fed63db76b0a08cc1 - Author: Yusuke Endoh - Date: 2019-10-29 13:16:31 +0900 - - Revert "Revert "[ruby/rdoc] Use omit of test-unit instead of skip of minitest"" - - This reverts commit ca5812fe4516a10cc687281f9e47e1a08449f1ab. - - Now tool/lib/minitest provides "omit", so it should work. - -commit 1820aeeeb209420e80851d65a42acf188893069b - Author: Yusuke Endoh - Date: 2019-10-29 13:15:09 +0900 - - tool/lib/minitest/unit.rb: add "omit" as an alias to "skip" - - According to rdoc, test-unit provides omit instead of skip. - This is a compatibility layer to make it work with both test-unit and - tool/lib/minitest. - -commit ca5812fe4516a10cc687281f9e47e1a08449f1ab - Author: Yusuke Endoh - Date: 2019-10-29 12:57:31 +0900 - - Revert "[ruby/rdoc] Use omit of test-unit instead of skip of minitest" - - This reverts commit b4da6fc1c277190bbd10e795ebf3be45772038e8. - - `make test-all` uses minitest, which led to "undefined method `omit'" - -commit 9525541d022c67f4a162f8221bae7de2a172f371 - Author: aycabta - Date: 2019-10-28 13:39:37 +0900 - - [ruby/rdoc] Use Dir.glob to convert short path of Dir.tmpdir to long path - - https://github.com/ruby/rdoc/commit/ba16e44572 - -commit c8ce37d4271a58132fb7fc5548e0ba7d85419152 - Author: aycabta - Date: 2019-10-28 01:44:09 +0900 - - [ruby/rdoc] Support different drive latters in include paths - - https://github.com/ruby/rdoc/commit/946d2592e2 - -commit b4da6fc1c277190bbd10e795ebf3be45772038e8 - Author: aycabta - Date: 2019-10-27 02:28:25 +0900 - - [ruby/rdoc] Use omit of test-unit instead of skip of minitest - - https://github.com/ruby/rdoc/commit/1c5bf2ae1d - -commit 54eb51d72bc43f90b595f0d7ffb5069ebf1a56d9 - Author: Nobuyoshi Nakada - Date: 2019-10-29 12:12:07 +0900 - - Check for nonnull attribute in configure - -commit b86e5c9fec9d9ea0f9c70d9b20456680607399b3 - Author: John Hawthorn - Date: 2019-10-29 09:24:07 +0900 - - Clang can also use C call cache - - Previously this was restricted to only gcc because of the - GCC_VERSION_SINCE check (which explicitly excludes clang). - - GCC 3.3.0 is quite old so I feel relatively safe assuming that all - reasonable versions of clang support this. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2628 - -commit 85b88c1d89924d00ecd893cea696d2a94232745c - Author: Lourens Naudé - Date: 2019-10-22 08:18:37 +0900 - - Let the arrays for the singleton and instance method reflection helpers be initialized to the methods count - - Notes: - Merged: https://github.com/ruby/ruby/pull/2595 - -commit fecaa6e946fc87df28682c96fea67c1535825cd5 - Author: Lourens Naudé - Date: 2019-10-22 08:03:05 +0900 - - Let the backtrace array constructed in backtrace_collect be initialized with the size already given - - Notes: - Merged: https://github.com/ruby/ruby/pull/2593 - -commit 0095362918375fb694345133e33199b01911e594 - Author: Lourens Naudé - Date: 2019-10-22 07:49:54 +0900 - - Right size the vm_default_params hash - - Notes: - Merged: https://github.com/ruby/ruby/pull/2592 - -commit 0e68913f81eb35ae615592986a23b0f8f22501c6 - Author: Lourens Naudé - Date: 2019-10-22 07:31:46 +0900 - - Right size the Enumerator internal lazy_use_super_method hash - - Notes: - Merged: https://github.com/ruby/ruby/pull/2591 - -commit 4480d68931f3c7b25e194b30dea304b294744c92 - Author: Lourens Naudé - Date: 2019-10-22 07:28:41 +0900 - - Right size the compile option hash - - Notes: - Merged: https://github.com/ruby/ruby/pull/2590 - -commit 65744fb19efa7786c6b528d81328b641ea2e7cd5 - Author: Lourens Naudé - Date: 2019-10-22 06:31:44 +0900 - - Right size the iseq coverage branches tmp array - initializes with 5 elements - - Notes: - Merged: https://github.com/ruby/ruby/pull/2589 - -commit 0547627705ba2afd9b782ac511c825bfe36f052f - Author: aycabta - Date: 2019-10-29 10:34:32 +0900 - - Version 0.0.4 - -commit b4229c0a90ef902328e09a92fc5c6e884d01c542 - Author: Nobuyoshi Nakada - Date: 2019-10-29 08:58:39 +0900 - - Restore `in_kwarg` flag properly - -commit da3774e5eb6de9dfe5c2ec6f3444c81d22c0e00a - Author: Aaron Patterson - Date: 2019-10-29 08:14:50 +0900 - - Revert "Protect finalizer references during execution" - - This reverts commit 60a7f9f446604571f8a81499080c57c47baf0e6b. - - We can't have Ruby objects pointing at T_ZOMBIE objects otherwise we get - an error in the GC. We need to find a different way to update - references. - -commit 60a7f9f446604571f8a81499080c57c47baf0e6b - Author: Aaron Patterson - Date: 2019-10-18 03:37:32 +0900 - - Protect finalizer references during execution - - When we run finalizers we have to copy all of the finalizers to a new - data structure because a finalizer could add another finalizer and we - need to keep draining the "real" finalizer table until it's empty. - We don't want Ruby programs to mutate the finalizers that we're - iterating over as well. - - Before this commit we would copy the finalizers in to a linked list. - The problem with this approach is that if compaction happens, the linked - list will need to be updated. But the GC doesn't know about the - existence of the linked list, so it could not update references. This - commit changes the linked list to be a Ruby array so that when - compaction happens, the arrays will automatically be updated and all - references remain valid. - -commit 6147fa82a923e7318f493857023006801ed25eb5 - Author: Aaron Patterson - Date: 2019-10-15 06:52:58 +0900 - - Fix continuation mark / compact - -commit bbf3de22b6654642c923884b9e186e6412f1ba6a - Author: Aaron Patterson - Date: 2019-10-09 05:35:24 +0900 - - Pin labels during disassembly - - We need to ensure that labels are pinned while disassembling. If the - compactor runs during disassembly, references to these labels could go - bad, so this commit just ensures that the labels can't move until we're - done. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2625 - -commit 339a891c7d9c56f27f10ed9a9e60f511f75da934 - Author: Aaron Patterson - Date: 2019-10-09 05:15:44 +0900 - - Pin keys of this st_table - -commit a51583b678945ec2ba7ea355dab2c097c47f4b08 - Author: git - Date: 2019-10-29 03:19:25 +0900 - - * 2019-10-29 [ci skip] - -commit aec16b754055f5436b2770695ce6f579ed2fc248 - Author: Aaron Patterson - Date: 2019-10-08 09:41:26 +0900 - - Marshal is calling functions that should pin things - -commit 6e0b40af3da4941b618f018b2c04cee0110ce50c - Author: Nobuyoshi Nakada - Date: 2019-10-28 18:31:00 +0900 - - Try out-of-place build - - Notes: - Merged: https://github.com/ruby/ruby/pull/2622 - -commit 48f982aba7ab5b23af168d3c108e71e3a27c0648 - Author: Nobuyoshi Nakada - Date: 2019-10-28 19:14:38 +0900 - - test-bundled-gems.rb: fixed for out-of-place build - -commit 07b5fec008f33e4a5e03def56d5650ba8d897b1f - Author: Nobuyoshi Nakada - Date: 2019-10-28 18:15:12 +0900 - - Clean mjit and timestamp directories - -commit 3e83f1f00ae89f3391ceed8ea6192cc23257536e - Author: Kazuhiro NISHIYAMA - Date: 2019-10-28 15:34:42 +0900 - - Add more matrix info to slack payload - - Notes: - Merged: https://github.com/ruby/ruby/pull/2621 - -commit cc5580f175bb55c9a1d7574c1861f405ee972617 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-28 14:36:28 +0900 - - fix bug in keyword + protected combination - - Test included for the situation formerly was not working. - -commit a72cb6b11d777c2268831df4f21ab56851db425c - Author: git - Date: 2019-10-28 12:20:36 +0900 - - * 2019-10-28 [ci skip] - -commit d8d581bfc4cee87a59e40eac20e51fe199eb44bf - Author: Koichi Sasada - Date: 2019-10-28 12:19:18 +0900 - - add assertion for mutex_lock. - - After do_mutex_lock(mutex), the mutex should be owned by the current - thread. Adding an assertion for this assumption. - -commit 85d966af21ce834ddefe13861bcb42abae244d25 - Author: Kazuhiro NISHIYAMA - Date: 2019-10-27 09:59:56 +0900 - - Add ubuntu-16.04 to matrix of GitHub Actions - - Notes: - Merged: https://github.com/ruby/ruby/pull/2617 - -commit 417369e0cd6ec96950d2d48f2c94e7b1eb012076 - Author: zverok - Date: 2019-10-26 20:02:59 +0900 - - Improve Enumerator.produce docs - - * Add to NEWS; - * Add examples of while-alike cycles with practical tasks. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2616 - -commit aba23d83f2697247488a2e770fcb9ce5abfcd16c - Author: Jeremy Evans - Date: 2019-10-27 10:41:35 +0900 - - Fix documentation for Fiber#transfer [ci skip] - - Fiber#transfer prevents calling Fiber#resume on the receiver of the - transfer method, not the fiber calling transfer. - - Transferring back to a fiber does not allow later calling resume on - the fiber. Once transfer has been called on a fiber, you can never - call resume on the fiber. - - Calling resume on a transferred fiber is not a double resume error, - it is a different FiberError (cannot resume transferred Fiber). - - For details on the differences between transferred fibers and - regular fibers, see Sasada-san's RubyKaigi 2017 presentation (in - short, Fiber#transfer is for coroutine, Fiber#resume is for - semi-coroutine). - -commit 4fe89e08217446de3b540088a5ef5af37d17b3c9 - Author: Benoit Daloze - Date: 2019-10-27 05:33:43 +0900 - - Add entry for Feature #13083 in NEWS - - * Move Unicode changes under String / Unicode for consistency with the rest. - -commit 664e96b1de816c813c29f61e16a2031a7af7ba86 - Author: Benoit Daloze - Date: 2019-10-27 03:53:01 +0900 - - Update to ruby/spec@28a728b - -commit 3eb0d50c0baae916f4486c264605b18e77bee0dc - Author: Benoit Daloze - Date: 2019-10-27 03:52:59 +0900 - - Update to ruby/mspec@e171725 - -commit 9c5a962354c7630d4fa2326574df3d3ce568ed5c - Author: git - Date: 2019-10-27 02:24:50 +0900 - - * 2019-10-27 [ci skip] - -commit 62212482947066d2cbf4dad6ebe60facf35ef223 - Author: zverok - Date: 2019-10-26 18:21:33 +0900 - - Improve Net::HTTP docs: - - * Make links from Net::GenericHTTPRequest work; - * Document +dest+ param of HTTPResponse#read_body; - * Slightly improve reference to particular response - classes from HTTPResponse class docs. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2615 - -commit f93cb6904c69de51bf14b1bcf9fcfc483584f4d3 - Author: zverok - Date: 2019-10-26 17:46:54 +0900 - - OptionParser: document into: argument - - Notes: - Merged: https://github.com/ruby/ruby/pull/2615 - -commit a24bff461d67e8d5e1f076a9ce773bc876a8b3d4 - Author: zverok - Date: 2019-10-26 17:29:43 +0900 - - open-uri: change global docs to reflect that URI.open syntax is preferred - - Notes: - Merged: https://github.com/ruby/ruby/pull/2615 - -commit de147bb721ec10675556ef4e93c4480856089ba5 - Author: zverok - Date: 2019-10-26 17:15:18 +0900 - - Net::FTP: fix formatting problems for #status method - - Notes: - Merged: https://github.com/ruby/ruby/pull/2615 - -commit 4fe06f46675801c5be392551813baabadf43c87c - Author: zverok - Date: 2019-10-26 17:04:24 +0900 - - IRB: Document command evaluation history. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2615 - -commit 2746fd5d50429994b0d66bb49c2e09089beb1b3f - Author: zverok - Date: 2019-10-26 16:03:24 +0900 - - Update StringIO docs: - - * More explanations/examples in class docs; - * Fix links to other methods (remove tag); - * Fix wording of method docs (remove *stringio* - receiver name, as it is not rendered by modern - RDoc); - * Add option mention to linereading - methods (added in 2.4); - * Several other small fixes. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2615 - -commit f6f1377a4ec187579a7dd0249be1166b42bf668b - Author: zverok - Date: 2019-10-26 15:34:14 +0900 - - Update ERB docs - - * Actualize Notes about other templating engines; - * Document #location= method. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2615 - -commit ad9c7137282009bbecae8df8bd5a601311282d62 - Author: aycabta - Date: 2019-10-26 16:26:48 +0900 - - Make `(#methodname)` a link with --hyperlink-all option - -commit d70fdeedf0a2fc942d91b82f564b78a54ff48d7c - Author: Nobuyoshi Nakada - Date: 2019-10-25 15:03:18 +0900 - - Make `(#methodname)` a link - -commit 5aacb304551aa29f86e4c59bef5136bf9d20726a - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-26 15:33:16 +0900 - - refactor assign variables - - For readability. Requested by ko1. - - See: https://github.com/ruby/ruby/commit/356e203a3acd4d3d20ba12f956fd22e17b6363e9#r35661401 - -commit bddb31bb37f878cf171f89ac54f7e43d7d59c444 - Author: zverok - Date: 2019-10-25 01:35:36 +0900 - - Documentation improvements for Ruby core - - * Top-level `return`; - * Documentation for comments syntax; - * `rescue` inside blocks; - * Enhance `Object#to_enum` docs; - * Make `chomp:` option more obvious for `String#each_line` and - `#lines`; - * Enhance `Proc#>>` and `#<<` docs; - * Enhance `Processs` class docs. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2612 - -commit cf9344131c3d0f5993c6d999c427a4c656df30a2 - Author: Nobuyoshi Nakada - Date: 2019-10-26 02:15:18 +0900 - - Raise on end-exclusive ranges [Feature #14784] - - Raises an error on end-exclusive ranges unless endless, regardless - the receiver. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2613 - -commit f14b754151c8b6a006871cff8f590b9b608a7697 - Author: Hiroshi SHIBATA - Date: 2019-08-12 22:16:21 +0900 - - [ruby/forwardable] Use Gemfile instead of Gem::Specification#add_development_dependency. - - https://github.com/ruby/forwardable/commit/1e7123a81b - -commit f625a4be3c8f159e97f859785d95d50550b3edca - Author: Kazuhiro NISHIYAMA - Date: 2019-10-10 11:33:44 +0900 - - [ruby/forwardable] Fix NoMethodError on ruby 2.4 or earlier - - https://github.com/ruby/forwardable/runs/242918994#step:5:12 - ``` - Error: test_obj_single_delegators_send_id(TestForwardable): NoMethodError: private method `attr_reader' called for #> - ``` - - https://github.com/ruby/forwardable/commit/711bbb2466 - -commit 00989770535cfe69e618a2c556dad44610042e13 - Author: Jeremy Evans - Date: 2019-08-21 23:33:28 +0900 - - [ruby/forwardable] Remove string allocation in def_{instance,single}_delegators - - https://github.com/ruby/forwardable/commit/1a994c90e1 - -commit d00551a7bb1d5dbabb0a8c95d6bd2d9d4e86934a - Author: Jeremy Evans - Date: 2019-08-16 07:21:55 +0900 - - [ruby/forwardable] Make def_{instance,single}_delegators skip :__send__ and :__id__ - - Previously, __send__ and __id__ were skipped if provided as strings, - but not skipped if provided as symbols. - - Fixes Ruby Bug 8855. - - https://github.com/ruby/forwardable/commit/2e61c8c66c - -commit b15e0983f7504c4688afce0ee29a2f4746b6631a - Author: Hiroshi SHIBATA - Date: 2019-08-12 22:28:03 +0900 - - [ruby/forwardable] Update spec.files - - https://github.com/ruby/forwardable/commit/1b6991e589 - -commit b25ab3832f75f9257d3ea2e450af8a00a28e1acd - Author: Hiroshi SHIBATA - Date: 2019-08-12 22:27:13 +0900 - - [ruby/forwardable] Extracted VERSION constant for gemspec - - https://github.com/ruby/forwardable/commit/387758d45a - -commit 0c579b0a97bdec40ed58e15ab611ec00bb83d48d - Author: Jeremy Evans - Date: 2019-10-19 04:02:38 +0900 - - [ruby/dbm] Remove taint support - - Ruby 2.7 deprecates taint and it no longer has an effect. - The lack of taint support should not cause a problem in - previous Ruby versions. - - https://github.com/ruby/dbm/commit/1f0ff0bce1 - -commit 41d52945063e671d34324dc0acefae1534ff7835 - Author: git - Date: 2019-10-26 02:56:12 +0900 - - * 2019-10-26 [ci skip] - -commit 84b69c520e8c7cadf510f21f6e1552d063b1dff3 - Author: Nobuyoshi Nakada - Date: 2019-10-26 02:54:29 +0900 - - Edit vm_opts.h for VM options - - Revert 46f175ed5c8560b3c9da5ab7b4fa73287f1eb1c5 partially. - - Also tool/ruby_vm scripts refer the options in vm_opts.h. - -commit 42c652d1959564bc5fb5147c8c343d8c0589583c - Author: Nobuyoshi Nakada - Date: 2019-10-25 22:09:38 +0900 - - Fixed range argument condition [Feature #14784] - - Allows a beginless/endless range, and an end-exclusive range - unless the receiver is smaller than its end. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2611 - -commit 88135845f10f4b8ea3b67584a2c899ad365fd6bb - Author: Koichi Sasada - Date: 2019-10-25 17:58:54 +0900 - - enable assertion for debug. - - http://ci.rvm.jp/results/trunk-vm-asserts@silicon-docker/2340856 - -commit f3f1d89d469e3cc18f868a17fc0362c34318cedc - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-25 16:44:15 +0900 - - skip tests that do not work on GC.stress - - These tests rely on GC.stat and GC.last_gc_info, which are not - stable when GC.stress is true. Skip them for that case. - -commit 356e203a3acd4d3d20ba12f956fd22e17b6363e9 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-24 18:08:52 +0900 - - more on struct rb_call_data - - Replacing adjacent struct rb_call_info and struct rb_call_cache - into a struct rb_call_data. - -commit a7ec88ad61eba8cda3f99805e6077cb515c0ad08 - Author: Kazuhiro NISHIYAMA - Date: 2019-10-25 10:45:46 +0900 - - Add `shell: cmd` - - Use cmd instead of new default shell for `call`. - https://github.blog/changelog/2019-10-17-github-actions-default-shell-on-windows-runners-is-changing-to-powershell/ - - https://github.com/ruby/ruby/commit/7bcc639c720b59eb2199601963bcfa720168185b/checks#step:6:5 - ``` - call : The term 'call' is not recognized as the name of a cmdlet, function, script file, or operable program. - ``` - -commit 7bcc639c720b59eb2199601963bcfa720168185b - Author: aycabta - Date: 2019-10-25 10:07:17 +0900 - - Rename old var name with new name - -commit 09936d1d74c51d2afa9bd52e5681b6edf00aef6d - Author: Hiroshi SHIBATA - Date: 2019-08-03 18:56:41 +0900 - - [ruby/tracer] Use Gemfile instead of Gem::Specification#add_development_dependency. - - https://github.com/ruby/tracer/commit/9df7d7937b - -commit fb15e79403181098c969b4a8b7e4dd69f820955d - Author: Jeremy Evans - Date: 2019-10-25 04:36:49 +0900 - - Handle case where ruby2_keywords method splats to ruby2_keywords method - - Previously, the keyword hash was duped (which results in a regular - hash), but the dup was not marked as a keyword hash, causing the - hash not to be marked as keyword hash even though it should be. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2609 - -commit 5040eea959300ecb183d79f9539151239c281aa6 - Author: Nobuyoshi Nakada - Date: 2019-10-25 08:53:03 +0900 - - Do not show progress at chocolatey - -commit 4ff2c58f919153b9a47f69f855a0b9d2bb0e0bbe - Author: wanabe - Date: 2019-10-25 04:40:39 +0900 - - retry tailcall optimization (#2529) - - Sorry, f62f90367fc3bce6714e7c34cbd040e14e43fe07 is push miss. - -commit 58b363bf0d1f31ae9bcbaf301f9abedb99fa90f6 - Author: Koichi Sasada - Date: 2019-10-25 04:37:46 +0900 - - respect `param.flags.ruby2_keywords` at to_binary. - - `param.flags.ruby2_keywords` is not store/load correctly at to_binary - so restore this flag correctly. - -commit d6a2507e494f0fffca375c9e2eede38b6a777874 - Author: Jeremy Evans - Date: 2019-10-25 01:47:30 +0900 - - Duplicate hash when converting keyword hash to keywords - - This mirrors the behavior when manually splatting a hash. This - mirrors the changes made in setup_parameters_complex in - 6081ddd6e6f2297862b3c7e898d28a76b8f9240b, so that splatting to a - non-iseq method works the same as splatting to an iseq method. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2606 - -commit 8c59b9250c25c66d6ed16429da139558295a4517 - Author: Jeremy Evans - Date: 2019-10-25 01:35:48 +0900 - - Update date specs - - Allow Date.new spec to run on 2.7. - - Separate Date.valid_jd? specs, since 2.7 is now stricter and - requires numeric value for the first argument. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2605 - -commit 5fe8943fdaf765dc01d986abafe85bd3eafb7814 - Author: Jeremy Evans - Date: 2019-10-25 01:35:02 +0900 - - Fix typo causing Date.new(year, month) to fail - - Add a test for this case. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2605 - -commit e8f90e73978c0321021c177fe3fa2623a8b3a4de - Author: Koichi Sasada - Date: 2019-10-25 04:01:02 +0900 - - check T_ICLASS for Method#inspect. - - METHOD::klass can contain T_ICLASS so inspect should respect it. - -commit b7c8874b6290d17f6f8ebd4b2fa72c231121c714 - Author: Nobuyoshi Nakada - Date: 2019-10-25 02:24:42 +0900 - - Install openssl with chocolatey - - OpenSSL in chocolatey is 1.1.1d but outdated 1.0.2s is in vcpkg. - -commit 826bbf9837e1e763c9200bb81e63560b194533dd - Author: Nobuyoshi Nakada - Date: 2019-10-25 02:24:00 +0900 - - Split by `&&` - -commit 967b924aa0b8385b2f8effd96c006fb3eeca7802 - Author: Nobuyoshi Nakada - Date: 2019-10-25 02:08:03 +0900 - - Expanded an environment variable - - PowerShell does not expand by `%varname%` syntax. - -commit b86af95c5b4e035f5dc14018a7ff8861e6dc203d - Author: Nobuyoshi Nakada - Date: 2019-10-25 02:04:14 +0900 - - Get rid of control flow by cmd.exe - - Github workflow stopped using cmd.exe suddenly, and `||` and `&&` - seem not working in PowerShell. - -commit b609bdeb5307e280137b4b2838af0fe4e4b46f1c - Author: Nobuyoshi Nakada - Date: 2019-10-25 01:16:05 +0900 - - Define arguments forwarding as `ruby2_keywords` style - - Get rid of these redundant and useless warnings. - - ``` - $ ruby -e 'def bar(a) a; end; def foo(...) bar(...) end; foo({})' - -e:1: warning: The last argument is used as the keyword parameter - -e:1: warning: for `foo' defined here - -e:1: warning: The keyword argument is passed as the last hash parameter - -e:1: warning: for `bar' defined here - ``` - -commit 4b3e007e0778415e75ec2f0afcdc559eea43fdf8 - Author: Nobuyoshi Nakada - Date: 2019-10-25 01:03:08 +0900 - - Assert no-kwrest case - -commit ed65e2d5ae700afe8408836a8774becf5c87f76b - Author: Nobuyoshi Nakada - Date: 2019-10-25 00:56:27 +0900 - - Assert no-block case - -commit 8d0c5eb805a0a9afeb6e87c939c9b6f7f22df013 - Author: Nobuyoshi Nakada - Date: 2019-10-25 00:54:24 +0900 - - Set method locations - -commit 2ea698969ec92e6442e9a4cf93217d5a690cb559 - Author: git - Date: 2019-10-25 00:16:26 +0900 - - * 2019-10-25 [ci skip] - -commit 6279e45cdefa3e61ca1c9c8085b15727cb2f4a60 - Author: Nobuyoshi Nakada - Date: 2019-10-25 00:06:43 +0900 - - Arguments forwarding is not allowed in lambda [Feature #16253] - -commit 1fb45848257e3a599809c6cac52338999e604da0 - Author: Jeremy Evans - Date: 2019-10-22 05:08:22 +0900 - - Remove unused output_method argument - - Fixes Ruby Bug 9876. - -commit 8439caab0ac91aa33176060bb81cb4197ab21069 - Author: Nobuyoshi Nakada - Date: 2019-10-24 23:37:19 +0900 - - Refined `rp` output [ci skip] - - So that the result structure can be accessed as `$number` - variables, not a mere `VALUE`. - -commit dc44ab2913719a7d9b78012f277b9fe02868c172 - Author: Hiroshi SHIBATA - Date: 2019-10-24 19:53:33 +0900 - - Revert "[ruby/fiddle] Fix a failing test (#13)" - - This reverts commit 5ebb0d50f6560b35bc03deb79341a115c5f782ee. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2603 - -commit de5ee47c3da9d06e8dcffa35e4e7f9b5a3122907 - Author: Hiroshi SHIBATA - Date: 2019-10-24 19:53:26 +0900 - - Revert "[ruby/fiddle] test: use env Hash" - - This reverts commit 4d844cbaed518743776594fa5ae33b86fe176ad1. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2603 - -commit efd641ffab34e433a8d8a7d78914576f2425aa90 - Author: Hiroshi SHIBATA - Date: 2019-10-24 19:52:54 +0900 - - Revert "[ruby/fiddle] Use ffi_closure_free by default. (#20)" - - This reverts commit ce6caade7c57a505f73086ccd7b33c14f7715f22. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2603 - -commit f126d80b1e4f42e854555e728cd4478fc7ff56db - Author: Jeremy Evans - Date: 2019-10-19 03:40:36 +0900 - - [ruby/webrick] Don't check tainting in access log escaping - - Only untaint result on Ruby <2.7, as taint support is deprecated - in Ruby 2.7+ and no longer has an effect. - - https://github.com/ruby/webrick/commit/4c430f9410 - -commit c28d50a753615dff9bd721f608846d4ef541feb1 - Author: Jeremy Evans - Date: 2019-08-27 14:22:00 +0900 - - [ruby/webrick] Support literal IPv6 addresses in X-Forwarded-Host - - https://github.com/ruby/webrick/commit/6b6990ec81 - -commit 37c266aa57fc2c6798a7b6002867643ef0424fa1 - Author: Jeremy Evans - Date: 2019-08-07 07:48:18 +0900 - - [ruby/webrick] Remove the squishing of whitespace in header values - - While the stripping of header values is required by RFC 2616 4.2 and - RFC 7230 3.2.4, the squishing is not and can break things, such as - when one header contains an HMAC of another header. - - Fixes Ruby Bug 7021. - - https://github.com/ruby/webrick/commit/8b96088a86 - -commit 84ed4c3d59a3317c6aff017e88f0ea897dbf8410 - Author: Hiroshi SHIBATA - Date: 2019-10-04 22:51:39 +0900 - - [ruby/webrick] bump version to 1.5.0 - - https://github.com/ruby/webrick/commit/00c281caa7 - -commit 8189d496dff2e3f892338eed13e15816684bb220 - Author: Jeremy Evans - Date: 2019-07-08 11:17:10 +0900 - - [ruby/webrick] Remove Webrick::HTTPResponse#to_s - - It is currently broken, and even if it worked, it can cause problems - when debugging. See Ruby Bug 10715. - - https://github.com/ruby/webrick/commit/575dea8656 - -commit f0452574b16462d0edea16e9b22e55e21e146a49 - Author: thekuwayama - Date: 2019-07-05 23:25:47 +0900 - - [ruby/webrick] after ruby-2.6.0, set Net::HTTP#write_timeout - - https://github.com/ruby/webrick/commit/3b51f6b4d2 - -commit b809784817649817c3e53fa000f57504446caef9 - Author: Jeremy Evans - Date: 2019-10-20 08:10:47 +0900 - - [ruby/fiddle] Remove taint support (#21) - - Ruby 2.7 deprecates taint and it no longer has an effect. - The lack of taint support should not cause a problem in - previous Ruby versions. - https://github.com/ruby/fiddle/commit/18d6fb6915 - -commit ce6caade7c57a505f73086ccd7b33c14f7715f22 - Author: Vít Ondruch - Date: 2019-07-11 06:19:32 +0900 - - [ruby/fiddle] Use ffi_closure_free by default. (#20) - - * Use ffi_closure_free unconditionally. - - The current conditionals reflect historic heritage of FFI. Usage of - ffi_closure_free should be better default nowadays, because libffi 3.0.5 - fixing issues of ffi_closure_free should be widely available. - - * RUBY_LIBFFI_MODVERSION is not used anymore. - - Because `ffi_closure_free()` is not used unconditionally, there is no - other use for RUBY_LIBFFI_MODVERSION define, so drop its usage. - - * Use more meaningful variable name. - - `ver` variable used to be used to pupulate RUBY_LIBFFI_MODVERSION - define. Since the define was removed, the `libffi_dir` variable name - should better describe the remaining usage of the variable. - - https://github.com/ruby/fiddle/commit/c49cc79eb8 - -commit 30d46966a97968d166f2f1440f227c2b52483780 - Author: Nobuyoshi Nakada - Date: 2019-06-13 16:08:22 +0900 - - [ruby/fiddle] Use RbConfig::SIZEOF (#19) - - - https://github.com/ruby/fiddle/commit/ea06b28db8 - -commit 4d844cbaed518743776594fa5ae33b86fe176ad1 - Author: Sutou Kouhei - Date: 2019-05-28 06:04:19 +0900 - - [ruby/fiddle] test: use env Hash - - https://github.com/ruby/fiddle/commit/a01a962342 - -commit 5ebb0d50f6560b35bc03deb79341a115c5f782ee - Author: Kenta Murata - Date: 2019-05-27 18:53:33 +0900 - - [ruby/fiddle] Fix a failing test (#13) - - * Fix a failing test - - This commit fixes the following failure: - - ``` - 1) Failure: - Fiddle::TestImport#test_no_message_with_debug [/Users/mrkn/src/github.com/ruby/fiddle/test/fiddle/test_import.rb:152]: - - 1. [2/2] Assertion for "stderr" - | <[]> expected but was - | <["Exception `NameError' at /Users/mrkn/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fiddle/import.rb:157 - uninitialized constant Fiddle::Function::STDCALL"]>. - ``` - - * Stop using Bundler.with_clean_env - - * Clear existing Ruby environment variables on test_no_message_with_debug - - https://github.com/ruby/fiddle/commit/13133ddec8 - -commit 7733db665ad07980afcaa5bc3fadebc0128fbdf2 - Author: Aaron Patterson - Date: 2019-01-10 09:22:26 +0900 - - [ruby/fiddle] Fiddle::Function must maintain a reference to the closure - - If the first parameter to Fiddle::Function is a closure object (rather - than an integer), `rb_Integer` will cast it to an integer but not - maintain a reference to the closure. Then if the closure gets GC'd, we - have a segv. This commit keeps a reference to the original parameter to - initialize so that the object will not be GC'd. - - Fixes: https://bugs.ruby-lang.org/issues/13286 - - https://github.com/ruby/fiddle/commit/0fc697bbc5 - -commit 70ca56dedaa7ced969269ed70112ebb8da653ec2 - Author: Hiroshi SHIBATA - Date: 2019-10-24 18:50:57 +0900 - - Temporarily skipped with upstream changes of Date library. - -commit 487d96c6b1cd7f5d415dba27a9684b30dfa9afed - Author: Hiroshi SHIBATA - Date: 2019-08-03 20:37:51 +0900 - - [ruby/date] Use Gemfile instead of Gem::Specification#add_development_dependency. - - https://github.com/ruby/date/commit/13c94362c2 - -commit 9d3a4ab05bc74d880ca25c2bf0ef48e60f8199af - Author: zverok - Date: 2019-08-11 19:56:41 +0900 - - [ruby/date] Update docs - - https://github.com/ruby/date/commit/8c02586a98 - -commit 913807bd6ce98d3d362d27caef4f5e2aef0e5d79 - Author: zverok - Date: 2019-08-11 19:50:20 +0900 - - [ruby/date] Simplify #inspect - - https://github.com/ruby/date/commit/af01edd7d8 - -commit 2e37c1960a0b84a9018dc0202a36daf4e692ed46 - Author: Jeremy Evans - Date: 2019-10-19 03:56:05 +0900 - - [ruby/date] Remove taint support - - Ruby 2.7 deprecates taint and it no longer has an effect. - The lack of taint support should not cause a problem in - previous versions. - - https://github.com/ruby/date/commit/519470dc3b - -commit fc0e8d00bc50ac8646b37adee3b599c83ce84a41 - Author: Jeremy Evans - Date: 2019-08-26 02:01:13 +0900 - - [ruby/date] Support -Float::INFINITY...date ranges - - Fixes Ruby Bug 12961 - - https://github.com/ruby/date/commit/7f533c2552 - -commit 4e40ca301cca692361627ac6db06c0f0074636f0 - Author: Jeremy Evans - Date: 2019-07-25 00:03:27 +0900 - - [ruby/date] Check for numeric arguments in constructors - - Previously, the type of these arguments were not checked, leading to - NoMethodErrors in some cases, and TypeErrors in other cases, but not - showing what field was having the problems. This change makes it so - the field with the problem is included in the error message. - - For the valid_*? methods, this changes them to return false if one - of the arguments that should be numeric is not. - - Fixes Ruby Bug 11935 - Fixes Ruby Misc 15298 - - https://github.com/ruby/date/commit/a2f4b665f8 - -commit 9eb798a3f1de6a9e08e510904d376952d5e94d50 - Author: Jeremy Evans - Date: 2019-07-18 06:53:55 +0900 - - [ruby/date] Make julian dates roundtrip through to_time.to_date - - Previously, julian dates would not round trip through to_time.to_date, - because Time is always considered gregorian. This converts the Date - instance from julian to gregorian before converting to Time, ensuring - that an equal date object will be returned if converting that Time - back to Date. - - This does result in julian Date objects showing different day values - if converting to Time. - - Fixes Ruby Bug 8428. - - https://github.com/ruby/date/commit/d8df64555e - -commit f1de438380893682257b8648784a0fe7714b1f9f - Author: Alan Wu - Date: 2019-10-22 01:56:44 +0900 - - Use CPDEBUG for debug code - - Notes: - Merged: https://github.com/ruby/ruby/pull/2564 - -commit 89e7997622038f82115f34dbb4ea382e02bed163 - Author: Alan Wu - Date: 2019-07-31 10:36:05 +0900 - - Combine call info and cache to speed up method invocation - - To perform a regular method call, the VM needs two structs, - `rb_call_info` and `rb_call_cache`. At the moment, we allocate these two - structures in separate buffers. In the worst case, the CPU needs to read - 4 cache lines to complete a method call. Putting the two structures - together reduces the maximum number of cache line reads to 2. - - Combining the structures also saves 8 bytes per call site as the current - layout uses separate two pointers for the call info and the call cache. - This saves about 2 MiB on Discourse. - - This change improves the Optcarrot benchmark at least 3%. For more - details, see attached bugs.ruby-lang.org ticket. - - Complications: - - A new instruction attribute `comptime_sp_inc` is introduced to - calculate SP increase at compile time without using call caches. At - compile time, a `TS_CALLDATA` operand points to a call info struct, but - at runtime, the same operand points to a call data struct. Instruction - that explicitly define `sp_inc` also need to define `comptime_sp_inc`. - - MJIT code for copying call cache becomes slightly more complicated. - - This changes the bytecode format, which might break existing tools. - - [Misc #16258] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2564 - -commit 38e931fa2ceac6d922f3eabedb8f35f211de0bdb - Author: Koichi Sasada - Date: 2019-10-24 16:28:15 +0900 - - show "transferred" attribute on Fiber#to_s - - If a fiber is invoked with transfer method (such as "f.transfer"), - then the invoked fiber ("f") is labeled as "transferred" and this - fiber can not be invoked with Fiber#resume. This patch adds - transferred attribute for "Fiber#to_s" (and inspect). - -commit 4c3e3b8028ca76fcaedc0e40d9ac678e3ac79ee9 - Author: Koichi Sasada - Date: 2019-10-24 15:03:26 +0900 - - Revert "Fix Fiber#transfer" - - This reverts commit fa8ac91e957a076f6df1adaecad7896817138009. - - Previous behavior is intentional. - -commit 65e8267938a260620bbfe1c1d97e67dde8c31f6c - Author: Hiroshi SHIBATA - Date: 2019-10-24 16:17:17 +0900 - - Revert "Fixed the require path for e2mmap version file." - - This reverts commit ff953a003e03f5f070112ececefab4c07ff4cb0e. - -commit ff953a003e03f5f070112ececefab4c07ff4cb0e - Author: Hiroshi SHIBATA - Date: 2019-10-24 16:12:34 +0900 - - Fixed the require path for e2mmap version file. - -commit 2791989a311d14fbd69dd1ea0c1eeac521382427 - Author: Hiroshi SHIBATA - Date: 2019-10-24 16:11:01 +0900 - - Fixed sync path of e2mmap structure for gemspec. - -commit 281f754126a9edf003e347f28ab20e154e22464d - Author: Yusuke Endoh - Date: 2019-10-24 08:30:33 +0900 - - include/ruby/backward/cxxanyargs.hpp: call `va_end` before return - - Coverity Scan complains it. - -commit f26f0f41096c026e4874bf1af8d500a7aaa69e59 - Author: Yusuke Endoh - Date: 2019-10-24 08:04:45 +0900 - - hash.c: Do not use Unicode double-quotes - - It made rdoc fail. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/ubuntu1804/ruby-master/log/20191023T183005Z.fail.html.gz - ``` - RDoc is not a full Ruby parser and will fail when fed invalid ruby programs. - - The internal error was: - - (ArgumentError) invalid byte sequence in US-ASCII - - uh-oh! RDoc had a problem: - invalid byte sequence in US-ASCII - ``` - -commit df91896f32fdf78c26fc38466927c0bd87444185 - Author: BurdetteLamar - Date: 2019-10-21 02:28:22 +0900 - - More rdoc for ENV#[] and ENV#fetch - - Notes: - Merged: https://github.com/ruby/ruby/pull/2579 - -commit 6df6611ce77d1bb7d50375a1399e1d5101a3a616 - Author: aycabta - Date: 2019-10-24 02:45:15 +0900 - - Treat only left alt key as meta-key on Windows - - On German keyboard, right alt key acts as like shift key. - - Ex. right-alt-8 is just "[". This input doesn't have meta-key statement. - -commit f1d4216bd9b89835a8aa7b4e087549dc35279a7f - Author: Nobuyoshi Nakada - Date: 2019-10-24 01:42:31 +0900 - - Added refresh-gems - - Refreshes bundled gems to the latest version, and extracts them. - -commit 7391db4ab320ef66ff4b0ec7e59ec91daede2373 - Author: Nobuyoshi Nakada - Date: 2019-10-24 01:18:19 +0900 - - Updated minitest to 5.12.2 - -commit 7bc787fa06e20f26fae875c9aac2675fc056e16d - Author: aycabta - Date: 2019-10-24 00:12:52 +0900 - - Support forced enter insertion by Ctrl+Enter on Windows - -commit 659f7c0aeb46b75fec913b33fc6daa39c2f6b611 - Author: git - Date: 2019-10-24 00:00:59 +0900 - - * 2019-10-24 [ci skip] - -commit 039faecdb88546a7ad43594a870900b0b370aa9c - Author: aycabta - Date: 2019-10-23 23:58:59 +0900 - - Suppress duplicated "require 'reline'" - -commit 1d91feaf13e0ffe04b2dabc6e77e4101b6d0bb07 - Author: Nobuyoshi Nakada - Date: 2019-10-23 20:13:34 +0900 - - Limit strict RUBY_METHOD_FUNC in C++ - - Limit strict function signature check with RUBY_METHOD_FUNC in C++ - to bundled libraries only. [Bug #16271] - -commit 8bb716ab91577f2b1e21e833fb3f3170032ba881 - Author: aycabta - Date: 2019-10-22 20:42:03 +0900 - - Fix indent... - -commit 67f010af9bd08581caa474831b7ed7f21ae00f6d - Author: Nobuyoshi Nakada - Date: 2019-10-23 15:09:44 +0900 - - name2ctype.h depends on also Emoji data - -commit cbec533677654f9cb5e2a4c21c2f11ae6928bc20 - Author: Kazuhiro NISHIYAMA - Date: 2019-10-23 13:23:43 +0900 - - Add gem names [ci skip] - -commit 5d7aef20dd972a4398ad2f047710391334b14ac3 - Author: Kazuhiro NISHIYAMA - Date: 2019-10-23 13:18:48 +0900 - - Trivial fixes [ci skip] - -commit 959ddf44b3613e504897239e76860aae11eed635 - Author: Kazuhiro NISHIYAMA - Date: 2019-10-23 12:00:44 +0900 - - Fix typos [ci skip] - -commit 46f175ed5c8560b3c9da5ab7b4fa73287f1eb1c5 - Author: Nobuyoshi Nakada - Date: 2019-10-23 02:53:36 +0900 - - Use cppflags to pass preprocessor options - -commit d5d58447444109a75ceb86e239827f001da6214d - Author: Nobuyoshi Nakada - Date: 2019-10-23 02:30:14 +0900 - - Use dedicated assertion methods for warning and syntax error - -commit 601f1fb456c291b5eb4d20e97d8b151bb04ffda2 - Author: Nobuyoshi Nakada - Date: 2019-10-23 02:05:28 +0900 - - Catch syntax error even if fatal - -commit afab8122c339586ccb120861cc700aa8eee7402c - Author: Nobuyoshi Nakada - Date: 2019-10-23 02:04:36 +0900 - - Fix the exception when CPDEBUG - -commit 801a11d0ab3e1d387b5aaed92d1965fbdf675780 - Author: Nobuyoshi Nakada - Date: 2019-10-23 01:05:14 +0900 - - Relaxed tests for CPDEBUG mode - -commit 1a80ee4573eef24ed7465b5c5d72dc085c74c4ff - Author: git - Date: 2019-10-23 00:42:44 +0900 - - * 2019-10-23 [ci skip] - -commit 51bab75f493d59b07382e99d54c9dd1b0b1bbdf8 - Author: Nobuyoshi Nakada - Date: 2019-10-23 00:19:25 +0900 - - Provides ruby2_keywords - - So that requiring it succeeds even if that forward compatibility - gem is not installed. - -commit 8390057d1ee9acd67ac9f36dee59f500b1f1bc5f - Author: Nobuyoshi Nakada - Date: 2019-10-22 22:49:41 +0900 - - Benchmark for [Feature #16155] - -commit 99ca5705a24d540b95fb7069707514c1510f1a81 - Author: NARUSE, Yui - Date: 2019-10-22 22:15:52 +0900 - - tool/release.sh uses ruby-actions' result - - https://github.com/ruby/actions - -commit d736511e4253c924bcfaa7125da3b07a67b6ecbf - Author: NARUSE, Yui - Date: 2019-10-22 21:37:49 +0900 - - Move format-release to tool and fix bugs - -commit 04075305d3fd2806400235dfc744b6a0c70ef738 - Author: Nobuyoshi Nakada - Date: 2019-10-22 21:33:11 +0900 - - Ignore timestamp file for the expected failure [ci skip] - -commit aec0a293a4f9d2f8f8d085f57023ec3ba4bf6525 - Author: NARUSE, Yui - Date: 2019-10-22 21:12:50 +0900 - - Add a tool to generate a patch for www from log - - Receives an output of `tool/make-snapshot` and genarete - * Markdown format for release note - * a patch for branches.yml, downloads.yml, and releases.yml of w.r-l.o - -commit ed3333f8736e054a2199a3b77e553b858c5fc7e6 - Author: Nobuyoshi Nakada - Date: 2019-10-22 21:05:52 +0900 - - make-snapshot: Regexp#match raises on nil now - -commit 501b517dfbab2a552e68da2da30682261b134156 - Author: Yusuke Endoh - Date: 2019-10-22 20:06:07 +0900 - - NEWS: add a URL about the performance improvement of CGI.escapeHTML - -commit 02aadf1032d71a3f81653a955f2635c8853b0aca - Author: Yusuke Endoh - Date: 2019-10-22 19:46:44 +0900 - - NEWS: Fix the example of Lazy#eager - -commit fac4339a1273df64fe764579f0d3ccccf64b74b4 - Author: Yusuke Endoh - Date: 2019-10-22 19:39:42 +0900 - - NEWS: add an example for Lazy#eager - -commit 0e735b218fbf0d329c4e76e79dbabda27a32d9c7 - Author: Yusuke Endoh - Date: 2019-10-22 19:32:04 +0900 - - NEWS: Make Net::FTP#features and #option more informative - -commit 22845176d70576ea9a331dca019c46d3c0605f12 - Author: MSP-Greg - Date: 2019-10-22 06:36:38 +0900 - - test/ruby/test_exception typo fix - -commit 5e0d33a85675663f47956815a0b70f3e4d1d9bc1 - Author: MSP-Greg - Date: 2019-10-22 06:36:10 +0900 - - appveyor.yml - remove timezone & tzinfo gems from MSVC builds - - Not compatible with concurrent-ruby dependency - -commit 97a03a035695e948ce6b3a0f91bfd0302fbc30de - Author: Alan Wu - Date: 2019-10-22 01:44:16 +0900 - - Add a cron job to keep CPDEBUG working - - Notes: - Merged: https://github.com/ruby/ruby/pull/2586 - -commit 9c553139ae7275f7f24694e54a35266c5c5d5e1c - Author: Alan Wu - Date: 2019-10-22 01:29:47 +0900 - - Fix build for CPDEBUG=1 - - The declarations went out-of-sync in dcfb7f6. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2586 - -commit fa8ac91e957a076f6df1adaecad7896817138009 - Author: Jeremy Evans - Date: 2019-10-22 08:54:58 +0900 - - Fix Fiber#transfer - - Fiber#transfer previously made it impossible to resume the fiber - if it was transferred to (no resuming the target of Fiber#transfer). - However, the documentation specifies that you cannot resume a fiber - that has transferred to another fiber (no resuming the source of - Fiber#transfer), unless control is transferred back. - - Fix the code by setting the transferred flag on the current/source - fiber, and unsetting the transferred flag on the target fiber. - - Fixes [Bug #9664] - Fixes [Bug #12555] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2588 - - Merged-By: jeremyevans - -commit f37cc1c719f12d2cad6032aa4e6f4236f0604992 - Author: Jeremy Evans - Date: 2019-07-08 10:51:42 +0900 - - Fallback to TCP in resolv if UDP bind raises EACCES - - Original patch from Andy Grimm. - - Fixes [Bug #10747] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2587 - -commit 62d43828770211470bcacb9e943876f981b5a1b4 - Author: Nobuyoshi Nakada - Date: 2019-10-19 03:05:03 +0900 - - Arguments forwarding [Feature #16253] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2575 - -commit 35f90bf1b9b06f93e919af3c4095b7aff903d799 - Author: Nobuyoshi Nakada - Date: 2019-10-22 01:27:49 +0900 - - NEWS: fixed method names [ci skip] - -commit 6067c0a220181a3627e60264907fd321e417ac04 - Author: Nobuyoshi Nakada - Date: 2019-10-22 01:27:26 +0900 - - NEWS: fixed mark-up [ci skip] - -commit 349ad6178c1ba5674a132dce05c7a8264b4d50c6 - Author: git - Date: 2019-10-22 01:07:35 +0900 - - * 2019-10-22 [ci skip] - -commit ee302f54a0b32352faac30758cf91f502997fe1f - Author: Koichi Sasada - Date: 2019-10-21 17:09:52 +0900 - - add an NEWS entry about [Feature #15575] - -commit 9bbc28340e62a732d1fad3676b7a81019bda2db6 - Author: Koichi Sasada - Date: 2019-10-21 17:00:16 +0900 - - add a NEWS entry about Proc#to_s change - -commit 0f0d05a3b11e6fe933c52e018900bac2bb6c9fc6 - Author: Koichi Sasada - Date: 2019-10-21 16:59:52 +0900 - - fix NEWS entry about unbundled gems - -commit ec2da08e2b65902168d7f4a6bed86c6c8842aa02 - Author: Nobuyoshi Nakada - Date: 2019-10-21 21:30:47 +0900 - - NEWS: fixed indents [ci skip] - -commit 228ebdbf2fe65c673be8b6240cdec4f1b266eb2f - Author: Yusuke Endoh - Date: 2019-10-21 21:26:47 +0900 - - NEWS: fix a typo - -commit f364564e66d1db1de8e80d669287386595c8bc46 - Author: Yusuke Endoh - Date: 2019-10-21 21:22:53 +0900 - - bignum.c (estimate_initial_sqrt): prevent integer overflow - - `Integer.sqrt(0xffff_ffff_ffff_ffff ** 2)` caused assertion failure - because of integer overflow. [ruby-core:95453] [Bug #16269] - -commit c8f97d16202a953a66a326b450a82d926f0fea9c - Author: Yusuke Endoh - Date: 2019-10-21 18:46:54 +0900 - - NEWS: structured the "Language changes" section - - There were too many items in the section in somewhat random order. - This change creates the following five subsections: - - * Pattern matching - * The spec of keyword arguments is changed towards 3.0 - * Numbered parameter - * proc/lambda without no block is deprecated - * Other miscellaneous changes - - Also it adds a handful of example code. - -commit 5d63a9da40b452d0455923b6838a961224c933bc - Author: Nobuyoshi Nakada - Date: 2019-10-21 17:45:27 +0900 - - [Bug #16121] adjusted indent [ci skip] - -commit b9702590445dfea62d271d0a5c942b7adfaaacdd - Author: Dylan Thacker-Smith - Date: 2019-10-21 17:29:21 +0900 - - Stop making a redundant hash copy in Hash#dup (#2489) - - * Stop making a redundant hash copy in Hash#dup - - It was making a copy of the hash without rehashing, then created an - extra copy of the hash to do the rehashing. Since rehashing creates - a new copy already, this change just uses that rehashing to make - the copy. - - [Bug #16121] - - * Remove redundant Check_Type after to_hash - - * Fix freeing and clearing destination hash in Hash#initialize_copy - - The code was assuming the state of the destination hash based on the - source hash for clearing any existing table on it. If these don't match, - then that can cause the old table to be leaked. This can be seen by - compiling hash.c with `#define HASH_DEBUG 1` and running the following - script, which will crash from a debug assertion. - - ```ruby - h = 9.times.map { |i| [i, i] }.to_h - h.send(:initialize_copy, {}) - ``` - - * Remove dead code paths in rb_hash_initialize_copy - - Given that `RHASH_ST_TABLE_P(h)` is defined as `(!RHASH_AR_TABLE_P(h))` - it shouldn't be possible for a hash to be neither of these, so there - is no need for the removed `else if` blocks. - - * Share implementation between Hash#replace and Hash#initialize_copy - - This also fixes key rehashing for small hashes backed by an array - table for Hash#replace. This used to be done consistently in ruby - 2.5.x, but stopped being done for small arrays in ruby 2.6.x. - - This also bring optimization improvements that were done for - Hash#initialize_copy to Hash#replace. - - * Add the Hash#dup benchmark - -commit 8b8b9c1a1fdb26f9b0470391234d8c935b083577 - Author: Koichi Sasada - Date: 2019-10-21 16:48:37 +0900 - - add a NEWS entry about [Feature #15602] - -commit 431132f037aecc8c9bc783fea257db653c4f8cb0 - Author: Nobuyoshi Nakada - Date: 2019-10-21 12:20:19 +0900 - - Pass the called keyword arguments if `keyword_init` - - Notes: - Merged: https://github.com/ruby/ruby/pull/2582 - -commit 215e4b8721d968b83c66c253e6da15b90520f679 - Author: git - Date: 2019-10-21 11:50:44 +0900 - - * expand tabs. [ci skip] - - Tabs were expanded because previously the file did not have any tab indentation. - Please update your editor config, and use misc/expand_tabs.rb in the pre-commit hook. - -commit 44da5a1c872879b05acab045263d0d4f906f04ba - Author: Nobuyoshi Nakada - Date: 2019-10-21 11:45:54 +0900 - - Look up event ID offsets by token as index - -commit 375124be51c796a53cce9716e83003ef37c7bcf5 - Author: K.Takata - Date: 2019-07-30 12:08:33 +0900 - - st: Do error check only on non-Ruby - - Notes: - Merged: https://github.com/ruby/ruby/pull/2304 - -commit e70e81b54e10f1882874884564454f566c41b0dd - Author: K.Takata - Date: 2019-07-29 21:38:05 +0900 - - st: Add NULL checking - - These are found by Coverity. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2304 - -commit 263ee6639d6f9f599613a20731c0646d125e0813 - Author: Nobuyoshi Nakada - Date: 2019-10-21 09:12:38 +0900 - - Make suggestions order stable [Bug #16263] - - As the result order of `DidYouMean::SpellChecker#correct` is - undefined, keep the order of the original candidates. - -commit 71ffe40a447a17a1c3388374b7c9979c826b131d - Author: MSP-Greg - Date: 2019-10-21 08:30:42 +0900 - - test/optparse/test_did_you_mean.rb - fix suggestion order - - Notes: - Merged: https://github.com/ruby/ruby/pull/2581 - -commit 27261007eb45adae4d5b30cbafa2ef27a2345b3f - Author: Nobuyoshi Nakada - Date: 2019-10-21 09:27:25 +0900 - - DidYouMean can be an empty stub module [Bug #16263] - -commit 1d29c9bd4601ef2783b5bb7de78ebf43cb282607 - Author: git - Date: 2019-10-21 09:11:47 +0900 - - * 2019-10-21 [ci skip] - -commit 92234667526dfb66cfeff0eab49fa3e7588ff73e - Author: MSP-Greg - Date: 2019-10-20 07:23:18 +0900 - - test_exception - fix with & w/o did_you_mean - - See Ruby issue 16263 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2577 - -commit ca7de0334d26b28eb8fd731b130404beb5cf5c12 - Author: Nobuyoshi Nakada - Date: 2019-10-20 20:45:56 +0900 - - Also BDOT2 and BDOT3 are operators - -commit 9e07dfd253f5086b306d5e32d3ef4238a8510bc2 - Author: Koichi Sasada - Date: 2019-10-20 16:16:54 +0900 - - show BASERUBY version at configure. - -commit a236eaa762137d7cb32b8311e0ef9a74bbb0f385 - Author: Koichi Sasada - Date: 2019-10-20 15:45:30 +0900 - - Native MonitorMixin::ConditionVariable#wait - - MonitorMixin::ConditionVariable#wait can be interrupted just after - Monitor#exit_for_cond. So implementation in C. - -commit a0a3c701816c2fe4ab6e940c6cf5638756ceb6dc - Author: Koichi Sasada - Date: 2019-10-20 14:21:04 +0900 - - delegate synchronize method - - Delegate MonitorMixin#synchronize body to Monitor#synchronize. - It makes guarantee interrupt safe (because Monitor#synchronize is - written in C). I thought Ruby implementation is also safe, but I - got stuck failure - so that I introduce this fix to guarantee interrupt safe. - -commit caac5f777ae288b5982708b8690e712e1cae0cf6 - Author: Koichi Sasada - Date: 2019-10-20 04:52:20 +0900 - - make monitor.so for performance. (#2576) - - Recent monitor.rb has performance problem because of interrupt - handlers. 'Monitor#synchronize' is frequently used primitive - so the performance of this method is important. - - This patch rewrite 'monitor.rb' with 'monitor.so' (C-extension) - and make it faster. See [Feature #16255] for details. - - Monitor class objects are normal object which include MonitorMixin. - This patch introduce a Monitor class which is implemented on C - and MonitorMixin uses Monitor object as re-entrant (recursive) - Mutex. This technique improve performance because we don't need - to care atomicity and we don't need accesses to instance variables - any more on Monitor class. - - Notes: - Merged-By: ko1 - -commit 434966bffddd4299d34f5d1f7f225bf7396d0807 - Author: git - Date: 2019-10-20 02:58:58 +0900 - - * 2019-10-20 [ci skip] - -commit f2ed8466d3fd3c80b6ad88791c9e92c2f95efa0b - Author: Nobuyoshi Nakada - Date: 2019-10-20 02:58:24 +0900 - - Fixed a typo [ci skip] - -commit 1d435bd51aeca75f6e437bc92de2271a716a1ced - Author: Nobuyoshi Nakada - Date: 2019-10-19 15:57:25 +0900 - - Extend Ripper DSL to set to pseudo variables other than `$$` - -commit 5c81e19b196e940b3233781b7ef0c5bfcbdee4f5 - Author: MSP-Greg - Date: 2019-10-19 03:03:54 +0900 - - appveyor.yml - MinGW - update for MSYS2 / Mingw-w64 (#2573) - - MSYS source code comes from both gcc.gnu.org & Mingw-w64. Updates to the Mingw-w64 source broke the MinGW build step. - - Fixes the issue until Mingw-w64 updates their source, then it should be reverted, see comments in code. - -commit 7dcc24fd81d841718ab2f3b616be084b70adaa89 - Author: git - Date: 2019-10-19 00:51:37 +0900 - - * 2019-10-19 [ci skip] - -commit bf934e48128774717997b036301e27e5fbccc3ce - Author: Nobuyoshi Nakada - Date: 2019-10-19 00:50:17 +0900 - - Fixed passing idNil as a Symbol - -commit 9cb809cfefafc58cc0bf56184ecc94aec3c41c1d - Author: Nobuyoshi Nakada - Date: 2019-10-18 22:17:06 +0900 - - Verbatim texts need more indent [ci skip] - - And separate ruby script and executed example. - -commit 58e2ca31dbbae9bb54917c9b3cc88fc138454eeb - Author: Kazuhiro NISHIYAMA - Date: 2019-10-18 20:24:36 +0900 - - Use `_` instead of `_n_` - -commit ddad1fb229421be3dc4b0a3031cb410b62a233a9 - Author: Yusuke Endoh - Date: 2019-10-18 17:53:17 +0900 - - NEWS: Mention that optparse now supports did_you_mean for unknown option - -commit e2b719bed640d4813fd5f753c80d33d01c612078 - Author: Nobuyoshi Nakada - Date: 2019-10-18 17:46:53 +0900 - - Support DidYouMean by AmbiguousOption too - -commit b4d308b41939659fe8a4df28afc82eb5205709d1 - Author: Nobuyoshi Nakada - Date: 2019-10-18 17:39:16 +0900 - - Defer adding additional info until getting the message of an error - -commit e29e49abf018730d8419b4797ff17942e00d810b - Author: Nobuyoshi Nakada - Date: 2019-10-18 16:43:40 +0900 - - Default DidYouMean.formatter to PlainFormatter - -commit d4e52f672cf520d6929d22310a340e09fcb0e35d - Author: Nobuyoshi Nakada - Date: 2019-10-18 15:19:26 +0900 - - Added no suggestion test case - -commit 46fa301e82d50161fc7ec8e455d9d498b15b2c7a - Author: Nobuyoshi Nakada - Date: 2019-10-18 15:15:59 +0900 - - Use DidYouMean.formatter - - Instead of building messages separately. - -commit e50b8949fad96a30226e4122172822a2a4c7301d - Author: Nobuyoshi Nakada - Date: 2019-10-18 14:59:26 +0900 - - Suppress numbered parameter warnings - -commit 095cdca15b430fb5973b1540d92a29598552adba - Author: Nobuyoshi Nakada - Date: 2019-10-18 14:03:28 +0900 - - Make weakmap finalizer an ifunc lambda - - Simple comparison between proc/ifunc/method invocations: - - ``` - proc 15.209M (± 1.6%) i/s - 76.138M in 5.007413s - ifunc 15.195M (± 1.7%) i/s - 76.257M in 5.020106s - method 9.836M (± 1.2%) i/s - 49.272M in 5.009984s - ``` - - As `proc` and `ifunc` have no significant difference, chosen the - latter for arity check. - -commit ce7942361d1f1f9a1ca958b6979a432da2014683 - Author: Nobuyoshi Nakada - Date: 2019-10-18 02:51:15 +0900 - - Use identhash as WeakMap - - As ObjectSpace::WeakMap allows FLONUM as a key, needs the special - deal for its hash. [Feature #16035] - -commit c3b64a86bcd7773c081f5049115c57ec73d7a76a - Author: Yusuke Endoh - Date: 2019-10-16 16:31:41 +0900 - - lib/optparse.rb: Show a did_you_mean hint for unknown option - - ``` - require 'optparse' - - OptionParser.new do |opts| - opts.on("-f", "--foo", "foo") {|v| } - opts.on("-b", "--bar", "bar") {|v| } - opts.on("-c", "--baz", "baz") {|v| } - end.parse! - ``` - - ``` - $ ruby test.rb --baa - Traceback (most recent call last): - test.rb:7:in `
': invalid option: --baa (OptionParser::InvalidOption) - Did you mean? baz - bar - ``` - - Notes: - Merged: https://github.com/ruby/ruby/pull/2561 - -commit 5ca5529d223ee962451685badc9e928ea87dbb44 - Author: Seiei Miyagi - Date: 2019-10-18 01:34:18 +0900 - - Fix warning of generated parser for nested module - - Notes: - Merged: https://github.com/ruby/ruby/pull/2571 - -commit 1d564acedc820e91c585cb4850844a09f9a6af96 - Author: Aaron Patterson - Date: 2019-10-18 05:35:26 +0900 - - Remove unused constant. - - This constant isn't used, so lets remove it. - -commit 9026e12f93bb0f3f63d7449cdb5eabb2e660088f - Author: Aaron Patterson - Date: 2019-10-18 05:30:09 +0900 - - Look up constant instead of caching in a global - - The global can go bad if the compactor runs, so we need to look up the - constant instead of caching it in a global. - -commit ee821e90741ebedc6c7a3bb0e8b67e59f3a44022 - Author: Jeremy Evans - Date: 2019-10-18 02:16:32 +0900 - - Update test to handle x32 ABI compiled Ruby on Linux - - Suggestion from Laurence Parry. - - Fixes [Bug #16030] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2572 - -commit 8c0629ba58c5c95b970a657493d261356eedea1d - Author: aycabta - Date: 2019-10-18 02:51:12 +0900 - - Treat key sequences from getwch() that start from 0 or 0xE0 correctly - -commit 58657fa134852311ce6ce2827f72ba2d1b29a8bb - Author: aycabta - Date: 2019-10-18 02:31:17 +0900 - - Add numeric keypad key sequences on Windows - -commit 53c05a6cf4bb1713d9db63b6e292644bead16da6 - Author: aycabta - Date: 2019-10-18 02:29:13 +0900 - - Remove freeze - -commit 13b106a19c9c819fb0c887beb4787ab894cdba6c - Author: aycabta - Date: 2019-10-18 02:15:53 +0900 - - Ignore the input method key sequence from getwch() correctly - - The function getwch() returns some key sequences which start from 0 or 0xE0 - with a following key code. Alt+` that is on/off key for input methods gives 0 - and 41 so Reline was always ignoring 0 and following keys but numeric keypad - keys give 0 and following actual keys. This commit changes the behavior to be - ignoring only the 0 and 41 sequence. - -commit 0162e7e6471b639dfeeded29943e9e27c9519826 - Author: Jeremy Evans - Date: 2019-08-12 08:22:58 +0900 - - Make circular argument reference a SyntaxError instead of a warning - - Fixes [Bug #10314] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2569 - -commit fdfb5100b9e74cfb89b6de3649e98cb1ad85497a - Author: git - Date: 2019-10-18 00:46:02 +0900 - - * 2019-10-18 [ci skip] - -commit d1a7305848969128d3eb175a4a3b2d7f7929376a - Author: aycabta - Date: 2019-10-18 00:41:17 +0900 - - Insert multiline incremental search result correctly - -commit 4f13927f1fe06a5fe23e25448d9adc80031e0bad - Author: Nobuyoshi Nakada - Date: 2019-10-17 19:42:25 +0900 - - [DOC] no change on Windows [Bug #15267] [ci skip] - -commit e169ad93f44e1944ecf7bb65133fd34e8b868ea8 - Author: Nobuyoshi Nakada - Date: 2019-10-17 14:42:38 +0900 - - Fixed File.extname at a name ending with a dot - - File.extname now returns a dot string at a name ending with a dot. - [Bug #15267] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2565 - -commit 2a261909cc6d0767d584c0555a1c6594aacf567a - Author: git - Date: 2019-10-17 17:45:02 +0900 - - * remove trailing spaces. [ci skip] - -commit 2a22a6b2d8465934e75520a7fdcf522d50890caf - Author: Kenichi Kamiya - Date: 2019-10-17 17:44:46 +0900 - - Regexp#match{?} with nil raises TypeError as String, Symbol (#1506) - - * {String|Symbol}#match{?} with nil returns falsy - - To improve consistency with Regexp#match{?} - - * String#match(nil) returns `nil` instead of TypeError - * String#match?(nil) returns `false` instead of TypeError - * Symbol#match(nil) returns `nil` instead of TypeError - * Symbol#match?(nil) returns `false` instead of TypeError - - * Prefer exception - - * Follow empty ENV - - * Drop outdated specs - - * Write ruby/spec for above - - https://github.com/ruby/ruby/pull/1506/files#r183242981 - - * Fix merge miss - -commit 41457dcbe050a698c357b516d0a012b1b584643a - Author: aycabta - Date: 2019-10-17 16:54:06 +0900 - - Remove unused variable - -commit 60a0c20cb637ac3b2edc561dbc5888fae290b0e6 - Author: aycabta - Date: 2019-10-17 16:35:11 +0900 - - Refactor prompt generation logic - -commit 37457117c941b700b150d76879318c429599d83f - Author: Kazuhiro NISHIYAMA - Date: 2019-10-17 12:51:29 +0900 - - Use `\&` instead of `\1` with capture - -commit d5744aff3a164c358f92ef9dc2cda5c7a7612d97 - Author: Jeremy Evans - Date: 2019-10-15 01:00:42 +0900 - - Fix DRbServer#any_to_s - - My previous fix in d0ed935d5bf8c3fce9800742a36e44fb7f63dda4 was - not correct, as pointed out by cremno on GitHub. - - This simplifies things by just using Kernel#to_s. Also switch to - bind_call(obj) instead of bind(obj).call for better performance. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2554 - -commit 567e312d1f56c27ecb4fa20deac4311f05ee5507 - Author: Jeremy Evans - Date: 2019-08-09 07:44:26 +0900 - - Do not raise an exception on a closed DRb socket - - This rescues some exceptions that could happen with a closed or - shutdown DRb socket. This can prevent the server from - exiting if an client socket is closed directly after it is - accepted. - - Fixes [Bug #8039] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2554 - -commit 50b8033d6b7404670ee985de1473fffc10dd7d9c - Author: Jeremy Evans - Date: 2019-08-15 08:44:11 +0900 - - Handle subclasses of Exception in drb - - This makes it so that client instances that call a method on a - server-side object that raise a subclass of Exception are handled - similarly to those that raise a subclass of StandardError. - - Only reraise exceptions that we are fairly sure we don't want to - rescue. - - Fixes [Bug #5618] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2554 - -commit 2993b24a1ecc5fa3cc9f140bfd80669c3a3b7b9c - Author: Jeremy Evans - Date: 2019-08-25 09:11:06 +0900 - - Warn for calling public/protected/private/module_function without arguments inside method - - Calling these methods without an argument does not have the - desired effect inside a method. - - Fixes [Bug #13249] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2562 - -commit db84123600a2112063441dec4411ab5af6c3a78e - Author: aycabta - Date: 2019-10-17 02:19:01 +0900 - - Calculate prompt width correctly - -commit e26c6d4ab840c100c4f3ad20d0399598ef427c13 - Author: aycabta - Date: 2019-10-17 01:51:29 +0900 - - Collect multiline prompt logic into a method - -commit 3fea2d91ad7a1c493a25a531fcbd3f90f5a6406e - Author: Benoit Daloze - Date: 2019-10-17 01:21:18 +0900 - - Use an even indent in NEWS for code - - * Makes it easier to copy-paste and add code backticks. - -commit e003f29e2114549c7488be4440439669797e78a9 - Author: git - Date: 2019-10-17 00:29:39 +0900 - - * 2019-10-17 [ci skip] - -commit 5c80dffd0555a36a31f0da51696609a6af5e34ea - Author: Takashi Kokubun - Date: 2019-10-17 00:28:53 +0900 - - Revert "Disable ccache on arm64 build" - - This reverts commit e8124729fbeaf159ae615f61980ee10018ed5134. - - It worked once, but soon after that it stopped working again - https://travis-ci.org/ruby/ruby/jobs/598491972 - -commit 7df227804af8eefac9d82cf449cab09c086aea60 - Author: aycabta - Date: 2019-10-16 22:34:58 +0900 - - Support multiline history in incremental search - -commit f8fb51c976313b8053412c80f3f7474cdd89b4b3 - Author: Nobuyoshi Nakada - Date: 2019-10-16 21:00:36 +0900 - - Revert "alias assert_raise_message for compatibility with test-unit" - - This reverts commit 43015275b9a7f2833c93ad11ea96ae4cb3b7acd7. - - `assert_raise_message` in test-unit is different from - `assert_raise_with_message`. It checks the exception message - only, but not the exception class, - -commit 43015275b9a7f2833c93ad11ea96ae4cb3b7acd7 - Author: Nobuyoshi Nakada - Date: 2019-10-16 17:22:31 +0900 - - alias assert_raise_message for compatibility with test-unit - -commit 5437d7c879585fbdb0c294298eb76cc563e01c69 - Author: Takashi Kokubun - Date: 2019-10-16 16:11:05 +0900 - - Temporarily drop test_jit_debug.rb - - Still some CIs are failing: - https://ci.appveyor.com/project/ruby/ruby/builds/28141041/job/v4hfc99sjefqabkk - http://ci.rvm.jp/results/trunk-vm-asserts@silicon-docker/2317313 - - I'll fix them later. - -commit d70855c72584f303228b7821889c0b68813ec06f - Author: Nobuyoshi Nakada - Date: 2019-10-16 15:16:51 +0900 - - Added test for rdoc `--force-update` option - -commit 17ee01e3f618f15f2bec794238874a62dc60deb6 - Author: Nobuyoshi Nakada - Date: 2019-10-16 15:16:07 +0900 - - Removed an unused assignment - -commit c15856d76dd46030c805523b05808d32ead15162 - Author: Takashi Kokubun - Date: 2019-10-16 15:14:55 +0900 - - Do not test --jit-debug on -DVM_CHECK_MODE - -commit eef25f95b75f2d8312753002c4f91febaa7c866f - Author: Takashi Kokubun - Date: 2019-10-16 15:04:34 +0900 - - Maintain the intention of comment in Travis matrix - -commit 006d9013ea29ed8fe837f41796067b10df7a49ee - Author: Takashi Kokubun - Date: 2019-10-16 14:56:19 +0900 - - Remove arm64 build from Drone - - because it started to run on Travis. - -commit e8124729fbeaf159ae615f61980ee10018ed5134 - Author: Takashi Kokubun - Date: 2019-10-16 14:54:43 +0900 - - Disable ccache on arm64 build - - Follow up https://github.com/ruby/ruby/pull/2559 - - According to experiments in https://github.com/ruby/ruby/pull/2560, - disabling cache seems to make arm64 build succeed. - -commit 4ccb49bad31b3c4a9cc7c6138cae93bd60a7bec4 - Author: Takashi Kokubun - Date: 2019-10-16 14:47:20 +0900 - - Enforce --jit-debug test by another way - -commit 759576a03f0a39f3190e79526d138adc3a3f0a62 - Author: Takashi Kokubun - Date: 2019-10-16 14:01:25 +0900 - - Fix test path on travis build - -commit 2679e10942c8cebc11423cac8303bea7b4c1522a - Author: Takashi Kokubun - Date: 2019-10-16 13:37:00 +0900 - - Test without --jit-debug by default - - and let RUBY_DEBUG=1 job test it. - - We usually don't use --jit-debug and we should test no --jit-debug by - default. - -commit d97229de5c03fb3b824c6ed263de6e005fa3a86e - Author: Jun Aruga - Date: 2019-10-16 12:59:40 +0900 - - Add arm64 case on Travis. (#2559) - - misc-16234 - -commit 6081ddd6e6f2297862b3c7e898d28a76b8f9240b - Author: Jeremy Evans - Date: 2019-10-16 04:46:24 +0900 - - Dup hash with keyword flag when converted to keywords - - When ruby2_keywords is used on a method, keywords passed to the method - are flagged. When the hash is passed as the last element of an - argument splat to another method, the hash should be treated as a - keyword splat. When keyword splatting a hash, a duplicate of the - hash is made. So when auto-splatting the hash with the keyword - flag, a duplicate of the hash should also be made. - - This fixes cases where the hash is later passed to another method - and would be treated as keywords there: - - class Object - ruby2_keywords def foo(*a) bar(*a) end - def bar(*a) baz(*a) end - def baz(*a, **kw) [a, kw] end - end - foo(:a=>1) - - Previously, this would pass the :a=>1 as keywords to bar and also as - keywords to baz. Now it only passes :a=>1 as keywords to bar, but bar - passes :a=>1 as a positional hash to baz (which in this case - generates a warning in 2.7). - -commit 259601ab578885418b36138e457c2a93dd281896 - Author: aycabta - Date: 2019-10-16 02:55:45 +0900 - - Support backspace in incremental search - -commit a5245c165808b9ac0a492e218b0603e93262b449 - Author: aycabta - Date: 2019-10-16 02:08:44 +0900 - - C-r is incremental history search in vi insert mode - -commit 1c50ce2cf8347d0ecc29245cd0a2c7ede5b838dd - Author: git - Date: 2019-10-16 01:42:52 +0900 - - * 2019-10-16 [ci skip] - -commit 929d5fd3b99c1413f737ff16cf0680698036e60f - Author: Nobuyoshi Nakada - Date: 2019-10-15 22:32:10 +0900 - - Comparable#clamp with a range [Feature #14784] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2556 - -commit 375cf129189f32f7be76ac525035bcde691a63e7 - Author: Yusuke Endoh - Date: 2019-10-15 23:29:49 +0900 - - test/csv/write/test_general.rb: suppress warnings - - of "setting Encoding.default_internal". - -commit c01df7e58f34eb81bf569614091a4db428c61282 - Author: Nobuyoshi Nakada - Date: 2019-10-15 23:13:49 +0900 - - Fixed the key to delete [Bug #16250] - - https://github.com/ruby/ruby/commit/f94202fcc228d0348ca050a7b18a8f8a538a7305#commitcomment-35505076 - - Co-Authored-By: Ary Borenszweig - -commit 81176095f45a5c9f14fc61dfce041735094f893f - Author: Nobuyoshi Nakada - Date: 2019-10-15 22:38:39 +0900 - - [DOC] fixed a variable name [ci skip] - - replaced "anObject" with "obj". also marked up with simple `_`s - instead of ``. - -commit e0e93a199d28446a5d1b1289ee9466f7af01e62e - Author: Hiroshi SHIBATA - Date: 2019-10-15 20:15:28 +0900 - - [rubygems/rubygems] Bump version to 3.1.0.pre2 - - https://github.com/rubygems/rubygems/commit/a7a673ce22 - -commit 51a31b86e9d60643526980830d44f7b5134f39c0 - Author: Hiroshi SHIBATA - Date: 2019-10-15 20:21:09 +0900 - - [rubygems/rubygems] Also bump test variable - - https://github.com/rubygems/rubygems/commit/97e9768612 - -commit d2982bea679b494712f7c19afc0308be0aa2246b - Author: Kazuhiro NISHIYAMA - Date: 2019-10-15 20:18:06 +0900 - - Remove duplicated `.` [ci skip] - -commit f94202fcc228d0348ca050a7b18a8f8a538a7305 - Author: Nobuyoshi Nakada - Date: 2019-10-15 09:54:23 +0900 - - Use compare_by_identity hash [Bug #16250] - -commit b7079e538437aacf079d82c21504e44d7396926a - Author: Kazuhiro NISHIYAMA - Date: 2019-10-15 18:50:46 +0900 - - Try to avoid random failure - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/openbsd-current/ruby-master/log/20191015T070011Z.fail.html.gz - ``` - 1) Failure: - TestProcess#test_kill_at_spawn_failure [/home/chkbuild/chkbuild/tmp/build/20191015T070011Z/ruby/test/ruby/test_process.rb:2276]: - [ruby-core:69304] [Bug #11166]. - <#> expected but was - . - `` - -commit c800967acd35a763a6f09fe2b2e29870f064c22e - Author: Takashi Kokubun - Date: 2019-10-15 13:58:13 +0900 - - Simplify circular reference check of IRB::Color - -commit 96617ad1d57a13e9a282fb663ea73e4801519389 - Author: Ary Borenszweig - Date: 2019-10-15 13:25:05 +0900 - - IRB colorize: take into account recursive arrays and hashes (#2555) - - [Bug #16250] - -commit ddd42d8ebdefc520b0c7d6ada4fb0de6969a49f8 - Author: git - Date: 2019-10-15 09:55:44 +0900 - - * 2019-10-15 [ci skip] - -commit 978276a7d9249535f855088f866551b6557f321f - Author: Jeremy Evans - Date: 2019-10-15 09:43:11 +0900 - - Update documentation for File#{readable,writable,executable}{,_real}? [ci skip] - - Some OS-level security features cause these methods to not return - expected results. For example fs.protected_regular sysctl on Linux, - or pledge(2)/unveil(2) on OpenBSD. - - Fixes [Bug #16002] - -commit c3a626030235c0349e14c6bc07177810daee841c - Author: Masatoshi SEKI - Date: 2019-10-14 22:56:37 +0900 - - add require "monitor" - -commit 8488d5b5b6cc9205e8e0641c514f1f2e38bf7d1e - Author: Masatoshi SEKI - Date: 2019-10-14 20:30:22 +0900 - - Automatically close fds on fork (and GC). The connection pools are maintained at thread scope. - -commit a4cf11c10fcaadfab738d8e98712551f701eef5a - Author: Florian Frank - Date: 2017-12-21 17:57:16 +0900 - - [flori/json] fix test as reported in #343 - - https://github.com/flori/json/commit/565c72ba9e - -commit 308bbb4e10d247063889ebd9ba957e62f17978a5 - Author: Sho Hashimoto - Date: 2019-01-08 09:12:05 +0900 - - [flori/json] Add ascii_only option to JSON::Ext::Generator::State.new. - - https://github.com/flori/json/commit/0e99a9aac5 - -commit 98a9445db943c747e8d98cf7236e891eb48b5be0 - Author: Watson - Date: 2018-03-02 00:45:28 +0900 - - [flori/json] Add shortcut converting to String - - In where to convert Hash key to String for json, this patch will add shortcut for String/Symbol in Hash key. - - ``` - $ ruby bench_json_generate.rb - Warming up -------------------------------------- - json 65.000 i/100ms - Calculating ------------------------------------- - json 659.576 (± 1.5%) i/s - 3.315k in 5.027127s - ``` - - ``` - $ ruby bench_json_generate.rb - Warming up -------------------------------------- - json 78.000 i/100ms - Calculating ------------------------------------- - json 789.781 (± 2.7%) i/s - 3.978k in 5.041043s - ``` - - ``` - require 'json' - require 'benchmark/ips' - - obj = [] - - 1000.times do |i| - obj << { - "id" => i, - :age => 42, - } - end - - Benchmark.ips do |x| - x.report "json" do |iter| - count = 0 - while count < iter - JSON.generate(obj) - count += 1 - end - end - end - ``` - - https://github.com/flori/json/commit/38c0f6dbe4 - -commit a2f9c38a718eecef6795b4a8667589c0ef68b737 - Author: Watson - Date: 2018-03-02 00:33:18 +0900 - - [flori/json] Convert Hash object using rb_hash_foreach() - - To convert Hash convert, this part was using following pseudo code - - ``` - obj.keys.each do |key| - value = obj[key] - ... - end - ``` - - and `rb_funcall()` was called for `obj.keys`. - It might be slightly heavy to call the Ruby method. - This patch will iterate to convert Hash object about key/value using `rb_hash_foreach()` Ruby API instead of `rb_funcall()`. - - ``` - $ ruby bench_json_generate.rb - Warming up -------------------------------------- - json 55.000 i/100ms - Calculating ------------------------------------- - json 558.501 (± 1.1%) i/s - 2.805k in 5.022986s - ``` - - ``` - $ ruby bench_json_generate.rb - Warming up -------------------------------------- - json 65.000 i/100ms - Calculating ------------------------------------- - json 659.576 (± 1.5%) i/s - 3.315k in 5.027127s - ``` - - ``` - require 'json' - require 'benchmark/ips' - - obj = [] - - 1000.times do |i| - obj << { - "id" => i, - :age => 42, - } - end - - Benchmark.ips do |x| - x.report "json" do |iter| - count = 0 - while count < iter - JSON.generate(obj) - count += 1 - end - end - end - ``` - - https://github.com/flori/json/commit/a73323dc5e - -commit 2003755a2c491fd81496308cad97ce6304c51fe8 - Author: Nobuyoshi Nakada - Date: 2019-10-14 19:13:20 +0900 - - [flori/json] Fixed unexpected illegal/malformed utf-8 error - - flori/json@c34d01ff6a18dac04a90b2e0f820cdb1d5c7e1b2 does not - consider US-ASCII compatible but non-UTF-8 encodings, and causes - an error in RDoc tests. - - https://github.com/flori/json/commit/4f471bf590 - -commit d7fa7e2c860430a3dfa1b08be96734925b6c81d8 - Author: Watson - Date: 2018-03-03 01:16:34 +0900 - - [flori/json] Convert string encoding to UTF-8 only when needed - - ## Before - ``` - $ ruby bench_json_generate.rb - Warming up -------------------------------------- - json 129.000 i/100ms - Calculating ------------------------------------- - json 1.300k (± 2.3%) i/s - 6.579k in 5.064656s - ``` - - ## After - ``` - $ ruby bench_json_generate.rb - Warming up -------------------------------------- - json 189.000 i/100ms - Calculating ------------------------------------- - json 1.964k (± 3.3%) i/s - 9.828k in 5.011237s - ``` - - ## Code - ``` - require 'json' - require 'benchmark/ips' - - obj = [] - - 1000.times do |i| - obj << { - "id" => i, - :age => 42, - } - end - - Benchmark.ips do |x| - x.report "json" do |iter| - count = 0 - while count < iter - JSON.generate(obj) - count += 1 - end - end - end - ``` - - https://github.com/flori/json/commit/c34d01ff6a - -commit 40724d7d10e9902fcdc4149326acbfe4dd95d3c7 - Author: Watson - Date: 2018-03-02 00:51:30 +0900 - - [flori/json] Convert String encoding using `rb_str_encode()` - - `rb_funcall` might be slightly heavy to call the Ruby method. - This patch will convert String encoding using `rb_str_encode()` instead of `rb_funcall()`. - - ## Before - ``` - $ ruby bench_json_generate.rb - Warming up -------------------------------------- - json 78.000 i/100ms - Calculating ------------------------------------- - json 789.781 (± 2.7%) i/s - 3.978k in 5.041043s - ``` - - ## After - ``` - $ ruby bench_json_generate.rb - Warming up -------------------------------------- - json 129.000 i/100ms - Calculating ------------------------------------- - json 1.300k (± 2.3%) i/s - 6.579k in 5.064656s - ``` - - ## Code - ``` - require 'json' - require 'benchmark/ips' - - obj = [] - - 1000.times do |i| - obj << { - "id" => i, - :age => 42, - } - end - - Benchmark.ips do |x| - x.report "json" do |iter| - count = 0 - while count < iter - JSON.generate(obj) - count += 1 - end - end - end - ``` - - https://github.com/flori/json/commit/9ae6d2969c - -commit 641136c4af89ec2bc1f2c80aeefc7a38f3bc48df - Author: Watson - Date: 2018-03-04 23:34:26 +0900 - - [flori/json] Does not check whether illegal utf-8 if string has ascii only. - - ## Before - ``` - $ ruby bench_json_generate.rb - Warming up -------------------------------------- - json 25.000 i/100ms - Calculating ------------------------------------- - json 250.478 (± 4.8%) i/s - 1.250k in 5.002238s - ``` - - ## After - ``` - $ ruby bench_json_generate.rb - Warming up -------------------------------------- - json 32.000 i/100ms - Calculating ------------------------------------- - json 360.652 (± 3.6%) i/s - 1.824k in 5.064511s - ``` - - ## Test code - ``` - require 'json' - require 'benchmark/ips' - - obj = [] - - 1000.times do |i| - obj << { - :string => "x" * 100, - :utf8 => "ã‚" * 100 - } - end - - Benchmark.ips do |x| - x.report "json" do |iter| - count = 0 - while count < iter - JSON.generate(obj) - count += 1 - end - end - end - ``` - - https://github.com/flori/json/commit/91a24ecac3 - -commit d9e50fcbeb34534d065f3662b6b952bc57994b43 - Author: Sho Hashimoto - Date: 2019-01-15 22:16:05 +0900 - - [flori/json] Pass args all #to_json in json/add/*. - - https://github.com/flori/json/commit/36a7ef6790 - -commit 7376d70cb0817158a9ce0ef433872be5ca7af56b - Author: Florian Frank - Date: 2019-04-29 22:56:14 +0900 - - [flori/json] Only attempt to resize strings not other objects - - https://github.com/flori/json/commit/167ada8da7 - -commit ede1a3dc110d3cfc094ce4cd5b27f92cab8b7b6c - Author: Kazuhiro NISHIYAMA - Date: 2019-10-14 17:30:04 +0900 - - Fix typos [ci skip] - -commit 0195966ba26b9cec9a8b32a2dc502ad753764d2a - Author: Nobuyoshi Nakada - Date: 2019-10-14 15:42:27 +0900 - - Suppress warnings for Thread.exclusive - -commit 3e763883eab8435c6ebf9427b9bc49b95a1c7175 - Author: Nobuyoshi Nakada - Date: 2019-10-14 15:10:33 +0900 - - Fixed overflow at onig_region_set - - To get rid of a bug of `onig_region_set` which takes `int`s - instead of `OnigPosition`s, set elements of `beg` and `end` - members directly, for the time being. - -commit d0ed935d5bf8c3fce9800742a36e44fb7f63dda4 - Author: Jeremy Evans - Date: 2019-10-14 14:20:32 +0900 - - Fix some DRb issues (#2552) - - * Handle BasicObject in drb - - Also fix a bug in rescue clause of any_to_s because sprintf - does not handle the %l modifier. - - Fixes [Bug #7833] - - * Do not send a reply to the client if there is a connection error - - This allows for normal TCP shutdown (fin-ack-fin-ack instead of - fin-ack-push-rst). - - Patch from pierre@mouraf.org (Pierre-Alexandre Meyer). - - Fixes [Bug #2339] - - * Detect fork and do not reuse forked connections in drb - - This associates each DRbConn with a pid, and if the pid changes, - it closes any DRbConns in the pool with a pid that no longer - matches. This fixes DRb servers from sending messages intended - for one client to another client after forking. - - Fixes [Bug #2718] - Fixes [Bug #14471] - -commit 95c420c4a65ca2e7f3edf27134ad33691959296c - Author: Sutou Kouhei - Date: 2019-10-14 12:40:50 +0900 - - Import StringScanner 1.0.3 (#2553) - - Notes: - Merged-By: kou - -commit 6fa3492362dc91cfec7eb4fd55918791da5a34fb - Author: Takashi Kokubun - Date: 2019-10-14 11:29:46 +0900 - - Eliminate the possibility to leave freed ISeq - - in active_units - - Hoping to fix: - http://ci.rvm.jp/results/trunk-mjit@silicon-docker/2311375 - -commit 183b42150962e507cd69ceddb64ad2a10f02fdfa - Author: Takashi Kokubun - Date: 2019-10-14 06:11:02 +0900 - - Delay the free until we stop referring to a unit - - `if (unit->iseq)` might have referred to a freed unit. Therefore this - commit delays its free. - -commit 673f3842dd520ac872bb003de393ba7ae558840a - Author: git - Date: 2019-10-14 02:05:30 +0900 - - * 2019-10-14 [ci skip] - -commit 26fae9aa9db59fdee7422a276662b45611e98a22 - Author: Takashi Kokubun - Date: 2019-10-14 01:59:43 +0900 - - Remove the quick stop path after convert_unit_to_func - - Now I'm not exactly sure why I needed to check `stop_worker_p` after - `mjit_copy_cache_from_main_thread` of `convert_unit_to_func` - in 4161674b2fbea6bdd01783ac5d3b39d88db22972. - If it's for avoiding deadlock under `in_gc` condition, we should keep it. - - However, if it's not the case and it's just for retrying accidental - compilation failure or just to avoid `MJIT_ATOMIC_SET` and - `compact_all_jit_code`, I think this quick stop path is not mandatory. - - Because this path is somewhat problematic in my upcoming fix in - mjit_worker, let me try to remove this first and see how CI goes. - -commit 6a1809e2e1a95c14cfb72701df480e3ebccd4b24 - Author: Burdette Lamar - Date: 2019-10-13 09:48:20 +0900 - - Enhance doc for ENV.delete - - Notes: - Merged: https://github.com/ruby/ruby/pull/2542 - -commit 6ee2fb5021c4c09b718b88089c83073997d5412f - Author: git - Date: 2019-10-13 00:54:04 +0900 - - * 2019-10-13 [ci skip] - -commit a5ecf7e0a165dff1b4604f1ed75a677c690488df - Author: Yusuke Endoh - Date: 2019-10-13 00:51:50 +0900 - - dir.c (join_path_from_pattern): check NULL from malloc - - Coverity Scan points out that all the return values of GLOB_ALLOC_N are - NULL-checked except this call. - -commit 90b9900dc159efb63feee9b0995cc5d56aef6d75 - Author: Yusuke Endoh - Date: 2019-10-13 00:49:18 +0900 - - io.c (rb_update_max_fd): fail with a negative file descripter - - Coverity Scan points out that ext/socket/unixsocket.c may pass -1 to - rb_update_max_fd. I'm unsure whether it can happen actually or not, but - it would be good for the function to reject a negative value. - -commit ebc2198d9f0292fee97e623b5e2a545fccb91d2a - Author: Yusuke Endoh - Date: 2019-10-12 22:43:34 +0900 - - re.c (match_set_string): add a check for memory allocation - - Found by Coverity Scan - -commit 7ebf9da78830cd13895a38809b0c6f1fc6797620 - Author: Nobuyoshi Nakada - Date: 2019-10-12 22:08:50 +0900 - - Also moved fallback definition of __has_attribute - -commit cb14c4a535ca95bb87d47be284f447c9325733fd - Author: Yusuke Endoh - Date: 2019-10-12 21:10:49 +0900 - - missing/setproctitle.c: remove nonsense NULL check - - If fmt is NULL, ptitle is uninitialized and used. - SETPROCTITLE(3bsd) says "If fmt is NULL, the process title is restored", - but looks like the feature is not implemented in missing/setproctitle.c. - At least the source code of ruby does not pass NULL to the function. - So I assume this function requires non-NULL fmt. - - This issue was found by Coverity Scan. - -commit f4055647115f2003ce614dd16cf68d2933f811fe - Author: Nobuyoshi Nakada - Date: 2019-10-12 18:47:06 +0900 - - Suppress deprecation warnings of MD5 from Xcode 11.1 - -commit 04333da7beb3e50daf5f53ef7fe24b253a1a26ef - Author: Nobuyoshi Nakada - Date: 2019-10-12 18:14:15 +0900 - - Suppress "clobbered" warnings by gcc 9.2.0 - -commit 710bc003791b90adf3970e137c69f283c88234cd - Author: Nobuyoshi Nakada - Date: 2019-10-12 17:21:05 +0900 - - Moved RB_METHOD_DEFINITION_DECL to intern.h - - This macro is used here before defined in ruby.h. - -commit 6333020fc924d3ae63775c032bbe8f57364cd42e - Author: Nobuyoshi Nakada - Date: 2019-10-12 14:55:55 +0900 - - atime may not updated unless strictatime is set on macOS Catalina - - Cited from mount(8): - - ``` - strictatime - Always update the file access time when reading from a - file. Without this option the filesystem may default to a - less strict update mode, where some access time updates - are skipped for performance reasons. This option could be - ignored if it is not supported by the filesystem. - ``` - -commit 92df7d98b62f48cf21cdec522f2e7b34380fd718 - Author: Sutou Kouhei - Date: 2019-10-12 14:03:21 +0900 - - Import CSV 3.1.2 (#2547) - - Notes: - Merged-By: kou - -commit d6e68bb263e79cb802fa683d9c4139ddca2fd4f5 - Author: Kazuhiro NISHIYAMA - Date: 2019-10-12 13:25:52 +0900 - - Use `warn` with `uplevel:` instead of `caller` - -commit f6a666a1fcbb7076b57fe08bba758719cb68bdea - Author: git - Date: 2019-10-12 12:07:36 +0900 - - * 2019-10-12 [ci skip] - -commit 412cd56766a4822c48117a16d79303d3d915b28a - Author: Sutou Kouhei - Date: 2019-10-12 12:07:15 +0900 - - Import REXML 3.2.3 (#2548) - - Notes: - Merged-By: kou - -commit c866663784ea5a8f16e7fe5127127fb46ae90e6e - Author: Yusuke Endoh - Date: 2019-10-11 21:43:18 +0900 - - io.c (NUM2IOCTLREQ): Accept a value more than INT_MAX - - ioctl accepts int as request arguments on some platforms, but some - requests are more than INT_MAX, e.g., RNDGETENTCNT(0x80045200). - Passing (0x80045200 | (-1 << 32)) may work around the issue, but it may - not work on a platform where ioctl accepts unsigned long. So this - change uses NUM2LONG and then casts it to int. - -commit 9e4a53fe13d8e3ad2e284dea8034bdd6a0561d97 - Author: Yusuke Endoh - Date: 2019-10-11 21:39:21 +0900 - - test/ruby/test_rubyoptions.rb (test_encoding): skipped on Android - - On Android, nl_langinfo() always returns UTF-8 even when LANG is C. - -commit f3c4e620ac612eab6370b1fb82feaa4e651542bb - Author: Yusuke Endoh - Date: 2019-10-11 21:13:52 +0900 - - test/test_syslog.rb (test_log): skipped on Android - - On Android 28, LOG_PERROR is defined, but not implemented yet. - This change skips Syslog#log explicitly. - -commit d6c80876b7aae5b3f44abe7cf1b64161354b8ebd - Author: Kazuhiro NISHIYAMA - Date: 2019-10-11 13:50:27 +0900 - - Use `bind_call` instead of `bind` and `call` - -commit ddfb306e8e98282174cb078aa8e55aca223973ab - Author: Gabriel Nagy - Date: 2019-10-11 13:48:02 +0900 - - win32.c: Remove unused calls to StartSockets (#2312) - - NtSocketsInitialized behavior changed in e33b1690, requiring - a call to rb_w32_sysinit for starting Windows Sockets. - - This commit removes NtSocketsInitialized entirely to avoid confusion. - - Signed-off-by: Gabriel Nagy - -commit 7cc1cd3d1ed1d482ea2ec247fa6a4ad0f044418a - Author: ksss - Date: 2016-10-24 11:42:31 +0900 - - Module#define_method: Add UnboundMethod to expected classes - - Notes: - Merged: https://github.com/ruby/ruby/pull/1465 - -commit 9c24ce551d19ac0f5cac4bc9ff5ef5a7a980909d - Author: Lourens Naudé - Date: 2019-04-26 06:35:43 +0900 - - Reduce the minimum string buffer size from 127 to 63 bytes - - Notes: - Merged: https://github.com/ruby/ruby/pull/2151 - -commit 0ca4f74967bb5a439b1f3d322ae7729265b917a4 - Author: Lourens Naudé - Date: 2019-09-11 08:18:41 +0900 - - Right size the numtable in insn_make_insn_table to VM_INSTRUCTION_SIZE - - Notes: - Merged: https://github.com/ruby/ruby/pull/2447 - -commit 87958520f3fd7fdec18c3508888b3d2a4e5c27a4 - Author: takkanm - Date: 2018-06-19 20:49:09 +0900 - - set real path to __FILE__ and __dir__ in Binding#irb - - When reading Binding#irb, the file of the calling source is reflected in __FILE__ and __dir__. - - Notes: - Merged: https://github.com/ruby/ruby/pull/1896 - -commit 29c1e9a0d4c855781853f0ad41b0125f42cf504d - Author: Jeremy Evans - Date: 2019-10-11 03:25:54 +0900 - - Document the difference between expressions and statements [ci skip] - - In the grammar, all expressions are statements, but not all - statements are expressions. Some parts of the grammar accept - expressions and not other types of statements, which causes - similar looking code to parse differently due to operator - precedence. - - Mostly from Dan0042 (Daniel DeLorme). - - Fixes [Bug #16092] - -commit ddb0267e76d4127e66fec9b5865d053c6ed9721a - Author: git - Date: 2019-10-11 05:15:28 +0900 - - * 2019-10-11 [ci skip] - -commit 2322c94dd65c0247b103e2f91411e37458e1466d - Author: Jeremy Evans - Date: 2019-08-25 16:04:14 +0900 - - Support delegates for BasicObject - - For BasicObject, bind the Kernel respond_to? instance method to the - object and call it instead of calling the method directly. - - Also, use bind_call(recv, ...) for better performance. - - Fixes [Bug #16127] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2546 - -commit 41719096957aa3d80e2e23d04ae288d2dee5328e - Author: Yusuke Endoh - Date: 2019-10-10 23:22:37 +0900 - - mjit_worker.c: Add `-lm` to the C compiler in MJIT on Android - - To avoid: - - cannot locate symbol "modf" referenced by .../_ruby_mjit_XXX.so" - -commit f845e1bc9951ef40f2b3672d825aa67f6d6f8368 - Author: Yusuke Endoh - Date: 2019-10-10 23:21:24 +0900 - - ext/syslog/extconf.rb: add -llog for Android - - Otherwise, requiring syslog results in: - - cannot locate symbol "__android_log_print" referenced by "syslog.so" - -commit a886d5cb79e2440eb6cf422723e08447ee4735db - Author: Yusuke Endoh - Date: 2019-10-10 23:18:44 +0900 - - test/ruby/test_file_exhaustive.rb: check the owner of the root directory - - The root directory may be owned by the current user, for example, in - chroot environment. - -commit c144d7215b3444fa36d28d540b60170a5b30743d - Author: Nobuyoshi Nakada - Date: 2019-10-10 21:02:45 +0900 - - Skip very time consuming test [Bug #16196] - -commit 9c0cd5c569ba22bc68d1a77ad6580a275cd99639 - Author: Nobuyoshi Nakada - Date: 2019-10-10 19:38:37 +0900 - - Prefer rb_gc_register_mark_object - - * ext/openssl/ossl_asn1.c (Init_ossl_asn1): prefer - `rb_gc_register_mark_object`, which is better for constant - objects, over `rb_gc_register_address` for global/static - variables which can be re-assigned at runtime. [Bug #16196] - -commit 0131fab749fb76800de09e49a6abf910201c5b58 - Author: Nobuyoshi Nakada - Date: 2019-10-10 19:56:51 +0900 - - Slimed down test runtime by stressing openssl.so only [Bug #16196] - -commit 3f413896c3e71e4d2ed61bcd969f2ed3fc35ea4a - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-10 18:15:33 +0900 - - forgot to delete unused #include line - -commit 2d393bf1255864706cabdd9375dd26e33bdf40b9 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-10 17:49:31 +0900 - - guard rb_fatal against non-GVL call - - Suggested by ko1. rb_fatal requires GVL so just in case one lacks, - print that information and let the process die. As commented, - we cannot print the given messages on such situations. - -commit f1ce4897f2eaf9a99c250e4707e3ab6f6bdacb74 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-10 17:04:59 +0900 - - make rb_raise a GVL-only function again - - Requested by ko1 that ability of calling rb_raise from anywhere - outside of GVL is "too much". Give up that part, move the GVL - acquisition routine into gc.c, and make our new gc_raise(). - -commit d96f04d73a5feb15b9d27bd23af2f7325732bb03 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-10 16:10:58 +0900 - - add "[FATAL]" marker on abort - - Indicate that the situation is fatal. - -commit 0b26f56a77a6dabe2b1c09c4569ed846798afcdc - Author: Kazuhiro NISHIYAMA - Date: 2019-10-10 16:48:26 +0900 - - Remove unreachable step level `[ci skip]` - -commit 203b7fa1ae8cc40d41c38d684f70b3fea7fae813 - Author: Nobuyoshi Nakada - Date: 2019-10-10 16:08:39 +0900 - - Guard static variable first - - * ext/openssl/ossl_asn1.c (Init_ossl_asn1): register the static - variable to grab an internal object, before creating the object. - otherwise the just-created object could get collected during the - global variable list allocation. [Bug #16196] - -commit 6f522455bf801acefcd2ade0b2e4a2fef3cb70a4 - Author: Nobuyoshi Nakada - Date: 2019-10-07 00:12:18 +0900 - - [rubygems/rubygems] Do not compare with unreliable Gem::Specification::TODAY - - https://gist.github.com/ko1/a88834d744a0682711dab53fd9015a04#file-brlog-trunk-nopara-20191005-235153-L393-L472 - - https://github.com/rubygems/rubygems/commit/707408d8e7 - -commit dc2b301994ed9de75477ece30111553d4f1ee2e3 - Author: Nobuyoshi Nakada - Date: 2019-10-07 00:08:32 +0900 - - [rubygems/rubygems] Restrict possible date range - - https://github.com/rubygems/rubygems/commit/1bd77f53df - -commit 717b72a8af6b99ca79fd5bbe52ba4bd16b038bf6 - Author: Jean Boussier - Date: 2019-10-01 20:16:32 +0900 - - [rubygems/rubygems] Optimize Gem::Package::TarReader#each - - https://github.com/rubygems/rubygems/commit/1de8f39ac4 - -commit 495ebd6e9555bdd220a74c96cda7a7d6fe40209b - Author: Nobuyoshi Nakada - Date: 2019-10-10 14:21:29 +0900 - - Now error.o needs thread.h - -commit c2065c64cb198d5b53a5ecdf9638d064f6fec2e2 - Author: Nobuyoshi Nakada - Date: 2019-10-10 13:50:13 +0900 - - Fixed numbered parameter check - - * parse.y (struct local_vars): moved numbered parameter NODEs for - nesting check to separate per local variable scopes, as numbered - parameters should belong to local variable scopes. [Bug #16248] - -commit a23b639050792c74cbf585aff6742c6ee3931f5f - Author: Nobuyoshi Nakada - Date: 2019-10-10 14:07:27 +0900 - - negative_size_allocation_error never returns - -commit 9c3153e0da991e1a7df9b4cf91d6830effc79b22 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-10 11:55:43 +0900 - - allow rb_raise from outside of GVL - - Now that allocation routines like ALLOC_N() can raise exceptions - on integer overflows. This is a problem when the calling thread - has no GVL. Memory allocations has been allowed without it, but - can still fail. - - Let's just relax rb_raise's restriction so that we can call it - with or without GVL. With GVL the behaviour is unchanged. With - no GVL, wait for it. - - Also, integer overflows can theoretically occur during GC when - we expand the object space. We cannot do so much then. Call - rb_memerror and let that routine abort the process. - -commit 25100c469758dd3676ec608ed27fd89248980666 - Author: Nobuyoshi Nakada - Date: 2019-10-10 08:53:46 +0900 - - lhs of pattern matching expression of should have a value - -commit 42edb056268303e8d2a1772cda0e46e1ba1a14bb - Author: Nobuyoshi Nakada - Date: 2019-10-10 01:08:42 +0900 - - extracted declare_under - -commit 8dc5fe6e89cb86bd92628b5f34ba5f549a241c2d - Author: Alan Wu - Date: 2019-10-10 00:34:03 +0900 - - Simplify rb_define_module_id - - Notes: - Merged: https://github.com/ruby/ruby/pull/2544 - -commit ecf6c0402eb8706001831e0464b47cbed8e82fa0 - Author: git - Date: 2019-10-10 00:14:36 +0900 - - * 2019-10-10 [ci skip] - -commit 9b919885a08d6cf3c68cb1bce992feb43a8fad0c - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-10 00:10:14 +0900 - - fix memory corruption in old GCC - - This typo introduced memory corruption when __builtin_add_overflow - is not available but uint128_t is. GCC before 5 are one of such - situatins. - - See also https://rubyci.org/logs/rubyci.s3.amazonaws.com/opensuseleap/ruby-master/log/20191009T120004Z.log.html.gz - -commit bb71a128eb6e901d3d7deb895971a6706eb7110d - Author: Ben Woosley - Date: 2017-05-19 07:59:38 +0900 - - Prefer st_is_member over st_lookup with 0 - - The st_is_member DEFINE has simpler semantics, for more readable code. - - Notes: - Merged: https://github.com/ruby/ruby/pull/1622 - -commit 29e6782f5dbf127dc20156938af374eea9e2d74e - Author: Nobuyoshi Nakada - Date: 2019-10-09 23:39:58 +0900 - - Share ruby_sighandler_t definition - -commit 891cbd66a411725d7300a28b1a95619c2902f0eb - Author: Yusuke Endoh - Date: 2019-10-09 23:13:59 +0900 - - signal.c: save the original sighandlers for fatal signals - - On Android, a signal handler that is not SIG_DFL is set by default for - SIGSEGV. Ruby's install_sighandler inserts Ruby's handler only when the - signal has no handler, so it does not insert Ruby's SEGV report handler, - which caused some test failures. - - This changeset forces to install Ruby's handler for some fatal signals - (sigbus, sigsegv, and sigill). They keep the original handlers, and - call them when the interpreter receives the signals. - -commit dd477df411691803fc5a83c7daa64faac112a0e4 - Author: Yusuke Endoh - Date: 2019-10-09 23:02:22 +0900 - - error.c (rb_bug_for_fatal_signal): renamed from rb_bug_context - - Just refactoring. - - The name "rb_bug_context" is completely unclear for me. - (Can you see that "context" means "machine register context"?) - The context is available only when a fatal signal (sigbus, sigsegv, or - sigill) is received; in fact, the function is used only for fatal - signals. So, I think the name should be changed. - -commit b9cf58d2b2deca7d5b204080c2fe04d68cc50ab1 - Author: Yusuke Endoh - Date: 2019-10-09 22:57:19 +0900 - - signal.c (ruby_abort): move the definition for refactoring - - The three functions for fatal signals, sigbus, sigsegv, and sigill, are - a family. The definition of ruby_abort had interrupted them for no - reason. This change just moves the definition after the family. - -commit 6f11c3b3354bef107f894f112ff7698414c7bae5 - Author: Kazuhiro NISHIYAMA - Date: 2019-10-09 17:46:05 +0900 - - Check '[ci skip]' at job level - -commit d0e30fc955a3a91952c6d63c56d900b72d657a3a - Author: Yusuke Endoh - Date: 2019-10-09 14:03:04 +0900 - - vm_eval.c (rb_adjust_argv_kw_splat): avoid memcpy with zero length - - A method call is often with `argc = 1` and `argv = &v` where v is a - VALUE, and some functions shift the arguments by `argc-1` and `argv+1` - (for example, rb_sym_proc_call). I'm unsure whether it is safe or not - to pass a pointer `argv+1` to memcpy with zero length, but Coverity Scan - complains it. So this attempts to suppress the warning by explicit - check of the length. - -commit b439ee1b8fa8d8a99f3f519af946ead94917edb2 - Author: Pavel Valena - Date: 2019-09-25 22:35:56 +0900 - - Remove uselsess shebang - - as the file is not executable anyway. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2483 - -commit 12d05537d73325d60902feaf0da323ef20ace74b - Author: aycabta - Date: 2019-09-18 18:51:02 +0900 - - Update required_ruby_version to 2.4.0 - -commit 2d001003e4b3a6c20ead09ed54b6726a7669f457 - Author: Watson - Date: 2019-10-09 12:25:08 +0900 - - Improve performance of Array#sum with float elements (#1555) - - The declaration of local variable in loop, it will initialize local variable for each run of the loop with clang generated code. - So, it shouldn't declare the local variable in heavy loop. - - Array#sum with float elements will be faster around 30%. - - * Before - user system total real - 3.320000 0.010000 3.330000 ( 3.336088) - - * After - user system total real - 2.590000 0.010000 2.600000 ( 2.602399) - - * Test code - require 'benchmark' - - Benchmark.bmbm do |x| - ary = [] - 10000.times { ary << Random.rand } - - x.report do - 50000.times do - ary.sum - end - end - - end - -commit a14cc07f2ffc704b73ba4b96543e2f85c3ed1921 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-08 16:07:31 +0900 - - avoid returning NULL from xrealloc - - This changeset is to kill future possibility of bugs similar to - CVE-2019-11932. The vulnerability occurs when reallocarray(3) - (which is a variant of realloc(3) and roughly resembles our - ruby_xmalloc2()) returns NULL. In our C API, ruby_xmalloc() - never returns NULL to raise NoMemoryError instead. ruby_xfree() - does not return NULL by definition. ruby_xrealloc() on the other - hand, _did_ return NULL, _and_ also raised sometimes. It is very - confusing. Let's not do that. x-series APIs shall raise on - error and shall not return NULL. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2540 - -commit 7e0ae1698d4db0baec858a46de8d1ae875360cf5 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-07 16:56:08 +0900 - - avoid overflow in integer multiplication - - This changeset basically replaces `ruby_xmalloc(x * y)` into - `ruby_xmalloc2(x, y)`. Some convenient functions are also - provided for instance `rb_xmalloc_mul_add(x, y, z)` which allocates - x * y + z byes. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2540 - -commit a220410be70264a0e4089c4d63a9c22dd688ca7c - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-07 13:16:42 +0900 - - annotate malloc-ish functions - - Make them gcc friendly. Note that realloc cannot be __malloc__ - attributed, according to the GCC manual. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2540 - -commit 2f3b4029da1b64ffb989916a8b74e17c366e45b0 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-07 13:46:24 +0900 - - fix arity mismatch - - Seems nobody has actually used this macro. Such an obvious typo. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2540 - -commit 59cfa2d1871c0b74d39d9eee6241f3e950eff42e - Author: git - Date: 2019-10-09 09:08:53 +0900 - - * 2019-10-09 [ci skip] - -commit e078352a787ce3d52b5147a5fdf69b89a9d60cff - Author: Nobuyoshi Nakada - Date: 2019-10-09 09:04:37 +0900 - - lldb_cruby.py: fixed inspecting string [ci skip] - - Show the size of String. - - To see the whole contents even after NUL char: - - ``` - (lldb) rp str - (const char [5]) $1 = "x" - (lldb) memory read -s1 --format x --count `sizeof($1)` -- &$1 0x1010457a8: 0x78 0x00 0x61 0x61 0x61 - ``` - -commit 98131f148f057b1364ae080f99b1efb2dc72002a - Author: Nobuyoshi Nakada - Date: 2019-10-09 09:01:11 +0900 - - lldb_cruby.py: fixed embedded string ptr [ci skip] - - Use GetLocation to get the address of embedded array. - -commit 7909f06212ae8df6ba7203f8152292a190b2b33a - Author: Jeremy Evans - Date: 2019-07-06 06:45:19 +0900 - - Check for invalid hex escapes in URI#query= - - Fixes [Bug #11275] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2535 - -commit 8feb8c9bb7e9036ee2014b0f532677635a16893e - Author: Nobuyoshi Nakada - Date: 2019-10-08 09:13:58 +0900 - - Packed delayed token elements - -commit 11b6ff12af99b177979c7a4f57f49b91a50fcc0c - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-08 11:21:20 +0900 - - more use of RbConfig::LIMITS - - `8 * RbConfig::SIZEOF` ... is not straight. - -commit dd0c75fdc2104a6ba38b68d4431a572504a3bbc2 - Author: Kenta Murata - Date: 2019-10-08 09:06:28 +0900 - - Import changes from ruby/bigdecimal (#2531) - - Sync to ruby/bigdecimal@92356ba71c6bd325b0ab618c634a7aecf8cdc767 - - Notes: - Merged-By: mrkn - -commit 59c3b1c9c843fcd2d30393791fe224e5789d1677 - Author: Jeremy Evans - Date: 2019-10-08 05:45:40 +0900 - - Add section to extension.rdoc for backwards compatibility macros [ci skip] - - These macros should make it easier to C extensions to switch to - the Ruby 2.7 C-API *_kw functions, but still have the code work - correctly on older Ruby versions. - -commit c0eae130b1d9fde5716c2340141d78ebc48c82a5 - Author: Jeremy Evans - Date: 2019-10-08 05:16:33 +0900 - - Note RB_PASS_EMPTY_KEYWORDS and RB_SCAN_ARGS_EMPTY_KEYWORDS will be removed - - There is no need for these in Ruby 3.0, and the plan is to - remove them. - -commit 055a85d3d9ab5850b1269089f28385158d969d18 - Author: Jeremy Evans - Date: 2019-10-08 04:55:22 +0900 - - Update NEWS with Module#ruby2_keywords and a few other things - -commit 6abcd35762db4bf49cd6c62a8c624e2a013e5dc1 - Author: Aaron Patterson - Date: 2019-10-08 04:28:21 +0900 - - Do not free too many pages. - - Sweep step checks `heap_pages_freeable_pages`, so compaction should do - the same. - -commit 058db33c5ec881271d028b7490d88b3baed74acb - Author: Aaron Patterson - Date: 2019-10-08 04:10:24 +0900 - - Move empty pages to the tomb - - I think we need to be moving empty pages to the tomb after they become - empty. - -commit 0a2f04e156cb717dcf78f2ea9bfe26f864a24616 - Author: Aaron Patterson - Date: 2019-10-08 02:14:13 +0900 - - Eliminate second GC pass for eliminating T_MOVED - - `T_MOVED` is a linked list, so we can just iterate through the `T_MOVED` - objects, clearing them out and adding them to respective free lists. - -commit d8b6f585027a5657c6921f97513a8cf70a031c94 - Author: git - Date: 2019-10-08 00:00:54 +0900 - - * 2019-10-08 [ci skip] - -commit 7abb02771a188671a6ddc3ccbe87dcecc4fe645f - Author: Kazuhiro NISHIYAMA - Date: 2019-10-08 00:00:24 +0900 - - Fix typo [ci skip] - - pointed out by ruby-trunk-changes - -commit 468184a996c99d1f94f94d7468f65e386cf13564 - Author: Jeremy Evans - Date: 2019-10-07 13:18:20 +0900 - - Allow ruby2_keywords to be used with bmethods - - There are libraries that use define_method with argument splats - where they would like to pass keywords through the method. To - more easily allow such libraries to use ruby2_keywords to handle - backwards compatibility, it is necessary for ruby2_keywords to - support bmethods. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2532 - -commit 3374e1450c18c33420f616f41ad7f884fdb4df21 - Author: Kazuhiro NISHIYAMA - Date: 2019-10-07 19:33:33 +0900 - - Write yaml and json under destdir and print to stdout - -commit 96753e8475ee69537134ab3d966c3d25cb5c467c - Author: Kazuhiro NISHIYAMA - Date: 2019-10-07 19:05:42 +0900 - - Create info.yml and info.json - - - `info.yml` is for ruby/www.ruby-lang.org/_data/releases.yml - - `info.json` is meta data for users of snapshot - -commit bb86611c9b61b47ba7ff65c3b0a0737a20183460 - Author: Kazuhiro NISHIYAMA - Date: 2019-10-07 19:03:06 +0900 - - Remove `-s3` option - - It will not use in `ruby/actions`, and `default=tmp` is not correct. - -commit f4252f64964f3b66171cc0c81bda4c1b2d028601 - Author: aycabta - Date: 2019-10-07 14:21:38 +0900 - - Version 0.0.3 - -commit c8542ab484efb6ee0009cd081789d9a68f482483 - Author: Prajjwal Singh - Date: 2019-10-07 14:12:29 +0900 - - Add: Array#intersection method - - Notes: - Merged: https://github.com/ruby/ruby/pull/2533 - -commit d4ec37f69e3bd6f88725fe1075daa2e5f58c2aec - Author: git - Date: 2019-10-07 14:16:12 +0900 - - * 2019-10-07 [ci skip] - -commit a9e9cd20369ea110333deb2ef7c23b5ed7d09773 - Author: aycabta - Date: 2019-10-06 00:52:20 +0900 - - Flush console just after printing - -commit 136116819eea66c5a053971efb9aba403a44e38a - Author: aycabta - Date: 2019-10-05 23:46:16 +0900 - - Use built-in Win32API on JRuby - - It's fixed for JRuby dedicatedly. - -commit 309f6a772692e696b79f6bd213680e534551cca3 - Author: aycabta - Date: 2019-10-02 19:56:55 +0900 - - Swap expected and actual correctly - -commit ddf5020e4fcae5ed28a064af10124a032590452f - Author: Koichi Sasada - Date: 2019-10-06 17:01:00 +0900 - - Revert "tailcall optimization again (#2528)" - - This reverts commit f62f90367fc3bce6714e7c34cbd040e14e43fe07. - -commit f62f90367fc3bce6714e7c34cbd040e14e43fe07 - Author: wanabe - Date: 2019-10-06 16:52:09 +0900 - - tailcall optimization again (#2528) - - This is follow up of r67315. - -commit 6525d3bcc7d0be65e2ff97d6785d9f36b5e4988a - Author: Yusuke Endoh - Date: 2019-10-06 15:22:12 +0900 - - test/dtrace/helper.rb: Etc.getgrnam may return nil on some platforms - -commit 2ca353c2e0785056fea551d78e957bd753b17586 - Author: git - Date: 2019-10-06 11:49:27 +0900 - - * 2019-10-06 [ci skip] - -commit 2409667aa2e03b6008ed7a4ccce48a8b288cc0fd - Author: Yusuke Endoh - Date: 2019-10-06 11:39:01 +0900 - - time.c: Fix some bugs about WIDEVALUE - - WIDEVALUE differs from VALUE in 32bit platform, but some codes assume - that they are the same. - - There is `#define STRUCT_WIDEVAL` mode to check the consistency. - This change allows to build with STRUCT_WIDEVAL. - -commit 06a04a1aa3fbf9132c61f4ced9582c36c96d3f65 - Author: Yusuke Endoh - Date: 2019-10-05 19:08:23 +0900 - - ext/openssl/ossl_ssl.c: Use const declaration if LibreSSL >= 2.8.0 - - to suppress a warning in OpenBSD. - - ``` - ossl_ssl.c:938:31: warning: incompatible pointer types passing 'SSL_SESSION *(SSL *, unsigned char *, int, int *)' (aka 'struct ssl_session_st *(struct ssl_st *, unsigned char *, int, int *)') to parameter of type 'SSL_SESSION *(*)(struct ssl_st *, const unsigned char *, int, int *)' (aka 'struct ssl_session_st *(*)(struct ssl_st *, const unsigned char *, int, int *)') [-Wincompatible-pointer-types] - SSL_CTX_sess_set_get_cb(ctx, ossl_sslctx_session_get_cb); - ^~~~~~~~~~~~~~~~~~~~~~~~~~ - /usr/include/openssl/ssl.h:738:20: note: passing argument to parameter 'get_session_cb' here - SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl, - ^ - 1 warning generated. - ``` - -commit 96452373fd192ada49c831386e033531e2263a52 - Author: Yusuke Endoh - Date: 2019-10-05 18:28:19 +0900 - - ext/json/parser/prereq.mk: use `if $. == 1` instead of a hacky code - -commit 70e3fda2eb45c841e5fb4574273d20f8df5455e5 - Author: Yusuke Endoh - Date: 2019-10-05 17:54:36 +0900 - - ext/json/parser/prereq.mk: keep line numbers of ext/json/parser/parser.c - - Follow up of 5717e55e9a7790c938afa694a9bf558c0e54bb83. - Adding a header with newline broke linenos. - -commit 3e3cc0885a9100e9d1bfdb77e136416ec803f4ca - Author: Nobuyoshi Nakada - Date: 2019-10-05 11:28:53 +0900 - - Now keyword parameter warnings are suppressed by 871005bdd204 - - This reverts commits: - - * 2a490d5660ac869f8f2bbcec4887b1dc2950643f - Suppress assert_match warnings. - - * d4a86e407ec2057c2c7ad757aa76dad757f34c3a - Assert warnings message for the last argument is keyword parameter. - -commit 212da9a6aec5da26f97b8312b7e8fd3d9b1eef47 - Author: Nobuyoshi Nakada - Date: 2019-10-05 11:04:23 +0900 - - Added dependencies on prerequisite makefiles - -commit 6dfe0c9dcd8327dfce5f689d6a184c0f3a146a24 - Author: Nobuyoshi Nakada - Date: 2019-10-01 10:41:10 +0900 - - [rubygems/rubygems] The date might have advanced since TODAY has been set - - https://bugs.ruby-lang.org/issues/16189 - - https://github.com/rubygems/rubygems/commit/e331222163 - -commit 7d4ab8bbe70c92410d35270be9030775b9ee31ac - Author: bronzdoc - Date: 2019-09-29 23:43:17 +0900 - - [rubygems/rubygems] Use dependency.identity in available_specs - - https://github.com/rubygems/rubygems/commit/bde88f00a1 - -commit b659c1b92f3d5f251a3436073cd60d955d5fc457 - Author: bronzdoc - Date: 2019-09-29 23:41:49 +0900 - - [rubygems/rubygems] Add Gem::Dependency#identity method - - https://github.com/rubygems/rubygems/commit/05146bb2fd - -commit 871005bdd2044ef7bd532a7cc4f0756217161f97 - Author: Nobuyoshi Nakada - Date: 2019-09-26 20:11:24 +0900 - - [rubygems/rubygems] Suppress keywords warning in ruby 2.7 - - https://github.com/rubygems/rubygems/commit/892bfc11fe - -commit caa9d0bd7851c3b8cc9064987109eed9952a7c90 - Author: Nobuyoshi Nakada - Date: 2019-09-26 20:01:03 +0900 - - [rubygems/rubygems] Always pass an encoding option to Zlib::GzipReader.wrap - - The arity of this method has been -1 since the import, so the - option has been passed always, even if Zlib::GzipReader#initialize - does not take the option. Actually it takes the option since 1.9. - - https://github.com/rubygems/rubygems/commit/2fcde0f4e0 - -commit 39e8d5e1cdc25ca17f74da5e72ba87dcdfa4a602 - Author: Nobuyoshi Nakada - Date: 2019-09-26 19:47:22 +0900 - - [rubygems/rubygems] Use dedicated assertion methods - - For better messages at failures. - - https://github.com/rubygems/rubygems/commit/971455b16e - -commit f8104d9e9f1a9b378dde08e806f4aadf9b17200b - Author: Nobuyoshi Nakada - Date: 2019-09-26 19:38:56 +0900 - - [rubygems/rubygems] Fixed assertion arguments - - It is `assert_eqal(expected, actual)`. - - https://github.com/rubygems/rubygems/commit/1d6197a090 - -commit 170d1540596c72c9197732d051d8d9302b87f033 - Author: Yusuke Endoh - Date: 2019-10-05 07:37:19 +0900 - - signal.c: Use MINSIGSTKSZ by casting to int - - MINSIGSTKSZ is unsigned int in OpenBSD, which makes a warning of - comparison: - - ``` - signal.c:535:14: warning: comparison of integers of different signs: 'int' and 'unsigned int' [-Wsign-compare] - if (size < MINSIGSTKSZ) - ~~~~ ^ ~~~~~~~~~~~ - 1 warning generated. - ``` - https://rubyci.org/logs/rubyci.s3.amazonaws.com/openbsd-current/ruby-master/log/20191004T200009Z.log.html.gz - -commit 417c64b9a8c4815a54f9bbef37f4438ee5c2f4fc - Author: Yusuke Endoh - Date: 2019-10-05 07:00:57 +0900 - - ext/json/parser/parser.rl: Use "signed" char to contain negative values - - char is not always signed. In fact, it is unsigned in arm. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-master/log/20191004T181708Z.log.html.gz - ``` - compiling parser.c - parser.rl: In function ‘unescape_unicode’: - parser.rl:50:5: warning: comparison is always false due to limited range of data type [-Wtype-limits] - if (b < 0) return UNI_REPLACEMENT_CHAR; - ^ - ``` - -commit 5717e55e9a7790c938afa694a9bf558c0e54bb83 - Author: Yusuke Endoh - Date: 2019-10-05 07:00:07 +0900 - - ext/json/parser/prereq.mk: Add a "automatically generated" header - - to parser.c. - -commit 076d3d758b0df47d3dceb3ba0930486f3dd0cc2d - Author: Yusuke Endoh - Date: 2019-10-05 06:30:27 +0900 - - ext/json/parser/parser.rl: Update the source code of parser.c - - There have been some direct changes in parser.c which is automatically - generated from parser.rl. This updates parser.rl to sync the changes: - - * 91793b8967e0531bd1159a8ff0cc7e50739c7620 - * 79ead821dd4880725c9c6bb9645b3fad71715c5b - * 80b5a0ff2a7709367178f29d4ebe1c54122b1c27 - -commit bd4b65f4b05ff7dcb5c7e16f174c57885bf27e40 - Author: Aaron Patterson - Date: 2019-10-05 03:17:43 +0900 - - IMEMO objects don't have a class, so return early - - IMEMO objects don't have a class field to update, so we need to return - early, otherwise it can cause a segv. - -commit a20ed0565efd2f47845c890d1ebea341d43ee5e6 - Author: Aaron Patterson - Date: 2019-10-04 09:52:00 +0900 - - Don't allocate objects in `gc_compact` - - I'd like to call `gc_compact` after major GC, but before the GC - finishes. This means we can't allocate any objects inside `gc_compact`. - So in this commit I'm just pulling the compaction statistics allocation - outside the `gc_compact` function so we can safely call it. - -commit cbf88064f5bd433c13345bbc2ce509b4e8509c7a - Author: git - Date: 2019-10-05 03:07:31 +0900 - - * 2019-10-05 [ci skip] - -commit cbbe198c89fa25a80ec0a5f0592ea00132eacd01 - Author: Nobuyoshi Nakada - Date: 2019-10-05 02:08:07 +0900 - - Fix potential memory leaks by `rb_imemo_tmpbuf_auto_free_pointer` - - This function has been used wrongly always at first, "allocate a - buffer then wrap it with tmpbuf". This order can cause a memory - leak, as tmpbuf creation also can raise a NoMemoryError exception. - The right order is "create a tmpbuf then allocate&wrap a buffer". - So the argument of this function is rather harmful than just - useless. - - TODO: - * Rename this function to more proper name, as it is not used - "temporary" (function local) purpose. - * Allocate and wrap at once safely, like `ALLOCV`. - -commit c8a18e25c1cc9a44231b97e12f30a98cf9d979bb - Author: Yusuke Endoh - Date: 2019-10-04 21:30:32 +0900 - - iseq.c (rb_iseq_compile_on_base): Removed - - ko1 cannot remember why he introduced the function. And it is not used. - - After it is removed, the argument "base_block" of - rb_iseq_compile_with_option is always zero. - -commit 113bef697633803a33a547914b16ba5fbef165b8 - Author: Yusuke Endoh - Date: 2019-10-04 16:07:46 +0900 - - array.c (rb_mem_clear): remove "register" from arguments - - to suppress the following warning: - - ``` - compiling cxxanyargs.cpp - In file included from cxxanyargs.cpp:1: - In file included from ../../.././include/ruby/ruby.h:2150: - ../../.././include/ruby/intern.h:56:19: warning: 'register' storage class specifier is deprecated and incompatible with C++17 [-Wdeprecated-register] - void rb_mem_clear(register VALUE*, register long); - ^~~~~~~~~ - ../../.././include/ruby/intern.h:56:36: warning: 'register' storage class specifier is deprecated and incompatible with C++17 [-Wdeprecated-register] - void rb_mem_clear(register VALUE*, register long); - ^~~~~~~~~ - ``` - -commit 5be2af5f9052e7f799b2c576d78a373c57069771 - Author: Alan Wu - Date: 2019-10-04 10:15:24 +0900 - - Remove call-seq for method that doesn't exist (#2521) - - ``` - $ ruby -ve 'IO.popen("ls"){}; $?.to_int' - ruby 2.6.4p104 (2019-08-28 revision 67798) [x86_64-darwin18] - Traceback (most recent call last): - -e:1:in `
': undefined method `to_int' for # (NoMethodError) - Did you mean? to_i - taint - ``` - - Process::Status#to_int was removed at 7ba5c4e. - -commit 7db83b04d0e170a6b9ed56597a1327c68c04bfec - Author: Takashi Kokubun - Date: 2019-10-04 07:58:20 +0900 - - Revert "Simplify bin_path_spec.rb guard" - - This reverts commit a56d742e69aa8a3a1fe92fc515d93f6e51cf5fbc. - - I was checking the CI result of the wrong revision. It actually worked - fine https://ci.appveyor.com/project/ruby/ruby/builds/27866303. Never - mind... - -commit a56d742e69aa8a3a1fe92fc515d93f6e51cf5fbc - Author: Takashi Kokubun - Date: 2019-10-04 07:33:10 +0900 - - Simplify bin_path_spec.rb guard - - For some reason the guard_not seems not working as expected - https://ci.appveyor.com/project/ruby/ruby/builds/27866153/job/v6wa6q6p7b7n7r37 - -commit ac69a051cf00e3fda3cb7e8d7377558d84ef880f - Author: Takashi Kokubun - Date: 2019-10-04 07:15:05 +0900 - - Ignore arm32 failure for now - -commit 182336ccb5a8d46fbcddbdad9e7bbca6d5d5d63f - Author: Takashi Kokubun - Date: 2019-10-04 06:24:57 +0900 - - bin_path_spec.rb has failed from the beginning - - for mswin. This spec is not valid for mswin platform. - https://ci.appveyor.com/project/ruby/ruby/builds/27748774/job/85khngfpc806m5lj - -commit 804672e7b452c4d0dcb653e14cb9900513bfa8de - Author: Takashi Kokubun - Date: 2019-10-04 06:17:36 +0900 - - Try disabling build on trunk - -commit 9f24e8fdbb6a579fe00f4449c79417a418d67a87 - Author: Jeremy Evans - Date: 2019-10-04 06:07:32 +0900 - - Document *_kw functions added to include/ruby/ruby.h [ci skip] - - Also documents the non-*_kw functions if they were not already - documented. - -commit c7715a4936a298ff9bcce97e65dfd3dc6f32f906 - Author: Jeremy Evans - Date: 2019-10-04 05:14:45 +0900 - - Add documentation regarding keyword argument separation [ci skip] - -commit 12e27a411c394366b3c701153040d63390d314cc - Author: Jeremy Evans - Date: 2019-10-04 05:14:08 +0900 - - Minor updates to methods and calling_methods documentation [ci skip] - -commit bdbf8de4980ef54f466809ee27a9f2a00614b0f0 - Author: Jun Aruga - Date: 2019-10-04 06:12:58 +0900 - - Enable Drone CI for ARM 64/32-bit cases. (#2520) - - https://bugs.ruby-lang.org/issues/16234 - -commit c3dd3b95538a641bbffb02993985ce0cbac1b9d6 - Author: Yusuke Endoh - Date: 2019-10-04 02:35:10 +0900 - - iseq.c (rb_iseq_compile_with_option): dummy parent_iseq for the parser - - The parsing of `RubyVM::InstructionSequence.compile` does not support an - outer scope currently. So it specified NULL as parent_iseq for the - parser. However, it resulted in the following false-positive warning. - - ``` - RubyVM::InstructionSequence.compile(< :2: warning: possibly useless use of a variable in void context - END - ``` - - This change specifies a dummy empty parent_iseq instead of NULL, which - suppresses the false positive. - -commit b732a9f8a0f694d8668bb1d42e94435c47e05df3 - Author: Yusuke Endoh - Date: 2019-10-04 02:33:39 +0900 - - parse.y: use "struct rb_iseq_struct" instead of rb_iseq_t - - typedef was not declared in parse.y. Sorry. - -commit bb9604e18c73558709b49962bdcec59613dbf014 - Author: git - Date: 2019-10-04 02:30:54 +0900 - - * 2019-10-04 [ci skip] - -commit b43afa0a8f82a5d806adc24afa2eaf41479da1a3 - Author: Yusuke Endoh - Date: 2019-10-04 01:48:31 +0900 - - Make parser_params have parent_iseq instead of base_block - - The parser needs to determine whether a local variable is defined or - not in outer scope. For the sake, "base_block" field has kept the outer - block. - - However, the whole block was actually unneeded; the parser used only - base_block->iseq. - - So, this change lets parser_params have the iseq directly, instead of - the whole block. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2519 - -commit 711c40ebdcd0974ef3e6ac6870412dc88ae25f3e - Author: Yusuke Endoh - Date: 2019-10-04 01:29:21 +0900 - - Refactor parser_params by removing "in_main" flag - - The relation between parser_param#base_block and #in_main were very - subtle. - A main script (that is passed via a command line) was parsed under - base_block = TOPLEVEL_BINDING and in_main = 1. - A script loaded by Kernel#require was parsed under - base_block = NULL and in_main = 0. - If base_block is non-NULL and in_main == 0, it is parsed by Kernel#eval - or family. - - However, we know that TOPLEVEL_BINDING has no local variables when a - main script is parsed. So, we don't have to parse a main script under - base_block = TOPLEVEL_BINDING. - - Instead, this change parses a main script under base_block = 0. - If base_block is non-NULL, it is parsed by Kernel#eval or family. - By this simplication, "in_main" is no longer needed. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2519 - -commit 8f7fca784a46c4d4213ed7b166945f5b9143062d - Author: Nobuyoshi Nakada - Date: 2019-10-03 19:13:05 +0900 - - make-snapshot: touch updated files after prepared - - Align mtime of files updated by `make prepare-package` to make - packages reproducible. - -commit 8142a9b43dfc3e141fd7cb3fc255fc102523f6df - Author: Nobuyoshi Nakada - Date: 2019-10-03 19:12:03 +0900 - - make-snapshot: suppress make error messages unless failed - -commit 47d143be17819bed6dda08e24069d755ef34530b - Author: Nobuyoshi Nakada - Date: 2019-10-03 16:47:57 +0900 - - make-snapshot: copy cache files instead of linking - - To get rid of setting mode and mtime of the original cache files. - -commit b7ae26e2eec9efb826e4a2d913a67341531c6342 - Author: Nobuyoshi Nakada - Date: 2019-10-03 16:47:05 +0900 - - vcs.rb: fix to export git-svn version - - * Use the given branch name instead of implicit 'HEAD". - * Format like as git-svn when `from` or `to` is SVN revision - number. - -commit ad67adb5f942d463ab378fea21cc21cb15466cbc - Author: Hiroshi SHIBATA - Date: 2019-10-03 14:47:18 +0900 - - [ruby/fileutils] Use pend instead of skip - - https://github.com/ruby/fileutils/commit/ba2c24e2d7 - -commit c14755e9ca8f2cf8fea5b0232d846bd57193ea53 - Author: Hiroshi SHIBATA - Date: 2019-10-03 18:32:21 +0900 - - [ruby/fileutils] improve the compatibility of minitest - - https://github.com/ruby/fileutils/commit/f16f5a0dd6 - -commit 3ffd98c5cd040a4081617b3bc6f9062237937b9b - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-01 16:45:14 +0900 - - add debug counters for vm_search_method_slowpath() - - Implemented fine-grained inspection of cache misshits. Handy for - counting the reasons why an inline method cache was evicted. - -commit 84fc1de5125a6f7c61609bf153f0359b3da55d8d - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-03 14:56:35 +0900 - - use bind_call for test-all --gc-stress - - This one allocation of Method object is worth avoiding. We don't - want to test UnboundMethod#bind right here. GC need not run. - -commit 1c999952e74e9b5f1e882501580d5f2f5a92f142 - Author: Romain Tartière - Date: 2019-10-03 05:26:39 +0900 - - Resolve unused local variable reported by LGTM - - LGTM reports that the value assigned to local variable 'shared' is never - used: - https://lgtm.com/projects/g/ruby/ruby/snapshot/f319a5d064627c6641817ec2ed16b97b4d215148/files/misc/lldb_cruby.py#x6512c0281581a470:1 - - This problem was introduced in by the refactoring that took place in - 7c496b6624f720d539e3c0b40f122a9422a13b99. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2517 - -commit a515e3f99ea50358afbfc94a53d54a390096626d - Author: git - Date: 2019-10-03 12:48:30 +0900 - - * 2019-10-03 [ci skip] - -commit 7e060d50183712b7ab11f5887af6a3ce69df4a57 - Author: git - Date: 2019-10-03 12:48:20 +0900 - - * expand tabs. [ci skip] - - Tabs were expanded because previously the file did not have any tab indentation. - Please update your editor config, and use misc/expand_tabs.rb in the pre-commit hook. - -commit eb92159d72fc711387f7e17ffbaca1678f23fd47 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-10-03 12:26:41 +0900 - - Revert https://github.com/ruby/ruby/pull/2486 - - This reverts commits: 10d6a3aca7 8ba48c1b85 fba8627dc1 dd883de5ba - 6c6a25feca 167e6b48f1 7cb96d41a5 3207979278 595b3c4fdd 1521f7cf89 - c11c5e69ac cf33608203 3632a812c0 f56506be0d 86427a3219 . - - The reason for the revert is that we observe ABA problem around - inline method cache. When a cache misshits, we search for a - method entry. And if the entry is identical to what was cached - before, we reuse the cache. But the commits we are reverting here - introduced situations where a method entry is freed, then the - identical memory region is used for another method entry. An - inline method cache cannot detect that ABA. - - Here is a code that reproduce such situation: - - ```ruby - require 'prime' - - class << Integer - alias org_sqrt sqrt - def sqrt(n) - raise - end - - GC.stress = true - Prime.each(7*37){} rescue nil # <- Here we populate CC - class << Object.new; end - - # These adjacent remove-then-alias maneuver - # frees a method entry, then immediately - # reuses it for another. - remove_method :sqrt - alias sqrt org_sqrt - end - - Prime.each(7*37).to_a # <- SEGV - ``` - -commit ef697388becedf36966a2edcdcf88baca342b9e2 - Author: Jeremy Evans - Date: 2019-10-02 23:56:28 +0900 - - Treat return in block in class/module as LocalJumpError (#2511) - - return directly in class/module is an error, so return in - proc in class/module should also be an error. I believe the - previous behavior was an unintentional oversight during the - addition of top-level return in 2.4. - - Notes: - Merged-By: jeremyevans - -commit 9759e3c9f09ec442b2aa0d0cc299ac791e516a01 - Author: Koichi Sasada - Date: 2019-10-02 17:16:04 +0900 - - fix assertion number. - - On parallel test, there are additional tests because of implicit - checkers which are enabled on 84cbce3d88. - -commit 4ed51b39563df23ad9a9c1fa192ee213cb958991 - Author: Nobuyoshi Nakada - Date: 2019-10-02 15:00:17 +0900 - - Fixed failure message for `clean-cache` - -commit 84cbce3d880f0d6a51ccf3622b8d1e79132b9a0e - Author: Koichi Sasada - Date: 2019-10-02 16:02:00 +0900 - - Enable checkers on parallel test. - - parallel test (`make test-all TESTS=-j8`) runs tests on specified - number of processes. However, some test checkers written in - `runner.rb` are not loaded. This fix enable these checkers on - parallel tests. - - See also: https://github.com/ruby/ruby/pull/2508 - -commit 99d3043bd8e7705cb5ec1772080667981bd07a36 - Author: Alan Wu - Date: 2019-10-02 16:05:40 +0900 - - Iseq#to_binary: dump flag for **nil (#2508) - - RUBY_ISEQ_DUMP_DEBUG=to_binary and the attached test case was failing. - Dump the flag to make sure `**nil` can round-trip properly. - -commit 4946d83a1cbfe23369bdbc8057592b48c673d94b - Author: git - Date: 2019-10-02 13:00:56 +0900 - - * 2019-10-02 [ci skip] - -commit a61ae414b6f8310c9dff9a6f18b6064499167513 - Author: NAKAMURA Usaku - Date: 2019-10-02 13:00:17 +0900 - - Fix the order of executing `after-update` task - -commit 5af2c8735a22e6b54acf4164b1f1f7bac98e7111 - Author: NAKAMURA Usaku - Date: 2019-10-02 12:59:59 +0900 - - Should fail if `system` failed - -commit 15606963de0c818c549aef2352da45d749e4b0db - Author: Hiroshi SHIBATA - Date: 2019-10-01 20:53:16 +0900 - - expose assert_raise and assert_join_threads - - Notes: - Merged: https://github.com/ruby/ruby/pull/2516 - -commit 55de0282da1ae0a16c857fb4b160dea04579b36c - Author: Kazuhiro NISHIYAMA - Date: 2019-10-01 21:26:54 +0900 - - Remove draft-release.yml [ci skip] - - I thought default branch's workflow runs on any tags, - but it does not run for stable branches without draft-release.yml. - So I abandoned, and use workflow in ruby/actions instead. - -commit 3ce238b5f9795581eb84114dcfbdf4aa086bfecc - Author: Yusuke Endoh - Date: 2019-10-01 12:29:18 +0900 - - WEBrick: prevent response splitting and header injection - - This is a follow up to d9d4a28f1cdd05a0e8dabb36d747d40bbcc30f16. - The commit prevented CRLR, but did not address an isolated CR or an - isolated LF. - - Co-Authored-By: NARUSE, Yui - -commit 36e057e26ef2104bc2349799d6c52d22bb1c7d03 - Author: Nobuyoshi Nakada - Date: 2019-08-13 12:14:28 +0900 - - Loop with String#scan without creating substrings - - Create the substrings necessary parts only, instead of cutting the - rest of the buffer. Also removed a useless, probable typo, regexp. - -commit a0a2640b398cffd351f87d3f6243103add66575b - Author: Nobuyoshi Nakada - Date: 2018-12-12 14:38:09 +0900 - - Fix for wrong fnmatch patttern - - * dir.c (file_s_fnmatch): ensure that pattern does not contain a - NUL character. https://hackerone.com/reports/449617 - -commit a38fe1fbf068d05177e6e6fac2b8ec7704873e63 - Author: Yusuke Endoh - Date: 2019-10-01 08:57:50 +0900 - - ext/-test-/enumerator_kw/enumerator_kw.c: remove unused variable - -commit 01e75b6be9987bf9ce0793643470e47a32871c38 - Author: git - Date: 2019-10-01 01:14:45 +0900 - - * 2019-10-01 [ci skip] - -commit 671ca21254a60d967570c8c973f5f2f17beb4931 - Author: Koichi Sasada - Date: 2019-10-01 01:14:19 +0900 - - remove `unused var` warning - -commit a8c436d9a1d333e9391c78d4ffd32568a56534a6 - Author: Jeremy Evans - Date: 2019-09-30 14:49:43 +0900 - - Issue keyword flag warning even with no arguments - - If the keyword flag is set, there should be at least one argument, - if there isn't, that is a sign the keyword flag was passed when it - should not have been. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2509 - -commit 3073404e741df19ae16248126640777ed36110e8 - Author: Jeremy Evans - Date: 2019-09-30 13:33:59 +0900 - - Add rb_enumeratorize_with_size_kw and related macros - - Currently, there is not a way to create a sized enumerator in C - with a different set of arguments than provided by Ruby, and - correctly handle keyword arguments. This function allows that. - - The need for this is fairly uncommon, but it occurs at least in - Enumerator.produce, which takes arguments from Ruby but calls - rb_enumeratorize_with_size with a different set of arguments. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2509 - -commit 5ddc2ba13ed6964a0383894e3728dc1bc708c404 - Author: Yusuke Endoh - Date: 2019-09-30 20:24:26 +0900 - - test/ruby/test_io.rb: suppress a "method redefined" warning - - by explicitly removing the old definition. - -commit fc66947c61fe20f6f584ab3b1f7a5f10982af87e - Author: Yusuke Endoh - Date: 2019-09-30 20:22:29 +0900 - - test/-ext-/string/test_fstring.rb: suppress "possibly useless use of -@" - - "in void context" by assigning the result to a dummy variable. - -commit 945560008ffbb768df3a6e9f0814f2d117993a5e - Author: Koichi Sasada - Date: 2019-09-30 17:59:10 +0900 - - Revert "introduce debug check." - - This reverts commit c3b84f2de83a27acc638f99743bfa2c44bac621c. - Backtrace shows it is before running tests and debug check was - nonsense. - -commit 10d6a3aca78771d0a7bfaecce982aac148152f35 - Author: Nobuyoshi Nakada - Date: 2019-09-30 17:43:11 +0900 - - Fix assertion - - callable_method_entry_p is for rb_callable_method_entry_t. - -commit 771fd915a453d1cbc809189a57520675f2fa3fd4 - Author: Nobuyoshi Nakada - Date: 2019-09-30 17:39:38 +0900 - - Use assert_operator instead of mere assert - -commit 1722c156dd45618cea712f017ca744d6f3b55be8 - Author: Nobuyoshi Nakada - Date: 2019-09-30 17:35:29 +0900 - - Now `use_symbol` is always true - -commit c3b84f2de83a27acc638f99743bfa2c44bac621c - Author: Koichi Sasada - Date: 2019-09-30 17:23:36 +0900 - - introduce debug check. - - There are random failures: - - > lib/rubygems/core_ext/kernel_require.rb:61:in `require': - > wrong number of arguments (given 1, expected 0) (ArgumentError) - http://ci.rvm.jp/results/trunk-jemalloc@silicon-docker/2275159 - - To check this failure, I added a small check code. - -commit 88f38c187e3171f8f351f3198247d20ea9f016ee - Author: Koichi Sasada - Date: 2019-09-30 15:36:19 +0900 - - Emulate method_list (chkbuild) on test-all. - - chkbuild (CI process) shows methods list before - running tests and sometimes it can fails. This - commit a code part to emulate this method listing - feature. - -commit bf8d7d9c1d89a62537566ea6dd43db175a892dbd - Author: Koichi Sasada - Date: 2019-09-30 15:35:22 +0900 - - show RUBY_ISEQ_DUMP_DEBUG envval if given. - -commit 8ba48c1b8509bc52c2fc1f020990c8a3a8eca2c9 - Author: Koichi Sasada - Date: 2019-09-30 14:27:02 +0900 - - rb_method_attr_t::location should be 0 or others. - - method_def_location() expects that rb_method_attr_t::location - is 0 (Qfalse) or not. - -commit 649a64ae29318501472f74798a12eb60871ab990 - Author: Jeremy Evans - Date: 2019-09-30 09:47:17 +0900 - - Add three more C-API functions for handling keywords - - This adds rb_funcall_passing_block_kw, rb_funcallv_public_kw, - and rb_yield_splat_kw. This functions are necessary to easily - handle cases where rb_funcall_passing_block, rb_funcallv_public, - and rb_yield_splat are currently used and a keyword argument - separation warning is raised. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2507 - -commit fba8627dc1c5b191713edeb5fc21cbe0ddde9e3c - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-26 13:44:51 +0900 - - delete unnecessary branch - - At last, not only myself but also your compiler are fully confident - that the method entries pointed from call caches are immutable. We - don't have to worry about silent updates. Just delete the branch - that is now always false. - - Calculating ------------------------------------- - ours trunk - vm2_poly_same_method 2.142M 2.070M i/s - 6.000M times in 2.801148s 2.898994s - - Comparison: - vm2_poly_same_method - ours: 2141979.2 i/s - trunk: 2069683.8 i/s - 1.03x slower - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit dd883de5ba311c38818d0f638a94b4fbc63f5ee5 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-26 10:22:01 +0900 - - refactor constify most of rb_method_entry_t - - Now that we have eliminated most destructive operations over the - rb_method_entry_t / rb_callable_method_entry_t, let's make them - mostly immutabe and mark them const. - - One exception is rb_export_method(), which destructively modifies - visibilities of method entries. I have left that operation as is - because I suspect that destructiveness is the nature of that - function. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit 6c6a25feca8752205d81c5247f85d8ae8fb880d8 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-25 17:00:25 +0900 - - refactor add rb_method_entry_from_template - - Tired of rb_method_entry_create(..., rb_method_definition_create( - ..., &(rb_method_foo_t) {...})) maneuver. Provide a function that - does the thing to reduce copy&paste. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit 167e6b48f1b321d671998728adf5a0db06d24445 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-25 15:52:02 +0900 - - refactor reduce METHOD_ENTRY_FLAGS_COPY - - Make things more immutable. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit 7cb96d41a52d5ce4b2485ff542edc88fa246bc1a - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-25 13:51:06 +0900 - - refactor delete rb_method_entry_copy - - The deleted function was to destructively overwrite existing method - entries, which is now considered to be a bad idea. Delete it, and - assign a newly created method entry instead. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit 3207979278bea11c50cb84f4044047b9c503230b - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-24 15:41:52 +0900 - - refactor delete rb_method_definition_set - - Instead of destructively write fields of method entries, create a - new entry and let it overwrite its owner. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit 595b3c4fddc5cde58add2fa2637acb2664694194 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-23 17:42:27 +0900 - - refactor rb_method_definition_create take opts - - Before this changeset rb_method_definition_create only allocated a - memory region and we had to destructively initialize it later. - That is not a good design so we change the API to return a complete - struct instead. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit 1521f7cf89fe3cf356a589c45bce4ccb57dce7fd - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-20 17:16:44 +0900 - - refactor delete vm_cref_dump - - No longer used. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit c11c5e69ac66ae10255a20a6b84e481f0423703d - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-20 17:01:53 +0900 - - refactor split rb_method_definition_set - - Did you know that C functions can return structs? That has been - true since the beginning, but not that very useful until C99. Now - that we can write compound literals, this feature is much easier - to use. By allowing struct-returning functions, some formerly big - functions can be split into smaller ones, like this changeset. - - At least GCC is smart enough to inline the split functions back - into one. No performance penalty is observed. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit cf336082039ae84b5001908f6bb7e04bdda8893e - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-20 14:12:51 +0900 - - refactor constify most of rb_method_definition_t - - Most (if not all) of the fields of rb_method_definition_t are never - meant to be modified once after they are stored. Marking them const - makes it possible for compilers to warn on unintended modifications. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit 3632a812c0b1e0bd1c75b2426cbfe9ec1715bb56 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-25 13:00:56 +0900 - - refactor add rb_id_table_foreach_with_replace_with_key - - This is a pure refactoring to reduce copy & paste. Also the new - function is made visible from other parts of the interpreter, to - be used later. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit f56506be0dc7f1a9cb35d8371b04720bef50fd9b - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-25 13:11:28 +0900 - - refactor delete ID_TABLE_ITERATOR_RESULT_END - - Not used from anywhere. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit 86427a321997b733bf8ebb6036157c341a52edfc - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-26 10:26:40 +0900 - - refactor delete METHOD_ENTRY_COMPLEMENTED flag - - Because rb_method_definition_t tracks its own complemented_count, - we no longer have to check it in rb_method_entry_t side. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2486 - -commit 6fdd701472af5355562cb2394167b26a4c3a2a97 - Author: Jeremy Evans - Date: 2019-09-30 08:41:00 +0900 - - Remove VM_NO_KEYWORDS, replace with RB_NO_KEYWORDS - - VM_NO_KEYWORDS was introduced first in vm_core.h, but it is best - to only use a single definition for this. - -commit 58dfea0c8de29cbad35621847c04372b779c5f5d - Author: Jeremy Evans - Date: 2019-09-30 05:15:04 +0900 - - Make direct calls to rb_{obj_instance,mod_module}_{eval,exec} not pass keywords - - In general RB_PASS_CALLED_KEYWORDS should only be set if we are - sure the arguments passed come directly from Ruby. For direct calls - to these C functions, we should not assume that keywords are passed. - Add static *_internal versions of these functions that - Kernel#instance_{eval,exec} and Module#{class,module}_{eval,exec} - call that set RB_PASS_CALLED_KEYWORDS. - - Also, change struct.c back to calling rb_mod_module_eval, now that - the call is safe. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2505 - -commit 59060aadea28d3a6cd0ebbcc17c10a3628e6e867 - Author: Benoit Daloze - Date: 2019-09-30 06:43:15 +0900 - - Run test-unit tests in CI - - Notes: - Merged: https://github.com/ruby/ruby/pull/2506 - -commit 2740b869051f773147bd1e26d7b489eab9037c04 - Author: Benoit Daloze - Date: 2019-09-30 06:42:51 +0900 - - Update to latest test-unit - - * See https://github.com/test-unit/test-unit/issues/165 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2506 - -commit 54d49aeb52fd1a8699004eb5065779cd8c6eb3a9 - Author: Benoit Daloze - Date: 2019-09-30 02:56:15 +0900 - - Update to ruby/spec@2699ea4 - -commit 869e4f6e4c683bf8e76ae7db54a26b33fb925410 - Author: Jeremy Evans - Date: 2019-09-30 01:15:43 +0900 - - Fix or suppress keyword argument separation warnings in util_spec - - Some warnings are because the @o.rb_scan_args call doesn't - include keyword arguments, but the first argument is passed to - rb_scan_args may have a last hash treated as keywords. Those - should be handled using rb_scan_args_kw on Ruby 2.7. - - Other warnings are for the deprecated rb_scan_args behavior to - split option hashes or treat a nil argument as an option hash. - Those warnings should just be suppressed. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2504 - -commit 070cbe22b70ec2bec36c7cfc84b726510afa306f - Author: Benoit Daloze - Date: 2019-09-30 02:13:37 +0900 - - Update to ruby/spec@34e6246 - -commit d51b4e34fbdbe1a845aa2251b1fa3304de809b32 - Author: Benoit Daloze - Date: 2019-09-30 02:13:35 +0900 - - Update to ruby/mspec@5dda9fb - -commit 2d41c712a73a1b5d85dd8d5bf9134ed1be0e94eb - Author: Benoit Daloze - Date: 2019-09-30 01:34:12 +0900 - - Skip default gemspecs spec if the default_specifications_dir cannot be found - -commit 59648af296ab15a2e34ebce62a7cc14deb889e7b - Author: Nobuyoshi Nakada - Date: 2019-09-30 01:08:32 +0900 - - Suppress keyword argument warning from #step - - * numeric.c (num_step): pass the extracted argument from keyword - argument, not the last argument itself which should have been - warned already. - -commit f39314a98ac6e762e8f5d72d80923038b0b5f01a - Author: git - Date: 2019-09-30 01:02:54 +0900 - - * 2019-09-30 [ci skip] - -commit a17bc04d159ec9839cc8cfb02dc0cdd2802110f4 - Author: Benoit Daloze - Date: 2019-09-30 01:01:32 +0900 - - Update to ruby/spec@e69a14c - -commit f9a9f3c7c6cf3fe534d4934dd3b502d721151b81 - Author: Benoit Daloze - Date: 2019-09-30 01:01:30 +0900 - - Update to ruby/mspec@8cabcef - -commit 1c938a72aa9378f982dbc55327e86150c47b8707 - Author: Benoit Daloze - Date: 2019-09-29 23:03:58 +0900 - - Update to ruby/spec@519df35 - -commit 31bb66a19df26409c9d47afcf37919c9a065516a - Author: Benoit Daloze - Date: 2019-09-29 23:03:47 +0900 - - Update to ruby/mspec@8106083 - -commit a27dc83113afa9831dcdf919138666b09a73ccf6 - Author: Benoit Daloze - Date: 2019-09-29 19:38:21 +0900 - - Pass $(XRUBY) to test-bundled-gems.rb since RbConfig.ruby is incorrect for miniruby - - Notes: - Merged: https://github.com/ruby/ruby/pull/2503 - -commit 4096e4b08c46dddb8edc9dabf70e737946ac6df8 - Author: Benoit Daloze - Date: 2019-09-29 19:16:10 +0900 - - Move the logic to test bundled gems to Ruby code - - * Writing shell scripts in a Makefile is very error-prone. - * TEST_BUNDLED_GEMS_ALLOW_FAILURES seemed to not work before. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2503 - -commit d090e449ef4e92b2020e51fe495cd039e4f6fdda - Author: Benoit Daloze - Date: 2019-09-29 19:18:49 +0900 - - Exclude the test-unit bundled gem tests since they also fail since the Time#inspect change - - * See https://github.com/test-unit/test-unit/issues/165 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2503 - -commit e3b11566bfbb6ddcdd9f3483a6bdeb501a610fa9 - Author: Benoit Daloze - Date: 2019-09-28 18:45:23 +0900 - - Remove continue-on-error for test-bundled-gems - - * Otherwise, it takes a very long time to notice those tests broke. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2503 - -commit f6f03dcad60d38868d345172ad5c5d2ce44bd004 - Author: Nobuyoshi Nakada - Date: 2019-09-29 18:07:51 +0900 - - [ruby/stringio] Bump up the version - - https://github.com/ruby/stringio/commit/f0e5027279 - -commit 7fe253f47f55f69069fc0e03879a3a2b55aee408 - Author: Nobuyoshi Nakada - Date: 2019-09-29 18:06:02 +0900 - - [ruby/stringio] Use rb_funcallv_kw when delegating arguments - - https://github.com/ruby/stringio/commit/5892663e32 - -commit 68ab4a5e35d30a8f1c4620dfa8f5132f4996f2fc - Author: Nobuyoshi Nakada - Date: 2019-09-29 18:02:00 +0900 - - [ruby/stringio] Replaced rb_funcall2 with rb_funcallv - - https://github.com/ruby/stringio/commit/a37ab7c419 - -commit ef795f9abdb1db1bfa061dbc97d294db4f87756f - Author: Nobuyoshi Nakada - Date: 2019-09-29 18:13:41 +0900 - - [ruby/stringio] Dropped older ruby versions - - https://github.com/ruby/stringio/commit/e8065153b8 - -commit 7f30783af73bb484912365c28da4e7292f1d8211 - Author: Nobuyoshi Nakada - Date: 2019-09-29 18:13:00 +0900 - - [ruby/stringio] Get rid of String#undump for ruby 2.4 or earlier - - https://github.com/ruby/stringio/commit/4dfd997e0a - -commit 94db8cda9b4eeee4736d089570a343fdf5ef86c0 - Author: Nobuyoshi Nakada - Date: 2019-09-29 18:52:31 +0900 - - [ruby/zlib] Fix for older ruby 2.6 or earlier - - https://github.com/ruby/zlib/commit/00ead8cb2c - -commit f10c9cb1f2dfca024937bc48137168124d8511aa - Author: Nobuyoshi Nakada - Date: 2019-09-29 18:21:17 +0900 - - [ruby/zlib] Search zlib.c as a gem - - https://github.com/ruby/zlib/commit/8f43b264cd - -commit ce477089f690d3bedcaef088158b429db8a97d64 - Author: Benoit Daloze - Date: 2019-09-29 18:04:28 +0900 - - [DOC] Fix typos in Array#{to_s,inspect} doc [ci skip] - -commit e2d97cffe5aecc88f3fc4dc7be9a7b3a57bede87 - Author: Nobuyoshi Nakada - Date: 2019-09-29 17:28:58 +0900 - - [DOC] stated that Array#to_s calls #inspect [ci skip] - - [ruby-list:50826] - -commit 289cad501d7a5219568450333d440364674441b0 - Author: git - Date: 2019-09-29 13:17:05 +0900 - - * 2019-09-29 [ci skip] - -commit 6e1b72ae4afca7c7726e3f03171b597c2d0f12b0 - Author: Yuki Nishijima - Date: 2019-09-29 13:15:09 +0900 - - Upgrade to the latest did_you_mean 1.3.1 - -commit 550a6a6bc1be4ff9aa6b65f6ad9b45c3fa2d1344 - Author: Nobuyoshi Nakada - Date: 2019-09-28 13:51:27 +0900 - - NEWS: marked up `**nil` [ci skip] - -commit d474243e8c635a011ce2789660cb71b3f6815317 - Author: Nobuyoshi Nakada - Date: 2019-09-28 13:49:49 +0900 - - NEWS: Added module name to proc and lambda [ci skip] - - RDoc cannot know if bare words are method name or not. - -commit d53cf854741bbf496298c5a722988d2dd84314a1 - Author: Jeremy Evans - Date: 2019-09-28 00:07:49 +0900 - - Fix warning when doing Struct.new(:x, keyword_init: true){} - - This is due to calling rb_mod_module_eval directly instead of using - rb_funcall_passing_block. - - The problem with calling directly is it does not create a new VM - frame, so rb_mod_module_eval was called with no arguments, but with - the keyword given VM frame flag set, which causes problems - internally. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2500 - -commit 7814b6c6572446a6b64614e524d13dd423577004 - Author: Jeremy Evans - Date: 2019-09-28 01:35:51 +0900 - - Correctly issue ArgumentError when calling method that accepts no keywords - - If a method accepts no keywords and was called with a keyword, an - ArgumentError was not always issued previously. Force methods that - accept no keywords to go through setup_parameters_complex so that - an ArgumentError is raised if keywords are provided. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2501 - -commit fd0e2141835a0ef98b31d0a6b23924413f8452d3 - Author: Jeremy Evans - Date: 2019-09-28 01:43:31 +0900 - - Update NEWS section on keyword argument separation [ci skip] - - This may be too verbose, if so, maybe it should be moved lower in - the document, or to a separate document. - -commit 707c48859e30760712a6a57d1f3df5e8a9d4ea33 - Author: git - Date: 2019-09-28 01:24:51 +0900 - - * 2019-09-28 [ci skip] - -commit a1fda16b238f24cf55814ecc18f716cbfff8dd91 - Author: Dylan Thacker-Smith - Date: 2019-09-28 01:24:25 +0900 - - Optimize Array#flatten and flatten! for already flattened arrays (#2495) - - * Optimize Array#flatten and flatten! for already flattened arrays - * Add benchmark for Array#flatten and Array#flatten! - - [Bug #16119] - -commit 869e2dd8c8efc1e7a043c9eee82d97c47befbcc7 - Author: Jeremy Evans - Date: 2019-06-27 05:20:22 +0900 - - Warn for URI.{,un}{escape,encode}, even if not in verbose mode - - The verbose mode warning has been present for almost 10 years. - If we ever plan to remove these methods, we should make the warning - a regular deprecation warning so that people are aware. - - Implements [Feature #15961] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2494 - -commit a2c26fe1c6d49b54494b7c6301cc4c77596eec0c - Author: Jeremy Evans - Date: 2019-06-21 06:47:15 +0900 - - Fix fallback in URI.encode_www_form_component to include # - - Patch from Matthew Kerwin. - - Fixes [Bug #14358] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2494 - -commit 43a16c98df392e726040f0331a3e09d00c53d513 - Author: Jeremy Evans - Date: 2019-06-21 05:19:48 +0900 - - Do not escape + in Shellwords.escape - - + is not a character that requires escaping in Bourne sh. - - Fixes [Bug #14429] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2494 - -commit 2b6a9f3a1ffcdb00bf89798979d475c6d189d419 - Author: Jeremy Evans - Date: 2019-06-21 04:59:29 +0900 - - Ignore Errno::EPIPE when sending requests in net/http - - An EPIPE when sending the request should be ignored. Even if you - cannot write more data, you may still be able to read the server's - response. - - Fixes [Bug #14466] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2494 - -commit 80d0b6f132e6475c0b9c78ff857e7bb81c93df0d - Author: Nobuyoshi Nakada - Date: 2019-09-27 21:54:26 +0900 - - Updated bundled_gems - -commit 79d5332a2da0e2743a77480aebfca256a54a962e - Author: Nobuyoshi Nakada - Date: 2019-09-27 21:12:27 +0900 - - Drop eliminated catch-entries - - Drop catch table entries used in eliminated block, as well as - call_infos. [Bug #16184] - -commit 03284fb91151bff5e12f1b7d5cdb0589f1ee43fb - Author: Nobuyoshi Nakada - Date: 2019-09-27 21:07:53 +0900 - - assert_in_out_err should use FailDesc too - -commit 8d0ff887274fdc73415035d652551d1fa0768c7b - Author: Nobuyoshi Nakada - Date: 2019-09-27 14:06:07 +0900 - - Adjusted spaces [ci skip] - -commit 4d3502d57f53d5cd54452d9b19475944055989f4 - Author: Nobuyoshi Nakada - Date: 2019-09-27 14:01:37 +0900 - - More tests for [Feature #16150] - -commit eff15a269fdc37d2b09cf1dfe8c1b1bf6e377a32 - Author: Jean Boussier - Date: 2019-09-27 00:27:47 +0900 - - [EXPERIMENTAL] Make NilClass#to_s, TrueClass#to_s and FalseClass#to_s return a frozen String - - * Always the same frozen String for each of these values. - * Avoids extra allocations whenever calling these 3 methods. - * See [Feature #16150] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2492 - -commit 2082a26dc75da7cb76150b51cd5b8f7636ad0fa2 - Author: Hiroshi SHIBATA - Date: 2019-09-26 18:32:26 +0900 - - [ruby/fileutils] Bump version to 1.3.0. - - https://github.com/ruby/fileutils/commit/ba3bd6fdfd - -commit 49b7805e9acd181838c17d5aa9e14244a4cce365 - Author: Hiroshi SHIBATA - Date: 2019-08-12 21:05:53 +0900 - - [ruby/fileutils] Use Gemfile instead of Gem::Specification#add_development_dependency. - - https://github.com/ruby/fileutils/commit/17a9de6d9b - -commit d5355123ccf41c05766b1d58b75419bece61b8ea - Author: Kazuhiro NISHIYAMA - Date: 2019-08-24 21:19:31 +0900 - - [ruby/fileutils] Reduce global variables - - https://github.com/ruby/fileutils/commit/ba81f024cf - -commit 06c35cfa65ed5e023bb8b82af93a3d711e550913 - Author: Jeremy Evans - Date: 2019-08-24 06:52:12 +0900 - - [ruby/fileutils] Fix cp_r with symlink root on Windows - - Previously this would copy the symlink root as a symlink instead - of creating a new root directory. This modifies the source - to expand it using File.realpath before starting the copy. - - Fixes Ruby Bug 12123 - - https://github.com/ruby/fileutils/commit/7359cef359 - -commit 9792c9d183ccc0e80230858c910c74cfef5ddc32 - Author: Jeremy Evans - Date: 2019-08-24 06:50:34 +0900 - - [ruby/fileutils] Fix test_cp_r_dev on Windows or other systems without character/block device in /dev - - Previously this would give an error such as: - - TestFileUtils#test_cp_r_dev [c:/fileutils/test/fileutils/test_fileutils.rb:455]: - [RuntimeError] exception expected, not. - Class: - Message: <"no implicit conversion of nil into String"> - - https://github.com/ruby/fileutils/commit/0ce0fefbeb - -commit 9494ef8b2de3a7224eb85800606e7c046964cbd2 - Author: Jeremy Evans - Date: 2019-08-01 04:57:21 +0900 - - [ruby/fileutils] Do not break in verbose mode if using FileUtils with a frozen object - - If FileUtils is included into another object, and verbose mode is - used, a FrozenError is currently raised unless the object has the - @fileutils_output and @fileutils_label instance variables. - - This fixes things so that it does not attempt to set the instance - variables, but it still uses them if they are present. - - https://github.com/ruby/fileutils/commit/689cb9c56a - -commit 02cd42050515b3af67396a25e78d948adcac6cdf - Author: Jeremy Evans - Date: 2019-07-15 02:17:57 +0900 - - [ruby/fileutils] Skip test_cp_r_socket on JRuby - - https://github.com/ruby/fileutils/commit/20bb9ec789 - -commit 1d99163aa59b637f1c14287135f26480df447e49 - Author: Jeremy Evans - Date: 2019-07-10 12:41:51 +0900 - - [ruby/fileutils] Make copy methods handle FIFOs and UNIX sockets - - Previously, this was broken. Trying to copy a FIFO would raise a - NoMethodError if File.mkfifo was defined. Trying to copy a UNIX - socket would raise a RuntimeError as File.mknod is not something - Ruby defines. - - Handle the FIFO issue using File.mkfifo instead of mkfifo. - - Handle the UNIX Socket issue by creating a unix socket. - - Continue to not support character or block devices, raising a - RuntimeError for both. - - Add tests for FIFO, UNIX Socket, and character/block devices. - - https://github.com/ruby/fileutils/commit/123903532d - -commit 366dd9d80308e6526502ef636b63893b3fb41af2 - Author: zverok - Date: 2019-03-10 20:09:59 +0900 - - [ruby/fileutils] Update the documentation content and formatting - - https://github.com/ruby/fileutils/commit/b701353c53 - -commit 660c7e050f6cb050fd5618f812129c211af29810 - Author: Jeremy Evans - Date: 2019-09-27 09:25:54 +0900 - - Fix more keyword separation issues - - This fixes instance_exec and similar methods. It also fixes - Enumerator::Yielder#yield, rb_yield_block, and a couple of cases - with Proc#{<<,>>}. - - This support requires the addition of rb_yield_values_kw, similar to - rb_yield_values2, for passing the keyword flag. - - Unlike earlier attempts at this, this does not modify the rb_block_call_func - type or add a separate function type. The functions of type - rb_block_call_func are called by Ruby with a separate VM frame, and we can - get the keyword flag information from the VM frame flags, so it doesn't need - to be passed as a function argument. - - These changes require the following VM functions accept a keyword flag: - - * vm_yield_with_cref - * vm_yield - * vm_yield_with_block - - Notes: - Merged: https://github.com/ruby/ruby/pull/2493 - -commit 0c6f36668a11902903d85ada61a812d297d02de5 - Author: Nobuyoshi Nakada - Date: 2019-09-27 10:20:56 +0900 - - Adjusted spaces [ci skip] - -commit 293c6c8cc3cd9a9cb2910672589ee3631e1f1653 - Author: Aaron Patterson - Date: 2019-09-10 07:46:07 +0900 - - Add compaction support to `rb_ast_t` - - This commit adds compaction support to `rb_ast_t`. - -commit 37f9213f8957e0c6dffee7d8803890907f97bdbb - Author: Jeremy Evans - Date: 2019-09-27 01:10:42 +0900 - - Fix keyword argument separation issues in Enumerator::Generator#each - - This requires adding rb_proc_call_kw to pass the keyword flag. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2491 - -commit dd2068ac8d4016f43c1f3cc1aa81decb504db5b6 - Author: Jeremy Evans - Date: 2019-09-27 01:09:30 +0900 - - Add rb_adjust_argv_kw_splat to internal.h - - We are calling this in a few other files, it is better to have it - in a header than adding prototypes to the other files. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2491 - -commit 31339ef4f2af9c7dad2a81eaa9470ee4574181a0 - Author: George Claghorn - Date: 2019-09-12 04:47:20 +0900 - - Honor Syslog::Logger#level overrides - - Notes: - Merged: https://github.com/ruby/ruby/pull/2453 - -commit f5e8d33761aa2c0d8bec18ba21aeef4bb6940640 - Author: Aaron Patterson - Date: 2019-09-27 06:57:45 +0900 - - Fix clang errors when pedantic errors enabled - - I've been compiling with: - - ``` - set -lx cflags '-std=c99 -Werror=pedantic -pedantic-errors' - ``` - - But compilation would fail with the following: - - ``` - cont.c:296:90: error: format specifies type 'void *' but the argument has type 'struct fiber_pool_stack *' [-Werror,-Wformat-pedantic] - if (DEBUG) fprintf(stderr, "fiber_pool_stack_alloca(%p): %"PRIuSIZE"/%"PRIuSIZE"\n", stack, offset, stack->available); - ~~ ^~~~~ - cont.c:467:24: error: format specifies type 'void *' but the argument has type 'struct fiber_pool *' [-Werror,-Wformat-pedantic] - count, fiber_pool, fiber_pool->used, fiber_pool->count, size, fiber_pool->vm_stack_size); - ^~~~~~~~~~ - cont.c:588:83: error: format specifies type 'void *' but the argument has type 'struct fiber_pool_vacancy *' [-Werror,-Wformat-pedantic] - if (DEBUG) fprintf(stderr, "fiber_pool_stack_acquire: %p used=%"PRIuSIZE"\n", fiber_pool->vacancies, fiber_pool->used); - ~~ ^~~~~~~~~~~~~~~~~~~~~ - cont.c:736:76: error: format specifies type 'void *' but the argument has type 'rb_fiber_t *' (aka 'struct rb_fiber_struct *') - [-Werror,-Wformat-pedantic] - if (DEBUG) fprintf(stderr, "fiber_stack_release: %p, stack.base=%p\n", fiber, fiber->stack.base); - ``` - - This commit just fixes the pedantic errors - -commit 4808afb360c58e26669fec5a60a55088e16fdb4a - Author: Aaron Patterson - Date: 2019-09-27 05:19:11 +0900 - - Replace `freeze_string` with `rb_fstring` - -commit 0846d48853d460de50dda477d8c75024ba96679b - Author: Aaron Patterson - Date: 2019-09-27 05:16:33 +0900 - - Remove `iseq_add_mark_object_compile_time` - - This function is just a synonym for RB_OBJ_WRITTEN, so we can just - directly call that. - -commit 9b6460caccc125be6ba9f2dace9eaafbbe5bc438 - Author: Aaron Patterson - Date: 2019-09-26 06:57:25 +0900 - - Remove mark array - - We don't use this array anymore so we can remove it - -commit e197d9ca71570c980274ddd2cb6a32af6c00d95e - Author: Aaron Patterson - Date: 2019-09-26 06:08:11 +0900 - - Execute write barrier instead of adding to array - - We can mark everything via the instruction objects, so just execute the - write barrier instead of appending to the array - -commit 98d7583bfcf1442c01ebe0288726cacef138d349 - Author: Aaron Patterson - Date: 2019-09-26 05:59:54 +0900 - - Pull `iseq_add_mark_object_compile_time` out of `freeze_string` - - `freeze_string` essentially called iseq_add_mark_object_compile_time. I - need to know where all writes occur on the `rb_iseq_t`, so this commit - separates the function calls so we can add write barriers in the right - place. - -commit f639e046992d8d757b9745bfc02918f2acb8b23c - Author: Aaron Patterson - Date: 2019-09-24 04:10:33 +0900 - - Pull "mark object" up - - Move the "add mark object" function to the location where we should be - calling RB_OBJ_WRITTEN. I'm going to add verification code next so we - can make sure the objects we're adding to the array are also reachable - from the mark function. - -commit 50fadefb7ed275148b2266712b923b8cca1ed785 - Author: Aaron Patterson - Date: 2019-09-17 09:19:44 +0900 - - Scan the ISEQ arena for markables and mark them - - This commit scans the ISEQ arena for objects that can be marked and - marks them. This should make the mark array unnecessary. - -commit a618d6408653b7f2459acb5af6205c42ad3aad87 - Author: Aaron Patterson - Date: 2019-09-17 08:09:46 +0900 - - Allocate `INSN *` out of a separate arena - -commit 3cd8f76f7f1bc09f9dd6b65eaafe2fd3a990ac60 - Author: Aaron Patterson - Date: 2019-09-13 07:21:18 +0900 - - Introduce a secondary arena - - We'll scan the secondary arena during GC mark. So, we should only - allocate "markable" instruction linked list nodes out of the secondary - arena. - -commit bd017c633da4fe27c85b5dfc059b85d44a3b7afe - Author: Aaron Patterson - Date: 2019-09-13 07:15:43 +0900 - - Extract allocation and free functions - - Now we can allocate and free a secondary arena. - -commit 451776f13d24b0121b2bdfbe4eaafe7c74069c72 - Author: Aaron Patterson - Date: 2019-09-13 07:02:23 +0900 - - Pass in arena to allocator - - This is so we can configure a new arena later - -commit dd1e047fcb2a6429dd960b38a9ce03f86bb828fa - Author: Nobuyoshi Nakada - Date: 2019-09-27 02:31:39 +0900 - - NEWS: fixed markups and indent [ci skip] - - C API updates: - - * adjusted indent. - * marked up ANYARGS as RDoc. - -commit 81191afe8a9b40e6dd6cc8e0d1a9899938840073 - Author: Nobuyoshi Nakada - Date: 2019-09-27 01:13:10 +0900 - - Kernel#open may be redefined - -commit 617fa3049a151d773bb26151ae774a8f6a60bc2a - Author: Nobuyoshi Nakada - Date: 2019-09-27 00:48:48 +0900 - - NEWS: fixed markups and formatting [ci skip] - - * got rid of inadvertent label lists. - * marked up resolve_feature_path method names. - * fixed indentation of UnboundMethod#bind_call and marked up as - RDoc. - -commit 876c5fe1b2ba38fd893a81f91769b11f78cf4e92 - Author: Nobuyoshi Nakada - Date: 2019-09-27 00:37:54 +0900 - - Check the argument size - - Ensure that argument array size does not overflow as `int`, before - cast in thread_do_start after new thread created. - -commit 3b9cdc59ce7c992f1906638be6acf2a9eeb6d58b - Author: git - Date: 2019-09-27 00:02:18 +0900 - - * 2019-09-27 [ci skip] - -commit 955634283862d9d1966de43c73ece15714afdae2 - Author: Jeremy Evans - Date: 2019-09-26 09:59:41 +0900 - - Fix shorten-64-to-32 compile warnings/errors - - Notes: - Merged: https://github.com/ruby/ruby/pull/2484 - -commit b193041b992e5ce0ae1a07735fbdc53a739b5434 - Author: Jeremy Evans - Date: 2019-09-26 09:57:00 +0900 - - Fix keyword argument separation issues in Fiber#resume - - Notes: - Merged: https://github.com/ruby/ruby/pull/2484 - -commit 6b52959ef76f6f19e50c6f80f00c08bb0daf5c7c - Author: Jeremy Evans - Date: 2019-09-26 09:14:17 +0900 - - Fix keyword argument separation issues in Thread.new - - Notes: - Merged: https://github.com/ruby/ruby/pull/2484 - -commit 47d44510a3f5c6cfca69b3fc05d7f5f35b1b2784 - Author: Jeremy Evans - Date: 2019-09-26 07:32:35 +0900 - - Fix more keyword argument separation issues in Pathname - - Notes: - Merged: https://github.com/ruby/ruby/pull/2484 - -commit 3959469f240edb6c1f43976bbb72a0ba9105a6b1 - Author: Jeremy Evans - Date: 2019-09-26 07:03:09 +0900 - - Fix keyword argument separation issues in OpenSSL::SSL::SSLSocket#sys{read,write}_nonblock - - It's unlikely anyone would actually hit these. The methods are - private, you only hit this code path if calling these methods - before performing the SSL connection, and there is already a - verbose warning issued. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2484 - -commit 760893d2f85682a3c8c00be4b29dea0f6b2bb4f8 - Author: Jeremy Evans - Date: 2019-09-26 03:22:14 +0900 - - Fix keyword argument separation issues in Proc#{<<,>>} - - This requires adding rb_proc_call_with_block_kw. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2484 - -commit 0aa267f985084e69c3e45cc3e94698eaacab5c36 - Author: Jeremy Evans - Date: 2019-09-26 03:02:40 +0900 - - Fix keyword argument sepration issues when IO#open calls #to_open - - Notes: - Merged: https://github.com/ruby/ruby/pull/2484 - -commit 5b9d646944fe3a2f92682be906b0e9c7beae323c - Author: Jean Boussier - Date: 2019-09-26 20:41:41 +0900 - - Fix Module#name news and add a test - - Notes: - Merged: https://github.com/ruby/ruby/pull/2488 - -commit b29c68e6876976b22f64318bf390f05447e4ca01 - Author: Nobuyoshi Nakada - Date: 2019-09-26 22:57:25 +0900 - - Restore ENV, rubygems always sets SOURCE_DATE_EPOCH now - -commit c4ec817a7a6bc104dc1caf9018bc97a2dbfd324e - Author: Nobuyoshi Nakada - Date: 2019-09-26 22:56:32 +0900 - - Gem::Specification#to_ruby needs OpenSSL - -commit 41e3c204fd83660a243fa61f91aeda2a78817a97 - Author: Takashi Kokubun - Date: 2019-09-26 22:13:24 +0900 - - Reduce ISeq size of mjit_exec benchmark - - to avoid unwanted memory pressure - -commit 1070456bb8ddf48be7b601daa024fe372c3c25c1 - Author: git - Date: 2019-09-26 20:25:42 +0900 - - * remove trailing spaces. [ci skip] - -commit 9d0866c7d7b9cbe36a851744a37806e747e0e7a8 - Author: Jean Boussier - Date: 2019-09-26 17:41:43 +0900 - - [EXPERIMENTAL] Make Module#name return a frozen String - - * Always the same frozen String for a given Module or Class. - * Avoids extra allocations whenever calling Module#name. - * See [Feature #16150] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2487 - -commit c8f71686533cf068ad2f7a2e9fbb95a5c9f44642 - Author: Hiroshi SHIBATA - Date: 2019-09-26 19:22:30 +0900 - - Revert the accidentally commits related GitHub Actions - -commit 2a490d5660ac869f8f2bbcec4887b1dc2950643f - Author: Hiroshi SHIBATA - Date: 2019-09-26 18:24:20 +0900 - - Suppress assert_match warnings. - -commit d4a86e407ec2057c2c7ad757aa76dad757f34c3a - Author: Hiroshi SHIBATA - Date: 2019-09-26 18:07:17 +0900 - - Assert warnings message for the last argument is keyword parameter. - -commit a2af47301834ede4892dbbe1b7da28317202657e - Author: David Rodríguez - Date: 2019-09-12 16:44:22 +0900 - - [rubygems/rubygems] Make sure our modifications to kernel.warn work - - And test the fix we're adding. - - https://github.com/rubygems/rubygems/commit/6f86637b98 - -commit 54839f01736a8827be64c7f1720d226d37fa17d3 - Author: David Rodríguez - Date: 2019-09-12 17:19:11 +0900 - - [rubygems/rubygems] Fix jruby build - - https://github.com/rubygems/rubygems/commit/cc255b774a - -commit 966915d807f4d9ce8b9efaf5fedcceada05528c0 - Author: Hiroshi SHIBATA - Date: 2019-09-26 14:06:37 +0900 - - [rubygems/rubygems] indent - - https://github.com/rubygems/rubygems/commit/8cdb2fd66f - -commit 1eb503373e808b9cd2e1dbff5ec72d151a74d981 - Author: Hiroshi SHIBATA - Date: 2019-09-25 21:34:55 +0900 - - [rubygems/rubygems] filter dependency type and name strictly. - - Co-authored-by: Yusuke Endoh - - https://github.com/rubygems/rubygems/commit/92892bbc3a - -commit 0b65a7a19e949eece72a6a961a2642c0e5e19eb0 - Author: bronzdoc - Date: 2019-09-26 10:31:57 +0900 - - [rubygems/rubygems] Fix test_gem_attr - - https://github.com/rubygems/rubygems/commit/7c5b66f9ef - -commit 4f87a1583dce25749c0492146ef78fcb0319ccd2 - Author: David Rodríguez - Date: 2019-09-25 00:35:00 +0900 - - [rubygems/rubygems] Introduce default prerelease requirement - - https://github.com/rubygems/rubygems/commit/506c5bce49 - -commit 6134fd7a646842ca67081cd07a182642307138bd - Author: David Rodríguez - Date: 2019-09-25 00:27:27 +0900 - - [rubygems/rubygems] Remove comment not adding much - - https://github.com/rubygems/rubygems/commit/b3b5c2d379 - -commit 73633683c5a880af0207a55c6f3ea42c13cb5de1 - Author: f - Date: 2019-09-21 00:54:48 +0900 - - [rubygems/rubygems] add tests - - https://github.com/rubygems/rubygems/commit/8a7e27381c - -commit 1fb44d2b8c324afdb969c37df48b0ff5856fa65f - Author: f - Date: 2019-09-20 22:38:10 +0900 - - [rubygems/rubygems] Detect libc version, closes #2918 - - https://github.com/rubygems/rubygems/commit/1d18b12a26 - -commit ea5b1361557690569a33204c122a08f2faefdf91 - Author: David Rodríguez - Date: 2019-09-10 18:07:03 +0900 - - [rubygems/rubygems] Fix underscore version for bundler itself - - Previously it wouldn't play nice with the bundler version finder. - - https://github.com/rubygems/rubygems/commit/d8bb81556d - -commit ad638a713a953f62ff598fd820b44a3318f4241e - Author: Hiroshi SHIBATA - Date: 2019-09-17 18:06:50 +0900 - - [rubygems/rubygems] Added jruby to matrix - - https://github.com/rubygems/rubygems/commit/0832c079c8 - -commit 769a28d7dc913740d864e7478bbc7f9b3a188a5b - Author: Hiroshi SHIBATA - Date: 2019-09-15 14:32:30 +0900 - - [rubygems/rubygems] Removed 2.2 - - https://github.com/rubygems/rubygems/commit/7fd2460f76 - -commit ba8fb735cb3151ce48e388878da0565119222e95 - Author: Hiroshi SHIBATA - Date: 2019-09-15 14:13:00 +0900 - - [rubygems/rubygems] Added rvm workflow for Ruby 2.2 and 2.7 - - https://github.com/rubygems/rubygems/commit/d4ba75dfd2 - -commit 01c90f17d974c002c054ff2d82ec3982b665b01a - Author: Hiroshi SHIBATA - Date: 2019-09-15 11:37:30 +0900 - - [rubygems/rubygems] Removed the needless configurations - - https://github.com/rubygems/rubygems/commit/7134c49179 - -commit f5248f6f504701960a2bbb7a51117060f7d66613 - Author: Hiroshi SHIBATA - Date: 2019-08-09 16:20:50 +0900 - - [rubygems/rubygems] Added the initial workflow file. - - https://github.com/rubygems/rubygems/commit/6405a1e51a - -commit 5c872b297c11394cc436885400c295f7dccff039 - Author: bronzdoc - Date: 2019-06-22 10:37:09 +0900 - - [rubygems/rubygems] Avoid adding OpenSSL::PKey::RSA instances - - https://github.com/rubygems/rubygems/commit/ba021fb4be - -commit d1c97ceb86bb39d411d88563e17daebe0a764d00 - Author: bronzdoc - Date: 2019-06-22 10:30:37 +0900 - - [rubygems/rubygems] Update expectation in test_to_ruby_with_rsa_key - - https://github.com/rubygems/rubygems/commit/2e65f7d4ae - -commit 2e9c078707b8c87511c9fe45b7057086e214f6fb - Author: bronzdoc - Date: 2019-05-30 11:23:59 +0900 - - [rubygems/rubygems] Fix indentation in case statement - - https://github.com/rubygems/rubygems/commit/8ac0647659 - -commit 8f2379b0c5e182eb6e417431cbdcf2a0edfba71a - Author: bronzdoc - Date: 2019-05-30 11:22:52 +0900 - - [rubygems/rubygems] Make ruby_code method handle OpenSSL::PKey::RSA objects - - https://github.com/rubygems/rubygems/commit/b1d825ab3a - -commit 508afe2c26737e0be60a72faa9d6740a06b0914c - Author: Ellen Marie Dash - Date: 2019-08-17 13:45:09 +0900 - - [rubygems/rubygems] Set SOURCE_DATE_EPOCH env var if not provided. - - Fixes #2290. - - 1. `Gem::Specification.date` returns SOURCE_DATE_EPOCH when defined, - 2. this commit makes RubyGems set it _persistently_ when not provided. - - This combination means that you can build a gem, check the build time, - and use that value to generate a new build -- and then verify they're - the same. - - https://github.com/rubygems/rubygems/commit/d830d53f59 - -commit 8436b2717c458a554dd81456a8e6e030e2c3e038 - Author: Daniel Berger - Date: 2019-07-11 22:20:43 +0900 - - [rubygems/rubygems] Add a gem attr to the Gem::Package class. - - https://github.com/rubygems/rubygems/commit/5b81f364ae - -commit 6ffc045a817fbdf04a6945d3c260b55b0fa1fd1e - Author: Benoit Daloze - Date: 2019-09-08 18:53:27 +0900 - - [EXPERIMENTAL] Make Symbol#to_s return a frozen String - - * Always the same frozen String for a given Symbol. - * Avoids extra allocations whenever calling Symbol#to_s. - * See [Feature #16150] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2437 - -commit 4a4c5028258e53f3395af29655a66bcef796fd73 - Author: Takashi Kokubun - Date: 2019-09-26 12:57:43 +0900 - - Add special runner to benchmark mjit_exec - - I wanted to dynamically generate benchmark cases to test various number - of methods. Thus I added a dedicated runner of benchmark-driver. - -commit 5d8f112505fbc3f9b008ce4ec40fc74f9f623c4a - Author: Takashi Kokubun - Date: 2019-09-26 12:53:41 +0900 - - RubyVM::MJIT.pause(wait: true) should wait - - for all compilations and compaction. - - Prior to this commit, the last-compiled code has not been used because - MJIT worker is stopped before setting the code, and compaction has also - been skipped. - - But it was not intentional and `wait: true` pause should wait until - those two things by its feature. - -commit 47a234954a119c6957e947f5769c55d0b40c6004 - Author: Alan Wu - Date: 2019-09-23 05:09:32 +0900 - - Rename STR_IS_SHARED_M to STR_BORROWED - - Since the introduction of STR_SHARED_ROOT, the word "shared" - has become very overloaded with respect to String's internal - states. Use a different name for STR_IS_SHARED_M and explain - its purpose. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2480 - -commit 93faa011d393bb4b5cf31a0cbb46922f0a5e7cdc - Author: Alan Wu - Date: 2019-09-23 04:36:00 +0900 - - Tag string shared roots to fix use-after-free - - The buffer deduplication codepath in rb_fstring can be used to free the buffer - of shared string roots, which leads to use-after-free. - - Introudce a new flag to tag strings that at one point have been a shared root. - Check for it in rb_fstring to avoid freeing buffers that are shared by - multiple strings. This change is based on nobu's idea in [ruby-core:94838]. - - The included test case test for the sequence of calls to internal functions - that lead to this bug. See attached ticket for Ruby level repros. - - [Bug #16151] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2480 - -commit 3cee99808d629c0ec493955ce8ea019d1f8a637b - Author: Nobuyoshi Nakada - Date: 2019-05-21 10:29:34 +0900 - - [EXPERIMENTAL] Expression with modifier `in` - - [Feature #15865] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2485 - -commit 1fe73dc8609c4bac9e517dc70f602a16dae556cc - Author: Yusuke Endoh - Date: 2019-09-26 11:35:01 +0900 - - include/ruby/ruby.h: suppress a false-positive warning of GCC - - GCC emits a lot of false positives for rb_scan_args because: - - * `rb_scan_args(argc, argv, "*:", NULL, &opts);` makes `n_mand == 0`, - * `n_mand == argc + 1` implies `argc == -1`, and - * `memcpy(ptr, argv, sizeof(VALUE)*argc);` explodes - - However, we know that argc is never so big, thus this is a false - positive. This change suppresses it by adding a condition `n_mand > 0`. - - ``` - In file included from /usr/include/string.h:494, - from ./include/ruby/defines.h:145, - from ./include/ruby/ruby.h:29, - from ./include/ruby/encoding.h:27, - from dir.c:14: - In function 'memcpy', - inlined from 'ruby_nonempty_memcpy.part.0' at ./include/ruby/ruby.h:1763:17, - inlined from 'ruby_nonempty_memcpy' at ./include/ruby/ruby.h:1760:1, - inlined from 'rb_scan_args_set' at ./include/ruby/ruby.h:2594:9, - inlined from 'dir_s_aref' at dir.c:2774:12: - /usr/include/x86_64-linux-gnu/bits/string_fortified.h:34:10: warning: '__builtin___memcpy_chk' pointer overflow between offset 0 and size [-8, 9223372036854775807] [-Warray-bounds] - return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest)); - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - /usr/include/x86_64-linux-gnu/bits/string_fortified.h:34:10: warning: - '__builtin___memcpy_chk' specified size 18446744073709551608 exceeds maximum object size 9223372036854775807 [-Wstringop-overflow=] - ``` - -commit 5357ceb1ca454e2b3c5c173c638054cf705e4752 - Author: Nobuyoshi Nakada - Date: 2019-09-26 09:54:24 +0900 - - [ruby/io-console] Defer creating VT query string - - https://github.com/ruby/io-console/commit/3d69c577a4 - -commit 9b106987050b06e3495e6ec5d3da152557fad8a0 - Author: Nobuyoshi Nakada - Date: 2019-09-26 09:53:16 +0900 - - [ruby/io-console] Added IO#console_mode - - https://github.com/ruby/io-console/commit/77ed8d5a06 - -commit 3b302ea8c95d34d5ef072d7e3b326f28a611e479 - Author: Jeremy Evans - Date: 2019-09-22 01:03:36 +0900 - - Add Module#ruby2_keywords for passing keywords through regular argument splats - - This approach uses a flag bit on the final hash object in the regular splat, - as opposed to a previous approach that used a VM frame flag. The hash flag - approach is less invasive, and handles some cases that the VM frame flag - approach does not, such as saving the argument splat array and splatting it - later: - - ruby2_keywords def foo(*args) - @args = args - bar - end - def bar - baz(*@args) - end - def baz(*args, **kw) - [args, kw] - end - foo(a:1) #=> [[], {a: 1}] - foo({a: 1}, **{}) #=> [[{a: 1}], {}] - - foo({a: 1}) #=> 2.7: [[], {a: 1}] # and warning - foo({a: 1}) #=> 3.0: [[{a: 1}], {}] - - It doesn't handle some cases that the VM frame flag handles, such as when - the final hash object is replaced using Hash#merge, but those cases are - probably less common and are unlikely to properly support keyword - argument separation. - - Use ruby2_keywords to handle argument delegation in the delegate library. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2477 - -commit 80b5a0ff2a7709367178f29d4ebe1c54122b1c27 - Author: Jeremy Evans - Date: 2019-09-26 03:18:49 +0900 - - Make rb_scan_args handle keywords more similar to Ruby methods (#2460) - - Cfuncs that use rb_scan_args with the : entry suffer similar keyword - argument separation issues that Ruby methods suffer if the cfuncs - accept optional or variable arguments. - - This makes the following changes to : handling. - - * Treats as **kw, prompting keyword argument separation warnings - if called with a positional hash. - - * Do not look for an option hash if empty keywords are provided. - For backwards compatibility, treat an empty keyword splat as a empty - mandatory positional hash argument, but emit a a warning, as this - behavior will be removed in Ruby 3. The argument number check - needs to be moved lower so it can correctly handle an empty - positional argument being added. - - * If the last argument is nil and it is necessary to treat it as an option - hash in order to make sure all arguments are processed, continue to - treat the last argument as the option hash. Emit a warning in this case, - as this behavior will be removed in Ruby 3. - - * If splitting the keyword hash into two hashes, issue a warning, as we - will not be splitting hashes in Ruby 3. - - * If the keyword argument is required to fill a mandatory positional - argument, continue to do so, but emit a warning as this behavior will - be going away in Ruby 3. - - * If keyword arguments are provided and the last argument is not a hash, - that indicates something wrong. This can happen if a cfunc is calling - rb_scan_args multiple times, and providing arguments that were not - passed to it from Ruby. Callers need to switch to the new - rb_scan_args_kw function, which allows passing of whether keywords - were provided. - - This commit fixes all warnings caused by the changes above. - - It switches some function calls to *_kw versions with appropriate - kw_splat flags. If delegating arguments, RB_PASS_CALLED_KEYWORDS - is used. If creating new arguments, RB_PASS_KEYWORDS is used if - the last argument is a hash to be treated as keywords. - - In open_key_args in io.c, use rb_scan_args_kw. - In this case, the arguments provided come from another C - function, not Ruby. The last argument may or may not be a hash, - so we can't set keyword argument mode. However, if it is a - hash, we don't want to warn when treating it as keywords. - - In Ruby files, make sure to appropriately use keyword splats - or literal keywords when calling Cfuncs that now issue keyword - argument separation warnings through rb_scan_args. Also, make - sure not to pass nil in place of an option hash. - - Work around Kernel#warn warnings due to problems in the Rubygems - override of the method. There is an open pull request to fix - these issues in Rubygems, but part of the Rubygems tests for - their override fail on ruby-head due to rb_scan_args not - recognizing empty keyword splats, which this commit fixes. - - Implementation wise, adding rb_scan_args_kw is kind of a pain, - because rb_scan_args takes a variable number of arguments. - In order to not duplicate all the code, the function internals need - to be split into two functions taking a va_list, and to avoid passing - in a ton of arguments, a single struct argument is used to handle - the variables previously local to the function. - - Notes: - Merged-By: jeremyevans - -commit 4755e23d2e43a0a16ae70be83097dcae050bc0c8 - Author: git - Date: 2019-09-26 00:27:40 +0900 - - * 2019-09-26 [ci skip] - -commit ae83dbe28d35f43ec60d913fbae5d3a95ae2af05 - Author: Nobuyoshi Nakada - Date: 2019-09-24 09:03:38 +0900 - - Get rid of `IO.select` to fix multiline paste - -commit 5b1fd79ad90899adc71a1f34a722b26ba22a9c8a - Author: Nobuyoshi Nakada - Date: 2019-09-25 20:51:20 +0900 - - [DOC] fixed the return value of IO#ready? [ci skip] - - IO#ready? returns true or false only, since r50262(1baa57b0033). - -commit 6d578164f5da815fb71d23ad186e841359384f25 - Author: Koichi Sasada - Date: 2019-09-25 17:12:55 +0900 - - check `ARY_SHARED_ROOT_P()`. - - ARY_SHARED_ROOT_P(ary) is true, ARY_HEAP_CAPA(ary) should not - be called. - -commit 3deeb3fd914bc5604e84e7a41ec2b5193a560479 - Author: Koichi Sasada - Date: 2019-09-25 16:55:54 +0900 - - introduce `obj_ary_extracapa`. - - Introduce a new debug counter `obj_ary_extracapa` which counts - arrays which are `len < capa`. - -commit 112c9f1430ce495e76aef73221578adc9b240a3b - Author: Nobuyoshi Nakada - Date: 2019-09-25 16:58:24 +0900 - - lldb_inspect: removed unnecessary newline and `end` option - -commit 33c5ad3154099769cec7f77b6d95cbf4b8d52bb0 - Author: Nobuyoshi Nakada - Date: 2019-09-25 13:51:49 +0900 - - Removed idNUMPARAM_0 - -commit 55e1e22b2d44a8a1eca0f6ed2b11dc0f564f7192 - Author: Nobuyoshi Nakada - Date: 2019-09-25 13:01:03 +0900 - - Changed numbered parameters semantics - - * `_1` (and no other numbered parameters) to work as `|x|`. - * giving up `_0`. - - [ruby-core:95074] [Bug #16178] - -commit e663299a5f7a980aae39f3e87cec064ae19a870c - Author: Nobuyoshi Nakada - Date: 2019-09-25 10:14:36 +0900 - - Simplified duplicate code - -commit c99fb0f41e7bb88a4d5891e86bd54def2fca1de4 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-25 09:48:34 +0900 - - Revert "[ruby/io-console] Skip cursor position test on Solaris" - - This reverts commit 5294ded681992ced2ecbd31c814b63265d2f591e. - -commit ca58e834007199929e41fca97f3c103dfbab4bb1 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-25 09:48:02 +0900 - - Do not use of non-standard escape character '\e' - -commit c60451d9cd8ff69095acf826b11ea01557cc9b8b - Author: Nobuyoshi Nakada - Date: 2019-09-25 09:42:35 +0900 - - [ruby/io-console] Unique paths to be added - - https://github.com/ruby/io-console/commit/a3ad851b6c - -commit fc9eb5b9c1b0a6f61735ace45ab39c281a55e8a3 - Author: Nobuyoshi Nakada - Date: 2019-09-25 09:33:10 +0900 - - [ruby/io-console] Load the current libraries - - https://github.com/ruby/io-console/commit/ab7653c543 - -commit 8e8dd88c80e43c0d10857a3394df7cf0fb6e2cb2 - Author: git - Date: 2019-09-25 08:24:44 +0900 - - * 2019-09-25 [ci skip] - -commit 5294ded681992ced2ecbd31c814b63265d2f591e - Author: Nobuyoshi Nakada - Date: 2019-09-25 08:23:18 +0900 - - [ruby/io-console] Skip cursor position test on Solaris - - It results in a mysterious failure. - - https://github.com/ruby/io-console/commit/e3543c3da4 - -commit 0e84eecc1764ec6e2a28654b3e66b8c006f73432 - Author: Nobuyoshi Nakada - Date: 2019-09-24 18:25:32 +0900 - - Make numbered parameters exclusive in a scope - - Notes: - Merged: https://github.com/ruby/ruby/pull/2431 - -commit ea68bb914a3c806a1c5188993b96791a76ab0849 - Author: Nobuyoshi Nakada - Date: 2019-09-04 00:07:50 +0900 - - Changed numbered parameter prefix - - Notes: - Merged: https://github.com/ruby/ruby/pull/2431 - -commit e73cc3eead75b27eabf93a7163bed511f2bb3b17 - Author: Nobuyoshi Nakada - Date: 2019-08-24 02:21:30 +0900 - - Added implicit block parameter - - Notes: - Merged: https://github.com/ruby/ruby/pull/2431 - -commit a1dcb9daa56874ff11e717ad141d36f26e0b9c13 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-24 21:52:23 +0900 - - Rename from ruby-x.y.z.ext.draft to ruby-x.y.z-draft.ext [ci skip] - -commit c5a97d995ae06e0ae420d7529085ae94695c7593 - Author: Nobuyoshi Nakada - Date: 2019-09-24 21:05:29 +0900 - - misc/lldb_cruby.py: update for python3 [ci skip] - - lldb module bundled with Xcode is for Python 3 now. - -commit 052636603377a793dcbd7169d7483a72833d6721 - Author: Nobuyoshi Nakada - Date: 2019-09-24 20:59:47 +0900 - - misc/lldb_cruby.py: removed unused module `commands` [ci skip] - -commit 10e3267c31c4c976d79e00bca484094f1a87dc65 - Author: Nobuyoshi Nakada - Date: 2019-09-24 15:53:58 +0900 - - [ruby/io-console] Made cursor position 0-origin - - https://github.com/ruby/io-console/commit/9377e37295 - -commit 244f7ec204e2b3fd54ca68740587b5be6d9defc4 - Author: Nobuyoshi Nakada - Date: 2019-09-24 15:48:58 +0900 - - [ruby/io-console] Made cursor position consistent with `winsize` - - To be consistent with `winsize`, changed the cursor position - format from `[x, y]` to `[row, column]`. - - https://github.com/ruby/io-console/commit/d1f5ae9286 - -commit 2366c681166a1dab95de6b9ca8ffcaae18aadd39 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-24 11:47:04 +0900 - - suppress meddlesome clang10 warrning - - It says: - - vm.c:2519:34: warning: expression does not compute the number of elements in this array; element type is 'const struct __jmp_buf_tag', not 'VALUE' (aka 'unsigned long') [-Wsizeof-array-div] - sizeof(ec->machine.regs) / sizeof(VALUE)); - ~~~~~~~~~~~~~~~~ ^ - vm.c:2519:34: note: place parentheses around the 'sizeof(VALUE)' expression to silence this warning - -commit 14ba62d4881061a1d54b6204b0c4f0b4811ac921 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-24 11:44:41 +0900 - - refactor delete unused variable - - cadfaacb2533d47d52dbb5dbefe724d7bf11112e missed it. - -commit e561e4a8f390b3e46e45787931f75ee5c237a0c2 - Author: git - Date: 2019-09-24 01:28:48 +0900 - - * 2019-09-24 [ci skip] - -commit 74e33662fe987e5418fc277c8a7ba1f9805f8673 - Author: Jeremy Evans - Date: 2019-09-24 00:44:38 +0900 - - Make public_send and rb_f_send handle keyword argument separation - - Kernel#send takes a different optimized code path that was already - handled. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2481 - -commit 9e4be78ea88f882e1562dbb3eeb24304d0049b8d - Author: Nobuyoshi Nakada - Date: 2019-09-23 19:27:18 +0900 - - [ruby/io-console] Try fallback to stdout when stdin - - https://github.com/ruby/io-console/commit/b8017509ef - -commit 8487193b109ab8cecea74ff383b01b5ecce172c4 - Author: Nobuyoshi Nakada - Date: 2019-09-23 19:22:31 +0900 - - [ruby/io-console] Try to write DSR query to writable IO - - https://github.com/ruby/io-console/commit/a54b6e4dd1 - -commit b443bdbdb997a6b5c0d6f06cada146f523361980 - Author: aycabta - Date: 2019-09-23 17:31:41 +0900 - - Use short wait for select(2) - - It is one of the reasons why paste to IRB is slow. - -commit 934507472c92ccada3f30be183fea5066427efda - Author: aycabta - Date: 2019-09-23 17:26:38 +0900 - - Retrieve key-buffer that was supposed to lose - -commit 142efba93e91209a7f336863974d4c84a969e2a3 - Author: Nobuyoshi Nakada - Date: 2019-09-23 02:20:43 +0900 - - Adjusted directives order of a function [ci skip] - -commit cadfaacb2533d47d52dbb5dbefe724d7bf11112e - Author: Lourens Naudé - Date: 2019-07-20 10:42:10 +0900 - - Lazy init thread local storage - - Notes: - Merged: https://github.com/ruby/ruby/pull/2295 - -commit 642dbb962cafc39e9e44eef212435e50a01190ec - Author: Nobuyoshi Nakada - Date: 2019-09-23 01:25:17 +0900 - - make-snapshot: store timestamps in UTC for zip which lacks timezone - -commit 2afe86e4bedeffd65c8e5cbbf08b0cce76669d40 - Author: git - Date: 2019-09-23 01:04:25 +0900 - - * 2019-09-23 [ci skip] - -commit d8221a54f2c5729573ddb03cb51d638ae74cc876 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-23 00:55:48 +0900 - - Add `-mtc=off` to `7z` not to store NTFS timestamps - - https://sevenzip.osdn.jp/chm/cmdline/switches/method.htm - -commit b0d24e262f2ca3ba4f8d3f60248d30209b0a39a2 - Author: Nobuyoshi Nakada - Date: 2019-09-22 22:26:07 +0900 - - make-snapshot: Added -no7z option - - It disables 7z, which seems not to have an option to stop saving - extra file attributes (uid/gid and atime), in order to make zip - packages stable. - -commit 7fe7dec7e5f7cefae986fe6475805198ec4dbada - Author: Nobuyoshi Nakada - Date: 2019-09-22 21:56:58 +0900 - - make-snapshot: Do not save extra file attributes - - Extra file attributes (uid/gid and atime) make the packaged zip - file unstable. - -commit 5f35b8ca30cba69968d4d0c885a4bf5c48b03e17 - Author: Yusuke Endoh - Date: 2019-09-22 22:12:18 +0900 - - st.c: Use rb_st_* prefix instead of st_* (#2479) - - The original st.c was public domain hash table implementation, but - Ruby's st.c is highly modified, and its data structure is not - compatiblie with the original one. - - Therefore, when creating an extension library to wrap C code that uses - the original st.c, the symbols conflict, which leads to segfault. - - This changes the prefix `st_*` of st.c functions to `rb_st_*` for - reflecting that they are specific to Ruby's, and avoid symbol conflicts. - - Notes: - Merged-By: mame - -commit 2272efa4632a845ead37377a22ad9e24b45ebf27 - Author: Yusuke Endoh - Date: 2019-09-22 16:35:50 +0900 - - st.c (st_add_direct_with_hash): make it "static inline" - - It was originally static inline, but seemed to be accidentally published - at 8f675cdd00e2c5b5a0f143f5e508dbbafdb20ccd. - -commit 28eefb33c8d27e5711319873d065e5414d7ffe25 - Author: Yusuke Endoh - Date: 2019-09-22 16:21:26 +0900 - - variable.c: Rename rb_st_copy to rb_iv_tbl_copy - - This function was created as a variant of st_copy with firing write - barrier. - It should have more explicit name, such as st_copy_with_write_barrier. - But because it is used only for copying iv_tbl, so I rename it to - rb_iv_tbl_copy now. If we face other use case than iv_tbl, we may want - to rename it to more general name. - -commit b4c328bebcf45b7a983f7e5ce29ba6ec57ed1a1a - Author: Yusuke Endoh - Date: 2019-09-22 11:55:00 +0900 - - test/bigdecimal/test_bigdecimal.rb: Use BigDecimal() - - instead of deprecated BigDecimal.new. - -commit a0ce0b6297852f64f6a05593e1364619da7a831d - Author: Kazuhiro NISHIYAMA - Date: 2019-09-22 10:11:06 +0900 - - Add `if: always()` because 2.4.x's `make check` failed on snapshot [ci skip] - - `check-snapshot-ruby_2_4` uses `make test` instead of `make check`. - https://github.com/ruby/actions/blob/95692e54f4263501db1508d51c1fb67c03b4f575/.github/workflows/snapshot.yml#L448-L449 - - `draft-release` use `make check` to make it simple, and - actions is required regardless of success or failure. - - On the other hand, snapshot success can be ignored, - so normally it should not fail. - -commit c020fd6aa8a356b1ae9d3db5b99c7e29a1fddae0 - Author: git - Date: 2019-09-22 08:10:56 +0900 - - * 2019-09-22 [ci skip] - -commit 2e551356a7a6e74ba07283e000ff16f5d1ea6506 - Author: Jeremy Evans - Date: 2019-08-08 01:01:33 +0900 - - Make Kernel#{Pathname,BigDecimal,Complex} return argument if given correct type - - This is how Kernel#{Array,String,Float,Integer,Hash,Rational} work. - BigDecimal and Complex instances are always frozen, so this should - not cause backwards compatibility issues for those. Pathname - instances are not frozen, so potentially this could cause backwards - compatibility issues by not returning a new object. - - Based on a patch from Joshua Ballanco, some minor changes by me. - - Fixes [Bug #7522] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2473 - -commit 7470f965650bf17875632f0c5f9e5a4d9de9fc3f - Author: Jeremy Evans - Date: 2019-08-10 08:44:43 +0900 - - Fix Module#class_variables for singleton classes of classes/modules - - Module#class_variables should reflect class variable lookup. For - singleton classes of classes/modules, this means the lookup should - be: - - * Singleton Class - * Class - * All Ancestors of Class - - Note that this doesn't include modules included in the singleton - class, because class variable lookup doesn't include those. - - Singleton classes of other objects do not have this behavior and - always just search all ancestors of the singleton class, so do not - change the behavior for them. - - Fixes [Bug #8297] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2478 - -commit 5cb283217b713605c6bddc527f96bbc773fd1fb9 - Author: Yusuke Endoh - Date: 2019-09-21 19:23:47 +0900 - - test/ruby/test_assignment.rb: use bug number for assert message - - to suppress variable unused warning - -commit b4149993709169b9a67373095593da385e7d48e5 - Author: Takashi Kokubun - Date: 2019-09-21 16:09:45 +0900 - - Add a benchmark for JIT-ed code dispatch - -commit e006b992c29decb01865b0749e35a4cfc872bdaf - Author: Fangrui Song - Date: 2019-09-19 16:04:29 +0900 - - typedef rb_jmpbuf_t to void *[5] if __builtin_setjmp is used - - The built-in version operates on a buffer of 5 words, much smaller than - the size of jmp_buf defined in libc. - Note, powerpc requires 5 words, while arm and x86_64 just require 3. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2471 - -commit 27144de2bd95c5886c3d4400c3b8aea932b856f1 - Author: Jeremy Evans - Date: 2019-09-21 04:18:07 +0900 - - Fix documentation for ENV.each to return ENV - - Also have spec check that it returns ENV. - - Mostly from burdettelamar@yahoo.com (Burdette Lamar). - - Fixes [Bug #16164] - -commit 7aeacb213bdf40bab4393448023930eac35d127a - Author: Nobuyoshi Nakada - Date: 2019-09-21 01:57:15 +0900 - - Revert eval.c in e81a3e6df54842b5a836dad7055a4295cf4155bc - - Inadvertently merged change to suppress warnings by gcc 9.2. - Pointed out by Alan Wu. - -commit 990e714fd3f4e9b28e007ff1bd2bcf4217269776 - Author: git - Date: 2019-09-21 00:48:46 +0900 - - * 2019-09-21 [ci skip] - -commit daa4ad8ed7f73e8d5e2a2047fe92e5fe08227627 - Author: Nobuyoshi Nakada - Date: 2019-09-21 00:48:24 +0900 - - Disable method definition type checks on Windows - -commit fe1e623faea75952f27baa949a7468021443c12a - Author: Nobuyoshi Nakada - Date: 2019-09-20 23:25:18 +0900 - - Fixed format specifiers - - Use PRIdPTRDIFF for the platforms where a pointer is larger than a long. - -commit e47b111627d5c68b8900f57364fecd51cbcd0268 - Author: Jeremy Evans - Date: 2019-09-19 07:30:59 +0900 - - Call rb_vm_call_kw instead of rb_vm_call0 in a few cases - - rb_vm_call_kw handles the tmp buffer for you. - - Also, change method_missing so it also calls rb_vm_call_kw to - handle the kw_splat flag, instead of requiring callers to handle - kw_splat flag before calling method_missing. This may fix other - cases where method_missing is currently called without the kw_splat - being handled. - -commit c9f2b790adcff8df48e3192d18ee8afa02f5530c - Author: Jeremy Evans - Date: 2019-09-19 04:59:01 +0900 - - Handle keyword argument separation for Enumerator#size - - When Object#to_enum is passed a block, the block is called to get - a size with the arguments given to to_enum. This calls the block - with the same keyword flag as to_enum is called with. - - This requires adding rb_check_funcall_kw and - rb_check_funcall_default_kw to handle keyword flags. - -commit 27b67468724dc48ed8305d8cb33484a4af98fc05 - Author: Jeremy Evans - Date: 2019-09-19 04:08:14 +0900 - - Make passing empty keywords to dig pass empty keywords to next dig method - - If defined in Ruby, dig would be defined as def dig(arg, *rest) end, - it would not use keywords. If the last dig argument was an empty - hash, it could be treated as keyword arguments by the next dig - method. Allow dig to pass along the empty keyword flag if called - with an empty keyword, to suppress the previous behavior and force - treating the hash as a positional argument and not keywords. - - Also handle the case where dig calls method_missing, passing the - empty keyword flag to that as well. - - This requires adding rb_check_funcall_with_hook_kw functions, so - that dig can specify how arguments are treated. It also adds - kw_splat arguments to a couple static functions. - -commit e81a3e6df54842b5a836dad7055a4295cf4155bc - Author: Nobuyoshi Nakada - Date: 2019-09-20 22:03:37 +0900 - - Allows calling a private method only with bare `self` - -commit 9e171b1fa0b4e2e5b0bf82da11b4b511c602c336 - Author: Takashi Kokubun - Date: 2019-09-20 21:50:00 +0900 - - Fix wrong allocation failure handling - - `iseq->body->jit_unit->compile_info` should not be referenced before - the null check of `iseq->body->jit_unit`. - -commit 6e0dd3e7c1786e33c3193d0b4dd9579655c4e842 - Author: Takashi Kokubun - Date: 2019-09-20 21:06:07 +0900 - - Use RUBY_VM_NEXT_CONTROL_FRAME macro - - in vm_push_frame and limit scope of i. - Just a minor maintainability improvement. - -commit 740a98fe108305324a66edb16f0acb8521a53da7 - Author: Nobuyoshi Nakada - Date: 2019-09-20 19:03:43 +0900 - - Fix for explicit cast without RUBY_METHOD_FUNC - -commit cb1f9fe9184c67f9a99f6a9702559293613b7e80 - Author: Nobuyoshi Nakada - Date: 2019-09-20 16:48:42 +0900 - - Check various method definitions in C++ - -commit 4ffcadd39cb7061ff501478ed436a56e7f99f3dc - Author: Takashi Kokubun - Date: 2019-09-20 17:44:16 +0900 - - Fix rb_define_singleton_method warning - - for debug counters - - ``` - ../include/ruby/intern.h:1175:137: warning: passing argument 3 of 'rb_define_singleton_method0' from incompatible pointer type [-Wincompatible-pointer-types] - #define rb_define_singleton_method(klass, mid, func, arity) rb_define_singleton_method_choose_prototypem3((arity),(func))((klass),(mid),(func),(arity)); - ^ - ../vm.c:2958:5: note: in expansion of macro 'rb_define_singleton_method' - rb_define_singleton_method(rb_cRubyVM, "show_debug_counters", rb_debug_counter_show, 0); - ^~~~~~~~~~~~~~~~~~~~~~~~~~ - ../include/ruby/intern.h:1139:99: note: expected 'VALUE (*)(VALUE) {aka long unsigned int (*)(long unsigned int)}' but argument is of type 'VALUE (*)(void) {aka long unsigned int (*)(void)}' - __attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method0 (VALUE,const char*,VALUE(*)(VALUE),int); - ``` - -commit 04c53a1d03130b5cd4a1eea35cab92003a4d0909 - Author: Nobuyoshi Nakada - Date: 2019-09-20 17:05:52 +0900 - - Get rid of embedding make command line - - NMAKE sets MAKE to the full path name, which includes spaces by - the default installation. - -commit d56a3c063532906158cc0427a42133fadda75cde - Author: Nobuyoshi Nakada - Date: 2019-09-20 16:55:16 +0900 - - Fixed cxxanyargs/depend - - * Removed excess backslashes - * Fixed the target name to try failure.cpp - -commit 26831719948f4ab6fdffdfcd8083be23aa300436 - Author: Nobuyoshi Nakada - Date: 2019-09-20 15:50:42 +0900 - - [DOC] DOT is not a part of a receiver [ci skip] - - [Feature #11297] [Feature #16123] - -commit 1de242de0fdec873eb5138ebdf09eaf0f6297967 - Author: Hiroshi SHIBATA - Date: 2019-09-20 14:22:32 +0900 - - Fixed up 37c083942509dd7e0d8b7ccd3575936a2017c400 - -commit 9d25c652a98f0a5bc552f81846c6dc975dc2f307 - Author: Hiroshi SHIBATA - Date: 2019-09-20 14:21:04 +0900 - - Removed ThreadsWait from the ruby repository - -commit 37c083942509dd7e0d8b7ccd3575936a2017c400 - Author: Hiroshi SHIBATA - Date: 2019-09-20 14:06:22 +0900 - - Removed Synchronizer from the ruby repository. - -commit 3b56a0934fa503b518e8302ed32f9124740d896b - Author: Hiroshi SHIBATA - Date: 2019-09-20 12:56:18 +0900 - - Removed Shell from the ruby repository. - -commit 67a6662032d0a7c4af07f44c2046cd0ed2d7d253 - Author: Hiroshi SHIBATA - Date: 2019-09-20 12:42:53 +0900 - - Removed Scanf from the ruby repository. - -commit a3b85016149f4f73f08c739626b2f02badd5ad17 - Author: Hiroshi SHIBATA - Date: 2019-09-20 12:12:37 +0900 - - Removed CMath from the ruby repository. - -commit 422ae594d97e803e829e65716e85483f5942e0c3 - Author: Nobuyoshi Nakada - Date: 2019-09-20 10:29:24 +0900 - - Fixed memory leak - - * array.c (flatten): fix a memory leak in the case of an exception - at conversion of an element to Array. - -commit 45bac6284595834b68a34f4f4efe5880436fce11 - Author: Nobuyoshi Nakada - Date: 2019-09-20 09:31:55 +0900 - - Added the target to run a benchmark - -commit d3c6fe65e3ce017e62deaca7344fa90adfb314a9 - Author: Nobuyoshi Nakada - Date: 2019-09-20 09:25:30 +0900 - - Fixed a variable in checkout-github-% - -commit b80df6e8e0a59207545822d92c0a4f78cd64ef5e - Author: Nobuyoshi Nakada - Date: 2019-09-20 02:32:50 +0900 - - Update NEWS and documents [ci skip] - - [Feature #11297] [Feature #16123] - -commit e6378cdcd8246697be652b74442f9c07503e0ba6 - Author: Nobuyoshi Nakada - Date: 2019-09-20 02:17:58 +0900 - - Allow calling a private accessor with `self.` - - [Feature #11297] [Feature #16123] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2474 - -commit d583df525922ca14ecfab7a39f0c617eb86bc804 - Author: Nobuyoshi Nakada - Date: 2019-09-20 02:16:17 +0900 - - Added version guard - - [Feature #11297] [Feature #16123] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2474 - -commit 7fbd2f7cc247ee66e877ab3c88f0274834c6b6c7 - Author: Dylan Thacker-Smith - Date: 2019-07-02 23:06:54 +0900 - - Allow calling a private method with `self.` - - This makes it consistent with calling private attribute assignment - methods, which currently is allowed (e.g. `self.value =`). - - Calling a private method in this way can be useful when trying to - assign the return value to a local variable with the same name. - - [Feature #11297] [Feature #16123] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2474 - -commit 17a13663998a98ff75fcc838d1cea95c879fbb88 - Author: Nobuyoshi Nakada - Date: 2019-09-18 22:52:41 +0900 - - Overload variable definition functions - - Define overloading functions of rb_define_virtual_variable and - rb_define_hooked_variable, for combinations with and without - ANYARGS casts. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2461 - -commit 9c0d5e51cb3726455560c34ad595ab82f651da48 - Author: Nobuyoshi Nakada - Date: 2019-09-15 23:28:26 +0900 - - Check method functions in C++ - - By using template and overloading, instead of transparent union. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2461 - -commit 5e3771aad4228ac18cec7be4ccb93866c81744fa - Author: git - Date: 2019-09-20 00:20:35 +0900 - - * 2019-09-20 [ci skip] - -commit e13b09c450eb4ffc0ffc86d479e5b0c75599ad9c - Author: Nobuyoshi Nakada - Date: 2019-09-19 23:45:09 +0900 - - Use EXPECT_NODE_NONULL - -commit 82f25404ffe2ad910ac61e436f02cad312755b2f - Author: Nobuyoshi Nakada - Date: 2019-09-19 23:44:37 +0900 - - Check COMPILE_RECV result - -commit e0c56b45a41f052223e23d222ca49c7e0225923e - Author: Nobuyoshi Nakada - Date: 2019-09-19 22:09:43 +0900 - - Moved unmatch arity check to depend file - - To substitute suffixes and VPATH for nmake. - -commit a3daf8e49a36dc5501b020a882d611676a6ad264 - Author: Nobuyoshi Nakada - Date: 2019-09-19 20:07:24 +0900 - - Ensure that unmatched arity fails in C++ - -commit b3ddeac33e299f36084339aceaaa0a29cf8b7498 - Author: Nobuyoshi Nakada - Date: 2019-09-19 20:31:15 +0900 - - Revert "DEBUG: dump mkmf.log" - - This reverts commit 69e209a3450bd6b281dcad1d96a34e9cab184845. - - The debug has finishted. - -commit cbf405fec4ea3c93640b0b7072cf6205442100e5 - Author: NARUSE, Yui - Date: 2019-09-19 20:45:24 +0900 - - Specify encoding explicitly for sprintf - -commit 5208c431bef3240eb251f5da23723b324431a98e - Author: NARUSE, Yui - Date: 2019-09-19 19:49:12 +0900 - - Separate Time#inspect from to_s and show subsec [Feature #15958] - -commit 2698f13a1f0cc07ef97b7f20502c420b51e9c57d - Author: Nobuyoshi Nakada - Date: 2019-09-19 19:40:44 +0900 - - Fixed reserved numbered parameter warning - -commit 6180f1fede487bf5dfdd00cbae2ee7f2b4613a7e - Author: Nobuyoshi Nakada - Date: 2019-09-19 19:06:18 +0900 - - Added link_command for C++ - -commit 6045ff64e3c310cd24f5e49e088610249d4cf24f - Author: Takashi Kokubun - Date: 2019-09-19 18:04:46 +0900 - - Use benchmark-driver v0.15.6 - - to fix another keyword argument warning which was added recently. - -commit 20baa08d652b844806fab424a2a590408ab613ef - Author: NagayamaRyoga <38316184+NagayamaRyoga@users.noreply.github.com> - Date: 2019-09-19 17:35:32 +0900 - - Improve the output of `RubyVM::InstructionSequence#to_binary` (#2450) - - The output of RubyVM::InstructionSequence#to_binary is extremely large. - We have reduced the output of #to_binary by more than 70%. - - The execution speed of RubyVM::InstructionSequence.load_from_binary is about 7% slower, but when reading a binary from a file, it may be faster than the master. - - Since Bootsnap gem uses #to_binary, this proposal reduces the compilation cache size of Rails projects to about 1/4. - - See details: [Feature #16163] - -commit f84efe4b9da8e16b0986b75ca24352639bc502ec - Author: Takashi Kokubun - Date: 2019-09-19 17:30:31 +0900 - - Avoid unneeded casts in INSN_ENTRY_SIG - -commit 7202bf9ed899677f43a01ecf9f671082268d2d88 - Author: Takashi Kokubun - Date: 2019-09-19 17:19:21 +0900 - - Drop PREFETCH macro unused since 6b534134a7 - -commit fcfe36b7332a29fd6835ba65984448477acc5bcc - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-19 10:37:30 +0900 - - fix spec failure - - See also https://travis-ci.org/ruby/ruby/jobs/586452224 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2468 - -commit d74fa8e55ce64904f2f99dfef4cbdff94e290672 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-18 17:18:48 +0900 - - reuse cc->call - - I noticed that in case of cache misshit, re-calculated cc->me can - be the same method entry than the pevious one. That is an okay - situation but can't we partially reuse the cache, because cc->call - should still be valid then? - - One thing that has to be special-cased is when the method entry - gets amended by some refinements. That happens behind-the-scene - of call cache mechanism. We have to check if cc->me->def points to - the previously saved one. - - Calculating ------------------------------------- - trunk ours - vm2_poly_same_method 1.534M 2.025M i/s - 6.000M times in 3.910203s 2.962752s - - Comparison: - vm2_poly_same_method - ours: 2025143.9 i/s - trunk: 1534447.2 i/s - 1.32x slower - - Notes: - Merged: https://github.com/ruby/ruby/pull/2468 - -commit 9fb9f2d318520ddfdbe73809eea85847550b42ae - Author: Kazuhiro NISHIYAMA - Date: 2019-09-19 12:39:52 +0900 - - Add draft-release.yml [ci skip] - - Make draft release packages. (Release packages are official after tests and release announce.) - - - Copy from ruby/actions - - Change trigger tags from `draft/v*` to `v*` (I use `draft/v*` on ruby/actions because I want to avoid to cause trouble with shell history on working directory of ruby/ruby.) - - Change secrets names because secrets are repository local and use different names between ruby/ruby and ruby/actions. - -commit e2aac6a611f4924e4bed2a38e063d65c731aa33a - Author: Nobuyoshi Nakada - Date: 2019-09-19 12:25:34 +0900 - - Separate @have_devel for C++ - -commit df3fd5071742397c7c5b908d0632f17aa79c2b51 - Author: Nobuyoshi Nakada - Date: 2019-09-19 12:23:55 +0900 - - Removed mkmf.log dump in Makefile - -commit 66c644da5e80258bb3217941223d923f923c3548 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-19 12:15:53 +0900 - - refactor reuse existing on-stack structs - - rb_vm_call0 allocates its own struct call_info etc. But they are - already there in case of rb_funcallv_with_cc. Let's just pass the - existing ones, instead of re-creation. - -commit 69e209a3450bd6b281dcad1d96a34e9cab184845 - Author: Nobuyoshi Nakada - Date: 2019-09-19 12:03:58 +0900 - - DEBUG: dump mkmf.log - -commit 2d1e3bd8f1448ef55d3e1bda8dc0855ae995d659 - Author: Nobuyoshi Nakada - Date: 2019-09-19 11:25:09 +0900 - - DEBUG: cxxanyargs - -commit a98181eb11ab3d0a643a5fb50e731c3fe50960d9 - Author: Nobuyoshi Nakada - Date: 2019-09-19 10:46:52 +0900 - - DEBUG: cxxanyargs - -commit 70fd022a2ae03d237ee9045db9834f253f3d843f - Author: Nobuyoshi Nakada - Date: 2019-09-19 09:47:11 +0900 - - DEBUG - -commit a9cdaaada4ade22f2f85fbc1f8bd41a8579528b0 - Author: Nobuyoshi Nakada - Date: 2019-09-19 08:46:49 +0900 - - DEBUG - -commit 5177dd8ba081dd25bf8ceb0f1c861ea8f83884c3 - Author: Jeremy Evans - Date: 2019-09-19 03:16:00 +0900 - - Add and fix some keyword tests - - Replace [arg=1, args] with [arg, args] so we can actually test - the value correctly. - - Add some missing tests for **h3 when method accepts (**args). - - Add tests for passing positional hashes to (**args) methods and - check for the expected warnings/errors. - -commit 2b708ab7238fc1f904f66d9a3999ca1c8ae165fe - Author: git - Date: 2019-09-19 00:11:31 +0900 - - * 2019-09-19 [ci skip] - -commit 842f600a93deca71e908ef5bb16e4e6aed519890 - Author: Nobuyoshi Nakada - Date: 2019-09-18 23:31:53 +0900 - - Look up the language module - - Look up language module with `MakeMakefile.[]`, instead of a - accessing constant under that module directly, to get rid of - expose the constant to the toplevel inadvertently. - -commit 15d5de59fb089eb47ca18dd4a7296fa2e7e73709 - Author: Nobuyoshi Nakada - Date: 2019-09-19 00:02:34 +0900 - - Removed unused keyword argument [ci skip] - -commit f9d0778fca8fd9ff0243062726ed4a6186da1cde - Author: Nobuyoshi Nakada - Date: 2019-09-18 22:51:56 +0900 - - Removed MakeMakefile::C - - It is exposed to the topleven namespace via included MakeMakefile. - -commit 9bd77d7cf3d817fab24b1a10550eae6abb2e341d - Author: Nobuyoshi Nakada - Date: 2019-09-18 19:25:58 +0900 - - Removed a debug print [ci skip] - -commit a491159a6e91976b026f8c968549acd1288d3af2 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-18 22:45:34 +0900 - - Add badges of GitHub Actions [ci skip] - -commit 38069a3a55325757d2bba84191b006361a284cb0 - Author: Takashi Kokubun - Date: 2019-09-18 18:54:07 +0900 - - Try using Ruby 1.9.3 on Travis xenial - - Isn't it there? http://rubies.travis-ci.org/ - - Notes: - Merged: https://github.com/ruby/ruby/pull/2469 - -commit c3f03da4944241f46233ce159068f35c5bd5f9b2 - Author: Nobuyoshi Nakada - Date: 2019-09-18 15:38:24 +0900 - - [EXPERIMENTAL] MakeMakefile::CXX for C++ - -commit 7d354175d7dcabc317030194f503d69a8a7892f5 - Author: Hiroshi SHIBATA - Date: 2019-09-18 17:39:51 +0900 - - Fixed up ccbfb054b1dcd06d30924c4a83af1bac75d78c31 - -commit ba86353446f6c1ce9b2c95d03bf16cfed3a532d2 - Author: Hiroshi SHIBATA - Date: 2019-09-18 15:28:08 +0900 - - Update the latest documentation of bundler - -commit 2da8574930f14950ce78892fe65f383fcaf8a71b - Author: Hiroshi SHIBATA - Date: 2019-09-18 15:05:38 +0900 - - Fixed the rubocop warnings - -commit effacde2c0104935fd7258eac77f17684f724cd0 - Author: David Rodríguez - Date: 2019-08-16 21:30:39 +0900 - - [bundler/bundler] Merge all `bundle check --path` specs - - And skip them all for bundler 3. - - https://github.com/bundler/bundler/commit/b88936cdc2 - -commit 434af7303ceed8ee5318a31eb7da02b0ed557965 - Author: Bundlerbot - Date: 2019-09-05 01:20:09 +0900 - - [bundler/bundler] Merge #7340 - - 7340: Fix bundle clean issue r=deivid-rodriguez a=deivid-rodriguez - - ### What was the end-user problem that led to this PR? - - The problem was that `bundle clean` is crashing under some conditions. - - ### What was your diagnosis of the problem? - - My diagnosis was that sometimes (when the bundle includes git sourced gems with extensions), it assumes that some paths exist, but they don't. - - ### What is your fix for the problem, implemented in this PR? - - My fix is to ignore those paths. - - ### Why did you choose this fix out of the possible options? - - I chose this fix because it fixes the issue. - - Fixes #7338. - - Co-authored-by: David Rodríguez - (cherry picked from commit b007fde67c77c1f15f13b97eda186644c2a2be04) - - https://github.com/bundler/bundler/commit/3766053507 - -commit e6ad9452b6cf1cf118ead0cbd0cf86e2c0fb61e0 - Author: David Rodríguez - Date: 2019-08-16 19:07:55 +0900 - - [bundler/bundler] Fix remembered flag deprecation message - - It was suggested a deprecated command as a fix. - - https://github.com/bundler/bundler/commit/e330a9a34f - -commit 1cb8cf5df0b2a7dbf8b1d616ac5268d76140aab6 - Author: David Rodríguez - Date: 2019-09-15 16:42:48 +0900 - - [bundler/bundler] Version 2.1.0.pre.2 - - https://github.com/bundler/bundler/commit/6e9774b377 - -commit 4f2f6aeb5fa65a10c633d92fcdd1980d42a6d745 - Author: Samuel Giddins - Date: 2017-10-21 03:55:04 +0900 - - [bundler/bundler] Add a spec for installing git deps after packaging w/o git - - https://github.com/bundler/bundler/commit/65351c58b8 - -commit 0c6529bac2c38c536567e443b7da851144e84be8 - Author: David Rodríguez - Date: 2019-08-22 03:53:36 +0900 - - [bundler/bundler] Revert "Add all platforms to lockfile by default" - - This reverts commit 3dc509e645abb497e4dc92a7c42be471ff87db0b. - - https://github.com/bundler/bundler/commit/b5766564fb - -commit 6f16ededdd5eed8bab9e4f4cb70032a151fbc405 - Author: David Rodríguez - Date: 2019-08-22 03:52:35 +0900 - - [bundler/bundler] Revert "Remove now meaningless warning" - - This reverts commit 00b095b98fe4bd44950beaf3bc9f1d91eac7b69e. - - https://github.com/bundler/bundler/commit/e93bce3b20 - -commit f18d88b5356d347304245c703329b82293f56efc - Author: David Rodríguez - Date: 2019-08-22 03:52:25 +0900 - - [bundler/bundler] Revert "Remove now meaningless setting" - - This reverts commit 52c5a0eedec34b5d86464b3cf135dc2002486f1d. - - https://github.com/bundler/bundler/commit/b4cc36deb9 - -commit 399501cdfe957325631e70efa6afffca6b56db6e - Author: David Rodríguez - Date: 2019-08-22 03:52:17 +0900 - - [bundler/bundler] Revert "Remove now unused method" - - This reverts commit 3a2d2f025081755bdb38af660897e7b2f749a33a. - - https://github.com/bundler/bundler/commit/13cef81582 - -commit c27aaf1a8f6f4240dadeaa9b203cce640b56e3db - Author: Takayuki Nakata - Date: 2019-08-21 23:46:46 +0900 - - [bundler/bundler] Fix comments and messages to refer to https url - - https://github.com/bundler/bundler/commit/a86b49f1b9 - -commit b9996803f7278f3a6d30360f1b7220070a9208d3 - Author: David Rodríguez - Date: 2019-08-16 21:25:37 +0900 - - [bundler/bundler] Remove duplicated spec filter - - https://github.com/bundler/bundler/commit/b7fc6f4187 - -commit c92e098781470c84a497a1d430f425aca897f895 - Author: David Rodríguez - Date: 2019-08-16 18:59:39 +0900 - - [bundler/bundler] Fix --path option descriptions - - To not mention that the flag is remembered when it's not. - - https://github.com/bundler/bundler/commit/82f0b95854 - -commit a29ead52e169cf702a61ba91cdf301a3bd87d713 - Author: David Rodríguez - Date: 2019-08-16 19:08:22 +0900 - - [bundler/bundler] Deprecate `--path` flag to `bundle check` - - https://github.com/bundler/bundler/commit/0a0e7cf5ec - -commit 9118cb242b141c380a0180f64ffeb0c9fdae0c8b - Author: Kenichi Kamiya - Date: 2019-09-18 17:24:24 +0900 - - Fix typos - - Notes: - Merged: https://github.com/ruby/ruby/pull/2467 - -commit bcd5f2e9d30d2bb34912e56b2e766ae952dd12dc - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-18 11:06:24 +0900 - - delete unused variable - -commit c170e23d8118edba08981fd1c5d7f03652b543a4 - Author: git - Date: 2019-09-18 08:23:06 +0900 - - * 2019-09-18 [ci skip] - -commit 775365cbd2bf17195e694771fc1c15698273a640 - Author: Jeremy Evans - Date: 2019-09-18 06:32:19 +0900 - - Fix keyword argument separation issues with sym procs when using refinements - - Make sure that vm_yield_with_cfunc can correctly set the empty keyword - flag by passing 2 as the kw_splat value when calling it in - vm_invoke_ifunc_block. Make sure calling.kw_splat is set to 1 and not - 128 in vm_sendish, so we can safely check for different kw_splat values. - - vm_args.c needs to call add_empty_keyword, and to make JIT happy, the - function needs to be exported. Rename the function to - rb_adjust_argv_kw_splat to more accurately reflect what it does, and - mark it as MJIT exported. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2462 - -commit 9b35dc38644c10eed008f9ba19a7224f2fb49af2 - Author: Jeremy Evans - Date: 2019-09-17 05:19:06 +0900 - - Pass keyword argument flag when rb_call_super_kw calls method_missing - - This makes method_missing take a flag for whether keyword arguments - were passed. - - Adds tests both for rb_call_super_kw usage as well as general usage - of super calling method_missing in Ruby methods. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2462 - -commit 0785469a400b00eb4576fedbf93b614c70eaf760 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-17 16:59:47 +0900 - - `brew install` may fail, so try to use `tool/travis_retry.sh` - - https://github.com/ruby/ruby/runs/224877570#step:3:1008 - ``` - Error: No such file or directory @ dir_s_rmdir - /Users/runner/Library/Caches/Homebrew/downloads/ca756e367eb98d2b525e72b311633c27ffc74eca825a5392153b3488d1adb732--libssh2-1.9.0.mojave.bottle.tar.gz - ``` - - Notes: - Merged: https://github.com/ruby/ruby/pull/2464 - -commit 68ffb679d461722da6ef0bcdb2f18d8929d98204 - Author: Nobuyoshi Nakada - Date: 2019-09-14 00:41:04 +0900 - - Undefine DSUSP key - - Enable `Ctrl+Y`, which is bound with it by default on BSD-like - systems, for editing. - -commit b49c1380c10bc3c13814a818a6c860f0f82bba79 - Author: git - Date: 2019-09-17 15:15:43 +0900 - - * 2019-09-17 [ci skip] - -commit f9332ad8333bffd9a0d34d5c5e10a2f7323cbde5 - Author: Adam Cammack - Date: 2019-09-14 01:03:34 +0900 - - Fix previous history in vi_insert mode - -commit a3533bc90493cf84e6c9d6cc0356bbbd694cd6da - Author: Adam Cammack - Date: 2019-09-08 05:56:29 +0900 - - Fix history navigation in vi_insert mode - -commit 3bb1162cacf951794af7c9124dde002ceaed5b38 - Author: Nobuyoshi Nakada - Date: 2019-09-16 20:01:42 +0900 - - Folded files in gemspec - -commit 2a39de193cc1e40b2e73cdbd24df280cb81638dd - Author: git - Date: 2019-09-16 21:37:37 +0900 - - * 2019-09-16 [ci skip] - -commit 70f57287cfaab470b6e24c6bbc47c7e3890ec7e5 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-16 21:35:38 +0900 - - Fix a typo [ci skip] - -commit 4a403e3f9850901eaeaf3a261bf810bc18516ca6 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-15 23:19:01 +0900 - - oops [ci skip] - - Fixing typo. It seems I failed to press the shift key. - -commit 3a3f48fb8fbdbb810d9b675159529970015316b9 - Author: Nobuyoshi Nakada - Date: 2019-09-15 23:12:24 +0900 - - Comment lines can be placed between fluent dot now - -commit 751d4ab9c2382d60868446cc69fdac0a9f6cdf4a - Author: Nobuyoshi Nakada - Date: 2019-07-27 13:56:54 +0900 - - Refine Timezone fixture - -commit 6cad0644248d5acbaf3a2e8de4ff6d88b3dd2cb4 - Author: Nobuyoshi Nakada - Date: 2019-09-15 16:23:33 +0900 - - Try to fetch commits notes to the source tree automatically - - [Bug #16167] - -commit 44d594189aa2b1365b9b765cb272906b9561cc1d - Author: Nobuyoshi Nakada - Date: 2019-09-15 13:29:12 +0900 - - rb_scan_args_count_lead: use arguments instead of magic numbers - -commit 585b15d75df525054cf46b79baf16498472a0e65 - Author: Nobuyoshi Nakada - Date: 2019-09-15 03:21:41 +0900 - - make-snapshot: no merge commits in ChangeLog - - Parents commit hashes in logs of merge commits are abbreviated to - necessary length depending on the repositories. Exclude merge - commits from ChangeLog to make it stable. - -commit df4a4bd88c98a0b966d88ae825c14e891c5cfba2 - Author: Nobuyoshi Nakada - Date: 2019-09-15 02:16:15 +0900 - - make-snapshot: export ChangeLog from srcdir - -commit 1edcfd610703fb6f773e8f31f88f8ca920bda1ac - Author: Jeremy Evans - Date: 2019-09-15 05:57:39 +0900 - - Issue a warning if invalid kw_splat is passed to *_kw function - - This should only happen if the API is misused. It's much better - to warn here and fix the problem, versus to try to debug TypeErrors - or segfaults later. - -commit 395e5f510cb3788dd2b57f1f9fa9be8980564af8 - Author: git - Date: 2019-09-15 02:15:29 +0900 - - * 2019-09-15 [ci skip] - -commit 1ad4be13cb75c5f039f5732d2149f0b84bcf5f8e - Author: Nobuyoshi Nakada - Date: 2019-09-15 02:07:00 +0900 - - make-snapshot: deprecated -exported option [Bug #16167] - -commit e9c7fc7ca9bc15a9f84bdc356f7b6fac12988ccb - Author: Nobuyoshi Nakada - Date: 2019-09-14 23:47:33 +0900 - - Continue to export even if no notes/commits - - Just exporting may not imply exporting ChangeLog which needs - notes/commits. [Bug #16167] - -commit 6d2dcf96323189402ea551ed86de6c2766659593 - Author: Nobuyoshi Nakada - Date: 2019-09-14 22:24:44 +0900 - - [ruby/io-console] Added `intr:` option to IO#raw - - Enters raw-mode but enable interrupts. - - https://github.com/ruby/io-console/commit/7cba76561a - - Notes: - Merged: https://github.com/ruby/ruby/pull/2459 - -commit 8263459627b20d4383978b3d1471298bf52bde05 - Author: Takashi Kokubun - Date: 2019-09-14 21:36:41 +0900 - - Keep the reference of imemo while argv may be used - - To prevent the `v` reference from being eliminated before argv is used, - calling `rb_free_tmp_buffer` against `v` explicitly. - -commit f41cd4ba43771139dacf2c9d3e3ebd490a2619c0 - Author: Nobuyoshi Nakada - Date: 2019-09-14 21:09:39 +0900 - - Fixed one-off error - - Needs another room to append an empty hash. - -commit 9699a5c5bcb9e1483f21efdf7e5cb9bf0a6279fb - Author: Samuel Williams - Date: 2019-09-14 19:43:51 +0900 - - Update news regarding `Fiber#raise`. - -commit 39c37acf86960ae745c4d690fe2d9dd38cd96fba - Author: Jeremy Evans - Date: 2019-09-14 18:21:37 +0900 - - Fix memory leak when adding empty keyword hashes - - nagachika pointed out that ALLOC_N is actually just malloc, so - this memory wasn't being freed. This shouldn't be a performance - sensitive code path, and will be going away after 2.7, so just - allocate a temp buffer that will be freed later by Ruby GC. - -commit b78a345bd63ff2b52ea0f84754ab0988748a9bd0 - Author: Jeremy Evans - Date: 2019-09-14 17:49:33 +0900 - - Only set RB_PASS_CALLED_KEYWORDS in C functions called directly from Ruby - - It is not safe to set this in C functions that can be called from - other C functions, as in the non argument-delegation case, you - can end up calling a Ruby method with a flag indicating keywords - are set without passing keywords. - - Introduce some new *_kw functions that take a kw_splat flag and - use these functions to set RB_PASS_CALLED_KEYWORDS in places where - we know we are delegating methods (e.g. Class#new, Method#call) - -commit b2c29bbab6e88253f497fc3e66a43cb7b4d425b5 - Author: git - Date: 2019-09-14 08:54:08 +0900 - - * remove trailing spaces. [ci skip] - -commit 3cfbfa9628435e3b09316a18c2db9e4f250fdd77 - Author: Jeremy Evans - Date: 2019-09-14 08:42:27 +0900 - - Consolidate empty keyword handling - - Remove rb_add_empty_keyword, and instead of calling that every - place you need to add empty keyword hashes, run that code in - a single static function in vm_eval.c. - - Add 4 defines to include/ruby/ruby.h, these are to be used as - int kw_splat values when calling the various rb_*_kw functions: - - RB_NO_KEYWORDS :: Do not pass keywords - RB_PASS_KEYWORDS :: Pass final argument (which should be hash) as keywords - RB_PASS_EMPTY_KEYWORDS :: Add an empty hash to arguments and pass as keywords - RB_PASS_CALLED_KEYWORDS :: Passes same keyword type as current method was - called with (for method delegation) - - rb_empty_keyword_given_p needs to stay. It is required if argument - delegation is done but delayed to a later point, which Enumerator - does. - - Use RB_PASS_CALLED_KEYWORDS in rb_call_super to correctly - delegate keyword arguments to super method. - -commit 24b1b339757ecab4539a2cb00a545bfcf885d3ef - Author: Jeremy Evans - Date: 2019-09-14 01:31:13 +0900 - - Correctly handle keywords for Method#call for cfuncs, send, and attr_* - - This sets the correct VM frame flags when using Method#call to - call funcs, and handles empty keyword hashes for cfuncs, - attr_reader, and attr_writer. It also fixes calls to send through - Method#call. It adds tests for all of those, as well as tests for - using Method#call to call define_method, lambda, and sym_procs - (which didn't require code changes). - -commit 98f919ed47a136c9a51c7ab5fa39ffb4965a1687 - Author: aycabta - Date: 2019-09-14 00:16:08 +0900 - - The stdlib readline should raise Interrupt when pressing C-c - -commit 70fe473c7dfee70d0e9ee7346c260493e3aceaf2 - Author: git - Date: 2019-09-14 00:12:12 +0900 - - * 2019-09-14 [ci skip] - -commit 83ef23bd75bfee481ea259473742d99d95d2f954 - Author: aycabta - Date: 2019-09-14 00:11:01 +0900 - - Revert "Use IO#getch to read one char in raw mode" - - This reverts commit 805b0a481132938638dbd32830cf5dca3910efb1. - -commit e8fff0ec9cf16487986856c83354c9427e358d1d - Author: aycabta - Date: 2019-09-14 00:10:45 +0900 - - Revert "Use IO#getbyte" - - This reverts commit 685f12bbca50ff9b7a16b3016b3b8b3f2ac8b796. - -commit 06bbacc086d9a63c4443aafb19903b792c41c2e0 - Author: aycabta - Date: 2019-09-14 00:10:34 +0900 - - Revert "Support multibyte input" - - This reverts commit 6d9e54816f828983bcf383ce6fce287bd3ca05b9. - -commit 7e0f56fb3dfcbc1b48f40c6c3b2c23c8e46a2341 - Author: Nobuyoshi Nakada - Date: 2019-09-13 19:48:44 +0900 - - Name dynamically defined methods with line numbers - -commit 5f5aca1b5fb95013f5b805f74ead4cfa143dc1d8 - Author: Nobuyoshi Nakada - Date: 2019-09-13 17:17:21 +0900 - - Moved ruby_node_name declaration to node.h - -commit 2da6b328bb5124793a6420c55325f3106b615bb4 - Author: Koichi Sasada - Date: 2019-09-13 16:24:28 +0900 - - introduce IBF_(MAJOR|MINOR)_VERSION. - - RubyVM::InstructionSequence.to_binary generates a bytecode binary - representation. To check compatibility with binary and loading - MRI we prepared major/minor version and compare them at loading - time. However, development version of MRI can change this format - but we can not increment minor version to make them consistent - with Ruby's major/minor versions. - - To solve this issue, we introduce new minor version scheme - (binary's minor_version = ruby's minor * 10000 + dev ver) - and we can check incompatibility with older dev version. - -commit 3c162df9d4a80bc09d88eeb36db7d59ea0034b1d - Author: Kazuhiro NISHIYAMA - Date: 2019-09-13 11:15:52 +0900 - - Dump some information - - Notes: - Merged: https://github.com/ruby/ruby/pull/2457 - -commit 69acf40b45823e6cc7d12476349a9251a307d1f0 - Author: git - Date: 2019-09-13 00:35:29 +0900 - - * 2019-09-13 [ci skip] - -commit bcd49a4669bd88ab374f9eabdf15aec4f6fff917 - Author: Takashi Kokubun - Date: 2019-09-13 00:34:53 +0900 - - Upgrade benchmark_driver to v0.15.5 - - Fixed new Struct-related keyword argument warnings - -commit ac3e8834e030f62d2d313ec60cd7ed3c14c9ea5e - Author: Akinori MUSHA - Date: 2019-09-12 20:15:03 +0900 - - Document and test Enumerator.produce - - Co-authored-by: Victor Shepelev - -commit 775037613bffe6f90e7af510b7f46a2ac10610be - Author: Akinori MUSHA - Date: 2019-08-29 20:05:10 +0900 - - Implement Enumerator.produce [Feature #14781] - -commit 9f86e5ecb6c66226252bda0d8bdf304d64e69ee3 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-12 18:28:46 +0900 - - Moved coverage.yml to https://github.com/ruby/actions [ci skip] - -commit 515b1989b1093a4dddef83d0cda763c9ae6760e3 - Author: Aaron Patterson - Date: 2019-09-12 06:02:05 +0900 - - Make NODE_ARYPTN layout consistent between Ripper and AST - - We are seeing SEGVs in CI: - - http://ci.rvm.jp/results/trunk-gc-asserts@ruby-sky1/2253563 - - This is happening because Ripper constructs AST nodes differently than - parse.y normally does. Specifically in this case Ripper is assigning 3 - `VALUE` objects: - - https://github.com/ruby/ruby/blob/1febb6f4a14f7222c6d30250bfdc252d34238187/parse.y#L757-L761 - - Where parse.y will normally assign other things: - - https://github.com/ruby/ruby/blob/1febb6f4a14f7222c6d30250bfdc252d34238187/parse.y#L11258-L11260 - - The important one is the last one, the `struct rb_ary_pattern_info`. The - mark function assumed that `NODE_ARYPTN` have a pointer to `struct - rb_ary_pattern_info`, and used it: - - https://github.com/ruby/ruby/blob/1febb6f4a14f7222c6d30250bfdc252d34238187/node.c#L1269-L1274 - - In the case of Ripper, `NODE_ARYPTN` doesn't point to an - `rb_ary_pattern_info`, so the mark function would SEGV. This commit - changes Ripper so that its `NODE_ARYPTN` nodes also point at an - `rb_ary_pattern_info`, and the mark function can continue with the same - assumption. - -commit 21994b7fd686f263544fcac1616ecf3189fb78b3 - Author: John Hawthorn - Date: 2019-09-12 01:02:22 +0900 - - Avoid rehashing keys in transform_values - - Previously, calling transform_values would call rb_hash_aset for each - key, needing to rehash it and look up its location. - - Instead, we can use rb_hash_stlike_foreach_with_replace to replace the - values as we iterate without rehashing the keys. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2452 - -commit 14e3731059246fcd093daa36fd0139d0287e633f - Author: Aaron Patterson - Date: 2019-09-12 03:57:57 +0900 - - Make sure WB executes after object is reachable - -commit 1febb6f4a14f7222c6d30250bfdc252d34238187 - Author: git - Date: 2019-09-12 03:21:40 +0900 - - * 2019-09-12 [ci skip] - -commit ed96c9f270829c7c07852f0aadcd88a58a13875b - Author: Jeremy Evans - Date: 2019-09-12 03:17:35 +0900 - - Emit missing keyword argument separation warnings for define_method - - Previously, the warning functions skipped warning in these cases. - This removes the skipping, and uses a less descriptive warning - instead. - - This affected both last argument to keyword warnings and keyword - split warnings. - -commit fba5bbc69545f6d45f7a2c649321a61f43a0b1a0 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-11 23:38:05 +0900 - - Moved doxygen.yml to https://github.com/ruby/actions [ci skip] - -commit fc3bfd521d4b2354e18bfe403a3b02bd00251d15 - Author: Nobuyoshi Nakada - Date: 2019-09-11 21:36:00 +0900 - - Fixed the function signature to rb_rescue2 - -commit 343b0a281d1dd6e1ab7e6af4c48ad2e6d09a0071 - Author: Nobuyoshi Nakada - Date: 2019-09-11 16:17:04 +0900 - - Made a short-circuit expression w/o result into an `if`-statement - -commit 655c65d65b75a6ac733dfb8e42437e7c43b7cfe1 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-10 16:41:34 +0900 - - &$$->nd_lit is uninitialized at this point - - See also https://travis-ci.org/ruby/ruby/jobs/583031687#L1874 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2444 - -commit 489676bd2049c0a8c9949bf09d3dfb2730a29736 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-11 09:35:06 +0900 - - Add `--no-progress` to `aws s3` [ci skip] - - https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html - > --no-progress (boolean) File transfer progress is not displayed. This flag is only applied when the quiet and only-show-errors flags are not provided. - -commit 91ee9584f9a3e8b8e5e0e9c2f1f2b229ca10323e - Author: Aaron Patterson - Date: 2019-09-11 06:00:48 +0900 - - Macros can't be expressions, so make a function - - Macros can't be expressions, that is a GNU extension (I didn't know - that). This commit converts the macro to a function so that everything - will compile correctly on non-GNU compatible compilers. - -commit 139510238bcbb8d7fd8022c23a603c51d2acbe2e - Author: Aaron Patterson - Date: 2019-09-11 03:27:40 +0900 - - WB needs to be executed after object is reachable - -commit 721cab470606294e5b49ef75793a62becdf5cfb7 - Author: git - Date: 2019-09-11 02:45:56 +0900 - - * 2019-09-11 [ci skip] - -commit 414a80d242796059d69e8980073b5420910cab50 - Author: Aaron Patterson - Date: 2019-09-11 02:44:49 +0900 - - `NODE_MATCH` needs to be marked / allocated from marking bucket - - Fixes a test in RubySpec - -commit 83ef58f264964f86e7276fdb146c108cc0d6abc0 - Author: Nobuyoshi Nakada - Date: 2019-09-10 17:27:07 +0900 - - [ruby/io-console] Suppress yet another warning on Windows - - https://github.com/ruby/io-console/commit/4e17c90788 - -commit b5ab918d0c7cdeac8f1b1d45842383ea5413699f - Author: Nobuyoshi Nakada - Date: 2019-09-10 17:22:06 +0900 - - [ruby/io-console] Suppress warnings on Windows - - About unused variables and a function. - - https://github.com/ruby/io-console/commit/32baf54e7a - -commit ad6cbc1d33d6013ef9b1d2ff9deb286956d9bcbc - Author: Nobuyoshi Nakada - Date: 2019-09-10 17:20:12 +0900 - - Unused LONG_MAX_as_double - - LONG_MAX_as_double is not needed when long is small enough to be - exactly representable as a double, e.g., IL32LLP64 platforms. - -commit 487d290044c5876991d0b9c577bf77a667ec6b93 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-10 16:03:30 +0900 - - oops - - Silly typo. - -commit df1721c668cfd20a08ec6369de89ea314c1d4d19 - Author: Nobuyoshi Nakada - Date: 2019-09-10 14:37:17 +0900 - - Fixed GCC version for diagnostic-pragmas - - "GCC diagnostic push/pop" seems appeared at gcc 4.6. - -commit f5024de002fa82dfe5730b245ad24b8fc3a68424 - Author: Masaki Matsushita - Date: 2019-09-10 12:39:49 +0900 - - Remove check of ai.protocol - - Solaris 10 returns addrinfo.ai_protocol as 0, not 6. - -commit 20e428ec40ee1c83708b3ade6a0007ab2a435f83 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-10 12:22:26 +0900 - - fix CentOS 6 compile error - - See also https://rubyci.org/logs/rubyci.s3.amazonaws.com/centos6/ruby-master/log/20190910T003005Z.fail.html.gz - -commit 8d3db4f26cbbc920c717dfa2784a467014b954a6 - Author: Jeremy Evans - Date: 2019-09-10 08:19:26 +0900 - - Default to cc/c++ instead of gcc/g++ on OpenBSD - - Notes: - Merged: https://github.com/ruby/ruby/pull/2443 - -commit 0e9d56f5e73ed2fd8e7c858fdea7b7d5b905bb64 - Author: Masaki Matsushita - Date: 2019-09-10 09:57:31 +0900 - - Support timeout for Addrinfo - - Addrinfo.getaddrinfo and .foreach now accepts :timeout in seconds as - a keyword argument. If getaddrinfo_a(3) is available, the timeout will be - applied for name resolution. Otherwise, it will be ignored. - - Socket.tcp accepts :resolv_timeout to use this feature. - - This commit is retry of 6382f5cc91ac9e36776bc854632d9a1237250da7. - Test was failed on Solaris machines which don't have "http" in - /etc/services. In this commit, use "ssh" instead. - -commit 3678c371199d9a048589bf3da37f06223912dea5 - Author: Nobuyoshi Nakada - Date: 2019-09-10 01:04:47 +0900 - - [ruby/io-console] Added IO#check_winsize_changed on Windows - - https://github.com/ruby/io-console/commit/ee648fa8bb - - Notes: - Merged: https://github.com/ruby/ruby/pull/2440 - -commit 74790e2dc429daddc6996bc46cb2a0aae2a176e9 - Author: Nobuyoshi Nakada - Date: 2019-09-10 00:01:06 +0900 - - [ruby/io-console] Added scroll methods - - https://github.com/ruby/io-console/commit/83e70de8ab - - Notes: - Merged: https://github.com/ruby/ruby/pull/2440 - -commit c1412bd6d95805dea7335ef3cb60ac942b4773bf - Author: Nobuyoshi Nakada - Date: 2019-09-09 23:55:45 +0900 - - [ruby/io-console] Added line/screen erase methods - - https://github.com/ruby/io-console/commit/e6344108a1 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2440 - -commit 9844a349bfdd5a97ae639e7798cc51aa897846fb - Author: Nobuyoshi Nakada - Date: 2019-09-09 23:53:05 +0900 - - [ruby/io-console] Added IO#goto_column - - https://github.com/ruby/io-console/commit/143a9d5764 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2440 - -commit e8be056af92b2f13162567c057322a2c16797b79 - Author: Nobuyoshi Nakada - Date: 2019-09-09 23:51:44 +0900 - - [ruby/io-console] Added relative cursor move methods - - https://github.com/ruby/io-console/commit/21d340e4a2 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2440 - -commit 3d9c7c28358110076abb2d77365eef805ddb896c - Author: Nobuyoshi Nakada - Date: 2019-09-09 23:48:47 +0900 - - [ruby/io-console] Added IO#goto and IO#cursor= for VT - - https://github.com/ruby/io-console/commit/7f2b1b473d - - Notes: - Merged: https://github.com/ruby/ruby/pull/2440 - -commit 53ed4fb37632789db69815bb9b9df0e3572779ef - Author: Nobuyoshi Nakada - Date: 2019-09-09 23:17:38 +0900 - - [ruby/io-console] Added IO#cursor for VT - - https://github.com/ruby/io-console/commit/41a6a6cace - - Notes: - Merged: https://github.com/ruby/ruby/pull/2440 - -commit 803dc9e1e48325515bf7c5ce176cf2b5bc0792a9 - Author: Nobuyoshi Nakada - Date: 2019-09-09 23:14:30 +0900 - - [ruby/io-console] Added console_vt_response - - A function to query console info. - - https://github.com/ruby/io-console/commit/db75a07fa3 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2440 - -commit f4aa06c0ffbf23d68aaed46ce21208f431894eda - Author: Nobuyoshi Nakada - Date: 2019-07-25 05:05:39 +0900 - - [ruby/io-console] Drop fat gem support - - https://github.com/ruby/io-console/commit/972ceb081d - - Notes: - Merged: https://github.com/ruby/ruby/pull/2440 - -commit 00744a03d576f308d7fa586c2d04b5c1cb8fe3f4 - Author: Jeremy Evans - Date: 2019-09-10 07:20:54 +0900 - - Update documentation for Exception [ci skip] - - Mostly from burdettelamar@yahoo.com (Burdette Lamar). - - Implements [Misc #16156] - -commit d8a4af47a5e5f72be2cd2897712d1718013b2e4c - Author: Aaron Patterson - Date: 2019-09-10 02:15:07 +0900 - - Only use `add_mark_object` in Ripper - - This patch changes parse.y to only use `add_mark_object` in Ripper. - Previously we were seeing a bug in write barrier verification. I had - changed `add_mark_object` to execute the write barrier, but the problem - is that we had code like this: - - ``` - NEW_STR(add_mark_object(p, obj), loc) - ``` - - In this case, `add_mark_object` would execute the write barrier between - the ast and `obj`, but the problem is that `obj` isn't actually - reachable from the AST at the time the write barrier executed. - `NEW_STR` can possibly call `malloc` which can kick a GC, and since - `obj` isn't actually reachable from the AST at the time of WB execution, - verification would fail. - - Basically the steps were like this: - - 1. RB_OBJ_WRITTEN via `add_mark_object` - 2. Allocate node - 3. *Possibly* execute GC via malloc - 4. Write obj in to allocated node - - This patch changes the steps to: - - 1. Allocate node - 2. *Possibly* execute GC via malloc - 3. Write obj in to allocated node - 4. RB_OBJ_WRITTEN - -commit 4524780d1795e750e23896866eb447be2670ddcd - Author: Aaron Patterson - Date: 2019-09-10 01:37:06 +0900 - - Revert "Reverting node marking until I can fix GC problem." - - This reverts commit 092f31e7e23c0ee04df987f0c0f979d036971804. - -commit 9b53a69d57ae64a28b4c7904a4590b04d91bbbf3 - Author: git - Date: 2019-09-10 00:57:34 +0900 - - * 2019-09-10 [ci skip] - -commit 6d9e54816f828983bcf383ce6fce287bd3ca05b9 - Author: Nobuyoshi Nakada - Date: 2019-09-08 22:34:01 +0900 - - Support multibyte input - -commit 685f12bbca50ff9b7a16b3016b3b8b3f2ac8b796 - Author: Nobuyoshi Nakada - Date: 2019-09-08 22:19:10 +0900 - - Use IO#getbyte - -commit 805b0a481132938638dbd32830cf5dca3910efb1 - Author: Nobuyoshi Nakada - Date: 2019-09-08 21:04:46 +0900 - - Use IO#getch to read one char in raw mode - -commit 89c5d5a64e12cea23b230913b79c3d499bf30b12 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-09 13:19:33 +0900 - - add minimaist C++ check - - This is a test extension so we basically want test failures rather - than a configure breakage but if there is no C++ compiler, we need - no test at all because there will be no chance for the tested - header file to be used later. - - This makes it possible to build the ruby binary without any C++ - compiler installed in a build environment. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2434 - -commit 150f514e19125ce8239602dc9266c7f68166d671 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-09 11:13:31 +0900 - - workaround for C++ 98 const union problem. - - Not the case of recent compilers, but compilers before C++11 - rejected ruby.h, like https://ci.appveyor.com/project/ruby/ruby/builds/27225706/job/qjca7dpe204dytbd - - This is supposedly because a struct with a member qualified with - a const effectively deletes its default copy constructor, which - is considered as being user-defined somehow. Not sure where - exactly is the phrase in the C++98 standard who allows such C / - C++ incompatibility though. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2434 - -commit 042c436cd9cfaeee7a0d7b8e35bee8dec90e972d - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-07 18:46:37 +0900 - - static member variables must explicitly be initialized - - These variables then get their room for storage. - - See also https://github.com/ruby/ruby/runs/214042030 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2434 - -commit 1364217bcdcf128de4586527042035d833349c15 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-07 18:41:34 +0900 - - add missing dependency for .travis.yml - - Notes: - Merged: https://github.com/ruby/ruby/pull/2434 - -commit 92a87269945154344ba3fc96c0de63493e2fe6a1 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-07 17:48:02 +0900 - - Revert "save committers' weekend from CI failures" - - This reverts commit 53d21087da078cf999cc4757b03b2ff0fab4c2cf. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2434 - -commit c4efbf663ea1849986383ca97bfc8c2609142c68 - Author: Masaki Matsushita - Date: 2019-09-09 20:30:45 +0900 - - Revert "Support timeout for Addrinfo" - - This reverts commit 6382f5cc91ac9e36776bc854632d9a1237250da7. - test failed on Solaris. - -commit cce6cfbe486984c2c41d6b772a692ea87ad0222a - Author: Yusuke Endoh - Date: 2019-09-09 20:24:03 +0900 - - Make test-all and test-spec runnable on Android - - Calling some syscall functions such as Dir.chroot causes SIGSYS instead - of EPERM on Android. - This change skips all tests that stops the test-suite run. - -commit 0691a748b6406670ef4cb52d0791b45033b7064e - Author: Kazuhiro NISHIYAMA - Date: 2019-09-09 20:06:00 +0900 - - Fix a typo [ci skip] - -commit 551edf64bcbbbc84af59b5ae44a0820314b72777 - Author: Lars Kanis - Date: 2019-09-09 01:24:48 +0900 - - Reline: Fix wrong variable name - - This raised a NameError before. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2438 - -commit 8c09de38c5f2dab324bcb30ab4a8db9bd55357b2 - Author: Masaki Matsushita - Date: 2019-09-09 18:44:42 +0900 - - Fix expected ip_port - -commit 0fb2457d794ee49701873584c80a6e1cace94b83 - Author: Masaki Matsushita - Date: 2019-09-09 18:35:19 +0900 - - Fix service name for test - - change service name to fix failed test on Solaris - -commit 461663f52a87bbae7f3713862a20a4aa6bd63e4c - Author: Masaki Matsushita - Date: 2019-09-09 15:05:05 +0900 - - Fix domain name for test - -commit 61d90da25c027f896ddc0e71c7b17c67d4b12a97 - Author: Jeremy Evans - Date: 2019-09-09 12:51:56 +0900 - - Fix invalid keyword argument separation warning for delegating calls - - This removes an invalid keyword argument separation warning for - code such as: - - ```ruby - def foo(arg) - arg - end - kw = {} - foo(*[1], **kw) - ``` - - This warning was caused because the remove_empty_keyword_hash - was set based on a comparison with two variables, and in this - case, one of the variables was updated after the check and we - need to use the updated variable. - - Simplify things by just inlining the comparison. - -commit 6382f5cc91ac9e36776bc854632d9a1237250da7 - Author: Masaki Matsushita - Date: 2018-12-31 12:17:39 +0900 - - Support timeout for Addrinfo - - Addrinfo.getaddrinfo and .foreach now accepts :timeout in seconds as - a keyword argument. If getaddrinfo_a(3) is available, the timeout will be - applied for name resolution. Otherwise, it will be ignored. - - Socket.tcp accepts :resolv_timeout to use this feature. - -commit fa79219356715e28529b721e81056ec69a998c4e - Author: Jeremy Evans - Date: 2019-09-09 02:34:34 +0900 - - Add keyword argument separation tests for implicit/explicit super calls - - No code changes are necessary, but we didn't have as extensive - tests for these calls previously. - -commit d636feb6a6e1a2ff7ca39b7735514a06843e7aae - Author: git - Date: 2019-09-09 00:27:05 +0900 - - * 2019-09-09 [ci skip] - -commit 8d53b2cdf8e4f175876f184e4f74fb6125204cc8 - Author: Nobuyoshi Nakada - Date: 2019-09-09 00:21:40 +0900 - - Use target-specific variable instead of a conditional [ci skip] - - And test-rubyspec is deprecated. - -commit 3ef76ce44a3308871e7b4d6158cc880a8dfa9949 - Author: Nobuyoshi Nakada - Date: 2019-09-08 21:22:25 +0900 - - make-snapshot: -git option is no longer provided [ci skip] - -commit b10940a839636cbd990cb2f8a6430fb39c50fb04 - Author: Benoit Daloze - Date: 2019-09-08 19:41:14 +0900 - - Improve Proc#to_s specs - -commit aedf6946a7e958dd00a272c08550790be9dd1c0d - Author: Nobuyoshi Nakada - Date: 2019-09-08 12:54:06 +0900 - - Removed useless braces to suppress a warning - -commit e9bc8b35c6c860e227627e3b0aab86b4f51c59af - Author: aycabta - Date: 2019-09-08 03:26:09 +0900 - - Behave ESC key correctly when vi command mode - -commit 46bfe907f1d61217215bcd1a7da9dff258c63294 - Author: Yusuke Endoh - Date: 2019-09-08 03:06:38 +0900 - - compile.c (compile_hash): rewrite keyword splat handling - - and add some comments. - (I confirm that `foo(**{})` allocates no hash object.) - -commit 95297a15f19743db690d330d082636638313542b - Author: Yusuke Endoh - Date: 2019-09-08 02:54:56 +0900 - - compile.c (compile_hash): rewrite the compilation algorithm - - This is a similar refactoring to 8c908c989077c74eed26e02912b98362e509b8a3, - but the target is compile_hash. - -commit 35680298239f1cd02c19ab742a2116be37d24d90 - Author: aycabta - Date: 2019-09-07 22:06:58 +0900 - - Remove .document and .gitignore from file list of rdoc.gemspec - -commit 4f63634af1fdce87c842f79fcb489ff2f7e4fee8 - Author: Yusuke Endoh - Date: 2019-09-08 01:21:19 +0900 - - compile.c (NODE_OP_ASGN1): Remove unneeded DECL_ANCHOR - -commit 2d017d612657ab2cffc320dcad679a8854b14a6b - Author: Nobuyoshi Nakada - Date: 2019-09-08 00:48:18 +0900 - - make-snapshot: default to the toplevel directory - - As this tool has been intended to use in a working directory, - assume that the toplevel directory is under the VCS, and SVN will - no longer be canonical. - -commit a3f5265fd104ec3812af6a918f375e23aa05a251 - Author: Yusuke Endoh - Date: 2019-09-08 00:22:26 +0900 - - parse.y: Use the correct alias for brace flag of hash literal - - nd_alen and nd_brace is the same field, but nd_brace is more suitable - for this case. - -commit 95f9d7c76d9e808099f89e5cf160306680dc5994 - Author: Yusuke Endoh - Date: 2019-09-08 00:21:23 +0900 - - compile.c (keyword_node_p): Refactor out keyword node checks - -commit 86b74d1a7389ceaccdc2822b1bbe0a91dc50db99 - Author: Yusuke Endoh - Date: 2019-09-08 00:11:50 +0900 - - compile.c (compile_hash): Remove redundant check for NODE_ZLIST - - NODE_ZLIST case is handled in compile_hash, so iseq_compile_each0 - doesn't have to do the same check redundantly. - -commit 050f67c9c634fc0064c49f79ecb49588676028ec - Author: Yusuke Endoh - Date: 2019-09-07 23:57:37 +0900 - - compile.c (compile_hash): Simplify the keyword handling - - The length of NODE_LIST chain in NODE_HASH is always even because it - represents key-value pairs. There is no need to check for the - odd-length case. - -commit bb78c8367802335ec17c39b228e0f535b6e23cb4 - Author: Yusuke Endoh - Date: 2019-09-07 23:56:19 +0900 - - compile.c (compile_hash): don't add a temporal array to mark_ary - - The array is just for a temporal buffer to create a hash, not stored in - the final iseq. - -commit 7cba9a84068e26d798bfe579607c27587302d67f - Author: Yusuke Endoh - Date: 2019-09-07 23:55:51 +0900 - - compile.c (compile_array): undef a temporal macro - -commit b543f5b20fa992dfb62e65525394ee079ea5de57 - Author: git - Date: 2019-09-08 00:23:56 +0900 - - * 2019-09-08 [ci skip] - -commit f3bae2c6cff8eff83114df0e96fd6c338c90ee91 - Author: Nobuyoshi Nakada - Date: 2019-09-08 00:21:42 +0900 - - Touch copied cache files to make tarballs stable - -commit 5a6954ba74adf190a64f91598667520135284a1c - Author: Nobuyoshi Nakada - Date: 2019-09-07 17:28:05 +0900 - - Suppress detached head warning - -commit ae8b9777424f11cbcb962db94958f1e8a3c11acd - Author: Takashi Kokubun - Date: 2019-09-07 23:13:46 +0900 - - Avoid defining DISPATCH_ARCH_DEPEND_WAY macro - - when it's not used. This macro is not used when it's direct threaded code. - - This patch is purely for readability and has no impact for any behavior. - -commit a9b63db3b6cd7cdf5ca48eafc784d4ed37b5fdac - Author: git - Date: 2019-09-07 22:22:30 +0900 - - * remove trailing spaces. [ci skip] - -commit 8c908c989077c74eed26e02912b98362e509b8a3 - Author: Yusuke Endoh - Date: 2019-09-07 22:08:39 +0900 - - compile.c (compile_array): rewrite the compilation algorithm - - The original code looks unnecessarily complicated (to me). - Also, it creates a pre-allocated array only for the prefix of the array. - - The new code optimizes not only the prefix but also the subsequence that - is longer than 0x40 elements. - - # not optimized - 10000000.times { [1+1, 1,2,3,4,...,63] } # 2.12 sec. - # (1+1; push 1; push 2; ...; puts 63; newarray 64; concatarray) - - # optimized - 10000000.times { [1+1, 1,2,3,4,...,63,64] } # 1.46 sec. - # (1+1; newarray 1; putobject [1,2,3,...,64]; concatarray) - -commit 07876bf6dbdab5a8a633173f91ee1603d617afb0 - Author: Yusuke Endoh - Date: 2019-09-07 20:24:24 +0900 - - compile.c (compile_hash): refactoring - - The same refactoring as to b601b13c7267889bf394146353c5f2b0eb488278. - -commit 187328b7037e54f1f5c2558d84215f3d5d3fbdee - Author: Yusuke Endoh - Date: 2019-09-07 18:54:01 +0900 - - compile.c (compile_array): refactoring - - "popped" case can be so simple, so this change moves the branch to the - first, instead of scattering `if (popped)` branches to the main part. - Also, the return value "len" is not used. So it returns just 0 or 1. - -commit 324dd9d01f0c97631a2588f63231bcb651844cca - Author: Benoit Daloze - Date: 2019-09-07 19:53:07 +0900 - - armv7l and armv7l are the same platform, generalize to armv7 - - [Bug #16007] - -commit 5511213487f9e6c6bd23a227ee64f9c541680f02 - Author: Nobuyoshi Nakada - Date: 2019-09-07 17:25:52 +0900 - - Exit gently if no VCS found but --suppress_not_found is given - -commit 5b5c9b61015434a253bf1eee65c7f05dc870b105 - Author: Nobuyoshi Nakada - Date: 2019-09-07 17:23:42 +0900 - - Removed no longer used variable - -commit a2260bd636646cde486afeebe5a0a7ef5ec78a4e - Author: Yusuke Endoh - Date: 2019-09-07 16:45:49 +0900 - - compile.c: Separate compile_list to two functions for Array and Hash - - compile_list was for the compilation of Array literal and Hash literal. - I guess it was originally reasonable to handle them in one function, but - now, compilation of Array is very different from Hash. So the function - was complicated by many branches for Array and Hash. - - This change separates the function to two ones for Array and Hash. - -commit 2f2f8107d0d21f5ebaaaf3b2d7ed6d09dfec91d5 - Author: Yusuke Endoh - Date: 2019-09-07 16:26:38 +0900 - - compile.c (compile_list): allow an odd-length hidden array literal - - An array literal [1,2,...,301] was compiled to the following iseq: - - duparray [1,2,...,300] - putobject [301] - concatarray - - The Array literal optimization took every two elements maybe because it - must handle not only Array but also Hash. - Now the optimization takes each element if it is an Array literal. So - the new iseq is: duparray [1,2,...,301]. - -commit 1e008105bc4576af46036f1c73f96f7f93bee319 - Author: Yusuke Endoh - Date: 2019-09-07 16:01:16 +0900 - - compile.c (compile_list): emit newarraykwsplat only at the last chunk - - `[{}, {}, {}, ..., {}, *{}]` is wrongly created. - - A big array literal is created and concatenated for every 256 elements. - The newarraykwsplat must be emitted only at the last chunk. - -commit c725a4e48fc30cb60e539e86c917698209184345 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-07 14:02:35 +0900 - - Check github.repository in doxygen.yml [ci skip] - -commit a7a2be7a31b66b05a118fb41dabf0cb965f4a9c0 - Author: Yusuke Endoh - Date: 2019-09-07 13:51:18 +0900 - - Rename some function/definition names that handles NODE_LIST - - from array to list. - Follow up to ac50ac03aeb210763730cdc45f230e236519223d - -commit 99c9431ea1cc538489c3da70f52121aa8bc0800b - Author: Yusuke Endoh - Date: 2019-09-07 10:42:00 +0900 - - Rename NODE_ARRAY to NODE_LIST to reflect its actual use cases - - and NODE_ZARRAY to NODE_ZLIST. - - NODE_ARRAY is used not only by an Array literal, but also the contents - of Hash literals, method call arguments, dynamic string literals, etc. - In addition, the structure of NODE_ARRAY is a linked list, not an array. - - This is very confusing, so I believe `NODE_LIST` is a better name. - -commit f223ab47e6e41e4a5f0307a5202b4f5c534a3596 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-07 13:49:47 +0900 - - [DOC] Update output of Ripper.sexp [ci skip] - -commit 8bfc46a9a3ba16f58aa68d8191048df7f0720f04 - Author: Nobuyoshi Nakada - Date: 2019-09-07 11:59:19 +0900 - - Fixed wrong usage of file2lastrev.rb - -commit 8b290448e3233e03b01288c179eb49bee63d1302 - Author: Nobuyoshi Nakada - Date: 2019-09-07 11:56:23 +0900 - - Assign to vcs in new_vcs block not to use rescue result - -commit 59e29389a8c3501e71444fed2c10ba6821e63625 - Author: Nobuyoshi Nakada - Date: 2019-09-07 11:47:21 +0900 - - Fixed wrong method at 71f7b0421ac - -commit 146677a1e76fd33d86894d0430ea137dbc63579a - Author: Jeremy Evans - Date: 2019-09-07 05:37:31 +0900 - - Fix keyword argument warnings in the tests from Class#new - - This were previously hidden because calls from C were not warned. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2432 - -commit 434582d888ad2982ec01d9b5a1e1afe8480312ab - Author: Jeremy Evans - Date: 2019-09-07 05:37:09 +0900 - - Fix Tempfile.open to correctly pass keywords to Tempfile.new - - Notes: - Merged: https://github.com/ruby/ruby/pull/2432 - -commit 56036815207b803151b0c7215da3a880bbad6df1 - Author: Jeremy Evans - Date: 2019-09-07 05:35:50 +0900 - - Enable keyword argument warnings when called from C - - Previously, Ruby did not warn in these cases, and in some cases - did not have the same behavior. This makes calls from C handled - the same way as calls from Ruby. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2432 - -commit 80e679ef2d6f370e853e37053c73930c65b5e76c - Author: Jeremy Evans - Date: 2019-09-07 05:33:19 +0900 - - Fix keyword argument separation warnings for enumerators - - This makes objects created via #to_enum and related methods pass - keyword arguments as keywords. - - To implement this, add a kw_splat member of struct enumerator and - struct iter_method_arg, and add rb_block_call_kw, which is the - same as rb_block_call_kw with a flag for whether the last argument - is keyword options. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2432 - -commit 37a2c660aa4f4aacfd6a56651b10124e3ac01321 - Author: Jeremy Evans - Date: 2019-09-06 11:25:34 +0900 - - Convert keyword argument to required positional hash argument for Class#new, Method#call, UnboundMethod#bind_call - - Also add keyword argument separation warnings for Class#new and Method#call. - - To allow for keyword argument to required positional hash conversion in - cfuncs, add a vm frame flag indicating the cfunc was called with an empty - keyword hash (which was removed before calling the cfunc). The cfunc can - check this frame flag and add back an empty hash if it is passing its - arguments to another Ruby method. Add rb_empty_keyword_given_p function - for checking if called with an empty keyword hash, and - rb_add_empty_keyword for adding back an empty hash to argv. - - All of this empty keyword argument support is only for 2.7. It will be - removed in 3.0 as Ruby 3 will not convert empty keyword arguments to - required positional hash arguments. Comment all of the relevant code - to make it obvious this is expected to be removed. - - Add rb_funcallv_kw as an public C-API function, just like rb_funcallv - but with a keyword flag. This is used by rb_obj_call_init (internals - of Class#new). This also required expected call_type enum with - CALL_FCALL_KW, similar to the recent addition of CALL_PUBLIC_KW. - - Add rb_vm_call_kw as a internal function, used by call_method_data - (internals of Method#call and UnboundMethod#bind_call). Add tests - for UnboundMethod#bind_call keyword handling. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2432 - -commit 3fafc549ba909e986917f2b6b96eb14624c26329 - Author: Nobuyoshi Nakada - Date: 2019-09-07 11:35:00 +0900 - - Fix error when checking file modified with git-svn - -commit d783609ac3b2901eb664dd37f964c8fd805dca40 - Author: Nobuyoshi Nakada - Date: 2019-09-07 11:33:26 +0900 - - Get rid of overwriting revision.h and creating .revision.time - -commit 5118aa2d58f70a2f1349daa784705d20b2928869 - Author: Nobuyoshi Nakada - Date: 2019-09-07 01:02:37 +0900 - - Use `git describe --contains` for tags - -commit 3890c9eeee2322b8bf81c04517a4714de77e49ff - Author: Nobuyoshi Nakada - Date: 2019-09-07 01:01:52 +0900 - - Added more debug outputs from VCS::GIT - -commit 71f7b0421acff068b94953f4d3f5b4d987ce5350 - Author: Nobuyoshi Nakada - Date: 2019-09-07 01:00:14 +0900 - - Refined file2lastrev.rb options - - * check --srcdir if given twice or more - * falls back to the current working directory if no --srcdir - option is given. - * define common VCS options. - -commit 799de9122e2bd9c2f4cc7e0611f6f8313876ca1d - Author: Nobuyoshi Nakada - Date: 2019-09-07 00:36:08 +0900 - - Separated VCS.define_options for common VCS options - -commit 4068be1d9f60d8a9ac063c4871986dc26bdd0d56 - Author: MSP-Greg - Date: 2019-09-07 09:14:15 +0900 - - appveyor.yml - msys2 update code - - As AppVeyor's MSYS2 install gets out of date, this may require 'special' code... - - This code also adds updating the database, which currently updates gcc from 9.1.0 to 9.2.0. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2433 - -commit 3bb3fa4051c754af1a26f023a902d1ce67fe964e - Author: Yusuke Endoh - Date: 2019-09-07 09:18:38 +0900 - - eval.c (rb_rescue2): fix a probably wrong return - - This return skips `va_end(ap)`, which is not intended, I guess. - Coverity Scan found this. - -commit 9c0626fa909b57e43a476aa78171e140ae09d31f - Author: Takashi Kokubun - Date: 2019-09-07 09:14:32 +0900 - - Upgrade benchmark-driver to v0.15.4 - - Fixing a bug on Windows introduced in v0.15.0 - -commit 258843106f343d05732499dd1832958eb1bf64f0 - Author: Jeremy Evans - Date: 2019-06-05 11:08:54 +0900 - - Fix SortedSet subclasses that override initialize - - The first time SortedSet#initialize is called, it overwrites - itself, then recalls #initialize, which results in calling the - subclass's initialize, not the current initialize. - - Just inline the default initialize behavior to avoid this issue. - - No test for this as it can only be triggered the very first time - that SortedSet#initialize is called. - - Fixes [Bug #15830] - -commit 2d076dd5ac8fc1102939f04236878446348599d0 - Author: git - Date: 2019-09-07 00:45:44 +0900 - - * 2019-09-07 [ci skip] - -commit bb53ddfe0e826bcb6a7ff823c20ac3e7599500b1 - Author: Takashi Kokubun - Date: 2019-09-07 00:43:26 +0900 - - Upgrade benchmark-driver to v0.15.3 - - It got some nice features for better support of - benchmark_driver-output-charty, Windows, ridk, and rbenv. - -commit ade1283ca276f7d589ffd3539fbc7b9817f682d5 - Author: Yusuke Endoh - Date: 2019-09-06 23:18:26 +0900 - - Fix a use-after-free bug by avoiding rb_str_new_frozen - - `str2 = rb_str_new_frozen(str1)` seems to make str1 a shared string that - refers to str2, but str2 is not marked as STR_IS_SHARED_M nor - STR_NOFREE. - `rb_fstring(str2)` frees str2's ptr because it is not marked, and the - free'ed pointer is the same as str1's ptr. - After that, accessing str1 may cause use-after-free memory corruption. - - I guess this is a bug of rb_str_new_frozen, but I'm completely unsure - what it should be; the string states and flags are not documented. - So, this is a workaround for [Bug #16136]. I confirmed that rspec of - activeadmin runs gracefully. - -commit 055b44109316bfc5461d6ac820619f893cea536c - Author: Nobuyoshi Nakada - Date: 2019-09-06 22:15:36 +0900 - - VCS::GIT no longer accepts remote repository - -commit 733aa2f8b578d03bbcb91d2f496b01e3b990c7e8 - Author: Nobuyoshi Nakada - Date: 2019-09-06 18:43:10 +0900 - - Stop setting same flags as cflags to cxxflags - -commit dd26c9f333b9681b3b14cf01969cda9d77368cbc - Author: Nobuyoshi Nakada - Date: 2019-09-06 18:35:37 +0900 - - Check clang++ as CXX when CXX is bare clang without suffix - -commit 53d21087da078cf999cc4757b03b2ff0fab4c2cf - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-06 18:17:47 +0900 - - save committers' weekend from CI failures - - Kill the failing tests. - -commit 99bfa6c16562f7af7fb6daf3cf89680ef30d4163 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-06 17:47:24 +0900 - - Try to fix compile error on win32 - - https://github.com/ruby/ruby/runs/213995386#step:7:810 - ``` - cxxanyargs.cpp - C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\corecrt_malloc.h(54): error C2485: '__restrict': unrecognized extended attribute - ``` - -commit 1851dc269cb7a957fcb1fe2e97b7b76c2a52d096 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-06 16:50:57 +0900 - - avoid name mangling - - Otherwise the dynamic linker cannot find this function. - See also https://ci.appveyor.com/project/ruby/ruby/builds/27224231/job/4pg6lxlsnsjotu2l - -commit 2aa4fb57d103b8deec43de6735e23a1c9b8c8fa0 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-06 16:42:45 +0900 - - nullptr is a C++11ism. - - Should use numeric 0 for maximum portability. - See also https://travis-ci.org/ruby/ruby/jobs/581543798 - -commit 7516c48b2744b563a6cb420c23c1ff8bdea72da6 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-06 16:33:30 +0900 - - fix Visual Studio compilation error - - See also https://github.com/ruby/ruby/runs/213964487 - -commit 04f570e266ba7f9d155ceea943043532a7e2f859 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-06 15:50:23 +0900 - - add test for cxxanyargs.hpp - -commit a569bc09e25a2ba813d0bec1228d9ff65330a3db - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-05 23:50:45 +0900 - - add include/ruby/backward/cxxanyargs.hpp - - Compilation of extension libraries written in C++ are reportedly - broken due to https://github.com/ruby/ruby/pull/2404 - - The root cause of this issue was that the definition of ANYARGS - differ between C and C++, and that of C++ is incompatible with the - updated ones. - - We are using the incompatibility against itself. In C++ two distinct - function prototypes can be overloaded. We provide the old, ANYARGSed - prototypes in addition to the current granular ones; and let the - older ones warn about types. - -commit d6a94cffda6763c7ad3ac3830dcfe6a87e405fe4 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-06 10:38:40 +0900 - - doxygen update [ci skip] - -commit 41b7c335d3ede90e7bc1b469de242df392dc6adc - Author: Yusuke Endoh - Date: 2019-09-06 13:04:36 +0900 - - Revert "Add a temporal stack dumper for debugging on trunk-mjit" - - This reverts commit 433c9c00d96124e3b416d0a20ff795b0ad4273fa. - - Successfully captured some traces, and - 3b60e5e6bc2c84b971bea9c8312eb5d33ada2ff5 seems to fix the issue. - -commit 3b60e5e6bc2c84b971bea9c8312eb5d33ada2ff5 - Author: Takashi Kokubun - Date: 2019-09-06 10:34:33 +0900 - - Try shrinking tested VM stack max - -commit dd81af7b6a7539473b6d7a7e35637b4a7d986523 - Author: git - Date: 2019-09-06 09:50:59 +0900 - - * remove trailing spaces. [ci skip] - -commit d3cf0eb2142902245b7d45b557f73bbb1f02ba5a - Author: Jeremy Evans - Date: 2019-09-06 08:06:38 +0900 - - Mark rb_warn_keyword_to_last_hash as static inline - - mame pointed out that vm_args.c is included in vm_insnhelper.c. - -commit 5045fe6017996a9ce2562667284b392e01b5759e - Author: Jeremy Evans - Date: 2019-09-06 08:02:45 +0900 - - Mark rb_warn_keyword_to_last_hash at MJIT_FUNC_EXPORTED - - Hopefully this fixes MJIT errors on AppVeyor. - -commit 729de9ee68b868b43375eb4339b2d59f0bb8e7e8 - Author: Jeremy Evans - Date: 2019-09-06 05:07:28 +0900 - - Convert empty keyword hash to required positional argument and warn for method_missing - - This is the same as the bmethod, sym proc, and send cases, - where we don't remove the keyword splat, so later code can - move it to a required positional parameter and warn. - -commit e220b467ef3faf24140cba572b2d67973391aaa5 - Author: Jeremy Evans - Date: 2019-09-06 05:03:09 +0900 - - Convert empty keyword hash to required positional argument and warn for sym procs - - This is the same as the bmethod and send cases, where we don't - remove the keyword splat, so later code can move it to to a - a required positional parameter and warn. - -commit e2878a96f77978b224f8461244cd3e1efc248d83 - Author: Jeremy Evans - Date: 2019-09-06 04:43:06 +0900 - - Convert empty keyword hash to required positional argument and warn for lambda and bmethod - - The lambda case is similar to the attr_writer case, except we have - to determine the number of required parameters from the iseq - instead of being able to assume a single required parameter. - - This fixes a lot of lambda tests which were switched to require - warnings for all usage of keyword arguments. Similar to method - handling, we do not warn when passing keyword arguments to - lambdas that do not accept keyword arguments, the argument is - just passed as a positional hash in that case, unless it is empty. - If it is empty and not the final required parameter, then we - ignore it. If it is empty and the final required parameter, then - we pass it for backwards compatibility and emit a warning, as in - Ruby 3 we will not pass it. - - The bmethod case is similar to the send case, in that we do not - want to remove empty keyword splats in vm_call_bmethod, as that - prevents later call handling from moving them to required - positional arguments and warning. - -commit e7274a8ec43b5b20e42842e730dbabae58d2e6a2 - Author: Jeremy Evans - Date: 2019-09-06 04:25:14 +0900 - - Convert empty keyword hash to required positional argument and warn - - In general, we want to ignore empty keyword hashes. The only case - where we want to allow them for backwards compatibility is when - they are necessary to satisfy the final required positional argument. - In that case, we want to not ignore them, but we do want to warn, - as that will be going away in Ruby 3. - - This commit implements this support for regular methods and - attr_writer methods. - - In order to allow send to forward arguments correctly, send no - longer removes empty keyword hashes. It is the responsibility of - the final method to remove the empty keyword hashes now. This - change was necessary as otherwise send could remove the empty - keyword hashes before the regular or attr_writer methods could - move them to required positional arguments. - - For completeness, add tests for keyword handling regular - methods calls. - - This makes rb_warn_keyword_to_last_hash non-static in vm_args.c - so it can be reused in vm_insnhelper.c, and also moves declarations - before statements in the rb_warn_* functions in vm_args.c. - -commit d1ef73b59cede58f2173fa0f4ff7480a820f25d6 - Author: Jeremy Evans - Date: 2019-09-06 02:36:28 +0900 - - Always remove empty keyword hashes when calling methods - - While doing so is not backwards compatible with Ruby 2.6, it is - necessary for generic argument forwarding to work for all methods: - - ```ruby - def foo(*args, **kw, &block) - bar(*args, **kw, &block) - end - ``` - - If you do not remove empty keyword hashes, and bar does not accept - keyword arguments, then a call to foo without keyword arguments - calls bar with an extra positional empty hash argument. - -commit 55b96c5d2d7d8bcc2953484bd2f9c9519b252dae - Author: Yusuke Endoh - Date: 2019-09-05 19:29:25 +0900 - - Add a keyword-to-last-hash warning for some case of define_method method - - and lambda. - - When define_method is a simple iseq (`define_method(:m) {|x| ... }`), - passing keywords to it (`m(**kw)`) didn't print a warning. - -commit dd83f7bf98764b27385735f6f39dd090dc4854f9 - Author: Yusuke Endoh - Date: 2019-09-05 19:07:05 +0900 - - define_method should not drop the empty keyword hash - - Similar to 38e9c1bc35d5549575fbb263afff560e97db068e - -commit 70f2780892330f8d1b612002c437fc2ca739fc7f - Author: Yusuke Endoh - Date: 2019-09-05 18:57:19 +0900 - - vm_call_bmethod should not drop the empty keyword hash - - Similar to 38e9c1bc35d5549575fbb263afff560e97db068e - -commit 252e2990099557a54577ad8915b689761117cd7a - Author: Yusuke Endoh - Date: 2019-09-05 18:54:26 +0900 - - vm_call_opt_send should not drop the empty keyword hash - - Now the mechanism that conveys kw_splat flag is gradually established, - so the hack to drop the empty keyword hash is not needed for - vm_call_opt_send. - -commit 4615886c76c0e906a349440ac7e232ad0ba5ce30 - Author: Yusuke Endoh - Date: 2019-09-05 18:52:22 +0900 - - test_method_missing_kwsplat should call the target directly - - not via Object#send which uses a fast path vm_call_opt_send. - -commit acee6302419f02792ec331d384f430c5fc6bdb70 - Author: Yusuke Endoh - Date: 2019-09-05 18:34:07 +0900 - - vm_insnhelper.c: Do not read `ci->flag` after CALLER_SETUP_ARG - - Actually, the following call is wrongly warned without this change. - - ``` - class C - def method_missing(x, *args, **opt) - end - end - C.new.foo(k: 1) - # warning: The last argument is used as the keyword parameter - # warning: for `method_missing' defined here - ``` - -commit eda8dcea164b561359f638b1489d0ab12659c9a2 - Author: Yusuke Endoh - Date: 2019-09-05 17:31:00 +0900 - - Add a comment that some ci->flag is inconsistent after CALLER_SETUP_ARG - -commit 0bfe3bf4d1a2cf6659a99c7466c733cf922ee0e0 - Author: Yusuke Endoh - Date: 2019-09-05 17:03:38 +0900 - - Ignore an empty keyword splat for attr_reader/writer methods - -commit 437ff408790d5426e0ee03a4b22171bf745471a7 - Author: Yusuke Endoh - Date: 2019-09-05 16:54:43 +0900 - - C method should accept a keyword hash (for compatibility with 2.6) - -commit c5555e2eb8631e649cc9377f0bd75ebc2788cc7d - Author: Yusuke Endoh - Date: 2019-09-05 16:27:26 +0900 - - CALLER_SETUP_ARG removes an empty keyword hash from argv - - ...only when a "remove_empty_keyword_hash" flag is specified. - - After CALLER_SETUP_ARG is called, `ci->flag & VM_CALL_KW_SPLAT` must not - be used. Instead. use `calling->kw_splat`. This is because - CALLER_SETUP_ARG may modify argv and update `calling->kw_splat`, and - `ci->flag & VM_CALL_KW_SPLAT` may be inconsistent with the result. - -commit a23ddf7ff58ec77548d2ecd7f9f202aa3eff9fc7 - Author: Yusuke Endoh - Date: 2019-09-05 16:24:46 +0900 - - vm_argc.c (vm_caller_setup_arg_kw): "cfunc" argument is no longer used - -commit 030b8e5edf1056e59c37bc52ed6f4deca7e8ac41 - Author: Yusuke Endoh - Date: 2019-09-05 12:28:36 +0900 - - Set calling->kw_splat = 1 in vm_caller_setup_arg_kw - - There are two styles that argv contains keyword arguments: one is - VM_CALL_KWARG which contains value elements in argv (to avoid a hash - object creation if possible), and the other is VM_CALL_KW_SPLAT which - contains one last hash in argv. - - vm_caller_setup_arg_kw translates argv from the VM_CALL_KWARG style to - the VM_CALL_KW_SPLAT style. - `calling->kw_splat` means that argv is the VM_CALL_KW_SPLAT style. - - So, instead of setting `calling->kw_splat` at many places, it would be - better to do so when vm_caller_setup_arg_kw is called. - -commit 1fffd33189ddb4dfdefe2ada09ec884f89e305ce - Author: Jeremy Evans - Date: 2019-09-05 07:47:53 +0900 - - Fix passing keywords without splats to sym procs, define_method, and method_missing - -commit 6f9b86616a8ad60cfed2979e2a0f8398a12e7c85 - Author: Jeremy Evans - Date: 2019-09-04 06:54:37 +0900 - - Make Symbol#to_proc calls handle keyword arguments - - Make rb_sym_proc_call take a flag for whether a keyword argument - is used, and use the new rb_funcall_with_block_kw function to - pass that information. - -commit 38dae1d510b931516ba1229a1ffbe5f6e470e292 - Author: Jeremy Evans - Date: 2019-09-04 06:53:16 +0900 - - If removing an empty keyword splat hash, unset the kw_splat flag - - Otherwise the last positional hash could be considered as the - keyword arguments. - -commit 7fc874bf4cbdd87b3d6fe05dc5959175f3fe94b8 - Author: Jeremy Evans - Date: 2019-09-04 06:49:03 +0900 - - Add rb_funcall_with_block_kw - - This is needed for C functions to call methods with keyword arguments. - This is a copy of rb_funcall_with_block with an extra argument for - the keyword flag. - - There isn't a clean way to implement this that doesn't involve - changing a lot of function signatures, because rb_call doesn't - support a way to mark that the call has keyword arguments. So hack - this in using a CALL_PUBLIC_KW call_type, which we switch for - CALL_PUBLIC later in the call stack. - - We do need to modify rm_vm_call0 to take an argument for whether - keyword arguments are used, since the call_type is no longer - available at that point. Use the passed in value to set the - appropriate keyword flag in both calling and ci_entry. - -commit e3cb3e11af4323aba002a84044375180dd24248c - Author: Jeremy Evans - Date: 2019-09-04 03:55:32 +0900 - - Set VM_FRAME_FLAG_CFRAME_KW if kw_splat set in vm_yield_with_cfunc - -commit fd2ef1a9bfa489842472d183ea10b6fd9838c460 - Author: Jeremy Evans - Date: 2019-09-04 03:50:46 +0900 - - Add VM_NO_KEYWORDS - - I think this is easier to read than using literal 0 with comments - in every case where it is used. - -commit ce04392d8d4f8cf14c70bbf1ad3544c7db4e1671 - Author: Yusuke Endoh - Date: 2019-09-04 01:32:42 +0900 - - Propagate kw_splat information - - The kw_splat flag is whether the original call passes keyword or not. - Some types of methods (e.g., bmethod and sym_proc) drops the - information. This change tries to propagate the flag to the final - callee, as far as I can. - -commit 3754e155309ed430250781c616a6e52b54ef511d - Author: Nobuyoshi Nakada - Date: 2019-08-29 22:07:45 +0900 - - Warn local variables which conflict with new numbered parameters - -commit 092f31e7e23c0ee04df987f0c0f979d036971804 - Author: Aaron Patterson - Date: 2019-09-06 04:44:23 +0900 - - Reverting node marking until I can fix GC problem. - - Looks like we're getting WB misses during stressful GC on startup. I am - investigating. - -commit f211ab20157a840770567ea182b1372e339cd82a - Author: Aaron Patterson - Date: 2019-09-06 03:37:03 +0900 - - I forgot to add `break` in my case statements - - Give me a break. - -commit 8f096226e1b76f95f4d853d3dea2bc75eeeb5244 - Author: Aaron Patterson - Date: 2019-09-06 03:04:43 +0900 - - Stash tmpbuffer inside internal structs - - I guess those AST node were actually used for something, so we'd better - not touch them. Instead this commit just puts the tmpbuffer inside a - different internal struct so that we can mark them. - -commit 8cd845aa5b69e49c1092a482f8c14f85f899e038 - Author: Aaron Patterson - Date: 2019-09-05 09:00:09 +0900 - - add debugging code to the mark function - -commit 01aa2462b5abb6833af83f47961932ebca587573 - Author: Aaron Patterson - Date: 2019-09-05 08:21:05 +0900 - - lazily allocate the mark array - -commit 429ed8d587423414fbbf2f562479c69562d52598 - Author: Aaron Patterson - Date: 2019-09-05 06:37:13 +0900 - - Don't change DSTR nodes to ARRAY nodes - - DSTR nodes are allocated in to the "markable" bucket where ARRAY nodes - are not. Switching buckets can cause errors during GC. - -commit 545b6db3fb367944f72cee5d41892eed63574634 - Author: Aaron Patterson - Date: 2019-09-05 01:38:17 +0900 - - Create two buckets for allocating NODE structs - - This commit adds two buckets for allocating NODE structs, then allocates - "markable" NODE objects from one bucket. The reason to do this is so - when the AST mark function scans nodes for VALUE objects to mark, we - only scan NODE objects that we know to reference VALUE objects. If we - *did not* divide the objects, then the mark function spends too much - time scanning objects that don't contain any references. - -commit f0fd1c0cd8d34b870a3011a36f5179d1b5f3547d - Author: Aaron Patterson - Date: 2019-09-05 08:00:19 +0900 - - Stash the imemo buf at the end of the ID list - - Now we can reach the ID table buffer from the id table itself, so when - SCOPE nodes are marked we can keep the buffers alive. This eliminates - the need for the "mark array" during normal parse / compile (IOW *not* - Ripper). - -commit 64817a7cfd4a258b45356e6da8fbdd0040b3231b - Author: Aaron Patterson - Date: 2019-09-04 06:01:07 +0900 - - Mark some tmpbufs via node objects - - This way we don't need to add the tmpbufs to a Ruby array for marking - -commit 581fcde0884e493206b04b3e6b7a069b941dfe46 - Author: Aaron Patterson - Date: 2019-08-30 07:22:41 +0900 - - Directly mark node objects instead of using a mark array - - This patch changes the AST mark function so that it will walk through - nodes in the NODE buffer marking Ruby objects rather than using a mark - array to guarantee liveness. The reason I want to do this is so that - when compaction happens on major GCs, node objects will have their - references pinned (or possibly we can update them correctly). - -commit 70d3596a4a2ef023243bf4805ce2a9cd6fdc0487 - Author: git - Date: 2019-09-06 01:58:03 +0900 - - * 2019-09-06 [ci skip] - -commit c6464c44c02fdbb597ca8027af0bc0db28d56f66 - Author: Jeremy Evans - Date: 2019-09-05 04:00:25 +0900 - - Fix code locations of array node inside hash node when multiple kw splats - - This is broken at least since 2.5 (I didn't check earlier versions). - It resulted in failure in test_ast.rb when the tests were added before - the parser change. - - Basically, in remove_duplicate_keys, if the node is modified, set - the location information to the previous location information. The - removal of keys should not affect the location in the code. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2428 - -commit 1d5066efb08cbb328ba528a5f8be1708584b659f - Author: Jeremy Evans - Date: 2019-09-05 02:54:12 +0900 - - Make m(**{}) mean call without keywords - - Previously, **{} was removed by the parser: - - ``` - $ ruby --dump=parse -e '{**{}}' - @ NODE_SCOPE (line: 1, location: (1,0)-(1,6)) - +- nd_tbl: (empty) - +- nd_args: - | (null node) - +- nd_body: - @ NODE_HASH (line: 1, location: (1,0)-(1,6))* - +- nd_brace: 1 (hash literal) - +- nd_head: - (null node) - ``` - - Since it was removed by the parser, the compiler did not know - about it, and `m(**{})` was therefore treated as `m()`. - - This modifies the parser to not remove the `**{}`. A simple - approach for this is fairly simple by just removing a few - lines from the parser, but that would cause two hash - allocations every time it was used. The approach taken here - modifies both the parser and the compiler, and results in `**{}` - not allocating any hashes in the usual case. - - The basic idea is we use a literal node in the parser containing - a frozen empty hash literal. In the compiler, we recognize when - that is used, and if it is the only keyword present, we just - push it onto the VM stack (no creation of a new hash or merging - of keywords). If it is the first keyword present, we push a - new empty hash onto the VM stack, so that later keywords can - merge into it. If it is not the first keyword present, we can - ignore it, since the there is no reason to merge an empty hash - into the existing hash. - - Example instructions for `m(**{})` - - Before (note ARGS_SIMPLE): - - ``` - == disasm: #@-e:1 (1,0)-(1,7)> (catch: FALSE) - 0000 putself ( 1)[Li] - 0001 opt_send_without_block , - 0004 leave - ``` - - After (note putobject and KW_SPLAT): - - ``` - == disasm: #@-e:1 (1,0)-(1,7)> (catch: FALSE) - 0000 putself ( 1)[Li] - 0001 putobject {} - 0003 opt_send_without_block , - 0006 leave - ``` - - Example instructions for `m(**h, **{})` - - Before and After (no change): - - ``` - == disasm: #@-e:1 (1,0)-(1,12)> (catch: FALSE) - 0000 putself ( 1)[Li] - 0001 putspecialobject 1 - 0003 newhash 0 - 0005 putself - 0006 opt_send_without_block , - 0009 opt_send_without_block , - 0012 opt_send_without_block , - 0015 leave - ``` - - Example instructions for `m(**{}, **h)` - - Before: - - ``` - == disasm: #@-e:1 (1,0)-(1,12)> (catch: FALSE) - 0000 putself ( 1)[Li] - 0001 putspecialobject 1 - 0003 newhash 0 - 0005 putself - 0006 opt_send_without_block , - 0009 opt_send_without_block , - 0012 opt_send_without_block , - 0015 leave - ``` - - After (basically the same except for the addition of swap): - - ``` - == disasm: #@-e:1 (1,0)-(1,12)> (catch: FALSE) - 0000 putself ( 1)[Li] - 0001 newhash 0 - 0003 putspecialobject 1 - 0005 swap - 0006 putself - 0007 opt_send_without_block , - 0010 opt_send_without_block , - 0013 opt_send_without_block , - 0016 leave - ``` - - Notes: - Merged: https://github.com/ruby/ruby/pull/2428 - -commit 433c9c00d96124e3b416d0a20ff795b0ad4273fa - Author: Yusuke Endoh - Date: 2019-09-05 22:14:01 +0900 - - Add a temporal stack dumper for debugging on trunk-mjit - - This must be definitely removed after we collect the stack traces :-) - http://ci.rvm.jp/results/trunk-mjit@silicon-docker/2245710 - -commit 0036aa35321b036be6e49e07b19f92c061ca4135 - Author: yuuji.yaginuma - Date: 2019-09-05 08:33:43 +0900 - - Add version that FreeBSD supports `CLOCK_PROCESS_CPUTIME_ID` [ci skip] - - Seems FreeBSD already supported `CLOCK_PROCESS_CPUTIME_ID`. - That added by https://reviews.freebsd.org/rS239347 and the doc was updated - by https://reviews.freebsd.org/rS315694. - - I confirmed `CLOCK_PROCESS_CPUTIME_ID` constant exists in 9.3.0 branch. - https://github.com/freebsd/freebsd/blob/release/9.3.0/sys/sys/time.h#L269 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2429 - -commit 1c4af1a77fb2dad27d523fe5d97ea4a27b145e3c - Author: David Rodríguez - Date: 2019-05-23 18:40:27 +0900 - - Add tests for `File.absolute_path?` - - [Feature #15868] - -commit 2a166cfea22b90e39e3fe9bafab6b806ed4813f6 - Author: David Rodríguez - Date: 2019-09-05 20:00:50 +0900 - - Add `File.absolute_path?` (#2198) - - In order to check whether a path is absolute or not in a portable way. - - [Feature #15868] - -commit d9e6315177be2a1264213a1e7cb215312a23384a - Author: David Rodríguez - Date: 2019-08-23 00:36:29 +0900 - - [rubygems/rubygems] Bump rubocop to 0.74.0 and fix new offenses - - https://github.com/rubygems/rubygems/commit/d4fc383497 - -commit 0b9b0774c3dc0c4113335a57717bbc9d3d9595e8 - Author: Alexander Pakulov - Date: 2019-09-03 03:36:08 +0900 - - [rubygems/rubygems] Minor fix - - https://github.com/rubygems/rubygems/commit/95c1f4e179 - -commit 565828a778ab57affad9216721659a489176bf2d - Author: bronzdoc - Date: 2019-08-24 07:41:44 +0900 - - [rubygems/rubygems] Fix Layout/SpaceAroundOperators: Operator = should be surrounded by a single space. - - https://github.com/rubygems/rubygems/commit/eaa38ebeb1 - -commit 73574756f944280b920322d0034772c9aeb2bdac - Author: bronzdoc - Date: 2019-08-24 06:21:57 +0900 - - [rubygems/rubygems] Add missing parentheses - - https://github.com/rubygems/rubygems/commit/f5972338e0 - -commit 92be07b1e1a9ca3b0e2588817629c23ab1201701 - Author: bronzdoc - Date: 2019-08-24 06:19:54 +0900 - - [rubygems/rubygems] Remove unnecessary gem_name method - - https://github.com/rubygems/rubygems/commit/d1bb122651 - -commit b11cfed4c4fae51f7111c6cc0a3ec436a9c8faa3 - Author: bronzdoc - Date: 2019-08-22 14:35:39 +0900 - - [rubygems/rubygems] Error out if there are multiple gemspecs and no gemspec is specified - - https://github.com/rubygems/rubygems/commit/547947bbf0 - -commit 400d693863cc8b500d9bcaee9529a395f3fe6da7 - Author: bronzdoc - Date: 2019-08-19 06:25:29 +0900 - - [rubygems/rubygems] Remove useless gem setup - - https://github.com/rubygems/rubygems/commit/c8913e37a7 - -commit 6cacbf542caa9954bf760dd10a6ae3c92c9f15e4 - Author: bronzdoc - Date: 2019-08-19 06:19:52 +0900 - - [rubygems/rubygems] Test building a gem with multiple gemspec without a gem name specified - - https://github.com/rubygems/rubygems/commit/38c72fd145 - -commit a02da1012bb391ae01affac7454ea28996fd7dbf - Author: bronzdoc - Date: 2019-08-19 05:57:41 +0900 - - [rubygems/rubygems] Build the first gemspec we found if no gemspec is specified - - https://github.com/rubygems/rubygems/commit/ab186266b7 - -commit bcf51dd76332bc28ee75494c51828a36774ff99f - Author: bronzdoc - Date: 2019-08-19 05:04:08 +0900 - - [rubygems/rubygems] Improve gemspec assignment and error message - - https://github.com/rubygems/rubygems/commit/dc70c5a192 - -commit 68937fe0e4bf6e0943fe165e0a157058cff760fe - Author: bronzdoc - Date: 2019-08-19 04:53:41 +0900 - - [rubygems/rubygems] Make passing a gem name to be optional - - https://github.com/rubygems/rubygems/commit/4ba4ffebbe - -commit 95326150faa0854ed6cd0877e0069d2080bc5005 - Author: bronzdoc - Date: 2019-08-17 23:54:17 +0900 - - [rubygems/rubygems] Move build gem logic to its own method - - https://github.com/rubygems/rubygems/commit/a16eacd650 - -commit fea91d69a3b4aebd5e69058f9ec51adf2896cdfd - Author: David Rodríguez - Date: 2019-08-22 03:17:11 +0900 - - [rubygems/rubygems] Don't fail when `uninstall --all` with default gem - - Instead, display an informative message saying that uninstallation of - specific versions is being skipped because of being default gems. - - https://github.com/rubygems/rubygems/commit/b44845aa1d - -commit f9f6a3d793186bd4b8897f775dcdcc9719361c11 - Author: David Rodríguez - Date: 2019-08-23 00:32:47 +0900 - - [rubygems/rubygems] Little refactor to avoid rubocop's false positive - - Otherwise it detects duplicate methods here, because it doesn't see that - we are reopening the class in two different places. - - https://github.com/rubygems/rubygems/commit/ae3fb47f5f - -commit d84b9b6d0a938cec9f0c1266702d9c4aecc0423a - Author: Alexander Pakulov - Date: 2019-08-22 07:19:10 +0900 - - [rubygems/rubygems] Use IAM role to extract security-credentials for EC2 instance - - https://github.com/rubygems/rubygems/commit/9a401646e1 - -commit d219be4a1c237356670ebafd415e983433362e72 - Author: David Rodríguez - Date: 2019-08-22 03:05:24 +0900 - - [rubygems/rubygems] Move empty check earlier - - https://github.com/rubygems/rubygems/commit/fc224e9717 - -commit 7a2bd91ed24cceecc627df574fc109cdd6b258dd - Author: Kazuhiro NISHIYAMA - Date: 2019-09-05 17:51:02 +0900 - - Try to fix `invalid option` - - https://github.com/ruby/ruby/runs/212727409#step:11:67 - ``` - invalid option: -j5 - ``` - -commit f4df9fb46b35335530fd99fabfa65772e6aaf1df - Author: Kazuhiro NISHIYAMA - Date: 2019-09-05 17:47:51 +0900 - - Change name to `Tests (test-bundled-gems)` in macos.yml too - -commit 436099ee0459ee51ceccb3eb343a5f281556bf61 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-05 15:02:07 +0900 - - add tests - - Some coverage improvements. - -commit 8a608f1b1f9812d0bd1d7589a03e8abd653b8364 - Author: Nobuyoshi Nakada - Date: 2019-09-05 14:37:05 +0900 - - Removed -git option of make-snapshot - - Git is not for direct access to a remote repository. - Most of its operations need a local clone. - -commit 41bc766763dba63ae2529f2f9070b8e26399745c - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-05 14:29:11 +0900 - - interesting (but annoying) tidbit warning suppressed - - This changeset is to suppress clang's -Wimplicit-int-float-conversion - warning. - - In 64 bit signed long and IEEE 754 double combination (== almost - everyone these days), LONG_MAX is 9,223,372,036,854,775,807. This - value is _not_ exactly representable by double. The nearest value - that a double can represent is 9,223,372,036,854,775,808. It is one - greater than LONG_MAX. Let's call this value the "x". - - The expression `LONG_MAX < yi` is a long versus double comparison. - According to ISO/IEC 9899:1999 Section 6.3.1.8 (that defines the - "usual rithmetic conversions"), The long value must first be casted - into double. Because FLT_ROUNDS is typically 1 ("round to the - nearest" mode), the conversion yields the "x" value shown above. So - the comparison is in fact `x < yi`. - - This comparison is false for yi == x situation, i.e. yi is still - bigger than LONG_MAX. On such situation the `yn = (long)yi;` - statement that appear several lines below renders underfined - behaviour, as per ISO/IEC 9899:1999 Section 6.3.1.3. - - To remedy, we just change the comparison from `<` to `<=` so that - yi == x situation can properly be handled. - -commit dd2b9d4a96e6c9784daf645efc79bef11eb1decb - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-04 15:55:02 +0900 - - hide rb_funcallv_with_cc from public - - Requested by ko1. Also, because now that this function is internal - use only, why not just directly use struct rb_call_cache to purge - the ZALLOC. - -commit b005d7c2e208790b89b332d5f8ca56334039d6ae - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-04 15:10:10 +0900 - - use existing vm_search_method() - - Ko1 plans to implement Guild. That can interface the caching - mechanism introduced here. To prevent future breakage we would - better avoid rolling our own code here. Instead use the existing - vm_search_method() which would be modified by him. - - This commit deletes some asserions, but they are in fact checked - inside of vm_search_method(). - -commit 7a1f650c130768eee07b8f64e73e218a9d9f8638 - Author: git - Date: 2019-09-05 08:33:02 +0900 - - * 2019-09-05 [ci skip] - -commit 9f59d30daa0d2fba5c98a9b6148b935baaae67da - Author: Nobuyoshi Nakada - Date: 2019-09-04 23:54:41 +0900 - - Separate VCS::DEBUG_OUT - -commit f6da4a544760e00d932fea9a586bd869e82ad339 - Author: Akinori MUSHA - Date: 2019-09-04 16:07:40 +0900 - - Describe #eager in the Enumerator::Lazy section - -commit 1d4bd229b898671328c2a942b04f08065c640c28 - Author: Akinori MUSHA - Date: 2019-06-05 20:39:21 +0900 - - Implement Enumerator::Lazy#eager [Feature #15901] - -commit 2a6457b5b7d67378528235cee7b9cb93fed00204 - Author: Urabe, Shyouhei - Date: 2018-10-11 11:47:49 +0900 - - add rb_funcallv_with_cc() - - Why not cache the method entry at each caller site. The void** - is in fact a method entry, but this struct is hidden from ruby.h - so intentionally left opaque. - - Notes: - Merged: https://github.com/ruby/ruby/pull/1981 - -commit ccad34f4533ffe532fea796def06808dc5a85877 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-04 12:51:39 +0900 - - Add TEST_BUNDLED_GEMS_ALLOW_FAILURES=minitest - -commit 967ef0d4f6c84b5c204247a8a960656d6264ef49 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-04 12:36:45 +0900 - - Use `git pull` instead of `git fetch` if master branch - -commit 1e30d0af7d0258bd3a9e6b072e6517f8db78f853 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-04 12:03:28 +0900 - - `$JOBS` does not set in `env:` - -commit b0d0b850bc61e158fb7caac4123af824b12938f1 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-04 11:50:37 +0900 - - Use RUBY_TESTOPTS instead of TESTOPTS - - https://github.com/ruby/ruby/pull/2417#issuecomment-526884646 - > `TESTOPTS` is defaulted to `$(RUBY_TESTOPTS)` in `common.mk` file. - > Use the latter name to pass options via an environment variable. - -commit c14b67b2a8cf60b37cfb221d8b97c6eb91833522 - Author: Takashi Kokubun - Date: 2019-09-04 10:53:20 +0900 - - Check frozen flag on MJIT setinstancevariable - - It does not seem to have a significant performance impact, hopefully? - - ``` - $ benchmark-driver -v benchmark.yml --rbenv 'before --jit;after --jit' --repeat-count=24 --output=all - before --jit: ruby 2.7.0dev (2019-09-03T21:02:24Z master 77596fb7a9) +JIT [x86_64-linux] - after --jit: ruby 2.7.0dev (2019-09-04T01:54:44Z master 7363e22d79) +JIT [x86_64-linux] - Calculating ------------------------------------- - before --jit after --jit - Optcarrot Lan_Master.nes 48.44054595799523 71.67010255902900 fps - 71.32797692837639 71.97846863769546 - 72.51921961607691 78.87360980544105 - 73.54082925611047 79.80408132389941 - 74.03503843709451 79.85739528572826 - 74.04863857926493 79.89850834901381 - 75.30266276129467 80.34607233076015 - 75.69063990896244 80.88474397425360 - 75.70458132587405 81.09234267781642 - 77.39842764662852 82.13766823612643 - 77.76922944068329 82.20398304840373 - 81.17984044023393 82.26722630628272 - 82.85235776076533 82.71375902781254 - 83.04906099135320 82.75893420702198 - 83.10214168136230 82.79668965325972 - 83.71456007558125 82.85131667916379 - 84.06658306760725 82.95676565411722 - 84.25690684305728 83.19972846225775 - 84.27938663923503 83.28510503845854 - 84.45467716218090 83.41003730434703 - 84.51563186125925 83.67773614721280 - 84.56139892968321 84.02082201151110 - 84.69819452180658 84.10495346787033 - 84.78125989622576 84.47867803506055 - ``` - - Note for backporter: - test_jit's `success_count` would be 1 in Ruby 2.6, since 2.7 introduced - "MJIT recompile" on JIT-ed code cancel. - - [Bug #16139] - -commit 77596fb7a91cc119b25ac9e19b3c8682709765b4 - Author: Jeremy Evans - Date: 2019-09-04 06:02:24 +0900 - - Do not turn on keyword_init for Struct subclass if keyword hash is empty - - This was accidentally turned on because there was no checking for - Qundef. - - Also, since only a single keyword is currently supported, simplify - the rb_get_kwargs call. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2423 - - Merged-By: jeremyevans - -commit 39c3252cd175074581855e5f9681cc723c15ff72 - Author: Jeremy Evans - Date: 2019-09-04 03:32:02 +0900 - - Merge pull request #2422 from jeremyevans/rb_keyword_given_p - - Add rb_keyword_given_p to the C-API - - Notes: - Merged-By: jeremyevans - -commit f702cd6ace7e134714d42ffb1606c25b5ded24c7 - Author: git - Date: 2019-09-04 03:31:11 +0900 - - * 2019-09-04 [ci skip] - -commit a7d7a0df91805e59fe6b383ea7ecdad509222966 - Author: Jeremy Evans - Date: 2019-09-03 05:22:26 +0900 - - Fix Enumerator::Lazy#{to_enum,enum_for} where method is defined in Lazy - - Previously, passing to_enum/enum_for a method that was defined in - Lazy itself returned wrong results: - - [1,2,3].to_enum(:map).to_a - # => [1, 2, 3] - [1,2,3].lazy.to_enum(:map).to_a - # => [] - - I'm not sure why methods that are designed to be lazy do not work - with to_enum/enum_for. However, one possible way to work around - this bug is to have to_enum/enum_for use the implementation found - in Enumerable/Enumerator, which is what this commit does. - - While this commit works around the problem, it is a band-aid, not a - real fix. It doesn't handle aliases of Enumerable::Lazy methods, - for instance. A better fix would be appreciated. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2421 - -commit 4a3972c2612c3e3695d7f67b096b2ef8cbb6649a - Author: Jeremy Evans - Date: 2019-09-03 05:20:44 +0900 - - Remove bad expectation in spec - - This spec should not be checking where methods are defined, only - that the method works as expected (returns a Lazy instance). - - Notes: - Merged: https://github.com/ruby/ruby/pull/2421 - -commit e94ac03eb0d07af3cbff20194acf479bf8851c39 - Author: Jeremy Evans - Date: 2019-08-09 05:09:17 +0900 - - Make Enumerator::Lazy#with_index be lazy - - Previously, Enumerator::Lazy#with_index was not defined, so it - picked up the default implementation from Enumerator, which was - not lazy. - - Based on earlier patch from nobu. - - Fixes [Bug #7877] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2421 - -commit fb67d4fc77f211cfec6b2065787d9212f4e2154b - Author: Takashi Kokubun - Date: 2019-09-03 21:49:51 +0900 - - Move an unstable bootstraptest to pending - - This has been unstable on AppVeyor mswin since the introduction - 3fd83cb6fcc483d2eac0795bc139c521a3a59bd2. - https://ci.appveyor.com/project/ruby/ruby/builds/27103307/job/j7xwjmsos2k22cck - - Let's have it in pending.rb to be fixed. - -commit ecc37ee67b90426198bd768d0bf036663e301d06 - Author: Takashi Kokubun - Date: 2019-09-03 21:38:32 +0900 - - Stop testing inexistent instructions - -commit beaabd23087a54364bc8fc8aa7a45dd9f425e19b - Author: Takashi Kokubun - Date: 2019-09-03 21:08:07 +0900 - - Unify SUPPORT_JOKE and OPT_SUPPORT_JOKE - - for simplicity and consistency. - - Now SUPPORT_JOKE needs to be prefixed with OPT_ to make the config - visible in `RubyVM::VmOptsH`, and the inconsistency was introduced. - - As it has never been available for override in configure (no #ifndef - guard), it should be fine to rename the config. - -commit 7cb19b3f5bf0a5dcee0e8444b920e01e7d4e7fae - Author: Takashi Kokubun - Date: 2019-09-03 21:03:10 +0900 - - Roughly retry choco install commands - - to deal with random failures: - https://github.com/ruby/ruby/runs/210617845 - -commit afe8bf24894d742fa43bba3331470f428d819eb0 - Author: Takashi Kokubun - Date: 2019-09-03 20:33:46 +0900 - - Try extending timeout of IO.select - - hoping to stabilize: - https://app.wercker.com/ruby/ruby/runs/mjit-test1/5d6df8a8a952c20008acf75b?step=5d6df90e4971a6000714c627 - -commit 36a0c668b69d90c881246324e76cdb8889047026 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-03 18:36:08 +0900 - - Remove SKIP_DOXYGEN because job.env does not set in `if:` - -commit 83889292f5e0944d6762228c9ca81318f618aa4e - Author: Naohisa Goto - Date: 2019-09-03 16:51:01 +0900 - - Examine TestIO#test_select_exceptfds on Solaris with 1 byte data - - On Solaris, it seems that the select(3C) in this test works only - when sending 1 byte out-of-band data, though I cannot investigate - the cause. The behavior is observed on a Solaris 10 server in - addition to Solaris 11 on which the test had been skipped. - -commit e913fa94d30e5d3007fe52f5d7840576c0f86c78 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-09-03 12:18:36 +0900 - - delete ruby_eval_string_from_file_protect - - Not used from anywhere. - -commit 1a9cc3b27c020c33c87d8b4fe659243aacfeedf3 - Author: Takashi Kokubun - Date: 2019-09-03 02:51:48 +0900 - - Avoid defining unused instructions - - Notes: - Merged: https://github.com/ruby/ruby/pull/2420 - -commit 355ccdeae52cde250f09675e9d5e65b3ddc41f2e - Author: d0 (Daisuke Fujimura) - Date: 2019-09-03 12:52:04 +0900 - - Disable method definition type checks on Cygwin too - - [Bug #16134] - -commit 547887138f19959f649b1c0dbcde5659ae3878ed - Author: Yusuke Endoh - Date: 2019-09-03 12:27:53 +0900 - - test/ruby/test_fiber.rb: reduce the count of object creation to cause GC - - The test consistently fails on OpenBSD. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/openbsd-current/ruby-master/log/20190903T010009Z.fail.html.gz - ``` - 1) Failure: - TestFiber#test_fork_from_fiber [/home/chkbuild/chkbuild/tmp/build/20190903T010009Z/ruby/test/ruby/test_fiber.rb:327]: - [ruby-core:41456]. - <0> expected but was - <1>. - ``` - -commit e6c4ea22d62c95ce0590849219da505fef5a538e - Author: Nobuyoshi Nakada - Date: 2019-09-03 12:28:00 +0900 - - Touch tar file itself to make gz file hash stable - -commit b0a7221dcf998d72efe57cd7ab75260d80941109 - Author: Nobuyoshi Nakada - Date: 2019-09-03 11:43:38 +0900 - - Touch the toplevel directory too - -commit 542a1ade8033d03513647ace64e50dbf31cb5e68 - Author: Nobuyoshi Nakada - Date: 2019-09-03 11:31:14 +0900 - - --date=iso-local does not work with old git - -commit 703f0cd3d007f1ada69957a529870b07fa053230 - Author: Nobuyoshi Nakada - Date: 2019-09-03 11:30:40 +0900 - - Do not keep tar file by the default - -commit c181ecc161c5482426f045322cf00d00b15d96c6 - Author: Nobuyoshi Nakada - Date: 2019-09-03 11:14:07 +0900 - - Align timestamps to make tarball stable - -commit 1994adf938afcdc562f87497156e6d4900f3f06b - Author: Jeremy Evans - Date: 2019-07-16 06:03:28 +0900 - - Make Array#uniq return subclass instance if called on subclass instance - - Previously, Array#uniq would return subclass instance if the - length of the array were 2 or greater, and would return Array - instance if the length of the array were 0 or 1. - - Fixes [Bug #7768] - -commit a848b62819c78e12c420b1ed29605242e292358b - Author: Takashi Kokubun - Date: 2019-09-03 01:53:47 +0900 - - Make the rb_vmdebug_debug_print_post declaration - - consistent with the definition - -commit 1a5a01e9ce9bf69944e4e37a33c8b044657a200a - Author: Takashi Kokubun - Date: 2019-09-03 01:39:00 +0900 - - Add insn tests for newarraykwsplat - -commit e13da00824e0979b2417bcffe94a8668cab7532c - Author: Takashi Kokubun - Date: 2019-09-03 01:25:58 +0900 - - Explain how to run an individual btest in help - -commit 6c3ab99eae1fa84dc28635eb90170b03408b94fb - Author: Takashi Kokubun - Date: 2019-09-03 01:11:18 +0900 - - Now it's always os: linux - -commit 52f0c31558f0870c16da86b8abe524bd7040ea27 - Author: Takashi Kokubun - Date: 2019-09-03 01:06:29 +0900 - - Fix accidental leftover for Linux - - In 91aa8bfff8, my understanding of the branch was inverted. - -commit 91aa8bfff8a9f9c0af96915c120d863fc474e8d5 - Author: Takashi Kokubun - Date: 2019-09-03 01:01:47 +0900 - - Drop unstable Travis osx in favor of GitHub Actions - - For some reason, the Travis osx environment has been really unstable. - It failed on today's cron too: - https://travis-ci.org/ruby/ruby/builds/579843163 - - As we have almost the same test environment (including OpenSSL version) - in GitHub Actions and it seems to be more stable and faster, I think - there's no motivation to maintain Travis osx CI environment. - - By removing this, we'd be able to simplify .travis.yml as well. - -commit 1d68d29c143231303504e28833089485a2355aec - Author: Takashi Kokubun - Date: 2019-09-03 00:36:18 +0900 - - Drop obsoleted IRC channel reference - - travis-ci user does not live in #ruby-ja. Therefore the notification - isn't working anymore. - -commit f1d8d0f47b8018a15d024e1beb5c06f9c4b901d7 - Author: Takashi Kokubun - Date: 2019-09-03 00:30:17 +0900 - - Drop obsoleted branch references - - We don't have topic branches on ruby.git anymore. - -commit d83ade1db59a21b675b6386b94b56eabb90ae83e - Author: Nobuyoshi Nakada - Date: 2019-09-02 23:42:21 +0900 - - Use -z option for git-log - -commit f560609d66502101264706877577220e3ebf5a38 - Author: Jeremy Evans - Date: 2019-09-03 00:21:30 +0900 - - Merge pull request #2418 from jeremyevans/array-empty-kwsplat - - Ignore empty keyword splats in arrays - - Notes: - Merged: https://github.com/ruby/ruby/pull/2418 - - Merged-By: jeremyevans - -commit be86591458c5f29db0d97601f29e15e43d5fe23c - Author: git - Date: 2019-09-03 00:08:39 +0900 - - * 2019-09-03 [ci skip] - -commit 60a49a6ff95ece1a13004a53db001bfde2373afc - Author: Takashi Kokubun - Date: 2019-09-03 00:07:36 +0900 - - Fix SUPPORT_JOKE CI on Travis - - It looks like a flag which cannot be enabled on configure. - -commit 834e77186086a4ae1fc73edbe035e90157d79fab - Author: Takashi Kokubun - Date: 2019-09-02 23:48:38 +0900 - - Run daily cron against SUPPORT_JOKE - -commit ca8ae759d0dee6840aa446499a9e1752f74da500 - Author: Takashi Kokubun - Date: 2019-09-02 23:35:51 +0900 - - Fix compilation error in SUPPORT_JOKE - - This seems to have been broken since 4e15be8bade. - -commit 6a9c5ef186db70dc60fcd42ec820767d9a75543a - Author: Nobuyoshi Nakada - Date: 2019-09-02 23:10:58 +0900 - - Extract git commit log as raw format like git-svn for ChangeLog - -commit 53a7abe2cd6bd07b816a7a7e2235befd5e1b4446 - Author: Yusuke Endoh - Date: 2019-09-02 22:30:12 +0900 - - test/drb/drbtest.rb: Skip test_06_timeout on Solaris10s - - The test seems to have a race condition, which fails on very slow - machine like Solaris10s. So skip it. - - In addition, this change restores timeout guard that was removed at - 0660d7cb538cf5284d50f66adfcbd78609839715. This is because the test gets - stuck forever when something wrong occurs. It is better to fail the - test than stuck. - -commit 8b2e1ca10ecf92ad402decd6b1eab586eded0ddb - Author: Nobuyoshi Nakada - Date: 2019-09-02 16:47:12 +0900 - - Do not clear backtrace in Exception#exception - - [Bug #15558] - -commit 8e38d4c78c1a9b45f604963f85995e9a817ee72c - Author: Nobuyoshi Nakada - Date: 2019-09-02 16:46:28 +0900 - - Rewrote using assert_separately - -commit 6f206b8ec6f945804c56cf8249739c6e94ed65f6 - Author: Nobuyoshi Nakada - Date: 2019-09-02 15:08:53 +0900 - - Prohibit nul-separated glob pattern [Feature #14643] (#2419) - - Notes: - Merged-By: nobu - -commit 633ae3278ecce7c2b98fa1aa6106f963894c538a - Author: Shugo Maeda - Date: 2019-09-02 14:43:35 +0900 - - Add Net::FTP#features and Net::FTP#option - - Patch by darkphnx (Dan Wentworth) . Thanks! - [Feature #15964] - -commit e9b271d1e2251a2e2f613431ae2d9eb2a14ba0a9 - Author: Nobuyoshi Nakada - Date: 2019-09-02 14:31:22 +0900 - - Get rid of interpreting BTS references as label-list [ci skip] - -commit 6724b1f83d2cad57bbcbcdc9756532d825b0c592 - Author: Jeremy Evans - Date: 2019-09-02 14:35:38 +0900 - - Revert "Make Enumerator::Lazy#with_index be lazy" - - This reverts commit 83498854eb5a824f1f83c31fac18c9279f9ee10d. - - This didn't pass rubyspec. - -commit c69545ae32a5ddf928e8992a0d2cf39648c2b555 - Author: Takashi Kokubun - Date: 2019-09-02 14:33:29 +0900 - - Fix opt_regexpmatch1 references - -commit 83498854eb5a824f1f83c31fac18c9279f9ee10d - Author: Jeremy Evans - Date: 2019-08-09 05:09:17 +0900 - - Make Enumerator::Lazy#with_index be lazy - - Previously, Enumerator::Lazy#with_index was not defined, so it - picked up the default implementation from Enumerator, which was - not lazy. - - Based on earlier patch from nobu. - - Fixes [Bug #7877] - -commit 79e3d6bb9e007fc97153c1097daf78e9a201a642 - Author: Urabe, Shyouhei - Date: 2018-09-19 16:46:44 +0900 - - fix shortcut condition - - rb_reg_match expects its first argument to be a Regexp instance. - Should check that. - - Notes: - Merged: https://github.com/ruby/ruby/pull/1959 - -commit ec80d5c4f322b9ae02babd32a491bd05807a8155 - Author: Urabe, Shyouhei - Date: 2018-09-19 11:46:21 +0900 - - delete unused function - - Notes: - Merged: https://github.com/ruby/ruby/pull/1959 - -commit 8ad7fafcddece2096b748178df9a3318cb1ba3ae - Author: Urabe, Shyouhei - Date: 2018-09-19 10:41:56 +0900 - - opt_regexpmatch1 is actually making things slower. - - ---- - - trunk: ruby 2.6.0dev (2018-09-18 trunk 64767) [x86_64-darwin15] - ours: ruby 2.6.0dev (2018-09-18 opt_regexpmatch 64775) [x86_64-darwin15] - last_commit=opt_regexpmatch1 is actually making things slower. - Calculating ------------------------------------- - trunk ours - Optcarrot Lan_Master.nes 33.877 35.282 fps - - Comparison: - Optcarrot Lan_Master.nes - ours: 35.3 fps - trunk: 33.9 fps - 1.04x slower - - Notes: - Merged: https://github.com/ruby/ruby/pull/1959 - -commit ff462bc6c3d88bab9df4c8d17b420f21223984c2 - Author: Takashi Kokubun - Date: 2019-09-02 13:46:29 +0900 - - Add a benchmark for opt_regexpmatch2 - - vm2_regexp was for opt_regexpmatch1. - -commit 1f636e74e661e8976d8884a1dcb7027a97cb6a83 - Author: Nobuyoshi Nakada - Date: 2019-09-02 12:15:35 +0900 - - Set mtime of checked out files to past time - - instead of waiting 2 seconds, if possible. - -commit 63ab7046a1a5c374a52dfa79406fe52d92d80344 - Author: Kazuhiro NISHIYAMA - Date: 2019-09-02 10:02:17 +0900 - - Skip POINTOPOINT of IPv4 too instead of IPv6 only - - Fix following error on `utun*`: - ``` - 1) Error: - TestSocket#test_udp_server: - Errno::ECONNREFUSED: Connection refused - recvmsg(2) - ``` - -commit f58db5a6f5c7b5c2f5f8471adcf8b1fe9577c01a - Author: Jeremy Evans - Date: 2019-09-02 11:46:19 +0900 - - Simplify setting of VM_CALL_KW_SPLAT in vm_call_method_missing - - Pointed out by ko1. - -commit ca11a7d74e5e992cf4b84180727259095f4c1e75 - Author: Jeremy Evans - Date: 2019-09-02 10:54:30 +0900 - - Fix method name in test to not override existing method name - -commit 3fde9ef93781585a675b3e7184ad3a51072fb95f - Author: Jeremy Evans - Date: 2019-09-02 08:08:42 +0900 - - Fix keyword argument separation warning in method_missing - - vm_call_method_missing was dropping VM_CALL_KW_SPLAT, so this just - makes it not drop it, to get the same behavior as calling the method - directly. - -commit 85dc89c90747d492e5ecbbbfc631a55088195f61 - Author: aycabta - Date: 2019-09-02 06:37:25 +0900 - - Treat Japanese IME on/off code correctly - -commit b0d885da765d3212f807ae83968082800df6422e - Author: git - Date: 2019-09-02 00:42:54 +0900 - - * 2019-09-02 [ci skip] - -commit f82cf05626a3020e01b2551fc0cc78a9365fe7b5 - Author: Nobuyoshi Nakada - Date: 2019-09-02 00:41:45 +0900 - - Fixed the directory to be removed - -commit 007d6d15f4aeea266d4d88e0541ab45a34a1dcd4 - Author: Yusuke Endoh - Date: 2019-09-01 23:29:39 +0900 - - test/drb/drbtest.rb: Use EnvUtil.timeout for timeout scale factor - -commit 188c2b67c9365fcf75a595186d95c325f06b9182 - Author: Yusuke Endoh - Date: 2019-09-01 23:27:44 +0900 - - Revert "Revert "Revert "Skip BUGs on Solaris""" - - This reverts commit 3be3948870f6589343c4aecb541e22fae7751b47. - - The Solaris environment couldn't lookup the hostname itself by a wrong - setting. Now it is fixed, so try again. - -commit bd785ca07779bacf78b9678b3d19eef4754fcbae - Author: Nobuyoshi Nakada - Date: 2019-09-01 23:24:05 +0900 - - Restore pwd for each version - -commit fd4aad6d41da016f3a7aa7d3f130c39fe7bf082b - Author: Nobuyoshi Nakada - Date: 2019-09-01 22:16:18 +0900 - - Support packaging different branch/tag - -commit d8260bc872c8c562fff90278bb21815b9e7946e5 - Author: Nobuyoshi Nakada - Date: 2019-09-01 19:01:19 +0900 - - Fetch commit notes - -commit b578c63f8398d4203c27a012f60b99d14910007d - Author: Nobuyoshi Nakada - Date: 2019-09-01 18:15:02 +0900 - - Resolve symlinks to cache directory under gems - -commit ff7c95dfd9b6aa1b4a83c18172e2845f7e6a4e7f - Author: Nobuyoshi Nakada - Date: 2019-09-01 18:10:50 +0900 - - Support git tags - -commit 04c3e344562eed9892409643bb4cfd6a2317e647 - Author: Takashi Kokubun - Date: 2019-09-01 19:26:22 +0900 - - Upgrade benchmark-driver for keyword args warnings - -commit 3be3948870f6589343c4aecb541e22fae7751b47 - Author: Yusuke Endoh - Date: 2019-09-01 18:57:40 +0900 - - Revert "Revert "Skip BUGs on Solaris"" - - This reverts commit 84dca8eff0cbcb1c23623b47fb78b0daf5c76e35. - - "execution expired" occurred on Solaris. - https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris11s-sunc/ruby-master/log/20190901T072504Z.fail.html.gz - -commit 94d6ec1d90bb28e5f303867b048e6322d8781cb1 - Author: Kazuki Tsujimoto - Date: 2019-09-01 16:39:34 +0900 - - Make pattern matching support **nil syntax - -commit cda5745c1bacdb3be8384d21ee0dd70a9d95af5b - Author: Takashi Kokubun - Date: 2019-09-01 16:31:09 +0900 - - Automatically detect missing symbols - - which are usually optimized away by -O3. - - This CI can detect missing exports like - ea84a680755b5a7fa700618cbe78e3b2fc7be01d which was needed for - 761346a9604ca2c79777d1d67fb5dcc3c30dbf69. - -commit ea84a680755b5a7fa700618cbe78e3b2fc7be01d - Author: Kazuki Tsujimoto - Date: 2019-09-01 16:25:01 +0900 - - Export rb_const_source_location_at for MJIT - -commit 02dfa0f16361c498e0f529054b00e3e09730892b - Author: Yusuke Endoh - Date: 2019-09-01 15:24:37 +0900 - - test/ruby/test_keyword.rb: Add remove_method before method redefinition - - to suppress redefinition warnings. - -commit 84dca8eff0cbcb1c23623b47fb78b0daf5c76e35 - Author: Yusuke Endoh - Date: 2019-09-01 15:14:27 +0900 - - Revert "Skip BUGs on Solaris" - - This reverts commit 8adefd4cf29288f6e43f20efbdd44b215ae16c7a. - - I couldn't see any failure on Solaris if the guard is removed. - Give it a try. - -commit d646a292cddabfd41593d0b58fd5270e3aeefbb4 - Author: Jeremy Evans - Date: 2019-09-01 15:05:02 +0900 - - Fix keyword argument separation warning when using send - - vm_call_opt_send was dropping VM_CALL_KW_SPLAT, so this just makes - it not drop it, to get the same behavior as calling the method - directly. - -commit e13c0bb82018197d906b8f11eccf2cd90d142e41 - Author: Takashi Kokubun - Date: 2019-09-01 14:54:04 +0900 - - Note about ANYARGS in NEWS - - Since 50f5a0a8d6e7ad89d6caff695a08dbd38edb7a6e, some C++ extensions - needed fixes like https://github.com/eagletmt/faml/pull/49 to make their - build succeed. - - Thus it's worth noting that C API declarations are changed. - -commit 15757390fff14071f3d77fa75934b741723eb92a - Author: Jeremy Evans - Date: 2019-09-01 13:51:02 +0900 - - Don't pass an empty keyword hash when double splatting empty hash when calling cfunc - - This mirrors earlier changes in keyword argument separation for - calling Ruby methods and calling procs/lambdas, so that behavior - is kept the same. - -commit e80a6f65c873fb01c98f71fa94085264dbb1dbf0 - Author: Nobuyoshi Nakada - Date: 2019-09-01 13:37:28 +0900 - - Made :nil static ID - -commit e5dd63ba8c854d8dce9537adb730658aded6bc8d - Author: aycabta - Date: 2019-09-01 11:19:17 +0900 - - IRB 1.1.0.pre.3 - -commit 11d6094cbe2965563942152bebca5ba4b54a7004 - Author: aycabta - Date: 2019-09-01 11:08:09 +0900 - - Reline 0.0.2 - -commit c5bb074fe731832b64143372986197c83201d2f3 - Author: aycabta - Date: 2019-09-01 11:02:14 +0900 - - Re-calculate state variables of screen when screen size changes - -commit 1756ec2065d5219659b585f3fe3ce666861acd3a - Author: Hiroshi SHIBATA - Date: 2019-09-01 08:56:00 +0900 - - Ignore the all of warnings with inline_spec.rb of bundler examples. - -commit a060629e66899a02d01760ee249df84754c8e445 - Author: git - Date: 2019-09-01 01:56:24 +0900 - - * 2019-09-01 [ci skip] - -commit 431a99b5569e90dd76677be273ad81640ce7e757 - Author: Nobuyoshi Nakada - Date: 2019-09-01 01:44:36 +0900 - - Split warning messages for tag-jump - -commit d4eef04883104c6b4618a843651584cb65c9428d - Author: aycabta - Date: 2019-08-31 20:55:35 +0900 - - Use double splat for keyword args by a hash object in lib/un.rb - -commit 602fbd4338a875aa26c6248338a3df97e08a6b72 - Author: Takashi Kokubun - Date: 2019-08-31 17:34:23 +0900 - - Limit the apt addon enablement to trusty - - 8897fa60fdbc83f9cce7df384893e902c17c1bf2 worked. - But we want to retry that part and this commit is trying to fix the - problem. - -commit 8897fa60fdbc83f9cce7df384893e902c17c1bf2 - Author: Takashi Kokubun - Date: 2019-08-31 17:18:00 +0900 - - Try using built-in apt source for gcc-8 - - 58a373e9ed54556e18a13825dfe72d3f7a86b833 and - 3868df83330bb897be996604df3862639abbf002 - didn't work. - -commit 3868df83330bb897be996604df3862639abbf002 - Author: Takashi Kokubun - Date: 2019-08-31 17:03:26 +0900 - - Try to fix apt-get update error for trusty (take 2) - - https://travis-ci.org/ruby/ruby/jobs/579116510 - -commit 58a373e9ed54556e18a13825dfe72d3f7a86b833 - Author: Takashi Kokubun - Date: 2019-08-31 16:44:41 +0900 - - Try to suppress errors in BASERUBY Travis - - https://travis-ci.org/ruby/ruby/jobs/579108692 - -commit 1f18b578ce300a3ba71a9525e680037122bb81d3 - Author: Jeremy Evans - Date: 2019-08-31 15:50:50 +0900 - - Don't pass an empty keyword hash when double splatting empty hash - -commit 4868ad7e5b3065f9d94cc7e70889c9d31ebe88cc - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-31 13:31:21 +0900 - - fix CI failures in x64-mingw32 - - For insatnce - https://ci.appveyor.com/project/ruby/ruby/builds/27086475/job/mb9whkiygemlfy93 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2413 - -commit d7aa1260b6c378b2f540a06eb770bc07db0ebb53 - Author: Nobuyoshi Nakada - Date: 2019-08-31 14:44:57 +0900 - - Remove files/directories for git/github which are committed [ci skip] - -commit 60a08d9a6c11fda25bb73ded9e26aabc57af9433 - Author: Jeremy Evans - Date: 2019-08-31 14:11:00 +0900 - - Add rb_iseq_location - - This wraps iseq_location and should fix the leaked global test. - -commit ec6206a81a1d61efe5bda69ab704c09e75033c01 - Author: Jeremy Evans - Date: 2019-08-31 13:56:50 +0900 - - Use more accurate source location in keyword argument separation warnings - - This shows locations in places it didn't before, such as for - proc calls, and fixes the location for super calls. - - This requires making iseq_location non-static and MJIT exported, - which I hope will not cause problems. - -commit 3463e83192215c36bdcebad8be907eaa09593a41 - Author: Jeremy Evans - Date: 2019-08-31 11:23:10 +0900 - - Warn for keyword to last hash parameter when method has no optional/rest parameters - - Previously, there was no warning in this case, even though we will - be changing the behavior in Ruby 3. - - Fixes [Bug #14130] - -commit 6424d316b993ecceb6f583ae476096274e304788 - Author: Jeremy Evans - Date: 2019-08-31 09:33:33 +0900 - - Remove a verbose warning that is no longer needed - - This warns about a case that we will continue to support. - -commit 8cb9efbbe62a9a544bff2cd6571fc756ce92a738 - Author: Yusuke Endoh - Date: 2019-08-31 07:17:46 +0900 - - tool/rbinstall.rb: remove a keyword-argument warning - -commit a1e588d1a73e3d72cd9ce6a2516ada9baeb77861 - Author: Yusuke Endoh - Date: 2019-08-31 07:03:27 +0900 - - NEWS: Hash-to-keywords automatic conversion is now warned - - A follow up for 16c6984bb9..b5b3afadfa. [Feature #14183] - -commit 38e08db48e9d8cf34b2362df24afa97ba1e2ff4b - Author: git - Date: 2019-08-31 04:39:56 +0900 - - * 2019-08-31 [ci skip] - -commit b5b3afadfab4072f55320075ccac6afe333a140c - Author: Jeremy Evans - Date: 2019-08-31 03:52:46 +0900 - - Fix a couple of bundler issues with keyword argument separation - - There are more issues than this, but hopefully this is enough - to get make test-bundler passing in CI. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 856bb3c35d5d81481b2e5dd00353298e8a0c2ee7 - Author: Jeremy Evans - Date: 2019-08-21 04:29:51 +0900 - - Fix remaining warning issues in the tests due to keyword argument separation - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 42adc5bc6bb532e20bf2191ad99781ee701dea36 - Author: Jeremy Evans - Date: 2019-08-21 04:28:04 +0900 - - Add back missing warning for duplicate keys in splatted hashes - - This reverts the changes to parse.y in - a5b37262524ac39d2af13eea174486370a581c23 as they are not actually - needed and cause the warning for duplicate hash keys to not be - emitted. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit a810f6cbefb5726c626b0c490522865588f4480e - Author: Jeremy Evans - Date: 2019-08-18 14:49:04 +0900 - - Update specs to handle non-Symbols for keyword splats in 2.7 - - Also handle some warnings for behavior that will change in 3.0. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 16cd0de6ec8464129041c52174f5608e32512ca1 - Author: Jeremy Evans - Date: 2019-08-18 14:47:43 +0900 - - When splitting a keyword hash, dup it first to not mutate it - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 5c507db467f20a6981ce6b282a607d4d975bcb07 - Author: Jeremy Evans - Date: 2019-08-18 14:43:26 +0900 - - Implement keyword argument to last positional hash emulation - - For methods that accept keyword arguments but do not accept a - keyword splat, if a keyword splat is passed, or keywords are - used with a non-symbol key, check the hash. If the hash contains - all symbols, keep the same behavior as before. If the hash - contains all non-symbols, move the hash to the last positional - hash and warn. If the hash contains symbols and non-Symbols, split - the hash and use the symbol keys for the keyword hash and non-symbol - keys for the positional hash and warn. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 8399609e5a27d3d993c9fbb08f9d88051f26d455 - Author: Jeremy Evans - Date: 2019-08-17 04:43:13 +0900 - - Make keyword_hash_split static - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 3a23b71f0ac76d52f334643ab3152017c7a10b39 - Author: Jeremy Evans - Date: 2019-04-25 04:06:39 +0900 - - Make Method/Proc#parameters handle **nil syntax - - Use a [:nokey] entry in this case. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit fa41a7b2608523a89d4eb1c9309d39a140e839ef - Author: Jeremy Evans - Date: 2019-04-25 03:40:02 +0900 - - Make RubyVM::AbstractSyntaxTree handle **nil syntax - - Use false instead of nil for the keyword and keyword rest values - in that case. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 4d64693c703edbccc5b155072276ce7b8c3becdb - Author: Jeremy Evans - Date: 2019-04-25 02:34:02 +0900 - - Make ripper support **nil syntax - - The on_params hook will use :nil as the keyword rest argument. - There is a new on_nokw_param hook as well. - - This fixes a type issue in the previous code, where an ID was - passed where a VALUE was the declared type. The symbol :nil is - passed instead of the id. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 6a9ce1fea89bc5c6518dd6bb7ff3b824a9321976 - Author: Jeremy Evans - Date: 2019-04-19 22:19:41 +0900 - - Support **nil syntax for specifying a method does not accept keyword arguments - - This syntax means the method should be treated as a method that - uses keyword arguments, but no specific keyword arguments are - supported, and therefore calling the method with keyword arguments - will raise an ArgumentError. It is still allowed to double splat - an empty hash when calling the method, as that does not pass - any keyword arguments. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit afae8555da07b2349a245d6646e3b36a49f027d5 - Author: Jeremy Evans - Date: 2019-04-09 11:45:54 +0900 - - Set symbol export for rb_hash_stlike_foreach - - This fixes MJIT after rb_hash_stlike_foreach used vm_args.c. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 896e42d93f52966644c2700ed9fd18f2a1988dd3 - Author: Jeremy Evans - Date: 2019-04-09 10:45:50 +0900 - - Restore splitting of hashes into positional and keyword arguments, add warning - - This restores compatibility with Ruby 2.6, splitting the last - positional hash into positional and keyword arguments if it - contains both symbol and non-symbol keys. However, in this case - it will warn, as the behavior in Ruby 3 will be to not split the - hash and keep it as a positional argument. - - This does not affect the handling of mixed symbol and non-symbol - keys in bare keywords. Those are still treated as keywords now, - as they were before this patch. This results in different - behavior than Ruby 2.6, which would split the bare keywords and - use the non-Symbol keys as a positional arguments. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 15bca0d4d373820fa648c351dc13c2131849d9b3 - Author: Jeremy Evans - Date: 2019-04-08 10:49:55 +0900 - - Fix test after keyword argument separation - - Now that keyword splats accept non-Symbols, the type of exception - changes. - - Previously, a TypeError (hash key "k1" is not a Symbol) was raised - for this test, but now an ArgumentError (unknown keyword: "k1") is - raised. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 03697ddf63eb9acd41e4f2185a019d39d1ead3cf - Author: Jeremy Evans - Date: 2019-04-08 10:48:43 +0900 - - Update tests to fix warning message changes - - Now that keyword splats accept non-Symbols, the inspect value of - the keyword is used instead of the string value. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 9c2e165f7dbb63dd1921eacae58c4305d3e9e5b6 - Author: Jeremy Evans - Date: 2019-04-08 10:45:26 +0900 - - Only promote last hash to keyword if all keys are symbols - - If all keys are not symbols, then the non-symbol keys would not - be treated as keywords in previous versions. It doesn't make - sense to treat these hashes as keywords to break compatibility and - warn about behavior changes in Ruby 2.7 when the Ruby 3.0 behavior - will be the same as the Ruby 2.6 for these hashes. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit e0b4599bba6bea744e0e90b7640dcc21d695c434 - Author: Jeremy Evans - Date: 2019-04-08 08:55:34 +0900 - - Fix keyword argument separation warnings in test - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit d08e1004e0ee1286e4513de2a170391a4d0a0116 - Author: Jeremy Evans - Date: 2019-04-08 08:44:49 +0900 - - Fix keyword argument separation issues in lib - - Mostly requires adding ** in either calls or method definitions. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 3f67fcd3d5ca5e2907790eb5bb16d03f5884ece8 - Author: Jeremy Evans - Date: 2019-04-08 03:38:21 +0900 - - Fix hash to keyword warning to apply in all cases - - Previously, it only applied if the call had more positional - arguments than the method it was calling accepted. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 334b41a46b2a1a72965494dcecc6fe73a83f4490 - Author: Jeremy Evans - Date: 2019-04-02 04:15:01 +0900 - - Allow ** syntax to be used for calling methods that do not accept keywords - - Treat the ** syntax as passing a copy of the hash as the last - positional argument. If the hash being double splatted is empty, do - not add a positional argument. - - Remove rb_no_keyword_hash, no longer needed. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit 16c6984bb97409029e213154ac4f633ae04af3d8 - Author: Yusuke Endoh - Date: 2019-03-18 14:25:47 +0900 - - Separate keyword arguments from positional arguments - - And, allow non-symbol keys as a keyword argument - - Notes: - Merged: https://github.com/ruby/ruby/pull/2395 - -commit b0a291f6f6a5834fd84807eb48be906ade429871 - Author: Takashi Kokubun - Date: 2019-08-30 22:16:32 +0900 - - Split CC_LINKER_ARGS from CC_DLDFLAGS_ARGS - - to drop MJIT_DLDFLAGS from compile_c_to_o for OpenBSD failure - https://rubyci.org/logs/rubyci.s3.amazonaws.com/openbsd65/ruby-master/log/20190830T110008Z.fail.html.gz. - - 8c7f4e8f8b7f9e74195ea0eb51f39014fec342c0 did not work for i686-linux - https://travis-ci.org/ruby/ruby/jobs/578808112. - -commit 8c7f4e8f8b7f9e74195ea0eb51f39014fec342c0 - Author: Takashi Kokubun - Date: 2019-08-30 22:03:36 +0900 - - Try dropping DLDFLAGS from compile_c_to_o - - I think this did not work for some environments, but this seems to fix - OpenBSD RubyCI failure: - https://rubyci.org/logs/rubyci.s3.amazonaws.com/openbsd65/ruby-master/log/20190830T110008Z.fail.html.gz - - Let me check RubyCI impact by this. - -commit c45dd4d4826704471cf9ff2c7869065236dd174e - Author: Maciej Mensfeld - Date: 2019-08-30 18:24:33 +0900 - - Make the dot-colon method reference frozen - - [Feature #16103] - - Close: https://github.com/ruby/ruby/pull/2267 - -commit 998ee350b9b2cb3659c442d68447aa8bfc54d101 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-30 16:09:08 +0900 - - Revert "require 'pp' before use PP" - - of lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb. - This reverts commit 500149709b92ccb36396589a0c39afb3ff77bfb6 partially. - -commit 631db0de274ff3d00d47c3d3581d8af5592f8a14 - Author: Nobuyoshi Nakada - Date: 2019-08-30 16:00:18 +0900 - - Removed debug print - - It seems to be fixed by b870ca58791e576f5dbb263f54ae433a7f6d65ee. - -commit b870ca58791e576f5dbb263f54ae433a7f6d65ee - Author: Kazuhiro NISHIYAMA - Date: 2019-08-30 12:49:27 +0900 - - Add guard as same as `==` - - Try to fix failure at https://github.com/ruby/ruby/runs/207580232#step:10:382 - ``` - undefined method `name' for "Gemfile.lock":String - /home/runner/work/ruby/ruby/lib/bundler/resolver/spec_group.rb:65:in `eql?' - ``` - -commit 896d9f967b535a6ecb9ff5d3c08f1a37bcb8d1f9 - Author: Nobuyoshi Nakada - Date: 2019-08-27 13:43:16 +0900 - - Constified local variable `translator` - -commit e9da4f57b35afe40b74c32e8f95e39aaaecc11b5 - Author: Nobuyoshi Nakada - Date: 2019-08-27 13:42:53 +0900 - - Adjust indent [ci skip] - -commit 1680bd4e4f63901ff8ab119540850e7e63f1b7a2 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-30 12:01:45 +0900 - - [DOC] Return obj may be different from 1st argument [ci skip] - -commit ba9adcc1759cda3cb7838b650be1fe197d9ba3ba - Author: Yusuke Endoh - Date: 2019-08-30 11:49:14 +0900 - - spec/ruby/core/unboundmethod/bind_call_spec.rb: Add ruby_version_is guard - -commit 96b32aad93a0eb36770a9b1339e204f00f44f0b3 - Author: Nobuyoshi Nakada - Date: 2019-08-30 11:26:48 +0900 - - Exclude ripper y.output from packages [ci skip] - -commit 98ccdd744ab46554e7f0e1d0a89f2ed24d365e53 - Author: Nobuyoshi Nakada - Date: 2019-08-30 11:23:06 +0900 - - Export the last modified revision for tags [ci skip] - -commit e593d5b31a13c59f9af07a2a6012c09bae7477d1 - Author: Nobuyoshi Nakada - Date: 2019-08-30 11:18:23 +0900 - - Suppress uninitialized instance variable warnings [ci skip] - -commit 55f496c89b820f57d9e07c744675da8c43d6aa46 - Author: Nobuyoshi Nakada - Date: 2019-08-30 10:14:15 +0900 - - Support revision in git-svn log - -commit 1191049436556955893d7f6037eb626e6f51a004 - Author: Nobuyoshi Nakada - Date: 2019-08-30 10:13:45 +0900 - - Updated comment of VCS#get_revisions [ci skip] - -commit 43ab88c73706f4ffca2d01b149f5d7092b46000b - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-30 11:20:43 +0900 - - Workaround for https://reviews.llvm.org/D25824 - - This changeset make it possible to use very old clang. - -commit c9fc82983ccf624ccec88ffafe6f4e3eb8e7abc4 - Author: Yusuke Endoh - Date: 2019-08-30 11:11:55 +0900 - - lib/pp.rb: Use UnboundMethod#bind_call instead of .bind(obj).call(...) - - Related to [Feature #15955]. - -commit 09c940b17fcbaec2f7d04e528b8869c8c51ff336 - Author: Yusuke Endoh - Date: 2019-08-30 11:10:29 +0900 - - spec/ruby/core/unboundmethod/bind_call_spec.rb: Added - - For UnboundMethod#bind_call [Feature #15955] introduced in - 002e592e0d67bb0271d16314a32380ad947c9ae9. - -commit 83c6a1ef454c51ad1c0ca58e8a95fd67a033f710 - Author: Yusuke Endoh - Date: 2019-08-30 11:01:25 +0900 - - proc.c: Add UnboundMethod#bind_call - - `umethod.bind_call(obj, ...)` is semantically equivalent to - `umethod.bind(obj).call(...)`. This idiom is used in some libraries to - call a method that is overridden. The added method does the same - without allocation of intermediate Method object. [Feature #15955] - - ``` - class Foo - def add_1(x) - x + 1 - end - end - class Bar < Foo - def add_1(x) # override - x + 2 - end - end - - obj = Bar.new - p obj.add_1(1) #=> 3 - p Foo.instance_method(:add_1).bind(obj).call(1) #=> 2 - p Foo.instance_method(:add_1).bind_call(obj, 1) #=> 2 - ``` - -commit 500149709b92ccb36396589a0c39afb3ff77bfb6 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-30 10:18:32 +0900 - - require 'pp' before use PP - - `Kernel#pp` has wrapper, but `PP` does not. - - https://github.com/ruby/ruby/runs/207405029#step:10:141 - `NameError: uninitialized constant Bundler::Molinillo::Resolver::Resolution::PP` - -commit 0a9d74f8cf1c01300d0396ce3cb4da81d3652d5a - Author: Charles Oliver Nutter - Date: 2019-08-30 06:15:45 +0900 - - Move pread + pwrite tests out of RUBY_ENGINE block - - These tests were guarded by a RUBY_ENGINE of "ruby" even though they test an official Ruby feature (pread/pwrite added in Ruby 2.5). This commit moves them to the top level of the test case so they will run on other implementations. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2412 - -commit bdc36094e3e11c045b26b2831a3a7e69b937ec61 - Author: Aaron Patterson - Date: 2019-08-30 06:51:34 +0900 - - Add some NODE information for lldb - - Just adds a conditional in the lldb scripts so we can more easily debug - NODE objects. - -commit 94b79bffb108ccacb6d165f31e177fa24d392774 - Author: schneems - Date: 2019-08-30 03:01:43 +0900 - - Add word "Euler's number" to Math::E docs - - When searching for this constant, I landed on the correct page https://ruby-doc.org/core-2.6.4/Math.html however I was using CMD+f to search for "Euler" and did not find it. If we add the full name for this constant then it will be easier to search for and find. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2411 - -commit a8b310e14c2816f686b2e0b1cd1dca72f02fdf0d - Author: Kazuhiro NISHIYAMA - Date: 2019-08-30 00:35:18 +0900 - - 7z does not accept gzip's options - - e.g. `GZIP=-9` - -commit c52d38b7b6fa8383977a3629bc7331a45598259a - Author: git - Date: 2019-08-30 00:23:35 +0900 - - * 2019-08-30 [ci skip] - -commit e51dca2596db9567bd4d698b18b4d300575d3881 - Author: Jeremy Evans - Date: 2019-07-06 02:01:06 +0900 - - Disallow use of attrset symbols as Struct members - - Fixes [Bug #11326] - -commit 01b723ba6dd48a0954765e43cff6bd9212afe259 - Author: Nobuyoshi Nakada - Date: 2019-08-29 23:06:27 +0900 - - Refined warnings against literal in flip-flop - -commit 79117d4a9b794fba68c3d7ac699ad8a989bd29dc - Author: Nobuyoshi Nakada - Date: 2019-08-29 22:06:05 +0900 - - NEWS: [Feature #16035] [ci skip] - -commit 2c1e902cba710eb5a83412a98984711e5fe8aad7 - Author: aycabta - Date: 2019-08-29 21:49:19 +0900 - - Don't pick up lib/readline.rb from ruby/reline - -commit a39b26b5947f19c4ec1d410e0d0869b5ab839c65 - Author: aycabta - Date: 2019-08-29 21:11:53 +0900 - - Check events that console window size changed on Windows - -commit 3a425c7623d2062ae931dc83050c00a12873217b - Author: aycabta - Date: 2019-08-29 21:05:19 +0900 - - Fix alignment of a SHORT variable - - typedef struct _COORD { - SHORT X; - SHORT Y; // I wanted to take this... - } COORD, *PCOORD; - - typedef struct _CONSOLE_SCREEN_BUFFER_INFO { - COORD dwSize; - COORD dwCursorPosition; // ...of this one - WORD wAttributes; // But it's combined with first 2bytes of this - SMALL_RECT srWindow; - COORD dwMaximumWindowSize; - } CONSOLE_SCREEN_BUFFER_INFO; - - If wAttributes has non-zero value, the code breaks. - -commit b74dd665c0e9558f355cbe1a625beb444c2a2ab4 - Author: aycabta - Date: 2019-08-29 20:59:29 +0900 - - CONSOLE_SCREEN_BUFFER_INFO is 22bytes - - typedef struct _CONSOLE_SCREEN_BUFFER_INFO { - COORD dwSize; // 4(SHORT X, Y) - COORD dwCursorPosition; // 4 - WORD wAttributes; // 2 - SMALL_RECT srWindow; // 8(SHORT Left, Top, Right, Bottom) - COORD dwMaximumWindowSize; // 4 - } CONSOLE_SCREEN_BUFFER_INFO; - -commit a4a19b114ba94b8f28d5a91aee5d595a516006d5 - Author: Jean Boussier - Date: 2019-08-02 03:41:21 +0900 - - Allow non-finalizable objects in ObjectSpace::WeakMap - - [feature #16035] - - This goes one step farther than what nobu did in [feature #13498] - - With this patch, special objects such as static symbols, integers, etc can be used as either key or values inside WeakMap. They simply don't have a finalizer defined on them. - - This is useful if you need to deduplicate value objects - - Notes: - Merged: https://github.com/ruby/ruby/pull/2313 - -commit e4be2fda3dbbfdb1f2ace697c96cf6bdd7dfef21 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-29 15:47:33 +0900 - - Rule out gcc on Windows - - It seems the combination fails at the moment. Don't know exactly - why but I suspect there can be issues in resolving weak references. - Let's rule them out for now. - - https://ci.appveyor.com/project/ruby/ruby/builds/27036383/job/x3c5d54839aacoyt - -commit 3df37259d81d9fc71f8b4f0b8d45dc9d0af81ab4 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-29 11:47:20 +0900 - - drop-in type check for rb_define_singleton_method - - We can check the function pointer passed to - rb_define_singleton_method like how we do so in rb_define_method. - Doing so revealed many arity mismatches. - -commit bfe5d22f89a871b6c1cb556c0115145ade9fe286 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-29 10:57:48 +0900 - - drop-in type check for rb_define_private_method - - We can check the function pointer passed to rb_define_private_method - like how we do so in rb_define_method. Doing so revealed some - problematic usages of rb_obj_dummy. They had to be split according - to their arity. - -commit 9b429eb3b15321115d9a217c91c5510fe43777a7 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-29 10:45:09 +0900 - - drop-in type check for rb_define_protected_method - - We can check the function pointer passed to - rb_define_protected_method like how we do so in rb_define_method. - This changeset revealed no prototypes mismatches. - -commit 0b81e7d6e2810adac081965f0da1d8064888c0bd - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-29 10:40:40 +0900 - - drop-in type check for rb_define_method_id - - We can check the function pointer passed to rb_define_method_id - like how we do so in rb_define_method. This method is relatively - rarely used so there are less problems found than the other APIs. - -commit 0766f67168cf248b698a8b2cde1c22c526374be7 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-29 10:23:14 +0900 - - move docs around [ci skip] - - To properly generate documents. - -commit 7bcfd9189a6a0b2ad58fed988faaf795a4987893 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-28 18:19:11 +0900 - - drop-in type check for rb_define_global_function - - We can check the function pointer passed to rb_define_global_function - like we do so in rb_define_method. It turns out that almost anybody - is misunderstanding the API. - -commit 7b6fde4258e700c0e0292bb091aa84a5e473342e - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-28 17:48:48 +0900 - - drop-in type check for rb_define_module_function - - We can check the function pointer passed to rb_define_module_function - like how we do so in rb_define_method. The difference is that this - changeset reveales lots of atiry mismatches. - -commit 9ef51b0b89a10c8c401cb9f2337e47a25be72cbe - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-28 17:11:23 +0900 - - drop-in type check for rb_define_method - - The rb_define_method function takes a pointer to ANYARGS-ed functions, - which in fact varies 18 different prototypes. We still need to - preserve ANYARGS for storages but why not check the consistencies if - possible. - - Q&As: - - Q: Where did the magic number "18" came from in the description above? - - A: Count the case branch of vm_method.c:call_cfunc_invoker_func(). - Note also that the 18 branches has lasted for at least 25 years. - See also 200e0ee2fd3c1c006c528874a88f684447215524. - - Q: What is this __weakref__ thing? - - A: That is a kind of function overloading mechanism that GCC provides. - In this case for instance rb_define_method0 is an alias of - rb_define_method, with a strong type. - - Q: What is this __transparent_union__ thing? - - A: That is another kind of function overloading mechanism that GCC - provides. In this case the attributed function pointer is either - VALUE(*)(int,VALUE*,VALUE) or VALUE(*)(int,const VALUE*,VALUE). - - This is better than void* or ANYARGS because we can reject all - other possibilities than the two. - - Q: What does this rb_define_method macro mean? - - A: It selects appropriate alias of the rb_define_method function, - depending on the arity. - - Q: Why the prototype change of rb_f_notimplement? - - A: Function pointer to rb_f_notimplement is special cased in - vm_method.c:rb_add_method_cfunc(). That should be handled by the - __builtin_choose_expr chain inside of rb_define_method macro - expansion. In order to do so, comparison like (func == - rb_f_notimplement) is inappropriate for __builtin_choose_expr's - expression (which must be a compile-time integer constant but the - address of rb_f_notimplement is not fixed until the linker). So - instead we are using __builtin_types_compatible_p, and in doing so - we need to distinguish rb_f_notimplement from others, by type. - -commit 48e346a088395924298163941d4b4cdd8243e377 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-28 17:33:07 +0900 - - fix arity of bug_start - - This is just a trivial mistake introduced in - 0f36e8fc03a5c6433972d6bb5f177d5f6e106bac. - -commit 69683968a99a8281c28e46c1e6cb3736694a1ba6 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-28 16:18:58 +0900 - - fix arity of rb_mutex_synchronize_m - - This is just a trivial mistake introduced in - 6c56dae4b23c5c50e351758538141ca26b9aba40. - -commit abe12d8b96be3c12618811f22ca01788366f99f8 - Author: Nobuyoshi Nakada - Date: 2019-08-29 16:58:21 +0900 - - Freeze method reference operator object - - [Feature #16103] - -commit 2ed68d0ff9a932efbc4393c869534040dec8f647 - Author: Nobuyoshi Nakada - Date: 2019-08-29 15:09:43 +0900 - - Revert "Add pipeline operator [Feature #15799]" - - This reverts commits: - * d365fd5a024254d7c105a62a015a7ea29ccf3e5d - * d780c3662484d6072b3a6945b840049de72c2096 - * aa7211836b769231a2a8ef6b6ec2fd0ec882ef29 - * 043f010c28e82ea38978bf8ed885416f133b5b75 - * bb4dd7c6af05c7821d572e2592ea3d0cc748d81f - * 043f010c28e82ea38978bf8ed885416f133b5b75 - * f169043d81524b5b529f2c1e9c35437ba5bc3a7a - - http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/94645 - -commit 893900dc7876596fab0e488affddf3abcb510445 - Author: aycabta - Date: 2019-08-29 15:21:00 +0900 - - Add stub set_screen_size for other platforms - -commit 07f9cd96f3e99537ee47ceed07706338ab08c1f0 - Author: git - Date: 2019-08-29 15:12:37 +0900 - - * 2019-08-29 [ci skip] - -commit 0f405541bfe5186c068c4521d815b64b82e1ae5e - Author: aycabta - Date: 2019-08-29 14:36:45 +0900 - - Support SIGWINCH - -commit 682aaf6af5ff345897a9128bb19e0b17b71426a6 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-29 14:32:24 +0900 - - Replace numbered parameters with named parameters [ci skip] - -commit 761346a9604ca2c79777d1d67fb5dcc3c30dbf69 - Author: Nobuyoshi Nakada - Date: 2019-07-04 16:54:34 +0900 - - Show the previous definition location, - - when reopened class/module redefinition mismatched the previous - definition. [Feature #11460] - -commit d3e0bc07e2909f1105dcde4febb0e120eaea30b6 - Author: Nobuyoshi Nakada - Date: 2019-08-29 11:20:34 +0900 - - Fixed a comment [ci skip] - - A range literal in conditional expression is turned into a - flip-flop, as a Range object is never falsy and does not make a - sense. - -commit 1cf5a31e7a00c3900bb8bdc358606f66a729d4f7 - Author: Nobuyoshi Nakada - Date: 2019-08-29 11:16:17 +0900 - - Aseert exception at negative step for non-endless range too - -commit d92289cd8d5cac784ae856fb777f10dbc9f91b62 - Author: Nobuyoshi Nakada - Date: 2019-08-29 11:09:22 +0900 - - Revert "Remove warnings of flip-flop deprecation from tests and specs" - - This reverts commit bf7a32d22079cc44eb19794e41d82b886d5d17b3. - - flip-flop is no longer deprecated. - - [Feature #5400] - -commit cd0e208963bdf9ee2fec30e83bdc8f6bc77a7b8d - Author: Jeremy Evans - Date: 2019-08-29 03:40:56 +0900 - - Document {n}? regexp pattern is optional and not non-greedy [ci skip] - - While not consistent with {n,}?, {,m}?, and {n,m}?, it is arguably - more useful, as otherwise the ? would have no effect. - - Fixes [Bug #15583] - -commit e82719c6511cf00bd4b92759ba0197108cfad0cc - Author: aycabta - Date: 2019-08-28 19:45:27 +0900 - - Remove jquery.js from file list of rdoc.gemspec - -commit c1d0b6adfcbc219db3348b2b2cc4817db21e4b76 - Author: Nobuyoshi Nakada - Date: 2019-08-28 16:34:17 +0900 - - Revert "Treat RUBY_REVISION as an integer on old rubies" - - This reverts commit 6454808c52fff445ff09fefb0fb96988f82aaa3c. - - It is no longer needed, as `VCS::SVN#get_revisions` now returns - `Integer` as revision numbers, and `short_revision` should deal - with it. - -commit b11d739444e312e3284dc5daf8354a3067606f2d - Author: Nobuyoshi Nakada - Date: 2019-08-28 16:40:57 +0900 - - Fix warnings - - `_FILE_OFFSET_BITS` should be defined before system headers. - -commit a506b7f35a65a1ecee09fbff0372dc354255dd77 - Author: Nobuyoshi Nakada - Date: 2019-08-28 01:07:27 +0900 - - Adjusted indents and supplied last commas - - Fixed unmatched indent of the closing bracket for - `:irb_current_working_workspace`, and adjusted following elements. - -commit 2b55df7315ad78a138d877a3a319f86a3d3bfc24 - Author: NAKAMURA Usaku - Date: 2019-08-28 15:57:30 +0900 - - `revision` might be an Integer - -commit ed8d2e1cfdc57bba03065e96424e4ba7df45682e - Author: nagachika - Date: 2019-08-28 14:50:21 +0900 - - tool/merger.rb: fix tag existence check with subversion. - -commit c9dc569a94e568de19a39c08d69cf4ea9bd159dd - Author: Nobuyoshi Nakada - Date: 2019-08-28 12:32:43 +0900 - - Ensure the last and changed revisions as Integers - -commit 8e13da1ee83028000e5d7f9f9526379e32765a81 - Author: pavel - Date: 2019-07-19 23:23:00 +0900 - - optimize get_power2 [Feature #15631] - - Merged: https://github.com/ruby/ruby/pull/2292 - -commit 989e8ad322afdfa3aa06e74b89fc42aef42895d0 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-28 10:34:56 +0900 - - Remove debug print [ci skip] - -commit 624a0ad44db1f2f5f70ef1726e0c5d4be4d854fb - Author: Kazuhiro NISHIYAMA - Date: 2019-08-28 10:06:43 +0900 - - Use `set-env` instead of `grep` in each step - -commit 108dbb389b0a47199c8d0f271c34a22dd2406f2e - Author: Kazuhiro NISHIYAMA - Date: 2019-08-28 09:45:31 +0900 - - Use JOBS again like macos.yml - -commit 330c2f7597a132281d37eeca999a4a069c8bc11a - Author: Kazuhiro NISHIYAMA - Date: 2019-08-28 09:41:14 +0900 - - Change name to `Tests (test-bundled-gems)` - -commit 230f4054792c624d36c043ee0acfa19eeef29f31 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-28 09:38:52 +0900 - - Add name to autoconf - -commit 17c0ce379877fa3f8f79e84c5652bc2b74b9e08e - Author: Kazuhiro NISHIYAMA - Date: 2019-08-28 09:20:07 +0900 - - Remove GITHUB_SHA from jobs..steps.env - - because default value overrides it. - https://help.github.com/en/articles/virtual-environments-for-github-actions#environment-variables - -commit 767992329ea335546bbdc98812b5a16be720a415 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-28 09:15:40 +0900 - - Allow missing projectnumber [ci skip] - -commit d4de5e645913ae8cacb372f5d405d62de817b6a2 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-28 09:13:43 +0900 - - Show projectnumber in current index.html and GITHUB_SHA - -commit 932a471d3811d6d44764ce42b1b140a04961a763 - Author: Aaron Patterson - Date: 2019-08-17 08:04:26 +0900 - - Directly mark compile options from the AST object - - `rb_ast_t` holds a reference to this object, so it should mark the - object. Currently it is relying on the `mark_ary` on `node_buffer` to - ensure that the object stays alive. But since the array internals can - move, this could cause a segv if compaction impacts the array. - -commit cbcad66741507daea5f5037510404848720e347f - Author: Kazuhiro NISHIYAMA - Date: 2019-08-28 02:16:28 +0900 - - Fix doxygen action - - - Fix checkout error: `fatal: destination path '.' already exists and is not an empty directory.` - - Remove `GITHUB_SHA` in env, because set automatically - https://help.github.com/en/articles/virtual-environments-for-github-actions#environment-variables - - Change minute from 0 to 20 for test soon - -commit 71e5871c3be6df6a02b0af2cdb78b3fb35b24918 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-28 01:47:56 +0900 - - Run on schedule only and skip if not modified - -commit f308ab2131ee675000926540cbb8c13c91dc3be5 - Author: aycabta - Date: 2019-08-28 01:09:15 +0900 - - Remove jquery.js - -commit 88a37dc62099b49e71a05342460da4061d5f23dd - Author: Takashi Kokubun - Date: 2019-08-28 00:45:21 +0900 - - Stop passing CC_LIBS in compile_c_to_o - - To fix "gcc: -lgcc: linker input file unused because linking not done" in - https://rubyci.org/logs/rubyci.s3.amazonaws.com/openbsd65/ruby-master/log/20190826T200009Z.log.html.gz - - Still I'm intentionally leaving CC_DLDFLAGS_ARGS because making compiler - options different might result in compile/link failure. (Of course - CC_DLDFLAGS_ARGS usually should not have compiler options, but it might - include by bad configure setup) - - The same problem may exist in MJIT_LIBS used inside CC_LIBS as well, but - I just ignored that case because it impacts only MinGW / cygwin, hoping - that their users do not perform a wrong configure. - - Notes: - s/might include/might be included/ - -commit d8fa88294fbbd04b218b7e9724bec2553dab72b8 - Author: aycabta - Date: 2019-08-27 21:56:04 +0900 - - Version 6.2.0 - -commit 39810b4035beb2a4a3e3b993224eb20ead26e40c - Author: aycabta - Date: 2019-08-27 21:55:51 +0900 - - Good bye jQuery - -commit 6454808c52fff445ff09fefb0fb96988f82aaa3c - Author: NAKAMURA Usaku - Date: 2019-08-28 00:19:25 +0900 - - Treat RUBY_REVISION as an integer on old rubies - -commit dd032a5fb4dd8da59c685910b3c673439edc8c42 - Author: Takashi Kokubun - Date: 2019-08-28 00:13:54 +0900 - - Make doxygen / coverage torelant to clone race - - a little. - - Doing both `git clone --depth=1` and `git reset --hard ${sha}` does not - make sense (the latter command either does nothing or just fails), so I - added non-1 value as a depth. - - Maybe we don't need depth=50 for pull_request and schedule, so it's 10 - for now. - -commit 9928a6a3670fff8c87d1def74c719987acae8cf0 - Author: git - Date: 2019-08-28 00:12:01 +0900 - - * 2019-08-28 [ci skip] - -commit 6a0d2bc2af7597e3e308c949e01c8e6329107b47 - Author: Nobuyoshi Nakada - Date: 2019-08-28 00:09:01 +0900 - - Follows callback declaration updates - -commit 4209066f0e2be775357d09cb513c89a2f064a335 - Author: Takashi Kokubun - Date: 2019-08-27 23:52:31 +0900 - - Drop more unused configs from doxygen and coverage - - workflows, because mame said he has never seen it. - -commit 3bed468e8864f3ac4332a08b6c95b1a542aa23dd - Author: Takashi Kokubun - Date: 2019-08-27 23:49:24 +0900 - - Omit unused matrix strategy from doxygen workflow - -commit 2cd68a38d97c8f2633c88d0d94e9aa1724261f9f - Author: Nobuyoshi Nakada - Date: 2019-08-27 23:42:56 +0900 - - Short revision of SVN should be an Integer - -commit eaff19de2b31dc2133ba477291498d66bf3448bd - Author: Takashi Kokubun - Date: 2019-08-27 23:41:51 +0900 - - Fix rb_thread_create argument type - - in response to the declaration change in - e3fc30564e9466d6926f9d25a090dcf787bd5c33. - - Fixing the AppVeyor mswin CI failure: - https://ci.appveyor.com/project/ruby/ruby/builds/26980881/job/2j6h1qwjnbc8cpop - - ref: https://github.com/ruby/ruby/pull/2404 - -commit d8060782373c181bc689ce9bc73f6cb8b74de44d - Author: Kazuhiro NISHIYAMA - Date: 2019-08-27 18:46:16 +0900 - - Add graphviz for dot command - -commit 3ac0b75c456fa1d16c133cef2f47b7361cf651c5 - Author: Yusuke Endoh - Date: 2019-08-27 16:39:42 +0900 - - Doxygen in GitHub Actions (#2406) - - * .github/workflows/doxygen.yml: add a workflow for doxygen in Actions - - Notes: - Merged-By: mame - -commit 1663d347c993debf7ed83e11e291e7a21e14ed03 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-27 14:21:18 +0900 - - delete `$` sign from C identifiers - - They lack portability. See also - https://travis-ci.org/shyouhei/ruby/jobs/577164015 - -commit 19b6678132acc56460432d8c2d6246f399b27160 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-27 12:40:06 +0900 - - rb_uninterruptible now free from ANYARGS - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This function has only one call site - so adding appropriate prototype is trivial. - -commit bd8dc2561d4983df7bf44dbc6ca194930532adc7 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-27 12:29:00 +0900 - - struct MEMO now free from ANYARGS - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. There is only one usage of - MEMO::u3::func in load.c (where void Init_Foobar(vodi) is registered) - so why not just be explicit. - -commit 79d280a5e855d623957638b6d73f530995e03cae - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-27 12:08:32 +0900 - - rb_ivar_foreach now free from ANYARGS - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This commit adds a function - prototype for rb_ivar_foreach. Luckily this change revealed no - problematic usage of the function. - -commit 50f5a0a8d6e7ad89d6caff695a08dbd38edb7a6e - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-27 11:53:39 +0900 - - rb_hash_foreach now free from ANYARGS - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This commit adds function prototypes - for rb_hash_foreach / st_foreach_safe. Also fixes some prototype - mismatches. - -commit ae2dc3f217ba9f181471f39a7e5ce72a28b27c2a - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-27 11:16:52 +0900 - - rb_define_hooked_variable now free from ANYARGS - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This commit uses rb_gvar_getter_t / - rb_gvar_setter_t for rb_define_hooked_variable / - rb_define_virtual_variable which revealed lots of function prototype - inconsistencies. Some of them were literally decades old, going back - to dda5dc00cff334cac373096d444a0fd59e716124. - -commit 78628618da98236fc1bf702079185b36ed394e2a - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-27 12:21:36 +0900 - - struct st_hash_type now free from ANYARGS - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This commit adds function prototypes - for struct st_hash_type. Honestly I don't understand why they were - commented out at the first place. - -commit 6dd60cf114701f1ff3526381c0e742c588af2f91 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-26 16:06:40 +0900 - - st_foreach now free from ANYARGS - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This commit deletes ANYARGS from - st_foreach. I strongly believe that this commit should have had come - with b0af0592fdd9e9d4e4b863fde006d67ccefeac21, which added extra - parameter to st_foreach callbacks. - -commit e3fc30564e9466d6926f9d25a090dcf787bd5c33 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-26 15:53:57 +0900 - - rb_thread_create now free from ANYARGS - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This commit deletes ANYARGS from - rb_thread_create, which seems very safe to do. - -commit bc3e7924bc66d3ef77b219c72f3e59cc154550a3 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-26 15:35:28 +0900 - - rb_proc_new / rb_fiber_new now free from ANYARGS - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This commit deletes ANYARGS from - rb_proc_new / rb_fiber_new, and applies RB_BLOCK_CALL_FUNC_ARGLIST - wherever necessary. - -commit af5e2566405e4808a6d0a29c5b7d305d6fc0aada - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-26 15:27:48 +0900 - - rb_catch now free from ANYARGS - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This commit deletes ANYARGS from - rb_catch, and fixes some bugs revealed by that. - -commit 703783324c16b8b2b50210d1a7d1119902abbb8b - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-26 15:20:15 +0900 - - rb_ensure now free from ANYARGS - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This commit deletes ANYARGS from - rb_ensure, which also revealed many arity / type mismatches. - -commit 5c7c2d9951f2512ca10ea38fecc48d8ac67502e6 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-26 14:51:00 +0900 - - rb_rescue / rb_rescue2 now free from ANYARGS - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This commit deletes ANYARGS from - rb_rescue / rb_rescue2, which revealed many arity / type mismatches. - -commit 3cae73133cfec7d5ec3f8058ec647d5163578003 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-26 14:42:08 +0900 - - rb_iterate now takes rb_block_call_func_t - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This commit makes rb_iterate free - from ANYARGS. - -commit b8fd2e83e7b18fe3c70fc342388b1cb054b22e42 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-26 14:25:53 +0900 - - decouple compile.c usage of imemo_ifunc - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. This commit deletes ANYARGS from - struct vm_ifunc, but in doing so we also have to decouple the usage - of this struct in compile.c, which (I think) is an abuse of ANYARGS. - -commit 7329b3339adab12092056bd8159513645d4f9e8a - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-26 13:30:04 +0900 - - #define RB_BLOCK_CALL_FUNC_STRICT 1 - - After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is - dangerous and should be extinct. Let's start from making - rb_block_call_func_t strict, and apply RB_BLOCK_CALL_FUNC_ARGLIST liberally. - -commit 0c8592b9af304dfcac0d08ba96d5f22ad8312e1a - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-27 14:11:02 +0900 - - fix function prototype mismatch of rb_block_call - - Nobu missed it in f0e73fc9862c8d2c57a89349fb79012b826b8245. - -commit 6007c7c3663fd1b92020cf60e806cc9634947d5d - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-27 13:03:47 +0900 - - delete rb_method_defined_by declaration. - - Ko1 missed this in d5893b91faa7dc77ca6c9728d1054dabd757aead. - -commit 2fb723b8af8dbcc2afc0fae7d434e66c2258dece - Author: Nobuyoshi Nakada - Date: 2019-08-27 15:11:01 +0900 - - Revert "Explain which test task" - - This reverts commit 9bc1667a188392b94971b9b96507af76cbd5f413. - - `name` lines are not expanded. - -commit 0c8525ecc987615f59fc68f2f767fc12217a7e4e - Author: Yusuke Endoh - Date: 2019-08-26 17:26:39 +0900 - - .github/workflows/coverage.yml: add a cron job for coverage in Actions - - Notes: - Merged: https://github.com/ruby/ruby/pull/2401 - -commit 9bc1667a188392b94971b9b96507af76cbd5f413 - Author: Nobuyoshi Nakada - Date: 2019-08-27 14:30:52 +0900 - - Explain which test task - -commit 2789bdddc7602fbc2089242d12e5cc4deed181c4 - Author: Nobuyoshi Nakada - Date: 2019-08-27 14:20:07 +0900 - - Use array indexing with considering clang's feeling - - ``` - In file included from sprintf.c:1256: - ./vsnprintf.c:833:8: warning: adding 'int' to a string does not append to the string [-Wstring-plus-int] - IS_PRI_EXTRA_MARK(fmt)) { - ^~~~~~~~~~~~~~~~~~~~~~ - ./vsnprintf.c:826:34: note: expanded from macro 'IS_PRI_EXTRA_MARK' - strncmp((s)+1, PRI_EXTRA_MARK+1, \ - ~~~~~~~~~~~~~~^~ - ./vsnprintf.c:833:8: note: use array indexing to silence this warning - ./vsnprintf.c:826:34: note: expanded from macro 'IS_PRI_EXTRA_MARK' - strncmp((s)+1, PRI_EXTRA_MARK+1, \ - ^ - 1 warning generated. - ``` - -commit d53b669948af29ca086d915c8bded0d1963e2c98 - Author: Yusuke Endoh - Date: 2019-08-27 14:05:20 +0900 - - compile.c: remove const from the first argument of dladdr - - Unfortunately, dladdr accepts void*, not const void*, in Solaris. - -commit 8eee3f3a3623d728c160c41546513594793fb7fb - Author: Yusuke Endoh - Date: 2019-08-27 13:57:25 +0900 - - signal.c: Don't mark ruby_abort as NORETURN on Solaris - - to suppress a warning. - - ``` - signal.c: In function 'ruby_abort': - signal.c:987:1: warning: 'noreturn' function does return - } - ^ - ``` - -commit 76abd79629bb4ed1e2811f4c9dcccf3165a8af3e - Author: Kazuhiro NISHIYAMA - Date: 2019-08-27 10:38:58 +0900 - - Fix the appropriate C++ compiler in OS X selection - - Merge space and slash to character class and add missing `CXX=` before `=g++-4.2` - at 5e10cb04e88c8a95ee44f6cad2bdf264e0dff92a - -commit 22834112650e33e16dd15529a260c0a42745168e - Author: Nobuyoshi Nakada - Date: 2019-08-27 07:59:10 +0900 - - Added license comment [Bug #12230] [ci skip] - -commit 744be55fad44f73e4966c1c6a2d601f1d31354b2 - Author: aycabta - Date: 2019-08-27 06:30:32 +0900 - - Remove duplicated delegation - -commit fd0a4a64a38d003621f6b11b5581bd453b12ed00 - Author: aycabta - Date: 2019-08-27 05:59:46 +0900 - - Delegete an instance method to a class method correctly - -commit 9f0f77717368783bfded08875ade2ea46b75fab7 - Author: Aaron Patterson - Date: 2019-08-27 05:41:54 +0900 - - this iv table should also use the new update function - -commit f13db4adde53299868b7523525e5aa2fe0a4b157 - Author: aycabta - Date: 2019-08-27 05:33:27 +0900 - - Save value to @ambiguous_width because of a accessor - -commit 978ff1ff3a0db5455d591e151f212f4eff0f86c0 - Author: aycabta - Date: 2019-08-27 05:24:13 +0900 - - Pick lib/readline.rb from ruby/reline - -commit f2a5c50f94cb53a418c09e53657292ab56347c2d - Author: aycabta - Date: 2019-08-27 05:10:25 +0900 - - The "private" doesn't make sense for class methods and a constant - -commit 68207bb4fc35c2f92ba8b5d5b091d6f93f580850 - Author: aycabta - Date: 2019-08-27 05:08:58 +0900 - - Use preposing "private" to define methods - -commit d8bcede9c357c5f0e743e736f698d1ebdada8f14 - Author: aycabta - Date: 2019-08-27 05:07:55 +0900 - - Adjust method forwardings of Reline - -commit 09d8e06b335d7647fa5e0385980ba3f1a67a592b - Author: Aaron Patterson - Date: 2019-08-27 03:31:52 +0900 - - Try only updating hash value references - - I'm afraid the keys to this hash are just integers, and those integers - may look like VALUE pointers when they are not. Since we don't mark the - keys to this hash, it's probably safe to say that none of them have - moved, so we shouldn't try to update the references either. - -commit d9bfbe363d14f8258d239eb702729926571b88e7 - Author: Aaron Patterson - Date: 2019-08-27 03:14:03 +0900 - - Make `gc_update_table_refs` match `mark_tbl_no_pin` a little more closely - - This commit just makes `gc_update_table_refs` match `mark_tbl_no_pin` - more closely. - -commit 3a4a58e2ccf13be874cc81e9c663bd39e687acd3 - Author: aycabta - Date: 2019-08-27 01:42:41 +0900 - - Fix use_lib_reline for test/readline - -commit 344f507e4e7f74477f29a8f72d1042a468ce8a42 - Author: manga_osyo - Date: 2019-08-24 01:34:00 +0900 - - Remove .freeze. - -commit 50d4a77041db71ce3110038109b65c3f059c0676 - Author: manga_osyo - Date: 2019-08-18 16:07:20 +0900 - - Add test with encoding. - -commit 0295bffc9645d8e6b40f60d285c69e861f439967 - Author: manga_osyo - Date: 2019-08-18 15:59:42 +0900 - - Change to test file path. - -commit 1ee9299bcab5c9a685fbf0b8b34d6abab157b2bc - Author: manga_osyo - Date: 2019-08-18 15:51:18 +0900 - - Add support Windows in CI. - -commit f33117fbc6a8fb90f94bb9ff2a4d948a19933c2a - Author: manga_osyo - Date: 2019-07-16 21:26:30 +0900 - - Add test reline. - -commit 195f545c14857d7eb76c2f7a76e6623f5285014f - Author: manga_osyo - Date: 2019-07-16 21:05:27 +0900 - - Fix `Reline::Windows`. - -commit 298ac047102f8651970b50a0096989a0b7df88ca - Author: manga_osyo - Date: 2019-07-15 03:10:26 +0900 - - Refactoring Reline. - -commit afed2668a6f6675536e967f053d7dec0b2026e2f - Author: manga_osyo - Date: 2019-07-15 03:08:36 +0900 - - Fix reference core method. - -commit f60e5a1f99088849fdc8ddfa84d594179c197a54 - Author: manga_osyo - Date: 2019-07-15 01:32:17 +0900 - - Remove test_mode in `lib/reline`. - -commit 9c0cd6a09eff793356ddc65a76b3fc72c61fee05 - Author: manga_osyo - Date: 2019-07-14 21:05:02 +0900 - - Refactoring Reline accessor. - -commit d5b237325b631e06775c2c7b5a8012b61ca5bccf - Author: git - Date: 2019-08-27 00:11:32 +0900 - - * 2019-08-27 [ci skip] - -commit 7d9c3a5712b00ebe059a63954674c10d247d1ec3 - Author: Jeremy Evans - Date: 2019-08-25 15:18:23 +0900 - - Handle binding.irb for frozen objects and BasicObjects using a delegate - - Fixes Ruby Bug 13264 - -commit caeafbe8252d13624a16acac703e4d04fcb19062 - Author: Jeremy Evans - Date: 2019-08-25 09:16:11 +0900 - - Move private call without arguments inside method - - This code did not have the desired effect. I'm not sure if - irb_binding is supposed to be private or not. If not, the private - call can just be removed. - -commit ccc5b22a7f4302a286cb16a797e8dccf422e8279 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-26 21:09:02 +0900 - - Expand JOBS instead of meaningless export (#2402) - - * Expand JOBS instead of meaningless export - - * Remove -j option in TESTOPTS of test-bundled-gems - - https://github.com/ruby/ruby/runs/203129516#step:10:167 - > invalid option: -j3 - - Notes: - Merged-By: znz - -commit 48f1a38f23f9a544e71c5656c83c419c064509fd - Author: Nobuyoshi Nakada - Date: 2019-08-26 18:21:04 +0900 - - Limit ChangeLog entries - - Since the previous release date, when the starting message is not - found. - -commit 972222c039bc5f5aa4a0d5bd6ec48ff4629e0fff - Author: Kazuhiro NISHIYAMA - Date: 2019-08-26 17:45:18 +0900 - - Show MFLAGS to check `Set ENV` in .github/workflows/ubuntu.yml - -commit 44bead391f32ece837e741c34474aa281c45ec94 - Author: Nobuyoshi Nakada - Date: 2019-08-26 16:38:08 +0900 - - CPPFLAGS is not needed for link - -commit 261465362222a2de6528c03aa8cc6d237f8435bb - Author: Nobuyoshi Nakada - Date: 2019-08-26 16:30:45 +0900 - - Moved INCFLAGS to XCFLAGS from CPPFLAGS as well as mswin - - Rules which have used CPPFLAGS will need XCFLAGS or INCFLAGS now. - -commit fafabe2f43ecd58588ac89edc5c177dd956825ad - Author: Nobuyoshi Nakada - Date: 2019-08-26 16:11:53 +0900 - - Add INCFLAGS for fake.rb - - INCFLAGS is not included in CPPFLAGS on mswin, not to be exported - to rbconfig.rb. - -commit b4d6d9c167a096c8647f989ae74e21c1929d227f - Author: Nobuyoshi Nakada - Date: 2019-08-26 13:14:01 +0900 - - Removed unnecessary flags for fake.rb - - Flags for ruby core such as warning and `_FORTIFY_SOURCE` macro - are not necessary to make fake.rb, except for `RUBY_EXPORT` macro - which prevents to include ruby/backward.h. - -commit 1581249de369e4d3e4ac09856bd10fb98cd4addb - Author: Nobuyoshi Nakada - Date: 2019-08-26 13:09:48 +0900 - - Added in-srcdir macro [ci skip] - -commit 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-23 12:14:06 +0900 - - uid_t and gid_t are narrower than VALUE. - - Often uid / gid are 16 bit or 32 bit integers, while VALUE are 32 - to 64 bits. They tend to differ in size. Because rb_ensure expects - its callbacks to take VALUE arguments, narrowing must be done by - hand, otherwise data corruption can happen depending on machine ABI. - -commit 48131a46730b76bdb252d24507980ea90c0166ad - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-23 10:10:59 +0900 - - rb_mjit_header.h is not worth documenting [ci skip] - - This is an auto-generated header file that does not include anything - interesting. Should skip generating CAPI documents. - -commit fa6c1b06ad65e18bd187b643c045e700f7081c2d - Author: Nobuyoshi Nakada - Date: 2019-08-26 11:58:55 +0900 - - Suppress a "clobbered" warning - -commit 4448d5864237de5d570f3d0ea80ddc53cf6f57fe - Author: git - Date: 2019-08-26 11:08:30 +0900 - - * 2019-08-26 [ci skip] - -commit 5e10cb04e88c8a95ee44f6cad2bdf264e0dff92a - Author: Nobuyoshi Nakada - Date: 2019-08-26 11:04:11 +0900 - - Refined the appropriate C++ compiler in OS X selection - - Allows CC to be prefixed another path or command, e.g., ccache. - -commit b4dfac2c125605881239fd62b7f458f52efff7ed - Author: Jeremy Evans - Date: 2019-08-26 04:53:15 +0900 - - Fix ArgumentError in expand_tabs.rb - - This fixes the following in my environment: - - misc/expand_tabs.rb:29:in `=~': invalid byte sequence in US-ASCII (ArgumentError) - - This switches from =~ to start_with? as a regular expression is - not actually needed here. - -commit e496e96547b64c3a2fa6f285c3bc9bd21a245ac6 - Author: Jeremy Evans - Date: 2019-08-26 04:50:19 +0900 - - Document that Enumerable#sum may not respect redefinition of Range#each - - It already documented that it may not respect redefinition - of Integer#+. - - Fixes [Bug #13700] - -commit 71d97a5ef80a23b0bb1005570ed059580981a467 - Author: Jeremy Evans - Date: 2019-08-26 02:52:58 +0900 - - Fix sample/drb/http0serv.rb - - Previously, trying to use this would result in: - - undefined method `uri' for # (NoMethodError) - - Also, use a relative require to load sample/drb/http0.rb. - - Fixes [Bug #13431] - -commit 365e5b38a9ca24116a9c3133e0a0e8ce230ccb02 - Author: Yusuke Endoh - Date: 2019-08-25 23:08:13 +0900 - - configure.ac: Improve icc_version guessing for non-icc environment - - icc_version was wrongly defined as "__ICC" on non-icc C compiler, which - caused a warning: - - ``` - ./configure: line 8211: test: __ICC: integer expression expected - ``` - - This change adds a sed command to delete "__ICC". - -commit 11f7c30fa7812388b8919453b92fdf5613db22dd - Author: Yusuke Endoh - Date: 2019-08-25 22:11:49 +0900 - - configure.ac: fix the guess of icc_version - - The icc_version guessing was accidentally disabled because of - 61885c9b7ca8ccdaf53d7c365fbb86bad3294d88; `AC_PROG_CC_C99` changes - CC like "icc -std=c99", and `AS_CASE(["x$CC"], [xicc],` does not match. - - The variable `icc_version` is eventually defined, so the `AS_CASE` is - not needed. This change removes the `AS_CASE`. - -commit fa5f7771f2312147d4b628205fdaf90afc3527e6 - Author: Takashi Kokubun - Date: 2019-08-25 20:10:24 +0900 - - Drop duration from AppVeyor notification - - The format is a little weird, and not so helpful either. - -commit 6944a1aa4f805c19faa3340f841a459f907f840e - Author: Yusuke Endoh - Date: 2019-08-25 19:29:52 +0900 - - lib/webrick.rb: use require_relative for webrick/utils.rb - - `require "webrick/utils.rb"` should load `lib/webrick/utils.rb`, but on - some CI machines, it wrongly loads `test/webrick/utils.rb`, which caused - circular require warning: - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/ubuntu/ruby-master/log/20190825T093007Z.log.html.gz - ``` - /data/chkbuild/tmp/build/20190825T093007Z/ruby/lib/rubygems/core_ext/kernel_require.rb:61: warning: /data/chkbuild/tmp/build/20190825T093007Z/ruby/lib/rubygems/core_ext/kernel_require.rb:61: warning: loading in progress, circular require considered harmful - /data/chkbuild/tmp/build/20190825T093007Z/ruby/lib/webrick.rb - ``` - -commit c775ab5e2892a86e89cebc2c2d16e7b0fd190f19 - Author: Nobuyoshi Nakada - Date: 2019-08-25 18:27:57 +0900 - - `local_path?` is a class method [ci skip] - -commit cc6fe1524122ba7d890129c7fdbfd28edba198bf - Author: Yusuke Endoh - Date: 2019-08-25 16:59:45 +0900 - - tool/lib/vcs.rb: explicitly fail when notes/commits is not available - -commit 1b03d2d76be48039e8a4d609f36d221077a1daa9 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-25 13:58:30 +0900 - - Revert workaround - -commit 5decf66ab3395193160673ddd80395a5b3b86223 - Author: Nobuyoshi Nakada - Date: 2019-08-25 07:39:57 +0900 - - Inspect dynamic symbol as well as static symbol - -commit b341e98b041e5e0f1fd2f40145b0b3d9cd8fdc3f - Author: Nobuyoshi Nakada - Date: 2019-08-25 11:38:15 +0900 - - Simplified f13a00f5b4 [ci skip] - -commit f13a00f5b471f0f637c3f165daba235f24083bfc - Author: Nobuyoshi Nakada - Date: 2019-08-25 11:24:53 +0900 - - Export all commits as ChangeLog when no starting commit is found [ci skip] - -commit 04735c48ab44c97cbfd5a5cd37f9a1696e2f5a2b - Author: Jeremy Evans - Date: 2019-08-25 06:05:19 +0900 - - Minor documentation fixes [ci skip] - - From zverok (Victor Shepelev) - - Fixes [Misc #16126] - -commit e1c991f8d783440411e5bf4faf3f0923cef4a0e1 - Author: Jeremy Evans - Date: 2019-08-25 01:09:53 +0900 - - Move Object#hash rdoc to hash.c [ci skip] - - This gets RDoc to pick up the documentation correctly. - - Problem pointed out by zverok (Victor Shepelev). - -commit cf5516de7bff474030a820b63788e12f0b8b93d6 - Author: git - Date: 2019-08-25 00:51:59 +0900 - - * 2019-08-25 [ci skip] - -commit 03ee12a3b83ff9d56f3a993850cb134c2e16f846 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-25 00:50:34 +0900 - - Add workaround (2nd try) - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/gentoo/ruby-master/log/20190824T153002Z.fail.html.gz - ``` - /home/gentoo/chkbuild/tmp/build/20190824T153002Z/ruby/tool/lib/vcs.rb:577:in `export_changelog': cannot find the beginning revision of the branch (RuntimeError) - from ./tool/make-snapshot:353:in `block in package' - from ./tool/make-snapshot:351:in `chdir' - from ./tool/make-snapshot:351:in `package' - from ./tool/make-snapshot:523:in `block in
' - from ./tool/make-snapshot:523:in `collect' - from ./tool/make-snapshot:523:in `
' - ``` - -commit df348310dc2ba0b01f7dd7277184c688a5d430fe - Author: Kazuhiro NISHIYAMA - Date: 2019-08-24 23:17:12 +0900 - - Add workaround for some CIs - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian8/ruby-master/log/20190824T093005Z.fail.html.gz - ``` - branches: - * trunk - remotes/origin/trunk - ``` - and - ``` - fatal: Remote branch master not found in upstream origin - ``` - -commit 5d5502dc852cc7588c75c519f5c881ead577e827 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-24 21:26:24 +0900 - - Fix typos - -commit 571ffcd6094ccf1c68d4bfc36e425e0ee524e8b4 - Author: Yusuke Endoh - Date: 2019-08-24 20:31:16 +0900 - - ext/psych/yaml/api.c: Suppress a "variable set but not used" warning - - ``` - compiling ../.././ext/psych/yaml/api.c - ../.././ext/psych/yaml/api.c: In function 'yaml_document_delete': - ../.././ext/psych/yaml/api.c:1122:7: warning: variable 'context' set but not used [-Wunused-but-set-variable] - } context; - ^~~~~~~ - ``` - https://rubyci.org/logs/rubyci.s3.amazonaws.com/ubuntu1604/ruby-master/log/20190824T093004Z.log.html.gz - -commit 97ad7862d5f65c48409a5301609af8448aaae16d - Author: Kazuhiro NISHIYAMA - Date: 2019-08-24 16:22:37 +0900 - - Add debug print - - master branch not found on some CIs - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian9/ruby-master/log/20190824T063005Z.fail.html.gz - ``` - fatal: Remote branch master not found in upstream origin - ``` - -commit fe83ed47e7e79208c0129a0005dcb9d569543893 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-24 10:20:44 +0900 - - Try to fix `make dist` error on chkbuild - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian9/ruby-master/log/20190823T213004Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian8/ruby-master/log/20190824T003006Z.fail.html.gz - -commit b38ab0a3a928939daf7c1772bf49065a3184b88a - Author: git - Date: 2019-08-24 01:41:09 +0900 - - * 2019-08-24 [ci skip] - -commit d5b917d50062559efb5b90ed093293d37e8a40b9 - Author: Nobuyoshi Nakada - Date: 2019-08-24 01:10:42 +0900 - - Named numbered parameter indexes - -commit 2e28b3678fc1b48f7dbca751d2a65d3fe0018789 - Author: Nobuyoshi Nakada - Date: 2019-08-23 20:43:15 +0900 - - [ruby/stringio] Fixed a typo - - https://github.com/ruby/stringio/commit/b249631c433f800c979be2705bf63555075db2fc#commitcomment-34804150 - - https://github.com/ruby/stringio/commit/998d6257fb - -commit d9b73dcc0d5e4c4613a89a1d58727b52bb5d1d10 - Author: Hiroshi SHIBATA - Date: 2019-08-23 17:18:37 +0900 - - Remove github_action_linux tag from bundler examples. - - Maybe it has fixed at 5a384e2c08704dc7af9d8d3bdfc475eb8c0723aa - - Notes: - Merged: https://github.com/ruby/ruby/pull/2399 - -commit 3b55394b07f29fac2717bb82fdc92140b2b302fe - Author: David Rodríguez - Date: 2019-02-19 20:57:41 +0900 - - Ensure all default gems have an gem folder - - Even if they don't ship with any executables. This makes rbinstall - behaviour consistent with rubygems `gem install --default` command. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2085 - -commit 1c5a2682392ece013ae95215d97f0561591b6dc6 - Author: Takashi Kokubun - Date: 2019-08-23 13:57:19 +0900 - - Simplify expand_tabs.rb file selection - -commit a5b809e994ce10d265e73f8c9d7c042e5e84d171 - Author: Nobuyoshi Nakada - Date: 2019-08-23 13:00:17 +0900 - - Check metadata a bit more - -commit 650cd245552d5c1abb244398b98d46ee280c4cd0 - Author: Nobuyoshi Nakada - Date: 2019-08-22 20:14:59 +0900 - - Hoisted out get_digest_obj_metadata - -commit 9ffb0548bf95e1113f5657453c64477e792d1230 - Author: git - Date: 2019-08-23 09:46:17 +0900 - - * 2019-08-23 [ci skip] - -commit 1d6a31f3d5b1e608dd6726918b64d2369e8df8b1 - Author: Takashi Kokubun - Date: 2019-08-23 09:45:46 +0900 - - Make AppVeyor notification similar to Travis - -commit fd20b32130f52f4a7799a8d7a367f5b39636bc6a - Author: Takashi Kokubun - Date: 2019-08-22 23:10:54 +0900 - - Make GitHub Actions Slack notification consistent - - with Travis, rather than AppVeyor. - - Formerly it was made similar to AppVeyor to provide some normal set of - CI failure notification. But for some reason people preferred a shorter - variant and introduced a1d606c079f6c3d1779d885e0bf2e3991251609e and - d8d8015b93c6daa8d8433895464db3493a2056e2. - - Instead of AppVeyor format, this commit chose Travis-like format to achieve - consistency and to include usual CI-failure information, while keeping - it one-liner for people who prefer short notifications. - - Note that this shrinks the 40-char sha to 10-char, using the new feature - of k0kubun/action-slack@v2.0.0: - https://github.com/k0kubun/action-slack/commit/1c88a05dac664cbafa1c99a37f292ed23ac1c289 - -commit efc89703365fa787c012370c18803bae67924526 - Author: git - Date: 2019-08-22 22:47:05 +0900 - - * expand tabs. [ci skip] - - Tabs are expanded because previously the file did not have any tab indentation. - Please update your editor config, and use misc/expand_tabs.rb in the pre-commit hook. - -commit a4d389d8fe87b6af9e5fac0e430d56a4ee9b8470 - Author: Takashi Kokubun - Date: 2019-08-22 22:46:29 +0900 - - Improve the description of MJIT cancel-all [ci skip] - -commit 15eaedf805fb2727c79a6c59af6d5f6c2a6d634b - Author: Takashi Kokubun - Date: 2019-08-22 21:13:34 +0900 - - Add misc/expand_tabs.rb ported from auto-style.rb - - This is implemented to close [Misc #16112] because all other options got - at least one objection, and nobody has objected to this solution. - - This code is a little complicated for the purpose, but that's just - because it includes some historical code for auto-style.rb: - https://github.com/ruby/ruby-commit-hook/blob/918a7c31b69ad2f7b125608c1c6a1f4fd01ec15a/bin/auto-style.rb - - Please feel free to improve this file as you like. - - [Misc #16112] - -commit d8d8015b93c6daa8d8433895464db3493a2056e2 - Author: aycabta - Date: 2019-08-22 09:24:35 +0900 - - Remove footer from message to Slack - -commit a1d606c079f6c3d1779d885e0bf2e3991251609e - Author: aycabta - Date: 2019-08-22 07:57:06 +0900 - - Show short message to Slack - -commit 1940347fdfe44a515a4d4ba31f068a245570b70d - Author: Hiroshi SHIBATA - Date: 2019-08-22 07:21:43 +0900 - - Use () instead of {} for nmake - -commit 2d8d6345ffba384c2825225c0b9c972629ff0d5b - Author: Hiroshi SHIBATA - Date: 2019-08-22 07:03:54 +0900 - - `--fomart progress` is default. It's duplicated. - -commit 0b0fedad7098b70686ef9f3c931a8c9c93d5b00c - Author: Hiroshi SHIBATA - Date: 2019-08-22 07:02:48 +0900 - - Introduce test-bundler-parallel task. - -commit 800821831d6b4319e82d23291d3127212a2e7334 - Author: aycabta - Date: 2019-08-22 06:02:21 +0900 - - Always check multiline termination - -commit 8d804e41a013ab1967a703a0ce388b579f735ac8 - Author: Fernando Wolf Bona - Date: 2019-08-22 05:36:39 +0900 - - Add abs to Matrix (#2199) - -commit 48fdc37ad52d9a59763da4c1c22683713b7ddea8 - Author: aycabta - Date: 2019-08-22 05:07:59 +0900 - - IRB's multiline history is enable only when Reidline mode - -commit 6bdb65c0e6383f2ef845b8f4b0cc3c03e8aec118 - Author: git - Date: 2019-08-22 00:20:27 +0900 - - * 2019-08-22 [ci skip] - -commit a9638511009bb8847dfb037d05bdbbdd685066e7 - Author: Nobuyoshi Nakada - Date: 2019-08-21 16:41:06 +0900 - - Hoisted out rb_id_metadata - -commit 74c6662af5d9748baff7c32e8f0baf7996dd898e - Author: Nobuyoshi Nakada - Date: 2019-08-21 16:31:26 +0900 - - Hoisted out rb_digest_namespace - -commit c030cec7cac3bacd230b87c9610bc67d8b89ab26 - Author: Takashi Kokubun - Date: 2019-08-21 23:13:20 +0900 - - Debug GitHub context on broken notification - - sometimes Slack notification footer becomes just " at ". - It seems like `github.event.head_commit` is missing. Let me debug the - context. - -commit 3df9f3cc13b126cb270743c82f2c037c30a98103 - Author: Nobuyoshi Nakada - Date: 2019-08-21 16:20:31 +0900 - - Separated initializing IDs - -commit 4419b5dbc2e3fe4ec3ac27e3d8b8a2b357f27426 - Author: Nobuyoshi Nakada - Date: 2019-08-21 13:30:43 +0900 - - The investigation is going on... - -commit 81dfe3c47bb397a0a54ee10c6913112181a8466d - Author: Jeremy Evans - Date: 2019-08-21 13:26:12 +0900 - - Enable more Time TZ tests on OpenBSD - -commit a230e65e8b08003c6b346e6ef177bc8655de55b7 - Author: lolwut - Date: 2019-08-16 22:12:40 +0900 - - [bundler/bundler] Freeze time to avoid failures at midnight - - Specify just a string - - set @built_at as nil before testing - - https://github.com/bundler/bundler/commit/578ec96c9c - -commit 1c2774526eef733ea95e5dda576c95169341ba7e - Author: Hiroshi SHIBATA - Date: 2019-08-19 12:51:19 +0900 - - [bundler/bundler] Share test fixtures with parallel_tests - - https://github.com/bundler/bundler/commit/a38161c5be - -commit 10011f4371c4d6f9a5e49b210800beba1e3e3722 - Author: Hiroshi SHIBATA - Date: 2019-08-19 11:36:17 +0900 - - [bundler/bundler] Try to use RunTimeLogger for parallel_tests - - https://github.com/bundler/bundler/commit/faccc522d1 - -commit ace88852f2c2dae52118d80cbf5800ea99e409e6 - Author: David Rodríguez - Date: 2019-01-25 01:28:02 +0900 - - [bundler/bundler] Parallelize test suite - - https://github.com/bundler/bundler/commit/23007cb107 - -commit ede77d82e709956cd1d3c849840107c84cd2e911 - Author: David Rodríguez - Date: 2019-08-15 23:47:18 +0900 - - [bundler/bundler] Fix a couple of typos - - https://github.com/bundler/bundler/commit/52b6b94068 - -commit 1120bacd8b8656b45a56487ee62fd48095aca019 - Author: David Rodríguez - Date: 2019-08-18 06:11:38 +0900 - - [bundler/bundler] Remove the :ruby exclusion tag - - Our current set of specs is the same for all supported rubies, and we - should keep it that way. - - https://github.com/bundler/bundler/commit/c9dc0f6f2c - -commit bcc4ac924d495d74d5ce56c7d4c735a1df320220 - Author: David Rodríguez - Date: 2019-08-18 05:03:26 +0900 - - [bundler/bundler] Remove another 1.8.7 specific bit - - https://github.com/bundler/bundler/commit/8c7942d2c6 - -commit 5ea08883cfc90e05e5fb76e1e10cee1818a40c9e - Author: David Rodríguez - Date: 2019-08-18 05:00:52 +0900 - - [bundler/bundler] Remove old rubies stuff no longer needed - - https://github.com/bundler/bundler/commit/36fb3287f4 - -commit 864f23a457291e64cb6a0703dcc0b3e26e4cf109 - Author: git - Date: 2019-08-21 01:04:27 +0900 - - * 2019-08-21 [ci skip] - -commit 88b1f2dac430d7b10fc98c5a072c4edfeb51b27a - Author: Koichi Sasada - Date: 2019-08-21 01:04:08 +0900 - - `rp(obj)` shows func, file and line. (#2394) - - rp() macro for debug also shows file location and function name - such as: - - [OBJ_INFO:rb_call_inits@inits.c:73] 0x000056147741b248 ... - - Notes: - Merged-By: ko1 - -commit d10e28b875a58e2c4422b8df8f4bbcc2fb0362d0 - Author: Takashi Kokubun - Date: 2019-08-20 23:58:36 +0900 - - Skip tests on Actions if [ci skip] - - It seems that we cannot easily apply job-level [ci skip]. - Therefore this commit skips only Tests step if it's [ci skip]. - -commit 235d810c2ecd1289c963f6dc6cce78ae2572d034 - Author: Takashi Kokubun - Date: 2019-08-20 22:31:41 +0900 - - Deprecate alerting multiple channels - - Some CIs report to two channels, and some others report to only one. - This makes it consistent. Only alert channel should be alerted. - -commit 9557069299ac3b96691040a541afa65761a724ad - Author: Akira Matsuda - Date: 2019-08-20 22:08:41 +0900 - - Avoid creating Hash objects per each mon_synchronize call (#2393) - - Notes: - Merged-By: amatsuda - -commit af121720357e3bcf3d45c0f578d262770c7f45c9 - Author: Nobuyoshi Nakada - Date: 2019-08-20 19:26:12 +0900 - - Removed unused literal assignments [ci skip] - -commit 7a07c54bef599b7b0ce1dd8a6c13021f03a8220d - Author: Nobuyoshi Nakada - Date: 2019-08-20 19:20:22 +0900 - - Subjects may contain a comma [ci skip] - -commit 73af1c4d0078dc3be0cbeca2445047be5c0d852b - Author: Nobuyoshi Nakada - Date: 2019-08-20 13:56:04 +0900 - - [rubygems/rubygems] Use `RbConfig::CONFIG['rubylibprefix']` - - It is defined since ruby 1.9.2. - - https://github.com/rubygems/rubygems/commit/84981ca908 - -commit dd58c4ba3576d5dc1489767a25de9540b79b0ef9 - Author: Nobuyoshi Nakada - Date: 2019-08-20 16:07:43 +0900 - - Investigation of a sporadic error at Github Actions - -commit 5a384e2c08704dc7af9d8d3bdfc475eb8c0723aa - Author: David Rodríguez - Date: 2019-08-20 09:46:31 +0900 - - Fix some bundler specs (#2380) - - * These seem to consistently pass already - - * Show actual command when running `make test-bundler` - - Current the setup command that installs the necessary gems for testing - bundler was printed, but not the actual command that runs the tests. - That was a bit confusing. - - * Borrow trick from setproctitle specs - - * A title that long doesn't get set sometimes - - No idea why, but the test doesn't need that the title is that long. - - * Fix most gem helper spec ruby-core failures - - * Fix the rest of the gem helper failures - - * Fix version spec by improving the assertion - - * Remove unnecessary `BUNDLE_RUBY` environment var - - We can use `RUBY` when necessary, and `BUNDLE_RUBY` is not a good name - because bundler considers `BUNDLE_*` variables as settings. - - * Rename `BUNDLE_GEM` to `GEM_COMMAND` - - This is more descriptive I think, and also friendlier for bundler - because `BUNDLE_` env variables are interpreted by bundler as settings, - and this is not a bundler setting. - - This fixes one bundler spec failure in config specs against ruby-core. - - * Fix quality spec when run in core - - Use the proper path helper. - - * Fix dummy lib builder to never load default gems - - If a dummy library is named as a default gem, when requiring the library - from its executable, the default gem would be loaded when running from - core, because in core all default gems share path with bundler, and thus - they are always in the $LOAD_PATH. We fix the issue by loading lib - relatively inside dummy lib executables. - - * More exact assertions - - Sometimes I have the problem that I do some "print debugging" inside - specs, and suddently the spec passes. This happens when the assertion is - too relaxed, and the things I print make it match, specially when they - are simple strings like "1.0" than can be easily be part of gem paths - that I print for debugging. - - I fix this by making a more exact assertion. - - * Detect the correct shebang when ENV["RUBY"] is set - - * Relax assertion - - So that the spec passes even if another paths containing "ext" are in - the load path. This works to fix a ruby-core issue, but it's a better - assertion in general. We just want to know that the extension path was - added. - - * Use folder structure independent path helper - - It should fix this spec for ruby-core. - - * Fix the last failing spec on ruby-core - - * Skip `bundle open ` spec when no default gems - -commit aa03de8ba13e5ffa7049d3a881d2f5fe70dd4092 - Author: aycabta - Date: 2019-08-20 08:24:50 +0900 - - Treat two types "do" correctly - - A "do" what has followed a token what has EXPR_CMDARG is for a block, - and in other cases "do" is for "while", "until" or "for". - -commit dc0e45e39b37556af8abf6cdb0180e2973041931 - Author: Alan Wu - Date: 2019-08-19 13:42:29 +0900 - - Update moved objects in original_iseq - - Without doing this, enabling a TracePoint on a method could lead to use - of moved objects. This was found by running - `env RUBY_ISEQ_DUMP_DEBUG=to_binary make test-all`, which sets - orignal_iseq then runs the compaction tests and the tracepoint tests. - - Please excuse the lack of tests. I was not able to figure out how to - reliably trigger a move on a specific iseq imemo to make a good - regression test. - - To manually confirm the problem and this fix, you can run: - ``` - env RUBY_ISEQ_DUMP_DEBUG=to_binary make test-all \ - TESTOPTS="test/ruby/test_gc_compact.rb \ - test/gdbm/test_gdbm.rb \ - test/ruby/test_settracefunc.rb" - ``` - - Or the following script: - - ```ruby - tp = TracePoint.new(:line) {} - 1.times do # put it in a block to not keep these objects alive - objects = 10_000.times.map { Object.new } - objects.hash - end - - 1.times do - # this allocation pattern can realistically happen in an app - # at load time - beek = 10_000.times.map do - eval(<<-RUBY) - def foo - a + b - 1.times { - 4 + 234234 - } - nil + 234 - end - RUBY - Object.new - Object.new - end - beek.hash - end - - tp.enable(target: self.:foo) { 234 } # allocate original iseq - - GC.verify_compaction_references(toward: :empty) - GC.compact - - tp.enable(target: self.:foo) { 234234 } # crash - ``` - - [Bug #16098] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2391 - -commit 19b0161b851ba32d5bc6c367db5b520d35905d6b - Author: Nobuyoshi Nakada - Date: 2019-08-20 01:58:45 +0900 - - Check whether syscall(2) is deprecated by actual warnings - -commit 588b74e8d84532d3eb0e4aa06372b7a6b171b9cd - Author: Nobuyoshi Nakada - Date: 2019-08-20 01:11:28 +0900 - - Check for minimum required OSX version earlier - -commit 9ee770a2ce57fce9a5dedf6c6c35ca8e02fd044b - Author: Nobuyoshi Nakada - Date: 2019-08-20 00:39:06 +0900 - - Bail out if unsupported old MacOSX is required - -commit af2c8d283665f741f82b4e16b06c520e702c012b - Author: Nobuyoshi Nakada - Date: 2019-08-20 00:18:07 +0900 - - Fixed the check for OSX version - - Should compare minimum required version, and with the particular - macro defined for each version. Also made the error messages - consistent. - -commit e6b72e8cae786c9752cc34541b58b5635d5c76bb - Author: David Carlier - Date: 2019-08-19 23:36:47 +0900 - - retrieve current path on macOS - - Notes: - Merged: https://github.com/ruby/ruby/pull/2390 - -commit 1408f15921a8a051055a68fb96e050a7d4cd35fb - Author: git - Date: 2019-08-20 00:21:17 +0900 - - * 2019-08-20 [ci skip] - -commit 8df25214de1a240ec6859415692b29955d2d423a - Author: Yusuke Endoh - Date: 2019-08-20 00:17:26 +0900 - - io.c: make ioctl_req_t int in Android - - The second argument of ioctl seems to be int in Android. - Android is not a supported platform, but this one-line change allows - ruby to build by Android NDK r20. - -commit 45bed2850e5bf31c3528cf3559e76c3823bb4340 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-19 19:37:07 +0900 - - Reduce sub-shell and use `&&` instead of `;` - -commit 8882986d9701ef8be4cdd87e64a30321f1738cee - Author: Kenichi Kamiya - Date: 2019-08-19 18:43:23 +0900 - - Drop duplicated sample code (#2389) [ci skip] - - * Drop duplicated sample code - - * Drop another style sample - - https://github.com/ruby/ruby/pull/2389#issuecomment-522489520 - - * Update sample list - -commit 209ea85b54c9229f0c1e5c730dee05a096599eb0 - Author: Hiroshi SHIBATA - Date: 2019-08-19 18:37:22 +0900 - - Make portable for standalone test-unit gem. - - * It can invoke test-unit with envutil.rb - * refute_match of test-unit couldn't handle String instance. - -commit 9b330200f8e180ca393cac25f811f6194990aaa4 - Author: Kenichi Kamiya - Date: 2019-08-19 18:16:45 +0900 - - Remove unused variable to suppress warning (#2388) [ci skip] - - ``` - sample/observe.rb:30: warning: assigned but unused variable - clock - ``` - -commit 97c377e2b1954b977b015f11183b201ad4a88bd6 - Author: Takashi Kokubun - Date: 2019-08-19 18:11:51 +0900 - - Mark Travis osx cron-only - - because it has often hanged like - https://travis-ci.org/ruby/ruby/jobs/573691637, - and we also have almost the same test suite on GitHub Actions now, which - seems to be stable in `make check` so far. - -commit cda8664471b5c2adb9d1ea9563ac38378621d0fd - Author: Kenichi Kamiya - Date: 2019-08-19 18:00:29 +0900 - - Update a sample code (#2387) - - Kernel#inspect does not call #to_s now - - To follow https://github.com/ruby/ruby/commit/fd7dc23d281f38a71fa7f9c32812cd468c4b1788 - -commit 355acbafde40c04b8586e1d9185b4965552e00fd - Author: Hiroshi SHIBATA - Date: 2019-08-19 17:52:13 +0900 - - Update the canonical repository url - -commit 6dd9736c3a73ecd9b0dcf47348a81fb934eb88b3 - Author: David CARLIER - Date: 2019-08-19 17:36:28 +0900 - - crash report on mac little update - - displaying vm info as Linux and FreeBSD. - checking libproc as it is present only from 10.5 version. - - https://github.com/ruby/ruby/pull/2384 - -commit 605d2ce9b98c4306505c8be05483e3d296db5f1e - Author: Kenichi Kamiya - Date: 2019-08-19 17:30:59 +0900 - - Accurate a sample to show having some ext (#2385) - -commit 45454bdb8b25def782677dceb92cfd7b2d8b83c1 - Author: Nobuyoshi Nakada - Date: 2019-08-19 16:37:29 +0900 - - Prefer Regexp#=~ to Regexp#match when the RHS may be nil - -commit b4daa442704204b93a586fb7b696998f33b29c72 - Author: Nobuyoshi Nakada - Date: 2019-08-19 16:32:57 +0900 - - Use modifier for pid_t - -commit 8108594f4701b02bfb7b90b7c2585a8214d8e64d - Author: Nobuyoshi Nakada - Date: 2019-08-19 16:18:54 +0900 - - unsigned int should have enough bits for rb_thread_shield_waiting - -commit 1bd60c66d385142d08f678f8a9563c311cfc3fe8 - Author: Nobuyoshi Nakada - Date: 2019-08-19 15:55:53 +0900 - - Fix FL_USER19 - - * include/ruby/ruby.h: cast via `unsigned int` explicitly, to get - rid of signed extension by implicit integer promotion. - -commit 4515bcc922376771c56733745c7595e14449b6d8 - Author: NAKAMURA Usaku - Date: 2019-08-19 15:37:28 +0900 - - Omit version.h when merging - -commit c5db4c28f9349eb296a360dc08d6b88be66916d1 - Author: Yusuke Endoh - Date: 2019-08-19 15:01:48 +0900 - - cont.c: remove unused STACK_GROW_DIR_DETECTION - - to suppress a warning for "unused variable" - -commit 6c2aa8689ade82578e9e16be37e21e16eb7ce069 - Author: Takashi Kokubun - Date: 2019-08-19 14:59:58 +0900 - - Roughly retry `brew update` - - as it failed randomly https://github.com/ruby/ruby/runs/196712109 - -commit 39a43d9cd09f8c880d0a70d9cb8ede6d7e6ef583 - Author: Benoit Daloze - Date: 2019-08-19 14:51:00 +0900 - - Make it as clear as possible that RubyVM is MRI-specific and only exists on MRI (#2113) [ci skip] - - * Make it clear as possible that RubyVM is MRI-specific and only exists on MRI - - * See [Bug #15743]. - * Use "CRuby VM" instead of "Ruby VM" for clarity. - - * Use YARV rather than "CRuby VM" for documenting RubyVM::InstructionSequence - - * Avoid introducing a new "CRuby VM" term in documentation - -commit d76be10df11cf24d7a5a1f88a4aadc6d817db4a7 - Author: Yusuke Endoh - Date: 2019-08-19 14:43:15 +0900 - - missing/memcmp.c: suppress a `-Wparentheses` warning - -commit 1f3f50fb5eb08ede6cfaf450e0d7db797ec46c95 - Author: git - Date: 2019-08-19 14:34:29 +0900 - - * expand tabs. [ci skip] - -commit 574a9edfb3c20165c919d447902d1052165b2132 - Author: Nobuyoshi Nakada - Date: 2019-08-19 14:34:13 +0900 - - Set flag to allow unprivileged users to create symlinks (#2381) - - * [Win32] set flag to allow unprivileged users to create symlinks - - Notes: - Merged-By: nobu - -commit bc1e2271af54087cb3b9e4a0cdceeead56ee3a1a - Author: Yusuke Endoh - Date: 2019-08-19 09:45:41 +0900 - - lib/rdoc/markup/parser.rb: remove a unused variable initialization - -commit 4c13368972366507b741be60602f314b85861f52 - Author: Takashi Kokubun - Date: 2019-08-19 09:46:55 +0900 - - Make AppVeyor notification colors consistent - - It was using the same one as original AppVeyor's notification, but it's - just inconsistent with others like Travis and GitHub Actions. - -commit d106f082915cbab454d5a7dc3661cea5136f42cf - Author: Takashi Kokubun - Date: 2019-08-19 09:41:51 +0900 - - Stop reporting test-bundled-gems results - - by marking continue-on-error. - - I dropped it to test Slack notification, and I finished to test it. - -commit c100e3856a624f10b461d202f07f49791aa29c89 - Author: Takashi Kokubun - Date: 2019-08-19 03:40:33 +0900 - - Workaround errors on multi-line commit message - - by using toJson with fields. - -commit e139d27748a0548c0ae10fb483c7389caacd4b3d - Author: Takashi Kokubun - Date: 2019-08-19 03:14:18 +0900 - - Make Slack notification available - - for macOS / Windows as well. - - Docker-based GitHub Action does not work on these OSes. - -commit aa5fbb5a7661fa5329881415e65a24151507e69a - Author: git - Date: 2019-08-19 01:50:18 +0900 - - * 2019-08-19 [ci skip] - -commit 2f6c8ed26eec4ad2d2fdaa0823cc63ba32f4c7a2 - Author: Takashi Kokubun - Date: 2019-08-19 01:49:51 +0900 - - Implement Slack notification for Actions - -commit e4c43207f9c7c56ecc76bb941c08a686a242b1de - Author: Takashi Kokubun - Date: 2019-08-18 23:32:49 +0900 - - Revert "Try notifying Slack from Actions" - - This reverts commit d8807e8b1a9d09ee1543e18618b4ef7e8203c616. - - We'd need more features. Reverting to customize this later. - -commit d8807e8b1a9d09ee1543e18618b4ef7e8203c616 - Author: Takashi Kokubun - Date: 2019-08-18 23:19:09 +0900 - - Try notifying Slack from Actions - - https://github.com/8398a7/action-slack - https://github.com/marketplace/actions/action-slack - -commit 829b800c10086ee504995c6e088d87370c552c40 - Author: Takashi Kokubun - Date: 2019-08-18 19:09:40 +0900 - - Reorder Travis matrix.include - - to clarify what's running for every commit. - -commit 51edcbad5be46af800961aabc7b45f0ce6509990 - Author: Hiroshi SHIBATA - Date: 2019-08-18 18:08:38 +0900 - - Use master branch instead of trunk. - -commit 9132153930b88b5ffeb95d42081c05d5eceb2d90 - Author: Hiroshi SHIBATA - Date: 2019-08-18 17:40:01 +0900 - - Ignore tags on default gems from ruby core repository. - -commit ad0ea708caec880c3f357fe761c215efc169fa55 - Author: Takashi Kokubun - Date: 2019-08-18 15:48:52 +0900 - - Drop before_test for mswin too - - for consistency. In the pull request, `before_test` was dropped only for - msys2 to fix msys2-only failure. But there's no need to keep it - inconsistent now. - -commit cba8166cc198509f236e1e8ed2feb7a1304f6718 - Author: MSP-Greg - Date: 2019-08-18 15:47:19 +0900 - - Appveyor - vc120 use OpenSSL 1.0.2, vc140 use 1.1.1 (#1998) - - * appveyor.yml - OpenSSL vc120 -> 1.0.2, vc140 -> 1.1.1 - - * Try just using build_script - -commit 6b42b0c60ce51cc8228892e6a99c83fefb19f131 - Author: Masataka Pocke Kuwabara - Date: 2019-08-18 15:39:19 +0900 - - Fix document of `GC.start` (#2382) - -commit d3da1d57d3c184298b7f6fb5083a39bd22cc9a4f - Author: Hiroshi SHIBATA - Date: 2019-08-18 15:02:21 +0900 - - Skip open_spec.rb:L95 because ruby repo doesn't have json as default gems. - -commit a77b3b4476241b6b4246fc805ac5fc357f8c4e57 - Author: David Rodríguez - Date: 2019-08-17 20:39:56 +0900 - - [bundler/bundler] Remove unnecessary require - - https://github.com/bundler/bundler/commit/8ef571ed4e - -commit 683f9e1dbf42aa4b326b244f1d4dbbbdcb9e8ceb - Author: David Rodríguez - Date: 2019-08-17 00:45:00 +0900 - - [bundler/bundler] No need to activate the `fileutils` default gem - - The version we're vendoring actually relaxed this restriction back to - 2.3.0+, so we can always use the vendored version. - - https://github.com/bundler/bundler/commit/d366cbfe5d - -commit 4756c5f7e79642484d01a7dbca17357eb8b08ef1 - Author: David Rodríguez - Date: 2019-07-24 01:44:21 +0900 - - [bundler/bundler] Remove unnecessary rubygems monkeypatch - - Instead, make sure we always load the local copy of bundler during - specs, and never end up using the default copy. - - https://github.com/bundler/bundler/commit/ac655ffeda - -commit 5a69a23afcc39a87bf808f484fa476978a9a0b4d - Author: David Rodríguez - Date: 2019-08-17 00:54:12 +0900 - - [bundler/bundler] Don't use system bundler on this spec - - If we use system bundler, when booting the "outermost" bundler process, - bundler will save the path to the system bundler in BUNDLE_BIN_PATH, and - use it again when booting the "innermost" bundler process (`bundle exec - echo foo`). - - That means that second process will use the system bundler path again. - However, we have `-rsupport/hax` in RUBYOPT, so that file will load from - the local copy of bundler, and that file will load `bundler/version` - from the project (not from system), because -Ilib is in the LOAD_PATH. - - That will end up causing redefinition errors because the same constant - will be loaded from two different locations. - - In general, this is expected behavior, normally you will wrap the - process with `Bundler.with_original_env` to reset the environment. - However, the easiest fix here is to not use system bundler, because it's - not really necessary and thus doesn't help the readability of the spec. - - https://github.com/bundler/bundler/commit/a3d72a34ab - -commit 0653d8c6018dc9f52856c7b38188c88669be2c83 - Author: David Rodríguez - Date: 2019-08-17 00:51:18 +0900 - - [bundler/bundler] Fix spec using the deprecated `bundle config` mode - - https://github.com/bundler/bundler/commit/789dd1864f - -commit c50c2354cf9a43978626e5573e72574516b28da9 - Author: David Rodríguez - Date: 2019-08-02 21:08:28 +0900 - - [bundler/bundler] Require relatively from exe/ when possible - - https://github.com/bundler/bundler/commit/e4cbb91b7d - -commit 998204882b25f0cee5db1749a877ef9780c8925f - Author: David Rodríguez - Date: 2019-08-02 20:23:20 +0900 - - [bundler/bundler] Last relative requires - - https://github.com/bundler/bundler/commit/fb587b9ebb - -commit f753961611d286332e968f3b30f9b55b8590ef7d - Author: David Rodríguez - Date: 2019-08-03 19:22:36 +0900 - - [bundler/bundler] Remove a bunch of unneeded rubygems requires - - https://github.com/bundler/bundler/commit/f9cb39e614 - -commit 7659f00a8dd1df0e823cd5a47c6b4036c94e1321 - Author: David Rodríguez - Date: 2019-08-16 22:56:19 +0900 - - [bundler/bundler] Move local variable to only branch where it's used - - https://github.com/bundler/bundler/commit/3995b3345d - -commit d80f5399adc3564d05339e6dff92ea1e95fb280a - Author: Zehan Zhao - Date: 2016-08-15 23:44:19 +0900 - - [bundler/bundler] Fix open default gem error - - https://github.com/bundler/bundler/commit/792d724752 - -commit 98841b2b19fc2d5c6aacda26019ff07d48d971ec - Author: David Rodríguez - Date: 2019-08-10 04:48:38 +0900 - - [bundler/bundler] Wrap `open` specs with a context - - So I can add another context that doesn't run the `before` block. - - https://github.com/bundler/bundler/commit/06d0acc45a - -commit e6e8d2d8c06336bfcd030a2d8cf69b980446dd40 - Author: David Rodríguez - Date: 2019-08-10 04:47:09 +0900 - - [bundler/bundler] Prefer `before` to `before :each` - - https://github.com/bundler/bundler/commit/6678747fae - -commit cc644c7116c7e540809e381be9d16a2f29a45f43 - Author: David Rodríguez - Date: 2019-08-16 21:02:03 +0900 - - [bundler/bundler] Fix `bundle doctor` command - - Previously `bundle doctor` would fail on any bundle that does not - include git gems or plugins. This is because the previously used - `Bundler.home` does not exist unless the bundle includes git gems or - plugins. For example, with `bundle config set path .bundle`, it points - to which does not exist unless this kind of gems exist in the Gemfile. - - The name `Bundler.home` is really unfortunate, it should probably be - have more descriptive name, and be private. But for now I just want to - make `bundle doctor` usable. - - https://github.com/bundler/bundler/commit/5531a18c1e - -commit a02dbcecb15bff9c2a21f5d5e021707a3b150a57 - Author: David Stosik - Date: 2019-08-15 14:47:57 +0900 - - [bundler/bundler] Bundler displays a duplicate gem entries warning even if gems only appear once per group - - https://github.com/bundler/bundler/commit/d18a83109e - -commit 3ecb5125c62bf68a7b74c5c48c659c0d165e624f - Author: Hiroshi SHIBATA - Date: 2019-08-18 13:25:13 +0900 - - Gem::ConfigMap is deprecated now - -commit a0e80c7cb75d9688a23872ce87ac0354a7b985ad - Author: Takashi Kokubun - Date: 2019-08-18 09:30:33 +0900 - - Drop continue-on-error for make check - - Like macos.yml, we don't need to ignore `make check` failure. - -commit 50623f3df0c1c82d6995053000285c208835efe8 - Author: aycabta - Date: 2019-08-18 08:04:06 +0900 - - Remove commented out debug print - -commit 113a5c1e1dc8a16e4c8d19af3c9d091eb90826f3 - Author: aycabta - Date: 2019-08-18 08:03:32 +0900 - - The "exe" dir doesn't exist in this repostiroy - -commit 0bbbe8298629a3acbf6c3dd84a302ff71edc80e8 - Author: aycabta - Date: 2019-08-18 07:52:49 +0900 - - Fix copy path of ruby/reline's test - -commit e9f82585eed414ff090d9ef7b667d0f3c1561a01 - Author: Alan Wu - Date: 2019-08-09 07:38:40 +0900 - - Don't crash when deleting at the end of the line - - To reproduce this bug, type one character into irb, then press the - delete key on your keyboard. - -commit 7bb0a7d7cba7bbeb03d531c13ccf73b6d4e688f6 - Author: Nobuyoshi Nakada - Date: 2019-08-17 23:35:35 +0900 - - Prefer exact ITEM to benchmark - -commit 74ca6b88dd9673d2a47ce4bbfd9214dcea5ee366 - Author: Nobuyoshi Nakada - Date: 2019-08-17 23:33:12 +0900 - - Omit a tag unless loading with a wrapper module - -commit 1d11a8b1938d3310d6b573c2feb173661a82b6a6 - Author: Nobuyoshi Nakada - Date: 2019-08-17 23:29:54 +0900 - - Ensure non-OPT_GLOBAL_METHOD_CACHE code valid - -commit 6db3051fcc08440fb1d80617dae90ae3f97db95c - Author: Nobuyoshi Nakada - Date: 2019-08-17 23:28:46 +0900 - - Ensure VM_DEBUG_VERIFY_METHOD_CACHE code valid - -commit aa00f7b8ec97b8ca6e2e2b8f31825dca4a2ae91b - Author: git - Date: 2019-08-18 00:33:13 +0900 - - * 2019-08-18 [ci skip] - -commit 8b8e7e6e9ec785ff49b3045ce06fa38b9f5cf809 - Author: Nobuyoshi Nakada - Date: 2019-08-18 00:25:48 +0900 - - $LOAD_PATH elements should be real paths - - Installed path may contain symbolic links. - -commit 765eb18a45c6fa8ebc55203bfe477e61c6a12490 - Author: Nobuyoshi Nakada - Date: 2019-08-17 23:14:52 +0900 - - Make VM_DEBUG_VERIFY_METHOD_CACHE derived from VMDEBUG - - VM_DEBUG_MODE has been used only here. - -commit 2a65498ca2311d8c632d4c7f925f17083347ed93 - Author: aycabta - Date: 2019-08-17 00:14:28 +0900 - - Remove CI files from list - -commit 15da2aad766616237c8cd798542a70a61b6a23a4 - Author: aycabta - Date: 2019-08-17 00:15:07 +0900 - - Remove Travis CI workaround - -commit e095803c379a3db3de4edd229dc4593a345d1cdb - Author: Hiroshi SHIBATA - Date: 2019-08-14 21:21:45 +0900 - - Removed formatter_test_case and text_formatter_test_case from Gem::Specification#files. - -commit 3a06c11a7d913d824508f3d7e230703eb411db5a - Author: Hiroshi SHIBATA - Date: 2019-08-14 21:15:43 +0900 - - Removed autoload from Markup. - -commit 79fe84edf5da875daf240c9c11220ba89f3d49af - Author: Hiroshi SHIBATA - Date: 2019-08-14 21:12:15 +0900 - - Removed test_case files from lib directory. - -commit 37d0e6e4711a2de9b4b460731fc3fd98799ce21c - Author: Hiroshi SHIBATA - Date: 2019-08-17 18:18:20 +0900 - - Skip teardown with JRuby - -commit 08c58e3c0db8aaa6b573fe6c34a6318a17a83c68 - Author: David Rodríguez - Date: 2019-08-16 15:45:11 +0900 - - [bundler/bundler] Extract a `gemspec_dir` helper - - https://github.com/bundler/bundler/commit/71a29e286a - -commit a2d7c97a9187f3d88230e273756ed4836fa8ac19 - Author: David Rodríguez - Date: 2019-08-16 01:58:07 +0900 - - [bundler/bundler] Extract yet another helper method - - https://github.com/bundler/bundler/commit/948a863bd8 - -commit 43184056094af2495f05964c78bc517e07721802 - Author: David Rodríguez - Date: 2019-08-16 01:54:15 +0900 - - [bundler/bundler] Extract a `root_gemspec` local variable - - https://github.com/bundler/bundler/commit/a4beba4cbf - -commit 09455301ef81bc6207e6d3ba1034c35851575e18 - Author: David Rodríguez - Date: 2019-08-16 01:53:51 +0900 - - [bundler/bundler] Extract a `with_root_gemspec` helper - - https://github.com/bundler/bundler/commit/f20c2bdf6a - -commit 20c5154f0b79faf83c9c889f12da7da1ba9d6eb1 - Author: David Rodríguez - Date: 2019-08-16 01:48:09 +0900 - - [bundler/bundler] Only chdir when necessary - - https://github.com/bundler/bundler/commit/07161ebc1a - -commit 580e093fddc2c10ff4e6cd33bfa0a7bfab76395c - Author: David Rodríguez - Date: 2019-08-16 01:46:42 +0900 - - [bundler/bundler] Make sure gem has been built before deleteng it - - https://github.com/bundler/bundler/commit/32520c7020 - -commit a56bf5bfdea991f3fb16a002da6284817e7867b8 - Author: David Rodríguez - Date: 2019-08-16 01:29:23 +0900 - - [bundler/bundler] Cleanup in a location independent way - - https://github.com/bundler/bundler/commit/5b503a4bf1 - -commit 9c0fcd1d0fc6287795f957465b596a288708ab90 - Author: David Rodríguez - Date: 2019-08-16 01:29:15 +0900 - - [bundler/bundler] Remove obvious comment - - https://github.com/bundler/bundler/commit/91e7fe1b2f - -commit adfca752d6aa8f1828392cc1ae88063597376b5a - Author: David Rodríguez - Date: 2019-08-16 01:41:55 +0900 - - [bundler/bundler] Remve another unneeded `to_s` - - `FileUtils.rm` supports a `Pathname` argument. - - https://github.com/bundler/bundler/commit/7d982a5be9 - -commit 9925e1a10f94f2a8c6d1b513d4546157ccecdc3f - Author: David Rodríguez - Date: 2019-08-16 01:25:56 +0900 - - [bundler/bundler] Remove unneeded `to_s` calls - - They are implicit inside `gem_command!`. - - https://github.com/bundler/bundler/commit/6bdb13c899 - -commit f88237623f9131a9a07a4dd7ffde8c758e63e32c - Author: David Rodríguez - Date: 2019-08-16 00:26:51 +0900 - - [bundler/bundler] Consistently use `Path` over `Spec::Path` - - https://github.com/bundler/bundler/commit/a4cca66b79 - -commit aef5509139abd34f9983fa00895f91ea2801f088 - Author: David Rodríguez - Date: 2019-08-16 00:07:48 +0900 - - [bundler/bundler] Extract single gem installation logic - - https://github.com/bundler/bundler/commit/7888d621c8 - -commit 20af44c27727333b4cd3eef9d5b18daaa0445f0e - Author: David Rodríguez - Date: 2019-08-16 00:03:26 +0900 - - [bundler/bundler] Unalias `install_gem` - - Since I plan to reuse it for something else. - - https://github.com/bundler/bundler/commit/5379382198 - -commit 6506993462af4f6c4f7ee2e0d3bc27deee989069 - Author: David Rodríguez - Date: 2019-08-16 00:01:36 +0900 - - [bundler/bundler] Use `join` consistently - - https://github.com/bundler/bundler/commit/096e53dfe6 - -commit 6a299906b4bebe1c86bc50a565f47348e735cb8e - Author: David Rodríguez - Date: 2019-08-15 23:59:08 +0900 - - [bundler/bundler] Extract a `lib_tracked_files` path helper - - https://github.com/bundler/bundler/commit/028dc46f5a - -commit 19dabfbe574f9a8298054eb417d299ec5fc18412 - Author: David Rodríguez - Date: 2019-08-16 02:24:56 +0900 - - [bundler/bundler] Rename a variable - - Otherwise I get conflicts when extracting the helper. - - https://github.com/bundler/bundler/commit/314c64cd07 - -commit c896f71577e17e7b89ad39463b82d8936f000480 - Author: David Rodríguez - Date: 2019-08-15 23:48:42 +0900 - - [bundler/bundler] Extract a `tracked_files` path helper - - https://github.com/bundler/bundler/commit/d35e31d2e0 - -commit b43f4bd2184989c5f47ee539e583c785dfadb8d0 - Author: David Rodríguez - Date: 2019-08-16 02:18:01 +0900 - - [bundler/bundler] Rename some variables - - I want to extract these to path helper methods, but the name `files` - conflict with some builder methods that are also available at the same - level. - - https://github.com/bundler/bundler/commit/7844096af0 - -commit 334e6150222703712ae6360de14f9a04b83daea9 - Author: David Rodríguez - Date: 2019-08-15 23:47:44 +0900 - - [bundler/bundler] Reconcile test - - The `:bundler` gem is not needed in the regular repo either. - - https://github.com/bundler/bundler/commit/ca5ce01a9b - -commit 122bc65042bb53cd66ff681513ea7f5152536875 - Author: David Rodríguez - Date: 2019-08-16 01:13:36 +0900 - - [bundler/bundler] Reuse `gem_bin` helper inside `gem_command` - - The logic for choosing `gem_bin` should work here too even if it's not - identical. - - https://github.com/bundler/bundler/commit/6ca0271b27 - -commit 30a4ec1fee1363f31f93970c3cd809a6fc139140 - Author: David Rodríguez - Date: 2019-08-16 01:13:06 +0900 - - [bundler/bundler] Always use `--backtrace` when invoking `gem` CLI - - For debuggability. - - https://github.com/bundler/bundler/commit/ac3e8db658 - -commit 91c63828f7b841df6b7b124acb752c0a3bca66c0 - Author: David Rodríguez - Date: 2019-08-16 01:12:34 +0900 - - [bundler/bundler] Extract a `gem_bin` path helper - - https://github.com/bundler/bundler/commit/8eedbecac0 - -commit e38994d2f70ac714f749f69833fce5c5e8461513 - Author: David Rodríguez - Date: 2019-08-15 23:45:04 +0900 - - [bundler/bundler] Reuse `gem_command!` helper - - https://github.com/bundler/bundler/commit/37d5dedffe - -commit 63d78afc2d0520cff300494fd875c905349c12a0 - Author: David Rodríguez - Date: 2019-08-16 00:59:48 +0900 - - [bundler/bundler] Remove more dead code - - https://github.com/bundler/bundler/commit/17d4d0de8e - -commit 2e6509498c1daf3335ac6343bf59441d42011b64 - Author: David Rodríguez - Date: 2019-08-16 00:58:56 +0900 - - [bundler/bundler] Remove dead code - - https://github.com/bundler/bundler/commit/cae948f514 - -commit 3bebdda649e60edb9df0728aa1859590693db335 - Author: David Rodríguez - Date: 2019-08-16 00:58:34 +0900 - - [bundler/bundler] Remove unnecessary rubygems require - - https://github.com/bundler/bundler/commit/039604ff95 - -commit 7af12a92c8593fffee42004a04d6886bbd863ff5 - Author: David Rodríguez - Date: 2019-08-15 23:41:52 +0900 - - [bundler/bundler] Use path helpers to find bundle bin - - https://github.com/bundler/bundler/commit/7985bb8e92 - -commit 63575409458f6b7b1bdaf038a562bc3f011e231e - Author: David Rodríguez - Date: 2019-08-15 23:40:33 +0900 - - [bundler/bundler] Fix bundle bin location in core repo - - https://github.com/bundler/bundler/commit/9437568ab4 - -commit 7551117c70cdc33f4dd8a72a1a9151f23c73f902 - Author: David Rodríguez - Date: 2019-08-08 17:41:56 +0900 - - [bundler/bundler] Reuse more shared path helpers - - https://github.com/bundler/bundler/commit/79fdebd868 - -commit 9995ce64a251e51eabc6300d38980c4139f92d86 - Author: David Rodríguez - Date: 2019-08-15 23:37:18 +0900 - - [bundler/bundler] Remove unnecessary assignment - - https://github.com/bundler/bundler/commit/e483322519 - -commit a2ca3a12ba35d8991099cb23be4bdeb15e5cd459 - Author: David Rodríguez - Date: 2019-08-06 20:16:44 +0900 - - [bundler/bundler] Remove unnecessary `let` - - Use shared helper instead. - - https://github.com/bundler/bundler/commit/ef55470cc6 - -commit 745b2861617c62413357e27de9ded8098fcc031d - Author: David Rodríguez - Date: 2019-08-06 20:16:15 +0900 - - [bundler/bundler] Move `lib` helper together with path helpers - - https://github.com/bundler/bundler/commit/f2df73bdb4 - -commit 50a91fcd1061527a3543e3e713fc4222da68e438 - Author: David Rodríguez - Date: 2019-08-03 21:07:11 +0900 - - [bundler/bundler] Reuse `lib` method - - https://github.com/bundler/bundler/commit/4589a57852 - -commit ef2d4158028ab253fbd4b27d3cd3ffb4df5bffb7 - Author: David Rodríguez - Date: 2019-08-03 21:06:58 +0900 - - [bundler/bundler] Remove duplicated method - - https://github.com/bundler/bundler/commit/afdacd62ac - -commit 7664b5cb6549d09935c4bf0fe67392708a9c19c2 - Author: Hiroshi SHIBATA - Date: 2019-08-17 16:22:27 +0900 - - Support the current stable version of Ruby like 2.5 and 2.6. - -commit 221ba9b66c022a99227de8bf21db618666e17c42 - Author: Hiroshi SHIBATA - Date: 2019-08-17 17:01:19 +0900 - - Revert "`Gem.load_path_insert_index always returns non-nil index after Ruby 1.9" - - This reverts commit 260ef51a73c067599826c8ab110c53994c1b6226. - - This broke the stable versions of Ruby like 2.4 and 2.5 - -commit d041c6cebbe7fe973789616bef43200213e1a001 - Author: Hiroshi SHIBATA - Date: 2019-08-17 12:35:30 +0900 - - Added comments for extended require by RubyGems - -commit 260ef51a73c067599826c8ab110c53994c1b6226 - Author: Hiroshi SHIBATA - Date: 2019-08-17 12:33:38 +0900 - - `Gem.load_path_insert_index always returns non-nil index after Ruby 1.9 - -commit 06fcf88d695c8bfb6703966dd26629642ff7bf2d - Author: Hiroshi SHIBATA - Date: 2019-08-17 12:19:49 +0900 - - Use the original require for test_race_exception - - The extension for require method with rubygems affects this test - case. We need to keep this test for the original method. - -commit d8148650f6b5d7855845cfa0d53b363366b5c460 - Author: Hiroshi SHIBATA - Date: 2019-08-17 11:30:01 +0900 - - Try to continue on LoadError with gem_original_require - -commit 22d9bd944d4aae1b682e0bd4eafab706ff5a981e - Author: Hiroshi SHIBATA - Date: 2019-08-17 11:05:29 +0900 - - Keep the existence behavior with symlink path - -commit 273f1f44982475f8c93805c9b9ec604846f3a5de - Author: Hiroshi SHIBATA - Date: 2019-08-17 10:11:05 +0900 - - Move fixture path to last path - -commit dd16f8524c44f8802e634af2577fe5a149cd740e - Author: Hiroshi SHIBATA - Date: 2019-08-17 08:54:05 +0900 - - Revert "Revert "[rubygems/rubygems] [Require] Ensure -I beats a default gem"" - - This reverts commit 75d29db8f965893bb6ab38b9008abc80cdda246e. - -commit 9d20d2b0f5096fab210464f9e16d876f9c5d319f - Author: Kenichi Kamiya - Date: 2019-08-17 15:03:00 +0900 - - Clean sample code biorhythm (#2375) - - * Standardize to load date library code - - > git grep 'require .date.' | wc -l - 179 - > git grep 'require .date\.rb' | wc -l - 1 - - * Simplify - -commit 72adc6cffbc41988aee728d74ab0bed2c5159948 - Author: Kenichi Kamiya - Date: 2019-08-17 14:56:57 +0900 - - Simplify a sample code (#2374) - -commit dce1e14e80c9c6d1e25c8aaf9075c80df610ddc3 - Author: Iain Barnett - Date: 2019-08-17 14:24:45 +0900 - - Use more different arguments in Fiber.yield documentation to make it clear (#2170) - - https://github.com/ruby/ruby/pull/2170#issuecomment-489880700 - - Documentation is for those who don't know, remember, or understand (to any degree) the language, it should attempt to be clear above all other things. The example given is needlessly unclear because if you use a block it's common for arguments to be reused on every entry to the block. In Fiber's case this is not so. - - First time round 10 goes in, 12 comes out. - Second time round 14 goes in, 14 comes out… was that because 14 is 12 + 2 or because it's "the return value of the call to Fiber.yield". It's the latter because it says so but why does the example need to make anyone think the former? - - Using different numbers makes it immediately clear what's happening whether the description is there or not. - -commit 28267cea083408185de3e0aaafd14ec76c9a3157 - Author: David CARLIER - Date: 2019-08-17 14:17:30 +0900 - - NetBSD native support of explicit_bzero's like feature (#2145) - -commit ccbfb054b1dcd06d30924c4a83af1bac75d78c31 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-17 13:57:12 +0900 - - Fix typos - -commit 2468466a1ae45944238901b532646a6cf3385815 - Author: Hiroshi SHIBATA - Date: 2019-08-17 12:08:07 +0900 - - Added missing condition for test-bundler and test-bundled-gems. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2379 - -commit ea496e9fb2c930ac0c5ff8c12c4a10fac0ec3c7b - Author: Hiroshi SHIBATA - Date: 2019-08-17 11:36:12 +0900 - - Added test check to ubuntu on GitHub Actions - - Notes: - Merged: https://github.com/ruby/ruby/pull/2379 - -commit dc020b06ffc85f3484fad0c5a014cbcae197bc40 - Author: Nobuyoshi Nakada - Date: 2019-08-17 12:32:29 +0900 - - Hoisted out search_refined_method - - [Bug #16107] - -commit 11a9f7ab9431b0f361e43b4ac2bd6ee44827d88b - Author: Nobuyoshi Nakada - Date: 2019-08-17 00:17:15 +0900 - - Search refinement module along nested usings - - [Bug #16107] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2373 - -commit 042be439d92ea0910fe3bd0d5e9a1d4135257d2d - Author: OKURA Masafumi - Date: 2019-08-16 22:56:30 +0900 - - Improve the doc example of `method_missing` - - Improvements are: - * Use `symbol` instead of `methId`, described in doc - * Add `*args` following method signature - * Rescue error in `roman_to_int` and calls `super`, recommended in doc - * Call invalid `foo` method to Roman object to raise NoMethodError - - Notes: - Merged: https://github.com/ruby/ruby/pull/2372 - -commit 045152df9e91c34a2785cb95e5964d7fc1b14df5 - Author: Takashi Kokubun - Date: 2019-08-17 09:43:05 +0900 - - Disable fail-fast of GitHub Actions - - This is default: true - https://help.github.com/en/articles/workflow-syntax-for-github-actions#jobsjob_idstrategyfail-fast - - When `make check` fails, we do not want to cancel `make test-bundler`. - -commit 75d29db8f965893bb6ab38b9008abc80cdda246e - Author: Hiroshi SHIBATA - Date: 2019-08-17 08:52:13 +0900 - - Revert "[rubygems/rubygems] [Require] Ensure -I beats a default gem" - - This reverts commit 00cd5d74cecb6aa4a184e57e2b8246ef6e45d458. - -commit efd37f8fc3e021c93f37d1f7f08fcb6b909d6ecf - Author: OKURA Masafumi - Date: 2019-08-17 08:52:23 +0900 - - Remove redundant each from `sum` example (#2190) [ci skip] - - It used to be `Enumerator#sum`, now it's range of string which calls - `Enumerable#sum` and causes TypeError. - -commit 7624154595eb71333a61b37f4c7388b6c031e878 - Author: Hiroshi SHIBATA - Date: 2019-08-17 08:44:31 +0900 - - Fixed Insecure Operation in require - - Caused by 00cd5d74ce - -commit e0fc9b7ccd9e14bd925cd46606ad201d0b57a423 - Author: git - Date: 2019-08-17 07:49:00 +0900 - - * 2019-08-17 [ci skip] - -commit f30d38bdd08d241f8c3c1768069911e627f955f8 - Author: Hiroshi SHIBATA - Date: 2019-08-16 21:30:32 +0900 - - Move lib directory to the last of $LOAD_PATH on ruby repository. - - https://github.com/rubygems/rubygems/pull/1868 changes the behavior - of require when it used with -I options. Therefore, the options of - ruby repository was different from rubygems/rubygems. - -commit ae3002b5401fb8b38d9a3a9b9e27e6a36ac79ff2 - Author: Hiroshi SHIBATA - Date: 2019-08-16 16:02:32 +0900 - - [rubygems/rubygems] Fixup #2844 - - https://github.com/rubygems/rubygems/commit/5924286ae2 - -commit 56a28a8728dceb4bbcd6269c7ae3cb894c4ce512 - Author: MSP-Greg - Date: 2019-08-16 01:43:50 +0900 - - [rubygems/rubygems] installer.rb - fix #windows_stub_script - - use ruby_exe in heredocs instead of ruby.exe - - https://github.com/rubygems/rubygems/commit/9f1b7d6590 - -commit 25a327d41bcb881f27acfcc58f262986a8f4e5b4 - Author: Alexander Pakulov - Date: 2019-08-15 04:00:27 +0900 - - [rubygems/rubygems] Do not mutate uri.query during s3 signature creation - - https://github.com/rubygems/rubygems/commit/c0275ee537 - -commit c4f7c260f995778a40c6fc15107090fdb51d49a8 - Author: Hiroshi SHIBATA - Date: 2019-07-31 12:46:09 +0900 - - [rubygems/rubygems] Make deprecate Gem::RubyGemsVersion and Gem::ConfigMap. - - https://github.com/rubygems/rubygems/commit/1133c2f700 - -commit c78839902b47bf6a91226fbef00443e7d344033d - Author: David Rodríguez - Date: 2019-01-11 01:08:59 +0900 - - [rubygems/rubygems] Return `nil` to clarify return value is ignored - - https://github.com/rubygems/rubygems/commit/8702f59d32 - -commit 5998012a0c7244fe217c2d4f494e50f32ec85d29 - Author: David Rodríguez - Date: 2019-01-07 20:00:35 +0900 - - [rubygems/rubygems] Autoswitch to exact bundler version if present - - https://github.com/rubygems/rubygems/commit/bb02953a97 - -commit 3587824d710ffcfd1270be0a354a770a49312b6f - Author: David Rodríguez - Date: 2019-04-25 18:48:40 +0900 - - [rubygems/rubygems] Don't unregister default specifications - - I think this should be more efficient? - - https://github.com/rubygems/rubygems/commit/a1de78104f - -commit 1ac6890bd05a48e385f564d212765a3a60899659 - Author: David Rodríguez - Date: 2019-04-25 22:58:45 +0900 - - [rubygems/rubygems] Fix removing unresolved default spec files from map - - https://github.com/rubygems/rubygems/commit/7964917bbc - -commit f42ad4a4250620ca64b2f668fed91d475934eaa7 - Author: David Rodríguez - Date: 2019-04-25 22:57:41 +0900 - - [rubygems/rubygems] Little refactor - - There's already a method called `suffix_pattern`, that's different from - this local variable. So, move the local variable to a `suffix_regexp` - that clearly differentiates from `suffix_pattern`. - - https://github.com/rubygems/rubygems/commit/4ec69c48b9 - -commit 89ad5df979727ab50eee6106550bf58b1888486e - Author: bronzdoc - Date: 2019-07-26 14:54:06 +0900 - - [rubygems/rubygems] Replace domain parameter in Gem::Command#show_lookup_failure with a parameter to suppress suggestions - - https://github.com/rubygems/rubygems/commit/760b7d834f - -commit b8984370daaff4809b04330a6d7098f171568f79 - Author: David Rodríguez - Date: 2019-05-20 00:31:17 +0900 - - [rubygems/rubygems] Fix jruby issue - - https://github.com/rubygems/rubygems/commit/fc3f722164 - -commit 37abd2c390bb93fe1a306465bb5de35feb70a82a - Author: David Rodríguez - Date: 2019-04-04 01:00:02 +0900 - - [rubygems/rubygems] Fix old rubies compat - - https://github.com/rubygems/rubygems/commit/41e60cdb6b - -commit 00cd5d74cecb6aa4a184e57e2b8246ef6e45d458 - Author: Samuel Giddins - Date: 2017-03-15 02:34:03 +0900 - - [rubygems/rubygems] [Require] Ensure -I beats a default gem - - https://github.com/rubygems/rubygems/commit/6fbda98eb3 - -commit d4feeb19361a4d7addf4779fb6bdc8e8c072093b - Author: David Rodríguez - Date: 2019-04-03 22:11:14 +0900 - - [rubygems/rubygems] Make test also assert the gems that it should load - - https://github.com/rubygems/rubygems/commit/a6375920bf - -commit bb2a65800d857149bbbacace7ed5dfbf7d20ecc2 - Author: David Rodríguez - Date: 2019-04-03 22:06:29 +0900 - - [rubygems/rubygems] Use `assert_require` - - For consistency with the other specs. - - https://github.com/rubygems/rubygems/commit/44b93aec4c - -commit 229ae3269d622954295e4220fa7bc3298cad8b1d - Author: Yusuke Endoh - Date: 2019-08-16 21:27:05 +0900 - - lib/rdoc/store.rb: Use `Marshal.dump(obj, io)` - - instead of dumping obj to a string and then saving the string. - It omits object creation. - -commit 619f82bb6bd913d8dbb8ca5da15ca1fbb4508629 - Author: Nobuyoshi Nakada - Date: 2019-08-16 17:36:09 +0900 - - Hoisted out unixsocket_len, trimming NUL chars from sun_path - -commit 03f4a0b18e9417a82e23523be40ebf0c505faee9 - Author: Nobuyoshi Nakada - Date: 2019-08-16 16:47:09 +0900 - - [ruby/rdoc] Use assert_raise - - https://github.com/ruby/rdoc/commit/f2c63549f7 - -commit 02d0d424be04cb05ce56b7d21cc843345b0d9a2c - Author: Hiroshi SHIBATA - Date: 2019-08-16 14:52:03 +0900 - - Revert "[bundler/bundler] Fixup #7297" - - This reverts commit b8d759806ff825e1b9344ba34b1a2bc4809d0988. - - It's accidentally picked from the upstream repository. - -commit b8d759806ff825e1b9344ba34b1a2bc4809d0988 - Author: Hiroshi SHIBATA - Date: 2019-08-16 10:05:15 +0900 - - [bundler/bundler] Fixup #7297 - - https://github.com/bundler/bundler/commit/1a0161b970 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 8cf90a2f80866449a555c76eae6189b687fda7d6 - Author: Hiroshi SHIBATA - Date: 2019-08-16 07:11:14 +0900 - - [bundler/bundler] Fixed rubocop error - - https://github.com/bundler/bundler/commit/9256177446 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit e8fd720434e270d1021a57607a377b0f0c7517dd - Author: David Rodríguez - Date: 2019-08-14 22:58:18 +0900 - - [bundler/bundler] Remove mention to remembered options - - And instead educate users on the preferred, non deprecated, way. - - https://github.com/bundler/bundler/commit/9cd6238da2 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 502ad4d39103f91bea96be5c8247057dd39f21e2 - Author: Tomoki Aonuma - Date: 2019-07-10 23:19:14 +0900 - - [bundler/bundler] Document upcoming changes to remembered options - - https://github.com/bundler/bundler/commit/a1c97fd7c3 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 3b61019a89c366e50db908ccf25a9156bc500a5f - Author: tommy - Date: 2019-08-13 22:53:33 +0900 - - [bundler/bundler] Add initial Bundler::BuildMetadata Spec - - https://github.com/bundler/bundler/commit/c6458b2727 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit b587e8c7f1cd56f1c53156d7893ee0e581128a0a - Author: David Rodríguez - Date: 2019-07-24 19:24:55 +0900 - - [bundler/bundler] Add `--[no-]git` option to `bundle gem` - - I think using `--no-git` can be useful when creating gems inside - monorepos. - - https://github.com/bundler/bundler/commit/154c687310 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit cb71930351f8978d3c0b06acc14c98a8978f3abe - Author: David Rodríguez - Date: 2019-08-08 19:06:44 +0900 - - [bundler/bundler] Remove unexistent folder from exemptions - - https://github.com/bundler/bundler/commit/0b6d973543 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit f48a61fb46304d35043d013c8cf4539c5be1ecab - Author: David Rodríguez - Date: 2019-07-11 00:26:55 +0900 - - [bundler/bundler] Commit man pages to source control - - This has the benefit that: - - * Allows the installation of bundler as a default gem from rubygems to - include man pages. - * Removes the need to build man pages during our tests. - * Makes working with the manifest easier, because we only have source - controlled files, and not a mix of source control and generated files. - - To make sure they never fall out of sync, we replace the previous - `man:build` CI task with a `man:check` task that makes sure the - generated man pages are up to date. - - https://github.com/bundler/bundler/commit/23de1d0177 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 8f28ae65a861ba714be824ea3122817abe9f862d - Author: David Rodríguez - Date: 2019-07-11 00:23:29 +0900 - - [bundler/bundler] Remove misleading comment in Gemfile - - Since we no longer use `git` to find out the list of files, the comment - is misleading. - - https://github.com/bundler/bundler/commit/54d85d5349 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit cd15d27d10d4f041cf4e60064dae96562c9bd83f - Author: David Rodríguez - Date: 2019-08-07 00:23:06 +0900 - - [bundler/bundler] Stop printing deprecation messages during specs - - Previously under some circumstances (met during some specs), bundler - would print deprecations to a separate UI different from "bundler's UI". - This UI would not be captured by the specs, and thus would be printed to - screen during the specs. - - This commit fixes that by making sure all deprecation messages always go - through bundler's UI. - - https://github.com/bundler/bundler/commit/220c54b7fa - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 4af3665fd91aae87c9fe014778ed7c54245e2f9b - Author: David Rodríguez - Date: 2019-08-08 19:08:53 +0900 - - [bundler/bundler] Use a newer debugging gem in docs - - So that the examples work in currently supported rubies. - - https://github.com/bundler/bundler/commit/b7d4556cde - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 4913c9b6bf78ae697689f89b99754e346603c68a - Author: David Rodríguez - Date: 2019-08-08 19:07:07 +0900 - - [bundler/bundler] Remove unexistent file from exemptions - - https://github.com/bundler/bundler/commit/8601575490 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 6412121b0077cdad8f1fff3da75c2532cd67cd99 - Author: Masato Ohba - Date: 2019-08-10 09:24:30 +0900 - - [bundler/bundler] Fix typo in comment: attributes -> attributes - https://github.com/bundler/bundler/commit/876545805e - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 94e26a97a153950e160445c7afc1e4c62e522740 - Author: David Rodríguez - Date: 2019-08-09 00:27:23 +0900 - - [bundler/bundler] Bump rspec dependency to 3.8 - - Because we're using `config.bisect_runner` which is only available from - 3.8. - - https://github.com/bundler/bundler/commit/304a187f72 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 521a2d2beb945a2ce22b4788409f5fb475fea17a - Author: David Rodríguez - Date: 2019-07-26 20:37:51 +0900 - - [bundler/bundler] Revert "make system_bundle_bin_path helper and resolve failing tests for ruby < 2.6" - - This reverts commit e63e844bc7444c6a489fcde0dc7011c6c4807edd. - - It was introduced to resolve some failing tests at the cost of making - the intention of the spec much less clear. - - Thanks to the previous fixes we have added to this spec, we can revert - that patch now. - - https://github.com/bundler/bundler/commit/b29a40820f - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 5bff72c912099bc9ac866d0c699ad4a2945d5827 - Author: David Rodríguez - Date: 2019-08-08 03:37:50 +0900 - - [bundler/bundler] Make sure spec fails if `bundle install` fails - - https://github.com/bundler/bundler/commit/2ed2bbfdec - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 7ff0b4fec4cbd763e9bb7be597b54217176a8d86 - Author: David Rodríguez - Date: 2019-08-08 03:35:28 +0900 - - [bundler/bundler] Fix installation of system bundler - - Previously it was being installed to the :bundle_path - (`/tmp/bundled_app/.bundle`), but the `bundle` helper uses the - `system_gem_path("bin/bundle")`. That means the first `bundle install`in - the spec was actually failing, but not affecting the test status because - of not being called as `bundle!`. - - https://github.com/bundler/bundler/commit/ad75f75539 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 6c6c4c7388c2f1c0f579de363bb0ec66ad851b5b - Author: David Rodríguez - Date: 2019-08-08 03:33:04 +0900 - - [bundler/bundler] Use non deprecated way of setting bundler path - - https://github.com/bundler/bundler/commit/6013c93e81 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit ee1f3038f1657aa90d75e735e4262fe8d9b3d745 - Author: David Rodríguez - Date: 2019-05-25 00:46:26 +0900 - - [bundler/bundler] Clarify spec description - - https://github.com/bundler/bundler/commit/b2abde04aa - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 0aed0bd9ed521799c5d92c6c10ca8fa4476f8b66 - Author: David Rodríguez - Date: 2019-08-06 23:59:02 +0900 - - [bundler/bundler] Bump rack and sinatra to latest versions - - https://github.com/bundler/bundler/commit/09ecaf04fa - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 129657ab6aa3cc9496746a6eb780c0dc748e3d20 - Author: David Rodríguez - Date: 2019-08-06 23:56:01 +0900 - - [bundler/bundler] Normalize style with other artifice files - - https://github.com/bundler/bundler/commit/f11c9a2b3f - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 41534ce327efb56f3ddb136b5617fe47a89212b5 - Author: David Rodríguez - Date: 2019-08-06 01:43:47 +0900 - - [bundler/bundler] Make spec pass more resiliently - - Previously, if bundler-2.1.0.pre.1 would be installed globally, it would - fail. Now we force that a locally installed version of bundler is used, - so it always passed regardless of which bundler is installed globally. - - https://github.com/bundler/bundler/commit/764d8e8fd1 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 3c23bb29ecbc0c736e99d23a3c47892d67f3a322 - Author: David Rodríguez - Date: 2019-08-06 20:59:39 +0900 - - [bundler/bundler] Remove unnecessary exclusions - - https://github.com/bundler/bundler/commit/c189dfdde0 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 3f0e19c9fa566de3691b994ef6c2bea8cb5fdb83 - Author: David Rodríguez - Date: 2019-08-06 00:20:34 +0900 - - [bundler/bundler] Enable retries on flaky spec - - https://github.com/bundler/bundler/commit/da360659f7 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 2b0f3aa095a410902b9b2e4fb14f909e0630c1a1 - Author: Benoit Daloze - Date: 2019-08-04 21:52:15 +0900 - - [bundler/bundler] Use the standard RUBY_ENGINE_VERSION instead of JRUBY_VERSION - - * RUBY_ENGINE and RUBY_ENGINE_VERSION are defined on every modern Ruby. - * There is no such constant as TRUFFLERUBY_VERSION or RBX_VERSION. - - https://github.com/bundler/bundler/commit/f9d910403b - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 6711343d5a630cc857f0fa503b403edb68415f48 - Author: David Rodríguez - Date: 2019-07-25 02:46:19 +0900 - - [bundler/bundler] Fix inconsistent lockfile order - - When Gemfile would specify path sources as relative paths starting with - "./", the lockfile would have inconsistent order on `bundle install` and - `bundle update`. - - https://github.com/bundler/bundler/commit/c7532ced89 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit c11c8b69ea98e698e855b4b1f122a54929582dc7 - Author: David Rodríguez - Date: 2019-07-25 02:48:10 +0900 - - [bundler/bundler] Indentation tweak - - https://github.com/bundler/bundler/commit/5978a88f33 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit 500c3cb6a59eb991567714311e9301eeb377be9d - Author: David Rodríguez - Date: 2019-07-25 02:45:53 +0900 - - [bundler/bundler] Reuse `root` method - - https://github.com/bundler/bundler/commit/42363091da - - Notes: - Merged: https://github.com/ruby/ruby/pull/2366 - -commit cd41378ef906c279ee925a0f5d6ba3bf606953db - Author: Yusuke Endoh - Date: 2019-08-16 11:36:47 +0900 - - lib/rdoc/parser/ruby.rb: Avoid `.chars.to_a.last` - - The code creates a lot of useless objects. - Instead, using a regexp is shorter and faster. - -commit 64bffddda1d57072a7879dfab9e5bc0286c1395d - Author: Nobuyoshi Nakada - Date: 2019-08-16 02:08:40 +0900 - - exit accepts true and false [ci skip] - -commit 12074ad01c02b4a6912fff64d69b659351bdf9e8 - Author: Nobuyoshi Nakada - Date: 2019-08-16 02:08:02 +0900 - - Use GNU make built-in function [ci skip] - -commit 1b02f6c020e5d73cbe8e759ada7da908ce6a3f15 - Author: aycabta - Date: 2019-08-16 07:10:45 +0900 - - Set IRB::Context#return_format on test clarify - -commit a458317b914579c8a042ed02592af3a92aa41d1b - Author: aycabta - Date: 2019-08-16 06:45:36 +0900 - - Use assert_raise and skip for test/unit - -commit f71bd7477e84eb1cd10fa27e79b1e081ee51793a - Author: Yusuke Endoh - Date: 2019-08-07 02:14:39 +0900 - - RDoc::Parser::C: Integrate do_classes and do_modules by one regexp match - - The full scan of the C source code (`@content.scan`) is very slow. - The old code invokes the scan six times in `do_classes` and - `do_modules`. - - This change integrates the six scans into one by merging the regexps. - The integrated regexp is a bit hard to maintain, but the speed up is - significant: approx. 30 sec -> 20 sec in Ruby's `make rdoc`. - - In addition, this change omits `do_boot_defclass` unless the file name - is `class.c`. `boot_defclass` is too specific to Ruby's source code, so - RDoc should handle it as a special case. - - Before this change: - - TOTAL (pct) SAMPLES (pct) FRAME - 858 (13.6%) 858 (13.6%) (garbage collection) - 292 (4.6%) 264 (4.2%) RDoc::Parser::C#do_define_class - 263 (4.2%) 250 (3.9%) RDoc::Parser::C#do_define_module - 275 (4.3%) 241 (3.8%) RDoc::Parser::C#do_define_class_under - 248 (3.9%) 237 (3.7%) RDoc::Parser::C#do_define_module_under - 234 (3.7%) 234 (3.7%) RDoc::Parser::C#gen_body_table - 219 (3.5%) 219 (3.5%) Ripper::Lexer#state_obj - 217 (3.4%) 216 (3.4%) RDoc::Parser::C#do_struct_define_without_accessor - 205 (3.2%) 205 (3.2%) RDoc::Parser::C#do_boot_defclass - 205 (3.2%) 205 (3.2%) RDoc::Parser::C#do_singleton_class - - The six methods take approx. 22.2%. - `do_define_class` (4.2%) + `do_define_class_under` (3.8%) + - `do_define_module` (3,9$) + `do_define_module_under` (3.7%) + - `do_struct_define_without_accessor` (3.4%) + `do_singleton_class` (3.2%) - - After this change, the methods are integrated to `do_classes_and_modules` - which takes only 5.8%. - - TOTAL (pct) SAMPLES (pct) FRAME - 812 (16.7%) 812 (16.7%) (garbage collection) - 355 (7.3%) 284 (5.8%) RDoc::Parser::C#do_classes_and_modules - 225 (4.6%) 225 (4.6%) RDoc::Parser::C#gen_body_table - 429 (8.8%) 210 (4.3%) RDoc::Parser::RubyTools#get_tk - 208 (4.3%) 208 (4.3%) RDoc::TokenStream#add_tokens - -commit b64911f4e262bef582557f6d11dc5cb35dae669c - Author: aycabta - Date: 2019-08-14 19:06:27 +0900 - - Parser was replaced - -commit bad937b00b328bbc3c2e374e40880f835d88f1af - Author: Hiroshi SHIBATA - Date: 2019-08-11 12:53:49 +0900 - - Gem::TestCase is based on Minitest - -commit daf5ce3ba1545e295ba2efd0ee153638ae446e6e - Author: Hiroshi SHIBATA - Date: 2019-08-11 12:50:54 +0900 - - Use omit instead of skip for test-unit. - -commit e87e10e5e7b7bbb6f4e703981a75b9aaae588816 - Author: Hiroshi SHIBATA - Date: 2019-08-11 12:39:11 +0900 - - Use test/unit instead of test-unit. Because test-unit is only provided standalone gem. - -commit 2066dae991d89c481ab92586d1b2e9589211dde6 - Author: Hiroshi SHIBATA - Date: 2019-08-11 12:37:05 +0900 - - Cleanup commented-out code. - -commit 92186556602c10ce38197757402b2e06a8fc1f06 - Author: Hiroshi SHIBATA - Date: 2019-08-11 12:35:54 +0900 - - Removed needless alias for capture_io. - -commit 8a18a639b7497dd9f1929a38fc8449e8037e26c6 - Author: Hiroshi SHIBATA - Date: 2019-08-10 18:01:08 +0900 - - Use Gemfile instead of add_development_dependency. - -commit 71fd26b1957134588e150d1bfd7b831dc7864e8a - Author: Nobuyoshi Nakada - Date: 2019-08-09 01:43:51 +0900 - - Fallback for older Rubygems - -commit 787b437a2aaf8bfd60a9ac151f52cdb2638b7d8d - Author: Nobuyoshi Nakada - Date: 2019-08-08 23:04:32 +0900 - - Use Gem.default_specifications_dir - - Gem::Specification.default_specifications_dir is deprecated. - -commit 5555e3ef5777178a81625b54958c1fa14e3ef38e - Author: Nobuyoshi Nakada - Date: 2019-08-08 23:09:24 +0900 - - Renamed minitest_helper.rb as helper.rb - -commit 8045ebbf780d4eb35154111cb0d177b5fc7c486b - Author: Nobuyoshi Nakada - Date: 2018-12-02 11:46:13 +0900 - - Use locale directory for the tests - -commit 1a5304228a03139b55821985856628cfe7362966 - Author: Nobuyoshi Nakada - Date: 2018-12-02 11:36:45 +0900 - - Use test-unit instead of minitest - - Minitest 6 will err `assert_equal` with `nil`. - https://github.com/seattlerb/minitest/issues/779 - -commit 64f9f512c5837207436203c0ca47523cca2ecc62 - Author: aycabta - Date: 2019-08-08 16:35:34 +0900 - - Treat linking to Markdown label correctly - -commit 723a37d0386bc20efedf516656c2ccafa889c89d - Author: Yusuke Endoh - Date: 2019-08-07 02:32:03 +0900 - - Separate RDoc::TokenStream#add_tokens and #add_token - - The old version of `add_tokens` accepts an array of tokens, and - multiple arguments of tokens by using `Array#flatten`. - And `add_token` was an alias to `add_tokens`. - - I think it is unnecessarily flexible; in fact, all callsites of - `add_tokens` (except test) passes only an array of tokens. - And the code created a lot of temporal arrays. - - This change makes `add_tokens` accept only one array of tokens, - and does `add_token` accept one token. It is a bit faster (about - 1 second in Ruby's `make rdoc`), and it ls also cleaner in my point of - view. - -commit 0a0760aa632f05bc04df395d0173580042d9f730 - Author: Yusuke Endoh - Date: 2019-08-07 01:53:56 +0900 - - Refactor and improve performance of RDoc::Markup::Parser - - This change introduces a wrapper of StringScanner that is aware of the - current position (column and lineno). - It has two advantages: faster and more modular. - - The old code frequently runs `@input.byteslice(0, byte_offset).length` - to get the current position, but it was painfully slow. This change - keeps track of the position at each scan, which reduces about half of - time of "Generating RI format into ..." in Ruby's `make rdoc` - (5.5 sec -> 3.0 sec). - - And the old code used four instance variables (`@input`, `@line`, - `@line_pos`, and `@s`) to track the position. This change factors them - out into MyStringScanner, so now only one variable (`@s`) is needed. - -commit 9d2fed2ccd1724d1cf42a3075c20dcc418082761 - Author: Steven Willis - Date: 2019-03-21 03:50:05 +0900 - - Don't echo results of assignment expressions - -commit 74726691bada2f2061c57169f4c36a50a9f500ab - Author: OKURA Masafumi - Date: 2019-08-16 02:21:17 +0900 - - Add details about parameters to define_method doc (#2165) - - When we use `define_method` and `define_singleton_method`, - if we supply block parameters to a block then a generated - method has corresponding parameters. - However, the doc doesn't mention it, so this info has been added. - -commit 409ce8c3da966ac8fb809bc6317990f2b5b6479d - Author: Takashi Kokubun - Date: 2019-08-16 01:51:22 +0900 - - Also clean up branch for worktree - -commit d21616eeb0616095bb96408036a7548a30987e02 - Author: Takashi Kokubun - Date: 2019-08-16 01:45:00 +0900 - - Clean up temporary git resources - - after `make update-github` - -commit 2665e5858f76e07ea8748a1931f500f961c5ceae - Author: Espartaco Palma - Date: 2019-08-16 01:38:46 +0900 - - Adding missing test for Net::HTTPGenericRequest initializer (#1835) - - A new exception is raised if an URI::HTTP is received and that object doesn't - have a hostname property. - Complementary to #1278 - -commit 2f919a92ba45d1174aa72498585ff7025142d9e3 - Author: Takashi Kokubun - Date: 2019-08-16 01:34:51 +0900 - - Improve `make update-github` to avoid configure - - after doing it once. - -commit 789f17665e87ddfe76ef2f7bf344163d7cbf98cf - Author: Takashi Kokubun - Date: 2019-08-16 01:18:26 +0900 - - Make `make update-github` idempotent - -commit d013d8e02e895e08f7feb0977c0ea88e6f00b580 - Author: Takashi Kokubun - Date: 2019-08-16 01:11:18 +0900 - - Fix crash on $(PULL_REQUEST) expansion - - by directly passing it to Ruby without passing a shell. - Formerly it was broken when $(PULL_REQUEST) included quotes. - -commit 7c46aa6911a859877522cd61a2805adca6f65b9c - Author: Olivier Lacan - Date: 2019-08-16 00:42:17 +0900 - - Avoid confusion in Array#- and Array#difference docs (#2070) - - My previous attempt to correct #2068 apparently failed and the confusing - wording ("instances") was merged into trunk instead. - - This should address any potential confusion. - -commit 7704bbd6401ad2261652fa8bf6f4bd45a0964ef7 - Author: Nobuyoshi Nakada - Date: 2019-08-16 00:28:16 +0900 - - Marked up command line options [ci skip] - -commit d2070f2e454a6d2207fedf48525269ec04fbfa0e - Author: songhuangcn - Date: 2019-08-16 00:20:52 +0900 - - Fix doc in Object#respond_to_missing? (#2239) - -commit 715218c4306140ed9a62d993890de13e1d2ec572 - Author: git - Date: 2019-08-16 00:02:38 +0900 - - * 2019-08-16 [ci skip] - -commit 40806793a97ef3efd4f249682c9cb397962a8cee - Author: Nobuyoshi Nakada - Date: 2019-08-16 00:00:50 +0900 - - Fixed class, module and method references [ci skip] - -commit b1003301aff42a8c1d60bc435839502c4aa549ab - Author: Nobuyoshi Nakada - Date: 2019-08-15 23:59:28 +0900 - - Fixed a markup in different format [ci skip] - -commit d5c33364e3c0efb15e11df417c925afee2cdb9c9 - Author: Nobuyoshi Nakada - Date: 2019-08-15 23:25:37 +0900 - - Fixed heap-use-after-free - - * string.c (rb_str_sub_bang): retrieves a pointer to the - replacement string buffer just before using it, for the case of - replacement with the receiver string itself. [Bug #16105] - -commit c4152b11a7fbc849a545b34e5b9d85f1fdc1a21f - Author: Nobuyoshi Nakada - Date: 2019-08-15 21:34:34 +0900 - - Prepare to pull commits notes [ci skip] - -commit fff2b231a31f1213d5bc1604ac5e12d8f1e82e57 - Author: Nobuyoshi Nakada - Date: 2019-08-15 21:26:32 +0900 - - Simplified GITHUB_TOKEN argument [ci skip] - -commit 53a55aeff3d409b4894d077f2b3b874fac53e387 - Author: Koichi Sasada - Date: 2019-08-15 13:48:58 +0900 - - introduce RUBY_ON_BUG envval. (#2331) - - `rb_bug()` is called at critical bug, MRI can't run anymore. - To make debug easy, this patch introduces RUBY_ON_BUG environment - variable to specify the process which is called with pid. - [Feature #16090] [GH #2331] - - RUBY_ON_BUG='gdb -p' ruby xxx.rb - - In this case, if ruby interpreter causes critical bug, and call - rb_bug(), then "gdb -p [PID]' is called by system(3). You can - debug on invoked gdb. - - This feature is limited on RUBY_DEVEL build. - - Notes: - Merged-By: ko1 - -commit 132b7eb104ed2f5d9966adb2f0edacb2406f40fb - Author: git - Date: 2019-08-15 08:16:14 +0900 - - * expand tabs. [ci skip] - -commit 6954ff1dcb538ee6c042872088b64464a1ef6089 - Author: Jeremy Evans - Date: 2019-07-30 08:22:00 +0900 - - Make Range#=== operate like cover? instead of include? for string ranges - - Previously, Range#=== treated string ranges that were not endless or - beginless the same as include?, instead of the same as cover?. - I think this was an oversight in 989e07c0f2fa664a54e52a475c2fcc145f06539d, - as the commit message did not indicate this behavior was desired. - - This also makes some previously dead code no longer dead. Previously, - the conditionals were doing this: - - if (RB_TYPE_P(beg, T_STRING) - if (NIL_P(beg)) # can never be true - - This restructures it so at the NIL_P(beg) check, beg could possibly - be nil (beginless ranges). - - Fixes [Bug #15449] - -commit 082424ef58116db9663a754157d6c441d60fd101 - Author: Jeremy Evans - Date: 2019-05-09 12:35:56 +0900 - - Fold to lowercase instead of uppercase for String#casecmp - - strcasecmp(3) and String#casecmp? both fold to lowercase. - -commit d5c60214c45bafc1cf2a516f852394986f9c84bb - Author: Jeremy Evans - Date: 2019-06-08 14:03:02 +0900 - - Implement Range#minmax - - Range#minmax was previous not implemented, so calling #minmax on - range was actually calling Enumerable#minmax. This is a simple - implementation of #minmax by just calling range_min and range_max. - - Fixes [Bug #15867] - Fixes [Bug #15807] - -commit 661927a4c55232bd070992d47670a7d411820111 - Author: Jeremy Evans - Date: 2019-08-15 03:19:16 +0900 - - Switch to using a VM stack argument instead of 2nd operand for getconstant - - Some tooling depends on the current bytecode, and adding an operand - changes the bytecode. While tooling can be updated for new bytecode, - this support doesn't warrant such a change. - -commit 6ac6de84ac3a5bc4fae8e04d03084696080e1ab2 - Author: Jeremy Evans - Date: 2019-08-15 01:59:27 +0900 - - Use Qtrue/Qfalse instead of 1/0 for 2nd operand to getconstant - - Fixes error when using -Werror,-Wshorten-64-to-32. - -commit d053a570141d3f60eb458a233ca964cf5aca8430 - Author: git - Date: 2019-08-15 01:51:19 +0900 - - * expand tabs. [ci skip] - -commit fbcd0652944568c43a6ae427960d909d62ce6a8d - Author: Jeremy Evans - Date: 2019-08-14 14:44:36 +0900 - - Remove support for nil::Constant - - This was an intentional bug added in 1.9. - - The approach taken here is to add a second operand to the - getconstant instruction for whether nil should be allowed and - treated as current scope. - - Fixes [Bug #11718] - -commit 7d32cb7631677172d12010233432b7470046ec2a - Author: git - Date: 2019-08-15 01:00:46 +0900 - - * 2019-08-15 [ci skip] - -commit 938e075273feab804d0de840adec48ebe7508a60 - Author: Takashi Kokubun - Date: 2019-08-15 01:00:26 +0900 - - Add `make update-github PR=1234` to refresh PR (#2368) - - Notes: - Merged-By: k0kubun - -commit e173012f44dfef513c18d69abbd01b3354e897ed - Author: Takashi Kokubun - Date: 2019-08-14 23:41:30 +0900 - - Drop obsoleted `make merge-github` task - -commit 7da40d74e12cee72b96554a2d201965f1c7dedd7 - Author: Steven Harman - Date: 2019-08-14 23:35:47 +0900 - - backtrace and backtrace_locations can be nil (#2358) - - Exception#backtrace and Exception#backtrace_locations can both be nil if - not set. The former can be set via `Exception#set_backtrace`, but the - later is only ever set at runtime via `setup_backtrace`. - -commit 48e9155e659f332a82234831e1aa0d93a8b83a2a - Author: Nikolai B - Date: 2019-08-14 18:16:07 +0900 - - Remove strange formatting from English [ci skip] - - \vref is not valid doc syntax - - Notes: - Merged: https://github.com/ruby/ruby/pull/2364 - -commit 9874dca3e7c03bcf6969747f06f5c696e518b332 - Author: Takashi Kokubun - Date: 2019-08-14 23:00:09 +0900 - - Mark bundler / bundled-gems as continue-on-failure - - because these tests have failed too often and it's false-positive for - checking healthiness of the master branch. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2367 - -commit bf77f43b3991b63b832ff72cfc91b9761a32bdf8 - Author: Takashi Kokubun - Date: 2019-08-14 22:36:41 +0900 - - Update the description of check_branch - -commit 8be521662d1b1b0e6f791f6d9d29d529bdc427e1 - Author: Takashi Kokubun - Date: 2019-08-14 22:21:15 +0900 - - Rename check_branch.master to pull_request.check_branch - - because it's shown as just "master" on a pull request which does not - have the check_branch.master job yet. - - "check_branch" would be easier to understand and now we can grep it from - master branch. - -commit c8f97596b7dd6ffbeb98970f9cc664b0a8a2336e - Author: Alan Wu - Date: 2019-08-11 06:32:49 +0900 - - Don't accidentally name anonymous module/class - - b00f280d4b9569e7153365d7e1c522b3d6b3c6cf introduced - an accidental behavior change in that defining a module/class under - `m` gives `m` a name when `m` is anonymous. - - `ruby -ve 'Module.new { class self::A; end; p name }'` outputs a name - similar to `Module#inspect` when it should output `nil` like in Ruby - 2.6.x. - - * variable.c: Use `make_temporary_path` instead of `save_temporary_path` - when getting the name of the parent module. - - * variable.c (rb_set_class_path): Delegate to `rb_set_class_path_string` - instead of duplicating the logic. - - [Bug #16097] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2337 - -commit 1cffd5b4f0b88669bc2daff025ab0b1650961a43 - Author: Koichi Sasada - Date: 2019-08-14 16:30:30 +0900 - - fix last commit. - -commit 0971460e3113ea7dc3fd2a4ae80dd5947fd2dc55 - Author: git - Date: 2019-08-14 16:25:32 +0900 - - * expand tabs. - -commit 182a408c2c4113eb316c2a87e35880144afb4498 - Author: Koichi Sasada - Date: 2019-08-14 16:25:15 +0900 - - change Proc#to_s format ('@...' -> ' ...') (#2362) - - Now Proc#to_s returns - "#". - However, it is convenient to select a file name by (double-)clicking - on some terminals by separating ' ' instead of '@' like - "#" - [Feature #16101] - -commit 0623e2b7cc621b1733a760b72af246b06c30cf96 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-14 11:44:20 +0900 - - Suppress Uninitialized variables by Coverity Scan - - Coverity Scan says: - ``` - ** CID 1452284: Uninitialized variables (UNINIT) - /eval.c: 223 in rb_ec_cleanup() - ``` - - ``` - >>> CID 1452284: Uninitialized variables (UNINIT) - >>> Using uninitialized value "errs[1]". - ``` - -commit c744b626985f5d78c6d8d8830b9aee2898412d7c - Author: Nobuyoshi Nakada - Date: 2016-06-10 08:01:39 +0900 - - io.c: export rb_io_extract_modeenc - - * include/ruby/io.h (rb_io_enc_t): add typedef. - - * io.c (rb_io_extract_modeenc): export. - -commit cad41bb6d35c09b0e5d9e50280e3bfcd1bd9bcc0 - Author: Nobuyoshi Nakada - Date: 2019-08-14 10:43:46 +0900 - - [ruby/stringio] Supported BOM - - https://github.com/ruby/stringio/commit/b249631c43 - -commit 22e942deb2580faae44176064a569a84bccb5028 - Author: Nobuyoshi Nakada - Date: 2019-08-14 10:42:46 +0900 - - [ruby/stringio] Supported `mode:` option - - https://github.com/ruby/stringio/commit/53def32ba0 - -commit 8b44307894c3da6219e14693dc355ebb702310e0 - Author: Nobuyoshi Nakada - Date: 2019-08-14 10:42:14 +0900 - - [ruby/stringio] Allow bignum mode - - https://github.com/ruby/stringio/commit/d28927b561 - -commit e54d349a01043082169a88a2782e6739bdd52c4f - Author: Nobuyoshi Nakada - Date: 2019-08-14 03:02:30 +0900 - - [ruby/stringio] Added support for older versions - - https://github.com/ruby/stringio/commit/c4a13d41cd - https://github.com/ruby/stringio/commit/359c9f395c - -commit c8f9e9a2a0788fff08824985a74748dbe7ff7b18 - Author: Nobuyoshi Nakada - Date: 2016-06-10 14:18:14 +0900 - - [ruby/stringio] stringio: encoding support - - https://github.com/ruby/stringio/commit/7b20075ab0 - -commit 765d60315312a6a7068d9b24d7c6f38b778c4604 - Author: Takashi Kokubun - Date: 2019-08-14 10:52:15 +0900 - - Try to fix variable reference on Windows (#2361) - - https://github.com/ruby/ruby/runs/192869165 - - Notes: - Merged-By: k0kubun - -commit 8a687b8a4ff4096d7783bed58642112cfa3256a0 - Author: Takashi Kokubun - Date: 2019-08-14 09:23:57 +0900 - - Stop using official actions/checkout - - because it has been unstable, and also it sometimes does not work for a - pull request like: - https://github.com/ruby/ruby/pull/2358/checks?check_run_id=192685048#step:4:17 - - Notes: - Merged: https://github.com/ruby/ruby/pull/2360 - -commit 216d23008098c358d3a57cddc6f5d44e0b2f1602 - Author: SHIBATA Hiroshi - Date: 2019-08-14 07:44:26 +0900 - - Move some assertions to CoreAssertions. (#2354) - - They are used by default gems like forwardable. - - * assert_raise_with_message - * assert_warning - * assert_warn - - Notes: - Merged-By: hsbt - -commit 930e637c0e2ffd6fcb46205d473b6f4c05607471 - Author: git - Date: 2019-08-14 00:23:38 +0900 - - * 2019-08-14 - -commit 8827697ec42ee3a6bac1a73ee6b59d869dc152c2 - Author: Nobuyoshi Nakada - Date: 2019-08-14 00:23:19 +0900 - - Compare actual result - -commit 5b1bf8dd2d08ae7371ecf025967376bb794ed651 - Author: Nobuyoshi Nakada - Date: 2019-08-13 23:23:43 +0900 - - UTF LE is fixed at least the first 2 bytes - - * io.c (io_strip_bom): if the first 2 bytes are 0xFF0xFE, it - should be a little-endian UTF, 16 or 32. [Bug #16099] - -commit 79f9c626b63c2ce6ed1f3e767838a02a668145ba - Author: Takashi Kokubun - Date: 2019-08-13 23:36:31 +0900 - - Use the official actions/checkout again (#2357) - - because clone does not checkout exact commit sha, and also we'd need to handle - pull_request on fork, so I tentatively stopped to do this. - - Notes: - Merged-By: k0kubun - -commit c393734c95cea944d3d37da15b5600e41f75a740 - Author: git - Date: 2019-08-13 23:00:56 +0900 - - * expand tabs. - -commit dd1344b81eeff9805067e633f60107f4019fa019 - Author: Aaron Patterson - Date: 2019-08-13 06:00:34 +0900 - - Add compaction callbacks for Enumerator - - This commit gives Enumerator compaction support - -commit 94ca848ca19081e47852dddb1a4ae09688d18c29 - Author: Takashi Kokubun - Date: 2019-08-13 22:56:44 +0900 - - Update the comment in check_branch [ci skip] (#2355) - - Notes: - Merged-By: k0kubun - -commit e75e548cf9ee57f4504eb75aa584e587c470c218 - Author: Nobuyoshi Nakada - Date: 2019-08-13 21:11:58 +0900 - - spec/bundler needs the specific command [ci skip] - -commit d0b2e6412e58fef052034962c047ce4dafbf88eb - Author: Nobuyoshi Nakada - Date: 2019-08-13 15:39:49 +0900 - - Pass rb_execution_context_t* in ruby_run_node - -commit ffab84fa3ee7c0a0c2919664113caae6fac02403 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-13 15:27:46 +0900 - - Fix a typo [ci skip] - -commit 75d9fa8b079c27c66ac1eabfae366df465244fc4 - Author: Nobuyoshi Nakada - Date: 2019-08-13 12:24:55 +0900 - - Detect VCS from the current directory by default [ci skip] - -commit 0d1af9f942e391d8bf50a7ae2e6bb931542d541a - Author: Nobuyoshi Nakada - Date: 2019-08-13 12:24:15 +0900 - - Push commits notes too [ci skip] - -commit f78916e3c1fc10a7f9555129961194c7d6ba4f2d - Author: git - Date: 2019-08-13 11:20:39 +0900 - - * expand tabs. - -commit c215a6f2822d2d0c09e90867baadb250fd31206c - Author: Nobuyoshi Nakada - Date: 2019-08-13 11:03:54 +0900 - - Removed non-VM_OBJSPACE code - - It has not been used for 4 years, since r60856, - e33b1690d06f867e45750bd8e3e8b06d78b5bc26. - -commit 2f744f53c17cd1534c685d6c5f57af66ac5f8322 - Author: Nobuyoshi Nakada - Date: 2019-08-13 10:56:21 +0900 - - Refactored `objspace_each_objects` - - As `rb_objspace_each_objects_without_setup` doesn't reset and - restore `dont_incremental` flag, renamed the bare iterator as - `objspace_each_objects_without_setup`. `objspace_each_objects` - calls it when called with the flag disabled, wrap the arguments - otherwise only. - -commit 0c1c42c43a8609e212db9ef64e43d5ca04101694 - Author: Nobuyoshi Nakada - Date: 2019-08-13 10:33:19 +0900 - - Move rb_objspace_t* in objspace_reachable_objects_from_root to an argument - -commit aec93417f04a1726ac4491dd33821a383e4bdb5c - Author: git - Date: 2019-08-13 09:50:34 +0900 - - * expand tabs. - -commit ac656bc2bda6c7879b4b2170b7c2386a08112689 - Author: Nobuyoshi Nakada - Date: 2019-08-13 09:43:11 +0900 - - Hoisted out GPR_DEFAULT_REASON - -commit 917d766508707ebf894244fe4624b064315a7ad7 - Author: Nobuyoshi Nakada - Date: 2019-08-12 22:33:46 +0900 - - Move rb_objspace_t* in gc_verify_internal_consistency to an argument - -commit 0c2d81dada88b5a3946c3162187df4223bfe6b4f - Author: Nobuyoshi Nakada - Date: 2019-08-12 17:44:30 +0900 - - Renamed ruby_finalize_{0,1} - - And pass rb_execution_context_t as an argument. - -commit aac4d9d6c7e6b6b0742f3941b574f6006ccb5672 - Author: Aaron Patterson - Date: 2019-08-13 05:09:21 +0900 - - Rename rb_gc_mark_no_pin -> rb_gc_mark_movable - - Renaming this function. "No pin" leaks some implementation details. We - just want users to know that if they mark this object, the reference may - move and they'll need to update the reference accordingly. - -commit 404850e13446c79fb6142f1b32b219753e5cd726 - Author: Jeremy Evans - Date: 2019-08-12 11:42:59 +0900 - - Remove documentation that fatal cannot be rescued [ci skip] - - You can rescue it: - - f = ObjectSpace.each_object(Class){|c| break c if c.name == 'fatal'} - begin - raise f - rescue f - 2 - end # => 2 - - It's not a good idea to rescue fatal exceptions you didn't generate - yourself, though. - - Fixes [Bug #10691] - -commit 3979f22cc1a224bad5b8f14610db253660aa974c - Author: Takashi Kokubun - Date: 2019-08-13 01:45:10 +0900 - - Explain the current status of branches [ci skip] (#2350) - - Notes: - Merged-By: k0kubun - -commit e688ab26c71c124ca1c466d9c5c669bd1ce61e6e - Author: git - Date: 2019-08-13 01:34:36 +0900 - - * expand tabs. - -commit 6749682f8225b50bc91a45af0f27f20ff68d473c - Author: Aaron Patterson - Date: 2019-08-10 08:27:43 +0900 - - also unpin `final` on weak maps - -commit 76a928bac2f37e7aa631a6b6dd5320920d6c1b42 - Author: Aaron Patterson - Date: 2019-08-10 08:05:42 +0900 - - Unpin default value objects - - We're already updating the location of default values, so we may as well - unpin them. - -commit 4e418a6c0676271da3176116a62a2fc913ac4548 - Author: Takashi Kokubun - Date: 2019-08-13 01:29:37 +0900 - - Update check_branch description a little [ci skip] - -commit 957bdfbab8e8095bab82fa2e32571196e1777e10 - Author: Aaron Patterson - Date: 2019-08-13 01:21:37 +0900 - - Update docs to use more natural English - - Just a few updates to make the English sound a bit more natural - -commit 0f10828fcfe4a0d082398da71992a7535a4fab52 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-13 01:03:14 +0900 - - Fix a typo [ci skip] - -commit 4d3fb247364a13e12ea41885511b944b0e37917d - Author: git - Date: 2019-08-13 00:51:04 +0900 - - * 2019-08-13 - -commit b8b5e7d5bea99190cf62190e020fea7f82209f0e - Author: Nobuyoshi Nakada - Date: 2019-08-12 19:39:04 +0900 - - Stop rewriting message to include PR URL - - Notes: - Merged: https://github.com/pull/2347 - -commit edd25382687c840f10eec23d72fa08ebd3515fbf - Author: Takashi Kokubun - Date: 2019-08-12 23:36:42 +0900 - - Add a quick job to be used for branch protection - -commit 8d302c914c15af4a29c8b8af801281fa117a7ad2 - Author: Yusuke Endoh - Date: 2019-08-12 23:12:27 +0900 - - string.c (rb_str_sub, _gsub): improve the rdoc - - This change: - - * Added an explanation about back references except \n and \k - (\` \& \' \+ \0) - * Added an explanation about an escape (\\) - * Added some rdoc references - * Rephrased and clarified the reason why double escape is needed, added - some examples, and moved the note to the last (because it is not - specific to the method itself). - -commit 3fc10eff1e6dd63bc0daa753108072954adc89ac - Author: Nobuyoshi Nakada - Date: 2016-09-30 20:49:58 +0900 - - date_parse.c: trim off - - * ext/date/date_parse.c (date_zone_to_diff): trim off by zone name - length. - -commit d96feee37c2d109d0103f08985e85641a23108bf - Author: Nobuyoshi Nakada - Date: 2016-09-30 20:38:23 +0900 - - date_parse.c: avoid copying - - * ext/date/date_parse.c (date_zone_to_diff): get rid of copying - the whole argument string. - -commit e6a0a954c9ef5170b8b25088455106b3748c2187 - Author: Takashi Kokubun - Date: 2019-08-12 20:40:13 +0900 - - Add another test for frame omitted inlining - -commit a5f9306065b8a50cca6cdb65003d0c36d1180c09 - Author: Takashi Kokubun - Date: 2019-08-12 20:20:37 +0900 - - Simplify sudo specification - -commit 188381053cadc06c7c08dd03acb3fdff8de0e472 - Author: Hiroshi SHIBATA - Date: 2019-08-12 19:40:46 +0900 - - added --disable-install-doc to Windows workflow of GitHub Actions - - Closes: https://github.com/ruby/ruby/pull/2346 - -commit ab3ab07b28ac58333d7bbf898ec7cf5973bd02a6 - Author: Hiroshi SHIBATA - Date: 2019-08-12 19:12:29 +0900 - - Removed configuration of Azure Pipelines - -commit 8d50bf40d9fc7015c0a8d52d9e4cf9efbf57ae3c - Author: Hiroshi SHIBATA - Date: 2019-08-12 19:08:51 +0900 - - Try to nmake test - -commit 0fd0f74508e1b6d26605a85066e18a4d00a02d84 - Author: Hiroshi SHIBATA - Date: 2019-08-12 18:56:01 +0900 - - Try to merge windows 2016 and 2019 - -commit 040bf4c0a69cfcc4df6250f0241b9c7cc4a42ab6 - Author: Hiroshi SHIBATA - Date: 2019-08-12 18:33:22 +0900 - - Added windows-2019 workflow - -commit 981f0be6ffd082e9954263323ac149fbfa2e8c01 - Author: Hiroshi SHIBATA - Date: 2019-08-12 18:17:57 +0900 - - Try to nmake - -commit bbc5e97b959ba526036f0f6c95682c1721a87130 - Author: Hiroshi SHIBATA - Date: 2019-08-12 18:06:06 +0900 - - Migrate Windows 2016 env to GitHub Actions from AzurePipelines - -commit 1bec27f05bd40b03b6b7c8cd16a74d9096491e37 - Author: Takashi Kokubun - Date: 2019-08-12 19:52:37 +0900 - - Add exec to apt-get update - - to propagate exit status to travis_retry properly. - -commit f9149c5596e1317687d6f58b14e6f3ee89bc7f2e - Author: Takashi Kokubun - Date: 2019-08-12 19:13:30 +0900 - - Minor wording fix in NEWS [ci skip] - - pushing a trivial commit for testing post-receive hook - -commit 066a3498c6b7d1218b51f19c4b26447a56523aef - Author: Nobuyoshi Nakada - Date: 2019-08-12 19:01:57 +0900 - - Include commits notes in ChangeLog - -commit 5edf921e9bce453b6a68040340940489bf350cc4 - Author: Takashi Kokubun - Date: 2019-08-12 17:55:57 +0900 - - Revert "Roughly retry `brew update` on GitHub Actions" - - This reverts commit 5ee11a95ffbf194a73d1bea300a35f5d6250d203. - - Sorry, timeout(1) was missing. - -commit 927a43a503bd846ab706ff40990ab4ecae8abdc3 - Author: Takashi Kokubun - Date: 2019-08-12 17:46:11 +0900 - - Drop unused ccache - - unlike Travis, it seems not used. - -commit 5ee11a95ffbf194a73d1bea300a35f5d6250d203 - Author: Takashi Kokubun - Date: 2019-08-12 17:44:02 +0900 - - Roughly retry `brew update` on GitHub Actions - - because it has failed often on Travis. - -commit d5250808e1e06c4af7d441971e29096426611ab0 - Author: Takashi Kokubun - Date: 2019-08-12 16:36:56 +0900 - - Try testing openssl@1.1 on GitHub Actions - - because somebody may want to remove the duplicated Travis osx usage - later. - - Notes: - Merged: https://github.com/ruby/ruby/pull/2343 - -commit 765cc17c086024540bc09124bd3628c539faa7b0 - Author: Sho Ito - Date: 2019-08-12 00:11:34 +0900 - - Update IRB man page - - Notes: - Merged: https://github.com/ruby/ruby/pull/2341 - -commit 0d0ff8277fcea4584aa33b8b180a4ade7b90590e - Author: Nobuyoshi Nakada - Date: 2019-08-12 15:13:09 +0900 - - rb_trap_exec has been removed since 1.9 - -commit b1ef14176b3716e3900672a9563b94aa3abedb2d - Author: Takashi Kokubun - Date: 2019-08-12 14:35:49 +0900 - - We did not have tool/ before checkout - - anyway we don't need authorization here. - Also retry does not seem to work in the original version, so let's - extend this with retries as a separate github action later. - -commit 4f10a61eaaf5bfe7e4c53edc79c5e27a7bd1ae33 - Author: Takashi Kokubun - Date: 2019-08-12 14:30:42 +0900 - - Stop relying on actions/checkout - - because it randomly fails on authorization like: - https://github.com/ruby/ruby/runs/190887455 - Also the backoff seems too short. Maybe we need tool/travis_retry.sh for - this too. - - Cloning ruby/ruby does not need authorization. We don't need to use - actions/checkout. - -commit 2b3d84d584e4a4cec5fe452db422c76048826c2b - Author: Nobuyoshi Nakada - Date: 2019-08-12 01:04:21 +0900 - - Use rev-parse - - Use simpler rev-parse to check if pull request was fetched. - -commit b1ad628cdfaef8da8d79d425b5012eb699ff9c1b - Author: Takashi Kokubun - Date: 2019-08-12 13:45:55 +0900 - - Resurrect travis_wait for test-all - - as we dropped -v. - -commit 63d3c4fecd074790c7d9c6e561401cf512bd1d22 - Author: git - Date: 2019-08-12 12:59:08 +0900 - - * 2019-08-12 - -commit bf1f872991bcfcb86472873794bcef88749b95d0 - Author: Hiroshi SHIBATA - Date: 2019-08-12 12:08:42 +0900 - - Removed duplicated jobs with GitHub Actions. - - Closes: https://github.com/ruby/ruby/pull/2340 - -commit ed9d59afc811ff738c4218a2edf71b3c9c49e370 - Author: Hiroshi SHIBATA - Date: 2019-08-12 09:01:00 +0900 - - Added example filter for Linux of GitHub Actions. - -commit 8a8f680f017d0d4c410f17ec74e06d0436dcbe83 - Author: Hiroshi SHIBATA - Date: 2019-08-12 08:23:27 +0900 - - Re-use GITHUB_ACTION variables for filtering bundler examples. - -commit e96321d006f822766bb4be969028f68096d76b39 - Author: Hiroshi SHIBATA - Date: 2019-08-12 07:25:11 +0900 - - Removed make check - -commit fc97aa93132de82a02f4f115de14e6478ec7a7b3 - Author: Hiroshi SHIBATA - Date: 2019-08-12 07:07:54 +0900 - - Fixed the world writable dirs on Ubuntu environment. - -commit cfb192a7b9b00c479abbbbe35d396cc5295285e5 - Author: Hiroshi SHIBATA - Date: 2019-08-11 19:33:03 +0900 - - Added test-bundled-gems to GitHub Actions - -commit 11a09d78c185848a179028a292f583bc356f6b25 - Author: Hiroshi SHIBATA - Date: 2019-08-11 19:12:38 +0900 - - Port ubuntu workflow based on macos - -commit 9fe7e042f50ba7bcd7b64e48b4e6077eeead2861 - Author: Nobuyoshi Nakada - Date: 2019-08-11 16:19:31 +0900 - - Note the reference to the pull request [ci skip] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2339 - -commit 51d9d0f8887820ce52234c80d78388b002e6e628 - Author: Nobuyoshi Nakada - Date: 2019-08-11 15:42:16 +0900 - - Use already fetched pull request [ci skip] - - Notes: - Merged: https://github.com/ruby/ruby/pull/2338 - -commit 1c7eadf75447f10b62e6a93a9c0a90b01bf126e1 - Author: Takashi Kokubun - Date: 2019-08-11 14:15:48 +0900 - - Debug which test hangs on mswin - - debugging failure of - https://ci.appveyor.com/project/ruby/ruby/builds/26613960/job/nemi6pvc5s5843io - -commit 053bee64cb872398c25467a77169853d8ce539d2 - Author: Hiroshi SHIBATA - Date: 2019-08-11 10:49:22 +0900 - - Cleanup the duplicated tasks on Azure Pipelines. - - Closes: https://github.com/ruby/ruby/pull/2336 - -commit 91fcd87f5c0375e36c22c1187edf3f5507572075 - Author: Hiroshi SHIBATA - Date: 2019-08-11 06:55:31 +0900 - - Increase fetch-depth - -commit bb2f24251f011d64d369d78f344e298cc9486473 - Author: Hiroshi SHIBATA - Date: 2019-08-11 08:10:40 +0900 - - GitHub Actions does not support ANSI color code. Skip failing examples. - -commit c685679e25f6a4547c3b48c290bfb905cde0b4ef - Author: Hiroshi SHIBATA - Date: 2019-08-11 07:32:30 +0900 - - Use check. - -commit e7996e0fd6718fa13b5cd5328f1bb6393a45392c - Author: Hiroshi SHIBATA - Date: 2019-08-11 06:26:17 +0900 - - Try to migrate test-bundler to Actions. - -commit 6017e81b033d9eb8ab66dc1bd3402f51155761f1 - Author: Kazuki Tsujimoto - Date: 2019-08-11 11:00:24 +0900 - - Update power_assert to 1.1.5 - -commit f731cc0984560d8dabd211e7b827617fe078cca1 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-11 10:15:05 +0900 - - Use `end_with?` instead of Regexp with missing escape - -commit 2990c2cc3e5a105013b829dad00fa43a26da8682 - Author: Hiroshi SHIBATA - Date: 2019-08-11 06:12:46 +0900 - - Use capture_output instead of capture_io. - - It's preparation for migrating test-unit on upstream. - -commit 7ee948c3a11c5fb79d6f3ec2878a64387e29ba7a - Author: git - Date: 2019-08-11 00:45:23 +0900 - - * 2019-08-11 - -commit d29bccb39bfd2890b33a3fd943916d62527b6e6e - Author: Nobuyoshi Nakada - Date: 2019-08-10 23:47:31 +0900 - - Adjust indent [ci skip] - -commit 46df7fe91f84ce2b2033a784402d3e451d1ff1db - Author: Nobuyoshi Nakada - Date: 2019-08-10 23:45:49 +0900 - - prereq.status deals with removal of nmake VPATH notations [ci skip] - -commit 0609087a6bac37b7fbf7a56db670094b214f7359 - Author: Takashi Kokubun - Date: 2019-08-10 23:57:20 +0900 - - Parallelize osx test-all too - -commit c21c00173349cd9b0aeb899dd9fea5cfba984af4 - Author: Nobuyoshi Nakada - Date: 2019-08-10 16:36:10 +0900 - - Re-enable parallel build/test on OSX - -commit 52bd4716b482337bd8f9f8389c5ab9d168fb11f8 - Author: Nobuyoshi Nakada - Date: 2019-08-10 23:19:24 +0900 - - rb_numeric_quo: support Complex - -commit c1c8577088b1fa36a34ca8b885db441365b27aa7 - Author: Takashi Kokubun - Date: 2019-08-10 20:25:58 +0900 - - Fix wrong pull_request filter - - The specification was not triggered on a pull request. - -commit 00e7ef7e8d1a31d12f7117c07370d6d00cc5eaa2 - Author: Nobuyoshi Nakada - Date: 2019-08-10 19:49:21 +0900 - - Suppress flags messages [ci skip] - -commit a6c5ce7a9bbf584a8b4b39d2ae51fb9b4a5b7f1f - Author: Takashi Kokubun - Date: 2019-08-10 19:39:00 +0900 - - Increase the fetch-depth of GitHub Actions - - because small numbers had made Azure Pipelines in the past and it's - using 20 now. I heard GitHub Actions has more parallelism, so it should - be okay. - -commit b3903ef2a156a19de0c27a3e95cd7a4467cdce59 - Author: Takashi Kokubun - Date: 2019-08-10 19:38:27 +0900 - - Set more descriptive labels to workflow - -commit 59a8003ac5273d65c1d7f39c158c675ce48f25ad - Author: Takashi Kokubun - Date: 2019-08-10 19:33:11 +0900 - - Drop confusing label from workflow - - because it's doing more than test-all - -commit 6205f95539f257adc6b3ab904ff26ff5ed2ff9d3 - Author: Takashi Kokubun - Date: 2019-08-10 19:29:39 +0900 - - Escape asterisk on pull request paths - -commit e43b3bb442836c8064637a7d46c05ad16a4e0115 - Author: Takashi Kokubun - Date: 2019-08-10 19:28:07 +0900 - - Skip running GitHub Actions on trunk - -commit 9b203959d51b597075fe8bfcc07a24845bca4876 - Author: Takashi Kokubun - Date: 2019-08-10 19:19:22 +0900 - - Rename workflow.yml to macos.yml - - to allow having other workflows separately, and configure `name` to - simplify a tooltip label on GitHub. - -commit 5e3fb0b3572d64a82ed86af15d4adca50d71fd6b - Author: Nobuyoshi Nakada - Date: 2019-08-10 16:33:32 +0900 - - Touch the checked out source to fix clock skew on all platform - -commit c5fbe2a19fb8ffe8c64fc8f3810693dd3b4f7edd - Author: Nobuyoshi Nakada - Date: 2019-08-10 15:48:39 +0900 - - Moved options to $travis_apt_get_options - -commit d69ffa4d93b12ddfb0d77f146921eb5d2fd62919 - Author: Nobuyoshi Nakada - Date: 2019-08-10 14:30:34 +0900 - - Expanded f_quo - -commit 98c22c78e40d84678e7bac187236e049e9d8c211 - Author: Nobuyoshi Nakada - Date: 2019-08-10 13:56:18 +0900 - - Expanded f_real_p - -commit ffdef3674af921d7ddd550dc492dcdbed97f7ba5 - Author: Nobuyoshi Nakada - Date: 2019-08-10 13:18:41 +0900 - - Warn instance variable `E` - - It is not dumped, as it is a short alias for `:encoding`. - -commit 3c3783ac88f8f8fbbad016a2daf3e35a682c4b3e - Author: git - Date: 2019-08-10 11:43:07 +0900 - - * expand tabs. - -commit ab31693af109022ecc0a01107067d5c84675807a - Author: Nobuyoshi Nakada - Date: 2019-08-10 11:38:49 +0900 - - Share caches for short encoding ivar name. - -commit 07e42e88d9f2b7756dde0a2377990ebf3c5e1973 - Author: Nobuyoshi Nakada - Date: 2019-08-10 11:26:23 +0900 - - Close created files [ci skip] - -commit 690282472960ff070883bd2151a0728ee5a01eea - Author: Masato Ohba - Date: 2019-08-10 09:28:37 +0900 - - Fix typo in comment [ci skip] - - s/Thtread/Thread - -commit 49f88eb2f1e8c46a4a3b5f6ea3dfa5a5f9d32988 - Author: Takashi Kokubun - Date: 2019-08-10 09:34:13 +0900 - - Try building workflow on push - -commit 789776be08830b53499db86ab33ade9db1111a79 - Author: iain barnett - Date: 2019-08-04 13:37:54 +0900 - - Added some examples to the documentation for String#unpack1 because - there are currently no examples and to contrast with String#unpack. - -commit 9d298b9dab831f966ea4bf365c712161118dd631 - Author: John Hawthorn - Date: 2019-06-27 01:52:30 +0900 - - Allow Array#join to allocate smaller strings - - rb_str_buf_new always allocates at least 127 bytes of capacity, even - when less is requested. - - > ObjectSpace.dump(%w[a b c].join) - {"address":"0x7f935f06ebf0", "type":"STRING", "class":"0x7f935d8b7bb0", "bytesize":3, "capacity":127, "value":"abc", "encoding":"UTF-8", "memsize":168, "flags":{"wb_protected":true}} - - Instead, by using rb_str_new and then setting the length to 0, we can - allocate the exact amount of memory needed, without extra capacity. - - > ObjectSpace.dump(%w[a b c].join) - {"address":"0x7f903fcab530", "type":"STRING", "class":"0x7f903f8b7988", "embedded":true, "bytesize":3, "value":"abc", "encoding":"UTF-8", "memsize":40, "flags":{"wb_protected":true}} - -commit b1678338e545589540b1dd85dee6a18fd98aa8ed - Author: ohbarye - Date: 2019-08-10 01:56:40 +0900 - - Fix typo: duplicated the [skip-ci] - -commit 162cf2879af592f8aa458311486749bed9a6bf55 - Author: Nobuyoshi Nakada - Date: 2019-08-10 01:39:36 +0900 - - Init function is need to link statically - -commit 53b3be5d58a9bf1efce229b3dce723f96e820c79 - Author: Jeremy Evans - Date: 2019-08-09 12:02:54 +0900 - - Fix parsing of multiple assignment with rescue modifier - - Single assignment with rescue modifier applies rescue to the RHS: - - a = raise rescue 1 # a = (raise rescue 1) - - Previously, multiple assignment with rescue modifier applied rescue - to the entire expression: - - a, b = raise rescue [1, 2] # (a, b = raise) rescue [1, 2] - - This makes multiple assignment with rescue modifier consistent with - single assignment with rescue modifier, applying rescue to the RHS: - - a, b = raise rescue [1, 2] # a, b = (raise rescue [1, 2]) - - Implements [Feature #8239] - Fixes [Bug #8279] - -commit cecae8593abb79213f818078ee0361277401f86c - Author: Nobuyoshi Nakada - Date: 2019-08-10 01:05:09 +0900 - - Removed unnecessary headers - -commit 88db6fa4793da3724c0128e53cfe1abead1774f8 - Author: Nobuyoshi Nakada - Date: 2019-08-10 01:04:39 +0900 - - Use ENC_REPLICATE to copy an encoding - -commit 8d7e0159c0c9fa1a546b4fa324837beae5eea3ee - Author: git - Date: 2019-08-10 00:04:06 +0900 - - * 2019-08-10 - -commit a8ba22cd323d481eb8bd08ebca0fab8f1dbfc2f9 - Author: Yusuke Endoh - Date: 2019-08-10 00:01:36 +0900 - - Revert "Removed unused includes" - - This reverts commit c9eb8f82e9febeb634a23bec6aeea915eb25fe26. - - The change caused "implicit declaration" warning and actual segfault. - - ``` - /tmp/ruby/v2/src/trunk-gc-asserts/enc/gb2312.c: In function ‘Init_gb2312’: - /tmp/ruby/v2/src/trunk-gc-asserts/enc/gb2312.c:6:31: warning: implicit declaration of function ‘rb_enc_find’ [-Wimplicit-function-declaration] - rb_enc_register("GB2312", rb_enc_find("EUC-KR")); - ^~~~~~~~~~~ - /tmp/ruby/v2/src/trunk-gc-asserts/enc/gb2312.c:6:31: warning: passing argument 2 of ‘rb_enc_register’ makes pointer from integer without a cast [-Wint-conversion] - :0:19: note: expected ‘OnigEncoding {aka const struct OnigEncodingTypeST *}’ but argument is of type ‘int’ - /tmp/ruby/v2/src/trunk-gc-asserts/regenc.h:231:12: note: in expansion of macro ‘ONIG_ENC_REGISTER’ - extern int ONIG_ENC_REGISTER(const char *, OnigEncoding); - ^~~~~~~~~~~~~~~~~ - ``` - -commit 314b50d7c05e946e4e9bbc5fdb38ecb67180c139 - Author: Nobuyoshi Nakada - Date: 2019-08-09 23:10:06 +0900 - - #include <> for system headers - -commit c9eb8f82e9febeb634a23bec6aeea915eb25fe26 - Author: Nobuyoshi Nakada - Date: 2019-08-09 20:20:36 +0900 - - Removed unused includes - -commit 3ddbba84b5b1f001cd575a48cec56d7ce8e5fbb2 - Author: Yusuke Endoh - Date: 2019-08-09 22:48:20 +0900 - - gc.c: Double STACKFRAME_FOR_CALL_CFUNC (1024->2048) - - ef64ab917eec02491f6bf7233a4031a8c35385e3 didn't fix the issue, so the - size seems not enough yet. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/osx1014/ruby-master/log/20190809T114503Z.fail.html.gz - -commit 63384591e2c72b89f9d69d9acc6c8b80ca8432c3 - Author: Koichi Sasada - Date: 2019-08-09 17:48:47 +0900 - - restore timeout - -commit ef64ab917eec02491f6bf7233a4031a8c35385e3 - Author: Yusuke Endoh - Date: 2019-08-09 17:31:19 +0900 - - gc.c: Increase STACKFRAME_FOR_CALL_CFUNC - - On macOS Mojave, the child process invoked in TestFiber#test_stack_size - gets stuck because the stack overflow detection is too late. - (ko1 figured out the mechanism of the failure.) - - This change attempts to detect stack overflow earlier. - -commit a4a2dd79420d1061ab1615a50b830f567e043d34 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-09 16:29:43 +0900 - - Revert a6e32855d079e8f3806d8be8a5f5cf7b3a967133 partially - - Fix TypeError when typing `''.[TAB]` - -commit 3cbd56d574a3ce6d5ddeb748462eb4dcdce4d166 - Author: Koichi Sasada - Date: 2019-08-09 16:08:15 +0900 - - complement `test_` prefix. - - `make test-all TESTS=name` can specify running test files by name. - name can be dirname ('dir/') or a file ('.../test_foo.rb'). This - patch complement `test_` prefix for a test. So we only need to - specify `TESTS=ruby/hash` which means `TESTS=ruby/test_hash.rb`. - -commit 26cf4c91ad357fe6c8fc2247abe980dbf9a5b331 - Author: Koichi Sasada - Date: 2019-08-09 15:23:35 +0900 - - extend timeout to debug. - -commit 3b39cc6b038d419081a3d302a3cd73c3859613c7 - Author: Koichi Sasada - Date: 2019-08-09 14:11:24 +0900 - - gc.h is required on mswin build. - - thread.c requires gc.h on mswin build. Sorry. - -commit 6bf8db9a07e95820705f7ec119f4038a529182ef - Author: Koichi Sasada - Date: 2019-08-09 13:57:47 +0900 - - add rp() and bp() in internal.h. - - debug utility macro rp() (rp_m()) and bp() are introduced. - * rp(obj) shows obj information w/o any side-effect to STDERR. - * rp_m(m, obj) is similar to rp(obj), but show m before. - * bp() is alias of ruby_debug_breakpoint(), which is registered - as a breakpoint in run.gdb (used by `make gdb` or make gdb-ruby`). - -commit cb390e87dc682a277579f44fac6aea57e16e5f7a - Author: Aaron Patterson - Date: 2019-08-09 05:29:02 +0900 - - Add more runners - - Closes: https://github.com/ruby/ruby/pull/2327 - -commit 54bdfe27f361c0cccb9d16f32e5796b47d017134 - Author: Aaron Patterson - Date: 2019-08-09 00:28:49 +0900 - - Run macOS tests on GitHub Actions - - This commit sets up the CI integration on GitHub Actions. We should - give it a try because queue times are lower and I think we get more - CPUs. - - Closes: https://github.com/ruby/ruby/pull/2327 - - Co-Authored-By: John Hawthorn - -commit 37eefb11fbadca6198b081a0a89d5b265fe45de4 - Author: Koichi Sasada - Date: 2019-08-09 13:08:01 +0900 - - remove useless include and dependency - -commit a9fd57056cdbf041f8f0ad1350846a175028542a - Author: Koichi Sasada - Date: 2019-08-09 13:02:31 +0900 - - double memory limit on MJIT. - - On test with MJIT, sometimes it fails like: - http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2189967 - -commit 0176e74d6c3de4a71424d9bc0bc63c408550b488 - Author: Takashi Kokubun - Date: 2019-08-09 11:39:20 +0900 - - Add missing dependency - - just fix CI failure - https://travis-ci.org/ruby/ruby/jobs/569625233 - -commit 4e9382a82756ff92032b85f8ec0256b1cf5ac6ad - Author: git - Date: 2019-08-09 11:11:18 +0900 - - * expand tabs. - -commit 71efad1ed391ee0c5398a76306fdbaaadd4dc52e - Author: Koichi Sasada - Date: 2019-08-09 11:00:34 +0900 - - introduce RCLASS_CLONED flag for inline cache. - - Methods on duplicated class/module refer same constant inline - cache (IC). Constant access lookup should be done for cloned - class/modules but inline cache doesn't check it. - To check it, this patch introduce new RCLASS_CLONED flag which - are set when if class/module is cloned (both orig and dst). - [Bug #15877] - -commit c7acb37248d4cef76647f8bc7ebd7dc291d9a853 - Author: Aaron Patterson - Date: 2019-08-09 03:29:15 +0900 - - Enable GitHub Actions on Ruby - - This just enables GitHub actions on our repository so we can try it out. - -commit 57288f5dbd9a13c00a0ec5860b46c027f34df1ae - Author: git - Date: 2019-08-09 01:32:30 +0900 - - * expand tabs. - -commit 050b932152fb3004c78af223186afe1aa397f06f - Author: Alan Wu - Date: 2019-08-08 11:15:45 +0900 - - Iseq#to_binary: Add support for NoMatchingPatternError and TypeError - - Binary dumping the iseq for `case foo in []; end` used to crash as - there was no handling for these exception classes. - - Pattern matching generates these classes as operands to `putobject`. - - [Bug #16088] - Closes: https://github.com/ruby/ruby/pull/2325 - -commit 830fd0418170843f234ed82e07d2fd61d86153e7 - Author: Nobuyoshi Nakada - Date: 2019-08-09 01:27:52 +0900 - - C99 allows trailing comma in enum - -commit c0f4943840948100b057ebb0ef6764ffd252cd5e - Author: git - Date: 2019-08-09 00:16:24 +0900 - - * 2019-08-09 - -commit ad3f7a3667d79a7d23c78e026d3eb5a42bd0b7b3 - Author: Nobuyoshi Nakada - Date: 2019-08-09 00:06:08 +0900 - - Should require without wrapper module - -commit a206738762ea788830e8b3ac58b37d705595a6fb - Author: Nobuyoshi Nakada - Date: 2019-08-08 22:40:09 +0900 - - Remove temporary directory [ci skip] - -commit a9b9f9d157ac28e4818b3e6db0e4d924faf97649 - Author: Takashi Kokubun - Date: 2019-08-08 22:35:11 +0900 - - Revert "Drop -j from msys2 build for debugging" - - This reverts commit b1594ca3d6b72edb60927418482652ce93209499. - - Revert "Debug appveyor mingw failure" - - This reverts commit fa29f65416f1fb3d734a279855728bb0616dbb34. - - Though I preserved V=1 for future debugging. - -commit 995c2e9536a7c0f0476d1f62ac3c9bcb68513c59 - Author: Nobuyoshi Nakada - Date: 2019-08-08 22:17:22 +0900 - - Reduce unnecessary EXEC_TAG in require - -commit 2a6d7fad133cd6e1e50de6b8627d19eecee5ed8f - Author: Takashi Kokubun - Date: 2019-08-08 22:03:00 +0900 - - Arrange installed packages like ruby-loco - - to fix a build error like: - https://ci.appveyor.com/project/ruby/ruby/builds/26547644/job/4j7n41e7in97a9kx - - Basically copy-pasted what's currently done in MSP-Greg/ruby-loco. - - Co-Authored-By: MSP-Greg - -commit 76bd0714cf1140ffd64bf564446c76c54f2c4870 - Author: Nobuyoshi Nakada - Date: 2019-08-08 21:26:31 +0900 - - solve "duplicate :raise event" in require too [Bug #15877] - -commit 3d87b774c4e38e0dbe3ef181183565c5987cd05f - Author: Nobuyoshi Nakada - Date: 2019-08-08 21:08:00 +0900 - - Use `ec` instead of `th->ec` where the `th` came from the `ec` - -commit b1594ca3d6b72edb60927418482652ce93209499 - Author: Takashi Kokubun - Date: 2019-08-08 20:37:12 +0900 - - Drop -j from msys2 build for debugging - -commit 29bdfeb0c6d3490fbd7e5a7cc89598ca7340176e - Author: git - Date: 2019-08-08 17:59:38 +0900 - - * expand tabs. - -commit b004d3e8300ba803d4a499148fa4fc6a690149e6 - Author: Koichi Sasada - Date: 2019-08-08 17:53:36 +0900 - - solve "duplicate :raise event" [Bug #15877] - - Without this patch, "raise" event invoked twice when raise an - exception in "load"ed script. - This patch by danielwaterworth (Daniel Waterworth). - [Bug #15877] - -commit 20cb8e8aeab916d659c0359a35687bb8df1f31a6 - Author: Yusuke Endoh - Date: 2019-08-08 17:34:50 +0900 - - main.c: Add doxygen mainpage - - The document is experimentally produced in: - https://rubyci.s3.amazonaws.com/doxygen/modules.html - -commit b39efb163dd97a6b2c92cac3d2b1c19f898d0c04 - Author: Hiroshi SHIBATA - Date: 2019-08-08 17:19:23 +0900 - - Aliases capture_output to capture_io for test-unit compatibility. - -commit 1ad0f4e593563d460e3015fc4a2542ce1bb80d6e - Author: Gannon McGibbon - Date: 2019-08-07 07:38:55 +0900 - - Add *_clear methods to VM_COLLECT_USAGE_DETAILS API - - Add RubyVM::USAGE_ANALYSIS_INSN_CLEAR, RubyVM::USAGE_ANALYSIS_OPERAND_CLEAR, - and RubyVM::USAGE_ANALYSIS_REGISTER_CLEAR to clear VM instruction hash constants. - - Closes: https://github.com/ruby/ruby/pull/2258 - -commit 1c7d3a13caa718ef52ec6b55988b1459a002f965 - Author: Gannon McGibbon - Date: 2019-03-12 04:07:52 +0900 - - Add *_start and *_running methods to VM_COLLECT_USAGE_DETAILS API - - Add RubyVM::USAGE_ANALYSIS_INSN_START, RubyVM::USAGE_ANALYSIS_OPERAND_START, - and RubyVM::USAGE_ANALYSIS_REGISTER_START to begin collecting VM instructions. - - Add RubyVM::USAGE_ANALYSIS_INSN_RUNNING, RubyVM::USAGE_ANALYSIS_OPERAND_RUNNING, - and RubyVM::USAGE_ANALYSIS_REGISTER_RUNNING to check if VM instructions - are being collected. - - Closes: https://github.com/ruby/ruby/pull/2258 - -commit 70fd099220446e39bb80eb0bb32870ce12134619 - Author: Aaron Patterson - Date: 2019-08-07 04:23:30 +0900 - - Add a way to print debug counters without exiting - - I am trying to study debug counters inside a Rails application. - Accessing debug counters by killing the process is hard because child - processes don't get the same TRAP as the parent, and Rails seems to - intercept calls to `exit`. Adding this method lets me print the debug - counters when I want (at the end of requests for example) - -commit 2f3795113df23006f1f99dd5879a8a9acbc29c5c - Author: git - Date: 2019-08-08 00:11:34 +0900 - - * 2019-08-08 - -commit fa29f65416f1fb3d734a279855728bb0616dbb34 - Author: Takashi Kokubun - Date: 2019-08-08 00:10:26 +0900 - - Debug appveyor mingw failure - - It has been unstable for recent builds: - https://ci.appveyor.com/project/ruby/ruby/builds/26531442/job/0ycp7woekqqx97x9 - https://ci.appveyor.com/project/ruby/ruby/builds/26531687/job/xui3rctcvi7r49iv - https://ci.appveyor.com/project/ruby/ruby/builds/26532019/job/1q0n46ci4g8dplwx - -commit f82633b6a6053e6273e8795d3e91c50ab5c260d8 - Author: Yusuke Endoh - Date: 2019-08-07 22:56:52 +0900 - - array.c: gc.h is not needed - -commit 3229e0583fba6a7f1c58a1dd8aa7d4ca9c5155d9 - Author: Yusuke Endoh - Date: 2019-08-07 22:54:38 +0900 - - hash.c: gc.h is needed when HASH_DEBUG mode - -commit 0cf6bfca7866a0205ba6d603cca7c87f4db0065e - Author: Yusuke Endoh - Date: 2019-08-07 22:42:42 +0900 - - hash.c: gc.h is no longer needed - -commit f5481e35abfc8d53cffe33246b4d5736798f4241 - Author: Hiroshi SHIBATA - Date: 2019-08-07 22:30:10 +0900 - - Added separator for failing commits from default gems. - -commit 67cde179c5b23f1e8da3cb7554d26c79ed1c3b97 - Author: Hiroshi SHIBATA - Date: 2019-08-07 22:29:02 +0900 - - Skip merge commit created by bundlerbot. - -commit 82527d9b50207607b2adb7fb6dded91d23749feb - Author: Daniel Radetsky - Date: 2019-08-07 10:21:32 +0900 - - fix spelling - - Closes: https://github.com/ruby/ruby/pull/2323 - -commit 58dec9625cc705fd9be6dc1ea20e232303e9c32d - Author: Yusuke Endoh - Date: 2019-08-07 22:22:52 +0900 - - enum.c: Remove unused #include - - transient_heap.h is no longer needed. - -commit 0d2aa6fec952e78739e7f379df5a3f7547ce4f27 - Author: Takashi Kokubun - Date: 2019-08-07 22:11:52 +0900 - - Upgrade benchmark-driver version - - as I already started to use --runner=block introduced in v0.14.20 like: - https://github.com/ruby/ruby/pull/2321#issuecomment-518638663 - -commit 330e3f19c32dc6b0c287b7845c796e7e4a3ed575 - Author: Takashi Kokubun - Date: 2019-08-07 21:47:03 +0900 - - Refactor .travis.yml by introducing travis_retry.sh - - Not using official travis_retry.bash, because it's not supporting to - modify backoff seconds. - https://github.com/travis-ci/travis-build/blob/0ad8f1886b2c31994d847e126dc5842b7b3513e3/lib/travis/build/bash/travis_retry.bash - - Not using official `travis_apt_get_update` function because it does not - propagate exit status to be used by retries. - https://github.com/travis-ci/travis-build/blob/0ad8f1886b2c31994d847e126dc5842b7b3513e3/lib/travis/build/bash/travis_apt_get_update.bash - - Co-Authored-By: Nobuyoshi Nakada - -commit e6901cea741931906bacbb7c6afdafa621e50c0b - Author: Nobuyoshi Nakada - Date: 2019-08-07 10:41:12 +0900 - - Fixed deprecation message - -commit 1bf796c69dcc61977a105474d08bbe2a51c88e0e - Author: Nobuyoshi Nakada - Date: 2019-08-07 08:57:22 +0900 - - Fix Date#step test - - The document states that "the limit should be a date object". - -commit a0fe396555b164562f69e08e67b62d9904bcfaaa - Author: Takashi Kokubun - Date: 2019-08-07 09:39:46 +0900 - - Simplify break logic of Travis retries - - Co-Authored-By: Nobuyoshi Nakada - -commit b839721ae7814a6e74de59eb40586a32a398545f - Author: Kazuhiro NISHIYAMA - Date: 2019-08-07 09:03:08 +0900 - - .travis.yml: Use `-eq` instead `=` to compare integers - -commit 8877dbe400d84c1f595cb4aa8a06fc71640a43c0 - Author: Yusuke Endoh - Date: 2019-08-07 03:13:17 +0900 - - ext/ripper/lib/ripper/lexer.rb: Consistently use `Array#push` - - instead of <<. All the other callsites use `push`. - -commit ef8c5161b4422783c8f736a099d97a9c868fe287 - Author: Yusuke Endoh - Date: 2019-08-07 03:12:10 +0900 - - ext/ripper/lib/ripper/lexer.rb: fix a wrong delegation - - The target method name is a typo. - -commit 2d6b92c5f6b6343f34bb363604339f4bd7b951ac - Author: Takashi Kokubun - Date: 2019-08-07 01:26:02 +0900 - - Retry ubuntu-toolchain-r-test apt source setup - - In 614c90fe21cf1d9cf6fb18684187d8c7e2f61de6, I assumed - apt-add-repository has been stable recently, but I saw PR randomly - failed for it today. - - This commit only deals with "ubuntu-toolchain-r-test" and does NOT deal - with `llvm-toolchain-xenial-8` intentionally, because what it does - (mainly curl from build.travis-ci.org) seems to be more reliable than - "ubuntu-toolchain-r-test". Also `&clang-8` jobs are basically - allow_failures and it's less important to be stabilized. - -commit 66a13413eee3c4985e62e87addcdce84fc4540fe - Author: git - Date: 2019-08-07 00:07:06 +0900 - - * 2019-08-07 - -commit e89d9f3debab353d1c5a5162752af8f201d98d49 - Author: Nobuyoshi Nakada - Date: 2019-08-07 00:02:21 +0900 - - Deprecate Float::ROUNDS, which should not be a constant - - [Bug #16044] - -commit 0ed298f382e0fc0f119f4896394aacf3b74f6687 - Author: Nobuyoshi Nakada - Date: 2019-08-06 23:39:14 +0900 - - Refine time_to_r - - * time.c (time_to_r): get rid canonicalize and uncanonicalize - one-denominator rational, by rb_time_unmagnify_to_rational. - -commit a04e3585d3cd1d76c4ec61a39bd4f2bdcd6517a1 - Author: Nobuyoshi Nakada - Date: 2019-08-06 23:00:29 +0900 - - Extracted wmap_live_p - -commit 3e6b9926b70d7df9424cf2a6472ba0cd33e61f48 - Author: git - Date: 2019-08-06 20:59:41 +0900 - - * expand tabs. - -commit b5146e375aca25a15ec46978711cde28e5f761d6 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-06 12:56:18 +0900 - - leafify opt_plus - - Inspired by 346aa557b31fe96760e505d30da26eb7a846bac9 - - Closes: https://github.com/ruby/ruby/pull/2321 - -commit 43b52ac0a52807c415e9d24d25954f5055567c5e - Author: aycabta - Date: 2019-08-06 20:28:48 +0900 - - Revert "Don't echo results of assignment expressions" - - This reverts commit 1ee88c51b3c319b74b69540e111e4a1c24833cad. - -commit 1ee88c51b3c319b74b69540e111e4a1c24833cad - Author: Steven Willis - Date: 2019-03-21 03:50:05 +0900 - - Don't echo results of assignment expressions - -commit 842364792f03f99f4347d7dbce2a7bd39d1fcc33 - Author: Charles Oliver Nutter - Date: 2019-07-27 15:18:39 +0900 - - Use host_os from RbConfig to detect host OS. - - RUBY_PLATFORM on JRuby is always "java", so it will not reflect - the host operating system. This regex appears to be the consensus - way to detect Windows based on a search of Ruby code on Github: - - https://github.com/search?q=%2Fmswin%7Cmsys%7Cmingw%7Ccygwin%7Cbccwin%7Cwince%7Cemc%2F&type=Code - -commit d626ca1e98d32b67987adb64637a15adf0c977f0 - Author: aycabta - Date: 2019-07-31 02:13:21 +0900 - - Remove obsolete TODO comment - -commit 81a15d636efafaeebe084dc03dae54264d91b875 - Author: aycabta - Date: 2019-08-01 00:39:30 +0900 - - Update Unicode URL to 12.1.0 - -commit 4daff3a603d1a8b2656e82108e2f7d0abf8103c9 - Author: Nobuyoshi Nakada - Date: 2019-08-06 11:56:37 +0900 - - The value of rb_scan_args_verify is never used - -commit 5cff9968aefe2f407731df705830888d9d61409d - Author: Nobuyoshi Nakada - Date: 2019-08-06 11:52:17 +0900 - - Distinguish bad scan format from no argument variables - -commit 146cf2f444c271cb2d4be9efa04053f4d66d16e6 - Author: Espartaco Palma - Date: 2018-10-14 14:36:57 +0900 - - Removing duplicated assertions on test_array.rb - MINUS method - - Closes: https://github.com/ruby/ruby/pull/1790 - -commit 4f1a00a746b8c47dd32f06b249aad8c4d27cb934 - Author: Justin Collins - Date: 2016-09-11 18:09:43 +0900 - - Improve same directory detection in FileUtils - - Closes: https://github.com/ruby/ruby/pull/1425 - -commit 96cec6b27741cbdeb51ea3acdeba0e813d51035f - Author: Jeremy Evans - Date: 2019-07-15 11:39:57 +0900 - - Document that RubyVM::InstructionSequence methods are implementation and version dependent - - Fixes [Bug #6785] - -commit 2b6441196ef32d93c7898764610a913f54f8bc32 - Author: Jeremy Evans - Date: 2019-08-06 08:10:25 +0900 - - Remove documentation of %m in Syslog - - Fixes [Bug #6726] - -commit 81252c5ccd15295155a8fe30b0b56117ba7c79e7 - Author: Aaron Patterson - Date: 2019-08-06 03:32:42 +0900 - - Let prev EP move again - - The last time we committed this, we were asking the VM to write to the - ep. But VM assertions check if the ENV data is the correct type, which - if it's a T_MOVED pointer it's not the correct type. So the vm - assertions would fail. This time we just directly write to it from the - GC and that bypasses the vm assertion checks. - -commit c9192ef2e8793fd870a4af40f422bc939a135ef9 - Author: git - Date: 2019-08-06 00:56:05 +0900 - - * expand tabs. - -commit 33d7a58ffb193cb2ca200ff5b3c649a72d190d21 - Author: Aaron Patterson - Date: 2019-08-02 05:44:54 +0900 - - add compaction support to weak maps - -commit 255e22a8272cd951a6cf8983b7720546e859d1eb - Author: Takashi Kokubun - Date: 2019-08-06 00:49:41 +0900 - - Use gcc-8 for BASERUBY test - - as it failed https://travis-ci.org/ruby/ruby/jobs/567942969, unlike my - fork CI. - - This just rollbacks a minor change in - 798474deaf10dbea70c02724b5acf4487bbed660. - -commit e80f407ed4eafad4c544d7b2de507a0f4386f0a7 - Author: Takashi Kokubun - Date: 2019-08-06 00:43:46 +0900 - - Give up stabilizing TestProcess on Travis osx - - They have been too unstable. - - Revert "Extend sleep before sending USR1 in TestProcess" - This reverts commit aaf69a8ba866193863a7eafe5c6044844bd71bc3. - - Revert "Extend sleep before sending USR1 in TestProcess" - This reverts commit 076f3fcf11a061394d3d5f8c671512df1e983023. - -commit 48d460d9a6d326f4084dec0fd5d90b1cc4331e78 - Author: git - Date: 2019-08-06 00:34:06 +0900 - - * 2019-08-06 - -commit 614c90fe21cf1d9cf6fb18684187d8c7e2f61de6 - Author: Takashi Kokubun - Date: 2019-08-06 00:01:05 +0900 - - Control Travis apt retries on our own - - because Travis team does not do it for us: - https://github.com/travis-ci/travis-build/pull/1712 - - The retried part has failed often even in one day: - https://travis-ci.org/ruby/ruby/jobs/567802384 - https://travis-ci.org/ruby/ruby/jobs/567802388 - https://travis-ci.org/ruby/ruby/jobs/567695879 - https://travis-ci.org/ruby/ruby/jobs/567666931 - - For doing it easily, this also changes major aliases to - compiler-specific ones, because partially updating `before_install` - logic using `env` key was too hard and we needed to directly write - `before_install` for each package set. As a bonus of it, it may also - skip installing unnecessary packages when just `os: linux` is needed. - - I'll revert this if this patch does not contribute to stabilize CI. - -commit fb9dd6182af1b0c1275d6d579cb53d6dac5eda5c - Author: Nobuyoshi Nakada - Date: 2019-08-05 13:43:22 +0900 - - Use negative-sized array instead of zero-division - -commit 4c15b241f8e83696ae104ad141ba990adf833309 - Author: Nobuyoshi Nakada - Date: 2019-08-05 13:29:53 +0900 - - Unused macro argument `varc` - -commit 86ac51c301e62abb4eb0962e04e587ba8298bf80 - Author: Benoit Daloze - Date: 2019-08-04 21:39:55 +0900 - - [rubygems/rubygems] Use the standard RUBY_ENGINE_VERSION instead of JRUBY_VERSION - - * RUBY_ENGINE and RUBY_ENGINE_VERSION are defined on every modern Ruby. - * There is no such constant as TRUFFLERUBY_VERSION or RBX_VERSION. - - https://github.com/rubygems/rubygems/commit/431d0aefdd - -commit 2ea2108a9fb1460342226f54cbf54ddd79ea1cc2 - Author: Benoit Daloze - Date: 2019-08-04 21:16:42 +0900 - - [rubygems/rubygems] Fix error handling of #with_engine_version - - * If settings constants fail, show that exception instead of getting - another one due to variables being unset and hiding the real cause. - - https://github.com/rubygems/rubygems/commit/f38cd67874 - -commit f9dac1bd54af384e99fecf949cad9df9ceb09f0d - Author: David Rodríguez - Date: 2019-08-01 20:20:58 +0900 - - [rubygems/rubygems] Cleanup after testing `rake package` - - Sometimes it happens to me that my local tests start failing because I - pull some file removals or renames into my local copy, and those are - still present on my last copy of pkg/. In those cases, the test about - `rake package` will fail with something like the following: - - ```` - - Failure: - TestRakePackage#test_builds_ok [/home/deivid/Code/rubygems/test/rubygems/test_rake_package.rb:13]: - Expected `rake package` to work, but got errors: - - ``` - cd pkg/rubygems-update-3.1.0.pre1 - WARNING: See http://guides.rubygems.org/specification-reference/ for help - rake aborted! - Gem::InvalidSpecificationException: ["test/rubygems/test_rake_package.rb"] are not files - - Tasks: TOP => package => gem => pkg/rubygems-update-3.1.0.pre1.gem - (See full trace by running task with --trace) - - ``` - - If you have added or removed files, make sure you run `rake update_manifest` to update the `Manifest.txt` accordingly. - Expected: true - Actual: false - ```` - - So, make sure, package is always built from scratch. - - https://github.com/rubygems/rubygems/commit/4e2cc9eb26 - -commit 42a9e27d845271002e09caf68d977990bd06a867 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-01 18:00:32 +0900 - - [rubygems/rubygems] Use gsub with Hash - - https://github.com/rubygems/rubygems/commit/83eced0b39 - -commit 87bc29fe28654ed6b42e87337806ce40cecbe513 - Author: bronzdoc - Date: 2019-07-31 21:33:40 +0900 - - [rubygems/rubygems] Revert cadb66037d9b58c80fc795f39384d533229a1f73 - - https://github.com/rubygems/rubygems/commit/5c3158d975 - -commit 8eb2921f568f0ebc1a0f61b45297c77516f602b5 - Author: Hiroshi SHIBATA - Date: 2019-07-31 08:54:45 +0900 - - [rubygems/rubygems] Fixed to warn with shadowing outer local variable. - - https://github.com/rubygems/rubygems/commit/b0588a87b1 - -commit 5a8d848849bf96de2d2a26db1d6c0cd0999b2078 - Author: bronzdoc - Date: 2019-07-30 09:39:17 +0900 - - [rubygems/rubygems] Remove FIXME comment - - https://github.com/rubygems/rubygems/commit/5a1d3d618d - -commit 58a478bce4a81e619dcef4436f437453d1a3cd89 - Author: Yusuke Endoh - Date: 2019-08-05 14:37:53 +0900 - - ext/psych/yaml/loader.c: Cast the difference of pointers to int - - instead of casting a pointer to int. - Follow up of 39622232c7542d062f79277a11f6b8b6b6cfd994. - -commit 2403f9ac3af170ce0107a709a9cb510fe0501648 - Author: NAKAMURA Usaku - Date: 2019-08-05 12:52:14 +0900 - - Expand the timeout of `test_pstore_files_are_accessed_as_binary_files` - - Sometimes causes timeout error on mswin CI - -commit 6a265278b56eb3f0bab84fbed0c302f4c5ea8c6d - Author: Nobuyoshi Nakada - Date: 2019-08-05 12:16:03 +0900 - - Check if signaled - -commit dc0c04764fbd65c28337c37f70cbf71c0cadffe1 - Author: Nobuyoshi Nakada - Date: 2019-08-05 11:55:21 +0900 - - Refined assertion messages - -commit 521e25baa42c31cc40e60c1da3a5e8e147255ef9 - Author: Nobuyoshi Nakada - Date: 2019-08-05 11:47:25 +0900 - - Fixed assertion - - The regexp should be expected to match the error message. - -commit 8cfa3d861c393b7f2f35eaf30132edd8423ba59a - Author: Nobuyoshi Nakada - Date: 2019-08-05 10:51:52 +0900 - - Do not expect RSTRING_PTR valid after rb_fstring - -commit 29092d35d33d3a879634e173604edc9d201aa87a - Author: Nobuyoshi Nakada - Date: 2019-08-05 10:47:36 +0900 - - Moved FailDesc to EnvUtil.failure_description - - So EnvUtil does not depends on test/unit. - -commit 548cd6e2b51ee0ed7b59799950681d46a43c6c85 - Author: Takashi Kokubun - Date: 2019-08-05 09:16:12 +0900 - - Drop default leaf definition and obsoleted comments - - leaf is true by default. Other insns are not specifying it explicitly. - Also the comment describing why it was not leaf is outdated. - -commit 6bb3618f281e1cdbb28fe38ee88287da9b1838e8 - Author: Yaw Boakye - Date: 2018-10-12 09:04:46 +0900 - - n+1 to include n in range - - Python's range stop right before n, which means factL never returns the correct result. - - Closes: https://github.com/ruby/ruby/pull/1982 - -commit 253da5b2196ccef2a2bf66ca4e7305118f79198a - Author: git - Date: 2019-08-05 09:00:13 +0900 - - * 2019-08-05 - -commit d6ac5c53d481b109cb684d818b14ff24afb5b4bb - Author: Nobuyoshi Nakada - Date: 2019-08-05 08:55:09 +0900 - - Revert "Always evaluate the expression RUBY_ASSERT_MESG_WHEN just once" - - It caused a significant benchmark fall. Some assertions seem to - use expressions with side-effects which cannot be inlined. - - This reverts commit b452c03a14f943ae25338547bd680fce67399d85. - -commit aaf69a8ba866193863a7eafe5c6044844bd71bc3 - Author: Takashi Kokubun - Date: 2019-08-04 23:41:33 +0900 - - Extend sleep before sending USR1 in TestProcess - - just like 076f3fcf11a061394d3d5f8c671512df1e983023. - - This test also hanged on Travis osx - https://travis-ci.org/ruby/ruby/jobs/567547060 - -commit 164f1ac0e994b3b2937ace5c77192c63a489a962 - Author: Takashi Kokubun - Date: 2019-08-04 23:08:22 +0900 - - Revert "Skip test_race_exception on MJIT for now" - - This reverts commit 7a75baa6e294473f02da512c99f7ef1f76b2d83c. - - Revert "Defer skip to avoid errors on ensure" - - This reverts commit adfc8d6dbadbccef27d6ec78022650840c7604cc. - - because 76e2370f132f83c16c9de39a0a9356579f364527 is hoped to fix the - problem. - -commit 7817a6fa09db7cbe2d79b3b6fc86aa4e7fea6d28 - Author: git - Date: 2019-08-04 22:27:17 +0900 - - * expand tabs. - -commit 76e2370f132f83c16c9de39a0a9356579f364527 - Author: Nobuyoshi Nakada - Date: 2019-08-04 22:19:18 +0900 - - Fix dangling path name from fstring - - * load.c (rb_require_internal): make sure in advance that the path - to be loaded shares a fstring, to get rid of dangling path name. - Fixed up 5931857281ce45c1c277aa86d1588119ab00a955. [Bug #16041] - -commit 346aa557b31fe96760e505d30da26eb7a846bac9 - Author: Takashi Kokubun - Date: 2019-08-04 20:11:00 +0900 - - Make opt_eq and opt_neq insns leaf - - # Benchmark zero? - - ``` - require 'benchmark/ips' - - Numeric.class_eval do - def ruby_zero? - self == 0 - end - end - - Benchmark.ips do |x| - x.report('0.zero?') { 0.ruby_zero? } - x.report('1.zero?') { 1.ruby_zero? } - x.compare! - end - ``` - - ## VM - No significant impact for VM. - - ### before - ruby 2.7.0dev (2019-08-04T02:56:02Z master 2d8c037e97) [x86_64-linux] - - 0.zero?: 21855445.5 i/s - 1.zero?: 21770817.3 i/s - same-ish: difference falls within error - - ### after - ruby 2.7.0dev (2019-08-04T11:17:10Z opt-eq-leaf 6404bebd6a) [x86_64-linux] - - 1.zero?: 21958912.3 i/s - 0.zero?: 21881625.9 i/s - same-ish: difference falls within error - - ## JIT - The performance improves about 1.23x. - - ### before - ruby 2.7.0dev (2019-08-04T02:56:02Z master 2d8c037e97) +JIT [x86_64-linux] - - 0.zero?: 36343111.6 i/s - 1.zero?: 36295153.3 i/s - same-ish: difference falls within error - - ### after - ruby 2.7.0dev (2019-08-04T11:17:10Z opt-eq-leaf 6404bebd6a) +JIT [x86_64-linux] - - 0.zero?: 44740467.2 i/s - 1.zero?: 44363616.1 i/s - same-ish: difference falls within error - - # Benchmark str == str / str != str - - ``` - # frozen_string_literal: true - require 'benchmark/ips' - - Benchmark.ips do |x| - x.report('a == a') { 'a' == 'a' } - x.report('a == b') { 'a' == 'b' } - x.report('a != a') { 'a' != 'a' } - x.report('a != b') { 'a' != 'b' } - x.compare! - end - ``` - - ## VM - No significant impact for VM. - - ### before - ruby 2.7.0dev (2019-08-04T02:56:02Z master 2d8c037e97) [x86_64-linux] - - a == a: 27286219.0 i/s - a != a: 24892389.5 i/s - 1.10x slower - a == b: 23623635.8 i/s - 1.16x slower - a != b: 21800958.0 i/s - 1.25x slower - - ### after - ruby 2.7.0dev (2019-08-04T11:17:10Z opt-eq-leaf 6404bebd6a) [x86_64-linux] - - a == a: 27224016.2 i/s - a != a: 24490109.5 i/s - 1.11x slower - a == b: 23391052.4 i/s - 1.16x slower - a != b: 21811321.7 i/s - 1.25x slower - - ## JIT - The performance improves on JIT a little. - - ### before - ruby 2.7.0dev (2019-08-04T02:56:02Z master 2d8c037e97) +JIT [x86_64-linux] - - a == a: 42010674.7 i/s - a != a: 38920311.2 i/s - same-ish: difference falls within error - a == b: 32574262.2 i/s - 1.29x slower - a != b: 32099790.3 i/s - 1.31x slower - - ### after - ruby 2.7.0dev (2019-08-04T11:17:10Z opt-eq-leaf 6404bebd6a) +JIT [x86_64-linux] - - a == a: 46902738.8 i/s - a != a: 43097258.6 i/s - 1.09x slower - a == b: 35822018.4 i/s - 1.31x slower - a != b: 33377257.8 i/s - 1.41x slower - - This is needed towards Bug#15589. - Closes: https://github.com/ruby/ruby/pull/2318 - -commit 39622232c7542d062f79277a11f6b8b6b6cfd994 - Author: Hiroshi SHIBATA - Date: 2019-08-04 20:12:43 +0900 - - Suppress warnings of bundled libyaml. - -commit 2d8c037e97e8120de254006f7d60ec9e42a7b6ae - Author: Sutou Kouhei - Date: 2019-05-26 05:32:41 +0900 - - [ruby/rexml] gemspec: update - - https://github.com/ruby/rexml/commit/404bd99a7c - -commit 310a2a98601168aae8c071749b5cb572b55d5046 - Author: Kouhei Sutou - Date: 2019-05-25 18:28:00 +0900 - - [ruby/rexml] xpath: add missing value conversions for equality and relational expressions - - GitHub: fix #18 - - Reported by Mirko Budszuhn. Thanks!!! - - https://github.com/ruby/rexml/commit/0dca2a2ba0 - -commit 39f275edf7284ef0c0f9b9391038ae9f2c019731 - Author: Kouhei Sutou - Date: 2019-05-25 18:25:37 +0900 - - [ruby/rexml] xpath number: fix a bug that false is converted to NaN - - GitHub: fix #18 - - It must be 0. - - Reported by Mirko Budszuhn. Thanks!!! - - https://github.com/ruby/rexml/commit/b48f3afa3b - -commit 643344dc9460626617c9ce88f07b3ae0fed49150 - Author: Kouhei Sutou - Date: 2019-05-25 17:58:49 +0900 - - [ruby/rexml] xpath local_name: fix a bug that nil is returned for nonexistent case - - It must be an empty string. - - https://github.com/ruby/rexml/commit/81bc7cd4f5 - -commit 5f78b138b10a6732676689f0f8690c1db16c1355 - Author: Kouhei Sutou - Date: 2019-05-25 17:47:41 +0900 - - [ruby/rexml] xpath boolean: implement - - https://github.com/ruby/rexml/commit/feb8ddb1ec - -commit 6ef82943978ea5816a91c32e9ff822c73d1935f9 - Author: Kouhei Sutou - Date: 2019-05-25 17:06:53 +0900 - - [ruby/rexml] xpath: fix a bug for equality or relational expressions - - GitHub: fix #17 - - There is a bug when they are used against node set. They should return - boolean value but they returned node set. - - Reported by Mirko Budszuhn. Thanks!!! - - https://github.com/ruby/rexml/commit/a02bf38440 - -commit c46ba8e9a3b1b6c13232c1af3e9f2efd4a3eec98 - Author: Kouhei Sutou - Date: 2019-05-25 15:54:02 +0900 - - [ruby/rexml] Use PP - - https://github.com/ruby/rexml/commit/185062a4a4 - -commit 54525fbfd4bada3eb39428a83e9c337efcbeb4ce - Author: Kouhei Sutou - Date: 2019-05-25 15:14:05 +0900 - - [ruby/rexml] xpath: add support for changing to debug mode by environment variable - - https://github.com/ruby/rexml/commit/59378a16ea - -commit de55e0a008768b0b7c2ddb8d486f4e5a5e09e2fa - Author: Kouhei Sutou - Date: 2019-05-04 14:02:34 +0900 - - [ruby/rexml] Bump version - - https://github.com/ruby/rexml/commit/54452c103a - -commit f85caf40a69d322bde80a547e4b17568604746ff - Author: ujihisa - Date: 2019-02-21 17:42:08 +0900 - - [ruby/rexml] Message less confusing error to human (#16) - - * Message less confusing error to human - - * Problem: Following error message is not helpful, because you have to reason - that '' actually means it's in the top-level, and the 'div' (not '') is - an end tag - - require "rexml/parsers/lightparser" - REXML::Parsers::LightParser.new('').parse - #=> Missing end tag for '' (got 'div') - - * Solution: add a special case in error handling just to change the error message - - require "rexml/parsers/lightparser" - REXML::Parsers::LightParser.new('').parse - #=> Unexpected top-level end tag (got 'div') - - * Refactor by removing unnecessary `md` check - - * Thanks @a_matsuda to review this at asakusa.rb! - - https://github.com/ruby/rexml/commit/f6528d4477 - -commit 33e4a59b4a051b853bc412cf8badfc26a7cb391a - Author: Kouhei Sutou - Date: 2019-02-10 05:37:28 +0900 - - [ruby/rexml] test: compare with real element - - https://github.com/ruby/rexml/commit/9f2908de2e - -commit ee8985ef0e35183d606af3a7360cd4713069e9b2 - Author: Alyssa Ross - Date: 2019-02-10 05:33:06 +0900 - - [ruby/rexml] Fix crash with nil XPath variables (#13) - - Patch by Alyssa Ross. Thanks!!! - https://github.com/ruby/rexml/commit/2a53c54f58 - -commit 982208c65069423b1bc90dafde7589872c452c21 - Author: FUJI Goro (gfx) - Date: 2019-01-05 22:34:03 +0900 - - [ruby/rexml] use #inspect to print meta-characters in error messages - - https://github.com/ruby/rexml/commit/a124a19b9a - -commit 81354bbd1b2ef5f4660c9255eea1f99b26688efa - Author: Kouhei Sutou - Date: 2019-01-01 06:52:24 +0900 - - [ruby/rexml] Bump version - - https://github.com/ruby/rexml/commit/c0e3f14564 - -commit 0f18bc7fca0668aa2ffeb15106525526e4f018ba - Author: Kouhei Sutou - Date: 2019-01-01 06:32:18 +0900 - - [ruby/rexml] Fix attribute's default namespace behavior - - NOTE: It's a backward incompatible change. If we have any serious - problems with this change, we may revert this change. - - The XML namespace specification says the default namespace doesn't - apply to attribute names but it does in REXML without this change: - - https://www.w3.org/TR/xml-names/#uniqAttrs - - > the default namespace does not apply to attribute names - - REXML reports a parse error for the following XML that is described as - a valid XML in the XML nsmaspace specification without this change: - - - - - - - - If attribute doesn't have prefix, the attribute should return "" for - both #prefix and #namespace. - - https://github.com/ruby/rexml/commit/9e4fd552bc - -commit 9b36f0a787dfb1a2a3875b827b455b5a9a2f2680 - Author: Kouhei Sutou - Date: 2019-01-01 06:02:37 +0900 - - [ruby/rexml] Format - - https://github.com/ruby/rexml/commit/2384586811 - -commit 84c3742466fa78b48902d340345cddd04569b81f - Author: Kouhei Sutou - Date: 2019-01-01 05:39:37 +0900 - - [ruby/rexml] Revert "xpath: remove needless nil check" - - This reverts commit 61b73c1bf8dc64d97fba7f0a8c503c24b11313f5. - - "*:local_name" becomes prefix=nil. - - https://github.com/ruby/rexml/commit/9e7dd4cd4e - -commit 096e766355f36983676883b7cb83a1b5862be49a - Author: Kouhei Sutou - Date: 2019-01-01 05:36:39 +0900 - - [ruby/rexml] xpath: remove needless nil check - - It must not be nil. - - https://github.com/ruby/rexml/commit/61b73c1bf8 - -commit 27c11892c829a249b997f896b29cdf26ac9f38f2 - Author: Kouhei Sutou - Date: 2018-12-31 07:24:25 +0900 - - [ruby/rexml] Add a TODO for Attribute#namespace - - https://github.com/ruby/rexml/commit/70310a06e5 - -commit 3583fa166c52aff1ac6fab310e9133c553efcc4a - Author: Kouhei Sutou - Date: 2018-12-31 07:21:37 +0900 - - [ruby/rexml] xpath: fix a bug that no namespace attribute isn't matched with prefix - - [ruby-list:50733] - - Reported by Yasuhiro KIMURA. Thanks!!! - - https://github.com/ruby/rexml/commit/8f3c5c176a - -commit f76cfb55d7612f1bb1648112e159646321d2aa2c - Author: Kouhei Sutou - Date: 2018-12-25 11:20:27 +0900 - - [ruby/rexml] Bump version - - https://github.com/ruby/rexml/commit/0f79e71210 - -commit adfc8d6dbadbccef27d6ec78022650840c7604cc - Author: Takashi Kokubun - Date: 2019-08-04 11:05:50 +0900 - - Defer skip to avoid errors on ensure - -commit 7a75baa6e294473f02da512c99f7ef1f76b2d83c - Author: Takashi Kokubun - Date: 2019-08-04 10:49:03 +0900 - - Skip test_race_exception on MJIT for now - - somehow the test fails only on Wercker in CIs triggered by GitHub. - Actually rubyci and ci.rvm.jp also have issues too, though. - -commit a3188f43a812a8c3954391af66ed54352423ef60 - Author: Takashi Kokubun - Date: 2019-08-04 10:08:17 +0900 - - Revert "Revert "Fix dangling path name from fstring"" - - This reverts commit 326c00b6f89e1c86e6fe29ab60da593eb6883a88. - - We also confirmed that test_gced_eval_location fails without the changes: - https://travis-ci.org/ruby/ruby/builds/567417818 - https://rubyci.org/logs/rubyci.s3.amazonaws.com/arch/ruby-master/log/20190804T000003Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/ubuntu1604/ruby-master/log/20190804T003005Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/icc-x64/ruby-master/log/20190804T000007Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable10x/ruby-master/log/20190804T001806Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian9/ruby-master/log/20190804T003005Z.fail.html.gz - -commit 2d189a6721c5e88973a53e385c0fb9eeb55fece9 - Author: David Carlier - Date: 2019-07-10 06:08:31 +0900 - - yaml few build warning fixes - - Closes: https://github.com/ruby/ruby/pull/2283 - -commit b6cfacc85d7607a86cb22e1f8eb00b82860014fe - Author: Dmitry Petrashko - Date: 2019-05-30 06:16:06 +0900 - - Remove dependency on `openssl/conf_api.h` - - None of the functions defined in this header are actually used in Ruby. - Fixes build against boringssl that does not have this file. - Closes: https://github.com/ruby/ruby/pull/2210 - -commit 0f601df22c258c568f0c6f8263903eafa14ae238 - Author: Kenichi Kamiya - Date: 2019-06-24 17:03:49 +0900 - - [Doc] Fix Array#to_h call-seq - - Closes: https://github.com/ruby/ruby/pull/2254 - -commit 84829392f5bb094b2cac117a67d37307ecc3640b - Author: Kenichi Kamiya - Date: 2019-06-24 17:33:30 +0900 - - [Doc] Fix Array#difference call-seq - - Closes: https://github.com/ruby/ruby/pull/2255 - -commit 4173258fd0413c49ef07d54bc9654bba7e497e89 - Author: Semyon Pupkov - Date: 2017-11-13 18:48:29 +0900 - - change call CGI methods from :: to . - - Closes: https://github.com/ruby/ruby/pull/1749 - -commit 8e7df4bbf991b9d605784225db0750bbfe681f23 - Author: Olivier Lacan - Date: 2019-03-20 02:46:27 +0900 - - Use the word heredocs in Here Documents docs - - Two advantages: - - higher relevance of the extremely common word "heredocs" which may - help people find this page when searching for "ruby heredocs" - - the anchor link becomes `#label-Here+Documents+-28heredocs-29`, which is - ugly due to the parentheses but includes the word "heredocs" in the URL to - this section - - If anyone knows a way to prevent RDoc from turning invalid characters into - ugly and meaningless ASCII codes, I'm listening. I don't want to break existing - anchor links but RDoc should really ignore these characters or turn them into - dashes. - - Closes: https://github.com/ruby/ruby/pull/2103 - -commit 93116569145bbff34355e08722c6689487d8b858 - Author: Lars Kanis - Date: 2017-05-12 03:40:57 +0900 - - Better wording for __ENCODING__ - - "locale encoding" is misleading since it doesn't mean Encoding.find("locale") - but the encoding used to interpret the script file. It's therefore better to - call it "script encoding" as in the paragraphs above. - Closes: https://github.com/ruby/ruby/pull/1611 - -commit 636a4fad1617699350ec70d5523a92e8148d5c35 - Author: Will Binns - Date: 2019-06-14 13:18:01 +0900 - - README: Add smart URL for joining mailing list - - This adds a couple of parameters to the mailing list link in the README - so that the subject line and body are automatically populated. The body - is populated with the `subscribe` string so that all an individual has - to do is perform the send action in their mail client. - - Closes: https://github.com/ruby/ruby/pull/2236 - -commit 7614cc5b241144bc47e8062e335fcf15dbf04e51 - Author: Marcus Stollsteimer - Date: 2019-04-21 22:38:10 +0900 - - Fix release post output for tool/format-release - - Different entries should be separated by an empty line. - - Closes: https://github.com/ruby/ruby/pull/2137 - -commit 326c00b6f89e1c86e6fe29ab60da593eb6883a88 - Author: Takashi Kokubun - Date: 2019-08-04 08:38:37 +0900 - - Revert "Fix dangling path name from fstring" - - This reverts commit 5931857281ce45c1c277aa86d1588119ab00a955 temporarily, - leaving `TestEval#test_gced_eval_location` to see the impact for missing - the changes. - - That's because too many CIs are failing for `require` behaviors: - http://rubyci.s3.amazonaws.com/freebsd11zfs/ruby-master/log/20190803T063004Z.fail.html.gz - http://rubyci.s3.amazonaws.com/unstable10x/ruby-master/log/20190803T051806Z.fail.html.gz - http://rubyci.s3.amazonaws.com/unstable11x/ruby-master/log/20190803T052406Z.fail.html.gz - http://rubyci.s3.amazonaws.com/unstable10s/ruby-master/log/20190803T111909Z.fail.html.gz - http://rubyci.s3.amazonaws.com/unstable11s/ruby-master/log/20190803T062506Z.fail.html.gz - http://rubyci.s3.amazonaws.com/solaris11s-sunc/ruby-master/log/20190803T052505Z.fail.html.gz - https://app.wercker.com/ruby/ruby/runs/mjit-test1/5d4512c921ca08000857936a?step=5d451305c2809c0008a3da76 - https://app.wercker.com/ruby/ruby/runs/mjit-test2/5d4512c921ca080008579371?step=5d4513000421020007ca122d - http://ci.rvm.jp/results/trunk_gcc4@silicon-docker/2177591 - http://ci.rvm.jp/results/trunk_gcc6@silicon-docker/2177596 - http://ci.rvm.jp/results/trunk_clang_60@silicon-docker/2178802 - http://ci.rvm.jp/results/trunk-theap-asserts@silicon-docker/2177555 - http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2178747 - - Mostly `TestRequire#test_race_exception` failures, but in ci.rvm.jp - `require` inside rubyspec hangs very often. - -commit 7adc8c79eaf40521a290ecdc7aa0a8490a95f87a - Author: Nobuyoshi Nakada - Date: 2019-08-04 08:15:05 +0900 - - [DOC] "nmake check" is preferable to "nmake exam" now [ci skip] - - [Feature #14187] - -commit 9b38c845508a4184882580abb3b6cc4fcd1dd57f - Author: Nobuyoshi Nakada - Date: 2019-08-04 08:07:06 +0900 - - [DOC] updated about icons in win32/README.win32 [ci skip] - - [Bug #13348] - -commit 586e23c97de57d0d1779b957806d4188364df727 - Author: git - Date: 2019-08-04 07:15:25 +0900 - - * 2019-08-04 - -commit 9733b47eb80699e04a28dfee6fae727bfb27bc41 - Author: Nobuyoshi Nakada - Date: 2019-08-04 07:13:31 +0900 - - [DOC] "nmake check" is preferable to "nmake exam" now [ci skip] - - [Feature #14187] - -commit 6a1458caf2e4d15215e094cc4863e3a6f2648f6b - Author: Nobuyoshi Nakada - Date: 2019-08-04 07:12:16 +0900 - - [DOC] Mark up path names to show a backslash [ci skip] - -commit d569d721f978d2e0b5b331b3c3aa69c89f94d70b - Author: Hiroshi SHIBATA - Date: 2019-08-03 22:17:45 +0900 - - Move assert_ruby_status and assert_throw to CoreAssertions for default gems. - -commit 954223ebd4229d4ca18ee5b78249c4330473910e - Author: Nobuyoshi Nakada - Date: 2019-08-03 14:56:41 +0900 - - [DOC] mentioned minimum versions of tools [ci skip] - -commit 6623cde731c7624e26e0e1e1e51eada911783629 - Author: Nobuyoshi Nakada - Date: 2019-08-03 14:56:07 +0900 - - Added more attributes [ci skip] - -commit 4d75346187557ae59736ca5739bfae312c285e08 - Author: Nobuyoshi Nakada - Date: 2019-08-03 14:20:36 +0900 - - Refine error message - - Highlight failed command and suggest installing the command. - [Bug #16042] - -commit ec0d742dd744b13e89d82ffc88d193f165942acf - Author: Nobuyoshi Nakada - Date: 2019-08-03 14:06:56 +0900 - - Suppress warnings against locations in eval - -commit cee394eb228efa4160501ef02a1cd6a696909972 - Author: git - Date: 2019-08-03 13:51:23 +0900 - - * expand tabs. - -commit 5931857281ce45c1c277aa86d1588119ab00a955 - Author: Nobuyoshi Nakada - Date: 2019-08-03 13:41:55 +0900 - - Fix dangling path name from fstring - - * parse.y (yycompile): make sure in advance that the `__FILE__` - object shares a fstring, to get rid of dangling path name. - Fixed up 53e9908d8afc7f03109b0aafd1698ab35f512b05. [Bug #16041] - - * vm_eval.c (eval_make_iseq): ditto. - -commit 688a59f8ac984a2f1d4d53005dbe0679dcd59ac3 - Author: Nobuyoshi Nakada - Date: 2019-08-03 11:31:40 +0900 - - Show the location of `eval` which uses `__FILE__`/`__LINE__` - -commit fb96bea7ed8ed6765fda2a1db90a2cfce14e59b7 - Author: git - Date: 2019-08-03 10:25:20 +0900 - - * expand tabs. - -commit 4ea5c5610aeadecf78fdd2b7d6faad8574953620 - Author: Nobuyoshi Nakada - Date: 2019-08-03 08:37:08 +0900 - - Predefine some IDs - -commit 0bd1cd677f769ac6128989bf1d021753698fdaac - Author: Hiroshi SHIBATA - Date: 2019-08-01 09:46:32 +0900 - - [bundler/bundler] Remove Bundler.rubygems.config_map because it was deprecated. - - https://github.com/bundler/bundler/commit/5215ae7fa3 - -commit b3b2b55f7b7ab035851176d28ecee4afaa3fe0cc - Author: Hiroshi SHIBATA - Date: 2019-08-01 09:44:46 +0900 - - [bundler/bundler] The keys for RbConfig::CONFIG was String. - - https://github.com/bundler/bundler/commit/ffc5e76335 - -commit aad7443e168880e382680d4c0be1757840b23c18 - Author: Adam Wanninger - Date: 2019-07-09 07:43:42 +0900 - - [bundler/bundler] Point to CoC which contains the contributor covenant - - https://github.com/bundler/bundler/commit/a94f74682e - -commit 220f6aa01c4b2552af0bdcbbc46518c1118ee91f - Author: Hiroshi SHIBATA - Date: 2019-08-03 07:23:58 +0900 - - Explicitly ignored GEMRC environmental variable. - -commit 4c72ca195d17fdbcb656e67c1c6ee7f591d306f2 - Author: Hiroshi SHIBATA - Date: 2019-08-03 07:09:59 +0900 - - Fixed up 365ee22d73ec73c119a842de271504e04bed6f45 - -commit 01d141938cfdc8cb0d370c659d976af7ed9623ae - Author: Hiroshi SHIBATA - Date: 2019-08-03 06:29:36 +0900 - - Fixed the broken example with ruby core structure. - -commit 7ed1fc527e029f47c4ed17136fb1492c9fbdfdc9 - Author: David Rodríguez - Date: 2019-08-01 06:56:05 +0900 - - [bundler/bundler] Bump rubocop to 0.74.0 - - And re-enable exclusion because the bug why we added them has been fixed. - See https://github.com/rubocop-hq/rubocop/issues/6861. - - https://github.com/bundler/bundler/commit/bda63fcffc - -commit dab944e6ca9ed92ce72d1db4834b32e924d87015 - Author: David Rodríguez - Date: 2019-07-25 15:45:39 +0900 - - [bundler/bundler] net-http-persistent 3.1.0 has been released - - https://github.com/bundler/bundler/commit/ffb7d6fa53 - -commit fcb58f65b1ff6204845b47ac810c32ee7a1aafe2 - Author: David Rodríguez - Date: 2019-06-26 17:42:44 +0900 - - [bundler/bundler] Adapt to the way my automatiek patch works - - https://github.com/bundler/bundler/commit/b8ee4aec0b - -commit 1e63683795bf782db745dbad7889b2779f0573a5 - Author: David Rodríguez - Date: 2019-06-25 23:55:35 +0900 - - [bundler/bundler] Bump automatiek to 0.2.0 - - https://github.com/bundler/bundler/commit/cd1abf8b3f - -commit 97f3ceeaa5c66ad6a6a5f3f37339c4b1cbe71677 - Author: David Rodríguez - Date: 2019-06-11 19:48:34 +0900 - - [bundler/bundler] Bump net-http-persistent to 3.0.1 - - * Adds an extra artifice task to vendorize new `connection_pool` - dependency. - - * Cherry-pick's needed Windows fix not yet merged into master branch of - `net-http-persistent`. - - * Update bundler usages to be compatible with the new version, and fix - unit specs. - - https://github.com/bundler/bundler/commit/0575baa6bb - -commit 2b7e39f364d76c74af6e04aa3d96888a6aeef1cd - Author: David Rodríguez - Date: 2019-07-24 00:32:33 +0900 - - [bundler/bundler] Always set `cache_all` via config during tests - - So that the behavior is the same regardless of the tested bundler - version. - - https://github.com/bundler/bundler/commit/664549427a - -commit 267a72be800da0ec47f441d7d8210dc6aec137af - Author: David Rodríguez - Date: 2019-07-24 02:19:31 +0900 - - [bundler/bundler] Enable `Style/UnneededInterpolation` cop - - https://github.com/bundler/bundler/commit/4c6a3c3cf7 - -commit e84e63230bd024b652451cb7d1a44b9d9e0449ae - Author: David Rodríguez - Date: 2019-03-29 00:46:13 +0900 - - [bundler/bundler] Check for straneous quotes - - And use single quotes consistently. - - https://github.com/bundler/bundler/commit/8b9fbbb2df - -commit 4dea1356c3ea97e9d0e98b1fbca69b01a6df2647 - Author: Samuel Giddins - Date: 2018-11-25 22:25:17 +0900 - - [bundler/bundler] [CurrentRuby] Say we are ruby? when the generic local platform is Gem::Platform::RUBY - - This allows us to always say we're ruby? when force_ruby_platform is - set, and fixes using gemspec & force_ruby_platform on windows. - - https://github.com/bundler/bundler/commit/3cb89b7e5c - -commit 6fb73e6043015fcd999a2c4b9a52b9bb1d9c4173 - Author: David Rodríguez - Date: 2019-03-22 00:32:35 +0900 - - [bundler/bundler] Fully remove compatibility guard - - https://github.com/bundler/bundler/commit/2a7a5daba0 - -commit 452516f50f80e3bbb6dc9911dcdb133a2e16c170 - Author: David Rodríguez - Date: 2019-07-08 22:32:18 +0900 - - [bundler/bundler] Remove development dependencies from gemspec - - And refactor development setup. - - https://github.com/bundler/bundler/commit/f288806d02 - -commit 7255f55dba83aacbde76184aff965162e339ba2a - Author: David Rodríguez - Date: 2019-04-13 02:05:26 +0900 - - [bundler/bundler] RUBY_ENGINE should always be defined after 1.8.7 - - https://github.com/bundler/bundler/commit/d6c9196d18 - -commit d2d6d5c988b66cb110dbb07f92e08f231a31d6bc - Author: Scott Tesler - Date: 2019-07-30 05:15:37 +0900 - - [bundler/bundler] Fix typo in binstubs documentation - https://github.com/bundler/bundler/commit/88dbfa18b4 - -commit 56229c4e5d9856abdd39a51a5875a7d4d0076ce0 - Author: David Rodríguez - Date: 2019-07-26 18:39:41 +0900 - - [bundler/bundler] Fix `git` options examples - - https://github.com/bundler/bundler/commit/bda0fa02c4 - -commit 6015bbeeaf897c75065d0b18e119e2614e1d1f44 - Author: David Rodríguez - Date: 2019-07-25 17:43:36 +0900 - - [bundler/bundler] Fix incorrect sectioning in `gemfile` man page - - https://github.com/bundler/bundler/commit/428f53bef0 - -commit d4b1804b11310a3c2303367dcd4ec73aae419ee1 - Author: Hiroshi SHIBATA - Date: 2019-07-19 17:23:42 +0900 - - [bundler/bundler] Removed the environmental variables that are BUNDLE_USER_*. - - It's affect with rspec examples and broke them. - - https://github.com/bundler/bundler/commit/355a922073 - -commit b855e33b655d9c0cfa07aab8e8622d68f0402ea0 - Author: David Rodríguez - Date: 2019-07-24 20:00:46 +0900 - - [bundler/bundler] Add exclamation mark to method - - To indicate that it can raise. - - Co-authored-by: Guillermo Guerrero - Co-authored-by: David Rodríguez - - https://github.com/bundler/bundler/commit/584e841624 - -commit 1fbd6a1fe0e298aef006cf1aa41e6e6f1ce7c7c5 - Author: David Rodríguez - Date: 2019-07-24 20:00:30 +0900 - - [bundler/bundler] Move `strict` to an attribute - - Co-authored-by: Guillermo Guerrero - Co-authored-by: David Rodríguez - - https://github.com/bundler/bundler/commit/7b68d86bdd - -commit 1069139a339a6a7d0d6169c634e572659f749ea9 - Author: David Rodríguez - Date: 2019-07-24 23:09:35 +0900 - - [bundler/bundler] Extract some methods - - Co-authored-by: Guillermo Guerrero - Co-authored-by: David Rodríguez - - https://github.com/bundler/bundler/commit/027aba0cff - -commit ee7ec87007862118cdf13815808999e73b9b98d3 - Author: David Rodríguez - Date: 2019-07-24 23:03:46 +0900 - - [bundler/bundler] Unfold message to single line for readability - - https://github.com/bundler/bundler/commit/d845a213ca - -commit e1ccaa8782fa722b842ba59c955a212697afde9c - Author: Guillermo Guerrero - Date: 2019-04-13 01:59:35 +0900 - - [bundler/bundler] Extract a `print_gems` method - - https://github.com/bundler/bundler/commit/0d8c8d207e - -commit 759930dd11aedfd563d11bdef4b0a562b0f00ad9 - Author: Guillermo Guerrero - Date: 2019-04-13 01:52:52 +0900 - - [bundler/bundler] Less complexity - - https://github.com/bundler/bundler/commit/be9d6e7cfc - -commit fd3411c73f35e3e8c0e1cd72eea434ca6e8d1744 - Author: David Rodríguez - Date: 2019-07-24 20:38:47 +0900 - - [bundler/bundler] Move more locals to attributes - - Co-authored-by: Guillermo Guerrero - Co-authored-by: David Rodríguez - - https://github.com/bundler/bundler/commit/4335df3e4c - -commit a42478502c923978a0cf14e7e00efbc0149b07a9 - Author: David Rodríguez - Date: 2019-07-24 20:34:52 +0900 - - [bundler/bundler] Move `any?` logic to the attribute - - It's the only usage of the `options_include_groups` attribute and its - name suggests a boolean, so it fits better now. - - Co-authored-by: Guillermo Guerrero - Co-authored-by: David Rodríguez - - https://github.com/bundler/bundler/commit/53c0fae760 - -commit 4e76aef280f8440a9e499a05a2d74e6f2ba7cdd6 - Author: David Rodríguez - Date: 2019-07-24 20:30:56 +0900 - - [bundler/bundler] Move `options_include_groups` to an attribute - - Co-authored-by: Guillermo Guerrero - Co-authored-by: David Rodríguez - - https://github.com/bundler/bundler/commit/832fb900f0 - -commit e33dd659d43ec2302648c04fcec208b1c0f98ed9 - Author: Guillermo Guerrero - Date: 2019-04-13 01:32:42 +0900 - - [bundler/bundler] Move duplicated code to `before` blocks - - https://github.com/bundler/bundler/commit/69bee117fb - -commit c4a2a9a38165e6a4b54798d5d8edb6297275efaa - Author: David Rodríguez - Date: 2019-07-24 00:33:27 +0900 - - [bundler/bundler] Remove now unused logic - - https://github.com/bundler/bundler/commit/5b285685a4 - -commit 322d4fe98dd5db50ed4088dc9966dfc8813d6672 - Author: David Rodríguez - Date: 2019-07-24 02:03:19 +0900 - - [bundler/bundler] Remove unnecessary indirections - - These specs are only run on bundler 2, so the compatibility method is - not needed. - - https://github.com/bundler/bundler/commit/6cb28e3aeb - -commit 30d10be036c2f57f6ba4d605f73c2ab9a07075b8 - Author: David Rodríguez - Date: 2019-07-23 23:23:45 +0900 - - [bundler/bundler] Prefer feature flag to hardcoded check - - https://github.com/bundler/bundler/commit/8c83921d08 - -commit 76d205c84041d8d186b632ec5f8f479be4e730aa - Author: David Rodríguez - Date: 2019-07-23 23:23:26 +0900 - - [bundler/bundler] Restore `cache_all` flag removal - - https://github.com/bundler/bundler/commit/04a04719f0 - -commit 640dbdd155625cfbd30c3a00c702dd04ec66c8bc - Author: David Rodríguez - Date: 2019-07-24 02:48:20 +0900 - - [bundler/bundler] Better info about spec exclusions - - https://github.com/bundler/bundler/commit/1ee77d9c55 - -commit 51aaed128a7949fffdc5847ee1949e4b2acc86ff - Author: David Rodríguez - Date: 2019-07-23 20:56:01 +0900 - - [bundler/bundler] Skip specs using `Process.fork` on Windows - - https://github.com/bundler/bundler/commit/ebcb25a3c3 - -commit d7487d6c0845f89b0d640d1e22a4a10d1ffdb1a3 - Author: David Rodríguez - Date: 2019-07-23 20:11:33 +0900 - - [bundler/bundler] Try make some specs platform independent - - https://github.com/bundler/bundler/commit/b5900e57a4 - -commit 9d82962af3bc1c308ae0c2530b9fb162da825da2 - Author: David Rodríguez - Date: 2019-07-23 20:01:33 +0900 - - [bundler/bundler] Check for generic lockfiles - - https://github.com/bundler/bundler/commit/344a881592 - -commit bb50f87b69049d80117d40e194e91cb650a94f64 - Author: David Rodríguez - Date: 2019-07-23 22:25:28 +0900 - - [bundler/bundler] Add workaround from old rubygems - - In these versions, the `approximate_recommendation` method doesn't - include the prerelease logic. - - https://github.com/bundler/bundler/commit/caf13e9e4f - -commit cb6abf551ab091760ec2c834ff3718f83efd5426 - Author: David Rodríguez - Date: 2019-07-16 20:34:57 +0900 - - [bundler/bundler] Update error messages to be more precise - - https://github.com/bundler/bundler/commit/9ddeeb1fe1 - -commit f40914e3cf99181ccf69987fa8edded175a1019c - Author: David Rodríguez - Date: 2019-07-16 18:50:56 +0900 - - [bundler/bundler] Remove unnecessary method parameter - - https://github.com/bundler/bundler/commit/72194d1aac - -commit a1c69991a5c618b4002a6222fca8cfe1f4718879 - Author: David Rodríguez - Date: 2019-07-16 18:52:14 +0900 - - [bundler/bundler] Use a consistent requirement in binstub - - https://github.com/bundler/bundler/commit/50ccdb32c2 - -commit bb6b9b49293378cb48510e27a98db152824658cd - Author: David Rodríguez - Date: 2019-07-16 19:42:39 +0900 - - [bundler/bundler] Remove redundant begin-end block - - https://github.com/bundler/bundler/commit/1d017c3f36 - -commit bd0f19f137a952f5f8b838537f473385b204ed78 - Author: David Rodríguez - Date: 2019-07-16 18:31:38 +0900 - - [bundler/bundler] Don't need 1.8 compatibility - - https://github.com/bundler/bundler/commit/7ca4d4e83c - -commit 3e10b4a0be0de22fc0871a6fab65139c43c69180 - Author: David Rodríguez - Date: 2019-07-23 20:01:13 +0900 - - [bundler/bundler] Indentation fixes - - https://github.com/bundler/bundler/commit/2a44090cb6 - -commit 3e83fbddfacafd1467bfcae818d595c6e29fca5c - Author: David Rodríguez - Date: 2019-07-23 15:16:17 +0900 - - [bundler/bundler] Add a comment to explain the initial reset - - https://github.com/bundler/bundler/commit/6d0a8f4128 - -commit 55831647fbea0005449f714eec7672fab50cf9d3 - Author: David Rodríguez - Date: 2019-07-23 15:14:02 +0900 - - [bundler/bundler] Move environment reset to the only test needing it - - https://github.com/bundler/bundler/commit/6d3b809695 - -commit 679472454832f4e9b5c72f282b2933c44ef35ffa - Author: David Rodríguez - Date: 2019-07-23 15:15:29 +0900 - - [bundler/bundler] Remove unneeded bundler key - - It sounds like this was mistankenly added in - 4337a499d0108fc3748084934aaed7591b355a26. Then the forgotten MANPATH key - was added in bf5bf106230772934602768bb31a68dc925691f0, but this one - should've been removed I think. - - https://github.com/bundler/bundler/commit/a82ad111e5 - -commit 1b081cdd650964708c700a8051d37bf70e1a3880 - Author: David Rodríguez - Date: 2019-07-23 15:15:15 +0900 - - [bundler/bundler] Improve test to make it more independent from env - - https://github.com/bundler/bundler/commit/038f0d7c37 - -commit 26f651796c06c232b9887d2401f5e998d6dc654f - Author: David Rodríguez - Date: 2019-07-23 01:21:59 +0900 - - [bundler/bundler] Remove unnecessary assignments - - https://github.com/bundler/bundler/commit/3e5d4b2c42 - -commit d6a2e082e647258400d0a9f75ebbd167aaa44848 - Author: MSP-Greg - Date: 2019-07-21 11:59:43 +0900 - - [bundler/bundler] spec/bundler/shared_helpers_spec.rb - fixup after 7248 - - PR 7248 incorrectly changed a path calculation. This reverts. - - After running Azure Pipelines CI in my ruby/ruby fork and checking the 'bundler' jobs, the error was apparent... - - https://github.com/bundler/bundler/commit/811755b413 - -commit 432285c0040d547c24294611725edddb78560ac2 - Author: MSP-Greg - Date: 2019-07-13 22:20:12 +0900 - - [bundler/bundler] fix nested bundle exec's when bundler is a default gem - - https://github.com/bundler/bundler/commit/537c0ab712 - -commit 24062bd323ec9c5311bbf2c5f8f2822f15a38c62 - Author: MSP-Greg - Date: 2019-07-17 01:39:24 +0900 - - [bundler/bundler] build_metadata.rb - fix 'warning: instance variable @git_commit_sha not initialized' - - https://github.com/bundler/bundler/commit/37a1eec8c8 - -commit 7b7caf9b556aa026c732403d7b18910ebc070123 - Author: MSP-Greg - Date: 2019-07-16 08:00:22 +0900 - - [bundler/bundler] dsl_spec.rb - fix for Ruby core - - https://github.com/bundler/bundler/commit/33892e1ed2 - -commit a1549fba833d99590c128444ff5c4ac910b15870 - Author: David Rodríguez - Date: 2019-07-16 03:48:05 +0900 - - [bundler/bundler] Alias `cache` to `package` now - - The additions of the `package` command are not actually backwards - incompatible, so we can do this transition without further care. All - existing specs of `bundle cache` pass when using the `bundle package` - implementation for it. - - https://github.com/bundler/bundler/commit/69497adf90 - -commit 4f5e1b6ebf4a122fe935c55224ce8e9937288582 - Author: David Rodríguez - Date: 2019-07-16 02:17:11 +0900 - - [bundler/bundler] Remove `cache_command_is_package` feature flag - - So that we handle the removal of `bundle cache` just like we'll handle - the removal of `bundle show` and `bundle console`. - - https://github.com/bundler/bundler/commit/ff1a669efb - -commit f73020d493ec2bf7c79fc118f83f328caee701d7 - Author: David Rodríguez - Date: 2019-07-16 02:31:51 +0900 - - [bundler/bundler] Always keep `bundle package --all` option - - Just change the default. The reason to do this is that the deprecation - message talks about the default being changed, not the option being - removed. - - https://github.com/bundler/bundler/commit/eca1757792 - -commit 33ce42dd5dd10cb86258e78010563f86f412ce01 - Author: David Rodríguez - Date: 2019-07-16 02:31:10 +0900 - - [bundler/bundler] Fix incorrect flag usage - - https://github.com/bundler/bundler/commit/4df9edef95 - -commit ad3cba02cfa9140e2318632e6cc40dad4e79f959 - Author: David Rodríguez - Date: 2019-03-30 19:21:54 +0900 - - [bundler/bundler] Remove redundant condition - - This is inside a code branch where the condition is already met. - - https://github.com/bundler/bundler/commit/8cdd6c37e6 - -commit 31541d738924e714e9b580b33eb44608ea248486 - Author: David Rodríguez - Date: 2019-07-11 18:33:03 +0900 - - [bundler/bundler] Drop rubygems 2.5.0 and 2.5.1 support - - https://github.com/bundler/bundler/commit/8ecd722b9f - -commit fc42423b8df652e3f75436200e5bdfbacd167959 - Author: David Rodríguez - Date: 2019-07-11 18:32:03 +0900 - - [bundler/bundler] Correct a rubygems test filter - - It seems to pass under rubygems 2.5.2. - - https://github.com/bundler/bundler/commit/062cd2be7c - -commit f5cd02f362142dcb3211e2e820b414c0eb2b4e2c - Author: David Rodríguez - Date: 2019-07-11 18:31:19 +0900 - - [bundler/bundler] Remove unnecessary test filter - - Since it covers the whole range we support. - - https://github.com/bundler/bundler/commit/c0b9d4e6c6 - -commit a6ce001babc5728cd3c29df91ef29e0e57d4f012 - Author: David Rodríguez - Date: 2019-07-11 18:02:49 +0900 - - [bundler/bundler] Change the refresh spec to not use `stubs_for` - - We plan to incrementally populate this array in rubygems, so that will - break the test because the first time `find_by_name("rack")` is called - will make the `rack` gem available in the array. - - We can test the same thing using some other way, which is more - appropriate anyways, because `Bundler.rubygems.find_name` is only used - inside `bundler` to look for the `bundler` gem itself whereas - `Bundler.rubygems.all_specs` is used in more places. - - https://github.com/bundler/bundler/commit/49c519ef47 - -commit a181df75429a3c3db2eef387f7476b18c3893615 - Author: David Rodríguez - Date: 2019-07-11 18:02:35 +0900 - - [bundler/bundler] No need to make `Gem.refresh` a noop - - The rubygems integration sets up a `post_reset` hook that resets the - specs back to what bundler knows after `Gem::Specification.reset` is - called (which is what `Gem.refresh` calls under the hood). - - https://github.com/bundler/bundler/commit/3810f9945c - -commit f399a2b7964dac890fd08bd78b62fbe8313319ea - Author: David Rodríguez - Date: 2019-03-29 00:45:31 +0900 - - [bundler/bundler] Remove unnecessary line - - It contains a typo, so it can't be needed. - - https://github.com/bundler/bundler/commit/ef38c97fbf - -commit 56fd027aa6cecaa6910ec6b96270299937f124c8 - Author: David Rodríguez - Date: 2019-03-29 00:41:43 +0900 - - [bundler/bundler] Tweak some quality specs to check more files - - https://github.com/bundler/bundler/commit/98023e25de - -commit 812dfa44f0b35b6ee6446417e0e72f04270bdf85 - Author: David Rodríguez - Date: 2019-06-27 20:01:30 +0900 - - [bundler/bundler] Refactor setting the encoding in quality specs - - Instead of setting the encoding globally, set it when reading the files. - - https://github.com/bundler/bundler/commit/e2a5c45e4d - -commit 6cbe818c668c07c0700b1281d629b92a9101c976 - Author: David Rodríguez - Date: 2018-12-07 02:05:01 +0900 - - [bundler/bundler] This seems to pass for me - - https://github.com/bundler/bundler/commit/e31880b1ea - -commit d0c19d1f87afeb9459644f2b348354d19f3285c3 - Author: David Rodríguez - Date: 2019-07-06 00:26:02 +0900 - - [bundler/bundler] Use `tap` for `current_platforms` - - https://github.com/bundler/bundler/commit/78608acf83 - -commit 6e0dc5594ced353aabdb3f118667ca987720e624 - Author: David Rodríguez - Date: 2019-06-20 01:44:44 +0900 - - [bundler/bundler] Remove now unused method - - https://github.com/bundler/bundler/commit/3a2d2f0250 - -commit 6492f23d919589745fc90fd151b1ce7f5478d776 - Author: David Rodríguez - Date: 2019-06-20 00:03:58 +0900 - - [bundler/bundler] Remove now meaningless setting - - https://github.com/bundler/bundler/commit/52c5a0eede - -commit dae6d303d5aa13eeeb482398eb748b3a8f4edcfa - Author: David Rodríguez - Date: 2019-06-20 00:02:55 +0900 - - [bundler/bundler] Remove now meaningless warning - - https://github.com/bundler/bundler/commit/00b095b98f - -commit c1ca77281d60e5b81dd4ba0df36f7ea6abf3f92a - Author: David Rodríguez - Date: 2019-06-20 00:01:36 +0900 - - [bundler/bundler] Add all platforms to lockfile by default - - https://github.com/bundler/bundler/commit/3dc509e645 - -commit d8cd45cb1a459f8e82f055d8c2d335f57962dc31 - Author: David Rodríguez - Date: 2019-06-19 22:49:39 +0900 - - [bundler/bundler] Refactor some specs - - https://github.com/bundler/bundler/commit/785c7af1f3 - -commit ff908983be80f718497e32e60d24ac9b820df52c - Author: David Rodríguez - Date: 2019-06-19 22:31:40 +0900 - - [bundler/bundler] Extract `expanded_platforms` - - https://github.com/bundler/bundler/commit/60d720eb06 - -commit 3af9d8bb671cfdc474110af3f2db24e36954d38d - Author: David Rodríguez - Date: 2019-06-19 22:29:02 +0900 - - [bundler/bundler] Extract `current_platforms` - - https://github.com/bundler/bundler/commit/9f07207d64 - -commit ead2dc0ec998ef0453f99e24971a1d598f7522fe - Author: Samuel Giddins - Date: 2018-11-25 22:23:55 +0900 - - [bundler/bundler] [GemHelpers] Remove the special code path for ruby platform being its own generic - - https://github.com/bundler/bundler/commit/3b9abc8932 - -commit cef81eb8ccb38deaf5d0bd3c5d6c5fdbcc920d38 - Author: David Rodríguez - Date: 2019-06-25 23:50:20 +0900 - - [bundler/bundler] Make some specs more explicit - - https://github.com/bundler/bundler/commit/5e08e849ec - -commit b2baf6bb0223bb52f9e5f861f860c61c3b6a5df1 - Author: David Rodríguez - Date: 2019-07-08 19:58:24 +0900 - - [bundler/bundler] Remove unnecessary begin-end block - - And freeze the resulting hash to appease rubocop. - - https://github.com/bundler/bundler/commit/f38ebff92f - -commit f8c03b24ca6bb7e891a2303bd7c3d6094f3bd34c - Author: David Rodríguez - Date: 2019-07-05 20:21:53 +0900 - - [bundler/bundler] Bump rubocop to 0.72.0 - - https://github.com/bundler/bundler/commit/babbc112c6 - -commit 0dad89c0fed944b3a4cb531a3ecb75586c40b057 - Author: David Rodríguez - Date: 2019-03-28 02:22:09 +0900 - - [bundler/bundler] Fix typos - - https://github.com/bundler/bundler/commit/1bd9660780 - -commit 8d9fc8466f639eb2740ac406947a047505fcdea6 - Author: David Rodríguez - Date: 2019-07-05 05:14:19 +0900 - - [bundler/bundler] Reuse `lockfile` spec helper - - https://github.com/bundler/bundler/commit/e6a03f1102 - -commit 2f1d52c266eae479576aa2accf6e13c8aa18e264 - Author: David Rodríguez - Date: 2019-05-25 01:57:46 +0900 - - [bundler/bundler] Remove unused filter - - https://github.com/bundler/bundler/commit/102d6229d4 - -commit aae244569b426367426b83ef3272810282f48ee5 - Author: David Rodríguez - Date: 2018-09-26 03:36:56 +0900 - - [bundler/bundler] Reuse `gemfile` spec helper - - https://github.com/bundler/bundler/commit/22de94d3b4 - -commit 05c3b7c8a9238186c4073f5ebb8c5ce6da7495f2 - Author: David Rodríguez - Date: 2019-04-27 02:02:19 +0900 - - [bundler/bundler] More specific assertion - - 1.0.0 is such a common output, and it was hiding a crash in the test. - - https://github.com/bundler/bundler/commit/c688337e24 - -commit 13e5bf3454c1b13fdbb0c583fe68a73238cdffa2 - Author: David Rodríguez - Date: 2019-04-27 02:02:03 +0900 - - [bundler/bundler] Remove redundant assertion - - https://github.com/bundler/bundler/commit/7ac854dea1 - -commit 2c262d137c4f679ad1b6305d747e4d116b7c6959 - Author: David Rodríguez - Date: 2019-04-27 00:09:06 +0900 - - [bundler/bundler] Make spec easier to debug - - https://github.com/bundler/bundler/commit/156629291e - -commit 81a84076c21e89d9e0e1df1b4cea8bf2047b960d - Author: David Rodríguez - Date: 2019-06-21 00:45:12 +0900 - - [bundler/bundler] Don't persist the cache_all_platforms setting - - We only want it temporarily during the duration of the cache saving. - - https://github.com/bundler/bundler/commit/1e9818c0da - -commit 82bf064375361f3d662389a634ef0541a0a1fc3b - Author: Samuel Giddins - Date: 2017-10-21 04:36:52 +0900 - - [bundler/bundler] [Package] Ensure uninstallable gems are _never_ installed - - https://github.com/bundler/bundler/commit/899aeeebb0 - -commit 215d846ea59ef0a20558ac7056f35998e9dc053e - Author: Samuel Giddins - Date: 2017-10-21 04:24:48 +0900 - - [bundler/bundler] [Package] Dont always update on --all-platforms - - https://github.com/bundler/bundler/commit/723611f6ee - -commit d761a0f6ffd443b3440ac5144edcdd8054db9c7c - Author: Samuel Giddins - Date: 2017-10-21 04:19:32 +0900 - - [bundler/bundler] [Package] Always resolve remotely for --all-platforms - - https://github.com/bundler/bundler/commit/e45d2272ea - -commit 2ccb3db5fbd642f7e70c38aca946b2e010ce338b - Author: David Rodríguez - Date: 2018-09-06 07:08:46 +0900 - - [bundler/bundler] Add missing mock - - I'm not sure this test is useful but since it's there, it should be - complete. - - https://github.com/bundler/bundler/commit/3e350089db - -commit 5a56f4a541a07bb8eb600078236727e6837082e3 - Author: David Rodríguez - Date: 2018-11-21 19:18:10 +0900 - - [bundler/bundler] Remove unnecessary `order_matters` param - - https://github.com/bundler/bundler/commit/0b40b5b784 - -commit a375a4518f95dbd8f6c32840041d2847c79c3e98 - Author: Ivo Wever - Date: 2019-07-03 18:33:42 +0900 - - [bundler/bundler] Correct default cache path - - The default cache path is `vendor/cache`, not `vendor/bundle`. - https://github.com/bundler/bundler/commit/49256bb3d2 - -commit e6dc7b5b5b8e73f01b24d86a9c7b6026ae012b76 - Author: David Rodríguez - Date: 2019-06-28 18:06:03 +0900 - - [bundler/bundler] Improve spec to be more realistic - - https://github.com/bundler/bundler/commit/ca96316b97 - -commit 4b1395ab4ae7b6b9e22362ccb08d103bdec744f4 - Author: David Rodríguez - Date: 2019-04-10 18:58:30 +0900 - - [bundler/bundler] Clearer MissingRevision git errors - - https://github.com/bundler/bundler/commit/b47d23edf5 - -commit e405aede09c090c7356bd2986793e0328f498e04 - Author: David Rodríguez - Date: 2019-06-26 23:37:19 +0900 - - [bundler/bundler] Not sure how much this buys us, remove it - - https://github.com/bundler/bundler/commit/f8584fb864 - -commit ed37de1c8201a00eeb40468543313f078469e6af - Author: David Rodríguez - Date: 2019-06-26 23:42:38 +0900 - - [bundler/bundler] Inline `expanded_deps` - - It's now only used once, and doing it like this is consistent with the - previous line. - - https://github.com/bundler/bundler/commit/7d27330fc7 - -commit bdcd1990adbbbdb7baa26ca7a0fd6e56efb05143 - Author: David Rodríguez - Date: 2019-06-26 23:35:49 +0900 - - [bundler/bundler] Generate new gem development dependencies in Gemfile - - https://github.com/bundler/bundler/commit/02177d0e10 - -commit 86757abd250bc84c7eedbd3bd65176b9f979f667 - Author: David Rodríguez - Date: 2019-06-26 23:35:37 +0900 - - [bundler/bundler] Fix local variable name - - https://github.com/bundler/bundler/commit/3df138318f - -commit f2cc018adbcd054977e3e7b2410bd289f530684e - Author: David Rodríguez - Date: 2019-03-20 01:08:17 +0900 - - [bundler/bundler] Reuse `execute_bundle_gem` method - - https://github.com/bundler/bundler/commit/773203ec5a - -commit 27717893020d8d3e1bb8e40f30c1c78f4cb23bde - Author: David Rodríguez - Date: 2019-06-18 21:36:58 +0900 - - [bundler/bundler] Don't re-resolve locked platform specific gems - - https://github.com/bundler/bundler/commit/7da2bf75f5 - -commit 33fdd87227ac90063f8ed08de8cf36c8a257b461 - Author: David Rodríguez - Date: 2019-06-20 19:37:26 +0900 - - [bundler/bundler] Revert "Migrate requires from exe/ to also be relative" - - This reverts commit d9d2bf6d522dd36d1ef2732e87cef8b7cba729fd. - - https://github.com/bundler/bundler/commit/eeb2ff1561 - -commit df011b02384a85de17ae73b0aa20799c0632d18c - Author: David Rodríguez - Date: 2019-06-20 20:27:31 +0900 - - [bundler/bundler] Lock rubocop-performance to 1.4.0 - - https://github.com/bundler/bundler/commit/595dd6af6c - -commit 1a8d9a0d5dbce163fce3bed54265d6e3dad65ee7 - Author: David Rodríguez - Date: 2019-06-20 20:26:23 +0900 - - [bundler/bundler] Bump rubocop to 0.71 - - https://github.com/bundler/bundler/commit/efa69583dd - -commit 72daf37deefd1a798577be9b05bbb9406245ee89 - Author: David Rodríguez - Date: 2019-06-20 19:35:55 +0900 - - [bundler/bundler] Fix a typo on a spec comment - - https://github.com/bundler/bundler/commit/1a853ad6ac - -commit 884f948a90389782c29bab8a0d28f8f2b58286d6 - Author: robuye - Date: 2019-05-02 09:00:21 +0900 - - [bundler/bundler] bundler/inline should always install gems to system path - - As discussed in the P/R, when `BUNDLE_PATH` env is set Bundler should - still install gems to the system path. `GEM_HOME` can be used to provide - different location if needed. - - The test is added to document expected behavior of `bundler/inline`. - - https://github.com/bundler/bundler/commit/ae419fd6f8 - -commit 4089f8df1e985ec9b5347078214646be946229cc - Author: David Rodríguez - Date: 2019-06-17 20:17:54 +0900 - - [bundler/bundler] Use real paths for `bundle clean` - - https://github.com/bundler/bundler/commit/0646f9e286 - -commit e59b57a3a7d7d22baf80754e1ec069cc8cd4d561 - Author: David Rodríguez - Date: 2019-06-13 16:48:23 +0900 - - [bundler/bundler] Fix thread leak in compact index specs - - This spec was not stopping threads after itself. That would cause the - previous spec in the file (that checks that no threads are left behind) - to fail. - - https://github.com/bundler/bundler/commit/81ad85b92d - -commit a12557dbfdb63282b844f35ad0c8804bf182dfbf - Author: Miklos Fazekas - Date: 2016-03-26 19:47:43 +0900 - - [bundler/bundler] Add `required_ruby_version` to gemspec template - - https://github.com/bundler/bundler/commit/f47421f92d - -commit b014a2157f3b43d7ac85b27ad2cc47705487251e - Author: David Rodríguez - Date: 2019-06-17 17:23:47 +0900 - - [bundler/bundler] Factor out gemspec call inside `let` - - https://github.com/bundler/bundler/commit/ae0ac190aa - -commit 10c0271f970d1133685d91e786cf25f7160ffd50 - Author: David Rodríguez - Date: 2019-06-17 17:23:24 +0900 - - [bundler/bundler] Remove duplicated `let`'s - - https://github.com/bundler/bundler/commit/43ffaab796 - -commit cad71f70892f262b6912f4087d3800aa772cb117 - Author: David Rodríguez - Date: 2019-03-20 15:52:08 +0900 - - [bundler/bundler] Migrate git proxy helpers to use Open3 - - https://github.com/bundler/bundler/commit/4a37d66f3f - -commit a685a8643f3897913aa0aeeca3f1392bb9da1cf8 - Author: David Rodríguez - Date: 2019-06-11 18:45:09 +0900 - - [bundler/bundler] Fix `rake release` not prompting for OTP code - - Co-authored-by: Colby Swandale - Co-authored-by: Kevin Deisz - - https://github.com/bundler/bundler/commit/1b2bbc7364 - -commit 51bdc9433b92b60806ac535e291bf3fffd243e47 - Author: David Rodríguez - Date: 2019-05-28 18:41:47 +0900 - - [bundler/bundler] Normalize usages of `Gem::Util` in rubygems integration - - https://github.com/bundler/bundler/commit/b35d7fc74a - -commit 81779e22469d89c38ee653e3de032144af0891f7 - Author: David Rodríguez - Date: 2019-05-28 15:45:27 +0900 - - [bundler/bundler] Use rubygems utility if available - - https://github.com/bundler/bundler/commit/7eccba0e52 - -commit e111f38f34ea6b48446a0c29e142ccf44cfff282 - Author: David Rodríguez - Date: 2019-05-06 02:00:47 +0900 - - [bundler/bundler] Fix file:// handling under Windows - - Windows paths do not start with a slash, so we add an extra slash to - separate the host from the path in file:// urls. Otherwise "D:" is - parsed as the host segment in the URI. - - The path for those URLs now starts with "/", so we ignore that leading - character when using the URI's path. - - This reduces Windows CI spec failures from 429 to 355. - - https://github.com/bundler/bundler/commit/1b7e274cbc - -commit c3ddd47ce7b546530e2241b0ea6a96817977886a - Author: David Rodríguez - Date: 2019-05-07 01:06:21 +0900 - - [bundler/bundler] Normalize file:// handling in specs - - https://github.com/bundler/bundler/commit/5946d62ad0 - -commit d8d5e16305ee071f7cf16980788cabcc44799c2e - Author: David Rodríguez - Date: 2019-05-31 18:03:11 +0900 - - [bundler/bundler] Use a clean gemspec for gem helper specs - - https://github.com/bundler/bundler/commit/f694fe7f67 - -commit 1c070c9c2908736d610773a980a73395f5188cf2 - Author: David Rodríguez - Date: 2019-06-11 18:44:19 +0900 - - [bundler/bundler] Move "on releasing" to a RSpec context - - So we can later add more tests with the same setup. - - https://github.com/bundler/bundler/commit/21b4b6c49c - -commit a27198f64850441688ae77d329eab66049d0f5e5 - Author: David Rodríguez - Date: 2019-06-09 04:41:04 +0900 - - [bundler/bundler] Migrate requires from exe/ to also be relative - - https://github.com/bundler/bundler/commit/d9d2bf6d52 - -commit 9596f432505a8282473b5a011eaaa5de6fa101ef - Author: David Rodríguez - Date: 2019-06-09 04:30:30 +0900 - - [bundler/bundler] Migrate two more requires to be relative - - https://github.com/bundler/bundler/commit/80217bfe0b - -commit c5737a9ae19509de56c04a587756c0b9831cadca - Author: David Rodríguez - Date: 2019-06-09 04:29:44 +0900 - - [bundler/bundler] Migrate thor to use relative requires - - https://github.com/bundler/bundler/commit/ca28a04668 - -commit 1a4bb80cd79dcae1b2be418e70e1f5a5bcd36887 - Author: David Rodríguez - Date: 2019-05-25 03:32:45 +0900 - - [bundler/bundler] Skip specs that need coloring on Windows - - ANSI codes don't work there. - - https://github.com/bundler/bundler/commit/4f05417ca7 - -commit 38df9e18da1bbb4c74b572c51db64745e6bee853 - Author: David Rodríguez - Date: 2019-05-25 03:31:19 +0900 - - [bundler/bundler] Add missing no-color source specs - - For consistency. - - https://github.com/bundler/bundler/commit/279603ab42 - -commit 214e992556bffa1443e024e63385c5c76ac2f15f - Author: David Rodríguez - Date: 2019-05-25 03:30:43 +0900 - - [bundler/bundler] Be explicit about coloring in specs that need that - - https://github.com/bundler/bundler/commit/a4d04506ab - -commit 580e165873c727b9248e1ba7d3ac0af9b121a235 - Author: David Rodríguez - Date: 2019-05-25 03:28:25 +0900 - - [bundler/bundler] Respect color option when instantiating shells - - Thor's base shell will be memoized the first time it is set. So if we - instantiate a no-color shell first, further instantiations of a bundler - shell will be initialized with a no-color shell by default. This is - caused some sources specs to fail, depending on the order they run. - - See for example https://travis-ci.org/bundler/bundler/builds/500328994. - - What we do to fix it is to reset the shell unless no-color is explicitly - specified. That way, further instantiations will rerun thor's internal - logic to choose the default shell. - - https://github.com/bundler/bundler/commit/786b5d9894 - -commit b95756c7a998311a2d4bbee94530c6ad83ab7d06 - Author: David Rodríguez - Date: 2019-05-25 03:27:09 +0900 - - [bundler/bundler] Remove unnecessary condition - - The builtin thor's color shell already checks this before printing, and - if not a tty, prints just the string without added color codes. - - https://github.com/bundler/bundler/commit/4f62611c87 - -commit 4c2255fd5cd83799bd88ca3b8002000df54a5431 - Author: Hiroshi SHIBATA - Date: 2019-05-02 19:24:30 +0900 - - [bundler/bundler] Added Ruby 2.6 to dsl. - - https://github.com/bundler/bundler/commit/1892626858 - -commit c6837638657429034825d5c9e2a29c340898afb8 - Author: Yusuke Endoh - Date: 2019-08-03 07:44:44 +0900 - - Use source_location instead of eval(__FILE__,binding) in Binding#irb - - e9e17cbc051e894dfd27eda5feca2939f65552db (enabling the warning by - default) caused a warning in test-spec: - ``` - /data/chkbuild/tmp/build/20190802T213005Z/ruby/spec/ruby/core/binding/irb_spec.rb - Binding#irb - - creates an IRB session with the binding in scope/data/chkbuild/tmp/build/20190802T213005Z/ruby/spec/ruby/core/binding/fixtures/irb.rb:3: warning: __FILE__ in eval may not return location in binding; use Binding#source_location instead - ``` - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian/ruby-master/log/20190802T213005Z.log.html.gz - - ref: [Bug #4352] - -commit 44ddfec0bd366cd2337fd34847cddedd0a7b6775 - Author: Takashi Kokubun - Date: 2019-08-03 01:07:40 +0900 - - Add missing backslash - -commit 60ac8ad194075d5a2e8ea790c79087460fa7973d - Author: git - Date: 2019-08-03 00:55:56 +0900 - - * 2019-08-03 - -commit 4eb54c49f762031df71addd525f015e5e25ffa0c - Author: Takashi Kokubun - Date: 2019-08-03 00:55:11 +0900 - - Stop using homebrew addon - - to control errors on our own. - -commit 536ba7c81e72c365e92b9db3a80065b89b8b535b - Author: Yusuke Endoh - Date: 2019-08-02 23:29:58 +0900 - - Revert "Remove opt_nil_p test to remove warning for now" - - This reverts commit a1727e43af18c122c4d7adfa603f895fdc8f3df1. - -commit 086ffe72c711179c30a773027e0b4113e908d399 - Author: Yusuke Endoh - Date: 2019-08-02 23:25:38 +0900 - - Revert "Revert "Add a specialized instruction for `.nil?` calls"" - - This reverts commit a0980f2446c0db735b8ffeb37e241370c458a626. - - Retry for macOS Mojave. - -commit e9e17cbc051e894dfd27eda5feca2939f65552db - Author: Yusuke Endoh - Date: 2019-08-02 23:16:02 +0900 - - parse.y: make a warning for __FILE__ in eval by default - - [Bug #4352] - -commit 247b06d40095e3dfe16b94ea88976e39e83e2463 - Author: Takashi Kokubun - Date: 2019-08-02 23:01:54 +0900 - - Revert "Give up `brew update` on Travis" - - This reverts commit e05f397f08e98fb170e3aca885d6028b344e833c. - Failed... https://travis-ci.org/ruby/ruby/jobs/566961111 - - We should talk to Travis people instead... - -commit a1727e43af18c122c4d7adfa603f895fdc8f3df1 - Author: Takashi Kokubun - Date: 2019-08-02 22:46:15 +0900 - - Remove opt_nil_p test to remove warning for now - -commit eb638b75b33c7be30021d1de57f44498c6b5f6d6 - Author: Hiroshi SHIBATA - Date: 2019-07-23 16:09:46 +0900 - - It can be share to use CoreAssertions for default gems. - - ref. https://github.com/ruby/logger/pull/35 - -commit 9921b63ac48ca7c195bc8b9db96eb1f434ce9e8a - Author: Nobuyoshi Nakada - Date: 2019-08-02 19:04:38 +0900 - - Make float_decode_internal mantissa int - -commit 6640eeb6dbcf2c5d721ebd005001f3f43f03ab53 - Author: Nobuyoshi Nakada - Date: 2019-08-02 18:11:05 +0900 - - Deduplicate common code - -commit ee1334189b95cb5e7785e3415b332a7a76879ac3 - Author: Nobuyoshi Nakada - Date: 2019-08-02 17:51:45 +0900 - - Fix uplevel - -commit e03b3b4ae046785278b9188c83b2338f0f550526 - Author: Koichi Sasada - Date: 2019-08-02 14:59:29 +0900 - - add debug_counters to check details. - - add debug_counters to check the Hash object statistics. - -commit a0980f2446c0db735b8ffeb37e241370c458a626 - Author: Yusuke Endoh - Date: 2019-08-02 15:03:34 +0900 - - Revert "Add a specialized instruction for `.nil?` calls" - - This reverts commit 9faef3113fb4331524b81ba73005ba13fa0ef6c6. - - It seemed to cause a failure on macOS Mojave, though I'm unsure how. - https://rubyci.org/logs/rubyci.s3.amazonaws.com/osx1014/ruby-master/log/20190802T034503Z.fail.html.gz - - This tentative revert is to check if the issue is actually caused by the - change or not. - -commit 19006b711d8649b69d6f9dafad073a2f57201dd7 - Author: Nobuyoshi Nakada - Date: 2019-08-02 11:28:24 +0900 - - Expanded f_quo - -commit f9a0492b76956b545c746ab0d3ec0e555e77dfcd - Author: Nobuyoshi Nakada - Date: 2019-08-02 11:25:41 +0900 - - Expanded f_ceil - -commit ffe4a6ebf93166544c4265271f7b8cffa2208af6 - Author: Nobuyoshi Nakada - Date: 2019-08-02 11:22:56 +0900 - - Use RB_INTEGER_TYPE_P - -commit 6de61fb9edf77d69e93cca8e4166b51b07c71c06 - Author: Nobuyoshi Nakada - Date: 2019-08-02 11:19:29 +0900 - - Expanded f_mod - -commit 8ba8ccc3ccdea943acbb12149578edd92e5164d4 - Author: git - Date: 2019-08-02 00:55:03 +0900 - - * 2019-08-02 - -commit ef45a57801a2ae8621b0cde59f11159f89f0a8dc - Author: Jeremy Evans - Date: 2019-08-01 09:03:11 +0900 - - Make attr* methods define public methods if self in caller is not same as receiver - - Previously, attr* methods could be private even if not in the - private section of a class/module block. - - This uses the same approach that ruby started using for define_method - in 1fc33199736f316dd71d0c551edbf514528ddde6. - - Fixes [Bug #4537] - -commit b8e351a1b9a16ce27f53d15051a1d1f83911b8cb - Author: Yusuke Endoh - Date: 2019-08-01 21:09:59 +0900 - - ext/-test-/bug-14834/bug-14384.c: fallback for MAYBE_UNUSED - - __unused__ is unavailable on Sun C. - https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris11s-sunc/ruby-master/log/20190801T112505Z.fail.html.gz - -commit 8b162ce9d1003e4e469d8f48cb9a2076fd45b47c - Author: Nobuyoshi Nakada - Date: 2019-08-01 20:08:22 +0900 - - Fix assertion failure when VM_CHECK_MODE - - Some VM frames (dummy and top pushed by `rb_vm_call_cfunc`) has - iseq but has no pc. - -commit 2eec526053186f05e8b73003d5212c871724a309 - Author: Kazuhiro NISHIYAMA - Date: 2019-08-01 20:34:10 +0900 - - bootstraptest/test_insns.rb: test opt_nil_p - -commit 076f3fcf11a061394d3d5f8c671512df1e983023 - Author: Takashi Kokubun - Date: 2019-08-01 20:19:18 +0900 - - Extend sleep before sending USR1 in TestProcess - - because the test seems to hang there forever: - https://travis-ci.org/ruby/ruby/jobs/566409880 - -commit cb84824481f205d5c057fe2e31776d40a6b06c7c - Author: Takashi Kokubun - Date: 2019-08-01 19:42:48 +0900 - - Add a test for opt_nil_p - -commit 1549fbfda561759879f16e5d7b2451fe9ac03147 - Author: Nobuyoshi Nakada - Date: 2019-08-01 16:40:03 +0900 - - Use predefined idTo_proc - -commit d488464106c0a65c892a8785d577ce8011e6e277 - Author: Nobuyoshi Nakada - Date: 2019-08-01 15:17:52 +0900 - - Use predefined idOr - -commit fd0e3bd2497d4e796b719c7b7154dc3c945f87b1 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-08-01 16:18:45 +0900 - - fix VC 2013 compile error - - It seems the compiler does not support VLAs. - See also: https://ci.appveyor.com/project/ruby/ruby/builds/26392589/job/px6nuiuw4e78weg1 - -commit 3a6f51ee35da5d49973aba8f7d8128a65a9d8c4a - Author: Koichi Sasada - Date: 2019-08-01 16:04:40 +0900 - - introduce ar_hint_t. - - Hash hint for ar_array is 1 byte (unsigned char). This patch introduce - ar_hint_t which represents hint type. - -commit e18e7852536a42434b7b25fa08846fe161290d46 - Author: git - Date: 2019-08-01 16:04:09 +0900 - - * expand tabs. - -commit 19d3c80e8136402a26b52c8da46eee071ec413d6 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-07-31 23:15:56 +0900 - - calc_lineno(): add assertions - - This function has a lot of assumptions. Should make them sure. - -commit 5d33f787169bcc3594d2264726695d58c4a06899 - Author: åœéƒ¨æ˜Œå¹³ - Date: 2019-07-31 23:00:15 +0900 - - fix tracepoint + backtrace SEGV - - PC modification in gc_event_hook_body was careless. There are (so - to say) abnormal iseqs stored in the cfp. We have to check sanity - before we touch the PC. - - This has not been fixed because there was no way to (ab)use the - setup from pure-Ruby. However by using our official C APIs it is - possible to touch such frame(s), resulting in SEGV. - - Fixes [Bug #14834]. - -commit d2f8e03f346424553f3081896c91dd7d6fdf5db0 - Author: git - Date: 2019-08-01 14:27:19 +0900 - - * expand tabs. - -commit f45bb760fb0a751915a9eac5f7dc4075e88e0cfc - Author: Yusuke Endoh - Date: 2019-08-01 14:25:15 +0900 - - signal.c: make signame_prefix a nul-terminated string - - gcc 9.1.0 warns this. - - ``` - signal.c:258:46: warning: '%.*s' directive argument is not a nul-terminated string [-Wformat-overflow=] - 258 | rb_raise(rb_eArgError, "unsupported signal `%.*s%"PRIsVALUE"'", - | ^~~~ - 259 | prefix, signame_prefix, vsig); - | ~~~~~~~~~~~~~~ - signal.c:200:19: note: referenced argument declared here - 200 | static const char signame_prefix[3] = "SIG"; - | ^~~~~~~~~~~~~~ - ``` - https://rubyci.org/logs/rubyci.s3.amazonaws.com/ubuntu/ruby-master/log/20190801T033009Z.log.html.gz - -commit 746386710646f93a5b9e0c408b00408041645091 - Author: Koichi Sasada - Date: 2019-08-01 11:20:37 +0900 - - use internal_id. - - "hash_iter_lev" can be exported by Marshal.dump and it will - introduce inconsistency. To avoid this issue, use internal_id - instead of normal ID. This issue is pointed out by Chikanaga-san. - -commit 67f7e5a224bc31e1625023ce1ed5cfbd54ea1d8f - Author: Kazuhiro NISHIYAMA - Date: 2019-08-01 09:12:08 +0900 - - Compact ensure clause and rename variables to fix alignment - -commit 31ec475ad8ac13b1390ce09f74f577fff13c65b1 - Author: Aaron Patterson - Date: 2019-06-08 01:11:33 +0900 - - Update object.c - - Co-Authored-By: Takashi Kokubun - -commit 714924fd34c025f151aba6833009a5733bf4ccf9 - Author: git - Date: 2019-08-01 08:21:58 +0900 - - * expand tabs. - -commit 9faef3113fb4331524b81ba73005ba13fa0ef6c6 - Author: Aaron Patterson - Date: 2019-06-05 08:29:08 +0900 - - Add a specialized instruction for `.nil?` calls - - This commit adds a specialized instruction for called to `.nil?`. It is - about 27% faster than master in the case where the object is nil or not - nil. In the case where an object implements `nil?`, I think it may be - slightly slower. Here is a benchmark: - - ```ruby - require "benchmark/ips" - - class Niller - def nil?; true; end - end - - not_nil = Object.new - xnil = nil - niller = Niller.new - - Benchmark.ips do |x| - x.report("nil?") { xnil.nil? } - x.report("not nil") { not_nil.nil? } - x.report("niller") { niller.nil? } - end - ``` - - On Ruby master: - - ``` - [aaron@TC ~/g/ruby (master)]$ ./ruby compil.rb - Warming up -------------------------------------- - nil? 429.195k i/100ms - not nil 437.889k i/100ms - niller 437.935k i/100ms - Calculating ------------------------------------- - nil? 20.166M (± 8.1%) i/s - 100.002M in 5.002794s - not nil 20.046M (± 7.6%) i/s - 99.839M in 5.020086s - niller 22.467M (± 6.1%) i/s - 112.111M in 5.013817s - [aaron@TC ~/g/ruby (master)]$ ./ruby compil.rb - Warming up -------------------------------------- - nil? 449.660k i/100ms - not nil 433.836k i/100ms - niller 443.073k i/100ms - Calculating ------------------------------------- - nil? 19.997M (± 8.8%) i/s - 99.375M in 5.020458s - not nil 20.529M (± 7.0%) i/s - 102.385M in 5.020689s - niller 21.796M (± 8.0%) i/s - 108.110M in 5.002300s - [aaron@TC ~/g/ruby (master)]$ ./ruby compil.rb - Warming up -------------------------------------- - nil? 402.119k i/100ms - not nil 438.968k i/100ms - niller 398.226k i/100ms - Calculating ------------------------------------- - nil? 20.050M (±12.2%) i/s - 98.519M in 5.008817s - not nil 20.614M (± 8.0%) i/s - 102.280M in 5.004531s - niller 22.223M (± 8.8%) i/s - 110.309M in 5.013106s - - ``` - - On this branch: - - ``` - [aaron@TC ~/g/ruby (specialized-nilp)]$ ./ruby compil.rb - Warming up -------------------------------------- - nil? 468.371k i/100ms - not nil 456.517k i/100ms - niller 454.981k i/100ms - Calculating ------------------------------------- - nil? 27.849M (± 7.8%) i/s - 138.169M in 5.001730s - not nil 26.417M (± 8.7%) i/s - 131.020M in 5.011674s - niller 21.561M (± 7.5%) i/s - 107.376M in 5.018113s - [aaron@TC ~/g/ruby (specialized-nilp)]$ ./ruby compil.rb - Warming up -------------------------------------- - nil? 477.259k i/100ms - not nil 428.712k i/100ms - niller 446.109k i/100ms - Calculating ------------------------------------- - nil? 28.071M (± 7.3%) i/s - 139.837M in 5.016590s - not nil 25.789M (±12.9%) i/s - 126.470M in 5.011144s - niller 20.002M (±12.2%) i/s - 98.144M in 5.001737s - [aaron@TC ~/g/ruby (specialized-nilp)]$ ./ruby compil.rb - Warming up -------------------------------------- - nil? 467.676k i/100ms - not nil 445.791k i/100ms - niller 415.024k i/100ms - Calculating ------------------------------------- - nil? 26.907M (± 8.0%) i/s - 133.755M in 5.013915s - not nil 25.319M (± 7.9%) i/s - 125.713M in 5.007758s - niller 19.569M (±11.8%) i/s - 96.286M in 5.008533s - ``` - - Co-Authored-By: Ashe Connor - -commit 117241b3c73f8f7f1bcfee34e9d627c41bb19cc9 - Author: Koichi Sasada - Date: 2019-08-01 05:59:04 +0900 - - make inline functions from macros. - -commit bd1052d55da94b5503ff00c10e1cdcc04a6f9608 - Author: Koichi Sasada - Date: 2019-08-01 05:50:58 +0900 - - use hash_ar_table_set() directly - -commit deddc8047647792e27e1b9829bc917ef73504320 - Author: Koichi Sasada - Date: 2019-08-01 05:48:22 +0900 - - HASH_ASSERT() respects HASH_DEBUG - -commit 43d74776a1465095ab6b420809cc278d4f95f7bc - Author: Koichi Sasada - Date: 2019-08-01 05:21:42 +0900 - - check hash_hint is different. - -commit a1a198d03af6b285dbee552da5e40e7c3061e6c9 - Author: Koichi Sasada - Date: 2019-07-31 18:00:33 +0900 - - File.realpath can raise ENOTDIR - -commit 5ad2dfd8dce00f9fb4908adc786f12baaaf2b273 - Author: Aaron Patterson - Date: 2019-08-01 02:34:23 +0900 - - Revert "Let prev EP move" - - This reverts commit e352445863588b90f7af6cdf6c1b6dc432ee33ab. - - This is breaking CI and I'm not sure why yet, so I'll revert for now. - -commit 8d138e9702e814353574cf6092b0929879e110af - Author: git - Date: 2019-08-01 01:43:23 +0900 - - * 2019-08-01 - -commit e352445863588b90f7af6cdf6c1b6dc432ee33ab - Author: Aaron Patterson - Date: 2019-07-02 19:02:11 +0900 - - Let prev EP move - - This commit allows the previous EP pointer to move, then updates its - location - -commit c94cc6d968a7241a487591a9753b171d8081d335 - Author: Nobuyoshi Nakada - Date: 2019-07-31 20:46:01 +0900 - - run single spec [ci skip] - -commit 835fa9e54ac1d3bbee9b816275e7ea28e9dac313 - Author: Yusuke Endoh - Date: 2019-07-31 19:55:16 +0900 - - test/ruby/test_hash.rb: remove a unused vrible - - to suppress a warning - -commit 4562c1309333ab08c2fa5e975ded8524122a2b55 - Author: Yusuke Endoh - Date: 2019-07-31 19:51:58 +0900 - - lib/bundler/shared_helpers.rb: remove require "rubygems" - - Because it causes circular require. - -commit e432f5dafd3ec777e552631a2d3f14887b0562df - Author: Benoit Daloze - Date: 2019-07-31 18:06:54 +0900 - - Split in two spec examples - -commit eab6c534adb381b81291e871cd57c957cf786503 - Author: Benoit Daloze - Date: 2019-07-31 18:04:35 +0900 - - Attempt to fix Hash#rehash spec - -commit 14eede6e530f58bc22fb6d89ecf910eb1cfcf240 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-31 17:45:43 +0900 - - Fix `Leaked thread` - - Sometimes `Leaked thread: Rinda::TestRingServer#test_ring_server_ipv6_multicast` happens - because `Rinda::TupleSpace#start_keeper` runs after stopping `@keeper`. - -commit 40651cf1f567ae728c8d2cc908017c31e1000b6e - Author: Koichi Sasada - Date: 2019-07-31 15:12:57 +0900 - - delete a check on bad assumption. - - If object was modified, but there is a case that - hash values (#hash) are same between before modified - and after modified objects. - -commit 5f95edb7af68ce03732da4d49eee8d6ee87ef544 - Author: Koichi Sasada - Date: 2019-07-31 15:10:16 +0900 - - check SystemStackError - - This recursive iteration test can cause SystemStackError so - check it correctly. - -commit cac44def0b0f0fdcd1aa8cf610e16a5506d2726b - Author: Koichi Sasada - Date: 2019-07-31 15:01:19 +0900 - - backtrace can be nil. - - Surprisingly, on SystemStackError#backtrace can return nil. - -commit efac0a2384ed6cb1572490b36566e2e37509d7df - Author: Koichi Sasada - Date: 2019-07-31 14:53:14 +0900 - - Revert "add debug code" - - This reverts commit e83ec207cd5fda973c41d6629d8504b515522b12. - -commit 06574ad945dcce0bf626b3af020810230b169b56 - Author: Yusuke Endoh - Date: 2019-07-31 14:35:21 +0900 - - test/ruby/test_float.rb: suppress an overflow warning - - ``` - warning: Float 0xf.fp10000000000000... out of range - ``` - -commit e83ec207cd5fda973c41d6629d8504b515522b12 - Author: Koichi Sasada - Date: 2019-07-31 12:46:15 +0900 - - add debug code - -commit 816e5055c90de327d99fe7f1d2cc4cfe86acd887 - Author: Yusuke Endoh - Date: 2019-07-31 11:52:59 +0900 - - test/ruby/test_io.rb (test_binmode_pipe): close all pipes explicitly - - to suppress the leak checker. - -commit 1d02832bcff7ea45604da3a626b7983f9efe484d - Author: Yusuke Endoh - Date: 2019-07-31 11:45:28 +0900 - - test/rdoc/test_rdoc_rubygems_hook.rb: suppress deprecation warning - -commit 823adea954b7d197301867e70c1aae74e4d81eff - Author: Yusuke Endoh - Date: 2019-07-31 11:44:20 +0900 - - test/ruby/test_file_exhaustive.rb: suppress method-redefined warning - -commit 312879693ffa88c0778baba2b6697f6e5f2f6116 - Author: Koichi Sasada - Date: 2019-07-31 11:30:23 +0900 - - move macro to internal.h for documentation. - - 13e84d5c0a changes enum to macro, but the flags usage information - are lost in internal.h. It should be same place with other flags - information. - -commit 4979ba38fa070b4b9480f0da4b7c827e9eb768ab - Author: Yusuke Endoh - Date: 2019-07-31 11:27:59 +0900 - - test/rubygems/test_gem_remote_fetcher.rb: suppress deprecation warnings - -commit 13e84d5c0a53ad013aa0093f179115bcf88417e9 - Author: Nobuyoshi Nakada - Date: 2019-07-31 11:08:05 +0900 - - Moved RHASH_LEV_MASK and turned into a macro - - Get rid of "ISO C restricts enumerator values to range of 'int'" - error. - -commit e315f3a1341f123051b75e589b746132c3510079 - Author: git - Date: 2019-07-31 10:22:47 +0900 - - * expand tabs. - -commit 72825c35b0d8b9d566663de961fddbf4f010fff7 - Author: Koichi Sasada - Date: 2019-01-18 01:53:10 +0900 - - Use 1 byte hint for ar_table [Feature #15602] - - On ar_table, Do not keep a full-length hash value (FLHV, 8 bytes) - but keep a 1 byte hint from a FLHV (lowest byte of FLHV). - An ar_table only contains at least 8 entries, so hints consumes - 8 bytes at most. We can store hints in RHash::ar_hint. - - On 32bit CPU, we use 4 entries ar_table. - - The advantages: - * We don't need to keep FLHV so ar_table only consumes - 16 bytes (VALUEs of key and value) * 8 entries = 128 bytes. - * We don't need to scan ar_table, but only need to check hints - in many cases. Especially we don't need to access ar_table - if there is no match entries (in many cases). - It will increase memory cache locality. - - The disadvantages: - * This technique can increase `#eql?` time because hints can - conflicts (in theory, it conflicts once in 256 times). - It can introduce incompatibility if there is a object x where - x.eql? returns true even if hash values are different. - I believe we don't need to care such irregular case. - * We need to re-calculate FLHV if we need to switch from ar_table - to st_table (e.g. exceeds 8 entries). - It also can introduce incompatibility, on mutating key objects. - I believe we don't need to care such irregular case too. - - Add new debug counters to measure the performance: - * artable_hint_hit - hint is matched and eql?#=>true - * artable_hint_miss - hint is not matched but eql?#=>false - * artable_hint_notfound - lookup counts - -commit ebd398ac5a4147a1e652d6943c39a29a62f12e66 - Author: Koichi Sasada - Date: 2019-01-16 19:48:30 +0900 - - remove RHash::iter_lev. - - iter_lev is used to detect the hash is iterating or not. - Usually, iter_lev should be very small number (1 or 2) so - `int` is overkill. - - This patch introduce iter_lev in flags (7 bits, FL13 to FL19) - and if iter_lev exceeds this range, save it in hidden attribute. - We can get 1 word in RHash. - - We can't modify frozen objects. Therefore I added new internal API - `rb_ivar_set_internal()` which allows us to set an attribute - even if the target object is frozen - if the name is hidden ivar (the name without `@` prefix). - -commit 4afd8975242917d319cfb20c7ed635b979ad48d5 - Author: Hiroshi SHIBATA - Date: 2019-07-30 22:38:00 +0900 - - File.exists? is deprecated. - -commit 3e4e8dbe20da5de9d26665159626f553318b39a8 - Author: Hiroshi SHIBATA - Date: 2019-07-30 21:40:37 +0900 - - Uninstall ntlm-http and plist for failure of osx test. - - It contains too old configuration that is autorequire. It will be - removed at the RubyGems 3.1.0. - -commit 77c0e23b0c28f543e1fb4fbf20cae216be0398f9 - Author: Hiroshi SHIBATA - Date: 2019-07-28 10:59:07 +0900 - - [rubygems/rubygems] Partly reverted be962ca0c411f3b4bcfebfb6e714c78cbad12775 - - * `Gem::ConfigMap` is still used by Bundler. - * `Gem::RubyGemsVersion` is also still referred by the old gems. - - https://github.com/rubygems/rubygems/commit/249c3ff44f - -commit 2a81d3a26a1b9512efb394ec87f73463496d830d - Author: Hiroshi SHIBATA - Date: 2019-07-27 16:45:45 +0900 - - [rubygems/rubygems] Skip integration test for rake package task. - - https://github.com/rubygems/rubygems/commit/ca8afc01a3 - -commit ab8d9a53250acfab04bed322c9c9b342d95195fb - Author: bronzdoc - Date: 2019-07-28 23:37:02 +0900 - - [rubygems/rubygems] Initialize '@ran_rake' correctly, so we don't have to set it up later and cause confusion - - https://github.com/rubygems/rubygems/commit/6ec3ba983c - -commit 5824981d98a61b071c216749c7dcdd40fdf61673 - Author: bronzdoc - Date: 2019-07-28 23:06:01 +0900 - - [rubygems/rubygems] Remove extension 'double pipe equals' assignment since is not needed anymore - - https://github.com/rubygems/rubygems/commit/930de86a24 - -commit b73ad4999a1182fe5f06501f81cb58b44ae7e9c2 - Author: bronzdoc - Date: 2019-07-28 23:03:01 +0900 - - [rubygems/rubygems] Move 'build_for' to handle extension type before the extension is used - - https://github.com/rubygems/rubygems/commit/2a32c5ef0a - -commit 9dc0f39de556c384783fb112d0561c0df391dcc4 - Author: bronzdoc - Date: 2019-07-28 22:58:03 +0900 - - [rubygems/rubygems] Do not pass +build_dir+ argument to build_error - - https://github.com/rubygems/rubygems/commit/107fea3432 - -commit d97fc48e92dbee041a476f7dca65f3d466c8ca91 - Author: bronzdoc - Date: 2019-07-28 22:50:11 +0900 - - [rubygems/rubygems] Remove useless param +build_dir+ - - https://github.com/rubygems/rubygems/commit/0402974149 - -commit a51661d378c26ae5bd4b608de4948887e70bcacc - Author: bronzdoc - Date: 2019-07-10 22:16:57 +0900 - - [rubygems/rubygems] Drop support for 'gem env packageversion' - - https://github.com/rubygems/rubygems/commit/be962ca0c4 - -commit 62e2b2e66f4fefa493c4ac91c121c7484f67b7be - Author: David Rodríguez - Date: 2019-06-27 22:32:21 +0900 - - [rubygems/rubygems] Improve `rake package` test error message - - https://github.com/rubygems/rubygems/commit/be962ca0c4 - -commit 61893ddf75760c35d5c676914cc50c7e4f9a64ae - Author: David Rodríguez - Date: 2019-06-05 00:32:45 +0900 - - [rubygems/rubygems] Get `rake package` tested - - https://github.com/rubygems/rubygems/commit/006cdd4084 - -commit bb6bd7e9855cd17f004fd4ef3300a4c0b529f45f - Author: David Rodríguez - Date: 2019-06-04 17:40:54 +0900 - - [rubygems/rubygems] Generate a licenses.rb file with correct style - - https://github.com/rubygems/rubygems/commit/469fceeb2f - -commit 497efa0ec924b5124309b99a5c5b8f848fc5a632 - Author: David Rodríguez - Date: 2019-06-04 17:40:30 +0900 - - [rubygems/rubygems] Enable `Layout/AlignArray` cop - - https://github.com/rubygems/rubygems/commit/1ea674d8f7 - -commit 0817d95714bc73cef7a4eb6cdfc50a1c5ea4a6c1 - Author: David Rodríguez - Date: 2019-06-04 17:21:14 +0900 - - [rubygems/rubygems] Enable `Layout/EmptyLinesAroundAccessModifier` - - https://github.com/rubygems/rubygems/commit/41b1cebc33 - -commit 3cc814bdf629c457cc3899675c4cb1418594d47e - Author: bronzdoc - Date: 2019-07-26 14:02:46 +0900 - - [rubygems/rubygems] Remove warning: shadowing outer local variable - spec - - https://github.com/rubygems/rubygems/commit/70c5c17a5f - -commit 33025d976865859744535edb63063a102bec73f5 - Author: bronzdoc - Date: 2019-07-26 13:11:37 +0900 - - [rubygems/rubygems] Make error code a constant and remove TODO comment - - https://github.com/rubygems/rubygems/commit/3d6c7c92e4 - -commit a3b784b3a068ddd9a395b8951e9977035eca5066 - Author: Vít Ondruch - Date: 2019-07-22 21:31:10 +0900 - - [rubygems/rubygems] Move default specifications dir definition out of BasicSpecification. - - This was never the right place. The method got there just by evolution, - not by design. Move it within default methods, where it suits better. - - Since this method is presumably used just internally, it should be safe - to deprecate it and remove later. - - https://github.com/rubygems/rubygems/commit/0c0dd9458a - -commit d1806bd8da963c597ccd8c0b63ceac4dbe3ff3ae - Author: Hiroshi SHIBATA - Date: 2019-07-21 10:17:26 +0900 - - [rubygems/rubygems] There is no usage of @orig_env_* variables in test suite. - - https://github.com/rubygems/rubygems/commit/2adef51dc9 - -commit a3c0ea55f8cfd634db6ce623599ea3ad9750f11e - Author: Hiroshi SHIBATA - Date: 2019-07-21 09:58:41 +0900 - - [rubygems/rubygems] Ignore GEMRC variable for test suite. It affects with some test case. - - https://github.com/rubygems/rubygems/commit/4a0ca2583a - -commit 1eaacb1ef538fe5af2fe231bb340fc39fef67547 - Author: bronzdoc - Date: 2019-07-17 09:50:36 +0900 - - [rubygems/rubygems] Use File#open instead of Kernel#open - - https://github.com/rubygems/rubygems/commit/bfb3f67494 - -commit 41dd9f7e67c1d767a7d040cd79f26985e3996821 - Author: bronzdoc - Date: 2019-07-17 09:39:40 +0900 - - [rubygems/rubygems] Deprecate Gem::RemoteFetcher#fetch_size - - https://github.com/rubygems/rubygems/commit/c2049c3276 - -commit a34168f2ac674b2660fa895271faea258389a614 - Author: bronzdoc - Date: 2019-07-17 09:07:07 +0900 - - [rubygems/rubygems] Autorequire was used by old RubyGems, it is neither supported nor functional. - - https://github.com/rubygems/rubygems/commit/cadb66037d - -commit a2f0331c4e1c47425ec6042f41f4f4b1b63e557f - Author: Nobuyoshi Nakada - Date: 2019-07-11 10:24:01 +0900 - - [rubygems/rubygems] Simplify #to_ruby code - - Separate #add_runtime_dependency and #add_development_dependency - availability condition from #specification_version availability, - which is not related to directly. - Also check if the former method is available, instead of comparing - the version. - - https://github.com/rubygems/rubygems/commit/5cccc2b836 - -commit 5947ea31ca7cd6a5aa7969088ef38ff9eb9be2da - Author: Alexander Pakulov - Date: 2019-07-10 11:14:29 +0900 - - [rubygems/rubygems] Missing dependency - - https://github.com/rubygems/rubygems/commit/79b62c233a - -commit 0d596c1ab2013f0db2a374adc71c25ba886ed49b - Author: Alexander Pakulov - Date: 2019-07-10 10:52:54 +0900 - - [rubygems/rubygems] Making Gem::S3URISigner.sign method smaller with helper methods - - https://github.com/rubygems/rubygems/commit/2a96494d91 - -commit 74419711ad548c7f38c247ab1d8d1fbb9087b8ba - Author: Alexander Pakulov - Date: 2019-07-07 05:05:43 +0900 - - [rubygems/rubygems] Use default value for expiration in the method signature - - https://github.com/rubygems/rubygems/commit/1372e50c17 - -commit aa9015dd8430522318714eee0de562ade845ce7c - Author: Alexander Pakulov - Date: 2019-07-05 09:16:25 +0900 - - [rubygems/rubygems] Moving rubygems/request dependencies into ec2_metadata - - https://github.com/rubygems/rubygems/commit/6a1856517f - -commit 4a8c2dd4192517fa030b6585ae82bf925c80516a - Author: Alexander Pakulov - Date: 2019-07-04 08:35:59 +0900 - - [rubygems/rubygems] Extracting sign_s3_url & s3_source_auth into a separate S3URISigner class - - https://github.com/rubygems/rubygems/commit/c30d21ec7a - -commit 1dfe132aa5138a5664b353739fc2ad32d6cd68dd - Author: bronzdoc - Date: 2019-06-30 14:59:31 +0900 - - [rubygems/rubygems] Move TODO comment to an information comment - - https://github.com/rubygems/rubygems/commit/853ecdd417 - -commit 7081185664d438661a312eb3a12adcc84568b07e - Author: bronzdoc - Date: 2019-06-30 14:50:40 +0900 - - [rubygems/rubygems] Remove unused 'raise' from test_case - - https://github.com/rubygems/rubygems/commit/2481efcb37 - -commit eb35124ccac0f3498c4152349f71978ad86ffad5 - Author: bronzdoc - Date: 2019-06-30 14:38:46 +0900 - - [rubygems/rubygems] Remove TODO comment, there's no Gem::Dirs constant - - https://github.com/rubygems/rubygems/commit/4bacf577f1 - -commit 60d3f9ef9f9385f09a52584b74cc04adf48a25d1 - Author: bronzdoc - Date: 2019-06-30 14:23:44 +0900 - - [rubygems/rubygems] Remove useless TODO comment - - https://github.com/rubygems/rubygems/commit/44bc809dc8 - -commit bd78eabcf37f498d41939716cc4cba39bf3e509e - Author: Alexander Pakulov - Date: 2019-06-29 02:21:12 +0900 - - [rubygems/rubygems] Addressing PR comments - - https://github.com/rubygems/rubygems/commit/fb62d3043c - -commit b2a54744f252f18bc5a8b04fca9a2cb18132e1a8 - Author: bronzdoc - Date: 2019-06-27 08:51:22 +0900 - - [rubygems/rubygems] check_version_conflict don't have a 'dep' variable available for use - - https://github.com/rubygems/rubygems/commit/1783cf0fd3 - -commit 56801d4532f55e09ec1947c336934917c04af7b3 - Author: bronzdoc - Date: 2019-06-26 07:42:47 +0900 - - [rubygems/rubygems] Remove misleading comment, no reason to move Gem.host to Gem::Util - - https://github.com/rubygems/rubygems/commit/e12c98aa72 - -commit ff214e92321b2dab169f23e7996500ec8505b59b - Author: bronzdoc - Date: 2019-06-25 10:01:33 +0900 - - [rubygems/rubygems] Remove useless comment in exceptions.rb - - https://github.com/rubygems/rubygems/commit/d7ad696fa2 - -commit 6bd7772361685f861c6917462f9dead6254f2216 - Author: bronzdoc - Date: 2019-06-24 11:08:34 +0900 - - [rubygems/rubygems] Rename Gem::Package.metadata to Gem::Package.raw_spec - - https://github.com/rubygems/rubygems/commit/a76f25dff0 - -commit 38daeded66afb4a7beafa47d82625a4eb40c112b - Author: Alexander Pakulov - Date: 2019-06-25 09:36:31 +0900 - - [rubygems/rubygems] Upgrading S3 source signature to AWS SigV4 - - https://github.com/rubygems/rubygems/commit/f289788ca5 - -commit 688ccc96020258acb4c02a2f8c5ff6e5a0bbc966 - Author: bronzdoc - Date: 2019-06-24 11:03:50 +0900 - - [rubygems/rubygems] Move metadata method to Gem::Package - - https://github.com/rubygems/rubygems/commit/2c9cfcb666 - -commit 8103d46a4d9591ae95f9a3c31619d1b12031cf3c - Author: Daniel Berger - Date: 2019-06-19 21:39:39 +0900 - - [rubygems/rubygems] Add a package attr_reader to Gem::Installer. - - Add some basic specs for the package attr_reader. - - https://github.com/rubygems/rubygems/commit/68af2a0ee3 - -commit 6be927ff4abd9cbcad545d05d8e93810ffa2da9e - Author: bronzdoc - Date: 2019-06-23 22:43:23 +0900 - - [rubygems/rubygems] Remove misleading TODO comment. Can't use @parser.accept since not - every class where this is used has a parser available. i.e lib/rubygems/install_update_options.rb - - https://github.com/rubygems/rubygems/commit/519fd4dcc0 - -commit c421ef11423742b62a22efa8d0df449cb7364491 - Author: bronzdoc - Date: 2019-06-23 14:42:21 +0900 - - [rubygems/rubygems] Move gemcutter utilities code to Gem::Command - - https://github.com/rubygems/rubygems/commit/f296645033 - -commit 5eacb4c52ed52185d78aa1437c0a69ed986a95f6 - Author: bronzdoc - Date: 2019-06-23 07:58:55 +0900 - - [rubygems/rubygems] Remove conflict.rb code that was supposed to be removed in Rubygems 3 - - https://github.com/rubygems/rubygems/commit/6d5f743a89 - -commit a7bce01175762ba763148fe29f5cbadf5d0f6250 - Author: bronzdoc - Date: 2019-06-23 07:41:07 +0900 - - [rubygems/rubygems] Remove unnecessary &&= operator - - https://github.com/rubygems/rubygems/commit/a10b5265d7 - -commit 8b91a6d0a0b8b2f1aaebf9636139f3f933c6f86d - Author: bronzdoc - Date: 2019-06-23 07:39:17 +0900 - - [rubygems/rubygems] Remove unnecessary TODO comment - - https://github.com/rubygems/rubygems/commit/ad7e379f79 - -commit df0b41fc7219f9f4900e117591dd8331dc4a10b0 - Author: David Rodríguez - Date: 2019-06-20 19:16:58 +0900 - - [rubygems/rubygems] Explicitly deprecate `rubyforge_project` - - https://github.com/rubygems/rubygems/commit/9094740109 - -commit 0ca494fc80ad66a299e012378794632b6734ee5c - Author: David Rodríguez - Date: 2019-06-20 20:10:06 +0900 - - [rubygems/rubygems] Silence deprecations when gemdeps is used in tests - - Because we can't control 3rd party gems using deprecated rubygems - behavior, and thus outputting warnings to the screen. - - https://github.com/rubygems/rubygems/commit/6912ebf20a - -commit 05ae2c11fa0464b258d40ff330839a303fbdfd67 - Author: Benoit Daloze - Date: 2019-06-06 22:54:17 +0900 - - [rubygems/rubygems] Do not replace the cache entry if there is already one - - * That way, multiple lookups for the same file always return the same object. - - https://github.com/rubygems/rubygems/commit/50a431b6db - -commit 2453d16f5e44f67a50e1be9b08504a14960610ef - Author: Benoit Daloze - Date: 2019-06-06 22:52:44 +0900 - - [rubygems/rubygems] Synchronize access to the Gem::Specification::LOAD_CACHE Hash - - * It's accessed concurrently, notably when installing a gem with a C extension. - - https://github.com/rubygems/rubygems/commit/543294d7dd - -commit 89bd1df895265a3756928b0ab863f01ecb3abd71 - Author: bronzdoc - Date: 2019-06-05 10:51:08 +0900 - - [rubygems/rubygems] Add a blank line after private to be consistent with the current style - - https://github.com/rubygems/rubygems/commit/df7c0e4223 - -commit 673ef894ac7318a7e078ed43629a6473cfa36067 - Author: bronzdoc - Date: 2019-06-01 06:37:12 +0900 - - [rubygems/rubygems] Return early if filename is empty - - https://github.com/rubygems/rubygems/commit/1b9ab33083 - -commit d74ea2eeb22e9db8a8003804ca48bd84629e72c7 - Author: bronzdoc - Date: 2019-05-31 11:34:44 +0900 - - [rubygems/rubygems] Simplify config_file_name assignment - - https://github.com/rubygems/rubygems/commit/1b3154f905 - -commit 6c5170634af21ff90c2d80604ae5c2808a597a9e - Author: bronzdoc - Date: 2019-05-30 08:34:47 +0900 - - [rubygems/rubygems] Lazy require stringio - - https://github.com/rubygems/rubygems/commit/82f0d4ca69 - -commit 7990d8dc50007b04118cb36c9f200efcddb0295f - Author: bronzdoc - Date: 2019-05-29 14:07:01 +0900 - - [rubygems/rubygems] Set config_file_name to the value of ENV["GEMRC"] if available - - https://github.com/rubygems/rubygems/commit/471239f1fa - -commit 6f60ead7565e02901db63f005008860b65b4a15e - Author: bronzdoc - Date: 2019-05-29 13:41:54 +0900 - - [rubygems/rubygems] Move config_file_name logic to its own method - - https://github.com/rubygems/rubygems/commit/ac4596aace - -commit d64cc80b660c30577945f3cac452ca16db44ce9f - Author: David Rodríguez - Date: 2019-04-29 16:07:16 +0900 - - [rubygems/rubygems] Migrate extension builder to use Open3 - - Since it works on jruby. - - https://github.com/rubygems/rubygems/commit/5229e00df4 - -commit 4e27319c2c0a58ed5ee7276f5f69946161fb6367 - Author: David Rodríguez - Date: 2019-04-29 08:45:18 +0900 - - [rubygems/rubygems] Remove unused method - - https://github.com/rubygems/rubygems/commit/f2dbf242ea - -commit a4c09342a2219a8374240ef8d0ca86abe287f715 - Author: git - Date: 2019-07-31 05:49:04 +0900 - - * expand tabs. - -commit ebc99e026d0ae770b297a93d1f1c1ceeffd13bfc - Author: Jeremy Evans - Date: 2019-07-26 05:47:08 +0900 - - Do not change IO.pipe encodings if encodings explicitly given - - This commit makes it so that if the binmode option is given with - any encoding arguments, the reader and writer IO objects are - not set to binary encoding. - - Fixes [Bug #12989] - -commit d8562ab2a40658db0e6a44ce07cfbe616b9b4078 - Author: Aaron Patterson - Date: 2016-11-29 07:22:12 +0900 - - Passing `binmode: true` to `IO.pipe` should behave like `binmode` - - When passing `binmode: true` to `IO.pipe`, it should behave the same way - as calling `binmode` on each of the file handles. It should set the - file to binmode *and* set the encoding to binary on the file. - - Before this commit, passing `binmode: true` to `IO.pipe` would make - `binmode?` return `true`, but the file's encoding would remain the same - as the default encoding. Passing `binmode: true` should make `binmode?` - return `true` *and* set the encoding to binary. - -commit 369c36ef15c15ddc297e216522cc21599ed6a8e1 - Author: git - Date: 2019-07-31 04:00:46 +0900 - - * 2019-07-31 - -commit a50bc9f3c8e0696ede25305c03eadecc543b863b - Author: Jeremy Evans - Date: 2019-06-21 03:50:22 +0900 - - Do not always taint the result of File#path - - The result should only be tainted if the path given to the method - was tainted. - - The code to always taint the result was added in - a4934a42cbb84b6679912226581c71b435671f55 (svn revision 4892) in - 2003 by matz. However, the change wasn't mentioned in the - commit message, and it may have been committed by accident. - - Skip part of a readline test that uses Reline. Reline in general - would pass the test, but Reline's test mode doesn't raise a - SecurityError if passing a tainted prompt and $SAFE >= 1. This - was hidden earlier because File#path was always returning a - tainted string. - - Fixes [Bug #14485] - -commit ceb9e276b934a8a63299b0b96d2c430c9854de7f - Author: Nobuyoshi Nakada - Date: 2019-07-30 21:15:49 +0900 - - Shorten dependency hint [ci skip] - -commit f3b0ed3f264201137c5841c46ec3ee61d3b14034 - Author: Takashi Kokubun - Date: 2019-07-30 21:15:10 +0900 - - Try giving up `brew update` in Azure as well - - homebrew-cask fetch fails too often. - https://dev.azure.com/rubylang/ruby/_build/results?buildId=1917 - -commit e25088488bbf7b4bf1be19e57ee5fba41ad6f21c - Author: Nobuyoshi Nakada - Date: 2019-07-30 17:23:42 +0900 - - Hint for the dependency update [Bug #16000] - -commit 47144f91a176f263f870e05347d5b426efc40293 - Author: Nobuyoshi Nakada - Date: 2019-07-30 16:44:29 +0900 - - Separate VCS::GIT#upstream - -commit 2e6f777f9efa8ba15dcd1b7c1bb1917e5d31d6f8 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-30 12:44:38 +0900 - - `/o` should not use with instance variable - - for example: - ``` - class C;def initialize(pat);@pat=pat;end;def re;/#{@pat}/o;end;end - C.new('1').re #=> /1/ - C.new('2').re #=> /1/ - ``` - -commit 3805ef7fb57136be46fceb693340981c75eb8ec1 - Author: Nobuyoshi Nakada - Date: 2019-07-30 12:39:28 +0900 - - Separate test_set_lineno_gets - -commit 1da3a31a5f0211db121e0df4ca456838a437537f - Author: Tanaka Akira - Date: 2019-07-30 11:59:54 +0900 - - Use lowercase letters for IPv6 addresses. - - Reported by chucke (Tiago Cardoso). - Patch by jeremyevans0 (Jeremy Evans). - [Bug #14612] - -commit 6eab49a40abcc743ddffcd5fc7103acbea06b215 - Author: Jeremy Evans - Date: 2019-07-30 04:10:15 +0900 - - Revert "Do not always taint the result of File#path" - - This reverts commit 1a759bfe5d554c22571d2e6e4e5998cf06a7b98f. - - This fails on some operating systems. - -commit 177731aadf0d2b2fb293e221728252c73446235a - Author: Jeremy Evans - Date: 2019-07-30 03:03:32 +0900 - - Document that Timezone argument for Time uses dst? if available [ci skip] - -commit 9170646f130be8a66bd1ea84a7bed59a353afd12 - Author: git - Date: 2019-07-30 02:48:25 +0900 - - * 2019-07-30 - -commit 1a759bfe5d554c22571d2e6e4e5998cf06a7b98f - Author: Jeremy Evans - Date: 2019-06-21 03:50:22 +0900 - - Do not always taint the result of File#path - - The result should only be tainted if the path given to the method - was tainted. - - The code to always taint the result was added in - a4934a42cbb84b6679912226581c71b435671f55 (svn revision 4892) in - 2003 by matz. However, the change wasn't mentioned in the - commit message, and it may have been committed by accident. - - Skip part of a readline test that uses Reline. Reline in general - would pass the test, but Reline's test mode doesn't raise a - SecurityError if passing a tainted prompt and $SAFE >= 1. This - was hidden earlier because File#path was always returning a - tainted string. - - Fixes [Bug #14485] - -commit aa97410b0a85cb4ceb956ab943b5eee92a128411 - Author: Jeremy Evans - Date: 2019-07-27 07:14:49 +0900 - - Warn if using return at top-level with an argument - - Fixes [Bug #14062] - -commit c2428b8bf6f3646f575c21d0c89192d79130f7cc - Author: Nobuyoshi Nakada - Date: 2019-07-29 23:04:04 +0900 - - Erase only on tty - -commit e62a60927e5477380db34c381e142bce812232dd - Author: Nobuyoshi Nakada - Date: 2019-07-29 22:56:48 +0900 - - Should match the beginning/end of string - -commit 3ee63cfe881c9ac52a52344ea83131b88875d14c - Author: Nobuyoshi Nakada - Date: 2019-07-29 22:54:58 +0900 - - Match suffix for content type more precisely - - Suffix needs a dot and should match the end of string. - -commit bef398eb87ac14fffc7fe19df9ec6b07ddff17cd - Author: Nobuyoshi Nakada - Date: 2019-07-29 22:51:01 +0900 - - Chomp html suffix literally - - Unescaped dot does not mean a suffix. - -commit 968c7b4398ea82f764ced57f1d38606ef4b0c8e6 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-29 23:03:59 +0900 - - Fix unused variable - -commit a5ea55feb4ef8c482b4639936dd828e0ec27262f - Author: Takashi Kokubun - Date: 2019-07-29 20:57:57 +0900 - - Actually remove travis_wait - - I forgot to amend again... Details are explained in - f6a6b21f09b24955a44622e1767bf5b6630525be - -commit f6a6b21f09b24955a44622e1767bf5b6630525be - Author: Takashi Kokubun - Date: 2019-07-29 20:55:18 +0900 - - `travis_wait` silences any output - - and thus it does not work with `-v` for investigating hangs well. - This seems to be by design: https://github.com/travis-ci/travis-ci/issues/4190 - - Also I simplified a comment about `homebrew.update`. - I had this in-flight change while editing e05f397f08e98fb170e3aca885d6028b344e833c - but forgot to amend this. - -commit e05f397f08e98fb170e3aca885d6028b344e833c - Author: Takashi Kokubun - Date: 2019-07-29 20:25:22 +0900 - - Give up `brew update` on Travis - - No `brew update` causes "Error: Your Homebrew is outdated" like https://travis-ci.org/ruby/ruby/jobs/547485832, - but doing `brew update` is also problematic like https://travis-ci.org/ruby/ruby/jobs/564916879. - - Hoping that the former case is more rare, let's try no `brew update` - again. - -commit 5af28fec2f2f75be70d0c40a92ac9d8b77c8e822 - Author: Takashi Kokubun - Date: 2019-07-29 19:49:19 +0900 - - Resurrect -v to debug osx problems - - Formerly we did f432fd6ea595ef854e15d6dd65ef0ccb24a70456, but it did not - eliminate our problems: https://travis-ci.org/ruby/ruby/jobs/564804923 - -commit 4b4d8a662b4b5125ada85720f26cead3180a3f06 - Author: Takashi Kokubun - Date: 2019-07-29 19:45:25 +0900 - - Stop isolating test_gc_compact on CI - - I think it's been stable these days. - -commit 8c6f1715f03e0322c96d614a42c30bee0b7790eb - Author: Nobuyoshi Nakada - Date: 2019-07-29 13:29:42 +0900 - - Removed unused variables and methods - -commit 630eb04bc4e275b6eaea6fffd35d72ad974f56ed - Author: Nobuyoshi Nakada - Date: 2019-07-29 13:29:35 +0900 - - [ruby/rdoc] Removed unused variable - -commit f811a5e9109ff25e485edfcaddce68fa8f3c5262 - Author: git - Date: 2019-07-29 12:06:13 +0900 - - * 2019-07-29 - -commit 61f0f71e5bd60bd6ea6153034e72b723dddcbe2e - Author: Nobuyoshi Nakada - Date: 2019-07-29 11:38:15 +0900 - - Moved osx_image - - Set osx_image under each configuration, as it decides the OS (and - kernel) version not only Xcode version, and the configuration name - contains the kernel version. - -commit b40589802b6fe6ba5cbb783a43f513cb2e597844 - Author: Nobuyoshi Nakada - Date: 2019-07-28 09:52:07 +0900 - - [reline] Do not compile regexp for each line - -commit a6e32855d079e8f3806d8be8a5f5cf7b3a967133 - Author: Nobuyoshi Nakada - Date: 2019-07-28 09:43:26 +0900 - - [reline] Do not escape and compile regexp for each byte - -commit bce348204f7f4105500397cacb709498e15d9857 - Author: git - Date: 2019-07-28 07:37:35 +0900 - - * 2019-07-28 - -commit 1d1f98d49c9908f4e3928e582d31fd2e9f252f92 - Author: Nobuyoshi Nakada - Date: 2019-07-28 07:33:21 +0900 - - Reuse match data - - * string.c (rb_str_split_m): reuse occupied match data. [Bug #16024] - -commit adf13625aeb86961123911cba85c993417a5762a - Author: Takashi Kokubun - Date: 2019-07-27 23:46:39 +0900 - - Extend travis_wait to 50min for osx - - but shorten --timeout-scale for now to avoid finishing with timeout - if possible. - - timeout: https://travis-ci.org/ruby/ruby/jobs/564370175 - -commit f1b76ea63ce40670071a857f408a4747c571f1e9 - Author: Nobuyoshi Nakada - Date: 2019-07-27 21:54:34 +0900 - - Occupy match data - - * string.c (rb_str_split_m): occupy match data not to be modified - during yielding the block. [Bug #16024] - -commit e3b613a66986306950fc69d426d947a349b9fc8b - Author: Takashi Kokubun - Date: 2019-07-27 21:34:34 +0900 - - Include travis osx timeout - - for failures like https://travis-ci.org/ruby/ruby/jobs/564351066 - -commit 73530a961918c4039a4c44865a89742b7b693a0b - Author: nagachika - Date: 2019-07-27 20:15:53 +0900 - - tool/merger.rb: execute 'svn update' after 'svn ci' to update revision info on working copy. - -commit 7b727e30fcbdf6ae4ac0b0b84f1d32c747d8525a - Author: Benoit Daloze - Date: 2019-07-27 19:57:46 +0900 - - Update to ruby/spec@0526d8f - -commit 5c276e1cc91c5ab2a41fbf7827af2fed914a2bc0 - Author: Benoit Daloze - Date: 2019-07-27 19:40:09 +0900 - - Update to ruby/spec@875a09e - -commit a06301b103371b0b7da8eaca26ba744961769f99 - Author: Jeremy Evans - Date: 2019-06-25 03:13:09 +0900 - - Ignore history file without saving if permissions cannot be changed - - Fixes [Ruby Bug 13907] - -commit f9f02e82166643c1e12f10ac51a0d367ee26ac31 - Author: Charles Oliver Nutter - Date: 2019-07-26 14:37:11 +0900 - - Use JRuby equivalent of RubyVM.compile. - - RubyVM is specific to CRuby and not supported on JRuby. This is - the equivalent operation. - -commit 58bb7f0ca1468629a379c74f637bdb04e1e5dfe7 - Author: Hiroshi SHIBATA - Date: 2019-07-27 12:31:07 +0900 - - Skip the some of commits when sync default gems from upstream. - - * Skip failed to sync commits because it needs to pick manually. - * Skip empty commit. - -commit 012d39c4e658f251f691c8a1dba462c937dbac67 - Author: Hiroshi SHIBATA - Date: 2019-07-27 11:23:47 +0900 - - Added ignore files to sync_default_gems_with_commits and make constant them. - -commit 149e414ed529d27aaeb0543bc133e08c782d8d41 - Author: Nobuyoshi Nakada - Date: 2019-04-23 13:09:34 +0900 - - Initialize DST flag - - * time.c (zone_timelocal): initialize DST flag by asking the - timezone object. [Bug #15988] - -commit 8bccbf3cfea8c1059d40db5b5e61900cf6cf29d3 - Author: Jeremy Evans - Date: 2019-07-27 09:04:13 +0900 - - Add more documentation on #eql?/#hash relationship [ci skip] - - Fixes [Bug #14263] - -commit 6279cf8b2b2a683cb9e4f6422e6f6f9351cff37b - Author: Jeremy Evans - Date: 2019-07-27 08:57:42 +0900 - - Restore documentation for Object#hash [ci skip] - - Object#hash documentation was removed (probably by accident) in - 7b19e6f3fdf8b0238752cb1561dfe42a283f5308. - -commit bd3283338250827e0f9e2fd1785bd1fd4151e66d - Author: Jeremy Evans - Date: 2019-07-27 06:26:59 +0900 - - Document behavior when mixing named captures with parentheses [ci skip] - - Fixes [Bug #13716] - -commit 5fef46ae0dedaab359f55bc3680f4278eb7da98d - Author: Jeremy Evans - Date: 2019-07-27 01:56:53 +0900 - - Test SecureRandom.uuid format - - SecureRandom uses v4 UUIDs, which are completely random except for - 6 bits, 4 in the version field and 2 in the clk_seq_hi_res field. - Add a test that those bit patterns are set correctly for v4 UUIDs, - per RFC 4122 section 4.4. - - Fixes [Bug #13603] - -commit 4f978a1c995ec565f72095415f4d2fb298188fae - Author: git - Date: 2019-07-27 00:18:35 +0900 - - * 2019-07-27 - -commit b1a2eddbfcb883c363bd67858a4dc739f4755775 - Author: Jeremy Evans - Date: 2019-07-27 00:13:34 +0900 - - Document acceptance of negative pid in Process.kill [ci skip] - - Fixes [Bug #13501] - -commit 4b7d7d007fa5a06d237be6f379106feea25fca79 - Author: Jeremy Evans - Date: 2019-06-25 07:07:00 +0900 - - Document and add spec for delegating to constants in Forwardable - - Fixes [Bug #13142] - -commit 21ce8b3298bd3b2c8afa7fd747a958e70b55b708 - Author: Maxime Lapointe - Date: 2019-05-15 00:52:36 +0900 - - [ruby/rdoc] Fix image links in rdoc.css - - Every image in the rdoc.css that use url has the wrong one. They end up pointing to `css/images/zoom.png` instead of `images/zoom.png`. - - Just open this page https://ruby.github.io/rdoc/RDoc/CodeObject.html on chrome and you can see in the console the spam of the failed GET queries. - - This fixes it. - https://github.com/ruby/rdoc/commit/daf36f9894 - -commit 8bb48923761e0e3689ea61fec05b2c36faf9d899 - Author: aycabta - Date: 2019-04-01 17:16:57 +0900 - - [ruby/rdoc] Update jQuery to 3.3.1 - - https://github.com/ruby/rdoc/commit/17df871ee - -commit 3b0f952ec810c08eac01ce2377dfbb252026760b - Author: aycabta - Date: 2019-01-25 23:58:30 +0900 - - [ruby/rdoc] Support nesting text page URL - - RDoc::Servlet#documentation_page replaces "/" in URL with "::" for class - or module but it's also used for the replaced name on text pages. This - causes a bug when text pages are in nesting directory. - - This commit fixes #615. - - https://github.com/ruby/rdoc/commit/d73b915b1e - -commit a86d4eef4b4551a48a5329bb993c3c6c39a1b1f3 - Author: aycabta - Date: 2019-01-22 04:46:46 +0900 - - [ruby/rdoc] Normalization of comment should check language - - RDoc::Text#normalize_comment that is included RDoc::Comment always - remove Ruby style comment indicator "#" and C style comment indicator - "/**/", but should check language and remove only the language's comment - indicator. - - https://github.com/ruby/rdoc/commit/ca68ba1e73 - -commit f7cbbc707413f7e1c71ac1839b0c8834550451e6 - Author: aycabta - Date: 2019-01-20 13:18:22 +0900 - - [ruby/rdoc] ClassModule#add_comment should receive RDoc::Comment - - https://github.com/ruby/rdoc/commit/3fb03bf399 - -commit 95aa60f6cde1ab7bc5cfe33c95c4fd2d2154cd52 - Author: Hiroshi SHIBATA - Date: 2019-07-26 18:14:32 +0900 - - Ignore Merge commit and insufficiency commit for ruby core repository. - -commit 071bf889706d13879c323d61fd2e757ff32c8bda - Author: Hiroshi SHIBATA - Date: 2019-07-26 17:06:54 +0900 - - Improve the commits list for cherry-picking from default gems. - - * Ignore Merge commit from the commit lists before trying to - pick commit. - * Show the commits list at first. - -commit 348c9687bf0454fce787e0d4886fe244831b0a84 - Author: Hiroshi SHIBATA - Date: 2019-07-26 16:45:18 +0900 - - Escape parentheses for syntax highlighting for VScode. - -commit 51f22deadba35ed57b794339fd19889ed0cc8dc8 - Author: Hiroshi SHIBATA - Date: 2019-07-26 16:34:15 +0900 - - Adjust the test directory structure of rdoc. - -commit 82b02c131ee1a87ac1b95443c85c6c8f7b30644f - Author: Koichi Sasada - Date: 2019-07-26 11:37:02 +0900 - - pass to obj_info(). - - obj_info() has a routine to show SPECIAL_CONST_P() objects so - we don't need to check it here. - -commit 300de6aec29b1d220b961a287820a32a89940882 - Author: git - Date: 2019-07-26 10:46:31 +0900 - - * 2019-07-26 - -commit 957a29fc6eb5e4e4ad562d5cafb393f62c9f05db - Author: Nobuyoshi Nakada - Date: 2019-07-26 09:03:34 +0900 - - Bump osx_image on Travis CI to xcode11 - - Also Homebrew is up-to-date and "Updating Homebrew" takes less - than one minute. - -commit 7e33f324e1d1de31a69d16dc9f27ec223523c6e8 - Author: Nobuyoshi Nakada - Date: 2019-07-25 20:57:32 +0900 - - Get rid of failures about coverage - - Run test suites explicitly instead of auto-running, to get rid of - failures when simplecov is not installed but COVERAGE is set. - -commit a50c844645c337742584560abc2e2b63bf566e79 - Author: Nobuyoshi Nakada - Date: 2019-07-25 17:15:48 +0900 - - Initialize vm_throw_data::throw_state as int - - As `struct vm_throw_data::throw_state` is initialized as `VALUE` - by rb_imemo_new, extended MSW part is assigned to it on LP64 - big-endian platforms. - - Fix up 1feda1c2b091b950efcaa481a11fd660efa9e717 - -commit 0f9ec4a877496278534e5956b640ed43a02229ad - Author: aycabta - Date: 2019-07-25 17:19:11 +0900 - - Check whether multibyte character is split - -commit 8e53d18e6724211bd0597ec5852869e6bf9679f1 - Author: Nobuyoshi Nakada - Date: 2019-07-24 11:07:15 +0900 - - Separated tool/test/runner.rb and test/runner.rb - - As `make test-tool` does not use gems, and no Rubygems stuffs is - needed, so moved such things to test/runner.rb. Also no longer - needs `--test-target-dir` option. - -commit 46771abfe53d95e8cecf917a5c999e32388be184 - Author: Nobuyoshi Nakada - Date: 2019-07-25 16:52:03 +0900 - - Use libraries in the base directory if given - -commit 4c1db84d1748b56334da8293ee328186fcb08162 - Author: Nobuyoshi Nakada - Date: 2019-07-25 16:45:18 +0900 - - Added --base-directory option - -commit f5ea05481017d34a1ebdc0eec32ef10254420ee5 - Author: Nobuyoshi Nakada - Date: 2019-07-25 14:29:15 +0900 - - Moved NoMemoryError hook - - Moved NoMemoryError hook from AutoRunner.run to Runner#run, so - it will work even in non-autorunning mode. - -commit d8e90f555817146d17ec82a55360b6d69c649d67 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-25 16:39:28 +0900 - - Fix a typo in inspect - -commit a850be68a57dce65449766654aa1912b5fa660cb - Author: Nobuyoshi Nakada - Date: 2019-07-24 11:04:26 +0900 - - Moved NoMemoryError hook to Test::Unit::AutoRunner - -commit 82ae46211341f926d79c6e2e26f4b9097625443c - Author: Nobuyoshi Nakada - Date: 2019-07-25 08:19:03 +0900 - - Do not fetch remote tags - -commit 077c28887a68c08f84d91e104fd9ac9c39810482 - Author: Nobuyoshi Nakada - Date: 2019-07-25 05:00:33 +0900 - - [ruby/io-console] Do not use add_development_dependency - - https://github.com/ruby/io-console/commit/bc77f46391 - -commit 414d6cf1d310de8f9eed1263116ad568b05a98ec - Author: Nobuyoshi Nakada - Date: 2019-07-25 03:29:41 +0900 - - [ruby/psych] Get rid of C90 feature - - For ruby 2.6 and earlier. - - https://travis-ci.org/ruby/psych/jobs/562435717#L245-L248 - - ``` - ../../../../ext/psych/psych_parser.c: In function ‘make_exception’: - ../../../../ext/psych/psych_parser.c:87:5: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] - VALUE ePsychSyntaxError = rb_const_get(mPsych, rb_intern("SyntaxError")); - ^ - ``` - - https://github.com/ruby/psych/commit/aa457443b8 - -commit 698dde525ad3df1444276ccd28c6349c81af2a19 - Author: Nobuyoshi Nakada - Date: 2019-07-24 22:21:49 +0900 - - [ruby/psych] Suppress uninitialized instance variable warnings - - In verbose mode, `test_delegator` in `test/psych/visitors/test_yaml_tree.rb` shows following warning. - - https://travis-ci.org/ruby/psych/jobs/562435717#L268 - ``` - /home/travis/build/ruby/psych/test/psych/visitors/test_yaml_tree.rb:10: warning: instance variable @obj not initialized - ``` - - This is because `Psych.load` bypasses #initialize with the #init_with method. - - https://github.com/ruby/psych/commit/f99523388f - -commit 6ca7dc69effddeb63a8fb8f759e29ff8649907ec - Author: Jean Boussier - Date: 2019-07-22 19:02:23 +0900 - - [ruby/psych] Deduplicate hash keys if they're strings - - https://github.com/ruby/psych/commit/0414982ffd - -commit 50076903ab06e2301051e459925afea20325ba7c - Author: Hiroshi SHIBATA - Date: 2019-07-21 12:21:27 +0900 - - [ruby/psych] Drop to support fat gem support. - - ref. https://github.com/ruby/bigdecimal/pull/149 - - https://github.com/ruby/psych/commit/25ae263252 - -commit 938032a790b22a1b49c1b112ede2da4597b4e75c - Author: Hiroshi SHIBATA - Date: 2019-07-21 12:16:56 +0900 - - [ruby/psych] Do not use add_development_dependency. - - https://github.com/ruby/psych/commit/939754237f - -commit 0a63c4d5fbbbfae9aba92c78e39b1521b90f1b06 - Author: Nobuyoshi Nakada - Date: 2019-07-25 06:39:40 +0900 - - Fix errno at seeking socket/pipe on Windows - - [Bug #12230] - -commit efa380b006aeafbad90b2d4e795a602404fec3c5 - Author: Nobuyoshi Nakada - Date: 2019-07-25 05:54:38 +0900 - - Use PRIuSIZE instead of "%zu" - -commit da76c4460f754baabc7a8db16d2e1b5f1c3eb264 - Author: Jeremy Evans - Date: 2019-07-25 03:54:07 +0900 - - Clarify Thread exception handling documentation [ci skip] - - From djellemah (John Anderson). - - Fixes [Bug #12252] - -commit 48b4deb418b374c6433fb346ea4550db46843fca - Author: git - Date: 2019-07-25 02:36:25 +0900 - - * 2019-07-25 - -commit 3556cba5038530e728eb6309dcf5d4d1a96a02ac - Author: Jeremy Evans - Date: 2019-07-25 02:30:56 +0900 - - Document that Range#cover? returns false if <=> returns nil - - Fixes [Bug #12090] - -commit 1cce4303247110d94eab8326f187a2a80130b324 - Author: Nobuyoshi Nakada - Date: 2019-07-24 22:07:10 +0900 - - Suppress deflateParams() warnings - -commit 538ba984c8e3c6ae33cbc87a5090725af24caf2e - Author: Nobuyoshi Nakada - Date: 2019-07-24 21:07:12 +0900 - - Split ls line - -commit 96b0d7cd6fcff7cb2f42315e39a961d84c630e9d - Author: Nobuyoshi Nakada - Date: 2019-07-24 21:03:01 +0900 - - GNU ls -T has different meaning - -commit 65a9d4b0f7ae07c026622392e06fc70dbcc5bfc1 - Author: Takashi Kokubun - Date: 2019-07-24 20:51:29 +0900 - - Fix typo [ci skip] - -commit 7b1893c771d21876884e17e8281c737bfc1c4643 - Author: Takashi Kokubun - Date: 2019-07-24 20:50:50 +0900 - - Resurrect timestamp debug log - - because it failed again https://travis-ci.org/ruby/ruby/jobs/563026412 - even after 676df311d90990a4666adb5b1db4c7aa6b080e57. - -commit dc954cbb75381149970e45927153829a88cbe0b5 - Author: Nobuyoshi Nakada - Date: 2019-07-24 20:08:40 +0900 - - @@project_dir in Gem::TestCase is no longer used - -commit 99fb637c41c6301286042afbc9edaea71cd7643b - Author: Nobuyoshi Nakada - Date: 2019-07-24 13:57:59 +0900 - - [rubygems/rubygems] Make `@@project_dir` constants per files - - https://github.com/rubygems/rubygems/commit/955174658f - -commit 99680f81e832506792cf32d830d09954acd220fc - Author: Nobuyoshi Nakada - Date: 2019-07-24 13:24:18 +0900 - - [rubygems/rubygems] Resolve `@@project_dir` from test file paths - - `Dir.pwd` may differ from the source path. Test directories and - files should be resolved from test file paths. - - https://github.com/rubygems/rubygems/commit/e18e7c81b4 - -commit 3a227b99e78927cdd53e4c1b6b1e5f1af004ca41 - Author: Nobuyoshi Nakada - Date: 2019-07-24 12:25:02 +0900 - - Adjusted test runner - -commit 5108a5dd7f8d29043354f7ad923f3d670a01d0a5 - Author: Nobuyoshi Nakada - Date: 2019-07-24 12:13:07 +0900 - - test-bundled-gems-run: Respect -k option - -commit a39f218f22e8ec205291022f9b748d51daa8df3b - Author: Nobuyoshi Nakada - Date: 2019-07-24 11:51:04 +0900 - - Reduced duplicate commands in test-bundled-gems-run - -commit df317151a5b4e0c5a30fcc321a9dc6abad63f7ed - Author: Koichi Sasada - Date: 2019-07-24 05:32:09 +0900 - - should not free local hook_list here. - - exec_hooks_postcheck() clean executed hook_list if it is needed. - list_exec is freed if there are no events and this list is local - event (connected to specific iseq). However, iseq keeps to point - this local hook_list, freed list. To prevent this situation, - do not free hook_list here even if it has no events. - - This issue is reported by @joker1007. - https://twitter.com/joker1007/status/1153649170797830144 - -commit a4e5690760c9177bc4234fdc5152d82ba73d26d0 - Author: Yusuke Endoh - Date: 2019-07-24 04:49:51 +0900 - - transcode.c (rb_econv_open0): remove unused code - - Coverity Scan found this. - -commit 9aba971e42c78bb9e446f28c0402bad55147a863 - Author: Jeremy Evans - Date: 2019-07-08 09:58:25 +0900 - - Make Object#singleton_methods work correctly for singleton classes of objects - - Fixes [Bug #10901] - -commit 11662c70b073da21dcd5213b61434bce2ed6af8f - Author: Nobuyoshi Nakada - Date: 2019-07-24 01:42:35 +0900 - - Test missing Content-Type warnings - -commit afea8db8c7a6bca9042002dd305d45494eb2656f - Author: Nobuyoshi Nakada - Date: 2019-07-24 01:42:05 +0900 - - Test invalid offset warnings - -commit f295e23e54dd000806e252798e352f327606cd86 - Author: git - Date: 2019-07-24 00:32:43 +0900 - - * 2019-07-24 - -commit c9826c20d204d4b8894e6fd51e5913959676776d - Author: Nobuyoshi Nakada - Date: 2019-07-24 00:24:12 +0900 - - Show the caller's location - - * lib/net/http/header.rb: show the caller's location instead of - the current lines. - -commit 325f7b6008a4a10e9b0f1c69ee4518b0669461be - Author: Jeremy Evans - Date: 2019-07-08 12:16:57 +0900 - - Make pkg_config in mkmf include -I cflags in return value - - This was the historical behavior, it was modified unintentionally - by 097c3e9cbbf23718371f08c24b2d2297b039f63f, which started storing - these flags in a different global variable. - - Also, include the incflags when logging, and document that the - method modifies $INCFLAGS. - - Fixes [Bug #10651] - -commit b6f07f748a95f1d5dc0d21e821320564776c744d - Author: Jesús Burgos Maciá - Date: 2019-07-20 04:59:21 +0900 - - Document that non-blocking mode isn't always supported on Windows [ci skip] - -commit 676df311d90990a4666adb5b1db4c7aa6b080e57 - Author: Nobuyoshi Nakada - Date: 2019-07-23 20:51:23 +0900 - - Reset mtime of all files on osx - - Often checked out files are in the future on OSX image. - -commit 03958a0c0d0140a2c27f8e3175f9c118425c762c - Author: Nobuyoshi Nakada - Date: 2019-07-23 18:22:25 +0900 - - Relaxed target_os matching - - When target_alias is not empty, `-gnu` suffixed is not stripped. - - [Bug #16015] - -commit e8d4f0cbc78b0e06806394a93ba73b7d04eba14d - Author: Nobuyoshi Nakada - Date: 2019-07-23 17:59:43 +0900 - - Show seconds and in the modified time order - - [ci skip] - -commit 0338c44bde4fe55f0507a82fe470dce2ac70127a - Author: Nobuyoshi Nakada - Date: 2019-07-23 17:39:03 +0900 - - Retry to update Unicode timestamp - -commit 009ec37a47e2f2b5e7f928004fbc3403f0bd8abe - Author: Lourens Naudé - Date: 2019-04-14 01:39:05 +0900 - - Let the index boundary check in rb_enc_from_index be flagged as unlikely - - [Misc #15806] - - Closes: https://github.com/ruby/ruby/pull/2128 - -commit 6546aed4757be07f4932326e1eb41a5d69141acf - Author: Lourens Naudé - Date: 2019-04-14 01:05:58 +0900 - - Explicitly initialise encodings on init to remove branches on encoding lookup - - [Misc #15806] - - Closes: https://github.com/ruby/ruby/pull/2128 - -commit c25ff7bb5d8e8d2985ec8fd32a7211a06ad4eca0 - Author: Koichi Sasada - Date: 2019-07-23 16:42:20 +0900 - - check iseq is executable - -commit 33f54da15ba137fc1569016f5caa492c1a57eb4d - Author: Nobuyoshi Nakada - Date: 2019-07-23 16:18:40 +0900 - - Support memsize of AST - -commit 90c4bd2d2bd10b19c2b09834396553742bc7e8a4 - Author: Lourens Naudé - Date: 2019-04-23 07:24:52 +0900 - - Let memory sizes of the various IMEMO object types be reflected correctly - - [Feature #15805] - - Closes: https://github.com/ruby/ruby/pull/2140 - -commit ab087ecb4dd21ea5f7d1cbadd8298f2f1a3c9ce9 - Author: Hiroshi SHIBATA - Date: 2019-07-23 13:34:35 +0900 - - Added the upstream repositories to default gems. - -commit 73d56d6fe7dd387342ddfcefbaff402f7dcaa232 - Author: Hiroshi SHIBATA - Date: 2019-07-23 13:32:21 +0900 - - reline is default gems now. - -commit 44cfabddbe8f62ce247118b12e75f4d2294d50b8 - Author: Hiroshi SHIBATA - Date: 2019-07-23 11:20:08 +0900 - - Removed duplicated entry for racc. - -commit 01995df6453de45ba0d99835e26799260517657c - Author: Jeremy Evans - Date: 2019-07-23 07:07:22 +0900 - - Document BasicObject does not implement #object_id and #send [ci skip] - - Fixes [Bug #10422] - -commit 32ec6dd5c7cb89979d48100acf8971ac09e0d02e - Author: Jeremy Evans - Date: 2019-07-23 06:43:36 +0900 - - Document encoding of string returned by Regexp.quote [ci skip] - - Also, remove documentation about returning self, which makes no - sense as self would be the Regexp class. It could be interpreted - as return the argument if no changes were made, but that hasn't - been the behavior at least since 1.8.7 (and probably before). - - Fixes [Bug #10239] - -commit c1ad6321b03bcf9f96f975bcba7ff1d205990149 - Author: Jeremy Evans - Date: 2019-07-23 06:02:39 +0900 - - Adjust documentation for Kernel#raise [ci skip] - - Mention how each of the arguments are retrievable from the generated - Exception object. - - Fixes [Bug #10110] - -commit d2710ba86677380f016b6a84d81e5cb39837c04d - Author: Nobuyoshi Nakada - Date: 2019-07-23 05:21:41 +0900 - - Split test/ripper/test_files.rb to run in parallel - -commit 11f3da8e9dd98cb6b0c2c2fd22220f8508af32f2 - Author: Nobuyoshi Nakada - Date: 2019-07-23 05:20:04 +0900 - - Stop packing rb_method_definition_t - - By using `BITFIELD`, `type` field should not be forced to align. - -commit 6b62aa7aec1c8beffafc5e321419cba408bf3c24 - Author: git - Date: 2019-07-23 04:10:42 +0900 - - * 2019-07-23 - -commit 2f6cc00338826dbaa439a18e4b4f7a19c1f5987a - Author: Jeremy Evans - Date: 2019-07-10 13:33:01 +0900 - - Fix documentation for Array#pack m directive count specifier [ci skip] - - Fixes [Bug #10025] - -commit 9f9a6dbc1491fa9407bf3da70646dc8636c566f5 - Author: Hiroshi SHIBATA - Date: 2019-07-22 18:00:37 +0900 - - Always fetch the latest commit from default gems repository. - -commit 1feda1c2b091b950efcaa481a11fd660efa9e717 - Author: Koichi Sasada - Date: 2019-07-22 17:44:58 +0900 - - constify again. - - Same as last commit, make some fields `const`. - - include/ruby/ruby.h: - * Rasic::klass - * RArray::heap::aux::shared_root - * RRegexp::src - internal.h: - * rb_classext_struct::origin_, redefined_class - * vm_svar::cref_or_me, lastline, backref, others - * vm_throw_data::throw_obj - * vm_ifunc::data - * MEMO::v1, v2, u3::value - - While modifying this patch, I found write-barrier miss on - rb_classext_struct::redefined_class. - - Also vm_throw_data::throw_state is only `int` so change the type. - -commit 9095ff53cf6c25154c7f80910aab8d1af45c42ec - Author: Jeremy Evans - Date: 2019-06-27 08:36:52 +0900 - - [ruby/date] Describe what is meant by valid in the Date.valid_date? rdoc - - https://github.com/ruby/date/commit/8eca79d1f0 - -commit f75561b8d455e1cf92dac8ac8838fdafc88cba71 - Author: Koichi Sasada - Date: 2019-07-22 17:01:31 +0900 - - constify RHash::ifnone. - - RHash::ifnone should be protected by write-barriers so this field - should be const. However, to introduce GC.compact, the const was - removed. This commit revert this removing `const` and modify - gc.c `TYPED_UPDATE_IF_MOVED` to remove `const` forcely by a type cast. - -commit d1c2b1969814fee14a01296aa2867abd07f70d04 - Author: Nobuyoshi Nakada - Date: 2019-07-22 13:51:14 +0900 - - Fixed exception message - -commit f6461fa890fa12501fe1696a36ab2cca036477ff - Author: Nobuyoshi Nakada - Date: 2019-07-22 12:31:40 +0900 - - Only the first argument can be --test-target-dir option - - Raise the proper exception when that option is not given but - non-option argument is. - -commit 463092b84da7933f307cc8747f948f68ef19f5fd - Author: Hiroshi SHIBATA - Date: 2019-07-22 11:05:34 +0900 - - Update rake-12.3.3. - -commit f6a7b10afa6f90a43df0bb336dfac05d38accf1e - Author: git - Date: 2019-07-22 10:10:51 +0900 - - * 2019-07-22 - -commit 28ae30b6ac0616ce3a7742d311d22909ee200dd8 - Author: Nobuyoshi Nakada - Date: 2019-07-22 10:10:28 +0900 - - Run test-tool in the order of the tests - -commit 08ea9240437bd866ae1169a91010d7767a22c9c1 - Author: Yusuke Endoh - Date: 2019-07-21 22:30:15 +0900 - - common.mk: `make check` now includes `make test-tool` - - And `make test-tool` includes `make test-testframework`. - - This change may be arguable because I'm unsure who is an intended user - of `make check`: a normal user, or Ruby-core developer. Normal users - don't have to run `make test-tool` for testing their installation, but - Ruby committers should run it before they commit anything. - - In this case, I'd be conservative; `make check` includes `test-tool`. - If normal users often report a failure of `make test-tool`, then we can - consider to split `make check` for two sets of target users. - -commit 24712eeec39f5e9a11cfc2b940358403cda4f2b6 - Author: Yusuke Endoh - Date: 2019-07-21 19:19:08 +0900 - - tool/test/runner.rb: support --test-target-dir option - - tool/test/runner.rb had been copied from test/runner.rb. - test/runner.rb was for `make test-all`, and tool/test/runner.rb was for - `make test-testframework` and `make test-tool`. - But I want to avoid the code clones. - - This change makes tool/test/runner.rb support --test-target-dir option - which allows tool/test/runner.rb to run `make test-all`. - Now we can remove test/runner.rb. - -commit 523fec8a4baec1e2a9c1adc0095646b12aa6c76c - Author: git - Date: 2019-07-21 09:47:57 +0900 - - * 2019-07-21 - -commit d285579ea796c0a9132cade07de4ffb6bae137e9 - Author: Hiroshi SHIBATA - Date: 2019-07-21 09:46:49 +0900 - - Update simplecov and doclie to the latest version. - -commit c584dd8460bdbb78b0e5ab47a1c15b2df2c45ded - Author: Samuel Williams - Date: 2019-07-20 16:44:49 +0900 - - Move travis coroutine check to cron only. - -commit e7b5b9144a8931af7510c7bc95c798df75af9499 - Author: Takashi Kokubun - Date: 2019-07-20 15:44:10 +0900 - - --debug was not functional either - - Even after 19d592dc82a31adf0bb6f027392cae69615c2394, the retry seems not - functional. Let's just add --debug from the beginning because an output - of each step is collapsed and we don't see `make up` output so often. - -commit 81fc3becc7b883571e5c716f4fdc490d107ad990 - Author: Yusuke Endoh - Date: 2019-07-20 15:42:59 +0900 - - file.c: add a NORETURN declaration for statx_notimplement - - clang complains the lack. - -commit 1392b821b99dacb4d4da5081640cfe7a4fb866f4 - Author: Takashi Kokubun - Date: 2019-07-20 15:32:36 +0900 - - Explain what's benchmark/lib/load.rb [ci skip] - - I'm actually not using this, but ko1 is. - -commit 56b957e88a015a6feb9401a57634d72f367df3be - Author: Takashi Kokubun - Date: 2019-07-20 15:27:57 +0900 - - Upgrade benchmark-driver.gem again - - because v0.14.18 was actually not working with `make run`. - In `make run`, `Gem` is defined but `Gem::Version` isn't. - v0.14.19 checks `defined?(Gem::Version)` instead of `defined?(Gem)`. - -commit 8a38eff2bd6338be412c8ef82e1bc50032c9f88f - Author: Takashi Kokubun - Date: 2019-07-20 15:13:02 +0900 - - Upgrade benchmark-driver.gem version - - This is to make `make run` with benchmark/lib/load.rb work for ko1 - https://github.com/benchmark-driver/benchmark-driver/compare/v0.14.17...v0.14.18 - -commit 77bb79b8cf69f6504bf0abe2e07a1a631cc4ef32 - Author: Yusuke Endoh - Date: 2019-07-20 09:08:34 +0900 - - array.c: factor out a complex condition of assert - - ARY_SHARED_P and ARY_EMBED_P included: - - assert(!FL_TEST((ary), ELTS_SHARED) || !FL_TEST((ary), RARRAY_EMBED_FLAG)), - - The two predicate macros are used in many other assert conditions, - which caused memory bloat during C compilation. - This change factors out the assertion above to a function. - Now gcc consumes 160 MB instead of 250 MB to compile array.c. - -commit d304f77c585c42a2e8b008d170ac153b7d8e5243 - Author: Aaron Patterson - Date: 2019-07-20 07:12:02 +0900 - - Only disable GC around reference updating - - This is the only place that can change the size of the object id tables - and cause a GC. - -commit c945d115a55710089ac23027c74ed32a40cd9e50 - Author: Jeremy Evans - Date: 2019-07-20 03:36:12 +0900 - - Document use of ensure and else at method level [ci skip] - -commit ceeb1535dd6f618ac6069415a69be6d8b2916450 - Author: Jeremy Evans - Date: 2019-07-20 03:23:00 +0900 - - Remove section on performance advantage of not using a block parameter [ci skip] - - Improvements in Ruby 2.5 and 2.6 make this section no longer - accurate. - -commit 7e2677675d76551a8a7abdba3fed350056640492 - Author: Jeremy Evans - Date: 2019-07-20 03:20:08 +0900 - - Remove mention of Proc.new with implicit block [ci skip] - - This support is now deprecated and will be removed in Ruby 3. - -commit bf2f84b2ff298583d3efbecb88da271e99fa7930 - Author: Jeremy Evans - Date: 2019-07-20 03:18:23 +0900 - - Document evaluation order of arguments [ci skip] - - Fixes [Misc #8905] - -commit 71d21f3c750f41ab44e618162515bd9e4a9f289e - Author: Jeremy Evans - Date: 2019-07-20 01:58:20 +0900 - - Document required keyword argument syntax [ci skip] - - Fixes [Bug #8952] - -commit 57b7bfad9e6421fb8387698908e06dcf363df213 - Author: git - Date: 2019-07-20 02:54:41 +0900 - - * 2019-07-20 - -commit de18328192de61be6f510c7402e1d7bd23efef6a - Author: aycabta - Date: 2019-07-20 02:53:40 +0900 - - Some keywords, "true", "false", and "nil" should be treated as a variable - -commit 0a16ff9f8366fd0d751191bd9c6eaa47f0ae33c8 - Author: Yusuke Endoh - Date: 2019-07-19 23:50:30 +0900 - - array.c: use assert in macro instead of in a function - - The old code lost information of lineno. Now, an assertion error will - output a correct lineno (but now gcc 8 requires 250 MB, unfortunately). - -commit 3e8d4ff3e571bd556898efd94badb66a5dadf4d2 - Author: Yusuke Endoh - Date: 2019-07-19 23:41:24 +0900 - - array.c: factor out `assert(RB_TYPE_P(ary, T_ARRAY))` to a function - - The assertion blows up gcc 8 by consuming approx. 1.8 GB memory. - This change reduces the amount of memory required to about 200 MB. - - A follow-up of ae750799c1b28b06d02e50cd26450b9903516526. - -commit 0a7093a8e9277d9f459b2c14f2eade02eed15e28 - Author: Samuel Williams - Date: 2019-07-19 17:18:42 +0900 - - Add documentation to `fiber_pool_allocate_memory`. - -commit 517f7f9b578f8f48ce80dfbe5c8e61b4f8ebd1d4 - Author: Samuel Williams - Date: 2019-07-19 17:09:03 +0900 - - Fix 32-bit build and typo. - - "Therefore, `fiber_pool_stack_free(&vacancy->stack)` can do the wrong - thing..." should be "... `fiber_pool_stack_free(stack)` ...". - -commit e004afd46d3bd27bda4c4922eadcf11c7e4bfc55 - Author: Samuel Williams - Date: 2019-07-19 16:42:00 +0900 - - Ensure that madvise does not clobber vacancy data. - - After calling `fiber_pool_vacancy_reset`, `vacancy->stack` and `stack` are - no longer in sync. Therefore, `fiber_pool_stack_free(&vacancy->stack)` can - do the wrong thing and clobber the vacancy data. - - Additionally, when testing using VM_CHECK_MODE > 0, use MADV_DONTNEED if - possible, to catch issues w.r.t. clobbered vacancy data earlier. - -commit fba3e76e3fded3534a34b21412c17af2b02a5f3d - Author: Koichi Sasada - Date: 2019-07-19 16:24:14 +0900 - - fix debug counter for Hash counts. - - Change debug_counters for Hash object counts: - - * obj_hash_under4 (1-3) -> obj_hash_1_4 (1-4) - * obj_hash_ge4 (4-7) -> obj_hash_5_8 (5-8) - * obj_hash_ge8 (>=8) -> obj_hash_g8 (> 8) - - For example on rdoc benchmark: - - [RUBY_DEBUG_COUNTER] obj_hash_empty 554,900 - [RUBY_DEBUG_COUNTER] obj_hash_under4 572,998 - [RUBY_DEBUG_COUNTER] obj_hash_ge4 1,825 - [RUBY_DEBUG_COUNTER] obj_hash_ge8 2,344 - [RUBY_DEBUG_COUNTER] obj_hash_empty 553,097 - [RUBY_DEBUG_COUNTER] obj_hash_1_4 571,880 - [RUBY_DEBUG_COUNTER] obj_hash_5_8 982 - [RUBY_DEBUG_COUNTER] obj_hash_g8 2,189 - -commit ae750799c1b28b06d02e50cd26450b9903516526 - Author: Koichi Sasada - Date: 2019-07-19 14:37:59 +0900 - - Use FL_TEST_RAW() to check flags. - - FL_TEST() uses FL_ABLE() which test data types. However, - in array.c we don't need to check it (all of them should be - T_ARRAY), so I changed from FL_TEST() to FL_TEST_RAW() which - does not check FL_ABLE(). Instead of FL_ABLE(), add assertion - to check given object is a T_ARRAY object. - - For example, rb_ary_free() becomes slim: - - with FL_TEST(): - 0000000000006a30 : - 6a30: 40 f6 c7 07 test $0x7,%dil - 6a34: 48 8b 07 mov (%rdi),%rax - 6a37: 75 09 jne 6a42 - 6a39: 48 f7 c7 f7 ff ff ff test $0xfffffffffffffff7,%rdi - 6a40: 75 1e jne 6a60 - 6a42: a9 00 00 00 02 test $0x2000000,%eax - 6a47: 74 07 je 6a50 - 6a49: f3 c3 repz retq - 6a4b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) - 6a50: 48 8b 7f 20 mov 0x20(%rdi),%rdi - 6a54: e9 00 00 00 00 jmpq 6a59 - 6a59: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) - 6a60: 89 c2 mov %eax,%edx - 6a62: 83 e2 1f and $0x1f,%edx - 6a65: 83 fa 1b cmp $0x1b,%edx - 6a68: 74 d8 je 6a42 - 6a6a: f6 c4 60 test $0x60,%ah - 6a6d: 74 d3 je 6a42 - 6a6f: eb d8 jmp 6a49 ``` - - with FL_TEST_RAW(): - 0000000000006a30 : - 6a30: 48 f7 07 00 60 00 02 testq $0x2006000,(%rdi) - 6a37: 74 07 je 6a40 - 6a39: f3 c3 repz retq - 6a3b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) - 6a40: 48 8b 7f 20 mov 0x20(%rdi),%rdi - 6a44: e9 00 00 00 00 jmpq 6a49 - -commit a44ad9a1451eb86385339cfd72713ff764f1c820 - Author: git - Date: 2019-07-19 13:10:08 +0900 - - * expand tabs. - -commit 182ae1407b3f6597cdbf6872f788c1ed3aa22a35 - Author: Koichi Sasada - Date: 2019-07-19 13:02:38 +0900 - - fix shared array terminology. - - Shared arrays created by Array#dup and so on points - a shared_root object to manage lifetime of Array buffer. - However, sometimes shared_root is called only shared so - it is confusing. So I fixed these wording "shared" to "shared_root". - - * RArray::heap::aux::shared -> RArray::heap::aux::shared_root - * ARY_SHARED() -> ARY_SHARED_ROOT() - * ARY_SHARED_NUM() -> ARY_SHARED_ROOT_REFCNT() - - Also, add some debug_counters to count shared array objects. - - * 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. - -commit 547f574b639cd8586568ebb8570c51faf102c313 - Author: Samuel Williams - Date: 2019-07-19 13:03:47 +0900 - - In some situations, `vm_stack` can be NULL, but `cfp` is valid. - -commit e14f5762c532241706ad5bd8f81b520c46d97654 - Author: Samuel Williams - Date: 2019-07-19 12:55:34 +0900 - - Add assertions to `coroutine_initialize_main`. - -commit dd0e33f0839124a910f4eb0bb67423e041036645 - Author: Samuel Williams - Date: 2019-07-19 12:53:47 +0900 - - Split assertions to check which one fails. - -commit cf93f98a609d8a48e3b69790bc38ae9edf8aa687 - Author: Samuel Williams - Date: 2019-07-19 12:45:44 +0900 - - Better usage of `rb_ec_clear_vm_stack` to maintain invariants. - -commit 6eef80d824aa4aca91ff13ea215f5cd053d16906 - Author: Samuel Williams - Date: 2019-07-19 11:54:31 +0900 - - Improve ec assertions. - -commit 63160a84b42cd3a7924e5abe94bbb08bb566f24b - Author: Koichi Sasada - Date: 2019-07-19 12:04:32 +0900 - - respect NDEBUG. - - ruby/ruby.h includes ruby/assert.h, and RUBY_NDEBUG is defined - by checking NDEBUG. In other words, NDEBUG is only seen just - after ruby/ruby.h. This patch also checks NDEBUG just after - including ruby_assert.h. - - Without this patch, assertions in array.c are always enabled. - -commit e644e2de85d0d76e1c28d45710f765757a22f5c6 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-19 09:00:55 +0900 - - Remove doc/etc.rd.ja [ci skip] - - [Feature #16003] [ruby-dev:50814] - -commit 4ec5b39ce8bd3b13dec0ac290b2d7d29c640b304 - Author: Koichi Sasada - Date: 2019-07-19 08:53:19 +0900 - - initialize only Fiber's cfp. - - fiber->cont.saved_ec.cfp should be initialized by NULL - because no vm_stack is allocated. However, cont_init() - captures current Fiber's cfp for continuation, so it should - only initialize fibers. - -commit 8ca32020b03a4f3e69c8f0b15e015eb7ad5d8e05 - Author: Samuel Williams - Date: 2019-07-19 08:32:40 +0900 - - Revert "Ensure cfp is initialized to NULL." - - This reverts commit d7fdf45a4ae1bcb6fac30a24b025d4f20149ba0a. - -commit c8ee44f44c0c7d333a33c62c811d1d0cdbc3554a - Author: aycabta - Date: 2019-07-19 08:23:37 +0900 - - Fix showing doc of "nil.to_s", nil doesn't have #name - -commit d7fdf45a4ae1bcb6fac30a24b025d4f20149ba0a - Author: Samuel Williams - Date: 2019-07-19 08:09:52 +0900 - - Ensure cfp is initialized to NULL. - - `cont_init` didn't initialize `cont->saved_ec.cfp`. Calling `cont_mark` - would result in an invalid `cfp` in `rb_execution_context_mark`. Because - fibers lazy-initialize the stack, fibers that are created but not resumed - could cause this problem to occur. - -commit 9dda0a03cc19d0ca20fc8fc220760e37cb5b9f02 - Author: Samuel Williams - Date: 2019-07-19 08:00:58 +0900 - - Remove `rb_vm_push_frame` as it is no longer used. - -commit fd461dea06b1a56eca9d1c662c3dc0c416c9e495 - Author: Nobuyoshi Nakada - Date: 2019-07-19 07:55:40 +0900 - - Ripper#validate_object: check if the object is hidden - -commit 0b826418af2a96b0e3a24a8b871996962efb6127 - Author: Nobuyoshi Nakada - Date: 2019-07-19 07:51:48 +0900 - - Update before commit - -commit 59d6ce4f4bf2d77dfd07975fed6a49609c2df97e - Author: Nobuyoshi Nakada - Date: 2019-07-19 07:48:55 +0900 - - Moved RIPPER_DEBUG methods to Ripper from Kernel - -commit 18bce998ddbcf1266d53071a5d46a9e71950f0ea - Author: Nobuyoshi Nakada - Date: 2019-07-19 07:48:30 +0900 - - Fixed build error with RIPPER_DEBUG - -commit d4c4029597d575aa9820698b5be7594b642b024f - Author: git - Date: 2019-07-19 06:40:24 +0900 - - * 2019-07-19 - -commit a036a8a038820660a6903af60376a2df502d0266 - Author: Nobuyoshi Nakada - Date: 2019-07-19 06:15:47 +0900 - - Adjust styles and indents - -commit a027c4b5b0bc1d6786852249847e8a2f56404d1a - Author: Nobuyoshi Nakada - Date: 2019-07-19 06:15:05 +0900 - - Use Qnull instead of 0 and Qundef - -commit d40d8b3caf40e0b1769bb4a196aa7740aef4737e - Author: Koichi Sasada - Date: 2019-07-18 22:59:44 +0900 - - check saved_ec.cfp - -commit 9790b778a339f36f9b29517a1d762cf02a2f0293 - Author: Samuel Williams - Date: 2019-07-18 21:33:03 +0900 - - Ensure we don't have dangling cfp. - -commit 78bc6cd8dff9ee584a447251490c88ee035d218d - Author: git - Date: 2019-07-18 17:55:22 +0900 - - * remove trailing spaces. - -commit 38e3c65a33aa7bcd4cee922487e259a8da699831 - Author: Samuel Williams - Date: 2019-07-18 16:02:16 +0900 - - Improve `fiber_pool_expand` allocation strategy. - - If `mmap` fails to allocate memory, try half the size, and so on. - - Limit FIBER_POOL_ALLOCATION_MAXIMUM_SIZE to 1024 stacks. In typical - configurations this limits the memory mapped region to ~128MB per - allocation. - -commit 311007bf403160b978e015997ad5076a229290da - Author: Samuel Williams - Date: 2019-07-16 13:35:55 +0900 - - Add experimental `RUBY_SHARED_FIBER_POOL_FREE_STACKS` to control madvise. - -commit 56fcf988495ec1b36655534f4cc2ae786e2ab8c5 - Author: Samuel Williams - Date: 2019-07-16 13:35:27 +0900 - - Add note about setting `vm.max_map_count` for Linux. - -commit 001f187ed6539f320421d8893d2f3c8f584cc3a5 - Author: Samuel Williams - Date: 2019-07-16 13:11:55 +0900 - - Make fiber_pool more conservative on platforms with limited address space. - - We use COROUTINE_LIMITED_ADDRESS_SPACE to select platforms where address - space is 32-bits or less. Fiber pool implementation enables more book - keeping, and reduces upper limits, in order to minimise address space - utilisation. - -commit 385ea910fc28f0e46c72669a260e44d4f3f37d9e - Author: Samuel Williams - Date: 2019-07-16 13:00:35 +0900 - - Add `struct fiber_pool {int free_stacks;}` to control usage of madvise. - - `madvise(free)` and similar operations are good because they avoid swap - usage by clearing the dirty bit on memory pages which are mapped but no - longer needed. However, there is some performance penalty if there is no - memory pressure. Therefore, we do it by default, but it can be avoided. - -commit 4d60a5820ae2c7bc2ce5bee441b834129a3a56e1 - Author: Samuel Williams - Date: 2019-07-16 09:49:14 +0900 - - Add FIBER_POOL_ALLOCATION_FREE to control allocation/free strategy. - -commit 8ac9a7be0fea95d9fc17cce53c0d18d70cc8d091 - Author: Samuel Williams - Date: 2019-07-12 10:42:34 +0900 - - Limit expansion of fiber pool on 32-bit platforms. - - On 32-bit platforms, expanding the fiber pool by a large amount may fail, - even if a smaller amount may succeed. We limit the maximum size of a single - allocation to maximise the number of fibers that can be allocated. - - Additionally, we implement the book-keeping required to free allocations - when their usage falls to zero. - -commit 77f3319071e600a2aafaa9863b892dfd3c1da343 - Author: Samuel Williams - Date: 2019-07-11 16:17:34 +0900 - - Enable `madvise` to release stack space back to OS. - -commit 47c0cab248ca09deb9508ff29edfd1dfc11b5f31 - Author: Samuel Williams - Date: 2019-07-01 13:24:39 +0900 - - Add details of fiber pool and coroutine selection to NEWS. - -commit b8242bce2301e33d3ba1fae95b68a291cc3004b5 - Author: Samuel Williams - Date: 2019-06-29 21:21:19 +0900 - - Add `ucontext` and `copy` coroutine implementations to test matrix. - -commit 7291fef55c90b9ab6b3c22018b16972861b98c9d - Author: Samuel Williams - Date: 2019-06-29 10:07:07 +0900 - - Improve build process and coroutine implementation selection. - -commit 91aae651bf90be46773a246e4c46b9e221353fbd - Author: Samuel Williams - Date: 2019-06-27 15:59:25 +0900 - - Stack copying implementation of coroutines. - -commit 8779382da44723438eb6cae23bd7267990157433 - Author: Samuel Williams - Date: 2019-06-19 21:13:49 +0900 - - Remove unused vm_stack recycling. - -commit 14cf95cff35612c6238790ad2f605530f69e9a44 - Author: Samuel Williams - Date: 2019-06-02 09:49:58 +0900 - - Implement fiber pool for reduced fiber allocation overhead. - - Replace previous stack cache with fiber pool cache. The fiber pool - allocates many stacks in a single memory region. Stack allocation - becomes O(log N) and fiber creation is amortized O(1). Around 10x - performance improvement was measured in micro-benchmarks. - -commit 1b82c877dfa72e8505ded149fd0e3ba956529d3f - Author: Samuel Williams - Date: 2019-06-01 14:48:25 +0900 - - Make FIBER_USE_NATIVE the default and reformat code. - -commit 97808e29cd5691092ad9004078852b3f16592cf2 - Author: git - Date: 2019-07-18 08:15:46 +0900 - - * 2019-07-18 - -commit 9b28eefeb2cea9690b897aeb3a1e1de2cbc19137 - Author: Samuel Williams - Date: 2019-07-18 08:13:49 +0900 - - Add benchmark to help diagnose performance regression. - - See https://bugs.ruby-lang.org/issues/16009 for more details. - -commit bdec1ad9a96700eb00ab953ea6ee2168449827d9 - Author: git - Date: 2019-07-17 23:42:21 +0900 - - * expand tabs. - -commit 416ead4cdaf849fe1f3dcda26d6ba04c80e36746 - Author: Yusuke Endoh - Date: 2019-07-17 08:24:25 +0900 - - compile.c: add NO_CHECK for the calls to COMPILE whose result is unused - - to suppress many warnings of Coverity Scan - -commit 0e23e0c3a0c1053c230205117b82cc8156f3a26a - Author: Nobuyoshi Nakada - Date: 2019-07-17 15:55:50 +0900 - - Adjust indent [ci skip] - -commit cd372f8db2e050241abf1d7360b7b29ac614ceec - Author: Nobuyoshi Nakada - Date: 2019-07-17 14:45:33 +0900 - - Get rid of LoadError with $DEBUG - -commit af07e07ac9331ec9c2f16b2329a0471ea663dd95 - Author: Nobuyoshi Nakada - Date: 2019-07-17 11:56:40 +0900 - - Separate pull-github from merge-github [ci skip] - -commit 0965bb6091a70d5237a8afd88d414b2d7fc9f5a8 - Author: git - Date: 2019-07-17 10:53:00 +0900 - - * 2019-07-17 - -commit f487e5b7a4b13d23a8bb7807e4f5cc3f9b2a30e3 - Author: Nobuyoshi Nakada - Date: 2019-07-16 21:47:32 +0900 - - Expanded buf to copy at once - - Build dumped string from base packed data and extended year at - once. Although currently ruby_marshal_write_long() never writes - more than 5 bytes per its format specification, allocate - `sizeof(long)+1` for the sanitation. - -commit ed2f2b4f98800540024b9c4a5ebde98674889013 - Author: Nobuyoshi Nakada - Date: 2019-07-16 22:39:39 +0900 - - Named the backward compatible dump size - -commit 6ab95fb741168895f9aebe8d6c45e5242cc81f2b - Author: Nobuyoshi Nakada - Date: 2019-07-16 22:00:54 +0900 - - Removed twisted tests - - Why does only Process.daemon have these tests? - -commit d45d448d71bfe9db4a71e06289e7b4d640bbd55c - Author: Nobuyoshi Nakada - Date: 2019-07-16 21:38:25 +0900 - - nil as the default of optional parameters - -commit d8e23a67c3869c70ef82b4337499367632ce911a - Author: Nobuyoshi Nakada - Date: 2019-07-16 19:27:22 +0900 - - nil as the default of optional parameters - -commit e988048e2589b6f517c11430d568e2ccf118e901 - Author: Nobuyoshi Nakada - Date: 2019-07-16 18:47:35 +0900 - - Moved the check for `exception` to rb_execarg_addopt - - Check for `exception` option in rb_execarg_addopt, as well as - other options. And then raise a particular ArgumentError if it is - not allowed. - -commit 8deabcd3280f6042ea1ed14b629d70680e081fec - Author: Nobuyoshi Nakada - Date: 2019-07-16 18:42:56 +0900 - - Constified afamily functions - -commit 19d592dc82a31adf0bb6f027392cae69615c2394 - Author: Nobuyoshi Nakada - Date: 2019-07-16 18:41:11 +0900 - - Somehow `if` didn't work - -commit 76c6cf2cbc549dead57725ccd934a42df5bc150d - Author: Nobuyoshi Nakada - Date: 2019-07-16 17:23:43 +0900 - - Print debugging information when updating failed - -commit 75fb0a9afad1685cedee9c7665a7f30ec95068fc - Author: Nobuyoshi Nakada - Date: 2019-07-16 09:30:58 +0900 - - Allow mday in Date.iso8601 to be omitted - - [Bug #12285] - -commit e2f987e65461bff85be2146dda93655b7d13a537 - Author: git - Date: 2019-07-16 09:22:11 +0900 - - * expand tabs. - -commit 00dc0dae0d7b247a917f5b676a777db86cdf1f3a - Author: Nobuyoshi Nakada - Date: 2019-07-16 08:48:57 +0900 - - Removed intermediate local variables - -commit 8e37ef76f6f640178ffaea4d7c0d36a17e6ca171 - Author: Nobuyoshi Nakada - Date: 2019-07-16 08:46:38 +0900 - - Fixed the library path for tools - -commit 71d5b4c32e892d1771d73ca869da3a59f5d0b4d1 - Author: Nobuyoshi Nakada - Date: 2019-07-16 08:25:39 +0900 - - Fixed the library path for tools - -commit ca524bcd494e2f284c3211cad8e8dde70e8aa86a - Author: Nobuyoshi Nakada - Date: 2019-07-16 08:15:05 +0900 - - Expanded f_numerator - -commit 34019a22eb41206e3d5d1ac29b3874275aa7f71c - Author: Nobuyoshi Nakada - Date: 2019-07-16 07:58:47 +0900 - - Expanded f_denominator - -commit 325d546d627f3cfb50c0371775f671cd88521c49 - Author: git - Date: 2019-07-16 07:19:56 +0900 - - * 2019-07-16 - -commit a8e4b7b12f348d5fdde4ba360a68d10c0f2689bf - Author: git - Date: 2019-07-16 07:19:52 +0900 - - * expand tabs. - -commit c184a1c261209da403db553eef7f7353f7ee5edd - Author: Yusuke Endoh - Date: 2019-07-16 07:18:54 +0900 - - compile.c: add NO_CHECK for the calls to COMPILE whose result is unused - - to suppress many warnings of Coverity Scan - -commit 6aab77a7a3e29a82006878f87e24ed30fa985a1f - Author: Yusuke Endoh - Date: 2019-07-16 07:17:57 +0900 - - Add a /* fall through */ comment - -commit 0c6c937904aafc1809386bd892a2d114d22d01fe - Author: Nobuyoshi Nakada - Date: 2019-07-15 19:31:48 +0900 - - Removed duplicate highlighting - -commit b452c03a14f943ae25338547bd680fce67399d85 - Author: Nobuyoshi Nakada - Date: 2019-07-15 17:45:37 +0900 - - Always evaluate the expression RUBY_ASSERT_MESG_WHEN just once - -commit c20445ab561b6b74bc60787b7c7f69795986e4a3 - Author: aycabta - Date: 2019-07-15 17:20:48 +0900 - - Require Ruby 2.4 or later because needs lex_state from Ripper - -commit c781b1b7a3d112c6f9b2521c4ff2c5408a429a72 - Author: Nobuyoshi Nakada - Date: 2019-07-15 17:06:35 +0900 - - update-deps for dependencies - -commit 5a42dca6887203ebba3532f4430c17d3a73a6169 - Author: git - Date: 2019-07-15 16:51:18 +0900 - - * expand tabs. - -commit 5e0d27a32f2b3f1242c9990acf83b7970b37bbce - Author: Nobuyoshi Nakada - Date: 2019-07-15 16:44:07 +0900 - - Removed dead code - - If `emesg` is `Qundef`, it is not a message string and then `elen` - (the length of the message) is 0. So `emesg` cannot be `Qundef` in - the `elen != 0` block. Pointed out by Coverity Scan. - -commit de0f192444e3822968d04cdea6e868bd42ccfa7f - Author: aycabta - Date: 2019-07-15 16:25:50 +0900 - - Add features of IRB to NEWS - -commit 574e8a6812aea072acbf55970f7ff2e32ed4e599 - Author: aycabta - Date: 2019-07-15 15:49:59 +0900 - - Add Reline section to NEWS - -commit 3a1d3556e2ae5f6083dbd8b97e5b3009eaceaab3 - Author: aycabta - Date: 2019-07-15 15:45:51 +0900 - - Fix a typo of Markdown of NEWS - -commit f73ea3342b5abd3136a1fb27fc0fdbe4039bc3bf - Author: Hiroshi SHIBATA - Date: 2019-07-15 15:07:26 +0900 - - Fixed ruby/spec for Logger::LogDevice changes. - -commit 5349aa23c8ad23786d25c1e18a3f541de06f4700 - Author: Hiroshi SHIBATA - Date: 2019-07-15 14:47:29 +0900 - - Also fixed up with 036039c8a29d3d8045207c111f9bbc481c904998 - -commit 036039c8a29d3d8045207c111f9bbc481c904998 - Author: Hiroshi SHIBATA - Date: 2019-07-15 14:45:05 +0900 - - Fixed LoadError of version file. - -commit f103ed8b7dae9ba9cb1d8dcc71164c972a4ebccd - Author: git - Date: 2019-07-15 14:43:39 +0900 - - * expand tabs. - -commit 4b345f9d4bbff2cfc9895155fb0e8f90d1cac816 - Author: Yusuke Endoh - Date: 2019-07-15 14:42:22 +0900 - - compile.c: ignore the result of COMPILE by marking with NO_CHECK - - to suppress many warnings of Coverity Scan - -commit 0eafa1dce86be0e2f86a029271ec24cf6b577fad - Author: Hiroshi SHIBATA - Date: 2019-07-15 14:41:22 +0900 - - Fixed inconsitency locations of default gems. - -commit 1b59ed9b494104d3a571bb222ee843cd82d1c9ba - Author: Hiroshi SHIBATA - Date: 2019-07-15 14:39:10 +0900 - - Move helper file of logger to under the test/logger. - -commit 58065b87018a9d1ed972b8c856004bf75728da02 - Author: Rafael Mendonça França - Date: 2019-06-05 07:07:26 +0900 - - [ruby/logger] Add option to set the binary mode of the log device - - Without binmode strings with incompatible encoding can't be written in - the file. This is very common in applications that log user provided - parameters. - - We need to allow changing the binnary mode because right now it is impossible to use - the built-in log rotation feature when you provide a File object to the - LogDevice, and if you provide a filename you can't have binmode. - - https://github.com/ruby/logger/commit/9114b3ac7e - -commit f4064a0a0c24734b1ec98e6e2dbdf5e38e856c41 - Author: Jeremy Evans - Date: 2019-05-17 09:35:21 +0900 - - [ruby/logger] Set filename when initializing logger with a File object - - This should allow reopen to work. Requested in ruby issue #14595. - - https://github.com/ruby/logger/commit/bd367aff12 - -commit 2c22051b4b54482531e43915f5edef0c3d3a053b - Author: Samuel Williams - Date: 2019-03-21 12:58:17 +0900 - - [ruby/logger] Enable `frozen_string_literal: true` in `logger.rb`. - - https://github.com/ruby/logger/commit/2dc832e901 - -commit 3fdb963827fde7fbe1837763cb834842b8336fee - Author: Samuel Williams - Date: 2019-03-21 08:35:29 +0900 - - [ruby/logger] Prefer require_relative, it's a little bit faster. - - https://github.com/ruby/logger/commit/1e2aab4bea - -commit 7ef08562871ca6d209415f16f942f6cd2a67df54 - Author: sonots - Date: 2019-03-18 20:56:29 +0900 - - [ruby/logger] Update logger.gemspec - - https://github.com/ruby/logger/commit/1335a71d98 - -commit 7f10da9d2762d1b6d0f3c45df4a23bbdc2d78e4c - Author: sonots - Date: 2019-03-18 21:02:02 +0900 - - [ruby/logger] require 'logger/errors' just for compat - - https://github.com/ruby/logger/commit/255a51dc10 - -commit bbe157f34046ec9ef81e6ad9ed37c86a0d9155e4 - Author: Colby Swandale - Date: 2018-12-12 12:08:35 +0900 - - [ruby/logger] split logger classes/modules into separate files - - https://github.com/ruby/logger/commit/f10ce9fff2 - -commit 136196785b10f7cffa1e4d557bc3bcc0e863813a - Author: sonots - Date: 2019-03-18 19:34:01 +0900 - - [ruby/logger] Fix to use logger and test-unit in this repo with - - `ruby test/logger/test_xxx.rb` - - https://github.com/ruby/logger/commit/d3c2402340 - -commit 47500f2055467d0c72c7ce53b2535d7610347fb0 - Author: Samuel Williams - Date: 2019-03-15 08:12:11 +0900 - - [ruby/logger] Add support for changing severity using bang methods. - - https://github.com/ruby/logger/commit/ae4c6dfcbb - -commit 310198d6be1ca5dc2f1279096d7134a02ee3d8ec - Author: Samuel Giddins - Date: 2019-01-18 03:13:20 +0900 - - [ruby/logger] Add missing closing " - https://github.com/ruby/logger/commit/b4b3caae40 - -commit 227eae79acde90e7c3ba171dbf4bdcedbb39a9f2 - Author: Samuel Giddins - Date: 2019-01-18 02:59:55 +0900 - - [ruby/logger] Say that logger requires ruby >= 2.3 - - Since it uses `&.`, it can't be used on older rubies - https://github.com/ruby/logger/commit/b872f90ab9 - -commit b9ba07a05c48176bfbba44133a9f3a43f387bedd - Author: Colby Swandale - Date: 2018-12-13 18:45:08 +0900 - - [ruby/logger] dont lock bundler to a specific version in travis - - https://github.com/ruby/logger/commit/eb5ac229a5 - -commit 99c14fb69491d52c474c3f303405e6f59b41034f - Author: Colby Swandale - Date: 2018-12-12 09:27:26 +0900 - - [ruby/logger] remove files that dont need to be included in gem releases - - https://github.com/ruby/logger/commit/9a3be8650f - -commit 3dc212896c422add43c850ee1d1a613c7cc96737 - Author: Koichi Sasada - Date: 2019-07-15 13:52:25 +0900 - - check return value of blocking_region_begin(). - - blocking_region_begin() can return FALSE if it fails to acquire - GVL, so check it. - -commit e4c1b199961cc5fa34c02b2225bbc14b75259fd2 - Author: Tanaka Akira - Date: 2019-07-15 14:17:27 +0900 - - add tests for orphan/not-orphan proc/lambda. - -commit 711dfec3fa9623c5e8ef6f5ce3627f8f1a85f19d - Author: Yusuke Endoh - Date: 2019-07-15 14:07:22 +0900 - - parse.y (here_document): remove dead code - - str is always zero when evaluating the branch. - Found by Coverity Scan. - -commit 5353401c254a926426d9a289606fad18a755fcd2 - Author: Yusuke Endoh - Date: 2019-07-15 14:02:45 +0900 - - thread.c (rb_thread_shield_waiting_{inc,dec}): prefer long to int - - `(unsigned int)(THREAD_SHIELD_WAITING_MASK>>THREAD_SHIELD_WAITING_SHIFT)` - is 0xffffffff, and w > 0xffffffff is always true. - Coverity Scan pointed out this issue. - -commit 62f34bd1fe9630b0e760860017955cec2d5fbd0a - Author: Kazuhiro NISHIYAMA - Date: 2019-07-15 13:57:43 +0900 - - doc/globals.rdoc: Add deprecated to TRUE,FALSE,NIL [ci skip] - - They are warned since 2.4.0. - -commit 9c38904ead89df7c41243f7a23dde3d07f22bd86 - Author: Takashi Kokubun - Date: 2019-07-15 13:56:32 +0900 - - Use consistent fetchDepth for all jobs - - a7dd6763bd1dac7952ace46be58083dbea332a0a was not applied for all jobs. - -commit d1e2650aca8ba340d98af22a08be20baf0abde0e - Author: Takashi Kokubun - Date: 2019-07-15 13:47:28 +0900 - - Force-fetch unicode update only when it's needed - - nobu said that we could be banned if we aggressively downloaded unicode - file from Travis. - -commit 929fa856ef8a9217b58dc43c9883c3202603c18e - Author: Kazuhiro NISHIYAMA - Date: 2019-07-15 13:44:50 +0900 - - Add tool/leaked-globals to .gitattributes [ci skip] - -commit b401fb35a4196ba0229622a1bcdc5966f10e8e5d - Author: Hiroshi SHIBATA - Date: 2019-07-15 13:42:37 +0900 - - Removed needless LOAD_PATH modification. - - We can use require_relative now. - -commit 99afea5328c61d3f212bbb684b33abf0d814f080 - Author: Jeremy Evans - Date: 2019-06-21 02:21:34 +0900 - - Add bug triaging guide - - Implements [Misc #15943] - -commit badfbdf32c26f44b93687698b4dca9dd95f70a75 - Author: Hiroshi SHIBATA - Date: 2019-07-15 13:15:13 +0900 - - Move vpath.rb into tool library directory. - -commit bd494ae79b18e260b0123bf40ddc1c694d7b25b8 - Author: Tanaka Akira - Date: 2019-07-15 12:59:53 +0900 - - add tests for "break" in lambda. - -commit 8ac1c6eb4837f5d088b7fc0a6ee51a5723f728a9 - Author: Koichi Sasada - Date: 2019-07-15 12:05:55 +0900 - - respect RUBY_DEBUG too - -commit 76bad330aae4ee867585dda3e547e5db740fc0f3 - Author: Yusuke Endoh - Date: 2019-07-15 12:00:12 +0900 - - encoding.c (enc_table_expand): prefer xrealloc to realloc - - And raise an exception when failed to register an encoding - -commit c23e5976744f1984b309f0af724fbd8ddea2c56a - Author: Koichi Sasada - Date: 2019-07-15 11:27:38 +0900 - - respect RUBY_DEBUG. - - see RUBY_DEBUG for each debug options. - -commit d02f2fc3e2b4d14793c3b25079787a8972ce49c8 - Author: Hiroshi SHIBATA - Date: 2019-07-15 11:19:13 +0900 - - Added help message for test-tool target. - -commit ac6d137157121381fb57e3febd34c84cb7ca47b2 - Author: Hiroshi SHIBATA - Date: 2019-07-15 11:16:05 +0900 - - Added test-tool target for the test suite of tool/test files. - -commit 41c5f9a166637bf9e49af19b3fa94163b51db64d - Author: Hiroshi SHIBATA - Date: 2019-07-15 10:43:12 +0900 - - Put jisx0208.rb to under the library directory. - -commit 73346823e1119a8e72baefab381dbe822c4c01f7 - Author: Takashi Kokubun - Date: 2019-07-15 11:04:12 +0900 - - Try to prevent random build failure on Travis osx - -commit 226d569e5729bc9ffa5a516f88251d99f404c7c7 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-15 11:01:57 +0900 - - doc/irb/irb.rd.ja: Update options from `irb -h` [ci skip] - -commit a7fdb22373442bb25e687a8f2df36fb5b85d2846 - Author: Nobuyoshi Nakada - Date: 2019-07-15 11:00:16 +0900 - - Enable RUBY_ASSERT_MESG_WHEN when RUBY_DEBUG is turned on - -commit 05cc87df1b5f7a125e24d64058d9ad1f75cdfd3f - Author: Kazuhiro NISHIYAMA - Date: 2019-07-15 10:51:58 +0900 - - [DOC] Struct::Passwd#uclass renamed from #class at r2500 [ci skip] - -commit e2512cff05b1d1cc60a03ef4388cab07531877ca - Author: aycabta - Date: 2019-07-15 10:39:44 +0900 - - Move a test file of Reline to test/reline/ - -commit f326b4f4af4963e252d24c4f7d7099fc607db859 - Author: Koichi Sasada - Date: 2019-07-15 10:39:28 +0900 - - simplify around GC_ASSERT() - -commit dd4f128ac5fa26e3d8c4d003c770e69f9ed9a91e - Author: Takashi Kokubun - Date: 2019-07-15 10:38:59 +0900 - - Handle failure of opening a null device - - This issue is detected by Coverity Scan. - -commit a191009a266e97453971f9b24f750861855aaa7b - Author: Takashi Kokubun - Date: 2019-07-15 10:29:39 +0900 - - Simplify start_process by exploiting C99 - - Having a block for mixing a declaration was confusing. - Also I moved `dev_null` and `pid` to limit their scope. - -commit b78964883037470f25755db740c09e835eadb5c9 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-15 10:26:50 +0900 - - Change PROMPT_S of simple-prompt - - When input `"` or `/` with simple-prompt, - - Before: - `"` or `/` - (prompt disappeared and indent is changed) - - After: - `"> "` or `/> /` - (indent is unchanged since `>> `) - -commit f6f09cbc76c3e47aec23898e024ff5bb5f061bc4 - Author: Koichi Sasada - Date: 2019-07-15 10:19:25 +0900 - - introduce RUBY_ASSERT_ALWAYS(expr). - - RUBY_ASSERT_ALWAYS(expr) ignores NDEBUG (we cannot remove this - assertion). - -commit 0af897ab59dfa3d06724f898f17bbf8a1970abd1 - Author: aycabta - Date: 2019-07-15 10:20:07 +0900 - - Simplify history saving code - -commit eed9db39e51f08fa84cbc20ffc7496f93828c06d - Author: Hiroshi SHIBATA - Date: 2019-07-15 10:11:07 +0900 - - Followed up e8ddbc0239. - -commit 223854ebe858a96560faac239f4c0e40d1af3943 - Author: Koichi Sasada - Date: 2019-07-15 09:58:26 +0900 - - catch up e8ddbc0239. - -commit 08b340d2f68daf6bbaba9be77ee7c17150bd7adb - Author: Hiroshi SHIBATA - Date: 2019-07-15 09:39:22 +0900 - - Separate the assertions of ruby core tests from test/unit/assertions. - -commit e8ddbc0239b9dfa32787e93c6942f085e5c42b49 - Author: Hiroshi SHIBATA - Date: 2019-07-15 08:54:34 +0900 - - Put colorize to library directory. - - Same as 66299e7ca83d379d13abaa5411f3e0419334cabb - -commit 0a711b0edff6eaf978cfc17cdd6a7cc6c17c6686 - Author: Hiroshi SHIBATA - Date: 2019-07-15 08:34:24 +0900 - - Put vcs .rb to under the lib directory. - - Because it's the common library for tool files. - -commit 8f7884761e30c453287d73de6ea733d565635ebc - Author: Tanaka Akira - Date: 2019-07-15 09:36:52 +0900 - - The default charset of text/* media type is UTF-8. - - Thanks for the patch gareth (Gareth Adams). [Bug #15933] - - ------- - - Combines two small, but very related changes - - 1: Treat HTTPS the same as HTTP - - Previously, OpenURI followed guidance in RFC2616/3.7.1: - - > When no explicit charset parameter is provided by the sender, media - > subtypes of the "text" type are defined to have a default charset - > value of "ISO-8859-1" when received via HTTP. - - However this RFC was written before TLS was established and OpenURI was - never updated to treat HTTPS traffic the same way. So, HTTPS documents - received a different default to HTTP documents. - - This commit removes the scheme check so that all text/* documents - processed by OpenURI are treated the same way. - - In theory this processing gets applied to FTP URIs too, but there's no - mechanism in OpenURI for FTP documents to have Content-Type metadata - appended to them, so this ends up being a no-op. - - 2: Change default charset for text/* to UTF-8 - - Replaces the default ISO-8859-1 charset previously defined in RFC2616 (now - obsoleted) with a UTF-8 charset as defined in RFC6838. - - Fixes: https://bugs.ruby-lang.org/issues/15933 - -commit 00a97d94122c256f4abe9375d19eaeb0f2eca201 - Author: Takashi Kokubun - Date: 2019-07-15 09:35:45 +0900 - - Always call va_end in form_args() - - This issue is detected by Coverity Scan. - -commit ff3704031a6c23ae2020576c4fecbdc6b1c91246 - Author: Nobuyoshi Nakada - Date: 2019-07-15 09:26:57 +0900 - - Insert a newline before `=end` - - For a certain editor which cannot handle here-document properly. - -commit a1975790731e1e9081e41e05b43516065b7d950a - Author: Yusuke Endoh - Date: 2019-07-15 08:36:57 +0900 - - addr2line.c: clarify the type of integer expression - - to suppress Coverity Scan warning. - This expression converted uint8_t to int, and then int to unsigned long. - Now it directly converts uint8_t to unsigned long. - -commit 0a417248a0ba6e4e5093f916dbf9b31e22f24078 - Author: Takashi Kokubun - Date: 2019-07-15 08:38:07 +0900 - - Fix unaligned help output - - 1f99274ccf31ba1f2a4b3ac20a9c6cdc5ae81152 was indenting details with a - hard tab, but other lines are using spaces. - -commit 02c4ed4a7f44a80d50c2d3e27f451b20c4360899 - Author: Takashi Kokubun - Date: 2019-07-15 08:36:51 +0900 - - Stop consuming 2 entries for goruby - - similar to 364f43ab7fc5920247fc73423c1428208cf78a4a and - 13cb9e6bd2c88d04fc9b21b8f8c1d192c67cd5a2 - -commit 17ccda54131e3e8f59fc5bc5be044aef78e2854c - Author: aycabta - Date: 2019-07-15 08:32:50 +0900 - - Use #to_a for Readline::HISTORY directly - -commit 9da969cae73b88a9e7acd761f184bd5275febdf7 - Author: Takashi Kokubun - Date: 2019-07-15 08:32:45 +0900 - - Revert "Dummy Makefile.in for CIs" - - This reverts commit c55de95ff1c4ea6313c2863037703a0e5f0d0f4f. - - Probably this is not needed for CI anymore. - -commit 1f99274ccf31ba1f2a4b3ac20a9c6cdc5ae81152 - Author: Hiroshi SHIBATA - Date: 2019-07-15 08:19:49 +0900 - - Added the bundled gems target to make help. - -commit 13cb9e6bd2c88d04fc9b21b8f8c1d192c67cd5a2 - Author: Yusuke Endoh - Date: 2019-07-15 08:18:30 +0900 - - common.mk: remove "make exam" from help - - Currently it is completely the same as "make check". - I think it is not worth mentioning now. - -commit 2b78a93bcfdc8884646cae88dffe06da6bdb6213 - Author: aycabta - Date: 2019-07-15 07:58:15 +0900 - - Add lib/irb/color.rb to destribution file list - -commit c9a59f491d0851c30e2f371eafcec486ce8ba27b - Author: Yusuke Endoh - Date: 2019-07-15 07:59:11 +0900 - - Add a /* fall through */ comment - -commit 772dae8bef36e3111b8e03fc6297cc99a959ae4b - Author: Yusuke Endoh - Date: 2019-07-15 07:56:53 +0900 - - Add a /* fall through */ comment - -commit 266f6cd8a1dbf93ab5a99d3508f7f1cb5d348be1 - Author: aycabta - Date: 2019-07-15 07:54:47 +0900 - - Remove debug print - -commit 4b7a04a5b8a583e7e818155a73069a9e58a1a246 - Author: aycabta - Date: 2019-07-15 07:51:57 +0900 - - Support multiline irb_history - - A history line ends with "\" to escape newline if it's a continuous - line. - -commit d37da601289d13396b1e986b81d51b05bcfdddd5 - Author: Yusuke Endoh - Date: 2019-07-15 06:42:55 +0900 - - time.c (time_mdump): use another buffer for year_extend - - ruby_marshal_write_long may write 9 bytes, but buf has only 8 bytes. - So the buffer cannot be reused. This issue was found by Coverity Scan. - -commit ea711285737faac6471fc22f0b8f9e9365e7e6ed - Author: Takashi Kokubun - Date: 2019-07-15 06:22:22 +0900 - - Unify documentations of `make benchmark` - -commit e8b6f6303999fd39d367d3eb114193faad13bbca - Author: Takashi Kokubun - Date: 2019-07-15 06:17:29 +0900 - - Drop `make change` and tool/change_maker.rb - - because we're not writing ChangeLog anymore. - -commit 364f43ab7fc5920247fc73423c1428208cf78a4a - Author: Takashi Kokubun - Date: 2019-07-15 06:11:40 +0900 - - Reduce the number of make help entries - - We've added some more things recently. It seems not worth having almost - the same two entries there anymore. - -commit 0ee105f3f0a3b409bc08e6a1336c898038c1088f - Author: Takashi Kokubun - Date: 2019-07-15 06:08:55 +0900 - - Mention SPECOPTS variable in make help - -commit 10d7b39d5d3141073221d4e53a8e81b7808a11b6 - Author: aycabta - Date: 2019-07-15 02:58:28 +0900 - - Check whether prompt_i is nil - -commit 078e50c5e9c53d935bdea6ca3ae156c0edcea467 - Author: aycabta - Date: 2019-07-15 01:16:18 +0900 - - Save history in IRB is enabled by default - -commit 6d573691058b353840c504d16cc2df1eb0bb517c - Author: aycabta - Date: 2019-07-15 01:07:37 +0900 - - Auto indent in IRB is enabled by default - -commit 82b058ff6067269c04265844c7df08a2971b0335 - Author: aycabta - Date: 2019-07-15 00:43:16 +0900 - - Version 1.1.0.pre.2 - -commit d0b1a8d5fb56a20198c69d77d9ce65740d0ddcc2 - Author: aycabta - Date: 2019-07-15 00:42:45 +0900 - - Need reline-0.0.1 or later for some features - -commit cd7b99bbfccd69b6cd75421b738bcda36f920e0d - Author: aycabta - Date: 2019-07-15 00:15:01 +0900 - - Version 0.0.1 - -commit 04e6b90d5be8f13344066de0d64ba11020e2c094 - Author: manga_osyo - Date: 2019-06-29 23:51:24 +0900 - - Remove unused method. - -commit 423feb53a20f323d6b7e27e132e68b70b888ffe9 - Author: Marcus Stollsteimer - Date: 2019-01-04 08:07:34 +0900 - - [ruby/matrix] Add Matrix::VERSION constant - - Add Matrix::VERSION for the gem version, use it in the gemspec, - and make it also available for library users. - - https://github.com/ruby/matrix/commit/65c2bb1fa1 - -commit 4403130193ac895820d9ccc8ec2ab13de37bfea6 - Author: Marcus Stollsteimer - Date: 2019-01-04 08:00:06 +0900 - - [ruby/matrix] Add missing `lib/matrix/' files to file list in gemspec - - https://github.com/ruby/matrix/commit/2bbb9be233 - -commit 3201062adf7f98f645b659852bd9fa6f566cb1dd - Author: Yusuke Endoh - Date: 2019-07-15 00:31:07 +0900 - - Add a /* fall through */ comment - -commit 970c12551efed86074d9c3440f82551795cbde6a - Author: Yusuke Endoh - Date: 2019-07-15 00:30:35 +0900 - - Add a /* fall through */ comment - -commit 9e3971c3ade4a2fd5c5d3123f9437fa3af352655 - Author: Yusuke Endoh - Date: 2019-07-15 00:29:56 +0900 - - Add a /* fall through */ comment - -commit deb5e582308950cdceb510807f498a7733dc076f - Author: Yusuke Endoh - Date: 2019-07-15 00:19:41 +0900 - - ext/stringio/stringio.c (strio_read): "binray" is always zero here - - Remove unused conditional expression to suppress Coverity Scan warnings. - -commit e6f188ea031db9bd7ac0d2931242eebc83b5aac7 - Author: manga_osyo - Date: 2019-06-25 22:08:15 +0900 - - Rename to Reline::History::Test. - -commit 073cc52dcc5f0945e56877c703688517f58c6a65 - Author: manga_osyo - Date: 2019-06-23 13:29:09 +0900 - - Add `class Reline::History` and test. - -commit 9806da50f49843c6983e3110a23ab7822c2e089d - Author: Masataka Pocke Kuwabara - Date: 2019-06-13 16:09:02 +0900 - - Suppress warnings - -commit 83171b0ee8dc8000819259bde764ea9ca3489290 - Author: aycabta - Date: 2018-12-27 07:09:56 +0900 - - [ruby/rdoc] Bump version to 6.1.1 - - https://github.com/ruby/rdoc/commit/55c0627fe0 - -commit 312d72000a5b49064670c1a7f4c2ad5e167d292b - Author: poloka - Date: 2018-12-27 04:06:23 +0900 - - [ruby/rdoc] Correction to include regexp_handling in list of loaded files - - https://github.com/ruby/rdoc/commit/1940b2318c - -commit 09187c64b8dcea6a6ed6134e939a2e0ca88a2bd6 - Author: Yusuke Endoh - Date: 2019-07-15 00:10:39 +0900 - - Add a /* fall through */ comment - -commit 517c8a532425a28ee2641fc100a91a691b501fe8 - Author: Yusuke Endoh - Date: 2019-07-15 00:08:34 +0900 - - dir.c (dir_each_entry): remove unnecessary check - - I guess that this check was to detect re-entrance (maybe callcc?). - But currently it does not work as intended. - -commit 721fc849370d88b87703b00ed1442295c1a94027 - Author: git - Date: 2019-07-15 00:08:33 +0900 - - * 2019-07-15 - -commit b4975693ed1ac46be081e02d82a6dfb7aea0e1c0 - Author: Yusuke Endoh - Date: 2019-07-15 00:07:32 +0900 - - process.c (p_sys_setregid, p_sys_setresgid): remove unused tmp buffer - - To suppress Coverity Scan warning - -commit 80da68db1e770c877782cdf571d96fd89e7774dd - Author: Yusuke Endoh - Date: 2019-07-14 23:36:23 +0900 - - Add a /* fall through */ comment - -commit 43c337dfc18676e95f9fb9b1d6bf3beb3ec6b306 - Author: Yusuke Endoh - Date: 2019-07-14 23:04:48 +0900 - - string.c (str_succ): refactoring - - Use more communicative variable name - -commit 3fd086ed565e6156db5e64a5c42469db331a6237 - Author: Yusuke Endoh - Date: 2019-07-14 23:04:16 +0900 - - string.c (str_succ): remove a unnecessary assignment - - This change will suppress Coverity Scan warnings - -commit 198281a71d95c1a48445dc6e913bc1bd62350054 - Author: Kouhei Sutou - Date: 2019-04-23 05:54:44 +0900 - - [ruby/csv] Fix a bug that strip: true removes newlines - - https://github.com/ruby/csv/commit/5540d35a30 - -commit 8c0edbd79d59789b9543d00322d6bde72f86bfda - Author: kawa_tech <49791334+kaerunote@users.noreply.github.com> - Date: 2019-04-20 16:37:52 +0900 - - [ruby/csv] add options doc :quote_empty (#89) - - - https://github.com/ruby/csv/commit/5ca8d79f60 - -commit 75620c804ea47de040016ccf9766c016f2934df2 - Author: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> - Date: 2019-04-20 00:42:40 +0900 - - [ruby/csv] Add options doc: :write_converters, :write_nil_value, :write_empty_value (#87) - - - https://github.com/ruby/csv/commit/5923ee08b7 - -commit fe40841bfb031d278daea5b05fb13084f887fec5 - Author: hayashiyoshino - Date: 2019-04-19 20:59:38 +0900 - - [ruby/csv] add document of strip (#88) - - * add document of strip - - * modify typo - - https://github.com/ruby/csv/commit/de0257dc31 - -commit c8b82998d4fbbb8988b0f2458327697918a9e1a2 - Author: Kouhei Sutou - Date: 2019-04-17 22:05:12 +0900 - - [ruby/csv] Bump version - - https://github.com/ruby/csv/commit/3976985008 - -commit 8392592a0a33bb9103a7aa968389fe50e304e062 - Author: Kouhei Sutou - Date: 2019-04-17 22:02:40 +0900 - - [ruby/csv] Don't raise on eof? - - GitHub: fix #86 - - Reported by krororo. Thanks!!! - - https://github.com/ruby/csv/commit/5a8d9d9297 - -commit 9171f833054cd47842e12fc0fd3cc1df704a9192 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-15 12:12:26 +0900 - - [ruby/csv] Refactor range in delete_suffix (#85) - - - https://github.com/ruby/csv/commit/7ff57a50e8 - -commit 864e2a95d90d547fe83c847c01daa1c3ba4503de - Author: Kouhei Sutou - Date: 2019-04-15 11:05:20 +0900 - - [ruby/csv] Bump version - - https://github.com/ruby/csv/commit/312f844693 - -commit 85497744305fcd7ff2b7768867f68c8fac03c8a0 - Author: Hiroshi SHIBATA - Date: 2019-07-14 22:05:39 +0900 - - Tweak upstream information of upstream commit. - -commit 0bf829c17b92c608bc374f03a63b89a940d61955 - Author: Yusuke Endoh - Date: 2019-07-14 23:02:23 +0900 - - transcode.c (rb_trans_conv): remove unnecessary assignments - - This change will suppress Coverity Scan warnings - -commit 36f2d9bac2c0e6dacc0488448c05dfde6ef2b23a - Author: Yusuke Endoh - Date: 2019-07-14 22:46:34 +0900 - - numeric.c (fix_cmp): remove a unreachable return statement - -commit 49362ddac60bb9d348cbcd8b7c003f52f5ffa1f5 - Author: Yusuke Endoh - Date: 2019-07-14 22:20:47 +0900 - - Add a /* fall through */ comment - -commit d0f113f6c169a618c41a857d2536c89b86c58d75 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 22:05:22 +0900 - - doc/globals.rdoc: Add RUBY_REVISION [ci skip] - -commit ab31e13e7513ffb08af41b0fc5f779c8d4a78fc2 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 22:03:52 +0900 - - doc/globals.rdoc: Add RUBY_PATCHLEVEL [ci skip] - -commit 9a402cf61f5ab86944c52466ae2e4db95bcc5f90 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 21:57:44 +0900 - - doc/globals.rdoc: Add RUBY_COPYRIGHT [ci skip] - -commit 5d606b5174a8842a6cf6397ee9c9e07736d6af8f - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 21:56:45 +0900 - - doc/globals.rdoc: Add TOPLEVEL_BINDING [ci skip] - -commit 7ac7685fa7a266e74102ac8ed067035ebfebe6e6 - Author: Takashi Kokubun - Date: 2019-07-14 22:12:33 +0900 - - Simplify link_o_to_so arguments - - by C99 compound literal for array and non-constant array initializer - -commit b7ec77f3614d7a89a47466f240d53abc0f967d19 - Author: Tanaka Akira - Date: 2019-07-14 22:04:27 +0900 - - fix typos. - -commit 085d0e5ccb7cecb1f761c1d3c72caeeedafc7d04 - Author: Yusuke Endoh - Date: 2019-07-14 21:56:39 +0900 - - ruby.c (name_match_p): remove unnecessary condition - - It always returns immediately when len was decremented to zero. - So len is always positive. This change will suppress Coverity Scan - warning. - -commit a3493521a55e32081520be805a764fd2ad43fe7b - Author: Hiroshi SHIBATA - Date: 2019-07-14 21:52:49 +0900 - - abort sync commit history when it failed to modify commit message. - -commit 8e6a68c18edeb8dfef494862093539d987b6ad6a - Author: Hiroshi SHIBATA - Date: 2019-07-14 21:49:10 +0900 - - Use force flag for filter-branch. - -commit c8e1be6f1fed7f4f54d5ac1f7ae1ebe2c0f60dbe - Author: Hiroshi SHIBATA - Date: 2019-07-14 17:53:14 +0900 - - Skip merge commit with rubygems and bundler. - -commit 46491af74ca2266aae0157b79a44898a2f4b728d - Author: Hiroshi SHIBATA - Date: 2019-07-14 21:31:16 +0900 - - Modified commit message with upstream repository name. - -commit 265e94a7fa96c918c4278ae58bf6e5cdb018906d - Author: Hiroshi SHIBATA - Date: 2019-07-14 17:15:06 +0900 - - Added chrry-pick feature from upstream repository. - -commit be082e28003543eff5ff07cf5261dbf7b6278a50 - Author: Hiroshi SHIBATA - Date: 2019-07-14 16:56:39 +0900 - - Try to sync with commit history for default gems. - -commit d8cc41c43be65dd4b17e7a6e38f5a7fdf2b247d6 - Author: Takashi Kokubun - Date: 2019-07-14 21:48:22 +0900 - - Fix a wrong buffer size to avoid stack corruption - - [Bug #15986] - -commit 20a3fb3c4b7c564ee7809ac1ed036b4874e47e26 - Author: Yusuke Endoh - Date: 2019-07-14 21:34:32 +0900 - - Add a /* fall through */ comment - -commit e8700b596b907ed0db80ccd398d9dfe1f0fe6dd1 - Author: Nobuyoshi Nakada - Date: 2019-07-14 20:52:49 +0900 - - Check the result of String#-@ - -commit 4900a10689036211da79c8189ff7eba11c8c81ee - Author: Tanaka Akira - Date: 2019-07-14 20:46:51 +0900 - - socket: use frozen string buffer when releasing GVL - - Thanks for the patch by normalperson (Eric Wong) [Bug #14204]. - -commit 5bd83909b961546ff6203ad088bfffeb8c19fceb - Author: Nobuyoshi Nakada - Date: 2019-07-14 18:02:02 +0900 - - Expand f_arg to use particular functions directly - -commit 1464f7a149264b02637fdd444f8a431f1692981a - Author: Nobuyoshi Nakada - Date: 2019-07-14 18:01:24 +0900 - - Expand f_abs to use particular functions directly - -commit 0df4a813ca8f9cb4d081c45ad91be3dd17bb06f1 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 20:33:41 +0900 - - NEWS: RubyVM.resolve_feature_path moved [ci skip] - -commit 41e09ca4becff3d573a5c8049624c664311492ae - Author: Yusuke Endoh - Date: 2019-07-14 20:23:29 +0900 - - addr2line.c (binary_filename): extend the buffer for NUL terminator - -commit a7dd6763bd1dac7952ace46be58083dbea332a0a - Author: Takashi Kokubun - Date: 2019-07-14 20:17:03 +0900 - - Increase fetchDepth to prevent checkout failure - - like https://dev.azure.com/rubylang/ruby/_build/results?buildId=1637 - -commit 45dfd4c09d399124ddc7abd1ae24e1e64019b333 - Author: Takashi Kokubun - Date: 2019-07-14 18:08:47 +0900 - - Make export declaration place more consistent - -commit 2553608c3b8dde72e8255e2306b5208813fff461 - Author: Nobuyoshi Nakada - Date: 2019-07-14 17:59:24 +0900 - - Removed binop macro which has not been used - -commit d30d404bc4b848f84959799b543de4bdbd8eef2b - Author: Takashi Kokubun - Date: 2019-07-14 18:04:14 +0900 - - MJIT Support for getblockparamproxy - -commit 043e3d2cdc02a3571e3e2c3b9252a65d3c049740 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 17:58:25 +0900 - - [DOC] Add missing headings [ci skip] - -commit 08c2a9dc599021668e11dee2f099a204122eab90 - Author: Nobuyoshi Nakada - Date: 2019-07-14 14:44:59 +0900 - - Introduce RUBY_DEBUG flag macro - - When RUBY_DEBUG is turned on, all RUBY_ASSERT() macros will be - enabled regardless RUBY_NDEBUG. - -commit 715955ff27206351dcf509eb3c60e0927ad9a708 - Author: Nobuyoshi Nakada - Date: 2019-07-14 13:06:22 +0900 - - Include ruby/assert.h in ruby/ruby.h so that assertions can be there - -commit db64093f512d93eb300131f52b7ddbd2d11f0aec - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 17:54:22 +0900 - - [DOC] Fix a typo [ci skip] - -commit db1c30b37fb0a837724cf5813e8684edc2639222 - Author: Yusuke Endoh - Date: 2019-07-14 17:53:45 +0900 - - addr2line.c (main_exe_path): avoid SEGV when /proc is not available - - readlink would return -1 if /proc is not mounted. - Coverity Scan found this issue. - -commit 47e571c9510a6d6e3f7d98a8a8800f391694bd19 - Author: Koichi Sasada - Date: 2019-07-14 17:48:11 +0900 - - complement '.rb' on `test-all TESTS=test_xxx` - - for test-all rule, we can specify a file with TESTS option like - `TESTS=test_xxx.rb`. However, we can eliminate last '.rb' suffix - so this patch try with '.rb' suffix if the given path is not available. - -commit b67b07bd5bd94433051b5e0a5db800f8b22361b4 - Author: Maxime Lapointe - Date: 2019-05-31 05:46:18 +0900 - - Fix links to headings - A previous change made the header's id be fully referenced (for the sidebar I believe) but this broke links to them. - This fixes the issue. - -commit 73904abb951ad60483124fa620b5561015906a79 - Author: git - Date: 2019-07-14 17:45:52 +0900 - - * expand tabs. - -commit 32f013514460574eed03aa678f87ed7ca9600872 - Author: Nobuyoshi Nakada - Date: 2019-07-14 13:05:16 +0900 - - Split RUBY_ASSERT and so on under include/ruby - -commit 5786df12f5c07510f9f15e984c564179afae33c0 - Author: Tanaka Akira - Date: 2019-07-14 17:44:33 +0900 - - Describe about Pathname.glob. - -commit 4d9504fe13c6470d9da74540f92a247e8c1d9b99 - Author: Tanaka Akira - Date: 2019-07-14 17:39:21 +0900 - - Delegates 3 arguments for Pathname.glob. - - Thanks for the patch by pocke (Masataka Kuwabara) [Feature #14405]. - -commit 61577fa53bd1ce949912c3b1281668e0ccbcda37 - Author: Yusuke Endoh - Date: 2019-07-14 17:32:49 +0900 - - Add a /* fall through */ comment - -commit 6bca4437dea5da28b8b7e5f1cb87561f2772a03d - Author: Tanaka Akira - Date: 2019-07-14 17:22:13 +0900 - - Describe warning of open-uri. - -commit 05aac90a1bcfeb180f5e78ea8b00a4d1b04d5eed - Author: Tanaka Akira - Date: 2019-07-14 17:18:17 +0900 - - Warn open-uri's "open" method at Kernel. - - Use URI.open instead. - - Thanks for the patch by jeremyevans0 (Jeremy Evans) [Misc #15893]. - -commit 9987296b8b5b7c02fca92761e498764dfeb584cf - Author: git - Date: 2019-07-14 17:16:35 +0900 - - * expand tabs. - -commit 934e6b2aeb495686f7fe0d8b1c69d863e6fca072 - Author: Yusuke Endoh - Date: 2019-07-14 17:15:44 +0900 - - Prefer `rb_error_arity` to `rb_check_arity` when it can be used - -commit 10de5f149acc620e12be5943e4e29f4f555b7551 - Author: Nobuyoshi Nakada - Date: 2019-07-14 16:31:36 +0900 - - Calculate float complex division per each part - - Arguments to f_complex_new2 should not be Complex, or violate the - assertion. - -commit 83153bbb149f5c827c4ce537722d3169d24b9de9 - Author: git - Date: 2019-07-14 16:18:48 +0900 - - * expand tabs. - -commit 73fab16e76d3879d2a099e2ce949b6b03f227d86 - Author: Yusuke Endoh - Date: 2019-07-14 16:17:49 +0900 - - compile.c (defined_expr): return void instead of int - - It always returned 1. - -commit 95de69df9906cde96d30aa2fbc6f5ed4891fdb9f - Author: Yusuke Endoh - Date: 2019-07-14 15:23:15 +0900 - - io.c (rb_file_open_internal): initialize all the fields - - Just for case. This will suppress the warning of Coverity Scan. - -commit 2618db3011edb07fffb9250137ea3a3a6c87cec4 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 16:00:34 +0900 - - [DOC] Fix typos [ci skip] - -commit f2d99fd8209058e75d5d1c56d179509c06486107 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 15:41:45 +0900 - - [DOC] Fix indent [ci skip] - -commit 3163a07878dfcefe7914067e58de78049b056624 - Author: Luke Gruber - Date: 2019-06-09 03:55:41 +0900 - - fix issue with 'SIGINT' handling in LineEditor#reset - - @old_trap is the string "DEFAULT" and not a callable object (Proc) - if there are no other signal handlers for SIGINT signal to chain. - -commit 47b04557b01dc109ccafc33db8e80148f07457a9 - Author: Koichi Sasada - Date: 2019-07-14 15:42:55 +0900 - - Method#inspect with source location. - - Method#inspect shows with source location. - [Feature #14145] - -commit 4ce935cd5dde69b39bb98b8948d41e3afba81e33 - Author: Hiroshi SHIBATA - Date: 2019-07-14 15:22:12 +0900 - - Removed FileUtils for file manipulations with module inclusion. - -commit a73f45247652d563e4043af8d14964b9d911fe81 - Author: Hiroshi SHIBATA - Date: 2019-07-14 15:21:27 +0900 - - Use FileUtils.mkdir_p instead of mkdir command directoly. - -commit e91ff4dbaf0bdbf7185b485b43cd9393419efd11 - Author: Hiroshi SHIBATA - Date: 2019-07-14 15:20:25 +0900 - - Use FileUtils.cp_r instead of cp command directoly. - -commit d25f355c655704d483ca402d0ac2644adb5733b0 - Author: Hiroshi SHIBATA - Date: 2019-07-14 15:07:17 +0900 - - Fixup dccb0e1ec94e7b9c13c715939ae7e0ccc4ffb23e - -commit 7d24a7ed7bae3adec131920d98c0b321e9d3e286 - Author: Hiroshi SHIBATA - Date: 2019-07-14 14:29:38 +0900 - - Use FileUtils.rm_rf instead of rm command directly. - -commit 7504d676c8ee245bb3b117e743fb3921a3ab56f7 - Author: Hiroshi SHIBATA - Date: 2019-07-14 14:17:06 +0900 - - Do not use hard-coded file path of default gems upstream. - -commit 357f295a0e97a105e51d0b3a4b5c062c55dffe92 - Author: Tanaka Akira - Date: 2019-07-14 15:01:39 +0900 - - Describe lambda-ness of Proc more. - -commit dda2c860d97ce3149361b143c9ccc5ed1a2f1af2 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 14:59:34 +0900 - - [DOC] Fix link to feature [ci skip] - -commit 6da539be3ec9e9ba7a45877108d095dcb349cabe - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 14:52:31 +0900 - - Fix typos [ci skip] - -commit 4f351111b811a7437f8356172a6cc59d8fb37022 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 14:40:38 +0900 - - NEWS: warning of flip-flop is reverted [ci skip] - -commit 421dd3114579f90ecced6cf221828a730357b50f - Author: Kazuhiro NISHIYAMA - Date: 2019-07-14 14:33:28 +0900 - - [DOC] Fix experimental marker [ci skip] - -commit 219643c075d9f5641307853cae052383bb289a11 - Author: Yusuke Endoh - Date: 2019-07-14 14:27:45 +0900 - - Add a /* fall through */ comment - -commit 34b3ef29b60f1351130f2ccc8adf3d174861233c - Author: Takashi Kokubun - Date: 2019-07-14 14:09:32 +0900 - - Drop obsoleted mjit_cancel_ivar debug_counter - - ivar_cancel label is handling mjit_cancel_ivar_inline instead. - -commit ff5b149435f6ae167df6cc8a17ad49b4c92209f1 - Author: git - Date: 2019-07-14 14:04:34 +0900 - - * expand tabs. - -commit ba94404f7021fae41a827e080be6d5dd0bbac8e4 - Author: Yusuke Endoh - Date: 2019-07-14 14:03:44 +0900 - - Add /* fall through */ comments - - to suppress some Coverity Scan warnings - -commit 1d46642487d5340cf6c1f17b36ff0f64b0c1595c - Author: git - Date: 2019-07-14 13:57:57 +0900 - - * expand tabs. - -commit 315d3adf0f9660568bdca01fd6ddd196c92973d2 - Author: Yusuke Endoh - Date: 2019-07-14 13:49:39 +0900 - - Avoid io_tell whose return value is not used - - In this case, flush_before_seek is enough. - This change will suppress a warning of Coverity Scan. - -commit 18603e9046c0baa23560268e16ead6bbc27726c2 - Author: Takashi Kokubun - Date: 2019-07-14 12:55:57 +0900 - - Update dependencies for 369ff79394765ce198ac7cee872a8c739d895aaa - - Just copy-pasting diff from - https://travis-ci.org/ruby/ruby/jobs/558407687 - -commit 4402c669785e7343cd65e4e90e436a3f8a3e00b5 - Author: Takashi Kokubun - Date: 2019-07-14 12:53:39 +0900 - - Refactor mjit_worker command line with C99 - - Mostly non-constatnt array initializer, and mixed declarations and code. - -commit 369ff79394765ce198ac7cee872a8c739d895aaa - Author: Martin Dürst - Date: 2019-07-14 10:58:50 +0900 - - add encoding conversion from/to CESU-8 - - Add encoding conversion (transcoding) from UTF-8 to CESU-8 - and back. CESU-8 is an encoding similar to UTF-8, but encodes - codepoints above U+FFFF as two surrogates, these surrogates - again being encoded as if they were UTF-8 codepoints. This - preserves the same binary sorting order as in UTF-16. It is - also somewhat similar (although not exactly identical) to an - encoding used internally by Java. - - This completes issue #15995. - - enc/trans/cesu_8.trans: Add encoding conversion from/to CESU-8 - test/ruby/test_transcode.rb: Add tests for above - -commit ac2866005b96baf986072f86ecd3dfd887f2bda3 - Author: Nobuyoshi Nakada - Date: 2019-07-14 01:41:55 +0900 - - Add empty depend file if extconf.rb only exists - -commit 69a66e8a8b492610eba77123de44e97d25012a41 - Author: git - Date: 2019-07-14 01:32:27 +0900 - - * 2019-07-14 - -commit dcb8c41a1e2146cc67c638ec391436e1ab2323d2 - Author: Nobuyoshi Nakada - Date: 2019-07-14 00:50:12 +0900 - - Added depend files - -commit 1a4f7c9bfae484bd9806efc8d1d8074b23e382bf - Author: Nobuyoshi Nakada - Date: 2019-07-13 23:32:18 +0900 - - [DOC] Markup code in globals.rdoc - - Look forward to further improvements in RDoc to automatically mark - up global variables and global constants. - -commit 6ef73c14725b90ae1fb0ec017564d560d05d8c01 - Author: Benoit Daloze - Date: 2019-07-13 22:47:37 +0900 - - Improve documentation in doc/globals.rdoc - -commit 237b3e00c72bff89b97d04d0a15200949ac1ee56 - Author: Benoit Daloze - Date: 2019-07-13 22:39:54 +0900 - - Document $~ before dependent global variables - -commit b1ee7148f8f9007d7154bf147daecc8c70dc44a3 - Author: Benoit Daloze - Date: 2019-07-13 22:35:16 +0900 - - Improve documentation of $LOAD_PATH - -commit 0a5463f7645f6366e2239268de5bc56c0dfea9d1 - Author: Benoit Daloze - Date: 2019-07-13 22:26:47 +0900 - - Add $LOAD_PATH.resolve_feature_path in NEWS - -commit 4a935bc6f66fda448fb430c7627a2f175dcd0650 - Author: Benoit Daloze - Date: 2019-07-13 22:23:49 +0900 - - Document $LOAD_PATH.resolve_feature_path in globals.rdoc - - * RDoc does not seem to support documenting singleton object methods, - and making $LOAD_PATH a class as a workaround is too weird. - -commit b0f6f33094606e50296cb525184708454420e860 - Author: Benoit Daloze - Date: 2019-07-13 22:16:26 +0900 - - Document a few more RUBY_* constants - -commit 43677a2c58c82ddd630eb5267d1683e1c651c529 - Author: Benoit Daloze - Date: 2019-07-13 22:07:19 +0900 - - Document the long form of global variables and mention aliases on the same line - - * The longer forms are self-explanatory and I believe more often used. - * Same for ARGV and ARGF, describe them there and mention $* and $< just refer to them. - -commit e2bee86dc4ec60c8834b976b83491358c4cb5f00 - Author: Nobuyoshi Nakada - Date: 2019-07-13 09:48:12 +0900 - - Relaxed delta of nanosec from Float time - -commit 331eccf3fea016f074f08f8215a9120e0a30468c - Author: Nobuyoshi Nakada - Date: 2019-07-12 07:25:06 +0900 - - Removed useless `freeze`s from gemspec files - -commit fd9f26df005824f5b1f1f41adaf63f2ff57062a7 - Author: Nobuyoshi Nakada - Date: 2019-07-10 17:16:01 +0900 - - Drop fossil rubygems support - -commit 143581cf4e8dec363b9636fdcd215153d94673c5 - Author: Nobuyoshi Nakada - Date: 2019-07-12 07:23:00 +0900 - - Removed stub lines from gemspec files - -commit cbe623f1c787ff2117045c7c4f03a294dfdb9370 - Author: Masatoshi SEKI - Date: 2019-07-13 07:22:55 +0900 - - change default value of load_limit (ignore load_limit) - -commit 10d7419eb43969de209c1bbcd56b052679cfa8d1 - Author: git - Date: 2019-07-13 06:10:07 +0900 - - * 2019-07-13 - -commit 1ee17782e108222d07a1c6b58cf1c7521d188b32 - Author: Nobuyoshi Nakada - Date: 2019-07-10 17:15:18 +0900 - - Removed binary line - -commit ae599db22fa46d3c04329e09294ff0a31d7ebfbb - Author: Nobuyoshi Nakada - Date: 2019-07-12 17:57:28 +0900 - - * remove trailing spaces. - -commit 00b34b05921da35a97d78d17133ff94abd0ae22b - Author: Nobuyoshi Nakada - Date: 2019-07-12 17:52:12 +0900 - - Fixed duplicate test name - -commit a9ff21a282845f81527b18607d246be90ea6701e - Author: git - Date: 2019-07-12 15:02:29 +0900 - - * 2019-07-12 - -commit b9ad62ea13bfaf0cad2ffc48d724b342ee55c7c8 - Author: git - Date: 2019-07-12 15:02:25 +0900 - - * remove trailing spaces. - -commit a2adcd40df96acd1218cc60dc1810e83dbc124d8 - Author: Samuel Williams - Date: 2019-06-03 18:35:03 +0900 - - Add note about `STACK_GROW_DIR_DETECTION`. - -commit 5c8061a9e2a34df975846d724273cb5be7d74a7c - Author: Samuel Williams - Date: 2019-07-07 19:58:55 +0900 - - Make `stack_check` slightly easier to use in debugger. - -commit 012e954b472d2e47b03647ac0c8f745416d7db58 - Author: Samuel Williams - Date: 2019-06-02 10:48:47 +0900 - - Improved fiber benchmarks. Increase number of iterations. - -commit 8745fa2ff0fbff67031bdecfdeea684b15515a2c - Author: Nobuyoshi Nakada - Date: 2019-07-11 21:05:25 +0900 - - Default to true when no exception flag [Bug #15987] - -commit f74e23af32525b5f2db1729586c930e2becdae30 - Author: Nobuyoshi Nakada - Date: 2019-07-11 20:21:50 +0900 - - Fixed argument in the fallback function [Bug #15987] - -commit c2723e59c2a66a3d2fc8849b3b25c04c9333230a - Author: Nobuyoshi Nakada - Date: 2019-07-11 20:19:53 +0900 - - Removed wrong argument in the fallback function [Bug #15987] - -commit 4018eee4311a610dfaa2b2dca02c6f026b71eab7 - Author: git - Date: 2019-07-11 20:14:57 +0900 - - * expand tabs. - -commit 3e7d002118a92fad5934e11c75be6768a1476c1b - Author: Nobuyoshi Nakada - Date: 2019-07-11 19:20:53 +0900 - - Check exception flag as a bool [Bug #15987] - -commit cd069df36596d9bf7a6db8aaa0dcefdafb233a91 - Author: Nobuyoshi Nakada - Date: 2019-07-11 19:45:03 +0900 - - File::Stat uses Time#inspect - -commit 71ead0787283b469f5e834cb1868a8caa78702f1 - Author: aycabta - Date: 2019-07-11 17:21:00 +0900 - - Add arg check to Reline.dig_perfect_match_proc= - -commit 4e038a7e64a9d52eed59b8f05647d4e58d265ec3 - Author: Nobuyoshi Nakada - Date: 2019-07-11 14:29:35 +0900 - - Revert "parse.y: Deprecate flip-flops" - - This reverts commit bae638ad5b782c44c80efe33834cb9039279af46. - - [Feature #5400] - -commit d77b84ca82e1cef10ef06776a207151ef864b3ca - Author: Nobuyoshi Nakada - Date: 2019-07-11 14:05:34 +0900 - - $LOAD_PATH.resolve_feature_path - - Moved from RubyVM. [Feature #15903] - -commit d34303ad109b93445b01d0420c9a5bfeffafac38 - Author: Tanaka Akira - Date: 2019-07-11 13:04:07 +0900 - - remove an unused variable. - -commit 26d674fdc73cec3777d1a719b42ccbe54c18a966 - Author: Nobuyoshi Nakada - Date: 2019-07-11 11:58:35 +0900 - - Suppress warning on x64-mingw - -commit 50d85436f8f194aa78cd0e819471fe20767a5993 - Author: Tanaka Akira - Date: 2019-07-11 09:18:41 +0900 - - WEBrick::HTTPResponse create tempfile if required. - - WEBrick::HTTPProxyServer implements HTTP proxy using - WEBrick and Net::HTTP. - WEBrick accepts HTTP/1.0 clients and - Net::HTTP uses always HTTP/1.1. - - However HTTP/1.1 supports chunked transfer coding HTTP/1.0 doesn't. - - Chunked transfer coding doesn't require that - content-length before the content is sent. - But non-chunked transfer coding require content-length before - the content is sent. - - So, when HTTP/1.0 clients connects WEBrick::HTTPProxyServer and - origin server returns chunked response, - WEBrick::HTTPProxyServer needs to store whole content to - know the length of it. - - This patch do it using tempfile. - -commit d57ce99b7d187eb3af7749a056edeea443da93f6 - Author: git - Date: 2019-07-11 03:37:22 +0900 - - * 2019-07-11 - -commit 12762b76cba8ac4623a6c16e1fe60efafa3b7d1c - Author: Aaron Patterson - Date: 2019-07-11 01:12:28 +0900 - - Don't manipulate GC flags directly - - We need to disable the GC around compaction (for now) because object id - book keeping can cause malloc to happen and that can trigger GC. - -commit f91879a7b548284c93743168acfd11e3d2aeefac - Author: NARUSE, Yui - Date: 2019-07-10 15:49:10 +0900 - - handle_interrupt to defend monitor state [Bug #15992] - - If an exception is raised from another thread for example Timeout - and this thread is just after `mon_exit`'s `@mon_owner = nil`, - the exception breaks the state of MonitorMixin. To prevent that situation, - it need to block interruption in mon_enter and mon_exit. - -commit 1d2ec4b21647089598d0be3a8bc5f56a71b5e892 - Author: Nobuyoshi Nakada - Date: 2019-07-10 12:33:29 +0900 - - Added Etc::VERSION - -commit 612b7b6224db7965e1b11463a8a83569afda101f - Author: Nobuyoshi Nakada - Date: 2019-07-10 12:32:35 +0900 - - Removed unused files - -commit cc936402eb60fc0ccdafd47dc1e4f6f8ae0c4b9c - Author: Nobuyoshi Nakada - Date: 2019-07-10 03:02:01 +0900 - - C90 for old versions - -commit de4889ce5c5177ed276dfc840a5c07f69317096c - Author: Nobuyoshi Nakada - Date: 2019-07-10 02:07:13 +0900 - - Use the found version number - -commit 9c48472b1e895156c4a577cab4f06b74f4844fe5 - Author: Nobuyoshi Nakada - Date: 2019-07-10 01:57:18 +0900 - - Removed useless `freeze`s - -commit db844749af2da9cc06d90db0cb317ec379582afa - Author: Nobuyoshi Nakada - Date: 2019-07-10 01:21:05 +0900 - - Added StringIO::VERSION - -commit 49cad676351120927a9eda5fea58334c3d32f858 - Author: Nobuyoshi Nakada - Date: 2019-07-10 00:20:00 +0900 - - Removed duplicate assignment - - This `last_state` is set to `lex.state` just before the `switch` - statement, and `token_flush` nor `nextc` never change the state. - -commit 57b8ca21f122108ca832f94b4b0f6f8367e3a4fc - Author: git - Date: 2019-07-10 00:09:43 +0900 - - * 2019-07-10 - -commit d0ef5c21fb91f7a82910fc71d4d8e1a801266232 - Author: Nobuyoshi Nakada - Date: 2019-07-09 22:54:34 +0900 - - Check dependencies on Travis-CI - -commit b1be349bfb327753d9f971c9ef692896fac7df08 - Author: Nobuyoshi Nakada - Date: 2019-07-09 21:21:00 +0900 - - Make symlink to "ruby" only from the install-name - -commit 9f275f7971ee7e659e0965122b2bb57e785d0181 - Author: Hiroshi SHIBATA - Date: 2019-07-09 21:16:49 +0900 - - Restore support library for only test files that are digest and csv. - -commit f9a2440866a2df05fcbacf31c4f4e5e18b996e15 - Author: Hiroshi SHIBATA - Date: 2019-07-09 21:04:07 +0900 - - Restore support library for only test files. - -commit d905ff61e69ce4f9bc134285f3ac1859e1eb74a6 - Author: Nobuyoshi Nakada - Date: 2019-07-09 13:47:07 +0900 - - Update dependencies - -commit 8a831e5cb6de530502e22be06f19b30afd64635c - Author: Nobuyoshi Nakada - Date: 2019-07-09 13:10:08 +0900 - - Do not make Unicode tables timestamp phony - -commit 515e106fb73a1a3bc69b6f1670bbaaebf45fee30 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-09 13:00:34 +0900 - - [DOC] Add link to Enumerable#grep from Enumerable#select - -commit 4cda2e5013b1351b9da087fe534907fcd7e52770 - Author: Nobuyoshi Nakada - Date: 2019-07-09 10:58:12 +0900 - - Moved error messages - -commit 9b18cb341f08c725d74f667ef3724c4cc852fdbd - Author: git - Date: 2019-07-09 08:39:30 +0900 - - * 2019-07-09 - -commit 2a8be8ec33a238410e58864f59b6ffccfd0cc19d - Author: Nobuyoshi Nakada - Date: 2019-07-09 08:31:27 +0900 - - Suppress uninitialized instance variable warnings - -commit ad38f026457304d677fde5dfa0d4d256fd4d6509 - Author: Hiroshi SHIBATA - Date: 2019-07-08 20:31:40 +0900 - - Adopt the directory structure of ruby repository for racc extension. - -commit 995ae6d529d6bef62ca756d4b1dbc1e01f062b8a - Author: Nobuyoshi Nakada - Date: 2019-07-08 17:09:59 +0900 - - Check indent of `end` against `else` if present - -commit e0a3c547dd2690e5bfa4a03f59aed5315d926a82 - Author: Nobuyoshi Nakada - Date: 2019-07-08 16:05:04 +0900 - - Get rid of toplevel methods - -commit 93c9405e0e4879fe83937547daefb7e303b22b04 - Author: git - Date: 2019-07-08 16:00:29 +0900 - - * expand tabs. - -commit 663d58ffde9a57ae52a5aa3492098c72f7b4f32e - Author: Nobuyoshi Nakada - Date: 2019-07-08 15:13:59 +0900 - - Fix indent - -commit a8c54932ba4ba002e7046d36af85f940212df9d1 - Author: Nobuyoshi Nakada - Date: 2019-07-08 14:59:28 +0900 - - Renamed fib to fiber - -commit 612cad5d202cec168bcbfec0f148a577dbd98e8d - Author: Lourens Naudé - Date: 2019-07-03 08:29:33 +0900 - - Let struct dump_config in objspace fit in a single cache line - - Let dump_config boolean members roots and full_heap be bit flags - instead - - Closes: https://github.com/ruby/ruby/pull/2274 - -commit e9907122ed6d71de4601b0be22e39e4486636c69 - Author: Nobuyoshi Nakada - Date: 2019-07-08 13:03:50 +0900 - - Suppress a warning when `write_headers: true` - -commit a2e0aaea1b240d7df57dd7f7bece8effa539a5cb - Author: git - Date: 2019-07-08 10:59:04 +0900 - - * 2019-07-08 - -commit 3fcffceafd2bce7186851bf4899484c545a9ace8 - Author: Jeremy Evans - Date: 2019-07-08 02:49:53 +0900 - - Fix default argument values for OptParse::Switch#summarize - - The documentation describes these arguments being hashes, and the method - is called with hashes, so a hash default makes more sense. - - The method would fail previously if called without arguments and @short - or @long contained a non-integer value. - - Fixes [Bug #10928] - -commit c1ebb384fdc222b58398d89a877a06b7efd5e290 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-07 20:16:15 +0900 - - Fix a typo - -commit fc4dd7d3e20b4eaf02d1dd59787abdc4c6c24e3a - Author: Nobuyoshi Nakada - Date: 2019-07-07 19:05:33 +0900 - - Git branch name can contain `#{}` too - -commit 19a4c42d6124aa3bcdf2cd53d510b22acb2b5104 - Author: Nobuyoshi Nakada - Date: 2019-07-07 18:54:17 +0900 - - Unescape #{} in the last commit title - - Get rid of unknown escape sequence warning, as `#` is not a - special character in C. - - ``` - version.c:126:26: warning: unknown escape sequence '\#' [-Wunknown-escape-sequence] - fputs("last_commit=" RUBY_LAST_COMMIT_TITLE, stdout); - ^~~~~~~~~~~~~~~~~~~~~~ - revision.h:4:42: note: expanded from macro 'RUBY_LAST_COMMIT_TITLE' - ^~ - ``` - -commit 68e580402272cea7f98145c3c562cab565a37046 - Author: Lars Kanis - Date: 2019-07-06 21:32:39 +0900 - - Add coroutine context switch for i386-mingw32 - - It's essentially a translation of Context.asm from Intel - to AT&T syntax. - -commit a13636e756662e563e4c4dc802c6fa21cb6d7b52 - Author: Nobuyoshi Nakada - Date: 2019-07-07 18:17:51 +0900 - - Message to pipe should end with a newline - -commit a33948f40a64d038ef848783dcfb33d801bc7018 - Author: git - Date: 2019-07-07 15:50:58 +0900 - - * 2019-07-07 - -commit d548073f68ae719933c328686df224f74a60d366 - Author: Nobuyoshi Nakada - Date: 2019-07-07 15:45:10 +0900 - - Enable indentation warning against `if` just after `else` - - ```ruby - if false - puts 'false' - else if true - puts 'true' - end # -:5: warning: mismatched indentations at 'end' with 'if' at 3 - end - ``` - - [Feature #15990] - -commit 789e49dc7e36f2c19a3df6dfa348e95b7105061c - Author: Nobuyoshi Nakada - Date: 2019-07-07 14:43:54 +0900 - - Renamed column in token_info to indent - -commit 9d8855b6820a53020d034756f6ec523fc14f663b - Author: Nobuyoshi Nakada - Date: 2019-07-06 18:46:00 +0900 - - Added assertions for Unicode escaped CHAR scanner events - -commit f296c260ef3b2d1a9299dbb4a84df567972453f2 - Author: Jeremy Evans - Date: 2019-07-05 05:47:43 +0900 - - Fix segfault when using method reference operator without using result - - Fixes [Bug #15985] - -commit 688cef2169a438c1402a8870887a6406f29a824b - Author: Nobuyoshi Nakada - Date: 2019-07-06 12:31:11 +0900 - - Refactored width calculations - -commit 44aae5fee666e6767415c214e25e90f6ad565550 - Author: Nobuyoshi Nakada - Date: 2019-07-06 12:11:12 +0900 - - Simplified - -commit 833cfeb2260c460d05c75cc6d16fa992d881ec54 - Author: git - Date: 2019-07-06 07:20:29 +0900 - - * 2019-07-06 - -commit 89e178c7cb3b6ba196cfef76d9604e45849c64fc - Author: aycabta - Date: 2019-07-06 07:13:51 +0900 - - Fix showing document of ClassName.method_name in IRB - - In IRB, Time.new is split as "Time", ".", and "new". The receiver "Time" - is processed by #class method but it means that "Time" changes to - "Class". This commit fixes it. - -commit d746a41e85b746a90eef20c46d24880fe084ffc5 - Author: Nobuyoshi Nakada - Date: 2019-07-05 22:18:08 +0900 - - Multiple codepoints are not allowed at single character literal - - It has unintentionally passed since 2.5. - -commit 0a2f598d23ef54ce906ebe302cc06e07a16f9022 - Author: git - Date: 2019-07-05 19:01:15 +0900 - - * 2019-07-05 - -commit fae4489a3a70b7620716c76b53c87fd3171a7571 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-05 19:00:37 +0900 - - Fix a typo - -commit 6c2b59f9237843a4570d0ab932705b3fa5c18524 - Author: aycabta - Date: 2019-07-04 20:58:11 +0900 - - Support Control- and Meta- - -commit d9f8b88b47c141e7dcbc50eb10812acaeca2a325 - Author: aycabta - Date: 2019-07-04 19:34:08 +0900 - - Move a comment to proper place - -commit 6fa7ed453e81ef3e74b2699db0533eb79e815dbb - Author: aycabta - Date: 2019-07-04 19:29:07 +0900 - - Check commented out line in inputrc correctly - -commit 265b9a0edf48e96d053724c9676af953e920246c - Author: Nobuyoshi Nakada - Date: 2019-07-04 18:54:50 +0900 - - Parse key sequence more strictly - -commit 12e06d32f55dff7f35c66842e5d6901857132060 - Author: Nobuyoshi Nakada - Date: 2019-07-04 18:49:42 +0900 - - Use lstrip instead of gsub which can match only once - -commit ee861e43f70d827abd1f8d26b2e97920237348b4 - Author: Nobuyoshi Nakada - Date: 2019-07-04 18:46:34 +0900 - - Skip indented comment lines [Bug #15981] - -commit 0c3e6e86bdcb708d283dc57ed3c18ed1b40e4a17 - Author: Nobuyoshi Nakada - Date: 2019-07-04 18:12:08 +0900 - - Suppress uninitialized instance variable warnings - -commit f19e048d244c709e2990ddbb0f986e8b51357bd2 - Author: Nobuyoshi Nakada - Date: 2019-07-04 15:43:33 +0900 - - Do not dispatch a nil token in ripper - - As a comment token includes the newline, so delayed newline token - just follows it should not be dispatched. [Bug #11485] - - Co-Authored-By: Jeremy Evans - -commit 23c92b6f820f670994026423d4c7b5abcf51eafa - Author: Nobuyoshi Nakada - Date: 2019-07-03 14:44:20 +0900 - - Revert self-referencing finalizer warning [Feature #15974] - - It has caused CI failures. - - * d0cd0866d82a58933e5dccd073c753c0c2ad4eb5 - - Disable GC during rb_objspace_reachable_object_p - - * 89cef1c56b3a0f9c5e6ccc22a5044477a4fd16c1 - - Version guard for [Feature #15974] - - * 796eeb6339952d92ae1b353d450c7883e589852d. - - Fix up [Feature #15974] - - * 928260c2a613bbdd4402c300e0bf86ae7562e52a. - - Warn in verbose mode on defining a finalizer that captures the object - -commit 5d9e91afe08c470485333f6c6e034d05ea3ee908 - Author: git - Date: 2019-07-04 01:04:47 +0900 - - * 2019-07-04 - -commit c62aac108666e0c74a4a24d6b4200c3326b21b64 - Author: git - Date: 2019-07-04 01:04:44 +0900 - - * expand tabs. - -commit d0cd0866d82a58933e5dccd073c753c0c2ad4eb5 - Author: Nobuyoshi Nakada - Date: 2019-07-04 00:58:52 +0900 - - Disable GC during rb_objspace_reachable_object_p - - Try to fix CI breakage by [Feature #15974]. - -commit 9f1d67a68f55fe7a16840960e0817d362b16d5b2 - Author: Nobuyoshi Nakada - Date: 2019-07-03 23:52:52 +0900 - - Renamed to rb_objspace_reachable_object_p - -commit 7b9bb6f44a0dc891f41c06804e828790ba5fec6d - Author: aycabta - Date: 2019-07-03 23:37:46 +0900 - - Check code_block_open for whether code continues - -commit 6bd49b33c859e3893318b8ceb1f3e0dd0988144f - Author: Aaron Patterson - Date: 2019-07-03 21:52:51 +0900 - - Ensure that GC is disabled during compaction - - Various things can cause GC to occur when compaction is running, for - example resizing the object identity map: - - ``` - frame #24: 0x000000010c784a10 ruby`gc_grey [inlined] push_mark_stack(stack=, data=) at gc.c:4311:42 - frame #25: 0x000000010c7849ff ruby`gc_grey(objspace=0x00007fc56c804400, obj=140485906037400) at gc.c:4907 - frame #26: 0x000000010c78f881 ruby`gc_start at gc.c:6464:8 - frame #27: 0x000000010c78f5d1 ruby`gc_start [inlined] gc_marks_start(objspace=0x00007fc56c804400, full_mark=) at gc.c:6009 - frame #28: 0x000000010c78f3c0 ruby`gc_start at gc.c:6291 - frame #29: 0x000000010c78f399 ruby`gc_start(objspace=0x00007fc56c804400, reason=) at gc.c:7104 - frame #30: 0x000000010c78930c ruby`objspace_xmalloc0 [inlined] objspace_malloc_fixup(objspace=, mem=0x000000011372a000, size=) at gc.c:9665:5 - frame #31: 0x000000010c7892f5 ruby`objspace_xmalloc0(objspace=0x00007fc56c804400, size=12582912) at gc.c:9707 - frame #32: 0x000000010c89bc13 ruby`st_init_table_with_size(type=, size=) at st.c:605:39 - frame #33: 0x000000010c89c5e2 ruby`rebuild_table_if_necessary [inlined] rebuild_table(tab=0x00007fc56c40b250) at st.c:780:19 - frame #34: 0x000000010c89c5ac ruby`rebuild_table_if_necessary(tab=0x00007fc56c40b250) at st.c:1142 - frame #35: 0x000000010c89c379 ruby`st_insert(tab=0x00007fc56c40b250, key=140486132605040, value=140485922918920) at st.c:1161:5 - frame #36: 0x000000010c794a16 ruby`gc_compact_heap [inlined] gc_move(objspace=0x00007fc56c804400, scan=, free=, moved_list=140485922918960) at gc.c:7441:9 - frame #37: 0x000000010c794917 ruby`gc_compact_heap(objspace=0x00007fc56c804400, comparator=) at gc.c:7695 - frame #38: 0x000000010c79410d ruby`gc_compact [inlined] gc_compact_after_gc(objspace=0x00007fc56c804400, use_toward_empty=1, use_double_pages=, use_verifier=1) at gc.c:0:22 - ``` - - We *definitely* need the heap to be in a consistent state during - compaction, so this commit sets the current state to "during_gc" so that - nothing will trigger a GC until the heap finishes compacting. - - This fixes the bug we saw when running the tests for https://github.com/ruby/ruby/pull/2264 - -commit e44c9b11475d0be2f63286c1332a48da1b4d8626 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-03 19:25:05 +0900 - - Try to avoid `not delagated` error - - ``` - .../ruby/lib/delegate.rb:405:in `__getobj__': not delegated (ArgumentError) - ``` - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian9/ruby-master/log/20190703T063006Z.fail.html.gz - -commit 89cef1c56b3a0f9c5e6ccc22a5044477a4fd16c1 - Author: Nobuyoshi Nakada - Date: 2019-07-03 15:22:16 +0900 - - Version guard for [Feature #15974] - -commit dcedf0a008f07f38e570c70b3872fa37e837be4a - Author: Nobuyoshi Nakada - Date: 2019-07-03 14:16:36 +0900 - - Fix order of tests - - `check` includes `test-testframework`, `test-short` and its - preceding tests, but `test-all` does not. - -commit 10cc6bc4d9276023db21db1014969381de813ff8 - Author: Takashi Kokubun - Date: 2019-07-03 10:00:50 +0900 - - Just disable inlining with local variable for now - - This partially reverts commit 712a66b0741605f5b2db670a292b9bb352f8a716. - - The previous fix made CI strange like: - http://ci.rvm.jp/results/trunk-vm-asserts@silicon-docker/2124178 - - Let me just downgrade the behavior for now and deal with it later. - - [Bug #15971] - -commit 07e9a1d9986b36d9702b480de549c1301dd897e0 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-03 10:20:51 +0900 - - Debugging failures on x86_64-darwin17 of travis-ci - - https://travis-ci.org/ruby/ruby/jobs/553346285 - -commit 9f26242411fe56c661644d63a9be11530889ebe3 - Author: git - Date: 2019-07-03 04:26:53 +0900 - - * expand tabs. - -commit 796eeb6339952d92ae1b353d450c7883e589852d - Author: Nobuyoshi Nakada - Date: 2019-07-03 04:12:20 +0900 - - Fix up [Feature #15974] - - * Fixed warning condition - * Fixed function signature - * Use ident hash - -commit 928260c2a613bbdd4402c300e0bf86ae7562e52a - Author: Chris Seaton - Date: 2019-07-02 22:19:15 +0900 - - Warn in verbose mode on defining a finalizer that captures the object - - [Feature #15974] - - Closes: https://github.com/ruby/ruby/pull/2264 - -commit efde19ce440f8656c3ce631a1d2a56e830961e9d - Author: Nobuyoshi Nakada - Date: 2019-07-03 03:53:20 +0900 - - Revert expansion of test-all - -commit 712a66b0741605f5b2db670a292b9bb352f8a716 - Author: Koichi Sasada - Date: 2019-07-03 03:37:25 +0900 - - Revert "Avoid corrupting VM stack on inlined setlocal" - - This reverts commit ea30dd702512ff9df34fe8c71c825f8f901bf5b1. - because it fails when VM_CHECK_MODE=1. - -commit c07165be1d2bccc9e1c67a90d16259a9c929b56d - Author: git - Date: 2019-07-03 02:13:25 +0900 - - * expand tabs. - -commit bdddaa9f56702e1d3a58a14607e9881052424b53 - Author: Nobuyoshi Nakada - Date: 2019-07-03 02:09:01 +0900 - - Use rb_ident_hash_new instead of rb_hash_new_compare_by_id - - The latter is same as the former, removed the duplicate function. - -commit 0f283054e7f568f09fbfc952d57ea6daf4abbd88 - Author: Jeremy Evans - Date: 2019-06-20 02:44:54 +0900 - - Check that String#scrub block does not modify receiver - - Similar to the check used for String#gsub. Can fix possible - segfault. - - Fixes [Bug #15941] - -commit 7582287eb27e6b649789ce31ffdcbbb9ffcaf726 - Author: Jeremy Evans - Date: 2019-06-19 10:59:49 +0900 - - Make String#-@ not freeze receiver if called on unfrozen subclass instance - - rb_fstring behavior in this case is to freeze the receiver. I'm - not sure if that should be changed, so this takes the conservative - approach of duping the receiver in String#-@ before passing - to rb_fstring. - - Fixes [Bug #15926] - -commit a4b5aaa9a7225693168e43455de2e10c3721b789 - Author: Jeremy Evans - Date: 2019-06-18 07:48:44 +0900 - - Remove Changelog section from doc/contributing.rdoc [ci skip] - - Replace it with a section on commit message formatting. Also, - move the section on rebasing to the bottom, since that only - applies to committers and not most contributors. - - Fixes [Bug #14886] - -commit 40d31073b7e9e14e5169cffca82a424e35b71b95 - Author: git - Date: 2019-07-03 00:19:03 +0900 - - * 2019-07-03 - -commit ced640951b0e7164a12ea1770330eba3e6109fc2 - Author: Jeremy Evans - Date: 2019-06-18 03:33:44 +0900 - - Implement Array#minmax - - Array#minmax was previous not implemented, so calling #minmax on - array was actually calling Enumerable#minmax. This is a simple - implementation of #minmax by just calling rb_ary_min and - rb_ary_max, which improves performance significantly. - - Fixes [Bug #15929] - -commit 649753b7f5410552c70931e32c193d83df3af97e - Author: Yusuke Endoh - Date: 2019-07-02 23:45:13 +0900 - - Fix timezone issue for logger period's tests - - This is a retry of 181b966e7553ac53d034266a7cdc18664d080814. - "Revert "Add a missing tests for Logger::Period module"" is also - reverted. - -commit f1043090a2361019ea4f6832512ef47de3627cb2 - Author: Koichi Sasada - Date: 2019-07-02 23:36:27 +0900 - - Revert "Add a missing tests for Logger::Period module" - - This reverts commit 181b966e7553ac53d034266a7cdc18664d080814. - -commit ea30dd702512ff9df34fe8c71c825f8f901bf5b1 - Author: Takashi Kokubun - Date: 2019-07-02 23:32:09 +0900 - - Avoid corrupting VM stack on inlined setlocal - - setlocal relies on cfp->ep, and frame-omitted method inlining introduced - in Ruby 2.7 kept it wrong. - - This change might slow down frame-omitted method inlining for cfp->ep - manipulation, and it obviously complicates the implementation more. By - introducing an optimization that changes Ruby's local variable to C - local variable, we could optimize it and simplify the cfp->ep - manipulation later. - - [Bug #15971] - -commit 181b966e7553ac53d034266a7cdc18664d080814 - Author: Anton Davydov - Date: 2019-07-02 22:33:12 +0900 - - Add a missing tests for Logger::Period module - - Closes: https://github.com/ruby/ruby/pull/2266 - -commit e9ea494171745cc22f458952b0aaf4443820caa9 - Author: Nobuyoshi Nakada - Date: 2019-07-02 22:10:11 +0900 - - The behavior of statx(2) depends on the filesystem - - birthtime may not be supported on some filesystems, and - NotImplementedError can be raised. [Bug #15972] - -commit e8a2521abecc6738c3480ec9b3d8c7b341cb576f - Author: Hiroshi SHIBATA - Date: 2019-07-02 21:39:22 +0900 - - Adjust memory_status.rb under the tool directory. - -commit 4d6c35d33a3f8a2ab29b3aabcf74be0bd9e7bf98 - Author: Nobuyoshi Nakada - Date: 2019-07-02 15:22:22 +0900 - - Fix test-all substitution - -commit 6ffef8d459e6423bf4fe35cccb24345bad862448 - Author: Nobuyoshi Nakada - Date: 2019-07-02 14:41:34 +0900 - - Clean up temporary expired cert file - -commit 92dcee393acc33075b533a2e8f5ea24ee8a5f579 - Author: Nobuyoshi Nakada - Date: 2019-07-02 14:10:50 +0900 - - Clean up temporary directory for racc - -commit eb043c88881bfa968a289b095518ec196edd47ad - Author: Nobuyoshi Nakada - Date: 2019-07-02 11:46:58 +0900 - - ${} does not work with nmake.exe - -commit 0b858425e1e4f2de40dc0d8e5dd105a2fd93e478 - Author: Takashi Kokubun - Date: 2019-07-02 10:40:17 +0900 - - Use GitHub ruby.git for make-snapshot - - Previously @hsbt disabled https git clone from git.ruby-lang.org. - - Using git.ruby-lang.org for non-commit purposes is discouraged. GitHub - mirror is actually recommended because it's reliable than single-hosted - git.ruby-lang.org, the mirror is almost always well-maintained, and its - latency is very small (usually about 10s). - - So we should just use GitHub here. - - [Bug #15969] - -commit 7f3bc3529b3edb5512a32cda0ae8fe108af0beed - Author: Hiroshi SHIBATA - Date: 2019-07-02 09:48:17 +0900 - - Adjust jit_support file path. - -commit c6a131da64a949c3148565f0bfd7777f5a4a309c - Author: Nobuyoshi Nakada - Date: 2019-07-02 09:49:57 +0900 - - Removed test-almost from TEST_TARGETS - -commit 6e7e0bf25782644b4093e9bc957cbb08ca7ba99c - Author: Nobuyoshi Nakada - Date: 2019-07-02 09:45:29 +0900 - - Now test-almost equals to test-all - -commit 580b7600c726c5293351e695bf6cf50339ef939b - Author: Nobuyoshi Nakada - Date: 2019-07-02 09:44:37 +0900 - - Substitute autoconf variables by prereq.status - -commit 832b5094722477598c7f720584fb54c4b2f18228 - Author: Nobuyoshi Nakada - Date: 2019-07-02 09:43:33 +0900 - - with_different_ofs.rb has been moved too - -commit 83fed5a4edc56f045ca698118af5ba58fce155a0 - Author: Nobuyoshi Nakada - Date: 2019-07-02 09:37:10 +0900 - - Adjust minitest file path - -commit 934a3a926cfbed57bede5ffd018feda9a110381a - Author: Kazuhiro NISHIYAMA - Date: 2019-07-02 09:34:08 +0900 - - Prefer master rather than trunk in doc/contributing.rdoc [ci skip] - -commit 73923bf58305204d77c929670ee5dace2c95a6da - Author: Kazuhiro NISHIYAMA - Date: 2019-07-02 09:26:18 +0900 - - [DOC] Add LibreSSL [ci skip] - -commit b7fdeedbfd5d9f5250df7769837aee35a2362faa - Author: Nobuyoshi Nakada - Date: 2019-07-02 09:31:32 +0900 - - Renamed to get rid of name clash - -commit 5aed62454cec6556d476347f13947f83f6f7de4b - Author: Nobuyoshi Nakada - Date: 2019-07-02 09:26:11 +0900 - - Adjust minitest file path - -commit 4adfd5227f4f62c4e571d31e8bb07c40402f73b8 - Author: Hiroshi SHIBATA - Date: 2019-07-02 09:20:18 +0900 - - Removed needless exclude option related testframework. - - They are moved under the tool directory now. - -commit f47254d2162a95174ab7d1659bf6ec5a933bd0ca - Author: Nobuyoshi Nakada - Date: 2019-07-02 09:19:38 +0900 - - colors file has been moved from test to tool - -commit 897b1e05623996ea1003c812e7705a2d197464b3 - Author: Hiroshi SHIBATA - Date: 2019-07-02 08:00:29 +0900 - - Fixed the wrong path for COVERAGE. - - ref. c3c0e3f5c9444c197779cb242de46dfffda79dec - -commit c68781e9181cb43af1bac29b3c974887205c3bf3 - Author: Hiroshi SHIBATA - Date: 2019-07-01 21:05:55 +0900 - - Split test files for test-framework that are test-unit and minitest to tool directory. - -commit c3c0e3f5c9444c197779cb242de46dfffda79dec - Author: Hiroshi SHIBATA - Date: 2019-06-29 19:43:47 +0900 - - Move to tool/lib from test/lib. - -commit 142617c8e1cad65fa483c5beb78ab40a99626a87 - Author: Jeremy Evans - Date: 2019-07-02 07:33:13 +0900 - - Don't use native realpath(3) on Solaris - - CI shows it does work on Solaris 11, but does not work on Solaris - 10. However, until I figure out a good way to differentiate - between Solaris 10 and 11, this should get CI passing on both. - -commit f53d7e4bfd604be6f8131c5460c29f4af16da117 - Author: Jeremy Evans - Date: 2019-06-15 08:53:42 +0900 - - Raise TypeError if calling ENV.freeze - - Previously, you could call ENV.freeze, but it would not have - the desired effect, as you could still modify ENV. - - Fixes [Bug #15920] - -commit 93328b5237c515878dacfa7350688b016333225d - Author: git - Date: 2019-07-02 04:14:17 +0900 - - * expand tabs. - -commit 11c311e36fa6f27a9144b0aefe16bdffea651251 - Author: Jeremy Evans - Date: 2019-04-28 12:18:55 +0900 - - Use realpath(3) instead of custom realpath implementation if available - - This approach is simpler than the previous approach which tries to - emulate realpath(3). It also performs much better on both Linux and - OpenBSD on the included benchmarks. - - By using realpath(3), we can better integrate with system security - features such as OpenBSD's unveil(2) system call. - - This does not use realpath(3) on Windows even if it exists, as the - approach for checking for absolute paths does not work for drive - letters. This can be fixed without too much difficultly, though until - Windows defines realpath(3), there is no need to do so. - - For File.realdirpath, where the last element of the path is not - required to exist, fallback to the previous approach, as realpath(3) - on most operating systems requires the whole path be valid (per POSIX), - and the operating systems where this isn't true either plan to conform - to POSIX or may change to conform to POSIX in the future. - - glibc realpath(3) does not handle /path/to/file.rb/../other_file.rb - paths, returning ENOTDIR in that case. Fallback to the previous code - if realpath(3) returns ENOTDIR. - - glibc doesn't like realpath(3) usage for paths like /dev/fd/5, - returning ENOENT even though the path may appear to exist in the - filesystem. If ENOENT is returned and the path exists, then fall - back to the default approach. - -commit 81fe82be4e5040b314717e8d6f9ba12de222b6e6 - Author: Jeremy Evans - Date: 2019-07-02 03:44:12 +0900 - - Enable native fiber coroutines on i386-openbsd - -commit 005dadf3c113226d18b6c63ffbe9cb00419bf797 - Author: git - Date: 2019-07-02 03:35:08 +0900 - - * 2019-07-02 - -commit 776759e300e4659bb7468e2b97c8c2d4359a2953 - Author: aycabta - Date: 2019-07-02 03:34:08 +0900 - - Keyword token that follows EXPR_FNAME must be a method name - -commit 7ff2bfed92f8017184963eaac13e75cfb5ce5d4a - Author: Nobuyoshi Nakada - Date: 2019-07-01 23:16:47 +0900 - - Alias "master" and "trunk" - -commit f2769ae2c9f5c5a902584282f1e512437db1f395 - Author: Nobuyoshi Nakada - Date: 2019-07-01 23:04:26 +0900 - - Default branch name to "master" - -commit acee9384840e8c75b0fd406180671df58d049c88 - Author: Nobuyoshi Nakada - Date: 2019-07-01 21:32:02 +0900 - - Default ASMEXT - -commit f28450c118beadc636db9edd150695a8d237fd0f - Author: Nobuyoshi Nakada - Date: 2019-07-01 21:31:18 +0900 - - Substitute suffixes with dot - -commit 76851381cb18a62f3a75720f868ac147e4c1c51c - Author: aycabta - Date: 2019-07-01 21:14:50 +0900 - - Show "-" if indent level is negative - -commit 90c51ca39170030b2ea0611bcbb435b76915a287 - Author: Nobuyoshi Nakada - Date: 2019-07-01 20:45:53 +0900 - - New indent must be non-negative number - -commit babaad1065b1e45614d03e30f82c9007cc115b7c - Author: Nobuyoshi Nakada - Date: 2019-07-01 20:05:06 +0900 - - Use configured ASMEXT - -commit 7f4f40ab31f79e0ab0196b9c11b942d475ff1fcd - Author: Nobuyoshi Nakada - Date: 2019-07-01 17:09:08 +0900 - - bootstraptest/runner.rb (show_limit): defer messages unless verbose and a tty - -commit 70dcf5b368bfeee9bc054895fc046bf69d32aa91 - Author: git - Date: 2019-07-01 16:25:56 +0900 - - * expand tabs. - -commit 78ee2c245331e353e218b8fac9ca722a2bcd8fea - Author: Nobuyoshi Nakada - Date: 2019-07-01 16:20:03 +0900 - - marshal.c: check instance variable count - - * marshal.c (w_ivar_each): ensure that no instance variable was - removed while dumping other instance variables. [Bug #15968] - -commit 0b1e26398e018116180bf41cb63887f77d5d1b82 - Author: Nobuyoshi Nakada - Date: 2019-07-01 16:18:51 +0900 - - Hoisted out w_ivar_each - -commit c9423b016cfeab852bc5a829e55e0a11f80b3ab7 - Author: Nobuyoshi Nakada - Date: 2019-07-01 15:02:27 +0900 - - marshal.c: check instance variable count - - * marshal.c (w_obj_each): ensure that no instance variable was - added while dumping other instance variables. [Bug #15968] - -commit 77a073239c207933e8a2562b51a206aa58dc66b4 - Author: git - Date: 2019-07-01 14:00:37 +0900 - - * expand tabs. - -commit 99dc885974bfe637f3e74f52efdbbf77d66d0d68 - Author: Nobuyoshi Nakada - Date: 2019-07-01 13:56:55 +0900 - - Fixed inadvertent ID creation in rb_iv_get - -commit 6982a9049ede1386fdfa10734f953867824ebe05 - Author: Nobuyoshi Nakada - Date: 2019-07-01 13:01:31 +0900 - - Assert obsolete method warnings in IPAddr - -commit fe03bbaf3405b9e45bb3504fab5f4195ec6c3630 - Author: Nobuyoshi Nakada - Date: 2019-07-01 10:16:47 +0900 - - bootstraptest/runner.rb (show_limit): show dots only when printing to a tty - -commit dbe834ab5ac4f90df5db9fc314b45890726cca3b - Author: Takashi Kokubun - Date: 2019-07-01 01:04:40 +0900 - - Prefer master rather than trunk in README [ci skip] - -commit d3d903cb5ff8a154d14aac1416815ce61affb335 - Author: Kazuhiro NISHIYAMA - Date: 2019-07-01 00:47:55 +0900 - - [DOC] Fix typos [ci skip] - -commit 3d1536e61812dab1f4c226eb60356fd238ab6bb8 - Author: Takashi Kokubun - Date: 2019-07-01 00:24:10 +0900 - - Build AppVeyor only on master - -commit f13fb814e0343b5c09afe0c6d3114ee24b84d295 - Author: Nobuyoshi Nakada - Date: 2019-06-30 22:49:56 +0900 - - Return the result of the block given to assert_warning/assert_no_warning - -commit 51b2b605e78a160790c6d751b2907b836b39561c - Author: Nobuyoshi Nakada - Date: 2019-06-30 22:49:10 +0900 - - Call deprecated method only inside assert_warning block - -commit 9cb58f1698b4a11af24d1129eb6b85d27e0a7145 - Author: Nobuyoshi Nakada - Date: 2019-06-30 22:48:39 +0900 - - Suppress unused variable warning - -commit fc4abbfcd014d9bd281bea7ebec30aabe243b410 - Author: git - Date: 2019-07-01 00:15:04 +0900 - - * 2019-07-01 - -commit 35cf3e8904efa54098c1f904de93167a17d8d313 - Author: Takashi Kokubun - Date: 2019-07-01 00:14:11 +0900 - - The default branch is changed to master - - and now Travis should run on master, instead of trunk. - - (this is testing git push to master branch) - -commit c5eb24349a4535948514fe765c3ddb0628d81004 - Author: Nobuyoshi Nakada - Date: 2019-06-30 21:23:54 +0900 - - [DOC] update target_thread to TracePoint#enable - -commit 8640153e59a106ab2331effc33dcf03415a7e89c - Author: Nobuyoshi Nakada - Date: 2019-06-30 21:21:06 +0900 - - Added test for require-return hook - -commit 1eca2f3ca936cfdbce7b82342f5903b7d16e9bc1 - Author: Nobuyoshi Nakada - Date: 2019-06-30 21:20:16 +0900 - - TracePoint#__enable requires 3 arguments now - -commit 62e66b8e180e17475a79fbdbdc36a33e488e4fe9 - Author: Nobuyoshi Nakada - Date: 2019-06-30 21:15:56 +0900 - - Allow dtrace without pty, i.e., with miniruby - -commit b89f6ac843d9abbe8488bd329e0ff0cccf5caaa3 - Author: Nobuyoshi Nakada - Date: 2019-06-30 21:12:15 +0900 - - Check for the privileges by the current process groups - - Group membership of login user is not activated until login after - adding to the group. - -commit 3b86ec22515853665c353f2fb14e5bdb10b2e65b - Author: Nobuyoshi Nakada - Date: 2019-06-30 18:41:17 +0900 - - dtrace: check for the command availability with sudo - -commit 126cf11d338d6ca8b78a5a425652167d8aacc222 - Author: Nobuyoshi Nakada - Date: 2019-06-30 20:19:21 +0900 - - Producer threads check is the primary condition - -commit 75129c62ebfcd67f08262a6f755e5c899e8ebaee - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:56:30 +0900 - - Suppress "statement not reached" warning - -commit cc680846529b1bb00cded40705e0de696f78b0f9 - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:55:50 +0900 - - Suppress method redefinition warnings - -commit 5f736d431951baa2c6e5113322092f7f85d03ae4 - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:54:21 +0900 - - Suppress "literal in condition" warnings - -commit 4a063546e7de9ddb424fdf822e69bb3ffeb50631 - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:52:31 +0900 - - Suppress unused literal warnings in verbose mode - -commit 3620568d3ac0533b050985d7c3c4ca871d464fd6 - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:51:09 +0900 - - Suppress void context warnings in verbose mode - -commit c400c0b4a00706a0da33664c1898e15f1aba0eec - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:46:58 +0900 - - Skip instead of return - -commit b43d6e570980a4f5d6f4c20de29024dc5df93472 - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:46:21 +0900 - - Fixed non-working test - -commit 8fe359086484cd322704e57fce25ef8c41d949a8 - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:44:15 +0900 - - Fixed ClosedQueueError by a timing issue - -commit 44eca1b22f96a3140d11d95f89948cbdae08daee - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:40:55 +0900 - - Reset the result between assertions - -commit ad3820886b8bd13bb6dbb784ba999b26ac65461c - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:40:23 +0900 - - Fixed an assertion - -commit 409b0ec4c3c4878c0ba164d1303de67787157808 - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:34:41 +0900 - - Suppress unused variable warnings - -commit 84837e6d16cb0e588b1acc2691cb1048b9a89989 - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:33:24 +0900 - - Wait for the helper thread to terminate - -commit 41012f2e2b71fddc9acf8a50d887707c44ad8f88 - Author: Nobuyoshi Nakada - Date: 2019-06-30 09:30:21 +0900 - - Add parentheses to suppress warnings - -commit 78a8888c3eb6377218e8d3ec94a162c2c20eef82 - Author: Nobuyoshi Nakada - Date: 2019-06-30 10:56:42 +0900 - - Hoisted out f_rest_marg - - * parse.y (f_rest_marg): extract named and unnamed rest parameter - in parenthesized method arguments, and should not be warned as - unused. - -commit 81e8830a76303db80499d44b9c600a575f86d4df - Author: git - Date: 2019-06-30 08:50:35 +0900 - - * 2019-06-30 - -commit 45ba027d086a04e09ed6ad48c5ac78e61f1174c4 - Author: Nobuyoshi Nakada - Date: 2019-06-29 21:19:01 +0900 - - Removed unused variables - -commit 9f648262f9372cbf21754a411a68e178f0fd8feb - Author: Nobuyoshi Nakada - Date: 2019-06-29 21:45:59 +0900 - - Fix predicate to assert if object is same - -commit cbb7dc21a823e8b09341860d8737ed24ee1ce1b8 - Author: Nobuyoshi Nakada - Date: 2019-06-29 19:17:51 +0900 - - Fix predicate to assert if object is same - -commit 792d1deb949e8416d7a76d66771b286d35c8278d - Author: Nobuyoshi Nakada - Date: 2019-06-29 19:07:25 +0900 - - Escape control codes in regexp warning message - -commit 27723b699b5fbad49a7bb16936d5a7d8e80376ba - Author: Nobuyoshi Nakada - Date: 2019-06-29 18:45:24 +0900 - - Should not warn massign parameters as unused - -commit a17fba6989d6f183275f0d9fa9dc0e43781bfe54 - Author: Nobuyoshi Nakada - Date: 2019-06-29 17:55:22 +0900 - - Remove old TestTimeTZ::TZ#abbr attribute - -commit 7ba14b029c64c7f9ef080f5b22065b662145d5d5 - Author: Nobuyoshi Nakada - Date: 2019-06-29 17:52:57 +0900 - - Add max option to TestProtocol#create_mockio - - * test/net/protocol/test_protocol.rb (TestProtocol#create_mockio): - max option to limit maximum writable size at once, and unify - mock method in test_write0_multibyte. - -commit a88107c44dd08b02ed1c1b5951882b070a1eab93 - Author: git - Date: 2019-06-29 10:17:37 +0900 - - * expand tabs. - -commit 2f6cc15cdb3d64135b29cfd5ee376a5a03ebbee7 - Author: Nobuyoshi Nakada - Date: 2019-06-29 10:10:17 +0900 - - Fixed String#grapheme_clusters with wide encodings - - * string.c (get_reg_grapheme_cluster): make regexp from properly - encoded sources for wide-char encodings. [Bug #15965] - - * regparse.c (node_extended_grapheme_cluster): suppress false - duplicated range warning for the time being. - -commit 8aecc90974ab1ac87056f77e2cb3406c5c041504 - Author: Nobuyoshi Nakada - Date: 2019-06-29 10:02:04 +0900 - - Hoisted out WIDE_ENCODINGS - -commit 14da3009f029b9bec5591fb1557c13de8b708c18 - Author: git - Date: 2019-06-29 08:12:36 +0900 - - * 2019-06-29 - -commit ede056909bf20356928a28a6165b31e6c8cb6687 - Author: Nobuyoshi Nakada - Date: 2019-06-29 01:31:52 +0900 - - Set file name and line number - -commit d12d53a6c8d959687d4ecec54501f3b13a806941 - Author: Nobuyoshi Nakada - Date: 2019-06-29 01:30:43 +0900 - - Adjust caller's line number, expect the next line as here-doc - -commit 2bb217bfb7703ba923d0e1d69b2f2dddb66cc7d6 - Author: Nobuyoshi Nakada - Date: 2019-06-28 18:31:42 +0900 - - Removed unused variables - -commit d233f9175cdb869a1928234f9c24a9d5d13f437f - Author: Nobuyoshi Nakada - Date: 2019-06-28 23:17:19 +0900 - - [DOC] Re-apply r11000, 41256fd43275c8bf66460510da7ab958a802e2a2 - - * eval.c (rb_thread_kill): fix Thread#kill docs, which returns - the thread object in all cases. - - From: why the lucky stiff - -commit c718f56ed9e07f66b6d476d16c2eea81e15c37d2 - Author: aycabta - Date: 2019-06-28 22:25:35 +0900 - - Remove auto indent of continuation line - -commit 8ec877d18361054d943fdf57f89b68f4e201d2c4 - Author: Nobuyoshi Nakada - Date: 2019-06-28 17:09:18 +0900 - - Add parentheses to suppress a warning - -commit 3dba16a5d6195a673537519edb024ef1d29f7715 - Author: Nobuyoshi Nakada - Date: 2019-06-28 17:08:47 +0900 - - Test string content - -commit 5331932cd22f4dab84196eca55a05264dc0b84d7 - Author: Nobuyoshi Nakada - Date: 2019-06-28 17:08:21 +0900 - - Removed unused variables - -commit 8d04f90da486a34f54589c2835518b1d720a4253 - Author: Nobuyoshi Nakada - Date: 2019-06-28 17:07:17 +0900 - - Fixed a variable name - -commit e9bce55c12f87d783c651d415b6b79beeeb79737 - Author: Nobuyoshi Nakada - Date: 2019-06-28 16:02:47 +0900 - - Removed excess spaces - -commit 566e6b0546633f3da4f868c3a217bc3167008fdf - Author: Nobuyoshi Nakada - Date: 2019-06-28 16:02:03 +0900 - - Fixed name conflict between helper classes - -commit 35b7e8eed8ad8ac111d099eafd5a6ac1561fbf44 - Author: Nobuyoshi Nakada - Date: 2019-06-28 15:26:54 +0900 - - Skip instead of return - -commit f8b528ba92b5cc4b84e8966dd5d5a072d076c1d1 - Author: Nobuyoshi Nakada - Date: 2019-06-28 15:26:25 +0900 - - Suppress unused variable warnings - -commit 11571b0e95346691e634781f281b92c75608955c - Author: Nobuyoshi Nakada - Date: 2019-06-28 15:25:12 +0900 - - Use assert_separately instead of invoke_ruby - -commit e0c4cb2ea1ac648bdd0850dd1621f5e13382b760 - Author: Nobuyoshi Nakada - Date: 2019-06-28 15:22:27 +0900 - - Define singleton method on each new objects - -commit a0c141b6d04482ebfc4b3abf3f00a476d073226a - Author: Nobuyoshi Nakada - Date: 2019-06-28 15:09:14 +0900 - - Suppress redefinition and void context warnings - -commit f8b64e5f2cea508d1ea93966e2039b394715bae7 - Author: Nobuyoshi Nakada - Date: 2019-06-28 15:04:25 +0900 - - Use assigned local variable - -commit c52dad0ecf0b8d87afb570d7dde508fe78d145d4 - Author: Nobuyoshi Nakada - Date: 2019-06-28 14:51:23 +0900 - - Wait for the helper thread to terminate - -commit 023360ee4b1954a54b4d87d21cfc0eb5d662d5c5 - Author: Nobuyoshi Nakada - Date: 2019-06-28 14:37:52 +0900 - - [DOC] Singleton.instance [ci skip] - -commit 2d1728b9cede877ac45f5760ebf214d25685b285 - Author: Nobuyoshi Nakada - Date: 2019-06-28 14:23:22 +0900 - - Moved Singleton.instance to get rid of redefinition - -commit 951f80f2dde2f22eab3acf53101e4c912cb60bb2 - Author: Nobuyoshi Nakada - Date: 2019-06-28 14:09:02 +0900 - - Removed unused variable - -commit ef45fd53e47975f94661ea71ce78a1c1fa442bcb - Author: Nobuyoshi Nakada - Date: 2019-06-28 14:08:29 +0900 - - Fixed the test-case class name for zsh - -commit be14f62cafff30a6127c6ff533fec6de232ba7dd - Author: Nobuyoshi Nakada - Date: 2019-06-28 12:41:03 +0900 - - Default @debug to $DEBUG - -commit 4562dad94c6af3db5af8704b0aec64119456275d - Author: Nobuyoshi Nakada - Date: 2019-06-28 12:36:03 +0900 - - Removed unused variable - -commit 7eaedda557f689087861e6c0e7c9abca8cd92fc1 - Author: Kazuhiro NISHIYAMA - Date: 2019-06-28 12:37:36 +0900 - - Use block instead of explicit close - -commit 5627f744ccb5fe5f9611f99e641d35e844e0851c - Author: Kazuhiro NISHIYAMA - Date: 2019-06-28 12:37:07 +0900 - - Add `require 'test/unit'` - -commit 3120252f010b979b633f0757ea7e145ccdc224fd - Author: Nobuyoshi Nakada - Date: 2019-06-28 12:33:24 +0900 - - Suppress void context warning in verbose mode - -commit dc7da30bedd48d2ba38ce9cac05e378f0c823b50 - Author: Nobuyoshi Nakada - Date: 2019-06-28 12:31:21 +0900 - - Close leaked file descriptor - -commit c9bbcaccf28c2a374f6530a36355b6d6f16e25cc - Author: Nobuyoshi Nakada - Date: 2019-06-28 12:27:11 +0900 - - Suppress unused variable warning with RUBYOPT=-w - -commit ff7f71b28889e043798dddfec568083cc7db204a - Author: Nobuyoshi Nakada - Date: 2019-06-28 12:02:33 +0900 - - O_EXCL has no meaning for fdopen - - "exclusive access mode is not supported" exception has resulted in - empty "rubyheap-*.json" files after test/objspace/test_objspace.rb. - -commit 14b0c94ac38c40459d908fd4c5778efa60e4689f - Author: Jeremy Evans - Date: 2019-06-28 08:57:19 +0900 - - Fix documentation for Net::SMTPServerBusy - - Fixes [Bug #11628] - -commit a2091c3023a6741049d20beffbe8c94c2d5f4732 - Author: Benoit Daloze - Date: 2019-06-28 04:21:33 +0900 - - Update to ruby/spec@94d98ff - -commit 632a97227e0821bd7bedcf3f053b16e6b0b753fa - Author: git - Date: 2019-06-28 04:04:45 +0900 - - * 2019-06-28 - -commit d80e44deec77678fe2d72f94c17b2409b3e794d5 - Author: Benoit Daloze - Date: 2019-06-28 04:02:36 +0900 - - Update to ruby/spec@8d74d49 - -commit c940397116c5aef76b1c0d05561c11d43ef596a7 - Author: Benoit Daloze - Date: 2019-06-28 04:02:33 +0900 - - Update to ruby/mspec@ca2bc42 - -commit 310a42e89c431f9650c6727f934f35c5e6f9a6cc - Author: Takashi Kokubun - Date: 2019-06-27 22:32:26 +0900 - - Explain rubyspec Travis job in job name - - Eregon did not want https://github.com/ruby/ruby/commit/7b9dd379bfe4d597acfe4c26365feff61dabd488 - because people only see Travis job name and don't see .travis.yml. - - I believe the new job name is simple and informative enough to explain - why it exists. - -commit 1f7cb4bee9f711d07a5b31f439f621a2557e7505 - Author: Nobuyoshi Nakada - Date: 2019-06-27 17:18:24 +0900 - - Omit `EXPR_` prefix to show lex_state - -commit 9247f6fcc066280ca62f2fdf2902bb72c7880f44 - Author: Benoit Daloze - Date: 2019-06-27 19:06:39 +0900 - - Expand and clarify documentation about version guards for specs - -commit 2c02d5714e401159f0221d3c2d461bc79db61e3a - Author: Benoit Daloze - Date: 2019-06-27 18:57:23 +0900 - - Add a comment explaining what to do if specs fail on Ruby 2.4 - -commit 7b716bc52a5d4d000a0cee0841109c243cfcf6db - Author: Nobuyoshi Nakada - Date: 2019-06-27 16:57:31 +0900 - - Show the parser states in pretty_print too - -commit 2fd03fd7e651d5f0bf78e315eafdde5468c1de53 - Author: aycabta - Date: 2019-06-27 16:03:43 +0900 - - EXPR_LABEL also indicates non-continuation line - - Example: - - [ - 1, # this is not continuation line - 2 - ] - -commit 097554855c1a9404f3220bcc5c1906cc62399b59 - Author: Nobuyoshi Nakada - Date: 2019-06-27 15:16:15 +0900 - - Fix ripper fatal - - * parse.y (parser_yylex): return END_OF_INPUT at unterminated here - document instead of an error. [Bug #15962] - -commit 2a56702eeea5a571eaa2af15967c6535395e83a2 - Author: Nobuyoshi Nakada - Date: 2019-06-27 15:13:45 +0900 - - Test for unterminated here-docs - -commit c86a9e6592c2cb37734cf29d81a8f9d26a4340b3 - Author: Kazuhiro NISHIYAMA - Date: 2019-06-27 11:17:03 +0900 - - bc mode is already removed [ci skip] - -commit d6bcf367936e92b8662dce969bc6b48ae2112d45 - Author: aycabta - Date: 2019-06-27 10:59:08 +0900 - - EXPR_CMDARG also indicates the end of an expression - -commit 7172ab0ec523fd190f661f52e999307d2e34429f - Author: Jeremy Evans - Date: 2019-06-27 07:21:59 +0900 - - Use native coroutine implementation on OpenBSD-amd64 - - When using native fibers, do not load ucontext, as it isn't needed. - -commit 24c4e6dec109e105c13bd4c1b7f7cd51e534a3c3 - Author: aycabta - Date: 2019-06-27 01:25:22 +0900 - - Increase indent of continuation line - - v = - 3 # auto indent - -commit df3c94712be83982301abaf49942052f0e6ae0fe - Author: git - Date: 2019-06-27 01:21:53 +0900 - - * 2019-06-27 - -commit 72bfc52de67d774316ca872a036476aa51886ab0 - Author: aycabta - Date: 2019-06-27 01:20:44 +0900 - - Decrease indent by closing token correctly - -commit d004989ac6355bcf2840ed190aae139c3a852848 - Author: Jeremy Evans - Date: 2019-06-26 23:53:54 +0900 - - Do not attempt to use ucontext for fibers on OpenBSD - - OpenBSD does not support ucontext. - - There may be a more generic way to handle this, using the result - of AC_CHECK_HEADERS(ucontext.h). - -commit 1235e054eb100fcd75f03d2f22dbbd4952bbaf31 - Author: Kazuhiro NISHIYAMA - Date: 2019-06-26 21:44:42 +0900 - - [DOC] Add spaces [ci skip] - -commit d9a055a721f838fb5ed159fdd14497407dfad765 - Author: Kazuhiro NISHIYAMA - Date: 2019-06-26 21:44:20 +0900 - - [DOC] Fix svn account [ci skip] - -commit acb67472c7da459812aa9008cf8cfbedcdddea67 - Author: Samuel Williams - Date: 2019-06-26 19:02:19 +0900 - - Restore updated implementation of arm32 coroutine code, but prefer ucontext. - -commit ba17127e992a4d1fb1fbd58869cbb4f12ff76227 - Author: aycabta - Date: 2019-06-26 18:41:42 +0900 - - Decrease nesting level when closing token comes at a non-first token of line - -commit 28eeaed8a9ec2557e8f8d42d8ab3e7cad310a8a9 - Author: Yusuke Endoh - Date: 2019-06-26 17:22:46 +0900 - - Revert "coroutine/arm32/Context.S: save/restore the registers via stack" - - This reverts commit 6df1814c08df93bbc0b3e7a73649bcf82e126064. - - It caused a SEGV again: - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-master/log/20190626T051707Z.fail.html.gz - -commit 6c6bf9ffcbfeb8be9d9c342e7604b74ec819e88a - Author: Samuel Williams - Date: 2019-06-24 20:54:19 +0900 - - Add `ucontext` coroutine implementation for generic fallback. - -commit a84a99ffabf04d90be64ff28cf2e11766f6cce52 - Author: Yusuke Endoh - Date: 2019-06-26 16:01:45 +0900 - - test/ruby/test_array.rb (test_sort_with_replace): run in a subprocess - - This test invokes GC.start 100 times, which takes approx. six minutes in - Solaris. This change runs the test in a separated process, which makes - GC.start faster. - -commit 04bc4c0662344238a556aa92f5f8f6d42586bab3 - Author: John Hawthorn - Date: 2019-06-26 01:01:57 +0900 - - Resize capacity for fstring - - When a string is #frozen, it's capacity is resized to fit (if it is much - larger), since we know it will no longer be mutated. - - > puts ObjectSpace.dump(String.new("a"*30, capacity: 1000)) - {"type":"STRING", "class":"0x7feaf00b7bf0", "bytesize":30, "capacity":1000, "value":"... - > puts ObjectSpace.dump(String.new("a"*30, capacity: 1000).freeze) - {"type":"STRING", "class":"0x7feaf00b7bf0", "frozen":true, "bytesize":30, "value":"... - - (ObjectSpace.dump doesn't show capacity if capacity is equal to bytesize) - - Previously, if we dedup into an fstring, using String#-@, capacity would - not be reduced. - - > puts ObjectSpace.dump(-String.new("a"*30, capacity: 1000)) - {"type":"STRING", "class":"0x7feaf00b7bf0", "frozen":true, "fstring":true, "bytesize":30, "capacity":1000, "value":"... - - This commit makes rb_fstring call rb_str_resize, the same as - rb_str_freeze does. - - Closes: https://github.com/ruby/ruby/pull/2256 - -commit fe0ddf0e58e65ab3ae3d6e73382c3bebcd4541e5 - Author: Nobuyoshi Nakada - Date: 2019-06-26 15:01:01 +0900 - - `ensure` is not a continuous line - -commit 6df1814c08df93bbc0b3e7a73649bcf82e126064 - Author: Yusuke Endoh - Date: 2019-06-26 14:08:10 +0900 - - coroutine/arm32/Context.S: save/restore the registers via stack - - Retry of 518adcca0a and dbe232e24e - -commit 51361272f9efca3eb0e1acb620ac62b576ddbb04 - Author: Jeremy Evans - Date: 2019-06-26 02:59:26 +0900 - - Respect --dest-dir when removing old default gems - - Before this, tool/rbinstall would try to remove a gem file that - it may not have access too. - - Fixes issue introduced in f550da512cefbe0283106ca839c4836a98efaf3a. - -commit a3d1cacda634b83032f79774d9a0e9e0c9c24cc8 - Author: Nobuyoshi Nakada - Date: 2019-06-26 08:43:08 +0900 - - Decrease indent at "elsif" too - -commit ea8bc6822da742f5818b13f444b5670a0e041dae - Author: Nobuyoshi Nakada - Date: 2019-06-26 08:37:14 +0900 - - Remove other debug prints - -commit e478671e19e09bf50ceb52efa720a8c520d87704 - Author: Hiroshi SHIBATA - Date: 2019-06-26 09:23:02 +0900 - - Added version guard for backtrace printing feature of psych to ruby/spec. - -commit cfa1a1843167e9dc8404403d3a64a506c3d6ce92 - Author: aycabta - Date: 2019-06-26 08:07:58 +0900 - - Remove debug print...sorry - -commit 0f28094201d86d4bf8d5ecb6061abbbf5cea5076 - Author: Jeremy Evans - Date: 2019-06-26 03:18:08 +0900 - - Improve wording of Local Variables and eval section - - As pointed out by nobu, "defined" should be used instead of "assigned". - -commit 0aa8c3d88bb2f59bede47164a5da20600cce399e - Author: git - Date: 2019-06-26 01:53:22 +0900 - - * 2019-06-26 - -commit dd57442f74024af465a16b7e19a34d0fc8533a53 - Author: git - Date: 2019-06-26 01:53:19 +0900 - - * remove trailing spaces. - -commit 0bd5f846df2f6268f653773e0cd4a20e2a944646 - Author: Jeremy Evans - Date: 2019-06-25 05:55:31 +0900 - - Document local variable interactions with eval - - Fixes [Bug #13337] - -commit 730aeb2523fadd816b07e0e5322fb79841efc709 - Author: Yusuke Endoh - Date: 2019-06-25 23:31:49 +0900 - - Revert 518adcca0a and dbe232e24e - - 518adcca0a: "Try using arm32 implementation for fibers." - dbe232e24e: "Order of arguments might be incorrect in arm32 coroutine implementation." - - It seems to cause SEGV consistently on Ubuntu armv7l eabihf: - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-master/log/20190625T081710Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-master/log/20190625T111708Z.fail.html.gz - -commit 57e1a69ea38d30bc249553e5fe15295ae0f5af81 - Author: aycabta - Date: 2019-06-25 22:07:32 +0900 - - Treat auto indent with newline correctly - -commit 0b57f9b25d43c2efec8ac17c0c03ce9fa461937a - Author: aycabta - Date: 2019-06-25 22:00:29 +0900 - - Decrease indent when "else", "rescue", "ensure", "when", or "in" come - -commit 1cbc4f987656ac8d8ede6c7cd178ac8e6c2a909b - Author: Yusuke Endoh - Date: 2019-06-25 17:20:01 +0900 - - test/net/imap/test_imap.rb: use Thread#stop? to wait for server thread - - Still timeout occurs. Retry for 5dd8fdd3f328f741fae4abba00c478e8a51d2a7e. - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11x/ruby-master/log/20190625T032405Z.fail.html.gz - -commit d7887b05d810e7e3188d25ed91364d5850d92cd7 - Author: Hiroshi SHIBATA - Date: 2019-06-25 16:46:42 +0900 - - Fixed broken ruby/spec related a53ab897c35586a836710a8afeb1e8c1abd9b087 - -commit 746812ee9645ff821a039136f9576b7c8f18b920 - Author: Jean Boussier - Date: 2019-04-27 02:38:43 +0900 - - Do not allocate a string to check if a scalar is an integer - -commit 5a4d2b9f2f1cb5124a4dccc103c7bbe8d27554d5 - Author: Jean Boussier - Date: 2019-04-27 01:57:03 +0900 - - Remove string_cache in ScalarScanner - -commit 63f78bbaaea4bb0b7009e50a938ef146416c53c2 - Author: Jean Boussier - Date: 2019-04-26 20:26:14 +0900 - - Reduce string allocations in scalar_scanner - -commit 00d0ede84593aa18203fe33d1056ffb1b1aedf99 - Author: SHIBATA Hiroshi - Date: 2019-02-27 08:44:33 +0900 - - Removed CHANGELOG from rdoc files. - -commit 3c4fc830dd3f2c3e1e642f83072bead8189aec63 - Author: SHIBATA Hiroshi - Date: 2019-02-26 15:56:55 +0900 - - Retired to write CHANGELOG.rdoc. Because It has no update from 2015. - -commit 03dac55f90bd6b842ffe90b6bfa98af5c0897513 - Author: Aaron Patterson - Date: 2019-01-17 03:46:34 +0900 - - Dump Hash ivars before elements - - When the Hash is revived, the ivars will be set before elements. This - is for the case when the hash setter depends on ivars set on the hash. - -commit 0016edbead23f2a9b4fa17bcec2798b5bf6a4c07 - Author: Jordan Owens - Date: 2019-01-16 14:29:12 +0900 - - Add test to demonstrate issue deserializing hash with ivar - - Currently the elements of a hash are revived before any ivar values. - This causes an issue when the `[]=` method references an instance - variable. - -commit a53ab897c35586a836710a8afeb1e8c1abd9b087 - Author: Aaron Patterson - Date: 2019-01-10 06:34:51 +0900 - - Round trip exception backtraces - - This commit allows exception backtraces to round trip - -commit f770a5be66412fcbdb238db950c80367100a257e - Author: Aaron Patterson - Date: 2019-01-10 06:28:08 +0900 - - Refactor exception dumping - -commit 4bd190942710725a79ca61fb30cff152888b55d0 - Author: Aaron Patterson - Date: 2019-01-10 06:25:09 +0900 - - Dumping the backtrace never worked, so remove it - - Dumping the backtrace for exceptions never worked, so lets remove it. - -commit d118c84b0b9110462e479487ffaf175a75e5718e - Author: Jeremy Evans - Date: 2019-06-15 09:50:31 +0900 - - Fix IO#scanf on pipes on Windows - - IO.seek on a pipe on Windows raises Errno::EINVAL instead of - Errno::ESPIPE. - - Fixes Ruby Bug #15199 - -commit e572ff2f953b774c372e31894f7bf9e86b3ea6fa - Author: David Rodríguez - Date: 2019-04-30 23:21:45 +0900 - - Require version file relatively - -commit 083fda8490210e5fb0bcfb7c0b49ac3df8f49452 - Author: SHIBATA Hiroshi - Date: 2019-03-27 16:53:54 +0900 - - Bump version to 1.2.0. - -commit 9b23aab290c9f0cbbc795282c5e90b6581452b58 - Author: Hiroshi SHIBATA - Date: 2019-06-25 11:51:25 +0900 - - Fixed the wrong path for io-console. - -commit dbe232e24e56cb200b8e5b78062c8a2784a792e9 - Author: Samuel Williams - Date: 2019-06-25 14:04:04 +0900 - - Order of arguments might be incorrect in arm32 coroutine implementation. - -commit e09afd15b797bc61a6ba93e3d1d32be11707404a - Author: git - Date: 2019-06-25 00:19:49 +0900 - - * 2019-06-25 - -commit 9c19cd5222a09481f0dd2d6470db38717e551989 - Author: aycabta - Date: 2019-06-24 23:58:50 +0900 - - Refactor calculation of corresponding token depth - -commit 518adcca0a2c611c4a94eaa778f9dcec4aff03f9 - Author: Samuel Williams - Date: 2019-06-24 16:09:16 +0900 - - Try using arm32 implementation for fibers. - -commit 4275f09015295a3f58dbe0aedede0d039f262499 - Author: NARUSE, Yui - Date: 2019-06-24 15:56:18 +0900 - - remove UNREACHABLE - -commit 97b4fe2ff6bffe8728952236f2027aa6242f8f40 - Author: Luke Gruber - Date: 2019-06-24 04:28:22 +0900 - - array.c: Wrong heap size given to ruby_sized_xfree when freeing shared roots - - Fixes [Bug #15953] - - Closes: https://github.com/ruby/ruby/pull/2253 - -commit 7f64a0b4db7ee27a04579236950d88301c7bcabb - Author: NARUSE, Yui - Date: 2019-06-17 08:50:44 +0900 - - Add new encoding CESU-8 [Feature #15931] - -commit 0e6396d2ac8bc3803742655896bb0fad70007dda - Author: Samuel Williams - Date: 2019-06-24 12:13:10 +0900 - - Try using arm64 implementation for fibers. - -commit abdbfebad11471e76e1e9756de7f9bc14bd30355 - Author: Samuel Williams - Date: 2019-06-24 12:12:21 +0900 - - Use spaces for indentation in `configure.ac`. - -commit 5d4dfcd808c49c9542a5ccaa5ada58a81c4e9ae9 - Author: git - Date: 2019-06-24 11:25:17 +0900 - - * remove trailing spaces. - -commit a071bed7a5041e3d3e7029f73c3f09a9f6cdfd98 - Author: Samuel Williams - Date: 2019-06-24 11:24:49 +0900 - - Print warning if not using native coroutine. - -commit 0b36c90e122a3687ce1049eedae623d77fa808bd - Author: git - Date: 2019-06-24 10:24:51 +0900 - - * 2019-06-24 - -commit edbad4adcc080fc7eada5ea367f0a61035a8d7cf - Author: masakazutakewaka - Date: 2019-06-20 03:22:52 +0900 - - httpstatus.rb 100% coverage - -commit c6229e7c692056940b1aec8af133e87883a76890 - Author: Rob - Date: 2019-03-31 02:28:22 +0900 - - Adds WebAssembly MIME type - -commit 11a60f9bdb486b5173946a7eb11b41e5f75a28cd - Author: Nobuyoshi Nakada - Date: 2019-03-09 19:53:51 +0900 - - Remove extraneous spaces at the end of status line - - Remove extraneous spaces after the status code that is - non-compliant with RFC, i.e `HTTP 200 OK `, to unnecessary - confusion for WEBrick users, by a risk that WEBrick instances in - the wild will have server responses flagged as suspicious or - malicious due to a similar bug in [Cobalt Strike - misconfiguration]. - - Reported by Matt Tennis - - [Cobalt Strike misconfiguration]: https://blog.fox-it.com/2019/02/26/identifying-cobalt-strike-team-servers-in-the-wild/ - -commit 97a7f463f683774f054f9d7dafc3756aad39dd1c - Author: Nobuyoshi Nakada - Date: 2019-06-23 23:12:47 +0900 - - Max length of UNIX socket path is 104 bytes on macOS - -commit 50b2807a7cc74dc1772496986ee2f3efef85a5db - Author: Nobuyoshi Nakada - Date: 2019-06-23 23:10:16 +0900 - - Do not lengthen UNIX socket path - - * spec/ruby/library/socket/unixsocket/recvfrom_spec.rb: do not - lengthen UNIX socket path, which is very stricted. - -commit bdcfba547df70d61abb8db10c32f56f9508f6da5 - Author: Nobuyoshi Nakada - Date: 2019-06-23 18:28:32 +0900 - - vcs.rb: handle --dryrun option - -commit 096a45d3d2c6ab0c40ec2d41bdb3a26cda091e6b - Author: Samuel Williams - Date: 2019-06-23 22:28:23 +0900 - - Update NEWS. - - - Add note regarding IA64 removal. - - Add note about Thread allocation performance improvements. - -commit 5a187e26adc8aa32367f294c1496935c7356d386 - Author: Luke Gruber - Date: 2019-06-23 11:22:23 +0900 - - array.c add back shared array optimization to ary_ensure_room_for_unshift - - Bug fix in commit ec8e5f5aa64e2a [Bug #15952] disabled an - optimization in this function. - - Closes: https://github.com/ruby/ruby/pull/2252 - -commit ec8e5f5aa64e2a54cf1e303f2b012c98e8d521ba - Author: Luke Gruber - Date: 2019-06-23 07:37:08 +0900 - - array.c: always check frozenness in Array#unshift. Fixes [Bug #15952] - - Closes: https://github.com/ruby/ruby/pull/2251 - -commit 3840791b7ebb2442724d96c69a791d0e678fbc6c - Author: Nobuyoshi Nakada - Date: 2019-06-23 07:56:43 +0900 - - Get rid of error with frozen string literal - - [Bug #14194] - -commit bebe8d13f8e14dffa9d1828f6e9805773dc30518 - Author: Nobuyoshi Nakada - Date: 2019-06-23 07:42:11 +0900 - - Disable frozen-string-literal to disable deduplication - - [Bug #14194] - -commit 2ad7a7f801c07f18150116b819530840eeefebf8 - Author: MSP-Greg (Greg L) - Date: 2019-06-23 07:33:15 +0900 - - Get rid of error with frozen string literal - - [Bug #14194] - -commit aa2f505825a914d1c5480d4e92696a1fa1ad0887 - Author: Nobuyoshi Nakada - Date: 2019-06-23 02:49:39 +0900 - - Make autoloading_const_entry static - -commit c5c3486340b67b6f6f6f980f2c3fa76780561767 - Author: git - Date: 2019-06-23 01:47:40 +0900 - - * expand tabs. - -commit ef524c13d96c645fd00c17267a553275adb0b106 - Author: Nobuyoshi Nakada - Date: 2019-06-23 01:44:07 +0900 - - NEWS: Module#constant_source_location - - [Feature #10771] - -commit 93843830198ba436e2ea21a60a11758d47cf521b - Author: Nobuyoshi Nakada - Date: 2018-12-13 21:49:05 +0900 - - Module#constant_source_location [Feature #10771] - -commit 5084233b88cc48a74b58690423df1129668d5706 - Author: Nobuyoshi Nakada - Date: 2018-12-13 18:27:32 +0900 - - Split global search for module - -commit 151843b9816b52b1ddb1e9b2040991a7de4173c6 - Author: Nobuyoshi Nakada - Date: 2018-12-13 18:12:07 +0900 - - Hoisted out autoloading_const_entry - -commit c033dc3073839e3578f1ba25d53b837974b56474 - Author: Luke Gruber - Date: 2019-06-23 00:25:52 +0900 - - Fix issue with Array#rindex when rb_equal modifies receiver array - - Fixes [Bug #15951] - - Closes: https://github.com/ruby/ruby/pull/2250 - -commit fd9ac1e76bc8b347ad55fdf5991839c1df4e891a - Author: git - Date: 2019-06-23 00:37:11 +0900 - - * 2019-06-23 - -commit f3c81b4e90ec492382e299573f2c3ac272adbb5f - Author: Nobuyoshi Nakada - Date: 2019-06-23 00:31:16 +0900 - - Frozen objects in WeakMap - - * gc.c (wmap_aset): bypass check for frozen and allow frozen - object in WeakMap. [Bug #13498] - -commit f5e29044710e74249e89bbb0f112dc22e5b91398 - Author: Nobuyoshi Nakada - Date: 2019-06-22 23:44:19 +0900 - - Use EXEEXT - - * test/lib/minitest/unit.rb (MiniTest::Assertions.diff): use - `EXEEXT` configured value instead of switching by hard coded - `host_os`. - -commit f738eeabc251c556feda1f9f22c060dac85054e1 - Author: Nobuyoshi Nakada - Date: 2019-06-22 23:38:07 +0900 - - golf_prelude.rb: suppress the redefining warning - -commit bad66f3e369810e1cca90493830d5e06485c3c30 - Author: Nobuyoshi Nakada - Date: 2019-06-22 18:39:06 +0900 - - Show timed out threads - - * test/lib/test/unit/assertions.rb (assert_join_threads): kill and - show timed out threads. - -commit 4d650bc25737a4d2c0dcc9d4c845688cb5dc85ce - Author: Nobuyoshi Nakada - Date: 2019-06-22 09:29:33 +0900 - - Fix over-expansion - - * test/lib/minitest/unit.rb (MiniTest::Assertions#mu_pp_for_diff): - do not expand escaped backslash followed by 'n'. - -commit d01fd821875b989affc36e54e98f5dd67f47062e - Author: Kenichi Kamiya - Date: 2019-06-21 12:28:28 +0900 - - Alias ENV.merge! as ENV.update - - [Feature #15947] - - Closes: https://github.com/ruby/ruby/pull/2246 - -commit 3b2d11ad90fcb64b41acc9006dfd1e40b4bd9000 - Author: Benoit Daloze - Date: 2019-06-22 01:21:16 +0900 - - Use different names for autoload constants in specs for clarity - -commit e5e811e4a04482a5ad764fbb2b792ee5fbdd7195 - Author: Jean Boussier - Date: 2019-05-07 19:52:24 +0900 - - Add extra spec from https://github.com/ruby/ruby/pull/2173 - -commit 2f2fc939eb13af9baa325f154872f60cdeff973c - Author: Nobuyoshi Nakada - Date: 2019-06-22 01:16:23 +0900 - - Always define RUBY_RELEASE_DATETIME - -commit c79131df283b6291029e96fbb5d1943aa26dc1c1 - Author: aycabta - Date: 2019-06-22 00:31:30 +0900 - - Treat closing token with starting token at head of 2nd line correctly - - v = - if true # starting token at head of 2nd line - 3 - end # closing token - -commit 5e2088665b938cd68587999f4d105331cd1feeea - Author: aycabta - Date: 2019-06-21 21:57:19 +0900 - - Do auto indent only when closing token at first of line - - if true - 3; end # this isn't auto-indented - -commit d1fa0f61918063717bba6bab15932ec69c655b81 - Author: git - Date: 2019-06-22 00:03:27 +0900 - - * 2019-06-22 - -commit 8a1dd9b84b02737cf43e62439730caec678cccf5 - Author: Nobuyoshi Nakada - Date: 2019-06-21 23:45:39 +0900 - - Revert RUBY_RELEASE_DATE to date only - -commit 1c7e303b26090205f393595f15dadddd4b2d31b6 - Author: Nobuyoshi Nakada - Date: 2019-06-21 23:03:36 +0900 - - Constified unusable chars - -commit 551ef27490bf380e46453846c040b48596f34a6a - Author: git - Date: 2019-06-21 22:48:50 +0900 - - * expand tabs. - -commit 8f51da5d41f0642d5a971e4223d1ba14643c6398 - Author: Nobuyoshi Nakada - Date: 2019-06-21 22:42:14 +0900 - - Get rid of undefined behavior - - * string.c (rb_str_sub_bang): str and repl can be same. - [Bug #15946] - -commit 50841eca43d2840df54804392afa67bca5f53c0f - Author: aycabta - Date: 2019-06-21 21:31:56 +0900 - - Support irregular auto indent - - v = - if true - 3 - end # this "end" is auto-indented correctly - -commit 38ccb8f74753c6c3d3e47ab612691bd01148eb90 - Author: Shugo Maeda - Date: 2019-06-21 18:02:24 +0900 - - Remove a duplicate test - -commit 16729f64306941a2662c8361d452e86998fc1239 - Author: Nobuyoshi Nakada - Date: 2019-06-21 17:53:32 +0900 - - Remove duplicate functions - -commit 432b28af9017c91a8032c532e9ddbe11c2d33845 - Author: git - Date: 2019-06-21 17:43:21 +0900 - - * expand tabs. - -commit 702cf3ec9051914c8ef5a353580e0e74f7ec7005 - Author: Shugo Maeda - Date: 2019-06-21 17:27:20 +0900 - - Enumerator::Lazy should support filter_map - - Fixes [Bug #15949] - -commit 35392ff0a00934ec02558305b7be8dffe6420d30 - Author: Nobuyoshi Nakada - Date: 2019-06-21 17:40:28 +0900 - - Fix an example [ci skip] - -commit c997f7daaa833ec02a852913925b361cd94fd2e8 - Author: git - Date: 2019-06-21 17:29:08 +0900 - - * expand tabs. - -commit 5b7cc63d114fbca641ce2d93c7b3f2117e38af60 - Author: Nobuyoshi Nakada - Date: 2019-06-21 17:21:34 +0900 - - Turned `recur` into `int` [Feature #15777] - -commit fb85a428605265a8fd449b0702a4dd88cb6f3b20 - Author: Jean Boussier - Date: 2019-05-07 19:52:24 +0900 - - Add an optional `inherit` argument to Module#autoload? - - [Feature #15777] - - Closes: https://github.com/ruby/ruby/pull/2173 - -commit 887163beb8f27c5400cd04dbf98c474ed035526f - Author: Kazuhiro NISHIYAMA - Date: 2019-06-21 17:08:42 +0900 - - Fix call-seq of lazy.filter_map [ci skip] - -commit 0174285e8cfea1ab7fa8dbbb6ab7607d74c20b9d - Author: git - Date: 2019-06-21 16:31:42 +0900 - - * expand tabs. - -commit 06a622b76e20b8996cd6d66c11ac7819a0996fae - Author: Nobuyoshi Nakada - Date: 2019-06-21 16:28:39 +0900 - - Lazy filter_map - -commit 4149fd60786527121d42e3d6f12d1447505d22fa - Author: Espartaco Palma - Date: 2019-06-21 14:46:24 +0900 - - Fix small typo on block_scanf example [ci-skip] - - Closes: https://github.com/ruby/ruby/pull/2247 - -commit fde842fec06b39f95eeed9ce095065d294fd2a65 - Author: Nobuyoshi Nakada - Date: 2019-06-21 03:19:42 +0900 - - Clean coroutine and timestamp directories - -commit 2ee1c762064d0ef78a22ca7e0eb63be4e0a93fa3 - Author: git - Date: 2019-06-21 02:28:27 +0900 - - * 2019-06-21 - -commit 4a5e07d8e17a0f62810f983114a88cb1011f971b - Author: Jeremy Evans - Date: 2019-06-21 02:22:01 +0900 - - Avoid verbose warning when using Net::POP3 with SSL - - Patch from Jos Kamphorst. - - Fixes [Bug #14822] - -commit 93356576fec17b1c7cafd56fc4a633776cb8169f - Author: Hiroshi SHIBATA - Date: 2019-06-20 22:27:06 +0900 - - Revert "Removed needless file with the upstream repository." - - This reverts commit 5bbfca7b1d4be89d4728203b4610de17bccbefd7. - -commit 1f0762ad2194aef6457c6687e2e536bb695193bf - Author: Nobuyoshi Nakada - Date: 2019-06-20 19:27:27 +0900 - - Suppress messages from mkmf - -commit 9e7a8a4351de0690b3d531c4be4fbb6fc8f4f813 - Author: Samuel Williams - Date: 2019-06-20 20:12:42 +0900 - - Only ignore build directories. - -commit f607e433520218ac2adc93fcf32bc3b797219a60 - Author: Samuel Williams - Date: 2019-06-20 17:29:35 +0900 - - Transition root fiber into state FIBER_TERMINATED. - - During fork, it's possible that threads with root fibers are terminated, - but fiber state is not updated. `fiber_verify` will subsequently fail. We - forcefully enter the FIBER_TERMINATED state when terminating the root - fiber. - -commit 3077cb6912033d18f4d34fd64011e9f8e9502b99 - Author: Nobuyoshi Nakada - Date: 2019-06-20 18:20:38 +0900 - - Restore $VERBOSE - -commit e31602b78d975741532b9e04a83fa5b67f85c31c - Author: Nobuyoshi Nakada - Date: 2019-06-20 17:41:01 +0900 - - Suppress warnings - -commit e6fbdde229fa07a59f372e4c9c297f9cb29cc0a8 - Author: Kazuhiro NISHIYAMA - Date: 2019-06-20 17:40:08 +0900 - - Fix a typo [ci skip] - -commit 3aa8691d521519f0dc23d56be3b1fe633632720e - Author: Hiroshi SHIBATA - Date: 2019-06-20 16:10:24 +0900 - - Added and update the racc entries on doc/*. - -commit 557bcd877490092c826a56789d78dc73f8ad0321 - Author: Hiroshi SHIBATA - Date: 2019-06-20 15:59:20 +0900 - - Added racc entry to NEWS. - -commit 5bbfca7b1d4be89d4728203b4610de17bccbefd7 - Author: Hiroshi SHIBATA - Date: 2019-06-20 15:00:54 +0900 - - Removed needless file with the upstream repository. - -commit 71ebf6d8e5fa6ebc2f5f25c59c73a50f4c611b6a - Author: Hiroshi SHIBATA - Date: 2019-06-20 15:00:40 +0900 - - Update sync task for the directory structure of cparse and ignore JRuby files. - -commit 45e939f5adcb3f16682e7a957d7ecf91edc005e4 - Author: Hiroshi SHIBATA - Date: 2019-06-20 14:31:41 +0900 - - Added gemspec of racc generated from upstream for the default gems. - - 1.4.16.pre.1 is the teemporary version. It may be changed 1.5.0 or others. - -commit c4c47b792dc8360f2541a399e9fcf417d068eee3 - Author: aycabta - Date: 2019-06-20 15:56:10 +0900 - - Disable auto indent when move cursor up or down - - This commit suppresses a strange behavior below: - - if true - 1[cursor] - end - - and press down key - - if true - 1 - end - -commit e4cafa393f8fd4aa207f20b1d122884b4de99cf1 - Author: Samuel Williams - Date: 2019-06-20 08:31:22 +0900 - - Ensure that vm_stack is cleared in `thread_cleanup_func_before_exec`. - - If `vm_stack` is left dangling in a forked process, the gc attempts to scan - it, but it is invalid and will cause a segfault. Therefore, we clear it - before forking. - - In order to simplify this, `rb_ec_clear_vm_stack` was introduced. - -commit c26c51449461e3c8ee9bb4e1800933fb3d3caf67 - Author: Samuel Williams - Date: 2019-06-20 12:30:29 +0900 - - Revert failed attempt at fixing invalid usage of vm_stack. - -commit 7d9d1ed463323fe28f24d0b94212c2cb7ad109bd - Author: Samuel Williams - Date: 2019-06-20 11:55:43 +0900 - - Don't clear cfp, it causes problems. - -commit 15c4f6aed29b4f9f8d2c911548ac87756239b592 - Author: Samuel Williams - Date: 2019-06-20 11:16:08 +0900 - - Skip `rb_ec_clear_vm_stack` for now. - -commit 199310997f40e0989f218d109b56d2e592494791 - Author: git - Date: 2019-06-20 10:41:46 +0900 - - * remove trailing spaces. - -commit dbc2b89bc042d73e60aeb7d56686aa28d82e2622 - Author: Samuel Williams - Date: 2019-06-20 10:41:18 +0900 - - Ensure `vm_stack` is cleared after fork. - -commit 6bf1285b2069ff736e283a1f8328852e3175fccc - Author: Samuel Williams - Date: 2019-06-20 09:07:15 +0900 - - Fix typo in VM_ASSERT. - -commit 626483721ae297ecb641a36b7bb39fc6d6490c82 - Author: Samuel Williams - Date: 2019-06-20 08:56:06 +0900 - - Set `cfp` to null (along with vm_stack) in `rb_fiber_close`. - -commit 25049a6e818d879aecb88379753f1e215b915f93 - Author: Samuel Williams - Date: 2019-06-20 08:32:08 +0900 - - Extra assertions around thread. - -commit 91c4ef01512d1ba285ccb3c3cb03e611257790e8 - Author: Samuel Williams - Date: 2019-06-20 08:31:22 +0900 - - Don't try to dereference NULL cfp. - -commit a0af60c7f2d852faa6d3263874224dd7950bda43 - Author: Jeremy Evans - Date: 2019-06-13 23:55:26 +0900 - - Remove spec testing undefined behavior - - Fixes [Bug #15432] - -commit 208cc6e3d03cb95ec62a8515e4e79db183d30567 - Author: git - Date: 2019-06-20 04:07:35 +0900 - - * 2019-06-20 - -commit fdfe51d16984b80fe782cb434bba7aeb629c279f - Author: git - Date: 2019-06-20 04:07:31 +0900 - - * expand tabs. - -commit b9ef35e4c6325864e013ab6e45df6fe00f759a47 - Author: Jeremy Evans - Date: 2019-06-05 13:41:02 +0900 - - Implement Complex#<=> - - Implement Complex#<=> so that it is usable as an argument when - calling <=> on objects of other classes (since #coerce will coerce - such numbers to Complex). If the complex number has a zero imaginary - part, and the other argument is a real number (or complex number with - zero imaginary part), return -1, 0, or 1. Otherwise, return nil, - indicating the objects are not comparable. - - Fixes [Bug #15857] - -commit 65944e96d39a8ae3602751f49cb337335b2c6c45 - Author: Yusuke Endoh - Date: 2019-06-19 23:10:40 +0900 - - test/racc/test_racc_command.rb: Extend the timeout - - test_opal, test_ruby18, and test_ruby22 are slow tests. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-ad7f67/ruby-master/log/20190619T105405Z.fail.html.gz - -commit 2abe548f356756788db7f893b221938a5f775ccd - Author: Samuel Williams - Date: 2019-06-19 23:05:04 +0900 - - Don't change vm_stack/cfp without acquiring gvl first. - -commit ab6d8d0b65d42cb872707b330d6172beb8579e8b - Author: Nobuyoshi Nakada - Date: 2019-06-19 20:40:49 +0900 - - Adjust indent - -commit 659eda7f83a1c27e887f96c2e1bee687d363a187 - Author: git - Date: 2019-06-19 20:33:24 +0900 - - * expand tabs. - -commit d17344cfc56edc4599252041b3ec0d46af0851fd - Author: Samuel Williams - Date: 2019-06-19 18:06:57 +0900 - - Remove IA64 support. - -commit 40f8c82b960041d29aba028cc9fe01177bdc4f84 - Author: Hiroshi SHIBATA - Date: 2019-06-19 18:35:09 +0900 - - Partly revert directory structure for cparse. - - It break the some build environment. - -commit b93508b32c8f11bd468a885745338eab259bd2cd - Author: git - Date: 2019-06-19 18:19:20 +0900 - - * remove trailing spaces, append newline at EOF. - -commit 754df262100cc5febda728111e134e0098bb05ac - Author: Hiroshi SHIBATA - Date: 2019-06-19 16:08:55 +0900 - - Added binstub for racc executables. - -commit 2b4024da32018c7d63f3d051e8ece63ca3573077 - Author: Hiroshi SHIBATA - Date: 2019-06-19 12:34:34 +0900 - - Temporary disabled to invoke assert_output_unchanged. - - Because some environment created the different results from test fixtures. - -commit e892c2f924bb229ce4782d01ea0a5e2db5761f82 - Author: Hiroshi SHIBATA - Date: 2019-06-19 12:06:41 +0900 - - Restore ruby/ruby change for extconf.rb. - -commit d71032180021f4977978030b04a8d11ae5fb7337 - Author: Hiroshi SHIBATA - Date: 2019-06-02 20:50:42 +0900 - - Workaround for the external file for racc test - -commit 8a3bd06d277328cab362b0dffe99720fa5b09515 - Author: Hiroshi SHIBATA - Date: 2019-06-02 20:18:24 +0900 - - use TEMP_DIR. - -commit 4cca8c4d2021c90e351d0ee9000d448a9ed85e83 - Author: Hiroshi SHIBATA - Date: 2019-06-02 20:11:24 +0900 - - Use Test::Unit instead of Minitest and fixed test error with ruby repo. - - Co-authored-by: Nobuyoshi Nakada - -commit 2272d6ae24d4a059d57bd1b0c01587a934258084 - Author: Hiroshi SHIBATA - Date: 2019-06-02 19:56:57 +0900 - - Restore test_dir and update prefix for Dir.mktmpdir. - -commit 9ea1fc27a93c9a7a8f9aa2f8f61bc2529e93abb2 - Author: Hiroshi SHIBATA - Date: 2019-06-02 19:17:38 +0900 - - Try to use Dir.mktmpdir. - -commit 4e218282d284c7d0ea1bf3db7e5febb2dd5884f8 - Author: Hiroshi SHIBATA - Date: 2019-05-14 21:36:59 +0900 - - Added sync task for racc - -commit c110b59af5d1b1065c9e247260579e6212cb7fab - Author: Hiroshi SHIBATA - Date: 2019-05-14 21:18:57 +0900 - - Fixed path for ruby core repository. - -commit 1a2546c2be839baa7d0a50dc056d4d6987d26852 - Author: Hiroshi SHIBATA - Date: 2019-05-13 21:25:22 +0900 - - Backport racc-1.4.15 from upstream. - -commit cbe06cd3501fdadd0e6e63094da2973484d70b0b - Author: git - Date: 2019-06-19 17:39:58 +0900 - - * remove trailing spaces, expand tabs. - -commit 3e5b885cd271e42ba4cb39dc8e612714f88ec889 - Author: Samuel Williams - Date: 2019-06-19 16:09:48 +0900 - - Rework debug conditional. - -commit cb5da39f20a17bd73e791dca1e7e1832f0adbc53 - Author: Samuel Williams - Date: 2019-06-19 15:47:15 +0900 - - Use shared implementation of `rb_ec_initialize_vm_stack`. - -commit 714703805370767efb859078d5095a014417a692 - Author: Samuel Williams - Date: 2019-06-19 14:07:15 +0900 - - Update `stack_start` and `stack_maxsize` according to stack direction. - -commit dee0cfbb4757ca954853de48814367c51f255933 - Author: Samuel Williams - Date: 2019-06-06 12:02:35 +0900 - - Specify that size is non-committed memory. - -commit 561c9bcf3a1ce33e51c2c03e88aa3103d42f5af9 - Author: Samuel Williams - Date: 2019-06-06 08:04:24 +0900 - - Make sure `alloca` fast path is used (inline assembler). - -commit 7cc7269b3d3e3aff518a6cd05971422351253957 - Author: Samuel Williams - Date: 2019-06-06 07:25:08 +0900 - - Use default stack size for worker thread (no th pointer available). - -commit 9cb4e7725f668318d08cb79b1459a04eadf2f925 - Author: Samuel Williams - Date: 2019-06-06 06:54:29 +0900 - - Handle (empty) backtrace when thread is not born yet. - -commit 5855af73b8d7233bcdb18b6dda5c0058cbc315bf - Author: Samuel Williams - Date: 2019-06-06 06:54:07 +0900 - - Basic assertions for thread initialization. - -commit 8121a523c3ea68898016ab3984b6c0240ff66995 - Author: Samuel Williams - Date: 2019-06-06 06:53:25 +0900 - - Use stack size defaults for win32 threads. - -commit b8e4bea7806f481efab42f8d88ecba783c709042 - Author: Samuel Williams - Date: 2019-06-05 20:39:17 +0900 - - Track how stack was allocated for `cont_free`. - -commit 4b3b781c66c48604a013557172540effd929f96a - Author: Samuel Williams - Date: 2019-06-05 17:52:07 +0900 - - Ensure execution context is cleared after thread is finished. - -commit 38791145ebc6890b97ea55ee490084c63b67f3cc - Author: Samuel Williams - Date: 2019-06-05 15:23:04 +0900 - - Better handling of root fiber. - -commit 7c7a1c221281cdba1f48d5e42ee2f9af306d27f8 - Author: Samuel Williams - Date: 2019-06-05 10:53:19 +0900 - - Fix handling of vm_stack_size and avoid trying to deallocate it. - -commit b24603adff8ec1e93e71358b93b3e30c99ba29d5 - Author: Samuel Williams - Date: 2019-06-05 08:18:50 +0900 - - Move vm stack init into thread. - -commit 69195fd9b26d4585ad0d13d45ce9fd7b7ebac154 - Author: Samuel Williams - Date: 2019-06-19 14:53:52 +0900 - - Show thread and fiber limits as part of bootstrap tests. - -commit 3fd83cb6fcc483d2eac0795bc139c521a3a59bd2 - Author: Samuel Williams - Date: 2019-06-05 13:32:27 +0900 - - Improve benchmarks and tests for threads. - -commit a6a4e86029f16415767b579e62691f09b1fb6075 - Author: Samuel Williams - Date: 2019-06-05 13:32:06 +0900 - - Ignore `/build*`. - -commit e690df1f1ef4f791295448f9192d6e027400ee72 - Author: Nobuyoshi Nakada - Date: 2018-09-27 18:17:28 +0900 - - Marshal distant past/future - - [Feature #15160] - -commit 8797f48373dcfa3ff8e748667732dea8aea4347e - Author: Nobuyoshi Nakada - Date: 2019-06-19 14:03:02 +0900 - - New buffer for shared string - - * string.c (rb_str_init): allocate new buffer if the string is - shared. [Bug #15937] - -commit 148f50fc789d59319113a1fd2897dbe552e73e73 - Author: Takashi Kokubun - Date: 2019-06-19 10:09:35 +0900 - - Update homebrew on Travis - - because Travis is crashing like "Error: Your Homebrew is outdated. - Please run `brew update`." - https://travis-ci.org/ruby/ruby/jobs/547485832 - -commit 28678997e40869f5591eae60edd9757334426ffb - Author: Nobuyoshi Nakada - Date: 2019-06-19 09:44:26 +0900 - - Preserve the string content at self-copying - - * string.c (rb_str_init): preserve the embedded content when - self-copying with a capacity. [Bug #15937] - -commit d009e321a08d2ca401fceefa638e7e50872f5f54 - Author: aycabta - Date: 2019-06-19 09:19:41 +0900 - - Use IRB.conf[:AUTO_INDENT] setting in multiline mode - -commit c9729329862a979f2d07d7907c7a515dfcfb2ba4 - Author: git - Date: 2019-06-19 08:29:23 +0900 - - * 2019-06-19 - -commit 85ff2d74a217a02d050492e607b3a2764645107b - Author: aycabta - Date: 2019-06-19 08:28:00 +0900 - - Avoid auto indent in prompt when dynamic auto indent - -commit 84903b31c87b98083cec406745dc7e3088ba643b - Author: aycabta - Date: 2019-06-18 21:56:41 +0900 - - Fix auto indent crash when blank input - -commit 32e65e9e5adbfb8b3d67e0ec0865a3f90d2e82dd - Author: aycabta - Date: 2019-06-18 21:55:40 +0900 - - Print starting debug message with RELINE_STDERR_TTY - -commit af800b8ca25fc453da4e73b9e4628299605b5289 - Author: Takashi Kokubun - Date: 2019-06-18 21:22:06 +0900 - - Now test-bundler is not working on macOS either - - Let's stop reporting the failure until it gets stable. - We can see the build status on console with this config anyway. - -commit 235e72f17e2c02074721150035ffc30e339c307f - Author: aycabta - Date: 2019-06-18 20:57:58 +0900 - - Implement auto indent for multiline - -commit e6aa0a61fac94f16250412b8ac80657dd9d6d572 - Author: Kazuhiro NISHIYAMA - Date: 2019-06-18 17:30:01 +0900 - - [DOC] non-nil `$,`,`$;` will be deprecated [ci skip] - - ``` - % ruby -e '$,=""; $;=""' - -e:1: warning: non-nil $, will be deprecated - -e:1: warning: non-nil $; will be deprecated - ``` - -commit 8b3774be3dd9f472bddd99e84e3c9fe2ff99d7ac - Author: Nobuyoshi Nakada - Date: 2019-06-18 13:27:05 +0900 - - Fix memory leak - - * string.c (str_make_independent_expand): free independent buffer. - [Bug# 15935] - - Co-Authored-By: luke-gru (Luke Gruber) - -commit c770c98ac42ee20129f1296d9f7c4dad2ae45124 - Author: git - Date: 2019-06-18 12:21:38 +0900 - - * expand tabs. - -commit 9dec4e8fc3a6018261834b5ac9b9877f787b97ca - Author: Alan Wu - Date: 2019-05-13 09:22:37 +0900 - - String#b: Don't depend on dependent string - - Registering a string that depend on a dependent string as fstring - can lead to use-after-free. See c06ddfe and 3f95620 for details. - - The following script triggers use-after-free on trunk, 2.4.6, 2.5.5 - and 2.6.3. Credits to @wanabe for using eval as a cross-version way - of registering a fstring. - - ```ruby - a = ('j' * 24).b.b - eval('', binding, a) - - p a - 4.times { GC.start } - p a - ``` - - - string.c (str_replace_shared_without_enc): when given a - dependent string, depend on the root of the dependent - string. - - [Bug #15934] - -commit 39a8c7142400d582ac4bb02a1804a5949f8da9bc - Author: git - Date: 2019-06-18 06:05:43 +0900 - - * 2019-06-18 - -commit c8edf70cd20b9ff72ebd1e9402a556089f6ff204 - Author: Jeremy Evans - Date: 2019-06-12 04:05:04 +0900 - - Update documentation for File.executable{,_real}? to mention Windows issues - - Fixes [Bug #15664] - -commit 801d0d9dd72209dab238e3d580ad1ab8116fd8fe - Author: Nobuyoshi Nakada - Date: 2019-06-17 23:25:47 +0900 - - Support Bison 3 in ripper - -commit c8e9e0b74b7fb2e225af8708426389db88f80683 - Author: Nobuyoshi Nakada - Date: 2019-06-17 22:30:52 +0900 - - Fix wrong "void value expression" error - - * parse.y (value_expr_check): `then` or `else` only `if` is not a - void value expression, as the counterpart is evaluated as `nil`. - [Bug #15932] - -commit 01b3a3804334be19d013526d3edde2b84399ae43 - Author: Nobuyoshi Nakada - Date: 2019-06-17 21:36:41 +0900 - - Fix wrong "void value expression" error - - * parse.y (value_expr_check): if either of `then` or `else` - statements is not a void value expression, the whole `if` is not - also a void value expression. [Bug #15932] - -commit 09a846085c2e675aa8397e9351c52d68215d7fa4 - Author: git - Date: 2019-06-17 19:56:35 +0900 - - * 2019-06-17 - -commit a064e46762ec0bfd40e6a04242d9e62fdd21e1f0 - Author: Nobuyoshi Nakada - Date: 2019-06-17 03:09:52 +0900 - - Support Bison 3 - -commit 53e9908d8afc7f03109b0aafd1698ab35f512b05 - Author: Nobuyoshi Nakada - Date: 2019-06-16 23:41:06 +0900 - - Fix memory leak - - * string.c (str_replace_shared_without_enc): free previous buffer - before replaced. - - * parse.y (gettable): make sure in advance that the `__FILE__` - object shares a fstring, to get rid of replacement with the - fstring later. - TODO: this hack may be needed in other places. - - [Bug #15916] - - Co-Authored-By: luke-gru (Luke Gruber) - -commit d4929f518562b4e346af57f724232595b674f2b0 - Author: git - Date: 2019-06-16 23:01:46 +0900 - - * expand tabs. - -commit 1ff26dc4c706cd6e8f227d159a2b23cba5f6de77 - Author: Yusuke Endoh - Date: 2019-06-16 23:00:05 +0900 - - Revert "Make constant assignments more conforming to JIS X 3017:2013 11.4.2.2.3" - - This reverts commit 44caca11cfa6bea01a1ef738846183f1a56d5658. - - The change caused a build failure. - http://ci.rvm.jp/results/trunk-vm-asserts@silicon-docker/2102153 - -commit 11f8c89171ff0b260891dec064cf69d9400a0704 - Author: git - Date: 2019-06-16 22:48:23 +0900 - - * expand tabs. - -commit 44caca11cfa6bea01a1ef738846183f1a56d5658 - Author: Yuki Yugui Sonoda - Date: 2019-06-16 22:28:34 +0900 - - Make constant assignments more conforming to JIS X 3017:2013 11.4.2.2.3 - - compile.c (NODE_CDECL): Evaluate the module before the value - test/ruby/test_const.rb (test_evaluation_order): added a test case - -commit 2fb1564c02899c73519164ddf3f2430dfbc8f3d6 - Author: aycabta - Date: 2019-06-16 14:46:22 +0900 - - Implement line_no correctly - -commit 17e6536fe0c6a7d213f500827346cacc210c536e - Author: nagachika - Date: 2019-06-16 11:59:52 +0900 - - tool/redmine-backporter.rb: Change redmine git revisions URL path. - -commit 72cc5cf0190618c67a0f697e91c61be07eadd5c5 - Author: git - Date: 2019-06-16 11:46:37 +0900 - - * 2019-06-16 - -commit ee7999bb8453201f895e6154b9169c4e5b5b9ef6 - Author: nagachika - Date: 2019-06-16 11:39:12 +0900 - - tool/redmine-backporter.rb: Add parens to fix condition for svn revision search. - -commit 5d7905490659b9b4f4604e9fd479563fcd103b34 - Author: Nobuyoshi Nakada - Date: 2019-06-15 12:04:16 +0900 - - Revert github/pull/2230, commit miss - -commit 6fa4c904483588d2aa08d1fd84e2b8efc95227df - Author: Nobuyoshi Nakada - Date: 2019-06-15 11:58:02 +0900 - - Prefer `enum yytokentype` to int - -commit 46527e1bf4a66a42ac4729e23f12bdfec8ae953e - Author: Josh Cheek - Date: 2019-06-15 11:13:27 +0900 - - Test for blank lines between leadinig dot method chains - -commit b8730f1251d94c0992db663f119df0a2bb31dca1 - Author: Josh Cheek - Date: 2019-02-06 16:10:23 +0900 - - Multiline method chain with leading dot works for blank lines - -commit 2240de98c0b174c2d0e61dd647776f5d5c404639 - Author: Josh Cheek - Date: 2019-02-06 15:58:50 +0900 - - Remove blank line I accidentally added - -commit 162bfa1c7cf325f6efce6f6e080d29db91fbcf78 - Author: Josh Cheek - Date: 2019-02-06 15:43:27 +0900 - - Test comments between multiline method chain - -commit cc180e937100c72b7ce849602c9d93d8e8a3d2aa - Author: Josh Cheek - Date: 2019-02-06 15:43:16 +0900 - - Rename LINEND to EMPTYLN - -commit 5af5dd463929837f7684d1e0865ac2d9394e19a5 - Author: Josh Cheek - Date: 2019-02-06 13:11:30 +0900 - - Omg, it works! - - I'll rename it and squash this commit later, - just wanted to make sure I couldn't lose it - (took a long time to come up with). - -commit e6aefe2a135102095bcaec379251dff2f4e843d6 - Author: git - Date: 2019-06-15 11:09:33 +0900 - - * 2019-06-15 - -commit 5dd8fdd3f328f741fae4abba00c478e8a51d2a7e - Author: Yusuke Endoh - Date: 2019-06-15 11:06:39 +0900 - - test/net/imap/test_imap.rb: wait for the server thread to start - - In some slow CI environments, the invocation of a thread seems very - slow. This causes a test failure to attempt to connect a server that - does not start yet. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11x/ruby-master/log/20190615T002420Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11x/ruby-master/log/20190611T022407Z.fail.html.gz - -commit d365fd5a024254d7c105a62a015a7ea29ccf3e5d - Author: Nobuyoshi Nakada - Date: 2019-06-14 18:09:45 +0900 - - An operator is not allowed just after `|>` - - https://twitter.com/yukihiro_matz/status/1139454774640726019 - -commit d780c3662484d6072b3a6945b840049de72c2096 - Author: Kazuhiro NISHIYAMA - Date: 2019-06-14 17:29:51 +0900 - - Pipeline operator is experimental [ci skip] - -commit aa32465ab36a56655d214313b828422563e109af - Author: Nobuyoshi Nakada - Date: 2019-06-14 15:31:03 +0900 - - irb.rb: [DOC] the default prompt includes :PROMPT_N [ci skip] - -commit 50bb8b6052a1fdec72ac46f9736719438fd5002c - Author: Nobuyoshi Nakada - Date: 2019-06-14 08:15:39 +0900 - - Use Exception#full_message for traceback - -commit 9402d019a51cf74cd6fceab534d4f1bde23a75e7 - Author: aycabta - Date: 2019-06-14 08:45:52 +0900 - - Remove debug print - -commit d0e5564140356ac6546a41d8a236287d952d563d - Author: aycabta - Date: 2019-06-14 08:45:35 +0900 - - Set allow_escape_code for prompt - -commit f80771f0a989efdde2276d4d6d213cb096843e92 - Author: aycabta - Date: 2019-06-14 08:26:06 +0900 - - Use Reline.prompt_proc in IRB - -commit 3757e492fb815656341dd430465e0f069e1bd562 - Author: git - Date: 2019-06-14 07:46:01 +0900 - - * 2019-06-14 - -commit 64310b2573a9e1e83cd405aed4a5c3351793e09d - Author: aycabta - Date: 2019-06-14 07:42:53 +0900 - - Add Reline.prompt_proc - -commit 56d595198b607d2abbb0f60ef0d9e1217d08d1af - Author: Yusuke Endoh - Date: 2019-06-13 23:04:41 +0900 - - test/webrick/test_ssl_server.rb: Use EnvUtil.timeout for timeout scale factor - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-master/log/20190613T091708Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-master/log/20190612T011708Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-master/log/20190611T211707Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-master/log/20190604T171708Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-master/log/20190529T091707Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-master/log/20190528T031708Z.fail.html.gz - -commit e75c278183306d28f0210673905437c2f6350b26 - Author: Yusuke Endoh - Date: 2019-06-13 22:44:01 +0900 - - test/lib/test/unit/assertions.rb (assert_cpu_usage_low): tweak the wait - - It still fails randomly. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/amazon2/ruby-master/log/20190613T093003Z.fail.html.gz - https://rubyci.org/logs/mswinci.japaneast.cloudapp.azure.com/vc12-x64/ruby-master/log/20190613T051547Z.fail.html.gz - -commit aa7211836b769231a2a8ef6b6ec2fd0ec882ef29 - Author: Nobuyoshi Nakada - Date: 2019-06-13 22:19:47 +0900 - - Continue to the next line beginning with a pipeline - -commit 043f010c28e82ea38978bf8ed885416f133b5b75 - Author: Nobuyoshi Nakada - Date: 2019-06-13 22:03:10 +0900 - - parse.y: moved pipeline to expr - - To allow arguments without parentheses. - -commit f169043d81524b5b529f2c1e9c35437ba5bc3a7a - Author: Nobuyoshi Nakada - Date: 2019-04-23 13:14:27 +0900 - - Add pipeline operator [Feature #15799] - -commit e717d6faa8463c70407e6aaf116c6b6181f30be6 - Author: Nobuyoshi Nakada - Date: 2019-06-08 21:35:33 +0900 - - IO#set_encoding_by_bom - - * io.c (rb_io_set_encoding_by_bom): IO#set_encoding_by_bom to set - the encoding by BOM if exists. [Bug #15210] - -commit bdc8b3789ad388ff1d573369de6b085483b17098 - Author: git - Date: 2019-06-13 18:07:19 +0900 - - * expand tabs. - -commit 02b1a85385e7fd18b8bcecfdbbf1acbac703c039 - Author: Luke Gruber - Date: 2019-06-11 05:46:57 +0900 - - remove 2 redundant calls to rb_str_dup - - Because `rb_class_path` calls `rb_str_dup` already. - - Closes: https://github.com/ruby/ruby/pull/2232 - -commit 69509df2f4ed8e052d683fa3901c9f97d00ed7fc - Author: Kazuhiro NISHIYAMA - Date: 2019-06-13 16:42:31 +0900 - - squeeze space [ci skip] - -commit 7f79a86d8b4d250ea0e82eb06cd3336edb840a01 - Author: Martin Dürst - Date: 2019-06-13 15:30:03 +0900 - - add comments to mention sort.reverse! - - For array.c (Array#sort) and enum.c (Enumerable#sort_by), - add comments mentioning that sort.reverse! / sort_by { ... }.reverse! - can/should be used to reverse the result. [ci skip] - -commit 2a26c1ea24ec107cfb43d8561ad28984846b7660 - Author: Takashi Kokubun - Date: 2019-06-13 00:40:27 +0900 - - Clarify the Ruby version support status in IRB more - -commit 8d84e119da52573f9dfe3b2fe7a6d1c27b7fd71f - Author: git - Date: 2019-06-13 00:32:59 +0900 - - * 2019-06-13 - -commit 180802906190501e4eb9b9423adfb6116ceb334b - Author: Takashi Kokubun - Date: 2019-06-13 00:29:45 +0900 - - make sync-default-gems GEM=irb - - Upgrade IRB to https://github.com/ruby/irb/commit/41ea43a4a732e094acfa1b0fc1473fdcda9e6227 - - Mostly backport changes. - -commit 88411d350e9e3eb6425375238a20af9b6aae28ae - Author: Nobuyoshi Nakada - Date: 2019-06-12 15:30:07 +0900 - - Another incomplete string case - -commit 9593e76ac2cfd9366b8b904df3fc3e1047af3aee - Author: Nobuyoshi Nakada - Date: 2019-06-12 15:23:47 +0900 - - Ripper::Lexer: fallback parse error token to the previous one - -commit 8354cfd03b1e9961266e1fe56fca481450679b98 - Author: aycabta - Date: 2019-06-12 11:00:25 +0900 - - Treat "begin rescue end" correctly - -commit c1d78a7f0ece2004822193a0c1f1fd3dc38c2fdf - Author: Neeraj Bhunwal - Date: 2019-04-16 13:03:08 +0900 - - do_mutex_lock: release mutex before checking for interrupts (fixes issue 15360) - -commit 5e018214e7435030727a97ac49db038d96438e74 - Author: Jeremy Evans - Date: 2019-06-11 07:47:56 +0900 - - Fix SystemStackError when calling a method in an unused refinement - - Fixes [Bug #15720] - -commit 4f9e7c95e4c8216c17f46747092f28df9c54fab7 - Author: git - Date: 2019-06-12 01:16:49 +0900 - - * 2019-06-12 - -commit 23e3c1704b344819fcea907a67aafd1e6be8a9df - Author: git - Date: 2019-06-12 01:16:45 +0900 - - * expand tabs. - -commit 6db2d6d8520f88e25d97af77495eb6c879f90b21 - Author: Aaron Patterson - Date: 2019-06-01 05:25:24 +0900 - - Add compaction support for more types. - - This commit adds compaction support for: - - * Fibers - * Continuations - * Autoload Constants - -commit c4cbaef216ffcc9bda70cc328a805ad679ccaa8c - Author: Nobuyoshi Nakada - Date: 2019-06-11 11:13:26 +0900 - - assert_cpu_usage_low with timeout scale - - * test/lib/test/unit/assertions.rb (assert_cpu_usage_low): apply - the timeout scale to measuring period. this assertion is very - runtime environment dependent. - -commit 42f0a8fd6f7e1f4afcb17aeb34e9f8ddf8d66b9b - Author: Nobuyoshi Nakada - Date: 2019-06-11 11:09:02 +0900 - - MIN_HZ and MIN_MEASURABLE constants - - * test/lib/test/unit/assertions.rb (Test::Unit::Assertions): - promoted MIN_HZ and MIN_MEASURABLE as constants, which should be - constant through the process. - -commit eb016d835373cdce6f08694e527d7a569c208cb5 - Author: Nobuyoshi Nakada - Date: 2019-06-11 11:03:55 +0900 - - Generalize timeout_scale - - * test/lib/test/unit.rb (Test::Unit::TimeoutOption): renamed - SubprocessOption. - - * test/lib/test/unit.rb (Test::Unit::TimeoutOption#setup_options): - prefer `--timeout-scale` option. - - * test/lib/test/unit.rb (Test::Unit::TimeoutOption#non_options): - prefer `ENV["RUBY_TEST_TIMEOUT_SCALE"]`. - -commit 39ae88ad0dd0f8d7cf732e8567af13e7f2ce9748 - Author: Nobuyoshi Nakada - Date: 2019-06-11 22:31:57 +0900 - - Refined syntax error messages - -commit 140b8117bd3c32cb9d0b144937b90f0178a00b0e - Author: Nobuyoshi Nakada - Date: 2019-06-11 02:09:00 +0900 - - &. is not allowed inside LHS of massign - - https://hackerone.com/reports/605262 - -commit 42ac8890efbd38dc021bf5edab325a69be7fc4cf - Author: Kazuhiro NISHIYAMA - Date: 2019-06-11 12:32:13 +0900 - - Fail test if load ~/.irbrc - -commit e4364dbf6ecd9f87588f6f9e93d213046b75478e - Author: Hiroshi SHIBATA - Date: 2019-06-11 12:16:26 +0900 - - Fixed the code-style with the upstream rule. - -commit 4adc6f07ef8e1c620bee06f3614ce58b51839b34 - Author: Yusuke Endoh - Date: 2019-06-11 07:15:31 +0900 - - test/lib/test/unit/assertions.rb (assert_cpu_usage_low): Relax the limit - - CPU usage 1% causes occesional test failure. Try to use 5%. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/gentoo/ruby-master/log/20190604T153002Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/gentoo/ruby-master/log/20190610T153002Z.fail.html.gz - -commit fe9701ee0062f15409107a92582a9e6e5630bfbe - Author: git - Date: 2019-06-11 06:56:46 +0900 - - * expand tabs. - -commit de4b2930f71a88358c8f1968e410f420c54853bd - Author: Yusuke Endoh - Date: 2019-06-11 06:53:33 +0900 - - ext/socket/ipsocket.c: Use SO_REUSEADDR for local_host/port - - Sometimes ruby/spec fails when trying to specify local_host and - local_port for TCPSocket.open. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris11s-sunc/ruby-master/log/20190610T192504Z.fail.html.gz - -commit 6096baea5db6505206f0e636c4e5272b4eb72da4 - Author: Yusuke Endoh - Date: 2019-06-11 06:45:49 +0900 - - test/net/http/test_http.rb: Extend the timeout - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable10s/ruby-master/log/20190610T071910Z.log.html.gz - -commit d7e7e998625a3ab10c76ba94816db9d6a753e058 - Author: git - Date: 2019-06-11 00:25:57 +0900 - - * 2019-06-11 - -commit be6b462489e42b6a8ee60ba96fc18fcc9794f819 - Author: Kazuki Tsujimoto - Date: 2019-06-11 00:20:10 +0900 - - Use checktype for performance - -commit f0bfa71ab3ce5f6045a39e503f6decbc9b3a7d3d - Author: Takashi Kokubun - Date: 2019-06-10 23:23:15 +0900 - - Use UTC for file2lastrev timezone - - 02155da7bad37bd1c8adadd486d2d16eac7af43b got a claim about sacrificing - ability to compare arbitrary `RUBY_DESCRIPTION`s without converting - timezones. - - Because most of the people would be familiar with timezone conversion - with UTC but it'd be harder when it comes to JST, this commit just - changes the timezone in f42588f754d5885ec30631e5008c383f3ef905d8 to UTC. - - Another bonus in using UTC is that we can use a shorter variant of - ISO 8601 format like "2019-06-10T14:26:24Z" (the last Z part). - -commit 02155da7bad37bd1c8adadd486d2d16eac7af43b - Author: Takashi Kokubun - Date: 2019-06-10 22:20:00 +0900 - - Make file2lastrev timezone consistent with git log - - Using the same timezone for all commits is convenient when just looking - dates in RUBY_DESCRIPTION, but usually we also check `git log` when - we're interested in the order of commits. - `git log` shows times in committer's timezone and forcing RUBY_RELEASE_DATE - to JST makes it harder to find a corresponding commit from `git log`. - - Because this label is only used in development, I believe there's no - strict requirement to use traditional timezone for release here. - - Also when building Ruby after committing from a non-JST timezone, I'd be - surprised to see a strange time (in a different timezone) for my very new - commit in `ruby -v`. - -commit caa90202c9d2acbb9bce32ceebe6166c2f1de5d0 - Author: Takashi Kokubun - Date: 2019-06-10 22:04:51 +0900 - - Make sure to suppress .irbrc on benchmark - - By the way, this is already improved by nobu: - - ``` - $ benchmark-driver benchmark/irb_exec.yml --rbenv '2.6.3;2.7.0-preview1;before;after' -v - 2.6.3: ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux] - 2.7.0-preview1: ruby 2.7.0preview1 (2019-05-31 trunk c55db6aa271df4a689dc8eb0039c929bf6ed43ff) [x86_64-linux] - before: ruby 2.7.0dev (2019-06-10T21:13:14+09:00 master 973fd18f11) [x86_64-linux] - after: ruby 2.7.0dev (2019-06-10T21:18:56+09:00 master 976c689ad4) [x86_64-linux] - Calculating ------------------------------------- - 2.6.3 2.7.0-preview1 before after - irb_exec 11.868 5.872 6.297 10.278 i/s - 30.000 times in 2.527776s 5.108997s 4.764167s 2.918821s - - Comparison: - irb_exec - 2.6.3: 11.9 i/s - after: 10.3 i/s - 1.15x slower - before: 6.3 i/s - 1.88x slower - 2.7.0-preview1: 5.9 i/s - 2.02x slower - - ``` - -commit 880204cf55813c975f3bbd0be93b292a099d5890 - Author: Nobuyoshi Nakada - Date: 2019-06-10 21:45:46 +0900 - - irb/cmd/help.rb: return nil after the redefinition - -commit 976c689ad478b8010b053aa270a28bd236b8380e - Author: Nobuyoshi Nakada - Date: 2019-06-10 21:07:24 +0900 - - irb: defer requiring rdoc to improve the start up time - -commit 973fd18f11f5026024fc43e2848db030110bdaee - Author: Takashi Kokubun - Date: 2019-06-10 21:13:12 +0900 - - Add a benchmark of irb boot time - - ``` - $ benchmark-driver benchmark/irb_exec.yml --rbenv '2.6.3;2.7.0-preview1' - Calculating ------------------------------------- - 2.6.3 2.7.0-preview1 - irb_exec 11.844 5.171 i/s - 30.000 times in 2.532887s 5.801960s - - Comparison: - irb_exec - 2.6.3: 11.8 i/s - 2.7.0-preview1: 5.2 i/s - 2.29x slower - ``` - -commit b9996b7b323d7e238512fa8dbd3d3b8576ba06e1 - Author: git - Date: 2019-06-10 19:48:08 +0900 - - * 2019-06-10 - -commit 626ae5a9b6531412f598b2f37a15821628857707 - Author: Benoit Daloze - Date: 2019-06-10 19:47:08 +0900 - - Resolv specs should pass on Windows now - -commit 60af6fef3c664ac7dab53fcde28c30f30ce862aa - Author: Benoit Daloze - Date: 2019-06-10 19:45:00 +0900 - - Fix Resolv specs to not depend on a system /etc/hosts file - - * https://rubyci.org/logs/rubyci.s3.amazonaws.com/archlinux/ruby-master/log/20190609T153804Z.fail.html.gz - * Thanks @naruse for the tip. - -commit 614154bbb6adeb06cce755be7b8540e1594703c5 - Author: Hiroshi SHIBATA - Date: 2019-06-09 10:49:51 +0900 - - Added missing dependency for rake examples. - -commit 2c59c58a47db31e28757e1936dd355a98352b489 - Author: Hiroshi SHIBATA - Date: 2019-06-09 11:00:21 +0900 - - Fixed wrong BUNDLE_BIN_PATH for ruby core. - -commit 44f7f093ab8d8663cbbe31d8a975ae6e8d20724f - Author: Hiroshi SHIBATA - Date: 2019-06-09 11:00:07 +0900 - - Added the condition for ruby_core repository. - -commit 57ccea6232a76aec5711e5e583cffe0aa5221928 - Author: Hiroshi SHIBATA - Date: 2019-06-01 19:29:56 +0900 - - Revert to change for filelist of bundler gemspec. - -commit 8f37629519ad330032a38ac0e871b2912ed38a1b - Author: Hiroshi SHIBATA - Date: 2019-06-01 18:49:40 +0900 - - Merge bundler master from upstream. - - Pick from 8dd59e3ba97eb80a599f8149f31bf40773b69dc0 - -commit 66508992483ae5d77b56a98427c50c772341c0ac - Author: Jeremy Evans - Date: 2019-06-09 12:27:49 +0900 - - Make Resolv::DNS#each_name accept Resolv::IPv{4,6} arguments - - These arguments were previously documented as supported, but not - actually supported. - - Patch from Toru Iwase - - Fixes [Bug #15900] - -commit a432c014c99eb44b3f446aa43c7e83c945d3ec8e - Author: git - Date: 2019-06-09 12:30:40 +0900 - - * 2019-06-09 - -commit 562c0bfedaa96a1488cbfc0d282412743ea8cde0 - Author: Nobuyoshi Nakada - Date: 2019-06-09 11:34:58 +0900 - - Split test_strip_bom for each encoding - -commit a8ef498d6bfbd5c665b75a0782526d18b361dd5b - Author: Nobuyoshi Nakada - Date: 2019-06-09 11:10:34 +0900 - - Add tests of the encoding with BOM - -commit f42588f754d5885ec30631e5008c383f3ef905d8 - Author: Nobuyoshi Nakada - Date: 2019-06-08 20:08:18 +0900 - - Make RUBY_RELEASE_DATE full on development - - I cannot tell the order just by commit hashes. - -commit 1ca03dc4f77de4030534596ad23af64be925dc44 - Author: Nobuyoshi Nakada - Date: 2019-06-08 19:46:32 +0900 - - Suppress warnings by gcc 9.1 - -commit 27a59ca2c846e14ec6dbcb86fd2d6f65399ff28d - Author: Nobuyoshi Nakada - Date: 2019-06-08 19:40:55 +0900 - - file.c: fix compile error with MacPorts gcc - - With the SDK of Xcode 10.2.1, `API_AVAILABLE` and so on macros are - not defined in when using a compiler other - than clang (which has `__has_feature` and `__has_attribute`), but - `__API_AVAILABLE` macro and so on are defined, which are also - defined in . - - I suspect this is a bug of the SDK. - -commit 5a840517ae738357d3d5afdcef61461e3969edfa - Author: Nobuyoshi Nakada - Date: 2019-06-08 18:44:18 +0900 - - Fix broken `gem unpack` - - * lib/rubygems/commands/unpack_command.rb: 'rubygems/package' is - required here, to fix broken `gem unpack` command. - -commit 21de4a574f363e77c64d36ce2671fa55e7955b49 - Author: Nobuyoshi Nakada - Date: 2019-06-08 18:44:04 +0900 - - io.c: fold very very long lines - -commit 3776c48cf41950d2cc994676bb2735ee1a0a474e - Author: Hiroshi SHIBATA - Date: 2019-06-08 13:44:40 +0900 - - Revert "require rubygems/package where used" - - This reverts commit b76630f73e8362d3072bfa7178471ddc5d21c235. - - It fails with `make test-bundler BUNDLER_SPECS=runtime/setup_spec.rb:1204` - -commit 1696f80f400518ea1b5304c23d8192140a7e55c6 - Author: git - Date: 2019-06-08 00:15:42 +0900 - - * 2019-06-08 - -commit 19977cc761cf25748676e45a5a7a706b0d7fd70d - Author: aycabta - Date: 2019-06-07 23:54:49 +0900 - - Remove unnecessary variables - -commit ffaefcadd81cb8e4d38114e76b1831ba95d6a6f3 - Author: Nobuyoshi Nakada - Date: 2019-06-07 23:08:43 +0900 - - Report a sudden death of workers - -commit 75751dca2b9f573db923cecd9767e9174fb69a98 - Author: Yusuke Endoh - Date: 2019-06-07 23:33:23 +0900 - - test/openssl/utils.rb: Extend the timeout for armv7l - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-master/log/20190607T051708Z.fail.html.gz - -commit b76630f73e8362d3072bfa7178471ddc5d21c235 - Author: Nobuyoshi Nakada - Date: 2019-06-07 22:34:28 +0900 - - require rubygems/package where used - - * lib/rubygems/commands/unpack_command.rb: 'rubygems/package' is - required. fix the failure of `gem unpack` command. - - * lib/rubygems/source/local.rb: ditto. - - * lib/rubygems/source/specific_file.rb: ditto. - -commit 6566919176834efb47ea717967669ca83eb78347 - Author: Nobuyoshi Nakada - Date: 2019-06-07 18:45:49 +0900 - - ripper_state_lex.rb: chomp CR - - * lib/rdoc/parser/ripper_state_lex.rb (RDoc::Parser::RipperStateLex): - chomp newline, including CR, from here document terminator. - - Closes: ruby/rdoc#694 - Closes: ruby/rdoc#697 - Closes: ruby/rdoc#705 - -commit a6a26e42b15c46f117f4fce07a2050e9d727355d - Author: Yusuke Endoh - Date: 2019-06-07 14:45:06 +0900 - - compile.c: Partially revert r63870 which caused wrong optimization - - [Bug #15906] - -commit b8af33e63bd286308e5e1b20c182ec50e0f194de - Author: Jeremy Evans - Date: 2019-05-25 13:32:37 +0900 - - Skip one assertion for OpenSSL::PKey::EC::Point#mul on LibreSSL - - LibreSSL 2.8.0+ does not support multiple elements in the first - argument. - -commit 119ca4343cceed031f017ce2e0d2a1e709344a0f - Author: Jeremy Evans - Date: 2019-06-07 13:10:21 +0900 - - Make specs pass on OpenBSD - - Skip Process clockres specs that don't work on either FreeBSD or - Solaris/AIX in addition to OpenBSD. - - Run most current String#crypt specs on non-OpenBSD, and add a new - set of crypt specs for OpenBSD, which support bcrypt but not DES - in crypt(3). - - Use @server.connect_address instead of @server.getsockname in some - socket tests, as OpenBSD does not treat connection to all zero - IPv4 or IPv6 addresses as connection to localhost. - - When trying to connect using UDP on an unsupported address family, - allow Errno::EPROTONOSUPPORT in addition to Errno::EAFNOSUPPORT, - as OpenBSD raises the former. - -commit c55de95ff1c4ea6313c2863037703a0e5f0d0f4f - Author: Nobuyoshi Nakada - Date: 2019-06-07 10:05:42 +0900 - - Dummy Makefile.in for CIs - -commit 7e403dc6c84356e83c02538e76cc70ac789921ac - Author: Yusuke Endoh - Date: 2019-06-07 09:26:40 +0900 - - test/openssl/utils.rb: Extend the timeout - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-master/log/20190606T171708Z.fail.html.gz - -commit c7477c3e1fb661ed1cbcda9c7fbc710f77390845 - Author: Nobuyoshi Nakada - Date: 2019-06-07 09:09:29 +0900 - - Moved Makefile.in under template - -commit aef3bb3513d5b275ed9fa2765e83fab97122fd40 - Author: Nobuyoshi Nakada - Date: 2019-06-07 09:06:55 +0900 - - Remove the dependency of Makefile on Makefile.in transitionally - -commit 200c840b952a65fca10d5f3a47b69288f1d3dc65 - Author: Nobuyoshi Nakada - Date: 2019-06-07 09:02:48 +0900 - - Revert "Moved Makefile.in under template" - - This reverts commits: - * 6f9d5fafe040cb02a1278fbfcdcb8063d564824c - * bb3c89b6437049e26669b2156310670d5e06e386 - - And remove the dependency of Makefile on Makefile.in - transitionally. - -commit bb3c89b6437049e26669b2156310670d5e06e386 - Author: Nobuyoshi Nakada - Date: 2019-06-07 08:58:53 +0900 - - Makefile.in moved under template - -commit 6f9d5fafe040cb02a1278fbfcdcb8063d564824c - Author: Nobuyoshi Nakada - Date: 2019-06-06 12:49:08 +0900 - - Moved Makefile.in under template - -commit aee77901310389462c0971e7c45f7c19410f3371 - Author: git - Date: 2019-06-07 02:04:51 +0900 - - * 2019-06-07 - -commit 2bc09665ab8e72d4320a55a274eae903262f29cd - Author: Nobuyoshi Nakada - Date: 2019-06-07 02:00:48 +0900 - - win32/registry.rb: fix potential infinite loop - - * ext/win32/lib/win32/registry.rb (Win32::Registry#each_value): - advance the index even if an error occurred in #read. - -commit 09a2189c1b5dd5a28a052f9464a516213f89d6e7 - Author: Nobuyoshi Nakada - Date: 2019-06-07 01:56:22 +0900 - - Adjust indent - -commit 9f941f61efb5bdf6572f2d41ad29bcab267ecf5f - Author: Yusuke Endoh - Date: 2019-06-06 21:19:09 +0900 - - test/webrick/test_filehandler.rb: extend the timeout for Solaris CI - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable10s/ruby-master/log/20190602T031908Z.fail.html.gz - -commit 60924636e5184c967df129e523ba9374ccc57144 - Author: Yusuke Endoh - Date: 2019-06-06 21:18:26 +0900 - - test/net/http/test_http.rb: extend the timeout for Solaris CI - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable10s/ruby-master/log/20190605T231909Z.fail.html.gz - -commit fcc36d767b60329692b27d685ba867848da6aa04 - Author: Kazuhiro NISHIYAMA - Date: 2019-06-06 16:49:40 +0900 - - Revert "Stop `circular require` warning" - - This reverts commit c2a9c350249588677cf68b506539093504927eac. - - It cannot stop `circular require` warning. - -commit c2a9c350249588677cf68b506539093504927eac - Author: Kazuhiro NISHIYAMA - Date: 2019-06-06 15:38:00 +0900 - - Stop `circular require` warning - -commit 861b50d81d9ed5f57b78c87b2e2f24f718db31dd - Author: Yusuke Endoh - Date: 2019-06-06 15:25:18 +0900 - - lib/rubygems.rb: Stop "Leaked file descriptor" warning - - Bundler.setup changes Gem::DefaultUserInteraction.ui and does not close - it. This change makes sure that it is closed. - -commit 1e54903684aa3c9ea3fe54520157846a1b1f07be - Author: Yusuke Endoh - Date: 2019-06-05 21:07:27 +0900 - - test/openssl: Support OpenSSL 1.1.1 - - OpenSSL 1.1.1 rejects some shorter keys, which caused some failures of - `make test-all TESTS=openssl`. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian/ruby-master/log/20190606T003005Z.fail.html.gz - - This change merges 6bbc31ddd1 and 63fb3a36d1 in - https://github.com/ruby/openssl. - Reference: https://github.com/ruby/openssl/pull/217 - -commit d046fe926273d0137f2d5cdf2dedfcfeeb98189b - Author: Nobuyoshi Nakada - Date: 2019-06-06 12:03:19 +0900 - - configure.ac: utilize wide columns for summary - -commit 884576bf12df04abbbc32bc74f142320bc6d7556 - Author: Nobuyoshi Nakada - Date: 2019-06-06 08:21:40 +0900 - - Update RDoc of RUBY_REVISION - -commit 02880d1f4a9ebd1c0a807376fcb25ccd908334b4 - Author: aycabta - Date: 2019-06-06 04:57:52 +0900 - - Skip transpose-words if less than 2 word - -commit fd173372285f9575e424f854d8072b5f71fce1e2 - Author: git - Date: 2019-06-06 04:25:58 +0900 - - * 2019-06-06 - -commit eadc06ba1664102da07ec08aeca6c3e1eccc4e96 - Author: aycabta - Date: 2019-06-06 04:25:16 +0900 - - Add test_ed_transpose_words_for_mbchar - -commit 6dc0541ed3c3736fb4c0b270f2c8df1c0dbfba95 - Author: Takashi Kokubun - Date: 2019-06-05 22:29:53 +0900 - - NEWS: Note about CGI.escapeHTML change [ci skip] - - See https://github.com/ruby/ruby/pull/2226 for benchmark results. - -commit 0a29dc87e62c701db56816cb430daf07a4f02bea - Author: Takashi Kokubun - Date: 2019-06-05 19:28:51 +0900 - - Optimize CGI.escapeHTML by reducing buffer extension - - and switch-case branches. - - Buffer allocation optimization using `ALLOCA_N` would be the main - benefit of patch. It eliminates the O(N) buffer extensions. - - It also reduces the number of branches using escape table like - https://mattn.kaoriya.net/software/lang/c/20160817011915.htm. - - Closes: https://github.com/ruby/ruby/pull/2226 - - Co-authored-by: Nobuyoshi Nakada - Co-authored-by: Yasuhiro MATSUMOTO - -commit f3c877e8deaea91ff27c0fca837c9388d030a896 - Author: Takashi Kokubun - Date: 2019-06-05 20:07:19 +0900 - - Ignore ~/.gitconfig on tool/vcs.rb git commands - - Because some `log.*` git configs may change the result of `git log`, - `RUBY_LAST_COMMIT_TITLE` can be wrongly formatted and break version.c - compilation. So the `git log` executions should not respect user's gitconfig. - -commit 84c294eb0b5b5206f01f062d4c2c860a57c7873c - Author: Nobuyoshi Nakada - Date: 2019-06-05 15:49:55 +0900 - - spec/bundler/bundler/dsl_spec.rb: fix exception to raise - - When describing "Runtime errors", raise a `RuntimeError` as-is. - -commit f258137083051a7fc2412c62e3fb239f93d1fdf8 - Author: Martin Dürst - Date: 2019-06-05 14:03:50 +0900 - - Fix grammar of macro name: ECCESSED -> EXCESSIVE - - Fix the name of the macro variable introduced in 0872ea5330 - from NODE_SPECIAL_EXCESSED_COMMA to NODE_SPECIAL_EXCESSIVE_COMMA. - -commit 1624d77f3ee0a536a6ab37da014d85d16fcd1de2 - Author: Nobuyoshi Nakada - Date: 2019-06-05 13:02:38 +0900 - - error.c: avoid infinite recursion at inspecting the frozen object - -commit b2fe7484e7e7c7741f33bfb02c2fc91f03763ab4 - Author: Nobuyoshi Nakada - Date: 2019-06-05 12:57:14 +0900 - - Test for f1f04caf60e4fc9dc3b12109e0be831f2d692810 - -commit 542d69c894f86cd9a395fdd5296981c998e4a6bf - Author: Nobuyoshi Nakada - Date: 2019-06-05 11:53:24 +0900 - - Revert "vcs.rb support non-inplace build" - - This reverts commit 22cd4027349f803efc7ede284376b7a7013f8dfe. - - It did not make sense due to a typo `@srcidr`. - -commit aa8a8d8f6d259da096afc1deb65cc35e0fe518d0 - Author: Nobuyoshi Nakada - Date: 2019-06-05 12:03:56 +0900 - - Split an assertion for f1f04caf60e4fc9dc3b12109e0be831f2d692810 - -commit c75a3356b39c5a6ede275f38d5d869dbcd5dba93 - Author: aycabta - Date: 2019-06-05 11:29:41 +0900 - - Move I/O access from Reline::KeyStroke to Reline - -commit 7c776038ec3e620625b7fe3e78638afe936f9a5d - Author: git - Date: 2019-06-05 11:29:04 +0900 - - * expand tabs. - -commit f1f04caf60e4fc9dc3b12109e0be831f2d692810 - Author: Jeremy Evans - Date: 2019-05-28 09:52:35 +0900 - - Include inspect value of object in FrozenError messages - - FrozenError#receiver was added recently for getting the related - object programmatically. However, there are cases where FrozenError - is raised and not handled, and in those cases the resulting error - messages lack detail, which makes debugging the error more difficult, - especially in cases where the error is not easily reproducible. - This includes the inspect value of the frozen object in FrozenError - messages, which should make debugging simpler. - -commit 96d65274246a4be88581693f452e6b3bae9fdc5c - Author: Jeremy Evans - Date: 2019-06-05 11:19:37 +0900 - - Add some documentation to Timeout#timeout about possible issues - - Documentation requested in [Bug #15886]. - -commit a105831819af8d143dd587a93844ca982cfadd67 - Author: Nobuyoshi Nakada - Date: 2019-06-05 11:03:57 +0900 - - tool/runruby.rb: support RUNRUBY_USE_LLDB as well as RUNRUBY_USE_GDB - -commit 26d02cc7cdb9fd2272a695083449824a3852717a - Author: Nobuyoshi Nakada - Date: 2019-06-05 11:03:19 +0900 - - tool/runruby.rb: load the default lldb scripts - -commit 5859ea1b1b3f1ba23a15174c6bef4a2ecabafb2f - Author: Nobuyoshi Nakada - Date: 2019-06-05 11:01:23 +0900 - - tool/runruby.rb: load .gdbinit explicitly - -commit 6b66a76f43038eb4b789f0f94729ddcc233d9c56 - Author: git - Date: 2019-06-05 11:01:59 +0900 - - * expand tabs. - -commit 71b14affc6b699f38aabe73125380cab57799e34 - Author: Takashi Kokubun - Date: 2019-06-05 11:00:54 +0900 - - Revert "Optimize CGI.escapeHTML by reducing buffer extension" - - This reverts commit 8d81e59aa7a62652caf85f9c8db371703668c149. - - `ALLOCA_N` does not check stack overflow unlike ALLOCV. I'll fix it and - re-commit it again. - -commit 804a7907a8974cf2f820a7cdce9133843b0fa7db - Author: git - Date: 2019-06-05 10:13:25 +0900 - - * 2019-06-05 - -commit 8d81e59aa7a62652caf85f9c8db371703668c149 - Author: Takashi Kokubun - Date: 2019-06-04 19:58:39 +0900 - - Optimize CGI.escapeHTML by reducing buffer extension - - and switch-case branches. - - Buffer allocation optimization using `ALLOCA_N` would be the main - benefit of patch. It eliminates the O(N) buffer extensions. - - It also reduces the number of branches using escape table like - https://mattn.kaoriya.net/software/lang/c/20160817011915.htm. - - Closes: https://github.com/ruby/ruby/pull/2226 - - Co-authored-by: Nobuyoshi Nakada - Co-authored-by: Yasuhiro MATSUMOTO - -commit b31e1b4a7c5b97d861c2b34ed4ccd982d5c6cb82 - Author: git - Date: 2019-06-04 23:17:38 +0900 - - * expand tabs. - -commit 0b0c6cb7e4fa17247cb214c4eaf924617a55e9a7 - Author: Yusuke Endoh - Date: 2019-06-04 23:15:14 +0900 - - compile.c: Remove the magical `(const NODE*) -1` - - It is used to represent "no default expression" for keyword argument: - `def foo(key:)`. This change uses NODE_SPECIAL_REQUIRED_KEYWORD. - -commit 0872ea53303499caf3584e40f2a5438e86eb4fed - Author: Yusuke Endoh - Date: 2019-06-04 23:11:38 +0900 - - node.h: Avoid a magic number to represent excessed comma - - `(ID)1` was assigned to NODE_ARGS#rest_arg for `{|x,| }`. - This change removes the magic number by introducing an explicit macro - variable for it: NODE_SPECIAL_EXCESSED_COMMA. - -commit 39eae6bf89773ef830b632c02737545ab9eedd35 - Author: Nobuyoshi Nakada - Date: 2019-06-04 21:27:46 +0900 - - tool/vcs.rb: return the commit date as the modified time - -commit 2e2cd8297bf34dd5f613d5001da54949ba228ca6 - Author: git - Date: 2019-06-04 19:55:04 +0900 - - * expand tabs. - -commit 2c60f3714381803218313a6056d3e1dd39782ca1 - Author: Nobuyoshi Nakada - Date: 2016-05-12 16:52:34 +0900 - - random_mt_type - - * random.c: renamed random_data_type as random_mt_type, and append - "MT" to `wrap_struct_name`, respecting the implementation. - -commit c8b001858ed6911db4285d239193bc2384ff6ce0 - Author: Nobuyoshi Nakada - Date: 2019-06-04 19:06:19 +0900 - - Revert "marshal.c: new functions for extensions" - - This reverts a commit miss, 24a96a0228ccf355826644a9daad69e11b67b53b. - -commit 9e472e18d22d013f5da7d5a3769599c5fb763f43 - Author: Nobuyoshi Nakada - Date: 2019-06-04 19:00:48 +0900 - - suppress marshal warnings - -commit 24a96a0228ccf355826644a9daad69e11b67b53b - Author: Nobuyoshi Nakada - Date: 2012-06-22 14:38:03 +0900 - - marshal.c: new functions for extensions - - * marshal.c (rb_marshal_dump_limited): new function for extension - libraries to dump object with limited nest level. - - * marshal.c (rb_marshal_load_with_proc): new function for extension - libraries to load object with hook proc. - -commit 51d27d25d7f6da520821feae94934c4de51b7bb3 - Author: Nobuyoshi Nakada - Date: 2019-06-04 18:51:49 +0900 - - test/lib/test/unit.rb: use colorize.rb - -commit e7aa87c35340c1690e903e8058d3c4e78f0f5335 - Author: Nobuyoshi Nakada - Date: 2019-06-04 18:33:34 +0900 - - Renamed duplicate test - -commit fade26afa72282ee9e2dbbc2e74cd9ea45674dc6 - Author: Nobuyoshi Nakada - Date: 2019-06-04 18:10:09 +0900 - - colorize.rb: get rid of syntax errors on older versions - -commit a57d6d2325ddc71363414acf2f923db0bf0ddc9c - Author: Nobuyoshi Nakada - Date: 2019-06-04 18:08:21 +0900 - - colorize.rb: make `colors_file` optional - - [ci skip] - -commit b0c35ff2db3a4ebb12a405705592e938f50bff64 - Author: Nobuyoshi Nakada - Date: 2019-06-04 17:23:57 +0900 - - colorize.rb: fix reading from test/colors - - [ci skip] - -commit 16cb1fb007a9d107b8c447e862c92c682a56a7c8 - Author: Nobuyoshi Nakada - Date: 2019-06-04 17:09:16 +0900 - - extlibs.rb: colorize - - [ci skip] - -commit 58fd27d3d89451fbbe840348cd66f2205e34e72b - Author: Nobuyoshi Nakada - Date: 2019-06-04 17:06:12 +0900 - - colorize.rb: read `test/colors` file after `$TEST_COLORS` - - [ci skip] - -commit ce4b5d90b2127af185f91037de1185ad7520ace3 - Author: git - Date: 2019-06-04 12:39:25 +0900 - - * remove trailing spaces. [ci skip] - -commit 8406547b7c3f97c073aa70d22ec7e90a6bf5af5e - Author: Kazuhiro NISHIYAMA - Date: 2019-06-04 12:39:03 +0900 - - Azure Pipelines run on master instead of trunk [ci skip] - -commit c1e2d50531f3ba50cce3016bcfd440546e1ef007 - Author: Kazuhiro NISHIYAMA - Date: 2019-06-04 12:37:25 +0900 - - Azure Pipelines run on master instead of trunk [ci skip] - -commit b0cb4bdb4ee2aabc2f068a194a10882515d995d3 - Author: git - Date: 2019-06-04 11:40:21 +0900 - - * expand tabs. - -commit 7866ed850c1ae95a6b115e09f3788d5b623f0708 - Author: Yusuke Endoh - Date: 2019-06-04 11:39:27 +0900 - - node.c: Show the ID of internal variable - -commit 14b5ccf91b8df1e61ae20f606b85cbb86d087f16 - Author: git - Date: 2019-06-04 09:36:32 +0900 - - * expand tabs. - -commit aa8d393d8a69d1a5780d338692f75e2dd821c5b0 - Author: Nobuyoshi Nakada - Date: 2019-06-04 09:24:17 +0900 - - EOF by 2 ^D on a TTY - - Terminate the input from a TTY by 2 ^D at the middle of line, like - as many programs, `cat`, `perl` and so on, do. By the first ^D, - the line will be sent without a newline, and then EOF will be send - by the next ^D. - -commit 9a07915ae21d5a8e39d7dab6b609be033f2e2d7d - Author: aycabta - Date: 2019-06-04 08:34:10 +0900 - - Add aliases for commands for changing text macro - -commit d950cade5347a61cff6d9b63c7d0c5768b96b539 - Author: Takashi Kokubun - Date: 2019-06-04 08:33:03 +0900 - - azure-pipelines.yml: Upgrade Ruby for UseRubyVersion - - to fix - https://dev.azure.com/rubylang/ruby/_build/results?buildId=1162&view=logs - -commit 4b7213a85a6700657b825f8f127ce83a3070bf1d - Author: aycabta - Date: 2019-06-04 06:39:02 +0900 - - Implement transpose-words - -commit c9b74f9fd95113df903fc34cc1d6ec3fb3160c85 - Author: Aaron Patterson - Date: 2019-06-04 07:15:48 +0900 - - Pin keys in "compare by identity" hashes - - Hashes that compare by identity care about the location of the object in - memory. Since they care about the memory location, we can't let them - move. - -commit 790a1b17902f7ccb5939b9e0314571079fc30bc8 - Author: Aaron Patterson - Date: 2019-05-31 07:25:31 +0900 - - object id is stable now for all objects, so we can let hash keys move - -commit 2de3d92844058511debef2815a0402f892a5536a - Author: Aaron Patterson - Date: 2019-05-31 06:50:43 +0900 - - allow objects in imemo envs to move - -commit 4eb1c2365cd2745b58eb835ea1e26cc33a1238b1 - Author: Aaron Patterson - Date: 2019-05-31 04:08:06 +0900 - - Unpin objects that `proc` references - - This commit adds compaction support to method and proc objects. It just - unpins references and implements the "compact" callback and updates - references. - -commit ca22cccc14e17d21b4fe7b5aed680e9edf12afb7 - Author: NAKAMURA Usaku - Date: 2019-06-04 03:52:53 +0900 - - get rid of a warning of VC++ - -commit 1a0b82210c924dca447da6aeaffd0ddd502705ea - Author: Takashi Kokubun - Date: 2019-06-04 01:03:03 +0900 - - Upgrade benchmark-driver to fix deprecation warning - -commit 9987f457652f99794c3a8d4467c06ed770cdd393 - Author: Takashi Kokubun - Date: 2019-06-04 00:35:58 +0900 - - Reflect behavior changes to argument name - - 0c459af7c233adb5f44022350bfe8fa132d8053e changed the meaning of - `detect_compile_error`, and this commit lets it follow the change. - -commit fc7b4c70185b320db3bb6f9a05261ec54ce8bc4c - Author: Nobuyoshi Nakada - Date: 2019-06-04 00:27:44 +0900 - - Simplify matching - -commit 0da9205f154b4562aa575b3811dd0e33bc4b07f4 - Author: Takashi Kokubun - Date: 2019-06-04 00:32:16 +0900 - - Remove conflict resolution mistake [ci skip] - - in de541fe1961370e64541d73c96cf790d30f28604 :bow: - -commit d21a694075866f4a3333cf65910a649acd057306 - Author: Takashi Kokubun - Date: 2019-06-04 00:29:53 +0900 - - Improve test_color to prevent regression - - Actually de541fe1961370e64541d73c96cf790d30f28604 was still needed. - This commit would improve the test coverage using the branch. - -commit de541fe1961370e64541d73c96cf790d30f28604 - Author: Takashi Kokubun - Date: 2019-06-04 00:22:22 +0900 - - colorize_code must return escaped text - - This was needed before 0c459af7c233adb5f44022350bfe8fa132d8053e but it - could be actually useless now. But I added this anyway just in case. - -commit 6498c733da4f34aca47ca88412605761467a2fec - Author: git - Date: 2019-06-04 00:20:29 +0900 - - * 2019-06-04 - -commit 0c459af7c233adb5f44022350bfe8fa132d8053e - Author: Nobuyoshi Nakada - Date: 2019-06-04 00:14:55 +0900 - - Colorize error characters - - * lib/irb/color.rb (IRB::Color.scan): ignore "incomplete end of - input" error only, to colorize invalid characters, e.g., control - characters, and invalid symbols, as errors. - -commit 928377d2c5153333445d58710534b471042ffb46 - Author: Takashi Kokubun - Date: 2019-06-03 22:00:14 +0900 - - Revert "common.mk: allow brace expansion for benchmark targets" - - This reverts commit 4c0e21add7c87b70df27fbff81d8f192a467556d - because we're not using /bin/bash. - - See 11d3986d6557eb3cfcecbdd0ef6e21b18c7c960b and - 1b2b0e1f244b3e71812fa9859e8b87150ea30434 to know its context. - In short, 4c0e21add7c87b70df27fbff81d8f192a467556d does not work on - Ubuntu. - -commit 1b2b0e1f244b3e71812fa9859e8b87150ea30434 - Author: Takashi Kokubun - Date: 2019-06-03 21:59:34 +0900 - - Revert "common.mk is NOT working with /bin/sh anymore" - - This reverts commit 11d3986d6557eb3cfcecbdd0ef6e21b18c7c960b. - - Travis was broken by that. - -commit 11d3986d6557eb3cfcecbdd0ef6e21b18c7c960b - Author: Takashi Kokubun - Date: 2019-06-03 21:15:54 +0900 - - common.mk is NOT working with /bin/sh anymore - - at least on Ubuntu. - - The brace expansion does not work on Ubuntu /bin/sh (dash), and so - 4c0e21add7c87b70df27fbff81d8f192a467556d effectively broke /bin/sh - compatibility of common.mk. - I guess he was using macOS whose /bin/sh is bash. - -commit a4c5d234045438e09ea4f5feed0ae50958604907 - Author: Takashi Kokubun - Date: 2019-06-03 20:47:32 +0900 - - benchmark/time_strptime.yml does not work with miniruby - - Since 72ad092960c413b6a5687c552747b20a5ed78b22, we cannot run full `make benchmark` - because default BENCH_RUBY is miniruby and it fails to require 'time'. - - Using miniruby for benchmark by default seems reasonable for some cases, - but now it's just bothering for people running full `make benchmark`. - -commit d7c3eb570b2a9dd76f4e0e5d3c39fa10dc8d0cd7 - Author: aycabta - Date: 2019-06-03 17:23:06 +0900 - - Erase VI_OPERATORS - - The operators are using @waiting_operator_proc in vi mode. - -commit c2805192561ad9690b55c14aaccece1804b61a21 - Author: Koichi Sasada - Date: 2019-05-30 22:36:48 +0900 - - remove `rb_objspace_pinned_object_p()` - - Nobody uses this function other than gc.c. We only need - RVALUE_PINNED(). - -commit c990b3c41af5957a739dfb235dfbb821e73a74df - Author: Nobuyoshi Nakada - Date: 2019-06-03 14:56:42 +0900 - - Fix the error token on "invalid hex escape" - - * parse.y (tok_hex): flush token after dispatching the "invalid - hex escape" parse error. - -commit 22da5d71eaa50a749f8a08beb9bd6fe59e489449 - Author: Nobuyoshi Nakada - Date: 2019-06-03 12:56:13 +0900 - - `ruby -v` may no longer be ASCII-only on non-master branches - -commit 3102ca4c6e0b8fa50f56a6a25d8a28c48251d1c6 - Author: Nobuyoshi Nakada - Date: 2019-06-03 12:26:23 +0900 - - Default GIT external encoding to UTF-8 🤷â€â™‚ï¸ - - And dump the title as US-ASCII. - -commit 17af8bfce6508951edca8650155be5525a894f65 - Author: Jeremy Evans - Date: 2019-06-03 12:00:35 +0900 - - Make size on an infinite each_slice enumerator return Infinity - - Fixes [Bug #15889] - -commit f48aad7ba22811dcd5e5be7af667ec49301ad7cd - Author: Kazuhiro NISHIYAMA - Date: 2019-06-03 10:47:38 +0900 - - Add reline to doc/maintainers.rdoc - -commit 533070bfc69cae5b09103a229e4db33b6af695cb - Author: Kazuhiro NISHIYAMA - Date: 2019-06-03 10:32:32 +0900 - - Use lines instead of split - - ``` - % cat ~/bench-split.yml - prelude: | - s = "foo\nbar\nbaz\n" - benchmark: - '/(?<=\n)/': | - s.split(/(?<=\n)/) - '/^/': | - s.split(/^/) - 'lines': | - s.lines - Warming up -------------------------------------- - /(?<=\n)/ 459.123k i/s - 467.844k times in 1.018994s (2.18μs/i) - /^/ 467.922k i/s - 469.744k times in 1.003894s (2.14μs/i) - lines 2.343M i/s - 2.424M times in 1.034677s (426.84ns/i) - Calculating ------------------------------------- - /(?<=\n)/ 422.347k i/s - 1.377M times in 3.261232s (2.37μs/i) - /^/ 477.603k i/s - 1.404M times in 2.939186s (2.09μs/i) - lines 2.485M i/s - 7.028M times in 2.828757s (402.47ns/i) - - Comparison: - lines: 2484631.6 i/s - /^/: 477603.3 i/s - 5.20x slower - /(?<=\n)/: 422346.5 i/s - 5.88x slower - ``` - -commit 182072b2118ed3d1100303e3c67f54a3ee3d4c33 - Author: aycabta - Date: 2019-06-03 04:17:52 +0900 - - The C-q is also quoted insert in emacs mode - -commit 5524de5ca010e92f18fa6991f7bc953bcf84169d - Author: aycabta - Date: 2019-06-03 03:41:40 +0900 - - Add aliases for commands for moving macro - -commit 1bfba99b793e91f2d26af2ff7051a48f184f649e - Author: aycabta - Date: 2019-06-03 03:38:39 +0900 - - Close leaked file descriptors in tests - -commit 3428922437a31b644cffcabd33fd9353e68f88c8 - Author: aycabta - Date: 2019-06-03 03:29:19 +0900 - - The ed_move_to_beg is different from vi_first_print - -commit 65fdb903250f37add2f83b81a5600d0c3e417427 - Author: Nobuyoshi Nakada - Date: 2019-06-03 02:03:15 +0900 - - Reline::LineEditor::ARGUMENTABLE is no longer used - -commit aeb3a2b3373521a6eb47f7185836351a2c52c2bf - Author: git - Date: 2019-06-03 01:36:55 +0900 - - * 2019-06-03 - -commit 3457ce448655a3c2e52793186f62298903ddc26b - Author: Nobuyoshi Nakada - Date: 2019-06-02 13:10:03 +0900 - - Fix ArgumentError in aliased macro - - Closes: https://github.com/ruby/ruby/pull/2221 - -commit f4b060d8d7f927306cbbe24df888a09112acd4c8 - Author: Nobuyoshi Nakada - Date: 2019-06-02 12:14:29 +0900 - - Check conditional nestings in INPUTRC - - Closes: https://github.com/ruby/ruby/pull/2222 - -commit a1e6e45341d70c608b7b5af98be0f234fd0072fb - Author: Nobuyoshi Nakada - Date: 2019-06-02 12:06:49 +0900 - - Prefer $INPUTRC over the default in the home - - Closes: https://github.com/ruby/ruby/pull/2222 - -commit 4fda39fc8788cbcdd07f04768ec84faf3ea44721 - Author: Kazuhiro NISHIYAMA - Date: 2019-06-02 22:37:42 +0900 - - Use simpler regexp - -commit d04ebc57f232e1a2ca36bd3d5ed9a24f63ee43d6 - Author: Nobuyoshi Nakada - Date: 2019-06-02 12:21:09 +0900 - - Add true condition `Reline` - -commit 06a25344d9944529383cf76e81c8342b8821cf5e - Author: Jeremy Evans - Date: 2019-06-02 13:00:27 +0900 - - Make psych.so deterministic - - Fixes Ruby Bug #15890 - -commit 486a2c26d604ff0e18bae73fe97b95478a44f3d5 - Author: aycabta - Date: 2019-06-02 08:50:01 +0900 - - Add Reline test for unknown macro - -commit e360688c4df08c2a43daa00c1de9832a20ad1521 - Author: aycabta - Date: 2019-06-02 07:39:12 +0900 - - Add new test for Reline within pipe - -commit 28e01f006d124fa8d6d85450f92b188b473921f8 - Author: aycabta - Date: 2019-06-02 07:28:26 +0900 - - Add comments to key bindings vars of Reline::Config - -commit bfd26cc18df6c6eca5b67cea5f2d6a6d557da468 - Author: aycabta - Date: 2019-06-02 07:21:59 +0900 - - Reline.readmultiline always needs block to confirm termination - -commit 7b1c1b949201b5ebe5be597ec27317ea6e9f0841 - Author: aycabta - Date: 2019-06-02 05:07:04 +0900 - - Suppress error of macro not found - -commit 4b9869e7e04cbfb581f6f1b21ae17b310135c5e2 - Author: Jeremy Evans - Date: 2019-05-24 12:07:36 +0900 - - Update String#crypt tests to work on OpenBSD - - Skip the webrick httpauth tests that use crypt when testing on - OpenBSD. - - Fixes [Bug #11363] - -commit 09c09eb0db6c14c532935081c9b79d38fdc81f6b - Author: Nobuyoshi Nakada - Date: 2019-06-02 00:42:57 +0900 - - NEWS: move GC.compact - - From "Implementation improvements" to "Core classes updates". - -commit 3afae5b572bbf6b066ef90648917cbc5028dd4f6 - Author: Nobuyoshi Nakada - Date: 2019-06-02 00:42:11 +0900 - - NEWS: markup class and method names - -commit e814d2f84a6f7c83dcfe1133ec96cf981d09e067 - Author: git - Date: 2019-06-02 00:36:19 +0900 - - * 2019-06-02 - -commit 8a041c1b92b5dcc52908155ba1ca6c9f44a471cb - Author: Nobuyoshi Nakada - Date: 2019-06-02 00:34:02 +0900 - - delegate.rb: markup method names - -commit 2bad001cfd15c59630a03918dc80a703b093688e - Author: Hiroshi SHIBATA - Date: 2019-06-01 21:23:24 +0900 - - Ignore warnings about mismatched indentations. - -commit 464e55f1d0296c3593157a89159f75d58397a1f5 - Author: Hiroshi SHIBATA - Date: 2019-06-01 21:20:21 +0900 - - Ignore warnings about argument prefix with operator symbol. - -commit 3c77ef9adc567af58e27c62db35d618f3b3069d2 - Author: Hiroshi SHIBATA - Date: 2019-06-01 21:07:35 +0900 - - Ignore warnings about ambiguous first argument with the negative integer. - -commit 9eecd7a2fd0b67aa13450887a1fee9a6638b9e4e - Author: Hiroshi SHIBATA - Date: 2019-06-01 20:44:24 +0900 - - Ignore warnings about ambiguous first argument of regexp with assert match. - -commit f630359d9b60e298e472a62f0b6ff17f17ef5c69 - Author: Takashi Kokubun - Date: 2019-06-01 19:38:13 +0900 - - Add a benchmark using IRB::Color - - I heard actually this part would not be a bottleneck for rendering - because writing anything to terminal takes way longer time anyway, but I - thought this benchmark script might be useful for benchmarking Ruby - itself. - -commit 56660de3c6df7a4ff8667ef4047d30d0de169935 - Author: Hiroshi SHIBATA - Date: 2019-06-01 18:45:11 +0900 - - Merge rubygems master from upstream. - - I picked the commit from 3c469e0da538428a0ddd94f99aa73c32da22e8ba - -commit 560cd5b1f04f30542a294b3d77527d3b12f7cc15 - Author: Jeremy Evans - Date: 2019-06-01 16:52:40 +0900 - - Add myself as OpenBSD platform maintainer - -commit de01c4ec00d5357a2aa9ee1c1c989f691a865a21 - Author: aycabta - Date: 2019-06-01 16:47:59 +0900 - - Reset Config at Reline::Config::Test#teardown - -commit 34727475d0a255f4c9f3c66201ac7bcbb516256d - Author: aycabta - Date: 2019-06-01 15:07:22 +0900 - - Remove an unnecessary argument - -commit 3034d666e8015caa05c55a46debd5ed1ff502d47 - Author: Nobuyoshi Nakada - Date: 2019-06-01 14:57:36 +0900 - - Just use `File.readlines` - -commit b487b39b8597daf066fb1e1e7d3087ac694a0d3a - Author: git - Date: 2019-06-01 13:34:55 +0900 - - * expand tabs. - -commit 65e63af377bb493dea4d0207627ed87d5da360a8 - Author: Yusuke Endoh - Date: 2019-06-01 13:15:43 +0900 - - Make opt_aref instruction support Integer#[] - - only when its receiver and the argument are both Integers. - - Since 6bedbf4625, Integer#[] has supported a range extraction. - This means that Integer#[] now accepts multiple arguments, which made - the method very slow unfortunately. - - This change fixes the performance issue by adding a special handling for - its traditional use case: `num[idx]` where both `num` and `idx` are - Integers. - -commit 7df65ef67691fcc354d819da9cd54a1ade9b6247 - Author: aycabta - Date: 2019-06-01 09:05:58 +0900 - - Use inputrc data for keystroke setting - -commit c1e52997870a63168835fde49562cb3c822c968a - Author: Nobuyoshi Nakada - Date: 2019-06-01 01:46:23 +0900 - - Fix FrozenError when assigning frozen class to constant - - * variable.c (set_namespace_path): modules/classes can get named - by assignment to constant, even if frozen. [Bug #15891] - -commit aeb9a0ca77725896ef072fa9bc0a031430a3a0e5 - Author: MSP-Greg - Date: 2019-06-01 01:21:52 +0900 - - appveyor.yml again! - - This issuse is caused by MSYS2 changing from using ncurses to pdcurses. - Appveyor's MSYS2 is so out-of-date that partial updates are 'troublesome'... - -commit 1d37cc1900b6cf13285417577cb21c01195d3d2a - Author: Benoit Daloze - Date: 2019-06-01 02:02:08 +0900 - - Update to ruby/spec@cfe908c - -commit f97979ce888492cbf1c3c92839e086fbec1e5d15 - Author: Benoit Daloze - Date: 2019-06-01 02:02:06 +0900 - - Update to ruby/mspec@a57a9af - -commit 552c42f51f75eeeaa5a46e2df28fd5dab77261da - Author: Nobuyoshi Nakada - Date: 2019-06-01 00:34:38 +0900 - - Separate raw keystroke config for each platforms - -commit 8fc552adee76ec324a219ba6b19fa2e39a1e014e - Author: git - Date: 2019-06-01 00:03:18 +0900 - - * 2019-06-01 - -commit 88770c2ab668cd01cac016fcf81cb2c8f265ab18 - Author: aycabta - Date: 2019-06-01 00:02:35 +0900 - - Support Home and End key to move to beg and end - -commit 21a43489b18d2ceb04182e0d36bb906439a86610 - Author: aycabta - Date: 2019-05-31 22:53:01 +0900 - - Use IO#sync= instead of a monkey patch - -commit 73890d9d79425415774a3a2d72ee5882bc41e5c7 - Author: aycabta - Date: 2019-05-31 22:32:47 +0900 - - Flush I/O immediately if RELINE_STDERR_TTY is set - -commit 913661cca08ccc6e2b4fd7367ddafcc7e2569a36 - Author: Hiroshi SHIBATA - Date: 2019-05-31 22:15:43 +0900 - - Bump irb version to 1.1.0.pre.1. - - Because the current irb support reline and have many of changes. - -commit 1457ad1ea77ff2dd6498ad9c8f1ab6c8165df98e - Author: Nobuyoshi Nakada - Date: 2019-05-31 19:12:24 +0900 - - [DOC] JIS X 0301 has been updated - - [ruby-dev:50790] - * https://www.meti.go.jp/press/2019/05/20190520006/20190520006.html - * https://www.meti.go.jp/press/2019/05/20190520006/20190520006-2.pdf - - [ci skip] - -commit 8b39df854d7dea1c15949c6b047bcb0f0a12c287 - Author: Nobuyoshi Nakada - Date: 2019-05-31 16:31:22 +0900 - - Let irb use an empty file as irbrc - - to get rid of side-effect by existing .irbrc file. - -commit b632566d339968bfd271a07e290a71bbb7f621ec - Author: Nobuyoshi Nakada - Date: 2019-05-31 16:14:27 +0900 - - UNIX domain socket name length has a certain limit - -commit b1aecef87364631b0001dd2aafc432931e19a98f - Author: Nobuyoshi Nakada - Date: 2019-05-31 15:58:50 +0900 - - Use UNALIGNED_MEMBER_PTR - - * internal.h (UNALIGNED_MEMBER_ACCESS, UNALIGNED_MEMBER_PTR): - moved from eval_intern.h. - - * compile.c iseq.c, vm.c: use UNALIGNED_MEMBER_PTR for `entries` - in `struct iseq_catch_table`. - - * vm_eval.c, vm_insnhelper.c: use UNALIGNED_MEMBER_PTR for `body` - in `rb_method_definition_t`. - -commit ea42423908ed055f9039b1dce6e9a232a3b2dd90 - Author: Alan Wu - Date: 2019-05-31 12:16:27 +0900 - - Keep vm->orig_progname alive - - `vm->orig_progname` can be different from `vm->progname` when user - code assigns to `$0`. While `vm->progname` is kept alive by the - global table, nothing marked `vm->orig_progname`. - - [Bug #15887] - -commit 83f9183a7e549b0d7e6b68e298d57744ddb4d97f - Author: Nobuyoshi Nakada - Date: 2019-05-31 14:05:01 +0900 - - Also GCC 9 provides -Waddress-of-packed-member - -commit d2f663d6f185f62ef019434caf9bd6afd63849d4 - Author: Nobuyoshi Nakada - Date: 2019-05-31 10:05:38 +0900 - - STATIC_ASSERT for VM_METHOD_TYPE_MINIMUM_BITS - -commit d180e405703b36c3f3a84334779c56bf9a3ea6a8 - Author: Nobuyoshi Nakada - Date: 2019-05-31 02:52:41 +0900 - - Add --limit option and default it to 20 - -commit 1e9057b54a53e7bc1fa3d0e3eaef1dd33707d044 - Author: Nobuyoshi Nakada - Date: 2019-05-31 02:30:29 +0900 - - Prefer the current branch or tag name - -commit fd658ec821f07e0a2254fcd62ce29cc644d61302 - Author: Nobuyoshi Nakada - Date: 2019-05-31 02:28:38 +0900 - - Define RUBY_FULL_REVISION - - Only if the short revision differs from the full revision. - -commit e8c710b11a02c6ab82b358fc671a14f378cb1974 - Author: Jeremy Evans - Date: 2019-05-24 13:10:40 +0900 - - Fix visibility of some methods when using DelegateClass - - Public instance methods added to a delegated class after the - creation of the delegate class were not returned by the - public_instance_methods class method of the delegate class. - - Protected instance methods in the delegated class when the - delegate class is created were returned by the public_methods - instance method of the delegate class. - - Patch mostly from Kenichi Kamiya in - GitHub pull request 926. Minor changes to get it to apply, - and to fix tests after applying by me. - - Fixes [Bug #11512] - -commit 1cd93f1cdfbe6f7e71b05b3f8e707f21d70e94ba - Author: Jeremy Evans - Date: 2019-05-12 08:32:00 +0900 - - Allow DelegateClass() to module_eval given block - - Methods that return classes often module_eval the given block - (e.g. Class.new and Struct.new). This allows DelegateClass to - work similarly. This makes it easier to use DelegateClass - directly without subclassing, so as not to create an unnecessary - subclass. - - Implements [Feature #15842] - -commit 856593cc4972562d2ab0a59a61f38fe3a4a863ab - Author: Takashi Kokubun - Date: 2019-05-31 09:44:14 +0900 - - Fix typo :bug: [ci skip] - -commit 6a5e89e23c433199f926d757481bc3c29fce7854 - Author: Takashi Kokubun - Date: 2019-05-31 07:24:08 +0900 - - Set git config to commit mjit-debug - - As it failed to commit like: - https://app.wercker.com/ruby/ruby/runs/mjit-test1/5cefd8a8105780001c4f2d5d?step=5cefdd1e48fad200077fa3f8 - -commit cb40a21da0687b5dd3cd251c9e66bb0edf67f2b9 - Author: Takashi Kokubun - Date: 2019-05-31 06:03:18 +0900 - - Warn compile_error only when input is finished - - Let's say we are in progress to write `"foo"`: - - ``` - irb> "fo - ``` - - at this moment, nothing is wrong. - It would be just a normal way to write `"foo"`. - - Prior to this commit, the `fo` part was warned because of - 5b64d7ac6e7cbf759b859428f125539e58bac0bd. But I think warning such a - normal input is not valuable for users. - - However, we'd like to warn `:@1` or `@@1` which is also a syntax error. - Then this commit switches the syntax highlight based on whether the - input text is finished or not. When it's not finished yet, it does not - warn compile_error. - -commit 6e052817f95095217b67256aff48cedbd57717cf - Author: Takashi Kokubun - Date: 2019-05-31 06:17:56 +0900 - - Abstract away Ripper::Lexer#scan in IRB::Color#scan - - because 5b64d7ac6e7cbf759b859428f125539e58bac0bd made it hard to - understand #colorize_code for me and this change is needed for my next - commit. - -commit 8f83fe3b02f6689cd1ea85ec59c6fad12066f301 - Author: aycabta - Date: 2019-05-31 05:53:02 +0900 - - Finish with ^D only when input is completely empty in vi insert mode - -commit a4161b7649c5aec6ff4d857863e0e829f9d7fde8 - Author: Benoit Daloze - Date: 2019-05-31 05:11:24 +0900 - - Update to ruby/spec@0ba5312 - -commit e935a3227d1553539f65d1475f2c161082ba7148 - Author: Benoit Daloze - Date: 2019-05-31 05:11:22 +0900 - - Update to ruby/mspec@3cc36d0 - -commit c55db6aa271df4a689dc8eb0039c929bf6ed43ff - Author: git - Date: 2019-05-31 00:01:41 +0900 - - * 2019-05-31 - -commit f7aa80b3feeddac6a5689f286b3db3728128caa4 - Author: Nobuyoshi Nakada - Date: 2019-05-31 00:00:26 +0900 - - Make the target name unique when BASERUBY=no - -commit ab0c8cc021b26712c9af9b1309244b7d930c9dfa - Author: Nobuyoshi Nakada - Date: 2019-05-30 22:57:49 +0900 - - Touch Unicode headers and the timestamp before packaging - - Not to download Unicode data files at building from the packages. - -commit f0945176c356cfe615ff6b4e6012e7e8e0911bd6 - Author: Nobuyoshi Nakada - Date: 2019-05-30 22:27:11 +0900 - - Fix missing `gitcmd` - -commit 22cd4027349f803efc7ede284376b7a7013f8dfe - Author: NARUSE, Yui - Date: 2019-05-30 22:19:36 +0900 - - vcs.rb support non-inplace build - -commit 92ecf58b1e8ed15f5ec2bf69e3871de4343f71e0 - Author: Nobuyoshi Nakada - Date: 2019-05-30 22:03:33 +0900 - - parse.y: adjust here-doc error token - - * parse.y (here_document): adjust token to the here-doc identifier - in compile_error when a here-document misses the closing - identifier. - -commit b0e2b7a5ff0df14b3c8062c31ebb526a73a03763 - Author: Nobuyoshi Nakada - Date: 2019-05-30 21:49:08 +0900 - - Include stack elements left after errors - -commit 279c8e14d4b079e5b70b0389b82893de42b75c50 - Author: aycabta - Date: 2019-05-30 20:54:28 +0900 - - Use rebuilt buffer data to rerender all - -commit 74a0e3ec235380541db95e18978e4e1aa174b407 - Author: aycabta - Date: 2019-05-30 20:06:59 +0900 - - Use start_with? for escaped quote too - -commit ecd0f1d966209742382e5bd4591bafc88152a697 - Author: aycabta - Date: 2019-05-30 18:29:26 +0900 - - Use negative lookahead and start_with? - -commit fcca39fa73607e6acf2aea00fd8bf746023955dc - Author: aycabta - Date: 2019-05-30 18:20:59 +0900 - - Fix strange vertical cursor moving when adding a newline at bottom - -commit 106843d839cb5779c7e2761b826aea78bd9a7e63 - Author: git - Date: 2019-05-30 17:12:53 +0900 - - * expand tabs. - -commit 5fc9f0008f824936c667970593df1b6663f0ae24 - Author: Koichi Sasada - Date: 2019-05-30 17:12:26 +0900 - - reorder bitmap clearing. - -commit dd63d7da61c472809c5e6a1dba81b7dea5aa1c1b - Author: Koichi Sasada - Date: 2019-05-30 16:57:37 +0900 - - move pinned_bits[] position in struct heap_page. - - pinned_bits are not used frequently (only GC.compact use it) so - move it at the end of struct heap_page. - -commit e15de865837262122cc64705440d00efac4b8c71 - Author: Koichi Sasada - Date: 2019-05-30 16:52:42 +0900 - - introduce `during_compacting` flag. - - Usually PINNED_BITS are not needed (only for GC.compact need it) - so skip updating PINNED_BITS if the marking is not by GC.compact. - -commit 70e87d9660af24fb93cac1312b6e1990602c1396 - Author: Takashi Kokubun - Date: 2019-05-30 15:49:48 +0900 - - Do not rely on IRB.conf[:MAIN_CONTEXT] before initialize - - so that we can colorize binding.irb source lines. - -commit 55c34b994b40db4d9fdbc29d9d8521745a56fdfd - Author: aycabta - Date: 2019-05-30 15:34:41 +0900 - - Check the end token of heredoc correctly - -commit 5a229b0a88679529a18aa3ef87317bdbd1783c58 - Author: aycabta - Date: 2019-05-30 15:19:30 +0900 - - Calculate vertical position correctly when rerendering all lines - -commit 90014dddec70219c2da800bf0d4d262bfa99c9a8 - Author: aycabta - Date: 2019-05-30 15:04:37 +0900 - - Fix broken rendering when the last line is auto-wrapped - -commit eae953ba9ff3302a698115f34893f17bf458d2ea - Author: aycabta - Date: 2019-05-30 14:19:58 +0900 - - Rerender following lines when line number increased - -commit 1cf9f79342c517e3f12ba614ad874b1d619af5bc - Author: aycabta - Date: 2019-05-30 14:04:14 +0900 - - Clear remaining lines when line number decreased - -commit 4a31c1e45d12b7813096948616f8a03224f20ac8 - Author: Nobuyoshi Nakada - Date: 2019-05-30 12:35:27 +0900 - - parse.y: continue after heredoc error - - * parse.y: continue parsing the rest of the here-document starting - line, after the terminator was not found. - -commit cb520e76237d3884b768f4f68120beb13fcf1f04 - Author: aycabta - Date: 2019-05-30 12:29:38 +0900 - - Fix the auto-wrap behabior that was too buggy - -commit f0ded366933407cfd0ad2c516b69d2766d1634d2 - Author: Jeremy Evans - Date: 2019-05-30 10:40:03 +0900 - - Use Regexp#match instead of #match for 1.9 BASERUBY support - -commit d2ba80b5df7118383cbcfae934316310c6d81633 - Author: Jeremy Evans - Date: 2019-05-30 09:58:18 +0900 - - Revert "Fix building with 1.8 BASERUBY" - - This reverts commit 05bc14d81a1d7f6af826a92371aeff0c3fb2a67e. - - We have decided that the cost of reintroducing support for 1.8 - BASERUBY outweighs the benefit. If you are still using 1.8 and want - to build master/trunk, build and install the latest release, and use - that as BASERUBY. - -commit 5867e51e8311d1ed49457e946751cd0c06a306b8 - Author: git - Date: 2019-05-30 04:13:37 +0900 - - * 2019-05-30 - -commit 814eaa25e2a54b5997f0d89da1a6e2259d4fc1e9 - Author: Takashi Kokubun - Date: 2019-05-30 04:12:10 +0900 - - Do not use rb_iseq_path() while moving ISeq pointers - - in GC.compact. - - While `in_jit` is false, GC.compact is allowed to run and it may be - moving ISeq-related pointers. So calling rb_iseq_path() when `in_jit` - is true is illegal. - -commit 5b64d7ac6e7cbf759b859428f125539e58bac0bd - Author: Nobuyoshi Nakada - Date: 2019-05-29 22:03:47 +0900 - - Colorize errors more - - * lib/irb/color.rb (IRB::Color.colorize_code): colorize - `compile_error` part as same as `on_parse_error`. - -commit 12644e8b0208b01f4f4cea550d161a86e6f25aa8 - Author: Nobuyoshi Nakada - Date: 2019-05-29 21:59:34 +0900 - - Get rid of nested string interpolations - - * lib/irb/color.rb (IRB::Color.colorize): get rid of nesting string - interpolations not to confuse ruby-mode.el - -commit 1da5c73932b2dcf2a089f125df1fe7cc4ab9fafd - Author: Nobuyoshi Nakada - Date: 2019-05-29 21:39:45 +0900 - - parse.y: fix state after ivar/cvar - - * parse.y (parse_atmark): return EXPR_END or EXPR_ENDFN, depending - on the previous state, even incomplete names consistently. - -commit 83e905eb4e6d1e8a7ebe88e3b1a6d7efa67ba01c - Author: aycabta - Date: 2019-05-29 20:24:00 +0900 - - Revert "Use "require" just for essential" - - This reverts commit ab7a6e1a1651d82d327d155b78a8e3af1d976707. - -commit ab7a6e1a1651d82d327d155b78a8e3af1d976707 - Author: aycabta - Date: 2019-05-29 20:20:48 +0900 - - Use "require" just for essential - - The 559dca509d2a98584b09c7d9a6d74749ce793ad7 contains an excess range in - using "require". - -commit fafcbe0eb0af0aa25ca1fa6e162e081bb78a8107 - Author: aycabta - Date: 2019-05-29 18:52:20 +0900 - - Use reversed get_screen_size correctly on Windows - -commit 5ceff480c2c1696e9893a1e5e09e39f8425c6c5a - Author: Nobuyoshi Nakada - Date: 2019-05-29 16:02:09 +0900 - - ripper: Ripper::Lexer#scan - - * ext/ripper/lib/ripper/lexer.rb (Ripper::Lexer#scan): parses the - code and returns the result elements including errors. - [EXPERIMENTAL] - -commit 7c0639f3f83f85557aff87e94da1afd373555bcb - Author: Takashi Kokubun - Date: 2019-05-29 16:47:57 +0900 - - Never make a method call from MJIT worker - - by showing line number only when it's Fixnum. - - When it's not Fixnum, we need to call a method to know the line number. - -commit ce7b1132c581375dafa6a5b5071e66eaa362b429 - Author: Takashi Kokubun - Date: 2019-05-29 16:22:26 +0900 - - Do not call FIX2INT while GC.compact may be running - - because FIX2INT might crash by moving method entry pointer: - http://ci.rvm.jp/results/trunk-mjit@silicon-docker/2063412 - -commit 468b475e615e59c0778751051ecda175140c615e - Author: Takashi Kokubun - Date: 2019-05-29 16:09:07 +0900 - - .travis.yml: Minor reorder for shortening - -commit 1a0c3d8dd64eb90f5d74e68458d686c4f9cc1669 - Author: Takashi Kokubun - Date: 2019-05-29 15:04:31 +0900 - - Convert Enumerator to Array for Ruby 1.9.3 - - String#lines seems to return Enumerator in Ruby 1.9.3, and it does not - respond to #delete_if https://travis-ci.org/ruby/ruby/jobs/538559919 - -commit 5379ca92501c529005c0818f3cbbd1ef0798de6d - Author: Takashi Kokubun - Date: 2019-05-29 14:56:58 +0900 - - Skip spec broken since a66bc2c01194a9c017c874a30db5b3b6bd95e966 - - This has not worked since the merge https://travis-ci.org/ruby/ruby/jobs/538438184 - -commit 068d327595814a3448290eeba897fc37a8bb2dfb - Author: Nobuyoshi Nakada - Date: 2019-05-29 13:34:19 +0900 - - Colorize compile_error as same as on_parse_error - -commit cc66272e5061020cac6864bbc2f68f7d327ecfbb - Author: Nobuyoshi Nakada - Date: 2019-05-29 12:48:49 +0900 - - parse.y: flush invalid char - -commit 8552e9d69693b1d3f99a30d846b9dcc30bf590c2 - Author: Nobuyoshi Nakada - Date: 2019-05-29 13:24:01 +0900 - - Fix shorten-64-to-32 warning - -commit aee36bf149bedf97007584ac5d6cd5d438be28b5 - Author: Kazuhiro NISHIYAMA - Date: 2019-05-29 13:12:15 +0900 - - Fix Possible Control flow issues (DEADCODE) - - Coverity Scan says `Execution cannot reach this statement: "poison_object(v);"`, - so do nothing when `ptr` is always 0 without address_sanitizer. - -commit e04d10b28f47ea4d32f9562aedc4be9749415219 - Author: Yusuke Endoh - Date: 2019-05-29 13:01:53 +0900 - - test/rubygems/test_gem_stream_ui.rb (test_ask_for_password): extend the timeout - - for Solaris. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable10s/ruby-master/log/20190528T191908Z.fail.html.gz - -commit 8187ffa461be6c1ee198c0b8f2c3a22ca2681d9a - Author: Koichi Sasada - Date: 2019-05-29 12:30:36 +0900 - - Revert "Colorize error part more" - - This reverts commit c7f3c222c9b82736c993419daa6bfb643e5c0793. - -commit c7f3c222c9b82736c993419daa6bfb643e5c0793 - Author: Nobuyoshi Nakada - Date: 2019-05-28 18:19:59 +0900 - - Colorize error part more - - Colorize `compile_error` parts as well as `on_parse_error` parts. - -commit 34fe1f7d719d556cd7eda16d4df7cc64ce25dcfa - Author: Nobuyoshi Nakada - Date: 2019-05-29 12:09:19 +0900 - - Create empty revision.tmp if BASERUBY is not yes - -commit 3f132979236f4aa42e3347a920123ce271a1e695 - Author: aycabta - Date: 2019-05-29 10:04:39 +0900 - - Remove extra items because Reline::HISTORY is a sized queue - -commit c86d1fbed5e887ea7b59582510fb26ec912b7898 - Author: Nobuyoshi Nakada - Date: 2019-05-29 09:46:44 +0900 - - Create empty revision.tmp if no BASERUBY - -commit f60a59ed20648ddc4784d2dcb172d10c5f3405ed - Author: MSP-Greg - Date: 2019-05-29 06:03:30 +0900 - - appveyor.yml - update for msys2 - pdcurses, force toolchain - - Closes: https://github.com/ruby/ruby/pull/2208 - - Merging the PR for fixing AppVeyor msys2 failure related to GCC 9 like: - https://ci.appveyor.com/project/ruby/ruby/builds/24877992/job/ned5k4k5rwxnld5j - -commit 98ba116d402e7c255dae78ce43b76723a56c4cb7 - Author: Takashi Kokubun - Date: 2019-05-29 09:02:39 +0900 - - Revert 3b7862c8e88cd7838a53ec083ac5733386400956 causing various CI hangs - - and dependent commits c67934b1c3b40dda5f170b032423e520511c68dd and - f0d1dc5cee87dfb023cb43a2db9bcdef5a8dee8f. - - RubyCI and ci.rvm.jp are almost dead by timeout since this commit. - - --- - - Revert "Skip a reline test hanging on Wercker since 3b7862c8e8" - - This reverts commit f0d1dc5cee87dfb023cb43a2db9bcdef5a8dee8f. - - Revert "Remove extra items because Reline::HISTORY is a sized queue" - - This reverts commit c67934b1c3b40dda5f170b032423e520511c68dd. - - Revert "Use existing instances for LineEditor and Config" - - This reverts commit 3b7862c8e88cd7838a53ec083ac5733386400956. - -commit 797d7efde18c5f7acf5264047842fd974f383ca9 - Author: Takashi Kokubun - Date: 2019-05-29 08:56:26 +0900 - - Prevent MJIT compilation from running while moving - - pointers. - - Instead of 4fe908c1643c3f355edd787bb651aefb53b996c0, just locking the MJIT - worker may be fine for this case. And also we might have the same issue - in all `gc_compact_after_gc` calls. - -commit 6b5e712361cca8559ed66d5c1106e888c5971d39 - Author: Takashi Kokubun - Date: 2019-05-29 08:22:02 +0900 - - Make tool/vcs.rb compliant to BASERUBY - - People seem to consider BASERUBY is either 1.8 or 1.9 now. Since this - file may be executed by BASERUBY from file2lastrev.rb, I think we should - not rely on Ruby 2.0 in this file for now. - -commit e1f62d7f0e33de81a194f26a2c57e14e38d9de52 - Author: Takashi Kokubun - Date: 2019-05-29 07:46:44 +0900 - - Check the result of file2lastrev.rb if HAVE_BASERUBY - - is yes. - - We ignored the failure status of file2lastrev.rb on 73da429c36c, but it - was for an environment without BASERUBY. I think we should skip running - file2lastrev.rb on HAVE_BASERUBY=no, and run it and check the status on - HAVE_BASERUBY=yes. - - Otherwise we may have an ignored arbitrary error of file2lastrev.rb on - HAVE_BASERUBY=yes environment. - -commit f0d1dc5cee87dfb023cb43a2db9bcdef5a8dee8f - Author: Takashi Kokubun - Date: 2019-05-29 08:08:33 +0900 - - Skip a reline test hanging on Wercker since 3b7862c8e8 - - like https://app.wercker.com/ruby/ruby/runs/mjit-test1/5cedad11105780001c4e7001?step=5cedaf6b48fad200076fe77b - -commit 67f75d5b4332f6bef2d1ea19803dc6092e6cbf3b - Author: Takashi Kokubun - Date: 2019-05-29 08:04:48 +0900 - - Add TESTOPTS=-v for Wercker test-all --jit-wait - - because it's hard to identify which test causes a hang for now. - -commit 8d837431709c004a0fcd0a9f7f811ced04a040d7 - Author: aycabta - Date: 2019-05-29 06:53:18 +0900 - - Use IO.copy_stream - -commit a4a682c450164d1d4371e00a4f83429aa85d29ae - Author: aycabta - Date: 2019-05-29 06:11:24 +0900 - - Check RUBY_YES_I_AM_NOT_A_NORMAL_USER env to access RubyVM doc - -commit d341bb285768ae70bc8d251e577181c57322968c - Author: aycabta - Date: 2019-05-29 06:08:25 +0900 - - IRB never show RubyVM's doc - -commit d390af3686d640dd2aa54af51ed5c2a8e581a46e - Author: aycabta - Date: 2019-05-29 06:54:49 +0900 - - Encode completed strings correctly - -commit 3e54ff67e6dc1c5882fc05392add09bc59c1afae - Author: Takashi Kokubun - Date: 2019-05-29 05:53:09 +0900 - - Test BASERUBY: Ruby 1.9.3 on Travis - - We have no clear assertion or check of BASERUBY requirement. - I want to make the current situation more explicit. - - I'm NOT saying we should support Ruby 1.9.3 here, - but I'm just checking the situation as per 05bc14d81a1d7f6af826a92371aeff0c3fb2a67e. - - FYI, at this moment Ruby 1.8.7 did not work with this Travis config, like: - https://travis-ci.org/k0kubun/ruby/builds/538459100 - -commit 91f5a8db593f9eef739517dc0067dae439934311 - Author: Benoit Daloze - Date: 2019-05-29 06:15:57 +0900 - - Update to ruby/spec@0c5c5c1 - -commit c67934b1c3b40dda5f170b032423e520511c68dd - Author: aycabta - Date: 2019-05-29 05:58:33 +0900 - - Remove extra items because Reline::HISTORY is a sized queue - -commit 3b7862c8e88cd7838a53ec083ac5733386400956 - Author: aycabta - Date: 2019-05-29 05:53:14 +0900 - - Use existing instances for LineEditor and Config - -commit a66bc2c01194a9c017c874a30db5b3b6bd95e966 - Author: Benoit Daloze - Date: 2019-05-29 05:41:48 +0900 - - Update to ruby/spec@9a501a8 - -commit d070523e7be4b95914adeef9a10401fba7718c5a - Author: Takashi Kokubun - Date: 2019-05-29 05:27:53 +0900 - - Drop unused Travis config: universal-darwin17 - - This has been unused since b7f5c573ef20dbbf5534ee3a45625c7f9d45f2ec. - -commit 462a63c39e7aa20253d6256077d298458c9ef7f3 - Author: Takashi Kokubun - Date: 2019-05-29 05:09:59 +0900 - - Drop MJIT debug code from GC.compact - - As ko1 added some improvements on GC.compact, I want to check if it - solved the problem too. - -commit abd556958d11321cf0a2991a86dc8b1a714fc79a - Author: git - Date: 2019-05-29 00:07:07 +0900 - - * 2019-05-29 - -commit c730c25354a18e99b9147c30ecc8f986d6a172f1 - Author: Nobuyoshi Nakada - Date: 2019-05-28 21:39:13 +0900 - - parse.y: warn escaped whitespace - - * parse.y (warn_space_char_code): warn whitespace characters - escaped with meta/control prefix. - -commit fb568fe724b0c8b2582263ed859ad10f0bd90d38 - Author: Nobuyoshi Nakada - Date: 2019-05-28 23:46:07 +0900 - - Added missing predicate macros - -commit 8a2b497e3b8d9c9be27278081526cace50490140 - Author: Koichi Sasada - Date: 2019-05-28 15:57:20 +0900 - - remove obsolete rb_gc_finalize_deferred(). - - rb_gc_finalize_deferred() is remained for compatibility with - C-extensions. However, this function is no longer working - from Ruby 2.4 (crash with SEGV immediately). - So remove it completely. - -commit 2562b7d7cd6621970fed1ad72d87f8d23d50d398 - Author: Nobuyoshi Nakada - Date: 2019-05-28 11:08:53 +0900 - - Unify RELINE_TEST_ENCODING setting - -commit d5f408403f805b2ff616b9c43528d9fdffa3bf60 - Author: Nobuyoshi Nakada - Date: 2019-05-28 11:08:22 +0900 - - Set read-only with attrib command - -commit 62b3d4c721334108f89cd59407ffd910204e7868 - Author: Nobuyoshi Nakada - Date: 2019-05-28 14:36:29 +0900 - - Skip following all digits after `@@` - -commit 40e175b390f39afdddcfbf74afcad96093a158e7 - Author: Nobuyoshi Nakada - Date: 2019-05-28 14:20:42 +0900 - - Clean a garbage [ci skip] - -commit 05bc14d81a1d7f6af826a92371aeff0c3fb2a67e - Author: Jeremy Evans - Date: 2019-05-28 12:54:20 +0900 - - Fix building with 1.8 BASERUBY - -commit f3bddc103d6a9d6e679ab35d1d3e8ab7aa2f3ae4 - Author: Koichi Sasada - Date: 2019-05-28 11:42:31 +0900 - - use malloc() instead of calloc(). - - Here malloc() is enough because all elements of the page_list - will be overwrite. - -commit f9401d5d44dd4ae69b6a14fcccd41c2810033986 - Author: Koichi Sasada - Date: 2019-05-28 11:41:49 +0900 - - should skip T_ZOMBIE here. - -commit 2229acaa54e1011ae77710e10f8c9e7933403127 - Author: Koichi Sasada - Date: 2019-05-28 11:41:03 +0900 - - should use heap_eden->total_pages. - - The size of page_list is heap_eden->total_pages, but - init_cursors() assumes the size of page_list is `heap_allocated_pages`. - This patch fix it. - -commit 72333286c45ac821e227ad62d810a09a0208ecbb - Author: Nobuyoshi Nakada - Date: 2019-05-28 11:38:13 +0900 - - Fix typos in Ripper::Lexer#inspect and Ripper::Lexer#pretty_print - -commit ccfb12d76ca58957cb95692594626169a97224b7 - Author: aycabta - Date: 2019-05-28 11:02:44 +0900 - - Fix condition..."and" is lowest priority operator, than "=" - -commit 7f211bfe6c5e4a763412406e5e257ea275ca53da - Author: Koichi Sasada - Date: 2019-05-28 10:26:23 +0900 - - use only eden_heaps on GC.compact. - - `heap_pages_sorted` includes eden and tomb pages, so we should not - use tomb pages for GC.compact (or we should move all of tomb pages - into eden pages). Now, I choose only eden pages. If we allow to - move Zombie objects (objects waiting for finalizers), we should - use both type of pages (TODO). - -commit cfd839c140707852340a840e9e164e0f211fbb42 - Author: Koichi Sasada - Date: 2019-05-27 17:15:58 +0900 - - Suppress warning (uninitialized variable). - -commit fa7a768fdfe5223a29db4fa71b3e6101fb02ad51 - Author: Hiroshi SHIBATA - Date: 2019-05-28 10:23:21 +0900 - - Removed inconsistency file from upstream repository of rubygems. - - followed up ae2a904ce9bffedee7d110dc60fd51c0a2879a5b - -commit 165ddfda20f6db8a3149d14c4f431fc242ddab70 - Author: git - Date: 2019-05-28 10:07:55 +0900 - - * remove trailing spaces. - -commit ae2a904ce9bffedee7d110dc60fd51c0a2879a5b - Author: Yusuke Endoh - Date: 2019-05-27 23:44:15 +0900 - - Update the certificate files to make the test pass on Debian 10 - - The old certificate files (for example, test/rubygems/ca_cert.pem) were - signed by SHA1. This message digest is considered too weak and rejected - by OpenSSL 1.1.1 or later. Because of this, the test suite does not - pass on Debian 10. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian/ruby-master/log/20190527T123003Z.fail.html.gz#test%2Frubygems - - This change regenerates the files. - A shell script for the regeneration (util/create_certs.sh) is also - added. - -commit cf904d9f9fb18fd2982651946125db62066c3ff5 - Author: Takashi Kokubun - Date: 2019-05-28 10:02:30 +0900 - - Avoid doubly building Travis and AppVeyor - - but on "master" branch. - - For Pull Request, I changed the approach from - d9b338a53f520b2dbb05555f18b8de8072300f40 and - 277e68825a8e4d0e6503a32e41f8b1b6c078b567. - -commit 1cdaa17a065c529354fa9bcb4a1f3001783900ef - Author: Nobuyoshi Nakada - Date: 2019-05-28 08:44:28 +0900 - - parse.y: numbered parameter symbol - - * parse.y (parse_atmark): numbered parameter name is not allowed - as a symbol regardless the context. - -commit 57b4df07bc1e863c48a3b0f4c3185de431454695 - Author: aycabta - Date: 2019-05-28 08:38:55 +0900 - - Use Reline.completer_quote_characters to complete - -commit 74c88e7cda8640084077003ec00b004f9dd7ae73 - Author: aycabta - Date: 2019-05-28 05:10:49 +0900 - - Fix reversed row and column get_screen_size on Windows - -commit f6b62d8fe77a474935ef3dee6bb20ca3cc4da602 - Author: aycabta - Date: 2019-05-28 04:39:29 +0900 - - Use Shift+Enter as Meta+Enter on Windows - -commit 8b135cc8752abf89f2c11fb8760febb756348577 - Author: aycabta - Date: 2019-05-28 04:25:50 +0900 - - Use VK_MENU instead of VK_LMENU to check ALT on Windows - -commit d5682eb9396c7813f50a1400f7e801d0058c6c6e - Author: aycabta - Date: 2019-05-28 03:25:31 +0900 - - Remove unused variable from IRB::InputCompletor - -commit 5e275dd2af4d9d24cdb1cfc0f232f348dae9c2cd - Author: aycabta - Date: 2019-05-28 03:23:52 +0900 - - Treat :@1, :@@1, @1, and @@1 correctly to check termination - -commit 7447c7b651d9074879429bb84dd73f8821521f27 - Author: aycabta - Date: 2019-05-28 01:52:04 +0900 - - Join next line if deletes newline at end of line - -commit 69c7ad17235319c78766102068402ab9fcc9a5ca - Author: aycabta - Date: 2019-05-28 01:51:01 +0900 - - Exit only when blank input - -commit b2b5ed14104d2010ceae9fc81823bdcdc84b3bd7 - Author: Kazuki Tsujimoto - Date: 2019-05-28 01:30:15 +0900 - - Suppress duplicated warning - -commit 9a68aba79f8a3e144e6409988c2e17a5d3f11f26 - Author: aycabta - Date: 2019-05-28 00:15:38 +0900 - - Support OSC and treat \1 \2 correctly - -commit 70166b3ca3eff9747d8c861b3a30e3ef96ffbb72 - Author: aycabta - Date: 2019-05-28 00:20:43 +0900 - - Revert "Support OSC and treat \1 \2 correctly" - - This reverts commit 77bfebebc44c5e46ebd156d074081846c037f882. - -commit 11778fd246a7fe58c3edfa1dbdb87f62b1f36747 - Author: git - Date: 2019-05-28 00:20:24 +0900 - - * 2019-05-28 - -commit 77bfebebc44c5e46ebd156d074081846c037f882 - Author: aycabta - Date: 2019-05-28 00:15:38 +0900 - - Support OSC and treat \1 \2 correctly - -commit 8a2a5822caa7a9fc146d7de4db679986603d7a4f - Author: Nobuyoshi Nakada - Date: 2019-05-27 19:59:17 +0900 - - Colorize error part - -commit b4365e75fd70618b79b3a71c1c13f202acd71368 - Author: Nobuyoshi Nakada - Date: 2019-05-27 19:58:15 +0900 - - Do not make an incomplete escape a valid char - -commit c40003da25543b0f828911af56108ee16af35236 - Author: Nobuyoshi Nakada - Date: 2019-05-27 19:20:11 +0900 - - Ripper#token - - * parse.y (ripper_token): added Ripper#token which returns the - current token string. [EXPERIMENTAL] - -commit b3602f1d20baa4e5f29b2baff2c265461af78f56 - Author: Koichi Sasada - Date: 2019-05-27 16:19:30 +0900 - - check the object is in tomb_heap. - -commit 35146c436820f35733982bac870e409c57888575 - Author: Koichi Sasada - Date: 2019-05-27 16:12:30 +0900 - - add a space between type and others - -commit b3a6469e46b3c9c10176b066e5076ddcc5f96939 - Author: Koichi Sasada - Date: 2019-05-27 16:09:47 +0900 - - add a line break for each error message - -commit 6c1a07555c7fb37a5cd36f08489d33d779b4d41b - Author: Koichi Sasada - Date: 2019-05-27 14:50:26 +0900 - - fix GC.verify_internal_consistency. - - Fix debug output to dump more useful information on GC.compact - debugging. - - check_rvalue_consistency_force() now accepts `terminate` flag - to terminate a program with rb_bug() or only print error message. - GC.verify_internal_consistency use this flag (== FALSE) to dump - all of debug output. - -commit 61da57c76a9e32a4154dac8f24f9b860d65b320d - Author: Koichi Sasada - Date: 2019-05-27 14:37:48 +0900 - - is_pointer_to_heap() checks also tomb or not. - - is_pointer_to_heap(obj) checks this obj belong to a heap page. - However, this function returns TRUE even if the page is tomb page. - This is re-commit of [712c027524]. - - heap_page_add_freeobj() should not use is_pointer_to_heap(), but - should check more explicitly. - -commit ea6e284d86ccbc2d1ed5637acd0940a12b58b672 - Author: Nobuyoshi Nakada - Date: 2019-05-27 12:22:11 +0900 - - parse.y: removed "parser_" prefix from tokadd_utf8 - -commit af17e111b3f7cb3c5ad7dc194399b44d0e5004d0 - Author: Nobuyoshi Nakada - Date: 2019-05-27 11:57:48 +0900 - - Added #inspect and #pretty_inspect to Ripper::Lexer::Elem - -commit 43730256e800dd8e0c5cc482e9861868590ae037 - Author: Yusuke Endoh - Date: 2019-05-27 12:58:08 +0900 - - open-uri: Regenerate server certificates for tests - - OpenSSL 1.1.1 requires 2048 bits or more. This change will fix: - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian/ruby-master/log/20190527T003004Z.fail.html.gz#test%2Fopen-uri - -commit 4c277364a5e70983dcafc9b4d5d990414d61d264 - Author: Nobuyoshi Nakada - Date: 2019-05-27 11:47:09 +0900 - - CSI allows empty digit which equals 0 - -commit 0aa9b003de353e690f31ba59ca0a2db1df51b8bf - Author: Nobuyoshi Nakada - Date: 2019-05-27 11:05:51 +0900 - - context.rb: hide wrapping lines - - * lib/irb/context.rb (IRB::Context#evaluate): separate the code - from wrapping lines to propagate the given exception, not to show - the wrapping lines when SyntaxError. - -commit 9840f52c77a928479919e539d2e47ce36b5ede49 - Author: aycabta - Date: 2019-05-27 10:18:09 +0900 - - Use IRB::InputMethod#eof? to quit - -commit 1d301acbe8e9b0df7872d6719d6646ade25630d6 - Author: aycabta - Date: 2019-05-27 10:09:21 +0900 - - Fix rendering bug of ^D - -commit 9c136f3dea0c6052fefb377bf2c445daec1ca0b6 - Author: aycabta - Date: 2019-05-27 08:39:39 +0900 - - Move to next of last line by ^D - -commit 4e2c7783e364f37a748fe0d3a3cd9f96e58287c0 - Author: aycabta - Date: 2019-05-27 08:13:48 +0900 - - Check blank history - -commit 2805c55aa39bf6127e1e684deb0d5a0291cb6479 - Author: aycabta - Date: 2019-05-27 07:35:35 +0900 - - Move to next of last line by ^C - -commit c49796c9301845e17bd2d5b254ce75d40c898d56 - Author: aycabta - Date: 2019-05-27 07:00:06 +0900 - - Reline should move to next line after finished in Readline mode - -commit 29c16b30ce7655bf34ac59b1327ab13f83dc7970 - Author: Sutou Kouhei - Date: 2019-05-27 06:23:47 +0900 - - Add support for history with Reline backend - -commit 2c91c5b329796a0c7f3cda0296d7c6d6cd6aa8c6 - Author: aycabta - Date: 2019-05-27 06:04:42 +0900 - - Move to the other line when press <- at head or -> at tail - -commit 716ba4a12732d94a50fb31bcaca4ce07bc4b6870 - Author: aycabta - Date: 2019-05-27 05:45:08 +0900 - - Implement J to join lines in vi command mode - -commit 64dc21830aa60dc757df48c715a73f704eed43e0 - Author: aycabta - Date: 2019-05-27 05:01:04 +0900 - - Remove \1 and \2 that escape CSI before render - -commit c6b7cad5c903fa957c274d233c15fdcb3e4a9623 - Author: Takashi Kokubun - Date: 2019-05-27 04:19:59 +0900 - - .azure-pipelines.yml: Add timeout to install dependencies - - to avoid cancelling overall build pipeline when stucking there. - -commit 64ee8900c89444692c6a51f0153869cb634bb086 - Author: Takashi Kokubun - Date: 2019-05-27 03:32:23 +0900 - - Highlight global variable on IRB - -commit 7597f7ecb18ae537002391f9feb7f0e689d3b87b - Author: Takashi Kokubun - Date: 2019-05-27 03:24:52 +0900 - - Simplify lexer state matching in #dispatch_seq - - for improving readability of the condition. It may be slightly faster, or may not. - -commit 5a6c77bbe8acd5929421c359bca57ef559a4f0fe - Author: git - Date: 2019-05-27 03:10:15 +0900 - - * expand tabs. - -commit 39eadca76b48fc7841da688f6745e40897ec37ff - Author: Jeremy Evans - Date: 2019-04-06 16:02:11 +0900 - - Add FrozenError#receiver - - Similar to NameError#receiver, this returns the object on which - the modification was attempted. This is useful as it can pinpoint - exactly what is frozen. In many cases when a FrozenError is - raised, you cannot determine from the context which object is - frozen that you attempted to modify. - - Users of the current rb_error_frozen C function will have to switch - to using rb_error_frozen_object or the new rb_frozen_error_raise - in order to set the receiver of the FrozenError. - - To allow the receiver to be set from Ruby, support an optional - second argument to FrozenError#initialize. - - Implements [Feature #15751] - -commit 897901283c79e5f5f33656abdd453dc272268748 - Author: Takashi Kokubun - Date: 2019-05-27 02:29:20 +0900 - - Refactor IRB color dispatch - - The reason why we were checking lexer state in addition to token was - that we do not want to colorize local variable, method call, etc., while - they share the :on_ident token with a name of method definition which - should be colored as blue. - - It means that we're concerned about the lexer state only for :on_ident. - Thus we can skip checking lexer state for non-:on_ident tokens. This - refactoring is based on that idea. - - Also, now we manage Ripper's lexer state as Integer (use `|` if you - need to check multiple states). It should be faster than using Array of - Integer because #any? block call is not needed. - -commit e73a68ebc322516a42821f502d6d5de5bfa1eb47 - Author: aycabta - Date: 2019-05-27 02:59:21 +0900 - - Support op, cvar, iver, gvar and kw that follow on symbeg in IRB - -commit 122679136820afc663b854567afd16e49eae5a96 - Author: aycabta - Date: 2019-05-27 02:55:37 +0900 - - Support :@@cvar and : on colorize - -commit e50aa359de2a419c0a04eaee84a095f602e1ccb1 - Author: Takashi Kokubun - Date: 2019-05-27 02:22:57 +0900 - - Make the imaginary color on IRB close to pry - - and sorted the token names alphabetically. - -commit 60cc03ffe7a4b67300b0b547dfa4ddaaa894ece6 - Author: aycabta - Date: 2019-05-27 02:13:27 +0900 - - Fix indexes in comments of vi_insert.rb - - Previous fix was 2993b361333147f6dfb86a153971c22329ffbaf4. - -commit 0f35c79ad6bcf409851049639d7200ce7f9787fb - Author: aycabta - Date: 2019-05-27 01:59:17 +0900 - - Fix number literal regexp of IRB completion - -commit e39c950c2bcb8f77f12f841a7acc13b12402ee5a - Author: aycabta - Date: 2019-05-27 01:24:03 +0900 - - Use correctly RI output in IRB completion - -commit 2a7821b28964ba9d71d8714554502a02fabe3781 - Author: git - Date: 2019-05-27 00:45:50 +0900 - - * 2019-05-27 - -commit a43c637660cd3c893401e899014d721d2fa2a5b4 - Author: Nobuyoshi Nakada - Date: 2019-05-27 00:07:05 +0900 - - parse.y: broke the terminator condition down - - * parse.y (here_document): broke the terminator condition down - into each piece, the positional condition, resetting the - dedented here-document indentation, and matching identifier. - suppress a false warning by icc. - -commit 4f2a7b800110346292890e3bed41b37f3f58ab0b - Author: Nobuyoshi Nakada - Date: 2019-05-26 23:44:57 +0900 - - Colorize imaginary and rational literals - -commit 23270f6fee88668a5099fa16eb48739fba2d9dd6 - Author: Takashi Kokubun - Date: 2019-05-26 22:29:30 +0900 - - azure-pipelines.yml: Do not notify vs2017 failure - - It has not been stable recently. Let's stop notifying them for now. - -commit 2ce6365f9ccd93e8129252429391118f794f5e0b - Author: Nobuyoshi Nakada - Date: 2019-05-26 18:45:59 +0900 - - parse.y: adjust error indicator - - * parse.y (parser_yylex): adjust the error indicator of unexpected - fraction part. - - before: - ~~~ - 1.2.3 - ^~~ - ~~~ - - after: - ~~~ - 1.2.3 - ^~ - ~~~ - -commit 58308899151ee3d49f8d9ef5c4e8d108d8822525 - Author: Nobuyoshi Nakada - Date: 2019-05-26 18:24:06 +0900 - - test/ruby/test_notimp.rb: Use EnvUtil.timeout for timeout scale factor - -commit 2df2cdcff0b0358ebc98a43181b5271632563a68 - Author: Yusuke Endoh - Date: 2019-05-26 17:25:16 +0900 - - test/ruby/test_process.rb: Use EnvUtil.timeout for timeout scale factor - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris11s-sunc/ruby-master/log/20190526T052508Z.fail.html.gz - -commit 4668a3a9da9f02b073631013e71722868ceafa53 - Author: Yusuke Endoh - Date: 2019-05-26 17:19:46 +0900 - - test/lib/envutil.rb (EnvUtil.timeout): added. - - It is a wrapper for Timeout.timeout with the scale factor applied. - -commit 02b39daef834890981689f1f697c7c25cad55dd6 - Author: Nobuyoshi Nakada - Date: 2019-05-26 11:33:40 +0900 - - Fix scanner event at invalid syntax - - * parse.y (parser_yyerror, parser_compile_error): revert - r67224 (e5d10cda07b23682e5e4e64d1324e4d3247d4785) "Flush erred - token". - -commit f20af9543f278ab602d001dace850dcf4411cfa6 - Author: Yusuke Endoh - Date: 2019-05-26 15:23:21 +0900 - - test/rubygems/test_gem_stream_ui.rb (test_ask): extend the timeout - - for Solaris. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable10s/ruby-master/log/20190525T211908Z.fail.html.gz - -commit aaf6c678d272d4487179b7ae0b03990ac6b2aff5 - Author: Takashi Kokubun - Date: 2019-05-26 14:32:28 +0900 - - Handle keyword symbol in IRB::Color::SymbolState - -commit 52b09fcee1b170ad3be7d26b885b8a509c7ba006 - Author: Takashi Kokubun - Date: 2019-05-26 14:29:16 +0900 - - Deal with more syntax highlight edge cases - - Please refer to the tests again. - -commit 8aba3b7a04738c8cebcf3d4ecacd57199d976ae2 - Author: Takashi Kokubun - Date: 2019-05-26 13:39:11 +0900 - - Fix more unintended syntax highlights - - See tests for what kind of things are fixed. - -commit 13f58eccdab374ab14d33a6882c52e048cb52e3c - Author: Takashi Kokubun - Date: 2019-05-26 12:47:29 +0900 - - Always color Symbol as Yellow on IRB::Color - - Symbol color was made blue as a workaround because it was hard to - distinguish `foo`s in `:foo` and `def foo; end` (both are :on_ident). - But I wanted to make it yellow like pry. - - `:Struct` had the same problem in :on_const. Because the :on_const was - also blue (but underlined and bold), it was not a big issue. - - While they're not so problematic since we got a workaround, we also had - a more serious issue for highlighting a symbol like `:"a#{b}c"`. - The first half was considered as Symbol and the last half was considered - as String, because the colorizer did not have a state like a parser. - - To approach the last issue, I introduced `IRB::Color::SymbolState` which - is a thin state manager knowing only "the token is Symbol or not". Having - this module magically solves the first two problems as well. So now we - can highlight Symbol as yellow in the perfect manner. - -commit a516834b47de810b53241c66f677fafd4485bebd - Author: Yusuke Endoh - Date: 2019-05-26 09:48:38 +0900 - - test/ruby/test_rubyoptions.rb (test_script_from_stdin): scale timeout - - for Solaris. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable10s/ruby-master/log/20190525T131909Z.fail.html.gz - -commit 208ed56e575b83c47d5cc2e48efd6807bb661bdd - Author: Takashi Kokubun - Date: 2019-05-26 05:54:03 +0900 - - Colorize empty embexpr more on IRB::Color - -commit ec759011201ce16db7079dbc26ae9c085c2608ba - Author: aycabta - Date: 2019-05-26 01:32:12 +0900 - - Fix completion menu state calculation - -commit 2993b361333147f6dfb86a153971c22329ffbaf4 - Author: Nobuyoshi Nakada - Date: 2019-05-26 00:48:26 +0900 - - Fix indexes in comments - -commit 98be203704e98c53b2d3b939b10a0d765c76d53d - Author: Takashi Kokubun - Date: 2019-05-26 00:01:51 +0900 - - Support some unhandled syntax highlight - - Heredoc, %i, :Foo, { 'a': ... }, ... - - :'a' is still half-broken. - -commit a4d44b08ec5139f91617f0fc5786494c5076aaa1 - Author: git - Date: 2019-05-26 00:00:56 +0900 - - * 2019-05-26 - -commit d9c41f2dec7af7f44b4545f4111498c8af3569fe - Author: aycabta - Date: 2019-05-26 00:00:03 +0900 - - Use Reline.completer_word_break_characters to complete - -commit ada64aa9e7f1e087b9fd536d9bc512de401f42a0 - Author: Takashi Kokubun - Date: 2019-05-25 23:48:58 +0900 - - Clear IRB::Color escape sequence before newline - - because otherwise prompt and other things could be polluted. - -commit 7c507345a73afe3f599e407e851b9c0d708adeb0 - Author: Takashi Kokubun - Date: 2019-05-25 23:21:37 +0900 - - Build trunk branch too to trigger AppVeyor on PR - -commit be851692cec43470aceed23ff40c198deb4d4680 - Author: Takashi Kokubun - Date: 2019-05-25 23:21:45 +0900 - - Build trunk branch too to trigger Travis on PR - -commit e2db9f4cc35dacdca1c0d1f1ae79772dae093c34 - Author: Takashi Kokubun - Date: 2019-05-25 22:52:10 +0900 - - Add and use Reline::Unicode.escape_for_print - -commit e691b4da5d1d70216be3e8853d18bcb6a62a617c - Author: Takashi Kokubun - Date: 2019-05-25 22:31:13 +0900 - - Respect --nocolorize on REPL source highlight - -commit 65ce14e7b5f66a92f452136290357eb3df147e5b - Author: Nobuyoshi Nakada - Date: 2019-05-25 17:20:31 +0900 - - Added --with-rdoc option - - New option to direct formats of RDoc to install. - -commit 4fae3c3fb0847ba8eccb61b3c0cc0ae874c17cf0 - Author: Nobuyoshi Nakada - Date: 2019-05-25 16:56:26 +0900 - - Show doc list to install - - Show document format list to install, not only enabled or disable. - -commit 8fd3b9fc5f0f0ef031c54982236b6da327b81458 - Author: Nobuyoshi Nakada - Date: 2019-05-25 16:53:20 +0900 - - Force update all RDoc at install - - RDoc needs to parse all files at once for the cross-reference. - -commit 061c781a09de68c7e34e45732081aac337c4facc - Author: Takashi Kokubun - Date: 2019-05-25 16:38:18 +0900 - - Drop method obsoleted by b83119be9e9a8611063142541993e4823a025622 - - We might need to do the same thing in IRB::Color now, but I'm not doing - that as I assume ANSI escape sequence does not come from a user input - though Reline. - -commit b83119be9e9a8611063142541993e4823a025622 - Author: Takashi Kokubun - Date: 2019-05-25 13:21:22 +0900 - - Incremental syntax highlight for IRB source lines - - Closes: https://github.com/ruby/ruby/pull/2202 - -commit 3c6e1a8cf911d312edeb9dfcc9153be68867ca4f - Author: Hiroshi SHIBATA - Date: 2019-05-25 11:28:07 +0900 - - Avoid to show warning message with unused variable. - -commit 7686e33ee453d43210afcf90fef8fc613dede31c - Author: aycabta - Date: 2019-05-25 10:36:30 +0900 - - JSON like label ends by differs from the start - - pp Ripper.lex('{ "a": 3 }') - => - [[[1, 0], :on_lbrace, "{", EXPR_BEG|EXPR_LABEL], - [[1, 1], :on_sp, " ", EXPR_BEG|EXPR_LABEL], - [[1, 2], :on_tstring_beg, "\"", EXPR_BEG|EXPR_LABEL], - [[1, 3], :on_tstring_content, "a", EXPR_BEG|EXPR_LABEL], - [[1, 4], :on_label_end, "\":", EXPR_BEG|EXPR_LABEL], - [[1, 6], :on_sp, " ", EXPR_BEG|EXPR_LABEL], - [[1, 7], :on_int, "3", EXPR_END], - [[1, 8], :on_sp, " ", EXPR_END], - [[1, 9], :on_rbrace, "}", EXPR_END]] - -commit 809ac9f2eaa0b9cf818f571f6febcee6785cc8e2 - Author: git - Date: 2019-05-25 09:51:27 +0900 - - * expand tabs. - -commit 1ef39d8d099f145222b9352423af16a2bab6e05b - Author: Jeremy Evans - Date: 2019-05-25 08:34:34 +0900 - - Fix process not waking up on signals on OpenBSD - - When using UBF_TIMER_PTHREAD (the UBF handler on OpenBSD), the - timer_pthread_fn function will not signal the main thread with - SIGVTALRM in cases where timer_pthread is armed before - consume_communication_pipe is called. This is because - consume_communication_pipe will unarm the timer. - - Fix this by checking the return value of consume_communication_pipe. - If it returns TRUE and the timer_pthread is disarmed, then signal - the main thread with SIGVTALRM. - - On OpenBSD, this fixes TestThread#test_thread_timer_and_interrupt, and - fixes hangs in TestProcess#test_execopts_redirect_open_fifo_interrupt_raise - and TestProcess#test_execopts_redirect_open_fifo_interrupt_print. - It also fixes the use of Ctrl+C/SIGINT in irb on OpenBSD. It does not - cause any test failures on Linux when UBF_TIMER_PTHREAD is forced as - the UBF handler. - - Fixes [Bug #15798] - -commit 19430b776c3ebae1adfdc5cbe6cdf69a92e37253 - Author: aycabta - Date: 2019-05-25 08:24:41 +0900 - - Fix wrong variable name - -commit 822468307b1a54eccd2711300008a3974c15141e - Author: aycabta - Date: 2019-05-25 08:08:54 +0900 - - Add round-robin variable - -commit 559dca509d2a98584b09c7d9a6d74749ce793ad7 - Author: aycabta - Date: 2019-04-28 07:47:33 +0900 - - Show documents when completion - -commit 260235ce871c3e7718af8d612f1a8ed400b56070 - Author: aycabta - Date: 2019-04-28 06:37:39 +0900 - - Use Reline as Reidline multiline editor in IRB - -commit ff43b2262702e828e2008ba65e68b331d263e3d0 - Author: aycabta - Date: 2019-05-25 02:13:14 +0900 - - Enter key always means evaluate in Reline#readmultiline - -commit 637ee7ee3853387b4f34aa350471692f1778693d - Author: aycabta - Date: 2019-05-25 01:13:02 +0900 - - Fix C-v C-j - -commit 27bab6a569389e743f09dd52c58d8d127eaa7772 - Author: aycabta - Date: 2019-05-25 00:44:09 +0900 - - Revert "Change Reline's version with "Reline 0.0.0"" - - This reverts commit 481ccf73d88797914f700e6e27711bf1ce997eb0. - -commit 481ccf73d88797914f700e6e27711bf1ce997eb0 - Author: aycabta - Date: 2019-05-25 00:40:14 +0900 - - Change Reline's version with "Reline 0.0.0" - -commit 4b012c23b282f48161718392cde8dc637f734623 - Author: aycabta - Date: 2019-05-25 00:38:57 +0900 - - Check block in #readmultiline - -commit b2150548001c412ad424251904d6ece1a80e55f4 - Author: git - Date: 2019-05-25 00:25:42 +0900 - - * 2019-05-25 - -commit eb4e774711b17b8a25a7b16c4f0b6044da3dc261 - Author: aycabta - Date: 2019-05-24 23:38:40 +0900 - - Support Meta key in Reline - -commit 2d34087a38ac680c5576a56fbf4104c3561b0204 - Author: Benoit Daloze - Date: 2019-05-24 21:48:10 +0900 - - Add notes for the Process#clock_getres spec - -commit 4541d2effe1f32e74d27602b44aff12cbf6937aa - Author: Benoit Daloze - Date: 2019-05-24 21:29:47 +0900 - - Only exclude the failing clocks for Process.clock_getres specs on AIX - - * https://rubyci.org/logs/rubyci.s3.amazonaws.com/aix71_ppc/ruby-trunk/log/20190522T103301Z.fail.html.gz - -commit 706c816ad270d981c37894b78ac49cdf1d7cf350 - Author: Kazuhiro NISHIYAMA - Date: 2019-05-24 19:01:39 +0900 - - Escape dots in regexp - -commit a4da223c9a37e2384086f4306571ff0a753fa844 - Author: git - Date: 2019-05-24 19:00:50 +0900 - - * expand tabs. - -commit 6ae9d5c85f3a2a7002b8fc0525e3aca645ec1709 - Author: Kazuhiro NISHIYAMA - Date: 2019-05-24 18:59:58 +0900 - - Revert "check it in eden or tomb." - - This reverts commit 712c027524e3a03500b3098d950fc2f0608ce897. - -commit c06f9e1d24e0e164506c6b5946a02814319485cc - Author: Martin Dürst - Date: 2019-05-24 18:22:36 +0900 - - switch UNICODE_BETA to NO (one more try, first try didn't work) - - Unicode version 12.1.0 was officially released on May 7th, 2019. - There were no changes at all from the "real" beta - published shortly after the new era name "Reiwa" was announced. - So we can switch UNICODE_BETA back to NO. - - common.mk: switch UNICODE_BETA back to NO - tool/downloader.rb: add additional conditions to avoid an error - when moving from beta to final - -commit b0a4d81fc3c9195f7462a096a50e857669c47918 - Author: Koichi Sasada - Date: 2019-05-24 17:52:58 +0900 - - check RVALUE on verifier. - - GC.verify_internal_consistency() checks health of each RVALUE with - check_rvalue_consistency(). However, this function is enabled - only on debug environment (RGENGC_CHECK_MODE>1). So introduce - new function check_rvalue_consistency_force() and use it - in GC.verify_internal_consistency. - -commit 712c027524e3a03500b3098d950fc2f0608ce897 - Author: Koichi Sasada - Date: 2019-05-24 17:35:22 +0900 - - check it in eden or tomb. - - is_pointer_to_heap() checks if it is in valid pointer to the - RVALUE in any heap_page_body. However, it returns true if it - points tomb pages. This patch check it points to eden pages. - -commit 10927b59256aeb196d164e8a8e75180a72768e97 - Author: Koichi Sasada - Date: 2019-05-24 17:06:43 +0900 - - add separation char on rb_obj_info(imemo obj) - -commit 2893550452f6f3cadb17c670da185813d7d0a835 - Author: Nobuyoshi Nakada - Date: 2019-05-24 16:10:59 +0900 - - Mixed encoding error can continue to parse - -commit 45ad375acccca2bb0852613b1e809a7af556f5e6 - Author: Nobuyoshi Nakada - Date: 2019-05-24 16:10:10 +0900 - - [DOC] Use Rational literals than to_r in examples - -commit 1a4080cb0ade6c700ce763d4290e5b56635d1bc8 - Author: Nobuyoshi Nakada - Date: 2019-05-24 15:07:38 +0900 - - Hoisted out ndigits_denominator - - * time.c (ndigits_denominator): calculate the denominator for - digits. - -commit 54d5b599e850c08f92581645c56e4f5ccf20eb45 - Author: Kazuhiro NISHIYAMA - Date: 2019-05-24 14:31:53 +0900 - - Fix typos [ci skip] - -commit 25415780964f2a104523318f3ceef389bfae6e94 - Author: Kazuhiro NISHIYAMA - Date: 2019-05-24 00:47:03 +0900 - - Add leaked-globals to .travis.yml - -commit 491d2b8063d1f4e1c9e8fe0a57ff66fbfdf7d622 - Author: Nobuyoshi Nakada - Date: 2019-05-24 14:25:46 +0900 - - Removed symlinks by in-place build [Bug #15870] - -commit 14778125b12b80f1ebb0474f0360204f6b3abae5 - Author: Nobuyoshi Nakada - Date: 2019-05-24 14:24:38 +0900 - - Removed and ignore symlinks by in-place build [Bug #15870] - -commit e713c2bde8117f3aaf39d827d3fc504cd5866976 - Author: Martin Dürst - Date: 2019-05-12 16:21:24 +0900 - - switch UNICODE_BETA to NO - - Unicode version 12.1.0 was officially released on May 7th, 2019. - There were no changes at all from the "real" beta published shortly - after the new era name "Reiwa" was announced. So we can switch - UNICODE_BETA back to NO. - - common.mk: switch UNICODE_BETA back to NO - tool/downloader.rb: add additional conditions to avoid an error - when moving from beta to final - -commit 35caedc828667363413c7fbe4a4cc60758c426a2 - Author: Nobuyoshi Nakada - Date: 2019-05-24 14:11:00 +0900 - - --autostash is since Git 2.6 [Bug #15871] - -commit dfc21a0467d39af00666aec5098530529924cf48 - Author: Nobuyoshi Nakada - Date: 2019-05-24 12:23:26 +0900 - - Ignore generated files by in-place build [Bug #15870] - -commit 7f2f56b2f51269f42f822ecf346375b040267595 - Author: Nobuyoshi Nakada - Date: 2019-05-24 12:22:17 +0900 - - Define GITPULLOPTION to rebase [Bug #15871] - -commit 50e993d4e347bd3e821c4996cc745fa0aa74bd64 - Author: Yusuke Endoh - Date: 2019-05-24 12:17:05 +0900 - - Skip the Process.clock_getres spec on AIX - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/aix71_ppc/ruby-trunk/log/20190522T103301Z.fail.html.gz - -commit 498113d5d39a4227c2b9a9c11bea895fe316e6b9 - Author: Yusuke Endoh - Date: 2019-05-24 11:20:12 +0900 - - test/ruby/test_gc.rb (test_gc_stress_at_startup): extend time timeout - - It fails on some CI environments. - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian8/ruby-trunk/log/20190524T003006Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11s/ruby-trunk/log/20190523T002505Z.fail.html.gz - -commit 1ee1e8fccdec8de86799db02d6f62ba3d064ba1e - Author: Takashi Kokubun - Date: 2019-05-24 01:03:23 +0900 - - Test GC.compact with MJIT again - -commit dde8ceaf709abca1e3af63739de65d2809691878 - Author: git - Date: 2019-05-24 00:42:54 +0900 - - * 2019-05-24 - -commit 187ef00a41ca28a26ffa0a9399c48335578590bb - Author: Takashi Kokubun - Date: 2019-05-24 00:41:18 +0900 - - wercker.yml: Commit MJIT debug logs to another repository - - because too-large Wercker output is truncated. - - ruby/mjit-debug is a private repository for now, because the person - fixing it is likely to be me or another committer. - -commit 4fe908c1643c3f355edd787bb651aefb53b996c0 - Author: Takashi Kokubun - Date: 2019-05-23 23:53:41 +0900 - - gc.c: Try pausing MJIT worker during GC.verify_compaction_references - - for debugging - http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2048247 - -commit c04ef141d2edd71f90f0707889b4adfd94e5be43 - Author: Yusuke Endoh - Date: 2019-05-23 23:34:18 +0900 - - enum.c (enum_tally): better example in rdoc - -commit e72769ef81a933959f4a85ee09eec66bedcbf022 - Author: Nobuyoshi Nakada - Date: 2019-05-23 23:24:22 +0900 - - Enumerable#filter_map in NEWS - -commit ccb165292962f42edbfc72cbf6b49a9ea8a319c9 - Author: Nobuyoshi Nakada - Date: 2019-05-23 22:47:55 +0900 - - New Time methods in NEWS - -commit 0b4d51b055ad2806719b1f4a3eca5c1bbce64631 - Author: git - Date: 2019-05-23 22:39:54 +0900 - - * expand tabs. - -commit f5415a95ce1d393a3fd1d7f657ba85d85171356a - Author: manga_osyo - Date: 2019-03-16 14:42:24 +0900 - - Add `Time#ceil`. - - Closes: https://github.com/ruby/ruby/pull/2133 - -commit fe3ff5afb07e171fd950623c69abfbabbb2762a3 - Author: Nobuyoshi Nakada - Date: 2019-05-23 17:27:24 +0900 - - Suppress paranoid warnings for external/3rd-party libraries - - [Feature #15665] - -commit dc95b57a68da6999ce6a1542b3ad81c51429cc99 - Author: Koichi Sasada - Date: 2019-05-23 17:30:53 +0900 - - add verifier before compact - -commit 878a06efecbd2d71bf1a852a6367fbcd3e8edf93 - Author: Urabe, Shyouhei - Date: 2019-05-23 17:24:15 +0900 - - add comments [ci skip] - - Also requested by Ko1. - -commit 763989c6c5a553fa072208e53707813fbde916d0 - Author: Urabe, Shyouhei - Date: 2019-05-23 17:02:07 +0900 - - prefix ASAN related inline functions asan_ - - requested by Ko1. - -commit 8fce83339b6a862001c4fbad6bcd72dc3efee136 - Author: Urabe, Shyouhei - Date: 2019-05-23 16:55:20 +0900 - - disable _FORTIFY_SOURCE - - Sanitizers and fortifications do not interface, and there is currently - no plan for them to work together. - - See also https://github.com/google/sanitizers/issues/247 - -commit 6be0ab73c3f2cc95d76ca21203adf6a73c8705e7 - Author: Koichi Sasada - Date: 2019-05-23 16:52:14 +0900 - - gc_pin() doesn't check is_markable_object(). - - Caller of gc_pin() should check it is a mark-able object. - So gc_pin() doesn't need to check it. With this fix, - we can refactoring around it. - -commit 65637dae30bda83b72f185bbcf01d7bad80926c7 - Author: Takashi Kokubun - Date: 2019-05-23 16:07:16 +0900 - - Test GC.compact on MJIT again - -commit c5cbabf8a8aa42b7dcf943c64274489286174108 - Author: NAKAMURA Usaku - Date: 2019-05-23 15:33:40 +0900 - - Use colorized IRB on Windows without checking `TERM` - -commit 0acbdd1ed0d2302743525a5188cc5a0d6251680c - Author: Alfonso Jiménez - Date: 2018-11-20 19:51:08 +0900 - - Adding Enumerable#filter_map - - [Feature #15323] - Closes: https://github.com/ruby/ruby/pull/2017 - -commit 1ccc2eeba08c370d84474357771f0bd7c5fe7f16 - Author: Nobuyoshi Nakada - Date: 2019-05-19 16:24:33 +0900 - - Pretend to update all Unicode files - -commit c05eaa93258ddc01e685b6cc3a0da82998a2af48 - Author: Jeremy Evans - Date: 2019-05-15 14:04:46 +0900 - - Fix mixed encoding in heredoc - - Heredocs are parsed line-by-line, so we need to keep track of the - temporary encoding of the string. Previously, a heredoc would - only detect mixed encoding errors if they were on the same line, - this changes things so they will be caught on different lines. - - Fixes [Bug #15839] - -commit f91b1ab33d397fdcdf452d563d7f59469a078d88 - Author: Jeremy Evans - Date: 2019-05-16 13:08:49 +0900 - - Skip assertion in readline test if Readline version is 4.3 - - Previously, the entire method was not run for Readline 4.3, probably - because it was known to fail. Commit - c754e979d3eeca51f1b13778f19f347df3da656e removed the check for - Readline 4.3. Other than this one assertion, which also doesn't - work when using Reline, the method runs correctly when using - Readline 4.3. - - Fixes [Bug #15853]. - -commit 4814f173615f8f9f2f3429fe788089479490fe10 - Author: Koichi Sasada - Date: 2019-05-23 13:21:40 +0900 - - skip zombies. - - rb_gc() no longer invokes finalizers, so there are T_ZOMBE objects. - -commit 02973d3ba8020f494ad2d627284f9bc45db48f9c - Author: Koichi Sasada - Date: 2019-05-23 11:42:15 +0900 - - pin `maybe` pointers. - - Objects pointed by "maybe" pointers because of conservative marking - should be pinned down. - -commit 136ae55892ae120bb94e4ff2d025c745fdaa1091 - Author: Koichi Sasada - Date: 2019-05-23 11:21:16 +0900 - - Do not kick finalizers on rb_gc(). - - rb_gc() kicks gc_finalize_deferred(), which invokes finalizers. - This means that any Ruby program can be run this point and - it may be thread switching points and so on. - - However, it is difficult to think it invokes any Ruby programs. - For example, `GC.compact` use `rb_gc()` to implement it, however, - any Ruby program must not be run on this timing. - - For this reason (it is difficult to image it run any Ruby program), - I removed `gc_finalize_deferred()` line in rb_gc(). - - This patch solves GC.compact issue. - [Bug #15809] and re-enable GC.compact test. - -commit 0eff21af8d03a9d2b881b9cce963262da3d952dc - Author: Koichi Sasada - Date: 2019-05-23 11:19:23 +0900 - - update Array's length correctly. - - ARRAY_ASET() does not change the length of array, so - use rb_ary_push() instead of ARRAY_ASET(). It prevents - updating reference on GC.compact. - -commit bb29ed6e336d26f25722f356e83a027394008443 - Author: aycabta - Date: 2019-05-23 08:33:20 +0900 - - C-v C-j means an newline insertion - -commit da3fabc976fb88c77e8b3446f2f0bc005e64056f - Author: aycabta - Date: 2019-05-23 08:23:22 +0900 - - Change behavior to confirm multiline termination - - Always checks termination if you press Enter at last line. - -commit c210c68d393b76149f02dc1f8b610269a53d94bc - Author: Takashi Kokubun - Date: 2019-05-23 03:14:54 +0900 - - Revert "Revert CI deduplication on Wercker / Azure for debugging" - - This reverts commit 1ebe9a2f82fef5190454e68d430004282f5da172. - - because it did not help. - -commit 1ebe9a2f82fef5190454e68d430004282f5da172 - Author: Takashi Kokubun - Date: 2019-05-23 01:58:57 +0900 - - Revert CI deduplication on Wercker / Azure for debugging - - CI seems to have a weird behavior now. Debugging. - - Revert "azure-pipelines.yml: Fix typo" - - This reverts commit f69d28fbca1eec8b9722cea1f989ee9554e8dad5. - - Revert "azure-pipelines.yml: Use simpler trigger syntax" - - This reverts commit 709756d89747bd36664593eda4156a7bf5ad7631. - - Revert "azure-pipelines.yml: Do not run CI on trunk" - - This reverts commit bec877b46fd4d0f621a75591b519a7e266eaa89b. - - Revert "appveyor.yml: Do not doubly run CI on trunk" - - This reverts commit d9b338a53f520b2dbb05555f18b8de8072300f40. - -commit 00f7e424516a6c5ea58ddb3cc821d3cabe9c496c - Author: Yusuke Endoh - Date: 2019-05-23 01:46:21 +0900 - - spec/ruby/core/hash/constructor_spec.rb: add "ruby_version_is" guard - - follow up for d3f1c615c5 - -commit a093c98ddc92d8b0a341233630aea8f778188c7e - Author: Nobuyoshi Nakada - Date: 2019-05-23 01:39:04 +0900 - - Fallback RUBY_FULL_REVISION if not defined - -commit f69d28fbca1eec8b9722cea1f989ee9554e8dad5 - Author: Takashi Kokubun - Date: 2019-05-23 01:18:30 +0900 - - azure-pipelines.yml: Fix typo - -commit 709756d89747bd36664593eda4156a7bf5ad7631 - Author: Takashi Kokubun - Date: 2019-05-23 01:17:26 +0900 - - azure-pipelines.yml: Use simpler trigger syntax - -commit bec877b46fd4d0f621a75591b519a7e266eaa89b - Author: Takashi Kokubun - Date: 2019-05-23 01:13:13 +0900 - - azure-pipelines.yml: Do not run CI on trunk - -commit b80adde359f82085db9065a9c06af5ee8f937c34 - Author: Takashi Kokubun - Date: 2019-05-23 01:07:16 +0900 - - wercker.yml: Notify master branch instead of trunk - -commit 9d39eb6b40966deeeaa23c28f0be640c56545644 - Author: Yusuke Endoh - Date: 2019-05-23 00:45:30 +0900 - - range.c (inspect_range): omit beginless "nil" - - except the special case `(nil..nil)`. - - ``` - (1..).inspect #=> "1.." - (..5).inspect #=> "..5" - (nil..nil).inspect #=> "nil..nil" - ``` - - [Bug #15745] - -commit d9b338a53f520b2dbb05555f18b8de8072300f40 - Author: Takashi Kokubun - Date: 2019-05-23 00:40:09 +0900 - - appveyor.yml: Do not doubly run CI on trunk - -commit 277e68825a8e4d0e6503a32e41f8b1b6c078b567 - Author: Takashi Kokubun - Date: 2019-05-23 00:33:44 +0900 - - .travis.yml: Test master branch instead of trunk - -commit d3f1c615c5b81319e422e9c92e1cb8ba82209fba - Author: Yusuke Endoh - Date: 2019-05-23 00:15:55 +0900 - - hash.c (rb_hash_s_create): Reject `Hash[[nil]]` - - The behavior of `Hash[[nil]] #=> {}` was a bug until 1.9.3, but had been - remained with a warning because some programs depended upon it. - Now, six years passed. We can remove the compatibility behavior. - [Bug #7300] - -commit 4d62296948c36615e73b99d592253256d0ea0d4a - Author: git - Date: 2019-05-23 00:15:54 +0900 - - * 2019-05-23 - -commit a205e24747497391390ef7c004293a8a7934dd96 - Author: Nobuyoshi Nakada - Date: 2019-05-22 23:18:37 +0900 - - Make RUBY_REVISION full length - -commit d819d97cf02fd0a5b5b1f6ee69c9fdb83276e6c2 - Author: Nobuyoshi Nakada - Date: 2019-05-22 23:18:09 +0900 - - Default to the current branch - - * tool/make-snapshot: default to the current branch if no branch - but srcdir is given. - -commit 8fb77acac70bab6924c063020b6fe3e93fece242 - Author: Nobuyoshi Nakada - Date: 2019-05-22 23:50:07 +0900 - - Fix revision name - - * tool/make-snapshot (package): dump to stringize GIT revisions - properly. - -commit 24684a81d2ed3ae32ad67659a8b18acd052727b5 - Author: Nobuyoshi Nakada - Date: 2019-05-22 22:15:55 +0900 - - Fix revision name - - * tool/make-snapshot (package): use the last revision of the whole - tree as the revision name, not a single file. - - * tool/file2lastrev.rb: ditto. dump without unnecessary subrange - and literal quotes, to stringize SVN revisions properly. - -commit 658f17b8ec56e3f8bbd70afdb92c6e7aa156e5be - Author: Nobuyoshi Nakada - Date: 2019-05-22 21:14:12 +0900 - - Fixed the method to delegate - - * tool/vcs.rb (VCS::GITSVN.revision_name): should delegate to the - same method of SVN, not an undefined method. - -commit 2fb69b32968e4c18c8b6fe0a9a33b454feccba32 - Author: git - Date: 2019-05-22 16:54:47 +0900 - - * expand tabs. - -commit 32dd1a798a6d042dbf91e24e9c9f44d94e68f721 - Author: Nobuyoshi Nakada - Date: 2019-05-22 16:52:19 +0900 - - gc.c: revert b00f280d4b "Eagerly name modules and classes" - - * gc.c (rb_raw_obj_info): new string objects cannot allocate to - create new class path name during GC. - -commit 4d93340d3836bc454cee0c74715a412d090ff178 - Author: Nobuyoshi Nakada - Date: 2019-05-22 16:33:03 +0900 - - ast.c: update inspect results in the documents - -commit 48f3dc3cce74f459a690f8434d191140a1c0d8a2 - Author: Nobuyoshi Nakada - Date: 2019-04-19 06:37:01 +0900 - - Set namespace tree - - * variable.c (set_namespace_path): set path to the whole namespace - tree. [Feature #15765] - -commit 1b20d6a6c6b0f72804fb25f90e78fe8efdcbed56 - Author: Alan Wu - Date: 2019-04-12 12:46:28 +0900 - - Extract build_const_pathname - - * variable.c (build_const_pathname): build constant path from - name as a string. [Feature #15765] - -commit b00f280d4b9569e7153365d7e1c522b3d6b3c6cf - Author: Alan Wu - Date: 2019-04-12 12:46:28 +0900 - - Eagerly name modules and classes - - * variable.c: make the hidden ivars `classpath` and `tmp_classpath` the source - of truth for module and constant names. Assign to them when modules are bind - to constants. - - * variable.c: remove references to module name cache, as what used to be the cache - is now the source of truth. Remove rb_class_path_no_cache(). - - * variable.c: remove the hidden ivar `classid`. This existed for the purposes of - module name search, which is now replaced. Also, remove the associated - rb_name_class(). - - * class.c: use rb_set_class_path_string to set the name of Object during boot. - Must use a fstring as this runs before rb_cString is initialized and - creating a normal string leads to a VALUE without a class. - - * spec/ruby/core/module/name_spec.rb: add a few specs to specify what happens - to Module#name across multiple operations. These specs pass without other - code changes in this commit. - - [Feature #15765] - -commit a829be209fc5866f07adc93e8b2f1ddf7131ebfd - Author: Nobuyoshi Nakada - Date: 2019-05-22 08:57:20 +0900 - - Ripper: no documents of fallback methods - -commit c48d9139d4a979e534c1522d2a09ec2a440a8e9a - Author: aycabta - Date: 2019-05-22 07:03:29 +0900 - - Remove unnecessary variable in LineEditor - -commit c00d8056729b72724b86b0f0412c6f2ca9fd1318 - Author: aycabta - Date: 2019-05-22 06:48:27 +0900 - - Support CSI sequences in prompt - -commit ca435ed04ae15607c598808473c59dd7c83debc1 - Author: aycabta - Date: 2019-05-22 03:12:37 +0900 - - Use Reline.test_mode in Reline's test too - -commit f8732bd4d65cf0b776348907b56bd58f4f79ca9c - Author: aycabta - Date: 2019-05-22 02:52:29 +0900 - - Reline#reset should initialize @rest_height and @screen_size eveytime - -commit 232f1117e8aa83ed315d2f0c5ebaaa68e722d204 - Author: git - Date: 2019-05-22 02:14:35 +0900 - - * 2019-05-22 - -commit be86e71c674a6eb3221019cc9e988b3e999b2220 - Author: aycabta - Date: 2019-05-22 02:13:57 +0900 - - Reopen $stderr with specified fd by RELINE_STDERR_TTY - -commit b508b623ee1cc526cfd674218f6e6e7fa6b10f26 - Author: Takashi Kokubun - Date: 2019-05-21 21:00:17 +0900 - - Use conssitent documentation about repository [ci skip] - - This unifies our explanation with - https://github.com/ruby/www.ruby-lang.org/pull/2069 - - Co-authored-by: OKURA Masafumi - -commit 2ecee730a577ece99d16792c12d6662578ac5a85 - Author: aycabta - Date: 2019-05-21 20:52:11 +0900 - - Remove ~/.inputrc not found error message - -commit 32ed85f601d2102990b62102c5f3b322306b1928 - Author: Takashi Kokubun - Date: 2019-05-21 20:32:15 +0900 - - Copy config to make IRB::Context#use_colorize? functional - - on initialize - - This fixes https://github.com/ruby/ruby/pull/2188 - -commit 4613c4bd5c22acb675ec385f4e0fa27ec7ad59ab - Author: aycabta - Date: 2019-05-21 18:55:31 +0900 - - Symbol beginning token may take a constant token - -commit bb5b4f9044b583e192d56c7feda4d1084542efd3 - Author: aycabta - Date: 2019-05-21 18:45:00 +0900 - - Cursor should be at line head after line breaking - -commit fd95ab44c66ce6b756f66210640cf8e8ffd1bd32 - Author: aycabta - Date: 2019-05-21 18:36:10 +0900 - - IRB should eval and show an error when only `.` is inputted - -commit 3f6b5f447caf8f8ca06d5c170e9266ef20945834 - Author: Koichi Sasada - Date: 2019-05-21 18:34:29 +0900 - - re-skip tests of GC.compact. - -commit 6d93baaedd0e9819d4ddb6637b2d3d539f1fa210 - Author: aycabta - Date: 2019-05-21 17:46:31 +0900 - - Support DEL key - -commit 8c004c71235c5ee8b2d4846672788d3089f3e884 - Author: Koichi Sasada - Date: 2019-05-21 17:45:28 +0900 - - enable test for GC.compact to reproduce an issue on CI - -commit 7ff4abe650038ec4a9fa5fa9e0fbc16ceff7714e - Author: Koichi Sasada - Date: 2019-05-21 15:45:21 +0900 - - unify normal and verify ver. - -commit 0b9a7b35287e7c4db37e0f49612faeff29752108 - Author: Koichi Sasada - Date: 2019-05-21 14:58:39 +0900 - - do not use RARRAY_SET() directly in array.c. - -commit 44e9b1e3a6ba464a8ecc22cd7779af64ea01e2e8 - Author: Nobuyoshi Nakada - Date: 2019-05-21 14:23:42 +0900 - - Fix typo - -commit ac00bdc8a8ac2c62a94dd36a7784d15bbcb7df19 - Author: Nobuyoshi Nakada - Date: 2019-05-20 18:10:35 +0900 - - Do not modify shared array - - [Bug #15821] - -commit f9696ca6cbfe827b7ce7199e511fa7431f9333b1 - Author: Nobuyoshi Nakada - Date: 2019-05-21 10:30:13 +0900 - - Simplified the guard against old versions - -commit be0d9c0d26adcf8017d0ce4adf782c1bea2b7240 - Author: aycabta - Date: 2019-05-21 09:24:09 +0900 - - Add "require 'irb'" to use IRB.conf - -commit 29c81265c1637245aa331f8d47c5060f4dc79ab0 - Author: aycabta - Date: 2019-05-21 09:14:08 +0900 - - Check whether IRB.conf is nil in IRB::WorkSpace#code_around_binding - -commit 3a9008b9845db544d0788851f9527ce9f9f6bf4a - Author: aycabta - Date: 2019-05-15 16:36:33 +0900 - - Add --colorize and --nocolorize options to IRB - -commit df6a673ca55d26a768ead23466c7e055a8596d7a - Author: aycabta - Date: 2019-05-21 08:10:36 +0900 - - Fix vertical cursor moving when splitting line - -commit 34d7ec4e9b0a24b3ce89009927738f1dac38e6d3 - Author: aycabta - Date: 2019-05-21 01:18:19 +0900 - - Finish only when buffer contains non-blank line - -commit b69dfdb4b3d9dfce18123d1814087fc49b390ea9 - Author: aycabta - Date: 2019-05-21 01:14:53 +0900 - - Cursor up should reduce 1 than editing height - -commit 8023b3ce9d654c1a58e1f4952b666e2c412938ca - Author: git - Date: 2019-05-21 01:10:47 +0900 - - * 2019-05-21 - -commit 6592f5fcc8e7c6130eba5acf71d2763e7a6d58cf - Author: aycabta - Date: 2019-05-21 00:59:43 +0900 - - Check bytesize in vi command mode last char back - -commit 583ecd5fc5d96a6a8135776db6e92b8565789fb0 - Author: git - Date: 2019-05-20 22:08:27 +0900 - - * expand tabs. - -commit e83f10b36865c7fc3f3e09deab679c4270310021 - Author: Nobuyoshi Nakada - Date: 2019-05-20 21:58:06 +0900 - - Get rid of undefined behavior that source and destination buffers overlap - -commit 8c8f2d97cf51103b6f3d40bf7239a40899e380f6 - Author: Benoit Daloze - Date: 2019-05-20 17:41:57 +0900 - - Remove redundant ignore rule for Process#clock_getres specs - -commit 2a34543e11299146db688e636e0b95c22990e302 - Author: Benoit Daloze - Date: 2019-05-20 17:40:34 +0900 - - Move exclusion for Hyper-V next to other skipped constants - -commit ab0f2deab11a3203f9af3af1a27dfea1f4a882f3 - Author: Koichi Sasada - Date: 2019-05-20 14:39:46 +0900 - - skip a test for CLOCK_MONOTONIC_RAW. - - On my Linux guest machine on Hyper-V, I got an error. - Process.clock_gettime(CLOCK_MONOTONIC_RAW, :nanosecond) returns like: - - ... - 875573945119100 - 875573945119600 - ... - - even if `Process.clock_getres(value, :nanosecond)` returns 1. - So I simply skip this test for CLOCK_MONOTONIC_RAW. - -commit 7ef548c0acf2f8b62db234e39a0f1030902a305c - Author: Nobuyoshi Nakada - Date: 2019-05-20 12:43:52 +0900 - - Mixed encoding error can continue to parse - -commit 9f49ff4965da8b05887912506dff7d0d20388550 - Author: aycabta - Date: 2019-05-20 07:45:36 +0900 - - Cursor can't move to eol when vi command mode - -commit f659e2f9bf0c7d0351a80dc284a384a948bd67dd - Author: git - Date: 2019-05-20 04:52:41 +0900 - - * 2019-05-20 - -commit 075e1acb4c920edf0b5d20a5cb5004a4f88fbcd8 - Author: aycabta - Date: 2019-05-20 04:47:43 +0900 - - Readline.completion_proc accepts US-ASCII - -commit 4d7ada10b1d8d6eba79d845aa9ecffb890f593d4 - Author: Nobuyoshi Nakada - Date: 2019-05-19 16:47:53 +0900 - - Update test-unit - -commit cc764e5d37a8424949af0e83a8bb5661a1d6e8a6 - Author: git - Date: 2019-05-19 05:45:50 +0900 - - * 2019-05-19 - -commit af1502175b5a3415949b8daa6f70a1cfaa7d1975 - Author: Nobuyoshi Nakada - Date: 2019-05-19 05:42:13 +0900 - - Touch the timestamp file for Unicode files - -commit 60de17258ba0be6c113e60ce237c3b8608457da7 - Author: Marcus Stollsteimer - Date: 2019-05-18 20:06:49 +0900 - - [DOC] Shorten examples for Time#{round,floor} - -commit cc0e460bccbf005d23616be1ea2624a161a4ecdd - Author: Marcus Stollsteimer - Date: 2019-05-18 20:06:10 +0900 - - [DOC] Improve documentation for Time#floor - - Use numbers that are more illustrative for #floor. - -commit f782e5bdcf91f2885519e20e3aa53eec063faea8 - Author: Marcus Stollsteimer - Date: 2019-05-18 20:05:26 +0900 - - [DOC] Use '&&' instead of 'and' in boolean expression - -commit acf6689a8c77b5730274e2c9ec1d49423674da15 - Author: Marcus Stollsteimer - Date: 2019-05-18 20:04:04 +0900 - - [DOC] Improve documentation for Enumerator::Lazy - -commit 154a67f140a8397df77d82cdc80e13b291b8aedd - Author: Aaron Patterson - Date: 2019-05-18 18:23:47 +0900 - - Rename rb_gc_new_location to rb_gc_location - - The function will return new or existing locations depending on whether - or not the object actually moved, so give it a more appropriate name. - -commit bbb84a16fab8e715a108c318e9e0e019339eb972 - Author: Kazuhiro NISHIYAMA - Date: 2019-05-18 14:20:33 +0900 - - Add fall through comment for Coverity Scan - -commit 16917cc3cb27277d04b9c35fb7fc10f72a9b6dfa - Author: aycabta - Date: 2019-05-18 03:12:53 +0900 - - Add Reline.test_mode to use with special I/O - -commit b165bedcbd41d791a85fc1ce90b57a0d0525f319 - Author: Koichi Sasada - Date: 2019-05-18 12:17:02 +0900 - - skip a test to pass CIs. - - I'm debugging [Bug #15821] but my patch introduces another issue. - So I simply skip this test and re-enable it later. - -commit 6ae1c596f0b179f1b1b2b115ca75eab1631230fe - Author: Nobuyoshi Nakada - Date: 2019-05-18 09:40:52 +0900 - - Add test for UNTIL - -commit 4d9c3a8c2362b7d5973057435258e447ce733741 - Author: Nobuyoshi Nakada - Date: 2019-05-18 01:17:47 +0900 - - Update include files on msys2 too - -commit 719ebbec303967aacbf5122219d67b34aae9351e - Author: Nobuyoshi Nakada - Date: 2019-05-17 23:46:22 +0900 - - Get rid of always updating Unicode files - - [Misc #15859] - -commit c4bad9f74e432572b80c24c7f1c519c5cc4c59a2 - Author: Nobuyoshi Nakada - Date: 2019-05-18 09:35:40 +0900 - - Distinguish pre-condition and post-condition loops - -commit 39336a4210557d8677a2e07094efd785af0711ca - Author: git - Date: 2019-05-18 02:41:28 +0900 - - * 2019-05-18 - -commit 9858d74a128c1126f0d05ebe5c05a2e6b34ce0af - Author: aycabta - Date: 2019-05-18 02:32:25 +0900 - - Remove parent namespace from Readline test classes - - The namespace "Readline" doesn't exist when running tests if readline.so - doesn't exist and Reline exists. So test classes shouldn't be at nested - namespaces under "Readline". - -commit ea3e7e268546599883b25d9a33d26e042461ac25 - Author: Aaron Patterson - Date: 2019-05-17 23:08:31 +0900 - - Prevent Dynamic -> Static symbols from moving - - If a dynamic symbol has been converted to a static symbol, it gets added - to the global ID list and should no longer move. C extensions can pass - symbols to rb_sym2id and those symbols should no longer be movable. - When the symbol is passed to rb_sym2id, the `id` member is set, so we - can use its existence to prevent movement. - -commit 0723c107f4fb39f60113b44dd21d875c90da5456 - Author: Nobuyoshi Nakada - Date: 2019-05-17 13:55:59 +0900 - - Do not export InitVM functions - -commit e29a85a96c47be3b4ff77b1e6d2235ea935a35bc - Author: Nobuyoshi Nakada - Date: 2019-05-17 10:49:25 +0900 - - Make COROUTINE_XMM_REGISTERS compile-time only too - -commit b1b385465e4fc1cab84b2a3fa112a33a3e5ab076 - Author: Nobuyoshi Nakada - Date: 2019-05-17 10:25:34 +0900 - - Do not call memcpy if copying nothing - - c.f. - * e7b18ca6d9b45b7e71694557b9fab8152c62c1ed - * 34e1079aef81d108890fb167d7df69960e994ff5 - -commit 32e8b42852fc59a7064ec9ad642774c562b69c21 - Author: Koichi Sasada - Date: 2019-05-17 12:59:49 +0900 - - skip tests for GC.compact to pass CI. - - Now, GC.compact has issues which makes rubyci RED, so I skip this test - and debug soon. - -commit f1f402946023573d3d17410d0de19c653f53f96e - Author: git - Date: 2019-05-17 10:10:39 +0900 - - * 2019-05-17 - -commit 0971cab4d0cb730292461d16ac72c430aa23cc10 - Author: Nobuyoshi Nakada - Date: 2019-05-17 09:53:47 +0900 - - Test to disable ASCII-only optimization - - Examples why ASCII-only optimization cannot apply multi-byte - encodings which have 7-bit trailing bytes. - - Suggested by @duerst at https://github.com/ruby/ruby/pull/2187#issuecomment-492949218 - -commit 23751a2681abd50e9081bdbb00f818942570c872 - Author: Nobuyoshi Nakada - Date: 2019-05-16 23:26:57 +0900 - - leaked-globals: check if un-prefixed symbols leak externally - -commit e0f0ab959e9a0fa3db8dfdb2a493b057d6e7541b - Author: Nobuyoshi Nakada - Date: 2019-05-16 18:58:17 +0900 - - Remove unused symbols - -commit 0ed9bdfc13082b6d19712738ca69fbbe2a36f106 - Author: Nobuyoshi Nakada - Date: 2019-05-16 18:24:12 +0900 - - Pack struct rb_strterm_heredoc_struct on 32-bit platforms - -commit 88449100bc6d23a00dbf3addb97665f4f606f2b8 - Author: Koichi Sasada - Date: 2019-05-16 16:44:30 +0900 - - don't need to sweep rest. - - `transient_heap_evacuate()` disables GC using `rb_gc_disable()` - to prohibit GC invocation because of new allocation for evacuated - memory. However, `rb_gc_disable()` sweep all rest of unswept pages. - We don't need to cancel lazy sweep so this patch introduce - `rb_gc_disable_no_rest()` which doesn't cancel lazy sweep. - -commit a160b2f56716f70fa3e485ae89875da48baefc1d - Author: Nobuyoshi Nakada - Date: 2019-05-16 15:51:37 +0900 - - Make COROUTINE_REGISTERS compile-time only not to be a global symbol - -commit 7069f64c419ebb9a7fd3e48d81454148ed4b2fba - Author: Nobuyoshi Nakada - Date: 2019-05-16 15:43:16 +0900 - - Prefix global_symbols with `ruby_` - -commit 973431c059ab2719e97d1ec051d21aa63a43a005 - Author: Nobuyoshi Nakada - Date: 2019-05-16 15:36:58 +0900 - - Make internal functions static - -commit 82332c7d8b17b610a347f7c804219c7fcb702d23 - Author: Takashi Kokubun - Date: 2019-05-16 15:13:36 +0900 - - Rename mjit_gc_finish_hook to mjit_gc_exit_hook - - because @ko1 said "gc_finish" is confusing like a finish of entire GC - process - -commit 18e43e823106f15c8aaceb1f56874bdf67bc36a3 - Author: Nobuyoshi Nakada - Date: 2019-05-16 14:58:57 +0900 - - Fix fd leak - - merged https://github.com/rubygems/rubygems/pull/2765 - -commit fadab0f9fb18448c9146fce0fd87f4285f647516 - Author: git - Date: 2019-05-16 14:43:49 +0900 - - * 2019-05-16 - -commit e970ab3339109b89b4251887e39412af20348156 - Author: Nobuyoshi Nakada - Date: 2019-05-15 23:17:18 +0900 - - Suppress unused-but-set-variable warning - -commit 214e2f93aa6b0810353b67f320dab6aa63a97169 - Author: Nobuyoshi Nakada - Date: 2019-05-15 18:18:44 +0900 - - Fix the warning in 456586bb234915107da255d2944f620a7dd7048b - -commit 3cf767ee35060d7d261f47399a7d717256d0f237 - Author: Aaron Patterson - Date: 2019-05-10 06:36:30 +0900 - - unpin finalizers and update references - -commit c9b28fd7ae5c5a79a74afebd5b191cfd2f31a65f - Author: Nobuyoshi Nakada - Date: 2019-05-15 17:22:25 +0900 - - Allow --enable/--disable options to take an argument - - [Bug #15850] - -commit f54aa6c5b286b2b44bcdb1958fc9b1ebfce3559e - Author: aycabta - Date: 2019-05-15 15:52:12 +0900 - - Rename confused name Reline::IO with Reline::IOGate - -commit 0cc893d01d1c4a6b36f01a25587a121261601697 - Author: Aaron Patterson - Date: 2019-05-15 12:41:31 +0900 - - Static symbols can't be moved (they are not RValue) - - This is my mistake, I thought they were regular objects, but apparently - they are not. We don't need to pin them. - - Revert "Symbols can move so only cache IDs" - - This reverts commit 672ee5f6ed5a6840a3be9150b6721a5ee8f8766b. - -commit 672ee5f6ed5a6840a3be9150b6721a5ee8f8766b - Author: Aaron Patterson - Date: 2019-05-14 09:24:19 +0900 - - Symbols can move so only cache IDs - - IDs can't move, we need to use them to look up the symbol objects later. - -commit e8b929b9df3a686ab4e5e0a07fb813d0bedf508f - Author: git - Date: 2019-05-15 12:21:53 +0900 - - * expand tabs. - -commit c70ceb59928aa2c37befd6b03d73657ba5ece61c - Author: Aaron Patterson - Date: 2019-05-10 05:13:56 +0900 - - Add object packing strategies for compaction - - This commit adds an alternative packing strategy for compaction. - Instead of packing towards "most pinned" pages, we can pack towards - "most empty" pages. The idea is that we can double the heap size, then - pack all objects towards the empty side of the heap. This will ensure - maximum chaos for testing / verification. - -commit 46a479889cb5be2a7a24d6adbe54e822899d96cc - Author: git - Date: 2019-05-15 00:19:31 +0900 - - * 2019-05-15 - -commit 2ca537ba4b620d0a657b7da433df92f876974015 - Author: Aaron Patterson - Date: 2019-05-15 00:18:43 +0900 - - Fixing function name - - This function is used for marking / pinning vm stack values, so it - should have "vm" in the function name to be more clear. - -commit b5a3ec7f18761cbe30a90aa585b59ab05d926d2d - Author: aycabta - Date: 2019-05-14 17:15:49 +0900 - - Remove useless use of a variable in Reline::ANSI - -commit 80c968c571a65d140aefab4774fa87bf39966723 - Author: aycabta - Date: 2019-05-14 17:05:36 +0900 - - Rename Reline's test file name because of typo - -commit 4fe0961dca71406816e136a76f742adb1f0b9bb5 - Author: Takashi Kokubun - Date: 2019-05-14 16:45:18 +0900 - - Fix typo in debugged C source name - - I failed to collect any debug info in - https://app.wercker.com/ruby/ruby/runs/mjit-test1/5cda57fcab79a30008f195f6?step=5cda6a4e1090c4000800772e - - It seems that it's due to this typo. - -commit c754e979d3eeca51f1b13778f19f347df3da656e - Author: aycabta - Date: 2019-05-14 07:00:03 +0900 - - Test ext/readline and lib/reline by test/readline - -commit 07e7ae9ed78d0891a1c4755e2faf3c8d15d95102 - Author: aycabta - Date: 2019-05-14 05:34:20 +0900 - - Add an assertion message to test of Readline's class variables - -commit 1e65196b54644c5a8fe53c98643ab7e87dfb87c0 - Author: aycabta - Date: 2019-05-14 04:08:23 +0900 - - Check encoding when Readline completion - -commit 29dde62605d50a55933ec5d92bcb6f5f738c390b - Author: Nobuyoshi Nakada - Date: 2019-05-14 14:47:54 +0900 - - io/console: rb_str_cat_conv_enc_opts is not exported - -commit c1746708233bf90270dca1f698ca3616cc16922c - Author: Nobuyoshi Nakada - Date: 2019-05-14 14:39:08 +0900 - - io/console: fix up timeout on Windows - -commit 456586bb234915107da255d2944f620a7dd7048b - Author: Nobuyoshi Nakada - Date: 2019-05-14 14:21:46 +0900 - - io/console: support getch timeout on Windows - -commit 6d733565c2df1b34c7f0b7d43d97f80f714a64b9 - Author: Nobuyoshi Nakada - Date: 2019-05-14 14:19:15 +0900 - - io/console: support wide character input on Windows - -commit 602ef62ae693344aea70a85bb664bbbe93f20465 - Author: aycabta - Date: 2019-05-14 02:39:40 +0900 - - Rescue CompatibilityError for Readline's completion - -commit 5bab1304af25a843728dbcd2f3594913740aecb0 - Author: Urabe, Shyouhei - Date: 2019-05-14 11:44:20 +0900 - - fix visibility of SecureRandom.gen_random - - Aliasing a method preserves its visibility. These aliases turn - formerly-public methods into private. Should make them public - again. [Bug #15847] - -commit af1f3f131f6a82f5f06fe5b3adeb6f80cf86b941 - Author: aycabta - Date: 2019-05-14 01:10:15 +0900 - - Readline's class vars should be encoded as default_external - -commit 741321704fa1e4f180c853684a8ceaa6eff3b469 - Author: aycabta - Date: 2019-05-14 00:03:15 +0900 - - Remove unused variable in LineEditor - -commit 79ead821dd4880725c9c6bb9645b3fad71715c5b - Author: Aaron Patterson - Date: 2019-05-14 06:27:54 +0900 - - Add NaN / Infinity / MinusInfinity to mark list - - This prevents the constants from moving. - -commit a1ecf07dff7530f8f53fb456b2e38a8a039cb561 - Author: Aaron Patterson - Date: 2019-05-10 07:04:35 +0900 - - turn T_MOVED in to a linked list - -commit 66a7c92938638e3afceb1d92ae877376902a71a0 - Author: Aaron Patterson - Date: 2019-05-14 04:59:30 +0900 - - Don't run the compactor if GC is disabled - - GC is required for pinning / marking objects. If the compactor runs - without pinning everything, then it will blow up, so just return early - if the GC is disabled. - -commit 0215520beaa2be7a7bfb9aeb79bfc8c7ea7936b0 - Author: git - Date: 2019-05-14 00:32:58 +0900 - - * 2019-05-14 - -commit d2003a6d392b3b0054d7528e2e731584196aefad - Author: Nobuyoshi Nakada - Date: 2019-05-14 00:30:08 +0900 - - Symbol just represents a name - -commit 3b3b4a44e57dfe03ce3913009d69a33d6f6100be - Author: Nobuyoshi Nakada - Date: 2019-05-13 23:53:46 +0900 - - Update dependencies - -commit 082bbdc92e5d704c9fb2811d7c038f92aee77484 - Author: Hiroshi SHIBATA - Date: 2019-05-13 21:26:01 +0900 - - Update the canonical repository for racc. - -commit b42303b151534b4d0f2b7ccf7d4beeb27b0c2874 - Author: Kazuhiro NISHIYAMA - Date: 2019-05-13 21:14:52 +0900 - - Fix typos - -commit 2dc613815d2c4a69bfbcbf78d1b99aa52fbabf60 - Author: Étienne Barrié - Date: 2016-08-31 02:29:07 +0900 - - delegate.rb: don't look for methods on Kernel - - Instead, look for instance methods of Kernel. - Otherwise, instance methods of Module (which are methods of Kernel - itself) are mistakenly believed to exist, and it fails when calling - Kernel.instance_method(). - - Closes: https://github.com/ruby/ruby/pull/1422 - -commit 24964fff92cd89925d2169ad97a357a5bc57e3e1 - Author: aycabta - Date: 2019-05-13 04:22:08 +0900 - - Check that Reline exists on test - -commit 75f196ce75f35ecbab8186c9ada2f3a91160f8f9 - Author: aycabta - Date: 2019-05-13 03:29:18 +0900 - - Skip tests depend on Readline's special behaviors - -commit caef2ddaaf4a121272ad5c11d046ff4511c0f560 - Author: aycabta - Date: 2019-05-13 03:26:10 +0900 - - Implement Reline::HISTORY as an expanded Array - -commit c48778d64294c7871e2be09b0138d74e4d9d8551 - Author: aycabta - Date: 2019-05-13 03:24:15 +0900 - - Add attr_accessor for Reline's Config attrs - -commit ebb15cc6c17e33b030b511fff8b5722a8238ace5 - Author: aycabta - Date: 2019-05-13 02:33:29 +0900 - - Reline.completion_proc= should raise ArgumentError - - When the value is not Proc. - -commit 130ced9fb025da05bc97346e30f1e3a6c86ead2e - Author: aycabta - Date: 2019-05-13 02:31:42 +0900 - - Reline.completion_append_character= should be nil - - When unknown value comes. - -commit e467f920a38cabad9568ebd5cfd46d11de04afa8 - Author: aycabta - Date: 2019-05-13 02:30:53 +0900 - - Add Reline.special_prefixes as stub - -commit 5837290af1216eaadbee3204e40ef16931da2fdb - Author: aycabta - Date: 2019-05-13 02:26:31 +0900 - - Implement Reline's class methods for compatibility - - - insert_text - - redisplay - - line_buffer - - point - - point= - - vi_editing_mode - - emacs_editing_mode - - vi_editing_mode? - - emacs_editing_mode? - - get_screen_size - -commit c137f015ab2283e885168f983e36e4bd2c1aa29e - Author: aycabta - Date: 2019-05-13 02:20:20 +0900 - - Add Reline.pre_input_hook interface - -commit 9cb821b02486de87b322089302fec3a63cda7b81 - Author: aycabta - Date: 2019-05-13 02:14:48 +0900 - - Implement Reline.input= and Reline.output= - -commit bb56b899009828d567062fa5b9dd0af9f927cd32 - Author: aycabta - Date: 2019-05-13 01:51:05 +0900 - - Add ed_search_prev_history to Reline - -commit 559cad9f2d87721fda1ffbf2e39ce4b328a5b17f - Author: okuramasafumi - Date: 2019-05-04 21:54:25 +0900 - - Improve doc for Enumerable#include? and member? - - Existing doc for Enumerable#include? and member? has some problems. - * `IO.constants` is not commonly used, and only some know - that `SEEK_SET` is actually included in constants. - * `IO.constants` is actually an Array, not the example is not - appropriate for `Enumerable` module. - So in this commit, the old example is replaced with new one. - New example uses integer range, which is much simpler and easier to - understand. - - Closes: https://github.com/ruby/ruby/pull/2168 - -commit 33bce2585ffacd8cf762972da7ca7a99d804989f - Author: aycabta - Date: 2019-05-13 00:30:39 +0900 - - Use LineEditor#reset on test - -commit d3a702a3f1568f33e1c681bc40bae396a2f46d17 - Author: git - Date: 2019-05-13 00:23:03 +0900 - - * 2019-05-13 - -commit 0f45bd0584f1550e153babc339ad7671e2424d20 - Author: aycabta - Date: 2019-05-13 00:22:27 +0900 - - Split namespace of env-dependent I/O classes - -commit 11476e9902405b90b7493fed43f9fc2e6db9a32c - Author: aycabta - Date: 2019-05-12 23:20:51 +0900 - - Check INPUTRC env in Reline::Config - -commit aaaede8bcff278bd304092e1c74d39e8fbd4cef8 - Author: aycabta - Date: 2019-05-12 21:22:04 +0900 - - Change LineEditor instance in Reline to class var - -commit fc57e10569614caf5efc5b7fe18e6c76fafbb2e9 - Author: aycabta - Date: 2019-05-12 20:43:38 +0900 - - Revert "Add a test for em_capitol_case of Reline" - - This reverts commit b1767e56b158d8307412a0928a7ac2366541429d. - -commit b1767e56b158d8307412a0928a7ac2366541429d - Author: aycabta - Date: 2019-05-12 17:25:28 +0900 - - Add a test for em_capitol_case of Reline - -commit 3211a0a1e87d7ad622906b84de27f49a7d0d7578 - Author: git - Date: 2019-05-12 00:52:17 +0900 - - * 2019-05-12 - -commit e9bb30d47e5f07774cfbc69f0c8824ec921f6cda - Author: Nobuyoshi Nakada - Date: 2019-05-12 00:03:19 +0900 - - Expect no conflict in the parser - -commit 79931dddba67ad68886f65ba8562eb99507cee3a - Author: Nobuyoshi Nakada - Date: 2019-05-10 16:40:34 +0900 - - Propagate parser_params to rb_yytnamerr - -commit dc65e75101de94c0f88851d7d3eab56cb7232c7a - Author: Nobuyoshi Nakada - Date: 2019-05-10 17:28:20 +0900 - - Adjust indent - -commit aa52464efd558010f4fa5ef5de68d8f684b637aa - Author: Hiroshi SHIBATA - Date: 2019-05-10 21:45:15 +0900 - - 15f45ae4d1 and 56528da3e broke the darwin environment. - - Revert "Propagate parser_params to rb_yytnamerr" - - This reverts commit 15f45ae4d12f14714ab3021b60887d8c7bf4b095. - -commit d4c8577a14fa272bc9a3e68d4748fdf2f2cf7dee - Author: Hiroshi SHIBATA - Date: 2019-05-10 21:45:04 +0900 - - Revert "Fix for bison 2.3" - - This reverts commit 56528da3efb32bb773b22740c24450246b861e58. - -commit 56528da3efb32bb773b22740c24450246b861e58 - Author: Nobuyoshi Nakada - Date: 2019-05-10 16:58:51 +0900 - - Fix for bison 2.3 - -commit 15f45ae4d12f14714ab3021b60887d8c7bf4b095 - Author: Nobuyoshi Nakada - Date: 2019-05-10 16:40:34 +0900 - - Propagate parser_params to rb_yytnamerr - -commit 9a4d39b95ed60a00aec2ee3447931015254eb794 - Author: Nobuyoshi Nakada - Date: 2019-05-10 15:22:54 +0900 - - No longer svn & git-svn are used - -commit dbcc224f3883c810049ef620fac8a1b59bde2e69 - Author: Nobuyoshi Nakada - Date: 2019-05-10 09:01:08 +0900 - - Removed old names of internal methods - -commit a7b68e63c5dd9d366b0ddc17b16650560800f03a - Author: Nobuyoshi Nakada - Date: 2019-05-10 12:48:43 +0900 - - Suppress a warning in Psych&YAML with verbose mode - -commit c8a891d1aa2fd54172d313441811aef2838b7797 - Author: Kazuhiro NISHIYAMA - Date: 2019-05-10 12:21:25 +0900 - - Fix missing `\A` - -commit bef5829482ab410111911f2472442ff0dfbd3838 - Author: Takashi Kokubun - Date: 2019-05-10 11:54:15 +0900 - - Add one more retry for win32ole event matcher - - to fix - https://ci.appveyor.com/project/ruby/ruby/builds/24438615/job/yld1utsltxag9dr2 - -commit a85ed43294700ed0dd11d22b5c3d5d37d2b1809c - Author: Nobuyoshi Nakada - Date: 2019-05-10 08:59:08 +0900 - - Do not access the internal member - -commit c4d49749fbbb922f6102d3bf0729c861f9436a00 - Author: git - Date: 2019-05-10 04:28:19 +0900 - - * 2019-05-10 - -commit 5f05851ae37050c7031a080e405f8773089d7c14 - Author: Aaron Patterson - Date: 2019-05-10 04:27:44 +0900 - - add FROZEN to lldb debug output - -commit 025206d0dd29266771f166eb4f59609af602213a - Author: Nobuyoshi Nakada - Date: 2019-05-09 14:11:43 +0900 - - Fallback to an invalid branch name if no branch found - -commit eb84b33c86280a72aaeedae1e582045528c534b2 - Author: Nobuyoshi Nakada - Date: 2019-05-09 14:02:01 +0900 - - Search a branch name at a detached head - -commit c06ddfee878524168e4af07443217ed2f8d0954b - Author: Alan Wu - Date: 2019-05-08 22:44:41 +0900 - - str_duplicate: Don't share with a frozen shared string - - This is a follow up for 3f9562015e651735bfc2fdd14e8f6963b673e22a. - Before this commit, it was possible to create a shared string which - shares with another shared string by passing a frozen shared string - to `str_duplicate`. - - Such string looks like: - - ``` - -------- ----------------- - | root | ------ owns -----> | root's buffer | - -------- ----------------- - ^ ^ ^ - ----------- | | - | shared1 | ------ references ----- | - ----------- | - ^ | - ----------- | - | shared2 | ------ references --------- - ----------- - ``` - - This is bad news because `rb_fstring(shared2)` can make `shared1` - independent, which severs the reference from `shared1` to `root`: - - ```c - /* from fstr_update_callback() */ - str = str_new_frozen(rb_cString, shared2); /* can return shared1 */ - if (STR_SHARED_P(str)) { /* shared1 is also a shared string */ - str_make_independent(str); /* no frozen check */ - } - ``` - - If `shared1` was the only reference to `root`, then `root` can be - reclaimed by the GC, leaving `shared2` in a corrupted state: - - ``` - ----------- -------------------- - | shared1 | -------- owns --------> | shared1's buffer | - ----------- -------------------- - ^ - | - ----------- ------------------------- - | shared2 | ------ references ----> | root's buffer (freed) | - ----------- ------------------------- - ``` - - Here is a reproduction script for the situation this commit fixes. - - ```ruby - a = ('a' * 24).strip.freeze.strip - -a - p a - 4.times { GC.start } - p a - ``` - - - string.c (str_duplicate): always share with the root string when - the original is a shared string. - - test_rb_str_dup.rb: specifically test `rb_str_dup` to make - sure it does not try to share with a shared string. - - [Bug #15792] - - Closes: https://github.com/ruby/ruby/pull/2159 - -commit d802698d3e27a3cf091a56556df3562cc6ff996c - Author: Nobuyoshi Nakada - Date: 2019-05-09 10:01:31 +0900 - - Push the current (topic) branch to the remote upstream - -commit 4fabb744718ddbb2eb8f5f4a6ca3d47d8e770547 - Author: Nobuyoshi Nakada - Date: 2019-05-09 09:59:27 +0900 - - Show the commit command if dryrun - -commit f1486fea46cf36f1c936f5074a7251f29f9c1c5d - Author: NARUSE, Yui - Date: 2019-05-09 09:23:44 +0900 - - require 'stringio' - -commit 10723dd6cefb84e6a7d69b3bc3c1a74c345e4306 - Author: Nobuyoshi Nakada - Date: 2019-05-09 08:54:38 +0900 - - dryrun option is for `push`, not `git` - -commit dc405eb737c178016167c8e64bdf32d27c5455f0 - Author: Aaron Patterson - Date: 2019-05-09 07:55:35 +0900 - - Pin finalizer table - - Objects in the finalizer table stay pinned for now. In some cases, the - key could move which would cause a miss when removing the object from - the table (leading to a T_MOVED reference staying in the table). - -commit 4ff0911c796e80ad3740b1aea0199da698f4910b - Author: git - Date: 2019-05-09 07:26:32 +0900 - - * 2019-05-09 - -commit 8b12db6e197a5f4d57fb208b3f03b4b17733f1e4 - Author: git - Date: 2019-05-09 07:26:29 +0900 - - * expand tabs. - -commit c53f87943e53c96b86d50b496d2a410ff1245b4c - Author: Aaron Patterson - Date: 2019-05-09 07:19:59 +0900 - - Calling `obj_info` during sweep is unsafe - - `obj_info` will look at references of objects in some cases (for example - it will try to access path information on ISeq objects). But during the - sweep phase, if the referenced object is collected before `obj_info` is - called, then it could be a bad ref and a segv will occur. - - For example: - - A -> B - - Sweep phase: - - 1. obj_info(B) - 2. Sweep and free B - 3. obj_info(A); A tries to read B - 4. SEGV - - This commit simply removes the call to `obj_info` during the sweep - phase. - -commit a95ca6d5e9c1c7371f7324159840ac1e8c013125 - Author: Takashi Kokubun - Date: 2019-05-08 17:30:11 +0900 - - Trim MJIT output from TestHideSkip - - to prevent failure like - https://app.wercker.com/ruby/ruby/runs/mjit-test1/5cd28aa6ab79a30008ee819b?step=5cd28b2403f44600070db083 - with --jit-verbose=1. - -commit 29fcb37a8319c70a8524c13b525087ff63431676 - Author: Nobuyoshi Nakada - Date: 2019-05-08 16:59:37 +0900 - - Fixed a typo - -commit c54d5872fbd95c04ab77b4c1d6f95974ddac0090 - Author: Nobuyoshi Nakada - Date: 2019-05-08 16:55:59 +0900 - - Configure directories for headers and libraries automatically - - [EXPERIMENTAL] - -commit a1bab3d1a3bf36e113267c212d7fb36710859674 - Author: Takashi Kokubun - Date: 2019-05-08 16:51:37 +0900 - - Escape $@ in mjit-debug-on-fail - -commit e8e415b5347197666f4dd11d25df08881ddaa36f - Author: Kazuhiro NISHIYAMA - Date: 2019-05-08 16:44:08 +0900 - - Add workaround for `Permission denied` of `cp` - - see r67347 - recent log: https://travis-ci.org/ruby/ruby/jobs/529640417 - -commit b0965cc2d6fe284e0bf3154ed7a282a29287a20c - Author: Takashi Kokubun - Date: 2019-05-08 16:26:53 +0900 - - Add missing chmod for mjit-debug-on-fail - -commit 60869ebd005dc21e03e5f3cf9b517ff761781e80 - Author: Takashi Kokubun - Date: 2019-05-08 16:25:25 +0900 - - Wrap mjit-debug-on-fail for Wercker failure - - for debugging failure like - https://app.wercker.com/ruby/ruby/runs/mjit-test1/5cc98936ab79a30008eb86fa?step=5cc990d73d81fb0007bb04c3 - https://app.wercker.com/ruby/ruby/runs/mjit-test1/5cd18efa23fcb70008ddfd45?step=5cd1908603f4460007076c5a - -commit d736080c8b8731fe8e7be99893eea35b67cbbc0e - Author: Nobuyoshi Nakada - Date: 2019-05-08 15:45:13 +0900 - - Use ruby_bug guard - -commit a7cbb659566b4b9114cc2a00f036e7a88300b30d - Author: Takashi Kokubun - Date: 2019-05-08 15:13:33 +0900 - - Do not break rubyspec for old Ruby - - Fixing 7d805e67f3275aef066d77aa9c32bef715c362ed - -commit 229e5053a1ea9633489e296faafc34c9c51e7391 - Author: Takashi Kokubun - Date: 2019-05-08 14:59:18 +0900 - - Drop -fs from rubyspec to see test results easily - - Recently `ruby/spec on Ruby 2.4` seems stable. - -commit 6ec43d3d049f4736e6d0196497bfc9562001dd28 - Author: git - Date: 2019-05-08 11:18:20 +0900 - - * 2019-05-08 - -commit d56b0cb554dd75190b1d308e20f3f49f5f12571b - Author: Kazuhiro NISHIYAMA - Date: 2019-05-08 11:14:21 +0900 - - Use `start_with?(quoted)` instead of `[0] == char literal` - -commit efda52ba62361a0262d3775b8210fff85fb42247 - Author: Hiroshi SHIBATA - Date: 2019-05-07 23:30:39 +0900 - - Use cgit instead of svn. - -commit 45b125eca76e60482113575f1e71574fcbcc3b4c - Author: Hiroshi SHIBATA - Date: 2019-05-07 23:16:26 +0900 - - Update the canonical repository url. - -commit 5eb5613fef1c8a72df6843ffce9fc339f145948e - Author: Kazuhiro NISHIYAMA - Date: 2019-05-07 22:53:45 +0900 - - Recent commits of trunk do not have svn revision - -commit a47f598d77ac97f9fe89fe16aa8bcab4fd262c16 - Author: Lourens Naudé - Date: 2019-04-20 08:44:51 +0900 - - Reduce ONIG_NREGION from 10 to 4: power of 2 and testing revealed most pattern matches are less than or equal to 4 results - - Closes: https://github.com/ruby/ruby/pull/2135 - -commit 7d805e67f3275aef066d77aa9c32bef715c362ed - Author: Jean Boussier - Date: 2019-05-07 19:00:57 +0900 - - Avoid triggering autoload in Module#const_defined?(String) - - [Bug #15780] - -commit 6786fe44dcbb560d896bb9bb5baa9dc74677ce17 - Author: git - Date: 2019-05-07 17:36:10 +0900 - - * 2019-05-07 - -commit 4dc5d3c5dd43b4cc54517e604c16ecfc808e5481 - Author: Koichi Sasada - Date: 2019-05-07 14:06:25 +0900 - - add new debug_counters about is_pointer_to_heap(). - - is_pointer_to_heap() is used for conservative marking. To analyze - this function's behavior, introduce some debug_counters. - -commit 7e72ce0f734113e3e215a74b440092443e957d45 - Author: Nobuyoshi Nakada - Date: 2019-05-06 15:30:44 +0900 - - Load OptionParser defaults from XDG and Haiku standards - -commit 970a25b10415bc3735e6e3c165e167e6abc3d7f4 - Author: git - Date: 2019-05-06 11:08:03 +0900 - - * 2019-05-06 - -commit f1b0db2c70aa3120a557fd7553b98f96ecc62ade - Author: Nobuyoshi Nakada - Date: 2019-05-06 11:02:12 +0900 - - Revert "UTF-8 is one of byte based encodings" - - This reverts commit 5776ae347540ac19c40d146a3566a806cd176bf1. - - Mistaken `max` as `min`. - -commit 594a033ff0f6a22693b7b82b060e922c58dac8d0 - Author: Marcus Stollsteimer - Date: 2019-05-05 16:52:34 +0900 - - Improve description of Ruby in README - - Use improved description as suggested by Olivier Lacan (@olivierlacan), - see https://github.com/ruby/www.ruby-lang.org/pull/1888. - -commit 35ff4ed47fcdc14bbdd19540622cb04f86536c95 - Author: Marcus Stollsteimer - Date: 2019-05-05 16:51:40 +0900 - - Improve documentation for String#{dump,undump} - -commit bb4ac7a6506971dc34b5656f1a69aadc7299fcab - Author: Jeremy Evans - Date: 2019-05-05 13:43:22 +0900 - - Fix use of numbered parameter inside proc that is default value of optarg - - This allows cases such as: - - ```ruby - m ->(a = ->{@1}) {a} - m.call.call(1) - - m2 ->(a: ->{@1}) {a} - m2.call.call(2) - ``` - - Previously, this would cause a syntax error. - - [Bug#15789] - -commit 0c0ed1cee8aa8c538cc81f0daef26737eb2d5d0d - Author: Jeremy Evans - Date: 2019-05-05 13:43:22 +0900 - - Fix use of numbered parameter inside proc that is default value of optarg - - This allows cases such as: - - ```ruby - m ->(a = ->{@1}) {a} - m.call.call(1) - - m2 ->(a: ->{@1}) {a} - m2.call.call(2) - ``` - - Previously, this would cause a syntax error. - - [Bug#15789] - -commit b8f3be295b694964e88960c0228459b8aadd114a - Author: Jeremy Evans - Date: 2019-05-05 13:33:58 +0900 - - Fix a case where numbered parameters should not be allowed - - Because `proc{|| @1}` is a syntax error, the following should - also be syntax errors: - - ```ruby - proc { | - | @1} - ``` - - ```ruby - proc { |; a| @1 } - ``` - - This fixes both cases. - - [Bug #15825] - -commit 374c8f4ebab1a740990330c732b9de965c5e8d10 - Author: Nobuyoshi Nakada - Date: 2019-05-05 14:32:45 +0900 - - Fixed about ARGF.lineno - - [Bug #15823] - -commit 84e71e9fc1965d00013fea1bea1ce22aa7e7e619 - Author: git - Date: 2019-05-05 11:13:58 +0900 - - * 2019-05-05 - -commit f1b52d3a8889dbffddadd3e3ccf05fb9a90b18ee - Author: git - Date: 2019-05-05 11:13:54 +0900 - - * expand tabs. - -commit ff21e75d32e27a2b362ed53fb471828876b54418 - Author: Nobuyoshi Nakada - Date: 2018-07-28 00:07:56 +0900 - - parse.y: duplicated when clause warning - - * parse.y (case_args): moved "duplicated when clause" warning from - compile phase, so that `ruby -wc` shows them. - -commit 848edb03f8d3e5f5e97d3ea45fec592d87d73b05 - Author: Masatoshi SEKI - Date: 2019-05-04 22:52:25 +0900 - - ignore test_RangeError - -commit a380f4c2b7310c85635958c751ac78d7796bc8d2 - Author: Marcus Stollsteimer - Date: 2019-05-04 22:31:21 +0900 - - Fix typos, grammar, and style - -commit 8bf3040e301ffe82ab02df58c89bd1e55bb0980b - Author: Marcus Stollsteimer - Date: 2019-05-04 22:02:20 +0900 - - Fix grammar - -commit b9e52db28398c5a792ae16730243af764c869bcd - Author: Nobuyoshi Nakada - Date: 2019-05-04 22:00:22 +0900 - - Add a pathologic check - -commit 7d30cd47c4e9e27461d3906e5740daa02dac22ca - Author: git - Date: 2019-05-04 19:29:14 +0900 - - * remove trailing spaces. - -commit 8980b53a48b1f55e09c5223008225e6bfa765405 - Author: Masatoshi SEKI - Date: 2019-05-04 19:28:57 +0900 - - add DRb::WeakIdConv (Bug #15711) - -commit b72623012d74abdb06210153ed48c9e2fa075bbd - Author: Hiroshi SHIBATA - Date: 2019-05-04 06:23:25 +0900 - - Update broken URL in Float documentation. - - [Misc #15775][ruby-core:92332] - -commit a3cbce7822c680e62d000817c36fbdb5f62997d8 - Author: git - Date: 2019-05-04 00:00:01 +0900 - - * 2019-05-04 - -commit 04fd98d5963d45f69ff8239bd02392e550d67191 - Author: git - Date: 2019-05-03 23:59:58 +0900 - - * expand tabs. - -commit 77440e949bd69e6ed86d70026d238521adb8319a - Author: Nobuyoshi Nakada - Date: 2019-05-03 22:37:51 +0900 - - Improve performance of case-conversion methods - -commit 1f349ea297738f3a2c4914166746cea0e5ada031 - Author: Marcus Stollsteimer - Date: 2019-05-03 23:12:22 +0900 - - Fix typo - -commit 5776ae347540ac19c40d146a3566a806cd176bf1 - Author: Nobuyoshi Nakada - Date: 2019-05-03 15:33:59 +0900 - - UTF-8 is one of byte based encodings - -commit 58cd4b7bde1f03ddce41fdc8f30ebe3c75706e75 - Author: git - Date: 2019-05-03 06:26:18 +0900 - - * 2019-05-03 - -commit 7d02bab0b080bbf5f7dd3f29de57a52677e39a51 - Author: NAKAMURA Usaku - Date: 2019-05-03 06:24:57 +0900 - - Nil cannot and should not convert to a string - -commit 5c87bb3b90a6d77089314ed0e62e31654621efa9 - Author: git - Date: 2019-05-02 22:44:43 +0900 - - * expand tabs. - -commit 5e23b1138f16af0defb184d7deeffadfd2ce3c04 - Author: Nobuyoshi Nakada - Date: 2019-05-02 22:44:20 +0900 - - Fix potential memory leak - -commit d6efb386bab9ee3839cf17945ad810b03f28f129 - Author: git - Date: 2019-05-02 14:47:26 +0900 - - * 2019-05-02 - -commit a1ae478a31ffe4fd21c17f785f1827c031281be8 - Author: Kazuhiro NISHIYAMA - Date: 2019-05-02 14:44:47 +0900 - - Fix a typo - -commit 71952440adcbdd1ff51aea519bc14e8965b84ebf - Author: Nobuyoshi Nakada - Date: 2019-05-01 20:55:08 +0900 - - Silence a (probable) debug print - -commit 474af9ee9a4804d052e1e40503e1b6491d00a969 - Author: Nobuyoshi Nakada - Date: 2019-05-01 20:47:00 +0900 - - No last commit when up-to-date - - Get the last commit title from the upstream to the head, so that - no `last_commit` line will be shown when the branch is up to date - with the upstream. - -commit 2f0f9115d314d0fecbd0a9f5b5a6c59c611fa5e7 - Author: Nobuyoshi Nakada - Date: 2019-05-01 20:26:35 +0900 - - Ignore ChangeLog - -commit dcb6a6ae3e2b8a3e298e7f0d4a3e7f8ff102a30e - Author: NAKAMURA Usaku - Date: 2019-05-01 17:38:09 +0900 - - Windows simply causes an error to open invalid path - -commit fc3e80cf6d8847fd5a2313dd7e2079d268f1ec84 - Author: NARUSE, Yui - Date: 2019-05-01 01:06:13 +0900 - - guard include with has_feature - - clang's sanitizer/msan_interface.h has fallback macros. - It causes redefinition of __msan_unpoison(). - -commit 3de03544ff9fba80039460f2e2cd864010bf8cba - Author: aycabta - Date: 2019-05-01 00:45:54 +0900 - - Add Reline.delete_text that raises NotImplementedError - -commit c06821161ae9dcfebeabd30ec7ab598ee70c89ce - Author: git - Date: 2019-05-01 00:03:58 +0900 - - * 2019-05-01 - -commit 4e88e8692844a2a317bc19481f0f2601b6f00955 - Author: manga_osyo - Date: 2019-04-30 23:18:44 +0900 - - Add exception support in `Range#first`. - - Closes: https://github.com/ruby/ruby/pull/2163 - -commit 0eedec68673fa74960dec80b26659263ec3b6a9a - Author: Kazuhiro NISHIYAMA - Date: 2019-04-30 22:35:38 +0900 - - Change Accept-Encoding from `*` to `identity` - - When `Accept-Encoding` is `*`, - http://www.unicode.org/Public/12.1.0/ucd/ returns gzipped content now. - So set `identity`. - -commit dd942cd5b31947f6a514d4a916971011fbabc089 - Author: NAKAMURA Usaku - Date: 2019-04-30 22:24:45 +0900 - - Use redirect keyword arguments instead of ">" - -commit 50872f4a15a2070fa007c1d85fcf44802e4bcc0b - Author: Nobuyoshi Nakada - Date: 2019-04-30 22:23:20 +0900 - - Use array mode of `system` instead of `shellescape` - - `&.` is not available in ruby 2.0. - -commit df3de409325d1e95d375a736d2bc9c45d47ec317 - Author: Nobuyoshi Nakada - Date: 2019-04-30 22:13:47 +0900 - - String#[] with index to extract matched substring safely - -commit 1dd94dfba3ed3ffd087d1ba93154cb922033a37c - Author: NAKAMURA Usaku - Date: 2019-04-30 21:51:03 +0900 - - Must use IO::NULL instead of platform dependent filename - -commit 830e40ee05681a9230d523c1ca8b4bd3238fcfbf - Author: NAKAMURA Usaku - Date: 2019-04-30 19:45:44 +0900 - - Skip on Windows now when using reline because it causes hang of whole tests - -commit 5a83a1d55454d42cbf5b0bcc9df9c9c83e3a39d7 - Author: NAKAMURA Usaku - Date: 2019-04-30 18:01:17 +0900 - - **Must** use IO::NULL for null device - -commit c222f4d31fc5f0566fa969d8fbb948f8841daf94 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-30 16:18:45 +0900 - - `from` is not nil but `""` on shallow clone [ci skip] - -commit 151b7d72bd26f9676c92b69f6b4710af3cb7ea65 - Author: NAKAMURA Usaku - Date: 2019-04-30 15:02:03 +0900 - - Forgotten to remove - -commit 94b740b2499242e1aca67f7bbf595e75e63abc40 - Author: aycabta - Date: 2019-04-28 03:41:06 +0900 - - Use Ripper for IRB - - The debug option of IRB is deleted because it's just for IRB's pure Ruby - parser. - -commit 567cb1ae1d25b837bed6e91af1418c6a4f25cc90 - Author: aycabta - Date: 2019-04-30 12:52:48 +0900 - - Use Encoding::UTF_8 if RELINE_TEST_ENCODING doesn't exist - -commit 3be5907e734f9c88af577bb0b0e8ec2d66b7b2f7 - Author: aycabta - Date: 2019-04-30 12:47:40 +0900 - - Move Win32API to Reline::Win32API - -commit 319eee0f4a13d29a82eeffa348b8a3b5685e2f6e - Author: aycabta - Date: 2019-04-30 12:27:23 +0900 - - Use Encoding::UTF_8 if Encoding.default_external is Encoding::IBM437 - -commit 17350c7e5534c8678097d70698fe08614a6c3997 - Author: aycabta - Date: 2019-04-27 14:53:09 +0900 - - Add Reline as a fallback library for Readline - - * lib/reine.rb, lib/reline/*: Reline is a readline stdlib compatible - library. - * lib/readline.rb: Readline uses a fallback to Reline when ext/readline - doesn't exist. - * tool/sync_default_gems.rb: add ruby/reline as a default gem. - * appveyor.yml: add "set RELINE_TEST_ENCODING=Windows-31J" for test suit - of Reline, and add "--exclude readline" to "nmake test-all" on Visual - Studio builds because of strange behavior. - * spec/ruby/library/readline/spec_helper.rb: skip Reline as with - RbReadline. - -commit eb45ba61160dbae412407f232fe9b3252eb99362 - Author: NAKAMURA Usaku - Date: 2019-04-30 04:09:25 +0900 - - Skip the spec on Windows because RUBY_EXE is RUNRUBY and it calls ruby as grandchild - -commit 320f0aba49d17737ef965fc8c5f565dad96f514c - Author: NAKAMURA Usaku - Date: 2019-04-30 04:09:07 +0900 - - Revert previous commit; it was meaningless - -commit ae3a9862048135f846f694b98031cf264889580f - Author: git - Date: 2019-04-30 03:33:51 +0900 - - * expand tabs. - -commit 09022b6d70ad16737964e58db039aac00a1488ea - Author: NAKAMURA Usaku - Date: 2019-04-30 03:32:41 +0900 - - Use CreateToolhelp32Snapshot instead of NtQueryInformationProcess to get ppid on Windows - - Try to get rid of a spec error. - -commit b7d9ec8caa4fb9d279df22f82fe28777a98fa37e - Author: git - Date: 2019-04-30 00:28:44 +0900 - - * 2019-04-30 - -commit 7a34d8902ad93c0e487623cd99e6c23296a7a768 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-30 00:28:00 +0900 - - Merge .time - -commit 040b37f8b4b8d0a4931ee9b7c15b57f9f918639a - Author: Kazuhiro NISHIYAMA - Date: 2019-04-29 23:02:18 +0900 - - Use 10 chars as RUBY_REVISION in snapshot too - -commit f95f07dad30a80b7e3eb4b2838ca4311d2822764 - Author: Urabe, Shyouhei - Date: 2019-04-26 18:59:26 +0900 - - avoid passing NULL to memset - - `GC::Profiler.enable; GC::Profiler.clear` tries to clear - objspace->profile.records but it has never been allocated before. - Thus the MEMCPY took NULL argument before this changeset. - - The objspace->profile.records is allocated appropriately elsewhere. - Why not juts free it if any? That should work. - -commit 34e1079aef81d108890fb167d7df69960e994ff5 - Author: Urabe, Shyouhei - Date: 2019-04-26 18:37:21 +0900 - - glibc says memcpy cannot take NULL - - At least since 2004, glibc's annotates memcpy as - __attribute__((__nonnull__)). This basedir is passed to it. When - LOAD_RELATIVE is not defined and MJIT_SEARCH_BUILD_DIR is not set, - this variable is never updated. Should initialize with meaningful - default value. - -commit e7b18ca6d9b45b7e71694557b9fab8152c62c1ed - Author: Urabe, Shyouhei - Date: 2019-04-26 18:01:24 +0900 - - glibc says memcpy cannot take NULL - - At least since 2004, glibc's annotates memcpy as - __attribute__((__nonnull__)). On the other hand the argv here, - which is passed from rb_funcallv, may be NULL. Practically this - should never be a serious problem but for maximum safety, let's - avoid passing NULL here. - -commit a116f04ccabe8ce7d0e7312ef0f55f6a2cdd178e - Author: Urabe, Shyouhei - Date: 2019-04-26 17:28:43 +0900 - - suppress some UBSAN sanitizers - - They are not "undefined". UBSAN reports them because it thinks - they are "often unintentional". We see the report rather annoying. - -commit f4c68640d679c3786c19f3503c76112312636c37 - Author: Urabe, Shyouhei - Date: 2019-04-26 17:01:20 +0900 - - this variable is not guaranteed aligned - - No problem for unaligned-ness because we never dereference. - -commit 7c0f513e97828dd8274695a49bde92c326b208cb - Author: Urabe, Shyouhei - Date: 2019-04-26 17:00:58 +0900 - - fix typo - -commit 6a3165e19dfa21babfb2ef1f1c20c9930410b0ec - Author: Nobuyoshi Nakada - Date: 2019-04-29 18:32:21 +0900 - - Fixed HERETERM_LENGTH_MAX on IL32LLP64 - -commit c7f780c155ac553aa026e6caf4b1c88ff988adde - Author: Nobuyoshi Nakada - Date: 2019-04-29 15:57:40 +0900 - - Refactored rb_strterm_heredoc_t - -commit 1432471a759dc0cbc80c53766894dba45e6da887 - Author: Nobuyoshi Nakada - Date: 2019-04-29 13:45:32 +0900 - - Disallow also CR in here-doc identifier - - * parse.y (heredoc_identifier): CR in here-document identifier - might or might not result in a syntax error, by the EOL code. - make a syntax error regardless of the EOL code. - -commit 23375c8b81e07644517e5ad985b2fbf5e1b5d545 - Author: Nobuyoshi Nakada - Date: 2019-04-29 13:42:50 +0900 - - Make only `mesg` can be assigned with default `fname` - -commit 330b376133e00ae418bcf01e641e127df01fbc28 - Author: Nobuyoshi Nakada - Date: 2019-04-29 00:24:26 +0900 - - parse.y: fix here-doc identifier with newline - - * parse.y (heredoc_identifier): quoted here-document identifier - must end within the same line. - - the only corner case that here-document identifier can contain a - newline is that the closing quote is placed at the beginning of - the next line, and has been warned since 2.4. - - ```ruby - <<"EOS - " # warning: here document identifier ends with a newline - EOS - ``` - -commit 69cad44facc4dedfe181c6a669b63fb9da2aa673 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-29 12:19:07 +0900 - - Reduce debug output - - because I found machine clock problem - see r67347 - https://travis-ci.org/ruby/ruby/jobs/525784924 - https://travis-ci.community/t/mtime-of-source-codes-are-sometimes-newer-than-build-time-clock-skew/3215 - -commit 812a438145a604e1361d4bf07cc3d81452cfb0ec - Author: Nobuyoshi Nakada - Date: 2019-04-29 11:31:18 +0900 - - iseq.c: removed unnecessary zero-fills - -commit 6033423d6882546e132a450ab9efc66507879594 - Author: Nobuyoshi Nakada - Date: 2019-04-29 10:11:44 +0900 - - NEWS: Moved "Integer#[] with range" to "Core classes updates" - -commit daa0874056f602cbc99cab5ddfe3e590194f9bca - Author: Benoit Daloze - Date: 2019-04-29 06:29:10 +0900 - - CLOCK_MONOTONIC_RAW_APPROX seems less precise than advertised on macOS - - * https://travis-ci.org/ruby/ruby/builds/525651487 - -commit 79671ec57e59091260a0bc3d40a31d31d9c72a94 - Author: Benoit Daloze - Date: 2019-04-29 06:20:11 +0900 - - Update to ruby/spec@7de852d - -commit 994833085ae06afbe94d30ab183d80e0234fbe14 - Author: Benoit Daloze - Date: 2019-04-29 06:20:09 +0900 - - Update to ruby/mspec@c25d63d - -commit bbb93608a385242da93bc5256a90a6376981d86f - Author: Benoit Daloze - Date: 2019-04-29 06:16:03 +0900 - - Move the check for CentOS CLOCK_MONOTONIC_RAW next to others - - * Fixes "No behavior expectation was found in the example" - * https://rubyci.org/logs/rubyci.s3.amazonaws.com/centos6/ruby-trunk/log/20190428T093004Z.fail.html.gz - -commit dfc0eeb0cfb22efde6369f275d3a28c29144d9a6 - Author: Takashi Kokubun - Date: 2019-04-29 01:22:28 +0900 - - Fully support Git in tool/merger.rb - - as both backport source repository and backport destination repository. - -commit f0776e3203b55b698971a2d2b0acc48cb3a0940e - Author: Kazuhiro NISHIYAMA - Date: 2019-04-29 01:23:09 +0900 - - Add more debug print for random CI failure on osx Travis - - and remove `git status` with noisy rvm trace log - - see r67347 - -commit 50cbb21ba533f67e29d7da0975ba186f9e3da93f - Author: Yusuke Endoh - Date: 2019-04-29 01:17:27 +0900 - - Add "Integer#[] with range" to NEWS - -commit 75260d36b591a6c9c6f183648434b3c1026e1cd8 - Author: git - Date: 2019-04-29 01:00:20 +0900 - - * remove trailing spaces. - -commit 991e32681eac3c675ef796f5691a6786e99c3fb0 - Author: Takashi Kokubun - Date: 2019-04-29 00:57:34 +0900 - - tool/merger.rb: Avoid making too-deep indentation - - because it's hard to understand what's going on when indentation depth - is too deep. - - Sorry for polluting git blame, but most of the Merger's lines are - updated recently anyway. - -commit 2dddd370a17a33177f0898986ea2b37eabd07f31 - Author: Takashi Kokubun - Date: 2019-04-29 00:53:06 +0900 - - Support `tool/merger.rb removetag` under Git - - repository. - -commit bbad0d05b3e42909da297db06d632d2102122f65 - Author: git - Date: 2019-04-29 00:22:48 +0900 - - * 2019-04-29 - -commit fad2825e42d80145ca7047f840b9b0cea00d0ca9 - Author: Takashi Kokubun - Date: 2019-04-28 23:51:43 +0900 - - Support `tool/merger.rb tag` under Git repository - -commit 555d1dda71a3cd1ac954c4d41d523562721cde8d - Author: git - Date: 2019-04-28 23:42:46 +0900 - - * expand tabs. - -commit 6bedbf462544a7917fdc8d8c44276079a6e156cf - Author: Yusuke Endoh - Date: 2019-04-28 23:24:09 +0900 - - numeric.c: Extend Integer#[] to support range arguments - - ```` - 0b01001101[2, 4] #=> 0b0011 - 0b01001100[2..5] #=> 0b0011 - 0b01001100[2...6] #=> 0b0011 - ^^^^ - ```` - - [Feature #8842] - -commit cb550246136b90a63b4f75f5e7cfaccb9da08eda - Author: Yusuke Endoh - Date: 2019-04-28 23:23:00 +0900 - - test/ruby/test_integer.rb: Add a sane test for Integer#[] - -commit 3bc810334c776bb68bddeeced9bd91f918c8581f - Author: Takashi Kokubun - Date: 2019-04-28 22:36:23 +0900 - - Support `tool/merger.rb up` under Git repository - - updating indentation (and slightly changing styles) for areas already - supporting Git. - -commit d906dd87b049e84fc9a17b89a74fdd52d40c5fbb - Author: Benoit Daloze - Date: 2019-04-28 22:23:12 +0900 - - Skip CLOCK_UPTIME_RAW_APPROX since it seems less precise than advertised on macOS - - * See https://travis-ci.org/ruby/ruby/jobs/525595997 - -commit 392d84b4900eb954fdfcf11c2a63dd4c029996f4 - Author: Takashi Kokubun - Date: 2019-04-28 22:14:55 +0900 - - Fix wrong svn options - - for SVN as a backport source. - - This was a mistake in de5378233b2ff5434f024ac66285e699794a321d... - -commit 1c8cefca310d12cf4ae475eeacec73bf1f5ae7c3 - Author: Takashi Kokubun - Date: 2019-04-28 22:02:09 +0900 - - Stop using global variable for repos - - to avoid having impact from other places. - -commit 9426da83c60eca84197e9fcf67dc9c7c12ad3d2e - Author: Benoit Daloze - Date: 2019-04-28 21:59:14 +0900 - - Exclude failing Process.clock_getres specs on AIX - -commit a27f7e499c66e5f09d5159c33c72834f14ec5aac - Author: Benoit Daloze - Date: 2019-04-28 21:54:42 +0900 - - Add missing platform guard - -commit 9a0dbb341442fc0d203a5cd6fb46250e429e9188 - Author: Benoit Daloze - Date: 2019-04-28 21:52:55 +0900 - - Skip problematic Process.clock_getres specs on ARM - - * https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-trunk/log/20190428T051708Z.fail.html.gz - * https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-ad7f67/ruby-trunk/log/20190428T045405Z.fail.html.gz - -commit cb8eb37377289a3874742af290bcd32dd09910bf - Author: Takashi Kokubun - Date: 2019-04-28 21:53:57 +0900 - - Now tool/merger.rb may use Git [ci skip] - -commit f2d7ba6a7473b408002c90b77b021fc837f93561 - Author: Takashi Kokubun - Date: 2019-04-28 21:51:35 +0900 - - make sync-default-gems GEM=irb - - from https://github.com/ruby/irb/commit/e8e79d569ed59fe4ed4fbca968917ce799f02a5e. - - This colorizes Range object on IRB inspect. - -commit 13abf5519a8c00ac2b05409e667c58f05c75123a - Author: Benoit Daloze - Date: 2019-04-28 21:39:37 +0900 - - Workaround a CentOS bug in Process.clock_getres specs - -commit 14965c5f4b0160d22febd94f258b2ba1491a585e - Author: Takashi Kokubun - Date: 2019-04-28 21:40:37 +0900 - - Drop SVN-specific method from Merger module - - to clarify it's not needed for Git support. - -commit fcb18755135982320900c45baa45bd4ba0029e07 - Author: Takashi Kokubun - Date: 2019-04-28 21:16:20 +0900 - - Make Merger.version private to the module - - because it's not used outside the Module. - -commit 16695af0ef13c709846a18ae9d186642445fae5f - Author: Benoit Daloze - Date: 2019-04-28 21:36:03 +0900 - - Refactor logic in Process.clock_gettime spec - -commit fc37a045a0b2cf02a77109eb87b01d8b82d5c15d - Author: Benoit Daloze - Date: 2019-04-28 21:35:17 +0900 - - Fix typo in spec - -commit d835ed4df1ae2bf317db41a8009b1fad143c94f1 - Author: Takashi Kokubun - Date: 2019-04-28 21:02:01 +0900 - - Define merger.rb's methods under Merger namespace - - so that we do not monkey-patch all classes by defining methods on - top-level (Object class). - - Not arranging indentation in it to keep `git blame` for now. - -commit 8711f77a26078b80eb954e0bc873418cf733eff5 - Author: Takashi Kokubun - Date: 2019-04-28 20:33:12 +0900 - - make sync-default-gems GEM=irb - - from https://github.com/ruby/irb/commit/96f05e726879e9858eb015c8d043c9f52b864ff9. - - Just syncing newer test changes so that conflicts do not happen when trunk is - modified and we need to backport that to ruby/irb. - -commit 588f212c2665555f76c68e0954332619bff60418 - Author: Takashi Kokubun - Date: 2019-04-28 20:18:44 +0900 - - make sync-default-gems GEM=irb - - from https://github.com/ruby/irb/commit/44301d382794d91e2caa16dd4efe62439e0041d8. - - This includes some fixes for string interpolation highlight fixes. - -commit 4d8ad48f7dc610f58150daf92a859ed53fdd3a6c - Author: Takashi Kokubun - Date: 2019-04-28 19:33:41 +0900 - - Support git as redmine-backporter's done destination - -commit 5d24fba544352a32fdd4e06fa25dc0625c6860f1 - Author: Benoit Daloze - Date: 2019-04-28 19:37:29 +0900 - - Skip the entire Process.clock_getres spec on FreeBSD - - * Clocks don't match the reported precision. - * https://rubyci.org/logs/rubyci.s3.amazonaws.com/freebsd11zfs/ruby-trunk/log/20190428T093003Z.fail.html.gz - -commit f40458e9dda3298df12f5b602f02afd4dfae334b - Author: Takashi Kokubun - Date: 2019-04-28 14:10:08 +0900 - - Specify VM_CHECK_MODE explicitly - - In my understanding, `VM_CHECK_MODE` should be Integer and I'm not sure - how `-DVM_CHECK_MODE` would behave. To make the matters simple, let me - pass the mode explicitly. - -commit 766293fc490b6812739e837554dd5d8e703d352c - Author: Takashi Kokubun - Date: 2019-04-28 14:04:48 +0900 - - Ruby 2.3 is EOL - -commit 4c8f1078985613ea1015fe1a1cdbe9944528cb35 - Author: Nobuyoshi Nakada - Date: 2019-04-28 12:16:40 +0900 - - Make the range to export as changelog optional - - * `from` is defaulted to the beginning of the branch inclusively, - otherwise the given revision is excluded as the previous. - - * `to` is defaulted to the head. - -commit d72bd190a80e6b8258ca923b606175754a210b6d - Author: Nobuyoshi Nakada - Date: 2019-04-28 12:11:59 +0900 - - Added VCS::SVN#branch_beginning - -commit b7669705270478f14d02f15b51b74eeec52a49da - Author: Nobuyoshi Nakada - Date: 2019-04-28 12:04:15 +0900 - - Search the beginning revision more strictly a bit - -commit fdcd640507ab2600dfa96f4962eba2702acfc264 - Author: Nobuyoshi Nakada - Date: 2019-04-28 11:35:14 +0900 - - Makefiles need to be indented by tabs - -commit 5a53682d6dede337b81f944edc76b1a5e1243adc - Author: Nobuyoshi Nakada - Date: 2019-04-28 11:31:36 +0900 - - Removed `--reverse` option - - It is nonsense with `-n1` option. - -commit d0a54673202458455244f79ed212a97727f0c7c7 - Author: David Rodríguez - Date: 2019-04-26 20:26:21 +0900 - - Update rubygems with latest upstream changes - - Closes: https://github.com/ruby/ruby/pull/2154 - -commit a15f7dd1fb1148c3d586238ee6907875f2e40379 - Author: Jeremy Evans - Date: 2019-04-28 02:05:26 +0900 - - Always mark the string returned by File.realpath as tainted - - This string can include elements that were not in either string - passed to File.realpath, even if one of the strings is an - absolute path, due to symlinks: - - ```ruby - Dir.mkdir('b') unless File.directory?('b') - File.write('b/a', '') unless File.file?('b/a') - File.symlink('b', 'c') unless File.symlink?('c') - path = File.realpath('c/a'.untaint, Dir.pwd.untaint) - path # "/home/testr/ruby/b/a" - path.tainted? # should be true, as 'b' comes from file system - ``` - - [Bug #15803] - -commit d47cd75b4fead0cfc5fdb59c48d5d822ffe3382d - Author: Nobuyoshi Nakada - Date: 2019-04-28 10:41:11 +0900 - - Chomp a newline from the branch name - -commit 7790b610b8c11ae987e0f9a936418a7a34a8af0b - Author: Nobuyoshi Nakada - Date: 2019-04-28 02:00:39 +0900 - - Shorten git revision name without "r" prefix in snapshot - -commit 2c283655a650a7e97aaf36992d1d60c314403b7a - Author: Benoit Daloze - Date: 2019-04-28 06:43:58 +0900 - - Some Solaris versions seem to only provide millisecond accuracy for CLOCK_REALTIME - - * https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11x/ruby-trunk/log/20190427T182404Z.fail.html.gz - -commit b7c301569df2eaee3a2785e5ec56f8c53fbc9fea - Author: Benoit Daloze - Date: 2019-04-28 06:42:31 +0900 - - Skip clock_getres spec on BSD - - * clock_getres() seems to be incorrect on BSD: - https://rubyci.org/logs/rubyci.s3.amazonaws.com/freebsd11zfs/ruby-trunk/log/20190427T183003Z.fail.html.gz - -commit 0d227d1ce6aa01b0f6db06bbbf828acb962d4734 - Author: Benoit Daloze - Date: 2019-04-28 02:42:54 +0900 - - Try to more accurately reflect MRI's logic in specs for finding the home if $HOME is unset - -commit 5b93321064e83ea180492469071189372e8289e8 - Author: Benoit Daloze - Date: 2019-04-28 02:23:45 +0900 - - Update to ruby/spec@14e6148 - -commit 14f004d3962f799ae2caca7d6a82f508e51270bc - Author: Takashi Kokubun - Date: 2019-04-28 02:17:49 +0900 - - Isolate test_gc_compact on AppVeyor mswin as well - - because it makes the CI unstable - https://ci.appveyor.com/project/ruby/ruby/builds/24143365/job/yrx7b8ce2qg9wro2 - -commit ed4f33187976ebbbe4d3eb83dceea1992e9f6a16 - Author: git - Date: 2019-04-28 02:02:30 +0900 - - * remove trailing spaces. - -commit cae0b73214d721539e335babf02283799198a983 - Author: Takashi Kokubun - Date: 2019-04-28 02:01:01 +0900 - - make sync-default-gems GEM=irb - - from https://github.com/ruby/irb/commit/89e9add06da3fd5f9ce91a2f5fa0b0190aa5d42f. - - This adds syntax highlight support for Module on inspect. - - In addition to that, I'm adding a trailing space in test_color.rb for - testing ruby-commit-hook's auto-style. - -commit a1b4816759418ca8fe510e8739622fc5d77ab0f0 - Author: Benoit Daloze - Date: 2019-04-28 01:53:23 +0900 - - Update to ruby/spec@15c9619 - -commit 00c33d9c232ed1a79eda17acd7231ac93caa162b - Author: Benoit Daloze - Date: 2019-04-28 01:53:20 +0900 - - Update to ruby/mspec@18c5a7d - -commit 80be9e986b81d1e50433005f6b91f4cd0c1c0939 - Author: git - Date: 2019-04-28 01:25:10 +0900 - - * 2019-04-28 - -commit bb6036946ef7337c8bef6380ba394c082d5452cb - Author: Nobuyoshi Nakada - Date: 2019-04-28 00:30:16 +0900 - - Reduce matz's work, let git do it instead - -commit 87d2a2df1b40016401a2f6dfc98e46880bbd18fd - Author: Benoit Daloze - Date: 2019-04-27 23:43:28 +0900 - - Improve documentation of Array.try_convert - - * Mostly to try the new git repository. - -commit 429fdf3de22690371b98590c4c1d6a53adbbfc26 - Author: Nobuyoshi Nakada - Date: 2019-04-27 23:27:12 +0900 - - Added ChangeLog marker for the beginning of 2.7.0 - -commit db614dbf6d8c7f6e9ed315cd979500b131a5cc26 - Author: Nobuyoshi Nakada - Date: 2019-04-27 23:25:48 +0900 - - Support git-log format ChangeLog - -commit 2a4625115a2020dd55f952bdb176ab30405e19b9 - Author: Nobuyoshi Nakada - Date: 2019-04-27 23:14:59 +0900 - - Separate format_changelog - - VCS::GITSVN#format_changelog generates previous format, similar to - svn-log, and VCS::GIT#format_changelog stores just git-log as-is - for now. - -commit 7875c42f64e8656eb18262da65816a72375bf5f2 - Author: Nobuyoshi Nakada - Date: 2019-04-27 23:13:03 +0900 - - Override log format to parse for ChangeLog - -commit 6f8ac2cb28f99a4b2588c59ec44eff6ed38c4d3b - Author: Nobuyoshi Nakada - Date: 2019-04-27 23:08:50 +0900 - - Include the beginning commit in ChangeLog - -commit af1e487e9bb763b939dc6704c9a343c9eafa1637 - Author: Nobuyoshi Nakada - Date: 2019-04-27 23:05:05 +0900 - - Updated marked commits for ChangeLog - -commit 3067370f611b16955a8064116092e5f0f9f126a7 - Author: Takashi Kokubun - Date: 2019-04-27 22:21:34 +0900 - - Retry downloads more for unicode outage - - like https://ci.appveyor.com/project/ruby/ruby/builds/24142523/job/v6aq4srj7c3hgt86 - -commit 9348643575d7a744f3e404d9069a0d29f97960a0 - Author: Takashi Kokubun - Date: 2019-04-27 22:01:10 +0900 - - make sync-default-gems GEM=irb - - Synced from https://github.com/ruby/irb/commit/5feb361ed80736efa5b2c2b629837ec2a5fc2cdb. - This includes a support to colorize named Class instance on IRB inspect. - -commit 3f9562015e651735bfc2fdd14e8f6963b673e22a - Author: Nobuyoshi Nakada - Date: 2019-04-27 21:21:55 +0900 - - Get rid of indirect sharing - - * string.c (str_duplicate): share the root shared string if the - original string is already sharing, so that all shared strings - refer the root shared string directly. indirect sharing can - cause a dangling pointer. - - [Bug #15792] - -commit afb361dfd0811f96f601d8d6492f9e1a0321ea01 - Author: Takashi Kokubun - Date: 2019-04-27 20:15:07 +0900 - - Isolate test_gc_compact on msys2 AppVeyor - - as it's unstable on the environment - https://ci.appveyor.com/project/ruby/ruby/builds/24138134/job/i7e441u7se11w7ey - -commit bc01f7b7211b96b258fc6586789ce9875c079a7d - Author: Kazuki Tsujimoto - Date: 2019-04-27 12:55:32 +0900 - - Fix description of NODE_IN - -commit 7fe04850d21db1e17508fb8c05fd78fc079a71c6 - Author: okuramasafumi - Date: 2019-04-27 11:18:25 +0900 - - Add class ref to `UnboundMethod#owner` doc - - It refers to `Method#receiver` in the doc, but - there's no class reference in current doc. - Some tools automatically make it a link so it's useful. - - Closes: https://github.com/ruby/ruby/pull/2156 - -commit ecf660e438320f501ce4e05e92a5d6c79fe4d54d - Author: James Clarke - Date: 2019-04-27 07:32:46 +0900 - - ia64: Don't clear register_stack_start - - r59829 stopped clearing stack_start and enabled the code for - !FIBER_USE_NATIVE, but we need to do the same for register_stack_start - on ia64, otherwise we end up with NULL in cont_save_machine_stack. - - Closes: https://github.com/ruby/ruby/pull/2155 - -commit 5f6ba669ff79819e0e2cf006ed22f960d4565543 - Author: Takashi Kokubun - Date: 2019-04-27 12:28:00 +0900 - - Isolate TestGCCompact from JIT testing - - Wercker seems to randomly fail - https://app.wercker.com/ruby/ruby/runs/mjit-test1/5cc3c1c423fcb70008db9b64?step=5cc3c46a03f4460007da0659 - - To help debugging, let me isolate the impact from GC.compact in the JIT - testing on Wercker. - -commit 48313f129abd464c69853a66af22adbad260b82e - Author: Kazuhiro NISHIYAMA - Date: 2019-04-27 12:21:35 +0900 - - Add `or nil` to call-seq of `Enumerator::ArithmeticSequence#begin` - - ``` - % ruby -ve 'p (nil..).first' - ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18] - nil - % ruby -ve 'p (nil..).begin' - ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18] - nil - ``` - -commit be8cf0d4f672c6061c38c06a7d5d1ee909fc124b - Author: Kazuki Tsujimoto - Date: 2019-04-27 12:09:48 +0900 - - Update NEWS for pattern matching [ci skip] - -commit baad9e8a1c5b54d5728ce48d36726ed78754285f - Author: Takashi Kokubun - Date: 2019-04-27 12:08:48 +0900 - - NEWS: Note about $TERM requirement [ci skip] - -commit 569c1ef6f17ad12012ba85c443c6806b9d0a9da5 - Author: Takashi Kokubun - Date: 2019-04-27 11:42:38 +0900 - - make sync-default-gems GEM=irb - - Backport changes from ruby/irb. - -commit 782e48726082ee130b6ce27f2a21d33257f09d71 - Author: naruse - Date: 2019-04-21 14:48:35 +0900 - - suppress warning in test/irb - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/centos7/ruby-trunk/log/20190421T040003Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67678 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - - Re-committing https://github.com/ruby/ruby/commit/7f09b5e9da8f83f84c5b6ae7a644a562811fec73 - -commit a2219e687e07fb7e3b9b6dce8e68210fd3a516f9 - Author: git - Date: 2019-04-27 09:17:50 +0900 - - * 2019-04-27 - -commit c8b675adb902a67bf62a1a9945bade7c8becc4e8 - Author: naruse - Date: 2019-04-21 14:48:35 +0900 - - suppress redefinition warnings - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67679 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8990779d3693b106fbca014518726ba53224f731 - Author: nobu - Date: 2019-01-18 18:52:50 +0900 - - Prefer block_given? to iterator? - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66866 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e804fcb42c56d5a4ff31df0391accaf5ede8c26e - Author: Nobuyoshi Nakada - Date: 2019-04-26 18:53:36 +0900 - - Fix rdoc in 52cfb17086 - -commit a429b3601f5dea7e3f7019733afffe64df583f34 - Author: Takashi Kokubun - Date: 2019-04-26 18:46:43 +0900 - - Revert "Class instance should be also colorable on IRB" - - This reverts commit 6669c966d2744f21315047d1725ad4494d15b8ba. - - It seems to make tests fail... let me fix this later. - -commit 6669c966d2744f21315047d1725ad4494d15b8ba - Author: Takashi Kokubun - Date: 2019-04-26 18:42:50 +0900 - - Class instance should be also colorable on IRB - - inspect. - - Change is made with: `$ make -C .ruby sync-default-gems GEM=irb` - -commit 52cfb17086998b9434c9c786bfcf827197216c9a - Author: Takashi Kokubun - Date: 2019-04-26 18:28:54 +0900 - - make sync-default-gems GEM=irb - - from https://github.com/ruby/irb/commit/e6739d8c66dc78562930adb0b96935c9b38acf74 - -commit a6805771ec202a8b8586d6624b05342029cace0d - Author: Takashi Kokubun - Date: 2019-04-26 18:25:54 +0900 - - Define `make sync-default-gems` - - to run tool/sync_default_gems.rb - -commit a93f55569950b714a3d1235e59ad0a7d5b88f938 - Author: Takashi Kokubun - Date: 2019-04-26 18:18:09 +0900 - - tool/sync_default_gems.rb: Check prerequisites - -commit 1cef6a0c0c996ab87ef41dfeede3203ee3c811dc - Author: Kazuhiro NISHIYAMA - Date: 2019-04-26 17:47:09 +0900 - - Add more debug print for random CI failure on osx Travis - - see r67347 - -commit 0523b02f481150d60fc0803689d0919ee22923e9 - Author: Urabe, Shyouhei - Date: 2019-04-26 14:33:44 +0900 - - yaml cannot deep-merge arrays - - The configuration cannot but be written here and there.... - -commit 267ac0624dad6be5c3f4760f691258ae7dc83861 - Author: Urabe, Shyouhei - Date: 2019-04-26 13:35:08 +0900 - - make test needs no gems - -commit d700a8a0eb5f0a17d689216b5944ab6e39f1d55e - Author: Urabe, Shyouhei - Date: 2019-04-26 13:32:55 +0900 - - update travis clang - - Seems clang-7 has false-positives around memory sanitizer. - - This line should not be reported because the memory region is - correctly unpoisoned beforehand: - https://travis-ci.org/ruby/ruby/jobs/524766381 - - Clang 8 seems to fix it. - -commit 3175c54cb6d0684cf5a9346838a91756db33e54e - Author: Urabe, Shyouhei - Date: 2019-04-26 11:58:43 +0900 - - new travis setting to enable assertions - -commit 2a49a4795679e17613435544766b127ebe31b6d3 - Author: Urabe, Shyouhei - Date: 2019-04-26 11:33:40 +0900 - - sanitizer compiler flag update - -commit 7b7043e5da8589e01b94575d4ed647e909e5c875 - Author: Urabe, Shyouhei - Date: 2019-04-25 15:50:47 +0900 - - eliminate use of freed memory - - rb_io_fptr_finalize_internal frees the memory region. - - ================================================================= - ==85264==ERROR: AddressSanitizer: heap-use-after-free on address 0x610000000d8c at pc 0x5608e38077f7 bp 0x7ffee12d5440 sp 0x7ffee12d5438 - READ of size 4 at 0x610000000d8c thread T0 - #0 0x5608e38077f6 in rb_io_memsize io.c:4749:24 - #1 0x5608e37a0481 in obj_memsize_of gc.c:3547:14 - #2 0x5608e37a4f30 in check_rvalue_consistency gc.c:1107:2 - #3 0x5608e37a2624 in RVALUE_OLD_P gc.c:1218:5 - #4 0x5608e37a5bae in rb_gc_force_recycle gc.c:6652:18 - #5 0x5608e38191f9 in rb_f_backquote io.c:9021:5 - #6 0x5608e3d8aa14 in call_cfunc_1 vm_insnhelper.c:2058:12 - #7 0x5608e3d6e23d in vm_call_cfunc_with_frame vm_insnhelper.c:2211:11 - #8 0x5608e3d54a35 in vm_call_cfunc vm_insnhelper.c:2229:12 - #9 0x5608e3d5253b in vm_call_method_each_type vm_insnhelper.c:2564:9 - #10 0x5608e3d51f50 in vm_call_method vm_insnhelper.c:2701:13 - #11 0x5608e3cf2de4 in vm_call_general vm_insnhelper.c:2734:12 - #12 0x5608e3d79918 in vm_sendish vm_insnhelper.c:3627:11 - #13 0x5608e3d06cf5 in vm_exec_core insns.def:789:11 - #14 0x5608e3d43700 in rb_vm_exec vm.c:1892:22 - #15 0x5608e3d47cbf in rb_iseq_eval_main vm.c:2151:11 - #16 0x5608e37620ca in ruby_exec_internal eval.c:262:2 - #17 0x5608e376198b in ruby_exec_node eval.c:326:12 - #18 0x5608e37617d0 in ruby_run_node eval.c:318:25 - #19 0x5608e35c9486 in main main.c:42:9 - #20 0x7f62e9421b96 in __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 - #21 0x5608e3522289 in _start (miniruby+0x15f289) - - 0x610000000d8c is located 76 bytes inside of 192-byte region [0x610000000d40,0x610000000e00) - freed by thread T0 here: - #0 0x5608e359a2ed in free (miniruby+0x1d72ed) - #1 0x5608e37af421 in objspace_xfree gc.c:9591:5 - #2 0x5608e37af3da in ruby_sized_xfree gc.c:9687:2 - #3 0x5608e3799ac8 in ruby_xfree gc.c:9694:5 - #4 0x5608e380746d in rb_io_fptr_finalize_internal io.c:4728:5 - #5 0x5608e38191ed in rb_f_backquote io.c:9020:5 - #6 0x5608e3d8aa14 in call_cfunc_1 vm_insnhelper.c:2058:12 - #7 0x5608e3d6e23d in vm_call_cfunc_with_frame vm_insnhelper.c:2211:11 - #8 0x5608e3d54a35 in vm_call_cfunc vm_insnhelper.c:2229:12 - #9 0x5608e3d5253b in vm_call_method_each_type vm_insnhelper.c:2564:9 - #10 0x5608e3d51f50 in vm_call_method vm_insnhelper.c:2701:13 - #11 0x5608e3cf2de4 in vm_call_general vm_insnhelper.c:2734:12 - #12 0x5608e3d79918 in vm_sendish vm_insnhelper.c:3627:11 - #13 0x5608e3d06cf5 in vm_exec_core insns.def:789:11 - #14 0x5608e3d43700 in rb_vm_exec vm.c:1892:22 - #15 0x5608e3d47cbf in rb_iseq_eval_main vm.c:2151:11 - #16 0x5608e37620ca in ruby_exec_internal eval.c:262:2 - #17 0x5608e376198b in ruby_exec_node eval.c:326:12 - #18 0x5608e37617d0 in ruby_run_node eval.c:318:25 - #19 0x5608e35c9486 in main main.c:42:9 - #20 0x7f62e9421b96 in __libc_start_main - /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 - - previously allocated by thread T0 here: - #0 0x5608e359a56d in malloc (miniruby+0x1d756d) - #1 0x5608e37aed12 in objspace_xmalloc0 gc.c:9416:5 - #2 0x5608e37aebe7 in ruby_xmalloc0 gc.c:9600:12 - #3 0x5608e37aea8b in ruby_xmalloc_body gc.c:9609:12 - #4 0x5608e37a6d64 in ruby_xmalloc gc.c:11469:12 - #5 0x5608e380e4b4 in rb_io_fptr_new io.c:8040:19 - #6 0x5608e380e446 in rb_io_make_open_file io.c:8077:10 - #7 0x5608e3850ea0 in pipe_open io.c:6707:5 - #8 0x5608e384edb4 in pipe_open_s io.c:6772:12 - #9 0x5608e381910b in rb_f_backquote io.c:9014:12 - #10 0x5608e3d8aa14 in call_cfunc_1 vm_insnhelper.c:2058:12 - #11 0x5608e3d6e23d in vm_call_cfunc_with_frame vm_insnhelper.c:2211:11 - #12 0x5608e3d54a35 in vm_call_cfunc vm_insnhelper.c:2229:12 - #13 0x5608e3d5253b in vm_call_method_each_type vm_insnhelper.c:2564:9 - #14 0x5608e3d51f50 in vm_call_method vm_insnhelper.c:2701:13 - #15 0x5608e3cf2de4 in vm_call_general vm_insnhelper.c:2734:12 - #16 0x5608e3d79918 in vm_sendish vm_insnhelper.c:3627:11 - #17 0x5608e3d06cf5 in vm_exec_core insns.def:789:11 - #18 0x5608e3d43700 in rb_vm_exec vm.c:1892:22 - #19 0x5608e3d47cbf in rb_iseq_eval_main vm.c:2151:11 - #20 0x5608e37620ca in ruby_exec_internal eval.c:262:2 - #21 0x5608e376198b in ruby_exec_node eval.c:326:12 - #22 0x5608e37617d0 in ruby_run_node eval.c:318:25 - #23 0x5608e35c9486 in main main.c:42:9 - #24 0x7f62e9421b96 in __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 - - SUMMARY: AddressSanitizer: heap-use-after-free io.c:4749:24 in - rb_io_memsize - Shadow bytes around the buggy address: - 0x0c207fff8160: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00 - 0x0c207fff8170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 0x0c207fff8180: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00 - 0x0c207fff8190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 0x0c207fff81a0: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd - =>0x0c207fff81b0: fd[fd]fd fd fd fd fd fd fd fd fd fd fd fd fd fd - 0x0c207fff81c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa - 0x0c207fff81d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa - 0x0c207fff81e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa - 0x0c207fff81f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa - 0x0c207fff8200: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa - Shadow byte legend (one shadow byte represents 8 application bytes): - Addressable: 00 - Partially addressable: 01 02 03 04 05 06 07 - Heap left redzone: fa - Freed heap region: fd - Stack left redzone: f1 - Stack mid redzone: f2 - Stack right redzone: f3 - Stack after return: f5 - Stack use after scope: f8 - Global redzone: f9 - Global init order: f6 - Poisoned by user: f7 - Container overflow: fc - Array cookie: ac - Intra object redzone: bb - ASan internal: fe - Left alloca redzone: ca - Right alloca redzone: cb - Shadow gap: cc - ==85264==ABORTING - -commit 2a863d4babed062dd91d2fe519d5018651c6378e - Author: Urabe, Shyouhei - Date: 2019-04-25 15:03:18 +0900 - - avoid buffer overflow in vm_check_canary - - ec->cfp->iseq might not exist at the very beginning of a thread. - - ================================================================= - ==82954==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x7fc86f334810 at pc 0x55ceaf013125 bp 0x7ffe2eddbbf0 sp 0x7ffe2eddbbe8 - READ of size 8 at 0x7fc86f334810 thread T0 - #0 0x55ceaf013124 in vm_check_canary vm_insnhelper.c:217:24 - #1 0x55ceaefb4796 in vm_push_frame vm_insnhelper.c:276:5 - #2 0x55ceaf0124bd in th_init vm.c:2661:5 - #3 0x55ceaf00d5eb in ruby_thread_init vm.c:2690:5 - #4 0x55ceaf00d4b1 in rb_thread_alloc vm.c:2703:5 - #5 0x55ceaef0038b in thread_s_new thread.c:872:20 - #6 0x55ceaf04d8c1 in call_cfunc_m1 vm_insnhelper.c:2041:12 - #7 0x55ceaf03118d in vm_call_cfunc_with_frame vm_insnhelper.c:2207:11 - #8 0x55ceaf017985 in vm_call_cfunc vm_insnhelper.c:2225:12 - #9 0x55ceaf01548b in vm_call_method_each_type vm_insnhelper.c:2560:9 - #10 0x55ceaf014c96 in vm_call_method vm_insnhelper.c:2686:13 - #11 0x55ceaefb5de4 in vm_call_general vm_insnhelper.c:2730:12 - #12 0x55ceaf03c868 in vm_sendish vm_insnhelper.c:3623:11 - #13 0x55ceaefc95bb in vm_exec_core insns.def:771:11 - #14 0x55ceaf006700 in rb_vm_exec vm.c:1892:22 - #15 0x55ceaf00acbf in rb_iseq_eval_main vm.c:2151:11 - #16 0x55ceaea250ca in ruby_exec_internal eval.c:262:2 - #17 0x55ceaea2498b in ruby_exec_node eval.c:326:12 - #18 0x55ceaea247d0 in ruby_run_node eval.c:318:25 - #19 0x55ceae88c486 in main main.c:42:9 - #20 0x7fc874330b96 in __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 - #21 0x55ceae7e5289 in _start (miniruby+0x15f289) - - 0x7fc86f334810 is located 16 bytes to the right of 1048576-byte region [0x7fc86f234800,0x7fc86f334800) - allocated by thread T0 here: - #0 0x55ceae85d56d in malloc (miniruby+0x1d756d) - #1 0x55ceaea71d12 in objspace_xmalloc0 gc.c:9416:5 - #2 0x55ceaea71cd2 in ruby_xmalloc2_body gc.c:9623:12 - #3 0x55ceaea7d09c in ruby_xmalloc2 gc.c:11479:12 - #4 0x55ceaf00c3b7 in rb_thread_recycle_stack vm.c:2462:12 - #5 0x55ceaf012256 in th_init vm.c:2656:29 - #6 0x55ceaf00d5eb in ruby_thread_init vm.c:2690:5 - #7 0x55ceaf00d4b1 in rb_thread_alloc vm.c:2703:5 - #8 0x55ceaef0038b in thread_s_new thread.c:872:20 - #9 0x55ceaf04d8c1 in call_cfunc_m1 vm_insnhelper.c:2041:12 - #10 0x55ceaf03118d in vm_call_cfunc_with_frame vm_insnhelper.c:2207:11 - #11 0x55ceaf017985 in vm_call_cfunc vm_insnhelper.c:2225:12 - #12 0x55ceaf01548b in vm_call_method_each_type vm_insnhelper.c:2560:9 - #13 0x55ceaf014c96 in vm_call_method vm_insnhelper.c:2686:13 - #14 0x55ceaefb5de4 in vm_call_general vm_insnhelper.c:2730:12 - #15 0x55ceaf03c868 in vm_sendish vm_insnhelper.c:3623:11 - #16 0x55ceaefc95bb in vm_exec_core insns.def:771:11 - #17 0x55ceaf006700 in rb_vm_exec vm.c:1892:22 - #18 0x55ceaf00acbf in rb_iseq_eval_main vm.c:2151:11 - #19 0x55ceaea250ca in ruby_exec_internal eval.c:262:2 - #20 0x55ceaea2498b in ruby_exec_node eval.c:326:12 - #21 0x55ceaea247d0 in ruby_run_node eval.c:318:25 - #22 0x55ceae88c486 in main main.c:42:9 - #23 0x7fc874330b96 in __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 - - SUMMARY: AddressSanitizer: heap-buffer-overflow vm_insnhelper.c:217:24 in vm_check_canary - Shadow bytes around the buggy address: - 0x0ff98de5e8b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 0x0ff98de5e8c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 0x0ff98de5e8d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 0x0ff98de5e8e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 0x0ff98de5e8f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - =>0x0ff98de5e900: fa fa[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa - 0x0ff98de5e910: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa - 0x0ff98de5e920: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa - 0x0ff98de5e930: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa - 0x0ff98de5e940: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa - 0x0ff98de5e950: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa - Shadow byte legend (one shadow byte represents 8 application bytes): - Addressable: 00 - Partially addressable: 01 02 03 04 05 06 07 - Heap left redzone: fa - Freed heap region: fd - Stack left redzone: f1 - Stack mid redzone: f2 - Stack right redzone: f3 - Stack after return: f5 - Stack use after scope: f8 - Global redzone: f9 - Global init order: f6 - Poisoned by user: f7 - Container overflow: fc - Array cookie: ac - Intra object redzone: bb - ASan internal: fe - Left alloca redzone: ca - Right alloca redzone: cb - Shadow gap: cc - ==82954==ABORTING - -commit aa190abe207c9cdbd75a5f8670a4e613565ee6bf - Author: Urabe, Shyouhei - Date: 2019-04-25 13:10:29 +0900 - - newptr should not be NULL - - obj_ivar_heap_alloc already handles that situation. - -commit 1aa05fddd81846bfa2833dff5e0aaccc1e707c81 - Author: Urabe, Shyouhei - Date: 2019-04-24 16:47:09 +0900 - - unpoison header before touching - - This header is poisoned to detect unintentional buffer overrun. - However in this (and forthcoming) function, we are intentionally - looking at the header. We have to unpoison before anything. - -commit 40b5f2b85dc5c50d7757c3b2522a767188b0e0b3 - Author: Urabe, Shyouhei - Date: 2019-04-24 16:15:46 +0900 - - memo.c might not always be initialized - - memo.float_value might change inside of hash_sum. In case it - flipped from false to true there, and the calculated sum is Inf, - memo.c might not be initialized at all. This is bad. - - Found using memory sanitizer: - - ==55293==WARNING: MemorySanitizer: use-of-uninitialized-value - #0 0x55dfb8d6c529 in rb_float_new_inline internal.h:1814:53 - #1 0x55dfb8d1b30c in enum_sum enum.c:4017:18 - #2 0x55dfb86d75ad in call_cfunc_m1 vm_insnhelper.c:2041:12 - #3 0x55dfb864b141 in vm_call_cfunc_with_frame vm_insnhelper.c:2207:11 - #4 0x55dfb85e843d in vm_call_cfunc vm_insnhelper.c:2225:12 - #5 0x55dfb85e08f3 in vm_call_method_each_type vm_insnhelper.c:2560:9 - #6 0x55dfb85de9c7 in vm_call_method vm_insnhelper.c:2686:13 - #7 0x55dfb849eac6 in vm_call_general vm_insnhelper.c:2730:12 - #8 0x55dfb8686103 in vm_sendish vm_insnhelper.c:3623:11 - #9 0x55dfb84dc29e in vm_exec_core insns.def:789:11 - -commit f02760fc0a455f376ad1a855fd1a5e9252c8267c - Author: Urabe, Shyouhei - Date: 2019-04-24 15:30:25 +0900 - - avoid reading uninitialized variable - - autoload_reset() can read this state.result. Because autoload_reset - is a function passed to rb_ensure, there is a chance when an - exception raises before actually filling this memory region. - - test/ruby/test_defined.rb:test_autoload_noload is one of such case. - - Found using memory sanitizer. - - ==54014==WARNING: MemorySanitizer: use-of-uninitialized-value - #0 0x557a683f3e5a in autoload_reset variable.c:2372:9 - #1 0x557a6707a93b in rb_ensure eval.c:1084:5 - #2 0x557a683efbf5 in rb_autoload_load variable.c:2475:14 - #3 0x557a685fc460 in vm_get_ev_const vm_insnhelper.c:938:4 - #4 0x557a68448e0a in vm_exec_core insns.def:267:11 - -commit 3ba485c0bfcfc0be351ef8278cd27187f4c11906 - Author: Urabe, Shyouhei - Date: 2019-04-23 18:02:24 +0900 - - zero-fill before GC mark - - Depending on architectures, setjmp might not fully fill a jmp_buf. - On such machines the union can contain wobbly bits. They are then - scanned during mark_locations_array(). This is bad. - -commit 504ce460d240b5b726e77c0b0915677892a19e58 - Author: Urabe, Shyouhei - Date: 2019-04-24 14:53:47 +0900 - - give up sanitizing BSD_vfprintf - - Sanitizers report something inside of this function but it is - beyond my brain capacity. Also the code is proven to work. - Let me ignore. - -commit b11b26bcaf711ad01d1a81943cca42f7ff40bfee - Author: Urabe, Shyouhei - Date: 2019-04-24 12:24:44 +0900 - - fix size of allocated memory - - The size of `ptr` here is not the same as the variable `size`. - We were counting the size of header twice. - -commit 6201a89b38afb6bb2a548aeba0ca77090851713b - Author: Urabe, Shyouhei - Date: 2019-04-24 11:23:13 +0900 - - mark verify functions non-sanitizable - - These functions purposefully read from memory regions potentially - not handled well. Should let sanitizers avoid checking them. - -commit 572f2ddff64ddf12f2331ad77b72d2b0c9d9883c - Author: Urabe, Shyouhei - Date: 2019-04-23 18:36:20 +0900 - - use __attribute__((__no_sanitize__("memory"))) - -commit fa09acafde3b7dbb23edadc6eddcce27f7395880 - Author: Urabe, Shyouhei - Date: 2019-04-24 18:22:33 +0900 - - extend machine stacks when sanitizers are there - - It seems sanitizers require extra amount of machine stacks. Without - extending them the process tends to stack overflow. - -commit 1f4204a762b2ddcc2f235b1a2b6a10071ef90d3b - Author: Urabe, Shyouhei - Date: 2019-04-23 17:55:15 +0900 - - disable assertion when MSAN is active - - These assertions check if a newly allocated object (which is marked - as an uninitialized memory region in MSAN) is in fact a T_NONE. - - Thus they intentionally read uninitialized memory regions, which do - not interface well with MSAN. Just disable them. - -commit bdd1b300f8bf540c8f237cce50e42991f94101e3 - Author: Urabe, Shyouhei - Date: 2019-04-23 17:47:49 +0900 - - __asan_region_is_poisoned takes void * - - while heap->obj is a VALUE. A cast should be there. - -commit 171a6ad1c12b1600b01d9bde29947526ae3e2aee - Author: Urabe, Shyouhei - Date: 2019-04-25 14:33:44 +0900 - - print the disasm - - It seems to be my fault to leave the variable disasm unused. - -commit b6ebbee5d64dbd422957efe55b4ec5520c9b11bf - Author: Urabe, Shyouhei - Date: 2019-04-25 16:36:32 +0900 - - suppress warning [ci skip] - -commit 54eac83b2ad77ddea84fa6d66c09e0bb014cf61e - Author: Nobuyoshi Nakada - Date: 2019-04-24 13:35:23 +0900 - - Hide internal IDs - - * parse.y (internal_id): number the ID serial for internal use by - counting down from the neary maximum value, not to accidentally - match permanent IDs. - - [Bug #15786] - - Notes: - Fixed: [Bug #15786] - -commit 5689c46457e6b078ac83b08b7e881e0050ebdfaa - Author: git - Date: 2019-04-26 01:43:26 +0900 - - * 2019-04-26 - -commit 0408b8b390f788693b10ad82281ae3d66ea52eb4 - Author: Takashi Kokubun - Date: 2019-04-26 01:43:11 +0900 - - Syntax-highlight yield in IRB - -commit 2422316aea034c818734ad2fa68c4b021a6aafeb - Author: Takashi Kokubun - Date: 2019-04-26 01:18:37 +0900 - - NEWS: Credit goes to Pry [ci skip] - - We must note this feature is heavily inspired by Pry. - -commit 5fe99aefd39ce535f658aabd0ca6e2265348d314 - Author: Takashi Kokubun - Date: 2019-04-26 01:15:30 +0900 - - Support highlighting Regexp in inspect - -commit e64bab5f779440ae920746ae5689a2af91de3604 - Author: Takashi Kokubun - Date: 2019-04-26 00:53:36 +0900 - - Add NEWS entry about IRB syntax highlight [ci skip] - - Details: https://github.com/ruby/ruby/pull/2150 - - Note that this introduction is discussed with @aycabta who is allowed to - make some changes to IRB by the IRB maintainer, keiju. - -commit 0c54d2e2c7697aa5d6a1315b79c16b88d34f5e81 - Author: Takashi Kokubun - Date: 2019-04-25 23:53:57 +0900 - - Force IRB::Color to recognize TERM - - Closes: https://github.com/ruby/ruby/pull/2150 - -commit 022cbb278f381e5774a5d0277a83127c6f6b4802 - Author: Pocket7878 - Date: 2019-04-25 23:47:12 +0900 - - Do not color IRB output on 'dumb' TERM - - Co-Authored-By: k0kubun - Closes: https://github.com/ruby/ruby/pull/2150 - -commit b55201dd099011a22c8c1d64c653f898d9b409ca - Author: Takashi Kokubun - Date: 2019-04-25 21:36:48 +0900 - - Colorize IRB's inspect result - - Closes: https://github.com/ruby/ruby/pull/2150 - -commit 94af6cd383f9dc3ae1204a5fba8f56ee7826cbce - Author: Takashi Kokubun - Date: 2019-04-25 21:16:21 +0900 - - Colorize IRB's code_around_binding - - Closes: https://github.com/ruby/ruby/pull/2150 - -commit 790f6709ae418345829d12f053cf270f4d535f1c - Author: Kazuhiro NISHIYAMA - Date: 2019-04-25 23:46:37 +0900 - - Mention warning of `$,` - - see [r67606](https://github.com/ruby/ruby/commit/3ee0648dc7a5465b2cbadd7246fc2edbd676d759) - -commit 2272cb00eadcbc48640c69fcd6a30e45a5977cd5 - Author: Nobuyoshi Nakada - Date: 2019-04-25 11:07:17 +0900 - - Ripper does not use internal IDs directly - -commit c9715eb494ee9055f76ff59027219b5b4756f7bd - Author: Kazuhiro NISHIYAMA - Date: 2019-04-25 20:02:22 +0900 - - Add more debug print for random CI failure on osx Travis - - see r67347 - -commit 3581a64239b333be33424888f689c9e452fc3334 - Author: Takashi Kokubun - Date: 2019-04-25 19:37:10 +0900 - - BSD's mktemp does not have `-p` - -commit 57225dc07a3fcc745c7aecc1fb04182b156ad29f - Author: Takashi Kokubun - Date: 2019-04-25 19:24:56 +0900 - - Show `make checkout-github/merge-github` in help - -commit b2e92bfd9f25274277f15faa6e9a70a7d0a36dfe - Author: Takashi Kokubun - Date: 2019-04-25 18:54:43 +0900 - - Resurrect `make xxx-github PR=1234` interface - - `call xxx, yyy` seems to pass " yyy" instead of "yyy". - -commit 70adfdcd8de3296e9015338216073e8144dbea04 - Author: Nobuyoshi Nakada - Date: 2019-04-25 18:29:58 +0900 - - Added pr-% - - May merge multiple github pull requests at once. e.g., - - $ make pr-123456789 pr-987654321 - -commit 44bb429bb1bb431dc2805daf93f52509c26b9da7 - Author: Nobuyoshi Nakada - Date: 2019-04-25 18:27:16 +0900 - - Cache git config values - -commit 6de9128fe942de9a0306fe63b949b1a9c343e2c8 - Author: Takashi Kokubun - Date: 2019-04-25 18:05:51 +0900 - - Add `make checkout-github` too - - You can use this like `make checkout-github PR=1234` - -commit 116f91ab504a450b1b96d6b3f029fbaa5f99a305 - Author: Nobuyoshi Nakada - Date: 2019-04-25 15:33:05 +0900 - - Make working tree under the source directory - -commit 09ce223b0b297359fd7f9a5d629a70be32157302 - Author: Nobuyoshi Nakada - Date: 2019-04-25 15:03:54 +0900 - - Rebase the pull request in a worktree - - A pull request based on an old commit may rewind too many files, - even if unnecessary. As rewinding some files, e.g., common header - files, configure.ac, will result in full-rebuild, rebase in a - separate directory to get rid of such rewind. - -commit d0ba4abf1a00339ebbb5d405db3240a8bdb7b68b - Author: Nobuyoshi Nakada - Date: 2019-04-25 13:22:06 +0900 - - Add RB_ID_SERIAL_MAX - -commit 99084f540171df301478ec66fb89e2c38287e504 - Author: Lourens Naudé - Date: 2019-04-10 21:05:15 +0900 - - Lazy allocate the compile data catch table array - - Closes: https://github.com/ruby/ruby/pull/2119 - -commit 9bfc185a0d93f05f7522a3dea89d69920dcf079c - Author: Kouhei Sutou - Date: 2019-04-25 05:28:56 +0900 - - Upgrade test-unit to 3.3.2 - -commit 7d2cb60e48f40d6d6105808e1de1e244a05a8138 - Author: git - Date: 2019-04-25 01:09:06 +0900 - - * 2019-04-25 - -commit 68e3f8192b6df3ee1759bef7725e958aa3e72c3d - Author: Masatoshi SEKI - Date: 2019-04-25 01:08:54 +0900 - - add DRbObject dereference test (Preparation for investigation of Bug #15711) - -commit dd5b6c71c6cf157406e5ead4dfc6188d563bc268 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-25 00:52:16 +0900 - - Fix typos [ci skip] - -commit 6061aa0ac1b4d43d107d47ba4d2eecbda77959a1 - Author: Takashi Kokubun - Date: 2019-04-24 23:26:56 +0900 - - Automatically gpg-sign rebase when commit.gpgsign - - is true - - Closes: https://github.com/ruby/ruby/pull/2148 - -commit daff4cbd6c7d6be07ae094bda45bca076b37a375 - Author: Takashi Kokubun - Date: 2019-04-24 22:40:54 +0900 - - Add `make fetch-github` and `make merge-github` - - Closes: https://github.com/ruby/ruby/pull/2147 - -commit 2642f22050d74d56da5525b0cd1a5c665ddb4c51 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-24 18:18:46 +0900 - - Add more debug print for random CI failure on osx Travis - - see r67347 - -commit 1613917ae6441b98a52d885f0df1479652be755d - Author: Nobuyoshi Nakada - Date: 2019-04-24 17:34:21 +0900 - - Defer setting gc_stress instead of setting dont_gc - - [Bug #15784] - -commit f1a52d96a59c63d46cb23af60cdcaf38e30e0512 - Author: Nobuyoshi Nakada - Date: 2019-04-24 12:52:57 +0900 - - Defer setting gc_stress until inits done - - [Bug #15784] - -commit 2ef66737081ec029f9c82e11671de36bb70a9e3b - Author: Koichi Sasada - Date: 2019-04-24 09:30:07 +0900 - - force 10 chars SHA1 display. - - `make update-src` shows latest commit hash for convenience. - However, `rev-parse --short` option shows different length - (maybe) between git versions. This fix force 10 chars - with `--short=10`. - -commit 19d454a957836a6118f42b0367aea7c823beffae - Author: Aaron Patterson - Date: 2019-04-24 07:16:17 +0900 - - syntax error can move, so do not cache - -commit 75061f46ae646e821e9228caa5e3b7f23fa609f0 - Author: Aaron Patterson - Date: 2019-04-24 04:10:52 +0900 - - Fix complex hash keys to work with compaction - - For example when an array containing objects is a hash key, the contents - of the array may move which can cause the hash value for the array to - change. This commit makes the default `hash` value based off the - object id, so the hash value will remain stable. - - Fixes test/shell/test_command_processor.rb - -commit cf930985da1ae15b66577ec8286e54ad04ccda78 - Author: Lourens Naudé - Date: 2019-03-17 00:53:18 +0900 - - Remove member char_offset_updated from struct rmatch as member char_offset_num_allocated can serve the same purpose as that predicate - -commit 82ef172a8cb90819bf835e468eb8af2323e3bccf - Author: Takashi Kokubun - Date: 2019-04-24 01:10:13 +0900 - - The step should not fail when isolated tests - - do not exist - -commit bc8e54911db505d9e1776673a86e956c7d7e3b89 - Author: Takashi Kokubun - Date: 2019-04-24 00:39:33 +0900 - - Isolate test_gc_compact for osx Travis - - After `GC.compact`, test/shell/test_command_processor.rb seems to be made - unstable on osx Travis like https://travis-ci.org/ruby/ruby/jobs/523487997. - - For investigating whether it's impacting that or not, let me try isolating - that for osx Travis for now. - -commit 9629f4c0518f4a22fe8c149019c3d15005f4ef00 - Author: git - Date: 2019-04-24 00:40:29 +0900 - - * 2019-04-24 - -commit 31cf13060cce44d782b068cf083b1ae4def6dc09 - Author: Lourens Naudé - Date: 2019-03-16 21:48:34 +0900 - - Only define history_root member of the Oniguruma re_registers struct if USE_CAPTURE_HISTORY is enabled - -commit 14dd8d6b370797f2e419205e9f28368433dc6ceb - Author: Hiroshi SHIBATA - Date: 2019-04-23 22:26:40 +0900 - - Added cgit url. - -commit f4f66bd11c65882b86e0acf4d58f15fb596f25cf - Author: Nobuyoshi Nakada - Date: 2019-04-23 21:55:29 +0900 - - Revert "IRB is improved with Reline and RDoc, take 2" - - Accidentally merged when 89271d4a3733bc5e70e9c56b4bd12f277e699c42 - "Adjusted indents". - -commit 89271d4a3733bc5e70e9c56b4bd12f277e699c42 - Author: Nobuyoshi Nakada - Date: 2019-04-23 20:27:24 +0900 - - Adjusted indents - -commit f2cd4f4cd0a1e352fcc48a216127beaeda2b2399 - Author: aycabta - Date: 2019-04-23 18:09:46 +0900 - - IRB is improved with Reline and RDoc, take 2 - -commit 87cf45a512a7803f266e4782c49e0a99c06a4039 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-23 16:48:48 +0900 - - Fix a typo - -commit 2ae5f6f97cd1cd79e3c0ef11da235ddc053a6186 - Author: Nobuyoshi Nakada - Date: 2019-04-23 15:43:51 +0900 - - Add VCS::GIT#commit - -commit 2fb83a0af7a49788e80c55fd324dfa8e046cd9d9 - Author: Nobuyoshi Nakada - Date: 2019-04-23 15:39:36 +0900 - - Split git-svn dependent methods - -commit 18eb9e585526881cba9752e50b2d206924714339 - Author: Nobuyoshi Nakada - Date: 2019-04-23 15:03:19 +0900 - - Use an exclusive range for ruby_version_is - -commit 0d41adf6e2d10ef699e291f468ee955b25671d6f - Author: Nobuyoshi Nakada - Date: 2019-01-07 11:03:41 +0900 - - Split long expression - -commit 4946c3e4b5e465c743da3050169fdb1f7b060c95 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-23 14:09:45 +0900 - - Add tool/format-release to .gitattributes - -commit 2e1ac220891eb6f53ab62b7c5f4376d8b7959779 - Author: Aaron Patterson - Date: 2019-04-23 12:38:49 +0900 - - Oops, bad merge 🙇â€â™‚ï¸ - -commit e50e60b96a90db8dd92a39f89bd1315d63e1515d - Author: git - Date: 2019-04-23 12:34:10 +0900 - - * expand tabs. - -commit 5a58318a9036ae2430d0a6b1d27ff3d3fd7fdf13 - Author: Aaron Patterson - Date: 2019-04-23 12:32:20 +0900 - - T_MOVED can live on the stack, so make sure we can do book keeping - - Unused T_MOVED objects can live on the stack, so we need to make sure - that they can be accounted for in book keeping - -commit 6ca9e7cc0785c33f6d382176dbd79d6c91db72fe - Author: Seiei Miyagi - Date: 2019-04-23 00:21:50 +0900 - - Disallow numbered parameter as the default value of optional argument - - [Fix GH-2139] [Bug #15783] - -commit ae07b66aaa092c59ac9d544c9b582712290dc357 - Author: Seiei Miyagi - Date: 2019-04-23 00:01:17 +0900 - - Fix internal error of `->x:@2{}` - - [Fix GH-2139] [Bug #15783] - -commit ea520ca9273699fc1c77a71bbeba4b6e06ccfc6c - Author: Aaron Patterson - Date: 2019-04-23 09:14:36 +0900 - - Prevent rb_define_(class|module) classes from moving - - Before this commit, classes and modules would be registered with the - VM's `defined_module_hash`. The key was the ID of the class, but that - meant that it was possible for hash collisions to occur. The compactor - doesn't allow classes in the `defined_module_hash` to move, but if there - is a conflict, then it's possible a class would be removed from the hash - and not get pined. - - This commit changes the key / value of the hash just to be the class - itself, thus preventing movement. - -commit 660c0716595a8fc942d12317a5c55c038b830e94 - Author: Urabe, Shyouhei - Date: 2019-03-08 17:10:08 +0900 - - [ci skip] grammars in comments - -commit 9cdb736672bec22a8396f8077f8eea758bb2ef88 - Author: Nobuyoshi Nakada - Date: 2019-04-23 10:15:01 +0900 - - Missing semicolon - -commit a9b57862bd5b81fb091202d82fb26f3f9ecdc4a3 - Author: git - Date: 2019-04-23 10:19:53 +0900 - - * 2019-04-23 - -commit a8d4dc287fc8621c5b786140714736cb747d3291 - Author: git - Date: 2019-04-23 10:19:47 +0900 - - * expand tabs. - -commit 98ee63693d963e96ac7d81ac33a5b12103b577b3 - Author: Aaron Patterson - Date: 2019-04-23 08:23:04 +0900 - - Symbols can move, so don't cache in static pointer - - This changes the static pointers to use IDs then look up the symbols - with the ID. Symbols can move, so we don't want to keep static - references to them. - -commit 6fbf4e22c83b4504d2d9a4a42216e4306a4e7e38 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-22 23:10:10 +0900 - - Adds a reference to `TracePoint` to `binding` docs - - This change adds an explicit reference to `TracePoint` in the - documentation for `binding`. Currently it only refers to the now - deprecated `Kernel#set_trace_func`. This reference is left alone for - continuity in the documentation. - [Fix GH-2079] - - Co-authored-by: Brandon Weaver - -commit e19e5d2409e99ef7fd450d317e71e119cb5a4c3a - Author: Stefan Schüßler - Date: 2019-02-18 20:44:01 +0900 - - Fix return value name in docs for Array#union - - Throughout the docs, `new_ary` is used to indicate a new array, whereas `ary` refers to the receiver. - - Notes: - Merge branch patch-5 of https://github.com/sos4nt/ruby into trunk - - [Fix GH-2084] - -commit 4cd67a848a0648c20b1cab9d2dfe1bf7d7d90be0 - Author: Takashi Kokubun - Date: 2019-04-22 22:00:33 +0900 - - Fix RUBY_REVISION spec - - broken by 5da52d1210625fb00acd573b3f32281b4bde1730 - -commit 87261cf59f4914801512cf0f3f1332f0c94b6952 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-22 21:44:44 +0900 - - Omit last_commit=RUBY_LAST_COMMIT_TITLE without local commits - -commit 5da52d1210625fb00acd573b3f32281b4bde1730 - Author: Takashi Kokubun - Date: 2019-04-22 21:23:37 +0900 - - Migrate RUBY_VERSION/RUBY_DESCRIPTION to Git - - from Subversion. - - This behavior is tentative and not discussed well. The point of - discussion will be just the length of commit hash, and I thought we - should include this kind of change in 2.7.0-preview1 release even before - the length is fixed yet. - - Let's discuss that afterwards and fix it later as needed. Naruse - suggested that length=10 is very unlikely to cause conflict, and thus - it's used by email notification and rubyci now. This behavior is in - favor of that for now. - -commit dd0b516399f1e009667a99e815bf86c6a1245ee5 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-22 21:01:34 +0900 - - Tk is already removed from stdlib at r55844 - - https://github.com/ruby/ruby/commit/303dc3c591e324b6bbc691326d8bea76fe3b8fda - -commit c697bade0fc1a7f80122fac7bfe4d137f999f841 - Author: SHIBATA Hiroshi - Date: 2019-04-22 20:01:07 +0900 - - Ignore VSCode configuration from git. - -commit 6a2c8e46f63998b860f5dbf4a89e2f7ee2d7ed0e - Author: SHIBATA Hiroshi - Date: 2019-04-22 20:00:32 +0900 - - Use github url instead of ViewVC. - -commit 184447d91c71aaab6a6f4e6e0527f553872036fb - Author: SHIBATA Hiroshi - Date: 2019-04-22 19:37:22 +0900 - - ViewVC of svn.ruby-lang.org was shutdown status. - -commit ae3f38dc533f2967214f826d3ed45f950f94a8e7 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-22 19:02:17 +0900 - - CRuby trunk uses git instead of subversion now - -commit f005ccc771574e8e4e17b7a35c19b352e0b7dc73 - Author: Shugo Maeda - Date: 2019-04-22 17:15:49 +0900 - - Clarify requirements of <=> - - A return value of <=> is automatically converted to -1, 0, or 1, so - other values can be returned. [Misc #15630] - -commit 6013e41a7bb1d6909e0538ccb885b477bd080163 - Author: Kazuhiro NISHIYAMA - Date: 2019-04-22 11:39:08 +0900 - - Support of Ruby 2.3 has ended - - https://www.ruby-lang.org/en/news/2019/03/31/support-of-ruby-2-3-has-ended/ - -commit beaddd1d327a1c6fe16ab2c84191251280657e48 - Author: NAKAMURA Usaku - Date: 2019-04-22 11:33:56 +0900 - - Now only supports Git repository - -commit b26a7c8d86d8a750a0124340a6d6c1010b768ab2 - Author: svn - Date: 2019-04-22 10:06:50 +0900 - - * remove trailing spaces. - -commit e949c084b52de8c2a938e7a959dd61d6e9b78f2d - Author: Takashi Kokubun - Date: 2019-04-22 10:05:56 +0900 - - README.ja.md: Update description about Git repository - - Backported 4c570abf77 to Japanese - -commit 44a468ccdad87ac58e0bb1eccb8b67910bfc7b50 - Author: svn - Date: 2019-04-22 09:55:20 +0900 - - * remove trailing spaces. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67701 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4c570abf773a0c627592ddef584f3375f791126c - Author: k0kubun - Date: 2019-04-22 09:55:19 +0900 - - README.md: Update description about Git repository - - We started to switch from SVN to Git. Because GitHub would be more - reliable than our single-host cgit, I continued to list GitHub mirror - repository in the first place. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67700 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 693c28d59f6c5eb9dc4fefba57c7967c0dd49b63 - Author: svn - Date: 2019-04-22 00:04:07 +0900 - - * 2019-04-22 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67699 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fdd3091274867197b20bd2c9502fcc5cf3470130 - Author: kazu - Date: 2019-04-22 00:04:06 +0900 - - Fix a typo [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67698 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b6fd7b1bb741edfe08b9f9da4652b5e1d5d3a57a - Author: k0kubun - Date: 2019-04-21 23:24:38 +0900 - - tool/redmine-backporter.rb: Git support in backport/rel - - close https://github.com/ruby/ruby/pull/2138 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67697 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c7db05d216cc4c72bed494d026898784ba6b3b5b - Author: k0kubun - Date: 2019-04-21 22:05:32 +0900 - - tool/redmine-backporter.rb: Remove unused methods - - They seem to have never been used from the beginning (r45081). - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67696 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 72be46f104446ed2dd0a6c2476045fa9f9051f6e - Author: k0kubun - Date: 2019-04-21 21:26:06 +0900 - - Drop tool/generate-backport-changelog.rb - - because we're not writing ChangeLog since ruby_2_4. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67695 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2c31e6dec4e0625c9a79f7d5df669d2ee5abb1de - Author: k0kubun - Date: 2019-04-21 21:03:39 +0900 - - tool/merger.rb: Guard match failure properly - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67694 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit de5378233b2ff5434f024ac66285e699794a321d - Author: k0kubun - Date: 2019-04-21 20:49:11 +0900 - - tool/merger.rb: Support fetching patch from cgit - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67693 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 47676e969e9ecb204e704f0221816167afa79362 - Author: k0kubun - Date: 2019-04-21 19:01:44 +0900 - - tool/merger.rb: Drop ChangeLog handling - - We're not writing ChangeLog since ruby_2_4. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67692 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 51cec00953ff8d7baa483d3846aa1dbdb89101aa - Author: aycabta - Date: 2019-04-21 18:13:49 +0900 - - Revert "IRB is improved with Reline and RDoc" - - This reverts commit 7f273ac6d0f05208b5b228da95205e20c0e8286c. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67691 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 683834eb72cfa77f4eac1c705327b522302b1721 - Author: k0kubun - Date: 2019-04-21 17:34:37 +0900 - - Drop MJIT_FUNC_EXPORTED from rb_hash_bulk_insert - - it's official API after r67677 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67690 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit add82b7e7eebfb8ee311bd85cd2111874f3564f2 - Author: k0kubun - Date: 2019-04-21 17:19:48 +0900 - - Drop obsoleted feature from help - - I understand this is dropped in r67569 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67689 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9c51ef5bc44fc50e9e89a622cf566c6aae0449b4 - Author: aycabta - Date: 2019-04-21 16:37:34 +0900 - - Merge upstream of Reline - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67688 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ea1835caf27e7a4ba31d2c87d05ac292d6d108cd - Author: k0kubun - Date: 2019-04-21 16:27:52 +0900 - - Drop unnecessary newline in short line [ci skip] - - I'm committing safe things to test commit hooks on production... - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67687 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 60455b39bbc98a9faab4cf289feb7191cff8220d - Author: k0kubun - Date: 2019-04-21 16:21:55 +0900 - - Fold too-long line for readability [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67686 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0d23d02ac75cb4349d6dcc3b4ad2b3fba7573f58 - Author: k0kubun - Date: 2019-04-21 16:17:35 +0900 - - Use consistent comma in .ja [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67685 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c23b258d4dc3e1ee34ca6e3351952196bbbf7ab2 - Author: k0kubun - Date: 2019-04-21 16:14:59 +0900 - - Drop created at in .ja like en version [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67684 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 96147b3a12b24f69f2aaccc385d87cceaaec7f6a - Author: k0kubun - Date: 2019-04-21 16:12:51 +0900 - - Slightly modify ja sentence [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67683 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0d972252b0196d7ebb9994292c112a258e68886c - Author: k0kubun - Date: 2019-04-21 16:08:32 +0900 - - Backport README change to .ja.md [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67682 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 221e293733d89fd9b87d966b0891076162264535 - Author: aycabta - Date: 2019-04-21 16:08:26 +0900 - - Add test/reline/ again, I'm back - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67681 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d9a01bc17a3b1097906c8751b621c9a212f29f42 - Author: nobu - Date: 2019-04-21 15:08:00 +0900 - - Remove unused variable and check if succeeded - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67680 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9a83922b666d4e26b84840757b16b0f9df6acef9 - Author: naruse - Date: 2019-04-21 14:48:35 +0900 - - suppress redefinition warnings - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67679 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7f09b5e9da8f83f84c5b6ae7a644a562811fec73 - Author: naruse - Date: 2019-04-21 14:48:35 +0900 - - suppress warning in test/irb - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/centos7/ruby-trunk/log/20190421T040003Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67678 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d3df725f9efeb0e6c121f9a1316abaa90956f1b8 - Author: naruse - Date: 2019-04-21 14:37:11 +0900 - - Make rb_hash_bulk_insert public - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67677 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d9c17c1a877349b193a0718d91bf9d5f05d3b853 - Author: kazu - Date: 2019-04-21 13:54:04 +0900 - - git.ruby-lang.org may be slow than github.com from oversea - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67676 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5906bcc95ab5973b46213e1ec08b71cd4f8f60bd - Author: usa - Date: 2019-04-21 13:53:44 +0900 - - Remove debug lines - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67675 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 66b6d76648c65bf1fa1f284ca691100a8a9f9882 - Author: usa - Date: 2019-04-21 13:52:38 +0900 - - Show/unshow executing command as specified by `V` - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67674 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 03c6cb5e8f503dcf6bc80a70a48a9775bbd2a47e - Author: k0kubun - Date: 2019-04-21 13:02:24 +0900 - - Note about cgit url [ci skip] - - testing svn hook by this commit - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67673 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 710e763e72d925fc25cd5974158cc9e14016a81b - Author: ktsj - Date: 2019-04-21 12:56:42 +0900 - - test/ruby/test_pattern_matching.rb: add missing tests for NODE_DASGN, NODE_LASGN - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67672 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2dc51bf447dd837e9dc3189bbccaf23db0776816 - Author: aycabta - Date: 2019-04-21 12:51:26 +0900 - - Remove test/reline temporary, I'll come back - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67671 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2a5ea43507564739be53af511c9b3a4891db9700 - Author: ko1 - Date: 2019-04-21 12:46:25 +0900 - - add ensure to restore $stdout correctly. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67670 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d0e50b7d5ba6cd247110a0b867a2e1b5442d9978 - Author: svn - Date: 2019-04-21 12:38:53 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67669 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b02f368c82ffbc5318a11e3d700035062bd1d816 - Author: nobu - Date: 2019-04-21 12:38:52 +0900 - - Restore pwd - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67668 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 72cbc3142dbabc54ff225950034335d4f5a4521f - Author: k0kubun - Date: 2019-04-21 12:35:07 +0900 - - Revert "Try dropping const qualifier to suppress msiwn warning" - - This reverts commit b023c1cc07b2fd6e201bf3aeb4a1df9af3854888. - - in favor of r67666. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67667 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e6a7b8a4879dfa44fa1dcefb67f064322570c4c7 - Author: usa - Date: 2019-04-21 12:33:05 +0900 - - Get rid of warnings of VC - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67666 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b023c1cc07b2fd6e201bf3aeb4a1df9af3854888 - Author: k0kubun - Date: 2019-04-21 12:32:03 +0900 - - Try dropping const qualifier to suppress msiwn warning - - https://ci.appveyor.com/project/ruby/ruby/builds/23995093/job/qo728n1uorepkx16 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67665 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4cb2dcdf02964650412c0e34ecbb3dcb744f2a2e - Author: hsbt - Date: 2019-04-21 12:31:34 +0900 - - ubygems.rb is already removed from ruby repository. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67664 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a3adb11fa60a184231cbd085c3171e675db4c8ce - Author: nobu - Date: 2019-04-21 12:30:48 +0900 - - test/reline/helper.rb: define RELINE_TEST_ENCODING always - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67663 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0db89a38f22754eb09c69ae3e38533c91b5e3b17 - Author: nobu - Date: 2019-04-21 12:30:38 +0900 - - Show the latest commit hash after update - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67662 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2c6e241462e02003fc9c3103b8f6aed465b33927 - Author: k0kubun - Date: 2019-04-21 12:12:05 +0900 - - Remove obsoleted TODO comment [ci skip] - - looks like it's updated sufficiently - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67661 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 01efa5d912f47829eb7fbb472d899ed293105d25 - Author: ktsj - Date: 2019-04-21 12:11:38 +0900 - - Add missing test for p_var_ref - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67660 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e7d76e3f5aa78f81e38de5e4ef16cffe7ad7a0d5 - Author: k0kubun - Date: 2019-04-21 11:58:10 +0900 - - tool/merger.rb: Drop some revision notations. - Maintainer use merger mainly from redmine-backporter.rb. - - [Fix GH-2136] - - From: Chikanaga Tomoyuki - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ffc93316c8035ade6bf035dd9348dfcc143e2d4b - Author: k0kubun - Date: 2019-04-21 11:58:10 +0900 - - tool/merger.rb: Remove unused command line format. - I believe no-one use this notation for years. - - [Fix GH-2136] - - From: Chikanaga Tomoyuki - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67658 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dad3047659a503d7e6f4ded362f8d58ecca20b1f - Author: kazu - Date: 2019-04-21 11:51:03 +0900 - - Remove redundant cast - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67657 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bb77cc183732cf68e224398c30d8e38d02cab14c - Author: ktsj - Date: 2019-04-21 11:43:31 +0900 - - Add missing tests for p_args - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67656 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1a0990cb143f8988603fe510b8ed840780a77d1f - Author: svn - Date: 2019-04-21 11:33:15 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67655 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 65f1b8118357f48064626702b19561eeb5d9b9c7 - Author: nobu - Date: 2019-04-21 11:33:14 +0900 - - Fix test library name - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67654 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit eeee4f404b9e2dd9cac84de2b30f7bf1ba608c53 - Author: ktsj - Date: 2019-04-21 11:18:28 +0900 - - Remove unnecessary condition - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67653 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ecf4e8fbd7efe33e536bbef8d9e58b3c345dda48 - Author: svn - Date: 2019-04-21 10:39:09 +0900 - - * 2019-04-21 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67652 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 985192f092aa36a88836a51012b7d572bccd5c0e - Author: k0kubun - Date: 2019-04-21 10:06:25 +0900 - - Make README.md similar to README.ja.md [ci skip] - - making safe commit to debug svn hook - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67651 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 838f1f61bfd31861a8ddc470e33cf21ee866ad7b - Author: tenderlove - Date: 2019-04-21 07:25:59 +0900 - - skip test until we can guarantee movement of certain objects - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67650 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3863b7776f68821e5a873fd3a73886a2eb377845 - Author: aycabta - Date: 2019-04-20 18:32:44 +0900 - - Remove IRB's old test files - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67649 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 66ae3bd5599186599af5041dced836087cdeb3bd - Author: tenderlove - Date: 2019-04-20 18:29:19 +0900 - - skip test if mjit is enabled - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67648 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d4a555d441895cc56243b1a411404e324fbcf89f - Author: aycabta - Date: 2019-04-20 18:23:09 +0900 - - Add "require 'stringio'" - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67647 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ffaee7b301abfd451c7c5028602a2184e6a9dd90 - Author: aycabta - Date: 2019-04-20 18:16:16 +0900 - - Use require_relative for tests of Reline - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67646 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7f273ac6d0f05208b5b228da95205e20c0e8286c - Author: aycabta - Date: 2019-04-20 17:51:20 +0900 - - IRB is improved with Reline and RDoc - - Reline is a readline stdlib compatible library. It also supports - multiline input. IRB is improved with Reline and supports multiline. - Besides, supports showing documents when completed. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67645 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 91faab7f1477c65f71aee8324cdeca7b6f19434a - Author: k0kubun - Date: 2019-04-20 16:52:59 +0900 - - Fix wrong critical section label - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67644 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ef73bee8113638199595611240d74d310f8a4f57 - Author: k0kubun - Date: 2019-04-20 16:37:29 +0900 - - Prefix rb_ to MJIT wait call since it's exported - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67643 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e4a0304aef5f2475b6111eca85daee032d88155c - Author: k0kubun - Date: 2019-04-20 16:16:11 +0900 - - Workaround Wercker check which is not working now - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67642 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9c587d22bd31f50a3a07f5024b7376302e902e09 - Author: k0kubun - Date: 2019-04-20 15:54:41 +0900 - - Skip test_find_collided_object on problematic CIs for now - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67641 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 78d3e4396d3c2ca53875fdbc9a24032d6eebf4f6 - Author: tenderlove - Date: 2019-04-20 15:08:54 +0900 - - Make sure the has_remembered_objects flag is correctly set - - Remembered objects can move between pages, so we need to make sure the - flags on the page are set correctly. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67640 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c2b8cd425e80ea75c9f3efd8b5b63f1f235b6b54 - Author: k0kubun - Date: 2019-04-20 14:50:19 +0900 - - Revert "Revert "Skip ISeq reference for stale_units for debugging"" - - This reverts commit b79899b56a9ebadf5c493c4df2419ebf63934381. - - I wanted to test r67638 first. Now let me try this as well. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67639 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b2ffafd2383fef50933a725797b1ea7ae4fbdaea - Author: k0kubun - Date: 2019-04-20 14:48:22 +0900 - - Invalidate JIT-ed code if ISeq is moved by GC.compact - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67638 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b79899b56a9ebadf5c493c4df2419ebf63934381 - Author: k0kubun - Date: 2019-04-20 14:45:56 +0900 - - Revert "Skip ISeq reference for stale_units for debugging" - - This reverts commit 4bd4d4e4cfd164f767e88f844cf10b06faee14b9. - - Sorry, let me test another one first - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67637 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4bd4d4e4cfd164f767e88f844cf10b06faee14b9 - Author: k0kubun - Date: 2019-04-20 14:44:47 +0900 - - Skip ISeq reference for stale_units for debugging - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67636 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 109633b12730484ea23bac5203a8ed6d6d820477 - Author: tenderlove - Date: 2019-04-20 14:11:37 +0900 - - Always pin stack zombie and moved slots - - We should always pin stack zombies and moved - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67635 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b25bf66a8cd34e10f436535c8b9371bca8978a2c - Author: svn - Date: 2019-04-20 14:00:45 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67634 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5d9acf07fb679aab643fd553af8b2469aa145158 - Author: svn - Date: 2019-04-20 14:00:45 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67633 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1686c0d470d56dcd7348351f0d1979d1ca1b4133 - Author: nobu - Date: 2019-04-20 14:00:43 +0900 - - Add `Time#floor` - - [Feature #15653] - [Fix GH-2092] - - From: manga_osyo - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67632 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b914bea88ea0371f0b37781a2d0db03759bd5a7e - Author: k0kubun - Date: 2019-04-20 13:50:21 +0900 - - Check ISeq references in stale_units too - - This is a possible bug from recent "JIT recompile" introduction. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c98d1f182d1b5870272e25b7e636b49849f2c71c - Author: tenderlove - Date: 2019-04-20 13:13:29 +0900 - - add more assertions around moved object - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67630 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 243842f68a97a34a36a7e8c690efe7e18bf81e91 - Author: ktsj - Date: 2019-04-20 12:37:22 +0900 - - Avoid usage of the dummy empty BEGIN node - - Use NODE_SPECIAL_NO_NAME_REST instead. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67629 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 27f75cf3dc74ad70d065a7d8a14dbaa0eeac1023 - Author: k0kubun - Date: 2019-04-20 12:29:20 +0900 - - Update ISeq references in stale_units as well - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67628 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b8b503d657731fc0982c584f8b82f4976ea1283f - Author: yui-knk - Date: 2019-04-20 12:25:36 +0900 - - Add symbol to the result of `RubyVM::AbstractSyntaxTree#children`. - - Add symbol to the result to make pattern match easily. - - For example: - - (1) NODE_MASGN * NODE_SPECIAL_NO_NAME_REST - - ``` - $ ./miniruby -e 'p RubyVM::AbstractSyntaxTree.parse("a, * = b").children[-1].children' - [#, #, :NODE_SPECIAL_NO_NAME_REST] - ``` - - (2) NODE_POSTARG * NODE_SPECIAL_NO_NAME_REST - - ``` - $ ./miniruby -e 'p RubyVM::AbstractSyntaxTree.parse("a, *, _ = b").children[-1].children[-1].children' - [:NODE_SPECIAL_NO_NAME_REST, #] - ``` - - (3) NODE_LASGN * NODE_SPECIAL_REQUIRED_KEYWORD - - ``` - $ ./miniruby -e 'p RubyVM::AbstractSyntaxTree.parse("def a(k:) end").children[-1].children[-1].children[1].children[7].children[0].children' - [:k, :NODE_SPECIAL_REQUIRED_KEYWORD] - ``` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67627 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 91557d0c52de3287a319e241215803989159adcc - Author: tenderlove - Date: 2019-04-20 12:00:49 +0900 - - check the index rather than include - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67626 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 79accaf8d4dda146004eaa9a3477b31448913537 - Author: tenderlove - Date: 2019-04-20 12:00:08 +0900 - - fix strict compile errors - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67625 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c784da17448c40e55cdd231724bfe4bf53da35a1 - Author: tenderlove - Date: 2019-04-20 11:40:41 +0900 - - Update MJIT references - - ISeq can move, so we need to tell MJIT where the new location is. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67624 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6c4fd432d0242647149906f7433a9f5025819d07 - Author: tenderlove - Date: 2019-04-20 10:59:34 +0900 - - Try harder to make objects move - - Sometimes the objects we allocated may not get compacted. This change - is to increase the likelihood that they will move - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67623 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit db14ceae4217a37d40fc676d893e44177bde35b6 - Author: svn - Date: 2019-04-20 10:20:09 +0900 - - * 2019-04-20 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67622 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c74a44d64c20a7f234d0135b492a7d0f06207351 - Author: svn - Date: 2019-04-20 10:20:08 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67621 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 91793b8967e0531bd1159a8ff0cc7e50739c7620 - Author: tenderlove - Date: 2019-04-20 10:19:47 +0900 - - Add `GC.compact` again. - - 🙠- - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67620 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e3d547f6df76a48834cfd9893baf4f51567b3afb - Author: k0kubun - Date: 2019-04-19 22:57:21 +0900 - - Reflect README.md contents to README.ja.md [ci skip] - - I seem to have found the svn hook bug. Let me test that again. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67619 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5b3c099ad2aac985d054c1af9728bdb0eb9b0228 - Author: nobu - Date: 2019-04-19 19:55:07 +0900 - - Removed extra empty lines - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67618 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4cfc6cedc46c3bf95497290092a63028d6b4e3b2 - Author: nobu - Date: 2019-04-19 19:45:16 +0900 - - template/prelude.c.tmpl: allow UTF-8 characters - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67617 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f1a33775494f1b81d6f6722817f1c7e5db61a27c - Author: k0kubun - Date: 2019-04-19 18:23:13 +0900 - - Use similar line length in README [ci skip] - - still debugging svn hook... - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67616 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit af56793a8d7e120e33b9327a8d52c18a6a1c76d8 - Author: k0kubun - Date: 2019-04-19 18:09:46 +0900 - - README.md simplified [ci skip] - - - "do system management tasks" -> "manage the system" - - "talk about" -> "discuss" - - "The URL of the Ruby home page is:" and "This is what you need to do to compile and install Ruby:" are removed because of redundancy. - - "Bugs reports should be filed" -> "Bugs should be reported" - - [Fix https://github.com/ruby/ruby/pull/2004] - - From: yzzhang-cs - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67615 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1845c9d9bae9bc0731bc5d58ecc0f5df4ea7c33d - Author: k0kubun - Date: 2019-04-19 18:00:26 +0900 - - Revert "README.md simplified [ci skip]" - - This reverts commit 41fabbcc0ef7f6e025c1af8bf0387ee9e38d655f. - - because I had a mistake in comment message. - (to commit svn hook again) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67614 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4dd1cf3b27f5a92045176129ff2d4f5d8cea466a - Author: nobu - Date: 2019-04-19 17:53:40 +0900 - - time.c: added in: option to Time.now - - * time.c (time_s_now): added in: option to Time.now as well as - Time.at. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67613 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fb042e0f0c6c7380ca1c68b3a8cb4b523ce164eb - Author: svn - Date: 2019-04-19 17:44:23 +0900 - - * remove trailing spaces. [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67612 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 41fabbcc0ef7f6e025c1af8bf0387ee9e38d655f - Author: k0kubun - Date: 2019-04-19 17:44:22 +0900 - - README.md simplified [ci skip] - - - "do system management tasks" -> "manage the system" - - "talk about" -> "discuss" - - "The URL of the Ruby home page is:" and "This is what you need to do to compile and install Ruby:" are removed because of redundancy. - - "Bugs reports should be filed" -> "Bugs should be reported" - - [Fix GH-${pr_id}] - - From: yzzhang-cs - - (merging some safe PR to test svn hook) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67611 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 390ea5442089b8507a7d88c7d8756049bfcc0d4a - Author: tenderlove - Date: 2019-04-19 15:21:55 +0900 - - Only mark the superclass if there is one - - Some classes don't have a superclass, so we should check to see if it's - there before marking. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 14626ed20a6677ab767e764c9edff83f94872f1a - Author: nobu - Date: 2019-04-19 07:30:01 +0900 - - fake.rb.in: split by whitespaces not to be affected by -F option - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67609 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c3c4e411ebd94403055360506ccac248114eebba - Author: nobu - Date: 2019-04-19 07:24:03 +0900 - - parse.y: suppress warning - - * parse.y (parser_append_options): explicitly pass $; when auto - splitting, to suppress the warning for non-nil $;. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67608 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 396c1846fa8ba1f513cfe3c846e383e4b46d2e53 - Author: svn - Date: 2019-04-19 06:57:09 +0900 - - * 2019-04-19 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67607 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3ee0648dc7a5465b2cbadd7246fc2edbd676d759 - Author: nobu - Date: 2019-04-19 06:56:55 +0900 - - io.c: warn non-nil $, - - * array.c (rb_ary_join_m): warn use of non-nil $,. - - * io.c (rb_output_fs_setter): warn when set to non-nil value. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67606 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4751caecc357c313c3c81c3d422a3cbc880c6ecc - Author: hsbt - Date: 2019-04-18 21:56:47 +0900 - - Removed deprecated executable from bundler upstream. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67605 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b86d87c81a6b2f2b494e1b23af22194c46864fb5 - Author: nobu - Date: 2019-04-18 18:56:03 +0900 - - Suppress warnings - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67604 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4d1f86a1ffceb3323b4e2fac82dfc40c5a382e9e - Author: nobu - Date: 2019-04-18 18:34:40 +0900 - - string.c: warn non-nil $; - - * string.c (rb_str_split_m): warn use of non-nil $;. - - * string.c (rb_fs_setter): warn when set to non-nil value. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67603 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit eb3d3dfcc1ad61cb3040acfdf41f71c228b892e4 - Author: svn - Date: 2019-04-18 13:55:52 +0900 - - * 2019-04-18 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67602 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 80282c76a3f7caa22bc06e153a34ae69a35cc4ee - Author: kou - Date: 2019-04-18 13:55:49 +0900 - - Take over strscan maintenance - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67601 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 286f0b8ae3c30b5911199924a1779ca045afb079 - Author: hsbt - Date: 2019-04-17 22:20:02 +0900 - - Added rubygems and bundler entries. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67600 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 828353334afb893456cffdb2daca991e985af8a9 - Author: svn - Date: 2019-04-17 18:41:55 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67599 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 744e5df7156c8bb3fea61bacb1bf27d3d8698548 - Author: tenderlove - Date: 2019-04-17 18:41:41 +0900 - - Reverting compaction for now - - For some reason symbols (or classes) are being overridden in trunk - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67598 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f399134e8ff61faa81d624e2dd2e05ed61d32af1 - Author: k0kubun - Date: 2019-04-17 18:24:48 +0900 - - NEWS: note about recent changes around JIT [ci skip] - - This diff is backported from the upcoming preview release note. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67597 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0f31971ad3e846cc8d9fa3258e8b9abfe85f0f1f - Author: kazu - Date: 2019-04-17 17:53:32 +0900 - - Suppress warning in assertion too - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67596 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a2366a15bad75fb2ddec63d36aff4af4be14ff14 - Author: kazu - Date: 2019-04-17 17:39:52 +0900 - - Suppress warnings in `make test-all` - - suppress "warning: Pattern matching is experimental, and the behavior may change in future versions of Ruby!" - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67595 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ffbcf9f842d228e4a95b13f415dfc4e141e8f4f0 - Author: nobu - Date: 2019-04-17 16:35:29 +0900 - - downloader.rb: enable cache files - - * tool/downloader.rb (Downloader::Unicode.download): enable cache - files when index.html has not been modified since the previous - download, even if beta version. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67594 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c576f14039c920e40e6849657e6dd87772f6f7da - Author: nobu - Date: 2019-04-17 16:35:27 +0900 - - common.mk: download data and property files together - - * common.mk (update-unicode-files): download data and property - files together, not to download index html twice. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bd698312fa96a5a5232eb1f1943bf7eac997aa46 - Author: yui-knk - Date: 2019-04-17 16:15:08 +0900 - - Fix the format of NODE_IN node - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67592 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5141398ff060bdaa437418cc35adcbfe0f886cb0 - Author: nobu - Date: 2019-04-17 16:09:28 +0900 - - downloader.rb: use File.read instead of IO.read - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67591 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8e6c1a186c2c1ccfce2788ba307dae35e2dd03a8 - Author: nobu - Date: 2019-04-17 16:09:24 +0900 - - common.mk: update auxiliary and emoji files - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67590 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fc9f19abe853bcef2b348e2d6d7c555b677ab28d - Author: svn - Date: 2019-04-17 15:48:26 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67589 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit da8cd2dc30c26e9df47b743e7d1c16025e255628 - Author: svn - Date: 2019-04-17 15:48:07 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67588 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9c9db64d7e9058dc6fc7ead3791b259685798806 - Author: ktsj - Date: 2019-04-17 15:48:05 +0900 - - Define Struct#deconstruct - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67587 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9738f96fcfe50b2a605e350bdd40bd7a85665f54 - Author: ktsj - Date: 2019-04-17 15:48:03 +0900 - - Introduce pattern matching [EXPERIMENTAL] - - [ruby-core:87945] [Feature #14912] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67586 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b077654a2c89485c086e77c337d30a11ff3781c3 - Author: svn - Date: 2019-04-17 15:16:39 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67585 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 281a22a39864602938cd881265243a3bb60df792 - Author: tenderlove - Date: 2019-04-17 15:16:35 +0900 - - Super should be marked regardless of whether or not ext exists - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67584 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7bd58a4e6d214b78645f0a15dcc691d3faaa1acf - Author: tenderlove - Date: 2019-04-17 15:13:11 +0900 - - update super even if there is no ext - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67583 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e1eb54b99d592c460fea4b0f897f5e8e61c96c07 - Author: nobu - Date: 2019-04-17 14:34:46 +0900 - - string.c: improve splitting into chars - - * string.c (rb_str_split_m): improve splitting into chars by an - empty string, without a regexp. - - Comparison: - to_chars-1 - built-ruby: 1273527.6 i/s - compare-ruby: 189423.3 i/s - 6.72x slower - - to_chars-10 - built-ruby: 120993.5 i/s - compare-ruby: 37075.8 i/s - 3.26x slower - - to_chars-100 - built-ruby: 15646.4 i/s - compare-ruby: 4012.1 i/s - 3.90x slower - - to_chars-1000 - built-ruby: 1295.1 i/s - compare-ruby: 408.5 i/s - 3.17x slower - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67582 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 62c07674e06443075872bdc11662de6408bd00d2 - Author: tenderlove - Date: 2019-04-17 14:19:05 +0900 - - make verification more strict - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67581 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dbc9f43cb38acc037b152949a9f7b98362a6dcac - Author: tenderlove - Date: 2019-04-17 13:05:29 +0900 - - call verification method in addition to compaction - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67579 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c54f9a5b101e709e98bc8306643feaddc8a3d934 - Author: svn - Date: 2019-04-17 12:17:42 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67578 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit aee9f24973271d8602cd6924266b1e6fffad3f8e - Author: svn - Date: 2019-04-17 12:17:42 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67577 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3c55b643aec09bbe779dab25b2397947eded2b9b - Author: tenderlove - Date: 2019-04-17 12:17:25 +0900 - - Adding `GC.compact` and compacting GC support. - - This commit adds the new method `GC.compact` and compacting GC support. - Please see this issue for caveats: - - https://bugs.ruby-lang.org/issues/15626 - - [Feature #15626] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67576 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fcd679ed11e3e801431f2f931dbe925edb8df0bf - Author: k0kubun - Date: 2019-04-17 02:02:35 +0900 - - Recompile without method inlining - - if cancel happens in an inlined method. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67575 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d71b78575b08f55d35194b2c091719b2c4463ea3 - Author: k0kubun - Date: 2019-04-17 02:02:16 +0900 - - Introduce frame-omitted method inlining - - for ISeq including only leaf and no-handles_sp insns except leaf. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67574 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b914166fcdba3faf5d4cb5e3a18d49691546ce21 - Author: svn - Date: 2019-04-17 02:01:07 +0900 - - * 2019-04-17 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b0614decfc2c756abd37347477f262bb09c27233 - Author: k0kubun - Date: 2019-04-17 02:01:05 +0900 - - Implement single-level basic method inlining in JIT - - "Basic" means it does not omit a call frame. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67572 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dcf5c19c9f89d732da70a1a16a2fe60cd1999bcc - Author: svn - Date: 2019-04-16 08:58:09 +0900 - - * 2019-04-16 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67569 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3f7c6aea3e7bd8cc8b70c2274659250f1b877de5 - Author: knu - Date: 2019-04-16 08:58:06 +0900 - - Mention SNI support in Net::IMAP - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67568 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e68495e5f4dfd466ad56f745502d1d78cdba07de - Author: k0kubun - Date: 2019-04-15 23:38:57 +0900 - - Carve out mjit_compile_body - - This refactoring is needed for implementing inlining later. - I've had this since long ago and it has conflicted sometimes. So let me - just commit this now. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67566 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 246723a34ce5024e1d018cee4327dcce1bbd55c6 - Author: knu - Date: 2019-04-15 19:52:34 +0900 - - Support SNI (Reapplying r67488) - - This fixes connecting using TLS 1.3 to imap.gmail.com - - [Fix GH-2077] [Feature #15594] - - From: Marc-Antoine Perennou - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67563 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3791bdf08084b40f0e6f499a83715639c7d25b1e - Author: kou - Date: 2019-04-15 11:05:03 +0900 - - Import CSV 3.0.9 - - This fixes test failures on Windows. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67561 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e3b6c7c7ebca1b051dbaa6f33494e92f5638fcc9 - Author: kou - Date: 2019-04-15 06:01:51 +0900 - - Import CSV 3.0.8 - - This includes performance improvements and backward incompatibility - fixes. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67560 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fb96811d15f83c6b692e8e00d458eef32032af6a - Author: k0kubun - Date: 2019-04-15 00:25:11 +0900 - - Drop obsoleted debugging output [ci skip] - - I confirmed that it's working now in - https://dev.azure.com/rubylang/ruby/_build/results?buildId=396&view=logs&jobId=8c5967c9-8e3a-5773-c80c-34c55d5c3051 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67559 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ad9c5c5db69a1e94a980a5b0d09bacca8b0c647e - Author: svn - Date: 2019-04-15 00:13:50 +0900 - - * 2019-04-15 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67558 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 17b606d8b356d732dbc0fb38c9ab05a5a28d3939 - Author: k0kubun - Date: 2019-04-15 00:13:49 +0900 - - Fix broken variable propagation on Azure - - It looks like the old definition was not working as intended... - https://dev.azure.com/rubylang/ruby/_build/results?buildId=394 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67557 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 816c5323fe82a7a4502f35ab8252ed56a6251688 - Author: marcandre - Date: 2019-04-14 22:47:24 +0900 - - OpenStruct: improve error message when passing wrong number of arguments. - - Patch by Lisa Ugray (issue #15515) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67556 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1119bb4794b32fc0edfc95ba12f02bf151c170c5 - Author: k0kubun - Date: 2019-04-14 22:42:13 +0900 - - Debug bundled-gems allow_failures - - it seems not working in - https://dev.azure.com/rubylang/ruby/_build/results?buildId=392 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67555 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ead870d7c3b95bc51bd404541e087352ed7bf464 - Author: k0kubun - Date: 2019-04-14 22:29:22 +0900 - - Do not require Ruby 2.4 for baseruby - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67554 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b041cf55bbd39ca690843b455e76e914869b8753 - Author: k0kubun - Date: 2019-04-14 22:10:14 +0900 - - Fix missing debug counter name - - r67550 introduced the typo - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67553 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 009a0a3870656268d00e98a12311bfcc70f54a18 - Author: k0kubun - Date: 2019-04-14 21:49:20 +0900 - - Avoid crash on logging GC-ed ISeq - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67552 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e45c9a40a2ee2ca241565f5953af116cd2b5ab29 - Author: k0kubun - Date: 2019-04-14 21:40:44 +0900 - - Do not execute MJIT copy job when ISeq is GC-ed - - I assumed that ISeq is never GC-ed by `in_jit` + `mjit_mark` on copy job - ISeq, but unfortunately I found SEGV on `mjit_copy_job_handler` in which - iseq->body was somehow Qnil. And it seems to be fixed by disabling the - job when `mjit_free_iseq` is called for the ISeq. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67551 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 12225347198344590af4a4a55ac1f90591a21dac - Author: k0kubun - Date: 2019-04-14 21:25:23 +0900 - - Share optimization cancel handlers - - $ benchmark-driver benchmark.yml --rbenv='before --jit;after --jit' -v --output=all --repeat-count=12 - before --jit: ruby 2.7.0dev (2019-04-14 trunk 67549) +JIT [x86_64-linux] - after --jit: ruby 2.7.0dev (2019-04-14 trunk 67549) +JIT [x86_64-linux] - last_commit=Share optimization cancel handlers - Calculating ------------------------------------- - before --jit after --jit - Optcarrot Lan_Master.nes 69.55360655447375 74.15329176797863 fps - 73.74545038318978 79.60903046141544 - 75.85637357897092 82.00930075612054 - 77.10594124022951 82.56228187301674 - 78.67350527368366 83.37512204205953 - 79.97235230767613 83.41521927993719 - 81.03050342478066 84.20227901852776 - 81.61308297895094 84.73733526226468 - 82.06805141753206 85.27884867863791 - 82.46493179193394 85.36558922650367 - 83.85259832896313 85.39993587223481 - 84.02325292922997 85.63649355214602 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67550 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 04ac63fe57d3643dac0c0779d32f0b89ec9e2f15 - Author: k0kubun - Date: 2019-04-14 18:31:24 +0900 - - Prefer uintptr_t over ptrdiff_t for i686 - - as debugged in PR - - [close https://github.com/ruby/ruby/pull/2130] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67549 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c5570cf9bde992f3d14a6382f1038fb422182f45 - Author: k0kubun - Date: 2019-04-14 17:53:19 +0900 - - Detect send-compatible opt insns automatically - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67548 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b75bb06e00ab4d8b77ebd9b476ecf945f8b7f72a - Author: k0kubun - Date: 2019-04-14 17:33:43 +0900 - - Allow falling back to non-inlined opt_send_without_block - - for opt_aref with inline cache to minimize the possibility of JIT cancel. - - Also opt_aset and opt_mod are added for the targets. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67547 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 18b5148215df99cebb0ba27f45f0dc7e0599737a - Author: k0kubun - Date: 2019-04-14 16:12:44 +0900 - - Add debug counter for MJIT stale_units - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67546 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f7035dd3ff665dce14657cf244c10c2d4b2b43c7 - Author: k0kubun - Date: 2019-04-14 16:10:34 +0900 - - Do not reset non-increment-only counters - - to prevernt underflow. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67545 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5ce28c0642591a950e5757150137253cb8d0b9a9 - Author: k0kubun - Date: 2019-04-14 15:57:21 +0900 - - Add RubyVM.reset_debug_counters when RB_DEBUG_COUNTER - - is defined. It's 0 by default and so it disappears on actual build. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67544 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 57f9a700d719c0ab0a9ade41ebecac022a2a06d4 - Author: kazu - Date: 2019-04-14 15:52:37 +0900 - - Add more debug print for random CI failure on osx Travis - - see r67347 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67543 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3ac518f9bdd413cf2217b101bd5c62deadfbee2a - Author: hsbt - Date: 2019-04-14 15:05:27 +0900 - - Enabled to some bundler examples again. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67542 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2e8b9aba9bef6c913e5b2de25b24026943438519 - Author: hsbt - Date: 2019-04-14 15:03:58 +0900 - - Skip to failing examples on ruby core repository. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67541 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 59fa1232045b1a19c5beae8d8a3b51b66b1aeb2d - Author: hsbt - Date: 2019-04-14 15:02:47 +0900 - - Added rspec dependency for bundler examples. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67540 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 68ddd4d300e9a88737c4f37af74e1a0312949b2f - Author: hsbt - Date: 2019-04-14 15:01:35 +0900 - - Merge Bundler 2.1.0.pre.1 as developed version from upstream. - - https://github.com/bundler/bundler/commit/a53709556b95a914e874b22ed2116a46b0528852 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67539 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d636809c057432e8d42abe30c6c6785eb0721d77 - Author: k0kubun - Date: 2019-04-14 14:52:14 +0900 - - Revert "Try to set false explicitly" - - This reverts commit a1b5d20068a9b1859b383b249e510cd33d196e4a. - - Revert "Revert "Skip recompiling tests on i686 Linux"" - - This reverts commit 7b88a9207b97b94bc3c3be35084c742296f4aff2. - - Revert "Simplify matrix for debugging" - - This reverts commit e85d6c5c5e62dde37c6f6ffdb7125b9008b9ebfa. - - Sorry, these 3 commits were under debugging in - https://github.com/ruby/ruby/pull/2129 but accidentally merged by using - `git svn dcommit` instead of `git push` to the topic branch :bow: - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67538 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a1b5d20068a9b1859b383b249e510cd33d196e4a - Author: k0kubun - Date: 2019-04-14 14:48:40 +0900 - - Try to set false explicitly - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67537 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7b88a9207b97b94bc3c3be35084c742296f4aff2 - Author: k0kubun - Date: 2019-04-14 14:48:39 +0900 - - Revert "Skip recompiling tests on i686 Linux" - - This reverts commit 19513c88d5f923abb7f226520192aef9f3fcc1c7. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67536 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e85d6c5c5e62dde37c6f6ffdb7125b9008b9ebfa - Author: k0kubun - Date: 2019-04-14 14:48:38 +0900 - - Simplify matrix for debugging - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67535 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 661cefc5812b5f206b2af9640d7ad2e6efd0913e - Author: k0kubun - Date: 2019-04-14 14:40:18 +0900 - - Fix typo in platform matcher - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67534 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fa13bb1a6f0894d92b85337385058330eb071eea - Author: k0kubun - Date: 2019-04-14 14:26:46 +0900 - - Unify comment styles across MJIT sources - - I'm writing `//` comments in newer MJIT code after C99 enablement - (because I write 1-line comments more often than multi-line comments - and `//` requires fewer chars on 1-line) and then they are mixed - with `/* */` now. - - For consistency and to avoid the conversion in future changes, let me - finish the rewrite in MJIT-related code. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67533 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 19513c88d5f923abb7f226520192aef9f3fcc1c7 - Author: k0kubun - Date: 2019-04-14 14:26:23 +0900 - - Skip recompiling tests on i686 Linux - - somehow they are filing like - https://travis-ci.org/ruby/ruby/jobs/519830085 - but they are not so fatal. - - Let me just skip them for now and fix tests afterwards. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67532 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d6d8fc2421c8171ef4f57d61c5b544e05ec5d468 - Author: svn - Date: 2019-04-14 13:52:04 +0900 - - * 2019-04-14 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67531 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9b6b4674d77da2ef3f9f15095af9e39cc966b882 - Author: k0kubun - Date: 2019-04-14 13:52:02 +0900 - - Recompile JIT-ed code without optimization - - based on inline cache when JIT cancel happens by that. - - This feature was in the original MJIT implementation by Vladimir, but on - merging MJIT to Ruby it was removed for simplification. This commit adds - the functionality again for the following benchmark: - - https://github.com/benchmark-driver/misc/blob/52f05781f65467baf895bf6ba79d172c9b0826fd/concurrent-map/bench.rb - (shown float is duration seconds. shorter is better) - - * Before - ``` - $ INHERIT=0 ruby -v bench.rb - ruby 2.7.0dev (2019-04-13 trunk 67523) [x86_64-linux] - -- - 1.6507579649914987 - - $ INHERIT=0 ruby -v --jit bench.rb - ruby 2.7.0dev (2019-04-13 trunk 67523) +JIT [x86_64-linux] - -- - 1.5091587850474752 - - $ INHERIT=1 ruby -v bench.rb - ruby 2.7.0dev (2019-04-13 trunk 67523) [x86_64-linux] - -- - 1.6124781150138006 - - $ INHERIT=1 ruby --jit -v bench.rb - ruby 2.7.0dev (2019-04-13 trunk 67523) +JIT [x86_64-linux] - -- - 1.7495657080435194 # <-- this - ``` - - * After - ``` - $ INHERIT=0 ruby -v bench.rb - ruby 2.7.0dev (2019-04-13 trunk 67523) [x86_64-linux] - last_commit=Recompile JIT-ed code without optimization - -- - 1.653559010999743 - - $ INHERIT=0 ruby --jit -v bench.rb - ruby 2.7.0dev (2019-04-13 trunk 67523) +JIT [x86_64-linux] - last_commit=Recompile JIT-ed code without optimization - -- - 1.4738391840364784 - - $ INHERIT=1 ruby -v bench.rb - ruby 2.7.0dev (2019-04-13 trunk 67523) [x86_64-linux] - last_commit=Recompile JIT-ed code without optimization - -- - 1.645227018976584 - - $ INHERIT=1 ruby --jit -v bench.rb - ruby 2.7.0dev (2019-04-13 trunk 67523) +JIT [x86_64-linux] - last_commit=Recompile JIT-ed code without optimization - -- - 1.523708809982054 # <-- this - ``` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67530 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 088df9c8c26bcd7ad4de6637d9e734c26e7b72a0 - Author: k0kubun - Date: 2019-04-13 15:55:35 +0900 - - Revert "GET_CFP and ec->cfp are different" - - This reverts commit 30f71f4768e0babc60f5be6ca235d2c40268bc27. - - I've also overlooked we're doing RESTORE_REGS()... - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67523 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 30f71f4768e0babc60f5be6ca235d2c40268bc27 - Author: k0kubun - Date: 2019-04-13 15:27:52 +0900 - - GET_CFP and ec->cfp are different - - When reviewing r66565, I overlooked that `GET_ISEQ()` and `GET_EP()` are - NOT `ec->cfp->iseq` and `ec->cfp->ep` but `reg_cfp->iseq` and - `reg_cfp->ep`. - - `vm_push_frame` updates `ec->cfp` and in this case we want to check the - callee's cfp and so `ec->cfp` should be checked instead. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67522 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e7f7aa87420d6542b8e4a347a037e4ce293fb845 - Author: svn - Date: 2019-04-13 09:56:14 +0900 - - * 2019-04-13 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67521 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a73dae4c53f749223a744bdd5e2179b6b877d0e2 - Author: svn - Date: 2019-04-13 09:56:14 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67520 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d3da5fbd30e174c5737ec09c6896db7e81691714 - Author: marcandre - Date: 2019-04-13 09:56:12 +0900 - - Proc.new: change deprecation warning for clarity (issue #15539) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67519 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 95a82766306641595179e23dbac3d6992b919460 - Author: svn - Date: 2019-04-12 23:32:35 +0900 - - * 2019-04-12 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67518 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 39b04bc698c8ebebc00ca38ffda01473bfbdc43b - Author: nagachika - Date: 2019-04-12 23:32:31 +0900 - - [DOC] Add `ifnone` example to `find` documentation [ci skip] - [Fix GH-2110] - - From: OKURA Masafumi - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67517 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6f866fd9eacd69520918b4e96617a2f43f4d44ec - Author: svn - Date: 2019-04-11 19:36:38 +0900 - - * 2019-04-11 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 025343654dca186444e1eafc3760ad895366c46d - Author: nobu - Date: 2019-04-11 19:36:37 +0900 - - Get rid of a magic number - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67512 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 47c82df27ff73c5181f7bd4505b4c98a96f15a0c - Author: nobu - Date: 2019-04-11 19:36:36 +0900 - - Share the exception local ID table - - [Fix GH-2115] - - From: Lourens Naudé - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67511 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit cf781b0871cb8d6b7135fa74d9549ca1cdb2a846 - Author: k0kubun - Date: 2019-04-10 23:56:17 +0900 - - Set a meaningful name to all Azure jobs - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67510 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 34af06037435cba85cafb0e8b24d37904ad7cced - Author: k0kubun - Date: 2019-04-10 23:47:18 +0900 - - Try uncommenting deb-src - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67509 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 724bc97d4bca5ee12c84926faf4df49d134d7e42 - Author: k0kubun - Date: 2019-04-10 23:42:18 +0900 - - Debug latest sources.list on Azure - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67508 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1d955861ed892ead71e2e5542235d5d0f37b8276 - Author: k0kubun - Date: 2019-04-10 23:34:53 +0900 - - Try removing apt update - - trying to fix - https://dev.azure.com/rubylang/ruby/_build/results?buildId=363 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67507 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 82632d4c0c117a7728293ff955e3527487230bc1 - Author: mame - Date: 2019-04-10 21:57:39 +0900 - - ext/openssl/ossl_bn.c (ossl_bn_initialize): get rid of SEGV - - OpenSSL::BN.new(nil, 2) dumped core. - - [ruby-core:92231] [Bug #15760] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67506 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 54b93ef1ac4c81730508740ae213f6f52b0bec94 - Author: nobu - Date: 2019-04-10 21:43:34 +0900 - - compile.c: name a hidden local variable as a predefined ID - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67505 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b9e52ef8b6a004082fa341ee9c6bbbd5168e7daf - Author: nobu - Date: 2019-04-10 21:43:33 +0900 - - Adjusted styles - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67504 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d8442c43066fe2ff875c74af5c8eda35437adb1e - Author: nobu - Date: 2019-04-10 21:43:32 +0900 - - parse.y: fix fatal messages - - * parse.y (rb_parser_fatal): fix "parser" in the message which was - replaced accidentally. it is not the argument name. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67503 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c84bdda47a9710a1ba0db1c847db8e224d0eaaf9 - Author: nobu - Date: 2019-04-10 21:43:31 +0900 - - timev.h: dummy definition for TAGS - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67502 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 37994bc5322c02a21e8905d373bef802cac91f72 - Author: svn - Date: 2019-04-10 18:16:01 +0900 - - * 2019-04-10 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67501 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 481481b81aaca7cc5de3982784f68981335005a7 - Author: svn - Date: 2019-04-10 18:16:00 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67500 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 25c1fd3b9037d9eb39596bb994eeabed812adada - Author: kazu - Date: 2019-04-10 18:15:21 +0900 - - Reverting all commits from r67479 to r67496 because of CI failures - - Because hard to specify commits related to r67479 only. - So please commit again. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67499 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0cc2ffbc1bf135a3b7a8656b9242e87b1ad96d6c - Author: svn - Date: 2019-04-10 17:03:48 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67498 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 83fc324d1dfb2bec7d683509e25e3cc17dbecf18 - Author: mame - Date: 2019-04-10 17:03:47 +0900 - - ext/openssl/ossl_bn.c (ossl_bn_initialize): get rid of SEGV - - OpenSSL::BN.new(nil, 2) dumped core. - - [ruby-core:92231] [Bug #15760] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67497 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 91db3b6c6b0daff732c0bacfcc4db397f1df4a42 - Author: nobu - Date: 2019-04-10 16:18:25 +0900 - - compile.c: name a hidden local variable as a predefined ID - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67496 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b8e3a4bd2c3e5c508e6bd48f6686969c085042ce - Author: nobu - Date: 2019-04-10 15:44:43 +0900 - - id_table.c: use NULL as ID* instead of Qundef - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67495 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 33721b4d3306b68188ea253eb0cd717dfa71f917 - Author: nobu - Date: 2019-04-10 15:44:42 +0900 - - vm_method.c: fix a warning - - * vm_method.c (rb_add_method_iseq): use rb_method_iseq_t, as - rb_method_definition_set refers, with a cast to suppress a - warning. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67494 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5ae753dfa3632a8bc4a4141ff67e8fc9554ca7a0 - Author: nobu - Date: 2019-04-10 15:44:41 +0900 - - Adjusted styles - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67493 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit cc02df324f74fc84b9eae1e66bdf38f4422c249b - Author: nobu - Date: 2019-04-10 14:12:33 +0900 - - parse.y: fix fatal messages - - * parse.y (rb_parser_fatal): fix "parser" in the message which was - replaced accidentally. it is not the argument name. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e86bf9a4d768df94c084c3cc8c0786bacad0f31a - Author: nobu - Date: 2019-04-10 10:34:44 +0900 - - timev.h: dummy definition for TAGS - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67491 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9e448d2fd7490636a9c3553f44d7db5334b04f39 - Author: nobu - Date: 2019-04-10 10:18:01 +0900 - - compile.c: cast iseqs to suppress warnings - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d099eabbb7c0d493dbf6c665aceaf4738fc68d0e - Author: tenderlove - Date: 2019-04-10 08:48:17 +0900 - - Set a write barrier between iseq and mark objects - - ISeq pins references in the mark array during compile, so it manually - marks references in the mark_ary. This was causing write barrier - misses, so we need to add a write barrier when pushing on the mark - array. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67489 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e553d94f01ab5c101c26627132ed12e30a00e8f7 - Author: shugo - Date: 2019-04-10 08:35:02 +0900 - - Support SNI - - This fixes connecting using TLS 1.3 to imap.gmail.com - - [Fix GH-2077] [Feature #15594] - - From: Marc-Antoine Perennou - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 73f891f1a5dafb1709b333d953ad8b50af7ee1f9 - Author: tenderlove - Date: 2019-04-10 08:23:39 +0900 - - fix RMoved definition location - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67487 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 70cd493b050f6328f2dbe43dad6741d9f0a96d92 - Author: tenderlove - Date: 2019-04-10 08:23:33 +0900 - - Don't fail the build if we can't get objects to move - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67486 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e900bba9454f8d1a75ac5aa68a15ac21e04c5340 - Author: tenderlove - Date: 2019-04-10 08:03:40 +0900 - - Pin weakmap references - - Weak map references can't move because the st_table needs their address - as a key. But, we also need to remove T_NONE from the map so they - aren't reused. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67485 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b84b8adc8910a877bf9217f95b5bfb0eea268e5a - Author: tenderlove - Date: 2019-04-10 06:40:07 +0900 - - Just a check to see what is breaking in CI - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67484 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e385c159da9338b14ab7fb67ce8d8398ab069d5a - Author: tenderlove - Date: 2019-04-10 06:13:32 +0900 - - Add error globals to mark list so they don't move - - JSON gem is referencing constants defined in Ruby then keeping a - reference as a global. We need to register these globals so they stay - pinned. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67483 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 41f5237ed19d5e8d471d441e2cbfc3063f58b110 - Author: tenderlove - Date: 2019-04-10 05:47:36 +0900 - - Try to make compaction more likely - - This commit tries to make compaction more likely by allocating some - objects and then throwing them away - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67482 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ca9733dc02213211a4e6fd767195cd7de36762c0 - Author: svn - Date: 2019-04-10 05:32:22 +0900 - - * 2019-04-10 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67481 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2d912017d7617ba9d9aff9b6ef52591e4b028e6b - Author: svn - Date: 2019-04-10 05:32:22 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67480 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3ef4db15e95740839a0ed6d0224b2c9562bb2544 - Author: tenderlove - Date: 2019-04-10 05:32:04 +0900 - - Adding `GC.compact` and compacting GC support. - - This commit adds the new method `GC.compact` and compacting GC support. - Please see this issue for caveats: - - https://bugs.ruby-lang.org/issues/15626 - - [Feature #15626] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67479 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c09e35d7bbb5c18124d7ab54740bef966e145529 - Author: nobu - Date: 2019-04-09 22:08:30 +0900 - - NEWS: [DOC] markup hyphens [ci skip] - - * NEWS: [DOC] markup command line options, not to convert - successive hyphens to an en-dash unintentionally. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67478 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ed958ef37ef85f7e2dcaf444ccb156f4bf611bce - Author: nobu - Date: 2019-04-09 22:08:29 +0900 - - NEWS: [DOC] fold lines [ci skip] - - * NEWS: [DOC] fold lines not to make the BTS references wrong - links, without a backslash. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67477 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a2429de63ce82c48a2c08ec4b0f9e89f700345cf - Author: duerst - Date: 2019-04-09 18:41:00 +0900 - - mention support for Unicode Version 12.1.0 (issue #15195) in NEWS - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67476 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 49255fd703a20f7a02eb3ba23ed63350a403072b - Author: svn - Date: 2019-04-09 10:27:37 +0900 - - * 2019-04-09 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67475 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 320c98b436b5277678907b9ba32e4c6cdd3678a0 - Author: nobu - Date: 2019-04-09 10:27:36 +0900 - - date: support for Reiwa, new Japanese era - - [Feature #15742] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67474 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 63e66f08b6b524aff2bce99e30ef4fb343b2fe30 - Author: nobu - Date: 2019-04-09 10:27:35 +0900 - - date_core.c: [DOC] Heisei will be assumed if no-era [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67473 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d10451f3fd51f577e704db770de48d05044eb45c - Author: nobu - Date: 2019-04-08 22:47:37 +0900 - - object.c: fix searching nested const paths - - * object.c (rb_mod_const_get, rb_mod_const_defined): nested const - paths should not search from toplevel constants. - [ruby-core:92202] [Bug #15758] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67472 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e1b592b508c72a56ae012869d97fe1580ff87246 - Author: nobu - Date: 2019-04-08 22:47:36 +0900 - - test_module.rb: fix a typo - - * test/ruby/test_module.rb (TestModule#test_nested_get): fix a - typo. nested module's name is a qualified path. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67471 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7a4c39c5f25c7bed475f65e45c76a646ad993d8b - Author: nobu - Date: 2019-04-08 14:06:43 +0900 - - struct.c: force hash values fixable - - * struct.c (rb_struct_hash): force hash values fixable on LLP64 - environment. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67470 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b29f55c5acc4addabc7ffa94e022e40b36255abb - Author: svn - Date: 2019-04-08 12:26:29 +0900 - - * 2019-04-08 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67469 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ae6c195f30f76b1dc4a32a0a91d35fe80f6f85d3 - Author: nobu - Date: 2019-04-08 12:26:29 +0900 - - range.c: force hash values fixable - - * range.c (range_hash): force hash values fixable on LLP64 - environment. [ruby-core:92194] [Bug #15757] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67468 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b5baceda18fd6e93f8db29f79055a004f6419e1d - Author: nobu - Date: 2019-04-08 12:26:28 +0900 - - range.c: force hash values fixable - - * range.c (method_hash): force hash values fixable on LLP64 - environment. [ruby-core:92191] [Bug #15756] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67467 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 06eece87c6e8b969a73aa80ac659f09eb9dcbbcb - Author: nobu - Date: 2019-04-08 12:26:27 +0900 - - enumerator.c: force hash values fixable - - * enumerator.c (arith_seq_hash): force hash values fixable on - LLP64 environment. [ruby-core:92190] [Bug #15755] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67466 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 012faccf040344360801b0fa77e85f9c8a3a4b2c - Author: eregon - Date: 2019-04-07 20:26:27 +0900 - - doc/signals.rdoc: Clarify a bit where Signal.trap handlers are executed - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67465 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b7c4e6d11c9d29ed4b5efa7606dc400216827bc4 - Author: nobu - Date: 2019-04-07 20:14:06 +0900 - - gc.c: missing break - - * gc.c (obj_memsize_of): T_RATIONAL and T_COMPLEX cannot be an - imemo. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67464 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 575735664b1b77924ffdc9faf87c44c67d9be363 - Author: k0kubun - Date: 2019-04-07 17:18:09 +0900 - - Add debug message for test_rinda crash - - We often see test-all worker crash on test_rinda, but for now we even - can't know which test is unstable from this output: - http://ci.rvm.jp/results/trunk_gcc5@silicon-docker/1926481 - - Let me print `caller` on the timeout failure. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67463 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 93ecb9a1de00db26f1581392ae519a6a9faeab0d - Author: svn - Date: 2019-04-07 01:03:14 +0900 - - * 2019-04-07 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67462 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bbb0db6f1c6650481ae2cd1cb771f896459c0c6b - Author: k0kubun - Date: 2019-04-07 01:03:11 +0900 - - Fix typo in a comment [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67461 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5a6b0e39a1913235d960fafb37b23a29317ccd11 - Author: k0kubun - Date: 2019-04-06 23:42:02 +0900 - - Add debug counter for VM <-> MJIT calls - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67460 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fe979e5bce4d5606d491ed25e603f5504a20c500 - Author: nobu - Date: 2019-04-06 22:21:18 +0900 - - internal.h: fix potential memory leak - - * internal.h (rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString): - create tmpbuf to keep the pointer before xmalloc which can raise - a NoMemoryError exception. extracted from - https://github.com/bear-metal/ruby/tree/transient-imemo-tmpbuf - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67459 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f15d04358827d60a708f296973c420b2c031ac5e - Author: k0kubun - Date: 2019-04-06 11:53:32 +0900 - - Cover all insns in test_jit again - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67458 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit feecc10bfcf6fb95f60f62dbfcc9b23fc15813f2 - Author: k0kubun - Date: 2019-04-06 11:42:30 +0900 - - Suppress unnecessary warnings in test_jit - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67457 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4d1163b182bdd572edaa44ff000240d49acc09d6 - Author: k0kubun - Date: 2019-04-06 11:35:37 +0900 - - Resurrect a test dropped in r67442 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67456 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a26d525ae453fc59a8591d544cdba80f5e31900d - Author: k0kubun - Date: 2019-04-06 10:25:15 +0900 - - appveyor.yml: try porting r67454 to msys2 - - Trying to fix - https://ci.appveyor.com/project/ruby/ruby/builds/23639998/job/0hm9v79xlryod1ff - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67455 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b5df5296a4741839b6430c9f07cd25edbb7fb8c5 - Author: nobu - Date: 2019-04-06 09:08:04 +0900 - - appveyor.yml: Use pre-generated headers and tables - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67454 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 50eea44a27cc0b9b2c5c24b725a1119ec0c00e5c - Author: duerst - Date: 2019-04-06 08:52:15 +0900 - - remove Unicode 12.0.0 related directory and generated files - - This completes issue #15195. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67453 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4e78854080db3d18124ff9cfec9a257073e29150 - Author: svn - Date: 2019-04-06 08:16:03 +0900 - - * 2019-04-06 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67452 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit cab005db92da4c867a464d2faf27ece30f61b26b - Author: duerst - Date: 2019-04-06 08:16:00 +0900 - - revert r67445, (r67446,) r67447 - - Debugging output is no longer needed because the problem has been fixed with r67449. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67451 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6e0e93e60ec55ab4a28d29d4ad70a3ad7e65c73e - Author: nobu - Date: 2019-04-05 23:44:15 +0900 - - downloader.rb: fix typo, extra % - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67450 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9dcc6f081000d9c0f11a97051654ee2091f632e0 - Author: nobu - Date: 2019-04-05 23:44:13 +0900 - - appveyor.yml: download beta version for test - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67449 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit aebc11dfe60bb9548843c22d7deb65c67d7a2915 - Author: nobu - Date: 2019-04-05 21:44:04 +0900 - - downloader.rb: quote base name - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67448 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8f734dc7b543e7662b66cffd5d698d372d9a0b7a - Author: duerst - Date: 2019-04-05 21:36:29 +0900 - - output more debug information in downloader.rb (temporary) - - Unicode file download doesn't work with Visual Studio, we need more debug output. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67447 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f6338966f15c0f77b3508ff0ceef8ea9553c5063 - Author: svn - Date: 2019-04-05 19:39:02 +0900 - - * remove trailing spaces. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67446 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7fd8cdf398456b2da0f6fe541b77826051e60624 - Author: duerst - Date: 2019-04-05 19:39:01 +0900 - - add puts statements to debug Unicode file download (temporary) - - Unicode file download doesn't work with Visual Studio, see e.g. - https://ci.appveyor.com/project/ruby/ruby/builds/23614399/job/f8vya2l7fjdfcye4 - We temporarily produce more output for debugging. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67445 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b2311c67671c69df8c390f22b3cb961f7be39a75 - Author: ko1 - Date: 2019-04-05 17:41:04 +0900 - - `rb_add_method` is void function. - - * method.h (rb_add_method): make it void function because - nobody use a return value. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67444 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4b53f843264df5694f6693a9a3461af055573fe0 - Author: svn - Date: 2019-04-05 17:15:21 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67443 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2b5bb8a0875b75f18e628c8b2df22760536bdad9 - Author: ko1 - Date: 2019-04-05 17:15:11 +0900 - - add definemethod/definesmethod insn. - - * insns.def: add definemethod and definesmethod (singleton method) - instructions. Old YARV contains these instructions, but it is moved - to methods of FrozenCore class because remove number of instructions - can improve performance for some techniques (static stack caching - and so on). However, we don't employ these technique and it is hard - to optimize/analysis definition sequence. So I decide to introduce - them (and remove definition methods). `putiseq` insn is also removed. - - * vm_method.c (rb_scope_visibility_get): renamed to - `vm_scope_visibility_get()` and make it accept `ec`. - Same for `vm_scope_module_func_check()`. - These fixes are result of refactoring `vm_define_method`. - - * vm_insnhelper.c (rb_vm_get_cref): renamed to `vm_get_cref` - because of consistency with other functions. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67442 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7fe64d17d3cd455a3f014d6f756cb201320f7f9a - Author: duerst - Date: 2019-04-05 09:58:51 +0900 - - update to Unicode Version 12.1.0 (beta) - - Unicode Version 12.1.0 adds one single character, U+32FF SQUARE ERA NAME REIWA, - for the new Japanese era starting on May 1st. 12.1.0 will be finalized only on - May 7th, so we go with the beta version because further changes in the data we - need are highly unlikely, and we want to make sure Ruby is ready for the new era. - - * common.mk: change UNICODE_VERSION to 12.1.0, UNICODE_BETA to YES - - * enc/unicode/12.1.0, enc/unicode/12.1.0/casefold.h, enc/unicode/12.1.0/name2ctype.h: - add directory and generated data files for new version - - * lib/unicode_normalize/tables.rb: update for new character - - * test/ruby/test_regexp.rb: add test for character property age=12.1 - - * test/test_unicode_normalize.rb: add test for NFKC decomposition of new character - - This (mostly) completes issue #15195. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67441 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c8d60fddc0f868a2bb8cee0a75859513afe41c0e - Author: svn - Date: 2019-04-05 08:40:51 +0900 - - * 2019-04-05 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67440 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c604219e8d79f4a224e446a4aa19711155070ef8 - Author: duerst - Date: 2019-04-05 08:40:48 +0900 - - change lib/unicode_normalize/tables.rb to single item per line to make diffs shorter - - * template/unicode_norm_gen.tmpl: Change formatting of output to produce only a - single item (or range) for each line to make future diffs shorter and easier - to understand and check. - - * lib/unicode_normalize/tables.rb: output of the above - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67439 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 59a37c028317441b4a1e6d9a1e9c69570b347ee9 - Author: nobu - Date: 2019-04-04 21:11:53 +0900 - - gmake.mk: get rid of unicode normalization table timestamp - - * common.mk, defs/gmake.mk: rid of unicode normalization tables - timestamp. update the target tables file only when only it - exists. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67438 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6f015efc64aece0d25cc25686ea63dc8ffd7a340 - Author: nobu - Date: 2019-04-04 14:26:11 +0900 - - iseq.h: Remove dead members - - * iseq.h (struct iseq_compile_data): Remove the dead ensure_node - and for_iseq members. - - [Fix GH-2108] - - From: Lourens Naudé - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67437 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6faf26689382c35d2fb8df90b096ea34c87b3ed5 - Author: nobu - Date: 2019-04-04 14:10:26 +0900 - - gmake.mk: update normalization table - - * defs/gmake.mk: try to update Unicode normalization tables file - if Unicode data files exist. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67436 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f1fb989f1a17c63af1062ea402ed50f0d6cb4efa - Author: mrkn - Date: 2019-04-04 12:34:55 +0900 - - enumerator.c: make arith_seq_first support nil begin - - * enumerator.c: (arith_seq_first): support nil begin. - - * test/ruby/test_arithmetic_sequence.rb (test_first): add assertions for - beginless and endless arithmetic sequences. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67435 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 53d3fe0643c591a9083e22ccea62e49f451fd450 - Author: mrkn - Date: 2019-04-04 12:34:53 +0900 - - ruby/test_arithmetic_sequence.rb: add assertions for beginless and endless ranges - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67434 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dcb37d06395d996b046b755d2219c4accaac0b5f - Author: mrkn - Date: 2019-04-04 12:34:52 +0900 - - range.c: support to make beginless arithmetic sequences - - * range.c (range_step): fix the guard condition so that a beginless - range can be turned into a beginless arithmetic sequence. - - * test/ruby/test_range.rb (test_step): add assertions for the above - change. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67433 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e59017354782c7cf599af39c6725486cca03297d - Author: svn - Date: 2019-04-04 10:34:56 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67432 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 22fd30e605bd9f13fa1db54316acc925721fea16 - Author: k0kubun - Date: 2019-04-04 10:34:53 +0900 - - Revert "Introduce inline cache for invokesuper" - - This reverts commit d147ad6231aebb1d478162fb8e109e0c6a696169. - - because failing on CI: - http://ci.rvm.jp/results/trunk-mjit@silicon-docker/1916925 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67431 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e896292d64d86be9b82b29938b9f2dbadbafa0f4 - Author: svn - Date: 2019-04-04 01:06:06 +0900 - - * 2019-04-04 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67430 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d147ad6231aebb1d478162fb8e109e0c6a696169 - Author: k0kubun - Date: 2019-04-04 01:06:03 +0900 - - Introduce inline cache for invokesuper - - Looks good in micro benchmark: - ``` - $ benchmark-driver benchmark/vm2_super.yml -v --rbenv 'before;after' - before: ruby 2.7.0dev (2019-04-03 trunk 67428) [x86_64-linux] - after: ruby 2.7.0dev (2019-04-03 trunk 67428) [x86_64-linux] - last_commit=Introduce inline cache for invokesuper - Calculating ------------------------------------- - before after - vm2_super 19.265M 31.280M i/s - 6.000M times in 0.311447s 0.191813s - - Comparison: - vm2_super - after: 31280464.2 i/s - before: 19264906.2 i/s - 1.62x slower - ``` - - No significant impact to Optcarrot: - ``` - $ benchmark-driver benchmark.yml --rbenv='before;after' -v --output=all --repeat-count=12 - before: ruby 2.7.0dev (2019-04-03 trunk 67428) [x86_64-linux] - after: ruby 2.7.0dev (2019-04-03 trunk 67428) [x86_64-linux] - last_commit=Introduce inline cache for invokesuper - Calculating ------------------------------------- - before after - Optcarrot Lan_Master.nes 48.41126024010233 47.28027196127746 fps - 49.49212664510990 48.75072555488074 - 49.51485564376117 49.20650895701073 - 49.58351773328487 49.24563592659139 - 49.64022392458479 49.26292753046641 - 49.92566235019630 49.44496216868009 - 50.18022198879376 49.45467429762771 - 50.33038373991723 49.52003367348857 - 50.43202877523305 49.69190055704068 - 50.61368587766504 49.79856204866324 - 50.77975014460643 50.27764769510704 - 50.89807360753746 50.35785776505005 - ``` - - A little improvement to k0kubun/railsbench?: - ``` - $ rbenv shell before; RUBYOPT="-v" WARMUP=1 BENCHMARK=30000 bin/bench - ruby 2.7.0dev (2019-04-03 trunk 67428) [x86_64-linux] - Warmup: 1 requests - Benchmark: 30000 requests - - Request per second: 897.1 [#/s] (mean) - - Percentage of the requests served within a certain time (ms) - 50% 1.01 - 66% 1.02 - 75% 1.03 - 80% 1.04 - 90% 1.08 - 95% 1.23 - 98% 2.10 - 99% 5.52 - 100% 13.26 - - $ rbenv shell after; RUBYOPT="-v" WARMUP=1 BENCHMARK=30000 bin/bench - ruby 2.7.0dev (2019-04-03 trunk 67428) [x86_64-linux] - last_commit=Introduce inline cache for invokesuper - Warmup: 1 requests - Benchmark: 30000 requests - - Request per second: 913.0 [#/s] (mean) - - Percentage of the requests served within a certain time (ms) - 50% 0.99 - 66% 1.00 - 75% 1.01 - 80% 1.02 - 90% 1.06 - 95% 1.20 - 98% 2.12 - 99% 5.57 - 100% 12.39 - ``` - - No significant impact to discourse: - ``` - * before - categories_admin: - 50: 54 - 75: 60 - 90: 70 - 99: 86 - home_admin: - 50: 56 - 75: 65 - 90: 71 - 99: 122 - topic_admin: - 50: 64 - 75: 73 - 90: 79 - 99: 117 - categories: - 50: 32 - 75: 33 - 90: 46 - 99: 61 - home: - 50: 34 - 75: 36 - 90: 48 - 99: 56 - topic: - 50: 40 - 75: 42 - 90: 55 - 99: 83 - - * after - categories_admin: - 50: 59 - 75: 66 - 90: 80 - 99: 149 - home_admin: - 50: 54 - 75: 58 - 90: 70 - 99: 96 - topic_admin: - 50: 63 - 75: 66 - 90: 79 - 99: 115 - categories: - 50: 31 - 75: 32 - 90: 45 - 99: 65 - home: - 50: 34 - 75: 35 - 90: 49 - 99: 58 - topic: - 50: 40 - 75: 42 - 90: 55 - 99: 78 - ``` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67429 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2482d1f9e6b770bc5f65ffde97df36066095ff2e - Author: k0kubun - Date: 2019-04-03 21:48:02 +0900 - - Partially allow failures in test-bundled-gems - - Tests of minitest randomly fails with strange errors: - https://dev.azure.com/rubylang/ruby/_build/results?buildId=303 - https://dev.azure.com/rubylang/ruby/_build/results?buildId=314 - - Instead of marking `continueOnError` for all, let me select - failure-allowed gems individually. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67428 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f4a1235abe83f8b52ac3048719fac6426469cb42 - Author: k0kubun - Date: 2019-04-03 20:16:47 +0900 - - vs2019 build is not functional now - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67427 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a6146af5bd2855f08e520fad67c39164adc507e9 - Author: svn - Date: 2019-04-03 19:56:37 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67426 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1329c7cdca5cca07e8680a28724b3f192144f04e - Author: nobu - Date: 2019-04-03 19:56:36 +0900 - - date: make zone a substring to copy encoding and taintedness - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67425 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f0204a254789608edc46515f181b1f52ec106442 - Author: kazu - Date: 2019-04-03 18:35:26 +0900 - - Revive accidentally removed assertion - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67424 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d4319541e870b3ec37ddb73d399dafcb39db35e7 - Author: mame - Date: 2019-04-03 17:35:57 +0900 - - range.c (r_cover_range_p): support beginless range - - `(..2).cover?(..1)` should return true. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67423 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 95f7992b89efd35de6b28ac095c4d3477019c583 - Author: mame - Date: 2019-04-03 17:11:41 +0900 - - Introduce beginless range [Feature#14799] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67422 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dd2479bcea6cfbfb7656ef691ad5f9ff6ae543cd - Author: tenderlove - Date: 2019-04-03 06:59:04 +0900 - - Fix more ASAN errors - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67421 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit be0f09a998c08eaa8bd4a5300e10b405cc9ae972 - Author: tenderlove - Date: 2019-04-03 06:58:59 +0900 - - Extract type to sym as a new function - - I will use this from another function in compaction - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67420 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ad67845ba82023474ed2c914e7b38859a9cd488d - Author: tenderlove - Date: 2019-04-03 06:13:22 +0900 - - Fix typo in lldb script - - Also fix tests - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67419 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 714c2b0a93a3ad2206dc93535f42987083b16ca9 - Author: svn - Date: 2019-04-03 04:13:13 +0900 - - * 2019-04-03 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67418 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e377eb0e75d6307ac379f575bf3caf0b8b08fab4 - Author: tenderlove - Date: 2019-04-03 04:13:12 +0900 - - Fix ASAN error - - This code was trying to access memory before unpoisoning it. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67417 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4283fb42bc7a4f7e6de1263756b32fdd2356bf3a - Author: tenderlove - Date: 2019-04-03 04:13:07 +0900 - - Poison / verify the freelist - - This commit just adds poisoning around the freelist to help debugging. - Also verify that the freelist only contains T_NONE objects when checking - the heap integrity - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67416 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f28be7e02d113bd26c33cb94e65004055576c065 - Author: hsbt - Date: 2019-04-02 20:48:18 +0900 - - Merge rubygems/rubygems from upstream. - - The current master branch is - https://github.com/rubygems/rubygems/commit/97b264f0fa248c864b6ee9a23d3ff1cdd217dddb - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67415 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 537024433720d7c54cba9bab4596638f59fbadc9 - Author: k0kubun - Date: 2019-04-02 19:51:35 +0900 - - Azure Pipeline tests on Linux are not reliable - - test-bundler started to fail with r67383 - https://dev.azure.com/rubylang/ruby/_build/results?buildId=278 - which is very unlikely to be Ruby implementation's fault. - - test-bundled_gems also started to fail with r67413 - https://dev.azure.com/rubylang/ruby/_build/results?buildId=303 - I'm not sure the commit is related to the failure. - - Overall, they are not useful as testing environment of Ruby itself for - now since nobody seems to take care of these CI statuses. Let's stop - reporting the status to GitHub until it becomes reliable. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67414 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 79de8e9f6ba093da4d792294f1675083634c9e3b - Author: nobu - Date: 2019-04-02 17:08:29 +0900 - - downloader.rb: keep linked file newer than cached file - - * tool/downloader.rb (Downloader.save_cache): keep linked file - newer than cached file, so that GNU make triggers when the - content is updated. it uses the timestamp of symlink itself - instead of the target. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67413 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7cd6706b9ab901b0b710a087b5aeb5654f219b09 - Author: nobu - Date: 2019-04-02 13:36:34 +0900 - - date_parse.c: name JISX0301_DEFAULT_ERA - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit da0fceae3b3641c60823954e8198bf10a1b99c10 - Author: nobu - Date: 2019-04-02 13:36:33 +0900 - - date_parse.c: renamed JAPANESE prefix as JISX0301 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67411 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5f3e5e6fc5f545b5e6b496334578a16a2acf01c8 - Author: svn - Date: 2019-04-02 12:49:00 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67410 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e8f8cf111fc1cd6ee7a00b692ba208bd1c7ce539 - Author: nobu - Date: 2019-04-02 12:48:58 +0900 - - date: use del_hash to extract an element destructively - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67409 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1ad6dde9da48149f1998eb5b85916165867c2368 - Author: tenderlove - Date: 2019-04-02 08:55:02 +0900 - - Fix ASAN errors when walking the heap - - verify_internal_consistency_i and gc_verify_heap_page would walk the - heap, reading data from each slot, but would not unpoison the object - before reading. This commit unpoisons the slot before reading so that - we won't get ASAN errors - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67408 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f0f6615a25eb87e5e9954b7fec85c71f05100b7d - Author: tenderlove - Date: 2019-04-02 07:53:34 +0900 - - add regex support to lldb debug output - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67407 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f4bff3a7f944edee72118de5b762a46b1b98d463 - Author: svn - Date: 2019-04-02 07:52:39 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67406 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1286674bb9855d69f3448fb76c2721c5ac38b84c - Author: tenderlove - Date: 2019-04-02 07:52:35 +0900 - - unpoison / poison objects while walking the heap - - This fixes some ASAN errors - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67405 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 990df873029a632c06dee9de9768bda8400fe922 - Author: eregon - Date: 2019-04-02 05:46:10 +0900 - - Make spec for the jit feature more general and not MRI-specific - - * Other implementations should not define RubyVM. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67404 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 960d059ef71901980c95cd28013b7a93bc3f83d5 - Author: eregon - Date: 2019-04-02 05:45:55 +0900 - - Simplify spec as there is no easy way to tell if MJIT support is available - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67403 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d48783bb0236db505fe1205d1d9822309de53a36 - Author: svn - Date: 2019-04-02 05:35:13 +0900 - - * 2019-04-02 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67402 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c71c59feeb8edd975cc49c718dec8319e22ee2a4 - Author: eregon - Date: 2019-04-02 05:35:10 +0900 - - Fix Float#to_s specs to not depend on the platform representation of doubles - - * AIX, Solaris, etc have a different binary representation. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67401 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 321d72bdd6f26b26bc4b9989076f2d3a2fbdc9b3 - Author: nobu - Date: 2019-04-01 14:58:31 +0900 - - Added tests for end of Heisei - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 285817c6d8ed6117fc4931a32ae16aaf3c5b4c99 - Author: nobu - Date: 2019-04-01 14:28:25 +0900 - - date_parse.c: removed 'r' which is not in JIS X 0301 yet - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67399 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e836cd0b9f213084bf4a2b4c642e27c9d550a706 - Author: svn - Date: 2019-04-01 14:21:39 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67398 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 744c3140595c34171553515e127d080634704db3 - Author: nobu - Date: 2019-04-01 14:21:36 +0900 - - date_parse.c: extract Japanese era initials - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67397 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 367362b9d56bc8d9e5cafaec5abe7c987c4a831c - Author: svn - Date: 2019-04-01 00:37:47 +0900 - - * 2019-04-01 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67396 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5e86970840145c4f1349dd5729e64960e5b04583 - Author: kazu - Date: 2019-04-01 00:37:45 +0900 - - exp is String, so it's always truthy - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67395 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4e0420f57749f85bebeabd509f9da73f7ae8c966 - Author: svn - Date: 2019-03-31 23:46:31 +0900 - - * 2019-03-31 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67390 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ddc5839005b91ec7a87f374d3b2606b158400817 - Author: kazu - Date: 2019-03-31 23:46:25 +0900 - - Fix a typo [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67389 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b84eed5dd8e2cb981a80091a58775a7d21946e5b - Author: nobu - Date: 2019-03-30 23:31:35 +0900 - - ruby.c: respect features by command line - - * ruby.c (process_options): feature options in command line - arguments take precedence over options in RUBYOPT environment - variable. [ruby-core:92052] [Bug #15738] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67388 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 19e672cce9590c09b6beb3ada4ccf0e62bf6610c - Author: nobu - Date: 2019-03-30 21:39:35 +0900 - - rdoc: Colorize background of code/pre [ci skip] - - Borrowed the style of code/pre from bugs.ruby-lang.org. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67387 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 721be154946f0a13f739363c4968c548aba5fee3 - Author: nobu - Date: 2019-03-30 21:37:23 +0900 - - process.c: [DOC] remove extra quotes [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67386 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 413b12737697564a4de6bb88b2830169dc42909e - Author: nobu - Date: 2019-03-30 21:35:13 +0900 - - Fix a typo in an assertion message - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67385 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 031e2f1285e3ea37eca9a4c24d6ae25ef1c459d3 - Author: svn - Date: 2019-03-30 08:26:33 +0900 - - * 2019-03-30 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67384 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9249346c0bed3fa154a49b2ca924c205e66018ef - Author: mame - Date: 2019-03-30 08:26:31 +0900 - - mjit_worker.c: explicitly ignore the unused result of RB_DEBUG_COUNTER_INC_IF - - By adding `(void)`. This makes Coverity Scan happy. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67383 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9d047fd3e51945c8fcc3a8a97c41dc2baf016974 - Author: k0kubun - Date: 2019-03-29 23:44:09 +0900 - - Add mjit_compile_failures debug counter - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67382 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e465d6c5df2c3b6f97348b2d21037be3f55c7d38 - Author: k0kubun - Date: 2019-03-29 23:27:00 +0900 - - ruby tool/update-deps --fix - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67381 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5ee256da687f080f8ec0b12c10fc2592020e4872 - Author: k0kubun - Date: 2019-03-29 23:08:51 +0900 - - Prevent mjit length counters from being 0 - - It seems that `debug_counter_show_results_at_exit` could be called - earlier than `mjit_finish` sometimes. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67380 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b03c11a337c53c219a840eed4569e411289f0ddd - Author: k0kubun - Date: 2019-03-29 22:54:29 +0900 - - Add debug counters for MJIT cancel - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67379 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 017cb09eb6d40b3d7f7ca08db4aa16cfb91012f2 - Author: k0kubun - Date: 2019-03-29 22:24:56 +0900 - - Add debug counter for rb_mjit_unit_list - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67378 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 26d56f7b6f68058ca2321d797f86d1edd510644b - Author: kazu - Date: 2019-03-29 22:06:48 +0900 - - Fix a typo [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67377 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9254e1c740fd0829ad425670c770f782d20a0d82 - Author: k0kubun - Date: 2019-03-29 21:55:07 +0900 - - Debug make install instead of make - - Actually what has randomly failed was `make install`: - https://travis-ci.org/ruby/ruby/jobs/512988177 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67376 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bb5ab13bf58e0ccfe5b4c08fec8a0e70612d598c - Author: k0kubun - Date: 2019-03-29 21:52:59 +0900 - - Add debug counters for MJIT - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67375 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fe904f1eec1fe96cf148407c3c4c010de7dd8b73 - Author: k0kubun - Date: 2019-03-29 21:31:08 +0900 - - Elaborate more on some debug counters [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67374 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 49f1b71144e9e8352688caf7cb23b09b62873464 - Author: k0kubun - Date: 2019-03-29 21:00:44 +0900 - - Add some more buffer for timeout check - - This spec is unstable on our CI environment: - https://gist.github.com/ko1/efa58acf4cd1d7b5bf1f63881537afe8 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67373 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ce9e0ffd710db27f928ffa013d5d7047acb04511 - Author: svn - Date: 2019-03-29 15:36:48 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67372 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 35e677dd0ab6b042cb52e9f98e35a2d8d7dc5e14 - Author: ko1 - Date: 2019-03-29 15:36:46 +0900 - - use GET_CFP() instead of access reg_cfp directly. - - GET_CFP() macro contains performance counter logic. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67371 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fcf60d39776acf018eb7d855778f66568eb6d615 - Author: nobu - Date: 2019-03-29 10:26:23 +0900 - - process.c: [DOC] fix markups [ci skip] - - * process.c (rb_f_spawn): fix markups as rdoc. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67370 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b9ad698c8711ddb10e812b809522a865e4175718 - Author: nobu - Date: 2019-03-29 09:59:34 +0900 - - process.c: [DOC] fix markups [ci skip] - - * process.c (rb_clock_getres): fix code markups, as `+` can not - include parentheses. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67369 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f27d4354c837434a1e67fc20422c6f96bbe8dc69 - Author: nobu - Date: 2019-03-29 09:59:32 +0900 - - strip trailing spaces [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67368 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c33da35ddf14f39d622df42e0a63581636aa391c - Author: k0kubun - Date: 2019-03-29 09:49:35 +0900 - - Fix broken retry logic - - previous retry logic did not work - https://dev.azure.com/rubylang/ruby/_build/results?buildId=266 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67367 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b6c04a7ad76b8693048355d0a258731e10f111fd - Author: k0kubun - Date: 2019-03-29 01:25:25 +0900 - - Guard spec against msys2 shell - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67366 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e7477a949c157a700e70afff0675af676b57f00e - Author: k0kubun - Date: 2019-03-29 00:37:45 +0900 - - [bug:8215] seems to be still broken on mswin - - This test fails on AppVeyor mswin so often: - https://ci.appveyor.com/project/ruby/ruby/builds/23427134/job/rowv0dohwni0xa37 - https://ci.appveyor.com/project/ruby/ruby/builds/22970385/job/qdkqus13bhnyyfxf - https://ci.appveyor.com/project/ruby/ruby/builds/22970385/job/o4k8keg95ltcryoe - - Maybe it's related to https://bugs.ruby-lang.org/issues/15569. - As this test is harmful for mswin CI reliability, let me skip this at - least until somebody fixes the above issue. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67365 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 233267db34bfd74d94a5840cc582e0db7a2881c3 - Author: svn - Date: 2019-03-29 00:25:44 +0900 - - * 2019-03-29 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67364 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7ce0e96334c66af8f805d101fe35abb5742687e4 - Author: svn - Date: 2019-03-29 00:25:44 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67363 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 68987d4ae1a14d96047074599079acc2997e76e9 - Author: k0kubun - Date: 2019-03-29 00:25:43 +0900 - - Do not fail with --disable-jit-support - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67362 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a28aa80c739a1d169649a4da833ef48cfb3465b3 - Author: eregon - Date: 2019-03-28 23:22:29 +0900 - - Update to ruby/spec@e81b3cd - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67361 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0f64776745ef31e626dec0d42b7fb2a5988397ec - Author: kazu - Date: 2019-03-28 21:35:20 +0900 - - NEWS: Fix a typo [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67360 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b6443c62f0c3c4b002c6eaa2574da66f5635e076 - Author: k0kubun - Date: 2019-03-28 20:50:19 +0900 - - Note r67356 in NEWS [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67359 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ee5b54822cd08c11ae1b2060d28074d36aa45954 - Author: nobu - Date: 2019-03-28 19:19:08 +0900 - - parse.y: show error line separately - - * parse.y: show compile error and the error line separately, - instead of building the error message by snprintf then yyerror. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67358 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fa04b87af4300f747e3ce5cfe21b8edf85fe73b2 - Author: nobu - Date: 2019-03-28 17:39:24 +0900 - - [DOC] fix missing paren [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67357 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b3507bf147ff47e331da36ba7c8e6b700c513633 - Author: nobu - Date: 2019-03-28 12:46:48 +0900 - - erb.rb: prohibit marshaling [EXPERIMENTAL] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67356 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 978290515ea32204ff4b4173d6283050d628bd37 - Author: nobu - Date: 2019-03-28 12:33:36 +0900 - - [DOC] Fix method references to Method instance methods - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67355 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit de0ef1a9dfd9f966ad7e667788f3e333944d959e - Author: nobu - Date: 2019-03-28 12:33:35 +0900 - - [DOC] fix markups [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67354 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 832bc50768fe42f95f8dda0483f0ba1556175c9d - Author: svn - Date: 2019-03-28 08:56:17 +0900 - - * 2019-03-28 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67350 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ede77e64a7f465f9591ee9b1e9d6d7d69bfdb9af - Author: kazu - Date: 2019-03-28 08:56:14 +0900 - - Fix typos - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67349 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 41d36d2ce2a900bbb6812e23c13f35ee20f93d31 - Author: k0kubun - Date: 2019-03-27 22:31:36 +0900 - - Skip EBADF spec in MJIT test for now - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67348 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1c5fd2bff0e232aadf4b9486d086ccb6af87ceb6 - Author: k0kubun - Date: 2019-03-27 22:15:02 +0900 - - Add debug print for random CI failure on osx Travis - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67347 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b51b9d50e64170650db71ece4a6c08b3c9ae897a - Author: svn - Date: 2019-03-27 17:26:12 +0900 - - * 2019-03-27 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67346 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 191b99c89d5843bdee2bccc9ee2d34bc2b5513f0 - Author: hsbt - Date: 2019-03-27 17:26:09 +0900 - - Merge fileutils-1.2.0 from ruby/fileutils. - - It includes the following updates: - - * https://github.com/ruby/fileutils/pull/26 - * https://github.com/ruby/fileutils/pull/27 - * https://github.com/ruby/fileutils/pull/29 - * https://github.com/ruby/fileutils/pull/34 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67345 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c92c0a593593da2eb1ff94d83d80f71e7ae5343c - Author: k0kubun - Date: 2019-03-25 23:26:11 +0900 - - Prefer using vm_base_ptr rather than cfp->bp - - in MJIT implementation. - - This allows us to drop cfp->bp by just modifying vm_base_ptr in the - future. - - No performance impact: - - $ benchmark-driver benchmark.yml --rbenv='before::before --disable-gems --jit;bp_::after --disable-gems --jit;vm_env_ptr::ruby-svn --disable-gems --jit' -v --output=all --repeat-count=12 - before: ruby 2.7.0dev (2019-03-24 trunk 67341) +JIT [x86_64-linux] - bp_: ruby 2.7.0dev (2019-03-24 trunk 67342) +JIT [x86_64-linux] - vm_env_ptr: ruby 2.7.0dev (2019-03-25 trunk 67343) +JIT [x86_64-linux] - last_commit=Prefer using vm_base_ptr rather than cfp->bp - Calculating ------------------------------------- - before bp_ vm_env_ptr - Optcarrot Lan_Master.nes 77.15059205092646 70.18873044267853 69.62171387083328 fps - 78.75767783870441 77.49867689173411 75.43496867709587 - 79.60102690369321 77.78037687683523 79.36688927929428 - 80.25144236638835 78.74729849101701 80.42363742291455 - 82.22375417165489 80.44265482494045 80.90287243299306 - 82.29166786292619 80.51740049420938 81.81153053252902 - 83.35386925305345 80.91054205210609 81.93562989125176 - 83.39770634366975 81.34550754145043 82.24544621470430 - 83.88523450309972 81.60698516017347 82.76801860263230 - 84.17553130135879 82.69615943446324 83.02530407910871 - 84.42132328119858 83.00969158037691 83.19968539409922 - 84.60731429793329 83.32703363300098 83.81352746019631 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67344 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7976d0d153c021fb2e350743fbb54d239aa7acf1 - Author: svn - Date: 2019-03-25 15:58:55 +0900 - - * 2019-03-25 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67343 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8dd0fb9039bbe6152ea5542e6bc70de152871e23 - Author: ko1 - Date: 2019-03-25 15:58:50 +0900 - - use cfp->bp more. - - cfp->bp was (re-)introduced by Kokubun san, but VM doesn't use it - because I (ko1) want to remove it in a future. But using it make - leave instruction fast because of sp consistency check. - So now VM uses cfp->bp. - - To use cfp->bp, I checked the value and I found that it is not a - "initial value of sp" but a "initial value of ep". Fix this problem - and fix all bp references (this is why bp is renamed to bp_). - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67342 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9f05891c3daa79e26dd01f0575f1b595ddb7d302 - Author: svn - Date: 2019-03-24 09:28:54 +0900 - - * 2019-03-24 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67341 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 831e93d928aa1092fbbcabaa8051953de50ad9da - Author: ktsj - Date: 2019-03-24 09:28:51 +0900 - - Update power_assert to 1.1.4 - - This update fixes a failure of test-bundled-gems, so we revert r67275. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67340 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7e421044a3e1747e62c6760cde2f007223f73e0e - Author: svn - Date: 2019-03-23 19:41:20 +0900 - - * 2019-03-23 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67339 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0bd50e95f9e2357ac551bda501da91185875370e - Author: glass - Date: 2019-03-23 19:41:16 +0900 - - file.c: raise NotImplementedError instead of Errno::ENOSYS - - [Misc #15615] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67338 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 56557ec28a8712984a0e9744fd7547e797ec9b6b - Author: nobu - Date: 2019-03-22 20:04:59 +0900 - - [DOC] fix markups [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67337 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c671f836b4d123bf86bce6defe42c87caef582f8 - Author: ko1 - Date: 2019-03-22 16:57:26 +0900 - - add debug counters to count call cache fastpath. - - Add counters to count ccf (call cache fastpath) usage. - These counters will help which kind of method dispatch - is important to optimize. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67336 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4d2bac1fd977d2ff76321654aece8744cac536dd - Author: svn - Date: 2019-03-22 09:21:44 +0900 - - * 2019-03-22 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67335 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a433f2c51be52042884998bb5a0048084adad4aa - Author: svn - Date: 2019-03-22 09:21:43 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67334 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 79ddbe9deebc5af0f08e52cd056f58b49e486ea6 - Author: ko1 - Date: 2019-03-22 09:21:41 +0900 - - optimize method dispatch for lead/kw params. - - similar idea to r67315, provide the following optimization - for method dispatch with lead and kw parameters. - - (1) add a special branch to check passing kw arguments to - a method which has lead and kw parameters. - ex) def foo(x, k:1); end; foo(0, k:1) - (2) add a special branch to check passing no-kw arguments to - a method which has lead and kw parameters. - ex) def foo(x, k:1); end; foo(0) - - For (1) and (2) cases, provide special dispatchers. For (2) case, - this patch only use the special dispatcher if all default - kw parameters are literal values (nil, 1, and so on. In other case, - kw->default_values does not contains Qundef) (and no required kw - parameters becaseu they don't pass any keyword parameters). - - Passing keyword arguments with a hash object is not a scope of - this patch. - - Without this patch, (1) and (2) cases use `setup_parameters_complex()`. - Especially, (2) seems frequent case for methods which extend a normal - usecase with keyword parameters (like: `exception: true`). - - We can measure the performance with benchmark-driver: - With methods: def kw k1:1, k2:2; end - def m; end - With the following binaries: - clean-miniruby: unmodified trunk. - opt_miniruby1: use special branches for lead/kw parameters. - opt_miniruby2: use special dispatchers for lead/kw parameters. - opt_cc_miniruby: apply step (2). - Result with benchmark-driver: - - m - opt_miniruby2: 75222278.0 i/s - clean-miniruby: 73177896.5 i/s - 1.03x slower - opt_miniruby1: 62466783.3 i/s - 1.20x slower - - kw - opt_miniruby2: 52044504.4 i/s - opt_miniruby1: 29142025.7 i/s - 1.79x slower - clean-miniruby: 20515235.4 i/s - 2.54x slower - - kw k1: 10 - opt_miniruby2: 26492219.5 i/s - opt_miniruby1: 25409484.9 i/s - 1.04x slower - clean-miniruby: 20235113.7 i/s - 1.31x slower - - kw k1: 10, k2: 20 - opt_miniruby1: 24159534.0 i/s - opt_miniruby2: 23470527.5 i/s - 1.03x slower - clean-miniruby: 17822621.5 i/s - 1.36x slower - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67333 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0f63d961169989a7f6dcf7c0487fe29da178a4d2 - Author: shirosaki - Date: 2019-03-21 22:32:03 +0900 - - dir.c: fix Dir.glob starts with brace - - * dir.c (ruby_glob0): expand braces if a glob pattern starts with - brace. - [ruby-core:91728] [Bug #15649] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67332 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 638c96858274deb90b2b923477d6b9525e1ed065 - Author: nobu - Date: 2019-03-21 21:01:36 +0900 - - array.c: [DOC] remove unnecessary markups [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67331 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 969156ce9a04b92ffc5b048cfbe666ae1f7b1cbd - Author: k0kubun - Date: 2019-03-21 15:48:00 +0900 - - Check argument_arity_error condition in inlinable_iseq_p - - to avoid inlining a method call when it becomes argument_arity_error, - fixing a potential bug. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67330 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 52bd8f6f68a45cb990a827e4a1c276251cdf471c - Author: k0kubun - Date: 2019-03-21 15:25:09 +0900 - - Share vm_call_iseq_optimizable_p to reduce copy-paste - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67329 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a8695d5022d7afbf004765bfb86457fbb9d56457 - Author: k0kubun - Date: 2019-03-21 14:59:57 +0900 - - Make rb_iseq_only_optparam_p static - - because it's not used outside vm*.c, and also having non-static function - without MJIT_STATIC is harmful for mswin JIT system. - - I hope this fix mswin test failure starting from r67315. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67328 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3c4b7898d82f0a57cc3d034a246c28093c5f2dfd - Author: svn - Date: 2019-03-21 14:59:16 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67327 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e1038377a9c8ec8002d07cfdbca6a1c0cca1fc8c - Author: mame - Date: 2019-03-21 14:59:14 +0900 - - Fix a wrong lineno in backtrace for cfunc - - lineno is an int, and INT2FIX(0) was assigned. - - [Bug #15719] [ruby-core:91911] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67326 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b8540a3c2eb375d1634a451574404d8cb4502f98 - Author: k0kubun - Date: 2019-03-21 14:44:26 +0900 - - Show retry's stdout as well - - because stderr did not have sufficient information - https://ci.appveyor.com/project/ruby/ruby/builds/23242505/job/dirugxujk70nnhp6 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67325 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ae0f20c6bf45fdf4e50bc6cc69577cb94cc44ed8 - Author: k0kubun - Date: 2019-03-21 14:30:27 +0900 - - Retry vcpkg install failures - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67324 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9810c08a5dd0f327f3d2fe2bd61874673ddece11 - Author: k0kubun - Date: 2019-03-21 13:49:45 +0900 - - Explain why cl.exe needs --jit-verbose=2 [ci skip] - - I forgot to explain it in the previous commit - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67323 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 81de7b9e622ecb57a607af8ba7c341ab8c659a4d - Author: k0kubun - Date: 2019-03-21 13:47:59 +0900 - - Insert --jit-verbose=2 logs for mswin debugging - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67322 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7aacb650153db6eb341907dff8c3f8445717e556 - Author: kazu - Date: 2019-03-21 12:24:59 +0900 - - Remove duplicated and change order - - `reg*` affects `doc/regexp.rdoc`, but it is not a file of the Oniguruma/Onigmo regular expression engine. - `reg*.[ch]` matches `reg*` except `doc/regexp.rdoc`. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67321 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f2ea705d68d7e814e68c2df4598b95106e280e49 - Author: hsbt - Date: 2019-03-21 08:32:11 +0900 - - Add Enumerator::Lazy docs. - - * explanation of the class concept, with examples; - * docs for all class methods (most of them just say "Like Enumerable#, but chains operation to be lazy-evaluated.", but I believe they are useful this way because now have proper call-sequences and link to corresponding Enumerable's explanations) - * simplified example for ::new to emphasize the main concept - * Enumerable#lazy docs are slightly lightened and linked to this class for more in-depth explanations. - - [Misc #15529][ruby-core:91046] - - Co-authored-by: zverok - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67320 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e8e1f72d8fae3d010a1a5bec90c897aee9f08ce0 - Author: ko1 - Date: 2019-03-21 05:37:03 +0900 - - remove redundant check. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67319 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit df2af1147fc250cee73853cd9c78d5afeb9e2591 - Author: ko1 - Date: 2019-03-21 05:26:21 +0900 - - fix a type error with a cast for clang. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 02df0f38df43395debdab80a24fabd8a0e3eb097 - Author: svn - Date: 2019-03-21 04:57:44 +0900 - - * 2019-03-21 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67317 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5c439ebfb076ac0b16e60dc83f3a56532e85b3c9 - Author: svn - Date: 2019-03-21 04:57:43 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67316 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 24e03d7e268f5b89367d495ee2b4aac0b700e6e1 - Author: ko1 - Date: 2019-03-21 04:57:39 +0900 - - optimize method dispatch for lead/opt params. - - There is a special optimization for "only lead parameters" - method dispatch using specialized dispatcher functions - `vm_call_iseq_setup_normal_0start...`. - Other cases (opt, rest, post, ...) we don't use specialized - dispatcher and call with `setup_parameters_complex` to - satisfy Ruby's complex parameter specification. - - This commit introduce a specialize dispatcher for - methods which use only lead and optional parameters. - - Two step improvements: - (1) prepare "lead/opt" only check pass. - It is to skip the `setup_parameters_complex` function. - (2) introduce specialized dispatcher for only "lead/opt" - parameters methods (vm_call_iseq_setup_normal_opt_start). - - With these improvements, we achieved good micro-benchmark - results: - With a method: `def opt2 a, b=nil; end` - With the following binaries: - clean-miniruby: unmodified trunk. - opt_miniruby: apply step (1). - opt_cc_miniruby: apply step (2). - Result with benchmark-driver: - - opt2(1) - opt_cc_miniruby: 42269409.1 i/s - opt_miniruby: 36304428.3 i/s - 1.16x slower - clean-miniruby: 25897409.5 i/s - 1.63x slower - - opt2(1, 2) - opt_cc_miniruby: 45935145.7 i/s - opt_miniruby: 40513196.9 i/s - 1.13x slower - clean-miniruby: 29976057.6 i/s - 1.53x slower - - This improvement may be trivial (difficult to improve practical - cases). However, this is enough small patch so I decide to - introduce it. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67315 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 139634a16fc5fa6779b08aeb89f40b289579c4bf - Author: nobu - Date: 2019-03-20 13:24:42 +0900 - - vm_trace.c: [DOC] remove the trick [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67314 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b55586902dbd3df7b749fd1463dacbe871550adc - Author: hsbt - Date: 2019-03-20 11:08:34 +0900 - - Improve TracePoint docs. - - * Mention new :script_compiled event; - * Deduplicate __enable/enable methods; - * Document target: and target_line: arguments. - - [Bug #15484][ruby-core:90801] - - Co-authored-by: zverok - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67313 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 46968fab0a0cec4a3e6e37f30b13d20998ba5e7a - Author: nobu - Date: 2019-03-20 10:35:27 +0900 - - string.c: [DOC] fix reference to sprintf [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67312 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8b49e5b47d26228602f2dd57a81a6c12b1a19dde - Author: nobu - Date: 2019-03-20 10:31:44 +0900 - - string.c: [DOC] remove unnecessary markups [ci skip] - - * string.c: remove markups, which are not only unnecessary - but also prevented cross-references. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67311 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a265141c84f5b62d3dce62db1cf47d0c88dce601 - Author: nobu - Date: 2019-03-20 10:17:16 +0900 - - string.c: [DOC] fix indent [ci skip] - - * string.c (rb_str_crypt): fix indent not to make the whole list - verbatim entirely. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67310 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit eee58ca61134447e2f2140f9bf5366dc1495d7fe - Author: svn - Date: 2019-03-20 09:31:13 +0900 - - * 2019-03-20 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67309 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 740248425c5a47cb3f73eda97b42d52ef1070349 - Author: nobu - Date: 2019-03-20 09:31:02 +0900 - - parse.y: make tNUMPARAM id - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67308 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit afa1505ca89bd350558f1f42b96f1eee781ef019 - Author: nobu - Date: 2019-03-19 15:23:36 +0900 - - parse.y: removed redundant number_arg parser event - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67307 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fa66569afa0614ab27d941a68fb99e7adc1d2d48 - Author: nobu - Date: 2019-03-19 15:01:21 +0900 - - parse.y: fix var_ref of numbered param in ripper - - * parse.y (string_dvar, user_variable): register numbered - parameter in ripper for var_ref. - [ruby-core:91867] [Bug #15673] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67306 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e39f7e64b73f0506def7adc88226d6821608da54 - Author: nobu - Date: 2019-03-19 11:35:50 +0900 - - parse.y: fix segv with Ripper#yydebug - - * parse.y (parser_token_value_print): in ripper, ID values are - wrapped in NODE_RIPPER at set_yylval_name(), so print the Symbol - wrapped together. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67305 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ae5d9a7664e9664102b1ebc890afdafdf053bed8 - Author: nobu - Date: 2019-03-19 11:25:15 +0900 - - Added Ripper#debug_output - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67304 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 92b0331bcf33d1c4d3396c1ad85919934198aa28 - Author: k0kubun - Date: 2019-03-19 02:45:10 +0900 - - Use designated initializers for compile_status - - to make it easier to understand what values are grouped. - Just cosmetic changes. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67302 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8b1241d87756b59b6e2f033f7a978130b896bbaf - Author: k0kubun - Date: 2019-03-19 02:28:23 +0900 - - Use alloca for stack_size_for_pos as well - - to eliminate necessity of error check and `free` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67301 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a75ae6faa931e8b9d32c99039a06b950df391a06 - Author: k0kubun - Date: 2019-03-19 02:20:21 +0900 - - Use alloca again instead of malloc and free - - by changing interface of `mjit_copy_cache_from_main_thread`. - - This is also fixing deadlock introduced by r67299. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67300 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4d426e28d2cbbc09208987c6cf86180ea3ba3522 - Author: k0kubun - Date: 2019-03-19 01:32:48 +0900 - - Resurrect r67287 and r67288 - - I noticed that r67287 was illegal because memory allocated by `alloca` - was used after the stack is expired. - - So I just replaced that with `malloc` and `free` for now. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67299 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 08e9c58d519599def6b786ea211ac3a3d8b64d52 - Author: svn - Date: 2019-03-19 01:14:59 +0900 - - * 2019-03-19 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67298 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 78e87b7d4f580b041f96e0503febce528b8607b8 - Author: k0kubun - Date: 2019-03-19 01:14:57 +0900 - - Revert "Eliminate mjit_copy_job_t reference from mjit_worker" - - This reverts commit ba51ae0109ee1d1fa7ca90b43da115ea68d7214a. - - CI is failing again... - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67297 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ba51ae0109ee1d1fa7ca90b43da115ea68d7214a - Author: k0kubun - Date: 2019-03-18 23:01:52 +0900 - - Eliminate mjit_copy_job_t reference from mjit_worker - - Take 2 of r67287. - - For some reasons, passing pointer of pointer on stack to a function - and assigning an addresse to a pointer dereferenced from the pointer - seems not working on mswin. - - So I achieved to return multiple values by returning struct instead of - taking pointers. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67296 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 964bbc1686c7dd42d58da504a6968c90d5a428fd - Author: nobu - Date: 2019-03-18 21:48:18 +0900 - - parse.y: numbered parameter in lambda - - * parse.y (lambda): support numbered parameters, only when no - argument list including empty parentheses, like empty vertical - bars. [ruby-core:91859] [Bug #15672] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67295 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f9e5b8d09cafc2c91137d293b1458f1b0432a12a - Author: k0kubun - Date: 2019-03-18 21:07:21 +0900 - - Revert "Try disabling Travis cache on darwin" - - This reverts commit 6b136a044205f6e6b66df68cd2da2a9c3e952a7d. - - This does not seem to work: - https://travis-ci.org/ruby/ruby/jobs/507646193#L2478 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c1dce923739d0355520c02eb588bc96bedae4328 - Author: k0kubun - Date: 2019-03-18 20:46:21 +0900 - - Merge https://github.com/rubygems/rubygems/pull/2684 - - to make CI stable. See the PR for details. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67293 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 17018d4c31a86af2b47e09b3229dab2e80d3db6d - Author: nobu - Date: 2019-03-18 15:42:19 +0900 - - parse.y: continue after invalid name - - * parse.y (set_yylval_noname): continue after an invalid global, - instance, class variable name, without "unexpected end-of-file" - error. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67292 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 908b5301124cf673a2ee44de652968aa5360afd1 - Author: k0kubun - Date: 2019-03-18 10:52:45 +0900 - - Revert "Request inline cache values from mjit_compile" - - This reverts commit 4161674b2fbea6bdd01783ac5d3b39d88db22972. - - Revert "Eliminate mjit_copy_job_t reference from mjit_worker" - - This reverts commit d86a1aa045959dfbf5cd472eae0d043180259727. - - Reverting them because of CI failures - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67291 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ba03222da8ecc408310c37dca908f671ee3f1791 - Author: nobu - Date: 2019-03-18 10:42:20 +0900 - - Pack rb_iseq_constant_body from 296 to 288 bytes - - [Fix GH-2099] - - From: Lourens Naudé - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67290 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d0e25ed277549af21242009e649d93b73c82576c - Author: nobu - Date: 2019-03-18 10:18:25 +0900 - - parse.y: parser_numbered_param - - * parse.y (parser_numbered_param): hoisted out the contextual - check for numbered parameters. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67289 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4161674b2fbea6bdd01783ac5d3b39d88db22972 - Author: k0kubun - Date: 2019-03-18 03:29:30 +0900 - - Request inline cache values from mjit_compile - - rather than preparing beforehand. - - By having this change, implementing inlining by calling - `mjit_copy_cache_from_main_thread` for inlined methods was made - possible. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d86a1aa045959dfbf5cd472eae0d043180259727 - Author: k0kubun - Date: 2019-03-18 03:07:06 +0900 - - Eliminate mjit_copy_job_t reference from mjit_worker - - and make `copy_cache_from_main_thread` easier to use. - - For implementing inlining later, I'll use `copy_cache_from_main_thread` - inside `mjit_compile`. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67287 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3fc26f601397f9b3e2893488749481f4df96df07 - Author: k0kubun - Date: 2019-03-18 02:12:47 +0900 - - Drop rb_mjit_unit from mjit_copy_job - - and guard iseq from GC by marking iseq in mjit_copy_job. - - This is a refactoring for implementing inlining later and - should not be fixing or introducing any bugs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67286 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit cebc640790c084c110ae413231b976941fbfdc7f - Author: kazu - Date: 2019-03-18 01:35:20 +0900 - - Fix a typo [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67285 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5bd10603416d3f267704b8ad1040ebab163ca3b2 - Author: svn - Date: 2019-03-18 01:32:51 +0900 - - * 2019-03-18 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67284 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dfb9907cd35ab914a421ccd864ca03594265f5a2 - Author: kazu - Date: 2019-03-18 01:32:49 +0900 - - Fix typos [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67283 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a72bc2e716790b933106e524f662f2b63cafc6e2 - Author: kazu - Date: 2019-03-17 22:51:30 +0900 - - Fix a typo [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67282 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6b136a044205f6e6b66df68cd2da2a9c3e952a7d - Author: k0kubun - Date: 2019-03-17 15:20:01 +0900 - - Try disabling Travis cache on darwin - - to check if it resolves "Permission denied" problem. - https://travis-ci.org/ruby/ruby/jobs/507381339 - https://travis-ci.org/ruby/ruby/jobs/507392198 - - TBH I'm not exactly sure why it happens, but I don't have infinite time - to understand this. It would be appreciated to identify the root cause - and remove `DISABLE_CACHE` again if you're sure your patch fixes the problem. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67281 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d4b6198d8f13229123ebbcfcdfc4685a913b1ac8 - Author: k0kubun - Date: 2019-03-17 14:32:53 +0900 - - Roughly increase Azure Pipelines fetch depth - - because --depth=1 may randomly break checkout: - https://dev.azure.com/rubylang/ruby/_build/results?buildId=208&view=logs&jobId=7ded14dc-7a77-59da-f40a-71e137ad96c0&taskId=2045950f-1dcd-54a4-4c23-fae2521239c1&lineStart=1554&lineEnd=1555&colStart=1&colEnd=1 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67280 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 46f5eb5b48213e1561cd23fea4f672f2e0d09647 - Author: k0kubun - Date: 2019-03-17 14:28:54 +0900 - - Update NEWS for --jit option changes [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67279 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 12acc751e3e7fd6f8aec33abf661724ad76c862a - Author: nobu - Date: 2019-03-17 14:21:18 +0900 - - Numbered parameters [Feature #4475] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67278 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0fa4a6a618295d42eb039c65f0609fdb71255355 - Author: k0kubun - Date: 2019-03-17 14:13:38 +0900 - - Change defaults of --jit options - - * --jit-min-calls: 5 -> 10000 - - --jit-min-calls=5 obviously can compile non hotspot. This was not a - problem for MJIT-benchmarks and Optcarrot because the former has very - few hot optimiziable methods and the latter is likely to trigger - compilation of hotspot by its intensive calls to optimizable hotspot - methods and has a very short window to allow limited compilations. - - In real-world applications, it has more time to compile more methods and - it pressures computer's limited resources like icache. We should avoid - compiling too many methods. Also compiling many methods exhausts time - budget for compilation in one ruby process lifetime and delays the "JIT - compaction" of Ruby 2.6. - - JVM is known to use 1,500 for C1 (client) compiler and 10,000 for C2 - (server) compiler for -XX:CompileThreshold by default. - https://docs.oracle.com/javase/8/embedded/develop-apps-platforms/codecache.htm - - When things are called X,000 times, requiring 10,000 can eliminate - compilation of methods which are called only once in these X,000 - iterations and obviously not hotspot. And in fact things like - unicorn-worker-killer restarts unicorn process every 4096 requests. - So I felt 10,000 is good for such an environment. - - * --jit-max-cache: 1000 -> 100 - - By the same reason stated above, we should not allow compiling many - methods especially on MJIT which has a larger overhead due to poor code - locality by dlopen and whose code is also likely to be bigger by just - inlining many VM instructions with -O3 rather than directly generating - low-level code. - - In JVM -XX:ReservedCodeCacheSize is 32M for reserved and 48M for maximum. - --jit-max-cache=1,000 could be closer to it, but in this case MJIT's - compilation is slow due to data synchronization between threads (to be - improved in Ruby 2.7 though) and we do not want to delay the "JIT - compaction" for a long time. - - So I chose a really conservative number for this, but by having method - inlining in the future, wider range could be optimized even with this - value. - - * Optcarrot - - --disable-gems, --benchmark Lan_Master.nes 12 attempts. - No significant impact. - - | r67276 | r67276 --jit | after --jit | - |:-------------------|:------------------|:------------------| - | 50.44369263063978 | 72.87390680773056 | 73.47873485047297 | - | 50.58788746124193 | 78.06820808947026 | 78.29723420171945 | - | 50.77509250801378 | 80.29010348842613 | 78.94689404460769 | - | 50.935361702064405 | 80.42796829926374 | 80.39539527351525 | - | 51.27352672981195 | 81.98758158033202 | 81.6754198664817 | - | 51.720715743242124 | 82.00118535811626 | 82.22960569251283 | - | 51.89643169822524 | 82.2290091613556 | 82.5013636146388 | - | 51.95895898113868 | 82.37318990939565 | 82.74002377794454 | - | 52.10124886807968 | 82.48796686037502 | 83.23354941183932 | - | 52.292280637519376 | 83.0265226541066 | 84.01552618012572 | - | 52.51856237784144 | 83.8797360318052 | 84.8588319093393 | - | 52.65076845986818 | 84.80037351256634 | 85.13577756273656 | - - * Railsbench - - `WARMUP=20000 BENCHMARK=1000 bin/bench` of https://github.com/k0kubun/railsbench. - It gets closer to --disable=jit. - - | | r67276 | r67276 | after | - | | | --jit | --jit | - |:----------|:-------|:-------|:-------| - | req/s | 891.3 | 742.2 | 841.5 | - |:----------|:-------|:-------|:-------| - | 50%ile ms | 1.00 | 1.21 | 1.08 | - | 66%ile ms | 1.02 | 1.24 | 1.09 | - | 75%ile ms | 1.03 | 1.28 | 1.10 | - | 80%ile ms | 1.03 | 1.30 | 1.11 | - | 90%ile ms | 1.09 | 1.42 | 1.15 | - | 95%ile ms | 1.32 | 1.65 | 1.27 | - | 98%ile ms | 4.79 | 2.23 | 1.81 | - | 99%ile ms | 5.68 | 7.52 | 6.64 | - |100%ile ms | 6.52 | 9.69 | 8.59 | - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67277 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 407cd5cc54e12eec6688d175957afee3b022f54a - Author: k0kubun - Date: 2019-03-17 13:13:13 +0900 - - Drop invalid trailing comma in JSON object - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67276 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7fe77cbca9073f521b35fd11bd55dde300559e8d - Author: k0kubun - Date: 2019-03-17 01:53:55 +0900 - - Ignore test-bundled-gems failure on CI for now - - ktsj-san recognizes this issue and it's intentionally left failing now. - As failure notification of this task is NOT indicating ruby is broken, - let's stop notifying the failure fo rnow. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67275 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5b0bcb0b2261a3254a008deecba9227f87e975b4 - Author: svn - Date: 2019-03-17 01:26:46 +0900 - - * 2019-03-17 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67274 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 46a3b440fdb59da2ef250c585c50a4e1499a1f69 - Author: k0kubun - Date: 2019-03-17 01:26:44 +0900 - - Do not build Azure Pipelines on Pull Request - - For 2 reasons: - - * bundled_gems tend to be left broken (like now) - * We don't want Slack notification for pull request and it can't be - disabled on Azure Pipelines - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67273 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8ce6748fc81bdee29b5e790d5e9f8317f77a77bf - Author: k0kubun - Date: 2019-03-16 13:11:54 +0900 - - Notify AppVeyor results to multiple channels - - and simplified config by using dedicated webhook URL. - Sadly AppVeyor YAML does not support alias and so we need to copy-paste - the request body. - - memo: - https://slack-files2.s3-us-west-2.amazonaws.com/bot_icons/2018-02-10/314363543719_48.png - is the URL used by `provider: Slack` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67272 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f044cc1042ef7a3547fdf5f1934a3d108854870f - Author: svn - Date: 2019-03-16 13:00:30 +0900 - - * 2019-03-16 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67271 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7006fdecf2ff5e832cd6da1bf02462146a9190b8 - Author: ktsj - Date: 2019-03-16 13:00:14 +0900 - - dsym should be treated as string [ruby-core:91852] [Bug #15670] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67270 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e4c184c6aeb29e3f47c6daf7c5ff26ef1ef440a8 - Author: k0kubun - Date: 2019-03-15 22:25:06 +0900 - - Increase the number of curl retries - - Because retrying 5 times failed. - https://ci.appveyor.com/project/ruby/ruby/builds/23063048/job/k9lykaagfaex74gg - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67269 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d4f7fac6b8ba975b50c4144168f656454c92724b - Author: svn - Date: 2019-03-15 14:19:58 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67267 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c36a6f97f243778d3eb8e973eba89ce2b424b707 - Author: mame - Date: 2019-03-15 14:19:54 +0900 - - node.h: introduce nd_brace to determine if a hash literal is a keyword - - NODE_HASH#nd_brace is a flag that is 1 for `foo({ k: 1 })` and 0 for - `foo(k: 1)`. - nd_alen had been abused for the flag (and the implementation is - completely the same), but an explicit name is better to read. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67266 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 560bb32fb2a04713bdbe5fa51ee2aaa271da91b6 - Author: nobu - Date: 2019-03-15 10:19:31 +0900 - - NEWS: adjust indents and escape brackets not to be labeled lists - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67265 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3134b20a0129aa072d1cb40a5000297333b5818d - Author: nobu - Date: 2019-03-15 09:44:51 +0900 - - Show the source line at an invalid class/instance variable - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67264 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bf4bcaf06115b32b5ffb4ddea972624d3ac7fa50 - Author: svn - Date: 2019-03-15 07:43:59 +0900 - - * 2019-03-15 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67262 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9e7f197c8e0c20bdf96ab7438e30b0457a85ec72 - Author: nagachika - Date: 2019-03-15 07:43:57 +0900 - - tool/make-snapshot: Use 6-spaces indent for SIZE and digests - to align with release note markdown. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4d6e20297783257574d8143e95fb55aafd91db66 - Author: k0kubun - Date: 2019-03-14 22:47:10 +0900 - - Skip Bundler's test made fail by r67226 - - Possible fix would be https://github.com/bundler/bundler/pull/7038, - but Ruby script ending with `^~~` could be wrongly stripped by that? - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67257 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3db2041f8772ec7c9faf379095d4c8d06e5e25ed - Author: mame - Date: 2019-03-14 18:04:57 +0900 - - compile.c: fix the corner case of rest and keyword arguments - - See https://bugs.ruby-lang.org/issues/10856#note-20 . [Bug #10856] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 146bb252a0fe114befe8aa762596563c886db7fc - Author: mame - Date: 2019-03-14 17:43:51 +0900 - - compile.c (setup_args): process arguments forward - - For unknown reason, setup_args processed the arguments from the last to - the first. This is not only difficult to read, but also inefficient in - some cases. For example, the arguments of `foo(*a1, *a2, *a3)` was - compiled like `a1.dup << (a2.dup << a3)`. The second dup (`a2.dup`) is - not needed. - - This change refactors the function so that it processes the arguments - forward: `foo(*a1, *a2, *a3)` is compiled as `a1.dup << a2 << a3`, and - in my opinion, the source code is now much more readable. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67255 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9800fc26b0367c63ada516b932b13268bb79524b - Author: nobu - Date: 2019-03-14 17:13:46 +0900 - - parse.y: no punctuation instance/class variables - - * parse.y (parse_atmark): exclude punctuation follows @ marks, - whereas it is inclusive after $ mark as some punctuation global - variables exist. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67254 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 277af37b427c635688d9ca7cba0b2fa8d1fb459d - Author: svn - Date: 2019-03-14 15:43:54 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67253 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4c41dc8945d167bc63932325e11f227b4ec102dd - Author: mame - Date: 2019-03-14 15:43:50 +0900 - - compile.c: factor out "compile_args" from "compile_array" - - compile_array function had three usages: array literal, hash literal, - and method arguments. I think the third is completely different than the - first and second. For example, method arguments and popped are - meaningless; keywords_ptr and flag parameter for array/hash literal is - also unused. - - This change refactors them: a function "compile_args" is created for the - third, and removes no longer used parameters of "compile_array". - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67252 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9c077bbed94307d67c82a6e805dd6cc486433df2 - Author: nobu - Date: 2019-03-14 14:57:42 +0900 - - parse.y: show invalid global variable line - - * parse.y (parse_gvar): show the source line erred by invalid - global variable, and indicate the variable including the wrong - punctuation. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67251 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ccc933d4a6873d9be359c8ab04b1f242ed64c1e5 - Author: nobu - Date: 2019-03-14 14:32:30 +0900 - - Hoisted out ruby_show_error_line - - * parse.y (ruby_show_error_line): hoisted out from parser_yyerror. - - * parse.y (regx_options): revert r67226 and show the error line - separately. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67250 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 86c5806c6a3452a0b81595f8a306ec5c421a16a8 - Author: nobu - Date: 2019-03-14 11:18:05 +0900 - - More initializations of YYLTYPE - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e20aa14a82604db9a5e4d33d206aacfebfbb7d62 - Author: svn - Date: 2019-03-14 10:04:55 +0900 - - * 2019-03-14 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67248 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6a860ea0062e2f18435a870ae8734f25bc9d9827 - Author: mame - Date: 2019-03-14 10:04:53 +0900 - - Guard out the test when it is run under root permission - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67247 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0d6910dfc8e63d8961b338ea949bc398dd52b5d0 - Author: svn - Date: 2019-03-13 10:44:45 +0900 - - * 2019-03-13 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67244 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8415df619ecfe9d869067faf1282f3552d18e578 - Author: nobu - Date: 2019-03-13 10:44:34 +0900 - - Remove unnecessary local variable - - newline is always "\n" when it is used. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67243 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8952525a8e688e0fe67bbc7a3c84256190a44c23 - Author: nobu - Date: 2019-03-12 21:04:03 +0900 - - Assertion for r67226 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67227 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b6468b01f7288789ef2e9bf548d81cdadb8ef053 - Author: nobu - Date: 2019-03-12 13:23:17 +0900 - - Show unkwon regexp option line - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67226 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 60bddf589fb518c6b84515749775dc78458aeaad - Author: svn - Date: 2019-03-12 13:11:51 +0900 - - * 2019-03-12 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67225 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e5d10cda07b23682e5e4e64d1324e4d3247d4785 - Author: nobu - Date: 2019-03-12 13:11:41 +0900 - - Flush erred token - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67224 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a3a1199f413f7a96c4c90c7513c832838379e468 - Author: naruse - Date: 2019-03-11 22:00:31 +0900 - - fix wrong merge of conflict at r67217 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67221 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 43ff4ef912df53da6cadf009ff4e366a0d79626a - Author: svn - Date: 2019-03-11 21:48:34 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67218 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 76fc1ce0a774aab411b4e9f4462c236852624764 - Author: mame - Date: 2019-03-11 21:48:33 +0900 - - The combination of non-Symbol keys and Symbol keys is now allowed again - - Revert r64358. [Bug #15658] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67217 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bda6df356a373289e179f2b09c0bbe84ffc70d03 - Author: nobu - Date: 2019-03-11 21:47:02 +0900 - - parse.y: moved excessed_comma - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67216 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bc76d8a232bed2e245cd3997ebd9826938f7a738 - Author: hsbt - Date: 2019-03-11 20:37:17 +0900 - - Removed from standard library. No one maintains it from Ruby 2.0.0. - - [Bug #15652][ruby-core:91736] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67215 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 098ec6eb5076f3a140777c5cb56be4465bfa432f - Author: hsbt - Date: 2019-03-11 19:09:48 +0900 - - Added to check MJIT constant for the Ruby 2.3-2.5. - - This commit picked from https://github.com/ruby/webrick/commit/2c13beca2c25dc099b7ed20dbe4d7ede77dfef86 - - Co-authored-by: Colby Swandale - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67214 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 448262c81d7fdbca7db0b50059e53b423a2436ec - Author: knu - Date: 2019-03-11 18:52:40 +0900 - - Mention the addition of Enumerator::Yielder#to_proc in NEWS - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67213 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7d3d8e79fe9cc9f21cd4341f0a6fb2e6306688fd - Author: hsbt - Date: 2019-03-11 18:52:31 +0900 - - fall back to copy + unlink on EPERM - - [Feature #15415][ruby-core:90536] - - Co-authored-by: Eric Wong - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67212 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c2d3b8dfb43e6dbc0b9af3c0f880636ffcc06ca9 - Author: knu - Date: 2019-03-11 18:49:14 +0900 - - Implement Enumerator::Yielder#to_proc - - A Yielder object can now be directly passed to another method as a - block argument. - - ```ruby - enum = Enumerator.new { |y| - Dir.glob("*.rb") { |file| - File.open(file) { |f| f.each_line(&y) } - } - } - ``` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67211 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7d9664953ba574b04f6558e80e95a71289275d64 - Author: nobu - Date: 2019-03-11 12:53:33 +0900 - - Removed circular require - - Import rubygems/rubygems#2679 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67206 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit aef24ecbe959b5e91e2e06b3a2cbfaa02cae1672 - Author: nobu - Date: 2019-03-11 12:53:31 +0900 - - Renamed duplicate test - - Import rubygems/rubygems#2678 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67205 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 53f2cda8d4717f15680e0a5b3638443182ca6c1f - Author: svn - Date: 2019-03-11 10:37:21 +0900 - - * 2019-03-11 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67204 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e5f01dab9d1faebe8f1c8eab3ed805335c4b712d - Author: nobu - Date: 2019-03-11 10:37:16 +0900 - - numeric.c: fix infinite loop - - * numeric.c (int_pow): fix infinite loop in the case of y equal 1 - and power of x does not overflow. - [ruby-core:91734] [Bug #15651] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67203 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f399c2912bcb0ab782fc14a1987e07ceaaf060e7 - Author: svn - Date: 2019-03-10 15:46:36 +0900 - - * 2019-03-10 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67202 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ffec546b0e522a647c7c2473c40dbe018156736d - Author: nobu - Date: 2019-03-10 15:46:28 +0900 - - eval.c: clear internal errinfo - - * eval.c (ruby_cleanup): clear internal error info when invoking - end procs. [ruby-core:91731] [Bug #15650] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67201 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 72df0a8e4703c4e14cb2014d59d8ddad09a47859 - Author: nobu - Date: 2019-03-09 19:17:33 +0900 - - Add ignored_sp event - - * ext/ripper/lib/ripper/lexer.rb (Ripper::Lexer): add ignored_sp - event which will be fired from Ripper::Lexer#on_heredoc_dedent - method. [ruby-core:91727] [Bug #15648] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67200 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8776a09d4eed5662ee28eff0d829e880cc001684 - Author: nobu - Date: 2019-03-09 19:14:16 +0900 - - Use assert_respond_to - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67199 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 28f619e301cf5f266f38fe764c4018b7fabc77cb - Author: svn - Date: 2019-03-09 09:12:53 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67198 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5aecf03ec30a098ba58627aadcfbff4acdd11fdd - Author: nobu - Date: 2019-03-09 09:12:52 +0900 - - variable.c: hoisted out rb_namespace_p - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67197 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5cfa518406d9b411512cffbe6951537bd25a3ebb - Author: svn - Date: 2019-03-09 09:00:35 +0900 - - * 2019-03-09 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67196 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d5770197462ee4445c4bd4898339ce50052af7d7 - Author: nobu - Date: 2019-03-09 09:00:26 +0900 - - Early return in gc_mark_children - - for types Float, Bignum and Symbol as they do not have references - and singleton classes. - - [Fix GH-2091] - - From: Lourens Naudé - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67195 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit caa2a5bb0eb919d022bd50a7553197192dd78014 - Author: svn - Date: 2019-03-08 09:35:56 +0900 - - * 2019-03-08 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67194 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e185c9716e6cabc2a9d103c8c7a77ee73fbba546 - Author: tadd - Date: 2019-03-08 09:35:53 +0900 - - use __GNUC__ instead of __GCC__. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67193 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4c1952f4bf9d2fe183431747a83596287e9b7631 - Author: hsbt - Date: 2019-03-07 20:24:48 +0900 - - Ignore to handle the different platform - - When `GEM_HOME` was shared with CRuby and JRuby. RubyGems try to - handle both platforms. It should be ignored the different platform. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67190 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8cc53044081fa00384412a0f141c9f1be9065e1a - Author: svn - Date: 2019-03-07 14:11:55 +0900 - - * 2019-03-07 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 23488589b38f09a95e7ba61a72b12358ad6185cb - Author: nobu - Date: 2019-03-07 14:11:46 +0900 - - io.c: chomp CR at the end of read buffer - - * io.c (rb_io_getline_fast): chomp CR followed by LF but separated - by the read buffer boundary. [ruby-core:91707] [Bug #15642] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67188 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1598b5e7b343b6c05e6cab47ac3878276aea6d37 - Author: nobu - Date: 2019-03-06 20:49:53 +0900 - - Symbol creation is not a problem now unless pinned down - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67187 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7fed9a2df50404c734504e0405ecaa98f0d9147c - Author: nobu - Date: 2019-03-06 20:16:34 +0900 - - proc.c: call respond_to_missing? with a symbol - - [ruby-core:91683] [Bug #15640] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67185 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a679e98e64a7c69d65578b11ef072e1115d536ad - Author: naruse - Date: 2019-03-06 18:48:39 +0900 - - Fix PTY.open on OpenBSD [Bug #15607] - - From: Jeremy Evans - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67183 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f831ca67642101e29bd2de91998d80560d2b7fb6 - Author: duerst - Date: 2019-03-06 12:19:10 +0900 - - delete directory and files related to Unicode version 11.0.0 - - this completes and closes feature #15321 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67174 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b3f641085e347d55c1b9b72e25a19c28cdeb84f6 - Author: duerst - Date: 2019-03-06 12:15:06 +0900 - - add news about Unicode version update (issue #15321) to NEWS [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67173 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fdc42bf88d7900b722e46976b981ce0fa3d4f1e8 - Author: kazu - Date: 2019-03-06 12:04:36 +0900 - - Remove deprecated `sudo: false` in .travis.yml - - - https://blog.travis-ci.com/2018-11-19-required-linux-infrastructure-migration - - https://docs.travis-ci.com/user/reference/overview/#deprecated-virtualization-environments - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67172 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d4303528d39d38ae2141f13064e82a7908df4f14 - Author: hsbt - Date: 2019-03-06 11:08:20 +0900 - - Skip malicious extension test with mswin platform. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67171 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ad398b7e0c857cbaaf469f44759e163159b60148 - Author: svn - Date: 2019-03-06 10:55:26 +0900 - - * 2019-03-06 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67170 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit cff7eefa07f8e7bccb5c0b8c856e5657d6d45ffa - Author: duerst - Date: 2019-03-06 10:55:19 +0900 - - update Unicode version (and Emoji version) to 12.0.0 - - - common.mk: set UNICODE_VERSION and UNICODE_EMOJI_VERSION to 12.0.0 - - - lib/unicode_normalize/tables.rb: update table data to Unicode version 12.0.0 - - - enc/unicode/12.0.0/casefold.h, enc/unicode/12.0.0/name2ctype.h: add generated - files for Unicode version 12.0.0 - - This is the main commit for #15321. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67169 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 08f8cfe14e0f8937e3bcf8a22becdc5ce60b920e - Author: hsbt - Date: 2019-03-05 12:32:58 +0900 - - Merge RubyGems upstream: 56c0bbb69e4506bda7ef7f447dfec5db820df20b - - It fixed the multiple vulnerabilities. - https://blog.rubygems.org/2019/03/05/security-advisories-2019-03.html - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67168 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 593505ac6f802d2b5bff469425b7c76b65cc9b10 - Author: nobu - Date: 2019-03-05 09:32:15 +0900 - - string.c: respect the actual encoding - - * string.c (rb_enc_str_coderange): respect the actual encoding of - if a BOM presents, and scan for the actual code range. - [ruby-core:91662] [Bug #15635] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67167 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4045cb82227e7b97342eb92b17e35f534128e90d - Author: svn - Date: 2019-03-05 09:28:25 +0900 - - * 2019-03-05 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67166 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 19d3aaff5c45c8ee0a9083a182d77cd5f5acf935 - Author: nobu - Date: 2019-03-05 09:28:22 +0900 - - Directories in RbConfig may not exist until installation - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67165 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ba982a3da32ecb3ae0f08eceda55c503f39d3875 - Author: svn - Date: 2019-03-04 17:13:27 +0900 - - * 2019-03-04 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67164 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 958798851d24a70e849e19592a36edce2daf18d1 - Author: nobu - Date: 2019-03-04 17:13:25 +0900 - - FindFirstFile cannot glob share names - - * win32/file.c (replace_to_long_name): do not try to glob host - names and share names by FindFirstFile which is useless for that - purpose. [ruby-core:91656] [Bug #15633] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67163 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e4885d8accb0a30069374ee21f688631fca45f62 - Author: k0kubun - Date: 2019-03-03 22:35:25 +0900 - - Use --depth=1 for vs2019 as well - - to shorten time to clone - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67162 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2e9d4b9f0bd0cae89e75a7a16b2cf0c55aeb9c0e - Author: ko1 - Date: 2019-03-03 15:18:43 +0900 - - do not close FSs explicitly. - - * test/ruby/test_dir.rb: r67159 closes all files explicitly - but this change breaks attempt of this test introduced at - r56467. Try another solution which removes all references - from an Array with `#clear`. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67161 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7ebea69529a15e6e3004aeafb40f7d469f47b37d - Author: svn - Date: 2019-03-03 09:17:21 +0900 - - * 2019-03-03 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67160 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 19a8bbafd8ef8b48a9d2832e605fb00b3284630e - Author: ko1 - Date: 2019-03-03 09:17:18 +0900 - - close opened files explicitly - to fix a test failure like - http://ci.rvm.jp/results/trunk-theap-asserts@silicon-docker/1804207 - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67159 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4eda7e1d1481168c016a589b53af2233ea2defb2 - Author: k0kubun - Date: 2019-03-01 23:09:41 +0900 - - Stop sharding --jit-wait testing - - by just randomizing test order. - - The original motivation to shard --jit-wait tests was forcing to test - major parts of code without actually stopping to test MJIT after - TracePoint enablement. But it tends to increase the test time because we - often compile the same thing in different shards. - - I made this decision because we seem to hit 1.5h timeout of Wercker - these days, and Wercker is really bad at handling timeout (it does not - report timeout as failure, but just keeps it "pending" state) - https://app.wercker.com/ruby/ruby/runs/mjit-test2/5c78f15cc9e725000805b86c?step=5c79031d6c1e2c0008ac41c3 - - By randomizing this, we could test things randomly. The downside of this - approach is that we may not be able to find a specific commit that - caused a future failure by having TracePoint in a very early phase. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67158 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4fd5a9e9bb58ab666809eda3256db2ae98b0032f - Author: hsbt - Date: 2019-03-01 22:16:29 +0900 - - Try to build readline extension with vcpkg on Azure Pipelines. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67157 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fe28e007f3226c48aee497558f8eff535485423d - Author: hsbt - Date: 2019-03-01 17:46:07 +0900 - - Try to build vs2019preview on Azure Pipelines. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67156 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 19cf8e03878e93a9594c275b8f82a9d53e02eda1 - Author: hsbt - Date: 2019-03-01 17:31:43 +0900 - - Fixed build failure of Travis CI. We need to support `make srcs`. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a4020fbefcf61edfe604c25a0bc70a7aed380070 - Author: kazu - Date: 2019-03-01 13:21:33 +0900 - - Add Azure Pipelines build status badge [ci skip] - - copy from README.md. see r67146 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67152 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fb04855c415c2ea33f863841a4f4bdbe059131a5 - Author: k0kubun - Date: 2019-03-01 12:56:33 +0900 - - Drop obsoleted continueOnError - - now it's passing thanks to r67149 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67151 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9dbb14b77cb929d0f59b22152ea817e70ee8fa13 - Author: svn - Date: 2019-03-01 12:45:03 +0900 - - * 2019-03-01 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67150 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fe61f14d53c5b18d3c475eee23502ab1e5446291 - Author: hsbt - Date: 2019-03-01 12:45:00 +0900 - - Support YACC environment variable for ripper. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67149 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dfec1eb3cee833fa4bef6ce027a3e702508261ba - Author: k0kubun - Date: 2019-02-28 23:19:47 +0900 - - Add Azure Pipelines build status badge [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67146 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7b81d7f5c2a5fe93835c2b2d865a7378f5499f0f - Author: k0kubun - Date: 2019-02-28 22:26:14 +0900 - - Mark vs2017 build as continueOnError for now - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67145 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 12eca471a466daa4b03cb2c3edfb1a7039071eb6 - Author: k0kubun - Date: 2019-02-28 21:47:36 +0900 - - Revert "Try clean: true for vs2017 checkout failure" - - This reverts commit b0e350fe16ad17eabf5bbc603f7d817c06ce8554. - - The issue seems to be invalid tag name including `"` in ancient tag. - We're trying to delete that. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67144 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b0e350fe16ad17eabf5bbc603f7d817c06ce8554 - Author: k0kubun - Date: 2019-02-28 21:32:24 +0900 - - Try clean: true for vs2017 checkout failure - - https://dev.azure.com/rubylang/ruby/_build/results?buildId=107 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67143 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f03775fc0f536b43ace587f6ae9c299a0b8598ef - Author: k0kubun - Date: 2019-02-28 21:19:08 +0900 - - Try fetchDepth: 1 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67142 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ccd1c02ceaa04b29757954906859fe3b9e3dedf0 - Author: svn - Date: 2019-02-28 21:01:09 +0900 - - * 2019-02-28 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ef8ed5deee7a687190a33ac655dec271bb18db26 - Author: hsbt - Date: 2019-02-28 21:01:06 +0900 - - Removed fake environment variable because It is not necessary for macOS. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67140 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6f2c516d8031e1c7f4704bd59c5349fab7f24187 - Author: svn - Date: 2019-02-27 21:40:19 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67139 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 19408c785c6f258024efcaa69d0642ad995c50b3 - Author: hsbt - Date: 2019-02-27 21:40:19 +0900 - - skip to not support color tty environment. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67138 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 019864b4a5d14f25f5880cda996306908837d7ee - Author: hsbt - Date: 2019-02-27 21:30:24 +0900 - - Test Bundler examples and bundled gems tests with Azure Pipeline. - - * They are invoked on Linux and macOS environment. - * Try to build with vs2017. But it's only binary build. - - https://dev.azure.com/rubylang/ruby/ - - [Feature #15181][ruby-core:89222] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67137 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c2ee33898b21af45e9dad89942772c00d3ffc819 - Author: svn - Date: 2019-02-27 12:26:09 +0900 - - * 2019-02-27 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67136 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8092d571be8f65909c6e5a931429933d19566f36 - Author: svn - Date: 2019-02-27 12:26:09 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67135 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5e2a8cb7b9de3d5a22e29886a5a1b7cafacdc31a - Author: nobu - Date: 2019-02-27 12:26:05 +0900 - - Remove stale arguments - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67134 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ff074304f4d393fa4a9c97f30829ccf5497009ae - Author: svn - Date: 2019-02-26 10:34:20 +0900 - - * 2019-02-26 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67133 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e2d1bb1fa4850c8212a7cdbd76a92634a1115453 - Author: duerst - Date: 2019-02-26 10:34:17 +0900 - - add exceptions for indenting conventions for files related to regular expressions - - Ruby uses the Oniguruma/Onigmo regular expression engine, including the underlying - character encoding framework. In contrast to other code implementing Ruby, the - regular expression engine related code is formatted with two spaces per indent - level. This commit adds rules for these files. (The commit may not completely cover - all related files.) [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67132 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 23a8183bea8dda2d7528b57f2e0c8bc31162db3e - Author: nobu - Date: 2019-02-24 20:57:18 +0900 - - Check stx_btime in struct statx - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67131 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a582007e3611e1d6e1d57b697391be74dc03c2ac - Author: svn - Date: 2019-02-24 14:27:40 +0900 - - * 2019-02-24 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67130 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8b8285e25348ab6a7b16facb31e5753711b1191e - Author: glass - Date: 2019-02-24 14:27:33 +0900 - - configure.ac: remove check for broken memmem - - the bug of memmem(3) was fixed in glibc 2.1 released in 1999. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67129 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dc700cf903e7fa1852bd9390e5e350d07edf1000 - Author: glass - Date: 2019-02-23 13:42:48 +0900 - - configure.ac: skip check of statx() on AIX - - Linux and AIX have statx() with different prototype. - - Linux: int statx(int, const char*, int, unsigned int, struct statx*) - AIX: int statx(char, struct stat*, int, int) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67128 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6604e1b7cd75bef7ed72db699d8f88a7fb56c330 - Author: hsbt - Date: 2019-02-23 12:43:58 +0900 - - Merge json-2.2.0 from flori/json. - - https://github.com/flori/json/releases/tag/v2.2.0 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67127 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f22ffd83e92a214a697e93fe715d29cbfa52084d - Author: k0kubun - Date: 2019-02-23 11:22:05 +0900 - - spec/../rbconfig_spec.rb: skip spec not working on MinGW - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67126 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0dab1fce7c1eec3b67340e32678841151119beb1 - Author: svn - Date: 2019-02-23 11:17:57 +0900 - - * 2019-02-23 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67125 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 052dbbe74f00733b96841fc8fbe7bdefadf0440e - Author: k0kubun - Date: 2019-02-23 11:17:54 +0900 - - spec/../shared/write.rb: suppress random failure - - due to MJIT worker's known race condition. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67124 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f53548a86cec0ebe147c6ee4484fd8ccf0f42c79 - Author: svn - Date: 2019-02-22 16:25:54 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67123 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b1c1ee7183f6c9b6f585d35a5a8786594e1e7733 - Author: ko1 - Date: 2019-02-22 16:25:51 +0900 - - change `cfunc->invoker` type for opt. - - * vm_insnhelper.c: change `call_cfunc_*` parameters order - and specify a function type for the passed func ptr. - This fix reduce the number of asm instructions, such as: - # before this patch - 0000000000000110 : - 110: 48 89 fa mov %rdi,%rdx - 113: 31 c0 xor %eax,%eax - 115: 48 89 f7 mov %rsi,%rdi - 118: ff e2 jmpq *%rdx - 11a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) - - # after this patch - 0000000000000110 : - 110: ff e1 jmpq *%rcx - - However, this kind of instruction reduction doesn't affect - any performance because of great CPU architectures :p - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67122 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4af7f77d0ffe4371610143731e08f6e74314b4a1 - Author: nobu - Date: 2019-02-22 15:43:11 +0900 - - STATX_BTIME depends on filesystems - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67121 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit def040f6c330694e4f620a44b7790444d0f59157 - Author: nobu - Date: 2019-02-22 15:35:44 +0900 - - Skip EPERM, when statx(2) is wholely blocked - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67120 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1ae52fcddff2440ee96013c020c41844332fee38 - Author: nobu - Date: 2019-02-22 15:22:24 +0900 - - Skip EPERM, like as r67102 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67119 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit aa5dd6fe7ef58b4d10eb3192c342043fbe8be8cd - Author: nobu - Date: 2019-02-22 15:14:22 +0900 - - STATX_BTIME depends on filesystems - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67118 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b9357e4d1b6f318d2ffa7323f14f01272ad336ee - Author: nobu - Date: 2019-02-22 15:07:30 +0900 - - File#birthtime depends on the kernel version on Linux - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67117 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fc90c4ec5da9e60c18785b3b4c393b5294009c1e - Author: nobu - Date: 2019-02-22 15:01:08 +0900 - - Support File#birthtime on Linux - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67116 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 607ecea7c9ca30ef4dbdadc72c9d32131946a069 - Author: nobu - Date: 2019-02-22 12:08:38 +0900 - - Unified rb_file_s_birthtime - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67115 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 67032770242c09f9280cd765ff93735b451856bb - Author: svn - Date: 2019-02-22 05:59:12 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67114 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4e15be8bade0a6a75c209eff3b96b4c4f03019a9 - Author: ko1 - Date: 2019-02-22 05:59:08 +0900 - - refactoring compile.c. - - * compile.c: refacetoring: - * initialize `branches` with Qfalse instead of 0. - * make compile_call* functions from `iseq_compile_each0()` - to make modifying them easy. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67113 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit da7976235fbc2986925969646071bebe3702e49f - Author: eregon - Date: 2019-02-22 00:38:59 +0900 - - Update to ruby/spec@7a16e01 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67112 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b8e389a0f3226c90e96e02e6396686a3bef6a456 - Author: svn - Date: 2019-02-22 00:38:38 +0900 - - * 2019-02-22 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67111 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 203d946781ce29069f56f259d455ffb3039315f5 - Author: svn - Date: 2019-02-22 00:38:37 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67110 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 92d3a7262468717757a3cf4ce24a5a6dd98f516a - Author: eregon - Date: 2019-02-22 00:38:36 +0900 - - Update to ruby/mspec@2ee5661 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67109 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8b94ce988b1a000325d47daa02e16dd487c4f27d - Author: nobu - Date: 2019-02-21 16:32:24 +0900 - - Constified - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67108 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 936b61d4acffc632608d1c1990b02e6a791107d0 - Author: nobu - Date: 2019-02-21 16:03:12 +0900 - - Path for AT_EMPTY_PATH must not be NULL - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67107 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 32f3961fd687d1096f444d09c78d7dcd247649d1 - Author: svn - Date: 2019-02-21 15:12:17 +0900 - - * 2019-02-21 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67106 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7c369b78471e7c847cb4ffdbe95600bca55cabb5 - Author: nobu - Date: 2019-02-21 15:12:13 +0900 - - Separate fstatx_without_gvl from statx_without_gvl - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67105 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7c2bbd1c7d40a30583844d649045824161772e36 - Author: hsbt - Date: 2019-02-20 19:43:23 +0900 - - Adjust the rubycop rules of Bundler upstream repository. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67104 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5f08c9e2e073db205ec2bf2f5843117cb92ada68 - Author: nobu - Date: 2019-02-20 18:55:25 +0900 - - Do not test File class method - - It fails by EPERM for unknown reason. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67103 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit cc6806c76c217354c6d1ad70585b033a00faa7a9 - Author: nobu - Date: 2019-02-20 17:31:17 +0900 - - Skip EPERM - - Docker's default seccomp whitelist does not include statx syscall - by the default. Skip this error for now. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67102 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c3e0244efe21a99cf81fb26a18b797e0e84b54a5 - Author: nobu - Date: 2019-02-20 17:09:32 +0900 - - Revise the example on OpenBSD - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67101 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8ed170961601a1becec56ffc0f0e7da1f9e56892 - Author: ko1 - Date: 2019-02-20 16:46:15 +0900 - - fix rubyspec test to pass tests. please revisit it @nobu? - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67100 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e487e86e982a56ded6e5070aeef0d77655043216 - Author: ko1 - Date: 2019-02-20 16:34:05 +0900 - - fix r67097 with cast - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67099 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f2d3b3623feb66b6ba59ecd866c40b531a3c5251 - Author: kazu - Date: 2019-02-20 16:19:39 +0900 - - Fix document and return value of `IO#autoclose=` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67098 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 15a98ab42838be248a5b59ca342033ee338357ad - Author: nobu - Date: 2019-02-20 15:54:23 +0900 - - Try statx syscall - - * file.c (rb_file_s_birthtime): export for pathname to check if - birthtime is supported. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67097 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d034fcb13f04b096f99d1824d5e7dd8ed256713e - Author: svn - Date: 2019-02-20 13:39:57 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67096 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b7f899681371358e84dbf230796a0a661217c2cd - Author: marcandre - Date: 2019-02-20 13:39:56 +0900 - - * spec/ruby: Tweak Enuemrator::Chain#rewind spec so that arity of block matches what is yielded - - Calling `and_yield(*args)` adds an implicit expectation that all the `args` are passed to a block that can accept them, even though blocks that are not lambda-like don't mind extra arguments. - It so happens that this spec passed on Ruby 2.6.1 See [Bug #15613] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67095 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5e80e9144f88bac3e2d8890c9e2fc22f5e391aff - Author: ko1 - Date: 2019-02-20 13:27:24 +0900 - - revert r67093 because it breaks tests - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67094 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 10deba066e207eb142e7b61b1479c8af4016b247 - Author: nobu - Date: 2019-02-20 13:02:30 +0900 - - Try statx syscall - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67093 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5210b89fd730815ba2510b09a890910a7995a4a1 - Author: svn - Date: 2019-02-20 00:39:37 +0900 - - * 2019-02-20 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67092 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 193a06caf5b1fdbe9b4c6110314df03cab7145f5 - Author: k0kubun - Date: 2019-02-20 00:39:35 +0900 - - insns.def: opt_regexpmatch2 is not a leaf insn - - related: r66982 - Sadly opt_regexpmatch2 was not a leaf insn either. - http://ci.rvm.jp/results/trunk-vm-asserts@silicon-docker/1751213 - - CHECK_INTERRUPT_IN_MATCH_AT is just like RUBY_VM_CHECK_INTS, and it may - call arbitrary Ruby method, for example a GC finalizer from postponed - job in this case. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67091 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fe0f98e74746654c6b8bdd5203733ad01c732bde - Author: svn - Date: 2019-02-19 14:45:00 +0900 - - * 2019-02-19 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67090 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d3ff564779356be08274f851bf40f6a9b897fb6d - Author: svn - Date: 2019-02-19 14:45:00 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67089 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 88798f0787d9d4a331994332837e44f9fcc7bc5c - Author: glass - Date: 2019-02-19 14:44:53 +0900 - - file.c: enable File.birthtime on Linux - - enable File.birthtime on Linux if statx(2) is available. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67088 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5f090b8d8238b2adc0bf05d003d4384769b63e12 - Author: svn - Date: 2019-02-18 22:33:26 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67087 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d04963501bc057685220fa1160fb9a102dd46d57 - Author: hsbt - Date: 2019-02-18 22:33:25 +0900 - - Use ENV["BUNDLE_GEM"] instead of gem command provided by system ruby. - - It break the examples of bundler. Because some examples detect the - different version of system ruby than test target version like trunk. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67086 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bef0c0a3678d07ce40f147051fba092ee30da640 - Author: hsbt - Date: 2019-02-18 18:53:13 +0900 - - Fixup r66984. It breaks bundler's examples. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67085 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5c11d854110cd130a7b64e01b1e67bcf479ad886 - Author: svn - Date: 2019-02-18 18:46:28 +0900 - - * 2019-02-18 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67084 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3661d0521fa2cf4cdf9efa51c69cad4ea93fa2b3 - Author: hsbt - Date: 2019-02-18 18:46:25 +0900 - - The ruby core applied the difference structure from bundler upstream repository. We need to modify a configuration for test-bundler. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67083 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 124957566f041e5c6e8f678dfaf62cae381826dc - Author: ktsj - Date: 2019-02-17 15:59:11 +0900 - - .gdbinit (rp): follow up changes in r66390 - - RHASH_ARRAY_{LEN,BOUND}_{MASK,SHIFT} have been renamed to - RHASH_AR_TABLE_{SIZE,BOUND}_{MASK,SHIFT}. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67082 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1ce2ba32fb94aae94b7519a64e6330a6ff88c888 - Author: svn - Date: 2019-02-17 00:51:07 +0900 - - * 2019-02-17 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67081 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e5347b1c905acc58d98f9497d8edcb0f78729db6 - Author: naruse - Date: 2019-02-17 00:51:01 +0900 - - Revert "Assert that union sizes match" - - This reverts commit r67078. - It breaks armv7l-linux-eabihf and sparc-solaris2.11. - http://rubyci.s3.amazonaws.com/scw-9d6766/ruby-trunk/log/20190215T061708Z.diff.html.gz - http://rubyci.s3.amazonaws.com/unstable11s/ruby-trunk/log/20190215T072546Z.diff.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67080 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f450652becfaa6561399455a28211081704b0228 - Author: k0kubun - Date: 2019-02-15 21:38:03 +0900 - - Bump the benchmark-driver git ref to v0.14.13 (macOS memory runner support) - - [Fix GH-2082] - - From: Lourens Naudé - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67079 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 387e8967a37b269de221614d8f83060d5d713bcb - Author: nobu - Date: 2019-02-15 14:51:39 +0900 - - Assert that union sizes match - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67078 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b1daba8227ef420247e0133ecf9bb5b647b891e0 - Author: svn - Date: 2019-02-15 00:29:08 +0900 - - * 2019-02-15 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67077 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7570864267cb258e2d29881e37cb3b8a6930727a - Author: mrkn - Date: 2019-02-15 00:29:04 +0900 - - Introduce RVALUE_EMBED_LEN_MAX to remove a magic number - - * include/ruby/ruby.h: replace a magic number with RVALUE_EMBED_LEN_MAX, - which indicates the number of VALUE elements can be embedded in a RVALUE. - - * internal.h: ditto. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67076 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit cb57336e86dbe9c21fd8bc447912256843fe6b26 - Author: nobu - Date: 2019-02-14 23:21:14 +0900 - - GNU make does not need srcs_vpath - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67075 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4ae3df42f723d25b0fe4ba6b2689d607b01c6f48 - Author: hsbt - Date: 2019-02-14 21:59:03 +0900 - - Merge RubyGems master@9be7858f7f17eae3058204f3c03e4b798ba18b9c - - This version contains the some style changes by RuboCop. - - * https://github.com/rubygems/rubygems/commit/9d810be0ede925fb2e3af535848582c3f8e0e72f - * https://github.com/rubygems/rubygems/commit/61ea98a727fb1b76b6fac52d74107ee4b02aaef2 - * https://github.com/rubygems/rubygems/commit/795893dce3c5f8540804fc08144cc6a90f086b13 - * https://github.com/rubygems/rubygems/commit/9be7858f7f17eae3058204f3c03e4b798ba18b9c - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d1e6304a891fc5e9cc63e50520bdc798fb95b829 - Author: nobu - Date: 2019-02-14 14:42:14 +0900 - - Prefer relative directory from srcdir to top_srcdir - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67073 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4fc656a2f331a91a71208d5a426fce951fa5ca82 - Author: nobu - Date: 2019-02-14 14:40:08 +0900 - - Removed duplicate dependents - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67072 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7b8986f2e441f5f71ec9c375baf71ee06fa53130 - Author: nobu - Date: 2019-02-14 00:48:36 +0900 - - Cleaning gems should not clean ext - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67071 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bd8cb9f5d268881a49819a1996d3dffdb951168e - Author: nobu - Date: 2019-02-14 00:34:08 +0900 - - Parenthesize `for` to ignore errors - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67070 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4844a449405060892db4c407b12f141364d3142d - Author: nobu - Date: 2019-02-14 00:20:50 +0900 - - Suppress a warning - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67069 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 63ca54e7aa1be7e8cb2eb11881dbc5bb9cfccb37 - Author: svn - Date: 2019-02-14 00:19:28 +0900 - - * 2019-02-14 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67068 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 43ee21f26dcf911450d5da9b3503eae0d7a87b76 - Author: nobu - Date: 2019-02-14 00:19:26 +0900 - - Ignore errors on cleaning - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67067 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f678332d8298e2c19d7c7daf19eeaf023f9a574f - Author: nobu - Date: 2019-02-13 21:02:08 +0900 - - Consider END block - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67066 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 87b1d186f9456e0c8c716eb12c67bc3c6d54ac41 - Author: nobu - Date: 2019-02-13 20:51:03 +0900 - - Fix rb_bug message pattern list - - "Other runtime information" section depends on platforms. - Make no expectation. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67065 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 00679d202d17bc629e02632801eac7c1bc7490c8 - Author: nobu - Date: 2019-02-13 20:36:15 +0900 - - Fix rb_bug message pattern list - - Each setions are separated by an empty line, and C level backtrace - information format has been changed. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67064 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c6a2de302900784dd74106091c723862119bdeca - Author: ko1 - Date: 2019-02-13 18:40:45 +0900 - - check return value of `write` to suppress warning. - - * ext/-test-/gvl/call_without_gvl/call_without_gvl.c (do_loop): - `-Wunused-result` compiler option (gcc?) checks checking - return value of `write`. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67063 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fb159b492f4c027d5068e17f0cd3360f31507878 - Author: naruse - Date: 2019-02-13 13:49:36 +0900 - - fix test for r67061 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67062 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a8c0f27276c16d4774f611ce2b1c793b92dcdc89 - Author: naruse - Date: 2019-02-13 13:32:03 +0900 - - Remove message to recommend to repot bug - - This message is showed on SEGV, but it is usually caused by 3rd party - libraries and we don't help reporters well. I concluded this message - doesn't help users as expected. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67061 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e20e67980e80bc83ca259bdf28e7247576fe742d - Author: svn - Date: 2019-02-13 13:25:00 +0900 - - * 2019-02-13 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67060 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 698c55d32a0aa61a7db127f7f88e87b7717b41f2 - Author: svn - Date: 2019-02-13 13:25:00 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67059 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 74b19e330adbdae2d8e53b58f1a2a7b725e69c8d - Author: ko1 - Date: 2019-02-13 13:24:59 +0900 - - fix imemo entry description. - - * ext/objspace/objspace.c (count_imemo_objects): `imemo_type_ids` - should be match with `enum imemo_type` in internal.h and this - patch fix mismatch. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67058 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b2f424150909a4441e906161d729d871b899101e - Author: nobu - Date: 2019-02-12 21:31:55 +0900 - - Update dependencies, internal.h includes ruby.h - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67057 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit da1f593acabd1d95b4567170ed886c1cd5f33b9a - Author: nobu - Date: 2019-02-12 21:31:01 +0900 - - Skip erb files, idirect prerequisites - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67056 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 29c9f4a590e8ad415fb88e4309ec5df8bcc868e3 - Author: nobu - Date: 2019-02-12 21:15:30 +0900 - - Replace versioned Unicode header paths with UNICODE_HDR_DIR - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67055 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 91cb5c1a70b2f659b6ee1dad4ca7c658fe1e00f9 - Author: ko1 - Date: 2019-02-12 12:45:15 +0900 - - fix empty Hash memsize. - - * gc.c (obj_memsize_of): ar_table ptr can be NULL (size == 0). - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67054 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9653f770ae359800dcd53b037fad5c07988717c2 - Author: svn - Date: 2019-02-12 06:57:13 +0900 - - * 2019-02-12 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67053 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2f1bf4fae3206c9fb02b9966d546d4c96b3343cd - Author: eregon - Date: 2019-02-12 06:57:10 +0900 - - Accept a third value for NaNs, as produced by the Sun Studio C Compiler - - * See http://rubyci.s3.amazonaws.com/solaris11s-sunc/ruby-trunk/log/20190211T142523Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67052 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 63f990674bdf474f0ce88a23f0bc06b4443d3a94 - Author: nobu - Date: 2019-02-11 22:43:14 +0900 - - Use $(hdrdir) for include/ruby.h, as well as r67033 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67051 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 43a45b3fedcfc0b00ac6a0bafbcc49d8ab592671 - Author: glass - Date: 2019-02-11 12:06:10 +0900 - - io.c: remove unused variable and fix typo - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67049 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0f79725a0d20182d749e6ad89785b9acfe5c50dd - Author: svn - Date: 2019-02-11 11:13:04 +0900 - - * 2019-02-11 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67048 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2d2a50961207307104ff16a49d07d6d3a91e0b24 - Author: glass - Date: 2019-02-11 11:12:54 +0900 - - io.c: check HAVE_FCOPYFILE - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67047 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c84a25e14882a356bc37647a2acf1b6a9127283b - Author: nobu - Date: 2019-02-10 19:42:50 +0900 - - random.c: unify syscall with getrandom - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67046 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 944a158a650a27b3fcbcc17c58605850e89b2b75 - Author: svn - Date: 2019-02-10 17:21:39 +0900 - - * 2019-02-10 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67045 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 61ffc7a0aeaa15a618f61c9df753543fa443df96 - Author: svn - Date: 2019-02-10 17:21:39 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67044 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1a8583de72e12e139e9c7fbcfc026c2cbf410519 - Author: glass - Date: 2019-02-10 17:21:33 +0900 - - random.c: use getrandom() if available. - - getrandom() is supported by glibc 2.25 or later. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67043 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b1cb15c4a42575eb8ceb1c89256f37c662e20172 - Author: akr - Date: 2019-02-09 23:54:54 +0900 - - new constant: Process::CLOCK_TAI. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67042 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5d490f6ef82062502aa5821cbd9ebe9b09871820 - Author: svn - Date: 2019-02-09 20:04:11 +0900 - - * 2019-02-09 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67041 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b795f9bd36dcf71fd0495d493b23752b73f4950d - Author: nobu - Date: 2019-02-09 20:04:09 +0900 - - make-snapshot: try downloading Unicode files - - Remove empty UNICODE_FILES list to update Unicode files like as - r67025, for 2.6 branch. - - [Bug #15593] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67040 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5133bfad5df57c3399d1ec13a33e944d90fd613b - Author: nobu - Date: 2019-02-08 18:57:23 +0900 - - enum.c: [DOC] tally does not take a block - - [Feature #11076] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67039 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1616dcb16ef34ebf4ffc2167292f9a779f3e121e - Author: nobu - Date: 2019-02-08 18:49:49 +0900 - - make-snapshot: try downloading Unicode files - - [Bug #15593] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67038 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0deeb1aeb6ab9c35454a64a4da0eeb587a4f2c65 - Author: naruse - Date: 2019-02-08 17:47:42 +0900 - - Call DRb.start_service with setup/teardown - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67037 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 74f94b3e6ebf15b76f3b357e754095412b006e94 - Author: nobu - Date: 2019-02-08 16:22:55 +0900 - - configure.ac: check finite,isinf,isnan as macros first - - [ruby-core:91487] [Bug #15595] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67036 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4578181509ffaafb1e872d6f49f551cc887b727d - Author: nobu - Date: 2019-02-08 11:54:21 +0900 - - Use assert_syntax_error - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67035 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 81fb05db9a09759e50b9b8004a89fd281d36bf67 - Author: nobu - Date: 2019-02-08 11:54:20 +0900 - - Suppress warning [Feature #15575] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67034 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3d1c86a26f0c96a9c1d0247b968aa96e6f3c30bb - Author: nobu - Date: 2019-02-08 11:46:22 +0900 - - Removed moving toplevel header since r12501 - - Moving public headers was 12-years ago, no depend files would - expect ruby.h in the top source directory now. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67033 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e6f8382a766a4e27e008d8cf753c6589a3eb6f85 - Author: headius - Date: 2019-02-08 02:29:16 +0900 - - Replace outdated blockless proc call with block argument syntax - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67032 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 713279550ad33836e5d7bbbb5b801aa13def24dc - Author: eregon - Date: 2019-02-08 01:40:27 +0900 - - Fix specs for yield in singleton class being deprecated - - * Use eval to trigger warning only when the method is called. - * Suppress warnings and clarify this will be removed in 3.0. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67031 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 75334db3c6479ea3cd7462d36ca5464d386f9c72 - Author: eregon - Date: 2019-02-08 01:35:33 +0900 - - Update to ruby/spec@6cf8ebe - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67030 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5c7c6763f6cf7b4face107735071c5470e835476 - Author: svn - Date: 2019-02-08 01:35:05 +0900 - - * 2019-02-08 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 820f99791eb813bd72ddce2f5b5c4173d3b69b7b - Author: eregon - Date: 2019-02-08 01:35:03 +0900 - - Update to ruby/mspec@231e2ce - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67028 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6c574d4be4fa5bca86b0afb3a675ace3a8e29de6 - Author: k0kubun - Date: 2019-02-07 23:58:37 +0900 - - appveyor.yml: retry zlib downloads - - https://ci.appveyor.com/project/ruby/ruby/builds/22196846/job/53xvhv265f8eogl4 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67027 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8ca727d80f9b25046f85d6cd2e1f68d2fa001760 - Author: k0kubun - Date: 2019-02-07 22:57:27 +0900 - - test_rinda.rb: give up stabilizing this test - - on --jit-wait. It's randomly failing and it's unlikely to be detecting - any MJIT's bug. - - https://app.wercker.com/ruby/ruby/runs/mjit-test2/5c5c2339940b5200f01a0822?step=5c5c2b9fcfa0fc000741d940 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67026 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 910b13fe51891cd6a7e2c391e9d9278f0a5b013a - Author: nobu - Date: 2019-02-07 21:23:02 +0900 - - Update Unicode files - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67025 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a67788b2f365d993c879ad0754f41bc64389459c - Author: nobu - Date: 2019-02-07 17:53:13 +0900 - - Split procstat_vm.c - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67024 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 18365f9e83ef8f8402426024de4777f1f831ba37 - Author: nobu - Date: 2019-02-07 17:53:12 +0900 - - Split mt19937.c - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67023 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 867338c36ea8094b6c45ed3e081315c654fd3617 - Author: nobu - Date: 2019-02-07 17:53:11 +0900 - - Split dtoa.c - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67022 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7199685dc6741c08324adb31462657161499399f - Author: svn - Date: 2019-02-07 17:14:12 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67021 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 673dc51c251588be3c9f4b5b5486cd80d46dfeee - Author: nobu - Date: 2019-02-07 17:14:10 +0900 - - enum.c: Enumerable#tally - - * enum.c (enum_tally): new methods Enumerable#tally, which group - and count elements of the collection. [Feature #11076] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67020 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e0f1b514d2f78fe5ea17ddf240307cafbf47fccf - Author: nobu - Date: 2019-02-07 17:14:09 +0900 - - enum.c: hoisted out enum_hashify - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67019 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fb84b86be0f2758bacfb6d04c13e5946f4179fa4 - Author: nobu - Date: 2019-02-07 16:39:47 +0900 - - * string.c (chopped_length): early return for empty strings - - [Bug #11391] - - From: Franck Verrot - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67018 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f27643e5eb464a6bd2c3b3ff3f2f7f165b14e1fb - Author: svn - Date: 2019-02-07 15:56:15 +0900 - - * 2019-02-07 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67017 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 58a415343963f0d1fe50b1f645463068dff6182b - Author: kazu - Date: 2019-02-07 15:56:13 +0900 - - tool/test/test_jisx0208.rb: Use `require_relative` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67016 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3104de4e16652b07ef818e09cfd4fc5874a66d20 - Author: svn - Date: 2019-02-06 09:11:08 +0900 - - * 2019-02-06 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67015 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4c0e21add7c87b70df27fbff81d8f192a467556d - Author: nobu - Date: 2019-02-06 09:11:04 +0900 - - common.mk: allow brace expansion for benchmark targets - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67014 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 173ad5202b29f350b61c5f64d952ff96bbf7c98d - Author: k0kubun - Date: 2019-02-05 20:45:52 +0900 - - test_rinda.rb: extend timeout of wait_for as well - - https://app.wercker.com/ruby/ruby/runs/mjit-test2/5c5961adb18ed400951edeeb?step=5c596fd563e946000717df91 - - see also: r67003 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67012 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c1f0daeb6ac5c5414c9a4a58bb778a118006ae1f - Author: eregon - Date: 2019-02-05 19:19:29 +0900 - - Make sure to wait with IO.select before using Socket#accept_nonblock and recvfrom_nonblock - - * On all platforms, as this is the recommended code pattern. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67011 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 920b924e5652884064a9529ffbd80d458a46fbc6 - Author: eregon - Date: 2019-02-05 18:58:50 +0900 - - Make sure to wait with IO.select before using Socket#recvfrom_nonblock - - * On all platforms, as this is the recommended code pattern. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67010 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8552ee87b663e10d6c2265748f57a7d041face2c - Author: eregon - Date: 2019-02-05 18:50:11 +0900 - - Pass the Array from select() to Socket.udp_server_recv - - * As mentioned in the documentation. - * Use Array#size instead of #count, it's more common. - * Use :unset, it clarifies things if the specs fails. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67009 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit af479d54dcd1ce4a02a1f73b3bcab9d30f164f2b - Author: nobu - Date: 2019-02-05 15:00:25 +0900 - - README.win32: [DOC] added modeline [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67008 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9d0b921a41ae3901f16750c2fb725885128379c1 - Author: svn - Date: 2019-02-05 13:58:47 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67007 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0fadb48498b3fee85aa02406b2119f9512c04ae3 - Author: hsbt - Date: 2019-02-05 13:58:46 +0900 - - Ignore to add bundler lib directory if it is same as rubylibdir. - - [Bug #15469][ruby-core:90742] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67006 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 883d2d01335ead7fc0cb002543be587105b8d034 - Author: svn - Date: 2019-02-05 11:19:54 +0900 - - * 2019-02-05 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67005 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c7628071b009e64a0c743e4a4edbed6b454e71fb - Author: samuel - Date: 2019-02-05 11:19:51 +0900 - - Make sure to wait for socket to be readable. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67004 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 190a61e3a506c7d5fa145d6bfc8faa94b71953ef - Author: k0kubun - Date: 2019-02-04 17:20:05 +0900 - - test_rinda.rb: increase timeout for --jit-wait CI - - https://app.wercker.com/ruby/ruby/runs/mjit-test2/5c57dbb6b18ed400951e3c74?step=5c57e8b963e94600070a5d61 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67003 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit cc7dedfb4de1f47b2a1713cb7068f9d6ffc33152 - Author: nobu - Date: 2019-02-04 17:17:44 +0900 - - configure.ac: separate -std=gnu99 condition - - Also necessary on mingw, cygwin, darwin and netbsd. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67002 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit df2b8c05bac6414d5dae001310a09a2842910dcf - Author: nobu - Date: 2019-02-04 17:13:37 +0900 - - Show proper location for warning [Feature #15575] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67001 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9acd2b20c8fa85fe2ca827dbba195f5f12a16df0 - Author: usa - Date: 2019-02-04 17:10:24 +0900 - - Update requirements - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67000 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0fc597f29c663bd785d3a7868a95340eecc7dc03 - Author: ko1 - Date: 2019-02-04 16:10:05 +0900 - - check and show a warning for incorrect yield. - - * compile.c (check_yield_place): this function check the yield location. - * show a warning if yield in `class` syntax. [Feature #15575] - - * do strict check for toplevel `yield`. Without this patch, - `1.times{ yield }` in toplevel is valid-syntax (raise LocalJumpError - at runtime) although toplevel simple `yield` is not valid syntax. - This patch make them syntax error. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66999 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8bda94f78c959fbbcc17a99553b0c22396cabb96 - Author: ko1 - Date: 2019-02-04 15:28:57 +0900 - - For this may be a syntax error (instead of LocalJumpError) in Ruby 2.7 - [Fix GH-2078] - - This patch is from Yutaka HARA . - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66998 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0c18a3d9826d59c3d02fbd49f84c9d69a706b670 - Author: ko1 - Date: 2019-02-04 15:12:27 +0900 - - add debug code - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66997 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit cc1dbb61e0c3344fc6e17fccf2b53e57ce844b9c - Author: glass - Date: 2019-02-04 08:30:56 +0900 - - io.c: get src_size from stp. Fix r66995. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66996 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3f0c966603c6ee1ccf4b37071dd586a1b0147433 - Author: svn - Date: 2019-02-04 06:04:12 +0900 - - * 2019-02-04 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66995 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e3fd9fa40364386174695856fe1bb2b6634eaa3c - Author: glass - Date: 2019-02-04 06:04:04 +0900 - - io.c: reuse results of fstat(2) in copy functions - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66994 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8cca079d3be8d07c261baea72529628469938245 - Author: hsbt - Date: 2019-02-02 19:41:22 +0900 - - Fixup r66984. Update the location of bundler gemspec. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66993 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8f8b51c6ac54f476854e355a633dcfb49d9e4459 - Author: nobu - Date: 2019-02-02 16:25:07 +0900 - - README.win32: mention GIT as well as SVN - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66992 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c2781525ec517909b5441d392b139f95865ae3c1 - Author: nobu - Date: 2019-02-02 16:18:50 +0900 - - README.win32: update required commands and platform names - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66991 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 33d026034e68fefcc8a6615907e864d39da6a3fb - Author: nobu - Date: 2019-02-02 15:54:55 +0900 - - rdoc.css: make label-list compact - - "Labeled Lists" section in lib/rdoc/markup.rb states labeled-list - will be formatted in same lines. - - ``` - Notice that blank lines right after the label are ignored in labeled lists: - - [one] - - definition 1 - - [two] - - definition 2 - - produces the same output as - - [one] definition 1 - [two] definition 2 - ``` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66990 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fc7e1baf5184a362377f303821eb6dacd369b006 - Author: nobu - Date: 2019-02-02 15:38:10 +0900 - - COPYING: reformat as RDoc - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66989 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 009144e8efd84ad0223c96a172929a8816266809 - Author: nobu - Date: 2019-02-02 15:38:09 +0900 - - NEWS: use note-list - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66988 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3f78209cd15f3e4532689e3fe1acce6938859dde - Author: nobu - Date: 2019-02-02 15:38:08 +0900 - - README.win32: use label-list - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66987 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b01a7a3edcd05166d8ff1040fdf3d3c0c36cf919 - Author: svn - Date: 2019-02-02 15:17:35 +0900 - - * 2019-02-02 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66986 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3dd0b616243aa5e46df2d8362aa86675d338655c - Author: seki - Date: 2019-02-02 15:17:34 +0900 - - fix: https://twitter.com/_ko1/status/1086167481922646016 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66985 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7c9771be02ddc707fea8ec96089c8a100c59f806 - Author: hsbt - Date: 2019-02-01 22:41:56 +0900 - - Fixed gemspec location of bundler. - - FileCollector of rbinstall.rb requires location of gemspec under - the sub-direcotry with the same name as default gems. - - I forgot to fix it with r66867. - - [Bug #15582][ruby-core:91374] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66984 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit adbdbff2df25865e8ba0453749097d960a2384b5 - Author: nobu - Date: 2019-02-01 22:40:10 +0900 - - README.win32: reformat as RDoc - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66983 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1f34da3709673a926483fe056185c41766a637da - Author: k0kubun - Date: 2019-02-01 20:52:06 +0900 - - insns.def: opt_regexpmatch1 is not a leaf insn - - Given `str`, if `str_coderange(str)` is `ENC_CODERANGE_BROKEN`, - it calls `rb_raise`. And it calls `rb_funcallv` from `rb_exc_new3`. - - http://ci.rvm.jp/results/trunk-vm-asserts@silicon-docker/1673244 - - Maybe we can have a function to directly call `exc_initialize` for this - purpose, but it may not be worth having such a function for keeping the - instruction leaf. We may even want to delete the insn - https://github.com/ruby/ruby/pull/1959. - - I'm not sure whether compile.c could generate opt_regexpmatch2 for - invalid coderange string. Let's monitor that for a while. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66982 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 232f31ca12a94eb9f51182955285a4474f876af7 - Author: shyouhei - Date: 2019-02-01 16:26:39 +0900 - - on-smash canary detection - - In addition to detect dead canary, we try to detect the very moment - when we smash the stack top. Requested by k0kubun: - https://twitter.com/k0kubun/status/1085180749899194368 - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66981 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8a098051c58446db8be3dcaea3447ce83e16df99 - Author: shyouhei - Date: 2019-02-01 15:29:02 +0900 - - insns.def: mark exception-raising instructions non-leaf - - These instructions were missed before. The stack canary mechanism - (see r64677) can not detect rb_raise() because exceptions jump over - the canary liveness check. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66980 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3c8ff424c63b6f581c64461bc4b5e13b8b0a710f - Author: nobu - Date: 2019-02-01 14:20:07 +0900 - - vm_trace.c: trick rdoc for TracePoint#enable - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8555c53e74f6862086bde429a18dbe775f661395 - Author: svn - Date: 2019-02-01 14:11:14 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66978 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1bc6c3f40777ca10d8e7df38b775b0bb81a25881 - Author: nobu - Date: 2019-02-01 14:11:08 +0900 - - Revert r63383, r63248 "compile.c: copy a short insn with leave" - - When copying `leave` insn, TRACE also should be copied if it is - present, but this optimization is trivial and not worth the - complexity. [ruby-core:91366] [Bug #15578] - - 4cae5353c03009beb1e0a1619422072773580609 - 5afd479de63b6609ddcd1510da94d2c1ac384f7f - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66977 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e826b7d39e0e1a58caa8554d8fe8426f919f726a - Author: shyouhei - Date: 2019-02-01 13:39:47 +0900 - - _leaf_helpers.erb: some functions are not leaf - - If a function has rb_warning() that is not a leaf because warning - ultimately is a method call of Warning#warn. - - If a function has rb_name_error() that is not a leaf because - NameError is allocated, then initialized. This of course - involves calling NameError#initialize. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66976 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5d5427cb0720772c60e4d61511a7a723e0553fdf - Author: svn - Date: 2019-02-01 10:31:36 +0900 - - * 2019-02-01 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit af83a85f75389f646b753807c1136a7e591dec6a - Author: nobu - Date: 2019-02-01 10:31:34 +0900 - - Run r66972 assertion only when a sticky-bit makes sense - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit cb5a32981404e1bd691978ad9e7ce6a824315995 - Author: nobu - Date: 2019-01-31 23:02:30 +0900 - - Fix exception namespace - - * lib/fileutils.rb (remove_entry_secure): EISDIR is under the - Errno namespace. [ruby-core:91362] [Bug #15577] - - From: Tietew (Toru Iwase) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66972 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1f64192494e896277a8c72a9d0d53ebc93abe312 - Author: naruse - Date: 2019-01-31 21:58:33 +0900 - - Use _NSGetMachExecuteHeader() instead of _mh_execute_header - - _mh_execute_header is not accessible from a dylib unless libruby.dylib is - built with -undefined dynamic_lookup. And using -undefined - dynamic_lookup is not good style. - - Reported by Jeremy Huddleston Sequoia - Reviewed-by: Jeremy Huddleston Sequoia - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66971 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 857bbfd02c8c57b99c1f40311c507ca3bc2f16a6 - Author: shyouhei - Date: 2019-01-31 14:36:17 +0900 - - _insn_type_chars.erb: use C99 - - Now that comma at the end of enum is allowed, we can write this much - more straight-forward. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66960 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e20714062bf57efcbff0dd3162b148dd35312865 - Author: shyouhei - Date: 2019-01-31 14:22:58 +0900 - - _insn_operand_info.erb: use C99 - - Same as r66957. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66959 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 971f965da9a9f8f7cea9bead6c883e79dfc5b715 - Author: shyouhei - Date: 2019-01-31 14:00:41 +0900 - - _insn_len_info.erb: add ASSERT_VM_INSTRUCTION_SIZE - - Also previous rb_vm_insn_len_info is now a function static variable. - It seems nobody else is using it. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66958 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 72e318f118d5cfde0e66a41acd3a2070fcaf4348 - Author: shyouhei - Date: 2019-01-31 13:46:03 +0900 - - _insn_name_info.erb: use C99 - - C99 allows string literals of at least 4095 characters (cf: ISO/IEC - 9899:1999 section 5.2.4.1) so the previous complex struct layout is no - longer necessary. Just dump the verbatim memory contents we want. - - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66957 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 69431818f4166e0f2c35b8cec142e83bad603e13 - Author: svn - Date: 2019-01-31 13:35:15 +0900 - - * 2019-01-31 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66956 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 03dc91facf4688398fac33d90766642a4e14742c - Author: nobu - Date: 2019-01-31 13:35:14 +0900 - - test_iseq.rb: update expected error message - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66955 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ba4d6ae75f3b4aa26c07046671edabb92359f300 - Author: nobu - Date: 2019-01-31 13:35:13 +0900 - - test_iseq.rb: enabled - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66954 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 15f8fb34fa82ecb4c20c7dde3d10ca4a3206c408 - Author: nobu - Date: 2019-01-30 20:58:07 +0900 - - Show the code in syntax assertions - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66951 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ea88f7ddf914a85b82f4c228a2e1278c55dff962 - Author: svn - Date: 2019-01-30 15:06:02 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66948 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6f6cf042d2e348e73504258fe36f4bd27694a640 - Author: mrkn - Date: 2019-01-30 15:05:57 +0900 - - enumerator.c: fix arith_seq_first for Infinity - - * enumerator.c (arith_seq_first): fix for Float::INFINITY. - - * test/ruby/test_arithmetic_sequence.rb: add tests. - - * numeric.c (ruby_float_step_size): export for internal use. - - * internal.h: add prototype declaration of ruby_float_step_size. - - [ruby-core:90937][Bug #15518] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66947 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e1e3d642bfaf8f8c1a94687442cf51c897f8abdf - Author: nobu - Date: 2019-01-30 14:08:36 +0900 - - hash.c: hoisted out st_index_hash - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66946 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a94b78e41833d0f6b4e9b566dca234dde4628230 - Author: nobu - Date: 2019-01-30 13:54:01 +0900 - - hash.c: hoisted out dbl_to_index - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 15530088b66031228b55715bfafb7957da747e9b - Author: svn - Date: 2019-01-30 12:36:10 +0900 - - * 2019-01-30 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66944 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ef17936bc526652d7f3e9dc681a850d58da30242 - Author: svn - Date: 2019-01-30 12:36:09 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66943 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d07d192881920b2b46899fec55bf18199bd71d31 - Author: nobu - Date: 2019-01-30 12:36:06 +0900 - - hash.c: remove repeated rb_hash_start - - * hash.c (rb_dbl_long_hash): remove repeated rb_hash_start as - rb_objid_hash includes rb_hash_start, - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66942 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7fa16fd9624ca38f2d82c121a9af5f22c87e2697 - Author: nobu - Date: 2019-01-28 22:32:32 +0900 - - Fix `Module#const_defined?` on inherited constants - - [Fix GH-2061] - - From: manga_osyo - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66938 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dd4fdb32bdbb68810fa77468157945a481bd85cc - Author: nobu - Date: 2019-01-28 20:53:54 +0900 - - added assertion with method ref operator - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b5f906136d821bf015583abdf3b01352805da290 - Author: svn - Date: 2019-01-28 20:45:24 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66936 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2a4c87dc31b3774b8f8f2ab7b74f6d864f41a804 - Author: nobu - Date: 2019-01-28 20:45:21 +0900 - - Add refinements support to method/instance_method. - - [Fix GH-2034] - - From: manga_osyo - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66935 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2210709b79222ecd2d9758f7316fdbd7c068ea84 - Author: glass - Date: 2019-01-28 14:04:17 +0900 - - io.c: use fcopyfile(3) in IO.copy_stream if available - - fixed r66930. - - * io.c (nogvl_copy_stream_func): use fcopyfile(3) in IO.copy_stream if available - - * configure.ac: check copyfile.h and fcopyfile(3) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66934 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 774c60955a725e378caded5e074863ceddb27ca8 - Author: glass - Date: 2019-01-28 06:46:06 +0900 - - Revert "io.c: use fcopyfile(3) in IO.copy_stream if available" - - This reverts commit bd670062c4e3a3c9fdfaaaf7bd3c232442a26a4c. - It fails on rubyspec. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66933 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0c7768e63f8859ea996c99142eb0424e2255d91b - Author: svn - Date: 2019-01-28 05:55:39 +0900 - - * 2019-01-28 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66932 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f1a3be3565a04bbb1bb5658b340613585a871370 - Author: svn - Date: 2019-01-28 05:55:38 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66931 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bd670062c4e3a3c9fdfaaaf7bd3c232442a26a4c - Author: glass - Date: 2019-01-28 05:55:26 +0900 - - io.c: use fcopyfile(3) in IO.copy_stream if available - - * io.c (nogvl_copy_stream_func): use fcopyfile(3) in IO.copy_stream if available - - * configure.ac: check copyfile.h and fcopyfile(3) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 42921458ff7eacd1ef614c3e67596c75ccd0a1d4 - Author: eregon - Date: 2019-01-27 22:12:39 +0900 - - Update to ruby/spec@e57f49c - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66929 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a53ee2136ff59ebc54ae6c98a500765bc3d13d44 - Author: svn - Date: 2019-01-26 22:43:42 +0900 - - * 2019-01-26 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66928 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 60023cf4521ce86803b9d328982e679962d448cc - Author: nobu - Date: 2019-01-26 22:43:32 +0900 - - parse.y: trim newline in erred code - - * parse.y (parser_yyerror): trim a newline at the end of the erred - code which was replaced with an extra space in the succeeding - cursor line. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66927 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0a5b4c13ad16bacfa5659f7ac92eb7abf9416261 - Author: shyouhei - Date: 2019-01-25 23:09:10 +0900 - - vm.inc now in C99 - - This changeset modifies the VM generator so that vm.inc is written in - C99. Also added some comments in _insn_entry.erb so that the - intention of each parts to be made more clear. I think this improves - overall readability of the generated VM. - - Confirmed that the exact same binary is generated before/after this - changeset. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66923 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 24b57b102c1992b679f8f8c0fd1a0239289a129b - Author: kou - Date: 2019-01-25 15:49:59 +0900 - - Upgrade CSV to 3.0.4 - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66922 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit cdca14e75e98e2657daa40589f18a0ad46846020 - Author: svn - Date: 2019-01-25 15:35:08 +0900 - - * 2019-01-25 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66921 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit cee0c36a0890dd44efacf4ea0d37872fb3e903c6 - Author: kou - Date: 2019-01-25 15:35:04 +0900 - - Upgrade RSS to 0.2.8 - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66920 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6375c68f8851e1e0fee8a95afba91c4555097127 - Author: nobu - Date: 2019-01-24 21:36:04 +0900 - - parse.y: function parser_mixed_error & parser_mixed_escape - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66919 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7e68efbc9599550eadf5aa9a50bdc9a36796db49 - Author: nobu - Date: 2019-01-24 20:43:11 +0900 - - parse.y: remove an extra error message - - * parse.y (parse_string): bail out when word-list meets end of - input not to show an extra "unexpected" error message after the - preceding error. - - $ ruby -e "%w[" - -e:1: unterminated string meets end of file - -e:1: syntax error, unexpected terminator, expecting ' ' - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66918 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c6fb7c1f33e128618bcd7799a2de52874c7ebdd8 - Author: nobu - Date: 2019-01-24 19:10:18 +0900 - - eval_error.c: should not escapce newline and tab - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66917 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e608402019642719dd994728c15c8ef45f163d4d - Author: svn - Date: 2019-01-24 14:30:45 +0900 - - * 2019-01-24 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66916 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4bcfccddca1f2ffb72f435ef2e5eb393448a2dea - Author: svn - Date: 2019-01-24 14:30:45 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66915 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 161ece479598629f4ace4fa23bfea7bc1331a8a0 - Author: mrkn - Date: 2019-01-24 14:30:42 +0900 - - numeric.c: Fix negative step with float components - - * numeric.c (ruby_float_step): fix negative step with float components. - - * test/ruby/test_numeric.c (test_step_bug15537): add tests. - - * test/ruby/test_range.c (test_step_bug15537): add tests. - - [Bug #15537] [ruby-core:91101] - - From: shuujii (Shuji KOBAYASHI) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66914 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c56f61161a7baefb3d1ed3f815e5dc544b3accd6 - Author: nobu - Date: 2019-01-23 18:39:45 +0900 - - parse.y: token name of tSTRING_DEND - - * parse.y (rb_yytnamerr): show single-quoted single char as-is, to - show a quoted closing brace as tSTRING_DEND. e.g.: - - $ ./ruby -e '"#{true' - -e:1: syntax error, unexpected end-of-input, expecting '}' - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66911 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 71342a46ac4244adb27a514f412aecd012e9ed40 - Author: nobu - Date: 2019-01-23 18:08:22 +0900 - - parse.y: token names - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66910 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1fae154c07b957278fd336b54256d5c57f21e0d5 - Author: nobu - Date: 2019-01-23 15:06:47 +0900 - - tmpdir.rb: permission of user given directory - - * lib/tmpdir.rb (Dir.mktmpdir): check if the permission of the - parent directory only when using the default temporary - directory, and no check against user given directory. the - security is the user's responsibility in that case. - [ruby-core:91216] [Bug #15555] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66909 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 05c3256b2883000aab033737ef121a96b8009b81 - Author: svn - Date: 2019-01-23 08:22:10 +0900 - - * 2019-01-23 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66908 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bcf85587b186bf92537ee5b456d2312a5dce9c9d - Author: nobu - Date: 2019-01-23 08:21:58 +0900 - - parse.y: literal add_mark_object - - * parse.y (set_yylval_str, set_yylval_literal): always imply - add_mark_object. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66907 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bdbc8a8f1214b601ca409f66f2fe00ac06f2e99a - Author: kazu - Date: 2019-01-22 21:43:57 +0900 - - Add more example of `String#dump` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66906 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4e64c54728d0d1db94f229feb59fd1bf2d60f686 - Author: nobu - Date: 2019-01-22 16:25:08 +0900 - - ripper.y: get rid of compile error - - yystpcpy is always used by yysyntax_error in bison 2.3, but may - not used by other than yytnamerr in newer bison. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66905 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3dc6efbe9ca582d6930f25754a16043dedecfa6f - Author: hsbt - Date: 2019-01-22 15:28:04 +0900 - - Merge rubygems master targeted RubyGems 3.1.0. - - https://github.com/rubygems/rubygems/commit/1172320540c8c33c59fc1db5191b021c3b2db487 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66904 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 59a6215af65b3bfade13836681cbacc3294e6e78 - Author: nobu - Date: 2019-01-22 15:24:59 +0900 - - parse.y: enclose keyword token names by quotes - - * parse.y (rb_yytnamerr): strip enclosing double-quotes, same as - the default yytnamerr except for that single-quotes matching - back-quotes do not stop stripping. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66903 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5e7d03531e109269e3aff7d9865bdf11f3308e67 - Author: svn - Date: 2019-01-22 10:56:35 +0900 - - * 2019-01-22 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66902 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bac705529d358e512b6ce8b9ead6d776ab28486b - Author: nobu - Date: 2019-01-22 10:56:26 +0900 - - fix typo in r66836, missing '/'s - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66901 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f2d63385744da413cba482384d3bdbce288816a5 - Author: eregon - Date: 2019-01-21 21:31:29 +0900 - - benchmark/app_aobench.rb: complete commented code to write the image to a file - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66900 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 32e259f097a8dbae065d55c4d7b299e697a25f84 - Author: eregon - Date: 2019-01-21 21:31:20 +0900 - - benchmark/app_aobench.rb: remove extra printf arguments - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66899 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dfe69186042b2b28e32cb66240ecae820724e430 - Author: eregon - Date: 2019-01-21 21:31:10 +0900 - - benchmark/app_aobench.rb: move `srand(0)` at the top - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66898 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 502f159421cf3e35b9a62ade2a7e0fa2c53a7f21 - Author: samuel - Date: 2019-01-21 19:56:29 +0900 - - Improvements to documentation. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66897 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 62ec5eb01874472e2df9d871ef329d5a76b9c853 - Author: nobu - Date: 2019-01-21 19:24:56 +0900 - - parse.y: more token names - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66896 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 12afc11fcda570118c03e88cbb72521e33c38f78 - Author: glass - Date: 2019-01-21 19:11:04 +0900 - - * io.c: use copy_file_range() if defined - - * configure.ac: check copy_file_range() - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66895 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6891a1cd5ddd9e5e07d537060a257abaa6833648 - Author: mame - Date: 2019-01-21 17:51:51 +0900 - - string.c (rb_str_dump): Fix the rdoc - - * Officially states that String#dump is intended for round-trip. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66894 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8a294e0f20b0bf4df6528944aa4a4d5ea76b88de - Author: mame - Date: 2019-01-21 16:29:00 +0900 - - benchmark/app_aobench.rb: add `srand(0)` - - To prevent noise for benchmark result. Just for the case. - [Bug #15552] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66893 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit be3a0c7042583922befae8a11f08159607b28df9 - Author: mame - Date: 2019-01-21 16:13:32 +0900 - - benchmark/app_aobench.rb: add a magic comment - - To support the change of default encoding. - It had not worked correctly since 2.0 :-) - [Bug #15552] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66892 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 90653369097d4942cb0d397d77cf9106c839cbfc - Author: glass - Date: 2019-01-21 15:23:55 +0900 - - * lib/net/http.rb: handle Errno::ETIMEDOUT in Net::HTTP#transport_request - A patch from casperisfine (Jean byroot Boussier). - [Fix GH-2012] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66891 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 954d0815e9fea323c5c6b6ba072c0aded845a9b1 - Author: k0kubun - Date: 2019-01-21 10:11:57 +0900 - - test_io.rb: skip test on MJIT to prevent random failure - - like this: - http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/1636642 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66890 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4487562da19a50eceedad8956a652a173c96aff6 - Author: eregon - Date: 2019-01-21 06:25:08 +0900 - - Update to ruby/spec@e2fbd4d - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66889 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6204e0804b24f1675b49d5880da014411bcfb831 - Author: eregon - Date: 2019-01-21 05:38:57 +0900 - - Update to ruby/spec@35a9fba - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66888 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 58573c33e4720315ed27491e31dcc22892e1ce95 - Author: eregon - Date: 2019-01-21 05:38:27 +0900 - - Update to ruby/mspec@e9a482d - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66887 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1c53f86bd9701abd6c6d3a787541e5c408f5aef9 - Author: stomar - Date: 2019-01-21 00:07:17 +0900 - - process.c: [DOC] small improvements - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f284eb3d54df6d1bb754986f9f5272136ff73466 - Author: stomar - Date: 2019-01-21 00:06:11 +0900 - - lib/securerandom.rb: [DOC] small grammar fixes - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66885 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6833fbcfafdf80908e75aa1d13b9aff70646294c - Author: stomar - Date: 2019-01-21 00:04:41 +0900 - - time.c: [DOC] small improvement - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66884 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8fe427c1124601861cea4c00adfe625314b44f4b - Author: svn - Date: 2019-01-21 00:02:08 +0900 - - * 2019-01-21 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66883 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f9b298fe71614a8ceecba9eb78203a78e9fefb28 - Author: stomar - Date: 2019-01-21 00:02:07 +0900 - - vm.c: [DOC] small fix - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66882 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit afd68cd87114fb49158462f1594cacfd2b765e9b - Author: kazu - Date: 2019-01-20 13:44:25 +0900 - - raise FrozenError instead of RuntimeError - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66875 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 27f51081d3b0a4bfb94df1153c005c9bc2c748ba - Author: svn - Date: 2019-01-20 13:38:55 +0900 - - * 2019-01-20 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66874 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 141ed2f6409184412b57461de3f759db2520b9c6 - Author: nobu - Date: 2019-01-20 13:38:52 +0900 - - [DOC] Refactors documentation for `Forwardable` - - [ruby-core:71281] [Misc #11639] - - From: Sam Morgan - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66873 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 46549d6b11eb88d02bd2ac4561ab3c7b775cd241 - Author: k0kubun - Date: 2019-01-19 18:08:10 +0900 - - Revert "mjit_worker.c: try to simplify CC_DLDFLAGS_ARGS" - - This reverts commit 405940234eb7876a063eb7129ca61fcc318a633c. - - Not working on MinGW - https://ci.appveyor.com/project/ruby/ruby/builds/21737578/job/09a2tr94vof6fstt - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66872 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e90d826de7d661ef091761bf7d13c9fc70a9d956 - Author: naruse - Date: 2019-01-19 16:49:47 +0900 - - Indented here document (<<~) is Ruby 2.3 feature - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66871 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 405940234eb7876a063eb7129ca61fcc318a633c - Author: k0kubun - Date: 2019-01-19 16:35:30 +0900 - - mjit_worker.c: try to simplify CC_DLDFLAGS_ARGS - - assuming that -nostartfiles is just optional for mingw, cygwin, and AIX. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66870 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a5de8d1ccb98c3d1ea50159f5937b3429ff91c42 - Author: k0kubun - Date: 2019-01-19 16:26:59 +0900 - - mjit_worker.c: do not use GCC_NOSTDLIB_FLAGS for OpenBSD - - OpenBSD's GCC compiler has local extensions that break when - `-nostartfiles -nodefaultlibs -nostdlib` is used. - - From: Jeremy Evans - - [Bug #15548] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66869 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 31c862a775c8ca05c4f2f8001d32690e9e7f8e28 - Author: svn - Date: 2019-01-19 12:36:25 +0900 - - * 2019-01-19 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66868 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c52ca1f2ffcc8beeec043a9fa44004de59e1bb4c - Author: hsbt - Date: 2019-01-19 12:36:22 +0900 - - Revert r58345 and r58371. - - These changes break the behavior of default gems. Bug #13428 says - r58345 is reasonable because gemspec file is installed by `to_ruby_for_cache` - method. But I revert `to_ruby_for_cache` in rbinstall.rb at r58403. - There is no reason that we apply r58345 now. - - But I'm not sure about gemspec of default gems affects standalone gems. - I'm going to investigate it on rubygems/rubygems. - - [Bug #15500][ruby-core:90867] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66867 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c20aae965e2e79fcf4c443b266f7012157d5b23b - Author: nobu - Date: 2019-01-18 18:52:50 +0900 - - Prefer block_given? to iterator? - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66866 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 17aeff3e77e6fe0d37a9943dd93bcb16c4bb9f66 - Author: nobu - Date: 2019-01-18 18:31:32 +0900 - - make-snapshot: get rid of circular dependency - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66865 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c4e832bf6fa605234afee1fa91f0df93bc1a31c8 - Author: nobu - Date: 2019-01-18 15:13:10 +0900 - - configure.ac: fix build_os name - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66864 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3859b77be1141fef50688da3aa70502d1864504c - Author: nobu - Date: 2019-01-18 14:14:59 +0900 - - configure.ac: use MINIRUBY as BOOTSTRAPRUBY on msys - - Msys shell may not be able to run a command with a drive letter? - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66863 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7a86165d43829ed4a464dc9b14e48ffb0d1a6798 - Author: nobu - Date: 2019-01-18 11:36:14 +0900 - - [DOC] mention rb_str_modify - - [ruby-core:91134] [Bug #15543] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66861 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b4ab9c0e3214c619f2025fb19ff8e010d99112eb - Author: ko1 - Date: 2019-01-18 11:04:41 +0900 - - support older BASERUBY for btest. - - * bootstraptest/test_insns.rb: check RbConfig::LIMITS to support - older BASERUBY. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66860 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3c55a0b942be7c2f9e76cfd71f320ce1432c39aa - Author: nobu - Date: 2019-01-18 10:55:25 +0900 - - configure.ac: use BASERUBY as BOOTSTRAPRUBY if available - - MINIRUBY may not be stable enough to run btest, in developing. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66859 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6b5695fef9a99421a61c236c2118f793f6e4559b - Author: nobu - Date: 2019-01-18 08:52:58 +0900 - - make-snapshot: make permissions uniform - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66858 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dabbdcfd6d10e6853554b6224d962adfade53adf - Author: svn - Date: 2019-01-18 08:23:19 +0900 - - * 2019-01-18 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66857 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 92c6072ef4183021b57ccbd3fbd7fefc17952866 - Author: nobu - Date: 2019-01-18 08:23:14 +0900 - - rbinstall.rb: add --exclude option for install-nodoc - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66856 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f550da512cefbe0283106ca839c4836a98efaf3a - Author: hsbt - Date: 2019-01-17 22:45:48 +0900 - - Removed old gemspecs of default gems for the Ruby committers. - - [Bug #12764][ruby-core:77284] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66844 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 367fdd1aee07bd856612e9d796f301e1f1d5a30b - Author: ko1 - Date: 2019-01-17 16:52:47 +0900 - - reset bound if the size is 0. - - * hash.c (RHASH_AR_TABLE_SIZE_DEC): generally, we need to check all - entries to calculate exact "bound" in ar_table, but if size == 0, - we can clear bound because there are no active entries. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66843 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 07298ea2094bca6f847e7b0c82e3c7059ff745e3 - Author: ko1 - Date: 2019-01-17 10:36:21 +0900 - - support btest on older ruby. - - * bootstraptest/runner.rb (assert_normal_exit): check MJIT first - to support btest with ruby ~2.5. btest (bootstraptest) should be - enable to run with stable ruby interpreter because modified ruby - may not able to run runner.rb and we need to know why (this is why - we introduce btest). - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66842 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0280bef3417350a0932c084c8dc7a3db86ec93c2 - Author: svn - Date: 2019-01-17 09:36:10 +0900 - - * 2019-01-17 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d25a27abba89ade8039cc8baabce19e34865ee89 - Author: nobu - Date: 2019-01-17 09:36:08 +0900 - - call rb_str_modify to make a copy unshared - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66840 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d1417ff8fabe8a99dc6c21830b7b3169bb03aa64 - Author: shirosaki - Date: 2019-01-16 23:06:37 +0900 - - dir.c: fix Dir.glob with braces and matching dir - - * dir.c (join_path_from_pattern): add the last slash for directory - matching. - - * test/ruby/test_dir.rb (test_glob_recursive_directory): add a test - for above. - [ruby-core:91110] [Bug #15540] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66838 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 74477ec2b3904a0f39f11294d2bb336fb73586df - Author: nobu - Date: 2019-01-16 11:09:48 +0900 - - Strip warnflags - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66836 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d0318b8cfdc9dfd357b30b4394e5af9831de215d - Author: nobu - Date: 2019-01-16 10:35:28 +0900 - - Revert r65800 - - "Makefile.in: reconfig with the original warnflags" - It would be unnecessary since r65803 and r65805. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66835 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 98e218b69a51fe20926d86dc1b02f4b8ca2ee601 - Author: svn - Date: 2019-01-16 09:48:46 +0900 - - * 2019-01-16 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66834 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 923d03e10cd1446e53e56c7659c1b8c35eb155b1 - Author: nobu - Date: 2019-01-16 09:48:42 +0900 - - Fixed a typo, missing `$` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66833 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ab2547d786572f4c14e0d849f5f64f006425c5ba - Author: mame - Date: 2019-01-15 23:19:19 +0900 - - st.c (rb_hash_bulk_insert_into_st_table): avoid out-of-bounds write - - "hash_bulk_insert" first expands the table, but the target size was - wrong: it was calculated by "num_entries + (size to build insert)", but - it was wrong when "num_entries < entries_bound", i.e., it has a deleted - entry. "hash_bulk_insert" adds the given entries from entries_bound, - which led to out-of-bounds write access. [Bug #15536] - - As a simple fix, this commit changes the calculation to "entries_bound + - size". I'm afraid if this might be inefficient, but I think it is safe - anyway. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 10d85b19da5a9c94c5e7af16c53679981aee963b - Author: nobu - Date: 2019-01-15 22:52:38 +0900 - - Clarify Array#- and Array#difference documentation - - Currently we are not explicit enough regarding the potentially confusing - behavior of `Array#-` and `Array#difference` when it comes to duplicate items - within receiver arrays. - - Although the original documentation for these methods does use an array with - multiple instance of the same integers, the explanation for the behavior is - actually imprecise. - - > removing any items that also appear in +other_ary+ - - Not only does `Array#-` remove any items that also appear in `other_ary` but - it also remove any instance of any item in `other_ary`. - - One may expect `Array#-` to behave like mathematical subtraction or difference - when it doesn't. One could be forgiven to expect the following behavior: - - ```ruby - [1,1,2,2,3,3,4,4] - [1,2,3,4] - => [1,2,3,4] - ``` - - In reality this is the result: - - ```ruby - [1,1,2,2,3,3,4,4] - [1,2,3,4] - => [] - ``` - - I hope that I've prevented this potential confusion with the clarifications - in this change. I can offer this as evidence of likeliness for confusion: - https://twitter.com/olivierlacan/status/1084930269533085696 - - I'll freely admit I was surprised by this behavior myself since I needed to - obtain an Array with only one instance of each item in the argument array - removed. - - [Fix GH-2068] [ci skip] - - From: Olivier Lacan - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66831 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d7976d145193379d8c43f33e9a5714292a40d994 - Author: nobu - Date: 2019-01-15 21:05:46 +0900 - - Use `&` instead of `modulo` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66830 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d154bec0d5f0dd32e0d30559ab8a0a7ed8be98d2 - Author: shyouhei - Date: 2019-01-15 15:41:58 +0900 - - setbyte / ungetbyte allow out-of-range integers - - * string.c: String#setbyte to accept arbitrary integers [Bug #15460] - - * io.c: ditto for IO#ungetbyte - - * ext/strringio/stringio.c: ditto for StringIO#ungetbyte - - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66824 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5e84537d32c3e2f21071384e2c967fe0308d408d - Author: k0kubun - Date: 2019-01-15 13:02:53 +0900 - - Revert "mjit_worker.c: try passing -nostdlib to AIX" - - This reverts commit b32fb23083912c37a2601c66531ed786a7c9f3e5. - - This didn't work on AIX. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66823 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a01f2f0abd2691270e71cf2374607c2ca4bbce5f - Author: svn - Date: 2019-01-15 12:43:47 +0900 - - * 2019-01-15 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66822 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 01d63239e40902bcdc2effa91a9707132290f3ed - Author: naruse - Date: 2019-01-15 12:43:44 +0900 - - Suppress warning: ambiguous first argument; put parentheses or a space even after `/' operator - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66821 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ad10418eab9c70f188d8735ccd1e6f2e160c64e2 - Author: nagachika - Date: 2019-01-14 20:04:52 +0900 - - update redmine-backporter to catch up Redmine 4.0. [ci skip] - - tool/redmine-backporter.rb: change revision resource URL. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66820 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4d727639b45a43e73ec8588e837f74315dafa619 - Author: nobu - Date: 2019-01-14 19:16:54 +0900 - - ast.c: fix missing head part in dynamic literal - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66819 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ec3cdb34ce6f19be7a6d887357fd1763f97992d1 - Author: k0kubun - Date: 2019-01-14 16:28:34 +0900 - - mjit_worker.c: pass -nostdlib when making pch as well - - [Bug #15513] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66817 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b32fb23083912c37a2601c66531ed786a7c9f3e5 - Author: k0kubun - Date: 2019-01-14 15:45:24 +0900 - - mjit_worker.c: try passing -nostdlib to AIX - - r66812 might have allowed this. Testing. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66816 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d14089fb3cef922a0c3a61661fd1c92bd083e991 - Author: k0kubun - Date: 2019-01-14 15:18:53 +0900 - - mjit_worker.c: pass -lgcc to GCC platforms - - using `-nodefaultlibs -nostdlib`. - - I assume libgcc is needed when we use -nostdlib, and it's linked on some - platforms but not linked on some platforms (like aarch64, and possibly - AIX as well) as said in https://wiki.osdev.org/Libgcc : - - > You can link with libgcc by passing -lgcc when linking your kernel - with your compiler. You don't need to do this unless you pass the - -nodefaultlibs option (implied by -nostdlib) - - Also note that -nostdlib is not strictly needed (rather implied - -nodefaultlibs is problematic for Gentoo like Bug#15513, which will be - approached later) but helpful for performance. So I want to keep it for - now. - - [Bug #15522] - - I'm not trying to add `-nodefaultlibs -nostdlib` for AIX in this commit - because AIX RubyCI is dead right now, but I'll try to add them again - once RubyCI is fixed. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66812 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d89d1d468779ccea52d9b8da4f9d967543d28723 - Author: k0kubun - Date: 2019-01-14 14:50:13 +0900 - - mjit_worker.c: untangle CC_LIBS nesting - - This should have no impact. - The CC_LIBS was too hard to read for human. - - I don't remember whether the order of -lmsvcrt and -lgcc matters or not, - but I kept that for the best safety. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66811 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b4bc6ccb4ebf8be89ae0a7fa5f7e764a1cefac86 - Author: svn - Date: 2019-01-14 13:49:32 +0900 - - * 2019-01-14 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66810 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4840771afb158c544d583384404d33dcb4405afe - Author: k0kubun - Date: 2019-01-14 13:49:28 +0900 - - vm_insnhelper.c: make VM helpers inline - - In r66597, both VM and JIT seem to be made slower: - - ``` - $ benchmark-driver benchmark.yml --rbenv 'r66596::before --disable-gems;r66597::after --disable-gems;r66596+JIT::before --disable-gems --jit;r66597+JIT::after --disable-gems --jit' -v --repeat-count 24 - r66596: ruby 2.7.0dev (2018-12-28 trunk 66596) [x86_64-linux] - r66597: ruby 2.7.0dev (2018-12-28 trunk 66597) [x86_64-linux] - r66596+JIT: ruby 2.7.0dev (2018-12-28 trunk 66596) +JIT [x86_64-linux] - r66597+JIT: ruby 2.7.0dev (2018-12-28 trunk 66597) +JIT [x86_64-linux] - Calculating ------------------------------------- - r66596 r66597 r66596+JIT r66597+JIT - Optcarrot Lan_Master.nes 55.174 54.620 88.011 85.326 fps - - Comparison: - Optcarrot Lan_Master.nes - r66596+JIT: 88.0 fps - r66597+JIT: 85.3 fps - 1.03x slower - r66596: 55.2 fps - 1.60x slower - r66597: 54.6 fps - 1.61x slower - ``` - - This commit makes JIT's situation a little better. But in 2.7 we seem to - have some other regressions after that, and this can't still resurrect the - 2.6.0's performance. - - ``` - $ benchmark-driver benchmark.yml --rbenv 'before::before --disable-gems;after::after --disable-gems;before+JIT::before --disable-gems --jit;after+JIT::after --disable-gems --jit' -v --repeat-count 24 - before: ruby 2.7.0dev (2019-01-13 trunk 66808) [x86_64-linux] - after: ruby 2.7.0dev (2019-01-13 trunk 66808) [x86_64-linux] - last_commit=vm_insnhelper.c: make VM helpers inline - before+JIT: ruby 2.7.0dev (2019-01-13 trunk 66808) +JIT [x86_64-linux] - after+JIT: ruby 2.7.0dev (2019-01-13 trunk 66808) +JIT [x86_64-linux] - last_commit=vm_insnhelper.c: make VM helpers inline - Calculating ------------------------------------- - before after before+JIT after+JIT - Optcarrot Lan_Master.nes 51.710 51.535 83.629 85.486 fps - - Comparison: - Optcarrot Lan_Master.nes - after+JIT: 85.5 fps - before+JIT: 83.6 fps - 1.02x slower - before: 51.7 fps - 1.65x slower - after: 51.5 fps - 1.66x slower - ``` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66809 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit edb65a6254a1e06bb2155678676d6798acd7a51e - Author: nobu - Date: 2019-01-13 22:49:25 +0900 - - rdoc: ignore gemspec files - - [ruby-core:91067] [Bug #15531] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66808 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 71d2695d1725270caa1301ab39689c5a6e7e7072 - Author: nobu - Date: 2019-01-13 22:41:36 +0900 - - rdoc: fixup the test for r66806 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66807 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0fb782ea28b61035d56a8fb1f32754a18f2cee60 - Author: nobu - Date: 2019-01-13 22:16:56 +0900 - - rdoc: ignore garbage files - - * lib/rdoc/options.rb (RDoc::Options#init_ivars): exclude backup - files by default. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66806 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6feee125b96cd03794fd670ad02ba16ce7120b0d - Author: nobu - Date: 2019-01-13 22:16:55 +0900 - - common.mk: common rdoc variables - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66805 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 665d9a4331059687e87a6e9c6c1ce9d39b48c35a - Author: nobu - Date: 2019-01-13 13:36:45 +0900 - - time.c: separate sign argument - - * time.c (vtm_add_offset): separate sign argument to get rid of - repeated negations. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66804 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 019c891508334d0437140ac12badbceab86827bd - Author: nobu - Date: 2019-01-13 12:31:01 +0900 - - time.c: do not set utc_offset in vtm_add_offset - - * time.c (vtm_add_offset): just add offset to other components - only. removed subtraction of utc_offset as it is overwritten - always immediately in callers. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66803 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 128b6577b337e240f6e5141b9fbf380cd4d4d11a - Author: svn - Date: 2019-01-13 12:27:18 +0900 - - * 2019-01-13 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66802 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6d18187371c0b90eae41cea18f829363bd61e5f1 - Author: nobu - Date: 2019-01-13 12:27:16 +0900 - - Fix remaining syntax errors in Binding#irb docs - - Apologies for catching those so late. - - [Fix GH-2067] [ci skip] - - From: Olivier Lacan - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66801 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ad0ba0dc2739ebf54dd6df3e0f1d7bbe4712449f - Author: kazu - Date: 2019-01-12 21:39:41 +0900 - - trivial fix r66778 [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66798 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4e28fdf417fcd2d9492277b46a556264ab9ba0de - Author: nobu - Date: 2019-01-12 18:36:52 +0900 - - No FloatDomainError at non-finitive number if exception: false - - [ruby-core:91021] [Bug #15525] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66797 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 62c17a2f21b47243071075cbef37fe72b6ecd0ff - Author: nobu - Date: 2019-01-12 14:02:58 +0900 - - No TypeError at nil if exception: false - - [ruby-core:91021] [Bug #15525] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66796 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 52a97e36d09ae15800c2a52094759c18e7be4ee0 - Author: svn - Date: 2019-01-12 13:53:13 +0900 - - * 2019-01-12 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66795 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 056c24d3987e8608ebdddba864f112241ec21992 - Author: nobu - Date: 2019-01-12 13:53:09 +0900 - - RbConfig::CONFIG never had "exeext" - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66794 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0a5655a5be8a7447ca895a6e15a17fb2076d3f34 - Author: nobu - Date: 2019-01-11 18:36:49 +0900 - - Drop whole examples - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66793 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8197abf9aada88fd46bd6898bee21449ace9efaf - Author: nobu - Date: 2019-01-11 17:44:41 +0900 - - Fix r66791 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66792 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d03771d85a77fb85d17bb072618e78a910beb594 - Author: nobu - Date: 2019-01-11 16:50:23 +0900 - - Fix r66772 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66791 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e4f46eabab70bfcde67f0032a902433d11afc166 - Author: kazu - Date: 2019-01-11 13:58:33 +0900 - - Fix make-snapshot for trunk - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66790 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bdc36b360ea093e51cae4f983752bf077982fde0 - Author: nobu - Date: 2019-01-11 10:18:59 +0900 - - Ensure to terminate the child - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66789 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d95b13ead18a22cf7328064f9a29c7de72bf8103 - Author: tenderlove - Date: 2019-01-11 02:28:13 +0900 - - Update refinements docs - - Co-Authored-By: Vladimir Dementyev - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66788 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dd67af4892d7e498357e0e5fbb58512a26367080 - Author: k0kubun - Date: 2019-01-11 00:42:44 +0900 - - addr2line.c: fix -Wextra-semi - - and ignore only -Wgnu-empty-initializer. - https://travis-ci.org/ruby/ruby/jobs/477867392 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66787 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d74fc1b17548cc98b8a545b6c655f06e493a806e - Author: k0kubun - Date: 2019-01-11 00:02:35 +0900 - - addr2line.c: do not suppress -Wpedantic - - because it was for "-assi -Wpedantic" on Travis, but we changed the - Travis build to "-std=c99 -Wpedantic". - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66786 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1e19973d98e24768506cc5d2198f92c12e03476b - Author: svn - Date: 2019-01-11 00:00:42 +0900 - - * 2019-01-11 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66783 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 299e9cd91a97fb298632d4c9a91723cffb5fd6ac - Author: k0kubun - Date: 2019-01-11 00:00:40 +0900 - - revert r66768 for Ruby 2.7 due to Misc#15347 - - It's safer to backport r66768 to 2.6 branch, but for 2.7 it's not - needed anymore. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66782 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d31cbd4ff99c609f5a1b6b0ccf890c603db02e86 - Author: k0kubun - Date: 2019-01-10 23:55:24 +0900 - - test_jit.rb: change format of test error output - - to avoid breaking redmine quote like - https://bugs.ruby-lang.org/issues/15522 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66781 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bb44d9ecf035f2dac47606c50f7e797c79a5a367 - Author: nobu - Date: 2019-01-10 23:44:11 +0900 - - configure: refuse to build with jemalloc when header is missing - - [ruby-core:90964] [Bug #15520] - - Freom: Misty De Meo - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66779 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 56bf732aaf5a109964b0297b2158372de2e3ae97 - Author: k0kubun - Date: 2019-01-10 23:31:18 +0900 - - mjit.c: use boolean type for boolean variables - - and functions to clarify the intention and make sure it's not used in a - surprising way (like using 2, 3, ... other than 0, 1 even while it seems - to be a boolean). - - This is a retry of r66775. It included some typos... - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66778 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit efd99b533177d429dbc64ababfe342ebbd3f6502 - Author: k0kubun - Date: 2019-01-10 22:29:29 +0900 - - Revert "mjit.c: use boolean type for boolean variables" - - This reverts commit bb1a1aeab0f2a5fe437c89b841a887ba56653453. - - We hit something on ci.rvm.jp, reverting until investigation is done. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66776 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bb1a1aeab0f2a5fe437c89b841a887ba56653453 - Author: k0kubun - Date: 2019-01-10 22:21:58 +0900 - - mjit.c: use boolean type for boolean variables - - and functions to clarify the intention and make sure it's not used in a - surprising way (like using 2, 3, ... other than 0, 1 even while it seems - to be a boolean). - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66775 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5da9bd0ee5b9a4faf503942b803b8b54b70c98ee - Author: kazu - Date: 2019-01-10 21:41:06 +0900 - - test/ruby/test_method.rb: Remove unreachable call - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66774 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bfb684c0295e4527ba6b494834d783d878c2ca93 - Author: k0kubun - Date: 2019-01-10 17:22:23 +0900 - - NEWS: announce C99 requirement [ci skip] - - [Misc #15347] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66773 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9f1fb0a17febc59356d58cef5e98db61a3c03550 - Author: nobu - Date: 2019-01-10 17:19:14 +0900 - - proc.c: proc without block - - * proc.c (proc_new): promoted lambda/proc/Proc.new with no block - in a method called with a block to a warning/error. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66772 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ec336fb40e4df0c8615e584fbefb5e9e572cb9ec - Author: k0kubun - Date: 2019-01-10 17:04:35 +0900 - - configure.ac: Require C99 - - We already added AC_PROG_CC_C99 in r66605. - This commit stops warning C99 features. - - [Misc #15347] [close https://github.com/ruby/ruby/pull/2064] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66771 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dfdd0e1d08fce51c563d69f15067bf2495158a2b - Author: k0kubun - Date: 2019-01-10 16:59:18 +0900 - - .travis.yml: allow C99 on pedanticism build - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66770 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 33a75edd3cf6062796043ae75747b4b191db3789 - Author: nobu - Date: 2019-01-10 15:01:32 +0900 - - proc.c: check if callable - - * proc.c: check the argument at composition, expect a Proc, - Method, or callable object. [ruby-core:90591] [Bug #15428] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66769 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 671ef4e9e3d8cb3c397547934902a6a4fd312816 - Author: nobu - Date: 2019-01-10 09:36:28 +0900 - - Get rid of C99 feature for now [ruby-core:90949] [Bug #15519] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66768 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5577a8776ebcd801122f52d612285faee1dde0f2 - Author: tenderlove - Date: 2019-01-10 08:04:00 +0900 - - insns.def (duparray, duphash): add dtrace hooks - - They are considered Array and Hash creation events, so - allow dtrace (and systemtap) to track those creations. - - Co-Authored-By: Eric Wong - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66767 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5f17fa6c1935cfa145c41844f8d1faa47f532689 - Author: svn - Date: 2019-01-10 04:11:35 +0900 - - * 2019-01-10 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66766 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e3dbe84e12b3ebe95187edc3a5e9fe2f373a0388 - Author: ko1 - Date: 2019-01-10 04:11:32 +0900 - - add setter of iter_lev. - - * hash.c: add special setter function (inc and dec). - - * internal.h: constify RHash::iter_leve. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66765 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 140f8b94ced86966fc6979e8cfc5ef3bfa68da5d - Author: nobu - Date: 2019-01-09 23:04:21 +0900 - - class.c: refactor class_instance_method_list - - * class.c (class_instance_method_list): gather singleton and - extended methods first separately from ancestors. - [ruby-core:90872] [Bug #15501] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66764 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 347f3f30d6743e8b7cd133ae298c0290f2ef3a1d - Author: nobu - Date: 2019-01-09 22:58:51 +0900 - - time.c: update error message for invalid utc_offset - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66763 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 78d6e3370238c47d5933703fb55d5ab9e8bc4692 - Author: nobu - Date: 2019-01-09 22:58:49 +0900 - - Fix styles [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66762 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit df0faba1ff958590a02fd668afbf2b525e845b54 - Author: svn - Date: 2019-01-09 21:55:21 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66761 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 730f2886b535709832494ebe8c98f88ba0a29cea - Author: kazu - Date: 2019-01-09 21:55:20 +0900 - - Follow behaviour of IO#ungetbyte - - see r65802 and [Bug #14359] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66760 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bc27f87889934099f1b8b17512c634b615062e22 - Author: nobu - Date: 2019-01-09 17:43:50 +0900 - - Remove duplicate macro definition - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66759 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fc9e0302ea6756e0ea95dbc11216a3a776ad16a6 - Author: mrkn - Date: 2019-01-09 16:05:37 +0900 - - complex.c: optimize zero check for Float - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66758 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f7c0abeaeaba157b6535b397a4fd551e204608d3 - Author: svn - Date: 2019-01-09 04:22:11 +0900 - - * 2019-01-09 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66757 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 79c150f8a5af9ad555262646fb9631ac40f0c23f - Author: tenderlove - Date: 2019-01-09 04:22:05 +0900 - - Mark array as "going to be modified" in `Array#reject!` - - Before this patch, if `reject!` is called on a shared array it can - mutate the shared array rather than a copy. This patch marks the array - as "going to be modified" so that the shared source array isn't - mutated. - - [Bug #15479] [ruby-core:90781] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66756 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e9dc6f6076207f84a93ae917ca682d7d2c973f86 - Author: nobu - Date: 2019-01-08 19:53:43 +0900 - - Check by #name [ruby-core:90853] [Bug #15497] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66755 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 497075b3a1b2021f882f13b86b1e96dc87513d6f - Author: svn - Date: 2019-01-08 18:08:37 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66754 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 50784a0a4412df551d96dd01067473cd4226481b - Author: nobu - Date: 2019-01-08 18:08:31 +0900 - - Defer escaping control char in error messages - - * eval_error.c (print_errinfo): defer escaping control char in - error messages until writing to stderr, instead of quoting at - building the message. [ruby-core:90853] [Bug #15497] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66753 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e52b102c36dc1dd609a97149e99edc7d1f96b7a4 - Author: nobu - Date: 2019-01-08 16:45:04 +0900 - - Test for "%p" in Time.strptime - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66752 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bbd1e83e5aa15f2f5fd3afa569de04bbd9c21eec - Author: mrkn - Date: 2019-01-08 13:53:06 +0900 - - complex.c: replace misused UNLIKELY with LIKELY - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66751 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1e87935958c0afc9e953079e99eb628865e55820 - Author: svn - Date: 2019-01-08 13:37:44 +0900 - - * 2019-01-08 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66750 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2b9c6e1a8a1aa94ed8d300368abb4247cfb24d87 - Author: mrkn - Date: 2019-01-08 13:37:40 +0900 - - range.c (range_last): disable optimization when each is redefined - - Do not use the optimized version of Range#last when Range#each is - redefined. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66749 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8371a9a4ceea32f8e76f3d867722b42e5477fba1 - Author: nobu - Date: 2019-01-07 16:03:23 +0900 - - time.c: support military time zone names - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66747 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4f9ab3a01a475f5236632575fa4d3a6b6aef7d15 - Author: nobu - Date: 2019-01-07 15:59:46 +0900 - - time.c: UTC and Z timezones should be utc - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66746 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit da1f9199bd659f6277d53cc41f6007911fb3a9c5 - Author: hsbt - Date: 2019-01-07 15:01:49 +0900 - - Bump version to date-2.0.0. - - I forgot to change it when Ruby 2.6.0 was released. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66745 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a288ff502ed5267898fd8e38d291c611befe7f0b - Author: mrkn - Date: 2019-01-07 13:49:34 +0900 - - complex.c (f_divide): canonicalize a quotient - - Canonicalize resultant real and imaginary parts when complex number - divided by non-complex number. - - [Fix GH-2065] [Bug #15505] [ruby-core:90891] - - From: Joe Peric - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66744 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 72ad092960c413b6a5687c552747b20a5ed78b22 - Author: nobu - Date: 2019-01-07 11:05:21 +0900 - - Time.strptime benchmarks - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66743 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9e3ffd41f5aa697bcfd2adac29498755f095d4a3 - Author: nobu - Date: 2019-01-07 10:58:05 +0900 - - Select ruby to run benchmarks with BENCH_RUBY - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66742 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 26ea03c04fdcd282d499b762017d78d8c06e68e5 - Author: svn - Date: 2019-01-07 00:46:22 +0900 - - * 2019-01-07 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66741 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d41fb6ce0b35e197b98ca441b05011d28577ddc2 - Author: mrkn - Date: 2019-01-07 00:46:21 +0900 - - benchmark/range_last.yml: remove needless prelude - - [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66740 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d8931259d0bfd8f4d97402250488a590be2a4453 - Author: k0kubun - Date: 2019-01-06 23:53:43 +0900 - - internal.h: unify our own stdtbool.h implementation - - because we had another one in missing/stdbool.h as well. - Assuming that _Bool does not exist when stdbool.h is absent, I'm in - favor of r57462 implementation rather than r61326. - - Note that Visual Studio 2013 has stdbool.h and thus r57462's commit - message is somewhat misleading. This missing/stdbool.h is for Visual - Studio 2012 or older, and for Oracle Solaris Studio 12.2 or older because - it's added in 12.3 https://docs.oracle.com/cd/E24457_01/html/E21987/gkeza.html. - - missing/stdbool.h: ditto. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66739 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d9699fadf8b7031fb92854106d7703b8370eb95f - Author: duerst - Date: 2019-01-06 20:41:12 +0900 - - simplify filename-related code - - (Thanks to Nobuyoshi Nakada for the hint!) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66738 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b991ccc2103eb468cc663a1263750fb86d0745ae - Author: duerst - Date: 2019-01-06 16:50:18 +0900 - - add logic to handle Unicode beta period file names - - In downloader.rb, add logic to handle file names of the form - UnicodeData-12.0.0d6.txt. To find the right file, we download - the index of the directory. Then we download the files by finding - the file names from the index. Files are always checked for changes, - because changes might be frequent during the beta period. - We also check whether any index.html files are left when we are not - in the beta period. This would indicate that we might have stale - data from the beta period rather than the actual release data. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66737 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit dd3ed41cd03f37da856e0af764d8cc8aec952531 - Author: nobu - Date: 2019-01-06 14:07:10 +0900 - - ast.c: argument must be a string - - [ruby-core:90904] [Bug #15511] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66736 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6629588aa555a21a6849f3b093c21fedf9880c23 - Author: nobu - Date: 2019-01-06 13:36:56 +0900 - - Fix mday overflow - - [ruby-core:90897] [Bug #15506] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66735 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6e1d498ac7cd6fcd18352a22d8a3e3ed19df9c6b - Author: mrkn - Date: 2019-01-06 09:46:36 +0900 - - range.c: optimize rb_range_last for int renage - - This change improves the performance of Range#last method for a range - of integer. This optimization directly computes only required values - only in a range instead of converting all values in the range to an - array. The optimized implementation is 129-16.7k times faster than - the previous one in the benchmark result given below. - - === Benchmark Result === - - ``` - $ make benchmark ITEM=range_last COMPARE_RUBY=/Users/mrkn/.rbenv/versions/2.6.0/bin/ruby - generating known_errors.inc - known_errors.inc unchanged - /Users/mrkn/src/github.com/ruby/ruby/revision.h unchanged - /Users/mrkn/.rbenv/shims/ruby --disable=gems -rrubygems -I/Users/mrkn/src/github.com/ruby/ruby/benchmark/lib /Users/mrkn/src/github.com/ruby/ruby/benchmark/benchmark-driver/exe/benchmark-driver \ - --executables="compare-ruby::/Users/mrkn/.rbenv/versions/2.6.0/bin/ruby -I.ext/common --disable-gem" \ - --executables="built-ruby::./miniruby -I/Users/mrkn/src/github.com/ruby/ruby/lib -I. -I.ext/common -r/Users/mrkn/src/github.com/ruby/ruby/prelude --disable-gem" \ - $(find /Users/mrkn/src/github.com/ruby/ruby/benchmark -maxdepth 1 -name '*range_last*.yml' -o -name '*range_last*.rb' | sort) - Warming up -------------------------------------- - (1..1_000_000).last(100) 35.600 i/s - 36.000 times in 1.011239s (28.09ms/i) - (1..1_000_000).last(1000) 36.204 i/s - 39.000 times in 1.077240s (27.62ms/i) - (1..1_000_000).last(10000) 36.470 i/s - 39.000 times in 1.069386s (27.42ms/i) - Calculating ------------------------------------- - compare-ruby built-ruby - (1..1_000_000).last(100) 36.477 609.196k i/s - 106.000 times in 2.905950s 0.000174s - (1..1_000_000).last(1000) 35.936 50.350k i/s - 108.000 times in 3.005321s 0.002145s - (1..1_000_000).last(10000) 35.641 4.602k i/s - 109.000 times in 3.058233s 0.023685s - - Comparison: - (1..1_000_000).last(100) - built-ruby: 609195.7 i/s - compare-ruby: 36.5 i/s - 16700.87x slower - - (1..1_000_000).last(1000) - built-ruby: 50349.7 i/s - compare-ruby: 35.9 i/s - 1401.08x slower - - (1..1_000_000).last(10000) - built-ruby: 4602.1 i/s - compare-ruby: 35.6 i/s - 129.12x slower - ``` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66734 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bf6584b5d0f88377ed448612e1170716f6f7dc83 - Author: mrkn - Date: 2019-01-06 09:46:35 +0900 - - benchmark/range_last.yml: add benchmark cases - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66733 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fc7f99066608286f70fabcdec221e1502d40695b - Author: ko1 - Date: 2019-01-06 07:41:59 +0900 - - fix last commit. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66732 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 93583166c8cc9b28d36d8f4f8e23fe968849498c - Author: ko1 - Date: 2019-01-06 07:40:32 +0900 - - refactoring. - - * hash.c (EQUAL, PTR_EQUAL): make corresponding inline functions - ar_equal() and ar_ptr_equal(). - - * hash.c (SET_*): removed. set fields directly. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66731 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 70caae18f26fb305b73ca33e71c46f370c3e0d20 - Author: ko1 - Date: 2019-01-06 07:23:54 +0900 - - add ar_ prefix for ar_table functions. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66730 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 89cbf307b5c354f04b84b405bbd297c21c34ec03 - Author: svn - Date: 2019-01-06 00:09:45 +0900 - - * 2019-01-06 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66727 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6ce2ef33b562deaa4b4e3d94269fe64c93d3f985 - Author: mrkn - Date: 2019-01-06 00:09:44 +0900 - - test/ruby/test_range.rb: add assertions - - Add assertions of Range#first and Range#last to examine the type - conversion of the arguments and the negative value check. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66726 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b6b4c7cbb4581b8ce505e775a46531d33a6b3df6 - Author: nobu - Date: 2019-01-05 23:31:12 +0900 - - compile.c: initialize to suppress false warning. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66725 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9cbb4dde74f854b0cfcdb48b1ce0604894c83665 - Author: nobu - Date: 2019-01-05 22:15:07 +0900 - - parse.y: refactored symbol rules - - * parse.y (symbol): turned into a node, as well as `numeric`, for - a symbol literal, and includes `dsym` now. - - * parse.y (ssym): previous `symbol`. renamed as the counterpart - of `dsym`. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66724 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 47834932368f9af3a57e50f606d9990c1cd54c46 - Author: nobu - Date: 2019-01-05 21:13:39 +0900 - - parse.y: hoisted out qcall_branch_start and qcall_branch_end - - * compile.c (qcall_branch_start, qcall_branch_end): hoisted out - branch coverage traces generation for qcall. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66723 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 59f59f82d42e32980694ae7b8cd2b55384eb5918 - Author: nobu - Date: 2019-01-05 20:35:24 +0900 - - parse.y: refine error messages - - * parse.y: refine error messages for tSYMBEG and tSTRING_BEG, which - can appear at invalid places. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66722 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 56a6dd66d4deff3edc2af09271c50619a05cf1ea - Author: mrkn - Date: 2019-01-05 19:07:40 +0900 - - benchmark/range_last.yml: add a benchmark of Range#last - - [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66721 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 89e3d2f8d3db4ae43ee1f3a922136f30595f8467 - Author: duerst - Date: 2019-01-05 18:47:55 +0900 - - separate downloading of Unicode property files and auxiliary files - - Separate downloading of Unicode property files in ucd and in ucd/auxiliary. - This is needed because we need information from separate index.html files - to discover the exact file names of property files during a beta period. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66720 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0c0d181e0fc9947b4d64b9bb3fcafcc65c3ec8bb - Author: ko1 - Date: 2019-01-05 09:31:54 +0900 - - fix trivial indentation. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66719 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 23801110085a691095fc9a8eb164880418b2215d - Author: ko1 - Date: 2019-01-05 09:06:09 +0900 - - call functions directly. - - * hash.c: ar_table only supports `objhash` so we can call compare/hash - functions directly. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66718 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3a144485fc450465ba370cdf0d5501813d5962d7 - Author: ko1 - Date: 2019-01-05 08:48:33 +0900 - - refactoring usage of ar_lookup(). - - * hash.c (hash_stlike_lookup): introduce inline a function and use it - instead of using ar_lookup()/st_lookup() directly. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66717 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit eca91625b2ec367902a41a8a302bc802132ec02e - Author: svn - Date: 2019-01-05 00:41:32 +0900 - - * 2019-01-05 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66716 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6c1ed519ef51fe8afb7e0ed7f0df2cd2fc0db13d - Author: k0kubun - Date: 2019-01-05 00:41:29 +0900 - - win32/Makefile.sub: try to use __restrict on Visual Studio 2013 - - as well. Follows up r66598. - - https://bugs.ruby-lang.org/issues/15347#note-7 is saying __restrict - is supported on Visual Studio 2013. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66715 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a2eb04f52dccb9b42404f8b133acb36b577e3b54 - Author: svn - Date: 2019-01-04 22:14:18 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66714 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6304c0c4d1f2d582ccd2af15407bec3c5c647c8e - Author: svn - Date: 2019-01-04 22:14:18 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66713 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 23444302d9200bcc41ce279a529f73cad63c3f05 - Author: normal - Date: 2019-01-04 22:14:11 +0900 - - introduce rb_nogvl C-API to mark ubf as async-signal-safe - - zlib and bignum both contain unblocking functions which are - async-signal-safe and do not require spawning additional - threads. - - We can execute those functions directly in signal handlers - without incurring overhead of extra threads, so provide C-API - users the ability to deal with that. Other C-API users may - have similar need. - - This flexible API can supersede existing uses of - rb_thread_call_without_gvl and rb_thread_call_without_gvl2 by - introducing a flags argument to control behavior. - - Note: this API is NOT finalized. It needs approval from other - committers. I prefer shorter name than previous - rb_thread_call_without_gvl* functions because my eyes requires - big fonts. - - [Bug #15499] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66712 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 16cfd26a57c30e17bc3c116c83134420693ba5c4 - Author: svn - Date: 2019-01-04 22:11:02 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66711 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e97741e12a22d78825a3a9dfcb7382adb0e27855 - Author: hsbt - Date: 2019-01-04 22:10:58 +0900 - - Merge Bundler 2.0.1 from upstream. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66710 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4bbbbb6a3f5bd242f740041a644311f97c4a0052 - Author: svn - Date: 2019-01-04 21:53:10 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66709 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9e66910b3bd85de32e95cf019ed285a36aecfd9e - Author: normal - Date: 2019-01-04 21:53:06 +0900 - - thread.c (call_without_gvl): spawn thread for UBF iff single-threaded - - We need another native thread to call some unblocking functions - which aren't RUBY_UBF_IO or RUBY_UBF_PROCESS. Instead of a - permanent thread in <= 2.5, we can now rely on the thread cache - feature to perform interrupts. - - [ruby-core:90865] [Bug #15499] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66708 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 79aef1272e877b67b15b00a9cded806845556a0f - Author: nobu - Date: 2019-01-04 18:49:32 +0900 - - [DOC] escape descriptions [ci skip] - - Escape descriptions not to get parsed as directives. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66707 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9035e73a14087c1d3d6e015758ec467e47fc2d19 - Author: nobu - Date: 2019-01-04 18:41:13 +0900 - - [DOC] mark function names [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66706 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8513c20370d2416632f36858edd076e099836a99 - Author: nobu - Date: 2019-01-04 18:25:32 +0900 - - [DOC] split a tag for each function name [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66705 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 44aaff6d310f8cf88d89af4437d678a64bd89aa4 - Author: kazu - Date: 2019-01-04 18:10:10 +0900 - - [DOC] Fix close tags [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66704 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 74c462a90047ca25be8c7cc922dfa2118fc06bfd - Author: nobu - Date: 2019-01-04 17:22:27 +0900 - - class.c: [DOC] fix close tag [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66703 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 87e628d66b7bf98f276dbd38b810f0197f821081 - Author: ko1 - Date: 2019-01-04 16:49:00 +0900 - - skip to calculate hash value on empty Hash ar_table lookup. - - * hash.c (ar_lookup): don't calculate hash_value if ar_table is empty. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66702 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 784df9e6fd41a73cbdfc22222c5917991aa0825e - Author: svn - Date: 2019-01-04 10:59:54 +0900 - - * 2019-01-04 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66701 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ba4672c2cb90c85bfeb7cac3295c68b116c7c6f5 - Author: ko1 - Date: 2019-01-04 10:59:49 +0900 - - ar_table_entry::hash should be `st_hash_t`. - - * hash.c: the type of `ar_table_entry::hash` is not a `VALUE`, - but a `st_hash_t`. - Also `st_hash_t` is not a `st_data_t`, but `st_index_t` (same as st.c). - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66700 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b2a7a289e046cbbfc7f439f312a7204c174c3869 - Author: nobu - Date: 2019-01-03 20:42:24 +0900 - - Fix Random.urandom in a chroot on OpenBSD - - [ruby-core:90850] [Bug #15494] - - From: jeremyevans0 (Jeremy Evans) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66699 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d0045da598f13c32606b1bf04f2eac5c3759761a - Author: k0kubun - Date: 2019-01-03 15:27:35 +0900 - - .travis.yml: propagate -w properly - - r66692's `export RUBYOPT="-w"` does not seem to work. - Passing `RUBYOPT="-w"` to `make test-all`'s argument works. - - Let's try having this for all environments. - - (see r66690 for motivation) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66698 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 673ff731c17bbbae4d672c8514d4991382179981 - Author: mrkn - Date: 2019-01-03 15:19:17 +0900 - - complex.c: Optimize Complex#* and Complex#** - - Optimize f_mul for the core numeric class components. - This change improves the computation time of Complex#* and Complex#**. - - ``` - $ make benchmark ITEM=complex_float_ COMPARE_RUBY=/Users/mrkn/.rbenv/versions/2.6.0/bin/ruby - generating known_errors.inc - known_errors.inc unchanged - /Users/mrkn/src/github.com/ruby/ruby/revision.h unchanged - /Users/mrkn/.rbenv/shims/ruby --disable=gems -rrubygems -I/Users/mrkn/src/github.com/ruby/ruby/benchmark/lib /Users/mrkn/src/github.com/ruby/ruby/benchmark/benchmark-driver/exe/benchmark-driver \ - --executables="compare-ruby::/Users/mrkn/.rbenv/versions/2.6.0/bin/ruby -I.ext/common --disable-gem" \ - --executables="built-ruby::./miniruby -I/Users/mrkn/src/github.com/ruby/ruby/lib -I. -I.ext/common -r/Users/mrkn/src/github.com/ruby/ruby/prelude --disable-gem" \ - $(find /Users/mrkn/src/github.com/ruby/ruby/benchmark -maxdepth 1 -name '*complex_float_*.yml' -o -name '*complex_float_*.rb' | sort) - Calculating ------------------------------------- - compare-ruby built-ruby - complex_float_add 6.558M 13.012M i/s - 1.000M times in 0.152480s 0.076850s - complex_float_div 576.821k 567.969k i/s - 1.000M times in 1.733640s 1.760660s - complex_float_mul 1.690M 2.628M i/s - 1.000M times in 0.591786s 0.380579s - complex_float_new 1.350M 1.268M i/s - 1.000M times in 0.740669s 0.788762s - complex_float_power 1.571M 1.835M i/s - 1.000M times in 0.636507s 0.544909s - complex_float_sub 8.635M 8.779M i/s - 1.000M times in 0.115814s 0.113906s - - Comparison: - complex_float_add - built-ruby: 13012361.7 i/s - compare-ruby: 6558237.1 i/s - 1.98x slower - - complex_float_div - compare-ruby: 576821.0 i/s - built-ruby: 567968.8 i/s - 1.02x slower - - complex_float_mul - built-ruby: 2627575.4 i/s - compare-ruby: 1689800.0 i/s - 1.55x slower - - complex_float_new - compare-ruby: 1350130.8 i/s - built-ruby: 1267809.6 i/s - 1.06x slower - - complex_float_power - built-ruby: 1835168.8 i/s - compare-ruby: 1571074.6 i/s - 1.17x slower - - complex_float_sub - built-ruby: 8779168.8 i/s - compare-ruby: 8634534.7 i/s - 1.02x slower - ``` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66697 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 670725b08784e7467ffbd4b40c9a7c3cd9ca813e - Author: kazu - Date: 2019-01-03 14:51:19 +0900 - - [DOC] Complex() default behaviour is `exception: true` [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66696 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bace0d4cdcfaec75e76145349f0b3c0b989a0b6d - Author: kazu - Date: 2019-01-03 14:51:18 +0900 - - [DOC] Add `or nil` to call-seq [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66695 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 55cb93efc539cbc71de486aaba300457cf21e9b5 - Author: k0kubun - Date: 2019-01-03 14:24:05 +0900 - - test_complex.rb: use the same approach to fix failures - - as r66682. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66694 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2fd6ed62b4826c03bd6d41ae99a5bd7fecafec40 - Author: k0kubun - Date: 2019-01-03 14:19:05 +0900 - - test_complex.rb: fix tests for RUBYOPT="-w" - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66693 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3bc28f49330cc3114d39552399bf38aa31c19aa4 - Author: k0kubun - Date: 2019-01-03 14:15:54 +0900 - - .travis.yml: enforce -w in invoke_ruby as well - - actually current test-all does not fail with RUN_OPTS="-w". - - and chkbuild seems to use RUBYOPT="-w" - https://github.com/ruby/chkbuild/blob/bad4681c30e71f132cdd80f324d4b8f132f6582c/chkbuild/ruby.rb#L605 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66692 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5e1e60c3462b38d01f385a3fd2018f576a6e2722 - Author: svn - Date: 2019-01-03 14:08:46 +0900 - - * 2019-01-03 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66691 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5743c9e85897333c4e8e4bb59d2377f1780bc19b - Author: k0kubun - Date: 2019-01-03 14:08:43 +0900 - - .travis.yml: add a test matrix with -w - - currently Travis and AppVeyor does not run tests with test-all, - but RubyCI uses -w and currently all RubyCIs are failing. - - It might be better to fail at least one CI in Travis to notice it - earlier. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66690 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit ee2ddf5411f51ea89a1569ea5d70b41cd4c6c7f2 - Author: mrkn - Date: 2019-01-02 13:25:11 +0900 - - complex.c: fix against redefining component methods - - This fixes the incompatibility (maybe unintentionally) introduced by - removal of `#ifndef PRESERVE_SIGNEDZERO` guards in f_add, f_mul, and - f_sub functions in r62701. [Bug #15491] [ruby-core:90843] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66688 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 888ddda157a3253eac9e2b8962826f55e2b8fb85 - Author: mrkn - Date: 2019-01-02 13:18:34 +0900 - - test/net/fixtures/Makefile: moved from test/net/imap - - This Makefile can be used to update test certificates. It should have been - moved at which the certificates was moved at r56836. - - [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66687 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1e0b49a293d3792826c67b7e05c5fcbd09c9ea6e - Author: kazu - Date: 2019-01-02 12:29:01 +0900 - - Try to update cert (2nd try) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66686 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f234e6c3d3170f37508e214cdaef78d4b2584e5a - Author: kazu - Date: 2019-01-02 12:08:20 +0900 - - Try to update cert - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66685 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6d957b2f1198514243b62abb381a876184d0a684 - Author: mrkn - Date: 2019-01-02 10:36:39 +0900 - - complex.c: fix indentation - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66684 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f43b38abad6282809b2573d0bf8d364dbdd77869 - Author: svn - Date: 2019-01-02 07:49:58 +0900 - - * 2019-01-02 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66683 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8b70a215ebb59961dff17a646831ae8801b1cca1 - Author: naruse - Date: 2019-01-02 07:49:55 +0900 - - suppress warning: method redefined; discarding old + introduced at r66681 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66682 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5f90845420bd65be6926976a8a0dfd7a1b3173cf - Author: mrkn - Date: 2019-01-01 21:20:05 +0900 - - complex.c: Optimize Complex#+ for some conditions - - Optimize f_add defined in complex.c for some specific conditions. - It makes Complex#+ about 1.4x faster than r66678. - - Compared to r66678: - - ``` - mrkn-mbp15-late2016:complex-optim-o3 mrkn$ make benchmark ITEM=complex_float_ COMPARE_RUBY=/Users/mrkn/.rbenv/versions/trunk-o3/bin/ruby - /Users/mrkn/src/github.com/ruby/ruby/revision.h unchanged - /Users/mrkn/.rbenv/shims/ruby --disable=gems -rrubygems -I/Users/mrkn/src/github.com/ruby/ruby/benchmark/lib /Users/mrkn/src/github.com/ruby/ruby/benchmark/benchmark-driver/exe/benchmark-driver \ - --executables="compare-ruby::/Users/mrkn/.rbenv/versions/trunk-o3/bin/ruby -I.ext/common --disable-gem" \ - --executables="built-ruby::./miniruby -I/Users/mrkn/src/github.com/ruby/ruby/lib -I. -I.ext/common -r/Users/mrkn/src/github.com/ruby/ruby/prelude --disable-gem" \ - $(find /Users/mrkn/src/github.com/ruby/ruby/benchmark -maxdepth 1 -name '*complex_float_*.yml' -o -name '*complex_float_*.rb' | sort) - Calculating ------------------------------------- - compare-ruby built-ruby - complex_float_add 9.132M 12.864M i/s - 1.000M times in 0.109511s 0.077734s - complex_float_div 600.723k 627.878k i/s - 1.000M times in 1.664662s 1.592666s - complex_float_mul 2.320M 2.347M i/s - 1.000M times in 0.431039s 0.426113s - complex_float_new 1.473M 1.489M i/s - 1.000M times in 0.678791s 0.671750s - complex_float_power 1.690M 1.722M i/s - 1.000M times in 0.591863s 0.580775s - complex_float_sub 8.870M 9.516M i/s - 1.000M times in 0.112740s 0.105091s - - Comparison: - complex_float_add - built-ruby: 12864383.7 i/s - compare-ruby: 9131502.8 i/s - 1.41x slower - - complex_float_div - built-ruby: 627878.0 i/s - compare-ruby: 600722.5 i/s - 1.05x slower - - complex_float_mul - built-ruby: 2346795.3 i/s - compare-ruby: 2319975.7 i/s - 1.01x slower - - complex_float_new - built-ruby: 1488649.1 i/s - compare-ruby: 1473207.5 i/s - 1.01x slower - - complex_float_power - built-ruby: 1721837.2 i/s - compare-ruby: 1689580.2 i/s - 1.02x slower - - complex_float_sub - built-ruby: 9515562.7 i/s - compare-ruby: 8869966.3 i/s - 1.07x slower - ``` - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66681 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8d473272dbd9f5c6adc518b780eafee3d1f0d6bc - Author: mrkn - Date: 2019-01-01 21:20:04 +0900 - - benchmark/complex_float_*.yml: New benchmarks - - Add new benchmark scripts for binary operations of Complex with float - components. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66680 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 11ba186c4725ef7acecbf99243083bc909b7c960 - Author: k0kubun - Date: 2019-01-01 18:52:15 +0900 - - test_jit.rb: test methodref insn - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66679 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6e7213f427c8030396c2de6cc488cae5d8dd5ff9 - Author: hsbt - Date: 2019-01-01 13:53:52 +0900 - - Merge rubygems-3.0.2. - - https://blog.rubygems.org/2019/01/01/3.0.2-released.html - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66678 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f77d381159419434b3c1f1a63839706967f348f9 - Author: svn - Date: 2019-01-01 12:03:20 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66677 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9613af6f34e46bc70528593b345824ccada18102 - Author: mame - Date: 2019-01-01 12:03:17 +0900 - - compile.c (iseq_set_sequence): fix branch coverage table - - Not only TRACE_ELEMENT but also INSN_ELEMENT may have events. - The old pc2branchindex was created using only events of TRACE_ELEMENTs. - This change uses events of INSN_ELEMENTs too for pc2branchindex table. - - [Bug #15476] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66676 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 99d363184765ef6b11e739299a805c366171fd26 - Author: svn - Date: 2019-01-01 10:51:01 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66675 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d58bada6cc35187d61315eb881674ae37cbbfce6 - Author: mame - Date: 2019-01-01 10:50:57 +0900 - - compile.c: support branch coverage for `a&.foo = 1` - - [Bug #15475] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66674 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7e035dcda7f8d2ce23d769424fdbf7d149c0b894 - Author: svn - Date: 2019-01-01 10:47:17 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66673 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4130969ea19835d0a69a69ee6ffc7fa3dfedb675 - Author: mame - Date: 2019-01-01 10:47:14 +0900 - - Revert r66670 because of wrong ticket number - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66672 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 04dec2df733a7ca1cf895be3e82ad3b0cf374741 - Author: svn - Date: 2019-01-01 10:41:26 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66671 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 67a257cac091e44cd49a5c1a8c00cee59e284cff - Author: mame - Date: 2019-01-01 10:41:23 +0900 - - compile.c: support branch coverage for `a&.foo = 1` - - [Bug #15476] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66670 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8423533c25db3d5e427accfa8e66895777c36df6 - Author: svn - Date: 2019-01-01 00:00:52 +0900 - - * 2019-01-01 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66669 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d935a0ab951510241450694c73361a03656ad15b - Author: svn - Date: 2019-01-01 00:00:52 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66668 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 67c574736912003c377218153f9d3b9c0c96a17b - Author: nobu - Date: 2019-01-01 00:00:37 +0900 - - Method reference operator - - Introduce the new operator for method reference, `.:`. - [Feature #12125] [Feature #13581] - [EXPERIMENTAL] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66667 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 4a6f7633303f2d6eb5ec164dc656cf5d47531960 - Author: svn - Date: 2018-12-31 23:59:32 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66666 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1bdd422b9360c886c02c2216a230a6c95fe475a0 - Author: nobu - Date: 2018-12-31 23:59:29 +0900 - - Fix indents [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66665 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 705941a4925e6721fe300d263de11179010d02d5 - Author: nobu - Date: 2018-12-31 23:59:27 +0900 - - use a local variable - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66664 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 271c8f5d06bc92d3d3382fbddae616019555ed91 - Author: k0kubun - Date: 2018-12-31 21:54:40 +0900 - - test_io_wait.rb: try to stabilize test_wait_readable - - that randomly fails - https://rubyci.org/logs/mswinci.japaneast.cloudapp.azure.com/vc12-x64/ruby-trunk/log/20181231T103312Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66663 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d7c7382f7afcba2d74454b24f9d1b9bb761c7242 - Author: svn - Date: 2018-12-31 10:14:52 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66662 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 58508e8b558e1ae83d2f15617cb09f1cee8e222e - Author: nobu - Date: 2018-12-31 10:14:51 +0900 - - load.c: resolve_feature_path - - * load.c (rb_resolve_feature_path): search the path for already - loaded feature. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66661 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c5e8627f658c88b2403e7b20637cf25e31feff88 - Author: glass - Date: 2018-12-31 10:09:30 +0900 - - Revert "lib/net/http.rb: use connect_timeout instead of Timeout" - - This reverts commit 69a1db96fe63ff3071cb3d272675a1d0470aab01. - getaddrinfo(3) doesn't support timeout. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66660 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 69a1db96fe63ff3071cb3d272675a1d0470aab01 - Author: glass - Date: 2018-12-31 09:46:07 +0900 - - lib/net/http.rb: use connect_timeout instead of Timeout - - lib/net/pop.rb: ditto - - lib/net/ftp.rb: ditto - - lib/net/smtp.rb: ditto - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f964fd3fa5070b95cb412cb529b47e168c0af25a - Author: nobu - Date: 2018-12-31 06:42:52 +0900 - - vm_args.c: search symbol proc in super classes - - * vm_args.c (refine_sym_proc_call): traverse ancestors to search - inherited methods for symbol proc. - [ruby-dev:50741] [Bug #15489] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66658 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7e4e641c009fede540a9e307ac1d3bb9dcf00f7a - Author: eregon - Date: 2018-12-31 02:48:11 +0900 - - Exclude Solaris in Process.clock_gettime specs - - * It declares clocks which are invalid for clock_gettime(), which I consider OS bug. - * I want to keep testing all declared clocks on other platforms. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66657 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8b8e5246e79971457489cf4bd37309c2945c33e1 - Author: svn - Date: 2018-12-31 02:47:57 +0900 - - * 2018-12-31 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66656 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit eeedf7d57a4648fcfb75a54023c889fca3e78a3d - Author: eregon - Date: 2018-12-31 02:47:56 +0900 - - Revert "clock_gettime_spec.rb: exclude invalid clocks for Solaris" - - * This reverts commit a7edd05f7dca44f56fd72d7bcc232e1b27df0eb3. - * I prefer to exclude Solaris, I want to keep testing these clocks on Linux/macOS. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66655 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a46ce26870d8a758c596b95695429e177069f011 - Author: kazu - Date: 2018-12-30 23:09:09 +0900 - - [DOC] Update basename [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66654 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c6915042aba8525ab40a27342a04a2accf865955 - Author: mame - Date: 2018-12-30 22:21:30 +0900 - - vm.c: Move the rdoc of RubyVM.resolve_feature_path [Bug #15482] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66653 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 695cc19be963e35dabd85ea824a02f698bc260c0 - Author: k0kubun - Date: 2018-12-30 16:36:27 +0900 - - accept_nonblock_spec.rb: wait before calling #accept_nonblock - - fixes r66593 in a better way like r66646. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66652 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6f0e4c755f7d5921dfa3263ac25cab6a012e99ce - Author: k0kubun - Date: 2018-12-30 15:19:10 +0900 - - test_array.rb: increase timeout for RubyCI - - https://rubyci.org/logs/mswinci.japaneast.cloudapp.azure.com/vc12-x64/ruby-trunk/log/20181230T041101Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66651 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a7edd05f7dca44f56fd72d7bcc232e1b27df0eb3 - Author: k0kubun - Date: 2018-12-30 15:17:16 +0900 - - clock_gettime_spec.rb: exclude invalid clocks for Solaris - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable10x/ruby-trunk/log/20181230T041806Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11x/ruby-trunk/log/20181230T042407Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11s/ruby-trunk/log/20181230T032505Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris11s-sunc/ruby-trunk/log/20181230T022505Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66650 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f110ebfd141710e65e230b9e79855e9ded91258e - Author: k0kubun - Date: 2018-12-30 15:09:38 +0900 - - test_optimization.rb: increase timeout for RubyCI - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/opensuseleap/ruby-trunk/log/20181230T040002Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66649 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6b861342b9ef41daf3a4c55d5a50a09f023a2180 - Author: sorah - Date: 2018-12-30 12:15:58 +0900 - - Unset SOURCE_DATE_EPOCH on Rubygems test cases - - Relates to r66554. When test suites run with SOURCE_DATE_EPOCH, several - tests would fail. Environment Variables are already kept with this - setup & teardown phase. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66648 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e8d3fb6cdacd87a3f4d377ea13d8b47878d3006d - Author: k0kubun - Date: 2018-12-30 10:00:29 +0900 - - test_refinement.rb: increase timeout for RubyCI - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/amazon/ruby-trunk/log/20181229T153003Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66647 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 230fe41825b45c92cf73e7c8d62f4941dae7beb9 - Author: normal - Date: 2018-12-30 09:46:02 +0900 - - accept_nonblock_spec: IO.select instead of sleep - - Waiting on socket I/O using IO.select should work on all platforms. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66646 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7f54f1b5543b4a3267a64c47cff9127cbcafcc42 - Author: eregon - Date: 2018-12-30 09:05:56 +0900 - - Update to ruby/spec@2d89e48 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66645 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2eee74ef54a2e23eb870680a83dcf74c5d9d9d01 - Author: nobu - Date: 2018-12-30 08:40:15 +0900 - - Update NoMethodError/NameError docs [ci skip] - - [ruby-core:90796] [Bug #15481] - - From: zverok (Victor Shepelev) - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66644 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 65b1cf0e82255db68262dfb8fdb001268981e223 - Author: eregon - Date: 2018-12-30 06:55:12 +0900 - - Skip specs on AIX as it doesn't have /dev/fd - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66643 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c608af0f1eef89581b1222793e8497d302fb6701 - Author: eregon - Date: 2018-12-30 06:54:59 +0900 - - Re-enable spec on Solaris to find out which clocks fail on Solaris - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66642 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit be8d3ed1fd2f8eb8ec5918c0a7ec30afc4fb34d4 - Author: eregon - Date: 2018-12-30 06:54:45 +0900 - - Exclude CLOCKs which require special permissions in Process.clock_gettime specs - - * https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-ad7f67/ruby-trunk/log/20181229T135406Z.fail.html.gz - * https://rubyci.org/logs/rubyci.s3.amazonaws.com/rhel_zlinux/ruby-trunk/log/20181229T143303Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66641 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 94f4a0e91ee7077bcb4391a6f754c6ec58e78a15 - Author: ko1 - Date: 2018-12-30 01:44:09 +0900 - - `TracePoint#enable(target_thraed:)` [Feature #15473] - - * vm_trace.c (tracepoint_enable_m): `TracePoint#enable` supports - `target_thread:` keyword to filter a target thread. - [Feature #15473] - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66640 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fd7d4a871cd3ae035a4a48eb728f9d3fcb37e669 - Author: svn - Date: 2018-12-30 01:29:52 +0900 - - * 2018-12-30 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66639 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 8ee0a8e91a2dfcde0381949348268961b0f81393 - Author: ko1 - Date: 2018-12-30 01:29:44 +0900 - - hide ar_table internals from internal.h. - - * internal.h: move ar_table def to hash.c because other files - don't need to know implementation of ar_table. - - * hash.c (rb_hash_ar_table_size): added because gc.c needs to know - the size_of(ar_table). - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66638 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9f3585afad86f7683fec377a0eb4bb53b8165529 - Author: k0kubun - Date: 2018-12-29 20:04:42 +0900 - - process.c: document system(..., exception: true) [ci skip] - - From: Victor Shepelev - - [Bug #15480] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66637 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 31a60184f4a91424419b13171c3b04780ac064e4 - Author: eregon - Date: 2018-12-29 19:54:37 +0900 - - Re-enable spec on Linux to find out which clocks fail on RHEL - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66636 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 21f4795e80c244f0931dc0509b3bf6b3d650e7bd - Author: eregon - Date: 2018-12-29 19:54:22 +0900 - - Refactor Process.clock_gettime spec to give more information when it fails - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66635 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5049e4c5e8608848029710d441b5426766573a1c - Author: k0kubun - Date: 2018-12-29 19:50:31 +0900 - - test_jit.rb: suppress random test failure - - on mswin RubyCI by Permission Denied. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66634 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d8008fc29dd0551c7fa5625c91b7eae923d62939 - Author: k0kubun - Date: 2018-12-29 16:41:20 +0900 - - clock_gettime_spec.rb: add more platform guards for RubyCI - - `Errno::EINVAL: Invalid argument - clock_gettime` could occur even on Linux. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66633 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1ae3e6f3ce9f16c49d0584e0ad3dc3e709cc4a81 - Author: k0kubun - Date: 2018-12-29 16:26:22 +0900 - - erb.rb: increase warn level only when non-zero safe_level - - is given. - - This is merging Eric's patch in [Bug #15479] to Ruby 2.6's behavior in r66631. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66632 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c02f03609036ba4e815c2ed67fa002492b39dda9 - Author: k0kubun - Date: 2018-12-29 16:11:38 +0900 - - Revert "erb.rb: print deprecation warning with warn level 1" - - This reverts commit b5569b9ab2ad5e0e4a997df7eb73e97ecbacc9dd. - - The deprecation is indefinitely postponed. - - [Bug #15478] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit a403cd3598932b3349b8ff5a786b8fe4abbc3f91 - Author: k0kubun - Date: 2018-12-29 15:49:54 +0900 - - test_gc.rb: increase timeout for RubyCI - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/amazon/ruby-trunk/log/20181229T033003Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66630 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7a859b6ae3000e47a36cff5603c414bb55a4a08f - Author: k0kubun - Date: 2018-12-29 15:48:34 +0900 - - test_jit.rb: prevent mixing outputs by race condition - - to avoid random failures like - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11s/ruby-trunk/log/20181229T032506Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66629 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 63aaee923bdaab7b85fbbafa199b767e15523646 - Author: k0kubun - Date: 2018-12-29 13:48:23 +0900 - - test_notimp.rb: loosen timeout - - to prevent random failures like - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian8/ruby-trunk/log/20181229T033003Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66628 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 952b218ffe78b7319c5e02887e7dd30d46dbc40e - Author: k0kubun - Date: 2018-12-29 12:57:15 +0900 - - spawn_spec.rb: add missing platform guard - - this exists for `context "when passed close_others: false" do`, but this - seems to be missing for `context "when passed close_others: true"`. - And this seems to hang forever on Windows since r66622. - https://ci.appveyor.com/project/ruby/ruby/builds/21277729 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66627 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f9dc0fb649e66cc0791d1b9c265644ed0fea82fa - Author: k0kubun - Date: 2018-12-29 10:53:10 +0900 - - test_iseq_load.rb: increase timeout for stressful roundtrip - - Even 60s is short for our CI environments: - https://rubyci.org/logs/rubyci.s3.amazonaws.com/amazon/ruby-trunk/log/20181228T153002Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66626 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bfd1980db2f482670430577e04f0add5960313ee - Author: svn - Date: 2018-12-29 10:51:35 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66625 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 40b689c71a04d2033c5b2924bbaa21efaf395ea4 - Author: k0kubun - Date: 2018-12-29 10:51:34 +0900 - - clock_gettime_spec.rb: skip a new spec broken on solaris - - introduced in r66622, but this does not succeed on Solaris - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11x/ruby-trunk/log/20181229T002409Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66624 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c027f224431fe47ab5ea9ad2070a445244586fc4 - Author: eregon - Date: 2018-12-29 09:54:10 +0900 - - Update to ruby/spec@c8b36c4 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66623 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2076c2c3c401d9ab9324468818bbc46d4e4b870a - Author: eregon - Date: 2018-12-29 09:22:52 +0900 - - Update to ruby/spec@944ea57 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66622 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 548defb608847973e78462a38c8418f90dce9911 - Author: eregon - Date: 2018-12-29 09:22:31 +0900 - - Update to ruby/mspec@2bd2ead - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66621 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2ceebcc37b8ef5a9ca55d1fe3c3b000ccb9eaeb1 - Author: svn - Date: 2018-12-29 00:19:13 +0900 - - * 2018-12-29 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66620 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1317fefe53b95d763a281d8bf13e8bd023069068 - Author: k0kubun - Date: 2018-12-29 00:19:11 +0900 - - .travis.yml: increase timeout for test-all - - we reached 30min timeout on osx build - https://travis-ci.org/ruby/ruby/jobs/473019623 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66619 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 26572d228d3ba804d275aa55dc4f06adbcefb4af - Author: k0kubun - Date: 2018-12-28 23:30:16 +0900 - - test_io.rb: increase timeout for RubyCI - - to stabilize AIX powerpc CI - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/aix71_ppc/ruby-trunk/log/20181227T113302Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66618 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0bbf1eb7542a56cc00a6c77e3f8bfd89a7b5bdd5 - Author: k0kubun - Date: 2018-12-28 23:24:46 +0900 - - test_readline.rb: skip readline test for new solaris11s-sunc - - for now. This should be fixed, but let me make this new CI green - first to introduce Solaris-related changes later. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66617 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b0b0ded5aa2cf7c4574b057d8326ed4e1c172c12 - Author: k0kubun - Date: 2018-12-28 23:18:05 +0900 - - webrick/test_utils.rb: loosen timeout severity - - to stabilize CI failure like: - https://rubyci.org/logs/rubyci.s3.amazonaws.com/osx1013/ruby-trunk/log/20181228T114501Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66616 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fa3fda1c620b14872dadc81b8b790e9dce80a619 - Author: k0kubun - Date: 2018-12-28 23:12:42 +0900 - - jit_support.rb: deal with -std=c99 flag - - CC is changed from "icc" to "icc -std=c99" by r66605. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/icc-x64/ruby-trunk/log/20181228T130003Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66615 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c42a872e5b960696f7ae4377ab80cbeb4b1d837b - Author: k0kubun - Date: 2018-12-28 23:05:45 +0900 - - test_array.rb: increase timeout for RubyCI - - to prevent random failures. - - test/ruby/test_autoload.rb: ditto - test/ruby/test_optimization.rb: ditto - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-trunk/log/20181228T101706Z.fail.html.gz - https://rubyci.org/logs/mswinci.japaneast.cloudapp.azure.com/vc12-x64/ruby-trunk/log/20181228T114549Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66614 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 6e85a0ea7ee55e693148d82935da0c9b08e98974 - Author: k0kubun - Date: 2018-12-28 22:20:38 +0900 - - test_iseq_load.rb: increase timeout for RubyCI - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/arch/ruby-trunk/log/20181228T090001Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66613 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 78e3cd2bb1827eba1367b1ec9f4a58bce146d26b - Author: samuel - Date: 2018-12-28 22:03:18 +0900 - - Fix #endif annotation. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66612 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9ee79b658123a2a4af65c80484d1f91ce73354e2 - Author: samuel - Date: 2018-12-28 22:03:14 +0900 - - Don't allow rb_fiber_resume to raise exception on unborn fiber. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66611 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5fb9d1e11fc50df359a1f9d2537a11f13cdb6d33 - Author: samuel - Date: 2018-12-28 22:03:09 +0900 - - Implement Fiber#raise. Fixes #10344. - - This allows raising exceptions in another fiber, similarly to - Thread#raise. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b0d24baf8ab4fda0c24e15f9207984971cac8e07 - Author: svn - Date: 2018-12-28 19:33:04 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66609 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d54a86d49dfea10cfcd46fbde5046bdf13a479d1 - Author: nobu - Date: 2018-12-28 19:33:02 +0900 - - Hoisted out undefined_constant - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66608 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit f826cde5a9030e3ffb42bef2c09ee669b13d1465 - Author: nobu - Date: 2018-12-28 18:44:32 +0900 - - Add RUBY_API_VERSION to rbconfig.rb on mswin too - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66607 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 041b61e3407d317a0bff3bf4b85fe7b13833874f - Author: k0kubun - Date: 2018-12-28 18:34:51 +0900 - - test_jit.rb: suppress random failure on RubyCI - - This failure is a known issue that exists mainly on CI environments. - We should address this at some moment, but making CI red by this would - be just a false-positive alarm for now. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66606 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 61885c9b7ca8ccdaf53d7c365fbb86bad3294d88 - Author: k0kubun - Date: 2018-12-28 18:23:27 +0900 - - configure.ac: try to fix addr2line build failure - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian8/ruby-trunk/log/20181228T063002Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/scw-9d6766/ruby-trunk/log/20181228T081706Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/gentoo/ruby-trunk/log/20181228T063002Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/centos6/ruby-trunk/log/20181228T063003Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/centos7/ruby-trunk/log/20181228T080003Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/opensuseleap/ruby-trunk/log/20181228T080002Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/rhel_zlinux/ruby-trunk/log/20181228T063303Z.fail.html.gz - https://rubyci.org/logs/rubyci.s3.amazonaws.com/icc-x64/ruby-trunk/log/20181228T090003Z.fail.html.gz - - I suspect r66598 triggered something. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66605 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e23a166995dc1d671f15e8a8e77d110019f05875 - Author: nobu - Date: 2018-12-28 13:28:16 +0900 - - .travis.yml: ignore non-existent files - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66604 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 971e1aaf635c42498497d38829137af8b949f04a - Author: nobu - Date: 2018-12-28 13:23:39 +0900 - - .travis.yml: rbconfig.rb is not needed to setup sources - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66603 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9417d10fe18f2f51e80ecf415496e78fcdb3b64e - Author: nobu - Date: 2018-12-28 12:55:28 +0900 - - RUBY_PROGRAM_VERSION for MJIT_PRECOMPILED_HEADER - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66602 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 91dfdf840ba3f1b26ca26e75ac5e3c8166c7d5cc - Author: shyouhei - Date: 2018-12-28 12:42:11 +0900 - - vm_insnhelper.c: USE_FLONUM is always defined - - This changeset should fix the 32bit failures. - See also: https://travis-ci.org/ruby/ruby/jobs/472855470 - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66601 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit da8830e3de84717ca5dbb659b60dc94557f7258c - Author: ko1 - Date: 2018-12-28 12:09:29 +0900 - - fix r66599 to success install. please refix this patch @nobu - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66600 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 842272540886ff1da58e690907b08f2811a86607 - Author: nobu - Date: 2018-12-28 11:12:34 +0900 - - Moved version numbers - - * Define major and minor version numbers only in the public - include/ruby/version.h header, as the API version numbers. - - * Define only teeny version number in the private version.h - header. - - * RUBY_VERSION moved to version.c. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66599 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1095705c4218f8f752210f1a0b4f78d96ad675ac - Author: nobu - Date: 2018-12-28 10:56:20 +0900 - - Check if restrict keyword is supported - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66598 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 24b1b433c5abf02e9f9c7eb3851f4417dc5d8751 - Author: shyouhei - Date: 2018-12-28 10:06:04 +0900 - - vm_insnhelper.c: delete unused macros - - - FIXNUM_2_P: moved to vm_insnhelper.c because that is the only - place this macro is used. - - - FLONUM_2_P: ditto. - - - FLOAT_HEAP_P: not used anywhere. - - - FLOAT_INSTANCE_P: ditto. - - - GET_TOS: ditto. - - - USE_IC_FOR_SPECIALIZED_METHOD: ditto. - - - rb_obj_hidden_p: ditto. - - - REG_A: ditto. - - - REG_B: ditto. - - - GET_CONST_INLINE_CACHE: ditto. - - - vm_regan_regtype: moved inside of VM_COLLECT_USAGE_DETAILS - because that os the only place this enum is used. - - - vm_regan_acttype: ditto. - - - GET_GLOBAL: used only once. Removed with replacing that usage. - - - SET_GLOBAL: ditto. - - - rb_method_definition_create: declaration moved to - vm_insnhelper.c because that is the only place this declaration - makes sense. - - - rb_method_definition_set: ditto. - - - rb_method_definition_eq: ditto. - - - rb_make_no_method_exception: ditto. - - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66597 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d3c0b20949916aa7b432a0498a8016d67a7822ad - Author: svn - Date: 2018-12-28 02:39:21 +0900 - - * remove trailing spaces. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66596 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 496267023c490e717ad0598bf1e3364835b734a4 - Author: ko1 - Date: 2018-12-28 02:39:17 +0900 - - fix missed script_compiled events. [Bug #15471] - - * ruby.c (process_options): script_compiled events are missed on - command line -e or specified file. this commit fix it. - [Bug #15471] - - This patch should be backport to Ruby 2.6 branch. - - * vm_core.h (rb_exec_event_hook_script_compiled): introduce utility - function to invoke a script_compiled event. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66595 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit fcc5a19e2f9801217691a842250db937de3ea5ee - Author: k0kubun - Date: 2018-12-28 01:42:41 +0900 - - test_method.rb: do not kill RubyCI openSUSE machine - - with NoMemoryError on TestMethod#test_splat_long_array. - - https://rubyci.org/logs/rubyci.s3.amazonaws.com/opensuseleap/ruby-trunk/log/20181227T080002Z.log.html.gz - - Maybe better to check /proc/meminfo instead of /etc/os-release. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66594 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 006afb858d77efe9f63d056cf54c3bb578cd39da - Author: k0kubun - Date: 2018-12-28 01:28:40 +0900 - - accept_nonblock_spec.rb: skip spurious failure - - on solaris until it gets stable. - https://rubyci.org/logs/rubyci.s3.amazonaws.com/unstable11x/ruby-trunk/log/20181227T142405Z.fail.html.gz - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3e3b8df5f95418d68af6bae659bd16b8c80a3830 - Author: svn - Date: 2018-12-28 01:24:47 +0900 - - * 2018-12-28 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66592 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e1930666c76953ad8bcc3d4b95a5b94c553f525f - Author: k0kubun - Date: 2018-12-28 01:24:46 +0900 - - test/mkmf/test_flags.rb: try to suppress random CI failure - - on AIX ppc - https://rubyci.org/logs/rubyci.s3.amazonaws.com/aix71_ppc/ruby-trunk/log/20181226T113305Z.fail.html.gz - - test/lib/test/unit/assertions.rb: ditto, for TestIO#test_copy_stream_no_busy_wait - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66591 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 45918161a831c0ada6eecd79ba9500d50e308f72 - Author: k0kubun - Date: 2018-12-27 23:53:02 +0900 - - jit_support.rb: skip testing MJIT on oracle developer studio - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66590 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1922e6ad65b7a458eeeb84da9f07724b0f1c1145 - Author: k0kubun - Date: 2018-12-27 23:32:29 +0900 - - common.mk: pass CFLAGS to transform_mjit_header.rb - - so that flags like -msse4.1 are passed when checking compilation status - in transform_mjit_header.rb. It matters for checking __builtin_xxx things. - - [Fix GH-2059] [Bug #14964] - - From: pavel - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66589 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d9cce0814db58a506d549fea0f316a679335e22d - Author: nobu - Date: 2018-12-27 23:18:16 +0900 - - Fix restoration - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66588 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 71987f3f09ba51c34a002370ec5dd3202e9beae4 - Author: nobu - Date: 2018-12-27 23:15:36 +0900 - - Suppress warnings - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66587 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b7c2ca7a3225efcc79a72ee3798abc3320f5c304 - Author: akr - Date: 2018-12-27 21:42:45 +0900 - - [DOC] SecureRandom is extended by Random::Formatter. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66586 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e3e09806a227acb9d1d4ced37c808d97f4eeb3cf - Author: kazu - Date: 2018-12-27 18:09:42 +0900 - - Arrange as same as comment and return statement - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66585 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit bc64df876ebe96fa5da2b98d6227a8ef4163b911 - Author: shyouhei - Date: 2018-12-27 15:12:09 +0900 - - delete emacs mode lines [ci skip] - - These settings are now covered by .dir-locals.el. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66584 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 070a4aa0f00bd466fe52c526a0e862092cdcfa81 - Author: shyouhei - Date: 2018-12-27 15:11:09 +0900 - - add .dir-locals.el [ci skip] - - Recent Emacs (23 and up?) has this feature called .dir-locals.el. - See also: https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html - - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66583 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1680a13a926b17661329beec1ded6b32aad16c1b - Author: nobu - Date: 2018-12-27 13:49:12 +0900 - - Fix Net::Protocol::BufferedIO#write when sending large multi-byte string - - This commit should fix Net::Protocol::BufferedIO#write when sending - large multi-byte string like following example. - - ``` - $ ruby -rnet/http -rjson -v -e "Net::HTTP.post(URI('http://httpbin.org/post'), { text: 'ã‚'*100_000 }.to_json, 'Content-Type' => 'application/json')" - ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-linux] - Traceback (most recent call last): - 19: from -e:1:in `
' - 18: from lib/ruby/2.6.0/net/http.rb:500:in `post' - 17: from lib/ruby/2.6.0/net/http.rb:605:in `start' - 16: from lib/ruby/2.6.0/net/http.rb:920:in `start' - 15: from lib/ruby/2.6.0/net/http.rb:502:in `block in post' - 14: from lib/ruby/2.6.0/net/http.rb:1281:in `post' - 13: from lib/ruby/2.6.0/net/http.rb:1493:in `send_entity' - 12: from lib/ruby/2.6.0/net/http.rb:1479:in `request' - 11: from lib/ruby/2.6.0/net/http.rb:1506:in `transport_request' - 10: from lib/ruby/2.6.0/net/http.rb:1506:in `catch' - 9: from lib/ruby/2.6.0/net/http.rb:1507:in `block in transport_request' - 8: from lib/ruby/2.6.0/net/http/generic_request.rb:123:in `exec' - 7: from lib/ruby/2.6.0/net/http/generic_request.rb:189:in `send_request_with_body' - 6: from lib/ruby/2.6.0/net/protocol.rb:247:in `write' - 5: from lib/ruby/2.6.0/net/protocol.rb:265:in `writing' - 4: from lib/ruby/2.6.0/net/protocol.rb:248:in `block in write' - 3: from lib/ruby/2.6.0/net/protocol.rb:275:in `write0' - 2: from lib/ruby/2.6.0/net/protocol.rb:275:in `each_with_index' - 1: from lib/ruby/2.6.0/net/protocol.rb:275:in `each' - lib/ruby/2.6.0/net/protocol.rb:280:in `block in write0': undefined method `bytesize' for nil:NilClass (NoMethodError) - ``` - - [Fix GH-2058] - - From: Eito Katagiri - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66582 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1f866ddc1473588541f6b18761b43625857f7a37 - Author: svn - Date: 2018-12-27 13:21:56 +0900 - - * 2018-12-27 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66581 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 384ca22a7a8d9ccaea86ea336e349bcbd536335d - Author: nobu - Date: 2018-12-27 13:21:53 +0900 - - io-console.gemspec: update - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66580 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 94bdc4edf0583109ce97e244f6423d840b11c092 - Author: mame - Date: 2018-12-26 23:43:25 +0900 - - string.c: remove the deprecation warnings of `String#bytes` with block - - And its friends: lines, chars, grapheme_clusters, and codepoints. - [Feature #6670] [ruby-core:90728] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66579 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 0df1de8b32f98793f596fd8d3b608fc6f3104e01 - Author: mame - Date: 2018-12-26 23:42:07 +0900 - - Revert "string.c: remove the deprecation warnings of `String#bytes` with block" - - Forgot to write the ticket number in the commit log... - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66578 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 5281a0047f6f32103569372ae1a39cfadda4866c - Author: kazu - Date: 2018-12-26 18:14:28 +0900 - - Fix typos [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66577 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit e030e9f0b8be42dd8c5eb43e3f390106f3b6a48e - Author: mame - Date: 2018-12-26 18:04:12 +0900 - - object.c (rb_obj_match): use rb_warn for deprecation warning - - Now the warning is printed even without -w option. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66576 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2b21744efa34a685d0b3d3b333622989a7615cda - Author: mame - Date: 2018-12-26 17:52:19 +0900 - - string.c: remove the deprecation warnings of `String#bytes` with block - - And its friends: lines, chars, grapheme_clusters, and codepoints. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66575 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 35b7af7503d380f220b5730d47b542ba295be37b - Author: mrkn - Date: 2018-12-26 17:17:30 +0900 - - Import bigdecimal 1.4.2 - - * https://github.com/ruby/bigdecimal/compare/v1.4.1..v1.4.2 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66574 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9b817107ce0fea9e4dcde6edf5664c734a2faa2b - Author: naruse - Date: 2018-12-26 17:01:51 +0900 - - fix typo - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 9edb32dae72c2b45b524e9ca98650cd2b974fe22 - Author: shyouhei - Date: 2018-12-26 16:23:35 +0900 - - add #line [ci skip] - - These erb files are in fact erb comments + plain C. Adding #line - help us debug in case we have trouble there. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66572 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 2914522ffc39c22dfdccf5ad68162232c5cd0d35 - Author: mame - Date: 2018-12-26 16:04:31 +0900 - - spec/ruby/library/socket/socket/bind_spec.rb: allow to run under docker - - A root user runs the spec without Errno::EACCES - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66571 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 7453cdba1b62d6f6533f8c7bfdf6011524e11853 - Author: mame - Date: 2018-12-26 16:02:31 +0900 - - spec/ruby/core/process/setpriority_spec.rb: allow to run under docker - - Docker container is not always able to lower the nice value even if the - euid is a root. It depends upon the configuration of docker which - cannot check from the container itself. - - This change does check it by actually trying to lower the value first. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66570 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 925a722ae2c453c351d6e9fff9776bb0a2061642 - Author: mame - Date: 2018-12-26 15:01:18 +0900 - - test/rdoc: skip some tests when euid is root - - root user can access a file whose permission is 0000. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66569 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1df30008b2461c930a3fb8a8d887f54e403f8379 - Author: mame - Date: 2018-12-26 14:31:22 +0900 - - test/ruby/test_process.rb (test_execopts_uid): rescue Errno::EACCES - - The tests fail under the following condition: - - * executed as a root - * the code is in a directory that uid:30000 user cannot access - (e.g., /root) - - So, this change rescues Errno::EACCES explicitly. - Also, this change adds `exception: true` to `Kernel#system` calls. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66568 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b8d28b33b4df47f53d78b2f5587a72429cda3d91 - Author: normal - Date: 2018-12-26 13:04:01 +0900 - - doc/extension.ja.rdoc (rb_gc_register_mark_object): fix prototype - - It takes VALUE, not a pointer to a VALUE. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66567 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 70398311d06e48016ce944db69fce23bb361460c - Author: svn - Date: 2018-12-26 09:59:40 +0900 - - * expand tabs. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66566 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d46ab953765e2114b6f2f58792be9a7a974e5f27 - Author: shyouhei - Date: 2018-12-26 09:59:37 +0900 - - insns.def: refactor to avoid CALL_METHOD macro - - These send and its variant instructions are the most frequently called - paths in the entire process. Reducing macro expansions to make them - dedicated function called vm_sendish() is the main goal of this - changeset. It reduces the size of vm_exec_coref from 25,552 bytes to - 23,728 bytes on my machine. - - I see no significant slowdown. - - Fix: [GH-2056] - - vanilla: ruby 2.6.0dev (2018-12-19 trunk 66449) [x86_64-darwin15] - ours: ruby 2.6.0dev (2018-12-19 refactor-send 66449) [x86_64-darwin15] - last_commit=insns.def: refactor to avoid CALL_METHOD macro - Calculating ------------------------------------- - vanilla ours - vm2_defined_method 2.645M 2.823M i/s - 6.000M times in 5.109888s 4.783254s - vm2_method 8.553M 8.873M i/s - 6.000M times in 1.579892s 1.524026s - vm2_method_missing 3.772M 3.858M i/s - 6.000M times in 3.579482s 3.499220s - vm2_method_with_block 8.494M 8.944M i/s - 6.000M times in 1.589774s 1.509463s - vm2_poly_method 0.571 0.607 i/s - 1.000 times in 3.947570s 3.733528s - vm2_poly_method_ov 5.514 5.168 i/s - 1.000 times in 0.408156s 0.436169s - vm3_clearmethodcache 2.875 2.837 i/s - 1.000 times in 0.783018s 0.793493s - - Comparison: - vm2_defined_method - ours: 2822555.4 i/s - vanilla: 2644878.1 i/s - 1.07x slower - - vm2_method - ours: 8872947.8 i/s - vanilla: 8553433.1 i/s - 1.04x slower - - vm2_method_missing - ours: 3858192.3 i/s - vanilla: 3772296.3 i/s - 1.02x slower - - vm2_method_with_block - ours: 8943825.1 i/s - vanilla: 8493955.0 i/s - 1.05x slower - - vm2_poly_method - ours: 0.6 i/s - vanilla: 0.6 i/s - 1.06x slower - - vm2_poly_method_ov - vanilla: 5.5 i/s - ours: 5.2 i/s - 1.07x slower - - vm3_clearmethodcache - vanilla: 2.9 i/s - ours: 2.8 i/s - 1.01x slower - - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66565 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 686881d383cfe44c67875aada64207c5e0abaa8d - Author: shyouhei - Date: 2018-12-26 09:58:26 +0900 - - add _sp_inc_helpers.erb [ci skip] - - Just add more room for comments. This is a pure refactoring that does - not change anything but readability. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66564 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 756b200ad6623fdad76c30f19aaf25fb75a24f08 - Author: kazu - Date: 2018-12-26 01:11:18 +0900 - - [DOC] Remove heading with no content [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66561 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 1859c79190bd7f926d26b1f919e038c182080f2e - Author: svn - Date: 2018-12-26 01:09:40 +0900 - - * properties. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66560 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit d16509f1f009e06a1a9ff3bf9ab3f28aef415e87 - Author: kazu - Date: 2018-12-26 01:09:39 +0900 - - [DOC] Add doc/NEWS-2.6.0 [ci skip] - - fix previous commit miss - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66559 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 848a53d2b538d74730928737ec65325725f617f5 - Author: svn - Date: 2018-12-26 00:58:51 +0900 - - * 2018-12-26 - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66558 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit c14b9f9b638bc966923ae6fffa629ed171aea827 - Author: kazu - Date: 2018-12-26 00:58:49 +0900 - - [DOC] Move from NEWS to doc/NEWS-2.6.0 [ci skip] - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66557 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit b5569b9ab2ad5e0e4a997df7eb73e97ecbacc9dd - Author: k0kubun - Date: 2018-12-25 22:57:28 +0900 - - erb.rb: print deprecation warning with warn level 1 - - This was planned to be removed in Ruby 2.7 at first, but I changed my - mind to just keep warning it in Ruby 2.7. - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66556 b2dd03c8-39d4-4d8f-98ff-823fe69b080e - -commit 3a0471faa0d383392ba05b3a6409b973b7b009d1 - Author: matz - Date: 2018-12-25 22:45:17 +0900 - - version.h (RUBY_VERSION): 2.7.0 development has started. - - - git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66555 b2dd03c8-39d4-4d8f-98ff-823fe69b080e diff --git a/ruby/LEGAL b/ruby/LEGAL index 565c4c9cd..9645728ef 100644 --- a/ruby/LEGAL +++ b/ruby/LEGAL @@ -7,92 +7,118 @@ 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. >>> - https://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/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:: + @(#)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-label:label-MIT+License]. + +[coroutine] + + Unless otherwise specified, these files are licensed under the + {MIT License}[rdoc-label:label-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 - Copyright (c) 2011-2014 K.Takata + Copyright (c) 2002-2009:: K.Kosako + Copyright (c) 2011-2014:: K.Takata All rights reserved. Redistribution and use in source and binary forms, with or without @@ -119,7 +145,7 @@ enc/windows_1251.c:: Oniguruma LICENSE >>> - Copyright (c) 2002-2009 K.Kosako + Copyright (c) 2002-2009:: K.Kosako All rights reserved. Redistribution and use in source and binary forms, with or without @@ -150,10 +176,69 @@ enc/windows_1251.c:: When this software is partly used or it is distributed with Ruby, this of Ruby follows the license of Ruby. -enc/trans/GB/GB12345%UCS.src:: -enc/trans/GB/UCS%GB12345.src:: -enc/trans/GB/GB2312%UCS.src:: -enc/trans/GB/UCS%GB2312.src:: +[enc/windows_1250.c] +[enc/windows_1252.c] + + >>> + Copyright (c) 2006-2007:: Byte + K.Kosako + 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 + 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. @@ -165,12 +250,12 @@ enc/trans/GB/UCS%GB2312.src:: 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:: +[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. @@ -179,49 +264,64 @@ enc/trans/JIS/UCS%JISX0212.src:: 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:: +[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. + 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:: +[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. + 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. -configure:: +[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-1996, 1998-2012 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 1992-2018 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 @@ -243,14 +343,43 @@ tool/config.sub:: program. This Exception is an additional permission under section 7 of the GNU General Public License, version 3 ("GPLv3"). -parse.c:: +[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: - This file is licensed under the GPL, but is incorporated into Ruby and + 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-2015, 2018 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 @@ -278,12 +407,12 @@ parse.c:: This special exception was added by the Free Software Foundation in version 2.2 of Bison. -missing/dtoa.c:: +[missing/dtoa.c] 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 @@ -297,8 +426,8 @@ missing/dtoa.c:: OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. >>> - Copyright (c) 2004-2008 David Schultz - All rights reserved. + Copyright (c) 2004-2008:: David Schultz + All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -321,32 +450,34 @@ missing/dtoa.c:: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -win32/win32.{c,h}:: +[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. -missing/mt19937.c:: +[missing/mt19937.c] This file is under the new-style BSD license. >>> - A C-program for MT19937, with initialization improved 2002/2/10. - Coded by Takuji Nishimura and Makoto Matsumoto. + 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 @@ -382,13 +513,13 @@ missing/mt19937.c:: The Wayback Machine url: http://web.archive.org/web/19990429082237/http://www.math.keio.ac.jp/matumoto/emt.html -missing/procstat_vm.c:: +[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 @@ -413,151 +544,65 @@ missing/procstat_vm.c:: $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-label:label-Old-style+BSD+license]. >>> - Copyright (c) 1990, 1993 + 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.c:: -strftime.c:: -include/ruby/st.h:: -missing/acosh.c:: -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/strerror.c:: -missing/strstr.c:: -missing/tgamma.c:: -ext/date/date_strftime.c:: -ext/digest/sha1/sha1.c:: -ext/digest/sha1/sha1.h:: -ext/sdbm/_sdbm.c:: -ext/sdbm/sdbm.h:: +[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-label:label-Old-style+BSD+license]. >>> - Copyright (c) 1989, 1993 + 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. +[missing/setproctitle.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. - -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-label:label-Old-style+BSD+license]. >>> - Copyright 2003 Damien Miller - Copyright (c) 1983, 1995-1997 Eric P. Allman - Copyright (c) 1988, 1993 + 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. - - 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/strlcat.c:: -missing/strlcpy.c:: +[missing/strlcat.c] +[missing/strlcpy.c] These files are under an ISC-style license. >>> - Copyright (c) 1998, 2015 Todd C. Miller + Copyright (c) 1998, 2015:: Todd C. Miller Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above @@ -571,26 +616,26 @@ missing/strlcpy.c:: 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 + 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.c:: -ext/digest/md5/md5.h:: +[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 @@ -611,8 +656,8 @@ ext/digest/md5/md5.h:: L. Peter Deutsch ghost@aladdin.com -ext/digest/rmd160/rmd160.c:: -ext/digest/rmd160/rmd160.h:: +[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. @@ -622,16 +667,16 @@ ext/digest/rmd160/rmd160.h:: (Arranged for libc by Todd C. Miller) DATE:: 1 March 1996 - Copyright (c) Katholieke Universiteit Leuven + Copyright (c):: Katholieke Universiteit Leuven 1996, All Rights Reserved -ext/digest/sha2/sha2.c:: -ext/digest/sha2/sha2.h:: +[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 @@ -657,12 +702,12 @@ ext/digest/sha2/sha2.h:: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -ext/json/generator/generator.c:: +[ext/json/generator/generator.c] The file contains the following copyright notice. >>> - Copyright 2001-2004 Unicode, Inc. + Copyright 2001-2004:: Unicode, Inc. Disclaimer:: @@ -682,15 +727,15 @@ ext/json/generator/generator.c:: for internal or external distribution as long as this notice remains attached. -ext/nkf/nkf-utf8/config.h:: -ext/nkf/nkf-utf8/nkf.c:: -ext/nkf/nkf-utf8/utf8tbl.c:: +[ext/nkf/nkf-utf8/config.h] +[ext/nkf/nkf-utf8/nkf.c] +[ext/nkf/nkf-utf8/utf8tbl.c] These files are under the following license. So to speak, it is copyrighted semi-public-domain software. >>> - Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA) + Copyright (C) 1987:: Fujitsu LTD. (Itaru ICHIKAWA) Everyone is permitted to do anything on this program including copying, modifying, improving, @@ -700,14 +745,14 @@ ext/nkf/nkf-utf8/utf8tbl.c:: You don't have to ask before copying, redistribution or publishing. THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. -ext/psych:: -test/psych:: +[ext/psych] +[test/psych] The files under these directories are under the following license, except for ext/psych/yaml. >>> - Copyright 2009 Aaron Patterson, et al. + 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 @@ -727,12 +772,12 @@ test/psych:: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -ext/psych/yaml:: +[ext/psych/yaml] The files under this directory are under the following license. >>> - Copyright (c) 2006 Kirill Simonov + Copyright (c) 2006:: Kirill Simonov 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 @@ -752,14 +797,28 @@ ext/psych/yaml:: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -ext/socket/addrinfo.h:: -ext/socket/getaddrinfo.c:: -ext/socket/getnameinfo.c:: +[ext/pty/pty.c] + + >>> + C) Copyright 1998:: by Akinori Ito. + + 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 @@ -786,16 +845,16 @@ 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 and Jan Dubois You may distribute under the terms of either the GNU General Public @@ -804,20 +863,17 @@ ext/win32ole/win32ole.c:: The Wayback Machine url: http://web.archive.org/web/19970607104352/http://www.activeware.com:80/ -lib/rdoc/generator/template/darkfish/css/fonts.css:: +[lib/rdoc/generator/template/darkfish/css/fonts.css] - This file is licensed under the SIL Open Font License. + This file is licensed under the {SIL Open Font License}[http://scripts.sil.org/OFL]. - >>> - http://scripts.sil.org/OFL - -spec/mspec:: -spec/ruby:: +[spec/mspec] +[spec/ruby] The files under these directories are under the following license. >>> - Copyright (c) 2008 Engine Yard, Inc. All rights reserved. + 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 @@ -840,17 +896,17 @@ spec/ruby:: 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:: +[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 (see the file MIT.txt), or the - conditions below: + either the terms of the {MIT license}[rdoc-label:label-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 @@ -901,20 +957,109 @@ test/rubygems:: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -lib/bundler:: -lib/bundler.rb:: -lib/bundler.gemspec:: -spec/bundler:: -man/bundle-*,gemfile.*:: +[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 + Portions copyright (c) 2010:: Andre Arko + Portions copyright (c) 2009:: Engine Yard + + {MIT License}[rdoc-label:label-MIT+License] + +[lib/bundler/vendor/thor] + + Thor is under the following license. + + >>> + Copyright (c) 2008 Yehuda Katz, Eric Hodel, et al. + + {MIT License}[rdoc-label:label-MIT+License] + +[lib/rubygems/resolver/molinillo] +[lib/bundler/vendor/molinillo] + + molinillo is under the following license. + + >>> + Copyright (c) 2014 Samuel E. Giddins segiddins@segiddins.me + + {MIT License}[rdoc-label:label-MIT+License] + +[lib/bundler/vendor/connection_pool] + + connection_pool is under the following license. + + >>> + Copyright (c) 2011 Mike Perham + + {MIT License}[rdoc-label:label-MIT+License] + +[lib/bundler/vendor/net-http-persistent] - MIT License:: + net-http-persistent is under the following license. + >>> + Copyright (c) Eric Hodel, Aaron Patterson + + {MIT License}[rdoc-label:label-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-label:label-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-label:label-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 @@ -933,3 +1078,34 @@ man/bundle-*,gemfile.*:: 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. diff --git a/ruby/NEWS b/ruby/NEWS deleted file mode 100644 index e1adb5115..000000000 --- a/ruby/NEWS +++ /dev/null @@ -1,826 +0,0 @@ -# -*- rdoc -*- - -= NEWS for Ruby 2.7.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. https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER). - -== Changes since the 2.6.0 release - -=== Language changes - -==== Pattern matching - -* Pattern matching is introduced as an experimental feature. [Feature #14912] - - case [0, [1, 2, 3]] - in [a, [b, *c]] - p a #=> 0 - p b #=> 1 - p c #=> [2, 3] - end - - case {a: 0, b: 1} - in {a: 0, x: 1} - :unreachable - in {a: 0, b: var} - p var #=> 1 - end - - case -1 - in 0 then :unreachable - in 1 then :unreachable - end #=> NoMatchingPatternError - - json = < "Bob" - p age #=> 2 - - JSON.parse(json, symbolize_names: true) in {name: "Alice", children: [{name: "Charlie", age: age}]} - #=> NoMatchingPatternError - -* See the following slides for more details: - * https://speakerdeck.com/k_tsj/pattern-matching-new-feature-in-ruby-2-dot-7 - * Note that the slides are slightly obsolete. - -* The warning against pattern matching can be suppressed with - {-W:no-experimental option}[#label-Warning+option]. - -==== The spec of keyword arguments is changed towards 3.0 - -* Automatic conversion of keyword arguments and positional arguments is - deprecated, and conversion will be removed in Ruby 3. [Feature #14183] - - * When a method call passes a Hash at the last argument, and when it - passes no keywords, and when the called method accepts keywords, - a warning is emitted. To continue treating the hash as keywords, - add a double splat operator to avoid the warning and ensure - correct behavior in Ruby 3. - - def foo(key: 42); end; foo({key: 42}) # warned - def foo(**kw); end; foo({key: 42}) # warned - def foo(key: 42); end; foo(**{key: 42}) # OK - def foo(**kw); end; foo(**{key: 42}) # OK - - * When a method call passes keywords to a method that accepts keywords, - but it does not pass enough required positional arguments, the - keywords are treated as a final required positional argument, and a - warning is emitted. Pass the argument as a hash instead of keywords - to avoid the warning and ensure correct behavior in Ruby 3. - - def foo(h, **kw); end; foo(key: 42) # warned - def foo(h, key: 42); end; foo(key: 42) # warned - def foo(h, **kw); end; foo({key: 42}) # OK - def foo(h, key: 42); end; foo({key: 42}) # OK - - * When a method accepts specific keywords but not a keyword splat, and - a hash or keywords splat is passed to the method that includes both - Symbol and non-Symbol keys, the hash will continue to be split, and - a warning will be emitted. You will need to update the calling code - to pass separate hashes to ensure correct behavior in Ruby 3. - - def foo(h={}, key: 42); end; foo("key" => 43, key: 42) # warned - def foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # warned - def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK - - * If a method does not accept keywords, and is called with keywords, - the keywords are still treated as a positional hash, with no warning. - This behavior will continue to work in Ruby 3. - - def foo(opt={}); end; foo( key: 42 ) # OK - -* Non-symbols are allowed as keyword argument keys if the method accepts - arbitrary keywords. [Feature #14183] - - * Non-Symbol keys in a keyword arguments hash were prohibited in 2.6.0, - but are now allowed again. [Bug #15658] - - def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1} - -* **nil is allowed in method definitions to explicitly mark - that the method accepts no keywords. Calling such a method with keywords - will result in an ArgumentError. [Feature #14183] - - def foo(h, **nil); end; foo(key: 1) # ArgumentError - def foo(h, **nil); end; foo(**{key: 1}) # ArgumentError - def foo(h, **nil); end; foo("str" => 1) # ArgumentError - def foo(h, **nil); end; foo({key: 1}) # OK - def foo(h, **nil); end; foo({"str" => 1}) # OK - -* Passing an empty keyword splat to a method that does not accept keywords - no longer passes an empty hash, unless the empty hash is necessary for - a required parameter, in which case a warning will be emitted. Remove - the double splat to continue passing a positional hash. [Feature #14183] - - h = {}; def foo(*a) a end; foo(**h) # [] - h = {}; def foo(a) a end; foo(**h) # {} and warning - h = {}; def foo(*a) a end; foo(h) # [{}] - h = {}; def foo(a) a end; foo(h) # {} - -* Above warnings can be suppressed also with {-W:no-deprecated option}[#label-Warning+option]. - -==== Numbered parameters - -* Numbered parameters as default block parameters are introduced. - [Feature #4475] - - [1, 2, 10].map { _1.to_s(16) } #=> ["1", "2", "a"] - [[1, 2], [3, 4]].map { _1 + _2 } #=> [3, 7] - - You can still define a local variable named +_1+ and so on, - and that is honored when present, but renders a warning. - - _1 = 0 #=> warning: `_1' is reserved for numbered parameter; consider another name - [1].each { p _1 } # prints 0 instead of 1 - -==== proc/lambda without block is deprecated - -* Proc.new and Kernel#proc with no block in a method called with a block is - warned now. - - def foo - proc - end - foo { puts "Hello" } #=> warning: Capturing the given block using Kernel#proc is deprecated; use `&block` instead - - This warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option]. - -* Kernel#lambda with no block in a method called with a block raises an exception. - - def bar - lambda - end - bar { puts "Hello" } #=> tried to create Proc object without a block (ArgumentError) - -==== Other miscellaneous changes - -* A beginless range is experimentally introduced. It might be useful - in +case+, new call-sequence of the Comparable#clamp, - constants and DSLs. [Feature #14799] - - ary[..3] # identical to ary[0..3] - - case RUBY_VERSION - when ..."2.4" then puts "EOL" - # ... - end - - age.clamp(..100) - - where(sales: ..100) - -* Setting $; to a non-nil value is warned now. [Feature #14240] - Use of it in String#split is warned too. - This warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option]. - -* Setting $, to a non-nil value is warned now. [Feature #14240] - Use of it in Array#join is warned too. - This warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option]. - -* Quoted here-document identifiers must end within the same line. - - <<"EOS - " # This had been warned since 2.4; Now it raises a SyntaxError - EOS - -* The flip-flop syntax deprecation is reverted. [Feature #5400] - -* Comment lines can be placed between fluent dot now. - - foo - # .bar - .baz # => foo.baz - -* Calling a private method with a literal +self+ as the receiver - is now allowed. [Feature #11297] [Feature #16123] - -* Modifier rescue now operates the same for multiple assignment as single - assignment. [Bug #8279] - - a, b = raise rescue [1, 2] - # Previously parsed as: (a, b = raise) rescue [1, 2] - # Now parsed as: a, b = (raise rescue [1, 2]) - -* +yield+ in singleton class syntax is warned and will be deprecated later. [Feature #15575]. - - def foo - class << Object.new - yield #=> warning: `yield' in class syntax will not be supported from Ruby 3.0. [Feature #15575] - end - end - foo { p :ok } - - This warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option]. - -* Argument forwarding by (...) is introduced. [Feature #16253] - - def foo(...) - bar(...) - end - - All arguments to +foo+ are forwarded to +bar+, including keyword and - block arguments. - Note that the parentheses are mandatory. bar ... is parsed - as an endless range. - -* Access and setting of $SAFE is now always warned. $SAFE - will become a normal global variable in Ruby 3.0. [Feature #16131] - -* Object#{taint,untaint,trust,untrust} and related functions in the C-API - no longer have an effect (all objects are always considered untainted), and are now - warned in verbose mode. This warning will be disabled even in non-verbose mode in - Ruby 3.0, and the methods and C functions will be removed in Ruby 3.2. [Feature #16131] - -* Refinements take place at Object#method and Module#instance_method. [Feature #15373] - -=== Command line options - -==== Warning option - -The +-W+ option has been extended with a following +:+, to manage categorized -warnings. [Feature #16345] [Feature #16420] - -* To suppress deprecation warnings: - - $ ruby -e '$; = ""' - -e:1: warning: `$;' is deprecated - - $ ruby -W:no-deprecated -e '$; = //' - -* It works with the +RUBYOPT+ environment variable: - - $ RUBYOPT=-W:no-deprecated ruby -e '$; = //' - -* To suppress experimental feature warnings: - - $ ruby -e '0 in a' - -e:1: warning: Pattern matching is experimental, and the behavior may change in future versions of Ruby! - - $ ruby -W:no-experimental -e '0 in a' - -* To suppress both by using +RUBYOPT+, set space separated values: - - $ RUBYOPT='-W:no-deprecated -W:no-experimental' ruby -e '($; = "") in a' - -See also Warning in {Core classes updates}[#label-Core+classes+updates+-28outstanding+ones+only-29]. - -=== Core classes updates (outstanding ones only) - -Array:: - - New methods:: - - * Added Array#intersection. [Feature #16155] - - * Added Array#minmax, with a faster implementation than Enumerable#minmax. [Bug #15929] - -Comparable:: - - Modified method:: - - * Comparable#clamp now accepts a Range argument. [Feature #14784] - - -1.clamp(0..2) #=> 0 - 1.clamp(0..2) #=> 1 - 3.clamp(0..2) #=> 2 - # With beginless and endless ranges: - -1.clamp(0..) #=> 0 - 3.clamp(..2) #=> 2 - - -Complex:: - - New method:: - - * Added Complex#<=>. - So 0 <=> 0i will not raise NoMethodError. [Bug #15857] - -Dir:: - - Modified methods:: - - * Dir.glob and Dir.[] no longer allow NUL-separated glob pattern. - Use Array instead. [Feature #14643] - -Encoding:: - - New encoding:: - - * Added new encoding CESU-8. [Feature #15931] - -Enumerable:: - - New methods:: - - * Added Enumerable#filter_map. [Feature #15323] - - [1, 2, 3].filter_map {|x| x.odd? ? x.to_s : nil } #=> ["1", "3"] - - * Added Enumerable#tally. [Feature #11076] - - ["A", "B", "C", "B", "A"].tally #=> {"A"=>2, "B"=>2, "C"=>1} - -Enumerator:: - - New methods:: - - * Added Enumerator.produce to generate an Enumerator from any custom - data transformation. [Feature #14781] - - require "date" - dates = Enumerator.produce(Date.today, &:succ) #=> infinite sequence of dates - dates.detect(&:tuesday?) #=> next Tuesday - - * Added Enumerator::Lazy#eager that generates a non-lazy enumerator - from a lazy enumerator. [Feature #15901] - - a = %w(foo bar baz) - e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.eager - p e.class #=> Enumerator - p e.map {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"] - - * Added Enumerator::Yielder#to_proc so that a Yielder object - can be directly passed to another method as a block - argument. [Feature #15618] - -Fiber:: - - New method:: - - * Added Fiber#raise that behaves like Fiber#resume but raises an - exception on the resumed fiber. [Feature #10344] - -File:: - - Modified method:: - - * File.extname now returns a dot string for names ending with a dot on - non-Windows platforms. [Bug #15267] - - File.extname("foo.") #=> "." - -FrozenError:: - - New method:: - - * Added FrozenError#receiver to return the frozen object on which - modification was attempted. To set this object when raising - FrozenError in Ruby code, FrozenError.new accepts a +:receiver+ - option. [Feature #15751] - -GC:: - - New method:: - - * Added GC.compact method for compacting the heap. - This function compacts live objects in the heap so that fewer pages may - be used, and the heap may be more CoW (copy-on-write) friendly. [Feature #15626] - - Details on the algorithm and caveats can be found here: - https://bugs.ruby-lang.org/issues/15626 - -IO:: - - New method:: - - * Added IO#set_encoding_by_bom to check the BOM and set the external - encoding. [Bug #15210] - -Integer:: - - Modified method:: - - * Integer#[] now supports range operations. [Feature #8842] - - 0b01001101[2, 4] #=> 0b0011 - 0b01001100[2..5] #=> 0b0011 - 0b01001100[2...6] #=> 0b0011 - # ^^^^ - -Method:: - - Modified method:: - - * Method#inspect shows more information. [Feature #14145] - -Module:: - - New methods:: - - * Added Module#const_source_location to retrieve the location where a - constant is defined. [Feature #10771] - - * Added Module#ruby2_keywords for marking a method as passing keyword - arguments through a regular argument splat, useful when delegating - all arguments to another method in a way that can be backwards - compatible with older Ruby versions. [Bug #16154] - - Modified methods:: - - * Module#autoload? now takes an +inherit+ optional argument, like - Module#const_defined?. [Feature #15777] - - * Module#name now always returns a frozen String. The returned String is - always the same for a given Module. This change is - experimental. [Feature #16150] - -NilClass / TrueClass / FalseClass:: - - Modified methods:: - - * NilClass#to_s, TrueClass#to_s, and FalseClass#to_s now always return a - frozen String. The returned String is always the same for each of these - values. This change is experimental. [Feature #16150] - -ObjectSpace::WeakMap:: - - Modified method:: - - * ObjectSpace::WeakMap#[]= now accepts special objects as either key or - values. [Feature #16035] - -Proc:: - - New method:: - - * Added Proc#ruby2_keywords for marking the proc as passing keyword - arguments through a regular argument splat, useful when delegating - all arguments to another method or proc in a way that can be backwards - compatible with older Ruby versions. [Feature #16404] - -Range:: - - New method:: - - * Added Range#minmax, with a faster implementation than Enumerable#minmax. - It returns a maximum that now corresponds to Range#max. [Bug #15807] - - Modified method:: - - * Range#=== now uses Range#cover? for String arguments, too (in Ruby 2.6, it was - changed from Range#include? for all types except strings). [Bug #15449] - - -RubyVM:: - - Removed method:: - - * +RubyVM.resolve_feature_path+ moved to - $LOAD_PATH.resolve_feature_path. [Feature #15903] [Feature #15230] - -String:: - - Unicode:: - - * Update Unicode version and Emoji version from 11.0.0 to - 12.0.0. [Feature #15321] - - * Update Unicode version to 12.1.0, adding support for - U+32FF SQUARE ERA NAME REIWA. [Feature #15195] - - * Update Unicode Emoji version to 12.1. [Feature #16272] - -Symbol:: - - New methods:: - - * Added Symbol#start_with? and Symbol#end_with? methods. [Feature #16348] - -Time:: - - New methods:: - - * Added Time#ceil method. [Feature #15772] - - * Added Time#floor method. [Feature #15653] - - Modified method:: - - * Time#inspect is separated from Time#to_s and it shows - the time's sub second. [Feature #15958] - -UnboundMethod:: - - New method:: - - * Added UnboundMethod#bind_call method. [Feature #15955] - - umethod.bind_call(obj, ...) is semantically equivalent - to umethod.bind(obj).call(...). This idiom is used in - some libraries to call a method that is overridden. The added - method does the same without allocation of an intermediate Method - object. - - class Foo - def add_1(x) - x + 1 - end - end - class Bar < Foo - def add_1(x) # override - x + 2 - end - end - - obj = Bar.new - p obj.add_1(1) #=> 3 - p Foo.instance_method(:add_1).bind(obj).call(1) #=> 2 - p Foo.instance_method(:add_1).bind_call(obj, 1) #=> 2 - -Warning:: - - New methods:: - - * Added Warning.[] and Warning.[]= to manage emitting/suppressing - some categories of warnings. [Feature #16345] [Feature #16420] - -$LOAD_PATH:: - - New method:: - - * Added $LOAD_PATH.resolve_feature_path. [Feature #15903] [Feature #15230] - -=== Stdlib updates (outstanding ones only) - -Bundler:: - - * Upgrade to Bundler 2.1.2. - See https://github.com/bundler/bundler/releases/tag/v2.1.2 - -CGI:: - - * CGI.escapeHTML becomes 2~5x faster when there is at least one escaped character. - See https://github.com/ruby/ruby/pull/2226 - -CSV:: - - * Upgrade to 3.1.2. - See https://github.com/ruby/csv/blob/master/NEWS.md. - -Date:: - - * Date.jisx0301, Date#jisx0301, and Date.parse support the new Japanese - era. [Feature #15742] - -Delegator:: - - * Object#DelegateClass accepts a block and module_evals it in the context - of the returned class, similar to Class.new and Struct.new. - -ERB:: - - * Prohibit marshaling ERB instance. - -IRB:: - - * Introduce syntax highlighting inspired by the Pry gem to Binding#irb - source lines, REPL input, and inspect output of some core-class objects. - - * Introduce multiline editing mode provided by Reline. - - * Show documentation when completion. - - * Enable auto indent and save/load history by default. - -JSON:: - - * Upgrade to 2.3.0. - -Net::FTP:: - - * Add Net::FTP#features to check available features, and Net::FTP#option to - enable/disable each of them. [Feature #15964] - -Net::HTTP:: - - * Add +ipaddr+ optional parameter to Net::HTTP#start to replace the address for - the TCP/IP connection. [Feature #5180] - -Net::IMAP:: - - * Add Server Name Indication (SNI) support. [Feature #15594] - -open-uri:: - - * Warn open-uri's "open" method at Kernel. - Use URI.open instead. [Misc #15893] - - * The default charset of "text/*" media type is UTF-8 instead of - ISO-8859-1. [Bug #15933] - -OptionParser:: - - * Now show "Did you mean?" for unknown options. [Feature #16256] - - test.rb: - - require "optparse" - OptionParser.new do |opts| - opts.on("-f", "--foo", "foo") {|v| } - opts.on("-b", "--bar", "bar") {|v| } - opts.on("-c", "--baz", "baz") {|v| } - end.parse! - - example: - - $ ruby test.rb --baa - Traceback (most recent call last): - test.rb:7:in `
': invalid option: --baa (OptionParser::InvalidOption) - Did you mean? baz - bar - -Pathname:: - - * Pathname.glob now delegates 3 arguments to Dir.glob - to accept +base+ keyword. [Feature #14405] - -Racc:: - - * Merge 1.4.15 from upstream repository and added cli of racc. - -Reline:: - - * New stdlib that is compatible with the readline stdlib but is - implemented in pure Ruby. It also provides a multiline editing mode. - -REXML:: - - * Upgrade to 3.2.3. - See https://github.com/ruby/rexml/blob/master/NEWS.md. - -RSS:: - - * Upgrade to RSS 0.2.8. - See https://github.com/ruby/rss/blob/master/NEWS.md. - -RubyGems:: - - * Upgrade to RubyGems 3.1.2. - * https://github.com/rubygems/rubygems/releases/tag/v3.1.0 - * https://github.com/rubygems/rubygems/releases/tag/v3.1.1 - * https://github.com/rubygems/rubygems/releases/tag/v3.1.2 - -StringScanner:: - - * Upgrade to 1.0.3. - See https://github.com/ruby/strscan/blob/master/NEWS.md. - -=== Compatibility issues (excluding feature bug fixes) - -* The following libraries are no longer bundled gems. - Install corresponding gems to use these features. - * CMath (cmath gem) - * Scanf (scanf gem) - * Shell (shell gem) - * Synchronizer (sync gem) - * ThreadsWait (thwait gem) - * E2MM (e2mmap gem) - -Proc:: - * The Proc#to_s format was changed. [Feature #16101] - -Range:: - * Range#minmax used to iterate on the range to determine the maximum. - It now uses the same algorithm as Range#max. In rare cases (e.g. - ranges of Floats or Strings), this may yield different results. [Bug #15807] - -=== Stdlib compatibility issues (excluding feature bug fixes) - -* Promote stdlib to default gems - * The following default gems were published on rubygems.org - * benchmark - * cgi - * delegate - * getoptlong - * net-pop - * net-smtp - * open3 - * pstore - * readline - * readline-ext - * singleton - * The following default gems were only promoted at ruby-core, - but not yet published on rubygems.org. - * monitor - * observer - * timeout - * tracer - * uri - * yaml -* The did_you_mean gem has been promoted up to a default gem from a bundled gem - -pathname:: - - * Kernel#Pathname when called with a Pathname argument now returns - the argument instead of creating a new Pathname. This is more - similar to other Kernel methods, but can break code that modifies - the return value and expects the argument not to be modified. - -profile.rb, Profiler__:: - - * Removed from standard library. It was unmaintained since Ruby 2.0.0. - -=== C API updates - -* Many *_kw functions have been added for setting whether - the final argument being passed should be treated as keywords. You - may need to switch to these functions to avoid keyword argument - separation warnings, and to ensure correct behavior in Ruby 3. - -* The : character in rb_scan_args format string is now - treated as keyword arguments. Passing a positional hash instead of - keyword arguments will emit a deprecation warning. - -* C API declarations with +ANYARGS+ are changed not to use +ANYARGS+. - See https://github.com/ruby/ruby/pull/2404 - -=== Implementation improvements - -Fiber:: - - * Allow selecting different coroutine implementations by using - +--with-coroutine=+, e.g. - - $ ./configure --with-coroutine=ucontext - $ ./configure --with-coroutine=copy - - * Replace previous stack cache with fiber pool cache. The fiber pool - allocates many stacks in a single memory region. Stack allocation - becomes O(log N) and fiber creation is amortized O(1). Around 10x - performance improvement was measured in micro-benchmarks. - https://github.com/ruby/ruby/pull/2224 - -File:: - * File.realpath now uses realpath(3) on many platforms, which can - significantly improve performance. [Feature #15797] - -Hash:: - * Change data structure of small Hash objects. [Feature #15602] - -Monitor:: - * Monitor class is written in C-extension. [Feature #16255] - -Thread:: - - * VM stack memory allocation is now combined with native thread stack, - improving thread allocation performance and reducing allocation related - failures. Around 10x performance improvement was measured in micro-benchmarks. - -JIT:: - - * JIT-ed code is recompiled to less-optimized code when an optimization assumption is invalidated. - - * Method inlining is performed when a method is considered as pure. - This optimization is still experimental and many methods are NOT considered as pure yet. - - * The default value of +--jit-max-cache+ is changed from 1,000 to 100. - - * The default value of +--jit-min-calls+ is changed from 5 to 10,000. - -RubyVM:: - - * Per-call-site method cache, which has been there since around 1.9, was - improved: cache hit rate raised from 89% to 94%. - See https://github.com/ruby/ruby/pull/2583 - -RubyVM::InstructionSequence:: - - * RubyVM::InstructionSequence#to_binary method generates compiled binary. - The binary size is reduced. [Feature #16163] - -=== Miscellaneous changes - -* Support for IA64 architecture has been removed. Hardware for testing was - difficult to find, native fiber code is difficult to implement, and it added - non-trivial complexity to the interpreter. [Feature #15894] - -* Require compilers to support C99. [Misc #15347] - - * Details of our dialect: https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/C99 - -* Ruby's upstream repository is changed from Subversion to Git. - - * https://git.ruby-lang.org/ruby.git - - * RUBY_REVISION class is changed from Integer to String. - - * RUBY_DESCRIPTION includes Git revision instead of Subversion's one. - -* Support built-in methods in Ruby with the _\_builtin_ syntax. [Feature #16254] - - Some methods are defined in *.rb (such as trace_point.rb). - For example, it is easy to define a method which accepts keyword arguments. diff --git a/ruby/NEWS.md b/ruby/NEWS.md new file mode 100644 index 000000000..cfe11295a --- /dev/null +++ b/ruby/NEWS.md @@ -0,0 +1,657 @@ +# NEWS for Ruby 3.1.0 + +This document is a list of user-visible feature changes +since the **3.0.0** release, except for bug fixes. + +Note that each entry is kept to a minimum, see links for details. + +## Language changes + +* The block argument can now be anonymous if the block will + only be passed to another method. [[Feature #11256]] + + ```ruby + def foo(&) + bar(&) + end + ``` + +* Pin operator now takes an expression. [[Feature #17411]] + + ```ruby + Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a + #=> [[3, 5], [5, 7], [11, 13]] + ``` + +* Pin operator now supports instance, class, and global variables. + [[Feature #17724]] + + ```ruby + @n = 5 + Prime.each_cons(2).lazy.find{_1 in [n, ^@n]} + #=> [3, 5] + ``` + +* One-line pattern matching is no longer experimental. + +* Parentheses can be omitted in one-line pattern matching. + [[Feature #16182]] + + ```ruby + [0, 1] => _, x + {y: 2} => y: + x #=> 1 + y #=> 2 + ``` + +* Multiple assignment evaluation order has been made consistent with + single assignment evaluation order. With single assignment, Ruby + uses a left-to-right evaluation order. With this code: + + ```ruby + foo[0] = bar + ``` + + The following evaluation order is used: + + 1. `foo` + 2. `bar` + 3. `[]=` called on the result of `foo` + + In Ruby before 3.1.0, multiple assignment did not follow this + evaluation order. With this code: + + ```ruby + foo[0], bar.baz = a, b + ``` + + Versions of Ruby before 3.1.0 would evaluate in the following + order + + 1. `a` + 2. `b` + 3. `foo` + 4. `[]=` called on the result of `foo` + 5. `bar` + 6. `baz=` called on the result of `bar` + + Starting in Ruby 3.1.0, the evaluation order is now consistent with + single assignment, with the left-hand side being evaluated before + the right-hand side: + + 1. `foo` + 2. `bar` + 3. `a` + 4. `b` + 5. `[]=` called on the result of `foo` + 6. `baz=` called on the result of `bar` + + [[Bug #4443]] + +* Values in Hash literals and keyword arguments can be omitted. + [[Feature #14579]] + + For example, + + * `{x:, y:}` is a syntax sugar of `{x: x, y: y}`. + * `foo(x:, y:)` is a syntax sugar of `foo(x: x, y: y)`. + + Constant names, local variable names, and method names are allowed as + key names. Note that a reserved word is considered as a local + variable or method name even if it's a pseudo variable name such as + `self`. + +* Non main-Ractors can get instance variables (ivars) of classes/modules + if ivars refer to shareable objects. + [[Feature #17592]] + +* A command syntax is allowed in endless method definitions, i.e., + you can now write `def foo = puts "Hello"`. + Note that `private def foo = puts "Hello"` does not parse. + [[Feature #17398]] + +## Command line options + +* `--disable-gems` is now explicitly declared as "just for debugging". + Never use it in any real-world codebase. + [[Feature #17684]] + +## Core classes updates + +Note: We're only listing outstanding class updates. + +* Array + + * Array#intersect? is added. [[Feature #15198]] + +* Class + + * Class#subclasses, which returns an array of classes + directly inheriting from the receiver, not + including singleton classes. + [[Feature #18273]] + + ```ruby + class A; end + class B < A; end + class C < B; end + class D < A; end + A.subclasses #=> [D, B] + B.subclasses #=> [C] + C.subclasses #=> [] + ``` + +* Enumerable + + * Enumerable#compact is added. [[Feature #17312]] + + * Enumerable#tally now accepts an optional hash to count. [[Feature #17744]] + + * Enumerable#each_cons and each_slice to return a receiver. [[GH-1509]] + + ```ruby + [1, 2, 3].each_cons(2){} + # 3.0 => nil + # 3.1 => [1, 2, 3] + + [1, 2, 3].each_slice(2){} + # 3.0 => nil + # 3.1 => [1, 2, 3] + ``` + +* Enumerator::Lazy + + * Enumerator::Lazy#compact is added. [[Feature #17312]] + +* File + + * File.dirname now accepts an optional argument for the level to + strip path components. [[Feature #12194]] + +* GC + + * "GC.measure_total_time = true" enables the measurement of GC. + Measurement can introduce overhead. It is enabled by default. + GC.measure_total_time returns the current setting. + GC.stat[:time] or GC.stat(:time) returns measured time + in milli-seconds. [[[Feature #10917]]] + + * GC.total_time returns measured time in nano-seconds. [[[Feature #10917]]] + +* Integer + + * Integer.try_convert is added. [[Feature #15211]] + +* Kernel + + + * Kernel#load now accepts a module as the second argument, + and will load the file using the given module as the + top-level module. [[Feature #6210]] + +* Marshal + + * Marshal.load now accepts a `freeze: true` option. + All returned objects are frozen except for `Class` and + `Module` instances. Strings are deduplicated. [[Feature #18148]] + +* MatchData + + * MatchData#match is added [[Feature #18172]] + + * MatchData#match_length is added [[Feature #18172]] + +* Method / UnboundMethod + + * Method#public?, Method#private?, Method#protected?, + UnboundMethod#public?, UnboundMethod#private?, + UnboundMethod#protected? have been added. [[Feature #11689]] + +* Module + + * Module#prepend now modifies the ancestor chain if the receiver + already includes the argument. Module#prepend still does not + modify the ancestor chain if the receiver has already prepended + the argument. [[Bug #17423]] + + * Module#private, #public, #protected, and #module_function will + now return their arguments. If a single argument is given, it + is returned. If no arguments are given, nil is returned. If + multiple arguments are given, they are returned as an array. + [[Feature #12495]] + +* Process + + * Process.\_fork is added. This is a core method for fork(2). + Do not call this method directly; it is called by existing + fork methods: Kernel.#fork, Process.fork, and IO.popen("-"). + Application monitoring libraries can overwrite this method to + hook fork events. [[Feature #17795]] + +* Struct + + * Passing only keyword arguments to Struct#initialize is warned. + You need to use a Hash literal to set a Hash to a first member. + [[Feature #16806]] + + * StructClass#keyword_init? is added [[Feature #18008]] + +* String + + * Update Unicode version to 13.0.0 [[Feature #17750]] + and Emoji version to 13.0 [[Feature #18029]] + + * String#unpack and String#unpack1 now accept an `offset:` keyword + argument to start the unpacking after an arbitrary number of bytes + have been skipped. If `offset` is outside of the string bounds + `ArgumentError` is raised. [[Feature #18254]] + +* Thread + + * Thread#native_thread_id is added. [[Feature #17853]] + +* Thread::Backtrace + + * Thread::Backtrace.limit, which returns the value to limit backtrace + length set by `--backtrace-limit` command line option, is added. + [[Feature #17479]] + +* Thread::Queue + + * Thread::Queue.new now accepts an Enumerable of initial values. + [[Feature #17327]] + +* Time + + * Time.new now accepts optional `in:` keyword argument for the + timezone, as well as `Time.at` and `Time.now`, so that is now + you can omit minor arguments to `Time.new`. [[Feature #17485]] + + ```ruby + Time.new(2021, 12, 25, in: "+07:00") + #=> 2021-12-25 00:00:00 +0700 + ``` + + At the same time, time component strings are converted to + integers more strictly now. + + ```ruby + Time.new(2021, 12, 25, "+07:30") + #=> invalid value for Integer(): "+07:30" (ArgumentError) + ``` + + Ruby 3.0 or earlier returned probably unexpected result + `2021-12-25 07:00:00`, not `2021-12-25 07:30:00` nor + `2021-12-25 00:00:00 +07:30`. + + * Time#strftime supports RFC 3339 UTC for unknown offset local + time, `-0000`, as `%-z`. [[Feature #17544]] + +* TracePoint + + * TracePoint.allow_reentry is added to allow reenter while TracePoint + callback. + [[Feature #15912]] + +* $LOAD_PATH + + * $LOAD_PATH.resolve_feature_path does not raise. [[Feature #16043]] + +* Fiber Scheduler + + * Add support for `Addrinfo.getaddrinfo` using `address_resolve` hook. + [[Feature #17370]] + + * Introduce non-blocking `Timeout.timeout` using `timeout_after` hook. + [[Feature #17470]] + + * Introduce new scheduler hooks `io_read` and `io_write` along with a + low level `IO::Buffer` for zero-copy read/write. [[Feature #18020]] + + * IO hooks `io_wait`, `io_read`, `io_write`, receive the original IO object + where possible. [[Bug #18003]] + + * Make `Monitor` fiber-safe. [[Bug #17827]] + + * Replace copy coroutine with pthread implementation. [[Feature #18015]] + +* Refinement + + * New class which represents a module created by Module#refine. + `include` and `prepend` are deprecated, and `import_methods` is added + instead. [[Bug #17429]] + +## Stdlib updates + +* The following default gem are updated. + * RubyGems 3.3.3 + * base64 0.1.1 + * benchmark 0.2.0 + * bigdecimal 3.1.1 + * bundler 2.3.3 + * cgi 0.3.1 + * csv 3.2.2 + * date 3.2.2 + * did_you_mean 1.6.1 + * digest 3.1.0 + * drb 2.1.0 + * erb 2.2.3 + * error_highlight 0.3.0 + * etc 1.3.0 + * fcntl 1.0.1 + * fiddle 1.1.0 + * fileutils 1.6.0 + * find 0.1.1 + * io-console 0.5.10 + * io-wait 0.2.1 + * ipaddr 1.2.3 + * irb 1.4.1 + * json 2.6.1 + * logger 1.5.0 + * net-http 0.2.0 + * net-protocol 0.1.2 + * nkf 0.1.1 + * open-uri 0.2.0 + * openssl 3.0.0 + * optparse 0.2.0 + * ostruct 0.5.2 + * pathname 0.2.0 + * pp 0.3.0 + * prettyprint 0.1.1 + * psych 4.0.3 + * racc 1.6.0 + * rdoc 6.4.0 + * readline 0.0.3 + * readline-ext 0.1.4 + * reline 0.3.0 + * resolv 0.2.1 + * rinda 0.1.1 + * ruby2_keywords 0.0.5 + * securerandom 0.1.1 + * set 1.0.2 + * stringio 3.0.1 + * strscan 3.0.1 + * tempfile 0.1.2 + * time 0.2.0 + * timeout 0.2.0 + * tmpdir 0.1.2 + * un 0.2.0 + * uri 0.11.0 + * yaml 0.2.0 + * zlib 2.1.1 +* The following bundled gems are updated. + * minitest 5.15.0 + * power_assert 2.0.1 + * rake 13.0.6 + * test-unit 3.5.3 + * rexml 3.2.5 + * rbs 2.1.0 + * typeprof 0.21.2 +* The following default gems are now bundled gems. + * net-ftp 0.1.3 + * net-imap 0.2.3 + * net-pop 0.1.1 + * net-smtp 0.3.1 + * matrix 0.4.2 + * prime 0.1.2 + * debug 1.4.0 + +* Coverage measurement now supports suspension. You can use `Coverage.suspend` + to stop the measurement temporarily, and `Coverage.resume` to restart it. + See [[Feature #18176]] in detail. + +* Random::Formatter is moved to random/formatter.rb, so that you can + use `Random#hex`, `Random#base64`, and so on without SecureRandom. + [[Feature #18190]] + +## Compatibility issues + +Note: Excluding feature bug fixes. + +* `rb_io_wait_readable`, `rb_io_wait_writable` and `rb_wait_for_single_fd` are + deprecated in favour of `rb_io_maybe_wait_readable`, + `rb_io_maybe_wait_writable` and `rb_io_maybe_wait` respectively. + `rb_thread_wait_fd` and `rb_thread_fd_writable` are deprecated. [[Bug #18003]] + +## Stdlib compatibility issues + +* `ERB#initialize` warns `safe_level` and later arguments even without -w. + [[Feature #14256]] + +* `lib/debug.rb` is replaced with `debug.gem` + +* `Kernel#pp` in `lib/pp.rb` uses the width of `IO#winsize` by default. + This means that the output width is automatically changed depending on + your terminal size. [[Feature #12913]] + +* Psych 4.0 changes `Psych.load` as `safe_load` by the default. + You may need to use Psych 3.3.2 for migrating to this behavior. + [[Bug #17866]] + +## C API updates + +* Documented. [[GH-4815]] + +* `rb_gc_force_recycle` is deprecated and has been changed to a no-op. + [[Feature #18290]] + +## Implementation improvements + +* Inline cache mechanism is introduced for reading class variables. + [[Feature #17763]] + +* `instance_eval` and `instance_exec` now only allocate a singleton class when + required, avoiding extra objects and improving performance. [[GH-5146]] + +* The performance of `Struct` accessors is improved. [[GH-5131]] + +* `mandatory_only?` builtin special form to improve performance on + builtin methods. [[GH-5112]] + +* Experimental feature Variable Width Allocation in the garbage collector. + This feature is turned off by default and can be enabled by compiling Ruby + with flag `USE_RVARGC=1` set. [[Feature #18045]] [[Feature #18239]] + +## JIT + +* Rename Ruby 3.0's `--jit` to `--mjit`, and alias `--jit` to `--yjit` + on non-Windows x86-64 platforms and to `--mjit` on others. + +### MJIT + +* The default `--mjit-max-cache` is changed from 100 to 10000. + +* JIT-ed code is no longer cancelled when a TracePoint for class events + is enabled. + +* The JIT compiler no longer skips compilation of methods longer than + 1000 instructions. + +* `--mjit-verbose` and `--mjit-warning` output "JIT cancel" when JIT-ed + code is disabled because TracePoint or GC.compact is used. + +### YJIT: New experimental in-process JIT compiler + +New JIT compiler available as an experimental feature. [[Feature #18229]] + +See [this blog post](https://shopify.engineering/yjit-just-in-time-compiler-cruby +) introducing the project. + +* Disabled by default, use `--yjit` command-line option to enable YJIT. + +* Performance improvements on benchmarks based on real-world software, + up to 22% on railsbench, 39% on liquid-render. + +* Fast warm-up times. + +* Limited to Unix-like x86-64 platforms for now. + +## Static analysis + +### RBS + +* Generics type parameters can be bounded ([PR](https://github.com/ruby/rbs/pull/844)). + + ```rbs + # `T` must be compatible with the `_Output` interface. + # `PrettyPrint[String]` is ok, but `PrettyPrint[Integer]` is a type error. + class PrettyPrint[T < _Output] + interface _Output + def <<: (String) -> void + end + + attr_reader output: T + + def initialize: (T output) -> void + end + ``` + +* Type aliases can be generic. ([PR](https://github.com/ruby/rbs/pull/823)) + + ```rbs + # Defines a generic type `list`. + type list[T] = [ T, list[T] ] + | nil + + type str_list = list[String] + type int_list = list[Integer] + ``` + +* [rbs collection](https://github.com/ruby/rbs/blob/master/docs/collection.md) has been introduced to manage gems’ RBSs. + +* Many signatures for built-in and standard libraries have been added/updated. + +* It includes many bug fixes and performance improvements too. + +See the [CHANGELOG.md](https://github.com/ruby/rbs/blob/master/CHANGELOG.md) for more information. + +### TypeProf + +* [Experimental IDE support](https://github.com/ruby/typeprof/blob/master/doc/ide.md) has been implemented. +* Many bug fixes and performance improvements since Ruby 3.0.0. + +## Debugger + +* A new debugger [debug.gem](https://github.com/ruby/debug) is bundled. + debug.gem is a fast debugger implementation, and it provides many features + like remote debugging, colorful REPL, IDE (VSCode) integration, and more. + It replaces `lib/debug.rb` standard library. + +* `rdbg` command is also installed into `bin/` directory to start and control + debugging execution. + +## error_highlight + +A built-in gem called error_highlight has been introduced. +It shows fine-grained error locations in the backtrace. + +Example: `title = json[:article][:title]` + +If `json` is nil, it shows: + +``` +$ ruby test.rb +test.rb:2:in `
': undefined method `[]' for nil:NilClass (NoMethodError) + +title = json[:article][:title] + ^^^^^^^^^^ +``` + +If `json[:article]` returns nil, it shows: + +``` +$ ruby test.rb +test.rb:2:in `
': undefined method `[]' for nil:NilClass (NoMethodError) + +title = json[:article][:title] + ^^^^^^^^ +``` + +This feature is enabled by default. +You can disable it by using a command-line option `--disable-error_highlight`. +See [the repository](https://github.com/ruby/error_highlight) in detail. + +## IRB Autocomplete and Document Display + +The IRB now has an autocomplete feature, where you can just type in the code, and the completion candidates dialog will appear. You can use Tab and Shift+Tab to move up and down. + +If documents are installed when you select a completion candidate, the documentation dialog will appear next to the completion candidates dialog, showing part of the content. You can read the full document by pressing Alt+d. + +## Miscellaneous changes + +* lib/objspace/trace.rb is added, which is a tool for tracing the object + allocation. Just by requiring this file, tracing is started *immediately*. + Just by `Kernel#p`, you can investigate where an object was created. + Note that just requiring this file brings a large performance overhead. + This is only for debugging purposes. Do not use this in production. + [[Feature #17762]] + +* Now exceptions raised in finalizers will be printed to `STDERR`, unless + `$VERBOSE` is `nil`. [[Feature #17798]] + +* `ruby -run -e httpd` displays URLs to access. [[Feature #17847]] + +* Add `ruby -run -e colorize` to colorize Ruby code using + `IRB::Color.colorize_code`. + +[Bug #4443]: https://bugs.ruby-lang.org/issues/4443 +[Feature #6210]: https://bugs.ruby-lang.org/issues/6210 +[Feature #10917]: https://bugs.ruby-lang.org/issues/10917 +[Feature #11256]: https://bugs.ruby-lang.org/issues/11256 +[Feature #11689]: https://bugs.ruby-lang.org/issues/11689 +[Feature #12194]: https://bugs.ruby-lang.org/issues/12194 +[Feature #12495]: https://bugs.ruby-lang.org/issues/12495 +[Feature #12913]: https://bugs.ruby-lang.org/issues/12913 +[Feature #14256]: https://bugs.ruby-lang.org/issues/14256 +[Feature #14579]: https://bugs.ruby-lang.org/issues/14579 +[Feature #15198]: https://bugs.ruby-lang.org/issues/15198 +[Feature #15211]: https://bugs.ruby-lang.org/issues/15211 +[Feature #15912]: https://bugs.ruby-lang.org/issues/15912 +[Feature #16043]: https://bugs.ruby-lang.org/issues/16043 +[Feature #16182]: https://bugs.ruby-lang.org/issues/16182 +[Feature #16806]: https://bugs.ruby-lang.org/issues/16806 +[Feature #17312]: https://bugs.ruby-lang.org/issues/17312 +[Feature #17327]: https://bugs.ruby-lang.org/issues/17327 +[Feature #17370]: https://bugs.ruby-lang.org/issues/17370 +[Feature #17398]: https://bugs.ruby-lang.org/issues/17398 +[Feature #17411]: https://bugs.ruby-lang.org/issues/17411 +[Bug #17423]: https://bugs.ruby-lang.org/issues/17423 +[Bug #17429]: https://bugs.ruby-lang.org/issues/17429 +[Feature #17470]: https://bugs.ruby-lang.org/issues/17470 +[Feature #17479]: https://bugs.ruby-lang.org/issues/17479 +[Feature #17485]: https://bugs.ruby-lang.org/issues/17485 +[Feature #17544]: https://bugs.ruby-lang.org/issues/17544 +[Feature #17592]: https://bugs.ruby-lang.org/issues/17592 +[Feature #17684]: https://bugs.ruby-lang.org/issues/17684 +[Feature #17724]: https://bugs.ruby-lang.org/issues/17724 +[Feature #17744]: https://bugs.ruby-lang.org/issues/17744 +[Feature #17750]: https://bugs.ruby-lang.org/issues/17750 +[Feature #17762]: https://bugs.ruby-lang.org/issues/17762 +[Feature #17763]: https://bugs.ruby-lang.org/issues/17763 +[Feature #17795]: https://bugs.ruby-lang.org/issues/17795 +[Feature #17798]: https://bugs.ruby-lang.org/issues/17798 +[Bug #17827]: https://bugs.ruby-lang.org/issues/17827 +[Feature #17847]: https://bugs.ruby-lang.org/issues/17847 +[Feature #17853]: https://bugs.ruby-lang.org/issues/17853 +[Bug #17866]: https://bugs.ruby-lang.org/issues/17866 +[Bug #18003]: https://bugs.ruby-lang.org/issues/18003 +[Feature #18008]: https://bugs.ruby-lang.org/issues/18008 +[Feature #18015]: https://bugs.ruby-lang.org/issues/18015 +[Feature #18020]: https://bugs.ruby-lang.org/issues/18020 +[Feature #18029]: https://bugs.ruby-lang.org/issues/18029 +[Feature #18045]: https://bugs.ruby-lang.org/issues/18045 +[Feature #18148]: https://bugs.ruby-lang.org/issues/18148 +[Feature #18172]: https://bugs.ruby-lang.org/issues/18172 +[Feature #18176]: https://bugs.ruby-lang.org/issues/18176 +[Feature #18190]: https://bugs.ruby-lang.org/issues/18190 +[Feature #18229]: https://bugs.ruby-lang.org/issues/18229 +[Feature #18239]: https://bugs.ruby-lang.org/issues/18239 +[Feature #18254]: https://bugs.ruby-lang.org/issues/18254 +[Feature #18273]: https://bugs.ruby-lang.org/issues/18273 +[Feature #18290]: https://bugs.ruby-lang.org/issues/18290 + +[GH-1509]: https://github.com/ruby/ruby/pull/1509 +[GH-4815]: https://github.com/ruby/ruby/pull/4815 +[GH-5112]: https://github.com/ruby/ruby/pull/5112 +[GH-5131]: https://github.com/ruby/ruby/pull/5131 +[GH-5146]: https://github.com/ruby/ruby/pull/5146 diff --git a/ruby/README.ja.md b/ruby/README.ja.md index 4e1e6b9d8..bb69c0905 100644 --- a/ruby/README.ja.md +++ b/ruby/README.ja.md @@ -1,10 +1,10 @@ -[![Build Status](https://travis-ci.org/ruby/ruby.svg?branch=master)](https://travis-ci.org/ruby/ruby) -[![Build status](https://ci.appveyor.com/api/projects/status/0sy8rrxut4o0k960/branch/master?svg=true)](https://ci.appveyor.com/project/ruby/ruby/branch/master) -![](https://github.com/ruby/ruby/workflows/Cygwin/badge.svg) -![](https://github.com/ruby/ruby/workflows/macOS/badge.svg) -![](https://github.com/ruby/ruby/workflows/MJIT/badge.svg) -![](https://github.com/ruby/ruby/workflows/Ubuntu/badge.svg) -![](https://github.com/ruby/ruby/workflows/Windows/badge.svg) +[![Actions Status: MinGW](https://github.com/ruby/ruby/workflows/MinGW/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"MinGW") +[![Actions Status: MJIT](https://github.com/ruby/ruby/workflows/MJIT/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"MJIT") +[![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) +[![Cirrus Status](https://api.cirrus-ci.com/github/ruby/ruby.svg)](https://cirrus-ci.com/github/ruby/ruby/master) # Rubyã¨ã¯ @@ -52,11 +52,11 @@ Rubyリãƒã‚¸ãƒˆãƒªã®æœ¬æ¥ã®master㯠https://git.ruby-lang.org/ruby.git ã« ### Subversion -å¤ã„Rubyã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¯æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã§å–å¾—ã§ãã¾ã™ï¼Ž +å¤ã„Rubyã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¯æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã§ã‚‚å–å¾—ã§ãã¾ã™ï¼Ž $ svn co https://svn.ruby-lang.org/repos/ruby/branches/ruby_2_6/ ruby -ä»–ã«é–‹ç™ºä¸­ã®ãƒ–ランãƒã®ä¸€è¦§ã¯æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã§è¦‹ã‚‰ã‚Œã¾ã™ï¼Ž +ä»–ã®ãƒ–ランãƒã®ä¸€è¦§ã¯æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã§è¦‹ã‚‰ã‚Œã¾ã™ï¼Ž $ svn ls https://svn.ruby-lang.org/repos/ruby/branches/ @@ -71,38 +71,33 @@ https://www.ruby-lang.org/ ## メーリングリスト -Rubyã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆãŒã‚ã‚Šã¾ã™ï¼Žå‚加希望ã®æ–¹ã¯ - -mailto:ruby-list-request@ruby-lang.org - -ã¾ã§æœ¬æ–‡ã« +Rubyã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆãŒã‚ã‚Šã¾ã™ï¼Žå‚加希望ã®æ–¹ã¯ [ruby-list-request@ruby-lang.org] ã¾ã§æœ¬æ–‡ã« subscribe ã¨æ›¸ã„ã¦é€ã£ã¦ä¸‹ã•ã„. -Ruby開発者å‘ã‘メーリングリストもã‚ã‚Šã¾ã™ï¼Žã“ã¡ã‚‰ã§ã¯rubyã®ãƒã‚°ï¼Œå°†æ¥ã®ä»•æ§˜æ‹¡å¼µãªã©å®Ÿè£…上ã®å•é¡Œã«ã¤ã„ã¦è­°è«–ã•ã‚Œã¦ã„ã¾ã™ï¼Ž å‚加希望ã®æ–¹ã¯ - -mailto:ruby-dev-request@ruby-lang.org - -ã¾ã§ruby-listã¨åŒæ§˜ã®æ–¹æ³•ã§ãƒ¡ãƒ¼ãƒ«ã—ã¦ãã ã•ã„. +Ruby開発者å‘ã‘メーリングリストもã‚ã‚Šã¾ã™ï¼Žã“ã¡ã‚‰ã§ã¯rubyã®ãƒã‚°ï¼Œå°†æ¥ã®ä»•æ§˜æ‹¡å¼µãªã©å®Ÿè£…上ã®å•é¡Œã«ã¤ã„ã¦è­°è«–ã•ã‚Œã¦ã„ã¾ã™ï¼Ž +å‚加希望ã®æ–¹ã¯ [ruby-dev-request@ruby-lang.org] ã¾ã§ruby-listã¨åŒæ§˜ã®æ–¹æ³•ã§ãƒ¡ãƒ¼ãƒ«ã—ã¦ãã ã•ã„. Ruby拡張モジュールã«ã¤ã„ã¦è©±ã—åˆã†ruby-extメーリングリストã¨æ•°å­¦é–¢ä¿‚ã®è©±é¡Œã«ã¤ã„ã¦è©±ã—åˆã†ruby-mathメーリングリスト㨠英語ã§rubyã«ã¤ã„ã¦è©±ã—åˆã†ruby-talkメーリングリストもã‚ã‚Šã¾ã™ï¼Žå‚加方法ã¯ã©ã‚Œã‚‚åŒã˜ã§ã™ï¼Ž +[ruby-list-request@ruby-lang.org]: mailto:ruby-list-request@ruby-lang.org?subject=Join%20Ruby%20Mailing%20List&body=subscribe +[ruby-dev-request@ruby-lang.org]: mailto:ruby-dev-request@ruby-lang.org?subject=Join%20Ruby%20Mailing%20List&body=subscribe + ## コンパイル・インストール 以下ã®æ‰‹é †ã§è¡Œã£ã¦ãã ã•ã„. -1. ã‚‚ã— `configure` ファイルãŒè¦‹ã¤ã‹ã‚‰ãªã„,もã—ã㯠`configure.ac` よりå¤ã„よã†ãªã‚‰ï¼Œ `autoconf` を実行ã—㦠- æ–°ã—ã `configure` を生æˆã™ã‚‹ +1. (Gitリãƒã‚¸ãƒˆãƒªã‹ã‚‰å–å¾—ã—ãŸã‚½ãƒ¼ã‚¹ã‚’ビルドã™ã‚‹å ´åˆ) `./autogen.sh` を実行ã—ã¦æ–°ã—ã `configure` を生æˆã™ã‚‹ 2. `configure` を実行ã—㦠`Makefile` ãªã©ã‚’生æˆã™ã‚‹ 環境ã«ã‚ˆã£ã¦ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®Cコンパイラ用オプションãŒä»˜ãã¾ã™ï¼Ž `configure` オプション㧠`optflags=..` `warnflags=..` ç­‰ã§ä¸Šæ›¸ãã§ãã¾ã™ï¼Ž -3. (å¿…è¦ãªã‚‰ã°)`defines.h` を編集ã™ã‚‹ +3. (å¿…è¦ãªã‚‰ã°)`include/ruby/defines.h` を編集ã™ã‚‹ 多分,必è¦ç„¡ã„ã¨æ€ã„ã¾ã™ï¼Ž @@ -172,11 +167,14 @@ UNIXã§ã‚れ㰠`configure` ãŒã»ã¨ã‚“ã©ã®å·®ç•°ã‚’å¸åŽã—ã¦ãれる㯠## フィードãƒãƒƒã‚¯ -Rubyã«é–¢ã™ã‚‹è³ªå•ã¯ Ruby-Talk(英語)や Ruby-List(日本語) (https://www.ruby-lang.org/ja/community/mailing-lists) や, -stackoverflow (https://ja.stackoverflow.com/) ãªã©ã®Webサイトã«æŠ•ç¨¿ã—ã¦ãã ã•ã„. +Rubyã«é–¢ã™ã‚‹è³ªå•ã¯ [Ruby-Talk](英語)や [Ruby-List](日本語)や, +[stackoverflow] ãªã©ã®Webサイトã«æŠ•ç¨¿ã—ã¦ãã ã•ã„. ãƒã‚°å ±å‘Šã¯ 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/ ## 著者 diff --git a/ruby/README.md b/ruby/README.md index 1e935095c..9b5a553ff 100644 --- a/ruby/README.md +++ b/ruby/README.md @@ -1,10 +1,10 @@ -[![Build Status](https://travis-ci.org/ruby/ruby.svg?branch=master)](https://travis-ci.org/ruby/ruby) -[![Build status](https://ci.appveyor.com/api/projects/status/0sy8rrxut4o0k960/branch/master?svg=true)](https://ci.appveyor.com/project/ruby/ruby/branch/master) -![](https://github.com/ruby/ruby/workflows/Cygwin/badge.svg) -![](https://github.com/ruby/ruby/workflows/macOS/badge.svg) -![](https://github.com/ruby/ruby/workflows/MJIT/badge.svg) -![](https://github.com/ruby/ruby/workflows/Ubuntu/badge.svg) -![](https://github.com/ruby/ruby/workflows/Windows/badge.svg) +[![Actions Status: MinGW](https://github.com/ruby/ruby/workflows/MinGW/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"MinGW") +[![Actions Status: MJIT](https://github.com/ruby/ruby/workflows/MJIT/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"MJIT") +[![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) +[![Cirrus Status](https://api.cirrus-ci.com/github/ruby/ruby.svg)](https://cirrus-ci.com/github/ruby/ruby/master) # What's Ruby @@ -24,8 +24,8 @@ It is simple, straightforward, and extensible. * 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, Haiku, etc.) cf. - https://github.com/ruby/ruby/blob/master/doc/contributing.rdoc#platform-maintainers + well as Windows, macOS, etc.) cf. + https://github.com/ruby/ruby/blob/master/doc/maintainers.rdoc#label-Platform+Maintainers ## How to get Ruby @@ -51,7 +51,8 @@ if you are a committer. ### Subversion -Stable branches for older Ruby versions can be checked out with the following command: +Stable branches for older Ruby versions can be checked out with also the +following command: $ svn co https://svn.ruby-lang.org/repos/ruby/branches/ruby_2_6/ ruby @@ -71,16 +72,29 @@ send the following phrase: subscribe -in the mail body (not subject) to the address -[ruby-talk-request@ruby-lang.org](mailto:ruby-talk-request@ruby-lang.org?subject=Join%20Ruby%20Mailing%20List&body=subscribe). +in the mail body (not subject) to the address [ruby-talk-request@ruby-lang.org]. + +[ruby-talk-request@ruby-lang.org]: mailto:ruby-talk-request@ruby-lang.org?subject=Join%20Ruby%20Mailing%20List&body=subscribe + +## Requirements to build from repository + +1. GNU or BSD make +2. C99 compiler +3. autoconf 2.67 or higher +4. automake 1.15 or higher +5. bison 2.3 or higher +6. Ruby 2.2 or higher + +When building from a released version, only a C99 compiler and GNU or BSD make +is required. ## How to compile and install 1. If you want to use Microsoft Visual C++ to compile Ruby, read - [win32/README.win32](win32/README.win32) instead of this document. + [win32/README.win32](rdoc-ref:win32/README.win32) instead of this document. -2. If `./configure` does not exist or is older than `configure.ac`, run - `autoconf` to (re)generate configure. +2. Run `./autogen.sh` to generate configure, when you build the source checked + out from the Git repository. 3. Run `./configure`, which will generate `config.h` and `Makefile`. @@ -88,14 +102,15 @@ in the mail body (not subject) to the address environment. Specify `optflags=..` and `warnflags=..` as necessary to override them. -4. Edit `defines.h` if you need. Usually this step will not be needed. +4. Edit `include/ruby/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. +5. Optional: Remove comment mark(`#`) before the module names from `ext/Setup`. - 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`. + This step is only necessary if you want to link modules statically. + + If you don't want to compile dynamic extensions (probably on architectures + which do not allow dynamic loading), remove comment mark from the line + "`#option nodynamic`" in `ext/Setup`. Usually this step will not be needed. @@ -108,12 +123,7 @@ in the mail body (not subject) to the address interpreter works well. If you see the message "`check succeeded`", your Ruby works as it should (hopefully). -8. Optionally, run `make update-gems` and `make extract-gems`. - - If you want to install bundled gems, run `make update-gems` and - `make extract-gems` before running `make install`. - -9. Run '`make install`'. +8. Run '`make install`'. This command will create the following directories and install files into them. @@ -153,21 +163,21 @@ to remove old configuration after installing them in such case. ## Copying -See the file [COPYING](COPYING). +See the file [COPYING](rdoc-ref:COPYING). ## Feedback -Questions about the Ruby language can be asked on the Ruby-Talk mailing list -(https://www.ruby-lang.org/en/community/mailing-lists) or on websites like -(https://stackoverflow.com). +Questions about the Ruby language can be asked on the [Ruby-Talk] mailing list +or on websites like https://stackoverflow.com. Bugs should be reported at https://bugs.ruby-lang.org. Read [HowToReport] for more information. +[Ruby-Talk]: https://www.ruby-lang.org/en/community/mailing-lists [HowToReport]: https://bugs.ruby-lang.org/projects/ruby/wiki/HowToReport ## Contributing -See the file [CONTRIBUTING.md](CONTRIBUTING.md) +See the file [CONTRIBUTING.md](rdoc-ref:CONTRIBUTING) ## The Author diff --git a/ruby/aclocal.m4 b/ruby/aclocal.m4 index ed7d14ef6..e69de29bb 100644 --- a/ruby/aclocal.m4 +++ b/ruby/aclocal.m4 @@ -1,47 +0,0 @@ -# generated automatically by aclocal 1.16.1 -*- Autoconf -*- - -# Copyright (C) 1996-2018 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([tool/m4/_colorize_result_prepare.m4]) -m4_include([tool/m4/ac_msg_result.m4]) -m4_include([tool/m4/colorize_result.m4]) -m4_include([tool/m4/ruby_append_option.m4]) -m4_include([tool/m4/ruby_append_options.m4]) -m4_include([tool/m4/ruby_check_builtin_func.m4]) -m4_include([tool/m4/ruby_check_builtin_setjmp.m4]) -m4_include([tool/m4/ruby_check_printf_prefix.m4]) -m4_include([tool/m4/ruby_check_setjmp.m4]) -m4_include([tool/m4/ruby_check_signedness.m4]) -m4_include([tool/m4/ruby_check_sizeof.m4]) -m4_include([tool/m4/ruby_check_sysconf.m4]) -m4_include([tool/m4/ruby_cppoutfile.m4]) -m4_include([tool/m4/ruby_decl_attribute.m4]) -m4_include([tool/m4/ruby_default_arch.m4]) -m4_include([tool/m4/ruby_define_if.m4]) -m4_include([tool/m4/ruby_defint.m4]) -m4_include([tool/m4/ruby_dtrace_available.m4]) -m4_include([tool/m4/ruby_dtrace_postprocess.m4]) -m4_include([tool/m4/ruby_func_attribute.m4]) -m4_include([tool/m4/ruby_mingw32.m4]) -m4_include([tool/m4/ruby_prepend_option.m4]) -m4_include([tool/m4/ruby_prog_gnu_ld.m4]) -m4_include([tool/m4/ruby_replace_funcs.m4]) -m4_include([tool/m4/ruby_replace_type.m4]) -m4_include([tool/m4/ruby_rm_recursive.m4]) -m4_include([tool/m4/ruby_setjmp_type.m4]) -m4_include([tool/m4/ruby_stack_grow_direction.m4]) -m4_include([tool/m4/ruby_try_cflags.m4]) -m4_include([tool/m4/ruby_try_ldflags.m4]) -m4_include([tool/m4/ruby_type_attribute.m4]) -m4_include([tool/m4/ruby_universal_arch.m4]) -m4_include([tool/m4/ruby_werror_flag.m4]) diff --git a/ruby/addr2line.c b/ruby/addr2line.c index 635194b96..f660be912 100644 --- a/ruby/addr2line.c +++ b/ruby/addr2line.c @@ -13,7 +13,7 @@ #pragma clang diagnostic ignored "-Wgcc-compat" #endif -#include "ruby/config.h" +#include "ruby/internal/config.h" #include "ruby/defines.h" #include "ruby/missing.h" #include "addr2line.h" @@ -25,11 +25,7 @@ #include #endif -#ifdef HAVE_STDBOOL_H -#include -#else -#include "missing/stdbool.h" -#endif +#include "ruby/internal/stdbool.h" #if defined(USE_ELF) || defined(HAVE_MACH_O_LOADER_H) @@ -163,11 +159,12 @@ typedef struct obj_info { struct dwarf_section debug_info; struct dwarf_section debug_line; struct dwarf_section debug_ranges; + struct dwarf_section debug_rnglists; struct dwarf_section debug_str; struct obj_info *next; } obj_info_t; -#define DWARF_SECTION_COUNT 5 +#define DWARF_SECTION_COUNT 6 static struct dwarf_section * obj_dwarf_section_at(obj_info_t *obj, int n) @@ -177,6 +174,7 @@ obj_dwarf_section_at(obj_info_t *obj, int n) &obj->debug_info, &obj->debug_line, &obj->debug_ranges, + &obj->debug_rnglists, &obj->debug_str }; if (n < 0 || DWARF_SECTION_COUNT <= n) { @@ -194,12 +192,12 @@ struct debug_section_definition { 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)++; + unsigned char b = (unsigned char)*(*p)++; if (b < 0x80) { r += (unsigned long)b << s; break; @@ -211,12 +209,12 @@ uleb128(char **p) } static long -sleb128(char **p) +sleb128(const char **p) { long r = 0; int s = 0; for (;;) { - unsigned char b = *(unsigned char *)(*p)++; + unsigned char b = (unsigned char)*(*p)++; if (b < 0x80) { if (b & 0x40) { r -= (0x80 - b) << s; @@ -233,7 +231,7 @@ sleb128(char **p) } static const char * -get_nth_dirname(unsigned long dir, char *p) +get_nth_dirname(unsigned long dir, const char *p) { if (!dir--) { return ""; @@ -251,11 +249,11 @@ get_nth_dirname(unsigned long dir, char *p) } static void -fill_filename(int file, char *include_directories, char *filenames, line_info_t *line, obj_info_t *obj) +fill_filename(int file, const char *include_directories, const char *filenames, line_info_t *line, obj_info_t *obj) { 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; @@ -282,7 +280,7 @@ fill_filename(int file, char *include_directories, char *filenames, line_info_t static void fill_line(int num_traces, void **traces, uintptr_t addr, int file, int line, - char *include_directories, char *filenames, + const char *include_directories, const char *filenames, obj_info_t *obj, line_info_t *lines, int offset) { int i; @@ -376,7 +374,7 @@ parse_debug_line_header(const char **pp, struct LineNumberProgramHeader *header) } static int -parse_debug_line_cu(int num_traces, void **traces, char **debug_line, +parse_debug_line_cu(int num_traces, void **traces, const char **debug_line, obj_info_t *obj, line_info_t *lines, int offset) { const char *p = (const char *)*debug_line; @@ -401,8 +399,8 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line, #define FILL_LINE() \ do { \ fill_line(num_traces, traces, addr, file, line, \ - (char *)header.include_directories, \ - (char *)header.filenames, \ + header.include_directories, \ + header.filenames, \ obj, lines, offset); \ /*basic_block = prologue_end = epilogue_begin = 0;*/ \ } while (0) @@ -415,19 +413,19 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line, FILL_LINE(); break; case DW_LNS_advance_pc: - a = uleb128((char **)&p); + a = uleb128(&p) * header.minimum_instruction_length; addr += a; break; case DW_LNS_advance_line: { - long a = sleb128((char **)&p); + long a = sleb128(&p); line += a; break; } case DW_LNS_set_file: - file = (unsigned int)uleb128((char **)&p); + file = (unsigned int)uleb128(&p); break; case DW_LNS_set_column: - /*column = (unsigned int)*/(void)uleb128((char **)&p); + /*column = (unsigned int)*/(void)uleb128(&p); break; case DW_LNS_negate_stmt: is_stmt = !is_stmt; @@ -441,7 +439,8 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line, addr += a; break; case DW_LNS_fixed_advance_pc: - a = *(unsigned char *)p++; + a = *(uint16_t *)p; + p += sizeof(uint16_t); addr += a; break; case DW_LNS_set_prologue_end: @@ -451,10 +450,10 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line, /* epilogue_begin = 1; */ break; case DW_LNS_set_isa: - /* isa = (unsigned int)*/(void)uleb128((char **)&p); + /* isa = (unsigned int)*/(void)uleb128(&p); break; case 0: - a = *(unsigned char *)p++; + a = uleb128(&p); op = *p++; switch (op) { case DW_LNE_end_sequence: @@ -478,7 +477,7 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line, break; case DW_LNE_set_discriminator: /* TODO:currently ignore */ - uleb128((char **)&p); + uleb128(&p); break; default: kprintf("Unknown extended opcode: %d in %s\n", @@ -501,10 +500,10 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line, static int parse_debug_line(int num_traces, void **traces, - char *debug_line, unsigned long size, + const char *debug_line, unsigned long size, obj_info_t *obj, line_info_t *lines, int offset) { - char *debug_line_end = debug_line + size; + const char *debug_line_end = debug_line + size; while (debug_line < debug_line_end) { if (parse_debug_line_cu(num_traces, traces, &debug_line, obj, lines, offset)) return -1; @@ -530,13 +529,25 @@ append_obj(obj_info_t **objp) } #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(const char *debuglink, int num_traces, void **traces, obj_info_t **objp, line_info_t *lines, int offset) { - /* 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"; const size_t global_debug_dir_len = sizeof(global_debug_dir) - 1; char *p; @@ -563,6 +574,37 @@ follow_debuglink(const char *debuglink, int num_traces, void **traces, o2->path = o1->path; fill_lines(num_traces, traces, 0, objp, lines, offset); } + +// 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) +{ + static const char global_debug_dir[] = "/usr/lib/debug/.build-id/"; + 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 + 1 + build_id_size * 2 + 6) 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++ = '/'; + } + strcpy(p, ".debug"); + + append_obj(objp); + o2 = *objp; + o2->base_addr = o1->base_addr; + o2->path = o1->path; + fill_lines(num_traces, traces, 0, objp, lines, offset); +} #endif enum @@ -768,6 +810,18 @@ enum DW_FORM_addrx4 = 0x2c }; +/* 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, @@ -779,21 +833,21 @@ enum { # define ABBREV_TABLE_SIZE 256 typedef struct { obj_info_t *obj; - char *file; - char *current_cu; + const char *file; + const char *current_cu; uint64_t current_low_pc; - char *debug_line_cu_end; - char *debug_line_files; - char *debug_line_directories; - char *p; - char *cu_end; - char *pend; - char *q0; - char *q; + const char *debug_line_cu_end; + 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; - char *abbrev_table[ABBREV_TABLE_SIZE]; + const char *abbrev_table[ABBREV_TABLE_SIZE]; } DebugInfoReader; typedef struct { @@ -804,7 +858,7 @@ typedef struct { typedef struct { union { - char *ptr; + const char *ptr; uint64_t uint64; int64_t int64; } as; @@ -837,39 +891,39 @@ get_uint64(const uint8_t *p) } static uint8_t -read_uint8(char **ptr) +read_uint8(const char **ptr) { - const unsigned char *p = (const unsigned char *)*ptr; - *ptr = (char *)(p + 1); - return *p; + const char *p = *ptr; + *ptr = (p + 1); + return (uint8_t)*p; } static uint16_t -read_uint16(char **ptr) +read_uint16(const char **ptr) { - const unsigned char *p = (const unsigned char *)*ptr; - *ptr = (char *)(p + 2); - return get_uint16(p); + const char *p = *ptr; + *ptr = (p + 2); + return get_uint16((const uint8_t *)p); } static uint32_t -read_uint24(char **ptr) +read_uint24(const char **ptr) { - const unsigned char *p = (const unsigned char *)*ptr; - *ptr = (char *)(p + 3); - return (*p << 16) | get_uint16(p+1); + const char *p = *ptr; + *ptr = (p + 3); + return ((uint8_t)*p << 16) | get_uint16((const uint8_t *)p+1); } static uint32_t -read_uint32(char **ptr) +read_uint32(const char **ptr) { - const unsigned char *p = (const unsigned char *)*ptr; - *ptr = (char *)(p + 4); - return get_uint32(p); + const char *p = *ptr; + *ptr = (p + 4); + return get_uint32((const uint8_t *)p); } static uint64_t -read_uint64(char **ptr) +read_uint64(const char **ptr) { const unsigned char *p = (const unsigned char *)*ptr; *ptr = (char *)(p + 8); @@ -877,7 +931,7 @@ read_uint64(char **ptr) } static uintptr_t -read_uintptr(char **ptr) +read_uintptr(const char **ptr) { const unsigned char *p = (const unsigned char *)*ptr; *ptr = (char *)(p + SIZEOF_VOIDP); @@ -918,13 +972,31 @@ debug_info_reader_init(DebugInfoReader *reader, obj_info_t *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; +} + +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; - char *p = reader->q0; + const char *p = reader->q0; for (;;) { uint64_t abbrev_number = uleb128(&p); if (abbrev_number <= prev) break; @@ -934,12 +1006,7 @@ di_read_debug_abbrev_cu(DebugInfoReader *reader) prev = abbrev_number; uleb128(&p); /* tag */ p++; /* has_children */ - /* skip content */ - for (;;) { - uint64_t at = uleb128(&p); - uint64_t form = uleb128(&p); - if (!at && !form) break; - } + di_skip_die_attributes(&p); } } @@ -975,7 +1042,7 @@ set_int_value(DebugInfoValue *v, int64_t n) } static void -set_cstr_value(DebugInfoValue *v, char *s) +set_cstr_value(DebugInfoValue *v, const char *s) { v->as.ptr = s; v->off = 0; @@ -983,7 +1050,7 @@ set_cstr_value(DebugInfoValue *v, char *s) } static void -set_cstrp_value(DebugInfoValue *v, char *s, uint64_t off) +set_cstrp_value(DebugInfoValue *v, const char *s, uint64_t off) { v->as.ptr = s; v->off = off; @@ -991,7 +1058,7 @@ set_cstrp_value(DebugInfoValue *v, char *s, uint64_t off) } static void -set_data_value(DebugInfoValue *v, char *s) +set_data_value(DebugInfoValue *v, const char *s) { v->as.ptr = s; v->type = VAL_data; @@ -1071,12 +1138,12 @@ debug_info_reader_read_value(DebugInfoReader *reader, uint64_t form, DebugInfoVa set_uint_value(v, read_uleb128(reader)); break; case DW_FORM_ref_addr: - if (reader->address_size == 4) { + if (reader->format == 4) { set_uint_value(v, read_uint32(&reader->p)); - } else if (reader->address_size == 8) { + } else if (reader->format == 8) { set_uint_value(v, read_uint64(&reader->p)); } else { - fprintf(stderr,"unknown address_size:%d", reader->address_size); + fprintf(stderr,"unknown format:%d", reader->format); abort(); } break; @@ -1192,10 +1259,10 @@ debug_info_reader_read_value(DebugInfoReader *reader, uint64_t form, DebugInfoVa } /* find abbrev in current compilation unit */ -static char * +static const char * di_find_abbrev(DebugInfoReader *reader, uint64_t abbrev_number) { - char *p; + const char *p; if (abbrev_number < ABBREV_TABLE_SIZE) { return reader->abbrev_table[abbrev_number]; } @@ -1203,12 +1270,7 @@ di_find_abbrev(DebugInfoReader *reader, uint64_t abbrev_number) /* skip 255th record */ uleb128(&p); /* tag */ p++; /* has_children */ - /* skip content */ - for (;;) { - uint64_t at = uleb128(&p); - uint64_t form = uleb128(&p); - if (!at && !form) break; - } + di_skip_die_attributes(&p); for (uint64_t n = uleb128(&p); abbrev_number != n; n = uleb128(&p)) { if (n == 0) { fprintf(stderr,"%d: Abbrev Number %"PRId64" not found\n",__LINE__, abbrev_number); @@ -1216,12 +1278,7 @@ di_find_abbrev(DebugInfoReader *reader, uint64_t abbrev_number) } uleb128(&p); /* tag */ p++; /* has_children */ - /* skip content */ - for (;;) { - uint64_t at = uleb128(&p); - uint64_t form = uleb128(&p); - if (!at && !form) break; - } + di_skip_die_attributes(&p); } return p; } @@ -1256,10 +1313,10 @@ div_inspect(DebugInfoValue *v) { switch (v->type) { case VAL_uint: - fprintf(stderr,"%d: type:%d size:%zx v:%lx\n",__LINE__,v->type,v->size,v->as.uint64); + fprintf(stderr,"%d: type:%d size:%zx v:%"PRIx64"\n",__LINE__,v->type,v->size,v->as.uint64); break; case VAL_int: - fprintf(stderr,"%d: type:%d size:%zx v:%ld\n",__LINE__,v->type,v->size,(int64_t)v->as.uint64); + fprintf(stderr,"%d: type:%d size:%zx v:%"PRId64"\n",__LINE__,v->type,v->size,(int64_t)v->as.uint64); break; case VAL_cstr: fprintf(stderr,"%d: type:%d size:%zx v:'%s'\n",__LINE__,v->type,v->size,v->as.ptr); @@ -1349,6 +1406,21 @@ ranges_set(ranges_t *ptr, DebugInfoValue *v) } } +static uint64_t +read_dw_form_addr(DebugInfoReader *reader, const char **ptr) +{ + const char *p = *ptr; + *ptr = p + reader->address_size; + if (reader->address_size == 4) { + return read_uint32(&p); + } else if (reader->address_size == 8) { + return read_uint64(&p); + } else { + fprintf(stderr,"unknown address_size:%d", reader->address_size); + abort(); + } +} + static uintptr_t ranges_include(DebugInfoReader *reader, ranges_t *ptr, uint64_t addr) { @@ -1362,8 +1434,53 @@ ranges_include(DebugInfoReader *reader, ranges_t *ptr, uint64_t addr) } else if (ptr->ranges_set) { /* TODO: support base address selection entry */ - char *p = reader->obj->debug_ranges.ptr + ptr->ranges; + const char *p; uint64_t base = ptr->low_pc_set ? ptr->low_pc : reader->current_low_pc; + bool base_valid = true; + if (reader->obj->debug_rnglists.ptr) { + p = reader->obj->debug_rnglists.ptr + 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); + base_valid = true; + break; + case DW_RLE_start_end: + from = (uintptr_t)read_dw_form_addr(reader, &p); + to = (uintptr_t)read_dw_form_addr(reader, &p); + break; + case DW_RLE_start_length: + from = (uintptr_t)read_dw_form_addr(reader, &p); + to = from + uleb128(&p); + break; + } + if (from <= addr && addr < to) { + return from; + } + } + return false; + } + p = reader->obj->debug_ranges.ptr + ptr->ranges; for (;;) { uintptr_t from = read_uintptr(&p); uintptr_t to = read_uintptr(&p); @@ -1373,7 +1490,7 @@ ranges_include(DebugInfoReader *reader, ranges_t *ptr, uint64_t addr) base = to; } else if (base + from <= addr && addr < base + to) { - return from; + return (uintptr_t)base + from; } } } @@ -1479,14 +1596,31 @@ di_read_cu(DebugInfoReader *reader) } static void -read_abstract_origin(DebugInfoReader *reader, uint64_t abstract_origin, line_info_t *line) +read_abstract_origin(DebugInfoReader *reader, uint64_t form, uint64_t abstract_origin, line_info_t *line) { - char *p = reader->p; - char *q = reader->q; + const char *p = reader->p; + const char *q = reader->q; int level = reader->level; DIE die; - reader->p = reader->current_cu + abstract_origin; + 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)) goto finish; /* enumerate abbrev */ @@ -1551,7 +1685,7 @@ debug_info_read(DebugInfoReader *reader, int num_traces, void **traces, /* 1 or 3 */ break; /* goto skip_die; */ case DW_AT_abstract_origin: - read_abstract_origin(reader, v.as.uint64, &line); + read_abstract_origin(reader, v.form, v.as.uint64, &line); break; /* goto skip_die; */ } } @@ -1585,6 +1719,7 @@ debug_info_read(DebugInfoReader *reader, int num_traces, void **traces, 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; @@ -1605,6 +1740,7 @@ uncompress_debug_section(ElfW(Shdr) *shdr, char *file, char **ptr) fail: free(*ptr); + *ptr = NULL; #endif return 0; } @@ -1619,6 +1755,7 @@ fill_lines(int num_traces, void **traces, int check_debuglink, ElfW(Ehdr) *ehdr; ElfW(Shdr) *shdr, *shstr_shdr; ElfW(Shdr) *gnu_debuglink_shdr = NULL; + ElfW(Shdr) *note_gnu_build_id = NULL; int fd; off_t filesize; char *file; @@ -1691,6 +1828,11 @@ fill_lines(int num_traces, void **traces, int check_debuglink, /* 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; @@ -1701,6 +1843,7 @@ fill_lines(int num_traces, void **traces, int check_debuglink, ".debug_info", ".debug_line", ".debug_ranges", + ".debug_rnglists", ".debug_str" }; @@ -1806,6 +1949,13 @@ fill_lines(int num_traces, void **traces, int check_debuglink, num_traces, traces, objp, lines, offset); } + 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); + } goto finish; } @@ -1950,6 +2100,7 @@ fill_lines(int num_traces, void **traces, int check_debuglink, "__debug_info", "__debug_line", "__debug_ranges", + "__debug_rnglists", "__debug_str" }; struct LP(segment_command) *scmd = (struct LP(segment_command) *)lcmd; @@ -1987,7 +2138,7 @@ fill_lines(int num_traces, void **traces, int check_debuglink, char *strtab = file + cmd->stroff, *sname = 0; uint32_t j; uintptr_t saddr = 0; - /* kprintf("[%2d]: %x/symtab %p\n", i, cmd->cmd, p); */ + /* 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]; @@ -2039,7 +2190,7 @@ fill_lines(int num_traces, void **traces, int check_debuglink, #endif #define HAVE_MAIN_EXE_PATH -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__DragonFly__) # include #endif /* ssize_t main_exe_path(void) @@ -2048,17 +2199,21 @@ fill_lines(int num_traces, void **traces, int check_debuglink, * and returns strlen(binary_filename). * it is NUL terminated. */ -#if defined(__linux__) +#if defined(__linux__) || defined(__NetBSD__) static ssize_t main_exe_path(void) { -# 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__) +#elif defined(__FreeBSD__) || defined(__DragonFly__) static ssize_t main_exe_path(void) { diff --git a/ruby/addr2line.h b/ruby/addr2line.h index 4f6cf179e..f09b66580 100644 --- a/ruby/addr2line.h +++ b/ruby/addr2line.h @@ -1,3 +1,5 @@ +#ifndef RUBY_ADDR2LINE_H +#define RUBY_ADDR2LINE_H /********************************************************************** addr2line.h - @@ -8,9 +10,6 @@ **********************************************************************/ -#ifndef RUBY_ADDR2LINE_H -#define RUBY_ADDR2LINE_H - #if (defined(USE_ELF) || defined(HAVE_MACH_O_LOADER_H)) void diff --git a/ruby/appveyor.yml b/ruby/appveyor.yml deleted file mode 100644 index 7909de9e6..000000000 --- a/ruby/appveyor.yml +++ /dev/null @@ -1,94 +0,0 @@ ---- -version: '{build}' -shallow_clone: true -platform: - - x64 -environment: - ruby_version: "24-%Platform%" - zlib_version: "1.2.11" - matrix: - - build: vs - vs: 120 - ssl: OpenSSL - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 - GEMS_FOR_TEST: "" - - build: vs - vs: 140 - ssl: OpenSSL-v111 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - GEMS_FOR_TEST: "" - RELINE_TEST_ENCODING: "Windows-31J" - UPDATE_UNICODE: "UNICODE_FILES=. UNICODE_PROPERTY_FILES=. UNICODE_AUXILIARY_FILES=. UNICODE_EMOJI_FILES=." -for: -- - matrix: - only: - - build: vs - install: - - ver - - chcp - - SET BITS=%Platform:x86=32% - - SET BITS=%BITS:x=% - - SET OPENSSL_DIR=C:\%ssl%-Win%BITS% - - CALL SET vcvars=%%^VS%VS%COMNTOOLS^%%..\..\VC\vcvarsall.bat - - SET vcvars - - '"%vcvars%" %Platform:x64=amd64%' - - SET ruby_path=C:\Ruby%ruby_version:-x86=% - - SET PATH=\usr\local\bin;%ruby_path%\bin;%PATH%;C:\msys64\mingw64\bin;C:\msys64\usr\bin - - ruby --version - - 'cl' - - echo> Makefile srcdir=. - - echo>> Makefile MSC_VER=0 - - echo>> Makefile RT=none - - echo>> Makefile RT_VER=0 - - echo>> Makefile BUILTIN_ENCOBJS=nul - - type win32\Makefile.sub >> Makefile - - nmake %mflags% touch-unicode-files - - nmake %mflags% %UPDATE_UNICODE% up incs - - del Makefile - - mkdir \usr\local\bin - - mkdir \usr\local\include - - mkdir \usr\local\lib - - curl -fsSL -o zlib%zlib_version:.=%.zip --retry 10 https://zlib.net/zlib%zlib_version:.=%.zip - - 7z x -o%APPVEYOR_BUILD_FOLDER%\ext\zlib zlib%zlib_version:.=%.zip - - for %%I in (%OPENSSL_DIR%\*.dll) do mklink /h \usr\local\bin\%%~nxI %%I - - attrib +r /s /d - - mkdir %Platform%-mswin_%vs% - build_script: - - cd %APPVEYOR_BUILD_FOLDER% - - cd %Platform%-mswin_%vs% - - ..\win32\configure.bat --without-ext=+,dbm,gdbm,readline --with-opt-dir=/usr/local --with-openssl-dir=%OPENSSL_DIR:\=/% - - nmake -l - - nmake install-nodoc - - \usr\bin\ruby -v -e "p :locale => Encoding.find('locale'), :filesystem => Encoding.find('filesystem')" - - if not "%GEMS_FOR_TEST%" == "" \usr\bin\gem install --no-document %GEMS_FOR_TEST% - - \usr\bin\ruby -ropenssl -e "puts 'Build ' + OpenSSL::OPENSSL_VERSION, 'Runtime ' + OpenSSL::OPENSSL_LIBRARY_VERSION" - test_script: - - set /a JOBS=%NUMBER_OF_PROCESSORS% - - nmake -l "TESTOPTS=-v -q" btest - - nmake -l "TESTOPTS=-v -q" test-basic - - nmake -l "TESTOPTS=-v --timeout-scale=3.0 --excludes=../test/excludes/_appveyor -j%JOBS% --exclude readline --exclude win32ole --exclude test_bignum --exclude test_syntax --exclude test_open-uri --exclude test_bundled_ca" test-all - # separately execute tests without -j which may crash worker with -j. - - nmake -l "TESTOPTS=-v --timeout-scale=3.0 --excludes=../test/excludes/_appveyor" test-all TESTS="../test/win32ole ../test/ruby/test_bignum.rb ../test/ruby/test_syntax.rb ../test/open-uri/test_open-uri.rb ../test/rubygems/test_bundled_ca.rb" - - nmake -l test-spec MSPECOPT=-fs # not using `-j` because sometimes `mspec -j` silently dies on Windows -notifications: - # Using "Webhook" with templated body to skip notification on Pull Request - - provider: Webhook - method: POST - url: - secure: iMINHMS0nZabaDsxN9omRDsekxzVvAAzEq5ev7lN6vb+gUETT+rbDKLGxBxBpEpxlnPlLdzroIJ+DTKlwfJA8VkGawTn9EXNsucH0OkSf2M= # AppVeyor CI - body: >- - {{^isPullRequest}} - { - "attachments": [ - { - "text": "Build <{{buildUrl}}|#{{buildVersion}}> (<{{commitUrl}}|{{commitId}}>) of {{repositoryName}}@{{branch}} by {{commitAuthor}} {{status}}", - "color": "{{#passed}}good{{/passed}}{{#failed}}danger{{/failed}}" - } - ], - "channel": "#alerts" - } - {{/isPullRequest}} - on_build_success: false - on_build_failure: true - on_build_status_changed: true diff --git a/ruby/array.c b/ruby/array.c index 28bd8c866..8becdbbc9 100644 --- a/ruby/array.c +++ b/ruby/array.c @@ -10,16 +10,29 @@ Copyright (C) 2000 Information-technology Promotion Agency, Japan **********************************************************************/ + +#include "debug_counter.h" +#include "id.h" +#include "internal.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 "ruby/encoding.h" -#include "ruby/util.h" #include "ruby/st.h" -#include "probes.h" -#include "id.h" -#include "debug_counter.h" +#include "ruby/util.h" #include "transient_heap.h" -#include "internal.h" +#include "builtin.h" #if !ARRAY_DEBUG +# undef NDEBUG # define NDEBUG #endif #include "ruby_assert.h" @@ -33,12 +46,14 @@ VALUE rb_cArray; #define ARY_MAX_SIZE (LONG_MAX / (int)sizeof(VALUE)) #define SMALL_ARRAY_LEN 16 +RBIMPL_ATTR_MAYBE_UNUSED() static int should_be_T_ARRAY(VALUE ary) { return RB_TYPE_P(ary, T_ARRAY); } +RBIMPL_ATTR_MAYBE_UNUSED() static int should_not_be_shared_and_embedded(VALUE ary) { @@ -204,9 +219,11 @@ ary_verify_(VALUE ary, const char *file, int line) #endif } +#if USE_TRANSIENT_HEAP if (RARRAY_TRANSIENT_P(ary)) { assert(rb_transient_heap_managed_ptr_p(RARRAY_CONST_PTR_TRANSIENT(ary))); } +#endif rb_transient_heap_verify(); @@ -337,14 +354,16 @@ ary_heap_free(VALUE ary) } } -static void +static size_t ary_heap_realloc(VALUE ary, size_t new_capa) { + size_t alloc_capa = new_capa; size_t old_capa = ARY_HEAP_CAPA(ary); if (RARRAY_TRANSIENT_P(ary)) { if (new_capa <= old_capa) { /* do nothing */ + alloc_capa = old_capa; } else { VALUE *new_ptr = rb_transient_heap_alloc(ary, sizeof(VALUE) * new_capa); @@ -362,6 +381,8 @@ ary_heap_realloc(VALUE ary, size_t new_capa) SIZED_REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, new_capa, old_capa); } ary_verify(ary); + + return alloc_capa; } #if USE_TRANSIENT_HEAP @@ -426,6 +447,7 @@ ary_resize_capa(VALUE ary, long capacity) assert(!ARY_SHARED_P(ary)); if (capacity > RARRAY_EMBED_LEN_MAX) { + size_t new_capa = capacity; if (ARY_EMBED_P(ary)) { long len = ARY_EMBED_LEN(ary); VALUE *ptr = ary_heap_alloc(ary, capacity); @@ -436,9 +458,9 @@ ary_resize_capa(VALUE ary, long capacity) ARY_SET_HEAP_LEN(ary, len); } else { - ary_heap_realloc(ary, capacity); + new_capa = ary_heap_realloc(ary, capacity); } - ARY_SET_CAPA(ary, capacity); + ARY_SET_CAPA(ary, new_capa); } else { if (!ARY_EMBED_P(ary)) { @@ -492,13 +514,9 @@ rb_ary_decrement_share(VALUE shared_root) { if (shared_root) { long num = ARY_SHARED_ROOT_REFCNT(shared_root) - 1; - if (num == 0) { - rb_ary_free(shared_root); - rb_gc_force_recycle(shared_root); - } - else if (num > 0) { + if (num > 0) { ARY_SET_SHARED_ROOT_REFCNT(shared_root, num); - } + } } } @@ -545,34 +563,33 @@ rb_ary_modify_check(VALUE 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); + long shared_len, len = RARRAY_LEN(ary); VALUE shared_root = ARY_SHARED_ROOT(ary); ary_verify(shared_root); if (len <= RARRAY_EMBED_LEN_MAX) { - const VALUE *ptr = ARY_HEAP_PTR(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); + 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_ROOT_OCCUPIED(shared_root) && len > ((shared_len = RARRAY_LEN(shared_root))>>1)) { long shift = RARRAY_CONST_PTR_TRANSIENT(ary) - RARRAY_CONST_PTR_TRANSIENT(shared_root); - FL_UNSET_SHARED(ary); + FL_UNSET_SHARED(ary); ARY_SET_PTR(ary, RARRAY_CONST_PTR_TRANSIENT(shared_root)); - ARY_SET_CAPA(ary, shared_len); + ARY_SET_CAPA(ary, shared_len); RARRAY_PTR_USE_TRANSIENT(ary, ptr, { - MEMMOVE(ptr, ptr+shift, VALUE, len); - }); + MEMMOVE(ptr, ptr+shift, VALUE, len); + }); FL_SET_EMBED(shared_root); rb_ary_decrement_share(shared_root); - } + } else { VALUE *ptr = ary_heap_alloc(ary, len); MEMCPY(ptr, ARY_HEAP_PTR(ary), VALUE, len); @@ -581,11 +598,18 @@ rb_ary_modify(VALUE ary) ARY_SET_PTR(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 ary_ensure_room_for_push(VALUE ary, long add_len) { @@ -636,12 +660,15 @@ ary_ensure_room_for_push(VALUE ary, long add_len) /* * call-seq: - * ary.freeze -> ary + * array.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+; returns +self+: + * a = [] + * a.frozen? # => false + * a.freeze + * a.frozen? # => true * + * An attempt to modify a frozen \Array raises FrozenError. */ VALUE @@ -764,6 +791,58 @@ rb_ary_new_from_values(long n, const VALUE *elts) return rb_ary_tmp_new_from_values(rb_cArray, n, elts); } +static VALUE +ec_ary_alloc(rb_execution_context_t *ec, VALUE klass) +{ + RB_EC_NEWOBJ_OF(ec, ary, struct RArray, klass, T_ARRAY | RARRAY_EMBED_FLAG | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0)); + /* Created array is: + * FL_SET_EMBED((VALUE)ary); + * ARY_SET_EMBED_LEN((VALUE)ary, 0); + */ + return (VALUE)ary; +} + +static VALUE +ec_ary_new(rb_execution_context_t *ec, VALUE klass, long capa) +{ + VALUE ary,*ptr; + + 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); + + ary = ec_ary_alloc(ec, klass); + + if (capa > RARRAY_EMBED_LEN_MAX) { + ptr = ary_heap_alloc(ary, capa); + FL_UNSET_EMBED(ary); + ARY_SET_PTR(ary, ptr); + ARY_SET_CAPA(ary, capa); + ARY_SET_HEAP_LEN(ary, 0); + } + + return ary; +} + +VALUE +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_tmp_new(long capa) { @@ -854,25 +933,26 @@ ary_make_shared(VALUE ary) long capa = ARY_CAPA(ary), len = RARRAY_LEN(ary); const VALUE *ptr; NEWOBJ_OF(shared, struct RArray, 0, T_ARRAY | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0)); + VALUE vshared = (VALUE)shared; rb_ary_transient_heap_evacuate(ary, TRUE); ptr = ARY_HEAP_PTR(ary); - FL_UNSET_EMBED(shared); - ARY_SET_LEN((VALUE)shared, capa); - ARY_SET_PTR((VALUE)shared, ptr); - ary_mem_clear((VALUE)shared, len, capa - len); - FL_SET_SHARED_ROOT(shared); - ARY_SET_SHARED_ROOT_REFCNT((VALUE)shared, 1); + FL_UNSET_EMBED(vshared); + ARY_SET_LEN(vshared, capa); + ARY_SET_PTR(vshared, ptr); + ary_mem_clear(vshared, len, capa - len); + FL_SET_SHARED_ROOT(vshared); + ARY_SET_SHARED_ROOT_REFCNT(vshared, 1); FL_SET_SHARED(ary); RB_DEBUG_COUNTER_INC(obj_ary_shared_create); - ARY_SET_SHARED(ary, (VALUE)shared); - OBJ_FREEZE(shared); + ARY_SET_SHARED(ary, vshared); + OBJ_FREEZE(vshared); - ary_verify((VALUE)shared); + ary_verify(vshared); ary_verify(ary); - return (VALUE)shared; + return vshared; } } @@ -917,23 +997,24 @@ 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 the +to_ary+ method. Returns - * the converted array or +nil+ if +obj+ cannot be converted. - * This method can be used to check if an argument is an array. + * If +object+ is an \Array object, returns +object+. * - * Array.try_convert([1]) #=> [1] - * Array.try_convert("1") #=> nil + * Otherwise if +object+ responds to :to_ary, + * calls object.to_ary and returns the result. * - * if tmp = Array.try_convert(arg) - * # the argument is an array - * elsif tmp = String.try_convert(arg) - * # the argument is a string - * end + * Returns +nil+ if +object+ does not respond to :to_ary * + * Raises an exception unless object.to_ary returns an \Array object. */ static VALUE @@ -944,58 +1025,46 @@ rb_ary_s_try_convert(VALUE dummy, VALUE ary) /* * call-seq: - * Array.new(size=0, default=nil) - * Array.new(array) - * Array.new(size) {|index| block } - * - * 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+. - * - * The second form creates a copy of the array passed as a parameter (the - * array is generated by calling to_ary on the parameter). - * - * first_array = ["Matz", "Guido"] - * - * second_array = Array.new(first_array) #=> ["Matz", "Guido"] - * - * first_array.equal? second_array #=> false - * - * 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(3) {|index| index ** 2} - * # => [0, 1, 4] - * - * == Common gotchas - * - * When sending the second parameter, the same object will be used as the - * value for all the array elements: - * - * a = Array.new(2, Hash.new) - * # => [{}, {}] - * - * a[0]['cat'] = 'feline' - * a # => [{"cat"=>"feline"}, {"cat"=>"feline"}] - * - * a[1]['cat'] = 'Felix' - * a # => [{"cat"=>"Felix"}, {"cat"=>"Felix"}] - * - * 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"}, {}] - * + * Array.new -> new_empty_array + * Array.new(array) -> new_array + * Array.new(size) -> new_array + * Array.new(size, default_value) -> new_array + * Array.new(size) {|index| ... } -> new_array + * + * Returns a new \Array. + * + * With no block and no arguments, returns a new empty \Array object. + * + * With no block and a single \Array argument +array+, + * returns a new \Array formed from +array+: + * a = Array.new([:foo, 'bar', 2]) + * a.class # => Array + * a # => [:foo, "bar", 2] + * + * With no block and a single \Integer argument +size+, + * returns a new \Array of the given size + * whose elements are all +nil+: + * a = Array.new(3) + * a # => [nil, nil, nil] + * + * With no block and arguments +size+ and +default_value+, + * returns an \Array of the given size; + * each element is that same +default_value+: + * a = Array.new(3, 'x') + * a # => ['x', 'x', 'x'] + * + * With a block and argument +size+, + * returns an \Array of the given size; + * the block is called with each successive integer +index+; + * the element for that +index+ is the return value from the block: + * a = Array.new(3) {|index| "Element #{index}" } + * a # => ["Element 0", "Element 1", "Element 2"] + * + * Raises ArgumentError if +size+ is negative. + * + * With a block and no argument, + * or a single argument +0+, + * ignores the block and returns a new empty \Array. */ static VALUE @@ -1136,10 +1205,56 @@ ary_make_partial(VALUE ary, VALUE klass, long offset, long len) } } +static VALUE +ary_make_partial_step(VALUE ary, VALUE klass, long offset, long len, long step) +{ + assert(offset >= 0); + assert(len >= 0); + assert(offset+len <= RARRAY_LEN(ary)); + assert(step != 0); + + const VALUE *values = RARRAY_CONST_PTR_TRANSIENT(ary); + const long orig_len = len; + + if ((step > 0 && step >= len) || (step < 0 && (step < -len))) { + VALUE result = ary_new(klass, 1); + VALUE *ptr = (VALUE *)ARY_EMBED_PTR(result); + RB_OBJ_WRITE(result, ptr, values[offset]); + ARY_SET_EMBED_LEN(result, 1); + return result; + } + + long ustep = (step < 0) ? -step : step; + len = (len + ustep - 1) / ustep; + + long i; + long j = offset + ((step > 0) ? 0 : (orig_len - 1)); + VALUE result = ary_new(klass, len); + if (len <= RARRAY_EMBED_LEN_MAX) { + VALUE *ptr = (VALUE *)ARY_EMBED_PTR(result); + for (i = 0; i < len; ++i) { + RB_OBJ_WRITE(result, ptr+i, values[j]); + j += step; + } + ARY_SET_EMBED_LEN(result, len); + } + else { + RARRAY_PTR_USE_TRANSIENT(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 @@ -1177,18 +1292,16 @@ ary_take_first_or_last(int argc, const VALUE *argv, VALUE ary, enum ary_take_pos /* * call-seq: - * ary << obj -> ary - * - * 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. + * array << object -> self * - * a = [ 1, 2 ] - * a << "c" << "d" << [ 3, 4 ] - * #=> [ 1, 2, "c", "d", [ 3, 4 ] ] - * a - * #=> [ 1, 2, "c", "d", [ 3, 4 ] ] + * Appends +object+ to +self+; returns +self+: + * a = [:foo, 'bar', 2] + * a << :baz # => [:foo, "bar", 2, :baz] * + * Appends +object+ as one element, even if it is another \Array: + * a = [:foo, 'bar', 2] + * a1 = a << [3, 4] + * a1 # => [:foo, "bar", 2, [3, 4]] */ VALUE @@ -1216,19 +1329,22 @@ rb_ary_cat(VALUE ary, const VALUE *argv, long len) /* * call-seq: - * ary.push(obj, ...) -> ary - * ary.append(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] + * array.push(*objects) -> self + * + * Appends trailing elements. + * + * Appends each argument in +objects+ to +self+; returns +self+: + * a = [:foo, 'bar', 2] + * a.push(:baz, :bat) # => [:foo, "bar", 2, :baz, :bat] + * + * Appends each argument as one element, even if it is another \Array: + * a = [:foo, 'bar', 2] + * a1 = a.push([:baz, :bat], [:bam, :bad]) + * a1 # => [:foo, "bar", 2, [:baz, :bat], [:bam, :bad]] + * + * Array#append is an alias for \Array#push. + * + * Related: #pop, #shift, #unshift. */ static VALUE @@ -1258,20 +1374,30 @@ rb_ary_pop(VALUE ary) /* * call-seq: - * ary.pop -> obj or nil - * ary.pop(n) -> new_ary + * array.pop -> object or nil + * array.pop(n) -> new_array + * + * Removes and returns trailing elements. + * + * When no argument is given and +self+ is not empty, + * removes and returns the last element: + * a = [:foo, 'bar', 2] + * a.pop # => 2 + * a # => [:foo, "bar"] + * + * Returns +nil+ if the array is empty. * - * Removes the last element from +self+ and returns it, or - * +nil+ if the array is empty. + * When a non-negative \Integer argument +n+ is given and is in range, + * removes and returns the last +n+ elements in a new \Array: + * a = [:foo, 'bar', 2] + * a.pop(2) # => ["bar", 2] * - * If a number +n+ is given, returns an array of the last +n+ elements - * (or less) just like array.slice!(-n, n) does. See also - * Array#push for the opposite effect. + * If +n+ is positive and out of range, + * removes and returns all elements: + * a = [:foo, 'bar', 2] + * a.pop(50) # => [:foo, "bar", 2] * - * a = [ "a", "b", "c", "d" ] - * a.pop #=> "d" - * a.pop(2) #=> ["b", "c"] - * a #=> ["a"] + * Related: #push, #shift, #unshift. */ static VALUE @@ -1326,25 +1452,32 @@ rb_ary_shift(VALUE ary) /* * call-seq: - * ary.shift -> obj or nil - * ary.shift(n) -> new_ary + * array.shift -> object or nil + * array.shift(n) -> new_array * - * Removes the first element of +self+ and returns it (shifting all - * other elements down by one). Returns +nil+ if the array - * is empty. + * Removes and returns leading elements. * - * If a number +n+ is given, returns an array of the first +n+ elements - * (or less) just like array.slice!(0, n) does. With +ary+ - * containing only the remainder elements, not including what was shifted to - * +new_ary+. See also Array#unshift for the opposite effect. + * When no argument is given, removes and returns the first element: + * a = [:foo, 'bar', 2] + * a.shift # => :foo + * a # => ['bar', 2] * - * args = [ "-m", "-q", "filename" ] - * args.shift #=> "-m" - * args #=> ["-q", "filename"] + * Returns +nil+ if +self+ is empty. * - * args = [ "-m", "-q", "filename" ] - * args.shift(2) #=> ["-m", "-q"] - * args #=> ["filename"] + * When positive \Integer argument +n+ is given, removes the first +n+ elements; + * returns those elements in a new \Array: + * a = [:foo, 'bar', 2] + * a.shift(2) # => [:foo, 'bar'] + * a # => [2] + * + * If +n+ is as large as or larger than self.length, + * removes all elements; returns those elements in a new \Array: + * a = [:foo, 'bar', 2] + * a.shift(3) # => [:foo, 'bar', 2] + * + * If +n+ is zero, returns a new empty \Array; +self+ is unmodified. + * + * Related: #push, #pop, #unshift. */ static VALUE @@ -1365,59 +1498,75 @@ rb_ary_shift_m(int argc, VALUE *argv, VALUE ary) return result; } -MJIT_FUNC_EXPORTED VALUE -rb_ary_behead(VALUE ary, long n) +static VALUE +behead_shared(VALUE ary, long n) { - if (n<=0) return ary; + assert(ARY_SHARED_P(ary)); + rb_ary_modify_check(ary); + 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 ary; +} +static VALUE +behead_transient(VALUE ary, long n) +{ rb_ary_modify_check(ary); - if (ARY_SHARED_P(ary)) { - if (ARY_SHARED_ROOT_OCCUPIED(ARY_SHARED_ROOT(ary))) { - setup_occupied_shared: - ary_mem_clear(ary, 0, n); - } - ARY_INCREASE_PTR(ary, n); + RARRAY_PTR_USE_TRANSIENT(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; +} + +MJIT_FUNC_EXPORTED VALUE +rb_ary_behead(VALUE ary, long n) +{ + if (n <= 0) { + return ary; + } + else if (ARY_SHARED_P(ary)) { + return behead_shared(ary, n); + } + else if (RARRAY_LEN(ary) >= ARY_DEFAULT_SIZE) { + ary_make_shared(ary); + return behead_shared(ary, n); } else { - if (RARRAY_LEN(ary) < ARY_DEFAULT_SIZE) { - RARRAY_PTR_USE_TRANSIENT(ary, ptr, { - MEMMOVE(ptr, ptr+n, VALUE, RARRAY_LEN(ary)-n); - }); /* WB: no new reference */ - } - else { - ary_make_shared(ary); - goto setup_occupied_shared; - } + return behead_transient(ary, n); } - ARY_INCREASE_LEN(ary, -n); +} + +static VALUE +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); + assert(ARY_SHARED_ROOT_OCCUPIED(ARY_SHARED_ROOT(ary))); ary_verify(ary); - return ary; + return ARY_SHARED_ROOT(ary); } static VALUE -ary_ensure_room_for_unshift(VALUE ary, int argc) +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_root = ARY_SHARED_ROOT(ary); - capa = RARRAY_LEN(shared_root); - if (ARY_SHARED_ROOT_OCCUPIED(shared_root) && capa > new_len) { - rb_ary_modify_check(ary); - head = RARRAY_CONST_PTR_TRANSIENT(ary); - sharedp = RARRAY_CONST_PTR_TRANSIENT(shared_root); - goto makeroom_if_need; - } - } - rb_ary_modify(ary); capa = ARY_CAPA(ary); if (capa - (capa >> 6) <= new_len) { @@ -1433,21 +1582,7 @@ ary_ensure_room_for_unshift(VALUE ary, int argc) ary_make_shared(ary); head = sharedp = RARRAY_CONST_PTR_TRANSIENT(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_ROOT_OCCUPIED(ARY_SHARED_ROOT(ary))); - - ary_verify(ary); - return ARY_SHARED_ROOT(ary); + return make_room_for_unshift(ary, head, (void *)sharedp, argc, capa, len); } else { /* sliding items */ @@ -1460,17 +1595,49 @@ ary_ensure_room_for_unshift(VALUE ary, int argc) } } +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 { + VALUE shared_root = ARY_SHARED_ROOT(ary); + long capa = RARRAY_LEN(shared_root); + + 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_TRANSIENT(ary); + void *sharedp = (void *)RARRAY_CONST_PTR_TRANSIENT(shared_root); + + rb_ary_modify_check(ary); + return make_room_for_unshift(ary, head, sharedp, argc, capa, len); + } + } +} + /* * call-seq: - * ary.unshift(obj, ...) -> ary - * ary.prepend(obj, ...) -> ary + * array.unshift(*objects) -> self + * + * Prepends the given +objects+ to +self+: + * a = [:foo, 'bar', 2] + * a.unshift(:bam, :bat) # => [:bam, :bat, :foo, "bar", 2] * - * Prepends objects to the front of +self+, moving other elements upwards. - * See also Array#shift for the opposite effect. + * Array#prepend is an alias for Array#unshift. * - * a = [ "b", "c", "d" ] - * a.unshift("a") #=> ["a", "b", "c", "d"] - * a.unshift(1, 2) #=> [ 1, 2, "a", "b", "c", "d"] + * Related: #push, #pop, #shift. */ static VALUE @@ -1515,7 +1682,7 @@ rb_ary_entry(VALUE ary, long 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); @@ -1526,48 +1693,116 @@ rb_ary_subseq(VALUE ary, long beg, long len) if (alen < len || alen < beg + len) { 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] #=> [] - * + * array[index] -> object or nil + * array[start, length] -> object or nil + * array[range] -> object or nil + * array[aseq] -> object or nil + * array.slice(index) -> object or nil + * array.slice(start, length) -> object or nil + * array.slice(range) -> object or nil + * array.slice(aseq) -> object or nil + * + * Returns elements from +self+; does not modify +self+. + * + * When a single \Integer argument +index+ is given, returns the element at offset +index+: + * a = [:foo, 'bar', 2] + * a[0] # => :foo + * a[2] # => 2 + * a # => [:foo, "bar", 2] + * + * If +index+ is negative, counts relative to 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 +start+ and +length+ are given, + * returns a new \Array of size +length+ containing successive elements beginning at offset +start+: + * a = [:foo, 'bar', 2] + * a[0, 2] # => [:foo, "bar"] + * a[1, 2] # => ["bar", 2] + * + * If start + length is greater than self.length, + * returns all elements from offset +start+ to the end: + * a = [:foo, 'bar', 2] + * a[0, 4] # => [:foo, "bar", 2] + * a[1, 3] # => ["bar", 2] + * a[2, 2] # => [2] + * + * If start == self.size and length >= 0, + * returns a new empty \Array. + * + * If +length+ is negative, returns +nil+. + * + * When a single \Range argument +range+ is given, + * treats range.min as +start+ above + * and range.size as +length+ above: + * a = [:foo, 'bar', 2] + * a[0..1] # => [:foo, "bar"] + * a[1..2] # => ["bar", 2] + * + * Special case: If range.start == a.size, returns a new empty \Array. + * + * If range.end 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 range.start 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 range.start 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] + * + * Array#slice is an alias for Array#[]. */ VALUE @@ -1580,7 +1815,7 @@ rb_ary_aref(int argc, const VALUE *argv, VALUE ary) return rb_ary_aref1(ary, argv[0]); } -VALUE +static VALUE rb_ary_aref2(VALUE ary, VALUE b, VALUE e) { long beg = NUM2LONG(b); @@ -1594,35 +1829,33 @@ rb_ary_aref2(VALUE ary, VALUE b, VALUE e) MJIT_FUNC_EXPORTED VALUE rb_ary_aref1(VALUE ary, VALUE arg) { - long beg, len; + long beg, len, step; /* special case - speeding up */ if (FIXNUM_P(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 + * array.at(index) -> object * - * 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#[]. - * - * a = [ "a", "b", "c", "d", "e" ] - * a.at(0) #=> "a" - * a.at(-1) #=> "e" + * Returns the element at \Integer offset +index+; does not modify +self+. + * a = [:foo, 'bar', 2] + * a.at(0) # => :foo + * a.at(2) # => 2 */ VALUE @@ -1633,19 +1866,33 @@ rb_ary_at(VALUE ary, VALUE pos) /* * call-seq: - * ary.first -> obj or nil - * ary.first(n) -> new_ary + * array.first -> object or nil + * array.first(n) -> new_array + * + * Returns elements from +self+; does not modify +self+. + * + * When no argument is given, returns the first element: + * a = [:foo, 'bar', 2] + * a.first # => :foo + * a # => [:foo, "bar", 2] + * + * If +self+ is empty, returns +nil+. * - * 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. + * When non-negative \Integer argument +n+ is given, + * returns the first +n+ elements in a new \Array: + * a = [:foo, 'bar', 2] + * a.first(2) # => [:foo, "bar"] * - * a = [ "q", "r", "s", "t" ] - * a.first #=> "q" - * a.first(2) #=> ["q", "r"] + * If n >= array.size, returns all elements: + * a = [:foo, 'bar', 2] + * a.first(50) # => [:foo, "bar", 2] + * + * If n == 0 returns an new empty \Array: + * a = [:foo, 'bar', 2] + * a.first(0) # [] + * + * Related: #last. */ - static VALUE rb_ary_first(int argc, VALUE *argv, VALUE ary) { @@ -1660,17 +1907,32 @@ rb_ary_first(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary.last -> obj or nil - * ary.last(n) -> new_ary + * array.last -> object or nil + * array.last(n) -> new_array + * + * Returns elements from +self+; +self+ is not modified. * - * Returns the last element(s) of +self+. If the array is empty, - * the first form returns +nil+. + * When no argument is given, returns the last element: + * a = [:foo, 'bar', 2] + * a.last # => 2 + * a # => [:foo, "bar", 2] * - * See also Array#first for the opposite effect. + * If +self+ is empty, returns +nil+. * - * a = [ "w", "x", "y", "z" ] - * a.last #=> "z" - * a.last(2) #=> ["y", "z"] + * When non-negative \Innteger argument +n+ is given, + * returns the last +n+ elements in a new \Array: + * a = [:foo, 'bar', 2] + * a.last(2) # => ["bar", 2] + * + * If n >= array.size, returns all elements: + * a = [:foo, 'bar', 2] + * a.last(50) # => [:foo, "bar", 2] + * + * If n == 0, returns an new empty \Array: + * a = [:foo, 'bar', 2] + * a.last(0) # [] + * + * Related: #first. */ VALUE @@ -1688,26 +1950,35 @@ rb_ary_last(int argc, const VALUE *argv, VALUE ary) /* * 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" + * array.fetch(index) -> element + * array.fetch(index, default_value) -> element + * array.fetch(index) {|index| ... } -> element + * + * Returns the element at offset +index+. + * + * With the single \Integer argument +index+, + * returns the element at offset +index+: + * a = [:foo, 'bar', 2] + * a.fetch(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+, + * returns the element at offset +index+ if index is in range, + * otherwise returns +default_value+: + * a = [:foo, 'bar', 2] + * a.fetch(1, nil) # => "bar" + * + * 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" */ static VALUE @@ -1740,28 +2011,37 @@ rb_ary_fetch(int argc, VALUE *argv, VALUE ary) /* * 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 + * array.index(object) -> integer or nil + * array.index {|element| ... } -> integer or nil + * array.index -> new_enumerator + * + * Returns the index of a specified element. * - * Returns the _index_ of the first object in +ary+ such that the object is - * == to +obj+. + * When argument +object+ is given but no block, + * returns the index of the first element +element+ + * for which object == element: + * 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. + * When both argument +object+ and a block are given, + * calls the block with each successive element; + * returns the index of the first element for which the block returns a truthy value: + * a = [:foo, 'bar', 2, 'bar'] + * a.index {|element| element == 'bar' } # => 1 * - * An Enumerator is returned if neither a block nor argument is given. + * Returns +nil+ if the block never returns a truthy value. * - * a = [ "a", "b", "c" ] - * a.index("b") #=> 1 - * a.index("z") #=> nil - * a.index {|x| x == "b"} #=> 1 + * When neither an argument nor a block is given, returns a new Enumerator: + * a = [:foo, 'bar', 2] + * e = a.index + * e # => # + * e.each {|element| element == 'bar' } # => 1 + * + * Array#find_index is an alias for Array#index. + * + * Related: #rindex. */ static VALUE @@ -1794,26 +2074,33 @@ rb_ary_index(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary.rindex(obj) -> int or nil - * ary.rindex {|item| block} -> int or nil - * ary.rindex -> Enumerator + * array.rindex(object) -> integer or nil + * array.rindex {|element| ... } -> integer or nil + * array.rindex -> new_enumerator + * + * Returns the index of the last element for which object == element. * - * Returns the _index_ of the last object in +self+ == to +obj+. + * When argument +object+ is given but no block, returns the index of the last such element found: + * a = [:foo, 'bar', 2, 'bar'] + * a.rindex('bar') # => 3 * - * 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. + * Returns +nil+ if no such object found. * - * Returns +nil+ if no match is found. + * When a block is given but no argument, calls the block with each successive element; + * returns the index of the last element for which the block returns a truthy value: + * 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 + * a = [:foo, 'bar', 2, 'bar'] + * e = a.rindex + * e # => # + * e.each {|element| element == 'bar' } # => 3 + * + * Related: #index. */ static VALUE @@ -1943,14 +2230,6 @@ rb_ary_set_len(VALUE ary, long len) 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) { @@ -1981,8 +2260,8 @@ rb_ary_resize(VALUE ary, long len) } else { if (olen > len + ARY_DEFAULT_SIZE) { - ary_heap_realloc(ary, len); - ARY_SET_CAPA(ary, len); + size_t new_capa = ary_heap_realloc(ary, len); + ARY_SET_CAPA(ary, new_capa); } ARY_SET_HEAP_LEN(ary, len); } @@ -1990,88 +2269,175 @@ rb_ary_resize(VALUE ary, long len) 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_TRANSIENT(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"] + * array[index] = object -> object + * array[start, length] = object -> object + * array[range] = object -> object + * + * Assigns elements in +self+; returns the given +object+. + * + * 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 self.length, 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 length - 1 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 ( >= self.size), + * 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 an \Array, + * removes length - 1 elements beginning at offset +start+, + * and assigns +object+ at offset +start+: + * a = [:foo, 'bar', 2] + * a[0..1] = 'foo' # => "foo" + * a # => ["foo", 2] + * + * if range.begin 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 range.begin, + * assigns +object+ at offset range.begin, and ignores +length+: + * a = [:foo, 'bar', 2] + * a[6..50] = 'foo' # => "foo" + * a # => [:foo, "bar", 2, nil, nil, nil, "foo"] + * + * If range.end 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 range.end is negative, assigns +object+ at offset +start+, + * retains range.end.abs -1 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 range.end 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"] */ static VALUE rb_ary_aset(int argc, VALUE *argv, VALUE ary) { long offset, beg, len; - VALUE rpl; + 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]); - goto range; + 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; + 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 */ - range: - rpl = rb_ary_to_ary(argv[argc-1]); - rb_ary_splice(ary, beg, len, RARRAY_CONST_PTR_TRANSIENT(rpl), RARRAY_LEN(rpl)); - RB_GC_GUARD(rpl); - return argv[argc-1]; + 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 - * - * Inserts the given values before the element with the given +index+. + * array.insert(index, *objects) -> self * - * 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. + * Inserts given +objects+ before or after the element at \Integer index +offset+; + * returns +self+. * - * 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"] + * When +index+ is non-negative, inserts all given +objects+ + * before the element at offset +index+: + * a = [:foo, 'bar', 2] + * a.insert(1, :bat, :bam) # => [:foo, :bat, :bam, "bar", 2] + * + * Extends the array if +index+ is beyond the array (index >= self.size): + * a = [:foo, 'bar', 2] + * a.insert(5, :bat, :bam) + * a # => [:foo, "bar", 2, nil, nil, :bat, :bam] + * + * Does nothing if no objects given: + * a = [:foo, 'bar', 2] + * a.insert(1) + * a.insert(50) + * a.insert(-50) + * a # => [:foo, "bar", 2] + * + * When +index+ is negative, inserts all given +objects+ + * _after_ the element at offset index+self.size: + * a = [:foo, 'bar', 2] + * a.insert(-2, :bat, :bam) + * a # => [:foo, "bar", :bat, :bam, 2] */ static VALUE @@ -2109,20 +2475,41 @@ ary_enum_length(VALUE ary, VALUE args, VALUE eobj) /* * call-seq: - * ary.each {|item| block} -> ary - * ary.each -> Enumerator + * array.each {|element| ... } -> self + * array.each -> Enumerator + * + * Iterates over array elements. + * + * When a block given, passes each successive array 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: + * Symbol foo + * String bar + * Integer 2 * - * If no block is given, an Enumerator is returned. + * Allows the array to be modified during iteration: + * a = [:foo, 'bar', 2] + * a.each {|element| puts element; a.clear if element.to_s.start_with?('b') } * - * a = [ "a", "b", "c" ] - * a.each {|x| print x, " -- " } + * Output: + * foo + * bar * - * produces: + * When no block given, returns a new \Enumerator: + * a = [:foo, 'bar', 2] + * e = a.each + * e # => # + * a1 = e.each {|element| puts "#{element.class} #{element}" } * - * a -- b -- c -- + * Output: + * Symbol foo + * String bar + * Integer 2 + * + * Related: #each_index, #reverse_each. */ VALUE @@ -2139,20 +2526,41 @@ rb_ary_each(VALUE ary) /* * call-seq: - * ary.each_index {|index| block} -> ary - * ary.each_index -> Enumerator + * array.each_index {|index| ... } -> self + * array.each_index -> Enumerator + * + * Iterates over array indexes. * - * Same as Array#each, but passes the +index+ of the element instead of the - * element itself. + * When a block given, passes each successive array index to the block; + * returns +self+: + * a = [:foo, 'bar', 2] + * a.each_index {|index| puts "#{index} #{a[index]}" } * - * An Enumerator is returned if no block is given. + * Output: + * 0 foo + * 1 bar + * 2 2 * - * a = [ "a", "b", "c" ] - * a.each_index {|x| print x, " -- " } + * Allows the array to be modified during iteration: + * a = [:foo, 'bar', 2] + * a.each_index {|index| puts index; a.clear if index > 0 } * - * produces: + * Output: + * 0 + * 1 * - * 0 -- 1 -- 2 -- + * When no block given, returns a new \Enumerator: + * a = [:foo, 'bar', 2] + * e = a.each_index + * e # => # + * a1 = e.each {|index| puts "#{index} #{a[index]}"} + * + * Output: + * 0 foo + * 1 bar + * 2 2 + * + * Related: #each, #reverse_each. */ static VALUE @@ -2169,17 +2577,40 @@ rb_ary_each_index(VALUE ary) /* * call-seq: - * ary.reverse_each {|item| block} -> ary - * ary.reverse_each -> Enumerator - * - * Same as Array#each, but traverses +self+ in reverse order. - * - * a = [ "a", "b", "c" ] - * a.reverse_each {|x| print x, " " } - * - * produces: - * - * c b a + * array.reverse_each {|element| ... } -> self + * array.reverse_each -> Enumerator + * + * Iterates backwards over array elements. + * + * When a block given, passes, in reverse order, each element to the block; + * returns +self+: + * a = [:foo, 'bar', 2] + * a.reverse_each {|element| puts "#{element.class} #{element}" } + * + * Output: + * Integer 2 + * String bar + * Symbol foo + * + * Allows the array to be modified during iteration: + * a = [:foo, 'bar', 2] + * a.reverse_each {|element| puts element; a.clear if element.to_s.start_with?('b') } + * + * Output: + * 2 + * bar + * + * When no block given, returns a new \Enumerator: + * a = [:foo, 'bar', 2] + * e = a.reverse_each + * e # => # + * a1 = e.each {|element| puts "#{element.class} #{element}" } + * Output: + * Integer 2 + * String bar + * Symbol foo + * + * Related: #each, #each_index. */ static VALUE @@ -2202,12 +2633,9 @@ rb_ary_reverse_each(VALUE ary) /* * call-seq: - * ary.length -> int + * array.length -> an_integer * - * Returns the number of elements in +self+. May be zero. - * - * [ 1, 2, 3, 4, 5 ].length #=> 5 - * [].length #=> 0 + * Returns the count of elements in +self+. */ static VALUE @@ -2219,19 +2647,16 @@ rb_ary_length(VALUE ary) /* * call-seq: - * ary.empty? -> true or false - * - * Returns +true+ if +self+ contains no elements. + * array.empty? -> true or false * - * [].empty? #=> true + * Returns +true+ if the count of elements in +self+ is zero, + * +false+ otherwise. */ static VALUE rb_ary_empty_p(VALUE ary) -{ - if (RARRAY_LEN(ary) == 0) - return Qtrue; - return Qfalse; +{ + return RBOOL(RARRAY_LEN(ary) == 0); } VALUE @@ -2275,7 +2700,7 @@ recursive_join(VALUE obj, VALUE argp, int recur) return Qnil; } -static void +static long ary_join_0(VALUE ary, VALUE sep, long max, VALUE result) { long i; @@ -2284,10 +2709,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 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); + } } static void @@ -2301,44 +2756,19 @@ ary_join_1(VALUE obj, VALUE ary, VALUE sep, long i, VALUE result, int *first) val = RARRAY_AREF(ary, i); if (RB_TYPE_P(val, T_STRING)) { - str_join: - rb_str_buf_append(result, val); - if (*first) { - rb_enc_copy(result, val); - *first = FALSE; - } + ary_join_1_str(result, val, first); } 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]; - - *first = FALSE; - args[0] = val; - args[1] = sep; - args[2] = result; - args[3] = (VALUE)first; - rb_exec_recursive(recursive_join, obj, (VALUE)args); - } + ary_join_1_ary(val, ary, sep, result, val, first); } - else { - tmp = rb_check_string_type(val); - if (!NIL_P(tmp)) { - val = tmp; - goto str_join; - } - tmp = rb_check_array_type(val); - if (!NIL_P(tmp)) { - obj = val; - val = tmp; - goto ary_join; - } - val = rb_obj_as_string(val); - goto str_join; + 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); } } } @@ -2361,9 +2791,11 @@ rb_ary_join(VALUE ary, VALUE sep) if (NIL_P(tmp) || tmp != val) { int first; - result = rb_str_buf_new(len + (RARRAY_LEN(ary)-i)*10); + 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()); - ary_join_0(ary, sep, i, result); + i = ary_join_0(ary, sep, i, result); first = i == 0; ary_join_1(ary, ary, sep, i, result, &first); return result; @@ -2382,22 +2814,27 @@ rb_ary_join(VALUE ary, VALUE sep) /* * call-seq: - * ary.join(separator=$,) -> str - * - * 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 an empty string. - * - * [ "a", "b", "c" ].join #=> "abc" - * [ "a", "b", "c" ].join("-") #=> "a-b-c" - * - * For nested arrays, join is applied recursively: - * - * [ "a", [1, 2, [:x, :y]], "b" ].join("-") #=> "a-1-2-x-y-b" + * array.join ->new_string + * array.join(separator = $,) -> new_string + * + * Returns the new \String formed by joining the array elements after conversion. + * For each element +element+ + * - Uses element.to_s if +element+ is not a kind_of?(Array). + * - Uses recursive element.join(separator) if +element+ is a kind_of?(Array). + * + * With no argument, joins using the output field separator, $,: + * a = [:foo, 'bar', 2] + * $, # => nil + * a.join # => "foobar2" + * + * With \string argument +separator+, joins using that separator: + * a = [:foo, 'bar', 2] + * a.join("\n") # => "foo\nbar\n2" + * + * Joins recursively for nested Arrays: + * a = [:foo, [:bar, [:baz, :bat]]] + * a.join # => "foobarbazbat" */ - static VALUE rb_ary_join_m(int argc, VALUE *argv, VALUE ary) { @@ -2406,7 +2843,7 @@ rb_ary_join_m(int argc, VALUE *argv, VALUE ary) if (rb_check_arity(argc, 0, 1) == 0 || NIL_P(sep = argv[0])) { sep = rb_output_fs; if (!NIL_P(sep)) { - rb_warn("$, is set to non-nil value"); + rb_category_warn(RB_WARN_CATEGORY_DEPRECATED, "$, is set to non-nil value"); } } @@ -2433,13 +2870,14 @@ inspect_ary(VALUE ary, VALUE dummy, int recur) /* * call-seq: - * ary.inspect -> string - * ary.to_s -> string + * array.inspect -> new_string * - * Creates a string representation of +self+, by calling #inspect - * on each element. + * Returns the new \String formed by calling method #inspect + * on each array element: + * a = [:foo, 'bar', 2] + * a.inspect # => "[:foo, \"bar\", 2]" * - * [ "a", "b", "c" ].to_s #=> "[\"a\", \"b\", \"c\"]" + * Array#to_s is an alias for Array#inspect. */ static VALUE @@ -2457,11 +2895,20 @@ rb_ary_to_s(VALUE ary) /* * call-seq: - * ary.to_a -> ary - * - * Returns +self+. - * - * If called on a subclass of Array, converts the receiver to an Array object. + * to_a -> self or new_array + * + * When +self+ is an instance of \Array, returns +self+: + * a = [:foo, 'bar', 2] + * a.to_a # => [:foo, "bar", 2] + * + * Otherwise, returns a new \Array containing the elements of +self+: + * class MyArray < Array; end + * a = MyArray.new(['foo', 'bar', 'two']) + * a.instance_of?(Array) # => false + * a.kind_of?(Array) # => true + * a1 = a.to_a + * a1 # => ["foo", "bar", "two"] + * a1.class # => Array # Not MyArray */ static VALUE @@ -2477,20 +2924,24 @@ rb_ary_to_a(VALUE ary) /* * call-seq: - * ary.to_h -> hash - * ary.to_h {|item| block } -> hash - * - * Returns the result of interpreting ary as an array of - * [key, value] pairs. - * - * [[:foo, :bar], [1, 2]].to_h - * # => {:foo => :bar, 1 => 2} - * - * If a block is given, the results of the block on each element of - * the array will be used as pairs. - * - * ["foo", "bar"].to_h {|s| [s.ord, s]} - * # => {102=>"foo", 98=>"bar"} + * array.to_h -> new_hash + * array.to_h {|item| ... } -> new_hash + * + * Returns a new \Hash formed from +self+. + * + * When a block is given, calls the block with each array element; + * the block must return a 2-element \Array whose two elements + * form a key-value pair in the returned \Hash: + * a = ['foo', :bar, 1, [2, 3], {baz: 4}] + * h = a.to_h {|item| [item, item] } + * h # => {"foo"=>"foo", :bar=>:bar, 1=>1, [2, 3]=>[2, 3], {:baz=>4}=>{:baz=>4}} + * + * When no block is given, +self+ must be an \Array of 2-element sub-arrays, + * each sub-array is formed into a key-value pair in the new \Hash: + * [].to_h # => {} + * a = [['foo', 'zero'], ['bar', 'one'], ['baz', 'two']] + * h = a.to_h + * h # => {"foo"=>"zero", "bar"=>"one", "baz"=>"two"} */ static VALUE @@ -2519,7 +2970,7 @@ rb_ary_to_h(VALUE ary) /* * call-seq: - * ary.to_ary -> ary + * array.to_ary -> self * * Returns +self+. */ @@ -2558,13 +3009,11 @@ rb_ary_reverse(VALUE ary) /* * call-seq: - * ary.reverse! -> ary - * - * Reverses +self+ in place. + * array.reverse! -> self * - * a = [ "a", "b", "c" ] - * a.reverse! #=> ["c", "b", "a"] - * a #=> ["c", "b", "a"] + * Reverses +self+ in place: + * a = ['foo', 'bar', 'two'] + * a.reverse! # => ["two", "bar", "foo"] */ static VALUE @@ -2575,12 +3024,12 @@ rb_ary_reverse_bang(VALUE ary) /* * call-seq: - * ary.reverse -> new_ary + * array.reverse -> new_array * - * Returns a new array containing +self+'s elements in reverse order. - * - * [ "a", "b", "c" ].reverse #=> ["c", "b", "a"] - * [ 1 ].reverse #=> [1] + * Returns a new \Array with the elements of +self+ in reverse order. + * a = ['foo', 'bar', 'two'] + * a1 = a.reverse + * a1 # => ["two", "bar", "foo"] */ static VALUE @@ -2607,10 +3056,22 @@ rotate_count(long cnt, long len) static void ary_rotate_ptr(VALUE *ptr, long len, long cnt) { - --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); + 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 @@ -2620,7 +3081,7 @@ rb_ary_rotate(VALUE ary, long cnt) if (cnt != 0) { long len = RARRAY_LEN(ary); - if (len > 0 && (cnt = rotate_count(cnt, len)) > 0) { + if (len > 1 && (cnt = rotate_count(cnt, len)) > 0) { RARRAY_PTR_USE_TRANSIENT(ary, ptr, ary_rotate_ptr(ptr, len, cnt)); return ary; } @@ -2630,19 +3091,41 @@ rb_ary_rotate(VALUE ary, long cnt) /* * call-seq: - * ary.rotate!(count=1) -> ary - * - * Rotates +self+ in place so that the element at +count+ comes first, and - * 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. - * - * 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"] + * array.rotate! -> self + * array.rotate!(count) -> self + * + * Rotates +self+ in place by moving elements from one end to the other; returns +self+. + * + * When no argument given, rotates the first element to the last position: + * a = [:foo, 'bar', 2, 'bar'] + * a.rotate! # => ["bar", 2, "bar", :foo] + * + * When given a non-negative \Integer +count+, + * rotates +count+ elements from the beginning to the end: + * a = [:foo, 'bar', 2] + * a.rotate!(2) + * a # => [2, :foo, "bar"] + * + * If +count+ is large, uses count % array.size as the count: + * a = [:foo, 'bar', 2] + * a.rotate!(20) + * a # => [2, :foo, "bar"] + * + * If +count+ is zero, returns +self+ unmodified: + * a = [:foo, 'bar', 2] + * a.rotate!(0) + * a # => [:foo, "bar", 2] + * + * When given a negative Integer +count+, rotates in the opposite direction, + * from end to beginning: + * a = [:foo, 'bar', 2] + * a.rotate!(-2) + * a # => ["bar", 2, :foo] + * + * If +count+ is small (far from zero), uses count % array.size as the count: + * a = [:foo, 'bar', 2] + * a.rotate!(-5) + * a # => ["bar", 2, :foo] */ static VALUE @@ -2655,19 +3138,44 @@ rb_ary_rotate_bang(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary.rotate(count=1) -> new_ary - * - * Returns a new array by rotating +self+ so that the element at +count+ is - * the first element of the new array. - * - * If +count+ is negative then it rotates in the opposite direction, starting - * from the end of +self+ where +-1+ is the last element. - * - * 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"] + * array.rotate -> new_array + * array.rotate(count) -> new_array + * + * Returns a new \Array formed from +self+ with elements + * rotated from one end to the other. + * + * When no argument given, returns a new \Array that is like +self+, + * except that the first element has been rotated to the last position: + * a = [:foo, 'bar', 2, 'bar'] + * a1 = a.rotate + * a1 # => ["bar", 2, "bar", :foo] + * + * When given a non-negative \Integer +count+, + * returns a new \Array with +count+ elements rotated from the beginning to the end: + * a = [:foo, 'bar', 2] + * a1 = a.rotate(2) + * a1 # => [2, :foo, "bar"] + * + * If +count+ is large, uses count % array.size as the count: + * a = [:foo, 'bar', 2] + * a1 = a.rotate(20) + * a1 # => [2, :foo, "bar"] + * + * If +count+ is zero, returns a copy of +self+, unmodified: + * a = [:foo, 'bar', 2] + * a1 = a.rotate(0) + * a1 # => [:foo, "bar", 2] + * + * When given a negative \Integer +count+, rotates in the opposite direction, + * from end to beginning: + * a = [:foo, 'bar', 2] + * a1 = a.rotate(-2) + * a1 # => ["bar", 2, :foo] + * + * If +count+ is small (far from zero), uses count % array.size as the count: + * a = [:foo, 'bar', 2] + * a1 = a.rotate(-5) + * a1 # => ["bar", 2, :foo] */ static VALUE @@ -2693,6 +3201,7 @@ rb_ary_rotate_m(int argc, VALUE *argv, VALUE ary) struct ary_sort_data { VALUE ary; + VALUE receiver; struct cmp_opt_data cmp_opt; }; @@ -2705,6 +3214,15 @@ sort_reentered(VALUE ary) 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) { @@ -2718,7 +3236,7 @@ sort_1(const void *ap, const void *bp, void *dummy) args[1] = b; retval = rb_yield_values2(2, args); n = rb_cmpint(retval, a, b); - sort_reentered(data->ary); + sort_returned(data); return n; } @@ -2730,7 +3248,7 @@ 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->cmp_opt, Fixnum)) { + if (FIXNUM_P(a) && FIXNUM_P(b) && CMP_OPTIMIZABLE(data->cmp_opt, Integer)) { if ((long)a > (long)b) return 1; if ((long)a < (long)b) return -1; return 0; @@ -2744,33 +3262,45 @@ sort_2(const void *ap, const void *bp, void *dummy) 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. - * - * Comparisons for the sort will be done using the <=> operator - * or using an optional code block. - * - * 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+. - * - * The result is not guaranteed to be stable. When the comparison of two - * elements returns +0+, the order of the elements is unpredictable. - * - * ary = [ "d", "a", "e", "c", "b" ] - * ary.sort! #=> ["a", "b", "c", "d", "e"] - * ary.sort! {|a, b| b <=> a} #=> ["e", "d", "c", "b", "a"] - * - * See also Enumerable#sort_by. + * array.sort! -> self + * array.sort! {|a, b| ... } -> self + * + * Returns +self+ with its elements sorted in place. + * + * With no block, compares elements using operator <=> + * (see Comparable): + * a = 'abcde'.split('').shuffle + * a # => ["e", "b", "d", "a", "c"] + * a.sort! + * a # => ["a", "b", "c", "d", "e"] + * + * With a block, calls the block with each element pair; + * for each element pair +a+ and +b+, the block should return an integer: + * - Negative when +b+ is to follow +a+. + * - Zero when +a+ and +b+ are equivalent. + * - Positive when +a+ is to follow +b+. + * + * Example: + * a = 'abcde'.split('').shuffle + * a # => ["e", "b", "d", "a", "c"] + * a.sort! {|a, b| a <=> b } + * a # => ["a", "b", "c", "d", "e"] + * a.sort! {|a, b| b <=> a } + * a # => ["e", "d", "c", "b", "a"] + * + * When the block returns zero, the order for +a+ and +b+ is indeterminate, + * and may be unstable: + * a = 'abcde'.split('').shuffle + * a # => ["e", "b", "d", "a", "c"] + * a.sort! {|a, b| 0 } + * a # => ["d", "e", "c", "a", "b"] */ VALUE @@ -2784,6 +3314,7 @@ rb_ary_sort_bang(VALUE ary) long len = RARRAY_LEN(ary); RBASIC_CLEAR_CLASS(tmp); data.ary = tmp; + data.receiver = ary; data.cmp_opt.opt_methods = 0; data.cmp_opt.opt_inited = 0; RARRAY_PTR_USE(tmp, ptr, { @@ -2835,31 +3366,40 @@ rb_ary_sort_bang(VALUE ary) /* * call-seq: - * ary.sort -> new_ary - * ary.sort {|a, b| block} -> new_ary - * - * Returns a new array created by sorting +self+. - * - * Comparisons for the sort will be done using the <=> operator - * or using an optional code block. - * - * 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+. - * - * The result is not guaranteed to be stable. When the comparison of two - * elements returns +0+, the order of the elements is unpredictable. - * - * ary = [ "d", "a", "e", "c", "b" ] - * ary.sort #=> ["a", "b", "c", "d", "e"] - * ary.sort {|a, b| b <=> a} #=> ["e", "d", "c", "b", "a"] - * - * To produce the reverse order, the following can also be used - * (and may be faster): - * - * ary.sort.reverse! #=> ["e", "d", "c", "b", "a"] - * - * See also Enumerable#sort_by. + * array.sort -> new_array + * array.sort {|a, b| ... } -> new_array + * + * Returns a new \Array whose elements are those from +self+, sorted. + * + * With no block, compares elements using operator <=> + * (see Comparable): + * a = 'abcde'.split('').shuffle + * a # => ["e", "b", "d", "a", "c"] + * a1 = a.sort + * a1 # => ["a", "b", "c", "d", "e"] + * + * With a block, calls the block with each element pair; + * for each element pair +a+ and +b+, the block should return an integer: + * - Negative when +b+ is to follow +a+. + * - Zero when +a+ and +b+ are equivalent. + * - Positive when +a+ is to follow +b+. + * + * Example: + * a = 'abcde'.split('').shuffle + * a # => ["e", "b", "d", "a", "c"] + * a1 = a.sort {|a, b| a <=> b } + * a1 # => ["a", "b", "c", "d", "e"] + * a2 = a.sort {|a, b| b <=> a } + * a2 # => ["e", "d", "c", "b", "a"] + * + * When the block returns zero, the order for +a+ and +b+ is indeterminate, + * and may be unstable: + * a = 'abcde'.split('').shuffle + * a # => ["e", "b", "d", "a", "c"] + * a1 = a.sort {|a, b| 0 } + * a1 # => ["c", "e", "b", "d", "a"] + * + * Related: Enumerable#sort_by. */ VALUE @@ -2874,55 +3414,12 @@ 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 modes: 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 cases), - * the block must always 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 always 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. + * array.bsearch {|element| ... } -> object + * array.bsearch -> new_enumerator + * + * Returns an element from +self+ selected by a binary search. + * + * See {Binary Searching}[rdoc-ref:bsearch.rdoc]. */ static VALUE @@ -2938,15 +3435,11 @@ rb_ary_bsearch(VALUE ary) /* * call-seq: - * ary.bsearch_index {|x| block } -> int or nil + * array.bsearch_index {|element| ... } -> integer or nil + * array.bsearch_index -> new_enumerator * - * 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. - * - * It supports two modes, depending on the nature of the block. They are - * exactly the same as in the case of the #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. + * Searches +self+ as described at method #bsearch, + * but returns the _index_ of the found element instead of the element itself. */ static VALUE @@ -2969,7 +3462,7 @@ rb_ary_bsearch_index(VALUE ary) satisfied = 1; smaller = 1; } - else if (v == Qfalse || v == Qnil) { + else if (!RTEST(v)) { smaller = 0; } else if (rb_obj_is_kind_of(v, rb_cNumeric)) { @@ -3005,18 +3498,26 @@ sort_by_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, dummy)) /* * call-seq: - * ary.sort_by! {|obj| block} -> ary - * ary.sort_by! -> Enumerator + * array.sort_by! {|element| ... } -> self + * array.sort_by! -> new_enumerator + * + * Sorts the elements of +self+ in place, + * using an ordering determined by the block; returns self. * - * Sorts +self+ in place using a set of keys generated by mapping the - * values in +self+ through the given block. + * Calls the block with each successive element; + * sorts elements based on the values returned from the block. * - * The result is not guaranteed to be stable. When two keys are equal, - * the order of the corresponding elements is unpredictable. + * For duplicates returned by the block, the ordering is indeterminate, and may be unstable. * - * If no block is given, an Enumerator is returned instead. + * This example sorts strings based on their sizes: + * a = ['aaaa', 'bbb', 'cc', 'd'] + * a.sort_by! {|element| element.size } + * a # => ["d", "cc", "bbb", "aaaa"] * - * See also Enumerable#sort_by. + * Returns a new \Enumerator if no block given: + * + * a = ['aaaa', 'bbb', 'cc', 'd'] + * a.sort_by! # => # */ static VALUE @@ -3034,23 +3535,21 @@ rb_ary_sort_by_bang(VALUE 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+. + * array.map {|element| ... } -> new_array + * array.map -> new_enumerator * - * Creates a new array containing the values returned by the block. + * Calls the block, if given, with each element of +self+; + * returns a new \Array whose elements are the return values from the block: + * a = [:foo, 'bar', 2] + * a1 = a.map {|element| element.class } + * a1 # => [Symbol, String, Integer] * - * See also Enumerable#collect. + * Returns a new \Enumerator if no block given: + * a = [:foo, 'bar', 2] + * a1 = a.map + * a1 # => # * - * If no block is given, an Enumerator is returned instead. - * - * 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"] + * Array#collect is an alias for Array#map. */ static VALUE @@ -3070,23 +3569,20 @@ rb_ary_collect(VALUE ary) /* * call-seq: - * ary.collect! {|item| block } -> ary - * ary.map! {|item| block } -> ary - * ary.collect! -> Enumerator - * ary.map! -> Enumerator - * - * Invokes the given block once for each element of +self+, replacing the - * element with the value returned by the block. + * array.map! {|element| ... } -> self + * array.map! -> new_enumerator * - * See also Enumerable#collect. + * Calls the block, if given, with each element; + * replaces the element with the block's return value: + * a = [:foo, 'bar', 2] + * a.map! { |element| element.class } # => [Symbol, String, Integer] * - * If no block is given, an Enumerator is returned instead. + * Returns a new \Enumerator if no block given: + * a = [:foo, 'bar', 2] + * a1 = a.map! + * a1 # => # * - * 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!"] + * Array#collect! is an alias for Array#map!. */ static VALUE @@ -3158,20 +3654,38 @@ append_values_at_single(VALUE result, VALUE ary, long olen, VALUE idx) /* * call-seq: - * ary.values_at(selector, ...) -> new_ary + * array.values_at(*indexes) -> new_array * - * Returns an array containing the elements in +self+ corresponding to the - * given +selector+(s). + * Returns a new \Array whose elements are the elements + * of +self+ at the given \Integer or \Range +indexes+. * - * The selectors may be either integer indices or ranges. + * For each positive +index+, returns the element at offset +index+: + * a = [:foo, 'bar', 2] + * a.values_at(0, 2) # => [:foo, 2] + * a.values_at(0..1) # => [:foo, "bar"] * - * See also Array#select. + * The given +indexes+ may be in any order, and may repeat: + * a = [:foo, 'bar', 2] + * a.values_at(2, 0, 1, 0, 2) # => [2, :foo, "bar", :foo, 2] + * a.values_at(1, 0..2) # => ["bar", :foo, "bar", 2] * - * 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"] + * Assigns +nil+ for an +index+ that is too large: + * a = [:foo, 'bar', 2] + * a.values_at(0, 3, 1, 3) # => [:foo, nil, "bar", nil] + * + * Returns a new empty \Array if no arguments given. + * + * For each negative +index+, counts backward from the end of the array: + * a = [:foo, 'bar', 2] + * a.values_at(-1, -3) # => [2, :foo] + * + * Assigns +nil+ for an +index+ that is too small: + * a = [:foo, 'bar', 2] + * a.values_at(0, -5, 1, -6, 2) # => [:foo, nil, "bar", nil, 2] + * + * The given +indexes+ may have a mixture of signs: + * a = [:foo, 'bar', 2] + * a.values_at(0, -2, 1, -1) # => [:foo, "bar", "bar", 2] */ static VALUE @@ -3189,22 +3703,19 @@ rb_ary_values_at(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary.select {|item| block} -> new_ary - * ary.select -> Enumerator - * ary.filter {|item| block} -> new_ary - * ary.filter -> Enumerator + * array.select {|element| ... } -> new_array + * array.select -> new_enumerator * - * Returns a new array containing all elements of +ary+ - * for which the given +block+ returns a true value. + * Calls the block, if given, with each element of +self+; + * returns a new \Array containing those elements of +self+ + * for which the block returns a truthy value: + * a = [:foo, 'bar', 2, :bam] + * a1 = a.select {|element| element.to_s.start_with?('b') } + * a1 # => ["bar", :bam] * - * If no block is given, an Enumerator is returned instead. - * - * [1,2,3,4,5].select {|num| num.even? } #=> [2, 4] - * - * a = %w[ a b c d e f ] - * a.select {|v| v =~ /[aeiou]/ } #=> ["a", "e"] - * - * See also Enumerable#select. + * Returns a new \Enumerator if no block given: + * a = [:foo, 'bar', 2, :bam] + * a.select # => # * * Array#filter is an alias for Array#select. */ @@ -3258,6 +3769,7 @@ select_bang_ensure(VALUE a) if (i2 < len && i2 < i1) { long tail = 0; + rb_ary_modify(ary); if (i1 < len) { tail = len - i1; RARRAY_PTR_USE_TRANSIENT(ary, ptr, { @@ -3271,21 +3783,21 @@ select_bang_ensure(VALUE a) /* * call-seq: - * ary.select! {|item| block } -> ary or nil - * ary.select! -> Enumerator - * ary.filter! {|item| block } -> ary or nil - * ary.filter! -> Enumerator + * array.select! {|element| ... } -> self or nil + * array.select! -> new_enumerator * - * Invokes the given block passing in successive elements from +self+, - * deleting elements for which the block returns a +false+ value. + * Calls the block, if given 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: + * a = [:foo, 'bar', 2, :bam] + * a.select! {|element| element.to_s.start_with?('b') } # => ["bar", :bam] * - * If changes were made, it will return +self+, otherwise it returns +nil+. + * Returns +nil+ if no elements were removed. * - * If no block is given, an Enumerator is returned instead. - * - * See also Array#keep_if. + * Returns a new \Enumerator if no block given: + * a = [:foo, 'bar', 2, :bam] + * a.select! # => # * * Array#filter! is an alias for Array#select!. */ @@ -3305,19 +3817,17 @@ rb_ary_select_bang(VALUE ary) /* * call-seq: - * ary.keep_if {|item| block} -> ary - * ary.keep_if -> Enumerator - * - * Deletes every element of +self+ for which the given block evaluates to - * +false+, and returns +self+. + * array.keep_if {|element| ... } -> self + * array.keep_if -> new_enumeration * - * If no block is given, an Enumerator is returned instead. + * Retains those elements for which the block returns a truthy value; + * deletes all other elements; returns +self+: + * a = [:foo, 'bar', 2, :bam] + * a.keep_if {|element| element.to_s.start_with?('b') } # => ["bar", :bam] * - * a = %w[ a b c d e f ] - * a.keep_if {|v| v =~ /[aeiou]/ } #=> ["a", "e"] - * a #=> ["a", "e"] - * - * See also Array#select!. + * Returns a new \Enumerator if no block given: + * a = [:foo, 'bar', 2, :bam] + * a.keep_if # => # */ static VALUE @@ -3343,22 +3853,34 @@ ary_resize_smaller(VALUE ary, long len) /* * call-seq: - * ary.delete(obj) -> item or nil - * ary.delete(obj) {block} -> item or result of block - * - * Deletes all items from +self+ that are equal to +obj+. - * - * Returns the last deleted item, or +nil+ if no matching item is found. - * - * 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!) - * - * a = [ "a", "b", "b", "b", "c" ] - * a.delete("b") #=> "b" - * a #=> ["a", "c"] - * a.delete("z") #=> nil - * a.delete("z") {"not found"} #=> "not found" + * array.delete(obj) -> deleted_object + * array.delete(obj) {|nosuch| ... } -> deleted_object or block_return + * + * Removes zero or more elements from +self+; returns +self+. + * + * When no block is given, + * removes from +self+ each element +ele+ such that ele == obj; + * returns the last deleted element: + * s1 = 'bar'; s2 = 'bar' + * a = [:foo, s1, 2, s2] + * a.delete('bar') # => "bar" + * a # => [:foo, 2] + * + * Returns +nil+ if no elements removed. + * + * When a block is given, + * removes from +self+ each element +ele+ such that ele == obj. + * + * If any such elements are found, ignores the block + * and returns the last deleted element: + * s1 = 'bar'; s2 = 'bar' + * a = [:foo, s1, 2, s2] + * deleted_obj = a.delete('bar') {|obj| fail 'Cannot happen' } + * a # => [:foo, 2] + * + * If no such elements are found, returns the block's return value: + * a = [:foo, 'bar', 2] + * a.delete(:nosuch) {|obj| "#{obj} not found" } # => "nosuch not found" */ VALUE @@ -3439,17 +3961,23 @@ rb_ary_delete_at(VALUE ary, long pos) /* * call-seq: - * ary.delete_at(index) -> obj or nil + * array.delete_at(index) -> deleted_object or nil + * + * Deletes an element from +self+, per the given \Integer +index+. * - * Deletes the element at the specified +index+, returning that element, or - * +nil+ if the +index+ is out of range. + * When +index+ is non-negative, deletes the element at offset +index+: + * a = [:foo, 'bar', 2] + * a.delete_at(1) # => "bar" + * a # => [:foo, 2] * - * See also Array#slice! + * If index is too large, returns +nil+. * - * a = ["ant", "bat", "cat", "dog"] - * a.delete_at(2) #=> "cat" - * a #=> ["ant", "bat", "dog"] - * a.delete_at(99) #=> nil + * When +index+ is negative, counts backward from the end of the array: + * a = [:foo, 'bar', 2] + * a.delete_at(-2) # => "bar" + * a # => [:foo, 2] + * + * If +index+ is too small (far from zero), returns nil. */ static VALUE @@ -3458,63 +3986,118 @@ 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_TRANSIENT(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"] + * array.slice!(n) -> object or nil + * array.slice!(start, length) -> new_array or nil + * array.slice!(range) -> new_array or nil + * + * Removes and returns elements from +self+. + * + * When the only argument is an \Integer +n+, + * removes and returns the _nth_ element in +self+: + * a = [:foo, 'bar', 2] + * a.slice!(1) # => "bar" + * a # => [:foo, 2] + * + * If +n+ is negative, counts backwards from the end of +self+: + * a = [:foo, 'bar', 2] + * a.slice!(-1) # => 2 + * a # => [:foo, "bar"] + * + * If +n+ is out of range, returns +nil+. + * + * When the only arguments are Integers +start+ and +length+, + * removes +length+ elements from +self+ beginning at offset +start+; + * returns the deleted objects in a new Array: + * a = [:foo, 'bar', 2] + * a.slice!(0, 2) # => [:foo, "bar"] + * a # => [2] + * + * If start + length exceeds the array size, + * removes and returns all elements from offset +start+ to the end: + * a = [:foo, 'bar', 2] + * a.slice!(1, 50) # => ["bar", 2] + * a # => [:foo] + * + * If start == a.size and +length+ is non-negative, + * returns a new empty \Array. + * + * If +length+ is negative, returns +nil+. + * + * When the only argument is a \Range object +range+, + * treats range.min as +start+ above and range.size as +length+ above: + * a = [:foo, 'bar', 2] + * a.slice!(1..2) # => ["bar", 2] + * a # => [:foo] + * + * If range.start == a.size, returns a new empty \Array. + * + * If range.start is larger than the array size, returns +nil+. + * + * If range.end is negative, counts backwards from the end of the array: + * a = [:foo, 'bar', 2] + * a.slice!(0..-2) # => [:foo, "bar"] + * a # => [2] + * + * If range.start is negative, + * calculates the start index backwards from the end of the array: + * a = [:foo, 'bar', 2] + * a.slice!(-2..2) # => ["bar", 2] + * a # => [:foo] */ 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_TRANSIENT(ary)+pos); - RBASIC_SET_CLASS(arg2, rb_obj_class(ary)); - rb_ary_splice(ary, pos, len, 0, 0); - return arg2; + return ary_slice_bang_by_rb_ary_splice(ary, pos, len); } - rb_check_arity(argc, 1, 2); - 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; + return ary_slice_bang_by_rb_ary_splice(ary, pos, len); case Qnil: /* invalid range */ return Qnil; @@ -3572,17 +4155,20 @@ ary_reject_bang(VALUE ary) /* * call-seq: - * ary.reject! {|item| block} -> ary or nil - * ary.reject! -> Enumerator + * array.reject! {|element| ... } -> self or nil + * array.reject! -> new_enumerator * - * Deletes every element of +self+ for which the block evaluates to +true+, - * if no changes were made returns +nil+. + * Removes each element for which the block returns a truthy value. * - * The array may not be changed instantly every time the block is called. + * Returns +self+ if any elements removed: + * a = [:foo, 'bar', 2, 'bat'] + * a.reject! {|element| element.to_s.start_with?('b') } # => [:foo, 2] * - * See also Enumerable#reject and Array#delete_if. + * Returns +nil+ if no elements removed. * - * If no block is given, an Enumerator is returned instead. + * Returns a new \Enumerator if no block given: + * a = [:foo, 'bar', 2] + * a.reject! # => # */ static VALUE @@ -3595,15 +4181,18 @@ rb_ary_reject_bang(VALUE ary) /* * call-seq: - * ary.reject {|item| block } -> new_ary - * ary.reject -> Enumerator - * - * 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. - * - * See also Array#delete_if - * - * If no block is given, an Enumerator is returned instead. + * array.reject {|element| ... } -> new_array + * array.reject -> new_enumerator + * + * Returns a new \Array whose elements are all those from +self+ + * for which the block returns +false+ or +nil+: + * a = [:foo, 'bar', 2, 'bat'] + * a1 = a.reject {|element| element.to_s.start_with?('b') } + * a1 # => [:foo, 2] + * + * Returns a new \Enumerator if no block given: + * a = [:foo, 'bar', 2] + * a.reject # => # */ static VALUE @@ -3619,20 +4208,17 @@ 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+. + * array.delete_if {|element| ... } -> self + * array.delete_if -> Enumerator * - * The array is changed instantly every time the block is called, not after - * the iteration is over. + * Removes each element in +self+ for which the block returns a truthy value; + * returns +self+: + * a = [:foo, 'bar', 2, 'bat'] + * a.delete_if {|element| element.to_s.start_with?('b') } # => [:foo, 2] * - * See also Array#reject! - * - * If no block is given, an Enumerator is returned instead. - * - * scores = [ 97, 42, 75 ] - * scores.delete_if {|score| score < 80 } #=> [97] + * Returns a new \Enumerator if no block given: + * a = [:foo, 'bar', 2] + * a.delete_if # => # */ static VALUE @@ -3648,10 +4234,9 @@ static VALUE take_i(RB_BLOCK_CALL_FUNC_ARGLIST(val, cbarg)) { VALUE *args = (VALUE *)cbarg; - if (args[1] == 0) rb_iter_break(); - else args[1]--; if (argc > 1) val = rb_ary_new4(argc, argv); rb_ary_push(args[0], val); + if (--args[1] == 0) rb_iter_break(); return Qnil; } @@ -3661,6 +4246,7 @@ 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; @@ -3673,26 +4259,51 @@ take_items(VALUE obj, long n) /* * 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 ary.size _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]] + * array.zip(*other_arrays) -> new_array + * array.zip(*other_arrays) {|other_array| ... } -> nil + * + * When no block given, returns a new \Array +new_array+ of size self.size + * whose elements are Arrays. + * + * Each nested array new_array[n] is of size other_arrays.size+1, + * and contains: + * - The _nth_ element of +self+. + * - The _nth_ element of each of the +other_arrays+. + * + * If all +other_arrays+ and +self+ are the same size: + * a = [:a0, :a1, :a2, :a3] + * b = [:b0, :b1, :b2, :b3] + * c = [:c0, :c1, :c2, :c3] + * d = a.zip(b, c) + * d # => [[:a0, :b0, :c0], [:a1, :b1, :c1], [:a2, :b2, :c2], [:a3, :b3, :c3]] + * + * If any array in +other_arrays+ is smaller than +self+, + * fills to self.size with +nil+: + * a = [:a0, :a1, :a2, :a3] + * b = [:b0, :b1, :b2] + * c = [:c0, :c1] + * d = a.zip(b, c) + * d # => [[:a0, :b0, :c0], [:a1, :b1, :c1], [:a2, :b2, nil], [:a3, nil, nil]] + * + * If any array in +other_arrays+ is larger than +self+, + * its trailing elements are ignored: + * a = [:a0, :a1, :a2, :a3] + * b = [:b0, :b1, :b2, :b3, :b4] + * c = [:c0, :c1, :c2, :c3, :c4, :c5] + * d = a.zip(b, c) + * d # => [[:a0, :b0, :c0], [:a1, :b1, :c1], [:a2, :b2, :c2], [:a3, :b3, :c3]] + * + * When a block is given, calls the block with each of the sub-arrays (formed as above); returns nil + * a = [:a0, :a1, :a2, :a3] + * b = [:b0, :b1, :b2, :b3] + * c = [:c0, :c1, :c2, :c3] + * a.zip(b, c) {|sub_array| p sub_array} # => nil + * + * Output: + * [:a0, :b0, :c0] + * [:a1, :b1, :c1] + * [:a2, :b2, :c2] + * [:a3, :b3, :c3] */ static VALUE @@ -3755,15 +4366,12 @@ rb_ary_zip(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary.transpose -> new_ary - * - * Assumes that +self+ is an array of arrays and transposes the rows and - * columns. + * array.transpose -> new_array * - * a = [[1,2], [3,4], [5,6]] - * a.transpose #=> [[1, 3, 5], [2, 4, 6]] - * - * If the length of the subarrays don't match, an IndexError is raised. + * Transposes the rows and columns in an \Array of Arrays; + * the nested Arrays must all be the same size: + * a = [[:a0, :a1], [:b0, :b1], [:c0, :c1]] + * a.transpose # => [[:a0, :b0, :c0], [:a1, :b1, :c1]] */ static VALUE @@ -3796,15 +4404,11 @@ rb_ary_transpose(VALUE ary) /* * call-seq: - * ary.replace(other_ary) -> ary - * ary.initialize_copy(other_ary) -> ary - * - * Replaces the contents of +self+ with the contents of +other_ary+, - * truncating or expanding if necessary. + * array.replace(other_array) -> self * - * a = [ "a", "b", "c", "d", "e" ] - * a.replace([ "x", "y", "z" ]) #=> ["x", "y", "z"] - * a #=> ["x", "y", "z"] + * Replaces the content of +self+ with the content of +other_array+; returns +self+: + * a = [:foo, 'bar', 2] + * a.replace(['foo', :bar, 3]) # => ["foo", :bar, 3] */ VALUE @@ -3850,12 +4454,11 @@ rb_ary_replace(VALUE copy, VALUE orig) /* * call-seq: - * ary.clear -> ary + * array.clear -> self * - * Removes all elements from +self+. - * - * a = [ "a", "b", "c", "d", "e" ] - * a.clear #=> [ ] + * Removes all elements from +self+: + * a = [:foo, 'bar', 2] + * a.clear # => [] */ VALUE @@ -3881,32 +4484,171 @@ rb_ary_clear(VALUE 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 - * - * The first three forms set the selected elements of +self+ (which - * may be the entire array) to +obj+. - * - * A +start+ of +nil+ is equivalent to zero. - * - * A +length+ of +nil+ is equivalent to the length of the array. - * - * 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. - * - * Negative values of +start+ count from the end of the array, where +-1+ is - * the last element. - * - * 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] + * array.fill(obj) -> self + * array.fill(obj, start) -> self + * array.fill(obj, start, length) -> self + * array.fill(obj, range) -> self + * array.fill {|index| ... } -> self + * array.fill(start) {|index| ... } -> self + * array.fill(start, length) {|index| ... } -> self + * array.fill(range) {|index| ... } -> self + * + * Replaces specified elements in +self+ with specified objects; returns +self+. + * + * With argument +obj+ and no block given, replaces all elements with that one object: + * a = ['a', 'b', 'c', 'd'] + * a # => ["a", "b", "c", "d"] + * a.fill(:X) # => [:X, :X, :X, :X] + * + * With arguments +obj+ and \Integer +start+, and no block given, + * replaces elements based on the given start. + * + * If +start+ is in range (0 <= start < array.size), + * replaces all elements from offset +start+ through the end: + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, 2) # => ["a", "b", :X, :X] + * + * If +start+ is too large (start >= array.size), does nothing: + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, 4) # => ["a", "b", "c", "d"] + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, 5) # => ["a", "b", "c", "d"] + * + * If +start+ is negative, counts from the end (starting index is start + array.size): + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, -2) # => ["a", "b", :X, :X] + * + * If +start+ is too small (less than and far from zero), replaces all elements: + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, -6) # => [:X, :X, :X, :X] + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, -50) # => [:X, :X, :X, :X] + * + * With arguments +obj+, \Integer +start+, and \Integer +length+, and no block given, + * replaces elements based on the given +start+ and +length+. + * + * If +start+ is in range, replaces +length+ elements beginning at offset +start+: + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, 1, 1) # => ["a", :X, "c", "d"] + * + * If +start+ is negative, counts from the end: + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, -2, 1) # => ["a", "b", :X, "d"] + * + * If +start+ is large (start >= array.size), extends +self+ with +nil+: + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, 5, 0) # => ["a", "b", "c", "d", nil] + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, 5, 2) # => ["a", "b", "c", "d", nil, :X, :X] + * + * If +length+ is zero or negative, replaces no elements: + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, 1, 0) # => ["a", "b", "c", "d"] + * a.fill(:X, 1, -1) # => ["a", "b", "c", "d"] + * + * With arguments +obj+ and \Range +range+, and no block given, + * replaces elements based on the given range. + * + * If the range is positive and ascending (0 < range.begin <= range.end), + * replaces elements from range.begin to range.end: + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, (1..1)) # => ["a", :X, "c", "d"] + * + * If range.first is negative, replaces no elements: + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, (-1..1)) # => ["a", "b", "c", "d"] + * + * If range.last is negative, counts from the end: + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, (0..-2)) # => [:X, :X, :X, "d"] + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, (1..-2)) # => ["a", :X, :X, "d"] + * + * If range.last and range.last are both negative, + * both count from the end of the array: + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, (-1..-1)) # => ["a", "b", "c", :X] + * a = ['a', 'b', 'c', 'd'] + * a.fill(:X, (-2..-2)) # => ["a", "b", :X, "d"] + * + * With no arguments and a block given, calls the block with each index; + * replaces the corresponding element with the block's return value: + * a = ['a', 'b', 'c', 'd'] + * a.fill { |index| "new_#{index}" } # => ["new_0", "new_1", "new_2", "new_3"] + * + * With argument +start+ and a block given, calls the block with each index + * from offset +start+ to the end; replaces the corresponding element + * with the block's return value: + * + * If start is in range (0 <= start < array.size), + * replaces from offset +start+ to the end: + * a = ['a', 'b', 'c', 'd'] + * a.fill(1) { |index| "new_#{index}" } # => ["a", "new_1", "new_2", "new_3"] + * + * If +start+ is too large(start >= array.size), does nothing: + * a = ['a', 'b', 'c', 'd'] + * a.fill(4) { |index| fail 'Cannot happen' } # => ["a", "b", "c", "d"] + * a = ['a', 'b', 'c', 'd'] + * a.fill(4) { |index| fail 'Cannot happen' } # => ["a", "b", "c", "d"] + * + * If +start+ is negative, counts from the end: + * a = ['a', 'b', 'c', 'd'] + * a.fill(-2) { |index| "new_#{index}" } # => ["a", "b", "new_2", "new_3"] + * + * If start is too small (start <= -array.size, replaces all elements: + * a = ['a', 'b', 'c', 'd'] + * a.fill(-6) { |index| "new_#{index}" } # => ["new_0", "new_1", "new_2", "new_3"] + * a = ['a', 'b', 'c', 'd'] + * a.fill(-50) { |index| "new_#{index}" } # => ["new_0", "new_1", "new_2", "new_3"] + * + * With arguments +start+ and +length+, and a block given, + * calls the block for each index specified by start length; + * replaces the corresponding element with the block's return value. + * + * If +start+ is in range, replaces +length+ elements beginning at offset +start+: + * a = ['a', 'b', 'c', 'd'] + * a.fill(1, 1) { |index| "new_#{index}" } # => ["a", "new_1", "c", "d"] + * + * If start is negative, counts from the end: + * a = ['a', 'b', 'c', 'd'] + * a.fill(-2, 1) { |index| "new_#{index}" } # => ["a", "b", "new_2", "d"] + * + * If +start+ is large (start >= array.size), extends +self+ with +nil+: + * a = ['a', 'b', 'c', 'd'] + * a.fill(5, 0) { |index| "new_#{index}" } # => ["a", "b", "c", "d", nil] + * a = ['a', 'b', 'c', 'd'] + * a.fill(5, 2) { |index| "new_#{index}" } # => ["a", "b", "c", "d", nil, "new_5", "new_6"] + * + * If +length+ is zero or less, replaces no elements: + * a = ['a', 'b', 'c', 'd'] + * a.fill(1, 0) { |index| "new_#{index}" } # => ["a", "b", "c", "d"] + * a.fill(1, -1) { |index| "new_#{index}" } # => ["a", "b", "c", "d"] + * + * With arguments +obj+ and +range+, and a block given, + * calls the block with each index in the given range; + * replaces the corresponding element with the block's return value. + * + * If the range is positive and ascending (range 0 < range.begin <= range.end, + * replaces elements from range.begin to range.end: + * a = ['a', 'b', 'c', 'd'] + * a.fill(1..1) { |index| "new_#{index}" } # => ["a", "new_1", "c", "d"] + * + * If +range.first+ is negative, does nothing: + * a = ['a', 'b', 'c', 'd'] + * a.fill(-1..1) { |index| fail 'Cannot happen' } # => ["a", "b", "c", "d"] + * + * If range.last is negative, counts from the end: + * a = ['a', 'b', 'c', 'd'] + * a.fill(0..-2) { |index| "new_#{index}" } # => ["new_0", "new_1", "new_2", "d"] + * a = ['a', 'b', 'c', 'd'] + * a.fill(1..-2) { |index| "new_#{index}" } # => ["a", "new_1", "new_2", "d"] + * + * If range.first and range.last are both negative, + * both count from the end: + * a = ['a', 'b', 'c', 'd'] + * a.fill(-1..-1) { |index| "new_#{index}" } # => ["a", "b", "c", "new_3"] + * a = ['a', 'b', 'c', 'd'] + * a.fill(-2..-2) { |index| "new_#{index}" } # => ["a", "b", "new_2", "d"] */ static VALUE @@ -3975,25 +4717,14 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary + other_ary -> new_ary - * - * Concatenation --- Returns a new array built by concatenating the - * two arrays together to produce a third array. + * array + other_array -> new_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" ] + * Returns a new \Array containing all elements of +array+ + * followed by all elements of +other_array+: + * 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 += on arrays can be quite inefficient. - * - * See also Array#concat. + * Related: #concat. */ VALUE @@ -4021,27 +4752,17 @@ ary_append(VALUE x, VALUE y) if (n > 0) { rb_ary_splice(x, RARRAY_LEN(x), 0, RARRAY_CONST_PTR_TRANSIENT(y), n); } + RB_GC_GUARD(y); return x; } /* * call-seq: - * ary.concat(other_ary1, other_ary2, ...) -> ary - * - * Appends the elements of other_arys to +self+. - * - * [ "a", "b" ].concat( ["c", "d"]) #=> [ "a", "b", "c", "d" ] - * [ "a" ].concat( ["b"], ["c", "d"]) #=> [ "a", "b", "c", "d" ] - * [ "a" ].concat #=> [ "a" ] - * - * a = [ 1, 2, 3 ] - * a.concat( [ 4, 5 ]) - * a #=> [ 1, 2, 3, 4, 5 ] - * - * a = [ 1, 2 ] - * a.concat(a, a) #=> [1, 2, 1, 2, 1, 2] + * array.concat(*other_arrays) -> self * - * See also Array#+. + * Adds to +array+ all elements from each \Array in +other_arrays+; returns +self+: + * a = [0, 1] + * a.concat([2, 3], [4, 5]) # => [0, 1, 2, 3, 4, 5] */ static VALUE @@ -4073,19 +4794,17 @@ rb_ary_concat(VALUE x, VALUE y) /* * call-seq: - * ary * int -> new_ary - * ary * str -> new_string + * array * n -> new_array + * array * string_separator -> new_string * - * Repetition --- With a String argument, equivalent to - * ary.join(str). - * - * Otherwise, returns a new array built by concatenating the +int+ copies of - * +self+. - * - * - * [ 1, 2, 3 ] * 3 #=> [ 1, 2, 3, 1, 2, 3, 1, 2, 3 ] - * [ 1, 2, 3 ] * "," #=> "1,2,3" + * When non-negative argument \Integer +n+ is given, + * returns a new \Array built by concatenating the +n+ copies of +self+: + * a = ['x', 'y'] + * a * 3 # => ["x", "y", "x", "y", "x", "y"] * + * When \String argument +string_separator+ is given, + * equivalent to array.join(string_separator): + * [0, [0, 1], {foo: 0}] * ', ' # => "0, 0, 1, {:foo=>0}" */ static VALUE @@ -4102,7 +4821,7 @@ rb_ary_times(VALUE ary, VALUE times) len = NUM2LONG(times); if (len == 0) { - ary2 = ary_new(rb_obj_class(ary), 0); + ary2 = ary_new(rb_cArray, 0); goto out; } if (len < 0) { @@ -4113,7 +4832,7 @@ rb_ary_times(VALUE ary, VALUE times) } 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_TRANSIENT(ary); @@ -4134,22 +4853,16 @@ rb_ary_times(VALUE ary, VALUE times) /* * call-seq: - * ary.assoc(obj) -> element_ary or nil - * - * Searches through an array whose elements are also arrays comparing +obj+ - * with the first element of each contained array using obj.==. + * array.assoc(obj) -> found_array or nil * - * Returns the first contained array that matches (that is, the first - * associated array), or +nil+ if no match is found. + * Returns the first element in +self+ that is an \Array + * whose first element == +obj+: + * 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: #rassoc. */ VALUE @@ -4169,20 +4882,16 @@ rb_ary_assoc(VALUE ary, VALUE key) /* * call-seq: - * ary.rassoc(obj) -> element_ary or nil + * array.rassoc(obj) -> found_array or nil * - * Searches through the array whose elements are also arrays. + * Returns the first element in +self+ that is an \Array + * whose second element == +obj+: + * a = [{foo: 0}, [2, 4], [4, 5, 6], [4, 5]] + * a.rassoc(4) # => [2, 4] * - * Compares +obj+ with the second element of each contained array using - * obj.==. + * Returns +nil+ if no such element is found. * - * Returns the first contained array that matches +obj+. - * - * See also Array#assoc. - * - * a = [ [ 1, "one"], [2, "two"], [3, "three"], ["ii", "two"] ] - * a.rassoc("two") #=> [2, "two"] - * a.rassoc("four") #=> nil + * Related: #assoc. */ VALUE @@ -4237,16 +4946,19 @@ recursive_equal(VALUE ary1, VALUE ary2, int recur) /* * call-seq: - * ary == other_ary -> bool + * array == other_array -> true or false * - * 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+. + * Returns +true+ if both array.size == other_array.size + * and for each index +i+ in +array+, array[i] == other_array[i]: + * a0 = [:foo, 'bar', 2] + * a1 = [:foo, 'bar', 2.0] + * a1 == a0 # => true + * [] == [] # => true * - * [ "a", "c" ] == [ "a", "c", 7 ] #=> false - * [ "a", "c", 7 ] == [ "a", "c", 7 ] #=> true - * [ "a", "c", 7 ] == [ "a", "d", "f" ] #=> false + * Otherwise, returns +false+. * + * This method is different from method Array#eql?, + * which compares elements using Object#eql?. */ static VALUE @@ -4279,10 +4991,18 @@ recursive_eql(VALUE ary1, VALUE ary2, int recur) /* * call-seq: - * ary.eql?(other) -> true or false + * array.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+, self[i].eql? other_array[i]: + * 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#==}[#method-i-3D-3D], + * which compares using method Object#==. */ static VALUE @@ -4297,14 +5017,13 @@ rb_ary_eql(VALUE ary1, VALUE ary2) /* * call-seq: - * ary.hash -> integer + * array.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?). - * - * See also Object#hash. + * Two arrays with the same content will have the same hash code (and will compare using eql?): + * [0, 1, 2].hash == [0, 1, 2].hash # => true + * [0, 1, 2].hash == [0, 1, 3].hash # => false */ static VALUE @@ -4326,14 +5045,12 @@ rb_ary_hash(VALUE ary) /* * call-seq: - * ary.include?(object) -> true or false - * - * Returns +true+ if the given +object+ is present in +self+ (that is, if any - * element == +object+), otherwise returns +false+. + * array.include?(obj) -> true or false * - * a = [ "a", "b", "c" ] - * a.include?("b") #=> true - * a.include?("z") #=> false + * Returns +true+ if for some index +i+ in +self+, obj == self[i]; + * otherwise +false+: + * [0, 1, 2].include?(2) # => true + * [0, 1, 2].include?(3) # => false */ VALUE @@ -4388,32 +5105,24 @@ recursive_cmp(VALUE ary1, VALUE ary2, int recur) /* * call-seq: - * ary <=> other_ary -> -1, 0, +1 or nil - * - * Comparison --- Returns an integer (+-1+, +0+, or +1) if this - * array is less than, equal to, or greater than +other_ary+. - * - * Each object in each array is compared (using the <=> operator). + * array <=> other_array -> -1, 0, or 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. + * Returns -1, 0, or 1 as +self+ is less than, equal to, or greater than +other_array+. + * For each index +i+ in +self+, evaluates result = self[i] <=> other_array[i]. * - * 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. + * Returns -1 if any result is -1: + * [0, 1, 2] <=> [0, 1, 3] # => -1 * - * +nil+ is returned if the +other_ary+ is not an array or if the comparison - * of two elements returned +nil+. - * - * [ "a", "a", "c" ] <=> [ "a", "b", "c" ] #=> -1 - * [ 1, 2, 3, 4, 5, 6 ] <=> [ 1, 2 ] #=> +1 - * [ 1, 2 ] <=> [ 1, :two ] #=> nil + * Returns 1 if any result is 1: + * [0, 1, 2] <=> [0, 1, 1] # => 1 * + * When all results are zero: + * - Returns -1 if +array+ is smaller than +other_array+: + * [0, 1, 2] <=> [0, 1, 2, 3] # => -1 + * - Returns 1 if +array+ is larger than +other_array+: + * [0, 1, 2] <=> [0, 1] # => 1 + * - Returns 0 if +array+ and +other_array+ are the same size: + * [0, 1, 2] <=> [0, 1, 2] # => 0 */ VALUE @@ -4494,25 +5203,17 @@ ary_recycle_hash(VALUE hash) /* * call-seq: - * ary - other_ary -> new_ary - * - * Array Difference - * - * Returns a new array that is a copy of the original array, removing all - * occurrences of any item that also appear in +other_ary+. The order is - * preserved from the original array. - * - * It compares elements using their #hash and #eql? methods for efficiency. + * array - other_array -> new_array * - * [ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ] #=> [ 3, 3, 5 ] + * Returns a new \Array containing only those elements from +array+ + * that are not found in \Array +other_array+; + * items are compared using eql?; + * the order from +array+ is preserved: + * [0, 1, 1, 2, 1, 1, 3, 1, 1] - [1] # => [0, 2, 3] + * [0, 1, 2, 3] - [3, 0] # => [1, 2] + * [0, 1, 2] - [4] # => [0, 1, 2] * - * Note that while 1 and 2 were only present once in the array argument, and - * were present twice in the receiver array, all occurrences of each Integer are - * removed in the returned array. - * - * If you need set-like behavior, see the library class Set. - * - * See also Array#difference. + * Related: Array#difference. */ static VALUE @@ -4523,6 +5224,7 @@ rb_ary_diff(VALUE ary1, VALUE ary2) long i; 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) { @@ -4545,31 +5247,18 @@ rb_ary_diff(VALUE ary1, VALUE ary2) /* * call-seq: - * ary.difference(other_ary1, other_ary2, ...) -> new_ary - * - * Array Difference - * - * Returns a new array that is a copy of the original array, removing all - * occurrences of any item that also appear in +other_ary+. The order is - * preserved from the original array. - * - * It compares elements using their #hash and #eql? methods for efficiency. - * - * [ 1, 1, 2, 2, 3, 3, 4, 5 ].difference([ 1, 2, 4 ]) #=> [ 3, 3, 5 ] - * - * Note that while 1 and 2 were only present once in the array argument, and - * were present twice in the receiver array, all occurrences of each Integer are - * removed in the returned array. - * - * Multiple array arguments can be supplied and all occurrences of any element - * in those supplied arrays that match the receiver will be removed from the - * returned array. + * array.difference(*other_arrays) -> new_array * - * [ 1, 'c', :s, 'yep' ].difference([ 1 ], [ 'a', 'c' ]) #=> [ :s, "yep" ] + * Returns a new \Array containing only those elements from +self+ + * that are not found in any of the Arrays +other_arrays+; + * items are compared using eql?; order from +self+ is preserved: + * [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] * - * If you need set-like behavior, see the library class Set. + * Returns a copy of +self+ if no arguments given. * - * See also Array#-. + * Related: Array#-. */ static VALUE @@ -4611,17 +5300,17 @@ rb_ary_difference_multi(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary & other_ary -> new_ary + * array & other_array -> new_array * - * Set Intersection --- Returns a new array containing unique elements common to the - * two arrays. The order is preserved from the original array. + * Returns a new \Array containing each element found in both +array+ and \Array +other_array+; + * duplicates are omitted; items are compared using eql?: + * [0, 1, 2, 3] & [1, 2] # => [1, 2] + * [0, 1, 0, 1] & [0, 1] # => [0, 1] * - * It compares elements using their #hash and #eql? methods for efficiency. + * Preserves order from +array+: + * [0, 1, 2] & [3, 2, 1, 0] # => [0, 1, 2] * - * [ 1, 1, 3, 5 ] & [ 3, 2, 1 ] #=> [ 1, 3 ] - * [ 'a', 'b', 'b', 'z' ] & [ 'a', 'b', 'c' ] #=> [ 'a', 'b' ] - * - * See also Array#uniq. + * Related: Array#intersection. */ @@ -4662,19 +5351,20 @@ rb_ary_and(VALUE ary1, VALUE ary2) /* * call-seq: - * ary.intersection(other_ary1, other_ary2, ...) -> new_ary + * array.intersection(*other_arrays) -> new_array * - * Set Intersection --- Returns a new array containing unique elements common - * to +self+ and other_arys. Order is preserved from the original - * array. + * Returns a new \Array containing each element found both in +self+ + * and in all of the given Arrays +other_arrays+; + * duplicates are omitted; items are compared using eql?: + * [0, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3]) # => [0, 1] + * [0, 0, 1, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3]) # => [0, 1] * - * It compares elements using their #hash and #eql? methods for efficiency. + * Preserves order from +self+: + * [0, 1, 2].intersection([2, 1, 0]) # => [0, 1, 2] * - * [ 1, 1, 3, 5 ].intersection([ 3, 2, 1 ]) # => [ 1, 3 ] - * [ "a", "b", "z" ].intersection([ "a", "b", "c" ], [ "b" ]) # => [ "b" ] - * [ "a" ].intersection #=> [ "a" ] + * Returns a copy of +self+ if no arguments given. * - * See also Array#&. + * Related: Array#&. */ static VALUE @@ -4723,17 +5413,16 @@ rb_ary_union_hash(VALUE hash, VALUE ary2) /* * call-seq: - * ary | other_ary -> new_ary - * - * Set Union --- Returns a new array by joining +ary+ with +other_ary+, - * excluding any duplicates and preserving the order from the given arrays. + * array | other_array -> new_array * - * It compares elements using their #hash and #eql? methods for efficiency. + * Returns the union of +array+ and \Array +other_array+; + * duplicates are removed; order is preserved; + * items are compared using eql?: + * [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" ] - * [ "c", "d", "a" ] | [ "a", "b", "c" ] #=> [ "c", "d", "a", "b" ] - * - * See also Array#union. + * Related: Array#union. */ static VALUE @@ -4759,18 +5448,17 @@ rb_ary_or(VALUE ary1, VALUE ary2) /* * call-seq: - * ary.union(other_ary1, other_ary2, ...) -> new_ary - * - * Set Union --- Returns a new array by joining other_arys with +self+, - * excluding any duplicates and preserving the order from the given arrays. + * array.union(*other_arrays) -> new_array * - * It compares elements using their #hash and #eql? methods for efficiency. + * Returns a new \Array that is the union of +self+ and all given Arrays +other_arrays+; + * duplicates are removed; order is preserved; items are compared using eql?: + * [0, 1, 2, 3].union([4, 5], [6, 7]) # => [0, 1, 2, 3, 4, 5, 6, 7] + * [0, 1, 1].union([2, 1], [3, 1]) # => [0, 1, 2, 3] + * [0, 1, 2, 3].union([3, 2], [1, 0]) # => [0, 1, 2, 3] * - * [ "a", "b", "c" ].union( [ "c", "d", "a" ] ) #=> [ "a", "b", "c", "d" ] - * [ "a" ].union( ["e", "b"], ["a", "c", "b"] ) #=> [ "a", "e", "b", "c" ] - * [ "a" ].union #=> [ "a" ] + * Returns a copy of +self+ if no arguments given. * - * See also Array#|. + * Related: Array#|. */ static VALUE @@ -4786,44 +5474,199 @@ rb_ary_union_multi(int argc, VALUE *argv, VALUE ary) sum += RARRAY_LEN(argv[i]); } - if (sum <= SMALL_ARRAY_LEN) { - ary_union = rb_ary_new(); + if (sum <= SMALL_ARRAY_LEN) { + 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]); + + ary_union = rb_hash_values(hash); + ary_recycle_hash(hash); + return ary_union; +} + +/* + * call-seq: + * ary.intersect?(other_ary) -> true or false + * + * Returns +true+ if the array and +other_ary+ have at least one element in + * common, otherwise returns +false+. + * + * a = [ 1, 2, 3 ] + * b = [ 3, 4, 5 ] + * c = [ 5, 6, 7 ] + * a.intersect?(b) #=> true + * a.intersect?(c) #=> false + */ + +static VALUE +rb_ary_intersect_p(VALUE ary1, VALUE ary2) +{ + 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(ary2)) { + longer = ary1; + shorter = ary2; + } + + hash = ary_make_hash(shorter); + result = Qfalse; + + for (i=0; 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; +} - rb_ary_union(ary_union, ary); - for (i = 0; i < argc; i++) rb_ary_union(ary_union, argv[i]); +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)); - return ary_union; - } + VALUE v; + for (; i < n; ++i) { + v = RARRAY_AREF(ary, i); - hash = ary_make_hash(ary); - for (i = 0; i < argc; i++) rb_ary_union_hash(hash, argv[i]); + if (STRING_P(v)) { + if (rb_str_cmp(vmax, v) < 0) { + vmax = v; + } + } + else { + return ary_max_generic(ary, i, vmax); + } + } - ary_union = rb_hash_values(hash); - ary_recycle_hash(hash); - return ary_union; + return vmax; } /* * call-seq: - * ary.max -> obj - * ary.max {|a, b| block} -> obj - * ary.max(n) -> array - * ary.max(n) {|a, b| block} -> array + * array.max -> element + * array.max {|a, b| ... } -> element + * array.max(n) -> new_array + * array.max(n) {|a, b| ... } -> new_array * - * Returns the object in _ary_ with the maximum value. The - * first form assumes all objects implement Comparable; - * the second uses the block to return a <=> b. + * Returns one of the following: + * - The maximum-valued element from +self+. + * - A new \Array of maximum-valued elements selected from +self+. * - * ary = %w(albatross dog horse) - * ary.max #=> "horse" - * ary.max {|a, b| a.length <=> b.length} #=> "albatross" + * When no block is given, each element in +self+ must respond to method <=> + * with an \Integer. * - * If the +n+ argument is given, maximum +n+ elements are returned - * as an array. + * With no argument and no block, returns the element in +self+ + * having the maximum value per method <=>: + * [0, 1, 2].max # => 2 * - * ary = %w[albatross dog horse] - * ary.max(2) #=> ["horse", "dog"] - * ary.max(2) {|a, b| a.length <=> b.length } #=> ["albatross", "horse"] + * With an argument \Integer +n+ and no block, returns a new \Array with at most +n+ elements, + * in descending order per method <=>: + * [0, 1, 2, 3].max(3) # => [3, 2, 1] + * [0, 1, 2, 3].max(6) # => [3, 2, 1, 0] + * + * When a block is given, the block must return an \Integer. + * + * With a block and no argument, calls the block self.size-1 times to compare elements; + * returns the element having the maximum value per the block: + * ['0', '00', '000'].max {|a, b| a.size <=> b.size } # => "000" + * + * With an argument +n+ and a block, returns a new \Array with at most +n+ elements, + * in descending order per the block: + * ['0', '00', '000'].max(2) {|a, b| a.size <=> b.size } # => ["000", "00"] */ static VALUE rb_ary_max(int argc, VALUE *argv, VALUE ary) @@ -4836,6 +5679,7 @@ rb_ary_max(int argc, VALUE *argv, VALUE ary) 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); @@ -4844,39 +5688,148 @@ rb_ary_max(int argc, VALUE *argv, VALUE ary) } } } - else { - for (i = 0; i < RARRAY_LEN(ary); i++) { - v = RARRAY_AREF(ary, i); - if (result == Qundef || OPTIMIZED_CMP(v, result, cmp_opt) > 0) { - result = v; - } - } + else if (n > 0) { + result = RARRAY_AREF(ary, 0); + if (n > 1) { + if (FIXNUM_P(result) && CMP_OPTIMIZABLE(cmp_opt, Integer)) { + return ary_max_opt_fixnum(ary, 1, result); + } + else if (STRING_P(result) && CMP_OPTIMIZABLE(cmp_opt, String)) { + return ary_max_opt_string(ary, 1, result); + } + else if (RB_FLOAT_TYPE_P(result) && CMP_OPTIMIZABLE(cmp_opt, Float)) { + return ary_max_opt_float(ary, 1, result); + } + else { + return ary_max_generic(ary, 1, result); + } + } } if (result == Qundef) 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: - * ary.min -> obj - * ary.min {| a,b | block } -> obj - * ary.min(n) -> array - * ary.min(n) {| a,b | block } -> array + * array.min -> element + * array.min { |a, b| ... } -> element + * array.min(n) -> new_array + * array.min(n) { |a, b| ... } -> new_array + * + * Returns one of the following: + * - The minimum-valued element from +self+. + * - A new \Array of minimum-valued elements selected from +self+. + * + * When no block is given, each element in +self+ must respond to method <=> + * with an \Integer. + * + * With no argument and no block, returns the element in +self+ + * having the minimum value per method <=>: + * [0, 1, 2].min # => 0 * - * Returns the object in _ary_ with the minimum value. The - * first form assumes all objects implement Comparable; - * the second uses the block to return a <=> b. + * With \Integer argument +n+ and no block, returns a new \Array with at most +n+ elements, + * in ascending order per method <=>: + * [0, 1, 2, 3].min(3) # => [0, 1, 2] + * [0, 1, 2, 3].min(6) # => [0, 1, 2, 3] * - * ary = %w(albatross dog horse) - * ary.min #=> "albatross" - * ary.min {|a, b| a.length <=> b.length} #=> "dog" + * When a block is given, the block must return an Integer. * - * If the +n+ argument is given, minimum +n+ elements are returned - * as an array. + * With a block and no argument, calls the block self.size-1 times to compare elements; + * returns the element having the minimum value per the block: + * ['0', '00', '000'].min { |a, b| a.size <=> b.size } # => "0" * - * ary = %w[albatross dog horse] - * ary.min(2) #=> ["albatross", "dog"] - * ary.min(2) {|a, b| a.length <=> b.length } #=> ["dog", "horse"] + * With an argument +n+ and a block, returns a new \Array with at most +n+ elements, + * in ascending order per the block: + * ['0', '00', '000'].min(2) {|a, b| a.size <=> b.size } # => ["0", "00"] */ static VALUE rb_ary_min(int argc, VALUE *argv, VALUE ary) @@ -4889,6 +5842,7 @@ rb_ary_min(int argc, VALUE *argv, VALUE ary) 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); @@ -4897,13 +5851,22 @@ rb_ary_min(int argc, VALUE *argv, VALUE ary) } } } - else { - for (i = 0; i < RARRAY_LEN(ary); i++) { - v = RARRAY_AREF(ary, i); - if (result == Qundef || OPTIMIZED_CMP(v, result, cmp_opt) < 0) { - result = v; - } - } + else if (n > 0) { + result = RARRAY_AREF(ary, 0); + if (n > 1) { + if (FIXNUM_P(result) && CMP_OPTIMIZABLE(cmp_opt, Integer)) { + return ary_min_opt_fixnum(ary, 1, result); + } + else if (STRING_P(result) && CMP_OPTIMIZABLE(cmp_opt, String)) { + return ary_min_opt_string(ary, 1, result); + } + else if (RB_FLOAT_TYPE_P(result) && CMP_OPTIMIZABLE(cmp_opt, Float)) { + return ary_min_opt_float(ary, 1, result); + } + else { + return ary_min_generic(ary, 1, result); + } + } } if (result == Qundef) return Qnil; return result; @@ -4911,14 +5874,23 @@ rb_ary_min(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary.minmax -> [obj, obj] - * ary.minmax {| a,b | block } -> [obj, obj] - * - * Returns a two element array which contains the minimum and the - * maximum value in the array. - * - * Can be given an optional block to override the default comparison - * method a <=> b. + * array.minmax -> [min_val, max_val] + * array.minmax {|a, b| ... } -> [min_val, max_val] + * + * Returns a new 2-element \Array containing the minimum and maximum values + * from +self+, either per method <=> or per a given block:. + * + * When no block is given, each element in +self+ must respond to method <=> + * with an \Integer; + * returns a new 2-element \Array containing the minimum and maximum values + * from +self+, per method <=>: + * [0, 1, 2].minmax # => [0, 2] + * + * When a block is given, the block must return an \Integer; + * the block is called self.size-1 times to compare elements; + * returns a new 2-element \Array containing the minimum and maximum values + * from +self+, per the block: + * ['0', '00', '000'].minmax {|a, b| a.size <=> b.size } # => ["0", "000"] */ static VALUE rb_ary_minmax(VALUE ary) @@ -4938,31 +5910,31 @@ push_value(st_data_t key, st_data_t val, st_data_t ary) /* * call-seq: - * ary.uniq! -> ary or nil - * ary.uniq! {|item| ...} -> ary or nil - * - * Removes duplicate elements from +self+. - * - * If a block is given, it will use the return value of the block for - * comparison. + * array.uniq! -> self or nil + * array.uniq! {|element| ... } -> self or nil * - * It compares values using their #hash and #eql? methods for efficiency. + * Removes duplicate elements from +self+, the first occurrence always being retained; + * returns +self+ if any elements removed, +nil+ otherwise. * - * +self+ is traversed in order, and the first occurrence is kept. + * With no block given, identifies and removes elements using method eql? + * to compare. * - * Returns +nil+ if no changes are made (that is, no duplicates are found). + * Returns +self+ if any elements removed: + * a = [0, 0, 1, 1, 2, 2] + * a.uniq! # => [0, 1, 2] * - * a = [ "a", "a", "b", "b", "c" ] - * a.uniq! # => ["a", "b", "c"] + * Returns +nil+ if no elements removed. * - * b = [ "a", "b", "c" ] - * b.uniq! # => nil + * With a block given, calls the block for each element; + * identifies (using method eql?) and removes + * elements for which the block returns duplicate values. * - * c = [["student","sam"], ["student","george"], ["teacher","matz"]] - * c.uniq! {|s| s.first} # => [["student", "sam"], ["teacher", "matz"]] + * Returns +self+ if any elements removed: + * a = ['a', 'aa', 'aaa', 'b', 'bb', 'bbb'] + * a.uniq! {|element| element.size } # => ['a', 'aa', 'aaa'] * + * Returns +nil+ if no elements removed. */ - static VALUE rb_ary_uniq_bang(VALUE ary) { @@ -4996,23 +5968,22 @@ rb_ary_uniq_bang(VALUE ary) /* * call-seq: - * ary.uniq -> new_ary - * ary.uniq {|item| ...} -> new_ary - * - * Returns a new array by removing duplicate values in +self+. - * - * If a block is given, it will use the return value of the block for comparison. - * - * It compares values using their #hash and #eql? methods for efficiency. - * - * +self+ is traversed in order, and the first occurrence is kept. - * - * a = [ "a", "a", "b", "b", "c" ] - * a.uniq # => ["a", "b", "c"] - * - * b = [["student","sam"], ["student","george"], ["teacher","matz"]] - * b.uniq {|s| s.first} # => [["student", "sam"], ["teacher", "matz"]] - * + * array.uniq -> new_array + * array.uniq {|element| ... } -> new_array + * + * Returns a new \Array containing those elements from +self+ that are not duplicates, + * the first occurrence always being retained. + * + * With no block given, identifies and omits duplicates using method eql? + * to compare. + * a = [0, 0, 1, 1, 2, 2] + * a.uniq # => [0, 1, 2] + * + * With a block given, calls the block for each element; + * identifies (using method eql?) and omits duplicate values, + * that is, those elements for which the block returns the same value: + * a = ['a', 'aa', 'aaa', 'b', 'bb', 'bbb'] + * a.uniq {|element| element.size } # => ["a", "aa", "aaa"] */ static VALUE @@ -5032,7 +6003,6 @@ rb_ary_uniq(VALUE ary) hash = ary_make_hash(ary); uniq = rb_hash_values(hash); } - RBASIC_SET_CLASS(uniq, rb_obj_class(ary)); if (hash) { ary_recycle_hash(hash); } @@ -5042,14 +6012,11 @@ rb_ary_uniq(VALUE ary) /* * call-seq: - * ary.compact! -> ary or nil + * array.compact! -> self or nil * - * Removes +nil+ elements from the array. + * Removes all +nil+ elements from +self+. * - * Returns +nil+ if no changes were made, otherwise returns the array. - * - * [ "a", nil, "b", nil, "c" ].compact! #=> [ "a", "b", "c" ] - * [ "a", "b", "c" ].compact! #=> nil + * Returns +self+ if any elements removed, otherwise +nil+. */ static VALUE @@ -5077,12 +6044,11 @@ rb_ary_compact_bang(VALUE ary) /* * call-seq: - * ary.compact -> new_ary - * - * Returns a copy of +self+ with all +nil+ elements removed. + * array.compact -> new_array * - * [ "a", nil, "b", nil, "c", nil ].compact - * #=> [ "a", "b", "c" ] + * Returns a new \Array containing all non-+nil+ elements from +self+: + * a = [nil, 0, nil, 1, nil, 2, nil] + * a.compact # => [0, 1, 2] */ static VALUE @@ -5095,23 +6061,26 @@ rb_ary_compact(VALUE ary) /* * call-seq: - * ary.count -> int - * ary.count(obj) -> int - * ary.count {|item| block} -> int + * array.count -> an_integer + * array.count(obj) -> an_integer + * array.count {|element| ... } -> an_integer * - * Returns the number of elements. + * Returns a count of specified elements. * - * If an argument is given, counts the number of elements which equal +obj+ - * using ==. + * With no argument and no block, returns the count of all elements: + * [0, 1, 2].count # => 3 + * [].count # => 0 * - * If a block is given, counts the number of elements for which the block - * returns a true value. + * With argument +obj+, returns the count of elements == to +obj+: + * [0, 1, 2, 0.0].count(0) # => 2 + * [0, 1, 2].count(3) # => 0 * - * 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 +obj+ and a block given, issues a warning, ignores the block, + * and returns the count of elements == to +obj+: */ static VALUE @@ -5148,8 +6117,8 @@ static VALUE flatten(VALUE ary, int level) { long i; - VALUE stack, result, tmp, elt, vmemo; - st_table *memo; + VALUE stack, result, tmp = 0, elt, vmemo; + st_table *memo = 0; st_data_t id; for (i = 0; i < RARRAY_LEN(ary); i++) { @@ -5161,8 +6130,6 @@ flatten(VALUE ary, int level) } if (i == RARRAY_LEN(ary)) { return ary; - } else if (tmp == ary) { - rb_raise(rb_eArgError, "tried to flatten recursive array"); } result = ary_new(0, RARRAY_LEN(ary)); @@ -5173,12 +6140,14 @@ flatten(VALUE ary, int level) rb_ary_push(stack, ary); rb_ary_push(stack, LONG2NUM(i + 1)); - vmemo = rb_hash_new(); - RBASIC_CLEAR_CLASS(vmemo); - memo = st_init_numtable(); - rb_hash_st_table_set(vmemo, memo); - st_insert(memo, (st_data_t)ary, (st_data_t)Qtrue); - st_insert(memo, (st_data_t)tmp, (st_data_t)Qtrue); + if (level < 0) { + vmemo = rb_hash_new(); + RBASIC_CLEAR_CLASS(vmemo); + memo = st_init_numtable(); + rb_hash_st_table_set(vmemo, memo); + st_insert(memo, (st_data_t)ary, (st_data_t)Qtrue); + st_insert(memo, (st_data_t)tmp, (st_data_t)Qtrue); + } ary = tmp; i = 0; @@ -5192,20 +6161,24 @@ flatten(VALUE ary, int level) } tmp = rb_check_array_type(elt); if (RBASIC(result)->klass) { - RB_GC_GUARD(vmemo); - st_clear(memo); + if (memo) { + RB_GC_GUARD(vmemo); + st_clear(memo); + } rb_raise(rb_eRuntimeError, "flatten reentered"); } if (NIL_P(tmp)) { rb_ary_push(result, elt); } else { - id = (st_data_t)tmp; - if (st_is_member(memo, id)) { - st_clear(memo); - rb_raise(rb_eArgError, "tried to flatten recursive array"); + if (memo) { + id = (st_data_t)tmp; + if (st_is_member(memo, id)) { + st_clear(memo); + rb_raise(rb_eArgError, "tried to flatten recursive array"); + } + st_insert(memo, id, (st_data_t)Qtrue); } - st_insert(memo, id, (st_data_t)Qtrue); rb_ary_push(stack, ary); rb_ary_push(stack, LONG2NUM(i)); ary = tmp; @@ -5215,37 +6188,49 @@ flatten(VALUE ary, int level) if (RARRAY_LEN(stack) == 0) { break; } - id = (st_data_t)ary; - st_delete(memo, &id, 0); + if (memo) { + id = (st_data_t)ary; + st_delete(memo, &id, 0); + } tmp = rb_ary_pop(stack); i = NUM2LONG(tmp); ary = rb_ary_pop(stack); } - st_clear(memo); + if (memo) { + st_clear(memo); + } - RBASIC_SET_CLASS(result, rb_obj_class(ary)); + RBASIC_SET_CLASS(result, rb_cArray); return result; } /* * call-seq: - * ary.flatten! -> ary or nil - * ary.flatten!(level) -> ary or nil - * - * Flattens +self+ in place. - * - * Returns +nil+ if no modifications were made (i.e., the array contains no - * subarrays.) - * - * The optional +level+ argument determines the level of recursion to flatten. - * - * 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]] + * array.flatten! -> self or nil + * array.flatten!(level) -> self or nil + * + * Replaces each nested \Array in +self+ with the elements from that \Array; + * returns +self+ if any changes, +nil+ otherwise. + * + * With non-negative \Integer argument +level+, flattens recursively through +level+ levels: + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten!(1) # => [0, 1, [2, 3], 4, 5] + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten!(2) # => [0, 1, 2, 3, 4, 5] + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten!(3) # => [0, 1, 2, 3, 4, 5] + * [0, 1, 2].flatten!(1) # => nil + * + * With no argument, a +nil+ argument, or with negative argument +level+, flattens all levels: + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten! # => [0, 1, 2, 3, 4, 5] + * [0, 1, 2].flatten! # => nil + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten!(-1) # => [0, 1, 2, 3, 4, 5] + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten!(-2) # => [0, 1, 2, 3, 4, 5] + * [0, 1, 2].flatten!(-1) # => nil */ static VALUE @@ -5272,24 +6257,32 @@ rb_ary_flatten_bang(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary.flatten -> new_ary - * ary.flatten(level) -> new_ary - * - * Returns a new array that is a one-dimensional flattening of +self+ - * (recursively). - * - * That is, for every element that is an array, extract its elements into - * the new array. - * - * The optional +level+ argument determines the level of recursion to - * flatten. - * - * 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]] + * array.flatten -> new_array + * array.flatten(level) -> new_array + * + * Returns a new \Array that is a recursive flattening of +self+: + * - Each non-Array element is unchanged. + * - Each \Array is replaced by its individual elements. + * + * With non-negative \Integer argument +level+, flattens recursively through +level+ levels: + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten(0) # => [0, [1, [2, 3], 4], 5] + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten(1) # => [0, 1, [2, 3], 4, 5] + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten(2) # => [0, 1, 2, 3, 4, 5] + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten(3) # => [0, 1, 2, 3, 4, 5] + * + * With no argument, a +nil+ argument, or with negative argument +level+, flattens all levels: + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten # => [0, 1, 2, 3, 4, 5] + * [0, 1, 2].flatten # => [0, 1, 2] + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten(-1) # => [0, 1, 2, 3, 4, 5] + * a = [ 0, [ 1, [2, 3], 4 ], 5 ] + * a.flatten(-2) # => [0, 1, 2, 3, 4, 5] + * [0, 1, 2].flatten(-1) # => [0, 1, 2] */ static VALUE @@ -5311,45 +6304,13 @@ rb_ary_flatten(int argc, VALUE *argv, VALUE 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, { @@ -5367,80 +6328,24 @@ rb_ary_shuffle_bang(int argc, VALUE *argv, VALUE ary) 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. - * - * a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] - * a.sample #=> 7 - * a.sample(4) #=> [6, 4, 2, 5] - * - * The optional +rng+ argument will be used as the random number generator. - * - * a.sample(random: Random.new(1)) #=> 6 - * a.sample(4, random: Random.new(1)) #=> [6, 10, 9, 2] - */ - - 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 (rb_check_arity(argc, 0, 1) == 0) { + if (!to_array) { if (len < 2) i = 0; else @@ -5448,7 +6353,6 @@ rb_ary_sample(int argc, VALUE *argv, VALUE ary) return rb_ary_elt(ary, i); } - nv = argv[0]; n = NUM2LONG(nv); if (n < 0) rb_raise(rb_eArgError, "negative sample number"); if (n > len) n = len; @@ -5470,7 +6374,7 @@ rb_ary_sample(int argc, VALUE *argv, VALUE ary) return rb_ary_new_capa(0); case 1: i = rnds[0]; - return rb_ary_new_from_values(1, &RARRAY_AREF(ary, i)); + return rb_ary_new_from_args(1, RARRAY_AREF(ary, i)); case 2: i = rnds[0]; j = rnds[1]; @@ -5562,6 +6466,12 @@ rb_ary_sample(int argc, VALUE *argv, VALUE ary) return result; } +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) { @@ -5571,7 +6481,7 @@ rb_ary_cycle_size(VALUE self, VALUE args, VALUE eobj) n = RARRAY_AREF(args, 0); } if (RARRAY_LEN(self) == 0) return INT2FIX(0); - if (n == Qnil) return DBL2NUM(HUGE_VAL); + if (NIL_P(n)) return DBL2NUM(HUGE_VAL); mul = NUM2LONG(n); if (mul <= 0) return INT2FIX(0); n = LONG2FIX(mul); @@ -5580,24 +6490,33 @@ rb_ary_cycle_size(VALUE self, VALUE args, VALUE eobj) /* * call-seq: - * ary.cycle(n=nil) {|obj| block} -> nil - * ary.cycle(n=nil) -> Enumerator - * - * Calls the given block for each element +n+ times or forever if +nil+ is - * given. - * - * Does nothing if a non-positive number is given or the array is empty. - * - * Returns +nil+ if the loop has finished without getting interrupted. - * - * If no block is given, an Enumerator is returned instead. - * - * 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. - * + * array.cycle {|element| ... } -> nil + * array.cycle(count) {|element| ... } -> nil + * array.cycle -> new_enumerator + * array.cycle(count) -> new_enumerator + * + * When called with positive \Integer argument +count+ and a block, + * calls the block with each element, then does so again, + * until it has done so +count+ times; returns +nil+: + * output = [] + * [0, 1].cycle(2) {|element| output.push(element) } # => nil + * output # => [0, 1, 0, 1] + * + * If +count+ is zero or negative, does not call the block: + * [0, 1].cycle(0) {|element| fail 'Cannot happen' } # => nil + * [0, 1].cycle(-1) {|element| fail 'Cannot happen' } # => nil + * + * When a block is given, and argument is omitted or +nil+, cycles forever: + * # Prints 0 and 1 forever. + * [0, 1].cycle {|element| puts element } + * [0, 1].cycle(nil) {|element| puts element } + * + * When no block is given, returns a new \Enumerator: + * + * [0, 1].cycle(2) # => # + * [0, 1].cycle # => # => # + * [0, 1].cycle.first(5) # => [0, 1, 0, 1, 0] */ - static VALUE rb_ary_cycle(int argc, VALUE *argv, VALUE ary) { @@ -5691,7 +6610,7 @@ permute0(const long n, const long r, long *const p, char *const used, const VALU /* * 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) @@ -5743,30 +6662,66 @@ 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 - * - * When invoked with a block, yield all permutations of length +n+ of the - * elements of the array, then return the array itself. - * - * If +n+ is not specified, yield all permutations of all elements. - * - * The implementation makes no guarantees about the order in which the - * permutations are yielded. - * - * If no block is given, an Enumerator is returned instead. - * - * Examples: - * - * 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 + * array.permutation {|element| ... } -> self + * array.permutation(n) {|element| ... } -> self + * array.permutation -> new_enumerator + * array.permutation(n) -> new_enumerator + * + * When invoked with a block, yield all permutations of elements of +self+; returns +self+. + * The order of permutations is indeterminate. + * + * When a block and an in-range positive \Integer argument +n+ (0 < n <= self.size) + * are given, calls the block with all +n+-tuple permutations of +self+. + * + * Example: + * a = [0, 1, 2] + * a.permutation(2) {|permutation| p permutation } + * Output: + * [0, 1] + * [0, 2] + * [1, 0] + * [1, 2] + * [2, 0] + * [2, 1] + * Another example: + * a = [0, 1, 2] + * a.permutation(3) {|permutation| p permutation } + * Output: + * [0, 1, 2] + * [0, 2, 1] + * [1, 0, 2] + * [1, 2, 0] + * [2, 0, 1] + * [2, 1, 0] + * + * When +n+ is zero, calls the block once with a new empty \Array: + * a = [0, 1, 2] + * a.permutation(0) {|permutation| p permutation } + * Output: + * [] + * + * When +n+ is out of range (negative or larger than self.size), + * does not call the block: + * a = [0, 1, 2] + * a.permutation(-1) {|permutation| fail 'Cannot happen' } + * a.permutation(4) {|permutation| fail 'Cannot happen' } + * + * When a block given but no argument, + * behaves the same as a.permutation(a.size): + * a = [0, 1, 2] + * a.permutation {|permutation| p permutation } + * Output: + * [0, 1, 2] + * [0, 2, 1] + * [1, 0, 2] + * [1, 2, 0] + * [2, 0, 1] + * [2, 1, 0] + * + * Returns a new \Enumerator if no block given: + * a = [0, 1, 2] + * a.permutation # => # + * a.permutation(2) # => # */ static VALUE @@ -5839,27 +6794,44 @@ rb_ary_combination_size(VALUE ary, VALUE args, VALUE eobj) /* * call-seq: - * ary.combination(n) {|c| block} -> ary - * ary.combination(n) -> Enumerator - * - * When invoked with a block, yields all combinations of length +n+ of elements - * from the array and then returns the array itself. - * - * The implementation makes no guarantees about the order in which the - * combinations are yielded. - * - * If no block is given, an Enumerator is returned instead. - * - * Examples: - * - * 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 - * + * array.combination(n) {|element| ... } -> self + * array.combination(n) -> new_enumerator + * + * Calls the block, if given, with combinations of elements of +self+; + * returns +self+. The order of combinations is indeterminate. + * + * When a block and an in-range positive \Integer argument +n+ (0 < n <= self.size) + * are given, calls the block with all +n+-tuple combinations of +self+. + * + * Example: + * a = [0, 1, 2] + * a.combination(2) {|combination| p combination } + * Output: + * [0, 1] + * [0, 2] + * [1, 2] + * + * Another example: + * a = [0, 1, 2] + * a.combination(3) {|combination| p combination } + * Output: + * [0, 1, 2] + * + * When +n+ is zero, calls the block once with a new empty \Array: + * a = [0, 1, 2] + * a1 = a.combination(0) {|combination| p combination } + * Output: + * [] + * + * When +n+ is out of range (negative or larger than self.size), + * does not call the block: + * a = [0, 1, 2] + * a.combination(-1) {|combination| fail 'Cannot happen' } + * a.combination(4) {|combination| fail 'Cannot happen' } + * + * Returns a new \Enumerator if no block given: + * a = [0, 1, 2] + * a.combination(2) # => # */ static VALUE @@ -5946,27 +6918,59 @@ rb_ary_repeated_permutation_size(VALUE ary, VALUE args, VALUE eobj) /* * call-seq: - * ary.repeated_permutation(n) {|p| block} -> ary - * ary.repeated_permutation(n) -> Enumerator - * - * When invoked with a block, yield all repeated permutations of length +n+ of - * the elements of the array, then return the array itself. - * - * The implementation makes no guarantees about the order in which the repeated - * permutations are yielded. - * - * If no block is given, an Enumerator is returned instead. - * - * Examples: - * - * 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 + * array.repeated_permutation(n) {|permutation| ... } -> self + * array.repeated_permutation(n) -> new_enumerator + * + * Calls the block with each repeated permutation of length +n+ of the elements of +self+; + * each permutation is an \Array; + * returns +self+. The order of the permutations is indeterminate. + * + * When a block and a positive \Integer argument +n+ are given, calls the block with each + * +n+-tuple repeated permutation of the elements of +self+. + * The number of permutations is self.size**n. + * + * +n+ = 1: + * a = [0, 1, 2] + * a.repeated_permutation(1) {|permutation| p permutation } + * Output: + * [0] + * [1] + * [2] + * + * +n+ = 2: + * a.repeated_permutation(2) {|permutation| p permutation } + * Output: + * [0, 0] + * [0, 1] + * [0, 2] + * [1, 0] + * [1, 1] + * [1, 2] + * [2, 0] + * [2, 1] + * [2, 2] + * + * If +n+ is zero, calls the block once with an empty \Array. + * + * If +n+ is negative, does not call the block: + * a.repeated_permutation(-1) {|permutation| fail 'Cannot happen' } + * + * Returns a new \Enumerator if no block given: + * a = [0, 1, 2] + * a.repeated_permutation(2) # => # + * + * Using Enumerators, it's convenient to show the permutations and counts + * for some values of +n+: + * e = a.repeated_permutation(0) + * e.size # => 1 + * e.to_a # => [[]] + * e = a.repeated_permutation(1) + * e.size # => 3 + * e.to_a # => [[0], [1], [2]] + * e = a.repeated_permutation(2) + * e.size # => 9 + * e.to_a # => [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]] */ - static VALUE rb_ary_repeated_permutation(VALUE ary, VALUE num) { @@ -6036,29 +7040,55 @@ rb_ary_repeated_combination_size(VALUE ary, VALUE args, VALUE eobj) /* * call-seq: - * ary.repeated_combination(n) {|c| block} -> ary - * ary.repeated_combination(n) -> Enumerator - * - * When invoked with a block, yields all repeated combinations of length +n+ of - * elements from the array and then returns the array itself. - * - * The implementation makes no guarantees about the order in which the repeated - * combinations are yielded. - * - * If no block is given, an Enumerator is returned instead. - * - * Examples: - * - * 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 - * + * array.repeated_combination(n) {|combination| ... } -> self + * array.repeated_combination(n) -> new_enumerator + * + * Calls the block with each repeated combination of length +n+ of the elements of +self+; + * each combination is an \Array; + * returns +self+. The order of the combinations is indeterminate. + * + * When a block and a positive \Integer argument +n+ are given, calls the block with each + * +n+-tuple repeated combination of the elements of +self+. + * The number of combinations is (n+1)(n+2)/2. + * + * +n+ = 1: + * a = [0, 1, 2] + * a.repeated_combination(1) {|combination| p combination } + * Output: + * [0] + * [1] + * [2] + * + * +n+ = 2: + * a.repeated_combination(2) {|combination| p combination } + * Output: + * [0, 0] + * [0, 1] + * [0, 2] + * [1, 1] + * [1, 2] + * [2, 2] + * + * If +n+ is zero, calls the block once with an empty \Array. + * + * If +n+ is negative, does not call the block: + * a.repeated_combination(-1) {|combination| fail 'Cannot happen' } + * + * Returns a new \Enumerator if no block given: + * a = [0, 1, 2] + * a.repeated_combination(2) # => # + * + * Using Enumerators, it's convenient to show the combinations and counts + * for some values of +n+: + * e = a.repeated_combination(0) + * e.size # => 1 + * e.to_a # => [[]] + * e = a.repeated_combination(1) + * e.size # => 3 + * e.to_a # => [[0], [1], [2]] + * e = a.repeated_combination(2) + * e.size # => 6 + * e.to_a # => [[0, 0], [0, 1], [0, 2], [1, 1], [1, 2], [2, 2]] */ static VALUE @@ -6098,23 +7128,51 @@ rb_ary_repeated_combination(VALUE ary, VALUE num) /* * call-seq: - * ary.product(other_ary, ...) -> new_ary - * ary.product(other_ary, ...) {|p| block} -> ary - * - * Returns an array of all combinations of elements from all arrays. - * - * The length of the returned array is the product of the length of +self+ and - * the argument arrays. - * - * If given a block, #product will yield all combinations and return +self+ - * instead. - * - * [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([]) #=> [] + * array.product(*other_arrays) -> new_array + * array.product(*other_arrays) {|combination| ... } -> self + * + * Computes and returns or yields 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. + * + * When no block is given, returns the combinations as an \Array of Arrays: + * a = [0, 1, 2] + * a1 = [3, 4] + * a2 = [5, 6] + * p = a.product(a1) + * p.size # => 6 # a.size * a1.size + * p # => [[0, 3], [0, 4], [1, 3], [1, 4], [2, 3], [2, 4]] + * p = a.product(a1, a2) + * p.size # => 12 # a.size * a1.size * a2.size + * p # => [[0, 3, 5], [0, 3, 6], [0, 4, 5], [0, 4, 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]] + * + * If any argument is an empty \Array, returns an empty \Array. + * + * If no argument is given, returns an \Array of 1-element Arrays, + * each containing an element of +self+: + * a.product # => [[0], [1], [2]] + * + * When a block is given, yields each combination as an \Array; returns +self+: + * a.product(a1) {|combination| p combination } + * Output: + * [0, 3] + * [0, 4] + * [1, 3] + * [1, 4] + * [2, 3] + * [2, 4] + * + * If any argument is an empty \Array, does not call the block: + * a.product(a1, a2, []) {|combination| fail 'Cannot happen' } + * + * If no argument is given, yields each element of +self+ as a 1-element \Array: + * a.product {|combination| p combination } + * Output: + * [0] + * [1] + * [2] */ static VALUE @@ -6207,17 +7265,18 @@ rb_ary_product(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary.take(n) -> new_ary - * - * Returns first +n+ elements from the array. - * - * If a negative number is given, raises an ArgumentError. - * - * See also Array#drop - * - * a = [1, 2, 3, 4, 5, 0] - * a.take(3) #=> [1, 2, 3] - * + * array.take(n) -> new_array + * + * Returns a new \Array containing the first +n+ element of +self+, + * where +n+ is a non-negative \Integer; + * does not modify +self+. + * + * Examples: + * a = [0, 1, 2, 3, 4, 5] + * a.take(1) # => [0] + * a.take(2) # => [0, 1] + * a.take(50) # => [0, 1, 2, 3, 4, 5] + * a # => [0, 1, 2, 3, 4, 5] */ static VALUE @@ -6232,19 +7291,22 @@ rb_ary_take(VALUE obj, VALUE n) /* * call-seq: - * ary.take_while {|obj| block} -> new_ary - * ary.take_while -> Enumerator - * - * Passes elements to the block until the block returns +nil+ or +false+, then - * stops iterating and returns an array of all prior elements. - * - * If no block is given, an Enumerator is returned instead. - * - * See also Array#drop_while - * - * a = [1, 2, 3, 4, 5, 0] - * a.take_while {|i| i < 3} #=> [1, 2] - * + * array.take_while {|element| ... } -> new_array + * array.take_while -> new_enumerator + * + * Returns a new \Array containing zero or more leading elements of +self+; + * does not modify +self+. + * + * 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 containing those elements for which the block returned a truthy value: + * 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 # => [0, 1, 2, 3, 4, 5] + * + * With no block given, returns a new \Enumerator: + * [0, 1].take_while # => # */ static VALUE @@ -6261,18 +7323,17 @@ rb_ary_take_while(VALUE ary) /* * call-seq: - * ary.drop(n) -> new_ary - * - * Drops first +n+ elements from +ary+ and returns the rest of the elements in - * an array. - * - * If a negative number is given, raises an ArgumentError. + * array.drop(n) -> new_array * - * See also Array#take - * - * a = [1, 2, 3, 4, 5, 0] - * a.drop(3) #=> [4, 5, 0] + * Returns a new \Array containing all but the first +n+ element of +self+, + * where +n+ is a non-negative \Integer; + * does not modify +self+. * + * Examples: + * 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] */ static VALUE @@ -6285,26 +7346,26 @@ rb_ary_drop(VALUE ary, VALUE n) } 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 - * - * 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. - * - * If no block is given, an Enumerator is returned instead. - * - * See also Array#take_while + * array.drop_while {|element| ... } -> new_array + * array.drop_while -> new_enumerator + + * Returns a new \Array containing zero or more trailing elements of +self+; + * does not modify +self+. * - * a = [1, 2, 3, 4, 5, 0] - * a.drop_while {|i| i < 3 } #=> [3, 4, 5, 0] + * 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: + * a = [0, 1, 2, 3, 4, 5] + * a.drop_while {|element| element < 3 } # => [3, 4, 5] * + * With no block given, returns a new \Enumerator: + * [0, 1].drop_while # => # => # */ static VALUE @@ -6321,10 +7382,32 @@ rb_ary_drop_while(VALUE ary) /* * call-seq: - * ary.any? [{|obj| block} ] -> true or false - * ary.any?(pattern) -> true or false - * - * See also Enumerable#any? + * array.any? -> true or false + * array.any? {|element| ... } -> true or false + * array.any?(obj) -> true or false + * + * Returns +true+ if any element of +self+ meets a given criterion. + * + * With no block given and no argument, returns +true+ if +self+ has any truthy element, + * +false+ otherwise: + * [nil, 0, false].any? # => true + * [nil, false].any? # => false + * [].any? # => false + * + * With a block given and no argument, calls the block with each element in +self+; + * returns +true+ if the block returns any truthy value, +false+ otherwise: + * [0, 1, 2].any? {|element| element > 1 } # => true + * [0, 1, 2].any? {|element| element > 2 } # => false + * + * If argument +obj+ is given, returns +true+ if +obj+.=== any element, + * +false+ otherwise: + * ['food', 'drink'].any?(/foo/) # => true + * ['food', 'drink'].any?(/bar/) # => false + * [].any?(/foo/) # => false + * [0, 1, 2].any?(1) # => true + * [0, 1, 2].any?(3) # => false + * + * Related: Enumerable#any? */ static VALUE @@ -6357,10 +7440,31 @@ rb_ary_any_p(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary.all? [{|obj| block} ] -> true or false - * ary.all?(pattern) -> true or false - * - * See also Enumerable#all? + * array.all? -> true or false + * array.all? {|element| ... } -> true or false + * array.all?(obj) -> true or false + * + * Returns +true+ if all elements of +self+ meet a given criterion. + * + * With no block given and no argument, returns +true+ if +self+ contains only truthy elements, + * +false+ otherwise: + * [0, 1, :foo].all? # => true + * [0, nil, 2].all? # => false + * [].all? # => true + * + * With a block given and no argument, calls the block with each element in +self+; + * returns +true+ if the block returns only truthy values, +false+ otherwise: + * [0, 1, 2].all? { |element| element < 3 } # => true + * [0, 1, 2].all? { |element| element < 2 } # => false + * + * If argument +obj+ is given, returns +true+ if obj.=== every element, +false+ otherwise: + * ['food', 'fool', 'foot'].all?(/foo/) # => true + * ['food', 'drink'].all?(/bar/) # => false + * [].all?(/foo/) # => true + * [0, 0, 0].all?(0) # => true + * [0, 1, 2].all?(1) # => false + * + * Related: Enumerable#all? */ static VALUE @@ -6393,10 +7497,31 @@ rb_ary_all_p(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary.none? [{|obj| block} ] -> true or false - * ary.none?(pattern) -> true or false - * - * See also Enumerable#none? + * array.none? -> true or false + * array.none? {|element| ... } -> true or false + * array.none?(obj) -> true or false + * + * Returns +true+ if no element of +self+ meet a given criterion. + * + * 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 a block given and no argument, 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 + * + * If argument +obj+ is given, returns +true+ if obj.=== no element, +false+ 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 + * + * Related: Enumerable#none? */ static VALUE @@ -6429,10 +7554,35 @@ rb_ary_none_p(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary.one? [{|obj| block} ] -> true or false - * ary.one?(pattern) -> true or false - * - * See also Enumerable#one? + * array.one? -> true or false + * array.one? {|element| ... } -> true or false + * array.one?(obj) -> 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 and no argument, 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 + * + * If argument +obj+ is given, returns +true+ if obj.=== exactly one element, + * +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: Enumerable#one? */ static VALUE @@ -6474,19 +7624,20 @@ rb_ary_one_p(int argc, VALUE *argv, VALUE ary) } /* - * call-seq: - * ary.dig(idx, ...) -> object - * - * Extracts the nested value specified by the sequence of idx - * objects by calling +dig+ at each step, returning +nil+ if any - * intermediate step is +nil+. - * - * a = [[1, [2, 3]]] - * - * a.dig(0, 1, 1) #=> 3 - * a.dig(1, 2, 3) #=> nil - * a.dig(0, 0, 0) #=> TypeError: Integer does not have #dig method - * [42, {foo: :bar}].dig(1, :foo) #=> :bar + * call-seq: + * array.dig(index, *identifiers) -> object + * + * Finds and returns the object in nested objects + * that is 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 */ static VALUE @@ -6505,13 +7656,7 @@ finish_exact_sum(long n, VALUE r, VALUE v, int z) if (n != 0) v = rb_fix_plus(LONG2FIX(n), v); if (r != Qundef) { - /* r can be an Integer when mathn is loaded */ - if (FIXNUM_P(r)) - v = rb_fix_plus(r, v); - else if (RB_TYPE_P(r, T_BIGNUM)) - v = rb_big_plus(r, v); - else - v = rb_rational_plus(r, v); + v = rb_rational_plus(r, v); } else if (!n && z) { v = rb_fix_plus(LONG2FIX(0), v); @@ -6521,44 +7666,35 @@ finish_exact_sum(long n, VALUE r, VALUE v, int z) /* * call-seq: - * ary.sum(init=0) -> number - * ary.sum(init=0) {|e| expr } -> number - * - * Returns the sum of elements. - * For example, [e1, e2, e3].sum returns init + e1 + e2 + e3. - * - * If a block is given, the block is applied to each element - * before addition. - * - * If ary is empty, it returns init. - * - * [].sum #=> 0 - * [].sum(0.0) #=> 0.0 - * [1, 2, 3].sum #=> 6 - * [3, 5.5].sum #=> 8.5 - * [2.5, 3.0].sum(0.0) {|e| e * e } #=> 15.25 - * [Object.new].sum #=> TypeError - * - * The (arithmetic) mean value of an array can be obtained as follows. - * - * mean = ary.sum(0.0) / ary.length - * - * This method can be used for non-numeric objects by - * explicit init argument. - * - * ["a", "b", "c"].sum("") #=> "abc" - * [[1], [[2]], [3]].sum([]) #=> [1, [2], 3] - * - * However, Array#join and Array#flatten is faster than Array#sum for - * array of strings and array of arrays. - * - * ["a", "b", "c"].join #=> "abc" - * [[1], [[2]], [3]].flatten(1) #=> [1, [2], 3] - * - * - * Array#sum method may not respect method redefinition of "+" methods - * such as Integer#+. - * + * array.sum(init = 0) -> object + * array.sum(init = 0) {|element| ... } -> object + * + * When no block is given, returns the object equivalent to: + * sum = init + * array.each {|element| sum += element } + * sum + * For example, [e1, e2, e3].sum returns init + e1 + e2 + e3. + * + * Examples: + * a = [0, 1, 2, 3] + * a.sum # => 6 + * a.sum(100) # => 106 + * + * The elements need not be numeric, but must be +-compatible + * with each other and with +init+: + * a = ['abc', 'def', 'ghi'] + * a.sum('jkl') # => "jklabcdefghi" + * + * When a block is given, it is called with each element + * and the block's return value (instead of the element itself) is used as the addend: + * a = ['zero', 1, :two] + * s = a.sum('Coerced and concatenated: ') {|element| element.to_s } + * 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 @@ -6588,7 +7724,7 @@ rb_ary_sum(int argc, VALUE *argv, VALUE ary) n = 0; } } - else if (RB_TYPE_P(e, T_BIGNUM)) + else if (RB_BIGNUM_TYPE_P(e)) v = rb_big_plus(e, v); else if (RB_TYPE_P(e, T_RATIONAL)) { if (r == Qundef) @@ -6608,7 +7744,7 @@ rb_ary_sum(int argc, VALUE *argv, VALUE ary) if (RB_FLOAT_TYPE_P(e)) { /* * Kahan-Babuska balancing compensated summation algorithm - * See http://link.springer.com/article/10.1007/s00607-005-0139-x + * See https://link.springer.com/article/10.1007/s00607-005-0139-x */ double f, c; double x, t; @@ -6625,7 +7761,7 @@ rb_ary_sum(int argc, VALUE *argv, VALUE ary) x = RFLOAT_VALUE(e); else if (FIXNUM_P(e)) x = FIX2LONG(e); - else if (RB_TYPE_P(e, T_BIGNUM)) + else if (RB_BIGNUM_TYPE_P(e)) x = rb_big2dbl(e); else if (RB_TYPE_P(e, T_RATIONAL)) x = rb_num2dbl(e); @@ -6678,22 +7814,49 @@ rb_ary_deconstruct(VALUE ary) } /* - * Arrays are ordered, integer-indexed collections of any object. + * An \Array is an ordered, integer-indexed collection of objects, + * called _elements_. Any object may be an \Array element. + * + * == \Array Indexes + * + * \Array indexing starts at 0, as in C or Java. + * + * A positive 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. + * - ... * - * 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. + * A non-negative index is in range 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 in range 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. * * == Creating Arrays * - * A new array can be created by using the literal constructor - * []. Arrays can contain different types of objects. For + * You can create an \Array object explicitly with: + * + * - An {array literal}[doc/syntax/literals_rdoc.html#label-Array+Literals]. + * + * You can convert certain objects to Arrays with: + * + * - \Method {Array}[Kernel.html#method-i-Array]. + * + * An \Array can contain different types of objects. For * example, the array below contains an Integer, a String and a Float: * * ary = [1, "two", 3.0] #=> [1, "two", 3.0] * - * An array can also be created by explicitly calling Array.new with zero, one + * An array can also be created by calling Array.new with zero, one * (the initial size of the Array) or two arguments (the initial size and a * default object). * @@ -6913,14 +8076,190 @@ rb_ary_deconstruct(VALUE ary) * 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}[Object.html#class-Object-label-What-27s+Here]. + * - Includes {module Enumerable}[Enumerable.html#module-Enumerable-label-What-27s+Here], + * which provides dozens of additional methods. + * + * Here, class \Array provides methods that are useful for: + * + * - {Creating an Array}[#class-Array-label-Methods+for+Creating+an+Array] + * - {Querying}[#class-Array-label-Methods+for+Querying] + * - {Comparing}[#class-Array-label-Methods+for+Comparing] + * - {Fetching}[#class-Array-label-Methods+for+Fetching] + * - {Assigning}[#class-Array-label-Methods+for+Assigning] + * - {Deleting}[#class-Array-label-Methods+for+Deleting] + * - {Combining}[#class-Array-label-Methods+for+Combining] + * - {Iterating}[#class-Array-label-Methods+for+Iterating] + * - {Converting}[#class-Array-label-Methods+for+Converting] + * - {And more....}[#class-Array-label-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. + * + * === Methods for Querying + * + * #length, #size:: Returns the count of elements. + * #include?:: Returns whether any element == a given object. + * #empty?:: Returns whether there are no elements. + * #all?:: Returns whether all elements meet a given criterion. + * #any?:: Returns whether any element meets a given criterion. + * #none?:: Returns whether no element == a given object. + * #one?:: Returns whether exactly one element == a given object. + * #count:: Returns the count of elements that meet a given criterion. + * #find_index, #index:: Returns the index of the first element that meets a given criterion. + * #rindex:: Returns the index of the last element that meets a given criterion. + * #hash:: Returns the integer hash code. + * + * === Methods for Comparing + * {#<=>}[#method-i-3C-3D-3E]:: Returns -1, 0, or 1 + * as +self+ is less than, equal to, or greater than a given object. + * {#==}[#method-i-3D-3D]:: Returns whether each element in +self+ is == to the + * corresponding element in a given object. + * #eql?:: Returns whether each element in +self+ is eql? to the corresponding + * element in a given object. + + * === Methods for Fetching + * + * These methods do not modify +self+. + * + * #[]:: Returns one or more elements. + * #fetch:: Returns the element at a given offset. + * #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 <=> or a given block. + * #max:: Returns one or more minimum-valued elements, + * as determined by <=> or a given block. + * #minmax:: Returns the minimum-valued and maximum-valued elements, + * as determined by <=> or a given block. + * #assoc:: Returns the first element that is an array + * whose first element == a given object. + * #rassoc:: Returns the first element that is an array + * whose second element == a given object. + * #at:: Returns the element at a given offset. + * #values_at:: Returns the elements at given offsets. + * #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. + * #take:: Returns leading elements as determined by a given index. + * #drop_while:: Returns trailing elements as determined by a given block. + * #take_while:: Returns leading elements as determined by a given block. + * #slice:: Returns consecutive elements as determined by a given argument. + * #sort:: Returns all elements in an order determined by <=> or a given block. + * #reverse:: Returns all elements in reverse order. + * #compact:: Returns an array containing all non-+nil+ elements. + * #select, #filter:: Returns an array containing elements selected by a given block. + * #uniq:: Returns an array containing non-duplicate elements. + * #rotate:: Returns all elements with some rotated from one end to the other. + * #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. + * #sample:: Returns one or more random elements. + * #shuffle:: Returns elements in a random order. + * + * === Methods for Assigning + * + * These methods add, replace, or reorder elements in +self+. + * + * #[]=:: Assigns specified elements with a given object. + * #push, #append, #<<:: Appends trailing elements. + * #unshift, #prepend:: Prepends leading elements. + * #insert:: Inserts given objects at a given offset; does not replace elements. + * #concat:: Appends all elements from given arrays. + * #fill:: Replaces specified elements with specified objects. + * #replace:: Replaces the content of +self+ with the content of a given array. + * #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 <=> or a given block. + * #sort_by!:: Replaces +self+ with its elements sorted, as determined by a given block. + * + * === Methods for Deleting + * + * Each of these methods removes elements from +self+: + * + * #pop:: Removes and returns the last element. + * #shift:: Removes and returns the first element. + * #compact!:: Removes all non-+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. + * #reject!:: Removes elements specified by a given block. + * #select!, #filter!:: Removes elements not specified by a given block. + * #slice!:: Removes and returns a sequence of elements. + * #uniq!:: Removes duplicates. + * + * === Methods for Combining + * + * {#&}[#method-i-26]:: Returns an array containing elements found both in +self+ and a given array. + * #intersection:: Returns an array containing elements found both in +self+ + * and in each given array. + * #+:: Returns an array containing all elements of +self+ followed by all elements of a given array. + * #-:: Returns an array containiing all elements of +self+ that are not found in a given array. + * {#|}[#method-i-7C]:: Returns an array containing all elements of +self+ and all elements of a given array, + * duplicates removed. + * #union:: Returns an array containing all elements of +self+ and all elements of given arrays, + * duplicates removed. + * #difference:: Returns an array containing all elements of +self+ that are not found + * in any of the given arrays.. + * #product:: Returns or yields all combinations of elements from +self+ and given arrays. + * + * === Methods for Iterating + * + * #each:: Passes each element to a given block. + * #reverse_each:: Passes each element, in reverse order, to a given block. + * #each_index:: Passes each element index to a given block. + * #cycle:: Calls a given block with each element, then does so again, + * for a specified number of times, or forever. + * #combination:: Calls a given block with combinations of elements of +self+; + * a combination does not use the same element more than once. + * #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. + * + * === Methods for Converting + * + * #map, #collect:: Returns an array containing the block return-value for each element. + * #map!, #collect!:: Replaces each element with a block return-value. + * #flatten:: Returns an array that is a recursive flattening of +self+. + * #flatten!:: Replaces each nested array in +self+ with the elements from that array. + * #inspect, #to_s:: Returns a new String containing the elements. + * #join:: Returns a newsString 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; + * follow the link for details. + * + * === 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 + * join(field_separator). + * #abbrev:: Returns a hash of unambiguous abbreviations for elements. + * #pack:: Packs the elements into a binary sequence. + * #sum:: Returns a sum of elements according to either + or a given block. */ void Init_Array(void) { -#undef rb_intern -#define rb_intern(str) rb_intern_const(str) - rb_cArray = rb_define_class("Array", rb_cObject); rb_include_module(rb_cArray, rb_mEnumerable); @@ -6950,6 +8289,7 @@ Init_Array(void) 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"); @@ -6962,7 +8302,7 @@ Init_Array(void) 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_index", rb_ary_index, -1); rb_define_method(rb_cArray, "index", rb_ary_index, -1); @@ -7022,9 +8362,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); @@ -7046,6 +8383,6 @@ Init_Array(void) rb_define_method(rb_cArray, "sum", rb_ary_sum, -1); rb_define_method(rb_cArray, "deconstruct", rb_ary_deconstruct, 0); - - id_random = rb_intern("random"); } + +#include "array.rbinc" diff --git a/ruby/array.rb b/ruby/array.rb new file mode 100644 index 000000000..b9fa9844e --- /dev/null +++ b/ruby/array.rb @@ -0,0 +1,69 @@ +class Array + # call-seq: + # array.shuffle!(random: Random) -> array + # + # Shuffles the elements of +self+ in place. + # a = [1, 2, 3] #=> [1, 2, 3] + # a.shuffle! #=> [2, 3, 1] + # a #=> [2, 3, 1] + # + # The optional +random+ argument will be used as the random number generator: + # a.shuffle!(random: Random.new(1)) #=> [1, 3, 2] + def shuffle!(random: Random) + Primitive.rb_ary_shuffle_bang(random) + end + + # call-seq: + # array.shuffle(random: Random) -> 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 +random+ argument will be used as the random number generator: + # a.shuffle(random: Random.new(1)) #=> [1, 3, 2] + def shuffle(random: Random) + Primitive.rb_ary_shuffle(random) + end + + # call-seq: + # array.sample(random: Random) -> object + # array.sample(n, random: Random) -> new_ary + # + # Returns random elements from +self+. + # + # When no arguments are given, returns a random element from +self+: + # a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + # a.sample # => 3 + # a.sample # => 8 + # If +self+ is empty, returns +nil+. + # + # When argument +n+ is given, returns a new \Array containing +n+ random + # elements from +self+: + # a.sample(3) # => [8, 9, 2] + # a.sample(6) # => [9, 6, 10, 3, 1, 4] + # Returns no more than a.size elements + # (because no new duplicates are introduced): + # a.sample(a.size * 2) # => [6, 4, 1, 8, 5, 9, 10, 2, 3, 7] + # But +self+ may contain duplicates: + # a = [1, 1, 1, 2, 2, 3] + # a.sample(a.size * 2) # => [1, 1, 3, 2, 1, 2] + # The argument +n+ must be a non-negative numeric value. + # The order of the result array is unrelated to the order of +self+. + # Returns a new empty \Array if +self+ is empty. + # + # The optional +random+ argument will be 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] + 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 +end diff --git a/ruby/ast.c b/ruby/ast.c index 1133fb8a1..0515689a2 100644 --- a/ruby/ast.c +++ b/ruby/ast.c @@ -1,11 +1,15 @@ /* indent-tabs-mode: nil */ +#include "internal.h" +#include "internal/parse.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 "internal.h" -#include "node.h" #include "vm_core.h" -#include "iseq.h" + #include "builtin.h" static VALUE rb_mAST; @@ -13,7 +17,7 @@ static VALUE rb_cNode; struct ASTNodeData { rb_ast_t *ast; - NODE *node; + const NODE *node; }; static void @@ -40,7 +44,7 @@ static const rb_data_type_t rb_node_type = { static VALUE rb_ast_node_alloc(VALUE klass); static void -setup_node(VALUE obj, rb_ast_t *ast, NODE *node) +setup_node(VALUE obj, rb_ast_t *ast, const NODE *node) { struct ASTNodeData *data; @@ -50,7 +54,7 @@ setup_node(VALUE obj, rb_ast_t *ast, NODE *node) } static VALUE -ast_new_internal(rb_ast_t *ast, NODE *node) +ast_new_internal(rb_ast_t *ast, const NODE *node) { VALUE obj; @@ -60,9 +64,8 @@ ast_new_internal(rb_ast_t *ast, NODE *node) return obj; } -static VALUE rb_ast_parse_str(VALUE str); -static VALUE rb_ast_parse_file(VALUE path); -static VALUE rb_ast_parse_array(VALUE array); +static VALUE rb_ast_parse_str(VALUE str, VALUE keep_script_lines); +static VALUE rb_ast_parse_file(VALUE path, VALUE keep_script_lines); static VALUE ast_parse_new(void) @@ -82,29 +85,31 @@ ast_parse_done(rb_ast_t *ast) } static VALUE -ast_s_parse(rb_execution_context_t *ec, VALUE module, VALUE str) +ast_s_parse(rb_execution_context_t *ec, VALUE module, VALUE str, VALUE keep_script_lines) { - return rb_ast_parse_str(str); + return rb_ast_parse_str(str, keep_script_lines); } static VALUE -rb_ast_parse_str(VALUE str) +rb_ast_parse_str(VALUE str, VALUE keep_script_lines) { rb_ast_t *ast = 0; StringValue(str); - ast = rb_parser_compile_string_path(ast_parse_new(), Qnil, str, 1); + VALUE vparser = ast_parse_new(); + if (RTEST(keep_script_lines)) rb_parser_keep_script_lines(vparser); + ast = rb_parser_compile_string_path(vparser, Qnil, str, 1); return ast_parse_done(ast); } static VALUE -ast_s_parse_file(rb_execution_context_t *ec, VALUE module, VALUE path) +ast_s_parse_file(rb_execution_context_t *ec, VALUE module, VALUE path, VALUE keep_script_lines) { - return rb_ast_parse_file(path); + return rb_ast_parse_file(path, keep_script_lines); } static VALUE -rb_ast_parse_file(VALUE path) +rb_ast_parse_file(VALUE path, VALUE keep_script_lines) { VALUE f; rb_ast_t *ast = 0; @@ -113,7 +118,9 @@ rb_ast_parse_file(VALUE path) FilePathValue(path); f = rb_file_open_str(path, "r"); rb_funcall(f, rb_intern("set_encoding"), 2, rb_enc_from_encoding(enc), rb_str_new_cstr("-")); - ast = rb_parser_compile_file_path(ast_parse_new(), Qnil, f, 1); + VALUE vparser = ast_parse_new(); + if (RTEST(keep_script_lines)) rb_parser_keep_script_lines(vparser); + ast = rb_parser_compile_file_path(vparser, Qnil, f, 1); rb_io_close(f); return ast_parse_done(ast); } @@ -132,16 +139,18 @@ lex_array(VALUE array, int index) } static VALUE -rb_ast_parse_array(VALUE array) +rb_ast_parse_array(VALUE array, VALUE keep_script_lines) { rb_ast_t *ast = 0; array = rb_check_array_type(array); - ast = rb_parser_compile_generic(ast_parse_new(), lex_array, Qnil, array, 1); + VALUE vparser = ast_parse_new(); + if (RTEST(keep_script_lines)) rb_parser_keep_script_lines(vparser); + ast = rb_parser_compile_generic(vparser, lex_array, Qnil, array, 1); return ast_parse_done(ast); } -static VALUE node_children(rb_ast_t*, NODE*); +static VALUE node_children(rb_ast_t*, const NODE*); static VALUE node_find(VALUE self, const int node_id) @@ -184,35 +193,52 @@ script_lines(VALUE path) } static VALUE -ast_s_of(rb_execution_context_t *ec, VALUE module, VALUE body) +ast_s_of(rb_execution_context_t *ec, VALUE module, VALUE body, VALUE keep_script_lines) { - VALUE path, node, lines; + VALUE node, lines = Qnil; + const rb_iseq_t *iseq; int node_id; - const rb_iseq_t *iseq = NULL; - if (rb_obj_is_proc(body)) { - iseq = vm_proc_iseq(body); + 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)) { - iseq = NULL; + if (!rb_obj_is_iseq((VALUE)iseq)) return Qnil; + } + else { + iseq = rb_method_iseq(body); + } + if (iseq) { + node_id = iseq->body->location.node_id; } } - else { - iseq = rb_method_iseq(body); + + if (!iseq) { + return Qnil; } + lines = iseq->body->variable.script_lines; - if (!iseq) return Qnil; + 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"); + } - path = rb_iseq_path(iseq); - node_id = iseq->body->location.node_id; - if (!NIL_P(lines = script_lines(path))) { - node = rb_ast_parse_array(lines); + if (!NIL_P(lines) || !NIL_P(lines = script_lines(path))) { + node = rb_ast_parse_array(lines, keep_script_lines); } - else if (RSTRING_LEN(path) == 2 && memcmp(RSTRING_PTR(path), "-e", 2) == 0) { - node = rb_ast_parse_str(rb_e_script); + else if (e_option) { + node = rb_ast_parse_str(rb_e_script, keep_script_lines); } else { - node = rb_ast_parse_file(path); + node = rb_ast_parse_file(path, keep_script_lines); } return node_find(node, node_id); @@ -242,6 +268,15 @@ ast_node_type(rb_execution_context_t *ec, VALUE self) 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, node) node ? ast_new_internal(ast, node) : Qnil static VALUE @@ -264,13 +299,13 @@ rb_ary_new_from_node_args(rb_ast_t *ast, long n, ...) } static VALUE -dump_block(rb_ast_t *ast, NODE *node) +dump_block(rb_ast_t *ast, const NODE *node) { VALUE ary = rb_ary_new(); do { rb_ary_push(ary, NEW_CHILD(ast, node->nd_head)); } while (node->nd_next && - nd_type(node->nd_next) == NODE_BLOCK && + nd_type_p(node->nd_next, NODE_BLOCK) && (node = node->nd_next, 1)); if (node->nd_next) { rb_ary_push(ary, NEW_CHILD(ast, node->nd_next)); @@ -280,12 +315,12 @@ dump_block(rb_ast_t *ast, NODE *node) } static VALUE -dump_array(rb_ast_t *ast, NODE *node) +dump_array(rb_ast_t *ast, const NODE *node) { VALUE ary = rb_ary_new(); rb_ary_push(ary, NEW_CHILD(ast, node->nd_head)); - while (node->nd_next && nd_type(node->nd_next) == NODE_LIST) { + while (node->nd_next && nd_type_p(node->nd_next, NODE_LIST)) { node = node->nd_next; rb_ary_push(ary, NEW_CHILD(ast, node->nd_head)); } @@ -303,7 +338,21 @@ var_name(ID id) } static VALUE -node_children(rb_ast_t *ast, NODE *node) +no_name_rest(void) +{ + ID rest; + CONST_ID(rest, "NODE_SPECIAL_NO_NAME_REST"); + return ID2SYM(rest); +} + +static VALUE +rest_arg(rb_ast_t *ast, const NODE *rest_arg) +{ + return NODE_NAMED_REST_P(rest_arg) ? NEW_CHILD(ast, rest_arg) : no_name_rest(); +} + +static VALUE +node_children(rb_ast_t *ast, const NODE *node) { char name[DECIMAL_SIZE_OF_BITS(sizeof(long) * CHAR_BIT) + 2]; /* including '$' */ @@ -326,22 +375,17 @@ node_children(rb_ast_t *ast, NODE *node) case NODE_IN: return rb_ary_new_from_node_args(ast, 3, node->nd_head, node->nd_body, node->nd_next); case NODE_WHILE: - goto loop; case NODE_UNTIL: - loop: return rb_ary_push(rb_ary_new_from_node_args(ast, 2, node->nd_cond, node->nd_body), - (node->nd_state ? Qtrue : Qfalse)); + RBOOL(node->nd_state)); case NODE_ITER: case NODE_FOR: return rb_ary_new_from_node_args(ast, 2, node->nd_iter, node->nd_body); case NODE_FOR_MASGN: return rb_ary_new_from_node_args(ast, 1, node->nd_var); case NODE_BREAK: - goto jump; case NODE_NEXT: - goto jump; case NODE_RETURN: - jump: return rb_ary_new_from_node_args(ast, 1, node->nd_stts); case NODE_REDO: return rb_ary_new_from_node_args(ast, 0); @@ -356,15 +400,13 @@ node_children(rb_ast_t *ast, NODE *node) case NODE_ENSURE: return rb_ary_new_from_node_args(ast, 2, node->nd_head, node->nd_ensr); case NODE_AND: - goto andor; case NODE_OR: - andor: { VALUE ary = rb_ary_new(); while (1) { rb_ary_push(ary, NEW_CHILD(ast, node->nd_1st)); - if (!node->nd_2nd || nd_type(node->nd_2nd) != (int)type) + if (!node->nd_2nd || !nd_type_p(node->nd_2nd, type)) break; node = node->nd_2nd; } @@ -378,24 +420,17 @@ node_children(rb_ast_t *ast, NODE *node) else { return rb_ary_new_from_args(3, NEW_CHILD(ast, node->nd_value), NEW_CHILD(ast, node->nd_head), - ID2SYM(rb_intern("NODE_SPECIAL_NO_NAME_REST"))); + no_name_rest()); } case NODE_LASGN: - goto asgn; case NODE_DASGN: - goto asgn; - case NODE_DASGN_CURR: - goto asgn; case NODE_IASGN: - goto asgn; case NODE_CVASGN: - asgn: + case NODE_GASGN: if (NODE_REQUIRED_KEYWORD_P(node)) { return rb_ary_new_from_args(2, var_name(node->nd_vid), ID2SYM(rb_intern("NODE_SPECIAL_REQUIRED_KEYWORD"))); } return rb_ary_new_from_args(2, var_name(node->nd_vid), NEW_CHILD(ast, node->nd_value)); - case NODE_GASGN: - goto asgn; case NODE_CDECL: if (node->nd_vid) { return rb_ary_new_from_args(2, ID2SYM(node->nd_vid), NEW_CHILD(ast, node->nd_value)); @@ -407,9 +442,10 @@ node_children(rb_ast_t *ast, NODE *node) NEW_CHILD(ast, node->nd_args->nd_head), NEW_CHILD(ast, node->nd_args->nd_body)); case NODE_OP_ASGN2: - return rb_ary_new_from_args(4, NEW_CHILD(ast, node->nd_recv), - node->nd_next->nd_aid ? Qtrue : Qfalse, + return rb_ary_new_from_args(5, NEW_CHILD(ast, node->nd_recv), + RBOOL(node->nd_next->nd_aid), ID2SYM(node->nd_next->nd_vid), + ID2SYM(node->nd_next->nd_mid), NEW_CHILD(ast, node->nd_value)); case NODE_OP_ASGN_AND: return rb_ary_new_from_args(3, NEW_CHILD(ast, node->nd_head), ID2SYM(idANDOP), @@ -437,9 +473,7 @@ node_children(rb_ast_t *ast, NODE *node) case NODE_ZSUPER: return rb_ary_new_from_node_args(ast, 0); case NODE_LIST: - goto ary; case NODE_VALUES: - ary: return dump_array(ast, node); case NODE_ZLIST: return rb_ary_new_from_node_args(ast, 0); @@ -463,8 +497,6 @@ node_children(rb_ast_t *ast, NODE *node) name[1] = (char)node->nd_nth; name[2] = '\0'; return rb_ary_new_from_args(1, ID2SYM(rb_intern(name))); - case NODE_MATCH: - goto lit; case NODE_MATCH2: if (node->nd_args) { return rb_ary_new_from_node_args(ast, 3, node->nd_recv, node->nd_value, node->nd_args); @@ -472,26 +504,26 @@ node_children(rb_ast_t *ast, NODE *node) return rb_ary_new_from_node_args(ast, 2, node->nd_recv, node->nd_value); case NODE_MATCH3: return rb_ary_new_from_node_args(ast, 2, node->nd_recv, node->nd_value); + case NODE_MATCH: case NODE_LIT: - goto lit; case NODE_STR: - goto lit; case NODE_XSTR: - lit: return rb_ary_new_from_args(1, node->nd_lit); case NODE_ONCE: return rb_ary_new_from_node_args(ast, 1, node->nd_body); case NODE_DSTR: - goto dlit; case NODE_DXSTR: - goto dlit; case NODE_DREGX: - goto dlit; case NODE_DSYM: - dlit: - return rb_ary_new_from_args(3, node->nd_lit, - NEW_CHILD(ast, node->nd_next->nd_head), - NEW_CHILD(ast, node->nd_next->nd_next)); + { + NODE *n = node->nd_next; + VALUE head = Qnil, next = Qnil; + if (n) { + head = NEW_CHILD(ast, n->nd_head); + next = NEW_CHILD(ast, n->nd_next); + } + return rb_ary_new_from_args(3, node->nd_lit, head, next); + } case NODE_EVSTR: return rb_ary_new_from_node_args(ast, 1, node->nd_body); case NODE_ARGSCAT: @@ -523,13 +555,9 @@ node_children(rb_ast_t *ast, NODE *node) case NODE_COLON3: return rb_ary_new_from_args(1, ID2SYM(node->nd_mid)); case NODE_DOT2: - goto dot; case NODE_DOT3: - goto dot; case NODE_FLIP2: - goto dot; case NODE_FLIP3: - dot: return rb_ary_new_from_node_args(ast, 2, node->nd_beg, node->nd_end); case NODE_SELF: return rb_ary_new_from_node_args(ast, 0); @@ -557,7 +585,7 @@ node_children(rb_ast_t *ast, NODE *node) if (NODE_NAMED_REST_P(node->nd_1st)) { return rb_ary_new_from_node_args(ast, 2, node->nd_1st, node->nd_2nd); } - return rb_ary_new_from_args(2, ID2SYM(rb_intern("NODE_SPECIAL_NO_NAME_REST")), + return rb_ary_new_from_args(2, no_name_rest(), NEW_CHILD(ast, node->nd_2nd)); case NODE_ARGS: { @@ -569,32 +597,44 @@ node_children(rb_ast_t *ast, NODE *node) var_name(ainfo->first_post_arg), INT2NUM(ainfo->post_args_num), NEW_CHILD(ast, ainfo->post_init), - var_name(ainfo->rest_arg), + (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, ainfo->kw_args)), (ainfo->no_kwarg ? Qfalse : NEW_CHILD(ast, ainfo->kw_rest_arg)), var_name(ainfo->block_arg)); } case NODE_SCOPE: { - ID *tbl = node->nd_tbl; - int i, size = tbl ? (int)*tbl++ : 0; + rb_ast_id_table_t *tbl = 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[i])); + rb_ary_push(locals, var_name(tbl->ids[i])); } return rb_ary_new_from_args(3, locals, NEW_CHILD(ast, node->nd_args), NEW_CHILD(ast, node->nd_body)); } case NODE_ARYPTN: { struct rb_ary_pattern_info *apinfo = node->nd_apinfo; - VALUE rest = NODE_NAMED_REST_P(apinfo->rest_arg) ? NEW_CHILD(ast, apinfo->rest_arg) : - ID2SYM(rb_intern("NODE_SPECIAL_NO_NAME_REST")); + VALUE rest = rest_arg(ast, apinfo->rest_arg); return rb_ary_new_from_args(4, NEW_CHILD(ast, node->nd_pconst), NEW_CHILD(ast, apinfo->pre_args), rest, NEW_CHILD(ast, apinfo->post_args)); } + case NODE_FNDPTN: + { + struct rb_fnd_pattern_info *fpinfo = node->nd_fpinfo; + VALUE pre_rest = rest_arg(ast, fpinfo->pre_rest_arg); + VALUE post_rest = rest_arg(ast, fpinfo->post_rest_arg); + return rb_ary_new_from_args(4, + NEW_CHILD(ast, node->nd_pconst), + pre_rest, + NEW_CHILD(ast, fpinfo->args), + post_rest); + } case NODE_HSHPTN: { VALUE kwrest = node->nd_pkwrestarg == NODE_SPECIAL_NO_REST_KEYWORD ? ID2SYM(rb_intern("NODE_SPECIAL_NO_REST_KEYWORD")) : @@ -678,6 +718,16 @@ ast_node_inspect(rb_execution_context_t *ec, VALUE self) return str; } +static VALUE +ast_node_script_lines(rb_execution_context_t *ec, VALUE self) +{ + struct ASTNodeData *data; + TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data); + VALUE ret = data->ast->body.script_lines; + if (!RB_TYPE_P(ret, T_ARRAY)) return Qnil; + return ret; +} + #include "ast.rbinc" void @@ -686,6 +736,4 @@ Init_ast(void) rb_mAST = rb_define_module_under(rb_cRubyVM, "AbstractSyntaxTree"); rb_cNode = rb_define_class_under(rb_mAST, "Node", rb_cObject); rb_undef_alloc_func(rb_cNode); - - load_ast(); } diff --git a/ruby/ast.rb b/ruby/ast.rb index 1fedf7664..f866bd23e 100644 --- a/ruby/ast.rb +++ b/ruby/ast.rb @@ -1,143 +1,189 @@ # for ast.c -class RubyVM +# 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 _parser_ gem or Ripper. If you would +# like to make RubyVM::AbstractSyntaxTree stable, please join the discussion +# at https://bugs.ruby-lang.org/issues/14844. +# +module RubyVM::AbstractSyntaxTree - # AbstractSyntaxTree provides methods to parse Ruby code into - # abstract syntax trees. The nodes in the tree - # are instances of RubyVM::AbstractSyntaxTree::Node. + # call-seq: + # RubyVM::AbstractSyntaxTree.parse(string) -> RubyVM::AbstractSyntaxTree::Node # - # This class is MRI specific as it exposes implementation details - # of the MRI abstract syntax tree. + # Parses the given _string_ into an abstract syntax tree, + # returning the root node of that tree. # - # This class 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. + # SyntaxError is raised if the given _string_ is invalid syntax. # - # If you are looking for a stable API or an API working under multiple Ruby - # implementations, consider using the _parser_ gem or Ripper. If you would - # like to make RubyVM::AbstractSyntaxTree stable, please join the discussion - # at https://bugs.ruby-lang.org/issues/14844. + # RubyVM::AbstractSyntaxTree.parse("x = 1 + 2") + # # => # + def self.parse string, keep_script_lines: false + Primitive.ast_s_parse string, keep_script_lines + end + + # call-seq: + # RubyVM::AbstractSyntaxTree.parse_file(pathname) -> 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") + # # => # + def self.parse_file pathname, keep_script_lines: false + Primitive.ast_s_parse_file pathname, keep_script_lines + end + + # call-seq: + # RubyVM::AbstractSyntaxTree.of(proc) -> RubyVM::AbstractSyntaxTree::Node + # RubyVM::AbstractSyntaxTree.of(method) -> RubyVM::AbstractSyntaxTree::Node + # + # Returns AST nodes of the given _proc_ or _method_. + # + # RubyVM::AbstractSyntaxTree.of(proc {1 + 2}) + # # => # + # + # def hello + # puts "hello, world" + # end + # + # RubyVM::AbstractSyntaxTree.of(method(:hello)) + # # => # + def self.of body, keep_script_lines: false + Primitive.ast_s_of body, keep_script_lines + end + + # RubyVM::AbstractSyntaxTree::Node instances are created by parse methods in + # RubyVM::AbstractSyntaxTree. + # + # This class is MRI specific. # - module AbstractSyntaxTree + class Node # call-seq: - # RubyVM::AbstractSyntaxTree.parse(string) -> RubyVM::AbstractSyntaxTree::Node + # node.type -> symbol # - # Parses the given _string_ into an abstract syntax tree, - # returning the root node of that tree. + # Returns the type of this node as a symbol. # - # SyntaxError is raised if the given _string_ is invalid syntax. + # 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 # - # RubyVM::AbstractSyntaxTree.parse("x = 1 + 2") - # # => # - def self.parse string - __builtin_ast_s_parse string + # The line number in the source code where this AST's text began. + def first_lineno + Primitive.ast_node_first_lineno end # call-seq: - # RubyVM::AbstractSyntaxTree.parse_file(pathname) -> RubyVM::AbstractSyntaxTree::Node + # node.first_column -> integer # - # Reads the file from _pathname_, then parses it like ::parse, - # returning the root node of the abstract syntax tree. + # 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 # - # SyntaxError is raised if _pathname_'s contents are not - # valid Ruby syntax. + # 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 # - # RubyVM::AbstractSyntaxTree.parse_file("my-app/app.rb") - # # => # - def self.parse_file pathname - __builtin_ast_s_parse_file pathname + # The column number in the source code where this AST's text ended. + def last_column + Primitive.ast_node_last_column end # call-seq: - # RubyVM::AbstractSyntaxTree.of(proc) -> RubyVM::AbstractSyntaxTree::Node - # RubyVM::AbstractSyntaxTree.of(method) -> RubyVM::AbstractSyntaxTree::Node + # node.children -> array # - # Returns AST nodes of the given _proc_ or _method_. + # Returns AST nodes under this one. Each kind of node + # has different children, depending on what kind of node it is. # - # RubyVM::AbstractSyntaxTree.of(proc {1 + 2}) - # # => # + # The returned array may contain other nodes or nil. + def children + Primitive.ast_node_children + end + + # call-seq: + # node.inspect -> string # - # def hello - # puts "hello, world" - # end + # Returns debugging information about this node as a string. + def inspect + Primitive.ast_node_inspect + end + + # call-seq: + # node.node_id -> integer # - # RubyVM::AbstractSyntaxTree.of(method(:hello)) - # # => # - def self.of body - __builtin_ast_s_of body + # 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 - # RubyVM::AbstractSyntaxTree::Node instances are created by parse methods in - # RubyVM::AbstractSyntaxTree. + # call-seq: + # node.script_lines -> array # - # This class is MRI specific. + # Returns the original source code as an array of lines. # - 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 - # call = root.children[2] - # call.type # => :OPCALL - def type - __builtin_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 - __builtin_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 - __builtin_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 - __builtin_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 - __builtin_ast_node_last_column - 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 nil. - def children - __builtin_ast_node_children - end + # 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.inspect -> string - # - # Returns debugging information about this node as a string. - def inspect - __builtin_ast_node_inspect + # 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][0...last_column] + lines[0] = lines[0][first_column..-1] + lines.join + else + nil end end end diff --git a/ruby/ast.rbinc b/ruby/ast.rbinc index c7bbe4cec..63c34ca83 100644 --- a/ruby/ast.rbinc +++ b/ruby/ast.rbinc @@ -3,8 +3,13 @@ // auto-generated file // by ./tool/mk_builtin_loader.rb // with ast.rb +#include "internal/compilers.h" /* for MAYBE_UNUSED */ +#include "internal/warnings.h" /* for COMPILER_WARNING_PUSH */ +#include "ruby/ruby.h" /* for VALUE */ +#include "builtin.h" /* for RB_BUILTIN_FUNCTION */ +struct rb_execution_context_struct; /* in vm_core.h */ -static void load_ast(void) +void Init_builtin_ast(void) { // table definition static const struct rb_builtin_function ast_table[] = { diff --git a/ruby/autogen.sh b/ruby/autogen.sh new file mode 100755 index 000000000..f8cdf3c0c --- /dev/null +++ b/ruby/autogen.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +PWD= +case "$0" in +*/*) srcdir=`dirname $0`;; +*) srcdir="";; +esac + +symlink='--install --symlink' +case " $* " in + *" -i "*|*" --install "*) + # reset to copy missing standard auxiliary files, instead of symlinks + symlink= + ;; +esac + +exec ${AUTORECONF:-autoreconf} ${symlink} "$@" ${srcdir:+"$srcdir"} diff --git a/ruby/basictest/test.rb b/ruby/basictest/test.rb index 25a429823..52008b78d 100755 --- a/ruby/basictest/test.rb +++ b/ruby/basictest/test.rb @@ -1425,9 +1425,6 @@ def marity_test(m) 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? @@ -2140,7 +2137,7 @@ module M003; include M002; end test_ok($_ == foobar) class Gods - @@rule = "Uranus" # private to Gods + @@rule = "Uranus" def ruler0 @@rule end @@ -2163,7 +2160,7 @@ def ruler3 end class Titans < Gods - @@rule = "Cronus" # do not affect @@rule in Gods + @@rule = "Cronus" # modifies @@rule in Gods include Olympians def ruler4 @@rule @@ -2178,7 +2175,14 @@ def ruler4 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 diff --git a/ruby/benchmark/README.md b/ruby/benchmark/README.md index 24a266914..c222164be 100644 --- a/ruby/benchmark/README.md +++ b/ruby/benchmark/README.md @@ -37,7 +37,7 @@ Usage: benchmark-driver [options] RUBY|YAML... --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) - -v, --verbose Verbose mode. Multiple -v options increase visilibity (max: 2) + -v, --verbose Verbose mode. Multiple -v options increase visibility (max: 2) ``` ## make benchmark @@ -53,20 +53,20 @@ make benchmark # Or compare with specific ruby binary make benchmark COMPARE_RUBY="/path/to/ruby --jit" -# Run vm1 benchmarks -make benchmark ITEM=vm1 +# Run vm benchmarks +make benchmark ITEM=vm # Run some limited benchmarks in ITEM-matched files -make benchmark ITEM=vm1 OPTS=--filter=block +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 +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=vm2_bigarray OPTS="-r peak" +make benchmark ITEM=vm_bigarray OPTS="-r peak" ``` diff --git a/ruby/benchmark/array_max_float.yml b/ruby/benchmark/array_max_float.yml new file mode 100644 index 000000000..ace1ae2e1 --- /dev/null +++ b/ruby/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/ruby/benchmark/array_max_int.yml b/ruby/benchmark/array_max_int.yml new file mode 100644 index 000000000..acd83684d --- /dev/null +++ b/ruby/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/ruby/benchmark/array_max_str.yml b/ruby/benchmark/array_max_str.yml new file mode 100644 index 000000000..2aeed010f --- /dev/null +++ b/ruby/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/ruby/benchmark/array_min.yml b/ruby/benchmark/array_min.yml new file mode 100644 index 000000000..53e5072b1 --- /dev/null +++ b/ruby/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/ruby/benchmark/array_sample.yml b/ruby/benchmark/array_sample.yml new file mode 100644 index 000000000..1cd2b3479 --- /dev/null +++ b/ruby/benchmark/array_sample.yml @@ -0,0 +1,4 @@ +prelude: ary = (1..10_000).to_a +benchmark: + - ary.sample + - ary.sample(2) diff --git a/ruby/benchmark/attr_accessor.yml b/ruby/benchmark/attr_accessor.yml new file mode 100644 index 000000000..82134cdf9 --- /dev/null +++ b/ruby/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/ruby/benchmark/buffer_get.yml b/ruby/benchmark/buffer_get.yml new file mode 100644 index 000000000..e375dcf85 --- /dev/null +++ b/ruby/benchmark/buffer_get.yml @@ -0,0 +1,9 @@ +benchmark: + - name: buffer.get + prelude: buffer = IO::Buffer.new(32, IO::Buffer::MAPPED) + script: buffer.get(:U32, 0) + loop_count: 20000000 + - name: string.unpack + prelude: string = "\0" * 32 + script: string.unpack("C") + loop_count: 20000000 diff --git a/ruby/benchmark/enum_lazy_flat_map.yml b/ruby/benchmark/enum_lazy_flat_map.yml new file mode 100644 index 000000000..0ee390a44 --- /dev/null +++ b/ruby/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/ruby/benchmark/enum_lazy_zip.yml b/ruby/benchmark/enum_lazy_zip.yml new file mode 100644 index 000000000..4566ff026 --- /dev/null +++ b/ruby/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/ruby/benchmark/enum_tally.yml b/ruby/benchmark/enum_tally.yml new file mode 100644 index 000000000..edd2e040a --- /dev/null +++ b/ruby/benchmark/enum_tally.yml @@ -0,0 +1,4 @@ +prelude: | + list = ("aaa".."zzz").to_a*10 +benchmark: + tally: list.tally diff --git a/ruby/benchmark/fiber_chain.yml b/ruby/benchmark/fiber_chain.yml old mode 100755 new mode 100644 diff --git a/ruby/benchmark/fiber_locals.yml b/ruby/benchmark/fiber_locals.yml new file mode 100644 index 000000000..858868647 --- /dev/null +++ b/ruby/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/ruby/benchmark/float_methods.yml b/ruby/benchmark/float_methods.yml new file mode 100644 index 000000000..56ea41eff --- /dev/null +++ b/ruby/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/ruby/benchmark/float_neg_posi.yml b/ruby/benchmark/float_neg_posi.yml new file mode 100644 index 000000000..172db1bf6 --- /dev/null +++ b/ruby/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/ruby/benchmark/float_to_s.yml b/ruby/benchmark/float_to_s.yml new file mode 100644 index 000000000..0abae5cdb --- /dev/null +++ b/ruby/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/ruby/benchmark/hash_aref_array.rb b/ruby/benchmark/hash_aref_array.rb new file mode 100644 index 000000000..ac7a683d9 --- /dev/null +++ b/ruby/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/ruby/benchmark/hash_defaults.yml b/ruby/benchmark/hash_defaults.yml new file mode 100644 index 000000000..833f10e1c --- /dev/null +++ b/ruby/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/ruby/benchmark/hash_first.yml b/ruby/benchmark/hash_first.yml new file mode 100644 index 000000000..c26df1a7e --- /dev/null +++ b/ruby/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/ruby/benchmark/iseq_load_from_binary.yml b/ruby/benchmark/iseq_load_from_binary.yml new file mode 100644 index 000000000..7e9d73bdd --- /dev/null +++ b/ruby/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/ruby/benchmark/ivar_extend.yml b/ruby/benchmark/ivar_extend.yml new file mode 100644 index 000000000..eb9ee923f --- /dev/null +++ b/ruby/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/ruby/benchmark/kernel_clone.yml b/ruby/benchmark/kernel_clone.yml new file mode 100644 index 000000000..069b23abc --- /dev/null +++ b/ruby/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/ruby/benchmark/kernel_float.yml b/ruby/benchmark/kernel_float.yml new file mode 100644 index 000000000..215f6750f --- /dev/null +++ b/ruby/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/ruby/benchmark/kernel_tap.yml b/ruby/benchmark/kernel_tap.yml new file mode 100644 index 000000000..4dcbb31b4 --- /dev/null +++ b/ruby/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/ruby/benchmark/kernel_then.yml b/ruby/benchmark/kernel_then.yml new file mode 100644 index 000000000..85f7341e3 --- /dev/null +++ b/ruby/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/ruby/benchmark/keyword_arguments.yml b/ruby/benchmark/keyword_arguments.yml new file mode 100644 index 000000000..fce6bce0b --- /dev/null +++ b/ruby/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/ruby/benchmark/lib/benchmark_driver/runner/mjit.rb b/ruby/benchmark/lib/benchmark_driver/runner/mjit.rb new file mode 100644 index 000000000..1d4693e8b --- /dev/null +++ b/ruby/benchmark/lib/benchmark_driver/runner/mjit.rb @@ -0,0 +1,34 @@ +require 'benchmark_driver/struct' +require 'benchmark_driver/metric' +require 'erb' + +# A runner to measure after-JIT performance easily +class BenchmarkDriver::Runner::Mjit < BenchmarkDriver::Runner::Ips + # 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]).extend(Module.new{ + def parse(**) + jobs = super + jobs.map do |job| + job = job.dup + job.prelude = "#{job.prelude}\n#{<<~EOS}" + if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? + __bmdv_ruby_i = 0 + while __bmdv_ruby_i < 10000 # jit_min_calls + #{job.script} + __bmdv_ruby_i += 1 + end + RubyVM::MJIT.pause # compile + #{job.script} + RubyVM::MJIT.resume; RubyVM::MJIT.pause # recompile + #{job.script} + RubyVM::MJIT.resume; RubyVM::MJIT.pause # recompile 2 + end + EOS + job + end + end + }) +end diff --git a/ruby/benchmark/lib/benchmark_driver/runner/mjit_exec.rb b/ruby/benchmark/lib/benchmark_driver/runner/mjit_exec.rb index 9f7c8c8af..eac3dfba8 100644 --- a/ruby/benchmark/lib/benchmark_driver/runner/mjit_exec.rb +++ b/ruby/benchmark/lib/benchmark_driver/runner/mjit_exec.rb @@ -135,7 +135,7 @@ def a<%= i %> nil end % end - RubyVM::MJIT.pause if RubyVM::MJIT.enabled? + RubyVM::MJIT.pause if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? def vm t = Process.clock_gettime(Process::CLOCK_MONOTONIC) @@ -172,7 +172,7 @@ def a<%= i %> a<%= i %> a<%= i %> # --jit-min-calls=2 % end - RubyVM::MJIT.pause if RubyVM::MJIT.enabled? + RubyVM::MJIT.pause if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? def vm t = Process.clock_gettime(Process::CLOCK_MONOTONIC) @@ -228,7 +228,7 @@ def jit jit jit - RubyVM::MJIT.pause if RubyVM::MJIT.enabled? + RubyVM::MJIT.pause if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? File.write(<%= result.dump %>, jit) EOS end diff --git a/ruby/benchmark/lib/benchmark_driver/runner/ractor.rb b/ruby/benchmark/lib/benchmark_driver/runner/ractor.rb new file mode 100644 index 000000000..c730b8e4a --- /dev/null +++ b/ruby/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!(&:take) + +<% 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/ruby/benchmark/masgn.yml b/ruby/benchmark/masgn.yml new file mode 100644 index 000000000..4be9333e2 --- /dev/null +++ b/ruby/benchmark/masgn.yml @@ -0,0 +1,29 @@ +prelude: | + a = [nil] * 3 + b = Class.new{attr_writer :a, :b, :c}.new + c, d, e, f = nil, nil, nil, 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)" diff --git a/ruby/benchmark/method_bind_call.yml b/ruby/benchmark/method_bind_call.yml new file mode 100644 index 000000000..9e0e046ed --- /dev/null +++ b/ruby/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/ruby/benchmark/mjit_exec_jt2jt.yml b/ruby/benchmark/mjit_exec_jt2jt.yml index 5be408e30..6c303c7a4 100644 --- a/ruby/benchmark/mjit_exec_jt2jt.yml +++ b/ruby/benchmark/mjit_exec_jt2jt.yml @@ -1,6 +1,4 @@ -# Usage: -# RUBYOPT=-Ibenchmark/lib benchmark-driver -e 'ruby --jit' benchmark/mjit_exec_vm2jt.yml -type: mjit_exec # benchmark/lib/benchmark_driver/runner/mjit_exec.rb +type: lib/benchmark_driver/runner/mjit_exec num_methods: [1] #num_methods: (1..100).to_a + [200, 300, 400, 500, 600, 700, 800, 900, 1000] loop_count: 50000000 diff --git a/ruby/benchmark/mjit_exec_vm2jt.yml b/ruby/benchmark/mjit_exec_vm2jt.yml index 9947dbb7d..764883f07 100644 --- a/ruby/benchmark/mjit_exec_vm2jt.yml +++ b/ruby/benchmark/mjit_exec_vm2jt.yml @@ -1,6 +1,4 @@ -# Usage: -# RUBYOPT=-Ibenchmark/lib benchmark-driver -e 'ruby --jit' benchmark/mjit_exec_vm2jt.yml -type: mjit_exec # benchmark/lib/benchmark_driver/runner/mjit_exec.rb +type: lib/benchmark_driver/runner/mjit_exec num_methods: [1] #num_methods: (1..100).to_a + [200, 300, 400, 500, 600, 700, 800, 900, 1000] loop_count: 50000000 diff --git a/ruby/benchmark/mjit_exec_vm2vm.yml b/ruby/benchmark/mjit_exec_vm2vm.yml index 4b84427b1..030aa76c1 100644 --- a/ruby/benchmark/mjit_exec_vm2vm.yml +++ b/ruby/benchmark/mjit_exec_vm2vm.yml @@ -1,6 +1,4 @@ -# Usage: -# RUBYOPT=-Ibenchmark/lib benchmark-driver -e 'ruby --jit' benchmark/mjit_exec_vm2vm.yml -type: mjit_exec # benchmark/lib/benchmark_driver/runner/mjit_exec.rb +type: lib/benchmark_driver/runner/mjit_exec num_methods: [1] #num_methods: (1..100).to_a + [200, 300, 400, 500, 600, 700, 800, 900, 1000] loop_count: 50000000 diff --git a/ruby/benchmark/mjit_exivar.yml b/ruby/benchmark/mjit_exivar.yml new file mode 100644 index 000000000..2584fa641 --- /dev/null +++ b/ruby/benchmark/mjit_exivar.yml @@ -0,0 +1,18 @@ +type: lib/benchmark_driver/runner/mjit +prelude: | + class Bench < Hash + def initialize + @exivar = nil + end + + def exivar + @exivar + end + end + + bench = Bench.new + +benchmark: + mjit_exivar: bench.exivar + +loop_count: 200000000 diff --git a/ruby/benchmark/mjit_integer.yml b/ruby/benchmark/mjit_integer.yml new file mode 100644 index 000000000..a6b5c9ee1 --- /dev/null +++ b/ruby/benchmark/mjit_integer.yml @@ -0,0 +1,32 @@ +type: lib/benchmark_driver/runner/mjit +prelude: | + def mjit_abs(int) int.abs end + def mjit_bit_length(int) int.bit_length end + def mjit_comp(int) ~int end + def mjit_even?(int) int.even? end + def mjit_integer?(int) int.integer? end + def mjit_magnitude(int) int.magnitude end + def mjit_odd?(int) int.odd? end + def mjit_ord(int) int.ord end + def mjit_size(int) int.size end + def mjit_to_i(int) int.to_i end + def mjit_to_int(int) int.to_int end + def mjit_uminus(int) -int end + def mjit_zero?(int) int.zero? end + +benchmark: + - mjit_abs(-1) + - mjit_bit_length(100) + - mjit_comp(1) + - mjit_even?(2) + - mjit_integer?(0) + - mjit_magnitude(-1) + - mjit_odd?(1) + - mjit_ord(1) + - mjit_size(1) + - mjit_to_i(1) + - mjit_to_int(1) + - mjit_uminus(1) + - mjit_zero?(0) + +loop_count: 40000000 diff --git a/ruby/benchmark/mjit_kernel.yml b/ruby/benchmark/mjit_kernel.yml new file mode 100644 index 000000000..7720e65c2 --- /dev/null +++ b/ruby/benchmark/mjit_kernel.yml @@ -0,0 +1,20 @@ +type: lib/benchmark_driver/runner/mjit +prelude: | + def mjit_class(obj) + obj.class + end + + def mjit_frozen?(obj) + obj.frozen? + end + + str = "" + fstr = "".freeze + +benchmark: + - mjit_class(self) + - mjit_class(1) + - mjit_frozen?(str) + - mjit_frozen?(fstr) + +loop_count: 40000000 diff --git a/ruby/benchmark/mjit_leave.yml b/ruby/benchmark/mjit_leave.yml new file mode 100644 index 000000000..9ac68b164 --- /dev/null +++ b/ruby/benchmark/mjit_leave.yml @@ -0,0 +1,8 @@ +type: lib/benchmark_driver/runner/mjit +prelude: | + def leave + nil + end +benchmark: + mjit_leave: leave +loop_count: 200000000 diff --git a/ruby/benchmark/mjit_opt_cc_insns.yml b/ruby/benchmark/mjit_opt_cc_insns.yml new file mode 100644 index 000000000..fed6d34bd --- /dev/null +++ b/ruby/benchmark/mjit_opt_cc_insns.yml @@ -0,0 +1,27 @@ +# opt_* insns using vm_method_cfunc_is with send-compatible operands: +# * opt_nil_p +# * opt_not +# * opt_eq +type: lib/benchmark_driver/runner/mjit +prelude: | + def mjit_nil?(obj) + obj.nil? + end + + def mjit_not(obj) + !obj + end + + def mjit_eq(a, b) + a == b + end + +benchmark: + - script: mjit_nil?(1) + loop_count: 40000000 + - script: mjit_not(1) + loop_count: 40000000 + - script: mjit_eq(1, nil) + loop_count: 8000000 + - script: mjit_eq(nil, 1) + loop_count: 8000000 diff --git a/ruby/benchmark/mjit_struct_aref.yml b/ruby/benchmark/mjit_struct_aref.yml new file mode 100644 index 000000000..bfba1323f --- /dev/null +++ b/ruby/benchmark/mjit_struct_aref.yml @@ -0,0 +1,10 @@ +type: lib/benchmark_driver/runner/mjit +prelude: | + def mjit_struct_aref(struct) + struct.aa + end + struct = Struct.new(:a0, :a1, :a2, :a3, :a4, :a5, :a6, :a7, :a8, :a9, :aa).new + +benchmark: mjit_struct_aref(struct) + +loop_count: 40000000 diff --git a/ruby/benchmark/nilclass.yml b/ruby/benchmark/nilclass.yml new file mode 100644 index 000000000..fba67a5f6 --- /dev/null +++ b/ruby/benchmark/nilclass.yml @@ -0,0 +1,6 @@ +benchmark: + to_i: | + nil.to_i + to_f: | + nil.to_f +loop_count: 100000 diff --git a/ruby/benchmark/num_zero_p.yml b/ruby/benchmark/num_zero_p.yml new file mode 100644 index 000000000..219596343 --- /dev/null +++ b/ruby/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/ruby/benchmark/numeric_methods.yml b/ruby/benchmark/numeric_methods.yml new file mode 100644 index 000000000..433c2268a --- /dev/null +++ b/ruby/benchmark/numeric_methods.yml @@ -0,0 +1,13 @@ +prelude: | + int = 42 + flo = 4.2 +benchmark: + real?: | + int.real? + integer?: | + flo.integer? + finite?: | + int.finite? + infinite?: | + int.infinite? +loop_count: 20000000 diff --git a/ruby/benchmark/object_allocate.yml b/ruby/benchmark/object_allocate.yml new file mode 100644 index 000000000..93ff463e4 --- /dev/null +++ b/ruby/benchmark/object_allocate.yml @@ -0,0 +1,21 @@ +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 + # 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 +loop_count: 100000 diff --git a/ruby/benchmark/objspace_dump_all.yml b/ruby/benchmark/objspace_dump_all.yml new file mode 100644 index 000000000..ebab562d2 --- /dev/null +++ b/ruby/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/ruby/benchmark/pm_array.yml b/ruby/benchmark/pm_array.yml new file mode 100644 index 000000000..babb65a28 --- /dev/null +++ b/ruby/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/ruby/benchmark/ractor_const.yml b/ruby/benchmark/ractor_const.yml new file mode 100644 index 000000000..d7ab74bdc --- /dev/null +++ b/ruby/benchmark/ractor_const.yml @@ -0,0 +1,4 @@ +type: lib/benchmark_driver/runner/ractor +benchmark: + ractor_const: Object +ractor: 1 diff --git a/ruby/benchmark/ractor_float_to_s.yml b/ruby/benchmark/ractor_float_to_s.yml new file mode 100644 index 000000000..8f492be66 --- /dev/null +++ b/ruby/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/ruby/benchmark/string_casecmp.yml b/ruby/benchmark/string_casecmp.yml new file mode 100644 index 000000000..2354040a0 --- /dev/null +++ b/ruby/benchmark/string_casecmp.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-1: lstr1.casecmp(ustr1) + casecmp-10: lstr10.casecmp(ustr10) + casecmp-100: lstr100.casecmp(ustr100) + casecmp-1000: lstr1000.casecmp(ustr1000) + casecmp-nonascii1: lnonascii1.casecmp(unonascii1) + casecmp-nonascii10: lnonascii10.casecmp(unonascii10) + casecmp-nonascii100: lnonascii100.casecmp(unonascii100) + casecmp-nonascii1000: lnonascii1000.casecmp(unonascii1000) diff --git a/ruby/benchmark/string_casecmp_p.yml b/ruby/benchmark/string_casecmp_p.yml new file mode 100644 index 000000000..a790ce7d5 --- /dev/null +++ b/ruby/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/ruby/benchmark/string_downcase.yml b/ruby/benchmark/string_downcase.yml index a31c3ac71..1fea6afbe 100644 --- a/ruby/benchmark/string_downcase.yml +++ b/ruby/benchmark/string_downcase.yml @@ -3,8 +3,16 @@ prelude: | 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/ruby/benchmark/string_slice.yml b/ruby/benchmark/string_slice.yml new file mode 100644 index 000000000..fc2393c5d --- /dev/null +++ b/ruby/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/ruby/benchmark/string_split.yml b/ruby/benchmark/string_split.yml index 84ffe8f6a..cc2c7d785 100644 --- a/ruby/benchmark/string_split.yml +++ b/ruby/benchmark/string_split.yml @@ -1,7 +1,22 @@ prelude: | - str0 = [*0..9].join("") + str1 = [*0..5].join(" ") + " " + str10 = str1 * 10 + str100 = str10 * 10 + str1000 = str100 * 10 benchmark: - to_chars-1: str0.split('') - to_chars-10: (str0 * 10).split('') - to_chars-100: (str0 * 100).split('') - to_chars-1000: (str0 * 1000).split('') + 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/ruby/benchmark/string_swapcase.yml b/ruby/benchmark/string_swapcase.yml index afaae3f69..eeb592890 100644 --- a/ruby/benchmark/string_swapcase.yml +++ b/ruby/benchmark/string_swapcase.yml @@ -3,8 +3,16 @@ prelude: | 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/ruby/benchmark/string_upcase.yml b/ruby/benchmark/string_upcase.yml index 456d213c7..dab84bbde 100644 --- a/ruby/benchmark/string_upcase.yml +++ b/ruby/benchmark/string_upcase.yml @@ -3,8 +3,16 @@ prelude: | 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/ruby/benchmark/time_at.yml b/ruby/benchmark/time_at.yml new file mode 100644 index 000000000..3247efbe7 --- /dev/null +++ b/ruby/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/ruby/benchmark/time_new.yml b/ruby/benchmark/time_new.yml new file mode 100644 index 000000000..5947dd3a4 --- /dev/null +++ b/ruby/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/ruby/benchmark/time_parse.yml b/ruby/benchmark/time_parse.yml new file mode 100644 index 000000000..a6d6948b9 --- /dev/null +++ b/ruby/benchmark/time_parse.yml @@ -0,0 +1,8 @@ +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) diff --git a/ruby/benchmark/vm1_attr_ivar.yml b/ruby/benchmark/vm1_attr_ivar.yml deleted file mode 100644 index f714dd9bd..000000000 --- a/ruby/benchmark/vm1_attr_ivar.yml +++ /dev/null @@ -1,14 +0,0 @@ -prelude: | - class C - attr_reader :a, :b - def initialize - @a = nil - @b = nil - end - end - obj = C.new -benchmark: - vm1_attr_ivar: | - j = obj.a - k = obj.b -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_attr_ivar_set.yml b/ruby/benchmark/vm1_attr_ivar_set.yml deleted file mode 100644 index f383e59ef..000000000 --- a/ruby/benchmark/vm1_attr_ivar_set.yml +++ /dev/null @@ -1,14 +0,0 @@ -prelude: | - class C - attr_accessor :a, :b - def initialize - @a = nil - @b = nil - end - end - obj = C.new -benchmark: - vm1_attr_ivar_set: | - obj.a = 1 - obj.b = 2 -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_block.yml b/ruby/benchmark/vm1_block.yml deleted file mode 100644 index ac7c940f9..000000000 --- a/ruby/benchmark/vm1_block.yml +++ /dev/null @@ -1,9 +0,0 @@ -prelude: | - def m - yield - end -benchmark: - vm1_block: | - m{ - } -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_blockparam.yml b/ruby/benchmark/vm1_blockparam.yml deleted file mode 100644 index 947b8c53d..000000000 --- a/ruby/benchmark/vm1_blockparam.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - def m &b - end -benchmark: - vm1_blockparam: | - m{} -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_blockparam_call.yml b/ruby/benchmark/vm1_blockparam_call.yml deleted file mode 100644 index e2817a3ce..000000000 --- a/ruby/benchmark/vm1_blockparam_call.yml +++ /dev/null @@ -1,8 +0,0 @@ -prelude: | - def m &b - b.call - end -benchmark: - vm1_blockparam_call: | - m{} -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_blockparam_pass.yml b/ruby/benchmark/vm1_blockparam_pass.yml deleted file mode 100644 index ca1bef336..000000000 --- a/ruby/benchmark/vm1_blockparam_pass.yml +++ /dev/null @@ -1,12 +0,0 @@ -prelude: | - def bp_yield - yield - end - - def bp_pass &b - bp_yield &b - end -benchmark: - vm1_blockparam_pass: | - bp_pass{} -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_blockparam_yield.yml b/ruby/benchmark/vm1_blockparam_yield.yml deleted file mode 100644 index 56ae61779..000000000 --- a/ruby/benchmark/vm1_blockparam_yield.yml +++ /dev/null @@ -1,8 +0,0 @@ -prelude: | - def bp_yield &b - yield - end -benchmark: - vm1_blockparam_yield: | - bp_yield{} -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_const.yml b/ruby/benchmark/vm1_const.yml deleted file mode 100644 index b98db1545..000000000 --- a/ruby/benchmark/vm1_const.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - Const = 1 -benchmark: - vm1_const: | - j = Const - k = Const -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_ensure.yml b/ruby/benchmark/vm1_ensure.yml deleted file mode 100644 index afbbe38be..000000000 --- a/ruby/benchmark/vm1_ensure.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Not utilizing loop_count since using it for this is too unstable for now -benchmark: - vm1_ensure: | - i = 0 - while i<30_000_000 - i += 1 - begin - begin - ensure - end - ensure - end - end -loop_count: 1 diff --git a/ruby/benchmark/vm1_float_simple.yml b/ruby/benchmark/vm1_float_simple.yml deleted file mode 100644 index 4e9ad1852..000000000 --- a/ruby/benchmark/vm1_float_simple.yml +++ /dev/null @@ -1,8 +0,0 @@ -prelude: | - f = 0.0 -benchmark: - vm1_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/ruby/benchmark/vm1_gc_short_lived.yml b/ruby/benchmark/vm1_gc_short_lived.yml deleted file mode 100644 index 8fdcb7371..000000000 --- a/ruby/benchmark/vm1_gc_short_lived.yml +++ /dev/null @@ -1,9 +0,0 @@ -benchmark: - vm1_gc_short_lived: | - a = '' # short-lived String - b = '' - c = '' - d = '' - e = '' - f = '' -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_gc_short_with_complex_long.yml b/ruby/benchmark/vm1_gc_short_with_complex_long.yml deleted file mode 100644 index c22ea74a6..000000000 --- a/ruby/benchmark/vm1_gc_short_with_complex_long.yml +++ /dev/null @@ -1,25 +0,0 @@ -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: - vm1_gc_short_with_complex_long: | - a = '' # short-lived String - b = '' - c = '' - d = '' - e = '' - f = '' -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_gc_short_with_long.yml b/ruby/benchmark/vm1_gc_short_with_long.yml deleted file mode 100644 index c731aae54..000000000 --- a/ruby/benchmark/vm1_gc_short_with_long.yml +++ /dev/null @@ -1,13 +0,0 @@ -prelude: | - long_lived = Array.new(1_000_000){|i| "#{i}"} - GC.start - GC.start -benchmark: - vm1_gc_short_with_long: | - a = '' # short-lived String - b = '' - c = '' - d = '' - e = '' - f = '' -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_gc_short_with_symbol.yml b/ruby/benchmark/vm1_gc_short_with_symbol.yml deleted file mode 100644 index 7fc1abedd..000000000 --- a/ruby/benchmark/vm1_gc_short_with_symbol.yml +++ /dev/null @@ -1,13 +0,0 @@ -prelude: | - 50_000.times{|i| sym = "sym#{i}".to_sym} - GC.start - GC.start -benchmark: - vm1_gc_short_with_symbol: | - a = '' # short-lived String - b = '' - c = '' - d = '' - e = '' - f = '' -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_gc_wb_ary.yml b/ruby/benchmark/vm1_gc_wb_ary.yml deleted file mode 100644 index 50fb4b6f8..000000000 --- a/ruby/benchmark/vm1_gc_wb_ary.yml +++ /dev/null @@ -1,12 +0,0 @@ -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: - vm1_gc_wb_ary: | - short_lived_ary[0] = short_lived # write barrier -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_gc_wb_ary_promoted.yml b/ruby/benchmark/vm1_gc_wb_ary_promoted.yml deleted file mode 100644 index cf9b5de00..000000000 --- a/ruby/benchmark/vm1_gc_wb_ary_promoted.yml +++ /dev/null @@ -1,15 +0,0 @@ -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: - vm1_gc_wb_ary_promoted: | - long_lived[0] = short_lived # write barrier -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_gc_wb_obj.yml b/ruby/benchmark/vm1_gc_wb_obj.yml deleted file mode 100644 index 9dc08e7e1..000000000 --- a/ruby/benchmark/vm1_gc_wb_obj.yml +++ /dev/null @@ -1,15 +0,0 @@ -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: - vm1_gc_wb_obj: | - short_lived_obj.foo = short_lived # write barrier -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_gc_wb_obj_promoted.yml b/ruby/benchmark/vm1_gc_wb_obj_promoted.yml deleted file mode 100644 index 26859d2a5..000000000 --- a/ruby/benchmark/vm1_gc_wb_obj_promoted.yml +++ /dev/null @@ -1,17 +0,0 @@ -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: - vm1_gc_wb_obj_promoted: | - long_lived.foo = short_lived # write barrier -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_ivar.yml b/ruby/benchmark/vm1_ivar.yml deleted file mode 100644 index 7aa6fac72..000000000 --- a/ruby/benchmark/vm1_ivar.yml +++ /dev/null @@ -1,6 +0,0 @@ -prelude: "@a = 1\n" -benchmark: - vm1_ivar: | - j = @a - k = @a -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_ivar_set.yml b/ruby/benchmark/vm1_ivar_set.yml deleted file mode 100644 index 6f19412d1..000000000 --- a/ruby/benchmark/vm1_ivar_set.yml +++ /dev/null @@ -1,5 +0,0 @@ -benchmark: - vm1_ivar_set: | - @a = 1 - @b = 2 -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_length.yml b/ruby/benchmark/vm1_length.yml deleted file mode 100644 index a18e2ca2e..000000000 --- a/ruby/benchmark/vm1_length.yml +++ /dev/null @@ -1,8 +0,0 @@ -prelude: | - a = 'abc' - b = [1, 2, 3] -benchmark: - vm1_length: | - a.length - b.length -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_lvar_init.yml b/ruby/benchmark/vm1_lvar_init.yml deleted file mode 100644 index 10e2becef..000000000 --- a/ruby/benchmark/vm1_lvar_init.yml +++ /dev/null @@ -1,21 +0,0 @@ -# while loop cost is not removed because `i` is used in the script -benchmark: - vm1_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/ruby/benchmark/vm1_lvar_set.yml b/ruby/benchmark/vm1_lvar_set.yml deleted file mode 100644 index df8f6b6ea..000000000 --- a/ruby/benchmark/vm1_lvar_set.yml +++ /dev/null @@ -1,4 +0,0 @@ -benchmark: - vm1_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/ruby/benchmark/vm1_neq.yml b/ruby/benchmark/vm1_neq.yml deleted file mode 100644 index 65a8128dd..000000000 --- a/ruby/benchmark/vm1_neq.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - obj1 = Object.new - obj2 = Object.new -benchmark: - vm1_neq: | - obj1 != obj2 -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_not.yml b/ruby/benchmark/vm1_not.yml deleted file mode 100644 index 0fb7b282a..000000000 --- a/ruby/benchmark/vm1_not.yml +++ /dev/null @@ -1,6 +0,0 @@ -prelude: | - obj = Object.new -benchmark: - vm1_not: | - !obj -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_rescue.yml b/ruby/benchmark/vm1_rescue.yml deleted file mode 100644 index a175b823a..000000000 --- a/ruby/benchmark/vm1_rescue.yml +++ /dev/null @@ -1,6 +0,0 @@ -benchmark: - vm1_rescue: | - begin - rescue - end -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_simplereturn.yml b/ruby/benchmark/vm1_simplereturn.yml deleted file mode 100644 index 3564aac7e..000000000 --- a/ruby/benchmark/vm1_simplereturn.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - def m - return 1 - end -benchmark: - vm1_simplereturn: m -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_swap.yml b/ruby/benchmark/vm1_swap.yml deleted file mode 100644 index fed87ccd6..000000000 --- a/ruby/benchmark/vm1_swap.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - a = 1 - b = 2 -benchmark: - vm1_swap: | - a, b = b, a -loop_count: 30000000 diff --git a/ruby/benchmark/vm1_yield.yml b/ruby/benchmark/vm1_yield.yml deleted file mode 100644 index ae1f9316f..000000000 --- a/ruby/benchmark/vm1_yield.yml +++ /dev/null @@ -1,13 +0,0 @@ -# while loop cost is not removed due to benchmark_driver.gem's limitation -benchmark: - vm1_yield: | - def m - i = 0 - while i<30_000_000 - i += 1 - yield - end - end - - m{} -loop_count: 1 diff --git a/ruby/benchmark/vm2_array.yml b/ruby/benchmark/vm2_array.yml deleted file mode 100644 index 7373098d5..000000000 --- a/ruby/benchmark/vm2_array.yml +++ /dev/null @@ -1,4 +0,0 @@ -benchmark: - vm2_array: | - a = [1,2,3,4,5,6,7,8,9,10] -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_bigarray.yml b/ruby/benchmark/vm2_bigarray.yml deleted file mode 100644 index 2ad6da390..000000000 --- a/ruby/benchmark/vm2_bigarray.yml +++ /dev/null @@ -1,105 +0,0 @@ -benchmark: - vm2_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/ruby/benchmark/vm2_bighash.yml b/ruby/benchmark/vm2_bighash.yml deleted file mode 100644 index e9154e4ba..000000000 --- a/ruby/benchmark/vm2_bighash.yml +++ /dev/null @@ -1,4 +0,0 @@ -benchmark: - vm2_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/ruby/benchmark/vm2_case.yml b/ruby/benchmark/vm2_case.yml deleted file mode 100644 index 7716783c0..000000000 --- a/ruby/benchmark/vm2_case.yml +++ /dev/null @@ -1,13 +0,0 @@ -benchmark: - vm2_case: | - case :foo - when :bar - raise - when :baz - raise - when :boo - raise - when :foo - # noop - end -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_case_lit.yml b/ruby/benchmark/vm2_case_lit.yml deleted file mode 100644 index c49b8dfe5..000000000 --- a/ruby/benchmark/vm2_case_lit.yml +++ /dev/null @@ -1,23 +0,0 @@ -# loop_count is not utilized since `i` is involved in the script -benchmark: - vm2_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/ruby/benchmark/vm2_defined_method.yml b/ruby/benchmark/vm2_defined_method.yml deleted file mode 100644 index e1b0d5567..000000000 --- a/ruby/benchmark/vm2_defined_method.yml +++ /dev/null @@ -1,8 +0,0 @@ -prelude: | - class Object - define_method(:m){} - end -benchmark: - vm2_defined_method: | - m; m; m; m; m; m; m; m; -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_dstr.yml b/ruby/benchmark/vm2_dstr.yml deleted file mode 100644 index f8bd6e013..000000000 --- a/ruby/benchmark/vm2_dstr.yml +++ /dev/null @@ -1,6 +0,0 @@ -prelude: | - x = y = 'z' -benchmark: - vm2_dstr: | - str = "foo#{x}bar#{y}baz" -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_eval.yml b/ruby/benchmark/vm2_eval.yml deleted file mode 100644 index d506a9c07..000000000 --- a/ruby/benchmark/vm2_eval.yml +++ /dev/null @@ -1,4 +0,0 @@ -benchmark: - vm2_eval: | - eval("1") -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_fiber_allocate.yml b/ruby/benchmark/vm2_fiber_allocate.yml deleted file mode 100644 index f29705f69..000000000 --- a/ruby/benchmark/vm2_fiber_allocate.yml +++ /dev/null @@ -1,8 +0,0 @@ -prelude: | - # Disable GC to see raw throughput: - GC.disable -benchmark: - vm2_fiber_allocate: | - fiber = Fiber.new{Fiber.yield} - fiber.resume -loop_count: 100000 diff --git a/ruby/benchmark/vm2_fiber_count.yml b/ruby/benchmark/vm2_fiber_count.yml deleted file mode 100644 index 3ecf6bdcb..000000000 --- a/ruby/benchmark/vm2_fiber_count.yml +++ /dev/null @@ -1,10 +0,0 @@ -# On Linux, you will need to increase the maximum number of memory maps: -# sudo sysctl -w vm.max_map_count=200000 -prelude: | - fibers = [] -benchmark: - vm2_fiber_count: | - fiber = Fiber.new{Fiber.yield} - fibers << fiber - fiber.resume -loop_count: 100000 diff --git a/ruby/benchmark/vm2_fiber_reuse.yml b/ruby/benchmark/vm2_fiber_reuse.yml deleted file mode 100644 index 017065063..000000000 --- a/ruby/benchmark/vm2_fiber_reuse.yml +++ /dev/null @@ -1,14 +0,0 @@ -prelude: | - GC.disable - fibers = [] -benchmark: - vm2_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/ruby/benchmark/vm2_fiber_reuse_gc.yml b/ruby/benchmark/vm2_fiber_reuse_gc.yml deleted file mode 100644 index 8fb91a84e..000000000 --- a/ruby/benchmark/vm2_fiber_reuse_gc.yml +++ /dev/null @@ -1,12 +0,0 @@ -# https://bugs.ruby-lang.org/issues/16009 -prelude: | - fibers = [] -benchmark: - vm2_fiber_reuse_gc: | - 2000.times do - fiber = Fiber.new{Fiber.yield} - fibers << fiber - fiber.resume - end - fibers.clear -loop_count: 100 diff --git a/ruby/benchmark/vm2_fiber_switch.yml b/ruby/benchmark/vm2_fiber_switch.yml deleted file mode 100644 index fbf7283c2..000000000 --- a/ruby/benchmark/vm2_fiber_switch.yml +++ /dev/null @@ -1,9 +0,0 @@ -prelude: | - # based on benchmark for [ruby-core:65518] [Feature #10341] by Knut Franke - fib = Fiber.new do - loop { Fiber.yield } - end -benchmark: - vm2_fiber_switch: | - fib.resume -loop_count: 20000000 diff --git a/ruby/benchmark/vm2_freezestring.yml b/ruby/benchmark/vm2_freezestring.yml deleted file mode 100644 index b78af91a2..000000000 --- a/ruby/benchmark/vm2_freezestring.yml +++ /dev/null @@ -1,10 +0,0 @@ -prelude: | - class String - def freeze - -self - end - end -benchmark: - vm2_freezestring: | - "tXnL1BP5T1WPXMjuFNLQtallEtRcay1t2lHtJSrlVsDgvunlbtfpr/DGdH0NGYE9".freeze -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_method.yml b/ruby/benchmark/vm2_method.yml deleted file mode 100644 index cc7b9b28f..000000000 --- a/ruby/benchmark/vm2_method.yml +++ /dev/null @@ -1,8 +0,0 @@ -prelude: | - def m - nil - end -benchmark: - vm2_method: | - m; m; m; m; m; m; m; m; -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_method_missing.yml b/ruby/benchmark/vm2_method_missing.yml deleted file mode 100644 index cbfb794b2..000000000 --- a/ruby/benchmark/vm2_method_missing.yml +++ /dev/null @@ -1,11 +0,0 @@ -prelude: | - class C - def method_missing mid - end - end - - obj = C.new -benchmark: - vm2_method_missing: | - obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_method_with_block.yml b/ruby/benchmark/vm2_method_with_block.yml deleted file mode 100644 index 6e522adcc..000000000 --- a/ruby/benchmark/vm2_method_with_block.yml +++ /dev/null @@ -1,8 +0,0 @@ -prelude: | - def m - nil - end -benchmark: - vm2_method_with_block: | - m{}; m{}; m{}; m{}; m{}; m{}; m{}; m{}; -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_module_ann_const_set.yml b/ruby/benchmark/vm2_module_ann_const_set.yml deleted file mode 100644 index b0becd9d3..000000000 --- a/ruby/benchmark/vm2_module_ann_const_set.yml +++ /dev/null @@ -1,4 +0,0 @@ -benchmark: - vm2_module_ann_const_set: | - Module.new.const_set(:X, Module.new) -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_module_const_set.yml b/ruby/benchmark/vm2_module_const_set.yml deleted file mode 100644 index 05a640069..000000000 --- a/ruby/benchmark/vm2_module_const_set.yml +++ /dev/null @@ -1,8 +0,0 @@ -prelude: | - module M - end - $VERBOSE = nil -benchmark: - vm2_module_const_set: | - M.const_set(:X, Module.new) -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_mutex.yml b/ruby/benchmark/vm2_mutex.yml deleted file mode 100644 index c40a90444..000000000 --- a/ruby/benchmark/vm2_mutex.yml +++ /dev/null @@ -1,8 +0,0 @@ -prelude: | - require 'thread' - - m = Thread::Mutex.new -benchmark: - vm2_mutex: | - m.synchronize{} -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_newlambda.yml b/ruby/benchmark/vm2_newlambda.yml deleted file mode 100644 index 93133f9f3..000000000 --- a/ruby/benchmark/vm2_newlambda.yml +++ /dev/null @@ -1,4 +0,0 @@ -benchmark: - vm2_newlambda: | - lambda {} -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_poly_method.yml b/ruby/benchmark/vm2_poly_method.yml deleted file mode 100644 index 0104bdfb6..000000000 --- a/ruby/benchmark/vm2_poly_method.yml +++ /dev/null @@ -1,24 +0,0 @@ -# loop_count is not utilized since `i` is involved in the script -benchmark: - vm2_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/ruby/benchmark/vm2_poly_method_ov.yml b/ruby/benchmark/vm2_poly_method_ov.yml deleted file mode 100644 index 3748073ba..000000000 --- a/ruby/benchmark/vm2_poly_method_ov.yml +++ /dev/null @@ -1,24 +0,0 @@ -# loop_count is not utilized since `i` is involved in the script -benchmark: - vm2_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/ruby/benchmark/vm2_poly_same_method.yml b/ruby/benchmark/vm2_poly_same_method.yml deleted file mode 100644 index 867c433cf..000000000 --- a/ruby/benchmark/vm2_poly_same_method.yml +++ /dev/null @@ -1,25 +0,0 @@ -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: - vm2_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/ruby/benchmark/vm2_poly_singleton.yml b/ruby/benchmark/vm2_poly_singleton.yml deleted file mode 100644 index e58d7bfb3..000000000 --- a/ruby/benchmark/vm2_poly_singleton.yml +++ /dev/null @@ -1,18 +0,0 @@ -# loop_count is not utilized since `i` is involved in the script -benchmark: - vm2_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/ruby/benchmark/vm2_proc.yml b/ruby/benchmark/vm2_proc.yml deleted file mode 100644 index 5c36e936d..000000000 --- a/ruby/benchmark/vm2_proc.yml +++ /dev/null @@ -1,12 +0,0 @@ -prelude: | - def m &b - b - end - - pr = m{ - a = 1 - } -benchmark: - vm2_proc: | - pr.call -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_raise1.yml b/ruby/benchmark/vm2_raise1.yml deleted file mode 100644 index f6eb30896..000000000 --- a/ruby/benchmark/vm2_raise1.yml +++ /dev/null @@ -1,16 +0,0 @@ -prelude: | - def rec n - if n > 0 - rec n-1 - else - raise - end - end -benchmark: - vm2_raise1: | - begin - rec 1 - rescue - # ignore - end -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_raise2.yml b/ruby/benchmark/vm2_raise2.yml deleted file mode 100644 index 7d51b1b31..000000000 --- a/ruby/benchmark/vm2_raise2.yml +++ /dev/null @@ -1,16 +0,0 @@ -prelude: | - def rec n - if n > 0 - rec n-1 - else - raise - end - end -benchmark: - vm2_raise2: | - begin - rec 10 - rescue - # ignore - end -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_regexp.yml b/ruby/benchmark/vm2_regexp.yml deleted file mode 100644 index e53341f43..000000000 --- a/ruby/benchmark/vm2_regexp.yml +++ /dev/null @@ -1,8 +0,0 @@ -prelude: | - str = 'xxxhogexxx' -benchmark: - vm2_regexp: | - /hoge/ =~ str - vm2_regexp_invert: | - str =~ /hoge/ -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_send.yml b/ruby/benchmark/vm2_send.yml deleted file mode 100644 index 44a12a27d..000000000 --- a/ruby/benchmark/vm2_send.yml +++ /dev/null @@ -1,11 +0,0 @@ -prelude: | - class C - def m - end - end - - o = C.new -benchmark: - vm2_send: | - o.__send__ :m -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_string_literal.yml b/ruby/benchmark/vm2_string_literal.yml deleted file mode 100644 index 54b0aec1f..000000000 --- a/ruby/benchmark/vm2_string_literal.yml +++ /dev/null @@ -1,4 +0,0 @@ -benchmark: - vm2_string_literal: | - x = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_struct_big_aref_hi.yml b/ruby/benchmark/vm2_struct_big_aref_hi.yml deleted file mode 100644 index eed1846d2..000000000 --- a/ruby/benchmark/vm2_struct_big_aref_hi.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - s = Struct.new(*('a'..'z').map { |x| x.to_sym }) - x = s.new -benchmark: - vm2_struct_big_aref_hi: | - x.z # x[25] -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_struct_big_aref_lo.yml b/ruby/benchmark/vm2_struct_big_aref_lo.yml deleted file mode 100644 index 0915435b7..000000000 --- a/ruby/benchmark/vm2_struct_big_aref_lo.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - s = Struct.new(*('a'..'z').map { |x| x.to_sym }) - x = s.new -benchmark: - vm2_struct_big_aref_lo: | - x.k # x[10] -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_struct_big_aset.yml b/ruby/benchmark/vm2_struct_big_aset.yml deleted file mode 100644 index 6af50103d..000000000 --- a/ruby/benchmark/vm2_struct_big_aset.yml +++ /dev/null @@ -1,11 +0,0 @@ -# loop_count is not utilized since `i` is involved in the script -benchmark: - vm2_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/ruby/benchmark/vm2_struct_big_href_hi.yml b/ruby/benchmark/vm2_struct_big_href_hi.yml deleted file mode 100644 index 60aa7fddf..000000000 --- a/ruby/benchmark/vm2_struct_big_href_hi.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - s = Struct.new(*('a'..'z').map { |x| x.to_sym }) - x = s.new -benchmark: - vm2_struct_big_href_hi: | - x[:z] -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_struct_big_href_lo.yml b/ruby/benchmark/vm2_struct_big_href_lo.yml deleted file mode 100644 index c55c0bd16..000000000 --- a/ruby/benchmark/vm2_struct_big_href_lo.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - s = Struct.new(*('a'..'z').map { |x| x.to_sym }) - x = s.new -benchmark: - vm2_struct_big_href_lo: | - x[:k] -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_struct_big_hset.yml b/ruby/benchmark/vm2_struct_big_hset.yml deleted file mode 100644 index d199c5bd4..000000000 --- a/ruby/benchmark/vm2_struct_big_hset.yml +++ /dev/null @@ -1,11 +0,0 @@ -# loop_count is not utilized since `i` is involved in the script -benchmark: - vm2_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/ruby/benchmark/vm2_struct_small_aref.yml b/ruby/benchmark/vm2_struct_small_aref.yml deleted file mode 100644 index 83381bed3..000000000 --- a/ruby/benchmark/vm2_struct_small_aref.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - s = Struct.new(:a, :b, :c) - x = s.new -benchmark: - vm2_struct_small_aref: | - x.a -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_struct_small_aset.yml b/ruby/benchmark/vm2_struct_small_aset.yml deleted file mode 100644 index 3e84a61dd..000000000 --- a/ruby/benchmark/vm2_struct_small_aset.yml +++ /dev/null @@ -1,11 +0,0 @@ -# loop_count is not utilized since `i` is involved in the script -benchmark: - vm2_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/ruby/benchmark/vm2_struct_small_href.yml b/ruby/benchmark/vm2_struct_small_href.yml deleted file mode 100644 index b744f070d..000000000 --- a/ruby/benchmark/vm2_struct_small_href.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - s = Struct.new(:a, :b, :c) - x = s.new -benchmark: - vm2_struct_small_href: | - x[:a] -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_struct_small_hset.yml b/ruby/benchmark/vm2_struct_small_hset.yml deleted file mode 100644 index d43845d6e..000000000 --- a/ruby/benchmark/vm2_struct_small_hset.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - s = Struct.new(:a, :b, :c) - x = s.new -benchmark: - vm2_struct_small_hset: | - x[:a] = 1 -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_super.yml b/ruby/benchmark/vm2_super.yml deleted file mode 100644 index 674743762..000000000 --- a/ruby/benchmark/vm2_super.yml +++ /dev/null @@ -1,17 +0,0 @@ -prelude: | - class C - def m - 1 - end - end - - class CC < C - def m - super() - end - end - - obj = CC.new -benchmark: - vm2_super: obj.m -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_unif1.yml b/ruby/benchmark/vm2_unif1.yml deleted file mode 100644 index caef13279..000000000 --- a/ruby/benchmark/vm2_unif1.yml +++ /dev/null @@ -1,7 +0,0 @@ -prelude: | - def m a, b - end -benchmark: - vm2_unif1: | - m 100, 200 -loop_count: 6000000 diff --git a/ruby/benchmark/vm2_zsuper.yml b/ruby/benchmark/vm2_zsuper.yml deleted file mode 100644 index f760cfd48..000000000 --- a/ruby/benchmark/vm2_zsuper.yml +++ /dev/null @@ -1,18 +0,0 @@ -prelude: | - class C - def m a - 1 - end - end - - class CC < C - def m a - super - end - end - - obj = CC.new -benchmark: - vm2_zsuper: | - obj.m 10 -loop_count: 6000000 diff --git a/ruby/benchmark/vm_array.yml b/ruby/benchmark/vm_array.yml new file mode 100644 index 000000000..2a177237e --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_attr_ivar.yml b/ruby/benchmark/vm_attr_ivar.yml new file mode 100644 index 000000000..75b803478 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_attr_ivar_set.yml b/ruby/benchmark/vm_attr_ivar_set.yml new file mode 100644 index 000000000..a0d379b18 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm3_backtrace.rb b/ruby/benchmark/vm_backtrace.rb similarity index 100% rename from ruby/benchmark/vm3_backtrace.rb rename to ruby/benchmark/vm_backtrace.rb diff --git a/ruby/benchmark/vm_bigarray.yml b/ruby/benchmark/vm_bigarray.yml new file mode 100644 index 000000000..8b2d3f344 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_bighash.yml b/ruby/benchmark/vm_bighash.yml new file mode 100644 index 000000000..4dacfde79 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_block.yml b/ruby/benchmark/vm_block.yml new file mode 100644 index 000000000..68b3e40bf --- /dev/null +++ b/ruby/benchmark/vm_block.yml @@ -0,0 +1,9 @@ +prelude: | + def m + yield + end +benchmark: + vm_block: | + m{ + } +loop_count: 30000000 diff --git a/ruby/benchmark/vm_block_handler.yml b/ruby/benchmark/vm_block_handler.yml new file mode 100644 index 000000000..461d7953a --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_blockparam.yml b/ruby/benchmark/vm_blockparam.yml new file mode 100644 index 000000000..5e5a0170a --- /dev/null +++ b/ruby/benchmark/vm_blockparam.yml @@ -0,0 +1,7 @@ +prelude: | + def m &b + end +benchmark: + vm_blockparam: | + m{} +loop_count: 30000000 diff --git a/ruby/benchmark/vm_blockparam_call.yml b/ruby/benchmark/vm_blockparam_call.yml new file mode 100644 index 000000000..a7d8d366e --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_blockparam_pass.yml b/ruby/benchmark/vm_blockparam_pass.yml new file mode 100644 index 000000000..841f5e7a6 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_blockparam_yield.yml b/ruby/benchmark/vm_blockparam_yield.yml new file mode 100644 index 000000000..8ea9b46ed --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_case.yml b/ruby/benchmark/vm_case.yml new file mode 100644 index 000000000..b26a491a1 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_case_classes.yml b/ruby/benchmark/vm_case_classes.yml new file mode 100644 index 000000000..cacc4f046 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_case_lit.yml b/ruby/benchmark/vm_case_lit.yml new file mode 100644 index 000000000..9f9180154 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm3_clearmethodcache.rb b/ruby/benchmark/vm_clearmethodcache.rb similarity index 100% rename from ruby/benchmark/vm3_clearmethodcache.rb rename to ruby/benchmark/vm_clearmethodcache.rb diff --git a/ruby/benchmark/vm_const.yml b/ruby/benchmark/vm_const.yml new file mode 100644 index 000000000..6064d4eed --- /dev/null +++ b/ruby/benchmark/vm_const.yml @@ -0,0 +1,7 @@ +prelude: | + Const = 1 +benchmark: + vm_const: | + j = Const + k = Const +loop_count: 30000000 diff --git a/ruby/benchmark/vm_cvar.yml b/ruby/benchmark/vm_cvar.yml new file mode 100644 index 000000000..1d0e16182 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_defined_method.yml b/ruby/benchmark/vm_defined_method.yml new file mode 100644 index 000000000..347e0cfd3 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_dstr.yml b/ruby/benchmark/vm_dstr.yml new file mode 100644 index 000000000..30c7a3193 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_dstr_ary.rb b/ruby/benchmark/vm_dstr_ary.rb new file mode 100644 index 000000000..1d3aa3b97 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_dstr_bool.rb b/ruby/benchmark/vm_dstr_bool.rb new file mode 100644 index 000000000..631ca5475 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_dstr_class_module.rb b/ruby/benchmark/vm_dstr_class_module.rb new file mode 100644 index 000000000..becf0861c --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_dstr_digit.rb b/ruby/benchmark/vm_dstr_digit.rb new file mode 100644 index 000000000..caaa39519 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_dstr_int.rb b/ruby/benchmark/vm_dstr_int.rb new file mode 100644 index 000000000..ed380d759 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_dstr_nil.rb b/ruby/benchmark/vm_dstr_nil.rb new file mode 100644 index 000000000..ec4f5d6c6 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_dstr_obj.rb b/ruby/benchmark/vm_dstr_obj.rb new file mode 100644 index 000000000..fb78637ea --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_dstr_obj_def.rb b/ruby/benchmark/vm_dstr_obj_def.rb new file mode 100644 index 000000000..99ff7b98f --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_dstr_str.rb b/ruby/benchmark/vm_dstr_str.rb new file mode 100644 index 000000000..45fc10789 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_dstr_sym.rb b/ruby/benchmark/vm_dstr_sym.rb new file mode 100644 index 000000000..484b8f815 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_ensure.yml b/ruby/benchmark/vm_ensure.yml new file mode 100644 index 000000000..4ea62f30d --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_eval.yml b/ruby/benchmark/vm_eval.yml new file mode 100644 index 000000000..7ba1a8d1d --- /dev/null +++ b/ruby/benchmark/vm_eval.yml @@ -0,0 +1,4 @@ +benchmark: + vm_eval: | + eval("1") +loop_count: 6000000 diff --git a/ruby/benchmark/vm_fiber_allocate.yml b/ruby/benchmark/vm_fiber_allocate.yml new file mode 100644 index 000000000..b5a54e1dd --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_fiber_count.yml b/ruby/benchmark/vm_fiber_count.yml new file mode 100644 index 000000000..b83d3152d --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_fiber_reuse.yml b/ruby/benchmark/vm_fiber_reuse.yml new file mode 100644 index 000000000..4ca41085b --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_fiber_reuse_gc.yml b/ruby/benchmark/vm_fiber_reuse_gc.yml new file mode 100644 index 000000000..892622f12 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_fiber_switch.yml b/ruby/benchmark/vm_fiber_switch.yml new file mode 100644 index 000000000..3de36b66e --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_float_simple.yml b/ruby/benchmark/vm_float_simple.yml new file mode 100644 index 000000000..92f5fd52a --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_freezestring.yml b/ruby/benchmark/vm_freezestring.yml new file mode 100644 index 000000000..facc9aa04 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm3_gc.rb b/ruby/benchmark/vm_gc.rb similarity index 100% rename from ruby/benchmark/vm3_gc.rb rename to ruby/benchmark/vm_gc.rb diff --git a/ruby/benchmark/vm3_gc_old_full.rb b/ruby/benchmark/vm_gc_old_full.rb similarity index 100% rename from ruby/benchmark/vm3_gc_old_full.rb rename to ruby/benchmark/vm_gc_old_full.rb diff --git a/ruby/benchmark/vm3_gc_old_immediate.rb b/ruby/benchmark/vm_gc_old_immediate.rb similarity index 100% rename from ruby/benchmark/vm3_gc_old_immediate.rb rename to ruby/benchmark/vm_gc_old_immediate.rb diff --git a/ruby/benchmark/vm3_gc_old_lazy.rb b/ruby/benchmark/vm_gc_old_lazy.rb similarity index 100% rename from ruby/benchmark/vm3_gc_old_lazy.rb rename to ruby/benchmark/vm_gc_old_lazy.rb diff --git a/ruby/benchmark/vm_gc_short_lived.yml b/ruby/benchmark/vm_gc_short_lived.yml new file mode 100644 index 000000000..29c803fee --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_gc_short_with_complex_long.yml b/ruby/benchmark/vm_gc_short_with_complex_long.yml new file mode 100644 index 000000000..4b6c3ed7b --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_gc_short_with_long.yml b/ruby/benchmark/vm_gc_short_with_long.yml new file mode 100644 index 000000000..03ba0f95a --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_gc_short_with_symbol.yml b/ruby/benchmark/vm_gc_short_with_symbol.yml new file mode 100644 index 000000000..129b8bf4e --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_gc_wb_ary.yml b/ruby/benchmark/vm_gc_wb_ary.yml new file mode 100644 index 000000000..e3293e72d --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_gc_wb_ary_promoted.yml b/ruby/benchmark/vm_gc_wb_ary_promoted.yml new file mode 100644 index 000000000..003995945 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_gc_wb_obj.yml b/ruby/benchmark/vm_gc_wb_obj.yml new file mode 100644 index 000000000..a2a2ce2d1 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_gc_wb_obj_promoted.yml b/ruby/benchmark/vm_gc_wb_obj_promoted.yml new file mode 100644 index 000000000..00a454ba7 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_iclass_super.yml b/ruby/benchmark/vm_iclass_super.yml new file mode 100644 index 000000000..21bb7db24 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_ivar.yml b/ruby/benchmark/vm_ivar.yml new file mode 100644 index 000000000..119531d5e --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_ivar_init.yml b/ruby/benchmark/vm_ivar_init.yml new file mode 100644 index 000000000..c6f163390 --- /dev/null +++ b/ruby/benchmark/vm_ivar_init.yml @@ -0,0 +1,14 @@ +prelude: | + class C + def initialize + @a = nil + @b = nil + @c = nil + @d = nil + @e = nil + end + end +benchmark: + vm_ivar_init: | + C.new +loop_count: 30000000 diff --git a/ruby/benchmark/vm_ivar_of_class.yml b/ruby/benchmark/vm_ivar_of_class.yml new file mode 100644 index 000000000..172e28b2f --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_ivar_of_class_set.yml b/ruby/benchmark/vm_ivar_of_class_set.yml new file mode 100644 index 000000000..2ea519942 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_ivar_set.yml b/ruby/benchmark/vm_ivar_set.yml new file mode 100644 index 000000000..8bbb60043 --- /dev/null +++ b/ruby/benchmark/vm_ivar_set.yml @@ -0,0 +1,5 @@ +benchmark: + vm_ivar_set: | + @a = 1 + @b = 2 +loop_count: 30000000 diff --git a/ruby/benchmark/vm_ivar_set_subclass.yml b/ruby/benchmark/vm_ivar_set_subclass.yml new file mode 100644 index 000000000..2653d36de --- /dev/null +++ b/ruby/benchmark/vm_ivar_set_subclass.yml @@ -0,0 +1,17 @@ +prelude: | + class A + def initialize + @a = nil + @b = nil + @c = nil + @d = nil + @e = nil + end + end + class B < A; end + class C < A; end +benchmark: + vm_ivar_init_subclass: | + B.new + C.new +loop_count: 3000000 diff --git a/ruby/benchmark/vm_length.yml b/ruby/benchmark/vm_length.yml new file mode 100644 index 000000000..5fd94e7d8 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_lvar_init.yml b/ruby/benchmark/vm_lvar_init.yml new file mode 100644 index 000000000..70a9b1c0c --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_lvar_set.yml b/ruby/benchmark/vm_lvar_set.yml new file mode 100644 index 000000000..f29f763d8 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_method.yml b/ruby/benchmark/vm_method.yml new file mode 100644 index 000000000..d45e4ec57 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_method_missing.yml b/ruby/benchmark/vm_method_missing.yml new file mode 100644 index 000000000..3da456c0b --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_method_with_block.yml b/ruby/benchmark/vm_method_with_block.yml new file mode 100644 index 000000000..281a48139 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_module_ann_const_set.yml b/ruby/benchmark/vm_module_ann_const_set.yml new file mode 100644 index 000000000..243229ba4 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_module_const_set.yml b/ruby/benchmark/vm_module_const_set.yml new file mode 100644 index 000000000..e5a24181a --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_mutex.yml b/ruby/benchmark/vm_mutex.yml new file mode 100644 index 000000000..abcf1e28c --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_neq.yml b/ruby/benchmark/vm_neq.yml new file mode 100644 index 000000000..fb04d15ae --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_newlambda.yml b/ruby/benchmark/vm_newlambda.yml new file mode 100644 index 000000000..0b9787d91 --- /dev/null +++ b/ruby/benchmark/vm_newlambda.yml @@ -0,0 +1,4 @@ +benchmark: + vm_newlambda: | + lambda {} +loop_count: 6000000 diff --git a/ruby/benchmark/vm_not.yml b/ruby/benchmark/vm_not.yml new file mode 100644 index 000000000..c68dde3c5 --- /dev/null +++ b/ruby/benchmark/vm_not.yml @@ -0,0 +1,6 @@ +prelude: | + obj = Object.new +benchmark: + vm_not: | + !obj +loop_count: 30000000 diff --git a/ruby/benchmark/vm_poly_method.yml b/ruby/benchmark/vm_poly_method.yml new file mode 100644 index 000000000..dd2f4e71d --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_poly_method_ov.yml b/ruby/benchmark/vm_poly_method_ov.yml new file mode 100644 index 000000000..bca1b6272 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_poly_same_method.yml b/ruby/benchmark/vm_poly_same_method.yml new file mode 100644 index 000000000..6c5404ac8 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_poly_singleton.yml b/ruby/benchmark/vm_poly_singleton.yml new file mode 100644 index 000000000..c7923160f --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_proc.yml b/ruby/benchmark/vm_proc.yml new file mode 100644 index 000000000..2f8de6c27 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_raise1.yml b/ruby/benchmark/vm_raise1.yml new file mode 100644 index 000000000..247d9f70e --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_raise2.yml b/ruby/benchmark/vm_raise2.yml new file mode 100644 index 000000000..f0fa047b3 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_regexp.yml b/ruby/benchmark/vm_regexp.yml new file mode 100644 index 000000000..2aa3d94db --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_rescue.yml b/ruby/benchmark/vm_rescue.yml new file mode 100644 index 000000000..b4a0af521 --- /dev/null +++ b/ruby/benchmark/vm_rescue.yml @@ -0,0 +1,6 @@ +benchmark: + vm_rescue: | + begin + rescue + end +loop_count: 30000000 diff --git a/ruby/benchmark/vm_send.yml b/ruby/benchmark/vm_send.yml new file mode 100644 index 000000000..f31bc7ac8 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_send_cfunc.yml b/ruby/benchmark/vm_send_cfunc.yml new file mode 100644 index 000000000..b114ac317 --- /dev/null +++ b/ruby/benchmark/vm_send_cfunc.yml @@ -0,0 +1,3 @@ +benchmark: + vm_send_cfunc: self.class +loop_count: 100000000 diff --git a/ruby/benchmark/vm_simplereturn.yml b/ruby/benchmark/vm_simplereturn.yml new file mode 100644 index 000000000..c9829cff0 --- /dev/null +++ b/ruby/benchmark/vm_simplereturn.yml @@ -0,0 +1,7 @@ +prelude: | + def m + return 1 + end +benchmark: + vm_simplereturn: m +loop_count: 30000000 diff --git a/ruby/benchmark/vm_string_literal.yml b/ruby/benchmark/vm_string_literal.yml new file mode 100644 index 000000000..64439c798 --- /dev/null +++ b/ruby/benchmark/vm_string_literal.yml @@ -0,0 +1,4 @@ +benchmark: + vm_string_literal: | + x = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +loop_count: 6000000 diff --git a/ruby/benchmark/vm_struct_big_aref_hi.yml b/ruby/benchmark/vm_struct_big_aref_hi.yml new file mode 100644 index 000000000..4cf78970c --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_struct_big_aref_lo.yml b/ruby/benchmark/vm_struct_big_aref_lo.yml new file mode 100644 index 000000000..c91af27fa --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_struct_big_aset.yml b/ruby/benchmark/vm_struct_big_aset.yml new file mode 100644 index 000000000..69550d14e --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_struct_big_href_hi.yml b/ruby/benchmark/vm_struct_big_href_hi.yml new file mode 100644 index 000000000..09b764dd1 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_struct_big_href_lo.yml b/ruby/benchmark/vm_struct_big_href_lo.yml new file mode 100644 index 000000000..d2f00b220 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_struct_big_hset.yml b/ruby/benchmark/vm_struct_big_hset.yml new file mode 100644 index 000000000..fc45cbee9 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_struct_small_aref.yml b/ruby/benchmark/vm_struct_small_aref.yml new file mode 100644 index 000000000..5a83251d1 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_struct_small_aset.yml b/ruby/benchmark/vm_struct_small_aset.yml new file mode 100644 index 000000000..74f435f12 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_struct_small_href.yml b/ruby/benchmark/vm_struct_small_href.yml new file mode 100644 index 000000000..6b7d7f39e --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_struct_small_hset.yml b/ruby/benchmark/vm_struct_small_hset.yml new file mode 100644 index 000000000..5d43b150d --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_super.yml b/ruby/benchmark/vm_super.yml new file mode 100644 index 000000000..0d1e965c6 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_swap.yml b/ruby/benchmark/vm_swap.yml new file mode 100644 index 000000000..e824a65e0 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_thread_condvar1.rb b/ruby/benchmark/vm_thread_condvar1.rb index cf5706b23..feed27c3a 100644 --- a/ruby/benchmark/vm_thread_condvar1.rb +++ b/ruby/benchmark/vm_thread_condvar1.rb @@ -1,9 +1,9 @@ # two threads, two mutex, two condvar ping-pong require 'thread' -m1 = Mutex.new -m2 = Mutex.new -cv1 = ConditionVariable.new -cv2 = ConditionVariable.new +m1 = Thread::Mutex.new +m2 = Thread::Mutex.new +cv1 = Thread::ConditionVariable.new +cv2 = Thread::ConditionVariable.new max = 100000 i = 0 wait = nil diff --git a/ruby/benchmark/vm_thread_condvar2.rb b/ruby/benchmark/vm_thread_condvar2.rb index 7c8dc1948..6590c4134 100644 --- a/ruby/benchmark/vm_thread_condvar2.rb +++ b/ruby/benchmark/vm_thread_condvar2.rb @@ -1,16 +1,16 @@ # many threads, one mutex, many condvars require 'thread' -m = Mutex.new -cv1 = ConditionVariable.new -cv2 = ConditionVariable.new +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 = ConditionVariable.new + start_cv = Thread::ConditionVariable.new scvs << start_cv - start_mtx = Mutex.new + start_mtx = Thread::Mutex.new start_mtx.synchronize do th = Thread.new(start_mtx, start_cv) do |sm, scv| m.synchronize do diff --git a/ruby/benchmark/vm_unif1.yml b/ruby/benchmark/vm_unif1.yml new file mode 100644 index 000000000..04187bb0e --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_yield.yml b/ruby/benchmark/vm_yield.yml new file mode 100644 index 000000000..230be3d84 --- /dev/null +++ b/ruby/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/ruby/benchmark/vm_zsuper.yml b/ruby/benchmark/vm_zsuper.yml new file mode 100644 index 000000000..bfb583757 --- /dev/null +++ b/ruby/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/ruby/bignum.c b/ruby/bignum.c index 4569183e4..f83fbe2c1 100644 --- a/ruby/bignum.c +++ b/ruby/bignum.c @@ -9,32 +9,39 @@ **********************************************************************/ -#include "internal.h" -#include "ruby/thread.h" -#include "ruby/util.h" -#include "id.h" +#include "ruby/internal/config.h" + +#include +#include +#include #ifdef HAVE_STRINGS_H -#include +# include #endif -#include -#include -#include + #ifdef HAVE_IEEEFP_H -#include +# include #endif -#include "ruby_assert.h" #if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H) -#define USE_GMP -#include +# define USE_GMP +# include #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" -#ifndef RUBY_INTEGER_UNIFICATION -VALUE rb_cBignum; -#endif const char ruby_digitmap[] = "0123456789abcdefghijklmnopqrstuvwxyz"; #ifndef SIZEOF_BDIGIT_DBL @@ -65,7 +72,7 @@ STATIC_ASSERT(sizeof_long_and_sizeof_bdigit, SIZEOF_BDIGIT % SIZEOF_LONG == 0); #else # define HOST_BIGENDIAN_P 0 #endif -/* (!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))) @@ -149,15 +156,11 @@ typedef void (mulfunc_t)(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, c 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 @@ -457,7 +460,6 @@ 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; @@ -1047,6 +1049,7 @@ integer_unpack_num_bdigits(size_t numwords, size_t wordsize, size_t nails, int * 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); + (void)num_bdigits1; } #endif } @@ -1638,11 +1641,13 @@ rb_big_sq_fast(VALUE x) /* 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); @@ -1650,14 +1655,20 @@ bary_mul_balance_with_mulfunc(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t BDIGITS_ZERO(zds, xn); + if (wn < xn) { + const size_t r = (yn % xn) ? (yn % xn) : xn; + if ((2 * xn + yn + 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, @@ -1665,21 +1676,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; } - BDIGITS_ZERO(zds+xn+yn0, zn - (xn+yn0)); + BDIGITS_ZERO(zds+xn+yn, zn - (xn+yn)); if (work) ALLOCV_END(work); @@ -1996,7 +2011,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 @@ -2277,10 +2292,23 @@ rb_big_mul_toom3(VALUE x, VALUE y) } #ifdef 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; @@ -2289,15 +2317,15 @@ bary_mul_gmp(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT 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); @@ -2336,9 +2364,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; } @@ -2446,12 +2474,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 */ @@ -2469,6 +2492,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 @@ -2748,7 +2780,6 @@ rb_big_divrem_normal(VALUE x, VALUE y) 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; @@ -2762,8 +2793,8 @@ bary_divmod_gmp(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT *xd 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); @@ -2779,13 +2810,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); } @@ -2884,29 +2915,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 @@ -2944,7 +2954,7 @@ 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)) : \ @@ -2954,19 +2964,19 @@ static void rb_big_realloc(VALUE big, size_t len) { BDIGIT *ds; - if (RBASIC(big)->flags & BIGNUM_EMBED_FLAG) { + if (BIGNUM_EMBED_P(big)) { 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; + 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; + FL_SET_RAW(big, 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) { @@ -2996,18 +3006,19 @@ 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); + VALUE bigv = (VALUE)big; + BIGNUM_SET_SIGN(bigv, sign); 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)); + FL_SET_RAW(bigv, BIGNUM_EMBED_FLAG); + BIGNUM_SET_LEN(bigv, len); + (void)VALGRIND_MAKE_MEM_UNDEFINED((void*)big->as.ary, sizeof(big->as.ary)); } else { - RBIGNUM(big)->as.heap.digits = ALLOC_N(BDIGIT, len); - RBIGNUM(big)->as.heap.len = len; + 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 @@ -3384,7 +3395,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; @@ -3399,6 +3410,7 @@ rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret) numwords0 = absint_numwords_generic(numbytes, nlz_bits_in_msbyte, word_numbits, &nlz_bits0); assert(numwords0 == numwords); assert(nlz_bits0 == nlz_bits); + (void)numwords0; } #endif } @@ -3586,7 +3598,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. @@ -3683,10 +3695,10 @@ rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t na if (u == 0) return LONG2FIX(0); if (0 < sign && POSFIXABLE(u)) - return LONG2FIX(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); } @@ -3741,12 +3753,12 @@ str2big_scan_digits(const char *s, const char *str, int base, int badcheck, size return TRUE; } - if (badcheck && *str == '_') goto bad; + if (badcheck && *str == '_') return FALSE; while ((c = *str++) != 0) { if (c == '_') { if (nondigit) { - if (badcheck) goto bad; + if (badcheck) return FALSE; break; } nondigit = (char) c; @@ -3761,7 +3773,7 @@ str2big_scan_digits(const char *s, const char *str, int base, int badcheck, size } if (len > 0 && !--len) break; } - if (badcheck && nondigit) goto bad; + if (badcheck && nondigit) return FALSE; if (badcheck && len) { str--; while (*str && ISSPACE(*str)) { @@ -3769,7 +3781,6 @@ str2big_scan_digits(const char *s, const char *str, int base, int badcheck, size if (len > 0 && !--len) break; } if (len && *str) { - bad: return FALSE; } } @@ -3956,7 +3967,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; @@ -3979,7 +3989,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); @@ -4066,10 +4076,7 @@ rb_int_parse_cstr(const char *str, ssize_t len, char **endp, size_t *ndigits, } while (0) if (!str) { - bad: - if (endp) *endp = (char *)str; - if (ndigits) *ndigits = num_digits; - return z; + goto bad; } if (len && (flags & RB_INT_PARSE_SIGN)) { while (ISSPACE(*str)) ADV(1); @@ -4233,6 +4240,11 @@ rb_int_parse_cstr(const char *str, ssize_t len, char **endp, size_t *ndigits, } return bignorm(z); + + bad: + if (endp) *endp = (char *)str; + if (ndigits) *ndigits = num_digits; + return z; } static VALUE @@ -4481,14 +4493,14 @@ 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); } @@ -4652,12 +4664,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 @@ -4680,8 +4686,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; @@ -4701,7 +4707,7 @@ power_cache_get_power(int base, int power_level, size_t *numdigits_ret) } 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 { @@ -5010,7 +5016,6 @@ rb_big2str_generic(VALUE x, int base) 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; @@ -5018,7 +5023,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); @@ -5373,11 +5378,9 @@ rb_integer_float_cmp(VALUE x, VALUE y) #if SIZEOF_LONG * CHAR_BIT >= DBL_MANT_DIG /* assume FLT_RADIX == 2 */ COMPILER_WARNING_PUSH -#ifdef __has_warning #if __has_warning("-Wimplicit-int-float-conversion") COMPILER_WARNING_IGNORED(-Wimplicit-int-float-conversion) #endif -#endif static const double LONG_MAX_as_double = LONG_MAX; COMPILER_WARNING_POP #endif @@ -5388,7 +5391,7 @@ 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) @@ -5396,18 +5399,14 @@ 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_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); @@ -5477,10 +5476,10 @@ big_op(VALUE x, VALUE y, enum big_op_t op) 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; } @@ -5515,7 +5514,7 @@ rb_big_le(VALUE x, VALUE y) * * Returns true only if obj has the same value * as big. Contrast this with Integer#eql?, which requires - * obj to be a Integer. + * obj to be an Integer. * * 68719476736 == 68719476736.0 #=> true */ @@ -5524,7 +5523,7 @@ VALUE rb_big_eq(VALUE x, VALUE y) { if (FIXNUM_P(y)) { - return bignorm(x) == y ? Qtrue : Qfalse; + return RBOOL(bignorm(x) == y); } else if (RB_BIGNUM_TYPE_P(y)) { } @@ -5536,8 +5535,7 @@ rb_big_eq(VALUE x, VALUE y) } 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); } VALUE @@ -5546,8 +5544,7 @@ 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); } VALUE @@ -6266,7 +6263,7 @@ rb_big_pow(VALUE x, VALUE y) yy = FIX2LONG(y); if (yy < 0) { - x = rb_big_pow(x, INT2NUM(-yy)); + x = rb_big_pow(x, LONG2NUM(-yy)); if (RB_INTEGER_TYPE_P(x)) return rb_rational_raw(INT2FIX(1), x); else @@ -6691,7 +6688,6 @@ rb_big_aref(VALUE x, VALUE y) return INT2FIX(0); bigtrunc(y); if (BIGSIZE(y) > sizeof(size_t)) { - out_of_range: return BIGNUM_SIGN(x) ? INT2FIX(0) : INT2FIX(1); } #if SIZEOF_SIZE_T <= SIZEOF_LONG @@ -6709,7 +6705,8 @@ rb_big_aref(VALUE x, VALUE y) 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)) @@ -6830,10 +6827,7 @@ rb_big_bit_length(VALUE big) VALUE rb_big_odd_p(VALUE num) { - if (BIGNUM_LEN(num) != 0 && BDIGITS(num)[0] & 1) { - return Qtrue; - } - return Qfalse; + return RBOOL(BIGNUM_LEN(num) != 0 && BDIGITS(num)[0] & 1); } VALUE @@ -6940,8 +6934,6 @@ rb_big_isqrt(VALUE n) bary_small_rshift(xds, xds, xn, 1, carry); tn = BIGNUM_LEN(t); } - rb_big_realloc(t, 0); - rb_gc_force_recycle(t); } RBASIC_SET_CLASS_RAW(x, rb_cInteger); return x; @@ -6951,18 +6943,17 @@ rb_big_isqrt(VALUE n) 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) { - const size_t nails = (sizeof(BDIGIT)-SIZEOF_BDIGIT)*CHAR_BIT; mpz_t z, x, y, m; size_t count; mpz_init(x); mpz_init(y); mpz_init(m); mpz_init(z); - mpz_import(x, xn, -1, sizeof(BDIGIT), 0, nails, xds); - mpz_import(y, yn, -1, sizeof(BDIGIT), 0, nails, yds); - mpz_import(m, mn, -1, sizeof(BDIGIT), 0, nails, mds); + bdigits_to_mpz(x, xds, xn); + bdigits_to_mpz(y, yds, yn); + bdigits_to_mpz(m, mds, mn); mpz_powm(z, x, y, m); - 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); @@ -7140,6 +7131,7 @@ rb_int_powm(int const argc, VALUE * const argv, VALUE const num) 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); } @@ -7149,6 +7141,7 @@ rb_int_powm(int const argc, VALUE * const argv, VALUE const num) } 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); } } @@ -7176,9 +7169,6 @@ rb_int_powm(int const argc, VALUE * const argv, VALUE const num) void Init_Bignum(void) { -#ifndef RUBY_INTEGER_UNIFICATION - rb_cBignum = rb_cInteger; -#endif /* An obsolete class, use Integer */ rb_define_const(rb_cObject, "Bignum", rb_cInteger); rb_deprecate_constant(rb_cObject, "Bignum"); diff --git a/ruby/bin/bundle b/ruby/bin/bundle deleted file mode 100755 index 1a0b06b00..000000000 --- a/ruby/bin/bundle +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'bundler' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('bundler', 'bundle', version) -else -gem "bundler", version -load Gem.bin_path("bundler", "bundle", version) -end diff --git a/ruby/bin/bundler b/ruby/bin/bundler deleted file mode 100755 index e15eb39ed..000000000 --- a/ruby/bin/bundler +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'bundler' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('bundler', 'bundler', version) -else -gem "bundler", version -load Gem.bin_path("bundler", "bundler", version) -end diff --git a/ruby/bin/irb b/ruby/bin/irb deleted file mode 100755 index ae6d358c9..000000000 --- a/ruby/bin/irb +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'irb' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('irb', 'irb', version) -else -gem "irb", version -load Gem.bin_path("irb", "irb", version) -end diff --git a/ruby/bin/racc b/ruby/bin/racc deleted file mode 100755 index 3ddac532b..000000000 --- a/ruby/bin/racc +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'racc' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0.a" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('racc', 'racc', version) -else -gem "racc", version -load Gem.bin_path("racc", "racc", version) -end diff --git a/ruby/bin/racc2y b/ruby/bin/racc2y deleted file mode 100755 index a1e435263..000000000 --- a/ruby/bin/racc2y +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'racc' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0.a" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('racc', 'racc2y', version) -else -gem "racc", version -load Gem.bin_path("racc", "racc2y", version) -end diff --git a/ruby/bin/rdoc b/ruby/bin/rdoc deleted file mode 100755 index 8fa948cdd..000000000 --- a/ruby/bin/rdoc +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'rdoc' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('rdoc', 'rdoc', version) -else -gem "rdoc", version -load Gem.bin_path("rdoc", "rdoc", version) -end diff --git a/ruby/bin/ri b/ruby/bin/ri deleted file mode 100755 index 0cc2f73bb..000000000 --- a/ruby/bin/ri +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'rdoc' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('rdoc', 'ri', version) -else -gem "rdoc", version -load Gem.bin_path("rdoc", "ri", version) -end diff --git a/ruby/bin/y2racc b/ruby/bin/y2racc deleted file mode 100755 index 023615f36..000000000 --- a/ruby/bin/y2racc +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'racc' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0.a" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('racc', 'y2racc', version) -else -gem "racc", version -load Gem.bin_path("racc", "y2racc", version) -end diff --git a/ruby/bootstraptest/pending.rb b/ruby/bootstraptest/pending.rb index 0959bfa2b..2c4b85a41 100644 --- a/ruby/bootstraptest/pending.rb +++ b/ruby/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,13 +15,6 @@ def m 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/ruby/bootstraptest/runner.rb b/ruby/bootstraptest/runner.rb index 56b4b1223..2cd91ffd0 100755 --- a/ruby/bootstraptest/runner.rb +++ b/ruby/bootstraptest/runner.rb @@ -261,6 +261,14 @@ def show_progress(message = '') $stderr.print 'E' $stderr.puts if @verbose error err.message, message +ensure + begin + check_coredump + rescue CoreDumpError => err + $stderr.print 'E' + $stderr.puts if @verbose + error err.message, message + end end def show_limit(testsrc, opt = '', **argh) @@ -275,7 +283,6 @@ def show_limit(testsrc, opt = '', **argh) def assert_check(testsrc, message = '', opt = '', **argh) show_progress(message) { result = get_result_string(testsrc, opt, **argh) - check_coredump yield(result) } end @@ -376,8 +383,8 @@ def assert_normal_exit(testsrc, *rest, timeout: nil, **opt) end def assert_finish(timeout_seconds, testsrc, message = '') - if RubyVM.const_defined? :MJIT - timeout_seconds *= 3 if RubyVM::MJIT.enabled? # for --jit-wait + if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? # for --jit-wait + timeout_seconds *= 3 end newtest show_progress(message) { @@ -453,7 +460,6 @@ def get_result_string(src, opt = '', **argh) `#{@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 @@ -513,7 +519,21 @@ 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', @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 end diff --git a/ruby/bootstraptest/test_eval.rb b/ruby/bootstraptest/test_eval.rb index fa04323b7..a9f389c67 100644 --- a/ruby/bootstraptest/test_eval.rb +++ b/ruby/bootstraptest/test_eval.rb @@ -116,6 +116,33 @@ class Integer 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 @@ -191,7 +218,7 @@ def initialize &b %w[break next redo].each do |keyword| assert_match %r"Can't escape from eval with #{keyword}\b", %{ - STDERR.reopen(STDOUT) + $stderr = STDOUT begin eval "0 rescue #{keyword}" rescue SyntaxError => e @@ -201,7 +228,7 @@ def initialize &b 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") @@ -250,7 +277,9 @@ def hoge; end assert_equal 'ok', %q{ begin - 12.instance_eval { @@a } + class A + 12.instance_eval { @@a } + end rescue NameError :ok end @@ -258,7 +287,9 @@ def hoge; end assert_equal 'ok', %q{ begin - 12.instance_exec { @@a } + class A + 12.instance_exec { @@a } + end rescue NameError :ok end diff --git a/ruby/bootstraptest/test_fiber.rb b/ruby/bootstraptest/test_fiber.rb index 35e1bf685..2614dd13b 100644 --- a/ruby/bootstraptest/test_fiber.rb +++ b/ruby/bootstraptest/test_fiber.rb @@ -19,12 +19,12 @@ } assert_equal %q{ok}, %q{ - 10_000.times.collect{Fiber.new{}} + 100.times.collect{Fiber.new{}} :ok } assert_equal %q{ok}, %q{ - fibers = 100.times.collect{Fiber.new{Fiber.yield}} + fibers = 1000.times.collect{Fiber.new{Fiber.yield}} fibers.each(&:resume) fibers.each(&:resume) :ok diff --git a/ruby/bootstraptest/test_flow.rb b/ruby/bootstraptest/test_flow.rb index 9da6d45cb..35f19db58 100644 --- a/ruby/bootstraptest/test_flow.rb +++ b/ruby/bootstraptest/test_flow.rb @@ -534,11 +534,11 @@ def each ['[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 @@ def each ['[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 diff --git a/ruby/bootstraptest/test_insns.rb b/ruby/bootstraptest/test_insns.rb index 1269d7d01..91fba9b01 100644 --- a/ruby/bootstraptest/test_insns.rb +++ b/ruby/bootstraptest/test_insns.rb @@ -64,8 +64,8 @@ def m&b [ 'setinstancevariable', %q{ @x = true }, ], [ 'getinstancevariable', %q{ @x = true; @x }, ], - [ 'setclassvariable', %q{ @@x = true }, ], - [ 'getclassvariable', %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 }, ], @@ -86,11 +86,8 @@ def m&b [ 'putobject', %q{ /(?x)/ =~ "x"; x == "x" }, ], [ 'putspecialobject', %q{ {//=>true}[//] }, ], - [ 'putiseq', %q{ -> { true }.() }, ], [ 'putstring', %q{ "true" }, ], [ 'tostring / concatstrings', %q{ "#{true}" }, ], - [ 'freezestring', %q{ "#{true}" }, fsl, ], - [ 'freezestring', %q{ "#{true}" }, '-d', fsl, ], [ 'toregexp', %q{ /#{true}/ =~ "true" && $~ }, ], [ 'intern', %q{ :"#{true}" }, ], @@ -123,6 +120,7 @@ class X; def to_a; ['u']; end; end [ '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 @@ -387,14 +385,13 @@ class X; def x; {}; end; end [ 'opt_empty_p', %q{ ''.empty? }, ], [ 'opt_empty_p', %q{ [].empty? }, ], [ 'opt_empty_p', %q{ {}.empty? }, ], - [ 'opt_empty_p', %q{ Queue.new.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_succ', %q{ x = Time.at(0); x.succ == Time.at(1) }, ], [ 'opt_not', %q{ ! false }, ], [ 'opt_neq', <<-'},', ], # { @@ -412,8 +409,6 @@ class Regexp; def =~ other; true; end; end class String; def =~ other; true; end; end 'true' =~ /true/ }, - - [ 'opt_call_c_function', 'Struct.new(:x).new.x = true', ], ] # normal path @@ -438,3 +433,8 @@ class String; def =~ other; true; end; end 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/ruby/bootstraptest/test_jump.rb b/ruby/bootstraptest/test_jump.rb index 794491586..d07c47a56 100644 --- a/ruby/bootstraptest/test_jump.rb +++ b/ruby/bootstraptest/test_jump.rb @@ -147,7 +147,7 @@ def m } } assert_match %r{Invalid retry}, %q{ -STDERR.reopen(STDOUT) +$stderr = STDOUT begin eval %q{ 1.times{ @@ -296,14 +296,19 @@ class << self 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/ruby/bootstraptest/test_proc.rb b/ruby/bootstraptest/test_proc.rb index 1e384411d..637603243 100644 --- a/ruby/bootstraptest/test_proc.rb +++ b/ruby/bootstraptest/test_proc.rb @@ -224,19 +224,6 @@ def m(&b) Proc.new{|a, *b| [a, b]}.call(1, 2, 3), ] } -assert_equal %q{1}, %q{ - pr = proc{ - $SAFE - } - $SAFE = 1 - pr.call -} -assert_equal %q{[1, 1]}, %q{ - pr = proc{ - $SAFE += 1 - } - [pr.call, $SAFE] -} assert_equal %q{1}, %q{ def m(&b) b @@ -380,8 +367,8 @@ def m 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/ruby/bootstraptest/test_ractor.rb b/ruby/bootstraptest/test_ractor.rb new file mode 100644 index 000000000..b29db7ab0 --- /dev/null +++ b/ruby/bootstraptest/test_ractor.rb @@ -0,0 +1,1582 @@ +# 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 "#", %q{ + Ractor.current.inspect +} + +# Return id, loc, and status for no-name ractor +assert_match /^#$/, %q{ + r = Ractor.new { '' } + r.take + sleep 0.1 until r.inspect =~ /terminated/ + r.inspect +} + +# Return id, name, loc, and status for named ractor +assert_match /^#$/, %q{ + r = Ractor.new(name: 'Test Ractor') { '' } + r.take + 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.take +} + +# 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.take +} + +# 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.take == ['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.take +} + +# Ractor#receive_if can filter the message +assert_equal '[2, 3, 1]', %q{ + r = Ractor.new Ractor.current do |main| + main << 1 + main << 2 + main << 3 + end + a = [] + a << Ractor.receive_if{|msg| msg == 2} + a << Ractor.receive_if{|msg| msg == 3} + a << Ractor.receive +} + +# Ractor#receive_if with break +assert_equal '[2, [1, :break], 3]', %q{ + r = Ractor.new Ractor.current do |main| + main << 1 + main << 2 + main << 3 + end + + a = [] + a << Ractor.receive_if{|msg| msg == 2} + a << Ractor.receive_if{|msg| break [msg, :break]} + a << Ractor.receive +} + +# Ractor#receive_if can't be called recursively +assert_equal '[[:e1, 1], [:e2, 2]]', %q{ + r = Ractor.new Ractor.current do |main| + main << 1 + main << 2 + main << 3 + end + + a = [] + + Ractor.receive_if do |msg| + begin + Ractor.receive + rescue Ractor::Error + a << [:e1, msg] + end + true # delete 1 from queue + end + + Ractor.receive_if do |msg| + begin + Ractor.receive_if{} + rescue Ractor::Error + a << [:e2, msg] + end + true # delete 2 from queue + end + + 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(&:take) +} + +# Ractor.make_shareable 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 = Ractor.current.instance_eval{ Proc.new { [v1, v2, v3, v4, v5] } } + + Ractor.make_shareable(closure).call +} + +# Ractor.make_shareable issue for locals in proc [Bug #18023] +assert_equal '[:a, :b, :c, :d, :e, :f, :g]', %q{ + a = :a + closure = Ractor.current.instance_eval do + -> { + b, c, d = :b, :c, :d + -> { + e, f, g = :e, :f, :g + -> { [a, b, c, d, e, f, g] } + }.call + }.call + end + + Ractor.make_shareable(closure).call +} + +# Now autoload in non-main Ractor is not supported +assert_equal 'ok', %q{ + autoload :Foo, 'foo.rb' + r = Ractor.new do + p Foo + rescue Ractor::UnsafeError + :ok + end + r.take +} + +### +### +# Ractor still has several memory corruption so skip huge number of tests +if ENV['GITHUB_WORKFLOW'] && + ENV['GITHUB_WORKFLOW'] == 'Compilations' + # ignore the follow +else + +# Ractor.select(*ractors) receives a values from a ractors. +# It is similar to select(2) and Go's select syntax. +# The return value is [ch, received_value] +assert_equal 'ok', %q{ + # select 1 + r1 = Ractor.new{'r1'} + r, obj = Ractor.select(r1) + 'ok' if r == r1 and obj == 'r1' +} + +# Ractor.select from two ractors. +assert_equal '["r1", "r2"]', %q{ + # select 2 + r1 = Ractor.new{'r1'} + r2 = Ractor.new{'r2'} + rs = [r1, r2] + as = [] + r, obj = Ractor.select(*rs) + rs.delete(r) + as << obj + r, obj = Ractor.select(*rs) + 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['RUN_OPTS'] =~ /--jit-min-calls=5/ || # This always fails with --jit-wait --jit-min-calls=5 + (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/, %q{ + begin + Ractor.select + rescue ArgumentError => e + e.message + end +} + +# Outgoing port of a ractor will be closed when the Ractor is terminated. +assert_equal 'ok', %q{ + r = Ractor.new do + 'finish' + end + + r.take + sleep 0.1 until r.inspect =~ /terminated/ + + begin + o = r.take + rescue Ractor::ClosedError + 'ok' + else + "ng: #{o}" + end +} + +# Raise Ractor::ClosedError when try to send into a terminated ractor +assert_equal 'ok', %q{ + r = Ractor.new do + end + + r.take # closed + sleep 0.1 until r.inspect =~ /terminated/ + + begin + r.send(1) + rescue Ractor::ClosedError + 'ok' + else + 'ng' + end +} + +# Raise Ractor::ClosedError when try to send into a closed actor +assert_equal 'ok', %q{ + r = Ractor.new { Ractor.receive } + r.close_incoming + + begin + r.send(1) + rescue Ractor::ClosedError + 'ok' + else + 'ng' + end +} + +# Raise Ractor::ClosedError when try to take from closed actor +assert_equal 'ok', %q{ + r = Ractor.new do + Ractor.yield 1 + Ractor.receive + end + + r.close_outgoing + begin + r.take + rescue Ractor::ClosedError + 'ok' + else + 'ng' + end +} + +# Can mix with Thread#interrupt and Ractor#take [Bug #17366] +assert_equal 'err', %q{ + Ractor.new{ + t = Thread.current + begin + Thread.new{ t.raise "err" }.join + rescue => e + e.message + end + }.take +} + +# Killed Ractor's thread yields nil +assert_equal 'nil', %q{ + Ractor.new{ + t = Thread.current + Thread.new{ t.kill }.join + }.take.inspect #=> nil +} + +# Ractor.yield raises Ractor::ClosedError when outgoing port is closed. +assert_equal 'ok', %q{ + r = Ractor.new Ractor.current do |main| + Ractor.receive + main << true + Ractor.yield 1 + end + + r.close_outgoing + r << true + Ractor.receive + + begin + r.take + rescue Ractor::ClosedError + 'ok' + else + 'ng' + end +} + +# Raise Ractor::ClosedError when try to send into a ractor with closed incoming port +assert_equal 'ok', %q{ + r = Ractor.new { Ractor.receive } + r.close_incoming + + begin + r.send(1) + rescue Ractor::ClosedError + 'ok' + else + 'ng' + end +} + +# A ractor with closed incoming port still can send messages out +assert_equal '[1, 2]', %q{ + r = Ractor.new do + Ractor.yield 1 + 2 + end + r.close_incoming + + [r.take, r.take] +} + +# Raise Ractor::ClosedError when try to take from a ractor with closed outgoing port +assert_equal 'ok', %q{ + r = Ractor.new do + Ractor.yield 1 + Ractor.receive + end + + sleep 0.01 # wait for Ractor.yield in r + r.close_outgoing + begin + r.take + rescue Ractor::ClosedError + 'ok' + else + 'ng' + end +} + +# A ractor with closed outgoing port still can receive messages from incoming port +assert_equal 'ok', %q{ + r = Ractor.new do + Ractor.receive + end + + r.close_outgoing + begin + r.send(1) + rescue Ractor::ClosedError + 'ng' + else + 'ok' + end +} + +# Ractor.main returns main ractor +assert_equal 'true', %q{ + Ractor.new{ + Ractor.main + }.take == Ractor.current +} + +# a ractor with closed outgoing port should terminate +assert_equal 'ok', %q{ + Ractor.new do + close_outgoing + end + + true until Ractor.count == 1 + :ok +} + +# multiple Ractors can receive (wait) from one Ractor +assert_equal '[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]', %q{ + pipe = Ractor.new do + loop do + Ractor.yield Ractor.receive + end + end + + RN = 10 + rs = RN.times.map{|i| + Ractor.new pipe, i do |pipe, i| + msg = pipe.take + msg # ping-pong + end + } + RN.times{|i| + pipe << i + } + RN.times.map{ + r, n = Ractor.select(*rs) + rs.delete r + n + }.sort +} + +# Ractor.select also support multiple take, receive and yield +assert_equal '[true, true, true]', %q{ + RN = 10 + CR = Ractor.current + + rs = (1..RN).map{ + Ractor.new do + CR.send 'send' + CR.take #=> 'sendyield' + 'take' + end + } + received = [] + take = [] + yielded = [] + until rs.empty? + r, v = Ractor.select(CR, *rs, yield_value: 'yield') + case r + when :receive + received << v + when :yield + yielded << v + else + take << v + rs.delete r + end + end + [received.all?('sendyield'), yielded.all?(nil), take.all?('take')] +} + +# multiple Ractors can send to one Ractor +assert_equal '[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]', %q{ + pipe = Ractor.new do + loop do + Ractor.yield Ractor.receive + end + end + + RN = 10 + RN.times.map{|i| + Ractor.new pipe, i do |pipe, i| + pipe << i + end + } + RN.times.map{ + pipe.take + }.sort +} + +# an exception in a Ractor 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.take + 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 +} + +# 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.take +} + +# 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", %q{ + echo_ractor = Ractor.new do + loop do + v = Ractor.receive + Ractor.yield 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 = echo_ractor.take + results << "#{o} is copied" unless o.object_id == o2.object_id + } + + unshareable_objects.map{|o| + echo_ractor << o + o2 = echo_ractor.take + results << "#{o.inspect} is not copied" if o.object_id == o2.object_id + } + + if results.empty? + :ok + else + results.inspect + end +} + +# frozen Objects are shareable +assert_equal [false, true, false].inspect, %q{ + 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.take + + 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 +} + +# move example2: String +# touching moved object causes an error +assert_equal 'hello world', %q{ + # move + r = Ractor.new do + obj = Ractor.receive + obj << ' world' + end + + str = 'hello' + r.send str, move: true + modified = r.take + + begin + str << ' exception' # raise Ractor::MovedError + rescue Ractor::MovedError + modified #=> 'hello world' + else + raise 'unreachable' + end +} + +# 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.take + begin + a1 << 2 # raise Ractor::MovedError + rescue Ractor::MovedError + a2.inspect + end +} + +# move with yield +assert_equal 'hello', %q{ + r = Ractor.new do + Thread.current.report_on_exception = false + obj = 'hello' + Ractor.yield obj, move: true + obj << 'world' + end + + str = r.take + begin + r.take + rescue Ractor::RemoteError + str #=> "hello" + end +} + +# yield/move should not make moved object when the yield is not succeeded +assert_equal '"str"', %q{ + R = Ractor.new{} + M = Ractor.current + r = Ractor.new do + s = 'str' + selected_r, v = Ractor.select R, yield_value: s, move: true + raise if selected_r != R # taken from R + M.send s.inspect # s should not be a moved object + end + + Ractor.receive +} + +# yield/move can fail +assert_equal "allocator undefined for Thread", %q{ + r = Ractor.new do + obj = Thread.new{} + Ractor.yield obj + rescue => e + e.message + end + r.take +} + +# Access to global-variables are prohibited +assert_equal 'can not access global variables $gv from non-main Ractors', %q{ + $gv = 1 + r = Ractor.new do + $gv + end + + begin + r.take + rescue Ractor::RemoteError => e + e.cause.message + end +} + +# Access to global-variables are prohibited +assert_equal 'can not access global variables $gv from non-main Ractors', %q{ + r = Ractor.new do + $gv = 1 + end + + begin + r.take + 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.take){|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.take +} + +# $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.take + ractor_local_globals == h #=> true +} + +# selfs are different objects +assert_equal 'false', %q{ + r = Ractor.new do + self.object_id + end + r.take == self.object_id #=> false +} + +# self is a Ractor instance +assert_equal 'true', %q{ + r = Ractor.new do + self.object_id + end + r.object_id == r.take #=> true +} + +# 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 +} + +# 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", %q{ + class C + @iv = 'str' + end + + r = Ractor.new do + class C + p @iv + end + end + + + begin + r.take + rescue Ractor::RemoteError => e + e.cause.message + end +} + +# 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.take + 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.take + 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.take + 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.take.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 }.take + b = Ractor.new do + C.str.to_i + rescue Ractor::IsolationError + 10 + end.take + c = Ractor.new do + C.fstr.to_i + end.take + + d = Ractor.new{ M.int }.take + e = Ractor.new do + M.str.to_i + rescue Ractor::IsolationError + 20 + end.take + f = Ractor.new do + M.fstr.to_i + end.take + + + # 1 + 10 + 100 + 2 + 20 + 200 + a + b + c + d + e + f +} + +# cvar in shareable-objects are not allowed to access from non-main Ractor +assert_equal 'can not access class variables from non-main Ractors', %q{ + class C + @@cv = 'str' + end + + r = Ractor.new do + class C + p @@cv + end + end + + begin + r.take + 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', %q{ + class C + @@cv = 'str' + def self.cv + @@cv + end + end + + C.cv # cache + + r = Ractor.new do + C.cv + end + + begin + r.take + 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.', %q{ + class C + CONST = 'str' + end + r = Ractor.new do + C::CONST + end + begin + r.take + rescue Ractor::RemoteError => e + e.cause.message + end +} + +# Constant cache should care about non-sharable constants +assert_equal "can not access non-shareable objects in constant Object::STR by non-main Ractor.", %q{ + STR = "hello" + def str; STR; end + s = str() # fill const cache + begin + Ractor.new{ str() }.take + rescue Ractor::RemoteError => e + e.cause.message + end +} + +# 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', %q{ + class C + end + r = Ractor.new do + C::CONST = 'str' + end + begin + r.take + rescue Ractor::RemoteError => e + e.cause.message + end +} + +# 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)}.take + 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] }.take +} + +# 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').take + sleep 0.1 until ractors[0].inspect =~ /terminated/ + counts << Ractor.count + + ractors[1].send('End 1').take + sleep 0.1 until ractors[1].inspect =~ /terminated/ + counts << Ractor.count + + ractors[2].send('End 2').take + 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 + }.take +} + +# ObjectSpace._id2ref can not handle unshareable objects with Ractors +assert_equal 'ok', %q{ + s = 'hello' + + Ractor.new s.object_id do |id ;s| + begin + s = ObjectSpace._id2ref(id) + rescue => e + :ok + end + end.take +} + +# Ractor.make_shareable(obj) +assert_equal 'true', %q{ + 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) +} + +# 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) makes a proc shareable. +assert_equal 'true', %q{ + a = [1, [2, 3], {a: "4"}] + + pr = Ractor.current.instance_eval do + Proc.new do + a + end + end + + Ractor.make_shareable(a) # referred value should be shareable + Ractor.make_shareable(pr) + Ractor.shareable?(pr) +} + +# 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.make_shareable(Proc.new{ a }) + a = 2 + end + + Ractor.new{ C.new.foo }.take +} + +# Ractor.make_shareable(a_proc) makes a proc shareable. +assert_equal 'can not make a Proc shareable because it accesses outer variables (a).', %q{ + a = b = nil + pr = Ractor.current.instance_eval do + Proc.new do + c = b # assign to a is okay because c is block local variable + # reading b is okay + a = b # assign to a is not allowed #=> Ractor::Error + end + end + + begin + Ractor.make_shareable(pr) + rescue => e + e.message + end +} + +# 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 '[4, 8]', %q{ + rs = [] + TracePoint.new(:line){|tp| rs << tp.lineno if tp.path == __FILE__}.enable do + Ractor.new{ # line 4 + a = 1 + b = 2 + }.take + c = 3 # line 8 + end + rs +} + +# Ractor deep copies frozen objects (ary) +assert_equal '[true, false]', %q{ + Ractor.new([[]].freeze) { |ary| + [ary.frozen?, ary.first.frozen? ] + }.take +} + +# 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?] + }.take +} + +# Can not trap with not isolated Proc on non-main ractor +assert_equal '[:ok, :ok]', %q{ + a = [] + Ractor.new{ + trap(:INT){p :ok} + }.take + a << :ok + + begin + Ractor.new{ + s = 'str' + trap(:INT){p s} + }.take + rescue => Ractor::RemoteError + a << :ok + end +} + +# Ractor-local storage +assert_equal '[nil, "b", "a"]', %q{ + ans = [] + Ractor.current[:key] = 'a' + r = Ractor.new{ + Ractor.yield self[:key] + self[:key] = 'b' + self[:key] + } + ans << r.take + ans << r.take + ans << Ractor.current[:key] +} + +### +### 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.take}.join +} + +# enc_table +assert_equal "#{N/10}", %Q{ + Ractor.new do + loop do + Encoding.find("test-enc-#{rand(5_000)}").inspect + rescue ArgumentError => e + end + end + + src = Encoding.find("UTF-8") + #{N/10}.times{|i| + src.replicate("test-enc-\#{i}") + } +} + +# Generic ivtbl +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.take}.join +} + +# NameError +assert_equal "ok", %q{ + begin + bar + rescue => err + end + begin + Ractor.new{} << err + rescue TypeError + 'ok' + end +} + +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{ + workers = (0...8).map do + Ractor.new do + loop do + 10_000.times.map { Object.new } + Ractor.yield Time.now + end + end + end + + 1_000.times { idle_worker, tmp_reporter = Ractor.select(*workers) } + "ok" +} + +assert_equal "ok", %q{ + def foo(*); ->{ super }; end + begin + Ractor.make_shareable(foo) + rescue Ractor::IsolationError + "ok" + end +} + +assert_equal "ok", %q{ + def foo(**); ->{ super }; end + begin + Ractor.make_shareable(foo) + rescue Ractor::IsolationError + "ok" + end +} + +assert_equal "ok", %q{ + def foo(...); ->{ super }; end + begin + Ractor.make_shareable(foo) + rescue Ractor::IsolationError + "ok" + end +} + +assert_equal "ok", %q{ + def foo((x), (y)); ->{ super }; end + begin + Ractor.make_shareable(foo([], [])) + rescue Ractor::IsolationError + "ok" + end +} + +end # if !ENV['GITHUB_WORKFLOW'] diff --git a/ruby/bootstraptest/test_syntax.rb b/ruby/bootstraptest/test_syntax.rb index a111990a1..948e2d780 100644 --- a/ruby/bootstraptest/test_syntax.rb +++ b/ruby/bootstraptest/test_syntax.rb @@ -268,8 +268,10 @@ def m3 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) @@ -626,7 +628,7 @@ class << (ary=[]); def []; 0; end; def []=(x); super(0,x);end;end; ary[]+=1 } assert_match /invalid multibyte char/, %q{ - STDERR.reopen(STDOUT) + $stderr = STDOUT eval("\"\xf0".force_encoding("utf-8")) }, '[ruby-dev:32429]' diff --git a/ruby/bootstraptest/test_thread.rb b/ruby/bootstraptest/test_thread.rb index f00e2f7ef..38a55ff22 100644 --- a/ruby/bootstraptest/test_thread.rb +++ b/ruby/bootstraptest/test_thread.rb @@ -8,7 +8,8 @@ puts "Thread count: #{threads.count} (#{error})" break end while true -} +} if false # disable to pass CI + assert_equal %q{ok}, %q{ Thread.new{ }.join @@ -483,3 +484,17 @@ def m 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/ruby/bootstraptest/test_yjit.rb b/ruby/bootstraptest/test_yjit.rb new file mode 100644 index 000000000..30298a820 --- /dev/null +++ b/ruby/bootstraptest/test_yjit.rb @@ -0,0 +1,2737 @@ +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 asert on --yjit-call-threshold=2 + Foo = 1 + + eval("def foo = [#{(['Foo,']*256).join}]") + + foo + foo + + Object.send(:remove_const, :Foo) +} + +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 '0', %q{ + # This is a regression test for incomplete invalidation from + # opt_setinlinecache. This test might be brittle, so + # feel free to remove it in the future if it's too annoying. + # This test assumes --yjit-call-threshold=2. + module M + Foo = 1 + def foo + Foo + end + + def pin_self_type_then_foo + _ = @foo + foo + end + + def only_ints + 1 + self + foo + end + end + + class Integer + include M + end + + class Sub + include M + end + + foo_method = M.instance_method(:foo) + + dbg = ->(message) do + return # comment this out to get printouts + + $stderr.puts RubyVM::YJIT.disasm(foo_method) + $stderr.puts message + end + + 2.times { 42.only_ints } + + dbg["There should be two versions of getinlineache"] + + module M + remove_const(:Foo) + end + + dbg["There should be no getinlinecaches"] + + 2.times do + 42.only_ints + rescue NameError => err + _ = "caught name error #{err}" + end + + dbg["There should be one version of getinlineache"] + + 2.times do + Sub.new.pin_self_type_then_foo + rescue NameError + _ = 'second specialization' + end + + dbg["There should be two versions of getinlineache"] + + module M + Foo = 1 + end + + dbg["There should still be two versions of getinlineache"] + + 42.only_ints + + dbg["There should be no getinlinecaches"] + + # Find name of the first VM instruction in M#foo. + insns = RubyVM::InstructionSequence.of(foo_method).to_a + if defined?(RubyVM::YJIT.blocks_for) && (insns.last.find { Array === _1 }&.first == :opt_getinlinecache) + RubyVM::YJIT.blocks_for(RubyVM::InstructionSequence.of(foo_method)) + .filter { _1.iseq_start_index == 0 }.count + else + 0 # skip the test + 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{ + 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 +} + +# 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{ + def bar + "good" + end + + def foo + bar + end + + foo + foo + + begin + GC.verify_compaction_references(double_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) + ] +} + +# 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 +} + +# 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 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 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 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) +} + +# 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) +} + +# 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 +} + +# 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)] +} + +# 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 +} + +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, 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 '[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 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 + + + tracing_ractor = Ractor.new do + # 1: start tracing + events = [] + tp = TracePoint.new(:c_call) { events << _1.method_id } + tp.enable + Ractor.yield(nil) + + # 3: run compiled method on tracing ractor + Ractor.yield(nil) + traced_method + + events + ensure + tp&.disable + end + + tracing_ractor.take + + # 2: compile on non tracing ractor + traced_method + + tracing_ractor.take + tracing_ractor.take +} + +# 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 + + ractor = Ractor.new do + compiled(false) + Ractor.yield(nil) + compiled(41) + end + + tp = TracePoint.new(:line) { itself } + ractor.take + tp.enable + + ractor.take +} + +# 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 }.take +} + +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 +} + +# 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 + + test + test + + RubyVM::YJIT.simulate_oom! if defined?(RubyVM::YJIT) + + def foo + :new + end + + test +} + +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 +} diff --git a/ruby/bootstraptest/test_yjit_30k_ifelse.rb b/ruby/bootstraptest/test_yjit_30k_ifelse.rb new file mode 100644 index 000000000..c3afa95e4 --- /dev/null +++ b/ruby/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/ruby/bootstraptest/test_yjit_30k_methods.rb b/ruby/bootstraptest/test_yjit_30k_methods.rb new file mode 100644 index 000000000..f2acea4ce --- /dev/null +++ b/ruby/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/ruby/builtin.c b/ruby/builtin.c index 6de77228d..21fff9565 100644 --- a/ruby/builtin.c +++ b/ruby/builtin.c @@ -3,7 +3,7 @@ #include "iseq.h" #include "builtin.h" -#if CROSS_COMPILING +#ifdef CROSS_COMPILING #define INCLUDED_BY_BUILTIN_C 1 #include "mini_builtin.c" @@ -12,27 +12,24 @@ #include "builtin_binary.inc" +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; - int i = index++; + const unsigned char *bin = bin4feature(&builtin_binary[index++], feature, psize); // usually, `builtin_binary` order is loading order at miniruby. - if (LIKELY(strcmp(builtin_binary[i].feature, feature) == 0)) { - found: - *psize = builtin_binary[i].bin_size; - return builtin_binary[i].bin; + for (const struct builtin_binary *bb = &builtin_binary[0]; bb->feature &&! bin; bb++) { + bin = bin4feature(bb++, feature, psize); } - else { - if (0) fprintf(stderr, "builtin_lookup: cached index miss (index:%d)\n", i); - for (i=0; icfp->ep[index]; #else return rb_vm_lvar_exposed(ec, index); diff --git a/ruby/ccan/list/list.h b/ruby/ccan/list/list.h index 7d219307b..c434ad810 100644 --- a/ruby/ccan/list/list.h +++ b/ruby/ccan/list/list.h @@ -658,7 +658,7 @@ static inline void list_prepend_list_(struct list_head *to, * @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 diff --git a/ruby/class.c b/ruby/class.c index c866d1d72..65a989f9d 100644 --- a/ruby/class.c +++ b/ruby/class.c @@ -10,115 +10,148 @@ **********************************************************************/ /*! - * \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 + +#include "constant.h" +#include "debug_counter.h" +#include "id_table.h" #include "internal.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 #define id_attached id__attached__ -void -rb_class_subclass_add(VALUE super, VALUE klass) +#define METACLASS_OF(k) RBASIC(k)->klass +#define SET_METACLASS_OF(k, cls) RBASIC_SET_CLASS(k, cls) + +RUBY_EXTERN rb_serial_t ruby_vm_global_cvar_state; + +static rb_subclass_entry_t * +push_subclass_entry_to_list(VALUE super, VALUE klass) { rb_subclass_entry_t *entry, *head; - if (super && super != Qundef) { - entry = ALLOC(rb_subclass_entry_t); - entry->klass = klass; - entry->next = NULL; - - head = RCLASS_EXT(super)->subclasses; - if (head) { - entry->next = head; - RCLASS_EXT(head->klass)->parent_subclasses = &entry->next; - } + entry = ZALLOC(rb_subclass_entry_t); + entry->klass = klass; + + head = RCLASS_SUBCLASSES(super); + if (!head) { + head = ZALLOC(rb_subclass_entry_t); + RCLASS_SUBCLASSES(super) = head; + } + entry->next = head->next; + entry->prev = head; + + if (head->next) { + head->next->prev = entry; + } + head->next = entry; - RCLASS_EXT(super)->subclasses = entry; - RCLASS_EXT(klass)->parent_subclasses = &RCLASS_EXT(super)->subclasses; + return entry; +} + +void +rb_class_subclass_add(VALUE super, VALUE klass) +{ + if (super && super != Qundef) { + rb_subclass_entry_t *entry = push_subclass_entry_to_list(super, klass); + RCLASS_SUBCLASS_ENTRY(klass) = entry; } } static void rb_module_add_to_subclasses_list(VALUE module, VALUE iclass) { - rb_subclass_entry_t *entry, *head; + rb_subclass_entry_t *entry = push_subclass_entry_to_list(module, iclass); + RCLASS_MODULE_SUBCLASS_ENTRY(iclass) = entry; +} - entry = ALLOC(rb_subclass_entry_t); - entry->klass = iclass; - entry->next = NULL; +void +rb_class_remove_subclass_head(VALUE klass) +{ + rb_subclass_entry_t *head = RCLASS_SUBCLASSES(klass); - head = RCLASS_EXT(module)->subclasses; if (head) { - entry->next = head; - RCLASS_EXT(head->klass)->module_subclasses = &entry->next; + if (head->next) { + head->next->prev = NULL; + } + RCLASS_SUBCLASSES(klass) = NULL; + xfree(head); } - - RCLASS_EXT(module)->subclasses = entry; - RCLASS_EXT(iclass)->module_subclasses = &RCLASS_EXT(module)->subclasses; } void rb_class_remove_from_super_subclasses(VALUE klass) { - rb_subclass_entry_t *entry; + rb_subclass_entry_t *entry = RCLASS_SUBCLASS_ENTRY(klass); - if (RCLASS_EXT(klass)->parent_subclasses) { - entry = *RCLASS_EXT(klass)->parent_subclasses; + if (entry) { + rb_subclass_entry_t *prev = entry->prev, *next = entry->next; + + if (prev) { + prev->next = next; + } + if (next) { + next->prev = prev; + } - *RCLASS_EXT(klass)->parent_subclasses = entry->next; - if (entry->next) { - RCLASS_EXT(entry->next->klass)->parent_subclasses = RCLASS_EXT(klass)->parent_subclasses; - } xfree(entry); } - RCLASS_EXT(klass)->parent_subclasses = NULL; + RCLASS_SUBCLASS_ENTRY(klass) = NULL; } void rb_class_remove_from_module_subclasses(VALUE klass) { - rb_subclass_entry_t *entry; + rb_subclass_entry_t *entry = RCLASS_MODULE_SUBCLASS_ENTRY(klass); - if (RCLASS_EXT(klass)->module_subclasses) { - entry = *RCLASS_EXT(klass)->module_subclasses; - *RCLASS_EXT(klass)->module_subclasses = entry->next; + if (entry) { + rb_subclass_entry_t *prev = entry->prev, *next = entry->next; - if (entry->next) { - RCLASS_EXT(entry->next->klass)->module_subclasses = RCLASS_EXT(klass)->module_subclasses; + if (prev) { + prev->next = next; + } + if (next) { + next->prev = prev; } xfree(entry); } - RCLASS_EXT(klass)->module_subclasses = NULL; + RCLASS_MODULE_SUBCLASS_ENTRY(klass) = NULL; } void rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE arg) { - rb_subclass_entry_t *cur = RCLASS_EXT(klass)->subclasses; + // RCLASS_SUBCLASSES should always point to our head element which has NULL klass + rb_subclass_entry_t *cur = RCLASS_SUBCLASSES(klass); + // if we have a subclasses list, then the head is a placeholder with no valid + // class. So ignore it and use the next element in the list (if one exists) + if (cur) { + RUBY_ASSERT(!cur->klass); + cur = cur->next; + } /* 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; + // do not trigger GC during f, otherwise the cur will become + // a dangling pointer if the subclass is collected f(curklass, arg); } } @@ -162,22 +195,37 @@ rb_class_detach_module_subclasses(VALUE klass) static VALUE class_alloc(VALUE flags, VALUE klass) { - NEWOBJ_OF(obj, struct RClass, klass, (flags & T_MASK) | FL_PROMOTED1 /* start from age == 2 */ | (RGENGC_WB_PROTECTED_CLASS ? FL_WB_PROTECTED : 0)); + size_t alloc_size = sizeof(struct RClass); + +#if USE_RVARGC + alloc_size += sizeof(rb_classext_t); +#endif + + flags &= T_MASK; + flags |= FL_PROMOTED1 /* start from age == 2 */; + if (RGENGC_WB_PROTECTED_CLASS) flags |= FL_WB_PROTECTED; + RVARGC_NEWOBJ_OF(obj, struct RClass, klass, flags, alloc_size); + +#if USE_RVARGC + memset(RCLASS_EXT(obj), 0, sizeof(rb_classext_t)); +#else obj->ptr = ZALLOC(rb_classext_t); +#endif + /* ZALLOC RCLASS_IV_TBL(obj) = 0; RCLASS_CONST_TBL(obj) = 0; RCLASS_M_TBL(obj) = 0; RCLASS_IV_INDEX_TBL(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; + RCLASS_SUBCLASSES(obj) = NULL; + RCLASS_PARENT_SUBCLASSES(obj) = NULL; + RCLASS_MODULE_SUBCLASSES(obj) = NULL; */ RCLASS_SET_ORIGIN((VALUE)obj, (VALUE)obj); RCLASS_SERIAL(obj) = rb_next_class_serial(); RB_OBJ_WRITE(obj, &RCLASS_REFINED_CLASS(obj), Qnil); - RCLASS_EXT(obj)->allocator = 0; + RCLASS_ALLOCATOR(obj) = 0; return (VALUE)obj; } @@ -208,18 +256,11 @@ rb_class_boot(VALUE super) return (VALUE)klass; } - -/*! - * 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_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) { @@ -230,13 +271,6 @@ rb_check_inheritable(VALUE super) } } - -/*! - * 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) { @@ -245,6 +279,12 @@ rb_class_new(VALUE super) return rb_class_boot(super); } +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) { @@ -308,26 +348,9 @@ class_init_copy_check(VALUE clone, VALUE orig) } } -/* :nodoc: */ -VALUE -rb_mod_init_copy(VALUE clone, VALUE orig) +static void +copy_tables(VALUE clone, VALUE orig) { - /* cloned flag is refer at constant inline cache - * see vm_get_const_key_cref() in vm_insnhelper.c - */ - FL_SET(clone, RCLASS_CLONED); - FL_SET(orig , RCLASS_CLONED); - - if (RB_TYPE_P(clone, T_CLASS)) { - class_init_copy_check(clone, orig); - } - 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; @@ -355,6 +378,66 @@ rb_mod_init_copy(VALUE clone, VALUE orig) arg.klass = clone; rb_id_table_foreach(RCLASS_CONST_TBL(orig), clone_const_i, &arg); } +} + +static bool ensure_origin(VALUE klass); + +/** + * If this flag is set, that module is allocated but not initialized yet. + */ +enum {RMODULE_ALLOCATED_BUT_NOT_INITIALIZED = RUBY_FL_USER5}; + +static inline bool +RMODULE_UNINITIALIZED(VALUE module) +{ + return FL_TEST_RAW(module, RMODULE_ALLOCATED_BUT_NOT_INITIALIZED); +} + +void +rb_module_set_initialized(VALUE mod) +{ + FL_UNSET_RAW(mod, RMODULE_ALLOCATED_BUT_NOT_INITIALIZED); + /* no more re-initialization */ +} + +void +rb_module_check_initializable(VALUE mod) +{ + if (!RMODULE_UNINITIALIZED(mod)) { + rb_raise(rb_eTypeError, "already initialized module"); + } + RB_OBJ_WRITE(mod, &RCLASS(mod)->super, 0); +} + +/* :nodoc: */ +VALUE +rb_mod_init_copy(VALUE clone, VALUE orig) +{ + switch (BUILTIN_TYPE(clone)) { + case T_CLASS: + case T_ICLASS: + 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; + + /* cloned flag is refer at constant inline cache + * see vm_get_const_key_cref() in vm_insnhelper.c + */ + FL_SET(clone, RCLASS_CLONED); + FL_SET(orig , RCLASS_CLONED); + + 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_ALLOCATOR(clone) = RCLASS_ALLOCATOR(orig); + copy_tables(clone, orig); if (RCLASS_M_TBL(orig)) { struct clone_method_arg arg; arg.old_klass = orig; @@ -363,6 +446,75 @@ rb_mod_init_copy(VALUE clone, VALUE orig) rb_id_table_foreach(RCLASS_M_TBL(orig), clone_method_i, &arg); } + if (RCLASS_ORIGIN(orig) == orig) { + RCLASS_SET_SUPER(clone, RCLASS_SUPER(orig)); + } + else { + VALUE p = RCLASS_SUPER(orig); + VALUE orig_origin = RCLASS_ORIGIN(orig); + VALUE prev_clone_p = clone; + VALUE origin_stack = rb_ary_tmp_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(RBASIC(p)->flags, RBASIC(p)->klass); + RCLASS_SET_SUPER(prev_clone_p, clone_p); + prev_clone_p = clone_p; + RCLASS_M_TBL(clone_p) = RCLASS_M_TBL(p); + RCLASS_CONST_TBL(clone_p) = RCLASS_CONST_TBL(p); + RCLASS_IV_TBL(clone_p) = RCLASS_IV_TBL(p); + RCLASS_ALLOCATOR(clone_p) = RCLASS_ALLOCATOR(p); + 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_SET_ORIGIN(RARRAY_AREF(origin_stack, (origin_len -= 2)), clone_p); + RICLASS_SET_ORIGIN_SHARED_MTBL(clone_p); + rb_ary_resize(origin_stack, origin_len); + add_subclass = FALSE; + } + if (add_subclass) { + rb_module_add_to_subclasses_list(RBASIC(p)->klass, clone_p); + } + p = RCLASS_SUPER(p); + } + + if (p == orig_origin) { + if (clone_p) { + RCLASS_SET_SUPER(clone_p, clone_origin); + RCLASS_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; + RCLASS_M_TBL_INIT(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"); + } + } + return clone; } @@ -372,26 +524,39 @@ 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; - 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 (!(FL_TEST(klass, FL_SINGLETON) && rb_attr_get(klass, id_attached) == obj)) { + // nothing to clone + return klass; + } else { /* copy singleton(unnamed) class */ + bool klass_of_clone_is_new; VALUE clone = class_alloc(RBASIC(klass)->flags, 0); if (BUILTIN_TYPE(obj) == T_CLASS) { + klass_of_clone_is_new = true; RBASIC_SET_CLASS(clone, clone); } else { - RBASIC_SET_CLASS(clone, rb_singleton_class_clone(klass)); + 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); } RCLASS_SET_SUPER(clone, RCLASS_SUPER(klass)); - RCLASS_EXT(clone)->allocator = RCLASS_EXT(klass)->allocator; + RCLASS_ALLOCATOR(clone) = RCLASS_ALLOCATOR(klass); if (RCLASS_IV_TBL(klass)) { rb_iv_tbl_copy(clone, klass); } @@ -411,33 +576,23 @@ rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach) arg.new_klass = clone; rb_id_table_foreach(RCLASS_M_TBL(klass), clone_method_i, &arg); } - rb_singleton_class_attached(RBASIC(clone)->klass, clone); + if (klass_of_clone_is_new) { + rb_singleton_class_attached(RBASIC(clone)->klass, 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); } } - - -#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) @@ -541,10 +696,62 @@ boot_defclass(const char *name, VALUE super) ID id = rb_intern(name); rb_const_set((rb_cObject ? rb_cObject : obj), id, obj); - rb_vm_add_root_module(id, obj); + rb_vm_add_root_module(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 + void Init_class_hierarchy(void) { @@ -557,12 +764,21 @@ Init_class_hierarchy(void) 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); } @@ -587,17 +803,6 @@ rb_make_metaclass(VALUE obj, VALUE unused) } } - -/*! - * 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) { @@ -628,23 +833,6 @@ 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. - * \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. - * \throw ArgumentError if the \a super is NULL. - * \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) { @@ -663,60 +851,26 @@ rb_define_class(const char *name, VALUE super) } /* Class may have been defined in Ruby and not pin-rooted */ - rb_vm_add_root_module(id, klass); + rb_vm_add_root_module(klass); return klass; } if (!super) { 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_vm_add_root_module(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) { @@ -736,7 +890,7 @@ rb_define_class_id_under(VALUE outer, ID id, VALUE super) outer, rb_id2str(id), RCLASS_SUPER(klass), super); } /* Class may have been defined in Ruby and not pin-rooted */ - rb_vm_add_root_module(id, klass); + rb_vm_add_root_module(klass); return klass; } @@ -748,20 +902,42 @@ rb_define_class_id_under(VALUE outer, ID id, VALUE super) rb_set_class_path_string(klass, outer, rb_id2str(id)); rb_const_set(outer, id, klass); rb_class_inherited(super, klass); - rb_vm_add_root_module(id, klass); - rb_gc_register_mark_object(klass); + rb_vm_add_root_module(klass); return klass; } VALUE -rb_module_new(void) +rb_module_s_alloc(VALUE klass) { - VALUE mdl = class_alloc(T_MODULE, rb_cModule); + VALUE mod = class_alloc(T_MODULE, klass); + RCLASS_M_TBL_INIT(mod); + FL_SET(mod, RMODULE_ALLOCATED_BUT_NOT_INITIALIZED); + RB_OBJ_WRITE(mod, &RCLASS(mod)->super, 0); + return mod; +} + +static inline VALUE +module_new(VALUE klass) +{ + VALUE mdl = class_alloc(T_MODULE, klass); RCLASS_M_TBL_INIT(mdl); return (VALUE)mdl; } +VALUE +rb_module_new(void) +{ + return module_new(rb_cModule); +} + +VALUE +rb_refinement_new(void) +{ + return module_new(rb_cRefinement); +} + +// Kept for compatibility. Use rb_module_new() instead. VALUE rb_define_module_id(ID id) { @@ -782,12 +958,11 @@ rb_define_module(const char *name) name, rb_obj_class(module)); } /* Module may have been defined in Ruby and not pin-rooted */ - rb_vm_add_root_module(id, module); + rb_vm_add_root_module(module); return module; } - module = rb_define_module_id(id); - rb_vm_add_root_module(id, module); - rb_gc_register_mark_object(module); + module = rb_module_new(); + rb_vm_add_root_module(module); rb_const_set(rb_cObject, id, module); return module; @@ -811,9 +986,11 @@ rb_define_module_id_under(VALUE outer, ID id) " (%"PRIsVALUE")", outer, rb_id2str(id), rb_obj_class(module)); } + /* Module may have been defined in Ruby and not pin-rooted */ + rb_gc_register_mark_object(module); return module; } - module = rb_define_module_id(id); + 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); @@ -826,13 +1003,13 @@ rb_include_class_new(VALUE module, VALUE super) { VALUE klass = class_alloc(T_ICLASS, rb_cClass); - RCLASS_M_TBL(OBJ_WB_UNPROTECT(klass)) = - RCLASS_M_TBL(OBJ_WB_UNPROTECT(module)); /* TODO: unprotected? */ + RCLASS_M_TBL(klass) = RCLASS_M_TBL(module); - RCLASS_SET_ORIGIN(klass, module == RCLASS_ORIGIN(module) ? klass : RCLASS_ORIGIN(module)); + RCLASS_SET_ORIGIN(klass, klass); if (BUILTIN_TYPE(module) == T_ICLASS) { module = RBASIC(module)->klass; } + RUBY_ASSERT(!RB_TYPE_P(module, T_ICLASS)); if (!RCLASS_IV_TBL(module)) { RCLASS_IV_TBL(module) = st_init_numtable(); } @@ -840,15 +1017,11 @@ rb_include_class_new(VALUE module, VALUE super) RCLASS_CONST_TBL(module) = rb_id_table_create(0); } RCLASS_IV_TBL(klass) = RCLASS_IV_TBL(module); + RCLASS_CVC_TBL(klass) = RCLASS_CVC_TBL(module); RCLASS_CONST_TBL(klass) = RCLASS_CONST_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); - } + RBASIC_SET_CLASS(klass, module); return (VALUE)klass; } @@ -860,6 +1033,7 @@ ensure_includable(VALUE klass, VALUE module) { rb_class_modify_check(klass); Check_Type(module, T_MODULE); + rb_module_set_initialized(module); if (!NIL_P(rb_refinement_module_get_refined_class(module))) { rb_raise(rb_eArgError, "refinement module is not allowed"); } @@ -875,6 +1049,31 @@ rb_include_module(VALUE klass, VALUE module) changed = include_modules_at(klass, RCLASS_ORIGIN(klass), module, TRUE); if (changed < 0) rb_raise(rb_eArgError, "cyclic include detected"); + + if (RB_TYPE_P(klass, T_MODULE)) { + rb_subclass_entry_t *iclass = RCLASS_SUBCLASSES(klass); + // skip the placeholder subclass entry at the head of the list + if (iclass && !iclass->klass) { + iclass = iclass->next; + } + + int do_include = 1; + while (iclass) { + VALUE check_class = iclass->klass; + while (check_class) { + if (RB_TYPE_P(check_class, T_ICLASS) && + (RBASIC(check_class)->klass == 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 @@ -884,93 +1083,160 @@ add_refined_method_entry_i(ID key, VALUE value, void *data) return ID_TABLE_CONTINUE; } -static void ensure_origin(VALUE klass); +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 int -include_modules_at(const VALUE klass, VALUE c, VALUE module, int search_super) +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 (FL_TEST(module, RCLASS_REFINED_BY_ANY)) { - ensure_origin(module); + if (klass_m_tbl) { + while (module) { + if (klass_m_tbl == RCLASS_M_TBL(module)) + return true; + module = RCLASS_SUPER(module); + } } + return false; +} + +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, constant_changed = 0, add_subclass; + 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 c_seen = FALSE; int superclass_seen = FALSE; struct rb_id_table *tbl; - 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)); + 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 = RCLASS_SET_SUPER(c, iclass); RCLASS_SET_INCLUDER(iclass, klass); + add_subclass = TRUE; + if (module != RCLASS_ORIGIN(module)) { + if (!origin_stack) origin_stack = rb_ary_tmp_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_SET_ORIGIN(RARRAY_AREF(origin_stack, (origin_len -= 2)), iclass); + RICLASS_SET_ORIGIN_SHARED_MTBL(iclass); + rb_ary_resize(origin_stack, origin_len); + add_subclass = FALSE; + } - { + if (add_subclass) { VALUE m = module; - if (BUILTIN_TYPE(m) == T_ICLASS) m = RBASIC(m)->klass; - rb_module_add_to_subclasses_list(m, iclass); + 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); + rb_id_table_foreach(RCLASS_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); + tbl = RCLASS_CONST_TBL(module); if (tbl && rb_id_table_size(tbl)) constant_changed = 1; skip: 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) { + VALUE klass = (VALUE)data; + struct rb_id_table *tbl = RCLASS_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_id_table_insert(tbl, key, (VALUE)new_me); - RB_OBJ_WRITTEN(klass, Qundef, new_me); + rb_method_table_insert(klass, tbl, key, new_me); rb_method_entry_copy(me, orig_me); return ID_TABLE_CONTINUE; } else { - rb_id_table_insert(tbl, key, (VALUE)me); + rb_method_table_insert(klass, tbl, key, me); return ID_TABLE_DELETE; } } @@ -979,52 +1245,103 @@ move_refined_method(ID key, VALUE value, void *data) } } -static void +static enum rb_id_table_iterator_result +cache_clear_refined_method(ID key, VALUE value, void *data) +{ + rb_method_entry_t *me = (rb_method_entry_t *) value; + + 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. + + return ID_TABLE_CONTINUE; +} + +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), 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 = 0; + int changed; + bool klass_had_no_origin; ensure_includable(klass, module); - ensure_origin(klass); - changed = include_modules_at(klass, klass, module, FALSE); - if (changed < 0) - rb_raise(rb_eArgError, "cyclic prepend detected"); + 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); } + if (RB_TYPE_P(klass, T_MODULE)) { + rb_subclass_entry_t *iclass = RCLASS_SUBCLASSES(klass); + // skip the placeholder subclass entry at the head of the list if it exists + if (iclass && iclass->next) { + RUBY_ASSERT(!iclass->klass); + iclass = iclass->next; + } + + 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) { + if (klass_had_no_origin && klass_origin_m_tbl == RCLASS_M_TBL(iclass->klass)) { + // backfill an origin iclass to handle refinements and future prepends + rb_id_table_foreach(RCLASS_M_TBL(iclass->klass), clear_module_cache_i, (void *)iclass->klass); + RCLASS_M_TBL(iclass->klass) = klass_m_tbl; + VALUE origin = rb_include_class_new(klass_origin, RCLASS_SUPER(iclass->klass)); + RCLASS_SET_SUPER(iclass->klass, origin); + RCLASS_SET_INCLUDER(origin, RCLASS_INCLUDER(iclass->klass)); + RCLASS_SET_ORIGIN(iclass->klass, origin); + RICLASS_SET_ORIGIN_SHARED_MTBL(origin); + } + include_modules_at(iclass->klass, iclass->klass, module, FALSE); + iclass = iclass->next; + } + } } /* * call-seq: * mod.included_modules -> array * - * Returns the list of modules included in mod. + * Returns the list of modules included or prepended in mod + * or one of mod'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 @@ -1035,7 +1352,7 @@ 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) { + if (p != origin && RCLASS_ORIGIN(p) == p && BUILTIN_TYPE(p) == T_ICLASS) { VALUE m = RBASIC(p)->klass; if (RB_TYPE_P(m, T_MODULE)) rb_ary_push(ary, m); @@ -1048,8 +1365,8 @@ rb_mod_included_modules(VALUE mod) * call-seq: * mod.include?(module) -> true or false * - * Returns true if module is included in - * mod or one of mod's ancestors. + * Returns true if module is included + * or prepended in mod or one of mod's ancestors. * * module A * end @@ -1070,7 +1387,7 @@ 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 (BUILTIN_TYPE(p) == T_ICLASS && !FL_TEST(p, RICLASS_IS_ORIGIN)) { if (RBASIC(p)->klass == mod2) return Qtrue; } } @@ -1099,8 +1416,13 @@ VALUE rb_mod_ancestors(VALUE mod) { VALUE p, ary = rb_ary_new(); + VALUE refined_class = Qnil; + if (FL_TEST(mod, RMODULE_IS_REFINEMENT)) { + refined_class = rb_refinement_module_get_refined_class(mod); + } for (p = mod; p; p = RCLASS_SUPER(p)) { + if (p == refined_class) break; if (p != RCLASS_ORIGIN(p)) continue; if (BUILTIN_TYPE(p) == T_ICLASS) { rb_ary_push(ary, RBASIC(p)->klass); @@ -1112,6 +1434,83 @@ rb_mod_ancestors(VALUE mod) return ary; } +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 && !FL_TEST(klass, FL_SINGLETON)) { + 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) +{ + 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); + + // 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 #=> [] + */ + +VALUE +rb_class_subclasses(VALUE klass) +{ + return class_descendants(klass, true); +} + static void ins_methods_push(st_data_t name, st_data_t ary) { @@ -1133,30 +1532,30 @@ ins_methods_i(st_data_t name, st_data_t type, st_data_t ary) } static int -ins_methods_prot_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) { - if ((rb_method_visibility_t)type == METHOD_VISI_PROTECTED) { + 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_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) { - if ((rb_method_visibility_t)type == METHOD_VISI_PRIVATE) { - ins_methods_push(name, ary); - } - return ST_CONTINUE; + 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) { - if ((rb_method_visibility_t)type == METHOD_VISI_PUBLIC) { - ins_methods_push(name, ary); - } - return ST_CONTINUE; + return ins_methods_type_i(name, type, ary, METHOD_VISI_PUBLIC); } struct method_entry_arg { @@ -1183,6 +1582,7 @@ method_entry_i(ID key, VALUE value, void *data) } else { type = METHOD_ENTRY_VISI(me); + RUBY_ASSERT(type != METHOD_VISI_UNDEF); } st_add_direct(arg->list, key, (st_data_t)type); } @@ -1482,56 +1882,7 @@ 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: - *
- *
Fixed number of parameters
- *
- * 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 - *
- *
argc and argv style
- *
- * 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 - *
- *
Ruby array style
- *
- * 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 - *
- * - * \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: - *
- *
zero or positive number
- *
This means the method body function takes a fixed number of parameters
- *
-1
- *
This means the method body function is "argc and argv" style.
- *
-2
- *
This means the method body function is "self and args" style.
- *
+ * \addtogroup defmethod * \{ */ @@ -1602,19 +1953,15 @@ rb_undef_methods_from(VALUE klass, VALUE super) * \{ */ -#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 @@ -1637,29 +1984,30 @@ singleton_class_of(VALUE obj) { VALUE klass; - if (FIXNUM_P(obj) || FLONUM_P(obj) || STATIC_SYM_P(obj)) { - no_singleton: + switch (TYPE(obj)) { + case T_FIXNUM: + case T_BIGNUM: + case T_FLOAT: + case T_SYMBOL: rb_raise(rb_eTypeError, "can't define singleton"); - } - if (SPECIAL_CONST_P(obj)) { + + 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; - } - else { - switch (BUILTIN_TYPE(obj)) { - case T_FLOAT: case T_BIGNUM: case T_SYMBOL: - goto no_singleton; - case T_STRING: - if (FL_TEST_RAW(obj, RSTRING_FSTR)) goto no_singleton; - break; - } + + case T_STRING: + if (FL_TEST_RAW(obj, RSTRING_FSTR)) { + rb_raise(rb_eTypeError, "can't define singleton"); + } } klass = RBASIC(obj)->klass; if (!(FL_TEST(klass, FL_SINGLETON) && - rb_ivar_get(klass, id_attached) == obj)) { + rb_attr_get(klass, id_attached) == obj)) { rb_serial_t serial = RCLASS_SERIAL(klass); klass = rb_make_metaclass(obj, klass); RCLASS_SERIAL(klass) = serial; @@ -1700,27 +2048,10 @@ rb_singleton_class_get(VALUE obj) } klass = RBASIC(obj)->klass; if (!FL_TEST(klass, FL_SINGLETON)) return Qnil; - if (rb_ivar_get(klass, id_attached) != obj) return Qnil; + if (rb_attr_get(klass, id_attached) != 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 Integer 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) { @@ -1744,13 +2075,6 @@ rb_singleton_class(VALUE obj) #ifdef rb_define_singleton_method #undef rb_define_singleton_method #endif -/*! - * 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. - */ void rb_define_singleton_method(VALUE obj, const char *name, VALUE (*func)(ANYARGS), int argc) { @@ -1760,13 +2084,6 @@ rb_define_singleton_method(VALUE obj, const char *name, VALUE (*func)(ANYARGS), #ifdef rb_define_module_function #undef rb_define_module_function #endif -/*! - * 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. - */ void rb_define_module_function(VALUE module, const char *name, VALUE (*func)(ANYARGS), int argc) { @@ -1777,38 +2094,18 @@ rb_define_module_function(VALUE module, const char *name, VALUE (*func)(ANYARGS) #ifdef rb_define_global_function #undef rb_define_global_function #endif -/*! - * 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. - */ 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) { @@ -1939,52 +2236,22 @@ rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, V } struct rb_scan_args_t { - int argc; - const VALUE *argv; - va_list vargs; - int f_var; - int f_hash; - int f_block; + int kw_flag; int n_lead; int n_opt; int n_trail; - int n_mand; - int argi; - int last_idx; - VALUE hash; - VALUE last_hash; - VALUE *tmp_buffer; + bool f_var; + bool f_hash; + bool f_block; }; static void -rb_scan_args_parse(int kw_flag, int argc, const VALUE *argv, const char *fmt, struct rb_scan_args_t *arg) +rb_scan_args_parse(int kw_flag, const char *fmt, struct rb_scan_args_t *arg) { const char *p = fmt; - VALUE *tmp_buffer = arg->tmp_buffer; - int keyword_given = 0; - int empty_keyword_given = 0; - int last_hash_keyword = 0; memset(arg, 0, sizeof(*arg)); - arg->last_idx = -1; - arg->hash = Qnil; - - switch (kw_flag) { - case RB_SCAN_ARGS_PASS_CALLED_KEYWORDS: - if (!(keyword_given = rb_keyword_given_p())) { - empty_keyword_given = rb_empty_keyword_given_p(); - } - break; - case RB_SCAN_ARGS_KEYWORDS: - keyword_given = 1; - break; - case RB_SCAN_ARGS_EMPTY_KEYWORDS: - empty_keyword_given = 1; - break; - case RB_SCAN_ARGS_LAST_HASH_KEYWORDS: - last_hash_keyword = 1; - break; - } + arg->kw_flag = kw_flag; if (ISDIGIT(*p)) { arg->n_lead = *p - '0'; @@ -2013,97 +2280,47 @@ rb_scan_args_parse(int kw_flag, int argc, const VALUE *argv, const char *fmt, st if (*p != '\0') { rb_fatal("bad scan arg format: %s", fmt); } - arg->n_mand = arg->n_lead + arg->n_trail; +} - /* capture an option hash - phase 1: pop */ - /* Ignore final positional hash if empty keywords given */ - if (argc > 0 && !(arg->f_hash && empty_keyword_given)) { +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 (arg->f_hash && arg->n_mand < argc) { - if (keyword_given) { - if (!RB_TYPE_P(last, T_HASH)) { - rb_warn("Keyword flag set when calling rb_scan_args, but last entry is not a hash"); - } - else { - arg->hash = last; - } - } - else if (NIL_P(last)) { - /* For backwards compatibility, 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. - This will be removed in Ruby 3. */ - if (!arg->f_var && arg->n_mand + arg->n_opt < argc) { - rb_warn("The last argument is nil, treating as empty keywords"); - argc--; - } - } - else { - arg->hash = rb_check_hash_type(last); - } - - /* Ruby 3: Remove if branch, as it will not attempt to split hashes */ - if (!NIL_P(arg->hash)) { - VALUE opts = rb_extract_keywords(&arg->hash); - - if (!(arg->last_hash = arg->hash)) { - if (!keyword_given && !last_hash_keyword) { - /* Warn if treating positional as keyword, as in Ruby 3, - this will be an error */ - rb_warn("Using the last argument as keyword parameters is deprecated"); - } - argc--; - } - else { - /* Warn if splitting either positional hash to keywords or keywords - to positional hash, as in Ruby 3, no splitting will be done */ - rb_warn("The last argument is split into positional and keyword parameters"); - arg->last_idx = argc - 1; - } - arg->hash = opts ? opts : Qnil; - } + if (rb_scan_args_keyword_p(kw_flag, last)) { + hash = rb_hash_dup(last); + argc--; } - else if (arg->f_hash && keyword_given && arg->n_mand == argc) { - /* Warn if treating keywords as positional, as in Ruby 3, this will be an error */ - rb_warn("Passing the keyword argument as the last hash parameter is deprecated"); - } - } - if (arg->f_hash && arg->n_mand == argc+1 && empty_keyword_given) { - VALUE *ptr = rb_alloc_tmp_buffer2(tmp_buffer, argc+1, sizeof(VALUE)); - memcpy(ptr, argv, sizeof(VALUE)*argc); - ptr[argc] = rb_hash_new(); - argc++; - *(&argv) = ptr; - rb_warn("Passing the keyword argument as the last hash parameter is deprecated"); } - arg->argc = argc; - arg->argv = argv; -} - -static int -rb_scan_args_assign(struct rb_scan_args_t *arg, va_list vargs) -{ - int argi = 0; - int i; - VALUE *var; - - if (arg->argc < arg->n_mand) { - return 1; + if (argc < n_mand) { + goto argc_error; } /* capture leading mandatory arguments */ - for (i = arg->n_lead; i-- > 0; ) { - var = va_arg(vargs, VALUE *); - if (var) *var = (argi == arg->last_idx) ? arg->last_hash : arg->argv[argi]; + for (i = 0; i < n_lead; i++) { + var = rb_scan_args_next_param(); + if (var) *var = argv[argi]; argi++; } /* capture optional arguments */ - for (i = arg->n_opt; i-- > 0; ) { - var = va_arg(vargs, VALUE *); - if (argi < arg->argc - arg->n_trail) { - if (var) *var = (argi == arg->last_idx) ? arg->last_hash : arg->argv[argi]; + 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 { @@ -2111,16 +2328,12 @@ rb_scan_args_assign(struct rb_scan_args_t *arg, va_list vargs) } } /* capture variable length arguments */ - if (arg->f_var) { - int n_var = arg->argc - argi - arg->n_trail; + if (f_var) { + int n_var = argc - argi - n_trail; - var = va_arg(vargs, VALUE *); + var = rb_scan_args_next_param(); if (0 < n_var) { - if (var) { - int f_last = (arg->last_idx + 1 == arg->argc - arg->n_trail); - *var = rb_ary_new4(n_var - f_last, &arg->argv[argi]); - if (f_last) rb_ary_push(*var, arg->last_hash); - } + if (var) *var = rb_ary_new_from_values(n_var, &argv[argi]); argi += n_var; } else { @@ -2128,19 +2341,19 @@ rb_scan_args_assign(struct rb_scan_args_t *arg, va_list vargs) } } /* capture trailing mandatory arguments */ - for (i = arg->n_trail; i-- > 0; ) { - var = va_arg(vargs, VALUE *); - if (var) *var = (argi == arg->last_idx) ? arg->last_hash : arg->argv[argi]; + 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 (arg->f_hash) { - var = va_arg(vargs, VALUE *); - if (var) *var = arg->hash; + if (f_hash) { + var = rb_scan_args_next_param(); + if (var) *var = hash; } /* capture iterator block */ - if (arg->f_block) { - var = va_arg(vargs, VALUE *); + if (f_block) { + var = rb_scan_args_next_param(); if (rb_block_given_p()) { *var = rb_block_proc(); } @@ -2149,58 +2362,57 @@ rb_scan_args_assign(struct rb_scan_args_t *arg, va_list vargs) } } - if (argi < arg->argc) return 1; + if (argi == argc) { + return argc; + } - return 0; + 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, ...) { - int error; va_list vargs; - VALUE tmp_buffer = 0; struct rb_scan_args_t arg; - arg.tmp_buffer = &tmp_buffer; - rb_scan_args_parse(RB_SCAN_ARGS_PASS_CALLED_KEYWORDS, argc, argv, fmt, &arg); + rb_scan_args_parse(RB_SCAN_ARGS_PASS_CALLED_KEYWORDS, fmt, &arg); va_start(vargs,fmt); - error = rb_scan_args_assign(&arg, vargs); + argc = rb_scan_args_assign(&arg, argc, argv, vargs); va_end(vargs); - if (tmp_buffer) { - rb_free_tmp_buffer(&tmp_buffer); - } - if (error) { - rb_error_arity(arg.argc, arg.n_mand, arg.f_var ? UNLIMITED_ARGUMENTS : arg.n_mand + arg.n_opt); - } - return arg.argc; + return rb_scan_args_result(&arg, argc); } +#undef rb_scan_args_kw int rb_scan_args_kw(int kw_flag, int argc, const VALUE *argv, const char *fmt, ...) { - int error; va_list vargs; - VALUE tmp_buffer = 0; struct rb_scan_args_t arg; - arg.tmp_buffer = &tmp_buffer; - rb_scan_args_parse(kw_flag, argc, argv, fmt, &arg); + rb_scan_args_parse(kw_flag, fmt, &arg); va_start(vargs,fmt); - error = rb_scan_args_assign(&arg, vargs); + argc = rb_scan_args_assign(&arg, argc, argv, vargs); va_end(vargs); - if (tmp_buffer) { - rb_free_tmp_buffer(&tmp_buffer); - } - if (error) { - rb_error_arity(arg.argc, arg.n_mand, arg.f_var ? UNLIMITED_ARGUMENTS : arg.n_mand + arg.n_opt); - } - return arg.argc; -} - -int -rb_class_has_methods(VALUE c) -{ - return rb_id_table_size(RCLASS_M_TBL(c)) == 0 ? FALSE : TRUE; + return rb_scan_args_result(&arg, argc); } /*! diff --git a/ruby/common.mk b/ruby/common.mk index 8c1f865ea..e7a63fea5 100644 --- a/ruby/common.mk +++ b/ruby/common.mk @@ -8,6 +8,7 @@ dll: $(LIBRUBY_SO) # 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) @@ -17,8 +18,8 @@ mflags = $(MFLAGS) gnumake_recursive = enable_shared = $(ENABLE_SHARED:no=) -UNICODE_VERSION = 12.1.0 -UNICODE_EMOJI_VERSION = 12.1 +UNICODE_VERSION = 13.0.0 +UNICODE_EMOJI_VERSION = 13.1 UNICODE_BETA = NO ### set the following environment variable or uncomment the line if @@ -38,7 +39,7 @@ RUBYLIB = $(PATH_SEPARATOR) RUBYOPT = - RUN_OPTS = --disable-gems -GITPULLOPTIONS = --rebase +# GITPULLOPTIONS = --no-tags INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir) -I$(srcdir) -I$(UNICODE_HDR_DIR) @@ -47,7 +48,7 @@ GEM_PATH = GEM_VENDOR = BENCHMARK_DRIVER_GIT_URL = https://github.com/benchmark-driver/benchmark-driver -BENCHMARK_DRIVER_GIT_REF = v0.15.6 +BENCHMARK_DRIVER_GIT_REF = v0.15.17 SIMPLECOV_GIT_URL = https://github.com/colszowka/simplecov.git SIMPLECOV_GIT_REF = v0.17.0 SIMPLECOV_HTML_GIT_URL = https://github.com/colszowka/simplecov-html.git @@ -81,29 +82,7 @@ ENC_MK = enc.mk MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \ RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(mflags) -COMMONOBJS = squash_cache.$(OBJEXT) \ - squash_decompress.$(OBJEXT) \ - squash_dir.$(OBJEXT) \ - squash_dirent.$(OBJEXT) \ - squash_extract.$(OBJEXT) \ - squash_fd.$(OBJEXT) \ - squash_file.$(OBJEXT) \ - squash_fs.$(OBJEXT) \ - squash_hash.$(OBJEXT) \ - squash_mutex.$(OBJEXT) \ - squash_nonstd-makedev.$(OBJEXT) \ - squash_nonstd-stat.$(OBJEXT) \ - squash_private.$(OBJEXT) \ - squash_readlink.$(OBJEXT) \ - squash_scandir.$(OBJEXT) \ - squash_stack.$(OBJEXT) \ - squash_stat.$(OBJEXT) \ - squash_table.$(OBJEXT) \ - squash_traverse.$(OBJEXT) \ - squash_util.$(OBJEXT) \ - enclose_io_unix.$(OBJEXT) \ - enclose_io_win32.$(OBJEXT) \ - array.$(OBJEXT) \ +COMMONOBJS = array.$(OBJEXT) \ ast.$(OBJEXT) \ bignum.$(OBJEXT) \ class.$(OBJEXT) \ @@ -125,10 +104,12 @@ COMMONOBJS = squash_cache.$(OBJEXT) \ hash.$(OBJEXT) \ inits.$(OBJEXT) \ io.$(OBJEXT) \ + io_buffer.$(OBJEXT) \ iseq.$(OBJEXT) \ load.$(OBJEXT) \ marshal.$(OBJEXT) \ math.$(OBJEXT) \ + memory_view.$(OBJEXT) \ mjit.$(OBJEXT) \ mjit_compile.$(OBJEXT) \ node.$(OBJEXT) \ @@ -138,6 +119,7 @@ COMMONOBJS = squash_cache.$(OBJEXT) \ parse.$(OBJEXT) \ proc.$(OBJEXT) \ process.$(OBJEXT) \ + ractor.$(OBJEXT) \ random.$(OBJEXT) \ range.$(OBJEXT) \ rational.$(OBJEXT) \ @@ -149,7 +131,7 @@ COMMONOBJS = squash_cache.$(OBJEXT) \ regparse.$(OBJEXT) \ regsyntax.$(OBJEXT) \ ruby.$(OBJEXT) \ - safe.$(OBJEXT) \ + scheduler.$(OBJEXT) \ signal.$(OBJEXT) \ sprintf.$(OBJEXT) \ st.$(OBJEXT) \ @@ -167,7 +149,9 @@ COMMONOBJS = squash_cache.$(OBJEXT) \ vm.$(OBJEXT) \ vm_backtrace.$(OBJEXT) \ vm_dump.$(OBJEXT) \ + vm_sync.$(OBJEXT) \ vm_trace.$(OBJEXT) \ + yjit.$(OBJEXT) \ $(COROUTINE_OBJ) \ $(DTRACE_OBJ) \ $(BUILTIN_ENCOBJS) \ @@ -182,7 +166,7 @@ EXPORTOBJS = $(DLNOBJ) \ OBJS = $(EXPORTOBJS) builtin.$(OBJEXT) ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) -GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT) +GOLFOBJS = goruby.$(OBJEXT) DEFAULT_PRELUDES = $(GEM_PRELUDE) PRELUDE_SCRIPTS = $(DEFAULT_PRELUDES) @@ -192,32 +176,35 @@ GOLFPRELUDES = {$(srcdir)}golf_prelude.c 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 TESTSDIR = $(srcdir)/test -TOOL_TESTSDIR = $(srcdir)/tool/test +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 = showflags +SHOWFLAGS = $(no_silence:no=showflags) MAKE_LINK = $(MINIRUBY) -rfileutils -e "include FileUtils::Verbose" \ -e "src, dest = ARGV" \ @@ -247,19 +234,20 @@ mjit_config.h: Makefile # Other `-Dxxx`s preceding `-DMJIT_HEADER` will be removed in transform_mjit_header.rb. # So `-DMJIT_HEADER` should be passed first when rb_mjit_header.h is generated. $(TIMESTAMPDIR)/$(MJIT_HEADER:.h=)$(MJIT_HEADER_SUFFIX).time: probes.h vm.$(OBJEXT) \ - $(TIMESTAMPDIR)/$(arch)/.time + $(TIMESTAMPDIR)/$(arch)/.time $(tooldir)/mjit_tabs.rb $(PREP) $(RBCONFIG) $(ECHO) building $(@F:.time=.h) - $(Q) $(CPP) -DMJIT_HEADER $(MJIT_HEADER_FLAGS) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(srcdir)/vm.c $(CPPOUTFLAG)$(@F:.time=.h).new + $(Q)$(MINIRUBY) $(tooldir)/mjit_tabs.rb "$(MJIT_TABS)" \ + $(CPP) -DMJIT_HEADER $(MJIT_HEADER_FLAGS) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(srcdir)/vm.c $(CPPOUTFLAG)$(@F:.time=.h).new $(Q) $(IFCHANGE) "--timestamp=$@" $(@F:.time=.h) $(@F:.time=.h).new $(MJIT_HEADER:.h=)$(MJIT_HEADER_SUFFIX).h: $(TIMESTAMPDIR)/$(MJIT_HEADER:.h=)$(MJIT_HEADER_SUFFIX).time $(MJIT_MIN_HEADER:.h=)$(MJIT_HEADER_SUFFIX).h: \ $(TIMESTAMPDIR)/$(MJIT_HEADER:.h=)$(MJIT_HEADER_SUFFIX).time \ - $(srcdir)/tool/transform_mjit_header.rb $(PREP) \ + $(tooldir)/transform_mjit_header.rb $(PREP) \ $(MJIT_HEADER:.h=)$(MJIT_HEADER_SUFFIX).h $(ECHO) building $@ - $(MINIRUBY) $(srcdir)/tool/transform_mjit_header.rb "$(CC) $(ARCH_FLAG) $(CFLAGS)" $(MJIT_HEADER:.h=)$(MJIT_HEADER_ARCH).h $@ + $(Q)$(MINIRUBY) $(tooldir)/transform_mjit_header.rb "$(CC) $(CFLAGS) -w" $(MJIT_HEADER:.h=)$(MJIT_HEADER_ARCH).h $@ $(Q) $(MAKEDIRS) $(MJIT_HEADER_INSTALL_DIR) $(Q) $(MAKE_LINK) $@ $(MJIT_HEADER_INSTALL_DIR)/$(@F) @@ -300,14 +288,14 @@ $(EXTS_MK): ext/configure-ext.mk $(srcdir)/template/exts.mk.tmpl \ gnumake=$(gnumake) MINIRUBY="$(MINIRUBY)" \ EXTLDFLAGS="$(EXTLDFLAGS)" srcdir="$(srcdir)" $(ECHO) generating makefile $@ - $(Q)$(MINIRUBY) $(srcdir)/tool/generic_erb.rb -o $@ -c \ - $(srcdir)/template/exts.mk.tmpl --gnumake=$(gnumake) + $(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) $(srcdir)/tool/generic_erb.rb -o $@ -c \ + $(Q)$(MINIRUBY) $(tooldir)/generic_erb.rb -o $@ -c \ $(srcdir)/template/$(@F).tmpl --srcdir="$(srcdir)" \ --miniruby="$(MINIRUBY)" --script-args='$(SCRIPT_ARGS)' @@ -321,12 +309,13 @@ build-ext: $(EXTS_MK) exts-note: $(EXTS_MK) $(Q)$(MAKE) $(EXTS_NOTE) -ext/extinit.c: $(srcdir)/template/extinit.c.tmpl - $(Q)$(MINIRUBY) $(srcdir)/tool/generic_erb.rb -o $@ -c \ +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) +programs: $(PROGRAM) $(WPROGRAM) $(arch)-fake.rb $(PREP): $(MKFILES) @@ -341,7 +330,6 @@ $(GOLF): $(LIBRUBY) $(GOLFOBJS) PHONY $(Q) $(MAKE) $(mflags) \ GOLF=_dummy_golf_target_to_avoid_conflict_just_in_case_ \ MAINOBJ=goruby.$(OBJEXT) \ - EXTOBJS="golf_prelude.$(OBJEXT) $(EXTOBJS)" \ PROGRAM=$(GORUBY)$(EXEEXT) \ V=$(V) \ program @@ -353,9 +341,9 @@ $(CAPIOUT)/.timestamp: Doxyfile $(PREP) -$(Q) $(DOXYGEN) -b $(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) @@ -373,12 +361,12 @@ $(LIBRUBY_EXTS): $(STATIC_RUBY)$(EXEEXT): $(MAINOBJ) $(DLDOBJS) $(EXTOBJS) $(LIBRUBY_A) $(Q)$(RM) $@ - $(PURIFY) $(CC) $(MAINOBJ) $(DLDOBJS) $(LIBRUBY_A) $(MAINLIBS) $(EXTLIBS) $(LIBS) $(OUTFLAG)$@ $(LDFLAGS) $(XLDFLAGS) enclose_io_memfs.$(OBJEXT) + $(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!~/^$(SYMBOL_PREFIX)(Init_|InitVM_|ruby_static_id_|.*_threadptr_|rb_ec_)|^\./{print $$1}'; \ + awk 'BEGIN{print "#!"}; $$2~/^[A-TV-Z]$$/&&$$1!~/^$(SYMBOL_PREFIX)(Init_|InitVM_|ruby_static_id_|.*_threadptr_|rb_ec_)|^\./{print $$1}'; \ ($(CHDIR) $(srcdir) && \ exec sed -n '/^MJIT_FUNC_EXPORTED/!d;N;s/.*\n\(rb_[a-zA-Z_0-9]*\).*/$(SYMBOL_PREFIX)\1/p' cont.c gc.c thread*c vm*.c) \ } | \ @@ -390,17 +378,17 @@ 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 +pre-install-all:: all pre-install-local pre-install-ext pre-install-gem pre-install-doc do-install-all: pre-install-all - $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) $(INSTALL_DOC_OPTS) -post-install-all:: post-install-local post-install-ext post-install-doc + $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --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) --exclude=doc -post-install-nodoc:: post-install-local post-install-ext + $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --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 @@ -479,7 +467,7 @@ post-no-install-all:: post-no-install-local post-no-install-ext post-no-install- @$(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 @@ -487,7 +475,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 @@ -566,12 +554,19 @@ 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) +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) + rdoc: PHONY main @echo Generating RDoc documentation $(Q) $(RDOC) --ri --op "$(RDOCOUT)" $(RDOC_GEN_OPTS) $(RDOCFLAGS) "$(srcdir)" @@ -616,8 +611,8 @@ clean-local:: clean-runnable $(Q)$(RM) $(OBJS) $(MINIOBJS) $(MAINOBJ) $(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) $(COROUTINE_H:/Context.h=/.time) - $(Q)$(RM) probes.h probes.$(OBJEXT) probes.stamp ruby-glommed.$(OBJEXT) ruby.imp - $(Q)$(RM) GNUmakefile.old Makefile.old $(arch)-fake.rb bisect.sh $(ENC_TRANS_D) + $(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.inc -$(Q) $(RMDIR) enc/jis enc/trans enc $(COROUTINE_H:/Context.h=) coroutine 2> $(NULL) || $(NULLCMD) bin/clean-runnable:: PHONY @@ -634,7 +629,7 @@ clean-html: PHONY clean-capi: PHONY clean-platform: PHONY clean-extout: PHONY - -$(Q)$(RMDIR) $(EXTOUT)/$(arch) $(EXTOUT) 2> $(NULL) || $(NULLCMD) + -$(Q)$(RMDIR) $(EXTOUT)/$(arch) $(RUBYCOMMONDIR) $(EXTOUT) 2> $(NULL) || $(NULLCMD) clean-docs: clean-rdoc clean-html clean-capi clean-spec: PHONY clean-rubyspec: clean-spec @@ -734,7 +729,7 @@ 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) || $(NULLCMD) @@ -742,11 +737,15 @@ RUBYSPEC_CAPIEXT = spec/ruby/optional/capi/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 test test-tool test-all test-spec $(ECHO) check succeeded - -$(Q) if [ x"$(GIT)" != x ] && $(CHDIR) "$(srcdir)" && $(GIT) rev-parse > /dev/null 2>&1; then \ - set -x; $(GIT) --no-pager log --format=oneline -G "^ *# *include" origin/master..HEAD; \ + -$(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 *("| parse.tmp.y - $(Q)$(BASERUBY) $(srcdir)/tool/pure_parser.rb parse.tmp.y $(YACC) + $(Q)$(BASERUBY) $(tooldir)/id2token.rb --path-separator=.$(PATH_SEPARATOR)./ --vpath=$(VPATH) id.h $(SRC_FILE) > parse.tmp.y + $(Q)$(BASERUBY) $(tooldir)/pure_parser.rb parse.tmp.y $(YACC) + $(Q)$(RM) parse.tmp.y.bak $(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]|$(SRC_FILE)|" -e "/^#/s!y\.tab\.c!$@!" y.tab.c > $@.new + $(Q)sed -f $(tooldir)/ytab.sed -e "/^#/s|parse\.tmp\.[iy]|$(SRC_FILE)|" -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 @@ -941,23 +963,28 @@ RUBY_H_INCLUDES = {$(VPATH)}ruby.h {$(VPATH)}config.h {$(VPATH)}defines.h \ acosh.$(OBJEXT): {$(VPATH)}acosh.c alloca.$(OBJEXT): {$(VPATH)}alloca.c {$(VPATH)}config.h +cbrt.$(OBJEXT): {$(VPATH)}cbrt.c +close.$(OBJEXT): {$(VPATH)}close.c crypt.$(OBJEXT): {$(VPATH)}crypt.c {$(VPATH)}crypt.h {$(VPATH)}missing/des_tables.c -dup2.$(OBJEXT): {$(VPATH)}dup2.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 -nt.$(OBJEXT): {$(VPATH)}nt.c +tgamma.$(OBJEXT): {$(VPATH)}tgamma.c .coroutine_obj $(COROUTINE_OBJ): \ {$(VPATH)}$(COROUTINE_SRC) \ @@ -982,14 +1009,14 @@ win32/win32.$(OBJEXT): {$(VPATH)}win32/win32.c {$(VPATH)}win32/file.h \ 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) @@ -999,33 +1026,43 @@ INSNS2VMOPT = --srcdir="$(srcdir)" srcs_vpath = {$(VPATH)} -inc_common_headers = $(srcdir)/tool/ruby_vm/views/_copyright.erb $(srcdir)/tool/ruby_vm/views/_notice.erb -$(srcs_vpath)opt_sc.inc: $(srcdir)/tool/ruby_vm/views/opt_sc.inc.erb $(inc_common_headers) -$(srcs_vpath)optinsn.inc: $(srcdir)/tool/ruby_vm/views/optinsn.inc.erb $(inc_common_headers) -$(srcs_vpath)optunifs.inc: $(srcdir)/tool/ruby_vm/views/optunifs.inc.erb $(inc_common_headers) -$(srcs_vpath)insns.inc: $(srcdir)/tool/ruby_vm/views/insns.inc.erb $(inc_common_headers) -$(srcs_vpath)insns_info.inc: $(srcdir)/tool/ruby_vm/views/insns_info.inc.erb $(inc_common_headers) \ - $(srcdir)/tool/ruby_vm/views/_insn_type_chars.erb $(srcdir)/tool/ruby_vm/views/_insn_name_info.erb \ - $(srcdir)/tool/ruby_vm/views/_insn_len_info.erb $(srcdir)/tool/ruby_vm/views/_insn_operand_info.erb \ - $(srcdir)/tool/ruby_vm/views/_attributes.erb $(srcdir)/tool/ruby_vm/views/_comptime_insn_stack_increase.erb \ - $(srcdir)/tool/ruby_vm/views/_insn_sp_pc_dependency.erb -$(srcs_vpath)vmtc.inc: $(srcdir)/tool/ruby_vm/views/vmtc.inc.erb $(inc_common_headers) -$(srcs_vpath)vm.inc: $(srcdir)/tool/ruby_vm/views/vm.inc.erb $(inc_common_headers) \ - $(srcdir)/tool/ruby_vm/views/_insn_entry.erb $(srcdir)/tool/ruby_vm/views/_trace_instruction.erb -$(srcs_vpath)mjit_compile.inc: $(srcdir)/tool/ruby_vm/views/mjit_compile.inc.erb $(inc_common_headers) \ - $(srcdir)/tool/ruby_vm/views/_mjit_compile_insn.erb $(srcdir)/tool/ruby_vm/views/_mjit_compile_send.erb \ - $(srcdir)/tool/ruby_vm/views/_mjit_compile_ivar.erb \ - $(srcdir)/tool/ruby_vm/views/_mjit_compile_insn_body.erb $(srcdir)/tool/ruby_vm/views/_mjit_compile_pc_and_sp.erb +inc_common_headers = $(tooldir)/ruby_vm/views/_copyright.erb $(tooldir)/ruby_vm/views/_notice.erb +$(srcs_vpath)opt_sc.inc: $(tooldir)/ruby_vm/views/opt_sc.inc.erb $(inc_common_headers) +$(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/_insn_sp_pc_dependency.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 +$(srcs_vpath)mjit_compile.inc: $(tooldir)/ruby_vm/views/mjit_compile.inc.erb $(inc_common_headers) \ + $(tooldir)/ruby_vm/views/_mjit_compile_insn.erb $(tooldir)/ruby_vm/views/_mjit_compile_send.erb \ + $(tooldir)/ruby_vm/views/_mjit_compile_ivar.erb \ + $(tooldir)/ruby_vm/views/_mjit_compile_insn_body.erb $(tooldir)/ruby_vm/views/_mjit_compile_pc_and_sp.erb \ + $(tooldir)/ruby_vm/views/_mjit_compile_invokebuiltin.erb $(tooldir)/ruby_vm/views/_mjit_compile_getinlinecache.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)/kernel.rb \ + $(srcdir)/ractor.rb \ + $(srcdir)/timev.rb \ + $(srcdir)/nilclass.rb \ $(srcdir)/prelude.rb \ $(srcdir)/gem_prelude.rb \ + $(srcdir)/yjit.rb \ $(empty) BUILTIN_RB_INCS = $(BUILTIN_RB_SRCS:.rb=.rbinc) @@ -1068,51 +1105,51 @@ all-incs: incs {$(VPATH)}encdb.h {$(VPATH)}transdb.h incs: $(INSNS) {$(VPATH)}node_name.inc {$(VPATH)}known_errors.inc \ {$(VPATH)}vm_call_iseq_optimized.inc $(srcdir)/revision.h \ $(REVISION_H) \ - $(UNICODE_DATA_HEADERS) $(srcdir)/enc/jis/props.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: $(srcdir)/tool/node_name.rb $(srcdir)/node.h +node_name.inc: $(tooldir)/node_name.rb $(srcdir)/node.h $(ECHO) generating $@ - $(Q) $(BASERUBY) -n $(srcdir)/tool/node_name.rb < $(srcdir)/node.h > $@ + $(Q) $(BASERUBY) -n $(tooldir)/node_name.rb < $(srcdir)/node.h > $@ -encdb.h: $(PREP) $(srcdir)/tool/generic_erb.rb $(srcdir)/template/encdb.h.tmpl +encdb.h: $(PREP) $(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) $(MINIRUBY) $(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: $(PREP) 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) $(MINIRUBY) $(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) $(BUILTIN_RB_SRCS) $(ECHO) generating $@ - $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -o $@ \ + $(Q) $(BASERUBY) $(tooldir)/generic_erb.rb -I$(srcdir) -o $@ \ $(srcdir)/template/prelude.c.tmpl $(BUILTIN_RB_SRCS) $(GOLF_PRELUDE_C): $(COMPILE_PRELUDE) {$(srcdir)}golf_prelude.rb $(ECHO) generating $@ - $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -c -o $@ \ + $(Q) $(BASERUBY) $(tooldir)/generic_erb.rb -I$(srcdir) -c -o $@ \ $(srcdir)/template/prelude.c.tmpl golf_prelude.rb MAINCPPFLAGS = $(ENABLE_DEBUG_ENV:yes=-DRUBY_DEBUG_ENV=1) @@ -1121,10 +1158,10 @@ $(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) @@ -1135,32 +1172,34 @@ preludes: {$(srcdir)}golf_prelude.c {$(srcdir)}.rb.rbinc: $(ECHO) making $@ - $(Q) $(BASERUBY) $(srcdir)/tool/mk_builtin_loader.rb $< + $(Q) $(BASERUBY) $(tooldir)/mk_builtin_loader.rb $< -builtin_binary.inc: $(PREP) $(BUILTIN_RB_SRCS) $(srcdir)/tool/mk_builtin_binary.rb - $(Q) $(MINIRUBY) $(srcdir)/tool/mk_builtin_binary.rb --cross=$(CROSS_COMPILING) +builtin_binary.inc: $(PREP) $(BUILTIN_RB_SRCS) $(srcdir)/template/builtin_binary.inc.tmpl + $(Q) $(MINIRUBY) $(tooldir)/generic_erb.rb -o $@ \ + $(srcdir)/template/builtin_binary.inc.tmpl -- --cross=$(CROSS_COMPILING) $(BUILTIN_RB_INCS): $(top_srcdir)/tool/mk_builtin_loader.rb $(srcdir)/revision.h: - $(Q)$(gnumake:yes=#) $(RM) $(@F) - $(Q)$(gnumake:yes=#) $(NULLCMD) > $@ || $(NULLCMD) > $(@F) +$(srcdir)/revision.h$(gnumake:yes=-nongnumake): + $(Q)$(RM) $(@F) + $(Q)$(NULLCMD) > $@ || $(NULLCMD) > $(@F) revision.tmp:: $(Q) $(NULLCMD) > $@ -revision.$(HAVE_BASERUBY:yes=tmp):: $(srcdir)/version.h $(srcdir)/tool/file2lastrev.rb $(REVISION_FORCE) - $(Q) $(BASERUBY) $(srcdir)/tool/file2lastrev.rb -q --revision.h --srcdir="$(srcdir)" > $@ +revision.$(HAVE_BASERUBY:yes=tmp):: $(srcdir)/version.h $(tooldir)/file2lastrev.rb $(REVISION_FORCE) + $(Q) $(BASERUBY) $(tooldir)/file2lastrev.rb -q --revision.h --srcdir="$(srcdir)" > $@ $(REVISION_H): revision.tmp $(Q)$(IFCHANGE) "--timestamp=$@" "$(srcdir)/revision.h" revision.tmp $(srcdir)/ext/ripper/ripper.c: $(srcdir)/ext/ripper/tools/preproc.rb $(srcdir)/parse.y id.h $(srcdir)/ext/ripper/depend $(ECHO) generating $@ - $(Q) VPATH=$${PWD-`pwd`} && $(CHDIR) $(@D) && \ + $(Q) $(CHDIR) $(@D) && \ sed -e 's/{\$$([^(){}]*)[^{}]*}//g' -e /AUTOGENERATED/q depend | \ $(exec) $(MAKE) -f - $(mflags) \ - Q=$(Q) ECHO=$(ECHO) RM="$(RM)" BISON=$(YACC) top_srcdir=../.. srcdir=. VPATH="$${VPATH}" \ - RUBY="$(BASERUBY)" PATH_SEPARATOR="$(PATH_SEPARATOR)" + Q=$(Q) ECHO=$(ECHO) RM="$(RM1)" BISON=$(YACC) top_srcdir=../.. srcdir=. VPATH=../.. \ + RUBY="$(BASERUBY)" PATH_SEPARATOR="$(PATH_SEPARATOR)" LANG=C $(srcdir)/ext/json/parser/parser.c: $(srcdir)/ext/json/parser/parser.rl $(srcdir)/ext/json/parser/prereq.mk $(ECHO) generating $@ @@ -1173,7 +1212,7 @@ $(srcdir)/ext/date/zonetab.h: $(srcdir)/ext/date/zonetab.list $(srcdir)/ext/date 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.ac + $(tooldir)/generic_erb.rb $(srcdir)/template/sizes.c.tmpl $(srcdir)/configure.ac $(ECHO) generating $@ $(Q) $(CHDIR) $(@D) && \ sed '/AUTOGENERATED/q' depend | \ @@ -1181,7 +1220,7 @@ $(srcdir)/ext/rbconfig/sizeof/sizes.c: $(srcdir)/ext/rbconfig/sizeof/depend \ Q=$(Q) ECHO=$(ECHO) top_srcdir=../../.. srcdir=. VPATH=../../.. RUBY="$(BASERUBY)" $(@F) $(srcdir)/ext/rbconfig/sizeof/limits.c: $(srcdir)/ext/rbconfig/sizeof/depend \ - $(srcdir)/tool/generic_erb.rb $(srcdir)/template/limits.c.tmpl + $(tooldir)/generic_erb.rb $(srcdir)/template/limits.c.tmpl $(ECHO) generating $@ $(Q) $(CHDIR) $(@D) && \ sed '/AUTOGENERATED/q' depend | \ @@ -1203,22 +1242,26 @@ $(srcdir)/ext/etc/constdefs.h: $(srcdir)/ext/etc/depend ## run: fake miniruby$(EXEEXT) PHONY - $(BTESTRUBY) $(TESTRUN_SCRIPT) $(RUNOPT) + $(BTESTRUBY) $(RUNOPT0) $(TESTRUN_SCRIPT) $(RUNOPT) runruby: $(PROGRAM) PHONY - $(RUNRUBY) $(TESTRUN_SCRIPT) + RUBY_ON_BUG='gdb -x $(srcdir)/.gdbinit -p' $(RUNRUBY) $(RUNOPT0) $(TESTRUN_SCRIPT) $(RUNOPT) + +runirb: $(PROGRAM) PHONY + RUBY_ON_BUG='gdb -x $(srcdir)/.gdbinit -p' $(RUNRUBY) $(RUNOPT0) -r irb -e 'IRB.start("make runirb")' $(RUNOPT) parse: 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 = @@ -1228,10 +1271,12 @@ 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" \ - $(ARGS) $(OPTS) + $(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 @@ -1246,37 +1291,36 @@ run.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) -- $(TESTRUN_SCRIPT) + 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) -- $(TESTRUN_SCRIPT) + 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 \ + $(BASERUBY) $(tooldir)/make-snapshot \ -srcdir=$(srcdir) -packages=$(DISTPKGS) \ -unicode-version=$(UNICODE_VERSION) \ - tmp $(RELNAME) + $(DISTOPTS) $(PKGSDIR) $(RELNAME) up:: update-remote up:: - -$(Q)$(MAKE) $(mflags) Q=$(Q) REVISION_FORCE=PHONY "$(REVISION_H)" - -up:: - -$(Q)$(MAKE) $(mflags) Q=$(Q) after-update + -$(Q)$(MAKE) $(mflags) Q=$(Q) REVISION_FORCE=PHONY ALWAYS_UPDATE_UNICODE= after-update yes:: no:: +after-update:: $(REVISION_H) after-update:: extract-extlibs after-update:: extract-gems @@ -1292,13 +1336,15 @@ update-config_files: PHONY $(Q) $(BASERUBY) -C "$(srcdir)" tool/downloader.rb -d tool --cache-dir=$(CACHE_DIR) -e gnu \ config.guess config.sub -refresh-gems: update-bundled_gems update-gems extract-gems +refresh-gems: update-bundled_gems prepare-gems +prepare-gems: $(HAVE_BASERUBY:yes=update-gems) $(HAVE_BASERUBY:yes=extract-gems) -update-gems: PHONY +update-gems$(gnumake:yes=-nongnumake): PHONY $(ECHO) Downloading bundled gem files... $(Q) $(BASERUBY) -C "$(srcdir)" \ -I./tool -rdownloader -answ \ -e 'gem, ver = *$$F' \ + -e 'next if !ver or /^#/=~gem' \ -e 'old = Dir.glob("gems/#{gem}-*.gem")' \ -e 'gem = "#{gem}-#{ver}.gem"' \ -e 'Downloader::RubyGems.download(gem, "gems", nil) and' \ @@ -1307,35 +1353,40 @@ update-gems: PHONY -e 'FileUtils.rm_rf(old.map{'"|n|"'n.chomp(".gem")})' \ gems/bundled_gems -extract-gems: PHONY +extract-gems$(gnumake:yes=-nongnumake): PHONY $(ECHO) Extracting bundled gem files... - $(Q) $(RUNRUBY) -C "$(srcdir)/gems" \ - -I../tool -rgem-unpack -answ \ + $(Q) $(RUNRUBY) -C "$(srcdir)" \ + -Itool -rgem-unpack -answ \ + -e 'BEGIN {FileUtils.mkdir_p(d = ".bundle/gems")}' \ -e 'gem, ver = *$$F' \ - -e 'Gem.unpack("#{gem}-#{ver}.gem")' \ - bundled_gems + -e 'next if !ver or /^#/=~gem' \ + -e 'g = "#{gem}-#{ver}"' \ + -e 'File.directory?("#{d}/#{g}") or Gem.unpack("gems/#{g}.gem", d)' \ + gems/bundled_gems update-bundled_gems: PHONY $(Q) $(RUNRUBY) -rrubygems \ - -pla \ - -e '(gem,src), = Gem::SpecFetcher.fetcher.detect(:latest) {'"|s|" \ - -e 's.platform=="ruby"&&s.name==$$F[0]' \ - -e '}' \ - -e 'gem = src.fetch_spec(gem)' \ - -e 'uri = gem.metadata["source_code_uri"]||gem.homepage' \ - -e 'uri = uri.sub(%r[\Ahttps://github\.com/[^/]+/[^/]+\K/tree/.*], "")' \ - -e '$$_ = [gem.name, gem.version, uri].join(" ")' \ + $(tooldir)/update-bundled_gems.rb \ "$(srcdir)/gems/bundled_gems" | \ - "$(IFCHANGE)" "$(srcdir)/gems/bundled_gems" - + $(IFCHANGE) "$(srcdir)/gems/bundled_gems" - + git -C "$(srcdir)" diff --no-ext-diff --ignore-submodules --exit-code || \ + git -C "$(srcdir)" commit -m "Update bundled_gems" gems/bundled_gems -test-bundled-gems-precheck: $(arch)-fake.rb programs +test-bundled-gems-precheck: $(TEST_RUNNABLE)-test-bundled-gems-precheck +yes-test-bundled-gems-precheck: main +no-test-bundled-gems-precheck: test-bundled-gems-fetch: $(PREP) $(Q) $(BASERUBY) -C $(srcdir)/gems ../tool/fetch-bundled_gems.rb src bundled_gems test-bundled-gems-prepare: test-bundled-gems-precheck test-bundled-gems-fetch +test-bundled-gems-prepare: $(TEST_RUNNABLE)-test-bundled-gems-prepare +no-test-bundled-gems-prepare: no-test-bundled-gems-precheck +yes-test-bundled-gems-prepare: yes-test-bundled-gems-precheck + $(ACTIONS_GROUP) $(XRUBY) -C "$(srcdir)" bin/gem install --no-document \ - --install-dir .bundle --conservative "bundler" "minitest:~> 5" 'test-unit' 'rake' 'hoe' 'yard' 'pry' 'packnga' + --install-dir .bundle --conservative "bundler" "minitest:~> 5" "test-unit" "rake" "hoe" "yard" "pry" "packnga" "rexml" "json-schema" "test-unit-rr" + $(ACTIONS_ENDGROUP) PREPARE_BUNDLED_GEMS = test-bundled-gems-prepare test-bundled-gems: $(TEST_RUNNABLE)-test-bundled-gems @@ -1345,14 +1396,24 @@ no-test-bundled-gems: # Override this to allow failure of specific gems on CI # TEST_BUNDLED_GEMS_ALLOW_FAILURES = +BUNDLED_GEMS = test-bundled-gems-run: $(PREPARE_BUNDLED_GEMS) - $(Q) $(XRUBY) $(srcdir)/tool/test-bundled-gems.rb - -test-bundler-precheck: $(arch)-fake.rb programs - -yes-test-bundler-prepare: test-bundler-precheck - $(XRUBY) -C "$(srcdir)" bin/gem install --no-document \ - --install-dir .bundle --conservative "rspec:~> 3.5" "rake:~> 12.0" "parallel_tests:~> 2.29" + $(Q) $(XRUBY) $(tooldir)/test-bundled-gems.rb $(BUNDLED_GEMS) + +test-bundler-precheck: $(TEST_RUNNABLE)-test-bundler-precheck +no-test-bundler-precheck: +yes-test-bundler-precheck: main + +no-test-bundler-prepare: no-test-bundler-precheck +yes-test-bundler-prepare: yes-test-bundler-precheck + $(ACTIONS_GROUP) + $(XRUBY) -C $(srcdir) -Ilib \ + -e 'ENV["GEM_HOME"] = File.expand_path(".bundle")' \ + -e 'ENV["BUNDLE_APP_CONFIG"] = File.expand_path(".bundle")' \ + -e 'ENV["BUNDLE_PATH__SYSTEM"] = "true"' \ + -e 'ENV["BUNDLE_WITHOUT"] = "lint doc"' \ + -e 'load "spec/bundler/support/bundle.rb"' -- install --gemfile=tool/bundler/dev_gems.rb + $(ACTIONS_ENDGROUP) RSPECOPTS = BUNDLER_SPECS = @@ -1365,9 +1426,16 @@ no-test-bundler: PARALLELRSPECOPTS = --runtime-log $(srcdir)/tmp/parallel_runtime_rspec.log test-bundler-parallel: $(TEST_RUNNABLE)-test-bundler-parallel yes-test-bundler-parallel: yes-test-bundler-prepare - $(XRUBY) -C $(srcdir) -Ispec/bundler .bundle/bin/parallel_rspec \ - -o "--require $(srcdir)/spec/bundler/spec_helper --require $(srcdir)/spec/bundler/support/parallel" \ - $(PARALLELRSPECOPTS) spec/bundler/$(BUNDLER_SPECS) + $(XRUBY) \ + -e "ARGV[-1] = File.expand_path(ARGV[-1])" \ + -e "exec(*ARGV)" -- \ + $(XRUBY) -I$(srcdir)/spec/bundler \ + -e "ENV['PARALLEL_TESTS_EXECUTABLE'] = ARGV.shift" \ + -e "load ARGV.shift" \ + "$(XRUBY) -C $(srcdir) -Ispec/bundler .bundle/bin/rspec" \ + $(srcdir)/.bundle/bin/parallel_rspec \ + -o "--require spec_helper" \ + $(PARALLELRSPECOPTS) $(srcdir)/spec/bundler/$(BUNDLER_SPECS) no-test-bundler-parallel: GEM = up @@ -1396,34 +1464,44 @@ UNICODE_AUXILIARY_FILES = \ $(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-data.txt \ $(UNICODE_SRC_EMOJI_DATA_DIR)/emoji-sequences.txt \ $(UNICODE_SRC_EMOJI_DATA_DIR)/emoji-test.txt \ - $(UNICODE_SRC_EMOJI_DATA_DIR)/emoji-variation-sequences.txt \ $(UNICODE_SRC_EMOJI_DATA_DIR)/emoji-zwj-sequences.txt \ $(empty) update-unicode: $(UNICODE_FILES) $(UNICODE_PROPERTY_FILES) \ - $(UNICODE_AUXILIARY_FILES) $(UNICODE_EMOJI_FILES) + $(UNICODE_AUXILIARY_FILES) $(UNICODE_UCD_EMOJI_FILES) $(UNICODE_EMOJI_FILES) CACHE_DIR = $(srcdir)/.downloaded-cache UNICODE_DOWNLOAD = \ - $(BASERUBY) $(srcdir)/tool/downloader.rb \ + $(BASERUBY) $(tooldir)/downloader.rb \ --cache-dir=$(CACHE_DIR) \ --unicode-beta $(UNICODE_BETA) \ -d $(UNICODE_SRC_DATA_DIR) \ -p $(UNICODE_VERSION)/ucd \ -e $(ALWAYS_UPDATE_UNICODE:yes=-a) unicode UNICODE_AUXILIARY_DOWNLOAD = \ - $(BASERUBY) $(srcdir)/tool/downloader.rb \ + $(BASERUBY) $(tooldir)/downloader.rb \ --cache-dir=$(CACHE_DIR) \ --unicode-beta $(UNICODE_BETA) \ -d $(UNICODE_SRC_DATA_DIR)/auxiliary \ -p $(UNICODE_VERSION)/ucd/auxiliary \ -e $(ALWAYS_UPDATE_UNICODE:yes=-a) unicode +UNICODE_UCD_EMOJI_DOWNLOAD = \ + $(BASERUBY) $(tooldir)/downloader.rb \ + --cache-dir=$(CACHE_DIR) \ + --unicode-beta $(UNICODE_BETA) \ + -d $(UNICODE_SRC_DATA_DIR)/emoji \ + -p $(UNICODE_VERSION)/ucd/emoji \ + -e $(ALWAYS_UPDATE_UNICODE:yes=-a) unicode UNICODE_EMOJI_DOWNLOAD = \ - $(BASERUBY) $(srcdir)/tool/downloader.rb \ + $(BASERUBY) $(tooldir)/downloader.rb \ --cache-dir=$(CACHE_DIR) \ --unicode-beta $(UNICODE_BETA) \ -d $(UNICODE_SRC_EMOJI_DATA_DIR) \ @@ -1432,7 +1510,7 @@ UNICODE_EMOJI_DOWNLOAD = \ $(UNICODE_FILES) $(UNICODE_PROPERTY_FILES): update-unicode-files update-unicode-files: - $(ECHO) Downloading Unicode $(UNICODE_VERSION) data and property files... + $(ECHO) Downloading Unicode $(UNICODE_VERSION) data and property files... $(Q) $(MAKEDIRS) "$(UNICODE_SRC_DATA_DIR)" $(Q) $(UNICODE_DOWNLOAD) $(UNICODE_FILES) $(UNICODE_PROPERTY_FILES) @@ -1442,29 +1520,35 @@ update-unicode-auxiliary-files: $(Q) $(MAKEDIRS) "$(UNICODE_SRC_DATA_DIR)/auxiliary" $(Q) $(UNICODE_AUXILIARY_DOWNLOAD) $(UNICODE_AUXILIARY_FILES) +$(UNICODE_UCD_EMOJI_FILES): update-unicode-ucd-emoji-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) + $(UNICODE_EMOJI_FILES): update-unicode-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) -$(srcdir)/lib/unicode_normalize/$(HAVE_BASERUBY:yes=tables.rb): \ - $(UNICODE_SRC_DATA_DIR)/.unicode-tables.time +$(srcdir)/lib/unicode_normalize/$(ALWAYS_UPDATE_UNICODE:yes=tables.rb): \ + $(UNICODE_SRC_DATA_DIR)/$(HAVE_BASERUBY:yes=.unicode-tables.time) $(UNICODE_SRC_DATA_DIR)/$(ALWAYS_UPDATE_UNICODE:yes=.unicode-tables.time): \ $(UNICODE_FILES) $(UNICODE_PROPERTY_FILES) \ - $(UNICODE_AUXILIARY_FILES) $(UNICODE_EMOJI_FILES) + $(UNICODE_AUXILIARY_FILES) $(UNICODE_UCD_EMOJI_FILES) $(UNICODE_EMOJI_FILES) touch-unicode-files: $(MAKEDIRS) $(UNICODE_SRC_DATA_DIR) touch $(UNICODE_SRC_DATA_DIR)/.unicode-tables.time $(UNICODE_DATA_HEADERS) UNICODE_TABLES_TIMESTAMP = yes -$(UNICODE_SRC_DATA_DIR)/.unicode-tables.time: $(srcdir)/tool/generic_erb.rb \ +$(UNICODE_SRC_DATA_DIR)/.unicode-tables.time: $(tooldir)/generic_erb.rb \ $(srcdir)/template/unicode_norm_gen.tmpl \ $(ALWAYS_UPDATE_UNICODE:yes=update-unicode) $(Q) $(MAKE) $(@D) - $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb \ + $(Q) $(BASERUBY) $(tooldir)/generic_erb.rb \ -c $(UNICODE_TABLES_TIMESTAMP:yes=-t$@) \ -o $(srcdir)/lib/unicode_normalize/tables.rb \ -I $(srcdir) \ @@ -1475,14 +1559,14 @@ $(UNICODE_SRC_DATA_DIR): $(gnumake_recursive)$(Q) $(MAKEDIRS) $@ $(UNICODE_HDR_DIR)/$(ALWAYS_UPDATE_UNICODE:yes=name2ctype.h): \ - $(srcdir)/tool/enc-unicode.rb \ + $(tooldir)/enc-unicode.rb \ $(UNICODE_SRC_DATA_DIR)/UnicodeData.txt \ $(UNICODE_PROPERTY_FILES) \ $(UNICODE_EMOJI_FILES) $(UNICODE_HDR_DIR)/name2ctype.h: $(MAKEDIRS) $(@D) - $(BOOTSTRAPRUBY) $(srcdir)/tool/enc-unicode.rb --header \ + $(BOOTSTRAPRUBY) $(tooldir)/enc-unicode.rb --header \ $(UNICODE_SRC_DATA_DIR) $(UNICODE_SRC_EMOJI_DATA_DIR) > $@.new $(MV) $@.new $@ @@ -1540,11 +1624,18 @@ sudo-precheck: PHONY @$(SUDO) echo > $(NULL) update-man-date: PHONY - -$(Q) $(BASERUBY) -I"$(srcdir)/tool/lib" -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("@", nil, nil, ARGV[1])' \ + "$(srcdir)" $@ + HELP_EXTRA_TASKS = "" help: PHONY @@ -1572,7 +1663,7 @@ help: PHONY " 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=]" \ + " sync-default-gems: sync default gems from upstream [GEM=]" \ " up: update local copy and autogenerated files" \ " benchmark: benchmark this ruby and COMPARE_RUBY." \ " gcbench: gc benchmark [GCBENCH_ITEM=]" \ @@ -1590,20 +1681,246 @@ help: PHONY # 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/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): $(hdrdir)/ruby.h array.$(OBJEXT): $(hdrdir)/ruby/ruby.h +array.$(OBJEXT): $(top_srcdir)/internal/array.h +array.$(OBJEXT): $(top_srcdir)/internal/bignum.h +array.$(OBJEXT): $(top_srcdir)/internal/bits.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/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/serial.h +array.$(OBJEXT): $(top_srcdir)/internal/static_assert.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)}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)}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/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/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/gc.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/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/rgengc.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/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)}missing.h array.$(OBJEXT): {$(VPATH)}onigmo.h array.$(OBJEXT): {$(VPATH)}oniguruma.h @@ -1620,16 +1937,185 @@ 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/compilers.h +ast.$(OBJEXT): $(top_srcdir)/internal/gc.h +ast.$(OBJEXT): $(top_srcdir)/internal/imemo.h +ast.$(OBJEXT): $(top_srcdir)/internal/parse.h +ast.$(OBJEXT): $(top_srcdir)/internal/serial.h +ast.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +ast.$(OBJEXT): $(top_srcdir)/internal/symbol.h +ast.$(OBJEXT): $(top_srcdir)/internal/vm.h +ast.$(OBJEXT): $(top_srcdir)/internal/warnings.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)}darray.h ast.$(OBJEXT): {$(VPATH)}defines.h ast.$(OBJEXT): {$(VPATH)}encoding.h ast.$(OBJEXT): {$(VPATH)}id.h ast.$(OBJEXT): {$(VPATH)}intern.h ast.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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 @@ -1645,15 +2131,179 @@ 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): $(hdrdir)/ruby.h bignum.$(OBJEXT): $(hdrdir)/ruby/ruby.h +bignum.$(OBJEXT): $(top_srcdir)/internal/bignum.h +bignum.$(OBJEXT): $(top_srcdir)/internal/bits.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/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/static_assert.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)}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)}id.h +bignum.$(OBJEXT): {$(VPATH)}id_table.h bignum.$(OBJEXT): {$(VPATH)}intern.h bignum.$(OBJEXT): {$(VPATH)}internal.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/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/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/gc.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/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/rgengc.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/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)}missing.h bignum.$(OBJEXT): {$(VPATH)}ruby_assert.h bignum.$(OBJEXT): {$(VPATH)}st.h @@ -1664,17 +2314,174 @@ 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.h builtin.$(OBJEXT): $(hdrdir)/ruby/ruby.h +builtin.$(OBJEXT): $(top_srcdir)/internal/array.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/serial.h +builtin.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +builtin.$(OBJEXT): $(top_srcdir)/internal/vm.h +builtin.$(OBJEXT): $(top_srcdir)/internal/warnings.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.inc builtin.$(OBJEXT): {$(VPATH)}config.h +builtin.$(OBJEXT): {$(VPATH)}darray.h builtin.$(OBJEXT): {$(VPATH)}defines.h builtin.$(OBJEXT): {$(VPATH)}id.h builtin.$(OBJEXT): {$(VPATH)}intern.h builtin.$(OBJEXT): {$(VPATH)}internal.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/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/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/gc.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/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/rgengc.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/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 @@ -1691,20 +2498,196 @@ 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.h class.$(OBJEXT): $(hdrdir)/ruby/ruby.h +class.$(OBJEXT): $(top_srcdir)/internal/array.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/serial.h +class.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +class.$(OBJEXT): $(top_srcdir)/internal/string.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)}darray.h +class.$(OBJEXT): {$(VPATH)}debug_counter.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)}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/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/gc.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/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/rgengc.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/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)}ruby_assert.h class.$(OBJEXT): {$(VPATH)}ruby_atomic.h class.$(OBJEXT): {$(VPATH)}st.h @@ -1713,28 +2696,231 @@ class.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h class.$(OBJEXT): {$(VPATH)}thread_native.h class.$(OBJEXT): {$(VPATH)}vm_core.h class.$(OBJEXT): {$(VPATH)}vm_opts.h -compar.$(OBJEXT): $(hdrdir)/ruby.h compar.$(OBJEXT): $(hdrdir)/ruby/ruby.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/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)}encoding.h compar.$(OBJEXT): {$(VPATH)}id.h compar.$(OBJEXT): {$(VPATH)}intern.h compar.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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.h compile.$(OBJEXT): $(hdrdir)/ruby/ruby.h +compile.$(OBJEXT): $(top_srcdir)/internal/array.h +compile.$(OBJEXT): $(top_srcdir)/internal/bignum.h +compile.$(OBJEXT): $(top_srcdir)/internal/bits.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/numeric.h +compile.$(OBJEXT): $(top_srcdir)/internal/object.h +compile.$(OBJEXT): $(top_srcdir)/internal/rational.h +compile.$(OBJEXT): $(top_srcdir)/internal/re.h +compile.$(OBJEXT): $(top_srcdir)/internal/serial.h +compile.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +compile.$(OBJEXT): $(top_srcdir)/internal/string.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): {$(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)}darray.h +compile.$(OBJEXT): {$(VPATH)}debug_counter.h compile.$(OBJEXT): {$(VPATH)}defines.h compile.$(OBJEXT): {$(VPATH)}encindex.h compile.$(OBJEXT): {$(VPATH)}encoding.h @@ -1746,15 +2932,162 @@ 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/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/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/gc.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/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/rgengc.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/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)}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)}opt_sc.inc compile.$(OBJEXT): {$(VPATH)}optinsn.inc -compile.$(OBJEXT): {$(VPATH)}optunifs.inc compile.$(OBJEXT): {$(VPATH)}re.h compile.$(OBJEXT): {$(VPATH)}regex.h compile.$(OBJEXT): {$(VPATH)}ruby_assert.h @@ -1764,18 +3097,183 @@ 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 -complex.$(OBJEXT): $(hdrdir)/ruby.h complex.$(OBJEXT): $(hdrdir)/ruby/ruby.h +complex.$(OBJEXT): $(top_srcdir)/internal/array.h +complex.$(OBJEXT): $(top_srcdir)/internal/bignum.h +complex.$(OBJEXT): $(top_srcdir)/internal/bits.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/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/serial.h +complex.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +complex.$(OBJEXT): $(top_srcdir)/internal/vm.h +complex.$(OBJEXT): $(top_srcdir)/internal/warnings.h complex.$(OBJEXT): {$(VPATH)}assert.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)}defines.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/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/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/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/gc.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/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/rgengc.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/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)}missing.h complex.$(OBJEXT): {$(VPATH)}ruby_assert.h complex.$(OBJEXT): {$(VPATH)}st.h @@ -1786,21 +3284,185 @@ 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): $(top_srcdir)/internal/array.h +cont.$(OBJEXT): $(top_srcdir)/internal/compilers.h +cont.$(OBJEXT): $(top_srcdir)/internal/cont.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/serial.h +cont.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +cont.$(OBJEXT): $(top_srcdir)/internal/vm.h +cont.$(OBJEXT): $(top_srcdir)/internal/warnings.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)}cont.c +cont.$(OBJEXT): {$(VPATH)}darray.h cont.$(OBJEXT): {$(VPATH)}debug_counter.h cont.$(OBJEXT): {$(VPATH)}defines.h cont.$(OBJEXT): {$(VPATH)}eval_intern.h +cont.$(OBJEXT): {$(VPATH)}fiber/scheduler.h cont.$(OBJEXT): {$(VPATH)}gc.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/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/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/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/gc.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/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/rgengc.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/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)}method.h cont.$(OBJEXT): {$(VPATH)}missing.h cont.$(OBJEXT): {$(VPATH)}mjit.h cont.$(OBJEXT): {$(VPATH)}node.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)}st.h @@ -1808,29 +3470,203 @@ 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)}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.h debug.$(OBJEXT): $(hdrdir)/ruby/ruby.h +debug.$(OBJEXT): $(top_srcdir)/internal/array.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/serial.h +debug.$(OBJEXT): $(top_srcdir)/internal/signal.h +debug.$(OBJEXT): $(top_srcdir)/internal/static_assert.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)}darray.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)}gc.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/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/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/gc.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/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/rgengc.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/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)}st.h @@ -1839,32 +3675,355 @@ 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_counter.$(OBJEXT): $(hdrdir)/ruby.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/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/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/gc.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/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/rgengc.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/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 -dir.$(OBJEXT): $(hdrdir)/ruby.h +debug_counter.$(OBJEXT): {$(VPATH)}thread_native.h dir.$(OBJEXT): $(hdrdir)/ruby/ruby.h +dir.$(OBJEXT): $(top_srcdir)/internal/array.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/io.h +dir.$(OBJEXT): $(top_srcdir)/internal/object.h +dir.$(OBJEXT): $(top_srcdir)/internal/serial.h +dir.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +dir.$(OBJEXT): $(top_srcdir)/internal/string.h +dir.$(OBJEXT): $(top_srcdir)/internal/vm.h +dir.$(OBJEXT): $(top_srcdir)/internal/warnings.h dir.$(OBJEXT): {$(VPATH)}assert.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)}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/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/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/gc.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/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/rgengc.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/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)}missing.h dir.$(OBJEXT): {$(VPATH)}onigmo.h dir.$(OBJEXT): {$(VPATH)}oniguruma.h @@ -1872,50 +4031,805 @@ dir.$(OBJEXT): {$(VPATH)}st.h dir.$(OBJEXT): {$(VPATH)}subst.h dir.$(OBJEXT): {$(VPATH)}thread.h dir.$(OBJEXT): {$(VPATH)}util.h -dln.$(OBJEXT): $(hdrdir)/ruby.h dln.$(OBJEXT): $(hdrdir)/ruby/ruby.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/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/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/gc.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/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/rgengc.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/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/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/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/gc.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/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/rgengc.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/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/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/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/gc.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/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/rgengc.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/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/gc.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/rgengc.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/gc.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/rgengc.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 @@ -1923,38 +4837,685 @@ 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/gc.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/rgengc.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/gc.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/rgengc.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/gc.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/rgengc.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 -encoding.$(OBJEXT): $(hdrdir)/ruby.h +enc/utf_8.$(OBJEXT): {$(VPATH)}st.h +enc/utf_8.$(OBJEXT): {$(VPATH)}subst.h encoding.$(OBJEXT): $(hdrdir)/ruby/ruby.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/gc.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/static_assert.h +encoding.$(OBJEXT): $(top_srcdir)/internal/string.h +encoding.$(OBJEXT): $(top_srcdir)/internal/vm.h +encoding.$(OBJEXT): $(top_srcdir)/internal/warnings.h encoding.$(OBJEXT): {$(VPATH)}assert.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)}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_table.h encoding.$(OBJEXT): {$(VPATH)}intern.h encoding.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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)}missing.h encoding.$(OBJEXT): {$(VPATH)}onigmo.h encoding.$(OBJEXT): {$(VPATH)}oniguruma.h @@ -1963,51 +5524,589 @@ 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.h +encoding.$(OBJEXT): {$(VPATH)}vm_debug.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/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/static_assert.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)}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/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/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/gc.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/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/rgengc.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/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)}st.h enum.$(OBJEXT): {$(VPATH)}subst.h enum.$(OBJEXT): {$(VPATH)}symbol.h enum.$(OBJEXT): {$(VPATH)}util.h -enumerator.$(OBJEXT): $(hdrdir)/ruby.h enumerator.$(OBJEXT): $(hdrdir)/ruby/ruby.h +enumerator.$(OBJEXT): $(top_srcdir)/internal/array.h +enumerator.$(OBJEXT): $(top_srcdir)/internal/bignum.h +enumerator.$(OBJEXT): $(top_srcdir)/internal/bits.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/serial.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/vm.h +enumerator.$(OBJEXT): $(top_srcdir)/internal/warnings.h enumerator.$(OBJEXT): {$(VPATH)}assert.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)}defines.h +enumerator.$(OBJEXT): {$(VPATH)}encoding.h enumerator.$(OBJEXT): {$(VPATH)}enumerator.c enumerator.$(OBJEXT): {$(VPATH)}id.h enumerator.$(OBJEXT): {$(VPATH)}intern.h enumerator.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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)}missing.h +enumerator.$(OBJEXT): {$(VPATH)}onigmo.h +enumerator.$(OBJEXT): {$(VPATH)}oniguruma.h +enumerator.$(OBJEXT): {$(VPATH)}ruby_assert.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.h error.$(OBJEXT): $(hdrdir)/ruby/ruby.h +error.$(OBJEXT): $(top_srcdir)/internal/array.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/serial.h +error.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +error.$(OBJEXT): $(top_srcdir)/internal/string.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)}darray.h error.$(OBJEXT): {$(VPATH)}defines.h error.$(OBJEXT): {$(VPATH)}encoding.h error.$(OBJEXT): {$(VPATH)}error.c -error.$(OBJEXT): {$(VPATH)}eval_intern.h 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/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/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/gc.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/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/rgengc.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/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 @@ -2029,26 +6128,212 @@ 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): $(top_srcdir)/internal/array.h +eval.$(OBJEXT): $(top_srcdir)/internal/class.h +eval.$(OBJEXT): $(top_srcdir)/internal/compilers.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/serial.h +eval.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +eval.$(OBJEXT): $(top_srcdir)/internal/string.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): {$(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)}darray.h eval.$(OBJEXT): {$(VPATH)}debug_counter.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)}fiber/scheduler.h eval.$(OBJEXT): {$(VPATH)}gc.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/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/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/gc.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/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/rgengc.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/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)}mjit.h eval.$(OBJEXT): {$(VPATH)}node.h +eval.$(OBJEXT): {$(VPATH)}onigmo.h +eval.$(OBJEXT): {$(VPATH)}oniguruma.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)}st.h @@ -2057,13 +6342,53 @@ 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)}yjit.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): $(hdrdir)/ruby.h file.$(OBJEXT): $(hdrdir)/ruby/ruby.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/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/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)}defines.h file.$(OBJEXT): {$(VPATH)}dln.h @@ -2071,8 +6396,157 @@ 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/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/noreturn.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/gc.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/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/rgengc.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/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 @@ -2087,10 +6561,49 @@ 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): $(top_srcdir)/internal/array.h +gc.$(OBJEXT): $(top_srcdir)/internal/bignum.h +gc.$(OBJEXT): $(top_srcdir)/internal/bits.h +gc.$(OBJEXT): $(top_srcdir)/internal/class.h +gc.$(OBJEXT): $(top_srcdir)/internal/compilers.h +gc.$(OBJEXT): $(top_srcdir)/internal/complex.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/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): {$(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 @@ -2098,11 +6611,161 @@ gc.$(OBJEXT): {$(VPATH)}encoding.h gc.$(OBJEXT): {$(VPATH)}eval_intern.h gc.$(OBJEXT): {$(VPATH)}gc.c gc.$(OBJEXT): {$(VPATH)}gc.h +gc.$(OBJEXT): {$(VPATH)}gc.rb 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/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/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/gc.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/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/rgengc.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/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)}method.h gc.$(OBJEXT): {$(VPATH)}missing.h @@ -2112,6 +6775,8 @@ gc.$(OBJEXT): {$(VPATH)}onigmo.h gc.$(OBJEXT): {$(VPATH)}oniguruma.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 @@ -2126,79 +6791,560 @@ gc.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h gc.$(OBJEXT): {$(VPATH)}thread_native.h gc.$(OBJEXT): {$(VPATH)}transient_heap.h gc.$(OBJEXT): {$(VPATH)}util.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 -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.h -golf_prelude.$(OBJEXT): $(hdrdir)/ruby/ruby.h -golf_prelude.$(OBJEXT): {$(VPATH)}assert.h -golf_prelude.$(OBJEXT): {$(VPATH)}config.h -golf_prelude.$(OBJEXT): {$(VPATH)}defines.h -golf_prelude.$(OBJEXT): {$(VPATH)}golf_prelude.c -golf_prelude.$(OBJEXT): {$(VPATH)}golf_prelude.rb -golf_prelude.$(OBJEXT): {$(VPATH)}id.h -golf_prelude.$(OBJEXT): {$(VPATH)}intern.h -golf_prelude.$(OBJEXT): {$(VPATH)}internal.h -golf_prelude.$(OBJEXT): {$(VPATH)}iseq.h -golf_prelude.$(OBJEXT): {$(VPATH)}method.h -golf_prelude.$(OBJEXT): {$(VPATH)}missing.h -golf_prelude.$(OBJEXT): {$(VPATH)}node.h -golf_prelude.$(OBJEXT): {$(VPATH)}ruby_assert.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_opts.h +gc.$(OBJEXT): {$(VPATH)}vm_sync.h +gc.$(OBJEXT): {$(VPATH)}yjit.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/compilers.h +goruby.$(OBJEXT): $(top_srcdir)/internal/gc.h +goruby.$(OBJEXT): $(top_srcdir)/internal/imemo.h +goruby.$(OBJEXT): $(top_srcdir)/internal/serial.h +goruby.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +goruby.$(OBJEXT): $(top_srcdir)/internal/vm.h +goruby.$(OBJEXT): $(top_srcdir)/internal/warnings.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)}darray.h goruby.$(OBJEXT): {$(VPATH)}defines.h +goruby.$(OBJEXT): {$(VPATH)}golf_prelude.c +goruby.$(OBJEXT): {$(VPATH)}golf_prelude.rb goruby.$(OBJEXT): {$(VPATH)}goruby.c +goruby.$(OBJEXT): {$(VPATH)}id.h goruby.$(OBJEXT): {$(VPATH)}intern.h +goruby.$(OBJEXT): {$(VPATH)}internal.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/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/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/gc.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/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/rgengc.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/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)}ruby_assert.h +goruby.$(OBJEXT): {$(VPATH)}ruby_atomic.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 -hash.$(OBJEXT): $(hdrdir)/ruby.h +goruby.$(OBJEXT): {$(VPATH)}vm_opts.h hash.$(OBJEXT): $(hdrdir)/ruby/ruby.h +hash.$(OBJEXT): $(top_srcdir)/internal/array.h +hash.$(OBJEXT): $(top_srcdir)/internal/bignum.h +hash.$(OBJEXT): $(top_srcdir)/internal/bits.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/object.h +hash.$(OBJEXT): $(top_srcdir)/internal/proc.h +hash.$(OBJEXT): $(top_srcdir)/internal/serial.h +hash.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +hash.$(OBJEXT): $(top_srcdir)/internal/string.h +hash.$(OBJEXT): $(top_srcdir)/internal/symbol.h +hash.$(OBJEXT): $(top_srcdir)/internal/time.h +hash.$(OBJEXT): $(top_srcdir)/internal/vm.h +hash.$(OBJEXT): $(top_srcdir)/internal/warnings.h hash.$(OBJEXT): {$(VPATH)}assert.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)}config.h hash.$(OBJEXT): {$(VPATH)}debug_counter.h hash.$(OBJEXT): {$(VPATH)}defines.h hash.$(OBJEXT): {$(VPATH)}encoding.h hash.$(OBJEXT): {$(VPATH)}hash.c 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/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/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/gc.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/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/rgengc.h +hash.$(OBJEXT): {$(VPATH)}internal/scan_args.h +hash.$(OBJEXT): {$(VPATH)}internal/special_consts.h +hash.$(OBJEXT): {$(VPATH)}internal/static_assert.h +hash.$(OBJEXT): {$(VPATH)}internal/stdalign.h +hash.$(OBJEXT): {$(VPATH)}internal/stdbool.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)}missing.h hash.$(OBJEXT): {$(VPATH)}onigmo.h hash.$(OBJEXT): {$(VPATH)}oniguruma.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)}st.h hash.$(OBJEXT): {$(VPATH)}subst.h hash.$(OBJEXT): {$(VPATH)}symbol.h +hash.$(OBJEXT): {$(VPATH)}thread_native.h hash.$(OBJEXT): {$(VPATH)}transient_heap.h hash.$(OBJEXT): {$(VPATH)}util.h +hash.$(OBJEXT): {$(VPATH)}vm_debug.h +hash.$(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.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/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/gc.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/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/rgengc.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/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 @@ -2207,26 +7353,212 @@ 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.h io.$(OBJEXT): $(hdrdir)/ruby/ruby.h +io.$(OBJEXT): $(top_srcdir)/internal/array.h +io.$(OBJEXT): $(top_srcdir)/internal/bignum.h +io.$(OBJEXT): $(top_srcdir)/internal/bits.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/serial.h +io.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +io.$(OBJEXT): $(top_srcdir)/internal/string.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)}darray.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/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/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/gc.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/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/rgengc.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/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)}st.h @@ -2237,17 +7569,228 @@ io.$(OBJEXT): {$(VPATH)}thread_native.h io.$(OBJEXT): {$(VPATH)}util.h io.$(OBJEXT): {$(VPATH)}vm_core.h io.$(OBJEXT): {$(VPATH)}vm_opts.h +io_buffer.$(OBJEXT): $(hdrdir)/ruby/ruby.h +io_buffer.$(OBJEXT): $(top_srcdir)/internal/bits.h +io_buffer.$(OBJEXT): $(top_srcdir)/internal/compilers.h +io_buffer.$(OBJEXT): $(top_srcdir)/internal/error.h +io_buffer.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +io_buffer.$(OBJEXT): $(top_srcdir)/internal/string.h +io_buffer.$(OBJEXT): {$(VPATH)}assert.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)}encoding.h +io_buffer.$(OBJEXT): {$(VPATH)}fiber/scheduler.h +io_buffer.$(OBJEXT): {$(VPATH)}intern.h +io_buffer.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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)}missing.h +io_buffer.$(OBJEXT): {$(VPATH)}onigmo.h +io_buffer.$(OBJEXT): {$(VPATH)}oniguruma.h +io_buffer.$(OBJEXT): {$(VPATH)}st.h +io_buffer.$(OBJEXT): {$(VPATH)}subst.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): $(top_srcdir)/internal/array.h +iseq.$(OBJEXT): $(top_srcdir)/internal/bits.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/error.h +iseq.$(OBJEXT): $(top_srcdir)/internal/file.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/parse.h +iseq.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h +iseq.$(OBJEXT): $(top_srcdir)/internal/serial.h +iseq.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +iseq.$(OBJEXT): $(top_srcdir)/internal/string.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): {$(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)}darray.h iseq.$(OBJEXT): {$(VPATH)}debug_counter.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 @@ -2257,6 +7800,154 @@ 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/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/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/gc.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/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/rgengc.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/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)}iseq.c iseq.$(OBJEXT): {$(VPATH)}iseq.h iseq.$(OBJEXT): {$(VPATH)}method.h @@ -2264,6 +7955,9 @@ iseq.$(OBJEXT): {$(VPATH)}missing.h iseq.$(OBJEXT): {$(VPATH)}mjit.h iseq.$(OBJEXT): {$(VPATH)}node.h iseq.$(OBJEXT): {$(VPATH)}node_name.inc +iseq.$(OBJEXT): {$(VPATH)}onigmo.h +iseq.$(OBJEXT): {$(VPATH)}oniguruma.h +iseq.$(OBJEXT): {$(VPATH)}ractor.h iseq.$(OBJEXT): {$(VPATH)}ruby_assert.h iseq.$(OBJEXT): {$(VPATH)}ruby_atomic.h iseq.$(OBJEXT): {$(VPATH)}st.h @@ -2271,23 +7965,201 @@ 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_opts.h +iseq.$(OBJEXT): {$(VPATH)}yjit.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.h load.$(OBJEXT): $(hdrdir)/ruby/ruby.h +load.$(OBJEXT): $(top_srcdir)/internal/array.h +load.$(OBJEXT): $(top_srcdir)/internal/compilers.h +load.$(OBJEXT): $(top_srcdir)/internal/dir.h +load.$(OBJEXT): $(top_srcdir)/internal/error.h +load.$(OBJEXT): $(top_srcdir)/internal/file.h +load.$(OBJEXT): $(top_srcdir)/internal/gc.h +load.$(OBJEXT): $(top_srcdir)/internal/imemo.h +load.$(OBJEXT): $(top_srcdir)/internal/load.h +load.$(OBJEXT): $(top_srcdir)/internal/parse.h +load.$(OBJEXT): $(top_srcdir)/internal/serial.h +load.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +load.$(OBJEXT): $(top_srcdir)/internal/string.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): {$(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)}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/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/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/gc.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/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/rgengc.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/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 @@ -2310,23 +8182,325 @@ 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/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/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/gc.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/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/rgengc.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/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.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/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/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/gc.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/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/rgengc.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/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 @@ -2337,18 +8511,190 @@ main.$(OBJEXT): $(hdrdir)/ruby.h main.$(OBJEXT): $(hdrdir)/ruby/ruby.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/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/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/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/gc.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/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/rgengc.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/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)}node.h main.$(OBJEXT): {$(VPATH)}st.h main.$(OBJEXT): {$(VPATH)}subst.h main.$(OBJEXT): {$(VPATH)}vm_debug.h -marshal.$(OBJEXT): $(hdrdir)/ruby.h marshal.$(OBJEXT): $(hdrdir)/ruby/ruby.h +marshal.$(OBJEXT): $(top_srcdir)/internal/array.h +marshal.$(OBJEXT): $(top_srcdir)/internal/bignum.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/gc.h +marshal.$(OBJEXT): $(top_srcdir)/internal/hash.h +marshal.$(OBJEXT): $(top_srcdir)/internal/object.h +marshal.$(OBJEXT): $(top_srcdir)/internal/serial.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/vm.h +marshal.$(OBJEXT): $(top_srcdir)/internal/warnings.h marshal.$(OBJEXT): {$(VPATH)}assert.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)}defines.h marshal.$(OBJEXT): {$(VPATH)}encindex.h @@ -2356,82 +8702,910 @@ marshal.$(OBJEXT): {$(VPATH)}encoding.h marshal.$(OBJEXT): {$(VPATH)}id_table.h marshal.$(OBJEXT): {$(VPATH)}intern.h marshal.$(OBJEXT): {$(VPATH)}internal.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/noreturn.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/gc.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/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/rgengc.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/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)}missing.h marshal.$(OBJEXT): {$(VPATH)}onigmo.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.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/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)}defines.h +math.$(OBJEXT): {$(VPATH)}id_table.h math.$(OBJEXT): {$(VPATH)}intern.h math.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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)}st.h math.$(OBJEXT): {$(VPATH)}subst.h +memory_view.$(OBJEXT): $(hdrdir)/ruby/ruby.h +memory_view.$(OBJEXT): $(top_srcdir)/internal/hash.h +memory_view.$(OBJEXT): $(top_srcdir)/internal/variable.h +memory_view.$(OBJEXT): {$(VPATH)}assert.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/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)}id_table.h +memory_view.$(OBJEXT): {$(VPATH)}intern.h +memory_view.$(OBJEXT): {$(VPATH)}internal.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/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/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/gc.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/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/rgengc.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/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)}missing.h +memory_view.$(OBJEXT): {$(VPATH)}st.h +memory_view.$(OBJEXT): {$(VPATH)}subst.h +memory_view.$(OBJEXT): {$(VPATH)}util.h +memory_view.$(OBJEXT): {$(VPATH)}vm_debug.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.h miniinit.$(OBJEXT): $(hdrdir)/ruby/ruby.h +miniinit.$(OBJEXT): $(top_srcdir)/internal/array.h +miniinit.$(OBJEXT): $(top_srcdir)/internal/compilers.h +miniinit.$(OBJEXT): $(top_srcdir)/internal/gc.h +miniinit.$(OBJEXT): $(top_srcdir)/internal/imemo.h +miniinit.$(OBJEXT): $(top_srcdir)/internal/serial.h +miniinit.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +miniinit.$(OBJEXT): $(top_srcdir)/internal/vm.h +miniinit.$(OBJEXT): $(top_srcdir)/internal/warnings.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)}darray.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)}intern.h miniinit.$(OBJEXT): {$(VPATH)}internal.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/noreturn.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/gc.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/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/rgengc.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/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)}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)}prelude.rb +miniinit.$(OBJEXT): {$(VPATH)}ractor.rb miniinit.$(OBJEXT): {$(VPATH)}ruby_assert.h miniinit.$(OBJEXT): {$(VPATH)}ruby_atomic.h miniinit.$(OBJEXT): {$(VPATH)}st.h miniinit.$(OBJEXT): {$(VPATH)}subst.h miniinit.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h miniinit.$(OBJEXT): {$(VPATH)}thread_native.h +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 mjit.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h mjit.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h mjit.$(OBJEXT): $(CCAN_DIR)/list/list.h mjit.$(OBJEXT): $(CCAN_DIR)/str/str.h mjit.$(OBJEXT): $(hdrdir)/ruby.h mjit.$(OBJEXT): $(hdrdir)/ruby/ruby.h +mjit.$(OBJEXT): $(hdrdir)/ruby/version.h +mjit.$(OBJEXT): $(top_srcdir)/internal/array.h +mjit.$(OBJEXT): $(top_srcdir)/internal/class.h +mjit.$(OBJEXT): $(top_srcdir)/internal/compile.h +mjit.$(OBJEXT): $(top_srcdir)/internal/compilers.h +mjit.$(OBJEXT): $(top_srcdir)/internal/cont.h +mjit.$(OBJEXT): $(top_srcdir)/internal/file.h +mjit.$(OBJEXT): $(top_srcdir)/internal/gc.h +mjit.$(OBJEXT): $(top_srcdir)/internal/hash.h +mjit.$(OBJEXT): $(top_srcdir)/internal/imemo.h +mjit.$(OBJEXT): $(top_srcdir)/internal/serial.h +mjit.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +mjit.$(OBJEXT): $(top_srcdir)/internal/vm.h +mjit.$(OBJEXT): $(top_srcdir)/internal/warnings.h mjit.$(OBJEXT): {$(VPATH)}assert.h +mjit.$(OBJEXT): {$(VPATH)}atomic.h +mjit.$(OBJEXT): {$(VPATH)}backward/2/assume.h +mjit.$(OBJEXT): {$(VPATH)}backward/2/attributes.h +mjit.$(OBJEXT): {$(VPATH)}backward/2/bool.h +mjit.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h +mjit.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h +mjit.$(OBJEXT): {$(VPATH)}backward/2/limits.h +mjit.$(OBJEXT): {$(VPATH)}backward/2/long_long.h +mjit.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h +mjit.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h +mjit.$(OBJEXT): {$(VPATH)}builtin.h mjit.$(OBJEXT): {$(VPATH)}config.h mjit.$(OBJEXT): {$(VPATH)}constant.h +mjit.$(OBJEXT): {$(VPATH)}darray.h mjit.$(OBJEXT): {$(VPATH)}debug.h mjit.$(OBJEXT): {$(VPATH)}debug_counter.h mjit.$(OBJEXT): {$(VPATH)}defines.h mjit.$(OBJEXT): {$(VPATH)}dln.h +mjit.$(OBJEXT): {$(VPATH)}encoding.h mjit.$(OBJEXT): {$(VPATH)}gc.h mjit.$(OBJEXT): {$(VPATH)}id.h mjit.$(OBJEXT): {$(VPATH)}id_table.h +mjit.$(OBJEXT): {$(VPATH)}insns.def +mjit.$(OBJEXT): {$(VPATH)}insns.inc +mjit.$(OBJEXT): {$(VPATH)}insns_info.inc mjit.$(OBJEXT): {$(VPATH)}intern.h mjit.$(OBJEXT): {$(VPATH)}internal.h +mjit.$(OBJEXT): {$(VPATH)}internal/anyargs.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h +mjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h +mjit.$(OBJEXT): {$(VPATH)}internal/assume.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/cold.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/const.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/error.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/format.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/pure.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/warning.h +mjit.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h +mjit.$(OBJEXT): {$(VPATH)}internal/cast.h +mjit.$(OBJEXT): {$(VPATH)}internal/compiler_is.h +mjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h +mjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h +mjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h +mjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h +mjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h +mjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h +mjit.$(OBJEXT): {$(VPATH)}internal/compiler_since.h +mjit.$(OBJEXT): {$(VPATH)}internal/config.h +mjit.$(OBJEXT): {$(VPATH)}internal/constant_p.h +mjit.$(OBJEXT): {$(VPATH)}internal/core.h +mjit.$(OBJEXT): {$(VPATH)}internal/core/rarray.h +mjit.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h +mjit.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h +mjit.$(OBJEXT): {$(VPATH)}internal/core/rclass.h +mjit.$(OBJEXT): {$(VPATH)}internal/core/rdata.h +mjit.$(OBJEXT): {$(VPATH)}internal/core/rfile.h +mjit.$(OBJEXT): {$(VPATH)}internal/core/rhash.h +mjit.$(OBJEXT): {$(VPATH)}internal/core/robject.h +mjit.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h +mjit.$(OBJEXT): {$(VPATH)}internal/core/rstring.h +mjit.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h +mjit.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h +mjit.$(OBJEXT): {$(VPATH)}internal/ctype.h +mjit.$(OBJEXT): {$(VPATH)}internal/dllexport.h +mjit.$(OBJEXT): {$(VPATH)}internal/dosish.h +mjit.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h +mjit.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h +mjit.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h +mjit.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h +mjit.$(OBJEXT): {$(VPATH)}internal/encoding/re.h +mjit.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h +mjit.$(OBJEXT): {$(VPATH)}internal/encoding/string.h +mjit.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h +mjit.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h +mjit.$(OBJEXT): {$(VPATH)}internal/error.h +mjit.$(OBJEXT): {$(VPATH)}internal/eval.h +mjit.$(OBJEXT): {$(VPATH)}internal/event.h +mjit.$(OBJEXT): {$(VPATH)}internal/fl_type.h +mjit.$(OBJEXT): {$(VPATH)}internal/gc.h +mjit.$(OBJEXT): {$(VPATH)}internal/glob.h +mjit.$(OBJEXT): {$(VPATH)}internal/globals.h +mjit.$(OBJEXT): {$(VPATH)}internal/has/attribute.h +mjit.$(OBJEXT): {$(VPATH)}internal/has/builtin.h +mjit.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h +mjit.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h +mjit.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h +mjit.$(OBJEXT): {$(VPATH)}internal/has/extension.h +mjit.$(OBJEXT): {$(VPATH)}internal/has/feature.h +mjit.$(OBJEXT): {$(VPATH)}internal/has/warning.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/array.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/class.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/compar.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/complex.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/cont.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/dir.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/enum.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/error.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/eval.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/file.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/gc.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/hash.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/io.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/load.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/object.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/parse.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/proc.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/process.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/random.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/range.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/rational.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/re.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/select.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/signal.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/string.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/struct.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/thread.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/time.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/variable.h +mjit.$(OBJEXT): {$(VPATH)}internal/intern/vm.h +mjit.$(OBJEXT): {$(VPATH)}internal/interpreter.h +mjit.$(OBJEXT): {$(VPATH)}internal/iterator.h +mjit.$(OBJEXT): {$(VPATH)}internal/memory.h +mjit.$(OBJEXT): {$(VPATH)}internal/method.h +mjit.$(OBJEXT): {$(VPATH)}internal/module.h +mjit.$(OBJEXT): {$(VPATH)}internal/newobj.h +mjit.$(OBJEXT): {$(VPATH)}internal/rgengc.h +mjit.$(OBJEXT): {$(VPATH)}internal/scan_args.h +mjit.$(OBJEXT): {$(VPATH)}internal/special_consts.h +mjit.$(OBJEXT): {$(VPATH)}internal/static_assert.h +mjit.$(OBJEXT): {$(VPATH)}internal/stdalign.h +mjit.$(OBJEXT): {$(VPATH)}internal/stdbool.h +mjit.$(OBJEXT): {$(VPATH)}internal/symbol.h +mjit.$(OBJEXT): {$(VPATH)}internal/value.h +mjit.$(OBJEXT): {$(VPATH)}internal/value_type.h +mjit.$(OBJEXT): {$(VPATH)}internal/variable.h +mjit.$(OBJEXT): {$(VPATH)}internal/warning_push.h +mjit.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +mjit.$(OBJEXT): {$(VPATH)}iseq.h mjit.$(OBJEXT): {$(VPATH)}method.h mjit.$(OBJEXT): {$(VPATH)}missing.h mjit.$(OBJEXT): {$(VPATH)}mjit.c @@ -2439,6 +9613,8 @@ mjit.$(OBJEXT): {$(VPATH)}mjit.h mjit.$(OBJEXT): {$(VPATH)}mjit_config.h mjit.$(OBJEXT): {$(VPATH)}mjit_worker.c mjit.$(OBJEXT): {$(VPATH)}node.h +mjit.$(OBJEXT): {$(VPATH)}onigmo.h +mjit.$(OBJEXT): {$(VPATH)}oniguruma.h mjit.$(OBJEXT): {$(VPATH)}ruby_assert.h mjit.$(OBJEXT): {$(VPATH)}ruby_atomic.h mjit.$(OBJEXT): {$(VPATH)}st.h @@ -2447,25 +9623,194 @@ mjit.$(OBJEXT): {$(VPATH)}thread.h mjit.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h mjit.$(OBJEXT): {$(VPATH)}thread_native.h mjit.$(OBJEXT): {$(VPATH)}util.h +mjit.$(OBJEXT): {$(VPATH)}vm_callinfo.h mjit.$(OBJEXT): {$(VPATH)}vm_core.h +mjit.$(OBJEXT): {$(VPATH)}vm_debug.h mjit.$(OBJEXT): {$(VPATH)}vm_opts.h +mjit.$(OBJEXT): {$(VPATH)}vm_sync.h +mjit.$(OBJEXT): {$(VPATH)}yjit.h mjit_compile.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h mjit_compile.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h mjit_compile.$(OBJEXT): $(CCAN_DIR)/list/list.h mjit_compile.$(OBJEXT): $(CCAN_DIR)/str/str.h mjit_compile.$(OBJEXT): $(hdrdir)/ruby.h mjit_compile.$(OBJEXT): $(hdrdir)/ruby/ruby.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/array.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/class.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/compile.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/compilers.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/gc.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/hash.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/imemo.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/object.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/serial.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/variable.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/vm.h +mjit_compile.$(OBJEXT): $(top_srcdir)/internal/warnings.h mjit_compile.$(OBJEXT): {$(VPATH)}assert.h +mjit_compile.$(OBJEXT): {$(VPATH)}atomic.h +mjit_compile.$(OBJEXT): {$(VPATH)}backward/2/assume.h +mjit_compile.$(OBJEXT): {$(VPATH)}backward/2/attributes.h +mjit_compile.$(OBJEXT): {$(VPATH)}backward/2/bool.h +mjit_compile.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h +mjit_compile.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h +mjit_compile.$(OBJEXT): {$(VPATH)}backward/2/limits.h +mjit_compile.$(OBJEXT): {$(VPATH)}backward/2/long_long.h +mjit_compile.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h +mjit_compile.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h mjit_compile.$(OBJEXT): {$(VPATH)}builtin.h mjit_compile.$(OBJEXT): {$(VPATH)}config.h +mjit_compile.$(OBJEXT): {$(VPATH)}constant.h +mjit_compile.$(OBJEXT): {$(VPATH)}darray.h mjit_compile.$(OBJEXT): {$(VPATH)}debug_counter.h mjit_compile.$(OBJEXT): {$(VPATH)}defines.h mjit_compile.$(OBJEXT): {$(VPATH)}id.h +mjit_compile.$(OBJEXT): {$(VPATH)}id_table.h mjit_compile.$(OBJEXT): {$(VPATH)}insns.def mjit_compile.$(OBJEXT): {$(VPATH)}insns.inc mjit_compile.$(OBJEXT): {$(VPATH)}insns_info.inc mjit_compile.$(OBJEXT): {$(VPATH)}intern.h mjit_compile.$(OBJEXT): {$(VPATH)}internal.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/anyargs.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/assume.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/cold.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/const.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/error.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/format.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/pure.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/warning.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/cast.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_since.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/config.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/constant_p.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rarray.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rclass.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rdata.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rfile.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rhash.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core/robject.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rstring.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/ctype.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/dllexport.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/dosish.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/error.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/eval.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/event.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/fl_type.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/gc.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/glob.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/globals.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/has/attribute.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/has/builtin.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/has/extension.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/has/feature.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/has/warning.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/array.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/class.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/compar.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/complex.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/cont.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/dir.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/enum.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/error.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/eval.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/file.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/gc.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/hash.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/io.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/load.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/object.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/parse.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/proc.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/process.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/random.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/range.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/rational.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/re.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/select.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/signal.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/string.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/struct.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/thread.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/time.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/variable.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/vm.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/interpreter.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/iterator.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/memory.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/method.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/module.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/newobj.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/rgengc.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/scan_args.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/special_consts.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/static_assert.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/stdalign.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/stdbool.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/symbol.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/value.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/value_type.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/variable.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/warning_push.h +mjit_compile.$(OBJEXT): {$(VPATH)}internal/xmalloc.h mjit_compile.$(OBJEXT): {$(VPATH)}iseq.h mjit_compile.$(OBJEXT): {$(VPATH)}method.h mjit_compile.$(OBJEXT): {$(VPATH)}missing.h @@ -2479,22 +9824,185 @@ mjit_compile.$(OBJEXT): {$(VPATH)}st.h mjit_compile.$(OBJEXT): {$(VPATH)}subst.h mjit_compile.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h mjit_compile.$(OBJEXT): {$(VPATH)}thread_native.h +mjit_compile.$(OBJEXT): {$(VPATH)}vm_callinfo.h mjit_compile.$(OBJEXT): {$(VPATH)}vm_core.h mjit_compile.$(OBJEXT): {$(VPATH)}vm_exec.h mjit_compile.$(OBJEXT): {$(VPATH)}vm_insnhelper.h mjit_compile.$(OBJEXT): {$(VPATH)}vm_opts.h +mjit_compile.$(OBJEXT): {$(VPATH)}yjit.h 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.h node.$(OBJEXT): $(hdrdir)/ruby/ruby.h +node.$(OBJEXT): $(top_srcdir)/internal/array.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/serial.h +node.$(OBJEXT): $(top_srcdir)/internal/static_assert.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)}darray.h node.$(OBJEXT): {$(VPATH)}defines.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/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/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/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/gc.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/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/rgengc.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/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 @@ -2507,33 +10015,396 @@ 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 -numeric.$(OBJEXT): $(hdrdir)/ruby.h numeric.$(OBJEXT): $(hdrdir)/ruby/ruby.h +numeric.$(OBJEXT): $(top_srcdir)/internal/array.h +numeric.$(OBJEXT): $(top_srcdir)/internal/bignum.h +numeric.$(OBJEXT): $(top_srcdir)/internal/bits.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/numeric.h +numeric.$(OBJEXT): $(top_srcdir)/internal/object.h +numeric.$(OBJEXT): $(top_srcdir)/internal/rational.h +numeric.$(OBJEXT): $(top_srcdir)/internal/serial.h +numeric.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +numeric.$(OBJEXT): $(top_srcdir)/internal/string.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)}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)}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/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/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/gc.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/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/rgengc.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/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)}missing.h numeric.$(OBJEXT): {$(VPATH)}numeric.c +numeric.$(OBJEXT): {$(VPATH)}numeric.rb +numeric.$(OBJEXT): {$(VPATH)}numeric.rbinc numeric.$(OBJEXT): {$(VPATH)}onigmo.h numeric.$(OBJEXT): {$(VPATH)}oniguruma.h +numeric.$(OBJEXT): {$(VPATH)}ruby_assert.h numeric.$(OBJEXT): {$(VPATH)}st.h numeric.$(OBJEXT): {$(VPATH)}subst.h numeric.$(OBJEXT): {$(VPATH)}util.h -object.$(OBJEXT): $(hdrdir)/ruby.h object.$(OBJEXT): $(hdrdir)/ruby/ruby.h +object.$(OBJEXT): $(top_srcdir)/internal/array.h +object.$(OBJEXT): $(top_srcdir)/internal/bignum.h +object.$(OBJEXT): $(top_srcdir)/internal/bits.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/inits.h +object.$(OBJEXT): $(top_srcdir)/internal/numeric.h +object.$(OBJEXT): $(top_srcdir)/internal/object.h +object.$(OBJEXT): $(top_srcdir)/internal/serial.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)}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)}defines.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/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/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/gc.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/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/rgengc.h +object.$(OBJEXT): {$(VPATH)}internal/scan_args.h +object.$(OBJEXT): {$(VPATH)}internal/special_consts.h +object.$(OBJEXT): {$(VPATH)}internal/static_assert.h +object.$(OBJEXT): {$(VPATH)}internal/stdalign.h +object.$(OBJEXT): {$(VPATH)}internal/stdbool.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.rb +object.$(OBJEXT): {$(VPATH)}kernel.rbinc object.$(OBJEXT): {$(VPATH)}missing.h +object.$(OBJEXT): {$(VPATH)}nilclass.rbinc object.$(OBJEXT): {$(VPATH)}object.c object.$(OBJEXT): {$(VPATH)}onigmo.h object.$(OBJEXT): {$(VPATH)}oniguruma.h @@ -2542,15 +10413,181 @@ object.$(OBJEXT): {$(VPATH)}probes.h object.$(OBJEXT): {$(VPATH)}st.h object.$(OBJEXT): {$(VPATH)}subst.h object.$(OBJEXT): {$(VPATH)}util.h -pack.$(OBJEXT): $(hdrdir)/ruby.h pack.$(OBJEXT): $(hdrdir)/ruby/ruby.h +pack.$(OBJEXT): $(top_srcdir)/internal/array.h +pack.$(OBJEXT): $(top_srcdir)/internal/bits.h +pack.$(OBJEXT): $(top_srcdir)/internal/compilers.h +pack.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +pack.$(OBJEXT): $(top_srcdir)/internal/string.h +pack.$(OBJEXT): $(top_srcdir)/internal/symbol.h +pack.$(OBJEXT): $(top_srcdir)/internal/variable.h +pack.$(OBJEXT): $(top_srcdir)/internal/warnings.h pack.$(OBJEXT): {$(VPATH)}assert.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)}encoding.h +pack.$(OBJEXT): {$(VPATH)}id_table.h pack.$(OBJEXT): {$(VPATH)}intern.h pack.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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)}missing.h pack.$(OBJEXT): {$(VPATH)}onigmo.h pack.$(OBJEXT): {$(VPATH)}oniguruma.h @@ -2558,16 +10595,200 @@ pack.$(OBJEXT): {$(VPATH)}pack.c pack.$(OBJEXT): {$(VPATH)}pack.rbinc pack.$(OBJEXT): {$(VPATH)}st.h pack.$(OBJEXT): {$(VPATH)}subst.h -parse.$(OBJEXT): $(hdrdir)/ruby.h +pack.$(OBJEXT): {$(VPATH)}util.h parse.$(OBJEXT): $(hdrdir)/ruby/ruby.h +parse.$(OBJEXT): $(top_srcdir)/internal/array.h +parse.$(OBJEXT): $(top_srcdir)/internal/bignum.h +parse.$(OBJEXT): $(top_srcdir)/internal/bits.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/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/serial.h +parse.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +parse.$(OBJEXT): $(top_srcdir)/internal/string.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)}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)}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/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/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/gc.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/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/rgengc.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/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)}missing.h parse.$(OBJEXT): {$(VPATH)}node.h @@ -2578,8 +10799,10 @@ parse.$(OBJEXT): {$(VPATH)}parse.h parse.$(OBJEXT): {$(VPATH)}parse.y 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)}st.h parse.$(OBJEXT): {$(VPATH)}subst.h parse.$(OBJEXT): {$(VPATH)}symbol.h @@ -2588,20 +10811,197 @@ 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.h proc.$(OBJEXT): $(hdrdir)/ruby/ruby.h +proc.$(OBJEXT): $(top_srcdir)/internal/array.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/imemo.h +proc.$(OBJEXT): $(top_srcdir)/internal/object.h +proc.$(OBJEXT): $(top_srcdir)/internal/proc.h +proc.$(OBJEXT): $(top_srcdir)/internal/serial.h +proc.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +proc.$(OBJEXT): $(top_srcdir)/internal/string.h +proc.$(OBJEXT): $(top_srcdir)/internal/symbol.h +proc.$(OBJEXT): $(top_srcdir)/internal/vm.h +proc.$(OBJEXT): $(top_srcdir)/internal/warnings.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)}darray.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)}id_table.h proc.$(OBJEXT): {$(VPATH)}intern.h proc.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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)}proc.c proc.$(OBJEXT): {$(VPATH)}ruby_assert.h proc.$(OBJEXT): {$(VPATH)}ruby_atomic.h @@ -2611,28 +11011,216 @@ proc.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h proc.$(OBJEXT): {$(VPATH)}thread_native.h proc.$(OBJEXT): {$(VPATH)}vm_core.h proc.$(OBJEXT): {$(VPATH)}vm_opts.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): $(top_srcdir)/internal/array.h +process.$(OBJEXT): $(top_srcdir)/internal/bignum.h +process.$(OBJEXT): $(top_srcdir)/internal/bits.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/numeric.h +process.$(OBJEXT): $(top_srcdir)/internal/object.h +process.$(OBJEXT): $(top_srcdir)/internal/process.h +process.$(OBJEXT): $(top_srcdir)/internal/serial.h +process.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +process.$(OBJEXT): $(top_srcdir)/internal/string.h +process.$(OBJEXT): $(top_srcdir)/internal/thread.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)}darray.h +process.$(OBJEXT): {$(VPATH)}debug_counter.h process.$(OBJEXT): {$(VPATH)}defines.h process.$(OBJEXT): {$(VPATH)}dln.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/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/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/gc.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/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/rgengc.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/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)}mjit.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)}ruby_assert.h process.$(OBJEXT): {$(VPATH)}ruby_atomic.h process.$(OBJEXT): {$(VPATH)}st.h @@ -2643,55 +11231,948 @@ process.$(OBJEXT): {$(VPATH)}thread_native.h process.$(OBJEXT): {$(VPATH)}util.h process.$(OBJEXT): {$(VPATH)}vm_core.h process.$(OBJEXT): {$(VPATH)}vm_opts.h -random.$(OBJEXT): $(hdrdir)/ruby.h +process.$(OBJEXT): {$(VPATH)}yjit.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/ruby.h +ractor.$(OBJEXT): $(top_srcdir)/internal/array.h +ractor.$(OBJEXT): $(top_srcdir)/internal/bignum.h +ractor.$(OBJEXT): $(top_srcdir)/internal/bits.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/rational.h +ractor.$(OBJEXT): $(top_srcdir)/internal/serial.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/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)}darray.h +ractor.$(OBJEXT): {$(VPATH)}debug_counter.h +ractor.$(OBJEXT): {$(VPATH)}defines.h +ractor.$(OBJEXT): {$(VPATH)}encoding.h +ractor.$(OBJEXT): {$(VPATH)}gc.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/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/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/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/gc.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/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/rgengc.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/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.rb +ractor.$(OBJEXT): {$(VPATH)}ractor.rbinc +ractor.$(OBJEXT): {$(VPATH)}ractor_core.h +ractor.$(OBJEXT): {$(VPATH)}ruby_assert.h +ractor.$(OBJEXT): {$(VPATH)}ruby_atomic.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)}transient_heap.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 random.$(OBJEXT): $(hdrdir)/ruby/ruby.h +random.$(OBJEXT): $(top_srcdir)/internal/array.h +random.$(OBJEXT): $(top_srcdir)/internal/bignum.h +random.$(OBJEXT): $(top_srcdir)/internal/bits.h +random.$(OBJEXT): $(top_srcdir)/internal/compilers.h +random.$(OBJEXT): $(top_srcdir)/internal/fixnum.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/static_assert.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)}id_table.h random.$(OBJEXT): {$(VPATH)}intern.h random.$(OBJEXT): {$(VPATH)}internal.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/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/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/gc.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/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/rgengc.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/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)}missing.h random.$(OBJEXT): {$(VPATH)}mt19937.c +random.$(OBJEXT): {$(VPATH)}ractor.h random.$(OBJEXT): {$(VPATH)}random.c +random.$(OBJEXT): {$(VPATH)}random.h 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.h range.$(OBJEXT): $(hdrdir)/ruby/ruby.h +range.$(OBJEXT): $(top_srcdir)/internal/array.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/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)}encoding.h range.$(OBJEXT): {$(VPATH)}id.h range.$(OBJEXT): {$(VPATH)}intern.h range.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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)}st.h range.$(OBJEXT): {$(VPATH)}subst.h -rational.$(OBJEXT): $(hdrdir)/ruby.h rational.$(OBJEXT): $(hdrdir)/ruby/ruby.h +rational.$(OBJEXT): $(top_srcdir)/internal/array.h +rational.$(OBJEXT): $(top_srcdir)/internal/bignum.h +rational.$(OBJEXT): $(top_srcdir)/internal/bits.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/numeric.h +rational.$(OBJEXT): $(top_srcdir)/internal/object.h +rational.$(OBJEXT): $(top_srcdir)/internal/rational.h +rational.$(OBJEXT): $(top_srcdir)/internal/serial.h +rational.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +rational.$(OBJEXT): $(top_srcdir)/internal/vm.h +rational.$(OBJEXT): $(top_srcdir)/internal/warnings.h rational.$(OBJEXT): {$(VPATH)}assert.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)}defines.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/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/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/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/gc.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/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/rgengc.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/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)}missing.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.h re.$(OBJEXT): $(hdrdir)/ruby/ruby.h +re.$(OBJEXT): $(top_srcdir)/internal/array.h +re.$(OBJEXT): $(top_srcdir)/internal/compilers.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/re.h +re.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +re.$(OBJEXT): $(top_srcdir)/internal/string.h +re.$(OBJEXT): $(top_srcdir)/internal/variable.h +re.$(OBJEXT): $(top_srcdir)/internal/warnings.h re.$(OBJEXT): {$(VPATH)}assert.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)}id_table.h re.$(OBJEXT): {$(VPATH)}intern.h re.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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)}missing.h re.$(OBJEXT): {$(VPATH)}onigmo.h re.$(OBJEXT): {$(VPATH)}oniguruma.h @@ -2705,9 +12186,156 @@ re.$(OBJEXT): {$(VPATH)}subst.h re.$(OBJEXT): {$(VPATH)}util.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/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/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/gc.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/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/rgengc.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/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 @@ -2718,9 +12346,156 @@ regcomp.$(OBJEXT): {$(VPATH)}st.h regcomp.$(OBJEXT): {$(VPATH)}subst.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/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/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/gc.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/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/rgengc.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/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 @@ -2730,9 +12505,156 @@ regenc.$(OBJEXT): {$(VPATH)}st.h regenc.$(OBJEXT): {$(VPATH)}subst.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/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/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/gc.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/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/rgengc.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/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 @@ -2742,9 +12664,156 @@ regerror.$(OBJEXT): {$(VPATH)}st.h regerror.$(OBJEXT): {$(VPATH)}subst.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/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/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/gc.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/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/rgengc.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/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 @@ -2754,9 +12823,156 @@ regexec.$(OBJEXT): {$(VPATH)}st.h regexec.$(OBJEXT): {$(VPATH)}subst.h regparse.$(OBJEXT): $(hdrdir)/ruby/ruby.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/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/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/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/gc.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/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/rgengc.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/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 @@ -2767,9 +12983,156 @@ regparse.$(OBJEXT): {$(VPATH)}st.h regparse.$(OBJEXT): {$(VPATH)}subst.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/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/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/gc.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/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/rgengc.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/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 @@ -2778,6 +13141,15 @@ 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 @@ -2787,16 +13159,199 @@ 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/class.h +ruby.$(OBJEXT): $(top_srcdir)/internal/compilers.h +ruby.$(OBJEXT): $(top_srcdir)/internal/error.h +ruby.$(OBJEXT): $(top_srcdir)/internal/file.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/object.h +ruby.$(OBJEXT): $(top_srcdir)/internal/parse.h +ruby.$(OBJEXT): $(top_srcdir)/internal/process.h +ruby.$(OBJEXT): $(top_srcdir)/internal/serial.h +ruby.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +ruby.$(OBJEXT): $(top_srcdir)/internal/string.h +ruby.$(OBJEXT): $(top_srcdir)/internal/variable.h +ruby.$(OBJEXT): $(top_srcdir)/internal/vm.h +ruby.$(OBJEXT): $(top_srcdir)/internal/warnings.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)}darray.h ruby.$(OBJEXT): {$(VPATH)}debug_counter.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)}id_table.h ruby.$(OBJEXT): {$(VPATH)}intern.h ruby.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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)}method.h ruby.$(OBJEXT): {$(VPATH)}missing.h ruby.$(OBJEXT): {$(VPATH)}mjit.h @@ -2814,36 +13369,357 @@ ruby.$(OBJEXT): {$(VPATH)}thread_native.h ruby.$(OBJEXT): {$(VPATH)}util.h ruby.$(OBJEXT): {$(VPATH)}vm_core.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.h -safe.$(OBJEXT): $(hdrdir)/ruby/ruby.h -safe.$(OBJEXT): {$(VPATH)}assert.h -safe.$(OBJEXT): {$(VPATH)}config.h -safe.$(OBJEXT): {$(VPATH)}defines.h -safe.$(OBJEXT): {$(VPATH)}id.h -safe.$(OBJEXT): {$(VPATH)}intern.h -safe.$(OBJEXT): {$(VPATH)}internal.h -safe.$(OBJEXT): {$(VPATH)}method.h -safe.$(OBJEXT): {$(VPATH)}missing.h -safe.$(OBJEXT): {$(VPATH)}node.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_opts.h +ruby.$(OBJEXT): {$(VPATH)}yjit.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/compilers.h +scheduler.$(OBJEXT): $(top_srcdir)/internal/gc.h +scheduler.$(OBJEXT): $(top_srcdir)/internal/imemo.h +scheduler.$(OBJEXT): $(top_srcdir)/internal/serial.h +scheduler.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +scheduler.$(OBJEXT): $(top_srcdir)/internal/thread.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)}darray.h +scheduler.$(OBJEXT): {$(VPATH)}defines.h +scheduler.$(OBJEXT): {$(VPATH)}encoding.h +scheduler.$(OBJEXT): {$(VPATH)}fiber/scheduler.h +scheduler.$(OBJEXT): {$(VPATH)}id.h +scheduler.$(OBJEXT): {$(VPATH)}intern.h +scheduler.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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)}scheduler.c +scheduler.$(OBJEXT): {$(VPATH)}st.h +scheduler.$(OBJEXT): {$(VPATH)}subst.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 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/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/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/gc.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/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/rgengc.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/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 @@ -2853,19 +13729,196 @@ 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.h signal.$(OBJEXT): $(hdrdir)/ruby/ruby.h +signal.$(OBJEXT): $(top_srcdir)/internal/array.h +signal.$(OBJEXT): $(top_srcdir)/internal/compilers.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/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/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)}darray.h signal.$(OBJEXT): {$(VPATH)}debug_counter.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)}id_table.h signal.$(OBJEXT): {$(VPATH)}intern.h signal.$(OBJEXT): {$(VPATH)}internal.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/noreturn.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/gc.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/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/rgengc.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/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)}signal.c @@ -2874,16 +13927,192 @@ 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.h sprintf.$(OBJEXT): $(hdrdir)/ruby/ruby.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/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)}defines.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/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/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/gc.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/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/rgengc.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/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 @@ -2892,26 +14121,341 @@ sprintf.$(OBJEXT): {$(VPATH)}regex.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.h 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/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/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/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/gc.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/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/rgengc.h +st.$(OBJEXT): {$(VPATH)}internal/scan_args.h +st.$(OBJEXT): {$(VPATH)}internal/special_consts.h +st.$(OBJEXT): {$(VPATH)}internal/static_assert.h +st.$(OBJEXT): {$(VPATH)}internal/stdalign.h +st.$(OBJEXT): {$(VPATH)}internal/stdbool.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)}st.c st.$(OBJEXT): {$(VPATH)}st.h st.$(OBJEXT): {$(VPATH)}subst.h -strftime.$(OBJEXT): $(hdrdir)/ruby.h strftime.$(OBJEXT): $(hdrdir)/ruby/ruby.h +strftime.$(OBJEXT): $(top_srcdir)/internal/compilers.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)}encoding.h strftime.$(OBJEXT): {$(VPATH)}intern.h strftime.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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 @@ -2919,19 +14463,199 @@ strftime.$(OBJEXT): {$(VPATH)}st.h strftime.$(OBJEXT): {$(VPATH)}strftime.c strftime.$(OBJEXT): {$(VPATH)}subst.h strftime.$(OBJEXT): {$(VPATH)}timev.h -string.$(OBJEXT): $(hdrdir)/ruby.h +strftime.$(OBJEXT): {$(VPATH)}util.h string.$(OBJEXT): $(hdrdir)/ruby/ruby.h +string.$(OBJEXT): $(top_srcdir)/internal/array.h +string.$(OBJEXT): $(top_srcdir)/internal/bignum.h +string.$(OBJEXT): $(top_srcdir)/internal/bits.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/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/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/static_assert.h +string.$(OBJEXT): $(top_srcdir)/internal/string.h +string.$(OBJEXT): $(top_srcdir)/internal/transcode.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)}crypt.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)}gc.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/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/noreturn.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/gc.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/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/rgengc.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/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)}missing.h string.$(OBJEXT): {$(VPATH)}onigmo.h string.$(OBJEXT): {$(VPATH)}oniguruma.h @@ -2943,28 +14667,234 @@ string.$(OBJEXT): {$(VPATH)}ruby_assert.h string.$(OBJEXT): {$(VPATH)}st.h string.$(OBJEXT): {$(VPATH)}string.c string.$(OBJEXT): {$(VPATH)}subst.h +string.$(OBJEXT): {$(VPATH)}thread_native.h string.$(OBJEXT): {$(VPATH)}util.h +string.$(OBJEXT): {$(VPATH)}vm_debug.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.h struct.$(OBJEXT): $(hdrdir)/ruby/ruby.h +struct.$(OBJEXT): $(top_srcdir)/internal/array.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/serial.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/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)}darray.h struct.$(OBJEXT): {$(VPATH)}defines.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/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/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/gc.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/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/rgengc.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/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)}st.h @@ -2975,10 +14905,31 @@ struct.$(OBJEXT): {$(VPATH)}thread_native.h struct.$(OBJEXT): {$(VPATH)}transient_heap.h struct.$(OBJEXT): {$(VPATH)}vm_core.h struct.$(OBJEXT): {$(VPATH)}vm_opts.h -symbol.$(OBJEXT): $(hdrdir)/ruby.h symbol.$(OBJEXT): $(hdrdir)/ruby/ruby.h +symbol.$(OBJEXT): $(top_srcdir)/internal/class.h +symbol.$(OBJEXT): $(top_srcdir)/internal/compilers.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/object.h +symbol.$(OBJEXT): $(top_srcdir)/internal/serial.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/vm.h +symbol.$(OBJEXT): $(top_srcdir)/internal/warnings.h symbol.$(OBJEXT): {$(VPATH)}assert.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)}config.h +symbol.$(OBJEXT): {$(VPATH)}debug_counter.h symbol.$(OBJEXT): {$(VPATH)}defines.h symbol.$(OBJEXT): {$(VPATH)}encoding.h symbol.$(OBJEXT): {$(VPATH)}gc.h @@ -2988,6 +14939,154 @@ 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/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/noreturn.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/gc.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/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/rgengc.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/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)}missing.h symbol.$(OBJEXT): {$(VPATH)}onigmo.h symbol.$(OBJEXT): {$(VPATH)}oniguruma.h @@ -2998,24 +15097,207 @@ symbol.$(OBJEXT): {$(VPATH)}st.h symbol.$(OBJEXT): {$(VPATH)}subst.h symbol.$(OBJEXT): {$(VPATH)}symbol.c symbol.$(OBJEXT): {$(VPATH)}symbol.h +symbol.$(OBJEXT): {$(VPATH)}vm_debug.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): $(top_srcdir)/internal/array.h +thread.$(OBJEXT): $(top_srcdir)/internal/bits.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/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/serial.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/thread.h +thread.$(OBJEXT): $(top_srcdir)/internal/time.h +thread.$(OBJEXT): $(top_srcdir)/internal/vm.h +thread.$(OBJEXT): $(top_srcdir)/internal/warnings.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)}config.h +thread.$(OBJEXT): {$(VPATH)}darray.h thread.$(OBJEXT): {$(VPATH)}debug.h thread.$(OBJEXT): {$(VPATH)}debug_counter.h thread.$(OBJEXT): {$(VPATH)}defines.h thread.$(OBJEXT): {$(VPATH)}encoding.h thread.$(OBJEXT): {$(VPATH)}eval_intern.h +thread.$(OBJEXT): {$(VPATH)}fiber/scheduler.h thread.$(OBJEXT): {$(VPATH)}gc.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/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/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/gc.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/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/rgengc.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/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 @@ -3024,6 +15306,8 @@ thread.$(OBJEXT): {$(VPATH)}mjit.h thread.$(OBJEXT): {$(VPATH)}node.h thread.$(OBJEXT): {$(VPATH)}onigmo.h thread.$(OBJEXT): {$(VPATH)}oniguruma.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)}st.h @@ -3036,32 +15320,380 @@ 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.h +thread.$(OBJEXT): {$(VPATH)}vm_sync.h +thread.$(OBJEXT): {$(VPATH)}yjit.h time.$(OBJEXT): $(hdrdir)/ruby/ruby.h +time.$(OBJEXT): $(top_srcdir)/internal/array.h +time.$(OBJEXT): $(top_srcdir)/internal/bignum.h +time.$(OBJEXT): $(top_srcdir)/internal/bits.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/numeric.h +time.$(OBJEXT): $(top_srcdir)/internal/rational.h +time.$(OBJEXT): $(top_srcdir)/internal/serial.h +time.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +time.$(OBJEXT): $(top_srcdir)/internal/string.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)}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)}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/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/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/gc.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/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/rgengc.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/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)}missing.h time.$(OBJEXT): {$(VPATH)}onigmo.h time.$(OBJEXT): {$(VPATH)}oniguruma.h +time.$(OBJEXT): {$(VPATH)}ruby_assert.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.h +time.$(OBJEXT): {$(VPATH)}timev.rbinc 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/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/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)}defines.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/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/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/gc.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/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/rgengc.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/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 @@ -3069,33 +15701,343 @@ transcode.$(OBJEXT): {$(VPATH)}st.h transcode.$(OBJEXT): {$(VPATH)}subst.h transcode.$(OBJEXT): {$(VPATH)}transcode.c transcode.$(OBJEXT): {$(VPATH)}transcode_data.h -transient_heap.$(OBJEXT): $(hdrdir)/ruby.h transient_heap.$(OBJEXT): $(hdrdir)/ruby/ruby.h +transient_heap.$(OBJEXT): $(top_srcdir)/internal/compilers.h +transient_heap.$(OBJEXT): $(top_srcdir)/internal/gc.h +transient_heap.$(OBJEXT): $(top_srcdir)/internal/hash.h +transient_heap.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h +transient_heap.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +transient_heap.$(OBJEXT): $(top_srcdir)/internal/struct.h +transient_heap.$(OBJEXT): $(top_srcdir)/internal/variable.h +transient_heap.$(OBJEXT): $(top_srcdir)/internal/warnings.h transient_heap.$(OBJEXT): {$(VPATH)}assert.h +transient_heap.$(OBJEXT): {$(VPATH)}backward/2/assume.h +transient_heap.$(OBJEXT): {$(VPATH)}backward/2/attributes.h +transient_heap.$(OBJEXT): {$(VPATH)}backward/2/bool.h +transient_heap.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h +transient_heap.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h +transient_heap.$(OBJEXT): {$(VPATH)}backward/2/limits.h +transient_heap.$(OBJEXT): {$(VPATH)}backward/2/long_long.h +transient_heap.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h +transient_heap.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h transient_heap.$(OBJEXT): {$(VPATH)}config.h +transient_heap.$(OBJEXT): {$(VPATH)}constant.h transient_heap.$(OBJEXT): {$(VPATH)}debug.h transient_heap.$(OBJEXT): {$(VPATH)}debug_counter.h transient_heap.$(OBJEXT): {$(VPATH)}defines.h transient_heap.$(OBJEXT): {$(VPATH)}gc.h +transient_heap.$(OBJEXT): {$(VPATH)}id_table.h transient_heap.$(OBJEXT): {$(VPATH)}intern.h transient_heap.$(OBJEXT): {$(VPATH)}internal.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/anyargs.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/assume.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/cold.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/const.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/error.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/format.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/pure.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/warning.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/cast.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/compiler_is.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/compiler_since.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/config.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/constant_p.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core/rarray.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core/rclass.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core/rdata.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core/rfile.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core/rhash.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core/robject.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core/rstring.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/ctype.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/dllexport.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/dosish.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/error.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/eval.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/event.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/fl_type.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/gc.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/glob.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/globals.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/has/attribute.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/has/builtin.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/has/extension.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/has/feature.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/has/warning.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/array.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/class.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/compar.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/complex.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/cont.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/dir.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/enum.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/error.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/eval.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/file.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/gc.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/hash.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/io.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/load.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/object.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/parse.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/proc.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/process.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/random.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/range.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/rational.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/re.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/select.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/signal.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/string.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/struct.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/thread.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/time.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/variable.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/intern/vm.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/interpreter.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/iterator.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/memory.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/method.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/module.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/newobj.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/rgengc.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/scan_args.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/special_consts.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/static_assert.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/stdalign.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/stdbool.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/symbol.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/value.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/value_type.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/variable.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/warning_push.h +transient_heap.$(OBJEXT): {$(VPATH)}internal/xmalloc.h transient_heap.$(OBJEXT): {$(VPATH)}missing.h -transient_heap.$(OBJEXT): {$(VPATH)}node.h transient_heap.$(OBJEXT): {$(VPATH)}ruby_assert.h transient_heap.$(OBJEXT): {$(VPATH)}st.h transient_heap.$(OBJEXT): {$(VPATH)}subst.h transient_heap.$(OBJEXT): {$(VPATH)}transient_heap.c transient_heap.$(OBJEXT): {$(VPATH)}transient_heap.h transient_heap.$(OBJEXT): {$(VPATH)}vm_debug.h -util.$(OBJEXT): $(hdrdir)/ruby.h +transient_heap.$(OBJEXT): {$(VPATH)}vm_sync.h util.$(OBJEXT): $(hdrdir)/ruby/ruby.h +util.$(OBJEXT): $(top_srcdir)/internal/compilers.h +util.$(OBJEXT): $(top_srcdir)/internal/sanitizers.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)}intern.h util.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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 @@ -3104,11 +16046,39 @@ 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.h variable.$(OBJEXT): $(hdrdir)/ruby/ruby.h +variable.$(OBJEXT): $(top_srcdir)/internal/array.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/serial.h +variable.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +variable.$(OBJEXT): $(top_srcdir)/internal/string.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)}darray.h variable.$(OBJEXT): {$(VPATH)}debug_counter.h variable.$(OBJEXT): {$(VPATH)}defines.h variable.$(OBJEXT): {$(VPATH)}encoding.h @@ -3116,11 +16086,161 @@ 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/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/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/gc.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/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/rgengc.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/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)}st.h @@ -3132,7 +16252,9 @@ 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 @@ -3140,15 +16262,173 @@ 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/compilers.h +version.$(OBJEXT): $(top_srcdir)/internal/gc.h +version.$(OBJEXT): $(top_srcdir)/internal/imemo.h +version.$(OBJEXT): $(top_srcdir)/internal/serial.h +version.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +version.$(OBJEXT): $(top_srcdir)/internal/vm.h +version.$(OBJEXT): $(top_srcdir)/internal/warnings.h version.$(OBJEXT): $(top_srcdir)/revision.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)}darray.h version.$(OBJEXT): {$(VPATH)}debug_counter.h version.$(OBJEXT): {$(VPATH)}defines.h version.$(OBJEXT): {$(VPATH)}id.h version.$(OBJEXT): {$(VPATH)}intern.h version.$(OBJEXT): {$(VPATH)}internal.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/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/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/gc.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/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/rgengc.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/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)}mjit.h @@ -3162,19 +16442,63 @@ 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): $(top_srcdir)/internal/array.h +vm.$(OBJEXT): $(top_srcdir)/internal/bignum.h +vm.$(OBJEXT): $(top_srcdir)/internal/bits.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/cont.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/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/re.h +vm.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h +vm.$(OBJEXT): $(top_srcdir)/internal/serial.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/variable.h +vm.$(OBJEXT): $(top_srcdir)/internal/vm.h +vm.$(OBJEXT): $(top_srcdir)/internal/warnings.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)}darray.h vm.$(OBJEXT): {$(VPATH)}debug_counter.h vm.$(OBJEXT): {$(VPATH)}defines.h vm.$(OBJEXT): {$(VPATH)}defs/opt_operand.def +vm.$(OBJEXT): {$(VPATH)}encoding.h vm.$(OBJEXT): {$(VPATH)}eval_intern.h vm.$(OBJEXT): {$(VPATH)}gc.h vm.$(OBJEXT): {$(VPATH)}id.h @@ -3184,14 +16508,166 @@ 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/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/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/gc.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/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/rgengc.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/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)}method.h vm.$(OBJEXT): {$(VPATH)}missing.h vm.$(OBJEXT): {$(VPATH)}mjit.h vm.$(OBJEXT): {$(VPATH)}node.h +vm.$(OBJEXT): {$(VPATH)}onigmo.h +vm.$(OBJEXT): {$(VPATH)}oniguruma.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)}st.h @@ -3204,6 +16680,7 @@ 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 @@ -3213,15 +16690,37 @@ 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_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.h vm_backtrace.$(OBJEXT): $(hdrdir)/ruby/ruby.h +vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/array.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/serial.h +vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/string.h +vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/vm.h +vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/warnings.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)}darray.h vm_backtrace.$(OBJEXT): {$(VPATH)}debug.h vm_backtrace.$(OBJEXT): {$(VPATH)}defines.h vm_backtrace.$(OBJEXT): {$(VPATH)}encoding.h @@ -3229,6 +16728,154 @@ 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)}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/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/gc.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/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/rgengc.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/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 @@ -3248,21 +16895,183 @@ 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.h vm_dump.$(OBJEXT): $(hdrdir)/ruby/ruby.h +vm_dump.$(OBJEXT): $(top_srcdir)/internal/array.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/serial.h +vm_dump.$(OBJEXT): $(top_srcdir)/internal/static_assert.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): {$(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)}darray.h vm_dump.$(OBJEXT): {$(VPATH)}defines.h vm_dump.$(OBJEXT): {$(VPATH)}gc.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/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/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/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/gc.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/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/rgengc.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/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)}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)}st.h @@ -3270,29 +17079,391 @@ 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/compilers.h +vm_sync.$(OBJEXT): $(top_srcdir)/internal/gc.h +vm_sync.$(OBJEXT): $(top_srcdir)/internal/imemo.h +vm_sync.$(OBJEXT): $(top_srcdir)/internal/serial.h +vm_sync.$(OBJEXT): $(top_srcdir)/internal/static_assert.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)}darray.h +vm_sync.$(OBJEXT): {$(VPATH)}debug_counter.h +vm_sync.$(OBJEXT): {$(VPATH)}defines.h +vm_sync.$(OBJEXT): {$(VPATH)}gc.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/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/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/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/gc.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/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/rgengc.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/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)}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)}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/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/serial.h +vm_trace.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +vm_trace.$(OBJEXT): $(top_srcdir)/internal/symbol.h +vm_trace.$(OBJEXT): $(top_srcdir)/internal/vm.h +vm_trace.$(OBJEXT): $(top_srcdir)/internal/warnings.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)}darray.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)}intern.h vm_trace.$(OBJEXT): {$(VPATH)}internal.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/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/gc.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/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/rgengc.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/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)}mjit.h vm_trace.$(OBJEXT): {$(VPATH)}node.h +vm_trace.$(OBJEXT): {$(VPATH)}onigmo.h +vm_trace.$(OBJEXT): {$(VPATH)}oniguruma.h +vm_trace.$(OBJEXT): {$(VPATH)}ractor.h vm_trace.$(OBJEXT): {$(VPATH)}ruby_assert.h vm_trace.$(OBJEXT): {$(VPATH)}ruby_atomic.h vm_trace.$(OBJEXT): {$(VPATH)}st.h @@ -3303,4 +17474,234 @@ vm_trace.$(OBJEXT): {$(VPATH)}trace_point.rbinc vm_trace.$(OBJEXT): {$(VPATH)}vm_core.h vm_trace.$(OBJEXT): {$(VPATH)}vm_opts.h vm_trace.$(OBJEXT): {$(VPATH)}vm_trace.c +vm_trace.$(OBJEXT): {$(VPATH)}yjit.h +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/class.h +yjit.$(OBJEXT): $(top_srcdir)/internal/compile.h +yjit.$(OBJEXT): $(top_srcdir)/internal/compilers.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/object.h +yjit.$(OBJEXT): $(top_srcdir)/internal/re.h +yjit.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h +yjit.$(OBJEXT): $(top_srcdir)/internal/serial.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): {$(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)}darray.h +yjit.$(OBJEXT): {$(VPATH)}debug_counter.h +yjit.$(OBJEXT): {$(VPATH)}defines.h +yjit.$(OBJEXT): {$(VPATH)}encoding.h +yjit.$(OBJEXT): {$(VPATH)}gc.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/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/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/gc.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/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/rgengc.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/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)}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)}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_opts.h +yjit.$(OBJEXT): {$(VPATH)}vm_sync.h +yjit.$(OBJEXT): {$(VPATH)}yjit.c +yjit.$(OBJEXT): {$(VPATH)}yjit.h +yjit.$(OBJEXT): {$(VPATH)}yjit.rb +yjit.$(OBJEXT): {$(VPATH)}yjit.rbinc +yjit.$(OBJEXT): {$(VPATH)}yjit_asm.c +yjit.$(OBJEXT): {$(VPATH)}yjit_asm.h +yjit.$(OBJEXT): {$(VPATH)}yjit_codegen.c +yjit.$(OBJEXT): {$(VPATH)}yjit_codegen.h +yjit.$(OBJEXT): {$(VPATH)}yjit_core.c +yjit.$(OBJEXT): {$(VPATH)}yjit_core.h +yjit.$(OBJEXT): {$(VPATH)}yjit_iface.c +yjit.$(OBJEXT): {$(VPATH)}yjit_iface.h +yjit.$(OBJEXT): {$(VPATH)}yjit_utils.c # AUTOGENERATED DEPENDENCIES END diff --git a/ruby/compar.c b/ruby/compar.c index 94072c9fc..e9d1ac41f 100644 --- a/ruby/compar.c +++ b/ruby/compar.c @@ -9,9 +9,12 @@ **********************************************************************/ -#include "ruby/ruby.h" #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; @@ -81,8 +84,7 @@ 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 @@ -102,8 +104,7 @@ cmpint(VALUE x, VALUE y) static VALUE cmp_gt(VALUE x, VALUE y) { - if (cmpint(x, y) > 0) return Qtrue; - return Qfalse; + return RBOOL(cmpint(x, y) > 0); } /* @@ -117,8 +118,7 @@ cmp_gt(VALUE x, VALUE y) static VALUE cmp_ge(VALUE x, VALUE y) { - if (cmpint(x, y) >= 0) return Qtrue; - return Qfalse; + return RBOOL(cmpint(x, y) >= 0); } /* @@ -132,8 +132,7 @@ cmp_ge(VALUE x, VALUE y) static VALUE cmp_lt(VALUE x, VALUE y) { - if (cmpint(x, y) < 0) return Qtrue; - return Qfalse; + return RBOOL(cmpint(x, y) < 0); } /* @@ -147,8 +146,7 @@ cmp_lt(VALUE x, VALUE y) static VALUE cmp_le(VALUE x, VALUE y) { - if (cmpint(x, y) <= 0) return Qtrue; - return Qfalse; + return RBOOL(cmpint(x, y) <= 0); } /* @@ -230,11 +228,9 @@ cmp_clamp(int argc, VALUE *argv, VALUE x) } if (!NIL_P(max)) { if (excl) rb_raise(rb_eArgError, "cannot clamp with an exclusive range"); - if (!NIL_P(min) && cmpint(min, max) > 0) goto arg_error; } } - else if (cmpint(min, max) > 0) { - arg_error: + if (!NIL_P(min) && !NIL_P(max) && cmpint(min, max) > 0) { rb_raise(rb_eArgError, "min argument must be smaller than max argument"); } @@ -288,14 +284,27 @@ cmp_clamp(int argc, VALUE *argv, VALUE x) * 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 <=>: + * + * - {<}[#method-i-3C]:: Returns whether +self+ is less than the given object. + * - {<=}[#method-i-3C-3D]:: Returns whether +self+ is less than or equal to + * the given object. + * - {==}[#method-i-3D-3D]:: Returns whether +self+ is equal to the given object. + * - {>}[#method-i-3E]:: Returns whether +self+ is greater than or equal to + * the given object. + * - {>=}[#method-i-3E-3D]:: Returns whether +self+ is greater than the given object. + * - #between? Returns +true+ if +self+ is between two given objects. + * - #clamp:: For given objects +min+ and +max+, or range (min..max), returns: + * - +min+ if (self <=> min) < 0. + * - +max+ if (self <=> max) > 0. + * - +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); diff --git a/ruby/compile.c b/ruby/compile.c index 7043ba9a7..83389947c 100644 --- a/ruby/compile.c +++ b/ruby/compile.c @@ -9,25 +9,40 @@ **********************************************************************/ -#include "ruby/encoding.h" -#include "ruby/re.h" -#include "ruby/util.h" -#include "internal.h" -#include "encindex.h" +#include "ruby/internal/config.h" #include +#ifdef HAVE_DLADDR +# include +#endif + +#include "encindex.h" +#include "gc.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/hash.h" +#include "internal/numeric.h" +#include "internal/object.h" +#include "internal/rational.h" +#include "internal/re.h" +#include "internal/symbol.h" +#include "internal/thread.h" +#include "internal/variable.h" +#include "iseq.h" +#include "ruby/re.h" +#include "ruby/util.h" #include "vm_core.h" +#include "vm_callinfo.h" #include "vm_debug.h" + #include "builtin.h" -#include "iseq.h" #include "insns.inc" #include "insns_info.inc" -#include "id_table.h" -#include "gc.h" - -#ifdef HAVE_DLADDR -# include -#endif #undef RUBY_UNTYPED_DATA_WARNING #define RUBY_UNTYPED_DATA_WARNING 0 @@ -79,6 +94,7 @@ typedef struct iseq_insn_data { VALUE *operands; struct { int line_no; + int node_id; rb_event_flag_t events; } insn_info; } INSN; @@ -176,6 +192,7 @@ const ID rb_iseq_shared_exc_local_tbl[] = {idERROR_INFO}; #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)) @@ -201,112 +218,77 @@ const ID rb_iseq_shared_exc_local_tbl[] = {idERROR_INFO}; 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, (line_node), BIN(insn), 0)) /* insert an instruction before next */ -#define INSERT_BEFORE_INSN(next, line, insn) \ - ELEM_INSERT_PREV(&(next)->link, (LINK_ELEMENT *) new_insn_body(iseq, (line), BIN(insn), 0)) +#define INSERT_BEFORE_INSN(next, line_node, insn) \ + ELEM_INSERT_PREV(&(next)->link, (LINK_ELEMENT *) new_insn_body(iseq, (line_node), BIN(insn), 0)) /* insert an instruction after prev */ -#define INSERT_AFTER_INSN(prev, line, insn) \ - ELEM_INSERT_NEXT(&(prev)->link, (LINK_ELEMENT *) new_insn_body(iseq, (line), BIN(insn), 0)) +#define INSERT_AFTER_INSN(prev, line_node, insn) \ + ELEM_INSERT_NEXT(&(prev)->link, (LINK_ELEMENT *) new_insn_body(iseq, (line_node), 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, (line_node), BIN(insn), 1, (VALUE)(op1))) /* insert an instruction with some operands (1, 2, 3, 5) before next */ -#define INSERT_BEFORE_INSN1(next, line, insn, op1) \ +#define INSERT_BEFORE_INSN1(next, line_node, insn, op1) \ ELEM_INSERT_PREV(&(next)->link, (LINK_ELEMENT *) \ - new_insn_body(iseq, (line), BIN(insn), 1, (VALUE)(op1))) + new_insn_body(iseq, (line_node), BIN(insn), 1, (VALUE)(op1))) /* insert an instruction with some operands (1, 2, 3, 5) after prev */ -#define INSERT_AFTER_INSN1(prev, line, insn, op1) \ +#define INSERT_AFTER_INSN1(prev, line_node, insn, op1) \ ELEM_INSERT_NEXT(&(prev)->link, (LINK_ELEMENT *) \ - new_insn_body(iseq, (line), BIN(insn), 1, (VALUE)(op1))) + new_insn_body(iseq, (line_node), 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, (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, (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, id, argc, flag) \ - ADD_SEND_R((seq), (line), (id), (argc), NULL, (VALUE)(flag), 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_BLOCK(seq, line, id, argc, block) \ - ADD_SEND_R((seq), (line), (id), (argc), (block), (VALUE)INT2FIX(0), 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_CALL_RECEIVER(seq, line) \ - ADD_INSN((seq), (line), putself) +#define ADD_CALL_RECEIVER(seq, line_node) \ + ADD_INSN((seq), (line_node), putself) -#define ADD_CALL(seq, line, id, argc) \ - ADD_SEND_R((seq), (line), (id), (argc), NULL, (VALUE)INT2FIX(VM_CALL_FCALL), NULL) +#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_WITH_BLOCK(seq, line, id, argc, block) \ - ADD_SEND_R((seq), (line), (id), (argc), (block), (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_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_SEND_R(seq, line_node, id, argc, block, flag, keywords) \ + ADD_ELEM((seq), (LINK_ELEMENT *) new_insn_send(iseq, (line_node), (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))) +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 DECL_BRANCH_BASE(branches, first_line, first_column, last_line, last_column, type) \ - do { \ - if (ISEQ_COVERAGE(iseq) && \ - ISEQ_BRANCH_COVERAGE(iseq) && \ - (first_line) > 0) { \ - VALUE structure = RARRAY_AREF(ISEQ_BRANCH_COVERAGE(iseq), 0); \ - branches = rb_ary_tmp_new(5); \ - rb_ary_push(structure, branches); \ - rb_ary_push(branches, ID2SYM(rb_intern(type))); \ - rb_ary_push(branches, INT2FIX(first_line)); \ - rb_ary_push(branches, INT2FIX(first_column)); \ - rb_ary_push(branches, INT2FIX(last_line)); \ - rb_ary_push(branches, INT2FIX(last_column)); \ - } \ - } while (0) -#define ADD_TRACE_BRANCH_COVERAGE(seq, first_line, first_column, last_line, last_column, type, branches) \ - do { \ - if (ISEQ_COVERAGE(iseq) && \ - ISEQ_BRANCH_COVERAGE(iseq) && \ - (first_line) > 0) { \ - VALUE counters = RARRAY_AREF(ISEQ_BRANCH_COVERAGE(iseq), 1); \ - long counter_idx = RARRAY_LEN(counters); \ - rb_ary_push(counters, INT2FIX(0)); \ - rb_ary_push(branches, ID2SYM(rb_intern(type))); \ - rb_ary_push(branches, INT2FIX(first_line)); \ - rb_ary_push(branches, INT2FIX(first_column)); \ - rb_ary_push(branches, INT2FIX(last_line)); \ - rb_ary_push(branches, INT2FIX(last_column)); \ - rb_ary_push(branches, INT2FIX(counter_idx)); \ - ADD_TRACE_WITH_DATA(seq, RUBY_EVENT_COVERAGE_BRANCH, counter_idx); \ - ADD_INSN(seq, last_line, nop); \ - } \ - } while (0) - -static void iseq_add_getlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, int line, int idx, int level); -static void iseq_add_setlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, int line, int idx, int level); - -#define ADD_GETLOCAL(seq, line, idx, level) iseq_add_getlocal(iseq, (seq), (line), (idx), (level)) -#define ADD_SETLOCAL(seq, line, idx, level) iseq_add_setlocal(iseq, (seq), (line), (idx), (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) \ @@ -315,8 +297,8 @@ static void iseq_add_setlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, int line, #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)) @@ -352,7 +334,7 @@ static void iseq_add_setlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, int line, #define COMPILE_RECV(anchor, desc, node) \ (private_recv_p(node) ? \ - (ADD_INSN(anchor, nd_line(node), putself), VM_CALL_FCALL) : \ + (ADD_INSN(anchor, node, putself), VM_CALL_FCALL) : \ COMPILE(anchor, desc, node->nd_recv) ? 0 : -1) #define OPERAND_AT(insn, idx) \ @@ -371,9 +353,9 @@ static void iseq_add_setlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, int line, /* error */ #if CPDEBUG > 0 -NORETURN(static void append_compile_error(const rb_iseq_t *iseq, int line, const char *fmt, ...)); +RBIMPL_ATTR_NORETURN() #endif - +RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 4) static void append_compile_error(const rb_iseq_t *iseq, int line, const char *fmt, ...) { @@ -488,7 +470,7 @@ 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, const NODE *const line_node, 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); @@ -500,7 +482,7 @@ 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 ID *tbl); +static int iseq_set_local_table(rb_iseq_t *iseq, const rb_ast_id_table_t *tbl); static int iseq_set_exception_local_table(rb_iseq_t *iseq); static int iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *const anchor, const NODE *const node); @@ -510,6 +492,7 @@ static int iseq_set_exception_table(rb_iseq_t *iseq); static int iseq_set_optargs_table(rb_iseq_t *iseq); static int compile_defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE needstr); +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 @@ -551,6 +534,8 @@ static void verify_call_cache(rb_iseq_t *iseq) { #if CPDEBUG + // fprintf(stderr, "ci_size:%d\t", iseq->body->ci_size); rp(iseq); + VALUE *original = rb_iseq_original_iseq(iseq); size_t i = 0; while (i < iseq->body->iseq_size) { @@ -559,16 +544,27 @@ verify_call_cache(rb_iseq_t *iseq) for (int j=0; types[j]; j++) { if (types[j] == TS_CALLDATA) { - struct rb_call_cache cc; struct rb_call_data *cd = (struct rb_call_data *)original[i+j+1]; - MEMZERO(&cc, cc, 1); - if (memcmp(&cc, &cd->cc, sizeof(cc))) { - rb_bug("call cache not zero for fresh iseq"); + 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; ibody->ci_size; i++) { + struct rb_call_data *cd = &iseq->body->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 } @@ -602,6 +598,107 @@ APPEND_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *const anchor, LINK_ELEMENT *before, LI #define APPEND_ELEM(anchor, before, elem) APPEND_ELEM(iseq, (anchor), (before), (elem)) #endif +static int +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 +decl_branch_base(rb_iseq_t *iseq, const NODE *node, const char *type) +{ + const int first_lineno = nd_first_lineno(node), first_column = nd_first_column(node); + const int last_lineno = nd_last_lineno(node), last_column = nd_last_column(node); + + if (!branch_coverage_valid_p(iseq, first_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 key = (VALUE)node | 1; // FIXNUM for hash key + VALUE branch_base = rb_hash_aref(structure, key); + VALUE branches; + + if (NIL_P(branch_base)) { + branch_base = rb_ary_tmp_new(6); + rb_hash_aset(structure, key, branch_base); + rb_ary_push(branch_base, ID2SYM(rb_intern(type))); + rb_ary_push(branch_base, INT2FIX(first_lineno)); + rb_ary_push(branch_base, INT2FIX(first_column)); + rb_ary_push(branch_base, INT2FIX(last_lineno)); + rb_ary_push(branch_base, INT2FIX(last_column)); + branches = rb_hash_new(); + rb_obj_hide(branches); + rb_ary_push(branch_base, branches); + } + else { + branches = RARRAY_AREF(branch_base, 5); + } + + return branches; +} + +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 void +add_trace_branch_coverage(rb_iseq_t *iseq, LINK_ANCHOR *const seq, const NODE *node, int branch_id, const char *type, VALUE branches) +{ + const int first_lineno = nd_first_lineno(node), first_column = nd_first_column(node); + const int last_lineno = nd_last_lineno(node), last_column = nd_last_column(node); + + if (!branch_coverage_valid_p(iseq, first_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 = rb_ary_tmp_new(6); + rb_hash_aset(branches, 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)); + 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)); + } + else { + counter_idx = FIX2LONG(RARRAY_AREF(branch, 5)); + } + + ADD_TRACE_WITH_DATA(seq, RUBY_EVENT_COVERAGE_BRANCH, counter_idx); + + NODE dummy_line_node = generate_dummy_line_node(last_lineno, nd_node_id(node)); + ADD_INSN(seq, &dummy_line_node, nop); +} + #define ISEQ_LAST_LINE(iseq) (ISEQ_COMPILE_DATA(iseq)->last_line) static int @@ -634,7 +731,8 @@ rb_iseq_compile_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_callback (*ifunc->func)(iseq, ret, ifunc->data); - ADD_INSN(ret, ISEQ_COMPILE_DATA(iseq)->last_line, leave); + NODE dummy_line_node = generate_dummy_line_node(ISEQ_COMPILE_DATA(iseq)->last_line, -1); + ADD_INSN(ret, &dummy_line_node, leave); CHECK(iseq_setup_insn(iseq, ret)); return iseq_setup(iseq, ret); @@ -646,7 +744,7 @@ rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node) DECL_ANCHOR(ret); INIT_ANCHOR(ret); - if (imemo_type_p((VALUE)node, imemo_ifunc)) { + if (IMEMO_TYPE_P(node, imemo_ifunc)) { rb_raise(rb_eArgError, "unexpected imemo_ifunc"); } @@ -655,7 +753,7 @@ rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node) iseq_set_local_table(iseq, 0); } /* assume node is T_NODE */ - else if (nd_type(node) == NODE_SCOPE) { + else if (nd_type_p(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); @@ -670,7 +768,8 @@ rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node) end->rescued = LABEL_RESCUE_END; ADD_TRACE(ret, RUBY_EVENT_B_CALL); - ADD_INSN (ret, FIX2INT(iseq->body->location.first_lineno), nop); + NODE dummy_line_node = generate_dummy_line_node(FIX2INT(iseq->body->location.first_lineno), -1); + ADD_INSN (ret, &dummy_line_node, nop); ADD_LABEL(ret, start); CHECK(COMPILE(ret, "block body", node->nd_body)); ADD_LABEL(ret, end); @@ -692,8 +791,10 @@ rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node) } case ISEQ_TYPE_METHOD: { + ISEQ_COMPILE_DATA(iseq)->root_node = node->nd_body; ADD_TRACE(ret, RUBY_EVENT_CALL); CHECK(COMPILE(ret, "scoped node", node->nd_body)); + ISEQ_COMPILE_DATA(iseq)->root_node = node->nd_body; ADD_TRACE(ret, RUBY_EVENT_RETURN); ISEQ_COMPILE_DATA(iseq)->last_line = nd_line(node); break; @@ -737,11 +838,13 @@ rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node) } if (iseq->body->type == ISEQ_TYPE_RESCUE || iseq->body->type == ISEQ_TYPE_ENSURE) { - ADD_GETLOCAL(ret, 0, LVAR_ERRINFO, 0); - ADD_INSN1(ret, 0, throw, INT2FIX(0) /* continue throw */ ); + 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 { - ADD_INSN(ret, ISEQ_COMPILE_DATA(iseq)->last_line, leave); + NODE dummy_line_node = generate_dummy_line_node(ISEQ_COMPILE_DATA(iseq)->last_line, -1); + ADD_INSN(ret, &dummy_line_node, leave); } #if OPT_SUPPORT_JOKE @@ -769,7 +872,7 @@ rb_iseq_translate_threaded_code(rb_iseq_t *iseq) encoded[i] = (VALUE)table[insn]; i += len; } - FL_SET(iseq, ISEQ_TRANSLATED); + FL_SET((VALUE)iseq, ISEQ_TRANSLATED); #endif return COMPILE_OK; } @@ -813,6 +916,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 + #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 @@ -905,6 +1018,15 @@ compile_data_alloc2(rb_iseq_t *iseq, size_t x, size_t y) 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) { @@ -995,19 +1117,6 @@ LAST_ELEMENT(LINK_ANCHOR *const anchor) return anchor->last; } -static LINK_ELEMENT * -POP_ELEMENT(ISEQ_ARG_DECLARE LINK_ANCHOR *const anchor) -{ - LINK_ELEMENT *elem = anchor->last; - anchor->last = anchor->last->prev; - anchor->last->next = 0; - verify_list("pop", anchor); - return elem; -} -#if CPDEBUG < 0 -#define POP_ELEMENT(anchor) POP_ELEMENT(iseq, (anchor)) -#endif - static LINK_ELEMENT * ELEM_FIRST_INSN(LINK_ELEMENT *elem) { @@ -1070,27 +1179,27 @@ APPEND_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR *const anc1, LINK_ANCHOR *const anc2) #if CPDEBUG && 0 static void -debug_list(ISEQ_ARG_DECLARE LINK_ANCHOR *const 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)); + 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) ((void)0) +#define debug_list(anc, cur) ((void)0) #endif static TRACE * @@ -1137,17 +1246,18 @@ new_adjust_body(rb_iseq_t *iseq, LABEL *label, int line) } static INSN * -new_insn_core(rb_iseq_t *iseq, int line_no, +new_insn_core(rb_iseq_t *iseq, const NODE *line_node, 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->insn_info.line_no = line_no; + iobj->insn_info.line_no = nd_line(line_node); + iobj->insn_info.node_id = nd_node_id(line_node); iobj->insn_info.events = 0; iobj->operands = argv; iobj->operand_size = argc; @@ -1156,13 +1266,13 @@ new_insn_core(rb_iseq_t *iseq, int line_no, } 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, const NODE *const line_node, enum ruby_vminsn_type insn_id, int argc, ...) { VALUE *operands = 0; va_list argv; if (argc > 0) { int i; - va_init_list(argv, argc); + va_start(argv, argc); operands = compile_data_alloc2(iseq, sizeof(VALUE), argc); for (i = 0; i < argc; i++) { VALUE v = va_arg(argv, VALUE); @@ -1170,44 +1280,45 @@ new_insn_body(rb_iseq_t *iseq, int line_no, enum ruby_vminsn_type insn_id, int a } va_end(argv); } - return new_insn_core(iseq, line_no, insn_id, argc, operands); + return new_insn_core(iseq, line_node, 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 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) { - 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; + VM_ASSERT(argc >= 0); - ci->mid = mid; - ci->flag = flag; - ci->orig_argc = argc; + if (!(flag & (VM_CALL_ARGS_SPLAT | VM_CALL_ARGS_BLOCKARG | VM_CALL_KW_SPLAT)) && + kw_arg == NULL && !has_blockiseq) { + flag |= VM_CALL_ARGS_SIMPLE; + } 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 | VM_CALL_KW_SPLAT)) && - kw_arg == NULL && !has_blockiseq) { - ci->flag |= VM_CALL_ARGS_SIMPLE; - } + // fprintf(stderr, "[%d] id:%s\t", (int)iseq->body->ci_size, rb_id2name(mid)); rp(iseq); + iseq->body->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, const NODE *const line_node, ID id, VALUE argc, const rb_iseq_t *blockiseq, VALUE flag, struct rb_callinfo_kwarg *keywords) { - VALUE *operands = compile_data_alloc2(iseq, sizeof(VALUE), 2); - operands[0] = (VALUE)new_callinfo(iseq, id, FIX2INT(argc), FIX2INT(flag), keywords, blockiseq != NULL); + 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; - return new_insn_core(iseq, line_no, BIN(send), 2, operands); + if (blockiseq) { + RB_OBJ_WRITTEN(iseq, Qundef, blockiseq); + } + INSN *insn = new_insn_core(iseq, line_node, BIN(send), 2, operands); + RB_OBJ_WRITTEN(iseq, Qundef, ci); + RB_GC_GUARD(ci); + return insn; } static rb_iseq_t * @@ -1219,12 +1330,15 @@ new_child_iseq(rb_iseq_t *iseq, const NODE *const node, ast.root = node; ast.compile_option = 0; - ast.line_count = -1; + ast.script_lines = iseq->body->variable.script_lines; debugs("[new_child_iseq]> ---------------------------------------\n"); + int isolated_depth = ISEQ_COMPILE_DATA(iseq)->isolated_depth; ret_iseq = rb_iseq_new_with_opt(&ast, name, rb_iseq_path(iseq), rb_iseq_realpath(iseq), - INT2FIX(line_no), parent, type, ISEQ_COMPILE_DATA(iseq)->option); + INT2FIX(line_no), parent, + isolated_depth ? isolated_depth + 1 : 0, + type, ISEQ_COMPILE_DATA(iseq)->option); debugs("[new_child_iseq]< ---------------------------------------\n"); return ret_iseq; } @@ -1271,11 +1385,7 @@ update_catch_except_flags(struct rb_iseq_constant_body *body) BREAK/NEXT/REDO catch table entries are used only when `throw` insn is used in the block. */ pos = 0; while (pos < body->iseq_size) { -#if OPT_DIRECT_THREADED_CODE || OPT_CALL_THREADED_CODE - insn = rb_vm_insn_addr2insn((void *)body->iseq_encoded[pos]); -#else - insn = (int)body->iseq_encoded[pos]; -#endif + insn = rb_vm_insn_decode(body->iseq_encoded[pos]); if (insn == BIN(throw)) { set_catch_except_p(body); break; @@ -1310,11 +1420,20 @@ iseq_insert_nop_between_end_and_cont(rb_iseq_t *iseq) LINK_ELEMENT *end = (LINK_ELEMENT *)(ptr[2] & ~1); LINK_ELEMENT *cont = (LINK_ELEMENT *)(ptr[4] & ~1); LINK_ELEMENT *e; - for (e = end; e && (IS_LABEL(e) || IS_TRACE(e)); e = e->next) { - if (e == cont) { - INSN *nop = new_insn_core(iseq, 0, BIN(nop), 0, 0); - ELEM_INSERT_NEXT(end, &nop->link); - break; + + enum catch_type ct = (enum 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) { + NODE dummy_line_node = generate_dummy_line_node(0, -1); + INSN *nop = new_insn_core(iseq, &dummy_line_node, BIN(nop), 0, 0); + ELEM_INSERT_NEXT(end, &nop->link); + break; + } } } } @@ -1353,6 +1472,8 @@ iseq_setup_insn(rb_iseq_t *iseq, LINK_ANCHOR *const 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; } @@ -1377,8 +1498,22 @@ iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *const 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"); update_catch_except_flags(iseq->body); + debugs("[compile step 6.1 (remove unused catch tables)] \n"); + if (!iseq->body->catch_except_p && iseq->body->catch_table) { + xfree(iseq->body->catch_table); + iseq->body->catch_table = NULL; + } + +#if VM_INSN_INFO_TABLE_IMPL == 2 + if (iseq->body->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)); @@ -1494,25 +1629,74 @@ iseq_block_param_id_p(const rb_iseq_t *iseq, ID id, int *pidx, int *plevel) } static void -iseq_add_getlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, int line, int idx, int level) +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; ibody->outer_variables; + + if (!ovs) { + ovs = iseq->body->outer_variables = rb_id_table_create(8); + } + + if (rb_id_table_lookup(iseq->body->outer_variables, id, &val)) { + if (write && !val) { + rb_id_table_insert(iseq->body->outer_variables, id, Qtrue); + } + } + else { + rb_id_table_insert(iseq->body->outer_variables, id, RBOOL(write)); + } + + iseq = iseq->body->parent_iseq; + } +} + +static ID +iseq_lvar_id(const rb_iseq_t *iseq, int idx, int level) +{ + for (int i=0; ibody->parent_iseq; + } + + ID id = iseq->body->local_table[iseq->body->local_table_size - idx]; + // fprintf(stderr, "idx:%d level:%d ID:%s\n", idx, level, rb_id2name(id)); + return id; +} + +static void +iseq_add_getlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, const NODE *const line_node, int idx, int level) { if (iseq_local_block_param_p(iseq, idx, level)) { - ADD_INSN2(seq, line, getblockparam, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level)); + ADD_INSN2(seq, line_node, getblockparam, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level)); } else { - ADD_INSN2(seq, line, getlocal, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level)); + 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_add_setlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, int line, int idx, int level) +iseq_add_setlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, const NODE *const line_node, int idx, int level) { if (iseq_local_block_param_p(iseq, idx, level)) { - ADD_INSN2(seq, line, setblockparam, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level)); + ADD_INSN2(seq, line_node, setblockparam, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level)); } else { - ADD_INSN2(seq, line, setlocal, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level)); + ADD_INSN2(seq, line_node, setlocal, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level)); } + if (level > 0) access_outer_variables(iseq, level, iseq_lvar_id(iseq, idx, level), Qtrue); } @@ -1599,7 +1783,7 @@ iseq_set_arguments_keywords(rb_iseq_t *iseq, LINK_ANCHOR *const optargs, dv = Qfalse; break; default: - NO_CHECK(COMPILE_POPPED(optargs, "kwarg", node)); /* nd_type(node) == NODE_KW_ARG */ + NO_CHECK(COMPILE_POPPED(optargs, "kwarg", node)); /* nd_type_p(node, NODE_KW_ARG) */ dv = complex_mark; } @@ -1762,21 +1946,13 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *const optargs, const NODE *cons } 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) { - unsigned int size; - - if (tbl) { - size = (unsigned int)*tbl; - tbl++; - } - else { - size = 0; - } + unsigned int size = tbl ? tbl->size : 0; if (size > 0) { ID *ids = (ID *)ALLOC_N(ID, size); - MEMCPY(ids, tbl, ID, size); + MEMCPY(ids, tbl->ids, ID, size); iseq->body->local_table = ids; } iseq->body->local_table_size = size; @@ -1785,8 +1961,8 @@ iseq_set_local_table(rb_iseq_t *iseq, const ID *tbl) return COMPILE_OK; } -static int -cdhash_cmp(VALUE val, VALUE lit) +int +rb_iseq_cdhash_cmp(VALUE val, VALUE lit) { int tval, tlit; @@ -1819,13 +1995,26 @@ cdhash_cmp(VALUE val, VALUE lit) 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); } } -static st_index_t -cdhash_hash(VALUE a) +st_index_t +rb_iseq_cdhash_hash(VALUE a) { switch (OBJ_BUILTIN_TYPE(a)) { case -1: @@ -1837,14 +2026,20 @@ cdhash_hash(VALUE a) 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 { @@ -1954,7 +2149,12 @@ fix_sp_depth(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) } 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; @@ -1966,6 +2166,11 @@ fix_sp_depth(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) 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; @@ -2005,8 +2210,14 @@ add_insn_info(struct iseq_insn_info_entry *insns_info, unsigned int *positions, { 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; @@ -2034,6 +2245,7 @@ add_adjust_info(struct iseq_insn_info_entry *insns_info, unsigned int *positions static int iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) { + VALUE iseqv = (VALUE)iseq; struct iseq_insn_info_entry *insns_info; struct rb_iseq_constant_body *const body = iseq->body; unsigned int *positions; @@ -2082,6 +2294,11 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) { 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; } @@ -2115,11 +2332,8 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) insns_info = ALLOC_N(struct iseq_insn_info_entry, insn_num); positions = ALLOC_N(unsigned int, insn_num); body->is_entries = ZALLOC_N(union iseq_inline_storage_entry, body->is_size); - body->call_data = - rb_xcalloc_mul_add_mul( - sizeof(struct rb_call_data), body->ci_size, - sizeof(struct rb_kwarg_call_data), body->ci_kw_size); - ISEQ_COMPILE_DATA(iseq)->ci_index = ISEQ_COMPILE_DATA(iseq)->ci_kw_index = 0; + body->call_data = ZALLOC_N(struct rb_call_data, body->ci_size); + ISEQ_COMPILE_DATA(iseq)->ci_index = 0; list = FIRST_ELEMENT(anchor); insns_info_index = code_index = sp = 0; @@ -2166,7 +2380,7 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) freeze_hide_obj(map); generated_iseq[code_index + 1 + j] = map; RB_OBJ_WRITTEN(iseq, Qundef, map); - FL_SET(iseq, ISEQ_MARKABLE_ISEQ); + FL_SET(iseqv, ISEQ_MARKABLE_ISEQ); break; } case TS_LINDEX: @@ -2181,15 +2395,12 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) /* to mark ruby object */ if (!SPECIAL_CONST_P(v)) { RB_OBJ_WRITTEN(iseq, Qundef, v); - FL_SET(iseq, ISEQ_MARKABLE_ISEQ); + FL_SET(iseqv, ISEQ_MARKABLE_ISEQ); } break; } - case TS_ISE: /* inline storage entry */ - /* Treated as an IC, but may contain a markable VALUE */ - FL_SET(iseq, ISEQ_MARKABLE_ISEQ); - /* fall through */ case TS_IC: /* inline cache */ + case TS_ISE: /* inline storage entry */ case TS_IVC: /* inline ivar cache */ { unsigned int ic_index = FIX2UINT(operands[j]); @@ -2201,39 +2412,28 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) ic_index, body->is_size); } generated_iseq[code_index + 1 + j] = (VALUE)ic; + FL_SET(iseqv, ISEQ_MARKABLE_ISEQ); + + if (insn == BIN(opt_getinlinecache) && type == TS_IC) { + // Store the instruction index for opt_getinlinecache on the IC for + // YJIT to invalidate code when opt_setinlinecache runs. + ic->get_insn_idx = (unsigned int)code_index; + } break; } case TS_CALLDATA: { - struct rb_call_info *source_ci = (struct rb_call_info *)operands[j]; - struct rb_call_data *cd; - - if (source_ci->flag & VM_CALL_KWARG) { - struct rb_kwarg_call_data *kw_calls = (struct rb_kwarg_call_data *)&body->call_data[body->ci_size]; - struct rb_kwarg_call_data *cd_kw = &kw_calls[ISEQ_COMPILE_DATA(iseq)->ci_kw_index++]; - cd_kw->ci_kw = *((struct rb_call_info_with_kwarg *)source_ci); - cd = (struct rb_call_data *)cd_kw; - assert(ISEQ_COMPILE_DATA(iseq)->ci_kw_index <= body->ci_kw_size); - } - else { - cd = &body->call_data[ISEQ_COMPILE_DATA(iseq)->ci_index++]; - cd->ci = *source_ci; - assert(ISEQ_COMPILE_DATA(iseq)->ci_index <= body->ci_size); - } - + const struct rb_callinfo *source_ci = (const struct rb_callinfo *)operands[j]; + struct rb_call_data *cd = &body->call_data[ISEQ_COMPILE_DATA(iseq)->ci_index++]; + assert(ISEQ_COMPILE_DATA(iseq)->ci_index <= body->ci_size); + 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_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; @@ -2253,6 +2453,11 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) 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; } @@ -2285,7 +2490,7 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) xfree(generated_iseq); xfree(insns_info); xfree(positions); - debug_list(anchor); + debug_list(anchor, list); COMPILE_ERROR(iseq, adjust->line_no, "iseq_set_sequence: adjust bug to %d %d < %d", label_no, orig_sp, sp); @@ -2337,7 +2542,8 @@ iseq_set_exception_table(rb_iseq_t *iseq) unsigned int tlen, i; struct iseq_catch_table_entry *entry; - if (NIL_P(ISEQ_COMPILE_DATA(iseq)->catch_table_ary)) goto no_catch_table; + iseq->body->catch_table = NULL; + if (NIL_P(ISEQ_COMPILE_DATA(iseq)->catch_table_ary)) return COMPILE_OK; tlen = (int)RARRAY_LEN(ISEQ_COMPILE_DATA(iseq)->catch_table_ary); tptr = RARRAY_CONST_PTR_TRANSIENT(ISEQ_COMPILE_DATA(iseq)->catch_table_ary); @@ -2374,10 +2580,6 @@ iseq_set_exception_table(rb_iseq_t *iseq) iseq->body->catch_table = table; RB_OBJ_WRITE(iseq, &ISEQ_COMPILE_DATA(iseq)->catch_table_ary, 0); /* free */ } - else { - no_catch_table: - iseq->body->catch_table = NULL; - } return COMPILE_OK; } @@ -2551,10 +2753,7 @@ remove_unreachable_chunk(rb_iseq_t *iseq, LINK_ELEMENT *i) unref_destination((INSN *)i, pos); break; case TS_CALLDATA: - if (((struct rb_call_info *)OPERAND_AT(i, pos))->flag & VM_CALL_KWARG) - --(body->ci_kw_size); - else - --(body->ci_size); + --(body->ci_size); break; } } @@ -2580,21 +2779,6 @@ iseq_pop_newarray(rb_iseq_t *iseq, INSN *iobj) } } -static int -same_debug_pos_p(LINK_ELEMENT *iobj1, LINK_ELEMENT *iobj2) -{ - VALUE debug1 = OPERAND_AT(iobj1, 0); - VALUE debug2 = OPERAND_AT(iobj2, 0); - if (debug1 == debug2) return TRUE; - if (!RB_TYPE_P(debug1, T_ARRAY)) return FALSE; - if (!RB_TYPE_P(debug2, T_ARRAY)) return FALSE; - if (RARRAY_LEN(debug1) != 2) return FALSE; - if (RARRAY_LEN(debug2) != 2) return FALSE; - if (RARRAY_AREF(debug1, 0) != RARRAY_AREF(debug2, 0)) return FALSE; - if (RARRAY_AREF(debug1, 1) != RARRAY_AREF(debug2, 1)) return FALSE; - return TRUE; -} - static int is_frozen_putstring(INSN *insn, VALUE *op) { @@ -2633,7 +2817,7 @@ optimize_checktype(rb_iseq_t *iseq, INSN *iobj) * jump L2 * L2: */ - int line; + int line, node_id; INSN *niobj, *ciobj, *dup = 0; LABEL *dest = 0; VALUE type; @@ -2661,7 +2845,6 @@ optimize_checktype(rb_iseq_t *iseq, INSN *iobj) if (!ciobj || !IS_INSN_ID(ciobj, checktype)) return FALSE; niobj = (INSN *)get_next_insn(ciobj); if (!niobj) { - no_branch: /* TODO: putobject true/false */ return FALSE; } @@ -2677,9 +2860,11 @@ optimize_checktype(rb_iseq_t *iseq, INSN *iobj) } break; default: - goto no_branch; + return FALSE; } line = ciobj->insn_info.line_no; + node_id = ciobj->insn_info.node_id; + NODE dummy_line_node = generate_dummy_line_node(line, node_id); if (!dest) { if (niobj->link.next && IS_LABEL(niobj->link.next)) { dest = (LABEL *)niobj->link.next; /* reuse label */ @@ -2689,12 +2874,34 @@ optimize_checktype(rb_iseq_t *iseq, INSN *iobj) ELEM_INSERT_NEXT(&niobj->link, &dest->link); } } - INSERT_AFTER_INSN1(iobj, line, jump, dest); + INSERT_AFTER_INSN1(iobj, &dummy_line_node, jump, dest); LABEL_REF(dest); - if (!dup) INSERT_AFTER_INSN(iobj, line, pop); + if (!dup) INSERT_AFTER_INSN(iobj, &dummy_line_node, 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; +} + static int iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcallopt) { @@ -2719,8 +2926,10 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal ELEM_REMOVE(&iobj->link); return COMPILE_OK; } - else if (iobj != diobj && IS_INSN_ID(diobj, jump) && - OPERAND_AT(iobj, 0) != OPERAND_AT(diobj, 0)) { + 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 @@ -2736,7 +2945,6 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal goto again; } else if (IS_INSN_ID(diobj, leave)) { - INSN *pop; /* * jump LABEL * ... @@ -2744,7 +2952,6 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal * leave * => * leave - * pop * ... * LABEL: * leave @@ -2754,12 +2961,9 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal iobj->insn_id = BIN(leave); iobj->operand_size = 0; iobj->insn_info = diobj->insn_info; - /* adjust stack depth */ - pop = new_insn_body(iseq, diobj->insn_info.line_no, BIN(pop), 0); - ELEM_INSERT_NEXT(&iobj->link, &pop->link); goto again; } - else if (IS_INSN(iobj->link.prev) && + else if (IS_INSN(iobj->link.prev) && (piobj = (INSN *)iobj->link.prev) && (IS_INSN_ID(piobj, branchif) || IS_INSN_ID(piobj, branchunless))) { @@ -2806,8 +3010,8 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal * pop * jump L1 */ - INSN *popiobj = new_insn_core(iseq, iobj->insn_info.line_no, - BIN(pop), 0, 0); + NODE dummy_line_node = generate_dummy_line_node(iobj->insn_info.line_no, iobj->insn_info.node_id); + INSN *popiobj = new_insn_core(iseq, &dummy_line_node, BIN(pop), 0, 0); ELEM_REPLACE(&piobj->link, &popiobj->link); } } @@ -2825,13 +3029,12 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal * * putobject "beg".."end" */ - if (IS_INSN_ID(iobj, checkmatch)) { - INSN *range = (INSN *)get_prev_insn(iobj); + if (IS_INSN_ID(iobj, newrange)) { + INSN *const range = iobj; INSN *beg, *end; VALUE str_beg, str_end; - if (range && IS_INSN_ID(range, newrange) && - (end = (INSN *)get_prev_insn(range)) != 0 && + 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)) { @@ -2850,6 +3053,22 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal remove_unreachable_chunk(iseq, iobj->link.next); } + /* + * ... + * duparray [...] + * concatarray + * => + * ... + * putobject [...] + * concatarray + */ + if (IS_INSN_ID(iobj, duparray)) { + LINK_ELEMENT *next = iobj->link.next; + if (IS_INSN(next) && IS_INSN_ID(next, concatarray)) { + iobj->insn_id = BIN(putobject); + } + } + if (IS_INSN_ID(iobj, branchif) || IS_INSN_ID(iobj, branchnil) || IS_INSN_ID(iobj, branchunless)) { @@ -2885,6 +3104,7 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal */ 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; @@ -2897,7 +3117,7 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal } for (;;) { - if (IS_INSN_ID(nobj, jump)) { + if (IS_INSN(&nobj->link) && IS_INSN_ID(nobj, jump)) { replace_destination(iobj, nobj); } else if (prev_dup && IS_INSN_ID(nobj, dup) && @@ -2970,12 +3190,14 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal ELEM_REMOVE(iobj->link.prev); } else if (!iseq_pop_newarray(iseq, pobj)) { - pobj = new_insn_core(iseq, pobj->insn_info.line_no, BIN(pop), 0, NULL); + NODE dummy_line_node = generate_dummy_line_node(pobj->insn_info.line_no, pobj->insn_info.node_id); + pobj = new_insn_core(iseq, &dummy_line_node, 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, BIN(putnil), 0, NULL); + NODE dummy_line_node = generate_dummy_line_node(pobj->insn_info.line_no, pobj->insn_info.node_id); + pobj = new_insn_core(iseq, &dummy_line_node, BIN(putnil), 0, NULL); ELEM_INSERT_NEXT(&iobj->link, &pobj->link); } iobj->insn_id = BIN(jump); @@ -3021,7 +3243,8 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal } else if (previ == BIN(concatarray)) { INSN *piobj = (INSN *)prev; - INSERT_BEFORE_INSN1(piobj, piobj->insn_info.line_no, splatarray, Qfalse); + NODE dummy_line_node = generate_dummy_line_node(piobj->insn_info.line_no, piobj->insn_info.node_id); + INSERT_BEFORE_INSN1(piobj, &dummy_line_node, splatarray, Qfalse); INSN_OF(piobj) = BIN(pop); } else if (previ == BIN(concatstrings)) { @@ -3056,13 +3279,13 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal } } - if (IS_INSN_ID(iobj, tostring)) { + if (IS_INSN_ID(iobj, anytostring)) { LINK_ELEMENT *next = iobj->link.next; /* - * tostring + * anytostring * concatstrings 1 * => - * tostring + * anytostring */ if (IS_INSN(next) && IS_INSN_ID(next, concatstrings) && OPERAND_AT(next, 0) == INT2FIX(1)) { @@ -3095,10 +3318,8 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal * => * concatstrings N+M-1 */ - LINK_ELEMENT *next = iobj->link.next, *freeze = 0; + LINK_ELEMENT *next = iobj->link.next; INSN *jump = 0; - if (IS_INSN(next) && IS_INSN_ID(next, freezestring)) - next = (freeze = next)->next; 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)) { @@ -3114,43 +3335,15 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal OPERAND_AT(jump, 0) = (VALUE)label; } label->refcnt++; - if (freeze && IS_NEXT_INSN_ID(next, freezestring)) { - if (same_debug_pos_p(freeze, next->next)) { - ELEM_REMOVE(freeze); - } - else { - next = next->next; - } - } ELEM_INSERT_NEXT(next, &label->link); CHECK(iseq_peephole_optimize(iseq, get_next_insn(jump), do_tailcallopt)); } else { - if (freeze) ELEM_REMOVE(freeze); ELEM_REMOVE(next); } } } - if (IS_INSN_ID(iobj, freezestring) && - NIL_P(OPERAND_AT(iobj, 0)) && - IS_NEXT_INSN_ID(&iobj->link, send)) { - INSN *niobj = (INSN *)iobj->link.next; - struct rb_call_info *ci = (struct rb_call_info *)OPERAND_AT(niobj, 0); - /* - * freezestring nil # no debug_info - * send <:+@, 0, ARG_SIMPLE> # :-@, too - * => - * send <:+@, 0, ARG_SIMPLE> # :-@, too - */ - if ((ci->mid == idUPlus || ci->mid == idUMinus) && - (ci->flag & VM_CALL_ARGS_SIMPLE) && - ci->orig_argc == 0) { - ELEM_REMOVE(list); - return COMPILE_OK; - } - } - if (do_tailcallopt && (IS_INSN_ID(iobj, send) || IS_INSN_ID(iobj, opt_aref_with) || @@ -3193,14 +3386,19 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal } if (piobj) { - struct rb_call_info *ci = (struct rb_call_info *)OPERAND_AT(piobj, 0); - if (IS_INSN_ID(piobj, send) || IS_INSN_ID(piobj, invokesuper)) { + 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->flag |= VM_CALL_TAILCALL; + ci = ci_flag_set(iseq, ci, VM_CALL_TAILCALL); + OPERAND_AT(piobj, 0) = (VALUE)ci; + RB_OBJ_WRITTEN(iseq, Qundef, ci); } } else { - ci->flag |= VM_CALL_TAILCALL; + ci = ci_flag_set(iseq, ci, VM_CALL_TAILCALL); + OPERAND_AT(piobj, 0) = (VALUE)ci; + RB_OBJ_WRITTEN(iseq, Qundef, ci); } } } @@ -3259,13 +3457,14 @@ 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; + iobj->insn_info.events |= RUBY_EVENT_C_CALL | RUBY_EVENT_C_RETURN; if (insn_id == BIN(opt_neq)) { - VALUE *old_operands = iobj->operands; + VALUE original_ci = iobj->operands[0]; iobj->operand_size = 2; - iobj->operands = compile_data_alloc2(iseq, iobj->operand_size, sizeof(VALUE)); + iobj->operands = compile_data_calloc2(iseq, iobj->operand_size, sizeof(VALUE)); iobj->operands[0] = (VALUE)new_callinfo(iseq, idEq, 1, 0, NULL, FALSE); - iobj->operands[1] = old_operands[0]; + iobj->operands[1] = original_ci; } return COMPILE_OK; @@ -3281,9 +3480,9 @@ iseq_specialized_instruction(rb_iseq_t *iseq, INSN *iobj) */ INSN *niobj = (INSN *)iobj->link.next; if (IS_INSN_ID(niobj, send)) { - struct rb_call_info *ci = (struct rb_call_info *)OPERAND_AT(niobj, 0); - if ((ci->flag & VM_CALL_ARGS_SIMPLE) && ci->orig_argc == 0) { - switch (ci->mid) { + const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(niobj, 0); + if ((vm_ci_flag(ci) & VM_CALL_ARGS_SIMPLE) && vm_ci_argc(ci) == 0) { + switch (vm_ci_mid(ci)) { case idMax: iobj->insn_id = BIN(opt_newarray_max); ELEM_REMOVE(&niobj->link); @@ -3298,14 +3497,14 @@ iseq_specialized_instruction(rb_iseq_t *iseq, INSN *iobj) } if (IS_INSN_ID(iobj, send)) { - struct rb_call_info *ci = (struct rb_call_info *)OPERAND_AT(iobj, 0); + 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) { + if (vm_ci_flag(ci) & VM_CALL_ARGS_SIMPLE) { + switch (vm_ci_argc(ci)) { case 0: - switch (ci->mid) { + 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; @@ -3315,7 +3514,7 @@ iseq_specialized_instruction(rb_iseq_t *iseq, INSN *iobj) } break; case 1: - switch (ci->mid) { + 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; @@ -3335,14 +3534,14 @@ iseq_specialized_instruction(rb_iseq_t *iseq, INSN *iobj) } break; case 2: - switch (ci->mid) { + switch (vm_ci_mid(ci)) { case idASET: SP_INSN(aset); return COMPILE_OK; } break; } } - if ((ci->flag & VM_CALL_ARGS_BLOCKARG) == 0 && blockiseq == NULL) { + if ((vm_ci_flag(ci) & VM_CALL_ARGS_BLOCKARG) == 0 && blockiseq == NULL) { iobj->insn_id = BIN(opt_send_without_block); iobj->operand_size = insn_len(iobj->insn_id) - 1; } @@ -3383,6 +3582,12 @@ iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) list = FIRST_ELEMENT(anchor); + int do_block_optimization = 0; + + if (iseq->body->type == ISEQ_TYPE_BLOCK && !iseq->body->catch_except_p) { + do_block_optimization = 1; + } + while (list) { if (IS_INSN(list)) { if (do_peepholeopt) { @@ -3394,6 +3599,13 @@ iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) if (do_ou) { insn_operands_unification((INSN *)list); } + + if (do_block_optimization) { + INSN * item = (INSN *)list; + if (IS_INSN_ID(item, jump)) { + do_block_optimization = 0; + } + } } if (IS_LABEL(list)) { switch (((LABEL *)list)->rescued) { @@ -3408,6 +3620,13 @@ iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) } 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; } @@ -3430,8 +3649,7 @@ new_unified_insn(rb_iseq_t *iseq, } if (argc > 0) { - ptr = operands = - compile_data_alloc2(iseq, sizeof(VALUE), argc); + ptr = operands = compile_data_alloc2(iseq, sizeof(VALUE), argc); } /* copy operands */ @@ -3443,7 +3661,8 @@ new_unified_insn(rb_iseq_t *iseq, list = list->next; } - return new_insn_core(iseq, iobj->insn_info.line_no, insn_id, argc, operands); + NODE dummy_line_node = generate_dummy_line_node(iobj->insn_info.line_no, iobj->insn_info.node_id); + return new_insn_core(iseq, &dummy_line_node, insn_id, argc, operands); } #endif @@ -3594,8 +3813,9 @@ iseq_set_sequence_stackcaching(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) { /* exception merge point */ if (state != SCS_AX) { + NODE dummy_line_node = generate_dummy_line_node(0, -1); INSN *rpobj = - new_insn_body(iseq, 0, BIN(reput), 0); + new_insn_body(iseq, &dummy_line_node, BIN(reput), 0); /* replace this insn */ ELEM_REPLACE(list, (LINK_ELEMENT *)rpobj); @@ -3703,16 +3923,16 @@ compile_dstr_fragments(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *cons return COMPILE_NG; } lit = rb_fstring(lit); - ADD_INSN1(ret, nd_line(node), putobject, lit); + ADD_INSN1(ret, node, putobject, lit); RB_OBJ_WRITTEN(iseq, Qundef, lit); if (RSTRING_LEN(lit) == 0) first_lit = LAST_ELEMENT(ret); } while (list) { const NODE *const head = list->nd_head; - if (nd_type(head) == NODE_STR) { + if (nd_type_p(head, NODE_STR)) { lit = rb_fstring(head->nd_lit); - ADD_INSN1(ret, nd_line(head), putobject, lit); + ADD_INSN1(ret, head, putobject, lit); RB_OBJ_WRITTEN(iseq, Qundef, lit); lit = Qnil; } @@ -3731,12 +3951,33 @@ compile_dstr_fragments(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *cons 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", node->nd_head, + (node->nd_next ? 1 : popped))); + node = node->nd_next; + } + if (node) { + CHECK(COMPILE_(ret, "BLOCK next", node->nd_next, popped)); + } + return COMPILE_OK; +} + static int compile_dstr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node) { int cnt; - CHECK(compile_dstr_fragments(iseq, ret, node, &cnt)); - ADD_INSN1(ret, nd_line(node), concatstrings, INT2FIX(cnt)); + if (!node->nd_next) { + VALUE lit = rb_fstring(node->nd_lit); + ADD_INSN1(ret, node, putstring, lit); + RB_OBJ_WRITTEN(iseq, Qundef, lit); + } + else { + CHECK(compile_dstr_fragments(iseq, ret, node, &cnt)); + ADD_INSN1(ret, node, concatstrings, INT2FIX(cnt)); + } return COMPILE_OK; } @@ -3745,7 +3986,7 @@ compile_dregx(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node) { int cnt; CHECK(compile_dstr_fragments(iseq, ret, node, &cnt)); - ADD_INSN2(ret, nd_line(node), toregexp, INT2FIX(node->nd_cflag), INT2FIX(cnt)); + ADD_INSN2(ret, node, toregexp, INT2FIX(node->nd_cflag), INT2FIX(cnt)); return COMPILE_OK; } @@ -3759,25 +4000,25 @@ compile_flip_flop(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const nod + VM_SVAR_FLIPFLOP_START; VALUE key = INT2FIX(cnt); - ADD_INSN2(ret, line, getspecial, key, INT2FIX(0)); - ADD_INSNL(ret, line, branchif, lend); + ADD_INSN2(ret, node, getspecial, key, INT2FIX(0)); + ADD_INSNL(ret, node, branchif, lend); /* *flip == 0 */ CHECK(COMPILE(ret, "flip2 beg", node->nd_beg)); - ADD_INSNL(ret, line, branchunless, else_label); - ADD_INSN1(ret, line, putobject, Qtrue); - ADD_INSN1(ret, line, setspecial, key); + ADD_INSNL(ret, node, branchunless, else_label); + ADD_INSN1(ret, node, putobject, Qtrue); + ADD_INSN1(ret, node, setspecial, key); if (!again) { - ADD_INSNL(ret, line, jump, then_label); + ADD_INSNL(ret, node, jump, then_label); } /* *flip == 1 */ ADD_LABEL(ret, lend); CHECK(COMPILE(ret, "flip2 end", node->nd_end)); - ADD_INSNL(ret, line, branchunless, then_label); - ADD_INSN1(ret, line, putobject, Qfalse); - ADD_INSN1(ret, line, setspecial, key); - ADD_INSNL(ret, line, jump, then_label); + 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; } @@ -3793,7 +4034,10 @@ compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *co LABEL *label = NEW_LABEL(nd_line(cond)); CHECK(compile_branch_condition(iseq, ret, cond->nd_1st, label, else_label)); - if (!label->refcnt) break; + if (!label->refcnt) { + ADD_INSN(ret, cond, putnil); + break; + } ADD_LABEL(ret, label); cond = cond->nd_2nd; goto again; @@ -3803,7 +4047,10 @@ compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *co LABEL *label = NEW_LABEL(nd_line(cond)); CHECK(compile_branch_condition(iseq, ret, cond->nd_1st, then_label, label)); - if (!label->refcnt) break; + if (!label->refcnt) { + ADD_INSN(ret, cond, putnil); + break; + } ADD_LABEL(ret, label); cond = cond->nd_2nd; goto again; @@ -3814,69 +4061,78 @@ compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *co case NODE_ZLIST: case NODE_LAMBDA: /* printf("useless condition eliminate (%s)\n", ruby_node_name(nd_type(cond))); */ - ADD_INSNL(ret, nd_line(cond), jump, then_label); - break; + 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; + 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, nd_line(cond), jump, then_label); - break; + 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)); - break; + return COMPILE_OK; case NODE_FLIP3: CHECK(compile_flip_flop(iseq, ret, cond, FALSE, then_label, else_label)); - break; + return COMPILE_OK; case NODE_DEFINED: CHECK(compile_defined_expr(iseq, ret, cond, Qfalse)); - goto branch; + break; default: CHECK(COMPILE(ret, "branch condition", cond)); - branch: - ADD_INSNL(ret, nd_line(cond), branchunless, else_label); - ADD_INSNL(ret, nd_line(cond), jump, then_label); - break; + break; } + + ADD_INSNL(ret, cond, branchunless, else_label); + ADD_INSNL(ret, cond, jump, then_label); return COMPILE_OK; } +#define HASH_BRACE 1 + static int keyword_node_p(const NODE *const node) { - return nd_type(node) == NODE_HASH && node->nd_brace == FALSE; + return nd_type_p(node, NODE_HASH) && (node->nd_brace & HASH_BRACE) != HASH_BRACE; } static int compile_keyword_arg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const root_node, - struct rb_call_info_kw_arg **const kw_arg_ptr, + struct rb_callinfo_kwarg **const kw_arg_ptr, unsigned int *flag) { if (kw_arg_ptr == NULL) return FALSE; - if (keyword_node_p(root_node) && root_node->nd_head && nd_type(root_node->nd_head) == NODE_LIST) { + if (root_node->nd_head && nd_type_p(root_node->nd_head, NODE_LIST)) { const NODE *node = root_node->nd_head; + int seen_nodes = 0; while (node) { const NODE *key_node = node->nd_head; + seen_nodes++; - assert(nd_type(node) == NODE_LIST); - if (!key_node) { - if (flag) *flag |= VM_CALL_KW_SPLAT; - return FALSE; - } - else if (nd_type(key_node) == NODE_LIT && RB_TYPE_P(key_node->nd_lit, T_SYMBOL)) { + assert(nd_type_p(node, NODE_LIST)); + if (key_node && nd_type_p(key_node, NODE_LIT) && SYMBOL_P(key_node->nd_lit)) { /* can be keywords */ } else { - if (flag) *flag |= VM_CALL_KW_SPLAT; + if (flag) { + *flag |= VM_CALL_KW_SPLAT; + if (seen_nodes > 1 || 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 = node->nd_next; /* skip value node */ @@ -3887,8 +4143,8 @@ compile_keyword_arg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, node = root_node->nd_head; { int len = (int)node->nd_alen / 2; - struct rb_call_info_kw_arg *kw_arg = - rb_xmalloc_mul_add(len - 1, sizeof(VALUE), sizeof(struct rb_call_info_kw_arg)); + 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; kw_arg->keyword_len = len; @@ -3910,7 +4166,7 @@ compile_keyword_arg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, static int compile_args(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, - struct rb_call_info_kw_arg **keywords_ptr, unsigned int *flag) + struct rb_callinfo_kwarg **keywords_ptr, unsigned int *flag) { int len = 0; @@ -3919,9 +4175,13 @@ compile_args(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, EXPECT_NODE("compile_args", node, NODE_LIST, -1); } - if (node->nd_next == NULL /* last node */ && - compile_keyword_arg(iseq, ret, node->nd_head, keywords_ptr, flag)) { - len--; + if (node->nd_next == NULL && keyword_node_p(node->nd_head)) { /* last node */ + if (compile_keyword_arg(iseq, ret, node->nd_head, keywords_ptr, flag)) { + len--; + } + else { + compile_hash(iseq, ret, node->nd_head, TRUE, FALSE); + } } else { NO_CHECK(COMPILE_(ret, "array element", node->nd_head, FALSE)); @@ -3934,7 +4194,6 @@ compile_args(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, static inline int static_literal_node_p(const NODE *node, const rb_iseq_t *iseq) { - node = node->nd_head; switch (nd_type(node)) { case NODE_LIT: case NODE_NIL: @@ -3951,7 +4210,6 @@ static_literal_node_p(const NODE *node, const rb_iseq_t *iseq) static inline VALUE static_literal_value(const NODE *node, rb_iseq_t *iseq) { - node = node->nd_head; switch (nd_type(node)) { case NODE_NIL: return Qnil; @@ -3978,11 +4236,11 @@ static_literal_value(const NODE *node, rb_iseq_t *iseq) static int compile_array(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int popped) { - int line = (int)nd_line(node); + const NODE *line_node = node; - if (nd_type(node) == NODE_ZLIST) { + if (nd_type_p(node, NODE_ZLIST)) { if (!popped) { - ADD_INSN1(ret, line, newarray, INT2FIX(0)); + ADD_INSN1(ret, line_node, newarray, INT2FIX(0)); } return 0; } @@ -4041,8 +4299,8 @@ compile_array(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int pop /* Convert pushed elements to an array, and concatarray if needed */ #define FLUSH_CHUNK(newarrayinsn) \ if (stack_len) { \ - ADD_INSN1(ret, line, newarrayinsn, INT2FIX(stack_len)); \ - if (!first_chunk) ADD_INSN(ret, line, concatarray); \ + ADD_INSN1(ret, line_node, newarrayinsn, INT2FIX(stack_len)); \ + if (!first_chunk) ADD_INSN(ret, line_node, concatarray); \ first_chunk = stack_len = 0; \ } @@ -4050,10 +4308,10 @@ compile_array(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int pop int count = 1; /* pre-allocation check (this branch can be omittable) */ - if (static_literal_node_p(node, iseq)) { + if (static_literal_node_p(node->nd_head, iseq)) { /* count the elements that are optimizable */ const NODE *node_tmp = node->nd_next; - for (; node_tmp && static_literal_node_p(node_tmp, iseq); node_tmp = node_tmp->nd_next) + for (; node_tmp && static_literal_node_p(node_tmp->nd_head, iseq); node_tmp = node_tmp->nd_next) count++; if ((first_chunk && stack_len == 0 && !node_tmp) || count >= min_tmp_ary_len) { @@ -4062,18 +4320,18 @@ compile_array(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int pop /* Create a hidden array */ for (; count; count--, node = node->nd_next) - rb_ary_push(ary, static_literal_value(node, iseq)); + rb_ary_push(ary, static_literal_value(node->nd_head, iseq)); OBJ_FREEZE(ary); /* Emit optimized code */ FLUSH_CHUNK(newarray); if (first_chunk) { - ADD_INSN1(ret, line, duparray, ary); + ADD_INSN1(ret, line_node, duparray, ary); first_chunk = 0; } else { - ADD_INSN1(ret, line, putobject, ary); - ADD_INSN(ret, line, concatarray); + ADD_INSN1(ret, line_node, putobject, ary); + ADD_INSN(ret, line_node, concatarray); } RB_OBJ_WRITTEN(iseq, Qundef, ary); } @@ -4104,22 +4362,41 @@ compile_array(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int pop return 1; } +/* Compile an array containing the single element represented by node */ +static int +compile_array_1(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node) +{ + if (static_literal_node_p(node, iseq)) { + VALUE ary = rb_ary_tmp_new(1); + rb_ary_push(ary, static_literal_value(node, iseq)); + OBJ_FREEZE(ary); + + ADD_INSN1(ret, node, duparray, ary); + } + else { + CHECK(COMPILE_(ret, "array element", node, FALSE)); + ADD_INSN1(ret, node, newarray, INT2FIX(1)); + } + + return 1; +} + static inline int static_literal_node_pair_p(const NODE *node, const rb_iseq_t *iseq) { - return node->nd_head && static_literal_node_p(node, iseq) && static_literal_node_p(node->nd_next, iseq); + return node->nd_head && static_literal_node_p(node->nd_head, iseq) && static_literal_node_p(node->nd_next->nd_head, iseq); } static int -compile_hash(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int popped) +compile_hash(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int method_call_keywords, int popped) { - int line = (int)nd_line(node); + const NODE *line_node = node; node = node->nd_head; - if (!node || nd_type(node) == NODE_ZLIST) { + if (!node || nd_type_p(node, NODE_ZLIST)) { if (!popped) { - ADD_INSN1(ret, line, newhash, INT2FIX(0)); + ADD_INSN1(ret, line_node, newhash, INT2FIX(0)); } return 0; } @@ -4163,13 +4440,13 @@ compile_hash(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int popp if (stack_len) { \ if (first_chunk) { \ APPEND_LIST(ret, anchor); \ - ADD_INSN1(ret, line, newhash, INT2FIX(stack_len)); \ + ADD_INSN1(ret, line_node, newhash, INT2FIX(stack_len)); \ } \ else { \ - ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); \ - ADD_INSN(ret, line, swap); \ + 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, id_core_hash_merge_ptr, INT2FIX(stack_len + 1)); \ + ADD_SEND(ret, line_node, id_core_hash_merge_ptr, INT2FIX(stack_len + 1)); \ } \ INIT_ANCHOR(anchor); \ first_chunk = stack_len = 0; \ @@ -4192,8 +4469,8 @@ compile_hash(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int popp /* Create a hidden hash */ for (; count; count--, node = node->nd_next->nd_next) { VALUE elem[2]; - elem[0] = static_literal_value(node, iseq); - elem[1] = static_literal_value(node->nd_next, iseq); + elem[0] = static_literal_value(node->nd_head, iseq); + elem[1] = static_literal_value(node->nd_next->nd_head, iseq); rb_ary_cat(ary, elem, 2); } VALUE hash = rb_hash_new_with_size(RARRAY_LEN(ary) / 2); @@ -4204,16 +4481,16 @@ compile_hash(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int popp /* Emit optimized code */ FLUSH_CHUNK(); if (first_chunk) { - ADD_INSN1(ret, line, duphash, hash); + ADD_INSN1(ret, line_node, duphash, hash); first_chunk = 0; } else { - ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - ADD_INSN(ret, line, swap); + ADD_INSN1(ret, line_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); + ADD_INSN(ret, line_node, swap); - ADD_INSN1(ret, line, putobject, hash); + ADD_INSN1(ret, line_node, putobject, hash); - ADD_SEND(ret, line, id_core_hash_merge_kwd, INT2FIX(2)); + ADD_SEND(ret, line_node, id_core_hash_merge_kwd, INT2FIX(2)); } RB_OBJ_WRITTEN(iseq, Qundef, hash); } @@ -4240,39 +4517,55 @@ compile_hash(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int popp FLUSH_CHUNK(); const NODE *kw = node->nd_next->nd_head; - int empty_kw = nd_type(kw) == NODE_LIT; /* foo( ..., **{}, ...) */ + int empty_kw = nd_type_p(kw, NODE_LIT) && RB_TYPE_P(kw->nd_lit, T_HASH); /* foo( ..., **{}, ...) */ int first_kw = first_chunk && stack_len == 0; /* foo(1,2,3, **kw, ...) */ int last_kw = !node->nd_next->nd_next; /* foo( ..., **kw) */ int only_kw = last_kw && first_kw; /* foo(1,2,3, **kw) */ if (empty_kw) { - if (only_kw) { - /* **{} appears at the last, so it won't be modified. + 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 {} + * 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 at the first, so it may be modified. + /* **{} appears as the first keyword argument, so it may be modified. * We need to create a fresh hash object. */ - ADD_INSN1(ret, line, newhash, INT2FIX(0)); + 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 { - /* This is not empty hash: **{k:1}. - * We need to clone the hash (if first), or merge the hash to - * the accumulated hash (if not first). - */ - ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - if (first_kw) ADD_INSN1(ret, line, newhash, INT2FIX(0)); - else ADD_INSN(ret, line, swap); - - NO_CHECK(COMPILE(ret, "keyword splat", kw)); - - ADD_SEND(ret, line, id_core_hash_merge_kwd, INT2FIX(2)); - } + 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; } @@ -4291,10 +4584,13 @@ rb_node_case_when_optimizable_literal(const NODE *const node) case NODE_LIT: { VALUE v = node->nd_lit; double ival; - if (RB_TYPE_P(v, T_FLOAT) && + if (RB_FLOAT_TYPE_P(v) && modf(RFLOAT_VALUE(v), &ival) == 0.0) { return FIXABLE(ival) ? LONG2FIX((long)ival) : rb_dbl2big(ival); } + if (RB_TYPE_P(v, T_RATIONAL) || RB_TYPE_P(v, T_COMPLEX)) { + return Qundef; + } if (SYMBOL_P(v) || rb_obj_is_kind_of(v, rb_cNumeric)) { return v; } @@ -4327,20 +4623,20 @@ when_vals(rb_iseq_t *iseq, LINK_ANCHOR *const cond_seq, const NODE *vals, rb_hash_aset(literals, lit, (VALUE)(l1) | 1); } - ADD_INSN(cond_seq, nd_line(val), dup); /* dup target */ - - if (nd_type(val) == NODE_STR) { + if (nd_type_p(val, NODE_STR)) { debugp_param("nd_lit", val->nd_lit); lit = rb_fstring(val->nd_lit); - ADD_INSN1(cond_seq, nd_line(val), putobject, lit); + ADD_INSN1(cond_seq, val, putobject, lit); RB_OBJ_WRITTEN(iseq, Qundef, lit); } else { if (!COMPILE(cond_seq, "when cond", val)) return -1; } - ADD_INSN1(cond_seq, nd_line(vals), checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE)); - ADD_INSNL(cond_seq, nd_line(val), branchif, l1); + // Emit patern === 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 = vals->nd_next; } return only_special_literals; @@ -4350,7 +4646,7 @@ static int when_splat_vals(rb_iseq_t *iseq, LINK_ANCHOR *const cond_seq, const NODE *vals, LABEL *l1, int only_special_literals, VALUE literals) { - const int line = nd_line(vals); + const NODE *line_node = vals; switch (nd_type(vals)) { case NODE_LIST: @@ -4358,11 +4654,11 @@ when_splat_vals(rb_iseq_t *iseq, LINK_ANCHOR *const cond_seq, const NODE *vals, return COMPILE_NG; break; case NODE_SPLAT: - ADD_INSN (cond_seq, line, dup); + ADD_INSN (cond_seq, line_node, dup); CHECK(COMPILE(cond_seq, "when splat", vals->nd_head)); - ADD_INSN1(cond_seq, line, splatarray, Qfalse); - ADD_INSN1(cond_seq, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE | VM_CHECKMATCH_ARRAY)); - ADD_INSNL(cond_seq, line, branchif, l1); + 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, vals->nd_head, l1, only_special_literals, literals)); @@ -4370,55 +4666,213 @@ when_splat_vals(rb_iseq_t *iseq, LINK_ANCHOR *const cond_seq, const NODE *vals, break; case NODE_ARGSPUSH: CHECK(when_splat_vals(iseq, cond_seq, vals->nd_head, l1, only_special_literals, literals)); - ADD_INSN (cond_seq, line, dup); + ADD_INSN (cond_seq, line_node, dup); CHECK(COMPILE(cond_seq, "when argspush body", vals->nd_body)); - ADD_INSN1(cond_seq, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE)); - ADD_INSNL(cond_seq, line, branchif, l1); + 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, dup); + ADD_INSN (cond_seq, line_node, dup); CHECK(COMPILE(cond_seq, "when val", vals)); - ADD_INSN1(cond_seq, line, splatarray, Qfalse); - ADD_INSN1(cond_seq, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE | VM_CHECKMATCH_ARRAY)); - ADD_INSNL(cond_seq, line, branchif, l1); + 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. If so, we add + * instructions to evaluate the receiver of any assigned attributes 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_attrasgn 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_attrasgn { + INSN *before_insn; + struct masgn_attrasgn *next; + const NODE *line_node; + int argn; + int num_args; + int lhs_pos; +}; + +struct masgn_state { + struct masgn_attrasgn *first_memo; + struct masgn_attrasgn *last_memo; + int lhs_level; + int num_args; + bool nested; +}; + +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 ret, const NODE *const node) +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: { + if (!state) { + rb_bug("no masgn_state"); + } + INSN *iobj; - struct rb_call_info *ci; - VALUE dupidx; - int line = nd_line(node); + const NODE *line_node = node; - CHECK(COMPILE_POPPED(ret, "masgn lhs (NODE_ATTRASGN)", node)); + CHECK(COMPILE_POPPED(pre, "masgn lhs (NODE_ATTRASGN)", node)); - iobj = (INSN *)get_prev_insn((INSN *)LAST_ELEMENT(ret)); /* send insn */ - ci = (struct rb_call_info *)OPERAND_AT(iobj, 0); - ci->orig_argc += 1; - dupidx = INT2FIX(ci->orig_argc); + LINK_ELEMENT *insn_element = LAST_ELEMENT(pre); + iobj = (INSN *)get_prev_insn((INSN *)insn_element); /* send insn */ + ASSUME(iobj); + ELEM_REMOVE(LAST_ELEMENT(pre)); + ELEM_REMOVE((LINK_ELEMENT *)iobj); + pre->last = iobj->link.prev; - 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 */ + 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)); + } + + struct masgn_attrasgn *memo; + memo = malloc(sizeof(struct masgn_attrasgn)); + if (!memo) { + return 0; + } + memo->before_insn = (INSN *)LAST_ELEMENT(lhs); + 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; + + ADD_ELEM(lhs, (LINK_ELEMENT *)iobj); + if (vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT) { + int argc = vm_ci_argc(ci); + ci = ci_argc_set(iseq, ci, argc - 1); + OPERAND_AT(iobj, 0) = (VALUE)ci; + RB_OBJ_WRITTEN(iseq, Qundef, iobj); + INSERT_BEFORE_INSN1(iobj, line_node, newarray, INT2FIX(1)); + INSERT_BEFORE_INSN(iobj, line_node, concatarray); + } + 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); - CHECK(COMPILE_POPPED(anchor, "nest masgn lhs", node)); - ELEM_REMOVE(FIRST_ELEMENT(anchor)); - ADD_SEQ(ret, anchor); + 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; } default: { @@ -4426,7 +4880,7 @@ compile_massign_lhs(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const n INIT_ANCHOR(anchor); CHECK(COMPILE_POPPED(anchor, "masgn lhs", node)); ELEM_REMOVE(FIRST_ELEMENT(anchor)); - ADD_SEQ(ret, anchor); + ADD_SEQ(lhs, anchor); } } @@ -4438,7 +4892,7 @@ compile_massign_opt_lhs(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *lhs { if (lhsn) { CHECK(compile_massign_opt_lhs(iseq, ret, lhsn->nd_next)); - CHECK(compile_massign_lhs(iseq, ret, lhsn->nd_head)); + CHECK(compile_massign_lhs(iseq, ret, ret, ret, ret, lhsn->nd_head, NULL, 0)); } return COMPILE_OK; } @@ -4463,7 +4917,7 @@ compile_massign_opt(rb_iseq_t *iseq, LINK_ANCHOR *const ret, mem[memindex++] = (v); \ } - if (rhsn == 0 || nd_type(rhsn) != NODE_LIST) { + if (rhsn == 0 || !nd_type_p(rhsn, NODE_LIST)) { return 0; } @@ -4474,7 +4928,6 @@ compile_massign_opt(rb_iseq_t *iseq, LINK_ANCHOR *const ret, MEMORY(ln->nd_vid); break; case NODE_DASGN: - case NODE_DASGN_CURR: case NODE_IASGN: case NODE_CVASGN: MEMORY(ln->nd_vid); @@ -4499,7 +4952,7 @@ compile_massign_opt(rb_iseq_t *iseq, LINK_ANCHOR *const ret, if (llen > rlen) { for (i=0; i llen) { - do {ADD_INSN(ret, line, pop);} while (--rlen > llen); - } -} - static int -compile_massign(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped) +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 = node->nd_value; const NODE *splatn = node->nd_args; const NODE *lhsn = node->nd_head; + const NODE *lhsn_count = lhsn; int lhs_splat = (splatn && NODE_NAMED_REST_P(splatn)) ? 1 : 0; - if (!popped || splatn || !compile_massign_opt(iseq, ret, rhsn, lhsn)) { - int llen = 0; - int expand = 1; - DECL_ANCHOR(lhsseq); + int llen = 0; + int lpos = 0; + int expand = 1; + + while (lhsn_count) { + llen++; + lhsn_count = lhsn_count->nd_next; + } + while (lhsn) { + CHECK(compile_massign_lhs(iseq, pre, rhs, lhs, post, lhsn->nd_head, state, (llen - lpos) + lhs_splat + state->lhs_level)); + lpos++; + lhsn = lhsn->nd_next; + } - INIT_ANCHOR(lhsseq); + if (lhs_splat) { + if (nd_type_p(splatn, NODE_POSTARG)) { + /*a, b, *r, p1, p2 */ + const NODE *postn = splatn->nd_2nd; + const NODE *restn = splatn->nd_1st; + int plen = (int)postn->nd_alen; + int ppos = 0; + int flag = 0x02 | (NODE_NAMED_REST_P(restn) ? 0x01 : 0x00); - while (lhsn) { - CHECK(compile_massign_lhs(iseq, lhsseq, lhsn->nd_head)); - llen += 1; - lhsn = lhsn->nd_next; - } + ADD_INSN2(lhs, splatn, expandarray, INT2FIX(plen), INT2FIX(flag)); - NO_CHECK(COMPILE(ret, "normal masgn rhs", rhsn)); + 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, postn->nd_head, state, (plen - ppos) + state->lhs_level)); + ppos++; + postn = postn->nd_next; + } + } + else { + /* a, b, *r */ + CHECK(compile_massign_lhs(iseq, pre, rhs, lhs, post, splatn, state, 1 + state->lhs_level)); + } + } - if (!popped) { - ADD_INSN(ret, nd_line(node), dup); - } - else if (!lhs_splat) { - INSN *last = (INSN*)ret->last; - if (IS_INSN(&last->link) && - IS_INSN_ID(last, 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 */ - const NODE *postn = splatn->nd_2nd; - const NODE *restn = splatn->nd_1st; - int num = (int)postn->nd_alen; - int flag = 0x02 | (NODE_NAMED_REST_P(restn) ? 0x01 : 0x00); + if (!state->nested) { + NO_CHECK(COMPILE(rhs, "normal masgn rhs", rhsn)); + } - ADD_INSN2(ret, nd_line(splatn), expandarray, - INT2FIX(num), INT2FIX(flag)); + if (!popped) { + ADD_INSN(rhs, node, dup); + } + if (expand) { + ADD_INSN2(rhs, node, expandarray, INT2FIX(llen), INT2FIX(lhs_splat)); + } + return COMPILE_OK; +} - if (NODE_NAMED_REST_P(restn)) { - CHECK(compile_massign_lhs(iseq, ret, restn)); - } - while (postn) { - CHECK(compile_massign_lhs(iseq, ret, postn->nd_head)); - postn = postn->nd_next; - } - } - else { - /* a, b, *r */ - CHECK(compile_massign_lhs(iseq, ret, splatn)); - } - } +static int +compile_massign(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped) +{ + if (!popped || node->nd_args || !compile_massign_opt(iseq, ret, node->nd_value, 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_attrasgn *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, 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; } @@ -4610,21 +5075,21 @@ compile_const_prefix(rb_iseq_t *iseq, const NODE *const node, switch (nd_type(node)) { case NODE_CONST: debugi("compile_const_prefix - colon", node->nd_vid); - ADD_INSN1(body, nd_line(node), putobject, Qtrue); - ADD_INSN1(body, nd_line(node), getconstant, ID2SYM(node->nd_vid)); + ADD_INSN1(body, node, putobject, Qtrue); + ADD_INSN1(body, node, getconstant, ID2SYM(node->nd_vid)); break; case NODE_COLON3: debugi("compile_const_prefix - 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), putobject, Qtrue); - ADD_INSN1(body, nd_line(node), getconstant, ID2SYM(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(node->nd_mid)); break; case NODE_COLON2: CHECK(compile_const_prefix(iseq, node->nd_head, pref, body)); debugi("compile_const_prefix - colon2", node->nd_mid); - ADD_INSN1(body, nd_line(node), putobject, Qfalse); - ADD_INSN1(body, nd_line(node), getconstant, ID2SYM(node->nd_mid)); + ADD_INSN1(body, node, putobject, Qfalse); + ADD_INSN1(body, node, getconstant, ID2SYM(node->nd_mid)); break; default: CHECK(COMPILE(pref, "const colon2 prefix", node)); @@ -4636,9 +5101,9 @@ compile_const_prefix(rb_iseq_t *iseq, const NODE *const node, static int compile_cpath(LINK_ANCHOR *const ret, rb_iseq_t *iseq, const NODE *cpath) { - if (nd_type(cpath) == NODE_COLON3) { + if (nd_type_p(cpath, NODE_COLON3)) { /* toplevel class ::Foo */ - ADD_INSN1(ret, nd_line(cpath), putobject, rb_cObject); + ADD_INSN1(ret, cpath, putobject, rb_cObject); return VM_DEFINECLASS_FLAG_SCOPED; } else if (cpath->nd_head) { @@ -4648,7 +5113,7 @@ compile_cpath(LINK_ANCHOR *const ret, rb_iseq_t *iseq, const NODE *cpath) } else { /* class at cbase Foo */ - ADD_INSN1(ret, nd_line(cpath), putspecialobject, + ADD_INSN1(ret, cpath, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CONST_BASE)); return 0; } @@ -4657,7 +5122,7 @@ compile_cpath(LINK_ANCHOR *const ret, rb_iseq_t *iseq, const NODE *cpath) static inline int private_recv_p(const NODE *node) { - if (nd_type(node->nd_recv) == NODE_SELF) { + if (nd_type_p(node->nd_recv, NODE_SELF)) { NODE *self = node->nd_recv; return self->nd_state != 0; } @@ -4668,13 +5133,18 @@ static void defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, LABEL **lfinish, VALUE needstr); +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); + static void defined_expr0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, - const NODE *const node, LABEL **lfinish, VALUE needstr) + const NODE *const node, LABEL **lfinish, VALUE needstr, + bool keep_result) { 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)) { @@ -4696,12 +5166,12 @@ defined_expr0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *vals = node; do { - defined_expr0(iseq, ret, vals->nd_head, lfinish, Qfalse); + defined_expr0(iseq, ret, vals->nd_head, lfinish, Qfalse, false); if (!lfinish[1]) { lfinish[1] = NEW_LABEL(line); } - ADD_INSNL(ret, line, branchunless, lfinish[1]); + ADD_INSNL(ret, line_node, branchunless, lfinish[1]); } while ((vals = vals->nd_next) != NULL); } /* fall through */ @@ -4720,46 +5190,51 @@ defined_expr0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, expr_type = DEFINED_LVAR; break; +#define PUSH_VAL(type) (needstr == Qfalse ? Qtrue : rb_iseq_defined_string(type)) case NODE_IVAR: - ADD_INSN(ret, line, putnil); - ADD_INSN3(ret, line, defined, INT2FIX(DEFINED_IVAR), - ID2SYM(node->nd_vid), needstr); + ADD_INSN(ret, line_node, putnil); + ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_IVAR), + ID2SYM(node->nd_vid), PUSH_VAL(DEFINED_IVAR)); return; case NODE_GVAR: - ADD_INSN(ret, line, putnil); - ADD_INSN3(ret, line, defined, INT2FIX(DEFINED_GVAR), - ID2SYM(node->nd_entry->id), needstr); + ADD_INSN(ret, line_node, putnil); + ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_GVAR), + ID2SYM(node->nd_entry), PUSH_VAL(DEFINED_GVAR)); return; case NODE_CVAR: - ADD_INSN(ret, line, putnil); - ADD_INSN3(ret, line, defined, INT2FIX(DEFINED_CVAR), - ID2SYM(node->nd_vid), needstr); + ADD_INSN(ret, line_node, putnil); + ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_CVAR), + ID2SYM(node->nd_vid), PUSH_VAL(DEFINED_CVAR)); return; case NODE_CONST: - ADD_INSN(ret, line, putnil); - ADD_INSN3(ret, line, defined, INT2FIX(DEFINED_CONST), - ID2SYM(node->nd_vid), needstr); + ADD_INSN(ret, line_node, putnil); + ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_CONST), + ID2SYM(node->nd_vid), PUSH_VAL(DEFINED_CONST)); return; case NODE_COLON2: if (!lfinish[1]) { lfinish[1] = NEW_LABEL(line); } - defined_expr0(iseq, ret, node->nd_head, lfinish, Qfalse); - ADD_INSNL(ret, line, branchunless, lfinish[1]); + defined_expr0(iseq, ret, node->nd_head, lfinish, Qfalse, false); + ADD_INSNL(ret, line_node, branchunless, lfinish[1]); NO_CHECK(COMPILE(ret, "defined/colon2#nd_head", node->nd_head)); - ADD_INSN3(ret, line, defined, - (rb_is_const_id(node->nd_mid) ? - INT2FIX(DEFINED_CONST_FROM) : INT2FIX(DEFINED_METHOD)), - ID2SYM(node->nd_mid), needstr); + if (rb_is_const_id(node->nd_mid)) { + ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_CONST_FROM), + ID2SYM(node->nd_mid), PUSH_VAL(DEFINED_CONST)); + } + else { + ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_METHOD), + ID2SYM(node->nd_mid), PUSH_VAL(DEFINED_METHOD)); + } return; case NODE_COLON3: - ADD_INSN1(ret, line, putobject, rb_cObject); - ADD_INSN3(ret, line, defined, - INT2FIX(DEFINED_CONST_FROM), ID2SYM(node->nd_mid), needstr); + ADD_INSN1(ret, line_node, putobject, rb_cObject); + ADD_INSN3(ret, line_node, defined, + INT2FIX(DEFINED_CONST_FROM), ID2SYM(node->nd_mid), PUSH_VAL(DEFINED_CONST)); return; /* method dispatch */ @@ -4772,49 +5247,73 @@ defined_expr0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, (type == NODE_CALL || type == NODE_OPCALL || (type == NODE_ATTRASGN && !private_recv_p(node))); - if (!lfinish[1] && (node->nd_args || explicit_receiver)) { - lfinish[1] = NEW_LABEL(line); - } + if (node->nd_args || explicit_receiver) { + if (!lfinish[1]) { + lfinish[1] = NEW_LABEL(line); + } + if (!lfinish[2]) { + lfinish[2] = NEW_LABEL(line); + } + } if (node->nd_args) { - defined_expr0(iseq, ret, node->nd_args, lfinish, Qfalse); - ADD_INSNL(ret, line, branchunless, lfinish[1]); + defined_expr0(iseq, ret, node->nd_args, lfinish, Qfalse, false); + ADD_INSNL(ret, line_node, branchunless, lfinish[1]); } if (explicit_receiver) { - defined_expr0(iseq, ret, node->nd_recv, lfinish, Qfalse); - ADD_INSNL(ret, line, branchunless, lfinish[1]); - NO_CHECK(COMPILE(ret, "defined/recv", node->nd_recv)); - ADD_INSN3(ret, line, defined, INT2FIX(DEFINED_METHOD), - ID2SYM(node->nd_mid), needstr); + defined_expr0(iseq, ret, node->nd_recv, lfinish, Qfalse, true); + switch (nd_type(node->nd_recv)) { + 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, node->nd_recv, nd_type(node->nd_recv), line_node, 0, true); + break; + default: + ADD_INSNL(ret, line_node, branchunless, lfinish[1]); + NO_CHECK(COMPILE(ret, "defined/recv", node->nd_recv)); + break; + } + if (keep_result) { + ADD_INSN(ret, line_node, dup); + } + ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_METHOD), + ID2SYM(node->nd_mid), PUSH_VAL(DEFINED_METHOD)); } else { - ADD_INSN(ret, line, putself); - ADD_INSN3(ret, line, defined, INT2FIX(DEFINED_FUNC), - ID2SYM(node->nd_mid), needstr); + 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(node->nd_mid), PUSH_VAL(DEFINED_METHOD)); } return; } case NODE_YIELD: - ADD_INSN(ret, line, putnil); - ADD_INSN3(ret, line, defined, INT2FIX(DEFINED_YIELD), 0, - needstr); + ADD_INSN(ret, line_node, putnil); + ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_YIELD), 0, + PUSH_VAL(DEFINED_YIELD)); return; case NODE_BACK_REF: case NODE_NTH_REF: - ADD_INSN(ret, line, putnil); - ADD_INSN3(ret, line, defined, INT2FIX(DEFINED_REF), + ADD_INSN(ret, line_node, putnil); + ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_REF), INT2FIX((node->nd_nth << 1) | (type == NODE_BACK_REF)), - needstr); + PUSH_VAL(DEFINED_GVAR)); return; case NODE_SUPER: case NODE_ZSUPER: - ADD_INSN(ret, line, putnil); - ADD_INSN3(ret, line, defined, INT2FIX(DEFINED_ZSUPER), 0, - needstr); + 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: @@ -4822,7 +5321,6 @@ defined_expr0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, case NODE_MASGN: case NODE_LASGN: case NODE_DASGN: - case NODE_DASGN_CURR: case NODE_GASGN: case NODE_IASGN: case NODE_CDECL: @@ -4835,17 +5333,18 @@ defined_expr0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, if (needstr != Qfalse) { VALUE str = rb_iseq_defined_string(expr_type); - ADD_INSN1(ret, line, putobject, str); + ADD_INSN1(ret, line_node, putobject, str); } else { - ADD_INSN1(ret, line, putobject, Qtrue); + ADD_INSN1(ret, line_node, putobject, Qtrue); } } static void build_defined_rescue_iseq(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const void *unused) { - ADD_INSN(ret, 0, putnil); + NODE dummy_line_node = generate_dummy_line_node(0, -1); + ADD_INSN(ret, &dummy_line_node, putnil); iseq_set_exception_local_table(iseq); } @@ -4854,7 +5353,7 @@ defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, LABEL **lfinish, VALUE needstr) { LINK_ELEMENT *lcur = ret->last; - 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); @@ -4878,20 +5377,25 @@ static int compile_defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE needstr) { const int line = nd_line(node); + const NODE *line_node = node; if (!node->nd_head) { VALUE str = rb_iseq_defined_string(DEFINED_NIL); - ADD_INSN1(ret, line, putobject, str); + ADD_INSN1(ret, line_node, putobject, str); } else { - LABEL *lfinish[2]; + LABEL *lfinish[3]; LINK_ELEMENT *last = ret->last; lfinish[0] = NEW_LABEL(line); lfinish[1] = 0; + lfinish[2] = 0; defined_expr(iseq, ret, node->nd_head, lfinish, needstr); if (lfinish[1]) { - ELEM_INSERT_NEXT(last, &new_insn_body(iseq, line, BIN(putnil), 0)->link); - ADD_INSN(ret, line, swap); - ADD_INSN(ret, line, pop); + ELEM_INSERT_NEXT(last, &new_insn_body(iseq, 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]); @@ -4951,9 +5455,24 @@ 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 *const ret, rb_iseq_t *iseq, int is_return) { + assert(can_add_ensure_iseq(iseq)); + struct iseq_compile_data_ensure_node_stack *enlp = ISEQ_COMPILE_DATA(iseq)->ensure_node_stack; struct iseq_compile_data_ensure_node_stack *prev_enlp = enlp; @@ -4991,7 +5510,7 @@ check_keyword(const NODE *node) { /* This check is essentially a code clone of compile_keyword_arg. */ - if (nd_type(node) == NODE_LIST) { + if (nd_type_p(node, NODE_LIST)) { while (node->nd_next) { node = node->nd_next; } @@ -5003,24 +5522,24 @@ check_keyword(const NODE *node) static VALUE setup_args_core(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, - int dup_rest, unsigned int *flag, struct rb_call_info_kw_arg **keywords) + int dup_rest, unsigned int *flag, struct rb_callinfo_kwarg **keywords) { if (argn) { switch (nd_type(argn)) { case NODE_SPLAT: { NO_CHECK(COMPILE(args, "args (splat)", argn->nd_head)); - ADD_INSN1(args, nd_line(argn), splatarray, dup_rest ? Qtrue : Qfalse); + ADD_INSN1(args, argn, splatarray, RBOOL(dup_rest)); if (flag) *flag |= VM_CALL_ARGS_SPLAT; return INT2FIX(1); } case NODE_ARGSCAT: case NODE_ARGSPUSH: { - int next_is_list = (nd_type(argn->nd_head) == NODE_LIST); + int next_is_list = (nd_type_p(argn->nd_head, NODE_LIST)); VALUE argc = setup_args_core(iseq, args, argn->nd_head, 1, NULL, NULL); - if (nd_type(argn->nd_body) == NODE_LIST) { + if (nd_type_p(argn->nd_body, NODE_LIST)) { /* This branch is needed to avoid "newarraykwsplat" [Bug #16442] */ int rest_len = compile_args(iseq, args, argn->nd_body, NULL, NULL); - ADD_INSN1(args, nd_line(argn), newarray, INT2FIX(rest_len)); + ADD_INSN1(args, argn, newarray, INT2FIX(rest_len)); } else { NO_CHECK(COMPILE(args, "args (cat: splat)", argn->nd_body)); @@ -5032,20 +5551,20 @@ setup_args_core(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, if (check_keyword(argn->nd_body)) *flag |= VM_CALL_KW_SPLAT; } - if (nd_type(argn) == NODE_ARGSCAT) { + if (nd_type_p(argn, NODE_ARGSCAT)) { if (next_is_list) { - ADD_INSN1(args, nd_line(argn), splatarray, Qtrue); + ADD_INSN1(args, argn, splatarray, Qtrue); return INT2FIX(FIX2INT(argc) + 1); } else { - ADD_INSN1(args, nd_line(argn), splatarray, Qfalse); - ADD_INSN(args, nd_line(argn), concatarray); + ADD_INSN1(args, argn, splatarray, Qfalse); + ADD_INSN(args, argn, concatarray); return argc; } } else { - ADD_INSN1(args, nd_line(argn), newarray, INT2FIX(1)); - ADD_INSN(args, nd_line(argn), concatarray); + ADD_INSN1(args, argn, newarray, INT2FIX(1)); + ADD_INSN(args, argn, concatarray); return argc; } } @@ -5063,16 +5582,16 @@ setup_args_core(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, static VALUE setup_args(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, - unsigned int *flag, struct rb_call_info_kw_arg **keywords) + unsigned int *flag, struct rb_callinfo_kwarg **keywords) { VALUE ret; - if (argn && nd_type(argn) == NODE_BLOCK_PASS) { + if (argn && nd_type_p(argn, NODE_BLOCK_PASS)) { + unsigned int dup_rest = 1; DECL_ANCHOR(arg_block); INIT_ANCHOR(arg_block); NO_CHECK(COMPILE(arg_block, "block", argn->nd_body)); *flag |= VM_CALL_ARGS_BLOCKARG; - ret = setup_args_core(iseq, args, argn->nd_head, 0, flag, keywords); if (LIST_INSN_SIZE_ONE(arg_block)) { LINK_ELEMENT *elem = FIRST_ELEMENT(arg_block); @@ -5081,8 +5600,10 @@ setup_args(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, if (iobj->insn_id == BIN(getblockparam)) { iobj->insn_id = BIN(getblockparamproxy); } + dup_rest = 0; } } + ret = setup_args_core(iseq, args, argn->nd_head, dup_rest, flag, keywords); ADD_SEQ(args, arg_block); } else { @@ -5099,8 +5620,8 @@ build_postexe_iseq(rb_iseq_t *iseq, LINK_ANCHOR *ret, const void *ptr) 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); - ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - ADD_CALL_WITH_BLOCK(ret, line, id_core_set_postexe, argc, block); + 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); } @@ -5111,25 +5632,26 @@ compile_named_capture_assign(rb_iseq_t *iseq, LINK_ANCHOR *const ret, 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, getglobal, ((VALUE)rb_global_entry(idBACKREF) | 1)); + ADD_INSN1(ret, line_node, getglobal, ID2SYM(idBACKREF)); #else - ADD_INSN2(ret, line, getspecial, INT2FIX(1) /* '~' */, INT2FIX(0)); + ADD_INSN2(ret, line_node, getspecial, INT2FIX(1) /* '~' */, INT2FIX(0)); #endif - ADD_INSN(ret, line, dup); - ADD_INSNL(ret, line, branchunless, fail_label); + ADD_INSN(ret, line_node, dup); + ADD_INSNL(ret, line_node, branchunless, fail_label); for (vars = node; vars; vars = vars->nd_next) { INSN *cap; if (vars->nd_next) { - ADD_INSN(ret, line, dup); + ADD_INSN(ret, line_node, dup); } last = ret->last; NO_CHECK(COMPILE_POPPED(ret, "capture", vars->nd_head)); last = last->next; /* putobject :var */ - cap = new_insn_send(iseq, line, idAREF, INT2FIX(1), + cap = new_insn_send(iseq, 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 @@ -5138,11 +5660,11 @@ compile_named_capture_assign(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE DECL_ANCHOR(nom); INIT_ANCHOR(nom); - ADD_INSNL(nom, line, jump, end_label); + ADD_INSNL(nom, line_node, jump, end_label); ADD_LABEL(nom, fail_label); # if 0 /* $~ must be MatchData or nil */ - ADD_INSN(nom, line, pop); - ADD_INSN(nom, line, putnil); + 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; @@ -5151,9 +5673,9 @@ compile_named_capture_assign(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE } #endif } - ADD_INSNL(ret, line, jump, end_label); + ADD_INSNL(ret, line_node, jump, end_label); ADD_LABEL(ret, fail_label); - ADD_INSN(ret, line, pop); + ADD_INSN(ret, line_node, pop); for (vars = node; vars; vars = vars->nd_next) { last = ret->last; NO_CHECK(COMPILE_POPPED(ret, "capture", vars->nd_head)); @@ -5165,9 +5687,17 @@ compile_named_capture_assign(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE } static int -number_literal_p(const NODE *n) +optimizable_range_item_p(const NODE *n) { - return (n && nd_type(n) == NODE_LIT && RB_INTEGER_TYPE_P(n->nd_lit)); + if (!n) return FALSE; + switch (nd_type(n)) { + case NODE_LIT: + return RB_INTEGER_TYPE_P(n->nd_lit); + case NODE_NIL: + return TRUE; + default: + return FALSE; + } } static int @@ -5178,16 +5708,13 @@ compile_if(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int const NODE *const node_else = type == NODE_IF ? node->nd_else : node->nd_body; const int line = nd_line(node); - const int lineno = nd_first_lineno(node); - const int column = nd_first_column(node); - const int last_lineno = nd_last_lineno(node); - const int last_column = nd_last_column(node); + const NODE *line_node = node; DECL_ANCHOR(cond_seq); DECL_ANCHOR(then_seq); DECL_ANCHOR(else_seq); LABEL *then_label, *else_label, *end_label; VALUE branches = Qfalse; - int ci_size, ci_kw_size; + int ci_size; VALUE catch_table = ISEQ_COMPILE_DATA(iseq)->catch_table_ary; long catch_table_size = NIL_P(catch_table) ? 0 : RARRAY_LEN(catch_table); @@ -5202,12 +5729,10 @@ compile_if(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int then_label, else_label); ci_size = body->ci_size; - ci_kw_size = body->ci_kw_size; CHECK(COMPILE_(then_seq, "then", node_body, popped)); catch_table = ISEQ_COMPILE_DATA(iseq)->catch_table_ary; if (!then_label->refcnt) { body->ci_size = ci_size; - body->ci_kw_size = ci_kw_size; if (!NIL_P(catch_table)) rb_ary_set_len(catch_table, catch_table_size); } else { @@ -5215,12 +5740,10 @@ compile_if(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int } ci_size = body->ci_size; - ci_kw_size = body->ci_kw_size; CHECK(COMPILE_(else_seq, "else", node_else, popped)); catch_table = ISEQ_COMPILE_DATA(iseq)->catch_table_ary; if (!else_label->refcnt) { body->ci_size = ci_size; - body->ci_kw_size = ci_kw_size; if (!NIL_P(catch_table)) rb_ary_set_len(catch_table, catch_table_size); } else { @@ -5230,22 +5753,24 @@ compile_if(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int ADD_SEQ(ret, cond_seq); if (then_label->refcnt && else_label->refcnt) { - DECL_BRANCH_BASE(branches, lineno, column, last_lineno, last_column, type == NODE_IF ? "if" : "unless"); + branches = decl_branch_base(iseq, node, type == NODE_IF ? "if" : "unless"); } if (then_label->refcnt) { ADD_LABEL(ret, then_label); if (else_label->refcnt) { - ADD_TRACE_BRANCH_COVERAGE( + add_trace_branch_coverage( + iseq, ret, - node_body ? nd_first_lineno(node_body) : lineno, - node_body ? nd_first_column(node_body) : column, - node_body ? nd_last_lineno(node_body) : last_lineno, - node_body ? nd_last_column(node_body) : last_column, + node_body ? node_body : node, + 0, type == NODE_IF ? "then" : "else", branches); end_label = NEW_LABEL(line); - ADD_INSNL(then_seq, line, jump, end_label); + ADD_INSNL(then_seq, line_node, jump, end_label); + if (!popped) { + ADD_INSN(then_seq, line_node, pop); + } } ADD_SEQ(ret, then_seq); } @@ -5253,12 +5778,11 @@ compile_if(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int if (else_label->refcnt) { ADD_LABEL(ret, else_label); if (then_label->refcnt) { - ADD_TRACE_BRANCH_COVERAGE( + add_trace_branch_coverage( + iseq, ret, - node_else ? nd_first_lineno(node_else) : lineno, - node_else ? nd_first_column(node_else) : column, - node_else ? nd_last_lineno(node_else) : last_lineno, - node_else ? nd_last_column(node_else) : last_column, + node_else ? node_else : node, + 1, type == NODE_IF ? "else" : "then", branches); } @@ -5283,9 +5807,11 @@ compile_case(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_nod DECL_ANCHOR(cond_seq); int only_special_literals = 1; VALUE literals = rb_hash_new(); - int line, lineno, column, last_lineno, last_column; + int line; enum node_type type; + const NODE *line_node; VALUE branches = Qfalse; + int branch_id = 0; INIT_ANCHOR(head); INIT_ANCHOR(body_seq); @@ -5295,16 +5821,13 @@ compile_case(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_nod CHECK(COMPILE(head, "case base", node->nd_head)); - DECL_BRANCH_BASE(branches, nd_first_lineno(node), nd_first_column(node), nd_last_lineno(node), nd_last_column(node), "case"); + branches = decl_branch_base(iseq, node, "case"); node = node->nd_body; EXPECT_NODE("NODE_CASE", node, NODE_WHEN, COMPILE_NG); type = nd_type(node); line = nd_line(node); - lineno = nd_first_lineno(node); - column = nd_first_column(node); - last_lineno = nd_last_lineno(node); - last_column = nd_last_column(node); + line_node = node; endlabel = NEW_LABEL(line); elselabel = NEW_LABEL(line); @@ -5316,17 +5839,16 @@ compile_case(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_nod l1 = NEW_LABEL(line); ADD_LABEL(body_seq, l1); - ADD_INSN(body_seq, line, pop); - ADD_TRACE_BRANCH_COVERAGE( + ADD_INSN(body_seq, line_node, pop); + add_trace_branch_coverage( + iseq, body_seq, - node->nd_body ? nd_first_lineno(node->nd_body) : lineno, - node->nd_body ? nd_first_column(node->nd_body) : column, - node->nd_body ? nd_last_lineno(node->nd_body) : last_lineno, - node->nd_body ? nd_last_column(node->nd_body) : last_column, + node->nd_body ? node->nd_body : node, + branch_id++, "when", branches); CHECK(COMPILE_(body_seq, "when body", node->nd_body, popped)); - ADD_INSNL(body_seq, line, jump, endlabel); + ADD_INSNL(body_seq, line_node, jump, endlabel); vals = node->nd_head; if (vals) { @@ -5355,33 +5877,30 @@ compile_case(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_nod } type = nd_type(node); line = nd_line(node); - lineno = nd_first_lineno(node); - column = nd_first_column(node); - last_lineno = nd_last_lineno(node); - last_column = nd_last_column(node); + line_node = node; } /* else */ if (node) { ADD_LABEL(cond_seq, elselabel); - ADD_INSN(cond_seq, line, pop); - ADD_TRACE_BRANCH_COVERAGE(cond_seq, nd_first_lineno(node), nd_first_column(node), nd_last_lineno(node), nd_last_column(node), "else", branches); + ADD_INSN(cond_seq, line_node, pop); + add_trace_branch_coverage(iseq, cond_seq, node, branch_id, "else", branches); CHECK(COMPILE_(cond_seq, "else", node, popped)); - ADD_INSNL(cond_seq, line, jump, endlabel); + ADD_INSNL(cond_seq, line_node, jump, endlabel); } else { debugs("== else (implicit)\n"); ADD_LABEL(cond_seq, elselabel); - ADD_INSN(cond_seq, nd_line(orig_node), pop); - ADD_TRACE_BRANCH_COVERAGE(cond_seq, nd_first_lineno(orig_node), nd_first_column(orig_node), nd_last_lineno(orig_node), nd_last_column(orig_node), "else", branches); + ADD_INSN(cond_seq, orig_node, pop); + add_trace_branch_coverage(iseq, cond_seq, orig_node, branch_id, "else", branches); if (!popped) { - ADD_INSN(cond_seq, nd_line(orig_node), putnil); + ADD_INSN(cond_seq, orig_node, putnil); } - ADD_INSNL(cond_seq, nd_line(orig_node), jump, endlabel); + ADD_INSNL(cond_seq, orig_node, jump, endlabel); } if (only_special_literals && ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction) { - ADD_INSN(ret, nd_line(orig_node), dup); - ADD_INSN2(ret, nd_line(orig_node), opt_case_dispatch, literals, elselabel); + ADD_INSN(ret, orig_node, dup); + ADD_INSN2(ret, orig_node, opt_case_dispatch, literals, elselabel); RB_OBJ_WRITTEN(iseq, Qundef, literals); LABEL_REF(elselabel); } @@ -5401,30 +5920,26 @@ compile_case2(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_no LABEL *endlabel; DECL_ANCHOR(body_seq); VALUE branches = Qfalse; + int branch_id = 0; - DECL_BRANCH_BASE(branches, nd_first_lineno(orig_node), nd_first_column(orig_node), nd_last_lineno(orig_node), nd_last_column(orig_node), "case"); + branches = decl_branch_base(iseq, orig_node, "case"); INIT_ANCHOR(body_seq); endlabel = NEW_LABEL(nd_line(node)); - while (node && nd_type(node) == NODE_WHEN) { + while (node && nd_type_p(node, NODE_WHEN)) { const int line = nd_line(node); - const int lineno = nd_first_lineno(node); - const int column = nd_first_column(node); - const int last_lineno = nd_last_lineno(node); - const int last_column = nd_last_column(node); LABEL *l1 = NEW_LABEL(line); ADD_LABEL(body_seq, l1); - ADD_TRACE_BRANCH_COVERAGE( + add_trace_branch_coverage( + iseq, body_seq, - node->nd_body ? nd_first_lineno(node->nd_body) : lineno, - node->nd_body ? nd_first_column(node->nd_body) : column, - node->nd_body ? nd_last_lineno(node->nd_body) : last_lineno, - node->nd_body ? nd_last_column(node->nd_body) : last_column, + node->nd_body ? node->nd_body : node, + branch_id++, "when", branches); CHECK(COMPILE_(body_seq, "when", node->nd_body, popped)); - ADD_INSNL(body_seq, line, jump, endlabel); + ADD_INSNL(body_seq, node, jump, endlabel); vals = node->nd_head; if (!vals) { @@ -5445,10 +5960,10 @@ compile_case2(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_no case NODE_SPLAT: case NODE_ARGSCAT: case NODE_ARGSPUSH: - ADD_INSN(ret, nd_line(vals), putnil); + ADD_INSN(ret, vals, putnil); CHECK(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); + 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); @@ -5456,26 +5971,40 @@ compile_case2(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_no node = node->nd_next; } /* else */ - ADD_TRACE_BRANCH_COVERAGE( + add_trace_branch_coverage( + iseq, ret, - node ? nd_first_lineno(node) : nd_first_lineno(orig_node), - node ? nd_first_column(node) : nd_first_column(orig_node), - node ? nd_last_lineno(node) : nd_last_lineno(orig_node), - node ? nd_last_column(node) : nd_last_column(orig_node), + node ? node : orig_node, + branch_id, "else", branches); CHECK(COMPILE_(ret, "else", node, popped)); - ADD_INSNL(ret, nd_line(orig_node), jump, endlabel); + 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, int in_alt_pattern) +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; switch (nd_type(node)) { case NODE_ARYPTN: { @@ -5525,13 +6054,11 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c * goto match_failed * end * end - * true - * goto fin + * goto matched * type_error: * FrozenCore.raise TypeError * match_failed: - * false - * fin: + * goto unmatched */ struct rb_ary_pattern_info *apinfo = node->nd_apinfo; const NODE *args = apinfo->pre_args; @@ -5542,110 +6069,276 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c const int use_rest_num = apinfo->rest_arg && (NODE_NAMED_REST_P(apinfo->rest_arg) || (!NODE_NAMED_REST_P(apinfo->rest_arg) && post_args_num > 0)); - LABEL *match_failed, *type_error, *fin; + LABEL *match_failed, *type_error, *deconstruct, *deconstructed; int i; match_failed = NEW_LABEL(line); type_error = NEW_LABEL(line); - fin = NEW_LABEL(line); + deconstruct = NEW_LABEL(line); + deconstructed = NEW_LABEL(line); if (use_rest_num) { - ADD_INSN1(ret, line, putobject, INT2FIX(0)); /* allocate stack for rest_num */ - ADD_INSN(ret, line, swap); - } - - if (node->nd_pconst) { - ADD_INSN(ret, line, dup); - CHECK(COMPILE(ret, "constant", node->nd_pconst)); - ADD_INSN1(ret, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE)); - ADD_INSNL(ret, line, branchunless, match_failed); + ADD_INSN1(ret, line_node, putobject, INT2FIX(0)); /* allocate stack for rest_num */ + ADD_INSN(ret, line_node, swap); + if (base_index) { + base_index++; + } } - ADD_INSN(ret, line, dup); - ADD_INSN1(ret, line, putobject, ID2SYM(rb_intern("deconstruct"))); - ADD_SEND(ret, line, idRespond_to, INT2FIX(1)); - ADD_INSNL(ret, line, branchunless, match_failed); + CHECK(iseq_compile_pattern_constant(iseq, ret, node, match_failed, in_single_pattern, base_index)); - ADD_SEND(ret, line, rb_intern("deconstruct"), INT2FIX(0)); + 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, dup); - ADD_INSN1(ret, line, checktype, INT2FIX(T_ARRAY)); - ADD_INSNL(ret, line, branchunless, type_error); - - ADD_INSN(ret, line, dup); - ADD_SEND(ret, line, idLength, INT2FIX(0)); - ADD_INSN1(ret, line, putobject, INT2FIX(min_argc)); - ADD_SEND(ret, line, apinfo->rest_arg ? idGE : idEq, INT2FIX(1)); - ADD_INSNL(ret, line, branchunless, match_failed); + 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, apinfo->rest_arg ? idGE : idEq, INT2FIX(1)); // (1) + if (in_single_pattern) { + CHECK(iseq_compile_pattern_set_length_errmsg(iseq, ret, node, + apinfo->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, dup); - ADD_INSN1(ret, line, putobject, INT2FIX(i)); - ADD_SEND(ret, line, idAREF, INT2FIX(1)); - iseq_compile_pattern_each(iseq, ret, args->nd_head, in_alt_pattern); + 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, args->nd_head, match_failed, in_single_pattern, in_alt_pattern, base_index + 1 /* (2) */, false)); args = args->nd_next; - ADD_INSNL(ret, line, branchunless, match_failed); } if (apinfo->rest_arg) { if (NODE_NAMED_REST_P(apinfo->rest_arg)) { - ADD_INSN(ret, line, dup); - ADD_INSN1(ret, line, putobject, INT2FIX(pre_args_num)); - ADD_INSN1(ret, line, topn, INT2FIX(1)); - ADD_SEND(ret, line, idLength, INT2FIX(0)); - ADD_INSN1(ret, line, putobject, INT2FIX(min_argc)); - ADD_SEND(ret, line, idMINUS, INT2FIX(1)); - ADD_INSN1(ret, line, setn, INT2FIX(4)); - ADD_SEND(ret, line, idAREF, INT2FIX(2)); - - iseq_compile_pattern_each(iseq, ret, apinfo->rest_arg, in_alt_pattern); - ADD_INSNL(ret, line, branchunless, match_failed); + 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, apinfo->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, dup); - ADD_SEND(ret, line, idLength, INT2FIX(0)); - ADD_INSN1(ret, line, putobject, INT2FIX(min_argc)); - ADD_SEND(ret, line, idMINUS, INT2FIX(1)); - ADD_INSN1(ret, line, setn, INT2FIX(2)); - ADD_INSN(ret, line, pop); + 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 = apinfo->post_args; for (i = 0; i < post_args_num; i++) { - ADD_INSN(ret, line, dup); + ADD_INSN(ret, line_node, dup); - ADD_INSN1(ret, line, putobject, INT2FIX(pre_args_num + i)); - ADD_INSN1(ret, line, topn, INT2FIX(3)); - ADD_SEND(ret, line, idPLUS, INT2FIX(1)); + 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, idAREF, INT2FIX(1)); - iseq_compile_pattern_each(iseq, ret, args->nd_head, in_alt_pattern); + ADD_SEND(ret, line_node, idAREF, INT2FIX(1)); // (4) + CHECK(iseq_compile_pattern_match(iseq, ret, args->nd_head, match_failed, in_single_pattern, in_alt_pattern, base_index + 1 /* (4) */, false)); args = args->nd_next; - ADD_INSNL(ret, line, branchunless, match_failed); } - ADD_INSN(ret, line, pop); + 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, pop); + ADD_INSN(ret, line_node, putnil); } - ADD_INSN1(ret, line, putobject, Qtrue); - ADD_INSNL(ret, line, jump, fin); ADD_LABEL(ret, type_error); - ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - ADD_INSN1(ret, line, putobject, rb_eTypeError); - ADD_INSN1(ret, line, putobject, rb_fstring_lit("deconstruct must return Array")); - ADD_SEND(ret, line, id_core_raise, INT2FIX(2)); + 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, pop); + ADD_INSN(ret, line_node, pop); if (use_rest_num) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, line_node, pop); } - ADD_INSN1(ret, line, putobject, Qfalse); - ADD_LABEL(ret, fin); + ADD_INSNL(ret, line_node, jump, unmatched); + + 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 + */ + struct rb_fnd_pattern_info *fpinfo = node->nd_fpinfo; + const NODE *args = fpinfo->args; + const int args_num = fpinfo->args ? rb_long2int(fpinfo->args->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, args->nd_head, next_loop, in_single_pattern, in_alt_pattern, base_index + 4 /* (2), (3), (4), (5) */, false)); + args = args->nd_next; + } + + if (NODE_NAMED_REST_P(fpinfo->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, fpinfo->pre_rest_arg, find_failed, in_single_pattern, in_alt_pattern, base_index + 4 /* (2), (3), (4), (6) */, false)); + } + if (NODE_NAMED_REST_P(fpinfo->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, fpinfo->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; } @@ -5703,20 +6396,17 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c * end * end * end - * true - * goto fin + * goto matched * type_error: * FrozenCore.raise TypeError * match_failed: - * false - * fin: + * goto unmatched */ - LABEL *match_failed, *type_error, *fin; + LABEL *match_failed, *type_error; VALUE keys = Qnil; match_failed = NEW_LABEL(line); type_error = NEW_LABEL(line); - fin = NEW_LABEL(line); if (node->nd_pkwargs && !node->nd_pkwrestarg) { const NODE *kw_args = node->nd_pkwargs->nd_head; @@ -5727,33 +6417,31 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c } } - if (node->nd_pconst) { - ADD_INSN(ret, line, dup); - CHECK(COMPILE(ret, "constant", node->nd_pconst)); - ADD_INSN1(ret, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE)); - ADD_INSNL(ret, line, branchunless, match_failed); - } + CHECK(iseq_compile_pattern_constant(iseq, ret, node, match_failed, in_single_pattern, base_index)); - ADD_INSN(ret, line, dup); - ADD_INSN1(ret, line, putobject, ID2SYM(rb_intern("deconstruct_keys"))); - ADD_SEND(ret, line, idRespond_to, INT2FIX(1)); - ADD_INSNL(ret, line, branchunless, match_failed); + 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, putnil); + ADD_INSN(ret, line_node, putnil); } else { - ADD_INSN1(ret, line, duparray, keys); + ADD_INSN1(ret, line_node, duparray, keys); RB_OBJ_WRITTEN(iseq, Qundef, rb_obj_hide(keys)); } - ADD_SEND(ret, line, rb_intern("deconstruct_keys"), INT2FIX(1)); + ADD_SEND(ret, line_node, rb_intern("deconstruct_keys"), INT2FIX(1)); // (2) - ADD_INSN(ret, line, dup); - ADD_INSN1(ret, line, checktype, INT2FIX(T_HASH)); - ADD_INSNL(ret, line, branchunless, type_error); + ADD_INSN(ret, line_node, dup); + ADD_INSN1(ret, line_node, checktype, INT2FIX(T_HASH)); + ADD_INSNL(ret, line_node, branchunless, type_error); if (node->nd_pkwrestarg) { - ADD_SEND(ret, line, rb_intern("dup"), INT2FIX(0)); + ADD_SEND(ret, line_node, rb_intern("dup"), INT2FIX(0)); } if (node->nd_pkwargs) { @@ -5770,60 +6458,83 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c NODE *value_node = args->nd_next->nd_head; VALUE key; - if (nd_type(key_node) != NODE_LIT) { + if (!nd_type_p(key_node, NODE_LIT)) { UNKNOWN_NODE("NODE_IN", key_node, COMPILE_NG); } key = key_node->nd_lit; - ADD_INSN(ret, line, dup); - ADD_INSN1(ret, line, putobject, key); - ADD_SEND(ret, line, rb_intern("key?"), INT2FIX(1)); - ADD_INSNL(ret, line, branchunless, match_failed); + 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); + + ADD_INSN1(ret, line_node, putobject, rb_str_freeze(rb_sprintf("key not found: %+"PRIsVALUE, key))); // (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_INSN(match_values, line, dup); - ADD_INSN1(match_values, line, putobject, key); - ADD_SEND(match_values, line, node->nd_pkwrestarg ? rb_intern("delete") : idAREF, INT2FIX(1)); - iseq_compile_pattern_each(iseq, match_values, value_node, in_alt_pattern); - ADD_INSNL(match_values, line, branchunless, match_failed); + 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, 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 = args->nd_next->nd_next; } ADD_SEQ(ret, match_values); } } else { - ADD_INSN(ret, line, dup); - ADD_SEND(ret, line, idEmptyP, INT2FIX(0)); - ADD_INSNL(ret, line, branchunless, match_failed); + 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 (node->nd_pkwrestarg) { if (node->nd_pkwrestarg == NODE_SPECIAL_NO_REST_KEYWORD) { - ADD_INSN(ret, line, dup); - ADD_SEND(ret, line, idEmptyP, INT2FIX(0)); - ADD_INSNL(ret, line, branchunless, match_failed); + 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, dup); - iseq_compile_pattern_each(iseq, ret, node->nd_pkwrestarg, in_alt_pattern); - ADD_INSNL(ret, line, branchunless, match_failed); + ADD_INSN(ret, line_node, dup); // (11) + CHECK(iseq_compile_pattern_match(iseq, ret, node->nd_pkwrestarg, match_failed, in_single_pattern, in_alt_pattern, base_index + 1 /* (11) */, false)); } } - ADD_INSN(ret, line, pop); - ADD_INSN1(ret, line, putobject, Qtrue); - ADD_INSNL(ret, line, jump, fin); + 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, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - ADD_INSN1(ret, line, putobject, rb_eTypeError); - ADD_INSN1(ret, line, putobject, rb_fstring_lit("deconstruct_keys must return Hash")); - ADD_SEND(ret, line, id_core_raise, INT2FIX(2)); + 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, pop); - ADD_INSN1(ret, line, putobject, Qfalse); - - ADD_LABEL(ret, fin); + ADD_INSN(ret, line_node, pop); + ADD_INSNL(ret, line_node, jump, unmatched); break; } case NODE_LIT: @@ -5840,14 +6551,26 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c 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: - CHECK(COMPILE(ret, "case in literal", node)); - ADD_INSN1(ret, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE)); + case NODE_BEGIN: + 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; @@ -5863,12 +6586,11 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c } } - ADD_SETLOCAL(ret, line, idx, get_lvar_level(iseq)); - ADD_INSN1(ret, line, putobject, Qtrue); + ADD_SETLOCAL(ret, line_node, idx, get_lvar_level(iseq)); + ADD_INSNL(ret, line_node, jump, matched); break; } - case NODE_DASGN: - case NODE_DASGN_CURR: { + case NODE_DASGN: { int idx, lv, ls; ID id = node->nd_vid; @@ -5884,60 +6606,70 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c } if (idx < 0) { - COMPILE_ERROR(ERROR_ARGS "NODE_DASGN(_CURR): unknown id (%"PRIsVALUE")", + COMPILE_ERROR(ERROR_ARGS "NODE_DASGN: unknown id (%"PRIsVALUE")", rb_id2str(id)); return COMPILE_NG; } - ADD_SETLOCAL(ret, line, ls - idx, lv); - ADD_INSN1(ret, line, putobject, Qtrue); + 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, *fin; - match_failed = NEW_LABEL(line); - fin = NEW_LABEL(line); - iseq_compile_pattern_each(iseq, ret, node->nd_body, in_alt_pattern); - ADD_INSNL(ret, line, branchunless, match_failed); + LABEL *match_failed; + match_failed = unmatched; + CHECK(iseq_compile_pattern_match(iseq, ret, node->nd_body, unmatched, in_single_pattern, in_alt_pattern, base_index, use_deconstructed_cache)); CHECK(COMPILE(ret, "case in if", node->nd_cond)); - if (nd_type(node) == NODE_IF) { - ADD_INSNL(ret, line, branchunless, match_failed); + 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, branchif, match_failed); + ADD_INSNL(ret, line_node, branchif, match_failed); } - ADD_INSN1(ret, line, putobject, Qtrue); - ADD_INSNL(ret, line, jump, fin); - - ADD_LABEL(ret, match_failed); - ADD_INSN1(ret, line, putobject, Qfalse); - - ADD_LABEL(ret, fin); + ADD_INSNL(ret, line_node, jump, matched); break; } case NODE_HASH: { NODE *n; - LABEL *match_failed, *fin; + LABEL *match_failed; match_failed = NEW_LABEL(line); - fin = NEW_LABEL(line); n = node->nd_head; - if (! (nd_type(n) == NODE_LIST && n->nd_alen == 2)) { + if (! (nd_type_p(n, NODE_LIST) && n->nd_alen == 2)) { COMPILE_ERROR(ERROR_ARGS "unexpected node"); return COMPILE_NG; } - ADD_INSN(ret, line, dup); - iseq_compile_pattern_each(iseq, ret, n->nd_head, in_alt_pattern); - ADD_INSNL(ret, line, branchunless, match_failed); - iseq_compile_pattern_each(iseq, ret, n->nd_next->nd_head, in_alt_pattern); - ADD_INSNL(ret, line, jump, fin); + ADD_INSN(ret, line_node, dup); // (1) + CHECK(iseq_compile_pattern_match(iseq, ret, 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, 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, pop); - ADD_INSN1(ret, line, putobject, Qfalse); - - ADD_LABEL(ret, fin); + ADD_INSN(ret, line_node, pop); + ADD_INSNL(ret, line_node, jump, unmatched); break; } case NODE_OR: { @@ -5945,17 +6677,14 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c match_succeeded = NEW_LABEL(line); fin = NEW_LABEL(line); - ADD_INSN(ret, line, dup); - iseq_compile_pattern_each(iseq, ret, node->nd_1st, TRUE); - ADD_INSNL(ret, line, branchif, match_succeeded); - iseq_compile_pattern_each(iseq, ret, node->nd_2nd, TRUE); - ADD_INSNL(ret, line, jump, fin); - + ADD_INSN(ret, line_node, dup); // (1) + CHECK(iseq_compile_pattern_each(iseq, ret, 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, pop); - ADD_INSN1(ret, line, putobject, Qtrue); - + 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, node->nd_2nd, matched, unmatched, in_single_pattern, true, base_index, use_deconstructed_cache)); break; } default: @@ -5965,62 +6694,275 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c } static int -compile_case3(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_node, int popped) +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) { - const NODE *pattern; - const NODE *node = orig_node; - LABEL *endlabel, *elselabel; - DECL_ANCHOR(head); - DECL_ANCHOR(body_seq); - DECL_ANCHOR(cond_seq); - int line, lineno, column, last_lineno, last_column; - enum node_type type; - VALUE branches = 0; + 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; +} - INIT_ANCHOR(head); - INIT_ANCHOR(body_seq); - INIT_ANCHOR(cond_seq); +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; - CHECK(COMPILE(head, "case base", node->nd_head)); + if (node->nd_pconst) { + ADD_INSN(ret, line_node, dup); // (1) + CHECK(COMPILE(ret, "constant", 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; +} - DECL_BRANCH_BASE(branches, nd_first_lineno(node), nd_first_column(node), nd_last_lineno(node), nd_last_column(node), "case"); - node = node->nd_body; - EXPECT_NODE("NODE_CASE3", node, NODE_IN, COMPILE_NG); - type = nd_type(node); +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, node, "case"); + + node = node->nd_body; + EXPECT_NODE("NODE_CASE3", node, NODE_IN, COMPILE_NG); + type = nd_type(node); line = nd_line(node); - lineno = nd_first_lineno(node); - column = nd_first_column(node); - last_lineno = nd_last_lineno(node); - last_column = nd_last_column(node); + line_node = node; + single_pattern = !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", 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_INSN(body_seq, line, pop); - ADD_TRACE_BRANCH_COVERAGE( + ADD_INSN1(body_seq, line_node, adjuststack, INT2FIX(single_pattern ? 6 : 2)); + add_trace_branch_coverage( + iseq, body_seq, - node->nd_body ? nd_first_lineno(node->nd_body) : lineno, - node->nd_body ? nd_first_column(node->nd_body) : column, - node->nd_body ? nd_last_lineno(node->nd_body) : last_lineno, - node->nd_body ? nd_last_column(node->nd_body) : last_column, + node->nd_body ? node->nd_body : node, + branch_id++, "in", branches); CHECK(COMPILE_(body_seq, "in body", node->nd_body, popped)); - ADD_INSNL(body_seq, line, jump, endlabel); + ADD_INSNL(body_seq, line_node, jump, endlabel); pattern = node->nd_head; if (pattern) { - ADD_INSN (cond_seq, nd_line(pattern), dup); - iseq_compile_pattern_each(iseq, cond_seq, pattern, FALSE); - ADD_INSNL(cond_seq, nd_line(pattern), branchif, l1); + 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"); @@ -6033,33 +6975,85 @@ compile_case3(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_no } type = nd_type(node); line = nd_line(node); - lineno = nd_first_lineno(node); - column = nd_first_column(node); - last_lineno = nd_last_lineno(node); - last_column = nd_last_column(node); + line_node = node; } /* else */ if (node) { ADD_LABEL(cond_seq, elselabel); - ADD_INSN(cond_seq, line, pop); - ADD_TRACE_BRANCH_COVERAGE(cond_seq, nd_first_lineno(node), nd_first_column(node), nd_last_lineno(node), nd_last_column(node), "else", branches); + 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, node, branch_id, "else", branches); CHECK(COMPILE_(cond_seq, "else", node, popped)); - ADD_INSNL(cond_seq, line, jump, endlabel); + 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(cond_seq, nd_first_lineno(orig_node), nd_first_column(orig_node), nd_last_lineno(orig_node), nd_last_column(orig_node), "else", branches); - ADD_INSN1(cond_seq, nd_line(orig_node), putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - ADD_INSN1(cond_seq, nd_line(orig_node), putobject, rb_eNoMatchingPatternError); - ADD_INSN1(cond_seq, nd_line(orig_node), topn, INT2FIX(2)); - ADD_SEND(cond_seq, nd_line(orig_node), id_core_raise, INT2FIX(2)); - ADD_INSN(cond_seq, nd_line(orig_node), pop); - ADD_INSN(cond_seq, nd_line(orig_node), pop); + add_trace_branch_coverage(iseq, cond_seq, 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->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, nd_line(orig_node), putnil); + 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_INSNL(cond_seq, nd_line(orig_node), jump, endlabel); } ADD_SEQ(ret, cond_seq); @@ -6068,14 +7062,18 @@ compile_case3(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_no 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 int lineno = nd_first_lineno(node); - const int column = nd_first_column(node); - const int last_lineno = nd_last_lineno(node); - const int last_column = nd_last_column(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; @@ -6097,27 +7095,26 @@ compile_loop(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in push_ensure_entry(iseq, &enl, NULL, NULL); if (node->nd_state == 1) { - ADD_INSNL(ret, line, jump, next_label); + ADD_INSNL(ret, line_node, jump, next_label); } else { tmp_label = NEW_LABEL(line); - ADD_INSNL(ret, line, jump, tmp_label); + ADD_INSNL(ret, line_node, jump, tmp_label); } ADD_LABEL(ret, adjust_label); - ADD_INSN(ret, line, putnil); + ADD_INSN(ret, line_node, putnil); ADD_LABEL(ret, next_catch_label); - ADD_INSN(ret, line, pop); - ADD_INSNL(ret, line, jump, next_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); - DECL_BRANCH_BASE(branches, lineno, column, last_lineno, last_column, type == NODE_WHILE ? "while" : "until"); - ADD_TRACE_BRANCH_COVERAGE( + branches = decl_branch_base(iseq, node, type == NODE_WHILE ? "while" : "until"); + add_trace_branch_coverage( + iseq, ret, - node->nd_body ? nd_first_lineno(node->nd_body) : lineno, - node->nd_body ? nd_first_column(node->nd_body) : column, - node->nd_body ? nd_last_lineno(node->nd_body) : last_lineno, - node->nd_body ? nd_last_column(node->nd_body) : last_column, + node->nd_body ? node->nd_body : node, + 0, "body", branches); CHECK(COMPILE_POPPED(ret, "while body", node->nd_body)); @@ -6137,18 +7134,18 @@ compile_loop(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in ADD_ADJUST_RESTORE(ret, adjust_label); if (node->nd_state == Qundef) { - /* ADD_INSN(ret, line, putundef); */ + /* ADD_INSN(ret, line_node, putundef); */ COMPILE_ERROR(ERROR_ARGS "unsupported: putundef"); return COMPILE_NG; } else { - ADD_INSN(ret, line, putnil); + ADD_INSN(ret, line_node, putnil); } ADD_LABEL(ret, break_label); /* break */ if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, line_node, pop); } ADD_CATCH_ENTRY(CATCH_TYPE_BREAK, redo_label, break_label, NULL, @@ -6170,19 +7167,20 @@ 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(node) == NODE_FOR) { + if (nd_type_p(node, NODE_FOR)) { CHECK(COMPILE(ret, "iter caller (for)", node->nd_iter)); ISEQ_COMPILE_DATA(iseq)->current_block = child_iseq = NEW_CHILD_ISEQ(node->nd_body, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, line); - ADD_SEND_WITH_BLOCK(ret, line, idEach, INT2FIX(0), child_iseq); + ADD_SEND_WITH_BLOCK(ret, line_node, idEach, INT2FIX(0), child_iseq); } else { ISEQ_COMPILE_DATA(iseq)->current_block = child_iseq = @@ -6193,7 +7191,7 @@ compile_iter(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in ADD_LABEL(ret, retry_end_l); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, line_node, pop); } ISEQ_COMPILE_DATA(iseq)->current_block = prevblock; @@ -6208,27 +7206,27 @@ compile_for_masgn(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const nod /* massign to var in "for" * (args.length == 1 && Array.try_convert(args[0])) || args */ - const int line = nd_line(node); + const NODE *line_node = node; const NODE *var = 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, 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_INSN(ret, line, swap); - ADD_CALL(ret, line, rb_intern("try_convert"), INT2FIX(1)); - ADD_INSN(ret, line, dup); - ADD_INSNL(ret, line, branchunless, not_ary); - ADD_INSN(ret, line, swap); + 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, pop); + ADD_INSN(ret, line_node, pop); ADD_LABEL(ret, not_single); return COMPILE_OK; } @@ -6236,40 +7234,26 @@ compile_for_masgn(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const nod static int compile_break(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; unsigned long throw_flag = 0; - if (ISEQ_COMPILE_DATA(iseq)->redo_label != 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, ISEQ_COMPILE_DATA(iseq)->redo_label); + ADD_ADJUST(ret, line_node, ISEQ_COMPILE_DATA(iseq)->redo_label); CHECK(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_INSNL(ret, line_node, jump, ISEQ_COMPILE_DATA(iseq)->end_label); ADD_ADJUST_RESTORE(ret, splabel); if (!popped) { - ADD_INSN(ret, line, putnil); - } - } - else if (iseq->body->type == ISEQ_TYPE_BLOCK) { - break_by_insn: - /* escape from block */ - CHECK(COMPILE(ret, "break val (block)", node->nd_stts)); - ADD_INSN1(ret, line, throw, INT2FIX(throw_flag | TAG_BREAK)); - if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, line_node, putnil); } } - else if (iseq->body->type == ISEQ_TYPE_EVAL) { - break_in_eval: - COMPILE_ERROR(ERROR_ARGS "Can't escape from eval with break"); - return COMPILE_NG; - } else { - const rb_iseq_t *ip = iseq->body->parent_iseq; + const rb_iseq_t *ip = iseq; while (ip) { if (!ISEQ_COMPILE_DATA(ip)) { @@ -6279,16 +7263,26 @@ compile_break(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, i if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) { throw_flag = VM_THROW_NO_ESCAPE_FLAG; - goto break_by_insn; } else if (ip->body->type == ISEQ_TYPE_BLOCK) { - goto break_by_insn; + throw_flag = 0; } else if (ip->body->type == ISEQ_TYPE_EVAL) { - goto break_in_eval; + COMPILE_ERROR(ERROR_ARGS "Can't escape from eval with break"); + return COMPILE_NG; } + else { + ip = ip->body->parent_iseq; + continue; + } - ip = ip->body->parent_iseq; + /* escape from block */ + CHECK(COMPILE(ret, "break val (block)", 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; @@ -6299,42 +7293,37 @@ compile_break(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, i static int compile_next(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; unsigned long throw_flag = 0; - if (ISEQ_COMPILE_DATA(iseq)->redo_label != 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?", 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(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, putnil); + ADD_INSN(ret, line_node, putnil); } } - else if (ISEQ_COMPILE_DATA(iseq)->end_label) { + 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, ISEQ_COMPILE_DATA(iseq)->start_label); + ADD_ADJUST(ret, line_node, ISEQ_COMPILE_DATA(iseq)->start_label); CHECK(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_INSNL(ret, line_node, jump, ISEQ_COMPILE_DATA(iseq)->end_label); ADD_ADJUST_RESTORE(ret, splabel); splabel->unremovable = FALSE; if (!popped) { - ADD_INSN(ret, line, putnil); + ADD_INSN(ret, line_node, putnil); } } - else if (iseq->body->type == ISEQ_TYPE_EVAL) { - next_in_eval: - COMPILE_ERROR(ERROR_ARGS "Can't escape from eval with next"); - return COMPILE_NG; - } else { const rb_iseq_t *ip = iseq; @@ -6353,17 +7342,18 @@ compile_next(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in break; } else if (ip->body->type == ISEQ_TYPE_EVAL) { - goto next_in_eval; + COMPILE_ERROR(ERROR_ARGS "Can't escape from eval with next"); + return COMPILE_NG; } ip = ip->body->parent_iseq; } if (ip != 0) { CHECK(COMPILE(ret, "next val", node->nd_stts)); - ADD_INSN1(ret, line, throw, INT2FIX(throw_flag | TAG_NEXT)); + ADD_INSN1(ret, line_node, throw, INT2FIX(throw_flag | TAG_NEXT)); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, line_node, pop); } } else { @@ -6377,37 +7367,32 @@ compile_next(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in static int compile_redo(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; - if (ISEQ_COMPILE_DATA(iseq)->redo_label) { + 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, ISEQ_COMPILE_DATA(iseq)->redo_label); + ADD_ADJUST(ret, line_node, ISEQ_COMPILE_DATA(iseq)->redo_label); add_ensure_iseq(ret, iseq, 0); - ADD_INSNL(ret, line, jump, ISEQ_COMPILE_DATA(iseq)->redo_label); + ADD_INSNL(ret, line_node, jump, ISEQ_COMPILE_DATA(iseq)->redo_label); ADD_ADJUST_RESTORE(ret, splabel); if (!popped) { - ADD_INSN(ret, line, putnil); + ADD_INSN(ret, line_node, putnil); } } - else if (iseq->body->type == ISEQ_TYPE_EVAL) { - redo_in_eval: - COMPILE_ERROR(ERROR_ARGS "Can't escape from eval with redo"); - return COMPILE_NG; - } - else if (ISEQ_COMPILE_DATA(iseq)->start_label) { + else if (iseq->body->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, ISEQ_COMPILE_DATA(iseq)->start_label); - ADD_INSNL(ret, line, jump, ISEQ_COMPILE_DATA(iseq)->start_label); + 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, putnil); + ADD_INSN(ret, line_node, putnil); } } else { @@ -6426,17 +7411,18 @@ compile_redo(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in break; } else if (ip->body->type == ISEQ_TYPE_EVAL) { - goto redo_in_eval; + COMPILE_ERROR(ERROR_ARGS "Can't escape from eval with redo"); + return COMPILE_NG; } ip = ip->body->parent_iseq; } if (ip != 0) { - ADD_INSN(ret, line, putnil); - ADD_INSN1(ret, line, throw, INT2FIX(VM_THROW_NO_ESCAPE_FLAG | TAG_REDO)); + 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, pop); + ADD_INSN(ret, line_node, pop); } } else { @@ -6450,14 +7436,14 @@ compile_redo(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in static int compile_retry(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; if (iseq->body->type == ISEQ_TYPE_RESCUE) { - ADD_INSN(ret, line, putnil); - ADD_INSN1(ret, line, throw, INT2FIX(TAG_RETRY)); + ADD_INSN(ret, line_node, putnil); + ADD_INSN1(ret, line_node, throw, INT2FIX(TAG_RETRY)); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, line_node, pop); } } else { @@ -6471,6 +7457,7 @@ 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); @@ -6481,17 +7468,24 @@ compile_rescue(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, lstart->rescued = LABEL_RESCUE_BEG; lend->rescued = LABEL_RESCUE_END; ADD_LABEL(ret, lstart); - CHECK(COMPILE(ret, "rescue head", node->nd_head)); + + bool prev_in_rescue = ISEQ_COMPILE_DATA(iseq)->in_rescue; + ISEQ_COMPILE_DATA(iseq)->in_rescue = true; + { + CHECK(COMPILE(ret, "rescue head", node->nd_head)); + } + ISEQ_COMPILE_DATA(iseq)->in_rescue = prev_in_rescue; + ADD_LABEL(ret, lend); if (node->nd_else) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, line_node, pop); CHECK(COMPILE(ret, "rescue else", node->nd_else)); } - ADD_INSN(ret, line, nop); + ADD_INSN(ret, line_node, nop); ADD_LABEL(ret, lcont); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, line_node, pop); } /* register catch entry */ @@ -6504,6 +7498,7 @@ 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; @@ -6517,38 +7512,38 @@ compile_resbody(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, switch (nd_type(narg)) { case NODE_LIST: while (narg) { - ADD_GETLOCAL(ret, line, LVAR_ERRINFO, 0); + ADD_GETLOCAL(ret, line_node, LVAR_ERRINFO, 0); CHECK(COMPILE(ret, "rescue arg", narg->nd_head)); - ADD_INSN1(ret, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE)); - ADD_INSNL(ret, line, branchif, label_hit); + ADD_INSN1(ret, line_node, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE)); + ADD_INSNL(ret, line_node, branchif, label_hit); narg = narg->nd_next; } break; case NODE_SPLAT: case NODE_ARGSCAT: case NODE_ARGSPUSH: - ADD_GETLOCAL(ret, line, LVAR_ERRINFO, 0); + ADD_GETLOCAL(ret, line_node, LVAR_ERRINFO, 0); CHECK(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); + 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, LVAR_ERRINFO, 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_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, jump, label_miss); + ADD_INSNL(ret, line_node, jump, label_miss); ADD_LABEL(ret, label_hit); CHECK(COMPILE(ret, "resbody body", resq->nd_body)); if (ISEQ_COMPILE_DATA(iseq)->option->tailcall_optimization) { - ADD_INSN(ret, line, nop); + ADD_INSN(ret, line_node, nop); } - ADD_INSN(ret, line, leave); + ADD_INSN(ret, line_node, leave); ADD_LABEL(ret, label_miss); resq = resq->nd_head; } @@ -6559,6 +7554,7 @@ static int compile_ensure(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; 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), @@ -6586,9 +7582,9 @@ compile_ensure(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, CHECK(COMPILE_(ret, "ensure head", node->nd_head, (popped | last_leave))); ADD_LABEL(ret, lend); ADD_SEQ(ret, ensr); - if (!popped && last_leave) ADD_INSN(ret, line, putnil); + if (!popped && last_leave) ADD_INSN(ret, line_node, putnil); ADD_LABEL(ret, lcont); - if (last_leave) ADD_INSN(ret, line, pop); + if (last_leave) ADD_INSN(ret, line_node, pop); erange = ISEQ_COMPILE_DATA(iseq)->ensure_node_stack->erange; if (lstart->link.next != &lend->link) { @@ -6606,7 +7602,7 @@ compile_ensure(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, static int compile_return(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; if (iseq) { enum iseq_type type = iseq->body->type; @@ -6637,25 +7633,25 @@ compile_return(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, if (type == ISEQ_TYPE_METHOD) { splabel = NEW_LABEL(0); ADD_LABEL(ret, splabel); - ADD_ADJUST(ret, line, 0); + ADD_ADJUST(ret, line_node, 0); } CHECK(COMPILE(ret, "return nd_stts (return val)", retval)); - if (type == ISEQ_TYPE_METHOD) { + 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, leave); + ADD_INSN(ret, line_node, leave); ADD_ADJUST_RESTORE(ret, splabel); if (!popped) { - ADD_INSN(ret, line, putnil); + ADD_INSN(ret, line_node, putnil); } } else { - ADD_INSN1(ret, line, throw, INT2FIX(TAG_RETURN)); + ADD_INSN1(ret, line_node, throw, INT2FIX(TAG_RETURN)); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, line_node, pop); } } } @@ -6668,72 +7664,76 @@ compile_evstr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, i CHECK(COMPILE_(ret, "nd_body", node, popped)); if (!popped && !all_string_result_p(node)) { - const int line = nd_line(node); + const NODE *line_node = node; const unsigned int flag = VM_CALL_FCALL; - LABEL *isstr = NEW_LABEL(line); - ADD_INSN(ret, line, dup); - ADD_INSN1(ret, line, checktype, INT2FIX(T_STRING)); - ADD_INSNL(ret, line, branchif, isstr); - ADD_INSN(ret, line, dup); - ADD_SEND_R(ret, line, idTo_s, INT2FIX(0), NULL, INT2FIX(flag), NULL); - ADD_INSN(ret, line, tostring); - ADD_LABEL(ret, isstr); + + // 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->local_iseq->body->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, int line) +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(line); - const int first_lineno = nd_first_lineno(node), first_column = nd_first_column(node); - const int last_lineno = nd_last_lineno(node), last_column = nd_last_column(node); + LABEL *else_label = NEW_LABEL(nd_line(line_node)); VALUE br = 0; - DECL_BRANCH_BASE(br, first_lineno, first_column, last_lineno, last_column, "&."); + br = decl_branch_base(iseq, node, "&."); *branches = br; - ADD_INSN(recv, line, dup); - ADD_INSNL(recv, line, branchnil, else_label); - ADD_TRACE_BRANCH_COVERAGE(recv, first_lineno, first_column, last_lineno, last_column, "then", br); + ADD_INSN(recv, line_node, dup); + ADD_INSNL(recv, line_node, branchnil, else_label); + add_trace_branch_coverage(iseq, recv, 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, int line) +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(line); - ADD_INSNL(ret, line, jump, end_label); + 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(ret, nd_first_lineno(node), nd_first_column(node), nd_last_lineno(node), nd_last_column(node), - "else", branches); + add_trace_branch_coverage(iseq, ret, 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, int line, int popped) +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 (node->nd_recv && nd_type(node->nd_recv) == NODE_STR && + if (node->nd_recv && nd_type_p(node->nd_recv, NODE_STR) && (node->nd_mid == idFreeze || node->nd_mid == idUMinus) && 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); if (node->nd_mid == idUMinus) { - ADD_INSN2(ret, line, opt_str_uminus, str, + ADD_INSN2(ret, line_node, opt_str_uminus, str, new_callinfo(iseq, idUMinus, 0, 0, NULL, FALSE)); } else { - ADD_INSN2(ret, line, opt_str_freeze, str, + 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, pop); + ADD_INSN(ret, line_node, pop); } return TRUE; } @@ -6741,18 +7741,18 @@ compile_call_precheck_freeze(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE * 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_LIST && node->nd_args->nd_alen == 1 && - nd_type(node->nd_args->nd_head) == NODE_STR && + nd_type_p(node->nd_args, NODE_LIST) && node->nd_args->nd_alen == 1 && + nd_type_p(node->nd_args->nd_head, NODE_STR) && ISEQ_COMPILE_DATA(iseq)->current_block == NULL && !ISEQ_COMPILE_DATA(iseq)->option->frozen_string_literal && ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction) { VALUE str = rb_fstring(node->nd_args->nd_head->nd_lit); CHECK(COMPILE(ret, "recv", node->nd_recv)); - ADD_INSN2(ret, line, opt_aref_with, str, + ADD_INSN2(ret, line_node, opt_aref_with, str, new_callinfo(iseq, idAREF, 1, 0, NULL, FALSE)); RB_OBJ_WRITTEN(iseq, Qundef, str); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, line_node, pop); } return TRUE; } @@ -6779,18 +7779,39 @@ iseq_builtin_function_lookup(const rb_iseq_t *iseq, const char *name) } static const char * -iseq_builtin_function_name(ID mid) +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; - if (UNLIKELY(strncmp(prefix, name, prefix_len) == 0)) { - return &name[prefix_len]; - } - else { - return NULL; + switch (type) { + case NODE_CALL: + if (recv) { + switch (nd_type(recv)) { + case NODE_VCALL: + if (recv->nd_mid == rb_intern("__builtin")) { + return name; + } + break; + case NODE_CONST: + if (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 @@ -6856,7 +7877,199 @@ delegate_call_p(const rb_iseq_t *iseq, unsigned int argc, const LINK_ANCHOR *arg } static int -compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int type, int line, int popped) +compile_builtin_arg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, const NODE *line_node, int popped) +{ + if (!node) goto no_arg; + if (!nd_type_p(node, NODE_LIST)) goto bad_arg; + if (node->nd_next) goto too_many_arg; + node = node->nd_head; + if (!node) goto no_arg; + if (!nd_type_p(node, NODE_LIT)) goto bad_arg; + VALUE name = node->nd_lit; + 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 && node->nd_cond == cond_node) { + return 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->param.lead_num, + }; + NODE args_node; + rb_node_init(&args_node, NODE_ARGS, 0, 0, (VALUE)&args); + + // local table without non-mandatory parameters + const int skip_local_size = iseq->body->param.size - iseq->body->param.lead_num; + const int table_size = iseq->body->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; ibody->param.lead_num; i++) { + tbl->ids[i] = iseq->body->local_table[i]; + } + // local variables + for (; iids[i] = iseq->body->local_table[i + skip_local_size]; + } + + NODE scope_node; + rb_node_init(&scope_node, NODE_SCOPE, (VALUE)tbl, (VALUE)mandatory_node(iseq, node), (VALUE)&args_node); + + rb_ast_body_t ast = { + .root = &scope_node, + .compile_option = 0, + .script_lines = iseq->body->variable.script_lines, + }; + + int prev_inline_index = GET_VM()->builtin_inline_index; + + iseq->body->mandatory_only_iseq = + rb_iseq_new_with_opt(&ast, rb_iseq_base_label(iseq), + rb_iseq_path(iseq), rb_iseq_realpath(iseq), + INT2FIX(nd_line(line_node)), NULL, 0, + ISEQ_TYPE_METHOD, ISEQ_COMPILE_DATA(iseq)->option); + + GET_VM()->builtin_inline_index = prev_inline_index; + 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 = node->nd_args; + + if (parent_block != NULL) { + COMPILE_ERROR(iseq, nd_line(line_node), "should not call builtins here."); + return COMPILE_NG; + } + else { +# define BUILTIN_INLINE_PREFIX "_bi" + char inline_func[DECIMAL_SIZE_OF_BITS(sizeof(int) * CHAR_BIT) + sizeof(BUILTIN_INLINE_PREFIX)]; + 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 + GET_VM()->builtin_inline_index++; + return COMPILE_OK; + } + else if (strcmp("attr!", builtin_func) == 0) { + // There's only "inline" attribute for now + iseq->body->builtin_inline_p = true; + return COMPILE_OK; + } + 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; + } + + if (GET_VM()->builtin_inline_index == INT_MAX) { + rb_bug("builtin inline function index overflow:%s", builtin_func); + } + int inline_index = GET_VM()->builtin_inline_index++; + 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)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(...) @@ -6867,7 +8080,7 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in ID mid = node->nd_mid; VALUE argc; unsigned int flag = 0; - struct rb_call_info_kw_arg *keywords = NULL; + 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; @@ -6877,7 +8090,7 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in INIT_ANCHOR(recv); INIT_ANCHOR(args); #if OPT_SUPPORT_JOKE - if (nd_type(node) == NODE_VCALL) { + if (nd_type_p(node, NODE_VCALL)) { ID id_bitblt; ID id_answer; @@ -6885,11 +8098,11 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in CONST_ID(id_answer, "the_answer_to_life_the_universe_and_everything"); if (mid == id_bitblt) { - ADD_INSN(ret, line, bitblt); + ADD_INSN(ret, line_node, bitblt); return COMPILE_OK; } else if (mid == id_answer) { - ADD_INSN(ret, line, answer); + ADD_INSN(ret, line_node, answer); return COMPILE_OK; } } @@ -6901,7 +8114,7 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in CONST_ID(goto_id, "__goto__"); CONST_ID(label_id, "__label__"); - if (nd_type(node) == NODE_FCALL && + if (nd_type_p(node, NODE_FCALL) && (mid == goto_id || mid == label_id)) { LABEL *label; st_data_t data; @@ -6912,13 +8125,13 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in labels_table = st_init_numtable(); ISEQ_COMPILE_DATA(iseq)->labels_table = labels_table; } - if (nd_type(node->nd_args->nd_head) == NODE_LIT && + if (nd_type_p(node->nd_args->nd_head, NODE_LIT) && SYMBOL_P(node->nd_args->nd_head->nd_lit)) { label_name = 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; + label = NEW_LABEL(nd_line(line_node)); + label->position = nd_line(line_node); st_insert(labels_table, (st_data_t)label_name, (st_data_t)label); } else { @@ -6931,7 +8144,7 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in } if (mid == goto_id) { - ADD_INSNL(ret, line, jump, label); + ADD_INSNL(ret, line_node, jump, label); } else { ADD_LABEL(ret, label); @@ -6940,106 +8153,38 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in } } #endif - const char *builtin_func; - NODE *args_node = node->nd_args; + const char *builtin_func; if (UNLIKELY(iseq_has_builtin_function_table(iseq)) && - (builtin_func = iseq_builtin_function_name(mid)) != NULL) { - - if (parent_block != NULL) { - COMPILE_ERROR(iseq, line, "should not call builtins here."); - return COMPILE_NG; - } - else { - char inline_func[0x20]; - 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) { - inlinec:; - int inline_index = GET_VM()->builtin_inline_index++; - snprintf(inline_func, 0x20, "_bi%d", inline_index); - builtin_func = inline_func; - args_node = NULL; - goto retry; - } - else if (strcmp("cconst!", builtin_func) == 0) { - cconst = true; - goto inlinec; - } - else if (strcmp("cinit!", builtin_func) == 0) { - // ignore - GET_VM()->builtin_inline_index++; - return COMPILE_OK; - } - - 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; - } - - if (cconst) { - typedef VALUE(*builtin_func0)(void *, VALUE); - VALUE const_val = (*(builtin_func0)bf->func_ptr)(NULL, Qnil); - ADD_INSN1(ret, line, putobject, const_val); - return COMPILE_OK; - } - - // fprintf(stderr, "func_name:%s -> %p\n", builtin_func, bf->func_ptr); - - argc = setup_args(iseq, args, args_node, &flag, &keywords); + (builtin_func = iseq_builtin_function_name(type, node->nd_recv, mid)) != NULL) { + return compile_builtin_function_call(iseq, ret, node, line_node, popped, parent_block, args, builtin_func); + } - 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; + /* receiver */ + if (!assume_receiver) { + if (type == NODE_CALL || type == NODE_OPCALL || type == NODE_QCALL) { + int idx, level; + + if (mid == idCall && + nd_type_p(node->nd_recv, NODE_LVAR) && + iseq_block_param_id_p(iseq, node->nd_recv->nd_vid, &idx, &level)) { + ADD_INSN2(recv, node->nd_recv, getblockparamproxy, INT2FIX(idx + VM_ENV_DATA_SIZE - 1), INT2FIX(level)); } - - unsigned int start_index; - if (delegate_call_p(iseq, FIX2INT(argc), args, &start_index)) { - ADD_INSN2(ret, line, opt_invokebuiltin_delegate, bf, INT2FIX(start_index)); + else if (private_recv_p(node)) { + ADD_INSN(recv, node, putself); + flag |= VM_CALL_FCALL; } else { - ADD_SEQ(ret, args); - ADD_INSN1(ret,line, invokebuiltin, bf); + CHECK(COMPILE(recv, "recv", node->nd_recv)); } - if (popped) ADD_INSN(ret, line, pop); - return COMPILE_OK; + 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); } - } - - - /* receiver */ - if (type == NODE_CALL || type == NODE_OPCALL || type == NODE_QCALL) { - int idx, level; - - if (mid == idCall && - nd_type(node->nd_recv) == NODE_LVAR && - iseq_block_param_id_p(iseq, node->nd_recv->nd_vid, &idx, &level)) { - ADD_INSN2(recv, nd_line(node->nd_recv), getblockparamproxy, INT2FIX(idx + VM_ENV_DATA_SIZE - 1), INT2FIX(level)); - } - else if (private_recv_p(node)) { - ADD_INSN(recv, nd_line(node), putself); - flag |= VM_CALL_FCALL; - } - else { - CHECK(COMPILE(recv, "recv", node->nd_recv)); - } - - if (type == NODE_QCALL) { - else_label = qcall_branch_start(iseq, recv, &branches, node, line); - } - } - else if (type == NODE_FCALL || type == NODE_VCALL) { - ADD_CALL_RECEIVER(recv, line); } /* args */ @@ -7065,17 +8210,851 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in flag |= VM_CALL_FCALL; } - ADD_SEND_R(ret, line, mid, argc, parent_block, INT2FIX(flag), keywords); + ADD_SEND_R(ret, line_node, mid, argc, parent_block, INT2FIX(flag), keywords); - qcall_branch_end(iseq, ret, else_label, branches, node, line); + qcall_branch_end(iseq, ret, else_label, branches, node, line_node); if (popped) { - ADD_INSN(ret, line, pop); + 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 = 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 (!popped) { + ADD_INSN(ret, node, putnil); + } + asgnflag = COMPILE_RECV(ret, "NODE_OP_ASGN1 recv", node); + CHECK(asgnflag != -1); + switch (nd_type(node->nd_args->nd_head)) { + case NODE_ZLIST: + argc = INT2FIX(0); + break; + case NODE_BLOCK_PASS: + boff = 1; + /* fall through */ + default: + argc = setup_args(iseq, ret, node->nd_args->nd_head, &flag, NULL); + CHECK(!NIL_P(argc)); + } + ADD_INSN1(ret, node, dupn, FIXNUM_INC(argc, 1 + boff)); + flag |= asgnflag; + ADD_SEND_WITH_FLAG(ret, node, idAREF, argc, INT2FIX(flag)); + + 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); -static int iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int popped); + CHECK(COMPILE(ret, "NODE_OP_ASGN1 args->body: ", node->nd_args->nd_body)); + if (!popped) { + ADD_INSN1(ret, node, setn, FIXNUM_INC(argc, 2+boff)); + } + if (flag & VM_CALL_ARGS_SPLAT) { + ADD_INSN1(ret, node, newarray, INT2FIX(1)); + if (boff > 0) { + ADD_INSN1(ret, node, dupn, INT2FIX(3)); + ADD_INSN(ret, node, swap); + ADD_INSN(ret, node, pop); + } + ADD_INSN(ret, node, concatarray); + if (boff > 0) { + ADD_INSN1(ret, node, setn, INT2FIX(3)); + ADD_INSN(ret, node, pop); + ADD_INSN(ret, node, pop); + } + ADD_SEND_WITH_FLAG(ret, node, idASET, argc, INT2FIX(flag)); + } + else { + if (boff > 0) + ADD_INSN(ret, node, swap); + ADD_SEND_WITH_FLAG(ret, node, idASET, FIXNUM_INC(argc, 1), INT2FIX(flag)); + } + ADD_INSN(ret, node, pop); + ADD_INSNL(ret, node, jump, lfin); + ADD_LABEL(ret, label); + if (!popped) { + ADD_INSN1(ret, node, setn, FIXNUM_INC(argc, 2+boff)); + } + ADD_INSN1(ret, node, adjuststack, FIXNUM_INC(argc, 2+boff)); + ADD_LABEL(ret, lfin); + } + else { + CHECK(COMPILE(ret, "NODE_OP_ASGN1 args->body: ", node->nd_args->nd_body)); + ADD_SEND(ret, node, id, INT2FIX(1)); + if (!popped) { + ADD_INSN1(ret, node, setn, FIXNUM_INC(argc, 2+boff)); + } + if (flag & VM_CALL_ARGS_SPLAT) { + ADD_INSN1(ret, node, newarray, INT2FIX(1)); + if (boff > 0) { + ADD_INSN1(ret, node, dupn, INT2FIX(3)); + ADD_INSN(ret, node, swap); + ADD_INSN(ret, node, pop); + } + ADD_INSN(ret, node, concatarray); + if (boff > 0) { + ADD_INSN1(ret, node, setn, INT2FIX(3)); + ADD_INSN(ret, node, pop); + ADD_INSN(ret, node, pop); + } + ADD_SEND_WITH_FLAG(ret, node, idASET, argc, INT2FIX(flag)); + } + else { + if (boff > 0) + ADD_INSN(ret, node, swap); + ADD_SEND_WITH_FLAG(ret, node, idASET, FIXNUM_INC(argc, 1), INT2FIX(flag)); + } + 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 = node->nd_next->nd_mid; + ID vid = node->nd_next->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 + + # 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); + CHECK(asgnflag != -1); + if (node->nd_next->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) { + ADD_INSN(ret, node, dup); + if (atype == idOROP) { + ADD_INSNL(ret, node, branchif, lcfin); + } + else { /* idANDOP */ + ADD_INSNL(ret, node, branchunless, lcfin); + } + ADD_INSN(ret, node, pop); + CHECK(COMPILE(ret, "NODE_OP_ASGN2 val", node->nd_value)); + 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); + ADD_INSN(ret, node, swap); + + ADD_LABEL(ret, lfin); + ADD_INSN(ret, node, pop); + if (lskip) { + ADD_LABEL(ret, lskip); + } + if (popped) { + /* we can apply more optimize */ + ADD_INSN(ret, node, pop); + } + } + else { + CHECK(COMPILE(ret, "NODE_OP_ASGN2 val", 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_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(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", 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))); + return COMPILE_NG; + } + mid = node->nd_head->nd_mid; + /* cref */ + if (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 (node->nd_aid == idOROP || node->nd_aid == idANDOP) { + lfin = NEW_LABEL(line); + if (!popped) ADD_INSN(ret, node, dup); /* cref [obj] obj */ + if (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(ret, "NODE_OP_CDECL#nd_value", 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(ret, "NODE_OP_CDECL#nd_value", node->nd_value)); + /* cref obj value */ + ADD_CALL(ret, node, 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(node->nd_head, NODE_IVAR)) { + 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, node, branchunless, lassign); + } + else { + lassign = NEW_LABEL(line); + } + + CHECK(COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_head", node->nd_head)); + ADD_INSN(ret, node, dup); + + if (type == NODE_OP_ASGN_AND) { + ADD_INSNL(ret, node, branchunless, lfin); + } + else { + ADD_INSNL(ret, node, branchif, lfin); + } + + ADD_INSN(ret, node, pop); + ADD_LABEL(ret, lassign); + CHECK(COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_value", node->nd_value)); + ADD_LABEL(ret, lfin); + + if (popped) { + /* we can apply more optimize */ + ADD_INSN(ret, node, pop); + } + 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; + 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; + + INIT_ANCHOR(args); + ISEQ_COMPILE_DATA(iseq)->current_block = NULL; + if (type == NODE_SUPER) { + VALUE vargc = setup_args(iseq, args, node->nd_args, &flag, &keywords); + CHECK(!NIL_P(vargc)); + argc = FIX2INT(vargc); + } + else { + /* NODE_ZSUPER */ + int i; + const rb_iseq_t *liseq = body->local_iseq; + const struct rb_iseq_constant_body *const local_body = liseq->body; + 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); + } + + 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, Qfalse); + + 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; jlocal_table_size - (post_start + j); + ADD_GETLOCAL(args, node, idx, lvar_level); + } + ADD_INSN1(args, node, newarray, INT2FIX(j)); + ADD_INSN (args, node, concatarray); + /* argc is settled at above */ + } + else { + int j; + for (j=0; jlocal_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); + if (local_kwd->num > 0) { + ADD_SEND (args, node, rb_intern("dup"), INT2FIX(0)); + flag |= VM_CALL_KW_SPLAT_MUT; + } + } + else { + ADD_INSN1(args, node, newhash, INT2FIX(0)); + flag |= VM_CALL_KW_SPLAT_MUT; + } + 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)); + if (local_body->param.flags.has_rest) { + ADD_INSN1(args, node, newarray, INT2FIX(1)); + ADD_INSN (args, node, concatarray); + --argc; + } + flag |= VM_CALL_KW_SPLAT; + } + 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); + + if (local_body->param.flags.has_rest) { + ADD_INSN1(args, node, newarray, INT2FIX(1)); + ADD_INSN (args, node, concatarray); + } + else { + argc++; + } + flag |= VM_CALL_KW_SPLAT; + } + } + + flag |= VM_CALL_SUPER | VM_CALL_FCALL; + if (type == NODE_ZSUPER) flag |= VM_CALL_ZSUPER; + ADD_INSN(ret, node, putself); + ADD_SEQ(ret, args); + ADD_INSN2(ret, node, invokesuper, + new_callinfo(iseq, 0, argc, flag, keywords, parent_block != NULL), + 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->local_iseq->body->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 (node->nd_head) { + argc = setup_args(iseq, args, 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)); + + if (popped) { + ADD_INSN(ret, node, pop); + } + + int level = 0; + const rb_iseq_t *tmp_iseq = iseq; + for (; tmp_iseq != iseq->body->local_iseq; level++ ) { + tmp_iseq = tmp_iseq->body->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: + ADD_INSN1(recv, node, putobject, node->nd_lit); + ADD_INSN2(val, node, getspecial, INT2FIX(0), + INT2FIX(0)); + break; + case NODE_MATCH2: + CHECK(COMPILE(recv, "receiver", node->nd_recv)); + CHECK(COMPILE(val, "value", node->nd_value)); + break; + case NODE_MATCH3: + CHECK(COMPILE(recv, "receiver", node->nd_value)); + CHECK(COMPILE(val, "value", node->nd_recv)); + break; + } + + ADD_SEQ(ret, recv); + ADD_SEQ(ret, val); + ADD_SEND(ret, node, idEqTilde, INT2FIX(1)); + + if (node->nd_args) { + compile_named_capture_assign(iseq, ret, 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) +{ + const int line = nd_line(node); + 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); + CHECK(compile_const_prefix(iseq, node, pref, body)); + if (LIST_INSN_SIZE_ZERO(pref)) { + if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) { + ADD_INSN2(ret, node, opt_getinlinecache, lend, INT2FIX(ic_index)); + } + else { + ADD_INSN(ret, node, putnil); + } + + ADD_SEQ(ret, body); + + if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) { + ADD_INSN1(ret, node, opt_setinlinecache, INT2FIX(ic_index)); + ADD_LABEL(ret, lend); + } + } + else { + ADD_SEQ(ret, pref); + ADD_SEQ(ret, body); + } + } + else { + /* function call */ + ADD_CALL_RECEIVER(ret, node); + CHECK(COMPILE(ret, "colon2#nd_head", node->nd_head)); + ADD_CALL(ret, node, 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) +{ + const int line = nd_line(node); + 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, node, opt_getinlinecache, lend, INT2FIX(ic_index)); + ADD_INSN(ret, node, pop); + } + + ADD_INSN1(ret, node, putobject, rb_cObject); + ADD_INSN1(ret, node, putobject, Qtrue); + ADD_INSN1(ret, node, getconstant, ID2SYM(node->nd_mid)); + + if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) { + ADD_INSN1(ret, node, opt_setinlinecache, INT2FIX(ic_index)); + ADD_LABEL(ret, lend); + } + + 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 = node->nd_beg; + const NODE *e = node->nd_end; + + if (optimizable_range_item_p(b) && optimizable_range_item_p(e)) { + if (!popped) { + VALUE bv = nd_type_p(b, NODE_LIT) ? b->nd_lit : Qnil; + VALUE ev = nd_type_p(e, NODE_LIT) ? e->nd_lit : Qnil; + VALUE val = rb_range_new(bv, ev, excl); + 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->type == ISEQ_TYPE_RESCUE) { + ADD_GETLOCAL(ret, node, LVAR_ERRINFO, 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_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; + LABEL *end_label = NEW_LABEL(nd_line(node)); + const NODE *default_value = node->nd_body->nd_value; + + 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_LIT) || + 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", 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 = node->nd_mid; + VALUE argc; + LABEL *else_label = NULL; + VALUE branches = Qfalse; + + /* optimization shortcut + * obj["literal"] = value -> opt_aset_with(obj, "literal", value) + */ + if (mid == idASET && !private_recv_p(node) && node->nd_args && + nd_type_p(node->nd_args, NODE_LIST) && node->nd_args->nd_alen == 2 && + nd_type_p(node->nd_args->nd_head, NODE_STR) && + ISEQ_COMPILE_DATA(iseq)->current_block == NULL && + !ISEQ_COMPILE_DATA(iseq)->option->frozen_string_literal && + ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction) + { + VALUE str = rb_fstring(node->nd_args->nd_head->nd_lit); + CHECK(COMPILE(ret, "recv", node->nd_recv)); + CHECK(COMPILE(ret, "value", node->nd_args->nd_next->nd_head)); + if (!popped) { + ADD_INSN(ret, node, swap); + ADD_INSN1(ret, node, topn, INT2FIX(1)); + } + ADD_INSN2(ret, node, opt_aset_with, str, + new_callinfo(iseq, idASET, 2, 0, NULL, FALSE)); + RB_OBJ_WRITTEN(iseq, Qundef, str); + ADD_INSN(ret, node, pop); + return COMPILE_OK; + } + + INIT_ANCHOR(recv); + INIT_ANCHOR(args); + argc = setup_args(iseq, args, node->nd_args, &flag, NULL); + CHECK(!NIL_P(argc)); + + int asgnflag = COMPILE_RECV(recv, "recv", node); + 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_BLOCKARG) { + ADD_INSN1(ret, node, topn, INT2FIX(1)); + if (flag & VM_CALL_ARGS_SPLAT) { + 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, 3)); + ADD_INSN (ret, node, pop); + } + else 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 iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped); /** compile each node @@ -7091,7 +9070,8 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, const NODE *node, int poppe 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_INSN(ret, lineno, putnil); + NODE dummy_line_node = generate_dummy_line_node(lineno, -1); + ADD_INSN(ret, &dummy_line_node, putnil); } return COMPILE_OK; } @@ -7099,27 +9079,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, const NODE *node, int poppe } static int -check_yield_place(const rb_iseq_t *iseq, int line) -{ - VALUE file; - switch (iseq->body->local_iseq->body->type) { - case ISEQ_TYPE_TOP: - case ISEQ_TYPE_MAIN: - return FALSE; - case ISEQ_TYPE_CLASS: - file = rb_iseq_path(iseq); - if (rb_warning_category_enabled_p(RB_WARN_CATEGORY_DEPRECATED)) { - rb_compile_warn(RSTRING_PTR(file), line, - "`yield' in class syntax will not be supported from Ruby 3.0. [Feature #15575]"); - } - return TRUE; - default: - return TRUE; - } -} - -static int -iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int popped) +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); @@ -7144,17 +9104,9 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in #define BEFORE_RETURN debug_node_end() switch (type) { - case NODE_BLOCK:{ - while (node && nd_type(node) == NODE_BLOCK) { - CHECK(COMPILE_(ret, "BLOCK body", node->nd_head, - (node->nd_next ? 1 : popped))); - node = node->nd_next; - } - if (node) { - CHECK(COMPILE_(ret, "BLOCK next", node->nd_next, popped)); - } + 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)); @@ -7210,16 +9162,16 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in LABEL *end_label = NEW_LABEL(line); CHECK(COMPILE(ret, "nd_1st", node->nd_1st)); if (!popped) { - ADD_INSN(ret, line, dup); + ADD_INSN(ret, node, dup); } if (type == NODE_AND) { - ADD_INSNL(ret, line, branchunless, end_label); + ADD_INSNL(ret, node, branchunless, end_label); } else { - ADD_INSNL(ret, line, branchif, end_label); + ADD_INSNL(ret, node, branchif, end_label); } if (!popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, node, pop); } CHECK(COMPILE_(ret, "nd_2nd", node->nd_2nd, popped)); ADD_LABEL(ret, end_label); @@ -7239,577 +9191,114 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in CHECK(COMPILE(ret, "rvalue", node->nd_value)); if (!popped) { - ADD_INSN(ret, line, dup); - } - ADD_SETLOCAL(ret, line, idx, get_lvar_level(iseq)); - break; - } - case NODE_DASGN: - case NODE_DASGN_CURR:{ - int idx, lv, ls; - ID id = node->nd_vid; - CHECK(COMPILE(ret, "dvalue", node->nd_value)); - debugi("dassn id", rb_id2str(id) ? id : '*'); - - if (!popped) { - ADD_INSN(ret, line, dup); - } - - idx = get_dyna_var_idx(iseq, id, &lv, &ls); - - if (idx < 0) { - COMPILE_ERROR(ERROR_ARGS "NODE_DASGN(_CURR): unknown id (%"PRIsVALUE")", - rb_id2str(id)); - goto ng; - } - ADD_SETLOCAL(ret, line, ls - idx, lv); - break; - } - case NODE_GASGN:{ - CHECK(COMPILE(ret, "lvalue", node->nd_value)); - - if (!popped) { - ADD_INSN(ret, line, dup); - } - ADD_INSN1(ret, line, setglobal, - ((VALUE)node->nd_entry | 1)); - break; - } - case NODE_IASGN:{ - CHECK(COMPILE(ret, "lvalue", node->nd_value)); - if (!popped) { - ADD_INSN(ret, line, dup); - } - ADD_INSN2(ret, line, setinstancevariable, - ID2SYM(node->nd_vid), - get_ivar_ic_value(iseq,node->nd_vid)); - break; - } - case NODE_CDECL:{ - CHECK(COMPILE(ret, "lvalue", node->nd_value)); - - if (!popped) { - 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; - } - case NODE_CVASGN:{ - CHECK(COMPILE(ret, "cvasgn val", node->nd_value)); - if (!popped) { - ADD_INSN(ret, line, dup); - } - ADD_INSN1(ret, line, setclassvariable, - ID2SYM(node->nd_vid)); - break; - } - case NODE_OP_ASGN1: { - VALUE argc; - unsigned int flag = 0; - 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 (!popped) { - ADD_INSN(ret, line, putnil); - } - asgnflag = COMPILE_RECV(ret, "NODE_OP_ASGN1 recv", node); - CHECK(asgnflag != -1); - switch (nd_type(node->nd_args->nd_head)) { - case NODE_ZLIST: - argc = INT2FIX(0); - break; - case NODE_BLOCK_PASS: - boff = 1; - /* fall through */ - default: - argc = setup_args(iseq, ret, node->nd_args->nd_head, &flag, NULL); - CHECK(!NIL_P(argc)); - } - ADD_INSN1(ret, line, dupn, FIXNUM_INC(argc, 1 + boff)); - flag |= asgnflag; - ADD_SEND_WITH_FLAG(ret, line, idAREF, argc, INT2FIX(flag)); - - 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, line, dup); - if (id == idOROP) { - ADD_INSNL(ret, line, branchif, label); - } - else { /* idANDOP */ - ADD_INSNL(ret, line, branchunless, label); - } - ADD_INSN(ret, line, pop); - - CHECK(COMPILE(ret, "NODE_OP_ASGN1 args->body: ", node->nd_args->nd_body)); - if (!popped) { - 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 (!popped) { - 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 { - CHECK(COMPILE(ret, "NODE_OP_ASGN1 args->body: ", node->nd_args->nd_body)); - ADD_SEND(ret, line, id, INT2FIX(1)); - if (!popped) { - 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); - 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 - - # 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); - CHECK(asgnflag != -1); - 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_WITH_FLAG(ret, line, vid, INT2FIX(0), INT2FIX(asgnflag)); - - if (atype == idOROP || atype == idANDOP) { - ADD_INSN(ret, line, dup); - if (atype == idOROP) { - ADD_INSNL(ret, line, branchif, lcfin); - } - else { /* idANDOP */ - ADD_INSNL(ret, line, branchunless, lcfin); - } - ADD_INSN(ret, line, pop); - CHECK(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 (popped) { - /* we can apply more optimize */ - ADD_INSN(ret, line, pop); - } - } - else { - CHECK(COMPILE(ret, "NODE_OP_ASGN2 val", node->nd_value)); - ADD_SEND(ret, line, atype, INT2FIX(1)); - if (!popped) { - ADD_INSN(ret, line, swap); - ADD_INSN1(ret, line, topn, INT2FIX(1)); - } - ADD_SEND_WITH_FLAG(ret, line, aid, INT2FIX(1), INT2FIX(asgnflag)); - if (lskip && popped) { - ADD_LABEL(ret, lskip); - } - ADD_INSN(ret, line, pop); - if (lskip && !popped) { - ADD_LABEL(ret, lskip); - } + ADD_INSN(ret, node, dup); } + ADD_SETLOCAL(ret, node, idx, get_lvar_level(iseq)); 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: - CHECK(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))); - goto ng; - } - mid = node->nd_head->nd_mid; - /* cref */ - if (node->nd_aid == idOROP) { - lassign = NEW_LABEL(line); - ADD_INSN(ret, line, dup); /* cref cref */ - ADD_INSN3(ret, line, defined, INT2FIX(DEFINED_CONST_FROM), - ID2SYM(mid), Qfalse); /* cref bool */ - ADD_INSNL(ret, line, branchunless, lassign); /* cref */ - } - ADD_INSN(ret, line, dup); /* cref cref */ - ADD_INSN1(ret, line, putobject, Qtrue); - ADD_INSN1(ret, line, getconstant, ID2SYM(mid)); /* cref obj */ - - if (node->nd_aid == idOROP || node->nd_aid == idANDOP) { - lfin = NEW_LABEL(line); - if (!popped) ADD_INSN(ret, line, dup); /* cref [obj] obj */ - if (node->nd_aid == idOROP) - ADD_INSNL(ret, line, branchif, lfin); - else /* idANDOP */ - ADD_INSNL(ret, line, branchunless, lfin); - /* cref [obj] */ - if (!popped) ADD_INSN(ret, line, pop); /* cref */ - if (lassign) ADD_LABEL(ret, lassign); - CHECK(COMPILE(ret, "NODE_OP_CDECL#nd_value", node->nd_value)); - /* cref value */ - if (popped) - 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 (!popped) ADD_INSN(ret, line, swap); /* [value] cref */ - ADD_INSN(ret, line, pop); /* [value] */ + case NODE_DASGN: { + int idx, lv, ls; + ID id = node->nd_vid; + CHECK(COMPILE(ret, "dvalue", node->nd_value)); + debugi("dassn id", rb_id2str(id) ? id : '*'); + + if (!popped) { + ADD_INSN(ret, node, dup); } - else { - CHECK(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 (!popped) { - 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)); + + 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_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); + case NODE_GASGN:{ + CHECK(COMPILE(ret, "lvalue", node->nd_value)); + + if (!popped) { + ADD_INSN(ret, node, dup); } - else { - lassign = NEW_LABEL(line); + ADD_INSN1(ret, node, setglobal, ID2SYM(node->nd_entry)); + break; + } + case NODE_IASGN:{ + CHECK(COMPILE(ret, "lvalue", node->nd_value)); + if (!popped) { + ADD_INSN(ret, node, dup); } + ADD_INSN2(ret, node, setinstancevariable, + ID2SYM(node->nd_vid), + get_ivar_ic_value(iseq,node->nd_vid)); + break; + } + case NODE_CDECL:{ + CHECK(COMPILE(ret, "lvalue", node->nd_value)); - CHECK(COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_head", node->nd_head)); - ADD_INSN(ret, line, dup); + if (!popped) { + ADD_INSN(ret, node, dup); + } - if (nd_type(node) == NODE_OP_ASGN_AND) { - ADD_INSNL(ret, line, branchunless, lfin); + if (node->nd_vid) { + ADD_INSN1(ret, node, putspecialobject, + INT2FIX(VM_SPECIAL_OBJECT_CONST_BASE)); + ADD_INSN1(ret, node, setconstant, ID2SYM(node->nd_vid)); } else { - ADD_INSNL(ret, line, branchif, lfin); + compile_cpath(ret, iseq, node->nd_else); + ADD_INSN1(ret, node, setconstant, ID2SYM(node->nd_else->nd_mid)); } - - ADD_INSN(ret, line, pop); - ADD_LABEL(ret, lassign); - CHECK(COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_value", node->nd_value)); - ADD_LABEL(ret, lfin); - - if (popped) { - /* we can apply more optimize */ - ADD_INSN(ret, line, pop); + break; + } + case NODE_CVASGN:{ + CHECK(COMPILE(ret, "cvasgn val", node->nd_value)); + if (!popped) { + ADD_INSN(ret, node, dup); } + ADD_INSN2(ret, node, setclassvariable, + ID2SYM(node->nd_vid), + get_ivar_ic_value(iseq,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: + 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, line, popped) == TRUE) { + 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, line, popped) == COMPILE_NG) { + 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 (type == NODE_SUPER) { - VALUE vargc = setup_args(iseq, args, node->nd_args, &flag, &keywords); - CHECK(!NIL_P(vargc)); - argc = FIX2INT(vargc); - } - else { - /* NODE_ZSUPER */ - int i; - const rb_iseq_t *liseq = body->local_iseq; - const struct rb_iseq_constant_body *const local_body = liseq->body; - 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, line, 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, line, 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, line, idx, lvar_level); - ADD_INSN1(args, line, splatarray, Qfalse); - - 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; jlocal_table_size - (post_start + j); - ADD_GETLOCAL(args, line, idx, 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; jlocal_table_size - (post_start + j); - ADD_GETLOCAL(args, line, 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, line, 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, line, idx, lvar_level); - ADD_SEND (args, line, rb_intern("dup"), INT2FIX(0)); - } - else { - ADD_INSN1(args, line, 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, line, putobject, ID2SYM(id)); - ADD_GETLOCAL(args, line, idx, lvar_level); - } - ADD_SEND(args, line, id_core_hash_merge_ptr, INT2FIX(i * 2 + 1)); - if (local_body->param.flags.has_rest) { - ADD_INSN1(args, line, newarray, INT2FIX(1)); - ADD_INSN (args, line, concatarray); - --argc; - } - flag |= VM_CALL_KW_SPLAT; - } - else if (local_body->param.flags.has_kwrest) { - int idx = local_body->local_table_size - local_kwd->rest_start; - ADD_GETLOCAL(args, line, idx, lvar_level); - - ADD_SEND (args, line, rb_intern("dup"), INT2FIX(0)); - if (local_body->param.flags.has_rest) { - ADD_INSN1(args, line, newarray, INT2FIX(1)); - ADD_INSN (args, line, concatarray); - } - else { - argc++; - } - flag |= VM_CALL_KW_SPLAT; - } - } - - ADD_INSN(ret, line, putself); - ADD_SEQ(ret, args); - ADD_INSN2(ret, line, invokesuper, - new_callinfo(iseq, 0, argc, flag | VM_CALL_SUPER | (type == NODE_ZSUPER ? VM_CALL_ZSUPER : 0) | VM_CALL_FCALL, keywords, parent_block != NULL), - parent_block); - - if (popped) { - ADD_INSN(ret, line, pop); - } + case NODE_ZSUPER: + CHECK(compile_super(iseq, ret, node, popped, type)); break; - } case NODE_LIST:{ CHECK(compile_array(iseq, ret, node, popped) >= 0); break; } case NODE_ZLIST:{ if (!popped) { - ADD_INSN1(ret, line, newarray, INT2FIX(0)); + ADD_INSN1(ret, node, newarray, INT2FIX(0)); } break; } @@ -7822,51 +9311,21 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in CHECK(COMPILE(ret, "values item", n->nd_head)); n = n->nd_next; } - ADD_INSN1(ret, line, newarray, INT2FIX(node->nd_alen)); + ADD_INSN1(ret, node, newarray, INT2FIX(node->nd_alen)); break; } case NODE_HASH: - CHECK(compile_hash(iseq, ret, node, popped) >= 0); + CHECK(compile_hash(iseq, ret, node, FALSE, popped) >= 0); break; case NODE_RETURN: CHECK(compile_return(iseq, ret, node, popped)); 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 (check_yield_place(iseq, line) == FALSE) { - COMPILE_ERROR(ERROR_ARGS "Invalid yield"); - goto ng; - } - - if (node->nd_head) { - argc = setup_args(iseq, args, node->nd_head, &flag, &keywords); - CHECK(!NIL_P(argc)); - } - else { - argc = INT2FIX(0); - } - - ADD_SEQ(ret, args); - ADD_INSN1(ret, line, invokeblock, new_callinfo(iseq, 0, FIX2INT(argc), flag, keywords, FALSE)); - - if (popped) { - ADD_INSN(ret, line, pop); - } + case NODE_YIELD: + CHECK(compile_yield(iseq, ret, node, popped)); break; - } case NODE_LVAR:{ if (!popped) { - ID id = node->nd_vid; - int idx = body->local_iseq->body->local_table_size - get_local_var_idx(iseq, id); - - debugs("id: %s idx: %d\n", rb_id2name(id), idx); - ADD_GETLOCAL(ret, line, idx, get_lvar_level(iseq)); + compile_lvar(iseq, ret, node, node->nd_vid); } break; } @@ -7880,22 +9339,21 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in rb_id2str(node->nd_vid)); goto ng; } - ADD_GETLOCAL(ret, line, ls - idx, lv); + ADD_GETLOCAL(ret, node, ls - idx, lv); } break; } case NODE_GVAR:{ - ADD_INSN1(ret, line, getglobal, - ((VALUE)node->nd_entry | 1)); + ADD_INSN1(ret, node, getglobal, ID2SYM(node->nd_entry)); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, node, pop); } break; } case NODE_IVAR:{ debugi("nd_vid", node->nd_vid); if (!popped) { - ADD_INSN2(ret, line, getinstancevariable, + ADD_INSN2(ret, node, getinstancevariable, ID2SYM(node->nd_vid), get_ivar_ic_value(iseq,node->nd_vid)); } @@ -7908,89 +9366,59 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in LABEL *lend = NEW_LABEL(line); int ic_index = body->is_size++; - ADD_INSN2(ret, line, opt_getinlinecache, lend, INT2FIX(ic_index)); - ADD_INSN1(ret, line, putobject, Qtrue); - ADD_INSN1(ret, line, getconstant, ID2SYM(node->nd_vid)); - ADD_INSN1(ret, line, opt_setinlinecache, INT2FIX(ic_index)); + ADD_INSN2(ret, node, opt_getinlinecache, lend, INT2FIX(ic_index)); + ADD_INSN1(ret, node, putobject, Qtrue); + ADD_INSN1(ret, node, getconstant, ID2SYM(node->nd_vid)); + ADD_INSN1(ret, node, opt_setinlinecache, INT2FIX(ic_index)); ADD_LABEL(ret, lend); } else { - ADD_INSN(ret, line, putnil); - ADD_INSN1(ret, line, putobject, Qtrue); - ADD_INSN1(ret, line, getconstant, ID2SYM(node->nd_vid)); + ADD_INSN(ret, node, putnil); + ADD_INSN1(ret, node, putobject, Qtrue); + ADD_INSN1(ret, node, getconstant, ID2SYM(node->nd_vid)); } if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, node, pop); } break; } case NODE_CVAR:{ if (!popped) { - ADD_INSN1(ret, line, getclassvariable, - ID2SYM(node->nd_vid)); + ADD_INSN2(ret, node, getclassvariable, + ID2SYM(node->nd_vid), + get_ivar_ic_value(iseq,node->nd_vid)); } break; } case NODE_NTH_REF:{ if (!popped) { if (!node->nd_nth) { - ADD_INSN(ret, line, putnil); + ADD_INSN(ret, node, putnil); break; } - ADD_INSN2(ret, line, getspecial, INT2FIX(1) /* '~' */, + ADD_INSN2(ret, node, getspecial, INT2FIX(1) /* '~' */, INT2FIX(node->nd_nth << 1)); } break; } case NODE_BACK_REF:{ if (!popped) { - ADD_INSN2(ret, line, getspecial, INT2FIX(1) /* '~' */, + ADD_INSN2(ret, node, getspecial, INT2FIX(1) /* '~' */, INT2FIX(0x01 | (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: - CHECK(COMPILE(recv, "receiver", node->nd_recv)); - CHECK(COMPILE(val, "value", node->nd_value)); - break; - case NODE_MATCH3: - CHECK(COMPILE(recv, "receiver", node->nd_value)); - CHECK(COMPILE(val, "value", node->nd_recv)); - break; - } - - ADD_SEQ(ret, recv); - ADD_SEQ(ret, val); - ADD_SEND(ret, line, idEqTilde, INT2FIX(1)); - - if (node->nd_args) { - compile_named_capture_assign(iseq, ret, node->nd_args); - } - - if (popped) { - ADD_INSN(ret, line, pop); - } + case NODE_MATCH3: + CHECK(compile_match(iseq, ret, node, popped, type)); break; - } case NODE_LIT:{ debugp_param("lit", node->nd_lit); if (!popped) { - ADD_INSN1(ret, line, putobject, node->nd_lit); + ADD_INSN1(ret, node, putobject, node->nd_lit); + RB_OBJ_WRITTEN(iseq, Qundef, node->nd_lit); } break; } @@ -8000,7 +9428,7 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in VALUE lit = node->nd_lit; if (!ISEQ_COMPILE_DATA(iseq)->option->frozen_string_literal) { lit = rb_fstring(lit); - ADD_INSN1(ret, line, putstring, lit); + ADD_INSN1(ret, node, putstring, lit); RB_OBJ_WRITTEN(iseq, Qundef, lit); } else { @@ -8013,7 +9441,7 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in else { lit = rb_fstring(lit); } - ADD_INSN1(ret, line, putobject, lit); + ADD_INSN1(ret, node, putobject, lit); RB_OBJ_WRITTEN(iseq, Qundef, lit); } } @@ -8023,41 +9451,29 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in compile_dstr(iseq, ret, node); if (popped) { - 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, rb_iseq_path(iseq), INT2FIX(line)); - } - ADD_INSN1(ret, line, freezestring, debug_info); - if (!NIL_P(debug_info)) { - RB_OBJ_WRITTEN(iseq, Qundef, rb_obj_freeze(debug_info)); - } - } + ADD_INSN(ret, node, pop); } break; } case NODE_XSTR:{ - ADD_CALL_RECEIVER(ret, line); + ADD_CALL_RECEIVER(ret, node); VALUE str = rb_fstring(node->nd_lit); - ADD_INSN1(ret, line, putobject, str); + ADD_INSN1(ret, node, putobject, str); RB_OBJ_WRITTEN(iseq, Qundef, str); - ADD_CALL(ret, line, idBackquote, INT2FIX(1)); + ADD_CALL(ret, node, idBackquote, INT2FIX(1)); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, node, pop); } break; } case NODE_DXSTR:{ - ADD_CALL_RECEIVER(ret, line); + ADD_CALL_RECEIVER(ret, node); compile_dstr(iseq, ret, node); - ADD_CALL(ret, line, idBackquote, INT2FIX(1)); + ADD_CALL(ret, node, idBackquote, INT2FIX(1)); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, node, pop); } break; } @@ -8068,7 +9484,7 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in compile_dregx(iseq, ret, node); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, node, pop); } break; } @@ -8077,51 +9493,50 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in const rb_iseq_t *block_iseq; block_iseq = NEW_CHILD_ISEQ(node->nd_body, make_name_for_block(iseq), ISEQ_TYPE_PLAIN, line); - ADD_INSN2(ret, line, once, block_iseq, INT2FIX(ic_index)); + ADD_INSN2(ret, node, once, block_iseq, INT2FIX(ic_index)); RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)block_iseq); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, node, pop); } break; } case NODE_ARGSCAT:{ if (popped) { CHECK(COMPILE(ret, "argscat head", node->nd_head)); - ADD_INSN1(ret, line, splatarray, Qfalse); - ADD_INSN(ret, line, pop); + ADD_INSN1(ret, node, splatarray, Qfalse); + ADD_INSN(ret, node, pop); CHECK(COMPILE(ret, "argscat body", node->nd_body)); - ADD_INSN1(ret, line, splatarray, Qfalse); - ADD_INSN(ret, line, pop); + ADD_INSN1(ret, node, splatarray, Qfalse); + ADD_INSN(ret, node, pop); } else { CHECK(COMPILE(ret, "argscat head", node->nd_head)); CHECK(COMPILE(ret, "argscat body", node->nd_body)); - ADD_INSN(ret, line, concatarray); + ADD_INSN(ret, node, concatarray); } break; } case NODE_ARGSPUSH:{ if (popped) { - CHECK(COMPILE(ret, "arsgpush head", node->nd_head)); - ADD_INSN1(ret, line, splatarray, Qfalse); - ADD_INSN(ret, line, pop); + CHECK(COMPILE(ret, "argspush head", node->nd_head)); + ADD_INSN1(ret, node, splatarray, Qfalse); + ADD_INSN(ret, node, pop); CHECK(COMPILE_(ret, "argspush body", node->nd_body, popped)); } else { - CHECK(COMPILE(ret, "arsgpush head", node->nd_head)); - CHECK(COMPILE_(ret, "argspush body", node->nd_body, popped)); - ADD_INSN1(ret, line, newarray, INT2FIX(1)); - ADD_INSN(ret, line, concatarray); + CHECK(COMPILE(ret, "argspush head", node->nd_head)); + CHECK(compile_array_1(iseq, ret, node->nd_body)); + ADD_INSN(ret, node, concatarray); } break; } case NODE_SPLAT:{ CHECK(COMPILE(ret, "splat", node->nd_head)); - ADD_INSN1(ret, line, splatarray, Qtrue); + ADD_INSN1(ret, node, splatarray, Qtrue); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, node, pop); } break; } @@ -8132,11 +9547,11 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in ISEQ_TYPE_METHOD, line); debugp_param("defn/iseq", rb_iseqw_new(method_iseq)); - ADD_INSN2(ret, line, definemethod, ID2SYM(mid), method_iseq); + ADD_INSN2(ret, node, definemethod, ID2SYM(mid), method_iseq); RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)method_iseq); if (!popped) { - ADD_INSN1(ret, line, putobject, ID2SYM(mid)); + ADD_INSN1(ret, node, putobject, ID2SYM(mid)); } break; @@ -8149,78 +9564,78 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in debugp_param("defs/iseq", rb_iseqw_new(singleton_method_iseq)); CHECK(COMPILE(ret, "defs: recv", node->nd_recv)); - ADD_INSN2(ret, line, definesmethod, ID2SYM(mid), singleton_method_iseq); + ADD_INSN2(ret, node, definesmethod, ID2SYM(mid), singleton_method_iseq); RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)singleton_method_iseq); if (!popped) { - ADD_INSN1(ret, line, putobject, ID2SYM(mid)); + 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)); + 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", node->nd_1st)); CHECK(COMPILE(ret, "alias arg2", node->nd_2nd)); - ADD_SEND(ret, line, id_core_set_method_alias, INT2FIX(3)); + ADD_SEND(ret, node, id_core_set_method_alias, INT2FIX(3)); if (popped) { - ADD_INSN(ret, line, pop); + 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->nd_alias)); - ADD_INSN1(ret, line, putobject, ID2SYM(node->nd_orig)); - ADD_SEND(ret, line, id_core_set_variable_alias, INT2FIX(2)); + ADD_INSN1(ret, node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); + ADD_INSN1(ret, node, putobject, ID2SYM(node->nd_alias)); + ADD_INSN1(ret, node, putobject, ID2SYM(node->nd_orig)); + ADD_SEND(ret, node, id_core_set_variable_alias, INT2FIX(2)); if (popped) { - ADD_INSN(ret, line, pop); + 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)); + 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", node->nd_undef)); - ADD_SEND(ret, line, id_core_undef_method, INT2FIX(2)); + ADD_SEND(ret, node, id_core_undef_method, INT2FIX(2)); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, node, pop); } break; } case NODE_CLASS:{ const rb_iseq_t *class_iseq = NEW_CHILD_ISEQ(node->nd_body, - rb_sprintf("", rb_id2str(node->nd_cpath->nd_mid)), + rb_str_freeze(rb_sprintf("", rb_id2str(node->nd_cpath->nd_mid))), ISEQ_TYPE_CLASS, line); const int flags = VM_DEFINECLASS_TYPE_CLASS | (node->nd_super ? VM_DEFINECLASS_FLAG_HAS_SUPERCLASS : 0) | compile_cpath(ret, iseq, node->nd_cpath); CHECK(COMPILE(ret, "super", node->nd_super)); - ADD_INSN3(ret, line, defineclass, ID2SYM(node->nd_cpath->nd_mid), class_iseq, INT2FIX(flags)); + ADD_INSN3(ret, node, defineclass, ID2SYM(node->nd_cpath->nd_mid), class_iseq, INT2FIX(flags)); RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)class_iseq); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, node, pop); } break; } case NODE_MODULE:{ const rb_iseq_t *module_iseq = NEW_CHILD_ISEQ(node->nd_body, - rb_sprintf("", rb_id2str(node->nd_cpath->nd_mid)), + rb_str_freeze(rb_sprintf("", rb_id2str(node->nd_cpath->nd_mid))), ISEQ_TYPE_CLASS, line); const int flags = VM_DEFINECLASS_TYPE_MODULE | compile_cpath(ret, iseq, node->nd_cpath); - ADD_INSN (ret, line, putnil); /* dummy */ - ADD_INSN3(ret, line, defineclass, ID2SYM(node->nd_cpath->nd_mid), module_iseq, INT2FIX(flags)); + ADD_INSN (ret, node, putnil); /* dummy */ + ADD_INSN3(ret, node, defineclass, ID2SYM(node->nd_cpath->nd_mid), module_iseq, INT2FIX(flags)); RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)module_iseq); if (popped) { - ADD_INSN(ret, line, pop); + ADD_INSN(ret, node, pop); } break; } @@ -8230,109 +9645,30 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in ISEQ_TYPE_CLASS, line); CHECK(COMPILE(ret, "sclass#recv", node->nd_recv)); - ADD_INSN (ret, line, putnil); + ADD_INSN (ret, node, putnil); CONST_ID(singletonclass, "singletonclass"); - ADD_INSN3(ret, line, defineclass, + 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, line, pop); + ADD_INSN(ret, node, pop); } break; } - case NODE_COLON2:{ - if (rb_is_const_id(node->nd_mid)) { - /* constant */ - LABEL *lend = NEW_LABEL(line); - int ic_index = body->is_size++; - - 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)) { - if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) { - ADD_INSN2(ret, line, opt_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, opt_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); - CHECK(COMPILE(ret, "colon2#nd_head", node->nd_head)); - ADD_CALL(ret, line, node->nd_mid, INT2FIX(1)); - } - if (popped) { - ADD_INSN(ret, line, pop); - } + case NODE_COLON2: + CHECK(compile_colon2(iseq, ret, node, popped)); break; - } - case NODE_COLON3:{ - LABEL *lend = NEW_LABEL(line); - int ic_index = 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, opt_getinlinecache, lend, INT2FIX(ic_index)); - ADD_INSN(ret, line, pop); - } - - ADD_INSN1(ret, line, putobject, rb_cObject); - ADD_INSN1(ret, line, putobject, Qtrue); - ADD_INSN1(ret, line, getconstant, ID2SYM(node->nd_mid)); - - if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) { - ADD_INSN1(ret, line, opt_setinlinecache, INT2FIX(ic_index)); - ADD_LABEL(ret, lend); - } - - if (popped) { - ADD_INSN(ret, line, pop); - } + case NODE_COLON3: + CHECK(compile_colon3(iseq, ret, node, popped)); break; - } case NODE_DOT2: - case NODE_DOT3:{ - int excl = type == NODE_DOT3; - VALUE flag = INT2FIX(excl); - const NODE *b = node->nd_beg; - const NODE *e = node->nd_end; - if (number_literal_p(b) && number_literal_p(e)) { - if (!popped) { - VALUE val = rb_range_new(b->nd_lit, e->nd_lit, excl); - ADD_INSN1(ret, line, 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, line, newrange, flag); - } - } + 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); @@ -8341,225 +9677,91 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in CHECK(compile_flip_flop(iseq, ret, node, type == NODE_FLIP2, ltrue, lfalse)); ADD_LABEL(ret, ltrue); - ADD_INSN1(ret, line, putobject, Qtrue); - ADD_INSNL(ret, line, jump, lend); + ADD_INSN1(ret, node, putobject, Qtrue); + ADD_INSNL(ret, node, jump, lend); ADD_LABEL(ret, lfalse); - ADD_INSN1(ret, line, putobject, Qfalse); + ADD_INSN1(ret, node, putobject, Qfalse); ADD_LABEL(ret, lend); break; } case NODE_SELF:{ if (!popped) { - ADD_INSN(ret, line, putself); + ADD_INSN(ret, node, putself); } break; } case NODE_NIL:{ if (!popped) { - ADD_INSN(ret, line, putnil); + ADD_INSN(ret, node, putnil); } break; } case NODE_TRUE:{ if (!popped) { - ADD_INSN1(ret, line, putobject, Qtrue); + ADD_INSN1(ret, node, putobject, Qtrue); } break; } case NODE_FALSE:{ if (!popped) { - ADD_INSN1(ret, line, putobject, Qfalse); + ADD_INSN1(ret, node, putobject, Qfalse); } break; } - case NODE_ERRINFO:{ - if (!popped) { - if (body->type == ISEQ_TYPE_RESCUE) { - ADD_GETLOCAL(ret, line, LVAR_ERRINFO, 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_GETLOCAL(ret, line, LVAR_ERRINFO, level); - } - else { - ADD_INSN(ret, line, putnil); - } - } - } + case NODE_ERRINFO: + CHECK(compile_errinfo(iseq, ret, node, popped)); break; - } case NODE_DEFINED: if (!popped) { CHECK(compile_defined_expr(iseq, ret, node, Qtrue)); - } - break; - case NODE_POSTEXE:{ - /* compiled to: - * ONCE{ rb_mRubyVMFrozenCore::core#set_postexe{ ... } } - */ - int is_index = body->is_size++; - struct rb_iseq_new_with_callback_callback_func *ifunc = - rb_iseq_new_with_callback_new_callback(build_postexe_iseq, node->nd_body); - const rb_iseq_t *once_iseq = - new_child_iseq_with_callback(iseq, ifunc, - rb_fstring(make_name_for_block(iseq)), iseq, ISEQ_TYPE_BLOCK, line); - - ADD_INSN2(ret, line, once, once_iseq, INT2FIX(is_index)); - RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)once_iseq); - - if (popped) { - ADD_INSN(ret, line, pop); - } - break; - } - case NODE_KW_ARG: - { - LABEL *end_label = NEW_LABEL(nd_line(node)); - const NODE *default_value = node->nd_body->nd_value; - - if (default_value == NODE_SPECIAL_REQUIRED_KEYWORD) { - /* required argument. do nothing */ - COMPILE_ERROR(ERROR_ARGS "unreachable"); - goto ng; - } - 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) { - COMPILE_ERROR(ERROR_ARGS "unreachable"); - goto 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, line, checkkeyword, INT2FIX(kw_bits_idx + VM_ENV_DATA_SIZE - 1), INT2FIX(keyword_idx)); - ADD_INSNL(ret, line, branchif, end_label); - CHECK(COMPILE_POPPED(ret, "keyword default argument", node->nd_body)); - ADD_LABEL(ret, end_label); - } - - break; - } - case NODE_DSYM:{ - compile_dstr(iseq, ret, node); - if (!popped) { - ADD_INSN(ret, line, intern); - } - 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; - VALUE argc; - LABEL *else_label = NULL; - VALUE branches = Qfalse; - - /* 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_LIST && 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->frozen_string_literal && - ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction) - { - VALUE str = rb_fstring(node->nd_args->nd_head->nd_lit); - CHECK(COMPILE(ret, "recv", node->nd_recv)); - CHECK(COMPILE(ret, "value", node->nd_args->nd_next->nd_head)); - if (!popped) { - ADD_INSN(ret, line, swap); - ADD_INSN1(ret, line, topn, INT2FIX(1)); - } - ADD_INSN2(ret, line, opt_aset_with, str, - new_callinfo(iseq, idASET, 2, 0, NULL, FALSE)); - RB_OBJ_WRITTEN(iseq, Qundef, str); - ADD_INSN(ret, line, pop); - break; - } - - INIT_ANCHOR(recv); - INIT_ANCHOR(args); - argc = setup_args(iseq, args, node->nd_args, &flag, NULL); - CHECK(!NIL_P(argc)); - - int asgnflag = COMPILE_RECV(recv, "recv", node); - CHECK(asgnflag != -1); - flag |= (unsigned int)asgnflag; + } + break; + case NODE_POSTEXE:{ + /* compiled to: + * ONCE{ rb_mRubyVMFrozenCore::core#set_postexe{ ... } } + */ + int is_index = body->is_size++; + struct rb_iseq_new_with_callback_callback_func *ifunc = + rb_iseq_new_with_callback_new_callback(build_postexe_iseq, node->nd_body); + const rb_iseq_t *once_iseq = + new_child_iseq_with_callback(iseq, ifunc, + rb_fstring(make_name_for_block(iseq)), iseq, ISEQ_TYPE_BLOCK, line); - debugp_param("argc", argc); - debugp_param("nd_mid", ID2SYM(mid)); + ADD_INSN2(ret, node, once, once_iseq, INT2FIX(is_index)); + RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)once_iseq); - if (!rb_is_attrset_id(mid)) { - /* safe nav attr */ - mid = rb_id_attrset(mid); - else_label = qcall_branch_start(iseq, recv, &branches, node, line); + if (popped) { + ADD_INSN(ret, node, pop); } + break; + } + case NODE_KW_ARG: + CHECK(compile_kw_arg(iseq, ret, node, popped)); + break; + case NODE_DSYM:{ + compile_dstr(iseq, ret, node); if (!popped) { - 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_WITH_FLAG(ret, line, idAREF, INT2FIX(1), INT2FIX(asgnflag)); - } - 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_WITH_FLAG(ret, line, idAREF, INT2FIX(1), INT2FIX(asgnflag)); - ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 2)); - ADD_INSN (ret, line, pop); - } - else { - ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 1)); - } + ADD_INSN(ret, node, intern); } else { - ADD_SEQ(ret, recv); - ADD_SEQ(ret, args); + ADD_INSN(ret, node, pop); } - ADD_SEND_WITH_FLAG(ret, line, mid, argc, INT2FIX(flag)); - qcall_branch_end(iseq, ret, else_label, branches, node, line); - ADD_INSN(ret, line, 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); + 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, line, pop); + ADD_INSN(ret, node, pop); } break; } @@ -8593,15 +9795,16 @@ calc_sp_depth(int depth, INSN *insn) static VALUE opobj_inspect(VALUE obj) { - struct RBasic *r = (struct RBasic *) obj; - if (!SPECIAL_CONST_P(r) && r->klass == 0) { - switch (BUILTIN_TYPE(r)) { + 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); @@ -8644,19 +9847,16 @@ insn_data_to_s_detail(INSN *iobj) case TS_VALUE: /* VALUE */ { VALUE v = OPERAND_AT(iobj, j); - rb_str_concat(str, opobj_inspect(v)); + if (!CLASS_OF(v)) + rb_str_cat2(str, ""); + 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_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 */ case TS_IVC: /* inline ivar cache */ case TS_ISE: /* inline storage entry */ @@ -8664,10 +9864,10 @@ insn_data_to_s_detail(INSN *iobj) break; case TS_CALLDATA: /* we store these as call infos at compile time */ { - const struct rb_call_info *ci = (struct rb_call_info *)OPERAND_AT(iobj, j); + const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(iobj, j); rb_str_cat2(str, "mid) rb_str_catf(str, "%"PRIsVALUE, rb_id2str(ci->mid)); - rb_str_catf(str, ", %d>", ci->orig_argc); + 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 */ @@ -8687,7 +9887,7 @@ insn_data_to_s_detail(INSN *iobj) } break; case TS_BUILTIN: - rb_bug("unsupported: TS_BUILTIN"); + rb_str_cat2(str, ""); break; default:{ rb_raise(rb_eSyntaxError, "unknown operand type: %c", type); @@ -8724,7 +9924,7 @@ dump_disasm_list_with_cursor(const LINK_ELEMENT *link, const LINK_ELEMENT *curr, { iobj = (INSN *)link; str = insn_data_to_s_detail(iobj); - printf("%04d %-65s(%4u)\n", pos, StringValueCStr(str), iobj->insn_info.line_no); + printf(" %04d %-65s(%4u)\n", pos, StringValueCStr(str), iobj->insn_info.line_no); pos += insn_data_length(iobj); break; } @@ -8738,13 +9938,13 @@ dump_disasm_list_with_cursor(const LINK_ELEMENT *link, const LINK_ELEMENT *curr, case ISEQ_ELEMENT_TRACE: { TRACE *trace = (TRACE *)link; - printf("trace: %0x\n", trace->event); + 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); + printf(" adjust: [label: %d]\n", adjust->label ? adjust->label->label_no : -1); break; } default: @@ -8795,18 +9995,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; @@ -8836,7 +10034,7 @@ iseq_build_from_ary_exception(rb_iseq_t *iseq, struct st_table *labels_table, rb_raise(rb_eSyntaxError, "wrong exception entry"); } type = get_exception_sym2type(RARRAY_AREF(v, 0)); - if (RARRAY_AREF(v, 1) == Qnil) { + if (NIL_P(RARRAY_AREF(v, 1))) { eiseq = NULL; } else { @@ -8872,7 +10070,7 @@ insn_make_insn_table(void) table = st_init_numtable_with_size(VM_INSTRUCTION_SIZE); for (i=0; ikeyword_len = len; @@ -8931,13 +10129,15 @@ iseq_build_callinfo_from_hash(rb_iseq_t *iseq, VALUE op) } } - return (VALUE)new_callinfo(iseq, mid, orig_argc, flag, kw_arg, (flag & VM_CALL_ARGS_SIMPLE) == 0); + 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(#ev))) return ev; +#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); @@ -8951,13 +10151,13 @@ event_name_to_flag(VALUE sym) static int iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *const anchor, - VALUE body, VALUE labels_wrapper) + VALUE body, VALUE node_ids, VALUE labels_wrapper) { /* TODO: body should be frozen */ long i, len = RARRAY_LEN(body); struct st_table *labels_table = DATA_PTR(labels_wrapper); int j; - int line_no = 0; + int line_no = 0, node_id = -1, insn_idx = 0; int ret = COMPILE_OK; /* @@ -8991,6 +10191,10 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *const anchor, 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 */ @@ -9008,7 +10212,14 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *const anchor, } if (argc > 0) { - argv = compile_data_alloc2(iseq, sizeof(VALUE), argc); + argv = compile_data_calloc2(iseq, sizeof(VALUE), argc); + + // add element before operand setup to make GC root + NODE dummy_line_node = generate_dummy_line_node(line_no, node_id); + ADD_ELEM(anchor, + (LINK_ELEMENT*)new_insn_core(iseq, &dummy_line_node, + (enum ruby_vminsn_type)insn_id, argc, argv)); + for (j=0; j= iseq->body->is_size) { iseq->body->is_size = NUM2INT(op) + 1; } + FL_SET((VALUE)iseq, ISEQ_MARKABLE_ISEQ); break; case TS_CALLDATA: argv[j] = iseq_build_callinfo_from_hash(iseq, op); @@ -9092,9 +10298,12 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *const anchor, } } } - ADD_ELEM(anchor, - (LINK_ELEMENT*)new_insn_core(iseq, line_no, - (enum ruby_vminsn_type)insn_id, argc, argv)); + else { + NODE dummy_line_node = generate_dummy_line_node(line_no, node_id); + ADD_ELEM(anchor, + (LINK_ELEMENT*)new_insn_core(iseq, &dummy_line_node, + (enum ruby_vminsn_type)insn_id, argc, NULL)); + } } else { rb_raise(rb_eTypeError, "unexpected object for instruction"); @@ -9138,7 +10347,7 @@ iseq_build_kw(rb_iseq_t *iseq, VALUE params, VALUE keywords) iseq->body->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 = (ID *)&iseq->body->local_table[i]; @@ -9228,13 +10437,15 @@ rb_iseq_mark_insn_storage(struct iseq_compile_data_storage *storage) case TS_CDHASH: case TS_ISEQ: case TS_VALUE: + case TS_CALLDATA: // ci is stored. { VALUE op = OPERAND_AT(iobj, j); + if (!SPECIAL_CONST_P(op)) { rb_gc_mark(op); } - break; } + break; default: break; } @@ -9249,7 +10460,7 @@ void rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc, VALUE locals, VALUE params, 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; @@ -9257,7 +10468,7 @@ rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc, VALUE locals, VALUE params, VALUE labels_wrapper = Data_Wrap_Struct(0, rb_mark_set, st_free_table, 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); @@ -9294,6 +10505,14 @@ rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc, VALUE locals, VALUE params, #undef INT_PARAM } + 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 + if (RB_TYPE_P(arg_opt_labels, T_ARRAY)) { len = RARRAY_LENINT(arg_opt_labels); iseq->body->param.flags.has_opt = !!(len - 1 >= 0); @@ -9343,7 +10562,7 @@ 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->param.size = arg_size; iseq->body->local_table_size = local_size; @@ -9393,100 +10612,6 @@ rb_local_defined(ID id, const rb_iseq_t *iseq) return 0; } -static int -caller_location(VALUE *path, VALUE *realpath) -{ - const rb_execution_context_t *ec = GET_EC(); - const rb_control_frame_t *const cfp = - rb_vm_get_ruby_level_next_cfp(ec, ec->cfp); - - if (cfp) { - int line = rb_vm_get_sourceline(cfp); - *path = rb_iseq_path(cfp->iseq); - *realpath = rb_iseq_realpath(cfp->iseq); - return line; - } - else { - *path = rb_fstring_lit(""); - *realpath = *path; - return 1; - } -} - -typedef struct { - VALUE arg; - rb_insn_func_t func; - int line; -} accessor_args; - -static const rb_iseq_t * -method_for_self(VALUE name, VALUE arg, rb_insn_func_t func, - void (*build)(rb_iseq_t *, LINK_ANCHOR *, const void *)) -{ - VALUE path, realpath; - accessor_args acc; - - acc.arg = arg; - acc.func = func; - acc.line = caller_location(&path, &realpath); - struct rb_iseq_new_with_callback_callback_func *ifunc = - rb_iseq_new_with_callback_new_callback(build, &acc); - return rb_iseq_new_with_callback(ifunc, - rb_sym2str(name), path, realpath, - INT2FIX(acc.line), 0, ISEQ_TYPE_METHOD, 0); -} - -static void -for_self_aref(rb_iseq_t *iseq, LINK_ANCHOR *ret, const void *a) -{ - const accessor_args *const args = (void *)a; - const int line = args->line; - struct rb_iseq_constant_body *const body = iseq->body; - - iseq_set_local_table(iseq, 0); - body->param.lead_num = 0; - body->param.size = 0; - - ADD_INSN1(ret, line, putobject, args->arg); - ADD_INSN1(ret, line, opt_call_c_function, (VALUE)args->func); -} - -static void -for_self_aset(rb_iseq_t *iseq, LINK_ANCHOR *ret, const void *a) -{ - const accessor_args *const args = (void *)a; - const int line = args->line; - struct rb_iseq_constant_body *const body = iseq->body; - static const ID vars[] = {1, idUScore}; - - iseq_set_local_table(iseq, vars); - body->param.lead_num = 1; - body->param.size = 1; - - ADD_GETLOCAL(ret, line, numberof(vars)-1, 0); - ADD_INSN1(ret, line, putobject, args->arg); - ADD_INSN1(ret, line, opt_call_c_function, (VALUE)args->func); - ADD_INSN(ret, line, pop); -} - -/* - * 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); -} - -/* - * func (index, value) -> (index, value) - */ -const rb_iseq_t * -rb_method_for_self_aset(VALUE name, VALUE arg, rb_insn_func_t func) -{ - return method_for_self(name, arg, func, for_self_aset); -} - /* ISeq binary format */ #ifndef IBF_ISEQ_DEBUG @@ -9502,7 +10627,7 @@ typedef unsigned int ibf_offset_t; #define IBF_MAJOR_VERSION ISEQ_MAJOR_VERSION #if RUBY_DEVEL -#define IBF_DEVEL_VERSION 2 +#define IBF_DEVEL_VERSION 3 #define IBF_MINOR_VERSION (ISEQ_MINOR_VERSION * 10000 + IBF_DEVEL_VERSION) #else #define IBF_MINOR_VERSION ISEQ_MINOR_VERSION @@ -9523,11 +10648,10 @@ struct ibf_header { struct ibf_dump_buffer { VALUE str; - VALUE obj_list; /* [objs] */ + st_table *obj_table; /* obj -> obj number */ }; struct ibf_dump { - VALUE iseq_list; /* [iseqs] */ st_table *iseq_table; /* iseq -> iseq number */ struct ibf_dump_buffer global_buffer; struct ibf_dump_buffer *current_buffer; @@ -9554,6 +10678,85 @@ struct ibf_load { struct ibf_load_buffer *current_buffer; }; +struct pinned_list { + long size; + VALUE * buffer; +}; + +static void +pinned_list_mark(void *ptr) +{ + 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]); + } + } +} + +static void +pinned_list_free(void *ptr) +{ + struct pinned_list *list = (struct pinned_list *)ptr; + xfree(list->buffer); + xfree(ptr); +} + +static size_t +pinned_list_memsize(const void *ptr) +{ + struct pinned_list *list = (struct pinned_list *)ptr; + return sizeof(struct pinned_list) + (list->size * sizeof(VALUE *)); +} + +static const rb_data_type_t pinned_list_type = { + "pinned_list", + {pinned_list_mark, pinned_list_free, pinned_list_memsize,}, + 0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY +}; + +static VALUE +pinned_list_fetch(VALUE list, long offset) +{ + struct pinned_list * ptr; + + TypedData_Get_Struct(list, struct pinned_list, &pinned_list_type, ptr); + + if (offset >= ptr->size) { + rb_raise(rb_eIndexError, "object index out of range: %ld", offset); + } + + return ptr->buffer[offset]; +} + +static void +pinned_list_store(VALUE list, long offset, VALUE object) +{ + struct pinned_list * ptr; + + TypedData_Get_Struct(list, struct pinned_list, &pinned_list_type, ptr); + + if (offset >= ptr->size) { + rb_raise(rb_eIndexError, "object index out of range: %ld", offset); + } + + RB_OBJ_WRITE(list, &ptr->buffer[offset], object); +} + +static VALUE +pinned_list_new(long size) +{ + struct pinned_list * ptr; + VALUE obj_list = + TypedData_Make_Struct(0, struct pinned_list, &pinned_list_type, ptr); + + ptr->buffer = xcalloc(size, sizeof(VALUE)); + ptr->size = size; + + return obj_list; +} + static ibf_offset_t ibf_dump_pos(struct ibf_dump *dump) { @@ -9649,7 +10852,7 @@ ibf_table_lookup(struct st_table *table, st_data_t key) } 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); @@ -9668,26 +10871,19 @@ static void ibf_dump_object_list(struct ibf_dump *dump, ibf_offset_t *obj_list_o 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 VALUE -ibf_dump_object_list_new(void) +static st_table * +ibf_dump_object_table_new(void) { - VALUE obj_list = rb_ary_tmp_new(1); - rb_ary_push(obj_list, Qnil); /* 0th is nil */ + 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_list; + return obj_table; } static VALUE ibf_dump_object(struct ibf_dump *dump, VALUE obj) { - VALUE obj_list = dump->current_buffer->obj_list; - long index = RARRAY_LEN(obj_list); - long i; - for (i=0; icurrent_buffer->obj_table, (st_data_t)obj); } static VALUE @@ -9711,12 +10907,6 @@ ibf_load_id(const struct ibf_load *load, const ID id_index) /* dump/load: code */ -static VALUE -ibf_dump_calldata(struct ibf_dump *dump, const struct rb_call_data *cd) -{ - return (cd->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 int @@ -9726,28 +10916,10 @@ ibf_dump_iseq(struct ibf_dump *dump, const rb_iseq_t *iseq) 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_push(dump->iseq_list, (VALUE)iseq); - } - return 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) -{ - return (VALUE)ibf_dump_id(dump, entry->id); -} - -static VALUE -ibf_load_gentry(const struct ibf_load *load, const struct rb_global_entry *entry) -{ - ID gid = ibf_load_id(load, (ID)(VALUE)entry); - return (VALUE)rb_global_entry(gid); -} - static unsigned char ibf_load_byte(const struct ibf_load *load, ibf_offset_t *offset) { @@ -9770,6 +10942,7 @@ 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 }; @@ -9848,14 +11021,13 @@ ibf_load_builtin(const struct ibf_load *load, ibf_offset_t *offset) const char *name = (char *)ibf_load_ptr(load, offset, len); if (0) { - for (int i=0; ibuiltin_function_table; - if (table == NULL) rb_bug("%s: table is not provided.", RUBY_FUNCTION_NAME_STRING); + if (table == NULL) rb_raise(rb_eArgError, "builtin function table is not provided"); if (strncmp(table[i].name, name, len) != 0) { - rb_bug("%s: index (%d) mismatch (expect %s but %s).", RUBY_FUNCTION_NAME_STRING, i, name, table[i].name); + 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); @@ -9909,17 +11081,11 @@ ibf_dump_code(struct ibf_dump *dump, const rb_iseq_t *iseq) break; case TS_CALLDATA: { - /* ibf_dump_calldata() always returns either Qtrue or Qfalse */ - char c = ibf_dump_calldata(dump, (const struct rb_call_data *)op) == Qtrue; // 1 or 0 - ibf_dump_write_byte(dump, c); goto skip_wv; } case TS_ID: wv = ibf_dump_id(dump, (ID)op); break; - case TS_GENTRY: - wv = ibf_dump_gentry(dump, (const struct rb_global_entry *)op); - break; case TS_FUNCPTR: rb_raise(rb_eRuntimeError, "TS_FUNCPTR is not supported"); goto skip_wv; @@ -9940,63 +11106,89 @@ ibf_dump_code(struct ibf_dump *dump, const rb_iseq_t *iseq) } static VALUE * -ibf_load_code(const struct ibf_load *load, const rb_iseq_t *iseq, ibf_offset_t bytecode_offset, ibf_offset_t bytecode_size, unsigned int iseq_size) +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) { + VALUE iseqv = (VALUE)iseq; unsigned int code_index; ibf_offset_t reading_pos = bytecode_offset; VALUE *code = ALLOC_N(VALUE, iseq_size); struct rb_iseq_constant_body *load_body = iseq->body; struct rb_call_data *cd_entries = load_body->call_data; - struct rb_kwarg_call_data *cd_kw_entries = (struct rb_kwarg_call_data *)&load_body->call_data[load_body->ci_size]; union iseq_inline_storage_entry *is_entries = load_body->is_entries; for (code_index=0; code_indextype = &cdhash_type; + rb_hash_rehash(v); // hash function changed + 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; + RB_OBJ_WRITTEN(iseqv, Qundef, v); + FL_SET(iseqv, ISEQ_MARKABLE_ISEQ); + 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(iseq, Qundef, v); - FL_SET(iseq, ISEQ_MARKABLE_ISEQ); + RB_OBJ_WRITTEN(iseqv, Qundef, v); + FL_SET(iseqv, ISEQ_MARKABLE_ISEQ); } break; } case TS_ISE: - FL_SET(iseq, ISEQ_MARKABLE_ISEQ); - /* fall through */ case TS_IC: case TS_IVC: { VALUE op = ibf_load_small_value(load, &reading_pos); code[code_index] = (VALUE)&is_entries[op]; + + if (insn == BIN(opt_getinlinecache) && operand_type == TS_IC) { + // Store the instruction index for opt_getinlinecache on the IC for + // YJIT to invalidate code when opt_setinlinecache runs. + is_entries[op].ic_cache.get_insn_idx = insn_index; + } } + FL_SET(iseqv, ISEQ_MARKABLE_ISEQ); break; case TS_CALLDATA: { - unsigned char op = ibf_load_byte(load, &reading_pos); - code[code_index] = op ? (VALUE)cd_kw_entries++ : (VALUE)cd_entries++; /* op is 1 (kw) or 0 (!kw) */ + code[code_index] = (VALUE)cd_entries++; } break; case TS_ID: @@ -10005,12 +11197,6 @@ ibf_load_code(const struct ibf_load *load, const rb_iseq_t *iseq, ibf_offset_t b code[code_index] = ibf_load_id(load, (ID)(VALUE)op); } break; - case TS_GENTRY: - { - VALUE op = ibf_load_small_value(load, &reading_pos); - code[code_index] = ibf_load_gentry(load, (const struct rb_global_entry *)(VALUE)op); - } - break; case TS_FUNCPTR: rb_raise(rb_eRuntimeError, "TS_FUNCPTR is not supported"); break; @@ -10121,6 +11307,9 @@ ibf_dump_insns_info_body(struct ibf_dump *dump, const rb_iseq_t *iseq) unsigned int i; for (i = 0; i < iseq->body->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); } @@ -10136,6 +11325,9 @@ ibf_load_insns_info_body(const struct ibf_load *load, ibf_offset_t body_offset, 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); } @@ -10268,92 +11460,133 @@ ibf_dump_ci_entries(struct ibf_dump *dump, const rb_iseq_t *iseq) { const struct rb_iseq_constant_body *const body = iseq->body; const unsigned int ci_size = body->ci_size; - const unsigned int ci_kw_size = body->ci_kw_size; - const struct rb_call_data *calls = body->call_data; - const struct rb_kwarg_call_data *kw_calls = (const struct rb_kwarg_call_data *)&body->call_data[ci_size]; + const struct rb_call_data *cds = body->call_data; ibf_offset_t offset = ibf_dump_pos(dump); unsigned int i; for (i = 0; i < ci_size; i++) { - VALUE mid = ibf_dump_id(dump, calls[i].ci.mid); - - ibf_dump_write_small_value(dump, mid); - ibf_dump_write_small_value(dump, calls[i].ci.flag); - ibf_dump_write_small_value(dump, calls[i].ci.orig_argc); + 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; jkeywords[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); + } } - for (i = 0; i < ci_kw_size; i++) { - const struct rb_call_info_kw_arg *kw_arg = kw_calls[i].ci_kw.kw_arg; + return offset; +} - VALUE mid = ibf_dump_id(dump, kw_calls[i].ci_kw.ci.mid); +static enum rb_id_table_iterator_result +dump_outer_variable(ID id, VALUE val, void *dump) +{ + ibf_dump_write_small_value(dump, ibf_dump_id(dump, id)); + ibf_dump_write_small_value(dump, val); - ibf_dump_write_small_value(dump, mid); - ibf_dump_write_small_value(dump, kw_calls[i].ci_kw.ci.flag); - ibf_dump_write_small_value(dump, kw_calls[i].ci_kw.ci.orig_argc); + return ID_TABLE_CONTINUE; +} - ibf_dump_write_small_value(dump, kw_arg->keyword_len); +static ibf_offset_t +ibf_dump_outer_variables(struct ibf_dump *dump, const rb_iseq_t *iseq) +{ + struct rb_id_table * ovs = iseq->body->outer_variables; - int j; - for (j = 0; j < kw_calls[i].ci_kw.kw_arg->keyword_len; j++) { - VALUE keyword = ibf_dump_object(dump, kw_arg->keywords[j]); /* kw_arg->keywords[n] is Symbol */ + ibf_offset_t offset = ibf_dump_pos(dump); - ibf_dump_write_small_value(dump, keyword); - } + if (ovs) { + ibf_dump_write_small_value(dump, (VALUE)rb_id_table_size(ovs)); + rb_id_table_foreach(ovs, dump_outer_variable, (void *)dump); + } + else { + ibf_dump_write_small_value(dump, (VALUE)0); } return offset; } /* note that we dump out rb_call_info but load back rb_call_data */ -static struct rb_call_data * +static void ibf_load_ci_entries(const struct ibf_load *load, ibf_offset_t ci_entries_offset, unsigned int ci_size, - unsigned int ci_kw_size) + struct rb_call_data **cd_ptr) { ibf_offset_t reading_pos = ci_entries_offset; unsigned int i; - struct rb_call_data *calls = - rb_xcalloc_mul_add_mul( - sizeof(struct rb_call_data), ci_size, - sizeof(struct rb_kwarg_call_data), ci_kw_size); - struct rb_kwarg_call_data *kw_calls = (struct rb_kwarg_call_data *)&calls[ci_size]; + 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->keyword_len = kwlen; + for (int j=0; jkeywords[j] = ibf_load_object(load, keyword); + } + } - calls[i].ci.mid = ibf_load_id(load, mid_index); - calls[i].ci.flag = (unsigned int)ibf_load_small_value(load, &reading_pos); - calls[i].ci.orig_argc = (int)ibf_load_small_value(load, &reading_pos); + 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; + } } +} - for (i = 0; i < ci_kw_size; i++) { - VALUE mid_index = ibf_load_small_value(load, &reading_pos); - - kw_calls[i].ci_kw.ci.mid = ibf_load_id(load, mid_index); - kw_calls[i].ci_kw.ci.flag = (unsigned int)ibf_load_small_value(load, &reading_pos); - kw_calls[i].ci_kw.ci.orig_argc = (int)ibf_load_small_value(load, &reading_pos); - - int keyword_len = (int)ibf_load_small_value(load, &reading_pos); +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; - kw_calls[i].ci_kw.kw_arg = - rb_xmalloc_mul_add(keyword_len - 1, sizeof(VALUE), sizeof(struct rb_call_info_kw_arg)); + struct rb_id_table *tbl = NULL; - kw_calls[i].ci_kw.kw_arg->keyword_len = keyword_len; + size_t table_size = (size_t)ibf_load_small_value(load, &reading_pos); - int j; - for (j = 0; j < kw_calls[i].ci_kw.kw_arg->keyword_len; j++) { - VALUE keyword = ibf_load_small_value(load, &reading_pos); + if (table_size > 0) { + tbl = rb_id_table_create(table_size); + } - kw_calls[i].ci_kw.kw_arg->keywords[j] = ibf_load_object(load, keyword); - } + 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 calls; + return tbl; } static ibf_offset_t @@ -10375,7 +11608,7 @@ ibf_dump_iseq_each(struct ibf_dump *dump, const rb_iseq_t *iseq) struct ibf_dump_buffer *saved_buffer = dump->current_buffer; struct ibf_dump_buffer buffer; buffer.str = rb_str_new(0, 0); - buffer.obj_list = ibf_dump_object_list_new(); + buffer.obj_table = ibf_dump_object_table_new(); dump->current_buffer = &buffer; #endif @@ -10394,7 +11627,9 @@ ibf_dump_iseq_each(struct ibf_dump *dump, const rb_iseq_t *iseq) const ibf_offset_t catch_table_offset = ibf_dump_catch_table(dump, iseq); const int parent_iseq_index = ibf_dump_iseq(dump, iseq->body->parent_iseq); const int local_iseq_index = ibf_dump_iseq(dump, iseq->body->local_iseq); + const int mandatory_only_iseq_index = ibf_dump_iseq(dump, iseq->body->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; @@ -10455,14 +11690,16 @@ ibf_dump_iseq_each(struct ibf_dump *dump, const rb_iseq_t *iseq) 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->is_size); ibf_dump_write_small_value(dump, body->ci_size); - ibf_dump_write_small_value(dump, body->ci_kw_size); ibf_dump_write_small_value(dump, body->stack_max); ibf_dump_write_small_value(dump, body->catch_except_p); + ibf_dump_write_small_value(dump, body->builtin_inline_p); #undef IBF_BODY_OFFSET @@ -10480,6 +11717,8 @@ ibf_dump_iseq_each(struct ibf_dump *dump, const rb_iseq_t *iseq) 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; @@ -10507,17 +11746,16 @@ ibf_load_iseq_each(struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t offset) struct ibf_load_buffer *saved_buffer = load->current_buffer; load->current_buffer = &load->global_buffer; - const ibf_offset_t iseq_start = ibf_load_small_value(load, &reading_pos); - const ibf_offset_t iseq_length_bytes = ibf_load_small_value(load, &reading_pos); - const ibf_offset_t body_offset = ibf_load_small_value(load, &reading_pos); + 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); struct ibf_load_buffer buffer; buffer.buff = load->global_buffer.buff + iseq_start; buffer.size = iseq_length_bytes; - buffer.obj_list_offset = ibf_load_small_value(load, &reading_pos); - buffer.obj_list_size = ibf_load_small_value(load, &reading_pos); - buffer.obj_list = rb_ary_tmp_new(buffer.obj_list_size); - rb_ary_resize(buffer.obj_list, buffer.obj_list_size); + 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; @@ -10560,14 +11798,16 @@ ibf_load_iseq_each(struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t offset) 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 is_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 ci_kw_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 char catch_except_p = (char)ibf_load_small_value(load, &reading_pos); + const bool builtin_inline_p = (bool)ibf_load_small_value(load, &reading_pos); #undef IBF_BODY_OFFSET @@ -10593,12 +11833,12 @@ ibf_load_iseq_each(struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t offset) load_body->local_table_size = local_table_size; load_body->is_size = is_size; load_body->ci_size = ci_size; - load_body->ci_kw_size = ci_kw_size; load_body->insns_info.size = insns_info_size; ISEQ_COVERAGE_SET(iseq, Qnil); ISEQ_ORIGINAL_ISEQ_CLEAR(iseq); - iseq->body->variable.flip_count = variable_flip_count; + 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; @@ -10607,9 +11847,11 @@ ibf_load_iseq_each(struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t offset) 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->catch_except_p = catch_except_p; + load_body->builtin_inline_p = builtin_inline_p; load_body->is_entries = ZALLOC_N(union iseq_inline_storage_entry, is_size); - load_body->call_data = ibf_load_ci_entries(load, ci_entries_offset, ci_size, ci_kw_size); + 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; @@ -10619,6 +11861,7 @@ ibf_load_iseq_each(struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t offset) load_body->catch_table = ibf_load_catch_table(load, catch_table_offset, catch_table_size); load_body->parent_iseq = ibf_load_iseq(load, (const rb_iseq_t *)(VALUE)parent_iseq_index); load_body->local_iseq = ibf_load_iseq(load, (const rb_iseq_t *)(VALUE)local_iseq_index); + load_body->mandatory_only_iseq = ibf_load_iseq(load, (const rb_iseq_t *)(VALUE)mandatory_only_iseq_index); ibf_load_code(load, iseq, bytecode_offset, bytecode_size, iseq_size); #if VM_INSN_INFO_TABLE_IMPL == 2 @@ -10667,22 +11910,41 @@ ibf_load_iseq_each(struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t offset) verify_call_cache(iseq); } +struct ibf_dump_iseq_list_arg +{ + struct ibf_dump *dump; + VALUE offset_list; +}; + +static int +ibf_dump_iseq_list_i(st_data_t key, st_data_t val, st_data_t ptr) +{ + const rb_iseq_t *iseq = (const rb_iseq_t *)key; + struct ibf_dump_iseq_list_arg *args = (struct ibf_dump_iseq_list_arg *)ptr; + + 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_iseq_list(struct ibf_dump *dump, struct ibf_header *header) { - VALUE list = rb_ary_tmp_new(RARRAY_LEN(dump->iseq_list)); - long i; + VALUE offset_list = rb_ary_tmp_new(dump->iseq_table->num_entries); - for (i = 0; i < RARRAY_LEN(dump->iseq_list); i++) { - ibf_offset_t offset = ibf_dump_iseq_each(dump, (rb_iseq_t *)RARRAY_AREF(dump->iseq_list, i)); - rb_ary_push(list, UINT2NUM(offset)); - } + struct ibf_dump_iseq_list_arg args; + args.dump = dump; + args.offset_list = offset_list; + + st_foreach(dump->iseq_table, ibf_dump_iseq_list_i, (st_data_t)&args); - long size = RARRAY_LEN(dump->iseq_list); + 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(list, i)); + offsets[i] = NUM2UINT(RARRAY_AREF(offset_list, i)); } ibf_dump_align(dump, sizeof(ibf_offset_t)); @@ -10711,6 +11973,7 @@ enum ibf_object_class_index { 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 { @@ -10772,11 +12035,13 @@ ibf_dump_object_unsupported(struct ibf_dump *dump, VALUE 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_raise(rb_eArgError, "unsupported"); - return Qnil; + UNREACHABLE_RETURN(Qnil); } static void @@ -10798,6 +12063,9 @@ ibf_dump_object_class(struct ibf_dump *dump, VALUE obj) 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); @@ -10822,6 +12090,8 @@ ibf_load_object_class(const struct ibf_load *load, const struct ibf_object_heade 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_raise(rb_eArgError, "ibf_load_object_class: unknown class (%d)", (int)cindex); @@ -10869,17 +12139,21 @@ ibf_load_object_string(const struct ibf_load *load, const struct ibf_object_head const long len = (long)ibf_load_small_value(load, &reading_pos); const char *ptr = load->current_buffer->buff + reading_pos; - VALUE str = rb_str_new(ptr, len); - 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)); } - 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_interned_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; } @@ -11111,18 +12385,24 @@ ibf_load_object_complex_rational(const struct ibf_load *load, const struct ibf_o static void ibf_dump_object_symbol(struct ibf_dump *dump, VALUE obj) { - VALUE str = rb_sym2str(obj); - VALUE str_index = ibf_dump_object(dump, str); - - ibf_dump_write_small_value(dump, 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) { - VALUE str_index = ibf_load_small_value(load, &offset); - VALUE str = ibf_load_object(load, str_index); - 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); } @@ -11189,7 +12469,7 @@ ibf_load_object_object_header(const struct ibf_load *load, ibf_offset_t *offset) } static ibf_offset_t -ibf_dump_object_object(struct ibf_dump *dump, VALUE obj_list, VALUE obj) +ibf_dump_object_object(struct ibf_dump *dump, VALUE obj) { struct ibf_object_header obj_header; ibf_offset_t current_offset; @@ -11199,12 +12479,9 @@ ibf_dump_object_object(struct ibf_dump *dump, VALUE obj_list, VALUE obj) IBF_W_ALIGN(ibf_offset_t); current_offset = ibf_dump_pos(dump); - 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; - } + 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; @@ -11212,8 +12489,7 @@ ibf_dump_object_object(struct ibf_dump *dump, VALUE obj_list, VALUE obj) ibf_dump_write_small_value(dump, obj); } else { - obj_header.internal = (RBASIC_CLASS(obj) == 0) ? TRUE : FALSE; - dump_object: + obj_header.internal = SPECIAL_CONST_P(obj) ? FALSE : (RBASIC_CLASS(obj) == 0) ? TRUE : FALSE; obj_header.special_const = FALSE; obj_header.frozen = FL_TEST(obj, FL_FREEZE) ? TRUE : FALSE; ibf_dump_object_object_header(dump, obj_header); @@ -11265,12 +12541,9 @@ ibf_load_object(const struct ibf_load *load, VALUE object_index) if (object_index == 0) { return Qnil; } - else if (object_index >= (VALUE)RARRAY_LEN(load->current_buffer->obj_list)) { - rb_raise(rb_eIndexError, "object index out of range: %"PRIdVALUE, object_index); - } else { - VALUE obj = rb_ary_entry(load->current_buffer->obj_list, (long)object_index); - if (obj == Qnil) { /* TODO: avoid multiple Qnil load */ + 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); @@ -11294,7 +12567,7 @@ ibf_load_object(const struct ibf_load *load, VALUE object_index) obj = (*load_object_functions[header.type])(load, &header, offset); } - rb_ary_store(load->current_buffer->obj_list, (long)object_index, obj); + 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", @@ -11304,28 +12577,48 @@ ibf_load_object(const struct ibf_load *load, VALUE object_index) } } +struct ibf_dump_object_list_arg +{ + struct ibf_dump *dump; + VALUE offset_list; +}; + +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, ibf_offset_t *obj_list_offset, unsigned int *obj_list_size) { - VALUE obj_list = dump->current_buffer->obj_list; - VALUE list = rb_ary_tmp_new(RARRAY_LEN(obj_list)); - int i, size; + st_table *obj_table = dump->current_buffer->obj_table; + VALUE offset_list = rb_ary_tmp_new(obj_table->num_entries); + + 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); - for (i=0; inum_entries; + st_index_t i; + for (i=0; iglobal_buffer.str); - rb_gc_mark(dump->global_buffer.obj_list); - rb_gc_mark(dump->iseq_list); + + 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->global_buffer.obj_table) { + st_free_table(dump->global_buffer.obj_table); + dump->global_buffer.obj_table = 0; + } if (dump->iseq_table) { st_free_table(dump->iseq_table); dump->iseq_table = 0; @@ -11354,6 +12652,7 @@ ibf_dump_memsize(const void *ptr) struct ibf_dump *dump = (struct ibf_dump *)ptr; size_t size = sizeof(*dump); if (dump->iseq_table) size += st_memsize(dump->iseq_table); + if (dump->global_buffer.obj_table) size += st_memsize(dump->global_buffer.obj_table); return size; } @@ -11366,9 +12665,11 @@ static const rb_data_type_t ibf_dump_type = { static void ibf_dump_setup(struct ibf_dump *dump, VALUE dumper_obj) { - RB_OBJ_WRITE(dumper_obj, &dump->iseq_list, rb_ary_tmp_new(0)); - RB_OBJ_WRITE(dumper_obj, &dump->global_buffer.obj_list, ibf_dump_object_list_new()); + 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->current_buffer = &dump->global_buffer; @@ -11446,7 +12747,7 @@ rb_ibf_load_iseq_complete(rb_iseq_t *iseq) #endif ibf_load_iseq_each(load, iseq, offset); ISEQ_COMPILE_DATA_CLEAR(iseq); - FL_UNSET(iseq, ISEQ_NOT_LOADED_YET); + FL_UNSET((VALUE)iseq, ISEQ_NOT_LOADED_YET); rb_iseq_init_trace(iseq); load->iseq = prev_src_iseq; } @@ -11473,12 +12774,12 @@ ibf_load_iseq(const struct ibf_load *load, const rb_iseq_t *index_iseq) return NULL; } else { - VALUE iseqv = rb_ary_entry(load->iseq_list, iseq_index); + VALUE iseqv = pinned_list_fetch(load->iseq_list, iseq_index); #if IBF_ISEQ_DEBUG fprintf(stderr, "ibf_load_iseq: iseqv=%p\n", (void *)iseqv); #endif - if (iseqv != Qnil) { + if (iseqv) { return (rb_iseq_t *)iseqv; } else { @@ -11486,14 +12787,14 @@ ibf_load_iseq(const struct ibf_load *load, const rb_iseq_t *index_iseq) #if IBF_ISEQ_DEBUG fprintf(stderr, "ibf_load_iseq: new iseq=%p\n", (void *)iseq); #endif - FL_SET(iseq, ISEQ_NOT_LOADED_YET); + 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 - rb_ary_store(load->iseq_list, iseq_index, (VALUE)iseq); + pinned_list_store(load->iseq_list, iseq_index, (VALUE)iseq); #if !USE_LAZY_LOAD #if IBF_ISEQ_DEBUG @@ -11524,9 +12825,8 @@ ibf_load_setup_bytes(struct ibf_load *load, VALUE loader_obj, const char *bytes, load->global_buffer.size = load->header->size; load->global_buffer.obj_list_offset = load->header->global_object_list_offset; load->global_buffer.obj_list_size = load->header->global_object_list_size; - RB_OBJ_WRITE(loader_obj, &load->iseq_list, rb_ary_tmp_new(0)); - RB_OBJ_WRITE(loader_obj, &load->global_buffer.obj_list, rb_ary_tmp_new(load->global_buffer.obj_list_size)); - rb_ary_resize(load->global_buffer.obj_list, load->global_buffer.obj_list_size); + RB_OBJ_WRITE(loader_obj, &load->iseq_list, pinned_list_new(load->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; load->current_buffer = &load->global_buffer; diff --git a/ruby/complex.c b/ruby/complex.c index cdd5edc50..a3dda4d0e 100644 --- a/ruby/complex.c +++ b/ruby/complex.c @@ -5,16 +5,25 @@ 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 #include -#include "internal.h" -#include "id.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 "ruby_assert.h" #define ZERO INT2FIX(0) @@ -25,10 +34,6 @@ #else static VALUE RFLOAT_0; #endif -#if defined(HAVE_SIGNBIT) && defined(__GNUC__) && defined(__sun) && \ - !defined(signbit) -extern int signbit(double); -#endif VALUE rb_cComplex; @@ -45,8 +50,6 @@ static ID id_abs, id_arg, #define id_quo idQuo #define id_fdiv idFdiv -#define f_boolcast(x) ((x) ? Qtrue : Qfalse) - #define fun1(n) \ inline static VALUE \ f_##n(VALUE x)\ @@ -331,36 +334,36 @@ f_zero_p(VALUE x) #define f_nonzero_p(x) (!f_zero_p(x)) -VALUE rb_flo_is_finite_p(VALUE num); +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_INTEGER_TYPE_P(x)) { + if (always_finite_type_p(x)) { return TRUE; } else if (RB_FLOAT_TYPE_P(x)) { - return (int)rb_flo_is_finite_p(x); - } - else if (RB_TYPE_P(x, T_RATIONAL)) { - return TRUE; + return isfinite(RFLOAT_VALUE(x)); } return RTEST(rb_funcallv(x, id_finite_p, 0, 0)); } -VALUE rb_flo_is_infinite_p(VALUE num); -inline static VALUE +inline static int f_infinite_p(VALUE x) { - if (RB_INTEGER_TYPE_P(x)) { - return Qnil; + if (always_finite_type_p(x)) { + return FALSE; } else if (RB_FLOAT_TYPE_P(x)) { - return rb_flo_is_infinite_p(x); + return isinf(RFLOAT_VALUE(x)); } - else if (RB_TYPE_P(x, T_RATIONAL)) { - return Qnil; - } - return rb_funcallv(x, id_infinite_p, 0, 0); + return RTEST(rb_funcallv(x, id_infinite_p, 0, 0)); } inline static int @@ -392,7 +395,7 @@ nucomp_s_new_internal(VALUE klass, VALUE real, VALUE imag) RCOMPLEX_SET_REAL(obj, real); RCOMPLEX_SET_IMAG(obj, imag); - OBJ_FREEZE_RAW(obj); + OBJ_FREEZE_RAW((VALUE)obj); return (VALUE)obj; } @@ -418,18 +421,6 @@ f_complex_new_bang2(VALUE klass, VALUE x, VALUE y) return nucomp_s_new_internal(klass, x, y); } -#ifdef CANONICALIZATION_FOR_MATHN -static int canonicalization = 0; - -RUBY_FUNC_EXPORTED void -nucomp_canonicalization(int f) -{ - canonicalization = f; -} -#else -#define canonicalization 0 -#endif - inline static void nucomp_real_check(VALUE num) { @@ -445,10 +436,6 @@ inline static VALUE nucomp_s_canonicalize_internal(VALUE klass, VALUE real, VALUE imag) { int complex_r, complex_i; -#ifdef CANONICALIZATION_FOR_MATHN - if (k_exact_zero_p(imag) && canonicalization) - return real; -#endif complex_r = RB_TYPE_P(real, T_COMPLEX); complex_i = RB_TYPE_P(imag, T_COMPLEX); if (!complex_r && !complex_i) { @@ -625,14 +612,12 @@ f_complex_polar(VALUE klass, VALUE x, VALUE y) assert(!RB_TYPE_P(x, T_COMPLEX)); assert(!RB_TYPE_P(y, T_COMPLEX)); if (f_zero_p(x) || f_zero_p(y)) { - if (canonicalization) return x; return nucomp_s_new_internal(klass, x, RFLOAT_0); } 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) { @@ -647,13 +632,12 @@ f_complex_polar(VALUE klass, VALUE x, VALUE y) 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; + 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); } @@ -662,6 +646,16 @@ f_complex_polar(VALUE klass, VALUE x, VALUE y) f_mul(x, m_sin(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) @@ -679,8 +673,8 @@ rb_dbl_complex_new_polar_pi(double abs, double ang) return DBL2NUM(abs); } else { - ang *= M_PI; - return rb_complex_new(DBL2NUM(abs * cos(ang)), DBL2NUM(abs * sin(ang))); + const double real = abs * cospi(ang), imag = abs * sinpi(ang); + return rb_complex_new(DBL2NUM(real), DBL2NUM(imag)); } } @@ -703,13 +697,20 @@ nucomp_s_polar(int argc, VALUE *argv, VALUE klass) 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; } + if (RB_TYPE_P(abs, T_COMPLEX)) { + get_dat1(abs); + abs = dat->real; + } + if (RB_TYPE_P(arg, T_COMPLEX)) { + get_dat1(arg); + arg = dat->real; + } return f_complex_polar(klass, abs, arg); } @@ -1055,7 +1056,7 @@ rb_complex_pow(VALUE self, VALUE other) if (k_numeric_p(other) && f_real_p(other)) { VALUE r, theta; - if (RB_TYPE_P(other, T_BIGNUM)) + if (RB_BIGNUM_TYPE_P(other)) rb_warn("in a**b, b may be too big"); r = f_abs(self); @@ -1085,15 +1086,15 @@ nucomp_eqeq_p(VALUE self, VALUE other) if (RB_TYPE_P(other, T_COMPLEX)) { get_dat2(self, other); - return f_boolcast(f_eqeq_p(adat->real, bdat->real) && + 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); - return f_boolcast(f_eqeq_p(dat->real, other) && f_zero_p(dat->imag)); + return RBOOL(f_eqeq_p(dat->real, other) && f_zero_p(dat->imag)); } - return f_boolcast(f_eqeq_p(other, self)); + return RBOOL(f_eqeq_p(other, self)); } static bool @@ -1265,7 +1266,7 @@ rb_complex_conjugate(VALUE self) * Returns false, even if the complex number has no imaginary part. */ static VALUE -nucomp_false(VALUE self) +nucomp_real_p_m(VALUE self) { return Qfalse; } @@ -1319,8 +1320,8 @@ nucomp_numerator(VALUE self) } /* :nodoc: */ -static VALUE -nucomp_hash(VALUE self) +st_index_t +rb_complex_hash(VALUE self) { st_index_t v, h[2]; VALUE n; @@ -1331,7 +1332,13 @@ nucomp_hash(VALUE self) n = rb_hash(dat->imag); h[1] = NUM2LONG(n); v = rb_memhash(h, sizeof(h)); - return ST2FIX(v); + return v; +} + +static VALUE +nucomp_hash(VALUE self) +{ + return ST2FIX(rb_complex_hash(self)); } /* :nodoc: */ @@ -1341,7 +1348,7 @@ nucomp_eql_p(VALUE self, VALUE other) if (RB_TYPE_P(other, T_COMPLEX)) { get_dat2(self, other); - return f_boolcast((CLASS_OF(adat->real) == CLASS_OF(bdat->real)) && + return RBOOL((CLASS_OF(adat->real) == CLASS_OF(bdat->real)) && (CLASS_OF(adat->imag) == CLASS_OF(bdat->imag)) && f_eqeq_p(self, other)); @@ -1442,10 +1449,7 @@ rb_complex_finite_p(VALUE self) { get_dat1(self); - if (f_finite_p(dat->real) && f_finite_p(dat->imag)) { - return Qtrue; - } - return Qfalse; + return RBOOL(f_finite_p(dat->real) && f_finite_p(dat->imag)); } /* @@ -1465,7 +1469,7 @@ rb_complex_infinite_p(VALUE self) { get_dat1(self); - if (NIL_P(f_infinite_p(dat->real)) && NIL_P(f_infinite_p(dat->imag))) { + if (!f_infinite_p(dat->real) && !f_infinite_p(dat->imag)) { return Qnil; } return ONE; @@ -1515,8 +1519,6 @@ nucomp_marshal_load(VALUE self, VALUE a) return self; } -/* --- */ - VALUE rb_complex_raw(VALUE x, VALUE y) { @@ -1550,13 +1552,6 @@ rb_Complex(VALUE x, VALUE y) return nucomp_s_convert(2, a, rb_cComplex); } -/*! - * Creates a Complex object. - * - * \param real real part value - * \param imag imaginary part value - * \return a new Complex object - */ VALUE rb_dbl_complex_new(double real, double imag) { @@ -1700,8 +1695,6 @@ numeric_to_c(VALUE self) return rb_complex_new1(self); } -#include - inline static int issign(int c) { @@ -2141,8 +2134,6 @@ nucomp_s_convert(int argc, VALUE *argv, VALUE klass) return nucomp_convert(klass, a1, a2, TRUE); } -/* --- */ - /* * call-seq: * num.real -> self @@ -2209,8 +2200,6 @@ numeric_rect(VALUE self) return rb_assoc_new(self, INT2FIX(0)); } -static VALUE float_arg(VALUE self); - /* * call-seq: * num.polar -> array @@ -2278,6 +2267,14 @@ float_arg(VALUE self) * and i is imaginary unit. Real a equals complex a+0i * mathematically. * + * You can create a \Complex object explicitly with: + * + * - A {complex literal}[doc/syntax/literals_rdoc.html#label-Complex+Literals]. + * + * You can convert certain objects to \Complex objects with: + * + * - \Method {Complex}[Kernel.html#method-i-Complex]. + * * Complex object can be created as literal, and also by using * Kernel#Complex, Complex::rect, Complex::polar or to_c method. * @@ -2309,20 +2306,17 @@ void Init_Complex(void) { VALUE compat; -#undef rb_intern -#define rb_intern(str) rb_intern_const(str) - - id_abs = rb_intern("abs"); - id_arg = rb_intern("arg"); - id_denominator = rb_intern("denominator"); - id_numerator = rb_intern("numerator"); - id_real_p = rb_intern("real?"); - id_i_real = rb_intern("@real"); - id_i_imag = rb_intern("@image"); /* @image, not @imag */ - id_finite_p = rb_intern("finite?"); - id_infinite_p = rb_intern("infinite?"); - id_rationalize = rb_intern("rationalize"); - id_PI = rb_intern("PI"); + 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); @@ -2337,7 +2331,7 @@ Init_Complex(void) rb_define_global_function("Complex", nucomp_f_complex, -1); - rb_undef_methods_from(rb_cComplex, rb_mComparable); + rb_undef_methods_from(rb_cComplex, RCLASS_ORIGIN(rb_mComparable)); rb_undef_method(rb_cComplex, "%"); rb_undef_method(rb_cComplex, "div"); rb_undef_method(rb_cComplex, "divmod"); @@ -2379,7 +2373,7 @@ Init_Complex(void) 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); + 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); @@ -2402,8 +2396,6 @@ Init_Complex(void) 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); @@ -2416,8 +2408,6 @@ Init_Complex(void) 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); diff --git a/ruby/configure b/ruby/configure index 2a8d30973..24d09e97f 100755 --- a/ruby/configure +++ b/ruby/configure @@ -909,7 +909,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -1045,7 +1044,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1298,15 +1296,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1444,7 +1433,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1597,7 +1586,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -6312,6 +6300,14 @@ else fi + + # if $CC is in /usr/lib/ccache/$CC, search original $CC (disable ccache) + if echo $RUBY_DEBUG | grep ci > /dev/null && + echo $MJIT_CC | grep ^/usr/lib/ccache > /dev/null; then : + + PATH=`echo $PATH | sed "s/\/usr\/lib\/ccache://"` MJIT_CC=`which $CC` +fi + case $target_os in #( *mingw*) : command -v cygpath > /dev/null && MJIT_CC=`cygpath -ma $MJIT_CC` ;; #( @@ -8396,6 +8392,68 @@ else fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -fdeclspec is accepted as CFLAGS" >&5 +$as_echo_n "checking whether -fdeclspec is accepted as CFLAGS... " >&6; } + 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 + + CFLAGS="$CFLAGS -fdeclspec" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # RUBY_APPEND_OPTIONS(XCFLAGS) + for rb_opt in -fdeclspec; do + case " ${XCFLAGS-} " in #( + *" ${rb_opt} "*) : + ;; #( + ' ') : + XCFLAGS="${rb_opt}" ;; #( + *) : + XCFLAGS="$XCFLAGS ${rb_opt}" ;; +esac + done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + $as_echo "${msg_result_yes}yes${msg_reset}" >&6 ; } +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "${msg_result_no}no${msg_reset}" >&6 ; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +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 + + case $RUBY_PATCHLEVEL in #( -*) : RUBY_DEVEL=yes ;; #( @@ -11730,6 +11788,18 @@ fi done +for ac_header in x86intrin.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "x86intrin.h" "ac_cv_header_x86intrin_h" "$ac_includes_default" +if test "x$ac_cv_header_x86intrin_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_X86INTRIN_H 1 +_ACEOF + +fi + +done + # Check whether --with-gmp was given. @@ -11982,7 +12052,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -12028,7 +12098,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -12052,7 +12122,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -12097,7 +12167,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -12121,7 +12191,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -18667,8 +18737,15 @@ $as_echo_n "checking for function name string predefined identifier... " >&6; } if ${rb_cv_function_name_string+:} false; then : $as_echo_n "(cached) " >&6 else - rb_cv_function_name_string=no - save_CFLAGS="$CFLAGS" + case "$target_os" in #( + openbsd*) : + + rb_cv_function_name_string=__func__ + ;; #( + *) : + + rb_cv_function_name_string=no + save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $rb_cv_warnflags" if test "${ac_c_werror_flag+set}"; then : @@ -18681,8 +18758,8 @@ else fi ac_c_werror_flag=yes - for func in __func__ __FUNCTION__; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + for func in __func__ __FUNCTION__; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -18695,11 +18772,11 @@ puts($func); _ACEOF if ac_fn_c_try_link "$LINENO"; then : rb_cv_function_name_string=$func - break + break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - done + done CFLAGS="$save_CFLAGS" save_CFLAGS= @@ -18711,7 +18788,8 @@ else unset ac_c_werror_flag -fi +fi ;; +esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rb_cv_function_name_string" >&5 diff --git a/ruby/configure.ac b/ruby/configure.ac index f1ed36bb9..5a6b074f8 100644 --- a/ruby/configure.ac +++ b/ruby/configure.ac @@ -1,23 +1,52 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT() +AC_INIT { AC_CONFIG_AUX_DIR(tool) -AC_CONFIG_MACRO_DIRS(tool/m4) AC_PREREQ(2.67) -dnl override AC_CHECKING -dnl placed here due to aclocal(1)'s -dnl ignoring this definition in separate files -AC_DEFUN([AC_CHECKING],[dnl -AC_REQUIRE([_COLORIZE_RESULT_PREPARE])dnl -AS_MESSAGE([checking ${msg_checking}$1${msg_reset}...])])dnl +tooldir="$srcdir/tool" AC_DISABLE_OPTION_CHECKING -AC_ARG_VAR([cflags], [additional CFLAGS (ignored when CFLAGS is given)]) -AC_ARG_VAR([cppflags], [additional CPPFLAGS (ignored when CPPFLAGS is given)]) -AC_ARG_VAR([cxxflags], [additional CXXFLAGS (ignored when CXXFLAGS is given)]) +m4_include([tool/m4/_colorize_result_prepare.m4])dnl +m4_include([tool/m4/ac_msg_result.m4])dnl +m4_include([tool/m4/colorize_result.m4])dnl +m4_include([tool/m4/ruby_append_option.m4])dnl +m4_include([tool/m4/ruby_append_options.m4])dnl +m4_include([tool/m4/ruby_check_builtin_func.m4])dnl +m4_include([tool/m4/ruby_check_builtin_setjmp.m4])dnl +m4_include([tool/m4/ruby_check_printf_prefix.m4])dnl +m4_include([tool/m4/ruby_check_setjmp.m4])dnl +m4_include([tool/m4/ruby_check_signedness.m4])dnl +m4_include([tool/m4/ruby_check_sizeof.m4])dnl +m4_include([tool/m4/ruby_check_sysconf.m4])dnl +m4_include([tool/m4/ruby_cppoutfile.m4])dnl +m4_include([tool/m4/ruby_decl_attribute.m4])dnl +m4_include([tool/m4/ruby_default_arch.m4])dnl +m4_include([tool/m4/ruby_define_if.m4])dnl +m4_include([tool/m4/ruby_defint.m4])dnl +m4_include([tool/m4/ruby_dtrace_available.m4])dnl +m4_include([tool/m4/ruby_dtrace_postprocess.m4])dnl +m4_include([tool/m4/ruby_func_attribute.m4])dnl +m4_include([tool/m4/ruby_mingw32.m4])dnl +m4_include([tool/m4/ruby_prepend_option.m4])dnl +m4_include([tool/m4/ruby_prog_gnu_ld.m4])dnl +m4_include([tool/m4/ruby_replace_funcs.m4])dnl +m4_include([tool/m4/ruby_replace_type.m4])dnl +m4_include([tool/m4/ruby_rm_recursive.m4])dnl +m4_include([tool/m4/ruby_setjmp_type.m4])dnl +m4_include([tool/m4/ruby_stack_grow_direction.m4])dnl +m4_include([tool/m4/ruby_thread.m4])dnl +m4_include([tool/m4/ruby_try_cflags.m4])dnl +m4_include([tool/m4/ruby_try_cxxflags.m4])dnl +m4_include([tool/m4/ruby_try_ldflags.m4])dnl +m4_include([tool/m4/ruby_universal_arch.m4])dnl +m4_include([tool/m4/ruby_werror_flag.m4])dnl + +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 : "environment section" && { HAVE_BASERUBY=yes @@ -32,11 +61,9 @@ AC_ARG_WITH(baseruby, [ AC_PATH_PROG([BASERUBY], [ruby], [false]) ]) -AS_IF([test "$HAVE_BASERUBY" = yes -a "`RUBYOPT=- $BASERUBY -e 'print 42' 2>/dev/null`" = 42], [ - AS_IF([test "`RUBYOPT=- $BASERUBY --disable=gems -e 'print 42' 2>/dev/null`" = 42], [ - BASERUBY="$BASERUBY --disable=gems" - BASERUBY_VERSION=`$BASERUBY -v` - ]) +AS_IF([test "$HAVE_BASERUBY" != no -a "`RUBYOPT=- $BASERUBY --disable=gems -e 'print 42 if RUBY_VERSION > "2.2"' 2>/dev/null`" = 42], [ + BASERUBY="$BASERUBY --disable=gems" + BASERUBY_VERSION=`$BASERUBY -v` $BASERUBY -C "$srcdir" tool/downloader.rb -d tool -e gnu config.guess config.sub >&AS_MESSAGE_FD ], [ BASERUBY="echo executable host ruby is required. use --with-baseruby option.; false" @@ -71,8 +98,31 @@ AC_SUBST(TEENY) AC_SUBST(RUBY_API_VERSION, '$(MAJOR).$(MINOR)') AC_SUBST(RUBY_PROGRAM_VERSION, '$(MAJOR).$(MINOR).$(TEENY)') +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 +AS_CASE(["$target_cpu-$target_os"], + [aarch64-darwin*], [ + target_cpu=arm64 + AS_CASE(["$target_vendor"], [unknown], [target_vendor=apple target=${target/-unknown-/-apple-}]) + target="${target/aarch64/arm64}" + target_alias="${target_alias/aarch64/arm64}" + ]) + +AC_ARG_PROGRAM RUBY_RM_RECURSIVE AC_ARG_WITH(gcc, AS_HELP_STRING([--without-gcc], [never use gcc]), @@ -86,21 +136,112 @@ 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)) ]) -test -z "$CC" || ac_cv_prog_CC="$CC" - -AS_IF([test "$program_prefix" = NONE], [ - program_prefix= +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 +AS_CASE(["/${rb_CC} "], +[*@<:@\ /@:>@"cc "*], [ + # Don't try g++/clang++ when CC=cc + AC_CHECK_TOOLS([CXX], [cl.exe CC c++]) +], +[*icc*], [ + # Intel C++ has interprocedural optimizations. It tends to come with its + # own linker etc. + AC_CHECK_TOOL([AR], [`echo "${rb_CC}" | sed s/icc/xiar/`]) + AC_CHECK_TOOL([CXX], [`echo "${rb_CC}" | sed s/icc/icpc/`]) + AC_CHECK_TOOL([LD], [`echo "${rb_CC}" | sed s/icc/xild/`]) +], +[*gcc*], [ + # Dito for GCC. + AC_CHECK_TOOL([LD], [`echo "${rb_CC}" | sed s/gcc/ld/`]) + AC_CHECK_TOOL([AR], [`echo "${rb_CC}" | sed s/gcc/gcc-ar/`]) + AC_CHECK_TOOL([CXX], [`echo "${rb_CC}" | sed s/gcc/g++/`]) + AC_CHECK_TOOL([NM], [`echo "${rb_CC}" | sed s/gcc/gcc-nm/`]) + AC_CHECK_TOOL([RANLIB], [`echo "${rb_CC}" | sed s/gcc/gcc-ranlib/`]) +], +[*clang*], [ + # Dito for LLVM. Note however that llvm-as is a LLVM-IR to LLVM bitcode + # assembler that does not target your machine native binary. + : ${LD:="${CC}"} # ... try -fuse-ld=lld ? + AC_CHECK_TOOL([AR], [`echo "${rb_CC}" | sed s/clang/llvm-ar/`]) +# AC_CHECK_TOOL([AS], [`echo "${rb_CC}" | sed s/clang/llvm-as/`]) + AC_CHECK_TOOL([CXX], [`echo "${rb_CC}" | sed s/clang/clang++/`]) + AC_CHECK_TOOL([NM], [`echo "${rb_CC}" | sed s/clang/llvm-nm/`]) + AC_CHECK_TOOL([OBJCOPY], [`echo "${rb_CC}" | sed s/clang/llvm-objcopy/`]) + AC_CHECK_TOOL([OBJDUMP], [`echo "${rb_CC}" | sed s/clang/llvm-objdump/`]) + AC_CHECK_TOOL([RANLIB], [`echo "${rb_CC}" | sed s/clang/llvm-ranlib/`]) + AC_CHECK_TOOL([STRIP], [`echo "${rb_CC}" | sed s/clang/llvm-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_IF([test "$prefix" -ef .], [ - AC_MSG_ERROR(--prefix cannot be the current working directory.) +AS_CASE(["${target_os}"], +[cygwin*|msys*|mingw*], [ + 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], [:]) + +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 ]) -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. @@ -148,7 +289,8 @@ AC_ARG_ENABLE(load-relative, AS_HELP_STRING([--enable-load-relative], [resolve load paths at run time]), [load_relative=$enableval]) -AC_ARG_PROGRAM +# checks for UNIX variants that set C preprocessor variables +AC_USE_SYSTEM_EXTENSIONS dnl Checks for programs. @@ -172,76 +314,37 @@ dnl ]) 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) - AS_IF([! $CC -E -xc - </dev/null], [ - @%:@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]) - ])], -[openbsd*:openbsd*], [ - AC_CHECK_TOOLS(CC, [cc]) -]) -AS_IF([test x"${build}" != x"${host}"], [ - AC_CHECK_TOOL(CC, gcc) -]) - -AC_PROG_CC_C99 -AS_CASE([$CC], -[gcc-*], [ - gcc_prefix=gcc- gcc_suffix=`echo "$CC" | sed 's/^gcc//'` - AC_PROG_CXX(g++${gcc_suffix})], -[clang-*|clang], [ - gcc_prefix=clang- gcc_suffix=`echo "$CC" | sed 's/^clang//'` - AC_PROG_CXX(clang++${gcc_suffix})], -[gcc_prefix= gcc_suffix=]) - -dnl Select the appropriate C++ compiler in OS X -AS_CASE(["$build_os:${CXX}"], - [darwin1*.*:], [ - AC_MSG_CHECKING([CXX for $CC]) - AS_CASE(["/$CC "], - [*@<:@\ /@:>@"gcc-4.2 "*], [pat='gcc-4\.2' CXX=g++-4.2], - [*@<:@\ /@:>@"gcc "*], [pat=gcc CXX=g++], - [*@<:@\ /@:>@"cc "*], [pat=cc CXX=c++], - [*@<:@\ /@:>@"icc "*], [pat=icc CXX=icpc], - [*@<:@\ /@:>@"clang "*], [pat=clang CXX=clang++]) - AS_IF([test "${CXX}"], [ - CXX=`echo "/$CC " | sed ["s:\([ /]\)${pat}:\1$CXX:; s:^/::; s: *$::"]` - ]) - AC_MSG_RESULT([$CXX])], - [openbsd*:*], [ - AC_CHECK_TOOLS(CXX, [c++]) - ]) -test -z "$CXX" || ac_cv_prog_CXX="$CXX" + 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_TRY_CPP([@%:@include + AC_PREPROC_IFELSE([AC_LANG_SOURCE([[@%:@include @%:@if MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_5 @%:@error pre OS X 10.5 [!<===== pre OS X 10.5 =====>] @%:@endif - ], + ]])], [macosx_min_required=yes], [AC_MSG_RESULT(no) AC_MSG_ERROR([Unsupported OS X version is required])]) AC_MSG_RESULT(${macosx_min_required}) ]) -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) AS_IF([test "$GCC" = yes], [ linker_flag=-Wl, @@ -274,6 +377,12 @@ AC_SUBST(CSRCFLAG) : ${MJIT_CC=$CC} AS_IF([test "x$cross_compiling" = xno], [ AC_PATH_PROG([MJIT_CC], ${MJIT_CC}) + + # if $CC is in /usr/lib/ccache/$CC, search original $CC (disable ccache) + AS_IF([echo $RUBY_DEBUG | grep ci > /dev/null && + echo $MJIT_CC | grep ^/usr/lib/ccache > /dev/null], [ + PATH=`echo $PATH | sed "s/\/usr\/lib\/ccache://"` MJIT_CC=`which $CC`]) + AS_CASE([$target_os], [*mingw*], [command -v cygpath > /dev/null && MJIT_CC=`cygpath -ma $MJIT_CC`]) shift 2 @@ -288,7 +397,7 @@ AS_CASE(["$build_os"], echo 'int main(void) {return 0;}' > conftest.c AS_IF([$CC -framework Foundation -o conftest conftest.c 2>&1 | grep '^ld: warning: text-based stub file' >/dev/null], [ - CC_WRAPPER=`cd -P "$srcdir/tool" && pwd`/darwin-cc + CC_WRAPPER=`cd -P "${tooldir}" && pwd`/darwin-cc CC="$CC_WRAPPER $CC" ]) rm -fr conftest* @@ -309,40 +418,24 @@ AC_SUBST(CC_VERSION_MESSAGE, $cc_version_message) : ${DLDFLAGS="$LDFLAGS"} RUBY_UNIVERSAL_ARCH -AS_IF([test "$target_cpu" != "$host_cpu" -a "$GCC" = yes -a "$cross_compiling" = no -a "$universal_binary" = no], [ +AS_IF([test "$target_cpu" != "$host_cpu" -a "$GCC" = yes -a "$cross_compiling" = no -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 -AS_CASE(["$target_os"], [darwin*], [ -if libtool 2>&1 | grep no_warning_for_no_symbols > /dev/null; then - ac_cv_prog_ac_ct_RANLIB=: - ac_cv_prog_ac_ct_AR='libtool -static' - rb_cv_arflags='-no_warning_for_no_symbols -o' -fi -]) -AC_CHECK_TOOLS(RANLIB, [${gcc_prefix}ranlib${gcc_suffix} ranlib], :) -AC_CHECK_TOOLS(AR, [${gcc_prefix}ar${gcc_suffix} ar]) -AS_IF([test -z "$AR"], [ - AC_CHECK_PROGS(AR, aal, ar) -]) 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 "]) - -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*], [ +[cygwin*|msys*|mingw*], [ AC_CHECK_TOOL(WINDRES, windres) AC_CHECK_TOOL(DLLWRAP, dllwrap) target=`echo $target | sed "s/^$target_cpu-/-/"` @@ -354,23 +447,23 @@ 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 ], - [FILE* volatile f = stdin; return 0;], + AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[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;}'`], + 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= ]) : ${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 -AC_CHECK_TOOLS(NM, [${gcc_prefix}nm${gcc_suffix} nm]) AC_PROG_LN_S AC_PROG_MAKE_SET @@ -395,11 +488,30 @@ AS_IF([test "$cross_compiling:$ac_cv_prog_DTRACE" = no: -a -n "$ac_tool_prefix"] AC_CHECK_PROGS(DOT, dot) AC_CHECK_PROGS(DOXYGEN, doxygen) -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"`]) +for prog in ${ac_tool_prefix:+${ac_tool_prefix}pkg-config} pkg-config; do + AC_CHECK_PROG(PKG_CONFIG, $prog, [$prog], [], [], + [`"$as_dir/$ac_word$ac_exec_ext" --print-errors --version > /dev/null 2>&1 || echo "$as_dir/$ac_word$ac_exec_ext"`]) + test -z "${PKG_CONFIG}" || break +done -# checks for UNIX variants that set C preprocessor variables -AC_USE_SYSTEM_EXTENSIONS +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']) @@ -436,7 +548,7 @@ AC_SUBST(CHDIR) : "compiler section" && { RUBY_WERROR_FLAG([ AC_MSG_CHECKING([whether CFLAGS is valid]) - AC_TRY_COMPILE([], [], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [AC_MSG_RESULT(yes)], [ AC_MSG_RESULT(no) @@ -452,7 +564,7 @@ RUBY_WERROR_FLAG([ echo 'CFBundleIdentifier' > Info.plist && : } || AC_MSG_ERROR([failed to make temporary directory]) - AC_TRY_LINK([], [], + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [AC_MSG_RESULT(yes)], [ cd .. && rm -fr tmp.$$.try_link @@ -481,6 +593,17 @@ AS_IF([test x"${RPATHFLAG}" = x], [ rpathflag=`echo "$RPATHFLAG" | sed '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) +]) + AS_CASE([$RUBY_PATCHLEVEL], [-*], [RUBY_DEVEL=yes], [RUBY_DEVEL=no]) particular_werror_flags=$RUBY_DEVEL @@ -514,6 +637,7 @@ AS_CASE(["$GCC:${warnflags+set}:${extra_warnflags:+set}:"], -Werror=pointer-arith \ -Werror=shorten-64-to-32 \ -Werror=write-strings \ + -Werror=old-style-definition \ -Wimplicit-fallthrough=0 \ -Wmissing-noreturn \ -Wno-cast-function-type \ @@ -530,7 +654,7 @@ AS_CASE(["$GCC:${warnflags+set}:${extra_warnflags:+set}:"], -Wsuggest-attribute=format \ -Wsuggest-attribute=noreturn \ -Wunused-variable \ - -diag-disable=175,188,2259 \ + -diag-disable=175,188,1684,2259,2312 \ $extra_warnflags \ ; do AS_IF([test "$particular_werror_flags" != yes], [ @@ -549,6 +673,18 @@ AS_CASE(["$GCC:${warnflags+set}:${extra_warnflags:+set}:"], ]) ]) 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}"]) @@ -557,6 +693,22 @@ AS_CASE(["$GCC:${warnflags+set}:${extra_warnflags:+set}:"], 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], @@ -580,14 +732,15 @@ AS_IF([test "$GCC" = yes], [ [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(-D_FORTIFY_SOURCE=2, [RUBY_APPEND_OPTION(XCFLAGS, -D_FORTIFY_SOURCE=2)]) + RUBY_TRY_CFLAGS([$optflags -D_FORTIFY_SOURCE=2], [RUBY_APPEND_OPTION(XCFLAGS, -D_FORTIFY_SOURCE=2)], [], + [@%:@include ]) ]) : ${MJIT_HEADER_FLAGS='-P -dD'} # -fstack-protector AS_CASE(["$target_os"], - [mingw*], [ + [mingw*|emscripten*], [ stack_protector=no ]) AS_IF([test -z "${stack_protector+set}"], [ @@ -634,13 +787,13 @@ AS_IF([test "$GCC" = yes], [ ], [ CFLAGS="$CFLAGS -Werror -Wuninitialized" ]) - AC_TRY_COMPILE([@%:@include + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include int foo(double x) { int exp; frexp(x, &exp); return exp; - }], [if (foo(0.0)) return 1;], + }]], [[if (foo(0.0)) return 1;]])], [rb_cv_mingw64_broken_frexp_modf=no], [rb_cv_mingw64_broken_frexp_modf=yes]) CFLAGS="$save_CFLAGS" @@ -649,8 +802,8 @@ AS_IF([test "$GCC" = yes], [ AC_DEFINE(RUBY_MINGW64_BROKEN_FREXP_MODF) ]) ], - [cygwin*|darwin*|netbsd*], [ - # need lgamma_r(), finite() + [cygwin*|msys*|darwin*|netbsd*], [ + # need lgamma_r() ]) # ANSI (no XCFLAGS because this is C only) @@ -721,7 +874,7 @@ AS_IF([test "$GCC" = yes], [ # disable fast-math for oflag in -fno-fast-math; do - RUBY_TRY_CFLAGS($oflag, [RUBY_APPEND_OPTION(CFLAGS, $oflag)]) + 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)]) @@ -730,13 +883,13 @@ AS_IF([test "$GCC" = yes], [ AS_CASE(["$target_cpu"], [[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);], + 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_TRY_LINK([unsigned long atomic_var;], - [__sync_val_compare_and_swap(&atomic_var, 0, 1);], + 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" @@ -763,7 +916,7 @@ test -z "${ac_env_CXXFLAGS_set}" -a -n "${cxxflags+set}" && eval CXXFLAGS="\"$cx AC_CACHE_CHECK([whether compiler has statement and declarations in expressions], rb_cv_have_stmt_and_decl_in_expr, - [AC_TRY_COMPILE([],[ __extension__ ({ int a = 0; a; }); ], + [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], [ @@ -784,12 +937,12 @@ AS_CASE(["$target_os"], [freebsd*], [ AC_CACHE_CHECK([whether pthread should be enabled by default], rb_cv_enable_pthread_default, - [AC_TRY_CPP([ + [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ #include #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 @@ -804,9 +957,17 @@ AS_CASE(["$target_os"], 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*], [ ], @@ -817,8 +978,8 @@ AS_CASE(["$target_os"], 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_TRY_COMPILE([@%:@include ], - [if (syscall(0)) return 1;], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[if (syscall(0)) return 1;]])], [rb_cv_syscall_deprecated=no], [rb_cv_syscall_deprecated=yes])])]) AS_IF([test $rb_cv_syscall_deprecated = yes], [ @@ -845,7 +1006,7 @@ AS_CASE(["$target_os"], ]) with_setjmp_type=sigsetjmp # to hijack SIGCHLD handler AC_CACHE_CHECK(for broken crypt with 8bit chars, rb_cv_broken_crypt, - [AC_TRY_RUN([ + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include @@ -882,7 +1043,7 @@ main() } return 0; } -], +]])], rb_cv_broken_crypt=no, rb_cv_broken_crypt=yes, rb_cv_broken_crypt=yes)]) @@ -905,17 +1066,18 @@ main() AC_CHECK_HEADERS(crt_externs.h, [], [], [ #include ]) + cleanlibs='$(TARGET_SO).dSYM' ], [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 + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #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], [ @@ -925,13 +1087,13 @@ main() AS_IF([test x"$define_xopen_source" != x], [ break ]) - RUBY_WERROR_FLAG([AC_TRY_COMPILE([ + RUBY_WERROR_FLAG([AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define _XOPEN_SOURCE ${tmp_xpg}00 #include #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 @@ -941,19 +1103,33 @@ main() 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 ]) + 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 + @%:@include + @%:@include + 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*], [ ac_cv_header_langinfo_h=yes +[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 $LIBS" - ac_cv_header_a_out_h=no +[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 @@ -978,7 +1154,7 @@ main() ac_cv_func_memcmp_working=yes ac_cv_lib_dl_dlopen=no rb_cv_binary_elf=no - rb_cv_negative_time_t=no + rb_cv_negative_time_t=yes ac_cv_func_fcntl=yes ac_cv_func_flock=yes ac_cv_func_gmtime_r=yes @@ -992,10 +1168,9 @@ main() AS_IF([test "$target_cpu" = x64], [ ac_cv_func___builtin_setjmp=yes ac_cv_func_round=no - rb_cv_coroutine=yes + coroutine_type=yes ]) ac_cv_func_tgamma=no - rb_cv_negative_time_t=yes AC_CHECK_TYPE([NET_LUID], [], [], [@%:@include @%:@include ]) @@ -1037,21 +1212,53 @@ main() 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 + ], [ LIBS="-lm $LIBS"]) : ${ORIG_LIBS=$LIBS} +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 ]], [[]])], + [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(dld, shl_load) # Dynamic linking for HP-UX AC_CHECK_LIB(socket, shutdown) # SunOS/Solaris +if pkg-config --exists capstone; then + CAPSTONE_CFLAGS=`pkg-config --cflags capstone` + CAPSTONE_LIB_L=`pkg-config --libs-only-L capstone` + LDFLAGS="$LDFLAGS $CAPSTONE_LIB_L" + CFLAGS="$CFLAGS $CAPSTONE_CFLAGS" +fi + +AC_CHECK_LIB(capstone, cs_open) # Capstone disassembler for debugging YJIT + 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(copyfile.h) AC_CHECK_HEADERS(direct.h) @@ -1082,6 +1289,7 @@ 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) @@ -1096,6 +1304,10 @@ AC_CHECK_HEADERS(syscall.h) AC_CHECK_HEADERS(time.h) AC_CHECK_HEADERS(ucontext.h) AC_CHECK_HEADERS(utime.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) AC_ARG_WITH([gmp], [AS_HELP_STRING([--without-gmp], @@ -1112,42 +1324,54 @@ 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],[ - AC_SEARCH_LIBS([malloc_conf], [jemalloc], - [ - AC_DEFINE(HAVE_LIBJEMALLOC, 1) - with_jemalloc=yes - ], - [test x$with_jemalloc = xyes && with_jemalloc=no]) - AC_CHECK_HEADER(jemalloc/jemalloc.h, [ - AC_DEFINE(RUBY_ALTERNATIVE_MALLOC_HEADER, []) - ], - [test x$with_jemalloc = xyes && with_jemalloc=no]) - AS_IF([test "x$with_jemalloc" != xyes], [ - 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 - @%:@endif], [return !&malloc_conf])], - [rb_cv_jemalloc_demangle=yes], - [rb_cv_jemalloc_demangle=no]) - ]) + # find jemalloc header first + 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 "x$rb_cv_jemalloc_demangle" = xyes], [ - AC_DEFINE(JEMALLOC_MANGLE) - with_jemalloc=yes + 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 + @%:@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 + ]) + with_jemalloc=${rb_cv_jemalloc_library} AS_CASE(["$with_jemalloc"], - [yes], - [ - AC_DEFINE(HAVE_MALLOC_CONF) - ac_cv_func_malloc_usable_size=yes - ], - [no], - [AC_MSG_ERROR([jemalloc requested but not found]) + [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 @@ -1187,7 +1411,7 @@ AS_CASE(["$target_os"], ]) ]) -AC_C_BIGENDIAN +AC_C_BIGENDIAN([], [], [], [AC_DEFINE(AC_APPLE_UNIVERSAL_BUILD, 1)]) AC_C_CONST AC_C_CHAR_UNSIGNED AC_C_INLINE @@ -1225,8 +1449,8 @@ AC_CACHE_CHECK(packed struct attribute, rb_cv_packed_struct, "__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; });], [], + 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], [ @@ -1265,132 +1489,58 @@ RUBY_REPLACE_TYPE(clockid_t, [], CLOCKID, [@%:@ifdef HAVE_TIME_H @%:@ include @%:@endif]) -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)]) -AS_IF([test "$rb_cv_have_prototypes" = yes], [ - AC_DEFINE(HAVE_PROTOTYPES) -]) - -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)]) -AS_IF([test "$rb_cv_tokenpaste" = ansi], [ - AC_DEFINE(TOKEN_PASTE(x,y),[x@%:@@%:@y]) -], [ - AC_DEFINE(TOKEN_PASTE(x,y),[x/**/y]) -]) - -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)) -AS_IF([test x"$rb_cv_stringization" != xno -a "$rb_cv_stringization" != "#expr"], [ - AC_DEFINE_UNQUOTED(STRINGIZE0(expr),$rb_cv_stringization) - AC_DEFINE(OLD_FASHIONED_STRINGIZATION,1) -]) - -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])] -) -AS_IF([test "$rb_cv_string_literal_concatenation" = no], [ - AC_MSG_ERROR([No string literal concatenation]) -]) - -AC_CACHE_CHECK(for variable length prototypes and stdarg.h, rb_cv_stdarg, - [AC_TRY_COMPILE([ -#include -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)]) -AS_IF([test "$rb_cv_stdarg" = yes], [ - AC_DEFINE(HAVE_STDARG_PROTOTYPES) -]) - +# __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_TRY_COMPILE([ -int foo(int x, ...); -@%:@define FOO(a, ...) foo(a, @%:@@%:@__VA_ARGS__) -], [FOO(1);FOO(1,2);FOO(1,2,3);], + [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) ]) -AC_CACHE_CHECK([for alignas() syntax], rb_cv_have_alignas, [ -rb_cv_have_alignas=no -RUBY_WERROR_FLAG([ -for attr in \ - "_Alignas(x)" \ - "alignas(x)" \ - "@<:@@<:@alignas(x)@:>@@:>@" \ - "__declspec(aligned(x))" \ - "__attribute__((__aligned__(x)))" \ -; -do - # C11 _Alignas and GCC __attribute__((__aligned__)) behave - # slightly differently. What we want is GCC's. Check that - # here by something C11 does not allow (`struct ALIGNAS ...`) - AC_TRY_COMPILE( - [@%:@define ALIGNAS(x) $attr - struct ALIGNAS(128) conftest_tag { int foo; } foo; ], [], - [rb_cv_have_alignas="$attr"; break], []) -done -])]) -AS_IF([test "$rb_cv_have_alignas" != no], [ - AC_DEFINE_UNQUOTED([RUBY_ALIGNAS(x)], $rb_cv_have_alignas) +# 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 + @%:@endif + @%:@ifdef STDC_HEADERS + @%:@include + @%:@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 + ],[]) + ]) ]) - -AC_CACHE_CHECK([for alignof() syntax], rb_cv_have_alignof,[ -rb_cv_have_alignof=no -RUBY_WERROR_FLAG([ -for expr in \ - "alignof" \ - "_Alignof" \ - "__alignof" \ - "__alignof__" \ -; -do - AC_TRY_COMPILE([ - @%:@ifdef HAVE_STDALIGN_H - @%:@include - @%:@endif],[return (int)$expr(int);], - [rb_cv_have_alignof="$expr"; break], []) -done -])]) -AS_IF([test "$rb_cv_have_alignof" != no], [ - AC_DEFINE_UNQUOTED(RUBY_ALIGNOF, $rb_cv_have_alignof) +AS_IF([test "$rb_cv_have__alignof" != no], [ + AC_DEFINE(HAVE__ALIGNOF) ]) RUBY_FUNC_ATTRIBUTE(__const__, CONSTFUNC) @@ -1398,7 +1548,6 @@ 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_TYPE_ATTRIBUTE(__deprecated__ mesg, DEPRECATED_TYPE(mesg,x), rb_cv_type_deprecated) 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) @@ -1428,6 +1577,17 @@ AS_IF([test "$rb_cv_CentOS6_CXX_workaround" != no],[ AC_DEFINE([RUBY_CXX_DEPRECATED(msg)], [__attribute__((__deprecated__(msg)))])]) +AC_CACHE_CHECK([for std::nullptr_t], rb_cv_CXX_nullptr, [ + AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [@%:@include ], + [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}) @@ -1439,8 +1599,8 @@ 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_TRY_LINK([void foo(void) {} - void bar(void) __attribute__(($a("foo")));], [bar()], + 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], [ @@ -1450,16 +1610,18 @@ AS_IF([test "$GCC" = yes], [ 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_TRY_LINK([unsigned char atomic_var;], - [ + 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], [ @@ -1467,15 +1629,15 @@ AS_IF([test "$GCC" = yes], [ ]) AC_CACHE_CHECK([for __sync builtins], [rb_cv_gcc_sync_builtins], [ - AC_TRY_LINK([unsigned char atomic_var;], - [ + 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], [ @@ -1484,8 +1646,8 @@ AS_IF([test "$GCC" = yes], [ AC_CACHE_CHECK(for __builtin_unreachable, rb_cv_func___builtin_unreachable, [RUBY_WERROR_FLAG( - [AC_TRY_LINK([volatile int zero;], - [if (zero) __builtin_unreachable();], + [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]) ]) @@ -1493,14 +1655,14 @@ AS_IF([test "$GCC" = yes], [ AS_IF([test "$rb_cv_func___builtin_unreachable" = yes], [ AC_DEFINE_UNQUOTED(UNREACHABLE, [__builtin_unreachable()]) ]) -]) +} 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);], [], + 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 ])]) @@ -1516,22 +1678,23 @@ RUBY_DECL_ATTRIBUTE([__nonnull__(n)], [RUBY_FUNC_NONNULL(n,x)], [rb_cv_func_nonn RUBY_APPEND_OPTION(XCFLAGS, -DRUBY_EXPORT) AC_ARG_ENABLE(mathn, - AS_HELP_STRING([--disable-mathn], [disable canonicalization for mathn]), - [mathn=$enableval], [mathn=yes]) -test "x$mathn" = xyes || mathn= -AC_SUBST(MATHN, $mathn) + AS_HELP_STRING([--enable-mathn], [enable canonicalization for mathn]), + [AC_MSG_ERROR([mathn support has been dropped])]) 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 ], - [puts($func);], - [rb_cv_function_name_string=$func - break]) - done - ])] + [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 ]], + [[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]) @@ -1591,16 +1754,21 @@ RUBY_CHECK_SIGNEDNESS(size_t, [AC_MSG_ERROR(size_t is signed)], [], [@%:@include ]) RUBY_CHECK_SIZEOF(size_t, [int long void*], [], [@%:@include ]) RUBY_CHECK_SIZEOF(ptrdiff_t, size_t, [], [@%:@include ]) +RUBY_CHECK_SIZEOF(dev_t) 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 +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 ]) 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 ]) ]) RUBY_CHECK_SIZEOF([struct stat.st_ino], [long "long long"], [], [@%:@include ]) +RUBY_CHECK_SIZEOF([struct stat.st_dev], [dev_t int long "long long"], [], [@%:@include ]) +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 ]) +]) AC_CHECK_MEMBERS([struct stat.st_atim]) AC_CHECK_MEMBERS([struct stat.st_atimespec]) AC_CHECK_MEMBERS([struct stat.st_atimensec]) @@ -1684,9 +1852,9 @@ AS_IF([test "x$rb_cv_type_int64_t" != xno], [ 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;], + 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], [ @@ -1695,7 +1863,6 @@ AS_IF([test $rb_cv_stack_end_address != no], [ 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) @@ -1715,14 +1882,14 @@ AS_CASE(["${target_cpu}-${target_os}:${target_archs}"], AS_IF([test "x$ALLOCA" = "x"], [ AC_CACHE_CHECK([for dynamic size alloca], rb_cv_dynamic_alloca, [ for chk in ok __chkstk; do - AC_TRY_LINK([ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@ifdef HAVE_ALLOCA_H @%:@include @%:@endif void $chk() {} int dynamic_alloca_test; - int dynamic_alloca_result;], - [dynamic_alloca_result = alloca(dynamic_alloca_test) != 0;], + 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"], [ @@ -1740,10 +1907,16 @@ AS_CASE(["$target_os"],[freebsd*],[ AC_REPLACE_FUNCS(close) ]) +AC_DEFUN([RUBY_REQUIRE_FUNC], [ + AC_CHECK_FUNCS([$1]) + AS_IF([test "$ac_cv_func_[]AS_TR_SH($1)" = yes], [], + [AC_MSG_ERROR($1[() must be supported])]) +]) +m4_map_args_w([dup dup2], [RUBY_REQUIRE_FUNC(], [)]) + 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) @@ -1761,9 +1934,7 @@ AC_REPLACE_FUNCS(strlcpy) AC_REPLACE_FUNCS(strstr) AC_REPLACE_FUNCS(tgamma) -RUBY_REPLACE_FUNC([finite], [@%:@include ]) -RUBY_REPLACE_FUNC([isinf], [@%:@include ]) -RUBY_REPLACE_FUNC([isnan], [@%:@include ]) +AC_DEFINE(HAVE_ISFINITE) # C99; backward compatibility # for missing/setproctitle.c AS_CASE(["$target_os"], @@ -1773,17 +1944,7 @@ AS_CASE(["$target_os"], AC_CHECK_HEADERS(sys/pstat.h) -AC_CACHE_CHECK(for signbit, rb_cv_have_signbit, - [AC_TRY_LINK([ -#include -], [int v = signbit(-0.0);], - rb_cv_have_signbit=yes, - rb_cv_have_signbit=no)]) -AS_IF([test "$rb_cv_have_signbit" = yes], [ - AC_DEFINE(HAVE_SIGNBIT) -], [ - AC_LIBOBJ([signbit]) -]) +AC_DEFINE(HAVE_SIGNBIT) # C99; backward compatibility AC_FUNC_FORK @@ -1804,7 +1965,6 @@ 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) @@ -1824,14 +1984,20 @@ AC_CHECK_FUNCS(ftruncate) AC_CHECK_FUNCS(ftruncate64) # used for Win32 platform AC_CHECK_FUNCS(getattrlist) AC_CHECK_FUNCS(getcwd) +AC_CHECK_FUNCS(getentropy) 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(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) @@ -1865,6 +2031,7 @@ AC_CHECK_FUNCS(memmem) AC_CHECK_FUNCS(mkfifo) AC_CHECK_FUNCS(mknod) AC_CHECK_FUNCS(mktime) +AC_CHECK_FUNCS(mmap) AC_CHECK_FUNCS(openat) AC_CHECK_FUNCS(pipe2) AC_CHECK_FUNCS(poll) @@ -1918,6 +2085,8 @@ 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)]) @@ -1927,7 +2096,7 @@ AS_CASE(["$ac_cv_func_memset_s:$ac_cv_func_qsort_s"], [*yes*], 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([ + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ @%:@include @%:@include @%:@ifdef HAVE_UNISTD_H @@ -1946,11 +2115,11 @@ 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*], + [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)]) @@ -1991,24 +2160,25 @@ AS_IF([test x$rb_cv_builtin___builtin_choose_expr = xyes], [ ]) 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)]) AS_IF([test "$ac_cv_func_qsort_r" != no], [ AC_CACHE_CHECK(whether qsort_r is GNU version, rb_cv_gnu_qsort_r, - [AC_TRY_COMPILE([ + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include 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([ + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include 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]) ]) @@ -2023,7 +2193,7 @@ void (qsort_r)(void *base, size_t nmemb, size_t size, 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([ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ @%:@include @%:@ifdef HAVE_UNISTD_H @%:@include @@ -2041,7 +2211,7 @@ 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])] @@ -2070,9 +2240,9 @@ AS_IF([test x"$ac_cv_lib_rt_timer_settime" = xyes], [ ]) AC_CACHE_CHECK(for unsetenv returns a value, rb_cv_unsetenv_return_value, - [AC_TRY_COMPILE([ + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include -], [int v = unsetenv("foo");], +]], [[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], [ @@ -2090,21 +2260,21 @@ AS_IF([test "$use_setreuid" = yes], [ ]) AC_STRUCT_TIMEZONE AC_CACHE_CHECK(for struct tm.tm_gmtoff, rb_cv_member_struct_tm_tm_gmtoff, - [AC_TRY_COMPILE([ + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@define _BSD_SOURCE @%:@define _DEFAULT_SOURCE @%:@include - ], - [struct tm t; t.tm_gmtoff = 3600;], + ]], + [[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_TRY_LINK([#include - int i;], - [i = daylight;], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include + int i;]], + [[i = daylight;]])], rb_cv_have_daylight=yes, rb_cv_have_daylight=no)]) AS_IF([test "$rb_cv_have_daylight" = yes], [ @@ -2112,7 +2282,7 @@ AS_IF([test "$rb_cv_have_daylight" = yes], [ ]) AC_CACHE_CHECK(for negative time_t for gmtime(3), rb_cv_negative_time_t, - [AC_TRY_RUN([ + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include @@ -2142,7 +2312,7 @@ main() 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)]) @@ -2153,7 +2323,7 @@ AS_IF([test "$rb_cv_negative_time_t" = yes], [ # [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([ + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include @@ -2185,7 +2355,7 @@ main() check(t); return 0; } -], +]])], rb_cv_localtime_overflow=yes, rb_cv_localtime_overflow=no, rb_cv_localtime_overflow=no)]) @@ -2198,7 +2368,7 @@ AS_IF([test "$ac_cv_func_sigprocmask" = yes && test "$ac_cv_func_sigaction" = ye ], [ AC_CHECK_FUNCS(sigsetmask) AC_CACHE_CHECK(for BSD signal semantics, rb_cv_bsd_signal, - [AC_TRY_RUN([ + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include @@ -2216,7 +2386,7 @@ main() kill(getpid(), SIGINT); return 0; } -], +]])], rb_cv_bsd_signal=yes, rb_cv_bsd_signal=no, rb_cv_bsd_signal=$ac_cv_func_sigsetmask)]) @@ -2259,6 +2429,45 @@ AS_IF([test "$rb_cv_rshift_sign" = yes], [ 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 +#include +#include +#include +#include + +#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*], [], [ @@ -2302,62 +2511,99 @@ AS_IF([test "${universal_binary-no}" = yes ], [ AC_ARG_WITH(coroutine, AS_HELP_STRING([--with-coroutine=IMPLEMENTATION], [specify the coroutine implementation to use]), - [rb_cv_coroutine=$withval]) -AS_CASE([$rb_cv_coroutine], [yes|''], [ - AC_MSG_CHECKING(native coroutine implementation for ${target_cpu}-${target_os}) + [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*], [ - rb_cv_coroutine=amd64 + coroutine_type=amd64 + ], + [arm64-darwin*], [ + coroutine_type=arm64 ], [x*64-linux*], [ AS_CASE(["$ac_cv_sizeof_voidp"], - [8], [ rb_cv_coroutine=amd64 ], - [4], [ rb_cv_coroutine=x86 ], - [*], [ rb_cv_coroutine= ] + [8], [ coroutine_type=amd64 ], + [4], [ coroutine_type=x86 ], + dnl unknown pointer size, bail out as no Context.h soon. ) ], [*86-linux*], [ - rb_cv_coroutine=x86 + coroutine_type=x86 ], - [x64-mingw32], [ - rb_cv_coroutine=win64 + [x64-mingw*], [ + coroutine_type=win64 ], - [*86-mingw32], [ - rb_cv_coroutine=win32 + [*86-mingw*], [ + coroutine_type=win32 ], - [armv7*-linux*], [ - rb_cv_coroutine=ucontext + [arm*-linux*], [ + coroutine_type=arm32 ], [aarch64-linux*], [ - rb_cv_coroutine=arm64 + coroutine_type=arm64 ], [powerpc64le-linux*], [ - rb_cv_coroutine=ppc64le + coroutine_type=ppc64le + ], + [riscv64-linux*], [ + coroutine_type=riscv64 + ], + [x86_64-freebsd*], [ + coroutine_type=amd64 + ], + [i386-freebsd*], [ + coroutine_type=x86 + ], + [aarch64-freebsd*], [ + coroutine_type=arm64 + ], + [x86_64-netbsd*], [ + coroutine_type=amd64 + ], + [i386-netbsd*], [ + coroutine_type=x86 + ], + [aarch64-netbsd*], [ + coroutine_type=arm64 ], [x86_64-openbsd*], [ - rb_cv_coroutine=amd64 + coroutine_type=amd64 ], [i386-openbsd*], [ - rb_cv_coroutine=x86 + coroutine_type=x86 ], [*-openbsd*], [ - rb_cv_coroutine=copy + coroutine_type=pthread + ], + [x86_64-dragonfly*], [ + coroutine_type=amd64 ], - [*], [ - rb_cv_coroutine=ucontext + [*-haiku*], [ + coroutine_type=pthread + ], + [*-emscripten*], [ + coroutine_type=emscripten + ], + [ + AC_CHECK_FUNCS([getcontext swapcontext makecontext], + [coroutine_type=ucontext], + [coroutine_type=pthread; break] + ) ] ) - AC_MSG_RESULT(${rb_cv_coroutine}) -]) -COROUTINE_H=coroutine/$rb_cv_coroutine/Context.h -AS_CASE([$rb_cv_coroutine], - [copy|ucontext], [ - COROUTINE_SRC=coroutine/$rb_cv_coroutine/Context.c - ], - [*], [ - COROUTINE_SRC=coroutine/$rb_cv_coroutine/Context.'$(ASMEXT)' - ], -) + 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]) @@ -2382,13 +2628,13 @@ AS_IF([test x"$enable_pthread" = xyes], [ AC_MSG_WARN("Don't know how to find pthread library on your system -- thread support disabled") ]) AC_CACHE_CHECK([whether pthread_t is scalar type], [rb_cv_scalar_pthread_t], [ - AC_TRY_COMPILE([ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include - ], [ + ]], [[ pthread_t thread_id; thread_id = 0; if (!thread_id) return 0; - ], [rb_cv_scalar_pthread_t=yes], [rb_cv_scalar_pthread_t=no]) + ]])],[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 ]) @@ -2400,28 +2646,29 @@ AS_IF([test x"$enable_pthread" = xyes], [ pthread_get_stackaddr_np pthread_get_stacksize_np \ thr_stksegment pthread_stackseg_np pthread_getthrds_np \ pthread_condattr_setclock \ - pthread_sigmask pthread_setname_np pthread_set_name_np) + 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(), name, \"%s\") + # NetBSD (pthread_self(), \"%s\", name) # Darwin (name) for mac in \ "(pthread_self(), name)" \ - "(pthread_self(), name, \"%s\")" \ + "(pthread_self(), \"%s\", name)" \ "(name)" \ ; do - AC_TRY_COMPILE([ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include @%:@ifdef HAVE_PTHREAD_NP_H @%:@include @%:@endif @%:@define SET_THREAD_NAME(name) pthread_setname_np${mac} - ], - [if (SET_THREAD_NAME("conftest")) return 1;], + ]], + [[if (SET_THREAD_NAME("conftest")) return 1;]])], [rb_cv_func_pthread_setname_np_arguments="${mac}" break]) done @@ -2445,8 +2692,8 @@ AS_IF([test x"$enable_pthread" = xyes], [ 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_TRY_COMPILE([@%:@include ], - [size_t size = sizeof(ucontext_t);], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[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) @@ -2454,14 +2701,14 @@ AS_IF([test x"$ac_cv_header_ucontext_h" = xno], [ ]) 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_TRY_COMPILE([ + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include @%:@ifdef HAVE_UCONTEXT_H @%:@include @%:@endif mcontext_t test(mcontext_t mc) {return mc+1;} - ], - [test(0);], + ]], + [[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) @@ -2475,7 +2722,7 @@ AS_IF([test x"$ac_cv_header_ucontext_h" = xyes -o x"$rb_cv_ucontext_in_signal_h" AS_IF([test "$ac_cv_func_fork_works" = "yes" -a "$rb_with_pthread" = "yes"], [ AC_CACHE_CHECK([if fork works with pthread], rb_cv_fork_with_pthread, - [AC_TRY_RUN([ + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include @@ -2531,45 +2778,82 @@ main(int argc, char *argv[]) } 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 + @%:@include + @%:@if defined(HAVE_SYS_IOCTL_H) && !defined(_WIN32) + @%:@include + @%:@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)]) + ]) +]) + } : "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_HELP_STRING([--with-dln-a-out], [dln_a_out is deprecated]), [ AS_CASE([$withval], [yes], [ - AS_IF([test "$enable_shared" = yes], [ - AC_MSG_ERROR(dln_a_out can not make shared library) - ]) - with_dln_a_out=yes], - [ - with_dln_a_out=no])], [with_dln_a_out=no]) + AC_MSG_ERROR(dln_a_out no longer supported) + ]) +]) AC_CACHE_CHECK(whether ELF binaries are produced, rb_cv_binary_elf, -[AC_TRY_LINK([],[], [ +[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)]) AS_IF([test "$rb_cv_binary_elf" = yes], [ AC_DEFINE(USE_ELF) - AS_IF([test "$with_dln_a_out" = yes], [ - AC_MSG_ERROR(dln_a_out does not work with 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]) - AS_IF([test "x$compress_debug_sections" = xzlib], [ - AC_CHECK_LIB([z], [uncompress]) - ]) + AC_CHECK_LIB([z], [uncompress]) ]) ]) @@ -2581,20 +2865,24 @@ AS_IF([test "$ac_cv_header_mach_o_loader_h" = yes], [ AS_CASE(["$target_os"], [linux* | gnu* | k*bsd*-gnu | bsdi* | kopensolaris*-gnu], [ AS_IF([test "$rb_cv_binary_elf" = no], [ - with_dln_a_out=yes + AC_MSG_ERROR(Not ELF) ], [ LDFLAGS="$LDFLAGS -rdynamic" ])]) LIBEXT=a +AC_ARG_WITH(mjit-tabs, + AS_HELP_STRING([--without-mjit-tabs], [expand tabs in mjit header]), + [AS_IF([test $withval = no], [MJIT_TABS=false])]) +AC_SUBST(MJIT_TABS)dnl AC_SUBST(DLDFLAGS)dnl AC_SUBST(ARCH_FLAG)dnl AC_SUBST(MJIT_HEADER_FLAGS)dnl AC_SUBST(MJIT_HEADER_INSTALL_DIR)dnl AC_SUBST(MJIT_CC)dnl -AS_IF([test "$GCC" = "yes"], [ - AS_CASE(["$target_os"],[aix*],[mjit_std_cflag="-std=gnu99"]) -]) +AS_CASE(["$GCC:$target_os"], + [yes:aix*], [mjit_std_cflag="-std=gnu99"], + [mjit_std_cflag=]) AC_SUBST(MJIT_CFLAGS, [${MJIT_CFLAGS-"-w ${mjit_std_cflag} ${orig_cflags}"}])dnl AC_SUBST(MJIT_OPTFLAGS, [${MJIT_OPTFLAGS-'$(optflags)'}])dnl AC_SUBST(MJIT_DEBUGFLAGS, [${MJIT_DEBUGFLAGS-'$(debugflags)'}])dnl @@ -2605,13 +2893,12 @@ 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= -AS_IF([test "$with_dln_a_out" != yes], [ +: "dlopen" && { rb_cv_dlopen=unknown AC_MSG_CHECKING(whether OS depend dynamic link works) AS_IF([test "$GCC" = yes], [ @@ -2625,7 +2912,7 @@ AS_IF([test "$with_dln_a_out" != yes], [ # 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*], [ ], + [bsdi*|cygwin*|msys*|mingw*|aix*|interix*], [ ], [ RUBY_APPEND_OPTION(CCDLFLAGS, -fPIC)]) ], [ @@ -2636,8 +2923,9 @@ AS_IF([test "$with_dln_a_out" != yes], [ [esix*|uxpds*], [CCDLFLAGS="$CCDLFLAGS -KPIC"], [: ${CCDLFLAGS=""}]) ]) +} - +: "rpath" && { AC_ARG_ENABLE(rpath, AS_HELP_STRING([--enable-rpath], [embed run path into extension libraries. enabled by default on ELF platforms]), @@ -2729,7 +3017,7 @@ AS_IF([test "$with_dln_a_out" != yes], [ : ${LDSHARED='$(LD) -Bshareable -x'} LDFLAGS="$LDFLAGS -L/lib -L/usr/lib -L/usr/local/lib" rb_cv_dlopen=yes], - [cygwin*|mingw*], [ + [cygwin*|msys*|mingw*], [ : ${LDSHARED='$(CC) -shared'} XLDFLAGS="$XLDFLAGS -Wl,--stack,0x00200000,--enable-auto-import" DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import" @@ -2763,7 +3051,8 @@ AS_IF([test "$with_dln_a_out" != yes], [ RPATHFLAG=" ${rpathflag}%1\$-s" ]) ]) -]) +} + AS_IF([test "${LDSHAREDXX}" = ""], [ AS_CASE(["${LDSHARED}"], [*'$(CC)'*], [ @@ -2829,7 +3118,7 @@ AC_CHECK_FUNCS(backtrace) AS_IF([test "x$ac_cv_func_backtrace" = xyes], [ AC_CACHE_CHECK(for broken backtrace, rb_cv_broken_backtrace, - [AC_TRY_RUN([ + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include @@ -2838,6 +3127,7 @@ AS_IF([test "x$ac_cv_func_backtrace" = xyes], [ #include #include +]`grep '^@%:@ *define *RUBY_SIGALTSTACK_SIZE' ${srcdir}/signal.c`[ #define TRACE_SIZE 256 void sigsegv(int signum, siginfo_t *info, void *ctx){ @@ -2857,12 +3147,12 @@ main(void) stack_t ss; struct sigaction sa; - ss.ss_sp = malloc(SIGSTKSZ); + 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 = SIGSTKSZ; + ss.ss_size = RUBY_SIGALTSTACK_SIZE; ss.ss_flags = 0; if (sigaltstack(&ss, NULL) == -1) { fprintf(stderr, "sigaltstack failed\n"); @@ -2877,7 +3167,7 @@ main(void) a[0] = 1; return EXIT_SUCCESS; } -], +]])], rb_cv_broken_backtrace=no, rb_cv_broken_backtrace=yes, rb_cv_broken_backtrace=no)]) @@ -2892,49 +3182,23 @@ AC_ARG_WITH(valgrind, AS_IF([test x$with_valgrind != xno], [AC_CHECK_HEADERS(valgrind/memcheck.h)]) -dln_a_out_works=no -AS_IF([test "$ac_cv_header_a_out_h" = yes], [ - AS_IF([test "$with_dln_a_out" = yes || test "$rb_cv_dlopen" = unknown], [ - 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)]) - AS_IF([test "$rb_cv_dln_a_out" = yes], [ - dln_a_out_works=yes - AC_DEFINE(USE_DLN_A_OUT) - ]) - ]) -]) - -AS_IF([test "$dln_a_out_works" = yes], [ - AS_IF([test "$GCC" = yes], [ - STATIC=-static - ], [ - STATIC=-Bstatic - ]) - DLEXT=so - CCDLFLAGS= -], [ +: "dlext & soext" && { AS_CASE(["$target_os"], [hpux*], [ DLEXT=sl], [darwin*], [ SOEXT=dylib DLEXT=bundle], - [cygwin*|mingw*|*djgpp*], [ + [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 @@ -2948,29 +3212,31 @@ AS_IF([test x"$LOAD_RELATIVE" = x1], [ 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) -AS_IF([test "$with_dln_a_out" = yes], [ - STRIP=true -], [ - AC_CHECK_TOOL(STRIP, strip, :)dnl -]) - -AS_CASE(["$target_os"], - [linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu], [ - STRIP="$STRIP -S -x"], - [darwin*], [ - STRIP="$STRIP -A -n"]) +: "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, - AC_HELP_STRING([--with-ext=EXTS], + AS_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], + AS_HELP_STRING([--with-out-ext=EXTS], [pass to --without-ext option of extmk.rb])) EXTSTATIC= AC_SUBST(EXTSTATIC)dnl @@ -3031,7 +3297,7 @@ AS_IF([test x"${exec_prefix}" != xNONE], [ RUBY_EXEC_PREFIX=$ac_default_prefix ]) pat=`echo "${RUBY_EXEC_PREFIX}" | tr -c '\012' .`'\(.*\)' -for var in bindir libdir rubylibprefix; do +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"' @@ -3058,7 +3324,7 @@ AS_IF([test x"$cross_compiling" = xyes], [ 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_COMMAND='$(MINIRUBY) $(tooldir)/runruby.rb --extout=$(EXTOUT) $(RUNRUBYOPT)' RUNRUBY='$(RUNRUBY_COMMAND) --' XRUBY='$(RUNRUBY)' AS_CASE(["$HAVE_BASERUBY:$build_os"], [no:*|*:mingw*], [BOOTSTRAPRUBY='$(MINIRUBY)']) @@ -3084,11 +3350,11 @@ LIBRUBYARG='$(LIBRUBYARG_STATIC)' SOLIBS='$(MAINLIBS)' AS_CASE(["$target_os"], - [cygwin*|mingw*|haiku*|darwin*], [ + [cygwin*|msys*|mingw*|haiku*|darwin*], [ : ${DLDLIBS=""} ], [ - DLDLIBS="$DLDLIBS -lc" + DLDLIBS="${DLDLIBS:+$DLDLIBS }-lc" ]) AC_ARG_ENABLE(multiarch, @@ -3154,6 +3420,17 @@ AS_CASE("$enable_shared", [yes], [ 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*], [], [ @@ -3184,6 +3461,10 @@ AS_CASE("$enable_shared", [yes], [ AS_IF([test "$rb_cv_binary_elf" != "yes" ], [ LIBRUBY_SO="$LIBRUBY_SO.\$(TEENY)" LIBRUBY_ALIASES='' + ], [test "$load_relative" = yes], [ + libprefix="'\$\$ORIGIN/../${libdir_basename}'" + LIBRUBY_RPATHFLAGS="-Wl,-rpath,${libprefix}" + LIBRUBY_RELATIVE=yes ]) ], [netbsd*], [ @@ -3204,7 +3485,13 @@ AS_CASE("$enable_shared", [yes], [ 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)']) - XLDFLAGS="$XLDFLAGS "'-R${libdir}' + AS_IF([test "$load_relative" = yes], [ + libprefix="'\$\$ORIGIN/../${libdir_basename}'" + LIBRUBY_RPATHFLAGS="-R${libprefix}" + LIBRUBY_RELATIVE=yes + ], [ + LIBRUBY_RPATHFLAGS='-R${libdir}' + ]) ], [hpux*], [ XLDFLAGS="$XLDFLAGS "'-Wl,+s,+b,$(libdir)' @@ -3236,7 +3523,7 @@ AS_CASE("$enable_shared", [yes], [ [interix*], [ LIBRUBYARG_SHARED='-L. -L${libdir} -l$(RUBY_SO_NAME)' ], - [mingw*|cygwin*|mswin*], [ + [cygwin*|msys*|mingw*|mswin*], [ LIBRUBY_RELATIVE=yes ]) ], [ @@ -3313,6 +3600,9 @@ AS_CASE(["${enable_dtrace}"], ], [ 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]) @@ -3419,17 +3709,17 @@ AC_SUBST(MJIT_SUPPORT) AC_ARG_ENABLE(install-static-library, AS_HELP_STRING([--disable-install-static-library], [do not install static ruby library]), - [INSTALL_STATIC_LIBRARY=$enableval], + [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) -AS_IF([test "$rb_with_pthread" = "yes"], [ - THREAD_MODEL=pthread -]) AC_CACHE_CHECK([for prefix of external symbols], rb_cv_symbol_prefix, [ - AC_TRY_COMPILE([extern void conftest_external(void) {}], [], [ + 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']` ], @@ -3440,7 +3730,7 @@ 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]), + AS_HELP_STRING([--disable-dln], [disable dynamic link feature]), [test "$enableval" = yes || DLNOBJ=dmydln.o]) AC_SUBST(DLNOBJ) MINIDLNOBJ=dmydln.o @@ -3455,14 +3745,15 @@ AS_CASE(["$target_os"], RUBY_APPEND_OPTION(CFLAGS, -pipe) AC_COMPILE_IFELSE([ AC_LANG_BOOL_COMPILE_TRY([@%:@include ], - [MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7])], + [MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7 && + MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_10])], [dnl RUBY_APPEND_OPTION(XLDFLAGS, [-framework Security]) RUBY_APPEND_OPTION(LIBRUBYARG_STATIC, [-framework Security]) ]dnl ) - RUBY_APPEND_OPTION(XLDFLAGS, [-framework Foundation]) - RUBY_APPEND_OPTION(LIBRUBYARG_STATIC, [-framework Foundation]) + RUBY_APPEND_OPTION(XLDFLAGS, [-framework CoreFoundation]) + RUBY_APPEND_OPTION(LIBRUBYARG_STATIC, [-framework CoreFoundation]) ], [osf*], [ AS_IF([test "$GCC" != "yes" ], [ @@ -3479,7 +3770,7 @@ AS_CASE(["$target_os"], CFLAGS="$CFLAGS -std" ]) ], - [cygwin*|mingw*], [ + [cygwin*|msys*|mingw*], [ LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)' AS_CASE(["$target_os"], [cygwin*], [ @@ -3494,13 +3785,12 @@ AS_CASE(["$target_os"], LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)' ]) EXPORT_PREFIX=' ' - DLDFLAGS="${DLDFLAGS}"' $(DEFFILE)' + 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" - THREAD_MODEL=win32 PLATFORM_DIR=win32 ]) LIBRUBY_ALIASES='' @@ -3522,11 +3812,7 @@ AS_CASE(["$target_os"], 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)]) +RUBY_THREAD AC_ARG_ENABLE(debug-env, AS_HELP_STRING([--enable-debug-env], [enable RUBY_DEBUG environment variable]), @@ -3572,13 +3858,12 @@ 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_TRY_COMPILE([@%:@if defined __`echo ${universal_archnames} | + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@if defined __`echo ${universal_archnames} | sed 's/=[^ ]*//g;s/ /__ || defined __/g'`__ @%:@else @%:@error >>>>>><<<<<< -@%:@endif], [], -[ +@%:@endif]], [[]])],[ rb_cv_architecture_macros=yes mv -f confdefs1.h confdefs.h ], [ @@ -3591,16 +3876,17 @@ AS_IF([test "${universal_binary-no}" = yes ], [ CFLAGS="$new_cflags -arch $archs" archs="__${archs}__" AC_MSG_CHECKING([for macro ${archs} on ${cpu}]) - AC_TRY_COMPILE([@%:@ifndef ${archs} + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@ifndef ${archs} @%:@error -@%:@endif], [], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) +@%:@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 - const char arch[[]] = __ARCHITECTURE__;], [puts(arch);], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include + const char arch[[]] = __ARCHITECTURE__;]], [[puts(arch);]])], [rb_cv_architecture_available=yes], [rb_cv_architecture_available=no])) ]) @@ -3686,7 +3972,7 @@ test "$program_suffix" != NONE && RUBY_INSTALL_NAME="${ri_prefix}"'$(RUBY_BASE_NAME)'"${ri_suffix}" AS_CASE(["$target_os"], - [cygwin*|mingw*], [ + [cygwin*|msys*|mingw*], [ RUBYW_INSTALL_NAME="${ri_prefix}"'$(RUBYW_BASE_NAME)'"${ri_suffix}" rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -3813,7 +4099,11 @@ AS_IF([test "${universal_binary-no}" = yes ], [ AC_DEFINE_UNQUOTED(RUBY_ARCH, "universal-" RUBY_PLATFORM_OS) AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "universal." RUBY_PLATFORM_CPU "-" RUBY_PLATFORM_OS) ], [ - arch="${target_cpu}-${target_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") ]) @@ -3917,7 +4207,7 @@ guard=INCLUDE_RUBY_CONFIG_H } | tr -d '\015' | ( AS_IF([test "x$CONFIGURE_TTY" = xyes], [color=--color], [color=]) - exec ${srcdir}/tool/ifchange $color "${config_h}" - + 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 @@ -3970,7 +4260,7 @@ AC_CONFIG_FILES(Makefile:template/Makefile.in, [ VCS='echo cannot' ]) AS_CASE("$VCS", - ['$(GIT)'|git], [VCSUP='$(VCS) pull $(GITPULLOPTIONS)'], + ['$(GIT)'|git], [VCSUP='$(VCS) pull --rebase $(GITPULLOPTIONS)'], [VCSUP='$(VCS)']) sed -n \ -e '[/^@%:@define \(RUBY_RELEASE_[A-Z]*\) \([0-9][0-9]*\)/]{' \ @@ -4000,10 +4290,10 @@ AC_CONFIG_FILES(Makefile:template/Makefile.in, [ echo 'ruby: $(PROGRAM);' >> $tmpmk test "$tmpmk" = "$tmpgmk" || rm -f "$tmpgmk" ]) && mv -f $tmpmk Makefile], -[EXEEXT='$EXEEXT' gnumake='$gnumake' GIT='$GIT']) +[EXEEXT='$EXEEXT' MAKE='${MAKE-make}' gnumake='$gnumake' GIT='$GIT']) AC_ARG_WITH([ruby-pc], - AC_HELP_STRING([--with-ruby-pc=FILENAME], [pc file basename]), + 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) @@ -4014,21 +4304,6 @@ AC_ARG_WITH(destdir, [DESTDIR="$withval"]) AC_SUBST(DESTDIR) -AC_CONFIG_FILES($ruby_pc:template/ruby.pc.in, - [ - AS_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 - }], - [ - mv -f ruby.tmp.pc $ruby_pc - ], [ - exit 1 - ]) - ], - [ruby_pc='$ruby_pc' PKG_CONFIG='$PKG_CONFIG']) - AC_OUTPUT } } @@ -4067,7 +4342,7 @@ config_summary "vendor path" "$vendordir" config_summary "target OS" "$target_os" config_summary "compiler" "$CC" config_summary "with pthread" "$enable_pthread" -config_summary "with coroutine" "$rb_cv_coroutine" +config_summary "with coroutine" "$coroutine_type" config_summary "enable shared libs" "$ENABLE_SHARED" config_summary "dynamic library ext" "$DLEXT" config_summary "CFLAGS" "$cflags" diff --git a/ruby/constant.h b/ruby/constant.h index 3f1418df1..e0d36909e 100644 --- a/ruby/constant.h +++ b/ruby/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, @@ -39,12 +41,15 @@ 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_const_source_location(VALUE, ID); + +MJIT_SYMBOL_EXPORT_BEGIN +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_from(VALUE klass, ID id); -rb_const_entry_t *rb_const_lookup(VALUE klass, ID id); -int rb_autoloading_value(VALUE mod, ID id, VALUE *value, rb_const_flag_t *flag); -VALUE rb_const_source_location(VALUE, ID); VALUE rb_const_source_location_at(VALUE, ID); +MJIT_SYMBOL_EXPORT_END #endif /* CONSTANT_H */ diff --git a/ruby/cont.c b/ruby/cont.c index a8321abcc..2d33ff402 100644 --- a/ruby/cont.c +++ b/ruby/cont.c @@ -9,19 +9,34 @@ **********************************************************************/ -#include "internal.h" -#include "vm_core.h" -#include "gc.h" -#include "eval_intern.h" -#include "mjit.h" - -#include COROUTINE_H +#include "ruby/internal/config.h" #ifndef _WIN32 #include #include #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 +extern int madvise(caddr_t, size_t, int); +#endif + +#include COROUTINE_H + +#include "eval_intern.h" +#include "gc.h" +#include "internal.h" +#include "internal/cont.h" +#include "internal/proc.h" +#include "internal/warnings.h" +#include "ruby/fiber/scheduler.h" +#include "mjit.h" +#include "vm_core.h" +#include "id_table.h" +#include "ractor_core.h" + static const int DEBUG = 0; #define RB_PAGE_SIZE (pagesize) @@ -227,12 +242,12 @@ struct rb_fiber_struct { rb_context_t cont; VALUE first_proc; struct rb_fiber_struct *prev; + struct rb_fiber_struct *resuming_fiber; + BITFIELD(enum fiber_status, status, 2); - /* If a fiber invokes by "transfer", - * then this fiber can't be invoked by "resume" any more after that. - * You shouldn't mix "transfer" and "resume". - */ - unsigned int transferred : 1; + /* Whether the fiber is allowed to implicitly yield. */ + unsigned int yielding : 1; + unsigned int blocking : 1; struct coroutine_context context; struct fiber_pool_stack stack; @@ -240,6 +255,8 @@ struct rb_fiber_struct { static struct fiber_pool shared_fiber_pool = {NULL, NULL, 0, 0, 0, 0}; +static ID fiber_initialize_keywords[2] = {0}; + /* * FreeBSD require a first (i.e. addr) argument of mmap(2) is not NULL * if MAP_STACK is passed. @@ -324,6 +341,7 @@ fiber_pool_vacancy_push(struct fiber_pool_vacancy * vacancy, struct fiber_pool_v #ifdef FIBER_POOL_ALLOCATION_FREE if (head) { head->previous = vacancy; + vacancy->previous = NULL; } #endif @@ -422,6 +440,12 @@ fiber_pool_allocate_memory(size_t * count, size_t stride) *count = (*count) >> 1; } else { +#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, (*count)*stride, MADV_FREE_REUSE) == -1 && errno == EAGAIN); +#endif return base; } #endif @@ -544,7 +568,7 @@ fiber_pool_allocation_free(struct fiber_pool_allocation * allocation) VM_ASSERT(allocation->used == 0); - if (DEBUG) fprintf(stderr, "fiber_pool_allocation_free: %p base=%p count=%"PRIuSIZE"\n", allocation, allocation->base, allocation->count); + 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) { @@ -582,7 +606,8 @@ fiber_pool_allocation_free(struct fiber_pool_allocation * allocation) // 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) { +fiber_pool_stack_acquire(struct fiber_pool * fiber_pool) +{ struct fiber_pool_vacancy * 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); @@ -634,8 +659,14 @@ fiber_pool_stack_free(struct fiber_pool_stack * stack) #if VM_CHECK_MODE > 0 && defined(MADV_DONTNEED) // This immediately discards the pages and the memory is reset to zero. madvise(base, size, MADV_DONTNEED); +#elif defined(POSIX_MADV_DONTNEED) + posix_madvise(base, size, POSIX_MADV_DONTNEED); #elif defined(MADV_FREE_REUSABLE) - madvise(base, size, MADV_FREE_REUSABLE); + // Acknowledge the kernel down to the task info api we make this + // page reusable for future use. + // As for MADV_FREE_REUSE 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, MADV_FREE_REUSABLE) == -1 && errno == EAGAIN); #elif defined(MADV_FREE) madvise(base, size, MADV_FREE); #elif defined(MADV_DONTNEED) @@ -687,10 +718,49 @@ fiber_pool_stack_release(struct fiber_pool_stack * stack) #endif } +static inline void +ec_switch(rb_thread_t *th, rb_fiber_t *fiber) +{ + rb_execution_context_t *ec = &fiber->cont.saved_ec; + 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. + */ + 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); +} + static COROUTINE fiber_entry(struct coroutine_context * from, struct coroutine_context * to) { - rb_fiber_start(); + rb_fiber_t *fiber = to->argument; + 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); + + rb_fiber_start(fiber); + +#ifndef COROUTINE_PTHREAD_CONTEXT + VM_UNREACHABLE(fiber_entry); +#endif } // Initialize a fiber's coroutine's machine stack and vm stack. @@ -707,22 +777,13 @@ fiber_initialize_coroutine(rb_fiber_t *fiber, size_t * vm_stack_size) vm_stack = fiber_pool_stack_alloca(&fiber->stack, fiber_pool->vm_stack_size); *vm_stack_size = fiber_pool->vm_stack_size; -#ifdef COROUTINE_PRIVATE_STACK - coroutine_initialize(&fiber->context, fiber_entry, fiber_pool_stack_base(&fiber->stack), fiber->stack.available, sec->machine.stack_start); - // The stack for this execution context is still the main machine stack, so don't adjust it. - // If this is not managed correctly, you will fail in `rb_ec_stack_check`. - - // We limit the machine stack usage to the fiber stack size. - if (sec->machine.stack_maxsize > fiber->stack.available) { - sec->machine.stack_maxsize = fiber->stack.available; - } -#else 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; -#endif + + fiber->context.argument = (void*)fiber; return vm_stack; } @@ -791,24 +852,6 @@ fiber_status_set(rb_fiber_t *fiber, enum fiber_status s) fiber->status = s; } -static inline void -ec_switch(rb_thread_t *th, rb_fiber_t *fiber) -{ - rb_execution_context_t *ec = &fiber->cont.saved_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. - */ - if (th->vm->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 rb_context_t * cont_ptr(VALUE obj) { @@ -836,6 +879,12 @@ NOINLINE(static VALUE cont_capture(volatile int *volatile stat)); 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) { @@ -898,11 +947,13 @@ cont_mark(void *ptr) 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 cont_free(void *ptr) @@ -919,14 +970,13 @@ cont_free(void *ptr) else { rb_fiber_t *fiber = (rb_fiber_t*)cont; coroutine_destroy(&fiber->context); - if (!fiber_is_root_p(fiber)) { - fiber_stack_release(fiber); - } + fiber_stack_release(fiber); } RUBY_FREE_UNLESS_NULL(cont->saved_vm_stack.ptr); - if (mjit_enabled && cont->mjit_cont != NULL) { + if (mjit_enabled) { + VM_ASSERT(cont->mjit_cont != NULL); mjit_cont_free(cont->mjit_cont); } /* free rb_cont_t or rb_fiber_t */ @@ -1009,10 +1059,10 @@ fiber_free(void *ptr) rb_fiber_t *fiber = ptr; RUBY_FREE_ENTER("fiber"); - //if (DEBUG) fprintf(stderr, "fiber_free: %p[%p]\n", fiber, fiber->stack.base); + if (DEBUG) fprintf(stderr, "fiber_free: %p[%p]\n", (void *)fiber, fiber->stack.base); if (fiber->cont.saved_ec.local_storage) { - st_free_table(fiber->cont.saved_ec.local_storage); + rb_id_table_free(fiber->cont.saved_ec.local_storage); } cont_free(&fiber->cont); @@ -1031,7 +1081,7 @@ fiber_memsize(const void *ptr) * vm.c::thread_memsize already counts th->ec->local_storage */ if (saved_ec->local_storage && fiber != th->root_fiber) { - size += st_memsize(saved_ec->local_storage); + size += rb_id_table_memsize(saved_ec->local_storage); } size += cont_memsize(&fiber->cont); return size; @@ -1040,12 +1090,7 @@ fiber_memsize(const void *ptr) 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, &fiber_data_type)); } static void @@ -1131,11 +1176,22 @@ cont_new(VALUE klass) 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; +} + +// This is used for root_fiber because other fibers call cont_init_mjit_cont through cont_new. void rb_fiber_init_mjit_cont(struct rb_fiber_struct *fiber) { - // Currently this function is meant for root_fiber. Others go through cont_new. - // XXX: Is this mjit_cont `mjit_cont_free`d? cont_init_mjit_cont(&fiber->cont); } @@ -1236,13 +1292,6 @@ cont_capture(volatile int *volatile stat) } COMPILER_WARNING_POP -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); -} - static inline void cont_restore_thread(rb_context_t *cont) { @@ -1285,7 +1334,6 @@ cont_restore_thread(rb_context_t *cont) th->ec->cfp = sec->cfp; th->ec->raised_flag = sec->raised_flag; th->ec->tag = sec->tag; - th->ec->protect_tag = sec->protect_tag; th->ec->root_lep = sec->root_lep; th->ec->root_svar = sec->root_svar; th->ec->ensure_list = sec->ensure_list; @@ -1326,16 +1374,20 @@ fiber_setcontext(rb_fiber_t *new_fiber, rb_fiber_t *old_fiber) /* old_fiber->machine.stack_end should be NULL */ old_fiber->cont.saved_ec.machine.stack_end = NULL; - /* restore thread context */ - fiber_restore_thread(th, new_fiber); - - // if (DEBUG) fprintf(stderr, "fiber_setcontext: %p[%p] -> %p[%p]\n", old_fiber, old_fiber->stack.base, new_fiber, new_fiber->stack.base); + // 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); /* swap machine context */ - coroutine_transfer(&old_fiber->context, &new_fiber->context); + struct coroutine_context * from = coroutine_transfer(&old_fiber->context, &new_fiber->context); + + if (from == NULL) { + rb_syserr_fail(errno, "coroutine_transfer"); + } + + /* restore thread context */ + fiber_restore_thread(th, old_fiber); // It's possible to get here, and new_fiber is already freed. - // if (DEBUG) fprintf(stderr, "fiber_setcontext: %p[%p] <- %p[%p]\n", old_fiber, old_fiber->stack.base, new_fiber, new_fiber->stack.base); + // 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); } NOINLINE(NORETURN(static void cont_restore_1(rb_context_t *))); @@ -1603,6 +1655,8 @@ rollback_ensure_stack(VALUE self,rb_ensure_list_t *current,rb_ensure_entry_t *ta } } +NORETURN(static VALUE rb_cont_call(int argc, VALUE *argv, VALUE contval)); + /* * call-seq: * cont.call(args, ...) @@ -1627,9 +1681,6 @@ rb_cont_call(int argc, VALUE *argv, VALUE contval) if (cont_thread_value(cont) != th->self) { rb_raise(rb_eRuntimeError, "continuation called across threads"); } - if (cont->saved_ec.protect_tag != th->ec->protect_tag) { - rb_raise(rb_eRuntimeError, "continuation called across stack rewinding barrier"); - } if (cont->saved_ec.fiber_ptr) { if (th->ec->fiber_ptr != cont->saved_ec.fiber_ptr) { rb_raise(rb_eRuntimeError, "continuation called across fiber"); @@ -1641,7 +1692,7 @@ rb_cont_call(int argc, VALUE *argv, VALUE contval) cont->value = make_passing_arg(argc, argv); cont_restore_0(cont, &contval); - return Qnil; /* unreachable */ + UNREACHABLE_RETURN(Qnil); } /*********/ @@ -1709,6 +1760,26 @@ rb_cont_call(int argc, VALUE *argv, VALUE contval) * 1000000 * FiberError: dead fiber called * + * == Non-blocking Fibers + * + * The concept of non-blocking fiber was introduced in Ruby 3.0. + * A non-blocking fiber, when reaching a operation that would normally block + * the fiber (like sleep, or wait for another process or I/O) + * will yield control to other fibers and allow the scheduler 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 + * blocking: false (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::SchedulerInterface. + * + * 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 = { @@ -1724,7 +1795,7 @@ fiber_alloc(VALUE klass) } static rb_fiber_t* -fiber_t_alloc(VALUE fiber_value) +fiber_t_alloc(VALUE fiber_value, unsigned int blocking) { rb_fiber_t *fiber; rb_thread_t *th = GET_THREAD(); @@ -1737,6 +1808,7 @@ fiber_t_alloc(VALUE fiber_value) fiber = ZALLOC(rb_fiber_t); fiber->cont.self = fiber_value; fiber->cont.type = FIBER_CONTEXT; + fiber->blocking = blocking; cont_init(&fiber->cont, th); fiber->cont.saved_ec.fiber_ptr = fiber; @@ -1754,9 +1826,9 @@ fiber_t_alloc(VALUE fiber_value) } static VALUE -fiber_initialize(VALUE self, VALUE proc, struct fiber_pool * fiber_pool) +fiber_initialize(VALUE self, VALUE proc, struct fiber_pool * fiber_pool, unsigned int blocking) { - rb_fiber_t *fiber = fiber_t_alloc(self); + rb_fiber_t *fiber = fiber_t_alloc(self, blocking); fiber->first_proc = proc; fiber->stack.base = NULL; @@ -1784,41 +1856,212 @@ fiber_prepare_stack(rb_fiber_t *fiber) sec->local_storage_recursive_hash_for_trace = Qnil; } +static struct fiber_pool * +rb_fiber_pool_default(VALUE pool) +{ + return &shared_fiber_pool; +} + /* :nodoc: */ static VALUE +rb_fiber_initialize_kw(int argc, VALUE* argv, VALUE self, int kw_splat) +{ + VALUE pool = Qnil; + VALUE blocking = Qfalse; + + if (kw_splat != RB_NO_KEYWORDS) { + VALUE options = Qnil; + VALUE arguments[2] = {Qundef}; + + argc = rb_scan_args_kw(kw_splat, argc, argv, ":", &options); + rb_get_kwargs(options, fiber_initialize_keywords, 0, 2, arguments); + + if (arguments[0] != Qundef) { + blocking = arguments[0]; + } + + if (arguments[1] != Qundef) { + pool = arguments[1]; + } + } + + return fiber_initialize(self, rb_block_proc(), rb_fiber_pool_default(pool), RTEST(blocking)); +} + +/* + * call-seq: + * Fiber.new(blocking: false) { |*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 blocking: false is passed to Fiber.new, _and_ current thread + * has a Fiber.scheduler defined, the Fiber becomes non-blocking (see "Non-blocking + * Fibers" section in class docs). + */ +static VALUE rb_fiber_initialize(int argc, VALUE* argv, VALUE self) { - return fiber_initialize(self, rb_block_proc(), &shared_fiber_pool); + return rb_fiber_initialize_kw(argc, argv, self, rb_keyword_given_p()); } VALUE rb_fiber_new(rb_block_call_func_t func, VALUE obj) { - return fiber_initialize(fiber_alloc(rb_cFiber), rb_proc_new(func, obj), &shared_fiber_pool); + return fiber_initialize(fiber_alloc(rb_cFiber), rb_proc_new(func, obj), rb_fiber_pool_default(Qnil), 1); +} + +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_funcall_passing_block_kw(scheduler, rb_intern("fiber"), argc, argv, kw_splat); + } + else { + rb_raise(rb_eRuntimeError, "No scheduler is available!"); + } + + return fiber; +} + +/* + * call-seq: + * Fiber.schedule { |*args| ... } -> fiber + * + * The method is expected 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 (sleep(1)), + * the control is yielded to the outside code (main fiber), and at the end + * of that execution, the scheduler takes care of properly resuming all the + * blocked fibers. + * + * Note that the behavior described above is how the method is expected + * to behave, actual behavior is up to the current scheduler's implementation of + * Fiber::SchedulerInterface#fiber method. Ruby doesn't enforce this method to + * behave in any particular way. + * + * If the scheduler is not set, the method raises + * RuntimeError (No scheduler is available!). + * + */ +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 rb_fiber_scheduler_get(); +} + +/* + * 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(); } -static void rb_fiber_terminate(rb_fiber_t *fiber, int need_interrupt); +/* + * 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 blocking: false, 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::SchedulerInterface. 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); +} -#define PASS_KW_SPLAT (rb_empty_keyword_given_p() ? RB_PASS_EMPTY_KEYWORDS : rb_keyword_given_p()) +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 * volatile th = GET_THREAD(); - rb_fiber_t *fiber = th->ec->fiber_ptr; + rb_thread_t * volatile th = fiber->cont.saved_ec.thread_ptr; + rb_proc_t *proc; enum ruby_tag_type state; int need_interrupt = TRUE; - VM_ASSERT(th->ec == ruby_current_execution_context_ptr); + 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; - int kw_splat = cont->kw_splat; GetProcPtr(fiber->first_proc, proc); argv = (argc = cont->argc) > 1 ? RARRAY_CONST_PTR(args) : &args; cont->value = Qnil; @@ -1827,29 +2070,28 @@ rb_fiber_start(void) th->ec->root_svar = Qfalse; EXEC_EVENT_HOOK(th->ec, RUBY_EVENT_FIBER_SWITCH, th->self, 0, 0, 0, Qnil); - rb_adjust_argv_kw_splat(&argc, &argv, &kw_splat); - cont->value = rb_vm_invoke_proc(th->ec, proc, argc, argv, kw_splat, VM_BLOCK_HANDLER_NONE); + cont->value = rb_vm_invoke_proc(th->ec, proc, argc, argv, cont->kw_splat, VM_BLOCK_HANDLER_NONE); } EC_POP_TAG(); + VALUE err = Qfalse; if (state) { - VALUE err = th->ec->errinfo; + err = th->ec->errinfo; VM_ASSERT(FIBER_RESUMED_P(fiber)); - if (state == TAG_RAISE || state == TAG_FATAL) { + if (state == TAG_RAISE) { + // noop... + } + else if (state == TAG_FATAL) { rb_threadptr_pending_interrupt_enque(th, err); } else { err = rb_vm_make_jump_tag_but_local_jump(state, err); - if (!NIL_P(err)) { - rb_threadptr_pending_interrupt_enque(th, err); - } } need_interrupt = TRUE; } - rb_fiber_terminate(fiber, need_interrupt); - VM_UNREACHABLE(rb_fiber_start); + rb_fiber_terminate(fiber, need_interrupt, err); } static rb_fiber_t * @@ -1866,12 +2108,7 @@ root_fiber_alloc(rb_thread_t *th) DATA_PTR(fiber_value) = fiber; fiber->cont.self = fiber_value; -#ifdef COROUTINE_PRIVATE_STACK - fiber->stack = fiber_pool_stack_acquire(&shared_fiber_pool); - coroutine_initialize_main(&fiber->context, fiber_pool_stack_base(&fiber->stack), fiber->stack.available, th->ec->machine.stack_start); -#else coroutine_initialize_main(&fiber->context); -#endif return fiber; } @@ -1887,8 +2124,12 @@ rb_threadptr_root_fiber_setup(rb_thread_t *th) fiber->cont.type = FIBER_CONTEXT; fiber->cont.saved_ec.fiber_ptr = fiber; fiber->cont.saved_ec.thread_ptr = th; + fiber->blocking = 1; fiber_status_set(fiber, FIBER_RESUMED); /* skip CREATED */ th->ec = &fiber->cont.saved_ec; + // This skips mjit_cont_new for the initial thread because mjit_enabled is always false + // at this point. mjit_init calls rb_fiber_init_mjit_cont again for this root_fiber. + rb_fiber_init_mjit_cont(fiber); } void @@ -1898,13 +2139,15 @@ rb_threadptr_root_fiber_release(rb_thread_t *th) /* ignore. A root fiber object will free th->ec */ } else { + rb_execution_context_t *ec = GET_EC(); + VM_ASSERT(th->ec->fiber_ptr->cont.type == FIBER_CONTEXT); VM_ASSERT(th->ec->fiber_ptr->cont.self == 0); - fiber_free(th->ec->fiber_ptr); - if (th->ec == ruby_current_execution_context_ptr) { - ruby_current_execution_context_ptr = NULL; + if (th->ec == ec) { + rb_ractor_set_current_ec(th->ractor, NULL); } + fiber_free(th->ec->fiber_ptr); th->ec = NULL; } } @@ -1931,25 +2174,31 @@ fiber_current(void) } static inline rb_fiber_t* -return_fiber(void) +return_fiber(bool terminate) { rb_fiber_t *fiber = fiber_current(); rb_fiber_t *prev = fiber->prev; - if (!prev) { + if (prev) { + fiber->prev = NULL; + prev->resuming_fiber = NULL; + return prev; + } + else { + 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); - if (root_fiber == fiber) { - rb_raise(rb_eFiberError, "can't yield from root fiber"); + // search resuming fiber + for (fiber = root_fiber; fiber->resuming_fiber; fiber = fiber->resuming_fiber) { } - return root_fiber; - } - else { - fiber->prev = NULL; - return prev; + + return fiber; } } @@ -1960,7 +2209,7 @@ rb_fiber_current(void) } // Prepare to execute next_fiber on the given thread. -static inline VALUE +static inline void fiber_store(rb_fiber_t *next_fiber, rb_thread_t *th) { rb_fiber_t *fiber; @@ -1984,17 +2233,10 @@ fiber_store(rb_fiber_t *next_fiber, rb_thread_t *th) fiber_status_set(next_fiber, FIBER_RESUMED); fiber_setcontext(next_fiber, fiber); - - fiber = th->ec->fiber_ptr; - - /* Raise an exception if that was the result of executing the fiber */ - if (fiber->cont.argc == -1) rb_exc_raise(fiber->cont.value); - - return fiber->cont.value; } static inline VALUE -fiber_switch(rb_fiber_t *fiber, int argc, const VALUE *argv, int is_resume, int kw_splat) +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 = &fiber->cont; @@ -2005,7 +2247,7 @@ fiber_switch(rb_fiber_t *fiber, int argc, const VALUE *argv, int is_resume, int if (th->ec->fiber_ptr == fiber) { /* ignore fiber context switch - * because destination fiber is same as current fiber + * because destination fiber is the same as current fiber */ return make_passing_arg(argc, argv); } @@ -2013,10 +2255,8 @@ fiber_switch(rb_fiber_t *fiber, int argc, const VALUE *argv, int is_resume, int if (cont_thread_value(cont) != th->self) { rb_raise(rb_eFiberError, "fiber called across threads"); } - else if (cont->saved_ec.protect_tag != th->ec->protect_tag) { - rb_raise(rb_eFiberError, "fiber called across stack rewinding barrier"); - } - else if (FIBER_TERMINATED_P(fiber)) { + + if (FIBER_TERMINATED_P(fiber)) { value = rb_exc_new2(rb_eFiberError, "dead fiber called"); if (!FIBER_TERMINATED_P(th->ec->fiber_ptr)) { @@ -2039,33 +2279,108 @@ fiber_switch(rb_fiber_t *fiber, int argc, const VALUE *argv, int is_resume, int } } - if (is_resume) { + 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; } - VM_ASSERT(FIBER_RUNNABLE_P(fiber)); + 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(fiber, th); + fiber_store(fiber, th); - if (is_resume && FIBER_TERMINATED_P(fiber)) { + // We cannot free the stack until the pthread is joined: +#ifndef COROUTINE_PTHREAD_CONTEXT + if (resuming_fiber && FIBER_TERMINATED_P(fiber)) { fiber_stack_release(fiber); } +#endif + + if (fiber_current()->blocking) { + th->blocking += 1; + } RUBY_VM_CHECK_INTS(th->ec); 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; + if (current_fiber->cont.argc == -1) rb_exc_raise(value); return value; } VALUE rb_fiber_transfer(VALUE fiber_value, int argc, const VALUE *argv) { - return fiber_switch(fiber_ptr(fiber_value), argc, argv, 0, RB_NO_KEYWORDS); + return fiber_switch(fiber_ptr(fiber_value), argc, argv, RB_NO_KEYWORDS, NULL, false); +} + +/* + * 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 blocking: false + * 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 != 0); +} + +/* + * 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 blocking: false + * 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 @@ -2075,60 +2390,79 @@ rb_fiber_close(rb_fiber_t *fiber) } static void -rb_fiber_terminate(rb_fiber_t *fiber, int need_interrupt) +rb_fiber_terminate(rb_fiber_t *fiber, int need_interrupt, VALUE error) { VALUE value = fiber->cont.value; - rb_fiber_t *next_fiber; VM_ASSERT(FIBER_RESUMED_P(fiber)); rb_fiber_close(fiber); - coroutine_destroy(&fiber->context); - fiber->cont.machine.stack = NULL; fiber->cont.machine.stack_size = 0; - next_fiber = return_fiber(); + rb_fiber_t *next_fiber = return_fiber(true); + if (need_interrupt) RUBY_VM_SET_INTERRUPT(&next_fiber->cont.saved_ec); - fiber_switch(next_fiber, 1, &value, 0, RB_NO_KEYWORDS); + + 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); } -VALUE -rb_fiber_resume_kw(VALUE fiber_value, int argc, const VALUE *argv, int kw_splat) +static VALUE +fiber_resume_kw(rb_fiber_t *fiber, int argc, const VALUE *argv, int kw_splat) { - rb_fiber_t *fiber = fiber_ptr(fiber_value); + rb_fiber_t *current_fiber = fiber_current(); if (argc == -1 && FIBER_CREATED_P(fiber)) { rb_raise(rb_eFiberError, "cannot raise exception on unborn fiber"); } - - if (fiber->prev != 0 || fiber_is_root_p(fiber)) { - rb_raise(rb_eFiberError, "double resume"); + else if (FIBER_TERMINATED_P(fiber)) { + rb_raise(rb_eFiberError, "attempt to resume a terminated fiber"); } - - if (fiber->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"); + } + + VALUE result = fiber_switch(fiber, argc, argv, kw_splat, fiber, false); + + return result; +} - return fiber_switch(fiber, argc, argv, 1, kw_splat); +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 fiber_value, int argc, const VALUE *argv) +rb_fiber_resume(VALUE self, int argc, const VALUE *argv) { - return rb_fiber_resume_kw(fiber_value, argc, argv, RB_NO_KEYWORDS); + 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(), argc, argv, 0, 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, RB_NO_KEYWORDS); + return fiber_switch(return_fiber(false), argc, argv, RB_NO_KEYWORDS, NULL, true); } void @@ -2145,8 +2479,7 @@ rb_fiber_reset_root_local_storage(rb_thread_t *th) * * 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 require 'fiber' - * before using this method. + * always return +false+. */ VALUE rb_fiber_alive_p(VALUE fiber_value) @@ -2172,33 +2505,84 @@ rb_fiber_alive_p(VALUE fiber_value) static VALUE rb_fiber_m_resume(int argc, VALUE *argv, VALUE fiber) { - return rb_fiber_resume_kw(fiber, argc, argv, PASS_KW_SPLAT); + return rb_fiber_resume_kw(fiber, argc, argv, rb_keyword_given_p()); } /* * call-seq: - * fiber.raise -> obj - * fiber.raise(string) -> obj - * fiber.raise(exception [, string [, array]]) -> obj + * 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
'"] + * 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
'"] + * 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 * - * Raises an exception in the fiber at the point at which the last - * Fiber.yield was called, or at the start if neither +resume+ - * nor +raise+ were called before. * - * With no arguments, raises a +RuntimeError+. With a single +String+ - * argument, raises a +RuntimeError+ with the string as a message. Otherwise, - * the first parameter should be the name of an +Exception+ class (or an - * object that returns an +Exception+ object when sent an +exception+ - * message). The optional second parameter sets the message associated with - * the exception, and the third parameter is an array of callback information. - * Exceptions are caught by the +rescue+ clause of begin...end - * blocks. */ static VALUE -rb_fiber_raise(int argc, VALUE *argv, VALUE fiber) +rb_fiber_backtrace_locations(int argc, VALUE *argv, VALUE fiber) { - VALUE exc = rb_make_exception(argc, argv); - return rb_fiber_resume_kw(fiber, -1, &exc, RB_NO_KEYWORDS); + return rb_vm_backtrace_locations(argc, argv, &fiber_ptr(fiber)->cont.saved_ec); } /* @@ -2208,57 +2592,105 @@ rb_fiber_raise(int argc, VALUE *argv, VALUE fiber) * 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 - * Fiber.yield. You need to require 'fiber' - * 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 call +resume+ on a fiber that has been transferred to. - * If you call +transfer+ on a fiber, and later call +resume+ on the - * the fiber, a +FiberError+ will be raised. Once you call +transfer+ on - * a fiber, the only way to resume processing the fiber is to - * call +transfer+ on it again. + * 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 - * puts "In Fiber 1 again" - * 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 - * fiber1.resume rescue (p $!) - * fiber1.transfer + * 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 * * produces * - * In Fiber 2 - * In Fiber 1 - * In Fiber 3 - * # - * In Fiber 1 again + * 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 fiber_value) +rb_fiber_m_transfer(int argc, VALUE *argv, VALUE self) { - rb_fiber_t *fiber = fiber_ptr(fiber_value); - fiber->transferred = 1; - return fiber_switch(fiber, argc, argv, 0, PASS_KW_SPLAT); + 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) +{ + return fiber_transfer_kw(fiber_ptr(self), argc, argv, kw_splat); } /* @@ -2274,30 +2706,70 @@ rb_fiber_m_transfer(int argc, VALUE *argv, VALUE fiber_value) static VALUE rb_fiber_s_yield(int argc, VALUE *argv, VALUE klass) { - return rb_fiber_yield_kw(argc, argv, PASS_KW_SPLAT); + return rb_fiber_yield_kw(argc, argv, rb_keyword_given_p()); +} + +static VALUE +fiber_raise(rb_fiber_t *fiber, int argc, const VALUE *argv) +{ + VALUE exception = rb_make_exception(argc, argv); + + if (fiber->resuming_fiber) { + rb_raise(rb_eFiberError, "attempt to raise a resuming fiber"); + } + 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, const VALUE *argv) +{ + return fiber_raise(fiber_ptr(fiber), argc, argv); } /* * call-seq: - * Fiber.current() -> fiber + * fiber.raise -> obj + * fiber.raise(string) -> obj + * fiber.raise(exception [, string [, array]]) -> obj * - * Returns the current fiber. You need to require 'fiber' - * before using this method. If you are not running in the context of - * a fiber this method will return the root fiber. + * Raises an exception in the fiber at the point at which the last + * +Fiber.yield+ was called. 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+. + * + * With no arguments, raises a +RuntimeError+. With a single +String+ + * argument, raises a +RuntimeError+ with the string as a message. Otherwise, + * the first parameter should be the name of an +Exception+ class (or an + * object that returns an +Exception+ object when sent an +exception+ + * message). The optional second parameter sets the message associated with + * the exception, and the third parameter is an array of callback information. + * Exceptions are caught by the +rescue+ clause of begin...end + * blocks. */ static VALUE -rb_fiber_s_current(VALUE klass) +rb_fiber_m_raise(int argc, VALUE *argv, VALUE self) { - return rb_fiber_current(); + return rb_fiber_raise(self, argc, argv); } /* - * call-seq: - * fiber.to_s -> string - * - * Returns fiber information string. + * 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 +rb_fiber_s_current(VALUE klass) +{ + return rb_fiber_current(); +} static VALUE fiber_to_s(VALUE fiber_value) @@ -2306,8 +2778,8 @@ fiber_to_s(VALUE fiber_value) const rb_proc_t *proc; char status_info[0x20]; - if (fiber->transferred) { - snprintf(status_info, 0x20, " (%s, transferred)", fiber_status_name(fiber->status)); + 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)); @@ -2418,6 +2890,329 @@ rb_fiber_pool_initialize(int argc, VALUE* argv, VALUE self) * fiber.resume #=> FiberError: dead fiber called */ +/* + * Document-class: Fiber::SchedulerInterface + * + * This is not an existing class, but documentation of the interface that Scheduler + * object should comply to in order to be used as argument to Fiber.scheduler and handle non-blocking + * fibers. See also the "Non-blocking fibers" section in Fiber class docs for explanations + * of some concepts. + * + * Scheduler's behavior and usage are expected to be as follows: + * + * * When the execution in the non-blocking Fiber reaches some blocking operation (like + * sleep, wait for a process, or a non-ready I/O), it calls some of the scheduler's + * hook methods, listed below. + * * Scheduler somehow registers what the current fiber is waiting on, and yields control + * to other fibers with Fiber.yield (so the fiber would be suspended while expecting its + * wait to end, and other fibers in the same thread can perform) + * * At the end of the current thread execution, the scheduler's method #close is called + * * The scheduler runs into a wait loop, checking all the blocked fibers (which it has + * registered on hook calls) and resuming them when the awaited resource is ready + * (e.g. I/O ready or sleep time elapsed). + * + * A typical implementation would probably rely for this closing loop on a gem like + * EventMachine[https://github.com/eventmachine/eventmachine] or + * Async[https://github.com/socketry/async]. + * + * This way concurrent execution will be achieved transparently for every + * individual Fiber's code. + * + * Hook methods are: + * + * * #io_wait, #io_read, and #io_write + * * #process_wait + * * #kernel_sleep + * * #timeout_after + * * #address_resolve + * * #block and #unblock + * * (the list is expanded as Ruby developers make more methods having non-blocking calls) + * + * When not specified otherwise, the hook implementations are mandatory: if they are not + * implemented, the methods trying to call hook will fail. To provide backward compatibility, + * in the future hooks will be optional (if they are not implemented, due to the scheduler + * being created for the older Ruby version, the code which needs this hook will not fail, + * and will just behave in a blocking fashion). + * + * It is also strongly recommended that the scheduler implements the #fiber method, which is + * delegated to by Fiber.schedule. + * + * Sample _toy_ implementation of the scheduler can be found in Ruby's code, in + * test/fiber/scheduler.rb + * + */ + +#if 0 /* for RDoc */ +/* + * + * Document-method: Fiber::SchedulerInterface#close + * + * Called when the current thread exits. The scheduler is expected to implement this + * method in order to allow all waiting fibers to finalize their execution. + * + * The suggested pattern is to implement the main event loop in the #close method. + * + */ +static VALUE +rb_fiber_scheduler_interface_close(VALUE self) +{ +} + +/* + * Document-method: SchedulerInterface#process_wait + * call-seq: process_wait(pid, flags) + * + * Invoked by Process::Status.wait in order to wait for a specified process. + * See that method description for arguments description. + * + * Suggested minimal implementation: + * + * Thread.new do + * Process::Status.wait(pid, flags) + * end.value + * + * This hook is optional: if it is not present in the current scheduler, + * Process::Status.wait will behave as a blocking method. + * + * Expected to return a Process::Status instance. + */ +static VALUE +rb_fiber_scheduler_interface_process_wait(VALUE self) +{ +} + +/* + * Document-method: SchedulerInterface#io_wait + * call-seq: io_wait(io, events, timeout) + * + * Invoked by IO#wait, IO#wait_readable, IO#wait_writable to ask whether the + * specified descriptor is ready for specified events within + * the specified +timeout+. + * + * +events+ is a bit mask of IO::READABLE, IO::WRITABLE, and + * IO::PRIORITY. + * + * Suggested implementation should register which Fiber is waiting for which + * resources and immediately calling Fiber.yield to pass control to other + * fibers. Then, in the #close method, the scheduler might dispatch all the + * I/O resources to fibers waiting for it. + * + * Expected to return the subset of events that are ready immediately. + * + */ +static VALUE +rb_fiber_scheduler_interface_io_wait(VALUE self) +{ +} + +/* + * Document-method: SchedulerInterface#io_read + * call-seq: io_read(io, buffer, length) -> read length or -errno + * + * Invoked by IO#read to read +length+ bytes from +io+ into a specified + * +buffer+ (see IO::Buffer). + * + * The +length+ argument is the "minimum length to be read". + * If the IO buffer size is 8KiB, but the +length+ is +1024+ (1KiB), up to + * 8KiB might be read, but at least 1KiB will be. + * Generally, the only case where less data than +length+ will be read is if + * there is an error reading the data. + * + * Specifying a +length+ of 0 is valid and means try reading at least once + * and return any available data. + * + * Suggested implementation should try to read from +io+ in a non-blocking + * manner and call #io_wait if the +io+ is not ready (which will yield control + * to other fibers). + * + * See IO::Buffer for an interface available to return data. + * + * Expected to return number of bytes read, or, in case of an error, -errno + * (negated number corresponding to system's error code). + * + * The method should be considered _experimental_. + */ +static VALUE +rb_fiber_scheduler_interface_io_read(VALUE self) +{ +} + +/* + * Document-method: SchedulerInterface#io_write + * call-seq: io_write(io, buffer, length) -> written length or -errno + * + * Invoked by IO#write to write +length+ bytes to +io+ from + * from a specified +buffer+ (see IO::Buffer). + * + * The +length+ argument is the "(minimum) length to be written". + * If the IO buffer size is 8KiB, but the +length+ specified is 1024 (1KiB), + * at most 8KiB will be written, but at least 1KiB will be. + * Generally, the only case where less data than +length+ will be written is if + * there is an error writing the data. + * + * Specifying a +length+ of 0 is valid and means try writing at least once, + * as much data as possible. + * + * Suggested implementation should try to write to +io+ in a non-blocking + * manner and call #io_wait if the +io+ is not ready (which will yield control + * to other fibers). + * + * See IO::Buffer for an interface available to get data from buffer efficiently. + * + * Expected to return number of bytes written, or, in case of an error, -errno + * (negated number corresponding to system's error code). + * + * The method should be considered _experimental_. + */ +static VALUE +rb_fiber_scheduler_interface_io_write(VALUE self) +{ +} + +/* + * Document-method: SchedulerInterface#kernel_sleep + * call-seq: kernel_sleep(duration = nil) + * + * Invoked by Kernel#sleep and Mutex#sleep and is expected to provide + * an implementation of sleeping in a non-blocking way. Implementation might + * register the current fiber in some list of "which fiber wait until what + * moment", call Fiber.yield to pass control, and then in #close resume + * the fibers whose wait period has elapsed. + * + */ +static VALUE +rb_fiber_scheduler_interface_kernel_sleep(VALUE self) +{ +} + +/* + * Document-method: SchedulerInterface#address_resolve + * call-seq: address_resolve(hostname) -> array_of_strings or nil + * + * Invoked by any method that performs a non-reverse DNS lookup. The most + * notable method is Addrinfo.getaddrinfo, but there are many other. + * + * The method is expected to return an array of strings corresponding to ip + * addresses the +hostname+ is resolved to, or +nil+ if it can not be resolved. + * + * Fairly exhaustive list of all possible call-sites: + * + * - Addrinfo.getaddrinfo + * - Addrinfo.tcp + * - Addrinfo.udp + * - Addrinfo.ip + * - Addrinfo.new + * - Addrinfo.marshal_load + * - SOCKSSocket.new + * - TCPServer.new + * - TCPSocket.new + * - IPSocket.getaddress + * - TCPSocket.gethostbyname + * - UDPSocket#connect + * - UDPSocket#bind + * - UDPSocket#send + * - Socket.getaddrinfo + * - Socket.gethostbyname + * - Socket.pack_sockaddr_in + * - Socket.sockaddr_in + * - Socket.unpack_sockaddr_in + */ +static VALUE +rb_fiber_scheduler_interface_address_resolve(VALUE self) +{ +} + +/* + * Document-method: SchedulerInterface#timeout_after + * call-seq: timeout_after(duration, exception_class, *exception_arguments, &block) -> result of block + * + * Invoked by Timeout.timeout to execute the given +block+ within the given + * +duration+. It can also be invoked directly by the scheduler or user code. + * + * Attempt to limit the execution time of a given +block+ to the given + * +duration+ if possible. When a non-blocking operation causes the +block+'s + * execution time to exceed the specified +duration+, that non-blocking + * operation should be interrupted by raising the specified +exception_class+ + * constructed with the given +exception_arguments+. + * + * General execution timeouts are often considered risky. This implementation + * will only interrupt non-blocking operations. This is by design because it's + * expected that non-blocking operations can fail for a variety of + * unpredictable reasons, so applications should already be robust in handling + * these conditions and by implication timeouts. + * + * However, as a result of this design, if the +block+ does not invoke any + * non-blocking operations, it will be impossible to interrupt it. If you + * desire to provide predictable points for timeouts, consider adding + * +sleep(0)+. + * + * If the block is executed successfully, its result will be returned. + * + * The exception will typically be raised using Fiber#raise. + */ +static VALUE +rb_fiber_scheduler_interface_timeout_after(VALUE self) +{ +} + +/* + * Document-method: SchedulerInterface#block + * call-seq: block(blocker, timeout = nil) + * + * Invoked by methods like Thread.join, and by Mutex, to signify that current + * Fiber is blocked until further notice (e.g. #unblock) or until +timeout+ has + * elapsed. + * + * +blocker+ is what we are waiting on, informational only (for debugging and + * logging). There are no guarantee about its value. + * + * Expected to return boolean, specifying whether the blocking operation was + * successful or not. + */ +static VALUE +rb_fiber_scheduler_interface_block(VALUE self) +{ +} + +/* + * Document-method: SchedulerInterface#unblock + * call-seq: unblock(blocker, fiber) + * + * Invoked to wake up Fiber previously blocked with #block (for example, Mutex#lock + * calls #block and Mutex#unlock calls #unblock). The scheduler should use + * the +fiber+ parameter to understand which fiber is unblocked. + * + * +blocker+ is what was awaited for, but it is informational only (for debugging + * and logging), and it is not guaranteed to be the same value as the +blocker+ for + * #block. + * + */ +static VALUE +rb_fiber_scheduler_interface_unblock(VALUE self) +{ +} + +/* + * Document-method: SchedulerInterface#fiber + * call-seq: fiber(&block) + * + * Implementation of the Fiber.schedule. The method is expected to immediately + * run the given block of code in a separate non-blocking fiber, and to return that Fiber. + * + * Minimal suggested implementation is: + * + * def fiber(&block) + * fiber = Fiber.new(blocking: false, &block) + * fiber.resume + * fiber + * end + */ +static VALUE +rb_fiber_scheduler_interface_fiber(VALUE self) +{ +} +#endif + void Init_Cont(void) { @@ -2437,7 +3232,10 @@ Init_Cont(void) fiber_pool_initialize(&shared_fiber_pool, stack_size, FIBER_POOL_INITIAL_SIZE, vm_stack_size); - char * fiber_shared_fiber_pool_free_stacks = getenv("RUBY_SHARED_FIBER_POOL_FREE_STACKS"); + fiber_initialize_keywords[0] = rb_intern_const("blocking"); + fiber_initialize_keywords[1] = rb_intern_const("pool"); + + 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); } @@ -2446,17 +3244,47 @@ Init_Cont(void) 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_singleton_method(rb_cFiber, "current", rb_fiber_s_current, 0); 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, "resume", rb_fiber_m_resume, -1); - rb_define_method(rb_cFiber, "raise", rb_fiber_raise, -1); + rb_define_method(rb_cFiber, "raise", rb_fiber_m_raise, -1); + 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); + +#if 0 /* for RDoc */ + rb_cFiberScheduler = rb_define_class_under(rb_cFiber, "SchedulerInterface", rb_cObject); + rb_define_method(rb_cFiberScheduler, "close", rb_fiber_scheduler_interface_close, 0); + rb_define_method(rb_cFiberScheduler, "process_wait", rb_fiber_scheduler_interface_process_wait, 0); + rb_define_method(rb_cFiberScheduler, "io_wait", rb_fiber_scheduler_interface_io_wait, 0); + rb_define_method(rb_cFiberScheduler, "io_read", rb_fiber_scheduler_interface_io_read, 0); + rb_define_method(rb_cFiberScheduler, "io_write", rb_fiber_scheduler_interface_io_write, 0); + rb_define_method(rb_cFiberScheduler, "kernel_sleep", rb_fiber_scheduler_interface_kernel_sleep, 0); + rb_define_method(rb_cFiberScheduler, "address_resolve", rb_fiber_scheduler_interface_address_resolve, 0); + rb_define_method(rb_cFiberScheduler, "timeout_after", rb_fiber_scheduler_interface_timeout_after, 0); + rb_define_method(rb_cFiberScheduler, "block", rb_fiber_scheduler_interface_block, 0); + rb_define_method(rb_cFiberScheduler, "unblock", rb_fiber_scheduler_interface_unblock, 0); + rb_define_method(rb_cFiberScheduler, "fiber", rb_fiber_scheduler_interface_fiber, 0); +#endif #ifdef RB_EXPERIMENTAL_FIBER_POOL rb_cFiberPool = rb_define_class("Pool", rb_cFiber); 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 @@ -2472,12 +3300,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/ruby/coroutine/amd64/Context.S b/ruby/coroutine/amd64/Context.S index ac986b2aa..d50732adb 100644 --- a/ruby/coroutine/amd64/Context.S +++ b/ruby/coroutine/amd64/Context.S @@ -2,7 +2,7 @@ ## 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. All rights reserved. +## Copyright, 2018, by Samuel Williams. ## #define TOKEN_PASTE(x,y) x##y @@ -41,6 +41,6 @@ PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): # We pop the return address and jump to it ret -#if defined(__linux__) && defined(__ELF__) +#if (defined(__linux__) || defined(__FreeBSD__)) && defined(__ELF__) .section .note.GNU-stack,"",%progbits #endif diff --git a/ruby/coroutine/amd64/Context.h b/ruby/coroutine/amd64/Context.h index 8fe323c1a..f626a4722 100644 --- a/ruby/coroutine/amd64/Context.h +++ b/ruby/coroutine/amd64/Context.h @@ -1,13 +1,18 @@ +#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. All rights reserved. + * Copyright, 2018, by Samuel Williams. */ #pragma once #include +#include +#include #include #define COROUTINE __attribute__((noreturn)) void @@ -17,6 +22,7 @@ enum {COROUTINE_REGISTERS = 6}; struct coroutine_context { void **stack_pointer; + void *argument; }; typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self); @@ -50,3 +56,5 @@ static inline void coroutine_destroy(struct coroutine_context * context) { context->stack_pointer = NULL; } + +#endif /* COROUTINE_AMD64_CONTEXT_H */ diff --git a/ruby/coroutine/arm32/Context.S b/ruby/coroutine/arm32/Context.S index 4308e1d1d..1850c4c40 100644 --- a/ruby/coroutine/arm32/Context.S +++ b/ruby/coroutine/arm32/Context.S @@ -2,21 +2,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. All rights reserved. +## Copyright, 2018, by Samuel Williams. ## +#define TOKEN_PASTE(x,y) x##y +#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) + +.file "Context.S" .text +.globl PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) +.align 2 +.type PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer),%function +.syntax unified -.globl coroutine_transfer -coroutine_transfer: +PREFIXED_SYMBOL(SYMBOL_PREFIX,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/ruby/coroutine/arm32/Context.h b/ruby/coroutine/arm32/Context.h index e29fe1bb6..09410eb25 100644 --- a/ruby/coroutine/arm32/Context.h +++ b/ruby/coroutine/arm32/Context.h @@ -1,13 +1,18 @@ +#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. All rights reserved. + * Copyright, 2018, by Samuel Williams. */ #pragma once #include +#include +#include #include #define COROUTINE __attribute__((noreturn)) void @@ -18,6 +23,7 @@ enum {COROUTINE_REGISTERS = 8}; struct coroutine_context { void **stack_pointer; + void *argument; }; typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self); @@ -49,3 +55,5 @@ struct coroutine_context * coroutine_transfer(struct coroutine_context * current static inline void coroutine_destroy(struct coroutine_context * context) { } + +#endif /* COROUTINE_ARM32_CONTEXT_H */ diff --git a/ruby/coroutine/arm64/Context.S b/ruby/coroutine/arm64/Context.S index f6e5f0a6b..07d50d30d 100644 --- a/ruby/coroutine/arm64/Context.S +++ b/ruby/coroutine/arm64/Context.S @@ -2,18 +2,28 @@ ## 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. All rights reserved. +## Copyright, 2018, by Samuel Williams. ## +#define TOKEN_PASTE(x,y) x##y +#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) + +#if defined(__APPLE__) +#define x29 fp +#define x30 lr +.text +.p2align 2 +#else .text .align 2 +#endif -.global coroutine_transfer -coroutine_transfer: +.global PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) +PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): # Make space on the stack for caller registers sub sp, sp, 0xb0 - + # Save caller registers stp d8, d9, [sp, 0x00] stp d10, d11, [sp, 0x10] @@ -57,3 +67,7 @@ coroutine_transfer: # Jump to return address (in x4) ret x4 + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/ruby/coroutine/arm64/Context.h b/ruby/coroutine/arm64/Context.h index a1ae92114..dbc6ac94f 100644 --- a/ruby/coroutine/arm64/Context.h +++ b/ruby/coroutine/arm64/Context.h @@ -1,13 +1,18 @@ +#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. All rights reserved. + * Copyright, 2018, by Samuel Williams. */ #pragma once #include +#include +#include #include #define COROUTINE __attribute__((noreturn)) void @@ -17,6 +22,7 @@ enum {COROUTINE_REGISTERS = 0xb0 / 8}; struct coroutine_context { void **stack_pointer; + void *argument; }; typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self); @@ -48,3 +54,5 @@ struct coroutine_context * coroutine_transfer(struct coroutine_context * current static inline void coroutine_destroy(struct coroutine_context * context) { } + +#endif /* COROUTINE_ARM64_CONTEXT_H */ diff --git a/ruby/coroutine/copy/Context.c b/ruby/coroutine/copy/Context.c deleted file mode 100644 index a1b8a7120..000000000 --- a/ruby/coroutine/copy/Context.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * 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. All rights reserved. -*/ - -#include "Context.h" - -// http://gcc.gnu.org/onlinedocs/gcc/Alternate-Keywords.html -#ifndef __GNUC__ -#define __asm__ asm -#endif - -#if defined(__sparc) -__attribute__((noinline)) -// https://marc.info/?l=linux-sparc&m=131914569320660&w=2 -static void coroutine_flush_register_windows() { - __asm__ -#ifdef __GNUC__ - __volatile__ -#endif -#if defined(__sparcv9) || defined(__sparc_v9__) || defined(__arch64__) -#ifdef __GNUC__ - ("flushw" : : : "%o7") -#else - ("flushw") -#endif -#else - ("ta 0x03") -#endif - ; -} -#else -static void coroutine_flush_register_windows() {} -#endif - -int coroutine_save_stack(struct coroutine_context * context) { - void *stack_pointer = &stack_pointer; - - assert(context->stack); - assert(context->base); - - // At this point, you may need to ensure on architectures that use register windows, that all registers are flushed to the stack. - coroutine_flush_register_windows(); - - // Save stack to private area: - if (stack_pointer < context->base) { - size_t size = (char*)context->base - (char*)stack_pointer; - assert(size <= context->size); - - memcpy(context->stack, stack_pointer, size); - context->used = size; - } else { - size_t size = (char*)stack_pointer - (char*)context->base; - assert(size <= context->size); - - memcpy(context->stack, context->base, size); - context->used = size; - } - - // Save registers / restore point: - return _setjmp(context->state); -} - -__attribute__((noreturn, noinline)) -static void coroutine_restore_stack_padded(struct coroutine_context *context, void * buffer) { - void *stack_pointer = &stack_pointer; - - assert(context->base); - - // Restore stack from private area: - if (stack_pointer < context->base) { - void * bottom = (char*)context->base - context->used; - assert(bottom > stack_pointer); - - memcpy(bottom, context->stack, context->used); - } else { - void * top = (char*)context->base + context->used; - assert(top < stack_pointer); - - memcpy(context->base, context->stack, context->used); - } - - // Restore registers: - // The `| (int)buffer` is to force the compiler NOT to elide he buffer and `alloca`. - _longjmp(context->state, 1 | (int)buffer); -} - -static const size_t GAP = 128; - -// In order to swap between coroutines, we need to swap the stack and registers. -// `setjmp` and `longjmp` are able to swap registers, but what about swapping stacks? You can use `memcpy` to copy the current stack to a private area and `memcpy` to copy the private stack of the next coroutine to the main stack. -// But if the stack yop are copying in to the main stack is bigger than the currently executing stack, the `memcpy` will clobber the current stack frame (including the context argument). So we use `alloca` to push the current stack frame *beyond* the stack we are about to copy in. This ensures the current stack frame in `coroutine_restore_stack_padded` remains valid for calling `longjmp`. -__attribute__((noreturn)) -void coroutine_restore_stack(struct coroutine_context *context) { - void *stack_pointer = &stack_pointer; - void *buffer = NULL; - ssize_t offset = 0; - - // We must ensure that the next stack frame is BEYOND the stack we are restoring: - if (stack_pointer < context->base) { - offset = (char*)stack_pointer - ((char*)context->base - context->used) + GAP; - if (offset > 0) buffer = alloca(offset); - } else { - offset = ((char*)context->base + context->used) - (char*)stack_pointer + GAP; - if (offset > 0) buffer = alloca(offset); - } - - assert(context->used > 0); - - coroutine_restore_stack_padded(context, buffer); -} - -struct coroutine_context *coroutine_transfer(struct coroutine_context *current, struct coroutine_context *target) -{ - struct coroutine_context *previous = target->from; - - // In theory, either this condition holds true, or we should assign the base address to target: - assert(current->base == target->base); - // If you are trying to copy the coroutine to a different thread - // target->base = current->base - - target->from = current; - - assert(current != target); - - // It's possible to come here, even thought the current fiber has been terminated. We are never going to return so we don't bother saving the stack. - - if (current->stack) { - if (coroutine_save_stack(current) == 0) { - coroutine_restore_stack(target); - } - } else { - coroutine_restore_stack(target); - } - - target->from = previous; - - return target; -} diff --git a/ruby/coroutine/copy/Context.h b/ruby/coroutine/copy/Context.h deleted file mode 100644 index 1319f55d1..000000000 --- a/ruby/coroutine/copy/Context.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * This file is part of the "Coroutine" project and released under the MIT License. - * - * Created by Samuel Williams on 27/6/2019. - * Copyright, 2019, by Samuel Williams. All rights reserved. -*/ - -#pragma once - -#include -#include -#include -#include -#include -#include - -#define COROUTINE __attribute__((noreturn)) void - -#if INTPTR_MAX <= INT32_MAX -#define COROUTINE_LIMITED_ADDRESS_SPACE -#endif - -// This stack copying implementation which uses a private stack for each coroutine, including the main one. -#define COROUTINE_PRIVATE_STACK - -struct coroutine_context -{ - // Private stack: - void *stack; - size_t size, used; - - // The top (or bottom) of the currently executing stack: - void *base; - - jmp_buf state; - - struct coroutine_context *from; -}; - -typedef COROUTINE(*coroutine_start)(struct coroutine_context *from, struct coroutine_context *self); - -int coroutine_save_stack(struct coroutine_context * context); -COROUTINE coroutine_restore_stack(struct coroutine_context *context); - -// @param stack The private stack area memory allocation (pointer to lowest address). -// @param size The size of the private stack area. -// @param base A stack pointer to the base of the main stack. On x86 hardware, this is the upper extent of the region that will be copied to the private stack. -static inline void coroutine_initialize_main(struct coroutine_context *context, void *stack, size_t size, void *base) { - assert(stack); - assert(size >= 1024); - - context->stack = stack; - context->size = size; - context->used = 0; - - assert(base); - context->base = base; - - context->from = NULL; -} - -// @param start The start function to invoke. -static inline void coroutine_initialize( - struct coroutine_context *context, - coroutine_start start, - void *stack, - size_t size, - void *base -) { - assert(start); - - coroutine_initialize_main(context, stack, size, base); - - if (coroutine_save_stack(context)) { - start(context->from, context); - } -} - -struct coroutine_context *coroutine_transfer(struct coroutine_context *current, register struct coroutine_context *target); - -static inline void coroutine_destroy(struct coroutine_context *context) -{ - context->stack = NULL; - context->size = 0; - context->from = NULL; -} diff --git a/ruby/coroutine/emscripten/Context.c b/ruby/coroutine/emscripten/Context.c new file mode 100644 index 000000000..75c088daa --- /dev/null +++ b/ruby/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/ruby/coroutine/emscripten/Context.h b/ruby/coroutine/emscripten/Context.h new file mode 100644 index 000000000..361e24168 --- /dev/null +++ b/ruby/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 +#include +#include + +#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(¤t->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/ruby/coroutine/ppc64le/Context.S b/ruby/coroutine/ppc64le/Context.S index 1b39086f8..61be9efcf 100644 --- a/ruby/coroutine/ppc64le/Context.S +++ b/ruby/coroutine/ppc64le/Context.S @@ -1,9 +1,12 @@ +#define TOKEN_PASTE(x,y) x##y +#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) + .text .align 2 -.globl coroutine_transfer -.type coroutine_transfer, @function -coroutine_transfer: +.globl PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) +.type PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer), @function +PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): # Make space on the stack for caller registers addi 1,1,-152 diff --git a/ruby/coroutine/ppc64le/Context.h b/ruby/coroutine/ppc64le/Context.h index adf21b4fd..fbfaa2ee6 100644 --- a/ruby/coroutine/ppc64le/Context.h +++ b/ruby/coroutine/ppc64le/Context.h @@ -1,6 +1,11 @@ +#ifndef COROUTINE_PPC64LE_CONTEXT_H +#define COROUTINE_PPC64LE_CONTEXT_H 1 + #pragma once #include +#include +#include #include #define COROUTINE __attribute__((noreturn)) void @@ -14,6 +19,7 @@ enum { struct coroutine_context { void **stack_pointer; + void *argument; }; typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self); @@ -47,3 +53,5 @@ static inline void coroutine_destroy(struct coroutine_context * context) { context->stack_pointer = NULL; } + +#endif /* COROUTINE_PPC64LE_CONTEXT_H */ diff --git a/ruby/coroutine/pthread/Context.c b/ruby/coroutine/pthread/Context.c new file mode 100644 index 000000000..38774cda0 --- /dev/null +++ b/ruby/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 +#include +#include + +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", ¤t->shared->guard, is_locked(¤t->shared->guard)); + pthread_mutex_lock(¤t->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", ¤t->schedule, ¤t->shared->guard, is_locked(¤t->shared->guard)); + check("coroutine_transfer:pthread_cond_wait", + pthread_cond_wait(¤t->schedule, ¤t->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/ruby/coroutine/pthread/Context.h b/ruby/coroutine/pthread/Context.h new file mode 100644 index 000000000..6d551ee9d --- /dev/null +++ b/ruby/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 +#include +#include + +#define COROUTINE void + +#define COROUTINE_PTHREAD_CONTEXT + +#ifdef HAVE_STDINT_H +#include +#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/ruby/coroutine/riscv64/Context.S b/ruby/coroutine/riscv64/Context.S new file mode 100644 index 000000000..cc4e872f8 --- /dev/null +++ b/ruby/coroutine/riscv64/Context.S @@ -0,0 +1,87 @@ +#define TOKEN_PASTE(x,y) x##y +#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) + +.text +.align 2 + +.global PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) +PREFIXED_SYMBOL(SYMBOL_PREFIX,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/ruby/coroutine/riscv64/Context.h b/ruby/coroutine/riscv64/Context.h new file mode 100644 index 000000000..9ce1140e0 --- /dev/null +++ b/ruby/coroutine/riscv64/Context.h @@ -0,0 +1,46 @@ +#pragma once + +#include +#include +#include +#include + +#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*)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/ruby/coroutine/ucontext/Context.c b/ruby/coroutine/ucontext/Context.c index eec4ef395..5d728d554 100644 --- a/ruby/coroutine/ucontext/Context.c +++ b/ruby/coroutine/ucontext/Context.c @@ -2,7 +2,7 @@ * 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. All rights reserved. + * Copyright, 2019, by Samuel Williams. */ /* According to Solaris' ucontext.h, makecontext, etc. are removed in SUSv4. @@ -11,11 +11,12 @@ #if defined(__sun) && !defined(__EXTENSIONS__) #define __EXTENSIONS__ #endif + #include "Context.h" void coroutine_trampoline(void * _start, void * _context) { - coroutine_start start = _start; + coroutine_start start = (coroutine_start)_start; struct coroutine_context * context = _context; start(context->from, context); diff --git a/ruby/coroutine/ucontext/Context.h b/ruby/coroutine/ucontext/Context.h index 6cf16c860..d338d8de6 100644 --- a/ruby/coroutine/ucontext/Context.h +++ b/ruby/coroutine/ucontext/Context.h @@ -1,8 +1,11 @@ +#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. All rights reserved. + * Copyright, 2019, by Samuel Williams. */ #pragma once @@ -13,14 +16,18 @@ #define COROUTINE __attribute__((noreturn)) void +#ifdef HAVE_STDINT_H +#include #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); @@ -68,3 +75,5 @@ static inline void coroutine_destroy(struct coroutine_context * context) context->state.uc_stack.ss_size = 0; context->from = NULL; } + +#endif /* COROUTINE_UCONTEXT_CONTEXT_H */ diff --git a/ruby/coroutine/universal/Context.S b/ruby/coroutine/universal/Context.S new file mode 100644 index 000000000..0fd8c01e7 --- /dev/null +++ b/ruby/coroutine/universal/Context.S @@ -0,0 +1,12 @@ +#if 0 +#elif defined __x86_64__ +# include "coroutine/amd64/Context.S" +#elif defined __i386__ +# include "coroutine/x86/Context.S" +#elif defined __ppc64__ +# include "coroutine/ppc64le/Context.S" +#elif defined __arm64__ +# include "coroutine/arm64/Context.S" +#else +# error "Unsupported CPU" +#endif diff --git a/ruby/coroutine/universal/Context.h b/ruby/coroutine/universal/Context.h new file mode 100644 index 000000000..9a2ef425d --- /dev/null +++ b/ruby/coroutine/universal/Context.h @@ -0,0 +1,17 @@ +#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 __ppc64__ +# 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/ruby/coroutine/win32/Context.asm b/ruby/coroutine/win32/Context.asm index 2647ea4bc..f8f431239 100644 --- a/ruby/coroutine/win32/Context.asm +++ b/ruby/coroutine/win32/Context.asm @@ -2,7 +2,7 @@ ;; 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. All rights reserved. +;; Copyright, 2018, by Samuel Williams. ;; .386 diff --git a/ruby/coroutine/win32/Context.h b/ruby/coroutine/win32/Context.h index 299515ed9..902fd1246 100644 --- a/ruby/coroutine/win32/Context.h +++ b/ruby/coroutine/win32/Context.h @@ -1,13 +1,18 @@ +#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. All rights reserved. + * Copyright, 2018, by Samuel Williams. */ #pragma once #include +#include +#include #include #define COROUTINE __declspec(noreturn) void __fastcall @@ -19,6 +24,7 @@ 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); @@ -55,3 +61,5 @@ struct coroutine_context * __fastcall coroutine_transfer(struct coroutine_contex static inline void coroutine_destroy(struct coroutine_context * context) { } + +#endif /* COROUTINE_WIN32_CONTEXT_H */ diff --git a/ruby/coroutine/win64/Context.S b/ruby/coroutine/win64/Context.S index 4b16e0ce8..e0ee38e00 100644 --- a/ruby/coroutine/win64/Context.S +++ b/ruby/coroutine/win64/Context.S @@ -2,7 +2,7 @@ ## 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. All rights reserved. +## Copyright, 2018, by Samuel Williams. ## .text diff --git a/ruby/coroutine/win64/Context.asm b/ruby/coroutine/win64/Context.asm index 59673ffa3..8c4dea1c9 100644 --- a/ruby/coroutine/win64/Context.asm +++ b/ruby/coroutine/win64/Context.asm @@ -2,7 +2,7 @@ ;; 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. All rights reserved. +;; Copyright, 2018, by Samuel Williams. ;; .code diff --git a/ruby/coroutine/win64/Context.h b/ruby/coroutine/win64/Context.h index 6bf2dc5b3..aaa4caeaf 100644 --- a/ruby/coroutine/win64/Context.h +++ b/ruby/coroutine/win64/Context.h @@ -1,13 +1,18 @@ +#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. All rights reserved. + * Copyright, 2018, by Samuel Williams. */ #pragma once #include +#include +#include #include #define COROUTINE __declspec(noreturn) void @@ -20,6 +25,7 @@ enum { struct coroutine_context { void **stack_pointer; + void *argument; }; typedef void(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self); @@ -65,3 +71,5 @@ struct coroutine_context * coroutine_transfer(struct coroutine_context * current static inline void coroutine_destroy(struct coroutine_context * context) { } + +#endif /* COROUTINE_WIN64_CONTEXT_H */ diff --git a/ruby/coroutine/x86/Context.S b/ruby/coroutine/x86/Context.S index 001b699a3..f06a41708 100644 --- a/ruby/coroutine/x86/Context.S +++ b/ruby/coroutine/x86/Context.S @@ -2,7 +2,7 @@ ## 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. All rights reserved. +## Copyright, 2018, by Samuel Williams. ## #define TOKEN_PASTE(x,y) x##y @@ -37,6 +37,6 @@ PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): # Jump to the address on the stack ret -#if defined(__linux__) && defined(__ELF__) +#if (defined(__linux__) || defined(__FreeBSD__)) && defined(__ELF__) .section .note.GNU-stack,"",%progbits #endif diff --git a/ruby/coroutine/x86/Context.h b/ruby/coroutine/x86/Context.h index 6d3a56eaa..d98eaf648 100644 --- a/ruby/coroutine/x86/Context.h +++ b/ruby/coroutine/x86/Context.h @@ -1,13 +1,18 @@ +#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. All rights reserved. + * Copyright, 2018, by Samuel Williams. */ #pragma once #include +#include +#include #include #define COROUTINE __attribute__((noreturn, fastcall)) void @@ -18,6 +23,7 @@ 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)); @@ -51,3 +57,5 @@ static inline void coroutine_destroy(struct coroutine_context * context) { context->stack_pointer = NULL; } + +#endif /* COROUTINE_X86_CONTEXT_H */ diff --git a/ruby/coverage/README b/ruby/coverage/README index 78a01826a..a4c3dfcb0 100644 --- a/ruby/coverage/README +++ b/ruby/coverage/README @@ -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/ruby/cygwin/GNUmakefile.in b/ruby/cygwin/GNUmakefile.in index 192cf43b3..b13c3d9c8 100644 --- a/ruby/cygwin/GNUmakefile.in +++ b/ruby/cygwin/GNUmakefile.in @@ -1,8 +1,13 @@ +gnumake = yes + include Makefile ENABLE_SHARED=@ENABLE_SHARED@ DLLWRAP = @DLLWRAP@ --target=@target_os@ --driver-name="$(CC)" -WINDRES = @WINDRES@ --preprocessor="$(CPP) -xc" -DRC_INVOKED +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) @@ -11,6 +16,9 @@ else DLL_BASE_NAME := $(RUBY_SO_NAME) DLLWRAP += -mno-cygwin VPATH := $(VPATH):$(srcdir)/win32 + ifneq ($(filter -flto%,$(LDFLAGS)),) + miniruby$(EXEEXT): XLDFLAGS += -Wno-maybe-uninitialized + endif endif ifneq ($(ENABLE_SHARED),yes) @@ -28,9 +36,7 @@ endif WPROGRAM = $(RUBYW_INSTALL_NAME)$(EXEEXT) --include uncommon.mk - -include $(srcdir)/defs/gmake.mk +include $(srcdir)/template/GNUmakefile.in SOLIBS := $(DLL_BASE_NAME).res.@OBJEXT@ $(SOLIBS) override EXTOBJS += $(if $(filter-out $(RUBYW_INSTALL_NAME),$(@:$(EXEEXT)=)),$(RUBY_INSTALL_NAME),$(@:$(EXEEXT)=)).res.$(OBJEXT) @@ -94,13 +100,5 @@ $(RUBYDEF): $(LIBRUBY_A) $(PREP) $(RBCONFIG) 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) $(RCFILES) diff --git a/ruby/darray.h b/ruby/darray.h new file mode 100644 index 000000000..ed6085fbc --- /dev/null +++ b/ruby/darray.h @@ -0,0 +1,198 @@ +#ifndef RUBY_DARRAY_H +#define RUBY_DARRAY_H + +#include +#include +#include + +// 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; +// if (!rb_darray_append(&char_array, 'e')) abort(); +// 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, int32_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, int32_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, int32_t idx); +// +#define rb_darray_ref(ary, idx) (&((ary)->data[(idx)])) + +// Copy a new element into the array. Return 1 on success and 0 on failure. +// ptr_to_ary is evaluated multiple times. +// +// bool rb_darray_append(rb_darray(T) *ptr_to_ary, T element); +// +#define rb_darray_append(ptr_to_ary, element) ( \ + rb_darray_ensure_space((ptr_to_ary), sizeof(**(ptr_to_ary)), sizeof((*(ptr_to_ary))->data[0])) ? ( \ + rb_darray_set(*(ptr_to_ary), \ + (*(ptr_to_ary))->meta.size, \ + (element)), \ + ++((*(ptr_to_ary))->meta.size), \ + 1 \ + ) : 0) + +// Last element of the array +// +#define rb_darray_back(ary) ((ary)->data[(ary)->meta.size - 1]) + +// Remove the last element of the array. +// +#define rb_darray_pop_back(ary) ((ary)->meta.size--) + +// Remove element at idx and replace it by the last element +#define rb_darray_remove_unordered(ary, idx) do { \ + rb_darray_set(ary, idx, rb_darray_back(ary)); \ + rb_darray_pop_back(ary); \ +} while (0); + +// Iterate over items of the array in a for loop +// +#define rb_darray_foreach(ary, idx_name, elem_ptr_var) \ + for (int idx_name = 0; idx_name < rb_darray_size(ary) && ((elem_ptr_var) = rb_darray_ref(ary, idx_name)); ++idx_name) + +// Iterate over valid indicies in the array in a for loop +// +#define rb_darray_for(ary, idx_name) \ + for (int 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. +// +// bool rb_darray_make(rb_darray(T) *ptr_to_ary, int32_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])) + +// Set the size of the array to zero without freeing the backing memory. +// Allows reusing the same array. +// +#define rb_darray_clear(ary) (ary->meta.size = 0) + +typedef struct rb_darray_meta { + int32_t size; + int32_t capa; +} rb_darray_meta_t; + +// Get the size of the dynamic array. +// +static inline int32_t +rb_darray_size(const void *ary) +{ + const rb_darray_meta_t *meta = ary; + return meta ? meta->size : 0; +} + +// Get the capacity of the dynamic array. +// +static inline int32_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) +{ + free(ary); +} + +// Internal function. Calculate buffer size on malloc heap. +static inline size_t +rb_darray_buffer_size(int32_t capacity, size_t header_size, size_t element_size) +{ + if (capacity == 0) return 0; + return header_size + (size_t)capacity * element_size; +} + +// Internal function +// Ensure there is space for one more element. Return 1 on success and 0 on failure. +// Note: header_size can be bigger than sizeof(rb_darray_meta_t) when T is __int128_t, for example. +static inline int +rb_darray_ensure_space(void *ptr_to_ary, size_t header_size, size_t element_size) +{ + rb_darray_meta_t **ptr_to_ptr_to_meta = ptr_to_ary; + rb_darray_meta_t *meta = *ptr_to_ptr_to_meta; + int32_t current_capa = rb_darray_capa(meta); + if (rb_darray_size(meta) < current_capa) return 1; + + int32_t new_capa; + // Calculate new capacity + if (current_capa == 0) { + new_capa = 1; + } + else { + int64_t doubled = 2 * (int64_t)current_capa; + new_capa = (int32_t)doubled; + if (new_capa != doubled) return 0; + } + + // Calculate new buffer size + size_t current_buffer_size = rb_darray_buffer_size(current_capa, header_size, element_size); + size_t new_buffer_size = rb_darray_buffer_size(new_capa, header_size, element_size); + if (new_buffer_size <= current_buffer_size) return 0; + + rb_darray_meta_t *doubled_ary = realloc(meta, new_buffer_size); + if (!doubled_ary) return 0; + + if (meta == NULL) { + // First allocation. Initialize size. On subsequence allocations + // realloc takes care of carrying over the size. + doubled_ary->size = 0; + } + + doubled_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, &doubled_ary, sizeof(doubled_ary)); + return 1; +} + +static inline int +rb_darray_make_impl(void *ptr_to_ary, int32_t array_size, size_t header_size, size_t element_size) +{ + rb_darray_meta_t **ptr_to_ptr_to_meta = ptr_to_ary; + if (array_size < 0) return 0; + if (array_size == 0) { + *ptr_to_ptr_to_meta = NULL; + return 1; + } + + size_t buffer_size = rb_darray_buffer_size(array_size, header_size, element_size); + rb_darray_meta_t *meta = calloc(buffer_size, 1); + if (!meta) return 0; + + 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)); + return 1; +} + +#endif /* RUBY_DARRAY_H */ diff --git a/ruby/debug.c b/ruby/debug.c index a54be2715..a5e6ce475 100644 --- a/ruby/debug.c +++ b/ruby/debug.c @@ -9,15 +9,33 @@ **********************************************************************/ -#include "ruby/ruby.h" +#include "ruby/internal/config.h" + +#include + +#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 "vm_core.h" #include "symbol.h" -#include "id.h" +#include "vm_core.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 { @@ -28,13 +46,21 @@ 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_robject_consts robject_consts; enum ruby_rmodule_flags rmodule_flags; enum ruby_rstring_flags rstring_flags; +#if !USE_RVARGC + enum ruby_rstring_consts rstring_consts; +#endif enum ruby_rarray_flags rarray_flags; + enum ruby_rarray_consts rarray_consts; enum { RUBY_FMODE_READABLE = FMODE_READABLE, RUBY_FMODE_WRITABLE = FMODE_WRITABLE, @@ -222,8 +248,267 @@ set_debug_option(const char *str, int len, void *arg) } } +#ifdef USE_RUBY_DEBUG_LOG +STATIC_ASSERT(USE_RUBY_DEBUG_LOG, USE_RUBY_DEBUG_LOG ? RUBY_DEVEL : 1); +#endif + +#if RUBY_DEVEL +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 RUBY_DEVEL + +// 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 0x0010 + +enum ruby_debug_log_mode ruby_debug_log_mode; + +static struct { + char *mem; + unsigned int cnt; + char filters[MAX_DEBUG_LOG_FILTER][MAX_DEBUG_LOG_FILTER]; + unsigned int filters_num; + rb_nativethread_lock_t lock; + 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 void +setup_debug_log(void) +{ + // check RUBY_DEBUG_LOG + const char *log_config = getenv("RUBY_DEBUG_LOG"); + if (log_config) { + fprintf(stderr, "RUBY_DEBUG_LOG=%s\n", log_config); + + 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; + if ((debug_log.output = fopen(log_config, "w")) == NULL) { + fprintf(stderr, "can not open %s for RUBY_DEBUG_LOG\n", log_config); + exit(1); + } + setvbuf(debug_log.output, NULL, _IONBF, 0); + } + + rb_nativethread_lock_initialize(&debug_log.lock); + } + + // check RUBY_DEBUG_LOG_FILTER + 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) { + fprintf(stderr, "too long: %s (max:%d)\n", filter_config, MAX_DEBUG_LOG_FILTER); + exit(1); + } + strncpy(debug_log.filters[i], filter_config, MAX_DEBUG_LOG_FILTER - 1); + i++; + break; + } + else { + size_t n = p - filter_config; + if (n >= MAX_DEBUG_LOG_FILTER) { + fprintf(stderr, "too long: %s (max:%d)\n", filter_config, MAX_DEBUG_LOG_FILTER); + exit(1); + } + strncpy(debug_log.filters[i], filter_config, n); + filter_config = p+1; + } + } + debug_log.filters_num = i; + for (i=0; i 0) { + for (unsigned int i = 0; iractor.cnt); + if (r < 0) rb_bug("ruby_debug_log returns %d\n", r); + len += r; + } + } + + // thread information + if (!rb_thread_alone()) { + const rb_thread_t *th = GET_THREAD(); + if (r && len < MAX_DEBUG_LOG_MESSAGE_LEN) { + r = snprintf(buff + len, MAX_DEBUG_LOG_MESSAGE_LEN - len, "\tth:%p", (void *)th); + if (r < 0) rb_bug("ruby_debug_log returns %d\n", 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 #include +#include "ruby/thread_native.h" #if USE_DEBUG_COUNTER + static const char *const debug_counter_names[] = { "" #define RB_DEBUG_COUNTER(name) #name, @@ -23,8 +25,28 @@ static const char *const debug_counter_names[] = { MJIT_SYMBOL_EXPORT_BEGIN size_t rb_debug_counter[numberof(debug_counter_names)]; +void rb_debug_counter_add_atomic(enum rb_debug_counter_type type, int add); MJIT_SYMBOL_EXPORT_END +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); +} + int debug_counter_disable_show_at_exit = 0; // note that this operation is not atomic. @@ -92,7 +114,8 @@ rb_debug_counter_show_results(const char *msg) VALUE rb_debug_counter_show(RB_UNUSED_VAR(VALUE klass)) { - rb_debug_counter_show_results("method call"); + rb_debug_counter_show_results("show_debug_counters"); + ruby_debug_counter_show_at_exit(FALSE); return Qnil; } @@ -111,7 +134,9 @@ debug_counter_show_results_at_exit(void) rb_debug_counter_show_results("normal exit."); } } + #else + void rb_debug_counter_show_results(const char *msg) { diff --git a/ruby/debug_counter.h b/ruby/debug_counter.h index 066533d1d..3f0dec948 100644 --- a/ruby/debug_counter.h +++ b/ruby/debug_counter.h @@ -14,40 +14,67 @@ #ifdef RB_DEBUG_COUNTER -/* - * method cache (mc) counts. - * - * * mc_inline_hit/miss: inline mc hit/miss counts (VM send insn) - * * mc_global_hit/miss: global method cache hit/miss counts - * two types: (1) inline cache miss (VM send insn) - * (2) called from C (rb_funcall). - * * mc_global_state_miss: inline mc miss by global_state miss. - * * mc_class_serial_miss: ... by mc_class_serial_miss - * * mc_cme_complement: callable_method_entry complement counts. - * * mc_cme_complement_hit: callable_method_entry cache hit counts. - * * mc_search_super: search_method() call counts. - * * mc_miss_by_nome: inline mc miss by no ment. - * * mc_miss_by_distinct: ... by distinct ment. - * * mc_miss_by_refine: ... by ment being refined. - * * mc_miss_by_visi: ... by visibility change. - * * mc_miss_spurious: spurious inline mc misshit. - * * mc_miss_reuse_call: count of reuse of cc->call. - */ -RB_DEBUG_COUNTER(mc_inline_hit) -RB_DEBUG_COUNTER(mc_inline_miss) -RB_DEBUG_COUNTER(mc_global_hit) -RB_DEBUG_COUNTER(mc_global_miss) -RB_DEBUG_COUNTER(mc_global_state_miss) -RB_DEBUG_COUNTER(mc_class_serial_miss) -RB_DEBUG_COUNTER(mc_cme_complement) -RB_DEBUG_COUNTER(mc_cme_complement_hit) -RB_DEBUG_COUNTER(mc_search_super) -RB_DEBUG_COUNTER(mc_miss_by_nome) -RB_DEBUG_COUNTER(mc_miss_by_distinct) -RB_DEBUG_COUNTER(mc_miss_by_refine) -RB_DEBUG_COUNTER(mc_miss_by_visi) -RB_DEBUG_COUNTER(mc_miss_spurious) -RB_DEBUG_COUNTER(mc_miss_reuse_call) +// 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 = 0) +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 @@ -61,6 +88,7 @@ RB_DEBUG_COUNTER(ccf_iseq_opt) /* has_opt == TRUE (has optional parameters), but 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) @@ -69,6 +97,8 @@ 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) /* @@ -117,7 +147,7 @@ RB_DEBUG_COUNTER(ivar_set_ic_hit) RB_DEBUG_COUNTER(ivar_set_ic_miss) RB_DEBUG_COUNTER(ivar_set_ic_miss_serial) RB_DEBUG_COUNTER(ivar_set_ic_miss_unset) -RB_DEBUG_COUNTER(ivar_set_ic_miss_oorange) +RB_DEBUG_COUNTER(ivar_set_ic_miss_iv_hit) RB_DEBUG_COUNTER(ivar_set_ic_miss_noobject) RB_DEBUG_COUNTER(ivar_get_base) RB_DEBUG_COUNTER(ivar_set_base) @@ -155,6 +185,12 @@ 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_mark_continue) +RB_DEBUG_COUNTER(gc_enter_sweep_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) @@ -164,7 +200,7 @@ RB_DEBUG_COUNTER(gc_isptr_maybe) * * * obj_newobj: newobj counts * * obj_newobj_slowpath: newobj with slowpath counts - * * obj_newobj_wb_unprotected: newobj for wb_unprotecte. + * * obj_newobj_wb_unprotected: newobj for wb_unprotected. * * obj_free: obj_free() counts * * obj_promote: promoted counts (oldgen) * * obj_wb_unprotect: wb unprotect counts @@ -282,6 +318,9 @@ RB_DEBUG_COUNTER(obj_imemo_throw_data) RB_DEBUG_COUNTER(obj_imemo_ifunc) RB_DEBUG_COUNTER(obj_imemo_memo) RB_DEBUG_COUNTER(obj_imemo_parser_strterm) +RB_DEBUG_COUNTER(obj_imemo_callinfo) +RB_DEBUG_COUNTER(obj_imemo_callcache) +RB_DEBUG_COUNTER(obj_imemo_constcache) /* ar_table */ RB_DEBUG_COUNTER(artable_hint_hit) @@ -301,14 +340,24 @@ RB_DEBUG_COUNTER(theap_alloc) RB_DEBUG_COUNTER(theap_alloc_fail) RB_DEBUG_COUNTER(theap_evacuate) +// 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) + /* mjit_exec() counts */ RB_DEBUG_COUNTER(mjit_exec) RB_DEBUG_COUNTER(mjit_exec_not_added) -RB_DEBUG_COUNTER(mjit_exec_not_added_add_iseq) RB_DEBUG_COUNTER(mjit_exec_not_ready) RB_DEBUG_COUNTER(mjit_exec_not_compiled) RB_DEBUG_COUNTER(mjit_exec_call_func) +/* MJIT enqueue / unload */ +RB_DEBUG_COUNTER(mjit_add_iseq_to_process) +RB_DEBUG_COUNTER(mjit_unload_units) + /* MJIT <-> VM frame push counts */ RB_DEBUG_COUNTER(mjit_frame_VM2VM) RB_DEBUG_COUNTER(mjit_frame_VM2JT) @@ -318,9 +367,11 @@ RB_DEBUG_COUNTER(mjit_frame_JT2VM) /* MJIT cancel counters */ RB_DEBUG_COUNTER(mjit_cancel) RB_DEBUG_COUNTER(mjit_cancel_ivar_inline) +RB_DEBUG_COUNTER(mjit_cancel_exivar_inline) RB_DEBUG_COUNTER(mjit_cancel_send_inline) RB_DEBUG_COUNTER(mjit_cancel_opt_insn) /* CALL_SIMPLE_METHOD */ RB_DEBUG_COUNTER(mjit_cancel_invalidate_all) +RB_DEBUG_COUNTER(mjit_cancel_leave) /* rb_mjit_unit_list length */ RB_DEBUG_COUNTER(mjit_length_unit_queue) @@ -341,6 +392,10 @@ RB_DEBUG_COUNTER(load_path_is_not_realpath) #ifndef RUBY_DEBUG_COUNTER_H #define RUBY_DEBUG_COUNTER_H 1 +#include "ruby/internal/config.h" +#include /* 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 @@ -354,27 +409,51 @@ enum rb_debug_counter_type { #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) { - rb_debug_counter[(int)type] += add; + 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_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_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); diff --git a/ruby/defs/gmake.mk b/ruby/defs/gmake.mk index 226e1066a..dd7da5f77 100644 --- a/ruby/defs/gmake.mk +++ b/ruby/defs/gmake.mk @@ -1,9 +1,20 @@ # -*- mode: makefile-gmake; indent-tabs-mode: t -*- -gnumake = yes +reconfig config.status: export MAKE:=$(MAKE) 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))) + +ifeq ($(GITHUB_ACTIONS),true) +override ACTIONS_GROUP = @echo "\#\#[group]$(@:yes-=)" +override ACTIONS_ENDGROUP = @echo "\#\#[endgroup]" +endif + +ifneq ($(filter %darwin%,$(arch)),) +INSTRUBY_ENV += SDKROOT=/ +endif +INSTRUBY_ARGS += --gnumake CHECK_TARGETS := great exam love check test check% test% btest% # expand test targets, and those dependents @@ -67,7 +78,7 @@ endif ORDERED_TEST_TARGETS := $(filter $(TEST_TARGETS), \ btest-ruby test-knownbug test-basic \ test-testframework test-tool test-ruby test-all \ - test-spec test-bundler-prepare test-bundler \ + test-spec test-bundler-prepare test-bundler test-bundler-parallel \ ) prev_test := $(if $(filter test-spec,$(ORDERED_TEST_TARGETS)),test-spec-precheck) $(foreach test,$(ORDERED_TEST_TARGETS), \ @@ -90,15 +101,21 @@ 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 $(LDFLAGS) $(XLDFLAGS) $(LIBS) -omake_des_table $(srcdir)/missing/crypt.c + $(CC) $(INCFLAGS) $(CPPFLAGS) -DDUMP $(EXE_LDFLAGS) $(XLDFLAGS) $(LIBS) -omake_des_table $(srcdir)/missing/crypt.c @[ -x ./make_des_table ] @$(ECHO) generating $@ $(Q) $(MAKEDIRS) $(@D) @@ -107,6 +124,8 @@ else $(Q) $(RMALL) make_des_table* endif +config.status: $(wildcard config.cache) + STUBPROGRAM = rubystub$(EXEEXT) IGNOREDPATTERNS = %~ .% %.orig %.rej \#%\# SCRIPTBINDIR := $(if $(EXEEXT),,exec/) @@ -125,7 +144,7 @@ $(STUBPROGRAM): rubystub.$(OBJEXT) $(LIBRUBY) $(MAINOBJ) $(OBJS) $(EXTOBJS) $(SE rubystub$(EXEEXT): @rm -f $@ $(ECHO) linking $@ - $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) rubystub.$(OBJEXT) $(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@ + $(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) rubystub.$(OBJEXT) $(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@ $(Q) $(POSTLINK) $(if $(STRIP),$(Q) $(STRIP) $@) @@ -214,6 +233,7 @@ define pull-github $(eval GITHUB_MERGE_BASE := $(shell git -C "$(srcdir)" log -1 --format=format:%H)) $(eval GITHUB_MERGE_BRANCH := $(shell git -C "$(srcdir)" symbolic-ref --short HEAD)) $(eval GITHUB_MERGE_WORKTREE := $(shell mktemp -d "$(srcdir)/gh-$(1)-XXXXXX")) + git -C "$(srcdir)" worktree prune git -C "$(srcdir)" worktree add $(notdir $(GITHUB_MERGE_WORKTREE)) "gh-$(1)" git -C "$(GITHUB_MERGE_WORKTREE)" rebase $(GITHUB_MERGE_BRANCH) $(eval COMMIT_GPG_SIGN := $(COMMIT_GPG_SIGN)) @@ -241,16 +261,43 @@ HELP_EXTRA_TASKS = \ " update-github: merge master branch and push it to Pull Request [PR=1234]" \ "" -ifneq ($(filter refresh-gems,$(MAKECMDGOALS)),) -extract-gems: update-gems +extract-gems: $(HAVE_BASERUBY:yes=update-gems) + +bundled-gems := $(shell sed '/^[ ]*\#/d;/^[ ]*$$/d;s/[ ][ ]*/-/;s/[ ].*//' $(srcdir)/gems/bundled_gems) + +update-gems: | $(patsubst %,gems/%.gem,$(bundled-gems)) + +test-bundler-precheck: | $(srcdir)/.bundle/cache + +$(srcdir)/.bundle/cache: + $(MAKEDIRS) $(@D) $(CACHE_DIR) + $(LN_S) ../.downloaded-cache $@ + +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 %,.bundle/gems/%,$(bundled-gems)) + +.bundle/gems/%: gems/%.gem | .bundle/gems + $(ECHO) Extracting bundle gem $*... + $(Q) $(BASERUBY) -C "$(srcdir)" \ + -Itool -rgem-unpack \ + -e 'Gem.unpack("gems/$(@F).gem", ".bundle/gems")' + +$(srcdir)/.bundle/gems: + $(MAKEDIRS) $@ + +ifneq ($(filter update-bundled_gems refresh-gems,$(MAKECMDGOALS)),) update-gems: update-bundled_gems endif -ifneq ($(filter extract-gems,$(MAKECMDGOALS)),) -extract-gems: $(filter update-gems update-bundled_gems,$(MAKECMDGOALS)) -endif -ifneq ($(filter update-gems,$(MAKECMDGOALS)),) -update-gems: $(filter update-bundled_gems,$(MAKECMDGOALS)) -endif ifeq ($(filter 0 1,$(words $(arch_flags))),) $(foreach x,$(patsubst -arch=%,%,$(arch_flags)), \ @@ -291,8 +338,13 @@ $(UNICODE_SRC_DATA_DIR)/.unicode-tables.time: \ $(UNICODE_FILES) $(UNICODE_PROPERTY_FILES) endif +ifeq ($(wildcard $(srcdir)/revision.h),) +REVISION_IN_HEADER := none +REVISION_LATEST := update +else REVISION_IN_HEADER := $(shell sed -n 's/^\#define RUBY_FULL_REVISION "\(.*\)"/\1/p' $(srcdir)/revision.h 2>/dev/null) REVISION_LATEST := $(shell $(CHDIR) $(srcdir) && git log -1 --format=%H 2>/dev/null) +endif ifneq ($(REVISION_IN_HEADER),$(REVISION_LATEST)) # GNU make treat the target as unmodified when its dependents get # updated but it is not updated, while others may not. @@ -306,19 +358,25 @@ 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/%,%,$@) + $(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) $@ + $(Q)$(exec) $(XRUBY) -C $(srcdir) -Ispec/bundler .bundle/bin/rspec --require spec_helper $(RSPECOPTS) $@ -spec/%: programs exts PHONY - +$(RUNRUBY) -r./$(arch)-fake $(srcdir)/spec/mspec/bin/mspec-run -B $(srcdir)/spec/default.mspec $(SPECOPTS) $(patsubst %,$(srcdir)/%,$@) +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)/$@ $(OPTS) + $(srcdir)/$@ $(BENCH_OPTS) $(OPTS) clean-srcs-ext:: $(Q)$(RM) $(patsubst $(srcdir)/%,%,$(EXT_SRCS)) @@ -328,7 +386,7 @@ clean-srcs-extra:: ifneq ($(filter $(VCS),git),) update-src:: - @$(BASERUBY) $(srcdir)/tool/lib/colorize.rb pass "Latest commit hash = $(shell $(filter-out svn,$(VCS)) -C $(srcdir) rev-parse --short=10 HEAD)" + @$(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. @@ -337,7 +395,7 @@ update-deps: $(eval deps_dir := $(shell mktemp -d)/$(update_deps)) $(eval GIT_DIR := $(shell git -C $(srcdir) rev-parse --absolute-git-dir)) git --git-dir=$(GIT_DIR) worktree add $(deps_dir) - cp $(srcdir)/tool/config.guess $(srcdir)/tool/config.sub $(deps_dir)/tool + 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' @@ -348,3 +406,23 @@ update-deps: $(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) + +# 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 $(srcdir)/$(RUBYSPEC_CAPIEXT)/rubyspec.h $(RUBY_H_INCLUDES) $(LIBRUBY) + $(ECHO) building $@ + $(Q) $(MAKEDIRS) $(@D) + $(Q) $(DLDSHARED) $(XDLDFLAGS) $(XLDFLAGS) $(LDFLAGS) $(INCFLAGS) $(CPPFLAGS) $(OUTFLAG)$@ $< $(LIBRUBYARG) + $(Q) $(RMALL) $@.* + +rubyspec-capiext: $(patsubst %.c,$(RUBYSPEC_CAPIEXT)/%.$(DLEXT),$(notdir $(wildcard $(srcdir)/$(RUBYSPEC_CAPIEXT)/*.c))) + @ $(NULLCMD) + +ifeq ($(ENABLE_SHARED),yes) +exts: rubyspec-capiext +endif + +spec/%/ spec/%_spec.rb: programs exts 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)) diff --git a/ruby/defs/id.def b/ruby/defs/id.def index fc7a04ffb..8df6cf12e 100644 --- a/ruby/defs/id.def +++ b/ruby/defs/id.def @@ -25,6 +25,7 @@ firstline, predefined = __LINE__+1, %[\ send __send__ __attached__ + __recursive_key__ initialize initialize_copy initialize_clone @@ -86,6 +87,7 @@ firstline, predefined = __LINE__+1, %[\ core#hash_merge_ptr core#hash_merge_kwd core#raise + core#sprintf - debug#created_info @@ -138,6 +140,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 = [] @@ -153,16 +170,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 diff --git a/ruby/dir.c b/ruby/dir.c index d773ba018..184dbf007 100644 --- a/ruby/dir.c +++ b/ruby/dir.c @@ -11,12 +11,10 @@ **********************************************************************/ -#include "ruby/encoding.h" -#include "ruby/thread.h" -#include "internal.h" -#include "id.h" -#include "encindex.h" +#include "ruby/internal/config.h" +#include +#include #include #include @@ -36,12 +34,10 @@ # define USE_OPENDIR_AT 0 # endif #endif + #if USE_OPENDIR_AT # include #endif -#ifndef AT_FDCWD -# define AT_FDCWD -1 -#endif #undef HAVE_DIRENT_NAMLEN #if defined HAVE_DIRENT_H && !defined _WIN32 @@ -54,13 +50,13 @@ # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # define HAVE_DIRENT_NAMLEN 1 -# if HAVE_SYS_NDIR_H +# ifdef HAVE_SYS_NDIR_H # include # endif -# if HAVE_SYS_DIR_H +# ifdef HAVE_SYS_DIR_H # include # endif -# if HAVE_NDIR_H +# ifdef HAVE_NDIR_H # include # endif # ifdef _WIN32 @@ -68,8 +64,6 @@ # endif #endif -#include - #ifndef HAVE_STDLIB_H char *getenv(); #endif @@ -78,28 +72,6 @@ char *getenv(); char *strchr(char*,char); #endif -#include - -#include "ruby/util.h" - -#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_SYS_ATTR_H #include #endif @@ -123,19 +95,54 @@ char *strchr(char*,char); #ifdef __APPLE__ # define NORMALIZE_UTF8PATH 1 +# include +# include +# include #else # define NORMALIZE_UTF8PATH 0 #endif -// --------- [Enclose.IO Hack start] --------- -#include "enclose_io.h" -// --------- [Enclose.IO Hack end] --------- +#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/vm.h" +#include "ruby/encoding.h" +#include "ruby/ruby.h" +#include "ruby/thread.h" +#include "ruby/util.h" +#include "builtin.h" -#if NORMALIZE_UTF8PATH -#include -#include -#include +#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 + +#if NORMALIZE_UTF8PATH # if defined HAVE_FGETATTRLIST || !defined HAVE_GETATTRLIST # define need_normalization(dirp, path) need_normalization(dirp) # else @@ -148,10 +155,8 @@ need_normalization(DIR *dirp, const char *path) u_int32_t attrbuf[SIZEUP32(fsobj_tag_t)]; struct attrlist al = {ATTR_BIT_MAP_COUNT, 0, ATTR_CMN_OBJTAG,}; # if defined HAVE_FGETATTRLIST - if (squash_find_entry(dirp)) { return FALSE; } int ret = fgetattrlist(dirfd(dirp), &al, attrbuf, sizeof(attrbuf), 0); # else - if (enclose_io_is_path(path)) { return FALSE; } int ret = getattrlist(path, &al, attrbuf, sizeof(attrbuf), 0); # endif if (!ret) { @@ -212,11 +217,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 @@ -517,40 +524,13 @@ opendir_without_gvl(const char *path) return opendir(path); } -/* - * call-seq: - * Dir.new( string ) -> aDir - * Dir.new( string, encoding: enc ) -> aDir - * - * Returns a new directory object for the named directory. - * - * The optional encoding keyword 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) +dir_initialize(rb_execution_context_t *ec, VALUE dir, VALUE dirname, VALUE enc) { struct dir_data *dp; - rb_encoding *fsenc; - VALUE dirname, opt, orig; - static ID keyword_ids[1]; + VALUE orig; const char *path; - - if (!keyword_ids[0]) { - keyword_ids[0] = rb_id_encoding(); - } - - fsenc = rb_filesystem_encoding(); - - rb_scan_args(argc, argv, "1:", &dirname, &opt); - - 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); - } - } + rb_encoding *fsenc = NIL_P(enc) ? rb_filesystem_encoding() : rb_to_encoding(enc); FilePathValue(dirname); orig = rb_str_dup_frozen(dirname); @@ -573,12 +553,7 @@ dir_initialize(int argc, VALUE *argv, VALUE dir) else if (e == EIO) { u_int32_t attrbuf[1]; struct attrlist al = {ATTR_BIT_MAP_COUNT, 0}; - if (enclose_io_is_path(path)) { - struct stat buf; - if (0 == squash_lstat(enclose_io_fs, path, &buf)) { - dp->dir = opendir_without_gvl(path); - } - } else if (getattrlist(path, &al, attrbuf, sizeof(attrbuf), FSOPT_NOFOLLOW) == 0) { + if (getattrlist(path, &al, attrbuf, sizeof(attrbuf), FSOPT_NOFOLLOW) == 0) { dp->dir = opendir_without_gvl(path); } } @@ -593,35 +568,23 @@ dir_initialize(int argc, VALUE *argv, VALUE dir) return dir; } -/* - * 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 encoding keyword argument specifies the encoding of the directory. - * If not specified, the filesystem encoding is used. - * - * With no block, open is a synonym for Dir::new. If a - * block is present, it is passed aDir as a parameter. The - * directory is closed at the end of the block, and Dir::open returns - * the value of the block. - */ static VALUE -dir_s_open(int argc, VALUE *argv, VALUE klass) +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(argc, argv, dir); - if (rb_block_given_p()) { - return rb_ensure(rb_yield, dir, dir_close, dir); - } + 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); +} + NORETURN(static void dir_closed(void)); static void @@ -1027,7 +990,7 @@ chdir_yield(VALUE v) dir_chdir(args->new_path); args->done = TRUE; chdir_blocking++; - if (chdir_thread == Qnil) + if (NIL_P(chdir_thread)) chdir_thread = rb_thread_current(); return rb_yield(args->new_path); } @@ -1063,7 +1026,8 @@ chdir_restore(VALUE v) * block. chdir blocks can be nested, but in a * multi-threaded program an error will be raised if a thread attempts * to open a chdir block while another thread has one - * open. + * open or a call to chdir without a block occurs inside + * a block passed to chdir (even in the same thread). * * Dir.chdir("/var/spool/mail") * puts Dir.pwd @@ -1102,8 +1066,10 @@ dir_s_chdir(int argc, VALUE *argv, VALUE obj) } if (chdir_blocking > 0) { - if (!rb_block_given_p() || rb_thread_current() != chdir_thread) - rb_warn("conflicting chdir during another chdir block"); + if (rb_thread_current() != chdir_thread) + rb_raise(rb_eRuntimeError, "conflicting chdir during another chdir block"); + if (!rb_block_given_p()) + rb_warn("conflicting chdir during another chdir block"); } if (rb_block_given_p()) { @@ -1353,21 +1319,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 void * -glob_alloc_n(size_t x, size_t y) +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 malloc(z); + 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 *)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)) @@ -1451,7 +1430,7 @@ with_gvl_gc_for_fd(void *ptr) { int *e = ptr; - return (void *)(rb_gc_for_fd(*e) ? Qtrue : Qfalse); + return (void *)RBOOL(rb_gc_for_fd(*e)); } static int @@ -1460,7 +1439,7 @@ 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 rb_gc_for_fd(e) ? Qtrue : Qfalse; + return RBOOL(rb_gc_for_fd(e)); } static void * @@ -1732,10 +1711,7 @@ glob_make_pattern(const char *p, const char *e, int flags, rb_encoding *enc) 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; @@ -1743,6 +1719,11 @@ 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 @@ -1790,8 +1771,6 @@ is_case_sensitive(DIR *dirp, const char *path) const int idx = VOL_CAPABILITIES_FORMAT; const uint32_t mask = VOL_CAP_FMT_CASE_SENSITIVE; - if (squash_find_entry(dirp)) { return 1; } - # if defined HAVE_FGETATTRLIST if (fgetattrlist(dirfd(dirp), &al, attrbuf, sizeof(attrbuf), FSOPT_NOFOLLOW)) return -1; @@ -1995,13 +1974,15 @@ rb_glob_warning(const char *path, VALUE a, const void *enc, int error) } #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); - return Qnil; + UNREACHABLE_RETURN(Qnil); } static int @@ -2021,8 +2002,17 @@ rb_glob_error(const char *path, VALUE a, const void *enc, int error) 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 @@ -2047,7 +2037,7 @@ struct push_glob_args { struct dirent_brace_args { const char *name; - const struct dirent *dp; + const rb_dirent_t *dp; int flags; }; @@ -2110,6 +2100,159 @@ 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 + } +#ifdef DT_UNKNOWN + 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) { + 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))) { + 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; + } + 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); + 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, @@ -2132,6 +2275,8 @@ glob_helper( 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) { @@ -2222,7 +2367,7 @@ glob_helper( if (pathtype == path_noent) return 0; if (magical || recursive) { - struct dirent *dp; + rb_dirent_t *dp; DIR *dirp; # if USE_NAME_ON_FS == USE_NAME_ON_FS_BY_FNMATCH char *plainname = 0; @@ -2261,7 +2406,22 @@ glob_helper( if (is_case_sensitive(dirp, path) == 0) flags |= FNM_CASEFOLD; # endif - while ((dp = READDIR(dirp, enc)) != NULL) { + 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; @@ -2270,12 +2430,13 @@ glob_helper( IF_NORMALIZE_UTF8PATH(VALUE utf8str = Qnil); name = dp->d_name; - namlen = NAMLEN(dp); - if (recursive && name[0] == '.') { + namlen = dp->d_namlen; + if (name[0] == '.') { ++dotfile; if (namlen == 1) { /* unless DOTMATCH, skip current directories not to recurse infinitely */ - if (!(flags & FNM_DOTMATCH)) continue; + if (recursive && !(flags & FNM_DOTMATCH)) continue; + if (skipdot) continue; ++dotfile; new_pathtype = path_directory; /* force to skip stat/lstat */ } @@ -2365,7 +2526,7 @@ glob_helper( if (status) break; } - closedir(dirp); + glob_dir_finish(&globent, flags); } else if (plain) { struct glob_pattern **copy_beg, **copy_end, **cur2; @@ -2415,7 +2576,7 @@ glob_helper( break; } #if USE_NAME_ON_FS == USE_NAME_ON_FS_REAL_BASENAME - if ((*cur)->type == ALPHA && !enclose_io_if(buf)) { + if ((*cur)->type == ALPHA) { buf = replace_real_basename(buf, pathlen + (dirsep != 0), enc, IF_NORMALIZE_UTF8PATH(1)+0, flags, &new_pathtype); @@ -2535,7 +2696,7 @@ ruby_glob(const char *path, int flags, ruby_glob_func *func, VALUE arg) { ruby_glob_funcs_t funcs; funcs.match = func; - funcs.error = NULL; + funcs.error = 0; return ruby_glob0(path, AT_FDCWD, 0, flags & ~GLOB_VERBOSE, &funcs, arg, rb_ascii8bit_encoding()); } @@ -2664,7 +2825,7 @@ ruby_brace_glob_with_enc(const char *str, int flags, ruby_glob_func *func, VALUE flags &= ~GLOB_VERBOSE; args.funcs.match = func; - args.funcs.error = NULL; + args.funcs.error = 0; args.value = arg; args.flags = flags; return ruby_brace_expand(str, flags, glob_brace, (VALUE)&args, enc, Qfalse); @@ -2741,177 +2902,67 @@ rb_push_glob(VALUE str, VALUE base, int flags) /* '\0' is delimiter */ } static VALUE -dir_globs(long argc, const VALUE *argv, VALUE base, int flags) +dir_globs(VALUE args, VALUE base, int flags) { VALUE ary = rb_ary_new(); long i; - for (i = 0; i < argc; ++i) { + for (i = 0; i < RARRAY_LEN(args); ++i) { int status; - VALUE str = argv[i]; + 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; } -static void -dir_glob_options(VALUE opt, VALUE *base, int *flags) +static VALUE +dir_glob_option_base(VALUE base) { - ID kw[2]; - VALUE args[2]; - kw[0] = rb_intern("base"); - if (flags) kw[1] = rb_intern("flags"); - rb_get_kwargs(opt, kw, 0, flags ? 2 : 1, args); - if (args[0] == Qundef || NIL_P(args[0])) { - *base = Qnil; + if (base == Qundef || NIL_P(base)) { + return Qnil; } #if USE_OPENDIR_AT - else if (rb_typeddata_is_kind_of(args[0], &dir_data_type)) { - *base = args[0]; + if (rb_typeddata_is_kind_of(base, &dir_data_type)) { + return base; } #endif - else { - FilePathValue(args[0]); - if (!RSTRING_LEN(args[0])) args[0] = Qnil; - *base = args[0]; - } - if (flags && args[1] != Qundef) { - *flags = NUM2INT(args[1]); - } + FilePathValue(base); + if (!RSTRING_LEN(base)) return Qnil; + return base; +} + +static int +dir_glob_option_sort(VALUE sort) +{ + return (rb_bool_expected(sort, "sort") ? 0 : FNM_GLOB_NOSORT); } -/* - * call-seq: - * Dir[ string [, string ...] [, base: path] ] -> array - * - * Equivalent to calling - * Dir.glob([string,...], 0). - * - */ static VALUE -dir_s_aref(int argc, VALUE *argv, VALUE obj) +dir_s_aref(rb_execution_context_t *ec, VALUE obj, VALUE args, VALUE base, VALUE sort) { - VALUE opts, base; - argc = rb_scan_args(argc, argv, "*:", NULL, &opts); - dir_glob_options(opts, &base, NULL); - if (argc == 1) { - return rb_push_glob(argv[0], base, 0); + 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(argc, argv, base, 0); + return dir_globs(args, base, flags); } -/* - * call-seq: - * Dir.glob( pattern, [flags], [base: path] ) -> array - * Dir.glob( pattern, [flags], [base: path] ) { |filename| block } -> nil - * - * Expands +pattern+, which is a pattern string or an Array of pattern - * strings, and returns an array containing the matching filenames. - * If a block is given, calls the block once for each matching filename, - * passing the filename as a parameter to the block. - * - * The optional +base+ keyword argument specifies the base directory for - * interpreting relative pathnames instead of the current working directory. - * As the results are not prefixed with the base directory name in this - * case, you will need to prepend the base directory name if you want real - * paths. - * - * Note that the pattern is not a regexp, it's closer to a shell glob. - * See File::fnmatch for the meaning of the +flags+ parameter. - * Case sensitivity depends on your system (File::FNM_CASEFOLD is ignored), - * as does the order in which the results are returned. - * - * *:: - * Matches any file. Can be restricted by other values in the glob. - * Equivalent to / .* /mx in regexp. - * - * *:: Matches all files - * c*:: Matches all files beginning with c - * *c:: Matches all files ending with c - * \*c\*:: Match all files that have c 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 "{*,.*}". - * - * **:: - * Matches directories recursively. - * - * ?:: - * Matches any one character. Equivalent to /.{1}/ in regexp. - * - * [set]:: - * Matches any one character in +set+. Behaves exactly like character sets - * in Regexp, including set negation ([^a-z]). - * - * {p,q}:: - * Matches either literal p or literal q. - * Equivalent to pattern alternation in regexp. - * - * Matching literals may be more than one character in length. More than - * two literals may be specified. - * - * \\ :: - * Escapes the next metacharacter. - * - * Note that this means you cannot use backslash on windows as part of a - * glob, i.e. Dir["c:\\foo*"] will not work, use - * Dir["c:/foo*"] 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"] - * Dir.glob(["*.rb", "*.h"]) #=> ["main.rb", "config.h"] - * - * rbfiles = File.join("**", "*.rb") - * Dir.glob(rbfiles) #=> ["main.rb", - * # "lib/song.rb", - * # "lib/song/karaoke.rb"] - * - * Dir.glob(rbfiles, base: "lib") #=> ["song.rb", - * # "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) +dir_s_glob(rb_execution_context_t *ec, VALUE obj, VALUE str, VALUE rflags, VALUE base, VALUE sort) { - VALUE str, rflags, ary, opts, base; - int flags; - - argc = rb_scan_args(argc, argv, "11:", &str, &rflags, &opts); - if (argc == 2) - flags = NUM2INT(rflags); - else - flags = 0; - dir_glob_options(opts, &base, &flags); - - ary = rb_check_array_type(str); + 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, base, flags); } else { - VALUE v = ary; - ary = dir_globs(RARRAY_LEN(v), RARRAY_CONST_PTR(v), base, flags); - RB_GC_GUARD(v); + ary = dir_globs(ary, base, flags); } if (rb_block_given_p()) { @@ -3036,7 +3087,7 @@ dir_s_each_child(int argc, VALUE *argv, VALUE io) /* * call-seq: - * dir.each_child {| filename | block } -> nil + * dir.each_child {| filename | block } -> dir * dir.each_child -> an_enumerator * * Calls the block once for each entry except for "." and ".." in @@ -3130,100 +3181,7 @@ fnmatch_brace(const char *pattern, VALUE val, void *enc) 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: - * - * *:: - * Matches any file. Can be restricted by other values in the glob. - * Equivalent to / .* /x in regexp. - * - * *:: Matches all files regular files - * c*:: Matches all files beginning with c - * *c:: Matches all files ending with c - * \*c*:: Matches all files that have c in them - * (including at the beginning or end). - * - * To match hidden files (that start with a . set the - * File::FNM_DOTMATCH flag. - * - * **:: - * Matches directories recursively or files expansively. - * - * ?:: - * Matches any one character. Equivalent to /.{1}/ in regexp. - * - * [set]:: - * Matches any one character in +set+. Behaves exactly like character sets - * in Regexp, including set negation ([^a-z]). - * - * \ :: - * Escapes the next metacharacter. - * - * {a,b}:: - * Matches pattern a and pattern b if File::FNM_EXTGLOB flag is enabled. - * Behaves like a Regexp union ((?:a|b)). - * - * +flags+ is a bitwise OR of the FNM_XXX 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 - * - * 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) { @@ -3302,16 +3260,11 @@ rb_file_directory_p(void) } #endif -/* - * call-seq: - * Dir.exists?(file_name) -> true or false - * - * Deprecated method. Don't use. - */ +/* :nodoc: */ static VALUE rb_dir_exists_p(VALUE obj, VALUE fname) { - rb_warning("Dir.exists? is a deprecated name, use Dir.exist? instead"); + rb_warn_deprecated("Dir.exists?", "Dir.exist?"); return rb_file_directory_p(obj, fname); } @@ -3368,7 +3321,7 @@ rb_dir_s_empty_p(VALUE obj, VALUE dirname) path = RSTRING_PTR(dirname); #if defined HAVE_GETATTRLIST && defined ATTR_DIR_ENTRYCOUNT - if (!enclose_io_is_path(path)) { + { u_int32_t attrbuf[SIZEUP32(fsobj_tag_t)]; struct attrlist al = {ATTR_BIT_MAP_COUNT, 0, ATTR_CMN_OBJTAG,}; if (getattrlist(path, &al, attrbuf, sizeof(attrbuf), 0) != 0) @@ -3394,16 +3347,6 @@ rb_dir_s_empty_p(VALUE obj, VALUE dirname) return result; } -/* - * Objects of class Dir are directory streams representing - * directories in the underlying file system. They provide a variety - * of ways to list directories and their contents. See also File. - * - * The directory used in these examples contains the two regular files - * (config.h and main.rb), the parent - * directory (..), and the directory itself - * (.). - */ void Init_Dir(void) { @@ -3412,13 +3355,11 @@ Init_Dir(void) 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, "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); @@ -3444,8 +3385,6 @@ 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); @@ -3500,3 +3439,5 @@ Init_Dir(void) */ rb_file_const("FNM_SHORTNAME", INT2FIX(FNM_SHORTNAME)); } + +#include "dir.rbinc" diff --git a/ruby/dir.rb b/ruby/dir.rb new file mode 100644 index 000000000..115f06877 --- /dev/null +++ b/ruby/dir.rb @@ -0,0 +1,314 @@ +# Objects of class Dir are directory streams representing +# directories in the underlying file system. They provide a variety +# of ways to list directories and their contents. See also File. +# +# The directory used in these examples contains the two regular files +# (config.h and main.rb), the parent +# directory (..), and the directory itself +# (.). +# +# == What's Here +# +# First, what's elsewhere. \Class \Dir: +# +# - Inherits from {class Object}[Object.html#class-Object-label-What-27s+Here]. +# - Includes {module Enumerable}[Enumerable.html#module-Enumerable-label-What-27s+Here], +# which provides dozens of additional methods. +# +# Here, class \Dir provides methods that are useful for: +# +# - {Reading}[#class-Dir-label-Reading] +# - {Setting}[#class-Dir-label-Setting] +# - {Querying}[#class-Dir-label-Querying] +# - {Iterating}[#class-Dir-label-Iterating] +# - {Other}[#class-Dir-label-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 . or ... +# - ::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 . and ... +# - ::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 . or ... +# - #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 . or ... +# - ::foreach:: Calls the given block with each entryin the given directory, +# including . and ... +# - #each:: Calls the given block with each entry in +self+, +# including . and ... +# - #each_child:: Calls the given block with each entry in +self+, +# but not including . or ... +# +# === 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( string ) -> aDir + # Dir.open( string, encoding: enc ) -> aDir + # Dir.open( string ) {| aDir | block } -> anObject + # Dir.open( string, encoding: enc ) {| aDir | block } -> anObject + # + # The optional encoding keyword argument specifies the encoding of the directory. + # If not specified, the filesystem encoding is used. + # + # With no block, open is a synonym for Dir::new. If a + # block is present, it is passed aDir as a parameter. The + # directory is closed at the end of the block, and Dir::open returns + # the value of the block. + 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( string ) -> aDir + # Dir.new( string, encoding: enc ) -> aDir + # + # Returns a new directory object for the named directory. + # + # The optional encoding keyword argument specifies the encoding of the directory. + # If not specified, the filesystem encoding is used. + def initialize(name, encoding: nil) + Primitive.dir_initialize(name, encoding) + end + + # call-seq: + # Dir[ string [, string ...] [, base: path] [, sort: true] ] -> array + # + # Equivalent to calling + # Dir.glob([string,...], 0). + def self.[](*args, base: nil, sort: true) + Primitive.dir_s_aref(args, base, sort) + end + + # call-seq: + # Dir.glob( pattern, [flags], [base: path] [, sort: true] ) -> array + # Dir.glob( pattern, [flags], [base: path] [, sort: true] ) { |filename| block } -> nil + # + # Expands +pattern+, which is a pattern string or an Array of pattern + # strings, and returns an array containing the matching filenames. + # If a block is given, calls the block once for each matching filename, + # passing the filename as a parameter to the block. + # + # The optional +base+ keyword argument specifies the base directory for + # interpreting relative pathnames instead of the current working directory. + # As the results are not prefixed with the base directory name in this + # case, you will need to prepend the base directory name if you want real + # paths. + # + # The results which matched single wildcard or character set are sorted in + # binary ascending order, unless +false+ is given as the optional +sort+ + # keyword argument. The order of an Array of pattern strings and braces + # are preserved. + # + # Note that the pattern is not a regexp, it's closer to a shell glob. + # See File::fnmatch for the meaning of the +flags+ parameter. + # Case sensitivity depends on your system (+File::FNM_CASEFOLD+ is ignored). + # + # *:: + # Matches any file. Can be restricted by other values in the glob. + # Equivalent to /.*/mx in regexp. + # + # *:: Matches all files + # c*:: Matches all files beginning with c + # *c:: Matches all files ending with c + # \*c\*:: Match all files that have c 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 "{*,.*}". + # + # **:: + # Matches directories recursively if followed by /. If + # this path segment contains any other characters, it is the same as the + # usual *. + # + # ?:: + # Matches any one character. Equivalent to /.{1}/ in regexp. + # + # [set]:: + # Matches any one character in +set+. Behaves exactly like character sets + # in Regexp, including set negation ([^a-z]). + # + # {p,q}:: + # Matches either literal p or literal q. + # Equivalent to pattern alternation in regexp. + # + # Matching literals may be more than one character in length. More than + # two literals may be specified. + # + # \\:: + # Escapes the next metacharacter. + # + # Note that this means you cannot use backslash on windows as part of a + # glob, i.e. Dir["c:\\foo*"] will not work, use + # Dir["c:/foo*"] 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"] + # Dir.glob(["*.rb", "*.h"]) #=> ["main.rb", "config.h"] + # + # Dir.glob("**/*.rb") #=> ["main.rb", + # # "lib/song.rb", + # # "lib/song/karaoke.rb"] + # + # Dir.glob("**/*.rb", base: "lib") #=> ["song.rb", + # # "song/karaoke.rb"] + # + # Dir.glob("**/lib") #=> ["lib"] + # + # Dir.glob("**/lib/**/*.rb") #=> ["lib/song.rb", + # # "lib/song/karaoke.rb"] + # + # Dir.glob("**/lib/*.rb") #=> ["lib/song.rb"] + def self.glob(pattern, _flags = 0, flags: _flags, base: nil, sort: true) + 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: + # + # *:: + # Matches any file. Can be restricted by other values in the glob. + # Equivalent to /.*/x in regexp. + # + # *:: Matches all regular files + # c*:: Matches all files beginning with c + # *c:: Matches all files ending with c + # \*c*:: Matches all files that have c in them + # (including at the beginning or end). + # + # To match hidden files (that start with a .) set the + # File::FNM_DOTMATCH flag. + # + # **:: + # Matches directories recursively or files expansively. + # + # ?:: + # Matches any one character. Equivalent to /.{1}/ in regexp. + # + # [set]:: + # Matches any one character in +set+. Behaves exactly like character sets + # in Regexp, including set negation ([^a-z]). + # + # \\:: + # Escapes the next metacharacter. + # + # {a,b}:: + # Matches pattern a and pattern b if File::FNM_EXTGLOB flag is enabled. + # Behaves like a Regexp union ((?:a|b)). + # + # +flags+ is a bitwise OR of the FNM_XXX 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/ruby/dln.c b/ruby/dln.c index eb738deeb..44e8c06d0 100644 --- a/ruby/dln.c +++ b/ruby/dln.c @@ -23,15 +23,12 @@ static void dln_loaderror(const char *format, ...); #endif #include "dln.h" #include "internal.h" +#include "internal/compilers.h" #ifdef HAVE_STDLIB_H # include #endif -#ifdef USE_DLN_A_OUT -char *dln_argv0; -#endif - #if defined(HAVE_ALLOCA_H) #include #endif @@ -98,7 +95,7 @@ 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(MACOSX_DYLD) && !defined(_UNICOSMP) /* dynamic load with dlopen() */ # define USE_DLN_DLOPEN #endif @@ -116,10 +113,6 @@ dln_loaderror(const char *format, ...) #define isdirsep(x) ((x) == '/') #endif -// --------- [Enclose.IO Hack start] --------- -#include "enclose_io.h" -// --------- [Enclose.IO Hack end] --------- - static size_t init_funcname_len(const char **file) { @@ -151,943 +144,6 @@ static const char funcname_prefix[sizeof(FUNCNAME_PREFIX) - 1] = FUNCNAME_PREFIX *(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 - -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 -#include -#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 const int reloc_r_rightshift[] = { - 0, 0, 0, 0, 0, 0, 2, 2, 10, 0, 0, 0, 0, 0, 0, -}; -static const int reloc_r_bitsize[] = { - 8, 16, 32, 8, 16, 32, 30, 22, 22, 22, 13, 10, 32, 32, 16, -}; -static const 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); - } -} - -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 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(); - } - st_insert(reloc_tbl, u_no++, obj); -} - -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++; - } - - /* - * 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; -#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; symn_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 #endif @@ -1144,34 +200,11 @@ dln_strerror(char *message, size_t size) 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 @@ -1248,6 +281,8 @@ rb_w32_check_imported(HMODULE ext, HMODULE mine) #endif #ifdef USE_DLN_DLOPEN +# include "ruby/internal/stdbool.h" +# include "internal/warnings.h" COMPILER_WARNING_PUSH #if defined(__clang__) || GCC_VERSION_SINCE(4, 2, 0) COMPILER_WARNING_IGNORED(-Wpedantic) @@ -1256,7 +291,8 @@ static bool dln_incompatible_library_p(void *handle) { void *ex = dlsym(handle, EXTERNAL_PREFIX"ruby_xmalloc"); - return ex && ex != ruby_xmalloc; + void *const fp = (void *)ruby_xmalloc; + return ex && ex != fp; } COMPILER_WARNING_POP #endif @@ -1267,7 +303,7 @@ dln_load(const char *file) #if (defined _WIN32 || defined USE_DLN_DLOPEN) && defined RUBY_EXPORT static const char incompatible[] = "incompatible library version"; #endif -#if !defined(_AIX) && !defined(NeXT) +#if defined _WIN32 || defined USE_DLN_DLOPEN const char *error = 0; #endif @@ -1275,7 +311,7 @@ dln_load(const char *file) HINSTANCE handle; WCHAR *winfile; char message[1024]; - void (*init_fct)(); + void (*init_fct)(void); char *buf; /* Load the file as an object one */ @@ -1304,7 +340,7 @@ dln_load(const char *file) } #endif - if ((init_fct = (void(*)())GetProcAddress(handle, buf)) == NULL) { + if ((init_fct = (void(*)(void))GetProcAddress(handle, buf)) == NULL) { dln_loaderror("%s - %s\n%s", dln_strerror(), buf, file); } @@ -1312,14 +348,6 @@ dln_load(const char *file) (*init_fct)(); return handle; #else -#ifdef USE_DLN_A_OUT - if (load(file) == -1) { - error = dln_strerror(); - goto failed; - } - return 0; -#else - char *buf; /* Load the file as an object one */ init_funcname(&buf, file); @@ -1329,7 +357,7 @@ dln_load(const char *file) #define DLN_DEFINED { void *handle; - void (*init_fct)(); + void (*init_fct)(void); #ifndef RTLD_LAZY # define RTLD_LAZY 1 @@ -1364,7 +392,7 @@ dln_load(const char *file) } # endif - init_fct = (void(*)())(VALUE)dlsym(handle, buf); + init_fct = (void(*)(void))(VALUE)dlsym(handle, buf); if (init_fct == NULL) { const size_t errlen = strlen(error = dln_strerror()) + 1; error = memcpy(ALLOCA_N(char, errlen), error, errlen); @@ -1383,7 +411,7 @@ dln_load(const char *file) { shl_t lib = NULL; int flags; - void (*init_fct)(); + void (*init_fct)(void); flags = BIND_DEFERRED; lib = shl_load(file, flags, 0); @@ -1407,9 +435,9 @@ dln_load(const char *file) #if defined(_AIX) #define DLN_DEFINED { - void (*init_fct)(); + void (*init_fct)(void); - init_fct = (void(*)())load((char*)file, 1, 0); + init_fct = (void(*)(void))load((char*)file, 1, 0); if (init_fct == NULL) { aix_loaderror(file); } @@ -1438,7 +466,7 @@ dln_load(const char *file) /* "file" is module file name . "buf" is pointer to initial function name with "_" . */ - void (*init_fct)(); + void (*init_fct)(void); dyld_result = NSCreateObjectFileImageFromFile(file, &obj_file); @@ -1464,9 +492,8 @@ dln_load(const char *file) dln_notimplement(); #endif -#endif /* USE_DLN_A_OUT */ #endif -#if !defined(_AIX) && !defined(NeXT) +#if defined(_WIN32) || defined(USE_DLN_DLOPEN) failed: dln_loaderror("%s - %s", error, file); #endif diff --git a/ruby/dln.h b/ruby/dln.h index d98b2607e..902f75345 100644 --- a/ruby/dln.h +++ b/ruby/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,11 +24,6 @@ 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*); RUBY_SYMBOL_EXPORT_END diff --git a/ruby/dln_find.c b/ruby/dln_find.c index b08612764..96e06d34c 100644 --- a/ruby/dln_find.c +++ b/ruby/dln_find.c @@ -23,10 +23,6 @@ # include #endif -#ifdef USE_DLN_A_OUT -char *dln_argv0; -#endif - #if defined(HAVE_ALLOCA_H) #include #endif @@ -218,7 +214,7 @@ dln_find_1(const char *fname, const char *path, char *fbuf, size_t size, dp[1] == '\\' || #endif dp[1] == '/')) { - char *home; + const char *home; home = getenv("HOME"); if (home != NULL) { @@ -248,26 +244,14 @@ dln_find_1(const char *fname, const char *path, char *fbuf, size_t size, /* now append the file name */ i = fnlen; if (fspace < i) { - toolong: - PATHNAME_TOO_LONG(); - goto next; + 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; + goto needs_extension; } #endif @@ -284,7 +268,25 @@ dln_find_1(const char *fname, const char *path, char *fbuf, size_t size, if (*ep == '\0') { return NULL; } + continue; + toolong: + PATHNAME_TOO_LONG(); + goto next; + +#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/ruby/doc/.document b/ruby/doc/.document index d739c9f6b..ad17aada6 100644 --- a/ruby/doc/.document +++ b/ruby/doc/.document @@ -1,3 +1,4 @@ +*.md *.rdoc NEWS-* syntax diff --git a/ruby/doc/ChangeLog-0.60_to_1.1 b/ruby/doc/ChangeLog-0.60_to_1.1 index bd5f140dc..ff3c376f4 100644 --- a/ruby/doc/ChangeLog-0.60_to_1.1 +++ b/ruby/doc/ChangeLog-0.60_to_1.1 @@ -28,7 +28,7 @@ Fri Aug 8 11:16:50 1997 Yukihiro Matsumoto Thu Aug 7 11:40:01 1997 Yukihiro Matsumoto - * variable.c (mod_constants): lists constants defiend in the + * variable.c (mod_constants): lists constants defined in the modules/classes. * variable.c (rb_const_set): no longer warns about constant @@ -49,7 +49,7 @@ Mon Aug 4 11:50:28 1997 Yukihiro Matsumoto classes (or modules) dynamically. * variable.c (rb_class_path): scan class constants for anonymous - classes/modules to make up pathes. + classes/modules to make up paths. Wed Jul 30 08:45:12 1997 Yukihiro Matsumoto @@ -76,7 +76,7 @@ Wed Jul 23 09:56:55 1997 Yukihiro Matsumoto specified object. * class.c (mod_instance_methods): returns list of method names of - the class instnace. + the class instance. Fri Jul 11 22:38:55 1997 Yukihiro Matsumoto @@ -538,7 +538,7 @@ Wed Mar 12 10:20:30 1997 Yukihiro Matsumoto Mon Mar 10 20:44:22 1997 Yukihiro Matsumoto * re.c (reg_regsub): \& for substitution. \`, \', and \+ are - avaiable also. + available also. Thu Mar 6 01:47:03 1997 Yukihiro Matsumoto diff --git a/ruby/doc/ChangeLog-1.9.3 b/ruby/doc/ChangeLog-1.9.3 index eecfc4432..58e3b6f67 100644 --- a/ruby/doc/ChangeLog-1.9.3 +++ b/ruby/doc/ChangeLog-1.9.3 @@ -5746,7 +5746,7 @@ Wed Mar 2 14:06:01 2011 NARUSE, Yui Wed Mar 2 14:02:29 2011 Shota Fukumori * test/testunit/test_parallel.rb(TestParallel#spawn_runner): - Fix outputing empty line in running test. + Fix outputting empty line in running test. * test/testunit/tests_for_parallel/test_third.rb: Remove `sleep` @@ -5765,7 +5765,7 @@ Tue Mar 1 21:48:22 2011 Shota Fukumori * 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. + Fix outputting empty line in running test. Tue Mar 1 20:51:57 2011 KOSAKI Motohiro @@ -7541,7 +7541,7 @@ Tue Jan 11 20:32:59 2011 Tanaka Akira Tue Jan 11 13:06:38 2011 NAKAMURA Usaku - * array.c (rb_ary_resize): should care of embeded array when extending + * array.c (rb_ary_resize): should care of embedded array when extending the array. * array.c (rb_ary_resize): need to set capa when changing the real @@ -9563,7 +9563,7 @@ Wed Nov 17 16:09:52 2010 Yuki Sonoda (Yugui) Wed Nov 17 16:04:23 2010 Yuki Sonoda (Yugui) - * test/ruby/envutil.rb (Test::Unit::Assersions#assert_warn): + * test/ruby/envutil.rb (Test::Unit::Assertions#assert_warn): new assertion to assert that a particular warning message is displayed. forward port from branches/ruby_1_9_2@29795. @@ -9781,7 +9781,7 @@ Wed Nov 10 07:20:10 2010 Nobuyoshi Nakada Tue Nov 9 21:57:45 2010 Nobuyoshi Nakada * dln.c (init_funcname): allocate and build initialization - funciton name at once. + function name at once. Tue Nov 9 21:14:54 2010 Nobuyoshi Nakada @@ -62969,7 +62969,7 @@ Thu Jul 12 12:24:29 2007 Nobuyoshi Nakada Thu Jul 12 10:30:46 2007 Nobuyoshi Nakada - * thread.c (thread_start_func_2): moved prototye from thread_*.ci. + * thread.c (thread_start_func_2): moved prototype from thread_*.ci. * thread_pthread.ci (thread_start_func_2): not use a directive inside a macro argument. [ruby-talk:258763] @@ -73273,7 +73273,7 @@ Fri Nov 18 17:35:09 2005 Hidetoshi NAGAI * 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 + Now, an IP object can be controlled by only its master IP or the default IP. * ext/tk/lib/remote-tk.rb: add restriction to manipulate. @@ -76346,7 +76346,7 @@ Tue Jul 5 14:52:56 2005 Hidetoshi NAGAI * ext/tk/lib/tk/validation.rb: ditto. - * ext/tk/lib/tk/namespace.rb: arguemnts for TclTkIp#_merge_tklist + * ext/tk/lib/tk/namespace.rb: arguments for TclTkIp#_merge_tklist should be UTF-8 strings. Mon Jul 4 19:29:32 2005 Hirokazu Yamamoto @@ -77285,7 +77285,7 @@ Sun May 15 09:57:30 2005 Nobuyoshi Nakada Sat May 14 23:59:11 2005 Nobuyoshi Nakada * error.c (exc_exception, {exit,name_err,syserr}_initialize): call - Execption#initialize. fixed: [ruby-talk:142593] + Exception#initialize. fixed: [ruby-talk:142593] Sat May 14 23:56:41 2005 Erik Huelsmann @@ -77435,7 +77435,7 @@ Sat Apr 30 06:57:39 2005 GOTOU Yuuzou (suggested by Tatsuki Sugiura) * lib/webrick/cgi.rb - (WEBrick::CGI#initalize): set a dummy to @config[:ServerSoftware] + (WEBrick::CGI#initialize): 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 @@ -82696,7 +82696,7 @@ Tue Sep 14 20:24:49 2004 Minero Aoki * ext/ripper/depend: Borland make does not accept pipes in Makefile rules. [ruby-dev:24589] - * ext/ripper/depend: separate rules for developpers. + * ext/ripper/depend: separate rules for developers. * ext/ripper/Makefile.dev: new file. @@ -82931,7 +82931,7 @@ Wed Sep 8 18:44:03 2004 Nobuyoshi Nakada Wed Sep 8 15:19:49 2004 Hidetoshi NAGAI - * ext/tcltklib/tcltklib.c (ip_init): cannot create a IP at level 4 + * ext/tcltklib/tcltklib.c (ip_init): cannot create an IP at level 4 * ext/tk/lib/multi-tk.rb: improve 'exit' operation, security check, and error treatment @@ -88452,7 +88452,7 @@ Tue Dec 16 03:17:29 2003 why the lucky stiff Tue Dec 16 01:14:44 2003 Nobuyoshi Nakada - * eval.c (catch_timer): check rb_thread_crtical in main native + * eval.c (catch_timer): check rb_thread_critical in main native thread. * eval.c (thread_timer): just sends signals periodically, to @@ -92076,7 +92076,7 @@ Mon Sep 1 16:59:10 2003 Nobuyoshi Nakada * 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] + overridden now. [ruby-dev:21280] Sun Aug 31 22:46:55 2003 WATANABE Hirofumi @@ -92616,7 +92616,7 @@ Fri Aug 8 03:22:28 2003 GOTOU Yuuzou Thu Aug 7 14:40:37 2003 WATANABE Hirofumi - * cygwin/GNUmakefile: better --disbale-shared option support. + * cygwin/GNUmakefile: better --disable-shared option support. * cygwin/GNUmakefile: add forwarding DLL target for cygwin. diff --git a/ruby/doc/ChangeLog-2.0.0 b/ruby/doc/ChangeLog-2.0.0 index a1a79b8dc..b51d74220 100644 --- a/ruby/doc/ChangeLog-2.0.0 +++ b/ruby/doc/ChangeLog-2.0.0 @@ -9758,7 +9758,7 @@ Thu Aug 23 16:20:04 2012 Koichi Sasada are b10. If flonum is activated, then USE_FLONUM macro is 1. I'll write detailed in this technique on - https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/Flonum_tech + https://bugs.ruby-lang.org/projects/ruby-master/wiki/Flonum_tech * benchmark/bmx_temp.rb: add an benchmark for simple Float calculation. @@ -13008,7 +13008,7 @@ Thu Jun 7 15:53:03 2012 Koichi Sasada * .gdbinit: add function `trace_machine_instructions' to trace in native machine assemble. - See https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/MachineInstructionsTraceWithGDB + See https://bugs.ruby-lang.org/projects/ruby-master/wiki/MachineInstructionsTraceWithGDB for more details. Wed Jun 6 21:31:21 2012 Tanaka Akira @@ -14711,7 +14711,7 @@ Fri Apr 27 01:45:05 2012 NARUSE, Yui (22) main thread waits at gvl_yield:112 (native_cond_wait) As described above, the main thread can't escape from rb_threadptr_execute_interrupts_common. - See extended memo: http://bugs.ruby-lang.org/projects/ruby-trunk/wiki/R35480_ExtendedMemo + See extended memo: http://bugs.ruby-lang.org/projects/ruby-master/wiki/R35480_ExtendedMemo Fri Apr 27 07:15:07 2012 Tanaka Akira diff --git a/ruby/doc/ChangeLog-2.1.0 b/ruby/doc/ChangeLog-2.1.0 index 76edfd3ce..5b670b31c 100644 --- a/ruby/doc/ChangeLog-2.1.0 +++ b/ruby/doc/ChangeLog-2.1.0 @@ -3596,7 +3596,7 @@ Tue Oct 22 19:19:05 2013 Koichi Sasada maintains all pages. For example, pages are allocated from the heap_pages. - See https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/GC_design + See https://bugs.ruby-lang.org/projects/ruby-master/wiki/GC_design and https://bugs.ruby-lang.org/attachments/4015/data-heap_structure_with_multiple_heaps.png for more details. @@ -8612,7 +8612,7 @@ Wed Jul 17 14:31:13 2013 Koichi Sasada (4) heap::sorted is an array of "slots", sorted by an address of slot::body. - See https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/GC_design + See https://bugs.ruby-lang.org/projects/ruby-master/wiki/GC_design for more details (figure). * gc.c: Avoid "heaps" terminology. It is ambiguous. diff --git a/ruby/doc/ChangeLog-2.4.0 b/ruby/doc/ChangeLog-2.4.0 index 96b5ecb07..a297a579d 100644 --- a/ruby/doc/ChangeLog-2.4.0 +++ b/ruby/doc/ChangeLog-2.4.0 @@ -792,7 +792,7 @@ Wed Oct 5 12:57:21 2016 Richard Schneeman Wed Oct 5 11:47:19 2016 SHIBATA Hiroshi - * io.c: Fixed equivalent ruby code with core implemention. + * io.c: Fixed equivalent ruby code with core implementation. [fix GH-1429][ci skip] Patch by @sos4nt Wed Oct 5 11:36:21 2016 SHIBATA Hiroshi @@ -888,7 +888,7 @@ Sun Oct 2 02:03:06 2016 NAKAMURA Usaku Sat Oct 1 23:08:47 2016 NAKAMURA Usaku - * ext/date/date_parse.c (date_zone_to_diff): it's nonsence and really + * ext/date/date_parse.c (date_zone_to_diff): it's nonsense and really harm that to use unary minus operator with unsigned value. get rid of test failures introduced at r56312. diff --git a/ruby/doc/ChangeLog-YARV b/ruby/doc/ChangeLog-YARV index a8b999dff..83df05c52 100644 --- a/ruby/doc/ChangeLog-YARV +++ b/ruby/doc/ChangeLog-YARV @@ -493,7 +493,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * thread.c : remove some line break - * yarvcore.c : reoder initialize sequence to mark main thread + * yarvcore.c : reorder initialize sequence to mark main thread 2006-08-18(Fri) 16:51:34 +0900 Koichi Sasada @@ -1481,7 +1481,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * yarvcore.c : ditto - * yarvtest/test_thread.rb : separete assersions to tests + * yarvtest/test_thread.rb : separate assertions to tests 2006-02-21(Tue) 02:13:33 +900 Yukihiro Matsumoto @@ -1503,7 +1503,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * yarvcore.c : support Proc#dup/clone, Binding#dup/clone - * sample/test.rb : remove unsupport features (Proc as Binding) + * sample/test.rb : remove unsupported features (Proc as Binding) 2006-02-20(Mon) 16:28:59 +0900 Koichi Sasada @@ -1560,7 +1560,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * yarvtest/test_thread.rb : add a test for above * vm.h, vm.c, vm_dump.c, insns.def : add FRAME_MAGIC_LAMBDA and - support return from lambda (especially retrun from method defined + support return from lambda (especially return from method defined by "define_method") * yarvtest/test_method.rb : add a test for above @@ -1606,7 +1606,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * vm.c : "return" from lambda{} break block - * eval.c : Unsupport Proc as Binding + * eval.c : Unsupported Proc as Binding * test/ruby/test_eval.rb : apply above changes @@ -3816,7 +3816,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada 2005-12-29(Thu) 12:27:12 +0900 Koichi Sasada * compile.c, yarvcore.h : - remvoe needless yarv_iseq_t#rewind_frame_size + remove needless yarv_iseq_t#rewind_frame_size 2005-12-29(Thu) 11:17:58 +0900 Koichi Sasada @@ -4530,7 +4530,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * vm.c : fix return process - * vm_macro.def : fix option prameters + * vm_macro.def : fix option parameters * yarvtest/test_method.rb : add tests for above @@ -4555,7 +4555,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * eval_intern.h : fix PASS_PASSED_BLOCK() - * eval_load.c : fix re-enter require (temporalily) + * eval_load.c : fix re-enter require (temporarily) * insns.def : permit re-open class when superclass is same @@ -4729,7 +4729,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * eval.c, eval_intern.h, vm.c, eval_jump.h, yarvcore.h : re-define PUSH/POP/EXEC/JUMP_TAG to use thread local tag - * inits.c, yarvcore.c : fix boostrap + * inits.c, yarvcore.c : fix bootstrap 2005-10-03(Mon) 22:28:24 +0900 Koichi Sasada @@ -4909,7 +4909,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada 2005-09-14(Wed) 06:11:43 +0900 Koichi Sasada * yarvcore.h, vm_evalbody.h, vm.h, vm_dump.c, - compile.c, yarvcore.c : use #ifdef insted of #if for recognize + compile.c, yarvcore.c : use #ifdef instead of #if for recognize vm options * vm_opts.h : fix default options @@ -4973,13 +4973,13 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * common.mk : rule test -> test2, test1 -> test - * compile.c : fix when clause bug and splat arugment + * compile.c : fix when clause bug and splat argument 2005-08-17(Wed) 05:22:31 +0900 Koichi Sasada * compile.c : fix block local parameter setting routine and support - massign in block parameter initialze + massign in block parameter initialize * yarvtest/test_yield.rb : add tests for above @@ -5394,7 +5394,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * tmpl/vmtc.inc.tmpl : add const prefix - * /rb/asm_parse.rb, extconf.rb : added and make assembler analised output + * /rb/asm_parse.rb, extconf.rb : added and make assembler analysed output * opt_operand.def : add send operands unification @@ -5654,7 +5654,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada 2005-03-01(Tue) 13:50:04 +0900 Koichi Sasada * yarvcore.c (yarvcore_eval_parsed) : added - (separeted from yarvcore_eval) + (separated from yarvcore_eval) * yarvcore.c, compile.c : iseq_translate_direct_threaded_code is moved to compile.c @@ -5806,7 +5806,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * compiled.c : add constant pool - * vm_evalbody.inc, call_cfunc.inc, vm.c : separeted from vm.c + * vm_evalbody.inc, call_cfunc.inc, vm.c : separated from vm.c * insns.def : fix return val @@ -5840,7 +5840,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * depend : fixed for above - * extconf.rb : add option --(enable|disalbe)-opt-insns-unification + * extconf.rb : add option --(enable|disable)-opt-insns-unification 2005-02-11(Fri) 12:14:39 +0900 Koichi Sasada @@ -5957,7 +5957,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * evalc.patch : fix for above - * benchmark/bm_lists.rb : fix (unsupport block passing) + * benchmark/bm_lists.rb : fix (unsupported block passing) * benchmark/run.rb : use full path to ruby @@ -6014,7 +6014,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * test/test_block.rb (test_ifunc) : test for above - * vm.c (get_block_objec, thread_make_env_object) : fixed bugs + * vm.c (get_block_object, thread_make_env_object) : fixed bugs * test/test_bin.rb (test_xstr) : remove `ls` test @@ -6067,7 +6067,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada 2005-01-04(Tue) 06:25:45 +0900 Koichi Sasada - * compile.h : COMPILE_ERROR break contol (instead of return) + * compile.h : COMPILE_ERROR break control (instead of return) * compile.c : support NODE_MASGN @@ -6108,7 +6108,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * insns.def : support super, zsuper (currently, super can't handle with block) - * test/test_bin.rb : add test for op_asgin2, op_assgin_and/or + * test/test_bin.rb : add test for op_assign2, op_assign_and/or * test/test_class.rb : add test for super, zsuper @@ -6272,7 +6272,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * opt_operand.def : add unification insn send * rb/insns2vm.rb : define symbol instead of declare const - variable (for more optmize on VC) + variable (for more optimize on VC) * insns.def : move enter point in send @@ -6322,7 +6322,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada 2004-12-02(Thu) 13:20:41 +0900 Koichi Sasada * yarvcore.c, vm.h, vm.c, insns.def, insnhelper.h, yarvutil.rb : - add usage analisys framework + add usage analysis framework * disasm.c : insn_operand_intern to separate function @@ -6489,7 +6489,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada 2004-11-01(Mon) 04:45:54 +0900 Koichi Sasada * yarvcore.h, compile.c, debug.c, version.h : - redesgin gc debug scheme (GC_CHECK()) + redesign gc debug scheme (GC_CHECK()) * yarvcore.c : mark iseqobj->current_block on GC @@ -6820,7 +6820,7 @@ Sun Dec 31 17:42:05 2006 Koichi Sasada * depend : add tbench rule - * yarvcore.h : add 'exten ID idBackquote' + * yarvcore.h : add 'extern ID idBackquote' 2004-05-18(Tue) 00:09:48 +0900 Koichi Sasada diff --git a/ruby/doc/NEWS-2.0.0 b/ruby/doc/NEWS-2.0.0 index 414789dcd..e070b1997 100644 --- a/ruby/doc/NEWS-2.0.0 +++ b/ruby/doc/NEWS-2.0.0 @@ -116,8 +116,7 @@ with all sufficient information, see the ChangeLog file. corresponding method in the prepending module. * added Module.prepended and Module.prepend_features, similar to included and append_features. - * added Module#refine, which extends a class or module locally. - [experimental] + * added Module#refine, which extends a class or module locally. [experimental] * extended method: * Module#define_method accepts a UnboundMethod from a Module. * Module#const_get accepts a qualified constant string, e.g. @@ -377,7 +376,7 @@ with all sufficient information, see the ChangeLog file. :TLSv1_2, :TLSv1_2_server, :TLSv1_2_client or :TLSv1_1, :TLSv1_1_server :TLSv1_1_client. The version being effectively used can be queried with OpenSSL::SSL#ssl_version. Furthermore, it is also possible to - blacklist the new TLS versions with OpenSSL::SSL:OP_NO_TLSv1_1 and + blacklist the new TLS versions with OpenSSL::SSL::OP_NO_TLSv1_1 and OpenSSL::SSL::OP_NO_TLSv1_2. * Added OpenSSL::SSL::SSLContext#renegotiation_cb. A user-defined callback may be set which gets called whenever a new handshake is negotiated. This diff --git a/ruby/doc/NEWS-2.1.0 b/ruby/doc/NEWS-2.1.0 index 5d4152b8d..26f2374e9 100644 --- a/ruby/doc/NEWS-2.1.0 +++ b/ruby/doc/NEWS-2.1.0 @@ -155,7 +155,7 @@ with all sufficient information, see the ChangeLog file. Foo#foo private. * Kernel#untrusted?, untrust, and trust - * These methods are deprecated and their behavior is same as tainted?, + * These methods are deprecated and their behavior is the same as tainted?, taint, and untaint, respectively. If $VERBOSE is true, they show warnings. * Module#ancestors diff --git a/ruby/doc/NEWS-2.2.0 b/ruby/doc/NEWS-2.2.0 index 5564c606a..8b2bd0ba0 100644 --- a/ruby/doc/NEWS-2.2.0 +++ b/ruby/doc/NEWS-2.2.0 @@ -90,7 +90,7 @@ with all sufficient information, see the ChangeLog file. * Method * New methods: - * Method#curry([arity]) returns a curried Proc. + * Method#curry([ arity ]) returns a curried Proc. * Method#super_method returns a Method of superclass, which would be called when super is used. @@ -250,8 +250,7 @@ with all sufficient information, see the ChangeLog file. * Logger::Application is extracted to logger-application gem. It's unmaintain code. * ObjectSpace (after requiring "objspace") - * ObjectSpace.memsize_of(obj) returns a size includes sizeof(RVALUE). - [Bug #8984] + * ObjectSpace.memsize_of(obj) returns a size includes sizeof(RVALUE). [Bug #8984] * Prime * incompatible changes: @@ -319,7 +318,7 @@ with all sufficient information, see the ChangeLog file. * rb_sym2str() added. This is almost same as `rb_id2str(SYM2ID(sym))` but not pinning a dynamic symbol. -* rb_str_cat_cstr() added. This is same as `rb_str_cat2()`. +* rb_str_cat_cstr() added. This is the same as `rb_str_cat2()`. * `rb_str_substr()` and `rb_str_subseq()` will share middle of a string, but not only the end of a string, in the future. Therefore, result @@ -353,8 +352,7 @@ with all sufficient information, see the ChangeLog file. * VM * Use frozen string literals for Hash#[] and Hash#[]= * Fast keyword arguments passing [Feature #10440] - * Allow to receive huge splatted array by a rest argument - [Feature #10440] + * Allow to receive huge splatted array by a rest argument [Feature #10440] * Process * Process creation methods, such as spawn(), uses vfork() system call. diff --git a/ruby/doc/NEWS-2.3.0 b/ruby/doc/NEWS-2.3.0 index 489aba4a8..065515257 100644 --- a/ruby/doc/NEWS-2.3.0 +++ b/ruby/doc/NEWS-2.3.0 @@ -16,20 +16,19 @@ with all sufficient information, see the ChangeLog file or Redmine * frozen-string-literal pragma: - * new pragma, frozen-string-literal has been experimentally introduced. - [Feature #8976] + * new pragma, frozen-string-literal has been experimentally introduced. [Feature #8976] * besides, --enable/--disable=frozen-string-literal options also have been introduced. [Feature #8976] * command line options --debug or --debug=frozen-string-literal enable additional debugging mode which shows created location with at frozen - object error (RuntimeError). - [Feature #11725] + object error (RuntimeError). [Feature #11725] * safe navigation operator: * new method call syntax, `object&.foo', method #foo is called on - `object' if it is not nil. - this is similar to `try!' in Active Support, except: + `object' if it is not nil. [Feature #11537] + + This is similar to `try!' in Active Support, except: * method name is syntactically required obj.try! {} # valid obj&. {} # syntax error @@ -38,7 +37,6 @@ with all sufficient information, see the ChangeLog file or Redmine obj&.foo(bar()) # bar() is conditionally evaluated * attribute assignment is valid obj&.attr += 1 - [Feature #11537] * the did_you_mean gem: @@ -53,15 +51,13 @@ with all sufficient information, see the ChangeLog file or Redmine * indented here document: * new string literal, here document starts with `<<~`. - refer doc/syntax/literals.rdoc for more details. - [Feature #9098] + refer doc/syntax/literals.rdoc for more details. [Feature #9098] === Core classes updates (outstanding ones only) * ARGF - * ARGF.read_nonblock supports `exception: false' like IO#read_nonblock. - [Feature #11358] + * ARGF.read_nonblock supports `exception: false' like IO#read_nonblock. [Feature #11358] * Array @@ -78,8 +74,7 @@ with all sufficient information, see the ChangeLog file or Redmine * Enumerable - * Enumerable#grep_v is added as inverse version of Enumerable#grep. - [Feature #11049] + * Enumerable#grep_v is added as inverse version of Enumerable#grep. [Feature #11049] * Enumerable#chunk_while [Feature #10769] * Enumerator::Lazy @@ -105,8 +100,7 @@ with all sufficient information, see the ChangeLog file or Redmine this affect only files opened as binary. [Feature #11218] * new option parameter `flags' is added. - this parameter is bitwise-ORed to oflags generated by normal mode argument. - [Feature #11253] + this parameter is bitwise-ORed to oflags generated by normal mode argument. [Feature #11253] * IO#advise no longer raises Errno::ENOSYS in cases where it was detected at build time but not available at runtime. [Feature #11806] @@ -125,8 +119,7 @@ with all sufficient information, see the ChangeLog file or Redmine * Numeric * Numeric#positive? and Numeric#negative? are added, which return - true when the receiver is positive and negative respectively. - [Feature #11151] + true when the receiver is positive and negative respectively. [Feature #11151] * Proc @@ -152,11 +145,9 @@ with all sufficient information, see the ChangeLog file or Redmine * String - * String#+@ and String#-@ are added to get mutable/frozen strings. - [Feature #11782] + * String#+@ and String#-@ are added to get mutable/frozen strings. [Feature #11782] - * String.new now accepts new option parameter `encoding'. - [Feature #11785] + * String.new now accepts new option parameter `encoding'. [Feature #11785] * Struct * Struct#dig [Feature #11688] @@ -233,12 +224,10 @@ with all sufficient information, see the ChangeLog file or Redmine * OpenSSL * OpenSSL::SSL::SSLSocket#accept_nonblock and - OpenSSL::SSL::SSLSocket#connect_nonblock supports `exception: false`. - [Feature #10532] + OpenSSL::SSL::SSLSocket#connect_nonblock supports `exception: false`. [Feature #10532] * Pathname - * Pathname#descend and Pathname#ascend supported blockless form. - [Feature #11052] + * Pathname#descend and Pathname#ascend supported blockless form. [Feature #11052] * Socket * Socket#connect_nonblock, Socket#accept_nonblock, @@ -246,8 +235,7 @@ with all sufficient information, see the ChangeLog file or Redmine BasicSocket#recv_nonblock, BasicSocket#recvmsg_nonblock, BasicSocket#sendmsg_nonblock all support `exception: false` to return :wait_readable or :wait_writable symbols instead of raising - IO::WaitReadable or IO::WaitWritable exceptions - [Feature #10532] [Feature #11229] + IO::WaitReadable or IO::WaitWritable exceptions [Feature #10532] [Feature #11229] * BasicSocket#recv and BasicSocket#recv_nonblock allow an output String buffer argument like IO#read and IO#read_nonblock to reduce GC overhead [Feature #11242] @@ -255,8 +243,7 @@ with all sufficient information, see the ChangeLog file or Redmine * StringIO * In read-only mode, StringIO#set_encoding no longer sets the encoding of its buffer string. Setting the encoding of the string directly - without StringIO#set_encoding may cause unpredictable behavior now. - [Bug #11827] + without StringIO#set_encoding may cause unpredictable behavior now. [Bug #11827] * timeout * Object#timeout is now warned as deprecated when called. @@ -297,8 +284,7 @@ with all sufficient information, see the ChangeLog file or Redmine * default value of Net::HTTP#open_timeout is now 60 (was nil). * Net::Telnet - * Net::Telnet is extracted to net-telnet gem. It's unmaintain code. - [Feature #11083] + * Net::Telnet is extracted to net-telnet gem. It's unmaintain code. [Feature #11083] * Psych * Updated to Psych 2.0.17 @@ -330,8 +316,7 @@ with all sufficient information, see the ChangeLog file or Redmine class is already defined but its superclass does not match the given superclass, as well as definitions in ruby level. -* rb_timespec_now() is added to fetch current datetime as struct timespec. - [Feature #11558] +* rb_timespec_now() is added to fetch current datetime as struct timespec. [Feature #11558] * rb_time_timespec_new() is added to create a time object with epoch, nanosecond, and UTC/localtime/time offset arguments. [Feature #11558] @@ -354,11 +339,9 @@ with all sufficient information, see the ChangeLog file or Redmine === Implementation improvements -* Optimize Proc#call to eliminate method frame construction. - [Feature #11569] +* Optimize Proc#call to eliminate method frame construction. [Feature #11569] -* Reconsidering method entry data structure. - [Bug #11278] +* Reconsidering method entry data structure. [Bug #11278] * Introducing new table data structure for ID keys tables used by method table and so on. New table structure is simple and fast @@ -367,13 +350,11 @@ with all sufficient information, see the ChangeLog file or Redmine * Machine code level tuning for object allocation and method calling code. r52099, r52254 -* RubyVM::InstructionSequence is extended for future improvement. - [Feature #11788] +* RubyVM::InstructionSequence is extended for future improvement. [Feature #11788] * Case dispatch is now optimized for all special constant literals including nil, true, and false. Previously, only literal strings, - symbols, integers and floats compiled to optimized case dispatch. - [Feature #11769] + symbols, integers and floats compiled to optimized case dispatch. [Feature #11769] * Instance variables on non-pure Ruby classes (T_DATA, T_FILE, etc..) is less expensive to store than before. [Feature #11170] @@ -382,8 +363,7 @@ with all sufficient information, see the ChangeLog file or Redmine constant-time. Previously, Struct elements beyond the first 10 elements used a linear scan. [Feature #10585] -* The Set class got several speed up. - [Misc #10754], [r52591] +* The Set class got several speed up. [Misc #10754], [r52591] * Socket and I/O-related improvements @@ -397,8 +377,8 @@ with all sufficient information, see the ChangeLog file or Redmine addition to reducing expensive exceptions. [Feature #11044] * (Linux-only) waiting on a single FD anywhere in the stdlib no longer - uses select(2), making it immune to slowdowns with high-numbered FDs. - [Feature #11081] [Feature #11377] + uses select(2), making it immune to slowdowns with high-numbered + FDs. [Feature #11081] [Feature #11377] * CGI.escapeHTML is optimized with C extension. https://github.com/ruby/ruby/pull/1164 diff --git a/ruby/doc/NEWS-2.4.0 b/ruby/doc/NEWS-2.4.0 index 28e855cde..8a02f0380 100644 --- a/ruby/doc/NEWS-2.4.0 +++ b/ruby/doc/NEWS-2.4.0 @@ -14,16 +14,13 @@ with all sufficient information, see the ChangeLog file or Redmine === Language changes -* Multiple assignment in conditional expression is now allowed. - [Feature #10617] +* Multiple assignment in conditional expression is now allowed. [Feature #10617] * Refinements is enabled at method by Symbol#to_proc. [Feature #9451] -* Refinements is enabled with Kernel#send and BasicObject#__send__. - [Feature #11476] +* Refinements is enabled with Kernel#send and BasicObject#__send__. [Feature #11476] -* Rescue modifier now applicable to method arguments. - [Feature #12686] +* Rescue modifier now applicable to method arguments. [Feature #12686] * Toplevel return is now allowed. [Feature #4840] @@ -32,17 +29,21 @@ with all sufficient information, see the ChangeLog file or Redmine * Array * Array#concat [Feature #12333] + Now takes multiple arguments. * Array#max and Array#min. [Feature #12172] + This may cause a tiny incompatibility: if you redefine Enumerable#max and call max to an Array, your redefinition will be now ignored. You should also redefine Array#max. * Array#pack [Feature #12754] + Now takes optional argument `buffer:' to reuse already allocated buffer. * Array#sum [Feature #12217] + This is different from Enumerable#sum in that Array#sum doesn't depend on the definition of each method. @@ -56,8 +57,7 @@ with all sufficient information, see the ChangeLog file or Redmine * Enumerable - * Enumerable#chunk called without a block now return an Enumerator - [Feature #2172] + * Enumerable#chunk called without a block now return an Enumerator [Feature #2172] * Enumerable#sum [Feature #12217] * Enumerable#uniq [Feature #11090] @@ -95,6 +95,7 @@ with all sufficient information, see the ChangeLog file or Redmine * Integer#round now takes an optional keyword argument, half option, and the default behavior is round-up now. [Bug #12548] [Bug #12958] + half option can be one of :even, :up, and :down. [Feature #12953] * IO @@ -104,8 +105,7 @@ with all sufficient information, see the ChangeLog file or Redmine * Kernel - * Kernel#clone now takes an optional keyword argument, freeze flag. - [Feature #12300] + * Kernel#clone now takes an optional keyword argument, freeze flag. [Feature #12300] * MatchData @@ -138,6 +138,7 @@ with all sufficient information, see the ChangeLog file or Redmine for UTR #51 Unicode Emoji, Version 4.0 emoji zwj sequences. * Regexp#match? [Feature #8110] + This returns bool and doesn't save backref. * Update to Onigmo 6.0.0. @@ -153,6 +154,7 @@ with all sufficient information, see the ChangeLog file or Redmine * String#casecmp? [Feature #12786] * String#concat, String#prepend [Feature #12333] + Now takes multiple arguments. * String#each_line, String#lines now takes an optional keyword argument, @@ -189,8 +191,7 @@ with all sufficient information, see the ChangeLog file or Redmine * Thread - * Thread#report_on_exception and Thread.report_on_exception - [Feature #6647] + * Thread#report_on_exception and Thread.report_on_exception [Feature #6647] * TracePoint @@ -200,8 +201,7 @@ with all sufficient information, see the ChangeLog file or Redmine * New module named Warning is introduced. By default it has only one singleton method, named warn. This makes it possible for - 3rd-party libraries to control the way warnings are handled. - [Feature #12299] + 3rd-party libraries to control the way warnings are handled. [Feature #12299] === Stdlib updates (outstanding ones only) @@ -215,8 +215,7 @@ with all sufficient information, see the ChangeLog file or Redmine * IPAddr - * IPAddr#== and IPAddr#<=> no longer raise an exception if coercion fails. - [Bug #12799] + * IPAddr#== and IPAddr#<=> no longer raise an exception if coercion fails. [Bug #12799] * IRB @@ -256,8 +255,7 @@ with all sufficient information, see the ChangeLog file or Redmine * Readline - * Readline.quoting_detection_proc and Readline.quoting_detection_proc= - [Feature #12659] + * Readline.quoting_detection_proc and Readline.quoting_detection_proc= [Feature #12659] * REXML @@ -267,8 +265,7 @@ with all sufficient information, see the ChangeLog file or Redmine * set - * New methods: Set#compare_by_identity and Set#compare_by_identity?. - [Feature #12210] + * New methods: Set#compare_by_identity and Set#compare_by_identity?. [Feature #12210] * WEBrick @@ -277,6 +274,7 @@ with all sufficient information, see the ChangeLog file or Redmine === Compatibility issues (excluding feature bug fixes) * Array#sum and Enumerable#sum are implemented. [Feature #12217] + Ruby itself has no compatibility problem because Ruby didn't have sum method for arrays before Ruby 2.4. However many third party gems, activesupport, facets, simple_stats, etc, @@ -286,6 +284,7 @@ with all sufficient information, see the ChangeLog file or Redmine be perfectly compatible with all of them. * Fixnum and Bignum are unified into Integer [Feature #12005] + Fixnum class and Bignum class is removed. Integer class is changed from abstract class to concrete class. For example, 0 is an instance of Integer: 0.class returns Integer. @@ -300,6 +299,7 @@ with all sufficient information, see the ChangeLog file or Redmine * String/Symbol#upcase/downcase/swapcase/capitalize(!) now work for all of Unicode, not only for ASCII. [Feature #10085] + No change is needed if the data is in ASCII anyway or if the limitation to ASCII was only tolerated while waiting for a more extensive implementation. A change (using the :ascii option) is needed in cases where Unicode data @@ -307,6 +307,7 @@ with all sufficient information, see the ChangeLog file or Redmine A good example of this are internationalized domain names. * TRUE / FALSE / NIL + These constants are now obsoleted. [Feature #12574] Use true / false / nil resp. instead. @@ -332,8 +333,7 @@ with all sufficient information, see the ChangeLog file or Redmine * Shellwords.shellwords (shellsplit) treats the backslash as escape character only when followed by one of the following characters: - $ ` " \ - [Bug #10055] + $ ` " \ [Bug #10055] * Time @@ -348,11 +348,13 @@ with all sufficient information, see the ChangeLog file or Redmine * Tk * Tk is removed from stdlib. [Feature #8539] + https://github.com/ruby/tk is the new upstream. * XMLRPC * XMLRPC is removed from stdlib, and bundled as gem. [Feature #12160][ruby-core:74239] + https://github.com/ruby/xmlrpc is the new upstream. * Zlib @@ -390,8 +392,8 @@ with all sufficient information, see the ChangeLog file or Redmine === Miscellaneous changes * ChangeLog is removed from the repository. + It is generated from commit messages in Subversion by `make dist`. Also note that now people should follow Git style commit message. - The template is written at - [Short (50 chars or less) summary of changes](https://git-scm.com/book/ch5-2.html). - [Feature #12283] + The template is written at {Short (50 chars or less) summary of + changes}[https://git-scm.com/book/ch5-2.html]. [Feature #12283] diff --git a/ruby/doc/NEWS-2.5.0 b/ruby/doc/NEWS-2.5.0 index c891317b6..af7f3ada0 100644 --- a/ruby/doc/NEWS-2.5.0 +++ b/ruby/doc/NEWS-2.5.0 @@ -466,7 +466,7 @@ with all sufficient information, see the ChangeLog file or Redmine === Compatibility issues (excluding feature bug fixes) -* Socket +* BasicSocket * BasicSocket#read_nonblock and BasicSocket#write_nonblock no longer set the O_NONBLOCK file description flag as side effect diff --git a/ruby/doc/NEWS-2.6.0 b/ruby/doc/NEWS-2.6.0 index 2303a5bd4..6e70696de 100644 --- a/ruby/doc/NEWS-2.6.0 +++ b/ruby/doc/NEWS-2.6.0 @@ -50,24 +50,24 @@ sufficient information, see the ChangeLog file or Redmine === Core classes updates (outstanding ones only) -Array:: +[Array] - New methods:: + [New methods] * Added Array#union and Array#difference instance methods. [Feature #14097] - Modified method:: + [Modified method] * Array#to_h now accepts a block that maps elements to new key/value pairs. [Feature #15143] - Aliased methods:: + [Aliased methods] * Array#filter is a new alias for Array#select. [Feature #13784] * Array#filter! is a new alias for Array#select!. [Feature #13784] -Binding:: +[Binding] - New method:: + [New method] * Added Binding#source_location. [Feature #14230] @@ -79,97 +79,97 @@ Binding:: binding's source location [Bug #4352]. So, users should use this newly-introduced method instead of Kernel#eval. -Dir:: +[Dir] - New methods:: + [New methods] * Added Dir#each_child and Dir#children instance methods. [Feature #13969] -Enumerable:: +[Enumerable] - New method:: + [New method] * Enumerable#chain returns an enumerator object that iterates over the elements of the receiver and then those of each argument in sequence. [Feature #15144] - Modified method:: + [Modified method] * Enumerable#to_h now accepts a block that maps elements to new key/value pairs. [Feature #15143] - Aliased method:: + [Aliased method] * Enumerable#filter is a new alias for Enumerable#select. [Feature #13784] -Enumerator::ArithmeticSequence:: +[Enumerator::ArithmeticSequence] * This is a new class to represent a generator of an arithmetic sequence, that is a number sequence defined by a common difference. It can be used for representing what is similar to Python's slice. You can get an instance of this class from Numeric#step and Range#step. -Enumerator::Chain:: +[Enumerator::Chain] * This is a new class to represent a chain of enumerables that works as a single enumerator, generated by such methods as Enumerable#chain and Enumerator#+. -Enumerator::Lazy:: +[Enumerator::Lazy] - Aliased method:: + [Aliased method] * Enumerator::Lazy#filter is a new alias for Enumerator::Lazy#select. [Feature #13784] -Enumerator:: +[Enumerator] - New methods:: + [New methods] * Enumerator#+ returns an enumerator object that iterates over the elements of the receiver and then those of the other operand. [Feature #15144] -ENV:: +[ENV] - Modified method:: + [Modified method] * ENV.to_h now accepts a block that maps names and values to new keys and values. [Feature #15143] -Exception:: +[Exception] - New options:: + [New options] * Exception#full_message takes +:highlight+ and +:order+ options. [Bug #14324] -Hash:: +[Hash] - Modified methods:: + [Modified methods] * Hash#merge, Hash#merge!, and Hash#update now accept multiple arguments. [Feature #15111] * Hash#to_h now accepts a block that maps keys and values to new keys and values. [Feature #15143] - Aliased methods:: + [Aliased methods] * Hash#filter is a new alias for Hash#select. [Feature #13784] * Hash#filter! is a new alias for Hash#select!. [Feature #13784] -IO:: +[IO] - New option:: + [New option] * Added new mode character 'x' to open files for exclusive access. [Feature #11258] -Kernel:: +[Kernel] - Aliased method:: + [Aliased method] * Kernel#then is a new alias for Kernel#yield_self. [Feature #14594] - New options:: + [New options] * Kernel#Complex, Kernel#Float, Kernel#Integer, and Kernel#Rational take an +:exception+ option to specify the way of @@ -178,98 +178,98 @@ Kernel:: * Kernel#system takes an +:exception+ option to raise an exception on failure. [Feature #14386] - Incompatible changes:: + [Incompatible changes] * Kernel#system and Kernel#exec do not close non-standard file descriptors (the default of the +:close_others+ option is changed to +false+, but we still set the +FD_CLOEXEC+ flag on descriptors we create). [Misc #14907] -KeyError:: +[KeyError] - New options:: + [New options] * KeyError.new accepts +:receiver+ and +:key+ options to set receiver and key in Ruby code. [Feature #14313] -Method:: +[Method] - New methods:: + [New methods] * Added Method#<< and Method#>> for Proc composition. [Feature #6284] -Module:: +[Module] - Modified methods:: + [Modified methods] * Module#method_defined?, Module#private_method_defined?, and Module#protected_method_defined? now accept the second parameter as optional. If it is +true+ (the default value), it checks ancestor modules/classes, or checks only the class itself. [Feature #14944] -NameError:: +[NameError] - New option:: + [New option] * NameError.new accepts a +:receiver+ option to set receiver in Ruby code. [Feature #14313] -NilClass:: +[NilClass] - New method:: + [New method] * NilClass#=~ is added for compatibility. [Feature #15231] -NoMethodError:: +[NoMethodError] - New option:: + [New option] * NoMethodError.new accepts a +:receiver+ option to set receiver in Ruby code. [Feature #14313] -Numeric:: +[Numeric] - Incompatible changes:: + [Incompatible changes] * Numeric#step now returns an instance of the Enumerator::ArithmeticSequence class rather than one of the Enumerator class. -OpenStruct:: +[OpenStruct] - Modified method:: + [Modified method] * OpenStruct#to_h now accepts a block that maps keys and values to new keys and values. [Feature #15143] -Proc:: +[Proc] - New methods:: + [New methods] * Added Proc#<< and Proc#>> for Proc composition. [Feature #6284] - Incompatible changes:: + [Incompatible changes] * Proc#call doesn't change $SAFE any more. [Feature #14250] -Random:: +[Random] - New method:: + [New method] * Added Random.bytes. [Feature #4938] -Range:: +[Range] - New method:: + [New method] * Added Range#% instance method. [Feature #14697] - Incompatible changes:: + [Incompatible changes] * Range#=== now uses the +#cover?+ instead of the +#include?+ method. [Feature #14575] * Range#cover? now accepts a Range object. [Feature #14473] * Range#step now returns an instance of the Enumerator::ArithmeticSequence class rather than one of the Enumerator class. -Regexp/String:: +[Regexp/String] * Update Unicode version from 10.0.0 to 11.0.0. [Feature #14802] @@ -278,9 +278,9 @@ Regexp/String:: * Update Emoji version from 5.0 to 11.0.0 [Feature #14802] -RubyVM::AbstractSyntaxTree:: +[RubyVM::AbstractSyntaxTree] - New methods:: + [New methods] * RubyVM::AbstractSyntaxTree.parse parses a given string and returns AST nodes. [experimental] @@ -291,46 +291,46 @@ RubyVM::AbstractSyntaxTree:: * RubyVM::AbstractSyntaxTree.of returns AST nodes of the given proc or method. [experimental] -RubyVM:: +[RubyVM] - New method:: + [New method] * RubyVM.resolve_feature_path identifies the file that will be loaded by "require(feature)". [experimental] [Feature #15230] -String:: +[String] * String#crypt is now deprecated. [Feature #14915] - New features:: + [New features] * String#split yields each substring to the block if given. [Feature #4780] -Struct:: +[Struct] - Modified method:: + [Modified method] * Struct#to_h now accepts a block that maps keys and values to new keys and values. [Feature #15143] - Aliased method:: + [Aliased method] * Struct#filter is a new alias for Struct#select. [Feature #13784] -Time:: +[Time] - New features:: + [New features] * Time.new and Time#getlocal accept a timezone object as well as a UTC offset string. Time#+, Time#-, and Time#succ also preserve the timezone. [Feature #14850] -TracePoint:: +[TracePoint] - New features:: + [New features] * "script_compiled" event is supported. [Feature #15287] - New methods:: + [New methods] * TracePoint#parameters [Feature #14694] @@ -338,23 +338,23 @@ TracePoint:: * TracePoint#eval_script [Feature #15287] - Modified method:: + [Modified method] * TracePoint#enable accepts new keywords "target:" and "target_line:". [Feature #15289] === Stdlib updates (outstanding ones only) -BigDecimal:: +[BigDecimal] Update to version 1.4.0. This version includes several compatibility issues, see Compatibility issues section below for details. - Modified method:: + [Modified method] * BigDecimal() accepts the new keyword "exception:" similar to Float(). - Note for the differences among recent versions:: + [Note for the differences among recent versions] You should want to know the differences among recent versions of bigdecimal. Please select the suitable version of bigdecimal according to the following @@ -371,13 +371,13 @@ BigDecimal:: * 2.0.0 will be released soon after releasing Ruby 2.6.0. This version will not have the BigDecimal.new method. -Bundler:: +[Bundler] * Add Bundler to Standard Library. [Feature #12733] * Use 1.17.2, the latest stable version. -Coverage:: +[Coverage] A oneshot_lines mode is added. [Feature #15022] @@ -386,7 +386,7 @@ Coverage:: A hook for each line is fired at most once, and after it is fired the hook flag is removed, i.e., it runs with zero overhead. - New options:: + [New options] * Add +:oneshot_lines+ keyword argument to Coverage.start. @@ -394,20 +394,20 @@ Coverage:: If +clear+ is true, it clears the counters to zero. If +stop+ is true, it disables coverage measurement. - New methods:: + [New methods] * Coverage.line_stub, which is a simple helper function that creates the "stub" of line coverage from a given source code. -CSV:: +[CSV] * Upgrade to 3.0.2. This includes performance improvements especially for writing. Writing is about 2 times faster. See https://github.com/ruby/csv/blob/master/NEWS.md. -ERB:: +[ERB] - New options:: + [New options] * Add +:trim_mode+ and +:eoutvar+ keyword arguments to ERB.new. Now non-keyword arguments other than the first one are softly deprecated @@ -416,15 +416,15 @@ ERB:: * erb command's -S option is deprecated, and will be removed in the next version. -FileUtils:: +[FileUtils] - New methods:: + [New methods] * FileUtils#cp_lr. [Feature #4189] -Matrix:: +[Matrix] - New methods:: + [New methods] * Matrix#antisymmetric?, Matrix#skew_symmetric? @@ -436,30 +436,30 @@ Matrix:: * Vector#[]= -Net:: +[Net] - New options:: + [New options] * Add +:write_timeout+ keyword argument to Net::HTTP.new. [Feature #13396] - New methods:: + [New methods] * Add Net::HTTP#write_timeout and Net::HTTP#write_timeout=. [Feature #13396] - New constant:: + [New constant] * Add Net::HTTPClientException to deprecate Net::HTTPServerException, whose name is misleading. [Bug #14688] -NKF:: +[NKF] * Upgrade to nkf v2.1.5 -Psych:: +[Psych] * Upgrade to Psych 3.1.0 -RDoc:: +[RDoc] * Become about 2 times faster. @@ -478,12 +478,12 @@ RDoc:: * Fix many parsing bugs. -REXML:: +[REXML] * Upgrade to REXML 3.1.9. See https://github.com/ruby/rexml/blob/master/NEWS.md. - Improved some XPath implementations:: + [Improved some XPath implementations] * concat() function: Stringify all arguments before concatenating. @@ -493,7 +493,7 @@ REXML:: * Support "*:#{ELEMENT_NAME}" syntax in XPath 2.0. - Fixed some XPath implementations:: + [Fixed some XPath implementations] * "//#{ELEMENT_NAME}[#{POSITION}]" case @@ -517,14 +517,14 @@ REXML:: * "name(#{NODE_SET})" case -RSS:: +[RSS] - New options:: + [New options] * RSS::Parser.parse now accepts options as Hash. +:validate+ , +:ignore_unknown_element+ , +:parser_class+ options are available. -RubyGems:: +[RubyGems] * Upgrade to RubyGems 3.0.1 @@ -532,32 +532,32 @@ RubyGems:: * https://blog.rubygems.org/2018/12/23/3.0.1-released.html -Set:: +[Set] - Aliased method:: + [Aliased method] * Set#filter! is a new alias for Set#select!. [Feature #13784] -URI:: +[URI] - New constant:: + [New constant] * Add URI::File to handle the file URI scheme. [Feature #14035] === Compatibility issues (excluding feature bug fixes) -Dir:: +[Dir] * Dir.glob with '\0'-separated pattern list will be deprecated, and is now warned. [Feature #14643] -File:: +[File] * File.read, File.binread, File.write, File.binwrite, File.foreach, and File.readlines do not invoke external commands even if the path starts with the pipe character '|'. [Feature #14245] -Object:: +[Object] * Object#=~ is deprecated. [Feature #15231] @@ -580,7 +580,7 @@ Object:: * thwait * tracer -BigDecimal:: +[BigDecimal] * The following methods are removed. @@ -595,7 +595,7 @@ BigDecimal:: * BigDecimal.new will be removed in version 2.0. -Pathname:: +[Pathname] * Pathname#read, Pathname#binread, Pathname#write, Pathname#binwrite, Pathname#each_line and Pathname#readlines do not invoke external @@ -650,12 +650,12 @@ Pathname:: in their names. This eliminates the burden of each teeny upgrade on the platform that users need to rebuild every extension library. - Before:: + [Before] * libruby.2.6.0.dylib * libruby.2.6.dylib -> libruby.2.6.0.dylib * libruby.dylib -> libruby.2.6.0.dylib - After:: + [After] * libruby.2.6.dylib * libruby.dylib -> libruby.2.6.dylib diff --git a/ruby/doc/NEWS-2.7.0 b/ruby/doc/NEWS-2.7.0 new file mode 100644 index 000000000..184b47fb8 --- /dev/null +++ b/ruby/doc/NEWS-2.7.0 @@ -0,0 +1,835 @@ +# -*- rdoc -*- + += NEWS for Ruby 2.7.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. https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER). + +== Changes since the 2.6.0 release + +=== Language changes + +==== Pattern matching + +* Pattern matching is introduced as an experimental feature. [Feature #14912] + + case [0, [1, 2, 3]] + in [a, [b, *c]] + p a #=> 0 + p b #=> 1 + p c #=> [2, 3] + end + + case {a: 0, b: 1} + in {a: 0, x: 1} + :unreachable + in {a: 0, b: var} + p var #=> 1 + end + + case -1 + in 0 then :unreachable + in 1 then :unreachable + end #=> NoMatchingPatternError + + json = < "Bob" + p age #=> 2 + + JSON.parse(json, symbolize_names: true) in {name: "Alice", children: [{name: "Charlie", age: age}]} + #=> NoMatchingPatternError + +* See the following slides for more details: + * https://speakerdeck.com/k_tsj/pattern-matching-new-feature-in-ruby-2-dot-7 + * Note that the slides are slightly obsolete. + +* The warning against pattern matching can be suppressed with + {-W:no-experimental option}[#label-Warning+option]. + +==== The spec of keyword arguments is changed towards 3.0 + +* Automatic conversion of keyword arguments and positional arguments is + deprecated, and conversion will be removed in Ruby 3. [Feature #14183] + + * When a method call passes a Hash at the last argument, and when it + passes no keywords, and when the called method accepts keywords, + a warning is emitted. To continue treating the hash as keywords, + add a double splat operator to avoid the warning and ensure + correct behavior in Ruby 3. + + def foo(key: 42); end; foo({key: 42}) # warned + def foo(**kw); end; foo({key: 42}) # warned + def foo(key: 42); end; foo(**{key: 42}) # OK + def foo(**kw); end; foo(**{key: 42}) # OK + + * When a method call passes keywords to a method that accepts keywords, + but it does not pass enough required positional arguments, the + keywords are treated as a final required positional argument, and a + warning is emitted. Pass the argument as a hash instead of keywords + to avoid the warning and ensure correct behavior in Ruby 3. + + def foo(h, **kw); end; foo(key: 42) # warned + def foo(h, key: 42); end; foo(key: 42) # warned + def foo(h, **kw); end; foo({key: 42}) # OK + def foo(h, key: 42); end; foo({key: 42}) # OK + + * When a method accepts specific keywords but not a keyword splat, and + a hash or keywords splat is passed to the method that includes both + Symbol and non-Symbol keys, the hash will continue to be split, and + a warning will be emitted. You will need to update the calling code + to pass separate hashes to ensure correct behavior in Ruby 3. + + def foo(h={}, key: 42); end; foo("key" => 43, key: 42) # warned + def foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # warned + def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK + + * If a method does not accept keywords, and is called with keywords, + the keywords are still treated as a positional hash, with no warning. + This behavior will continue to work in Ruby 3. + + def foo(opt={}); end; foo( key: 42 ) # OK + +* Non-symbols are allowed as keyword argument keys if the method accepts + arbitrary keywords. [Feature #14183] + + * Non-Symbol keys in a keyword arguments hash were prohibited in 2.6.0, + but are now allowed again. [Bug #15658] + + def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1} + +* **nil is allowed in method definitions to explicitly mark + that the method accepts no keywords. Calling such a method with keywords + will result in an ArgumentError. [Feature #14183] + + def foo(h, **nil); end; foo(key: 1) # ArgumentError + def foo(h, **nil); end; foo(**{key: 1}) # ArgumentError + def foo(h, **nil); end; foo("str" => 1) # ArgumentError + def foo(h, **nil); end; foo({key: 1}) # OK + def foo(h, **nil); end; foo({"str" => 1}) # OK + +* Passing an empty keyword splat to a method that does not accept keywords + no longer passes an empty hash, unless the empty hash is necessary for + a required parameter, in which case a warning will be emitted. Remove + the double splat to continue passing a positional hash. [Feature #14183] + + h = {}; def foo(*a) a end; foo(**h) # [] + h = {}; def foo(a) a end; foo(**h) # {} and warning + h = {}; def foo(*a) a end; foo(h) # [{}] + h = {}; def foo(a) a end; foo(h) # {} + +* Above warnings can be suppressed also with {-W:no-deprecated option}[#label-Warning+option]. + +==== Numbered parameters + +* Numbered parameters as default block parameters are introduced. [Feature #4475] + + [1, 2, 10].map { _1.to_s(16) } #=> ["1", "2", "a"] + [[1, 2], [3, 4]].map { _1 + _2 } #=> [3, 7] + + You can still define a local variable named +_1+ and so on, + and that is honored when present, but renders a warning. + + _1 = 0 #=> warning: `_1' is reserved for numbered parameter; consider another name + [1].each { p _1 } # prints 0 instead of 1 + +==== proc/lambda without block is deprecated + +* Proc.new and Kernel#proc with no block in a method called with a block will + now display a warning. + + def foo + proc + end + foo { puts "Hello" } #=> warning: Capturing the given block using Kernel#proc is deprecated; use `&block` instead + + This warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option]. + +* Kernel#lambda with no block in a method called with a block raises an exception. + + def bar + lambda + end + bar { puts "Hello" } #=> tried to create Proc object without a block (ArgumentError) + +==== Other miscellaneous changes + +* A beginless range is experimentally introduced. It might be useful + in +case+, new call-sequence of the Comparable#clamp, + constants and DSLs. [Feature #14799] + + ary[..3] # identical to ary[0..3] + + case RUBY_VERSION + when ..."2.4" then puts "EOL" + # ... + end + + age.clamp(..100) + + where(sales: ..100) + +* Setting $; to a non-nil value will now display a warning. [Feature #14240] + This includes the usage in String#split. + This warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option]. + +* Setting $, to a non-nil value will now display a warning. [Feature #14240] + This includes the usage in Array#join. + This warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option]. + +* Quoted here-document identifiers must end within the same line. + + <<"EOS + " # This had been warned since 2.4; Now it raises a SyntaxError + EOS + +* The flip-flop syntax deprecation is reverted. [Feature #5400] + +* Comment lines can be placed between fluent dot now. + + foo + # .bar + .baz # => foo.baz + +* Calling a private method with a literal +self+ as the receiver + is now allowed. [Feature #11297] [Feature #16123] + +* Modifier rescue now operates the same for multiple assignment as single + assignment. [Bug #8279] + + a, b = raise rescue [1, 2] + # Previously parsed as: (a, b = raise) rescue [1, 2] + # Now parsed as: a, b = (raise rescue [1, 2]) + +* +yield+ in singleton class syntax will now display a warning. This behavior + will soon be deprecated. [Feature #15575]. + + def foo + class << Object.new + yield #=> warning: `yield' in class syntax will not be supported from Ruby 3.0. [Feature #15575] + end + end + foo { p :ok } + + This warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option]. + +* Argument forwarding by (...) is introduced. [Feature #16253] + + def foo(...) + bar(...) + end + + All arguments to +foo+ are forwarded to +bar+, including keyword and + block arguments. + Note that the parentheses are mandatory. bar ... is parsed + as an endless range. + +* Access and setting of $SAFE will now always display a warning. + $SAFE will become a normal global variable in Ruby 3.0. [Feature #16131] + +* Object#{taint,untaint,trust,untrust} and related functions in the C-API + no longer have an effect (all objects are always considered untainted), and will now + display a warning in verbose mode. This warning will be disabled even in non-verbose mode in + Ruby 3.0, and the methods and C functions will be removed in Ruby 3.2. [Feature #16131] + +* Refinements take place at Object#method and Module#instance_method. [Feature #15373] + +=== Command line options + +==== Warning option + +The +-W+ option has been extended with a following +:+, to manage categorized +warnings. [Feature #16345] [Feature #16420] + +* To suppress deprecation warnings: + + $ ruby -e '$; = ""' + -e:1: warning: `$;' is deprecated + + $ ruby -W:no-deprecated -e '$; = //' + +* It works with the +RUBYOPT+ environment variable: + + $ RUBYOPT=-W:no-deprecated ruby -e '$; = //' + +* To suppress experimental feature warnings: + + $ ruby -e '0 in a' + -e:1: warning: Pattern matching is experimental, and the behavior may change in future versions of Ruby! + + $ ruby -W:no-experimental -e '0 in a' + +* To suppress both by using +RUBYOPT+, set space separated values: + + $ RUBYOPT='-W:no-deprecated -W:no-experimental' ruby -e '($; = "") in a' + +See also Warning in {Core classes updates}[#label-Core+classes+updates+-28outstanding+ones+only-29]. + +=== Core classes updates (outstanding ones only) + +[Array] + + [New methods] + + * Added Array#intersection. [Feature #16155] + + * Added Array#minmax, with a faster implementation than Enumerable#minmax. [Bug #15929] + +[Comparable] + + [Modified method] + + * Comparable#clamp now accepts a Range argument. [Feature #14784] + + -1.clamp(0..2) #=> 0 + 1.clamp(0..2) #=> 1 + 3.clamp(0..2) #=> 2 + # With beginless and endless ranges: + -1.clamp(0..) #=> 0 + 3.clamp(..2) #=> 2 + + +[Complex] + + [New method] + + * Added Complex#<=>. + So 0 <=> 0i will not raise NoMethodError. [Bug #15857] + +[Dir] + + [Modified methods] + + * Dir.glob and Dir.[] no longer allow NUL-separated glob pattern. + Use Array instead. [Feature #14643] + +[Encoding] + + [New encoding] + + * Added new encoding CESU-8. [Feature #15931] + +[Enumerable] + + [New methods] + + * Added Enumerable#filter_map. [Feature #15323] + + [1, 2, 3].filter_map {|x| x.odd? ? x.to_s : nil } #=> ["1", "3"] + + * Added Enumerable#tally. [Feature #11076] + + ["A", "B", "C", "B", "A"].tally #=> {"A"=>2, "B"=>2, "C"=>1} + +[Enumerator] + + [New methods] + + * Added Enumerator.produce to generate an Enumerator from any custom + data transformation. [Feature #14781] + + require "date" + dates = Enumerator.produce(Date.today, &:succ) #=> infinite sequence of dates + dates.detect(&:tuesday?) #=> next Tuesday + + * Added Enumerator::Lazy#eager that generates a non-lazy enumerator + from a lazy enumerator. [Feature #15901] + + a = %w(foo bar baz) + e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.eager + p e.class #=> Enumerator + p e.map {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"] + + * Added Enumerator::Yielder#to_proc so that a Yielder object + can be directly passed to another method as a block + argument. [Feature #15618] + +[Fiber] + + [New method] + + * Added Fiber#raise that behaves like Fiber#resume but raises an + exception on the resumed fiber. [Feature #10344] + +[File] + + [New method] + + * Added File.absolute_path? to check whether a path is absolute or + not in a portable way. [Feature #15868] + + File.absolute_path?("/foo") # => true (on *nix) + File.absolute_path?("C:/foo") # => true (on Windows) + File.absolute_path?("foo") # => false + + [Modified method] + + * File.extname now returns a dot string for names ending with a dot on + non-Windows platforms. [Bug #15267] + + File.extname("foo.") #=> "." + +[FrozenError] + + [New method] + + * Added FrozenError#receiver to return the frozen object on which + modification was attempted. To set this object when raising + FrozenError in Ruby code, FrozenError.new accepts a +:receiver+ + option. [Feature #15751] + +[GC] + + [New method] + + * Added GC.compact method for compacting the heap. + This function compacts live objects in the heap so that fewer pages may + be used, and the heap may be more CoW (copy-on-write) friendly. [Feature #15626] + + Details on the algorithm and caveats can be found here: + https://bugs.ruby-lang.org/issues/15626 + +[IO] + + [New method] + + * Added IO#set_encoding_by_bom to check the BOM and set the external + encoding. [Bug #15210] + +[Integer] + + [Modified method] + + * Integer#[] now supports range operations. [Feature #8842] + + 0b01001101[2, 4] #=> 0b0011 + 0b01001100[2..5] #=> 0b0011 + 0b01001100[2...6] #=> 0b0011 + # ^^^^ + +[Method] + + [Modified method] + + * Method#inspect shows more information. [Feature #14145] + +[Module] + + [New methods] + + * Added Module#const_source_location to retrieve the location where a + constant is defined. [Feature #10771] + + * Added Module#ruby2_keywords for marking a method as passing keyword + arguments through a regular argument splat, useful when delegating + all arguments to another method in a way that can be backwards + compatible with older Ruby versions. [Bug #16154] + + [Modified methods] + + * Module#autoload? now takes an +inherit+ optional argument, like + Module#const_defined?. [Feature #15777] + + * Module#name now always returns a frozen String. The returned String is + always the same for a given Module. This change is + experimental. [Feature #16150] + +[NilClass / TrueClass / FalseClass] + + [Modified methods] + + * NilClass#to_s, TrueClass#to_s, and FalseClass#to_s now always return a + frozen String. The returned String is always the same for each of these + values. This change is experimental. [Feature #16150] + +[ObjectSpace::WeakMap] + + [Modified method] + + * ObjectSpace::WeakMap#[]= now accepts special objects as either key or + values. [Feature #16035] + +[Proc] + + [New method] + + * Added Proc#ruby2_keywords for marking the proc as passing keyword + arguments through a regular argument splat, useful when delegating + all arguments to another method or proc in a way that can be backwards + compatible with older Ruby versions. [Feature #16404] + +[Range] + + [New method] + + * Added Range#minmax, with a faster implementation than Enumerable#minmax. + It returns a maximum that now corresponds to Range#max. [Bug #15807] + + [Modified method] + + * Range#=== now uses Range#cover? for String arguments, too (in Ruby 2.6, it was + changed from Range#include? for all types except strings). [Bug #15449] + + +[RubyVM] + + [Removed method] + + * +RubyVM.resolve_feature_path+ moved to + $LOAD_PATH.resolve_feature_path. [Feature #15903] [Feature #15230] + +[String] + + [Unicode] + + * Update Unicode version and Emoji version from 11.0.0 to + 12.0.0. [Feature #15321] + + * Update Unicode version to 12.1.0, adding support for + U+32FF SQUARE ERA NAME REIWA. [Feature #15195] + + * Update Unicode Emoji version to 12.1. [Feature #16272] + +[Symbol] + + [New methods] + + * Added Symbol#start_with? and Symbol#end_with? methods. [Feature #16348] + +[Time] + + [New methods] + + * Added Time#ceil method. [Feature #15772] + + * Added Time#floor method. [Feature #15653] + + [Modified method] + + * Time#inspect is separated from Time#to_s and it shows + the time's sub second. [Feature #15958] + +[UnboundMethod] + + [New method] + + * Added UnboundMethod#bind_call method. [Feature #15955] + + umethod.bind_call(obj, ...) is semantically equivalent + to umethod.bind(obj).call(...). This idiom is used in + some libraries to call a method that is overridden. The added + method does the same without allocation of an intermediate Method + object. + + class Foo + def add_1(x) + x + 1 + end + end + class Bar < Foo + def add_1(x) # override + x + 2 + end + end + + obj = Bar.new + p obj.add_1(1) #=> 3 + p Foo.instance_method(:add_1).bind(obj).call(1) #=> 2 + p Foo.instance_method(:add_1).bind_call(obj, 1) #=> 2 + +[Warning] + + [New methods] + + * Added Warning.[] and Warning.[]= to manage emitting/suppressing + some categories of warnings. [Feature #16345] [Feature #16420] + +[$LOAD_PATH] + + [New method] + + * Added $LOAD_PATH.resolve_feature_path. [Feature #15903] [Feature #15230] + +=== Stdlib updates (outstanding ones only) + +[Bundler] + + * Upgrade to Bundler 2.1.2. + See https://github.com/bundler/bundler/releases/tag/v2.1.2 + +[CGI] + + * CGI.escapeHTML becomes 2~5x faster when there is at least one escaped character. + See https://github.com/ruby/ruby/pull/2226 + +[CSV] + + * Upgrade to 3.1.2. + See https://github.com/ruby/csv/blob/master/NEWS.md. + +[Date] + + * Date.jisx0301, Date#jisx0301, and Date.parse support the new Japanese + era. [Feature #15742] + +[Delegator] + + * Object#DelegateClass accepts a block and module_evals it in the context + of the returned class, similar to Class.new and Struct.new. + +[ERB] + + * Prohibit marshaling ERB instance. + +[IRB] + + * Introduce syntax highlighting inspired by the Pry gem to Binding#irb + source lines, REPL input, and inspect output of some core-class objects. + + * Introduce multiline editing mode provided by Reline. + + * Show documentation when completion. + + * Enable auto indent and save/load history by default. + +[JSON] + + * Upgrade to 2.3.0. + +[Net::FTP] + + * Add Net::FTP#features to check available features, and Net::FTP#option to + enable/disable each of them. [Feature #15964] + +[Net::HTTP] + + * Add +ipaddr+ optional parameter to Net::HTTP#start to replace the address for + the TCP/IP connection. [Feature #5180] + +[Net::IMAP] + + * Add Server Name Indication (SNI) support. [Feature #15594] + +[open-uri] + + * Warn open-uri's "open" method at Kernel. + Use URI.open instead. [Misc #15893] + + * The default charset of "text/*" media type is UTF-8 instead of + ISO-8859-1. [Bug #15933] + +[OptionParser] + + * Now show "Did you mean?" for unknown options. [Feature #16256] + + test.rb: + + require "optparse" + OptionParser.new do |opts| + opts.on("-f", "--foo", "foo") {|v| } + opts.on("-b", "--bar", "bar") {|v| } + opts.on("-c", "--baz", "baz") {|v| } + end.parse! + + example: + + $ ruby test.rb --baa + Traceback (most recent call last): + test.rb:7:in `
': invalid option: --baa (OptionParser::InvalidOption) + Did you mean? baz + bar + +[Pathname] + + * Pathname.glob now delegates 3 arguments to Dir.glob + to accept +base+ keyword. [Feature #14405] + +[Racc] + + * Merge 1.4.15 from upstream repository and added cli of racc. + +[Reline] + + * New stdlib that is compatible with the readline stdlib but is + implemented in pure Ruby. It also provides a multiline editing mode. + +[REXML] + + * Upgrade to 3.2.3. + See https://github.com/ruby/rexml/blob/master/NEWS.md. + +[RSS] + + * Upgrade to RSS 0.2.8. + See https://github.com/ruby/rss/blob/master/NEWS.md. + +[RubyGems] + + * Upgrade to RubyGems 3.1.2. + * https://github.com/rubygems/rubygems/releases/tag/v3.1.0 + * https://github.com/rubygems/rubygems/releases/tag/v3.1.1 + * https://github.com/rubygems/rubygems/releases/tag/v3.1.2 + +[StringScanner] + + * Upgrade to 1.0.3. + See https://github.com/ruby/strscan/blob/master/NEWS.md. + +=== Compatibility issues (excluding feature bug fixes) + +* The following libraries are no longer bundled gems. + Install corresponding gems to use these features. + * CMath (cmath gem) + * Scanf (scanf gem) + * Shell (shell gem) + * Synchronizer (sync gem) + * ThreadsWait (thwait gem) + * E2MM (e2mmap gem) + +[Proc] + * The Proc#to_s format was changed. [Feature #16101] + +[Range] + * Range#minmax used to iterate on the range to determine the maximum. + It now uses the same algorithm as Range#max. In rare cases (e.g. + ranges of Floats or Strings), this may yield different results. [Bug #15807] + +=== Stdlib compatibility issues (excluding feature bug fixes) + +* Promote stdlib to default gems + * The following default gems were published on rubygems.org + * benchmark + * cgi + * delegate + * getoptlong + * net-pop + * net-smtp + * open3 + * pstore + * readline + * readline-ext + * singleton + * The following default gems were only promoted at ruby-core, + but not yet published on rubygems.org. + * monitor + * observer + * timeout + * tracer + * uri + * yaml +* The did_you_mean gem has been promoted up to a default gem from a bundled gem + +[pathname] + + * Kernel#Pathname when called with a Pathname argument now returns + the argument instead of creating a new Pathname. This is more + similar to other Kernel methods, but can break code that modifies + the return value and expects the argument not to be modified. + +[profile.rb, Profiler__] + + * Removed from standard library. It was unmaintained since Ruby 2.0.0. + +=== C API updates + +* Many *_kw functions have been added for setting whether + the final argument being passed should be treated as keywords. You + may need to switch to these functions to avoid keyword argument + separation warnings, and to ensure correct behavior in Ruby 3. + +* The : character in rb_scan_args format string is now + treated as keyword arguments. Passing a positional hash instead of + keyword arguments will emit a deprecation warning. + +* C API declarations with +ANYARGS+ are changed not to use +ANYARGS+. + See https://github.com/ruby/ruby/pull/2404 + +=== Implementation improvements + +[Fiber] + + * Allow selecting different coroutine implementations by using + +--with-coroutine=+, e.g. + + $ ./configure --with-coroutine=ucontext + $ ./configure --with-coroutine=copy + + * Replace previous stack cache with fiber pool cache. The fiber pool + allocates many stacks in a single memory region. Stack allocation + becomes O(log N) and fiber creation is amortized O(1). Around 10x + performance improvement was measured in micro-benchmarks. + https://github.com/ruby/ruby/pull/2224 + +[File] + * File.realpath now uses realpath(3) on many platforms, which can + significantly improve performance. [Feature #15797] + +[Hash] + * Change data structure of small Hash objects. [Feature #15602] + +[Monitor] + * Monitor class is written in C-extension. [Feature #16255] + +[Thread] + + * VM stack memory allocation is now combined with native thread stack, + improving thread allocation performance and reducing allocation related + failures. Around 10x performance improvement was measured in micro-benchmarks. + +[JIT] + + * JIT-ed code is recompiled to less-optimized code when an optimization assumption is invalidated. + + * Method inlining is performed when a method is considered as pure. + This optimization is still experimental and many methods are NOT considered as pure yet. + + * The default value of +--jit-max-cache+ is changed from 1,000 to 100. + + * The default value of +--jit-min-calls+ is changed from 5 to 10,000. + +[RubyVM] + + * Per-call-site method cache, which has been there since around 1.9, was + improved: cache hit rate raised from 89% to 94%. + See https://github.com/ruby/ruby/pull/2583 + +[RubyVM::InstructionSequence] + + * RubyVM::InstructionSequence#to_binary method generates compiled binary. + The binary size is reduced. [Feature #16163] + +=== Miscellaneous changes + +* Support for IA64 architecture has been removed. Hardware for testing was + difficult to find, native fiber code is difficult to implement, and it added + non-trivial complexity to the interpreter. [Feature #15894] + +* Require compilers to support C99. [Misc #15347] + + * Details of our dialect: https://bugs.ruby-lang.org/projects/ruby-master/wiki/C99 + +* Ruby's upstream repository is changed from Subversion to Git. + + * https://git.ruby-lang.org/ruby.git + + * RUBY_REVISION class is changed from Integer to String. + + * RUBY_DESCRIPTION includes Git revision instead of Subversion's one. + +* Support built-in methods in Ruby with the _\_builtin_ syntax. [Feature #16254] + + Some methods are defined in *.rb (such as trace_point.rb). + For example, it is easy to define a method which accepts keyword arguments. diff --git a/ruby/doc/NEWS-3.0.0.md b/ruby/doc/NEWS-3.0.0.md new file mode 100644 index 000000000..00c26fe58 --- /dev/null +++ b/ruby/doc/NEWS-3.0.0.md @@ -0,0 +1,817 @@ +# NEWS for Ruby 3.0.0 + +This document is a list of user visible feature changes +since the **2.7.0** release, except for bug fixes. + +Note that each entry is kept to a minimum, see links for details. + +## Language changes + +* Keyword arguments are now separated from positional arguments. + Code that resulted in deprecation warnings in Ruby 2.7 will now + result in ArgumentError or different behavior. [[Feature #14183]] + +* Procs accepting a single rest argument and keywords are no longer + subject to autosplatting. This now matches the behavior of Procs + accepting a single rest argument and no keywords. + [[Feature #16166]] + + ```ruby + pr = proc{|*a, **kw| [a, kw]} + + pr.call([1]) + # 2.7 => [[1], {}] + # 3.0 => [[[1]], {}] + + pr.call([1, {a: 1}]) + # 2.7 => [[1], {:a=>1}] # and deprecation warning + # 3.0 => [[[1, {:a=>1}]], {}] + ``` + +* Arguments forwarding (`...`) now supports leading arguments. + [[Feature #16378]] + + ```ruby + def method_missing(meth, ...) + send(:"do_#{meth}", ...) + end + ``` + +* Pattern matching (`case/in`) is no longer experimental. [[Feature #17260]] + +* One-line pattern matching is redesigned. [EXPERIMENTAL] + + * `=>` is added. It can be used like a rightward assignment. + [[Feature #17260]] + + ```ruby + 0 => a + p a #=> 0 + + {b: 0, c: 1} => {b:} + p b #=> 0 + ``` + + * `in` is changed to return `true` or `false`. [[Feature #17371]] + + ```ruby + # version 3.0 + 0 in 1 #=> false + + # version 2.7 + 0 in 1 #=> raise NoMatchingPatternError + ``` + +* Find-pattern is added. [EXPERIMENTAL] + [[Feature #16828]] + + ```ruby + case ["a", 1, "b", "c", 2, "d", "e", "f", 3] + in [*pre, String => x, String => y, *post] + p pre #=> ["a", 1] + p x #=> "b" + p y #=> "c" + p post #=> [2, "d", "e", "f", 3] + end + ``` + +* Endless method definition is added. [EXPERIMENTAL] + [[Feature #16746]] + + ```ruby + def square(x) = x * x + ``` + +* Interpolated String literals are no longer frozen when + `# frozen-string-literal: true` is used. [[Feature #17104]] + +* Magic comment `shareable_constant_value` added to freeze constants. + See {Magic Comments}[rdoc-ref:syntax/comments.rdoc@Magic+Comments] for more details. + [[Feature #17273]] + +* A {static analysis}[rdoc-label:label-Static+analysis] foundation is + introduced. + * {RBS}[rdoc-label:label-RBS] is introduced. It is a type definition + language for Ruby programs. + * {TypeProf}[rdoc-label:label-TypeProf] is experimentally bundled. It is a + type analysis tool for Ruby programs. + +* Deprecation warnings are no longer shown by default (since Ruby 2.7.2). + Turn them on with `-W:deprecated` (or with `-w` to show other warnings too). + [[Feature #16345]] + +* `$SAFE` and `$KCODE` are now normal global variables with no special behavior. + C-API methods related to `$SAFE` have been removed. + [[Feature #16131]] [[Feature #17136]] + +* yield in singleton class definitions in methods is now a SyntaxError + instead of a warning. yield in a class definition outside of a method + is now a SyntaxError instead of a LocalJumpError. [[Feature #15575]] + +* When a class variable is overtaken by the same definition in an + ancestor class/module, a RuntimeError is now raised (previously, + it only issued a warning in verbose mode). Additionally, accessing a + class variable from the toplevel scope is now a RuntimeError. + [[Bug #14541]] + +* Assigning to a numbered parameter is now a SyntaxError instead of + a warning. + +## Command line options + +### `--help` option + +When the environment variable `RUBY_PAGER` or `PAGER` is present and has +a non-empty value, and the standard input and output are tty, the `--help` +option shows the help message via the pager designated by the value. +[[Feature #16754]] + +### `--backtrace-limit` option + +The `--backtrace-limit` option limits the maximum length of a backtrace. +[[Feature #8661]] + +## Core classes updates + +Outstanding ones only. + +* Array + + * The following methods now return Array instances instead of + subclass instances when called on subclass instances: + [[Bug #6087]] + + * Array#drop + * Array#drop_while + * Array#flatten + * Array#slice! + * Array#slice / Array#[] + * Array#take + * Array#take_while + * Array#uniq + * Array#* + + * Can be sliced with Enumerator::ArithmeticSequence + + ```ruby + dirty_data = ['--', 'data1', '--', 'data2', '--', 'data3'] + dirty_data[(1..).step(2)] # take each second element + # => ["data1", "data2", "data3"] + ``` + +* Binding + + * Binding#eval when called with one argument will use `"(eval)"` + for `__FILE__` and `1` for `__LINE__` in the evaluated code. + [[Bug #4352]] [[Bug #17419]] + +* ConditionVariable + + * ConditionVariable#wait may now invoke the `block`/`unblock` scheduler + hooks in a non-blocking context. [[Feature #16786]] + +* Dir + + * Dir.glob and Dir.[] now sort the results by default, and + accept the `sort:` keyword option. [[Feature #8709]] + +* ENV + + * ENV.except has been added, which returns a hash excluding the + given keys and their values. [[Feature #15822]] + + * Windows: Read ENV names and values as UTF-8 encoded Strings + [[Feature #12650]] + +* Encoding + + * Added new encoding IBM720. [[Feature #16233]] + + * Changed default for Encoding.default_external to UTF-8 on Windows + [[Feature #16604]] + +* Fiber + + * Fiber.new(blocking: true/false) allows you to create non-blocking + execution contexts. [[Feature #16786]] + + * Fiber#blocking? tells whether the fiber is non-blocking. [[Feature #16786]] + + * Fiber#backtrace and Fiber#backtrace_locations provide per-fiber backtrace. + [[Feature #16815]] + + * The limitation of Fiber#transfer is relaxed. [[Bug #17221]] + +* GC + + * GC.auto_compact= and GC.auto_compact have been added to control + when compaction runs. Setting `auto_compact=` to `true` will cause + compaction to occur during major collections. At the moment, + compaction adds significant overhead to major collections, so please + test first! [[Feature #17176]] + +* Hash + + * Hash#transform_keys and Hash#transform_keys! now accept a hash that maps + keys to new keys. [[Feature #16274]] + + * Hash#except has been added, which returns a hash excluding the + given keys and their values. [[Feature #15822]] + +* IO + + * IO#nonblock? now defaults to `true`. [[Feature #16786]] + + * IO#wait_readable, IO#wait_writable, IO#read, IO#write and other + related methods (e.g. IO#puts, IO#gets) may invoke the scheduler hook + `#io_wait(io, events, timeout)` in a non-blocking execution context. + [[Feature #16786]] + +* Kernel + + * Kernel#clone when called with the `freeze: false` keyword will call + `#initialize_clone` with the `freeze: false` keyword. + [[Bug #14266]] + + * Kernel#clone when called with the `freeze: true` keyword will call + `#initialize_clone` with the `freeze: true` keyword, and will + return a frozen copy even if the receiver is unfrozen. + [[Feature #16175]] + + * Kernel#eval when called with two arguments will use `"(eval)"` + for `__FILE__` and `1` for `__LINE__` in the evaluated code. + [[Bug #4352]] + + * Kernel#lambda now warns if called without a literal block. + [[Feature #15973]] + + * Kernel.sleep invokes the scheduler hook `#kernel_sleep(...)` in a + non-blocking execution context. [[Feature #16786]] + +* Module + + * Module#include and Module#prepend now affect classes and modules + that have already included or prepended the receiver, mirroring the + behavior if the arguments were included in the receiver before + the other modules and classes included or prepended the receiver. + [[Feature #9573]] + + ```ruby + class C; end + module M1; end + module M2; end + C.include M1 + M1.include M2 + p C.ancestors #=> [C, M1, M2, Object, Kernel, BasicObject] + ``` + + * Module#public, Module#protected, Module#private, Module#public_class_method, + Module#private_class_method, toplevel "private" and "public" methods + now accept single array argument with a list of method names. [[Feature #17314]] + + * Module#attr_accessor, Module#attr_reader, Module#attr_writer and Module#attr + methods now return an array of defined method names as symbols. + [[Feature #17314]] + + * Module#alias_method now returns the defined alias as a symbol. + [[Feature #17314]] + +* Mutex + + * `Mutex` is now acquired per-`Fiber` instead of per-`Thread`. This change + should be compatible for essentially all usages and avoids blocking when + using a scheduler. [[Feature #16792]] + +* Proc + + * Proc#== and Proc#eql? are now defined and will return true for + separate Proc instances if the procs were created from the same block. + [[Feature #14267]] + +* Queue / SizedQueue + + * Queue#pop, SizedQueue#push and related methods may now invoke the + `block`/`unblock` scheduler hooks in a non-blocking context. + [[Feature #16786]] + +* Ractor + + * New class added to enable parallel execution. See rdoc-ref:ractor.md for + more details. + +* Random + + * `Random::DEFAULT` now refers to the `Random` class instead of being a `Random` instance, + so it can work with `Ractor`. + [[Feature #17322]] + + * `Random::DEFAULT` is deprecated since its value is now confusing and it is no longer global, + use `Kernel.rand`/`Random.rand` directly, or create a `Random` instance with `Random.new` instead. + [[Feature #17351]] + + +* String + + * The following methods now return or yield String instances + instead of subclass instances when called on subclass instances: + [[Bug #10845]] + + * String#* + * String#capitalize + * String#center + * String#chomp + * String#chop + * String#delete + * String#delete_prefix + * String#delete_suffix + * String#downcase + * String#dump + * String#each_char + * String#each_grapheme_cluster + * String#each_line + * String#gsub + * String#ljust + * String#lstrip + * String#partition + * String#reverse + * String#rjust + * String#rpartition + * String#rstrip + * String#scrub + * String#slice! + * String#slice / String#[] + * String#split + * String#squeeze + * String#strip + * String#sub + * String#succ / String#next + * String#swapcase + * String#tr + * String#tr_s + * String#upcase + +* Symbol + + * Symbol#to_proc now returns a lambda Proc. [[Feature #16260]] + + * Symbol#name has been added, which returns the name of the symbol + if it is named. The returned string is frozen. [[Feature #16150]] + +* Fiber + + * Introduce Fiber.set_scheduler for intercepting blocking operations and + Fiber.scheduler for accessing the current scheduler. See + rdoc-ref:fiber.md for more details about what operations are supported and + how to implement the scheduler hooks. [[Feature #16786]] + + * Fiber.blocking? tells whether the current execution context is + blocking. [[Feature #16786]] + + * Thread#join invokes the scheduler hooks `block`/`unblock` in a + non-blocking execution context. [[Feature #16786]] + +* Thread + + * Thread.ignore_deadlock accessor has been added for disabling the + default deadlock detection, allowing the use of signal handlers to + break deadlock. [[Bug #13768]] + +* Warning + + * Warning#warn now supports a category keyword argument. + [[Feature #17122]] + +## Stdlib updates + +Outstanding ones only. + +* BigDecimal + + * Update to BigDecimal 3.0.0 + + * This version is Ractor compatible. + +* Bundler + + * Update to Bundler 2.2.3 + +* CGI + + * Update to 0.2.0 + + * This version is Ractor compatible. + +* CSV + + * Update to CSV 3.1.9 + +* Date + + * Update to Date 3.1.1 + + * This version is Ractor compatible. + +* Digest + + * Update to Digest 3.0.0 + + * This version is Ractor compatible. + +* Etc + + * Update to Etc 1.2.0 + + * This version is Ractor compatible. + +* Fiddle + + * Update to Fiddle 1.0.5 + +* IRB + + * Update to IRB 1.2.6 + +* JSON + + * Update to JSON 2.5.0 + + * This version is Ractor compatible. + +* Set + + * Update to set 1.0.0 + + * SortedSet has been removed for dependency and performance reasons. + + * Set#join is added as a shorthand for `.to_a.join`. + + * Set#<=> is added. + +* Socket + + * Add :connect_timeout to TCPSocket.new [[Feature #17187]] + +* Net::HTTP + + * Net::HTTP#verify_hostname= and Net::HTTP#verify_hostname have been + added to skip hostname verification. [[Feature #16555]] + + * Net::HTTP.get, Net::HTTP.get_response, and Net::HTTP.get_print + can take the request headers as a Hash in the second argument when the + first argument is a URI. [[Feature #16686]] + +* Net::SMTP + + * Add SNI support. + + * Net::SMTP.start arguments are keyword arguments. + + * TLS should not check the host name by default. + +* OpenStruct + + * Initialization is no longer lazy. [[Bug #12136]] + + * Builtin methods can now be overridden safely. [[Bug #15409]] + + * Implementation uses only methods ending with `!`. + + * Ractor compatible. + + * Improved support for YAML. [[Bug #8382]] + + * Use officially discouraged. Read OpenStruct@Caveats section. + +* Pathname + + * Ractor compatible. + +* Psych + + * Update to Psych 3.3.0 + + * This version is Ractor compatible. + +* Reline + + * Update to Reline 0.1.5 + +* RubyGems + + * Update to RubyGems 3.2.3 + +* StringIO + + * Update to StringIO 3.0.0 + + * This version is Ractor compatible. + +* StringScanner + + * Update to StringScanner 3.0.0 + + * This version is Ractor compatible. + +## Compatibility issues + +Excluding feature bug fixes. + +* Regexp literals and all Range objects are frozen. [[Feature #8948]] [[Feature #16377]] [[Feature #15504]] + + ```ruby + /foo/.frozen? #=> true + (42...).frozen? # => true + ``` + +* EXPERIMENTAL: Hash#each consistently yields a 2-element array. [[Bug #12706]] + + * Now `{ a: 1 }.each(&->(k, v) { })` raises an ArgumentError + due to lambda's arity check. + +* When writing to STDOUT redirected to a closed pipe, no broken pipe + error message will be shown now. [[Feature #14413]] + +* `TRUE`/`FALSE`/`NIL` constants are no longer defined. + +* Integer#zero? overrides Numeric#zero? for optimization. [[Misc #16961]] + +* Enumerable#grep and Enumerable#grep_v when passed a Regexp and no block no longer modify + Regexp.last_match. [[Bug #17030]] + +* Requiring 'open-uri' no longer redefines `Kernel#open`. + Call `URI.open` directly or `use URI#open` instead. [[Misc #15893]] + +* SortedSet has been removed for dependency and performance reasons. + +## Stdlib compatibility issues + +* Default gems + + * The following libraries are promoted to default gems from stdlib. + + * English + * abbrev + * base64 + * drb + * debug + * erb + * find + * net-ftp + * net-http + * net-imap + * net-protocol + * open-uri + * optparse + * pp + * prettyprint + * resolv-replace + * resolv + * rinda + * set + * securerandom + * shellwords + * tempfile + * tmpdir + * time + * tsort + * un + * weakref + + * The following extensions are promoted to default gems from stdlib. + + * digest + * io-nonblock + * io-wait + * nkf + * pathname + * syslog + * win32ole + +* Bundled gems + + * net-telnet and xmlrpc have been removed from the bundled gems. + If you are interested in maintaining them, please comment on + your plan to https://github.com/ruby/xmlrpc + or https://github.com/ruby/net-telnet. + +* SDBM has been removed from the Ruby standard library. [[Bug #8446]] + + * The issues of sdbm will be handled at https://github.com/ruby/sdbm + +* WEBrick has been removed from the Ruby standard library. [[Feature #17303]] + + * The issues of WEBrick will be handled at https://github.com/ruby/webrick + +## C API updates + +* C API functions related to `$SAFE` have been removed. + [[Feature #16131]] + +* C API header file `ruby/ruby.h` was split. [[GH-2991]] + + This should have no impact on extension libraries, + but users might experience slow compilations. + +* Memory view interface [EXPERIMENTAL] + + * The memory view interface is a C-API set to exchange a raw memory area, + such as a numeric array or a bitmap image, between extension libraries. + The extension libraries can share also the metadata of the memory area + that consists of the shape, the element format, and so on. + Using these kinds of metadata, the extension libraries can share even + a multidimensional array appropriately. + This feature is designed by referring to Python's buffer protocol. + [[Feature #13767]] [[Feature #14722]] + +* Ractor related C APIs are introduced (experimental) in "include/ruby/ractor.h". + +## Implementation improvements + +* New method cache mechanism for Ractor. [[Feature #16614]] + + * Inline method caches pointed from ISeq can be accessed by multiple Ractors + in parallel and synchronization is needed even for method caches. However, + such synchronization can be overhead so introducing new inline method cache + mechanisms, (1) Disposable inline method cache (2) per-Class method cache + and (3) new invalidation mechanism. (1) can avoid per-method call + synchronization because it only uses atomic operations. + See the ticket for more details. + +* The number of hashes allocated when using a keyword splat in + a method call has been reduced to a maximum of 1, and passing + a keyword splat to a method that accepts specific keywords + does not allocate a hash. + +* `super` is optimized when the same type of method is called in the previous call + if it's not refinements or an attr reader or writer. + +### JIT + +* Performance improvements of JIT-ed code + + * Microarchitectural optimizations + + * Native functions shared by multiple methods are deduplicated on JIT compaction. + + * Decrease code size of hot paths by some optimizations and partitioning cold paths. + + * Instance variables + + * Eliminate some redundant checks. + + * Skip checking a class and a object multiple times in a method when possible. + + * Optimize accesses in some core classes like Hash and their subclasses. + + * Method inlining support for some C methods + + * `Kernel`: `#class`, `#frozen?` + + * `Integer`: `#-@`, `#~`, `#abs`, `#bit_length`, `#even?`, `#integer?`, `#magnitude`, + `#odd?`, `#ord`, `#to_i`, `#to_int`, `#zero?` + + * `Struct`: reader methods for 10th or later members + + * Constant references are inlined. + + * Always generate appropriate code for `==`, `nil?`, and `!` calls depending on + a receiver class. + + * Reduce the number of PC accesses on branches and method returns. + + * Optimize C method calls a little. + +* Compilation process improvements + + * It does not keep temporary files in /tmp anymore. + + * Throttle GC and compaction of JIT-ed code. + + * Avoid GC-ing JIT-ed code when not necessary. + + * GC-ing JIT-ed code is executed in a background thread. + + * Reduce the number of locks between Ruby and JIT threads. + +## Static analysis + +### RBS + +* RBS is a new language for type definition of Ruby programs. + It allows writing types of classes and modules with advanced + types including union types, overloading, generics, and + _interface types_ for duck typing. + +* Ruby ships with type definitions for core/stdlib classes. + +* `rbs` gem is bundled to load and process RBS files. + +### TypeProf + +* TypeProf is a type analysis tool for Ruby code based on abstract interpretation. + + * It reads non-annotated Ruby code, tries inferring its type signature, and prints + the analysis result in RBS format. + + * Though it supports only a subset of the Ruby language yet, we will continuously + improve the coverage of language features, analysis performance, and usability. + +```ruby +# test.rb +def foo(x) + if x > 10 + x.to_s + else + nil + end +end + +foo(42) +``` + +``` +$ typeprof test.rb +# Classes +class Object + def foo : (Integer) -> String? +end +``` + +## Miscellaneous changes + +* Methods using `ruby2_keywords` will no longer keep empty keyword + splats, those are now removed just as they are for methods not + using `ruby2_keywords`. + +* When an exception is caught in the default handler, the error + message and backtrace are printed in order from the innermost. + [[Feature #8661]] + +* Accessing an uninitialized instance variable no longer emits a + warning in verbose mode. [[Feature #17055]] + +[Bug #4352]: https://bugs.ruby-lang.org/issues/4352 +[Bug #6087]: https://bugs.ruby-lang.org/issues/6087 +[Bug #8382]: https://bugs.ruby-lang.org/issues/8382 +[Bug #8446]: https://bugs.ruby-lang.org/issues/8446 +[Feature #8661]: https://bugs.ruby-lang.org/issues/8661 +[Feature #8709]: https://bugs.ruby-lang.org/issues/8709 +[Feature #8948]: https://bugs.ruby-lang.org/issues/8948 +[Feature #9573]: https://bugs.ruby-lang.org/issues/9573 +[Bug #10845]: https://bugs.ruby-lang.org/issues/10845 +[Bug #12136]: https://bugs.ruby-lang.org/issues/12136 +[Feature #12650]: https://bugs.ruby-lang.org/issues/12650 +[Bug #12706]: https://bugs.ruby-lang.org/issues/12706 +[Feature #13767]: https://bugs.ruby-lang.org/issues/13767 +[Bug #13768]: https://bugs.ruby-lang.org/issues/13768 +[Feature #14183]: https://bugs.ruby-lang.org/issues/14183 +[Bug #14266]: https://bugs.ruby-lang.org/issues/14266 +[Feature #14267]: https://bugs.ruby-lang.org/issues/14267 +[Feature #14413]: https://bugs.ruby-lang.org/issues/14413 +[Bug #14541]: https://bugs.ruby-lang.org/issues/14541 +[Feature #14722]: https://bugs.ruby-lang.org/issues/14722 +[Bug #15409]: https://bugs.ruby-lang.org/issues/15409 +[Feature #15504]: https://bugs.ruby-lang.org/issues/15504 +[Feature #15575]: https://bugs.ruby-lang.org/issues/15575 +[Feature #15822]: https://bugs.ruby-lang.org/issues/15822 +[Misc #15893]: https://bugs.ruby-lang.org/issues/15893 +[Feature #15921]: https://bugs.ruby-lang.org/issues/15921 +[Feature #15973]: https://bugs.ruby-lang.org/issues/15973 +[Feature #16131]: https://bugs.ruby-lang.org/issues/16131 +[Feature #16150]: https://bugs.ruby-lang.org/issues/16150 +[Feature #16166]: https://bugs.ruby-lang.org/issues/16166 +[Feature #16175]: https://bugs.ruby-lang.org/issues/16175 +[Feature #16233]: https://bugs.ruby-lang.org/issues/16233 +[Feature #16260]: https://bugs.ruby-lang.org/issues/16260 +[Feature #16274]: https://bugs.ruby-lang.org/issues/16274 +[Feature #16345]: https://bugs.ruby-lang.org/issues/16345 +[Feature #16377]: https://bugs.ruby-lang.org/issues/16377 +[Feature #16378]: https://bugs.ruby-lang.org/issues/16378 +[Feature #16555]: https://bugs.ruby-lang.org/issues/16555 +[Feature #16604]: https://bugs.ruby-lang.org/issues/16604 +[Feature #16614]: https://bugs.ruby-lang.org/issues/16614 +[Feature #16686]: https://bugs.ruby-lang.org/issues/16686 +[Feature #16746]: https://bugs.ruby-lang.org/issues/16746 +[Feature #16754]: https://bugs.ruby-lang.org/issues/16754 +[Feature #16786]: https://bugs.ruby-lang.org/issues/16786 +[Feature #16792]: https://bugs.ruby-lang.org/issues/16792 +[Feature #16815]: https://bugs.ruby-lang.org/issues/16815 +[Feature #16828]: https://bugs.ruby-lang.org/issues/16828 +[Misc #16961]: https://bugs.ruby-lang.org/issues/16961 +[Bug #17030]: https://bugs.ruby-lang.org/issues/17030 +[Feature #17055]: https://bugs.ruby-lang.org/issues/17055 +[Feature #17104]: https://bugs.ruby-lang.org/issues/17104 +[Feature #17122]: https://bugs.ruby-lang.org/issues/17122 +[Feature #17136]: https://bugs.ruby-lang.org/issues/17136 +[Feature #17176]: https://bugs.ruby-lang.org/issues/17176 +[Feature #17187]: https://bugs.ruby-lang.org/issues/17187 +[Bug #17221]: https://bugs.ruby-lang.org/issues/17221 +[Feature #17260]: https://bugs.ruby-lang.org/issues/17260 +[Feature #17273]: https://bugs.ruby-lang.org/issues/17273 +[Feature #17303]: https://bugs.ruby-lang.org/issues/17303 +[Feature #17314]: https://bugs.ruby-lang.org/issues/17314 +[Feature #17322]: https://bugs.ruby-lang.org/issues/17322 +[Feature #17351]: https://bugs.ruby-lang.org/issues/17351 +[Feature #17371]: https://bugs.ruby-lang.org/issues/17371 +[Bug #17419]: https://bugs.ruby-lang.org/issues/17419 +[GH-2991]: https://github.com/ruby/ruby/pull/2991 diff --git a/ruby/doc/bsearch.rdoc b/ruby/doc/bsearch.rdoc new file mode 100644 index 000000000..ca8091fc0 --- /dev/null +++ b/ruby/doc/bsearch.rdoc @@ -0,0 +1,120 @@ +== Binary Searching + +A few Ruby methods support binary searching in a collection: + +Array#bsearch:: Returns an element selected via a binary search + as determined by a given block. +Array#bsearch_index:: Returns the index of an element selected via a binary search + as determined by a given block. +Range#bsearch:: Returns an element selected via a binary search + as determined by a given block. + +Each of these methods returns an enumerator if no block is given. + +Given a block, each of these methods returns an element (or element index) from +self+ +as determined by a binary search. +The search finds an element of +self+ which meets +the given condition in O(log n) operations, where +n+ is the count of elements. ++self+ should be sorted, but this is not checked. + +There are two search modes: + +Find-minimum mode:: method +bsearch+ returns the first element for which + the block returns +true+; + the block must return +true+ or +false+. +Find-any mode:: method +bsearch+ some element, if any, for which + the block returns zero. + the block must return a numeric value. + +The block should not mix the modes by sometimes returning +true+ or +false+ +and other times returning a numeric value, but this is not checked. + +Find-Minimum Mode + +In find-minimum mode, the block must return +true+ or +false+. +The further requirement (though not checked) is that +there are no indexes +i+ and +j+ such that: + +- 0 <= i < j <= self.size. +- The block returns +true+ for self[i] and +false+ for self[j]. + +Less formally: the block is such that all +false+-evaluating elements +precede all +true+-evaluating elements. + +In find-minimum mode, method +bsearch+ returns the first element +for which the block returns +true+. + +Examples: + + a = [0, 4, 7, 10, 12] + a.bsearch {|x| x >= 4 } # => 4 + a.bsearch {|x| x >= 6 } # => 7 + a.bsearch {|x| x >= -1 } # => 0 + a.bsearch {|x| x >= 100 } # => nil + + r = (0...a.size) + r.bsearch {|i| a[i] >= 4 } #=> 1 + r.bsearch {|i| a[i] >= 6 } #=> 2 + r.bsearch {|i| a[i] >= 8 } #=> 3 + r.bsearch {|i| a[i] >= 100 } #=> nil + r = (0.0...Float::INFINITY) + r.bsearch {|x| Math.log(x) >= 0 } #=> 1.0 + +These blocks make sense in find-minimum mode: + + a = [0, 4, 7, 10, 12] + a.map {|x| x >= 4 } # => [false, true, true, true, true] + a.map {|x| x >= 6 } # => [false, false, true, true, true] + a.map {|x| x >= -1 } # => [true, true, true, true, true] + a.map {|x| x >= 100 } # => [false, false, false, false, false] + +This would not make sense: + + a.map {|x| x == 7 } # => [false, false, true, false, false] + +Find-Any Mode + +In find-any mode, the block must return a numeric value. +The further requirement (though not checked) is that +there are no indexes +i+ and +j+ such that: + +- 0 <= i < j <= self.size. +- The block returns a negative value for self[i] + and a positive value for self[j]. +- The block returns a negative value for self[i] and zero self[j]. +- The block returns zero for self[i] and a positive value for self[j]. + +Less formally: the block is such that: + +- All positive-evaluating elements precede all zero-evaluating elements. +- All positive-evaluating elements precede all negative-evaluating elements. +- All zero-evaluating elements precede all negative-evaluating elements. + +In find-any mode, method +bsearch+ returns some element +for which the block returns zero, or +nil+ if no such element is found. + +Examples: + + a = [0, 4, 7, 10, 12] + a.bsearch {|element| 7 <=> element } # => 7 + a.bsearch {|element| -1 <=> element } # => nil + a.bsearch {|element| 5 <=> element } # => nil + a.bsearch {|element| 15 <=> element } # => nil + + a = [0, 100, 100, 100, 200] + r = (0..4) + r.bsearch {|i| 100 - a[i] } #=> 1, 2 or 3 + r.bsearch {|i| 300 - a[i] } #=> nil + r.bsearch {|i| 50 - a[i] } #=> nil + +These blocks make sense in find-any mode: + + a = [0, 4, 7, 10, 12] + a.map {|element| 7 <=> element } # => [1, 1, 0, -1, -1] + a.map {|element| -1 <=> element } # => [-1, -1, -1, -1, -1] + a.map {|element| 5 <=> element } # => [1, 1, -1, -1, -1] + a.map {|element| 15 <=> element } # => [1, 1, 1, 1, 1] + +This would not make sense: + + a.map {|element| element <=> 7 } # => [-1, -1, 0, 1, 1] diff --git a/ruby/doc/case_mapping.rdoc b/ruby/doc/case_mapping.rdoc new file mode 100644 index 000000000..29d7bc6c3 --- /dev/null +++ b/ruby/doc/case_mapping.rdoc @@ -0,0 +1,116 @@ +== Case Mapping + +Some string-oriented methods use case mapping. + +In String: + +- String#capitalize +- String#capitalize! +- String#casecmp +- String#casecmp? +- String#downcase +- String#downcase! +- String#swapcase +- String#swapcase! +- String#upcase +- String#upcase! + +In Symbol: + +- Symbol#capitalize +- Symbol#casecmp +- Symbol#casecmp? +- Symbol#downcase +- Symbol#swapcase +- Symbol#upcase + +=== Default Case Mapping + +By default, all of these methods use full Unicode case mapping, +which is suitable for most languages. +See {Unicode Latin Case Chart}[https://www.unicode.org/charts/case]. + +Non-ASCII case mapping and folding are supported for UTF-8, +UTF-16BE/LE, UTF-32BE/LE, and ISO-8859-1~16 Strings/Symbols. + +Context-dependent case mapping as described in +{Table 3-17 of the Unicode standard}[https://www.unicode.org/versions/Unicode13.0.0/ch03.pdf] +is currently not supported. + +In most cases, case conversions of a string have the same number of characters. +There are exceptions (see also +:fold+ below): + + s = "\u00DF" # => "ß" + s.upcase # => "SS" + s = "\u0149" # => "ʼn" + s.upcase # => "ʼN" + +Case mapping may also depend on locale (see also +:turkic+ below): + + s = "\u0049" # => "I" + s.downcase # => "i" # Dot above. + s.downcase(:turkic) # => "ı" # No dot above. + +Case changes may not be reversible: + + s = 'Hello World!' # => "Hello World!" + s.downcase # => "hello world!" + s.downcase.upcase # => "HELLO WORLD!" # Different from original s. + +Case changing methods may not maintain Unicode normalization. +See String#unicode_normalize). + +=== Options for Case Mapping + +Except for +casecmp+ and +casecmp?+, +each of the case-mapping methods listed above +accepts optional arguments, *options. + +The arguments may be: + +- +:ascii+ only. +- +:fold+ only. +- +:turkic+ or +:lithuanian+ or both. + +The options: + +- +:ascii+: + ASCII-only mapping: + uppercase letters ('A'..'Z') are mapped to lowercase letters ('a'..'z); + other characters are not changed + + s = "Foo \u00D8 \u00F8 Bar" # => "Foo Ø ø Bar" + s.upcase # => "FOO Ø Ø BAR" + s.downcase # => "foo ø ø bar" + s.upcase(:ascii) # => "FOO Ø ø BAR" + s.downcase(:ascii) # => "foo Ø ø bar" + +- +:turkic+: + Full Unicode case mapping, adapted for the Turkic languages + that distinguish dotted and dotless I, for example Turkish and Azeri. + + s = 'Türkiye' # => "Türkiye" + s.upcase # => "TÃœRKIYE" + s.upcase(:turkic) # => "TÃœRKÄ°YE" # Dot above. + + s = 'TÃœRKIYE' # => "TÃœRKIYE" + s.downcase # => "türkiye" + s.downcase(:turkic) # => "türkıye" # No dot above. + +- +:lithuanian+: + Not yet implemented. + +- +:fold+ (available only for String#downcase, String#downcase!, + and Symbol#downcase): + Unicode case folding, + which is more far-reaching than Unicode case mapping. + + s = "\u00DF" # => "ß" + s.downcase # => "ß" + s.downcase(:fold) # => "ss" + s.upcase # => "SS" + + s = "\uFB04" # => "ffl" + s.downcase # => "ffl" + s.upcase # => "FFL" + s.downcase(:fold) # => "ffl" diff --git a/ruby/doc/contributing.rdoc b/ruby/doc/contributing.rdoc index 68dda66e4..00875d142 100644 --- a/ruby/doc/contributing.rdoc +++ b/ruby/doc/contributing.rdoc @@ -27,10 +27,10 @@ on your ticket. stable release. See {Downloading Ruby}[https://www.ruby-lang.org/en/downloads/]. * Look to see if anyone already reported your issue, try - {searching on redmine}[https://bugs.ruby-lang.org/projects/ruby-trunk/issues] + {searching on redmine}[https://bugs.ruby-lang.org/projects/ruby-master/issues] for your problem. * If you can't find a ticket addressing your issue, - {create a new one}[https://bugs.ruby-lang.org/projects/ruby-trunk/issues/new]. + {create a new one}[https://bugs.ruby-lang.org/projects/ruby-master/issues/new]. * Choose the target version, usually current. Bugs will be first fixed in the current release and then {backported}[rdoc-label:label-Backport+Requests]. * Fill in the Ruby version you're using when experiencing this issue @@ -59,32 +59,6 @@ You can report downstream issues for the following distributions via their bug t * {macports}[https://trac.macports.org/query?status=assigned&status=new&status=reopened&port=~ruby] * etc (add your distribution bug tracker here) -=== Platform Maintainers - -For platform specific bugs in Ruby, you can assign your ticket to the current -maintainer for a specific platform. - -The current active platform maintainers are as follows: - -[mswin64 (Microsoft Windows)] - NAKAMURA Usaku (usa) -[mingw32 (Minimalist GNU for Windows)] - Nobuyoshi Nakada (nobu) -[AIX] - Yutaka Kanemoto (kanemoto) -[FreeBSD] - Akinori MUSHA (knu) -[Solaris] - Naohisa Goto (ngoto) -[RHEL, CentOS] - KOSAKI Motohiro (kosaki) -[macOS] - Kenta Murata (mrkn) -[OpenBSD] - Jeremy Evans (jeremyevans0) -[cygwin, bcc32, djgpp, wince, ...] - none. (Maintainer WANTED) - == Reporting Security Issues Security vulnerabilities receive special treatment since they may negatively @@ -116,7 +90,7 @@ these? Quite a bit, actually: When a bug report goes for a while without any feedback, it goes to the bug graveyard which is unfortunate. If you check the {issues -list}[https://bugs.ruby-lang.org/projects/ruby-trunk/issues] you will find lots +list}[https://bugs.ruby-lang.org/projects/ruby-master/issues] you will find lots of delinquent bugs that require attention. You can help by verifying the existing tickets, try to reproduce the reported @@ -156,7 +130,7 @@ If there's a new feature that you want to see added to Ruby, you will need to write a convincing proposal and patch to implement the feature. For new features in CRuby, use the {'Feature' -tracker}[https://bugs.ruby-lang.org/projects/ruby-trunk/issues?set_filter=1&tracker_id=2] +tracker}[https://bugs.ruby-lang.org/projects/ruby-master/issues?set_filter=1&tracker_id=2] on ruby-master. For non-CRuby dependent features, features that would apply to alternate Ruby implementations such as JRuby and Rubinius, use the {CommonRuby tracker}[https://bugs.ruby-lang.org/projects/common-ruby]. @@ -195,25 +169,6 @@ A good template for a feature proposal should look something like this: [See also] Links to the other related resources -=== Slideshow - -At the Ruby Developer Meeting in Japan, committers discuss Feature Proposals together in Tokyo. We will judge proposals and then accept, reject, or give feedback for them. -If you have a stalled proposal, making a slide to submit is good way to get feedback. - -Slides should be: - -* One-page slide -* Include a corresponding ticket number -* MUST include a figure and/or short example code -* SHOULD have less sentence in natural language (try to write less than 140 characters) -* It is RECOMMENDED to itemize: motivation/use case, proposal, pros/cons, corner case -* PDF or Image (Web browsers can show it) - -Please note: - -* Even if the proposal is generally acceptable, it won't be accepted without writing corner cases in the ticket -* Slide's example: DevelopersMeeting20130727Japan - == Backport Requests When a new version of Ruby is released, it starts at patch level 0 (p0), and @@ -260,8 +215,8 @@ run tests. * autoconf - 2.67 or later, preferably 2.69. * bison - 2.0 or later, preferably 3.4. * gperf - 3.0.3 or later, preferably 3.1. -* ruby - Ruby itself is prerequisite in order to build Ruby from source. It - can be 1.8. +* ruby - Ruby itself is prerequisite in order to build Ruby from source. + You should use [a maintained version of Ruby](https://www.ruby-lang.org/en/downloads/). You should also have access to development headers for the following libraries, but these are not required: @@ -284,7 +239,7 @@ Now let's build CRuby: * Generate the configuration files and build: cd ruby-master - autoconf + ./autogen.sh mkdir build && cd build # its good practice to build outside of source dir mkdir ~/.rubies # we will install to .rubies/ruby-master in our home dir ../configure --prefix="${HOME}/.rubies/ruby-master" diff --git a/ruby/doc/contributors.rdoc b/ruby/doc/contributors.rdoc deleted file mode 100644 index 7c3722032..000000000 --- a/ruby/doc/contributors.rdoc +++ /dev/null @@ -1,793 +0,0 @@ -= Contributors to Ruby - -The following list might be incomplete. Feel free to add your name if your -patch was accepted into Ruby. - -== A - -Ayumu AIZAWA (ayumin) -* committer - -AKIYOSHI, Masamichi (akiyoshi) -* committer -* He had maintained the VMS support on 2003-2004. - -Muhammad Ali -* wrote rdoc for Fiber - -Minero Aoki (aamine) -* committer -* He is the maintainer of: - * fileutils - * net/http, net/https - * net/pop - * net/smtp - * racc - * ripper - * strscan - -Wakou Aoyama (wakou) -* committer -* He was the maintainer of some standard libraries. - -Koji Arai -* committer - -arton -* He is the distributor of ActiveScriptRuby and experimental 1.9.0-x installers for win32. -* Wrote patches for win32ole, gc.c, tmpdir.rb - -Sergey Avseyev -* Added IO#pread and IO#pwrite. - -== B - -Daniel Berger -* a patch for irb -* documentation -* He wrote forwardable.rb - -David Black (dblack) -* committer -* He is the maintainer of scanf - -Ken Bloom -* a patch for REXML. - -Oliver M. Bolzer -* a patch for soap - -Alexey Borzenkov -* a patch for mkmf.rb - -Evan Brodie -* a patch for documentation of Float#round - -Richard Brown -* a patch for configure.in - -Dirkjan Bussink -* a patch for date.rb - -Daniel Bovensiepen -* documentation -* a patch for irb - -== C - -Brian Candler -* a patch for configure.in, net/telnet - -keith cascio -* a patch for optparse.rb - -Frederick Cheung -* a patch for test/ruby/test_symbol.rb - -Christoph -* patches for set.rb - -Sean Chittenden -* patches for net/http, cgi - -William D. Clinger -* ruby_strtod is based on his paper. - -== D - -Ryan Davis (ryan) -* committer -* He wrote and is the maintainer of miniunit - -Guy Decoux (ts) -* committer - -Zach Dennis - -Martin Duerst (duerst) -* committer -* M17N - -Paul Duncan -* patches for rdoc - -Alexander Dymo -* a patch for lib/benchmark.rb - -== E - -Yusuke Endoh (mame) -* committer -* He wrote and is the maintainer of base64 library (1.9) -* did much upon YARV compiler. - -erlercw -* wrote Integer::gcd2 - -== F - -Frank S.Fejes -* a patch for net/pop - -Fundakowski Feldman -* a patch for process.c - -Mauricio Fernandez -* patches for parse.y - -David Flanagan (davidflanagan) -* committer -* M17N - -Takeyuki Fujioka (xibbar) -* committer -* He is the maintainer of cgi/* - -FUKUMOTO, Atsushi -* a patch for tracer.rb - -Shota Fukumori (sorah) -* committer -* #4415 parallel unit/test - -Tadayoshi Funaba (tadf) -* committer -* He wrote and is the maintainer of - * date - * parsedate (1.8) -* He ported rational.rb and complex.rb, which 1.8 contains, into rational.c and complex.c of 1.9. - -== G - -David M. Gay -* ruby_strtod - -Florian Gilcher -* documentation - -GOTOU, Kentaro (gotoken) -* committer -* He wrote benchmark.rb -* He is the maintainer of: - * benchmark.rb - * open3 - -GOTOU, Yuuzou (gotoyuzo) -* committer - -James Edward Gray II (jeg2) -* committer -* He wrote the faster implementation of CSV and is the maintainer of csv. -* Wrote documentation for rdoc - -== H - -Phil Hagelberg -* patch for ruby-mode.el's documentation. - -Kirk Haines (wyhaines) -* committer -* the maintainer of ruby_1_8_6 branch - -Shinichiro Hamaji -* fixed memory leaks (marshal.c, string.c) - -Shin-ichiro HARA -* the developer and the sysop of ruby-{dev,list,core,talk} archive. -* a patch for numeric.c - -Chris Heath (traumdeutung) -* a patch for proc.c - -HIROKAWA Hisashi -* fixed socket/socket.c - -Daniel Hob -* He wrote: - * SMTP-TLS support for net/smtp. - * POP3S support - -Eric Hodel (drbrain) -* committer -* He is the maintainer of: - * rdoc - * ri - * rubygems - -Erik Hollensbe -* a patch for delegate.rb - -Johan Holmberg -* a patch for dir.c -* documentation - -Erik Huelsmann - -Dae San Hwang -* built a continuous integration environment on OpenSolaris. - -== I - -Nobuhiro IMAI -* a patch for logger.rb - -"incorporate" -* a patch for sprintf.c - -Keiju Ishitsuka (keiju) -* committer -* He wrote and is the maintainer of: - * cmath.rb (1.9) - * complex.rb (1.8) - * e2mmap.rb - * forwardable.rb - * irb - * mathn - * matrix.rb - * mutex_m.rb - * rational.rb (1.8) - * sync.rb - * shell/* - * thwait.rb - * tracer.rb - -== J - -Curtis Jackson -* missing/dup2.c - -Alan Johnson -* a patch for net/ftp - -Lyle Johnson -* patches for nkf, bigdecimal, numeric.c - -== K - -Yoshihiro Kambayashi -* a patch for enc/trans/single_byte.trans. -* He wrote supports for some encodings. - -Yutaka Kanemoto -* patches for common.mk, AIX AF_INET6 support - -Motoyuki Kasahara -* He wrote getoptlong.rb - -Masahiro Kawato -* a patch for shellwords.rb - -Wataru Kimura -* a patch for configure.in - -Michael Klishin -* patch for make help. - -Noritada Kobayashi -* a patch for optparse.rb - -Shigeo Kobayashi (shigek) -* committer -* He is the maintainer of bigdecimal - -KONISHI, Hiromasa (H_Konishi) -* committer -* He had maintained the bcc32 support in 2004. - -Kornelius "murphy" Kalnbach -* documentation - -K.Kosako (kosako) -* committer -* He wrote Oniguruma. - -Takehiro Kubo -* patches for dl 64bit support. - -== L - -Marc-Andre Lafortune (marcandre) -* committer -* patches for hash.c, array.c, thread.c, enumc, string.c, range.c and rdoc documentation. - -Hongli Lai -* improved pstore.rb -* patch for tool/file2lastrev.rb. - -raspberry lemon -* a patch for webrick/httpproxy.rb. - -Christian Loew -* a patch for fileutils.rb - -== M - -Shugo Maeda (shugo) -* committer -* A system administrator of ruby-lang.org servers. -* He wrote and is the maintainer of: - * monitor.rb - * net/ftp - * net/imap - -Stephan Maka (mathew) -* documentation - -Yukihiro Matsumoto (matz) -* Matz -- the founder, language designer of Ruby. -* committer -* Ruby itself, most of Ruby. -* He is the maintainer of: - * singleton - * timeout - * gdbm - * sdbm - -Konrad Meyer -* documentation - -Mib Software -* missing/vsnprintf.c - -Todd C. Miller -* missing/strlcat.c -* missing/strlcpy.c - -MIYASAKA, Masaru -* a patch for cgi.rb - -Stefan Monnier -* regex.c was fixed with based on his Emacs21 patch. - -Marcel Moolenaar -* patches for eval.c and gc.c. - -moonwolf -* a patch for REXML, xmlrpc - -Hiroshi Moriyama -* a patch for yaml. - -Kyosuke Morohashi -* a patch for gem_prelude.rb - -Kenta Murata -* patches for json, bignum.c - -Akinori MUSHA (knu) -* committer -* He wrote and is the maintainer of: - * abbrev.rb - * generator (1.8) - * enumerator (1.8) - * set - * ipaddr.rb - * digest/* - * syslog -* He is the branch maintainer of ruby_1_8, the release manager of 1.8 series. - -== N - -Hidetoshi NAGAI (nagai) -* committer -* He is the maintainer of tk/* - -Nobuyoshi Nakada (nobu) -* committer -* a.k.a. the "patch monster" -* He wrote and is the maintainer of: - * optparse - * stringio - * io/wait - * iconv - -Satoshi Nakagawa -* patches for util.c - -Narihiro Nakamura (nari) -* committer -* a.k.a. authorNari -* working at GC - -NAKAMURA, Hiroshi (nahi) -* committer -* He is the maintainer of: - * csv.rb (1.8) - * logger.rb - * soap/* (1.8) - * wsdl/* (1.8) - * xsd/* (1.8) - -NAKAMURA, Usaku (usa) -* committer -* a.k.a. unak -* He is the maintainer of mswin32 and mswin64 support. - -NARUSE, Yui (naruse) -* committer -* a.k.a. "nurse" -* Did much upon m17n. -* He is the maintainer of: - * json - * nkf - -Christian Neukirchen -* a patch for webrick/httputils - -Michael Neumann (mneumann) -* committer -* He is the maintainer of - * xmlrpc (1.8) - * gserver (1.8) - -NISHIO Hirokazu -* wrote a patch for CVE-2010-0541 - -Kazuhiro NISHIYAMA (kazu) -* committer -* a.k.a. znz - -Go Noguchi - -Martin Nordholts -* misc/rdebug.el - -nmu -* a patch for socket - -== O - -okkez -* He is a sysop of the Ruby Reference Manual Renewal Project. -* fixed ipaddr.rb, ext/etc - -Haruhiko Okumura -* some of missing/* is based on his book: - * missing/erf.c - * missing/lgamma_r.c - * missing/tgamma.c - -OMAE, jun -* a patch for debug.rb - -Eugene Ossintsev -* documentation - -== P - -Heesob Park -* a patch for win32/win32.c. - -pegacorn -* a patch for instruby.rb - -== Q - -== R - -Gaston Ramos -* documentation - -The Regents of the University of California -* missing/crypt.c -* missing/vsnprintf.c - -Sam Roberts -* patch for socket -* documentation - -Michal Rokos (michal) -* committer -* He was the maintainer of DJGPP support. - -rubikitch -* a patch for io.c - -Marcus Rueckert -* a patch for mkconfig.rb. - -Run Paint Run Run -* patch for enc/unicode.c -* documentation - -Sean Russell (ser) -* committer -* He wrote and is the maintainer of REXML. - -== S - -Kazuo Saito (ksaito) -* committer -* M17N - -Tadashi Saito -* patches for test/ruby/test_math.rb, thread_*.c, bignum.c -* working upon BigDecimal. -* did much upon documentation - -Masahiro Sakai -* a patch for io.c - -Laurent Sansonetti -* a patch for tool/ytab.sed - -Jeff Saracco -* documentation - -Koichi Sasada (ko1) -* committer -* He wrote YARV. - -Hugh Sasse -* a patch for net/http -* documentation - -Charlie Savage -* a patch for win32/Makefile.sub - -Michael Scholz -* a patch for ruby-mode.el - -Arthur Schreiber -* patch for net/http and rdoc. - -Masatoshi SEKI (seki) -* committer -* He wrote and is the maintainer of: - * drb/* - * erb - * rinda - -Roman Shterenzon -* a patch for open-uri. - -Kent Sibilev - -Gavin Sinclair (gsinclair) -* committer - -John W. Small -* He wrote gserver.rb - -Yuki Sonoda (yugui) -* committer -* She is the maintainer of man/* manual pages and is the release manager of 1.9 series. -* She wrote prime.rb. -* A developer and a sysop of redmine.ruby-lang.org. - -SOUMA, Yutaka -* a patch for pack.c. - -Tatsuki Sugiura -* WebDAV support for net/http - -Masaki Suketa (suke) -* committer -* He is the maintainer of win32ole - -sheepman -* patches for ruby.c, thread.c, stringio, enum.c, webrick, net/http - -Siena. (siena) -* committer - -Kirill A. Shutemov -* a patch for parse.y - -Darren Smith -* a patch for golf_prelude.rb - -Richard M. Stallman -* missing/alloca.c - -Robin Stocker -* documentation - -Joshua Stowers -* a patch for array.c - -Marcus Stollsteimer (stomar) -* committer -* a maintainer of www.ruby-lang.org -* patches for cgi (HTML5 tag maker), numeric.c, bigdecimal, ostruct.rb, prime.rb, and others -* documentation - -Adam Strzelecki -* a patch for compile.c - -Masashi Sumi -* improved net/pop.rb - -Eric Sunshine -* NeXT OpenStep, Rhapsody support - -Kouhei Sutou (kou) -* committer -* He wrote and is the maintainer of rss/* - -David Symonds -* documentation - -== T - -TAKANO Mitsuhiro (takano32) -* committer -* He is the maintainer of IA-64 support. -* BigDecimal - -TAKAO, Kouji (kouji) -* committer -* He is the maintainer of readline. - -Nathaniel Talbott (ntalbott) -* committer -* He was the maintainer of test/unit, runit, rubyunit. - -TANAKA, Akira (akr) -* committer -* Did much upon m17n. -* And he is the maintainer of: - * open-uri - * pathname - * pp - * resolv-replace - * resolv - * time - * tsort - -Takaaki Tateishi (ttate) -* committer -* He was the maintainer of dl - -Technorama Ltd. (technoroma) -* committer -* openssl - -Andrew Thompson -* a patch for socket.c IRIX support. - -Dave Thomas (dave) -* committer -* a.k.a. the Pragmatic Programmer. -* He wrote rdoc. - -Tietew -* patches for win32 support - -Masahiro Tomita -* a patch for cgi.rb - -Jakub Travnik -* a patch for eval.c - -Tom Truscott -* missing/crypt.c - -== U - -UEDA, Satoshi -* a patch for uri - -Takaaki Uematsu (uema2) -* committer -* He was the maintainer of WinCE support. - -UENO, Katsuhiro (katsu) -* committer -* He is the maintainer of zlib - -Hajimu UMEMOTO -* He wrote ipaddr.rb - -URABE, Shyouhei (shyouhei) -* committer -* a.k.a. mput. -* He is the branch maintainer of ruby_1_8_6 and ruby_1_8_7 -* and is the release manager of 1.8.x-pXXX. - -== V - -Joel VanderWerf -* a patch for numeric.c - -Peter Vanbroekhoven - -Corinna Vinschen - -== W - -wanabe (wanabe) -* committer -* fixed YARV and Oniguruma. - -Chun Wang -* a patch for time.rb - -WATANABE, Hirofumi (eban) -* committer -* He is the maintainer of - * ftools (1.8) - * tmpdir - * un - * Win32API - -WATANABE, Tetsuya -* a patch for ruby.c - -William Webber (wew) -* committer - -Jim Weirich (jim) -* committer -* He wrote Rake. - -Nathan Weizenbaum -* fixed misc/ruby-mode.el. - -why the lukky stiff (why) -* committer -* He is the maintainer of syck - -Caley Woods -* documentation - -Gary Wright -* documentation - -== X - -== Y - -Akira Yamada (akira) -* committer -* He is the maintainer of ruby related packages at Debian project. - -Keita Yamaguchi -* patches for enum.c, parse.y -* documentation - -Hirokazu Yamamoto (ocean) -* committer - -Hirotaka Yoshioka -* a patch for improving SEGV handling - -== Z - -Aristarkh A Zagorodnikov -* a patch for io.c - -Alexander Zavorine -* committer -* He is the maintainer for Symbian OS. - -Chiyuan Zhang -* a patch for misc/ruby-mode.el. - -Dee Zsombor (zunda) -* a patch for thread_pthread.c - -Dan Zwell -* a patch for net/pop - - diff --git a/ruby/doc/csv/arguments/io.rdoc b/ruby/doc/csv/arguments/io.rdoc new file mode 100644 index 000000000..f5fe1d197 --- /dev/null +++ b/ruby/doc/csv/arguments/io.rdoc @@ -0,0 +1,5 @@ +* Argument +io+ should be an IO object that is: + * Open for reading; on return, the IO object will be closed. + * Positioned at the beginning. + To position at the end, for appending, use method CSV.generate. + For any other positioning, pass a preset \StringIO object instead. diff --git a/ruby/doc/csv/options/common/col_sep.rdoc b/ruby/doc/csv/options/common/col_sep.rdoc new file mode 100644 index 000000000..05769b577 --- /dev/null +++ b/ruby/doc/csv/options/common/col_sep.rdoc @@ -0,0 +1,63 @@ +====== Option +col_sep+ + +Specifies the \String field separator to be used +for both parsing and generating. +The \String will be transcoded into the data's \Encoding before use. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:col_sep) # => "," (comma) + +Using the default (comma): + str = CSV.generate do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo,0\nbar,1\nbaz,2\n" + ary = CSV.parse(str) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +Using +:+ (colon): + col_sep = ':' + str = CSV.generate(col_sep: col_sep) do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo:0\nbar:1\nbaz:2\n" + ary = CSV.parse(str, col_sep: col_sep) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +Using +::+ (two colons): + col_sep = '::' + str = CSV.generate(col_sep: col_sep) do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo::0\nbar::1\nbaz::2\n" + ary = CSV.parse(str, col_sep: col_sep) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +Using '' (empty string): + col_sep = '' + str = CSV.generate(col_sep: col_sep) do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo0\nbar1\nbaz2\n" + +--- + +Raises an exception if parsing with the empty \String: + col_sep = '' + # Raises ArgumentError (:col_sep must be 1 or more characters: "") + CSV.parse("foo0\nbar1\nbaz2\n", col_sep: col_sep) + +Raises an exception if the given value is not String-convertible: + col_sep = BasicObject.new + # Raises NoMethodError (undefined method `to_s' for #) + CSV.generate(line, col_sep: col_sep) + # Raises NoMethodError (undefined method `to_s' for #) + CSV.parse(str, col_sep: col_sep) diff --git a/ruby/doc/csv/options/common/quote_char.rdoc b/ruby/doc/csv/options/common/quote_char.rdoc new file mode 100644 index 000000000..67fd3af68 --- /dev/null +++ b/ruby/doc/csv/options/common/quote_char.rdoc @@ -0,0 +1,42 @@ +====== Option +quote_char+ + +Specifies the character (\String of length 1) used used to quote fields +in both parsing and generating. +This String will be transcoded into the data's \Encoding before use. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:quote_char) # => "\"" (double quote) + +This is useful for an application that incorrectly uses ' (single-quote) +to quote fields, instead of the correct " (double-quote). + +Using the default (double quote): + str = CSV.generate do |csv| + csv << ['foo', 0] + csv << ["'bar'", 1] + csv << ['"baz"', 2] + end + str # => "foo,0\n'bar',1\n\"\"\"baz\"\"\",2\n" + ary = CSV.parse(str) + ary # => [["foo", "0"], ["'bar'", "1"], ["\"baz\"", "2"]] + +Using ' (single-quote): + quote_char = "'" + str = CSV.generate(quote_char: quote_char) do |csv| + csv << ['foo', 0] + csv << ["'bar'", 1] + csv << ['"baz"', 2] + end + str # => "foo,0\n'''bar''',1\n\"baz\",2\n" + ary = CSV.parse(str, quote_char: quote_char) + ary # => [["foo", "0"], ["'bar'", "1"], ["\"baz\"", "2"]] + +--- + +Raises an exception if the \String length is greater than 1: + # Raises ArgumentError (:quote_char has to be nil or a single character String) + CSV.new('', quote_char: 'xx') + +Raises an exception if the value is not a \String: + # Raises ArgumentError (:quote_char has to be nil or a single character String) + CSV.new('', quote_char: :foo) diff --git a/ruby/doc/csv/options/common/row_sep.rdoc b/ruby/doc/csv/options/common/row_sep.rdoc new file mode 100644 index 000000000..872d9d1f3 --- /dev/null +++ b/ruby/doc/csv/options/common/row_sep.rdoc @@ -0,0 +1,100 @@ +====== Option +row_sep+ + +Specifies the row separator, a \String or the \Symbol :auto (see below), +to be used for both parsing and generating. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:row_sep) # => :auto + +--- + +When +row_sep+ is a \String, that \String becomes the row separator. +The String will be transcoded into the data's Encoding before use. + +Using "\n": + row_sep = "\n" + str = CSV.generate(row_sep: row_sep) do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo,0\nbar,1\nbaz,2\n" + ary = CSV.parse(str) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +Using | (pipe): + row_sep = '|' + str = CSV.generate(row_sep: row_sep) do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo,0|bar,1|baz,2|" + ary = CSV.parse(str, row_sep: row_sep) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +Using -- (two hyphens): + row_sep = '--' + str = CSV.generate(row_sep: row_sep) do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo,0--bar,1--baz,2--" + ary = CSV.parse(str, row_sep: row_sep) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +Using '' (empty string): + row_sep = '' + str = CSV.generate(row_sep: row_sep) do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo,0bar,1baz,2" + ary = CSV.parse(str, row_sep: row_sep) + ary # => [["foo", "0bar", "1baz", "2"]] + +--- + +When +row_sep+ is the \Symbol +:auto+ (the default), +generating uses "\n" as the row separator: + str = CSV.generate do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo,0\nbar,1\nbaz,2\n" + +Parsing, on the other hand, invokes auto-discovery of the row separator. + +Auto-discovery reads ahead in the data looking for the next \r\n, +\n+, or +\r+ sequence. +The sequence will be selected even if it occurs in a quoted field, +assuming that you would have the same line endings there. + +Example: + str = CSV.generate do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo,0\nbar,1\nbaz,2\n" + ary = CSV.parse(str) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +The default $INPUT_RECORD_SEPARATOR ($/) is used +if any of the following is true: +* None of those sequences is found. +* Data is +ARGF+, +STDIN+, +STDOUT+, or +STDERR+. +* The stream is only available for output. + +Obviously, discovery takes a little time. Set manually if speed is important. Also note that IO objects should be opened in binary mode on Windows if this feature will be used as the line-ending translation can cause problems with resetting the document position to where it was before the read ahead. + +--- + +Raises an exception if the given value is not String-convertible: + row_sep = BasicObject.new + # Raises NoMethodError (undefined method `to_s' for #) + CSV.generate(ary, row_sep: row_sep) + # Raises NoMethodError (undefined method `to_s' for #) + CSV.parse(str, row_sep: row_sep) diff --git a/ruby/doc/csv/options/generating/force_quotes.rdoc b/ruby/doc/csv/options/generating/force_quotes.rdoc new file mode 100644 index 000000000..11afd1a16 --- /dev/null +++ b/ruby/doc/csv/options/generating/force_quotes.rdoc @@ -0,0 +1,17 @@ +====== Option +force_quotes+ + +Specifies the boolean that determines whether each output field is to be double-quoted. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:force_quotes) # => false + +For examples in this section: + ary = ['foo', 0, nil] + +Using the default, +false+: + str = CSV.generate_line(ary) + str # => "foo,0,\n" + +Using +true+: + str = CSV.generate_line(ary, force_quotes: true) + str # => "\"foo\",\"0\",\"\"\n" diff --git a/ruby/doc/csv/options/generating/quote_empty.rdoc b/ruby/doc/csv/options/generating/quote_empty.rdoc new file mode 100644 index 000000000..4c5645c66 --- /dev/null +++ b/ruby/doc/csv/options/generating/quote_empty.rdoc @@ -0,0 +1,12 @@ +====== Option +quote_empty+ + +Specifies the boolean that determines whether an empty value is to be double-quoted. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:quote_empty) # => true + +With the default +true+: + CSV.generate_line(['"', ""]) # => "\"\"\"\",\"\"\n" + +With +false+: + CSV.generate_line(['"', ""], quote_empty: false) # => "\"\"\"\",\n" diff --git a/ruby/doc/csv/options/generating/write_converters.rdoc b/ruby/doc/csv/options/generating/write_converters.rdoc new file mode 100644 index 000000000..6e5fae5fd --- /dev/null +++ b/ruby/doc/csv/options/generating/write_converters.rdoc @@ -0,0 +1,33 @@ +====== Option +write_converters+ + +Specifies converters to be used in generating fields. +See {Write Converters}[#class-CSV-label-Write+Converters] + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:write_converters) # => nil + +With no write converter: + str = CSV.generate_line(["\na\n", "\tb\t", " c "]) + str # => "\"\na\n\",\tb\t, c \n" + +With a write converter: + strip_converter = proc {|field| field.strip } + str = CSV.generate_line(["\na\n", "\tb\t", " c "], write_converters: strip_converter) + str # => "a,b,c\n" + +With two write converters (called in order): + upcase_converter = proc {|field| field.upcase } + downcase_converter = proc {|field| field.downcase } + write_converters = [upcase_converter, downcase_converter] + str = CSV.generate_line(['a', 'b', 'c'], write_converters: write_converters) + str # => "a,b,c\n" + +See also {Write Converters}[#class-CSV-label-Write+Converters] + +--- + +Raises an exception if the converter returns a value that is neither +nil+ +nor \String-convertible: + bad_converter = proc {|field| BasicObject.new } + # Raises NoMethodError (undefined method `is_a?' for #) + CSV.generate_line(['a', 'b', 'c'], write_converters: bad_converter) \ No newline at end of file diff --git a/ruby/doc/csv/options/generating/write_empty_value.rdoc b/ruby/doc/csv/options/generating/write_empty_value.rdoc new file mode 100644 index 000000000..67be5662c --- /dev/null +++ b/ruby/doc/csv/options/generating/write_empty_value.rdoc @@ -0,0 +1,15 @@ +====== Option +write_empty_value+ + +Specifies the object that is to be substituted for each field +that has an empty \String. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:write_empty_value) # => "" + +Without the option: + str = CSV.generate_line(['a', '', 'c', '']) + str # => "a,\"\",c,\"\"\n" + +With the option: + str = CSV.generate_line(['a', '', 'c', ''], write_empty_value: "x") + str # => "a,x,c,x\n" diff --git a/ruby/doc/csv/options/generating/write_headers.rdoc b/ruby/doc/csv/options/generating/write_headers.rdoc new file mode 100644 index 000000000..f9faa9d43 --- /dev/null +++ b/ruby/doc/csv/options/generating/write_headers.rdoc @@ -0,0 +1,29 @@ +====== Option +write_headers+ + +Specifies the boolean that determines whether a header row is included in the output; +ignored if there are no headers. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:write_headers) # => nil + +Without +write_headers+: + file_path = 't.csv' + CSV.open(file_path,'w', + :headers => ['Name','Value'] + ) do |csv| + csv << ['foo', '0'] + end + CSV.open(file_path) do |csv| + csv.shift + end # => ["foo", "0"] + +With +write_headers+": + CSV.open(file_path,'w', + :write_headers=> true, + :headers => ['Name','Value'] + ) do |csv| + csv << ['foo', '0'] + end + CSV.open(file_path) do |csv| + csv.shift + end # => ["Name", "Value"] diff --git a/ruby/doc/csv/options/generating/write_nil_value.rdoc b/ruby/doc/csv/options/generating/write_nil_value.rdoc new file mode 100644 index 000000000..65d33ff54 --- /dev/null +++ b/ruby/doc/csv/options/generating/write_nil_value.rdoc @@ -0,0 +1,14 @@ +====== Option +write_nil_value+ + +Specifies the object that is to be substituted for each +nil+-valued field. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:write_nil_value) # => nil + +Without the option: + str = CSV.generate_line(['a', nil, 'c', nil]) + str # => "a,,c,\n" + +With the option: + str = CSV.generate_line(['a', nil, 'c', nil], write_nil_value: "x") + str # => "a,x,c,x\n" diff --git a/ruby/doc/csv/options/parsing/converters.rdoc b/ruby/doc/csv/options/parsing/converters.rdoc new file mode 100644 index 000000000..211fa48de --- /dev/null +++ b/ruby/doc/csv/options/parsing/converters.rdoc @@ -0,0 +1,46 @@ +====== Option +converters+ + +Specifies converters to be used in parsing fields. +See {Field Converters}[#class-CSV-label-Field+Converters] + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:converters) # => nil + +The value may be a field converter name +(see {Stored Converters}[#class-CSV-label-Stored+Converters]): + str = '1,2,3' + # Without a converter + array = CSV.parse_line(str) + array # => ["1", "2", "3"] + # With built-in converter :integer + array = CSV.parse_line(str, converters: :integer) + array # => [1, 2, 3] + +The value may be a converter list +(see {Converter Lists}[#class-CSV-label-Converter+Lists]): + str = '1,3.14159' + # Without converters + array = CSV.parse_line(str) + array # => ["1", "3.14159"] + # With built-in converters + array = CSV.parse_line(str, converters: [:integer, :float]) + array # => [1, 3.14159] + +The value may be a \Proc custom converter: +(see {Custom Field Converters}[#class-CSV-label-Custom+Field+Converters]): + str = ' foo , bar , baz ' + # Without a converter + array = CSV.parse_line(str) + array # => [" foo ", " bar ", " baz "] + # With a custom converter + array = CSV.parse_line(str, converters: proc {|field| field.strip }) + array # => ["foo", "bar", "baz"] + +See also {Custom Field Converters}[#class-CSV-label-Custom+Field+Converters] + +--- + +Raises an exception if the converter is not a converter name or a \Proc: + str = 'foo,0' + # Raises NoMethodError (undefined method `arity' for nil:NilClass) + CSV.parse(str, converters: :foo) diff --git a/ruby/doc/csv/options/parsing/empty_value.rdoc b/ruby/doc/csv/options/parsing/empty_value.rdoc new file mode 100644 index 000000000..7d3bcc078 --- /dev/null +++ b/ruby/doc/csv/options/parsing/empty_value.rdoc @@ -0,0 +1,13 @@ +====== Option +empty_value+ + +Specifies the object that is to be substituted +for each field that has an empty \String. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:empty_value) # => "" (empty string) + +With the default, "": + CSV.parse_line('a,"",b,"",c') # => ["a", "", "b", "", "c"] + +With a different object: + CSV.parse_line('a,"",b,"",c', empty_value: 'x') # => ["a", "x", "b", "x", "c"] diff --git a/ruby/doc/csv/options/parsing/field_size_limit.rdoc b/ruby/doc/csv/options/parsing/field_size_limit.rdoc new file mode 100644 index 000000000..797c5776f --- /dev/null +++ b/ruby/doc/csv/options/parsing/field_size_limit.rdoc @@ -0,0 +1,39 @@ +====== Option +field_size_limit+ + +Specifies the \Integer field size limit. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:field_size_limit) # => nil + +This is a maximum size CSV will read ahead looking for the closing quote for a field. +(In truth, it reads to the first line ending beyond this size.) +If a quote cannot be found within the limit CSV will raise a MalformedCSVError, +assuming the data is faulty. +You can use this limit to prevent what are effectively DoS attacks on the parser. +However, this limit can cause a legitimate parse to fail; +therefore the default value is +nil+ (no limit). + +For the examples in this section: + str = <<~EOT + "a","b" + " + 2345 + ","" + EOT + str # => "\"a\",\"b\"\n\"\n2345\n\",\"\"\n" + +Using the default +nil+: + ary = CSV.parse(str) + ary # => [["a", "b"], ["\n2345\n", ""]] + +Using 50: + field_size_limit = 50 + ary = CSV.parse(str, field_size_limit: field_size_limit) + ary # => [["a", "b"], ["\n2345\n", ""]] + +--- + +Raises an exception if a field is too long: + big_str = "123456789\n" * 1024 + # Raises CSV::MalformedCSVError (Field size exceeded in line 1.) + CSV.parse('valid,fields,"' + big_str + '"', field_size_limit: 2048) diff --git a/ruby/doc/csv/options/parsing/header_converters.rdoc b/ruby/doc/csv/options/parsing/header_converters.rdoc new file mode 100644 index 000000000..309180805 --- /dev/null +++ b/ruby/doc/csv/options/parsing/header_converters.rdoc @@ -0,0 +1,43 @@ +====== Option +header_converters+ + +Specifies converters to be used in parsing headers. +See {Header Converters}[#class-CSV-label-Header+Converters] + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:header_converters) # => nil + +Identical in functionality to option {converters}[#class-CSV-label-Option+converters] +except that: +- The converters apply only to the header row. +- The built-in header converters are +:downcase+ and +:symbol+. + +This section assumes prior execution of: + str = <<-EOT + Name,Value + foo,0 + bar,1 + baz,2 + EOT + # With no header converter + table = CSV.parse(str, headers: true) + table.headers # => ["Name", "Value"] + +The value may be a header converter name +(see {Stored Converters}[#class-CSV-label-Stored+Converters]): + table = CSV.parse(str, headers: true, header_converters: :downcase) + table.headers # => ["name", "value"] + +The value may be a converter list +(see {Converter Lists}[#class-CSV-label-Converter+Lists]): + header_converters = [:downcase, :symbol] + table = CSV.parse(str, headers: true, header_converters: header_converters) + table.headers # => [:name, :value] + +The value may be a \Proc custom converter +(see {Custom Header Converters}[#class-CSV-label-Custom+Header+Converters]): + upcase_converter = proc {|field| field.upcase } + table = CSV.parse(str, headers: true, header_converters: upcase_converter) + table.headers # => ["NAME", "VALUE"] + +See also {Custom Header Converters}[#class-CSV-label-Custom+Header+Converters] + diff --git a/ruby/doc/csv/options/parsing/headers.rdoc b/ruby/doc/csv/options/parsing/headers.rdoc new file mode 100644 index 000000000..0ea151f24 --- /dev/null +++ b/ruby/doc/csv/options/parsing/headers.rdoc @@ -0,0 +1,63 @@ +====== Option +headers+ + +Specifies a boolean, \Symbol, \Array, or \String to be used +to define column headers. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:headers) # => false + +--- + +Without +headers+: + str = <<-EOT + Name,Count + foo,0 + bar,1 + bax,2 + EOT + csv = CSV.new(str) + csv # => # + csv.headers # => nil + csv.shift # => ["Name", "Count"] + +--- + +If set to +true+ or the \Symbol +:first_row+, +the first row of the data is treated as a row of headers: + str = <<-EOT + Name,Count + foo,0 + bar,1 + bax,2 + EOT + csv = CSV.new(str, headers: true) + csv # => # + csv.headers # => ["Name", "Count"] + csv.shift # => # + +--- + +If set to an \Array, the \Array elements are treated as headers: + str = <<-EOT + foo,0 + bar,1 + bax,2 + EOT + csv = CSV.new(str, headers: ['Name', 'Count']) + csv + csv.headers # => ["Name", "Count"] + csv.shift # => # + +--- + +If set to a \String +str+, method CSV::parse_line(str, options) is called +with the current +options+, and the returned \Array is treated as headers: + str = <<-EOT + foo,0 + bar,1 + bax,2 + EOT + csv = CSV.new(str, headers: 'Name,Count') + csv + csv.headers # => ["Name", "Count"] + csv.shift # => # diff --git a/ruby/doc/csv/options/parsing/liberal_parsing.rdoc b/ruby/doc/csv/options/parsing/liberal_parsing.rdoc new file mode 100644 index 000000000..b8b9b00c9 --- /dev/null +++ b/ruby/doc/csv/options/parsing/liberal_parsing.rdoc @@ -0,0 +1,19 @@ +====== Option +liberal_parsing+ + +Specifies the boolean value that determines whether +CSV will attempt to parse input not conformant with RFC 4180, +such as double quotes in unquoted fields. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:liberal_parsing) # => false + +For examples in this section: + str = 'is,this "three, or four",fields' + +Without +liberal_parsing+: + # Raises CSV::MalformedCSVError (Illegal quoting in str 1.) + CSV.parse_line(str) + +With +liberal_parsing+: + ary = CSV.parse_line(str, liberal_parsing: true) + ary # => ["is", "this \"three", " or four\"", "fields"] diff --git a/ruby/doc/csv/options/parsing/nil_value.rdoc b/ruby/doc/csv/options/parsing/nil_value.rdoc new file mode 100644 index 000000000..412e8795e --- /dev/null +++ b/ruby/doc/csv/options/parsing/nil_value.rdoc @@ -0,0 +1,12 @@ +====== Option +nil_value+ + +Specifies the object that is to be substituted for each null (no-text) field. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:nil_value) # => nil + +With the default, +nil+: + CSV.parse_line('a,,b,,c') # => ["a", nil, "b", nil, "c"] + +With a different object: + CSV.parse_line('a,,b,,c', nil_value: 0) # => ["a", 0, "b", 0, "c"] diff --git a/ruby/doc/csv/options/parsing/return_headers.rdoc b/ruby/doc/csv/options/parsing/return_headers.rdoc new file mode 100644 index 000000000..45d2e3f3d --- /dev/null +++ b/ruby/doc/csv/options/parsing/return_headers.rdoc @@ -0,0 +1,22 @@ +====== Option +return_headers+ + +Specifies the boolean that determines whether method #shift +returns or ignores the header row. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:return_headers) # => false + +Examples: + str = <<-EOT + Name,Count + foo,0 + bar,1 + bax,2 + EOT + # Without return_headers first row is str. + csv = CSV.new(str, headers: true) + csv.shift # => # + # With return_headers first row is headers. + csv = CSV.new(str, headers: true, return_headers: true) + csv.shift # => # + diff --git a/ruby/doc/csv/options/parsing/skip_blanks.rdoc b/ruby/doc/csv/options/parsing/skip_blanks.rdoc new file mode 100644 index 000000000..2c8f7b7bb --- /dev/null +++ b/ruby/doc/csv/options/parsing/skip_blanks.rdoc @@ -0,0 +1,31 @@ +====== Option +skip_blanks+ + +Specifies a boolean that determines whether blank lines in the input will be ignored; +a line that contains a column separator is not considered to be blank. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:skip_blanks) # => false + +See also option {skiplines}[#class-CSV-label-Option+skip_lines]. + +For examples in this section: + str = <<-EOT + foo,0 + + bar,1 + baz,2 + + , + EOT + +Using the default, +false+: + ary = CSV.parse(str) + ary # => [["foo", "0"], [], ["bar", "1"], ["baz", "2"], [], [nil, nil]] + +Using +true+: + ary = CSV.parse(str, skip_blanks: true) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"], [nil, nil]] + +Using a truthy value: + ary = CSV.parse(str, skip_blanks: :foo) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"], [nil, nil]] diff --git a/ruby/doc/csv/options/parsing/skip_lines.rdoc b/ruby/doc/csv/options/parsing/skip_lines.rdoc new file mode 100644 index 000000000..1481c40a5 --- /dev/null +++ b/ruby/doc/csv/options/parsing/skip_lines.rdoc @@ -0,0 +1,37 @@ +====== Option +skip_lines+ + +Specifies an object to use in identifying comment lines in the input that are to be ignored: +* If a \Regexp, ignores lines that match it. +* If a \String, converts it to a \Regexp, ignores lines that match it. +* If +nil+, no lines are considered to be comments. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:skip_lines) # => nil + +For examples in this section: + str = <<-EOT + # Comment + foo,0 + bar,1 + baz,2 + # Another comment + EOT + str # => "# Comment\nfoo,0\nbar,1\nbaz,2\n# Another comment\n" + +Using the default, +nil+: + ary = CSV.parse(str) + ary # => [["# Comment"], ["foo", "0"], ["bar", "1"], ["baz", "2"], ["# Another comment"]] + +Using a \Regexp: + ary = CSV.parse(str, skip_lines: /^#/) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +Using a \String: + ary = CSV.parse(str, skip_lines: '#') + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +--- + +Raises an exception if given an object that is not a \Regexp, a \String, or +nil+: + # Raises ArgumentError (:skip_lines has to respond to #match: 0) + CSV.parse(str, skip_lines: 0) diff --git a/ruby/doc/csv/options/parsing/strip.rdoc b/ruby/doc/csv/options/parsing/strip.rdoc new file mode 100644 index 000000000..56ae4310c --- /dev/null +++ b/ruby/doc/csv/options/parsing/strip.rdoc @@ -0,0 +1,15 @@ +====== Option +strip+ + +Specifies the boolean value that determines whether +whitespace is stripped from each input field. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:strip) # => false + +With default value +false+: + ary = CSV.parse_line(' a , b ') + ary # => [" a ", " b "] + +With value +true+: + ary = CSV.parse_line(' a , b ', strip: true) + ary # => ["a", "b"] diff --git a/ruby/doc/csv/options/parsing/unconverted_fields.rdoc b/ruby/doc/csv/options/parsing/unconverted_fields.rdoc new file mode 100644 index 000000000..3e7f839d4 --- /dev/null +++ b/ruby/doc/csv/options/parsing/unconverted_fields.rdoc @@ -0,0 +1,27 @@ +====== Option +unconverted_fields+ + +Specifies the boolean that determines whether unconverted field values are to be available. + +Default value: + CSV::DEFAULT_OPTIONS.fetch(:unconverted_fields) # => nil + +The unconverted field values are those found in the source data, +prior to any conversions performed via option +converters+. + +When option +unconverted_fields+ is +true+, +each returned row (\Array or \CSV::Row) has an added method, ++unconverted_fields+, that returns the unconverted field values: + str = <<-EOT + foo,0 + bar,1 + baz,2 + EOT + # Without unconverted_fields + csv = CSV.parse(str, converters: :integer) + csv # => [["foo", 0], ["bar", 1], ["baz", 2]] + csv.first.respond_to?(:unconverted_fields) # => false + # With unconverted_fields + csv = CSV.parse(str, converters: :integer, unconverted_fields: true) + csv # => [["foo", 0], ["bar", 1], ["baz", 2]] + csv.first.respond_to?(:unconverted_fields) # => true + csv.first.unconverted_fields # => ["foo", "0"] diff --git a/ruby/doc/csv/recipes/filtering.rdoc b/ruby/doc/csv/recipes/filtering.rdoc new file mode 100644 index 000000000..470649d09 --- /dev/null +++ b/ruby/doc/csv/recipes/filtering.rdoc @@ -0,0 +1,156 @@ +== Recipes for Filtering \CSV + +For other recipes, see {Recipes for CSV}[./recipes_rdoc.html]. + +All code snippets on this page assume that the following has been executed: + require 'csv' + +=== Contents + +- {Source and Output Formats}[#label-Source+and+Output+Formats] + - {Filtering String to String}[#label-Filtering+String+to+String] + - {Recipe: Filter String to String with Headers}[#label-Recipe-3A+Filter+String+to+String+with+Headers] + - {Recipe: Filter String to String Without Headers}[#label-Recipe-3A+Filter+String+to+String+Without+Headers] + - {Filtering String to IO Stream}[#label-Filtering+String+to+IO+Stream] + - {Recipe: Filter String to IO Stream with Headers}[#label-Recipe-3A+Filter+String+to+IO+Stream+with+Headers] + - {Recipe: Filter String to IO Stream Without Headers}[#label-Recipe-3A+Filter+String+to+IO+Stream+Without+Headers] + - {Filtering IO Stream to String}[#label-Filtering+IO+Stream+to+String] + - {Recipe: Filter IO Stream to String with Headers}[#label-Recipe-3A+Filter+IO+Stream+to+String+with+Headers] + - {Recipe: Filter IO Stream to String Without Headers}[#label-Recipe-3A+Filter+IO+Stream+to+String+Without+Headers] + - {Filtering IO Stream to IO Stream}[#label-Filtering+IO+Stream+to+IO+Stream] + - {Recipe: Filter IO Stream to IO Stream with Headers}[#label-Recipe-3A+Filter+IO+Stream+to+IO+Stream+with+Headers] + - {Recipe: Filter IO Stream to IO Stream Without Headers}[#label-Recipe-3A+Filter+IO+Stream+to+IO+Stream+Without+Headers] + +=== Source and Output Formats + +You can use a Unix-style "filter" for \CSV data. +The filter reads source \CSV data and writes output \CSV data as modified by the filter. +The input and output \CSV data may be any mixture of \Strings and \IO streams. + +==== Filtering \String to \String + +You can filter one \String to another, with or without headers. + +===== Recipe: Filter \String to \String with Headers + +Use class method CSV.filter with option +headers+ to filter a \String to another \String: + in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + out_string = '' + CSV.filter(in_string, out_string, headers: true) do |row| + row[0] = row[0].upcase + row[1] *= 4 + end + out_string # => "Name,Value\nFOO,0000\nBAR,1111\nBAZ,2222\n" + +===== Recipe: Filter \String to \String Without Headers + +Use class method CSV.filter without option +headers+ to filter a \String to another \String: + in_string = "foo,0\nbar,1\nbaz,2\n" + out_string = '' + CSV.filter(in_string, out_string) do |row| + row[0] = row[0].upcase + row[1] *= 4 + end + out_string # => "FOO,0000\nBAR,1111\nBAZ,2222\n" + +==== Filtering \String to \IO Stream + +You can filter a \String to an \IO stream, with or without headers. + +===== Recipe: Filter \String to \IO Stream with Headers + +Use class method CSV.filter with option +headers+ to filter a \String to an \IO stream: + in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + path = 't.csv' + File.open(path, 'w') do |out_io| + CSV.filter(in_string, out_io, headers: true) do |row| + row[0] = row[0].upcase + row[1] *= 4 + end + end + p File.read(path) # => "Name,Value\nFOO,0000\nBAR,1111\nBAZ,2222\n" + +===== Recipe: Filter \String to \IO Stream Without Headers + +Use class method CSV.filter without option +headers+ to filter a \String to an \IO stream: + in_string = "foo,0\nbar,1\nbaz,2\n" + path = 't.csv' + File.open(path, 'w') do |out_io| + CSV.filter(in_string, out_io) do |row| + row[0] = row[0].upcase + row[1] *= 4 + end + end + p File.read(path) # => "FOO,0000\nBAR,1111\nBAZ,2222\n" + +==== Filtering \IO Stream to \String + +You can filter an \IO stream to a \String, with or without headers. + +===== Recipe: Filter \IO Stream to \String with Headers + +Use class method CSV.filter with option +headers+ to filter an \IO stream to a \String: + in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + path = 't.csv' + File.write(path, in_string) + out_string = '' + File.open(path, headers: true) do |in_io| + CSV.filter(in_io, out_string, headers: true) do |row| + row[0] = row[0].upcase + row[1] *= 4 + end + end + out_string # => "Name,Value\nFOO,0000\nBAR,1111\nBAZ,2222\n" + +===== Recipe: Filter \IO Stream to \String Without Headers + +Use class method CSV.filter without option +headers+ to filter an \IO stream to a \String: + in_string = "foo,0\nbar,1\nbaz,2\n" + path = 't.csv' + File.write(path, in_string) + out_string = '' + File.open(path) do |in_io| + CSV.filter(in_io, out_string) do |row| + row[0] = row[0].upcase + row[1] *= 4 + end + end + out_string # => "FOO,0000\nBAR,1111\nBAZ,2222\n" + +==== Filtering \IO Stream to \IO Stream + +You can filter an \IO stream to another \IO stream, with or without headers. + +===== Recipe: Filter \IO Stream to \IO Stream with Headers + +Use class method CSV.filter with option +headers+ to filter an \IO stream to another \IO stream: + in_path = 't.csv' + in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + File.write(in_path, in_string) + out_path = 'u.csv' + File.open(in_path) do |in_io| + File.open(out_path, 'w') do |out_io| + CSV.filter(in_io, out_io, headers: true) do |row| + row[0] = row[0].upcase + row[1] *= 4 + end + end + end + p File.read(out_path) # => "Name,Value\nFOO,0000\nBAR,1111\nBAZ,2222\n" + +===== Recipe: Filter \IO Stream to \IO Stream Without Headers + +Use class method CSV.filter without option +headers+ to filter an \IO stream to another \IO stream: + in_path = 't.csv' + in_string = "foo,0\nbar,1\nbaz,2\n" + File.write(in_path, in_string) + out_path = 'u.csv' + File.open(in_path) do |in_io| + File.open(out_path, 'w') do |out_io| + CSV.filter(in_io, out_io) do |row| + row[0] = row[0].upcase + row[1] *= 4 + end + end + end + p File.read(out_path) # => "FOO,0000\nBAR,1111\nBAZ,2222\n" diff --git a/ruby/doc/csv/recipes/generating.rdoc b/ruby/doc/csv/recipes/generating.rdoc new file mode 100644 index 000000000..3ef6df99b --- /dev/null +++ b/ruby/doc/csv/recipes/generating.rdoc @@ -0,0 +1,244 @@ +== Recipes for Generating \CSV + +For other recipes, see {Recipes for CSV}[./recipes_rdoc.html]. + +All code snippets on this page assume that the following has been executed: + require 'csv' + +=== Contents + +- {Output Formats}[#label-Output+Formats] + - {Generating to a String}[#label-Generating+to+a+String] + - {Recipe: Generate to String with Headers}[#label-Recipe-3A+Generate+to+String+with+Headers] + - {Recipe: Generate to String Without Headers}[#label-Recipe-3A+Generate+to+String+Without+Headers] + - {Generating to a File}[#label-Generating+to+a+File] + - {Recipe: Generate to File with Headers}[#label-Recipe-3A+Generate+to+File+with+Headers] + - {Recipe: Generate to File Without Headers}[#label-Recipe-3A+Generate+to+File+Without+Headers] + - {Generating to IO an Stream}[#label-Generating+to+an+IO+Stream] + - {Recipe: Generate to IO Stream with Headers}[#label-Recipe-3A+Generate+to+IO+Stream+with+Headers] + - {Recipe: Generate to IO Stream Without Headers}[#label-Recipe-3A+Generate+to+IO+Stream+Without+Headers] +- {Converting Fields}[#label-Converting+Fields] + - {Recipe: Filter Generated Field Strings}[#label-Recipe-3A+Filter+Generated+Field+Strings] + - {Recipe: Specify Multiple Write Converters}[#label-Recipe-3A+Specify+Multiple+Write+Converters] +- {RFC 4180 Compliance}[#label-RFC+4180+Compliance] + - {Row Separator}[#label-Row+Separator] + - {Recipe: Generate Compliant Row Separator}[#label-Recipe-3A+Generate+Compliant+Row+Separator] + - {Recipe: Generate Non-Compliant Row Separator}[#label-Recipe-3A+Generate+Non-Compliant+Row+Separator] + - {Column Separator}[#label-Column+Separator] + - {Recipe: Generate Compliant Column Separator}[#label-Recipe-3A+Generate+Compliant+Column+Separator] + - {Recipe: Generate Non-Compliant Column Separator}[#label-Recipe-3A+Generate+Non-Compliant+Column+Separator] + - {Quote Character}[#label-Quote+Character] + - {Recipe: Generate Compliant Quote Character}[#label-Recipe-3A+Generate+Compliant+Quote+Character] + - {Recipe: Generate Non-Compliant Quote Character}[#label-Recipe-3A+Generate+Non-Compliant+Quote+Character] + +=== Output Formats + +You can generate \CSV output to a \String, to a \File (via its path), or to an \IO stream. + +==== Generating to a \String + +You can generate \CSV output to a \String, with or without headers. + +===== Recipe: Generate to \String with Headers + +Use class method CSV.generate with option +headers+ to generate to a \String. + +This example uses method CSV#<< to append the rows +that are to be generated: + output_string = CSV.generate('', headers: ['Name', 'Value'], write_headers: true) do |csv| + csv << ['Foo', 0] + csv << ['Bar', 1] + csv << ['Baz', 2] + end + output_string # => "Name,Value\nFoo,0\nBar,1\nBaz,2\n" + +===== Recipe: Generate to \String Without Headers + +Use class method CSV.generate without option +headers+ to generate to a \String. + +This example uses method CSV#<< to append the rows +that are to be generated: + output_string = CSV.generate do |csv| + csv << ['Foo', 0] + csv << ['Bar', 1] + csv << ['Baz', 2] + end + output_string # => "Foo,0\nBar,1\nBaz,2\n" + +==== Generating to a \File + +You can generate /CSV data to a \File, with or without headers. + +===== Recipe: Generate to \File with Headers + +Use class method CSV.open with option +headers+ generate to a \File. + +This example uses method CSV#<< to append the rows +that are to be generated: + path = 't.csv' + CSV.open(path, 'w', headers: ['Name', 'Value'], write_headers: true) do |csv| + csv << ['Foo', 0] + csv << ['Bar', 1] + csv << ['Baz', 2] + end + p File.read(path) # => "Name,Value\nFoo,0\nBar,1\nBaz,2\n" + +===== Recipe: Generate to \File Without Headers + +Use class method CSV.open without option +headers+ to generate to a \File. + +This example uses method CSV#<< to append the rows +that are to be generated: + path = 't.csv' + CSV.open(path, 'w') do |csv| + csv << ['Foo', 0] + csv << ['Bar', 1] + csv << ['Baz', 2] + end + p File.read(path) # => "Foo,0\nBar,1\nBaz,2\n" + +==== Generating to an \IO Stream + +You can generate \CSV data to an \IO stream, with or without headers. + +==== Recipe: Generate to \IO Stream with Headers + +Use class method CSV.new with option +headers+ to generate \CSV data to an \IO stream: + path = 't.csv' + File.open(path, 'w') do |file| + csv = CSV.new(file, headers: ['Name', 'Value'], write_headers: true) + csv << ['Foo', 0] + csv << ['Bar', 1] + csv << ['Baz', 2] + end + p File.read(path) # => "Name,Value\nFoo,0\nBar,1\nBaz,2\n" + +===== Recipe: Generate to \IO Stream Without Headers + +Use class method CSV.new without option +headers+ to generate \CSV data to an \IO stream: + path = 't.csv' + File.open(path, 'w') do |file| + csv = CSV.new(file) + csv << ['Foo', 0] + csv << ['Bar', 1] + csv << ['Baz', 2] + end + p File.read(path) # => "Foo,0\nBar,1\nBaz,2\n" + +=== Converting Fields + +You can use _write_ _converters_ to convert fields when generating \CSV. + +==== Recipe: Filter Generated Field Strings + +Use option :write_converters and a custom converter to convert field values when generating \CSV. + +This example defines and uses a custom write converter to strip whitespace from generated fields: + strip_converter = proc {|field| field.respond_to?(:strip) ? field.strip : field } + output_string = CSV.generate(write_converters: strip_converter) do |csv| + csv << [' foo ', 0] + csv << [' bar ', 1] + csv << [' baz ', 2] + end + output_string # => "foo,0\nbar,1\nbaz,2\n" + +==== Recipe: Specify Multiple Write Converters + +Use option :write_converters and multiple custom coverters +to convert field values when generating \CSV. + +This example defines and uses two custom write converters to strip and upcase generated fields: + strip_converter = proc {|field| field.respond_to?(:strip) ? field.strip : field } + upcase_converter = proc {|field| field.respond_to?(:upcase) ? field.upcase : field } + converters = [strip_converter, upcase_converter] + output_string = CSV.generate(write_converters: converters) do |csv| + csv << [' foo ', 0] + csv << [' bar ', 1] + csv << [' baz ', 2] + end + output_string # => "FOO,0\nBAR,1\nBAZ,2\n" + +=== RFC 4180 Compliance + +By default, \CSV generates data that is compliant with +{RFC 4180}[https://tools.ietf.org/html/rfc4180] +with respect to: +- Column separator. +- Quote character. + +==== Row Separator + +RFC 4180 specifies the row separator CRLF (Ruby "\r\n"). + +===== Recipe: Generate Compliant Row Separator + +For strict compliance, use option +:row_sep+ to specify row separator "\r\n": + output_string = CSV.generate('', row_sep: "\r\n") do |csv| + csv << ['Foo', 0] + csv << ['Bar', 1] + csv << ['Baz', 2] + end + output_string # => "Foo,0\r\nBar,1\r\nBaz,2\r\n" + +===== Recipe: Generate Non-Compliant Row Separator + +For data with non-compliant row separators, use option +:row_sep+ with a different value: +This example source uses semicolon (";') as its row separator: + output_string = CSV.generate('', row_sep: ";") do |csv| + csv << ['Foo', 0] + csv << ['Bar', 1] + csv << ['Baz', 2] + end + output_string # => "Foo,0;Bar,1;Baz,2;" + +==== Column Separator + +RFC 4180 specifies column separator COMMA (Ruby ","). + +===== Recipe: Generate Compliant Column Separator + +Because the \CSV default comma separator is ",", +you need not specify option +:col_sep+ for compliant data: + output_string = CSV.generate('') do |csv| + csv << ['Foo', 0] + csv << ['Bar', 1] + csv << ['Baz', 2] + end + output_string # => "Foo,0\nBar,1\nBaz,2\n" + +===== Recipe: Generate Non-Compliant Column Separator + +For data with non-compliant column separators, use option +:col_sep+. +This example source uses TAB ("\t") as its column separator: + output_string = CSV.generate('', col_sep: "\t") do |csv| + csv << ['Foo', 0] + csv << ['Bar', 1] + csv << ['Baz', 2] + end + output_string # => "Foo\t0\nBar\t1\nBaz\t2\n" + +==== Quote Character + +RFC 4180 specifies quote character DQUOTE (Ruby "\""). + +===== Recipe: Generate Compliant Quote Character + +Because the \CSV default quote character is "\"", +you need not specify option +:quote_char+ for compliant data: + output_string = CSV.generate('', force_quotes: true) do |csv| + csv << ['Foo', 0] + csv << ['Bar', 1] + csv << ['Baz', 2] + end + output_string # => "\"Foo\",\"0\"\n\"Bar\",\"1\"\n\"Baz\",\"2\"\n" + +===== Recipe: Generate Non-Compliant Quote Character + +For data with non-compliant quote characters, use option +:quote_char+. +This example source uses SQUOTE ("'") as its quote character: + output_string = CSV.generate('', quote_char: "'", force_quotes: true) do |csv| + csv << ['Foo', 0] + csv << ['Bar', 1] + csv << ['Baz', 2] + end + output_string # => "'Foo','0'\n'Bar','1'\n'Baz','2'\n" diff --git a/ruby/doc/csv/recipes/parsing.rdoc b/ruby/doc/csv/recipes/parsing.rdoc new file mode 100644 index 000000000..7ac96a934 --- /dev/null +++ b/ruby/doc/csv/recipes/parsing.rdoc @@ -0,0 +1,543 @@ +== Recipes for Parsing \CSV + +For other recipes, see {Recipes for CSV}[./recipes_rdoc.html]. + +All code snippets on this page assume that the following has been executed: + require 'csv' + +=== Contents + +- {Source Formats}[#label-Source+Formats] + - {Parsing from a String}[#label-Parsing+from+a+String] + - {Recipe: Parse from String with Headers}[#label-Recipe-3A+Parse+from+String+with+Headers] + - {Recipe: Parse from String Without Headers}[#label-Recipe-3A+Parse+from+String+Without+Headers] + - {Parsing from a File}[#label-Parsing+from+a+File] + - {Recipe: Parse from File with Headers}[#label-Recipe-3A+Parse+from+File+with+Headers] + - {Recipe: Parse from File Without Headers}[#label-Recipe-3A+Parse+from+File+Without+Headers] + - {Parsing from an IO Stream}[#label-Parsing+from+an+IO+Stream] + - {Recipe: Parse from IO Stream with Headers}[#label-Recipe-3A+Parse+from+IO+Stream+with+Headers] + - {Recipe: Parse from IO Stream Without Headers}[#label-Recipe-3A+Parse+from+IO+Stream+Without+Headers] +- {RFC 4180 Compliance}[#label-RFC+4180+Compliance] + - {Row Separator}[#label-Row+Separator] + - {Recipe: Handle Compliant Row Separator}[#label-Recipe-3A+Handle+Compliant+Row+Separator] + - {Recipe: Handle Non-Compliant Row Separator}[#label-Recipe-3A+Handle+Non-Compliant+Row+Separator] + - {Column Separator}[#label-Column+Separator] + - {Recipe: Handle Compliant Column Separator}[#label-Recipe-3A+Handle+Compliant+Column+Separator] + - {Recipe: Handle Non-Compliant Column Separator}[#label-Recipe-3A+Handle+Non-Compliant+Column+Separator] + - {Quote Character}[#label-Quote+Character] + - {Recipe: Handle Compliant Quote Character}[#label-Recipe-3A+Handle+Compliant+Quote+Character] + - {Recipe: Handle Non-Compliant Quote Character}[#label-Recipe-3A+Handle+Non-Compliant+Quote+Character] + - {Recipe: Allow Liberal Parsing}[#label-Recipe-3A+Allow+Liberal+Parsing] +- {Special Handling}[#label-Special+Handling] + - {Special Line Handling}[#label-Special+Line+Handling] + - {Recipe: Ignore Blank Lines}[#label-Recipe-3A+Ignore+Blank+Lines] + - {Recipe: Ignore Selected Lines}[#label-Recipe-3A+Ignore+Selected+Lines] + - {Special Field Handling}[#label-Special+Field+Handling] + - {Recipe: Strip Fields}[#label-Recipe-3A+Strip+Fields] + - {Recipe: Handle Null Fields}[#label-Recipe-3A+Handle+Null+Fields] + - {Recipe: Handle Empty Fields}[#label-Recipe-3A+Handle+Empty+Fields] +- {Converting Fields}[#label-Converting+Fields] + - {Converting Fields to Objects}[#label-Converting+Fields+to+Objects] + - {Recipe: Convert Fields to Integers}[#label-Recipe-3A+Convert+Fields+to+Integers] + - {Recipe: Convert Fields to Floats}[#label-Recipe-3A+Convert+Fields+to+Floats] + - {Recipe: Convert Fields to Numerics}[#label-Recipe-3A+Convert+Fields+to+Numerics] + - {Recipe: Convert Fields to Dates}[#label-Recipe-3A+Convert+Fields+to+Dates] + - {Recipe: Convert Fields to DateTimes}[#label-Recipe-3A+Convert+Fields+to+DateTimes] + - {Recipe: Convert Assorted Fields to Objects}[#label-Recipe-3A+Convert+Assorted+Fields+to+Objects] + - {Recipe: Convert Fields to Other Objects}[#label-Recipe-3A+Convert+Fields+to+Other+Objects] + - {Recipe: Filter Field Strings}[#label-Recipe-3A+Filter+Field+Strings] + - {Recipe: Register Field Converters}[#label-Recipe-3A+Register+Field+Converters] + - {Using Multiple Field Converters}[#label-Using+Multiple+Field+Converters] + - {Recipe: Specify Multiple Field Converters in Option :converters}[#label-Recipe-3A+Specify+Multiple+Field+Converters+in+Option+-3Aconverters] + - {Recipe: Specify Multiple Field Converters in a Custom Converter List}[#label-Recipe-3A+Specify+Multiple+Field+Converters+in+a+Custom+Converter+List] +- {Converting Headers}[#label-Converting+Headers] + - {Recipe: Convert Headers to Lowercase}[#label-Recipe-3A+Convert+Headers+to+Lowercase] + - {Recipe: Convert Headers to Symbols}[#label-Recipe-3A+Convert+Headers+to+Symbols] + - {Recipe: Filter Header Strings}[#label-Recipe-3A+Filter+Header+Strings] + - {Recipe: Register Header Converters}[#label-Recipe-3A+Register+Header+Converters] + - {Using Multiple Header Converters}[#label-Using+Multiple+Header+Converters] + - {Recipe: Specify Multiple Header Converters in Option :header_converters}[#label-Recipe-3A+Specify+Multiple+Header+Converters+in+Option+-3Aheader_converters] + - {Recipe: Specify Multiple Header Converters in a Custom Header Converter List}[#label-Recipe-3A+Specify+Multiple+Header+Converters+in+a+Custom+Header+Converter+List] +- {Diagnostics}[#label-Diagnostics] + - {Recipe: Capture Unconverted Fields}[#label-Recipe-3A+Capture+Unconverted+Fields] + - {Recipe: Capture Field Info}[#label-Recipe-3A+Capture+Field+Info] + +=== Source Formats + +You can parse \CSV data from a \String, from a \File (via its path), or from an \IO stream. + +==== Parsing from a \String + +You can parse \CSV data from a \String, with or without headers. + +===== Recipe: Parse from \String with Headers + +Use class method CSV.parse with option +headers+ to read a source \String all at once +(may have memory resource implications): + string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + CSV.parse(string, headers: true) # => # + +Use instance method CSV#each with option +headers+ to read a source \String one row at a time: + CSV.new(string, headers: true).each do |row| + p row + end +Output: + # + # + # + +===== Recipe: Parse from \String Without Headers + +Use class method CSV.parse without option +headers+ to read a source \String all at once +(may have memory resource implications): + string = "foo,0\nbar,1\nbaz,2\n" + CSV.parse(string) # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +Use instance method CSV#each without option +headers+ to read a source \String one row at a time: + CSV.new(string).each do |row| + p row + end +Output: + ["foo", "0"] + ["bar", "1"] + ["baz", "2"] + +==== Parsing from a \File + +You can parse \CSV data from a \File, with or without headers. + +===== Recipe: Parse from \File with Headers + +Use instance method CSV#read with option +headers+ to read a file all at once: + string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + path = 't.csv' + File.write(path, string) + CSV.read(path, headers: true) # => # + +Use class method CSV.foreach with option +headers+ to read one row at a time: + CSV.foreach(path, headers: true) do |row| + p row + end +Output: + # + # + # + +===== Recipe: Parse from \File Without Headers + +Use class method CSV.read without option +headers+ to read a file all at once: + string = "foo,0\nbar,1\nbaz,2\n" + path = 't.csv' + File.write(path, string) + CSV.read(path) # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +Use class method CSV.foreach without option +headers+ to read one row at a time: + CSV.foreach(path) do |row| + p row + end +Output: + ["foo", "0"] + ["bar", "1"] + ["baz", "2"] + +==== Parsing from an \IO Stream + +You can parse \CSV data from an \IO stream, with or without headers. + +===== Recipe: Parse from \IO Stream with Headers + +Use class method CSV.parse with option +headers+ to read an \IO stream all at once: + string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + path = 't.csv' + File.write(path, string) + File.open(path) do |file| + CSV.parse(file, headers: true) + end # => # + +Use class method CSV.foreach with option +headers+ to read one row at a time: + File.open(path) do |file| + CSV.foreach(file, headers: true) do |row| + p row + end + end +Output: + # + # + # + +===== Recipe: Parse from \IO Stream Without Headers + +Use class method CSV.parse without option +headers+ to read an \IO stream all at once: + string = "foo,0\nbar,1\nbaz,2\n" + path = 't.csv' + File.write(path, string) + File.open(path) do |file| + CSV.parse(file) + end # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +Use class method CSV.foreach without option +headers+ to read one row at a time: + File.open(path) do |file| + CSV.foreach(file) do |row| + p row + end + end +Output: + ["foo", "0"] + ["bar", "1"] + ["baz", "2"] + +=== RFC 4180 Compliance + +By default, \CSV parses data that is compliant with +{RFC 4180}[https://tools.ietf.org/html/rfc4180] +with respect to: +- Row separator. +- Column separator. +- Quote character. + +==== Row Separator + +RFC 4180 specifies the row separator CRLF (Ruby "\r\n"). + +Although the \CSV default row separator is "\n", +the parser also by default handles row separator "\r" and the RFC-compliant "\r\n". + +===== Recipe: Handle Compliant Row Separator + +For strict compliance, use option +:row_sep+ to specify row separator "\r\n", +which allows the compliant row separator: + source = "foo,1\r\nbar,1\r\nbaz,2\r\n" + CSV.parse(source, row_sep: "\r\n") # => [["foo", "1"], ["bar", "1"], ["baz", "2"]] +But rejects other row separators: + source = "foo,1\nbar,1\nbaz,2\n" + CSV.parse(source, row_sep: "\r\n") # Raised MalformedCSVError + source = "foo,1\rbar,1\rbaz,2\r" + CSV.parse(source, row_sep: "\r\n") # Raised MalformedCSVError + source = "foo,1\n\rbar,1\n\rbaz,2\n\r" + CSV.parse(source, row_sep: "\r\n") # Raised MalformedCSVError + +===== Recipe: Handle Non-Compliant Row Separator + +For data with non-compliant row separators, use option +:row_sep+. +This example source uses semicolon (";") as its row separator: + source = "foo,1;bar,1;baz,2;" + CSV.parse(source, row_sep: ';') # => [["foo", "1"], ["bar", "1"], ["baz", "2"]] + +==== Column Separator + +RFC 4180 specifies column separator COMMA (Ruby ","). + +===== Recipe: Handle Compliant Column Separator + +Because the \CSV default comma separator is ',', +you need not specify option +:col_sep+ for compliant data: + source = "foo,1\nbar,1\nbaz,2\n" + CSV.parse(source) # => [["foo", "1"], ["bar", "1"], ["baz", "2"]] + +===== Recipe: Handle Non-Compliant Column Separator + +For data with non-compliant column separators, use option +:col_sep+. +This example source uses TAB ("\t") as its column separator: + source = "foo,1\tbar,1\tbaz,2" + CSV.parse(source, col_sep: "\t") # => [["foo", "1"], ["bar", "1"], ["baz", "2"]] + +==== Quote Character + +RFC 4180 specifies quote character DQUOTE (Ruby "\""). + +===== Recipe: Handle Compliant Quote Character + +Because the \CSV default quote character is "\"", +you need not specify option +:quote_char+ for compliant data: + source = "\"foo\",\"1\"\n\"bar\",\"1\"\n\"baz\",\"2\"\n" + CSV.parse(source) # => [["foo", "1"], ["bar", "1"], ["baz", "2"]] + +===== Recipe: Handle Non-Compliant Quote Character + +For data with non-compliant quote characters, use option +:quote_char+. +This example source uses SQUOTE ("'") as its quote character: + source = "'foo','1'\n'bar','1'\n'baz','2'\n" + CSV.parse(source, quote_char: "'") # => [["foo", "1"], ["bar", "1"], ["baz", "2"]] + +==== Recipe: Allow Liberal Parsing + +Use option +:liberal_parsing+ to specify that \CSV should +attempt to parse input not conformant with RFC 4180, such as double quotes in unquoted fields: + source = 'is,this "three, or four",fields' + CSV.parse(source) # Raises MalformedCSVError + CSV.parse(source, liberal_parsing: true) # => [["is", "this \"three", " or four\"", "fields"]] + +=== Special Handling + +You can use parsing options to specify special handling for certain lines and fields. + +==== Special Line Handling + +Use parsing options to specify special handling for blank lines, or for other selected lines. + +===== Recipe: Ignore Blank Lines + +Use option +:skip_blanks+ to ignore blank lines: + source = <<-EOT + foo,0 + + bar,1 + baz,2 + + , + EOT + parsed = CSV.parse(source, skip_blanks: true) + parsed # => [["foo", "0"], ["bar", "1"], ["baz", "2"], [nil, nil]] + +===== Recipe: Ignore Selected Lines + +Use option +:skip_lines+ to ignore selected lines. + source = <<-EOT + # Comment + foo,0 + bar,1 + baz,2 + # Another comment + EOT + parsed = CSV.parse(source, skip_lines: /^#/) + parsed # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +==== Special Field Handling + +Use parsing options to specify special handling for certain field values. + +===== Recipe: Strip Fields + +Use option +:strip+ to strip parsed field values: + CSV.parse_line(' a , b ', strip: true) # => ["a", "b"] + +===== Recipe: Handle Null Fields + +Use option +:nil_value+ to specify a value that will replace each field +that is null (no text): + CSV.parse_line('a,,b,,c', nil_value: 0) # => ["a", 0, "b", 0, "c"] + +===== Recipe: Handle Empty Fields + +Use option +:empty_value+ to specify a value that will replace each field +that is empty (\String of length 0); + CSV.parse_line('a,"",b,"",c', empty_value: 'x') # => ["a", "x", "b", "x", "c"] + +=== Converting Fields + +You can use field converters to change parsed \String fields into other objects, +or to otherwise modify the \String fields. + +==== Converting Fields to Objects + +Use field converters to change parsed \String objects into other, more specific, objects. + +There are built-in field converters for converting to objects of certain classes: +- \Float +- \Integer +- \Date +- \DateTime + +Other built-in field converters include: +- +:numeric+: converts to \Integer and \Float. +- +:all+: converts to \DateTime, \Integer, \Float. + +You can also define field converters to convert to objects of other classes. + +===== Recipe: Convert Fields to Integers + +Convert fields to \Integer objects using built-in converter +:integer+: + source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + parsed = CSV.parse(source, headers: true, converters: :integer) + parsed.map {|row| row['Value'].class} # => [Integer, Integer, Integer] + +===== Recipe: Convert Fields to Floats + +Convert fields to \Float objects using built-in converter +:float+: + source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + parsed = CSV.parse(source, headers: true, converters: :float) + parsed.map {|row| row['Value'].class} # => [Float, Float, Float] + +===== Recipe: Convert Fields to Numerics + +Convert fields to \Integer and \Float objects using built-in converter +:numeric+: + source = "Name,Value\nfoo,0\nbar,1.1\nbaz,2.2\n" + parsed = CSV.parse(source, headers: true, converters: :numeric) + parsed.map {|row| row['Value'].class} # => [Integer, Float, Float] + +===== Recipe: Convert Fields to Dates + +Convert fields to \Date objects using built-in converter +:date+: + source = "Name,Date\nfoo,2001-02-03\nbar,2001-02-04\nbaz,2001-02-03\n" + parsed = CSV.parse(source, headers: true, converters: :date) + parsed.map {|row| row['Date'].class} # => [Date, Date, Date] + +===== Recipe: Convert Fields to DateTimes + +Convert fields to \DateTime objects using built-in converter +:date_time+: + source = "Name,DateTime\nfoo,2001-02-03\nbar,2001-02-04\nbaz,2020-05-07T14:59:00-05:00\n" + parsed = CSV.parse(source, headers: true, converters: :date_time) + parsed.map {|row| row['DateTime'].class} # => [DateTime, DateTime, DateTime] + +===== Recipe: Convert Assorted Fields to Objects + +Convert assorted fields to objects using built-in converter +:all+: + source = "Type,Value\nInteger,0\nFloat,1.0\nDateTime,2001-02-04\n" + parsed = CSV.parse(source, headers: true, converters: :all) + parsed.map {|row| row['Value'].class} # => [Integer, Float, DateTime] + +===== Recipe: Convert Fields to Other Objects + +Define a custom field converter to convert \String fields into other objects. +This example defines and uses a custom field converter +that converts each column-1 value to a \Rational object: + rational_converter = proc do |field, field_context| + field_context.index == 1 ? field.to_r : field + end + source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + parsed = CSV.parse(source, headers: true, converters: rational_converter) + parsed.map {|row| row['Value'].class} # => [Rational, Rational, Rational] + +==== Recipe: Filter Field Strings + +Define a custom field converter to modify \String fields. +This example defines and uses a custom field converter +that strips whitespace from each field value: + strip_converter = proc {|field| field.strip } + source = "Name,Value\n foo , 0 \n bar , 1 \n baz , 2 \n" + parsed = CSV.parse(source, headers: true, converters: strip_converter) + parsed['Name'] # => ["foo", "bar", "baz"] + parsed['Value'] # => ["0", "1", "2"] + +==== Recipe: Register Field Converters + +Register a custom field converter, assigning it a name; +then refer to the converter by its name: + rational_converter = proc do |field, field_context| + field_context.index == 1 ? field.to_r : field + end + CSV::Converters[:rational] = rational_converter + source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + parsed = CSV.parse(source, headers: true, converters: :rational) + parsed['Value'] # => [(0/1), (1/1), (2/1)] + +==== Using Multiple Field Converters + +You can use multiple field converters in either of these ways: +- Specify converters in option +:converters+. +- Specify converters in a custom converter list. + +===== Recipe: Specify Multiple Field Converters in Option +:converters+ + +Apply multiple field converters by specifying them in option +:converters+: + source = "Name,Value\nfoo,0\nbar,1.0\nbaz,2.0\n" + parsed = CSV.parse(source, headers: true, converters: [:integer, :float]) + parsed['Value'] # => [0, 1.0, 2.0] + +===== Recipe: Specify Multiple Field Converters in a Custom Converter List + +Apply multiple field converters by defining and registering a custom converter list: + strip_converter = proc {|field| field.strip } + CSV::Converters[:strip] = strip_converter + CSV::Converters[:my_converters] = [:integer, :float, :strip] + source = "Name,Value\n foo , 0 \n bar , 1.0 \n baz , 2.0 \n" + parsed = CSV.parse(source, headers: true, converters: :my_converters) + parsed['Name'] # => ["foo", "bar", "baz"] + parsed['Value'] # => [0, 1.0, 2.0] + +=== Converting Headers + +You can use header converters to modify parsed \String headers. + +Built-in header converters include: +- +:symbol+: converts \String header to \Symbol. +- +:downcase+: converts \String header to lowercase. + +You can also define header converters to otherwise modify header \Strings. + +==== Recipe: Convert Headers to Lowercase + +Convert headers to lowercase using built-in converter +:downcase+: + source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + parsed = CSV.parse(source, headers: true, header_converters: :downcase) + parsed.headers # => ["name", "value"] + +==== Recipe: Convert Headers to Symbols + +Convert headers to downcased Symbols using built-in converter +:symbol+: + source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + parsed = CSV.parse(source, headers: true, header_converters: :symbol) + parsed.headers # => [:name, :value] + parsed.headers.map {|header| header.class} # => [Symbol, Symbol] + +==== Recipe: Filter Header Strings + +Define a custom header converter to modify \String fields. +This example defines and uses a custom header converter +that capitalizes each header \String: + capitalize_converter = proc {|header| header.capitalize } + source = "NAME,VALUE\nfoo,0\nbar,1\nbaz,2\n" + parsed = CSV.parse(source, headers: true, header_converters: capitalize_converter) + parsed.headers # => ["Name", "Value"] + +==== Recipe: Register Header Converters + +Register a custom header converter, assigning it a name; +then refer to the converter by its name: + capitalize_converter = proc {|header| header.capitalize } + CSV::HeaderConverters[:capitalize] = capitalize_converter + source = "NAME,VALUE\nfoo,0\nbar,1\nbaz,2\n" + parsed = CSV.parse(source, headers: true, header_converters: :capitalize) + parsed.headers # => ["Name", "Value"] + +==== Using Multiple Header Converters + +You can use multiple header converters in either of these ways: +- Specify header converters in option +:header_converters+. +- Specify header converters in a custom header converter list. + +===== Recipe: Specify Multiple Header Converters in Option :header_converters + +Apply multiple header converters by specifying them in option +:header_converters+: + source = "Name,Value\nfoo,0\nbar,1.0\nbaz,2.0\n" + parsed = CSV.parse(source, headers: true, header_converters: [:downcase, :symbol]) + parsed.headers # => [:name, :value] + +===== Recipe: Specify Multiple Header Converters in a Custom Header Converter List + +Apply multiple header converters by defining and registering a custom header converter list: + CSV::HeaderConverters[:my_header_converters] = [:symbol, :downcase] + source = "NAME,VALUE\nfoo,0\nbar,1.0\nbaz,2.0\n" + parsed = CSV.parse(source, headers: true, header_converters: :my_header_converters) + parsed.headers # => [:name, :value] + +=== Diagnostics + +==== Recipe: Capture Unconverted Fields + +To capture unconverted field values, use option +:unconverted_fields+: + source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n" + parsed = CSV.parse(source, converters: :integer, unconverted_fields: true) + parsed # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + parsed.each {|row| p row.unconverted_fields } +Output: + ["Name", "Value"] + ["foo", "0"] + ["bar", "1"] + ["baz", "2"] + +==== Recipe: Capture Field Info + +To capture field info in a custom converter, accept two block arguments. +The first is the field value; the second is a +CSV::FieldInfo+ object: + strip_converter = proc {|field, field_info| p field_info; field.strip } + source = " foo , 0 \n bar , 1 \n baz , 2 \n" + parsed = CSV.parse(source, converters: strip_converter) + parsed # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] +Output: + # + # + # + # + # + # diff --git a/ruby/doc/csv/recipes/recipes.rdoc b/ruby/doc/csv/recipes/recipes.rdoc new file mode 100644 index 000000000..9e4eaa1da --- /dev/null +++ b/ruby/doc/csv/recipes/recipes.rdoc @@ -0,0 +1,6 @@ +== Recipes for \CSV + +See: +- {Recipes for Parsing CSV}[./parsing_rdoc.html] +- {Recipes for Generating CSV}[./generating_rdoc.html] +- {Recipes for Filtering CSV}[./filtering_rdoc.html] diff --git a/ruby/doc/dig_methods.rdoc b/ruby/doc/dig_methods.rdoc new file mode 100644 index 000000000..366275d45 --- /dev/null +++ b/ruby/doc/dig_methods.rdoc @@ -0,0 +1,82 @@ += Dig Methods + +Ruby's +dig+ methods are useful for accessing nested data structures. + +Consider this data: + item = { + id: "0001", + type: "donut", + name: "Cake", + ppu: 0.55, + batters: { + batter: [ + {id: "1001", type: "Regular"}, + {id: "1002", type: "Chocolate"}, + {id: "1003", type: "Blueberry"}, + {id: "1004", type: "Devil's Food"} + ] + }, + topping: [ + {id: "5001", type: "None"}, + {id: "5002", type: "Glazed"}, + {id: "5005", type: "Sugar"}, + {id: "5007", type: "Powdered Sugar"}, + {id: "5006", type: "Chocolate with Sprinkles"}, + {id: "5003", type: "Chocolate"}, + {id: "5004", type: "Maple"} + ] + } + +Without a +dig+ method, you can write: + item[:batters][:batter][1][:type] # => "Chocolate" + +With a +dig+ method, you can write: + item.dig(:batters, :batter, 1, :type) # => "Chocolate" + +Without a +dig+ method, you can write, erroneously +(raises NoMethodError (undefined method `[]' for nil:NilClass)): + item[:batters][:BATTER][1][:type] + +With a +dig+ method, you can write (still erroneously, but avoiding the exception): + item.dig(:batters, :BATTER, 1, :type) # => nil + +== Why Is +dig+ Better? + +- It has fewer syntactical elements (to get wrong). +- It reads better. +- It does not raise an exception if an item is not found. + +== How Does +dig+ Work? + +The call sequence is: + obj.dig(*identifiers) + +The +identifiers+ define a "path" into the nested data structures: +- For each identifier in +identifiers+, calls method \#dig on a receiver + with that identifier. +- The first receiver is +self+. +- Each successive receiver is the value returned by the previous call to +dig+. +- The value finally returned is the value returned by the last call to +dig+. + +A +dig+ method raises an exception if any receiver does not respond to \#dig: + h = { foo: 1 } + # Raises TypeError (Integer does not have #dig method): + h.dig(:foo, :bar) + +== What Else? + +The structure above has \Hash objects and \Array objects, +both of which have instance method +dig+. + +Altogether there are six built-in Ruby classes that have method +dig+, +three in the core classes and three in the standard library. + +In the core: +- Array#dig: the first argument is an \Integer index. +- Hash#dig: the first argument is a key. +- Struct#dig: the first argument is a key. + +In the standard library: +- OpenStruct#dig: the first argument is a \String name. +- CSV::Table#dig: the first argument is an \Integer index or a \String header. +- CSV::Row#dig: the first argument is an \Integer index or a \String header. diff --git a/ruby/doc/documentation_guide.rdoc b/ruby/doc/documentation_guide.rdoc new file mode 100644 index 000000000..38438e94b --- /dev/null +++ b/ruby/doc/documentation_guide.rdoc @@ -0,0 +1,281 @@ += Documentation Guide + +This guide discusses recommendations for documenting +classes, modules, and methods +in the Ruby core and in the Ruby standard library. + +== Goal + +The goal of Ruby documentation is to impart the most important +and relevant in the shortest time. +The reader should be able to quickly understand the usefulness +of the subject code and how to use it. + +Providing too little information is bad, but providing unimportant +information or unnecessary examples is not good either. +Use your judgment about what the user needs to know. + +== General Guidelines + +- Keep in mind that the reader may not be fluent in \English. +- Write short declarative or imperative sentences. +- Group sentences into (ideally short) paragraphs, + each covering a single topic. +- Organize material with + {headers}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-Headers]. +- Refer to authoritative and relevant sources using + {links}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-Links]. +- Use simple verb tenses: simple present, simple past, simple future. +- Use simple sentence structure, not compound or complex structure. +- Avoid: + + - Excessive comma-separated phrases; + consider a {list}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-Simple+Lists]. + - Idioms and culture-specific references. + - Overuse of headers. + +=== \RDoc + +Ruby is documented using RDoc. +For information on \RDoc syntax and features, see the +{RDoc Markup Reference}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-RDoc+Markup+Reference]. + +=== Output from irb + +For code examples, consider using interactive Ruby, +{irb}[https://ruby-doc.org/stdlib/libdoc/irb/rdoc/IRB.html]. + +For a code example that includes +irb+ output, +consider aligning # => ... in successive lines. +Alignment may sometimes aid readability: + + a = [1, 2, 3] #=> [1, 2, 3] + a.shuffle! #=> [2, 3, 1] + a #=> [2, 3, 1] + +=== Headers + +Organize a long discussion with +{headers}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-Headers]. + +=== Blank Lines + +A blank line begins a new paragraph. + +A {code block}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-Paragraphs+and+Verbatim] +or {list}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-Simple+Lists] +should be preceded by and followed by a blank line. +This is unnecessary for the HTML output, but helps in the +ri+ output. + +=== Auto-Linking + +In general, \RDoc's auto-linking should not be suppressed. +For example, we should write +Array+, not \Array. + +We might consider whether to suppress when: + +- The word in question does not refer to a Ruby entity + (e.g., some uses of _Class_ or _English_). +- The reference is to the current class document + (e.g., _Array_ in the documentation for class +Array+). +- The same reference is repeated many times + (e.g., _RDoc_ on this page). + +== Documenting Classes and Modules + +The general structure of the class or module documentation should be: + +* Synopsis +* Common uses, with examples +* "What's Here" summary (optional) + +=== Synopsis + +The synopsis is a short description of what the class or module does +and why the reader might want to use it. +Avoid details in the synopsis. + +=== Common Uses + +Show common uses of the class or module. +Depending on the class or module, this section may vary greatly +in both length and complexity. + +=== What's Here Summary + +The documentation for a class or module may include a "What's Here" section. + +Guidelines: + +- The section title is What's Here. +- Consider listing the parent class and any included modules; consider + {links}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-Links] + to their "What's Here" sections if those exist. +- List methods as a {labeled list}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-Labeled+Lists]. +- Each list entry's label is a method name; + if the method has aliases, include those with the "base" method method, + and do not list them separately. +- Check the rendered documentation to determine whether \RDoc has recognized + the method and linked to it; if not, manually insert a + {link}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-Links]. +- Each entry's description is a 1-line synopsis for the method. +- Keep the description short. +- If there are more entries, consider gouping them into subsections with headers. +- If there are more than a few such subsections, + consider adding a table of contents just below the main section title. + +== Documenting Methods + +=== General Structure + +The general structure of the method documentation should be: + +* Calling sequence (for methods written in C). +* Synopsis (short description). +* Details and examples. +* Argument description (if necessary). +* Corner cases and exceptions. +* Aliases. +* Related methods (optional). + +=== Calling Sequence (for methods written in C) + +For methods written in Ruby, \RDoc documents the calling sequence automatically. + +For methods written in C, \RDoc cannot determine what arguments +the method accepts, so those need to be documented using \RDoc directive +{:call-seq:}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-Method+arguments]. + +Example: + + * call-seq: + * array.count -> integer + * array.count(obj) -> integer + * array.count {|element| ... } -> integer + +When creating the call-seq, use the form + + receiver_type.method_name(arguments) {|block_arguments|} -> return_type + +Omit the parentheses for cases where the method does not accept arguments, +and omit the block for cases where a block is not accepted. + +In the cases where method can return multiple different types, separate the +types with "or". If the method can return any type, use "object". If the +method returns the receiver, use "self". + +In cases where the method accepts optional arguments, use a call-seq +with an optional argument if the method has the same behavior when an argument +is omitted as when the argument is passed with the default value. For example, +use: + + * obj.respond_to?(symbol, include_all=false) -> true or false + +Instead of: + + * obj.respond_to?(symbol) -> true or false + * obj.respond_to?(symbol, include_all) -> true or false + +However, as shown above for Array#count, use separate lines if the +behavior is different if the argument is omitted. + +Omit aliases from the call-seq, but mention them near the end (see below). + + +A +call-seq+ block should have {|x| ... }, not {|x| block } or {|x| code }. + +A +call-seq+ output should: + +- Have +self+, not +receiver+ or +array+. +- Begin with +new_+ if and only if the output object is a new instance + of the receiver's class, to emphasize that the output object is not +self+. + +=== Synopsis + +The synopsis comes next, and is a short description of what the +method does and why you would want to use it. Ideally, this +is a single sentence, but for more complex methods it may require +an entire paragraph. + +For Array#count, the synopsis is: + + Returns a count of specified elements. + +This is great as it is short and descriptive. Avoid documenting +too much in the synopsis, stick to the most important information +for the benefit of the reader. + +=== Details and Examples + +Most non-trivial methods benefit from examples, as well as details +beyond what is given in the synopsis. In the details and examples +section, you can document how the method handles different types +of arguments, and provides examples on proper usage. In this +section, focus on how to use the method properly, not on how the +method handles improper arguments or corner cases. + +Not every behavior of a method requires an example. If the method +is documented to return +self+, you don't need to provide an example +showing the return value is the same as the receiver. If the method +is documented to return +nil+, you don't need to provide an example +showing that it returns +nil+. If the details mention that for a +certain argument type, an empty array is returned, you don't need +to provide an example for that. + +Only add an example if it provides the user additional information, +do not add an example if it provides the same information given +in the synopsis or details. The purpose of examples is not to prove +what the details are stating. + +=== Argument Description (if necessary) + +For methods that require arguments, if not obvious and not explicitly +mentioned in the details or implicitly shown in the examples, you can +provide details about the types of arguments supported. When discussing +the types of arguments, use simple language even if less-precise, such +as "level must be an integer", not "level must be an Integer-convertible +object". The vast majority of use will be with the expected type, not an +argument that is explicitly convertible to the expected type, and +documenting the difference is not important. + +For methods that take blocks, it can be useful to document the type of +argument passed if it is not obvious, not explicitly mentioned in the +details, and not implicitly shown in the examples. + +If there is more than one argument or block argument, use a +{labeled list}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-Labeled+Lists]} + +=== Corner Cases and Exceptions + +For corner cases of methods, such as atypical usage, briefly mention +the behavior, but do not provide any examples. + +Only document exceptions raised if they are not obvious. For example, +if you have stated earlier than an argument type must be an integer, +you do not need to document that a \TypeError is raised if a non-integer +is passed. Do not provide examples of exceptions being raised unless +that is a common case, such as \Hash#fetch raising a \KeyError. + +=== Aliases + +Mention aliases in the form + + Array#find_index is an alias for Array#index. + +=== Related Methods (optional) + +In some cases, it is useful to document which methods are related to +the current method. For example, documentation for \Hash#[] might +mention \Hash#fetch as a related method, and \Hash#merge might mention +\Hash#merge! as a related method. Consider which methods may be related +to the current method, and if you think the reader would benefit it, +at the end of the method documentation, add a line starting with +"Related: " (e.g. "Related: #fetch"). Don't list more than three +related methods. If you think more than three methods are related, +pick the three you think are most important and list those three. + +=== Methods Accepting Multiple Argument Types + +For methods that accept multiple argument types, in some cases it can +be useful to document the different argument types separately. It's +best to use a separate paragraph for each case you are discussing. diff --git a/ruby/doc/dtrace_probes.rdoc b/ruby/doc/dtrace_probes.rdoc index d2cdd5690..1b20597ab 100644 --- a/ruby/doc/dtrace_probes.rdoc +++ b/ruby/doc/dtrace_probes.rdoc @@ -52,15 +52,21 @@ with when they are fired and the arguments they take: [ruby:::method-entry(classname, methodname, filename, lineno);] This probe is fired just before a method is entered. - classname name of the class (a string) - methodname name of the method about to be executed (a string) - filename the file name where the method is _being called_ (a string) - lineno the line number where the method is _being called_ (an int) + classname:: name of the class (a string) + methodname:: name of the method about to be executed (a string) + filename:: the file name where the method is _being called_ (a string) + lineno:: the line number where the method is _being called_ (an int) + + *NOTE*: will only be fired if tracing is enabled, e.g. with: TracePoint.new{}.enable. + See Feature#14104[https://bugs.ruby-lang.org/issues/14104] for more details. [ruby:::method-return(classname, methodname, filename, lineno);] This probe is fired just after a method has returned. The arguments are the same as "ruby:::method-entry". + *NOTE*: will only be fired if tracing is enabled, e.g. with: TracePoint.new{}.enable. + See Feature#14104[https://bugs.ruby-lang.org/issues/14104] for more details. + [ruby:::cmethod-entry(classname, methodname, filename, lineno);] This probe is fired just before a C method is entered. The arguments are the same as "ruby:::method-entry". @@ -72,9 +78,9 @@ with when they are fired and the arguments they take: [ruby:::require-entry(requiredfile, filename, lineno);] This probe is fired on calls to rb_require_safe (when a file is required). - requiredfile is the name of the file to be required (string). - filename is the file that called "require" (string). - lineno is the line number where the call to require was made (int). + requiredfile:: the name of the file to be required (string). + filename:: the file that called "+require+" (string). + lineno:: the line number where the call to require was made (int). [ruby:::require-return(requiredfile, filename, lineno);] This probe is fired just before rb_require_safe (when a file is required) @@ -84,11 +90,11 @@ with when they are fired and the arguments they take: [ruby:::find-require-entry(requiredfile, filename, lineno);] This probe is fired right before search_required is called. search_required determines whether the file has already been required by searching loaded - features ($"), and if not, figures out which file must be loaded. + features ($"), and if not, figures out which file must be loaded. - requiredfile is the file to be required (string). - filename is the file that called "require" (string). - lineno is the line number where the call to require was made (int). + requiredfile:: the file to be required (string). + filename:: the file that called "require" (string). + lineno:: the line number where the call to require was made (int). [ruby:::find-require-return(requiredfile, filename, lineno);] This probe is fired right after search_required returns. See the @@ -106,56 +112,56 @@ with when they are fired and the arguments they take: [ruby:::raise(classname, filename, lineno);] This probe is fired when an exception is raised. - classname is the class name of the raised exception (string) - filename the name of the file where the exception was raised (string) - lineno the line number in the file where the exception was raised (int) + classname:: the class name of the raised exception (string) + filename:: the name of the file where the exception was raised (string) + lineno:: the line number in the file where the exception was raised (int) [ruby:::object-create(classname, filename, lineno);] This probe is fired when an object is about to be allocated. - classname the class of the allocated object (string) - filename the name of the file where the object is allocated (string) - lineno the line number in the file where the object is allocated (int) + classname:: the class of the allocated object (string) + filename:: the name of the file where the object is allocated (string) + lineno:: the line number in the file where the object is allocated (int) [ruby:::array-create(length, filename, lineno);] This probe is fired when an Array is about to be allocated. - length the size of the array (long) - filename the name of the file where the array is allocated (string) - lineno the line number in the file where the array is allocated (int) + length:: the size of the array (long) + filename:: the name of the file where the array is allocated (string) + lineno:: the line number in the file where the array is allocated (int) [ruby:::hash-create(length, filename, lineno);] This probe is fired when a Hash is about to be allocated. - length the size of the hash (long) - filename the name of the file where the hash is allocated (string) - lineno the line number in the file where the hash is allocated (int) + length:: the size of the hash (long) + filename:: the name of the file where the hash is allocated (string) + lineno:: the line number in the file where the hash is allocated (int) [ruby:::string-create(length, filename, lineno);] This probe is fired when a String is about to be allocated. - length the size of the string (long) - filename the name of the file where the string is allocated (string) - lineno the line number in the file where the string is allocated (int) + length:: the size of the string (long) + filename:: the name of the file where the string is allocated (string) + lineno:: the line number in the file where the string is allocated (int) [ruby:::symbol-create(str, filename, lineno);] This probe is fired when a Symbol is about to be allocated. - str the contents of the symbol (string) - filename the name of the file where the string is allocated (string) - lineno the line number in the file where the string is allocated (int) + str:: the contents of the symbol (string) + filename:: the name of the file where the string is allocated (string) + lineno:: the line number in the file where the string is allocated (int) [ruby:::parse-begin(sourcefile, lineno);] Fired just before parsing and compiling a source file. - sourcefile the file being parsed (string) - lineno the line number where the source starts (int) + sourcefile:: the file being parsed (string) + lineno:: the line number where the source starts (int) [ruby:::parse-end(sourcefile, lineno);] Fired just after parsing and compiling a source file. - sourcefile the file being parsed (string) - lineno the line number where the source ended (int) + sourcefile:: the file being parsed (string) + lineno:: the line number where the source ended (int) [ruby:::gc-mark-begin();] Fired at the beginning of a mark phase. @@ -172,7 +178,7 @@ with when they are fired and the arguments they take: [ruby:::method-cache-clear(class, sourcefile, lineno);] Fired when the method cache is cleared. - class is the classname being cleared, or "global" (string) - sourcefile the file being parsed (string) - lineno the line number where the source ended (int) + class:: the classname being cleared, or "global" (string) + sourcefile:: the file being parsed (string) + lineno:: the line number where the source ended (int) diff --git a/ruby/doc/extension.ja.rdoc b/ruby/doc/extension.ja.rdoc index 47303ec40..feae7b97d 100644 --- a/ruby/doc/extension.ja.rdoc +++ b/ruby/doc/extension.ja.rdoc @@ -190,6 +190,21 @@ INT2NUM() :: ä»»æ„ã®æ•´æ•°ã‹ã‚‰VALUE㸠INT2NUM()ã¯æ•´æ•°ãŒFIXNUMã®ç¯„囲ã«åŽã¾ã‚‰ãªã„å ´åˆï¼ŒBignumã«å¤‰æ› ã—ã¦ãã‚Œã¾ã™(ãŒï¼Œå°‘ã—é…ã„). +Cã®çœŸå½å€¤ã‚’Rubyã® +true+ ã¾ãŸã¯ +false+ ã«å¤‰æ›ã™ã‚‹ + +RBOOL() :: + +RBOOL(v) 㯠_v_ ãŒéž0ã®ã¨ã +Qtrue+ ,ãれ以外 +ã® _v_ ãŒ0ã®ã¨ã +Qfalse+ ã‚’è¿”ã—ã¾ã™ï¼Ž + +注æ„: RBOOLã¯å®šç¾©ã•ã‚Œã¦ã„ã‚‹ã®ã¯Ruby 3.1以é™ãªã®ã§ï¼Œãれより +å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ログラム中ã§ä½¿ã„ãŸã„ã¨ãã¯ï¼Œä»¥ +下ã®ã‚ˆã†ãªå®šç¾©ã‚’追加ã—ã¦ãŠãå¿…è¦ãŒã‚ã‚‹ã§ã—ょã†ï¼Ž + + #ifndef RBOOL + #define RBOOL(v) ((v) ? Qtrue : Qfalse) + #endif + === Rubyã®ãƒ‡ãƒ¼ã‚¿ã‚’æ“作ã™ã‚‹ 先程も述ã¹ãŸé€šã‚Šï¼ŒRubyã®æ§‹é€ ä½“をアクセスã™ã‚‹æ™‚ã«å†…容ã®æ›´æ–°ã‚’ @@ -617,12 +632,14 @@ C言語ã¨Rubyã®é–“ã§æƒ…報を共有ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦è§£èª¬ã—ã¾ã™ï¼Ž Qtrue :: Qfalse :: - 真å½å€¤ï¼ŽQfalseã¯C言語ã§ã‚‚å½ã¨ã¿ãªã•ã‚Œã¾ã™(ã¤ã¾ã‚Š0). + 真å½å€¤ï¼ŽC言語ã‹ã‚‰è¦‹ãŸã€Œtrueã€ã¨ã€Œfalseã€ï¼Ž Qnil :: C言語ã‹ã‚‰è¦‹ãŸã€Œnilã€ï¼Ž +RTEST(obj)ã¨ã„ã†ãƒžã‚¯ãƒ­ã¯objãŒQfalseã‹Qnilã®ã¨ã0ã‚’è¿”ã—ã¾ã™ï¼Ž + === Cã¨Rubyã§å…±æœ‰ã•ã‚Œã‚‹å¤§åŸŸå¤‰æ•° Cã¨Rubyã§å¤§åŸŸå¤‰æ•°ã‚’使ã£ã¦æƒ…報を共有ã§ãã¾ã™ï¼Žå…±æœ‰ã§ãる大域 @@ -697,30 +714,28 @@ Cã®ä¸–ç•Œã§å®šç¾©ã•ã‚ŒãŸãƒ‡ãƒ¼ã‚¿(構造体)ã‚’Rubyã®ã‚ªãƒ–ジェクト㨠ã“ã®ãƒžã‚¯ãƒ­ã®æˆ»ã‚Šå€¤ã¯ç”Ÿæˆã•ã‚ŒãŸã‚ªãƒ–ジェクトを表ã™VALUE値ã§ã™ï¼Ž -klassã¯ã“ã®ã‚ªãƒ–ジェクトã®ã‚¯ãƒ©ã‚¹ã§ã™ï¼Ždata_typeã¯ã“ã®æ§‹é€ ä½“ã‚’ -RubyãŒç®¡ç†ã™ã‚‹ãŸã‚ã®æƒ…報を記述ã—ãŸconst rb_data_type_tåž‹ã¸ã® -ãƒã‚¤ãƒ³ã‚¿ã§ã™ï¼Ž +klassã¯ã“ã®ã‚ªãƒ–ジェクトã®ã‚¯ãƒ©ã‚¹ã§ã™ï¼Žklassã¯, Objectクラス㋠+ら派生ã—, å¿…ãšrb_define_alloc_funcã‹rb_undef_alloc_funcを呼 +ã³å‡ºã—ã¦allocatorを設定ã—ã¦ãã ã•ã„. -ãªãŠ, klassã¯, Objectã‚„ä»–ã®ã‚¯ãƒ©ã‚¹ã§ã¯ãªãData (rb_cData)ã¨ã„ -ã†ç‰¹åˆ¥ãªã‚¯ãƒ©ã‚¹ã‹ã‚‰æ´¾ç”Ÿã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•ã‚Œã¾ã™ï¼Ž -Dataã‹ã‚‰æ´¾ç”Ÿã—ãªã„å ´åˆã«ã¯, å¿…ãšrb_undef_alloc_func(klass) -を呼ã³å‡ºã—ã¦ãã ã•ã„. +data_typeã¯ã“ã®æ§‹é€ ä½“ã‚’RubyãŒç®¡ç†ã™ã‚‹ãŸã‚ã®æƒ…報を記述ã—㟠+const rb_data_type_tåž‹ã¸ã®ãƒã‚¤ãƒ³ã‚¿ã§ã™ï¼Ž rb_data_type_tã¯æ¬¡ã®ã‚ˆã†ã«å®šç¾©ã•ã‚Œã¦ã„ã¾ã™ï¼Ž typedef struct rb_data_type_struct rb_data_type_t; struct rb_data_type_struct { - const char *wrap_struct_name; - struct { - void (*dmark)(void*); - void (*dfree)(void*); - size_t (*dsize)(const void *); - void *reserved[2]; - } function; - const rb_data_type_t *parent; - void *data; - VALUE flags; + const char *wrap_struct_name; + struct { + void (*dmark)(void*); + void (*dfree)(void*); + size_t (*dsize)(const void *); + void *reserved[2]; + } function; + const rb_data_type_t *parent; + void *data; + VALUE flags; }; wrap_struct_nameã¯ã“ã®æ§‹é€ ä½“を識別ã™ã‚‹åå‰ã§ã™ï¼Žä¸»ã«çµ±è¨ˆæƒ…å ± @@ -743,8 +758,8 @@ dmarkã¯ã‚¬ãƒ¼ãƒ™ãƒ¼ã‚¸ã‚³ãƒ¬ã‚¯ã‚¿ãŒã‚ªãƒ–ジェクトã¸ã®å‚照をマーク ++ dfreeã¯ã“ã®æ§‹é€ ä½“ãŒã‚‚ã†ä¸è¦ã«ãªã£ãŸæ™‚ã«å‘¼ã°ã‚Œã‚‹é–¢æ•°ã§ã™ï¼Žã“ -ã®é–¢æ•°ãŒã‚¬ãƒ¼ãƒ™ãƒ¼ã‚¸ã‚³ãƒ¬ã‚¯ã‚¿ã‹ã‚‰å‘¼ã°ã‚Œã¾ã™ï¼Žã“ã‚ŒãŒ-1ã®å ´åˆã¯ï¼Œ -å˜ç´”ã«æ§‹é€ ä½“ãŒè§£æ”¾ã•ã‚Œã¾ã™ï¼Ž +ã®é–¢æ•°ãŒã‚¬ãƒ¼ãƒ™ãƒ¼ã‚¸ã‚³ãƒ¬ã‚¯ã‚¿ã‹ã‚‰å‘¼ã°ã‚Œã¾ã™ï¼Žã“れ㌠+RUBY_DEFAULT_FREEã®å ´åˆã¯ï¼Œå˜ç´”ã«æ§‹é€ ä½“ãŒè§£æ”¾ã•ã‚Œã¾ã™ï¼Ž dsizeã¯æ§‹é€ ä½“ãŒæ¶ˆè²»ã—ã¦ã„るメモリã®ãƒã‚¤ãƒˆæ•°ã‚’è¿”ã™é–¢æ•°ã§ã™ï¼Ž 引数ã¨ã—ã¦æ§‹é€ ä½“ã¸ã®ãƒã‚¤ãƒ³ã‚¿ãŒæ¸¡ã•ã‚Œã¾ã™ï¼Žå®Ÿè£…困難ã§ã‚ã‚Œã°0 @@ -1108,9 +1123,8 @@ lex.c :: è‡ªå‹•ç”Ÿæˆ -> opt*.inc : è‡ªå‹•ç”Ÿæˆ -> vm.inc : è‡ªå‹•ç”Ÿæˆ -=== æ­£è¦è¡¨ç¾ã‚¨ãƒ³ã‚¸ãƒ³ (鬼車) +=== æ­£è¦è¡¨ç¾ã‚¨ãƒ³ã‚¸ãƒ³ (鬼雲) - regex.c regcomp.c regenc.c regerror.c @@ -1829,6 +1843,17 @@ rb_ary_store() ãªã©ã®ï¼Œé©åˆ‡ãª API 関数を利用ã™ã‚‹ã‚ˆã†ã«ã—ã¦ä¸‹ ãã®ã»ã‹ï¼Œå¯¾å¿œã«ã¤ã„ã¦ã®è©³ç´°ã¯ extension.rdoc ã®ã€ŒAppendix D. Generational GCã€ã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„. +== Appendix E. Ractor サãƒãƒ¼ãƒˆ + +Ruby 3.0 ã‹ã‚‰ã€Ruby プログラムを並列ã«å®Ÿè¡Œã™ã‚‹ãŸã‚ã®ä»•çµ„ã¿ã§ã‚ã‚‹ Ractor +ãŒå°Žå…¥ã•ã‚Œã¾ã—ãŸã€‚é©åˆ‡ã«ä¸¦åˆ—ã«å®Ÿè¡Œã™ã‚‹ãŸã‚ã«ã¯ã€Ractor サãƒãƒ¼ãƒˆãŒå¿…è¦ã« +ãªã‚Šã¾ã™ã€‚サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ライブラリã¯ã€ãƒ¡ã‚¤ãƒ³ Ractor 以外ã§å®Ÿè¡Œã™ã‚‹ã¨ +エラーã«ãªã‚Šã¾ã™ï¼ˆRactor::UnsafeError)。 + +Ractor をサãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã®è©³ç´°ã¯ã€extension.rdoc ã®ã€ŒAppendix F. Ractor +supportã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + + :enddoc: Local variables: :enddoc: fill-column: 60 :enddoc: end: diff --git a/ruby/doc/extension.rdoc b/ruby/doc/extension.rdoc index 79eb96d51..3bb00c154 100644 --- a/ruby/doc/extension.rdoc +++ b/ruby/doc/extension.rdoc @@ -93,7 +93,9 @@ There are also faster check macros for fixnums and nil. The data for type T_NIL, T_FALSE, T_TRUE are nil, false, true respectively. They are singletons for the data type. The equivalent C constants are: Qnil, Qfalse, Qtrue. -Note that Qfalse is false in C also (i.e. 0), but not Qnil. +RTEST() will return true if a VALUE is neither Qfalse nor Qnil. +If you need to differentiate Qfalse from Qnil, +specifically test against Qfalse. The T_FIXNUM data is a 31bit or 63bit length fixed integer. This size depends on the size of long: if long is 32bit then @@ -167,6 +169,21 @@ INT2NUM() :: for arbitrary sized integers. INT2NUM() converts an integer into a Bignum if it is out of the FIXNUM range, but is a bit slower. +To convert C boolean to Ruby +true+ or +false+ : + +RBOOL() :: + +RBOOL(v) returns +Qtrue+ if _v_ is not 0, or +Qfalse+ +otherwisze _v_ is 0. + +Notice: RBOOL is defined since Ruby 3.1, if you want to use it in a +program which supports older versions, the fallback definition will be +needed, like as the following. + + #ifndef RBOOL + #define RBOOL(v) ((v) ? Qtrue : Qfalse) + #endif + === Manipulating Ruby Data As I already mentioned, it is not recommended to modify an object's @@ -450,15 +467,13 @@ you may rely on: To specify whether keyword arguments are passed when calling super: - VALUE rb_call_super(int argc, const VALUE *argv, int kw_splat) + VALUE rb_call_super_kw(int argc, const VALUE *argv, int kw_splat) +kw_splat+ can have these possible values (used by all methods that accept +kw_splat+ argument): RB_NO_KEYWORDS :: Do not pass keywords RB_PASS_KEYWORDS :: Pass keywords, final argument should be a hash of keywords -RB_PASS_EMPTY_KEYWORDS :: Pass empty keywords (not included in arguments) - (this will be removed in Ruby 3.0) RB_PASS_CALLED_KEYWORDS :: Pass keywords if current method was called with keywords, useful for argument delegation @@ -659,30 +674,30 @@ with the next macro. TypedData_Wrap_Struct() returns a created Ruby object as a VALUE. -The klass argument is the class for the object. +The klass argument is the class for the object. The klass should +derive from rb_cObject, and the allocator must be set by calling +rb_define_alloc_func or rb_undef_alloc_func. + data_type is a pointer to a const rb_data_type_t which describes how Ruby should manage the struct. -It is recommended that klass derives from a special class called -Data (rb_cData) but not from Object or other ordinal classes. -If it doesn't, you have to call rb_undef_alloc_func(klass). - rb_data_type_t is defined like this. Let's take a look at each member of the struct. typedef struct rb_data_type_struct rb_data_type_t; struct rb_data_type_struct { - const char *wrap_struct_name; - struct { - void (*dmark)(void*); - void (*dfree)(void*); - size_t (*dsize)(const void *); - void *reserved[2]; - } function; - const rb_data_type_t *parent; - void *data; - VALUE flags; + const char *wrap_struct_name; + struct { + void (*dmark)(void*); + void (*dfree)(void*); + size_t (*dsize)(const void *); + void (*dcompact)(void*); + void *reserved[1]; + } function; + const rb_data_type_t *parent; + void *data; + VALUE flags; }; wrap_struct_name is an identifier of this instance of the struct. @@ -703,14 +718,22 @@ Note that it is recommended to avoid such a reference. ++ dfree is a function to free the pointer allocation. -If this is -1, the pointer will be just freed. +If this is RUBY_DEFAULT_FREE, the pointer will be just freed. dsize calculates memory consumption in bytes by the struct. Its parameter is a pointer to your struct. You can pass 0 as dsize if it is hard to implement such a function. But it is still recommended to avoid 0. -You have to fill reserved and parent with 0. +dcompact is invoked when memory compaction took place. +Referred Ruby objects that were marked by rb_gc_mark_movable() +can here be updated per rb_gc_location(). + +You have to fill reserved with 0. + +parent can point to another C type definition that the Ruby object +is inherited from. Then TypedData_Get_Struct() does also accept +derived objects. You can fill "data" with an arbitrary value for your use. Ruby does nothing with the member. @@ -742,6 +765,14 @@ RUBY_TYPED_WB_PROTECTED :: More about write barriers can be found in "Generational GC" in Appendix D. +RUBY_TYPED_FROZEN_SHAREABLE :: + + This flag indicates that the object is shareable object + if the object is frozen. See Appendix F more details. + + If this flag is not set, the object can not become a shareable + object by Ractor.make_shareable() method. + You can allocate and wrap the structure in one step. TypedData_Make_Struct(klass, type, data_type, sval) @@ -799,11 +830,14 @@ the library. Here's the example of an initializing function. + #include void Init_dbm(void) { /* define DBM class */ VALUE cDBM = rb_define_class("DBM", rb_cObject); + /* Redefine DBM.allocate + rb_define_alloc_func(cDBM, fdbm_alloc); /* DBM includes Enumerable module */ rb_include_module(cDBM, rb_mEnumerable); @@ -813,7 +847,7 @@ Here's the example of an initializing function. /* DBM instance method close(): no args */ rb_define_method(cDBM, "close", fdbm_close, 0); /* DBM instance method []: 1 argument */ - rb_define_method(cDBM, "[]", fdbm_fetch, 1); + rb_define_method(cDBM, "[]", fdbm_aref, 1); /* ... */ @@ -836,10 +870,19 @@ TypedData_Make_Struct. RUBY_TYPED_FREE_IMMEDIATELY, }; - obj = TypedData_Make_Struct(klass, struct dbmdata, &dbm_type, dbmp); + static VALUE + fdbm_alloc(VALUE klass) + { + struct dbmdata *dbmp; + /* Allocate T_DATA object and C struct and fill struct with zero bytes */ + return TypedData_Make_Struct(klass, struct dbmdata, &dbm_type, dbmp); + } This code wraps the dbmdata structure into a Ruby object. We avoid wrapping DBM* directly, because we want to cache size information. +Since Object.allocate allocates an ordinary T_OBJECT type (instead +of T_DATA), it's important to either use rb_define_alloc_func() to +overwrite it or rb_undef_alloc_func() to delete it. To retrieve the dbmdata structure from a Ruby object, we define the following macro: @@ -857,9 +900,13 @@ There are three kinds of way to receive method arguments. First, methods with a fixed number of arguments receive arguments like this: static VALUE - fdbm_delete(VALUE obj, VALUE keystr) + fdbm_aref(VALUE obj, VALUE keystr) { - /* ... */ + struct dbmdata *dbmp; + GetDBM(obj, dbmp); + /* Use dbmp to access the key */ + dbm_fetch(dbmp->di_dbm, StringValueCStr(keystr)); + /* ... */ } The first argument of the C function is the self, the rest are the @@ -1005,7 +1052,24 @@ You can do anything you want with your library. The author of Ruby will not claim any restrictions on your code depending on the Ruby API. Feel free to use, modify, distribute or sell your program. -== Appendix A. Ruby Source Files Overview +== Appendix A. Ruby Header and Source Files Overview + +=== Ruby Header Files + +Everything under $repo_root/include/ruby is installed with +make install. +It should be included per #include from C extensions. +All symbols are public API with the exception of symbols prefixed with ++rbimpl_+ or +RBIMPL_+. They are implementation details and shouldn't +be used by C extensions. + +Only $repo_root/include/ruby/*.h are allowed to be #include-d +by C extensions. Files under $repo_root/include/ruby/internal +should not be #include-d directly. + +Header files under $repo_root/internal/ or directly under the +root $repo_root/*.h are not make-installed. +They are internal headers with only internal APIs. === Ruby Language Core @@ -1049,9 +1113,8 @@ lex.c :: automatically generated from keywords -> opt*.inc : automatically generated -> vm.inc : automatically generated -=== Regular Expression Engine (Oniguruma) +=== Regular Expression Engine (Onigumo) - regex.c regcomp.c regenc.c regerror.c @@ -1423,28 +1486,6 @@ rb_scan_args(int argc, VALUE *argv, const char *fmt, ...) :: ; argument captured as a hash. ; If keyword arguments are not ; provided, returns nil. - ; - ; Currently, will also consider - ; final argument as keywords if - ; it is a hash or can be - ; converted to a hash with - ; #to_hash. When the last - ; argument is nil, it is - ; captured if it is not - ; ambiguous to take it as - ; empty option hash; i.e. '*' - ; is not specified and - ; arguments are given more - ; than sufficient. - ; - ; However, handling final - ; argument as keywords if - ; method was not called with - ; keywords (whether final - ; argument is hash or nil) is - ; deprecated. In that case, a - ; warning will be emitted, and - ; in Ruby 3.0 it will be an error. sym-for-block-arg := "&" ; Indicates that an iterator ; block should be captured if ; given @@ -1469,8 +1510,6 @@ rb_scan_args_kw(int kw_splat, int argc, VALUE *argv, const char *fmt, ...) :: RB_SCAN_ARGS_PASS_CALLED_KEYWORDS :: Same behavior as +rb_scan_args+. RB_SCAN_ARGS_KEYWORDS :: The final argument should be a hash treated as keywords. - RB_SCAN_ARGS_EMPTY_KEYWORDS :: Don't treat a final hash as keywords. - (this will be removed in Ruby 3.0) RB_SCAN_ARGS_LAST_HASH_KEYWORDS :: Treat a final argument as keywords if it is a hash, and not as keywords otherwise. @@ -1877,13 +1916,13 @@ NORETURN_STYLE_NEW :: HAVE_RB_DEFINE_ALLOC_FUNC :: Means that function rb_define_alloc_func() is provided, that means the - allocation framework is used. This is same as the result of + allocation framework is used. This is the same as the result of have_func("rb_define_alloc_func", "ruby.h"). HAVE_RB_REG_NEW_STR :: Means that function rb_reg_new_str() is provided, that creates Regexp - object from String object. This is same as the result of + object from String object. This is the same as the result of have_func("rb_reg_new_str", "ruby.h"). HAVE_RB_IO_T :: @@ -1946,6 +1985,7 @@ the *_kw functions introduced in Ruby 2.7. #define rb_proc_call_with_block_kw(p, c, v, b, kw) rb_proc_call_with_block(p, c, v, b) #define rb_method_call_kw(c, v, m, kw) rb_method_call(c, v, m) #define rb_method_call_with_block_kw(c, v, m, b, kw) rb_method_call_with_block(c, v, m, b) + #define rb_eval_cmd_kwd(c, a, kw) rb_eval_cmd(c, a, 0) #endif == Appendix C. Functions available for use in extconf.rb @@ -2049,7 +2089,7 @@ Before inserting write barriers, you need to know about RGenGC algorithm available in include/ruby/ruby.h. An example is available in iseq.c. For a complete guide for RGenGC and write barriers, please refer to -. +. == Appendix E. RB_GC_GUARD to protect from premature GC @@ -2100,6 +2140,89 @@ keyword in C. RB_GC_GUARD has the following advantages: compilers and architectures. RB_GC_GUARD is customizable for broken systems/compilers without negatively affecting other systems. +== Appendix F. Ractor support + +Ractor is parallel execution mechanism introduced from Ruby 3.0. All +ractrors can run in parallel by different OS thread (underlying system +provided thread), so the C extension should be thread-safe. Now we call +the property that C extension can run in multiple ractors "Ractor-safe". + +By default, all C extensions are recognized as Ractor-unsafe. If C +extension becomes Ractor-safe, the extension should call +rb_ext_ractor_safe(true) at the Init_ function and all defined method +marked as Ractor-safe. Ractor-unsafe C-methods only been called from +main-ractor. If non-main ractor calls it, then Ractor::UnsafeError is +raised. + +BTW non-"Ractor-safe" extensions raises an error on non-main ractors, so +that it is "safe" because unsafe operations are not allowed. +"Ractor-safe" property means "multi-Ractor-ready" or "safe on +multi-ractors execution". "Ractor-safe" term comes from "Thread-safe". + +To make "Ractor-safe" C extension, we need to check the following points: + +(1) Do not share unshareable objects between ractors + +For example, C's global variable can lead sharing an unshareable objects +between ractors. + + VALUE g_var; + VALUE set(VALUE self, VALUE v){ return g_var = v; } + VALUE get(VALUE self){ return g_var; } + +set() and get() pair can share an unshareable objects using g_var, and +it is Ractor-unsafe. + +Not only using global variables directly, some indirect data structure +such as global st_table can share the objects, so please take care. + +Note that class and module objects are shareable objects, so you can +keep the code "cFoo = rb_define_class(...)" with C's global variables. + +(2) Check the thread-safety of the extension + +An extension should be thread-safe. For example, the following code is +not thread-safe: + + bool g_called = false; + VALUE call(VALUE self) { + if (g_called) rb_raise("recursive call is not allowed."); + g_called = true; + VALUE ret = do_something(); + g_called = false; + return ret; + } + +because g_called global variable should be synchronized by other +ractor's threads. To avoid such data-race, some synchronization should +be used. Check include/ruby/thread_native.h and include/ruby/atomic.h. + +On the Ractor mechanism, most of objects given by the method parameters +or the receiver are isolated by Ractor's boundary, it is easy to make +thread-safe code than usual thread-programming in general. For example, +we don't need to lock an array object to access the element of it. + +(3) Check the thread-safety of using library + +If an extension relies on the external library libfoo and the function +foo(), the function foo() should be thread safe. + +(4) Make an object shareable + +This is not required to make an extension Ractor-safe. + +If an extension provides special objects defined by rb_data_type_t, +consider these objects can become shareable or not. + +RUBY_TYPED_FROZEN_SHAREABLE flag indicates that these objects can be +shareable objects if the object is frozen. This means that if the object +is frozen, the mutation of wrapped data is not allowed. + +(5) Others + +Maybe there are more points which should be considered to make +Ractor-safe extension, so this document will be extended. + :enddoc: Local variables: :enddoc: fill-column: 70 :enddoc: end: diff --git a/ruby/doc/fiber.md b/ruby/doc/fiber.md new file mode 100644 index 000000000..a334faf73 --- /dev/null +++ b/ruby/doc/fiber.md @@ -0,0 +1,232 @@ +# Fiber + +Fibers provide a mechanism for cooperative concurrency. + +## Context Switching + +Fibers execute a user-provided block. During the execution, the block may call `Fiber.yield` or `Fiber.transfer` to switch to another fiber. `Fiber#resume` is used to continue execution from the point where `Fiber.yield` was called. + +``` ruby +#!/usr/bin/env ruby + +puts "1: Start program." + +f = Fiber.new do + puts "3: Entered fiber." + Fiber.yield + puts "5: Resumed fiber." +end + +puts "2: Resume fiber first time." +f.resume + +puts "4: Resume fiber second time." +f.resume + +puts "6: Finished." +``` + +This program demonstrates the flow control of fibers. + +## Scheduler + +The scheduler interface is used to intercept blocking operations. A typical +implementation would be a wrapper for a gem like `EventMachine` or `Async`. This +design provides separation of concerns between the event loop implementation +and application code. It also allows for layered schedulers which can perform +instrumentation. + +To set the scheduler for the current thread: + +``` ruby +Fiber.set_scheduler(MyScheduler.new) +``` + +When the thread exits, there is an implicit call to `set_scheduler`: + +``` ruby +Fiber.set_scheduler(nil) +``` + +### Design + +The scheduler interface is designed to be a un-opinionated light-weight layer +between user code and blocking operations. The scheduler hooks should avoid +translating or converting arguments or return values. Ideally, the exact same +arguments from the user code are provided directly to the scheduler hook with +no changes. + +### Interface + +This is the interface you need to implement. + +``` ruby +class Scheduler + # Wait for the specified process ID to exit. + # This hook is optional. + # @parameter pid [Integer] The process ID to wait for. + # @parameter flags [Integer] A bit-mask of flags suitable for `Process::Status.wait`. + # @returns [Process::Status] A process status instance. + def process_wait(pid, flags) + Thread.new do + Process::Status.wait(pid, flags) + end.value + end + + # Wait for the given io readiness to match the specified events within + # the specified timeout. + # @parameter event [Integer] A bit mask of `IO::READABLE`, + # `IO::WRITABLE` and `IO::PRIORITY`. + # @parameter timeout [Numeric] The amount of time to wait for the event in seconds. + # @returns [Integer] The subset of events that are ready. + def io_wait(io, events, timeout) + end + + # Read from the given io into the specified buffer. + # WARNING: Experimental hook! Do not use in production code! + # @parameter io [IO] The io to read from. + # @parameter buffer [IO::Buffer] The buffer to read into. + # @parameter length [Integer] The minimum amount to read. + def io_read(io, buffer, length) + end + + # Write from the given buffer into the specified IO. + # WARNING: Experimental hook! Do not use in production code! + # @parameter io [IO] The io to write to. + # @parameter buffer [IO::Buffer] The buffer to write from. + # @parameter length [Integer] The minimum amount to write. + def io_write(io, buffer, length) + end + + # Sleep the current task for the specified duration, or forever if not + # specified. + # @parameter duration [Numeric] The amount of time to sleep in seconds. + def kernel_sleep(duration = nil) + end + + # Execute the given block. If the block execution exceeds the given timeout, + # the specified exception `klass` will be raised. Typically, only non-blocking + # methods which enter the scheduler will raise such exceptions. + # @parameter duration [Integer] The amount of time to wait, after which an exception will be raised. + # @parameter klass [Class] The exception class to raise. + # @parameter *arguments [Array] The arguments to send to the constructor of the exception. + # @yields {...} The user code to execute. + def timeout_after(duration, klass, *arguments, &block) + end + + # Resolve hostname to an array of IP addresses. + # This hook is optional. + # @parameter hostname [String] Example: "www.ruby-lang.org". + # @returns [Array] An array of IPv4 and/or IPv6 address strings that the hostname resolves to. + def address_resolve(hostname) + end + + # Block the calling fiber. + # @parameter blocker [Object] What we are waiting on, informational only. + # @parameter timeout [Numeric | Nil] The amount of time to wait for in seconds. + # @returns [Boolean] Whether the blocking operation was successful or not. + def block(blocker, timeout = nil) + end + + # Unblock the specified fiber. + # @parameter blocker [Object] What we are waiting on, informational only. + # @parameter fiber [Fiber] The fiber to unblock. + # @reentrant Thread safe. + def unblock(blocker, fiber) + end + + # Intercept the creation of a non-blocking fiber. + # @returns [Fiber] + def fiber(&block) + Fiber.new(blocking: false, &block) + end + + # Invoked when the thread exits. + def close + self.run + end + + def run + # Implement event loop here. + end +end +``` + +Additional hooks may be introduced in the future, we will use feature detection +in order to enable these hooks. + +### Non-blocking Execution + +The scheduler hooks will only be used in special non-blocking execution +contexts. Non-blocking execution contexts introduce non-determinism because the +execution of scheduler hooks may introduce context switching points into your +program. + +#### Fibers + +Fibers can be used to create non-blocking execution contexts. + +``` ruby +Fiber.new do + puts Fiber.current.blocking? # false + + # May invoke `Fiber.scheduler&.io_wait`. + io.read(...) + + # May invoke `Fiber.scheduler&.io_wait`. + io.write(...) + + # Will invoke `Fiber.scheduler&.kernel_sleep`. + sleep(n) +end.resume +``` + +We also introduce a new method which simplifies the creation of these +non-blocking fibers: + +``` ruby +Fiber.schedule do + puts Fiber.current.blocking? # false +end +``` + +The purpose of this method is to allow the scheduler to internally decide the +policy for when to start the fiber, and whether to use symmetric or asymmetric +fibers. + +You can also create blocking execution contexts: + +``` ruby +Fiber.new(blocking: true) do + # Won't use the scheduler: + sleep(n) +end +``` + +However you should generally avoid this unless you are implementing a scheduler. + +#### IO + +By default, I/O is non-blocking. Not all operating systems support non-blocking +I/O. Windows is a notable example where socket I/O can be non-blocking but pipe +I/O is blocking. Provided that there *is* a scheduler and the current thread *is +non-blocking*, the operation will invoke the scheduler. + +#### Mutex + +The `Mutex` class can be used in a non-blocking context and is fiber specific. + +#### ConditionVariable + +The `ConditionVariable` class can be used in a non-blocking context and is +fiber-specific. + +#### Queue / SizedQueue + +The `Queue` and `SizedQueue` classes can be used in a non-blocking context and +are fiber-specific. + +#### Thread + +The `Thread#join` operation can be used in a non-blocking context and is +fiber-specific. diff --git a/ruby/doc/globals.rdoc b/ruby/doc/globals.rdoc index 89b94e9a8..1d7cda69f 100644 --- a/ruby/doc/globals.rdoc +++ b/ruby/doc/globals.rdoc @@ -50,9 +50,6 @@ $-p:: True if option -p is set. Read-only variable. == Pre-defined global constants -TRUE:: The typical true value. Deprecated. -FALSE:: The +false+ itself. Deprecated. -NIL:: The +nil+ itself. Deprecated. STDIN:: The standard input. The default value for $stdin. STDOUT:: The standard output. The default value for $stdout. STDERR:: The standard error output. The default value for $stderr. diff --git a/ruby/doc/hacking.md b/ruby/doc/hacking.md new file mode 100644 index 000000000..5bbb04b17 --- /dev/null +++ b/ruby/doc/hacking.md @@ -0,0 +1,85 @@ +# Ruby Hacking Guide + +This document gives some helpful instructions which should make your experience as a Ruby core developer easier. + +## Setup + +### Make + +It's common to want to compile things as quickly as possible. Ensuring `make` has the right `--jobs` flag will ensure all processors are utilized when building software projects. To do this effectively, you can set `MAKEFLAGS` in your shell configuration/profile: + +``` shell +# On macOS with Fish shell: +export MAKEFLAGS="--jobs "(sysctl -n hw.ncpu) + +# On macOS with Bash/ZSH shell: +export MAKEFLAGS="--jobs $(sysctl -n hw.ncpu)" + +# On Linux with Fish shell: +export MAKEFLAGS="--jobs "(nproc) + +# On Linux with Bash/ZSH shell: +export MAKEFLAGS="--jobs $(nproc)" +``` + +## Configure Ruby + +It's generally advisable to use a build directory. + +``` shell +./autogen.sh +mkdir build +cd build +../configure --prefix $HOME/.rubies/ruby-head +make install +``` + +### Without Documentation + +If you are frequently building Ruby, this will reduce the time it takes to `make install`. + +``` shell +../configure --disable-install-doc +``` + +## Running Ruby + +### Run Local Test Script + +You can create a file in the Ruby source root called `test.rb`. You can build `miniruby` and execute this script: + +``` shell +make run +``` + +If you want more of the standard library, you can use `runruby` instead of `run`. + +### Run Bootstrap Tests + +There are a set of tests in `bootstraptest/` which cover most basic features of the core Ruby language. + +``` shell +make test +``` + +### Run Extensive Tests + +There are extensive tests in `test/` which cover a wide range of features of the Ruby core language. + +``` shell +make test-all +``` + +You can run specific tests by specifying their path: + +``` shell +make test-all TESTS=../test/fiber/test_io.rb +``` + +### Run RubySpec Tests + +RubySpec is a project to write a complete, executable specification for the Ruby programming language. + +``` shell +make test-all test-rubyspec +``` diff --git a/ruby/doc/implicit_conversion.rdoc b/ruby/doc/implicit_conversion.rdoc new file mode 100644 index 000000000..0c2a1d497 --- /dev/null +++ b/ruby/doc/implicit_conversion.rdoc @@ -0,0 +1,198 @@ +== Implicit Conversions + +Some Ruby methods accept one or more objects +that can be either: +* Of a given class, and so accepted as is. +* Implicitly convertible to that class, in which case + the called method converts the object. + +For each of the relevant classes, the conversion is done by calling +a specific conversion method: + +* Array: +to_ary+ +* Hash: +to_hash+ +* Integer: +to_int+ +* String: +to_str+ + +=== Array-Convertible Objects + +An Array-convertible object is an object that: +* Has instance method +to_ary+. +* The method accepts no arguments. +* The method returns an object +obj+ for which obj.kind_of?(Array) returns +true+. + +The examples in this section use method Array#replace, +which accepts an Array-convertible argument. + +This class is Array-convertible: + + class ArrayConvertible + def to_ary + [:foo, 'bar', 2] + end + end + a = [] + a.replace(ArrayConvertible.new) # => [:foo, "bar", 2] + +This class is not Array-convertible (no +to_ary+ method): + + class NotArrayConvertible; end + a = [] + # Raises TypeError (no implicit conversion of NotArrayConvertible into Array) + a.replace(NotArrayConvertible.new) + +This class is not Array-convertible (method +to_ary+ takes arguments): + + class NotArrayConvertible + def to_ary(x) + [:foo, 'bar', 2] + end + end + a = [] + # Raises ArgumentError (wrong number of arguments (given 0, expected 1)) + a.replace(NotArrayConvertible.new) + +This class is not Array-convertible (method +to_ary+ returns non-Array): + + class NotArrayConvertible + def to_ary + :foo + end + end + a = [] + # Raises TypeError (can't convert NotArrayConvertible to Array (NotArrayConvertible#to_ary gives Symbol)) + a.replace(NotArrayConvertible.new) + +=== Hash-Convertible Objects + +A Hash-convertible object is an object that: +* Has instance method +to_hash+. +* The method accepts no arguments. +* The method returns an object +obj+ for which obj.kind_of?(Hash) returns +true+. + +The examples in this section use method Hash#merge, +which accepts a Hash-convertible argument. + +This class is Hash-convertible: + + class HashConvertible + def to_hash + {foo: 0, bar: 1, baz: 2} + end + end + h = {} + h.merge(HashConvertible.new) # => {:foo=>0, :bar=>1, :baz=>2} + +This class is not Hash-convertible (no +to_hash+ method): + + class NotHashConvertible; end + h = {} + # Raises TypeError (no implicit conversion of NotHashConvertible into Hash) + h.merge(NotHashConvertible.new) + +This class is not Hash-convertible (method +to_hash+ takes arguments): + + class NotHashConvertible + def to_hash(x) + {foo: 0, bar: 1, baz: 2} + end + end + h = {} + # Raises ArgumentError (wrong number of arguments (given 0, expected 1)) + h.merge(NotHashConvertible.new) + +This class is not Hash-convertible (method +to_hash+ returns non-Hash): + + class NotHashConvertible + def to_hash + :foo + end + end + h = {} + # Raises TypeError (can't convert NotHashConvertible to Hash (ToHashReturnsNonHash#to_hash gives Symbol)) + h.merge(NotHashConvertible.new) + +=== Integer-Convertible Objects + +An Integer-convertible object is an object that: +* Has instance method +to_int+. +* The method accepts no arguments. +* The method returns an object +obj+ for which obj.kind_of?(Integer) returns +true+. + +The examples in this section use method Array.new, +which accepts an Integer-convertible argument. + +This user-defined class is Integer-convertible: + + class IntegerConvertible + def to_int + 3 + end + end + a = Array.new(IntegerConvertible.new).size + a # => 3 + +This class is not Integer-convertible (method +to_int+ takes arguments): + + class NotIntegerConvertible + def to_int(x) + 3 + end + end + # Raises ArgumentError (wrong number of arguments (given 0, expected 1)) + Array.new(NotIntegerConvertible.new) + +This class is not Integer-convertible (method +to_int+ returns non-Integer): + + class NotIntegerConvertible + def to_int + :foo + end + end + # Raises TypeError (can't convert NotIntegerConvertible to Integer (NotIntegerConvertible#to_int gives Symbol)) + Array.new(NotIntegerConvertible.new) + +=== String-Convertible Objects + +A String-convertible object is an object that: +* Has instance method +to_str+. +* The method accepts no arguments. +* The method returns an object +obj+ for which obj.kind_of?(String) returns +true+. + +The examples in this section use method String::new, +which accepts a String-convertible argument. + +This class is String-convertible: + + class StringConvertible + def to_str + 'foo' + end + end + String.new(StringConvertible.new) # => "foo" + +This class is not String-convertible (no +to_str+ method): + + class NotStringConvertible; end + # Raises TypeError (no implicit conversion of NotStringConvertible into String) + String.new(NotStringConvertible.new) + +This class is not String-convertible (method +to_str+ takes arguments): + + class NotStringConvertible + def to_str(x) + 'foo' + end + end + # Raises ArgumentError (wrong number of arguments (given 0, expected 1)) + String.new(NotStringConvertible.new) + +This class is not String-convertible (method +to_str+ returns non-String): + + class NotStringConvertible + def to_str + :foo + end + end + # Raises TypeError (can't convert NotStringConvertible to String (NotStringConvertible#to_str gives Symbol)) + String.new(NotStringConvertible.new) diff --git a/ruby/doc/irb/irb.rd.ja b/ruby/doc/irb/irb.rd.ja index 81247ce4b..633c08cbd 100644 --- a/ruby/doc/irb/irb.rd.ja +++ b/ruby/doc/irb/irb.rd.ja @@ -51,6 +51,12 @@ irbã®ä½¿ã„æ–¹ã¯, Rubyã•ãˆçŸ¥ã£ã¦ã„ã‚Œã°ã„ãŸã£ã¦ç°¡å˜ã§ã™. 基本 オブジェクトã®ä½œæˆæ–¹æ³•ã‚’ 0 ã‹ã‚‰ 3 ã®ã„ãšã‚Œã‹ã«è¨­å®šã™ã‚‹. --echo 実行çµæžœã‚’表示ã™ã‚‹(デフォルト). --noecho 実行çµæžœã‚’表示ã—ãªã„. + --echo-on-assignment + 代入時ã«å®Ÿè¡Œçµæžœã‚’表示ã™ã‚‹. + --noecho-on-assignment + 代入時ã«å®Ÿè¡Œçµæžœã‚’表示ã—ãªã„. + --truncate-echo-on-assignment + 代入時ã«çœç•¥ã•ã‚ŒãŸå®Ÿè¡Œçµæžœã‚’表示ã™ã‚‹(デフォルト). --inspect çµæžœå‡ºåŠ›ã«inspectを用ã„ã‚‹. --noinspect çµæžœå‡ºåŠ›ã«inspectを用ã„ãªã„. --singleline シングルラインエディタを利用ã™ã‚‹. @@ -59,7 +65,10 @@ irbã®ä½¿ã„æ–¹ã¯, Rubyã•ãˆçŸ¥ã£ã¦ã„ã‚Œã°ã„ãŸã£ã¦ç°¡å˜ã§ã™. 基本 用ã—よã†ã¨ã™ã‚‹. --colorize 色付ã‘を利用ã™ã‚‹. --nocolorize 色付ã‘を利用ã—ãªã„. - --prompt prompt-mode/--prompt-mode prompt-mode + --autocomplete オートコンプリートを利用ã™ã‚‹. + --noautocomplete オートコンプリートを利用ã—ãªã„. + --prompt prompt-mode + --prompt-mode prompt-mode プロンプトモードを切替ãˆã¾ã™. ç¾åœ¨å®šç¾©ã•ã‚Œã¦ã„るプ ロンプトモードã¯, default, simple, xmp, inf-ruby㌠用æ„ã•ã‚Œã¦ã„ã¾ã™. @@ -144,12 +153,12 @@ PROMPT_I, PROMPT_N, PROMPT_S, PROMPT_Cã¯, フォーマットを指定ã—ã¾ã™. 例ãˆã°, デフォルトã®ãƒ—ロンプトモードã¯: - IRB.conf[:PROMPT_MODE][:DEFAULT] = { + IRB.conf[:PROMPT][:DEFAULT] = { :PROMPT_I => "%N(%m):%03n:%i> ", :PROMPT_N => "%N(%m):%03n:%i> ", :PROMPT_S => "%N(%m):%03n:%i%l ", :PROMPT_C => "%N(%m):%03n:%i* ", - :RETURN => "%s\n" + :RETURN => "=> %s\n" } ã¨ãªã£ã¦ã„ã¾ã™. @@ -381,7 +390,7 @@ rubyã§ã¯, 以下ã®ãƒ—ログラムã¯ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™. パイルã—ã¦ãƒ­ãƒ¼ã‚«ãƒ«å¤‰æ•°ã‚’決定ã™ã‚‹ã‹ã‚‰ã§ã™. ãã‚Œã«å¯¾ã—, irbã¯å®Ÿè¡Œå¯èƒ½ã« ãªã‚‹(å¼ãŒé–‰ã˜ã‚‹)ã¨è‡ªå‹•çš„ã«è©•ä¾¡ã—ã¦ã„ã‚‹ã‹ã‚‰ã§ã™. 上記ã®ä¾‹ã§ã¯, - evel "foo = 0" + eval "foo = 0" ã‚’è¡Œãªã£ãŸæ™‚点ã§è©•ä¾¡ã‚’è¡Œãªã„, ãã®æ™‚点ã§å¤‰æ•°ãŒå®šç¾©ã•ã‚Œã‚‹ãŸã‚, 次å¼ã§ 変数fooã¯å®šç¾©ã•ã‚Œã¦ã„ã‚‹ã‹ã‚‰ã§ã™. diff --git a/ruby/doc/keywords.rdoc b/ruby/doc/keywords.rdoc index a74126823..cb1cff33f 100644 --- a/ruby/doc/keywords.rdoc +++ b/ruby/doc/keywords.rdoc @@ -82,6 +82,8 @@ if:: in:: Used to separate the iterable object and iterator variable in a +for+ loop. See {control expressions}[rdoc-ref:syntax/control_expressions.rdoc] + It also serves as a pattern in a +case+ expression. + See {pattern matching}[rdoc-ref:syntax/pattern_matching.rdoc] module:: Creates or opens a module. See {modules and classes diff --git a/ruby/doc/maintainers.rdoc b/ruby/doc/maintainers.rdoc index 98de9f254..b56a3d887 100644 --- a/ruby/doc/maintainers.rdoc +++ b/ruby/doc/maintainers.rdoc @@ -13,7 +13,7 @@ A module maintainer is responsible for a certain part of Ruby. * They have "developer" role on the Redmine to modify issues. * They have authority to decide the feature of their part. But they should always respect discussions on ruby-core/ruby-dev. -A submaintainer of a module is like a maintainer. But The submaintainer does +A submaintainer of a module is like a maintainer. But the submaintainer does not have authority to change/add a feature on his/her part. They need consensus on ruby-core/ruby-dev before changing/adding. Some of submaintainers have commit right, others don't. @@ -30,77 +30,17 @@ Koichi Sasada (ko1) Yukihiro Matsumoto (matz) -=== Documentation - -Zachary Scott (zzak) - == Standard Library Maintainers === Libraries -[lib/English.rb] - _unmaintained_ -[lib/abbrev.rb] - Akinori MUSHA (knu) -[lib/base64.rb] - Yusuke Endoh (mame) -[lib/drb.rb, lib/drb/*] - Masatoshi SEKI (seki) -[lib/debug.rb] - _unmaintained_ -[lib/erb.rb] - Masatoshi SEKI (seki), Takashi Kokubun (k0kubun) -[lib/find.rb] - Kazuki Tsujimoto (ktsj) [lib/mkmf.rb] _unmaintained_ -[lib/monitor.rb] - Shugo Maeda (shugo) -[lib/net/ftp.rb] - Shugo Maeda (shugo) -[lib/net/imap.rb] - Shugo Maeda (shugo) -[lib/net/http.rb, lib/net/https.rb] - NARUSE, Yui (naruse) -[lib/net/protocol.rb] - _unmaintained_ -[lib/open-uri.rb] - Tanaka Akira (akr) -[lib/optparse.rb, lib/optparse/*] - Nobuyuki Nakada (nobu) -[lib/pp.rb] - Tanaka Akira (akr) -[lib/prettyprint.rb] - Tanaka Akira (akr) -[lib/resolv-replace.rb] - Tanaka Akira (akr) -[lib/resolv.rb] - Tanaka Akira (akr) -[lib/rinda/*] - Masatoshi SEKI (seki) [lib/rubygems.rb, lib/rubygems/*] Eric Hodel (drbrain), Hiroshi SHIBATA (hsbt) https://github.com/rubygems/rubygems -[lib/set.rb] - Akinori MUSHA (knu) -[lib/securerandom.rb] - Tanaka Akira (akr) -[lib/shellwords.rb] - Akinori MUSHA (knu) -[lib/tempfile.rb] - _unmaintained_ -[lib/tmpdir.rb] - _unmaintained_ -[lib/time.rb] - Tanaka Akira (akr) -[lib/tsort.rb] - Tanaka Akira (akr) -[lib/un.rb] - WATANABE Hirofumi (eban) [lib/unicode_normalize.rb, lib/unicode_normalize/*] Martin J. Dürst -[lib/weakref.rb] - _unmaintained_ === Extensions @@ -108,56 +48,57 @@ Zachary Scott (zzak) Koichi Sasada (ko1) [ext/coverage] Yusuke Endoh (mame) -[ext/digest, ext/digest/*] - Akinori MUSHA (knu) [ext/fiber] Koichi Sasada (ko1) -[ext/io/nonblock] - Nobuyuki Nakada (nobu) -[ext/io/wait] - Nobuyuki Nakada (nobu) -[ext/nkf] - NARUSE, Yui (naruse) +[ext/monitor] + Koichi Sasada (ko1) [ext/objspace] _unmaintained_ -[ext/pathname] - Tanaka Akira (akr) [ext/pty] _unmaintained_ -[ext/readline] - TAKAO Kouji (kouji) [ext/ripper] _unmaintained_ [ext/socket] * Tanaka Akira (akr) * API change needs matz's approval -[ext/syslog] - Akinori MUSHA (knu) [ext/win32] NAKAMURA Usaku (usa) -[ext/win32ole] - Masaki Suketa (suke) == Default gems Maintainers === Libraries +[lib/abbrev.rb] + Akinori MUSHA (knu) + https://github.com/ruby/abbrev + https://rubygems.org/gems/abbrev +[lib/base64.rb] + Yusuke Endoh (mame) + https://github.com/ruby/base64 + https://rubygems.org/gems/base64 [lib/benchmark.rb] _unmaintained_ - https://github.com/bundler/benchmark + https://github.com/ruby/benchmark https://rubygems.org/gems/benchmark [lib/bundler.rb, lib/bundler/*] Hiroshi SHIBATA (hsbt) - https://github.com/bundler/bundler + https://github.com/rubygems/rubygems https://rubygems.org/gems/bundler [lib/cgi.rb, lib/cgi/*] - Takeyuki Fujioka (xibbar) + _unmaintained_ https://github.com/ruby/cgi https://rubygems.org/gems/cgi [lib/csv.rb] Kenta Murata (mrkn), Kouhei Sutou (kou) https://github.com/ruby/csv https://rubygems.org/gems/csv +[lib/English.rb] + _unmaintained_ + https://github.com/ruby/English + https://rubygems.org/gems/English +[lib/debug.rb] + _unmaintained_ + https://github.com/ruby/debug [lib/delegate.rb] _unmaintained_ https://github.com/ruby/delegate @@ -165,10 +106,27 @@ Zachary Scott (zzak) [lib/did_you_mean.rb] Yuki Nishijima (yuki24) https://github.com/ruby/did_you_mean + https://rubygems.org/gems/did_you_mean +[ext/digest, ext/digest/*] + Akinori MUSHA (knu) + https://github.com/ruby/digest + https://rubygems.org/gems/digest +[lib/drb.rb, lib/drb/*] + Masatoshi SEKI (seki) + https://github.com/ruby/drb + https://rubygems.org/gems/drb +[lib/erb.rb] + Masatoshi SEKI (seki), Takashi Kokubun (k0kubun) + https://github.com/ruby/erb + https://rubygems.org/gems/erb [lib/fileutils.rb] _unmaintained_ https://github.com/ruby/fileutils https://rubygems.org/gems/fileutils +[lib/find.rb] + Kazuki Tsujimoto (ktsj) + https://github.com/ruby/find + https://rubygems.org/gems/find [lib/forwardable.rb] Keiju ISHITSUKA (keiju) https://github.com/ruby/forwardable @@ -182,43 +140,51 @@ Zachary Scott (zzak) https://github.com/ruby/ipaddr https://rubygems.org/gems/ipaddr [lib/irb.rb, lib/irb/*] - Keiju ISHITSUKA (keiju) + aycabta https://github.com/ruby/irb https://rubygems.org/gems/irb +[lib/optparse.rb, lib/optparse/*] + Nobuyuki Nakada (nobu) + https://github.com/ruby/optparse [lib/logger.rb] Naotoshi Seo (sonots) https://github.com/ruby/logger https://rubygems.org/gems/logger -[lib/matrix.rb] - Marc-Andre Lafortune (marcandre) - https://github.com/ruby/matrix - https://rubygems.org/gems/matrix [lib/mutex_m.rb] Keiju ISHITSUKA (keiju) https://github.com/ruby/mutex_m https://rubygems.org/gems/mutex_m -[lib/net/pop.rb] - _unmaintained_ - https://github.com/ruby/net-pop - https://rubygems.org/gems/net-pop -[lib/net/smtp.rb] +[lib/net/http.rb, lib/net/https.rb] + NARUSE, Yui (naruse) + https://github.com/ruby/net-http + https://rubygems.org/gems/net-http +[lib/net/protocol.rb] _unmaintained_ - https://github.com/ruby/net-smtp - https://rubygems.org/gems/net-smtp + https://github.com/ruby/net-protocol + https://rubygems.org/gems/net-protocol [lib/observer.rb] _unmaintained_ https://github.com/ruby/observer + https://rubygems.org/gems/observer [lib/open3.rb] _unmaintained_ https://github.com/ruby/open3 https://rubygems.org/gems/open3 +[lib/open-uri.rb] + Tanaka Akira (akr) + https://github.com/ruby/open-uri [lib/ostruct.rb] - Marc-Andre Lafortune (marcandre) + Marc-André Lafortune (marcandre) https://github.com/ruby/ostruct https://rubygems.org/gems/ostruct -[lib/prime.rb] - Yuki Sonoda (yugui) - https://github.com/ruby/prime +[lib/pp.rb] + Tanaka Akira (akr) + https://github.com/ruby/pp + https://rubygems.org/gems/pp +[lib/prettyprint.rb] + Tanaka Akira (akr) + https://github.com/ruby/prettyprint + https://rubygems.org/gems/prettyprint [lib/pstore.rb] _unmaintained_ https://github.com/ruby/pstore @@ -231,6 +197,14 @@ Zachary Scott (zzak) aycabta https://github.com/ruby/readline https://rubygems.org/gems/readline +[lib/resolv.rb] + Tanaka Akira (akr) + https://github.com/ruby/resolv + https://rubygems.org/gems/resolv +[lib/resolv-replace.rb] + Tanaka Akira (akr) + https://github.com/ruby/resolv-replace + https://rubygems.org/gems/resolv-replace [lib/rdoc.rb, lib/rdoc/*] Eric Hodel (drbrain), Hiroshi SHIBATA (hsbt) https://github.com/ruby/rdoc @@ -239,38 +213,66 @@ Zachary Scott (zzak) aycabta https://github.com/ruby/reline https://rubygems.org/gems/reline -[lib/rexml/*] - Kouhei Sutou (kou) - https://github.com/ruby/rexml - https://rubygems.org/gems/rexml -[lib/rss.rb, lib/rss/*] - Kouhei Sutou (kou) - https://github.com/ruby/rss - https://rubygems.org/gems/rss +[lib/rinda/*] + Masatoshi SEKI (seki) + https://github.com/ruby/rinda + https://rubygems.org/gems/rinda +[lib/securerandom.rb] + Tanaka Akira (akr) + https://github.com/ruby/securerandom + https://rubygems.org/gems/securerandom +[lib/set.rb] + Akinori MUSHA (knu) + https://github.com/ruby/set + https://rubygems.org/gems/set +[lib/shellwords.rb] + Akinori MUSHA (knu) + https://github.com/ruby/shellwords + https://rubygems.org/gems/shellwords [lib/singleton.rb] Yukihiro Matsumoto (matz) https://github.com/ruby/singleton https://rubygems.org/gems/singleton +[lib/tempfile.rb] + _unmaintained_ + https://github.com/ruby/tempfile + https://rubygems.org/gems/tempfile +[lib/time.rb] + Tanaka Akira (akr) + https://github.com/ruby/time + https://rubygems.org/gems/time [lib/timeout.rb] Yukihiro Matsumoto (matz) https://github.com/ruby/timeout + https://rubygems.org/gems/timeout [lib/thwait.rb] Keiju ISHITSUKA (keiju) https://github.com/ruby/thwait https://rubygems.org/gems/thwait -[lib/tracer.rb] - Keiju ISHITSUKA (keiju) - https://github.com/ruby/tracer +[lib/tmpdir.rb] + _unmaintained_ + https://github.com/ruby/tmpdir + https://rubygems.org/gems/tmpdir +[lib/tsort.rb] + Tanaka Akira (akr) + https://github.com/ruby/tsort + https://rubygems.org/gems/tsort +[lib/un.rb] + WATANABE Hirofumi (eban) + https://github.com/ruby/un + https://rubygems.org/gems/un [lib/uri.rb, lib/uri/*] YAMADA, Akira (akira) https://github.com/ruby/uri -[lib/webrick.rb, lib/webrick/*] - Eric Wong (normalperson) - https://bugs.ruby-lang.org/ - https://rubygems.org/gems/webrick + https://rubygems.org/gems/uri [lib/yaml.rb, lib/yaml/*] Aaron Patterson (tenderlove), Hiroshi SHIBATA (hsbt) https://github.com/ruby/yaml + https://rubygems.org/gems/yaml +[lib/weakref.rb] + _unmaintained_ + https://github.com/ruby/weakref + https://rubygems.org/gems/weakref === Extensions @@ -286,10 +288,6 @@ Zachary Scott (zzak) _unmaintained_ https://github.com/ruby/date https://rubygems.org/gems/date -[ext/dbm] - _unmaintained_ - https://github.com/ruby/dbm - https://rubygems.org/gems/dbm [ext/etc] Ruby core team https://github.com/ruby/etc @@ -302,22 +300,34 @@ Zachary Scott (zzak) Aaron Patterson (tenderlove) https://github.com/ruby/fiddle https://rubygems.org/gems/fiddle -[ext/gdbm] - Yukihiro Matsumoto (matz) - https://github.com/ruby/gdbm - https://rubygems.org/gems/gdbm [ext/io/console] Nobuyuki Nakada (nobu) https://github.com/ruby/io-console https://rubygems.org/gems/io-console +[ext/io/nonblock] + Nobuyuki Nakada (nobu) + https://github.com/ruby/io-nonblock + https://rubygems.org/gems/io-nonblock +[ext/io/wait] + Nobuyuki Nakada (nobu) + https://github.com/ruby/io-wait + https://rubygems.org/gems/io-wait [ext/json] NARUSE, Yui (naruse), Hiroshi SHIBATA (hsbt) https://github.com/flori/json https://rubygems.org/gems/json +[ext/nkf] + NARUSE, Yui (naruse) + https://github.com/ruby/nkf + https://rubygems.org/gems/nkf [ext/openssl] Kazuki Yamaguchi (rhe) https://github.com/ruby/openssl https://rubygems.org/gems/openssl +[ext/pathname] + Tanaka Akira (akr) + https://github.com/ruby/pathname + https://rubygems.org/gems/pathname [ext/psych] Aaron Patterson (tenderlove), Hiroshi SHIBATA (hsbt) https://github.com/ruby/psych @@ -326,10 +336,10 @@ Zachary Scott (zzak) Aaron Patterson (tenderlove), Hiroshi SHIBATA (hsbt) https://github.com/ruby/racc https://rubygems.org/gems/racc -[ext/sdbm] - Yukihiro Matsumoto (matz) - https://github.com/ruby/sdbm - https://rubygems.org/gems/sdbm +[ext/readline] + TAKAO Kouji (kouji) + https://github.com/ruby/readline-ext + https://rubygems.org/gems/readline-ext [ext/stringio] Nobuyuki Nakada (nobu) https://github.com/ruby/stringio @@ -338,6 +348,14 @@ Zachary Scott (zzak) Kouhei Sutou (kou) https://github.com/ruby/strscan https://rubygems.org/gems/strscan +[ext/syslog] + Akinori MUSHA (knu) + https://github.com/ruby/syslog + https://rubygems.org/gems/syslog +[ext/win32ole] + Masaki Suketa (suke) + https://github.com/ruby/win32ole + https://rubygems.org/gems/win32ole [ext/zlib] NARUSE, Yui (naruse) https://github.com/ruby/zlib @@ -347,13 +365,50 @@ Zachary Scott (zzak) [minitest] https://github.com/seattlerb/minitest -[net-telnet] - https://github.com/ruby/net-telnet [power_assert] - https://github.com/k-tsj/power_assert + https://github.com/ruby/power_assert [rake] https://github.com/ruby/rake [test-unit] https://github.com/test-unit/test-unit -[xmlrpc] - https://github.com/ruby/xmlrpc +[rexml] + https://github.com/ruby/rexml +[rss] + https://github.com/ruby/rss +[net-ftp] + https://github.com/ruby/net-ftp +[net-imap] + https://github.com/ruby/net-imap +[net-pop] + https://github.com/ruby/net-pop +[net-smtp] + https://github.com/ruby/net-smtp +[matrix] + https://github.com/ruby/matrix +[prime] + https://github.com/ruby/prime +[rbs] + https://github.com/ruby/rbs +[typeprof] + https://github.com/ruby/typeprof + +=== Platform Maintainers + +[mswin64 (Microsoft Windows)] + NAKAMURA Usaku (usa) +[mingw32 (Minimalist GNU for Windows)] + Nobuyoshi Nakada (nobu) +[AIX] + Yutaka Kanemoto (kanemoto) +[FreeBSD] + Akinori MUSHA (knu) +[Solaris] + Naohisa Goto (ngoto) +[RHEL, CentOS] + KOSAKI Motohiro (kosaki) +[macOS] + Kenta Murata (mrkn) +[OpenBSD] + Jeremy Evans (jeremyevans0) +[cygwin, ...] + none. (Maintainer WANTED) diff --git a/ruby/doc/make_cheatsheet.md b/ruby/doc/make_cheatsheet.md new file mode 100644 index 000000000..6b056a4f0 --- /dev/null +++ b/ruby/doc/make_cheatsheet.md @@ -0,0 +1,124 @@ +# How to use "configure" and "make" commands for Ruby + +This is for developers of Ruby. +If you are a user of Ruby, please see README.md. + +## In-place build + +``` +$ ./autogen.sh +$ ./configure --prefix=$PWD/local +$ make +$ make install +$ ./local/bin/ruby -e 'puts "Hello"' +Hello +``` + +## Out-of-place build + +``` +$ ./autogen.sh +$ mkdir ../ruby-build +$ cd ../ruby-build +$ ../ruby-src/configure --prefix=$PWD/local +$ make +$ make install +$ ./local/bin/ruby -e 'puts "Hello"' +Hello +``` + +## How to run the whole test suite + +``` +$ make check +``` + +It runs (about) three test suites: + +* `make test` (a test suite for the interpreter core) +* `make test-all` (for all builtin classes and libraries) +* `make test-spec` (a conformance test suite for Ruby implementations) +* `make test-bundler` (a test suite for the bundler examples) + +## How to run the test suite with log + +``` +$ make test OPTS=-v + +$ make test-all TESTS=-v + +$ make test-spec MSPECOPT=-Vfs +``` + +## How to run a part of the test suite + +### Runs a directory +``` +$ make test-all TESTS=test/rubygems +$ make test-all TESTS=rubygems +``` + +### Runs a file +``` +$ make test-all TESTS=test/ruby/test_foo.rb +$ make test-all TESTS=ruby/foo +``` + +### Runs a test whose name includes test_bar +``` +$ make test-all TESTS="test/ruby/test_foo.rb -n /test_bar/" +``` + +### Runs a file or directory with GNU make +``` +$ make test/ruby/test_foo.rb +$ make test/ruby/test_foo.rb TESTOPTS="-n /test_bar/" +``` + +### Runs a ruby-spec directory +``` +$ make test-spec MSPECOPT=spec/ruby/core/foo +``` + +### Runs a ruby-spec file +``` +$ make test-spec MSPECOPT=spec/ruby/core/foo/bar_spec.rb +``` + +### Runs a ruby-spec file or directory with GNU make +``` +$ make spec/ruby/core/foo/bar_spec.rb +``` + +### Runs a bundler spec file +``` +$ make test-bundler BUNDLER_SPECS=commands/exec_spec.rb:58 +``` + +## How to measure coverage of C and Ruby code + +You need to be able to use gcc (gcov) and lcov visualizer. + +``` +$ ./autogen.sh +$ ./configure --enable-gcov +$ make +$ make update-coverage +$ rm -f test-coverage.dat +$ make test-all COVERAGE=true +$ make lcov +$ open lcov-out/index.html +``` + +If you need only C code coverage, you can remove `COVERAGE=true` from the above process. +You can also use `gcov` command directly to get per-file coverage. + +If you need only Ruby code coverage, you can remove `--enable-gcov`. +Note that `test-coverage.dat` accumulates all runs of `make test-all`. +Make sure that you remove the file if you want to measure one test run. + +You can see the coverage result of CI: https://rubyci.org/coverage + +## How to benchmark + +see https://github.com/ruby/ruby/tree/master/benchmark#make-benchmark diff --git a/ruby/doc/marshal.rdoc b/ruby/doc/marshal.rdoc index a51f1bf87..abf946726 100644 --- a/ruby/doc/marshal.rdoc +++ b/ruby/doc/marshal.rdoc @@ -73,7 +73,7 @@ The first byte has the following special values: a positive little-endian integer. "\xfd":: - The total size of the integer is two bytes. The following three bytes are a + The total size of the integer is four bytes. The following three bytes are a negative little-endian integer. "\x04":: @@ -83,7 +83,7 @@ The first byte has the following special values: of stream objects full precision may be used. "\xfc":: - The total size of the integer is two bytes. The following four bytes are a + The total size of the integer is five bytes. The following four bytes are a negative little-endian integer. For compatibility with 32 bit ruby, only Fixnums greater than -10737341824 should be represented this way. For sizes of stream objects full precision may be used. diff --git a/ruby/doc/memory_view.md b/ruby/doc/memory_view.md new file mode 100644 index 000000000..a24700d0b --- /dev/null +++ b/ruby/doc/memory_view.md @@ -0,0 +1,167 @@ +# MemoryView + +MemoryView provides the features to share multidimensional homogeneous arrays of +fixed-size element on memory among extension libraries. + +## Disclaimer + +* This feature is still experimental. The specification described here can be changed in the future. + +* This document is under construction. Please refer the master branch of ruby for the latest version of this document. + +## Overview + +We sometimes deal with certain kinds of objects that have arrays of the same typed fixed-size elements on a contiguous memory area as its internal representation. +Numo::NArray in numo-narray and Magick::Image in rmagick are typical examples of such objects. +MemoryView plays the role of the hub to share the internal data of such objects without copy among such libraries. + +Copy-less sharing of data is very important in some field such as data analysis, machine learning, and image processing. In these field, people need to handle large amount of on-memory data with several libraries. If we are forced to copy to exchange large data among libraries, a large amount of the data processing time must be occupied by copying data. You can avoid such wasting time by using MemoryView. + +MemoryView has two categories of APIs: + +1. Producer API + + Classes can register own MemoryView entry which allows objects of that classes to expose their MemoryView + +2. Consumer API + + Consumer API allows us to obtain and manage the MemoryView of an object + +## MemoryView structure + +A MemoryView structure, `rb_memory_view_t`, is used for exporting objects' MemoryView. +This structure contains the reference of the object, which is the owner of the MemoryView, the pointer to the head of exported memory, and the metadata that describes the structure of the memory. The metadata can describe multidimensional arrays with strides. + +### The member of MemoryView structure + +The MemoryView structure consists of the following members. + +- `VALUE obj` + + The reference to the original object that has the memory exported via the MemoryView. + + RubyVM manages the reference count of the MemoryView-exported objects to guard them from the garbage collection. The consumers do not have to struggle to guard this object from GC. + +- `void *data` + + The pointer to the head of the exported memory. + +- `ssize_t byte_size` + + The numbero f bytes in the memory pointed by `data`. + +- `bool readonly` + + `true` for readonly memory, `false` for writable memory. + +- `const char *format` + + A string to describeth e format of an element, or NULL for unsigned byte. + +- `ssize_t item_size` + + The number of bytes in each element. + +- `const rb_memory_view_item_component_t *item_desc.components` + + The array of the metadata of the component in an element. + +- `size_t item_desc.length` + + The number of items in `item_desc.components`. + +- `ssize_t ndim` + + The number of dimensions. + +- `const ssize_t *shape` + + A `ndim` size array indicating the number of elements in each dimension. + This can be `NULL` when `ndim` is 1. + +- `const ssize_t *strides` + + A `ndim` size array indicating the number of bytes to skip to go to the next element in each dimension. + This can be `NULL` when `ndim` is 1. + +- `const ssize_t *sub_offsets` + + A `ndim` size array consisting of the offsets in each dimension when the MemoryView exposes a nested array. + This can be `NULL` when the MemoryView exposes a flat array. + +- `void *private_data` + + The private data that MemoryView provider uses internally. + This can be `NULL` when any private data is unnecessary. + +## MemoryView APIs + +### For consumers + +- `bool rb_memory_view_available_p(VALUE obj)` + + Return `true` if `obj` supports to export a MemoryView. Return `false` otherwise. + + If this function returns `true`, it doesn't mean the function `rb_memory_view_get` will succeed. + +- `bool rb_memory_view_get(VALUE obj, rb_memory_view_t *view, int flags)` + + If the given `obj` supports to export a MemoryView that conforms the given `flags`, this function fills `view` by the information of the MemoryView and returns `true`. In this case, the reference count of `obj` is increased. + + If the given combination of `obj` and `flags` cannot export a MemoryView, this function returns `false`. The content of `view` is not touched in this case. + + The exported MemoryView must be released by `rb_memory_view_release` when the MemoryView is no longer needed. + +- `bool rb_memory_view_release(rb_memory_view_t *view)` + + Release the given MemoryView `view` and decrement the reference count of `view->obj`. + + Consumers must call this function when the MemoryView is no longer needed. Missing to call this function leads memory leak. + +- `ssize_t rb_memory_view_item_size_from_format(const char *format, const char **err)` + + Calculate the number of bytes occupied by an element. + + When the calculation fails, the failed location in `format` is stored into `err`, and returns `-1`. + +- `void *rb_memory_view_get_item_pointer(rb_memory_view_t *view, const ssize_t *indices)` + + Calculate the location of the item indicated by the given `indices`. + The length of `indices` must equal to `view->ndim`. + This function initializes `view->item_desc` if needed. + +- `VALUE rb_memory_view_get_item(rb_memory_view_t *view, const ssize_t *indices)` + + Return the Ruby object representation of the item indicated by the given `indices`. + The length of `indices` must equal to `view->ndim`. + This function uses `rb_memory_view_get_item_pointer`. + +- `rb_memory_view_init_as_byte_array(rb_memory_view_t *view, VALUE obj, void *data, const ssize_t len, const bool readonly)` + + Fill the members of `view` as an 1-dimensional byte array. + +- `void rb_memory_view_fill_contiguous_strides(const ssize_t ndim, const ssize_t item_size, const ssize_t *const shape, const bool row_major_p, ssize_t *const strides)` + + Fill the `strides` array with byte-Strides of a contiguous array of the given shape with the given element size. + +- `void rb_memory_view_prepare_item_desc(rb_memory_view_t *view)` + + Fill the `item_desc` member of `view`. + +- `bool rb_memory_view_is_contiguous(const rb_memory_view_t *view)` + + Return `true` if the data in the MemoryView `view` is row-major or column-major contiguous. + + Return `false` otherwise. + +- `bool rb_memory_view_is_row_major_contiguous(const rb_memory_view_t *view)` + + Return `true` if the data in the MemoryView `view` is row-major contiguous. + + Return `false` otherwise. + +- `bool rb_memory_view_is_column_major_contiguous(const rb_memory_view_t *view)` + + Return `true` if the data in the MemoryView `view` is column-major contiguous. + + Return `false` otherwise. diff --git a/ruby/doc/optparse/argument_converters.rdoc b/ruby/doc/optparse/argument_converters.rdoc new file mode 100644 index 000000000..ac659da8c --- /dev/null +++ b/ruby/doc/optparse/argument_converters.rdoc @@ -0,0 +1,380 @@ +== Argument Converters + +An option can specify that its argument is to be converted +from the default \String to an instance of another class. + +=== Contents + +- {Built-In Argument Converters}[#label-Built-In+Argument+Converters] + - {Date}[#label-Date] + - {DateTime}[#label-DateTime] + - {Time}[#label-Time] + - {URI}[#label-URI] + - {Shellwords}[#label-Shellwords] + - {Integer}[#label-Integer] + - {Float}[#label-Float] + - {Numeric}[#label-Numeric] + - {DecimalInteger}[#label-DecimalInteger] + - {OctalInteger}[#label-OctalInteger] + - {DecimalNumeric}[#label-DecimalNumeric] + - {TrueClass}[#label-TrueClass] + - {FalseClass}[#label-FalseClass] + - {Object}[#label-Object] + - {String}[#label-String] + - {Array}[#label-Array] + - {Regexp}[#label-Regexp] +- {Custom Argument Converters}[#label-Custom+Argument+Converters] + +=== Built-In Argument Converters + +\OptionParser has a number of built-in argument converters, +which are demonstrated below. + +==== \Date + +File +date.rb+ +defines an option whose argument is to be converted to a \Date object. +The argument is converted by method Date#parse. + + :include: ruby/date.rb + +Executions: + + $ ruby date.rb --date 2001-02-03 + [#, Date] + $ ruby date.rb --date 20010203 + [#, Date] + $ ruby date.rb --date "3rd Feb 2001" + [#, Date] + +==== \DateTime + +File +datetime.rb+ +defines an option whose argument is to be converted to a \DateTime object. +The argument is converted by method DateTime#parse. + + :include: ruby/datetime.rb + +Executions: + + $ ruby datetime.rb --datetime 2001-02-03T04:05:06+07:00 + [#, DateTime] + $ ruby datetime.rb --datetime 20010203T040506+0700 + [#, DateTime] + $ ruby datetime.rb --datetime "3rd Feb 2001 04:05:06 PM" + [#, DateTime] + +==== \Time + +File +time.rb+ +defines an option whose argument is to be converted to a \Time object. +The argument is converted by method Time#httpdate or Time#parse. + + :include: ruby/time.rb + +Executions: + + $ ruby time.rb --time "Thu, 06 Oct 2011 02:26:12 GMT" + [2011-10-06 02:26:12 UTC, Time] + $ ruby time.rb --time 2010-10-31 + [2010-10-31 00:00:00 -0500, Time] + +==== \URI + +File +uri.rb+ +defines an option whose argument is to be converted to a \URI object. +The argument is converted by method URI#parse. + + :include: ruby/uri.rb + +Executions: + + $ ruby uri.rb --uri https://github.com + [#, URI::HTTPS] + $ ruby uri.rb --uri http://github.com + [#, URI::HTTP] + $ ruby uri.rb --uri file://~/var + [#, URI::File] + +==== \Shellwords + +File +shellwords.rb+ +defines an option whose argument is to be converted to an \Array object by method +Shellwords#shellwords. + + :include: ruby/shellwords.rb + +Executions: + + $ ruby shellwords.rb --shellwords "ruby my_prog.rb | less" + [["ruby", "my_prog.rb", "|", "less"], Array] + $ ruby shellwords.rb --shellwords "here are 'two words'" + [["here", "are", "two words"], Array] + +==== \Integer + +File +integer.rb+ +defines an option whose argument is to be converted to an \Integer object. +The argument is converted by method Kernel#Integer. + + :include: ruby/integer.rb + +Executions: + + $ ruby integer.rb --integer 100 + [100, Integer] + $ ruby integer.rb --integer -100 + [-100, Integer] + $ ruby integer.rb --integer 0100 + [64, Integer] + $ ruby integer.rb --integer 0x100 + [256, Integer] + $ ruby integer.rb --integer 0b100 + [4, Integer] + +==== \Float + +File +float.rb+ +defines an option whose argument is to be converted to a \Float object. +The argument is converted by method Kernel#Float. + + :include: ruby/float.rb + +Executions: + + $ ruby float.rb --float 1 + [1.0, Float] + $ ruby float.rb --float 3.14159 + [3.14159, Float] + $ ruby float.rb --float 1.234E2 + [123.4, Float] + $ ruby float.rb --float 1.234E-2 + [0.01234, Float] + +==== \Numeric + +File +numeric.rb+ +defines an option whose argument is to be converted to an instance +of \Rational, \Float, or \Integer. +The argument is converted by method Kernel#Rational, +Kernel#Float, or Kernel#Integer. + + :include: ruby/numeric.rb + +Executions: + + $ ruby numeric.rb --numeric 1/3 + [(1/3), Rational] + $ ruby numeric.rb --numeric 3.333E-1 + [0.3333, Float] + $ ruby numeric.rb --numeric 3 + [3, Integer] + +==== \DecimalInteger + +File +decimal_integer.rb+ +defines an option whose argument is to be converted to an \Integer object. +The argument is converted by method Kernel#Integer. + + :include: ruby/decimal_integer.rb + +The argument may not be in a binary or hexadecimal format; +a leading zero is ignored (not parsed as octal). + +Executions: + + $ ruby decimal_integer.rb --decimal_integer 100 + [100, Integer] + $ ruby decimal_integer.rb --decimal_integer -100 + [-100, Integer] + $ ruby decimal_integer.rb --decimal_integer 0100 + [100, Integer] + $ ruby decimal_integer.rb --decimal_integer -0100 + [-100, Integer] + +==== \OctalInteger + +File +octal_integer.rb+ +defines an option whose argument is to be converted to an \Integer object. +The argument is converted by method Kernel#Integer. + + :include: ruby/octal_integer.rb + +The argument may not be in a binary or hexadecimal format; +it is parsed as octal, regardless of whether it has a leading zero. + +Executions: + + $ ruby octal_integer.rb --octal_integer 100 + [64, Integer] + $ ruby octal_integer.rb --octal_integer -100 + [-64, Integer] + $ ruby octal_integer.rb --octal_integer 0100 + [64, Integer] + +==== \DecimalNumeric + +File +decimal_numeric.rb+ +defines an option whose argument is to be converted to an \Integer object. +The argument is converted by method Kernel#Integer + + :include: ruby/decimal_numeric.rb + +The argument may not be in a binary or hexadecimal format; +a leading zero causes the argument to be parsed as octal. + +Executions: + + $ ruby decimal_numeric.rb --decimal_numeric 100 + [100, Integer] + $ ruby decimal_numeric.rb --decimal_numeric -100 + [-100, Integer] + $ ruby decimal_numeric.rb --decimal_numeric 0100 + [64, Integer] + +==== \TrueClass + +File +true_class.rb+ +defines an option whose argument is to be converted to +true+ or +false+. +The argument is evaluated by method Object#nil?. + + :include: ruby/true_class.rb + +The argument may be any of those shown in the examples below. + +Executions: + + $ ruby true_class.rb --true_class true + [true, TrueClass] + $ ruby true_class.rb --true_class yes + [true, TrueClass] + $ ruby true_class.rb --true_class + + [true, TrueClass] + $ ruby true_class.rb --true_class false + [false, FalseClass] + $ ruby true_class.rb --true_class no + [false, FalseClass] + $ ruby true_class.rb --true_class - + [false, FalseClass] + $ ruby true_class.rb --true_class nil + [false, FalseClass] + +==== \FalseClass + +File +false_class.rb+ +defines an option whose argument is to be converted to +true+ or +false+. +The argument is evaluated by method Object#nil?. + + :include: ruby/false_class.rb + +The argument may be any of those shown in the examples below. + +Executions: + + $ ruby false_class.rb --false_class false + [false, FalseClass] + $ ruby false_class.rb --false_class no + [false, FalseClass] + $ ruby false_class.rb --false_class - + [false, FalseClass] + $ ruby false_class.rb --false_class nil + [false, FalseClass] + $ ruby false_class.rb --false_class true + [true, TrueClass] + $ ruby false_class.rb --false_class yes + [true, TrueClass] + $ ruby false_class.rb --false_class + + [true, TrueClass] + +==== \Object + +File +object.rb+ +defines an option whose argument is not to be converted from \String. + + :include: ruby/object.rb + +Executions: + + $ ruby object.rb --object foo + ["foo", String] + $ ruby object.rb --object nil + ["nil", String] + +==== \String + +File +string.rb+ +defines an option whose argument is not to be converted from \String. + + :include: ruby/string.rb + +Executions: + + $ ruby string.rb --string foo + ["foo", String] + $ ruby string.rb --string nil + ["nil", String] + +==== \Array + +File +array.rb+ +defines an option whose argument is to be converted from \String +to an array of strings, based on comma-separated substrings. + + :include: ruby/array.rb + +Executions: + + $ ruby array.rb --array "" + [[], Array] + $ ruby array.rb --array foo,bar,baz + [["foo", "bar", "baz"], Array] + $ ruby array.rb --array "foo, bar, baz" + [["foo", " bar", " baz"], Array] + +==== \Regexp + +File +regexp.rb+ +defines an option whose argument is to be converted to a \Regexp object. + + :include: ruby/regexp.rb + +Executions: + + $ ruby regexp.rb --regexp foo + +=== Custom Argument Converters + +You can create custom argument converters. +To create a custom converter, call OptionParser#accept with: + +- An identifier, which may be any object. +- An optional match pattern, which defaults to /.*/m. +- A block that accepts the argument and returns the converted value. + +This custom converter accepts any argument and converts it, +if possible, to a \Complex object. + + :include: ruby/custom_converter.rb + +Executions: + + $ ruby custom_converter.rb --complex 0 + [(0+0i), Complex] + $ ruby custom_converter.rb --complex 1 + [(1+0i), Complex] + $ ruby custom_converter.rb --complex 1+2i + [(1+2i), Complex] + $ ruby custom_converter.rb --complex 0.3-0.5i + [(0.3-0.5i), Complex] + +This custom converter accepts any 1-word argument +and capitalizes it, if possible. + + :include: ruby/match_converter.rb + +Executions: + + $ ruby match_converter.rb --capitalize foo + ["Foo", String] + $ ruby match_converter.rb --capitalize "foo bar" + match_converter.rb:9:in `
': invalid argument: --capitalize foo bar (OptionParser::InvalidArgument) diff --git a/ruby/doc/optparse/creates_option.rdoc b/ruby/doc/optparse/creates_option.rdoc new file mode 100644 index 000000000..ad52c6671 --- /dev/null +++ b/ruby/doc/optparse/creates_option.rdoc @@ -0,0 +1,7 @@ +Creates an option from the given parameters +params+. +See {Parameters for New Options}[./option_params.rdoc]. + +The block, if given, is the handler for the created option. +When the option is encountered during command-line parsing, +the block is called with the argument given for the option, if any. +See {Option Handlers}[./option_params.rdoc#label-Option+Handlers]. diff --git a/ruby/doc/optparse/option_params.rdoc b/ruby/doc/optparse/option_params.rdoc new file mode 100644 index 000000000..b2e4e1a33 --- /dev/null +++ b/ruby/doc/optparse/option_params.rdoc @@ -0,0 +1,509 @@ +== Parameters for New Options + +Option-creating methods in \OptionParser +accept arguments that determine the behavior of a new option: + +- OptionParser#on +- OptionParser#on_head +- OptionParser#on_tail +- OptionParser#define +- OptionParser#define_head +- OptionParser#define_tail +- OptionParser#make_switch + +The code examples on this page use: + +- OptionParser#on, to define options. +- OptionParser#parse!, to parse the command line. +- Built-in option --help, to display defined options. + +Contents: + +- {Option Names}[#label-Option+Names] + - {Short Names}[#label-Short+Names] + - {Simple Short Names}[#label-Simple+Short+Names] + - {Short Names with Required Arguments}[#label-Short+Names+with+Required+Arguments] + - {Short Names with Optional Arguments}[#label-Short+Names+with+Optional+Arguments] + - {Short Names from Range}[#label-Short+Names+from+Range] + - {Long Names}[#label-Long+Names] + - {Simple Long Names}[#label-Simple+Long+Names] + - {Long Names with Required Arguments}[#label-Long+Names+with+Required+Arguments] + - {Long Names with Optional Arguments}[#label-Long+Names+with+Optional+Arguments] + - {Long Names with Negation}[#label-Long+Names+with+Negation] + - {Mixed Names}[#label-Mixed+Names] +- {Argument Styles}[#label-Argument+Styles] +- {Argument Values}[#label-Argument+Values] + - {Explicit Argument Values}[#label-Explicit+Argument+Values] + - {Explicit Values in Array}[#label-Explicit+Values+in+Array] + - {Explicit Values in Hash}[#label-Explicit+Values+in+Hash] + - {Argument Value Patterns}[#label-Argument+Value+Patterns] +- {Argument Converters}[#label-Argument+Converters] +- {Descriptions}[#label-Descriptions] +- {Option Handlers}[#label-Option+Handlers] + - {Handler Blocks}[#label-Handler+Blocks] + - {Handler Procs}[#label-Handler+Procs] + - {Handler Methods}[#label-Handler+Methods] + +=== Option Names + +There are two kinds of option names: + +- Short option name, consisting of a single hyphen and a single character. +- Long option name, consisting of two hyphens and one or more characters. + +==== Short Names + +===== Simple Short Names + +File +short_simple.rb+ defines two options: + +- One with short name -x. +- The other with two short names, in effect, aliases, -1 and -%. + + :include: ruby/short_simple.rb + +Executions: + + $ ruby short_simple.rb --help + Usage: short_simple [options] + -x One short name + -1, -% Two short names (aliases) + $ ruby short_simple.rb -x + ["-x", true] + $ ruby short_simple.rb -1 -x -% + ["-1 or -%", true] + ["-x", true] + ["-1 or -%", true] + +===== Short Names with Required Arguments + +A short name followed (no whitespace) by a dummy word +defines an option that requires an argument. + +File +short_required.rb+ defines an option -x +that requires an argument. + + :include: ruby/short_required.rb + +Executions: + + $ ruby short_required.rb --help + Usage: short_required [options] + -xXXX Short name with required argument + $ ruby short_required.rb -x + short_required.rb:6:in `
': missing argument: -x (OptionParser::MissingArgument) + $ ruby short_required.rb -x FOO + ["-x", "FOO"] + +===== Short Names with Optional Arguments + +A short name followed (with whitespace) by a dummy word in square brackets +defines an option that allows an optional argument. + +File +short_optional.rb+ defines an option -x +that allows an optional argument. + + :include: ruby/short_optional.rb + +Executions: + + $ ruby short_optional.rb --help + Usage: short_optional [options] + -x [XXX] Short name with optional argument + $ ruby short_optional.rb -x + ["-x", nil] + $ ruby short_optional.rb -x FOO + ["-x", "FOO"] + +===== Short Names from Range + +You can define an option with multiple short names +taken from a range of characters. +The parser yields both the actual character cited and the value. + +File +short_range.rb+ defines an option with short names +for all printable characters from ! to ~: + + :include: ruby/short_range.rb + +Executions: + + $ ruby short_range.rb --help + Usage: short_range [options] + -[!-~] Short names in (very large) range + $ ruby short_range.rb -! + ["!-~", "!", nil] + $ ruby short_range.rb -! + ["!-~", "!", nil] + $ ruby short_range.rb -A + ["!-~", "A", nil] + $ ruby short_range.rb -z + ["!-~", "z", nil] + +==== Long Names + +===== Simple Long Names + +File +long_simple.rb+ defines two options: + +- One with long name -xxx. +- The other with two long names, in effect, aliases, + --y1% and --z2#. + + :include: ruby/long_simple.rb + +Executions: + + $ ruby long_simple.rb --help + Usage: long_simple [options] + --xxx One long name + --y1%, --z2# Two long names (aliases) + $ ruby long_simple.rb --xxx + ["--xxx", true] + $ ruby long_simple.rb --y1% --xxx --z2# + ["--y1% or --z2#", true] + ["--xxx", true] + ["--y1% or --z2#", true] + +===== Long Names with Required Arguments + +A long name followed (with whitespace) by a dummy word +defines an option that requires an argument. + +File +long_required.rb+ defines an option --xxx +that requires an argument. + + :include: ruby/long_required.rb + +Executions: + + $ ruby long_required.rb --help + Usage: long_required [options] + --xxx XXX Long name with required argument + $ ruby long_required.rb --xxx + long_required.rb:6:in `
': missing argument: --xxx (OptionParser::MissingArgument) + $ ruby long_required.rb --xxx FOO + ["--xxx", "FOO"] + +===== Long Names with Optional Arguments + +A long name followed (with whitespace) by a dummy word in square brackets +defines an option that allows an optional argument. + +File +long_optional.rb+ defines an option --xxx +that allows an optional argument. + + :include: ruby/long_optional.rb + +Executions: + + $ ruby long_optional.rb --help + Usage: long_optional [options] + --xxx [XXX] Long name with optional argument + $ ruby long_optional.rb --xxx + ["--xxx", nil] + $ ruby long_optional.rb --xxx FOO + ["--xxx", "FOO"] + +===== Long Names with Negation + +A long name may be defined with both positive and negative senses. + +File +long_with_negation.rb+ defines an option that has both senses. + + :include: ruby/long_with_negation.rb + +Executions: + + $ ruby long_with_negation.rb --help + Usage: long_with_negation [options] + --[no-]binary Long name with negation + $ ruby long_with_negation.rb --binary + [true, TrueClass] + $ ruby long_with_negation.rb --no-binary + [false, FalseClass] + +==== Mixed Names + +An option may have both short and long names. + +File +mixed_names.rb+ defines a mixture of short and long names. + + :include: ruby/mixed_names.rb + +Executions: + + $ ruby mixed_names.rb --help +Usage: mixed_names [options] + -x, --xxx Short and long, no argument + -y, --yyyYYY Short and long, required argument + -z, --zzz [ZZZ] Short and long, optional argument + $ ruby mixed_names.rb -x + ["--xxx", true] + $ ruby mixed_names.rb --xxx + ["--xxx", true] + $ ruby mixed_names.rb -y + mixed_names.rb:12:in `
': missing argument: -y (OptionParser::MissingArgument) + $ ruby mixed_names.rb -y FOO + ["--yyy", "FOO"] + $ ruby mixed_names.rb --yyy + mixed_names.rb:12:in `
': missing argument: --yyy (OptionParser::MissingArgument) + $ ruby mixed_names.rb --yyy BAR + ["--yyy", "BAR"] + $ ruby mixed_names.rb -z + ["--zzz", nil] + $ ruby mixed_names.rb -z BAZ + ["--zzz", "BAZ"] + $ ruby mixed_names.rb --zzz + ["--zzz", nil] + $ ruby mixed_names.rb --zzz BAT + ["--zzz", "BAT"] + +=== Argument Keywords + +As seen above, a given option name string may itself +indicate whether the option has no argument, a required argument, +or an optional argument. + +An alternative is to use a separate symbol keyword, +which is one of :NONE (the default), +:REQUIRED, :OPTIONAL. + +File +argument_keywords.rb+ defines an option with a required argument. + + :include: ruby/argument_keywords.rb + +Executions: + + $ ruby argument_keywords.rb --help + Usage: argument_keywords [options] + -x, --xxx Required argument + $ ruby argument_styles.rb --xxx + argument_styles.rb:6:in `
': missing argument: --xxx (OptionParser::MissingArgument) + $ ruby argument_styles.rb --xxx FOO + ["--xxx", "FOO"] + +=== Argument Strings + +Still another way to specify a required argument +is to define it in a string separate from the name string. + +File +argument_strings.rb+ defines an option with a required argument. + + :include: ruby/argument_strings.rb + +Executions: + + $ ruby argument_strings.rb --help + Usage: argument_strings [options] + -x, --xxx=XXX Required argument + $ ruby argument_strings.rb --xxx + argument_strings.rb:9:in `
': missing argument: --xxx (OptionParser::MissingArgument) + $ ruby argument_strings.rb --xxx FOO + ["--xxx", "FOO"] + +=== Argument Values + +Permissible argument values may be restricted +either by specifying explicit values +or by providing a pattern that the given value must match. + +==== Explicit Argument Values + +You can specify argument values in either of two ways: + +- Specify values an array of strings. +- Specify values a hash. + +===== Explicit Values in Array + +You can specify explicit argument values in an array of strings. +The argument value must be one of those strings, or an unambiguous abbreviation. + +File +explicit_array_values.rb+ defines options with explicit argument values. + + :include: ruby/explicit_array_values.rb + +Executions: + + $ ruby explicit_array_values.rb --help + Usage: explicit_array_values [options] + -xXXX Values for required argument + -y [YYY] Values for optional argument + $ ruby explicit_array_values.rb -x + explicit_array_values.rb:9:in `
': missing argument: -x (OptionParser::MissingArgument) + $ ruby explicit_array_values.rb -x foo + ["-x", "foo"] + $ ruby explicit_array_values.rb -x f + ["-x", "foo"] + $ ruby explicit_array_values.rb -x bar + ["-x", "bar"] + $ ruby explicit_array_values.rb -y ba + explicit_array_values.rb:9:in `
': ambiguous argument: -y ba (OptionParser::AmbiguousArgument) + $ ruby explicit_array_values.rb -x baz + explicit_array_values.rb:9:in `
': invalid argument: -x baz (OptionParser::InvalidArgument) + + +===== Explicit Values in Hash + +You can specify explicit argument values in a hash with string keys. +The value passed must be one of those keys, or an unambiguous abbreviation; +the value yielded will be the value for that key. + +File +explicit_hash_values.rb+ defines options with explicit argument values. + + :include: ruby/explicit_hash_values.rb + +Executions: + + $ ruby explicit_hash_values.rb --help + Usage: explicit_hash_values [options] + -xXXX Values for required argument + -y [YYY] Values for optional argument + $ ruby explicit_hash_values.rb -x + explicit_hash_values.rb:9:in `
': missing argument: -x (OptionParser::MissingArgument) + $ ruby explicit_hash_values.rb -x foo + ["-x", 0] + $ ruby explicit_hash_values.rb -x f + ["-x", 0] + $ ruby explicit_hash_values.rb -x bar + ["-x", 1] + $ ruby explicit_hash_values.rb -x baz + explicit_hash_values.rb:9:in `
': invalid argument: -x baz (OptionParser::InvalidArgument) + $ ruby explicit_hash_values.rb -y + ["-y", nil] + $ ruby explicit_hash_values.rb -y baz + ["-y", 2] + $ ruby explicit_hash_values.rb -y bat + ["-y", 3] + $ ruby explicit_hash_values.rb -y ba + explicit_hash_values.rb:9:in `
': ambiguous argument: -y ba (OptionParser::AmbiguousArgument) + $ ruby explicit_hash_values.rb -y bam + ["-y", nil] + +==== Argument Value Patterns + +You can restrict permissible argument values +by specifying a Regexp that the given argument must match. + +File +matched_values.rb+ defines options with matched argument values. + + :include: ruby/matched_values.rb + +Executions: + + $ ruby matched_values.rb --help + Usage: matched_values [options] + --xxx XXX Matched values + $ ruby matched_values.rb --xxx foo + ["--xxx", "foo"] + $ ruby matched_values.rb --xxx FOO + ["--xxx", "FOO"] + $ ruby matched_values.rb --xxx bar + matched_values.rb:6:in `
': invalid argument: --xxx bar (OptionParser::InvalidArgument) + +=== Argument Converters + +An option can specify that its argument is to be converted +from the default \String to an instance of another class. + +There are a number of built-in converters. +You can also define custom converters. + +See {Argument Converters}[./argument_converters.rdoc]. + +=== Descriptions + +A description parameter is any string parameter +that is not recognized as an +{option name}[#label-Option+Names] or a +{terminator}[#label-Terminators]; +in other words, it does not begin with a hypnen. + +You may give any number of description parameters; +each becomes a line in the text generated by option --help. + +File +descriptions.rb+ has six strings in its array +descriptions+. +These are all passed as parameters to OptionParser#on, so that they +all, line for line, become the option's description. + + :include: ruby/descriptions.rb + +Executions: + + $ ruby descriptions.rb --help + Usage: descriptions [options] + --xxx Lorem ipsum dolor sit amet, consectetuer + adipiscing elit. Aenean commodo ligula eget. + Aenean massa. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur + ridiculus mus. Donec quam felis, ultricies + nec, pellentesque eu, pretium quis, sem. + $ ruby descriptions.rb --xxx + ["--xxx", true] + +=== Option Handlers + +The handler for an option is an executable that will be called +when the option is encountered. The handler may be: + +- A block (this is most often seen). +- A proc. +- A method. + +==== Handler Blocks + +An option hadler may be a block. + +File +block.rb+ defines an option that has a handler block. + + :include: ruby/block.rb + +Executions: + + $ ruby block.rb --help + Usage: block [options] + --xxx Option with no argument + --yyy YYY Option with required argument + $ ruby block.rb --xxx + ["Handler block for -xxx called with value:", true] + $ ruby block.rb --yyy FOO + ["Handler block for -yyy called with value:", "FOO"] + +==== Handler Procs + +An option handler may be a Proc. + +File +proc.rb+ defines an option that has a handler proc. + + :include: ruby/proc.rb + +Executions: + + $ ruby proc.rb --help + Usage: proc [options] + --xxx Option with no argument + --yyy YYY Option with required argument + $ ruby proc.rb --xxx + ["Handler proc for -xxx called with value:", true] + $ ruby proc.rb --yyy FOO + ["Handler proc for -yyy called with value:", "FOO"] + +==== Handler Methods + +An option handler may be a Method. + +File +proc.rb+ defines an option that has a handler method. + + :include: ruby/method.rb + +Executions: + + $ ruby method.rb --help + Usage: method [options] + --xxx Option with no argument + --yyy YYY Option with required argument + $ ruby method.rb --xxx + ["Handler method for -xxx called with value:", true] + $ ruby method.rb --yyy FOO + ["Handler method for -yyy called with value:", "FOO"] diff --git a/ruby/doc/optparse/ruby/argument_keywords.rb b/ruby/doc/optparse/ruby/argument_keywords.rb new file mode 100644 index 000000000..8533257c6 --- /dev/null +++ b/ruby/doc/optparse/ruby/argument_keywords.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x', '--xxx', :REQUIRED, 'Required argument') do |value| + p ['--xxx', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/argument_strings.rb b/ruby/doc/optparse/ruby/argument_strings.rb new file mode 100644 index 000000000..77861dda3 --- /dev/null +++ b/ruby/doc/optparse/ruby/argument_strings.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x', '--xxx', '=XXX', 'Required argument') do |value| + p ['--xxx', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/argv.rb b/ruby/doc/optparse/ruby/argv.rb new file mode 100644 index 000000000..12495cfa1 --- /dev/null +++ b/ruby/doc/optparse/ruby/argv.rb @@ -0,0 +1,2 @@ +p ARGV + diff --git a/ruby/doc/optparse/ruby/array.rb b/ruby/doc/optparse/ruby/array.rb new file mode 100644 index 000000000..7c6c14fad --- /dev/null +++ b/ruby/doc/optparse/ruby/array.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--array=ARRAY', Array) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/basic.rb b/ruby/doc/optparse/ruby/basic.rb new file mode 100644 index 000000000..91d37627c --- /dev/null +++ b/ruby/doc/optparse/ruby/basic.rb @@ -0,0 +1,17 @@ +# Require the OptionParser code. +require 'optparse' +# Create an OptionParser object. +parser = OptionParser.new +# Define one or more options. +parser.on('-x', 'Whether to X') do |value| + p ['x', value] +end +parser.on('-y', 'Whether to Y') do |value| + p ['y', value] +end +parser.on('-z', 'Whether to Z') do |value| + p ['z', value] +end +# Parse the command line and return pared-down ARGV. +p parser.parse! + diff --git a/ruby/doc/optparse/ruby/block.rb b/ruby/doc/optparse/ruby/block.rb new file mode 100644 index 000000000..c4dfdeb31 --- /dev/null +++ b/ruby/doc/optparse/ruby/block.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--xxx', 'Option with no argument') do |value| + p ['Handler block for -xxx called with value:', value] +end +parser.on('--yyy YYY', 'Option with required argument') do |value| + p ['Handler block for -yyy called with value:', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/collected_options.rb b/ruby/doc/optparse/ruby/collected_options.rb new file mode 100644 index 000000000..2115e03a9 --- /dev/null +++ b/ruby/doc/optparse/ruby/collected_options.rb @@ -0,0 +1,8 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x', '--xxx', 'Short and long, no argument') +parser.on('-yYYY', '--yyy', 'Short and long, required argument') +parser.on('-z [ZZZ]', '--zzz', 'Short and long, optional argument') +options = {} +parser.parse!(into: options) +p options diff --git a/ruby/doc/optparse/ruby/custom_converter.rb b/ruby/doc/optparse/ruby/custom_converter.rb new file mode 100644 index 000000000..029da08c4 --- /dev/null +++ b/ruby/doc/optparse/ruby/custom_converter.rb @@ -0,0 +1,9 @@ +require 'optparse/date' +parser = OptionParser.new +parser.accept(Complex) do |value| + value.to_c +end +parser.on('--complex COMPLEX', Complex) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/date.rb b/ruby/doc/optparse/ruby/date.rb new file mode 100644 index 000000000..5994ad6a8 --- /dev/null +++ b/ruby/doc/optparse/ruby/date.rb @@ -0,0 +1,6 @@ +require 'optparse/date' +parser = OptionParser.new +parser.on('--date=DATE', Date) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/datetime.rb b/ruby/doc/optparse/ruby/datetime.rb new file mode 100644 index 000000000..b9b591d5f --- /dev/null +++ b/ruby/doc/optparse/ruby/datetime.rb @@ -0,0 +1,6 @@ +require 'optparse/date' +parser = OptionParser.new +parser.on('--datetime=DATETIME', DateTime) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/decimal_integer.rb b/ruby/doc/optparse/ruby/decimal_integer.rb new file mode 100644 index 000000000..360bd284f --- /dev/null +++ b/ruby/doc/optparse/ruby/decimal_integer.rb @@ -0,0 +1,7 @@ +require 'optparse' +include OptionParser::Acceptables +parser = OptionParser.new +parser.on('--decimal_integer=DECIMAL_INTEGER', DecimalInteger) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/decimal_numeric.rb b/ruby/doc/optparse/ruby/decimal_numeric.rb new file mode 100644 index 000000000..954da1356 --- /dev/null +++ b/ruby/doc/optparse/ruby/decimal_numeric.rb @@ -0,0 +1,7 @@ +require 'optparse' +include OptionParser::Acceptables +parser = OptionParser.new +parser.on('--decimal_numeric=DECIMAL_NUMERIC', DecimalNumeric) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/default_values.rb b/ruby/doc/optparse/ruby/default_values.rb new file mode 100644 index 000000000..24c26faea --- /dev/null +++ b/ruby/doc/optparse/ruby/default_values.rb @@ -0,0 +1,8 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x', '--xxx', 'Short and long, no argument') +parser.on('-yYYY', '--yyy', 'Short and long, required argument') +parser.on('-z [ZZZ]', '--zzz', 'Short and long, optional argument') +options = {yyy: 'AAA', zzz: 'BBB'} +parser.parse!(into: options) +p options diff --git a/ruby/doc/optparse/ruby/descriptions.rb b/ruby/doc/optparse/ruby/descriptions.rb new file mode 100644 index 000000000..9aec80aae --- /dev/null +++ b/ruby/doc/optparse/ruby/descriptions.rb @@ -0,0 +1,15 @@ +require 'optparse' +parser = OptionParser.new +description = <<-EOT +Lorem ipsum dolor sit amet, consectetuer +adipiscing elit. Aenean commodo ligula eget. +Aenean massa. Cum sociis natoque penatibus +et magnis dis parturient montes, nascetur +ridiculus mus. Donec quam felis, ultricies +nec, pellentesque eu, pretium quis, sem. +EOT +descriptions = description.split($/) +parser.on('--xxx', *descriptions) do |value| + p ['--xxx', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/explicit_array_values.rb b/ruby/doc/optparse/ruby/explicit_array_values.rb new file mode 100644 index 000000000..64f930a4b --- /dev/null +++ b/ruby/doc/optparse/ruby/explicit_array_values.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-xXXX', ['foo', 'bar'], 'Values for required argument' ) do |value| + p ['-x', value] +end +parser.on('-y [YYY]', ['baz', 'bat'], 'Values for optional argument') do |value| + p ['-y', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/explicit_hash_values.rb b/ruby/doc/optparse/ruby/explicit_hash_values.rb new file mode 100644 index 000000000..9c9e6a48e --- /dev/null +++ b/ruby/doc/optparse/ruby/explicit_hash_values.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-xXXX', {foo: 0, bar: 1}, 'Values for required argument' ) do |value| + p ['-x', value] +end +parser.on('-y [YYY]', {baz: 2, bat: 3}, 'Values for optional argument') do |value| + p ['-y', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/false_class.rb b/ruby/doc/optparse/ruby/false_class.rb new file mode 100644 index 000000000..04fe335ed --- /dev/null +++ b/ruby/doc/optparse/ruby/false_class.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--false_class=FALSE_CLASS', FalseClass) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/float.rb b/ruby/doc/optparse/ruby/float.rb new file mode 100644 index 000000000..390df7f7b --- /dev/null +++ b/ruby/doc/optparse/ruby/float.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--float=FLOAT', Float) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/help.rb b/ruby/doc/optparse/ruby/help.rb new file mode 100644 index 000000000..95bcde1d7 --- /dev/null +++ b/ruby/doc/optparse/ruby/help.rb @@ -0,0 +1,18 @@ +require 'optparse' +parser = OptionParser.new +parser.on( + '-x', '--xxx', + 'Adipiscing elit. Aenean commodo ligula eget.', + 'Aenean massa. Cum sociis natoque penatibus', + ) +parser.on( + '-y', '--yyy YYY', + 'Lorem ipsum dolor sit amet, consectetuer.' +) +parser.on( + '-z', '--zzz [ZZZ]', + 'Et magnis dis parturient montes, nascetur', + 'ridiculus mus. Donec quam felis, ultricies', + 'nec, pellentesque eu, pretium quis, sem.', + ) +parser.parse! diff --git a/ruby/doc/optparse/ruby/help_banner.rb b/ruby/doc/optparse/ruby/help_banner.rb new file mode 100644 index 000000000..0943a3e02 --- /dev/null +++ b/ruby/doc/optparse/ruby/help_banner.rb @@ -0,0 +1,7 @@ +require 'optparse' +parser = OptionParser.new +parser.banner = "Usage: ruby help_banner.rb" +parser.parse! + + + diff --git a/ruby/doc/optparse/ruby/help_format.rb b/ruby/doc/optparse/ruby/help_format.rb new file mode 100644 index 000000000..a2f1e85b0 --- /dev/null +++ b/ruby/doc/optparse/ruby/help_format.rb @@ -0,0 +1,25 @@ +require 'optparse' +parser = OptionParser.new( + 'ruby help_format.rb [options]', # Banner + 20, # Width of options field + ' ' * 2 # Indentation +) +parser.on( + '-x', '--xxx', + 'Adipiscing elit. Aenean commodo ligula eget.', + 'Aenean massa. Cum sociis natoque penatibus', + ) +parser.on( + '-y', '--yyy YYY', + 'Lorem ipsum dolor sit amet, consectetuer.' +) +parser.on( + '-z', '--zzz [ZZZ]', + 'Et magnis dis parturient montes, nascetur', + 'ridiculus mus. Donec quam felis, ultricies', + 'nec, pellentesque eu, pretium quis, sem.', + ) +parser.parse! + + + diff --git a/ruby/doc/optparse/ruby/help_program_name.rb b/ruby/doc/optparse/ruby/help_program_name.rb new file mode 100644 index 000000000..7b3fbff06 --- /dev/null +++ b/ruby/doc/optparse/ruby/help_program_name.rb @@ -0,0 +1,7 @@ +require 'optparse' +parser = OptionParser.new +parser.program_name = 'help_program_name.rb' +parser.parse! + + + diff --git a/ruby/doc/optparse/ruby/integer.rb b/ruby/doc/optparse/ruby/integer.rb new file mode 100644 index 000000000..f10656ff1 --- /dev/null +++ b/ruby/doc/optparse/ruby/integer.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--integer=INTEGER', Integer) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/long_names.rb b/ruby/doc/optparse/ruby/long_names.rb new file mode 100644 index 000000000..a49dbda69 --- /dev/null +++ b/ruby/doc/optparse/ruby/long_names.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--xxx', 'Long name') do |value| + p ['-xxx', value] +end +parser.on('--y1%', '--z2#', "Two long names") do |value| + p ['--y1% or --z2#', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/long_optional.rb b/ruby/doc/optparse/ruby/long_optional.rb new file mode 100644 index 000000000..38dd82166 --- /dev/null +++ b/ruby/doc/optparse/ruby/long_optional.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--xxx [XXX]', 'Long name with optional argument') do |value| + p ['--xxx', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/long_required.rb b/ruby/doc/optparse/ruby/long_required.rb new file mode 100644 index 000000000..b76c99733 --- /dev/null +++ b/ruby/doc/optparse/ruby/long_required.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--xxx XXX', 'Long name with required argument') do |value| + p ['--xxx', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/long_simple.rb b/ruby/doc/optparse/ruby/long_simple.rb new file mode 100644 index 000000000..4e489c43e --- /dev/null +++ b/ruby/doc/optparse/ruby/long_simple.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--xxx', 'One long name') do |value| + p ['--xxx', value] +end +parser.on('--y1%', '--z2#', 'Two long names (aliases)') do |value| + p ['--y1% or --z2#', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/long_with_negation.rb b/ruby/doc/optparse/ruby/long_with_negation.rb new file mode 100644 index 000000000..3f2913c36 --- /dev/null +++ b/ruby/doc/optparse/ruby/long_with_negation.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--[no-]binary', 'Long name with negation') do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/match_converter.rb b/ruby/doc/optparse/ruby/match_converter.rb new file mode 100644 index 000000000..13dc5fcb5 --- /dev/null +++ b/ruby/doc/optparse/ruby/match_converter.rb @@ -0,0 +1,9 @@ +require 'optparse/date' +parser = OptionParser.new +parser.accept(:capitalize, /\w*/) do |value| + value.capitalize +end +parser.on('--capitalize XXX', :capitalize) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/matched_values.rb b/ruby/doc/optparse/ruby/matched_values.rb new file mode 100644 index 000000000..f184ca847 --- /dev/null +++ b/ruby/doc/optparse/ruby/matched_values.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--xxx XXX', /foo/i, 'Matched values') do |value| + p ['--xxx', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/method.rb b/ruby/doc/optparse/ruby/method.rb new file mode 100644 index 000000000..3f02ff579 --- /dev/null +++ b/ruby/doc/optparse/ruby/method.rb @@ -0,0 +1,11 @@ +require 'optparse' +parser = OptionParser.new +def xxx_handler(value) + p ['Handler method for -xxx called with value:', value] +end +parser.on('--xxx', 'Option with no argument', method(:xxx_handler)) +def yyy_handler(value) + p ['Handler method for -yyy called with value:', value] +end +parser.on('--yyy YYY', 'Option with required argument', method(:yyy_handler)) +parser.parse! diff --git a/ruby/doc/optparse/ruby/missing_options.rb b/ruby/doc/optparse/ruby/missing_options.rb new file mode 100644 index 000000000..9428463cf --- /dev/null +++ b/ruby/doc/optparse/ruby/missing_options.rb @@ -0,0 +1,12 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x', '--xxx', 'Short and long, no argument') +parser.on('-yYYY', '--yyy', 'Short and long, required argument') +parser.on('-z [ZZZ]', '--zzz', 'Short and long, optional argument') +options = {} +parser.parse!(into: options) +required_options = [:xxx, :zzz] +missing_options = required_options - options.keys +unless missing_options.empty? + fail "Missing required options: #{missing_options}" +end diff --git a/ruby/doc/optparse/ruby/mixed_names.rb b/ruby/doc/optparse/ruby/mixed_names.rb new file mode 100644 index 000000000..67f81e7e8 --- /dev/null +++ b/ruby/doc/optparse/ruby/mixed_names.rb @@ -0,0 +1,12 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x', '--xxx', 'Short and long, no argument') do |value| + p ['--xxx', value] +end +parser.on('-yYYY', '--yyy', 'Short and long, required argument') do |value| + p ['--yyy', value] +end +parser.on('-z [ZZZ]', '--zzz', 'Short and long, optional argument') do |value| + p ['--zzz', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/name_abbrev.rb b/ruby/doc/optparse/ruby/name_abbrev.rb new file mode 100644 index 000000000..b438c1b3d --- /dev/null +++ b/ruby/doc/optparse/ruby/name_abbrev.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-n', '--dry-run',) do |value| + p ['--dry-run', value] +end +parser.on('-d', '--draft',) do |value| + p ['--draft', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/no_abbreviation.rb b/ruby/doc/optparse/ruby/no_abbreviation.rb new file mode 100644 index 000000000..546449270 --- /dev/null +++ b/ruby/doc/optparse/ruby/no_abbreviation.rb @@ -0,0 +1,10 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-n', '--dry-run',) do |value| + p ['--dry-run', value] +end +parser.on('-d', '--draft',) do |value| + p ['--draft', value] +end +parser.require_exact = true +parser.parse! diff --git a/ruby/doc/optparse/ruby/numeric.rb b/ruby/doc/optparse/ruby/numeric.rb new file mode 100644 index 000000000..d7021f154 --- /dev/null +++ b/ruby/doc/optparse/ruby/numeric.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--numeric=NUMERIC', Numeric) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/object.rb b/ruby/doc/optparse/ruby/object.rb new file mode 100644 index 000000000..0f5ae8b92 --- /dev/null +++ b/ruby/doc/optparse/ruby/object.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--object=OBJECT', Object) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/octal_integer.rb b/ruby/doc/optparse/ruby/octal_integer.rb new file mode 100644 index 000000000..b9644a076 --- /dev/null +++ b/ruby/doc/optparse/ruby/octal_integer.rb @@ -0,0 +1,7 @@ +require 'optparse' +include OptionParser::Acceptables +parser = OptionParser.new +parser.on('--octal_integer=OCTAL_INTEGER', OctalInteger) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/optional_argument.rb b/ruby/doc/optparse/ruby/optional_argument.rb new file mode 100644 index 000000000..456368a8b --- /dev/null +++ b/ruby/doc/optparse/ruby/optional_argument.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x [XXX]', '--xxx', 'Optional argument via short name') do |value| + p ['--xxx', value] +end +parser.on('-y', '--yyy [YYY]', 'Optional argument via long name') do |value| + p ['--yyy', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/parse.rb b/ruby/doc/optparse/ruby/parse.rb new file mode 100644 index 000000000..a5d432948 --- /dev/null +++ b/ruby/doc/optparse/ruby/parse.rb @@ -0,0 +1,13 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--xxx') do |value| + p ['--xxx', value] +end +parser.on('--yyy YYY') do |value| + p ['--yyy', value] +end +parser.on('--zzz [ZZZ]') do |value| + p ['--zzz', value] +end +ret = parser.parse(ARGV) +puts "Returned: #{ret} (#{ret.class})" diff --git a/ruby/doc/optparse/ruby/parse_bang.rb b/ruby/doc/optparse/ruby/parse_bang.rb new file mode 100644 index 000000000..567bc733c --- /dev/null +++ b/ruby/doc/optparse/ruby/parse_bang.rb @@ -0,0 +1,13 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--xxx') do |value| + p ['--xxx', value] +end +parser.on('--yyy YYY') do |value| + p ['--yyy', value] +end +parser.on('--zzz [ZZZ]') do |value| + p ['--zzz', value] +end +ret = parser.parse! +puts "Returned: #{ret} (#{ret.class})" diff --git a/ruby/doc/optparse/ruby/proc.rb b/ruby/doc/optparse/ruby/proc.rb new file mode 100644 index 000000000..9c669fdc9 --- /dev/null +++ b/ruby/doc/optparse/ruby/proc.rb @@ -0,0 +1,13 @@ +require 'optparse' +parser = OptionParser.new +parser.on( + '--xxx', + 'Option with no argument', + ->(value) {p ['Handler proc for -xxx called with value:', value]} +) +parser.on( + '--yyy YYY', + 'Option with required argument', + ->(value) {p ['Handler proc for -yyy called with value:', value]} +) +parser.parse! diff --git a/ruby/doc/optparse/ruby/regexp.rb b/ruby/doc/optparse/ruby/regexp.rb new file mode 100644 index 000000000..6aba45ce7 --- /dev/null +++ b/ruby/doc/optparse/ruby/regexp.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--regexp=REGEXP', Regexp) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/required_argument.rb b/ruby/doc/optparse/ruby/required_argument.rb new file mode 100644 index 000000000..228a492c3 --- /dev/null +++ b/ruby/doc/optparse/ruby/required_argument.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x XXX', '--xxx', 'Required argument via short name') do |value| + p ['--xxx', value] +end +parser.on('-y', '--y YYY', 'Required argument via long name') do |value| + p ['--yyy', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/shellwords.rb b/ruby/doc/optparse/ruby/shellwords.rb new file mode 100644 index 000000000..d181d4a4f --- /dev/null +++ b/ruby/doc/optparse/ruby/shellwords.rb @@ -0,0 +1,6 @@ +require 'optparse/shellwords' +parser = OptionParser.new +parser.on('--shellwords=SHELLWORDS', Shellwords) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/short_names.rb b/ruby/doc/optparse/ruby/short_names.rb new file mode 100644 index 000000000..4a756518f --- /dev/null +++ b/ruby/doc/optparse/ruby/short_names.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x', 'Short name') do |value| + p ['x', value] +end +parser.on('-1', '-%', 'Two short names') do |value| + p ['-1 or -%', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/short_optional.rb b/ruby/doc/optparse/ruby/short_optional.rb new file mode 100644 index 000000000..6eebf01c5 --- /dev/null +++ b/ruby/doc/optparse/ruby/short_optional.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x [XXX]', 'Short name with optional argument') do |value| + p ['-x', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/short_range.rb b/ruby/doc/optparse/ruby/short_range.rb new file mode 100644 index 000000000..f5b870a4b --- /dev/null +++ b/ruby/doc/optparse/ruby/short_range.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-[!-~]', 'Short names in (very large) range') do |name, value| + p ['!-~', name, value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/short_required.rb b/ruby/doc/optparse/ruby/short_required.rb new file mode 100644 index 000000000..867c02c9f --- /dev/null +++ b/ruby/doc/optparse/ruby/short_required.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-xXXX', 'Short name with required argument') do |value| + p ['-x', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/short_simple.rb b/ruby/doc/optparse/ruby/short_simple.rb new file mode 100644 index 000000000..d3d489e2d --- /dev/null +++ b/ruby/doc/optparse/ruby/short_simple.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x', 'One short name') do |value| + p ['-x', value] +end +parser.on('-1', '-%', 'Two short names (aliases)') do |value| + p ['-1 or -%', value] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/string.rb b/ruby/doc/optparse/ruby/string.rb new file mode 100644 index 000000000..fee84a17e --- /dev/null +++ b/ruby/doc/optparse/ruby/string.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--string=STRING', String) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/terminator.rb b/ruby/doc/optparse/ruby/terminator.rb new file mode 100644 index 000000000..c718ac1a9 --- /dev/null +++ b/ruby/doc/optparse/ruby/terminator.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--my_option XXX') do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/time.rb b/ruby/doc/optparse/ruby/time.rb new file mode 100644 index 000000000..aa8b0cfa1 --- /dev/null +++ b/ruby/doc/optparse/ruby/time.rb @@ -0,0 +1,6 @@ +require 'optparse/time' +parser = OptionParser.new +parser.on('--time=TIME', Time) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/true_class.rb b/ruby/doc/optparse/ruby/true_class.rb new file mode 100644 index 000000000..40db9d07c --- /dev/null +++ b/ruby/doc/optparse/ruby/true_class.rb @@ -0,0 +1,6 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--true_class=TRUE_CLASS', TrueClass) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/ruby/uri.rb b/ruby/doc/optparse/ruby/uri.rb new file mode 100644 index 000000000..b492835b4 --- /dev/null +++ b/ruby/doc/optparse/ruby/uri.rb @@ -0,0 +1,6 @@ +require 'optparse/uri' +parser = OptionParser.new +parser.on('--uri=URI', URI) do |value| + p [value, value.class] +end +parser.parse! diff --git a/ruby/doc/optparse/tutorial.rdoc b/ruby/doc/optparse/tutorial.rdoc new file mode 100644 index 000000000..19c86b93d --- /dev/null +++ b/ruby/doc/optparse/tutorial.rdoc @@ -0,0 +1,835 @@ +== Tutorial + +=== Why \OptionParser? + +When a Ruby program executes, it captures its command-line arguments +and options into variable ARGV. +This simple program just prints its \ARGV: + + :include: ruby/argv.rb + +Execution, with arguments and options: + + $ ruby argv.rb foo --bar --baz bat bam + ["foo", "--bar", "--baz", "bat", "bam"] + +The executing program is responsible for parsing and handling +the command-line options. + +OptionParser offers methods for parsing and handling those options. + +With \OptionParser, you can define options so that for each option: + +- The code that defines the option and code that handles that option + are in the same place. +- The option may take no argument, a required argument, or an optional argument. +- The argument may be automatically converted to a specified class. +- The argument may be restricted to specified _forms_. +- The argument may be restricted to specified _values_. + +The class also has method #help, which displays automatically-generated help text. + +=== Contents + +- {To Begin With}[#label-To+Begin+With] +- {Defining Options}[#label-Defining+Options] +- {Option Names}[#label-Option+Names] + - {Short Option Names}[#label-Short+Option+Names] + - {Long Option Names}[#label-Long+Option+Names] + - {Mixing Option Names}[#label-Mixing+Option+Names] + - {Option Name Abbreviations}[#label-Option+Name+Abbreviations] +- {Option Arguments}[#label-Option+Arguments] + - {Option with No Argument}[#label-Option+with+No+Argument] + - {Option with Required Argument}[#label-Option+with+Required+Argument] + - {Option with Optional Argument}[#label-Option+with+Optional+Argument] + - {Argument Abbreviations}[#label-Argument+Abbreviations] +- {Argument Values}[#label-Argument+Values] + - {Explicit Argument Values}[#label-Explicit+Argument+Values] + - {Explicit Values in Array}[#label-Explicit+Values+in+Array] + - {Explicit Values in Hash}[#label-Explicit+Values+in+Hash] + - {Argument Value Patterns}[#label-Argument+Value+Patterns] +- {Keyword Argument into}[#label-Keyword+Argument+into] + - {Collecting Options}[#label-Collecting+Options] + - {Checking for Missing Options}[#label-Checking+for+Missing+Options] + - {Default Values for Options}[#label-Default+Values+for+Options] +- {Argument Converters}[#label-Argument+Converters] +- {Help}[#label-Help] +- {Top List and Base List}[#label-Top+List+and+Base+List] +- {Defining Options}[#label-Defining+Options] +- {Parsing}[#label-Parsing] + - {Method parse!}[#label-Method+parse-21] + - {Method parse}[#label-Method+parse] + - {Method order!}[#label-Method+order-21] + - {Method order}[#label-Method+order] + - {Method permute!}[#label-Method+permute-21] + - {Method permute}[#label-Method+permute] + +=== To Begin With + +To use \OptionParser: + +1. Require the \OptionParser code. +2. Create an \OptionParser object. +3. Define one or more options. +4. Parse the command line. + +File +basic.rb+ defines three options, -x, +-y, and -z, each with a descriptive string, +and each with a block. + + :include: ruby/basic.rb + +From these defined options, the parser automatically builds help text: + + $ ruby basic.rb --help + Usage: basic [options] + -x Whether to X + -y Whether to Y + -z Whether to Z + +When an option is found during parsing, +the block defined for the option is called with the argument value. +An invalid option raises an exception. + +Method #parse!, which is used most often in this tutorial, +removes from \ARGV the options and arguments it finds, +leaving other non-option arguments for the program to handle on its own. +The method returns the possibly-reduced \ARGV array. + +Executions: + + $ ruby basic.rb -x -z + ["x", true] + ["z", true] + [] + $ ruby basic.rb -z -y -x + ["z", true] + ["y", true] + ["x", true] + [] + $ ruby basic.rb -x input_file.txt output_file.txt + ["x", true] + ["input_file.txt", "output_file.txt"] + $ ruby basic.rb -a + basic.rb:16:in `
': invalid option: -a (OptionParser::InvalidOption) + +=== Defining Options + +A common way to define an option in \OptionParser +is with instance method OptionParser#on. + +The method may be called with any number of arguments +(whose order does not matter), +and may also have a trailing optional keyword argument +into+. + +The given arguments determine the characteristics of the new option. +These may include: + +- One or more short option names. +- One or more long option names. +- Whether the option takes no argument, an optional argument, or a required argument. +- Acceptable _forms_ for the argument. +- Acceptable _values_ for the argument. +- A proc or method to be called when the parser encounters the option. +- String descriptions for the option. + +=== Option Names + +You can give an option one or more names of two types: + +- Short (1-character) name, beginning with one hyphen (-). +- Long (multi-character) name, beginning with two hyphens (--). + +==== Short Option Names + +A short option name consists of a hyphen and a single character. + +File +short_names.rb+ +defines an option with a short name, -x, +and an option with two short names (aliases, in effect) -y and -z. + + :include: ruby/short_names.rb + +Executions: + + $ ruby short_names.rb --help + Usage: short_names [options] + -x Short name + -1, -% Two short names + $ ruby short_names.rb -x + ["x", true] + $ ruby short_names.rb -1 + ["-1 or -%", true] + $ ruby short_names.rb -% + ["-1 or -%", true] + +Multiple short names can "share" a hyphen: + + $ ruby short_names.rb -x1% + ["x", true] + ["-1 or -%", true] + ["-1 or -%", true] + +==== Long Option Names + +A long option name consists of two hyphens and a one or more characters +(usually two or more characters). + +File +long_names.rb+ +defines an option with a long name, --xxx, +and an option with two long names (aliases, in effect) --y1% and --z2#. + + :include: ruby/long_names.rb + +Executions: + + $ ruby long_names.rb --help + Usage: long_names [options] + --xxx Long name + --y1%, --z2# Two long names + $ ruby long_names.rb --xxx + ["-xxx", true] + $ ruby long_names.rb --y1% + ["--y1% or --z2#", true] + $ ruby long_names.rb --z2# + ["--y1% or --z2#", true] + +A long name may be defined with both positive and negative senses. + +File +long_with_negation.rb+ defines an option that has both senses. + + :include: ruby/long_with_negation.rb + +Executions: + + $ ruby long_with_negation.rb --help + Usage: long_with_negation [options] + --[no-]binary Long name with negation + $ ruby long_with_negation.rb --binary + [true, TrueClass] + $ ruby long_with_negation.rb --no-binary + [false, FalseClass] + +==== Mixing Option Names + +Many developers like to mix short and long option names, +so that a short name is in effect an abbreviation of a long name. + +File +mixed_names.rb+ +defines options that each have both a short and a long name. + + :include: ruby/mixed_names.rb + +Executions: + + $ ruby mixed_names.rb --help + Usage: mixed_names [options] + -x, --xxx Short and long, no argument + -y, --yyyYYY Short and long, required argument + -z, --zzz [ZZZ] Short and long, optional argument + $ ruby mixed_names.rb -x + ["--xxx", true] + $ ruby mixed_names.rb --xxx + ["--xxx", true] + $ ruby mixed_names.rb -y + mixed_names.rb:12:in `
': missing argument: -y (OptionParser::MissingArgument) + $ ruby mixed_names.rb -y FOO + ["--yyy", "FOO"] + $ ruby mixed_names.rb --yyy + mixed_names.rb:12:in `
': missing argument: --yyy (OptionParser::MissingArgument) + $ ruby mixed_names.rb --yyy BAR + ["--yyy", "BAR"] + $ ruby mixed_names.rb -z + ["--zzz", nil] + $ ruby mixed_names.rb -z BAZ + ["--zzz", "BAZ"] + $ ruby mixed_names.rb --zzz + ["--zzz", nil] + $ ruby mixed_names.rb --zzz BAT + ["--zzz", "BAT"] + +==== Option Name Abbreviations + +By default, abbreviated option names on the command-line are allowed. +An abbreviated name is valid if it is unique among abbreviated option names. + + :include: ruby/name_abbrev.rb + +Executions: + + $ ruby name_abbrev.rb --help + Usage: name_abbrev [options] + -n, --dry-run + -d, --draft + $ ruby name_abbrev.rb -n + ["--dry-run", true] + $ ruby name_abbrev.rb --dry-run + ["--dry-run", true] + $ ruby name_abbrev.rb -d + ["--draft", true] + $ ruby name_abbrev.rb --draft + ["--draft", true] + $ ruby name_abbrev.rb --d + name_abbrev.rb:9:in `
': ambiguous option: --d (OptionParser::AmbiguousOption) + $ ruby name_abbrev.rb --dr + name_abbrev.rb:9:in `
': ambiguous option: --dr (OptionParser::AmbiguousOption) + $ ruby name_abbrev.rb --dry + ["--dry-run", true] + $ ruby name_abbrev.rb --dra + ["--draft", true] + +You can disable abbreviation using method +require_exact+. + + :include: ruby/no_abbreviation.rb + +Executions: + + $ ruby no_abbreviation.rb --dry-ru + no_abbreviation.rb:10:in `
': invalid option: --dry-ru (OptionParser::InvalidOption) + $ ruby no_abbreviation.rb --dry-run + ["--dry-run", true] + +=== Option Arguments + +An option may take no argument, a required argument, or an optional argument. + +==== Option with No Argument + +All the examples above define options with no argument. + +==== Option with Required Argument + +Specify a required argument for an option by adding a dummy word +to its name definition. + +File +required_argument.rb+ defines two options; +each has a required argument because the name definition has a following dummy word. + + :include: ruby/required_argument.rb + +When an option is found, the given argument is yielded. + +Executions: + + $ ruby required_argument.rb --help + Usage: required_argument [options] + -x, --xxx XXX Required argument via short name + -y, --y YYY Required argument via long name + $ ruby required_argument.rb -x AAA + ["--xxx", "AAA"] + $ ruby required_argument.rb -y BBB + ["--yyy", "BBB"] + +Omitting a required argument raises an error: + + $ ruby required_argument.rb -x + required_argument.rb:9:in `
': missing argument: -x (OptionParser::MissingArgument) + +==== Option with Optional Argument + +Specify an optional argument for an option by adding a dummy word +enclosed in square brackets to its name definition. + +File +optional_argument.rb+ defines two options; +each has an optional argument because the name definition has a following dummy word +in square brackets. + + :include: ruby/optional_argument.rb + +When an option with an argument is found, the given argument yielded. + +Executions: + + $ ruby optional_argument.rb --help + Usage: optional_argument [options] + -x, --xxx [XXX] Optional argument via short name + -y, --yyy [YYY] Optional argument via long name + $ ruby optional_argument.rb -x AAA + ["--xxx", "AAA"] + $ ruby optional_argument.rb -y BBB + ["--yyy", "BBB"] + +Omitting an optional argument does not raise an error. + +=== Argument Values + +Permissible argument values may be restricted +either by specifying explicit values +or by providing a pattern that the given value must match. + +==== Explicit Argument Values + +You can specify argument values in either of two ways: + +- Specify values an array of strings. +- Specify values a hash. + +===== Explicit Values in Array + +You can specify explicit argument values in an array of strings. +The argument value must be one of those strings, or an unambiguous abbreviation. + +File +explicit_array_values.rb+ defines options with explicit argument values. + + :include: ruby/explicit_array_values.rb + +Executions: + + $ ruby explicit_array_values.rb --help + Usage: explicit_array_values [options] + -xXXX Values for required argument + -y [YYY] Values for optional argument + $ ruby explicit_array_values.rb -x + explicit_array_values.rb:9:in `
': missing argument: -x (OptionParser::MissingArgument) + $ ruby explicit_array_values.rb -x foo + ["-x", "foo"] + $ ruby explicit_array_values.rb -x f + ["-x", "foo"] + $ ruby explicit_array_values.rb -x bar + ["-x", "bar"] + $ ruby explicit_array_values.rb -y ba + explicit_array_values.rb:9:in `
': ambiguous argument: -y ba (OptionParser::AmbiguousArgument) + $ ruby explicit_array_values.rb -x baz + explicit_array_values.rb:9:in `
': invalid argument: -x baz (OptionParser::InvalidArgument) + + +===== Explicit Values in Hash + +You can specify explicit argument values in a hash with string keys. +The value passed must be one of those keys, or an unambiguous abbreviation; +the value yielded will be the value for that key. + +File +explicit_hash_values.rb+ defines options with explicit argument values. + + :include: ruby/explicit_hash_values.rb + +Executions: + + $ ruby explicit_hash_values.rb --help + Usage: explicit_hash_values [options] + -xXXX Values for required argument + -y [YYY] Values for optional argument + $ ruby explicit_hash_values.rb -x + explicit_hash_values.rb:9:in `
': missing argument: -x (OptionParser::MissingArgument) + $ ruby explicit_hash_values.rb -x foo + ["-x", 0] + $ ruby explicit_hash_values.rb -x f + ["-x", 0] + $ ruby explicit_hash_values.rb -x bar + ["-x", 1] + $ ruby explicit_hash_values.rb -x baz + explicit_hash_values.rb:9:in `
': invalid argument: -x baz (OptionParser::InvalidArgument) + $ ruby explicit_hash_values.rb -y + ["-y", nil] + $ ruby explicit_hash_values.rb -y baz + ["-y", 2] + $ ruby explicit_hash_values.rb -y bat + ["-y", 3] + $ ruby explicit_hash_values.rb -y ba + explicit_hash_values.rb:9:in `
': ambiguous argument: -y ba (OptionParser::AmbiguousArgument) + $ ruby explicit_hash_values.rb -y bam + ["-y", nil] + +==== Argument Value Patterns + +You can restrict permissible argument values +by specifying a Regexp that the given argument must match. + +File +matched_values.rb+ defines options with matched argument values. + + :include: ruby/matched_values.rb + +Executions: + + $ ruby matched_values.rb --help + Usage: matched_values [options] + --xxx XXX Matched values + $ ruby matched_values.rb --xxx foo + ["--xxx", "foo"] + $ ruby matched_values.rb --xxx FOO + ["--xxx", "FOO"] + $ ruby matched_values.rb --xxx bar + matched_values.rb:6:in `
': invalid argument: --xxx bar (OptionParser::InvalidArgument) + +=== Keyword Argument +into+ + +In parsing options, you can add keyword option +into+ with a hash-like argument; +each parsed option will be added as a name/value pair. + +This is useful for: + +- Collecting options. +- Checking for missing options. +- Providing default values for options. + +==== Collecting Options + +Use keyword argument +into+ to collect options. + + :include: ruby/collected_options.rb + +Executions: + + $ ruby collected_options.rb --help + Usage: into [options] + -x, --xxx Short and long, no argument + -y, --yyyYYY Short and long, required argument + -z, --zzz [ZZZ] Short and long, optional argument + $ ruby collected_options.rb --xxx + {:xxx=>true} + $ ruby collected_options.rb --xxx --yyy FOO + {:xxx=>true, :yyy=>"FOO"} + $ ruby collected_options.rb --xxx --yyy FOO --zzz Bar + {:xxx=>true, :yyy=>"FOO", :zzz=>"Bar"} + $ ruby collected_options.rb --xxx --yyy FOO --yyy BAR + {:xxx=>true, :yyy=>"BAR"} + +Note in the last execution that the argument value for option --yyy +was overwritten. + +==== Checking for Missing Options + +Use the collected options to check for missing options. + + :include: ruby/missing_options.rb + +Executions: + + $ ruby missing_options.rb --help + Usage: missing_options [options] + -x, --xxx Short and long, no argument + -y, --yyyYYY Short and long, required argument + -z, --zzz [ZZZ] Short and long, optional argument + $ ruby missing_options.rb --yyy FOO + missing_options.rb:11:in `
': Missing required options: [:xxx, :zzz] (RuntimeError) + +==== Default Values for Options + +Initialize the +into+ argument to define default values for options. + + :include: ruby/default_values.rb + +Executions: + + $ ruby default_values.rb --help + Usage: default_values [options] + -x, --xxx Short and long, no argument + -y, --yyyYYY Short and long, required argument + -z, --zzz [ZZZ] Short and long, optional argument + $ ruby default_values.rb --yyy FOO + {:yyy=>"FOO", :zzz=>"BBB"} + +=== Argument Converters + +An option can specify that its argument is to be converted +from the default \String to an instance of another class. +There are a number of built-in converters. + +Example: File +date.rb+ +defines an option whose argument is to be converted to a \Date object. +The argument is converted by method Date#parse. + + :include: ruby/date.rb + +Executions: + + $ ruby date.rb --date 2001-02-03 + [#, Date] + $ ruby date.rb --date 20010203 + [#, Date] + $ ruby date.rb --date "3rd Feb 2001" + [#, Date] + +You can also define custom converters. +See {Argument Converters}[./argument_converters.rdoc] +for both built-in and custom converters. + +=== Help + +\OptionParser makes automatically generated help text available. + +The help text consists of: + +- A banner, showing the usage. +- Option short and long names. +- Option dummy argument names. +- Option descriptions. + +Example code: + + :include: ruby/help.rb + +The option names and dummy argument names are defined as described above. + +The option description consists of the strings that are not themselves option names; +An option can have more than one description string. +Execution: + + Usage: help [options] + -x, --xxx Adipiscing elit. Aenean commodo ligula eget. + Aenean massa. Cum sociis natoque penatibus + -y, --yyy YYY Lorem ipsum dolor sit amet, consectetuer. + -z, --zzz [ZZZ] Et magnis dis parturient montes, nascetur + ridiculus mus. Donec quam felis, ultricies + nec, pellentesque eu, pretium quis, sem. + +The program name is included in the default banner: +Usage: #{program_name} [options]; +you can change the program name. + + :include: ruby/help_program_name.rb + +Execution: + + $ ruby help_program_name.rb --help + Usage: help_program_name.rb [options] + +You can also change the entire banner. + + :include: ruby/help_banner.rb + +Execution: + + $ ruby help_banner.rb --help + Usage: ruby help_banner.rb + +By default, the option names are indented 4 spaces +and the width of the option-names field is 32 spaces. + +You can change these values, along with the banner, +by passing parameters to OptionParser.new. + + :include: ruby/help_format.rb + +Execution: + + $ ruby help_format.rb --help + ruby help_format.rb [options] + -x, --xxx Adipiscing elit. Aenean commodo ligula eget. + Aenean massa. Cum sociis natoque penatibus + -y, --yyy YYY Lorem ipsum dolor sit amet, consectetuer. + -z, --zzz [ZZZ] Et magnis dis parturient montes, nascetur + ridiculus mus. Donec quam felis, ultricies + nec, pellentesque eu, pretium quis, sem. + +=== Top List and Base List + +An \OptionParser object maintains a stack of \OptionParser::List objects, +each of which has a collection of zero or more options. +It is unlikely that you'll need to add or take away from that stack. + +The stack includes: + +- The top list, given by \OptionParser#top. +- The base list, given by \OptionParser#base. + +When \OptionParser builds its help text, the options in the top list +precede those in the base list. + +=== Defining Options + +Option-defining methods allow you to create an option, and also append/prepend it +to the top list or append it to the base list. + +Each of these next three methods accepts a sequence of parameter arguments and a block, +creates an option object using method \Option#make_switch (see below), +and returns the created option: + +- \Method \OptionParser#define appends the created option to the top list. + +- \Method \OptionParser#define_head prepends the created option to the top list. + +- \Method \OptionParser#define_tail appends the created option to the base list. + +These next three methods are identical to the three above, +except for their return values: + +- \Method \OptionParser#on is identical to method \OptionParser#define, + except that it returns the parser object +self+. + +- \Method \OptionParser#on_head is identical to method \OptionParser#define_head, + except that it returns the parser object +self+. + +- \Method \OptionParser#on_tail is identical to method \OptionParser#define_tail, + except that it returns the parser object +self+. + +Though you may never need to call it directly, +here's the core method for defining an option: + +- \Method \OptionParser#make_switch accepts an array of parameters and a block. + See {Parameters for New Options}[./option_params.rdoc]. + This method is unlike others here in that it: + - Accepts an array of parameters; + others accept a sequence of parameter arguments. + - Returns an array containing the created option object, + option names, and other values; + others return either the created option object + or the parser object +self+. + +=== Parsing + +\OptionParser has six instance methods for parsing. + +Three have names ending with a "bang" (!): + +- parse! +- order! +- permute! + +Each of these methods: + +- Accepts an optional array of string arguments +argv+; + if not given, +argv+ defaults to the value of OptionParser#default_argv, + whose initial value is ARGV. +- Accepts an optional keyword argument +into+ + (see {Keyword Argument into}[#label-Keyword+Argument+into]). +- Returns +argv+, possibly with some elements removed. + +The three other methods have names _not_ ending with a "bang": + +- parse +- order +- permute + +Each of these methods: + +- Accepts an array of string arguments + _or_ zero or more string arguments. +- Accepts an optional keyword argument +into+ and its value _into_. + (see {Keyword Argument into}[#label-Keyword+Argument+into]). +- Returns +argv+, possibly with some elements removed. + +==== \Method parse! + +\Method parse!: + +- Accepts an optional array of string arguments +argv+; + if not given, +argv+ defaults to the value of OptionParser#default_argv, + whose initial value is ARGV. +- Accepts an optional keyword argument +into+ + (see {Keyword Argument into}[#label-Keyword+Argument+into]). +- Returns +argv+, possibly with some elements removed. + +The method processes the elements in +argv+ beginning at argv[0], +and ending, by default, at the end. + +Otherwise processing ends and the method returns when: + +- The terminator argument -- is found; + the terminator argument is removed before the return. +- Environment variable +POSIXLY_CORRECT+ is defined + and a non-option argument is found; + the non-option argument is not removed. + Note that the _value_ of that variable does not matter, + as only its existence is checked. + +File +parse_bang.rb+: + + :include: ruby/parse_bang.rb + +Help: + + $ ruby parse_bang.rb --help + Usage: parse_bang [options] + --xxx + --yyy YYY + --zzz [ZZZ] + +Default behavior: + + $ ruby parse_bang.rb input_file.txt output_file.txt --xxx --yyy FOO --zzz BAR + ["--xxx", true] + ["--yyy", "FOO"] + ["--zzz", "BAR"] + Returned: ["input_file.txt", "output_file.txt"] (Array) + +Processing ended by terminator argument: + + $ ruby parse_bang.rb input_file.txt output_file.txt --xxx --yyy FOO -- --zzz BAR + ["--xxx", true] + ["--yyy", "FOO"] + Returned: ["input_file.txt", "output_file.txt", "--zzz", "BAR"] (Array) + +Processing ended by non-option found when +POSIXLY_CORRECT+ is defined: + + $ POSIXLY_CORRECT=true ruby parse_bang.rb --xxx input_file.txt output_file.txt -yyy FOO + ["--xxx", true] + Returned: ["input_file.txt", "output_file.txt", "-yyy", "FOO"] (Array) + +==== \Method parse + +\Method parse: + +- Accepts an array of string arguments + _or_ zero or more string arguments. +- Accepts an optional keyword argument +into+ and its value _into_. + (see {Keyword Argument into}[#label-Keyword+Argument+into]). +- Returns +argv+, possibly with some elements removed. + +If given an array +ary+, the method forms array +argv+ as ary.dup. +If given zero or more string arguments, those arguments are formed +into array +argv+. + +The method calls + + parse!(argv, into: into) + +Note that environment variable +POSIXLY_CORRECT+ +and the terminator argument -- are honored. + +File +parse.rb+: + + :include: ruby/parse.rb + +Help: + + $ ruby parse.rb --help + Usage: parse [options] + --xxx + --yyy YYY + --zzz [ZZZ] + +Default behavior: + + $ ruby parse.rb input_file.txt output_file.txt --xxx --yyy FOO --zzz BAR + ["--xxx", true] + ["--yyy", "FOO"] + ["--zzz", "BAR"] + Returned: ["input_file.txt", "output_file.txt"] (Array) + +Processing ended by terminator argument: + + $ ruby parse.rb input_file.txt output_file.txt --xxx --yyy FOO -- --zzz BAR + ["--xxx", true] + ["--yyy", "FOO"] + Returned: ["input_file.txt", "output_file.txt", "--zzz", "BAR"] (Array) + +Processing ended by non-option found when +POSIXLY_CORRECT+ is defined: + + $ POSIXLY_CORRECT=true ruby parse.rb --xxx input_file.txt output_file.txt -yyy FOO + ["--xxx", true] + Returned: ["input_file.txt", "output_file.txt", "-yyy", "FOO"] (Array) + +==== \Method order! + +Calling method OptionParser#order! gives exactly the same result as +calling method OptionParser#parse! with environment variable ++POSIXLY_CORRECT+ defined. + +==== \Method order + +Calling method OptionParser#order gives exactly the same result as +calling method OptionParser#parse with environment variable ++POSIXLY_CORRECT+ defined. + +==== \Method permute! + +Calling method OptionParser#permute! gives exactly the same result as +calling method OptionParser#parse! with environment variable ++POSIXLY_CORRECT+ _not_ defined. + +==== \Method permute + +Calling method OptionParser#permute gives exactly the same result as +calling method OptionParser#parse with environment variable ++POSIXLY_CORRECT+ _not_ defined. diff --git a/ruby/doc/ractor.md b/ruby/doc/ractor.md new file mode 100644 index 000000000..f5b1fb540 --- /dev/null +++ b/ruby/doc/ractor.md @@ -0,0 +1,952 @@ +# Ractor - Ruby's Actor-like concurrent abstraction + +Ractor is designed to provide a parallel execution feature of Ruby without thread-safety concerns. + +## Summary + +### Multiple Ractors in an interpreter process + +You can make multiple Ractors and they run in parallel. + +* `Ractor.new{ expr }` creates a new Ractor and `expr` is run in parallel on a parallel computer. +* Interpreter invokes with the first Ractor (called *main Ractor*). +* If main Ractor terminated, all Ractors receive terminate request like Threads (if main thread (first invoked Thread), Ruby interpreter sends all running threads to terminate execution). +* Each Ractor has 1 or more Threads. + * Threads in a Ractor shares a Ractor-wide global lock like GIL (GVL in MRI terminology), so they can't run in parallel (without releasing GVL explicitly in C-level). Threads in different ractors run in parallel. + * The overhead of creating a Ractor is similar to overhead of one Thread creation. + +### Limited sharing between multiple ractors + +Ractors don't share everything, unlike threads. + +* Most objects are *Unshareable objects*, so you don't need to care about thread-safety problems which are caused by sharing. +* Some objects are *Shareable objects*. + * Immutable objects: frozen objects which don't refer to unshareable-objects. + * `i = 123`: `i` is an immutable object. + * `s = "str".freeze`: `s` is an immutable object. + * `a = [1, [2], 3].freeze`: `a` is not an immutable object because `a` refers unshareable-object `[2]` (which is not frozen). + * `h = {c: Object}.freeze`: `h` is an immutable object because `h` refers Symbol `:c` and shareable `Object` class object which is not frozen. + * Class/Module objects + * Special shareable objects + * Ractor object itself. + * And more... + +### Two-types communication between Ractors + +Ractors communicate with each other and synchronize the execution by message exchanging between Ractors. There are two message exchange protocols: push type (message passing) and pull type. + +* Push type message passing: `Ractor#send(obj)` and `Ractor.receive()` pair. + * Sender ractor passes the `obj` to the ractor `r` by `r.send(obj)` and receiver ractor receives the message with `Ractor.receive`. + * Sender knows the destination Ractor `r` and the receiver does not know the sender (accept all messages from any ractors). + * Receiver has infinite queue and sender enqueues the message. Sender doesn't block to put message into this queue. + * This type of message exchanging is employed by many other Actor-based languages. + * `Ractor.receive_if{ filter_expr }` is a variant of `Ractor.receive` to select a message. +* Pull type communication: `Ractor.yield(obj)` and `Ractor#take()` pair. + * Sender ractor declare to yield the `obj` by `Ractor.yield(obj)` and receiver Ractor take it with `r.take`. + * Sender doesn't know a destination Ractor and receiver knows the sender Ractor `r`. + * Sender or receiver will block if there is no other side. + +### Copy & Move semantics to send messages + +To send unshareable objects as messages, objects are copied or moved. + +* Copy: use deep-copy. +* Move: move membership. + * Sender can not access the moved object after moving the object. + * Guarantee that at least only 1 Ractor can access the object. + +### Thread-safety + +Ractor helps to write a thread-safe concurrent program, but we can make thread-unsafe programs with Ractors. + +* GOOD: Sharing limitation + * Most objects are unshareable, so we can't make data-racy and race-conditional programs. + * Shareable objects are protected by an interpreter or locking mechanism. +* BAD: Class/Module can violate this assumption + * To make it compatible with old behavior, classes and modules can introduce data-race and so on. + * Ruby programmers should take care if they modify class/module objects on multi Ractor programs. +* BAD: Ractor can't solve all thread-safety problems + * There are several blocking operations (waiting send, waiting yield and waiting take) so you can make a program which has dead-lock and live-lock issues. + * Some kind of shareable objects can introduce transactions (STM, for example). However, misusing transactions will generate inconsistent state. + +Without Ractor, we need to trace all state-mutations to debug thread-safety issues. +With Ractor, you can concentrate on suspicious code which are shared with Ractors. + +## Creation and termination + +### `Ractor.new` + +* `Ractor.new{ expr }` generates another Ractor. + +```ruby +# Ractor.new with a block creates new Ractor +r = Ractor.new do + # This block will be run in parallel with other ractors +end + +# You can name a Ractor with `name:` argument. +r = Ractor.new name: 'test-name' do +end + +# and Ractor#name returns its name. +r.name #=> 'test-name' +``` + +### Given block isolation + +The Ractor executes given `expr` in a given block. +Given block will be isolated from outer scope by the `Proc#isolate` method (not exposed yet for Ruby users). To prevent sharing unshareable objects between ractors, block outer-variables, `self` and other information are isolated. + +`Proc#isolate` is called at Ractor creation time (when `Ractor.new` is called). If given Proc object is not able to isolate because of outer variables and so on, an error will be raised. + +```ruby +begin + a = true + r = Ractor.new do + a #=> ArgumentError because this block accesses `a`. + end + r.take # see later +rescue ArgumentError +end +``` + +* The `self` of the given block is the `Ractor` object itself. + +```ruby +r = Ractor.new do + p self.class #=> Ractor + self.object_id +end +r.take == self.object_id #=> false +``` + +Passed arguments to `Ractor.new()` becomes block parameters for the given block. However, an interpreter does not pass the parameter object references, but send them as messages (see below for details). + +```ruby +r = Ractor.new 'ok' do |msg| + msg #=> 'ok' +end +r.take #=> 'ok' +``` + +```ruby +# almost similar to the last example +r = Ractor.new do + msg = Ractor.receive + msg +end +r.send 'ok' +r.take #=> 'ok' +``` + +### An execution result of given block + +Return value of the given block becomes an outgoing message (see below for details). + +```ruby +r = Ractor.new do + 'ok' +end +r.take #=> `ok` +``` + +```ruby +# almost similar to the last example +r = Ractor.new do + Ractor.yield 'ok' +end +r.take #=> 'ok' +``` + +Error in the given block will be propagated to the receiver of an outgoing message. + +```ruby +r = Ractor.new do + raise 'ok' # exception will be transferred to the receiver +end + +begin + r.take +rescue Ractor::RemoteError => e + e.cause.class #=> RuntimeError + e.cause.message #=> 'ok' + e.ractor #=> r +end +``` + +## Communication between Ractors + +Communication between Ractors is achieved by sending and receiving messages. There are two ways to communicate with each other. + +* (1) Message sending/receiving + * (1-1) push type send/receive (sender knows receiver). similar to the Actor model. + * (1-2) pull type yield/take (receiver knows sender). +* (2) Using shareable container objects + * Ractor::TVar gem ([ko1/ractor-tvar](https://github.com/ko1/ractor-tvar)) + * more? + +Users can control program execution timing with (1), but should not control with (2) (only manage as critical section). + +For message sending and receiving, there are two types of APIs: push type and pull type. + +* (1-1) send/receive (push type) + * `Ractor#send(obj)` (`Ractor#<<(obj)` is an alias) send a message to the Ractor's incoming port. Incoming port is connected to the infinite size incoming queue so `Ractor#send` will never block. + * `Ractor.receive` dequeue a message from its own incoming queue. If the incoming queue is empty, `Ractor.receive` calling will block. + * `Ractor.receive_if{|msg| filter_expr }` is variant of `Ractor.receive`. `receive_if` only receives a message which `filter_expr` is true (So `Ractor.receive` is the same as `Ractor.receive_if{ true }`. +* (1-2) yield/take (pull type) + * `Ractor.yield(obj)` send an message to a Ractor which are calling `Ractor#take` via outgoing port . If no Ractors are waiting for it, the `Ractor.yield(obj)` will block. If multiple Ractors are waiting for `Ractor.yield(obj)`, only one Ractor can receive the message. + * `Ractor#take` receives a message which is waiting by `Ractor.yield(obj)` method from the specified Ractor. If the Ractor does not call `Ractor.yield` yet, the `Ractor#take` call will block. +* `Ractor.select()` can wait for the success of `take`, `yield` and `receive`. +* You can close the incoming port or outgoing port. + * You can close then with `Ractor#close_incoming` and `Ractor#close_outgoing`. + * If the incoming port is closed for a Ractor, you can't `send` to the Ractor. If `Ractor.receive` is blocked for the closed incoming port, then it will raise an exception. + * If the outgoing port is closed for a Ractor, you can't call `Ractor#take` and `Ractor.yield` on the Ractor. If ractors are blocking by `Ractor#take` or `Ractor.yield`, closing outgoing port will raise an exception on these blocking ractors. + * When a Ractor is terminated, the Ractor's ports are closed. +* There are 3 ways to send an object as a message + * (1) Send a reference: Sending a shareable object, send only a reference to the object (fast) + * (2) Copy an object: Sending an unshareable object by copying an object deeply (slow). Note that you can not send an object which does not support deep copy. Some `T_DATA` objects are not supported. + * (3) Move an object: Sending an unshareable object reference with a membership. Sender Ractor can not access moved objects anymore (raise an exception) after moving it. Current implementation makes new object as a moved object for receiver Ractor and copies references of sending object to moved object. + * You can choose "Copy" and "Move" by the `move:` keyword, `Ractor#send(obj, move: true/false)` and `Ractor.yield(obj, move: true/false)` (default is `false` (COPY)). + +### Sending/Receiving ports + +Each Ractor has _incoming-port_ and _outgoing-port_. Incoming-port is connected to the infinite sized incoming queue. + +``` + Ractor r + +-------------------------------------------+ + | incoming outgoing | + | port port | + r.send(obj) ->*->[incoming queue] Ractor.yield(obj) ->*-> r.take + | | | + | v | + | Ractor.receive | + +-------------------------------------------+ + + +Connection example: r2.send obj on r1ã€Ractor.receive on r2 + +----+ +----+ + * r1 |---->* r2 * + +----+ +----+ + + +Connection example: Ractor.yield(obj) on r1, r1.take on r2 + +----+ +----+ + * r1 *---->- r2 * + +----+ +----+ + +Connection example: Ractor.yield(obj) on r1 and r2, + and waiting for both simultaneously by Ractor.select(r1, r2) + + +----+ + * r1 *------+ + +----+ | + +----> Ractor.select(r1, r2) + +----+ | + * r2 *------| + +----+ +``` + +```ruby +r = Ractor.new do + msg = Ractor.receive # Receive from r's incoming queue + msg # send back msg as block return value +end +r.send 'ok' # Send 'ok' to r's incoming port -> incoming queue +r.take # Receive from r's outgoing port +``` + +The last example shows the following ractor network. + +``` + + +------+ +---+ + * main |------> * r *---+ + +------+ +---+ | + ^ | + +-------------------+ +``` + +And this code can be simplified by using an argument for `Ractor.new`. + +```ruby +# Actual argument 'ok' for `Ractor.new()` will be sent to created Ractor. +r = Ractor.new 'ok' do |msg| + # Values for formal parameters will be received from incoming queue. + # Similar to: msg = Ractor.receive + + msg # Return value of the given block will be sent via outgoing port +end + +# receive from the r's outgoing port. +r.take #=> `ok` +``` + +### Return value of a block for `Ractor.new` + +As already explained, the return value of `Ractor.new` (an evaluated value of `expr` in `Ractor.new{ expr }`) can be taken by `Ractor#take`. + +```ruby +Ractor.new{ 42 }.take #=> 42 +``` + +When the block return value is available, the Ractor is dead so that no ractors except taken Ractor can touch the return value, so any values can be sent with this communication path without any modification. + +```ruby +r = Ractor.new do + a = "hello" + binding +end + +r.take.eval("p a") #=> "hello" (other communication path can not send a Binding object directly) +``` + +### Wait for multiple Ractors with `Ractor.select` + +You can wait multiple Ractor's `yield` with `Ractor.select(*ractors)`. +The return value of `Ractor.select()` is `[r, msg]` where `r` is yielding Ractor and `msg` is yielded message. + +Wait for a single ractor (same as `Ractor.take`): + +```ruby +r1 = Ractor.new{'r1'} + +r, obj = Ractor.select(r1) +r == r1 and obj == 'r1' #=> true +``` + +Wait for two ractors: + +```ruby +r1 = Ractor.new{'r1'} +r2 = Ractor.new{'r2'} +rs = [r1, r2] +as = [] + +# Wait for r1 or r2's Ractor.yield +r, obj = Ractor.select(*rs) +rs.delete(r) +as << obj + +# Second try (rs only contain not-closed ractors) +r, obj = Ractor.select(*rs) +rs.delete(r) +as << obj +as.sort == ['r1', 'r2'] #=> true +``` + +Complex example: + +```ruby +pipe = Ractor.new do + loop do + Ractor.yield Ractor.receive + end +end + +RN = 10 +rs = RN.times.map{|i| + Ractor.new pipe, i do |pipe, i| + msg = pipe.take + msg # ping-pong + end +} +RN.times{|i| + pipe << i +} +RN.times.map{ + r, n = Ractor.select(*rs) + rs.delete r + n +}.sort #=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] +``` + +Multiple Ractors can send to one Ractor. + +```ruby +# Create 10 ractors and they send objects to pipe ractor. +# pipe ractor yield received objects + +pipe = Ractor.new do + loop do + Ractor.yield Ractor.receive + end +end + +RN = 10 +rs = RN.times.map{|i| + Ractor.new pipe, i do |pipe, i| + pipe << i + end +} + +RN.times.map{ + pipe.take +}.sort #=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] +``` + +TODO: Current `Ractor.select()` has the same issue of `select(2)`, so this interface should be refined. + +TODO: `select` syntax of go-language uses round-robin technique to make fair scheduling. Now `Ractor.select()` doesn't use it. + +### Closing Ractor's ports + +* `Ractor#close_incoming/outgoing` close incoming/outgoing ports (similar to `Queue#close`). +* `Ractor#close_incoming` + * `r.send(obj) ` where `r`'s incoming port is closed, will raise an exception. + * When the incoming queue is empty and incoming port is closed, `Ractor.receive` raises an exception. If the incoming queue is not empty, it dequeues an object without exceptions. +* `Ractor#close_outgoing` + * `Ractor.yield` on a Ractor which closed the outgoing port, it will raise an exception. + * `Ractor#take` for a Ractor which closed the outgoing port, it will raise an exception. If `Ractor#take` is blocking, it will raise an exception. +* When a Ractor terminates, the ports are closed automatically. + * Return value of the Ractor's block will be yielded as `Ractor.yield(ret_val)`, even if the implementation terminates the based native thread. + +Example (try to take from closed Ractor): + +```ruby +r = Ractor.new do + 'finish' +end +r.take # success (will return 'finish') +begin + o = r.take # try to take from closed Ractor +rescue Ractor::ClosedError + 'ok' +else + "ng: #{o}" +end +``` + +Example (try to send to closed (terminated) Ractor): + +```ruby +r = Ractor.new do +end + +r.take # wait terminate + +begin + r.send(1) +rescue Ractor::ClosedError + 'ok' +else + 'ng' +end +``` + +When multiple Ractors are waiting for `Ractor.yield()`, `Ractor#close_outgoing` will cancel all blocking by raising an exception (`ClosedError`). + +### Send a message by copying + +`Ractor#send(obj)` or `Ractor.yield(obj)` copy `obj` deeply if `obj` is an unshareable object. + +```ruby +obj = 'str'.dup +r = Ractor.new obj do |msg| + # return received msg's object_id + msg.object_id +end + +obj.object_id == r.take #=> false +``` + +Some objects are not supported to copy the value, and raise an exception. + +```ruby +obj = Thread.new{} +begin + Ractor.new obj do |msg| + msg + end +rescue TypeError => e + e.message #=> # +else + 'ng' # unreachable here +end +``` + +### Send a message by moving + +`Ractor#send(obj, move: true)` or `Ractor.yield(obj, move: true)` move `obj` to the destination Ractor. +If the source Ractor touches the moved object (for example, call the method like `obj.foo()`), it will be an error. + +```ruby +# move with Ractor#send +r = Ractor.new do + obj = Ractor.receive + obj << ' world' +end + +str = 'hello' +r.send str, move: true +modified = r.take #=> 'hello world' + +# str is moved, and accessing str from this Ractor is prohibited + +begin + # Error because it touches moved str. + str << ' exception' # raise Ractor::MovedError +rescue Ractor::MovedError + modified #=> 'hello world' +else + raise 'unreachable' +end +``` + +```ruby +# move with Ractor.yield +r = Ractor.new do + obj = 'hello' + Ractor.yield obj, move: true + obj << 'world' # raise Ractor::MovedError +end + +str = r.take +begin + r.take +rescue Ractor::RemoteError + p str #=> "hello" +end +``` + +Some objects are not supported to move, and an exception will be raised. + +```ruby +r = Ractor.new do + Ractor.receive +end + +r.send(Thread.new{}, move: true) #=> allocator undefined for Thread (TypeError) +``` + +To achieve the access prohibition for moved objects, _class replacement_ technique is used to implement it. + +### Shareable objects + +The following objects are shareable. + +* Immutable objects + * Small integers, some symbols, `true`, `false`, `nil` (a.k.a. `SPECIAL_CONST_P()` objects in internal) + * Frozen native objects + * Numeric objects: `Float`, `Complex`, `Rational`, big integers (`T_BIGNUM` in internal) + * All Symbols. + * Frozen `String` and `Regexp` objects (their instance variables should refer only shareable objects) +* Class, Module objects (`T_CLASS`, `T_MODULE` and `T_ICLASS` in internal) +* `Ractor` and other special objects which care about synchronization. + +Implementation: Now shareable objects (`RVALUE`) have `FL_SHAREABLE` flag. This flag can be added lazily. + +To make shareable objects, `Ractor.make_shareable(obj)` method is provided. In this case, try to make sharaeble by freezing `obj` and recursively travasible objects. This method accepts `copy:` keyword (default value is false).`Ractor.make_shareable(obj, copy: true)` tries to make a deep copy of `obj` and make the copied object shareable. + +## Language changes to isolate unshareable objects between Ractors + +To isolate unshareable objects between Ractors, we introduced additional language semantics on multi-Ractor Ruby programs. + +Note that without using Ractors, these additional semantics is not needed (100% compatible with Ruby 2). + +### Global variables + +Only the main Ractor (a Ractor created at starting of interpreter) can access global variables. + +```ruby +$gv = 1 +r = Ractor.new do + $gv +end + +begin + r.take +rescue Ractor::RemoteError => e + e.cause.message #=> 'can not access global variables from non-main Ractors' +end +``` + +Note that some special global variables are ractor-local, like `$stdin`, `$stdout`, `$stderr`. See [[Bug #17268]](https://bugs.ruby-lang.org/issues/17268) for more details. + +### Instance variables of shareable objects + +Instance variables of classes/modules can be get from non-main Ractors if the referring values are shareable objects. + +```ruby +class C + @iv = 1 +end + +p Ractor.new do + class C + @iv + end +end.take #=> 1 +``` + +Otherwise, only the main Ractor can access instance variables of shareable objects. + +```ruby +class C + @iv = [] # unshareable object +end + +Ractor.new do + class C + begin + p @iv + rescue Ractor::IsolationError + p $!.message + #=> "can not get unshareable values from instance variables of classes/modules from non-main Ractors" + end + + begin + @iv = 42 + rescue Ractor::IsolationError + p $!.message + #=> "can not set instance variables of classes/modules by non-main Ractors" + end + end +end.take +``` + + + +```ruby +shared = Ractor.new{} +shared.instance_variable_set(:@iv, 'str') + +r = Ractor.new shared do |shared| + p shared.instance_variable_get(:@iv) +end + +begin + r.take +rescue Ractor::RemoteError => e + e.cause.message #=> can not access instance variables of shareable objects from non-main Ractors (Ractor::IsolationError) +end +``` + +Note that instance variables for class/module objects are also prohibited on Ractors. + +### Class variables + +Only the main Ractor can access class variables. + +```ruby +class C + @@cv = 'str' +end + +r = Ractor.new do + class C + p @@cv + end +end + + +begin + r.take +rescue => e + e.class #=> Ractor::IsolationError +end +``` + +### Constants + +Only the main Ractor can read constants which refer to the unshareable object. + +```ruby +class C + CONST = 'str' +end +r = Ractor.new do + C::CONST +end +begin + r.take +rescue => e + e.class #=> Ractor::IsolationError +end +``` + +Only the main Ractor can define constants which refer to the unshareable object. + +```ruby +class C +end +r = Ractor.new do + C::CONST = 'str' +end +begin + r.take +rescue => e + e.class #=> Ractor::IsolationError +end +``` + +To make multi-ractor supported library, the constants should only refer shareable objects. + +```ruby +TABLE = {a: 'ko1', b: 'ko2', c: 'ko3'} +``` + +In this case, `TABLE` references an unshareable Hash object. So that other ractors can not refer `TABLE` constant. To make it shareable, we can use `Ractor.make_shareable()` like that. + +```ruby +TABLE = Ractor.make_shareable( {a: 'ko1', b: 'ko2', c: 'ko3'} ) +``` + +To make it easy, Ruby 3.0 introduced new `shareable_constant_value` Directive. + +```ruby +# shareable_constant_value: literal + +TABLE = {a: 'ko1', b: 'ko2', c: 'ko3'} +#=> Same as: TABLE = Ractor.make_shareable( {a: 'ko1', b: 'ko2', c: 'ko3'} ) +``` + +`shareable_constant_value` directive accepts the following modes (descriptions use the example: `CONST = expr`): + +* none: Do nothing. Same as: `CONST = expr` +* literal: + * if `expr` is consites of literals, replaced to `CONST = Ractor.make_shareable(expr)`. + * otherwise: replaced to `CONST = expr.tap{|o| raise unless Ractor.shareable?}`. +* experimental_everything: replaced to `CONST = Ractor.make_shareable(expr)`. +* experimental_copy: replaced to `CONST = Ractor.make_shareable(expr, copy: true)`. + +Except the `none` mode (default), it is guaranteed that the assigned constants refer to only shareable objects. + +See [doc/syntax/comments.rdoc](syntax/comments.rdoc) for more details. + +## Implementation note + +* Each Ractor has its own thread, it means each Ractor has at least 1 native thread. +* Each Ractor has its own ID (`rb_ractor_t::pub::id`). + * On debug mode, all unshareable objects are labeled with current Ractor's id, and it is checked to detect unshareable object leak (access an object from different Ractor) in VM. + +## Examples + +### Traditional Ring example in Actor-model + +```ruby +RN = 1_000 +CR = Ractor.current + +r = Ractor.new do + p Ractor.receive + CR << :fin +end + +RN.times{ + r = Ractor.new r do |next_r| + next_r << Ractor.receive + end +} + +p :setup_ok +r << 1 +p Ractor.receive +``` + +### Fork-join + +```ruby +def fib n + if n < 2 + 1 + else + fib(n-2) + fib(n-1) + end +end + +RN = 10 +rs = (1..RN).map do |i| + Ractor.new i do |i| + [i, fib(i)] + end +end + +until rs.empty? + r, v = Ractor.select(*rs) + rs.delete r + p answer: v +end +``` + +### Worker pool + +```ruby +require 'prime' + +pipe = Ractor.new do + loop do + Ractor.yield Ractor.receive + end +end + +N = 1000 +RN = 10 +workers = (1..RN).map do + Ractor.new pipe do |pipe| + while n = pipe.take + Ractor.yield [n, n.prime?] + end + end +end + +(1..N).each{|i| + pipe << i +} + +pp (1..N).map{ + _r, (n, b) = Ractor.select(*workers) + [n, b] +}.sort_by{|(n, b)| n} +``` + +### Pipeline + +```ruby +# pipeline with yield/take +r1 = Ractor.new do + 'r1' +end + +r2 = Ractor.new r1 do |r1| + r1.take + 'r2' +end + +r3 = Ractor.new r2 do |r2| + r2.take + 'r3' +end + +p r3.take #=> 'r1r2r3' +``` + +```ruby +# pipeline with send/receive + +r3 = Ractor.new Ractor.current do |cr| + cr.send Ractor.receive + 'r3' +end + +r2 = Ractor.new r3 do |r3| + r3.send Ractor.receive + 'r2' +end + +r1 = Ractor.new r2 do |r2| + r2.send Ractor.receive + 'r1' +end + +r1 << 'r0' +p Ractor.receive #=> "r0r1r2r3" +``` + +### Supervise + +```ruby +# ring example again + +r = Ractor.current +(1..10).map{|i| + r = Ractor.new r, i do |r, i| + r.send Ractor.receive + "r#{i}" + end +} + +r.send "r0" +p Ractor.receive #=> "r0r10r9r8r7r6r5r4r3r2r1" +``` + +```ruby +# ring example with an error + +r = Ractor.current +rs = (1..10).map{|i| + r = Ractor.new r, i do |r, i| + loop do + msg = Ractor.receive + raise if /e/ =~ msg + r.send msg + "r#{i}" + end + end +} + +r.send "r0" +p Ractor.receive #=> "r0r10r9r8r7r6r5r4r3r2r1" +r.send "r0" +p Ractor.select(*rs, Ractor.current) #=> [:receive, "r0r10r9r8r7r6r5r4r3r2r1"] +r.send "e0" +p Ractor.select(*rs, Ractor.current) +#=> +# terminated with exception (report_on_exception is true): +Traceback (most recent call last): + 2: from /home/ko1/src/ruby/trunk/test.rb:7:in `block (2 levels) in
' + 1: from /home/ko1/src/ruby/trunk/test.rb:7:in `loop' +/home/ko1/src/ruby/trunk/test.rb:9:in `block (3 levels) in
': unhandled exception +Traceback (most recent call last): + 2: from /home/ko1/src/ruby/trunk/test.rb:7:in `block (2 levels) in
' + 1: from /home/ko1/src/ruby/trunk/test.rb:7:in `loop' +/home/ko1/src/ruby/trunk/test.rb:9:in `block (3 levels) in
': unhandled exception + 1: from /home/ko1/src/ruby/trunk/test.rb:21:in `
' +:69:in `select': thrown by remote Ractor. (Ractor::RemoteError) +``` + +```ruby +# resend non-error message + +r = Ractor.current +rs = (1..10).map{|i| + r = Ractor.new r, i do |r, i| + loop do + msg = Ractor.receive + raise if /e/ =~ msg + r.send msg + "r#{i}" + end + end +} + +r.send "r0" +p Ractor.receive #=> "r0r10r9r8r7r6r5r4r3r2r1" +r.send "r0" +p Ractor.select(*rs, Ractor.current) +[:receive, "r0r10r9r8r7r6r5r4r3r2r1"] +msg = 'e0' +begin + r.send msg + p Ractor.select(*rs, Ractor.current) +rescue Ractor::RemoteError + msg = 'r0' + retry +end + +#=> :100:in `send': The incoming-port is already closed (Ractor::ClosedError) +# because r == r[-1] is terminated. +``` + +```ruby +# ring example with supervisor and re-start + +def make_ractor r, i + Ractor.new r, i do |r, i| + loop do + msg = Ractor.receive + raise if /e/ =~ msg + r.send msg + "r#{i}" + end + end +end + +r = Ractor.current +rs = (1..10).map{|i| + r = make_ractor(r, i) +} + +msg = 'e0' # error causing message +begin + r.send msg + p Ractor.select(*rs, Ractor.current) +rescue Ractor::RemoteError + r = rs[-1] = make_ractor(rs[-2], rs.size-1) + msg = 'x0' + retry +end + +#=> [:receive, "x0r9r9r8r7r6r5r4r3r2r1"] +``` diff --git a/ruby/doc/regexp.rdoc b/ruby/doc/regexp.rdoc index d84cae177..23fe7113b 100644 --- a/ruby/doc/regexp.rdoc +++ b/ruby/doc/regexp.rdoc @@ -190,6 +190,8 @@ At least one uppercase character ('H'), at least one lowercase character "Hello".match(/[[:upper:]]+[[:lower:]]+l{2}o/) #=> # +=== Greedy match + Repetition is greedy by default: as many occurrences as possible are matched while still allowing the overall match to succeed. By contrast, lazy matching makes the minimal amount of matches @@ -206,21 +208,27 @@ Both patterns below match the string. The first uses a greedy quantifier so /<.+>/.match("") #=> #"> /<.+?>/.match("") #=> #"> +=== Possessive match + A quantifier followed by + matches possessively: once it has matched it does not backtrack. They behave like greedy quantifiers, but having matched they refuse to "give up" their match even if this jeopardises the overall match. + /<.*><.+>/.match("") #=> #"> + /<.*+><.+>/.match("") #=> nil + /<.*><.++>/.match("") #=> nil + == Capturing Parentheses can be used for capturing. The text enclosed by the -nth group of parentheses can be subsequently referred to +nth group of parentheses can be subsequently referred to with n. Within a pattern use the backreference -\n; outside of the pattern use -MatchData[n]. +\n (e.g. \1); outside of the pattern use +MatchData[n] (e.g. MatchData[1]). -'at' is captured by the first group of parentheses, then referred to later -with \1: +In this example, 'at' is captured by the first group of +parentheses, then referred to later with \1: /[csh](..) [csh]\1 in/.match("The cat sat in the hat") #=> # @@ -230,6 +238,23 @@ available with its #[] method: /[csh](..) [csh]\1 in/.match("The cat sat in the hat")[1] #=> 'at' +While Ruby supports an arbitrary number of numbered captured groups, +only groups 1-9 are supported using the \n backreference +syntax. + +Ruby also supports \0 as a special backreference, which +references the entire matched string. This is also available at +MatchData[0]. Note that the \0 backreference cannot +be used inside the regexp, as backreferences can only be used after the +end of the capture group, and the \0 backreference uses the +implicit capture group of the entire match. However, you can use +this backreference when doing substitution: + + "The cat sat in the hat".gsub(/[csh]at/, '\0s') + # => "The cats sats in the hats" + +=== Named captures + Capture groups can be referred to by name when defined with the (?<name>) or (?'name') constructs. @@ -362,8 +387,8 @@ then matches a literal ): == Alternation -The vertical bar metacharacter (|) combines two expressions into -a single one that matches either of the expressions. Each expression is an +The vertical bar metacharacter (|) combines several expressions into +a single one that matches any of the expressions. Each expression is an alternative. /\w(and|or)\w/.match("Feliformia") #=> # @@ -514,6 +539,17 @@ characters, anchoring the match to a specific position. * (?pat) - Negative lookbehind assertion: ensures that the preceding characters do not match pat, but doesn't include those characters in the matched text +* \K - Uses an positive lookbehind of the content preceding + \K in the regexp. For example, the following two regexps are + almost equivalent: + + /ab\Kc/ + /(?<=ab)c/ + + As are the following two regexps: + + /(a)\K(b)\Kc/ + /(?<=(?<=(a))(b))c/ If a pattern isn't anchored it can begin at any point in the string: diff --git a/ruby/doc/standard_library.rdoc b/ruby/doc/standard_library.rdoc index f71cedebf..1d3580163 100644 --- a/ruby/doc/standard_library.rdoc +++ b/ruby/doc/standard_library.rdoc @@ -8,105 +8,91 @@ description. == Libraries -Abbrev:: Calculates a set of unique abbreviations for a given set of strings -Base64:: Support for encoding and decoding binary data using a Base64 representation -DEBUGGER__:: Debugging functionality for Ruby -DRb:: Distributed object system for Ruby -English.rb:: Require 'English.rb' to reference global variables with less cryptic names -ERB:: An easy to use but powerful templating system for Ruby -Find:: This module supports top-down traversal of a set of file paths MakeMakefile:: Module used to generate a Makefile for C extensions -Monitor:: Provides an object or module to use safely by more than one thread -Net::FTP:: Support for the File Transfer Protocol -Net::HTTP:: HTTP client api for Ruby -Net::IMAP:: Ruby client api for Internet Message Access Protocol -OpenURI:: An easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP -OptionParser:: Ruby-oriented class for command-line option analysis -PP:: Provides a PrettyPrinter for Ruby objects -PrettyPrinter:: Implements a pretty printing algorithm for readable structure RbConfig:: Information of your configure and build of Ruby -resolv-replace.rb:: Replace Socket DNS with Resolv -Resolv:: Thread-aware DNS resolver library in Ruby -Rinda:: The Linda distributed computing paradigm in Ruby Gem:: Package management framework for Ruby -SecureRandom:: Interface for secure random number generator -Set:: Provides a class to deal with collections of unordered, unique values -Shellwords:: Manipulates strings with word parsing rules of UNIX Bourne shell -Tempfile:: A utility class for managing temporary files -Time:: Extends the Time class with methods for parsing and conversion -tmpdir.rb:: Extends the Dir class to manage the OS temporary file path -TSort:: Topological sorting using Tarjan's algorithm -un.rb:: Utilities to replace common UNIX commands -WeakRef:: Allows a referenced object to be garbage-collected == Extensions Coverage:: Provides coverage measurement for Ruby -Digest:: Provides a framework for message digest libraries -IO:: Extensions for Ruby IO class, including #wait and ::console -NKF:: Ruby extension for Network Kanji Filter +Monitor:: Provides an object or module to use safely by more than one thread objspace:: Extends ObjectSpace module to add methods for internal statistics -Pathname:: Representation of the name of a file or directory on the filesystem PTY:: Creates and manages pseudo terminals Ripper:: Provides an interface for parsing Ruby programs into S-expressions Socket:: Access underlying OS socket implementations -Syslog:: Ruby interface for the POSIX system logging facility -WIN32OLE:: Provides an interface for OLE Automation in Ruby = Default gems == Libraries +Abbrev:: Calculates a set of unique abbreviations for a given set of strings +Base64:: Support for encoding and decoding binary data using a Base64 representation Benchmark:: Provides methods to measure and report the time used to execute code Bundler:: Manage your Ruby application's gem dependencies CGI:: Support for the Common Gateway Interface protocol CSV:: Provides an interface to read and write CSV files and data +DEBUGGER__:: Debugging functionality for Ruby Delegator:: Provides three abilities to delegate method calls to an object DidYouMean:: "Did you mean?" experience in Ruby +DRb:: Distributed object system for Ruby +English:: Provides references to special global variables with less cryptic names +ERB:: An easy to use but powerful templating system for Ruby FileUtils:: Several file utility methods for copying, moving, removing, etc +Find:: This module supports top-down traversal of a set of file paths Forwardable:: Provides delegation of specified methods to a designated object GetoptLong:: Parse command line options similar to the GNU C getopt_long() IPAddr:: Provides methods to manipulate IPv4 and IPv6 IP addresses IRB:: Interactive Ruby command-line tool for REPL (Read Eval Print Loop) +OptionParser:: Ruby-oriented class for command-line option analysis Logger:: Provides a simple logging utility for outputting messages -Matrix:: Represents a mathematical matrix. Mutex_m:: Mixin to extend objects to be handled like a Mutex -Net::POP3:: Ruby client library for POP3 -Net::SMTP:: Simple Mail Transfer Protocol client library for Ruby +Net::HTTP:: HTTP client api for Ruby Observable:: Provides a mechanism for publish/subscribe pattern in Ruby Open3:: Provides access to stdin, stdout and stderr when running other programs OpenStruct:: Class to build custom data structures, similar to a Hash -Prime:: Prime numbers and factorization library +OpenURI:: An easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP +PP:: Provides a PrettyPrinter for Ruby objects +PrettyPrinter:: Implements a pretty printing algorithm for readable structure PStore:: Implements a file based persistence mechanism based on a Hash -Racc:: A LALR(1) parser generator written in Ruby. +Resolv:: Thread-aware DNS resolver library in Ruby +resolv-replace.rb:: Replace Socket DNS with Resolv RDoc:: Produces HTML and command-line documentation for Ruby -REXML:: An XML toolkit for Ruby -RSS:: Family of libraries that support various formats of XML "feeds" +Rinda:: The Linda distributed computing paradigm in Ruby +SecureRandom:: Interface for secure random number generator +Set:: Provides a class to deal with collections of unordered, unique values +Shellwords:: Manipulates strings with word parsing rules of UNIX Bourne shell Singleton:: Implementation of the Singleton pattern for Ruby +Tempfile:: A utility class for managing temporary files +Time:: Extends the Time class with methods for parsing and conversion Timeout:: Auto-terminate potentially long-running operations in Ruby -Tracer:: Outputs a source level execution trace of a Ruby program +tmpdir.rb:: Extends the Dir class to manage the OS temporary file path +TSort:: Topological sorting using Tarjan's algorithm +un.rb:: Utilities to replace common UNIX commands URI:: A Ruby module providing support for Uniform Resource Identifiers -WEBrick:: An HTTP server toolkit for Ruby YAML:: Ruby client library for the Psych YAML implementation +WeakRef:: Allows a referenced object to be garbage-collected == Extensions BigDecimal:: Provides arbitrary-precision floating point decimal arithmetic Date:: A subclass of Object includes Comparable module for handling dates DateTime:: Subclass of Date to handling dates, hours, minutes, seconds, offsets -DBM:: Provides a wrapper for the UNIX-style Database Manager Library +Digest:: Provides a framework for message digest libraries Etc:: Provides access to information typically stored in UNIX /etc directory Fcntl:: Loads constants defined in the OS fcntl.h C header file Fiddle:: A libffi wrapper for Ruby -GDBM:: Ruby extension for the GNU dbm (gdbm) library -IO::console:: Console interface +IO:: Extensions for Ruby IO class, including #wait, #nonblock and ::console JSON:: Implements Javascript Object Notation for Ruby +NKF:: Ruby extension for Network Kanji Filter OpenSSL:: Provides SSL, TLS and general purpose cryptography for Ruby +Pathname:: Representation of the name of a file or directory on the filesystem Psych:: A YAML parser and emitter for Ruby +Racc:: A LALR(1) parser generator written in Ruby. Readline:: Provides an interface for GNU Readline and Edit Line (libedit) -SDBM:: Provides a simple file-based key-value store with String keys and values StringIO:: Pseudo I/O on String objects StringScanner:: Provides lexical scanning operations on a String +Syslog:: Ruby interface for the POSIX system logging facility +WIN32OLE:: Provides an interface for OLE Automation in Ruby Zlib:: Ruby interface for the zlib compression/decompression library = Bundled gems @@ -114,8 +100,16 @@ Zlib:: Ruby interface for the zlib compression/decompression library == Libraries MiniTest:: A test suite with TDD, BDD, mocking and benchmarking -Net::Telnet:: Telnet client library for Ruby PowerAssert:: Power Assert for Ruby. Rake:: Ruby build program with capabilities similar to make Test::Unit:: A compatibility layer for MiniTest -XMLRPC:: Remote Procedure Call over HTTP support for Ruby +REXML:: An XML toolkit for Ruby +RSS:: Family of libraries that support various formats of XML "feeds" +Net::FTP:: Support for the File Transfer Protocol +Net::IMAP:: Ruby client api for Internet Message Access Protocol +Net::POP3:: Ruby client library for POP3 +Net::SMTP:: Simple Mail Transfer Protocol client library for Ruby +Matrix:: Represents a mathematical matrix. +Prime:: Prime numbers and factorization library +RBS:: RBS is a language to describe the structure of Ruby programs +TypeProf:: A type analysis tool for Ruby code based on abstract interpretation diff --git a/ruby/doc/syntax.rdoc b/ruby/doc/syntax.rdoc index 2463c12a6..5895673f3 100644 --- a/ruby/doc/syntax.rdoc +++ b/ruby/doc/syntax.rdoc @@ -11,6 +11,9 @@ Assignment[rdoc-ref:syntax/assignment.rdoc] :: {Control Expressions}[rdoc-ref:syntax/control_expressions.rdoc] :: +if+, +unless+, +while+, +until+, +for+, +break+, +next+, +redo+ +{Pattern matching}[rdoc-ref:syntax/pattern_matching.rdoc] :: + Experimental structural pattern matching and variable binding syntax + Methods[rdoc-ref:syntax/methods.rdoc] :: Method and method argument syntax @@ -27,7 +30,7 @@ Precedence[rdoc-ref:syntax/precedence.rdoc] :: Precedence of ruby operators Refinements[rdoc-ref:syntax/refinements.rdoc] :: - Use and behavior of the experimental refinements feature + Use and behavior of the refinements feature Miscellaneous[rdoc-ref:syntax/miscellaneous.rdoc] :: +alias+, +undef+, +BEGIN+, +END+ diff --git a/ruby/doc/syntax/calling_methods.rdoc b/ruby/doc/syntax/calling_methods.rdoc index 5abecc69d..da061dbfd 100644 --- a/ruby/doc/syntax/calling_methods.rdoc +++ b/ruby/doc/syntax/calling_methods.rdoc @@ -30,7 +30,41 @@ NoMethodError. You may also use :: to designate a receiver, but this is rarely used due to the potential for confusion with :: for namespaces. -=== Safe navigation operator +=== Chaining \Method Calls + +You can "chain" method calls by immediately following one method call with another. + +This example chains methods Array#append and Array#compact: + + a = [:foo, 'bar', 2] + a1 = [:baz, nil, :bam, nil] + a2 = a.append(*a1).compact + a2 # => [:foo, "bar", 2, :baz, :bam] + +Details: + +- First method merge creates a copy of a, + appends (separately) each element of a1 to the copy, and returns + [:foo, "bar", 2, :baz, nil, :bam, nil] +- Chained method compact creates a copy of that return value, + removes its nil-valued entries, and returns + [:foo, "bar", 2, :baz, :bam] + +You can chain methods that are in different classes. +This example chains methods Hash#to_a and Array#reverse: + + h = {foo: 0, bar: 1, baz: 2} + h.to_a.reverse # => [[:baz, 2], [:bar, 1], [:foo, 0]] + +Details: + +- First method Hash#to_a converts a to an \Array, and returns + [[:foo, 0], [:bar, 1], [:baz, 2]] +- Chained method Array#reverse creates copy of that return value, + reverses it, and returns + [[:baz, 2], [:bar, 1], [:foo, 0]] + +=== Safe Navigation Operator &., called "safe navigation operator", allows to skip method call when receiver is +nil+. It returns +nil+ and doesn't evaluate method's arguments @@ -176,6 +210,24 @@ definition. If a keyword argument is given that the method did not list, and the method definition does not accept arbitrary keyword arguments, an ArgumentError will be raised. +Keyword argument value can be omitted, meaning the value will be be fetched +from the context by the name of the key + + keyword1 = 'some value' + my_method(positional1, keyword1:) + # ...is the same as + my_method(positional1, keyword1: keyword1) + +Be aware that when method parenthesis are omitted, too, the parsing order might +be unexpected: + + my_method positional1, keyword1: + + some_other_expression + + # ...is actually parsed as + my_method(positional1, keyword1: some_other_expression) + === Block Argument The block argument sends a closure from the calling scope to the method. diff --git a/ruby/doc/syntax/comments.rdoc b/ruby/doc/syntax/comments.rdoc index a07dd4149..dbc781698 100644 --- a/ruby/doc/syntax/comments.rdoc +++ b/ruby/doc/syntax/comments.rdoc @@ -35,3 +35,219 @@ syntax error: Will not work =end end + +== Magic Comments + +While comments are typically ignored by Ruby, special "magic comments" contain +directives that affect how the code is interpreted. + +Top-level magic comments must appear in the first comment section of a file. + +NOTE: Magic comments affect only the file in which they appear; +other files are unaffected. + + # frozen_string_literal: true + + var = 'hello' + var.frozen? # => true + +=== Alternative syntax + +Magic comments may consist of a single directive (as in the example above). +Alternatively, multiple directives may appear on the same line if separated by ";" +and wrapped between "-*-" (see Emacs' {file variables}[https://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html]). + + # emacs-compatible; -*- coding: big5; mode: ruby; frozen_string_literal: true -*- + + p 'hello'.frozen? # => true + p 'hello'.encoding # => # + +=== +encoding+ Directive + +Indicates which string encoding should be used for string literals, +regexp literals and __ENCODING__: + + # encoding: big5 + + ''.encoding # => # + +Default encoding is UTF-8. + +Top-level magic comments must start on the first line, or on the second line if +the first line looks like #! shebang line. + +The word "coding" may be used instead of "encoding". + +=== +frozen_string_literal+ Directive + +Indicates that string literals should be allocated once at parse time and frozen. + + # frozen_string_literal: true + + 3.times do + p 'hello'.object_id # => prints same number + end + p 'world'.frozen? # => true + +The default is false; this can be changed with --enable=frozen-string-literal. +Without the directive, or with # frozen_string_literal: false, +the example above would print 3 different numbers and "false". + +Starting in Ruby 3.0, string literals that are dynamic are not frozen nor reused: + + # frozen_string_literal: true + + p "Addition: #{2 + 2}".frozen? # => false + +It must appear in the first comment section of a file. + +=== +warn_indent+ Directive + +This directive can turn on detection of bad indentation for statements that follow it: + + def foo + end # => no warning + + # warn_indent: true + def bar + end # => warning: mismatched indentations at 'end' with 'def' at 6 + +Another way to get these warnings to show is by running Ruby with warnings (ruby -w). Using a directive to set this false will prevent these warnings to show. + +=== +shareable_constant_value+ Directive + +Note: This directive is experimental in Ruby 3.0 and may change in future releases. + +This special directive helps to create constants that hold only immutable objects, or {Ractor-shareable}[rdoc-ref:Ractor@Shareable+and+unshareable+objects] constants. + +The directive can specify special treatment for values assigned to constants: + +* +none+: (default) +* +literal+: literals are implicitly frozen, others must be Ractor-shareable +* +experimental_everything+: all made shareable +* +experimental_copy+: copy deeply and make it shareable + +==== Mode +none+ (default) + +No special treatment in this mode (as in Ruby 2.x): no automatic freezing and no checks. + +It has always been a good idea to deep-freeze constants; Ractor makes this +an even better idea as only the main ractor can access non-shareable constants: + + # shareable_constant_value: none + A = {foo: []} + A.frozen? # => false + Ractor.new { puts A } # => can not access non-shareable objects by non-main Ractor. + +==== Mode +literal+ + +In "literal" mode, constants assigned to literals will be deeply-frozen: + + # shareable_constant_value: literal + X = [{foo: []}] # => same as [{foo: [].freeze}.freeze].freeze + +Other values must be shareable: + + # shareable_constant_value: literal + X = Object.new # => cannot assign unshareable object to X + +Note that only literals directly assigned to constants, or recursively held in such literals will be frozen: + + # shareable_constant_value: literal + var = [{foo: []}] + var.frozen? # => false (assignment was made to local variable) + X = var # => cannot assign unshareable object to X + + X = Set[1, 2, {foo: []}].freeze # => cannot assign unshareable object to X + # (`Set[...]` is not a literal and + # `{foo: []}` is an argument to `Set.[]`) + +The method Module#const_set is not affected. + +==== Mode +experimental_everything+ + +In this mode, all values assigned to constants are made shareable. + + # shareable_constant_value: experimental_everything + FOO = Set[1, 2, {foo: []}] + # same as FOO = Ractor.make_sharable(...) + # OR same as `FOO = Set[1, 2, {foo: [].freeze}.freeze].freeze` + + var = [{foo: []}] + var.frozen? # => false (assignment was made to local variable) + X = var # => calls `Ractor.make_shareable(var)` + var.frozen? # => true + +This mode is "experimental", because it might be error prone, for +example by deep-freezing the constants of an external resource which +could cause errors: + + # shareable_constant_value: experimental_everything + FOO = SomeGem::Something::FOO + # => deep freezes the gem's constant! + +This will be revisited before Ruby 3.1 to either allow `everything` +or to instead remove this mode. + +The method Module#const_set is not affected. + +==== Mode +experimental_copy+ + +In this mode, all values assigned to constants are deeply copied and +made shareable. It is safer mode than +experimental_everything+. + + # shareable_constant_value: experimental_everything + var = [{foo: []}] + var.frozen? # => false (assignment was made to local variable) + X = var # => calls `Ractor.make_shareable(var, copy: true)` + var.frozen? # => false + Ractor.shareable?(X) #=> true + var.object_id == X.object_id #=> false + +This mode is "experimental" and has not been discussed thoroughly. +This will be revisited before Ruby 3.1 to either allow `copy` +or to instead remove this mode. + +The method Module#const_set is not affected. + +==== Scope + +This directive can be used multiple times in the same file: + + # shareable_constant_value: none + A = {foo: []} + A.frozen? # => false + Ractor.new { puts A } # => can not access non-shareable objects by non-main Ractor. + + # shareable_constant_value: literal + B = {foo: []} + B.frozen? # => true + B[:foo].frozen? # => true + + C = [Object.new] # => cannot assign unshareable object to C (Ractor::IsolationError) + + D = [Object.new.freeze] + D.frozen? # => true + + # shareable_constant_value: experimental_everything + E = Set[1, 2, Object.new] + E.frozen? # => true + E.all(&:frozen?) # => true + +The directive affects only subsequent constants and only for the current scope: + + module Mod + # shareable_constant_value: literal + A = [1, 2, 3] + module Sub + B = [4, 5] + end + end + + C = [4, 5] + + module Mod + D = [6] + end + p Mod::A.frozen?, Mod::Sub::B.frozen? # => true, true + p C.frozen?, Mod::D.frozen? # => false, false diff --git a/ruby/doc/syntax/control_expressions.rdoc b/ruby/doc/syntax/control_expressions.rdoc index f7e6d5492..e91b03e72 100644 --- a/ruby/doc/syntax/control_expressions.rdoc +++ b/ruby/doc/syntax/control_expressions.rdoc @@ -232,7 +232,7 @@ You may use +then+ after the +when+ condition. This is most frequently used to place the body of the +when+ on a single line. case a - when 1, 2 then puts "a is one or two + when 1, 2 then puts "a is one or two" when 3 then puts "a is three" else puts "I don't know what a is" end @@ -255,6 +255,20 @@ Again, the +then+ and +else+ are optional. The result value of a +case+ expression is the last value executed in the expression. +Since Ruby 2.7, +case+ expressions also provide a more powerful experimental +pattern matching feature via the +in+ keyword: + + case {a: 1, b: 2, c: 3} + in a: Integer => m + "matched: #{m}" + else + "not matched" + end + # => "matched: 1" + +The pattern matching syntax is described on +{its own page}[rdoc-ref:syntax/pattern_matching.rdoc]. + == +while+ Loop The +while+ loop executes while a condition is true: diff --git a/ruby/doc/syntax/literals.rdoc b/ruby/doc/syntax/literals.rdoc index 38bfa3867..32fe5110c 100644 --- a/ruby/doc/syntax/literals.rdoc +++ b/ruby/doc/syntax/literals.rdoc @@ -2,17 +2,33 @@ Literals create objects you can use in your program. Literals include: -* Booleans and nil -* Numbers -* Strings -* Symbols -* Arrays -* Hashes -* Ranges -* Regular Expressions -* Procs - -== Booleans and nil +* {Boolean and Nil Literals}[#label-Boolean+and+Nil+Literals] +* {Number Literals}[#label-Number+Literals] + + * {Integer Literals}[#label-Integer+Literals] + * {Float Literals}[#label-Float+Literals] + * {Rational Literals}[#label-Rational+Literals] + * {Complex Literals}[#label-Complex+Literals] + +* {String Literals}[#label-String+Literals] +* {Here Document Literals}[#label-Here+Document+Literals] +* {Symbol Literals}[#label-Symbol+Literals] +* {Array Literals}[#label-Array+Literals] +* {Hash Literals}[#label-Hash+Literals] +* {Range Literals}[#label-Range+Literals] +* {Regexp Literals}[#label-Regexp+Literals] +* {Lambda Proc Literals}[#label-Lambda+Proc+Literals] +* {Percent Literals}[#label-Percent+Literals] + + * {%q: Non-Interpolable String Literals}[#label-25q-3A+Non-Interpolable+String+Literals] + * {% and %Q: Interpolable String Literals}[#label-25+and+-25Q-3A+Interpolable+String+Literals] + * {%w and %W: String-Array Literals}[#label-25w+and+-25W-3A+String-Array+Literals] + * {%i and %I: Symbol-Array Literals}[#label-25i+and+-25I-3A+Symbol-Array+Literals] + * {%r: Regexp Literals}[#label-25r-3A+Regexp+Literals] + * {%s: Symbol Literals}[#label-25s-3A+Symbol+Literals] + * {%x: Backtick Literals}[#label-25x-3A+Backtick+Literals] + +== Boolean and Nil Literals +nil+ and +false+ are both false values. +nil+ is sometimes used to indicate "no value" or "unknown" but evaluates to +false+ in conditional expressions. @@ -20,10 +36,9 @@ Literals create objects you can use in your program. Literals include: +true+ is a true value. All objects except +nil+ and +false+ evaluate to a true value in conditional expressions. -(There are also the constants +TRUE+, +FALSE+ and +NIL+, but the lowercase -literal forms are preferred.) +== Number Literals -== Numbers +=== \Integer Literals You can write integers of any size as follows: @@ -34,15 +49,6 @@ These numbers have the same value, 1,234. The underscore may be used to enhance readability for humans. You may place an underscore anywhere in the number. -Floating point numbers may be written as follows: - - 12.34 - 1234e-2 - 1.234E1 - -These numbers have the same value, 12.34. You may use underscores in floating -point numbers as well. - You can use a special prefix to write numbers in decimal, hexadecimal, octal or binary formats. For decimal numbers use a prefix of 0d, for hexadecimal numbers use a prefix of 0x, for octal numbers use a @@ -71,35 +77,48 @@ Examples: All these numbers have the same decimal value, 170. Like integers and floats you may use an underscore for readability. -=== Rational numbers +=== \Float Literals + +Floating-point numbers may be written as follows: + + 12.34 + 1234e-2 + 1.234E1 + +These numbers have the same value, 12.34. You may use underscores in floating +point numbers as well. + +=== \Rational Literals -Numbers suffixed by +r+ are Rational numbers. +You can write a Rational number as follows (suffixed +r+): 12r #=> (12/1) 12.3r #=> (123/10) -Rational numbers are exact, whereas Float numbers are inexact. +A \Rational number is exact, whereas a \Float number may be inexact. 0.1r + 0.2r #=> (3/10) 0.1 + 0.2 #=> 0.30000000000000004 -=== Complex numbers +=== \Complex Literals -Numbers suffixed by +i+ are Complex (or imaginary) numbers. +You can write a Complex number as follows (suffixed +i+): 1i #=> (0+1i) 1i * 1i #=> (-1+0i) -Also Rational numbers may be imaginary numbers. +Also \Rational numbers may be imaginary numbers. 12.3ri #=> (0+(123/10)*i) -+i+ must be placed after +r+, the opposite is not allowed. ++i+ must be placed after +r+; the opposite is not allowed. - 12.3ir #=> syntax error + 12.3ir #=> Syntax error == Strings +=== \String Literals + The most common way of writing strings is using ": "This is a string." @@ -146,6 +165,10 @@ Double-quote strings allow interpolation of other values using Any expression may be placed inside the interpolated section, but it's best to keep the expression small for readability. +You can also use #@foo, #@@foo and #$foo as a +shorthand for, respectively, #{ @foo }, #{ @@foo } and +#{ $foo }. + Interpolation may be disabled by escaping the "#" character or using single-quote strings: @@ -155,15 +178,6 @@ In addition to disabling interpolation, single-quoted strings also disable all escape sequences except for the single-quote (\') and backslash (\\\\). -You may also create strings using %: - - %(1 + 1 is #{1 + 1}) #=> "1 + 1 is 2" - -There are two different types of % strings %q(...) behaves -like a single-quote string (no interpolation or character escaping), while -%Q behaves as a double-quote string. See Percent Strings below for -more discussion of the syntax of percent strings. - Adjacent string literals are automatically concatenated by the interpreter: "con" "cat" "en" "at" "ion" #=> "concatenation" @@ -193,7 +207,12 @@ a single codepoint in the script encoding: ?\C-\M-a #=> "\x81", same as above ?ã‚ #=> "ã‚" -=== Here Documents (heredocs) +See also: + +* {%q: Non-Interpolable String Literals}[#label-25q-3A+Non-Interpolable+String+Literals] +* {% and %Q: Interpolable String Literals}[#label-25+and+-25Q-3A+Interpolable+String+Literals] + +=== Here Document Literals If you are writing a large block of text you may use a "here document" or "heredoc": @@ -219,7 +238,7 @@ You may indent the ending identifier if you place a "-" after <<: That might span many lines INDENTED_HEREDOC -Note that the while the closing identifier may be indented, the content is +Note that while the closing identifier may be indented, the content is always treated as if it is flush left. If you indent the content those spaces will appear in the output. @@ -273,7 +292,7 @@ read: content for heredoc two TWO -== Symbols +== \Symbol Literals A Symbol represents a name inside the ruby interpreter. See Symbol for more details on what symbols are and when ruby creates them internally. @@ -292,7 +311,12 @@ Like strings, a single-quote may be used to disable interpolation: When creating a Hash, there is a special syntax for referencing a Symbol as well. -== Arrays +See also: + +* {%s: Symbol Literals}[#label-25s-3A+Symbol+Literals] + + +== \Array Literals An array is created using the objects between [ and ]: @@ -303,9 +327,14 @@ You may place expressions inside the array: [1, 1 + 1, 1 + 2] [1, [1 + 1, [1 + 2]]] +See also: + +* {%w and %W: String-Array Literals}[#label-25w+and+-25W-3A+String-Array+Literals] +* {%i and %I: Symbol-Array Literals}[#label-25i+and+-25I-3A+Symbol-Array+Literals] + See Array for the methods you may use with an array. -== Hashes +== \Hash Literals A hash is created using key-value pairs between { and }: @@ -327,9 +356,17 @@ is equal to { :"a 1" => 1, :"b 2" => 2 } +Hash values can be omitted, meaning that value will be fetched from the context +by the name of the key: + + x = 100 + y = 200 + h = { x:, y: } + #=> {:x=>100, :y=>200} + See Hash for the methods you may use with a hash. -== Ranges +== \Range Literals A range represents an interval of values. The range may include or exclude its ending value. @@ -342,7 +379,7 @@ its ending value. You may create a range of any object. See the Range documentation for details on the methods you need to implement. -== Regular Expressions +== \Regexp Literals A regular expression is created using "/": @@ -358,11 +395,15 @@ Interpolation may be used inside regular expressions along with escaped characters. Note that a regular expression may require additional escaped characters than a string. +See also: + +* {%r: Regexp Literals}[#label-25r-3A+Regexp+Literals] + See Regexp for a description of the syntax of regular expressions. -== Procs +== Lambda Proc Literals -A proc can be created with ->: +A lambda proc can be created with ->: -> { 1 + 1 } @@ -374,27 +415,83 @@ You can require arguments for the proc as follows: This proc will add one to its argument. -== Percent Strings +== Percent Literals + +Each of the literals in described in this section +may use these paired delimiters: + +* [ and ]. +* ( and ). +* { and }. +* < and >. +* Any other character, as both beginning and ending delimiters. + +These are demonstrated in the next section. + +=== %q: Non-Interpolable String Literals + +You can write a non-interpolable string with %q. +The created string is the same as if you created it with single quotes: + + %[foo bar baz] # => "foo bar baz" # Using []. + %(foo bar baz) # => "foo bar baz" # Using (). + %{foo bar baz} # => "foo bar baz" # Using {}. + % # => "foo bar baz" # Using <>. + %|foo bar baz| # => "foo bar baz" # Using two |. + %:foo bar baz: # => "foo bar baz" # Using two :. + %q(1 + 1 is #{1 + 1}) # => "1 + 1 is \#{1 + 1}" # No interpolation. + +=== % and %Q: Interpolable String Literals + +You can write an interpolable string with %Q +or with its alias %: + + %[foo bar baz] # => "foo bar baz" + %(1 + 1 is #{1 + 1}) # => "1 + 1 is 2" # Interpolation. + +=== %w and %W: String-Array Literals + +You can write an array of strings with %w (non-interpolable) +or %W (interpolable): + + %w[foo bar baz] # => ["foo", "bar", "baz"] + %w[1 % *] # => ["1", "%", "*"] + # Use backslash to embed spaces in the strings. + %w[foo\ bar baz\ bat] # => ["foo bar", "baz bat"] + %w(#{1 + 1}) # => ["\#{1", "+", "1}"] + %W(#{1 + 1}) # => ["2"] + +=== %i and %I: Symbol-Array Literals + +You can write an array of symbols with %i (non-interpolable) +or %I (interpolable): + + %i[foo bar baz] # => [:foo, :bar, :baz] + %i[1 % *] # => [:"1", :%, :*] + # Use backslash to embed spaces in the symbols. + %i[foo\ bar baz\ bat] # => [:"foo bar", :"baz bat"] + %i(#{1 + 1}) # => [:"\#{1", :+, :"1}"] + %I(#{1 + 1}) # => [:"2"] + +=== %s: Symbol Literals + +You can write a symbol with %s: + + %s[foo] # => :foo + %s[foo bar] # => :"foo bar" + +=== %r: Regexp Literals -Besides %(...) which creates a String, the % may create -other types of object. As with strings, an uppercase letter allows -interpolation and escaped characters while a lowercase letter disables them. +You can write a regular expression with %r: -These are the types of percent strings in ruby: + r = %r[foo\sbar] # => /foo\sbar/ + 'foo bar'.match(r) # => # + r = %r[foo\sbar]i # => /foo\sbar/i + 'FOO BAR'.match(r) # => # -%i :: Array of Symbols -%q :: String -%r :: Regular Expression -%s :: Symbol -%w :: Array of Strings -%x :: Backtick (capture subshell result) -For the two array forms of percent string, if you wish to include a space in -one of the array entries you must escape it with a "\\" character: +=== %x: Backtick Literals - %w[one one-hundred\ one] - #=> ["one", "one-hundred one"] +You can write and execute a shell command with %x: -If you are using "(", "[", "{", "<" you must close it with ")", "]", "}", ">" -respectively. You may use most other non-alphanumeric characters for percent -string delimiters such as "%", "|", "^", etc. + %x(echo 1) # => "1\n" diff --git a/ruby/doc/syntax/methods.rdoc b/ruby/doc/syntax/methods.rdoc index c11bd449b..2bb350def 100644 --- a/ruby/doc/syntax/methods.rdoc +++ b/ruby/doc/syntax/methods.rdoc @@ -11,6 +11,11 @@ A method definition consists of the +def+ keyword, a method name, the body of the method, +return+ value and the +end+ keyword. When called the method will execute the body of the method. This method returns +2+. +Since Ruby 3.0, there is also a shorthand syntax for methods consisting +of exactly one expression: + + def one_plus_one = 1 + 1 + This section only covers defining methods. See also the {syntax documentation on calling methods}[rdoc-ref:syntax/calling_methods.rdoc]. @@ -64,6 +69,23 @@ object to indicate a true value (or "truthy" value). Methods that end with an equals sign indicate an assignment method. + class C + def attr + @attr + end + + def attr=(val) + @attr = val + end + end + + c = C.new + c.attr #=> nil + c.attr = 10 # calls "attr=(10)" + c.attr #=> 10 + +Assignment methods can not be defined using the shorthand syntax. + These are method names for the various Ruby operators. Each of these operators accepts only one argument. Following the operator is the typical use or name of the operator. Creating an alternate meaning for the operator @@ -258,6 +280,13 @@ The parentheses around the arguments are optional: value + 1 end +The parentheses are mandatory in shorthand method definitions: + + # OK + def add_one(value) = value + 1 + # SyntaxError + def add_one value = value + 1 + Multiple arguments are separated by a comma: def add_values(a, b) @@ -389,8 +418,8 @@ It is possible to gather arguments at the beginning or in the middle: gather_arguments 1, 2, 3, 4 # prints [2, 3] -The array argument will capture a Hash as the last entry if a hash was sent by -the caller after all positional arguments. +The array argument will capture a Hash as the last entry if keywords were +provided by the caller after all positional arguments. def gather_arguments(*arguments) p arguments @@ -462,107 +491,105 @@ Calling such a method with keywords or a non-empty keyword splat will result in an ArgumentError. This syntax is supported so that keywords can be added to the method later without affected backwards compatibility. -=== Keyword and Positional Argument Separation - -Between Ruby 2.0 and 2.6, keyword and positional arguments were not -separated, and a keyword argument could be used as a positional argument -and vice-versa. In Ruby 3.0, keyword and positional arguments will -be separated if the method definition includes keyword arguments. -In Ruby 3.0, if the method definition does not include keyword arguments, -keyword arguments provided when calling the method will continue to be -treated as a final positional hash argument. - -Currently, the keyword and positional arguments are not separated, -but cases where behavior will change in Ruby 3.0 will result in a -warning being emitted. +If a method definition does not accept any keywords, and the +**nil syntax is not used, any keywords provided when calling +the method will be converted to a Hash positional argument: -There are a few different types of keyword argument separation issues. + def meth(arg) + arg + end + meth(a: 1) + # => {:a=>1} -==== Conversion of Hash to Keywords +=== Block Argument -If a method is called with the hash, the hash could be treated as -keywords: +The block argument is indicated by & and must come last: - def my_method(**keywords) - keywords + def my_method(&my_block) + my_block.call(self) end - my_method({a: 1}) # {:a => 1} -This occurs even if the hash could be an optional positional argument -or an element of a rest argument: +Most frequently the block argument is used to pass a block to another method: - def my_method(hash=nil, **keywords) - [hash, keywords] + def each_item(&block) + @items.each(&block) end - my_method({a: 1}) # [nil, {:a => 1}] - def my_method(*args, **keywords) - [args, keywords] +You are not required to give a name to the block if you will just be passing +it to another method: + + def each_item(&) + @items.each(&) end - my_method({a: 1}) # [[], {:a => 1}] -However, if the hash is needed for a mandatory positional argument, -it would not be treated as keywords: +If you are only going to call the block and will not otherwise manipulate it +or send it to another method, using yield without an explicit +block parameter is preferred. This method is equivalent to the first method +in this section: - def my_method(hash, **keywords) - [hash, keywords] + def my_method + yield self end - my_method({a: 1}) # [{:a => 1}, {}] -==== Conversion of Keywords to Positional Arguments +=== Argument Forwarding -If a method is called with keywords, but it is missing one -mandatory positional argument, the keywords are converted to -a hash and the hash used as the mandatory positional argument: +Since Ruby 2.7, an all-arguments forwarding syntax is available: - def my_method(hash, **keywords) - [hash, keywords] + def concrete_method(*positional_args, **keyword_args, &block) + [positional_args, keyword_args, block] end - my_method(a: 1) # [{:a => 1}, {}] - -This is also true for empty keyword splats: - kw = {} - my_method(**kw) # [{}, {}] + def forwarding_method(...) + concrete_method(...) + end -==== Splitting of Positional Hashes or Keywords + forwarding_method(1, b: 2) { puts 3 } + #=> [[1], {:b=>2}, #] -If a method definition accepts specific keywords and not arbitrary keywords, -keywords or a positional hash may be split if the hash includes both Symbol -keys and non-Symbol keys and the keywords or positional hash are not needed -as a mandatory positional argument. In this case, the non-Symbol keys are -separated into a positional argument hash, and the Symbol keys are used -as the keyword arguments: +Calling with forwarding ... is available only in methods +defined with .... - def my_method(hash=3, a: 4) - [hash, a] + def regular_method(arg, **kwarg) + concrete_method(...) # Syntax error end - my_method(a: 1, 'a' => 2) # [{"a"=>2}, 1] - my_method({a: 1, 'a' => 2}) # [{"a"=>2}, 1] -== Block Argument +Since Ruby 3.0, there can be leading arguments before ... +both in definitions and in invocations (but in definitions they can be +only positional arguments without default values). -The block argument is indicated by & and must come last: + def request(method, path, **headers) + puts "#{method.upcase} #{path} #{headers}" + end - def my_method(&my_block) - my_block.call(self) + def get(...) + request(:GET, ...) # leading argument in invoking end -Most frequently the block argument is used to pass a block to another method: + get('http://ruby-lang.org', 'Accept' => 'text/html') + # Prints: GET http://ruby-lang.org {"Accept"=>"text/html"} - def each_item(&block) - @items.each(&block) + def logged_get(msg, ...) # leading argument in definition + puts "Invoking #get: #{msg}" + get(...) end -If you are only going to call the block and will not otherwise manipulate it -or send it to another method using yield without an explicit -block parameter is preferred. This method is equivalent to the first method -in this section: + logged_get('Ruby site', 'http://ruby-lang.org') + # Prints: + # Invoking #get: Ruby site + # GET http://ruby-lang.org {} - def my_method - yield self +Note that omitting parentheses in forwarding calls may lead to +unexpected results: + + def log(...) + puts ... # This would be treated as `puts()...', + # i.e. endless range from puts result end + log("test") + # Prints: warning: ... at EOL, should be parenthesized? + # ...and then empty line + == Exception Handling Methods have an implied exception handling block so you do not need to use diff --git a/ruby/doc/syntax/miscellaneous.rdoc b/ruby/doc/syntax/miscellaneous.rdoc index 87ec059ae..d5cfd3e47 100644 --- a/ruby/doc/syntax/miscellaneous.rdoc +++ b/ruby/doc/syntax/miscellaneous.rdoc @@ -83,6 +83,36 @@ Using the specific reflection methods such as instance_variable_defined? for instance variables or const_defined? for constants is less error prone than using +defined?+. ++defined?+ handles some regexp global variables specially based on whether +there is an active regexp match and how many capture groups there are: + + /b/ =~ 'a' + defined?($~) # => "global-variable" + defined?($&) # => nil + defined?($`) # => nil + defined?($') # => nil + defined?($+) # => nil + defined?($1) # => nil + defined?($2) # => nil + + /./ =~ 'a' + defined?($~) # => "global-variable" + defined?($&) # => "global-variable" + defined?($`) # => "global-variable" + defined?($') # => "global-variable" + defined?($+) # => nil + defined?($1) # => nil + defined?($2) # => nil + + /(.)/ =~ 'a' + defined?($~) # => "global-variable" + defined?($&) # => "global-variable" + defined?($`) # => "global-variable" + defined?($') # => "global-variable" + defined?($+) # => "global-variable" + defined?($1) # => "global-variable" + defined?($2) # => nil + == +BEGIN+ and +END+ +BEGIN+ defines a block that is run before any other code in the current file. diff --git a/ruby/doc/syntax/pattern_matching.rdoc b/ruby/doc/syntax/pattern_matching.rdoc new file mode 100644 index 000000000..b7d614770 --- /dev/null +++ b/ruby/doc/syntax/pattern_matching.rdoc @@ -0,0 +1,540 @@ += Pattern matching + +Pattern matching is a feature allowing deep matching of structured values: checking the structure and binding the matched parts to local variables. + +Pattern matching in Ruby is implemented with the +case+/+in+ expression: + + case + in + ... + in + ... + in + ... + else + ... + end + +(Note that +in+ and +when+ branches can NOT be mixed in one +case+ expression.) + +Or with the => operator and the +in+ operator, which can be used in a standalone expression: + + => + + in + +The +case+/+in+ expression is _exhaustive_: if the value of the expression does not match any branch of the +case+ expression (and the +else+ branch is absent), +NoMatchingPatternError+ is raised. + +Therefore, the +case+ expression might be used for conditional matching and unpacking: + + config = {db: {user: 'admin', password: 'abc123'}} + + case config + in db: {user:} # matches subhash and puts matched value in variable user + puts "Connect with user '#{user}'" + in connection: {username: } + puts "Connect with user '#{username}'" + else + puts "Unrecognized structure of config" + end + # Prints: "Connect with user 'admin'" + +whilst the => operator is most useful when the expected data structure is known beforehand, to just unpack parts of it: + + config = {db: {user: 'admin', password: 'abc123'}} + + config => {db: {user:}} # will raise if the config's structure is unexpected + + puts "Connect with user '#{user}'" + # Prints: "Connect with user 'admin'" + + in is the same as case ; in ; true; else false; end. +You can use it when you only want to know if a pattern has been matched or not: + + users = [{name: "Alice", age: 12}, {name: "Bob", age: 23}] + users.any? {|user| user in {name: /B/, age: 20..} } #=> true + +See below for more examples and explanations of the syntax. + +== Patterns + +Patterns can be: + +* any Ruby object (matched by the === operator, like in +when+); (Value pattern) +* array pattern: [, , , ...]; (Array pattern) +* find pattern: [*variable, , , , ..., *variable]; (Find pattern) +* hash pattern: {key: , key: , ...}; (Hash pattern) +* combination of patterns with |; (Alternative pattern) +* variable capture: => variable or variable; (As pattern, Variable pattern) + +Any pattern can be nested inside array/find/hash patterns where is specified. + +Array patterns and find patterns match arrays, or objects that respond to +deconstruct+ (see below about the latter). +Hash patterns match hashes, or objects that respond to +deconstruct_keys+ (see below about the latter). Note that only symbol keys are supported for hash patterns. + +An important difference between array and hash pattern behavior is that arrays match only a _whole_ array: + + case [1, 2, 3] + in [Integer, Integer] + "matched" + else + "not matched" + end + #=> "not matched" + +while the hash matches even if there are other keys besides the specified part: + + case {a: 1, b: 2, c: 3} + in {a: Integer} + "matched" + else + "not matched" + end + #=> "matched" + +{} is the only exclusion from this rule. It matches only if an empty hash is given: + + case {a: 1, b: 2, c: 3} + in {} + "matched" + else + "not matched" + end + #=> "not matched" + + case {} + in {} + "matched" + else + "not matched" + end + #=> "matched" + +There is also a way to specify there should be no other keys in the matched hash except those explicitly specified by the pattern, with **nil: + + case {a: 1, b: 2} + in {a: Integer, **nil} # this will not match the pattern having keys other than a: + "matched a part" + in {a: Integer, b: Integer, **nil} + "matched a whole" + else + "not matched" + end + #=> "matched a whole" + +Both array and hash patterns support "rest" specification: + + case [1, 2, 3] + in [Integer, *] + "matched" + else + "not matched" + end + #=> "matched" + + case {a: 1, b: 2, c: 3} + in {a: Integer, **} + "matched" + else + "not matched" + end + #=> "matched" + +Parentheses around both kinds of patterns could be omitted: + + case [1, 2] + in Integer, Integer + "matched" + else + "not matched" + end + #=> "matched" + + case {a: 1, b: 2, c: 3} + in a: Integer + "matched" + else + "not matched" + end + #=> "matched" + + [1, 2] => a, b + [1, 2] in a, b + + {a: 1, b: 2, c: 3} => a: + {a: 1, b: 2, c: 3} in a: + +Find pattern is similar to array pattern but it can be used to check if the given object has any elements that match the pattern: + + case ["a", 1, "b", "c", 2] + in [*, String, String, *] + "matched" + else + "not matched" + end + +== Variable binding + +Besides deep structural checks, one of the very important features of the pattern matching is the binding of the matched parts to local variables. The basic form of binding is just specifying => variable_name after the matched (sub)pattern (one might find this similar to storing exceptions in local variables in a rescue ExceptionClass => var clause): + + case [1, 2] + in Integer => a, Integer + "matched: #{a}" + else + "not matched" + end + #=> "matched: 1" + + case {a: 1, b: 2, c: 3} + in a: Integer => m + "matched: #{m}" + else + "not matched" + end + #=> "matched: 1" + +If no additional check is required, for only binding some part of the data to a variable, a simpler form could be used: + + case [1, 2] + in a, Integer + "matched: #{a}" + else + "not matched" + end + #=> "matched: 1" + + case {a: 1, b: 2, c: 3} + in a: m + "matched: #{m}" + else + "not matched" + end + #=> "matched: 1" + +For hash patterns, even a simpler form exists: key-only specification (without any sub-pattern) binds the local variable with the key's name, too: + + case {a: 1, b: 2, c: 3} + in a: + "matched: #{a}" + else + "not matched" + end + #=> "matched: 1" + +Binding works for nested patterns as well: + + case {name: 'John', friends: [{name: 'Jane'}, {name: 'Rajesh'}]} + in name:, friends: [{name: first_friend}, *] + "matched: #{first_friend}" + else + "not matched" + end + #=> "matched: Jane" + +The "rest" part of a pattern also can be bound to a variable: + + case [1, 2, 3] + in a, *rest + "matched: #{a}, #{rest}" + else + "not matched" + end + #=> "matched: 1, [2, 3]" + + case {a: 1, b: 2, c: 3} + in a:, **rest + "matched: #{a}, #{rest}" + else + "not matched" + end + #=> "matched: 1, {:b=>2, :c=>3}" + +Binding to variables currently does NOT work for alternative patterns joined with |: + + case {a: 1, b: 2} + in {a: } | Array + "matched: #{a}" + else + "not matched" + end + # SyntaxError (illegal variable in alternative pattern (a)) + +Variables that start with _ are the only exclusions from this rule: + + case {a: 1, b: 2} + in {a: _, b: _foo} | Array + "matched: #{_}, #{_foo}" + else + "not matched" + end + # => "matched: 1, 2" + +It is, though, not advised to reuse the bound value, as this pattern's goal is to signify a discarded value. + +== Variable pinning + +Due to the variable binding feature, existing local variable can not be straightforwardly used as a sub-pattern: + + expectation = 18 + + case [1, 2] + in expectation, *rest + "matched. expectation was: #{expectation}" + else + "not matched. expectation was: #{expectation}" + end + # expected: "not matched. expectation was: 18" + # real: "matched. expectation was: 1" -- local variable just rewritten + +For this case, the pin operator ^ can be used, to tell Ruby "just use this value as part of the pattern": + + expectation = 18 + case [1, 2] + in ^expectation, *rest + "matched. expectation was: #{expectation}" + else + "not matched. expectation was: #{expectation}" + end + #=> "not matched. expectation was: 18" + +One important usage of variable pinning is specifying that the same value should occur in the pattern several times: + + jane = {school: 'high', schools: [{id: 1, level: 'middle'}, {id: 2, level: 'high'}]} + john = {school: 'high', schools: [{id: 1, level: 'middle'}]} + + case jane + in school:, schools: [*, {id:, level: ^school}] # select the last school, level should match + "matched. school: #{id}" + else + "not matched" + end + #=> "matched. school: 2" + + case john # the specified school level is "high", but last school does not match + in school:, schools: [*, {id:, level: ^school}] + "matched. school: #{id}" + else + "not matched" + end + #=> "not matched" + +In addition to pinning local variables, you can also pin instance, global, and class variables: + + $gvar = 1 + class A + @ivar = 2 + @@cvar = 3 + case [1, 2, 3] + in ^$gvar, ^@ivar, ^@@cvar + "matched" + else + "not matched" + end + #=> "matched" + end + +You can also pin the result of arbitrary expressions using parentheses: + + a = 1 + b = 2 + case 3 + in ^(a + b) + "matched" + else + "not matched" + end + #=> "matched" + +== Matching non-primitive objects: +deconstruct+ and +deconstruct_keys+ + +As already mentioned above, array, find, and hash patterns besides literal arrays and hashes will try to match any object implementing +deconstruct+ (for array/find patterns) or +deconstruct_keys+ (for hash patterns). + + class Point + def initialize(x, y) + @x, @y = x, y + end + + def deconstruct + puts "deconstruct called" + [@x, @y] + end + + def deconstruct_keys(keys) + puts "deconstruct_keys called with #{keys.inspect}" + {x: @x, y: @y} + end + end + + case Point.new(1, -2) + in px, Integer # sub-patterns and variable binding works + "matched: #{px}" + else + "not matched" + end + # prints "deconstruct called" + "matched: 1" + + case Point.new(1, -2) + in x: 0.. => px + "matched: #{px}" + else + "not matched" + end + # prints: deconstruct_keys called with [:x] + #=> "matched: 1" + ++keys+ are passed to +deconstruct_keys+ to provide a room for optimization in the matched class: if calculating a full hash representation is expensive, one may calculate only the necessary subhash. When the **rest pattern is used, +nil+ is passed as a +keys+ value: + + case Point.new(1, -2) + in x: 0.. => px, **rest + "matched: #{px}" + else + "not matched" + end + # prints: deconstruct_keys called with nil + #=> "matched: 1" + +Additionally, when matching custom classes, the expected class can be specified as part of the pattern and is checked with === + + class SuperPoint < Point + end + + case Point.new(1, -2) + in SuperPoint(x: 0.. => px) + "matched: #{px}" + else + "not matched" + end + #=> "not matched" + + case SuperPoint.new(1, -2) + in SuperPoint[x: 0.. => px] # [] or () parentheses are allowed + "matched: #{px}" + else + "not matched" + end + #=> "matched: 1" + +== Guard clauses + ++if+ can be used to attach an additional condition (guard clause) when the pattern matches. This condition may use bound variables: + + case [1, 2] + in a, b if b == a*2 + "matched" + else + "not matched" + end + #=> "matched" + + case [1, 1] + in a, b if b == a*2 + "matched" + else + "not matched" + end + #=> "not matched" + ++unless+ works, too: + + case [1, 1] + in a, b unless b == a*2 + "matched" + else + "not matched" + end + #=> "matched" + +== Current feature status + +As of Ruby 3.1, find patterns are considered _experimental_: its syntax can change in the future. Every time you use these features in code, a warning will be printed: + + [0] => [*, 0, *] + # warning: Find pattern is experimental, and the behavior may change in future versions of Ruby! + # warning: One-line pattern matching is experimental, and the behavior may change in future versions of Ruby! + +To suppress this warning, one may use the Warning::[]= method: + + Warning[:experimental] = false + eval('[0] => [*, 0, *]') + # ...no warning printed... + +Note that pattern-matching warnings are raised at compile time, so this will not suppress the warning: + + Warning[:experimental] = false # At the time this line is evaluated, the parsing happened and warning emitted + [0] => [*, 0, *] + +So, only subsequently loaded files or `eval`-ed code is affected by switching the flag. + +Alternatively, the command line option -W:no-experimental can be used to turn off "experimental" feature warnings. + +== Appendix A. Pattern syntax + +Approximate syntax is: + + pattern: value_pattern + | variable_pattern + | alternative_pattern + | as_pattern + | array_pattern + | find_pattern + | hash_pattern + + value_pattern: literal + | Constant + | ^local_variable + | ^instance_variable + | ^class_variable + | ^global_variable + | ^(expression) + + variable_pattern: variable + + alternative_pattern: pattern | pattern | ... + + as_pattern: pattern => variable + + array_pattern: [pattern, ..., *variable] + | Constant(pattern, ..., *variable) + | Constant[pattern, ..., *variable] + + find_pattern: [*variable, pattern, ..., *variable] + | Constant(*variable, pattern, ..., *variable) + | Constant[*variable, pattern, ..., *variable] + + hash_pattern: {key: pattern, key:, ..., **variable} + | Constant(key: pattern, key:, ..., **variable) + | Constant[key: pattern, key:, ..., **variable] + +== Appendix B. Some undefined behavior examples + +To leave room for optimization in the future, the specification contains some undefined behavior. + +Use of a variable in an unmatched pattern: + + case [0, 1] + in [a, 2] + "not matched" + in b + "matched" + in c + "not matched" + end + a #=> undefined + c #=> undefined + +Number of +deconstruct+, +deconstruct_keys+ method calls: + + $i = 0 + ary = [0] + def ary.deconstruct + $i += 1 + self + end + case ary + in [0, 1] + "not matched" + in [0] + "matched" + end + $i #=> undefined diff --git a/ruby/doc/syntax/refinements.rdoc b/ruby/doc/syntax/refinements.rdoc index fc554bb47..c900ab1bd 100644 --- a/ruby/doc/syntax/refinements.rdoc +++ b/ruby/doc/syntax/refinements.rdoc @@ -245,7 +245,8 @@ When +super+ is invoked method lookup checks: Note that +super+ in a method of a refinement invokes the method in the refined class even if there is another refinement which has been activated in -the same context. +the same context. This is only true for +super+ in a method of a refinement, it +does not apply to +super+ in a method in a module that is included in a refinement. == Methods Introspection @@ -278,6 +279,6 @@ Refinements in descendants have higher precedence than those of ancestors. == Further Reading -See https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/RefinementsSpec for the +See https://bugs.ruby-lang.org/projects/ruby-master/wiki/RefinementsSpec for the current specification for implementing refinements. The specification also contains more details. diff --git a/ruby/doc/time/in.rdoc b/ruby/doc/time/in.rdoc new file mode 100644 index 000000000..f47db76a3 --- /dev/null +++ b/ruby/doc/time/in.rdoc @@ -0,0 +1,7 @@ +- in: zone: a timezone _zone_, which may be: + - A string offset from UTC. + - A single letter offset from UTC, in the range 'A'..'Z', + 'J' (the so-called military timezone) excluded. + - An integer number of seconds. + - A timezone object; + see {Timezone Argument}[#class-Time-label-Timezone+Argument] for details. diff --git a/ruby/doc/time/mon-min.rdoc b/ruby/doc/time/mon-min.rdoc new file mode 100644 index 000000000..5bd430c74 --- /dev/null +++ b/ruby/doc/time/mon-min.rdoc @@ -0,0 +1,8 @@ +- +month+: a month value, which may be: + - An integer month in the range 1..12. + - A 3-character string that matches regular expression + /jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/i. +- +day+: an integer day in the range 1..31 + (less than 31 for some months). +- +hour+: an integer hour in the range 0..23. +- +min+: an integer minute in the range 0..59. diff --git a/ruby/doc/time/msec.rdoc b/ruby/doc/time/msec.rdoc new file mode 100644 index 000000000..ce5d1e614 --- /dev/null +++ b/ruby/doc/time/msec.rdoc @@ -0,0 +1,2 @@ +- +msec+ is the number of milliseconds (Integer, Float, or Rational) + in the range 0..1000. diff --git a/ruby/doc/time/nsec.rdoc b/ruby/doc/time/nsec.rdoc new file mode 100644 index 000000000..a2dfe2d60 --- /dev/null +++ b/ruby/doc/time/nsec.rdoc @@ -0,0 +1,2 @@ +- +nsec+ is the number of nanoseconds (Integer, Float, or Rational) + in the range 0..1000000000. diff --git a/ruby/doc/time/sec.rdoc b/ruby/doc/time/sec.rdoc new file mode 100644 index 000000000..049c71211 --- /dev/null +++ b/ruby/doc/time/sec.rdoc @@ -0,0 +1,2 @@ +- +sec+ is the number of seconds (Integer, Float, or Rational) + in the range 0..60. diff --git a/ruby/doc/time/sec_i.rdoc b/ruby/doc/time/sec_i.rdoc new file mode 100644 index 000000000..99c8eddc6 --- /dev/null +++ b/ruby/doc/time/sec_i.rdoc @@ -0,0 +1 @@ +- +isec_i+ is the integer number of seconds in the range 0..60. diff --git a/ruby/doc/time/usec.rdoc b/ruby/doc/time/usec.rdoc new file mode 100644 index 000000000..bb5a46419 --- /dev/null +++ b/ruby/doc/time/usec.rdoc @@ -0,0 +1,2 @@ +- +usec+ is the number of microseconds (Integer, Float, or Rational) + in the range 0..1000000. diff --git a/ruby/doc/time/year.rdoc b/ruby/doc/time/year.rdoc new file mode 100644 index 000000000..2222b830d --- /dev/null +++ b/ruby/doc/time/year.rdoc @@ -0,0 +1 @@ +- +year+: an integer year. diff --git a/ruby/doc/time/zone_and_in.rdoc b/ruby/doc/time/zone_and_in.rdoc new file mode 100644 index 000000000..e09e22874 --- /dev/null +++ b/ruby/doc/time/zone_and_in.rdoc @@ -0,0 +1,8 @@ +- +zone+: a timezone, which may be: + - A string offset from UTC. + - A single letter offset from UTC, in the range 'A'..'Z', + 'J' (the so-called military timezone) excluded. + - An integer number of seconds. + - A timezone object; + see {Timezone Argument}[#class-Time-label-Timezone+Argument] for details. +- in: zone: a timezone _zone_, which may be as above. diff --git a/ruby/doc/yjit/yjit.md b/ruby/doc/yjit/yjit.md new file mode 100644 index 000000000..a56aec652 --- /dev/null +++ b/ruby/doc/yjit/yjit.md @@ -0,0 +1,233 @@ + + + +YJIT - Yet Another Ruby JIT +=========================== + +**DISCLAIMER: Please note that this project is experimental. It is very much a work in progress, it may cause your software to crash, and current performance results will vary widely, especially on larger applications.** + +YJIT is a lightweight, minimalistic Ruby JIT built inside CRuby. +It lazily compiles code using a Basic Block Versioning (BBV) architecture. The target use case is that of servers running +Ruby on Rails, an area where MJIT has not yet managed to deliver speedups. +To simplify development, we currently support only macOS and Linux on x86-64, but an ARM64 backend +is part of future plans. +This project is open source and falls under the same license as CRuby. + +If you wish to learn more about the approach taken, here are some conference talks and publications: +- RubyKaigi 2021 talk: [YJIT: Building a New JIT Compiler Inside CRuby](https://www.youtube.com/watch?v=PBVLf3yfMs8) +- Blog post: [YJIT: Building a New JIT Compiler Inside CRuby](https://pointersgonewild.com/2021/06/02/yjit-building-a-new-jit-compiler-inside-cruby/) +- MoreVMs 2021 talk: [YJIT: Building a New JIT Compiler Inside CRuby](https://www.youtube.com/watch?v=vucLAqv7qpc) +- ECOOP 2016 talk: [Interprocedural Type Specialization of JavaScript Programs Without Type Analysis](https://www.youtube.com/watch?v=sRNBY7Ss97A) +- ECOOP 2016 paper: [Interprocedural Type Specialization of JavaScript Programs Without Type Analysis](https://drops.dagstuhl.de/opus/volltexte/2016/6101/pdf/LIPIcs-ECOOP-2016-7.pdf) +- ECOOP 2015 talk: [Simple and Effective Type Check Removal through Lazy Basic Block Versioning](https://www.youtube.com/watch?v=S-aHBuoiYE0) +- ECOOP 2015 paper: [Simple and Effective Type Check Removal through Lazy Basic Block Versioning](https://arxiv.org/pdf/1411.0352.pdf) + +To cite this repository in your publications, please use this bibtex snippet: + +``` +@misc{yjit_ruby_jit, + author = {Chevalier-Boisvert, Maxime and Wu, Alan and Patterson, Aaron}, + title = {YJIT - Yet Another Ruby JIT}, + year = {2021}, + publisher = {GitHub}, + journal = {GitHub repository}, + howpublished = {\url{https://github.com/Shopify/yjit}}, +} +``` + +## Current Limitations + +YJIT is a work in progress and as such may not yet be mature enough for mission-critical software. Below is a list of known limitations, all of which we plan to eventually address: + +- No garbage collection for generated code. +- Currently supports only macOS and Linux. +- Currently supports only x86-64 CPUs. + +Because there is no GC for generated code yet, your software could run out of executable memory if it is large enough. You can change how much executable memory is allocated using [YJIT's command-line options](https://github.com/Shopify/yjit#command-line-options). + +## Installation + +Current YJIT versions are installed by default with CRuby. Make sure to specify the "--yjit" command line option to enable it at runtime. + +Experimental YJIT patches that have not yet been merged with CRuby can be found in ruby-build: + +``` +ruby-build yjit-dev ~/.rubies/ruby-yjit-dev +``` + +They can also be found in the Shopify/yjit repository, which is cloned and build like CRuby. + +Start by cloning the `Shopify/yjit` repository: + +``` +git clone https://github.com/Shopify/yjit +cd yjit +``` + +The YJIT `ruby` binary can be built with either GCC or Clang. For development, we recommend enabling debug symbols so that assertions are enabled as this makes debugging easier. Enabling debug mode will also make it possible for you to disassemble code generated by YJIT. However, this causes a performance hit. For maximum performance, compile with GCC, without the `DRUBY_DEBUG` or `YJIT_STATS` build options. More detailed build instructions are provided in the [Ruby README](https://github.com/ruby/ruby#how-to-compile-and-install). +To support disassembly of the generated code, `libcapstone` is also required (`brew install capstone` on MacOS, `sudo apt-get install -y libcapstone-dev` on Ubuntu/Debian and `sudo dnf -y install capstone-devel` on Fedora). + +``` +# Configure with debugging/stats options for development, build and install +./autogen.sh +./configure cppflags="-DRUBY_DEBUG -DYJIT_STATS" --prefix=$HOME/.rubies/ruby-yjit --disable-install-doc --disable--install-rdoc +make -j16 install +``` + +On macOS, you may need to specify where to find openssl, libyaml and gdbm: + +``` +# Configure with debugging/stats options for development, build and install +./configure cppflags="-DRUBY_DEBUG -DYJIT_STATS" --prefix=$HOME/.rubies/ruby-yjit --disable-install-doc --disable--install-rdoc --with-opt-dir=$(brew --prefix openssl):$(brew --prefix readline):$(brew --prefix libyaml):$(brew --prefix gdbm) +make -j16 install +``` + +Typically configure will choose default C compiler. To specify the C compiler, use +``` +# Choosing a specific c compiler +export CC=/path/to/my/choosen/c/compiler +``` +before running `./configure`. + +You can test that YJIT works correctly by running: + +``` +# Quick tests found in /bootstraptest +make btest + +# Complete set of tests +make -j16 test-all +``` + +## Usage + +### Examples + +Once YJIT is built, you can either use `./miniruby` from within your build directory, or switch to the YJIT version of `ruby` +by using the `chruby` tool: + +``` +chruby ruby-yjit +ruby myscript.rb +``` + +You can dump statistics about compilation and execution by running YJIT with the `--yjit-stats` command-line option: + +``` +./miniruby --yjit-stats myscript.rb +``` + +The machine code generated for a given method can be printed by adding `puts RubyVM::YJIT.disasm(method(:method_name))` to a Ruby script. Note that no code will be generated if the method is not compiled. + + +### Command-Line Options + +YJIT supports all command-line options supported by upstream CRuby, but also adds a few YJIT-specific options: + +- `--disable-yjit`: turn off YJIT (enabled by default) +- `--yjit-stats`: produce statistics after the execution of a program (must compile with `cppflags=-DRUBY_DEBUG` to use this) +- `--yjit-exec-mem-size=N`: size of the executable memory block to allocate (default 256 MiB) +- `--yjit-call-threshold=N`: number of calls after which YJIT begins to compile a function (default 2) +- `--yjit-max-versions=N`: maximum number of versions to generate per basic block (default 4) +- `--yjit-greedy-versioning`: greedy versioning mode (disabled by default, may increase code size) + +### Benchmarking + +We have collected a set of benchmarks and implemented a simple benchmarking harness in the [yjit-bench](https://github.com/Shopify/yjit-bench) repository. This benchmarking harness is designed to disable CPU frequency scaling, set process affinity and disable address space randomization so that the variance between benchmarking runs will be as small as possible. Please kindly note that we are at an early stage in this project. + +### Performance Tips + +This section contains tips on writing Ruby code that will run as fast as possible on YJIT. Some of this advice is based on current limitations of YJIT, while other advice is broadly applicable. It probably won't be practical to apply these tips everywhere in your codebase, but you can profile your code using a tool such as [stackprof](https://github.com/tmm1/stackprof) and refactor the specific methods that make up the largest fractions of the execution time. + +- Use exceptions for error recovery only, not as part of normal control-flow +- Avoid redefining basic integer operations (i.e. +, -, <, >, etc.) +- Avoid redefining the meaning of `nil`, equality, etc. +- Avoid allocating objects in the hot parts of your code +- Use while loops if you can, instead of `integer.times` +- Minimize layers of indirection + - Avoid classes that wrap objects if you can + - Avoid methods that just call another method, trivial one liner methods +- CRuby method calls are costly. Favor larger methods over smaller methods. +- Try to write code so that the same variables always have the same type + +You can also compile YJIT in debug mode and use the `--yjit-stats` command-line option to see which bytecodes cause YJIT to exit, and refactor your code to avoid using these instructions in the hottest methods of your code. + +## Contributing + +We welcome open source contributors. You should feel free to open new issues to report bugs or just to ask questions. +Suggestions on how to make this readme file more helpful for new contributors are most welcome. + +Bug fixes and bug reports are very valuable to us. If you find a bug in YJIT, it's very possible be that nobody has reported it before, +or that we don't have a good reproduction for it, so please open an issue and provide as much information as you can about your configuration and a description of how you encountered the problem. List the commands you used to run YJIT so that we can easily reproduce the issue on our end and investigate it. If you are able to produce a small program reproducing the error to help us track it down, that is very much appreciated as well. + +If you would like to contribute a large patch to YJIT, we suggest opening an issue or a discussion on this repository so that +we can have an active discussion. A common problem is that sometimes people submit large pull requests to open source projects +without prior communication, and we have to reject them because the work they implemented does not fit within the design of the +project. We want to save you time and frustration, so please reach out and we can have a productive discussion as to how +you can contribute things we will want to merge into YJIT. + +### Source Code Organization + +The YJIT source code is divided between: +- `yjit_asm.c`: x86 in-memory assembler we use to generate machine code +- `yjit_codegen.c`: logic for translating Ruby bytecode to machine code +- `yjit_core.c`: basic block versioning logic, core structure of YJIT +- `yjit_iface.c`: code YJIT uses to interface with the rest of CRuby +- `yjit.h`: C definitions YJIT exposes to the rest of the CRuby +- `yjit.rb`: `YJIT` Ruby module that is exposed to Ruby +- `misc/test_yjit_asm.sh`: script to compile and run the in-memory assembler tests +- `misc/yjit_asm_tests.c`: tests for the in-memory assembler + +The core of CRuby's interpreter logic is found in: +- `insns.def`: defines Ruby's bytecode instructions (gets compiled into `vm.inc`) +- `vm_insnshelper.c`: logic used by Ruby's bytecode instructions +- `vm_exec.c`: Ruby interpreter loop + +### Coding & Debugging Protips + +There are 3 test suites: +- `make btest` (see `/bootstraptest`) +- `make test-all` +- `make test-spec` +- `make check` runs all of the above + +The tests can be run in parallel like this: + +``` +make -j16 test-all RUN_OPTS="--yjit-call-threshold=1" +``` + +Or single-threaded like this, to more easily identify which specific test is failing: + +``` +make test-all TESTOPTS=--verbose RUN_OPTS="--yjit-call-threshold=1" +``` + +To debug a single test in `test-all`: + +``` +make test-all TESTS='test/-ext-/marshal/test_usrmarshal.rb' RUNRUBYOPT=--debugger=lldb RUN_OPTS="--yjit-call-threshold=1" +``` + +You can also run one specific test in `btest`: + +``` +make btest BTESTS=bootstraptest/test_ractor.rb RUN_OPTS="--yjit-call-threshold=1" +``` + +There are shortcuts to run/debug your own test/repro in `test.rb`: + +``` +make run # runs ./miniruby test.rb +make lldb # launches ./miniruby test.rb in lldb +``` + +You can use the Intel syntax for disassembly in LLDB, keeping it consistent with YJIT's disassembly: + +``` +echo "settings set target.x86-disassembly-flavor intel" >> ~/.lldbinit +``` diff --git a/ruby/doc/yjit/yjit_hacking.md b/ruby/doc/yjit/yjit_hacking.md new file mode 100644 index 000000000..4c4d742b7 --- /dev/null +++ b/ruby/doc/yjit/yjit_hacking.md @@ -0,0 +1,75 @@ +# YJIT Hacking + +## Code Generation and Assembly Language + +YJIT’s basic purpose is to take ISEQs and generate machine code. + +Documentation on each Ruby bytecode can be found in insns.def. + +YJIT uses those bytecodes as the “Basic Blocks†in Lazy Basic Block Versioning (LBBV.) For more deep details of LBBV, see yjit.md in this directory. + +Current YJIT has a simple assembler as a backend. Each method that generates code does it by emitting machine code: + +``` +# Excerpt of yjit_gen_exit() from yjit_codegen.c, Sept 2021 +// Generate an exit to return to the interpreter +static uint32_t +yjit_gen_exit(VALUE *exit_pc, ctx_t *ctx, codeblock_t *cb) +{ + const uint32_t code_pos = cb->write_pos; + + ADD_COMMENT(cb, "exit to interpreter"); + + // Generate the code to exit to the interpreters + // Write the adjusted SP back into the CFP + if (ctx->sp_offset != 0) { + x86opnd_t stack_pointer = ctx_sp_opnd(ctx, 0); + lea(cb, REG_SP, stack_pointer); + mov(cb, member_opnd(REG_CFP, rb_control_frame_t, sp), REG_SP); + } + + // Update CFP->PC + mov(cb, RAX, const_ptr_opnd(exit_pc)); + mov(cb, member_opnd(REG_CFP, rb_control_frame_t, pc), RAX); +``` + +Later there will be a more complex backend. + +## Code Generation vs Code Execution + +When you see lea() call above (“load effective address,â€) it’s not running the LEA x86 instruction. It’s generating an LEA instruction to the codeblock pointer in the first argument. It will execute that instruction later, when the codeblock gets executed. + +This is subtle because YJIT will often wait to compile the method until you’re about to run it -- that’s when it knows the most about what types of arguments the method will receive. So it’s a compile-time instruction, but often it will defer compile-time until just barely before runtime. + +The ctx structure tracks what is known at compile time about the arguments being passed into the Ruby bytecode. Often YJIT will “peek†at an expected type before it generates machine code. + +## Inlined and Outlined Code + +When YJIT is generating code, it needs a code pointer. In many cases it needs two, usually called “cb†(codeblock) and “ocb†(out-of-line codeblock.) + +cb is for “inlined†normal code and ocb is for “outline†code such as exits. Inlined code is normal generated code for Ruby operations, while outlined code is for unusual and error conditions, such as encountering an unexpected parameter type and exiting to the interpreter. + +The purpose of the outlined code block is to keep things we believe are going to be infrequent somewhere else. That way we can keep the code in the inline block more linear and compact. Linear code, with as few branches as possible, is more easily predicted by the CPU. An exception or unsupported operation will cause YJIT to generate outlined code to handle it. + +If you search for ocb in yjit_codegen.c, you can see some places where out-of-line code is generated. + +YJIT statistics are only gathered when RUBY_DEBUG or YJIT_STATS is true. In some cases the code to increment YJIT statistics will be generated out-of-line, especially if those statistics are gathered when a side exit happens. + +## Statistics and Comments + +When RUBY_DEBUG is defined to a true value, YJIT will emit comments into the generated machine code. This can make disassemblies a lot more readable. When RUBY_DEBUG or YJIT_STATS is defined and stats are active (--yjit-stats or export YJIT_STATS=1), code will be generated to collect statistics during the run, and a report will be printed when the process exits. + +## Entering and Exiting the Interpreter + +YJIT won’t generate machine code for an ISEQ until it’s been run a certain number of times (10 by default.) Then, the next time the interpreter would call that ISEQ, it will call the generated machine code version instead. If YJIT hits an unexpected or unsupported operation, it will return to the normal interpreter. + +If YJIT returns to the interpreter, the behaviour will be correct but slower. YJIT only optimises part of some operations - for instance, YJIT will not optimise a BMETHOD call yet. + +When the interpreter calls to a YJIT-optimised method again, control will return to YJIT’s generated machine code. The more time that’s spent in YJIT-generated code (“ratio in YJIT,â€) the more CPU time YJIT can save with its optimisations. + +## Side Exits + +When YJIT has compiled an ISEQ and is running it later, sometimes it will hit an unexpected condition. It might see a parameter of a different type than before, or square-brackets might be used on a hash when they were first used on an array. In those cases, the generated code will contain a call to return to the interpreter at runtime, called a “side exit.†+ +Side exits are generated as out-of-line code. + diff --git a/ruby/enc/Makefile.in b/ruby/enc/Makefile.in index 838523649..5e5d39cd7 100644 --- a/ruby/enc/Makefile.in +++ b/ruby/enc/Makefile.in @@ -1,4 +1,5 @@ V = 0 +V0 = $(V:0=) Q1 = $(V:1=) Q = $(Q1:0=@) ECHO1 = $(V:1=@@NULLCMD@) @@ -11,6 +12,7 @@ exec_prefix = @exec_prefix@ libdir = @libdir@ top_srcdir = $(encsrcdir:/enc=) srcdir = $(top_srcdir) +tooldir = $(top_srcdir)/tool arch = @arch@ EXTOUT = @EXTOUT@ hdrdir = $(srcdir)/include diff --git a/ruby/enc/ascii.c b/ruby/enc/ascii.c index 8b32c414f..a2fef2f87 100644 --- a/ruby/enc/ascii.c +++ b/ruby/enc/ascii.c @@ -61,6 +61,8 @@ OnigEncodingDefine(ascii, ASCII) = { ENC_ALIAS("BINARY", "ASCII-8BIT") ENC_REPLICATE("IBM437", "ASCII-8BIT") ENC_ALIAS("CP437", "IBM437") +ENC_REPLICATE("IBM720", "ASCII-8BIT") +ENC_ALIAS("CP720", "IBM720") ENC_REPLICATE("IBM737", "ASCII-8BIT") ENC_ALIAS("CP737", "IBM737") ENC_REPLICATE("IBM775", "ASCII-8BIT") diff --git a/ruby/enc/cp949.c b/ruby/enc/cp949.c index bd2c8d21a..1600d0cd5 100644 --- a/ruby/enc/cp949.c +++ b/ruby/enc/cp949.c @@ -218,5 +218,5 @@ OnigEncodingDefine(cp949, CP949) = { /* * Name: CP949 * Link: http://www.microsoft.com/globaldev/reference/dbcs/949.mspx - * Link: http://en.wikipedia.org/wiki/EUC-KR#EUC-KR + * Link: https://en.wikipedia.org/wiki/EUC-KR#EUC-KR */ diff --git a/ruby/enc/depend b/ruby/enc/depend index 0fffcc273..8922b2b25 100644 --- a/ruby/enc/depend +++ b/ruby/enc/depend @@ -18,6 +18,7 @@ % else % pathrep = proc {|path| path} % end +% ignore_error = $ignore_error VPATH = <%=%w[$(arch_hdrdir)/ruby $(hdrdir)/ruby $(srcdir) $(encsrcdir)].join(CONFIG["PATH_SEPARATOR"])%> LIBPATH = <%=libpathflag($DEFLIBPATH)%> @@ -73,12 +74,12 @@ $(LIBENC): $(ENCOBJS) @$(RM) $@ $(ECHO) linking statically-linked encoding library $@ $(Q) $(AR) $(ARFLAGS)$@ $(ENCOBJS) - @-$(RANLIB) $@ 2> /dev/null || true + @-$(RANLIB) $@<%=ignore_error%> $(LIBTRANS): $(TRANSOBJS) @$(RM) $@ $(ECHO) linking statically-linked transcoder library $@ $(Q) $(AR) $(ARFLAGS)$@ $(TRANSOBJS) - @-$(RANLIB) $@ 2> /dev/null || true + @-$(RANLIB) $@<%=ignore_error%> enc trans $(ENCSOS) $(TRANSSOS): config.status @@ -97,7 +98,7 @@ $(ENCSOS) $(TRANSSOS): $(ENC_TRANS_SO_D) <%=transvpath_prefix%>.trans<%=transvpath_prefix%>.c: $(ECHO) generating table from $@ - $(Q)$(MINIRUBY) "$(srcdir)/tool/transcode-tblgen.rb" -vo "$@" "$<" + $(Q)$(MINIRUBY) "$(tooldir)/transcode-tblgen.rb" -v$(V0:1=v)o "$@" "$<" % unless ENCS.empty? or TRANS.empty? @@ -113,7 +114,7 @@ enc/<%=e%>.$(OBJEXT): <%=deps.map {|n| rule_subst % n}.join(' ')%> % if src.empty? % src = trans.scan(/^\s*transcode_tblgen_\w+\s+[\'\"]([^\'\"]*)/).flatten.map{|c|c.downcase+"-tbl.rb"} % end -<%=transvpath % "#{e}.c"%>: <%= src.map {|s| transvpath % "#{s}"}.join(" ")%> $(srcdir)/tool/transcode-tblgen.rb +<%=transvpath % "#{e}.c"%>: <%= src.map {|s| transvpath % "#{s}"}.join(" ")%> $(tooldir)/transcode-tblgen.rb % end % end @@ -156,240 +157,2194 @@ clean: % %w[$(ENCSOS) $(LIBENC) $(ENCOBJS) $(ENCCLEANOBJS) $(ENCCLEANLIBS) $(TRANSSOS) $(LIBTRANS) $(TRANSOBJS) $(TRANSCLEANOBJS) $(TRANSCLEANLIBS) $(ENC_TRANS_D) $(ENC_TRANS_SO_D)].each do |clean| $(Q)$(RM) <%=pathrep[clean]%> % end -% @ignore_error = $nmake ? '' : ' 2> /dev/null || true' % unless inplace $(Q)$(RM) enc/unicode/*/casefold.h enc/unicode/*/name2ctype.h $(Q)$(RM) enc/jis/props.h - -$(Q)$(RMDIR) enc/unicode<%=@ignore_error%> + -$(Q)$(RMDIR) enc/unicode<%=ignore_error%> % end % workdirs.reverse_each do|d| - -$(Q)$(RMDIR) <%=pathrep[d]%><%=@ignore_error%> + -$(Q)$(RMDIR) <%=pathrep[d]%><%=ignore_error%> % end clean-srcs: $(Q)$(RM) <%=pathrep['$(TRANSCSRCS)']%> - -$(Q)$(RMDIR) <%=pathrep['enc/trans']%><%=@ignore_error%> + -$(Q)$(RMDIR) <%=pathrep['enc/trans']%><%=ignore_error%> $(Q)$(RM) enc/unicode/*/casefold.h enc/unicode/*/name2ctype.h $(Q)$(RM) enc/jis/props.h - -$(Q)$(RMDIR) <%=pathrep['enc/unicode']%><%=@ignore_error%> - -$(Q)$(RMDIR) <%=pathrep['enc/props']%><%=@ignore_error%> - -$(Q)$(RMDIR) <%=pathrep['enc']%><%=@ignore_error%> + -$(Q)$(RMDIR) <%=pathrep['enc/unicode']%><%=ignore_error%> + -$(Q)$(RMDIR) <%=pathrep['enc/props']%><%=ignore_error%> + -$(Q)$(RMDIR) <%=pathrep['enc']%><%=ignore_error%> <%# vim: set ft=eruby noexpandtab ts=8 sw=2 : -%> # AUTOGENERATED DEPENDENCIES START +enc/ascii.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/ascii.$(OBJEXT): $(top_srcdir)/encindex.h enc/ascii.$(OBJEXT): $(top_srcdir)/regenc.h +enc/ascii.$(OBJEXT): assert.h +enc/ascii.$(OBJEXT): backward/2/assume.h +enc/ascii.$(OBJEXT): backward/2/attributes.h +enc/ascii.$(OBJEXT): backward/2/bool.h +enc/ascii.$(OBJEXT): backward/2/inttypes.h +enc/ascii.$(OBJEXT): backward/2/limits.h +enc/ascii.$(OBJEXT): backward/2/long_long.h +enc/ascii.$(OBJEXT): backward/2/stdalign.h +enc/ascii.$(OBJEXT): backward/2/stdarg.h enc/ascii.$(OBJEXT): config.h enc/ascii.$(OBJEXT): defines.h enc/ascii.$(OBJEXT): enc/ascii.c +enc/ascii.$(OBJEXT): encoding.h +enc/ascii.$(OBJEXT): intern.h +enc/ascii.$(OBJEXT): internal/anyargs.h +enc/ascii.$(OBJEXT): internal/arithmetic.h +enc/ascii.$(OBJEXT): internal/arithmetic/char.h +enc/ascii.$(OBJEXT): internal/arithmetic/double.h +enc/ascii.$(OBJEXT): internal/arithmetic/fixnum.h +enc/ascii.$(OBJEXT): internal/arithmetic/gid_t.h +enc/ascii.$(OBJEXT): internal/arithmetic/int.h +enc/ascii.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/ascii.$(OBJEXT): internal/arithmetic/long.h +enc/ascii.$(OBJEXT): internal/arithmetic/long_long.h +enc/ascii.$(OBJEXT): internal/arithmetic/mode_t.h +enc/ascii.$(OBJEXT): internal/arithmetic/off_t.h +enc/ascii.$(OBJEXT): internal/arithmetic/pid_t.h +enc/ascii.$(OBJEXT): internal/arithmetic/short.h +enc/ascii.$(OBJEXT): internal/arithmetic/size_t.h +enc/ascii.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/ascii.$(OBJEXT): internal/arithmetic/uid_t.h +enc/ascii.$(OBJEXT): internal/assume.h +enc/ascii.$(OBJEXT): internal/attr/alloc_size.h +enc/ascii.$(OBJEXT): internal/attr/artificial.h +enc/ascii.$(OBJEXT): internal/attr/cold.h +enc/ascii.$(OBJEXT): internal/attr/const.h +enc/ascii.$(OBJEXT): internal/attr/constexpr.h +enc/ascii.$(OBJEXT): internal/attr/deprecated.h +enc/ascii.$(OBJEXT): internal/attr/diagnose_if.h +enc/ascii.$(OBJEXT): internal/attr/enum_extensibility.h +enc/ascii.$(OBJEXT): internal/attr/error.h +enc/ascii.$(OBJEXT): internal/attr/flag_enum.h +enc/ascii.$(OBJEXT): internal/attr/forceinline.h +enc/ascii.$(OBJEXT): internal/attr/format.h +enc/ascii.$(OBJEXT): internal/attr/maybe_unused.h +enc/ascii.$(OBJEXT): internal/attr/noalias.h +enc/ascii.$(OBJEXT): internal/attr/nodiscard.h +enc/ascii.$(OBJEXT): internal/attr/noexcept.h +enc/ascii.$(OBJEXT): internal/attr/noinline.h +enc/ascii.$(OBJEXT): internal/attr/nonnull.h +enc/ascii.$(OBJEXT): internal/attr/noreturn.h +enc/ascii.$(OBJEXT): internal/attr/pure.h +enc/ascii.$(OBJEXT): internal/attr/restrict.h +enc/ascii.$(OBJEXT): internal/attr/returns_nonnull.h +enc/ascii.$(OBJEXT): internal/attr/warning.h +enc/ascii.$(OBJEXT): internal/attr/weakref.h +enc/ascii.$(OBJEXT): internal/cast.h +enc/ascii.$(OBJEXT): internal/compiler_is.h +enc/ascii.$(OBJEXT): internal/compiler_is/apple.h +enc/ascii.$(OBJEXT): internal/compiler_is/clang.h +enc/ascii.$(OBJEXT): internal/compiler_is/gcc.h +enc/ascii.$(OBJEXT): internal/compiler_is/intel.h +enc/ascii.$(OBJEXT): internal/compiler_is/msvc.h +enc/ascii.$(OBJEXT): internal/compiler_is/sunpro.h +enc/ascii.$(OBJEXT): internal/compiler_since.h +enc/ascii.$(OBJEXT): internal/config.h +enc/ascii.$(OBJEXT): internal/constant_p.h +enc/ascii.$(OBJEXT): internal/core.h +enc/ascii.$(OBJEXT): internal/core/rarray.h +enc/ascii.$(OBJEXT): internal/core/rbasic.h +enc/ascii.$(OBJEXT): internal/core/rbignum.h +enc/ascii.$(OBJEXT): internal/core/rclass.h +enc/ascii.$(OBJEXT): internal/core/rdata.h +enc/ascii.$(OBJEXT): internal/core/rfile.h +enc/ascii.$(OBJEXT): internal/core/rhash.h +enc/ascii.$(OBJEXT): internal/core/robject.h +enc/ascii.$(OBJEXT): internal/core/rregexp.h +enc/ascii.$(OBJEXT): internal/core/rstring.h +enc/ascii.$(OBJEXT): internal/core/rstruct.h +enc/ascii.$(OBJEXT): internal/core/rtypeddata.h +enc/ascii.$(OBJEXT): internal/ctype.h +enc/ascii.$(OBJEXT): internal/dllexport.h +enc/ascii.$(OBJEXT): internal/dosish.h +enc/ascii.$(OBJEXT): internal/encoding/coderange.h +enc/ascii.$(OBJEXT): internal/encoding/ctype.h +enc/ascii.$(OBJEXT): internal/encoding/encoding.h +enc/ascii.$(OBJEXT): internal/encoding/pathname.h +enc/ascii.$(OBJEXT): internal/encoding/re.h +enc/ascii.$(OBJEXT): internal/encoding/sprintf.h +enc/ascii.$(OBJEXT): internal/encoding/string.h +enc/ascii.$(OBJEXT): internal/encoding/symbol.h +enc/ascii.$(OBJEXT): internal/encoding/transcode.h +enc/ascii.$(OBJEXT): internal/error.h +enc/ascii.$(OBJEXT): internal/eval.h +enc/ascii.$(OBJEXT): internal/event.h +enc/ascii.$(OBJEXT): internal/fl_type.h +enc/ascii.$(OBJEXT): internal/gc.h +enc/ascii.$(OBJEXT): internal/glob.h +enc/ascii.$(OBJEXT): internal/globals.h +enc/ascii.$(OBJEXT): internal/has/attribute.h +enc/ascii.$(OBJEXT): internal/has/builtin.h +enc/ascii.$(OBJEXT): internal/has/c_attribute.h +enc/ascii.$(OBJEXT): internal/has/cpp_attribute.h +enc/ascii.$(OBJEXT): internal/has/declspec_attribute.h +enc/ascii.$(OBJEXT): internal/has/extension.h +enc/ascii.$(OBJEXT): internal/has/feature.h +enc/ascii.$(OBJEXT): internal/has/warning.h +enc/ascii.$(OBJEXT): internal/intern/array.h +enc/ascii.$(OBJEXT): internal/intern/bignum.h +enc/ascii.$(OBJEXT): internal/intern/class.h +enc/ascii.$(OBJEXT): internal/intern/compar.h +enc/ascii.$(OBJEXT): internal/intern/complex.h +enc/ascii.$(OBJEXT): internal/intern/cont.h +enc/ascii.$(OBJEXT): internal/intern/dir.h +enc/ascii.$(OBJEXT): internal/intern/enum.h +enc/ascii.$(OBJEXT): internal/intern/enumerator.h +enc/ascii.$(OBJEXT): internal/intern/error.h +enc/ascii.$(OBJEXT): internal/intern/eval.h +enc/ascii.$(OBJEXT): internal/intern/file.h +enc/ascii.$(OBJEXT): internal/intern/gc.h +enc/ascii.$(OBJEXT): internal/intern/hash.h +enc/ascii.$(OBJEXT): internal/intern/io.h +enc/ascii.$(OBJEXT): internal/intern/load.h +enc/ascii.$(OBJEXT): internal/intern/marshal.h +enc/ascii.$(OBJEXT): internal/intern/numeric.h +enc/ascii.$(OBJEXT): internal/intern/object.h +enc/ascii.$(OBJEXT): internal/intern/parse.h +enc/ascii.$(OBJEXT): internal/intern/proc.h +enc/ascii.$(OBJEXT): internal/intern/process.h +enc/ascii.$(OBJEXT): internal/intern/random.h +enc/ascii.$(OBJEXT): internal/intern/range.h +enc/ascii.$(OBJEXT): internal/intern/rational.h +enc/ascii.$(OBJEXT): internal/intern/re.h +enc/ascii.$(OBJEXT): internal/intern/ruby.h +enc/ascii.$(OBJEXT): internal/intern/select.h +enc/ascii.$(OBJEXT): internal/intern/select/largesize.h +enc/ascii.$(OBJEXT): internal/intern/signal.h +enc/ascii.$(OBJEXT): internal/intern/sprintf.h +enc/ascii.$(OBJEXT): internal/intern/string.h +enc/ascii.$(OBJEXT): internal/intern/struct.h +enc/ascii.$(OBJEXT): internal/intern/thread.h +enc/ascii.$(OBJEXT): internal/intern/time.h +enc/ascii.$(OBJEXT): internal/intern/variable.h +enc/ascii.$(OBJEXT): internal/intern/vm.h +enc/ascii.$(OBJEXT): internal/interpreter.h +enc/ascii.$(OBJEXT): internal/iterator.h +enc/ascii.$(OBJEXT): internal/memory.h +enc/ascii.$(OBJEXT): internal/method.h +enc/ascii.$(OBJEXT): internal/module.h +enc/ascii.$(OBJEXT): internal/newobj.h +enc/ascii.$(OBJEXT): internal/rgengc.h +enc/ascii.$(OBJEXT): internal/scan_args.h +enc/ascii.$(OBJEXT): internal/special_consts.h +enc/ascii.$(OBJEXT): internal/static_assert.h +enc/ascii.$(OBJEXT): internal/stdalign.h +enc/ascii.$(OBJEXT): internal/stdbool.h +enc/ascii.$(OBJEXT): internal/symbol.h +enc/ascii.$(OBJEXT): internal/value.h +enc/ascii.$(OBJEXT): internal/value_type.h +enc/ascii.$(OBJEXT): internal/variable.h +enc/ascii.$(OBJEXT): internal/warning_push.h +enc/ascii.$(OBJEXT): internal/xmalloc.h enc/ascii.$(OBJEXT): missing.h enc/ascii.$(OBJEXT): onigmo.h +enc/ascii.$(OBJEXT): oniguruma.h +enc/ascii.$(OBJEXT): st.h +enc/ascii.$(OBJEXT): subst.h enc/big5.$(OBJEXT): $(top_srcdir)/regenc.h +enc/big5.$(OBJEXT): assert.h +enc/big5.$(OBJEXT): backward/2/assume.h +enc/big5.$(OBJEXT): backward/2/attributes.h +enc/big5.$(OBJEXT): backward/2/bool.h +enc/big5.$(OBJEXT): backward/2/long_long.h +enc/big5.$(OBJEXT): backward/2/stdalign.h +enc/big5.$(OBJEXT): backward/2/stdarg.h enc/big5.$(OBJEXT): config.h enc/big5.$(OBJEXT): defines.h enc/big5.$(OBJEXT): enc/big5.c +enc/big5.$(OBJEXT): internal/assume.h +enc/big5.$(OBJEXT): internal/attr/alloc_size.h +enc/big5.$(OBJEXT): internal/attr/cold.h +enc/big5.$(OBJEXT): internal/attr/const.h +enc/big5.$(OBJEXT): internal/attr/deprecated.h +enc/big5.$(OBJEXT): internal/attr/error.h +enc/big5.$(OBJEXT): internal/attr/forceinline.h +enc/big5.$(OBJEXT): internal/attr/format.h +enc/big5.$(OBJEXT): internal/attr/maybe_unused.h +enc/big5.$(OBJEXT): internal/attr/nodiscard.h +enc/big5.$(OBJEXT): internal/attr/noexcept.h +enc/big5.$(OBJEXT): internal/attr/noinline.h +enc/big5.$(OBJEXT): internal/attr/nonnull.h +enc/big5.$(OBJEXT): internal/attr/noreturn.h +enc/big5.$(OBJEXT): internal/attr/pure.h +enc/big5.$(OBJEXT): internal/attr/restrict.h +enc/big5.$(OBJEXT): internal/attr/returns_nonnull.h +enc/big5.$(OBJEXT): internal/attr/warning.h +enc/big5.$(OBJEXT): internal/cast.h +enc/big5.$(OBJEXT): internal/compiler_is.h +enc/big5.$(OBJEXT): internal/compiler_is/apple.h +enc/big5.$(OBJEXT): internal/compiler_is/clang.h +enc/big5.$(OBJEXT): internal/compiler_is/gcc.h +enc/big5.$(OBJEXT): internal/compiler_is/intel.h +enc/big5.$(OBJEXT): internal/compiler_is/msvc.h +enc/big5.$(OBJEXT): internal/compiler_is/sunpro.h +enc/big5.$(OBJEXT): internal/compiler_since.h +enc/big5.$(OBJEXT): internal/config.h +enc/big5.$(OBJEXT): internal/dllexport.h +enc/big5.$(OBJEXT): internal/dosish.h +enc/big5.$(OBJEXT): internal/has/attribute.h +enc/big5.$(OBJEXT): internal/has/builtin.h +enc/big5.$(OBJEXT): internal/has/c_attribute.h +enc/big5.$(OBJEXT): internal/has/cpp_attribute.h +enc/big5.$(OBJEXT): internal/has/declspec_attribute.h +enc/big5.$(OBJEXT): internal/has/extension.h +enc/big5.$(OBJEXT): internal/has/feature.h +enc/big5.$(OBJEXT): internal/has/warning.h +enc/big5.$(OBJEXT): internal/stdalign.h +enc/big5.$(OBJEXT): internal/stdbool.h +enc/big5.$(OBJEXT): internal/warning_push.h +enc/big5.$(OBJEXT): internal/xmalloc.h enc/big5.$(OBJEXT): missing.h enc/big5.$(OBJEXT): onigmo.h +enc/cesu_8.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/cesu_8.$(OBJEXT): $(top_srcdir)/encindex.h enc/cesu_8.$(OBJEXT): $(top_srcdir)/regenc.h +enc/cesu_8.$(OBJEXT): assert.h +enc/cesu_8.$(OBJEXT): backward.h +enc/cesu_8.$(OBJEXT): backward/2/assume.h +enc/cesu_8.$(OBJEXT): backward/2/attributes.h +enc/cesu_8.$(OBJEXT): backward/2/bool.h +enc/cesu_8.$(OBJEXT): backward/2/inttypes.h +enc/cesu_8.$(OBJEXT): backward/2/limits.h +enc/cesu_8.$(OBJEXT): backward/2/long_long.h +enc/cesu_8.$(OBJEXT): backward/2/stdalign.h +enc/cesu_8.$(OBJEXT): backward/2/stdarg.h enc/cesu_8.$(OBJEXT): config.h enc/cesu_8.$(OBJEXT): defines.h enc/cesu_8.$(OBJEXT): enc/cesu_8.c +enc/cesu_8.$(OBJEXT): encoding.h +enc/cesu_8.$(OBJEXT): intern.h +enc/cesu_8.$(OBJEXT): internal/anyargs.h +enc/cesu_8.$(OBJEXT): internal/arithmetic.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/char.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/double.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/fixnum.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/gid_t.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/int.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/long.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/long_long.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/mode_t.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/off_t.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/pid_t.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/short.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/size_t.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/cesu_8.$(OBJEXT): internal/arithmetic/uid_t.h +enc/cesu_8.$(OBJEXT): internal/assume.h +enc/cesu_8.$(OBJEXT): internal/attr/alloc_size.h +enc/cesu_8.$(OBJEXT): internal/attr/artificial.h +enc/cesu_8.$(OBJEXT): internal/attr/cold.h +enc/cesu_8.$(OBJEXT): internal/attr/const.h +enc/cesu_8.$(OBJEXT): internal/attr/constexpr.h +enc/cesu_8.$(OBJEXT): internal/attr/deprecated.h +enc/cesu_8.$(OBJEXT): internal/attr/diagnose_if.h +enc/cesu_8.$(OBJEXT): internal/attr/enum_extensibility.h +enc/cesu_8.$(OBJEXT): internal/attr/error.h +enc/cesu_8.$(OBJEXT): internal/attr/flag_enum.h +enc/cesu_8.$(OBJEXT): internal/attr/forceinline.h +enc/cesu_8.$(OBJEXT): internal/attr/format.h +enc/cesu_8.$(OBJEXT): internal/attr/maybe_unused.h +enc/cesu_8.$(OBJEXT): internal/attr/noalias.h +enc/cesu_8.$(OBJEXT): internal/attr/nodiscard.h +enc/cesu_8.$(OBJEXT): internal/attr/noexcept.h +enc/cesu_8.$(OBJEXT): internal/attr/noinline.h +enc/cesu_8.$(OBJEXT): internal/attr/nonnull.h +enc/cesu_8.$(OBJEXT): internal/attr/noreturn.h +enc/cesu_8.$(OBJEXT): internal/attr/pure.h +enc/cesu_8.$(OBJEXT): internal/attr/restrict.h +enc/cesu_8.$(OBJEXT): internal/attr/returns_nonnull.h +enc/cesu_8.$(OBJEXT): internal/attr/warning.h +enc/cesu_8.$(OBJEXT): internal/attr/weakref.h +enc/cesu_8.$(OBJEXT): internal/cast.h +enc/cesu_8.$(OBJEXT): internal/compiler_is.h +enc/cesu_8.$(OBJEXT): internal/compiler_is/apple.h +enc/cesu_8.$(OBJEXT): internal/compiler_is/clang.h +enc/cesu_8.$(OBJEXT): internal/compiler_is/gcc.h +enc/cesu_8.$(OBJEXT): internal/compiler_is/intel.h +enc/cesu_8.$(OBJEXT): internal/compiler_is/msvc.h +enc/cesu_8.$(OBJEXT): internal/compiler_is/sunpro.h +enc/cesu_8.$(OBJEXT): internal/compiler_since.h +enc/cesu_8.$(OBJEXT): internal/config.h +enc/cesu_8.$(OBJEXT): internal/constant_p.h +enc/cesu_8.$(OBJEXT): internal/core.h +enc/cesu_8.$(OBJEXT): internal/core/rarray.h +enc/cesu_8.$(OBJEXT): internal/core/rbasic.h +enc/cesu_8.$(OBJEXT): internal/core/rbignum.h +enc/cesu_8.$(OBJEXT): internal/core/rclass.h +enc/cesu_8.$(OBJEXT): internal/core/rdata.h +enc/cesu_8.$(OBJEXT): internal/core/rfile.h +enc/cesu_8.$(OBJEXT): internal/core/rhash.h +enc/cesu_8.$(OBJEXT): internal/core/robject.h +enc/cesu_8.$(OBJEXT): internal/core/rregexp.h +enc/cesu_8.$(OBJEXT): internal/core/rstring.h +enc/cesu_8.$(OBJEXT): internal/core/rstruct.h +enc/cesu_8.$(OBJEXT): internal/core/rtypeddata.h +enc/cesu_8.$(OBJEXT): internal/ctype.h +enc/cesu_8.$(OBJEXT): internal/dllexport.h +enc/cesu_8.$(OBJEXT): internal/dosish.h +enc/cesu_8.$(OBJEXT): internal/encoding/coderange.h +enc/cesu_8.$(OBJEXT): internal/encoding/ctype.h +enc/cesu_8.$(OBJEXT): internal/encoding/encoding.h +enc/cesu_8.$(OBJEXT): internal/encoding/pathname.h +enc/cesu_8.$(OBJEXT): internal/encoding/re.h +enc/cesu_8.$(OBJEXT): internal/encoding/sprintf.h +enc/cesu_8.$(OBJEXT): internal/encoding/string.h +enc/cesu_8.$(OBJEXT): internal/encoding/symbol.h +enc/cesu_8.$(OBJEXT): internal/encoding/transcode.h +enc/cesu_8.$(OBJEXT): internal/error.h +enc/cesu_8.$(OBJEXT): internal/eval.h +enc/cesu_8.$(OBJEXT): internal/event.h +enc/cesu_8.$(OBJEXT): internal/fl_type.h +enc/cesu_8.$(OBJEXT): internal/gc.h +enc/cesu_8.$(OBJEXT): internal/glob.h +enc/cesu_8.$(OBJEXT): internal/globals.h +enc/cesu_8.$(OBJEXT): internal/has/attribute.h +enc/cesu_8.$(OBJEXT): internal/has/builtin.h +enc/cesu_8.$(OBJEXT): internal/has/c_attribute.h +enc/cesu_8.$(OBJEXT): internal/has/cpp_attribute.h +enc/cesu_8.$(OBJEXT): internal/has/declspec_attribute.h +enc/cesu_8.$(OBJEXT): internal/has/extension.h +enc/cesu_8.$(OBJEXT): internal/has/feature.h +enc/cesu_8.$(OBJEXT): internal/has/warning.h +enc/cesu_8.$(OBJEXT): internal/intern/array.h +enc/cesu_8.$(OBJEXT): internal/intern/bignum.h +enc/cesu_8.$(OBJEXT): internal/intern/class.h +enc/cesu_8.$(OBJEXT): internal/intern/compar.h +enc/cesu_8.$(OBJEXT): internal/intern/complex.h +enc/cesu_8.$(OBJEXT): internal/intern/cont.h +enc/cesu_8.$(OBJEXT): internal/intern/dir.h +enc/cesu_8.$(OBJEXT): internal/intern/enum.h +enc/cesu_8.$(OBJEXT): internal/intern/enumerator.h +enc/cesu_8.$(OBJEXT): internal/intern/error.h +enc/cesu_8.$(OBJEXT): internal/intern/eval.h +enc/cesu_8.$(OBJEXT): internal/intern/file.h +enc/cesu_8.$(OBJEXT): internal/intern/gc.h +enc/cesu_8.$(OBJEXT): internal/intern/hash.h +enc/cesu_8.$(OBJEXT): internal/intern/io.h +enc/cesu_8.$(OBJEXT): internal/intern/load.h +enc/cesu_8.$(OBJEXT): internal/intern/marshal.h +enc/cesu_8.$(OBJEXT): internal/intern/numeric.h +enc/cesu_8.$(OBJEXT): internal/intern/object.h +enc/cesu_8.$(OBJEXT): internal/intern/parse.h +enc/cesu_8.$(OBJEXT): internal/intern/proc.h +enc/cesu_8.$(OBJEXT): internal/intern/process.h +enc/cesu_8.$(OBJEXT): internal/intern/random.h +enc/cesu_8.$(OBJEXT): internal/intern/range.h +enc/cesu_8.$(OBJEXT): internal/intern/rational.h +enc/cesu_8.$(OBJEXT): internal/intern/re.h +enc/cesu_8.$(OBJEXT): internal/intern/ruby.h +enc/cesu_8.$(OBJEXT): internal/intern/select.h +enc/cesu_8.$(OBJEXT): internal/intern/select/largesize.h +enc/cesu_8.$(OBJEXT): internal/intern/signal.h +enc/cesu_8.$(OBJEXT): internal/intern/sprintf.h +enc/cesu_8.$(OBJEXT): internal/intern/string.h +enc/cesu_8.$(OBJEXT): internal/intern/struct.h +enc/cesu_8.$(OBJEXT): internal/intern/thread.h +enc/cesu_8.$(OBJEXT): internal/intern/time.h +enc/cesu_8.$(OBJEXT): internal/intern/variable.h +enc/cesu_8.$(OBJEXT): internal/intern/vm.h +enc/cesu_8.$(OBJEXT): internal/interpreter.h +enc/cesu_8.$(OBJEXT): internal/iterator.h +enc/cesu_8.$(OBJEXT): internal/memory.h +enc/cesu_8.$(OBJEXT): internal/method.h +enc/cesu_8.$(OBJEXT): internal/module.h +enc/cesu_8.$(OBJEXT): internal/newobj.h +enc/cesu_8.$(OBJEXT): internal/rgengc.h +enc/cesu_8.$(OBJEXT): internal/scan_args.h +enc/cesu_8.$(OBJEXT): internal/special_consts.h +enc/cesu_8.$(OBJEXT): internal/static_assert.h +enc/cesu_8.$(OBJEXT): internal/stdalign.h +enc/cesu_8.$(OBJEXT): internal/stdbool.h +enc/cesu_8.$(OBJEXT): internal/symbol.h +enc/cesu_8.$(OBJEXT): internal/value.h +enc/cesu_8.$(OBJEXT): internal/value_type.h +enc/cesu_8.$(OBJEXT): internal/variable.h +enc/cesu_8.$(OBJEXT): internal/warning_push.h +enc/cesu_8.$(OBJEXT): internal/xmalloc.h enc/cesu_8.$(OBJEXT): missing.h enc/cesu_8.$(OBJEXT): onigmo.h +enc/cesu_8.$(OBJEXT): oniguruma.h +enc/cesu_8.$(OBJEXT): st.h +enc/cesu_8.$(OBJEXT): subst.h enc/cp949.$(OBJEXT): $(top_srcdir)/regenc.h +enc/cp949.$(OBJEXT): assert.h +enc/cp949.$(OBJEXT): backward/2/assume.h +enc/cp949.$(OBJEXT): backward/2/attributes.h +enc/cp949.$(OBJEXT): backward/2/bool.h +enc/cp949.$(OBJEXT): backward/2/long_long.h +enc/cp949.$(OBJEXT): backward/2/stdalign.h +enc/cp949.$(OBJEXT): backward/2/stdarg.h enc/cp949.$(OBJEXT): config.h enc/cp949.$(OBJEXT): defines.h enc/cp949.$(OBJEXT): enc/cp949.c +enc/cp949.$(OBJEXT): internal/assume.h +enc/cp949.$(OBJEXT): internal/attr/alloc_size.h +enc/cp949.$(OBJEXT): internal/attr/cold.h +enc/cp949.$(OBJEXT): internal/attr/const.h +enc/cp949.$(OBJEXT): internal/attr/deprecated.h +enc/cp949.$(OBJEXT): internal/attr/error.h +enc/cp949.$(OBJEXT): internal/attr/forceinline.h +enc/cp949.$(OBJEXT): internal/attr/format.h +enc/cp949.$(OBJEXT): internal/attr/maybe_unused.h +enc/cp949.$(OBJEXT): internal/attr/nodiscard.h +enc/cp949.$(OBJEXT): internal/attr/noexcept.h +enc/cp949.$(OBJEXT): internal/attr/noinline.h +enc/cp949.$(OBJEXT): internal/attr/nonnull.h +enc/cp949.$(OBJEXT): internal/attr/noreturn.h +enc/cp949.$(OBJEXT): internal/attr/pure.h +enc/cp949.$(OBJEXT): internal/attr/restrict.h +enc/cp949.$(OBJEXT): internal/attr/returns_nonnull.h +enc/cp949.$(OBJEXT): internal/attr/warning.h +enc/cp949.$(OBJEXT): internal/cast.h +enc/cp949.$(OBJEXT): internal/compiler_is.h +enc/cp949.$(OBJEXT): internal/compiler_is/apple.h +enc/cp949.$(OBJEXT): internal/compiler_is/clang.h +enc/cp949.$(OBJEXT): internal/compiler_is/gcc.h +enc/cp949.$(OBJEXT): internal/compiler_is/intel.h +enc/cp949.$(OBJEXT): internal/compiler_is/msvc.h +enc/cp949.$(OBJEXT): internal/compiler_is/sunpro.h +enc/cp949.$(OBJEXT): internal/compiler_since.h +enc/cp949.$(OBJEXT): internal/config.h +enc/cp949.$(OBJEXT): internal/dllexport.h +enc/cp949.$(OBJEXT): internal/dosish.h +enc/cp949.$(OBJEXT): internal/has/attribute.h +enc/cp949.$(OBJEXT): internal/has/builtin.h +enc/cp949.$(OBJEXT): internal/has/c_attribute.h +enc/cp949.$(OBJEXT): internal/has/cpp_attribute.h +enc/cp949.$(OBJEXT): internal/has/declspec_attribute.h +enc/cp949.$(OBJEXT): internal/has/extension.h +enc/cp949.$(OBJEXT): internal/has/feature.h +enc/cp949.$(OBJEXT): internal/has/warning.h +enc/cp949.$(OBJEXT): internal/stdalign.h +enc/cp949.$(OBJEXT): internal/stdbool.h +enc/cp949.$(OBJEXT): internal/warning_push.h +enc/cp949.$(OBJEXT): internal/xmalloc.h enc/cp949.$(OBJEXT): missing.h enc/cp949.$(OBJEXT): onigmo.h enc/emacs_mule.$(OBJEXT): $(top_srcdir)/regenc.h +enc/emacs_mule.$(OBJEXT): assert.h +enc/emacs_mule.$(OBJEXT): backward/2/assume.h +enc/emacs_mule.$(OBJEXT): backward/2/attributes.h +enc/emacs_mule.$(OBJEXT): backward/2/bool.h +enc/emacs_mule.$(OBJEXT): backward/2/long_long.h +enc/emacs_mule.$(OBJEXT): backward/2/stdalign.h +enc/emacs_mule.$(OBJEXT): backward/2/stdarg.h enc/emacs_mule.$(OBJEXT): config.h enc/emacs_mule.$(OBJEXT): defines.h enc/emacs_mule.$(OBJEXT): enc/emacs_mule.c +enc/emacs_mule.$(OBJEXT): internal/assume.h +enc/emacs_mule.$(OBJEXT): internal/attr/alloc_size.h +enc/emacs_mule.$(OBJEXT): internal/attr/cold.h +enc/emacs_mule.$(OBJEXT): internal/attr/const.h +enc/emacs_mule.$(OBJEXT): internal/attr/deprecated.h +enc/emacs_mule.$(OBJEXT): internal/attr/error.h +enc/emacs_mule.$(OBJEXT): internal/attr/forceinline.h +enc/emacs_mule.$(OBJEXT): internal/attr/format.h +enc/emacs_mule.$(OBJEXT): internal/attr/maybe_unused.h +enc/emacs_mule.$(OBJEXT): internal/attr/nodiscard.h +enc/emacs_mule.$(OBJEXT): internal/attr/noexcept.h +enc/emacs_mule.$(OBJEXT): internal/attr/noinline.h +enc/emacs_mule.$(OBJEXT): internal/attr/nonnull.h +enc/emacs_mule.$(OBJEXT): internal/attr/noreturn.h +enc/emacs_mule.$(OBJEXT): internal/attr/pure.h +enc/emacs_mule.$(OBJEXT): internal/attr/restrict.h +enc/emacs_mule.$(OBJEXT): internal/attr/returns_nonnull.h +enc/emacs_mule.$(OBJEXT): internal/attr/warning.h +enc/emacs_mule.$(OBJEXT): internal/cast.h +enc/emacs_mule.$(OBJEXT): internal/compiler_is.h +enc/emacs_mule.$(OBJEXT): internal/compiler_is/apple.h +enc/emacs_mule.$(OBJEXT): internal/compiler_is/clang.h +enc/emacs_mule.$(OBJEXT): internal/compiler_is/gcc.h +enc/emacs_mule.$(OBJEXT): internal/compiler_is/intel.h +enc/emacs_mule.$(OBJEXT): internal/compiler_is/msvc.h +enc/emacs_mule.$(OBJEXT): internal/compiler_is/sunpro.h +enc/emacs_mule.$(OBJEXT): internal/compiler_since.h +enc/emacs_mule.$(OBJEXT): internal/config.h +enc/emacs_mule.$(OBJEXT): internal/dllexport.h +enc/emacs_mule.$(OBJEXT): internal/dosish.h +enc/emacs_mule.$(OBJEXT): internal/has/attribute.h +enc/emacs_mule.$(OBJEXT): internal/has/builtin.h +enc/emacs_mule.$(OBJEXT): internal/has/c_attribute.h +enc/emacs_mule.$(OBJEXT): internal/has/cpp_attribute.h +enc/emacs_mule.$(OBJEXT): internal/has/declspec_attribute.h +enc/emacs_mule.$(OBJEXT): internal/has/extension.h +enc/emacs_mule.$(OBJEXT): internal/has/feature.h +enc/emacs_mule.$(OBJEXT): internal/has/warning.h +enc/emacs_mule.$(OBJEXT): internal/stdalign.h +enc/emacs_mule.$(OBJEXT): internal/stdbool.h +enc/emacs_mule.$(OBJEXT): internal/warning_push.h +enc/emacs_mule.$(OBJEXT): internal/xmalloc.h enc/emacs_mule.$(OBJEXT): missing.h enc/emacs_mule.$(OBJEXT): onigmo.h -enc/encdb.$(OBJEXT): $(hdrdir)/ruby.h enc/encdb.$(OBJEXT): $(hdrdir)/ruby/ruby.h -enc/encdb.$(OBJEXT): $(top_srcdir)/internal.h +enc/encdb.$(OBJEXT): $(top_srcdir)/internal/encoding.h enc/encdb.$(OBJEXT): assert.h enc/encdb.$(OBJEXT): backward.h +enc/encdb.$(OBJEXT): backward/2/assume.h +enc/encdb.$(OBJEXT): backward/2/attributes.h +enc/encdb.$(OBJEXT): backward/2/bool.h +enc/encdb.$(OBJEXT): backward/2/inttypes.h +enc/encdb.$(OBJEXT): backward/2/limits.h +enc/encdb.$(OBJEXT): backward/2/long_long.h +enc/encdb.$(OBJEXT): backward/2/stdalign.h +enc/encdb.$(OBJEXT): backward/2/stdarg.h enc/encdb.$(OBJEXT): config.h enc/encdb.$(OBJEXT): defines.h enc/encdb.$(OBJEXT): enc/encdb.c enc/encdb.$(OBJEXT): encdb.h +enc/encdb.$(OBJEXT): encoding.h enc/encdb.$(OBJEXT): intern.h +enc/encdb.$(OBJEXT): internal/anyargs.h +enc/encdb.$(OBJEXT): internal/arithmetic.h +enc/encdb.$(OBJEXT): internal/arithmetic/char.h +enc/encdb.$(OBJEXT): internal/arithmetic/double.h +enc/encdb.$(OBJEXT): internal/arithmetic/fixnum.h +enc/encdb.$(OBJEXT): internal/arithmetic/gid_t.h +enc/encdb.$(OBJEXT): internal/arithmetic/int.h +enc/encdb.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/encdb.$(OBJEXT): internal/arithmetic/long.h +enc/encdb.$(OBJEXT): internal/arithmetic/long_long.h +enc/encdb.$(OBJEXT): internal/arithmetic/mode_t.h +enc/encdb.$(OBJEXT): internal/arithmetic/off_t.h +enc/encdb.$(OBJEXT): internal/arithmetic/pid_t.h +enc/encdb.$(OBJEXT): internal/arithmetic/short.h +enc/encdb.$(OBJEXT): internal/arithmetic/size_t.h +enc/encdb.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/encdb.$(OBJEXT): internal/arithmetic/uid_t.h +enc/encdb.$(OBJEXT): internal/assume.h +enc/encdb.$(OBJEXT): internal/attr/alloc_size.h +enc/encdb.$(OBJEXT): internal/attr/artificial.h +enc/encdb.$(OBJEXT): internal/attr/cold.h +enc/encdb.$(OBJEXT): internal/attr/const.h +enc/encdb.$(OBJEXT): internal/attr/constexpr.h +enc/encdb.$(OBJEXT): internal/attr/deprecated.h +enc/encdb.$(OBJEXT): internal/attr/diagnose_if.h +enc/encdb.$(OBJEXT): internal/attr/enum_extensibility.h +enc/encdb.$(OBJEXT): internal/attr/error.h +enc/encdb.$(OBJEXT): internal/attr/flag_enum.h +enc/encdb.$(OBJEXT): internal/attr/forceinline.h +enc/encdb.$(OBJEXT): internal/attr/format.h +enc/encdb.$(OBJEXT): internal/attr/maybe_unused.h +enc/encdb.$(OBJEXT): internal/attr/noalias.h +enc/encdb.$(OBJEXT): internal/attr/nodiscard.h +enc/encdb.$(OBJEXT): internal/attr/noexcept.h +enc/encdb.$(OBJEXT): internal/attr/noinline.h +enc/encdb.$(OBJEXT): internal/attr/nonnull.h +enc/encdb.$(OBJEXT): internal/attr/noreturn.h +enc/encdb.$(OBJEXT): internal/attr/pure.h +enc/encdb.$(OBJEXT): internal/attr/restrict.h +enc/encdb.$(OBJEXT): internal/attr/returns_nonnull.h +enc/encdb.$(OBJEXT): internal/attr/warning.h +enc/encdb.$(OBJEXT): internal/attr/weakref.h +enc/encdb.$(OBJEXT): internal/cast.h +enc/encdb.$(OBJEXT): internal/compiler_is.h +enc/encdb.$(OBJEXT): internal/compiler_is/apple.h +enc/encdb.$(OBJEXT): internal/compiler_is/clang.h +enc/encdb.$(OBJEXT): internal/compiler_is/gcc.h +enc/encdb.$(OBJEXT): internal/compiler_is/intel.h +enc/encdb.$(OBJEXT): internal/compiler_is/msvc.h +enc/encdb.$(OBJEXT): internal/compiler_is/sunpro.h +enc/encdb.$(OBJEXT): internal/compiler_since.h +enc/encdb.$(OBJEXT): internal/config.h +enc/encdb.$(OBJEXT): internal/constant_p.h +enc/encdb.$(OBJEXT): internal/core.h +enc/encdb.$(OBJEXT): internal/core/rarray.h +enc/encdb.$(OBJEXT): internal/core/rbasic.h +enc/encdb.$(OBJEXT): internal/core/rbignum.h +enc/encdb.$(OBJEXT): internal/core/rclass.h +enc/encdb.$(OBJEXT): internal/core/rdata.h +enc/encdb.$(OBJEXT): internal/core/rfile.h +enc/encdb.$(OBJEXT): internal/core/rhash.h +enc/encdb.$(OBJEXT): internal/core/robject.h +enc/encdb.$(OBJEXT): internal/core/rregexp.h +enc/encdb.$(OBJEXT): internal/core/rstring.h +enc/encdb.$(OBJEXT): internal/core/rstruct.h +enc/encdb.$(OBJEXT): internal/core/rtypeddata.h +enc/encdb.$(OBJEXT): internal/ctype.h +enc/encdb.$(OBJEXT): internal/dllexport.h +enc/encdb.$(OBJEXT): internal/dosish.h +enc/encdb.$(OBJEXT): internal/encoding/coderange.h +enc/encdb.$(OBJEXT): internal/encoding/ctype.h +enc/encdb.$(OBJEXT): internal/encoding/encoding.h +enc/encdb.$(OBJEXT): internal/encoding/pathname.h +enc/encdb.$(OBJEXT): internal/encoding/re.h +enc/encdb.$(OBJEXT): internal/encoding/sprintf.h +enc/encdb.$(OBJEXT): internal/encoding/string.h +enc/encdb.$(OBJEXT): internal/encoding/symbol.h +enc/encdb.$(OBJEXT): internal/encoding/transcode.h +enc/encdb.$(OBJEXT): internal/error.h +enc/encdb.$(OBJEXT): internal/eval.h +enc/encdb.$(OBJEXT): internal/event.h +enc/encdb.$(OBJEXT): internal/fl_type.h +enc/encdb.$(OBJEXT): internal/gc.h +enc/encdb.$(OBJEXT): internal/glob.h +enc/encdb.$(OBJEXT): internal/globals.h +enc/encdb.$(OBJEXT): internal/has/attribute.h +enc/encdb.$(OBJEXT): internal/has/builtin.h +enc/encdb.$(OBJEXT): internal/has/c_attribute.h +enc/encdb.$(OBJEXT): internal/has/cpp_attribute.h +enc/encdb.$(OBJEXT): internal/has/declspec_attribute.h +enc/encdb.$(OBJEXT): internal/has/extension.h +enc/encdb.$(OBJEXT): internal/has/feature.h +enc/encdb.$(OBJEXT): internal/has/warning.h +enc/encdb.$(OBJEXT): internal/intern/array.h +enc/encdb.$(OBJEXT): internal/intern/bignum.h +enc/encdb.$(OBJEXT): internal/intern/class.h +enc/encdb.$(OBJEXT): internal/intern/compar.h +enc/encdb.$(OBJEXT): internal/intern/complex.h +enc/encdb.$(OBJEXT): internal/intern/cont.h +enc/encdb.$(OBJEXT): internal/intern/dir.h +enc/encdb.$(OBJEXT): internal/intern/enum.h +enc/encdb.$(OBJEXT): internal/intern/enumerator.h +enc/encdb.$(OBJEXT): internal/intern/error.h +enc/encdb.$(OBJEXT): internal/intern/eval.h +enc/encdb.$(OBJEXT): internal/intern/file.h +enc/encdb.$(OBJEXT): internal/intern/gc.h +enc/encdb.$(OBJEXT): internal/intern/hash.h +enc/encdb.$(OBJEXT): internal/intern/io.h +enc/encdb.$(OBJEXT): internal/intern/load.h +enc/encdb.$(OBJEXT): internal/intern/marshal.h +enc/encdb.$(OBJEXT): internal/intern/numeric.h +enc/encdb.$(OBJEXT): internal/intern/object.h +enc/encdb.$(OBJEXT): internal/intern/parse.h +enc/encdb.$(OBJEXT): internal/intern/proc.h +enc/encdb.$(OBJEXT): internal/intern/process.h +enc/encdb.$(OBJEXT): internal/intern/random.h +enc/encdb.$(OBJEXT): internal/intern/range.h +enc/encdb.$(OBJEXT): internal/intern/rational.h +enc/encdb.$(OBJEXT): internal/intern/re.h +enc/encdb.$(OBJEXT): internal/intern/ruby.h +enc/encdb.$(OBJEXT): internal/intern/select.h +enc/encdb.$(OBJEXT): internal/intern/select/largesize.h +enc/encdb.$(OBJEXT): internal/intern/signal.h +enc/encdb.$(OBJEXT): internal/intern/sprintf.h +enc/encdb.$(OBJEXT): internal/intern/string.h +enc/encdb.$(OBJEXT): internal/intern/struct.h +enc/encdb.$(OBJEXT): internal/intern/thread.h +enc/encdb.$(OBJEXT): internal/intern/time.h +enc/encdb.$(OBJEXT): internal/intern/variable.h +enc/encdb.$(OBJEXT): internal/intern/vm.h +enc/encdb.$(OBJEXT): internal/interpreter.h +enc/encdb.$(OBJEXT): internal/iterator.h +enc/encdb.$(OBJEXT): internal/memory.h +enc/encdb.$(OBJEXT): internal/method.h +enc/encdb.$(OBJEXT): internal/module.h +enc/encdb.$(OBJEXT): internal/newobj.h +enc/encdb.$(OBJEXT): internal/rgengc.h +enc/encdb.$(OBJEXT): internal/scan_args.h +enc/encdb.$(OBJEXT): internal/special_consts.h +enc/encdb.$(OBJEXT): internal/static_assert.h +enc/encdb.$(OBJEXT): internal/stdalign.h +enc/encdb.$(OBJEXT): internal/stdbool.h +enc/encdb.$(OBJEXT): internal/symbol.h +enc/encdb.$(OBJEXT): internal/value.h +enc/encdb.$(OBJEXT): internal/value_type.h +enc/encdb.$(OBJEXT): internal/variable.h +enc/encdb.$(OBJEXT): internal/warning_push.h +enc/encdb.$(OBJEXT): internal/xmalloc.h enc/encdb.$(OBJEXT): missing.h +enc/encdb.$(OBJEXT): onigmo.h +enc/encdb.$(OBJEXT): oniguruma.h enc/encdb.$(OBJEXT): st.h enc/encdb.$(OBJEXT): subst.h enc/euc_jp.$(OBJEXT): $(top_srcdir)/regenc.h +enc/euc_jp.$(OBJEXT): assert.h +enc/euc_jp.$(OBJEXT): backward/2/assume.h +enc/euc_jp.$(OBJEXT): backward/2/attributes.h +enc/euc_jp.$(OBJEXT): backward/2/bool.h +enc/euc_jp.$(OBJEXT): backward/2/long_long.h +enc/euc_jp.$(OBJEXT): backward/2/stdalign.h +enc/euc_jp.$(OBJEXT): backward/2/stdarg.h enc/euc_jp.$(OBJEXT): config.h enc/euc_jp.$(OBJEXT): defines.h enc/euc_jp.$(OBJEXT): enc/euc_jp.c enc/euc_jp.$(OBJEXT): enc/jis/props.h enc/euc_jp.$(OBJEXT): enc/jis/props.kwd +enc/euc_jp.$(OBJEXT): internal/assume.h +enc/euc_jp.$(OBJEXT): internal/attr/alloc_size.h +enc/euc_jp.$(OBJEXT): internal/attr/cold.h +enc/euc_jp.$(OBJEXT): internal/attr/const.h +enc/euc_jp.$(OBJEXT): internal/attr/deprecated.h +enc/euc_jp.$(OBJEXT): internal/attr/error.h +enc/euc_jp.$(OBJEXT): internal/attr/forceinline.h +enc/euc_jp.$(OBJEXT): internal/attr/format.h +enc/euc_jp.$(OBJEXT): internal/attr/maybe_unused.h +enc/euc_jp.$(OBJEXT): internal/attr/nodiscard.h +enc/euc_jp.$(OBJEXT): internal/attr/noexcept.h +enc/euc_jp.$(OBJEXT): internal/attr/noinline.h +enc/euc_jp.$(OBJEXT): internal/attr/nonnull.h +enc/euc_jp.$(OBJEXT): internal/attr/noreturn.h +enc/euc_jp.$(OBJEXT): internal/attr/pure.h +enc/euc_jp.$(OBJEXT): internal/attr/restrict.h +enc/euc_jp.$(OBJEXT): internal/attr/returns_nonnull.h +enc/euc_jp.$(OBJEXT): internal/attr/warning.h +enc/euc_jp.$(OBJEXT): internal/cast.h +enc/euc_jp.$(OBJEXT): internal/compiler_is.h +enc/euc_jp.$(OBJEXT): internal/compiler_is/apple.h +enc/euc_jp.$(OBJEXT): internal/compiler_is/clang.h +enc/euc_jp.$(OBJEXT): internal/compiler_is/gcc.h +enc/euc_jp.$(OBJEXT): internal/compiler_is/intel.h +enc/euc_jp.$(OBJEXT): internal/compiler_is/msvc.h +enc/euc_jp.$(OBJEXT): internal/compiler_is/sunpro.h +enc/euc_jp.$(OBJEXT): internal/compiler_since.h +enc/euc_jp.$(OBJEXT): internal/config.h +enc/euc_jp.$(OBJEXT): internal/dllexport.h +enc/euc_jp.$(OBJEXT): internal/dosish.h +enc/euc_jp.$(OBJEXT): internal/has/attribute.h +enc/euc_jp.$(OBJEXT): internal/has/builtin.h +enc/euc_jp.$(OBJEXT): internal/has/c_attribute.h +enc/euc_jp.$(OBJEXT): internal/has/cpp_attribute.h +enc/euc_jp.$(OBJEXT): internal/has/declspec_attribute.h +enc/euc_jp.$(OBJEXT): internal/has/extension.h +enc/euc_jp.$(OBJEXT): internal/has/feature.h +enc/euc_jp.$(OBJEXT): internal/has/warning.h +enc/euc_jp.$(OBJEXT): internal/stdalign.h +enc/euc_jp.$(OBJEXT): internal/stdbool.h +enc/euc_jp.$(OBJEXT): internal/warning_push.h +enc/euc_jp.$(OBJEXT): internal/xmalloc.h enc/euc_jp.$(OBJEXT): missing.h enc/euc_jp.$(OBJEXT): onigmo.h enc/euc_kr.$(OBJEXT): $(top_srcdir)/regenc.h +enc/euc_kr.$(OBJEXT): assert.h +enc/euc_kr.$(OBJEXT): backward/2/assume.h +enc/euc_kr.$(OBJEXT): backward/2/attributes.h +enc/euc_kr.$(OBJEXT): backward/2/bool.h +enc/euc_kr.$(OBJEXT): backward/2/long_long.h +enc/euc_kr.$(OBJEXT): backward/2/stdalign.h +enc/euc_kr.$(OBJEXT): backward/2/stdarg.h enc/euc_kr.$(OBJEXT): config.h enc/euc_kr.$(OBJEXT): defines.h enc/euc_kr.$(OBJEXT): enc/euc_kr.c +enc/euc_kr.$(OBJEXT): internal/assume.h +enc/euc_kr.$(OBJEXT): internal/attr/alloc_size.h +enc/euc_kr.$(OBJEXT): internal/attr/cold.h +enc/euc_kr.$(OBJEXT): internal/attr/const.h +enc/euc_kr.$(OBJEXT): internal/attr/deprecated.h +enc/euc_kr.$(OBJEXT): internal/attr/error.h +enc/euc_kr.$(OBJEXT): internal/attr/forceinline.h +enc/euc_kr.$(OBJEXT): internal/attr/format.h +enc/euc_kr.$(OBJEXT): internal/attr/maybe_unused.h +enc/euc_kr.$(OBJEXT): internal/attr/nodiscard.h +enc/euc_kr.$(OBJEXT): internal/attr/noexcept.h +enc/euc_kr.$(OBJEXT): internal/attr/noinline.h +enc/euc_kr.$(OBJEXT): internal/attr/nonnull.h +enc/euc_kr.$(OBJEXT): internal/attr/noreturn.h +enc/euc_kr.$(OBJEXT): internal/attr/pure.h +enc/euc_kr.$(OBJEXT): internal/attr/restrict.h +enc/euc_kr.$(OBJEXT): internal/attr/returns_nonnull.h +enc/euc_kr.$(OBJEXT): internal/attr/warning.h +enc/euc_kr.$(OBJEXT): internal/cast.h +enc/euc_kr.$(OBJEXT): internal/compiler_is.h +enc/euc_kr.$(OBJEXT): internal/compiler_is/apple.h +enc/euc_kr.$(OBJEXT): internal/compiler_is/clang.h +enc/euc_kr.$(OBJEXT): internal/compiler_is/gcc.h +enc/euc_kr.$(OBJEXT): internal/compiler_is/intel.h +enc/euc_kr.$(OBJEXT): internal/compiler_is/msvc.h +enc/euc_kr.$(OBJEXT): internal/compiler_is/sunpro.h +enc/euc_kr.$(OBJEXT): internal/compiler_since.h +enc/euc_kr.$(OBJEXT): internal/config.h +enc/euc_kr.$(OBJEXT): internal/dllexport.h +enc/euc_kr.$(OBJEXT): internal/dosish.h +enc/euc_kr.$(OBJEXT): internal/has/attribute.h +enc/euc_kr.$(OBJEXT): internal/has/builtin.h +enc/euc_kr.$(OBJEXT): internal/has/c_attribute.h +enc/euc_kr.$(OBJEXT): internal/has/cpp_attribute.h +enc/euc_kr.$(OBJEXT): internal/has/declspec_attribute.h +enc/euc_kr.$(OBJEXT): internal/has/extension.h +enc/euc_kr.$(OBJEXT): internal/has/feature.h +enc/euc_kr.$(OBJEXT): internal/has/warning.h +enc/euc_kr.$(OBJEXT): internal/stdalign.h +enc/euc_kr.$(OBJEXT): internal/stdbool.h +enc/euc_kr.$(OBJEXT): internal/warning_push.h +enc/euc_kr.$(OBJEXT): internal/xmalloc.h enc/euc_kr.$(OBJEXT): missing.h enc/euc_kr.$(OBJEXT): onigmo.h enc/euc_tw.$(OBJEXT): $(top_srcdir)/regenc.h +enc/euc_tw.$(OBJEXT): assert.h +enc/euc_tw.$(OBJEXT): backward/2/assume.h +enc/euc_tw.$(OBJEXT): backward/2/attributes.h +enc/euc_tw.$(OBJEXT): backward/2/bool.h +enc/euc_tw.$(OBJEXT): backward/2/long_long.h +enc/euc_tw.$(OBJEXT): backward/2/stdalign.h +enc/euc_tw.$(OBJEXT): backward/2/stdarg.h enc/euc_tw.$(OBJEXT): config.h enc/euc_tw.$(OBJEXT): defines.h enc/euc_tw.$(OBJEXT): enc/euc_tw.c +enc/euc_tw.$(OBJEXT): internal/assume.h +enc/euc_tw.$(OBJEXT): internal/attr/alloc_size.h +enc/euc_tw.$(OBJEXT): internal/attr/cold.h +enc/euc_tw.$(OBJEXT): internal/attr/const.h +enc/euc_tw.$(OBJEXT): internal/attr/deprecated.h +enc/euc_tw.$(OBJEXT): internal/attr/error.h +enc/euc_tw.$(OBJEXT): internal/attr/forceinline.h +enc/euc_tw.$(OBJEXT): internal/attr/format.h +enc/euc_tw.$(OBJEXT): internal/attr/maybe_unused.h +enc/euc_tw.$(OBJEXT): internal/attr/nodiscard.h +enc/euc_tw.$(OBJEXT): internal/attr/noexcept.h +enc/euc_tw.$(OBJEXT): internal/attr/noinline.h +enc/euc_tw.$(OBJEXT): internal/attr/nonnull.h +enc/euc_tw.$(OBJEXT): internal/attr/noreturn.h +enc/euc_tw.$(OBJEXT): internal/attr/pure.h +enc/euc_tw.$(OBJEXT): internal/attr/restrict.h +enc/euc_tw.$(OBJEXT): internal/attr/returns_nonnull.h +enc/euc_tw.$(OBJEXT): internal/attr/warning.h +enc/euc_tw.$(OBJEXT): internal/cast.h +enc/euc_tw.$(OBJEXT): internal/compiler_is.h +enc/euc_tw.$(OBJEXT): internal/compiler_is/apple.h +enc/euc_tw.$(OBJEXT): internal/compiler_is/clang.h +enc/euc_tw.$(OBJEXT): internal/compiler_is/gcc.h +enc/euc_tw.$(OBJEXT): internal/compiler_is/intel.h +enc/euc_tw.$(OBJEXT): internal/compiler_is/msvc.h +enc/euc_tw.$(OBJEXT): internal/compiler_is/sunpro.h +enc/euc_tw.$(OBJEXT): internal/compiler_since.h +enc/euc_tw.$(OBJEXT): internal/config.h +enc/euc_tw.$(OBJEXT): internal/dllexport.h +enc/euc_tw.$(OBJEXT): internal/dosish.h +enc/euc_tw.$(OBJEXT): internal/has/attribute.h +enc/euc_tw.$(OBJEXT): internal/has/builtin.h +enc/euc_tw.$(OBJEXT): internal/has/c_attribute.h +enc/euc_tw.$(OBJEXT): internal/has/cpp_attribute.h +enc/euc_tw.$(OBJEXT): internal/has/declspec_attribute.h +enc/euc_tw.$(OBJEXT): internal/has/extension.h +enc/euc_tw.$(OBJEXT): internal/has/feature.h +enc/euc_tw.$(OBJEXT): internal/has/warning.h +enc/euc_tw.$(OBJEXT): internal/stdalign.h +enc/euc_tw.$(OBJEXT): internal/stdbool.h +enc/euc_tw.$(OBJEXT): internal/warning_push.h +enc/euc_tw.$(OBJEXT): internal/xmalloc.h enc/euc_tw.$(OBJEXT): missing.h enc/euc_tw.$(OBJEXT): onigmo.h enc/gb18030.$(OBJEXT): $(top_srcdir)/regenc.h +enc/gb18030.$(OBJEXT): assert.h +enc/gb18030.$(OBJEXT): backward/2/assume.h +enc/gb18030.$(OBJEXT): backward/2/attributes.h +enc/gb18030.$(OBJEXT): backward/2/bool.h +enc/gb18030.$(OBJEXT): backward/2/long_long.h +enc/gb18030.$(OBJEXT): backward/2/stdalign.h +enc/gb18030.$(OBJEXT): backward/2/stdarg.h enc/gb18030.$(OBJEXT): config.h enc/gb18030.$(OBJEXT): defines.h enc/gb18030.$(OBJEXT): enc/gb18030.c +enc/gb18030.$(OBJEXT): internal/assume.h +enc/gb18030.$(OBJEXT): internal/attr/alloc_size.h +enc/gb18030.$(OBJEXT): internal/attr/cold.h +enc/gb18030.$(OBJEXT): internal/attr/const.h +enc/gb18030.$(OBJEXT): internal/attr/deprecated.h +enc/gb18030.$(OBJEXT): internal/attr/error.h +enc/gb18030.$(OBJEXT): internal/attr/forceinline.h +enc/gb18030.$(OBJEXT): internal/attr/format.h +enc/gb18030.$(OBJEXT): internal/attr/maybe_unused.h +enc/gb18030.$(OBJEXT): internal/attr/nodiscard.h +enc/gb18030.$(OBJEXT): internal/attr/noexcept.h +enc/gb18030.$(OBJEXT): internal/attr/noinline.h +enc/gb18030.$(OBJEXT): internal/attr/nonnull.h +enc/gb18030.$(OBJEXT): internal/attr/noreturn.h +enc/gb18030.$(OBJEXT): internal/attr/pure.h +enc/gb18030.$(OBJEXT): internal/attr/restrict.h +enc/gb18030.$(OBJEXT): internal/attr/returns_nonnull.h +enc/gb18030.$(OBJEXT): internal/attr/warning.h +enc/gb18030.$(OBJEXT): internal/cast.h +enc/gb18030.$(OBJEXT): internal/compiler_is.h +enc/gb18030.$(OBJEXT): internal/compiler_is/apple.h +enc/gb18030.$(OBJEXT): internal/compiler_is/clang.h +enc/gb18030.$(OBJEXT): internal/compiler_is/gcc.h +enc/gb18030.$(OBJEXT): internal/compiler_is/intel.h +enc/gb18030.$(OBJEXT): internal/compiler_is/msvc.h +enc/gb18030.$(OBJEXT): internal/compiler_is/sunpro.h +enc/gb18030.$(OBJEXT): internal/compiler_since.h +enc/gb18030.$(OBJEXT): internal/config.h +enc/gb18030.$(OBJEXT): internal/dllexport.h +enc/gb18030.$(OBJEXT): internal/dosish.h +enc/gb18030.$(OBJEXT): internal/has/attribute.h +enc/gb18030.$(OBJEXT): internal/has/builtin.h +enc/gb18030.$(OBJEXT): internal/has/c_attribute.h +enc/gb18030.$(OBJEXT): internal/has/cpp_attribute.h +enc/gb18030.$(OBJEXT): internal/has/declspec_attribute.h +enc/gb18030.$(OBJEXT): internal/has/extension.h +enc/gb18030.$(OBJEXT): internal/has/feature.h +enc/gb18030.$(OBJEXT): internal/has/warning.h +enc/gb18030.$(OBJEXT): internal/stdalign.h +enc/gb18030.$(OBJEXT): internal/stdbool.h +enc/gb18030.$(OBJEXT): internal/warning_push.h +enc/gb18030.$(OBJEXT): internal/xmalloc.h enc/gb18030.$(OBJEXT): missing.h enc/gb18030.$(OBJEXT): onigmo.h enc/gb2312.$(OBJEXT): $(top_srcdir)/regenc.h +enc/gb2312.$(OBJEXT): assert.h +enc/gb2312.$(OBJEXT): backward/2/assume.h +enc/gb2312.$(OBJEXT): backward/2/attributes.h +enc/gb2312.$(OBJEXT): backward/2/bool.h +enc/gb2312.$(OBJEXT): backward/2/long_long.h +enc/gb2312.$(OBJEXT): backward/2/stdalign.h +enc/gb2312.$(OBJEXT): backward/2/stdarg.h enc/gb2312.$(OBJEXT): config.h enc/gb2312.$(OBJEXT): defines.h enc/gb2312.$(OBJEXT): enc/gb2312.c +enc/gb2312.$(OBJEXT): internal/assume.h +enc/gb2312.$(OBJEXT): internal/attr/alloc_size.h +enc/gb2312.$(OBJEXT): internal/attr/cold.h +enc/gb2312.$(OBJEXT): internal/attr/const.h +enc/gb2312.$(OBJEXT): internal/attr/deprecated.h +enc/gb2312.$(OBJEXT): internal/attr/error.h +enc/gb2312.$(OBJEXT): internal/attr/forceinline.h +enc/gb2312.$(OBJEXT): internal/attr/format.h +enc/gb2312.$(OBJEXT): internal/attr/maybe_unused.h +enc/gb2312.$(OBJEXT): internal/attr/nodiscard.h +enc/gb2312.$(OBJEXT): internal/attr/noexcept.h +enc/gb2312.$(OBJEXT): internal/attr/noinline.h +enc/gb2312.$(OBJEXT): internal/attr/nonnull.h +enc/gb2312.$(OBJEXT): internal/attr/noreturn.h +enc/gb2312.$(OBJEXT): internal/attr/pure.h +enc/gb2312.$(OBJEXT): internal/attr/restrict.h +enc/gb2312.$(OBJEXT): internal/attr/returns_nonnull.h +enc/gb2312.$(OBJEXT): internal/attr/warning.h +enc/gb2312.$(OBJEXT): internal/cast.h +enc/gb2312.$(OBJEXT): internal/compiler_is.h +enc/gb2312.$(OBJEXT): internal/compiler_is/apple.h +enc/gb2312.$(OBJEXT): internal/compiler_is/clang.h +enc/gb2312.$(OBJEXT): internal/compiler_is/gcc.h +enc/gb2312.$(OBJEXT): internal/compiler_is/intel.h +enc/gb2312.$(OBJEXT): internal/compiler_is/msvc.h +enc/gb2312.$(OBJEXT): internal/compiler_is/sunpro.h +enc/gb2312.$(OBJEXT): internal/compiler_since.h +enc/gb2312.$(OBJEXT): internal/config.h +enc/gb2312.$(OBJEXT): internal/dllexport.h +enc/gb2312.$(OBJEXT): internal/dosish.h +enc/gb2312.$(OBJEXT): internal/has/attribute.h +enc/gb2312.$(OBJEXT): internal/has/builtin.h +enc/gb2312.$(OBJEXT): internal/has/c_attribute.h +enc/gb2312.$(OBJEXT): internal/has/cpp_attribute.h +enc/gb2312.$(OBJEXT): internal/has/declspec_attribute.h +enc/gb2312.$(OBJEXT): internal/has/extension.h +enc/gb2312.$(OBJEXT): internal/has/feature.h +enc/gb2312.$(OBJEXT): internal/has/warning.h +enc/gb2312.$(OBJEXT): internal/stdalign.h +enc/gb2312.$(OBJEXT): internal/stdbool.h +enc/gb2312.$(OBJEXT): internal/warning_push.h +enc/gb2312.$(OBJEXT): internal/xmalloc.h enc/gb2312.$(OBJEXT): missing.h enc/gb2312.$(OBJEXT): onigmo.h enc/gbk.$(OBJEXT): $(top_srcdir)/regenc.h +enc/gbk.$(OBJEXT): assert.h +enc/gbk.$(OBJEXT): backward/2/assume.h +enc/gbk.$(OBJEXT): backward/2/attributes.h +enc/gbk.$(OBJEXT): backward/2/bool.h +enc/gbk.$(OBJEXT): backward/2/long_long.h +enc/gbk.$(OBJEXT): backward/2/stdalign.h +enc/gbk.$(OBJEXT): backward/2/stdarg.h enc/gbk.$(OBJEXT): config.h enc/gbk.$(OBJEXT): defines.h enc/gbk.$(OBJEXT): enc/gbk.c +enc/gbk.$(OBJEXT): internal/assume.h +enc/gbk.$(OBJEXT): internal/attr/alloc_size.h +enc/gbk.$(OBJEXT): internal/attr/cold.h +enc/gbk.$(OBJEXT): internal/attr/const.h +enc/gbk.$(OBJEXT): internal/attr/deprecated.h +enc/gbk.$(OBJEXT): internal/attr/error.h +enc/gbk.$(OBJEXT): internal/attr/forceinline.h +enc/gbk.$(OBJEXT): internal/attr/format.h +enc/gbk.$(OBJEXT): internal/attr/maybe_unused.h +enc/gbk.$(OBJEXT): internal/attr/nodiscard.h +enc/gbk.$(OBJEXT): internal/attr/noexcept.h +enc/gbk.$(OBJEXT): internal/attr/noinline.h +enc/gbk.$(OBJEXT): internal/attr/nonnull.h +enc/gbk.$(OBJEXT): internal/attr/noreturn.h +enc/gbk.$(OBJEXT): internal/attr/pure.h +enc/gbk.$(OBJEXT): internal/attr/restrict.h +enc/gbk.$(OBJEXT): internal/attr/returns_nonnull.h +enc/gbk.$(OBJEXT): internal/attr/warning.h +enc/gbk.$(OBJEXT): internal/cast.h +enc/gbk.$(OBJEXT): internal/compiler_is.h +enc/gbk.$(OBJEXT): internal/compiler_is/apple.h +enc/gbk.$(OBJEXT): internal/compiler_is/clang.h +enc/gbk.$(OBJEXT): internal/compiler_is/gcc.h +enc/gbk.$(OBJEXT): internal/compiler_is/intel.h +enc/gbk.$(OBJEXT): internal/compiler_is/msvc.h +enc/gbk.$(OBJEXT): internal/compiler_is/sunpro.h +enc/gbk.$(OBJEXT): internal/compiler_since.h +enc/gbk.$(OBJEXT): internal/config.h +enc/gbk.$(OBJEXT): internal/dllexport.h +enc/gbk.$(OBJEXT): internal/dosish.h +enc/gbk.$(OBJEXT): internal/has/attribute.h +enc/gbk.$(OBJEXT): internal/has/builtin.h +enc/gbk.$(OBJEXT): internal/has/c_attribute.h +enc/gbk.$(OBJEXT): internal/has/cpp_attribute.h +enc/gbk.$(OBJEXT): internal/has/declspec_attribute.h +enc/gbk.$(OBJEXT): internal/has/extension.h +enc/gbk.$(OBJEXT): internal/has/feature.h +enc/gbk.$(OBJEXT): internal/has/warning.h +enc/gbk.$(OBJEXT): internal/stdalign.h +enc/gbk.$(OBJEXT): internal/stdbool.h +enc/gbk.$(OBJEXT): internal/warning_push.h +enc/gbk.$(OBJEXT): internal/xmalloc.h enc/gbk.$(OBJEXT): missing.h enc/gbk.$(OBJEXT): onigmo.h enc/iso_8859_1.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_1.$(OBJEXT): assert.h +enc/iso_8859_1.$(OBJEXT): backward/2/assume.h +enc/iso_8859_1.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_1.$(OBJEXT): backward/2/bool.h +enc/iso_8859_1.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_1.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_1.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_1.$(OBJEXT): config.h enc/iso_8859_1.$(OBJEXT): defines.h enc/iso_8859_1.$(OBJEXT): enc/iso_8859.h enc/iso_8859_1.$(OBJEXT): enc/iso_8859_1.c +enc/iso_8859_1.$(OBJEXT): internal/assume.h +enc/iso_8859_1.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_1.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_1.$(OBJEXT): internal/attr/const.h +enc/iso_8859_1.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_1.$(OBJEXT): internal/attr/error.h +enc/iso_8859_1.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_1.$(OBJEXT): internal/attr/format.h +enc/iso_8859_1.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_1.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_1.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_1.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_1.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_1.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_1.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_1.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_1.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_1.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_1.$(OBJEXT): internal/cast.h +enc/iso_8859_1.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_1.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_1.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_1.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_1.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_1.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_1.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_1.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_1.$(OBJEXT): internal/config.h +enc/iso_8859_1.$(OBJEXT): internal/dllexport.h +enc/iso_8859_1.$(OBJEXT): internal/dosish.h +enc/iso_8859_1.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_1.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_1.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_1.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_1.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_1.$(OBJEXT): internal/has/extension.h +enc/iso_8859_1.$(OBJEXT): internal/has/feature.h +enc/iso_8859_1.$(OBJEXT): internal/has/warning.h +enc/iso_8859_1.$(OBJEXT): internal/stdalign.h +enc/iso_8859_1.$(OBJEXT): internal/stdbool.h +enc/iso_8859_1.$(OBJEXT): internal/warning_push.h +enc/iso_8859_1.$(OBJEXT): internal/xmalloc.h enc/iso_8859_1.$(OBJEXT): missing.h enc/iso_8859_1.$(OBJEXT): onigmo.h enc/iso_8859_10.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_10.$(OBJEXT): assert.h +enc/iso_8859_10.$(OBJEXT): backward/2/assume.h +enc/iso_8859_10.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_10.$(OBJEXT): backward/2/bool.h +enc/iso_8859_10.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_10.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_10.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_10.$(OBJEXT): config.h enc/iso_8859_10.$(OBJEXT): defines.h enc/iso_8859_10.$(OBJEXT): enc/iso_8859.h enc/iso_8859_10.$(OBJEXT): enc/iso_8859_10.c +enc/iso_8859_10.$(OBJEXT): internal/assume.h +enc/iso_8859_10.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_10.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_10.$(OBJEXT): internal/attr/const.h +enc/iso_8859_10.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_10.$(OBJEXT): internal/attr/error.h +enc/iso_8859_10.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_10.$(OBJEXT): internal/attr/format.h +enc/iso_8859_10.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_10.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_10.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_10.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_10.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_10.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_10.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_10.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_10.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_10.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_10.$(OBJEXT): internal/cast.h +enc/iso_8859_10.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_10.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_10.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_10.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_10.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_10.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_10.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_10.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_10.$(OBJEXT): internal/config.h +enc/iso_8859_10.$(OBJEXT): internal/dllexport.h +enc/iso_8859_10.$(OBJEXT): internal/dosish.h +enc/iso_8859_10.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_10.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_10.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_10.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_10.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_10.$(OBJEXT): internal/has/extension.h +enc/iso_8859_10.$(OBJEXT): internal/has/feature.h +enc/iso_8859_10.$(OBJEXT): internal/has/warning.h +enc/iso_8859_10.$(OBJEXT): internal/stdalign.h +enc/iso_8859_10.$(OBJEXT): internal/stdbool.h +enc/iso_8859_10.$(OBJEXT): internal/warning_push.h +enc/iso_8859_10.$(OBJEXT): internal/xmalloc.h enc/iso_8859_10.$(OBJEXT): missing.h enc/iso_8859_10.$(OBJEXT): onigmo.h enc/iso_8859_11.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_11.$(OBJEXT): assert.h +enc/iso_8859_11.$(OBJEXT): backward/2/assume.h +enc/iso_8859_11.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_11.$(OBJEXT): backward/2/bool.h +enc/iso_8859_11.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_11.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_11.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_11.$(OBJEXT): config.h enc/iso_8859_11.$(OBJEXT): defines.h enc/iso_8859_11.$(OBJEXT): enc/iso_8859_11.c +enc/iso_8859_11.$(OBJEXT): internal/assume.h +enc/iso_8859_11.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_11.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_11.$(OBJEXT): internal/attr/const.h +enc/iso_8859_11.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_11.$(OBJEXT): internal/attr/error.h +enc/iso_8859_11.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_11.$(OBJEXT): internal/attr/format.h +enc/iso_8859_11.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_11.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_11.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_11.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_11.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_11.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_11.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_11.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_11.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_11.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_11.$(OBJEXT): internal/cast.h +enc/iso_8859_11.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_11.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_11.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_11.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_11.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_11.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_11.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_11.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_11.$(OBJEXT): internal/config.h +enc/iso_8859_11.$(OBJEXT): internal/dllexport.h +enc/iso_8859_11.$(OBJEXT): internal/dosish.h +enc/iso_8859_11.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_11.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_11.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_11.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_11.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_11.$(OBJEXT): internal/has/extension.h +enc/iso_8859_11.$(OBJEXT): internal/has/feature.h +enc/iso_8859_11.$(OBJEXT): internal/has/warning.h +enc/iso_8859_11.$(OBJEXT): internal/stdalign.h +enc/iso_8859_11.$(OBJEXT): internal/stdbool.h +enc/iso_8859_11.$(OBJEXT): internal/warning_push.h +enc/iso_8859_11.$(OBJEXT): internal/xmalloc.h enc/iso_8859_11.$(OBJEXT): missing.h enc/iso_8859_11.$(OBJEXT): onigmo.h enc/iso_8859_13.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_13.$(OBJEXT): assert.h +enc/iso_8859_13.$(OBJEXT): backward/2/assume.h +enc/iso_8859_13.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_13.$(OBJEXT): backward/2/bool.h +enc/iso_8859_13.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_13.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_13.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_13.$(OBJEXT): config.h enc/iso_8859_13.$(OBJEXT): defines.h enc/iso_8859_13.$(OBJEXT): enc/iso_8859.h enc/iso_8859_13.$(OBJEXT): enc/iso_8859_13.c +enc/iso_8859_13.$(OBJEXT): internal/assume.h +enc/iso_8859_13.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_13.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_13.$(OBJEXT): internal/attr/const.h +enc/iso_8859_13.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_13.$(OBJEXT): internal/attr/error.h +enc/iso_8859_13.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_13.$(OBJEXT): internal/attr/format.h +enc/iso_8859_13.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_13.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_13.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_13.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_13.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_13.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_13.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_13.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_13.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_13.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_13.$(OBJEXT): internal/cast.h +enc/iso_8859_13.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_13.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_13.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_13.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_13.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_13.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_13.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_13.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_13.$(OBJEXT): internal/config.h +enc/iso_8859_13.$(OBJEXT): internal/dllexport.h +enc/iso_8859_13.$(OBJEXT): internal/dosish.h +enc/iso_8859_13.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_13.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_13.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_13.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_13.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_13.$(OBJEXT): internal/has/extension.h +enc/iso_8859_13.$(OBJEXT): internal/has/feature.h +enc/iso_8859_13.$(OBJEXT): internal/has/warning.h +enc/iso_8859_13.$(OBJEXT): internal/stdalign.h +enc/iso_8859_13.$(OBJEXT): internal/stdbool.h +enc/iso_8859_13.$(OBJEXT): internal/warning_push.h +enc/iso_8859_13.$(OBJEXT): internal/xmalloc.h enc/iso_8859_13.$(OBJEXT): missing.h enc/iso_8859_13.$(OBJEXT): onigmo.h enc/iso_8859_14.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_14.$(OBJEXT): assert.h +enc/iso_8859_14.$(OBJEXT): backward/2/assume.h +enc/iso_8859_14.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_14.$(OBJEXT): backward/2/bool.h +enc/iso_8859_14.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_14.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_14.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_14.$(OBJEXT): config.h enc/iso_8859_14.$(OBJEXT): defines.h enc/iso_8859_14.$(OBJEXT): enc/iso_8859.h enc/iso_8859_14.$(OBJEXT): enc/iso_8859_14.c +enc/iso_8859_14.$(OBJEXT): internal/assume.h +enc/iso_8859_14.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_14.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_14.$(OBJEXT): internal/attr/const.h +enc/iso_8859_14.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_14.$(OBJEXT): internal/attr/error.h +enc/iso_8859_14.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_14.$(OBJEXT): internal/attr/format.h +enc/iso_8859_14.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_14.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_14.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_14.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_14.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_14.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_14.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_14.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_14.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_14.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_14.$(OBJEXT): internal/cast.h +enc/iso_8859_14.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_14.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_14.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_14.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_14.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_14.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_14.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_14.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_14.$(OBJEXT): internal/config.h +enc/iso_8859_14.$(OBJEXT): internal/dllexport.h +enc/iso_8859_14.$(OBJEXT): internal/dosish.h +enc/iso_8859_14.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_14.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_14.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_14.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_14.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_14.$(OBJEXT): internal/has/extension.h +enc/iso_8859_14.$(OBJEXT): internal/has/feature.h +enc/iso_8859_14.$(OBJEXT): internal/has/warning.h +enc/iso_8859_14.$(OBJEXT): internal/stdalign.h +enc/iso_8859_14.$(OBJEXT): internal/stdbool.h +enc/iso_8859_14.$(OBJEXT): internal/warning_push.h +enc/iso_8859_14.$(OBJEXT): internal/xmalloc.h enc/iso_8859_14.$(OBJEXT): missing.h enc/iso_8859_14.$(OBJEXT): onigmo.h enc/iso_8859_15.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_15.$(OBJEXT): assert.h +enc/iso_8859_15.$(OBJEXT): backward/2/assume.h +enc/iso_8859_15.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_15.$(OBJEXT): backward/2/bool.h +enc/iso_8859_15.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_15.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_15.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_15.$(OBJEXT): config.h enc/iso_8859_15.$(OBJEXT): defines.h enc/iso_8859_15.$(OBJEXT): enc/iso_8859.h enc/iso_8859_15.$(OBJEXT): enc/iso_8859_15.c +enc/iso_8859_15.$(OBJEXT): internal/assume.h +enc/iso_8859_15.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_15.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_15.$(OBJEXT): internal/attr/const.h +enc/iso_8859_15.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_15.$(OBJEXT): internal/attr/error.h +enc/iso_8859_15.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_15.$(OBJEXT): internal/attr/format.h +enc/iso_8859_15.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_15.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_15.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_15.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_15.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_15.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_15.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_15.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_15.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_15.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_15.$(OBJEXT): internal/cast.h +enc/iso_8859_15.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_15.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_15.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_15.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_15.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_15.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_15.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_15.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_15.$(OBJEXT): internal/config.h +enc/iso_8859_15.$(OBJEXT): internal/dllexport.h +enc/iso_8859_15.$(OBJEXT): internal/dosish.h +enc/iso_8859_15.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_15.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_15.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_15.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_15.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_15.$(OBJEXT): internal/has/extension.h +enc/iso_8859_15.$(OBJEXT): internal/has/feature.h +enc/iso_8859_15.$(OBJEXT): internal/has/warning.h +enc/iso_8859_15.$(OBJEXT): internal/stdalign.h +enc/iso_8859_15.$(OBJEXT): internal/stdbool.h +enc/iso_8859_15.$(OBJEXT): internal/warning_push.h +enc/iso_8859_15.$(OBJEXT): internal/xmalloc.h enc/iso_8859_15.$(OBJEXT): missing.h enc/iso_8859_15.$(OBJEXT): onigmo.h enc/iso_8859_16.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_16.$(OBJEXT): assert.h +enc/iso_8859_16.$(OBJEXT): backward/2/assume.h +enc/iso_8859_16.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_16.$(OBJEXT): backward/2/bool.h +enc/iso_8859_16.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_16.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_16.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_16.$(OBJEXT): config.h enc/iso_8859_16.$(OBJEXT): defines.h enc/iso_8859_16.$(OBJEXT): enc/iso_8859.h enc/iso_8859_16.$(OBJEXT): enc/iso_8859_16.c +enc/iso_8859_16.$(OBJEXT): internal/assume.h +enc/iso_8859_16.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_16.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_16.$(OBJEXT): internal/attr/const.h +enc/iso_8859_16.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_16.$(OBJEXT): internal/attr/error.h +enc/iso_8859_16.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_16.$(OBJEXT): internal/attr/format.h +enc/iso_8859_16.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_16.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_16.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_16.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_16.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_16.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_16.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_16.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_16.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_16.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_16.$(OBJEXT): internal/cast.h +enc/iso_8859_16.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_16.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_16.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_16.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_16.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_16.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_16.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_16.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_16.$(OBJEXT): internal/config.h +enc/iso_8859_16.$(OBJEXT): internal/dllexport.h +enc/iso_8859_16.$(OBJEXT): internal/dosish.h +enc/iso_8859_16.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_16.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_16.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_16.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_16.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_16.$(OBJEXT): internal/has/extension.h +enc/iso_8859_16.$(OBJEXT): internal/has/feature.h +enc/iso_8859_16.$(OBJEXT): internal/has/warning.h +enc/iso_8859_16.$(OBJEXT): internal/stdalign.h +enc/iso_8859_16.$(OBJEXT): internal/stdbool.h +enc/iso_8859_16.$(OBJEXT): internal/warning_push.h +enc/iso_8859_16.$(OBJEXT): internal/xmalloc.h enc/iso_8859_16.$(OBJEXT): missing.h enc/iso_8859_16.$(OBJEXT): onigmo.h enc/iso_8859_2.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_2.$(OBJEXT): assert.h +enc/iso_8859_2.$(OBJEXT): backward/2/assume.h +enc/iso_8859_2.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_2.$(OBJEXT): backward/2/bool.h +enc/iso_8859_2.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_2.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_2.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_2.$(OBJEXT): config.h enc/iso_8859_2.$(OBJEXT): defines.h enc/iso_8859_2.$(OBJEXT): enc/iso_8859.h enc/iso_8859_2.$(OBJEXT): enc/iso_8859_2.c +enc/iso_8859_2.$(OBJEXT): internal/assume.h +enc/iso_8859_2.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_2.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_2.$(OBJEXT): internal/attr/const.h +enc/iso_8859_2.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_2.$(OBJEXT): internal/attr/error.h +enc/iso_8859_2.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_2.$(OBJEXT): internal/attr/format.h +enc/iso_8859_2.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_2.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_2.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_2.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_2.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_2.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_2.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_2.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_2.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_2.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_2.$(OBJEXT): internal/cast.h +enc/iso_8859_2.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_2.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_2.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_2.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_2.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_2.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_2.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_2.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_2.$(OBJEXT): internal/config.h +enc/iso_8859_2.$(OBJEXT): internal/dllexport.h +enc/iso_8859_2.$(OBJEXT): internal/dosish.h +enc/iso_8859_2.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_2.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_2.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_2.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_2.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_2.$(OBJEXT): internal/has/extension.h +enc/iso_8859_2.$(OBJEXT): internal/has/feature.h +enc/iso_8859_2.$(OBJEXT): internal/has/warning.h +enc/iso_8859_2.$(OBJEXT): internal/stdalign.h +enc/iso_8859_2.$(OBJEXT): internal/stdbool.h +enc/iso_8859_2.$(OBJEXT): internal/warning_push.h +enc/iso_8859_2.$(OBJEXT): internal/xmalloc.h enc/iso_8859_2.$(OBJEXT): missing.h enc/iso_8859_2.$(OBJEXT): onigmo.h enc/iso_8859_3.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_3.$(OBJEXT): assert.h +enc/iso_8859_3.$(OBJEXT): backward/2/assume.h +enc/iso_8859_3.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_3.$(OBJEXT): backward/2/bool.h +enc/iso_8859_3.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_3.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_3.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_3.$(OBJEXT): config.h enc/iso_8859_3.$(OBJEXT): defines.h enc/iso_8859_3.$(OBJEXT): enc/iso_8859.h enc/iso_8859_3.$(OBJEXT): enc/iso_8859_3.c +enc/iso_8859_3.$(OBJEXT): internal/assume.h +enc/iso_8859_3.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_3.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_3.$(OBJEXT): internal/attr/const.h +enc/iso_8859_3.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_3.$(OBJEXT): internal/attr/error.h +enc/iso_8859_3.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_3.$(OBJEXT): internal/attr/format.h +enc/iso_8859_3.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_3.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_3.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_3.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_3.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_3.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_3.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_3.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_3.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_3.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_3.$(OBJEXT): internal/cast.h +enc/iso_8859_3.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_3.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_3.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_3.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_3.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_3.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_3.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_3.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_3.$(OBJEXT): internal/config.h +enc/iso_8859_3.$(OBJEXT): internal/dllexport.h +enc/iso_8859_3.$(OBJEXT): internal/dosish.h +enc/iso_8859_3.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_3.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_3.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_3.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_3.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_3.$(OBJEXT): internal/has/extension.h +enc/iso_8859_3.$(OBJEXT): internal/has/feature.h +enc/iso_8859_3.$(OBJEXT): internal/has/warning.h +enc/iso_8859_3.$(OBJEXT): internal/stdalign.h +enc/iso_8859_3.$(OBJEXT): internal/stdbool.h +enc/iso_8859_3.$(OBJEXT): internal/warning_push.h +enc/iso_8859_3.$(OBJEXT): internal/xmalloc.h enc/iso_8859_3.$(OBJEXT): missing.h enc/iso_8859_3.$(OBJEXT): onigmo.h enc/iso_8859_4.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_4.$(OBJEXT): assert.h +enc/iso_8859_4.$(OBJEXT): backward/2/assume.h +enc/iso_8859_4.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_4.$(OBJEXT): backward/2/bool.h +enc/iso_8859_4.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_4.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_4.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_4.$(OBJEXT): config.h enc/iso_8859_4.$(OBJEXT): defines.h enc/iso_8859_4.$(OBJEXT): enc/iso_8859.h enc/iso_8859_4.$(OBJEXT): enc/iso_8859_4.c +enc/iso_8859_4.$(OBJEXT): internal/assume.h +enc/iso_8859_4.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_4.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_4.$(OBJEXT): internal/attr/const.h +enc/iso_8859_4.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_4.$(OBJEXT): internal/attr/error.h +enc/iso_8859_4.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_4.$(OBJEXT): internal/attr/format.h +enc/iso_8859_4.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_4.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_4.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_4.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_4.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_4.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_4.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_4.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_4.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_4.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_4.$(OBJEXT): internal/cast.h +enc/iso_8859_4.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_4.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_4.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_4.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_4.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_4.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_4.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_4.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_4.$(OBJEXT): internal/config.h +enc/iso_8859_4.$(OBJEXT): internal/dllexport.h +enc/iso_8859_4.$(OBJEXT): internal/dosish.h +enc/iso_8859_4.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_4.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_4.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_4.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_4.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_4.$(OBJEXT): internal/has/extension.h +enc/iso_8859_4.$(OBJEXT): internal/has/feature.h +enc/iso_8859_4.$(OBJEXT): internal/has/warning.h +enc/iso_8859_4.$(OBJEXT): internal/stdalign.h +enc/iso_8859_4.$(OBJEXT): internal/stdbool.h +enc/iso_8859_4.$(OBJEXT): internal/warning_push.h +enc/iso_8859_4.$(OBJEXT): internal/xmalloc.h enc/iso_8859_4.$(OBJEXT): missing.h enc/iso_8859_4.$(OBJEXT): onigmo.h enc/iso_8859_5.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_5.$(OBJEXT): assert.h +enc/iso_8859_5.$(OBJEXT): backward/2/assume.h +enc/iso_8859_5.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_5.$(OBJEXT): backward/2/bool.h +enc/iso_8859_5.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_5.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_5.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_5.$(OBJEXT): config.h enc/iso_8859_5.$(OBJEXT): defines.h enc/iso_8859_5.$(OBJEXT): enc/iso_8859_5.c +enc/iso_8859_5.$(OBJEXT): internal/assume.h +enc/iso_8859_5.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_5.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_5.$(OBJEXT): internal/attr/const.h +enc/iso_8859_5.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_5.$(OBJEXT): internal/attr/error.h +enc/iso_8859_5.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_5.$(OBJEXT): internal/attr/format.h +enc/iso_8859_5.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_5.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_5.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_5.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_5.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_5.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_5.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_5.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_5.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_5.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_5.$(OBJEXT): internal/cast.h +enc/iso_8859_5.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_5.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_5.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_5.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_5.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_5.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_5.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_5.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_5.$(OBJEXT): internal/config.h +enc/iso_8859_5.$(OBJEXT): internal/dllexport.h +enc/iso_8859_5.$(OBJEXT): internal/dosish.h +enc/iso_8859_5.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_5.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_5.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_5.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_5.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_5.$(OBJEXT): internal/has/extension.h +enc/iso_8859_5.$(OBJEXT): internal/has/feature.h +enc/iso_8859_5.$(OBJEXT): internal/has/warning.h +enc/iso_8859_5.$(OBJEXT): internal/stdalign.h +enc/iso_8859_5.$(OBJEXT): internal/stdbool.h +enc/iso_8859_5.$(OBJEXT): internal/warning_push.h +enc/iso_8859_5.$(OBJEXT): internal/xmalloc.h enc/iso_8859_5.$(OBJEXT): missing.h enc/iso_8859_5.$(OBJEXT): onigmo.h enc/iso_8859_6.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_6.$(OBJEXT): assert.h +enc/iso_8859_6.$(OBJEXT): backward/2/assume.h +enc/iso_8859_6.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_6.$(OBJEXT): backward/2/bool.h +enc/iso_8859_6.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_6.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_6.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_6.$(OBJEXT): config.h enc/iso_8859_6.$(OBJEXT): defines.h enc/iso_8859_6.$(OBJEXT): enc/iso_8859_6.c +enc/iso_8859_6.$(OBJEXT): internal/assume.h +enc/iso_8859_6.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_6.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_6.$(OBJEXT): internal/attr/const.h +enc/iso_8859_6.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_6.$(OBJEXT): internal/attr/error.h +enc/iso_8859_6.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_6.$(OBJEXT): internal/attr/format.h +enc/iso_8859_6.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_6.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_6.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_6.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_6.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_6.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_6.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_6.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_6.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_6.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_6.$(OBJEXT): internal/cast.h +enc/iso_8859_6.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_6.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_6.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_6.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_6.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_6.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_6.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_6.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_6.$(OBJEXT): internal/config.h +enc/iso_8859_6.$(OBJEXT): internal/dllexport.h +enc/iso_8859_6.$(OBJEXT): internal/dosish.h +enc/iso_8859_6.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_6.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_6.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_6.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_6.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_6.$(OBJEXT): internal/has/extension.h +enc/iso_8859_6.$(OBJEXT): internal/has/feature.h +enc/iso_8859_6.$(OBJEXT): internal/has/warning.h +enc/iso_8859_6.$(OBJEXT): internal/stdalign.h +enc/iso_8859_6.$(OBJEXT): internal/stdbool.h +enc/iso_8859_6.$(OBJEXT): internal/warning_push.h +enc/iso_8859_6.$(OBJEXT): internal/xmalloc.h enc/iso_8859_6.$(OBJEXT): missing.h enc/iso_8859_6.$(OBJEXT): onigmo.h enc/iso_8859_7.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_7.$(OBJEXT): assert.h +enc/iso_8859_7.$(OBJEXT): backward/2/assume.h +enc/iso_8859_7.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_7.$(OBJEXT): backward/2/bool.h +enc/iso_8859_7.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_7.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_7.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_7.$(OBJEXT): config.h enc/iso_8859_7.$(OBJEXT): defines.h enc/iso_8859_7.$(OBJEXT): enc/iso_8859_7.c +enc/iso_8859_7.$(OBJEXT): internal/assume.h +enc/iso_8859_7.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_7.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_7.$(OBJEXT): internal/attr/const.h +enc/iso_8859_7.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_7.$(OBJEXT): internal/attr/error.h +enc/iso_8859_7.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_7.$(OBJEXT): internal/attr/format.h +enc/iso_8859_7.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_7.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_7.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_7.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_7.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_7.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_7.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_7.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_7.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_7.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_7.$(OBJEXT): internal/cast.h +enc/iso_8859_7.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_7.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_7.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_7.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_7.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_7.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_7.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_7.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_7.$(OBJEXT): internal/config.h +enc/iso_8859_7.$(OBJEXT): internal/dllexport.h +enc/iso_8859_7.$(OBJEXT): internal/dosish.h +enc/iso_8859_7.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_7.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_7.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_7.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_7.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_7.$(OBJEXT): internal/has/extension.h +enc/iso_8859_7.$(OBJEXT): internal/has/feature.h +enc/iso_8859_7.$(OBJEXT): internal/has/warning.h +enc/iso_8859_7.$(OBJEXT): internal/stdalign.h +enc/iso_8859_7.$(OBJEXT): internal/stdbool.h +enc/iso_8859_7.$(OBJEXT): internal/warning_push.h +enc/iso_8859_7.$(OBJEXT): internal/xmalloc.h enc/iso_8859_7.$(OBJEXT): missing.h enc/iso_8859_7.$(OBJEXT): onigmo.h enc/iso_8859_8.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_8.$(OBJEXT): assert.h +enc/iso_8859_8.$(OBJEXT): backward/2/assume.h +enc/iso_8859_8.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_8.$(OBJEXT): backward/2/bool.h +enc/iso_8859_8.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_8.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_8.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_8.$(OBJEXT): config.h enc/iso_8859_8.$(OBJEXT): defines.h enc/iso_8859_8.$(OBJEXT): enc/iso_8859_8.c +enc/iso_8859_8.$(OBJEXT): internal/assume.h +enc/iso_8859_8.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_8.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_8.$(OBJEXT): internal/attr/const.h +enc/iso_8859_8.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_8.$(OBJEXT): internal/attr/error.h +enc/iso_8859_8.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_8.$(OBJEXT): internal/attr/format.h +enc/iso_8859_8.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_8.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_8.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_8.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_8.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_8.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_8.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_8.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_8.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_8.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_8.$(OBJEXT): internal/cast.h +enc/iso_8859_8.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_8.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_8.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_8.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_8.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_8.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_8.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_8.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_8.$(OBJEXT): internal/config.h +enc/iso_8859_8.$(OBJEXT): internal/dllexport.h +enc/iso_8859_8.$(OBJEXT): internal/dosish.h +enc/iso_8859_8.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_8.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_8.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_8.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_8.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_8.$(OBJEXT): internal/has/extension.h +enc/iso_8859_8.$(OBJEXT): internal/has/feature.h +enc/iso_8859_8.$(OBJEXT): internal/has/warning.h +enc/iso_8859_8.$(OBJEXT): internal/stdalign.h +enc/iso_8859_8.$(OBJEXT): internal/stdbool.h +enc/iso_8859_8.$(OBJEXT): internal/warning_push.h +enc/iso_8859_8.$(OBJEXT): internal/xmalloc.h enc/iso_8859_8.$(OBJEXT): missing.h enc/iso_8859_8.$(OBJEXT): onigmo.h enc/iso_8859_9.$(OBJEXT): $(top_srcdir)/regenc.h +enc/iso_8859_9.$(OBJEXT): assert.h +enc/iso_8859_9.$(OBJEXT): backward/2/assume.h +enc/iso_8859_9.$(OBJEXT): backward/2/attributes.h +enc/iso_8859_9.$(OBJEXT): backward/2/bool.h +enc/iso_8859_9.$(OBJEXT): backward/2/long_long.h +enc/iso_8859_9.$(OBJEXT): backward/2/stdalign.h +enc/iso_8859_9.$(OBJEXT): backward/2/stdarg.h enc/iso_8859_9.$(OBJEXT): config.h enc/iso_8859_9.$(OBJEXT): defines.h enc/iso_8859_9.$(OBJEXT): enc/iso_8859.h enc/iso_8859_9.$(OBJEXT): enc/iso_8859_9.c +enc/iso_8859_9.$(OBJEXT): internal/assume.h +enc/iso_8859_9.$(OBJEXT): internal/attr/alloc_size.h +enc/iso_8859_9.$(OBJEXT): internal/attr/cold.h +enc/iso_8859_9.$(OBJEXT): internal/attr/const.h +enc/iso_8859_9.$(OBJEXT): internal/attr/deprecated.h +enc/iso_8859_9.$(OBJEXT): internal/attr/error.h +enc/iso_8859_9.$(OBJEXT): internal/attr/forceinline.h +enc/iso_8859_9.$(OBJEXT): internal/attr/format.h +enc/iso_8859_9.$(OBJEXT): internal/attr/maybe_unused.h +enc/iso_8859_9.$(OBJEXT): internal/attr/nodiscard.h +enc/iso_8859_9.$(OBJEXT): internal/attr/noexcept.h +enc/iso_8859_9.$(OBJEXT): internal/attr/noinline.h +enc/iso_8859_9.$(OBJEXT): internal/attr/nonnull.h +enc/iso_8859_9.$(OBJEXT): internal/attr/noreturn.h +enc/iso_8859_9.$(OBJEXT): internal/attr/pure.h +enc/iso_8859_9.$(OBJEXT): internal/attr/restrict.h +enc/iso_8859_9.$(OBJEXT): internal/attr/returns_nonnull.h +enc/iso_8859_9.$(OBJEXT): internal/attr/warning.h +enc/iso_8859_9.$(OBJEXT): internal/cast.h +enc/iso_8859_9.$(OBJEXT): internal/compiler_is.h +enc/iso_8859_9.$(OBJEXT): internal/compiler_is/apple.h +enc/iso_8859_9.$(OBJEXT): internal/compiler_is/clang.h +enc/iso_8859_9.$(OBJEXT): internal/compiler_is/gcc.h +enc/iso_8859_9.$(OBJEXT): internal/compiler_is/intel.h +enc/iso_8859_9.$(OBJEXT): internal/compiler_is/msvc.h +enc/iso_8859_9.$(OBJEXT): internal/compiler_is/sunpro.h +enc/iso_8859_9.$(OBJEXT): internal/compiler_since.h +enc/iso_8859_9.$(OBJEXT): internal/config.h +enc/iso_8859_9.$(OBJEXT): internal/dllexport.h +enc/iso_8859_9.$(OBJEXT): internal/dosish.h +enc/iso_8859_9.$(OBJEXT): internal/has/attribute.h +enc/iso_8859_9.$(OBJEXT): internal/has/builtin.h +enc/iso_8859_9.$(OBJEXT): internal/has/c_attribute.h +enc/iso_8859_9.$(OBJEXT): internal/has/cpp_attribute.h +enc/iso_8859_9.$(OBJEXT): internal/has/declspec_attribute.h +enc/iso_8859_9.$(OBJEXT): internal/has/extension.h +enc/iso_8859_9.$(OBJEXT): internal/has/feature.h +enc/iso_8859_9.$(OBJEXT): internal/has/warning.h +enc/iso_8859_9.$(OBJEXT): internal/stdalign.h +enc/iso_8859_9.$(OBJEXT): internal/stdbool.h +enc/iso_8859_9.$(OBJEXT): internal/warning_push.h +enc/iso_8859_9.$(OBJEXT): internal/xmalloc.h enc/iso_8859_9.$(OBJEXT): missing.h enc/iso_8859_9.$(OBJEXT): onigmo.h enc/koi8_r.$(OBJEXT): $(top_srcdir)/regenc.h +enc/koi8_r.$(OBJEXT): assert.h +enc/koi8_r.$(OBJEXT): backward/2/assume.h +enc/koi8_r.$(OBJEXT): backward/2/attributes.h +enc/koi8_r.$(OBJEXT): backward/2/bool.h +enc/koi8_r.$(OBJEXT): backward/2/long_long.h +enc/koi8_r.$(OBJEXT): backward/2/stdalign.h +enc/koi8_r.$(OBJEXT): backward/2/stdarg.h enc/koi8_r.$(OBJEXT): config.h enc/koi8_r.$(OBJEXT): defines.h enc/koi8_r.$(OBJEXT): enc/koi8_r.c +enc/koi8_r.$(OBJEXT): internal/assume.h +enc/koi8_r.$(OBJEXT): internal/attr/alloc_size.h +enc/koi8_r.$(OBJEXT): internal/attr/cold.h +enc/koi8_r.$(OBJEXT): internal/attr/const.h +enc/koi8_r.$(OBJEXT): internal/attr/deprecated.h +enc/koi8_r.$(OBJEXT): internal/attr/error.h +enc/koi8_r.$(OBJEXT): internal/attr/forceinline.h +enc/koi8_r.$(OBJEXT): internal/attr/format.h +enc/koi8_r.$(OBJEXT): internal/attr/maybe_unused.h +enc/koi8_r.$(OBJEXT): internal/attr/nodiscard.h +enc/koi8_r.$(OBJEXT): internal/attr/noexcept.h +enc/koi8_r.$(OBJEXT): internal/attr/noinline.h +enc/koi8_r.$(OBJEXT): internal/attr/nonnull.h +enc/koi8_r.$(OBJEXT): internal/attr/noreturn.h +enc/koi8_r.$(OBJEXT): internal/attr/pure.h +enc/koi8_r.$(OBJEXT): internal/attr/restrict.h +enc/koi8_r.$(OBJEXT): internal/attr/returns_nonnull.h +enc/koi8_r.$(OBJEXT): internal/attr/warning.h +enc/koi8_r.$(OBJEXT): internal/cast.h +enc/koi8_r.$(OBJEXT): internal/compiler_is.h +enc/koi8_r.$(OBJEXT): internal/compiler_is/apple.h +enc/koi8_r.$(OBJEXT): internal/compiler_is/clang.h +enc/koi8_r.$(OBJEXT): internal/compiler_is/gcc.h +enc/koi8_r.$(OBJEXT): internal/compiler_is/intel.h +enc/koi8_r.$(OBJEXT): internal/compiler_is/msvc.h +enc/koi8_r.$(OBJEXT): internal/compiler_is/sunpro.h +enc/koi8_r.$(OBJEXT): internal/compiler_since.h +enc/koi8_r.$(OBJEXT): internal/config.h +enc/koi8_r.$(OBJEXT): internal/dllexport.h +enc/koi8_r.$(OBJEXT): internal/dosish.h +enc/koi8_r.$(OBJEXT): internal/has/attribute.h +enc/koi8_r.$(OBJEXT): internal/has/builtin.h +enc/koi8_r.$(OBJEXT): internal/has/c_attribute.h +enc/koi8_r.$(OBJEXT): internal/has/cpp_attribute.h +enc/koi8_r.$(OBJEXT): internal/has/declspec_attribute.h +enc/koi8_r.$(OBJEXT): internal/has/extension.h +enc/koi8_r.$(OBJEXT): internal/has/feature.h +enc/koi8_r.$(OBJEXT): internal/has/warning.h +enc/koi8_r.$(OBJEXT): internal/stdalign.h +enc/koi8_r.$(OBJEXT): internal/stdbool.h +enc/koi8_r.$(OBJEXT): internal/warning_push.h +enc/koi8_r.$(OBJEXT): internal/xmalloc.h enc/koi8_r.$(OBJEXT): missing.h enc/koi8_r.$(OBJEXT): onigmo.h enc/koi8_u.$(OBJEXT): $(top_srcdir)/regenc.h +enc/koi8_u.$(OBJEXT): assert.h +enc/koi8_u.$(OBJEXT): backward/2/assume.h +enc/koi8_u.$(OBJEXT): backward/2/attributes.h +enc/koi8_u.$(OBJEXT): backward/2/bool.h +enc/koi8_u.$(OBJEXT): backward/2/long_long.h +enc/koi8_u.$(OBJEXT): backward/2/stdalign.h +enc/koi8_u.$(OBJEXT): backward/2/stdarg.h enc/koi8_u.$(OBJEXT): config.h enc/koi8_u.$(OBJEXT): defines.h enc/koi8_u.$(OBJEXT): enc/koi8_u.c +enc/koi8_u.$(OBJEXT): internal/assume.h +enc/koi8_u.$(OBJEXT): internal/attr/alloc_size.h +enc/koi8_u.$(OBJEXT): internal/attr/cold.h +enc/koi8_u.$(OBJEXT): internal/attr/const.h +enc/koi8_u.$(OBJEXT): internal/attr/deprecated.h +enc/koi8_u.$(OBJEXT): internal/attr/error.h +enc/koi8_u.$(OBJEXT): internal/attr/forceinline.h +enc/koi8_u.$(OBJEXT): internal/attr/format.h +enc/koi8_u.$(OBJEXT): internal/attr/maybe_unused.h +enc/koi8_u.$(OBJEXT): internal/attr/nodiscard.h +enc/koi8_u.$(OBJEXT): internal/attr/noexcept.h +enc/koi8_u.$(OBJEXT): internal/attr/noinline.h +enc/koi8_u.$(OBJEXT): internal/attr/nonnull.h +enc/koi8_u.$(OBJEXT): internal/attr/noreturn.h +enc/koi8_u.$(OBJEXT): internal/attr/pure.h +enc/koi8_u.$(OBJEXT): internal/attr/restrict.h +enc/koi8_u.$(OBJEXT): internal/attr/returns_nonnull.h +enc/koi8_u.$(OBJEXT): internal/attr/warning.h +enc/koi8_u.$(OBJEXT): internal/cast.h +enc/koi8_u.$(OBJEXT): internal/compiler_is.h +enc/koi8_u.$(OBJEXT): internal/compiler_is/apple.h +enc/koi8_u.$(OBJEXT): internal/compiler_is/clang.h +enc/koi8_u.$(OBJEXT): internal/compiler_is/gcc.h +enc/koi8_u.$(OBJEXT): internal/compiler_is/intel.h +enc/koi8_u.$(OBJEXT): internal/compiler_is/msvc.h +enc/koi8_u.$(OBJEXT): internal/compiler_is/sunpro.h +enc/koi8_u.$(OBJEXT): internal/compiler_since.h +enc/koi8_u.$(OBJEXT): internal/config.h +enc/koi8_u.$(OBJEXT): internal/dllexport.h +enc/koi8_u.$(OBJEXT): internal/dosish.h +enc/koi8_u.$(OBJEXT): internal/has/attribute.h +enc/koi8_u.$(OBJEXT): internal/has/builtin.h +enc/koi8_u.$(OBJEXT): internal/has/c_attribute.h +enc/koi8_u.$(OBJEXT): internal/has/cpp_attribute.h +enc/koi8_u.$(OBJEXT): internal/has/declspec_attribute.h +enc/koi8_u.$(OBJEXT): internal/has/extension.h +enc/koi8_u.$(OBJEXT): internal/has/feature.h +enc/koi8_u.$(OBJEXT): internal/has/warning.h +enc/koi8_u.$(OBJEXT): internal/stdalign.h +enc/koi8_u.$(OBJEXT): internal/stdbool.h +enc/koi8_u.$(OBJEXT): internal/warning_push.h +enc/koi8_u.$(OBJEXT): internal/xmalloc.h enc/koi8_u.$(OBJEXT): missing.h enc/koi8_u.$(OBJEXT): onigmo.h enc/shift_jis.$(OBJEXT): $(top_srcdir)/regenc.h +enc/shift_jis.$(OBJEXT): assert.h +enc/shift_jis.$(OBJEXT): backward/2/assume.h +enc/shift_jis.$(OBJEXT): backward/2/attributes.h +enc/shift_jis.$(OBJEXT): backward/2/bool.h +enc/shift_jis.$(OBJEXT): backward/2/long_long.h +enc/shift_jis.$(OBJEXT): backward/2/stdalign.h +enc/shift_jis.$(OBJEXT): backward/2/stdarg.h enc/shift_jis.$(OBJEXT): config.h enc/shift_jis.$(OBJEXT): defines.h enc/shift_jis.$(OBJEXT): enc/jis/props.h enc/shift_jis.$(OBJEXT): enc/jis/props.kwd enc/shift_jis.$(OBJEXT): enc/shift_jis.c enc/shift_jis.$(OBJEXT): enc/shift_jis.h +enc/shift_jis.$(OBJEXT): internal/assume.h +enc/shift_jis.$(OBJEXT): internal/attr/alloc_size.h +enc/shift_jis.$(OBJEXT): internal/attr/cold.h +enc/shift_jis.$(OBJEXT): internal/attr/const.h +enc/shift_jis.$(OBJEXT): internal/attr/deprecated.h +enc/shift_jis.$(OBJEXT): internal/attr/error.h +enc/shift_jis.$(OBJEXT): internal/attr/forceinline.h +enc/shift_jis.$(OBJEXT): internal/attr/format.h +enc/shift_jis.$(OBJEXT): internal/attr/maybe_unused.h +enc/shift_jis.$(OBJEXT): internal/attr/nodiscard.h +enc/shift_jis.$(OBJEXT): internal/attr/noexcept.h +enc/shift_jis.$(OBJEXT): internal/attr/noinline.h +enc/shift_jis.$(OBJEXT): internal/attr/nonnull.h +enc/shift_jis.$(OBJEXT): internal/attr/noreturn.h +enc/shift_jis.$(OBJEXT): internal/attr/pure.h +enc/shift_jis.$(OBJEXT): internal/attr/restrict.h +enc/shift_jis.$(OBJEXT): internal/attr/returns_nonnull.h +enc/shift_jis.$(OBJEXT): internal/attr/warning.h +enc/shift_jis.$(OBJEXT): internal/cast.h +enc/shift_jis.$(OBJEXT): internal/compiler_is.h +enc/shift_jis.$(OBJEXT): internal/compiler_is/apple.h +enc/shift_jis.$(OBJEXT): internal/compiler_is/clang.h +enc/shift_jis.$(OBJEXT): internal/compiler_is/gcc.h +enc/shift_jis.$(OBJEXT): internal/compiler_is/intel.h +enc/shift_jis.$(OBJEXT): internal/compiler_is/msvc.h +enc/shift_jis.$(OBJEXT): internal/compiler_is/sunpro.h +enc/shift_jis.$(OBJEXT): internal/compiler_since.h +enc/shift_jis.$(OBJEXT): internal/config.h +enc/shift_jis.$(OBJEXT): internal/dllexport.h +enc/shift_jis.$(OBJEXT): internal/dosish.h +enc/shift_jis.$(OBJEXT): internal/has/attribute.h +enc/shift_jis.$(OBJEXT): internal/has/builtin.h +enc/shift_jis.$(OBJEXT): internal/has/c_attribute.h +enc/shift_jis.$(OBJEXT): internal/has/cpp_attribute.h +enc/shift_jis.$(OBJEXT): internal/has/declspec_attribute.h +enc/shift_jis.$(OBJEXT): internal/has/extension.h +enc/shift_jis.$(OBJEXT): internal/has/feature.h +enc/shift_jis.$(OBJEXT): internal/has/warning.h +enc/shift_jis.$(OBJEXT): internal/stdalign.h +enc/shift_jis.$(OBJEXT): internal/stdbool.h +enc/shift_jis.$(OBJEXT): internal/warning_push.h +enc/shift_jis.$(OBJEXT): internal/xmalloc.h enc/shift_jis.$(OBJEXT): missing.h enc/shift_jis.$(OBJEXT): onigmo.h enc/trans/big5.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/big5.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/big5.$(OBJEXT): assert.h enc/trans/big5.$(OBJEXT): backward.h +enc/trans/big5.$(OBJEXT): backward/2/assume.h +enc/trans/big5.$(OBJEXT): backward/2/attributes.h +enc/trans/big5.$(OBJEXT): backward/2/bool.h +enc/trans/big5.$(OBJEXT): backward/2/inttypes.h +enc/trans/big5.$(OBJEXT): backward/2/limits.h +enc/trans/big5.$(OBJEXT): backward/2/long_long.h +enc/trans/big5.$(OBJEXT): backward/2/stdalign.h +enc/trans/big5.$(OBJEXT): backward/2/stdarg.h enc/trans/big5.$(OBJEXT): config.h enc/trans/big5.$(OBJEXT): defines.h enc/trans/big5.$(OBJEXT): enc/trans/big5.c enc/trans/big5.$(OBJEXT): intern.h +enc/trans/big5.$(OBJEXT): internal/anyargs.h +enc/trans/big5.$(OBJEXT): internal/arithmetic.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/char.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/double.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/int.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/long.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/short.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/big5.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/big5.$(OBJEXT): internal/assume.h +enc/trans/big5.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/big5.$(OBJEXT): internal/attr/artificial.h +enc/trans/big5.$(OBJEXT): internal/attr/cold.h +enc/trans/big5.$(OBJEXT): internal/attr/const.h +enc/trans/big5.$(OBJEXT): internal/attr/constexpr.h +enc/trans/big5.$(OBJEXT): internal/attr/deprecated.h +enc/trans/big5.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/big5.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/big5.$(OBJEXT): internal/attr/error.h +enc/trans/big5.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/big5.$(OBJEXT): internal/attr/forceinline.h +enc/trans/big5.$(OBJEXT): internal/attr/format.h +enc/trans/big5.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/big5.$(OBJEXT): internal/attr/noalias.h +enc/trans/big5.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/big5.$(OBJEXT): internal/attr/noexcept.h +enc/trans/big5.$(OBJEXT): internal/attr/noinline.h +enc/trans/big5.$(OBJEXT): internal/attr/nonnull.h +enc/trans/big5.$(OBJEXT): internal/attr/noreturn.h +enc/trans/big5.$(OBJEXT): internal/attr/pure.h +enc/trans/big5.$(OBJEXT): internal/attr/restrict.h +enc/trans/big5.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/big5.$(OBJEXT): internal/attr/warning.h +enc/trans/big5.$(OBJEXT): internal/attr/weakref.h +enc/trans/big5.$(OBJEXT): internal/cast.h +enc/trans/big5.$(OBJEXT): internal/compiler_is.h +enc/trans/big5.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/big5.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/big5.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/big5.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/big5.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/big5.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/big5.$(OBJEXT): internal/compiler_since.h +enc/trans/big5.$(OBJEXT): internal/config.h +enc/trans/big5.$(OBJEXT): internal/constant_p.h +enc/trans/big5.$(OBJEXT): internal/core.h +enc/trans/big5.$(OBJEXT): internal/core/rarray.h +enc/trans/big5.$(OBJEXT): internal/core/rbasic.h +enc/trans/big5.$(OBJEXT): internal/core/rbignum.h +enc/trans/big5.$(OBJEXT): internal/core/rclass.h +enc/trans/big5.$(OBJEXT): internal/core/rdata.h +enc/trans/big5.$(OBJEXT): internal/core/rfile.h +enc/trans/big5.$(OBJEXT): internal/core/rhash.h +enc/trans/big5.$(OBJEXT): internal/core/robject.h +enc/trans/big5.$(OBJEXT): internal/core/rregexp.h +enc/trans/big5.$(OBJEXT): internal/core/rstring.h +enc/trans/big5.$(OBJEXT): internal/core/rstruct.h +enc/trans/big5.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/big5.$(OBJEXT): internal/ctype.h +enc/trans/big5.$(OBJEXT): internal/dllexport.h +enc/trans/big5.$(OBJEXT): internal/dosish.h +enc/trans/big5.$(OBJEXT): internal/error.h +enc/trans/big5.$(OBJEXT): internal/eval.h +enc/trans/big5.$(OBJEXT): internal/event.h +enc/trans/big5.$(OBJEXT): internal/fl_type.h +enc/trans/big5.$(OBJEXT): internal/gc.h +enc/trans/big5.$(OBJEXT): internal/glob.h +enc/trans/big5.$(OBJEXT): internal/globals.h +enc/trans/big5.$(OBJEXT): internal/has/attribute.h +enc/trans/big5.$(OBJEXT): internal/has/builtin.h +enc/trans/big5.$(OBJEXT): internal/has/c_attribute.h +enc/trans/big5.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/big5.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/big5.$(OBJEXT): internal/has/extension.h +enc/trans/big5.$(OBJEXT): internal/has/feature.h +enc/trans/big5.$(OBJEXT): internal/has/warning.h +enc/trans/big5.$(OBJEXT): internal/intern/array.h +enc/trans/big5.$(OBJEXT): internal/intern/bignum.h +enc/trans/big5.$(OBJEXT): internal/intern/class.h +enc/trans/big5.$(OBJEXT): internal/intern/compar.h +enc/trans/big5.$(OBJEXT): internal/intern/complex.h +enc/trans/big5.$(OBJEXT): internal/intern/cont.h +enc/trans/big5.$(OBJEXT): internal/intern/dir.h +enc/trans/big5.$(OBJEXT): internal/intern/enum.h +enc/trans/big5.$(OBJEXT): internal/intern/enumerator.h +enc/trans/big5.$(OBJEXT): internal/intern/error.h +enc/trans/big5.$(OBJEXT): internal/intern/eval.h +enc/trans/big5.$(OBJEXT): internal/intern/file.h +enc/trans/big5.$(OBJEXT): internal/intern/gc.h +enc/trans/big5.$(OBJEXT): internal/intern/hash.h +enc/trans/big5.$(OBJEXT): internal/intern/io.h +enc/trans/big5.$(OBJEXT): internal/intern/load.h +enc/trans/big5.$(OBJEXT): internal/intern/marshal.h +enc/trans/big5.$(OBJEXT): internal/intern/numeric.h +enc/trans/big5.$(OBJEXT): internal/intern/object.h +enc/trans/big5.$(OBJEXT): internal/intern/parse.h +enc/trans/big5.$(OBJEXT): internal/intern/proc.h +enc/trans/big5.$(OBJEXT): internal/intern/process.h +enc/trans/big5.$(OBJEXT): internal/intern/random.h +enc/trans/big5.$(OBJEXT): internal/intern/range.h +enc/trans/big5.$(OBJEXT): internal/intern/rational.h +enc/trans/big5.$(OBJEXT): internal/intern/re.h +enc/trans/big5.$(OBJEXT): internal/intern/ruby.h +enc/trans/big5.$(OBJEXT): internal/intern/select.h +enc/trans/big5.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/big5.$(OBJEXT): internal/intern/signal.h +enc/trans/big5.$(OBJEXT): internal/intern/sprintf.h +enc/trans/big5.$(OBJEXT): internal/intern/string.h +enc/trans/big5.$(OBJEXT): internal/intern/struct.h +enc/trans/big5.$(OBJEXT): internal/intern/thread.h +enc/trans/big5.$(OBJEXT): internal/intern/time.h +enc/trans/big5.$(OBJEXT): internal/intern/variable.h +enc/trans/big5.$(OBJEXT): internal/intern/vm.h +enc/trans/big5.$(OBJEXT): internal/interpreter.h +enc/trans/big5.$(OBJEXT): internal/iterator.h +enc/trans/big5.$(OBJEXT): internal/memory.h +enc/trans/big5.$(OBJEXT): internal/method.h +enc/trans/big5.$(OBJEXT): internal/module.h +enc/trans/big5.$(OBJEXT): internal/newobj.h +enc/trans/big5.$(OBJEXT): internal/rgengc.h +enc/trans/big5.$(OBJEXT): internal/scan_args.h +enc/trans/big5.$(OBJEXT): internal/special_consts.h +enc/trans/big5.$(OBJEXT): internal/static_assert.h +enc/trans/big5.$(OBJEXT): internal/stdalign.h +enc/trans/big5.$(OBJEXT): internal/stdbool.h +enc/trans/big5.$(OBJEXT): internal/symbol.h +enc/trans/big5.$(OBJEXT): internal/value.h +enc/trans/big5.$(OBJEXT): internal/value_type.h +enc/trans/big5.$(OBJEXT): internal/variable.h +enc/trans/big5.$(OBJEXT): internal/warning_push.h +enc/trans/big5.$(OBJEXT): internal/xmalloc.h enc/trans/big5.$(OBJEXT): missing.h enc/trans/big5.$(OBJEXT): st.h enc/trans/big5.$(OBJEXT): subst.h @@ -397,10 +2352,157 @@ enc/trans/cesu_8.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/cesu_8.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/cesu_8.$(OBJEXT): assert.h enc/trans/cesu_8.$(OBJEXT): backward.h +enc/trans/cesu_8.$(OBJEXT): backward/2/assume.h +enc/trans/cesu_8.$(OBJEXT): backward/2/attributes.h +enc/trans/cesu_8.$(OBJEXT): backward/2/bool.h +enc/trans/cesu_8.$(OBJEXT): backward/2/inttypes.h +enc/trans/cesu_8.$(OBJEXT): backward/2/limits.h +enc/trans/cesu_8.$(OBJEXT): backward/2/long_long.h +enc/trans/cesu_8.$(OBJEXT): backward/2/stdalign.h +enc/trans/cesu_8.$(OBJEXT): backward/2/stdarg.h enc/trans/cesu_8.$(OBJEXT): config.h enc/trans/cesu_8.$(OBJEXT): defines.h enc/trans/cesu_8.$(OBJEXT): enc/trans/cesu_8.c enc/trans/cesu_8.$(OBJEXT): intern.h +enc/trans/cesu_8.$(OBJEXT): internal/anyargs.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/char.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/double.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/int.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/long.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/short.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/cesu_8.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/cesu_8.$(OBJEXT): internal/assume.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/artificial.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/cold.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/const.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/constexpr.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/deprecated.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/error.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/forceinline.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/format.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/noalias.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/noexcept.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/noinline.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/nonnull.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/noreturn.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/pure.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/restrict.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/warning.h +enc/trans/cesu_8.$(OBJEXT): internal/attr/weakref.h +enc/trans/cesu_8.$(OBJEXT): internal/cast.h +enc/trans/cesu_8.$(OBJEXT): internal/compiler_is.h +enc/trans/cesu_8.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/cesu_8.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/cesu_8.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/cesu_8.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/cesu_8.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/cesu_8.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/cesu_8.$(OBJEXT): internal/compiler_since.h +enc/trans/cesu_8.$(OBJEXT): internal/config.h +enc/trans/cesu_8.$(OBJEXT): internal/constant_p.h +enc/trans/cesu_8.$(OBJEXT): internal/core.h +enc/trans/cesu_8.$(OBJEXT): internal/core/rarray.h +enc/trans/cesu_8.$(OBJEXT): internal/core/rbasic.h +enc/trans/cesu_8.$(OBJEXT): internal/core/rbignum.h +enc/trans/cesu_8.$(OBJEXT): internal/core/rclass.h +enc/trans/cesu_8.$(OBJEXT): internal/core/rdata.h +enc/trans/cesu_8.$(OBJEXT): internal/core/rfile.h +enc/trans/cesu_8.$(OBJEXT): internal/core/rhash.h +enc/trans/cesu_8.$(OBJEXT): internal/core/robject.h +enc/trans/cesu_8.$(OBJEXT): internal/core/rregexp.h +enc/trans/cesu_8.$(OBJEXT): internal/core/rstring.h +enc/trans/cesu_8.$(OBJEXT): internal/core/rstruct.h +enc/trans/cesu_8.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/cesu_8.$(OBJEXT): internal/ctype.h +enc/trans/cesu_8.$(OBJEXT): internal/dllexport.h +enc/trans/cesu_8.$(OBJEXT): internal/dosish.h +enc/trans/cesu_8.$(OBJEXT): internal/error.h +enc/trans/cesu_8.$(OBJEXT): internal/eval.h +enc/trans/cesu_8.$(OBJEXT): internal/event.h +enc/trans/cesu_8.$(OBJEXT): internal/fl_type.h +enc/trans/cesu_8.$(OBJEXT): internal/gc.h +enc/trans/cesu_8.$(OBJEXT): internal/glob.h +enc/trans/cesu_8.$(OBJEXT): internal/globals.h +enc/trans/cesu_8.$(OBJEXT): internal/has/attribute.h +enc/trans/cesu_8.$(OBJEXT): internal/has/builtin.h +enc/trans/cesu_8.$(OBJEXT): internal/has/c_attribute.h +enc/trans/cesu_8.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/cesu_8.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/cesu_8.$(OBJEXT): internal/has/extension.h +enc/trans/cesu_8.$(OBJEXT): internal/has/feature.h +enc/trans/cesu_8.$(OBJEXT): internal/has/warning.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/array.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/bignum.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/class.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/compar.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/complex.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/cont.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/dir.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/enum.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/enumerator.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/error.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/eval.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/file.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/gc.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/hash.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/io.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/load.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/marshal.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/numeric.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/object.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/parse.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/proc.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/process.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/random.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/range.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/rational.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/re.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/ruby.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/select.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/signal.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/sprintf.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/string.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/struct.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/thread.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/time.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/variable.h +enc/trans/cesu_8.$(OBJEXT): internal/intern/vm.h +enc/trans/cesu_8.$(OBJEXT): internal/interpreter.h +enc/trans/cesu_8.$(OBJEXT): internal/iterator.h +enc/trans/cesu_8.$(OBJEXT): internal/memory.h +enc/trans/cesu_8.$(OBJEXT): internal/method.h +enc/trans/cesu_8.$(OBJEXT): internal/module.h +enc/trans/cesu_8.$(OBJEXT): internal/newobj.h +enc/trans/cesu_8.$(OBJEXT): internal/rgengc.h +enc/trans/cesu_8.$(OBJEXT): internal/scan_args.h +enc/trans/cesu_8.$(OBJEXT): internal/special_consts.h +enc/trans/cesu_8.$(OBJEXT): internal/static_assert.h +enc/trans/cesu_8.$(OBJEXT): internal/stdalign.h +enc/trans/cesu_8.$(OBJEXT): internal/stdbool.h +enc/trans/cesu_8.$(OBJEXT): internal/symbol.h +enc/trans/cesu_8.$(OBJEXT): internal/value.h +enc/trans/cesu_8.$(OBJEXT): internal/value_type.h +enc/trans/cesu_8.$(OBJEXT): internal/variable.h +enc/trans/cesu_8.$(OBJEXT): internal/warning_push.h +enc/trans/cesu_8.$(OBJEXT): internal/xmalloc.h enc/trans/cesu_8.$(OBJEXT): missing.h enc/trans/cesu_8.$(OBJEXT): st.h enc/trans/cesu_8.$(OBJEXT): subst.h @@ -408,10 +2510,157 @@ enc/trans/chinese.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/chinese.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/chinese.$(OBJEXT): assert.h enc/trans/chinese.$(OBJEXT): backward.h +enc/trans/chinese.$(OBJEXT): backward/2/assume.h +enc/trans/chinese.$(OBJEXT): backward/2/attributes.h +enc/trans/chinese.$(OBJEXT): backward/2/bool.h +enc/trans/chinese.$(OBJEXT): backward/2/inttypes.h +enc/trans/chinese.$(OBJEXT): backward/2/limits.h +enc/trans/chinese.$(OBJEXT): backward/2/long_long.h +enc/trans/chinese.$(OBJEXT): backward/2/stdalign.h +enc/trans/chinese.$(OBJEXT): backward/2/stdarg.h enc/trans/chinese.$(OBJEXT): config.h enc/trans/chinese.$(OBJEXT): defines.h enc/trans/chinese.$(OBJEXT): enc/trans/chinese.c enc/trans/chinese.$(OBJEXT): intern.h +enc/trans/chinese.$(OBJEXT): internal/anyargs.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/char.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/double.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/int.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/long.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/short.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/chinese.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/chinese.$(OBJEXT): internal/assume.h +enc/trans/chinese.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/chinese.$(OBJEXT): internal/attr/artificial.h +enc/trans/chinese.$(OBJEXT): internal/attr/cold.h +enc/trans/chinese.$(OBJEXT): internal/attr/const.h +enc/trans/chinese.$(OBJEXT): internal/attr/constexpr.h +enc/trans/chinese.$(OBJEXT): internal/attr/deprecated.h +enc/trans/chinese.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/chinese.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/chinese.$(OBJEXT): internal/attr/error.h +enc/trans/chinese.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/chinese.$(OBJEXT): internal/attr/forceinline.h +enc/trans/chinese.$(OBJEXT): internal/attr/format.h +enc/trans/chinese.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/chinese.$(OBJEXT): internal/attr/noalias.h +enc/trans/chinese.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/chinese.$(OBJEXT): internal/attr/noexcept.h +enc/trans/chinese.$(OBJEXT): internal/attr/noinline.h +enc/trans/chinese.$(OBJEXT): internal/attr/nonnull.h +enc/trans/chinese.$(OBJEXT): internal/attr/noreturn.h +enc/trans/chinese.$(OBJEXT): internal/attr/pure.h +enc/trans/chinese.$(OBJEXT): internal/attr/restrict.h +enc/trans/chinese.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/chinese.$(OBJEXT): internal/attr/warning.h +enc/trans/chinese.$(OBJEXT): internal/attr/weakref.h +enc/trans/chinese.$(OBJEXT): internal/cast.h +enc/trans/chinese.$(OBJEXT): internal/compiler_is.h +enc/trans/chinese.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/chinese.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/chinese.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/chinese.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/chinese.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/chinese.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/chinese.$(OBJEXT): internal/compiler_since.h +enc/trans/chinese.$(OBJEXT): internal/config.h +enc/trans/chinese.$(OBJEXT): internal/constant_p.h +enc/trans/chinese.$(OBJEXT): internal/core.h +enc/trans/chinese.$(OBJEXT): internal/core/rarray.h +enc/trans/chinese.$(OBJEXT): internal/core/rbasic.h +enc/trans/chinese.$(OBJEXT): internal/core/rbignum.h +enc/trans/chinese.$(OBJEXT): internal/core/rclass.h +enc/trans/chinese.$(OBJEXT): internal/core/rdata.h +enc/trans/chinese.$(OBJEXT): internal/core/rfile.h +enc/trans/chinese.$(OBJEXT): internal/core/rhash.h +enc/trans/chinese.$(OBJEXT): internal/core/robject.h +enc/trans/chinese.$(OBJEXT): internal/core/rregexp.h +enc/trans/chinese.$(OBJEXT): internal/core/rstring.h +enc/trans/chinese.$(OBJEXT): internal/core/rstruct.h +enc/trans/chinese.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/chinese.$(OBJEXT): internal/ctype.h +enc/trans/chinese.$(OBJEXT): internal/dllexport.h +enc/trans/chinese.$(OBJEXT): internal/dosish.h +enc/trans/chinese.$(OBJEXT): internal/error.h +enc/trans/chinese.$(OBJEXT): internal/eval.h +enc/trans/chinese.$(OBJEXT): internal/event.h +enc/trans/chinese.$(OBJEXT): internal/fl_type.h +enc/trans/chinese.$(OBJEXT): internal/gc.h +enc/trans/chinese.$(OBJEXT): internal/glob.h +enc/trans/chinese.$(OBJEXT): internal/globals.h +enc/trans/chinese.$(OBJEXT): internal/has/attribute.h +enc/trans/chinese.$(OBJEXT): internal/has/builtin.h +enc/trans/chinese.$(OBJEXT): internal/has/c_attribute.h +enc/trans/chinese.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/chinese.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/chinese.$(OBJEXT): internal/has/extension.h +enc/trans/chinese.$(OBJEXT): internal/has/feature.h +enc/trans/chinese.$(OBJEXT): internal/has/warning.h +enc/trans/chinese.$(OBJEXT): internal/intern/array.h +enc/trans/chinese.$(OBJEXT): internal/intern/bignum.h +enc/trans/chinese.$(OBJEXT): internal/intern/class.h +enc/trans/chinese.$(OBJEXT): internal/intern/compar.h +enc/trans/chinese.$(OBJEXT): internal/intern/complex.h +enc/trans/chinese.$(OBJEXT): internal/intern/cont.h +enc/trans/chinese.$(OBJEXT): internal/intern/dir.h +enc/trans/chinese.$(OBJEXT): internal/intern/enum.h +enc/trans/chinese.$(OBJEXT): internal/intern/enumerator.h +enc/trans/chinese.$(OBJEXT): internal/intern/error.h +enc/trans/chinese.$(OBJEXT): internal/intern/eval.h +enc/trans/chinese.$(OBJEXT): internal/intern/file.h +enc/trans/chinese.$(OBJEXT): internal/intern/gc.h +enc/trans/chinese.$(OBJEXT): internal/intern/hash.h +enc/trans/chinese.$(OBJEXT): internal/intern/io.h +enc/trans/chinese.$(OBJEXT): internal/intern/load.h +enc/trans/chinese.$(OBJEXT): internal/intern/marshal.h +enc/trans/chinese.$(OBJEXT): internal/intern/numeric.h +enc/trans/chinese.$(OBJEXT): internal/intern/object.h +enc/trans/chinese.$(OBJEXT): internal/intern/parse.h +enc/trans/chinese.$(OBJEXT): internal/intern/proc.h +enc/trans/chinese.$(OBJEXT): internal/intern/process.h +enc/trans/chinese.$(OBJEXT): internal/intern/random.h +enc/trans/chinese.$(OBJEXT): internal/intern/range.h +enc/trans/chinese.$(OBJEXT): internal/intern/rational.h +enc/trans/chinese.$(OBJEXT): internal/intern/re.h +enc/trans/chinese.$(OBJEXT): internal/intern/ruby.h +enc/trans/chinese.$(OBJEXT): internal/intern/select.h +enc/trans/chinese.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/chinese.$(OBJEXT): internal/intern/signal.h +enc/trans/chinese.$(OBJEXT): internal/intern/sprintf.h +enc/trans/chinese.$(OBJEXT): internal/intern/string.h +enc/trans/chinese.$(OBJEXT): internal/intern/struct.h +enc/trans/chinese.$(OBJEXT): internal/intern/thread.h +enc/trans/chinese.$(OBJEXT): internal/intern/time.h +enc/trans/chinese.$(OBJEXT): internal/intern/variable.h +enc/trans/chinese.$(OBJEXT): internal/intern/vm.h +enc/trans/chinese.$(OBJEXT): internal/interpreter.h +enc/trans/chinese.$(OBJEXT): internal/iterator.h +enc/trans/chinese.$(OBJEXT): internal/memory.h +enc/trans/chinese.$(OBJEXT): internal/method.h +enc/trans/chinese.$(OBJEXT): internal/module.h +enc/trans/chinese.$(OBJEXT): internal/newobj.h +enc/trans/chinese.$(OBJEXT): internal/rgengc.h +enc/trans/chinese.$(OBJEXT): internal/scan_args.h +enc/trans/chinese.$(OBJEXT): internal/special_consts.h +enc/trans/chinese.$(OBJEXT): internal/static_assert.h +enc/trans/chinese.$(OBJEXT): internal/stdalign.h +enc/trans/chinese.$(OBJEXT): internal/stdbool.h +enc/trans/chinese.$(OBJEXT): internal/symbol.h +enc/trans/chinese.$(OBJEXT): internal/value.h +enc/trans/chinese.$(OBJEXT): internal/value_type.h +enc/trans/chinese.$(OBJEXT): internal/variable.h +enc/trans/chinese.$(OBJEXT): internal/warning_push.h +enc/trans/chinese.$(OBJEXT): internal/xmalloc.h enc/trans/chinese.$(OBJEXT): missing.h enc/trans/chinese.$(OBJEXT): st.h enc/trans/chinese.$(OBJEXT): subst.h @@ -419,10 +2668,157 @@ enc/trans/ebcdic.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/ebcdic.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/ebcdic.$(OBJEXT): assert.h enc/trans/ebcdic.$(OBJEXT): backward.h +enc/trans/ebcdic.$(OBJEXT): backward/2/assume.h +enc/trans/ebcdic.$(OBJEXT): backward/2/attributes.h +enc/trans/ebcdic.$(OBJEXT): backward/2/bool.h +enc/trans/ebcdic.$(OBJEXT): backward/2/inttypes.h +enc/trans/ebcdic.$(OBJEXT): backward/2/limits.h +enc/trans/ebcdic.$(OBJEXT): backward/2/long_long.h +enc/trans/ebcdic.$(OBJEXT): backward/2/stdalign.h +enc/trans/ebcdic.$(OBJEXT): backward/2/stdarg.h enc/trans/ebcdic.$(OBJEXT): config.h enc/trans/ebcdic.$(OBJEXT): defines.h enc/trans/ebcdic.$(OBJEXT): enc/trans/ebcdic.c enc/trans/ebcdic.$(OBJEXT): intern.h +enc/trans/ebcdic.$(OBJEXT): internal/anyargs.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/char.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/double.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/int.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/long.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/short.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/ebcdic.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/ebcdic.$(OBJEXT): internal/assume.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/artificial.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/cold.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/const.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/constexpr.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/deprecated.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/error.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/forceinline.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/format.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/noalias.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/noexcept.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/noinline.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/nonnull.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/noreturn.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/pure.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/restrict.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/warning.h +enc/trans/ebcdic.$(OBJEXT): internal/attr/weakref.h +enc/trans/ebcdic.$(OBJEXT): internal/cast.h +enc/trans/ebcdic.$(OBJEXT): internal/compiler_is.h +enc/trans/ebcdic.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/ebcdic.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/ebcdic.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/ebcdic.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/ebcdic.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/ebcdic.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/ebcdic.$(OBJEXT): internal/compiler_since.h +enc/trans/ebcdic.$(OBJEXT): internal/config.h +enc/trans/ebcdic.$(OBJEXT): internal/constant_p.h +enc/trans/ebcdic.$(OBJEXT): internal/core.h +enc/trans/ebcdic.$(OBJEXT): internal/core/rarray.h +enc/trans/ebcdic.$(OBJEXT): internal/core/rbasic.h +enc/trans/ebcdic.$(OBJEXT): internal/core/rbignum.h +enc/trans/ebcdic.$(OBJEXT): internal/core/rclass.h +enc/trans/ebcdic.$(OBJEXT): internal/core/rdata.h +enc/trans/ebcdic.$(OBJEXT): internal/core/rfile.h +enc/trans/ebcdic.$(OBJEXT): internal/core/rhash.h +enc/trans/ebcdic.$(OBJEXT): internal/core/robject.h +enc/trans/ebcdic.$(OBJEXT): internal/core/rregexp.h +enc/trans/ebcdic.$(OBJEXT): internal/core/rstring.h +enc/trans/ebcdic.$(OBJEXT): internal/core/rstruct.h +enc/trans/ebcdic.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/ebcdic.$(OBJEXT): internal/ctype.h +enc/trans/ebcdic.$(OBJEXT): internal/dllexport.h +enc/trans/ebcdic.$(OBJEXT): internal/dosish.h +enc/trans/ebcdic.$(OBJEXT): internal/error.h +enc/trans/ebcdic.$(OBJEXT): internal/eval.h +enc/trans/ebcdic.$(OBJEXT): internal/event.h +enc/trans/ebcdic.$(OBJEXT): internal/fl_type.h +enc/trans/ebcdic.$(OBJEXT): internal/gc.h +enc/trans/ebcdic.$(OBJEXT): internal/glob.h +enc/trans/ebcdic.$(OBJEXT): internal/globals.h +enc/trans/ebcdic.$(OBJEXT): internal/has/attribute.h +enc/trans/ebcdic.$(OBJEXT): internal/has/builtin.h +enc/trans/ebcdic.$(OBJEXT): internal/has/c_attribute.h +enc/trans/ebcdic.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/ebcdic.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/ebcdic.$(OBJEXT): internal/has/extension.h +enc/trans/ebcdic.$(OBJEXT): internal/has/feature.h +enc/trans/ebcdic.$(OBJEXT): internal/has/warning.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/array.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/bignum.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/class.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/compar.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/complex.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/cont.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/dir.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/enum.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/enumerator.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/error.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/eval.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/file.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/gc.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/hash.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/io.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/load.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/marshal.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/numeric.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/object.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/parse.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/proc.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/process.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/random.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/range.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/rational.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/re.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/ruby.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/select.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/signal.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/sprintf.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/string.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/struct.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/thread.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/time.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/variable.h +enc/trans/ebcdic.$(OBJEXT): internal/intern/vm.h +enc/trans/ebcdic.$(OBJEXT): internal/interpreter.h +enc/trans/ebcdic.$(OBJEXT): internal/iterator.h +enc/trans/ebcdic.$(OBJEXT): internal/memory.h +enc/trans/ebcdic.$(OBJEXT): internal/method.h +enc/trans/ebcdic.$(OBJEXT): internal/module.h +enc/trans/ebcdic.$(OBJEXT): internal/newobj.h +enc/trans/ebcdic.$(OBJEXT): internal/rgengc.h +enc/trans/ebcdic.$(OBJEXT): internal/scan_args.h +enc/trans/ebcdic.$(OBJEXT): internal/special_consts.h +enc/trans/ebcdic.$(OBJEXT): internal/static_assert.h +enc/trans/ebcdic.$(OBJEXT): internal/stdalign.h +enc/trans/ebcdic.$(OBJEXT): internal/stdbool.h +enc/trans/ebcdic.$(OBJEXT): internal/symbol.h +enc/trans/ebcdic.$(OBJEXT): internal/value.h +enc/trans/ebcdic.$(OBJEXT): internal/value_type.h +enc/trans/ebcdic.$(OBJEXT): internal/variable.h +enc/trans/ebcdic.$(OBJEXT): internal/warning_push.h +enc/trans/ebcdic.$(OBJEXT): internal/xmalloc.h enc/trans/ebcdic.$(OBJEXT): missing.h enc/trans/ebcdic.$(OBJEXT): st.h enc/trans/ebcdic.$(OBJEXT): subst.h @@ -430,10 +2826,157 @@ enc/trans/emoji.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/emoji.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/emoji.$(OBJEXT): assert.h enc/trans/emoji.$(OBJEXT): backward.h +enc/trans/emoji.$(OBJEXT): backward/2/assume.h +enc/trans/emoji.$(OBJEXT): backward/2/attributes.h +enc/trans/emoji.$(OBJEXT): backward/2/bool.h +enc/trans/emoji.$(OBJEXT): backward/2/inttypes.h +enc/trans/emoji.$(OBJEXT): backward/2/limits.h +enc/trans/emoji.$(OBJEXT): backward/2/long_long.h +enc/trans/emoji.$(OBJEXT): backward/2/stdalign.h +enc/trans/emoji.$(OBJEXT): backward/2/stdarg.h enc/trans/emoji.$(OBJEXT): config.h enc/trans/emoji.$(OBJEXT): defines.h enc/trans/emoji.$(OBJEXT): enc/trans/emoji.c enc/trans/emoji.$(OBJEXT): intern.h +enc/trans/emoji.$(OBJEXT): internal/anyargs.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/char.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/double.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/int.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/long.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/short.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/emoji.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/emoji.$(OBJEXT): internal/assume.h +enc/trans/emoji.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/emoji.$(OBJEXT): internal/attr/artificial.h +enc/trans/emoji.$(OBJEXT): internal/attr/cold.h +enc/trans/emoji.$(OBJEXT): internal/attr/const.h +enc/trans/emoji.$(OBJEXT): internal/attr/constexpr.h +enc/trans/emoji.$(OBJEXT): internal/attr/deprecated.h +enc/trans/emoji.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/emoji.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/emoji.$(OBJEXT): internal/attr/error.h +enc/trans/emoji.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/emoji.$(OBJEXT): internal/attr/forceinline.h +enc/trans/emoji.$(OBJEXT): internal/attr/format.h +enc/trans/emoji.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/emoji.$(OBJEXT): internal/attr/noalias.h +enc/trans/emoji.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/emoji.$(OBJEXT): internal/attr/noexcept.h +enc/trans/emoji.$(OBJEXT): internal/attr/noinline.h +enc/trans/emoji.$(OBJEXT): internal/attr/nonnull.h +enc/trans/emoji.$(OBJEXT): internal/attr/noreturn.h +enc/trans/emoji.$(OBJEXT): internal/attr/pure.h +enc/trans/emoji.$(OBJEXT): internal/attr/restrict.h +enc/trans/emoji.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/emoji.$(OBJEXT): internal/attr/warning.h +enc/trans/emoji.$(OBJEXT): internal/attr/weakref.h +enc/trans/emoji.$(OBJEXT): internal/cast.h +enc/trans/emoji.$(OBJEXT): internal/compiler_is.h +enc/trans/emoji.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/emoji.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/emoji.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/emoji.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/emoji.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/emoji.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/emoji.$(OBJEXT): internal/compiler_since.h +enc/trans/emoji.$(OBJEXT): internal/config.h +enc/trans/emoji.$(OBJEXT): internal/constant_p.h +enc/trans/emoji.$(OBJEXT): internal/core.h +enc/trans/emoji.$(OBJEXT): internal/core/rarray.h +enc/trans/emoji.$(OBJEXT): internal/core/rbasic.h +enc/trans/emoji.$(OBJEXT): internal/core/rbignum.h +enc/trans/emoji.$(OBJEXT): internal/core/rclass.h +enc/trans/emoji.$(OBJEXT): internal/core/rdata.h +enc/trans/emoji.$(OBJEXT): internal/core/rfile.h +enc/trans/emoji.$(OBJEXT): internal/core/rhash.h +enc/trans/emoji.$(OBJEXT): internal/core/robject.h +enc/trans/emoji.$(OBJEXT): internal/core/rregexp.h +enc/trans/emoji.$(OBJEXT): internal/core/rstring.h +enc/trans/emoji.$(OBJEXT): internal/core/rstruct.h +enc/trans/emoji.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/emoji.$(OBJEXT): internal/ctype.h +enc/trans/emoji.$(OBJEXT): internal/dllexport.h +enc/trans/emoji.$(OBJEXT): internal/dosish.h +enc/trans/emoji.$(OBJEXT): internal/error.h +enc/trans/emoji.$(OBJEXT): internal/eval.h +enc/trans/emoji.$(OBJEXT): internal/event.h +enc/trans/emoji.$(OBJEXT): internal/fl_type.h +enc/trans/emoji.$(OBJEXT): internal/gc.h +enc/trans/emoji.$(OBJEXT): internal/glob.h +enc/trans/emoji.$(OBJEXT): internal/globals.h +enc/trans/emoji.$(OBJEXT): internal/has/attribute.h +enc/trans/emoji.$(OBJEXT): internal/has/builtin.h +enc/trans/emoji.$(OBJEXT): internal/has/c_attribute.h +enc/trans/emoji.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/emoji.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/emoji.$(OBJEXT): internal/has/extension.h +enc/trans/emoji.$(OBJEXT): internal/has/feature.h +enc/trans/emoji.$(OBJEXT): internal/has/warning.h +enc/trans/emoji.$(OBJEXT): internal/intern/array.h +enc/trans/emoji.$(OBJEXT): internal/intern/bignum.h +enc/trans/emoji.$(OBJEXT): internal/intern/class.h +enc/trans/emoji.$(OBJEXT): internal/intern/compar.h +enc/trans/emoji.$(OBJEXT): internal/intern/complex.h +enc/trans/emoji.$(OBJEXT): internal/intern/cont.h +enc/trans/emoji.$(OBJEXT): internal/intern/dir.h +enc/trans/emoji.$(OBJEXT): internal/intern/enum.h +enc/trans/emoji.$(OBJEXT): internal/intern/enumerator.h +enc/trans/emoji.$(OBJEXT): internal/intern/error.h +enc/trans/emoji.$(OBJEXT): internal/intern/eval.h +enc/trans/emoji.$(OBJEXT): internal/intern/file.h +enc/trans/emoji.$(OBJEXT): internal/intern/gc.h +enc/trans/emoji.$(OBJEXT): internal/intern/hash.h +enc/trans/emoji.$(OBJEXT): internal/intern/io.h +enc/trans/emoji.$(OBJEXT): internal/intern/load.h +enc/trans/emoji.$(OBJEXT): internal/intern/marshal.h +enc/trans/emoji.$(OBJEXT): internal/intern/numeric.h +enc/trans/emoji.$(OBJEXT): internal/intern/object.h +enc/trans/emoji.$(OBJEXT): internal/intern/parse.h +enc/trans/emoji.$(OBJEXT): internal/intern/proc.h +enc/trans/emoji.$(OBJEXT): internal/intern/process.h +enc/trans/emoji.$(OBJEXT): internal/intern/random.h +enc/trans/emoji.$(OBJEXT): internal/intern/range.h +enc/trans/emoji.$(OBJEXT): internal/intern/rational.h +enc/trans/emoji.$(OBJEXT): internal/intern/re.h +enc/trans/emoji.$(OBJEXT): internal/intern/ruby.h +enc/trans/emoji.$(OBJEXT): internal/intern/select.h +enc/trans/emoji.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/emoji.$(OBJEXT): internal/intern/signal.h +enc/trans/emoji.$(OBJEXT): internal/intern/sprintf.h +enc/trans/emoji.$(OBJEXT): internal/intern/string.h +enc/trans/emoji.$(OBJEXT): internal/intern/struct.h +enc/trans/emoji.$(OBJEXT): internal/intern/thread.h +enc/trans/emoji.$(OBJEXT): internal/intern/time.h +enc/trans/emoji.$(OBJEXT): internal/intern/variable.h +enc/trans/emoji.$(OBJEXT): internal/intern/vm.h +enc/trans/emoji.$(OBJEXT): internal/interpreter.h +enc/trans/emoji.$(OBJEXT): internal/iterator.h +enc/trans/emoji.$(OBJEXT): internal/memory.h +enc/trans/emoji.$(OBJEXT): internal/method.h +enc/trans/emoji.$(OBJEXT): internal/module.h +enc/trans/emoji.$(OBJEXT): internal/newobj.h +enc/trans/emoji.$(OBJEXT): internal/rgengc.h +enc/trans/emoji.$(OBJEXT): internal/scan_args.h +enc/trans/emoji.$(OBJEXT): internal/special_consts.h +enc/trans/emoji.$(OBJEXT): internal/static_assert.h +enc/trans/emoji.$(OBJEXT): internal/stdalign.h +enc/trans/emoji.$(OBJEXT): internal/stdbool.h +enc/trans/emoji.$(OBJEXT): internal/symbol.h +enc/trans/emoji.$(OBJEXT): internal/value.h +enc/trans/emoji.$(OBJEXT): internal/value_type.h +enc/trans/emoji.$(OBJEXT): internal/variable.h +enc/trans/emoji.$(OBJEXT): internal/warning_push.h +enc/trans/emoji.$(OBJEXT): internal/xmalloc.h enc/trans/emoji.$(OBJEXT): missing.h enc/trans/emoji.$(OBJEXT): st.h enc/trans/emoji.$(OBJEXT): subst.h @@ -441,10 +2984,157 @@ enc/trans/emoji_iso2022_kddi.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/emoji_iso2022_kddi.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/emoji_iso2022_kddi.$(OBJEXT): assert.h enc/trans/emoji_iso2022_kddi.$(OBJEXT): backward.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): backward/2/assume.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): backward/2/attributes.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): backward/2/bool.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): backward/2/inttypes.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): backward/2/limits.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): backward/2/long_long.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): backward/2/stdalign.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): backward/2/stdarg.h enc/trans/emoji_iso2022_kddi.$(OBJEXT): config.h enc/trans/emoji_iso2022_kddi.$(OBJEXT): defines.h enc/trans/emoji_iso2022_kddi.$(OBJEXT): enc/trans/emoji_iso2022_kddi.c enc/trans/emoji_iso2022_kddi.$(OBJEXT): intern.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/anyargs.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/char.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/double.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/int.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/long.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/short.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/assume.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/artificial.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/cold.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/const.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/constexpr.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/deprecated.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/error.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/forceinline.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/format.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/noalias.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/noexcept.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/noinline.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/nonnull.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/noreturn.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/pure.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/restrict.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/warning.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/attr/weakref.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/cast.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/compiler_is.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/compiler_since.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/config.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/constant_p.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core/rarray.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core/rbasic.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core/rbignum.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core/rclass.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core/rdata.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core/rfile.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core/rhash.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core/robject.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core/rregexp.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core/rstring.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core/rstruct.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/ctype.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/dllexport.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/dosish.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/error.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/eval.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/event.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/fl_type.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/gc.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/glob.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/globals.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/has/attribute.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/has/builtin.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/has/c_attribute.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/has/extension.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/has/feature.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/has/warning.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/array.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/bignum.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/class.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/compar.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/complex.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/cont.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/dir.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/enum.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/enumerator.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/error.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/eval.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/file.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/gc.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/hash.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/io.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/load.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/marshal.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/numeric.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/object.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/parse.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/proc.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/process.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/random.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/range.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/rational.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/re.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/ruby.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/select.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/signal.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/sprintf.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/string.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/struct.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/thread.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/time.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/variable.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/intern/vm.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/interpreter.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/iterator.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/memory.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/method.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/module.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/newobj.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/rgengc.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/scan_args.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/special_consts.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/static_assert.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/stdalign.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/stdbool.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/symbol.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/value.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/value_type.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/variable.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/warning_push.h +enc/trans/emoji_iso2022_kddi.$(OBJEXT): internal/xmalloc.h enc/trans/emoji_iso2022_kddi.$(OBJEXT): missing.h enc/trans/emoji_iso2022_kddi.$(OBJEXT): st.h enc/trans/emoji_iso2022_kddi.$(OBJEXT): subst.h @@ -452,10 +3142,157 @@ enc/trans/emoji_sjis_docomo.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/emoji_sjis_docomo.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/emoji_sjis_docomo.$(OBJEXT): assert.h enc/trans/emoji_sjis_docomo.$(OBJEXT): backward.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): backward/2/assume.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): backward/2/attributes.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): backward/2/bool.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): backward/2/inttypes.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): backward/2/limits.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): backward/2/long_long.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): backward/2/stdalign.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): backward/2/stdarg.h enc/trans/emoji_sjis_docomo.$(OBJEXT): config.h enc/trans/emoji_sjis_docomo.$(OBJEXT): defines.h enc/trans/emoji_sjis_docomo.$(OBJEXT): enc/trans/emoji_sjis_docomo.c enc/trans/emoji_sjis_docomo.$(OBJEXT): intern.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/anyargs.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/char.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/double.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/int.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/long.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/short.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/assume.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/artificial.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/cold.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/const.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/constexpr.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/deprecated.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/error.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/forceinline.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/format.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/noalias.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/noexcept.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/noinline.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/nonnull.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/noreturn.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/pure.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/restrict.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/warning.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/attr/weakref.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/cast.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/compiler_is.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/compiler_since.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/config.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/constant_p.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core/rarray.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core/rbasic.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core/rbignum.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core/rclass.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core/rdata.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core/rfile.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core/rhash.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core/robject.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core/rregexp.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core/rstring.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core/rstruct.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/ctype.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/dllexport.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/dosish.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/error.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/eval.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/event.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/fl_type.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/gc.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/glob.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/globals.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/has/attribute.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/has/builtin.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/has/c_attribute.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/has/extension.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/has/feature.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/has/warning.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/array.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/bignum.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/class.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/compar.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/complex.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/cont.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/dir.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/enum.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/enumerator.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/error.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/eval.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/file.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/gc.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/hash.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/io.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/load.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/marshal.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/numeric.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/object.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/parse.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/proc.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/process.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/random.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/range.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/rational.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/re.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/ruby.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/select.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/signal.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/sprintf.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/string.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/struct.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/thread.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/time.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/variable.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/intern/vm.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/interpreter.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/iterator.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/memory.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/method.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/module.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/newobj.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/rgengc.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/scan_args.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/special_consts.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/static_assert.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/stdalign.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/stdbool.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/symbol.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/value.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/value_type.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/variable.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/warning_push.h +enc/trans/emoji_sjis_docomo.$(OBJEXT): internal/xmalloc.h enc/trans/emoji_sjis_docomo.$(OBJEXT): missing.h enc/trans/emoji_sjis_docomo.$(OBJEXT): st.h enc/trans/emoji_sjis_docomo.$(OBJEXT): subst.h @@ -463,10 +3300,157 @@ enc/trans/emoji_sjis_kddi.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/emoji_sjis_kddi.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/emoji_sjis_kddi.$(OBJEXT): assert.h enc/trans/emoji_sjis_kddi.$(OBJEXT): backward.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): backward/2/assume.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): backward/2/attributes.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): backward/2/bool.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): backward/2/inttypes.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): backward/2/limits.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): backward/2/long_long.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): backward/2/stdalign.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): backward/2/stdarg.h enc/trans/emoji_sjis_kddi.$(OBJEXT): config.h enc/trans/emoji_sjis_kddi.$(OBJEXT): defines.h enc/trans/emoji_sjis_kddi.$(OBJEXT): enc/trans/emoji_sjis_kddi.c enc/trans/emoji_sjis_kddi.$(OBJEXT): intern.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/anyargs.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/char.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/double.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/int.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/long.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/short.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/assume.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/artificial.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/cold.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/const.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/constexpr.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/deprecated.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/error.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/forceinline.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/format.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/noalias.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/noexcept.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/noinline.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/nonnull.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/noreturn.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/pure.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/restrict.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/warning.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/attr/weakref.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/cast.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/compiler_is.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/compiler_since.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/config.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/constant_p.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core/rarray.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core/rbasic.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core/rbignum.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core/rclass.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core/rdata.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core/rfile.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core/rhash.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core/robject.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core/rregexp.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core/rstring.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core/rstruct.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/ctype.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/dllexport.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/dosish.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/error.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/eval.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/event.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/fl_type.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/gc.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/glob.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/globals.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/has/attribute.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/has/builtin.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/has/c_attribute.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/has/extension.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/has/feature.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/has/warning.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/array.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/bignum.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/class.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/compar.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/complex.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/cont.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/dir.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/enum.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/enumerator.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/error.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/eval.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/file.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/gc.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/hash.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/io.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/load.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/marshal.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/numeric.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/object.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/parse.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/proc.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/process.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/random.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/range.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/rational.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/re.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/ruby.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/select.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/signal.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/sprintf.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/string.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/struct.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/thread.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/time.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/variable.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/intern/vm.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/interpreter.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/iterator.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/memory.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/method.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/module.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/newobj.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/rgengc.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/scan_args.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/special_consts.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/static_assert.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/stdalign.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/stdbool.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/symbol.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/value.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/value_type.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/variable.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/warning_push.h +enc/trans/emoji_sjis_kddi.$(OBJEXT): internal/xmalloc.h enc/trans/emoji_sjis_kddi.$(OBJEXT): missing.h enc/trans/emoji_sjis_kddi.$(OBJEXT): st.h enc/trans/emoji_sjis_kddi.$(OBJEXT): subst.h @@ -474,10 +3458,157 @@ enc/trans/emoji_sjis_softbank.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/emoji_sjis_softbank.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/emoji_sjis_softbank.$(OBJEXT): assert.h enc/trans/emoji_sjis_softbank.$(OBJEXT): backward.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): backward/2/assume.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): backward/2/attributes.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): backward/2/bool.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): backward/2/inttypes.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): backward/2/limits.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): backward/2/long_long.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): backward/2/stdalign.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): backward/2/stdarg.h enc/trans/emoji_sjis_softbank.$(OBJEXT): config.h enc/trans/emoji_sjis_softbank.$(OBJEXT): defines.h enc/trans/emoji_sjis_softbank.$(OBJEXT): enc/trans/emoji_sjis_softbank.c enc/trans/emoji_sjis_softbank.$(OBJEXT): intern.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/anyargs.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/char.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/double.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/int.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/long.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/short.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/assume.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/artificial.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/cold.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/const.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/constexpr.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/deprecated.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/error.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/forceinline.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/format.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/noalias.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/noexcept.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/noinline.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/nonnull.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/noreturn.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/pure.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/restrict.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/warning.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/attr/weakref.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/cast.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/compiler_is.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/compiler_since.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/config.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/constant_p.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core/rarray.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core/rbasic.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core/rbignum.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core/rclass.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core/rdata.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core/rfile.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core/rhash.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core/robject.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core/rregexp.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core/rstring.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core/rstruct.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/ctype.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/dllexport.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/dosish.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/error.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/eval.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/event.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/fl_type.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/gc.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/glob.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/globals.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/has/attribute.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/has/builtin.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/has/c_attribute.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/has/extension.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/has/feature.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/has/warning.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/array.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/bignum.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/class.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/compar.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/complex.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/cont.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/dir.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/enum.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/enumerator.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/error.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/eval.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/file.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/gc.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/hash.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/io.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/load.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/marshal.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/numeric.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/object.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/parse.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/proc.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/process.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/random.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/range.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/rational.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/re.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/ruby.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/select.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/signal.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/sprintf.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/string.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/struct.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/thread.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/time.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/variable.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/intern/vm.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/interpreter.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/iterator.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/memory.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/method.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/module.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/newobj.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/rgengc.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/scan_args.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/special_consts.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/static_assert.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/stdalign.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/stdbool.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/symbol.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/value.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/value_type.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/variable.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/warning_push.h +enc/trans/emoji_sjis_softbank.$(OBJEXT): internal/xmalloc.h enc/trans/emoji_sjis_softbank.$(OBJEXT): missing.h enc/trans/emoji_sjis_softbank.$(OBJEXT): st.h enc/trans/emoji_sjis_softbank.$(OBJEXT): subst.h @@ -485,10 +3616,157 @@ enc/trans/escape.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/escape.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/escape.$(OBJEXT): assert.h enc/trans/escape.$(OBJEXT): backward.h +enc/trans/escape.$(OBJEXT): backward/2/assume.h +enc/trans/escape.$(OBJEXT): backward/2/attributes.h +enc/trans/escape.$(OBJEXT): backward/2/bool.h +enc/trans/escape.$(OBJEXT): backward/2/inttypes.h +enc/trans/escape.$(OBJEXT): backward/2/limits.h +enc/trans/escape.$(OBJEXT): backward/2/long_long.h +enc/trans/escape.$(OBJEXT): backward/2/stdalign.h +enc/trans/escape.$(OBJEXT): backward/2/stdarg.h enc/trans/escape.$(OBJEXT): config.h enc/trans/escape.$(OBJEXT): defines.h enc/trans/escape.$(OBJEXT): enc/trans/escape.c enc/trans/escape.$(OBJEXT): intern.h +enc/trans/escape.$(OBJEXT): internal/anyargs.h +enc/trans/escape.$(OBJEXT): internal/arithmetic.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/char.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/double.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/int.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/long.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/short.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/escape.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/escape.$(OBJEXT): internal/assume.h +enc/trans/escape.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/escape.$(OBJEXT): internal/attr/artificial.h +enc/trans/escape.$(OBJEXT): internal/attr/cold.h +enc/trans/escape.$(OBJEXT): internal/attr/const.h +enc/trans/escape.$(OBJEXT): internal/attr/constexpr.h +enc/trans/escape.$(OBJEXT): internal/attr/deprecated.h +enc/trans/escape.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/escape.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/escape.$(OBJEXT): internal/attr/error.h +enc/trans/escape.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/escape.$(OBJEXT): internal/attr/forceinline.h +enc/trans/escape.$(OBJEXT): internal/attr/format.h +enc/trans/escape.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/escape.$(OBJEXT): internal/attr/noalias.h +enc/trans/escape.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/escape.$(OBJEXT): internal/attr/noexcept.h +enc/trans/escape.$(OBJEXT): internal/attr/noinline.h +enc/trans/escape.$(OBJEXT): internal/attr/nonnull.h +enc/trans/escape.$(OBJEXT): internal/attr/noreturn.h +enc/trans/escape.$(OBJEXT): internal/attr/pure.h +enc/trans/escape.$(OBJEXT): internal/attr/restrict.h +enc/trans/escape.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/escape.$(OBJEXT): internal/attr/warning.h +enc/trans/escape.$(OBJEXT): internal/attr/weakref.h +enc/trans/escape.$(OBJEXT): internal/cast.h +enc/trans/escape.$(OBJEXT): internal/compiler_is.h +enc/trans/escape.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/escape.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/escape.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/escape.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/escape.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/escape.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/escape.$(OBJEXT): internal/compiler_since.h +enc/trans/escape.$(OBJEXT): internal/config.h +enc/trans/escape.$(OBJEXT): internal/constant_p.h +enc/trans/escape.$(OBJEXT): internal/core.h +enc/trans/escape.$(OBJEXT): internal/core/rarray.h +enc/trans/escape.$(OBJEXT): internal/core/rbasic.h +enc/trans/escape.$(OBJEXT): internal/core/rbignum.h +enc/trans/escape.$(OBJEXT): internal/core/rclass.h +enc/trans/escape.$(OBJEXT): internal/core/rdata.h +enc/trans/escape.$(OBJEXT): internal/core/rfile.h +enc/trans/escape.$(OBJEXT): internal/core/rhash.h +enc/trans/escape.$(OBJEXT): internal/core/robject.h +enc/trans/escape.$(OBJEXT): internal/core/rregexp.h +enc/trans/escape.$(OBJEXT): internal/core/rstring.h +enc/trans/escape.$(OBJEXT): internal/core/rstruct.h +enc/trans/escape.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/escape.$(OBJEXT): internal/ctype.h +enc/trans/escape.$(OBJEXT): internal/dllexport.h +enc/trans/escape.$(OBJEXT): internal/dosish.h +enc/trans/escape.$(OBJEXT): internal/error.h +enc/trans/escape.$(OBJEXT): internal/eval.h +enc/trans/escape.$(OBJEXT): internal/event.h +enc/trans/escape.$(OBJEXT): internal/fl_type.h +enc/trans/escape.$(OBJEXT): internal/gc.h +enc/trans/escape.$(OBJEXT): internal/glob.h +enc/trans/escape.$(OBJEXT): internal/globals.h +enc/trans/escape.$(OBJEXT): internal/has/attribute.h +enc/trans/escape.$(OBJEXT): internal/has/builtin.h +enc/trans/escape.$(OBJEXT): internal/has/c_attribute.h +enc/trans/escape.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/escape.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/escape.$(OBJEXT): internal/has/extension.h +enc/trans/escape.$(OBJEXT): internal/has/feature.h +enc/trans/escape.$(OBJEXT): internal/has/warning.h +enc/trans/escape.$(OBJEXT): internal/intern/array.h +enc/trans/escape.$(OBJEXT): internal/intern/bignum.h +enc/trans/escape.$(OBJEXT): internal/intern/class.h +enc/trans/escape.$(OBJEXT): internal/intern/compar.h +enc/trans/escape.$(OBJEXT): internal/intern/complex.h +enc/trans/escape.$(OBJEXT): internal/intern/cont.h +enc/trans/escape.$(OBJEXT): internal/intern/dir.h +enc/trans/escape.$(OBJEXT): internal/intern/enum.h +enc/trans/escape.$(OBJEXT): internal/intern/enumerator.h +enc/trans/escape.$(OBJEXT): internal/intern/error.h +enc/trans/escape.$(OBJEXT): internal/intern/eval.h +enc/trans/escape.$(OBJEXT): internal/intern/file.h +enc/trans/escape.$(OBJEXT): internal/intern/gc.h +enc/trans/escape.$(OBJEXT): internal/intern/hash.h +enc/trans/escape.$(OBJEXT): internal/intern/io.h +enc/trans/escape.$(OBJEXT): internal/intern/load.h +enc/trans/escape.$(OBJEXT): internal/intern/marshal.h +enc/trans/escape.$(OBJEXT): internal/intern/numeric.h +enc/trans/escape.$(OBJEXT): internal/intern/object.h +enc/trans/escape.$(OBJEXT): internal/intern/parse.h +enc/trans/escape.$(OBJEXT): internal/intern/proc.h +enc/trans/escape.$(OBJEXT): internal/intern/process.h +enc/trans/escape.$(OBJEXT): internal/intern/random.h +enc/trans/escape.$(OBJEXT): internal/intern/range.h +enc/trans/escape.$(OBJEXT): internal/intern/rational.h +enc/trans/escape.$(OBJEXT): internal/intern/re.h +enc/trans/escape.$(OBJEXT): internal/intern/ruby.h +enc/trans/escape.$(OBJEXT): internal/intern/select.h +enc/trans/escape.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/escape.$(OBJEXT): internal/intern/signal.h +enc/trans/escape.$(OBJEXT): internal/intern/sprintf.h +enc/trans/escape.$(OBJEXT): internal/intern/string.h +enc/trans/escape.$(OBJEXT): internal/intern/struct.h +enc/trans/escape.$(OBJEXT): internal/intern/thread.h +enc/trans/escape.$(OBJEXT): internal/intern/time.h +enc/trans/escape.$(OBJEXT): internal/intern/variable.h +enc/trans/escape.$(OBJEXT): internal/intern/vm.h +enc/trans/escape.$(OBJEXT): internal/interpreter.h +enc/trans/escape.$(OBJEXT): internal/iterator.h +enc/trans/escape.$(OBJEXT): internal/memory.h +enc/trans/escape.$(OBJEXT): internal/method.h +enc/trans/escape.$(OBJEXT): internal/module.h +enc/trans/escape.$(OBJEXT): internal/newobj.h +enc/trans/escape.$(OBJEXT): internal/rgengc.h +enc/trans/escape.$(OBJEXT): internal/scan_args.h +enc/trans/escape.$(OBJEXT): internal/special_consts.h +enc/trans/escape.$(OBJEXT): internal/static_assert.h +enc/trans/escape.$(OBJEXT): internal/stdalign.h +enc/trans/escape.$(OBJEXT): internal/stdbool.h +enc/trans/escape.$(OBJEXT): internal/symbol.h +enc/trans/escape.$(OBJEXT): internal/value.h +enc/trans/escape.$(OBJEXT): internal/value_type.h +enc/trans/escape.$(OBJEXT): internal/variable.h +enc/trans/escape.$(OBJEXT): internal/warning_push.h +enc/trans/escape.$(OBJEXT): internal/xmalloc.h enc/trans/escape.$(OBJEXT): missing.h enc/trans/escape.$(OBJEXT): st.h enc/trans/escape.$(OBJEXT): subst.h @@ -496,10 +3774,157 @@ enc/trans/gb18030.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/gb18030.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/gb18030.$(OBJEXT): assert.h enc/trans/gb18030.$(OBJEXT): backward.h +enc/trans/gb18030.$(OBJEXT): backward/2/assume.h +enc/trans/gb18030.$(OBJEXT): backward/2/attributes.h +enc/trans/gb18030.$(OBJEXT): backward/2/bool.h +enc/trans/gb18030.$(OBJEXT): backward/2/inttypes.h +enc/trans/gb18030.$(OBJEXT): backward/2/limits.h +enc/trans/gb18030.$(OBJEXT): backward/2/long_long.h +enc/trans/gb18030.$(OBJEXT): backward/2/stdalign.h +enc/trans/gb18030.$(OBJEXT): backward/2/stdarg.h enc/trans/gb18030.$(OBJEXT): config.h enc/trans/gb18030.$(OBJEXT): defines.h enc/trans/gb18030.$(OBJEXT): enc/trans/gb18030.c enc/trans/gb18030.$(OBJEXT): intern.h +enc/trans/gb18030.$(OBJEXT): internal/anyargs.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/char.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/double.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/int.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/long.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/short.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/gb18030.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/gb18030.$(OBJEXT): internal/assume.h +enc/trans/gb18030.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/gb18030.$(OBJEXT): internal/attr/artificial.h +enc/trans/gb18030.$(OBJEXT): internal/attr/cold.h +enc/trans/gb18030.$(OBJEXT): internal/attr/const.h +enc/trans/gb18030.$(OBJEXT): internal/attr/constexpr.h +enc/trans/gb18030.$(OBJEXT): internal/attr/deprecated.h +enc/trans/gb18030.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/gb18030.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/gb18030.$(OBJEXT): internal/attr/error.h +enc/trans/gb18030.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/gb18030.$(OBJEXT): internal/attr/forceinline.h +enc/trans/gb18030.$(OBJEXT): internal/attr/format.h +enc/trans/gb18030.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/gb18030.$(OBJEXT): internal/attr/noalias.h +enc/trans/gb18030.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/gb18030.$(OBJEXT): internal/attr/noexcept.h +enc/trans/gb18030.$(OBJEXT): internal/attr/noinline.h +enc/trans/gb18030.$(OBJEXT): internal/attr/nonnull.h +enc/trans/gb18030.$(OBJEXT): internal/attr/noreturn.h +enc/trans/gb18030.$(OBJEXT): internal/attr/pure.h +enc/trans/gb18030.$(OBJEXT): internal/attr/restrict.h +enc/trans/gb18030.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/gb18030.$(OBJEXT): internal/attr/warning.h +enc/trans/gb18030.$(OBJEXT): internal/attr/weakref.h +enc/trans/gb18030.$(OBJEXT): internal/cast.h +enc/trans/gb18030.$(OBJEXT): internal/compiler_is.h +enc/trans/gb18030.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/gb18030.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/gb18030.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/gb18030.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/gb18030.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/gb18030.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/gb18030.$(OBJEXT): internal/compiler_since.h +enc/trans/gb18030.$(OBJEXT): internal/config.h +enc/trans/gb18030.$(OBJEXT): internal/constant_p.h +enc/trans/gb18030.$(OBJEXT): internal/core.h +enc/trans/gb18030.$(OBJEXT): internal/core/rarray.h +enc/trans/gb18030.$(OBJEXT): internal/core/rbasic.h +enc/trans/gb18030.$(OBJEXT): internal/core/rbignum.h +enc/trans/gb18030.$(OBJEXT): internal/core/rclass.h +enc/trans/gb18030.$(OBJEXT): internal/core/rdata.h +enc/trans/gb18030.$(OBJEXT): internal/core/rfile.h +enc/trans/gb18030.$(OBJEXT): internal/core/rhash.h +enc/trans/gb18030.$(OBJEXT): internal/core/robject.h +enc/trans/gb18030.$(OBJEXT): internal/core/rregexp.h +enc/trans/gb18030.$(OBJEXT): internal/core/rstring.h +enc/trans/gb18030.$(OBJEXT): internal/core/rstruct.h +enc/trans/gb18030.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/gb18030.$(OBJEXT): internal/ctype.h +enc/trans/gb18030.$(OBJEXT): internal/dllexport.h +enc/trans/gb18030.$(OBJEXT): internal/dosish.h +enc/trans/gb18030.$(OBJEXT): internal/error.h +enc/trans/gb18030.$(OBJEXT): internal/eval.h +enc/trans/gb18030.$(OBJEXT): internal/event.h +enc/trans/gb18030.$(OBJEXT): internal/fl_type.h +enc/trans/gb18030.$(OBJEXT): internal/gc.h +enc/trans/gb18030.$(OBJEXT): internal/glob.h +enc/trans/gb18030.$(OBJEXT): internal/globals.h +enc/trans/gb18030.$(OBJEXT): internal/has/attribute.h +enc/trans/gb18030.$(OBJEXT): internal/has/builtin.h +enc/trans/gb18030.$(OBJEXT): internal/has/c_attribute.h +enc/trans/gb18030.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/gb18030.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/gb18030.$(OBJEXT): internal/has/extension.h +enc/trans/gb18030.$(OBJEXT): internal/has/feature.h +enc/trans/gb18030.$(OBJEXT): internal/has/warning.h +enc/trans/gb18030.$(OBJEXT): internal/intern/array.h +enc/trans/gb18030.$(OBJEXT): internal/intern/bignum.h +enc/trans/gb18030.$(OBJEXT): internal/intern/class.h +enc/trans/gb18030.$(OBJEXT): internal/intern/compar.h +enc/trans/gb18030.$(OBJEXT): internal/intern/complex.h +enc/trans/gb18030.$(OBJEXT): internal/intern/cont.h +enc/trans/gb18030.$(OBJEXT): internal/intern/dir.h +enc/trans/gb18030.$(OBJEXT): internal/intern/enum.h +enc/trans/gb18030.$(OBJEXT): internal/intern/enumerator.h +enc/trans/gb18030.$(OBJEXT): internal/intern/error.h +enc/trans/gb18030.$(OBJEXT): internal/intern/eval.h +enc/trans/gb18030.$(OBJEXT): internal/intern/file.h +enc/trans/gb18030.$(OBJEXT): internal/intern/gc.h +enc/trans/gb18030.$(OBJEXT): internal/intern/hash.h +enc/trans/gb18030.$(OBJEXT): internal/intern/io.h +enc/trans/gb18030.$(OBJEXT): internal/intern/load.h +enc/trans/gb18030.$(OBJEXT): internal/intern/marshal.h +enc/trans/gb18030.$(OBJEXT): internal/intern/numeric.h +enc/trans/gb18030.$(OBJEXT): internal/intern/object.h +enc/trans/gb18030.$(OBJEXT): internal/intern/parse.h +enc/trans/gb18030.$(OBJEXT): internal/intern/proc.h +enc/trans/gb18030.$(OBJEXT): internal/intern/process.h +enc/trans/gb18030.$(OBJEXT): internal/intern/random.h +enc/trans/gb18030.$(OBJEXT): internal/intern/range.h +enc/trans/gb18030.$(OBJEXT): internal/intern/rational.h +enc/trans/gb18030.$(OBJEXT): internal/intern/re.h +enc/trans/gb18030.$(OBJEXT): internal/intern/ruby.h +enc/trans/gb18030.$(OBJEXT): internal/intern/select.h +enc/trans/gb18030.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/gb18030.$(OBJEXT): internal/intern/signal.h +enc/trans/gb18030.$(OBJEXT): internal/intern/sprintf.h +enc/trans/gb18030.$(OBJEXT): internal/intern/string.h +enc/trans/gb18030.$(OBJEXT): internal/intern/struct.h +enc/trans/gb18030.$(OBJEXT): internal/intern/thread.h +enc/trans/gb18030.$(OBJEXT): internal/intern/time.h +enc/trans/gb18030.$(OBJEXT): internal/intern/variable.h +enc/trans/gb18030.$(OBJEXT): internal/intern/vm.h +enc/trans/gb18030.$(OBJEXT): internal/interpreter.h +enc/trans/gb18030.$(OBJEXT): internal/iterator.h +enc/trans/gb18030.$(OBJEXT): internal/memory.h +enc/trans/gb18030.$(OBJEXT): internal/method.h +enc/trans/gb18030.$(OBJEXT): internal/module.h +enc/trans/gb18030.$(OBJEXT): internal/newobj.h +enc/trans/gb18030.$(OBJEXT): internal/rgengc.h +enc/trans/gb18030.$(OBJEXT): internal/scan_args.h +enc/trans/gb18030.$(OBJEXT): internal/special_consts.h +enc/trans/gb18030.$(OBJEXT): internal/static_assert.h +enc/trans/gb18030.$(OBJEXT): internal/stdalign.h +enc/trans/gb18030.$(OBJEXT): internal/stdbool.h +enc/trans/gb18030.$(OBJEXT): internal/symbol.h +enc/trans/gb18030.$(OBJEXT): internal/value.h +enc/trans/gb18030.$(OBJEXT): internal/value_type.h +enc/trans/gb18030.$(OBJEXT): internal/variable.h +enc/trans/gb18030.$(OBJEXT): internal/warning_push.h +enc/trans/gb18030.$(OBJEXT): internal/xmalloc.h enc/trans/gb18030.$(OBJEXT): missing.h enc/trans/gb18030.$(OBJEXT): st.h enc/trans/gb18030.$(OBJEXT): subst.h @@ -507,10 +3932,157 @@ enc/trans/gbk.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/gbk.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/gbk.$(OBJEXT): assert.h enc/trans/gbk.$(OBJEXT): backward.h +enc/trans/gbk.$(OBJEXT): backward/2/assume.h +enc/trans/gbk.$(OBJEXT): backward/2/attributes.h +enc/trans/gbk.$(OBJEXT): backward/2/bool.h +enc/trans/gbk.$(OBJEXT): backward/2/inttypes.h +enc/trans/gbk.$(OBJEXT): backward/2/limits.h +enc/trans/gbk.$(OBJEXT): backward/2/long_long.h +enc/trans/gbk.$(OBJEXT): backward/2/stdalign.h +enc/trans/gbk.$(OBJEXT): backward/2/stdarg.h enc/trans/gbk.$(OBJEXT): config.h enc/trans/gbk.$(OBJEXT): defines.h enc/trans/gbk.$(OBJEXT): enc/trans/gbk.c enc/trans/gbk.$(OBJEXT): intern.h +enc/trans/gbk.$(OBJEXT): internal/anyargs.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/char.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/double.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/int.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/long.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/short.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/gbk.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/gbk.$(OBJEXT): internal/assume.h +enc/trans/gbk.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/gbk.$(OBJEXT): internal/attr/artificial.h +enc/trans/gbk.$(OBJEXT): internal/attr/cold.h +enc/trans/gbk.$(OBJEXT): internal/attr/const.h +enc/trans/gbk.$(OBJEXT): internal/attr/constexpr.h +enc/trans/gbk.$(OBJEXT): internal/attr/deprecated.h +enc/trans/gbk.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/gbk.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/gbk.$(OBJEXT): internal/attr/error.h +enc/trans/gbk.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/gbk.$(OBJEXT): internal/attr/forceinline.h +enc/trans/gbk.$(OBJEXT): internal/attr/format.h +enc/trans/gbk.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/gbk.$(OBJEXT): internal/attr/noalias.h +enc/trans/gbk.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/gbk.$(OBJEXT): internal/attr/noexcept.h +enc/trans/gbk.$(OBJEXT): internal/attr/noinline.h +enc/trans/gbk.$(OBJEXT): internal/attr/nonnull.h +enc/trans/gbk.$(OBJEXT): internal/attr/noreturn.h +enc/trans/gbk.$(OBJEXT): internal/attr/pure.h +enc/trans/gbk.$(OBJEXT): internal/attr/restrict.h +enc/trans/gbk.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/gbk.$(OBJEXT): internal/attr/warning.h +enc/trans/gbk.$(OBJEXT): internal/attr/weakref.h +enc/trans/gbk.$(OBJEXT): internal/cast.h +enc/trans/gbk.$(OBJEXT): internal/compiler_is.h +enc/trans/gbk.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/gbk.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/gbk.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/gbk.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/gbk.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/gbk.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/gbk.$(OBJEXT): internal/compiler_since.h +enc/trans/gbk.$(OBJEXT): internal/config.h +enc/trans/gbk.$(OBJEXT): internal/constant_p.h +enc/trans/gbk.$(OBJEXT): internal/core.h +enc/trans/gbk.$(OBJEXT): internal/core/rarray.h +enc/trans/gbk.$(OBJEXT): internal/core/rbasic.h +enc/trans/gbk.$(OBJEXT): internal/core/rbignum.h +enc/trans/gbk.$(OBJEXT): internal/core/rclass.h +enc/trans/gbk.$(OBJEXT): internal/core/rdata.h +enc/trans/gbk.$(OBJEXT): internal/core/rfile.h +enc/trans/gbk.$(OBJEXT): internal/core/rhash.h +enc/trans/gbk.$(OBJEXT): internal/core/robject.h +enc/trans/gbk.$(OBJEXT): internal/core/rregexp.h +enc/trans/gbk.$(OBJEXT): internal/core/rstring.h +enc/trans/gbk.$(OBJEXT): internal/core/rstruct.h +enc/trans/gbk.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/gbk.$(OBJEXT): internal/ctype.h +enc/trans/gbk.$(OBJEXT): internal/dllexport.h +enc/trans/gbk.$(OBJEXT): internal/dosish.h +enc/trans/gbk.$(OBJEXT): internal/error.h +enc/trans/gbk.$(OBJEXT): internal/eval.h +enc/trans/gbk.$(OBJEXT): internal/event.h +enc/trans/gbk.$(OBJEXT): internal/fl_type.h +enc/trans/gbk.$(OBJEXT): internal/gc.h +enc/trans/gbk.$(OBJEXT): internal/glob.h +enc/trans/gbk.$(OBJEXT): internal/globals.h +enc/trans/gbk.$(OBJEXT): internal/has/attribute.h +enc/trans/gbk.$(OBJEXT): internal/has/builtin.h +enc/trans/gbk.$(OBJEXT): internal/has/c_attribute.h +enc/trans/gbk.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/gbk.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/gbk.$(OBJEXT): internal/has/extension.h +enc/trans/gbk.$(OBJEXT): internal/has/feature.h +enc/trans/gbk.$(OBJEXT): internal/has/warning.h +enc/trans/gbk.$(OBJEXT): internal/intern/array.h +enc/trans/gbk.$(OBJEXT): internal/intern/bignum.h +enc/trans/gbk.$(OBJEXT): internal/intern/class.h +enc/trans/gbk.$(OBJEXT): internal/intern/compar.h +enc/trans/gbk.$(OBJEXT): internal/intern/complex.h +enc/trans/gbk.$(OBJEXT): internal/intern/cont.h +enc/trans/gbk.$(OBJEXT): internal/intern/dir.h +enc/trans/gbk.$(OBJEXT): internal/intern/enum.h +enc/trans/gbk.$(OBJEXT): internal/intern/enumerator.h +enc/trans/gbk.$(OBJEXT): internal/intern/error.h +enc/trans/gbk.$(OBJEXT): internal/intern/eval.h +enc/trans/gbk.$(OBJEXT): internal/intern/file.h +enc/trans/gbk.$(OBJEXT): internal/intern/gc.h +enc/trans/gbk.$(OBJEXT): internal/intern/hash.h +enc/trans/gbk.$(OBJEXT): internal/intern/io.h +enc/trans/gbk.$(OBJEXT): internal/intern/load.h +enc/trans/gbk.$(OBJEXT): internal/intern/marshal.h +enc/trans/gbk.$(OBJEXT): internal/intern/numeric.h +enc/trans/gbk.$(OBJEXT): internal/intern/object.h +enc/trans/gbk.$(OBJEXT): internal/intern/parse.h +enc/trans/gbk.$(OBJEXT): internal/intern/proc.h +enc/trans/gbk.$(OBJEXT): internal/intern/process.h +enc/trans/gbk.$(OBJEXT): internal/intern/random.h +enc/trans/gbk.$(OBJEXT): internal/intern/range.h +enc/trans/gbk.$(OBJEXT): internal/intern/rational.h +enc/trans/gbk.$(OBJEXT): internal/intern/re.h +enc/trans/gbk.$(OBJEXT): internal/intern/ruby.h +enc/trans/gbk.$(OBJEXT): internal/intern/select.h +enc/trans/gbk.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/gbk.$(OBJEXT): internal/intern/signal.h +enc/trans/gbk.$(OBJEXT): internal/intern/sprintf.h +enc/trans/gbk.$(OBJEXT): internal/intern/string.h +enc/trans/gbk.$(OBJEXT): internal/intern/struct.h +enc/trans/gbk.$(OBJEXT): internal/intern/thread.h +enc/trans/gbk.$(OBJEXT): internal/intern/time.h +enc/trans/gbk.$(OBJEXT): internal/intern/variable.h +enc/trans/gbk.$(OBJEXT): internal/intern/vm.h +enc/trans/gbk.$(OBJEXT): internal/interpreter.h +enc/trans/gbk.$(OBJEXT): internal/iterator.h +enc/trans/gbk.$(OBJEXT): internal/memory.h +enc/trans/gbk.$(OBJEXT): internal/method.h +enc/trans/gbk.$(OBJEXT): internal/module.h +enc/trans/gbk.$(OBJEXT): internal/newobj.h +enc/trans/gbk.$(OBJEXT): internal/rgengc.h +enc/trans/gbk.$(OBJEXT): internal/scan_args.h +enc/trans/gbk.$(OBJEXT): internal/special_consts.h +enc/trans/gbk.$(OBJEXT): internal/static_assert.h +enc/trans/gbk.$(OBJEXT): internal/stdalign.h +enc/trans/gbk.$(OBJEXT): internal/stdbool.h +enc/trans/gbk.$(OBJEXT): internal/symbol.h +enc/trans/gbk.$(OBJEXT): internal/value.h +enc/trans/gbk.$(OBJEXT): internal/value_type.h +enc/trans/gbk.$(OBJEXT): internal/variable.h +enc/trans/gbk.$(OBJEXT): internal/warning_push.h +enc/trans/gbk.$(OBJEXT): internal/xmalloc.h enc/trans/gbk.$(OBJEXT): missing.h enc/trans/gbk.$(OBJEXT): st.h enc/trans/gbk.$(OBJEXT): subst.h @@ -518,10 +4090,157 @@ enc/trans/iso2022.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/iso2022.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/iso2022.$(OBJEXT): assert.h enc/trans/iso2022.$(OBJEXT): backward.h +enc/trans/iso2022.$(OBJEXT): backward/2/assume.h +enc/trans/iso2022.$(OBJEXT): backward/2/attributes.h +enc/trans/iso2022.$(OBJEXT): backward/2/bool.h +enc/trans/iso2022.$(OBJEXT): backward/2/inttypes.h +enc/trans/iso2022.$(OBJEXT): backward/2/limits.h +enc/trans/iso2022.$(OBJEXT): backward/2/long_long.h +enc/trans/iso2022.$(OBJEXT): backward/2/stdalign.h +enc/trans/iso2022.$(OBJEXT): backward/2/stdarg.h enc/trans/iso2022.$(OBJEXT): config.h enc/trans/iso2022.$(OBJEXT): defines.h enc/trans/iso2022.$(OBJEXT): enc/trans/iso2022.c enc/trans/iso2022.$(OBJEXT): intern.h +enc/trans/iso2022.$(OBJEXT): internal/anyargs.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/char.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/double.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/int.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/long.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/short.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/iso2022.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/iso2022.$(OBJEXT): internal/assume.h +enc/trans/iso2022.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/iso2022.$(OBJEXT): internal/attr/artificial.h +enc/trans/iso2022.$(OBJEXT): internal/attr/cold.h +enc/trans/iso2022.$(OBJEXT): internal/attr/const.h +enc/trans/iso2022.$(OBJEXT): internal/attr/constexpr.h +enc/trans/iso2022.$(OBJEXT): internal/attr/deprecated.h +enc/trans/iso2022.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/iso2022.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/iso2022.$(OBJEXT): internal/attr/error.h +enc/trans/iso2022.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/iso2022.$(OBJEXT): internal/attr/forceinline.h +enc/trans/iso2022.$(OBJEXT): internal/attr/format.h +enc/trans/iso2022.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/iso2022.$(OBJEXT): internal/attr/noalias.h +enc/trans/iso2022.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/iso2022.$(OBJEXT): internal/attr/noexcept.h +enc/trans/iso2022.$(OBJEXT): internal/attr/noinline.h +enc/trans/iso2022.$(OBJEXT): internal/attr/nonnull.h +enc/trans/iso2022.$(OBJEXT): internal/attr/noreturn.h +enc/trans/iso2022.$(OBJEXT): internal/attr/pure.h +enc/trans/iso2022.$(OBJEXT): internal/attr/restrict.h +enc/trans/iso2022.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/iso2022.$(OBJEXT): internal/attr/warning.h +enc/trans/iso2022.$(OBJEXT): internal/attr/weakref.h +enc/trans/iso2022.$(OBJEXT): internal/cast.h +enc/trans/iso2022.$(OBJEXT): internal/compiler_is.h +enc/trans/iso2022.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/iso2022.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/iso2022.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/iso2022.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/iso2022.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/iso2022.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/iso2022.$(OBJEXT): internal/compiler_since.h +enc/trans/iso2022.$(OBJEXT): internal/config.h +enc/trans/iso2022.$(OBJEXT): internal/constant_p.h +enc/trans/iso2022.$(OBJEXT): internal/core.h +enc/trans/iso2022.$(OBJEXT): internal/core/rarray.h +enc/trans/iso2022.$(OBJEXT): internal/core/rbasic.h +enc/trans/iso2022.$(OBJEXT): internal/core/rbignum.h +enc/trans/iso2022.$(OBJEXT): internal/core/rclass.h +enc/trans/iso2022.$(OBJEXT): internal/core/rdata.h +enc/trans/iso2022.$(OBJEXT): internal/core/rfile.h +enc/trans/iso2022.$(OBJEXT): internal/core/rhash.h +enc/trans/iso2022.$(OBJEXT): internal/core/robject.h +enc/trans/iso2022.$(OBJEXT): internal/core/rregexp.h +enc/trans/iso2022.$(OBJEXT): internal/core/rstring.h +enc/trans/iso2022.$(OBJEXT): internal/core/rstruct.h +enc/trans/iso2022.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/iso2022.$(OBJEXT): internal/ctype.h +enc/trans/iso2022.$(OBJEXT): internal/dllexport.h +enc/trans/iso2022.$(OBJEXT): internal/dosish.h +enc/trans/iso2022.$(OBJEXT): internal/error.h +enc/trans/iso2022.$(OBJEXT): internal/eval.h +enc/trans/iso2022.$(OBJEXT): internal/event.h +enc/trans/iso2022.$(OBJEXT): internal/fl_type.h +enc/trans/iso2022.$(OBJEXT): internal/gc.h +enc/trans/iso2022.$(OBJEXT): internal/glob.h +enc/trans/iso2022.$(OBJEXT): internal/globals.h +enc/trans/iso2022.$(OBJEXT): internal/has/attribute.h +enc/trans/iso2022.$(OBJEXT): internal/has/builtin.h +enc/trans/iso2022.$(OBJEXT): internal/has/c_attribute.h +enc/trans/iso2022.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/iso2022.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/iso2022.$(OBJEXT): internal/has/extension.h +enc/trans/iso2022.$(OBJEXT): internal/has/feature.h +enc/trans/iso2022.$(OBJEXT): internal/has/warning.h +enc/trans/iso2022.$(OBJEXT): internal/intern/array.h +enc/trans/iso2022.$(OBJEXT): internal/intern/bignum.h +enc/trans/iso2022.$(OBJEXT): internal/intern/class.h +enc/trans/iso2022.$(OBJEXT): internal/intern/compar.h +enc/trans/iso2022.$(OBJEXT): internal/intern/complex.h +enc/trans/iso2022.$(OBJEXT): internal/intern/cont.h +enc/trans/iso2022.$(OBJEXT): internal/intern/dir.h +enc/trans/iso2022.$(OBJEXT): internal/intern/enum.h +enc/trans/iso2022.$(OBJEXT): internal/intern/enumerator.h +enc/trans/iso2022.$(OBJEXT): internal/intern/error.h +enc/trans/iso2022.$(OBJEXT): internal/intern/eval.h +enc/trans/iso2022.$(OBJEXT): internal/intern/file.h +enc/trans/iso2022.$(OBJEXT): internal/intern/gc.h +enc/trans/iso2022.$(OBJEXT): internal/intern/hash.h +enc/trans/iso2022.$(OBJEXT): internal/intern/io.h +enc/trans/iso2022.$(OBJEXT): internal/intern/load.h +enc/trans/iso2022.$(OBJEXT): internal/intern/marshal.h +enc/trans/iso2022.$(OBJEXT): internal/intern/numeric.h +enc/trans/iso2022.$(OBJEXT): internal/intern/object.h +enc/trans/iso2022.$(OBJEXT): internal/intern/parse.h +enc/trans/iso2022.$(OBJEXT): internal/intern/proc.h +enc/trans/iso2022.$(OBJEXT): internal/intern/process.h +enc/trans/iso2022.$(OBJEXT): internal/intern/random.h +enc/trans/iso2022.$(OBJEXT): internal/intern/range.h +enc/trans/iso2022.$(OBJEXT): internal/intern/rational.h +enc/trans/iso2022.$(OBJEXT): internal/intern/re.h +enc/trans/iso2022.$(OBJEXT): internal/intern/ruby.h +enc/trans/iso2022.$(OBJEXT): internal/intern/select.h +enc/trans/iso2022.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/iso2022.$(OBJEXT): internal/intern/signal.h +enc/trans/iso2022.$(OBJEXT): internal/intern/sprintf.h +enc/trans/iso2022.$(OBJEXT): internal/intern/string.h +enc/trans/iso2022.$(OBJEXT): internal/intern/struct.h +enc/trans/iso2022.$(OBJEXT): internal/intern/thread.h +enc/trans/iso2022.$(OBJEXT): internal/intern/time.h +enc/trans/iso2022.$(OBJEXT): internal/intern/variable.h +enc/trans/iso2022.$(OBJEXT): internal/intern/vm.h +enc/trans/iso2022.$(OBJEXT): internal/interpreter.h +enc/trans/iso2022.$(OBJEXT): internal/iterator.h +enc/trans/iso2022.$(OBJEXT): internal/memory.h +enc/trans/iso2022.$(OBJEXT): internal/method.h +enc/trans/iso2022.$(OBJEXT): internal/module.h +enc/trans/iso2022.$(OBJEXT): internal/newobj.h +enc/trans/iso2022.$(OBJEXT): internal/rgengc.h +enc/trans/iso2022.$(OBJEXT): internal/scan_args.h +enc/trans/iso2022.$(OBJEXT): internal/special_consts.h +enc/trans/iso2022.$(OBJEXT): internal/static_assert.h +enc/trans/iso2022.$(OBJEXT): internal/stdalign.h +enc/trans/iso2022.$(OBJEXT): internal/stdbool.h +enc/trans/iso2022.$(OBJEXT): internal/symbol.h +enc/trans/iso2022.$(OBJEXT): internal/value.h +enc/trans/iso2022.$(OBJEXT): internal/value_type.h +enc/trans/iso2022.$(OBJEXT): internal/variable.h +enc/trans/iso2022.$(OBJEXT): internal/warning_push.h +enc/trans/iso2022.$(OBJEXT): internal/xmalloc.h enc/trans/iso2022.$(OBJEXT): missing.h enc/trans/iso2022.$(OBJEXT): st.h enc/trans/iso2022.$(OBJEXT): subst.h @@ -529,10 +4248,157 @@ enc/trans/japanese.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/japanese.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/japanese.$(OBJEXT): assert.h enc/trans/japanese.$(OBJEXT): backward.h +enc/trans/japanese.$(OBJEXT): backward/2/assume.h +enc/trans/japanese.$(OBJEXT): backward/2/attributes.h +enc/trans/japanese.$(OBJEXT): backward/2/bool.h +enc/trans/japanese.$(OBJEXT): backward/2/inttypes.h +enc/trans/japanese.$(OBJEXT): backward/2/limits.h +enc/trans/japanese.$(OBJEXT): backward/2/long_long.h +enc/trans/japanese.$(OBJEXT): backward/2/stdalign.h +enc/trans/japanese.$(OBJEXT): backward/2/stdarg.h enc/trans/japanese.$(OBJEXT): config.h enc/trans/japanese.$(OBJEXT): defines.h enc/trans/japanese.$(OBJEXT): enc/trans/japanese.c enc/trans/japanese.$(OBJEXT): intern.h +enc/trans/japanese.$(OBJEXT): internal/anyargs.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/char.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/double.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/int.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/long.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/short.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/japanese.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/japanese.$(OBJEXT): internal/assume.h +enc/trans/japanese.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/japanese.$(OBJEXT): internal/attr/artificial.h +enc/trans/japanese.$(OBJEXT): internal/attr/cold.h +enc/trans/japanese.$(OBJEXT): internal/attr/const.h +enc/trans/japanese.$(OBJEXT): internal/attr/constexpr.h +enc/trans/japanese.$(OBJEXT): internal/attr/deprecated.h +enc/trans/japanese.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/japanese.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/japanese.$(OBJEXT): internal/attr/error.h +enc/trans/japanese.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/japanese.$(OBJEXT): internal/attr/forceinline.h +enc/trans/japanese.$(OBJEXT): internal/attr/format.h +enc/trans/japanese.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/japanese.$(OBJEXT): internal/attr/noalias.h +enc/trans/japanese.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/japanese.$(OBJEXT): internal/attr/noexcept.h +enc/trans/japanese.$(OBJEXT): internal/attr/noinline.h +enc/trans/japanese.$(OBJEXT): internal/attr/nonnull.h +enc/trans/japanese.$(OBJEXT): internal/attr/noreturn.h +enc/trans/japanese.$(OBJEXT): internal/attr/pure.h +enc/trans/japanese.$(OBJEXT): internal/attr/restrict.h +enc/trans/japanese.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/japanese.$(OBJEXT): internal/attr/warning.h +enc/trans/japanese.$(OBJEXT): internal/attr/weakref.h +enc/trans/japanese.$(OBJEXT): internal/cast.h +enc/trans/japanese.$(OBJEXT): internal/compiler_is.h +enc/trans/japanese.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/japanese.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/japanese.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/japanese.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/japanese.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/japanese.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/japanese.$(OBJEXT): internal/compiler_since.h +enc/trans/japanese.$(OBJEXT): internal/config.h +enc/trans/japanese.$(OBJEXT): internal/constant_p.h +enc/trans/japanese.$(OBJEXT): internal/core.h +enc/trans/japanese.$(OBJEXT): internal/core/rarray.h +enc/trans/japanese.$(OBJEXT): internal/core/rbasic.h +enc/trans/japanese.$(OBJEXT): internal/core/rbignum.h +enc/trans/japanese.$(OBJEXT): internal/core/rclass.h +enc/trans/japanese.$(OBJEXT): internal/core/rdata.h +enc/trans/japanese.$(OBJEXT): internal/core/rfile.h +enc/trans/japanese.$(OBJEXT): internal/core/rhash.h +enc/trans/japanese.$(OBJEXT): internal/core/robject.h +enc/trans/japanese.$(OBJEXT): internal/core/rregexp.h +enc/trans/japanese.$(OBJEXT): internal/core/rstring.h +enc/trans/japanese.$(OBJEXT): internal/core/rstruct.h +enc/trans/japanese.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/japanese.$(OBJEXT): internal/ctype.h +enc/trans/japanese.$(OBJEXT): internal/dllexport.h +enc/trans/japanese.$(OBJEXT): internal/dosish.h +enc/trans/japanese.$(OBJEXT): internal/error.h +enc/trans/japanese.$(OBJEXT): internal/eval.h +enc/trans/japanese.$(OBJEXT): internal/event.h +enc/trans/japanese.$(OBJEXT): internal/fl_type.h +enc/trans/japanese.$(OBJEXT): internal/gc.h +enc/trans/japanese.$(OBJEXT): internal/glob.h +enc/trans/japanese.$(OBJEXT): internal/globals.h +enc/trans/japanese.$(OBJEXT): internal/has/attribute.h +enc/trans/japanese.$(OBJEXT): internal/has/builtin.h +enc/trans/japanese.$(OBJEXT): internal/has/c_attribute.h +enc/trans/japanese.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/japanese.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/japanese.$(OBJEXT): internal/has/extension.h +enc/trans/japanese.$(OBJEXT): internal/has/feature.h +enc/trans/japanese.$(OBJEXT): internal/has/warning.h +enc/trans/japanese.$(OBJEXT): internal/intern/array.h +enc/trans/japanese.$(OBJEXT): internal/intern/bignum.h +enc/trans/japanese.$(OBJEXT): internal/intern/class.h +enc/trans/japanese.$(OBJEXT): internal/intern/compar.h +enc/trans/japanese.$(OBJEXT): internal/intern/complex.h +enc/trans/japanese.$(OBJEXT): internal/intern/cont.h +enc/trans/japanese.$(OBJEXT): internal/intern/dir.h +enc/trans/japanese.$(OBJEXT): internal/intern/enum.h +enc/trans/japanese.$(OBJEXT): internal/intern/enumerator.h +enc/trans/japanese.$(OBJEXT): internal/intern/error.h +enc/trans/japanese.$(OBJEXT): internal/intern/eval.h +enc/trans/japanese.$(OBJEXT): internal/intern/file.h +enc/trans/japanese.$(OBJEXT): internal/intern/gc.h +enc/trans/japanese.$(OBJEXT): internal/intern/hash.h +enc/trans/japanese.$(OBJEXT): internal/intern/io.h +enc/trans/japanese.$(OBJEXT): internal/intern/load.h +enc/trans/japanese.$(OBJEXT): internal/intern/marshal.h +enc/trans/japanese.$(OBJEXT): internal/intern/numeric.h +enc/trans/japanese.$(OBJEXT): internal/intern/object.h +enc/trans/japanese.$(OBJEXT): internal/intern/parse.h +enc/trans/japanese.$(OBJEXT): internal/intern/proc.h +enc/trans/japanese.$(OBJEXT): internal/intern/process.h +enc/trans/japanese.$(OBJEXT): internal/intern/random.h +enc/trans/japanese.$(OBJEXT): internal/intern/range.h +enc/trans/japanese.$(OBJEXT): internal/intern/rational.h +enc/trans/japanese.$(OBJEXT): internal/intern/re.h +enc/trans/japanese.$(OBJEXT): internal/intern/ruby.h +enc/trans/japanese.$(OBJEXT): internal/intern/select.h +enc/trans/japanese.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/japanese.$(OBJEXT): internal/intern/signal.h +enc/trans/japanese.$(OBJEXT): internal/intern/sprintf.h +enc/trans/japanese.$(OBJEXT): internal/intern/string.h +enc/trans/japanese.$(OBJEXT): internal/intern/struct.h +enc/trans/japanese.$(OBJEXT): internal/intern/thread.h +enc/trans/japanese.$(OBJEXT): internal/intern/time.h +enc/trans/japanese.$(OBJEXT): internal/intern/variable.h +enc/trans/japanese.$(OBJEXT): internal/intern/vm.h +enc/trans/japanese.$(OBJEXT): internal/interpreter.h +enc/trans/japanese.$(OBJEXT): internal/iterator.h +enc/trans/japanese.$(OBJEXT): internal/memory.h +enc/trans/japanese.$(OBJEXT): internal/method.h +enc/trans/japanese.$(OBJEXT): internal/module.h +enc/trans/japanese.$(OBJEXT): internal/newobj.h +enc/trans/japanese.$(OBJEXT): internal/rgengc.h +enc/trans/japanese.$(OBJEXT): internal/scan_args.h +enc/trans/japanese.$(OBJEXT): internal/special_consts.h +enc/trans/japanese.$(OBJEXT): internal/static_assert.h +enc/trans/japanese.$(OBJEXT): internal/stdalign.h +enc/trans/japanese.$(OBJEXT): internal/stdbool.h +enc/trans/japanese.$(OBJEXT): internal/symbol.h +enc/trans/japanese.$(OBJEXT): internal/value.h +enc/trans/japanese.$(OBJEXT): internal/value_type.h +enc/trans/japanese.$(OBJEXT): internal/variable.h +enc/trans/japanese.$(OBJEXT): internal/warning_push.h +enc/trans/japanese.$(OBJEXT): internal/xmalloc.h enc/trans/japanese.$(OBJEXT): missing.h enc/trans/japanese.$(OBJEXT): st.h enc/trans/japanese.$(OBJEXT): subst.h @@ -540,10 +4406,157 @@ enc/trans/japanese_euc.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/japanese_euc.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/japanese_euc.$(OBJEXT): assert.h enc/trans/japanese_euc.$(OBJEXT): backward.h +enc/trans/japanese_euc.$(OBJEXT): backward/2/assume.h +enc/trans/japanese_euc.$(OBJEXT): backward/2/attributes.h +enc/trans/japanese_euc.$(OBJEXT): backward/2/bool.h +enc/trans/japanese_euc.$(OBJEXT): backward/2/inttypes.h +enc/trans/japanese_euc.$(OBJEXT): backward/2/limits.h +enc/trans/japanese_euc.$(OBJEXT): backward/2/long_long.h +enc/trans/japanese_euc.$(OBJEXT): backward/2/stdalign.h +enc/trans/japanese_euc.$(OBJEXT): backward/2/stdarg.h enc/trans/japanese_euc.$(OBJEXT): config.h enc/trans/japanese_euc.$(OBJEXT): defines.h enc/trans/japanese_euc.$(OBJEXT): enc/trans/japanese_euc.c enc/trans/japanese_euc.$(OBJEXT): intern.h +enc/trans/japanese_euc.$(OBJEXT): internal/anyargs.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/char.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/double.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/int.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/long.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/short.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/japanese_euc.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/japanese_euc.$(OBJEXT): internal/assume.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/artificial.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/cold.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/const.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/constexpr.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/deprecated.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/error.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/forceinline.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/format.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/noalias.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/noexcept.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/noinline.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/nonnull.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/noreturn.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/pure.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/restrict.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/warning.h +enc/trans/japanese_euc.$(OBJEXT): internal/attr/weakref.h +enc/trans/japanese_euc.$(OBJEXT): internal/cast.h +enc/trans/japanese_euc.$(OBJEXT): internal/compiler_is.h +enc/trans/japanese_euc.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/japanese_euc.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/japanese_euc.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/japanese_euc.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/japanese_euc.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/japanese_euc.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/japanese_euc.$(OBJEXT): internal/compiler_since.h +enc/trans/japanese_euc.$(OBJEXT): internal/config.h +enc/trans/japanese_euc.$(OBJEXT): internal/constant_p.h +enc/trans/japanese_euc.$(OBJEXT): internal/core.h +enc/trans/japanese_euc.$(OBJEXT): internal/core/rarray.h +enc/trans/japanese_euc.$(OBJEXT): internal/core/rbasic.h +enc/trans/japanese_euc.$(OBJEXT): internal/core/rbignum.h +enc/trans/japanese_euc.$(OBJEXT): internal/core/rclass.h +enc/trans/japanese_euc.$(OBJEXT): internal/core/rdata.h +enc/trans/japanese_euc.$(OBJEXT): internal/core/rfile.h +enc/trans/japanese_euc.$(OBJEXT): internal/core/rhash.h +enc/trans/japanese_euc.$(OBJEXT): internal/core/robject.h +enc/trans/japanese_euc.$(OBJEXT): internal/core/rregexp.h +enc/trans/japanese_euc.$(OBJEXT): internal/core/rstring.h +enc/trans/japanese_euc.$(OBJEXT): internal/core/rstruct.h +enc/trans/japanese_euc.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/japanese_euc.$(OBJEXT): internal/ctype.h +enc/trans/japanese_euc.$(OBJEXT): internal/dllexport.h +enc/trans/japanese_euc.$(OBJEXT): internal/dosish.h +enc/trans/japanese_euc.$(OBJEXT): internal/error.h +enc/trans/japanese_euc.$(OBJEXT): internal/eval.h +enc/trans/japanese_euc.$(OBJEXT): internal/event.h +enc/trans/japanese_euc.$(OBJEXT): internal/fl_type.h +enc/trans/japanese_euc.$(OBJEXT): internal/gc.h +enc/trans/japanese_euc.$(OBJEXT): internal/glob.h +enc/trans/japanese_euc.$(OBJEXT): internal/globals.h +enc/trans/japanese_euc.$(OBJEXT): internal/has/attribute.h +enc/trans/japanese_euc.$(OBJEXT): internal/has/builtin.h +enc/trans/japanese_euc.$(OBJEXT): internal/has/c_attribute.h +enc/trans/japanese_euc.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/japanese_euc.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/japanese_euc.$(OBJEXT): internal/has/extension.h +enc/trans/japanese_euc.$(OBJEXT): internal/has/feature.h +enc/trans/japanese_euc.$(OBJEXT): internal/has/warning.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/array.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/bignum.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/class.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/compar.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/complex.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/cont.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/dir.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/enum.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/enumerator.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/error.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/eval.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/file.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/gc.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/hash.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/io.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/load.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/marshal.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/numeric.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/object.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/parse.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/proc.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/process.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/random.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/range.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/rational.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/re.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/ruby.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/select.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/signal.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/sprintf.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/string.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/struct.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/thread.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/time.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/variable.h +enc/trans/japanese_euc.$(OBJEXT): internal/intern/vm.h +enc/trans/japanese_euc.$(OBJEXT): internal/interpreter.h +enc/trans/japanese_euc.$(OBJEXT): internal/iterator.h +enc/trans/japanese_euc.$(OBJEXT): internal/memory.h +enc/trans/japanese_euc.$(OBJEXT): internal/method.h +enc/trans/japanese_euc.$(OBJEXT): internal/module.h +enc/trans/japanese_euc.$(OBJEXT): internal/newobj.h +enc/trans/japanese_euc.$(OBJEXT): internal/rgengc.h +enc/trans/japanese_euc.$(OBJEXT): internal/scan_args.h +enc/trans/japanese_euc.$(OBJEXT): internal/special_consts.h +enc/trans/japanese_euc.$(OBJEXT): internal/static_assert.h +enc/trans/japanese_euc.$(OBJEXT): internal/stdalign.h +enc/trans/japanese_euc.$(OBJEXT): internal/stdbool.h +enc/trans/japanese_euc.$(OBJEXT): internal/symbol.h +enc/trans/japanese_euc.$(OBJEXT): internal/value.h +enc/trans/japanese_euc.$(OBJEXT): internal/value_type.h +enc/trans/japanese_euc.$(OBJEXT): internal/variable.h +enc/trans/japanese_euc.$(OBJEXT): internal/warning_push.h +enc/trans/japanese_euc.$(OBJEXT): internal/xmalloc.h enc/trans/japanese_euc.$(OBJEXT): missing.h enc/trans/japanese_euc.$(OBJEXT): st.h enc/trans/japanese_euc.$(OBJEXT): subst.h @@ -551,10 +4564,157 @@ enc/trans/japanese_sjis.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/japanese_sjis.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/japanese_sjis.$(OBJEXT): assert.h enc/trans/japanese_sjis.$(OBJEXT): backward.h +enc/trans/japanese_sjis.$(OBJEXT): backward/2/assume.h +enc/trans/japanese_sjis.$(OBJEXT): backward/2/attributes.h +enc/trans/japanese_sjis.$(OBJEXT): backward/2/bool.h +enc/trans/japanese_sjis.$(OBJEXT): backward/2/inttypes.h +enc/trans/japanese_sjis.$(OBJEXT): backward/2/limits.h +enc/trans/japanese_sjis.$(OBJEXT): backward/2/long_long.h +enc/trans/japanese_sjis.$(OBJEXT): backward/2/stdalign.h +enc/trans/japanese_sjis.$(OBJEXT): backward/2/stdarg.h enc/trans/japanese_sjis.$(OBJEXT): config.h enc/trans/japanese_sjis.$(OBJEXT): defines.h enc/trans/japanese_sjis.$(OBJEXT): enc/trans/japanese_sjis.c enc/trans/japanese_sjis.$(OBJEXT): intern.h +enc/trans/japanese_sjis.$(OBJEXT): internal/anyargs.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/char.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/double.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/int.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/long.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/short.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/japanese_sjis.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/japanese_sjis.$(OBJEXT): internal/assume.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/artificial.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/cold.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/const.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/constexpr.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/deprecated.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/error.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/forceinline.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/format.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/noalias.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/noexcept.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/noinline.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/nonnull.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/noreturn.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/pure.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/restrict.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/warning.h +enc/trans/japanese_sjis.$(OBJEXT): internal/attr/weakref.h +enc/trans/japanese_sjis.$(OBJEXT): internal/cast.h +enc/trans/japanese_sjis.$(OBJEXT): internal/compiler_is.h +enc/trans/japanese_sjis.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/japanese_sjis.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/japanese_sjis.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/japanese_sjis.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/japanese_sjis.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/japanese_sjis.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/japanese_sjis.$(OBJEXT): internal/compiler_since.h +enc/trans/japanese_sjis.$(OBJEXT): internal/config.h +enc/trans/japanese_sjis.$(OBJEXT): internal/constant_p.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core/rarray.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core/rbasic.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core/rbignum.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core/rclass.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core/rdata.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core/rfile.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core/rhash.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core/robject.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core/rregexp.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core/rstring.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core/rstruct.h +enc/trans/japanese_sjis.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/japanese_sjis.$(OBJEXT): internal/ctype.h +enc/trans/japanese_sjis.$(OBJEXT): internal/dllexport.h +enc/trans/japanese_sjis.$(OBJEXT): internal/dosish.h +enc/trans/japanese_sjis.$(OBJEXT): internal/error.h +enc/trans/japanese_sjis.$(OBJEXT): internal/eval.h +enc/trans/japanese_sjis.$(OBJEXT): internal/event.h +enc/trans/japanese_sjis.$(OBJEXT): internal/fl_type.h +enc/trans/japanese_sjis.$(OBJEXT): internal/gc.h +enc/trans/japanese_sjis.$(OBJEXT): internal/glob.h +enc/trans/japanese_sjis.$(OBJEXT): internal/globals.h +enc/trans/japanese_sjis.$(OBJEXT): internal/has/attribute.h +enc/trans/japanese_sjis.$(OBJEXT): internal/has/builtin.h +enc/trans/japanese_sjis.$(OBJEXT): internal/has/c_attribute.h +enc/trans/japanese_sjis.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/japanese_sjis.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/japanese_sjis.$(OBJEXT): internal/has/extension.h +enc/trans/japanese_sjis.$(OBJEXT): internal/has/feature.h +enc/trans/japanese_sjis.$(OBJEXT): internal/has/warning.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/array.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/bignum.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/class.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/compar.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/complex.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/cont.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/dir.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/enum.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/enumerator.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/error.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/eval.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/file.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/gc.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/hash.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/io.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/load.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/marshal.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/numeric.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/object.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/parse.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/proc.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/process.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/random.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/range.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/rational.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/re.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/ruby.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/select.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/signal.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/sprintf.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/string.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/struct.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/thread.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/time.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/variable.h +enc/trans/japanese_sjis.$(OBJEXT): internal/intern/vm.h +enc/trans/japanese_sjis.$(OBJEXT): internal/interpreter.h +enc/trans/japanese_sjis.$(OBJEXT): internal/iterator.h +enc/trans/japanese_sjis.$(OBJEXT): internal/memory.h +enc/trans/japanese_sjis.$(OBJEXT): internal/method.h +enc/trans/japanese_sjis.$(OBJEXT): internal/module.h +enc/trans/japanese_sjis.$(OBJEXT): internal/newobj.h +enc/trans/japanese_sjis.$(OBJEXT): internal/rgengc.h +enc/trans/japanese_sjis.$(OBJEXT): internal/scan_args.h +enc/trans/japanese_sjis.$(OBJEXT): internal/special_consts.h +enc/trans/japanese_sjis.$(OBJEXT): internal/static_assert.h +enc/trans/japanese_sjis.$(OBJEXT): internal/stdalign.h +enc/trans/japanese_sjis.$(OBJEXT): internal/stdbool.h +enc/trans/japanese_sjis.$(OBJEXT): internal/symbol.h +enc/trans/japanese_sjis.$(OBJEXT): internal/value.h +enc/trans/japanese_sjis.$(OBJEXT): internal/value_type.h +enc/trans/japanese_sjis.$(OBJEXT): internal/variable.h +enc/trans/japanese_sjis.$(OBJEXT): internal/warning_push.h +enc/trans/japanese_sjis.$(OBJEXT): internal/xmalloc.h enc/trans/japanese_sjis.$(OBJEXT): missing.h enc/trans/japanese_sjis.$(OBJEXT): st.h enc/trans/japanese_sjis.$(OBJEXT): subst.h @@ -562,20 +4722,314 @@ enc/trans/korean.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/korean.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/korean.$(OBJEXT): assert.h enc/trans/korean.$(OBJEXT): backward.h +enc/trans/korean.$(OBJEXT): backward/2/assume.h +enc/trans/korean.$(OBJEXT): backward/2/attributes.h +enc/trans/korean.$(OBJEXT): backward/2/bool.h +enc/trans/korean.$(OBJEXT): backward/2/inttypes.h +enc/trans/korean.$(OBJEXT): backward/2/limits.h +enc/trans/korean.$(OBJEXT): backward/2/long_long.h +enc/trans/korean.$(OBJEXT): backward/2/stdalign.h +enc/trans/korean.$(OBJEXT): backward/2/stdarg.h enc/trans/korean.$(OBJEXT): config.h enc/trans/korean.$(OBJEXT): defines.h enc/trans/korean.$(OBJEXT): enc/trans/korean.c enc/trans/korean.$(OBJEXT): intern.h +enc/trans/korean.$(OBJEXT): internal/anyargs.h +enc/trans/korean.$(OBJEXT): internal/arithmetic.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/char.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/double.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/int.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/long.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/short.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/korean.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/korean.$(OBJEXT): internal/assume.h +enc/trans/korean.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/korean.$(OBJEXT): internal/attr/artificial.h +enc/trans/korean.$(OBJEXT): internal/attr/cold.h +enc/trans/korean.$(OBJEXT): internal/attr/const.h +enc/trans/korean.$(OBJEXT): internal/attr/constexpr.h +enc/trans/korean.$(OBJEXT): internal/attr/deprecated.h +enc/trans/korean.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/korean.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/korean.$(OBJEXT): internal/attr/error.h +enc/trans/korean.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/korean.$(OBJEXT): internal/attr/forceinline.h +enc/trans/korean.$(OBJEXT): internal/attr/format.h +enc/trans/korean.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/korean.$(OBJEXT): internal/attr/noalias.h +enc/trans/korean.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/korean.$(OBJEXT): internal/attr/noexcept.h +enc/trans/korean.$(OBJEXT): internal/attr/noinline.h +enc/trans/korean.$(OBJEXT): internal/attr/nonnull.h +enc/trans/korean.$(OBJEXT): internal/attr/noreturn.h +enc/trans/korean.$(OBJEXT): internal/attr/pure.h +enc/trans/korean.$(OBJEXT): internal/attr/restrict.h +enc/trans/korean.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/korean.$(OBJEXT): internal/attr/warning.h +enc/trans/korean.$(OBJEXT): internal/attr/weakref.h +enc/trans/korean.$(OBJEXT): internal/cast.h +enc/trans/korean.$(OBJEXT): internal/compiler_is.h +enc/trans/korean.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/korean.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/korean.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/korean.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/korean.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/korean.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/korean.$(OBJEXT): internal/compiler_since.h +enc/trans/korean.$(OBJEXT): internal/config.h +enc/trans/korean.$(OBJEXT): internal/constant_p.h +enc/trans/korean.$(OBJEXT): internal/core.h +enc/trans/korean.$(OBJEXT): internal/core/rarray.h +enc/trans/korean.$(OBJEXT): internal/core/rbasic.h +enc/trans/korean.$(OBJEXT): internal/core/rbignum.h +enc/trans/korean.$(OBJEXT): internal/core/rclass.h +enc/trans/korean.$(OBJEXT): internal/core/rdata.h +enc/trans/korean.$(OBJEXT): internal/core/rfile.h +enc/trans/korean.$(OBJEXT): internal/core/rhash.h +enc/trans/korean.$(OBJEXT): internal/core/robject.h +enc/trans/korean.$(OBJEXT): internal/core/rregexp.h +enc/trans/korean.$(OBJEXT): internal/core/rstring.h +enc/trans/korean.$(OBJEXT): internal/core/rstruct.h +enc/trans/korean.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/korean.$(OBJEXT): internal/ctype.h +enc/trans/korean.$(OBJEXT): internal/dllexport.h +enc/trans/korean.$(OBJEXT): internal/dosish.h +enc/trans/korean.$(OBJEXT): internal/error.h +enc/trans/korean.$(OBJEXT): internal/eval.h +enc/trans/korean.$(OBJEXT): internal/event.h +enc/trans/korean.$(OBJEXT): internal/fl_type.h +enc/trans/korean.$(OBJEXT): internal/gc.h +enc/trans/korean.$(OBJEXT): internal/glob.h +enc/trans/korean.$(OBJEXT): internal/globals.h +enc/trans/korean.$(OBJEXT): internal/has/attribute.h +enc/trans/korean.$(OBJEXT): internal/has/builtin.h +enc/trans/korean.$(OBJEXT): internal/has/c_attribute.h +enc/trans/korean.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/korean.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/korean.$(OBJEXT): internal/has/extension.h +enc/trans/korean.$(OBJEXT): internal/has/feature.h +enc/trans/korean.$(OBJEXT): internal/has/warning.h +enc/trans/korean.$(OBJEXT): internal/intern/array.h +enc/trans/korean.$(OBJEXT): internal/intern/bignum.h +enc/trans/korean.$(OBJEXT): internal/intern/class.h +enc/trans/korean.$(OBJEXT): internal/intern/compar.h +enc/trans/korean.$(OBJEXT): internal/intern/complex.h +enc/trans/korean.$(OBJEXT): internal/intern/cont.h +enc/trans/korean.$(OBJEXT): internal/intern/dir.h +enc/trans/korean.$(OBJEXT): internal/intern/enum.h +enc/trans/korean.$(OBJEXT): internal/intern/enumerator.h +enc/trans/korean.$(OBJEXT): internal/intern/error.h +enc/trans/korean.$(OBJEXT): internal/intern/eval.h +enc/trans/korean.$(OBJEXT): internal/intern/file.h +enc/trans/korean.$(OBJEXT): internal/intern/gc.h +enc/trans/korean.$(OBJEXT): internal/intern/hash.h +enc/trans/korean.$(OBJEXT): internal/intern/io.h +enc/trans/korean.$(OBJEXT): internal/intern/load.h +enc/trans/korean.$(OBJEXT): internal/intern/marshal.h +enc/trans/korean.$(OBJEXT): internal/intern/numeric.h +enc/trans/korean.$(OBJEXT): internal/intern/object.h +enc/trans/korean.$(OBJEXT): internal/intern/parse.h +enc/trans/korean.$(OBJEXT): internal/intern/proc.h +enc/trans/korean.$(OBJEXT): internal/intern/process.h +enc/trans/korean.$(OBJEXT): internal/intern/random.h +enc/trans/korean.$(OBJEXT): internal/intern/range.h +enc/trans/korean.$(OBJEXT): internal/intern/rational.h +enc/trans/korean.$(OBJEXT): internal/intern/re.h +enc/trans/korean.$(OBJEXT): internal/intern/ruby.h +enc/trans/korean.$(OBJEXT): internal/intern/select.h +enc/trans/korean.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/korean.$(OBJEXT): internal/intern/signal.h +enc/trans/korean.$(OBJEXT): internal/intern/sprintf.h +enc/trans/korean.$(OBJEXT): internal/intern/string.h +enc/trans/korean.$(OBJEXT): internal/intern/struct.h +enc/trans/korean.$(OBJEXT): internal/intern/thread.h +enc/trans/korean.$(OBJEXT): internal/intern/time.h +enc/trans/korean.$(OBJEXT): internal/intern/variable.h +enc/trans/korean.$(OBJEXT): internal/intern/vm.h +enc/trans/korean.$(OBJEXT): internal/interpreter.h +enc/trans/korean.$(OBJEXT): internal/iterator.h +enc/trans/korean.$(OBJEXT): internal/memory.h +enc/trans/korean.$(OBJEXT): internal/method.h +enc/trans/korean.$(OBJEXT): internal/module.h +enc/trans/korean.$(OBJEXT): internal/newobj.h +enc/trans/korean.$(OBJEXT): internal/rgengc.h +enc/trans/korean.$(OBJEXT): internal/scan_args.h +enc/trans/korean.$(OBJEXT): internal/special_consts.h +enc/trans/korean.$(OBJEXT): internal/static_assert.h +enc/trans/korean.$(OBJEXT): internal/stdalign.h +enc/trans/korean.$(OBJEXT): internal/stdbool.h +enc/trans/korean.$(OBJEXT): internal/symbol.h +enc/trans/korean.$(OBJEXT): internal/value.h +enc/trans/korean.$(OBJEXT): internal/value_type.h +enc/trans/korean.$(OBJEXT): internal/variable.h +enc/trans/korean.$(OBJEXT): internal/warning_push.h +enc/trans/korean.$(OBJEXT): internal/xmalloc.h enc/trans/korean.$(OBJEXT): missing.h enc/trans/korean.$(OBJEXT): st.h enc/trans/korean.$(OBJEXT): subst.h enc/trans/newline.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/newline.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/newline.$(OBJEXT): assert.h +enc/trans/newline.$(OBJEXT): backward/2/assume.h +enc/trans/newline.$(OBJEXT): backward/2/attributes.h +enc/trans/newline.$(OBJEXT): backward/2/bool.h +enc/trans/newline.$(OBJEXT): backward/2/inttypes.h +enc/trans/newline.$(OBJEXT): backward/2/limits.h +enc/trans/newline.$(OBJEXT): backward/2/long_long.h +enc/trans/newline.$(OBJEXT): backward/2/stdalign.h +enc/trans/newline.$(OBJEXT): backward/2/stdarg.h enc/trans/newline.$(OBJEXT): config.h enc/trans/newline.$(OBJEXT): defines.h enc/trans/newline.$(OBJEXT): enc/trans/newline.c enc/trans/newline.$(OBJEXT): intern.h +enc/trans/newline.$(OBJEXT): internal/anyargs.h +enc/trans/newline.$(OBJEXT): internal/arithmetic.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/char.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/double.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/int.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/long.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/short.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/newline.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/newline.$(OBJEXT): internal/assume.h +enc/trans/newline.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/newline.$(OBJEXT): internal/attr/artificial.h +enc/trans/newline.$(OBJEXT): internal/attr/cold.h +enc/trans/newline.$(OBJEXT): internal/attr/const.h +enc/trans/newline.$(OBJEXT): internal/attr/constexpr.h +enc/trans/newline.$(OBJEXT): internal/attr/deprecated.h +enc/trans/newline.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/newline.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/newline.$(OBJEXT): internal/attr/error.h +enc/trans/newline.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/newline.$(OBJEXT): internal/attr/forceinline.h +enc/trans/newline.$(OBJEXT): internal/attr/format.h +enc/trans/newline.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/newline.$(OBJEXT): internal/attr/noalias.h +enc/trans/newline.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/newline.$(OBJEXT): internal/attr/noexcept.h +enc/trans/newline.$(OBJEXT): internal/attr/noinline.h +enc/trans/newline.$(OBJEXT): internal/attr/nonnull.h +enc/trans/newline.$(OBJEXT): internal/attr/noreturn.h +enc/trans/newline.$(OBJEXT): internal/attr/pure.h +enc/trans/newline.$(OBJEXT): internal/attr/restrict.h +enc/trans/newline.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/newline.$(OBJEXT): internal/attr/warning.h +enc/trans/newline.$(OBJEXT): internal/attr/weakref.h +enc/trans/newline.$(OBJEXT): internal/cast.h +enc/trans/newline.$(OBJEXT): internal/compiler_is.h +enc/trans/newline.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/newline.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/newline.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/newline.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/newline.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/newline.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/newline.$(OBJEXT): internal/compiler_since.h +enc/trans/newline.$(OBJEXT): internal/config.h +enc/trans/newline.$(OBJEXT): internal/constant_p.h +enc/trans/newline.$(OBJEXT): internal/core.h +enc/trans/newline.$(OBJEXT): internal/core/rarray.h +enc/trans/newline.$(OBJEXT): internal/core/rbasic.h +enc/trans/newline.$(OBJEXT): internal/core/rbignum.h +enc/trans/newline.$(OBJEXT): internal/core/rclass.h +enc/trans/newline.$(OBJEXT): internal/core/rdata.h +enc/trans/newline.$(OBJEXT): internal/core/rfile.h +enc/trans/newline.$(OBJEXT): internal/core/rhash.h +enc/trans/newline.$(OBJEXT): internal/core/robject.h +enc/trans/newline.$(OBJEXT): internal/core/rregexp.h +enc/trans/newline.$(OBJEXT): internal/core/rstring.h +enc/trans/newline.$(OBJEXT): internal/core/rstruct.h +enc/trans/newline.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/newline.$(OBJEXT): internal/ctype.h +enc/trans/newline.$(OBJEXT): internal/dllexport.h +enc/trans/newline.$(OBJEXT): internal/dosish.h +enc/trans/newline.$(OBJEXT): internal/error.h +enc/trans/newline.$(OBJEXT): internal/eval.h +enc/trans/newline.$(OBJEXT): internal/event.h +enc/trans/newline.$(OBJEXT): internal/fl_type.h +enc/trans/newline.$(OBJEXT): internal/gc.h +enc/trans/newline.$(OBJEXT): internal/glob.h +enc/trans/newline.$(OBJEXT): internal/globals.h +enc/trans/newline.$(OBJEXT): internal/has/attribute.h +enc/trans/newline.$(OBJEXT): internal/has/builtin.h +enc/trans/newline.$(OBJEXT): internal/has/c_attribute.h +enc/trans/newline.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/newline.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/newline.$(OBJEXT): internal/has/extension.h +enc/trans/newline.$(OBJEXT): internal/has/feature.h +enc/trans/newline.$(OBJEXT): internal/has/warning.h +enc/trans/newline.$(OBJEXT): internal/intern/array.h +enc/trans/newline.$(OBJEXT): internal/intern/bignum.h +enc/trans/newline.$(OBJEXT): internal/intern/class.h +enc/trans/newline.$(OBJEXT): internal/intern/compar.h +enc/trans/newline.$(OBJEXT): internal/intern/complex.h +enc/trans/newline.$(OBJEXT): internal/intern/cont.h +enc/trans/newline.$(OBJEXT): internal/intern/dir.h +enc/trans/newline.$(OBJEXT): internal/intern/enum.h +enc/trans/newline.$(OBJEXT): internal/intern/enumerator.h +enc/trans/newline.$(OBJEXT): internal/intern/error.h +enc/trans/newline.$(OBJEXT): internal/intern/eval.h +enc/trans/newline.$(OBJEXT): internal/intern/file.h +enc/trans/newline.$(OBJEXT): internal/intern/gc.h +enc/trans/newline.$(OBJEXT): internal/intern/hash.h +enc/trans/newline.$(OBJEXT): internal/intern/io.h +enc/trans/newline.$(OBJEXT): internal/intern/load.h +enc/trans/newline.$(OBJEXT): internal/intern/marshal.h +enc/trans/newline.$(OBJEXT): internal/intern/numeric.h +enc/trans/newline.$(OBJEXT): internal/intern/object.h +enc/trans/newline.$(OBJEXT): internal/intern/parse.h +enc/trans/newline.$(OBJEXT): internal/intern/proc.h +enc/trans/newline.$(OBJEXT): internal/intern/process.h +enc/trans/newline.$(OBJEXT): internal/intern/random.h +enc/trans/newline.$(OBJEXT): internal/intern/range.h +enc/trans/newline.$(OBJEXT): internal/intern/rational.h +enc/trans/newline.$(OBJEXT): internal/intern/re.h +enc/trans/newline.$(OBJEXT): internal/intern/ruby.h +enc/trans/newline.$(OBJEXT): internal/intern/select.h +enc/trans/newline.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/newline.$(OBJEXT): internal/intern/signal.h +enc/trans/newline.$(OBJEXT): internal/intern/sprintf.h +enc/trans/newline.$(OBJEXT): internal/intern/string.h +enc/trans/newline.$(OBJEXT): internal/intern/struct.h +enc/trans/newline.$(OBJEXT): internal/intern/thread.h +enc/trans/newline.$(OBJEXT): internal/intern/time.h +enc/trans/newline.$(OBJEXT): internal/intern/variable.h +enc/trans/newline.$(OBJEXT): internal/intern/vm.h +enc/trans/newline.$(OBJEXT): internal/interpreter.h +enc/trans/newline.$(OBJEXT): internal/iterator.h +enc/trans/newline.$(OBJEXT): internal/memory.h +enc/trans/newline.$(OBJEXT): internal/method.h +enc/trans/newline.$(OBJEXT): internal/module.h +enc/trans/newline.$(OBJEXT): internal/newobj.h +enc/trans/newline.$(OBJEXT): internal/rgengc.h +enc/trans/newline.$(OBJEXT): internal/scan_args.h +enc/trans/newline.$(OBJEXT): internal/special_consts.h +enc/trans/newline.$(OBJEXT): internal/static_assert.h +enc/trans/newline.$(OBJEXT): internal/stdalign.h +enc/trans/newline.$(OBJEXT): internal/stdbool.h +enc/trans/newline.$(OBJEXT): internal/symbol.h +enc/trans/newline.$(OBJEXT): internal/value.h +enc/trans/newline.$(OBJEXT): internal/value_type.h +enc/trans/newline.$(OBJEXT): internal/variable.h +enc/trans/newline.$(OBJEXT): internal/warning_push.h +enc/trans/newline.$(OBJEXT): internal/xmalloc.h enc/trans/newline.$(OBJEXT): missing.h enc/trans/newline.$(OBJEXT): st.h enc/trans/newline.$(OBJEXT): subst.h @@ -583,10 +5037,157 @@ enc/trans/single_byte.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/single_byte.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/single_byte.$(OBJEXT): assert.h enc/trans/single_byte.$(OBJEXT): backward.h +enc/trans/single_byte.$(OBJEXT): backward/2/assume.h +enc/trans/single_byte.$(OBJEXT): backward/2/attributes.h +enc/trans/single_byte.$(OBJEXT): backward/2/bool.h +enc/trans/single_byte.$(OBJEXT): backward/2/inttypes.h +enc/trans/single_byte.$(OBJEXT): backward/2/limits.h +enc/trans/single_byte.$(OBJEXT): backward/2/long_long.h +enc/trans/single_byte.$(OBJEXT): backward/2/stdalign.h +enc/trans/single_byte.$(OBJEXT): backward/2/stdarg.h enc/trans/single_byte.$(OBJEXT): config.h enc/trans/single_byte.$(OBJEXT): defines.h enc/trans/single_byte.$(OBJEXT): enc/trans/single_byte.c enc/trans/single_byte.$(OBJEXT): intern.h +enc/trans/single_byte.$(OBJEXT): internal/anyargs.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/char.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/double.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/int.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/long.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/short.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/single_byte.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/single_byte.$(OBJEXT): internal/assume.h +enc/trans/single_byte.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/single_byte.$(OBJEXT): internal/attr/artificial.h +enc/trans/single_byte.$(OBJEXT): internal/attr/cold.h +enc/trans/single_byte.$(OBJEXT): internal/attr/const.h +enc/trans/single_byte.$(OBJEXT): internal/attr/constexpr.h +enc/trans/single_byte.$(OBJEXT): internal/attr/deprecated.h +enc/trans/single_byte.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/single_byte.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/single_byte.$(OBJEXT): internal/attr/error.h +enc/trans/single_byte.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/single_byte.$(OBJEXT): internal/attr/forceinline.h +enc/trans/single_byte.$(OBJEXT): internal/attr/format.h +enc/trans/single_byte.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/single_byte.$(OBJEXT): internal/attr/noalias.h +enc/trans/single_byte.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/single_byte.$(OBJEXT): internal/attr/noexcept.h +enc/trans/single_byte.$(OBJEXT): internal/attr/noinline.h +enc/trans/single_byte.$(OBJEXT): internal/attr/nonnull.h +enc/trans/single_byte.$(OBJEXT): internal/attr/noreturn.h +enc/trans/single_byte.$(OBJEXT): internal/attr/pure.h +enc/trans/single_byte.$(OBJEXT): internal/attr/restrict.h +enc/trans/single_byte.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/single_byte.$(OBJEXT): internal/attr/warning.h +enc/trans/single_byte.$(OBJEXT): internal/attr/weakref.h +enc/trans/single_byte.$(OBJEXT): internal/cast.h +enc/trans/single_byte.$(OBJEXT): internal/compiler_is.h +enc/trans/single_byte.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/single_byte.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/single_byte.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/single_byte.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/single_byte.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/single_byte.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/single_byte.$(OBJEXT): internal/compiler_since.h +enc/trans/single_byte.$(OBJEXT): internal/config.h +enc/trans/single_byte.$(OBJEXT): internal/constant_p.h +enc/trans/single_byte.$(OBJEXT): internal/core.h +enc/trans/single_byte.$(OBJEXT): internal/core/rarray.h +enc/trans/single_byte.$(OBJEXT): internal/core/rbasic.h +enc/trans/single_byte.$(OBJEXT): internal/core/rbignum.h +enc/trans/single_byte.$(OBJEXT): internal/core/rclass.h +enc/trans/single_byte.$(OBJEXT): internal/core/rdata.h +enc/trans/single_byte.$(OBJEXT): internal/core/rfile.h +enc/trans/single_byte.$(OBJEXT): internal/core/rhash.h +enc/trans/single_byte.$(OBJEXT): internal/core/robject.h +enc/trans/single_byte.$(OBJEXT): internal/core/rregexp.h +enc/trans/single_byte.$(OBJEXT): internal/core/rstring.h +enc/trans/single_byte.$(OBJEXT): internal/core/rstruct.h +enc/trans/single_byte.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/single_byte.$(OBJEXT): internal/ctype.h +enc/trans/single_byte.$(OBJEXT): internal/dllexport.h +enc/trans/single_byte.$(OBJEXT): internal/dosish.h +enc/trans/single_byte.$(OBJEXT): internal/error.h +enc/trans/single_byte.$(OBJEXT): internal/eval.h +enc/trans/single_byte.$(OBJEXT): internal/event.h +enc/trans/single_byte.$(OBJEXT): internal/fl_type.h +enc/trans/single_byte.$(OBJEXT): internal/gc.h +enc/trans/single_byte.$(OBJEXT): internal/glob.h +enc/trans/single_byte.$(OBJEXT): internal/globals.h +enc/trans/single_byte.$(OBJEXT): internal/has/attribute.h +enc/trans/single_byte.$(OBJEXT): internal/has/builtin.h +enc/trans/single_byte.$(OBJEXT): internal/has/c_attribute.h +enc/trans/single_byte.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/single_byte.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/single_byte.$(OBJEXT): internal/has/extension.h +enc/trans/single_byte.$(OBJEXT): internal/has/feature.h +enc/trans/single_byte.$(OBJEXT): internal/has/warning.h +enc/trans/single_byte.$(OBJEXT): internal/intern/array.h +enc/trans/single_byte.$(OBJEXT): internal/intern/bignum.h +enc/trans/single_byte.$(OBJEXT): internal/intern/class.h +enc/trans/single_byte.$(OBJEXT): internal/intern/compar.h +enc/trans/single_byte.$(OBJEXT): internal/intern/complex.h +enc/trans/single_byte.$(OBJEXT): internal/intern/cont.h +enc/trans/single_byte.$(OBJEXT): internal/intern/dir.h +enc/trans/single_byte.$(OBJEXT): internal/intern/enum.h +enc/trans/single_byte.$(OBJEXT): internal/intern/enumerator.h +enc/trans/single_byte.$(OBJEXT): internal/intern/error.h +enc/trans/single_byte.$(OBJEXT): internal/intern/eval.h +enc/trans/single_byte.$(OBJEXT): internal/intern/file.h +enc/trans/single_byte.$(OBJEXT): internal/intern/gc.h +enc/trans/single_byte.$(OBJEXT): internal/intern/hash.h +enc/trans/single_byte.$(OBJEXT): internal/intern/io.h +enc/trans/single_byte.$(OBJEXT): internal/intern/load.h +enc/trans/single_byte.$(OBJEXT): internal/intern/marshal.h +enc/trans/single_byte.$(OBJEXT): internal/intern/numeric.h +enc/trans/single_byte.$(OBJEXT): internal/intern/object.h +enc/trans/single_byte.$(OBJEXT): internal/intern/parse.h +enc/trans/single_byte.$(OBJEXT): internal/intern/proc.h +enc/trans/single_byte.$(OBJEXT): internal/intern/process.h +enc/trans/single_byte.$(OBJEXT): internal/intern/random.h +enc/trans/single_byte.$(OBJEXT): internal/intern/range.h +enc/trans/single_byte.$(OBJEXT): internal/intern/rational.h +enc/trans/single_byte.$(OBJEXT): internal/intern/re.h +enc/trans/single_byte.$(OBJEXT): internal/intern/ruby.h +enc/trans/single_byte.$(OBJEXT): internal/intern/select.h +enc/trans/single_byte.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/single_byte.$(OBJEXT): internal/intern/signal.h +enc/trans/single_byte.$(OBJEXT): internal/intern/sprintf.h +enc/trans/single_byte.$(OBJEXT): internal/intern/string.h +enc/trans/single_byte.$(OBJEXT): internal/intern/struct.h +enc/trans/single_byte.$(OBJEXT): internal/intern/thread.h +enc/trans/single_byte.$(OBJEXT): internal/intern/time.h +enc/trans/single_byte.$(OBJEXT): internal/intern/variable.h +enc/trans/single_byte.$(OBJEXT): internal/intern/vm.h +enc/trans/single_byte.$(OBJEXT): internal/interpreter.h +enc/trans/single_byte.$(OBJEXT): internal/iterator.h +enc/trans/single_byte.$(OBJEXT): internal/memory.h +enc/trans/single_byte.$(OBJEXT): internal/method.h +enc/trans/single_byte.$(OBJEXT): internal/module.h +enc/trans/single_byte.$(OBJEXT): internal/newobj.h +enc/trans/single_byte.$(OBJEXT): internal/rgengc.h +enc/trans/single_byte.$(OBJEXT): internal/scan_args.h +enc/trans/single_byte.$(OBJEXT): internal/special_consts.h +enc/trans/single_byte.$(OBJEXT): internal/static_assert.h +enc/trans/single_byte.$(OBJEXT): internal/stdalign.h +enc/trans/single_byte.$(OBJEXT): internal/stdbool.h +enc/trans/single_byte.$(OBJEXT): internal/symbol.h +enc/trans/single_byte.$(OBJEXT): internal/value.h +enc/trans/single_byte.$(OBJEXT): internal/value_type.h +enc/trans/single_byte.$(OBJEXT): internal/variable.h +enc/trans/single_byte.$(OBJEXT): internal/warning_push.h +enc/trans/single_byte.$(OBJEXT): internal/xmalloc.h enc/trans/single_byte.$(OBJEXT): missing.h enc/trans/single_byte.$(OBJEXT): st.h enc/trans/single_byte.$(OBJEXT): subst.h @@ -596,10 +5197,157 @@ enc/trans/utf8_mac.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/utf8_mac.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/utf8_mac.$(OBJEXT): assert.h enc/trans/utf8_mac.$(OBJEXT): backward.h +enc/trans/utf8_mac.$(OBJEXT): backward/2/assume.h +enc/trans/utf8_mac.$(OBJEXT): backward/2/attributes.h +enc/trans/utf8_mac.$(OBJEXT): backward/2/bool.h +enc/trans/utf8_mac.$(OBJEXT): backward/2/inttypes.h +enc/trans/utf8_mac.$(OBJEXT): backward/2/limits.h +enc/trans/utf8_mac.$(OBJEXT): backward/2/long_long.h +enc/trans/utf8_mac.$(OBJEXT): backward/2/stdalign.h +enc/trans/utf8_mac.$(OBJEXT): backward/2/stdarg.h enc/trans/utf8_mac.$(OBJEXT): config.h enc/trans/utf8_mac.$(OBJEXT): defines.h enc/trans/utf8_mac.$(OBJEXT): enc/trans/utf8_mac.c enc/trans/utf8_mac.$(OBJEXT): intern.h +enc/trans/utf8_mac.$(OBJEXT): internal/anyargs.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/char.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/double.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/int.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/long.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/short.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/utf8_mac.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/utf8_mac.$(OBJEXT): internal/assume.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/artificial.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/cold.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/const.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/constexpr.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/deprecated.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/error.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/forceinline.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/format.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/noalias.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/noexcept.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/noinline.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/nonnull.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/noreturn.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/pure.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/restrict.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/warning.h +enc/trans/utf8_mac.$(OBJEXT): internal/attr/weakref.h +enc/trans/utf8_mac.$(OBJEXT): internal/cast.h +enc/trans/utf8_mac.$(OBJEXT): internal/compiler_is.h +enc/trans/utf8_mac.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/utf8_mac.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/utf8_mac.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/utf8_mac.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/utf8_mac.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/utf8_mac.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/utf8_mac.$(OBJEXT): internal/compiler_since.h +enc/trans/utf8_mac.$(OBJEXT): internal/config.h +enc/trans/utf8_mac.$(OBJEXT): internal/constant_p.h +enc/trans/utf8_mac.$(OBJEXT): internal/core.h +enc/trans/utf8_mac.$(OBJEXT): internal/core/rarray.h +enc/trans/utf8_mac.$(OBJEXT): internal/core/rbasic.h +enc/trans/utf8_mac.$(OBJEXT): internal/core/rbignum.h +enc/trans/utf8_mac.$(OBJEXT): internal/core/rclass.h +enc/trans/utf8_mac.$(OBJEXT): internal/core/rdata.h +enc/trans/utf8_mac.$(OBJEXT): internal/core/rfile.h +enc/trans/utf8_mac.$(OBJEXT): internal/core/rhash.h +enc/trans/utf8_mac.$(OBJEXT): internal/core/robject.h +enc/trans/utf8_mac.$(OBJEXT): internal/core/rregexp.h +enc/trans/utf8_mac.$(OBJEXT): internal/core/rstring.h +enc/trans/utf8_mac.$(OBJEXT): internal/core/rstruct.h +enc/trans/utf8_mac.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/utf8_mac.$(OBJEXT): internal/ctype.h +enc/trans/utf8_mac.$(OBJEXT): internal/dllexport.h +enc/trans/utf8_mac.$(OBJEXT): internal/dosish.h +enc/trans/utf8_mac.$(OBJEXT): internal/error.h +enc/trans/utf8_mac.$(OBJEXT): internal/eval.h +enc/trans/utf8_mac.$(OBJEXT): internal/event.h +enc/trans/utf8_mac.$(OBJEXT): internal/fl_type.h +enc/trans/utf8_mac.$(OBJEXT): internal/gc.h +enc/trans/utf8_mac.$(OBJEXT): internal/glob.h +enc/trans/utf8_mac.$(OBJEXT): internal/globals.h +enc/trans/utf8_mac.$(OBJEXT): internal/has/attribute.h +enc/trans/utf8_mac.$(OBJEXT): internal/has/builtin.h +enc/trans/utf8_mac.$(OBJEXT): internal/has/c_attribute.h +enc/trans/utf8_mac.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/utf8_mac.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/utf8_mac.$(OBJEXT): internal/has/extension.h +enc/trans/utf8_mac.$(OBJEXT): internal/has/feature.h +enc/trans/utf8_mac.$(OBJEXT): internal/has/warning.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/array.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/bignum.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/class.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/compar.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/complex.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/cont.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/dir.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/enum.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/enumerator.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/error.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/eval.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/file.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/gc.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/hash.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/io.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/load.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/marshal.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/numeric.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/object.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/parse.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/proc.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/process.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/random.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/range.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/rational.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/re.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/ruby.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/select.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/signal.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/sprintf.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/string.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/struct.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/thread.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/time.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/variable.h +enc/trans/utf8_mac.$(OBJEXT): internal/intern/vm.h +enc/trans/utf8_mac.$(OBJEXT): internal/interpreter.h +enc/trans/utf8_mac.$(OBJEXT): internal/iterator.h +enc/trans/utf8_mac.$(OBJEXT): internal/memory.h +enc/trans/utf8_mac.$(OBJEXT): internal/method.h +enc/trans/utf8_mac.$(OBJEXT): internal/module.h +enc/trans/utf8_mac.$(OBJEXT): internal/newobj.h +enc/trans/utf8_mac.$(OBJEXT): internal/rgengc.h +enc/trans/utf8_mac.$(OBJEXT): internal/scan_args.h +enc/trans/utf8_mac.$(OBJEXT): internal/special_consts.h +enc/trans/utf8_mac.$(OBJEXT): internal/static_assert.h +enc/trans/utf8_mac.$(OBJEXT): internal/stdalign.h +enc/trans/utf8_mac.$(OBJEXT): internal/stdbool.h +enc/trans/utf8_mac.$(OBJEXT): internal/symbol.h +enc/trans/utf8_mac.$(OBJEXT): internal/value.h +enc/trans/utf8_mac.$(OBJEXT): internal/value_type.h +enc/trans/utf8_mac.$(OBJEXT): internal/variable.h +enc/trans/utf8_mac.$(OBJEXT): internal/warning_push.h +enc/trans/utf8_mac.$(OBJEXT): internal/xmalloc.h enc/trans/utf8_mac.$(OBJEXT): missing.h enc/trans/utf8_mac.$(OBJEXT): st.h enc/trans/utf8_mac.$(OBJEXT): subst.h @@ -607,10 +5355,157 @@ enc/trans/utf_16_32.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/trans/utf_16_32.$(OBJEXT): $(top_srcdir)/transcode_data.h enc/trans/utf_16_32.$(OBJEXT): assert.h enc/trans/utf_16_32.$(OBJEXT): backward.h +enc/trans/utf_16_32.$(OBJEXT): backward/2/assume.h +enc/trans/utf_16_32.$(OBJEXT): backward/2/attributes.h +enc/trans/utf_16_32.$(OBJEXT): backward/2/bool.h +enc/trans/utf_16_32.$(OBJEXT): backward/2/inttypes.h +enc/trans/utf_16_32.$(OBJEXT): backward/2/limits.h +enc/trans/utf_16_32.$(OBJEXT): backward/2/long_long.h +enc/trans/utf_16_32.$(OBJEXT): backward/2/stdalign.h +enc/trans/utf_16_32.$(OBJEXT): backward/2/stdarg.h enc/trans/utf_16_32.$(OBJEXT): config.h enc/trans/utf_16_32.$(OBJEXT): defines.h enc/trans/utf_16_32.$(OBJEXT): enc/trans/utf_16_32.c enc/trans/utf_16_32.$(OBJEXT): intern.h +enc/trans/utf_16_32.$(OBJEXT): internal/anyargs.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/char.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/double.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/fixnum.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/gid_t.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/int.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/long.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/long_long.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/mode_t.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/off_t.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/pid_t.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/short.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/size_t.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/trans/utf_16_32.$(OBJEXT): internal/arithmetic/uid_t.h +enc/trans/utf_16_32.$(OBJEXT): internal/assume.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/alloc_size.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/artificial.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/cold.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/const.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/constexpr.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/deprecated.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/diagnose_if.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/enum_extensibility.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/error.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/flag_enum.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/forceinline.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/format.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/maybe_unused.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/noalias.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/nodiscard.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/noexcept.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/noinline.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/nonnull.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/noreturn.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/pure.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/restrict.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/returns_nonnull.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/warning.h +enc/trans/utf_16_32.$(OBJEXT): internal/attr/weakref.h +enc/trans/utf_16_32.$(OBJEXT): internal/cast.h +enc/trans/utf_16_32.$(OBJEXT): internal/compiler_is.h +enc/trans/utf_16_32.$(OBJEXT): internal/compiler_is/apple.h +enc/trans/utf_16_32.$(OBJEXT): internal/compiler_is/clang.h +enc/trans/utf_16_32.$(OBJEXT): internal/compiler_is/gcc.h +enc/trans/utf_16_32.$(OBJEXT): internal/compiler_is/intel.h +enc/trans/utf_16_32.$(OBJEXT): internal/compiler_is/msvc.h +enc/trans/utf_16_32.$(OBJEXT): internal/compiler_is/sunpro.h +enc/trans/utf_16_32.$(OBJEXT): internal/compiler_since.h +enc/trans/utf_16_32.$(OBJEXT): internal/config.h +enc/trans/utf_16_32.$(OBJEXT): internal/constant_p.h +enc/trans/utf_16_32.$(OBJEXT): internal/core.h +enc/trans/utf_16_32.$(OBJEXT): internal/core/rarray.h +enc/trans/utf_16_32.$(OBJEXT): internal/core/rbasic.h +enc/trans/utf_16_32.$(OBJEXT): internal/core/rbignum.h +enc/trans/utf_16_32.$(OBJEXT): internal/core/rclass.h +enc/trans/utf_16_32.$(OBJEXT): internal/core/rdata.h +enc/trans/utf_16_32.$(OBJEXT): internal/core/rfile.h +enc/trans/utf_16_32.$(OBJEXT): internal/core/rhash.h +enc/trans/utf_16_32.$(OBJEXT): internal/core/robject.h +enc/trans/utf_16_32.$(OBJEXT): internal/core/rregexp.h +enc/trans/utf_16_32.$(OBJEXT): internal/core/rstring.h +enc/trans/utf_16_32.$(OBJEXT): internal/core/rstruct.h +enc/trans/utf_16_32.$(OBJEXT): internal/core/rtypeddata.h +enc/trans/utf_16_32.$(OBJEXT): internal/ctype.h +enc/trans/utf_16_32.$(OBJEXT): internal/dllexport.h +enc/trans/utf_16_32.$(OBJEXT): internal/dosish.h +enc/trans/utf_16_32.$(OBJEXT): internal/error.h +enc/trans/utf_16_32.$(OBJEXT): internal/eval.h +enc/trans/utf_16_32.$(OBJEXT): internal/event.h +enc/trans/utf_16_32.$(OBJEXT): internal/fl_type.h +enc/trans/utf_16_32.$(OBJEXT): internal/gc.h +enc/trans/utf_16_32.$(OBJEXT): internal/glob.h +enc/trans/utf_16_32.$(OBJEXT): internal/globals.h +enc/trans/utf_16_32.$(OBJEXT): internal/has/attribute.h +enc/trans/utf_16_32.$(OBJEXT): internal/has/builtin.h +enc/trans/utf_16_32.$(OBJEXT): internal/has/c_attribute.h +enc/trans/utf_16_32.$(OBJEXT): internal/has/cpp_attribute.h +enc/trans/utf_16_32.$(OBJEXT): internal/has/declspec_attribute.h +enc/trans/utf_16_32.$(OBJEXT): internal/has/extension.h +enc/trans/utf_16_32.$(OBJEXT): internal/has/feature.h +enc/trans/utf_16_32.$(OBJEXT): internal/has/warning.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/array.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/bignum.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/class.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/compar.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/complex.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/cont.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/dir.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/enum.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/enumerator.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/error.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/eval.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/file.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/gc.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/hash.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/io.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/load.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/marshal.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/numeric.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/object.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/parse.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/proc.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/process.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/random.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/range.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/rational.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/re.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/ruby.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/select.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/select/largesize.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/signal.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/sprintf.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/string.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/struct.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/thread.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/time.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/variable.h +enc/trans/utf_16_32.$(OBJEXT): internal/intern/vm.h +enc/trans/utf_16_32.$(OBJEXT): internal/interpreter.h +enc/trans/utf_16_32.$(OBJEXT): internal/iterator.h +enc/trans/utf_16_32.$(OBJEXT): internal/memory.h +enc/trans/utf_16_32.$(OBJEXT): internal/method.h +enc/trans/utf_16_32.$(OBJEXT): internal/module.h +enc/trans/utf_16_32.$(OBJEXT): internal/newobj.h +enc/trans/utf_16_32.$(OBJEXT): internal/rgengc.h +enc/trans/utf_16_32.$(OBJEXT): internal/scan_args.h +enc/trans/utf_16_32.$(OBJEXT): internal/special_consts.h +enc/trans/utf_16_32.$(OBJEXT): internal/static_assert.h +enc/trans/utf_16_32.$(OBJEXT): internal/stdalign.h +enc/trans/utf_16_32.$(OBJEXT): internal/stdbool.h +enc/trans/utf_16_32.$(OBJEXT): internal/symbol.h +enc/trans/utf_16_32.$(OBJEXT): internal/value.h +enc/trans/utf_16_32.$(OBJEXT): internal/value_type.h +enc/trans/utf_16_32.$(OBJEXT): internal/variable.h +enc/trans/utf_16_32.$(OBJEXT): internal/warning_push.h +enc/trans/utf_16_32.$(OBJEXT): internal/xmalloc.h enc/trans/utf_16_32.$(OBJEXT): missing.h enc/trans/utf_16_32.$(OBJEXT): st.h enc/trans/utf_16_32.$(OBJEXT): subst.h @@ -620,103 +5515,1115 @@ enc/unicode.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/unicode.$(OBJEXT): $(top_srcdir)/regenc.h enc/unicode.$(OBJEXT): $(top_srcdir)/regint.h enc/unicode.$(OBJEXT): assert.h +enc/unicode.$(OBJEXT): backward/2/assume.h +enc/unicode.$(OBJEXT): backward/2/attributes.h +enc/unicode.$(OBJEXT): backward/2/bool.h +enc/unicode.$(OBJEXT): backward/2/inttypes.h +enc/unicode.$(OBJEXT): backward/2/limits.h +enc/unicode.$(OBJEXT): backward/2/long_long.h +enc/unicode.$(OBJEXT): backward/2/stdalign.h +enc/unicode.$(OBJEXT): backward/2/stdarg.h enc/unicode.$(OBJEXT): config.h enc/unicode.$(OBJEXT): defines.h enc/unicode.$(OBJEXT): enc/unicode.c enc/unicode.$(OBJEXT): intern.h +enc/unicode.$(OBJEXT): internal/anyargs.h +enc/unicode.$(OBJEXT): internal/arithmetic.h +enc/unicode.$(OBJEXT): internal/arithmetic/char.h +enc/unicode.$(OBJEXT): internal/arithmetic/double.h +enc/unicode.$(OBJEXT): internal/arithmetic/fixnum.h +enc/unicode.$(OBJEXT): internal/arithmetic/gid_t.h +enc/unicode.$(OBJEXT): internal/arithmetic/int.h +enc/unicode.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/unicode.$(OBJEXT): internal/arithmetic/long.h +enc/unicode.$(OBJEXT): internal/arithmetic/long_long.h +enc/unicode.$(OBJEXT): internal/arithmetic/mode_t.h +enc/unicode.$(OBJEXT): internal/arithmetic/off_t.h +enc/unicode.$(OBJEXT): internal/arithmetic/pid_t.h +enc/unicode.$(OBJEXT): internal/arithmetic/short.h +enc/unicode.$(OBJEXT): internal/arithmetic/size_t.h +enc/unicode.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/unicode.$(OBJEXT): internal/arithmetic/uid_t.h +enc/unicode.$(OBJEXT): internal/assume.h +enc/unicode.$(OBJEXT): internal/attr/alloc_size.h +enc/unicode.$(OBJEXT): internal/attr/artificial.h +enc/unicode.$(OBJEXT): internal/attr/cold.h +enc/unicode.$(OBJEXT): internal/attr/const.h +enc/unicode.$(OBJEXT): internal/attr/constexpr.h +enc/unicode.$(OBJEXT): internal/attr/deprecated.h +enc/unicode.$(OBJEXT): internal/attr/diagnose_if.h +enc/unicode.$(OBJEXT): internal/attr/enum_extensibility.h +enc/unicode.$(OBJEXT): internal/attr/error.h +enc/unicode.$(OBJEXT): internal/attr/flag_enum.h +enc/unicode.$(OBJEXT): internal/attr/forceinline.h +enc/unicode.$(OBJEXT): internal/attr/format.h +enc/unicode.$(OBJEXT): internal/attr/maybe_unused.h +enc/unicode.$(OBJEXT): internal/attr/noalias.h +enc/unicode.$(OBJEXT): internal/attr/nodiscard.h +enc/unicode.$(OBJEXT): internal/attr/noexcept.h +enc/unicode.$(OBJEXT): internal/attr/noinline.h +enc/unicode.$(OBJEXT): internal/attr/nonnull.h +enc/unicode.$(OBJEXT): internal/attr/noreturn.h +enc/unicode.$(OBJEXT): internal/attr/pure.h +enc/unicode.$(OBJEXT): internal/attr/restrict.h +enc/unicode.$(OBJEXT): internal/attr/returns_nonnull.h +enc/unicode.$(OBJEXT): internal/attr/warning.h +enc/unicode.$(OBJEXT): internal/attr/weakref.h +enc/unicode.$(OBJEXT): internal/cast.h +enc/unicode.$(OBJEXT): internal/compiler_is.h +enc/unicode.$(OBJEXT): internal/compiler_is/apple.h +enc/unicode.$(OBJEXT): internal/compiler_is/clang.h +enc/unicode.$(OBJEXT): internal/compiler_is/gcc.h +enc/unicode.$(OBJEXT): internal/compiler_is/intel.h +enc/unicode.$(OBJEXT): internal/compiler_is/msvc.h +enc/unicode.$(OBJEXT): internal/compiler_is/sunpro.h +enc/unicode.$(OBJEXT): internal/compiler_since.h +enc/unicode.$(OBJEXT): internal/config.h +enc/unicode.$(OBJEXT): internal/constant_p.h +enc/unicode.$(OBJEXT): internal/core.h +enc/unicode.$(OBJEXT): internal/core/rarray.h +enc/unicode.$(OBJEXT): internal/core/rbasic.h +enc/unicode.$(OBJEXT): internal/core/rbignum.h +enc/unicode.$(OBJEXT): internal/core/rclass.h +enc/unicode.$(OBJEXT): internal/core/rdata.h +enc/unicode.$(OBJEXT): internal/core/rfile.h +enc/unicode.$(OBJEXT): internal/core/rhash.h +enc/unicode.$(OBJEXT): internal/core/robject.h +enc/unicode.$(OBJEXT): internal/core/rregexp.h +enc/unicode.$(OBJEXT): internal/core/rstring.h +enc/unicode.$(OBJEXT): internal/core/rstruct.h +enc/unicode.$(OBJEXT): internal/core/rtypeddata.h +enc/unicode.$(OBJEXT): internal/ctype.h +enc/unicode.$(OBJEXT): internal/dllexport.h +enc/unicode.$(OBJEXT): internal/dosish.h +enc/unicode.$(OBJEXT): internal/error.h +enc/unicode.$(OBJEXT): internal/eval.h +enc/unicode.$(OBJEXT): internal/event.h +enc/unicode.$(OBJEXT): internal/fl_type.h +enc/unicode.$(OBJEXT): internal/gc.h +enc/unicode.$(OBJEXT): internal/glob.h +enc/unicode.$(OBJEXT): internal/globals.h +enc/unicode.$(OBJEXT): internal/has/attribute.h +enc/unicode.$(OBJEXT): internal/has/builtin.h +enc/unicode.$(OBJEXT): internal/has/c_attribute.h +enc/unicode.$(OBJEXT): internal/has/cpp_attribute.h +enc/unicode.$(OBJEXT): internal/has/declspec_attribute.h +enc/unicode.$(OBJEXT): internal/has/extension.h +enc/unicode.$(OBJEXT): internal/has/feature.h +enc/unicode.$(OBJEXT): internal/has/warning.h +enc/unicode.$(OBJEXT): internal/intern/array.h +enc/unicode.$(OBJEXT): internal/intern/bignum.h +enc/unicode.$(OBJEXT): internal/intern/class.h +enc/unicode.$(OBJEXT): internal/intern/compar.h +enc/unicode.$(OBJEXT): internal/intern/complex.h +enc/unicode.$(OBJEXT): internal/intern/cont.h +enc/unicode.$(OBJEXT): internal/intern/dir.h +enc/unicode.$(OBJEXT): internal/intern/enum.h +enc/unicode.$(OBJEXT): internal/intern/enumerator.h +enc/unicode.$(OBJEXT): internal/intern/error.h +enc/unicode.$(OBJEXT): internal/intern/eval.h +enc/unicode.$(OBJEXT): internal/intern/file.h +enc/unicode.$(OBJEXT): internal/intern/gc.h +enc/unicode.$(OBJEXT): internal/intern/hash.h +enc/unicode.$(OBJEXT): internal/intern/io.h +enc/unicode.$(OBJEXT): internal/intern/load.h +enc/unicode.$(OBJEXT): internal/intern/marshal.h +enc/unicode.$(OBJEXT): internal/intern/numeric.h +enc/unicode.$(OBJEXT): internal/intern/object.h +enc/unicode.$(OBJEXT): internal/intern/parse.h +enc/unicode.$(OBJEXT): internal/intern/proc.h +enc/unicode.$(OBJEXT): internal/intern/process.h +enc/unicode.$(OBJEXT): internal/intern/random.h +enc/unicode.$(OBJEXT): internal/intern/range.h +enc/unicode.$(OBJEXT): internal/intern/rational.h +enc/unicode.$(OBJEXT): internal/intern/re.h +enc/unicode.$(OBJEXT): internal/intern/ruby.h +enc/unicode.$(OBJEXT): internal/intern/select.h +enc/unicode.$(OBJEXT): internal/intern/select/largesize.h +enc/unicode.$(OBJEXT): internal/intern/signal.h +enc/unicode.$(OBJEXT): internal/intern/sprintf.h +enc/unicode.$(OBJEXT): internal/intern/string.h +enc/unicode.$(OBJEXT): internal/intern/struct.h +enc/unicode.$(OBJEXT): internal/intern/thread.h +enc/unicode.$(OBJEXT): internal/intern/time.h +enc/unicode.$(OBJEXT): internal/intern/variable.h +enc/unicode.$(OBJEXT): internal/intern/vm.h +enc/unicode.$(OBJEXT): internal/interpreter.h +enc/unicode.$(OBJEXT): internal/iterator.h +enc/unicode.$(OBJEXT): internal/memory.h +enc/unicode.$(OBJEXT): internal/method.h +enc/unicode.$(OBJEXT): internal/module.h +enc/unicode.$(OBJEXT): internal/newobj.h +enc/unicode.$(OBJEXT): internal/rgengc.h +enc/unicode.$(OBJEXT): internal/scan_args.h +enc/unicode.$(OBJEXT): internal/special_consts.h +enc/unicode.$(OBJEXT): internal/static_assert.h +enc/unicode.$(OBJEXT): internal/stdalign.h +enc/unicode.$(OBJEXT): internal/stdbool.h +enc/unicode.$(OBJEXT): internal/symbol.h +enc/unicode.$(OBJEXT): internal/value.h +enc/unicode.$(OBJEXT): internal/value_type.h +enc/unicode.$(OBJEXT): internal/variable.h +enc/unicode.$(OBJEXT): internal/warning_push.h +enc/unicode.$(OBJEXT): internal/xmalloc.h enc/unicode.$(OBJEXT): missing.h enc/unicode.$(OBJEXT): onigmo.h enc/unicode.$(OBJEXT): st.h enc/unicode.$(OBJEXT): subst.h +enc/us_ascii.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/us_ascii.$(OBJEXT): $(top_srcdir)/encindex.h enc/us_ascii.$(OBJEXT): $(top_srcdir)/regenc.h +enc/us_ascii.$(OBJEXT): assert.h +enc/us_ascii.$(OBJEXT): backward/2/assume.h +enc/us_ascii.$(OBJEXT): backward/2/attributes.h +enc/us_ascii.$(OBJEXT): backward/2/bool.h +enc/us_ascii.$(OBJEXT): backward/2/inttypes.h +enc/us_ascii.$(OBJEXT): backward/2/limits.h +enc/us_ascii.$(OBJEXT): backward/2/long_long.h +enc/us_ascii.$(OBJEXT): backward/2/stdalign.h +enc/us_ascii.$(OBJEXT): backward/2/stdarg.h enc/us_ascii.$(OBJEXT): config.h enc/us_ascii.$(OBJEXT): defines.h enc/us_ascii.$(OBJEXT): enc/us_ascii.c +enc/us_ascii.$(OBJEXT): encoding.h +enc/us_ascii.$(OBJEXT): intern.h +enc/us_ascii.$(OBJEXT): internal/anyargs.h +enc/us_ascii.$(OBJEXT): internal/arithmetic.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/char.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/double.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/fixnum.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/gid_t.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/int.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/long.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/long_long.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/mode_t.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/off_t.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/pid_t.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/short.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/size_t.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/us_ascii.$(OBJEXT): internal/arithmetic/uid_t.h +enc/us_ascii.$(OBJEXT): internal/assume.h +enc/us_ascii.$(OBJEXT): internal/attr/alloc_size.h +enc/us_ascii.$(OBJEXT): internal/attr/artificial.h +enc/us_ascii.$(OBJEXT): internal/attr/cold.h +enc/us_ascii.$(OBJEXT): internal/attr/const.h +enc/us_ascii.$(OBJEXT): internal/attr/constexpr.h +enc/us_ascii.$(OBJEXT): internal/attr/deprecated.h +enc/us_ascii.$(OBJEXT): internal/attr/diagnose_if.h +enc/us_ascii.$(OBJEXT): internal/attr/enum_extensibility.h +enc/us_ascii.$(OBJEXT): internal/attr/error.h +enc/us_ascii.$(OBJEXT): internal/attr/flag_enum.h +enc/us_ascii.$(OBJEXT): internal/attr/forceinline.h +enc/us_ascii.$(OBJEXT): internal/attr/format.h +enc/us_ascii.$(OBJEXT): internal/attr/maybe_unused.h +enc/us_ascii.$(OBJEXT): internal/attr/noalias.h +enc/us_ascii.$(OBJEXT): internal/attr/nodiscard.h +enc/us_ascii.$(OBJEXT): internal/attr/noexcept.h +enc/us_ascii.$(OBJEXT): internal/attr/noinline.h +enc/us_ascii.$(OBJEXT): internal/attr/nonnull.h +enc/us_ascii.$(OBJEXT): internal/attr/noreturn.h +enc/us_ascii.$(OBJEXT): internal/attr/pure.h +enc/us_ascii.$(OBJEXT): internal/attr/restrict.h +enc/us_ascii.$(OBJEXT): internal/attr/returns_nonnull.h +enc/us_ascii.$(OBJEXT): internal/attr/warning.h +enc/us_ascii.$(OBJEXT): internal/attr/weakref.h +enc/us_ascii.$(OBJEXT): internal/cast.h +enc/us_ascii.$(OBJEXT): internal/compiler_is.h +enc/us_ascii.$(OBJEXT): internal/compiler_is/apple.h +enc/us_ascii.$(OBJEXT): internal/compiler_is/clang.h +enc/us_ascii.$(OBJEXT): internal/compiler_is/gcc.h +enc/us_ascii.$(OBJEXT): internal/compiler_is/intel.h +enc/us_ascii.$(OBJEXT): internal/compiler_is/msvc.h +enc/us_ascii.$(OBJEXT): internal/compiler_is/sunpro.h +enc/us_ascii.$(OBJEXT): internal/compiler_since.h +enc/us_ascii.$(OBJEXT): internal/config.h +enc/us_ascii.$(OBJEXT): internal/constant_p.h +enc/us_ascii.$(OBJEXT): internal/core.h +enc/us_ascii.$(OBJEXT): internal/core/rarray.h +enc/us_ascii.$(OBJEXT): internal/core/rbasic.h +enc/us_ascii.$(OBJEXT): internal/core/rbignum.h +enc/us_ascii.$(OBJEXT): internal/core/rclass.h +enc/us_ascii.$(OBJEXT): internal/core/rdata.h +enc/us_ascii.$(OBJEXT): internal/core/rfile.h +enc/us_ascii.$(OBJEXT): internal/core/rhash.h +enc/us_ascii.$(OBJEXT): internal/core/robject.h +enc/us_ascii.$(OBJEXT): internal/core/rregexp.h +enc/us_ascii.$(OBJEXT): internal/core/rstring.h +enc/us_ascii.$(OBJEXT): internal/core/rstruct.h +enc/us_ascii.$(OBJEXT): internal/core/rtypeddata.h +enc/us_ascii.$(OBJEXT): internal/ctype.h +enc/us_ascii.$(OBJEXT): internal/dllexport.h +enc/us_ascii.$(OBJEXT): internal/dosish.h +enc/us_ascii.$(OBJEXT): internal/encoding/coderange.h +enc/us_ascii.$(OBJEXT): internal/encoding/ctype.h +enc/us_ascii.$(OBJEXT): internal/encoding/encoding.h +enc/us_ascii.$(OBJEXT): internal/encoding/pathname.h +enc/us_ascii.$(OBJEXT): internal/encoding/re.h +enc/us_ascii.$(OBJEXT): internal/encoding/sprintf.h +enc/us_ascii.$(OBJEXT): internal/encoding/string.h +enc/us_ascii.$(OBJEXT): internal/encoding/symbol.h +enc/us_ascii.$(OBJEXT): internal/encoding/transcode.h +enc/us_ascii.$(OBJEXT): internal/error.h +enc/us_ascii.$(OBJEXT): internal/eval.h +enc/us_ascii.$(OBJEXT): internal/event.h +enc/us_ascii.$(OBJEXT): internal/fl_type.h +enc/us_ascii.$(OBJEXT): internal/gc.h +enc/us_ascii.$(OBJEXT): internal/glob.h +enc/us_ascii.$(OBJEXT): internal/globals.h +enc/us_ascii.$(OBJEXT): internal/has/attribute.h +enc/us_ascii.$(OBJEXT): internal/has/builtin.h +enc/us_ascii.$(OBJEXT): internal/has/c_attribute.h +enc/us_ascii.$(OBJEXT): internal/has/cpp_attribute.h +enc/us_ascii.$(OBJEXT): internal/has/declspec_attribute.h +enc/us_ascii.$(OBJEXT): internal/has/extension.h +enc/us_ascii.$(OBJEXT): internal/has/feature.h +enc/us_ascii.$(OBJEXT): internal/has/warning.h +enc/us_ascii.$(OBJEXT): internal/intern/array.h +enc/us_ascii.$(OBJEXT): internal/intern/bignum.h +enc/us_ascii.$(OBJEXT): internal/intern/class.h +enc/us_ascii.$(OBJEXT): internal/intern/compar.h +enc/us_ascii.$(OBJEXT): internal/intern/complex.h +enc/us_ascii.$(OBJEXT): internal/intern/cont.h +enc/us_ascii.$(OBJEXT): internal/intern/dir.h +enc/us_ascii.$(OBJEXT): internal/intern/enum.h +enc/us_ascii.$(OBJEXT): internal/intern/enumerator.h +enc/us_ascii.$(OBJEXT): internal/intern/error.h +enc/us_ascii.$(OBJEXT): internal/intern/eval.h +enc/us_ascii.$(OBJEXT): internal/intern/file.h +enc/us_ascii.$(OBJEXT): internal/intern/gc.h +enc/us_ascii.$(OBJEXT): internal/intern/hash.h +enc/us_ascii.$(OBJEXT): internal/intern/io.h +enc/us_ascii.$(OBJEXT): internal/intern/load.h +enc/us_ascii.$(OBJEXT): internal/intern/marshal.h +enc/us_ascii.$(OBJEXT): internal/intern/numeric.h +enc/us_ascii.$(OBJEXT): internal/intern/object.h +enc/us_ascii.$(OBJEXT): internal/intern/parse.h +enc/us_ascii.$(OBJEXT): internal/intern/proc.h +enc/us_ascii.$(OBJEXT): internal/intern/process.h +enc/us_ascii.$(OBJEXT): internal/intern/random.h +enc/us_ascii.$(OBJEXT): internal/intern/range.h +enc/us_ascii.$(OBJEXT): internal/intern/rational.h +enc/us_ascii.$(OBJEXT): internal/intern/re.h +enc/us_ascii.$(OBJEXT): internal/intern/ruby.h +enc/us_ascii.$(OBJEXT): internal/intern/select.h +enc/us_ascii.$(OBJEXT): internal/intern/select/largesize.h +enc/us_ascii.$(OBJEXT): internal/intern/signal.h +enc/us_ascii.$(OBJEXT): internal/intern/sprintf.h +enc/us_ascii.$(OBJEXT): internal/intern/string.h +enc/us_ascii.$(OBJEXT): internal/intern/struct.h +enc/us_ascii.$(OBJEXT): internal/intern/thread.h +enc/us_ascii.$(OBJEXT): internal/intern/time.h +enc/us_ascii.$(OBJEXT): internal/intern/variable.h +enc/us_ascii.$(OBJEXT): internal/intern/vm.h +enc/us_ascii.$(OBJEXT): internal/interpreter.h +enc/us_ascii.$(OBJEXT): internal/iterator.h +enc/us_ascii.$(OBJEXT): internal/memory.h +enc/us_ascii.$(OBJEXT): internal/method.h +enc/us_ascii.$(OBJEXT): internal/module.h +enc/us_ascii.$(OBJEXT): internal/newobj.h +enc/us_ascii.$(OBJEXT): internal/rgengc.h +enc/us_ascii.$(OBJEXT): internal/scan_args.h +enc/us_ascii.$(OBJEXT): internal/special_consts.h +enc/us_ascii.$(OBJEXT): internal/static_assert.h +enc/us_ascii.$(OBJEXT): internal/stdalign.h +enc/us_ascii.$(OBJEXT): internal/stdbool.h +enc/us_ascii.$(OBJEXT): internal/symbol.h +enc/us_ascii.$(OBJEXT): internal/value.h +enc/us_ascii.$(OBJEXT): internal/value_type.h +enc/us_ascii.$(OBJEXT): internal/variable.h +enc/us_ascii.$(OBJEXT): internal/warning_push.h +enc/us_ascii.$(OBJEXT): internal/xmalloc.h enc/us_ascii.$(OBJEXT): missing.h enc/us_ascii.$(OBJEXT): onigmo.h +enc/us_ascii.$(OBJEXT): oniguruma.h +enc/us_ascii.$(OBJEXT): st.h +enc/us_ascii.$(OBJEXT): subst.h enc/utf_16be.$(OBJEXT): $(top_srcdir)/regenc.h +enc/utf_16be.$(OBJEXT): assert.h +enc/utf_16be.$(OBJEXT): backward/2/assume.h +enc/utf_16be.$(OBJEXT): backward/2/attributes.h +enc/utf_16be.$(OBJEXT): backward/2/bool.h +enc/utf_16be.$(OBJEXT): backward/2/long_long.h +enc/utf_16be.$(OBJEXT): backward/2/stdalign.h +enc/utf_16be.$(OBJEXT): backward/2/stdarg.h enc/utf_16be.$(OBJEXT): config.h enc/utf_16be.$(OBJEXT): defines.h enc/utf_16be.$(OBJEXT): enc/iso_8859.h enc/utf_16be.$(OBJEXT): enc/utf_16be.c +enc/utf_16be.$(OBJEXT): internal/assume.h +enc/utf_16be.$(OBJEXT): internal/attr/alloc_size.h +enc/utf_16be.$(OBJEXT): internal/attr/cold.h +enc/utf_16be.$(OBJEXT): internal/attr/const.h +enc/utf_16be.$(OBJEXT): internal/attr/deprecated.h +enc/utf_16be.$(OBJEXT): internal/attr/error.h +enc/utf_16be.$(OBJEXT): internal/attr/forceinline.h +enc/utf_16be.$(OBJEXT): internal/attr/format.h +enc/utf_16be.$(OBJEXT): internal/attr/maybe_unused.h +enc/utf_16be.$(OBJEXT): internal/attr/nodiscard.h +enc/utf_16be.$(OBJEXT): internal/attr/noexcept.h +enc/utf_16be.$(OBJEXT): internal/attr/noinline.h +enc/utf_16be.$(OBJEXT): internal/attr/nonnull.h +enc/utf_16be.$(OBJEXT): internal/attr/noreturn.h +enc/utf_16be.$(OBJEXT): internal/attr/pure.h +enc/utf_16be.$(OBJEXT): internal/attr/restrict.h +enc/utf_16be.$(OBJEXT): internal/attr/returns_nonnull.h +enc/utf_16be.$(OBJEXT): internal/attr/warning.h +enc/utf_16be.$(OBJEXT): internal/cast.h +enc/utf_16be.$(OBJEXT): internal/compiler_is.h +enc/utf_16be.$(OBJEXT): internal/compiler_is/apple.h +enc/utf_16be.$(OBJEXT): internal/compiler_is/clang.h +enc/utf_16be.$(OBJEXT): internal/compiler_is/gcc.h +enc/utf_16be.$(OBJEXT): internal/compiler_is/intel.h +enc/utf_16be.$(OBJEXT): internal/compiler_is/msvc.h +enc/utf_16be.$(OBJEXT): internal/compiler_is/sunpro.h +enc/utf_16be.$(OBJEXT): internal/compiler_since.h +enc/utf_16be.$(OBJEXT): internal/config.h +enc/utf_16be.$(OBJEXT): internal/dllexport.h +enc/utf_16be.$(OBJEXT): internal/dosish.h +enc/utf_16be.$(OBJEXT): internal/has/attribute.h +enc/utf_16be.$(OBJEXT): internal/has/builtin.h +enc/utf_16be.$(OBJEXT): internal/has/c_attribute.h +enc/utf_16be.$(OBJEXT): internal/has/cpp_attribute.h +enc/utf_16be.$(OBJEXT): internal/has/declspec_attribute.h +enc/utf_16be.$(OBJEXT): internal/has/extension.h +enc/utf_16be.$(OBJEXT): internal/has/feature.h +enc/utf_16be.$(OBJEXT): internal/has/warning.h +enc/utf_16be.$(OBJEXT): internal/stdalign.h +enc/utf_16be.$(OBJEXT): internal/stdbool.h +enc/utf_16be.$(OBJEXT): internal/warning_push.h +enc/utf_16be.$(OBJEXT): internal/xmalloc.h enc/utf_16be.$(OBJEXT): missing.h enc/utf_16be.$(OBJEXT): onigmo.h enc/utf_16le.$(OBJEXT): $(top_srcdir)/regenc.h +enc/utf_16le.$(OBJEXT): assert.h +enc/utf_16le.$(OBJEXT): backward/2/assume.h +enc/utf_16le.$(OBJEXT): backward/2/attributes.h +enc/utf_16le.$(OBJEXT): backward/2/bool.h +enc/utf_16le.$(OBJEXT): backward/2/long_long.h +enc/utf_16le.$(OBJEXT): backward/2/stdalign.h +enc/utf_16le.$(OBJEXT): backward/2/stdarg.h enc/utf_16le.$(OBJEXT): config.h enc/utf_16le.$(OBJEXT): defines.h enc/utf_16le.$(OBJEXT): enc/iso_8859.h enc/utf_16le.$(OBJEXT): enc/utf_16le.c +enc/utf_16le.$(OBJEXT): internal/assume.h +enc/utf_16le.$(OBJEXT): internal/attr/alloc_size.h +enc/utf_16le.$(OBJEXT): internal/attr/cold.h +enc/utf_16le.$(OBJEXT): internal/attr/const.h +enc/utf_16le.$(OBJEXT): internal/attr/deprecated.h +enc/utf_16le.$(OBJEXT): internal/attr/error.h +enc/utf_16le.$(OBJEXT): internal/attr/forceinline.h +enc/utf_16le.$(OBJEXT): internal/attr/format.h +enc/utf_16le.$(OBJEXT): internal/attr/maybe_unused.h +enc/utf_16le.$(OBJEXT): internal/attr/nodiscard.h +enc/utf_16le.$(OBJEXT): internal/attr/noexcept.h +enc/utf_16le.$(OBJEXT): internal/attr/noinline.h +enc/utf_16le.$(OBJEXT): internal/attr/nonnull.h +enc/utf_16le.$(OBJEXT): internal/attr/noreturn.h +enc/utf_16le.$(OBJEXT): internal/attr/pure.h +enc/utf_16le.$(OBJEXT): internal/attr/restrict.h +enc/utf_16le.$(OBJEXT): internal/attr/returns_nonnull.h +enc/utf_16le.$(OBJEXT): internal/attr/warning.h +enc/utf_16le.$(OBJEXT): internal/cast.h +enc/utf_16le.$(OBJEXT): internal/compiler_is.h +enc/utf_16le.$(OBJEXT): internal/compiler_is/apple.h +enc/utf_16le.$(OBJEXT): internal/compiler_is/clang.h +enc/utf_16le.$(OBJEXT): internal/compiler_is/gcc.h +enc/utf_16le.$(OBJEXT): internal/compiler_is/intel.h +enc/utf_16le.$(OBJEXT): internal/compiler_is/msvc.h +enc/utf_16le.$(OBJEXT): internal/compiler_is/sunpro.h +enc/utf_16le.$(OBJEXT): internal/compiler_since.h +enc/utf_16le.$(OBJEXT): internal/config.h +enc/utf_16le.$(OBJEXT): internal/dllexport.h +enc/utf_16le.$(OBJEXT): internal/dosish.h +enc/utf_16le.$(OBJEXT): internal/has/attribute.h +enc/utf_16le.$(OBJEXT): internal/has/builtin.h +enc/utf_16le.$(OBJEXT): internal/has/c_attribute.h +enc/utf_16le.$(OBJEXT): internal/has/cpp_attribute.h +enc/utf_16le.$(OBJEXT): internal/has/declspec_attribute.h +enc/utf_16le.$(OBJEXT): internal/has/extension.h +enc/utf_16le.$(OBJEXT): internal/has/feature.h +enc/utf_16le.$(OBJEXT): internal/has/warning.h +enc/utf_16le.$(OBJEXT): internal/stdalign.h +enc/utf_16le.$(OBJEXT): internal/stdbool.h +enc/utf_16le.$(OBJEXT): internal/warning_push.h +enc/utf_16le.$(OBJEXT): internal/xmalloc.h enc/utf_16le.$(OBJEXT): missing.h enc/utf_16le.$(OBJEXT): onigmo.h enc/utf_32be.$(OBJEXT): $(top_srcdir)/regenc.h +enc/utf_32be.$(OBJEXT): assert.h +enc/utf_32be.$(OBJEXT): backward/2/assume.h +enc/utf_32be.$(OBJEXT): backward/2/attributes.h +enc/utf_32be.$(OBJEXT): backward/2/bool.h +enc/utf_32be.$(OBJEXT): backward/2/long_long.h +enc/utf_32be.$(OBJEXT): backward/2/stdalign.h +enc/utf_32be.$(OBJEXT): backward/2/stdarg.h enc/utf_32be.$(OBJEXT): config.h enc/utf_32be.$(OBJEXT): defines.h enc/utf_32be.$(OBJEXT): enc/iso_8859.h enc/utf_32be.$(OBJEXT): enc/utf_32be.c +enc/utf_32be.$(OBJEXT): internal/assume.h +enc/utf_32be.$(OBJEXT): internal/attr/alloc_size.h +enc/utf_32be.$(OBJEXT): internal/attr/cold.h +enc/utf_32be.$(OBJEXT): internal/attr/const.h +enc/utf_32be.$(OBJEXT): internal/attr/deprecated.h +enc/utf_32be.$(OBJEXT): internal/attr/error.h +enc/utf_32be.$(OBJEXT): internal/attr/forceinline.h +enc/utf_32be.$(OBJEXT): internal/attr/format.h +enc/utf_32be.$(OBJEXT): internal/attr/maybe_unused.h +enc/utf_32be.$(OBJEXT): internal/attr/nodiscard.h +enc/utf_32be.$(OBJEXT): internal/attr/noexcept.h +enc/utf_32be.$(OBJEXT): internal/attr/noinline.h +enc/utf_32be.$(OBJEXT): internal/attr/nonnull.h +enc/utf_32be.$(OBJEXT): internal/attr/noreturn.h +enc/utf_32be.$(OBJEXT): internal/attr/pure.h +enc/utf_32be.$(OBJEXT): internal/attr/restrict.h +enc/utf_32be.$(OBJEXT): internal/attr/returns_nonnull.h +enc/utf_32be.$(OBJEXT): internal/attr/warning.h +enc/utf_32be.$(OBJEXT): internal/cast.h +enc/utf_32be.$(OBJEXT): internal/compiler_is.h +enc/utf_32be.$(OBJEXT): internal/compiler_is/apple.h +enc/utf_32be.$(OBJEXT): internal/compiler_is/clang.h +enc/utf_32be.$(OBJEXT): internal/compiler_is/gcc.h +enc/utf_32be.$(OBJEXT): internal/compiler_is/intel.h +enc/utf_32be.$(OBJEXT): internal/compiler_is/msvc.h +enc/utf_32be.$(OBJEXT): internal/compiler_is/sunpro.h +enc/utf_32be.$(OBJEXT): internal/compiler_since.h +enc/utf_32be.$(OBJEXT): internal/config.h +enc/utf_32be.$(OBJEXT): internal/dllexport.h +enc/utf_32be.$(OBJEXT): internal/dosish.h +enc/utf_32be.$(OBJEXT): internal/has/attribute.h +enc/utf_32be.$(OBJEXT): internal/has/builtin.h +enc/utf_32be.$(OBJEXT): internal/has/c_attribute.h +enc/utf_32be.$(OBJEXT): internal/has/cpp_attribute.h +enc/utf_32be.$(OBJEXT): internal/has/declspec_attribute.h +enc/utf_32be.$(OBJEXT): internal/has/extension.h +enc/utf_32be.$(OBJEXT): internal/has/feature.h +enc/utf_32be.$(OBJEXT): internal/has/warning.h +enc/utf_32be.$(OBJEXT): internal/stdalign.h +enc/utf_32be.$(OBJEXT): internal/stdbool.h +enc/utf_32be.$(OBJEXT): internal/warning_push.h +enc/utf_32be.$(OBJEXT): internal/xmalloc.h enc/utf_32be.$(OBJEXT): missing.h enc/utf_32be.$(OBJEXT): onigmo.h enc/utf_32le.$(OBJEXT): $(top_srcdir)/regenc.h +enc/utf_32le.$(OBJEXT): assert.h +enc/utf_32le.$(OBJEXT): backward/2/assume.h +enc/utf_32le.$(OBJEXT): backward/2/attributes.h +enc/utf_32le.$(OBJEXT): backward/2/bool.h +enc/utf_32le.$(OBJEXT): backward/2/long_long.h +enc/utf_32le.$(OBJEXT): backward/2/stdalign.h +enc/utf_32le.$(OBJEXT): backward/2/stdarg.h enc/utf_32le.$(OBJEXT): config.h enc/utf_32le.$(OBJEXT): defines.h enc/utf_32le.$(OBJEXT): enc/iso_8859.h enc/utf_32le.$(OBJEXT): enc/utf_32le.c +enc/utf_32le.$(OBJEXT): internal/assume.h +enc/utf_32le.$(OBJEXT): internal/attr/alloc_size.h +enc/utf_32le.$(OBJEXT): internal/attr/cold.h +enc/utf_32le.$(OBJEXT): internal/attr/const.h +enc/utf_32le.$(OBJEXT): internal/attr/deprecated.h +enc/utf_32le.$(OBJEXT): internal/attr/error.h +enc/utf_32le.$(OBJEXT): internal/attr/forceinline.h +enc/utf_32le.$(OBJEXT): internal/attr/format.h +enc/utf_32le.$(OBJEXT): internal/attr/maybe_unused.h +enc/utf_32le.$(OBJEXT): internal/attr/nodiscard.h +enc/utf_32le.$(OBJEXT): internal/attr/noexcept.h +enc/utf_32le.$(OBJEXT): internal/attr/noinline.h +enc/utf_32le.$(OBJEXT): internal/attr/nonnull.h +enc/utf_32le.$(OBJEXT): internal/attr/noreturn.h +enc/utf_32le.$(OBJEXT): internal/attr/pure.h +enc/utf_32le.$(OBJEXT): internal/attr/restrict.h +enc/utf_32le.$(OBJEXT): internal/attr/returns_nonnull.h +enc/utf_32le.$(OBJEXT): internal/attr/warning.h +enc/utf_32le.$(OBJEXT): internal/cast.h +enc/utf_32le.$(OBJEXT): internal/compiler_is.h +enc/utf_32le.$(OBJEXT): internal/compiler_is/apple.h +enc/utf_32le.$(OBJEXT): internal/compiler_is/clang.h +enc/utf_32le.$(OBJEXT): internal/compiler_is/gcc.h +enc/utf_32le.$(OBJEXT): internal/compiler_is/intel.h +enc/utf_32le.$(OBJEXT): internal/compiler_is/msvc.h +enc/utf_32le.$(OBJEXT): internal/compiler_is/sunpro.h +enc/utf_32le.$(OBJEXT): internal/compiler_since.h +enc/utf_32le.$(OBJEXT): internal/config.h +enc/utf_32le.$(OBJEXT): internal/dllexport.h +enc/utf_32le.$(OBJEXT): internal/dosish.h +enc/utf_32le.$(OBJEXT): internal/has/attribute.h +enc/utf_32le.$(OBJEXT): internal/has/builtin.h +enc/utf_32le.$(OBJEXT): internal/has/c_attribute.h +enc/utf_32le.$(OBJEXT): internal/has/cpp_attribute.h +enc/utf_32le.$(OBJEXT): internal/has/declspec_attribute.h +enc/utf_32le.$(OBJEXT): internal/has/extension.h +enc/utf_32le.$(OBJEXT): internal/has/feature.h +enc/utf_32le.$(OBJEXT): internal/has/warning.h +enc/utf_32le.$(OBJEXT): internal/stdalign.h +enc/utf_32le.$(OBJEXT): internal/stdbool.h +enc/utf_32le.$(OBJEXT): internal/warning_push.h +enc/utf_32le.$(OBJEXT): internal/xmalloc.h enc/utf_32le.$(OBJEXT): missing.h enc/utf_32le.$(OBJEXT): onigmo.h +enc/utf_8.$(OBJEXT): $(hdrdir)/ruby/ruby.h enc/utf_8.$(OBJEXT): $(top_srcdir)/encindex.h enc/utf_8.$(OBJEXT): $(top_srcdir)/regenc.h +enc/utf_8.$(OBJEXT): assert.h +enc/utf_8.$(OBJEXT): backward/2/assume.h +enc/utf_8.$(OBJEXT): backward/2/attributes.h +enc/utf_8.$(OBJEXT): backward/2/bool.h +enc/utf_8.$(OBJEXT): backward/2/inttypes.h +enc/utf_8.$(OBJEXT): backward/2/limits.h +enc/utf_8.$(OBJEXT): backward/2/long_long.h +enc/utf_8.$(OBJEXT): backward/2/stdalign.h +enc/utf_8.$(OBJEXT): backward/2/stdarg.h enc/utf_8.$(OBJEXT): config.h enc/utf_8.$(OBJEXT): defines.h enc/utf_8.$(OBJEXT): enc/utf_8.c +enc/utf_8.$(OBJEXT): encoding.h +enc/utf_8.$(OBJEXT): intern.h +enc/utf_8.$(OBJEXT): internal/anyargs.h +enc/utf_8.$(OBJEXT): internal/arithmetic.h +enc/utf_8.$(OBJEXT): internal/arithmetic/char.h +enc/utf_8.$(OBJEXT): internal/arithmetic/double.h +enc/utf_8.$(OBJEXT): internal/arithmetic/fixnum.h +enc/utf_8.$(OBJEXT): internal/arithmetic/gid_t.h +enc/utf_8.$(OBJEXT): internal/arithmetic/int.h +enc/utf_8.$(OBJEXT): internal/arithmetic/intptr_t.h +enc/utf_8.$(OBJEXT): internal/arithmetic/long.h +enc/utf_8.$(OBJEXT): internal/arithmetic/long_long.h +enc/utf_8.$(OBJEXT): internal/arithmetic/mode_t.h +enc/utf_8.$(OBJEXT): internal/arithmetic/off_t.h +enc/utf_8.$(OBJEXT): internal/arithmetic/pid_t.h +enc/utf_8.$(OBJEXT): internal/arithmetic/short.h +enc/utf_8.$(OBJEXT): internal/arithmetic/size_t.h +enc/utf_8.$(OBJEXT): internal/arithmetic/st_data_t.h +enc/utf_8.$(OBJEXT): internal/arithmetic/uid_t.h +enc/utf_8.$(OBJEXT): internal/assume.h +enc/utf_8.$(OBJEXT): internal/attr/alloc_size.h +enc/utf_8.$(OBJEXT): internal/attr/artificial.h +enc/utf_8.$(OBJEXT): internal/attr/cold.h +enc/utf_8.$(OBJEXT): internal/attr/const.h +enc/utf_8.$(OBJEXT): internal/attr/constexpr.h +enc/utf_8.$(OBJEXT): internal/attr/deprecated.h +enc/utf_8.$(OBJEXT): internal/attr/diagnose_if.h +enc/utf_8.$(OBJEXT): internal/attr/enum_extensibility.h +enc/utf_8.$(OBJEXT): internal/attr/error.h +enc/utf_8.$(OBJEXT): internal/attr/flag_enum.h +enc/utf_8.$(OBJEXT): internal/attr/forceinline.h +enc/utf_8.$(OBJEXT): internal/attr/format.h +enc/utf_8.$(OBJEXT): internal/attr/maybe_unused.h +enc/utf_8.$(OBJEXT): internal/attr/noalias.h +enc/utf_8.$(OBJEXT): internal/attr/nodiscard.h +enc/utf_8.$(OBJEXT): internal/attr/noexcept.h +enc/utf_8.$(OBJEXT): internal/attr/noinline.h +enc/utf_8.$(OBJEXT): internal/attr/nonnull.h +enc/utf_8.$(OBJEXT): internal/attr/noreturn.h +enc/utf_8.$(OBJEXT): internal/attr/pure.h +enc/utf_8.$(OBJEXT): internal/attr/restrict.h +enc/utf_8.$(OBJEXT): internal/attr/returns_nonnull.h +enc/utf_8.$(OBJEXT): internal/attr/warning.h +enc/utf_8.$(OBJEXT): internal/attr/weakref.h +enc/utf_8.$(OBJEXT): internal/cast.h +enc/utf_8.$(OBJEXT): internal/compiler_is.h +enc/utf_8.$(OBJEXT): internal/compiler_is/apple.h +enc/utf_8.$(OBJEXT): internal/compiler_is/clang.h +enc/utf_8.$(OBJEXT): internal/compiler_is/gcc.h +enc/utf_8.$(OBJEXT): internal/compiler_is/intel.h +enc/utf_8.$(OBJEXT): internal/compiler_is/msvc.h +enc/utf_8.$(OBJEXT): internal/compiler_is/sunpro.h +enc/utf_8.$(OBJEXT): internal/compiler_since.h +enc/utf_8.$(OBJEXT): internal/config.h +enc/utf_8.$(OBJEXT): internal/constant_p.h +enc/utf_8.$(OBJEXT): internal/core.h +enc/utf_8.$(OBJEXT): internal/core/rarray.h +enc/utf_8.$(OBJEXT): internal/core/rbasic.h +enc/utf_8.$(OBJEXT): internal/core/rbignum.h +enc/utf_8.$(OBJEXT): internal/core/rclass.h +enc/utf_8.$(OBJEXT): internal/core/rdata.h +enc/utf_8.$(OBJEXT): internal/core/rfile.h +enc/utf_8.$(OBJEXT): internal/core/rhash.h +enc/utf_8.$(OBJEXT): internal/core/robject.h +enc/utf_8.$(OBJEXT): internal/core/rregexp.h +enc/utf_8.$(OBJEXT): internal/core/rstring.h +enc/utf_8.$(OBJEXT): internal/core/rstruct.h +enc/utf_8.$(OBJEXT): internal/core/rtypeddata.h +enc/utf_8.$(OBJEXT): internal/ctype.h +enc/utf_8.$(OBJEXT): internal/dllexport.h +enc/utf_8.$(OBJEXT): internal/dosish.h +enc/utf_8.$(OBJEXT): internal/encoding/coderange.h +enc/utf_8.$(OBJEXT): internal/encoding/ctype.h +enc/utf_8.$(OBJEXT): internal/encoding/encoding.h +enc/utf_8.$(OBJEXT): internal/encoding/pathname.h +enc/utf_8.$(OBJEXT): internal/encoding/re.h +enc/utf_8.$(OBJEXT): internal/encoding/sprintf.h +enc/utf_8.$(OBJEXT): internal/encoding/string.h +enc/utf_8.$(OBJEXT): internal/encoding/symbol.h +enc/utf_8.$(OBJEXT): internal/encoding/transcode.h +enc/utf_8.$(OBJEXT): internal/error.h +enc/utf_8.$(OBJEXT): internal/eval.h +enc/utf_8.$(OBJEXT): internal/event.h +enc/utf_8.$(OBJEXT): internal/fl_type.h +enc/utf_8.$(OBJEXT): internal/gc.h +enc/utf_8.$(OBJEXT): internal/glob.h +enc/utf_8.$(OBJEXT): internal/globals.h +enc/utf_8.$(OBJEXT): internal/has/attribute.h +enc/utf_8.$(OBJEXT): internal/has/builtin.h +enc/utf_8.$(OBJEXT): internal/has/c_attribute.h +enc/utf_8.$(OBJEXT): internal/has/cpp_attribute.h +enc/utf_8.$(OBJEXT): internal/has/declspec_attribute.h +enc/utf_8.$(OBJEXT): internal/has/extension.h +enc/utf_8.$(OBJEXT): internal/has/feature.h +enc/utf_8.$(OBJEXT): internal/has/warning.h +enc/utf_8.$(OBJEXT): internal/intern/array.h +enc/utf_8.$(OBJEXT): internal/intern/bignum.h +enc/utf_8.$(OBJEXT): internal/intern/class.h +enc/utf_8.$(OBJEXT): internal/intern/compar.h +enc/utf_8.$(OBJEXT): internal/intern/complex.h +enc/utf_8.$(OBJEXT): internal/intern/cont.h +enc/utf_8.$(OBJEXT): internal/intern/dir.h +enc/utf_8.$(OBJEXT): internal/intern/enum.h +enc/utf_8.$(OBJEXT): internal/intern/enumerator.h +enc/utf_8.$(OBJEXT): internal/intern/error.h +enc/utf_8.$(OBJEXT): internal/intern/eval.h +enc/utf_8.$(OBJEXT): internal/intern/file.h +enc/utf_8.$(OBJEXT): internal/intern/gc.h +enc/utf_8.$(OBJEXT): internal/intern/hash.h +enc/utf_8.$(OBJEXT): internal/intern/io.h +enc/utf_8.$(OBJEXT): internal/intern/load.h +enc/utf_8.$(OBJEXT): internal/intern/marshal.h +enc/utf_8.$(OBJEXT): internal/intern/numeric.h +enc/utf_8.$(OBJEXT): internal/intern/object.h +enc/utf_8.$(OBJEXT): internal/intern/parse.h +enc/utf_8.$(OBJEXT): internal/intern/proc.h +enc/utf_8.$(OBJEXT): internal/intern/process.h +enc/utf_8.$(OBJEXT): internal/intern/random.h +enc/utf_8.$(OBJEXT): internal/intern/range.h +enc/utf_8.$(OBJEXT): internal/intern/rational.h +enc/utf_8.$(OBJEXT): internal/intern/re.h +enc/utf_8.$(OBJEXT): internal/intern/ruby.h +enc/utf_8.$(OBJEXT): internal/intern/select.h +enc/utf_8.$(OBJEXT): internal/intern/select/largesize.h +enc/utf_8.$(OBJEXT): internal/intern/signal.h +enc/utf_8.$(OBJEXT): internal/intern/sprintf.h +enc/utf_8.$(OBJEXT): internal/intern/string.h +enc/utf_8.$(OBJEXT): internal/intern/struct.h +enc/utf_8.$(OBJEXT): internal/intern/thread.h +enc/utf_8.$(OBJEXT): internal/intern/time.h +enc/utf_8.$(OBJEXT): internal/intern/variable.h +enc/utf_8.$(OBJEXT): internal/intern/vm.h +enc/utf_8.$(OBJEXT): internal/interpreter.h +enc/utf_8.$(OBJEXT): internal/iterator.h +enc/utf_8.$(OBJEXT): internal/memory.h +enc/utf_8.$(OBJEXT): internal/method.h +enc/utf_8.$(OBJEXT): internal/module.h +enc/utf_8.$(OBJEXT): internal/newobj.h +enc/utf_8.$(OBJEXT): internal/rgengc.h +enc/utf_8.$(OBJEXT): internal/scan_args.h +enc/utf_8.$(OBJEXT): internal/special_consts.h +enc/utf_8.$(OBJEXT): internal/static_assert.h +enc/utf_8.$(OBJEXT): internal/stdalign.h +enc/utf_8.$(OBJEXT): internal/stdbool.h +enc/utf_8.$(OBJEXT): internal/symbol.h +enc/utf_8.$(OBJEXT): internal/value.h +enc/utf_8.$(OBJEXT): internal/value_type.h +enc/utf_8.$(OBJEXT): internal/variable.h +enc/utf_8.$(OBJEXT): internal/warning_push.h +enc/utf_8.$(OBJEXT): internal/xmalloc.h enc/utf_8.$(OBJEXT): missing.h enc/utf_8.$(OBJEXT): onigmo.h +enc/utf_8.$(OBJEXT): oniguruma.h +enc/utf_8.$(OBJEXT): st.h +enc/utf_8.$(OBJEXT): subst.h enc/windows_1250.$(OBJEXT): $(top_srcdir)/regenc.h +enc/windows_1250.$(OBJEXT): assert.h +enc/windows_1250.$(OBJEXT): backward/2/assume.h +enc/windows_1250.$(OBJEXT): backward/2/attributes.h +enc/windows_1250.$(OBJEXT): backward/2/bool.h +enc/windows_1250.$(OBJEXT): backward/2/long_long.h +enc/windows_1250.$(OBJEXT): backward/2/stdalign.h +enc/windows_1250.$(OBJEXT): backward/2/stdarg.h enc/windows_1250.$(OBJEXT): config.h enc/windows_1250.$(OBJEXT): defines.h enc/windows_1250.$(OBJEXT): enc/iso_8859.h enc/windows_1250.$(OBJEXT): enc/windows_1250.c +enc/windows_1250.$(OBJEXT): internal/assume.h +enc/windows_1250.$(OBJEXT): internal/attr/alloc_size.h +enc/windows_1250.$(OBJEXT): internal/attr/cold.h +enc/windows_1250.$(OBJEXT): internal/attr/const.h +enc/windows_1250.$(OBJEXT): internal/attr/deprecated.h +enc/windows_1250.$(OBJEXT): internal/attr/error.h +enc/windows_1250.$(OBJEXT): internal/attr/forceinline.h +enc/windows_1250.$(OBJEXT): internal/attr/format.h +enc/windows_1250.$(OBJEXT): internal/attr/maybe_unused.h +enc/windows_1250.$(OBJEXT): internal/attr/nodiscard.h +enc/windows_1250.$(OBJEXT): internal/attr/noexcept.h +enc/windows_1250.$(OBJEXT): internal/attr/noinline.h +enc/windows_1250.$(OBJEXT): internal/attr/nonnull.h +enc/windows_1250.$(OBJEXT): internal/attr/noreturn.h +enc/windows_1250.$(OBJEXT): internal/attr/pure.h +enc/windows_1250.$(OBJEXT): internal/attr/restrict.h +enc/windows_1250.$(OBJEXT): internal/attr/returns_nonnull.h +enc/windows_1250.$(OBJEXT): internal/attr/warning.h +enc/windows_1250.$(OBJEXT): internal/cast.h +enc/windows_1250.$(OBJEXT): internal/compiler_is.h +enc/windows_1250.$(OBJEXT): internal/compiler_is/apple.h +enc/windows_1250.$(OBJEXT): internal/compiler_is/clang.h +enc/windows_1250.$(OBJEXT): internal/compiler_is/gcc.h +enc/windows_1250.$(OBJEXT): internal/compiler_is/intel.h +enc/windows_1250.$(OBJEXT): internal/compiler_is/msvc.h +enc/windows_1250.$(OBJEXT): internal/compiler_is/sunpro.h +enc/windows_1250.$(OBJEXT): internal/compiler_since.h +enc/windows_1250.$(OBJEXT): internal/config.h +enc/windows_1250.$(OBJEXT): internal/dllexport.h +enc/windows_1250.$(OBJEXT): internal/dosish.h +enc/windows_1250.$(OBJEXT): internal/has/attribute.h +enc/windows_1250.$(OBJEXT): internal/has/builtin.h +enc/windows_1250.$(OBJEXT): internal/has/c_attribute.h +enc/windows_1250.$(OBJEXT): internal/has/cpp_attribute.h +enc/windows_1250.$(OBJEXT): internal/has/declspec_attribute.h +enc/windows_1250.$(OBJEXT): internal/has/extension.h +enc/windows_1250.$(OBJEXT): internal/has/feature.h +enc/windows_1250.$(OBJEXT): internal/has/warning.h +enc/windows_1250.$(OBJEXT): internal/stdalign.h +enc/windows_1250.$(OBJEXT): internal/stdbool.h +enc/windows_1250.$(OBJEXT): internal/warning_push.h +enc/windows_1250.$(OBJEXT): internal/xmalloc.h enc/windows_1250.$(OBJEXT): missing.h enc/windows_1250.$(OBJEXT): onigmo.h enc/windows_1251.$(OBJEXT): $(top_srcdir)/regenc.h +enc/windows_1251.$(OBJEXT): assert.h +enc/windows_1251.$(OBJEXT): backward/2/assume.h +enc/windows_1251.$(OBJEXT): backward/2/attributes.h +enc/windows_1251.$(OBJEXT): backward/2/bool.h +enc/windows_1251.$(OBJEXT): backward/2/long_long.h +enc/windows_1251.$(OBJEXT): backward/2/stdalign.h +enc/windows_1251.$(OBJEXT): backward/2/stdarg.h enc/windows_1251.$(OBJEXT): config.h enc/windows_1251.$(OBJEXT): defines.h enc/windows_1251.$(OBJEXT): enc/windows_1251.c +enc/windows_1251.$(OBJEXT): internal/assume.h +enc/windows_1251.$(OBJEXT): internal/attr/alloc_size.h +enc/windows_1251.$(OBJEXT): internal/attr/cold.h +enc/windows_1251.$(OBJEXT): internal/attr/const.h +enc/windows_1251.$(OBJEXT): internal/attr/deprecated.h +enc/windows_1251.$(OBJEXT): internal/attr/error.h +enc/windows_1251.$(OBJEXT): internal/attr/forceinline.h +enc/windows_1251.$(OBJEXT): internal/attr/format.h +enc/windows_1251.$(OBJEXT): internal/attr/maybe_unused.h +enc/windows_1251.$(OBJEXT): internal/attr/nodiscard.h +enc/windows_1251.$(OBJEXT): internal/attr/noexcept.h +enc/windows_1251.$(OBJEXT): internal/attr/noinline.h +enc/windows_1251.$(OBJEXT): internal/attr/nonnull.h +enc/windows_1251.$(OBJEXT): internal/attr/noreturn.h +enc/windows_1251.$(OBJEXT): internal/attr/pure.h +enc/windows_1251.$(OBJEXT): internal/attr/restrict.h +enc/windows_1251.$(OBJEXT): internal/attr/returns_nonnull.h +enc/windows_1251.$(OBJEXT): internal/attr/warning.h +enc/windows_1251.$(OBJEXT): internal/cast.h +enc/windows_1251.$(OBJEXT): internal/compiler_is.h +enc/windows_1251.$(OBJEXT): internal/compiler_is/apple.h +enc/windows_1251.$(OBJEXT): internal/compiler_is/clang.h +enc/windows_1251.$(OBJEXT): internal/compiler_is/gcc.h +enc/windows_1251.$(OBJEXT): internal/compiler_is/intel.h +enc/windows_1251.$(OBJEXT): internal/compiler_is/msvc.h +enc/windows_1251.$(OBJEXT): internal/compiler_is/sunpro.h +enc/windows_1251.$(OBJEXT): internal/compiler_since.h +enc/windows_1251.$(OBJEXT): internal/config.h +enc/windows_1251.$(OBJEXT): internal/dllexport.h +enc/windows_1251.$(OBJEXT): internal/dosish.h +enc/windows_1251.$(OBJEXT): internal/has/attribute.h +enc/windows_1251.$(OBJEXT): internal/has/builtin.h +enc/windows_1251.$(OBJEXT): internal/has/c_attribute.h +enc/windows_1251.$(OBJEXT): internal/has/cpp_attribute.h +enc/windows_1251.$(OBJEXT): internal/has/declspec_attribute.h +enc/windows_1251.$(OBJEXT): internal/has/extension.h +enc/windows_1251.$(OBJEXT): internal/has/feature.h +enc/windows_1251.$(OBJEXT): internal/has/warning.h +enc/windows_1251.$(OBJEXT): internal/stdalign.h +enc/windows_1251.$(OBJEXT): internal/stdbool.h +enc/windows_1251.$(OBJEXT): internal/warning_push.h +enc/windows_1251.$(OBJEXT): internal/xmalloc.h enc/windows_1251.$(OBJEXT): missing.h enc/windows_1251.$(OBJEXT): onigmo.h enc/windows_1252.$(OBJEXT): $(top_srcdir)/regenc.h +enc/windows_1252.$(OBJEXT): assert.h +enc/windows_1252.$(OBJEXT): backward/2/assume.h +enc/windows_1252.$(OBJEXT): backward/2/attributes.h +enc/windows_1252.$(OBJEXT): backward/2/bool.h +enc/windows_1252.$(OBJEXT): backward/2/long_long.h +enc/windows_1252.$(OBJEXT): backward/2/stdalign.h +enc/windows_1252.$(OBJEXT): backward/2/stdarg.h enc/windows_1252.$(OBJEXT): config.h enc/windows_1252.$(OBJEXT): defines.h enc/windows_1252.$(OBJEXT): enc/iso_8859.h enc/windows_1252.$(OBJEXT): enc/windows_1252.c +enc/windows_1252.$(OBJEXT): internal/assume.h +enc/windows_1252.$(OBJEXT): internal/attr/alloc_size.h +enc/windows_1252.$(OBJEXT): internal/attr/cold.h +enc/windows_1252.$(OBJEXT): internal/attr/const.h +enc/windows_1252.$(OBJEXT): internal/attr/deprecated.h +enc/windows_1252.$(OBJEXT): internal/attr/error.h +enc/windows_1252.$(OBJEXT): internal/attr/forceinline.h +enc/windows_1252.$(OBJEXT): internal/attr/format.h +enc/windows_1252.$(OBJEXT): internal/attr/maybe_unused.h +enc/windows_1252.$(OBJEXT): internal/attr/nodiscard.h +enc/windows_1252.$(OBJEXT): internal/attr/noexcept.h +enc/windows_1252.$(OBJEXT): internal/attr/noinline.h +enc/windows_1252.$(OBJEXT): internal/attr/nonnull.h +enc/windows_1252.$(OBJEXT): internal/attr/noreturn.h +enc/windows_1252.$(OBJEXT): internal/attr/pure.h +enc/windows_1252.$(OBJEXT): internal/attr/restrict.h +enc/windows_1252.$(OBJEXT): internal/attr/returns_nonnull.h +enc/windows_1252.$(OBJEXT): internal/attr/warning.h +enc/windows_1252.$(OBJEXT): internal/cast.h +enc/windows_1252.$(OBJEXT): internal/compiler_is.h +enc/windows_1252.$(OBJEXT): internal/compiler_is/apple.h +enc/windows_1252.$(OBJEXT): internal/compiler_is/clang.h +enc/windows_1252.$(OBJEXT): internal/compiler_is/gcc.h +enc/windows_1252.$(OBJEXT): internal/compiler_is/intel.h +enc/windows_1252.$(OBJEXT): internal/compiler_is/msvc.h +enc/windows_1252.$(OBJEXT): internal/compiler_is/sunpro.h +enc/windows_1252.$(OBJEXT): internal/compiler_since.h +enc/windows_1252.$(OBJEXT): internal/config.h +enc/windows_1252.$(OBJEXT): internal/dllexport.h +enc/windows_1252.$(OBJEXT): internal/dosish.h +enc/windows_1252.$(OBJEXT): internal/has/attribute.h +enc/windows_1252.$(OBJEXT): internal/has/builtin.h +enc/windows_1252.$(OBJEXT): internal/has/c_attribute.h +enc/windows_1252.$(OBJEXT): internal/has/cpp_attribute.h +enc/windows_1252.$(OBJEXT): internal/has/declspec_attribute.h +enc/windows_1252.$(OBJEXT): internal/has/extension.h +enc/windows_1252.$(OBJEXT): internal/has/feature.h +enc/windows_1252.$(OBJEXT): internal/has/warning.h +enc/windows_1252.$(OBJEXT): internal/stdalign.h +enc/windows_1252.$(OBJEXT): internal/stdbool.h +enc/windows_1252.$(OBJEXT): internal/warning_push.h +enc/windows_1252.$(OBJEXT): internal/xmalloc.h enc/windows_1252.$(OBJEXT): missing.h enc/windows_1252.$(OBJEXT): onigmo.h enc/windows_1253.$(OBJEXT): $(top_srcdir)/regenc.h +enc/windows_1253.$(OBJEXT): assert.h +enc/windows_1253.$(OBJEXT): backward/2/assume.h +enc/windows_1253.$(OBJEXT): backward/2/attributes.h +enc/windows_1253.$(OBJEXT): backward/2/bool.h +enc/windows_1253.$(OBJEXT): backward/2/long_long.h +enc/windows_1253.$(OBJEXT): backward/2/stdalign.h +enc/windows_1253.$(OBJEXT): backward/2/stdarg.h enc/windows_1253.$(OBJEXT): config.h enc/windows_1253.$(OBJEXT): defines.h enc/windows_1253.$(OBJEXT): enc/windows_1253.c +enc/windows_1253.$(OBJEXT): internal/assume.h +enc/windows_1253.$(OBJEXT): internal/attr/alloc_size.h +enc/windows_1253.$(OBJEXT): internal/attr/cold.h +enc/windows_1253.$(OBJEXT): internal/attr/const.h +enc/windows_1253.$(OBJEXT): internal/attr/deprecated.h +enc/windows_1253.$(OBJEXT): internal/attr/error.h +enc/windows_1253.$(OBJEXT): internal/attr/forceinline.h +enc/windows_1253.$(OBJEXT): internal/attr/format.h +enc/windows_1253.$(OBJEXT): internal/attr/maybe_unused.h +enc/windows_1253.$(OBJEXT): internal/attr/nodiscard.h +enc/windows_1253.$(OBJEXT): internal/attr/noexcept.h +enc/windows_1253.$(OBJEXT): internal/attr/noinline.h +enc/windows_1253.$(OBJEXT): internal/attr/nonnull.h +enc/windows_1253.$(OBJEXT): internal/attr/noreturn.h +enc/windows_1253.$(OBJEXT): internal/attr/pure.h +enc/windows_1253.$(OBJEXT): internal/attr/restrict.h +enc/windows_1253.$(OBJEXT): internal/attr/returns_nonnull.h +enc/windows_1253.$(OBJEXT): internal/attr/warning.h +enc/windows_1253.$(OBJEXT): internal/cast.h +enc/windows_1253.$(OBJEXT): internal/compiler_is.h +enc/windows_1253.$(OBJEXT): internal/compiler_is/apple.h +enc/windows_1253.$(OBJEXT): internal/compiler_is/clang.h +enc/windows_1253.$(OBJEXT): internal/compiler_is/gcc.h +enc/windows_1253.$(OBJEXT): internal/compiler_is/intel.h +enc/windows_1253.$(OBJEXT): internal/compiler_is/msvc.h +enc/windows_1253.$(OBJEXT): internal/compiler_is/sunpro.h +enc/windows_1253.$(OBJEXT): internal/compiler_since.h +enc/windows_1253.$(OBJEXT): internal/config.h +enc/windows_1253.$(OBJEXT): internal/dllexport.h +enc/windows_1253.$(OBJEXT): internal/dosish.h +enc/windows_1253.$(OBJEXT): internal/has/attribute.h +enc/windows_1253.$(OBJEXT): internal/has/builtin.h +enc/windows_1253.$(OBJEXT): internal/has/c_attribute.h +enc/windows_1253.$(OBJEXT): internal/has/cpp_attribute.h +enc/windows_1253.$(OBJEXT): internal/has/declspec_attribute.h +enc/windows_1253.$(OBJEXT): internal/has/extension.h +enc/windows_1253.$(OBJEXT): internal/has/feature.h +enc/windows_1253.$(OBJEXT): internal/has/warning.h +enc/windows_1253.$(OBJEXT): internal/stdalign.h +enc/windows_1253.$(OBJEXT): internal/stdbool.h +enc/windows_1253.$(OBJEXT): internal/warning_push.h +enc/windows_1253.$(OBJEXT): internal/xmalloc.h enc/windows_1253.$(OBJEXT): missing.h enc/windows_1253.$(OBJEXT): onigmo.h enc/windows_1254.$(OBJEXT): $(top_srcdir)/regenc.h +enc/windows_1254.$(OBJEXT): assert.h +enc/windows_1254.$(OBJEXT): backward/2/assume.h +enc/windows_1254.$(OBJEXT): backward/2/attributes.h +enc/windows_1254.$(OBJEXT): backward/2/bool.h +enc/windows_1254.$(OBJEXT): backward/2/long_long.h +enc/windows_1254.$(OBJEXT): backward/2/stdalign.h +enc/windows_1254.$(OBJEXT): backward/2/stdarg.h enc/windows_1254.$(OBJEXT): config.h enc/windows_1254.$(OBJEXT): defines.h enc/windows_1254.$(OBJEXT): enc/iso_8859.h enc/windows_1254.$(OBJEXT): enc/windows_1254.c +enc/windows_1254.$(OBJEXT): internal/assume.h +enc/windows_1254.$(OBJEXT): internal/attr/alloc_size.h +enc/windows_1254.$(OBJEXT): internal/attr/cold.h +enc/windows_1254.$(OBJEXT): internal/attr/const.h +enc/windows_1254.$(OBJEXT): internal/attr/deprecated.h +enc/windows_1254.$(OBJEXT): internal/attr/error.h +enc/windows_1254.$(OBJEXT): internal/attr/forceinline.h +enc/windows_1254.$(OBJEXT): internal/attr/format.h +enc/windows_1254.$(OBJEXT): internal/attr/maybe_unused.h +enc/windows_1254.$(OBJEXT): internal/attr/nodiscard.h +enc/windows_1254.$(OBJEXT): internal/attr/noexcept.h +enc/windows_1254.$(OBJEXT): internal/attr/noinline.h +enc/windows_1254.$(OBJEXT): internal/attr/nonnull.h +enc/windows_1254.$(OBJEXT): internal/attr/noreturn.h +enc/windows_1254.$(OBJEXT): internal/attr/pure.h +enc/windows_1254.$(OBJEXT): internal/attr/restrict.h +enc/windows_1254.$(OBJEXT): internal/attr/returns_nonnull.h +enc/windows_1254.$(OBJEXT): internal/attr/warning.h +enc/windows_1254.$(OBJEXT): internal/cast.h +enc/windows_1254.$(OBJEXT): internal/compiler_is.h +enc/windows_1254.$(OBJEXT): internal/compiler_is/apple.h +enc/windows_1254.$(OBJEXT): internal/compiler_is/clang.h +enc/windows_1254.$(OBJEXT): internal/compiler_is/gcc.h +enc/windows_1254.$(OBJEXT): internal/compiler_is/intel.h +enc/windows_1254.$(OBJEXT): internal/compiler_is/msvc.h +enc/windows_1254.$(OBJEXT): internal/compiler_is/sunpro.h +enc/windows_1254.$(OBJEXT): internal/compiler_since.h +enc/windows_1254.$(OBJEXT): internal/config.h +enc/windows_1254.$(OBJEXT): internal/dllexport.h +enc/windows_1254.$(OBJEXT): internal/dosish.h +enc/windows_1254.$(OBJEXT): internal/has/attribute.h +enc/windows_1254.$(OBJEXT): internal/has/builtin.h +enc/windows_1254.$(OBJEXT): internal/has/c_attribute.h +enc/windows_1254.$(OBJEXT): internal/has/cpp_attribute.h +enc/windows_1254.$(OBJEXT): internal/has/declspec_attribute.h +enc/windows_1254.$(OBJEXT): internal/has/extension.h +enc/windows_1254.$(OBJEXT): internal/has/feature.h +enc/windows_1254.$(OBJEXT): internal/has/warning.h +enc/windows_1254.$(OBJEXT): internal/stdalign.h +enc/windows_1254.$(OBJEXT): internal/stdbool.h +enc/windows_1254.$(OBJEXT): internal/warning_push.h +enc/windows_1254.$(OBJEXT): internal/xmalloc.h enc/windows_1254.$(OBJEXT): missing.h enc/windows_1254.$(OBJEXT): onigmo.h enc/windows_1257.$(OBJEXT): $(top_srcdir)/regenc.h +enc/windows_1257.$(OBJEXT): assert.h +enc/windows_1257.$(OBJEXT): backward/2/assume.h +enc/windows_1257.$(OBJEXT): backward/2/attributes.h +enc/windows_1257.$(OBJEXT): backward/2/bool.h +enc/windows_1257.$(OBJEXT): backward/2/long_long.h +enc/windows_1257.$(OBJEXT): backward/2/stdalign.h +enc/windows_1257.$(OBJEXT): backward/2/stdarg.h enc/windows_1257.$(OBJEXT): config.h enc/windows_1257.$(OBJEXT): defines.h enc/windows_1257.$(OBJEXT): enc/iso_8859.h enc/windows_1257.$(OBJEXT): enc/windows_1257.c +enc/windows_1257.$(OBJEXT): internal/assume.h +enc/windows_1257.$(OBJEXT): internal/attr/alloc_size.h +enc/windows_1257.$(OBJEXT): internal/attr/cold.h +enc/windows_1257.$(OBJEXT): internal/attr/const.h +enc/windows_1257.$(OBJEXT): internal/attr/deprecated.h +enc/windows_1257.$(OBJEXT): internal/attr/error.h +enc/windows_1257.$(OBJEXT): internal/attr/forceinline.h +enc/windows_1257.$(OBJEXT): internal/attr/format.h +enc/windows_1257.$(OBJEXT): internal/attr/maybe_unused.h +enc/windows_1257.$(OBJEXT): internal/attr/nodiscard.h +enc/windows_1257.$(OBJEXT): internal/attr/noexcept.h +enc/windows_1257.$(OBJEXT): internal/attr/noinline.h +enc/windows_1257.$(OBJEXT): internal/attr/nonnull.h +enc/windows_1257.$(OBJEXT): internal/attr/noreturn.h +enc/windows_1257.$(OBJEXT): internal/attr/pure.h +enc/windows_1257.$(OBJEXT): internal/attr/restrict.h +enc/windows_1257.$(OBJEXT): internal/attr/returns_nonnull.h +enc/windows_1257.$(OBJEXT): internal/attr/warning.h +enc/windows_1257.$(OBJEXT): internal/cast.h +enc/windows_1257.$(OBJEXT): internal/compiler_is.h +enc/windows_1257.$(OBJEXT): internal/compiler_is/apple.h +enc/windows_1257.$(OBJEXT): internal/compiler_is/clang.h +enc/windows_1257.$(OBJEXT): internal/compiler_is/gcc.h +enc/windows_1257.$(OBJEXT): internal/compiler_is/intel.h +enc/windows_1257.$(OBJEXT): internal/compiler_is/msvc.h +enc/windows_1257.$(OBJEXT): internal/compiler_is/sunpro.h +enc/windows_1257.$(OBJEXT): internal/compiler_since.h +enc/windows_1257.$(OBJEXT): internal/config.h +enc/windows_1257.$(OBJEXT): internal/dllexport.h +enc/windows_1257.$(OBJEXT): internal/dosish.h +enc/windows_1257.$(OBJEXT): internal/has/attribute.h +enc/windows_1257.$(OBJEXT): internal/has/builtin.h +enc/windows_1257.$(OBJEXT): internal/has/c_attribute.h +enc/windows_1257.$(OBJEXT): internal/has/cpp_attribute.h +enc/windows_1257.$(OBJEXT): internal/has/declspec_attribute.h +enc/windows_1257.$(OBJEXT): internal/has/extension.h +enc/windows_1257.$(OBJEXT): internal/has/feature.h +enc/windows_1257.$(OBJEXT): internal/has/warning.h +enc/windows_1257.$(OBJEXT): internal/stdalign.h +enc/windows_1257.$(OBJEXT): internal/stdbool.h +enc/windows_1257.$(OBJEXT): internal/warning_push.h +enc/windows_1257.$(OBJEXT): internal/xmalloc.h enc/windows_1257.$(OBJEXT): missing.h enc/windows_1257.$(OBJEXT): onigmo.h enc/windows_31j.$(OBJEXT): $(top_srcdir)/regenc.h +enc/windows_31j.$(OBJEXT): assert.h +enc/windows_31j.$(OBJEXT): backward/2/assume.h +enc/windows_31j.$(OBJEXT): backward/2/attributes.h +enc/windows_31j.$(OBJEXT): backward/2/bool.h +enc/windows_31j.$(OBJEXT): backward/2/long_long.h +enc/windows_31j.$(OBJEXT): backward/2/stdalign.h +enc/windows_31j.$(OBJEXT): backward/2/stdarg.h enc/windows_31j.$(OBJEXT): config.h enc/windows_31j.$(OBJEXT): defines.h enc/windows_31j.$(OBJEXT): enc/jis/props.h enc/windows_31j.$(OBJEXT): enc/jis/props.kwd enc/windows_31j.$(OBJEXT): enc/shift_jis.h enc/windows_31j.$(OBJEXT): enc/windows_31j.c +enc/windows_31j.$(OBJEXT): internal/assume.h +enc/windows_31j.$(OBJEXT): internal/attr/alloc_size.h +enc/windows_31j.$(OBJEXT): internal/attr/cold.h +enc/windows_31j.$(OBJEXT): internal/attr/const.h +enc/windows_31j.$(OBJEXT): internal/attr/deprecated.h +enc/windows_31j.$(OBJEXT): internal/attr/error.h +enc/windows_31j.$(OBJEXT): internal/attr/forceinline.h +enc/windows_31j.$(OBJEXT): internal/attr/format.h +enc/windows_31j.$(OBJEXT): internal/attr/maybe_unused.h +enc/windows_31j.$(OBJEXT): internal/attr/nodiscard.h +enc/windows_31j.$(OBJEXT): internal/attr/noexcept.h +enc/windows_31j.$(OBJEXT): internal/attr/noinline.h +enc/windows_31j.$(OBJEXT): internal/attr/nonnull.h +enc/windows_31j.$(OBJEXT): internal/attr/noreturn.h +enc/windows_31j.$(OBJEXT): internal/attr/pure.h +enc/windows_31j.$(OBJEXT): internal/attr/restrict.h +enc/windows_31j.$(OBJEXT): internal/attr/returns_nonnull.h +enc/windows_31j.$(OBJEXT): internal/attr/warning.h +enc/windows_31j.$(OBJEXT): internal/cast.h +enc/windows_31j.$(OBJEXT): internal/compiler_is.h +enc/windows_31j.$(OBJEXT): internal/compiler_is/apple.h +enc/windows_31j.$(OBJEXT): internal/compiler_is/clang.h +enc/windows_31j.$(OBJEXT): internal/compiler_is/gcc.h +enc/windows_31j.$(OBJEXT): internal/compiler_is/intel.h +enc/windows_31j.$(OBJEXT): internal/compiler_is/msvc.h +enc/windows_31j.$(OBJEXT): internal/compiler_is/sunpro.h +enc/windows_31j.$(OBJEXT): internal/compiler_since.h +enc/windows_31j.$(OBJEXT): internal/config.h +enc/windows_31j.$(OBJEXT): internal/dllexport.h +enc/windows_31j.$(OBJEXT): internal/dosish.h +enc/windows_31j.$(OBJEXT): internal/has/attribute.h +enc/windows_31j.$(OBJEXT): internal/has/builtin.h +enc/windows_31j.$(OBJEXT): internal/has/c_attribute.h +enc/windows_31j.$(OBJEXT): internal/has/cpp_attribute.h +enc/windows_31j.$(OBJEXT): internal/has/declspec_attribute.h +enc/windows_31j.$(OBJEXT): internal/has/extension.h +enc/windows_31j.$(OBJEXT): internal/has/feature.h +enc/windows_31j.$(OBJEXT): internal/has/warning.h +enc/windows_31j.$(OBJEXT): internal/stdalign.h +enc/windows_31j.$(OBJEXT): internal/stdbool.h +enc/windows_31j.$(OBJEXT): internal/warning_push.h +enc/windows_31j.$(OBJEXT): internal/xmalloc.h enc/windows_31j.$(OBJEXT): missing.h enc/windows_31j.$(OBJEXT): onigmo.h # AUTOGENERATED DEPENDENCIES END diff --git a/ruby/enc/encdb.c b/ruby/enc/encdb.c index a41e4edc6..a1936df80 100644 --- a/ruby/enc/encdb.c +++ b/ruby/enc/encdb.c @@ -9,7 +9,7 @@ **********************************************************************/ -#include "internal.h" +#include "internal/encoding.h" #define ENC_REPLICATE(name, orig) rb_encdb_replicate((name), (orig)) #define ENC_ALIAS(name, orig) rb_encdb_alias((name), (orig)) diff --git a/ruby/enc/euc_jp.c b/ruby/enc/euc_jp.c index ded051af6..d283bf4eb 100644 --- a/ruby/enc/euc_jp.c +++ b/ruby/enc/euc_jp.c @@ -593,7 +593,7 @@ ENC_ALIAS("eucJP", "EUC-JP") /* UI-OSF Application Platform Profile for Japanese * Name: eucJP-ms * Link: http://home.m05.itscom.net/numa/cde/ucs-conv/ucs-conv.html * Link: http://www2d.biglobe.ne.jp/~msyk/charcode/cp932/eucJP-ms.html - * Link: http://ja.wikipedia.org/wiki/EUC-JP + * Link: https://ja.wikipedia.org/wiki/EUC-JP */ ENC_REPLICATE("eucJP-ms", "EUC-JP") /* TOG/JVC CDE/Motif Technical WG */ ENC_ALIAS("euc-jp-ms", "eucJP-ms") @@ -610,7 +610,7 @@ ENC_REPLICATE("CP51932", "EUC-JP") /* * Name: EUC-JIS-2004 - * Link: http://ja.wikipedia.org/wiki/EUC-JIS-2004 + * Link: https://ja.wikipedia.org/wiki/EUC-JIS-2004 */ ENC_REPLICATE("EUC-JIS-2004", "EUC-JP") /* defined at JIS X 0213:2004 */ ENC_ALIAS("EUC-JISX0213", "EUC-JIS-2004") /* defined at JIS X 0213:2000, and obsolete at JIS X 0213:2004 */ diff --git a/ruby/enc/iso_8859_11.c b/ruby/enc/iso_8859_11.c index 85e8f2cdb..b9c6119fd 100644 --- a/ruby/enc/iso_8859_11.c +++ b/ruby/enc/iso_8859_11.c @@ -102,7 +102,7 @@ ENC_ALIAS("ISO8859-11", "ISO-8859-11") /* * Name: TIS-620 * MIBenum: 2259 - * Link: http://en.wikipedia.org/wiki/Thai_Industrial_Standard_620-2533 + * Link: https://en.wikipedia.org/wiki/Thai_Industrial_Standard_620-2533 */ ENC_REPLICATE("TIS-620", "ISO-8859-11") diff --git a/ruby/enc/iso_8859_6.c b/ruby/enc/iso_8859_6.c index 6d852ac8c..cdb74054d 100644 --- a/ruby/enc/iso_8859_6.c +++ b/ruby/enc/iso_8859_6.c @@ -104,7 +104,7 @@ ENC_ALIAS("ISO8859-6", "ISO-8859-6") * MIBenum: 2256 * Link: http://www.iana.org/assignments/character-sets * Link: http://www.microsoft.com/globaldev/reference/sbcs/1256.mspx - * Link: http://en.wikipedia.org/wiki/Windows-1256 + * Link: https://en.wikipedia.org/wiki/Windows-1256 */ ENC_REPLICATE("Windows-1256", "ISO-8859-6") ENC_ALIAS("CP1256", "Windows-1256") diff --git a/ruby/enc/iso_8859_8.c b/ruby/enc/iso_8859_8.c index 0a7a29e82..e256855f2 100644 --- a/ruby/enc/iso_8859_8.c +++ b/ruby/enc/iso_8859_8.c @@ -104,7 +104,7 @@ ENC_ALIAS("ISO8859-8", "ISO-8859-8") * MIBenum: 2255 * Link: http://www.iana.org/assignments/character-sets * Link: http://www.microsoft.com/globaldev/reference/sbcs/1255.mspx - * Link: http://en.wikipedia.org/wiki/Windows-1255 + * Link: https://en.wikipedia.org/wiki/Windows-1255 */ ENC_REPLICATE("Windows-1255", "ISO-8859-8") ENC_ALIAS("CP1255", "Windows-1255") diff --git a/ruby/enc/shift_jis.c b/ruby/enc/shift_jis.c index 65fd5102d..f1355d2d9 100644 --- a/ruby/enc/shift_jis.c +++ b/ruby/enc/shift_jis.c @@ -55,13 +55,13 @@ OnigEncodingDefine(shift_jis, Shift_JIS) = { * Name: Shift_JIS * MIBenum: 17 * Link: http://www.iana.org/assignments/character-sets - * Link: http://ja.wikipedia.org/wiki/Shift_JIS + * Link: https://ja.wikipedia.org/wiki/Shift_JIS */ /* * Name: MacJapanese * Link: http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/JAPANESE.TXT - * Link: http://ja.wikipedia.org/wiki/MacJapanese + * Link: https://ja.wikipedia.org/wiki/MacJapanese */ ENC_REPLICATE("MacJapanese", "Shift_JIS") ENC_ALIAS("MacJapan", "MacJapanese") diff --git a/ruby/enc/trans/escape.trans b/ruby/enc/trans/escape.trans index c76ffa0e0..36d9dd0f1 100644 --- a/ruby/enc/trans/escape.trans +++ b/ruby/enc/trans/escape.trans @@ -18,9 +18,10 @@ ], nil) transcode_tblgen("", "xml_attr_content_escape", [ - ["{00-21,23-25,27-3B,3D,3F-FF}", :nomap], + ["{00-21,23-25,28-3B,3D,3F-FF}", :nomap], ["22", hexstr(""")], ["26", hexstr("&")], + ["27", hexstr("'")], ["3C", hexstr("<")], ["3E", hexstr(">")] ], nil) diff --git a/ruby/enc/trans/ibm720-tbl.rb b/ruby/enc/trans/ibm720-tbl.rb new file mode 100644 index 000000000..558684d64 --- /dev/null +++ b/ruby/enc/trans/ibm720-tbl.rb @@ -0,0 +1,122 @@ +IBM720_TO_UCS_TBL = [ + ["FF",0xA0], + ["9C",0xA3], + ["94",0xA4], + ["AE",0xAB], + ["F8",0xB0], + ["FD",0xB2], + ["E6",0xB5], + ["FA",0xB7], + ["AF",0xBB], + ["85",0xE0], + ["83",0xE2], + ["87",0xE7], + ["8A",0xE8], + ["82",0xE9], + ["88",0xEA], + ["89",0xEB], + ["8C",0xEE], + ["8B",0xEF], + ["93",0xF4], + ["97",0xF9], + ["96",0xFB], + ["98",0x621], + ["99",0x622], + ["9A",0x623], + ["9B",0x624], + ["9D",0x625], + ["9E",0x626], + ["9F",0x627], + ["A0",0x628], + ["A1",0x629], + ["A2",0x62A], + ["A3",0x62B], + ["A4",0x62C], + ["A5",0x62D], + ["A6",0x62E], + ["A7",0x62F], + ["A8",0x630], + ["A9",0x631], + ["AA",0x632], + ["AB",0x633], + ["AC",0x634], + ["AD",0x635], + ["E0",0x636], + ["E1",0x637], + ["E2",0x638], + ["E3",0x639], + ["E4",0x63A], + ["95",0x640], + ["E5",0x641], + ["E7",0x642], + ["E8",0x643], + ["E9",0x644], + ["EA",0x645], + ["EB",0x646], + ["EC",0x647], + ["ED",0x648], + ["EE",0x649], + ["EF",0x64A], + ["F1",0x64B], + ["F2",0x64C], + ["F3",0x64D], + ["F4",0x64E], + ["F5",0x64F], + ["F6",0x650], + ["91",0x651], + ["92",0x652], + ["FC",0x207F], + ["F9",0x2219], + ["FB",0x221A], + ["F7",0x2248], + ["F0",0x2261], + ["C4",0x2500], + ["B3",0x2502], + ["DA",0x250C], + ["BF",0x2510], + ["C0",0x2514], + ["D9",0x2518], + ["C3",0x251C], + ["B4",0x2524], + ["C2",0x252C], + ["C1",0x2534], + ["C5",0x253C], + ["CD",0x2550], + ["BA",0x2551], + ["D5",0x2552], + ["D6",0x2553], + ["C9",0x2554], + ["B8",0x2555], + ["B7",0x2556], + ["BB",0x2557], + ["D4",0x2558], + ["D3",0x2559], + ["C8",0x255A], + ["BE",0x255B], + ["BD",0x255C], + ["BC",0x255D], + ["C6",0x255E], + ["C7",0x255F], + ["CC",0x2560], + ["B5",0x2561], + ["B6",0x2562], + ["B9",0x2563], + ["D1",0x2564], + ["D2",0x2565], + ["CB",0x2566], + ["CF",0x2567], + ["D0",0x2568], + ["CA",0x2569], + ["D8",0x256A], + ["D7",0x256B], + ["CE",0x256C], + ["DF",0x2580], + ["DC",0x2584], + ["DB",0x2588], + ["DD",0x258C], + ["DE",0x2590], + ["B0",0x2591], + ["B1",0x2592], + ["B2",0x2593], + ["FE",0x25A0], +] diff --git a/ruby/enc/trans/newline.trans b/ruby/enc/trans/newline.trans index a200ec00a..9e763407f 100644 --- a/ruby/enc/trans/newline.trans +++ b/ruby/enc/trans/newline.trans @@ -98,7 +98,7 @@ rb_universal_newline = { 2, /* max_output */ asciicompat_converter, /* asciicompat_type */ 2, universal_newline_init, universal_newline_init, /* state_size, state_init, state_fini */ - NULL, NULL, NULL, fun_so_universal_newline, + 0, 0, 0, fun_so_universal_newline, universal_newline_finish }; @@ -110,8 +110,8 @@ rb_crlf_newline = { 1, /* max_input */ 2, /* max_output */ asciicompat_converter, /* asciicompat_type */ - 0, NULL, NULL, /* state_size, state_init, state_fini */ - NULL, NULL, NULL, NULL + 0, 0, 0, /* state_size, state_init, state_fini */ + 0, 0, 0, 0 }; static const rb_transcoder @@ -122,8 +122,8 @@ rb_cr_newline = { 1, /* max_input */ 1, /* max_output */ asciicompat_converter, /* asciicompat_type */ - 0, NULL, NULL, /* state_size, state_init, state_fini */ - NULL, NULL, NULL, NULL + 0, 0, 0, /* state_size, state_init, state_fini */ + 0, 0, 0, 0 }; void diff --git a/ruby/enc/trans/single_byte.trans b/ruby/enc/trans/single_byte.trans index cf521bed3..0d5407b91 100644 --- a/ruby/enc/trans/single_byte.trans +++ b/ruby/enc/trans/single_byte.trans @@ -51,8 +51,9 @@ transcode_tblgen_singlebyte "WINDOWS-1256" transcode_tblgen_singlebyte "WINDOWS-1257" transcode_tblgen_singlebyte "IBM437" - transcode_tblgen_singlebyte "IBM775" + transcode_tblgen_singlebyte "IBM720" transcode_tblgen_singlebyte "IBM737" + transcode_tblgen_singlebyte "IBM775" transcode_tblgen_singlebyte "IBM852" transcode_tblgen_singlebyte "IBM855" transcode_tblgen_singlebyte "IBM857" diff --git a/ruby/enc/unicode.c b/ruby/enc/unicode.c index 6e8c3d881..18fba0247 100644 --- a/ruby/enc/unicode.c +++ b/ruby/enc/unicode.c @@ -493,6 +493,10 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc, #endif if ((to = onigenc_unicode_fold_lookup(code)) != 0) { + if (OnigCodePointCount(to->n) == 0) { + /* any codepoint should not be empty */ + UNREACHABLE_RETURN(0); + } if (OnigCodePointCount(to->n) == 1) { OnigCodePoint orig_code = code; diff --git a/ruby/enc/unicode/12.1.0/casefold.h b/ruby/enc/unicode/13.0.0/casefold.h similarity index 90% rename from ruby/enc/unicode/12.1.0/casefold.h rename to ruby/enc/unicode/13.0.0/casefold.h index 4c62f0fae..39f22604c 100644 --- a/ruby/enc/unicode/12.1.0/casefold.h +++ b/ruby/enc/unicode/13.0.0/casefold.h @@ -2,19 +2,19 @@ /* Generated by enc/unicode/case-folding.rb */ #if defined ONIG_UNICODE_VERSION_STRING && !( \ - ONIG_UNICODE_VERSION_MAJOR == 12 && \ - ONIG_UNICODE_VERSION_MINOR == 1 && \ + ONIG_UNICODE_VERSION_MAJOR == 13 && \ + ONIG_UNICODE_VERSION_MINOR == 0 && \ ONIG_UNICODE_VERSION_TEENY == 0 && \ 1) # error ONIG_UNICODE_VERSION_STRING mismatch #endif -#define ONIG_UNICODE_VERSION_STRING "12.1.0" -#define ONIG_UNICODE_VERSION_MAJOR 12 -#define ONIG_UNICODE_VERSION_MINOR 1 +#define ONIG_UNICODE_VERSION_STRING "13.0.0" +#define ONIG_UNICODE_VERSION_MAJOR 13 +#define ONIG_UNICODE_VERSION_MINOR 0 #define ONIG_UNICODE_VERSION_TEENY 0 static const CaseFold_11_Type CaseFold_11_Table[] = { -#define CaseFold (*(CaseFold_11_Type (*)[1485])(CaseFold_11_Table+0)) +#define CaseFold (*(CaseFold_11_Type (*)[1488])(CaseFold_11_Table+0)) {0x0041, {1|F|D, {0x0061}}}, {0x0042, {1|F|D, {0x0062}}}, {0x0043, {1|F|D, {0x0063}}}, @@ -1157,6 +1157,9 @@ static const CaseFold_11_Type CaseFold_11_Table[] = { {0xa7c4, {1|F|D, {0xa794}}}, {0xa7c5, {1|F|D, {0x0282}}}, {0xa7c6, {1|F|D, {0x1d8e}}}, + {0xa7c7, {1|F|D, {0xa7c8}}}, + {0xa7c9, {1|F|D, {0xa7ca}}}, + {0xa7f5, {1|F|D, {0xa7f6}}}, {0xab70, {1|F|U, {0x13a0}}}, {0xab71, {1|F|U, {0x13a1}}}, {0xab72, {1|F|U, {0x13a2}}}, @@ -1500,7 +1503,7 @@ static const CaseFold_11_Type CaseFold_11_Table[] = { {0x1e91f, {1|F|D, {0x1e941}}}, {0x1e920, {1|F|D, {0x1e942}}}, {0x1e921, {1|F|D, {0x1e943}}}, -#define CaseFold_Locale (*(CaseFold_11_Type (*)[2])(CaseFold_11_Table+1485)) +#define CaseFold_Locale (*(CaseFold_11_Type (*)[2])(CaseFold_11_Table+1488)) {0x0049, {1|F|D, {0x0069}}}, {0x0130, {2|F|D, {0x0069, 0x0307}}}, }; @@ -1508,7 +1511,7 @@ static const CaseFold_11_Type CaseFold_11_Table[] = { /* ANSI-C code produced by gperf version 3.1 */ /* Command-line: gperf -7 -k1,2,3 -F,-1 -c -j1 -i1 -t -T -E -C -H onigenc_unicode_CaseFold_11_hash -N onigenc_unicode_CaseFold_11_lookup -n */ -/* maximum key range = 3500, duplicates = 0 */ +/* maximum key range = 3677, duplicates = 0 */ #ifdef __GNUC__ __inline @@ -1523,29 +1526,29 @@ onigenc_unicode_CaseFold_11_hash(const OnigCodePoint code) { static const unsigned short asso_values[] = { - 5, 273, 4, 8, 3, 1, 86, 9, 2, 289, - 290, 3, 3510, 3510, 3510, 3510, 3510, 3510, 3510, 3510, - 3510, 3510, 3510, 3510, 3510, 50, 3510, 3510, 3510, 3510, - 3510, 3510, 3510, 225, 3510, 3510, 3510, 3510, 3510, 28, - 3510, 3510, 3510, 3510, 3510, 3510, 3510, 3510, 3510, 394, - 3510, 3510, 3510, 3510, 3510, 3510, 3510, 47, 3510, 3510, - 255, 40, 286, 1, 3510, 3510, 599, 8, 3510, 3510, - 3510, 3510, 3510, 282, 3510, 3510, 267, 667, 473, 39, - 2019, 189, 47, 175, 2001, 107, 1626, 6, 12, 25, - 1961, 678, 1128, 526, 1945, 148, 1923, 371, 1720, 134, - 1857, 80, 1375, 66, 1705, 300, 1635, 445, 1611, 472, - 1795, 216, 1303, 499, 1552, 270, 1511, 243, 121, 619, - 1284, 540, 875, 592, 1484, 567, 412, 703, 1692, 387, - 1782, 781, 1767, 664, 1718, 648, 1316, 608, 1647, 715, - 1592, 771, 1544, 1029, 1563, 887, 1296, 861, 1194, 978, - 95, 899, 1257, 835, 1335, 765, 1529, 984, 862, 938, - 1460, 759, 329, 1079, 1159, 940, 234, 1101, 1204, 990, - 949, 1493, 92, 1438, 77, 1391, 7, 1073, 44, 1377, - 2, 1435, 4, 1321, 428, 1274, 332, 1206, 11, 1426, - 46, 478, 200, 1502, 31, 1400, 153, 1663, 352, 1820, - 229, 1733, 265, 1405, 315, 1879, 198 + 1, 3681, 2, 7, 3, 416, 200, 59, 83, 50, + 2, 288, 142, 5, 3681, 3681, 3681, 3681, 3681, 3681, + 3681, 3681, 3681, 3681, 3681, 3681, 3681, 30, 3681, 3681, + 3681, 3681, 3681, 3681, 3681, 127, 3681, 3681, 3681, 3681, + 3681, 19, 3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681, + 3681, 459, 3681, 3681, 3681, 3681, 3681, 3681, 3681, 190, + 3681, 3681, 14, 13, 297, 1, 3681, 3681, 300, 5, + 3681, 3681, 3681, 3681, 3681, 179, 3681, 3681, 205, 792, + 431, 28, 1935, 486, 235, 442, 2030, 113, 1663, 5, + 11, 22, 1884, 649, 743, 397, 1558, 96, 1958, 130, + 1745, 279, 1900, 79, 1345, 45, 1785, 62, 1708, 342, + 1679, 262, 1857, 147, 1364, 532, 1639, 197, 1612, 180, + 519, 587, 1332, 380, 1044, 546, 1578, 464, 431, 698, + 1701, 573, 1593, 768, 1893, 737, 1735, 643, 1552, 669, + 1807, 794, 1633, 704, 1821, 1313, 1630, 1064, 1283, 1001, + 1321, 1119, 1307, 1040, 948, 864, 1697, 1015, 1338, 1174, + 1945, 1153, 1002, 1109, 1280, 1245, 812, 1095, 286, 1261, + 512, 1210, 372, 1496, 98, 1494, 31, 1526, 14, 1136, + 77, 1476, 5, 1511, 68, 1425, 9, 1418, 205, 1387, + 209, 1358, 60, 1834, 12, 1564, 39, 2015, 128, 916, + 88, 1275, 2, 1019, 333, 665, 346, 1365, 174 }; - return asso_values[bits_of(code, 2)+79] + asso_values[bits_of(code, 1)] + asso_values[bits_of(code, 0)]; + return asso_values[bits_of(code, 2)+81] + asso_values[bits_of(code, 1)+2] + asso_values[bits_of(code, 0)]; } static const CodePointList3 * @@ -1555,1958 +1558,2042 @@ onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code) { MIN_CODE_VALUE = 0x41, MAX_CODE_VALUE = 0x1e921, - TOTAL_KEYWORDS = 1487, + TOTAL_KEYWORDS = 1490, MIN_WORD_LENGTH = 3, MAX_WORD_LENGTH = 3, - MIN_HASH_VALUE = 10, - MAX_HASH_VALUE = 3509 + MIN_HASH_VALUE = 4, + MAX_HASH_VALUE = 3680 }; static const short wordlist[] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - /*0x1fe7*/ 848, - /*0x10408*/ 1268, + /*0x1ff9*/ 860, + -1, + /*0x0179*/ 117, /*0x1f88*/ 775, /*0x0408*/ 305, - /*0x0208*/ 194, /*0x0108*/ 61, - /*0xab88*/ 1166, - /*0x10409*/ 1269, + /*0x10408*/ 1271, + /*0x1fe9*/ 850, + /*0xab88*/ 1169, /*0x1f89*/ 776, /*0x0409*/ 306, - /*0x0388*/ 235, - /*0x2c67*/ 962, - /*0xab89*/ 1167, - /*0x2c08*/ 919, - -1, - /*0x0189*/ 126, - /*0x0389*/ 236, -1, - /*0x2c6d*/ 965, + /*0x10409*/ 1272, + /*0x2c08*/ 919, + /*0xab89*/ 1170, + /*0x1e88*/ 653, + /*0x1e08*/ 589, + /*0x2c69*/ 963, + /*0x13f9*/ 525, /*0x2c09*/ 920, - /*0x1040a*/ 1270, /*0x1f8a*/ 777, /*0x040a*/ 307, - /*0x020a*/ 195, /*0x010a*/ 62, - /*0xab8a*/ 1168, + /*0x1040a*/ 1273, /*0x2c88*/ 977, - /*0x1ff3*/ 855, - /*0x018a*/ 127, - /*0x038a*/ 237, - -1, - /*0x2ced*/ 1024, - /*0x2c0a*/ 921, - -1, - /*0x10400*/ 1260, + /*0xab8a*/ 1171, /*0x1f80*/ 767, /*0x0400*/ 297, - /*0x0200*/ 190, /*0x0100*/ 57, - /*0xab80*/ 1158, - /*0x1fe3*/ 845, - /*0x1e88*/ 653, - /*0x10403*/ 1263, - /*0x1f83*/ 770, - /*0x0403*/ 300, - /*0x2c8a*/ 978, - /*0x2c00*/ 911, - /*0xab83*/ 1161, - /*0x1c88*/ 538, - /*0x10c88*/ 1344, - /*0x2183*/ 884, - /*0x2c63*/ 960, - /*0x1e908*/ 1459, - /*0x2c6f*/ 967, - /*0x2c03*/ 914, - /*0x10c89*/ 1345, - -1, -1, - /*0x1e909*/ 1460, - /*0x2c80*/ 973, + /*0x10400*/ 1263, + /*0x2c0a*/ 921, + /*0xab80*/ 1161, /*0x1e8a*/ 654, - /*0x10418*/ 1284, + /*0x1e0a*/ 590, + /*0x10c88*/ 1347, + /*0x00df*/ 56, + /*0x2c00*/ 911, + /*0x1ff3*/ 855, + /*0x1e80*/ 649, + /*0x1e00*/ 585, + /*0x10c89*/ 1348, + /*0x2c8a*/ 978, + -1, /*0x1f98*/ 791, /*0x0418*/ 321, - /*0x0218*/ 202, /*0x0118*/ 69, - /*0xab98*/ 1182, + /*0x10418*/ 1287, + /*0x2c80*/ 973, + /*0xab98*/ 1185, + /*0x03f9*/ 292, -1, - /*0x10c8a*/ 1346, - /*0x0198*/ 137, - /*0x0398*/ 249, - /*0x1e90a*/ 1461, - /*0xa780*/ 1105, + /*0x10c8a*/ 1349, + /*0x0388*/ 235, /*0x2c18*/ 935, - /*0x1e80*/ 649, - /*0x10416*/ 1282, + /*0xa780*/ 1105, + /*0x1e98*/ 662, + /*0x1e18*/ 597, + /*0x10c80*/ 1339, + /*0x0389*/ 236, + /*0x03f1*/ 288, + /*0x1f9a*/ 793, + /*0x041a*/ 323, + /*0x011a*/ 70, + /*0x1041a*/ 1289, + /*0x2c98*/ 985, + /*0xab9a*/ 1187, + /*0x1fe7*/ 848, + -1, + /*0x2c6f*/ 967, + /*0x038a*/ 237, + /*0x2c1a*/ 937, + /*0xa798*/ 1114, + /*0x1e9a*/ 664, + /*0x1e1a*/ 598, + /*0x10c98*/ 1363, + /*0x1fe3*/ 845, + /*0x2c67*/ 962, /*0x1f96*/ 789, /*0x0416*/ 319, - /*0x0216*/ 201, /*0x0116*/ 68, - /*0xab96*/ 1180, - /*0x1c80*/ 530, - /*0x10c80*/ 1336, - /*0x0196*/ 135, - /*0x0396*/ 247, - /*0x1e900*/ 1451, - /*0x2c98*/ 985, - /*0x2c16*/ 933, - -1, - /*0x1c83*/ 533, - /*0x10c83*/ 1339, - /*0x1fc7*/ 830, - -1, - /*0x1e903*/ 1454, - /*0x0147*/ 91, - /*0x0047*/ 6, + /*0x10416*/ 1285, + /*0x2c9a*/ 986, + /*0xab96*/ 1183, -1, -1, - /*0x01c7*/ 159, - /*0xa798*/ 1114, - /*0x2c96*/ 984, - /*0x1e98*/ 662, - /*0x10406*/ 1266, - /*0x1f86*/ 773, - /*0x0406*/ 303, - /*0x0206*/ 193, - /*0x0106*/ 60, - /*0xab86*/ 1164, - /*0x1c98*/ 547, - /*0x10c98*/ 1360, - /*0x0186*/ 124, - /*0x0386*/ 234, - /*0x1e918*/ 1475, - /*0xa796*/ 1113, - /*0x2c06*/ 917, + /*0x2c63*/ 960, + /*0x1ff7*/ 858, + /*0x2c16*/ 933, + /*0xa79a*/ 1115, /*0x1e96*/ 660, - /*0x10427*/ 1299, - /*0x1fa7*/ 806, - /*0x0427*/ 336, - -1, -1, - /*0xaba7*/ 1197, - /*0x1c96*/ 545, - /*0x10c96*/ 1358, - /*0x01a7*/ 145, - /*0x03a7*/ 263, - /*0x1e916*/ 1473, - /*0x2c86*/ 976, - /*0x2c27*/ 950, - /*0x10414*/ 1280, - /*0x1f94*/ 787, - /*0x0414*/ 317, - /*0x0214*/ 200, - /*0x0114*/ 67, - /*0xab94*/ 1178, - -1, -1, - /*0x0194*/ 134, - /*0x0394*/ 245, + /*0x1e16*/ 596, + /*0x10c9a*/ 1365, + /*0x0398*/ 249, -1, - /*0xa786*/ 1108, - /*0x2c14*/ 931, - /*0x1e86*/ 652, - /*0x10410*/ 1276, /*0x1f90*/ 783, /*0x0410*/ 313, - /*0x0210*/ 198, /*0x0110*/ 65, - /*0xab90*/ 1174, - /*0x1c86*/ 536, - /*0x10c86*/ 1342, - /*0x0190*/ 131, - /*0x0390*/ 241, - /*0x1e906*/ 1457, - /*0x2c94*/ 983, - /*0x2c10*/ 927, - -1, - /*0x03f5*/ 290, - /*0xfb00*/ 1222, - -1, - /*0x2c75*/ 970, + /*0x10410*/ 1279, + /*0x2c96*/ 984, + /*0xab90*/ 1177, -1, -1, - /*0x1ca7*/ 562, - /*0x10ca7*/ 1375, + /*0x00dd*/ 54, -1, - /*0xfb03*/ 1225, + /*0x2c10*/ 927, + /*0xa796*/ 1113, + /*0x1e90*/ 657, + /*0x1e10*/ 593, + /*0x10c96*/ 1361, + /*0x039a*/ 251, -1, + /*0x1f86*/ 773, + /*0x0406*/ 303, + /*0x0106*/ 60, + /*0x10406*/ 1269, /*0x2c90*/ 981, - /*0x1e94*/ 659, - /*0x10404*/ 1264, - /*0x1f84*/ 771, - /*0x0404*/ 301, - /*0x0204*/ 192, - /*0x0104*/ 59, - /*0xab84*/ 1162, - /*0x1c94*/ 543, - /*0x10c94*/ 1356, - /*0x0184*/ 123, - -1, - /*0x1e914*/ 1471, + /*0xab86*/ 1167, + -1, -1, -1, -1, + /*0x2c06*/ 917, /*0xa790*/ 1111, - /*0x2c04*/ 915, - /*0x1e90*/ 657, - /*0x10402*/ 1262, - /*0x1f82*/ 769, - /*0x0402*/ 299, - /*0x0202*/ 191, - /*0x0102*/ 58, - /*0xab82*/ 1160, - /*0x1c90*/ 539, - /*0x10c90*/ 1352, - /*0x0182*/ 122, + /*0x1e86*/ 652, + /*0x1e06*/ 588, + /*0x10c90*/ 1355, + /*0x0396*/ 247, -1, - /*0x1e910*/ 1467, - /*0x2c84*/ 975, - /*0x2c02*/ 913, - /*0x017f*/ 120, + /*0x1f92*/ 785, + /*0x0412*/ 315, + /*0x0112*/ 66, + /*0x10412*/ 1281, + /*0x2c86*/ 976, + /*0xab92*/ 1179, -1, - /*0xfb16*/ 1232, - -1, -1, - /*0x03ff*/ 296, - /*0x01f1*/ 181, - /*0x03f1*/ 288, - /*0x2c7f*/ 972, - -1, -1, - /*0xa784*/ 1107, - /*0x2c82*/ 974, - /*0x1e84*/ 651, - /*0x10420*/ 1292, + /*0x03f7*/ 291, + /*0x2c75*/ 970, + -1, + /*0x2c12*/ 929, + /*0xa786*/ 1108, + /*0x1e92*/ 658, + /*0x1e12*/ 594, + /*0x10c86*/ 1345, + /*0x0390*/ 241, + /*0x0508*/ 425, /*0x1fa0*/ 799, /*0x0420*/ 329, - /*0x0220*/ 206, /*0x0120*/ 73, - /*0xaba0*/ 1190, - /*0x1c84*/ 534, - /*0x10c84*/ 1340, - /*0x01a0*/ 141, - /*0x03a0*/ 257, - /*0x1e904*/ 1455, - /*0xa782*/ 1106, + /*0x10420*/ 1295, + /*0x2c92*/ 982, + /*0xaba0*/ 1193, + -1, -1, -1, + /*0xa7f5*/ 1144, /*0x2c20*/ 943, - /*0x1e82*/ 650, - /*0x1ff9*/ 860, - /*0xfb06*/ 1228, - -1, - /*0x0179*/ 117, - -1, - /*0x1fd7*/ 839, - /*0x1c82*/ 532, - /*0x10c82*/ 1338, - /*0x03f9*/ 292, - /*0x0057*/ 21, - /*0x1e902*/ 1453, + /*0xa792*/ 1112, + /*0x1ea0*/ 667, + /*0x1e20*/ 601, + /*0x10c92*/ 1357, + /*0x0386*/ 234, + /*0x050a*/ 426, + -1, -1, -1, -1, /*0x2ca0*/ 989, - /*0x01d7*/ 168, - /*0x10426*/ 1298, + /*0x0500*/ 421, + -1, -1, -1, -1, -1, + /*0xa7a0*/ 1118, + /*0x017f*/ 120, + /*0x03f5*/ 290, + /*0x10ca0*/ 1371, + /*0x0392*/ 243, /*0x1fa6*/ 805, /*0x0426*/ 335, - /*0x0226*/ 209, /*0x0126*/ 76, - /*0xaba6*/ 1196, - -1, -1, - /*0x01a6*/ 144, - /*0x03a6*/ 262, - -1, - /*0xa7a0*/ 1118, + /*0x10426*/ 1301, + /*0x2c7f*/ 972, + /*0xaba6*/ 1199, + /*0x0518*/ 433, + -1, -1, -1, /*0x2c26*/ 949, - /*0x1ea0*/ 667, - /*0x13f9*/ 525, - /*0xfb14*/ 1230, - -1, -1, - /*0x1e08*/ 589, -1, - /*0x1ca0*/ 555, - /*0x10ca0*/ 1368, + /*0x1ea6*/ 670, + /*0x1e26*/ 604, + /*0x1c88*/ 538, -1, - /*0x1ffb*/ 862, - /*0x1e920*/ 1483, - /*0x2ca6*/ 992, - /*0x017b*/ 118, - /*0x10424*/ 1296, + /*0x03a0*/ 257, /*0x1fa4*/ 803, /*0x0424*/ 333, - /*0x0224*/ 208, /*0x0124*/ 75, - /*0xaba4*/ 1194, - -1, -1, - /*0x01a4*/ 143, - /*0x03a4*/ 260, - /*0x1e0a*/ 590, - /*0xa7a6*/ 1121, + /*0x10424*/ 1299, + /*0x2ca6*/ 992, + /*0xaba4*/ 1197, + /*0x051a*/ 434, + /*0x0208*/ 194, + /*0x1feb*/ 852, + -1, /*0x2c24*/ 947, - /*0x1ea6*/ 670, + /*0xa7a6*/ 1121, + /*0x1ea4*/ 669, + /*0x1e24*/ 603, + /*0x10ca6*/ 1377, + -1, -1, -1, + /*0x2c6b*/ 964, + -1, + /*0x1c80*/ 530, + /*0x2ca4*/ 991, + /*0x2c6d*/ 965, + /*0x0516*/ 432, + /*0x020a*/ 195, + -1, + /*0x03ff*/ 296, + -1, + /*0xa7a4*/ 1120, + /*0x2ceb*/ 1023, + /*0x0200*/ 190, + /*0x10ca4*/ 1375, + /*0x03a6*/ 262, + /*0x2ced*/ 1024, + -1, -1, -1, + /*0x1c98*/ 547, + /*0x1f83*/ 770, + /*0x0403*/ 300, + /*0x0510*/ 429, + /*0x10403*/ 1266, + /*0x2183*/ 884, + /*0xab83*/ 1164, + -1, -1, -1, + /*0x0218*/ 202, + /*0x2c03*/ 914, + /*0x03a4*/ 260, + -1, -1, -1, -1, + /*0x1c9a*/ 549, + -1, -1, + /*0x0506*/ 424, + -1, /*0x037f*/ 233, - -1, -1, -1, -1, -1, - /*0x1ca6*/ 561, - /*0x10ca6*/ 1374, + -1, -1, -1, -1, + /*0x021a*/ 203, + /*0x1f9e*/ 797, + /*0x041e*/ 327, + /*0x011e*/ 72, + /*0x1041e*/ 1293, + /*0x10c83*/ 1342, + /*0xab9e*/ 1191, + /*0x1c96*/ 545, + -1, -1, + /*0x0512*/ 430, + /*0x2c1e*/ 941, + /*0x10a0*/ 484, + /*0x1e9e*/ 666, + /*0x1e1e*/ 600, + -1, -1, + /*0x0216*/ 201, + /*0x1f94*/ 787, + /*0x0414*/ 317, + /*0x0114*/ 67, + /*0x10414*/ 1283, + /*0x2c9e*/ 988, + /*0xab94*/ 1181, + /*0x1c90*/ 539, + /*0x1fd7*/ 839, + /*0x0057*/ 21, + /*0x0520*/ 437, + /*0x2c14*/ 931, + /*0xa79e*/ 1117, + /*0x1e94*/ 659, + /*0x1e14*/ 595, + /*0x10c9e*/ 1369, + -1, + /*0x0210*/ 198, + -1, + /*0x1e908*/ 1462, + -1, -1, + /*0x2c94*/ 983, /*0x1f08*/ 715, - /*0x13fb*/ 527, - /*0x1e00*/ 585, - /*0x2ca4*/ 991, - /*0x0508*/ 425, - /*0x1f6d*/ 764, + /*0x1c86*/ 536, + /*0x1e909*/ 1463, + /*0x2165*/ 873, + /*0x1f69*/ 760, + /*0x10a6*/ 490, /*0x1f09*/ 716, - /*0xfb04*/ 1226, - /*0x1041a*/ 1286, - /*0x1f9a*/ 793, - /*0x041a*/ 323, - /*0x021a*/ 203, - /*0x011a*/ 70, - /*0xab9a*/ 1184, + /*0x2169*/ 877, + /*0x048a*/ 362, + /*0x10c94*/ 1359, + /*0x039e*/ 255, + /*0x0206*/ 193, + /*0x2161*/ 869, + /*0x1e90a*/ 1464, + /*0x0480*/ 361, -1, -1, - /*0xa7a4*/ 1120, - /*0x039a*/ 251, - /*0x1ea4*/ 669, /*0x1f0a*/ 717, - /*0x2c1a*/ 937, - /*0xfb02*/ 1224, - /*0x048a*/ 362, - /*0x050a*/ 426, + /*0x1c92*/ 541, + /*0x1e900*/ 1454, + /*0x0526*/ 440, -1, - /*0x1ca4*/ 559, - /*0x10ca4*/ 1372, - /*0x017d*/ 119, - /*0x10c7*/ 522, - /*0x1e18*/ 597, + /*0x10a4*/ 488, + -1, -1, -1, + /*0x1f5f*/ 758, + /*0x0394*/ 245, + /*0x0212*/ 199, -1, -1, - /*0x03fd*/ 294, - /*0x2c9a*/ 986, + /*0x0498*/ 369, + /*0x1ffb*/ 862, + -1, + /*0x017b*/ 118, + /*0x1ca0*/ 555, + /*0x1e918*/ 1478, + /*0x0524*/ 439, -1, -1, - /*0x0480*/ 361, - /*0x0500*/ 421, - /*0x1fd3*/ 837, + /*0x1f18*/ 723, + /*0x1f9c*/ 795, + /*0x041c*/ 325, + /*0x011c*/ 71, + /*0x1041c*/ 1291, + /*0x0220*/ 206, + /*0xab9c*/ 1189, + /*0x017d*/ 119, + /*0x049a*/ 370, + -1, + /*0x13fb*/ 527, + /*0x2c1c*/ 939, -1, + /*0x1e91a*/ 1480, + /*0x1e1c*/ 599, /*0x1f6f*/ 766, - /*0x1feb*/ 852, - /*0x0053*/ 17, - /*0x1e16*/ 596, -1, - /*0x01d3*/ 166, - /*0xa79a*/ 1115, + /*0x1f1a*/ 725, + /*0x216f*/ 883, + -1, -1, -1, + /*0x2c9c*/ 987, + /*0x13fd*/ 529, -1, - /*0x1e9a*/ 664, + /*0x0496*/ 368, + /*0x2167*/ 875, + -1, + /*0x1ca6*/ 561, + /*0xa79c*/ 1116, + /*0x1e916*/ 1476, + /*0x1fdb*/ 843, + /*0x10c9c*/ 1367, -1, -1, - /*0x13fd*/ 529, - /*0x2c6b*/ 964, + /*0x2163*/ 871, -1, - /*0x10a7*/ 491, - /*0x1c9a*/ 549, - /*0x10c9a*/ 1362, + /*0x00db*/ 52, + /*0x0226*/ 209, + /*0x1faa*/ 809, + /*0x042a*/ 339, + /*0x012a*/ 78, + /*0x0490*/ 365, -1, - /*0x00df*/ 56, - /*0x1e91a*/ 1477, - /*0x1f18*/ 723, - /*0x1ff7*/ 858, + /*0xabaa*/ 1203, + /*0x1ca4*/ 559, -1, - /*0x0498*/ 369, - /*0x0518*/ 433, - /*0x2ceb*/ 1023, + /*0x1e910*/ 1470, + -1, + /*0x2c2a*/ 953, + /*0x039c*/ 253, + /*0x1eaa*/ 672, + /*0x1e2a*/ 606, + /*0x1f5d*/ 757, + /*0x03fd*/ 294, + /*0x0224*/ 208, + /*0x1f8e*/ 781, + /*0x040e*/ 311, + /*0x010e*/ 64, + /*0x1040e*/ 1277, + /*0x2caa*/ 994, + /*0xab8e*/ 1175, + /*0x051e*/ 436, + -1, + /*0x1e906*/ 1460, + -1, + /*0x2c0e*/ 925, + /*0xa7aa*/ 1123, + /*0x1e8e*/ 656, + /*0x1e0e*/ 592, + /*0x10caa*/ 1381, + -1, -1, -1, -1, -1, + /*0x0492*/ 366, + /*0x2c8e*/ 980, + -1, + /*0x0514*/ 431, + -1, + /*0x1e912*/ 1472, + -1, + /*0x1c83*/ 533, + -1, + /*0x0189*/ 126, + /*0x01f1*/ 181, + /*0x10c8e*/ 1353, + /*0x03aa*/ 266, + -1, + /*0x1faf*/ 814, + /*0x042f*/ 344, + /*0xa779*/ 1101, + /*0x04a0*/ 373, + -1, + /*0xabaf*/ 1208, + /*0x018a*/ 127, + -1, + /*0x1e920*/ 1486, + -1, -1, + /*0x1f84*/ 771, + /*0x0404*/ 301, + /*0x0104*/ 59, + /*0x10404*/ 1267, + /*0x038e*/ 239, + /*0xab84*/ 1165, + -1, -1, -1, + /*0x1c9e*/ 553, + /*0x2c04*/ 915, + -1, + /*0x1e84*/ 651, + /*0x1e04*/ 587, + -1, -1, -1, -1, + /*0x0198*/ 137, + /*0x021e*/ 205, + /*0x10caf*/ 1386, + /*0x2c84*/ 975, + /*0x1fae*/ 813, + /*0x042e*/ 343, + /*0x012e*/ 80, + /*0x04a6*/ 376, + /*0x1c94*/ 543, + /*0xabae*/ 1207, + /*0xa784*/ 1107, -1, -1, + /*0x10c84*/ 1343, + /*0x2c2e*/ 957, + -1, + /*0x1eae*/ 674, + /*0x1e2e*/ 608, + /*0x0214*/ 200, + /*0x2126*/ 864, + -1, -1, -1, + /*0x051c*/ 435, + /*0x04a4*/ 375, + /*0x2cae*/ 996, + /*0x1f82*/ 769, + /*0x0402*/ 299, + /*0x0102*/ 58, + /*0x10402*/ 1265, + -1, + /*0xab82*/ 1163, + /*0xa7ae*/ 1127, + -1, + /*0x0196*/ 135, + /*0x10cae*/ 1385, + /*0x2c02*/ 913, + -1, + /*0x1e82*/ 650, + /*0x1e02*/ 586, + -1, + /*0x1f6b*/ 762, + -1, /*0x01f7*/ 185, - /*0x03f7*/ 291, - /*0x1e06*/ 588, - /*0x1f5f*/ 758, + /*0x216b*/ 879, + /*0x1f6d*/ 764, + /*0x10aa*/ 494, + /*0x2c82*/ 974, + /*0x216d*/ 881, + -1, -1, + /*0x0190*/ 131, + /*0x1fd9*/ 841, + /*0x0059*/ 23, + /*0xa782*/ 1106, + -1, -1, + /*0x10c82*/ 1341, + /*0x00d9*/ 50, + /*0x1fa7*/ 806, + /*0x0427*/ 336, + /*0x052a*/ 442, + /*0x10427*/ 1302, -1, - /*0x00dd*/ 54, + /*0xaba7*/ 1200, -1, -1, - /*0x00c7*/ 33, - /*0x0496*/ 368, - /*0x0516*/ 432, - /*0x10412*/ 1278, - /*0x1f92*/ 785, - /*0x0412*/ 315, - /*0x0212*/ 199, - /*0x0112*/ 66, - /*0xab92*/ 1176, - /*0x24c7*/ 902, - /*0x1f5d*/ 757, + /*0x1e903*/ 1457, + /*0x0186*/ 124, + /*0x2c27*/ 950, + -1, + /*0x1c9c*/ 551, + /*0x1fa2*/ 801, + /*0x0422*/ 331, + /*0x0122*/ 74, + /*0x10422*/ 1297, + -1, + /*0xaba2*/ 1195, + /*0x050e*/ 428, + -1, -1, + /*0x021c*/ 204, + /*0x2c22*/ 945, + -1, + /*0x1ea2*/ 668, + /*0x1e22*/ 602, + /*0x1fac*/ 811, + /*0x042c*/ 341, + /*0x012c*/ 79, + /*0x049e*/ 372, + /*0x10ca7*/ 1378, + /*0xabac*/ 1205, + /*0xfb00*/ 1225, + /*0x2ca2*/ 990, + /*0x1e91e*/ 1484, + -1, + /*0x2c2c*/ 955, + /*0x10af*/ 499, + /*0x1eac*/ 673, + /*0x1e2c*/ 607, + /*0xa7a2*/ 1119, + -1, + /*0x01a0*/ 141, + /*0x10ca2*/ 1373, + -1, -1, + /*0x0494*/ 367, + /*0x2cac*/ 995, + /*0x03a7*/ 263, + /*0x1caa*/ 565, -1, - /*0x0392*/ 243, + /*0x1e914*/ 1474, -1, - /*0x104c7*/ 1323, - /*0x2c12*/ 929, - /*0x04c7*/ 393, - /*0x0547*/ 467, - -1, -1, /*0x1fb2*/ 815, - /*0x1e14*/ 595, - /*0x0232*/ 215, + /*0xa7ac*/ 1125, /*0x0132*/ 81, - /*0xabb2*/ 1208, - -1, -1, - /*0x01b2*/ 151, - /*0x2c92*/ 982, - /*0x0506*/ 424, - -1, -1, -1, -1, -1, - /*0x1e10*/ 593, - -1, -1, -1, -1, -1, - /*0xa792*/ 1112, - -1, - /*0x1e92*/ 658, - /*0x2cb2*/ 998, - /*0x1faf*/ 814, - /*0x042f*/ 344, - -1, -1, - /*0xabaf*/ 1205, - /*0x1c92*/ 541, - /*0x10c92*/ 1354, - /*0x01af*/ 149, -1, - /*0x1e912*/ 1469, - /*0x0494*/ 367, - /*0x0514*/ 431, - /*0xa7b2*/ 1130, + /*0x10cac*/ 1383, + /*0xabb2*/ 1211, + /*0x022a*/ 211, + -1, -1, -1, + /*0x0504*/ 423, -1, /*0x1eb2*/ 676, + /*0x1e32*/ 610, + /*0x1fa8*/ 807, + /*0x0428*/ 337, + /*0x0128*/ 77, + /*0x10ae*/ 498, -1, - /*0x1fe9*/ 850, - /*0x1e04*/ 587, - -1, -1, -1, - /*0x1cb2*/ 573, - /*0x10cb2*/ 1386, + /*0xaba8*/ 1201, -1, - /*0x0490*/ 365, - /*0x0510*/ 429, + /*0x2cb2*/ 998, + /*0x01a6*/ 144, + /*0x020e*/ 197, + /*0x2c28*/ 951, -1, - /*0x2c69*/ 963, - /*0x10a0*/ 484, - -1, -1, - /*0x1e02*/ 586, - /*0x1041c*/ 1288, - /*0x1f9c*/ 795, - /*0x041c*/ 325, - /*0x021c*/ 204, - /*0x011c*/ 71, - /*0xab9c*/ 1186, + /*0x1ea8*/ 671, + /*0x1e28*/ 605, + /*0xa7b2*/ 1130, + -1, + /*0xfb16*/ 1235, + /*0x10cb2*/ 1389, + /*0x052e*/ 444, + -1, + /*0x118a0*/ 1390, + /*0x2ca8*/ 993, -1, -1, - /*0x019c*/ 138, - /*0x039c*/ 253, + /*0xa726*/ 1065, + /*0x01a4*/ 143, -1, -1, - /*0x2c1c*/ 939, + /*0xa7a8*/ 1122, + /*0xff26*/ 1242, + -1, + /*0x10ca8*/ 1379, -1, /*0x1caf*/ 570, - /*0x10caf*/ 1383, - -1, -1, -1, -1, - /*0x0504*/ 423, - -1, -1, - /*0x10a6*/ 490, + -1, -1, -1, -1, -1, -1, + /*0x0502*/ 422, + /*0xa724*/ 1064, + /*0x049c*/ 371, -1, - /*0x2c9c*/ 987, - /*0x1e20*/ 601, - /*0x1041e*/ 1290, - /*0x1f9e*/ 797, - /*0x041e*/ 327, - /*0x021e*/ 205, - /*0x011e*/ 72, - /*0xab9e*/ 1188, + /*0x1c84*/ 534, -1, - /*0x0502*/ 422, - /*0x0470*/ 353, - /*0x039e*/ 255, - /*0x0170*/ 112, - /*0xa79c*/ 1116, - /*0x2c1e*/ 941, + /*0xff24*/ 1240, + /*0x1e91c*/ 1482, -1, - /*0x01f0*/ 180, - /*0x03f0*/ 287, - -1, -1, - /*0x2c70*/ 968, + /*0x03a8*/ 264, + /*0xfb06*/ 1231, + /*0x1f1c*/ 727, -1, - /*0x1c9c*/ 551, - /*0x10c9c*/ 1364, + /*0x118a6*/ 1396, + /*0x0204*/ 192, -1, - /*0x10a4*/ 488, - /*0x1e91c*/ 1479, - /*0x2c9e*/ 988, - /*0x1e26*/ 604, - /*0x10422*/ 1294, - /*0x1fa2*/ 801, - /*0x0422*/ 331, - /*0x0222*/ 207, - /*0x0122*/ 74, - /*0xaba2*/ 1192, - /*0x04a0*/ 373, - /*0x0520*/ 437, - /*0x01a2*/ 142, - -1, -1, - /*0xa79e*/ 1117, - /*0x2c22*/ 945, - /*0x1e9e*/ 666, - /*0x118a7*/ 1394, - -1, -1, -1, -1, - /*0x1ef0*/ 707, - /*0x1c9e*/ 553, - /*0x10c9e*/ 1366, + /*0x1fb8*/ 820, + -1, + /*0x10a7*/ 491, -1, -1, - /*0x1e91e*/ 1481, - /*0x2ca2*/ 990, - /*0x1e24*/ 603, - /*0x1040e*/ 1274, - /*0x1f8e*/ 781, - /*0x040e*/ 311, - /*0x020e*/ 197, - /*0x010e*/ 64, - /*0xab8e*/ 1172, - /*0x04a6*/ 376, - /*0x0526*/ 440, - /*0x018e*/ 129, - /*0x038e*/ 239, - /*0xff27*/ 1240, - /*0xa7a2*/ 1119, - /*0x2c0e*/ 925, - /*0x1ea2*/ 668, + /*0xabb8*/ 1217, + /*0x1f8c*/ 779, + /*0x040c*/ 309, + /*0x010c*/ 63, + /*0x1040c*/ 1275, + /*0x1cae*/ 569, + /*0xab8c*/ 1173, + /*0x1eb8*/ 679, + /*0x1e38*/ 613, + /*0x118a4*/ 1394, + /*0x10a2*/ 486, + /*0x2c0c*/ 923, -1, - /*0x1faa*/ 809, - /*0x042a*/ 339, - /*0x022a*/ 211, - /*0x012a*/ 78, - /*0xabaa*/ 1200, - /*0x1ca2*/ 557, - /*0x10ca2*/ 1370, + /*0x1e8c*/ 655, + /*0x1e0c*/ 591, + /*0x022e*/ 213, + /*0x2cb8*/ 1001, + /*0x1ffc*/ 863, + /*0x047c*/ 359, + /*0x04aa*/ 378, + /*0x1f5b*/ 756, + /*0x1fba*/ 822, + /*0x2c8c*/ 979, + /*0xa7b8*/ 1134, + /*0x10ac*/ 496, + /*0x0522*/ 438, + /*0xabba*/ 1219, + /*0x1c82*/ 532, + /*0x1f2a*/ 731, + /*0x1efc*/ 713, + /*0x1e7c*/ 647, + /*0x212a*/ 865, + /*0x10c8c*/ 1351, + /*0x1eba*/ 680, + /*0x1e3a*/ 614, + /*0x13fc*/ 528, + /*0x048e*/ 364, + /*0x0202*/ 191, -1, - /*0x03aa*/ 266, + /*0x052c*/ 443, -1, - /*0x2c8e*/ 980, - /*0x2c2a*/ 953, + /*0x1e90e*/ 1468, + /*0x2cba*/ 1002, -1, -1, - /*0x1e1a*/ 598, + /*0x1f0e*/ 721, + /*0x0194*/ 134, + -1, -1, + /*0xa7ba*/ 1135, + /*0x038c*/ 238, + /*0x10b2*/ 502, + /*0x0130*/ 1489, + /*0x01d7*/ 168, + -1, + /*0xabb0*/ 1209, + /*0x1fbe*/ 825, -1, -1, -1, - /*0x04a4*/ 375, - /*0x0524*/ 439, + /*0x1ca7*/ 562, + /*0xabbe*/ 1223, + /*0x1eb0*/ 675, + /*0x1e30*/ 609, + -1, + /*0x10a8*/ 492, + /*0x0532*/ 446, + -1, + /*0x1ebe*/ 682, + /*0x1e3e*/ 616, + -1, + /*0x2cb0*/ 997, + -1, + /*0x1ca2*/ 557, -1, -1, -1, - /*0x0370*/ 230, - /*0x2caa*/ 994, - /*0x1e8e*/ 656, + /*0x2cbe*/ 1004, + /*0xa7b0*/ 1128, + /*0x1f2f*/ 736, + /*0x0528*/ 441, + /*0x10cb0*/ 1387, -1, - /*0x1fae*/ 813, - /*0x042e*/ 343, - /*0x022e*/ 213, - /*0x012e*/ 80, - /*0xabae*/ 1204, + /*0x0222*/ 207, + /*0xa7be*/ 1137, -1, - /*0x10c8e*/ 1350, - /*0x01ae*/ 148, + /*0x1e904*/ 1458, + /*0x1cac*/ 567, -1, - /*0x1e90e*/ 1465, - /*0xa7aa*/ 1123, - /*0x2c2e*/ 957, - /*0x1eaa*/ 672, - -1, -1, -1, -1, -1, - /*0x1f1a*/ 725, - /*0x1caa*/ 565, - /*0x10caa*/ 1378, - /*0x049a*/ 370, - /*0x051a*/ 434, + /*0x1fb6*/ 818, -1, - /*0x2cae*/ 996, - /*0x1fac*/ 811, - /*0x042c*/ 341, - /*0x022c*/ 212, - /*0x012c*/ 79, - /*0xabac*/ 1202, + /*0x0136*/ 83, -1, -1, - /*0x01ac*/ 147, - /*0x2165*/ 873, - /*0x00d3*/ 45, - /*0x2167*/ 875, - /*0x2c2c*/ 955, - /*0xa7ae*/ 1127, - /*0x2161*/ 869, - /*0x1eae*/ 674, - /*0x118a0*/ 1387, - /*0x1fba*/ 822, - /*0x216d*/ 881, - /*0x023a*/ 216, - /*0x10b2*/ 502, - /*0xabba*/ 1216, - /*0x1cae*/ 569, - /*0x10cae*/ 1382, - /*0x104d3*/ 1335, - /*0x2cac*/ 995, - /*0x1f6b*/ 762, - /*0x0553*/ 479, - /*0x1fa8*/ 807, - /*0x0428*/ 337, - /*0x0228*/ 210, - /*0x0128*/ 77, - /*0xaba8*/ 1198, - -1, - /*0x1e12*/ 594, + /*0xabb6*/ 1215, + /*0x1f8d*/ 780, + /*0x040d*/ 310, + /*0x022c*/ 212, + /*0x1040d*/ 1276, + /*0x03b0*/ 268, + /*0xab8d*/ 1174, + /*0x1eb6*/ 678, + /*0x1e36*/ 612, + /*0x04ae*/ 380, -1, - /*0x03a8*/ 264, + /*0x2c0d*/ 924, + -1, -1, -1, + /*0x019c*/ 138, + /*0x2cb6*/ 1000, + /*0xfb03*/ 1228, + /*0x1f2e*/ 735, -1, - /*0xa7ac*/ 1125, - /*0x2c28*/ 951, - /*0x1eac*/ 673, - /*0x2cba*/ 1002, + /*0x1cb2*/ 573, -1, - /*0x118a6*/ 1393, + /*0xa77b*/ 1102, + /*0xa7b6*/ 1133, + -1, -1, + /*0x1fb4*/ 817, + /*0x10b8*/ 508, + /*0x0134*/ 82, + /*0xa78d*/ 1110, + /*0x0232*/ 215, + /*0xabb4*/ 1213, + /*0x10c8d*/ 1352, -1, - /*0x10af*/ 499, + /*0x1ca8*/ 563, + /*0xa77d*/ 1103, + /*0x1e902*/ 1456, -1, - /*0x1cac*/ 567, - /*0x10cac*/ 1380, + /*0x1eb4*/ 677, + /*0x1e34*/ 611, + -1, -1, + /*0x0538*/ 452, -1, - /*0x1e32*/ 610, - /*0x2163*/ 871, - /*0x2ca8*/ 993, - /*0x216f*/ 883, - /*0xa7ba*/ 1135, + /*0x0228*/ 210, + /*0x01db*/ 170, -1, - /*0x1eba*/ 680, - /*0x1fb8*/ 820, + /*0x2cb4*/ 999, + /*0x050c*/ 427, -1, -1, -1, - /*0xabb8*/ 1214, - -1, - /*0x1cba*/ 581, - /*0x01b8*/ 155, - /*0xa7a8*/ 1122, - /*0xff26*/ 1239, - /*0x1ea8*/ 671, - /*0x0492*/ 366, - /*0x0512*/ 430, - /*0x118a4*/ 1391, - -1, -1, - /*0x1fb6*/ 818, - /*0x1ca8*/ 563, - /*0x10ca8*/ 1376, - /*0x0136*/ 83, - /*0xabb6*/ 1212, - -1, -1, + /*0x1fbc*/ 824, + /*0x10ba*/ 510, + /*0xa7b4*/ 1132, /*0xa688*/ 1053, - /*0x2cb8*/ 1001, - /*0x104b2*/ 1302, -1, - /*0x04b2*/ 382, - /*0x0532*/ 446, - /*0x1040c*/ 1272, - /*0x1f8c*/ 779, - /*0x040c*/ 309, - /*0x020c*/ 196, - /*0x010c*/ 63, - /*0xab8c*/ 1170, + /*0xabbc*/ 1221, + -1, -1, -1, + /*0xfb14*/ 1233, + -1, -1, + /*0x1ebc*/ 681, + /*0x1e3c*/ 615, + /*0x1f59*/ 755, -1, - /*0xff24*/ 1237, - /*0xa7b8*/ 1134, - /*0x038c*/ 238, - /*0x1eb8*/ 679, - /*0x2cb6*/ 1000, - /*0x2c0c*/ 923, + /*0x053a*/ 454, + /*0xa72a*/ 1067, + /*0x018e*/ 129, + /*0x0055*/ 19, /*0xa68a*/ 1054, - -1, -1, -1, + /*0x2cbc*/ 1003, + /*0xff2a*/ 1246, + -1, + /*0x00d5*/ 47, + /*0x04a2*/ 374, + /*0xa680*/ 1049, + /*0x24b8*/ 887, + /*0xa7bc*/ 1136, + -1, + /*0x10b0*/ 500, + -1, -1, -1, -1, -1, + /*0x10be*/ 514, + -1, /*0x1cb8*/ 579, + /*0x04ac*/ 379, + -1, -1, -1, + /*0xa698*/ 1061, -1, -1, - /*0x1f2f*/ 736, + /*0x118aa*/ 1400, -1, - /*0x1e1c*/ 599, - /*0xa779*/ 1101, - /*0xa7b6*/ 1133, - /*0x2c8c*/ 979, - /*0x1eb6*/ 678, - /*0xa680*/ 1049, - /*0x0230*/ 214, - /*0x0130*/ 1486, - /*0xabb0*/ 1206, + /*0x1f2c*/ 733, -1, -1, - /*0x1cb6*/ 577, - /*0x03b0*/ 268, + /*0x053e*/ 458, + /*0x01af*/ 149, + /*0x24ba*/ 889, + /*0x020c*/ 196, + -1, -1, -1, -1, -1, + /*0xa69a*/ 1062, + -1, -1, + /*0x0184*/ 123, + /*0x1cba*/ 581, -1, - /*0x1f69*/ 760, - /*0xa726*/ 1065, - /*0x1fbc*/ 824, + /*0x04b2*/ 382, + /*0x03d5*/ 273, + /*0x104b2*/ 1305, + /*0x10b6*/ 506, + /*0x1fca*/ 833, + /*0x004a*/ 8, + /*0x014a*/ 93, + /*0xff2f*/ 1251, + /*0x023a*/ 216, -1, - /*0x1e8c*/ 655, + /*0x00ca*/ 36, + /*0xa696*/ 1060, + /*0x2132*/ 867, -1, - /*0xabbc*/ 1218, - -1, -1, - /*0x01bc*/ 156, - /*0x10a2*/ 486, + /*0x04a8*/ 377, -1, - /*0x10c8c*/ 1348, - /*0x1e1e*/ 600, - /*0x2cb0*/ 997, - /*0x1e90c*/ 1463, + /*0x1eca*/ 688, + /*0x1e4a*/ 622, + /*0x0536*/ 450, + /*0x01ae*/ 148, + -1, -1, + /*0x24be*/ 893, + /*0x1f28*/ 729, -1, - /*0x1f1c*/ 727, - /*0xa698*/ 1061, - /*0x1e70*/ 641, - /*0x049c*/ 371, - /*0x051c*/ 435, + /*0x2cca*/ 1010, -1, - /*0xa77b*/ 1102, + /*0x1cb0*/ 571, + /*0xa690*/ 1057, -1, -1, - /*0x2cbc*/ 1003, - /*0xa7b0*/ 1128, - /*0xa724*/ 1064, - /*0x1eb0*/ 675, + /*0x118af*/ 1405, + -1, + /*0x1cbe*/ 583, + /*0x10b4*/ 504, + /*0xa72e*/ 1069, + -1, + /*0x0230*/ 214, -1, -1, - /*0xa696*/ 1060, - -1, -1, -1, - /*0x1cb0*/ 571, - /*0x10cb0*/ 1384, + /*0xff2e*/ 1250, + /*0x0182*/ 122, -1, - /*0xa7bc*/ 1136, - /*0x1e22*/ 602, - /*0x1ebc*/ 681, - -1, -1, -1, -1, - /*0x1fd2*/ 836, - /*0x049e*/ 372, - /*0x051e*/ 436, - /*0x0152*/ 97, - /*0x0052*/ 16, - /*0x10aa*/ 494, - /*0x1fcc*/ 835, - /*0x04f0*/ 413, - /*0x024c*/ 227, - /*0x014c*/ 94, - /*0x004c*/ 10, + /*0x023e*/ 219, -1, - /*0x1fbe*/ 825, /*0xa686*/ 1052, - /*0x023e*/ 219, + -1, -1, -1, + /*0x0534*/ 448, + -1, -1, -1, -1, -1, + /*0x24b6*/ 885, + /*0x1ff6*/ 857, + /*0x0476*/ 356, + /*0x0176*/ 115, -1, - /*0xabbe*/ 1220, - -1, -1, - /*0x118b2*/ 1405, + /*0x10bc*/ 512, -1, - /*0x1e0e*/ 592, - /*0x1fb4*/ 817, + /*0xa692*/ 1058, -1, - /*0x2cd2*/ 1014, - /*0x0134*/ 82, - /*0xabb4*/ 1210, - /*0xa77d*/ 1103, - /*0x04a2*/ 374, - /*0x0522*/ 438, - /*0x2ccc*/ 1011, + /*0x118ae*/ 1404, -1, - /*0x10ae*/ 498, - -1, -1, - /*0x1e2a*/ 606, - /*0x2cbe*/ 1004, - -1, -1, - /*0x1ed2*/ 692, - /*0xa694*/ 1059, + /*0x1cb6*/ 577, + /*0x01d9*/ 169, + /*0x1ef6*/ 710, + /*0x1e76*/ 644, + /*0x04b8*/ 385, -1, - /*0xff32*/ 1251, + /*0x104b8*/ 1311, -1, - /*0x118af*/ 1402, - /*0x1ecc*/ 689, - /*0x2cb4*/ 999, + /*0x01a7*/ 145, + /*0x053c*/ 456, + /*0x048c*/ 363, -1, -1, - /*0xa7be*/ 1137, + /*0x1f38*/ 737, -1, - /*0x1ebe*/ 682, - /*0x1f0e*/ 721, + /*0x1e90c*/ 1466, + -1, -1, -1, + /*0x1f0c*/ 719, -1, - /*0xa690*/ 1057, - /*0x048e*/ 364, - /*0x050e*/ 428, - /*0x10ac*/ 496, - /*0x1cbe*/ 583, - /*0xa7b4*/ 1132, + /*0x01a2*/ 142, + /*0x1fc9*/ 832, + /*0x0049*/ 1488, + /*0x0149*/ 92, -1, - /*0x1eb4*/ 677, - /*0x1e2e*/ 608, - -1, -1, -1, - /*0x1f2a*/ 731, - /*0xff2f*/ 1248, + /*0x04fc*/ 419, + /*0x0555*/ 481, + /*0x00c9*/ 35, + /*0xff27*/ 1243, + /*0x04ba*/ 386, /*0x1cb4*/ 575, - /*0x04aa*/ 378, - /*0x052a*/ 442, - -1, -1, - /*0x10ba*/ 510, + /*0x104ba*/ 1313, -1, -1, - /*0x1fca*/ 833, + /*0x01ac*/ 147, -1, - /*0x024a*/ 226, - /*0x014a*/ 93, - /*0x004a*/ 8, - /*0xa684*/ 1051, - /*0x2126*/ 864, - /*0x01ca*/ 161, - /*0x10a8*/ 492, + /*0xa722*/ 1063, + -1, + /*0x1f3a*/ 739, + /*0xfb04*/ 1229, + -1, + /*0xff22*/ 1238, + -1, -1, -1, + /*0x24bc*/ 891, + -1, -1, -1, + /*0xa7c9*/ 1143, + /*0xa72c*/ 1068, + -1, + /*0x118a7*/ 1397, -1, -1, - /*0x1e2c*/ 607, - -1, -1, -1, -1, -1, - /*0x1f2e*/ 735, + /*0xff2c*/ 1248, + -1, -1, + /*0x04b0*/ 381, -1, - /*0xa682*/ 1050, - /*0x04ae*/ 380, - /*0x052e*/ 444, + /*0x104b0*/ 1303, + /*0x01b2*/ 151, + -1, -1, + /*0x04be*/ 388, + /*0x118a2*/ 1392, + /*0x104be*/ 1317, + -1, -1, -1, -1, + /*0x0376*/ 232, -1, + /*0x1f3e*/ 743, + /*0x1fc4*/ 828, + /*0x0044*/ 3, + /*0x0051*/ 15, /*0xa732*/ 1070, - /*0x2cca*/ 1010, + /*0x054a*/ 470, + /*0x118ac*/ 1402, + /*0x00c4*/ 30, + /*0x00d1*/ 43, + /*0xff32*/ 1254, + /*0xfb02*/ 1227, + -1, -1, + /*0x1ec4*/ 685, + /*0x1e44*/ 619, + /*0x1fcc*/ 835, + /*0x004c*/ 10, + /*0x014c*/ 94, + /*0xa728*/ 1066, + /*0x1ffa*/ 861, + /*0x047a*/ 358, + /*0x00cc*/ 38, + /*0x2cc4*/ 1007, + /*0xff28*/ 1244, + /*0x04b6*/ 384, -1, - /*0x1fc4*/ 828, - /*0x1e3a*/ 614, - /*0x0244*/ 222, + /*0x104b6*/ 1309, + /*0x1ecc*/ 689, + /*0x1e4c*/ 623, + /*0xa7c4*/ 1139, -1, - /*0x0044*/ 3, - /*0x004f*/ 13, + /*0x1efa*/ 712, + /*0x1e7a*/ 646, + /*0x118b2*/ 1408, -1, - /*0x01c4*/ 157, - /*0x01cf*/ 164, - /*0x03cf*/ 270, + /*0x1e90d*/ 1467, + /*0x2ccc*/ 1011, + /*0x13fa*/ 526, + -1, + /*0x1f0d*/ 720, + /*0x1fc8*/ 831, + /*0x0048*/ 7, + /*0x24ca*/ 905, -1, - /*0x10b8*/ 508, - /*0x1e28*/ 605, - /*0x1eca*/ 688, /*0x1fab*/ 810, /*0x042b*/ 340, - /*0x1f2c*/ 733, - -1, - /*0xabab*/ 1201, - /*0x04ac*/ 379, - /*0x052c*/ 443, + /*0x00c8*/ 34, + /*0x118a8*/ 1398, -1, - /*0x03ab*/ 267, + /*0xabab*/ 1204, -1, - /*0x2cc4*/ 1007, + /*0x03d1*/ 272, + /*0x1ec8*/ 687, + /*0x1e48*/ 621, /*0x2c2b*/ 954, - /*0x1fc2*/ 826, - /*0x10b6*/ 506, - /*0x24ba*/ 889, - /*0x118a2*/ 1389, - /*0x0042*/ 1, + /*0x04b4*/ 383, -1, - /*0x1f3a*/ 739, - /*0x104ba*/ 1310, - /*0x03c2*/ 269, - /*0x04ba*/ 386, - /*0x053a*/ 454, - /*0xa7c4*/ 1139, - /*0x1fc8*/ 831, - /*0x1ec4*/ 685, - /*0x0248*/ 225, - /*0x1e38*/ 613, - /*0x0048*/ 7, - /*0x1f28*/ 729, + /*0x104b4*/ 1307, + /*0x01b8*/ 155, + -1, -1, + /*0x2cc8*/ 1009, -1, - /*0x01c8*/ 160, - /*0x04a8*/ 377, - /*0x0528*/ 441, + /*0x024a*/ 226, + /*0x1fc2*/ 826, + /*0x0042*/ 1, -1, -1, - /*0x2cc2*/ 1006, + /*0x03fa*/ 293, + /*0xa64a*/ 1031, + /*0x00c2*/ 28, + /*0xa694*/ 1059, /*0xa7ab*/ 1124, - /*0xff22*/ 1235, - -1, -1, -1, -1, - /*0x1e36*/ 612, - -1, -1, - /*0x1cab*/ 566, - /*0x10cab*/ 1379, - /*0x2cc8*/ 1009, - /*0xa7c2*/ 1138, -1, + /*0xa738*/ 1073, + /*0x10cab*/ 1382, /*0x1ec2*/ 684, - /*0x10b0*/ 500, - -1, - /*0x24b8*/ 887, - /*0x216b*/ 879, - /*0x118aa*/ 1397, - /*0x1e0c*/ 591, - /*0x1f38*/ 737, - /*0x104b8*/ 1308, - -1, - /*0x04b8*/ 385, - /*0x0538*/ 452, - /*0x1ec8*/ 687, - /*0x10bc*/ 512, - /*0x1fd6*/ 838, - /*0x0150*/ 96, - /*0x0050*/ 14, - /*0x0156*/ 99, - /*0x0056*/ 20, - /*0x24b6*/ 885, - /*0x03d0*/ 271, + /*0x1e42*/ 618, -1, - /*0x03d6*/ 274, - /*0x1fdb*/ 843, - /*0x104b6*/ 1306, + /*0xff38*/ 1260, + /*0x01fc*/ 188, + /*0x04bc*/ 387, -1, - /*0x04b6*/ 384, - /*0x0536*/ 450, - /*0xff2a*/ 1243, + /*0x104bc*/ 1315, -1, - /*0x01db*/ 170, - /*0x1e30*/ 609, - /*0x118ae*/ 1401, + /*0x2cc2*/ 1006, -1, -1, -1, - /*0x2cd0*/ 1013, - /*0x1f0c*/ 719, - /*0x2cd6*/ 1016, - /*0xa69a*/ 1062, - /*0x048c*/ 363, - /*0x050c*/ 427, - -1, - /*0x1e3c*/ 615, - /*0xa722*/ 1063, - -1, -1, -1, -1, -1, -1, - /*0x1ed0*/ 691, - /*0x1fc6*/ 829, - /*0x1ed6*/ 694, - /*0x0246*/ 224, - /*0xff2e*/ 1247, - /*0x0046*/ 5, - /*0x118ac*/ 1399, - -1, - /*0x2132*/ 867, - /*0x024e*/ 228, - /*0x014e*/ 95, - /*0x004e*/ 12, - /*0x104b0*/ 1300, - /*0x1fda*/ 842, - /*0x04b0*/ 381, + /*0x0549*/ 469, + /*0x1f3c*/ 741, -1, - /*0x015a*/ 101, - /*0x005a*/ 24, - /*0x10be*/ 514, - /*0x24bc*/ 891, + /*0xa7c2*/ 1138, + /*0x03ab*/ 267, -1, - /*0x03da*/ 276, - /*0x118ba*/ 1413, - /*0x1f3c*/ 741, - /*0x104bc*/ 1312, - /*0x2cc6*/ 1008, - /*0x04bc*/ 387, - /*0x053c*/ 456, - /*0x10b4*/ 504, - /*0xff2c*/ 1245, + /*0x1fd6*/ 838, + /*0x0056*/ 20, + /*0x0156*/ 99, + -1, -1, + /*0xa73a*/ 1074, + /*0x00d6*/ 48, -1, - /*0x2cce*/ 1012, + /*0x118b8*/ 1414, -1, - /*0x118a8*/ 1395, - /*0xa72a*/ 1067, + /*0xff3a*/ 1262, -1, - /*0x1e52*/ 626, - /*0x2cda*/ 1018, - /*0xa7c6*/ 1141, + /*0x1ed6*/ 694, + /*0x1e56*/ 628, + /*0x1fd2*/ 836, + /*0x0052*/ 16, + /*0x0152*/ 97, -1, - /*0x1ec6*/ 686, + /*0x03c2*/ 269, -1, - /*0x1e4c*/ 623, + /*0x00d2*/ 44, + /*0x2cd6*/ 1016, -1, -1, - /*0xff3a*/ 1259, - /*0x1ece*/ 690, - /*0xa652*/ 1035, - /*0x1e3e*/ 616, - /*0x2169*/ 877, + /*0x1fc6*/ 829, + /*0x0046*/ 5, + /*0x1ed2*/ 692, + /*0x1e52*/ 626, -1, -1, - /*0x1eda*/ 696, - /*0xa64c*/ 1032, - /*0x00d2*/ 44, - -1, - /*0xff28*/ 1241, - -1, - /*0x1e34*/ 611, - /*0xa692*/ 1058, - /*0x00cc*/ 38, - /*0xa72e*/ 1069, - /*0x118b8*/ 1411, - -1, -1, -1, -1, - /*0x1f52*/ 752, - /*0x104d2*/ 1334, - /*0x24cc*/ 907, - /*0x04d2*/ 398, - /*0x0552*/ 478, - -1, - /*0x1f4c*/ 749, - /*0x104cc*/ 1328, - /*0x24be*/ 893, - /*0x2cc0*/ 1005, - /*0x054c*/ 472, - /*0x118b6*/ 1409, - /*0x1f3e*/ 743, - /*0x104be*/ 1314, + /*0x00c6*/ 32, + /*0x24c9*/ 904, + /*0x10c4*/ 520, -1, - /*0x04be*/ 388, - /*0x053e*/ 458, + /*0x118ba*/ 1416, + /*0x2cd2*/ 1014, + /*0x1ec6*/ 686, + /*0x1e46*/ 620, -1, - /*0xff38*/ 1257, - /*0xa72c*/ 1068, - -1, -1, -1, - /*0x104b4*/ 1304, - /*0x1ec0*/ 683, - /*0x04b4*/ 383, - /*0x0534*/ 448, - -1, -1, + /*0xff30*/ 1252, + /*0xa73e*/ 1076, /*0x1fe2*/ 844, /*0x0462*/ 346, - -1, /*0x0162*/ 105, -1, - /*0xff36*/ 1255, - /*0xa73a*/ 1074, - /*0x01e2*/ 173, - /*0x03e2*/ 280, - /*0x0154*/ 98, - /*0x0054*/ 18, - /*0x2c62*/ 959, - /*0x10c4*/ 520, - -1, -1, -1, - /*0x1e4a*/ 622, - /*0xa728*/ 1066, - -1, -1, -1, - /*0x118b0*/ 1403, - -1, -1, - /*0x2ce2*/ 1022, - -1, - /*0x10ab*/ 495, - /*0xa64a*/ 1031, - /*0x1fd8*/ 840, - -1, - /*0x2cd4*/ 1015, - /*0x0158*/ 100, - /*0x0058*/ 22, - /*0x118bc*/ 1415, - /*0x00ca*/ 36, - -1, - /*0x03d8*/ 275, + /*0x2cc6*/ 1008, -1, - /*0x10c2*/ 518, + /*0x0544*/ 464, + /*0x0551*/ 477, + /*0x03d6*/ 274, + -1, + /*0x2c62*/ 959, + /*0xa7c6*/ 1141, /*0x1ee2*/ 700, - -1, -1, - /*0x1e44*/ 619, - /*0x24ca*/ 905, - /*0xff30*/ 1249, - /*0x1ed4*/ 693, - /*0xa738*/ 1073, + /*0x1e62*/ 634, + -1, -1, -1, + /*0x104ca*/ 1329, + /*0x0050*/ 14, + /*0x0150*/ 96, + /*0x054c*/ 472, + /*0x2ce2*/ 1022, + /*0x118b0*/ 1406, + /*0x00d0*/ 42, /*0x1f4a*/ 747, - /*0x104ca*/ 1326, - -1, -1, - /*0x054a*/ 470, - /*0x2cd8*/ 1017, - /*0xa644*/ 1028, - /*0x1040d*/ 1273, - /*0x1f8d*/ 780, - /*0x040d*/ 310, - -1, -1, - /*0xab8d*/ 1171, - /*0x00c4*/ 30, - /*0x00cf*/ 41, + -1, -1, -1, + /*0x118be*/ 1420, + /*0x1ed0*/ 691, + /*0x1e50*/ 625, + -1, /*0xa736*/ 1072, + -1, + /*0x10ab*/ 495, + -1, -1, + /*0xff36*/ 1258, + /*0x2cd0*/ 1013, + /*0x004e*/ 12, + /*0x014e*/ 95, -1, -1, - /*0x212a*/ 865, - /*0x2c0d*/ 924, - /*0x1ed8*/ 695, - /*0x1e42*/ 618, /*0x24c4*/ 899, - /*0x24cf*/ 910, + /*0x00ce*/ 40, + /*0x0548*/ 468, -1, -1, -1, - /*0x104c4*/ 1320, - /*0x104cf*/ 1331, + /*0x03e2*/ 280, + /*0x1ece*/ 690, + /*0x1e4e*/ 624, + /*0x16e5f*/ 1453, + /*0xa68e*/ 1056, + /*0x10c2*/ 518, + -1, -1, + /*0x24cc*/ 907, -1, - /*0x0544*/ 464, - /*0x054f*/ 475, - /*0xa642*/ 1027, - /*0x1e48*/ 621, - -1, -1, -1, -1, -1, - /*0x00c2*/ 28, - /*0x1f2b*/ 732, + /*0x2cce*/ 1012, -1, - /*0x118be*/ 1417, - /*0x0055*/ 19, - /*0xa648*/ 1030, - /*0xa78d*/ 1110, - /*0x01d5*/ 167, - /*0x03d5*/ 273, - /*0x24c2*/ 897, - -1, -1, - /*0x00c8*/ 34, - /*0x118b4*/ 1407, - /*0x104c2*/ 1318, + /*0x118b6*/ 1412, + -1, + /*0xa734*/ 1071, + /*0x0244*/ 222, -1, - /*0x10c8d*/ 1349, + /*0x03d0*/ 271, + /*0x04f6*/ 416, + /*0xff34*/ 1256, /*0x0542*/ 462, + /*0xa644*/ 1028, + -1, -1, + /*0x01bc*/ 156, + /*0x1fda*/ 842, + /*0x005a*/ 24, + /*0x015a*/ 101, + -1, + /*0x024c*/ 227, -1, - /*0x1e90d*/ 1464, + /*0x00da*/ 51, -1, /*0x24c8*/ 903, - -1, -1, -1, - /*0x1f48*/ 745, - /*0x104c8*/ 1324, - /*0xa73c*/ 1075, -1, - /*0x0548*/ 468, - -1, -1, - /*0xa68e*/ 1056, - /*0x1e50*/ 625, + /*0xa64c*/ 1032, -1, - /*0x1e56*/ 628, - /*0xff34*/ 1253, - /*0x0245*/ 223, - /*0x0145*/ 90, - /*0x0045*/ 4, + /*0x1eda*/ 696, + /*0x1e5a*/ 630, -1, - /*0x16e5f*/ 1450, - /*0x01c5*/ 158, + /*0xa73c*/ 1075, -1, - /*0xa650*/ 1034, - /*0x1fd9*/ 841, - /*0xa656*/ 1037, - /*0x1fec*/ 853, - /*0x046c*/ 351, - /*0x0059*/ 23, - /*0x016c*/ 110, - /*0x00d0*/ 42, - /*0x01d9*/ 169, - /*0x00d6*/ 48, - /*0x01ec*/ 178, - /*0x03ec*/ 285, - /*0x16e5d*/ 1448, - -1, -1, - /*0x16e47*/ 1426, + /*0x01d5*/ 167, + /*0x118b4*/ 1410, -1, -1, - /*0x00db*/ 52, + /*0x2cda*/ 1018, -1, - /*0x1f50*/ 751, - /*0x104d0*/ 1332, - /*0x1f56*/ 754, - /*0x04d0*/ 397, - /*0x0550*/ 476, - /*0x04d6*/ 400, + /*0x1cab*/ 566, + /*0xa684*/ 1051, + /*0x04c9*/ 394, /*0x0556*/ 482, - /*0xa752*/ 1086, - /*0xa7c5*/ 1140, - /*0x1e46*/ 620, + /*0x104c9*/ 1328, -1, - /*0x1f5b*/ 756, + /*0x0248*/ 225, + -1, -1, + /*0x24c2*/ 897, -1, - /*0xa74c*/ 1083, + /*0x1f49*/ 746, + /*0xa648*/ 1030, + /*0x0054*/ 18, + /*0x0154*/ 98, + -1, -1, + /*0x0552*/ 478, + /*0x00d4*/ 46, + -1, -1, + /*0x118bc*/ 1418, + /*0x16e5d*/ 1451, -1, - /*0x1e4e*/ 624, - -1, -1, -1, - /*0xa73e*/ 1076, - /*0xa646*/ 1029, - /*0x1e5a*/ 630, - /*0x1eec*/ 705, - -1, -1, -1, - /*0xa64e*/ 1033, - /*0x00c6*/ 32, + /*0x1ed4*/ 693, + /*0x1e54*/ 627, + /*0x03da*/ 276, + /*0x0546*/ 466, + /*0x1fd8*/ 840, + /*0x0058*/ 22, + /*0x0158*/ 100, + -1, -1, + /*0x2cd4*/ 1015, + /*0x00d8*/ 49, -1, - /*0xa734*/ 1071, - /*0x10c0*/ 516, + /*0xa642*/ 1027, + -1, -1, -1, + /*0x1ed8*/ 695, + /*0x1e58*/ 629, + /*0x1ff8*/ 859, + /*0x0478*/ 357, + /*0x0178*/ 116, + /*0xa682*/ 1050, + /*0x01ca*/ 161, + /*0x1fd3*/ 837, + /*0x0053*/ 17, + /*0x2cd8*/ 1017, + /*0x1fc3*/ 827, + /*0x0043*/ 2, + /*0x0143*/ 89, + /*0x00d3*/ 45, + /*0x1ef8*/ 711, + /*0x1e78*/ 645, + /*0x00c3*/ 29, + /*0x104c4*/ 1323, + /*0x104d1*/ 1336, -1, - /*0xa65a*/ 1039, - /*0x00ce*/ 40, - /*0x1fc9*/ 832, + /*0x13f8*/ 524, + /*0x0550*/ 476, + /*0xa74a*/ 1082, -1, /*0x24c6*/ 901, - /*0x0149*/ 92, - /*0x0049*/ 1485, - /*0x00da*/ 51, + -1, -1, + /*0xa656*/ 1037, + -1, -1, -1, + /*0x104cc*/ 1331, -1, - /*0x104c6*/ 1322, - /*0x24ce*/ 909, - /*0x118ab*/ 1398, - /*0x0546*/ 466, + /*0x04fa*/ 418, + /*0x1fc7*/ 830, + /*0x0047*/ 6, + /*0x0147*/ 91, + /*0x03d8*/ 275, + /*0x1f4c*/ 749, + -1, + /*0x00c7*/ 33, + /*0xa652*/ 1035, + /*0x054e*/ 474, -1, -1, - /*0x104ce*/ 1330, + /*0x0246*/ 224, + /*0x00c0*/ 26, -1, -1, - /*0x054e*/ 474, - /*0x1fea*/ 851, - /*0x046a*/ 350, + /*0x0045*/ 4, + /*0x0145*/ 90, + /*0xa646*/ 1029, + /*0x1ec0*/ 683, + /*0x1e40*/ 617, + /*0x00c5*/ 31, -1, - /*0x016a*/ 109, - /*0x04da*/ 402, - /*0x0345*/ 229, + /*0x104c8*/ 1327, -1, - /*0x01ea*/ 177, - /*0x03ea*/ 284, - /*0x1e40*/ 617, + /*0x01f6*/ 184, /*0x1fa9*/ 808, /*0x0429*/ 338, + /*0x2cc0*/ 1005, + /*0xa7c7*/ 1142, + /*0x1f48*/ 745, + /*0xaba9*/ 1202, + -1, + /*0x004d*/ 11, + /*0x1f2b*/ 732, + /*0xa662*/ 1043, + /*0x2c29*/ 952, + /*0x212b*/ 866, + /*0x00cd*/ 39, + /*0x1f97*/ 790, + /*0x0417*/ 320, + -1, + /*0x10417*/ 1286, + /*0xa7c5*/ 1140, + /*0xab97*/ 1184, + -1, + /*0x24ce*/ 909, + /*0x104c2*/ 1321, + -1, + /*0x2c17*/ 934, + -1, + /*0x1e97*/ 661, + /*0xa650*/ 1034, + /*0x046e*/ 352, + /*0x016e*/ 111, -1, -1, - /*0xaba9*/ 1199, - /*0xff2b*/ 1244, + /*0x10ca9*/ 1380, + /*0x1fa1*/ 800, + /*0x0421*/ 330, + /*0x047e*/ 360, + /*0x10421*/ 1296, + /*0x2c6e*/ 966, + /*0xaba1*/ 1194, + /*0x1eee*/ 706, + /*0x1e6e*/ 640, + -1, + /*0x024e*/ 228, + /*0x2c21*/ 944, + /*0x2c7e*/ 971, + /*0x10c97*/ 1362, + /*0x1efe*/ 714, + /*0x1e7e*/ 648, + /*0xa64e*/ 1033, -1, - /*0x01a9*/ 146, /*0x03a9*/ 265, + /*0x04d6*/ 400, + -1, -1, -1, + /*0x0554*/ 480, + /*0x1fec*/ 853, + /*0x046c*/ 351, + /*0x016c*/ 110, -1, - /*0xa640*/ 1026, - /*0x2c29*/ 952, - /*0x1fc3*/ 827, - -1, - /*0x0243*/ 221, - /*0x0143*/ 89, - /*0x0043*/ 2, - /*0x00c0*/ 26, - /*0x10421*/ 1293, - /*0x1fa1*/ 800, - /*0x0421*/ 330, + /*0x1f56*/ 754, + -1, -1, + /*0x0397*/ 248, + /*0x10ca1*/ 1372, + /*0x04d2*/ 398, -1, - /*0xa74a*/ 1082, - /*0xaba1*/ 1191, + /*0x104d2*/ 1337, + /*0x1eec*/ 705, + /*0x1e6c*/ 639, -1, -1, - /*0x24c0*/ 895, + /*0x0345*/ 229, + -1, + /*0x1f52*/ 752, + -1, + /*0x03ee*/ 286, + /*0x104c6*/ 1325, + /*0x10c3*/ 519, + -1, -1, -1, /*0x03a1*/ 258, + /*0x03fe*/ 295, + /*0xa65a*/ 1039, + /*0x01c4*/ 157, + /*0x01d1*/ 165, + /*0x1fea*/ 851, + /*0x046a*/ 350, + /*0x016a*/ 109, + /*0x0553*/ 479, -1, - /*0x1eea*/ 704, - /*0x2c21*/ 944, - /*0x104c0*/ 1316, - /*0x1fb9*/ 821, - /*0x04c0*/ 389, - /*0x0540*/ 460, - /*0x0139*/ 84, - /*0xabb9*/ 1215, + /*0x04e2*/ 406, + /*0x0543*/ 463, /*0x1fe8*/ 849, /*0x0468*/ 349, - -1, /*0x0168*/ 108, -1, -1, - /*0x1e62*/ 634, - /*0x01e8*/ 176, - /*0x03e8*/ 283, - /*0x1ca9*/ 564, - /*0x10ca9*/ 1377, + /*0x1eea*/ 704, + /*0x1e6a*/ 638, /*0xa744*/ 1079, - /*0x1e54*/ 627, - -1, - /*0x1fcb*/ 834, - -1, -1, - /*0xa662*/ 1043, - /*0x004b*/ 9, - -1, -1, - /*0x01cb*/ 162, + /*0x10c7*/ 522, + /*0x01fa*/ 187, + /*0x2162*/ 870, + /*0x03ec*/ 285, + /*0x1ee8*/ 703, + /*0x1e68*/ 637, + /*0x10c0*/ 516, + /*0x04d0*/ 397, /*0xa68c*/ 1055, + /*0x104d0*/ 1335, + /*0x16e57*/ 1445, + -1, -1, + /*0xa74c*/ 1083, + /*0x10c5*/ 521, + /*0x0547*/ 467, + /*0x1f50*/ 751, /*0xa654*/ 1036, - -1, -1, -1, -1, - /*0x1ca1*/ 556, - /*0x10ca1*/ 1369, - /*0x00d4*/ 46, - -1, - /*0x1e921*/ 1484, - -1, - /*0x1e58*/ 629, - -1, - /*0x16e57*/ 1442, - /*0xa742*/ 1078, - -1, - /*0x1ee8*/ 703, - /*0x04e2*/ 406, - /*0x1cb9*/ 580, - -1, - /*0x1f54*/ 753, + -1, -1, -1, + /*0x0540*/ 460, + /*0x01c8*/ 160, + -1, -1, + /*0x10a9*/ 493, + -1, -1, + /*0x24c3*/ 898, + /*0x0545*/ 465, + /*0x104ce*/ 1333, + /*0x10cd*/ 523, -1, /*0xa658*/ 1038, - /*0x04d4*/ 399, - /*0x0554*/ 480, - -1, + /*0x03ea*/ 284, + -1, -1, -1, /*0xa748*/ 1081, -1, -1, - /*0x00d8*/ 49, - /*0x10417*/ 1283, - /*0x1f97*/ 790, - /*0x0417*/ 320, + /*0x03e8*/ 283, + -1, /*0x1fe4*/ 846, /*0x0464*/ 347, - /*0xab97*/ 1181, /*0x0164*/ 106, + /*0x054d*/ 473, + /*0xff2b*/ 1247, -1, - /*0x0197*/ 136, - /*0x0397*/ 248, - /*0x01e4*/ 174, - /*0x03e4*/ 281, - /*0x2c17*/ 934, - -1, - /*0x2c64*/ 961, - /*0x04d8*/ 401, + /*0x0243*/ 221, -1, -1, - /*0x0460*/ 345, + /*0x24c7*/ 902, + /*0x2c64*/ 961, -1, - /*0x0160*/ 104, + /*0x1ee4*/ 701, + /*0x1e64*/ 635, + /*0x10a1*/ 485, + /*0x24c0*/ 895, -1, -1, -1, - /*0x01e0*/ 172, - /*0x03e0*/ 279, - /*0x1ff4*/ 856, - /*0x0474*/ 355, - /*0x2c60*/ 958, - /*0x0174*/ 114, + /*0xa742*/ 1078, + /*0x015e*/ 103, + /*0x04da*/ 402, + /*0x015c*/ 102, + /*0x24c5*/ 900, + /*0x00de*/ 55, -1, - /*0x1ffc*/ 863, - /*0x047c*/ 359, - /*0x01f4*/ 183, - /*0x03f4*/ 289, - /*0xa750*/ 1085, + /*0x00dc*/ 53, -1, - /*0xa756*/ 1088, - /*0x01fc*/ 188, - /*0x1f0d*/ 720, - /*0x1e97*/ 661, - /*0x2ce0*/ 1021, - /*0x1ee4*/ 701, + /*0x118ab*/ 1401, -1, - /*0x10c5*/ 521, + /*0x1ede*/ 698, + /*0x1e5e*/ 632, + /*0x1edc*/ 697, + /*0x1e5c*/ 631, + -1, + /*0x1fe6*/ 847, + /*0x0466*/ 348, + /*0x0166*/ 107, + -1, + /*0x2cde*/ 1020, + /*0x24cd*/ 908, + /*0x2cdc*/ 1019, + /*0xa640*/ 1026, + -1, + /*0x0245*/ 223, + /*0x1ca9*/ 564, + -1, + /*0x1ee6*/ 702, + /*0x1e66*/ 636, + /*0x03e4*/ 281, + /*0xa756*/ 1088, + /*0x0460*/ 345, + /*0x0160*/ 104, + /*0x16e5b*/ 1449, -1, -1, + /*0x04d4*/ 399, + -1, /*0x1c97*/ 546, - /*0x10c97*/ 1359, - -1, -1, - /*0x1e917*/ 1474, -1, - /*0x046e*/ 352, + /*0x2c60*/ 958, -1, - /*0x016e*/ 111, /*0x1ee0*/ 699, - /*0x00d5*/ 47, - /*0x13fc*/ 528, - /*0x01ee*/ 179, - /*0x03ee*/ 286, - /*0x1fe6*/ 847, - /*0x0466*/ 348, - /*0x2c6e*/ 966, - /*0x0166*/ 107, - /*0x1ef4*/ 709, + /*0x1e60*/ 633, + /*0xa752*/ 1086, + /*0x1f54*/ 753, -1, - /*0x015e*/ 103, - /*0x01e6*/ 175, - /*0x03e6*/ 282, - /*0x1efc*/ 713, - /*0x01de*/ 171, /*0x03de*/ 278, -1, - /*0x0555*/ 481, - /*0xa746*/ 1080, - -1, -1, - /*0x16e53*/ 1438, - -1, -1, - /*0xa74e*/ 1084, - -1, -1, -1, -1, - /*0x1e6c*/ 639, - /*0xa75a*/ 1090, - /*0x2cde*/ 1020, + /*0x03dc*/ 277, -1, - /*0x0051*/ 15, - /*0x1eee*/ 706, - /*0x00c5*/ 31, - /*0x01d1*/ 165, - /*0x03d1*/ 272, - -1, -1, - /*0xa66c*/ 1048, + /*0x2ce0*/ 1021, + /*0x04d8*/ 401, -1, - /*0x212b*/ 866, - /*0x1ee6*/ 702, - /*0x24c5*/ 900, - /*0x00d9*/ 50, - /*0x1ede*/ 698, + /*0xa746*/ 1080, + /*0x01e2*/ 173, + /*0x1fb9*/ 821, + /*0x1ca1*/ 556, + /*0x0139*/ 84, -1, -1, - /*0x104c5*/ 1321, + /*0xabb9*/ 1218, + /*0x1f8f*/ 782, + /*0x040f*/ 312, + /*0x03e6*/ 282, + /*0x1040f*/ 1278, + /*0x04f8*/ 417, + /*0xab8f*/ 1176, + /*0x1ff2*/ 854, + /*0x0472*/ 354, + /*0x0172*/ 113, + /*0xa762*/ 1094, + /*0x2c0f*/ 926, + /*0x104d3*/ 1338, + /*0x04c3*/ 391, -1, - /*0x04c5*/ 392, - /*0x0545*/ 465, + /*0x104c3*/ 1322, + -1, + /*0x2c72*/ 969, + /*0x03e0*/ 279, + /*0x1ef2*/ 708, + /*0x1e72*/ 642, /*0x1fad*/ 812, /*0x042d*/ 342, + -1, -1, -1, + /*0xabad*/ 1206, + /*0xa750*/ 1085, + /*0x2cf2*/ 1025, -1, -1, - /*0xabad*/ 1203, - /*0x1f59*/ 755, - -1, - /*0x1f6c*/ 763, - -1, -1, - /*0x04ec*/ 411, /*0x2c2d*/ 956, - /*0x015c*/ 102, + /*0x10c8f*/ 1354, + -1, -1, + /*0xa66c*/ 1048, + /*0x1fb3*/ 816, + /*0x04c7*/ 393, -1, - /*0xfb17*/ 1233, + /*0x104c7*/ 1326, -1, - /*0xa740*/ 1077, - /*0x03dc*/ 277, - /*0x1ff2*/ 854, - /*0x0472*/ 354, + /*0xabb3*/ 1212, -1, - /*0x0172*/ 113, + /*0x04c0*/ 389, + -1, + /*0x104c0*/ 1319, -1, -1, - /*0x10a9*/ 493, - /*0x01f2*/ 182, - /*0x10425*/ 1297, + /*0xa74e*/ 1084, + /*0xa7ad*/ 1126, + /*0x038f*/ 240, + /*0x04c5*/ 392, + /*0x10cad*/ 1384, + /*0x104c5*/ 1324, + -1, /*0x1fa5*/ 804, /*0x0425*/ 334, - /*0x2c72*/ 969, -1, - /*0xaba5*/ 1195, + /*0x10425*/ 1300, -1, - /*0x2cdc*/ 1019, - -1, - /*0x03a5*/ 261, - /*0x10c3*/ 519, - /*0xa7ad*/ 1126, - /*0x2c25*/ 948, + /*0xaba5*/ 1198, -1, -1, -1, - /*0x2cf2*/ 1025, - /*0x10a1*/ 485, - /*0x1e6a*/ 638, - /*0x00c9*/ 35, - /*0x1cad*/ 568, - /*0x10cad*/ 1381, - /*0x1edc*/ 697, - /*0x004d*/ 11, - -1, -1, - /*0x01cd*/ 163, - -1, - /*0x24c9*/ 904, + /*0xa7b3*/ 1131, + /*0x2c25*/ 948, /*0xa66a*/ 1047, - /*0x10b9*/ 509, - /*0x1ef2*/ 708, - /*0x1f49*/ 746, - /*0x104c9*/ 1325, - /*0xa762*/ 1094, - /*0x04c9*/ 394, - /*0x0549*/ 469, - /*0x013f*/ 87, - /*0xabbf*/ 1221, -1, - /*0xa754*/ 1087, - /*0x10423*/ 1295, - /*0x1fa3*/ 802, - /*0x0423*/ 332, - -1, -1, - /*0xaba3*/ 1193, - /*0x1ca5*/ 560, - /*0x10ca5*/ 1373, - /*0x1f6a*/ 761, - /*0x03a3*/ 259, + /*0x04cd*/ 396, -1, - /*0x04ea*/ 410, - /*0x2c23*/ 946, + /*0x104cd*/ 1332, + /*0x1f29*/ 730, -1, - /*0x0241*/ 220, - /*0x0141*/ 88, + /*0xa668*/ 1046, /*0x0041*/ 0, - /*0x00c3*/ 29, - /*0x1f29*/ 730, + /*0x0141*/ 88, + -1, + /*0x1f4d*/ 750, + /*0x013d*/ 86, + /*0x00c1*/ 27, + /*0x1e917*/ 1477, + /*0xabbd*/ 1222, + /*0x1fa3*/ 802, + /*0x0423*/ 332, + /*0xa75a*/ 1090, + /*0x10423*/ 1298, + /*0x10ca5*/ 1376, + /*0xaba3*/ 1196, + /*0x04ee*/ 412, + /*0x0372*/ 231, -1, -1, - /*0xa758*/ 1089, + /*0x2c23*/ 946, -1, -1, - /*0x1e68*/ 637, + /*0x04fe*/ 420, -1, - /*0x24c3*/ 898, - -1, -1, -1, -1, - /*0x104c3*/ 1319, + /*0x1f6e*/ 765, -1, - /*0x04c3*/ 391, - /*0x0543*/ 463, - /*0xa668*/ 1046, - /*0x0372*/ 231, - -1, -1, - /*0x1cbf*/ 584, + /*0x1e921*/ 1487, + /*0x216e*/ 882, -1, -1, -1, - /*0x023d*/ 218, - /*0x013d*/ 86, - /*0xabbd*/ 1219, - /*0x24b9*/ 888, - /*0x1ca3*/ 558, - /*0x10ca3*/ 1371, + /*0x03a5*/ 261, -1, - /*0x1f39*/ 738, - /*0x104b9*/ 1309, + /*0x1f87*/ 774, + /*0x0407*/ 304, + /*0xab79*/ 1154, + /*0x10407*/ 1270, + /*0x0587*/ 483, + /*0xab87*/ 1168, + /*0x16e59*/ 1447, + /*0x10ca3*/ 1374, -1, -1, - /*0x0539*/ 453, - /*0x1f68*/ 759, - /*0x00cb*/ 37, + /*0x2c07*/ 918, + /*0x04ec*/ 411, + /*0xab71*/ 1146, + /*0xa754*/ 1087, -1, - /*0x04e8*/ 409, - /*0x1041d*/ 1289, + /*0x10b9*/ 509, /*0x1f9d*/ 796, /*0x041d*/ 326, - -1, -1, - /*0xab9d*/ 1187, - /*0x24cb*/ 906, + /*0xa664*/ 1044, + /*0x1041d*/ 1292, + /*0x1f6c*/ 763, + /*0xab9d*/ 1190, -1, - /*0x019d*/ 139, - /*0x039d*/ 254, - /*0x1f4b*/ 748, - /*0x104cb*/ 1327, + /*0x216c*/ 880, + -1, + /*0x03a3*/ 259, /*0x2c1d*/ 940, - /*0x04cb*/ 395, - /*0x054b*/ 471, - /*0x10407*/ 1267, - /*0x1f87*/ 774, - /*0x0407*/ 304, - /*0x0587*/ 483, + /*0x01f8*/ 186, -1, - /*0xab87*/ 1165, - /*0x1e64*/ 635, + /*0xa758*/ 1089, + /*0x0539*/ 453, + /*0x10c87*/ 1346, + /*0x01d3*/ 166, + -1, + /*0x1fcb*/ 834, + /*0x004b*/ 9, + /*0xa65e*/ 1041, + -1, + /*0xa65c*/ 1040, + /*0xab73*/ 1148, + /*0x00cb*/ 37, + /*0x10ad*/ 497, + /*0x04ea*/ 410, + /*0xabb1*/ 1210, -1, - /*0x0187*/ 125, - /*0x1041b*/ 1287, /*0x1f9b*/ 794, /*0x041b*/ 324, - /*0x2c07*/ 918, - /*0x1cbd*/ 582, - /*0xab9b*/ 1185, - -1, -1, - /*0xa664*/ 1044, - /*0x039b*/ 252, + /*0x10c9d*/ 1368, + /*0x1041b*/ 1290, + /*0x04e8*/ 409, + /*0xab9b*/ 1188, + /*0x1f6a*/ 761, -1, - /*0x1e60*/ 633, + /*0xa666*/ 1045, + /*0x216a*/ 878, /*0x2c1b*/ 938, - /*0x1fbb*/ 823, + /*0x10b3*/ 503, + /*0x1e9b*/ 665, + /*0x1f68*/ 759, + /*0x01c7*/ 159, -1, - /*0x023b*/ 217, - /*0x013b*/ 85, - /*0xabbb*/ 1217, - -1, -1, - /*0x1e74*/ 643, - /*0xab73*/ 1145, + /*0x2168*/ 876, + -1, -1, -1, + /*0x039d*/ 254, + /*0xa7b1*/ 1129, + /*0x24b9*/ 888, /*0xa660*/ 1042, - /*0x1c9d*/ 552, - /*0x10c9d*/ 1365, - /*0x1e7c*/ 647, - -1, - /*0x1e91d*/ 1480, + /*0x10cb1*/ 1388, -1, - /*0x1ff6*/ 857, - /*0x0476*/ 356, - /*0x04e4*/ 407, - /*0x0176*/ 115, - -1, -1, -1, - /*0x01f6*/ 184, - /*0x2162*/ 870, - /*0x1c87*/ 537, - /*0x10c87*/ 1343, - /*0x1e9b*/ 665, - /*0x118a9*/ 1396, - /*0x1e907*/ 1458, - /*0xa76c*/ 1099, + /*0x0533*/ 447, + /*0x1fb7*/ 819, + /*0x01c5*/ 158, -1, - /*0x04e0*/ 405, - /*0x1e6e*/ 640, - /*0x1c9b*/ 550, - /*0x10c9b*/ 1363, - -1, -1, - /*0x1e91b*/ 1478, + /*0x10a5*/ 489, + /*0x10c9b*/ 1366, + /*0xabb7*/ 1216, + /*0x1cb9*/ 580, -1, -1, - /*0x04f4*/ 415, - /*0x1e66*/ 636, + /*0xa740*/ 1077, + /*0x1f93*/ 786, + /*0x0413*/ 316, + /*0x01a9*/ 146, + /*0x10413*/ 1282, + -1, + /*0xab93*/ 1180, + /*0xab77*/ 1152, + -1, + /*0x01cd*/ 163, + -1, + /*0x2c13*/ 930, + /*0x10c1*/ 517, + /*0x039b*/ 252, + -1, + /*0x10bd*/ 513, + /*0x0197*/ 136, -1, -1, - /*0x1e5e*/ 632, - /*0x04fc*/ 419, - /*0x118a1*/ 1388, + /*0x04e4*/ 407, -1, - /*0xabb1*/ 1207, + /*0x10a3*/ 487, -1, - /*0xff29*/ 1242, - /*0x01b1*/ 150, - /*0xa666*/ 1045, + /*0x1cad*/ 568, + /*0xff29*/ 1245, + -1, -1, + /*0x0541*/ 461, + -1, + /*0x01ee*/ 179, + /*0x053d*/ 457, + /*0x2164*/ 872, + /*0x10c93*/ 1358, + -1, -1, -1, + /*0x01fe*/ 189, + /*0x04de*/ 404, + /*0x1cb3*/ 574, + /*0x04dc*/ 403, -1, - /*0x1ef6*/ 710, - /*0xa65e*/ 1041, - /*0x10419*/ 1285, /*0x1f99*/ 792, /*0x0419*/ 322, - /*0x118b9*/ 1412, - /*0x10ad*/ 497, - /*0xab99*/ 1183, - /*0x00de*/ 55, - /*0x1f6e*/ 765, -1, - /*0x0399*/ 250, - /*0x04ee*/ 412, + /*0x10419*/ 1288, + /*0xa76e*/ 1100, + /*0xab99*/ 1186, + /*0xab75*/ 1150, + /*0x118a9*/ 1399, -1, - /*0x2c19*/ 936, - /*0xff21*/ 1234, - /*0x1fb7*/ 819, - /*0x10413*/ 1279, - /*0x1f93*/ 786, - /*0x0413*/ 316, - /*0xabb7*/ 1213, - /*0x04e6*/ 408, - /*0xab93*/ 1177, - /*0x01b7*/ 154, - /*0x04de*/ 404, - /*0x0193*/ 133, /*0x0393*/ 244, - /*0xa7b1*/ 1129, - /*0xff39*/ 1258, - /*0x2c13*/ 930, - /*0x00d1*/ 43, - /*0x1ffa*/ 861, - /*0x047a*/ 358, - /*0x10a5*/ 489, - -1, -1, - /*0x1cb1*/ 572, - /*0x10cb1*/ 1385, - /*0x01fa*/ 187, - /*0x03fa*/ 293, - -1, -1, + /*0x2c19*/ 936, + /*0xa77e*/ 1104, /*0x1e99*/ 663, - /*0xa76a*/ 1098, - /*0x104d1*/ 1333, - /*0x1e5c*/ 631, - /*0x0376*/ 232, - /*0x0551*/ 477, - -1, - /*0x1c99*/ 548, - /*0x10c99*/ 1361, - /*0x10cd*/ 523, - -1, - /*0x1e919*/ 1476, - /*0x1e72*/ 642, + /*0x04e6*/ 408, -1, - /*0xa65c*/ 1040, + /*0xff21*/ 1237, + /*0x1ca5*/ 560, + /*0x01ec*/ 178, + -1, -1, -1, -1, + /*0x1fbb*/ 823, + /*0x24c1*/ 896, + /*0x013b*/ 85, + /*0x2166*/ 874, + /*0x24bd*/ 892, + /*0xabbb*/ 1220, + /*0x04e0*/ 405, + -1, -1, + /*0x10c99*/ 1364, -1, - /*0x13fa*/ 526, + /*0xa76c*/ 1099, -1, -1, -1, - /*0x1cb7*/ 578, - /*0x00dc*/ 53, - /*0x1c93*/ 542, - /*0x10c93*/ 1355, - /*0x10bf*/ 515, - /*0x1f2d*/ 734, - /*0x1e913*/ 1470, - /*0xabb5*/ 1211, - /*0x1efa*/ 712, + /*0x1cbd*/ 582, + /*0x013f*/ 87, + /*0x118a1*/ 1391, + /*0x2160*/ 868, + /*0xabbf*/ 1224, + /*0x10b1*/ 501, + /*0x1ca3*/ 558, + /*0x0241*/ 220, + -1, -1, + /*0x023d*/ 218, + /*0x01ea*/ 177, + /*0x0399*/ 250, + /*0x0470*/ 353, + /*0x0170*/ 112, + /*0xab7f*/ 1160, + /*0x054b*/ 471, -1, - /*0x01b5*/ 153, + /*0x01e8*/ 176, + /*0x104b9*/ 1312, + /*0x0531*/ 445, -1, - /*0x10a3*/ 487, - /*0xab75*/ 1147, - -1, -1, -1, - /*0x04dc*/ 403, - /*0x1fb3*/ 816, - -1, -1, -1, - /*0xabb3*/ 1209, - /*0x10c1*/ 517, + /*0x2c70*/ 968, -1, - /*0x01b3*/ 152, + /*0x1ef0*/ 707, + /*0x1e70*/ 641, + /*0x1f39*/ 738, + /*0xa76a*/ 1098, + /*0x1e90f*/ 1469, /*0x04f2*/ 414, + /*0x1c87*/ 537, -1, - /*0xa768*/ 1097, + /*0x1f0f*/ 722, -1, - /*0x1041f*/ 1291, + /*0xa768*/ 1097, /*0x1f9f*/ 798, /*0x041f*/ 328, - -1, -1, - /*0xab9f*/ 1189, - -1, - /*0x00cd*/ 39, - /*0x019f*/ 140, - /*0x039f*/ 256, - /*0x216c*/ 880, -1, + /*0x1041f*/ 1294, + /*0x10b7*/ 507, + /*0xab9f*/ 1192, + -1, -1, -1, -1, /*0x2c1f*/ 942, - -1, -1, -1, - /*0x24cd*/ 908, - -1, -1, - /*0x1cb5*/ 576, - /*0x1f4d*/ 750, - /*0x104cd*/ 1329, - /*0x10bd*/ 513, - /*0x04cd*/ 396, - /*0x054d*/ 473, - /*0xa7b3*/ 1131, - /*0x1ff8*/ 859, - /*0x0478*/ 357, - /*0xab7f*/ 1157, - /*0x0178*/ 116, - /*0xab71*/ 1143, - /*0x24bf*/ 894, + /*0x1c9d*/ 552, + /*0xfb17*/ 1236, + -1, -1, -1, -1, + /*0x1f2d*/ 734, + /*0x24cb*/ 906, + /*0x0537*/ 451, + -1, -1, -1, -1, -1, + /*0x104b3*/ 1306, + /*0x03f0*/ 287, + /*0x1f8b*/ 778, + /*0x040b*/ 308, -1, - /*0x01f8*/ 186, - /*0x1cb3*/ 574, - /*0x1f3f*/ 744, - /*0x104bf*/ 1315, + /*0x1040b*/ 1274, + /*0x10c9f*/ 1370, + /*0xab8b*/ 1172, + /*0x1cb1*/ 572, + /*0x01e4*/ 174, -1, -1, - /*0x053f*/ 459, + /*0x2c0b*/ 922, + -1, -1, + /*0x1c9b*/ 550, + /*0xabb5*/ 1214, + /*0x00b5*/ 25, + /*0x1f95*/ 788, + /*0x0415*/ 318, -1, - /*0x00c1*/ 27, - -1, -1, -1, -1, -1, - /*0x1c9f*/ 554, - /*0x10c9f*/ 1367, - /*0xfb13*/ 1229, - /*0x24c1*/ 896, - /*0x1e91f*/ 1482, + /*0x10415*/ 1284, -1, - /*0x13f8*/ 524, + /*0xab95*/ 1182, + /*0x039f*/ 256, /*0xa764*/ 1095, - /*0x104c1*/ 1317, -1, + /*0x01de*/ 171, + /*0x2c15*/ 932, + -1, + /*0xa78b*/ 1109, + /*0x24b7*/ 886, + -1, + /*0x10c8b*/ 1350, + /*0x0370*/ 230, /*0x04c1*/ 390, - /*0x0541*/ 461, - /*0xab79*/ 1151, - -1, -1, - /*0x10415*/ 1281, - /*0x1f95*/ 788, - /*0x0415*/ 318, - /*0x1ef8*/ 711, -1, - /*0xab95*/ 1179, - /*0xa760*/ 1093, + /*0x104c1*/ 1320, -1, -1, - /*0x0395*/ 246, - -1, -1, - /*0x2c15*/ 932, - -1, -1, - /*0x10bb*/ 511, - /*0x216a*/ 878, - /*0x24bd*/ 892, + /*0x104bd*/ 1316, -1, - /*0x118ad*/ 1400, + /*0x1cb7*/ 578, + /*0xa75e*/ 1092, + /*0x01e6*/ 175, + /*0xa75c*/ 1091, -1, /*0x1f3d*/ 742, - /*0x104bd*/ 1313, -1, - /*0x047e*/ 360, - /*0x053d*/ 457, - /*0x16e52*/ 1437, - -1, -1, -1, - /*0x01fe*/ 189, - /*0x03fe*/ 295, - /*0x16e4c*/ 1431, - /*0xab7b*/ 1153, - /*0x2c7e*/ 971, - -1, -1, -1, -1, -1, - /*0x1f1d*/ 728, - /*0xa76e*/ 1100, - /*0xff2d*/ 1246, - -1, -1, -1, - /*0x118a5*/ 1392, - /*0x1c95*/ 544, - /*0x10c95*/ 1357, + /*0x10c95*/ 1360, + -1, + /*0x10bb*/ 511, + /*0x1c93*/ 542, + /*0x1f81*/ 768, + /*0x0401*/ 298, + -1, + /*0x10401*/ 1264, -1, + /*0xab81*/ 1162, + /*0x01e0*/ 172, /*0xa766*/ 1096, - /*0x1e915*/ 1472, + -1, -1, + /*0x2c01*/ 912, + /*0x004f*/ 13, + /*0x10bf*/ 515, + /*0x053b*/ 455, + /*0x0395*/ 246, -1, - /*0xa75e*/ 1092, - -1, -1, -1, -1, -1, -1, - /*0x10b1*/ 501, - /*0x1e76*/ 644, - /*0x1efe*/ 714, - /*0x2168*/ 876, - /*0x1f1b*/ 726, + /*0x00cf*/ 41, + -1, -1, -1, + /*0x1e907*/ 1461, -1, - /*0x10411*/ 1277, + /*0xa760*/ 1093, /*0x1f91*/ 784, /*0x0411*/ 314, - /*0xff25*/ 1238, - -1, - /*0xab91*/ 1175, - /*0x24bb*/ 890, - -1, - /*0x0191*/ 132, - /*0x0391*/ 242, - /*0x1f3b*/ 740, - /*0x104bb*/ 1311, - /*0x2c11*/ 928, - /*0x118bf*/ 1418, - /*0x053b*/ 455, - -1, -1, - /*0xab7d*/ 1155, - -1, -1, - /*0x10b7*/ 507, - /*0x118a3*/ 1390, - /*0x1040f*/ 1275, - /*0x1f8f*/ 782, - /*0x040f*/ 312, - -1, -1, - /*0xab8f*/ 1173, -1, - /*0x04f6*/ 416, - /*0x018f*/ 130, - /*0x038f*/ 240, + /*0x10411*/ 1280, + /*0x053f*/ 459, + /*0xab91*/ 1178, -1, -1, - /*0x2c0f*/ 926, + /*0x10c81*/ 1340, -1, - /*0x16e4a*/ 1429, - -1, - /*0x1040b*/ 1271, - /*0x1f8b*/ 778, - /*0x040b*/ 308, - -1, - /*0xa75c*/ 1091, - /*0xab8b*/ 1169, - /*0xff23*/ 1236, + /*0x2c11*/ 928, + /*0x16e55*/ 1443, -1, - /*0x018b*/ 128, - /*0x1c91*/ 540, - /*0x10c91*/ 1353, + /*0x1e91d*/ 1483, -1, - /*0x2c0b*/ 922, - /*0x1e911*/ 1468, + /*0x018f*/ 130, + /*0x1c99*/ 548, + /*0x1f1d*/ 728, + -1, -1, -1, + /*0x01f2*/ 182, + -1, -1, -1, -1, + /*0x04cb*/ 395, + /*0x24bb*/ 890, + /*0x104cb*/ 1330, -1, - /*0x2164*/ 872, - /*0xab77*/ 1149, + /*0xff39*/ 1261, + /*0x10c91*/ 1356, + /*0x104b1*/ 1304, + -1, -1, + /*0x1f4b*/ 748, + /*0x03cf*/ 270, -1, - /*0x104b1*/ 1301, + /*0xab7b*/ 1156, + -1, -1, + /*0x24bf*/ 894, + /*0x1e91b*/ 1481, + -1, -1, -1, + /*0x1f1b*/ 726, -1, - /*0xfb15*/ 1231, - /*0x0531*/ 445, + /*0x023b*/ 217, + /*0x0391*/ 242, + /*0x01b3*/ 152, + /*0xab7d*/ 1158, + /*0x1cbf*/ 584, -1, - /*0x118bd*/ 1416, - /*0x16e44*/ 1423, - /*0x16e4f*/ 1434, + /*0x118b9*/ 1415, -1, - /*0x1e7a*/ 646, + /*0xff2d*/ 1249, + /*0x1ff4*/ 856, + /*0x0474*/ 355, + /*0x0174*/ 114, -1, - /*0x2160*/ 868, - /*0x1f19*/ 724, /*0x10b5*/ 505, - /*0x10c8f*/ 1351, + -1, + /*0x16e4a*/ 1432, -1, -1, - /*0x1e90f*/ 1466, + /*0x104b7*/ 1310, -1, -1, - /*0xa78b*/ 1109, - /*0x24b7*/ 886, - /*0x10405*/ 1265, + /*0x1ef4*/ 709, + /*0x1e74*/ 643, + /*0xff33*/ 1255, /*0x1f85*/ 772, /*0x0405*/ 302, -1, - /*0x104b7*/ 1307, - /*0xab85*/ 1163, - /*0x10b3*/ 503, - /*0x0537*/ 451, - /*0x10c8b*/ 1347, + /*0x10405*/ 1268, + /*0x0535*/ 449, + /*0xab85*/ 1166, + -1, + /*0x1e913*/ 1473, + /*0x118ad*/ 1403, -1, - /*0x16e42*/ 1421, - /*0x1e90b*/ 1462, /*0x2c05*/ 916, -1, -1, -1, -1, -1, - /*0x10401*/ 1261, - /*0x1f81*/ 768, - /*0x0401*/ 298, - /*0x04fa*/ 418, - /*0x16e48*/ 1427, - /*0xab81*/ 1159, - /*0x216e*/ 882, + /*0x1c9f*/ 554, -1, - /*0x0181*/ 121, - -1, -1, -1, - /*0x2c01*/ 912, - -1, -1, - /*0x2166*/ 874, + /*0xff25*/ 1241, -1, -1, -1, -1, - /*0x118bb*/ 1414, - /*0x00b5*/ 25, + /*0x118b3*/ 1409, -1, -1, -1, -1, -1, -1, -1, - /*0x1c85*/ 535, - /*0x10c85*/ 1341, + /*0x10c85*/ 1344, -1, -1, - /*0x1e905*/ 1456, + /*0x03f4*/ 289, + -1, -1, -1, -1, -1, -1, -1, - /*0x104b5*/ 1305, + /*0x118a5*/ 1395, -1, -1, - /*0x0535*/ 449, + /*0xff23*/ 1239, + -1, + /*0x1e919*/ 1479, + /*0x0187*/ 125, + -1, -1, + /*0x1f19*/ 724, + /*0x1cb5*/ 576, + -1, -1, -1, + /*0x054f*/ 475, + -1, -1, + /*0x1c95*/ 544, + -1, -1, -1, + /*0x118bd*/ 1419, + /*0x019d*/ 139, + -1, + /*0x104bb*/ 1314, + -1, -1, + /*0x118a3*/ 1393, + -1, -1, -1, + /*0x1f3b*/ 740, + -1, + /*0x16e49*/ 1431, -1, -1, -1, -1, - /*0x16e50*/ 1435, + /*0x104bf*/ 1318, -1, - /*0x16e56*/ 1441, + /*0x01cb*/ 162, + -1, -1, -1, + /*0x01b1*/ 150, + /*0x1f3f*/ 744, + -1, -1, -1, + /*0x04f0*/ 413, -1, + /*0x24cf*/ 910, /*0x1c81*/ 531, - /*0x10c81*/ 1337, + -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, + /*0xff31*/ 1253, + -1, -1, -1, -1, -1, -1, + -1, -1, -1, + /*0x1c91*/ 540, -1, - /*0x104b3*/ 1303, - /*0x1e901*/ 1452, + /*0x1e91f*/ 1485, + /*0x01b7*/ 154, + -1, -1, -1, -1, -1, -1, -1, - /*0x0533*/ 447, - /*0x16e5b*/ 1446, + /*0x16e44*/ 1426, + /*0x16e51*/ 1439, + /*0x0193*/ 133, + /*0x118b1*/ 1407, + -1, -1, -1, -1, -1, -1, + -1, -1, -1, + /*0xff37*/ 1259, + /*0x16e4c*/ 1434, + -1, -1, -1, + /*0x1e90b*/ 1465, + -1, -1, -1, + /*0x1f0b*/ 718, -1, - /*0x1e78*/ 645, + /*0x104b5*/ 1308, -1, -1, -1, -1, -1, -1, + -1, -1, -1, + /*0x1e915*/ 1475, -1, -1, - /*0x118b1*/ 1404, + /*0x118b7*/ 1413, + -1, + /*0x16e48*/ 1430, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, - /*0x16e46*/ 1425, - /*0xab70*/ 1142, - -1, -1, -1, - /*0xff31*/ 1250, - /*0x16e4e*/ 1433, - /*0x04f8*/ 417, - /*0x118b7*/ 1410, -1, -1, -1, - /*0x16e5a*/ 1445, + /*0x1c85*/ 535, + -1, + /*0x16e42*/ 1424, + -1, -1, -1, -1, -1, + /*0x1e901*/ 1455, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, - /*0xfb05*/ 1227, + /*0x104cf*/ 1334, -1, -1, -1, -1, -1, -1, - -1, - /*0xff37*/ 1256, - /*0x1e7e*/ 648, -1, -1, -1, -1, -1, -1, -1, -1, - /*0xfb01*/ 1223, + /*0x01f0*/ 180, + /*0x1e911*/ 1471, + -1, + /*0x16e56*/ 1444, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, + -1, + /*0x16e52*/ 1440, + /*0x118bb*/ 1417, + -1, + /*0xfb13*/ 1232, + -1, -1, + /*0x019f*/ 140, -1, -1, -1, - /*0x16e40*/ 1419, - -1, -1, -1, -1, -1, - /*0x118b5*/ 1408, + /*0x16e46*/ 1428, + -1, -1, -1, -1, + /*0x118bf*/ 1421, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, + /*0x018b*/ 128, -1, -1, - /*0x04fe*/ 420, + /*0x04f4*/ 415, -1, -1, -1, -1, -1, - /*0x118b3*/ 1406, + /*0x01b5*/ 153, + -1, + /*0x16e50*/ 1438, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, + /*0x1e905*/ 1459, + -1, -1, -1, -1, -1, + /*0xab7c*/ 1157, + /*0xff35*/ 1257, -1, - /*0xff35*/ 1254, + /*0x16e4e*/ 1436, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, - /*0xff33*/ 1252, - -1, -1, -1, -1, -1, - /*0x16e54*/ 1439, -1, -1, -1, -1, -1, -1, + /*0x0181*/ 121, + -1, -1, + /*0x118b5*/ 1411, -1, -1, -1, -1, -1, -1, + /*0x01cf*/ 164, -1, -1, -1, -1, -1, -1, - -1, -1, -1, - /*0x16e58*/ 1443, + /*0x16e5a*/ 1448, -1, -1, -1, -1, -1, - /*0x1f0f*/ 722, - -1, -1, -1, -1, -1, -1, + /*0x0191*/ 132, -1, -1, -1, -1, -1, -1, - -1, -1, -1, - /*0x1f0b*/ 718, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, + /*0x16e54*/ 1442, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, + /*0x16e58*/ 1446, + -1, -1, -1, -1, -1, + /*0xfb15*/ 1234, -1, -1, -1, -1, -1, - /*0x16e55*/ 1440, + /*0x01f4*/ 183, + -1, -1, -1, -1, -1, -1, + /*0x16e53*/ 1441, + -1, -1, + /*0x16e43*/ 1425, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /*0xfb01*/ 1226, + -1, -1, -1, -1, + /*0x16e47*/ 1429, + -1, -1, -1, -1, -1, + /*0x16e40*/ 1422, -1, -1, -1, -1, -1, -1, + -1, + /*0x16e45*/ 1427, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - /*0x16e45*/ 1424, + /*0x16e4d*/ 1435, -1, -1, -1, -1, -1, -1, - -1, -1, -1, - /*0x16e59*/ 1444, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, - /*0xa77e*/ 1104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, - /*0x16e49*/ 1428, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, + /*0xfb05*/ 1230, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /*0xab76*/ 1151, -1, -1, -1, -1, -1, -1, - -1, -1, - /*0x16e43*/ 1422, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, - /*0x16e4b*/ 1430, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, + /*0x16e5e*/ 1452, + -1, + /*0x16e5c*/ 1450, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, + /*0xab7a*/ 1155, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3516,34 +3603,28 @@ onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - /*0x16e5e*/ 1449, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, - /*0x16e51*/ 1436, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - /*0x16e5c*/ 1447, + /*0x16e41*/ 1423, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, - /*0x16e4d*/ 1432, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, - /*0x16e41*/ 1420, -1, -1, -1, -1, -1, -1, + /*0x16e4b*/ 1433, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3557,6 +3638,9 @@ onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, + /*0xab78*/ 1153, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3570,6 +3654,8 @@ onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, + /*0xab7e*/ 1159, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3582,6 +3668,8 @@ onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, + /*0x16e4f*/ 1437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3599,13 +3687,11 @@ onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, - /*0xab74*/ 1146, - -1, -1, -1, -1, - /*0xab7c*/ 1154, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, + /*0xab72*/ 1147, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3619,7 +3705,6 @@ onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - /*0xab72*/ 1144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3646,21 +3731,19 @@ onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, - /*0xab76*/ 1148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, + /*0xab70*/ 1145, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, - /*0xab7a*/ 1152, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3675,8 +3758,6 @@ onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, - /*0xab78*/ 1150, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3686,8 +3767,8 @@ onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, - /*0xab7e*/ 1156 + -1, -1, -1, -1, -1, -1, + /*0xab74*/ 1149 }; if (code <= MAX_CODE_VALUE && code >= MIN_CODE_VALUE) @@ -3706,7 +3787,7 @@ onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code) } static const CaseUnfold_11_Type CaseUnfold_11_Table[] = { -#define CaseUnfold_11 (*(CaseUnfold_11_Type (*)[1352])(CaseUnfold_11_Table+0)) +#define CaseUnfold_11 (*(CaseUnfold_11_Type (*)[1355])(CaseUnfold_11_Table+0)) {0x0061, {1|U, {0x0041}}}, {0x0062, {1|U, {0x0042}}}, {0x0063, {1|U, {0x0043}}}, @@ -4807,6 +4888,9 @@ static const CaseUnfold_11_Type CaseUnfold_11_Table[] = { {0xa7bd, {1|U, {0xa7bc}}}, {0xa7bf, {1|U, {0xa7be}}}, {0xa7c3, {1|U, {0xa7c2}}}, + {0xa7c8, {1|U, {0xa7c7}}}, + {0xa7ca, {1|U, {0xa7c9}}}, + {0xa7f6, {1|U, {0xa7f5}}}, {0xab53, {1|U, {0xa7b3}}}, {0xff41, {1|U, {0xff21}}}, {0xff42, {1|U, {0xff22}}}, @@ -5059,14 +5143,14 @@ static const CaseUnfold_11_Type CaseUnfold_11_Table[] = { {0x1e941, {1|U, {0x1e91f}}}, {0x1e942, {1|U, {0x1e920}}}, {0x1e943, {1|U, {0x1e921}}}, -#define CaseUnfold_11_Locale (*(CaseUnfold_11_Type (*)[1])(CaseUnfold_11_Table+1352)) +#define CaseUnfold_11_Locale (*(CaseUnfold_11_Type (*)[1])(CaseUnfold_11_Table+1355)) {0x0069, {1|U, {0x0049}}}, }; /* ANSI-C code produced by gperf version 3.1 */ /* Command-line: gperf -7 -k1,2,3 -F,-1 -c -j1 -i1 -t -T -E -C -H onigenc_unicode_CaseUnfold_11_hash -N onigenc_unicode_CaseUnfold_11_lookup -n */ -/* maximum key range = 2507, duplicates = 0 */ +/* maximum key range = 2461, duplicates = 0 */ #ifdef __GNUC__ __inline @@ -5081,26 +5165,26 @@ onigenc_unicode_CaseUnfold_11_hash(const OnigCodePoint code) { static const unsigned short asso_values[] = { - 1, 2510, 2, 7, 4, 582, 9, 308, 197, 674, - 297, 20, 2, 3, 303, 351, 2510, 2510, 2510, 2510, - 2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 112, - 2510, 2510, 2510, 2510, 2510, 2510, 2510, 120, 2510, 2510, - 2510, 2510, 2510, 1, 2510, 2510, 2510, 2510, 2510, 2510, - 2510, 2510, 2510, 278, 2510, 2510, 2510, 2510, 2510, 2510, - 2510, 2510, 12, 1, 7, 8, 218, 878, 222, 1178, - 480, 1102, 54, 1340, 151, 1615, 8, 15, 106, 1607, - 225, 854, 87, 490, 44, 1351, 5, 1281, 3, 1470, - 11, 1215, 377, 10, 441, 599, 152, 1642, 127, 1334, - 702, 841, 594, 827, 123, 916, 146, 1118, 117, 1363, - 254, 812, 249, 1096, 1630, 945, 437, 745, 1600, 718, - 1593, 704, 152, 1005, 383, 1064, 1493, 975, 236, 676, - 761, 579, 1017, 557, 1241, 628, 1195, 614, 1506, 464, - 1576, 535, 1432, 513, 1159, 423, 1026, 276, 1460, 291, - 1453, 392, 1263, 201, 1442, 85, 1412, 70, 1430, 100, - 1632, 129, 1410, 1, 1386, 25, 1373, 35, 656, 55, - 1188, 45, 1308, 160, 687, 227, 355, 175, 1201, 328, - 1030, 367, 1483, 414, 1479, 1166, 1418, 783, 994, 937, - 1083, 959, 1463, 967 + 1, 2464, 2, 7, 4, 582, 9, 308, 197, 674, + 456, 20, 2, 3, 303, 351, 2464, 2464, 2464, 2464, + 2464, 2464, 2464, 2464, 2464, 2464, 2464, 2464, 2464, 112, + 2464, 2464, 2464, 2464, 2464, 2464, 2464, 120, 2464, 2464, + 2464, 2464, 2464, 1, 2464, 2464, 2464, 2464, 2464, 2464, + 2464, 2464, 2464, 278, 2464, 2464, 2464, 2464, 2464, 2464, + 2464, 2464, 12, 1, 7, 8, 218, 878, 222, 1178, + 480, 1102, 54, 1282, 153, 1579, 8, 15, 151, 1607, + 225, 854, 87, 490, 106, 1416, 5, 1351, 3, 1502, + 11, 1215, 377, 10, 441, 599, 152, 1722, 127, 1334, + 717, 841, 594, 827, 123, 916, 146, 1118, 117, 1363, + 254, 812, 249, 1096, 1512, 945, 437, 745, 1682, 718, + 1676, 704, 152, 1005, 383, 1064, 1561, 975, 236, 676, + 761, 579, 1017, 557, 1241, 628, 1276, 614, 1195, 464, + 1659, 535, 1627, 513, 1159, 423, 1026, 276, 1506, 291, + 1460, 392, 1453, 201, 1483, 85, 1412, 70, 1430, 100, + 1552, 129, 1427, 1, 1386, 25, 1382, 35, 656, 55, + 1188, 45, 1201, 160, 687, 227, 355, 175, 1373, 328, + 1030, 367, 1405, 414, 1230, 1166, 1531, 783, 994, 937, + 1217, 959, 1023, 967 }; return asso_values[bits_of(code, 2)+66] + asso_values[bits_of(code, 1)+4] + asso_values[bits_of(code, 0)]; } @@ -5112,11 +5196,11 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) { MIN_CODE_VALUE = 0x61, MAX_CODE_VALUE = 0x1e943, - TOTAL_KEYWORDS = 1353, + TOTAL_KEYWORDS = 1356, MIN_WORD_LENGTH = 3, MAX_WORD_LENGTH = 3, MIN_HASH_VALUE = 3, - MAX_HASH_VALUE = 2509 + MAX_HASH_VALUE = 2463 }; static const short wordlist[] = @@ -5127,7 +5211,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x04e1*/ 400, /*0x0061*/ 0, -1, - /*0x104e1*/ 1176, + /*0x104e1*/ 1179, /*0x1e61*/ 661, /*0x1ee1*/ 720, /*0x0161*/ 102, @@ -5150,7 +5234,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x04e3*/ 401, /*0x0063*/ 2, -1, - /*0x104e3*/ 1178, + /*0x104e3*/ 1181, /*0x1e63*/ 662, /*0x1ee3*/ 721, /*0x0163*/ 103, @@ -5160,7 +5244,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x04e5*/ 402, /*0x0065*/ 4, /*0x24e3*/ 842, - /*0x104e5*/ 1180, + /*0x104e5*/ 1183, /*0x1e65*/ 663, /*0x1ee5*/ 722, /*0x0165*/ 104, @@ -5168,9 +5252,9 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x13e9*/ 597, /*0x0469*/ 344, /*0x04e9*/ 404, - /*0x0069*/ 1352, + /*0x0069*/ 1355, /*0x24e5*/ 844, - /*0x104e9*/ 1184, + /*0x104e9*/ 1187, /*0x1e69*/ 665, /*0x1ee9*/ 724, /*0x0169*/ 106, @@ -5180,7 +5264,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x04e7*/ 403, /*0x0067*/ 6, /*0x24e9*/ 848, - /*0x104e7*/ 1182, + /*0x104e7*/ 1185, /*0x1e67*/ 664, /*0x1ee7*/ 723, /*0x0167*/ 105, @@ -5192,7 +5276,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x04db*/ 397, -1, /*0x03e7*/ 283, - /*0x104db*/ 1170, + /*0x104db*/ 1173, /*0x1e5b*/ 658, /*0x1edb*/ 717, /*0x015b*/ 99, @@ -5204,7 +5288,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x04d9*/ 396, /*0xa761*/ 1064, /*0x03db*/ 277, - /*0x104d9*/ 1168, + /*0x104d9*/ 1171, /*0x1e59*/ 657, /*0x1ed9*/ 716, /*0x0159*/ 98, @@ -5216,7 +5300,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x04dd*/ 398, -1, /*0x03d9*/ 276, - /*0x104dd*/ 1172, + /*0x104dd*/ 1175, /*0x1e5d*/ 659, /*0x1edd*/ 718, /*0x015d*/ 100, @@ -5225,13 +5309,13 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0xa763*/ 1065, -1, /*0x24dd*/ 836, - /*0x10ce1*/ 1236, + /*0x10ce1*/ 1239, -1, /*0x13aa*/ 534, -1, /*0x03dd*/ 278, /*0x10e1*/ 495, - /*0x1042a*/ 1129, + /*0x1042a*/ 1132, /*0xa765*/ 1066, /*0x13a6*/ 530, -1, -1, -1, @@ -5242,12 +5326,12 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x04df*/ 399, /*0xa769*/ 1068, -1, - /*0x104df*/ 1174, + /*0x104df*/ 1177, /*0x1e5f*/ 660, /*0x1edf*/ 719, /*0x015f*/ 101, /*0x2cdf*/ 951, - /*0x10ce3*/ 1238, + /*0x10ce3*/ 1241, -1, -1, /*0xa767*/ 1067, /*0x24df*/ 838, @@ -5256,27 +5340,27 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x13a8*/ 532, -1, /*0x03df*/ 279, - /*0x10ce5*/ 1240, - /*0x10428*/ 1127, + /*0x10ce5*/ 1243, + /*0x10428*/ 1130, -1, /*0x13b8*/ 548, /*0x0438*/ 300, /*0x10e5*/ 499, -1, - /*0x10438*/ 1143, + /*0x10438*/ 1146, /*0xa75b*/ 1061, -1, - /*0x10ce9*/ 1244, + /*0x10ce9*/ 1247, /*0x13eb*/ 599, /*0x046b*/ 345, /*0x04eb*/ 405, /*0x006b*/ 9, /*0x10e9*/ 503, - /*0x104eb*/ 1186, + /*0x104eb*/ 1189, /*0x1e6b*/ 666, /*0x1eeb*/ 725, /*0x016b*/ 107, - /*0x10ce7*/ 1242, + /*0x10ce7*/ 1245, -1, /*0x03b8*/ 253, /*0xa759*/ 1060, @@ -5287,11 +5371,11 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x04ef*/ 407, /*0x006f*/ 13, /*0x03eb*/ 285, - /*0x104ef*/ 1190, + /*0x104ef*/ 1193, /*0x1e6f*/ 668, /*0x1eef*/ 727, /*0x016f*/ 109, - /*0x10cdb*/ 1230, + /*0x10cdb*/ 1233, -1, -1, /*0xa75d*/ 1062, -1, @@ -5301,7 +5385,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) -1, -1, /*0x0261*/ 210, -1, - /*0x10cd9*/ 1228, + /*0x10cd9*/ 1231, -1, /*0x13d7*/ 579, /*0x0457*/ 331, @@ -5315,7 +5399,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x2cd7*/ 947, /*0x020b*/ 170, -1, -1, - /*0x10cdd*/ 1232, + /*0x10cdd*/ 1235, /*0x24d7*/ 830, /*0xa75f*/ 1063, -1, @@ -5332,17 +5416,17 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x04ed*/ 406, /*0x006d*/ 11, /*0x0265*/ 212, - /*0x104ed*/ 1188, + /*0x104ed*/ 1191, /*0x1e6d*/ 667, /*0x1eed*/ 726, /*0x016d*/ 108, /*0x13be*/ 554, /*0x043e*/ 306, -1, -1, - /*0x1043e*/ 1149, + /*0x1043e*/ 1152, /*0x0269*/ 215, /*0x1f63*/ 779, - /*0x10cdf*/ 1234, + /*0x10cdf*/ 1237, /*0x013e*/ 85, -1, /*0x03ed*/ 286, @@ -5352,14 +5436,14 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0xa663*/ 1014, -1, /*0x1f65*/ 781, - /*0x1042e*/ 1133, + /*0x1042e*/ 1136, /*0x13ac*/ 536, /*0x03be*/ 259, -1, -1, - /*0x1042c*/ 1131, + /*0x1042c*/ 1134, -1, /*0xa665*/ 1015, - /*0x1f12*/ 746, + -1, /*0xa76f*/ 1071, -1, -1, -1, /*0x025b*/ 207, @@ -5370,7 +5454,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x1f06*/ 742, /*0x1f67*/ 783, /*0x03ac*/ 242, - /*0x10ceb*/ 1246, + /*0x10ceb*/ 1249, -1, /*0x13d1*/ 573, /*0x0451*/ 325, @@ -5384,7 +5468,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x2cd1*/ 944, -1, -1, /*0xa757*/ 1059, - /*0x10cef*/ 1250, + /*0x10cef*/ 1253, /*0x24d1*/ 824, /*0x13d3*/ 575, /*0x0453*/ 327, @@ -5397,7 +5481,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x0153*/ 95, /*0x2cd3*/ 945, -1, - /*0xab53*/ 1100, + /*0xab53*/ 1103, /*0x0561*/ 440, /*0x1f10*/ 744, /*0x24d3*/ 826, @@ -5409,12 +5493,14 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x051b*/ 429, -1, /*0xa76d*/ 1070, - /*0x10cd7*/ 1226, + /*0x10cd7*/ 1229, -1, /*0x050b*/ 421, -1, -1, /*0x10d7*/ 485, - -1, -1, -1, -1, + -1, -1, + /*0x1f12*/ 746, + -1, /*0xa65d*/ 1011, -1, /*0x0563*/ 442, @@ -5423,14 +5509,14 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x04f1*/ 408, /*0x0071*/ 15, /*0x01e3*/ 152, - /*0x104f1*/ 1192, + /*0x104f1*/ 1195, /*0x1e71*/ 669, /*0x1ef1*/ 728, /*0x0171*/ 110, /*0x0565*/ 444, -1, -1, /*0x1f26*/ 756, - /*0x10ced*/ 1248, + /*0x10ced*/ 1251, /*0x01e5*/ 153, -1, /*0x1f20*/ 750, @@ -5438,8 +5524,8 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x10ed*/ 507, /*0x0569*/ 448, -1, -1, - /*0x118db*/ 1281, - /*0x0192*/ 122, + /*0x118db*/ 1284, + -1, /*0x01e9*/ 155, -1, /*0xa65f*/ 1012, @@ -5448,19 +5534,19 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x0567*/ 446, /*0x006e*/ 12, -1, - /*0x104ee*/ 1189, + /*0x104ee*/ 1192, -1, /*0x01e7*/ 154, /*0xa751*/ 1056, /*0x2cee*/ 955, - /*0x118d9*/ 1279, + /*0x118d9*/ 1282, -1, /*0x13f3*/ 607, /*0x0473*/ 349, /*0x04f3*/ 409, /*0x0073*/ 17, /*0x026f*/ 219, - /*0x104f3*/ 1194, + /*0x104f3*/ 1197, /*0x1e73*/ 670, /*0x1ef3*/ 729, /*0x0173*/ 111, @@ -5468,15 +5554,15 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x2c61*/ 896, /*0xa753*/ 1057, -1, - /*0x118dd*/ 1283, + /*0x118dd*/ 1286, -1, -1, /*0x13ba*/ 550, /*0x043a*/ 302, /*0xa66b*/ 1018, /*0x03f3*/ 289, - /*0x1043a*/ 1145, + /*0x1043a*/ 1148, -1, -1, - /*0x10cd1*/ 1220, + /*0x10cd1*/ 1223, /*0x013a*/ 83, /*0x13d5*/ 577, /*0x0455*/ 329, @@ -5491,21 +5577,21 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x03ba*/ 255, -1, /*0x0586*/ 477, - /*0x10cd3*/ 1222, + /*0x10cd3*/ 1225, /*0x24d5*/ 828, /*0x01dd*/ 149, -1, - /*0x118df*/ 1285, + /*0x118df*/ 1288, /*0x10d3*/ 481, /*0x2c65*/ 897, -1, - /*0x018c*/ 121, + /*0x0192*/ 122, /*0x13f5*/ 609, /*0x0475*/ 350, /*0x04f5*/ 410, /*0x0075*/ 19, /*0x1f57*/ 775, - /*0x104f5*/ 1196, + /*0x104f5*/ 1199, /*0x1e75*/ 671, /*0x1ef5*/ 730, /*0x0175*/ 112, @@ -5513,22 +5599,22 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x044f*/ 323, /*0x04cf*/ 391, /*0xa657*/ 1008, - /*0x1044f*/ 1166, - /*0x1e92a*/ 1326, + /*0x1044f*/ 1169, + /*0x1e92a*/ 1329, /*0x1e4f*/ 652, /*0x1ecf*/ 711, /*0x014f*/ 93, /*0x2ccf*/ 943, -1, - /*0x1e926*/ 1322, + /*0x1e926*/ 1325, /*0x1f00*/ 736, /*0x01df*/ 150, /*0x13b2*/ 542, /*0x0432*/ 294, /*0x1f02*/ 738, -1, - /*0x10432*/ 1137, - /*0x10cf1*/ 1252, + /*0x10432*/ 1140, + /*0x10cf1*/ 1255, /*0x2d16*/ 979, -1, /*0x2d14*/ 977, @@ -5543,19 +5629,19 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) -1, /*0x2d0b*/ 968, /*0x03b2*/ 247, - /*0x1e928*/ 1324, - /*0x0188*/ 120, + /*0x1e928*/ 1327, + /*0x018c*/ 121, /*0x019e*/ 126, - -1, + /*0x0188*/ 120, /*0x2c59*/ 890, /*0x056b*/ 450, - /*0x1e938*/ 1340, + /*0x1e938*/ 1343, /*0x13c9*/ 565, /*0x0449*/ 317, -1, /*0x01eb*/ 156, - /*0x10449*/ 1160, - /*0x10cee*/ 1249, + /*0x10449*/ 1163, + /*0x10cee*/ 1252, /*0x1e49*/ 649, /*0x1ec9*/ 708, /*0x0251*/ 200, @@ -5567,11 +5653,10 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) -1, /*0xa755*/ 1058, -1, - /*0x118d7*/ 1277, + /*0x118d7*/ 1280, /*0x01ef*/ 158, /*0x03c9*/ 269, - /*0x2d12*/ 975, - -1, + -1, -1, /*0x10f3*/ 513, /*0x0253*/ 202, -1, -1, -1, -1, @@ -5586,7 +5671,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0xa79b*/ 1085, /*0xa651*/ 1005, -1, -1, -1, -1, - /*0x10cd5*/ 1224, + /*0x10cd5*/ 1227, -1, /*0x1f53*/ 773, -1, @@ -5597,7 +5682,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x044d*/ 321, -1, /*0xa653*/ 1006, - /*0x1044d*/ 1164, + /*0x1044d*/ 1167, -1, /*0x1e4d*/ 651, /*0x1ecd*/ 710, @@ -5616,60 +5701,58 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x01ed*/ 157, /*0x13cb*/ 567, /*0x044b*/ 319, - /*0x10ccf*/ 1218, + /*0x10ccf*/ 1221, -1, - /*0x1044b*/ 1162, + /*0x1044b*/ 1165, -1, /*0x1e4b*/ 650, /*0x1ecb*/ 709, /*0x014b*/ 91, /*0x2ccb*/ 941, /*0x1f71*/ 785, - /*0x2d0c*/ 969, - /*0x1e93e*/ 1346, + /*0x2d12*/ 975, + /*0x1e93e*/ 1349, -1, -1, -1, /*0xa749*/ 1052, -1, -1, /*0x03cb*/ 271, -1, - /*0x118d1*/ 1271, + /*0x118d1*/ 1274, /*0x13c3*/ 559, /*0x0443*/ 311, -1, - /*0x1e92e*/ 1330, - /*0x10443*/ 1154, + /*0x1e92e*/ 1333, + /*0x10443*/ 1157, -1, /*0x1e43*/ 646, /*0x1ec3*/ 705, - /*0x1e92c*/ 1328, + /*0x1e92c*/ 1331, /*0x2cc3*/ 937, /*0x2d20*/ 989, /*0x0580*/ 471, -1, -1, - /*0x118d3*/ 1273, + /*0x118d3*/ 1276, /*0x0582*/ 473, -1, -1, -1, /*0x03c3*/ 263, /*0x2c57*/ 888, - /*0x10cc9*/ 1212, + /*0x10cc9*/ 1215, /*0x13c1*/ 557, /*0x0441*/ 309, -1, /*0x00e1*/ 26, - /*0x10441*/ 1152, + /*0x10441*/ 1155, /*0x1f73*/ 787, /*0x1e41*/ 645, /*0x1ec1*/ 704, -1, /*0x2cc1*/ 936, -1, -1, - /*0x2d08*/ 965, + /*0x2d0c*/ 969, /*0x2d1e*/ 987, - -1, + /*0x2d08*/ 965, /*0x13a4*/ 528, - -1, - /*0xa78c*/ 1079, - -1, + -1, -1, -1, /*0x03c1*/ 262, -1, /*0xa74d*/ 1054, @@ -5688,32 +5771,33 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x0447*/ 315, /*0x00e5*/ 30, /*0xa655*/ 1007, - /*0x10447*/ 1158, + /*0x10447*/ 1161, /*0x024f*/ 198, /*0x1e47*/ 648, /*0x1ec7*/ 707, /*0xa74b*/ 1053, /*0x2cc7*/ 939, - /*0x0371*/ 236, - -1, + -1, -1, /*0x00e9*/ 34, - /*0x10ccd*/ 1216, + /*0x10ccd*/ 1219, /*0x13c5*/ 561, /*0x0445*/ 313, /*0x0571*/ 456, /*0x1f75*/ 789, - /*0x10445*/ 1156, + /*0x10445*/ 1159, /*0x03c7*/ 267, /*0x1e45*/ 647, /*0x1ec5*/ 706, /*0x00e7*/ 32, /*0x2cc5*/ 938, - -1, -1, -1, -1, -1, -1, + -1, -1, -1, + /*0xa78c*/ 1079, + -1, -1, /*0xa743*/ 1049, -1, -1, /*0x03c5*/ 265, /*0xa64f*/ 1004, - /*0x10ccb*/ 1214, + /*0x10ccb*/ 1217, -1, -1, /*0x2c51*/ 882, -1, @@ -5724,18 +5808,17 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x2d00*/ 957, /*0x0066*/ 5, /*0x0249*/ 195, - /*0x104e6*/ 1181, + /*0x104e6*/ 1184, /*0x2d02*/ 959, - /*0x0373*/ 237, - -1, + -1, -1, /*0x2d0e*/ 971, /*0xa741*/ 1048, /*0x2c53*/ 884, -1, /*0x0573*/ 458, /*0x24e6*/ 845, - /*0x10cc3*/ 1206, - /*0x118d5*/ 1275, + /*0x10cc3*/ 1209, + /*0x118d5*/ 1278, -1, /*0x01f3*/ 159, -1, @@ -5743,7 +5826,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x043f*/ 307, /*0x04bf*/ 383, -1, - /*0x1043f*/ 1150, + /*0x1043f*/ 1153, /*0x028a*/ 230, /*0x1e3f*/ 644, /*0x1ebf*/ 703, @@ -5755,21 +5838,21 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0xa649*/ 1001, /*0x006c*/ 10, -1, - /*0x104ec*/ 1187, - /*0x10cc1*/ 1204, - /*0x1e93a*/ 1342, + /*0x104ec*/ 1190, + /*0x10cc1*/ 1207, + /*0x1e93a*/ 1345, /*0x03bf*/ 260, /*0x2cec*/ 954, /*0x1f04*/ 740, -1, -1, -1, /*0xa747*/ 1051, - /*0x13a2*/ 526, - /*0x118cf*/ 1269, + -1, + /*0x118cf*/ 1272, /*0x13b7*/ 547, /*0x0437*/ 299, /*0x04b7*/ 379, /*0x1f11*/ 745, - /*0x10437*/ 1142, + /*0x10437*/ 1145, /*0x024d*/ 197, /*0x1e37*/ 640, /*0x1eb7*/ 699, @@ -5778,35 +5861,35 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) -1, /*0xa745*/ 1050, /*0x0575*/ 460, - /*0x0292*/ 233, + /*0x13a2*/ 526, /*0x13b5*/ 545, /*0x0435*/ 297, /*0x04b5*/ 378, /*0x01f5*/ 160, - /*0x10435*/ 1140, + /*0x10435*/ 1143, /*0x03b7*/ 252, /*0x1e35*/ 639, /*0x1eb5*/ 698, /*0x0135*/ 81, /*0x2cb5*/ 930, - /*0x10cc7*/ 1210, + /*0x10cc7*/ 1213, -1, -1, /*0x024b*/ 196, -1, - /*0x16e61*/ 1287, + /*0x16e61*/ 1290, -1, -1, -1, /*0x03b5*/ 250, /*0xa64d*/ 1003, -1, -1, /*0x00eb*/ 36, - /*0x10cc5*/ 1208, + /*0x10cc5*/ 1211, /*0x2c73*/ 902, - /*0x118c9*/ 1263, + /*0x118c9*/ 1266, /*0x13b3*/ 543, /*0x0433*/ 295, /*0x04b3*/ 377, - /*0x1e932*/ 1334, - /*0x10433*/ 1138, + /*0x1e932*/ 1337, + /*0x10433*/ 1141, -1, /*0x1e33*/ 638, /*0x1eb3*/ 697, @@ -5814,7 +5897,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x2cb3*/ 929, -1, /*0x00ef*/ 40, - /*0x16e63*/ 1289, + /*0x16e63*/ 1292, -1, /*0x2c3a*/ 859, /*0xa64b*/ 1002, @@ -5822,41 +5905,41 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x0440*/ 308, /*0xa73f*/ 1047, /*0x03b3*/ 248, - /*0x10440*/ 1151, + /*0x10440*/ 1154, -1, - /*0x16e65*/ 1291, + /*0x16e65*/ 1294, /*0x2c55*/ 886, /*0x0140*/ 86, - /*0x10ce6*/ 1241, + /*0x10ce6*/ 1244, /*0x01c9*/ 139, -1, -1, /*0x1f43*/ 769, /*0x10e6*/ 500, -1, - /*0x16e69*/ 1295, + /*0x16e69*/ 1298, -1, - /*0x028c*/ 232, + /*0x0292*/ 233, /*0x03c0*/ 261, -1, /*0xa643*/ 998, - -1, + /*0x0371*/ 236, /*0x0479*/ 352, /*0x04f9*/ 412, /*0x0079*/ 23, - /*0x16e67*/ 1293, - /*0x104f9*/ 1200, + /*0x16e67*/ 1296, + /*0x104f9*/ 1203, /*0x1e79*/ 673, /*0x1ef9*/ 732, /*0xa737*/ 1043, /*0x0511*/ 424, - /*0x118cd*/ 1267, + /*0x118cd*/ 1270, /*0x1d79*/ 610, /*0x021d*/ 179, /*0x1f41*/ 767, -1, -1, /*0x2c4f*/ 880, -1, - /*0x10cec*/ 1247, + /*0x10cec*/ 1250, -1, -1, /*0xa641*/ 997, /*0xa735*/ 1042, @@ -5869,17 +5952,18 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x13ad*/ 537, /*0x2c32*/ 851, /*0x04ad*/ 374, - /*0x118cb*/ 1265, - /*0x1042d*/ 1132, + /*0x118cb*/ 1268, + /*0x1042d*/ 1135, /*0x2d1a*/ 983, /*0x1e2d*/ 635, /*0x1ead*/ 694, /*0x012d*/ 78, /*0x2cad*/ 926, - -1, -1, - /*0x0288*/ 228, - /*0x029e*/ 235, + /*0x0373*/ 237, -1, + /*0x028c*/ 232, + /*0x029e*/ 235, + /*0x0288*/ 228, /*0x13a5*/ 529, -1, /*0x04a5*/ 370, @@ -5890,7 +5974,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x1ea5*/ 690, /*0x0125*/ 74, /*0x2ca5*/ 922, - /*0x118c3*/ 1257, + /*0x118c3*/ 1260, -1, /*0xa647*/ 1000, /*0x2c49*/ 874, @@ -5904,26 +5988,26 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x1ea3*/ 689, /*0x0123*/ 73, /*0x2ca3*/ 921, - /*0xff59*/ 1125, + /*0xff59*/ 1128, /*0x0266*/ 213, /*0xa645*/ 999, -1, -1, /*0x048f*/ 359, -1, -1, - /*0x118c1*/ 1255, + /*0x118c1*/ 1258, /*0x1e0f*/ 620, /*0x1e8f*/ 684, /*0x010f*/ 63, /*0x2c8f*/ 911, /*0xa69b*/ 1033, -1, -1, -1, - /*0x1e943*/ 1351, + /*0x1e943*/ 1354, /*0xa68b*/ 1025, -1, -1, /*0x023f*/ 191, /*0x1f66*/ 782, -1, - /*0x10cc0*/ 1203, + /*0x10cc0*/ 1206, -1, -1, /*0x1fe1*/ 803, -1, @@ -5937,11 +6021,11 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x2c81*/ 904, -1, /*0x2c4d*/ 878, - /*0x1e941*/ 1349, + /*0x1e941*/ 1352, /*0x0280*/ 224, - /*0x16e6b*/ 1297, + /*0x16e6b*/ 1300, /*0x2175*/ 811, - /*0x118c7*/ 1261, + /*0x118c7*/ 1264, /*0x0282*/ 225, -1, -1, -1, /*0xa72d*/ 1039, @@ -5949,10 +6033,10 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x051d*/ 430, /*0x10f9*/ 519, -1, -1, - /*0x1e924*/ 1320, + /*0x1e924*/ 1323, -1, - /*0x16e6f*/ 1301, - /*0x118c5*/ 1259, + /*0x16e6f*/ 1304, + /*0x118c5*/ 1262, /*0x00f1*/ 42, -1, /*0x2c4b*/ 876, @@ -5963,7 +6047,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x13a7*/ 531, -1, /*0x04a7*/ 371, - /*0x1f22*/ 752, + -1, /*0x2d04*/ 961, /*0x1f37*/ 765, /*0x1e27*/ 632, @@ -5976,7 +6060,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x2d11*/ 974, -1, -1, /*0x2c43*/ 868, - -1, + /*0x1f22*/ 752, /*0x1f35*/ 763, /*0x00ee*/ 39, -1, @@ -5984,14 +6068,14 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x04fb*/ 413, -1, /*0x0233*/ 189, - /*0x104fb*/ 1202, + /*0x104fb*/ 1205, /*0x1e7b*/ 674, /*0x1efb*/ 733, /*0x13b1*/ 541, /*0x0431*/ 293, /*0x04b1*/ 376, /*0x00f3*/ 44, - /*0x10431*/ 1136, + /*0x10431*/ 1139, -1, /*0x1e31*/ 637, /*0x1eb1*/ 696, @@ -6001,7 +6085,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x03fb*/ 291, /*0x0240*/ 192, /*0x0566*/ 445, - /*0x16e6d*/ 1299, + /*0x16e6d*/ 1302, /*0x047d*/ 354, /*0x04fd*/ 414, /*0x1f33*/ 761, @@ -6009,7 +6093,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x03b1*/ 246, /*0x1e7d*/ 675, /*0x1efd*/ 734, - /*0xff57*/ 1123, + /*0xff57*/ 1126, /*0x047f*/ 355, /*0x04ff*/ 415, /*0x1d7d*/ 611, @@ -6020,14 +6104,14 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x043d*/ 305, /*0x04bd*/ 382, /*0x1f40*/ 766, - /*0x1043d*/ 1148, + /*0x1043d*/ 1151, /*0xa791*/ 1080, /*0x1e3d*/ 643, /*0x1ebd*/ 702, /*0x01bf*/ 137, /*0x2cbd*/ 934, -1, -1, - /*0x1e93f*/ 1347, + /*0x1e93f*/ 1350, -1, /*0x056c*/ 451, /*0x2c47*/ 872, @@ -6037,7 +6121,7 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) -1, /*0x007a*/ 24, -1, - /*0x104fa*/ 1201, + /*0x104fa*/ 1204, /*0x1f79*/ 793, -1, /*0x017a*/ 114, @@ -6047,40 +6131,40 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x0439*/ 301, /*0x04b9*/ 380, /*0x022d*/ 186, - /*0x10439*/ 1144, + /*0x10439*/ 1147, -1, /*0x1e39*/ 641, /*0x1eb9*/ 700, - /*0x1e922*/ 1318, + -1, /*0x2cb9*/ 932, - /*0x1e937*/ 1339, + /*0x1e937*/ 1342, -1, /*0x13c2*/ 558, /*0x0442*/ 310, /*0x04c2*/ 384, -1, - /*0x10442*/ 1153, + /*0x10442*/ 1156, -1, /*0x0225*/ 182, /*0x03b9*/ 254, /*0x0142*/ 87, /*0x13d0*/ 572, /*0x0450*/ 324, - -1, - /*0x1e935*/ 1337, + /*0x1e922*/ 1321, + /*0x1e935*/ 1340, /*0x13f2*/ 606, - -1, + /*0x017e*/ 116, /*0x2c66*/ 898, /*0x0072*/ 16, /*0x2d24*/ 993, - /*0x104f2*/ 1193, + /*0x104f2*/ 1196, -1, /*0x0223*/ 181, -1, /*0x2d1d*/ 986, /*0x24d0*/ 823, - /*0x118c0*/ 1254, - /*0xff51*/ 1117, + /*0x118c0*/ 1257, + /*0xff51*/ 1120, -1, /*0x1f25*/ 755, -1, -1, @@ -6093,11 +6177,11 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) -1, /*0xa77f*/ 1074, -1, - /*0x1e933*/ 1335, - /*0xff53*/ 1119, + /*0x1e933*/ 1338, + /*0xff53*/ 1122, /*0x1f23*/ 753, -1, - /*0x16e71*/ 1303, + /*0x16e71*/ 1306, -1, /*0xa73d*/ 1046, /*0x2c6c*/ 901, @@ -6105,11 +6189,11 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x043b*/ 303, /*0x04bb*/ 381, -1, - /*0x1043b*/ 1146, + /*0x1043b*/ 1149, -1, /*0x1e3b*/ 642, /*0x1ebb*/ 701, - /*0x1e940*/ 1348, + /*0x1e940*/ 1351, /*0x2cbb*/ 933, /*0x0201*/ 165, -1, -1, -1, @@ -6122,11 +6206,11 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) -1, /*0x0579*/ 464, /*0x10ff*/ 523, - /*0x16e6e*/ 1300, + /*0x16e6e*/ 1303, -1, /*0xa79d*/ 1086, /*0x01f9*/ 161, - /*0x017c*/ 115, + -1, /*0xa739*/ 1044, -1, /*0x2c35*/ 854, @@ -6134,8 +6218,8 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x13af*/ 539, -1, /*0x04af*/ 375, - /*0x16e73*/ 1305, - /*0x1042f*/ 1134, + /*0x16e73*/ 1308, + /*0x1042f*/ 1137, -1, /*0x1e2f*/ 636, /*0x1eaf*/ 695, @@ -6155,8 +6239,8 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x01ad*/ 131, /*0x04a9*/ 372, /*0x2c33*/ 852, - /*0x10429*/ 1128, - /*0x1e92d*/ 1329, + /*0x10429*/ 1131, + /*0x1e92d*/ 1332, /*0x1e29*/ 633, /*0x1ea9*/ 692, /*0x0129*/ 76, @@ -6164,45 +6248,45 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) -1, /*0x0525*/ 434, -1, - /*0x10cc2*/ 1205, + /*0x10cc2*/ 1208, -1, /*0x1f27*/ 757, /*0x01a5*/ 129, -1, -1, /*0x2c40*/ 865, - /*0x1e925*/ 1321, + /*0x1e925*/ 1324, -1, - /*0x10cd0*/ 1219, + /*0x10cd0*/ 1222, /*0x0231*/ 188, - /*0x2d22*/ 991, + /*0x10fe*/ 522, /*0x0523*/ 433, - /*0x10cf2*/ 1253, + /*0x10cf2*/ 1256, /*0x10d0*/ 478, - /*0x16e75*/ 1307, + /*0x16e75*/ 1310, -1, /*0x01a3*/ 128, /*0x10f2*/ 512, -1, /*0xa73b*/ 1045, - /*0x1e923*/ 1319, + /*0x1e923*/ 1322, /*0x1fd1*/ 801, /*0x1f7b*/ 795, /*0x027d*/ 223, /*0x050f*/ 423, - -1, - /*0xff55*/ 1121, + /*0x2d22*/ 991, + /*0xff55*/ 1124, /*0x13ce*/ 570, /*0x044e*/ 322, /*0x04ce*/ 390, /*0x1f31*/ 759, - /*0x1044e*/ 1165, + /*0x1044e*/ 1168, -1, -1, /*0xa7bf*/ 1098, /*0x0477*/ 351, /*0x04f7*/ 411, /*0x0077*/ 21, - /*0xa77c*/ 1073, - /*0x104f7*/ 1198, + -1, + /*0x104f7*/ 1201, /*0x1e77*/ 672, /*0x1ef7*/ 731, /*0x0177*/ 113, @@ -6219,31 +6303,31 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x0103*/ 57, /*0x2c83*/ 905, /*0x13e8*/ 596, - /*0xff4f*/ 1115, + /*0xff4f*/ 1118, -1, /*0x0068*/ 7, -1, - /*0x104e8*/ 1183, + /*0x104e8*/ 1186, /*0xa7b7*/ 1094, - /*0x13c6*/ 562, - /*0x0446*/ 314, - /*0x04c6*/ 386, + /*0x13c8*/ 564, + /*0x0448*/ 316, + /*0x04c8*/ 387, -1, - /*0x10446*/ 1157, + /*0x10448*/ 1162, -1, - /*0x13f0*/ 604, + /*0x13ea*/ 598, /*0x24e8*/ 847, - /*0x0146*/ 89, - /*0x0070*/ 14, + /*0x0148*/ 90, + /*0x006a*/ 8, /*0xa729*/ 1037, - /*0x104f0*/ 1191, + /*0x104ea*/ 1188, -1, /*0xa7b5*/ 1093, -1, -1, /*0x1f7a*/ 794, -1, /*0x0242*/ 193, - /*0x03c6*/ 266, + /*0x03c8*/ 268, -1, -1, /*0x0499*/ 364, /*0x0527*/ 435, @@ -6252,16 +6336,17 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x0250*/ 199, /*0x0119*/ 68, /*0x2c99*/ 916, - -1, + /*0x017c*/ 115, /*0x0272*/ 221, - /*0x1e927*/ 1323, + /*0x1e927*/ 1326, /*0x0581*/ 472, -1, - /*0xff49*/ 1109, + /*0xff49*/ 1112, -1, -1, - /*0x037b*/ 239, + /*0x0076*/ 20, /*0x1f42*/ 768, - -1, -1, + /*0x104f6*/ 1200, + -1, /*0x00e6*/ 31, -1, /*0x057b*/ 466, @@ -6270,79 +6355,79 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x0444*/ 312, /*0x04c4*/ 385, /*0x01fb*/ 162, - /*0x10444*/ 1155, + /*0x10444*/ 1158, -1, /*0x1f72*/ 786, -1, /*0x0144*/ 88, -1, -1, /*0x2d2d*/ 996, - -1, -1, - /*0x037d*/ 241, - /*0x1e931*/ 1333, + -1, -1, -1, + /*0x1e931*/ 1336, -1, -1, -1, /*0x03c4*/ 264, /*0x057d*/ 468, /*0x2179*/ 815, - /*0x13d6*/ 578, - /*0x0456*/ 330, - -1, + -1, -1, -1, /*0x01fd*/ 163, /*0x2d25*/ 994, /*0x00ec*/ 37, /*0x057f*/ 470, -1, -1, /*0x029d*/ 234, - /*0x10cce*/ 1217, + /*0x10cce*/ 1220, /*0x01ff*/ 164, - -1, -1, - /*0x24d6*/ 829, - -1, - /*0xff4d*/ 1113, -1, + /*0x13c6*/ 562, + /*0x0446*/ 314, + /*0x04c6*/ 386, + /*0xff4d*/ 1116, + /*0x10446*/ 1160, /*0x2d23*/ 992, /*0x01bd*/ 136, - /*0x0495*/ 362, -1, + /*0x0146*/ 89, /*0x10f7*/ 517, - /*0x1e93d*/ 1345, - /*0x1e15*/ 623, - /*0x1e95*/ 687, - /*0x0115*/ 66, - /*0x2c95*/ 914, + /*0x1e93d*/ 1348, -1, + /*0x1e07*/ 616, + /*0x1e87*/ 680, + /*0x0107*/ 59, + /*0x2c87*/ 907, /*0x022f*/ 187, -1, /*0x2d0f*/ 972, - -1, + /*0x03c6*/ 266, /*0x057a*/ 465, - /*0x118c2*/ 1256, + /*0x118c2*/ 1259, /*0x0205*/ 167, + -1, -1, + /*0xff4b*/ 1114, + /*0x10ce8*/ 1246, -1, - /*0x1f7c*/ 796, - /*0xff4b*/ 1111, - /*0x10ce8*/ 1243, - -1, -1, -1, - /*0x118d0*/ 1270, + /*0xa77c*/ 1073, + -1, + /*0x118d0*/ 1273, /*0x10e8*/ 502, - /*0x13ea*/ 598, - /*0x10cc6*/ 1209, -1, - /*0x006a*/ 8, + /*0x10cc8*/ 1214, + -1, -1, /*0x01b9*/ 135, - /*0x104ea*/ 1185, + -1, /*0x0229*/ 184, - /*0x10cf0*/ 1251, - /*0x1e939*/ 1341, + /*0x10cea*/ 1248, + /*0x1e939*/ 1344, /*0xa7a5*/ 1090, /*0x2d01*/ 958, /*0x1f05*/ 741, - /*0x10f0*/ 510, + /*0x10ea*/ 504, /*0x2c31*/ 850, -1, - /*0xff43*/ 1103, - -1, -1, -1, -1, - /*0x1e942*/ 1350, + /*0xff43*/ 1106, + -1, + /*0x057e*/ 469, + -1, -1, + /*0x1e942*/ 1353, -1, -1, /*0xa7a3*/ 1089, /*0x0572*/ 457, @@ -6356,57 +6441,56 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x0121*/ 72, /*0x2ca1*/ 920, /*0xa691*/ 1028, - /*0xff41*/ 1101, - /*0x1e07*/ 616, - /*0x1e87*/ 680, - /*0x0107*/ 59, - /*0x2c87*/ 907, + /*0xff41*/ 1104, + -1, -1, -1, + /*0x10f6*/ 516, -1, /*0x2c3d*/ 862, -1, - /*0x0493*/ 361, + /*0x0495*/ 362, -1, - /*0x10cc4*/ 1207, + /*0x10cc4*/ 1210, /*0x2d27*/ 995, - /*0x1e13*/ 622, - /*0x1e93*/ 686, - /*0x0113*/ 65, - /*0x2c93*/ 913, + /*0x1e15*/ 623, + /*0x1e95*/ 687, + /*0x0115*/ 66, + /*0x2c95*/ 914, -1, -1, /*0x13ab*/ 535, /*0x00f9*/ 49, /*0x04ab*/ 373, -1, - /*0x1042b*/ 1130, + /*0x1042b*/ 1133, /*0xa781*/ 1075, /*0x1e2b*/ 634, /*0x1eab*/ 693, /*0x012b*/ 77, /*0x2cab*/ 925, - /*0x13e4*/ 592, + /*0x13f0*/ 604, /*0x0203*/ 166, - /*0x1e93b*/ 1343, - /*0x0064*/ 3, - /*0x10cd6*/ 1225, - /*0x104e4*/ 1179, - /*0x037c*/ 240, - /*0xff47*/ 1107, + /*0x1e93b*/ 1346, + /*0x0070*/ 14, + -1, + /*0x104f0*/ 1194, + -1, + /*0xff47*/ 1110, /*0x2c39*/ 858, - /*0x10d6*/ 484, + /*0x13e4*/ 592, /*0x1f77*/ 791, /*0x0268*/ 214, - /*0x057c*/ 467, + /*0x0064*/ 3, /*0x13e2*/ 590, - /*0x24e4*/ 843, - /*0x16e66*/ 1292, + /*0x104e4*/ 1182, + /*0x16e66*/ 1295, /*0x0062*/ 1, - -1, - /*0x104e2*/ 1177, - -1, + /*0x10cc6*/ 1212, + /*0x104e2*/ 1180, + /*0x037b*/ 239, /*0x2c42*/ 867, - /*0xff45*/ 1105, + /*0xff45*/ 1108, /*0x1f03*/ 739, - -1, -1, + /*0x24e4*/ 843, + /*0x026a*/ 216, /*0x052f*/ 439, -1, /*0x24e2*/ 841, @@ -6414,531 +6498,529 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) /*0x2c50*/ 881, -1, /*0x0505*/ 418, - -1, + /*0x13f4*/ 608, /*0xa7a7*/ 1091, - /*0x1e92f*/ 1331, - -1, + /*0x1e92f*/ 1334, + /*0x0074*/ 18, /*0x0185*/ 119, - /*0x13e0*/ 588, + /*0x104f4*/ 1198, /*0x0219*/ 177, /*0x13da*/ 582, /*0x045a*/ 334, + /*0x037d*/ 241, -1, - /*0x104e0*/ 1175, /*0x217b*/ 817, - /*0x104da*/ 1169, - /*0x1f70*/ 784, - /*0x16e6c*/ 1298, + /*0x104da*/ 1172, + /*0x0493*/ 361, + /*0x16e6c*/ 1301, /*0x0529*/ 436, - /*0x0078*/ 22, - /*0x10cea*/ 1245, - /*0x104f8*/ 1199, - /*0x24e0*/ 839, -1, + /*0x1e13*/ 622, + /*0x1e93*/ 686, + /*0x0113*/ 65, + /*0x2c93*/ 913, /*0x24da*/ 833, - /*0x10ea*/ 504, + /*0x13e0*/ 588, -1, - /*0x1e929*/ 1325, + /*0x1e929*/ 1328, /*0x13dc*/ 584, /*0x045c*/ 336, - /*0x13cc*/ 568, - /*0x044c*/ 320, - /*0x04cc*/ 389, - /*0x104dc*/ 1171, - /*0x1044c*/ 1163, - /*0x03f8*/ 290, + /*0x104e0*/ 1178, + -1, + /*0x1f7c*/ 796, + /*0x104dc*/ 1174, + -1, -1, /*0x217d*/ 819, - /*0x118ce*/ 1268, + /*0x118ce*/ 1271, /*0x2c3b*/ 860, - -1, - /*0x13d8*/ 580, - /*0x0458*/ 332, + /*0x24e0*/ 839, + -1, -1, /*0x24dc*/ 835, -1, /*0x217f*/ 821, - /*0x104d8*/ 1167, + /*0x1f76*/ 790, -1, -1, /*0xa72b*/ 1038, - /*0x03cc*/ 272, + -1, /*0x0585*/ 476, + /*0x13d6*/ 578, + /*0x0456*/ 330, + -1, -1, -1, + /*0x1f44*/ 770, + -1, /*0x13d4*/ 576, /*0x0454*/ 328, - -1, - /*0x24d8*/ 831, - -1, - /*0x1f44*/ 770, - /*0x0256*/ 204, - /*0x13d2*/ 574, - /*0x0452*/ 326, - /*0x0377*/ 238, - -1, -1, + -1, -1, -1, /*0xa7bd*/ 1097, /*0x01ce*/ 141, - /*0x24d4*/ 827, + /*0x24d6*/ 829, /*0x0577*/ 462, - -1, -1, - /*0x017e*/ 116, - /*0x0497*/ 363, + -1, -1, -1, -1, /*0x217a*/ 816, - /*0x24d2*/ 825, - /*0x118c6*/ 1260, - /*0x1e17*/ 624, - /*0x0215*/ 175, - /*0x0117*/ 67, - /*0x2c97*/ 915, - /*0x0503*/ 417, + /*0x24d4*/ 827, + /*0x118c8*/ 1265, + -1, -1, + /*0x0207*/ 168, -1, - /*0x0076*/ 20, - /*0x13f4*/ 608, - /*0x104f6*/ 1197, + /*0x0503*/ 417, + -1, -1, + /*0x13d8*/ 580, + /*0x0458*/ 332, /*0x0183*/ 118, - /*0x0074*/ 18, - /*0x10ce4*/ 1239, - /*0x104f4*/ 1195, + -1, + /*0x10cf0*/ 1254, + /*0x104d8*/ 1170, -1, /*0x0568*/ 447, -1, - /*0x10e4*/ 498, - /*0x13bc*/ 552, - /*0x043c*/ 304, + /*0x10f0*/ 510, + -1, -1, /*0xa7b9*/ 1095, + /*0x10ce4*/ 1242, + /*0x24d8*/ 831, -1, - /*0x1043c*/ 1147, - /*0x1f15*/ 749, - -1, - /*0x10ce2*/ 1237, - /*0x013c*/ 84, - /*0x01c6*/ 138, - /*0x0570*/ 455, - /*0x026a*/ 216, + /*0x1f07*/ 743, + /*0x10ce2*/ 1240, + /*0x10e4*/ 498, + /*0x217e*/ 820, + /*0x056a*/ 449, + /*0x0497*/ 363, /*0x10e2*/ 496, - /*0x13c8*/ 564, - /*0x0448*/ 316, - /*0x04c8*/ 387, + /*0x13d2*/ 574, + /*0x0452*/ 326, + /*0x1e17*/ 624, /*0x2172*/ 808, - /*0x10448*/ 1159, - -1, - /*0x03bc*/ 257, - -1, - /*0x0148*/ 90, - /*0x16e79*/ 1311, + /*0x0117*/ 67, + /*0x2c97*/ 915, + /*0x13b0*/ 540, + /*0x0430*/ 292, -1, + /*0x16e79*/ 1314, + /*0x10430*/ 1138, /*0x0519*/ 428, /*0x00fb*/ 51, - -1, -1, - /*0x118c4*/ 1258, + /*0x057c*/ 467, + /*0x24d2*/ 825, + /*0x118c4*/ 1261, /*0x0199*/ 124, -1, - /*0x10ce0*/ 1235, - /*0x03c8*/ 268, - /*0x10cda*/ 1229, + /*0x10f4*/ 514, -1, - /*0x0583*/ 474, - /*0x10e0*/ 494, + /*0x10cda*/ 1232, -1, + /*0x0583*/ 474, + -1, -1, /*0x10da*/ 488, - -1, -1, -1, + /*0x0576*/ 461, + -1, + /*0x0078*/ 22, /*0x2c4e*/ 879, - /*0x0207*/ 168, - /*0x10f8*/ 518, - -1, -1, + /*0x104f8*/ 1202, + -1, -1, -1, /*0x00fd*/ 53, - -1, + /*0x10ce0*/ 1238, /*0x2d05*/ 962, - /*0x118d6*/ 1276, - /*0x10cdc*/ 1231, -1, - /*0x10ccc*/ 1215, - /*0x0213*/ 174, + /*0x10cdc*/ 1234, + -1, + /*0x10e0*/ 494, + /*0x0215*/ 175, /*0x00ff*/ 55, /*0x10dc*/ 490, - -1, + /*0x03f8*/ 290, /*0x1f21*/ 751, - -1, -1, + /*0x13de*/ 586, + /*0x045e*/ 338, /*0xa7bb*/ 1096, -1, - /*0x10cd8*/ 1227, - /*0x1f07*/ 743, + /*0x118c6*/ 1263, + /*0x104de*/ 1176, -1, /*0x022b*/ 185, -1, - /*0x10d8*/ 486, - /*0x217c*/ 818, + /*0x13bc*/ 552, + /*0x043c*/ 304, -1, /*0x2c68*/ 899, - -1, -1, - /*0x10cd4*/ 1223, - /*0x1f13*/ 747, + /*0x1043c*/ 1150, + /*0x24de*/ 837, + /*0x10cd6*/ 1228, + /*0x1f15*/ 749, + /*0x013c*/ 84, -1, - /*0x01d6*/ 145, - /*0x2c46*/ 871, - /*0x10d4*/ 482, + /*0x2c48*/ 873, + /*0x10d6*/ 484, -1, - /*0x10cd2*/ 1221, + /*0x10cd4*/ 1226, /*0x00fa*/ 50, - /*0x13ca*/ 566, - /*0x044a*/ 318, - /*0x04ca*/ 388, - /*0x10d2*/ 480, - /*0x1044a*/ 1161, + -1, + /*0x2c6a*/ 900, + -1, + /*0x10d4*/ 482, + /*0x03bc*/ 257, /*0x2184*/ 822, - /*0x10fe*/ 522, - /*0x0515*/ 426, - -1, -1, -1, -1, - /*0x0195*/ 123, -1, - /*0x1f64*/ 780, + /*0x01c6*/ 138, + /*0x0507*/ 419, + /*0x1e09*/ 617, + /*0x1e89*/ 681, + /*0x0109*/ 60, + /*0x2c89*/ 908, -1, - /*0xa785*/ 1077, - /*0x13b6*/ 546, - /*0x0436*/ 298, - /*0x03ca*/ 270, + /*0x1f70*/ 784, -1, - /*0x10436*/ 1141, - /*0x10f6*/ 516, + /*0xa785*/ 1077, + -1, -1, -1, -1, + /*0x10cd8*/ 1230, -1, - /*0x13b4*/ 544, - /*0x0434*/ 296, - /*0x10f4*/ 514, + /*0x1f64*/ 780, + -1, -1, + /*0x10d8*/ 486, /*0x1f62*/ 778, - /*0x10434*/ 1139, + /*0x00fe*/ 54, -1, - /*0x0260*/ 209, + /*0x2c76*/ 903, -1, /*0xa7a9*/ 1092, /*0x048d*/ 358, - /*0x056a*/ 449, + -1, /*0x00f2*/ 43, - /*0x03b6*/ 251, + /*0x0213*/ 174, /*0x1e0d*/ 619, /*0x1e8d*/ 683, /*0x010d*/ 62, /*0x2c8d*/ 910, /*0x2c44*/ 869, /*0x2d03*/ 960, - /*0x03b4*/ 249, - /*0x10cc8*/ 1211, - /*0x1e09*/ 617, - /*0x1e89*/ 681, - /*0x0109*/ 60, - /*0x2c89*/ 908, -1, + /*0x10cd2*/ 1224, + /*0x0377*/ 238, + /*0x1f74*/ 788, + /*0x0260*/ 209, + -1, + /*0x10d2*/ 480, /*0x025c*/ 208, - /*0x1f60*/ 776, + /*0x13cc*/ 568, + /*0x044c*/ 320, + /*0x04cc*/ 389, + -1, + /*0x1044c*/ 1166, + -1, + /*0x1f13*/ 747, -1, -1, - /*0x13b0*/ 540, - /*0x0430*/ 292, - /*0x13de*/ 586, - /*0x045e*/ 338, - /*0x10430*/ 1135, - /*0x1f78*/ 792, /*0x0521*/ 432, - /*0x104de*/ 1173, - /*0x214e*/ 805, - /*0x2c56*/ 887, -1, + /*0x214e*/ 805, + -1, -1, /*0x01a1*/ 127, - /*0x0507*/ 419, - -1, - /*0x049f*/ 367, + -1, -1, + /*0x1f60*/ 776, /*0x2177*/ 813, - /*0x24de*/ 837, + /*0x03cc*/ 272, + -1, -1, + /*0x0256*/ 204, + /*0x10f8*/ 518, -1, - /*0x1e1f*/ 628, + /*0x2c46*/ 871, + /*0x0515*/ 426, + -1, + /*0x2d19*/ 982, /*0x0254*/ 203, - /*0x011f*/ 71, - /*0x2c9f*/ 919, -1, - /*0x0513*/ 425, + /*0x0195*/ 123, + /*0x13ca*/ 566, + /*0x044a*/ 318, + /*0x04ca*/ 388, -1, - /*0x2d19*/ 982, - /*0x0252*/ 201, - -1, -1, -1, -1, -1, -1, + /*0x1044a*/ 1164, -1, - /*0x00fc*/ 52, /*0x052b*/ 437, - /*0x0217*/ 176, + /*0x10cde*/ 1236, -1, /*0xa783*/ 1076, - /*0x16e7b*/ 1313, - -1, -1, -1, -1, - /*0x1e92b*/ 1327, + /*0x16e7b*/ 1316, + -1, + /*0x10de*/ 492, + /*0x037c*/ 240, + -1, + /*0x1e92b*/ 1330, + /*0x0570*/ 455, + /*0x13b6*/ 546, + /*0x0436*/ 298, + /*0x03ca*/ 270, + -1, + /*0x10436*/ 1144, + -1, + /*0x13b4*/ 544, + /*0x0434*/ 296, /*0x0564*/ 443, - -1, -1, -1, -1, - /*0x2170*/ 806, - -1, -1, -1, - /*0x2c6a*/ 900, - -1, -1, -1, - /*0x0562*/ 441, - /*0x023c*/ 190, - /*0x10cca*/ 1213, - /*0x16e7d*/ 1315, - /*0x118da*/ 1280, - -1, -1, -1, - /*0x1f76*/ 790, - -1, -1, - /*0x16e7f*/ 1317, - /*0x1f74*/ 788, - -1, -1, -1, -1, - /*0xa799*/ 1084, + /*0xa7c8*/ 1100, + /*0x10434*/ 1142, + -1, + /*0x0562*/ 441, -1, -1, - /*0xa68f*/ 1027, + /*0x16e7d*/ 1318, + /*0x118da*/ 1283, + -1, -1, + /*0x03b6*/ 251, + /*0x217c*/ 818, + -1, + /*0x0217*/ 176, + /*0x16e7f*/ 1320, -1, - /*0x118dc*/ 1282, + /*0x03b4*/ 249, + /*0x0252*/ 201, + -1, -1, + /*0xa799*/ 1084, -1, - /*0x118cc*/ 1266, + /*0x0574*/ 459, + /*0xa68f*/ 1027, + /*0x2176*/ 812, + /*0x118dc*/ 1285, -1, -1, -1, -1, -1, -1, + -1, + /*0x0513*/ 425, /*0x01da*/ 147, - /*0x0578*/ 463, - /*0x2d15*/ 978, - /*0x118d8*/ 1278, - -1, -1, -1, - /*0x16e7a*/ 1312, - -1, -1, -1, -1, -1, + /*0xa7f6*/ 1102, + -1, + /*0x2d07*/ 964, + -1, + /*0x049f*/ 367, + -1, + /*0x16e7a*/ 1315, + -1, + /*0x1e1f*/ 628, + /*0x1f30*/ 758, + /*0x011f*/ 71, + /*0x2c9f*/ 919, /*0xa681*/ 1020, - /*0x118d4*/ 1274, + /*0x118d6*/ 1279, -1, -1, -1, /*0x01dc*/ 148, - -1, - /*0x01cc*/ 140, - /*0x118d2*/ 1272, - -1, -1, -1, -1, -1, - /*0x10cde*/ 1233, -1, -1, - /*0x01d8*/ 146, - -1, - /*0x10de*/ 492, + /*0x118d4*/ 1277, + /*0x10ccc*/ 1218, -1, -1, -1, -1, -1, -1, - -1, -1, - /*0x01d4*/ 144, + /*0x1f78*/ 792, + -1, -1, -1, -1, -1, -1, + /*0x16e7e*/ 1319, -1, - /*0x16e72*/ 1304, + /*0x023c*/ 190, -1, -1, - /*0x057e*/ 469, + /*0x01d6*/ 145, -1, - /*0x01d2*/ 143, + /*0x16e72*/ 1307, + /*0x118d8*/ 1281, + -1, -1, -1, + /*0x01d4*/ 144, -1, /*0x00e8*/ 33, -1, -1, - /*0x0517*/ 427, - -1, + /*0xa787*/ 1078, + /*0x10cca*/ 1216, /*0x2d21*/ 990, - -1, -1, -1, -1, -1, - /*0x2d07*/ 964, - /*0x0576*/ 461, - /*0x00f0*/ 41, - /*0xff42*/ 1102, - -1, - /*0x0574*/ 459, - /*0x118c8*/ 1262, + /*0x0209*/ 169, + -1, -1, -1, -1, -1, -1, + /*0x00ea*/ 35, + /*0xff42*/ 1105, + -1, -1, + /*0x118d2*/ 1275, -1, /*0x2c5a*/ 891, - -1, -1, - /*0x2d13*/ 976, - /*0xff50*/ 1116, - -1, -1, -1, -1, -1, -1, + -1, + /*0x01d8*/ 146, + /*0x2d15*/ 978, + /*0xff50*/ 1119, + -1, -1, -1, -1, -1, + /*0x00fc*/ 52, -1, -1, -1, -1, /*0x020d*/ 171, - /*0x1e93c*/ 1344, + /*0x0517*/ 427, -1, /*0x2c5c*/ 893, + -1, -1, -1, -1, + /*0x00f6*/ 47, -1, - /*0x2c4c*/ 877, - -1, - /*0x1f36*/ 764, - /*0x0209*/ 169, - -1, -1, -1, - /*0x16e7c*/ 1314, - -1, - /*0x1f34*/ 762, - /*0x2c58*/ 889, - -1, -1, -1, + /*0x01d2*/ 143, + -1, -1, -1, -1, -1, + /*0x01b0*/ 132, + -1, -1, /*0x1fb1*/ 799, - -1, + /*0x1e930*/ 1335, /*0xa7a1*/ 1088, -1, -1, -1, -1, + /*0x2c56*/ 887, + -1, -1, + /*0x118de*/ 1287, + /*0x0578*/ 463, + -1, -1, /*0x2c54*/ 885, - /*0xa787*/ 1078, - -1, -1, -1, -1, -1, - /*0x2c52*/ 883, - -1, - /*0x021f*/ 180, + -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, - /*0xa793*/ 1081, - -1, -1, -1, -1, -1, - /*0x1f30*/ 758, - -1, -1, -1, /*0x0283*/ 226, + /*0x2170*/ 806, -1, -1, -1, - /*0x2c76*/ 903, - /*0x118ca*/ 1264, - -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, - /*0x2c3c*/ 861, - -1, -1, -1, -1, -1, -1, + /*0x2d13*/ 976, + -1, -1, + /*0x2c58*/ 889, -1, -1, -1, -1, -1, -1, - /*0x2c48*/ 873, -1, -1, -1, -1, -1, -1, - /*0x00ea*/ 35, + /*0x1e93c*/ 1347, -1, -1, -1, -1, -1, -1, - -1, - /*0x2178*/ 814, - /*0x16e77*/ 1309, - -1, - /*0x01b6*/ 134, - -1, -1, - /*0x1fd0*/ 800, - /*0x1e936*/ 1338, -1, -1, - /*0x01b4*/ 133, - -1, - /*0x050d*/ 422, - /*0x2d17*/ 980, - /*0x1e934*/ 1336, - /*0x118de*/ 1284, - -1, -1, -1, -1, /*0x0509*/ 420, - -1, -1, - /*0x16e68*/ 1294, - -1, -1, -1, -1, - /*0xff4e*/ 1114, - -1, -1, -1, -1, -1, -1, + /*0x2c52*/ 883, -1, - /*0x16e70*/ 1302, + /*0x2174*/ 810, -1, -1, -1, - /*0x01b0*/ 132, + /*0x2c30*/ 849, + -1, -1, -1, -1, + /*0x1f36*/ 764, + -1, -1, -1, -1, + /*0x16e77*/ 1312, + /*0x1f34*/ 762, -1, -1, -1, - /*0x1e930*/ 1332, - /*0x217e*/ 820, + /*0x1fd0*/ 800, + -1, -1, + /*0xa793*/ 1081, + /*0x118cc*/ 1269, -1, - /*0x051f*/ 431, + /*0x050d*/ 422, -1, -1, -1, -1, -1, -1, + -1, -1, + /*0x021f*/ 180, -1, - /*0x2c4a*/ 875, - -1, - /*0x00e4*/ 29, - -1, - /*0xa685*/ 1022, - -1, - /*0x2176*/ 812, - -1, - /*0xa797*/ 1083, - /*0xff46*/ 1106, - /*0x2174*/ 810, + /*0x16e68*/ 1297, -1, -1, -1, -1, - /*0x00e2*/ 27, - -1, - /*0x2c36*/ 855, - -1, -1, -1, -1, -1, -1, - /*0x2c34*/ 853, - -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, + /*0xff4e*/ 1117, -1, -1, - /*0x00e0*/ 25, - -1, -1, -1, -1, -1, -1, + /*0x2c5e*/ 895, + -1, -1, -1, -1, + /*0x16e6a*/ 1299, + /*0x01cc*/ 140, + -1, -1, + /*0x2c3c*/ 861, -1, - /*0x00f8*/ 48, + /*0x118ca*/ 1267, + -1, -1, + /*0x2d17*/ 980, -1, -1, -1, -1, -1, -1, - /*0x2c30*/ 849, - /*0xff44*/ 1104, - /*0x2c5e*/ 895, + /*0x16e7c*/ 1317, -1, -1, -1, -1, + /*0x00f0*/ 41, /*0x0287*/ 227, + /*0xa685*/ 1022, + -1, -1, -1, -1, + /*0xff48*/ 1111, + /*0x16e76*/ 1311, + /*0x00e4*/ 29, + -1, -1, -1, + /*0x00e2*/ 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - /*0xff56*/ 1122, + /*0x01b6*/ 134, -1, -1, - /*0xa683*/ 1021, - -1, -1, -1, -1, -1, -1, + /*0x00f4*/ 45, + /*0x1e936*/ 1341, -1, - /*0x16e6a*/ 1296, - -1, -1, -1, - /*0x00fe*/ 54, + /*0x01b4*/ 133, -1, -1, - /*0x2d0d*/ 970, + /*0xa797*/ 1083, + /*0x1e934*/ 1339, -1, -1, -1, -1, -1, -1, + -1, -1, -1, + /*0x2c4c*/ 877, + -1, -1, -1, + /*0xff44*/ 1107, + /*0x00e0*/ 25, -1, + /*0x2178*/ 814, + -1, -1, -1, -1, -1, -1, + -1, -1, /*0x2d09*/ 966, -1, -1, -1, -1, - /*0x00f6*/ 47, - -1, -1, -1, - /*0x00f4*/ 45, - -1, -1, -1, -1, - /*0xa699*/ 1032, - -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, - /*0x2d1f*/ 988, + /*0x051f*/ 431, -1, -1, -1, -1, -1, -1, + -1, + /*0xa683*/ 1021, + -1, -1, + /*0x2c4a*/ 875, -1, -1, -1, -1, -1, -1, + /*0xff46*/ 1109, + -1, -1, -1, -1, + /*0x2d0d*/ 970, + -1, -1, -1, -1, + /*0x2c36*/ 855, + -1, -1, -1, -1, -1, + /*0x2c34*/ 853, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - /*0x16e64*/ 1290, + /*0xa699*/ 1032, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - /*0x16e62*/ 1288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, - /*0xa79f*/ 1087, - -1, -1, - /*0xa695*/ 1030, -1, -1, -1, -1, -1, -1, - /*0x16e60*/ 1286, + -1, -1, -1, -1, -1, + /*0x16e70*/ 1305, -1, -1, -1, -1, -1, -1, + /*0x00f8*/ 48, -1, - /*0x16e78*/ 1310, - -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, + /*0x16e64*/ 1293, + -1, -1, -1, + /*0x16e62*/ 1291, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, - /*0xff5a*/ 1126, + -1, -1, -1, -1, -1, + /*0xa687*/ 1023, + /*0x16e74*/ 1309, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, + /*0xa7ca*/ 1101, -1, -1, -1, -1, -1, -1, -1, -1, -1, - /*0xa687*/ 1023, - /*0x16e7e*/ 1316, + /*0x16e60*/ 1289, -1, -1, - /*0xff4c*/ 1112, + /*0x2d1f*/ 988, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - /*0xa693*/ 1029, - -1, -1, - /*0xff58*/ 1124, - -1, -1, - /*0x16e76*/ 1308, - -1, -1, -1, - /*0x16e74*/ 1306, -1, -1, -1, - /*0xff54*/ 1120, + /*0xff5a*/ 1129, -1, -1, -1, -1, -1, -1, - /*0xff52*/ 1118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, + /*0xa695*/ 1030, -1, -1, -1, -1, -1, -1, + /*0xa79f*/ 1087, -1, -1, -1, -1, -1, -1, + /*0xff56*/ 1125, -1, -1, -1, -1, -1, -1, + /*0xff54*/ 1123, -1, -1, -1, -1, -1, -1, - -1, -1, -1, - /*0xff48*/ 1108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, + /*0xff58*/ 1127, -1, -1, - /*0x1fe0*/ 802, /*0x0289*/ 229, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, + /*0x16e78*/ 1313, -1, -1, -1, -1, -1, -1, + /*0xa693*/ 1029, + -1, + /*0xff52*/ 1121, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, - /*0xa697*/ 1031, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, - /*0xff4a*/ 1110, -1, -1, -1, -1, -1, -1, + -1, + /*0x1fe0*/ 802, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -6947,18 +7029,24 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, + /*0xa697*/ 1031, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, + /*0x1fb0*/ 798, + -1, -1, -1, + /*0xff4c*/ 1115, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, - /*0xa68d*/ 1026, + -1, + /*0xff4a*/ 1113, -1, -1, -1, -1, -1, -1, -1, /*0xa689*/ 1024, @@ -6966,10 +7054,8 @@ onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, - -1, - /*0x1fb0*/ 798 + -1, -1, -1, + /*0xa68d*/ 1026 }; if (code <= MAX_CODE_VALUE && code >= MIN_CODE_VALUE) diff --git a/ruby/enc/unicode/12.1.0/name2ctype.h b/ruby/enc/unicode/13.0.0/name2ctype.h similarity index 90% rename from ruby/enc/unicode/12.1.0/name2ctype.h rename to ruby/enc/unicode/13.0.0/name2ctype.h index b2270d5ca..e8997c7d2 100644 --- a/ruby/enc/unicode/12.1.0/name2ctype.h +++ b/ruby/enc/unicode/13.0.0/name2ctype.h @@ -43,7 +43,7 @@ static const OnigCodePoint CR_NEWLINE[] = { /* 'Alpha': [[:Alpha:]] */ static const OnigCodePoint CR_Alpha[] = { - 679, + 695, 0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, @@ -97,7 +97,7 @@ static const OnigCodePoint CR_Alpha[] = { 0x0840, 0x0858, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x08d4, 0x08df, 0x08e3, 0x08e9, 0x08f0, 0x093b, @@ -201,8 +201,7 @@ static const OnigCodePoint CR_Alpha[] = { 0x0cde, 0x0cde, 0x0ce0, 0x0ce3, 0x0cf1, 0x0cf2, - 0x0d00, 0x0d03, - 0x0d05, 0x0d0c, + 0x0d00, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d3a, 0x0d3d, 0x0d44, @@ -212,7 +211,7 @@ static const OnigCodePoint CR_Alpha[] = { 0x0d54, 0x0d57, 0x0d5f, 0x0d63, 0x0d7a, 0x0d7f, - 0x0d82, 0x0d83, + 0x0d81, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, @@ -300,6 +299,7 @@ static const OnigCodePoint CR_Alpha[] = { 0x1a20, 0x1a5e, 0x1a61, 0x1a74, 0x1aa7, 0x1aa7, + 0x1abf, 0x1ac0, 0x1b00, 0x1b33, 0x1b35, 0x1b43, 0x1b45, 0x1b4b, @@ -387,10 +387,10 @@ static const OnigCodePoint CR_Alpha[] = { 0x30fc, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x31a0, 0x31ba, + 0x31a0, 0x31bf, 0x31f0, 0x31ff, - 0x3400, 0x4db5, - 0x4e00, 0x9fef, + 0x3400, 0x4dbf, + 0x4e00, 0x9ffc, 0xa000, 0xa48c, 0xa4d0, 0xa4fd, 0xa500, 0xa60c, @@ -402,8 +402,8 @@ static const OnigCodePoint CR_Alpha[] = { 0xa717, 0xa71f, 0xa722, 0xa788, 0xa78b, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa805, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa805, 0xa807, 0xa827, 0xa840, 0xa873, 0xa880, 0xa8c3, @@ -434,7 +434,7 @@ static const OnigCodePoint CR_Alpha[] = { 0xab20, 0xab26, 0xab28, 0xab2e, 0xab30, 0xab5a, - 0xab5c, 0xab67, + 0xab5c, 0xab69, 0xab70, 0xabea, 0xac00, 0xd7a3, 0xd7b0, 0xd7c6, @@ -519,19 +519,24 @@ static const OnigCodePoint CR_Alpha[] = { 0x10c80, 0x10cb2, 0x10cc0, 0x10cf2, 0x10d00, 0x10d27, + 0x10e80, 0x10ea9, + 0x10eab, 0x10eac, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f1c, 0x10f27, 0x10f27, 0x10f30, 0x10f45, + 0x10fb0, 0x10fc4, 0x10fe0, 0x10ff6, 0x11000, 0x11045, 0x11082, 0x110b8, 0x110d0, 0x110e8, 0x11100, 0x11132, - 0x11144, 0x11146, + 0x11144, 0x11147, 0x11150, 0x11172, 0x11176, 0x11176, 0x11180, 0x111bf, 0x111c1, 0x111c4, + 0x111ce, 0x111cf, 0x111da, 0x111da, 0x111dc, 0x111dc, 0x11200, 0x11211, @@ -560,7 +565,7 @@ static const OnigCodePoint CR_Alpha[] = { 0x11400, 0x11441, 0x11443, 0x11445, 0x11447, 0x1144a, - 0x1145f, 0x1145f, + 0x1145f, 0x11461, 0x11480, 0x114c1, 0x114c4, 0x114c5, 0x114c7, 0x114c7, @@ -576,7 +581,14 @@ static const OnigCodePoint CR_Alpha[] = { 0x1171d, 0x1172a, 0x11800, 0x11838, 0x118a0, 0x118df, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x11935, + 0x11937, 0x11938, + 0x1193b, 0x1193c, + 0x1193f, 0x11942, 0x119a0, 0x119a7, 0x119aa, 0x119d7, 0x119da, 0x119df, @@ -609,6 +621,7 @@ static const OnigCodePoint CR_Alpha[] = { 0x11d93, 0x11d96, 0x11d98, 0x11d98, 0x11ee0, 0x11ef6, + 0x11fb0, 0x11fb0, 0x12000, 0x12399, 0x12400, 0x1246e, 0x12480, 0x12543, @@ -627,8 +640,10 @@ static const OnigCodePoint CR_Alpha[] = { 0x16f8f, 0x16f9f, 0x16fe0, 0x16fe1, 0x16fe3, 0x16fe3, + 0x16ff0, 0x16ff1, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -717,12 +732,13 @@ static const OnigCodePoint CR_Alpha[] = { 0x1f130, 0x1f149, 0x1f150, 0x1f169, 0x1f170, 0x1f189, - 0x20000, 0x2a6d6, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, }; /* CR_Alpha */ /* 'Blank': [[:Blank:]] */ @@ -747,7 +763,7 @@ static const OnigCodePoint CR_Cntrl[] = { /* 'Digit': [[:Digit:]] */ static const OnigCodePoint CR_Digit[] = { - 59, + 61, 0x0030, 0x0039, 0x0660, 0x0669, 0x06f0, 0x06f9, @@ -798,6 +814,7 @@ static const OnigCodePoint CR_Digit[] = { 0x116c0, 0x116c9, 0x11730, 0x11739, 0x118e0, 0x118e9, + 0x11950, 0x11959, 0x11c50, 0x11c59, 0x11d50, 0x11d59, 0x11da0, 0x11da9, @@ -807,11 +824,12 @@ static const OnigCodePoint CR_Digit[] = { 0x1e140, 0x1e149, 0x1e2f0, 0x1e2f9, 0x1e950, 0x1e959, + 0x1fbf0, 0x1fbf9, }; /* CR_Digit */ /* 'Graph': [[:Graph:]] */ static const OnigCodePoint CR_Graph[] = { - 671, + 682, 0x0021, 0x007e, 0x00a1, 0x0377, 0x037a, 0x037f, @@ -836,7 +854,7 @@ static const OnigCodePoint CR_Graph[] = { 0x085e, 0x085e, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x08d3, 0x0983, 0x0985, 0x098c, 0x098f, 0x0990, @@ -891,7 +909,7 @@ static const OnigCodePoint CR_Graph[] = { 0x0b3c, 0x0b44, 0x0b47, 0x0b48, 0x0b4b, 0x0b4d, - 0x0b56, 0x0b57, + 0x0b55, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b63, 0x0b66, 0x0b77, @@ -935,15 +953,14 @@ static const OnigCodePoint CR_Graph[] = { 0x0ce0, 0x0ce3, 0x0ce6, 0x0cef, 0x0cf1, 0x0cf2, - 0x0d00, 0x0d03, - 0x0d05, 0x0d0c, + 0x0d00, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d44, 0x0d46, 0x0d48, 0x0d4a, 0x0d4f, 0x0d54, 0x0d63, 0x0d66, 0x0d7f, - 0x0d82, 0x0d83, + 0x0d81, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, @@ -1030,7 +1047,7 @@ static const OnigCodePoint CR_Graph[] = { 0x1a7f, 0x1a89, 0x1a90, 0x1a99, 0x1aa0, 0x1aad, - 0x1ab0, 0x1abe, + 0x1ab0, 0x1ac0, 0x1b00, 0x1b4b, 0x1b50, 0x1b7c, 0x1b80, 0x1bf3, @@ -1071,7 +1088,7 @@ static const OnigCodePoint CR_Graph[] = { 0x2440, 0x244a, 0x2460, 0x2b73, 0x2b76, 0x2b95, - 0x2b98, 0x2c2e, + 0x2b97, 0x2c2e, 0x2c30, 0x2c5e, 0x2c60, 0x2cf3, 0x2cf9, 0x2d25, @@ -1088,7 +1105,7 @@ static const OnigCodePoint CR_Graph[] = { 0x2dc8, 0x2dce, 0x2dd0, 0x2dd6, 0x2dd8, 0x2dde, - 0x2de0, 0x2e4f, + 0x2de0, 0x2e52, 0x2e80, 0x2e99, 0x2e9b, 0x2ef3, 0x2f00, 0x2fd5, @@ -1098,18 +1115,16 @@ static const OnigCodePoint CR_Graph[] = { 0x3099, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x3190, 0x31ba, - 0x31c0, 0x31e3, + 0x3190, 0x31e3, 0x31f0, 0x321e, - 0x3220, 0x4db5, - 0x4dc0, 0x9fef, + 0x3220, 0x9ffc, 0xa000, 0xa48c, 0xa490, 0xa4c6, 0xa4d0, 0xa62b, 0xa640, 0xa6f7, 0xa700, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa82b, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa82c, 0xa830, 0xa839, 0xa840, 0xa877, 0xa880, 0xa8c5, @@ -1129,7 +1144,7 @@ static const OnigCodePoint CR_Graph[] = { 0xab11, 0xab16, 0xab20, 0xab26, 0xab28, 0xab2e, - 0xab30, 0xab67, + 0xab30, 0xab6b, 0xab70, 0xabed, 0xabf0, 0xabf9, 0xac00, 0xd7a3, @@ -1174,7 +1189,7 @@ static const OnigCodePoint CR_Graph[] = { 0x10100, 0x10102, 0x10107, 0x10133, 0x10137, 0x1018e, - 0x10190, 0x1019b, + 0x10190, 0x1019c, 0x101a0, 0x101a0, 0x101d0, 0x101fd, 0x10280, 0x1029c, @@ -1234,8 +1249,12 @@ static const OnigCodePoint CR_Graph[] = { 0x10cfa, 0x10d27, 0x10d30, 0x10d39, 0x10e60, 0x10e7e, + 0x10e80, 0x10ea9, + 0x10eab, 0x10ead, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f27, 0x10f30, 0x10f59, + 0x10fb0, 0x10fcb, 0x10fe0, 0x10ff6, 0x11000, 0x1104d, 0x11052, 0x1106f, @@ -1244,10 +1263,9 @@ static const OnigCodePoint CR_Graph[] = { 0x110d0, 0x110e8, 0x110f0, 0x110f9, 0x11100, 0x11134, - 0x11136, 0x11146, + 0x11136, 0x11147, 0x11150, 0x11176, - 0x11180, 0x111cd, - 0x111d0, 0x111df, + 0x11180, 0x111df, 0x111e1, 0x111f4, 0x11200, 0x11211, 0x11213, 0x1123e, @@ -1273,9 +1291,8 @@ static const OnigCodePoint CR_Graph[] = { 0x1135d, 0x11363, 0x11366, 0x1136c, 0x11370, 0x11374, - 0x11400, 0x11459, - 0x1145b, 0x1145b, - 0x1145d, 0x1145f, + 0x11400, 0x1145b, + 0x1145d, 0x11461, 0x11480, 0x114c7, 0x114d0, 0x114d9, 0x11580, 0x115b5, @@ -1290,7 +1307,14 @@ static const OnigCodePoint CR_Graph[] = { 0x11730, 0x1173f, 0x11800, 0x1183b, 0x118a0, 0x118f2, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x11935, + 0x11937, 0x11938, + 0x1193b, 0x11946, + 0x11950, 0x11959, 0x119a0, 0x119a7, 0x119aa, 0x119d7, 0x119da, 0x119e4, @@ -1318,6 +1342,7 @@ static const OnigCodePoint CR_Graph[] = { 0x11d93, 0x11d98, 0x11da0, 0x11da9, 0x11ee0, 0x11ef8, + 0x11fb0, 0x11fb0, 0x11fc0, 0x11ff1, 0x11fff, 0x12399, 0x12400, 0x1246e, @@ -1341,9 +1366,11 @@ static const OnigCodePoint CR_Graph[] = { 0x16f00, 0x16f4a, 0x16f4f, 0x16f87, 0x16f8f, 0x16f9f, - 0x16fe0, 0x16fe3, + 0x16fe0, 0x16fe4, + 0x16ff0, 0x16ff1, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -1441,17 +1468,15 @@ static const OnigCodePoint CR_Graph[] = { 0x1f0b1, 0x1f0bf, 0x1f0c1, 0x1f0cf, 0x1f0d1, 0x1f0f5, - 0x1f100, 0x1f10c, - 0x1f110, 0x1f16c, - 0x1f170, 0x1f1ac, + 0x1f100, 0x1f1ad, 0x1f1e6, 0x1f202, 0x1f210, 0x1f23b, 0x1f240, 0x1f248, 0x1f250, 0x1f251, 0x1f260, 0x1f265, - 0x1f300, 0x1f6d5, + 0x1f300, 0x1f6d7, 0x1f6e0, 0x1f6ec, - 0x1f6f0, 0x1f6fa, + 0x1f6f0, 0x1f6fc, 0x1f700, 0x1f773, 0x1f780, 0x1f7d8, 0x1f7e0, 0x1f7eb, @@ -1460,24 +1485,28 @@ static const OnigCodePoint CR_Graph[] = { 0x1f850, 0x1f859, 0x1f860, 0x1f887, 0x1f890, 0x1f8ad, - 0x1f900, 0x1f90b, - 0x1f90d, 0x1f971, - 0x1f973, 0x1f976, - 0x1f97a, 0x1f9a2, - 0x1f9a5, 0x1f9aa, - 0x1f9ae, 0x1f9ca, + 0x1f8b0, 0x1f8b1, + 0x1f900, 0x1f978, + 0x1f97a, 0x1f9cb, 0x1f9cd, 0x1fa53, 0x1fa60, 0x1fa6d, - 0x1fa70, 0x1fa73, + 0x1fa70, 0x1fa74, 0x1fa78, 0x1fa7a, - 0x1fa80, 0x1fa82, - 0x1fa90, 0x1fa95, - 0x20000, 0x2a6d6, + 0x1fa80, 0x1fa86, + 0x1fa90, 0x1faa8, + 0x1fab0, 0x1fab6, + 0x1fac0, 0x1fac2, + 0x1fad0, 0x1fad6, + 0x1fb00, 0x1fb92, + 0x1fb94, 0x1fbca, + 0x1fbf0, 0x1fbf9, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, 0xe0001, 0xe0001, 0xe0020, 0xe007f, 0xe0100, 0xe01ef, @@ -1487,7 +1516,7 @@ static const OnigCodePoint CR_Graph[] = { /* 'Lower': [[:Lower:]] */ static const OnigCodePoint CR_Lower[] = { - 649, + 652, 0x0061, 0x007a, 0x00aa, 0x00aa, 0x00b5, 0x00b5, @@ -2096,9 +2125,12 @@ static const OnigCodePoint CR_Lower[] = { 0xa7bd, 0xa7bd, 0xa7bf, 0xa7bf, 0xa7c3, 0xa7c3, + 0xa7c8, 0xa7c8, + 0xa7ca, 0xa7ca, + 0xa7f6, 0xa7f6, 0xa7f8, 0xa7fa, 0xab30, 0xab5a, - 0xab5c, 0xab67, + 0xab5c, 0xab68, 0xab70, 0xabbf, 0xfb00, 0xfb06, 0xfb13, 0xfb17, @@ -2141,7 +2173,7 @@ static const OnigCodePoint CR_Lower[] = { /* 'Print': [[:Print:]] */ static const OnigCodePoint CR_Print[] = { - 668, + 679, 0x0020, 0x007e, 0x00a0, 0x0377, 0x037a, 0x037f, @@ -2166,7 +2198,7 @@ static const OnigCodePoint CR_Print[] = { 0x085e, 0x085e, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x08d3, 0x0983, 0x0985, 0x098c, 0x098f, 0x0990, @@ -2221,7 +2253,7 @@ static const OnigCodePoint CR_Print[] = { 0x0b3c, 0x0b44, 0x0b47, 0x0b48, 0x0b4b, 0x0b4d, - 0x0b56, 0x0b57, + 0x0b55, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b63, 0x0b66, 0x0b77, @@ -2265,15 +2297,14 @@ static const OnigCodePoint CR_Print[] = { 0x0ce0, 0x0ce3, 0x0ce6, 0x0cef, 0x0cf1, 0x0cf2, - 0x0d00, 0x0d03, - 0x0d05, 0x0d0c, + 0x0d00, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d44, 0x0d46, 0x0d48, 0x0d4a, 0x0d4f, 0x0d54, 0x0d63, 0x0d66, 0x0d7f, - 0x0d82, 0x0d83, + 0x0d81, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, @@ -2359,7 +2390,7 @@ static const OnigCodePoint CR_Print[] = { 0x1a7f, 0x1a89, 0x1a90, 0x1a99, 0x1aa0, 0x1aad, - 0x1ab0, 0x1abe, + 0x1ab0, 0x1ac0, 0x1b00, 0x1b4b, 0x1b50, 0x1b7c, 0x1b80, 0x1bf3, @@ -2398,7 +2429,7 @@ static const OnigCodePoint CR_Print[] = { 0x2440, 0x244a, 0x2460, 0x2b73, 0x2b76, 0x2b95, - 0x2b98, 0x2c2e, + 0x2b97, 0x2c2e, 0x2c30, 0x2c5e, 0x2c60, 0x2cf3, 0x2cf9, 0x2d25, @@ -2415,7 +2446,7 @@ static const OnigCodePoint CR_Print[] = { 0x2dc8, 0x2dce, 0x2dd0, 0x2dd6, 0x2dd8, 0x2dde, - 0x2de0, 0x2e4f, + 0x2de0, 0x2e52, 0x2e80, 0x2e99, 0x2e9b, 0x2ef3, 0x2f00, 0x2fd5, @@ -2425,18 +2456,16 @@ static const OnigCodePoint CR_Print[] = { 0x3099, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x3190, 0x31ba, - 0x31c0, 0x31e3, + 0x3190, 0x31e3, 0x31f0, 0x321e, - 0x3220, 0x4db5, - 0x4dc0, 0x9fef, + 0x3220, 0x9ffc, 0xa000, 0xa48c, 0xa490, 0xa4c6, 0xa4d0, 0xa62b, 0xa640, 0xa6f7, 0xa700, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa82b, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa82c, 0xa830, 0xa839, 0xa840, 0xa877, 0xa880, 0xa8c5, @@ -2456,7 +2485,7 @@ static const OnigCodePoint CR_Print[] = { 0xab11, 0xab16, 0xab20, 0xab26, 0xab28, 0xab2e, - 0xab30, 0xab67, + 0xab30, 0xab6b, 0xab70, 0xabed, 0xabf0, 0xabf9, 0xac00, 0xd7a3, @@ -2501,7 +2530,7 @@ static const OnigCodePoint CR_Print[] = { 0x10100, 0x10102, 0x10107, 0x10133, 0x10137, 0x1018e, - 0x10190, 0x1019b, + 0x10190, 0x1019c, 0x101a0, 0x101a0, 0x101d0, 0x101fd, 0x10280, 0x1029c, @@ -2561,8 +2590,12 @@ static const OnigCodePoint CR_Print[] = { 0x10cfa, 0x10d27, 0x10d30, 0x10d39, 0x10e60, 0x10e7e, + 0x10e80, 0x10ea9, + 0x10eab, 0x10ead, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f27, 0x10f30, 0x10f59, + 0x10fb0, 0x10fcb, 0x10fe0, 0x10ff6, 0x11000, 0x1104d, 0x11052, 0x1106f, @@ -2571,10 +2604,9 @@ static const OnigCodePoint CR_Print[] = { 0x110d0, 0x110e8, 0x110f0, 0x110f9, 0x11100, 0x11134, - 0x11136, 0x11146, + 0x11136, 0x11147, 0x11150, 0x11176, - 0x11180, 0x111cd, - 0x111d0, 0x111df, + 0x11180, 0x111df, 0x111e1, 0x111f4, 0x11200, 0x11211, 0x11213, 0x1123e, @@ -2600,9 +2632,8 @@ static const OnigCodePoint CR_Print[] = { 0x1135d, 0x11363, 0x11366, 0x1136c, 0x11370, 0x11374, - 0x11400, 0x11459, - 0x1145b, 0x1145b, - 0x1145d, 0x1145f, + 0x11400, 0x1145b, + 0x1145d, 0x11461, 0x11480, 0x114c7, 0x114d0, 0x114d9, 0x11580, 0x115b5, @@ -2617,7 +2648,14 @@ static const OnigCodePoint CR_Print[] = { 0x11730, 0x1173f, 0x11800, 0x1183b, 0x118a0, 0x118f2, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x11935, + 0x11937, 0x11938, + 0x1193b, 0x11946, + 0x11950, 0x11959, 0x119a0, 0x119a7, 0x119aa, 0x119d7, 0x119da, 0x119e4, @@ -2645,6 +2683,7 @@ static const OnigCodePoint CR_Print[] = { 0x11d93, 0x11d98, 0x11da0, 0x11da9, 0x11ee0, 0x11ef8, + 0x11fb0, 0x11fb0, 0x11fc0, 0x11ff1, 0x11fff, 0x12399, 0x12400, 0x1246e, @@ -2668,9 +2707,11 @@ static const OnigCodePoint CR_Print[] = { 0x16f00, 0x16f4a, 0x16f4f, 0x16f87, 0x16f8f, 0x16f9f, - 0x16fe0, 0x16fe3, + 0x16fe0, 0x16fe4, + 0x16ff0, 0x16ff1, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -2768,17 +2809,15 @@ static const OnigCodePoint CR_Print[] = { 0x1f0b1, 0x1f0bf, 0x1f0c1, 0x1f0cf, 0x1f0d1, 0x1f0f5, - 0x1f100, 0x1f10c, - 0x1f110, 0x1f16c, - 0x1f170, 0x1f1ac, + 0x1f100, 0x1f1ad, 0x1f1e6, 0x1f202, 0x1f210, 0x1f23b, 0x1f240, 0x1f248, 0x1f250, 0x1f251, 0x1f260, 0x1f265, - 0x1f300, 0x1f6d5, + 0x1f300, 0x1f6d7, 0x1f6e0, 0x1f6ec, - 0x1f6f0, 0x1f6fa, + 0x1f6f0, 0x1f6fc, 0x1f700, 0x1f773, 0x1f780, 0x1f7d8, 0x1f7e0, 0x1f7eb, @@ -2787,24 +2826,28 @@ static const OnigCodePoint CR_Print[] = { 0x1f850, 0x1f859, 0x1f860, 0x1f887, 0x1f890, 0x1f8ad, - 0x1f900, 0x1f90b, - 0x1f90d, 0x1f971, - 0x1f973, 0x1f976, - 0x1f97a, 0x1f9a2, - 0x1f9a5, 0x1f9aa, - 0x1f9ae, 0x1f9ca, + 0x1f8b0, 0x1f8b1, + 0x1f900, 0x1f978, + 0x1f97a, 0x1f9cb, 0x1f9cd, 0x1fa53, 0x1fa60, 0x1fa6d, - 0x1fa70, 0x1fa73, + 0x1fa70, 0x1fa74, 0x1fa78, 0x1fa7a, - 0x1fa80, 0x1fa82, - 0x1fa90, 0x1fa95, - 0x20000, 0x2a6d6, + 0x1fa80, 0x1fa86, + 0x1fa90, 0x1faa8, + 0x1fab0, 0x1fab6, + 0x1fac0, 0x1fac2, + 0x1fad0, 0x1fad6, + 0x1fb00, 0x1fb92, + 0x1fb94, 0x1fbca, + 0x1fbf0, 0x1fbf9, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, 0xe0001, 0xe0001, 0xe0020, 0xe007f, 0xe0100, 0xe01ef, @@ -2814,7 +2857,7 @@ static const OnigCodePoint CR_Print[] = { /* 'XPosixPunct': [[:Punct:]] */ static const OnigCodePoint CR_XPosixPunct[] = { - 177, + 180, 0x0021, 0x002f, 0x003a, 0x0040, 0x005b, 0x0060, @@ -2900,6 +2943,7 @@ static const OnigCodePoint CR_XPosixPunct[] = { 0x2d70, 0x2d70, 0x2e00, 0x2e2e, 0x2e30, 0x2e4f, + 0x2e52, 0x2e52, 0x3001, 0x3003, 0x3008, 0x3011, 0x3014, 0x301f, @@ -2953,6 +2997,7 @@ static const OnigCodePoint CR_XPosixPunct[] = { 0x10af0, 0x10af6, 0x10b39, 0x10b3f, 0x10b99, 0x10b9c, + 0x10ead, 0x10ead, 0x10f55, 0x10f59, 0x11047, 0x1104d, 0x110bb, 0x110bc, @@ -2966,7 +3011,7 @@ static const OnigCodePoint CR_XPosixPunct[] = { 0x11238, 0x1123d, 0x112a9, 0x112a9, 0x1144b, 0x1144f, - 0x1145b, 0x1145b, + 0x1145a, 0x1145b, 0x1145d, 0x1145d, 0x114c6, 0x114c6, 0x115c1, 0x115d7, @@ -2974,6 +3019,7 @@ static const OnigCodePoint CR_XPosixPunct[] = { 0x11660, 0x1166c, 0x1173c, 0x1173e, 0x1183b, 0x1183b, + 0x11944, 0x11946, 0x119e2, 0x119e2, 0x11a3f, 0x11a46, 0x11a9a, 0x11a9c, @@ -3011,7 +3057,7 @@ static const OnigCodePoint CR_Space[] = { /* 'Upper': [[:Upper:]] */ static const OnigCodePoint CR_Upper[] = { - 641, + 643, 0x0041, 0x005a, 0x00c0, 0x00d6, 0x00d8, 0x00de, @@ -3611,7 +3657,9 @@ static const OnigCodePoint CR_Upper[] = { 0xa7bc, 0xa7bc, 0xa7be, 0xa7be, 0xa7c2, 0xa7c2, - 0xa7c4, 0xa7c6, + 0xa7c4, 0xa7c7, + 0xa7c9, 0xa7c9, + 0xa7f5, 0xa7f5, 0xff21, 0xff3a, 0x10400, 0x10427, 0x104b0, 0x104d3, @@ -3665,7 +3713,7 @@ static const OnigCodePoint CR_XDigit[] = { /* 'Word': [[:Word:]] */ static const OnigCodePoint CR_Word[] = { - 716, + 732, 0x0030, 0x0039, 0x0041, 0x005a, 0x005f, 0x005f, @@ -3717,7 +3765,7 @@ static const OnigCodePoint CR_Word[] = { 0x0840, 0x085b, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x08d3, 0x08e1, 0x08e3, 0x0963, 0x0966, 0x096f, @@ -3777,7 +3825,7 @@ static const OnigCodePoint CR_Word[] = { 0x0b3c, 0x0b44, 0x0b47, 0x0b48, 0x0b4b, 0x0b4d, - 0x0b56, 0x0b57, + 0x0b55, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b63, 0x0b66, 0x0b6f, @@ -3823,8 +3871,7 @@ static const OnigCodePoint CR_Word[] = { 0x0ce0, 0x0ce3, 0x0ce6, 0x0cef, 0x0cf1, 0x0cf2, - 0x0d00, 0x0d03, - 0x0d05, 0x0d0c, + 0x0d00, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d44, 0x0d46, 0x0d48, @@ -3833,7 +3880,7 @@ static const OnigCodePoint CR_Word[] = { 0x0d5f, 0x0d63, 0x0d66, 0x0d6f, 0x0d7a, 0x0d7f, - 0x0d82, 0x0d83, + 0x0d81, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, @@ -3932,7 +3979,7 @@ static const OnigCodePoint CR_Word[] = { 0x1a7f, 0x1a89, 0x1a90, 0x1a99, 0x1aa7, 0x1aa7, - 0x1ab0, 0x1abe, + 0x1ab0, 0x1ac0, 0x1b00, 0x1b4b, 0x1b50, 0x1b59, 0x1b6b, 0x1b73, @@ -4017,10 +4064,10 @@ static const OnigCodePoint CR_Word[] = { 0x30fc, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x31a0, 0x31ba, + 0x31a0, 0x31bf, 0x31f0, 0x31ff, - 0x3400, 0x4db5, - 0x4e00, 0x9fef, + 0x3400, 0x4dbf, + 0x4e00, 0x9ffc, 0xa000, 0xa48c, 0xa4d0, 0xa4fd, 0xa500, 0xa60c, @@ -4031,8 +4078,9 @@ static const OnigCodePoint CR_Word[] = { 0xa717, 0xa71f, 0xa722, 0xa788, 0xa78b, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa827, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa827, + 0xa82c, 0xa82c, 0xa840, 0xa873, 0xa880, 0xa8c5, 0xa8d0, 0xa8d9, @@ -4058,7 +4106,7 @@ static const OnigCodePoint CR_Word[] = { 0xab20, 0xab26, 0xab28, 0xab2e, 0xab30, 0xab5a, - 0xab5c, 0xab67, + 0xab5c, 0xab69, 0xab70, 0xabea, 0xabec, 0xabed, 0xabf0, 0xabf9, @@ -4157,9 +4205,13 @@ static const OnigCodePoint CR_Word[] = { 0x10cc0, 0x10cf2, 0x10d00, 0x10d27, 0x10d30, 0x10d39, + 0x10e80, 0x10ea9, + 0x10eab, 0x10eac, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f1c, 0x10f27, 0x10f27, 0x10f30, 0x10f50, + 0x10fb0, 0x10fc4, 0x10fe0, 0x10ff6, 0x11000, 0x11046, 0x11066, 0x1106f, @@ -4168,12 +4220,12 @@ static const OnigCodePoint CR_Word[] = { 0x110f0, 0x110f9, 0x11100, 0x11134, 0x11136, 0x1113f, - 0x11144, 0x11146, + 0x11144, 0x11147, 0x11150, 0x11173, 0x11176, 0x11176, 0x11180, 0x111c4, 0x111c9, 0x111cc, - 0x111d0, 0x111da, + 0x111ce, 0x111da, 0x111dc, 0x111dc, 0x11200, 0x11211, 0x11213, 0x11237, @@ -4202,7 +4254,7 @@ static const OnigCodePoint CR_Word[] = { 0x11370, 0x11374, 0x11400, 0x1144a, 0x11450, 0x11459, - 0x1145e, 0x1145f, + 0x1145e, 0x11461, 0x11480, 0x114c5, 0x114c7, 0x114c7, 0x114d0, 0x114d9, @@ -4219,7 +4271,14 @@ static const OnigCodePoint CR_Word[] = { 0x11730, 0x11739, 0x11800, 0x1183a, 0x118a0, 0x118e9, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x11935, + 0x11937, 0x11938, + 0x1193b, 0x11943, + 0x11950, 0x11959, 0x119a0, 0x119a7, 0x119aa, 0x119d7, 0x119da, 0x119e1, @@ -4250,6 +4309,7 @@ static const OnigCodePoint CR_Word[] = { 0x11d93, 0x11d98, 0x11da0, 0x11da9, 0x11ee0, 0x11ef6, + 0x11fb0, 0x11fb0, 0x12000, 0x12399, 0x12400, 0x1246e, 0x12480, 0x12543, @@ -4270,9 +4330,11 @@ static const OnigCodePoint CR_Word[] = { 0x16f4f, 0x16f87, 0x16f8f, 0x16f9f, 0x16fe0, 0x16fe1, - 0x16fe3, 0x16fe3, + 0x16fe3, 0x16fe4, + 0x16ff0, 0x16ff1, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -4375,18 +4437,20 @@ static const OnigCodePoint CR_Word[] = { 0x1f130, 0x1f149, 0x1f150, 0x1f169, 0x1f170, 0x1f189, - 0x20000, 0x2a6d6, + 0x1fbf0, 0x1fbf9, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, 0xe0100, 0xe01ef, }; /* CR_Word */ /* 'Alnum': [[:Alnum:]] */ static const OnigCodePoint CR_Alnum[] = { - 715, + 732, 0x0030, 0x0039, 0x0041, 0x005a, 0x0061, 0x007a, @@ -4440,7 +4504,7 @@ static const OnigCodePoint CR_Alnum[] = { 0x0840, 0x0858, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x08d4, 0x08df, 0x08e3, 0x08e9, 0x08f0, 0x093b, @@ -4550,8 +4614,7 @@ static const OnigCodePoint CR_Alnum[] = { 0x0ce0, 0x0ce3, 0x0ce6, 0x0cef, 0x0cf1, 0x0cf2, - 0x0d00, 0x0d03, - 0x0d05, 0x0d0c, + 0x0d00, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d3a, 0x0d3d, 0x0d44, @@ -4562,7 +4625,7 @@ static const OnigCodePoint CR_Alnum[] = { 0x0d5f, 0x0d63, 0x0d66, 0x0d6f, 0x0d7a, 0x0d7f, - 0x0d82, 0x0d83, + 0x0d81, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, @@ -4658,6 +4721,7 @@ static const OnigCodePoint CR_Alnum[] = { 0x1a80, 0x1a89, 0x1a90, 0x1a99, 0x1aa7, 0x1aa7, + 0x1abf, 0x1ac0, 0x1b00, 0x1b33, 0x1b35, 0x1b43, 0x1b45, 0x1b4b, @@ -4745,10 +4809,10 @@ static const OnigCodePoint CR_Alnum[] = { 0x30fc, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x31a0, 0x31ba, + 0x31a0, 0x31bf, 0x31f0, 0x31ff, - 0x3400, 0x4db5, - 0x4e00, 0x9fef, + 0x3400, 0x4dbf, + 0x4e00, 0x9ffc, 0xa000, 0xa48c, 0xa4d0, 0xa4fd, 0xa500, 0xa60c, @@ -4759,8 +4823,8 @@ static const OnigCodePoint CR_Alnum[] = { 0xa717, 0xa71f, 0xa722, 0xa788, 0xa78b, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa805, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa805, 0xa807, 0xa827, 0xa840, 0xa873, 0xa880, 0xa8c3, @@ -4791,7 +4855,7 @@ static const OnigCodePoint CR_Alnum[] = { 0xab20, 0xab26, 0xab28, 0xab2e, 0xab30, 0xab5a, - 0xab5c, 0xab67, + 0xab5c, 0xab69, 0xab70, 0xabea, 0xabf0, 0xabf9, 0xac00, 0xd7a3, @@ -4880,9 +4944,13 @@ static const OnigCodePoint CR_Alnum[] = { 0x10cc0, 0x10cf2, 0x10d00, 0x10d27, 0x10d30, 0x10d39, + 0x10e80, 0x10ea9, + 0x10eab, 0x10eac, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f1c, 0x10f27, 0x10f27, 0x10f30, 0x10f45, + 0x10fb0, 0x10fc4, 0x10fe0, 0x10ff6, 0x11000, 0x11045, 0x11066, 0x1106f, @@ -4891,12 +4959,12 @@ static const OnigCodePoint CR_Alnum[] = { 0x110f0, 0x110f9, 0x11100, 0x11132, 0x11136, 0x1113f, - 0x11144, 0x11146, + 0x11144, 0x11147, 0x11150, 0x11172, 0x11176, 0x11176, 0x11180, 0x111bf, 0x111c1, 0x111c4, - 0x111d0, 0x111da, + 0x111ce, 0x111da, 0x111dc, 0x111dc, 0x11200, 0x11211, 0x11213, 0x11234, @@ -4926,7 +4994,7 @@ static const OnigCodePoint CR_Alnum[] = { 0x11443, 0x11445, 0x11447, 0x1144a, 0x11450, 0x11459, - 0x1145f, 0x1145f, + 0x1145f, 0x11461, 0x11480, 0x114c1, 0x114c4, 0x114c5, 0x114c7, 0x114c7, @@ -4946,7 +5014,15 @@ static const OnigCodePoint CR_Alnum[] = { 0x11730, 0x11739, 0x11800, 0x11838, 0x118a0, 0x118e9, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x11935, + 0x11937, 0x11938, + 0x1193b, 0x1193c, + 0x1193f, 0x11942, + 0x11950, 0x11959, 0x119a0, 0x119a7, 0x119aa, 0x119d7, 0x119da, 0x119df, @@ -4982,6 +5058,7 @@ static const OnigCodePoint CR_Alnum[] = { 0x11d98, 0x11d98, 0x11da0, 0x11da9, 0x11ee0, 0x11ef6, + 0x11fb0, 0x11fb0, 0x12000, 0x12399, 0x12400, 0x1246e, 0x12480, 0x12543, @@ -5002,8 +5079,10 @@ static const OnigCodePoint CR_Alnum[] = { 0x16f8f, 0x16f9f, 0x16fe0, 0x16fe1, 0x16fe3, 0x16fe3, + 0x16ff0, 0x16ff1, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -5096,12 +5175,14 @@ static const OnigCodePoint CR_Alnum[] = { 0x1f130, 0x1f149, 0x1f150, 0x1f169, 0x1f170, 0x1f189, - 0x20000, 0x2a6d6, + 0x1fbf0, 0x1fbf9, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, }; /* CR_Alnum */ /* 'ASCII': [[:ASCII:]] */ @@ -5112,7 +5193,7 @@ static const OnigCodePoint CR_ASCII[] = { /* 'Punct' */ static const OnigCodePoint CR_Punct[] = { - 182, + 185, 0x0021, 0x0023, 0x0025, 0x002a, 0x002c, 0x002f, @@ -5203,6 +5284,7 @@ static const OnigCodePoint CR_Punct[] = { 0x2d70, 0x2d70, 0x2e00, 0x2e2e, 0x2e30, 0x2e4f, + 0x2e52, 0x2e52, 0x3001, 0x3003, 0x3008, 0x3011, 0x3014, 0x301f, @@ -5256,6 +5338,7 @@ static const OnigCodePoint CR_Punct[] = { 0x10af0, 0x10af6, 0x10b39, 0x10b3f, 0x10b99, 0x10b9c, + 0x10ead, 0x10ead, 0x10f55, 0x10f59, 0x11047, 0x1104d, 0x110bb, 0x110bc, @@ -5269,7 +5352,7 @@ static const OnigCodePoint CR_Punct[] = { 0x11238, 0x1123d, 0x112a9, 0x112a9, 0x1144b, 0x1144f, - 0x1145b, 0x1145b, + 0x1145a, 0x1145b, 0x1145d, 0x1145d, 0x114c6, 0x114c6, 0x115c1, 0x115d7, @@ -5277,6 +5360,7 @@ static const OnigCodePoint CR_Punct[] = { 0x11660, 0x1166c, 0x1173c, 0x1173e, 0x1183b, 0x1183b, + 0x11944, 0x11946, 0x119e2, 0x119e2, 0x11a3f, 0x11a46, 0x11a9a, 0x11a9c, @@ -5306,7 +5390,7 @@ static const OnigCodePoint CR_Any[] = { /* 'Assigned': - */ static const OnigCodePoint CR_Assigned[] = { - 666, + 677, 0x0000, 0x0377, 0x037a, 0x037f, 0x0384, 0x038a, @@ -5330,7 +5414,7 @@ static const OnigCodePoint CR_Assigned[] = { 0x085e, 0x085e, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x08d3, 0x0983, 0x0985, 0x098c, 0x098f, 0x0990, @@ -5385,7 +5469,7 @@ static const OnigCodePoint CR_Assigned[] = { 0x0b3c, 0x0b44, 0x0b47, 0x0b48, 0x0b4b, 0x0b4d, - 0x0b56, 0x0b57, + 0x0b55, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b63, 0x0b66, 0x0b77, @@ -5429,15 +5513,14 @@ static const OnigCodePoint CR_Assigned[] = { 0x0ce0, 0x0ce3, 0x0ce6, 0x0cef, 0x0cf1, 0x0cf2, - 0x0d00, 0x0d03, - 0x0d05, 0x0d0c, + 0x0d00, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d44, 0x0d46, 0x0d48, 0x0d4a, 0x0d4f, 0x0d54, 0x0d63, 0x0d66, 0x0d7f, - 0x0d82, 0x0d83, + 0x0d81, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, @@ -5523,7 +5606,7 @@ static const OnigCodePoint CR_Assigned[] = { 0x1a7f, 0x1a89, 0x1a90, 0x1a99, 0x1aa0, 0x1aad, - 0x1ab0, 0x1abe, + 0x1ab0, 0x1ac0, 0x1b00, 0x1b4b, 0x1b50, 0x1b7c, 0x1b80, 0x1bf3, @@ -5561,7 +5644,7 @@ static const OnigCodePoint CR_Assigned[] = { 0x2440, 0x244a, 0x2460, 0x2b73, 0x2b76, 0x2b95, - 0x2b98, 0x2c2e, + 0x2b97, 0x2c2e, 0x2c30, 0x2c5e, 0x2c60, 0x2cf3, 0x2cf9, 0x2d25, @@ -5578,7 +5661,7 @@ static const OnigCodePoint CR_Assigned[] = { 0x2dc8, 0x2dce, 0x2dd0, 0x2dd6, 0x2dd8, 0x2dde, - 0x2de0, 0x2e4f, + 0x2de0, 0x2e52, 0x2e80, 0x2e99, 0x2e9b, 0x2ef3, 0x2f00, 0x2fd5, @@ -5588,18 +5671,16 @@ static const OnigCodePoint CR_Assigned[] = { 0x3099, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x3190, 0x31ba, - 0x31c0, 0x31e3, + 0x3190, 0x31e3, 0x31f0, 0x321e, - 0x3220, 0x4db5, - 0x4dc0, 0x9fef, + 0x3220, 0x9ffc, 0xa000, 0xa48c, 0xa490, 0xa4c6, 0xa4d0, 0xa62b, 0xa640, 0xa6f7, 0xa700, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa82b, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa82c, 0xa830, 0xa839, 0xa840, 0xa877, 0xa880, 0xa8c5, @@ -5619,7 +5700,7 @@ static const OnigCodePoint CR_Assigned[] = { 0xab11, 0xab16, 0xab20, 0xab26, 0xab28, 0xab2e, - 0xab30, 0xab67, + 0xab30, 0xab6b, 0xab70, 0xabed, 0xabf0, 0xabf9, 0xac00, 0xd7a3, @@ -5664,7 +5745,7 @@ static const OnigCodePoint CR_Assigned[] = { 0x10100, 0x10102, 0x10107, 0x10133, 0x10137, 0x1018e, - 0x10190, 0x1019b, + 0x10190, 0x1019c, 0x101a0, 0x101a0, 0x101d0, 0x101fd, 0x10280, 0x1029c, @@ -5724,8 +5805,12 @@ static const OnigCodePoint CR_Assigned[] = { 0x10cfa, 0x10d27, 0x10d30, 0x10d39, 0x10e60, 0x10e7e, + 0x10e80, 0x10ea9, + 0x10eab, 0x10ead, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f27, 0x10f30, 0x10f59, + 0x10fb0, 0x10fcb, 0x10fe0, 0x10ff6, 0x11000, 0x1104d, 0x11052, 0x1106f, @@ -5734,10 +5819,9 @@ static const OnigCodePoint CR_Assigned[] = { 0x110d0, 0x110e8, 0x110f0, 0x110f9, 0x11100, 0x11134, - 0x11136, 0x11146, + 0x11136, 0x11147, 0x11150, 0x11176, - 0x11180, 0x111cd, - 0x111d0, 0x111df, + 0x11180, 0x111df, 0x111e1, 0x111f4, 0x11200, 0x11211, 0x11213, 0x1123e, @@ -5763,9 +5847,8 @@ static const OnigCodePoint CR_Assigned[] = { 0x1135d, 0x11363, 0x11366, 0x1136c, 0x11370, 0x11374, - 0x11400, 0x11459, - 0x1145b, 0x1145b, - 0x1145d, 0x1145f, + 0x11400, 0x1145b, + 0x1145d, 0x11461, 0x11480, 0x114c7, 0x114d0, 0x114d9, 0x11580, 0x115b5, @@ -5780,7 +5863,14 @@ static const OnigCodePoint CR_Assigned[] = { 0x11730, 0x1173f, 0x11800, 0x1183b, 0x118a0, 0x118f2, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x11935, + 0x11937, 0x11938, + 0x1193b, 0x11946, + 0x11950, 0x11959, 0x119a0, 0x119a7, 0x119aa, 0x119d7, 0x119da, 0x119e4, @@ -5808,6 +5898,7 @@ static const OnigCodePoint CR_Assigned[] = { 0x11d93, 0x11d98, 0x11da0, 0x11da9, 0x11ee0, 0x11ef8, + 0x11fb0, 0x11fb0, 0x11fc0, 0x11ff1, 0x11fff, 0x12399, 0x12400, 0x1246e, @@ -5831,9 +5922,11 @@ static const OnigCodePoint CR_Assigned[] = { 0x16f00, 0x16f4a, 0x16f4f, 0x16f87, 0x16f8f, 0x16f9f, - 0x16fe0, 0x16fe3, + 0x16fe0, 0x16fe4, + 0x16ff0, 0x16ff1, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -5931,17 +6024,15 @@ static const OnigCodePoint CR_Assigned[] = { 0x1f0b1, 0x1f0bf, 0x1f0c1, 0x1f0cf, 0x1f0d1, 0x1f0f5, - 0x1f100, 0x1f10c, - 0x1f110, 0x1f16c, - 0x1f170, 0x1f1ac, + 0x1f100, 0x1f1ad, 0x1f1e6, 0x1f202, 0x1f210, 0x1f23b, 0x1f240, 0x1f248, 0x1f250, 0x1f251, 0x1f260, 0x1f265, - 0x1f300, 0x1f6d5, + 0x1f300, 0x1f6d7, 0x1f6e0, 0x1f6ec, - 0x1f6f0, 0x1f6fa, + 0x1f6f0, 0x1f6fc, 0x1f700, 0x1f773, 0x1f780, 0x1f7d8, 0x1f7e0, 0x1f7eb, @@ -5950,24 +6041,28 @@ static const OnigCodePoint CR_Assigned[] = { 0x1f850, 0x1f859, 0x1f860, 0x1f887, 0x1f890, 0x1f8ad, - 0x1f900, 0x1f90b, - 0x1f90d, 0x1f971, - 0x1f973, 0x1f976, - 0x1f97a, 0x1f9a2, - 0x1f9a5, 0x1f9aa, - 0x1f9ae, 0x1f9ca, + 0x1f8b0, 0x1f8b1, + 0x1f900, 0x1f978, + 0x1f97a, 0x1f9cb, 0x1f9cd, 0x1fa53, 0x1fa60, 0x1fa6d, - 0x1fa70, 0x1fa73, + 0x1fa70, 0x1fa74, 0x1fa78, 0x1fa7a, - 0x1fa80, 0x1fa82, - 0x1fa90, 0x1fa95, - 0x20000, 0x2a6d6, + 0x1fa80, 0x1fa86, + 0x1fa90, 0x1faa8, + 0x1fab0, 0x1fab6, + 0x1fac0, 0x1fac2, + 0x1fad0, 0x1fad6, + 0x1fb00, 0x1fb92, + 0x1fb94, 0x1fbca, + 0x1fbf0, 0x1fbf9, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, 0xe0001, 0xe0001, 0xe0020, 0xe007f, 0xe0100, 0xe01ef, @@ -5977,7 +6072,7 @@ static const OnigCodePoint CR_Assigned[] = { /* 'C': Major Category */ static const OnigCodePoint CR_C[] = { - 668, + 679, 0x0000, 0x001f, 0x007f, 0x009f, 0x00ad, 0x00ad, @@ -6005,7 +6100,7 @@ static const OnigCodePoint CR_C[] = { 0x085f, 0x085f, 0x086b, 0x089f, 0x08b5, 0x08b5, - 0x08be, 0x08d2, + 0x08c8, 0x08d2, 0x08e2, 0x08e2, 0x0984, 0x0984, 0x098d, 0x098e, @@ -6060,7 +6155,7 @@ static const OnigCodePoint CR_C[] = { 0x0b3a, 0x0b3b, 0x0b45, 0x0b46, 0x0b49, 0x0b4a, - 0x0b4e, 0x0b55, + 0x0b4e, 0x0b54, 0x0b58, 0x0b5b, 0x0b5e, 0x0b5e, 0x0b64, 0x0b65, @@ -6105,14 +6200,13 @@ static const OnigCodePoint CR_C[] = { 0x0ce4, 0x0ce5, 0x0cf0, 0x0cf0, 0x0cf3, 0x0cff, - 0x0d04, 0x0d04, 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d45, 0x0d45, 0x0d49, 0x0d49, 0x0d50, 0x0d53, 0x0d64, 0x0d65, - 0x0d80, 0x0d81, + 0x0d80, 0x0d80, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, @@ -6199,7 +6293,7 @@ static const OnigCodePoint CR_C[] = { 0x1a8a, 0x1a8f, 0x1a9a, 0x1a9f, 0x1aae, 0x1aaf, - 0x1abf, 0x1aff, + 0x1ac1, 0x1aff, 0x1b4c, 0x1b4f, 0x1b7d, 0x1b7f, 0x1bf4, 0x1bfb, @@ -6238,7 +6332,7 @@ static const OnigCodePoint CR_C[] = { 0x2427, 0x243f, 0x244b, 0x245f, 0x2b74, 0x2b75, - 0x2b96, 0x2b97, + 0x2b96, 0x2b96, 0x2c2f, 0x2c2f, 0x2c5f, 0x2c5f, 0x2cf4, 0x2cf8, @@ -6256,7 +6350,7 @@ static const OnigCodePoint CR_C[] = { 0x2dcf, 0x2dcf, 0x2dd7, 0x2dd7, 0x2ddf, 0x2ddf, - 0x2e50, 0x2e7f, + 0x2e53, 0x2e7f, 0x2e9a, 0x2e9a, 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, @@ -6266,18 +6360,16 @@ static const OnigCodePoint CR_C[] = { 0x3100, 0x3104, 0x3130, 0x3130, 0x318f, 0x318f, - 0x31bb, 0x31bf, 0x31e4, 0x31ef, 0x321f, 0x321f, - 0x4db6, 0x4dbf, - 0x9ff0, 0x9fff, + 0x9ffd, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xa4cf, 0xa62c, 0xa63f, 0xa6f8, 0xa6ff, 0xa7c0, 0xa7c1, - 0xa7c7, 0xa7f6, - 0xa82c, 0xa82f, + 0xa7cb, 0xa7f4, + 0xa82d, 0xa82f, 0xa83a, 0xa83f, 0xa878, 0xa87f, 0xa8c6, 0xa8cd, @@ -6297,7 +6389,7 @@ static const OnigCodePoint CR_C[] = { 0xab17, 0xab1f, 0xab27, 0xab27, 0xab2f, 0xab2f, - 0xab68, 0xab6f, + 0xab6c, 0xab6f, 0xabee, 0xabef, 0xabfa, 0xabff, 0xd7a4, 0xd7af, @@ -6341,7 +6433,7 @@ static const OnigCodePoint CR_C[] = { 0x10103, 0x10106, 0x10134, 0x10136, 0x1018f, 0x1018f, - 0x1019c, 0x1019f, + 0x1019d, 0x1019f, 0x101a1, 0x101cf, 0x101fe, 0x1027f, 0x1029d, 0x1029f, @@ -6400,9 +6492,13 @@ static const OnigCodePoint CR_C[] = { 0x10cf3, 0x10cf9, 0x10d28, 0x10d2f, 0x10d3a, 0x10e5f, - 0x10e7f, 0x10eff, + 0x10e7f, 0x10e7f, + 0x10eaa, 0x10eaa, + 0x10eae, 0x10eaf, + 0x10eb2, 0x10eff, 0x10f28, 0x10f2f, - 0x10f5a, 0x10fdf, + 0x10f5a, 0x10faf, + 0x10fcc, 0x10fdf, 0x10ff7, 0x10fff, 0x1104e, 0x11051, 0x11070, 0x1107e, @@ -6411,9 +6507,8 @@ static const OnigCodePoint CR_C[] = { 0x110e9, 0x110ef, 0x110fa, 0x110ff, 0x11135, 0x11135, - 0x11147, 0x1114f, + 0x11148, 0x1114f, 0x11177, 0x1117f, - 0x111ce, 0x111cf, 0x111e0, 0x111e0, 0x111f5, 0x111ff, 0x11212, 0x11212, @@ -6440,9 +6535,8 @@ static const OnigCodePoint CR_C[] = { 0x11364, 0x11365, 0x1136d, 0x1136f, 0x11375, 0x113ff, - 0x1145a, 0x1145a, 0x1145c, 0x1145c, - 0x11460, 0x1147f, + 0x11462, 0x1147f, 0x114c8, 0x114cf, 0x114da, 0x1157f, 0x115b6, 0x115b7, @@ -6457,7 +6551,14 @@ static const OnigCodePoint CR_C[] = { 0x11740, 0x117ff, 0x1183c, 0x1189f, 0x118f3, 0x118fe, - 0x11900, 0x1199f, + 0x11907, 0x11908, + 0x1190a, 0x1190b, + 0x11914, 0x11914, + 0x11917, 0x11917, + 0x11936, 0x11936, + 0x11939, 0x1193a, + 0x11947, 0x1194f, + 0x1195a, 0x1199f, 0x119a8, 0x119a9, 0x119d8, 0x119d9, 0x119e5, 0x119ff, @@ -6484,7 +6585,8 @@ static const OnigCodePoint CR_C[] = { 0x11d92, 0x11d92, 0x11d99, 0x11d9f, 0x11daa, 0x11edf, - 0x11ef9, 0x11fbf, + 0x11ef9, 0x11faf, + 0x11fb1, 0x11fbf, 0x11ff2, 0x11ffe, 0x1239a, 0x123ff, 0x1246f, 0x1246f, @@ -6507,9 +6609,11 @@ static const OnigCodePoint CR_C[] = { 0x16f4b, 0x16f4e, 0x16f88, 0x16f8e, 0x16fa0, 0x16fdf, - 0x16fe4, 0x16fff, + 0x16fe5, 0x16fef, + 0x16ff2, 0x16fff, 0x187f8, 0x187ff, - 0x18af3, 0x1afff, + 0x18cd6, 0x18cff, + 0x18d09, 0x1afff, 0x1b11f, 0x1b14f, 0x1b153, 0x1b163, 0x1b168, 0x1b16f, @@ -6608,17 +6712,15 @@ static const OnigCodePoint CR_C[] = { 0x1f0c0, 0x1f0c0, 0x1f0d0, 0x1f0d0, 0x1f0f6, 0x1f0ff, - 0x1f10d, 0x1f10f, - 0x1f16d, 0x1f16f, - 0x1f1ad, 0x1f1e5, + 0x1f1ae, 0x1f1e5, 0x1f203, 0x1f20f, 0x1f23c, 0x1f23f, 0x1f249, 0x1f24f, 0x1f252, 0x1f25f, 0x1f266, 0x1f2ff, - 0x1f6d6, 0x1f6df, + 0x1f6d8, 0x1f6df, 0x1f6ed, 0x1f6ef, - 0x1f6fb, 0x1f6ff, + 0x1f6fd, 0x1f6ff, 0x1f774, 0x1f77f, 0x1f7d9, 0x1f7df, 0x1f7ec, 0x1f7ff, @@ -6626,25 +6728,29 @@ static const OnigCodePoint CR_C[] = { 0x1f848, 0x1f84f, 0x1f85a, 0x1f85f, 0x1f888, 0x1f88f, - 0x1f8ae, 0x1f8ff, - 0x1f90c, 0x1f90c, - 0x1f972, 0x1f972, - 0x1f977, 0x1f979, - 0x1f9a3, 0x1f9a4, - 0x1f9ab, 0x1f9ad, - 0x1f9cb, 0x1f9cc, + 0x1f8ae, 0x1f8af, + 0x1f8b2, 0x1f8ff, + 0x1f979, 0x1f979, + 0x1f9cc, 0x1f9cc, 0x1fa54, 0x1fa5f, 0x1fa6e, 0x1fa6f, - 0x1fa74, 0x1fa77, + 0x1fa75, 0x1fa77, 0x1fa7b, 0x1fa7f, - 0x1fa83, 0x1fa8f, - 0x1fa96, 0x1ffff, - 0x2a6d7, 0x2a6ff, + 0x1fa87, 0x1fa8f, + 0x1faa9, 0x1faaf, + 0x1fab7, 0x1fabf, + 0x1fac3, 0x1facf, + 0x1fad7, 0x1faff, + 0x1fb93, 0x1fb93, + 0x1fbcb, 0x1fbef, + 0x1fbfa, 0x1ffff, + 0x2a6de, 0x2a6ff, 0x2b735, 0x2b73f, 0x2b81e, 0x2b81f, 0x2cea2, 0x2ceaf, 0x2ebe1, 0x2f7ff, - 0x2fa1e, 0xe00ff, + 0x2fa1e, 0x2ffff, + 0x3134b, 0xe00ff, 0xe01f0, 0x10ffff, }; /* CR_C */ @@ -6678,7 +6784,7 @@ static const OnigCodePoint CR_Cf[] = { /* 'Cn': General Category */ static const OnigCodePoint CR_Cn[] = { - 666, + 677, 0x0378, 0x0379, 0x0380, 0x0383, 0x038b, 0x038b, @@ -6702,7 +6808,7 @@ static const OnigCodePoint CR_Cn[] = { 0x085f, 0x085f, 0x086b, 0x089f, 0x08b5, 0x08b5, - 0x08be, 0x08d2, + 0x08c8, 0x08d2, 0x0984, 0x0984, 0x098d, 0x098e, 0x0991, 0x0992, @@ -6756,7 +6862,7 @@ static const OnigCodePoint CR_Cn[] = { 0x0b3a, 0x0b3b, 0x0b45, 0x0b46, 0x0b49, 0x0b4a, - 0x0b4e, 0x0b55, + 0x0b4e, 0x0b54, 0x0b58, 0x0b5b, 0x0b5e, 0x0b5e, 0x0b64, 0x0b65, @@ -6801,14 +6907,13 @@ static const OnigCodePoint CR_Cn[] = { 0x0ce4, 0x0ce5, 0x0cf0, 0x0cf0, 0x0cf3, 0x0cff, - 0x0d04, 0x0d04, 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d45, 0x0d45, 0x0d49, 0x0d49, 0x0d50, 0x0d53, 0x0d64, 0x0d65, - 0x0d80, 0x0d81, + 0x0d80, 0x0d80, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, @@ -6895,7 +7000,7 @@ static const OnigCodePoint CR_Cn[] = { 0x1a8a, 0x1a8f, 0x1a9a, 0x1a9f, 0x1aae, 0x1aaf, - 0x1abf, 0x1aff, + 0x1ac1, 0x1aff, 0x1b4c, 0x1b4f, 0x1b7d, 0x1b7f, 0x1bf4, 0x1bfb, @@ -6932,7 +7037,7 @@ static const OnigCodePoint CR_Cn[] = { 0x2427, 0x243f, 0x244b, 0x245f, 0x2b74, 0x2b75, - 0x2b96, 0x2b97, + 0x2b96, 0x2b96, 0x2c2f, 0x2c2f, 0x2c5f, 0x2c5f, 0x2cf4, 0x2cf8, @@ -6950,7 +7055,7 @@ static const OnigCodePoint CR_Cn[] = { 0x2dcf, 0x2dcf, 0x2dd7, 0x2dd7, 0x2ddf, 0x2ddf, - 0x2e50, 0x2e7f, + 0x2e53, 0x2e7f, 0x2e9a, 0x2e9a, 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, @@ -6960,18 +7065,16 @@ static const OnigCodePoint CR_Cn[] = { 0x3100, 0x3104, 0x3130, 0x3130, 0x318f, 0x318f, - 0x31bb, 0x31bf, 0x31e4, 0x31ef, 0x321f, 0x321f, - 0x4db6, 0x4dbf, - 0x9ff0, 0x9fff, + 0x9ffd, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xa4cf, 0xa62c, 0xa63f, 0xa6f8, 0xa6ff, 0xa7c0, 0xa7c1, - 0xa7c7, 0xa7f6, - 0xa82c, 0xa82f, + 0xa7cb, 0xa7f4, + 0xa82d, 0xa82f, 0xa83a, 0xa83f, 0xa878, 0xa87f, 0xa8c6, 0xa8cd, @@ -6991,7 +7094,7 @@ static const OnigCodePoint CR_Cn[] = { 0xab17, 0xab1f, 0xab27, 0xab27, 0xab2f, 0xab2f, - 0xab68, 0xab6f, + 0xab6c, 0xab6f, 0xabee, 0xabef, 0xabfa, 0xabff, 0xd7a4, 0xd7af, @@ -7036,7 +7139,7 @@ static const OnigCodePoint CR_Cn[] = { 0x10103, 0x10106, 0x10134, 0x10136, 0x1018f, 0x1018f, - 0x1019c, 0x1019f, + 0x1019d, 0x1019f, 0x101a1, 0x101cf, 0x101fe, 0x1027f, 0x1029d, 0x1029f, @@ -7095,9 +7198,13 @@ static const OnigCodePoint CR_Cn[] = { 0x10cf3, 0x10cf9, 0x10d28, 0x10d2f, 0x10d3a, 0x10e5f, - 0x10e7f, 0x10eff, + 0x10e7f, 0x10e7f, + 0x10eaa, 0x10eaa, + 0x10eae, 0x10eaf, + 0x10eb2, 0x10eff, 0x10f28, 0x10f2f, - 0x10f5a, 0x10fdf, + 0x10f5a, 0x10faf, + 0x10fcc, 0x10fdf, 0x10ff7, 0x10fff, 0x1104e, 0x11051, 0x11070, 0x1107e, @@ -7106,9 +7213,8 @@ static const OnigCodePoint CR_Cn[] = { 0x110e9, 0x110ef, 0x110fa, 0x110ff, 0x11135, 0x11135, - 0x11147, 0x1114f, + 0x11148, 0x1114f, 0x11177, 0x1117f, - 0x111ce, 0x111cf, 0x111e0, 0x111e0, 0x111f5, 0x111ff, 0x11212, 0x11212, @@ -7135,9 +7241,8 @@ static const OnigCodePoint CR_Cn[] = { 0x11364, 0x11365, 0x1136d, 0x1136f, 0x11375, 0x113ff, - 0x1145a, 0x1145a, 0x1145c, 0x1145c, - 0x11460, 0x1147f, + 0x11462, 0x1147f, 0x114c8, 0x114cf, 0x114da, 0x1157f, 0x115b6, 0x115b7, @@ -7152,7 +7257,14 @@ static const OnigCodePoint CR_Cn[] = { 0x11740, 0x117ff, 0x1183c, 0x1189f, 0x118f3, 0x118fe, - 0x11900, 0x1199f, + 0x11907, 0x11908, + 0x1190a, 0x1190b, + 0x11914, 0x11914, + 0x11917, 0x11917, + 0x11936, 0x11936, + 0x11939, 0x1193a, + 0x11947, 0x1194f, + 0x1195a, 0x1199f, 0x119a8, 0x119a9, 0x119d8, 0x119d9, 0x119e5, 0x119ff, @@ -7179,7 +7291,8 @@ static const OnigCodePoint CR_Cn[] = { 0x11d92, 0x11d92, 0x11d99, 0x11d9f, 0x11daa, 0x11edf, - 0x11ef9, 0x11fbf, + 0x11ef9, 0x11faf, + 0x11fb1, 0x11fbf, 0x11ff2, 0x11ffe, 0x1239a, 0x123ff, 0x1246f, 0x1246f, @@ -7203,9 +7316,11 @@ static const OnigCodePoint CR_Cn[] = { 0x16f4b, 0x16f4e, 0x16f88, 0x16f8e, 0x16fa0, 0x16fdf, - 0x16fe4, 0x16fff, + 0x16fe5, 0x16fef, + 0x16ff2, 0x16fff, 0x187f8, 0x187ff, - 0x18af3, 0x1afff, + 0x18cd6, 0x18cff, + 0x18d09, 0x1afff, 0x1b11f, 0x1b14f, 0x1b153, 0x1b163, 0x1b168, 0x1b16f, @@ -7303,17 +7418,15 @@ static const OnigCodePoint CR_Cn[] = { 0x1f0c0, 0x1f0c0, 0x1f0d0, 0x1f0d0, 0x1f0f6, 0x1f0ff, - 0x1f10d, 0x1f10f, - 0x1f16d, 0x1f16f, - 0x1f1ad, 0x1f1e5, + 0x1f1ae, 0x1f1e5, 0x1f203, 0x1f20f, 0x1f23c, 0x1f23f, 0x1f249, 0x1f24f, 0x1f252, 0x1f25f, 0x1f266, 0x1f2ff, - 0x1f6d6, 0x1f6df, + 0x1f6d8, 0x1f6df, 0x1f6ed, 0x1f6ef, - 0x1f6fb, 0x1f6ff, + 0x1f6fd, 0x1f6ff, 0x1f774, 0x1f77f, 0x1f7d9, 0x1f7df, 0x1f7ec, 0x1f7ff, @@ -7321,25 +7434,29 @@ static const OnigCodePoint CR_Cn[] = { 0x1f848, 0x1f84f, 0x1f85a, 0x1f85f, 0x1f888, 0x1f88f, - 0x1f8ae, 0x1f8ff, - 0x1f90c, 0x1f90c, - 0x1f972, 0x1f972, - 0x1f977, 0x1f979, - 0x1f9a3, 0x1f9a4, - 0x1f9ab, 0x1f9ad, - 0x1f9cb, 0x1f9cc, + 0x1f8ae, 0x1f8af, + 0x1f8b2, 0x1f8ff, + 0x1f979, 0x1f979, + 0x1f9cc, 0x1f9cc, 0x1fa54, 0x1fa5f, 0x1fa6e, 0x1fa6f, - 0x1fa74, 0x1fa77, + 0x1fa75, 0x1fa77, 0x1fa7b, 0x1fa7f, - 0x1fa83, 0x1fa8f, - 0x1fa96, 0x1ffff, - 0x2a6d7, 0x2a6ff, + 0x1fa87, 0x1fa8f, + 0x1faa9, 0x1faaf, + 0x1fab7, 0x1fabf, + 0x1fac3, 0x1facf, + 0x1fad7, 0x1faff, + 0x1fb93, 0x1fb93, + 0x1fbcb, 0x1fbef, + 0x1fbfa, 0x1ffff, + 0x2a6de, 0x2a6ff, 0x2b735, 0x2b73f, 0x2b81e, 0x2b81f, 0x2cea2, 0x2ceaf, 0x2ebe1, 0x2f7ff, - 0x2fa1e, 0xe0000, + 0x2fa1e, 0x2ffff, + 0x3134b, 0xe0000, 0xe0002, 0xe001f, 0xe0080, 0xe00ff, 0xe01f0, 0xeffff, @@ -7363,7 +7480,7 @@ static const OnigCodePoint CR_Cs[] = { /* 'L': Major Category */ static const OnigCodePoint CR_L[] = { - 609, + 622, 0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, @@ -7414,7 +7531,7 @@ static const OnigCodePoint CR_L[] = { 0x0840, 0x0858, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x0904, 0x0939, 0x093d, 0x093d, 0x0950, 0x0950, @@ -7490,7 +7607,7 @@ static const OnigCodePoint CR_L[] = { 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0cf1, 0x0cf2, - 0x0d05, 0x0d0c, + 0x0d04, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d3a, 0x0d3d, 0x0d3d, @@ -7661,10 +7778,10 @@ static const OnigCodePoint CR_L[] = { 0x30fc, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x31a0, 0x31ba, + 0x31a0, 0x31bf, 0x31f0, 0x31ff, - 0x3400, 0x4db5, - 0x4e00, 0x9fef, + 0x3400, 0x4dbf, + 0x4e00, 0x9ffc, 0xa000, 0xa48c, 0xa4d0, 0xa4fd, 0xa500, 0xa60c, @@ -7676,8 +7793,8 @@ static const OnigCodePoint CR_L[] = { 0xa717, 0xa71f, 0xa722, 0xa788, 0xa78b, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa801, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa801, 0xa803, 0xa805, 0xa807, 0xa80a, 0xa80c, 0xa822, @@ -7714,7 +7831,7 @@ static const OnigCodePoint CR_L[] = { 0xab20, 0xab26, 0xab28, 0xab2e, 0xab30, 0xab5a, - 0xab5c, 0xab67, + 0xab5c, 0xab69, 0xab70, 0xabe2, 0xac00, 0xd7a3, 0xd7b0, 0xd7c6, @@ -7798,15 +7915,19 @@ static const OnigCodePoint CR_L[] = { 0x10c80, 0x10cb2, 0x10cc0, 0x10cf2, 0x10d00, 0x10d23, + 0x10e80, 0x10ea9, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f1c, 0x10f27, 0x10f27, 0x10f30, 0x10f45, + 0x10fb0, 0x10fc4, 0x10fe0, 0x10ff6, 0x11003, 0x11037, 0x11083, 0x110af, 0x110d0, 0x110e8, 0x11103, 0x11126, 0x11144, 0x11144, + 0x11147, 0x11147, 0x11150, 0x11172, 0x11176, 0x11176, 0x11183, 0x111b2, @@ -7832,7 +7953,7 @@ static const OnigCodePoint CR_L[] = { 0x1135d, 0x11361, 0x11400, 0x11434, 0x11447, 0x1144a, - 0x1145f, 0x1145f, + 0x1145f, 0x11461, 0x11480, 0x114af, 0x114c4, 0x114c5, 0x114c7, 0x114c7, @@ -7845,7 +7966,13 @@ static const OnigCodePoint CR_L[] = { 0x11700, 0x1171a, 0x11800, 0x1182b, 0x118a0, 0x118df, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x1192f, + 0x1193f, 0x1193f, + 0x11941, 0x11941, 0x119a0, 0x119a7, 0x119aa, 0x119d0, 0x119e1, 0x119e1, @@ -7870,6 +7997,7 @@ static const OnigCodePoint CR_L[] = { 0x11d6a, 0x11d89, 0x11d98, 0x11d98, 0x11ee0, 0x11ef2, + 0x11fb0, 0x11fb0, 0x12000, 0x12399, 0x12480, 0x12543, 0x13000, 0x1342e, @@ -7888,7 +8016,8 @@ static const OnigCodePoint CR_L[] = { 0x16fe0, 0x16fe1, 0x16fe3, 0x16fe3, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -7967,17 +8096,18 @@ static const OnigCodePoint CR_L[] = { 0x1eea1, 0x1eea3, 0x1eea5, 0x1eea9, 0x1eeab, 0x1eebb, - 0x20000, 0x2a6d6, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, }; /* CR_L */ /* 'LC': General Category */ static const OnigCodePoint CR_LC[] = { - 131, + 132, 0x0041, 0x005a, 0x0061, 0x007a, 0x00b5, 0x00b5, @@ -8062,10 +8192,11 @@ static const OnigCodePoint CR_LC[] = { 0xa771, 0xa787, 0xa78b, 0xa78e, 0xa790, 0xa7bf, - 0xa7c2, 0xa7c6, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa7f6, 0xa7fa, 0xa7fa, 0xab30, 0xab5a, - 0xab60, 0xab67, + 0xab60, 0xab68, 0xab70, 0xabbf, 0xfb00, 0xfb06, 0xfb13, 0xfb17, @@ -8113,7 +8244,7 @@ static const OnigCodePoint CR_LC[] = { /* 'Ll': General Category */ static const OnigCodePoint CR_Ll[] = { - 642, + 645, 0x0061, 0x007a, 0x00b5, 0x00b5, 0x00df, 0x00f6, @@ -8715,9 +8846,12 @@ static const OnigCodePoint CR_Ll[] = { 0xa7bd, 0xa7bd, 0xa7bf, 0xa7bf, 0xa7c3, 0xa7c3, + 0xa7c8, 0xa7c8, + 0xa7ca, 0xa7ca, + 0xa7f6, 0xa7f6, 0xa7fa, 0xa7fa, 0xab30, 0xab5a, - 0xab60, 0xab67, + 0xab60, 0xab68, 0xab70, 0xabbf, 0xfb00, 0xfb06, 0xfb13, 0xfb17, @@ -8760,7 +8894,7 @@ static const OnigCodePoint CR_Ll[] = { /* 'Lm': General Category */ static const OnigCodePoint CR_Lm[] = { - 60, + 61, 0x02b0, 0x02c1, 0x02c6, 0x02d1, 0x02e0, 0x02e4, @@ -8813,6 +8947,7 @@ static const OnigCodePoint CR_Lm[] = { 0xaadd, 0xaadd, 0xaaf3, 0xaaf4, 0xab5c, 0xab5f, + 0xab69, 0xab69, 0xff70, 0xff70, 0xff9e, 0xff9f, 0x16b40, 0x16b43, @@ -8825,7 +8960,7 @@ static const OnigCodePoint CR_Lm[] = { /* 'Lo': General Category */ static const OnigCodePoint CR_Lo[] = { - 476, + 489, 0x00aa, 0x00aa, 0x00ba, 0x00ba, 0x01bb, 0x01bb, @@ -8850,7 +8985,7 @@ static const OnigCodePoint CR_Lo[] = { 0x0840, 0x0858, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x0904, 0x0939, 0x093d, 0x093d, 0x0950, 0x0950, @@ -8926,7 +9061,7 @@ static const OnigCodePoint CR_Lo[] = { 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0cf1, 0x0cf2, - 0x0d05, 0x0d0c, + 0x0d04, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d3a, 0x0d3d, 0x0d3d, @@ -9039,10 +9174,10 @@ static const OnigCodePoint CR_Lo[] = { 0x30ff, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x31a0, 0x31ba, + 0x31a0, 0x31bf, 0x31f0, 0x31ff, - 0x3400, 0x4db5, - 0x4e00, 0x9fef, + 0x3400, 0x4dbf, + 0x4e00, 0x9ffc, 0xa000, 0xa014, 0xa016, 0xa48c, 0xa4d0, 0xa4f7, @@ -9166,15 +9301,19 @@ static const OnigCodePoint CR_Lo[] = { 0x10b80, 0x10b91, 0x10c00, 0x10c48, 0x10d00, 0x10d23, + 0x10e80, 0x10ea9, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f1c, 0x10f27, 0x10f27, 0x10f30, 0x10f45, + 0x10fb0, 0x10fc4, 0x10fe0, 0x10ff6, 0x11003, 0x11037, 0x11083, 0x110af, 0x110d0, 0x110e8, 0x11103, 0x11126, 0x11144, 0x11144, + 0x11147, 0x11147, 0x11150, 0x11172, 0x11176, 0x11176, 0x11183, 0x111b2, @@ -9200,7 +9339,7 @@ static const OnigCodePoint CR_Lo[] = { 0x1135d, 0x11361, 0x11400, 0x11434, 0x11447, 0x1144a, - 0x1145f, 0x1145f, + 0x1145f, 0x11461, 0x11480, 0x114af, 0x114c4, 0x114c5, 0x114c7, 0x114c7, @@ -9212,7 +9351,13 @@ static const OnigCodePoint CR_Lo[] = { 0x116b8, 0x116b8, 0x11700, 0x1171a, 0x11800, 0x1182b, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x1192f, + 0x1193f, 0x1193f, + 0x11941, 0x11941, 0x119a0, 0x119a7, 0x119aa, 0x119d0, 0x119e1, 0x119e1, @@ -9237,6 +9382,7 @@ static const OnigCodePoint CR_Lo[] = { 0x11d6a, 0x11d89, 0x11d98, 0x11d98, 0x11ee0, 0x11ef2, + 0x11fb0, 0x11fb0, 0x12000, 0x12399, 0x12480, 0x12543, 0x13000, 0x1342e, @@ -9250,7 +9396,8 @@ static const OnigCodePoint CR_Lo[] = { 0x16f00, 0x16f4a, 0x16f50, 0x16f50, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -9296,12 +9443,13 @@ static const OnigCodePoint CR_Lo[] = { 0x1eea1, 0x1eea3, 0x1eea5, 0x1eea9, 0x1eeab, 0x1eebb, - 0x20000, 0x2a6d6, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, }; /* CR_Lo */ /* 'Lt': General Category */ @@ -9321,7 +9469,7 @@ static const OnigCodePoint CR_Lt[] = { /* 'Lu': General Category */ static const OnigCodePoint CR_Lu[] = { - 636, + 638, 0x0041, 0x005a, 0x00c0, 0x00d6, 0x00d8, 0x00de, @@ -9919,7 +10067,9 @@ static const OnigCodePoint CR_Lu[] = { 0xa7bc, 0xa7bc, 0xa7be, 0xa7be, 0xa7c2, 0xa7c2, - 0xa7c4, 0xa7c6, + 0xa7c4, 0xa7c7, + 0xa7c9, 0xa7c9, + 0xa7f5, 0xa7f5, 0xff21, 0xff3a, 0x10400, 0x10427, 0x104b0, 0x104d3, @@ -9962,7 +10112,7 @@ static const OnigCodePoint CR_Lu[] = { /* 'M': Major Category */ static const OnigCodePoint CR_M[] = { - 280, + 290, 0x0300, 0x036f, 0x0483, 0x0489, 0x0591, 0x05bd, @@ -10021,7 +10171,7 @@ static const OnigCodePoint CR_M[] = { 0x0b3e, 0x0b44, 0x0b47, 0x0b48, 0x0b4b, 0x0b4d, - 0x0b56, 0x0b57, + 0x0b55, 0x0b57, 0x0b62, 0x0b63, 0x0b82, 0x0b82, 0x0bbe, 0x0bc2, @@ -10048,7 +10198,7 @@ static const OnigCodePoint CR_M[] = { 0x0d4a, 0x0d4d, 0x0d57, 0x0d57, 0x0d62, 0x0d63, - 0x0d82, 0x0d83, + 0x0d81, 0x0d83, 0x0dca, 0x0dca, 0x0dcf, 0x0dd4, 0x0dd6, 0x0dd6, @@ -10095,7 +10245,7 @@ static const OnigCodePoint CR_M[] = { 0x1a55, 0x1a5e, 0x1a60, 0x1a7c, 0x1a7f, 0x1a7f, - 0x1ab0, 0x1abe, + 0x1ab0, 0x1ac0, 0x1b00, 0x1b04, 0x1b34, 0x1b44, 0x1b6b, 0x1b73, @@ -10124,6 +10274,7 @@ static const OnigCodePoint CR_M[] = { 0xa806, 0xa806, 0xa80b, 0xa80b, 0xa823, 0xa827, + 0xa82c, 0xa82c, 0xa880, 0xa881, 0xa8b4, 0xa8c5, 0xa8e0, 0xa8f1, @@ -10159,6 +10310,7 @@ static const OnigCodePoint CR_M[] = { 0x10a3f, 0x10a3f, 0x10ae5, 0x10ae6, 0x10d24, 0x10d27, + 0x10eab, 0x10eac, 0x10f46, 0x10f50, 0x11000, 0x11002, 0x11038, 0x11046, @@ -10171,6 +10323,7 @@ static const OnigCodePoint CR_M[] = { 0x11180, 0x11182, 0x111b3, 0x111c0, 0x111c9, 0x111cc, + 0x111ce, 0x111cf, 0x1122c, 0x11237, 0x1123e, 0x1123e, 0x112df, 0x112ea, @@ -10193,6 +10346,11 @@ static const OnigCodePoint CR_M[] = { 0x116ab, 0x116b7, 0x1171d, 0x1172b, 0x1182c, 0x1183a, + 0x11930, 0x11935, + 0x11937, 0x11938, + 0x1193b, 0x1193e, + 0x11940, 0x11940, + 0x11942, 0x11943, 0x119d1, 0x119d7, 0x119da, 0x119e0, 0x119e4, 0x119e4, @@ -10220,6 +10378,8 @@ static const OnigCodePoint CR_M[] = { 0x16f4f, 0x16f4f, 0x16f51, 0x16f87, 0x16f8f, 0x16f92, + 0x16fe4, 0x16fe4, + 0x16ff0, 0x16ff1, 0x1bc9d, 0x1bc9e, 0x1d165, 0x1d169, 0x1d16d, 0x1d172, @@ -10247,7 +10407,7 @@ static const OnigCodePoint CR_M[] = { /* 'Mc': General Category */ static const OnigCodePoint CR_Mc[] = { - 168, + 175, 0x0903, 0x0903, 0x093b, 0x093b, 0x093e, 0x0940, @@ -10367,6 +10527,7 @@ static const OnigCodePoint CR_Mc[] = { 0x11182, 0x11182, 0x111b3, 0x111b5, 0x111bf, 0x111c0, + 0x111ce, 0x111ce, 0x1122c, 0x1122e, 0x11232, 0x11233, 0x11235, 0x11235, @@ -10398,6 +10559,11 @@ static const OnigCodePoint CR_Mc[] = { 0x11726, 0x11726, 0x1182c, 0x1182e, 0x11838, 0x11838, + 0x11930, 0x11935, + 0x11937, 0x11938, + 0x1193d, 0x1193d, + 0x11940, 0x11940, + 0x11942, 0x11942, 0x119d1, 0x119d3, 0x119dc, 0x119df, 0x119e4, 0x119e4, @@ -10414,6 +10580,7 @@ static const OnigCodePoint CR_Mc[] = { 0x11d96, 0x11d96, 0x11ef5, 0x11ef6, 0x16f51, 0x16f87, + 0x16ff0, 0x16ff1, 0x1d165, 0x1d166, 0x1d16d, 0x1d172, }; /* CR_Mc */ @@ -10430,7 +10597,7 @@ static const OnigCodePoint CR_Me[] = { /* 'Mn': General Category */ static const OnigCodePoint CR_Mn[] = { - 318, + 327, 0x0300, 0x036f, 0x0483, 0x0487, 0x0591, 0x05bd, @@ -10489,7 +10656,7 @@ static const OnigCodePoint CR_Mn[] = { 0x0b3f, 0x0b3f, 0x0b41, 0x0b44, 0x0b4d, 0x0b4d, - 0x0b56, 0x0b56, + 0x0b55, 0x0b56, 0x0b62, 0x0b63, 0x0b82, 0x0b82, 0x0bc0, 0x0bc0, @@ -10512,6 +10679,7 @@ static const OnigCodePoint CR_Mn[] = { 0x0d41, 0x0d44, 0x0d4d, 0x0d4d, 0x0d62, 0x0d63, + 0x0d81, 0x0d81, 0x0dca, 0x0dca, 0x0dd2, 0x0dd4, 0x0dd6, 0x0dd6, @@ -10569,6 +10737,7 @@ static const OnigCodePoint CR_Mn[] = { 0x1a73, 0x1a7c, 0x1a7f, 0x1a7f, 0x1ab0, 0x1abd, + 0x1abf, 0x1ac0, 0x1b00, 0x1b03, 0x1b34, 0x1b34, 0x1b36, 0x1b3a, @@ -10609,6 +10778,7 @@ static const OnigCodePoint CR_Mn[] = { 0xa806, 0xa806, 0xa80b, 0xa80b, 0xa825, 0xa826, + 0xa82c, 0xa82c, 0xa8c4, 0xa8c5, 0xa8e0, 0xa8f1, 0xa8ff, 0xa8ff, @@ -10648,6 +10818,7 @@ static const OnigCodePoint CR_Mn[] = { 0x10a3f, 0x10a3f, 0x10ae5, 0x10ae6, 0x10d24, 0x10d27, + 0x10eab, 0x10eac, 0x10f46, 0x10f50, 0x11001, 0x11001, 0x11038, 0x11046, @@ -10661,6 +10832,7 @@ static const OnigCodePoint CR_Mn[] = { 0x11180, 0x11181, 0x111b6, 0x111be, 0x111c9, 0x111cc, + 0x111cf, 0x111cf, 0x1122f, 0x11231, 0x11234, 0x11234, 0x11236, 0x11237, @@ -10696,6 +10868,9 @@ static const OnigCodePoint CR_Mn[] = { 0x11727, 0x1172b, 0x1182f, 0x11837, 0x11839, 0x1183a, + 0x1193b, 0x1193c, + 0x1193e, 0x1193e, + 0x11943, 0x11943, 0x119d4, 0x119d7, 0x119da, 0x119db, 0x119e0, 0x119e0, @@ -10727,6 +10902,7 @@ static const OnigCodePoint CR_Mn[] = { 0x16b30, 0x16b36, 0x16f4f, 0x16f4f, 0x16f8f, 0x16f92, + 0x16fe4, 0x16fe4, 0x1bc9d, 0x1bc9e, 0x1d167, 0x1d169, 0x1d17b, 0x1d182, @@ -10753,7 +10929,7 @@ static const OnigCodePoint CR_Mn[] = { /* 'N': Major Category */ static const OnigCodePoint CR_N[] = { - 130, + 133, 0x0030, 0x0039, 0x00b2, 0x00b3, 0x00b9, 0x00b9, @@ -10850,6 +11026,7 @@ static const OnigCodePoint CR_N[] = { 0x10e60, 0x10e7e, 0x10f1d, 0x10f26, 0x10f51, 0x10f54, + 0x10fc5, 0x10fcb, 0x11052, 0x1106f, 0x110f0, 0x110f9, 0x11136, 0x1113f, @@ -10862,6 +11039,7 @@ static const OnigCodePoint CR_N[] = { 0x116c0, 0x116c9, 0x11730, 0x1173b, 0x118e0, 0x118f2, + 0x11950, 0x11959, 0x11c50, 0x11c6c, 0x11d50, 0x11d59, 0x11da0, 0x11da9, @@ -10884,6 +11062,7 @@ static const OnigCodePoint CR_N[] = { 0x1ed01, 0x1ed2d, 0x1ed2f, 0x1ed3d, 0x1f100, 0x1f10c, + 0x1fbf0, 0x1fbf9, }; /* CR_N */ /* 'Nd': General Category */ @@ -10908,7 +11087,7 @@ static const OnigCodePoint CR_Nl[] = { /* 'No': General Category */ static const OnigCodePoint CR_No[] = { - 70, + 71, 0x00b2, 0x00b3, 0x00b9, 0x00b9, 0x00bc, 0x00be, @@ -10962,6 +11141,7 @@ static const OnigCodePoint CR_No[] = { 0x10e60, 0x10e7e, 0x10f1d, 0x10f26, 0x10f51, 0x10f54, + 0x10fc5, 0x10fcb, 0x11052, 0x11065, 0x111e1, 0x111f4, 0x1173a, 0x1173b, @@ -10997,7 +11177,7 @@ static const OnigCodePoint CR_Pc[] = { /* 'Pd': General Category */ static const OnigCodePoint CR_Pd[] = { - 17, + 18, 0x002d, 0x002d, 0x058a, 0x058a, 0x05be, 0x05be, @@ -11015,6 +11195,7 @@ static const OnigCodePoint CR_Pd[] = { 0xfe58, 0xfe58, 0xfe63, 0xfe63, 0xff0d, 0xff0d, + 0x10ead, 0x10ead, }; /* CR_Pd */ /* 'Pe': General Category */ @@ -11127,7 +11308,7 @@ static const OnigCodePoint CR_Pi[] = { /* 'Po': General Category */ static const OnigCodePoint CR_Po[] = { - 179, + 181, 0x0021, 0x0023, 0x0025, 0x0027, 0x002a, 0x002a, @@ -11216,6 +11397,7 @@ static const OnigCodePoint CR_Po[] = { 0x2e3c, 0x2e3f, 0x2e41, 0x2e41, 0x2e43, 0x2e4f, + 0x2e52, 0x2e52, 0x3001, 0x3003, 0x303d, 0x303d, 0x30fb, 0x30fb, @@ -11281,7 +11463,7 @@ static const OnigCodePoint CR_Po[] = { 0x11238, 0x1123d, 0x112a9, 0x112a9, 0x1144b, 0x1144f, - 0x1145b, 0x1145b, + 0x1145a, 0x1145b, 0x1145d, 0x1145d, 0x114c6, 0x114c6, 0x115c1, 0x115d7, @@ -11289,6 +11471,7 @@ static const OnigCodePoint CR_Po[] = { 0x11660, 0x1166c, 0x1173c, 0x1173e, 0x1183b, 0x1183b, + 0x11944, 0x11946, 0x119e2, 0x119e2, 0x11a3f, 0x11a46, 0x11a9a, 0x11a9c, @@ -11391,7 +11574,7 @@ static const OnigCodePoint CR_Ps[] = { /* 'S': Major Category */ static const OnigCodePoint CR_S[] = { - 226, + 229, 0x0024, 0x0024, 0x002b, 0x002b, 0x003c, 0x003e, @@ -11492,8 +11675,9 @@ static const OnigCodePoint CR_S[] = { 0x29dc, 0x29fb, 0x29fe, 0x2b73, 0x2b76, 0x2b95, - 0x2b98, 0x2bff, + 0x2b97, 0x2bff, 0x2ce5, 0x2cea, + 0x2e50, 0x2e51, 0x2e80, 0x2e99, 0x2e9b, 0x2ef3, 0x2f00, 0x2fd5, @@ -11522,6 +11706,7 @@ static const OnigCodePoint CR_S[] = { 0xa836, 0xa839, 0xaa77, 0xaa79, 0xab5b, 0xab5b, + 0xab6a, 0xab6b, 0xfb29, 0xfb29, 0xfbb2, 0xfbc1, 0xfdfc, 0xfdfd, @@ -11541,7 +11726,7 @@ static const OnigCodePoint CR_S[] = { 0x10137, 0x1013f, 0x10179, 0x10189, 0x1018c, 0x1018e, - 0x10190, 0x1019b, + 0x10190, 0x1019c, 0x101a0, 0x101a0, 0x101d0, 0x101fc, 0x10877, 0x10878, @@ -11588,16 +11773,15 @@ static const OnigCodePoint CR_S[] = { 0x1f0b1, 0x1f0bf, 0x1f0c1, 0x1f0cf, 0x1f0d1, 0x1f0f5, - 0x1f110, 0x1f16c, - 0x1f170, 0x1f1ac, + 0x1f10d, 0x1f1ad, 0x1f1e6, 0x1f202, 0x1f210, 0x1f23b, 0x1f240, 0x1f248, 0x1f250, 0x1f251, 0x1f260, 0x1f265, - 0x1f300, 0x1f6d5, + 0x1f300, 0x1f6d7, 0x1f6e0, 0x1f6ec, - 0x1f6f0, 0x1f6fa, + 0x1f6f0, 0x1f6fc, 0x1f700, 0x1f773, 0x1f780, 0x1f7d8, 0x1f7e0, 0x1f7eb, @@ -11606,18 +11790,20 @@ static const OnigCodePoint CR_S[] = { 0x1f850, 0x1f859, 0x1f860, 0x1f887, 0x1f890, 0x1f8ad, - 0x1f900, 0x1f90b, - 0x1f90d, 0x1f971, - 0x1f973, 0x1f976, - 0x1f97a, 0x1f9a2, - 0x1f9a5, 0x1f9aa, - 0x1f9ae, 0x1f9ca, + 0x1f8b0, 0x1f8b1, + 0x1f900, 0x1f978, + 0x1f97a, 0x1f9cb, 0x1f9cd, 0x1fa53, 0x1fa60, 0x1fa6d, - 0x1fa70, 0x1fa73, + 0x1fa70, 0x1fa74, 0x1fa78, 0x1fa7a, - 0x1fa80, 0x1fa82, - 0x1fa90, 0x1fa95, + 0x1fa80, 0x1fa86, + 0x1fa90, 0x1faa8, + 0x1fab0, 0x1fab6, + 0x1fac0, 0x1fac2, + 0x1fad0, 0x1fad6, + 0x1fb00, 0x1fb92, + 0x1fb94, 0x1fbca, }; /* CR_S */ /* 'Sc': General Category */ @@ -11648,7 +11834,7 @@ static const OnigCodePoint CR_Sc[] = { /* 'Sk': General Category */ static const OnigCodePoint CR_Sk[] = { - 29, + 30, 0x005e, 0x005e, 0x0060, 0x0060, 0x00a8, 0x00a8, @@ -11673,6 +11859,7 @@ static const OnigCodePoint CR_Sk[] = { 0xa720, 0xa721, 0xa789, 0xa78a, 0xab5b, 0xab5b, + 0xab6a, 0xab6b, 0xfbb2, 0xfbc1, 0xff3e, 0xff3e, 0xff40, 0xff40, @@ -11751,7 +11938,7 @@ static const OnigCodePoint CR_Sm[] = { /* 'So': General Category */ static const OnigCodePoint CR_So[] = { - 180, + 182, 0x00a6, 0x00a6, 0x00a9, 0x00a9, 0x00ae, 0x00ae, @@ -11832,8 +12019,9 @@ static const OnigCodePoint CR_So[] = { 0x2b45, 0x2b46, 0x2b4d, 0x2b73, 0x2b76, 0x2b95, - 0x2b98, 0x2bff, + 0x2b97, 0x2bff, 0x2ce5, 0x2cea, + 0x2e50, 0x2e51, 0x2e80, 0x2e99, 0x2e9b, 0x2ef3, 0x2f00, 0x2fd5, @@ -11866,7 +12054,7 @@ static const OnigCodePoint CR_So[] = { 0x10137, 0x1013f, 0x10179, 0x10189, 0x1018c, 0x1018e, - 0x10190, 0x1019b, + 0x10190, 0x1019c, 0x101a0, 0x101a0, 0x101d0, 0x101fc, 0x10877, 0x10878, @@ -11901,17 +12089,16 @@ static const OnigCodePoint CR_So[] = { 0x1f0b1, 0x1f0bf, 0x1f0c1, 0x1f0cf, 0x1f0d1, 0x1f0f5, - 0x1f110, 0x1f16c, - 0x1f170, 0x1f1ac, + 0x1f10d, 0x1f1ad, 0x1f1e6, 0x1f202, 0x1f210, 0x1f23b, 0x1f240, 0x1f248, 0x1f250, 0x1f251, 0x1f260, 0x1f265, 0x1f300, 0x1f3fa, - 0x1f400, 0x1f6d5, + 0x1f400, 0x1f6d7, 0x1f6e0, 0x1f6ec, - 0x1f6f0, 0x1f6fa, + 0x1f6f0, 0x1f6fc, 0x1f700, 0x1f773, 0x1f780, 0x1f7d8, 0x1f7e0, 0x1f7eb, @@ -11920,18 +12107,20 @@ static const OnigCodePoint CR_So[] = { 0x1f850, 0x1f859, 0x1f860, 0x1f887, 0x1f890, 0x1f8ad, - 0x1f900, 0x1f90b, - 0x1f90d, 0x1f971, - 0x1f973, 0x1f976, - 0x1f97a, 0x1f9a2, - 0x1f9a5, 0x1f9aa, - 0x1f9ae, 0x1f9ca, + 0x1f8b0, 0x1f8b1, + 0x1f900, 0x1f978, + 0x1f97a, 0x1f9cb, 0x1f9cd, 0x1fa53, 0x1fa60, 0x1fa6d, - 0x1fa70, 0x1fa73, + 0x1fa70, 0x1fa74, 0x1fa78, 0x1fa7a, - 0x1fa80, 0x1fa82, - 0x1fa90, 0x1fa95, + 0x1fa80, 0x1fa86, + 0x1fa90, 0x1faa8, + 0x1fab0, 0x1fab6, + 0x1fac0, 0x1fac2, + 0x1fad0, 0x1fad6, + 0x1fb00, 0x1fb92, + 0x1fb94, 0x1fbca, }; /* CR_So */ /* 'Z': Major Category */ @@ -12125,7 +12314,7 @@ static const OnigCodePoint CR_Math[] = { /* 'Cased': Derived Property */ static const OnigCodePoint CR_Cased[] = { - 140, + 141, 0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, @@ -12216,10 +12405,11 @@ static const OnigCodePoint CR_Cased[] = { 0xa722, 0xa787, 0xa78b, 0xa78e, 0xa790, 0xa7bf, - 0xa7c2, 0xa7c6, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa7f6, 0xa7f8, 0xa7fa, 0xab30, 0xab5a, - 0xab5c, 0xab67, + 0xab5c, 0xab68, 0xab70, 0xabbf, 0xfb00, 0xfb06, 0xfb13, 0xfb17, @@ -12270,7 +12460,7 @@ static const OnigCodePoint CR_Cased[] = { /* 'Case_Ignorable': Derived Property */ static const OnigCodePoint CR_Case_Ignorable[] = { - 401, + 410, 0x0027, 0x0027, 0x002e, 0x002e, 0x003a, 0x003a, @@ -12288,6 +12478,7 @@ static const OnigCodePoint CR_Case_Ignorable[] = { 0x0387, 0x0387, 0x0483, 0x0489, 0x0559, 0x0559, + 0x055f, 0x055f, 0x0591, 0x05bd, 0x05bf, 0x05bf, 0x05c1, 0x05c2, @@ -12346,7 +12537,7 @@ static const OnigCodePoint CR_Case_Ignorable[] = { 0x0b3f, 0x0b3f, 0x0b41, 0x0b44, 0x0b4d, 0x0b4d, - 0x0b56, 0x0b56, + 0x0b55, 0x0b56, 0x0b62, 0x0b63, 0x0b82, 0x0b82, 0x0bc0, 0x0bc0, @@ -12369,6 +12560,7 @@ static const OnigCodePoint CR_Case_Ignorable[] = { 0x0d41, 0x0d44, 0x0d4d, 0x0d4d, 0x0d62, 0x0d63, + 0x0d81, 0x0d81, 0x0dca, 0x0dca, 0x0dd2, 0x0dd4, 0x0dd6, 0x0dd6, @@ -12430,7 +12622,7 @@ static const OnigCodePoint CR_Case_Ignorable[] = { 0x1a73, 0x1a7c, 0x1a7f, 0x1a7f, 0x1aa7, 0x1aa7, - 0x1ab0, 0x1abe, + 0x1ab0, 0x1ac0, 0x1b00, 0x1b03, 0x1b34, 0x1b34, 0x1b36, 0x1b3a, @@ -12503,6 +12695,7 @@ static const OnigCodePoint CR_Case_Ignorable[] = { 0xa806, 0xa806, 0xa80b, 0xa80b, 0xa825, 0xa826, + 0xa82c, 0xa82c, 0xa8c4, 0xa8c5, 0xa8e0, 0xa8f1, 0xa8ff, 0xa8ff, @@ -12531,6 +12724,7 @@ static const OnigCodePoint CR_Case_Ignorable[] = { 0xaaf3, 0xaaf4, 0xaaf6, 0xaaf6, 0xab5b, 0xab5f, + 0xab69, 0xab6b, 0xabe5, 0xabe5, 0xabe8, 0xabe8, 0xabed, 0xabed, @@ -12561,6 +12755,7 @@ static const OnigCodePoint CR_Case_Ignorable[] = { 0x10a3f, 0x10a3f, 0x10ae5, 0x10ae6, 0x10d24, 0x10d27, + 0x10eab, 0x10eac, 0x10f46, 0x10f50, 0x11001, 0x11001, 0x11038, 0x11046, @@ -12576,6 +12771,7 @@ static const OnigCodePoint CR_Case_Ignorable[] = { 0x11180, 0x11181, 0x111b6, 0x111be, 0x111c9, 0x111cc, + 0x111cf, 0x111cf, 0x1122f, 0x11231, 0x11234, 0x11234, 0x11236, 0x11237, @@ -12611,6 +12807,9 @@ static const OnigCodePoint CR_Case_Ignorable[] = { 0x11727, 0x1172b, 0x1182f, 0x11837, 0x11839, 0x1183a, + 0x1193b, 0x1193c, + 0x1193e, 0x1193e, + 0x11943, 0x11943, 0x119d4, 0x119d7, 0x119da, 0x119db, 0x119e0, 0x119e0, @@ -12645,7 +12844,7 @@ static const OnigCodePoint CR_Case_Ignorable[] = { 0x16f4f, 0x16f4f, 0x16f8f, 0x16f9f, 0x16fe0, 0x16fe1, - 0x16fe3, 0x16fe3, + 0x16fe3, 0x16fe4, 0x1bc9d, 0x1bc9e, 0x1bca0, 0x1bca3, 0x1d167, 0x1d169, @@ -12676,7 +12875,7 @@ static const OnigCodePoint CR_Case_Ignorable[] = { /* 'Changes_When_Lowercased': Derived Property */ static const OnigCodePoint CR_Changes_When_Lowercased[] = { - 599, + 601, 0x0041, 0x005a, 0x00c0, 0x00d6, 0x00d8, 0x00de, @@ -13268,7 +13467,9 @@ static const OnigCodePoint CR_Changes_When_Lowercased[] = { 0xa7bc, 0xa7bc, 0xa7be, 0xa7be, 0xa7c2, 0xa7c2, - 0xa7c4, 0xa7c6, + 0xa7c4, 0xa7c7, + 0xa7c9, 0xa7c9, + 0xa7f5, 0xa7f5, 0xff21, 0xff3a, 0x10400, 0x10427, 0x104b0, 0x104d3, @@ -13280,7 +13481,7 @@ static const OnigCodePoint CR_Changes_When_Lowercased[] = { /* 'Changes_When_Uppercased': Derived Property */ static const OnigCodePoint CR_Changes_When_Uppercased[] = { - 616, + 619, 0x0061, 0x007a, 0x00b5, 0x00b5, 0x00df, 0x00f6, @@ -13886,6 +14087,9 @@ static const OnigCodePoint CR_Changes_When_Uppercased[] = { 0xa7bd, 0xa7bd, 0xa7bf, 0xa7bf, 0xa7c3, 0xa7c3, + 0xa7c8, 0xa7c8, + 0xa7ca, 0xa7ca, + 0xa7f6, 0xa7f6, 0xab53, 0xab53, 0xab70, 0xabbf, 0xfb00, 0xfb06, @@ -13901,7 +14105,7 @@ static const OnigCodePoint CR_Changes_When_Uppercased[] = { /* 'Changes_When_Titlecased': Derived Property */ static const OnigCodePoint CR_Changes_When_Titlecased[] = { - 615, + 618, 0x0061, 0x007a, 0x00b5, 0x00b5, 0x00df, 0x00f6, @@ -14506,6 +14710,9 @@ static const OnigCodePoint CR_Changes_When_Titlecased[] = { 0xa7bd, 0xa7bd, 0xa7bf, 0xa7bf, 0xa7c3, 0xa7c3, + 0xa7c8, 0xa7c8, + 0xa7ca, 0xa7ca, + 0xa7f6, 0xa7f6, 0xab53, 0xab53, 0xab70, 0xabbf, 0xfb00, 0xfb06, @@ -14521,7 +14728,7 @@ static const OnigCodePoint CR_Changes_When_Titlecased[] = { /* 'Changes_When_Casefolded': Derived Property */ static const OnigCodePoint CR_Changes_When_Casefolded[] = { - 612, + 614, 0x0041, 0x005a, 0x00b5, 0x00b5, 0x00c0, 0x00d6, @@ -15123,7 +15330,9 @@ static const OnigCodePoint CR_Changes_When_Casefolded[] = { 0xa7bc, 0xa7bc, 0xa7be, 0xa7be, 0xa7c2, 0xa7c2, - 0xa7c4, 0xa7c6, + 0xa7c4, 0xa7c7, + 0xa7c9, 0xa7c9, + 0xa7f5, 0xa7f5, 0xab70, 0xabbf, 0xfb00, 0xfb06, 0xfb13, 0xfb17, @@ -15138,7 +15347,7 @@ static const OnigCodePoint CR_Changes_When_Casefolded[] = { /* 'Changes_When_Casemapped': Derived Property */ static const OnigCodePoint CR_Changes_When_Casemapped[] = { - 123, + 124, 0x0041, 0x005a, 0x0061, 0x007a, 0x00b5, 0x00b5, @@ -15247,7 +15456,8 @@ static const OnigCodePoint CR_Changes_When_Casemapped[] = { 0xa790, 0xa794, 0xa796, 0xa7ae, 0xa7b0, 0xa7bf, - 0xa7c2, 0xa7c6, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa7f6, 0xab53, 0xab53, 0xab70, 0xabbf, 0xfb00, 0xfb06, @@ -15266,7 +15476,7 @@ static const OnigCodePoint CR_Changes_When_Casemapped[] = { /* 'ID_Start': Derived Property */ static const OnigCodePoint CR_ID_Start[] = { - 609, + 622, 0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, @@ -15317,7 +15527,7 @@ static const OnigCodePoint CR_ID_Start[] = { 0x0840, 0x0858, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x0904, 0x0939, 0x093d, 0x093d, 0x0950, 0x0950, @@ -15393,7 +15603,7 @@ static const OnigCodePoint CR_ID_Start[] = { 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0cf1, 0x0cf2, - 0x0d05, 0x0d0c, + 0x0d04, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d3a, 0x0d3d, 0x0d3d, @@ -15562,10 +15772,10 @@ static const OnigCodePoint CR_ID_Start[] = { 0x30fc, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x31a0, 0x31ba, + 0x31a0, 0x31bf, 0x31f0, 0x31ff, - 0x3400, 0x4db5, - 0x4e00, 0x9fef, + 0x3400, 0x4dbf, + 0x4e00, 0x9ffc, 0xa000, 0xa48c, 0xa4d0, 0xa4fd, 0xa500, 0xa60c, @@ -15577,8 +15787,8 @@ static const OnigCodePoint CR_ID_Start[] = { 0xa717, 0xa71f, 0xa722, 0xa788, 0xa78b, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa801, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa801, 0xa803, 0xa805, 0xa807, 0xa80a, 0xa80c, 0xa822, @@ -15615,7 +15825,7 @@ static const OnigCodePoint CR_ID_Start[] = { 0xab20, 0xab26, 0xab28, 0xab2e, 0xab30, 0xab5a, - 0xab5c, 0xab67, + 0xab5c, 0xab69, 0xab70, 0xabe2, 0xac00, 0xd7a3, 0xd7b0, 0xd7c6, @@ -15700,15 +15910,19 @@ static const OnigCodePoint CR_ID_Start[] = { 0x10c80, 0x10cb2, 0x10cc0, 0x10cf2, 0x10d00, 0x10d23, + 0x10e80, 0x10ea9, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f1c, 0x10f27, 0x10f27, 0x10f30, 0x10f45, + 0x10fb0, 0x10fc4, 0x10fe0, 0x10ff6, 0x11003, 0x11037, 0x11083, 0x110af, 0x110d0, 0x110e8, 0x11103, 0x11126, 0x11144, 0x11144, + 0x11147, 0x11147, 0x11150, 0x11172, 0x11176, 0x11176, 0x11183, 0x111b2, @@ -15734,7 +15948,7 @@ static const OnigCodePoint CR_ID_Start[] = { 0x1135d, 0x11361, 0x11400, 0x11434, 0x11447, 0x1144a, - 0x1145f, 0x1145f, + 0x1145f, 0x11461, 0x11480, 0x114af, 0x114c4, 0x114c5, 0x114c7, 0x114c7, @@ -15747,7 +15961,13 @@ static const OnigCodePoint CR_ID_Start[] = { 0x11700, 0x1171a, 0x11800, 0x1182b, 0x118a0, 0x118df, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x1192f, + 0x1193f, 0x1193f, + 0x11941, 0x11941, 0x119a0, 0x119a7, 0x119aa, 0x119d0, 0x119e1, 0x119e1, @@ -15772,6 +15992,7 @@ static const OnigCodePoint CR_ID_Start[] = { 0x11d6a, 0x11d89, 0x11d98, 0x11d98, 0x11ee0, 0x11ef2, + 0x11fb0, 0x11fb0, 0x12000, 0x12399, 0x12400, 0x1246e, 0x12480, 0x12543, @@ -15791,7 +16012,8 @@ static const OnigCodePoint CR_ID_Start[] = { 0x16fe0, 0x16fe1, 0x16fe3, 0x16fe3, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -15870,17 +16092,18 @@ static const OnigCodePoint CR_ID_Start[] = { 0x1eea1, 0x1eea3, 0x1eea5, 0x1eea9, 0x1eeab, 0x1eebb, - 0x20000, 0x2a6d6, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, }; /* CR_ID_Start */ /* 'ID_Continue': Derived Property */ static const OnigCodePoint CR_ID_Continue[] = { - 713, + 730, 0x0030, 0x0039, 0x0041, 0x005a, 0x005f, 0x005f, @@ -15933,7 +16156,7 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x0840, 0x085b, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x08d3, 0x08e1, 0x08e3, 0x0963, 0x0966, 0x096f, @@ -15993,7 +16216,7 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x0b3c, 0x0b44, 0x0b47, 0x0b48, 0x0b4b, 0x0b4d, - 0x0b56, 0x0b57, + 0x0b55, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b63, 0x0b66, 0x0b6f, @@ -16039,8 +16262,7 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x0ce0, 0x0ce3, 0x0ce6, 0x0cef, 0x0cf1, 0x0cf2, - 0x0d00, 0x0d03, - 0x0d05, 0x0d0c, + 0x0d00, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d44, 0x0d46, 0x0d48, @@ -16049,7 +16271,7 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x0d5f, 0x0d63, 0x0d66, 0x0d6f, 0x0d7a, 0x0d7f, - 0x0d82, 0x0d83, + 0x0d81, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, @@ -16150,6 +16372,7 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x1a90, 0x1a99, 0x1aa7, 0x1aa7, 0x1ab0, 0x1abd, + 0x1abf, 0x1ac0, 0x1b00, 0x1b4b, 0x1b50, 0x1b59, 0x1b6b, 0x1b73, @@ -16232,10 +16455,10 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x30fc, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x31a0, 0x31ba, + 0x31a0, 0x31bf, 0x31f0, 0x31ff, - 0x3400, 0x4db5, - 0x4e00, 0x9fef, + 0x3400, 0x4dbf, + 0x4e00, 0x9ffc, 0xa000, 0xa48c, 0xa4d0, 0xa4fd, 0xa500, 0xa60c, @@ -16246,8 +16469,9 @@ static const OnigCodePoint CR_ID_Continue[] = { 0xa717, 0xa71f, 0xa722, 0xa788, 0xa78b, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa827, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa827, + 0xa82c, 0xa82c, 0xa840, 0xa873, 0xa880, 0xa8c5, 0xa8d0, 0xa8d9, @@ -16273,7 +16497,7 @@ static const OnigCodePoint CR_ID_Continue[] = { 0xab20, 0xab26, 0xab28, 0xab2e, 0xab30, 0xab5a, - 0xab5c, 0xab67, + 0xab5c, 0xab69, 0xab70, 0xabea, 0xabec, 0xabed, 0xabf0, 0xabf9, @@ -16372,9 +16596,13 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x10cc0, 0x10cf2, 0x10d00, 0x10d27, 0x10d30, 0x10d39, + 0x10e80, 0x10ea9, + 0x10eab, 0x10eac, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f1c, 0x10f27, 0x10f27, 0x10f30, 0x10f50, + 0x10fb0, 0x10fc4, 0x10fe0, 0x10ff6, 0x11000, 0x11046, 0x11066, 0x1106f, @@ -16383,12 +16611,12 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x110f0, 0x110f9, 0x11100, 0x11134, 0x11136, 0x1113f, - 0x11144, 0x11146, + 0x11144, 0x11147, 0x11150, 0x11173, 0x11176, 0x11176, 0x11180, 0x111c4, 0x111c9, 0x111cc, - 0x111d0, 0x111da, + 0x111ce, 0x111da, 0x111dc, 0x111dc, 0x11200, 0x11211, 0x11213, 0x11237, @@ -16417,7 +16645,7 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x11370, 0x11374, 0x11400, 0x1144a, 0x11450, 0x11459, - 0x1145e, 0x1145f, + 0x1145e, 0x11461, 0x11480, 0x114c5, 0x114c7, 0x114c7, 0x114d0, 0x114d9, @@ -16434,7 +16662,14 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x11730, 0x11739, 0x11800, 0x1183a, 0x118a0, 0x118e9, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x11935, + 0x11937, 0x11938, + 0x1193b, 0x11943, + 0x11950, 0x11959, 0x119a0, 0x119a7, 0x119aa, 0x119d7, 0x119da, 0x119e1, @@ -16465,6 +16700,7 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x11d93, 0x11d98, 0x11da0, 0x11da9, 0x11ee0, 0x11ef6, + 0x11fb0, 0x11fb0, 0x12000, 0x12399, 0x12400, 0x1246e, 0x12480, 0x12543, @@ -16485,9 +16721,11 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x16f4f, 0x16f87, 0x16f8f, 0x16f9f, 0x16fe0, 0x16fe1, - 0x16fe3, 0x16fe3, + 0x16fe3, 0x16fe4, + 0x16ff0, 0x16ff1, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -16587,18 +16825,20 @@ static const OnigCodePoint CR_ID_Continue[] = { 0x1eea1, 0x1eea3, 0x1eea5, 0x1eea9, 0x1eeab, 0x1eebb, - 0x20000, 0x2a6d6, + 0x1fbf0, 0x1fbf9, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, 0xe0100, 0xe01ef, }; /* CR_ID_Continue */ /* 'XID_Start': Derived Property */ static const OnigCodePoint CR_XID_Start[] = { - 616, + 629, 0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, @@ -16649,7 +16889,7 @@ static const OnigCodePoint CR_XID_Start[] = { 0x0840, 0x0858, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x0904, 0x0939, 0x093d, 0x093d, 0x0950, 0x0950, @@ -16725,7 +16965,7 @@ static const OnigCodePoint CR_XID_Start[] = { 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0cf1, 0x0cf2, - 0x0d05, 0x0d0c, + 0x0d04, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d3a, 0x0d3d, 0x0d3d, @@ -16894,10 +17134,10 @@ static const OnigCodePoint CR_XID_Start[] = { 0x30fc, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x31a0, 0x31ba, + 0x31a0, 0x31bf, 0x31f0, 0x31ff, - 0x3400, 0x4db5, - 0x4e00, 0x9fef, + 0x3400, 0x4dbf, + 0x4e00, 0x9ffc, 0xa000, 0xa48c, 0xa4d0, 0xa4fd, 0xa500, 0xa60c, @@ -16909,8 +17149,8 @@ static const OnigCodePoint CR_XID_Start[] = { 0xa717, 0xa71f, 0xa722, 0xa788, 0xa78b, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa801, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa801, 0xa803, 0xa805, 0xa807, 0xa80a, 0xa80c, 0xa822, @@ -16947,7 +17187,7 @@ static const OnigCodePoint CR_XID_Start[] = { 0xab20, 0xab26, 0xab28, 0xab2e, 0xab30, 0xab5a, - 0xab5c, 0xab67, + 0xab5c, 0xab69, 0xab70, 0xabe2, 0xac00, 0xd7a3, 0xd7b0, 0xd7c6, @@ -17039,15 +17279,19 @@ static const OnigCodePoint CR_XID_Start[] = { 0x10c80, 0x10cb2, 0x10cc0, 0x10cf2, 0x10d00, 0x10d23, + 0x10e80, 0x10ea9, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f1c, 0x10f27, 0x10f27, 0x10f30, 0x10f45, + 0x10fb0, 0x10fc4, 0x10fe0, 0x10ff6, 0x11003, 0x11037, 0x11083, 0x110af, 0x110d0, 0x110e8, 0x11103, 0x11126, 0x11144, 0x11144, + 0x11147, 0x11147, 0x11150, 0x11172, 0x11176, 0x11176, 0x11183, 0x111b2, @@ -17073,7 +17317,7 @@ static const OnigCodePoint CR_XID_Start[] = { 0x1135d, 0x11361, 0x11400, 0x11434, 0x11447, 0x1144a, - 0x1145f, 0x1145f, + 0x1145f, 0x11461, 0x11480, 0x114af, 0x114c4, 0x114c5, 0x114c7, 0x114c7, @@ -17086,7 +17330,13 @@ static const OnigCodePoint CR_XID_Start[] = { 0x11700, 0x1171a, 0x11800, 0x1182b, 0x118a0, 0x118df, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x1192f, + 0x1193f, 0x1193f, + 0x11941, 0x11941, 0x119a0, 0x119a7, 0x119aa, 0x119d0, 0x119e1, 0x119e1, @@ -17111,6 +17361,7 @@ static const OnigCodePoint CR_XID_Start[] = { 0x11d6a, 0x11d89, 0x11d98, 0x11d98, 0x11ee0, 0x11ef2, + 0x11fb0, 0x11fb0, 0x12000, 0x12399, 0x12400, 0x1246e, 0x12480, 0x12543, @@ -17130,7 +17381,8 @@ static const OnigCodePoint CR_XID_Start[] = { 0x16fe0, 0x16fe1, 0x16fe3, 0x16fe3, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -17209,17 +17461,18 @@ static const OnigCodePoint CR_XID_Start[] = { 0x1eea1, 0x1eea3, 0x1eea5, 0x1eea9, 0x1eeab, 0x1eebb, - 0x20000, 0x2a6d6, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, }; /* CR_XID_Start */ /* 'XID_Continue': Derived Property */ static const OnigCodePoint CR_XID_Continue[] = { - 720, + 737, 0x0030, 0x0039, 0x0041, 0x005a, 0x005f, 0x005f, @@ -17272,7 +17525,7 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x0840, 0x085b, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x08d3, 0x08e1, 0x08e3, 0x0963, 0x0966, 0x096f, @@ -17332,7 +17585,7 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x0b3c, 0x0b44, 0x0b47, 0x0b48, 0x0b4b, 0x0b4d, - 0x0b56, 0x0b57, + 0x0b55, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b63, 0x0b66, 0x0b6f, @@ -17378,8 +17631,7 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x0ce0, 0x0ce3, 0x0ce6, 0x0cef, 0x0cf1, 0x0cf2, - 0x0d00, 0x0d03, - 0x0d05, 0x0d0c, + 0x0d00, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d44, 0x0d46, 0x0d48, @@ -17388,7 +17640,7 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x0d5f, 0x0d63, 0x0d66, 0x0d6f, 0x0d7a, 0x0d7f, - 0x0d82, 0x0d83, + 0x0d81, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, @@ -17489,6 +17741,7 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x1a90, 0x1a99, 0x1aa7, 0x1aa7, 0x1ab0, 0x1abd, + 0x1abf, 0x1ac0, 0x1b00, 0x1b4b, 0x1b50, 0x1b59, 0x1b6b, 0x1b73, @@ -17572,10 +17825,10 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x30fc, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x31a0, 0x31ba, + 0x31a0, 0x31bf, 0x31f0, 0x31ff, - 0x3400, 0x4db5, - 0x4e00, 0x9fef, + 0x3400, 0x4dbf, + 0x4e00, 0x9ffc, 0xa000, 0xa48c, 0xa4d0, 0xa4fd, 0xa500, 0xa60c, @@ -17586,8 +17839,9 @@ static const OnigCodePoint CR_XID_Continue[] = { 0xa717, 0xa71f, 0xa722, 0xa788, 0xa78b, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa827, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa827, + 0xa82c, 0xa82c, 0xa840, 0xa873, 0xa880, 0xa8c5, 0xa8d0, 0xa8d9, @@ -17613,7 +17867,7 @@ static const OnigCodePoint CR_XID_Continue[] = { 0xab20, 0xab26, 0xab28, 0xab2e, 0xab30, 0xab5a, - 0xab5c, 0xab67, + 0xab5c, 0xab69, 0xab70, 0xabea, 0xabec, 0xabed, 0xabf0, 0xabf9, @@ -17718,9 +17972,13 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x10cc0, 0x10cf2, 0x10d00, 0x10d27, 0x10d30, 0x10d39, + 0x10e80, 0x10ea9, + 0x10eab, 0x10eac, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f1c, 0x10f27, 0x10f27, 0x10f30, 0x10f50, + 0x10fb0, 0x10fc4, 0x10fe0, 0x10ff6, 0x11000, 0x11046, 0x11066, 0x1106f, @@ -17729,12 +17987,12 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x110f0, 0x110f9, 0x11100, 0x11134, 0x11136, 0x1113f, - 0x11144, 0x11146, + 0x11144, 0x11147, 0x11150, 0x11173, 0x11176, 0x11176, 0x11180, 0x111c4, 0x111c9, 0x111cc, - 0x111d0, 0x111da, + 0x111ce, 0x111da, 0x111dc, 0x111dc, 0x11200, 0x11211, 0x11213, 0x11237, @@ -17763,7 +18021,7 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x11370, 0x11374, 0x11400, 0x1144a, 0x11450, 0x11459, - 0x1145e, 0x1145f, + 0x1145e, 0x11461, 0x11480, 0x114c5, 0x114c7, 0x114c7, 0x114d0, 0x114d9, @@ -17780,7 +18038,14 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x11730, 0x11739, 0x11800, 0x1183a, 0x118a0, 0x118e9, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x11935, + 0x11937, 0x11938, + 0x1193b, 0x11943, + 0x11950, 0x11959, 0x119a0, 0x119a7, 0x119aa, 0x119d7, 0x119da, 0x119e1, @@ -17811,6 +18076,7 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x11d93, 0x11d98, 0x11da0, 0x11da9, 0x11ee0, 0x11ef6, + 0x11fb0, 0x11fb0, 0x12000, 0x12399, 0x12400, 0x1246e, 0x12480, 0x12543, @@ -17831,9 +18097,11 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x16f4f, 0x16f87, 0x16f8f, 0x16f9f, 0x16fe0, 0x16fe1, - 0x16fe3, 0x16fe3, + 0x16fe3, 0x16fe4, + 0x16ff0, 0x16ff1, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -17933,12 +18201,14 @@ static const OnigCodePoint CR_XID_Continue[] = { 0x1eea1, 0x1eea3, 0x1eea5, 0x1eea9, 0x1eeab, 0x1eebb, - 0x20000, 0x2a6d6, + 0x1fbf0, 0x1fbf9, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, 0xe0100, 0xe01ef, }; /* CR_XID_Continue */ @@ -17966,7 +18236,7 @@ static const OnigCodePoint CR_Default_Ignorable_Code_Point[] = { /* 'Grapheme_Extend': Derived Property */ static const OnigCodePoint CR_Grapheme_Extend[] = { - 335, + 344, 0x0300, 0x036f, 0x0483, 0x0489, 0x0591, 0x05bd, @@ -18027,7 +18297,7 @@ static const OnigCodePoint CR_Grapheme_Extend[] = { 0x0b3e, 0x0b3f, 0x0b41, 0x0b44, 0x0b4d, 0x0b4d, - 0x0b56, 0x0b57, + 0x0b55, 0x0b57, 0x0b62, 0x0b63, 0x0b82, 0x0b82, 0x0bbe, 0x0bbe, @@ -18056,6 +18326,7 @@ static const OnigCodePoint CR_Grapheme_Extend[] = { 0x0d4d, 0x0d4d, 0x0d57, 0x0d57, 0x0d62, 0x0d63, + 0x0d81, 0x0d81, 0x0dca, 0x0dca, 0x0dcf, 0x0dcf, 0x0dd2, 0x0dd4, @@ -18114,7 +18385,7 @@ static const OnigCodePoint CR_Grapheme_Extend[] = { 0x1a65, 0x1a6c, 0x1a73, 0x1a7c, 0x1a7f, 0x1a7f, - 0x1ab0, 0x1abe, + 0x1ab0, 0x1ac0, 0x1b00, 0x1b03, 0x1b34, 0x1b3a, 0x1b3c, 0x1b3c, @@ -18153,6 +18424,7 @@ static const OnigCodePoint CR_Grapheme_Extend[] = { 0xa806, 0xa806, 0xa80b, 0xa80b, 0xa825, 0xa826, + 0xa82c, 0xa82c, 0xa8c4, 0xa8c5, 0xa8e0, 0xa8f1, 0xa8ff, 0xa8ff, @@ -18193,6 +18465,7 @@ static const OnigCodePoint CR_Grapheme_Extend[] = { 0x10a3f, 0x10a3f, 0x10ae5, 0x10ae6, 0x10d24, 0x10d27, + 0x10eab, 0x10eac, 0x10f46, 0x10f50, 0x11001, 0x11001, 0x11038, 0x11046, @@ -18206,6 +18479,7 @@ static const OnigCodePoint CR_Grapheme_Extend[] = { 0x11180, 0x11181, 0x111b6, 0x111be, 0x111c9, 0x111cc, + 0x111cf, 0x111cf, 0x1122f, 0x11231, 0x11234, 0x11234, 0x11236, 0x11237, @@ -18246,6 +18520,10 @@ static const OnigCodePoint CR_Grapheme_Extend[] = { 0x11727, 0x1172b, 0x1182f, 0x11837, 0x11839, 0x1183a, + 0x11930, 0x11930, + 0x1193b, 0x1193c, + 0x1193e, 0x1193e, + 0x11943, 0x11943, 0x119d4, 0x119d7, 0x119da, 0x119db, 0x119e0, 0x119e0, @@ -18277,6 +18555,7 @@ static const OnigCodePoint CR_Grapheme_Extend[] = { 0x16b30, 0x16b36, 0x16f4f, 0x16f4f, 0x16f8f, 0x16f92, + 0x16fe4, 0x16fe4, 0x1bc9d, 0x1bc9e, 0x1d165, 0x1d165, 0x1d167, 0x1d169, @@ -18306,7 +18585,7 @@ static const OnigCodePoint CR_Grapheme_Extend[] = { /* 'Grapheme_Base': Derived Property */ static const OnigCodePoint CR_Grapheme_Base[] = { - 819, + 834, 0x0020, 0x007e, 0x00a0, 0x00ac, 0x00ae, 0x02ff, @@ -18350,7 +18629,7 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x085e, 0x085e, 0x0860, 0x086a, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x0903, 0x0939, 0x093b, 0x093b, 0x093d, 0x0940, @@ -18456,8 +18735,7 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x0ce0, 0x0ce1, 0x0ce6, 0x0cef, 0x0cf1, 0x0cf2, - 0x0d02, 0x0d03, - 0x0d05, 0x0d0c, + 0x0d02, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d3a, 0x0d3d, 0x0d3d, @@ -18639,7 +18917,7 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x2440, 0x244a, 0x2460, 0x2b73, 0x2b76, 0x2b95, - 0x2b98, 0x2c2e, + 0x2b97, 0x2c2e, 0x2c30, 0x2c5e, 0x2c60, 0x2cee, 0x2cf2, 0x2cf3, @@ -18657,7 +18935,7 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x2dc8, 0x2dce, 0x2dd0, 0x2dd6, 0x2dd8, 0x2dde, - 0x2e00, 0x2e4f, + 0x2e00, 0x2e52, 0x2e80, 0x2e99, 0x2e9b, 0x2ef3, 0x2f00, 0x2fd5, @@ -18668,11 +18946,9 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x309b, 0x30ff, 0x3105, 0x312f, 0x3131, 0x318e, - 0x3190, 0x31ba, - 0x31c0, 0x31e3, + 0x3190, 0x31e3, 0x31f0, 0x321e, - 0x3220, 0x4db5, - 0x4dc0, 0x9fef, + 0x3220, 0x9ffc, 0xa000, 0xa48c, 0xa490, 0xa4c6, 0xa4d0, 0xa62b, @@ -18682,8 +18958,8 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0xa6a0, 0xa6ef, 0xa6f2, 0xa6f7, 0xa700, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa801, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa801, 0xa803, 0xa805, 0xa807, 0xa80a, 0xa80c, 0xa824, @@ -18725,7 +19001,7 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0xab11, 0xab16, 0xab20, 0xab26, 0xab28, 0xab2e, - 0xab30, 0xab67, + 0xab30, 0xab6b, 0xab70, 0xabe4, 0xabe6, 0xabe7, 0xabe9, 0xabec, @@ -18773,7 +19049,7 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x10100, 0x10102, 0x10107, 0x10133, 0x10137, 0x1018e, - 0x10190, 0x1019b, + 0x10190, 0x1019c, 0x101a0, 0x101a0, 0x101d0, 0x101fc, 0x10280, 0x1029c, @@ -18831,9 +19107,13 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x10cfa, 0x10d23, 0x10d30, 0x10d39, 0x10e60, 0x10e7e, + 0x10e80, 0x10ea9, + 0x10ead, 0x10ead, + 0x10eb0, 0x10eb1, 0x10f00, 0x10f27, 0x10f30, 0x10f45, 0x10f51, 0x10f59, + 0x10fb0, 0x10fcb, 0x10fe0, 0x10ff6, 0x11000, 0x11000, 0x11002, 0x11037, @@ -18847,12 +19127,12 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x110f0, 0x110f9, 0x11103, 0x11126, 0x1112c, 0x1112c, - 0x11136, 0x11146, + 0x11136, 0x11147, 0x11150, 0x11172, 0x11174, 0x11176, 0x11182, 0x111b5, 0x111bf, 0x111c8, - 0x111cd, 0x111cd, + 0x111cd, 0x111ce, 0x111d0, 0x111df, 0x111e1, 0x111f4, 0x11200, 0x11211, @@ -18885,10 +19165,9 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x11400, 0x11437, 0x11440, 0x11441, 0x11445, 0x11445, - 0x11447, 0x11459, - 0x1145b, 0x1145b, + 0x11447, 0x1145b, 0x1145d, 0x1145d, - 0x1145f, 0x1145f, + 0x1145f, 0x11461, 0x11480, 0x114af, 0x114b1, 0x114b2, 0x114b9, 0x114b9, @@ -18922,7 +19201,17 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x11838, 0x11838, 0x1183b, 0x1183b, 0x118a0, 0x118f2, - 0x118ff, 0x118ff, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x1192f, + 0x11931, 0x11935, + 0x11937, 0x11938, + 0x1193d, 0x1193d, + 0x1193f, 0x11942, + 0x11944, 0x11946, + 0x11950, 0x11959, 0x119a0, 0x119a7, 0x119aa, 0x119d3, 0x119dc, 0x119df, @@ -18960,6 +19249,7 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x11da0, 0x11da9, 0x11ee0, 0x11ef2, 0x11ef5, 0x11ef8, + 0x11fb0, 0x11fb0, 0x11fc0, 0x11ff1, 0x11fff, 0x12399, 0x12400, 0x1246e, @@ -18984,8 +19274,10 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x16f50, 0x16f87, 0x16f93, 0x16f9f, 0x16fe0, 0x16fe3, + 0x16ff0, 0x16ff1, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b000, 0x1b11e, 0x1b150, 0x1b152, 0x1b164, 0x1b167, @@ -19089,17 +19381,15 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x1f0b1, 0x1f0bf, 0x1f0c1, 0x1f0cf, 0x1f0d1, 0x1f0f5, - 0x1f100, 0x1f10c, - 0x1f110, 0x1f16c, - 0x1f170, 0x1f1ac, + 0x1f100, 0x1f1ad, 0x1f1e6, 0x1f202, 0x1f210, 0x1f23b, 0x1f240, 0x1f248, 0x1f250, 0x1f251, 0x1f260, 0x1f265, - 0x1f300, 0x1f6d5, + 0x1f300, 0x1f6d7, 0x1f6e0, 0x1f6ec, - 0x1f6f0, 0x1f6fa, + 0x1f6f0, 0x1f6fc, 0x1f700, 0x1f773, 0x1f780, 0x1f7d8, 0x1f7e0, 0x1f7eb, @@ -19108,29 +19398,33 @@ static const OnigCodePoint CR_Grapheme_Base[] = { 0x1f850, 0x1f859, 0x1f860, 0x1f887, 0x1f890, 0x1f8ad, - 0x1f900, 0x1f90b, - 0x1f90d, 0x1f971, - 0x1f973, 0x1f976, - 0x1f97a, 0x1f9a2, - 0x1f9a5, 0x1f9aa, - 0x1f9ae, 0x1f9ca, + 0x1f8b0, 0x1f8b1, + 0x1f900, 0x1f978, + 0x1f97a, 0x1f9cb, 0x1f9cd, 0x1fa53, 0x1fa60, 0x1fa6d, - 0x1fa70, 0x1fa73, + 0x1fa70, 0x1fa74, 0x1fa78, 0x1fa7a, - 0x1fa80, 0x1fa82, - 0x1fa90, 0x1fa95, - 0x20000, 0x2a6d6, + 0x1fa80, 0x1fa86, + 0x1fa90, 0x1faa8, + 0x1fab0, 0x1fab6, + 0x1fac0, 0x1fac2, + 0x1fad0, 0x1fad6, + 0x1fb00, 0x1fb92, + 0x1fb94, 0x1fbca, + 0x1fbf0, 0x1fbf9, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, }; /* CR_Grapheme_Base */ /* 'Grapheme_Link': Derived Property */ static const OnigCodePoint CR_Grapheme_Link[] = { - 52, + 54, 0x094d, 0x094d, 0x09cd, 0x09cd, 0x0a4d, 0x0a4d, @@ -19155,6 +19449,7 @@ static const OnigCodePoint CR_Grapheme_Link[] = { 0x1bf2, 0x1bf3, 0x2d7f, 0x2d7f, 0xa806, 0xa806, + 0xa82c, 0xa82c, 0xa8c4, 0xa8c4, 0xa953, 0xa953, 0xa9c0, 0xa9c0, @@ -19176,6 +19471,7 @@ static const OnigCodePoint CR_Grapheme_Link[] = { 0x116b6, 0x116b6, 0x1172b, 0x1172b, 0x11839, 0x11839, + 0x1193d, 0x1193e, 0x119e0, 0x119e0, 0x11a34, 0x11a34, 0x11a47, 0x11a47, @@ -19187,7 +19483,7 @@ static const OnigCodePoint CR_Grapheme_Link[] = { /* 'Common': Script */ static const OnigCodePoint CR_Common[] = { - 172, + 173, 0x0000, 0x0040, 0x005b, 0x0060, 0x007b, 0x00a9, @@ -19202,7 +19498,6 @@ static const OnigCodePoint CR_Common[] = { 0x037e, 0x037e, 0x0385, 0x0385, 0x0387, 0x0387, - 0x0589, 0x0589, 0x0605, 0x0605, 0x060c, 0x060c, 0x061b, 0x061b, @@ -19241,8 +19536,8 @@ static const OnigCodePoint CR_Common[] = { 0x2460, 0x27ff, 0x2900, 0x2b73, 0x2b76, 0x2b95, - 0x2b98, 0x2bff, - 0x2e00, 0x2e4f, + 0x2b97, 0x2bff, + 0x2e00, 0x2e52, 0x2ff0, 0x2ffb, 0x3000, 0x3004, 0x3006, 0x3006, @@ -19265,6 +19560,7 @@ static const OnigCodePoint CR_Common[] = { 0xa92e, 0xa92e, 0xa9cf, 0xa9cf, 0xab5b, 0xab5b, + 0xab6a, 0xab6b, 0xfd3e, 0xfd3f, 0xfe10, 0xfe19, 0xfe30, 0xfe52, @@ -19282,7 +19578,7 @@ static const OnigCodePoint CR_Common[] = { 0x10100, 0x10102, 0x10107, 0x10133, 0x10137, 0x1013f, - 0x10190, 0x1019b, + 0x10190, 0x1019c, 0x101d0, 0x101fc, 0x102e1, 0x102fb, 0x16fe2, 0x16fe3, @@ -19326,18 +19622,16 @@ static const OnigCodePoint CR_Common[] = { 0x1f0b1, 0x1f0bf, 0x1f0c1, 0x1f0cf, 0x1f0d1, 0x1f0f5, - 0x1f100, 0x1f10c, - 0x1f110, 0x1f16c, - 0x1f170, 0x1f1ac, + 0x1f100, 0x1f1ad, 0x1f1e6, 0x1f1ff, 0x1f201, 0x1f202, 0x1f210, 0x1f23b, 0x1f240, 0x1f248, 0x1f250, 0x1f251, 0x1f260, 0x1f265, - 0x1f300, 0x1f6d5, + 0x1f300, 0x1f6d7, 0x1f6e0, 0x1f6ec, - 0x1f6f0, 0x1f6fa, + 0x1f6f0, 0x1f6fc, 0x1f700, 0x1f773, 0x1f780, 0x1f7d8, 0x1f7e0, 0x1f7eb, @@ -19346,18 +19640,21 @@ static const OnigCodePoint CR_Common[] = { 0x1f850, 0x1f859, 0x1f860, 0x1f887, 0x1f890, 0x1f8ad, - 0x1f900, 0x1f90b, - 0x1f90d, 0x1f971, - 0x1f973, 0x1f976, - 0x1f97a, 0x1f9a2, - 0x1f9a5, 0x1f9aa, - 0x1f9ae, 0x1f9ca, + 0x1f8b0, 0x1f8b1, + 0x1f900, 0x1f978, + 0x1f97a, 0x1f9cb, 0x1f9cd, 0x1fa53, 0x1fa60, 0x1fa6d, - 0x1fa70, 0x1fa73, + 0x1fa70, 0x1fa74, 0x1fa78, 0x1fa7a, - 0x1fa80, 0x1fa82, - 0x1fa90, 0x1fa95, + 0x1fa80, 0x1fa86, + 0x1fa90, 0x1faa8, + 0x1fab0, 0x1fab6, + 0x1fac0, 0x1fac2, + 0x1fad0, 0x1fad6, + 0x1fb00, 0x1fb92, + 0x1fb94, 0x1fbca, + 0x1fbf0, 0x1fbf9, 0xe0001, 0xe0001, 0xe0020, 0xe007f, }; /* CR_Common */ @@ -19389,11 +19686,11 @@ static const OnigCodePoint CR_Latin[] = { 0x2c60, 0x2c7f, 0xa722, 0xa787, 0xa78b, 0xa7bf, - 0xa7c2, 0xa7c6, - 0xa7f7, 0xa7ff, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa7ff, 0xab30, 0xab5a, 0xab5c, 0xab64, - 0xab66, 0xab67, + 0xab66, 0xab69, 0xfb00, 0xfb06, 0xff21, 0xff3a, 0xff41, 0xff5a, @@ -19455,10 +19752,9 @@ static const OnigCodePoint CR_Cyrillic[] = { /* 'Armenian': Script */ static const OnigCodePoint CR_Armenian[] = { - 5, + 4, 0x0531, 0x0556, - 0x0559, 0x0588, - 0x058a, 0x058a, + 0x0559, 0x058a, 0x058d, 0x058f, 0xfb13, 0xfb17, }; /* CR_Armenian */ @@ -19492,7 +19788,7 @@ static const OnigCodePoint CR_Arabic[] = { 0x06de, 0x06ff, 0x0750, 0x077f, 0x08a0, 0x08b4, - 0x08b6, 0x08bd, + 0x08b6, 0x08c7, 0x08d3, 0x08e1, 0x08e3, 0x08ff, 0xfb50, 0xfbc1, @@ -19635,7 +19931,7 @@ static const OnigCodePoint CR_Oriya[] = { 0x0b3c, 0x0b44, 0x0b47, 0x0b48, 0x0b4b, 0x0b4d, - 0x0b56, 0x0b57, + 0x0b55, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b63, 0x0b66, 0x0b77, @@ -19701,9 +19997,8 @@ static const OnigCodePoint CR_Kannada[] = { /* 'Malayalam': Script */ static const OnigCodePoint CR_Malayalam[] = { - 8, - 0x0d00, 0x0d03, - 0x0d05, 0x0d0c, + 7, + 0x0d00, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d44, 0x0d46, 0x0d48, @@ -19715,7 +20010,7 @@ static const OnigCodePoint CR_Malayalam[] = { /* 'Sinhala': Script */ static const OnigCodePoint CR_Sinhala[] = { 13, - 0x0d82, 0x0d83, + 0x0d81, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, @@ -19922,12 +20217,12 @@ static const OnigCodePoint CR_Bopomofo[] = { 3, 0x02ea, 0x02eb, 0x3105, 0x312f, - 0x31a0, 0x31ba, + 0x31a0, 0x31bf, }; /* CR_Bopomofo */ /* 'Han': Script */ static const OnigCodePoint CR_Han[] = { - 17, + 19, 0x2e80, 0x2e99, 0x2e9b, 0x2ef3, 0x2f00, 0x2fd5, @@ -19935,16 +20230,18 @@ static const OnigCodePoint CR_Han[] = { 0x3007, 0x3007, 0x3021, 0x3029, 0x3038, 0x303b, - 0x3400, 0x4db5, - 0x4e00, 0x9fef, + 0x3400, 0x4dbf, + 0x4e00, 0x9ffc, 0xf900, 0xfa6d, 0xfa70, 0xfad9, - 0x20000, 0x2a6d6, + 0x16ff0, 0x16ff1, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, }; /* CR_Han */ /* 'Yi': Script */ @@ -19981,7 +20278,7 @@ static const OnigCodePoint CR_Inherited[] = { 0x064b, 0x0655, 0x0670, 0x0670, 0x0951, 0x0954, - 0x1ab0, 0x1abe, + 0x1ab0, 0x1ac0, 0x1cd0, 0x1cd2, 0x1cd4, 0x1ce0, 0x1ce2, 0x1ce8, @@ -20146,7 +20443,7 @@ static const OnigCodePoint CR_Tifinagh[] = { /* 'Syloti_Nagri': Script */ static const OnigCodePoint CR_Syloti_Nagri[] = { 1, - 0xa800, 0xa82b, + 0xa800, 0xa82c, }; /* CR_Syloti_Nagri */ /* 'Old_Persian': Script */ @@ -20321,8 +20618,9 @@ static const OnigCodePoint CR_Samaritan[] = { /* 'Lisu': Script */ static const OnigCodePoint CR_Lisu[] = { - 1, + 2, 0xa4d0, 0xa4ff, + 0x11fb0, 0x11fb0, }; /* CR_Lisu */ /* 'Bamum': Script */ @@ -20414,7 +20712,7 @@ static const OnigCodePoint CR_Mandaic[] = { static const OnigCodePoint CR_Chakma[] = { 2, 0x11100, 0x11134, - 0x11136, 0x11146, + 0x11136, 0x11147, }; /* CR_Chakma */ /* 'Meroitic_Cursive': Script */ @@ -20441,9 +20739,8 @@ static const OnigCodePoint CR_Miao[] = { /* 'Sharada': Script */ static const OnigCodePoint CR_Sharada[] = { - 2, - 0x11180, 0x111cd, - 0x111d0, 0x111df, + 1, + 0x11180, 0x111df, }; /* CR_Sharada */ /* 'Sora_Sompeng': Script */ @@ -20712,10 +21009,9 @@ static const OnigCodePoint CR_Marchen[] = { /* 'Newa': Script */ static const OnigCodePoint CR_Newa[] = { - 3, - 0x11400, 0x11459, - 0x1145b, 0x1145b, - 0x1145d, 0x1145f, + 2, + 0x11400, 0x1145b, + 0x1145d, 0x11461, }; /* CR_Newa */ /* 'Osage': Script */ @@ -20727,10 +21023,11 @@ static const OnigCodePoint CR_Osage[] = { /* 'Tangut': Script */ static const OnigCodePoint CR_Tangut[] = { - 3, + 4, 0x16fe0, 0x16fe0, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18aff, + 0x18d00, 0x18d08, }; /* CR_Tangut */ /* 'Masaram_Gondi': Script */ @@ -20842,6 +21139,40 @@ static const OnigCodePoint CR_Wancho[] = { 0x1e2ff, 0x1e2ff, }; /* CR_Wancho */ +/* 'Chorasmian': Script */ +static const OnigCodePoint CR_Chorasmian[] = { + 1, + 0x10fb0, 0x10fcb, +}; /* CR_Chorasmian */ + +/* 'Dives_Akuru': Script */ +static const OnigCodePoint CR_Dives_Akuru[] = { + 8, + 0x11900, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x11935, + 0x11937, 0x11938, + 0x1193b, 0x11946, + 0x11950, 0x11959, +}; /* CR_Dives_Akuru */ + +/* 'Khitan_Small_Script': Script */ +static const OnigCodePoint CR_Khitan_Small_Script[] = { + 2, + 0x16fe4, 0x16fe4, + 0x18b00, 0x18cd5, +}; /* CR_Khitan_Small_Script */ + +/* 'Yezidi': Script */ +static const OnigCodePoint CR_Yezidi[] = { + 3, + 0x10e80, 0x10ea9, + 0x10eab, 0x10ead, + 0x10eb0, 0x10eb1, +}; /* CR_Yezidi */ + /* 'White_Space': Binary Property */ #define CR_White_Space CR_Space @@ -20862,7 +21193,7 @@ static const OnigCodePoint CR_Join_Control[] = { /* 'Dash': Binary Property */ static const OnigCodePoint CR_Dash[] = { - 21, + 22, 0x002d, 0x002d, 0x058a, 0x058a, 0x05be, 0x05be, @@ -20884,6 +21215,7 @@ static const OnigCodePoint CR_Dash[] = { 0xfe58, 0xfe58, 0xfe63, 0xfe63, 0xff0d, 0xff0d, + 0x10ead, 0x10ead, }; /* CR_Dash */ /* 'Hyphen': Binary Property */ @@ -20921,7 +21253,7 @@ static const OnigCodePoint CR_Quotation_Mark[] = { /* 'Terminal_Punctuation': Binary Property */ static const OnigCodePoint CR_Terminal_Punctuation[] = { - 102, + 104, 0x0021, 0x0021, 0x002c, 0x002c, 0x002e, 0x002e, @@ -21005,11 +21337,13 @@ static const OnigCodePoint CR_Terminal_Punctuation[] = { 0x11238, 0x1123c, 0x112a9, 0x112a9, 0x1144b, 0x1144d, - 0x1145b, 0x1145b, + 0x1145a, 0x1145b, 0x115c2, 0x115c5, 0x115c9, 0x115d7, 0x11641, 0x11642, 0x1173c, 0x1173e, + 0x11944, 0x11944, + 0x11946, 0x11946, 0x11a42, 0x11a43, 0x11a9b, 0x11a9c, 0x11aa1, 0x11aa2, @@ -21181,7 +21515,7 @@ static const OnigCodePoint CR_Hex_Digit[] = { /* 'Other_Alphabetic': Binary Property */ static const OnigCodePoint CR_Other_Alphabetic[] = { - 221, + 230, 0x0345, 0x0345, 0x05b0, 0x05bd, 0x05bf, 0x05bf, @@ -21259,7 +21593,7 @@ static const OnigCodePoint CR_Other_Alphabetic[] = { 0x0d4a, 0x0d4c, 0x0d57, 0x0d57, 0x0d62, 0x0d63, - 0x0d82, 0x0d83, + 0x0d81, 0x0d83, 0x0dcf, 0x0dd4, 0x0dd6, 0x0dd6, 0x0dd8, 0x0ddf, @@ -21297,6 +21631,7 @@ static const OnigCodePoint CR_Other_Alphabetic[] = { 0x1a17, 0x1a1b, 0x1a55, 0x1a5e, 0x1a61, 0x1a74, + 0x1abf, 0x1ac0, 0x1b00, 0x1b04, 0x1b35, 0x1b43, 0x1b80, 0x1b82, @@ -21338,6 +21673,7 @@ static const OnigCodePoint CR_Other_Alphabetic[] = { 0x10a05, 0x10a06, 0x10a0c, 0x10a0f, 0x10d24, 0x10d27, + 0x10eab, 0x10eac, 0x11000, 0x11002, 0x11038, 0x11045, 0x11082, 0x11082, @@ -21347,6 +21683,7 @@ static const OnigCodePoint CR_Other_Alphabetic[] = { 0x11145, 0x11146, 0x11180, 0x11182, 0x111b3, 0x111bf, + 0x111ce, 0x111cf, 0x1122c, 0x11234, 0x11237, 0x11237, 0x1123e, 0x1123e, @@ -21368,6 +21705,11 @@ static const OnigCodePoint CR_Other_Alphabetic[] = { 0x116ab, 0x116b5, 0x1171d, 0x1172a, 0x1182c, 0x11838, + 0x11930, 0x11935, + 0x11937, 0x11938, + 0x1193b, 0x1193c, + 0x11940, 0x11940, + 0x11942, 0x11942, 0x119d1, 0x119d7, 0x119da, 0x119df, 0x119e4, 0x119e4, @@ -21393,6 +21735,7 @@ static const OnigCodePoint CR_Other_Alphabetic[] = { 0x16f4f, 0x16f4f, 0x16f51, 0x16f87, 0x16f8f, 0x16f92, + 0x16ff0, 0x16ff1, 0x1bc9e, 0x1bc9e, 0x1e000, 0x1e006, 0x1e008, 0x1e018, @@ -21407,28 +21750,31 @@ static const OnigCodePoint CR_Other_Alphabetic[] = { /* 'Ideographic': Binary Property */ static const OnigCodePoint CR_Ideographic[] = { - 16, + 19, 0x3006, 0x3007, 0x3021, 0x3029, 0x3038, 0x303a, - 0x3400, 0x4db5, - 0x4e00, 0x9fef, + 0x3400, 0x4dbf, + 0x4e00, 0x9ffc, 0xf900, 0xfa6d, 0xfa70, 0xfad9, + 0x16fe4, 0x16fe4, 0x17000, 0x187f7, - 0x18800, 0x18af2, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, 0x1b170, 0x1b2fb, - 0x20000, 0x2a6d6, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, 0x2f800, 0x2fa1d, + 0x30000, 0x3134a, }; /* CR_Ideographic */ /* 'Diacritic': Binary Property */ static const OnigCodePoint CR_Diacritic[] = { - 171, + 176, 0x005e, 0x005e, 0x0060, 0x0060, 0x00a8, 0x00a8, @@ -21471,6 +21817,7 @@ static const OnigCodePoint CR_Diacritic[] = { 0x0afd, 0x0aff, 0x0b3c, 0x0b3c, 0x0b4d, 0x0b4d, + 0x0b55, 0x0b55, 0x0bcd, 0x0bcd, 0x0c4d, 0x0c4d, 0x0cbc, 0x0cbc, @@ -21548,6 +21895,7 @@ static const OnigCodePoint CR_Diacritic[] = { 0xaabf, 0xaac2, 0xaaf6, 0xaaf6, 0xab5b, 0xab5f, + 0xab69, 0xab6b, 0xabec, 0xabed, 0xfb1e, 0xfb1e, 0xfe20, 0xfe2f, @@ -21579,6 +21927,8 @@ static const OnigCodePoint CR_Diacritic[] = { 0x116b6, 0x116b7, 0x1172b, 0x1172b, 0x11839, 0x1183a, + 0x1193d, 0x1193e, + 0x11943, 0x11943, 0x119e0, 0x119e0, 0x11a34, 0x11a34, 0x11a47, 0x11a47, @@ -21590,6 +21940,7 @@ static const OnigCodePoint CR_Diacritic[] = { 0x16af0, 0x16af4, 0x16b30, 0x16b36, 0x16f8f, 0x16f9f, + 0x16ff0, 0x16ff1, 0x1d167, 0x1d169, 0x1d16d, 0x1d172, 0x1d17b, 0x1d182, @@ -21604,11 +21955,12 @@ static const OnigCodePoint CR_Diacritic[] = { /* 'Extender': Binary Property */ static const OnigCodePoint CR_Extender[] = { - 31, + 32, 0x00b7, 0x00b7, 0x02d0, 0x02d1, 0x0640, 0x0640, 0x07fa, 0x07fa, + 0x0b55, 0x0b55, 0x0e46, 0x0e46, 0x0ec6, 0x0ec6, 0x180a, 0x180a, @@ -21698,7 +22050,7 @@ static const OnigCodePoint CR_Noncharacter_Code_Point[] = { /* 'Other_Grapheme_Extend': Binary Property */ static const OnigCodePoint CR_Other_Grapheme_Extend[] = { - 24, + 25, 0x09be, 0x09be, 0x09d7, 0x09d7, 0x0b3e, 0x0b3e, @@ -21720,6 +22072,7 @@ static const OnigCodePoint CR_Other_Grapheme_Extend[] = { 0x114b0, 0x114b0, 0x114bd, 0x114bd, 0x115af, 0x115af, + 0x11930, 0x11930, 0x1d165, 0x1d165, 0x1d16e, 0x1d172, 0xe0020, 0xe007f, @@ -21748,9 +22101,9 @@ static const OnigCodePoint CR_Radical[] = { /* 'Unified_Ideograph': Binary Property */ static const OnigCodePoint CR_Unified_Ideograph[] = { - 14, - 0x3400, 0x4db5, - 0x4e00, 0x9fef, + 15, + 0x3400, 0x4dbf, + 0x4e00, 0x9ffc, 0xfa0e, 0xfa0f, 0xfa11, 0xfa11, 0xfa13, 0xfa14, @@ -21758,11 +22111,12 @@ static const OnigCodePoint CR_Unified_Ideograph[] = { 0xfa21, 0xfa21, 0xfa23, 0xfa24, 0xfa27, 0xfa29, - 0x20000, 0x2a6d6, + 0x20000, 0x2a6dd, 0x2a700, 0x2b734, 0x2b740, 0x2b81d, 0x2b820, 0x2cea1, 0x2ceb0, 0x2ebe0, + 0x30000, 0x3134a, }; /* CR_Unified_Ideograph */ /* 'Other_Default_Ignorable_Code_Point': Binary Property */ @@ -21862,7 +22216,7 @@ static const OnigCodePoint CR_Other_ID_Continue[] = { /* 'Sentence_Terminal': Binary Property */ static const OnigCodePoint CR_Sentence_Terminal[] = { - 74, + 76, 0x0021, 0x0021, 0x002e, 0x002e, 0x003f, 0x003f, @@ -21926,6 +22280,8 @@ static const OnigCodePoint CR_Sentence_Terminal[] = { 0x115c9, 0x115d7, 0x11641, 0x11642, 0x1173c, 0x1173e, + 0x11944, 0x11944, + 0x11946, 0x11946, 0x11a42, 0x11a43, 0x11a9b, 0x11a9c, 0x11c41, 0x11c42, @@ -22009,7 +22365,7 @@ static const OnigCodePoint CR_Regional_Indicator[] = { /* 'Emoji': Emoji */ static const OnigCodePoint CR_Emoji[] = { - 151, + 152, 0x0023, 0x0023, 0x002a, 0x002a, 0x0030, 0x0039, @@ -22056,6 +22412,7 @@ static const OnigCodePoint CR_Emoji[] = { 0x2699, 0x2699, 0x269b, 0x269c, 0x26a0, 0x26a1, + 0x26a7, 0x26a7, 0x26aa, 0x26ab, 0x26b0, 0x26b1, 0x26bd, 0x26be, @@ -22142,25 +22499,25 @@ static const OnigCodePoint CR_Emoji[] = { 0x1f5fa, 0x1f64f, 0x1f680, 0x1f6c5, 0x1f6cb, 0x1f6d2, - 0x1f6d5, 0x1f6d5, + 0x1f6d5, 0x1f6d7, 0x1f6e0, 0x1f6e5, 0x1f6e9, 0x1f6e9, 0x1f6eb, 0x1f6ec, 0x1f6f0, 0x1f6f0, - 0x1f6f3, 0x1f6fa, + 0x1f6f3, 0x1f6fc, 0x1f7e0, 0x1f7eb, - 0x1f90d, 0x1f93a, + 0x1f90c, 0x1f93a, 0x1f93c, 0x1f945, - 0x1f947, 0x1f971, - 0x1f973, 0x1f976, - 0x1f97a, 0x1f9a2, - 0x1f9a5, 0x1f9aa, - 0x1f9ae, 0x1f9ca, + 0x1f947, 0x1f978, + 0x1f97a, 0x1f9cb, 0x1f9cd, 0x1f9ff, - 0x1fa70, 0x1fa73, + 0x1fa70, 0x1fa74, 0x1fa78, 0x1fa7a, - 0x1fa80, 0x1fa82, - 0x1fa90, 0x1fa95, + 0x1fa80, 0x1fa86, + 0x1fa90, 0x1faa8, + 0x1fab0, 0x1fab6, + 0x1fac0, 0x1fac2, + 0x1fad0, 0x1fad6, }; /* CR_Emoji */ /* 'Emoji_Presentation': Emoji */ @@ -22231,22 +22588,22 @@ static const OnigCodePoint CR_Emoji_Presentation[] = { 0x1f680, 0x1f6c5, 0x1f6cc, 0x1f6cc, 0x1f6d0, 0x1f6d2, - 0x1f6d5, 0x1f6d5, + 0x1f6d5, 0x1f6d7, 0x1f6eb, 0x1f6ec, - 0x1f6f4, 0x1f6fa, + 0x1f6f4, 0x1f6fc, 0x1f7e0, 0x1f7eb, - 0x1f90d, 0x1f93a, + 0x1f90c, 0x1f93a, 0x1f93c, 0x1f945, - 0x1f947, 0x1f971, - 0x1f973, 0x1f976, - 0x1f97a, 0x1f9a2, - 0x1f9a5, 0x1f9aa, - 0x1f9ae, 0x1f9ca, + 0x1f947, 0x1f978, + 0x1f97a, 0x1f9cb, 0x1f9cd, 0x1f9ff, - 0x1fa70, 0x1fa73, + 0x1fa70, 0x1fa74, 0x1fa78, 0x1fa7a, - 0x1fa80, 0x1fa82, - 0x1fa90, 0x1fa95, + 0x1fa80, 0x1fa86, + 0x1fa90, 0x1faa8, + 0x1fab0, 0x1fab6, + 0x1fac0, 0x1fac2, + 0x1fad0, 0x1fad6, }; /* CR_Emoji_Presentation */ /* 'Emoji_Modifier': Emoji */ @@ -22257,7 +22614,7 @@ static const OnigCodePoint CR_Emoji_Modifier[] = { /* 'Emoji_Modifier_Base': Emoji */ static const OnigCodePoint CR_Emoji_Modifier_Base[] = { - 36, + 38, 0x261d, 0x261d, 0x26f9, 0x26f9, 0x270a, 0x270d, @@ -22284,11 +22641,13 @@ static const OnigCodePoint CR_Emoji_Modifier_Base[] = { 0x1f6b4, 0x1f6b6, 0x1f6c0, 0x1f6c0, 0x1f6cc, 0x1f6cc, + 0x1f90c, 0x1f90c, 0x1f90f, 0x1f90f, 0x1f918, 0x1f91f, 0x1f926, 0x1f926, 0x1f930, 0x1f939, 0x1f93c, 0x1f93e, + 0x1f977, 0x1f977, 0x1f9b5, 0x1f9b6, 0x1f9b8, 0x1f9b9, 0x1f9bb, 0x1f9bb, @@ -22313,7 +22672,7 @@ static const OnigCodePoint CR_Emoji_Component[] = { /* 'Extended_Pictographic': Emoji */ static const OnigCodePoint CR_Extended_Pictographic[] = { - 77, + 78, 0x00a9, 0x00a9, 0x00ae, 0x00ae, 0x203c, 0x203c, @@ -22390,12 +22749,13 @@ static const OnigCodePoint CR_Extended_Pictographic[] = { 0x1f8ae, 0x1f8ff, 0x1f90c, 0x1f93a, 0x1f93c, 0x1f945, - 0x1f947, 0x1fffd, + 0x1f947, 0x1faff, + 0x1fc00, 0x1fffd, }; /* CR_Extended_Pictographic */ /* 'Unknown': Script */ static const OnigCodePoint CR_Unknown[] = { - 664, + 675, 0x0378, 0x0379, 0x0380, 0x0383, 0x038b, 0x038b, @@ -22419,7 +22779,7 @@ static const OnigCodePoint CR_Unknown[] = { 0x085f, 0x085f, 0x086b, 0x089f, 0x08b5, 0x08b5, - 0x08be, 0x08d2, + 0x08c8, 0x08d2, 0x0984, 0x0984, 0x098d, 0x098e, 0x0991, 0x0992, @@ -22473,7 +22833,7 @@ static const OnigCodePoint CR_Unknown[] = { 0x0b3a, 0x0b3b, 0x0b45, 0x0b46, 0x0b49, 0x0b4a, - 0x0b4e, 0x0b55, + 0x0b4e, 0x0b54, 0x0b58, 0x0b5b, 0x0b5e, 0x0b5e, 0x0b64, 0x0b65, @@ -22518,14 +22878,13 @@ static const OnigCodePoint CR_Unknown[] = { 0x0ce4, 0x0ce5, 0x0cf0, 0x0cf0, 0x0cf3, 0x0cff, - 0x0d04, 0x0d04, 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d45, 0x0d45, 0x0d49, 0x0d49, 0x0d50, 0x0d53, 0x0d64, 0x0d65, - 0x0d80, 0x0d81, + 0x0d80, 0x0d80, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, @@ -22612,7 +22971,7 @@ static const OnigCodePoint CR_Unknown[] = { 0x1a8a, 0x1a8f, 0x1a9a, 0x1a9f, 0x1aae, 0x1aaf, - 0x1abf, 0x1aff, + 0x1ac1, 0x1aff, 0x1b4c, 0x1b4f, 0x1b7d, 0x1b7f, 0x1bf4, 0x1bfb, @@ -22649,7 +23008,7 @@ static const OnigCodePoint CR_Unknown[] = { 0x2427, 0x243f, 0x244b, 0x245f, 0x2b74, 0x2b75, - 0x2b96, 0x2b97, + 0x2b96, 0x2b96, 0x2c2f, 0x2c2f, 0x2c5f, 0x2c5f, 0x2cf4, 0x2cf8, @@ -22667,7 +23026,7 @@ static const OnigCodePoint CR_Unknown[] = { 0x2dcf, 0x2dcf, 0x2dd7, 0x2dd7, 0x2ddf, 0x2ddf, - 0x2e50, 0x2e7f, + 0x2e53, 0x2e7f, 0x2e9a, 0x2e9a, 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, @@ -22677,18 +23036,16 @@ static const OnigCodePoint CR_Unknown[] = { 0x3100, 0x3104, 0x3130, 0x3130, 0x318f, 0x318f, - 0x31bb, 0x31bf, 0x31e4, 0x31ef, 0x321f, 0x321f, - 0x4db6, 0x4dbf, - 0x9ff0, 0x9fff, + 0x9ffd, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xa4cf, 0xa62c, 0xa63f, 0xa6f8, 0xa6ff, 0xa7c0, 0xa7c1, - 0xa7c7, 0xa7f6, - 0xa82c, 0xa82f, + 0xa7cb, 0xa7f4, + 0xa82d, 0xa82f, 0xa83a, 0xa83f, 0xa878, 0xa87f, 0xa8c6, 0xa8cd, @@ -22708,7 +23065,7 @@ static const OnigCodePoint CR_Unknown[] = { 0xab17, 0xab1f, 0xab27, 0xab27, 0xab2f, 0xab2f, - 0xab68, 0xab6f, + 0xab6c, 0xab6f, 0xabee, 0xabef, 0xabfa, 0xabff, 0xd7a4, 0xd7af, @@ -22753,7 +23110,7 @@ static const OnigCodePoint CR_Unknown[] = { 0x10103, 0x10106, 0x10134, 0x10136, 0x1018f, 0x1018f, - 0x1019c, 0x1019f, + 0x1019d, 0x1019f, 0x101a1, 0x101cf, 0x101fe, 0x1027f, 0x1029d, 0x1029f, @@ -22812,9 +23169,13 @@ static const OnigCodePoint CR_Unknown[] = { 0x10cf3, 0x10cf9, 0x10d28, 0x10d2f, 0x10d3a, 0x10e5f, - 0x10e7f, 0x10eff, + 0x10e7f, 0x10e7f, + 0x10eaa, 0x10eaa, + 0x10eae, 0x10eaf, + 0x10eb2, 0x10eff, 0x10f28, 0x10f2f, - 0x10f5a, 0x10fdf, + 0x10f5a, 0x10faf, + 0x10fcc, 0x10fdf, 0x10ff7, 0x10fff, 0x1104e, 0x11051, 0x11070, 0x1107e, @@ -22823,9 +23184,8 @@ static const OnigCodePoint CR_Unknown[] = { 0x110e9, 0x110ef, 0x110fa, 0x110ff, 0x11135, 0x11135, - 0x11147, 0x1114f, + 0x11148, 0x1114f, 0x11177, 0x1117f, - 0x111ce, 0x111cf, 0x111e0, 0x111e0, 0x111f5, 0x111ff, 0x11212, 0x11212, @@ -22852,9 +23212,8 @@ static const OnigCodePoint CR_Unknown[] = { 0x11364, 0x11365, 0x1136d, 0x1136f, 0x11375, 0x113ff, - 0x1145a, 0x1145a, 0x1145c, 0x1145c, - 0x11460, 0x1147f, + 0x11462, 0x1147f, 0x114c8, 0x114cf, 0x114da, 0x1157f, 0x115b6, 0x115b7, @@ -22869,7 +23228,14 @@ static const OnigCodePoint CR_Unknown[] = { 0x11740, 0x117ff, 0x1183c, 0x1189f, 0x118f3, 0x118fe, - 0x11900, 0x1199f, + 0x11907, 0x11908, + 0x1190a, 0x1190b, + 0x11914, 0x11914, + 0x11917, 0x11917, + 0x11936, 0x11936, + 0x11939, 0x1193a, + 0x11947, 0x1194f, + 0x1195a, 0x1199f, 0x119a8, 0x119a9, 0x119d8, 0x119d9, 0x119e5, 0x119ff, @@ -22896,7 +23262,8 @@ static const OnigCodePoint CR_Unknown[] = { 0x11d92, 0x11d92, 0x11d99, 0x11d9f, 0x11daa, 0x11edf, - 0x11ef9, 0x11fbf, + 0x11ef9, 0x11faf, + 0x11fb1, 0x11fbf, 0x11ff2, 0x11ffe, 0x1239a, 0x123ff, 0x1246f, 0x1246f, @@ -22920,9 +23287,11 @@ static const OnigCodePoint CR_Unknown[] = { 0x16f4b, 0x16f4e, 0x16f88, 0x16f8e, 0x16fa0, 0x16fdf, - 0x16fe4, 0x16fff, + 0x16fe5, 0x16fef, + 0x16ff2, 0x16fff, 0x187f8, 0x187ff, - 0x18af3, 0x1afff, + 0x18cd6, 0x18cff, + 0x18d09, 0x1afff, 0x1b11f, 0x1b14f, 0x1b153, 0x1b163, 0x1b168, 0x1b16f, @@ -23020,17 +23389,15 @@ static const OnigCodePoint CR_Unknown[] = { 0x1f0c0, 0x1f0c0, 0x1f0d0, 0x1f0d0, 0x1f0f6, 0x1f0ff, - 0x1f10d, 0x1f10f, - 0x1f16d, 0x1f16f, - 0x1f1ad, 0x1f1e5, + 0x1f1ae, 0x1f1e5, 0x1f203, 0x1f20f, 0x1f23c, 0x1f23f, 0x1f249, 0x1f24f, 0x1f252, 0x1f25f, 0x1f266, 0x1f2ff, - 0x1f6d6, 0x1f6df, + 0x1f6d8, 0x1f6df, 0x1f6ed, 0x1f6ef, - 0x1f6fb, 0x1f6ff, + 0x1f6fd, 0x1f6ff, 0x1f774, 0x1f77f, 0x1f7d9, 0x1f7df, 0x1f7ec, 0x1f7ff, @@ -23038,25 +23405,29 @@ static const OnigCodePoint CR_Unknown[] = { 0x1f848, 0x1f84f, 0x1f85a, 0x1f85f, 0x1f888, 0x1f88f, - 0x1f8ae, 0x1f8ff, - 0x1f90c, 0x1f90c, - 0x1f972, 0x1f972, - 0x1f977, 0x1f979, - 0x1f9a3, 0x1f9a4, - 0x1f9ab, 0x1f9ad, - 0x1f9cb, 0x1f9cc, + 0x1f8ae, 0x1f8af, + 0x1f8b2, 0x1f8ff, + 0x1f979, 0x1f979, + 0x1f9cc, 0x1f9cc, 0x1fa54, 0x1fa5f, 0x1fa6e, 0x1fa6f, - 0x1fa74, 0x1fa77, + 0x1fa75, 0x1fa77, 0x1fa7b, 0x1fa7f, - 0x1fa83, 0x1fa8f, - 0x1fa96, 0x1ffff, - 0x2a6d7, 0x2a6ff, + 0x1fa87, 0x1fa8f, + 0x1faa9, 0x1faaf, + 0x1fab7, 0x1fabf, + 0x1fac3, 0x1facf, + 0x1fad7, 0x1faff, + 0x1fb93, 0x1fb93, + 0x1fbcb, 0x1fbef, + 0x1fbfa, 0x1ffff, + 0x2a6de, 0x2a6ff, 0x2b735, 0x2b73f, 0x2b81e, 0x2b81f, 0x2cea2, 0x2ceaf, 0x2ebe1, 0x2f7ff, - 0x2fa1e, 0xe0000, + 0x2fa1e, 0x2ffff, + 0x3134b, 0xe0000, 0xe0002, 0xe001f, 0xe0080, 0xe00ff, 0xe01f0, 0x10ffff, @@ -34204,216 +34575,910 @@ static const OnigCodePoint CR_Age_12_1[] = { 0xefffe, 0x10ffff, }; /* CR_Age_12_1 */ -#endif /* USE_UNICODE_AGE_PROPERTIES */ -/* 'Grapheme_Cluster_Break_Prepend': Grapheme_Cluster_Break=Prepend */ -static const OnigCodePoint CR_Grapheme_Cluster_Break_Prepend[] = { - 11, - 0x0600, 0x0605, - 0x06dd, 0x06dd, - 0x070f, 0x070f, - 0x08e2, 0x08e2, - 0x0d4e, 0x0d4e, - 0x110bd, 0x110bd, - 0x110cd, 0x110cd, - 0x111c2, 0x111c3, - 0x11a3a, 0x11a3a, - 0x11a84, 0x11a89, - 0x11d46, 0x11d46, -}; /* CR_Grapheme_Cluster_Break_Prepend */ - -/* 'Grapheme_Cluster_Break_CR': Grapheme_Cluster_Break=CR */ -static const OnigCodePoint CR_Grapheme_Cluster_Break_CR[] = { - 1, - 0x000d, 0x000d, -}; /* CR_Grapheme_Cluster_Break_CR */ - -/* 'Grapheme_Cluster_Break_LF': Grapheme_Cluster_Break=LF */ -#define CR_Grapheme_Cluster_Break_LF CR_NEWLINE - -/* 'Grapheme_Cluster_Break_Control': Grapheme_Cluster_Break=Control */ -static const OnigCodePoint CR_Grapheme_Cluster_Break_Control[] = { - 19, - 0x0000, 0x0009, - 0x000b, 0x000c, - 0x000e, 0x001f, - 0x007f, 0x009f, - 0x00ad, 0x00ad, - 0x061c, 0x061c, - 0x180e, 0x180e, - 0x200b, 0x200b, - 0x200e, 0x200f, - 0x2028, 0x202e, - 0x2060, 0x206f, - 0xfeff, 0xfeff, - 0xfff0, 0xfffb, - 0x13430, 0x13438, - 0x1bca0, 0x1bca3, - 0x1d173, 0x1d17a, - 0xe0000, 0xe001f, - 0xe0080, 0xe00ff, - 0xe01f0, 0xe0fff, -}; /* CR_Grapheme_Cluster_Break_Control */ - -/* 'Grapheme_Cluster_Break_Extend': Grapheme_Cluster_Break=Extend */ -static const OnigCodePoint CR_Grapheme_Cluster_Break_Extend[] = { - 336, - 0x0300, 0x036f, - 0x0483, 0x0489, - 0x0591, 0x05bd, - 0x05bf, 0x05bf, - 0x05c1, 0x05c2, - 0x05c4, 0x05c5, - 0x05c7, 0x05c7, - 0x0610, 0x061a, - 0x064b, 0x065f, - 0x0670, 0x0670, - 0x06d6, 0x06dc, - 0x06df, 0x06e4, - 0x06e7, 0x06e8, - 0x06ea, 0x06ed, - 0x0711, 0x0711, - 0x0730, 0x074a, - 0x07a6, 0x07b0, - 0x07eb, 0x07f3, - 0x07fd, 0x07fd, - 0x0816, 0x0819, - 0x081b, 0x0823, - 0x0825, 0x0827, - 0x0829, 0x082d, - 0x0859, 0x085b, - 0x08d3, 0x08e1, - 0x08e3, 0x0902, - 0x093a, 0x093a, - 0x093c, 0x093c, - 0x0941, 0x0948, - 0x094d, 0x094d, - 0x0951, 0x0957, - 0x0962, 0x0963, - 0x0981, 0x0981, - 0x09bc, 0x09bc, - 0x09be, 0x09be, - 0x09c1, 0x09c4, - 0x09cd, 0x09cd, +/* 'Age_13_0': Derived Age 13.0 */ +static const OnigCodePoint CR_Age_13_0[] = { + 686, + 0x0000, 0x0377, + 0x037a, 0x037f, + 0x0384, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x03a1, + 0x03a3, 0x052f, + 0x0531, 0x0556, + 0x0559, 0x058a, + 0x058d, 0x058f, + 0x0591, 0x05c7, + 0x05d0, 0x05ea, + 0x05ef, 0x05f4, + 0x0600, 0x061c, + 0x061e, 0x070d, + 0x070f, 0x074a, + 0x074d, 0x07b1, + 0x07c0, 0x07fa, + 0x07fd, 0x082d, + 0x0830, 0x083e, + 0x0840, 0x085b, + 0x085e, 0x085e, + 0x0860, 0x086a, + 0x08a0, 0x08b4, + 0x08b6, 0x08c7, + 0x08d3, 0x0983, + 0x0985, 0x098c, + 0x098f, 0x0990, + 0x0993, 0x09a8, + 0x09aa, 0x09b0, + 0x09b2, 0x09b2, + 0x09b6, 0x09b9, + 0x09bc, 0x09c4, + 0x09c7, 0x09c8, + 0x09cb, 0x09ce, 0x09d7, 0x09d7, - 0x09e2, 0x09e3, - 0x09fe, 0x09fe, - 0x0a01, 0x0a02, + 0x09dc, 0x09dd, + 0x09df, 0x09e3, + 0x09e6, 0x09fe, + 0x0a01, 0x0a03, + 0x0a05, 0x0a0a, + 0x0a0f, 0x0a10, + 0x0a13, 0x0a28, + 0x0a2a, 0x0a30, + 0x0a32, 0x0a33, + 0x0a35, 0x0a36, + 0x0a38, 0x0a39, 0x0a3c, 0x0a3c, - 0x0a41, 0x0a42, + 0x0a3e, 0x0a42, 0x0a47, 0x0a48, 0x0a4b, 0x0a4d, 0x0a51, 0x0a51, - 0x0a70, 0x0a71, - 0x0a75, 0x0a75, - 0x0a81, 0x0a82, - 0x0abc, 0x0abc, - 0x0ac1, 0x0ac5, - 0x0ac7, 0x0ac8, - 0x0acd, 0x0acd, - 0x0ae2, 0x0ae3, - 0x0afa, 0x0aff, - 0x0b01, 0x0b01, - 0x0b3c, 0x0b3c, - 0x0b3e, 0x0b3f, - 0x0b41, 0x0b44, - 0x0b4d, 0x0b4d, - 0x0b56, 0x0b57, - 0x0b62, 0x0b63, - 0x0b82, 0x0b82, - 0x0bbe, 0x0bbe, - 0x0bc0, 0x0bc0, - 0x0bcd, 0x0bcd, + 0x0a59, 0x0a5c, + 0x0a5e, 0x0a5e, + 0x0a66, 0x0a76, + 0x0a81, 0x0a83, + 0x0a85, 0x0a8d, + 0x0a8f, 0x0a91, + 0x0a93, 0x0aa8, + 0x0aaa, 0x0ab0, + 0x0ab2, 0x0ab3, + 0x0ab5, 0x0ab9, + 0x0abc, 0x0ac5, + 0x0ac7, 0x0ac9, + 0x0acb, 0x0acd, + 0x0ad0, 0x0ad0, + 0x0ae0, 0x0ae3, + 0x0ae6, 0x0af1, + 0x0af9, 0x0aff, + 0x0b01, 0x0b03, + 0x0b05, 0x0b0c, + 0x0b0f, 0x0b10, + 0x0b13, 0x0b28, + 0x0b2a, 0x0b30, + 0x0b32, 0x0b33, + 0x0b35, 0x0b39, + 0x0b3c, 0x0b44, + 0x0b47, 0x0b48, + 0x0b4b, 0x0b4d, + 0x0b55, 0x0b57, + 0x0b5c, 0x0b5d, + 0x0b5f, 0x0b63, + 0x0b66, 0x0b77, + 0x0b82, 0x0b83, + 0x0b85, 0x0b8a, + 0x0b8e, 0x0b90, + 0x0b92, 0x0b95, + 0x0b99, 0x0b9a, + 0x0b9c, 0x0b9c, + 0x0b9e, 0x0b9f, + 0x0ba3, 0x0ba4, + 0x0ba8, 0x0baa, + 0x0bae, 0x0bb9, + 0x0bbe, 0x0bc2, + 0x0bc6, 0x0bc8, + 0x0bca, 0x0bcd, + 0x0bd0, 0x0bd0, 0x0bd7, 0x0bd7, - 0x0c00, 0x0c00, - 0x0c04, 0x0c04, - 0x0c3e, 0x0c40, + 0x0be6, 0x0bfa, + 0x0c00, 0x0c0c, + 0x0c0e, 0x0c10, + 0x0c12, 0x0c28, + 0x0c2a, 0x0c39, + 0x0c3d, 0x0c44, 0x0c46, 0x0c48, 0x0c4a, 0x0c4d, 0x0c55, 0x0c56, - 0x0c62, 0x0c63, - 0x0c81, 0x0c81, - 0x0cbc, 0x0cbc, - 0x0cbf, 0x0cbf, - 0x0cc2, 0x0cc2, - 0x0cc6, 0x0cc6, - 0x0ccc, 0x0ccd, + 0x0c58, 0x0c5a, + 0x0c60, 0x0c63, + 0x0c66, 0x0c6f, + 0x0c77, 0x0c8c, + 0x0c8e, 0x0c90, + 0x0c92, 0x0ca8, + 0x0caa, 0x0cb3, + 0x0cb5, 0x0cb9, + 0x0cbc, 0x0cc4, + 0x0cc6, 0x0cc8, + 0x0cca, 0x0ccd, 0x0cd5, 0x0cd6, - 0x0ce2, 0x0ce3, - 0x0d00, 0x0d01, - 0x0d3b, 0x0d3c, - 0x0d3e, 0x0d3e, - 0x0d41, 0x0d44, - 0x0d4d, 0x0d4d, - 0x0d57, 0x0d57, - 0x0d62, 0x0d63, + 0x0cde, 0x0cde, + 0x0ce0, 0x0ce3, + 0x0ce6, 0x0cef, + 0x0cf1, 0x0cf2, + 0x0d00, 0x0d0c, + 0x0d0e, 0x0d10, + 0x0d12, 0x0d44, + 0x0d46, 0x0d48, + 0x0d4a, 0x0d4f, + 0x0d54, 0x0d63, + 0x0d66, 0x0d7f, + 0x0d81, 0x0d83, + 0x0d85, 0x0d96, + 0x0d9a, 0x0db1, + 0x0db3, 0x0dbb, + 0x0dbd, 0x0dbd, + 0x0dc0, 0x0dc6, 0x0dca, 0x0dca, - 0x0dcf, 0x0dcf, - 0x0dd2, 0x0dd4, + 0x0dcf, 0x0dd4, 0x0dd6, 0x0dd6, - 0x0ddf, 0x0ddf, - 0x0e31, 0x0e31, - 0x0e34, 0x0e3a, - 0x0e47, 0x0e4e, - 0x0eb1, 0x0eb1, - 0x0eb4, 0x0ebc, + 0x0dd8, 0x0ddf, + 0x0de6, 0x0def, + 0x0df2, 0x0df4, + 0x0e01, 0x0e3a, + 0x0e3f, 0x0e5b, + 0x0e81, 0x0e82, + 0x0e84, 0x0e84, + 0x0e86, 0x0e8a, + 0x0e8c, 0x0ea3, + 0x0ea5, 0x0ea5, + 0x0ea7, 0x0ebd, + 0x0ec0, 0x0ec4, + 0x0ec6, 0x0ec6, 0x0ec8, 0x0ecd, - 0x0f18, 0x0f19, - 0x0f35, 0x0f35, - 0x0f37, 0x0f37, - 0x0f39, 0x0f39, - 0x0f71, 0x0f7e, - 0x0f80, 0x0f84, - 0x0f86, 0x0f87, - 0x0f8d, 0x0f97, + 0x0ed0, 0x0ed9, + 0x0edc, 0x0edf, + 0x0f00, 0x0f47, + 0x0f49, 0x0f6c, + 0x0f71, 0x0f97, 0x0f99, 0x0fbc, - 0x0fc6, 0x0fc6, - 0x102d, 0x1030, - 0x1032, 0x1037, - 0x1039, 0x103a, - 0x103d, 0x103e, - 0x1058, 0x1059, - 0x105e, 0x1060, - 0x1071, 0x1074, - 0x1082, 0x1082, - 0x1085, 0x1086, - 0x108d, 0x108d, - 0x109d, 0x109d, - 0x135d, 0x135f, - 0x1712, 0x1714, - 0x1732, 0x1734, - 0x1752, 0x1753, + 0x0fbe, 0x0fcc, + 0x0fce, 0x0fda, + 0x1000, 0x10c5, + 0x10c7, 0x10c7, + 0x10cd, 0x10cd, + 0x10d0, 0x1248, + 0x124a, 0x124d, + 0x1250, 0x1256, + 0x1258, 0x1258, + 0x125a, 0x125d, + 0x1260, 0x1288, + 0x128a, 0x128d, + 0x1290, 0x12b0, + 0x12b2, 0x12b5, + 0x12b8, 0x12be, + 0x12c0, 0x12c0, + 0x12c2, 0x12c5, + 0x12c8, 0x12d6, + 0x12d8, 0x1310, + 0x1312, 0x1315, + 0x1318, 0x135a, + 0x135d, 0x137c, + 0x1380, 0x1399, + 0x13a0, 0x13f5, + 0x13f8, 0x13fd, + 0x1400, 0x169c, + 0x16a0, 0x16f8, + 0x1700, 0x170c, + 0x170e, 0x1714, + 0x1720, 0x1736, + 0x1740, 0x1753, + 0x1760, 0x176c, + 0x176e, 0x1770, 0x1772, 0x1773, - 0x17b4, 0x17b5, - 0x17b7, 0x17bd, - 0x17c6, 0x17c6, - 0x17c9, 0x17d3, - 0x17dd, 0x17dd, - 0x180b, 0x180d, - 0x1885, 0x1886, - 0x18a9, 0x18a9, - 0x1920, 0x1922, - 0x1927, 0x1928, - 0x1932, 0x1932, - 0x1939, 0x193b, - 0x1a17, 0x1a18, - 0x1a1b, 0x1a1b, - 0x1a56, 0x1a56, - 0x1a58, 0x1a5e, - 0x1a60, 0x1a60, - 0x1a62, 0x1a62, - 0x1a65, 0x1a6c, - 0x1a73, 0x1a7c, - 0x1a7f, 0x1a7f, - 0x1ab0, 0x1abe, - 0x1b00, 0x1b03, - 0x1b34, 0x1b3a, - 0x1b3c, 0x1b3c, - 0x1b42, 0x1b42, - 0x1b6b, 0x1b73, - 0x1b80, 0x1b81, - 0x1ba2, 0x1ba5, - 0x1ba8, 0x1ba9, - 0x1bab, 0x1bad, + 0x1780, 0x17dd, + 0x17e0, 0x17e9, + 0x17f0, 0x17f9, + 0x1800, 0x180e, + 0x1810, 0x1819, + 0x1820, 0x1878, + 0x1880, 0x18aa, + 0x18b0, 0x18f5, + 0x1900, 0x191e, + 0x1920, 0x192b, + 0x1930, 0x193b, + 0x1940, 0x1940, + 0x1944, 0x196d, + 0x1970, 0x1974, + 0x1980, 0x19ab, + 0x19b0, 0x19c9, + 0x19d0, 0x19da, + 0x19de, 0x1a1b, + 0x1a1e, 0x1a5e, + 0x1a60, 0x1a7c, + 0x1a7f, 0x1a89, + 0x1a90, 0x1a99, + 0x1aa0, 0x1aad, + 0x1ab0, 0x1ac0, + 0x1b00, 0x1b4b, + 0x1b50, 0x1b7c, + 0x1b80, 0x1bf3, + 0x1bfc, 0x1c37, + 0x1c3b, 0x1c49, + 0x1c4d, 0x1c88, + 0x1c90, 0x1cba, + 0x1cbd, 0x1cc7, + 0x1cd0, 0x1cfa, + 0x1d00, 0x1df9, + 0x1dfb, 0x1f15, + 0x1f18, 0x1f1d, + 0x1f20, 0x1f45, + 0x1f48, 0x1f4d, + 0x1f50, 0x1f57, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f7d, + 0x1f80, 0x1fb4, + 0x1fb6, 0x1fc4, + 0x1fc6, 0x1fd3, + 0x1fd6, 0x1fdb, + 0x1fdd, 0x1fef, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ffe, + 0x2000, 0x2064, + 0x2066, 0x2071, + 0x2074, 0x208e, + 0x2090, 0x209c, + 0x20a0, 0x20bf, + 0x20d0, 0x20f0, + 0x2100, 0x218b, + 0x2190, 0x2426, + 0x2440, 0x244a, + 0x2460, 0x2b73, + 0x2b76, 0x2b95, + 0x2b97, 0x2c2e, + 0x2c30, 0x2c5e, + 0x2c60, 0x2cf3, + 0x2cf9, 0x2d25, + 0x2d27, 0x2d27, + 0x2d2d, 0x2d2d, + 0x2d30, 0x2d67, + 0x2d6f, 0x2d70, + 0x2d7f, 0x2d96, + 0x2da0, 0x2da6, + 0x2da8, 0x2dae, + 0x2db0, 0x2db6, + 0x2db8, 0x2dbe, + 0x2dc0, 0x2dc6, + 0x2dc8, 0x2dce, + 0x2dd0, 0x2dd6, + 0x2dd8, 0x2dde, + 0x2de0, 0x2e52, + 0x2e80, 0x2e99, + 0x2e9b, 0x2ef3, + 0x2f00, 0x2fd5, + 0x2ff0, 0x2ffb, + 0x3000, 0x303f, + 0x3041, 0x3096, + 0x3099, 0x30ff, + 0x3105, 0x312f, + 0x3131, 0x318e, + 0x3190, 0x31e3, + 0x31f0, 0x321e, + 0x3220, 0x9ffc, + 0xa000, 0xa48c, + 0xa490, 0xa4c6, + 0xa4d0, 0xa62b, + 0xa640, 0xa6f7, + 0xa700, 0xa7bf, + 0xa7c2, 0xa7ca, + 0xa7f5, 0xa82c, + 0xa830, 0xa839, + 0xa840, 0xa877, + 0xa880, 0xa8c5, + 0xa8ce, 0xa8d9, + 0xa8e0, 0xa953, + 0xa95f, 0xa97c, + 0xa980, 0xa9cd, + 0xa9cf, 0xa9d9, + 0xa9de, 0xa9fe, + 0xaa00, 0xaa36, + 0xaa40, 0xaa4d, + 0xaa50, 0xaa59, + 0xaa5c, 0xaac2, + 0xaadb, 0xaaf6, + 0xab01, 0xab06, + 0xab09, 0xab0e, + 0xab11, 0xab16, + 0xab20, 0xab26, + 0xab28, 0xab2e, + 0xab30, 0xab6b, + 0xab70, 0xabed, + 0xabf0, 0xabf9, + 0xac00, 0xd7a3, + 0xd7b0, 0xd7c6, + 0xd7cb, 0xd7fb, + 0xd800, 0xfa6d, + 0xfa70, 0xfad9, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xfb1d, 0xfb36, + 0xfb38, 0xfb3c, + 0xfb3e, 0xfb3e, + 0xfb40, 0xfb41, + 0xfb43, 0xfb44, + 0xfb46, 0xfbc1, + 0xfbd3, 0xfd3f, + 0xfd50, 0xfd8f, + 0xfd92, 0xfdc7, + 0xfdd0, 0xfdfd, + 0xfe00, 0xfe19, + 0xfe20, 0xfe52, + 0xfe54, 0xfe66, + 0xfe68, 0xfe6b, + 0xfe70, 0xfe74, + 0xfe76, 0xfefc, + 0xfeff, 0xfeff, + 0xff01, 0xffbe, + 0xffc2, 0xffc7, + 0xffca, 0xffcf, + 0xffd2, 0xffd7, + 0xffda, 0xffdc, + 0xffe0, 0xffe6, + 0xffe8, 0xffee, + 0xfff9, 0x1000b, + 0x1000d, 0x10026, + 0x10028, 0x1003a, + 0x1003c, 0x1003d, + 0x1003f, 0x1004d, + 0x10050, 0x1005d, + 0x10080, 0x100fa, + 0x10100, 0x10102, + 0x10107, 0x10133, + 0x10137, 0x1018e, + 0x10190, 0x1019c, + 0x101a0, 0x101a0, + 0x101d0, 0x101fd, + 0x10280, 0x1029c, + 0x102a0, 0x102d0, + 0x102e0, 0x102fb, + 0x10300, 0x10323, + 0x1032d, 0x1034a, + 0x10350, 0x1037a, + 0x10380, 0x1039d, + 0x1039f, 0x103c3, + 0x103c8, 0x103d5, + 0x10400, 0x1049d, + 0x104a0, 0x104a9, + 0x104b0, 0x104d3, + 0x104d8, 0x104fb, + 0x10500, 0x10527, + 0x10530, 0x10563, + 0x1056f, 0x1056f, + 0x10600, 0x10736, + 0x10740, 0x10755, + 0x10760, 0x10767, + 0x10800, 0x10805, + 0x10808, 0x10808, + 0x1080a, 0x10835, + 0x10837, 0x10838, + 0x1083c, 0x1083c, + 0x1083f, 0x10855, + 0x10857, 0x1089e, + 0x108a7, 0x108af, + 0x108e0, 0x108f2, + 0x108f4, 0x108f5, + 0x108fb, 0x1091b, + 0x1091f, 0x10939, + 0x1093f, 0x1093f, + 0x10980, 0x109b7, + 0x109bc, 0x109cf, + 0x109d2, 0x10a03, + 0x10a05, 0x10a06, + 0x10a0c, 0x10a13, + 0x10a15, 0x10a17, + 0x10a19, 0x10a35, + 0x10a38, 0x10a3a, + 0x10a3f, 0x10a48, + 0x10a50, 0x10a58, + 0x10a60, 0x10a9f, + 0x10ac0, 0x10ae6, + 0x10aeb, 0x10af6, + 0x10b00, 0x10b35, + 0x10b39, 0x10b55, + 0x10b58, 0x10b72, + 0x10b78, 0x10b91, + 0x10b99, 0x10b9c, + 0x10ba9, 0x10baf, + 0x10c00, 0x10c48, + 0x10c80, 0x10cb2, + 0x10cc0, 0x10cf2, + 0x10cfa, 0x10d27, + 0x10d30, 0x10d39, + 0x10e60, 0x10e7e, + 0x10e80, 0x10ea9, + 0x10eab, 0x10ead, + 0x10eb0, 0x10eb1, + 0x10f00, 0x10f27, + 0x10f30, 0x10f59, + 0x10fb0, 0x10fcb, + 0x10fe0, 0x10ff6, + 0x11000, 0x1104d, + 0x11052, 0x1106f, + 0x1107f, 0x110c1, + 0x110cd, 0x110cd, + 0x110d0, 0x110e8, + 0x110f0, 0x110f9, + 0x11100, 0x11134, + 0x11136, 0x11147, + 0x11150, 0x11176, + 0x11180, 0x111df, + 0x111e1, 0x111f4, + 0x11200, 0x11211, + 0x11213, 0x1123e, + 0x11280, 0x11286, + 0x11288, 0x11288, + 0x1128a, 0x1128d, + 0x1128f, 0x1129d, + 0x1129f, 0x112a9, + 0x112b0, 0x112ea, + 0x112f0, 0x112f9, + 0x11300, 0x11303, + 0x11305, 0x1130c, + 0x1130f, 0x11310, + 0x11313, 0x11328, + 0x1132a, 0x11330, + 0x11332, 0x11333, + 0x11335, 0x11339, + 0x1133b, 0x11344, + 0x11347, 0x11348, + 0x1134b, 0x1134d, + 0x11350, 0x11350, + 0x11357, 0x11357, + 0x1135d, 0x11363, + 0x11366, 0x1136c, + 0x11370, 0x11374, + 0x11400, 0x1145b, + 0x1145d, 0x11461, + 0x11480, 0x114c7, + 0x114d0, 0x114d9, + 0x11580, 0x115b5, + 0x115b8, 0x115dd, + 0x11600, 0x11644, + 0x11650, 0x11659, + 0x11660, 0x1166c, + 0x11680, 0x116b8, + 0x116c0, 0x116c9, + 0x11700, 0x1171a, + 0x1171d, 0x1172b, + 0x11730, 0x1173f, + 0x11800, 0x1183b, + 0x118a0, 0x118f2, + 0x118ff, 0x11906, + 0x11909, 0x11909, + 0x1190c, 0x11913, + 0x11915, 0x11916, + 0x11918, 0x11935, + 0x11937, 0x11938, + 0x1193b, 0x11946, + 0x11950, 0x11959, + 0x119a0, 0x119a7, + 0x119aa, 0x119d7, + 0x119da, 0x119e4, + 0x11a00, 0x11a47, + 0x11a50, 0x11aa2, + 0x11ac0, 0x11af8, + 0x11c00, 0x11c08, + 0x11c0a, 0x11c36, + 0x11c38, 0x11c45, + 0x11c50, 0x11c6c, + 0x11c70, 0x11c8f, + 0x11c92, 0x11ca7, + 0x11ca9, 0x11cb6, + 0x11d00, 0x11d06, + 0x11d08, 0x11d09, + 0x11d0b, 0x11d36, + 0x11d3a, 0x11d3a, + 0x11d3c, 0x11d3d, + 0x11d3f, 0x11d47, + 0x11d50, 0x11d59, + 0x11d60, 0x11d65, + 0x11d67, 0x11d68, + 0x11d6a, 0x11d8e, + 0x11d90, 0x11d91, + 0x11d93, 0x11d98, + 0x11da0, 0x11da9, + 0x11ee0, 0x11ef8, + 0x11fb0, 0x11fb0, + 0x11fc0, 0x11ff1, + 0x11fff, 0x12399, + 0x12400, 0x1246e, + 0x12470, 0x12474, + 0x12480, 0x12543, + 0x13000, 0x1342e, + 0x13430, 0x13438, + 0x14400, 0x14646, + 0x16800, 0x16a38, + 0x16a40, 0x16a5e, + 0x16a60, 0x16a69, + 0x16a6e, 0x16a6f, + 0x16ad0, 0x16aed, + 0x16af0, 0x16af5, + 0x16b00, 0x16b45, + 0x16b50, 0x16b59, + 0x16b5b, 0x16b61, + 0x16b63, 0x16b77, + 0x16b7d, 0x16b8f, + 0x16e40, 0x16e9a, + 0x16f00, 0x16f4a, + 0x16f4f, 0x16f87, + 0x16f8f, 0x16f9f, + 0x16fe0, 0x16fe4, + 0x16ff0, 0x16ff1, + 0x17000, 0x187f7, + 0x18800, 0x18cd5, + 0x18d00, 0x18d08, + 0x1b000, 0x1b11e, + 0x1b150, 0x1b152, + 0x1b164, 0x1b167, + 0x1b170, 0x1b2fb, + 0x1bc00, 0x1bc6a, + 0x1bc70, 0x1bc7c, + 0x1bc80, 0x1bc88, + 0x1bc90, 0x1bc99, + 0x1bc9c, 0x1bca3, + 0x1d000, 0x1d0f5, + 0x1d100, 0x1d126, + 0x1d129, 0x1d1e8, + 0x1d200, 0x1d245, + 0x1d2e0, 0x1d2f3, + 0x1d300, 0x1d356, + 0x1d360, 0x1d378, + 0x1d400, 0x1d454, + 0x1d456, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d51e, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d552, 0x1d6a5, + 0x1d6a8, 0x1d7cb, + 0x1d7ce, 0x1da8b, + 0x1da9b, 0x1da9f, + 0x1daa1, 0x1daaf, + 0x1e000, 0x1e006, + 0x1e008, 0x1e018, + 0x1e01b, 0x1e021, + 0x1e023, 0x1e024, + 0x1e026, 0x1e02a, + 0x1e100, 0x1e12c, + 0x1e130, 0x1e13d, + 0x1e140, 0x1e149, + 0x1e14e, 0x1e14f, + 0x1e2c0, 0x1e2f9, + 0x1e2ff, 0x1e2ff, + 0x1e800, 0x1e8c4, + 0x1e8c7, 0x1e8d6, + 0x1e900, 0x1e94b, + 0x1e950, 0x1e959, + 0x1e95e, 0x1e95f, + 0x1ec71, 0x1ecb4, + 0x1ed01, 0x1ed3d, + 0x1ee00, 0x1ee03, + 0x1ee05, 0x1ee1f, + 0x1ee21, 0x1ee22, + 0x1ee24, 0x1ee24, + 0x1ee27, 0x1ee27, + 0x1ee29, 0x1ee32, + 0x1ee34, 0x1ee37, + 0x1ee39, 0x1ee39, + 0x1ee3b, 0x1ee3b, + 0x1ee42, 0x1ee42, + 0x1ee47, 0x1ee47, + 0x1ee49, 0x1ee49, + 0x1ee4b, 0x1ee4b, + 0x1ee4d, 0x1ee4f, + 0x1ee51, 0x1ee52, + 0x1ee54, 0x1ee54, + 0x1ee57, 0x1ee57, + 0x1ee59, 0x1ee59, + 0x1ee5b, 0x1ee5b, + 0x1ee5d, 0x1ee5d, + 0x1ee5f, 0x1ee5f, + 0x1ee61, 0x1ee62, + 0x1ee64, 0x1ee64, + 0x1ee67, 0x1ee6a, + 0x1ee6c, 0x1ee72, + 0x1ee74, 0x1ee77, + 0x1ee79, 0x1ee7c, + 0x1ee7e, 0x1ee7e, + 0x1ee80, 0x1ee89, + 0x1ee8b, 0x1ee9b, + 0x1eea1, 0x1eea3, + 0x1eea5, 0x1eea9, + 0x1eeab, 0x1eebb, + 0x1eef0, 0x1eef1, + 0x1f000, 0x1f02b, + 0x1f030, 0x1f093, + 0x1f0a0, 0x1f0ae, + 0x1f0b1, 0x1f0bf, + 0x1f0c1, 0x1f0cf, + 0x1f0d1, 0x1f0f5, + 0x1f100, 0x1f1ad, + 0x1f1e6, 0x1f202, + 0x1f210, 0x1f23b, + 0x1f240, 0x1f248, + 0x1f250, 0x1f251, + 0x1f260, 0x1f265, + 0x1f300, 0x1f6d7, + 0x1f6e0, 0x1f6ec, + 0x1f6f0, 0x1f6fc, + 0x1f700, 0x1f773, + 0x1f780, 0x1f7d8, + 0x1f7e0, 0x1f7eb, + 0x1f800, 0x1f80b, + 0x1f810, 0x1f847, + 0x1f850, 0x1f859, + 0x1f860, 0x1f887, + 0x1f890, 0x1f8ad, + 0x1f8b0, 0x1f8b1, + 0x1f900, 0x1f978, + 0x1f97a, 0x1f9cb, + 0x1f9cd, 0x1fa53, + 0x1fa60, 0x1fa6d, + 0x1fa70, 0x1fa74, + 0x1fa78, 0x1fa7a, + 0x1fa80, 0x1fa86, + 0x1fa90, 0x1faa8, + 0x1fab0, 0x1fab6, + 0x1fac0, 0x1fac2, + 0x1fad0, 0x1fad6, + 0x1fb00, 0x1fb92, + 0x1fb94, 0x1fbca, + 0x1fbf0, 0x1fbf9, + 0x1fffe, 0x2a6dd, + 0x2a700, 0x2b734, + 0x2b740, 0x2b81d, + 0x2b820, 0x2cea1, + 0x2ceb0, 0x2ebe0, + 0x2f800, 0x2fa1d, + 0x2fffe, 0x3134a, + 0x3fffe, 0x3ffff, + 0x4fffe, 0x4ffff, + 0x5fffe, 0x5ffff, + 0x6fffe, 0x6ffff, + 0x7fffe, 0x7ffff, + 0x8fffe, 0x8ffff, + 0x9fffe, 0x9ffff, + 0xafffe, 0xaffff, + 0xbfffe, 0xbffff, + 0xcfffe, 0xcffff, + 0xdfffe, 0xdffff, + 0xe0001, 0xe0001, + 0xe0020, 0xe007f, + 0xe0100, 0xe01ef, + 0xefffe, 0x10ffff, +}; /* CR_Age_13_0 */ + +#endif /* USE_UNICODE_AGE_PROPERTIES */ +/* 'Grapheme_Cluster_Break_Prepend': Grapheme_Cluster_Break=Prepend */ +static const OnigCodePoint CR_Grapheme_Cluster_Break_Prepend[] = { + 13, + 0x0600, 0x0605, + 0x06dd, 0x06dd, + 0x070f, 0x070f, + 0x08e2, 0x08e2, + 0x0d4e, 0x0d4e, + 0x110bd, 0x110bd, + 0x110cd, 0x110cd, + 0x111c2, 0x111c3, + 0x1193f, 0x1193f, + 0x11941, 0x11941, + 0x11a3a, 0x11a3a, + 0x11a84, 0x11a89, + 0x11d46, 0x11d46, +}; /* CR_Grapheme_Cluster_Break_Prepend */ + +/* 'Grapheme_Cluster_Break_CR': Grapheme_Cluster_Break=CR */ +static const OnigCodePoint CR_Grapheme_Cluster_Break_CR[] = { + 1, + 0x000d, 0x000d, +}; /* CR_Grapheme_Cluster_Break_CR */ + +/* 'Grapheme_Cluster_Break_LF': Grapheme_Cluster_Break=LF */ +#define CR_Grapheme_Cluster_Break_LF CR_NEWLINE + +/* 'Grapheme_Cluster_Break_Control': Grapheme_Cluster_Break=Control */ +static const OnigCodePoint CR_Grapheme_Cluster_Break_Control[] = { + 19, + 0x0000, 0x0009, + 0x000b, 0x000c, + 0x000e, 0x001f, + 0x007f, 0x009f, + 0x00ad, 0x00ad, + 0x061c, 0x061c, + 0x180e, 0x180e, + 0x200b, 0x200b, + 0x200e, 0x200f, + 0x2028, 0x202e, + 0x2060, 0x206f, + 0xfeff, 0xfeff, + 0xfff0, 0xfffb, + 0x13430, 0x13438, + 0x1bca0, 0x1bca3, + 0x1d173, 0x1d17a, + 0xe0000, 0xe001f, + 0xe0080, 0xe00ff, + 0xe01f0, 0xe0fff, +}; /* CR_Grapheme_Cluster_Break_Control */ + +/* 'Grapheme_Cluster_Break_Extend': Grapheme_Cluster_Break=Extend */ +static const OnigCodePoint CR_Grapheme_Cluster_Break_Extend[] = { + 345, + 0x0300, 0x036f, + 0x0483, 0x0489, + 0x0591, 0x05bd, + 0x05bf, 0x05bf, + 0x05c1, 0x05c2, + 0x05c4, 0x05c5, + 0x05c7, 0x05c7, + 0x0610, 0x061a, + 0x064b, 0x065f, + 0x0670, 0x0670, + 0x06d6, 0x06dc, + 0x06df, 0x06e4, + 0x06e7, 0x06e8, + 0x06ea, 0x06ed, + 0x0711, 0x0711, + 0x0730, 0x074a, + 0x07a6, 0x07b0, + 0x07eb, 0x07f3, + 0x07fd, 0x07fd, + 0x0816, 0x0819, + 0x081b, 0x0823, + 0x0825, 0x0827, + 0x0829, 0x082d, + 0x0859, 0x085b, + 0x08d3, 0x08e1, + 0x08e3, 0x0902, + 0x093a, 0x093a, + 0x093c, 0x093c, + 0x0941, 0x0948, + 0x094d, 0x094d, + 0x0951, 0x0957, + 0x0962, 0x0963, + 0x0981, 0x0981, + 0x09bc, 0x09bc, + 0x09be, 0x09be, + 0x09c1, 0x09c4, + 0x09cd, 0x09cd, + 0x09d7, 0x09d7, + 0x09e2, 0x09e3, + 0x09fe, 0x09fe, + 0x0a01, 0x0a02, + 0x0a3c, 0x0a3c, + 0x0a41, 0x0a42, + 0x0a47, 0x0a48, + 0x0a4b, 0x0a4d, + 0x0a51, 0x0a51, + 0x0a70, 0x0a71, + 0x0a75, 0x0a75, + 0x0a81, 0x0a82, + 0x0abc, 0x0abc, + 0x0ac1, 0x0ac5, + 0x0ac7, 0x0ac8, + 0x0acd, 0x0acd, + 0x0ae2, 0x0ae3, + 0x0afa, 0x0aff, + 0x0b01, 0x0b01, + 0x0b3c, 0x0b3c, + 0x0b3e, 0x0b3f, + 0x0b41, 0x0b44, + 0x0b4d, 0x0b4d, + 0x0b55, 0x0b57, + 0x0b62, 0x0b63, + 0x0b82, 0x0b82, + 0x0bbe, 0x0bbe, + 0x0bc0, 0x0bc0, + 0x0bcd, 0x0bcd, + 0x0bd7, 0x0bd7, + 0x0c00, 0x0c00, + 0x0c04, 0x0c04, + 0x0c3e, 0x0c40, + 0x0c46, 0x0c48, + 0x0c4a, 0x0c4d, + 0x0c55, 0x0c56, + 0x0c62, 0x0c63, + 0x0c81, 0x0c81, + 0x0cbc, 0x0cbc, + 0x0cbf, 0x0cbf, + 0x0cc2, 0x0cc2, + 0x0cc6, 0x0cc6, + 0x0ccc, 0x0ccd, + 0x0cd5, 0x0cd6, + 0x0ce2, 0x0ce3, + 0x0d00, 0x0d01, + 0x0d3b, 0x0d3c, + 0x0d3e, 0x0d3e, + 0x0d41, 0x0d44, + 0x0d4d, 0x0d4d, + 0x0d57, 0x0d57, + 0x0d62, 0x0d63, + 0x0d81, 0x0d81, + 0x0dca, 0x0dca, + 0x0dcf, 0x0dcf, + 0x0dd2, 0x0dd4, + 0x0dd6, 0x0dd6, + 0x0ddf, 0x0ddf, + 0x0e31, 0x0e31, + 0x0e34, 0x0e3a, + 0x0e47, 0x0e4e, + 0x0eb1, 0x0eb1, + 0x0eb4, 0x0ebc, + 0x0ec8, 0x0ecd, + 0x0f18, 0x0f19, + 0x0f35, 0x0f35, + 0x0f37, 0x0f37, + 0x0f39, 0x0f39, + 0x0f71, 0x0f7e, + 0x0f80, 0x0f84, + 0x0f86, 0x0f87, + 0x0f8d, 0x0f97, + 0x0f99, 0x0fbc, + 0x0fc6, 0x0fc6, + 0x102d, 0x1030, + 0x1032, 0x1037, + 0x1039, 0x103a, + 0x103d, 0x103e, + 0x1058, 0x1059, + 0x105e, 0x1060, + 0x1071, 0x1074, + 0x1082, 0x1082, + 0x1085, 0x1086, + 0x108d, 0x108d, + 0x109d, 0x109d, + 0x135d, 0x135f, + 0x1712, 0x1714, + 0x1732, 0x1734, + 0x1752, 0x1753, + 0x1772, 0x1773, + 0x17b4, 0x17b5, + 0x17b7, 0x17bd, + 0x17c6, 0x17c6, + 0x17c9, 0x17d3, + 0x17dd, 0x17dd, + 0x180b, 0x180d, + 0x1885, 0x1886, + 0x18a9, 0x18a9, + 0x1920, 0x1922, + 0x1927, 0x1928, + 0x1932, 0x1932, + 0x1939, 0x193b, + 0x1a17, 0x1a18, + 0x1a1b, 0x1a1b, + 0x1a56, 0x1a56, + 0x1a58, 0x1a5e, + 0x1a60, 0x1a60, + 0x1a62, 0x1a62, + 0x1a65, 0x1a6c, + 0x1a73, 0x1a7c, + 0x1a7f, 0x1a7f, + 0x1ab0, 0x1ac0, + 0x1b00, 0x1b03, + 0x1b34, 0x1b3a, + 0x1b3c, 0x1b3c, + 0x1b42, 0x1b42, + 0x1b6b, 0x1b73, + 0x1b80, 0x1b81, + 0x1ba2, 0x1ba5, + 0x1ba8, 0x1ba9, + 0x1bab, 0x1bad, 0x1be6, 0x1be6, 0x1be8, 0x1be9, 0x1bed, 0x1bed, @@ -34443,6 +35508,7 @@ static const OnigCodePoint CR_Grapheme_Cluster_Break_Extend[] = { 0xa806, 0xa806, 0xa80b, 0xa80b, 0xa825, 0xa826, + 0xa82c, 0xa82c, 0xa8c4, 0xa8c5, 0xa8e0, 0xa8f1, 0xa8ff, 0xa8ff, @@ -34483,6 +35549,7 @@ static const OnigCodePoint CR_Grapheme_Cluster_Break_Extend[] = { 0x10a3f, 0x10a3f, 0x10ae5, 0x10ae6, 0x10d24, 0x10d27, + 0x10eab, 0x10eac, 0x10f46, 0x10f50, 0x11001, 0x11001, 0x11038, 0x11046, @@ -34496,6 +35563,7 @@ static const OnigCodePoint CR_Grapheme_Cluster_Break_Extend[] = { 0x11180, 0x11181, 0x111b6, 0x111be, 0x111c9, 0x111cc, + 0x111cf, 0x111cf, 0x1122f, 0x11231, 0x11234, 0x11234, 0x11236, 0x11237, @@ -34536,6 +35604,10 @@ static const OnigCodePoint CR_Grapheme_Cluster_Break_Extend[] = { 0x11727, 0x1172b, 0x1182f, 0x11837, 0x11839, 0x1183a, + 0x11930, 0x11930, + 0x1193b, 0x1193c, + 0x1193e, 0x1193e, + 0x11943, 0x11943, 0x119d4, 0x119d7, 0x119da, 0x119db, 0x119e0, 0x119e0, @@ -34567,6 +35639,7 @@ static const OnigCodePoint CR_Grapheme_Cluster_Break_Extend[] = { 0x16b30, 0x16b36, 0x16f4f, 0x16f4f, 0x16f8f, 0x16f92, + 0x16fe4, 0x16fe4, 0x1bc9d, 0x1bc9e, 0x1d165, 0x1d165, 0x1d167, 0x1d169, @@ -34600,7 +35673,7 @@ static const OnigCodePoint CR_Grapheme_Cluster_Break_Extend[] = { /* 'Grapheme_Cluster_Break_SpacingMark': Grapheme_Cluster_Break=SpacingMark */ static const OnigCodePoint CR_Grapheme_Cluster_Break_SpacingMark[] = { - 152, + 159, 0x0903, 0x0903, 0x093b, 0x093b, 0x093e, 0x0940, @@ -34704,6 +35777,7 @@ static const OnigCodePoint CR_Grapheme_Cluster_Break_SpacingMark[] = { 0x11182, 0x11182, 0x111b3, 0x111b5, 0x111bf, 0x111c0, + 0x111ce, 0x111ce, 0x1122c, 0x1122e, 0x11232, 0x11233, 0x11235, 0x11235, @@ -34735,6 +35809,11 @@ static const OnigCodePoint CR_Grapheme_Cluster_Break_SpacingMark[] = { 0x11726, 0x11726, 0x1182c, 0x1182e, 0x11838, 0x11838, + 0x11931, 0x11935, + 0x11937, 0x11938, + 0x1193d, 0x1193d, + 0x11940, 0x11940, + 0x11942, 0x11942, 0x119d1, 0x119d3, 0x119dc, 0x119df, 0x119e4, 0x119e4, @@ -34751,6 +35830,7 @@ static const OnigCodePoint CR_Grapheme_Cluster_Break_SpacingMark[] = { 0x11d96, 0x11d96, 0x11ef5, 0x11ef6, 0x16f51, 0x16f87, + 0x16ff0, 0x16ff1, 0x1d166, 0x1d166, 0x1d16d, 0x1d16d, }; /* CR_Grapheme_Cluster_Break_SpacingMark */ @@ -36314,7 +37394,10 @@ static const OnigCodePoint CR_In_Yi_Radicals[] = { }; /* CR_In_Yi_Radicals */ /* 'In_Lisu': Block */ -#define CR_In_Lisu CR_Lisu +static const OnigCodePoint CR_In_Lisu[] = { + 1, + 0xa4d0, 0xa4ff, +}; /* CR_In_Lisu */ /* 'In_Vai': Block */ static const OnigCodePoint CR_In_Vai[] = { @@ -36790,6 +37873,12 @@ static const OnigCodePoint CR_In_Rumi_Numeral_Symbols[] = { 0x10e60, 0x10e7f, }; /* CR_In_Rumi_Numeral_Symbols */ +/* 'In_Yezidi': Block */ +static const OnigCodePoint CR_In_Yezidi[] = { + 1, + 0x10e80, 0x10ebf, +}; /* CR_In_Yezidi */ + /* 'In_Old_Sogdian': Block */ static const OnigCodePoint CR_In_Old_Sogdian[] = { 1, @@ -36802,6 +37891,12 @@ static const OnigCodePoint CR_In_Sogdian[] = { 0x10f30, 0x10f6f, }; /* CR_In_Sogdian */ +/* 'In_Chorasmian': Block */ +static const OnigCodePoint CR_In_Chorasmian[] = { + 1, + 0x10fb0, 0x10fdf, +}; /* CR_In_Chorasmian */ + /* 'In_Elymaic': Block */ static const OnigCodePoint CR_In_Elymaic[] = { 1, @@ -36839,10 +37934,7 @@ static const OnigCodePoint CR_In_Mahajani[] = { }; /* CR_In_Mahajani */ /* 'In_Sharada': Block */ -static const OnigCodePoint CR_In_Sharada[] = { - 1, - 0x11180, 0x111df, -}; /* CR_In_Sharada */ +#define CR_In_Sharada CR_Sharada /* 'In_Sinhala_Archaic_Numbers': Block */ static const OnigCodePoint CR_In_Sinhala_Archaic_Numbers[] = { @@ -36928,6 +38020,12 @@ static const OnigCodePoint CR_In_Warang_Citi[] = { 0x118a0, 0x118ff, }; /* CR_In_Warang_Citi */ +/* 'In_Dives_Akuru': Block */ +static const OnigCodePoint CR_In_Dives_Akuru[] = { + 1, + 0x11900, 0x1195f, +}; /* CR_In_Dives_Akuru */ + /* 'In_Nandinagari': Block */ static const OnigCodePoint CR_In_Nandinagari[] = { 1, @@ -36982,6 +38080,12 @@ static const OnigCodePoint CR_In_Makasar[] = { 0x11ee0, 0x11eff, }; /* CR_In_Makasar */ +/* 'In_Lisu_Supplement': Block */ +static const OnigCodePoint CR_In_Lisu_Supplement[] = { + 1, + 0x11fb0, 0x11fbf, +}; /* CR_In_Lisu_Supplement */ + /* 'In_Tamil_Supplement': Block */ static const OnigCodePoint CR_In_Tamil_Supplement[] = { 1, @@ -37078,6 +38182,18 @@ static const OnigCodePoint CR_In_Tangut_Components[] = { 0x18800, 0x18aff, }; /* CR_In_Tangut_Components */ +/* 'In_Khitan_Small_Script': Block */ +static const OnigCodePoint CR_In_Khitan_Small_Script[] = { + 1, + 0x18b00, 0x18cff, +}; /* CR_In_Khitan_Small_Script */ + +/* 'In_Tangut_Supplement': Block */ +static const OnigCodePoint CR_In_Tangut_Supplement[] = { + 1, + 0x18d00, 0x18d8f, +}; /* CR_In_Tangut_Supplement */ + /* 'In_Kana_Supplement': Block */ static const OnigCodePoint CR_In_Kana_Supplement[] = { 1, @@ -37300,6 +38416,12 @@ static const OnigCodePoint CR_In_Symbols_and_Pictographs_Extended_A[] = { 0x1fa70, 0x1faff, }; /* CR_In_Symbols_and_Pictographs_Extended_A */ +/* 'In_Symbols_for_Legacy_Computing': Block */ +static const OnigCodePoint CR_In_Symbols_for_Legacy_Computing[] = { + 1, + 0x1fb00, 0x1fbff, +}; /* CR_In_Symbols_for_Legacy_Computing */ + /* 'In_CJK_Unified_Ideographs_Extension_B': Block */ static const OnigCodePoint CR_In_CJK_Unified_Ideographs_Extension_B[] = { 1, @@ -37336,6 +38458,12 @@ static const OnigCodePoint CR_In_CJK_Compatibility_Ideographs_Supplement[] = { 0x2f800, 0x2fa1f, }; /* CR_In_CJK_Compatibility_Ideographs_Supplement */ +/* 'In_CJK_Unified_Ideographs_Extension_G': Block */ +static const OnigCodePoint CR_In_CJK_Unified_Ideographs_Extension_G[] = { + 1, + 0x30000, 0x3134f, +}; /* CR_In_CJK_Unified_Ideographs_Extension_G */ + /* 'In_Tags': Block */ static const OnigCodePoint CR_In_Tags[] = { 1, @@ -37362,7 +38490,7 @@ static const OnigCodePoint CR_In_Supplementary_Private_Use_Area_B[] = { /* 'In_No_Block': Block */ static const OnigCodePoint CR_In_No_Block[] = { - 53, + 54, 0x0870, 0x089f, 0x2fe0, 0x2fef, 0x10200, 0x1027f, @@ -37375,20 +38503,20 @@ static const OnigCodePoint CR_In_No_Block[] = { 0x10bb0, 0x10bff, 0x10c50, 0x10c7f, 0x10d40, 0x10e5f, - 0x10e80, 0x10eff, - 0x10f70, 0x10fdf, + 0x10ec0, 0x10eff, + 0x10f70, 0x10faf, 0x11250, 0x1127f, 0x11380, 0x113ff, 0x114e0, 0x1157f, 0x116d0, 0x116ff, 0x11740, 0x117ff, 0x11850, 0x1189f, - 0x11900, 0x1199f, + 0x11960, 0x1199f, 0x11ab0, 0x11abf, 0x11b00, 0x11bff, 0x11cc0, 0x11cff, 0x11db0, 0x11edf, - 0x11f00, 0x11fbf, + 0x11f00, 0x11faf, 0x12550, 0x12fff, 0x13440, 0x143ff, 0x14680, 0x167ff, @@ -37396,7 +38524,7 @@ static const OnigCodePoint CR_In_No_Block[] = { 0x16b90, 0x16e3f, 0x16ea0, 0x16eff, 0x16fa0, 0x16fdf, - 0x18b00, 0x1afff, + 0x18d90, 0x1afff, 0x1b300, 0x1bbff, 0x1bcb0, 0x1cfff, 0x1d250, 0x1d2df, @@ -37410,10 +38538,11 @@ static const OnigCodePoint CR_In_No_Block[] = { 0x1ecc0, 0x1ecff, 0x1ed50, 0x1edff, 0x1ef00, 0x1efff, - 0x1fb00, 0x1ffff, + 0x1fc00, 0x1ffff, 0x2a6e0, 0x2a6ff, 0x2ebf0, 0x2f7ff, - 0x2fa20, 0xdffff, + 0x2fa20, 0x2ffff, + 0x31350, 0xdffff, 0xe0080, 0xe00ff, 0xe01f0, 0xeffff, }; /* CR_In_No_Block */ @@ -37648,6 +38777,10 @@ static const OnigCodePoint* const CodeRanges[] = { CR_Nandinagari, CR_Nyiakeng_Puachue_Hmong, CR_Wancho, + CR_Chorasmian, + CR_Dives_Akuru, + CR_Khitan_Small_Script, + CR_Yezidi, CR_White_Space, CR_Bidi_Control, CR_Join_Control, @@ -37712,6 +38845,7 @@ static const OnigCodePoint* const CodeRanges[] = { CR_Age_11_0, CR_Age_12_0, CR_Age_12_1, + CR_Age_13_0, #endif /* USE_UNICODE_AGE_PROPERTIES */ CR_Grapheme_Cluster_Break_Prepend, CR_Grapheme_Cluster_Break_CR, @@ -37931,8 +39065,10 @@ static const OnigCodePoint* const CodeRanges[] = { CR_In_Old_Hungarian, CR_In_Hanifi_Rohingya, CR_In_Rumi_Numeral_Symbols, + CR_In_Yezidi, CR_In_Old_Sogdian, CR_In_Sogdian, + CR_In_Chorasmian, CR_In_Elymaic, CR_In_Brahmi, CR_In_Kaithi, @@ -37954,6 +39090,7 @@ static const OnigCodePoint* const CodeRanges[] = { CR_In_Ahom, CR_In_Dogra, CR_In_Warang_Citi, + CR_In_Dives_Akuru, CR_In_Nandinagari, CR_In_Zanabazar_Square, CR_In_Soyombo, @@ -37963,6 +39100,7 @@ static const OnigCodePoint* const CodeRanges[] = { CR_In_Masaram_Gondi, CR_In_Gunjala_Gondi, CR_In_Makasar, + CR_In_Lisu_Supplement, CR_In_Tamil_Supplement, CR_In_Cuneiform, CR_In_Cuneiform_Numbers_and_Punctuation, @@ -37979,6 +39117,8 @@ static const OnigCodePoint* const CodeRanges[] = { CR_In_Ideographic_Symbols_and_Punctuation, CR_In_Tangut, CR_In_Tangut_Components, + CR_In_Khitan_Small_Script, + CR_In_Tangut_Supplement, CR_In_Kana_Supplement, CR_In_Kana_Extended_A, CR_In_Small_Kana_Extension, @@ -38016,12 +39156,14 @@ static const OnigCodePoint* const CodeRanges[] = { CR_In_Supplemental_Symbols_and_Pictographs, CR_In_Chess_Symbols, CR_In_Symbols_and_Pictographs_Extended_A, + CR_In_Symbols_for_Legacy_Computing, CR_In_CJK_Unified_Ideographs_Extension_B, CR_In_CJK_Unified_Ideographs_Extension_C, CR_In_CJK_Unified_Ideographs_Extension_D, CR_In_CJK_Unified_Ideographs_Extension_E, CR_In_CJK_Unified_Ideographs_Extension_F, CR_In_CJK_Compatibility_Ideographs_Supplement, + CR_In_CJK_Unified_Ideographs_Extension_G, CR_In_Tags, CR_In_Variation_Selectors_Supplement, CR_In_Supplementary_Private_Use_Area_A, @@ -38045,20 +39187,22 @@ static const struct uniname2ctype_struct *uniname2ctype_p( #define TOTAL_KEYWORDS 15 #define MIN_WORD_LENGTH 4 #define MAX_WORD_LENGTH 11 -#define MIN_HASH_VALUE 6 -#define MAX_HASH_VALUE 20 -/* maximum key range = 15, duplicates = 0 */ #else /* USE_UNICODE_PROPERTIES */ #ifndef USE_UNICODE_AGE_PROPERTIES -#define TOTAL_KEYWORDS 814 +#define TOTAL_KEYWORDS 835 #else /* USE_UNICODE_AGE_PROPERTIES */ -#define TOTAL_KEYWORDS 836 +#define TOTAL_KEYWORDS 858 #endif /* USE_UNICODE_AGE_PROPERTIES */ #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 -#define MIN_HASH_VALUE 11 +#endif /* USE_UNICODE_PROPERTIES */ +#define MIN_HASH_VALUE 6 +#ifndef USE_UNICODE_PROPERTIES +#define MAX_HASH_VALUE 20 +/* maximum key range = 15, duplicates = 0 */ +#else /* USE_UNICODE_PROPERTIES */ #define MAX_HASH_VALUE 6098 -/* maximum key range = 6088, duplicates = 0 */ +/* maximum key range = 6093, duplicates = 0 */ #endif /* USE_UNICODE_PROPERTIES */ #ifdef __GNUC__ @@ -38100,16 +39244,16 @@ uniname2ctype_hash (register const char *str, register size_t len) 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, #else /* USE_UNICODE_AGE_PROPERTIES */ - 6099, 6099, 6099, 6099, 6099, 6099, 17, 6099, 3, 1, - 4, 13, 3, 22, 9, 16, 12, 5, 6099, 6099, + 6099, 6099, 6099, 6099, 6099, 6099, 20, 6099, 3, 1, + 4, 7, 20, 16, 11, 10, 6, 1, 6099, 6099, #endif /* USE_UNICODE_AGE_PROPERTIES */ 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 1, 1425, 113, - 437, 37, 1023, 1071, 1051, 4, 1492, 9, 500, 88, - 8, 18, 1371, 797, 54, 203, 310, 619, 1608, 603, - 364, 1438, 20, 1, 3, 6099, 6099, 6099, 6099, 6099 + 437, 37, 117, 1071, 1051, 4, 1488, 9, 500, 88, + 8, 18, 1371, 1287, 54, 203, 310, 619, 1635, 649, + 161, 1624, 4, 2, 1, 6099, 6099, 6099, 6099, 6099 #endif /* USE_UNICODE_PROPERTIES */ }; #ifndef USE_UNICODE_PROPERTIES @@ -38173,10 +39317,11 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str19[sizeof("digit")]; char uniname2ctype_pool_str20[sizeof("blank")]; #else /* USE_UNICODE_PROPERTIES */ - char uniname2ctype_pool_str11[sizeof("yi")]; - char uniname2ctype_pool_str17[sizeof("yiii")]; + char uniname2ctype_pool_str6[sizeof("z")]; + char uniname2ctype_pool_str12[sizeof("yi")]; + char uniname2ctype_pool_str17[sizeof("zzzz")]; + char uniname2ctype_pool_str18[sizeof("yiii")]; char uniname2ctype_pool_str22[sizeof("lana")]; - char uniname2ctype_pool_str24[sizeof("z")]; char uniname2ctype_pool_str25[sizeof("lina")]; char uniname2ctype_pool_str33[sizeof("maka")]; char uniname2ctype_pool_str35[sizeof("mani")]; @@ -38186,11 +39331,11 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str47[sizeof("ci")]; char uniname2ctype_pool_str48[sizeof("lao")]; char uniname2ctype_pool_str49[sizeof("laoo")]; + char uniname2ctype_pool_str51[sizeof("yezi")]; char uniname2ctype_pool_str52[sizeof("inkannada")]; char uniname2ctype_pool_str55[sizeof("cn")]; char uniname2ctype_pool_str64[sizeof("pi")]; char uniname2ctype_pool_str66[sizeof("innko")]; - char uniname2ctype_pool_str67[sizeof("zzzz")]; char uniname2ctype_pool_str71[sizeof("gran")]; char uniname2ctype_pool_str75[sizeof("co")]; char uniname2ctype_pool_str83[sizeof("lineara")]; @@ -38209,10 +39354,13 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str117[sizeof("geor")]; char uniname2ctype_pool_str118[sizeof("greek")]; char uniname2ctype_pool_str122[sizeof("gonm")]; + char uniname2ctype_pool_str126[sizeof("dia")]; + char uniname2ctype_pool_str127[sizeof("di")]; char uniname2ctype_pool_str129[sizeof("mendekikakui")]; char uniname2ctype_pool_str130[sizeof("pe")]; char uniname2ctype_pool_str131[sizeof("mero")]; char uniname2ctype_pool_str134[sizeof("inosmanya")]; + char uniname2ctype_pool_str135[sizeof("diak")]; char uniname2ctype_pool_str139[sizeof("cakm")]; char uniname2ctype_pool_str145[sizeof("inmanichaean")]; char uniname2ctype_pool_str146[sizeof("inmro")]; @@ -38222,6 +39370,8 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str152[sizeof("mandaic")]; char uniname2ctype_pool_str153[sizeof("meeteimayek")]; char uniname2ctype_pool_str161[sizeof("inarmenian")]; + char uniname2ctype_pool_str173[sizeof("vai")]; + char uniname2ctype_pool_str174[sizeof("vaii")]; char uniname2ctype_pool_str177[sizeof("inmyanmar")]; char uniname2ctype_pool_str178[sizeof("inmakasar")]; char uniname2ctype_pool_str183[sizeof("common")]; @@ -38234,6 +39384,7 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str213[sizeof("qaai")]; char uniname2ctype_pool_str218[sizeof("inahom")]; char uniname2ctype_pool_str226[sizeof("merc")]; + char uniname2ctype_pool_str230[sizeof("inchorasmian")]; char uniname2ctype_pool_str231[sizeof("combiningmark")]; char uniname2ctype_pool_str236[sizeof("lc")]; char uniname2ctype_pool_str237[sizeof("perm")]; @@ -38246,6 +39397,7 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str267[sizeof("armn")]; char uniname2ctype_pool_str268[sizeof("incherokee")]; char uniname2ctype_pool_str270[sizeof("prependedconcatenationmark")]; + char uniname2ctype_pool_str273[sizeof("cf")]; char uniname2ctype_pool_str274[sizeof("incuneiform")]; char uniname2ctype_pool_str275[sizeof("inavestan")]; char uniname2ctype_pool_str281[sizeof("inipaextensions")]; @@ -38253,9 +39405,11 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str283[sizeof("armenian")]; char uniname2ctype_pool_str285[sizeof("insharada")]; char uniname2ctype_pool_str289[sizeof("inmarchen")]; + char uniname2ctype_pool_str290[sizeof("pf")]; char uniname2ctype_pool_str293[sizeof("makasar")]; char uniname2ctype_pool_str297[sizeof("masaramgondi")]; char uniname2ctype_pool_str301[sizeof("inarrows")]; + char uniname2ctype_pool_str302[sizeof("diacritic")]; char uniname2ctype_pool_str311[sizeof("incyrillic")]; char uniname2ctype_pool_str313[sizeof("incham")]; char uniname2ctype_pool_str315[sizeof("qmark")]; @@ -38266,26 +39420,25 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str335[sizeof("inmasaramgondi")]; char uniname2ctype_pool_str338[sizeof("inthaana")]; char uniname2ctype_pool_str340[sizeof("latin")]; + char uniname2ctype_pool_str341[sizeof("inzanabazarsquare")]; char uniname2ctype_pool_str342[sizeof("inthai")]; char uniname2ctype_pool_str345[sizeof("lineseparator")]; char uniname2ctype_pool_str346[sizeof("pcm")]; char uniname2ctype_pool_str348[sizeof("inkatakana")]; char uniname2ctype_pool_str352[sizeof("inkaithi")]; - char uniname2ctype_pool_str357[sizeof("inzanabazarsquare")]; char uniname2ctype_pool_str362[sizeof("inscriptionalparthian")]; char uniname2ctype_pool_str366[sizeof("initialpunctuation")]; char uniname2ctype_pool_str373[sizeof("mtei")]; - char uniname2ctype_pool_str376[sizeof("vai")]; - char uniname2ctype_pool_str377[sizeof("vaii")]; char uniname2ctype_pool_str386[sizeof("inkhmersymbols")]; char uniname2ctype_pool_str399[sizeof("insyriac")]; char uniname2ctype_pool_str401[sizeof("intakri")]; char uniname2ctype_pool_str404[sizeof("arabic")]; - char uniname2ctype_pool_str411[sizeof("zs")]; + char uniname2ctype_pool_str409[sizeof("zs")]; char uniname2ctype_pool_str418[sizeof("katakana")]; char uniname2ctype_pool_str426[sizeof("prti")]; char uniname2ctype_pool_str442[sizeof("ascii")]; char uniname2ctype_pool_str445[sizeof("cs")]; + char uniname2ctype_pool_str460[sizeof("decimalnumber")]; char uniname2ctype_pool_str462[sizeof("ps")]; char uniname2ctype_pool_str468[sizeof("mand")]; char uniname2ctype_pool_str470[sizeof("privateuse")]; @@ -38295,26 +39448,28 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str486[sizeof("incjkcompatibilityforms")]; char uniname2ctype_pool_str488[sizeof("inkanaextendeda")]; char uniname2ctype_pool_str491[sizeof("incjkcompatibilityideographs")]; + char uniname2ctype_pool_str494[sizeof("yezidi")]; char uniname2ctype_pool_str500[sizeof("brai")]; char uniname2ctype_pool_str504[sizeof("mend")]; char uniname2ctype_pool_str505[sizeof("ideo")]; char uniname2ctype_pool_str506[sizeof("letter")]; char uniname2ctype_pool_str509[sizeof("l")]; char uniname2ctype_pool_str511[sizeof("inmeeteimayek")]; + char uniname2ctype_pool_str519[sizeof("xidcontinue")]; char uniname2ctype_pool_str520[sizeof("inideographicdescriptioncharacters")]; - char uniname2ctype_pool_str535[sizeof("xidcontinue")]; char uniname2ctype_pool_str538[sizeof("knda")]; char uniname2ctype_pool_str541[sizeof("innandinagari")]; char uniname2ctype_pool_str543[sizeof("kannada")]; char uniname2ctype_pool_str556[sizeof("inmodi")]; char uniname2ctype_pool_str558[sizeof("inlao")]; char uniname2ctype_pool_str560[sizeof("inoldnortharabian")]; + char uniname2ctype_pool_str562[sizeof("xidc")]; char uniname2ctype_pool_str565[sizeof("intransportandmapsymbols")]; char uniname2ctype_pool_str566[sizeof("letternumber")]; char uniname2ctype_pool_str568[sizeof("gothic")]; + char uniname2ctype_pool_str569[sizeof("vs")]; char uniname2ctype_pool_str572[sizeof("inlineara")]; char uniname2ctype_pool_str577[sizeof("inmendekikakui")]; - char uniname2ctype_pool_str578[sizeof("xidc")]; char uniname2ctype_pool_str579[sizeof("mongolian")]; char uniname2ctype_pool_str582[sizeof("inmiscellaneousmathematicalsymbolsa")]; char uniname2ctype_pool_str583[sizeof("inspecials")]; @@ -38326,23 +39481,28 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str604[sizeof("inmedefaidrin")]; char uniname2ctype_pool_str605[sizeof("inchesssymbols")]; char uniname2ctype_pool_str608[sizeof("incjkcompatibilityideographssupplement")]; + char uniname2ctype_pool_str609[sizeof("kits")]; + char uniname2ctype_pool_str613[sizeof("medf")]; char uniname2ctype_pool_str614[sizeof("inadlam")]; char uniname2ctype_pool_str624[sizeof("psalterpahlavi")]; char uniname2ctype_pool_str625[sizeof("incommonindicnumberforms")]; + char uniname2ctype_pool_str629[sizeof("medefaidrin")]; char uniname2ctype_pool_str630[sizeof("lt")]; - char uniname2ctype_pool_str636[sizeof("innewa")]; + char uniname2ctype_pool_str631[sizeof("patternsyntax")]; + char uniname2ctype_pool_str638[sizeof("inshorthandformatcontrols")]; char uniname2ctype_pool_str639[sizeof("sk")]; char uniname2ctype_pool_str642[sizeof("control")]; char uniname2ctype_pool_str645[sizeof("inancientsymbols")]; char uniname2ctype_pool_str647[sizeof("palm")]; char uniname2ctype_pool_str650[sizeof("inlycian")]; + char uniname2ctype_pool_str652[sizeof("xids")]; char uniname2ctype_pool_str657[sizeof("so")]; char uniname2ctype_pool_str660[sizeof("patternwhitespace")]; - char uniname2ctype_pool_str668[sizeof("xids")]; char uniname2ctype_pool_str672[sizeof("inmandaic")]; char uniname2ctype_pool_str675[sizeof("idc")]; char uniname2ctype_pool_str678[sizeof("meroiticcursive")]; - char uniname2ctype_pool_str695[sizeof("inwarangciti")]; + char uniname2ctype_pool_str682[sizeof("innewa")]; + char uniname2ctype_pool_str688[sizeof("dsrt")]; char uniname2ctype_pool_str696[sizeof("sora")]; char uniname2ctype_pool_str697[sizeof("inopticalcharacterrecognition")]; char uniname2ctype_pool_str703[sizeof("inoldsogdian")]; @@ -38353,24 +39513,27 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str720[sizeof("grext")]; char uniname2ctype_pool_str737[sizeof("print")]; char uniname2ctype_pool_str738[sizeof("intaitham")]; - char uniname2ctype_pool_str742[sizeof("lower")]; + char uniname2ctype_pool_str741[sizeof("inwarangciti")]; char uniname2ctype_pool_str753[sizeof("joinc")]; char uniname2ctype_pool_str755[sizeof("inoldsoutharabian")]; char uniname2ctype_pool_str760[sizeof("incjkstrokes")]; char uniname2ctype_pool_str761[sizeof("batk")]; + char uniname2ctype_pool_str765[sizeof("deseret")]; char uniname2ctype_pool_str766[sizeof("samr")]; - char uniname2ctype_pool_str767[sizeof("inwancho")]; char uniname2ctype_pool_str771[sizeof("batak")]; - char uniname2ctype_pool_str772[sizeof("vs")]; char uniname2ctype_pool_str776[sizeof("patws")]; char uniname2ctype_pool_str783[sizeof("samaritan")]; char uniname2ctype_pool_str787[sizeof("idsbinaryoperator")]; + char uniname2ctype_pool_str788[sizeof("lower")]; char uniname2ctype_pool_str791[sizeof("pauc")]; char uniname2ctype_pool_str794[sizeof("insmallkanaextension")]; char uniname2ctype_pool_str797[sizeof("sm")]; char uniname2ctype_pool_str799[sizeof("indominotiles")]; char uniname2ctype_pool_str802[sizeof("alnum")]; + char uniname2ctype_pool_str806[sizeof("incyrillicextendeda")]; char uniname2ctype_pool_str809[sizeof("insylotinagri")]; + char uniname2ctype_pool_str811[sizeof("intaixuanjingsymbols")]; + char uniname2ctype_pool_str813[sizeof("inwancho")]; char uniname2ctype_pool_str814[sizeof("inugaritic")]; char uniname2ctype_pool_str818[sizeof("incontrolpictures")]; char uniname2ctype_pool_str821[sizeof("inlinearbideograms")]; @@ -38379,22 +39542,23 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str824[sizeof("ital")]; char uniname2ctype_pool_str825[sizeof("inmodifiertoneletters")]; char uniname2ctype_pool_str828[sizeof("inancientgreekmusicalnotation")]; - char uniname2ctype_pool_str834[sizeof("patternsyntax")]; char uniname2ctype_pool_str838[sizeof("lisu")]; - char uniname2ctype_pool_str842[sizeof("lowercase")]; - char uniname2ctype_pool_str845[sizeof("cwcm")]; char uniname2ctype_pool_str847[sizeof("sc")]; char uniname2ctype_pool_str848[sizeof("bass")]; char uniname2ctype_pool_str855[sizeof("ids")]; char uniname2ctype_pool_str857[sizeof("inlatinextendeda")]; - char uniname2ctype_pool_str862[sizeof("oriya")]; char uniname2ctype_pool_str875[sizeof("intaile")]; + char uniname2ctype_pool_str882[sizeof("cuneiform")]; char uniname2ctype_pool_str886[sizeof("inmiscellaneoussymbols")]; + char uniname2ctype_pool_str888[sizeof("lowercase")]; + char uniname2ctype_pool_str891[sizeof("cwcm")]; char uniname2ctype_pool_str895[sizeof("inmiscellaneoussymbolsandarrows")]; char uniname2ctype_pool_str898[sizeof("incaucasianalbanian")]; char uniname2ctype_pool_str900[sizeof("inmiscellaneoussymbolsandpictographs")]; char uniname2ctype_pool_str906[sizeof("inoldturkic")]; char uniname2ctype_pool_str907[sizeof("insaurashtra")]; + char uniname2ctype_pool_str918[sizeof("incyrillicextendedc")]; + char uniname2ctype_pool_str920[sizeof("cwcf")]; char uniname2ctype_pool_str924[sizeof("idcontinue")]; char uniname2ctype_pool_str926[sizeof("intamil")]; char uniname2ctype_pool_str928[sizeof("inmultani")]; @@ -38403,42 +39567,39 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str946[sizeof("bali")]; char uniname2ctype_pool_str961[sizeof("blank")]; char uniname2ctype_pool_str963[sizeof("idst")]; + char uniname2ctype_pool_str972[sizeof("modifierletter")]; char uniname2ctype_pool_str974[sizeof("inlydian")]; - char uniname2ctype_pool_str986[sizeof("innewtailue")]; + char uniname2ctype_pool_str991[sizeof("xsux")]; char uniname2ctype_pool_str994[sizeof("bengali")]; char uniname2ctype_pool_str995[sizeof("runr")]; - char uniname2ctype_pool_str1005[sizeof("zl")]; - char uniname2ctype_pool_str1009[sizeof("incyrillicextendeda")]; + char uniname2ctype_pool_str1003[sizeof("zl")]; + char uniname2ctype_pool_str1005[sizeof("inunifiedcanadianaboriginalsyllabics")]; char uniname2ctype_pool_str1010[sizeof("ll")]; char uniname2ctype_pool_str1013[sizeof("indeseret")]; - char uniname2ctype_pool_str1014[sizeof("intaixuanjingsymbols")]; char uniname2ctype_pool_str1015[sizeof("inancientgreeknumbers")]; char uniname2ctype_pool_str1021[sizeof("idstart")]; char uniname2ctype_pool_str1025[sizeof("inmeeteimayekextensions")]; char uniname2ctype_pool_str1028[sizeof("balinese")]; - char uniname2ctype_pool_str1032[sizeof("dia")]; - char uniname2ctype_pool_str1033[sizeof("di")]; + char uniname2ctype_pool_str1032[sizeof("innewtailue")]; char uniname2ctype_pool_str1035[sizeof("inspacingmodifierletters")]; char uniname2ctype_pool_str1036[sizeof("inearlydynasticcuneiform")]; char uniname2ctype_pool_str1049[sizeof("plrd")]; char uniname2ctype_pool_str1067[sizeof("canadianaboriginal")]; - char uniname2ctype_pool_str1070[sizeof("zinh")]; + char uniname2ctype_pool_str1068[sizeof("zinh")]; char uniname2ctype_pool_str1072[sizeof("sind")]; - char uniname2ctype_pool_str1080[sizeof("osage")]; + char uniname2ctype_pool_str1074[sizeof("xidstart")]; + char uniname2ctype_pool_str1075[sizeof("xdigit")]; char uniname2ctype_pool_str1081[sizeof("inlatinextendedc")]; - char uniname2ctype_pool_str1085[sizeof("uideo")]; char uniname2ctype_pool_str1087[sizeof("incountingrodnumerals")]; - char uniname2ctype_pool_str1090[sizeof("xidstart")]; - char uniname2ctype_pool_str1091[sizeof("xdigit")]; - char uniname2ctype_pool_str1093[sizeof("osma")]; char uniname2ctype_pool_str1097[sizeof("inkhudawadi")]; char uniname2ctype_pool_str1102[sizeof("inhanifirohingya")]; char uniname2ctype_pool_str1105[sizeof("gong")]; char uniname2ctype_pool_str1107[sizeof("ingrantha")]; char uniname2ctype_pool_str1109[sizeof("bidic")]; + char uniname2ctype_pool_str1116[sizeof("variationselector")]; char uniname2ctype_pool_str1119[sizeof("mong")]; char uniname2ctype_pool_str1120[sizeof("cased")]; - char uniname2ctype_pool_str1121[sizeof("incyrillicextendedc")]; + char uniname2ctype_pool_str1131[sizeof("uideo")]; char uniname2ctype_pool_str1134[sizeof("inhiragana")]; char uniname2ctype_pool_str1140[sizeof("sinhala")]; char uniname2ctype_pool_str1142[sizeof("adlm")]; @@ -38456,7 +39617,6 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str1170[sizeof("ingeneralpunctuation")]; char uniname2ctype_pool_str1171[sizeof("inmahajani")]; char uniname2ctype_pool_str1174[sizeof("incyrillicsupplement")]; - char uniname2ctype_pool_str1175[sizeof("lowercaseletter")]; char uniname2ctype_pool_str1176[sizeof("marchen")]; char uniname2ctype_pool_str1177[sizeof("graphemelink")]; char uniname2ctype_pool_str1178[sizeof("ingeorgian")]; @@ -38471,10 +39631,11 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str1198[sizeof("khar")]; char uniname2ctype_pool_str1203[sizeof("inmongolian")]; char uniname2ctype_pool_str1207[sizeof("incherokeesupplement")]; - char uniname2ctype_pool_str1208[sizeof("diacritic")]; char uniname2ctype_pool_str1209[sizeof("manichaean")]; - char uniname2ctype_pool_str1210[sizeof("xsux")]; char uniname2ctype_pool_str1212[sizeof("inolchiki")]; + char uniname2ctype_pool_str1213[sizeof("dogra")]; + char uniname2ctype_pool_str1221[sizeof("lowercaseletter")]; + char uniname2ctype_pool_str1223[sizeof("inkhitansmallscript")]; char uniname2ctype_pool_str1227[sizeof("quotationmark")]; char uniname2ctype_pool_str1231[sizeof("adlam")]; char uniname2ctype_pool_str1232[sizeof("inethiopic")]; @@ -38484,47 +39645,41 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str1235[sizeof("age=12.1")]; char uniname2ctype_pool_str1236[sizeof("age=10.0")]; char uniname2ctype_pool_str1237[sizeof("age=12.0")]; + char uniname2ctype_pool_str1240[sizeof("age=13.0")]; #endif /* USE_UNICODE_AGE_PROPERTIES */ char uniname2ctype_pool_str1243[sizeof("casedletter")]; char uniname2ctype_pool_str1244[sizeof("ingurmukhi")]; - char uniname2ctype_pool_str1245[sizeof("odi")]; char uniname2ctype_pool_str1246[sizeof("incjkunifiedideographsextensiona")]; -#ifdef USE_UNICODE_AGE_PROPERTIES - char uniname2ctype_pool_str1247[sizeof("age=1.1")]; -#endif /* USE_UNICODE_AGE_PROPERTIES */ + char uniname2ctype_pool_str1247[sizeof("inunifiedcanadianaboriginalsyllabicsextended")]; char uniname2ctype_pool_str1248[sizeof("lu")]; #ifdef USE_UNICODE_AGE_PROPERTIES - char uniname2ctype_pool_str1249[sizeof("age=4.1")]; - char uniname2ctype_pool_str1250[sizeof("age=2.1")]; - char uniname2ctype_pool_str1251[sizeof("age=4.0")]; - char uniname2ctype_pool_str1252[sizeof("age=2.0")]; - char uniname2ctype_pool_str1253[sizeof("age=9.0")]; + char uniname2ctype_pool_str1250[sizeof("age=1.1")]; + char uniname2ctype_pool_str1252[sizeof("age=9.0")]; + char uniname2ctype_pool_str1253[sizeof("age=2.1")]; #endif /* USE_UNICODE_AGE_PROPERTIES */ char uniname2ctype_pool_str1254[sizeof("intamilsupplement")]; #ifdef USE_UNICODE_AGE_PROPERTIES - char uniname2ctype_pool_str1255[sizeof("age=6.1")]; + char uniname2ctype_pool_str1255[sizeof("age=2.0")]; + char uniname2ctype_pool_str1256[sizeof("age=3.1")]; + char uniname2ctype_pool_str1257[sizeof("age=8.0")]; + char uniname2ctype_pool_str1258[sizeof("age=3.0")]; + char uniname2ctype_pool_str1259[sizeof("age=3.2")]; + char uniname2ctype_pool_str1260[sizeof("age=6.1")]; + char uniname2ctype_pool_str1261[sizeof("age=7.0")]; + char uniname2ctype_pool_str1262[sizeof("age=6.0")]; + char uniname2ctype_pool_str1263[sizeof("age=6.2")]; #endif /* USE_UNICODE_AGE_PROPERTIES */ - char uniname2ctype_pool_str1256[sizeof("unknown")]; + char uniname2ctype_pool_str1264[sizeof("dogr")]; #ifdef USE_UNICODE_AGE_PROPERTIES - char uniname2ctype_pool_str1257[sizeof("age=6.0")]; - char uniname2ctype_pool_str1258[sizeof("age=6.2")]; - char uniname2ctype_pool_str1259[sizeof("age=3.1")]; - char uniname2ctype_pool_str1260[sizeof("age=8.0")]; - char uniname2ctype_pool_str1261[sizeof("age=3.0")]; - char uniname2ctype_pool_str1262[sizeof("age=3.2")]; -#endif /* USE_UNICODE_AGE_PROPERTIES */ - char uniname2ctype_pool_str1263[sizeof("cwt")]; -#ifdef USE_UNICODE_AGE_PROPERTIES - char uniname2ctype_pool_str1264[sizeof("age=7.0")]; -#endif /* USE_UNICODE_AGE_PROPERTIES */ - char uniname2ctype_pool_str1266[sizeof("unassigned")]; -#ifdef USE_UNICODE_AGE_PROPERTIES - char uniname2ctype_pool_str1267[sizeof("age=6.3")]; - char uniname2ctype_pool_str1268[sizeof("age=5.1")]; - char uniname2ctype_pool_str1270[sizeof("age=5.0")]; - char uniname2ctype_pool_str1271[sizeof("age=5.2")]; + char uniname2ctype_pool_str1265[sizeof("age=5.1")]; + char uniname2ctype_pool_str1266[sizeof("age=6.3")]; + char uniname2ctype_pool_str1267[sizeof("age=5.0")]; + char uniname2ctype_pool_str1268[sizeof("age=5.2")]; + char uniname2ctype_pool_str1269[sizeof("age=4.1")]; + char uniname2ctype_pool_str1271[sizeof("age=4.0")]; #endif /* USE_UNICODE_AGE_PROPERTIES */ char uniname2ctype_pool_str1274[sizeof("ahom")]; + char uniname2ctype_pool_str1278[sizeof("phnx")]; char uniname2ctype_pool_str1282[sizeof("incjkunifiedideographsextensione")]; char uniname2ctype_pool_str1285[sizeof("khmr")]; char uniname2ctype_pool_str1289[sizeof("insinhala")]; @@ -38533,22 +39688,28 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str1300[sizeof("guru")]; char uniname2ctype_pool_str1301[sizeof("sundanese")]; char uniname2ctype_pool_str1306[sizeof("punct")]; + char uniname2ctype_pool_str1309[sizeof("cwt")]; + char uniname2ctype_pool_str1312[sizeof("unassigned")]; char uniname2ctype_pool_str1314[sizeof("paucinhau")]; char uniname2ctype_pool_str1317[sizeof("gurmukhi")]; - char uniname2ctype_pool_str1319[sizeof("variationselector")]; + char uniname2ctype_pool_str1328[sizeof("chorasmian")]; char uniname2ctype_pool_str1331[sizeof("logicalorderexception")]; char uniname2ctype_pool_str1340[sizeof("khmer")]; char uniname2ctype_pool_str1343[sizeof("limbu")]; + char uniname2ctype_pool_str1348[sizeof("unknown")]; + char uniname2ctype_pool_str1349[sizeof("chrs")]; + char uniname2ctype_pool_str1352[sizeof("oriya")]; char uniname2ctype_pool_str1354[sizeof("inscriptionalpahlavi")]; - char uniname2ctype_pool_str1355[sizeof("oidc")]; char uniname2ctype_pool_str1358[sizeof("incjkunifiedideographsextensionc")]; char uniname2ctype_pool_str1360[sizeof("cntrl")]; + char uniname2ctype_pool_str1362[sizeof("incjkunifiedideographsextensionf")]; char uniname2ctype_pool_str1365[sizeof("inlatinextendedadditional")]; - char uniname2ctype_pool_str1366[sizeof("decimalnumber")]; + char uniname2ctype_pool_str1366[sizeof("ahex")]; char uniname2ctype_pool_str1367[sizeof("insorasompeng")]; char uniname2ctype_pool_str1369[sizeof("radical")]; char uniname2ctype_pool_str1373[sizeof("emojimodifier")]; char uniname2ctype_pool_str1375[sizeof("kharoshthi")]; + char uniname2ctype_pool_str1376[sizeof("dash")]; char uniname2ctype_pool_str1380[sizeof("n")]; char uniname2ctype_pool_str1384[sizeof("math")]; char uniname2ctype_pool_str1387[sizeof("goth")]; @@ -38559,469 +39720,468 @@ struct uniname2ctype_pool_t char uniname2ctype_pool_str1419[sizeof("nko")]; char uniname2ctype_pool_str1420[sizeof("nkoo")]; char uniname2ctype_pool_str1422[sizeof("ingreekandcoptic")]; - char uniname2ctype_pool_str1423[sizeof("olck")]; char uniname2ctype_pool_str1426[sizeof("p")]; char uniname2ctype_pool_str1428[sizeof("grantha")]; - char uniname2ctype_pool_str1434[sizeof("olchiki")]; + char uniname2ctype_pool_str1434[sizeof("xpeo")]; char uniname2ctype_pool_str1438[sizeof("incjkunifiedideographs")]; - char uniname2ctype_pool_str1441[sizeof("zanb")]; + char uniname2ctype_pool_str1439[sizeof("zanb")]; char uniname2ctype_pool_str1442[sizeof("intirhuta")]; - char uniname2ctype_pool_str1445[sizeof("oids")]; char uniname2ctype_pool_str1448[sizeof("inhatran")]; char uniname2ctype_pool_str1449[sizeof("linb")]; - char uniname2ctype_pool_str1450[sizeof("xpeo")]; char uniname2ctype_pool_str1451[sizeof("mult")]; char uniname2ctype_pool_str1454[sizeof("saurashtra")]; char uniname2ctype_pool_str1457[sizeof("kthi")]; char uniname2ctype_pool_str1462[sizeof("inbhaiksuki")]; - char uniname2ctype_pool_str1466[sizeof("olower")]; char uniname2ctype_pool_str1470[sizeof("innabataean")]; char uniname2ctype_pool_str1471[sizeof("inphoenician")]; char uniname2ctype_pool_str1475[sizeof("inkanbun")]; char uniname2ctype_pool_str1476[sizeof("inmeroitichieroglyphs")]; - char uniname2ctype_pool_str1478[sizeof("inkayahli")]; - char uniname2ctype_pool_str1481[sizeof("phnx")]; - char uniname2ctype_pool_str1485[sizeof("inoriya")]; char uniname2ctype_pool_str1489[sizeof("enclosingmark")]; char uniname2ctype_pool_str1495[sizeof("sd")]; char uniname2ctype_pool_str1497[sizeof("inelbasan")]; - char uniname2ctype_pool_str1498[sizeof("wara")]; char uniname2ctype_pool_str1499[sizeof("inenclosedideographicsupplement")]; char uniname2ctype_pool_str1501[sizeof("sidd")]; + char uniname2ctype_pool_str1505[sizeof("hani")]; char uniname2ctype_pool_str1507[sizeof("linearb")]; - char uniname2ctype_pool_str1509[sizeof("hani")]; - char uniname2ctype_pool_str1512[sizeof("han")]; + char uniname2ctype_pool_str1508[sizeof("han")]; + char uniname2ctype_pool_str1509[sizeof("intifinagh")]; char uniname2ctype_pool_str1517[sizeof("inenclosedalphanumericsupplement")]; - char uniname2ctype_pool_str1519[sizeof("medf")]; + char uniname2ctype_pool_str1519[sizeof("hano")]; char uniname2ctype_pool_str1520[sizeof("bidicontrol")]; - char uniname2ctype_pool_str1523[sizeof("hano")]; char uniname2ctype_pool_str1524[sizeof("inphaistosdisc")]; char uniname2ctype_pool_str1529[sizeof("limb")]; char uniname2ctype_pool_str1531[sizeof("inkangxiradicals")]; char uniname2ctype_pool_str1533[sizeof("lepc")]; - char uniname2ctype_pool_str1535[sizeof("medefaidrin")]; char uniname2ctype_pool_str1536[sizeof("braille")]; char uniname2ctype_pool_str1537[sizeof("regionalindicator")]; - char uniname2ctype_pool_str1542[sizeof("inlowsurrogates")]; - char uniname2ctype_pool_str1544[sizeof("inshorthandformatcontrols")]; + char uniname2ctype_pool_str1544[sizeof("inkhojki")]; char uniname2ctype_pool_str1547[sizeof("brah")]; - char uniname2ctype_pool_str1548[sizeof("inkhojki")]; + char uniname2ctype_pool_str1548[sizeof("hanunoo")]; char uniname2ctype_pool_str1549[sizeof("inoldhungarian")]; - char uniname2ctype_pool_str1552[sizeof("hanunoo")]; - char uniname2ctype_pool_str1555[sizeof("hira")]; + char uniname2ctype_pool_str1551[sizeof("hira")]; char uniname2ctype_pool_str1557[sizeof("beng")]; char uniname2ctype_pool_str1563[sizeof("emojimodifierbase")]; char uniname2ctype_pool_str1565[sizeof("inarabic")]; - char uniname2ctype_pool_str1567[sizeof("lyci")]; - char uniname2ctype_pool_str1569[sizeof("ahex")]; + char uniname2ctype_pool_str1570[sizeof("osage")]; char uniname2ctype_pool_str1572[sizeof("inherited")]; char uniname2ctype_pool_str1580[sizeof("glag")]; - char uniname2ctype_pool_str1582[sizeof("lycian")]; + char uniname2ctype_pool_str1583[sizeof("osma")]; char uniname2ctype_pool_str1587[sizeof("indogra")]; - char uniname2ctype_pool_str1594[sizeof("dsrt")]; + char uniname2ctype_pool_str1588[sizeof("inlowsurrogates")]; char uniname2ctype_pool_str1597[sizeof("arab")]; - char uniname2ctype_pool_str1602[sizeof("mymr")]; - char uniname2ctype_pool_str1607[sizeof("myanmar")]; char uniname2ctype_pool_str1613[sizeof("phli")]; char uniname2ctype_pool_str1617[sizeof("inimperialaramaic")]; + char uniname2ctype_pool_str1618[sizeof("emod")]; char uniname2ctype_pool_str1622[sizeof("ingreekextended")]; char uniname2ctype_pool_str1623[sizeof("inanatolianhieroglyphs")]; char uniname2ctype_pool_str1629[sizeof("punctuation")]; - char uniname2ctype_pool_str1631[sizeof("takri")]; char uniname2ctype_pool_str1635[sizeof("graphemeextend")]; - char uniname2ctype_pool_str1638[sizeof("invai")]; - char uniname2ctype_pool_str1643[sizeof("cwl")]; char uniname2ctype_pool_str1654[sizeof("ingeometricshapes")]; char uniname2ctype_pool_str1655[sizeof("emojicomponent")]; + char uniname2ctype_pool_str1656[sizeof("softdotted")]; + char uniname2ctype_pool_str1658[sizeof("takri")]; + char uniname2ctype_pool_str1661[sizeof("inyezidi")]; char uniname2ctype_pool_str1662[sizeof("coptic")]; - char uniname2ctype_pool_str1671[sizeof("deseret")]; + char uniname2ctype_pool_str1664[sizeof("inkayahli")]; + char uniname2ctype_pool_str1665[sizeof("invai")]; + char uniname2ctype_pool_str1671[sizeof("inoriya")]; char uniname2ctype_pool_str1675[sizeof("inarabicpresentationformsa")]; - char uniname2ctype_pool_str1676[sizeof("takr")]; char uniname2ctype_pool_str1677[sizeof("inbasiclatin")]; char uniname2ctype_pool_str1682[sizeof("incjkunifiedideographsextensiond")]; + char uniname2ctype_pool_str1684[sizeof("wara")]; char uniname2ctype_pool_str1686[sizeof("sinh")]; char uniname2ctype_pool_str1687[sizeof("sund")]; + char uniname2ctype_pool_str1689[sizeof("cwl")]; char uniname2ctype_pool_str1691[sizeof("shavian")]; - char uniname2ctype_pool_str1692[sizeof("taile")]; char uniname2ctype_pool_str1699[sizeof("insundanesesupplement")]; - char uniname2ctype_pool_str1702[sizeof("inelymaic")]; - char uniname2ctype_pool_str1703[sizeof("insoyombo")]; + char uniname2ctype_pool_str1703[sizeof("takr")]; char uniname2ctype_pool_str1704[sizeof("bhks")]; char uniname2ctype_pool_str1714[sizeof("bhaiksuki")]; - char uniname2ctype_pool_str1716[sizeof("incjkcompatibility")]; + char uniname2ctype_pool_str1719[sizeof("taile")]; char uniname2ctype_pool_str1722[sizeof("inhanunoo")]; char uniname2ctype_pool_str1724[sizeof("intangut")]; + char uniname2ctype_pool_str1727[sizeof("inethiopicextendeda")]; char uniname2ctype_pool_str1728[sizeof("sogdian")]; char uniname2ctype_pool_str1729[sizeof("inlatinextendedd")]; char uniname2ctype_pool_str1730[sizeof("sogo")]; char uniname2ctype_pool_str1731[sizeof("insinhalaarchaicnumbers")]; char uniname2ctype_pool_str1732[sizeof("ideographic")]; - char uniname2ctype_pool_str1733[sizeof("ugar")]; + char uniname2ctype_pool_str1735[sizeof("odi")]; char uniname2ctype_pool_str1740[sizeof("copt")]; char uniname2ctype_pool_str1742[sizeof("imperialaramaic")]; char uniname2ctype_pool_str1745[sizeof("insogdian")]; char uniname2ctype_pool_str1746[sizeof("indingbats")]; char uniname2ctype_pool_str1750[sizeof("format")]; char uniname2ctype_pool_str1752[sizeof("ininscriptionalpahlavi")]; + char uniname2ctype_pool_str1753[sizeof("lyci")]; char uniname2ctype_pool_str1757[sizeof("ininscriptionalparthian")]; char uniname2ctype_pool_str1766[sizeof("grbase")]; + char uniname2ctype_pool_str1768[sizeof("lycian")]; char uniname2ctype_pool_str1769[sizeof("inbatak")]; char uniname2ctype_pool_str1776[sizeof("cprt")]; - char uniname2ctype_pool_str1780[sizeof("cwcf")]; - char uniname2ctype_pool_str1788[sizeof("cuneiform")]; - char uniname2ctype_pool_str1791[sizeof("term")]; + char uniname2ctype_pool_str1779[sizeof("ugar")]; + char uniname2ctype_pool_str1788[sizeof("mymr")]; + char uniname2ctype_pool_str1793[sizeof("myanmar")]; + char uniname2ctype_pool_str1794[sizeof("deva")]; char uniname2ctype_pool_str1806[sizeof("intibetan")]; char uniname2ctype_pool_str1810[sizeof("intags")]; char uniname2ctype_pool_str1811[sizeof("asciihexdigit")]; + char uniname2ctype_pool_str1812[sizeof("devanagari")]; char uniname2ctype_pool_str1813[sizeof("sentenceterminal")]; - char uniname2ctype_pool_str1816[sizeof("inmayannumerals")]; + char uniname2ctype_pool_str1816[sizeof("defaultignorablecodepoint")]; + char uniname2ctype_pool_str1817[sizeof("digit")]; + char uniname2ctype_pool_str1818[sizeof("term")]; char uniname2ctype_pool_str1821[sizeof("nand")]; - char uniname2ctype_pool_str1825[sizeof("patsyn")]; - char uniname2ctype_pool_str1826[sizeof("hatran")]; + char uniname2ctype_pool_str1822[sizeof("hatran")]; char uniname2ctype_pool_str1828[sizeof("inblockelements")]; char uniname2ctype_pool_str1838[sizeof("inornamentaldingbats")]; char uniname2ctype_pool_str1842[sizeof("innumberforms")]; - char uniname2ctype_pool_str1843[sizeof("oldpersian")]; - char uniname2ctype_pool_str1846[sizeof("inshavian")]; + char uniname2ctype_pool_str1845[sizeof("oidc")]; char uniname2ctype_pool_str1848[sizeof("bopo")]; - char uniname2ctype_pool_str1861[sizeof("hatr")]; + char uniname2ctype_pool_str1850[sizeof("hex")]; + char uniname2ctype_pool_str1855[sizeof("ext")]; + char uniname2ctype_pool_str1857[sizeof("hatr")]; char uniname2ctype_pool_str1866[sizeof("caseignorable")]; char uniname2ctype_pool_str1871[sizeof("inoldpersian")]; - char uniname2ctype_pool_str1878[sizeof("modifierletter")]; - char uniname2ctype_pool_str1881[sizeof("cwu")]; - char uniname2ctype_pool_str1891[sizeof("lydi")]; - char uniname2ctype_pool_str1892[sizeof("inbyzantinemusicalsymbols")]; + char uniname2ctype_pool_str1873[sizeof("inshavian")]; + char uniname2ctype_pool_str1876[sizeof("inbyzantinemusicalsymbols")]; + char uniname2ctype_pool_str1879[sizeof("xposixpunct")]; + char uniname2ctype_pool_str1888[sizeof("inelymaic")]; + char uniname2ctype_pool_str1889[sizeof("insoyombo")]; char uniname2ctype_pool_str1896[sizeof("ingeometricshapesextended")]; + char uniname2ctype_pool_str1902[sizeof("incjkcompatibility")]; char uniname2ctype_pool_str1904[sizeof("inmyanmarextendedb")]; char uniname2ctype_pool_str1905[sizeof("innushu")]; - char uniname2ctype_pool_str1906[sizeof("lydian")]; - char uniname2ctype_pool_str1911[sizeof("inunifiedcanadianaboriginalsyllabics")]; - char uniname2ctype_pool_str1915[sizeof("orkh")]; - char uniname2ctype_pool_str1928[sizeof("inyiradicals")]; + char uniname2ctype_pool_str1913[sizeof("olck")]; + char uniname2ctype_pool_str1924[sizeof("olchiki")]; + char uniname2ctype_pool_str1927[sizeof("cwu")]; char uniname2ctype_pool_str1929[sizeof("inkatakanaphoneticextensions")]; - char uniname2ctype_pool_str1930[sizeof("inethiopicextendeda")]; char uniname2ctype_pool_str1932[sizeof("incoptic")]; + char uniname2ctype_pool_str1935[sizeof("oids")]; char uniname2ctype_pool_str1936[sizeof("inarabicextendeda")]; - char uniname2ctype_pool_str1947[sizeof("oldpermic")]; char uniname2ctype_pool_str1950[sizeof("incjksymbolsandpunctuation")]; - char uniname2ctype_pool_str1951[sizeof("word")]; + char uniname2ctype_pool_str1956[sizeof("olower")]; char uniname2ctype_pool_str1958[sizeof("bopomofo")]; - char uniname2ctype_pool_str1961[sizeof("ogam")]; char uniname2ctype_pool_str1964[sizeof("inlisu")]; char uniname2ctype_pool_str1967[sizeof("inoldpermic")]; char uniname2ctype_pool_str1968[sizeof("innoblock")]; - char uniname2ctype_pool_str1971[sizeof("taiviet")]; + char uniname2ctype_pool_str1976[sizeof("extpict")]; char uniname2ctype_pool_str1985[sizeof("inbraillepatterns")]; char uniname2ctype_pool_str1991[sizeof("alpha")]; char uniname2ctype_pool_str1993[sizeof("inbalinese")]; char uniname2ctype_pool_str1994[sizeof("sorasompeng")]; char uniname2ctype_pool_str1996[sizeof("closepunctuation")]; + char uniname2ctype_pool_str1998[sizeof("taiviet")]; + char uniname2ctype_pool_str2001[sizeof("inphoneticextensions")]; + char uniname2ctype_pool_str2002[sizeof("inmayannumerals")]; char uniname2ctype_pool_str2006[sizeof("inmiscellaneousmathematicalsymbolsb")]; char uniname2ctype_pool_str2010[sizeof("inlepcha")]; + char uniname2ctype_pool_str2011[sizeof("patsyn")]; + char uniname2ctype_pool_str2012[sizeof("inlisusupplement")]; char uniname2ctype_pool_str2014[sizeof("insyriacsupplement")]; - char uniname2ctype_pool_str2016[sizeof("newa")]; char uniname2ctype_pool_str2023[sizeof("spacingmark")]; char uniname2ctype_pool_str2024[sizeof("inpalmyrene")]; - char uniname2ctype_pool_str2033[sizeof("cyrl")]; char uniname2ctype_pool_str2043[sizeof("assigned")]; - char uniname2ctype_pool_str2048[sizeof("mlym")]; - char uniname2ctype_pool_str2055[sizeof("malayalam")]; - char uniname2ctype_pool_str2058[sizeof("ext")]; - char uniname2ctype_pool_str2062[sizeof("newtailue")]; + char uniname2ctype_pool_str2049[sizeof("extender")]; + char uniname2ctype_pool_str2062[sizeof("newa")]; char uniname2ctype_pool_str2070[sizeof("space")]; char uniname2ctype_pool_str2073[sizeof("intelugu")]; + char uniname2ctype_pool_str2077[sizeof("lydi")]; char uniname2ctype_pool_str2078[sizeof("idsb")]; - char uniname2ctype_pool_str2083[sizeof("indevanagari")]; - char uniname2ctype_pool_str2084[sizeof("avestan")]; - char uniname2ctype_pool_str2085[sizeof("cf")]; - char uniname2ctype_pool_str2093[sizeof("palmyrene")]; + char uniname2ctype_pool_str2092[sizeof("lydian")]; char uniname2ctype_pool_str2095[sizeof("inethiopicsupplement")]; - char uniname2ctype_pool_str2097[sizeof("soyo")]; - char uniname2ctype_pool_str2098[sizeof("xposixpunct")]; - char uniname2ctype_pool_str2102[sizeof("pf")]; char uniname2ctype_pool_str2103[sizeof("sarb")]; - char uniname2ctype_pool_str2109[sizeof("zanabazarsquare")]; - char uniname2ctype_pool_str2110[sizeof("ugaritic")]; - char uniname2ctype_pool_str2112[sizeof("osge")]; - char uniname2ctype_pool_str2114[sizeof("java")]; + char uniname2ctype_pool_str2107[sizeof("zanabazarsquare")]; + char uniname2ctype_pool_str2108[sizeof("newtailue")]; + char uniname2ctype_pool_str2110[sizeof("indevanagari")]; + char uniname2ctype_pool_str2111[sizeof("avestan")]; + char uniname2ctype_pool_str2114[sizeof("inyiradicals")]; char uniname2ctype_pool_str2117[sizeof("sharada")]; - char uniname2ctype_pool_str2119[sizeof("dogra")]; + char uniname2ctype_pool_str2118[sizeof("inphoneticextensionssupplement")]; + char uniname2ctype_pool_str2122[sizeof("deprecated")]; char uniname2ctype_pool_str2135[sizeof("bugi")]; - char uniname2ctype_pool_str2137[sizeof("meroitichieroglyphs")]; + char uniname2ctype_pool_str2137[sizeof("word")]; + char uniname2ctype_pool_str2141[sizeof("java")]; char uniname2ctype_pool_str2145[sizeof("separator")]; char uniname2ctype_pool_str2146[sizeof("ingeorgiansupplement")]; char uniname2ctype_pool_str2149[sizeof("sogd")]; - char uniname2ctype_pool_str2150[sizeof("tale")]; - char uniname2ctype_pool_str2153[sizeof("inunifiedcanadianaboriginalsyllabicsextended")]; - char uniname2ctype_pool_str2161[sizeof("terminalpunctuation")]; + char uniname2ctype_pool_str2156[sizeof("ugaritic")]; + char uniname2ctype_pool_str2162[sizeof("inethiopicextended")]; char uniname2ctype_pool_str2165[sizeof("shrd")]; char uniname2ctype_pool_str2166[sizeof("graph")]; - char uniname2ctype_pool_str2167[sizeof("olditalic")]; - char uniname2ctype_pool_str2170[sizeof("dogr")]; - char uniname2ctype_pool_str2173[sizeof("gujr")]; + char uniname2ctype_pool_str2169[sizeof("gujr")]; + char uniname2ctype_pool_str2177[sizeof("tale")]; + char uniname2ctype_pool_str2178[sizeof("gujarati")]; char uniname2ctype_pool_str2181[sizeof("phag")]; - char uniname2ctype_pool_str2182[sizeof("gujarati")]; + char uniname2ctype_pool_str2188[sizeof("terminalpunctuation")]; char uniname2ctype_pool_str2195[sizeof("inhanguljamo")]; - char uniname2ctype_pool_str2199[sizeof("javanese")]; - char uniname2ctype_pool_str2201[sizeof("taml")]; - char uniname2ctype_pool_str2204[sizeof("inphoneticextensions")]; char uniname2ctype_pool_str2207[sizeof("siddham")]; + char uniname2ctype_pool_str2213[sizeof("ingeorgianextended")]; char uniname2ctype_pool_str2217[sizeof("buginese")]; char uniname2ctype_pool_str2218[sizeof("inmongoliansupplement")]; - char uniname2ctype_pool_str2222[sizeof("invariationselectors")]; + char uniname2ctype_pool_str2219[sizeof("cyrl")]; char uniname2ctype_pool_str2224[sizeof("inhanguljamoextendeda")]; - char uniname2ctype_pool_str2225[sizeof("inverticalforms")]; - char uniname2ctype_pool_str2228[sizeof("syrc")]; + char uniname2ctype_pool_str2226[sizeof("javanese")]; + char uniname2ctype_pool_str2228[sizeof("taml")]; char uniname2ctype_pool_str2229[sizeof("number")]; + char uniname2ctype_pool_str2230[sizeof("incyrillicextendedb")]; + char uniname2ctype_pool_str2234[sizeof("mlym")]; char uniname2ctype_pool_str2235[sizeof("incopticepactnumbers")]; - char uniname2ctype_pool_str2238[sizeof("avst")]; + char uniname2ctype_pool_str2241[sizeof("malayalam")]; char uniname2ctype_pool_str2244[sizeof("inbamum")]; char uniname2ctype_pool_str2247[sizeof("nd")]; char uniname2ctype_pool_str2248[sizeof("insuttonsignwriting")]; - char uniname2ctype_pool_str2252[sizeof("extender")]; - char uniname2ctype_pool_str2258[sizeof("intaiviet")]; - char uniname2ctype_pool_str2260[sizeof("hex")]; - char uniname2ctype_pool_str2268[sizeof("incjkunifiedideographsextensionf")]; - char uniname2ctype_pool_str2271[sizeof("other")]; - char uniname2ctype_pool_str2272[sizeof("otheridcontinue")]; - char uniname2ctype_pool_str2278[sizeof("shaw")]; - char uniname2ctype_pool_str2282[sizeof("dash")]; - char uniname2ctype_pool_str2285[sizeof("othernumber")]; - char uniname2ctype_pool_str2294[sizeof("orya")]; - char uniname2ctype_pool_str2302[sizeof("invedicextensions")]; - char uniname2ctype_pool_str2305[sizeof("sgnw")]; + char uniname2ctype_pool_str2249[sizeof("invariationselectors")]; + char uniname2ctype_pool_str2252[sizeof("inverticalforms")]; + char uniname2ctype_pool_str2265[sizeof("avst")]; + char uniname2ctype_pool_str2279[sizeof("palmyrene")]; + char uniname2ctype_pool_str2283[sizeof("soyo")]; + char uniname2ctype_pool_str2285[sizeof("intaiviet")]; char uniname2ctype_pool_str2312[sizeof("caucasianalbanian")]; char uniname2ctype_pool_str2315[sizeof("inmathematicalalphanumericsymbols")]; - char uniname2ctype_pool_str2321[sizeof("inphoneticextensionssupplement")]; - char uniname2ctype_pool_str2339[sizeof("invariationselectorssupplement")]; + char uniname2ctype_pool_str2316[sizeof("incjkunifiedideographsextensiong")]; + char uniname2ctype_pool_str2323[sizeof("meroitichieroglyphs")]; + char uniname2ctype_pool_str2324[sizeof("shaw")]; + char uniname2ctype_pool_str2329[sizeof("invedicextensions")]; + char uniname2ctype_pool_str2333[sizeof("oldpersian")]; char uniname2ctype_pool_str2343[sizeof("induployan")]; - char uniname2ctype_pool_str2344[sizeof("syriac")]; - char uniname2ctype_pool_str2357[sizeof("oalpha")]; + char uniname2ctype_pool_str2351[sizeof("sgnw")]; char uniname2ctype_pool_str2361[sizeof("innyiakengpuachuehmong")]; char uniname2ctype_pool_str2364[sizeof("incombiningdiacriticalmarks")]; - char uniname2ctype_pool_str2365[sizeof("inethiopicextended")]; + char uniname2ctype_pool_str2366[sizeof("invariationselectorssupplement")]; char uniname2ctype_pool_str2373[sizeof("nl")]; char uniname2ctype_pool_str2374[sizeof("incombiningdiacriticalmarksforsymbols")]; - char uniname2ctype_pool_str2375[sizeof("khudawadi")]; - char uniname2ctype_pool_str2378[sizeof("otheralphabetic")]; - char uniname2ctype_pool_str2389[sizeof("oldhungarian")]; - char uniname2ctype_pool_str2396[sizeof("incurrencysymbols")]; char uniname2ctype_pool_str2397[sizeof("incjkradicalssupplement")]; char uniname2ctype_pool_str2398[sizeof("inglagolitic")]; - char uniname2ctype_pool_str2415[sizeof("intifinagh")]; - char uniname2ctype_pool_str2416[sizeof("ingeorgianextended")]; + char uniname2ctype_pool_str2405[sizeof("orkh")]; + char uniname2ctype_pool_str2414[sizeof("syrc")]; + char uniname2ctype_pool_str2421[sizeof("khudawadi")]; char uniname2ctype_pool_str2427[sizeof("surrogate")]; - char uniname2ctype_pool_str2433[sizeof("incyrillicextendedb")]; + char uniname2ctype_pool_str2431[sizeof("extendedpictographic")]; + char uniname2ctype_pool_str2437[sizeof("oldpermic")]; char uniname2ctype_pool_str2440[sizeof("ethi")]; - char uniname2ctype_pool_str2451[sizeof("titlecaseletter")]; + char uniname2ctype_pool_str2451[sizeof("ogam")]; char uniname2ctype_pool_str2454[sizeof("rohg")]; - char uniname2ctype_pool_str2458[sizeof("inmeroiticcursive")]; char uniname2ctype_pool_str2460[sizeof("idstrinaryoperator")]; char uniname2ctype_pool_str2470[sizeof("inphagspa")]; char uniname2ctype_pool_str2475[sizeof("lepcha")]; + char uniname2ctype_pool_str2478[sizeof("titlecaseletter")]; char uniname2ctype_pool_str2479[sizeof("intagalog")]; - char uniname2ctype_pool_str2480[sizeof("mathsymbol")]; char uniname2ctype_pool_str2481[sizeof("incombiningdiacriticalmarkssupplement")]; + char uniname2ctype_pool_str2485[sizeof("inmeroiticcursive")]; char uniname2ctype_pool_str2506[sizeof("inbrahmi")]; char uniname2ctype_pool_str2513[sizeof("insymbolsandpictographsextendeda")]; - char uniname2ctype_pool_str2519[sizeof("inlinearbsyllabary")]; - char uniname2ctype_pool_str2529[sizeof("oldturkic")]; + char uniname2ctype_pool_str2530[sizeof("syriac")]; + char uniname2ctype_pool_str2533[sizeof("modifiersymbol")]; char uniname2ctype_pool_str2534[sizeof("inbengali")]; - char uniname2ctype_pool_str2540[sizeof("wancho")]; - char uniname2ctype_pool_str2542[sizeof("osmanya")]; + char uniname2ctype_pool_str2536[sizeof("inhalfwidthandfullwidthforms")]; char uniname2ctype_pool_str2548[sizeof("buhd")]; - char uniname2ctype_pool_str2552[sizeof("insmallformvariants")]; - char uniname2ctype_pool_str2561[sizeof("indevanagariextended")]; - char uniname2ctype_pool_str2562[sizeof("softdotted")]; + char uniname2ctype_pool_str2562[sizeof("mahj")]; char uniname2ctype_pool_str2564[sizeof("inbuginese")]; - char uniname2ctype_pool_str2566[sizeof("mahj")]; char uniname2ctype_pool_str2567[sizeof("inlatin1supplement")]; char uniname2ctype_pool_str2570[sizeof("ingothic")]; - char uniname2ctype_pool_str2575[sizeof("mahajani")]; - char uniname2ctype_pool_str2576[sizeof("hang")]; - char uniname2ctype_pool_str2579[sizeof("sylo")]; - char uniname2ctype_pool_str2586[sizeof("warangciti")]; - char uniname2ctype_pool_str2595[sizeof("ingujarati")]; - char uniname2ctype_pool_str2603[sizeof("tirhuta")]; + char uniname2ctype_pool_str2571[sizeof("mahajani")]; + char uniname2ctype_pool_str2572[sizeof("hang")]; + char uniname2ctype_pool_str2576[sizeof("ebase")]; + char uniname2ctype_pool_str2579[sizeof("insmallformvariants")]; + char uniname2ctype_pool_str2582[sizeof("incurrencysymbols")]; + char uniname2ctype_pool_str2588[sizeof("indevanagariextended")]; + char uniname2ctype_pool_str2589[sizeof("divesakuru")]; + char uniname2ctype_pool_str2591[sizeof("ingujarati")]; + char uniname2ctype_pool_str2602[sizeof("osge")]; char uniname2ctype_pool_str2606[sizeof("incombiningdiacriticalmarksextended")]; char uniname2ctype_pool_str2609[sizeof("spaceseparator")]; - char uniname2ctype_pool_str2614[sizeof("ingunjalagondi")]; - char uniname2ctype_pool_str2624[sizeof("wcho")]; - char uniname2ctype_pool_str2631[sizeof("hiragana")]; - char uniname2ctype_pool_str2634[sizeof("extendedpictographic")]; - char uniname2ctype_pool_str2643[sizeof("inrejang")]; - char uniname2ctype_pool_str2644[sizeof("inottomansiyaqnumbers")]; + char uniname2ctype_pool_str2610[sizeof("ingunjalagondi")]; + char uniname2ctype_pool_str2611[sizeof("dupl")]; + char uniname2ctype_pool_str2627[sizeof("hiragana")]; + char uniname2ctype_pool_str2630[sizeof("tirhuta")]; + char uniname2ctype_pool_str2639[sizeof("inrejang")]; + char uniname2ctype_pool_str2644[sizeof("dashpunctuation")]; char uniname2ctype_pool_str2648[sizeof("nchar")]; - char uniname2ctype_pool_str2650[sizeof("cyrillic")]; - char uniname2ctype_pool_str2653[sizeof("khoj")]; + char uniname2ctype_pool_str2649[sizeof("khoj")]; char uniname2ctype_pool_str2656[sizeof("inlimbu")]; - char uniname2ctype_pool_str2663[sizeof("hmng")]; - char uniname2ctype_pool_str2665[sizeof("thaa")]; - char uniname2ctype_pool_str2668[sizeof("thai")]; + char uniname2ctype_pool_str2657[sizeof("olditalic")]; + char uniname2ctype_pool_str2659[sizeof("hmng")]; + char uniname2ctype_pool_str2666[sizeof("mathsymbol")]; char uniname2ctype_pool_str2670[sizeof("incjkunifiedideographsextensionb")]; - char uniname2ctype_pool_str2673[sizeof("deva")]; - char uniname2ctype_pool_str2676[sizeof("thaana")]; char uniname2ctype_pool_str2688[sizeof("phagspa")]; - char uniname2ctype_pool_str2691[sizeof("devanagari")]; - char uniname2ctype_pool_str2692[sizeof("tang")]; + char uniname2ctype_pool_str2692[sizeof("thaa")]; char uniname2ctype_pool_str2694[sizeof("currencysymbol")]; - char uniname2ctype_pool_str2698[sizeof("tagbanwa")]; - char uniname2ctype_pool_str2701[sizeof("inenclosedcjklettersandmonths")]; - char uniname2ctype_pool_str2702[sizeof("tamil")]; - char uniname2ctype_pool_str2721[sizeof("tirh")]; - char uniname2ctype_pool_str2723[sizeof("digit")]; - char uniname2ctype_pool_str2732[sizeof("talu")]; - char uniname2ctype_pool_str2747[sizeof("zp")]; + char uniname2ctype_pool_str2695[sizeof("thai")]; + char uniname2ctype_pool_str2697[sizeof("inenclosedcjklettersandmonths")]; + char uniname2ctype_pool_str2703[sizeof("thaana")]; + char uniname2ctype_pool_str2704[sizeof("hanifirohingya")]; + char uniname2ctype_pool_str2705[sizeof("inlinearbsyllabary")]; + char uniname2ctype_pool_str2719[sizeof("tang")]; + char uniname2ctype_pool_str2725[sizeof("tagbanwa")]; + char uniname2ctype_pool_str2726[sizeof("wancho")]; + char uniname2ctype_pool_str2729[sizeof("tamil")]; + char uniname2ctype_pool_str2745[sizeof("zp")]; + char uniname2ctype_pool_str2748[sizeof("tirh")]; char uniname2ctype_pool_str2750[sizeof("inpaucinhau")]; - char uniname2ctype_pool_str2760[sizeof("taitham")]; - char uniname2ctype_pool_str2764[sizeof("otherlowercase")]; - char uniname2ctype_pool_str2768[sizeof("telu")]; + char uniname2ctype_pool_str2759[sizeof("talu")]; + char uniname2ctype_pool_str2761[sizeof("other")]; + char uniname2ctype_pool_str2762[sizeof("otheridcontinue")]; + char uniname2ctype_pool_str2765[sizeof("sylo")]; char uniname2ctype_pool_str2769[sizeof("inaegeannumbers")]; - char uniname2ctype_pool_str2777[sizeof("otherletter")]; - char uniname2ctype_pool_str2780[sizeof("whitespace")]; + char uniname2ctype_pool_str2772[sizeof("warangciti")]; + char uniname2ctype_pool_str2775[sizeof("othernumber")]; + char uniname2ctype_pool_str2787[sizeof("taitham")]; char uniname2ctype_pool_str2793[sizeof("nonspacingmark")]; + char uniname2ctype_pool_str2795[sizeof("telu")]; + char uniname2ctype_pool_str2810[sizeof("wcho")]; char uniname2ctype_pool_str2816[sizeof("graphemeclusterbreak=spacingmark")]; char uniname2ctype_pool_str2821[sizeof("inletterlikesymbols")]; + char uniname2ctype_pool_str2824[sizeof("tifinagh")]; + char uniname2ctype_pool_str2830[sizeof("inottomansiyaqnumbers")]; char uniname2ctype_pool_str2834[sizeof("intagbanwa")]; - char uniname2ctype_pool_str2841[sizeof("oldsogdian")]; - char uniname2ctype_pool_str2848[sizeof("otheridstart")]; + char uniname2ctype_pool_str2835[sizeof("tfng")]; + char uniname2ctype_pool_str2836[sizeof("cyrillic")]; + char uniname2ctype_pool_str2847[sizeof("oalpha")]; char uniname2ctype_pool_str2852[sizeof("graphemeclusterbreak=cr")]; char uniname2ctype_pool_str2855[sizeof("narb")]; char uniname2ctype_pool_str2856[sizeof("changeswhencasemapped")]; char uniname2ctype_pool_str2859[sizeof("inbopomofo")]; - char uniname2ctype_pool_str2862[sizeof("tangut")]; char uniname2ctype_pool_str2867[sizeof("graphemeclusterbreak=regionalindicator")]; + char uniname2ctype_pool_str2868[sizeof("otheralphabetic")]; char uniname2ctype_pool_str2871[sizeof("noncharactercodepoint")]; - char uniname2ctype_pool_str2883[sizeof("otheruppercase")]; - char uniname2ctype_pool_str2885[sizeof("rjng")]; - char uniname2ctype_pool_str2886[sizeof("sylotinagri")]; + char uniname2ctype_pool_str2879[sizeof("oldhungarian")]; + char uniname2ctype_pool_str2881[sizeof("rjng")]; + char uniname2ctype_pool_str2885[sizeof("changeswhencasefolded")]; + char uniname2ctype_pool_str2886[sizeof("insymbolsforlegacycomputing")]; + char uniname2ctype_pool_str2889[sizeof("tangut")]; + char uniname2ctype_pool_str2899[sizeof("dep")]; char uniname2ctype_pool_str2904[sizeof("inhangulsyllables")]; char uniname2ctype_pool_str2905[sizeof("emojipresentation")]; - char uniname2ctype_pool_str2906[sizeof("inindicsiyaqnumbers")]; + char uniname2ctype_pool_str2907[sizeof("epres")]; char uniname2ctype_pool_str2909[sizeof("inbassavah")]; - char uniname2ctype_pool_str2912[sizeof("ogrext")]; - char uniname2ctype_pool_str2926[sizeof("othersymbol")]; - char uniname2ctype_pool_str2938[sizeof("oupper")]; + char uniname2ctype_pool_str2915[sizeof("graphemeclusterbreak=lf")]; char uniname2ctype_pool_str2941[sizeof("inbuhid")]; - char uniname2ctype_pool_str2963[sizeof("hmnp")]; + char uniname2ctype_pool_str2959[sizeof("hmnp")]; char uniname2ctype_pool_str2964[sizeof("inpsalterpahlavi")]; + char uniname2ctype_pool_str2966[sizeof("whitespace")]; char uniname2ctype_pool_str2967[sizeof("finalpunctuation")]; + char uniname2ctype_pool_str2970[sizeof("orya")]; char uniname2ctype_pool_str2980[sizeof("phlp")]; char uniname2ctype_pool_str2984[sizeof("inbamumsupplement")]; char uniname2ctype_pool_str2986[sizeof("buhid")]; char uniname2ctype_pool_str2987[sizeof("paragraphseparator")]; char uniname2ctype_pool_str2988[sizeof("inalphabeticpresentationforms")]; - char uniname2ctype_pool_str2993[sizeof("omath")]; - char uniname2ctype_pool_str3000[sizeof("any")]; char uniname2ctype_pool_str3001[sizeof("elba")]; char uniname2ctype_pool_str3002[sizeof("changeswhentitlecased")]; char uniname2ctype_pool_str3005[sizeof("incombininghalfmarks")]; char uniname2ctype_pool_str3006[sizeof("intangutcomponents")]; - char uniname2ctype_pool_str3012[sizeof("hebr")]; - char uniname2ctype_pool_str3028[sizeof("deprecated")]; + char uniname2ctype_pool_str3008[sizeof("hebr")]; + char uniname2ctype_pool_str3019[sizeof("oldturkic")]; char uniname2ctype_pool_str3045[sizeof("inarabicmathematicalalphabeticsymbols")]; - char uniname2ctype_pool_str3055[sizeof("inprivateusearea")]; - char uniname2ctype_pool_str3089[sizeof("kayahli")]; - char uniname2ctype_pool_str3098[sizeof("inplayingcards")]; + char uniname2ctype_pool_str3053[sizeof("khitansmallscript")]; + char uniname2ctype_pool_str3072[sizeof("sylotinagri")]; + char uniname2ctype_pool_str3079[sizeof("hexdigit")]; + char uniname2ctype_pool_str3082[sizeof("inprivateusearea")]; char uniname2ctype_pool_str3099[sizeof("inarabicpresentationformsb")]; - char uniname2ctype_pool_str3100[sizeof("ogham")]; - char uniname2ctype_pool_str3101[sizeof("elym")]; char uniname2ctype_pool_str3107[sizeof("graphemeclusterbreak=t")]; char uniname2ctype_pool_str3109[sizeof("graphemeclusterbreak=lvt")]; char uniname2ctype_pool_str3111[sizeof("nbat")]; + char uniname2ctype_pool_str3122[sizeof("hangul")]; char uniname2ctype_pool_str3125[sizeof("nabataean")]; - char uniname2ctype_pool_str3126[sizeof("hangul")]; - char uniname2ctype_pool_str3134[sizeof("elymaic")]; - char uniname2ctype_pool_str3158[sizeof("inhebrew")]; - char uniname2ctype_pool_str3165[sizeof("injavanese")]; - char uniname2ctype_pool_str3169[sizeof("symbol")]; + char uniname2ctype_pool_str3142[sizeof("intangutsupplement")]; char uniname2ctype_pool_str3176[sizeof("inmathematicaloperators")]; char uniname2ctype_pool_str3180[sizeof("inarabicsupplement")]; - char uniname2ctype_pool_str3185[sizeof("cypriot")]; - char uniname2ctype_pool_str3194[sizeof("hung")]; - char uniname2ctype_pool_str3205[sizeof("wspace")]; + char uniname2ctype_pool_str3188[sizeof("injavanese")]; + char uniname2ctype_pool_str3190[sizeof("hung")]; + char uniname2ctype_pool_str3199[sizeof("ogrext")]; + char uniname2ctype_pool_str3204[sizeof("inhebrew")]; char uniname2ctype_pool_str3209[sizeof("changeswhenlowercased")]; char uniname2ctype_pool_str3215[sizeof("elbasan")]; - char uniname2ctype_pool_str3218[sizeof("hluw")]; + char uniname2ctype_pool_str3218[sizeof("osmanya")]; char uniname2ctype_pool_str3237[sizeof("insuperscriptsandsubscripts")]; char uniname2ctype_pool_str3239[sizeof("graphemeclusterbreak=extend")]; char uniname2ctype_pool_str3240[sizeof("graphemeclusterbreak=prepend")]; char uniname2ctype_pool_str3248[sizeof("nshu")]; - char uniname2ctype_pool_str3254[sizeof("oldnortharabian")]; - char uniname2ctype_pool_str3266[sizeof("inyijinghexagramsymbols")]; - char uniname2ctype_pool_str3286[sizeof("hexdigit")]; + char uniname2ctype_pool_str3254[sizeof("otherlowercase")]; + char uniname2ctype_pool_str3260[sizeof("hluw")]; + char uniname2ctype_pool_str3267[sizeof("otherletter")]; + char uniname2ctype_pool_str3275[sizeof("kayahli")]; + char uniname2ctype_pool_str3284[sizeof("inplayingcards")]; + char uniname2ctype_pool_str3287[sizeof("elym")]; char uniname2ctype_pool_str3297[sizeof("graphemeclusterbreak=l")]; char uniname2ctype_pool_str3303[sizeof("graphemeclusterbreak=control")]; - char uniname2ctype_pool_str3309[sizeof("bassavah")]; - char uniname2ctype_pool_str3317[sizeof("otherdefaultignorablecodepoint")]; + char uniname2ctype_pool_str3320[sizeof("elymaic")]; char uniname2ctype_pool_str3328[sizeof("changeswhenuppercased")]; char uniname2ctype_pool_str3329[sizeof("inalchemicalsymbols")]; + char uniname2ctype_pool_str3331[sizeof("oldsogdian")]; + char uniname2ctype_pool_str3336[sizeof("bassavah")]; + char uniname2ctype_pool_str3338[sizeof("otheridstart")]; char uniname2ctype_pool_str3348[sizeof("insupplementalarrowsa")]; - char uniname2ctype_pool_str3349[sizeof("inyisyllables")]; - char uniname2ctype_pool_str3351[sizeof("tibt")]; - char uniname2ctype_pool_str3360[sizeof("othermath")]; - char uniname2ctype_pool_str3363[sizeof("tibetan")]; - char uniname2ctype_pool_str3365[sizeof("inmahjongtiles")]; - char uniname2ctype_pool_str3433[sizeof("signwriting")]; + char uniname2ctype_pool_str3355[sizeof("symbol")]; + char uniname2ctype_pool_str3361[sizeof("inmahjongtiles")]; + char uniname2ctype_pool_str3371[sizeof("cypriot")]; + char uniname2ctype_pool_str3372[sizeof("any")]; + char uniname2ctype_pool_str3373[sizeof("otheruppercase")]; + char uniname2ctype_pool_str3376[sizeof("indivesakuru")]; + char uniname2ctype_pool_str3378[sizeof("tibt")]; + char uniname2ctype_pool_str3390[sizeof("tibetan")]; + char uniname2ctype_pool_str3391[sizeof("wspace")]; + char uniname2ctype_pool_str3396[sizeof("inindicsiyaqnumbers")]; + char uniname2ctype_pool_str3416[sizeof("othersymbol")]; + char uniname2ctype_pool_str3428[sizeof("oupper")]; char uniname2ctype_pool_str3436[sizeof("nushu")]; - char uniname2ctype_pool_str3439[sizeof("modifiersymbol")]; - char uniname2ctype_pool_str3442[sizeof("inhalfwidthandfullwidthforms")]; - char uniname2ctype_pool_str3458[sizeof("upper")]; + char uniname2ctype_pool_str3448[sizeof("inyijinghexagramsymbols")]; char uniname2ctype_pool_str3460[sizeof("insupplementalarrowsc")]; + char uniname2ctype_pool_str3479[sizeof("signwriting")]; + char uniname2ctype_pool_str3483[sizeof("omath")]; + char uniname2ctype_pool_str3504[sizeof("upper")]; char uniname2ctype_pool_str3511[sizeof("insupplementalmathematicaloperators")]; - char uniname2ctype_pool_str3512[sizeof("incypriotsyllabary")]; - char uniname2ctype_pool_str3517[sizeof("dupl")]; - char uniname2ctype_pool_str3531[sizeof("tavt")]; char uniname2ctype_pool_str3532[sizeof("inpahawhhmong")]; char uniname2ctype_pool_str3533[sizeof("alphabetic")]; - char uniname2ctype_pool_str3550[sizeof("dashpunctuation")]; - char uniname2ctype_pool_str3558[sizeof("uppercase")]; - char uniname2ctype_pool_str3613[sizeof("soyombo")]; - char uniname2ctype_pool_str3614[sizeof("hanifirohingya")]; - char uniname2ctype_pool_str3616[sizeof("otherpunctuation")]; - char uniname2ctype_pool_str3628[sizeof("defaultignorablecodepoint")]; + char uniname2ctype_pool_str3585[sizeof("tavt")]; + char uniname2ctype_pool_str3590[sizeof("ogham")]; + char uniname2ctype_pool_str3604[sizeof("uppercase")]; char uniname2ctype_pool_str3648[sizeof("inhanguljamoextendedb")]; char uniname2ctype_pool_str3664[sizeof("aghb")]; - char uniname2ctype_pool_str3703[sizeof("tifinagh")]; + char uniname2ctype_pool_str3698[sizeof("incypriotsyllabary")]; char uniname2ctype_pool_str3705[sizeof("inlatinextendedb")]; - char uniname2ctype_pool_str3714[sizeof("tfng")]; + char uniname2ctype_pool_str3721[sizeof("inyisyllables")]; + char uniname2ctype_pool_str3744[sizeof("oldnortharabian")]; + char uniname2ctype_pool_str3765[sizeof("duployan")]; char uniname2ctype_pool_str3766[sizeof("inhighprivateusesurrogates")]; - char uniname2ctype_pool_str3791[sizeof("changeswhencasefolded")]; - char uniname2ctype_pool_str3805[sizeof("dep")]; - char uniname2ctype_pool_str3819[sizeof("oldsoutharabian")]; - char uniname2ctype_pool_str3821[sizeof("graphemeclusterbreak=lf")]; - char uniname2ctype_pool_str3842[sizeof("pahawhhmong")]; - char uniname2ctype_pool_str3845[sizeof("unifiedideograph")]; - char uniname2ctype_pool_str3891[sizeof("uppercaseletter")]; + char uniname2ctype_pool_str3799[sizeof("soyombo")]; + char uniname2ctype_pool_str3807[sizeof("otherdefaultignorablecodepoint")]; + char uniname2ctype_pool_str3850[sizeof("othermath")]; + char uniname2ctype_pool_str3884[sizeof("inbopomofoextended")]; + char uniname2ctype_pool_str3888[sizeof("pahawhhmong")]; + char uniname2ctype_pool_str3891[sizeof("unifiedideograph")]; char uniname2ctype_pool_str3924[sizeof("insupplementalpunctuation")]; + char uniname2ctype_pool_str3937[sizeof("uppercaseletter")]; char uniname2ctype_pool_str3942[sizeof("ethiopic")]; + char uniname2ctype_pool_str3949[sizeof("ecomp")]; char uniname2ctype_pool_str3976[sizeof("inglagoliticsupplement")]; - char uniname2ctype_pool_str3995[sizeof("rejang")]; - char uniname2ctype_pool_str4087[sizeof("inbopomofoextended")]; - char uniname2ctype_pool_str4109[sizeof("tagb")]; - char uniname2ctype_pool_str4137[sizeof("othergraphemeextend")]; - char uniname2ctype_pool_str4162[sizeof("inegyptianhieroglyphs")]; - char uniname2ctype_pool_str4175[sizeof("inegyptianhieroglyphformatcontrols")]; - char uniname2ctype_pool_str4203[sizeof("hebrew")]; - char uniname2ctype_pool_str4254[sizeof("tglg")]; - char uniname2ctype_pool_str4276[sizeof("tagalog")]; - char uniname2ctype_pool_str4291[sizeof("graphemeclusterbreak=zwj")]; - char uniname2ctype_pool_str4321[sizeof("zyyy")]; - char uniname2ctype_pool_str4360[sizeof("hyphen")]; - char uniname2ctype_pool_str4397[sizeof("inboxdrawing")]; - char uniname2ctype_pool_str4405[sizeof("graphemeclusterbreak=v")]; - char uniname2ctype_pool_str4406[sizeof("graphemeclusterbreak=lv")]; - char uniname2ctype_pool_str4460[sizeof("telugu")]; - char uniname2ctype_pool_str4485[sizeof("duployan")]; - char uniname2ctype_pool_str4528[sizeof("openpunctuation")]; + char uniname2ctype_pool_str3991[sizeof("rejang")]; + char uniname2ctype_pool_str4106[sizeof("otherpunctuation")]; + char uniname2ctype_pool_str4136[sizeof("tagb")]; + char uniname2ctype_pool_str4194[sizeof("inboxdrawing")]; + char uniname2ctype_pool_str4281[sizeof("tglg")]; + char uniname2ctype_pool_str4287[sizeof("graphemeclusterbreak=zwj")]; + char uniname2ctype_pool_str4291[sizeof("hebrew")]; + char uniname2ctype_pool_str4303[sizeof("tagalog")]; + char uniname2ctype_pool_str4309[sizeof("oldsoutharabian")]; + char uniname2ctype_pool_str4348[sizeof("inegyptianhieroglyphs")]; + char uniname2ctype_pool_str4361[sizeof("inegyptianhieroglyphformatcontrols")]; + char uniname2ctype_pool_str4432[sizeof("graphemeclusterbreak=v")]; + char uniname2ctype_pool_str4433[sizeof("graphemeclusterbreak=lv")]; + char uniname2ctype_pool_str4487[sizeof("telugu")]; + char uniname2ctype_pool_str4542[sizeof("hyphen")]; + char uniname2ctype_pool_str4627[sizeof("othergraphemeextend")]; char uniname2ctype_pool_str4674[sizeof("insupplementaryprivateuseareaa")]; char uniname2ctype_pool_str4683[sizeof("inhighsurrogates")]; char uniname2ctype_pool_str4772[sizeof("insupplementalarrowsb")]; - char uniname2ctype_pool_str4948[sizeof("insupplementalsymbolsandpictographs")]; - char uniname2ctype_pool_str4955[sizeof("egyp")]; + char uniname2ctype_pool_str4877[sizeof("zyyy")]; char uniname2ctype_pool_str4986[sizeof("inhangulcompatibilityjamo")]; - char uniname2ctype_pool_str5114[sizeof("nyiakengpuachuehmong")]; - char uniname2ctype_pool_str5608[sizeof("egyptianhieroglyphs")]; + char uniname2ctype_pool_str5018[sizeof("openpunctuation")]; + char uniname2ctype_pool_str5134[sizeof("insupplementalsymbolsandpictographs")]; + char uniname2ctype_pool_str5141[sizeof("egyp")]; + char uniname2ctype_pool_str5300[sizeof("nyiakengpuachuehmong")]; + char uniname2ctype_pool_str5980[sizeof("egyptianhieroglyphs")]; char uniname2ctype_pool_str6098[sizeof("insupplementaryprivateuseareab")]; #endif /* USE_UNICODE_PROPERTIES */ }; @@ -39030,10 +40190,11 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = #ifndef USE_UNICODE_PROPERTIES "word", #else /* USE_UNICODE_PROPERTIES */ + "z", "yi", + "zzzz", "yiii", "lana", - "z", "lina", "maka", "mani", @@ -39043,11 +40204,11 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "ci", "lao", "laoo", + "yezi", "inkannada", "cn", "pi", "innko", - "zzzz", "gran", "co", "lineara", @@ -39066,10 +40227,13 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "geor", "greek", "gonm", + "dia", + "di", "mendekikakui", "pe", "mero", "inosmanya", + "diak", "cakm", "inmanichaean", "inmro", @@ -39079,6 +40243,8 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "mandaic", "meeteimayek", "inarmenian", + "vai", + "vaii", "inmyanmar", "inmakasar", "common", @@ -39091,6 +40257,7 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "qaai", "inahom", "merc", + "inchorasmian", "combiningmark", "lc", "perm", @@ -39103,6 +40270,7 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "armn", "incherokee", "prependedconcatenationmark", + "cf", "incuneiform", "inavestan", "inipaextensions", @@ -39110,9 +40278,11 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "armenian", "insharada", "inmarchen", + "pf", "makasar", "masaramgondi", "inarrows", + "diacritic", "incyrillic", "incham", "qmark", @@ -39123,17 +40293,15 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "inmasaramgondi", "inthaana", "latin", + "inzanabazarsquare", "inthai", "lineseparator", "pcm", "inkatakana", "inkaithi", - "inzanabazarsquare", "inscriptionalparthian", "initialpunctuation", "mtei", - "vai", - "vaii", "inkhmersymbols", "insyriac", "intakri", @@ -39143,6 +40311,7 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "prti", "ascii", "cs", + "decimalnumber", "ps", "mand", "privateuse", @@ -39152,26 +40321,28 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "incjkcompatibilityforms", "inkanaextendeda", "incjkcompatibilityideographs", + "yezidi", "brai", "mend", "ideo", "letter", "l", "inmeeteimayek", - "inideographicdescriptioncharacters", "xidcontinue", + "inideographicdescriptioncharacters", "knda", "innandinagari", "kannada", "inmodi", "inlao", "inoldnortharabian", + "xidc", "intransportandmapsymbols", "letternumber", "gothic", + "vs", "inlineara", "inmendekikakui", - "xidc", "mongolian", "inmiscellaneousmathematicalsymbolsa", "inspecials", @@ -39183,23 +40354,28 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "inmedefaidrin", "inchesssymbols", "incjkcompatibilityideographssupplement", + "kits", + "medf", "inadlam", "psalterpahlavi", "incommonindicnumberforms", + "medefaidrin", "lt", - "innewa", + "patternsyntax", + "inshorthandformatcontrols", "sk", "control", "inancientsymbols", "palm", "inlycian", + "xids", "so", "patternwhitespace", - "xids", "inmandaic", "idc", "meroiticcursive", - "inwarangciti", + "innewa", + "dsrt", "sora", "inopticalcharacterrecognition", "inoldsogdian", @@ -39215,18 +40391,18 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "alpha", #else /* USE_UNICODE_PROPERTIES */ "intaitham", - "lower", + "inwarangciti", "joinc", "inoldsoutharabian", "incjkstrokes", "batk", + "deseret", "samr", - "inwancho", "batak", - "vs", "patws", "samaritan", "idsbinaryoperator", + "lower", "pauc", "insmallkanaextension", "sm", @@ -39234,7 +40410,10 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = #endif /* USE_UNICODE_PROPERTIES */ "alnum", #ifdef USE_UNICODE_PROPERTIES + "incyrillicextendeda", "insylotinagri", + "intaixuanjingsymbols", + "inwancho", "inugaritic", "incontrolpictures", "inlinearbideograms", @@ -39243,22 +40422,23 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "ital", "inmodifiertoneletters", "inancientgreekmusicalnotation", - "patternsyntax", "lisu", - "lowercase", - "cwcm", "sc", "bass", "ids", "inlatinextendeda", - "oriya", "intaile", + "cuneiform", "inmiscellaneoussymbols", + "lowercase", + "cwcm", "inmiscellaneoussymbolsandarrows", "incaucasianalbanian", "inmiscellaneoussymbolsandpictographs", "inoldturkic", "insaurashtra", + "incyrillicextendedc", + "cwcf", "idcontinue", "intamil", "inmultani", @@ -39267,31 +40447,26 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "bali", "blank", "idst", + "modifierletter", "inlydian", - "innewtailue", + "xsux", "bengali", "runr", "zl", - "incyrillicextendeda", + "inunifiedcanadianaboriginalsyllabics", "ll", "indeseret", - "intaixuanjingsymbols", "inancientgreeknumbers", "idstart", "inmeeteimayekextensions", "balinese", - "dia", - "di", + "innewtailue", "inspacingmodifierletters", "inearlydynasticcuneiform", "plrd", "canadianaboriginal", "zinh", "sind", - "osage", - "inlatinextendedc", - "uideo", - "incountingrodnumerals", "xidstart", #endif /* USE_UNICODE_PROPERTIES */ "xdigit", @@ -39299,15 +40474,17 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "upper", "ascii", #else /* USE_UNICODE_PROPERTIES */ - "osma", + "inlatinextendedc", + "incountingrodnumerals", "inkhudawadi", "inhanifirohingya", "gong", "ingrantha", "bidic", + "variationselector", "mong", "cased", - "incyrillicextendedc", + "uideo", "inhiragana", "sinhala", "adlm", @@ -39325,7 +40502,6 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "ingeneralpunctuation", "inmahajani", "incyrillicsupplement", - "lowercaseletter", "marchen", "graphemelink", "ingeorgian", @@ -39340,10 +40516,11 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "khar", "inmongolian", "incherokeesupplement", - "diacritic", "manichaean", - "xsux", "inolchiki", + "dogra", + "lowercaseletter", + "inkhitansmallscript", "quotationmark", "adlam", "inethiopic", @@ -39353,47 +40530,41 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "age=12.1", "age=10.0", "age=12.0", + "age=13.0", #endif /* USE_UNICODE_AGE_PROPERTIES */ "casedletter", "ingurmukhi", - "odi", "incjkunifiedideographsextensiona", -#ifdef USE_UNICODE_AGE_PROPERTIES - "age=1.1", -#endif /* USE_UNICODE_AGE_PROPERTIES */ + "inunifiedcanadianaboriginalsyllabicsextended", "lu", #ifdef USE_UNICODE_AGE_PROPERTIES - "age=4.1", - "age=2.1", - "age=4.0", - "age=2.0", + "age=1.1", "age=9.0", + "age=2.1", #endif /* USE_UNICODE_AGE_PROPERTIES */ "intamilsupplement", #ifdef USE_UNICODE_AGE_PROPERTIES - "age=6.1", -#endif /* USE_UNICODE_AGE_PROPERTIES */ - "unknown", -#ifdef USE_UNICODE_AGE_PROPERTIES - "age=6.0", - "age=6.2", + "age=2.0", "age=3.1", "age=8.0", "age=3.0", "age=3.2", -#endif /* USE_UNICODE_AGE_PROPERTIES */ - "cwt", -#ifdef USE_UNICODE_AGE_PROPERTIES + "age=6.1", "age=7.0", + "age=6.0", + "age=6.2", #endif /* USE_UNICODE_AGE_PROPERTIES */ - "unassigned", + "dogr", #ifdef USE_UNICODE_AGE_PROPERTIES - "age=6.3", "age=5.1", + "age=6.3", "age=5.0", "age=5.2", + "age=4.1", + "age=4.0", #endif /* USE_UNICODE_AGE_PROPERTIES */ "ahom", + "phnx", "incjkunifiedideographsextensione", "khmr", "insinhala", @@ -39402,24 +40573,32 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "guru", "sundanese", "punct", + "cwt", + "unassigned", "paucinhau", "gurmukhi", - "variationselector", + "chorasmian", "logicalorderexception", "khmer", "limbu", + "unknown", + "chrs", + "oriya", "inscriptionalpahlavi", - "oidc", "incjkunifiedideographsextensionc", #endif /* USE_UNICODE_PROPERTIES */ "cntrl", -#ifdef USE_UNICODE_PROPERTIES +#ifndef USE_UNICODE_PROPERTIES + "space", +#else /* USE_UNICODE_PROPERTIES */ + "incjkunifiedideographsextensionf", "inlatinextendedadditional", - "decimalnumber", + "ahex", "insorasompeng", "radical", "emojimodifier", "kharoshthi", + "dash", "n", "math", "goth", @@ -39430,479 +40609,475 @@ static const struct uniname2ctype_pool_t uniname2ctype_pool_contents = "nko", "nkoo", "ingreekandcoptic", - "olck", "p", "grantha", - "olchiki", + "xpeo", "incjkunifiedideographs", "zanb", "intirhuta", - "oids", "inhatran", "linb", - "xpeo", "mult", "saurashtra", "kthi", "inbhaiksuki", - "olower", "innabataean", "inphoenician", "inkanbun", "inmeroitichieroglyphs", - "inkayahli", - "phnx", - "inoriya", "enclosingmark", "sd", "inelbasan", - "wara", "inenclosedideographicsupplement", "sidd", - "linearb", "hani", + "linearb", "han", + "intifinagh", "inenclosedalphanumericsupplement", - "medf", - "bidicontrol", "hano", + "bidicontrol", "inphaistosdisc", "limb", "inkangxiradicals", "lepc", - "medefaidrin", "braille", "regionalindicator", - "inlowsurrogates", - "inshorthandformatcontrols", - "brah", "inkhojki", - "inoldhungarian", + "brah", "hanunoo", + "inoldhungarian", "hira", "beng", "emojimodifierbase", "inarabic", - "lyci", - "ahex", + "osage", "inherited", "glag", - "lycian", + "osma", "indogra", - "dsrt", + "inlowsurrogates", "arab", - "mymr", - "myanmar", "phli", "inimperialaramaic", + "emod", "ingreekextended", "inanatolianhieroglyphs", "punctuation", - "takri", "graphemeextend", - "invai", - "cwl", "ingeometricshapes", "emojicomponent", + "softdotted", + "takri", + "inyezidi", "coptic", - "deseret", + "inkayahli", + "invai", + "inoriya", "inarabicpresentationformsa", - "takr", "inbasiclatin", "incjkunifiedideographsextensiond", + "wara", "sinh", "sund", + "cwl", "shavian", - "taile", "insundanesesupplement", - "inelymaic", - "insoyombo", + "takr", "bhks", "bhaiksuki", - "incjkcompatibility", + "taile", "inhanunoo", "intangut", + "inethiopicextendeda", "sogdian", "inlatinextendedd", "sogo", "insinhalaarchaicnumbers", "ideographic", - "ugar", + "odi", "copt", "imperialaramaic", "insogdian", "indingbats", "format", "ininscriptionalpahlavi", + "lyci", "ininscriptionalparthian", "grbase", + "lycian", "inbatak", "cprt", - "cwcf", - "cuneiform", - "term", + "ugar", + "mymr", + "myanmar", + "deva", "intibetan", "intags", "asciihexdigit", + "devanagari", "sentenceterminal", - "inmayannumerals", + "defaultignorablecodepoint", + "digit", + "term", "nand", - "patsyn", "hatran", "inblockelements", "inornamentaldingbats", "innumberforms", - "oldpersian", - "inshavian", + "oidc", "bopo", + "hex", + "ext", "hatr", "caseignorable", "inoldpersian", - "modifierletter", - "cwu", - "lydi", + "inshavian", "inbyzantinemusicalsymbols", +#endif /* USE_UNICODE_PROPERTIES */ + "xposixpunct", +#ifndef USE_UNICODE_PROPERTIES + "lower", +#else /* USE_UNICODE_PROPERTIES */ + "inelymaic", + "insoyombo", "ingeometricshapesextended", + "incjkcompatibility", "inmyanmarextendedb", "innushu", - "lydian", - "inunifiedcanadianaboriginalsyllabics", - "orkh", - "inyiradicals", + "olck", + "olchiki", + "cwu", "inkatakanaphoneticextensions", - "inethiopicextendeda", "incoptic", + "oids", "inarabicextendeda", - "oldpermic", "incjksymbolsandpunctuation", - "word", + "olower", "bopomofo", - "ogam", "inlisu", "inoldpermic", "innoblock", - "taiviet", + "extpict", "inbraillepatterns", "alpha", "inbalinese", "sorasompeng", "closepunctuation", + "taiviet", + "inphoneticextensions", + "inmayannumerals", "inmiscellaneousmathematicalsymbolsb", "inlepcha", + "patsyn", + "inlisusupplement", "insyriacsupplement", - "newa", "spacingmark", "inpalmyrene", - "cyrl", "assigned", - "mlym", - "malayalam", - "ext", - "newtailue", -#endif /* USE_UNICODE_PROPERTIES */ + "extender", + "newa", "space", -#ifdef USE_UNICODE_PROPERTIES "intelugu", + "lydi", "idsb", - "indevanagari", - "avestan", - "cf", - "palmyrene", + "lydian", "inethiopicsupplement", - "soyo", -#endif /* USE_UNICODE_PROPERTIES */ - "xposixpunct", -#ifndef USE_UNICODE_PROPERTIES - "lower", -#else /* USE_UNICODE_PROPERTIES */ - "pf", "sarb", "zanabazarsquare", - "ugaritic", - "osge", - "java", + "newtailue", + "indevanagari", + "avestan", + "inyiradicals", "sharada", - "dogra", + "inphoneticextensionssupplement", + "deprecated", "bugi", - "meroitichieroglyphs", + "word", + "java", "separator", "ingeorgiansupplement", "sogd", - "tale", - "inunifiedcanadianaboriginalsyllabicsextended", - "terminalpunctuation", + "ugaritic", + "inethiopicextended", "shrd", #endif /* USE_UNICODE_PROPERTIES */ "graph", -#ifdef USE_UNICODE_PROPERTIES - "olditalic", - "dogr", +#ifndef USE_UNICODE_PROPERTIES + "digit", + "blank" +#else /* USE_UNICODE_PROPERTIES */ "gujr", - "phag", + "tale", "gujarati", + "phag", + "terminalpunctuation", "inhanguljamo", - "javanese", - "taml", - "inphoneticextensions", "siddham", + "ingeorgianextended", "buginese", "inmongoliansupplement", - "invariationselectors", + "cyrl", "inhanguljamoextendeda", - "inverticalforms", - "syrc", + "javanese", + "taml", "number", + "incyrillicextendedb", + "mlym", "incopticepactnumbers", - "avst", + "malayalam", "inbamum", "nd", "insuttonsignwriting", - "extender", + "invariationselectors", + "inverticalforms", + "avst", + "palmyrene", + "soyo", "intaiviet", - "hex", - "incjkunifiedideographsextensionf", - "other", - "otheridcontinue", - "shaw", - "dash", - "othernumber", - "orya", - "invedicextensions", - "sgnw", "caucasianalbanian", "inmathematicalalphanumericsymbols", - "inphoneticextensionssupplement", - "invariationselectorssupplement", + "incjkunifiedideographsextensiong", + "meroitichieroglyphs", + "shaw", + "invedicextensions", + "oldpersian", "induployan", - "syriac", - "oalpha", + "sgnw", "innyiakengpuachuehmong", "incombiningdiacriticalmarks", - "inethiopicextended", + "invariationselectorssupplement", "nl", "incombiningdiacriticalmarksforsymbols", - "khudawadi", - "otheralphabetic", - "oldhungarian", - "incurrencysymbols", "incjkradicalssupplement", "inglagolitic", - "intifinagh", - "ingeorgianextended", + "orkh", + "syrc", + "khudawadi", "surrogate", - "incyrillicextendedb", + "extendedpictographic", + "oldpermic", "ethi", - "titlecaseletter", + "ogam", "rohg", - "inmeroiticcursive", "idstrinaryoperator", "inphagspa", "lepcha", + "titlecaseletter", "intagalog", - "mathsymbol", "incombiningdiacriticalmarkssupplement", + "inmeroiticcursive", "inbrahmi", "insymbolsandpictographsextendeda", - "inlinearbsyllabary", - "oldturkic", + "syriac", + "modifiersymbol", "inbengali", - "wancho", - "osmanya", + "inhalfwidthandfullwidthforms", "buhd", - "insmallformvariants", - "indevanagariextended", - "softdotted", - "inbuginese", "mahj", + "inbuginese", "inlatin1supplement", "ingothic", "mahajani", "hang", - "sylo", - "warangciti", + "ebase", + "insmallformvariants", + "incurrencysymbols", + "indevanagariextended", + "divesakuru", "ingujarati", - "tirhuta", + "osge", "incombiningdiacriticalmarksextended", "spaceseparator", "ingunjalagondi", - "wcho", + "dupl", "hiragana", - "extendedpictographic", + "tirhuta", "inrejang", - "inottomansiyaqnumbers", + "dashpunctuation", "nchar", - "cyrillic", "khoj", "inlimbu", + "olditalic", "hmng", + "mathsymbol", + "incjkunifiedideographsextensionb", + "phagspa", "thaa", + "currencysymbol", "thai", - "incjkunifiedideographsextensionb", - "deva", + "inenclosedcjklettersandmonths", "thaana", - "phagspa", - "devanagari", + "hanifirohingya", + "inlinearbsyllabary", "tang", - "currencysymbol", "tagbanwa", - "inenclosedcjklettersandmonths", + "wancho", "tamil", - "tirh", -#endif /* USE_UNICODE_PROPERTIES */ - "digit", -#ifndef USE_UNICODE_PROPERTIES - "blank" -#else /* USE_UNICODE_PROPERTIES */ - "talu", "zp", + "tirh", "inpaucinhau", - "taitham", - "otherlowercase", - "telu", + "talu", + "other", + "otheridcontinue", + "sylo", "inaegeannumbers", - "otherletter", - "whitespace", + "warangciti", + "othernumber", + "taitham", "nonspacingmark", + "telu", + "wcho", "graphemeclusterbreak=spacingmark", "inletterlikesymbols", + "tifinagh", + "inottomansiyaqnumbers", "intagbanwa", - "oldsogdian", - "otheridstart", + "tfng", + "cyrillic", + "oalpha", "graphemeclusterbreak=cr", "narb", "changeswhencasemapped", "inbopomofo", - "tangut", "graphemeclusterbreak=regionalindicator", + "otheralphabetic", "noncharactercodepoint", - "otheruppercase", + "oldhungarian", "rjng", - "sylotinagri", + "changeswhencasefolded", + "insymbolsforlegacycomputing", + "tangut", + "dep", "inhangulsyllables", "emojipresentation", - "inindicsiyaqnumbers", + "epres", "inbassavah", - "ogrext", - "othersymbol", - "oupper", + "graphemeclusterbreak=lf", "inbuhid", "hmnp", "inpsalterpahlavi", + "whitespace", "finalpunctuation", + "orya", "phlp", "inbamumsupplement", "buhid", "paragraphseparator", "inalphabeticpresentationforms", - "omath", - "any", "elba", "changeswhentitlecased", "incombininghalfmarks", "intangutcomponents", "hebr", - "deprecated", + "oldturkic", "inarabicmathematicalalphabeticsymbols", + "khitansmallscript", + "sylotinagri", + "hexdigit", "inprivateusearea", - "kayahli", - "inplayingcards", "inarabicpresentationformsb", - "ogham", - "elym", "graphemeclusterbreak=t", "graphemeclusterbreak=lvt", "nbat", - "nabataean", "hangul", - "elymaic", - "inhebrew", - "injavanese", - "symbol", + "nabataean", + "intangutsupplement", "inmathematicaloperators", "inarabicsupplement", - "cypriot", + "injavanese", "hung", - "wspace", + "ogrext", + "inhebrew", "changeswhenlowercased", "elbasan", - "hluw", + "osmanya", "insuperscriptsandsubscripts", "graphemeclusterbreak=extend", "graphemeclusterbreak=prepend", "nshu", - "oldnortharabian", - "inyijinghexagramsymbols", - "hexdigit", + "otherlowercase", + "hluw", + "otherletter", + "kayahli", + "inplayingcards", + "elym", "graphemeclusterbreak=l", "graphemeclusterbreak=control", - "bassavah", - "otherdefaultignorablecodepoint", + "elymaic", "changeswhenuppercased", "inalchemicalsymbols", + "oldsogdian", + "bassavah", + "otheridstart", "insupplementalarrowsa", - "inyisyllables", + "symbol", + "inmahjongtiles", + "cypriot", + "any", + "otheruppercase", + "indivesakuru", "tibt", - "othermath", "tibetan", - "inmahjongtiles", - "signwriting", + "wspace", + "inindicsiyaqnumbers", + "othersymbol", + "oupper", "nushu", - "modifiersymbol", - "inhalfwidthandfullwidthforms", - "upper", + "inyijinghexagramsymbols", "insupplementalarrowsc", + "signwriting", + "omath", + "upper", "insupplementalmathematicaloperators", - "incypriotsyllabary", - "dupl", - "tavt", "inpahawhhmong", "alphabetic", - "dashpunctuation", + "tavt", + "ogham", "uppercase", - "soyombo", - "hanifirohingya", - "otherpunctuation", - "defaultignorablecodepoint", "inhanguljamoextendedb", "aghb", - "tifinagh", + "incypriotsyllabary", "inlatinextendedb", - "tfng", + "inyisyllables", + "oldnortharabian", + "duployan", "inhighprivateusesurrogates", - "changeswhencasefolded", - "dep", - "oldsoutharabian", - "graphemeclusterbreak=lf", + "soyombo", + "otherdefaultignorablecodepoint", + "othermath", + "inbopomofoextended", "pahawhhmong", "unifiedideograph", - "uppercaseletter", "insupplementalpunctuation", + "uppercaseletter", "ethiopic", + "ecomp", "inglagoliticsupplement", "rejang", - "inbopomofoextended", + "otherpunctuation", "tagb", - "othergraphemeextend", - "inegyptianhieroglyphs", - "inegyptianhieroglyphformatcontrols", - "hebrew", + "inboxdrawing", "tglg", - "tagalog", "graphemeclusterbreak=zwj", - "zyyy", - "hyphen", - "inboxdrawing", + "hebrew", + "tagalog", + "oldsoutharabian", + "inegyptianhieroglyphs", + "inegyptianhieroglyphformatcontrols", "graphemeclusterbreak=v", "graphemeclusterbreak=lv", "telugu", - "duployan", - "openpunctuation", + "hyphen", + "othergraphemeextend", "insupplementaryprivateuseareaa", "inhighsurrogates", "insupplementalarrowsb", + "zyyy", + "inhangulcompatibilityjamo", + "openpunctuation", "insupplementalsymbolsandpictographs", "egyp", - "inhangulcompatibilityjamo", "nyiakengpuachuehmong", "egyptianhieroglyphs", "insupplementaryprivateuseareab" @@ -39914,16 +41089,33 @@ uniname2ctype_p (register const char *str, register size_t len) { static const struct uniname2ctype_struct wordlist[] = { -#ifdef USE_UNICODE_PROPERTIES - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, - {uniname2ctype_offset(str11), 111}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#ifndef USE_UNICODE_PROPERTIES + {uniname2ctype_offset(str6), 12}, + {uniname2ctype_offset(str7), 7}, + {uniname2ctype_offset(str8), 15}, + {uniname2ctype_offset(str9), 1}, + {uniname2ctype_offset(str10), 13}, + {uniname2ctype_offset(str11), 11}, + {uniname2ctype_offset(str12), 10}, + {uniname2ctype_offset(str13), 14}, + {uniname2ctype_offset(str14), 3}, + {uniname2ctype_offset(str15), 9}, + {uniname2ctype_offset(str16), 8}, + {uniname2ctype_offset(str17), 6}, + {uniname2ctype_offset(str18), 5}, + {uniname2ctype_offset(str19), 4}, + {uniname2ctype_offset(str20), 2} +#else /* USE_UNICODE_PROPERTIES */ + {uniname2ctype_offset(str6), 52}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str17), 111}, + {uniname2ctype_offset(str12), 111}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str17), 271}, + {uniname2ctype_offset(str18), 111}, + {-1}, {-1}, {-1}, {uniname2ctype_offset(str22), 152}, - {-1}, - {uniname2ctype_offset(str24), 52}, + {-1}, {-1}, {uniname2ctype_offset(str25), 184}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str33), 218}, @@ -39936,16 +41128,16 @@ uniname2ctype_p (register const char *str, register size_t len) {uniname2ctype_offset(str47), 61}, {uniname2ctype_offset(str48), 95}, {uniname2ctype_offset(str49), 95}, - {-1}, {-1}, - {uniname2ctype_offset(str52), 331}, + {-1}, + {uniname2ctype_offset(str51), 230}, + {uniname2ctype_offset(str52), 336}, {-1}, {-1}, {uniname2ctype_offset(str55), 21}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str64), 44}, {-1}, - {uniname2ctype_offset(str66), 319}, - {uniname2ctype_offset(str67), 267}, - {-1}, {-1}, {-1}, + {uniname2ctype_offset(str66), 324}, + {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str71), 181}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str75), 22}, @@ -39959,9 +41151,9 @@ uniname2ctype_p (register const char *str, register size_t len) {uniname2ctype_offset(str94), 33}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str100), 149}, - {uniname2ctype_offset(str101), 496}, + {uniname2ctype_offset(str101), 501}, {uniname2ctype_offset(str102), 108}, - {uniname2ctype_offset(str103), 252}, + {uniname2ctype_offset(str103), 256}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str107), 31}, {uniname2ctype_offset(str108), 77}, @@ -39975,30 +41167,37 @@ uniname2ctype_p (register const char *str, register size_t len) {uniname2ctype_offset(str118), 77}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str122), 212}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str126), 243}, + {uniname2ctype_offset(str127), 71}, + {-1}, {uniname2ctype_offset(str129), 187}, {uniname2ctype_offset(str130), 42}, {uniname2ctype_offset(str131), 172}, {-1}, {-1}, - {uniname2ctype_offset(str134), 482}, - {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str134), 487}, + {uniname2ctype_offset(str135), 228}, + {-1}, {-1}, {-1}, {uniname2ctype_offset(str139), 170}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str145), 499}, - {uniname2ctype_offset(str146), 548}, + {uniname2ctype_offset(str145), 504}, + {uniname2ctype_offset(str146), 557}, {-1}, - {uniname2ctype_offset(str148), 552}, - {uniname2ctype_offset(str149), 514}, + {uniname2ctype_offset(str148), 561}, + {uniname2ctype_offset(str149), 521}, {-1}, {uniname2ctype_offset(str151), 18}, {uniname2ctype_offset(str152), 169}, {uniname2ctype_offset(str153), 160}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str161), 313}, + {uniname2ctype_offset(str161), 318}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str177), 337}, - {uniname2ctype_offset(str178), 539}, + {-1}, {-1}, + {uniname2ctype_offset(str173), 144}, + {uniname2ctype_offset(str174), 144}, + {-1}, {-1}, + {uniname2ctype_offset(str177), 342}, + {uniname2ctype_offset(str178), 547}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str183), 75}, {-1}, {-1}, @@ -40007,18 +41206,19 @@ uniname2ctype_p (register const char *str, register size_t len) {uniname2ctype_offset(str190), 208}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str203), 345}, - {uniname2ctype_offset(str204), 473}, + {uniname2ctype_offset(str203), 350}, + {uniname2ctype_offset(str204), 478}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str210), 553}, + {uniname2ctype_offset(str210), 562}, {-1}, - {uniname2ctype_offset(str212), 350}, + {uniname2ctype_offset(str212), 355}, {uniname2ctype_offset(str213), 115}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str218), 528}, + {uniname2ctype_offset(str218), 535}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str226), 171}, - {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str230), 516}, {uniname2ctype_offset(str231), 31}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str236), 25}, @@ -40030,85 +41230,84 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {uniname2ctype_offset(str253), 102}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str260), 542}, + {uniname2ctype_offset(str260), 551}, {-1}, {-1}, {uniname2ctype_offset(str263), 161}, {-1}, {uniname2ctype_offset(str265), 19}, {-1}, {uniname2ctype_offset(str267), 79}, - {uniname2ctype_offset(str268), 342}, + {uniname2ctype_offset(str268), 347}, {-1}, - {uniname2ctype_offset(str270), 259}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str274), 541}, - {uniname2ctype_offset(str275), 500}, + {uniname2ctype_offset(str270), 263}, + {-1}, {-1}, + {uniname2ctype_offset(str273), 20}, + {uniname2ctype_offset(str274), 550}, + {uniname2ctype_offset(str275), 505}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str281), 307}, + {uniname2ctype_offset(str281), 312}, {uniname2ctype_offset(str282), 40}, {uniname2ctype_offset(str283), 79}, {-1}, - {uniname2ctype_offset(str285), 516}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str289), 536}, + {uniname2ctype_offset(str285), 523}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str289), 544}, + {uniname2ctype_offset(str290), 43}, + {-1}, {-1}, {uniname2ctype_offset(str293), 218}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str297), 212}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str301), 380}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str311), 311}, + {uniname2ctype_offset(str301), 385}, + {uniname2ctype_offset(str302), 243}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str311), 316}, {-1}, - {uniname2ctype_offset(str313), 441}, + {uniname2ctype_offset(str313), 446}, {-1}, - {uniname2ctype_offset(str315), 232}, + {uniname2ctype_offset(str315), 236}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str320), 260}, + {uniname2ctype_offset(str320), 264}, {-1}, {uniname2ctype_offset(str322), 129}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str328), 320}, + {uniname2ctype_offset(str328), 325}, {-1}, {-1}, {uniname2ctype_offset(str331), 76}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str335), 537}, + {uniname2ctype_offset(str335), 545}, {-1}, {-1}, - {uniname2ctype_offset(str338), 318}, + {uniname2ctype_offset(str338), 323}, {-1}, {uniname2ctype_offset(str340), 76}, - {-1}, - {uniname2ctype_offset(str342), 334}, + {uniname2ctype_offset(str341), 540}, + {uniname2ctype_offset(str342), 339}, {-1}, {-1}, {uniname2ctype_offset(str345), 53}, - {uniname2ctype_offset(str346), 259}, + {uniname2ctype_offset(str346), 263}, {-1}, - {uniname2ctype_offset(str348), 411}, + {uniname2ctype_offset(str348), 416}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str352), 512}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str357), 532}, - {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str352), 519}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str362), 163}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str366), 44}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str373), 160}, - {-1}, {-1}, - {uniname2ctype_offset(str376), 144}, - {uniname2ctype_offset(str377), 144}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str386), 356}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str399), 316}, + {uniname2ctype_offset(str386), 361}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str399), 321}, {-1}, - {uniname2ctype_offset(str401), 527}, + {uniname2ctype_offset(str401), 534}, {-1}, {-1}, {uniname2ctype_offset(str404), 81}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str411), 55}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str409), 55}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str418), 108}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str426), 163}, @@ -40118,216 +41317,234 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {uniname2ctype_offset(str445), 23}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str460), 36}, + {-1}, {uniname2ctype_offset(str462), 46}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str468), 169}, {-1}, {uniname2ctype_offset(str470), 22}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str475), 507}, + {uniname2ctype_offset(str475), 512}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str480), 442}, + {uniname2ctype_offset(str480), 447}, {uniname2ctype_offset(str481), 188}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str486), 461}, + {uniname2ctype_offset(str486), 466}, {-1}, - {uniname2ctype_offset(str488), 557}, + {uniname2ctype_offset(str488), 568}, {-1}, {-1}, - {uniname2ctype_offset(str491), 455}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str491), 460}, + {-1}, {-1}, + {uniname2ctype_offset(str494), 230}, + {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str500), 127}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str504), 187}, - {uniname2ctype_offset(str505), 238}, + {uniname2ctype_offset(str505), 242}, {uniname2ctype_offset(str506), 24}, {-1}, {-1}, {uniname2ctype_offset(str509), 24}, {-1}, - {uniname2ctype_offset(str511), 448}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str520), 408}, + {uniname2ctype_offset(str511), 453}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str519), 70}, + {uniname2ctype_offset(str520), 413}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str535), 70}, - {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str538), 91}, {-1}, {-1}, - {uniname2ctype_offset(str541), 531}, + {uniname2ctype_offset(str541), 539}, {-1}, {uniname2ctype_offset(str543), 91}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str556), 525}, + {uniname2ctype_offset(str556), 532}, {-1}, - {uniname2ctype_offset(str558), 335}, + {uniname2ctype_offset(str558), 340}, {-1}, - {uniname2ctype_offset(str560), 498}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str565), 586}, + {uniname2ctype_offset(str560), 503}, + {-1}, + {uniname2ctype_offset(str562), 70}, + {-1}, {-1}, + {uniname2ctype_offset(str565), 597}, {uniname2ctype_offset(str566), 37}, {-1}, {uniname2ctype_offset(str568), 113}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str572), 486}, + {uniname2ctype_offset(str569), 260}, + {-1}, {-1}, + {uniname2ctype_offset(str572), 491}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str577), 573}, - {uniname2ctype_offset(str578), 70}, + {uniname2ctype_offset(str577), 584}, + {-1}, {uniname2ctype_offset(str579), 106}, {-1}, {-1}, - {uniname2ctype_offset(str582), 391}, - {uniname2ctype_offset(str583), 465}, + {uniname2ctype_offset(str582), 396}, + {uniname2ctype_offset(str583), 470}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str590), 74}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str594), 168}, {-1}, - {uniname2ctype_offset(str596), 584}, + {uniname2ctype_offset(str596), 595}, {uniname2ctype_offset(str597), 146}, {-1}, {-1}, - {uniname2ctype_offset(str600), 475}, + {uniname2ctype_offset(str600), 480}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str604), 551}, - {uniname2ctype_offset(str605), 591}, + {uniname2ctype_offset(str604), 560}, + {uniname2ctype_offset(str605), 602}, {-1}, {-1}, - {uniname2ctype_offset(str608), 598}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str614), 574}, + {uniname2ctype_offset(str608), 610}, + {uniname2ctype_offset(str609), 229}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str613), 219}, + {uniname2ctype_offset(str614), 585}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str624), 195}, - {uniname2ctype_offset(str625), 432}, - {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str625), 437}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str629), 219}, {uniname2ctype_offset(str630), 29}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str636), 522}, - {-1}, {-1}, + {uniname2ctype_offset(str631), 262}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str638), 572}, {uniname2ctype_offset(str639), 49}, {-1}, {-1}, {uniname2ctype_offset(str642), 19}, {-1}, {-1}, - {uniname2ctype_offset(str645), 470}, + {uniname2ctype_offset(str645), 475}, {-1}, {uniname2ctype_offset(str647), 192}, {-1}, {-1}, - {uniname2ctype_offset(str650), 472}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str650), 477}, + {-1}, + {uniname2ctype_offset(str652), 69}, + {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str657), 51}, {-1}, {-1}, - {uniname2ctype_offset(str660), 257}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str668), 69}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str672), 321}, + {uniname2ctype_offset(str660), 261}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, + {uniname2ctype_offset(str672), 326}, {-1}, {-1}, {uniname2ctype_offset(str675), 68}, {-1}, {-1}, {uniname2ctype_offset(str678), 171}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str682), 529}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str688), 114}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str695), 530}, {uniname2ctype_offset(str696), 175}, - {uniname2ctype_offset(str697), 384}, + {uniname2ctype_offset(str697), 389}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str703), 508}, + {uniname2ctype_offset(str703), 514}, {-1}, - {uniname2ctype_offset(str705), 332}, + {uniname2ctype_offset(str705), 337}, {-1}, {uniname2ctype_offset(str707), 158}, - {uniname2ctype_offset(str708), 556}, + {uniname2ctype_offset(str708), 567}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str713), 361}, + {uniname2ctype_offset(str713), 366}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str720), 72}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str737), 7}, - {uniname2ctype_offset(str738), 358}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str742), 6}, + {uniname2ctype_offset(str738), 363}, + {-1}, {-1}, + {uniname2ctype_offset(str741), 537}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, + {uniname2ctype_offset(str753), 233}, {-1}, - {uniname2ctype_offset(str753), 229}, - {-1}, - {uniname2ctype_offset(str755), 497}, + {uniname2ctype_offset(str755), 502}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str760), 416}, + {uniname2ctype_offset(str760), 421}, {uniname2ctype_offset(str761), 167}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str766), 156}, - {uniname2ctype_offset(str767), 572}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str765), 114}, + {uniname2ctype_offset(str766), 156}, + {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str771), 167}, - {uniname2ctype_offset(str772), 256}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str776), 257}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str776), 261}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str783), 156}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str787), 245}, - {-1}, {-1}, {-1}, + {uniname2ctype_offset(str787), 249}, + {uniname2ctype_offset(str788), 6}, + {-1}, {-1}, {uniname2ctype_offset(str791), 193}, {-1}, {-1}, - {uniname2ctype_offset(str794), 558}, + {uniname2ctype_offset(str794), 569}, {-1}, {-1}, {uniname2ctype_offset(str797), 50}, {-1}, - {uniname2ctype_offset(str799), 579}, + {uniname2ctype_offset(str799), 590}, {-1}, {-1}, {uniname2ctype_offset(str802), 13}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str809), 431}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str814), 478}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str818), 383}, + {uniname2ctype_offset(str806), 409}, {-1}, {-1}, - {uniname2ctype_offset(str821), 467}, - {uniname2ctype_offset(str822), 563}, + {uniname2ctype_offset(str809), 436}, + {-1}, + {uniname2ctype_offset(str811), 577}, + {-1}, + {uniname2ctype_offset(str813), 583}, + {uniname2ctype_offset(str814), 483}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str818), 388}, + {-1}, {-1}, + {uniname2ctype_offset(str821), 472}, + {uniname2ctype_offset(str822), 574}, {uniname2ctype_offset(str823), 47}, {uniname2ctype_offset(str824), 112}, - {uniname2ctype_offset(str825), 429}, + {uniname2ctype_offset(str825), 434}, {-1}, {-1}, - {uniname2ctype_offset(str828), 564}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str834), 258}, - {-1}, {-1}, {-1}, + {uniname2ctype_offset(str828), 575}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str838), 157}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str842), 58}, - {-1}, {-1}, - {uniname2ctype_offset(str845), 66}, - {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str847), 48}, {uniname2ctype_offset(str848), 178}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str855), 67}, {-1}, - {uniname2ctype_offset(str857), 305}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str862), 88}, + {uniname2ctype_offset(str857), 310}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str875), 359}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str882), 137}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str875), 354}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str886), 394}, {-1}, - {uniname2ctype_offset(str886), 389}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str895), 397}, + {uniname2ctype_offset(str888), 58}, {-1}, {-1}, - {uniname2ctype_offset(str898), 485}, + {uniname2ctype_offset(str891), 66}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str895), 402}, + {-1}, {-1}, + {uniname2ctype_offset(str898), 490}, {-1}, - {uniname2ctype_offset(str900), 583}, + {uniname2ctype_offset(str900), 594}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str906), 504}, - {uniname2ctype_offset(str907), 434}, + {uniname2ctype_offset(str906), 509}, + {uniname2ctype_offset(str907), 439}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, + {uniname2ctype_offset(str918), 370}, + {-1}, + {uniname2ctype_offset(str920), 65}, + {-1}, {-1}, {-1}, {uniname2ctype_offset(str924), 68}, {-1}, - {uniname2ctype_offset(str926), 329}, + {uniname2ctype_offset(str926), 334}, {-1}, - {uniname2ctype_offset(str928), 519}, - {uniname2ctype_offset(str929), 446}, + {uniname2ctype_offset(str928), 526}, + {uniname2ctype_offset(str929), 451}, {uniname2ctype_offset(str930), 41}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, @@ -40336,206 +41553,199 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str961), 2}, {-1}, - {uniname2ctype_offset(str963), 246}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str963), 250}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str972), 27}, {-1}, - {uniname2ctype_offset(str974), 493}, + {uniname2ctype_offset(str974), 498}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, - {uniname2ctype_offset(str986), 355}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str991), 137}, + {-1}, {-1}, {uniname2ctype_offset(str994), 85}, {uniname2ctype_offset(str995), 104}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1005), 53}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1009), 404}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1003), 53}, + {-1}, + {uniname2ctype_offset(str1005), 348}, + {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1010), 26}, {-1}, {-1}, - {uniname2ctype_offset(str1013), 480}, - {uniname2ctype_offset(str1014), 566}, - {uniname2ctype_offset(str1015), 469}, + {uniname2ctype_offset(str1013), 485}, + {-1}, + {uniname2ctype_offset(str1015), 474}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1021), 67}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1025), 444}, + {uniname2ctype_offset(str1025), 449}, {-1}, {-1}, {uniname2ctype_offset(str1028), 136}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1032), 239}, - {uniname2ctype_offset(str1033), 71}, - {-1}, - {uniname2ctype_offset(str1035), 308}, - {uniname2ctype_offset(str1036), 543}, + {uniname2ctype_offset(str1032), 360}, + {-1}, {-1}, + {uniname2ctype_offset(str1035), 313}, + {uniname2ctype_offset(str1036), 552}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1049), 173}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1067), 102}, - {-1}, {-1}, - {uniname2ctype_offset(str1070), 115}, - {-1}, - {uniname2ctype_offset(str1072), 197}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1080), 210}, - {uniname2ctype_offset(str1081), 399}, + {uniname2ctype_offset(str1068), 115}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1085), 248}, - {-1}, - {uniname2ctype_offset(str1087), 567}, - {-1}, {-1}, - {uniname2ctype_offset(str1090), 69}, - {uniname2ctype_offset(str1091), 11}, + {uniname2ctype_offset(str1072), 197}, {-1}, - {uniname2ctype_offset(str1093), 125}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1097), 520}, + {uniname2ctype_offset(str1074), 69}, + {uniname2ctype_offset(str1075), 11}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1081), 404}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1087), 578}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1097), 527}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1102), 506}, + {uniname2ctype_offset(str1102), 511}, {-1}, {-1}, {uniname2ctype_offset(str1105), 217}, {-1}, - {uniname2ctype_offset(str1107), 521}, + {uniname2ctype_offset(str1107), 528}, {-1}, - {uniname2ctype_offset(str1109), 228}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1109), 232}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1116), 260}, + {-1}, {-1}, {uniname2ctype_offset(str1119), 106}, {uniname2ctype_offset(str1120), 60}, - {uniname2ctype_offset(str1121), 365}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1134), 410}, + {-1}, + {uniname2ctype_offset(str1131), 252}, + {-1}, {-1}, + {uniname2ctype_offset(str1134), 415}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1140), 93}, {-1}, {uniname2ctype_offset(str1142), 206}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1146), 131}, - {uniname2ctype_offset(str1147), 255}, + {uniname2ctype_offset(str1147), 259}, {-1}, {uniname2ctype_offset(str1149), 158}, {uniname2ctype_offset(str1150), 98}, - {uniname2ctype_offset(str1151), 483}, + {uniname2ctype_offset(str1151), 488}, {uniname2ctype_offset(str1152), 217}, {uniname2ctype_offset(str1153), 138}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1157), 203}, {uniname2ctype_offset(str1158), 166}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1164), 229}, + {uniname2ctype_offset(str1164), 233}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1168), 104}, {-1}, - {uniname2ctype_offset(str1170), 374}, - {uniname2ctype_offset(str1171), 515}, + {uniname2ctype_offset(str1170), 379}, + {uniname2ctype_offset(str1171), 522}, {-1}, {-1}, - {uniname2ctype_offset(str1174), 312}, - {uniname2ctype_offset(str1175), 26}, + {uniname2ctype_offset(str1174), 317}, + {-1}, {uniname2ctype_offset(str1176), 208}, {uniname2ctype_offset(str1177), 74}, - {uniname2ctype_offset(str1178), 338}, + {uniname2ctype_offset(str1178), 343}, {-1}, {uniname2ctype_offset(str1180), 183}, {uniname2ctype_offset(str1181), 151}, - {uniname2ctype_offset(str1182), 344}, + {uniname2ctype_offset(str1182), 349}, {uniname2ctype_offset(str1183), 101}, {-1}, {uniname2ctype_offset(str1185), 170}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1190), 261}, - {uniname2ctype_offset(str1191), 524}, + {uniname2ctype_offset(str1190), 265}, + {uniname2ctype_offset(str1191), 531}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1197), 101}, {uniname2ctype_offset(str1198), 135}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1203), 351}, + {uniname2ctype_offset(str1203), 356}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1207), 447}, - {uniname2ctype_offset(str1208), 239}, + {uniname2ctype_offset(str1207), 452}, + {-1}, {uniname2ctype_offset(str1209), 186}, - {uniname2ctype_offset(str1210), 137}, + {-1}, {-1}, + {uniname2ctype_offset(str1212), 369}, + {uniname2ctype_offset(str1213), 216}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1221), 26}, {-1}, - {uniname2ctype_offset(str1212), 364}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1227), 232}, + {uniname2ctype_offset(str1223), 565}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1227), 236}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1231), 206}, - {uniname2ctype_offset(str1232), 340}, + {uniname2ctype_offset(str1232), 345}, {uniname2ctype_offset(str1233), 73}, #ifndef USE_UNICODE_AGE_PROPERTIES {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, #else /* USE_UNICODE_AGE_PROPERTIES */ - {uniname2ctype_offset(str1234), 287}, - {uniname2ctype_offset(str1235), 289}, - {uniname2ctype_offset(str1236), 286}, - {uniname2ctype_offset(str1237), 288}, - {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1234), 291}, + {uniname2ctype_offset(str1235), 293}, + {uniname2ctype_offset(str1236), 290}, + {uniname2ctype_offset(str1237), 292}, + {-1}, {-1}, + {uniname2ctype_offset(str1240), 294}, + {-1}, {-1}, #endif /* USE_UNICODE_AGE_PROPERTIES */ {uniname2ctype_offset(str1243), 25}, - {uniname2ctype_offset(str1244), 326}, - {uniname2ctype_offset(str1245), 249}, - {uniname2ctype_offset(str1246), 420}, -#ifndef USE_UNICODE_AGE_PROPERTIES + {uniname2ctype_offset(str1244), 331}, {-1}, -#else /* USE_UNICODE_AGE_PROPERTIES */ - {uniname2ctype_offset(str1247), 268}, -#endif /* USE_UNICODE_AGE_PROPERTIES */ + {uniname2ctype_offset(str1246), 425}, + {uniname2ctype_offset(str1247), 357}, {uniname2ctype_offset(str1248), 30}, #ifndef USE_UNICODE_AGE_PROPERTIES - {-1}, {-1}, {-1}, {-1}, {-1}, -#else /* USE_UNICODE_AGE_PROPERTIES */ - {uniname2ctype_offset(str1249), 275}, - {uniname2ctype_offset(str1250), 270}, - {uniname2ctype_offset(str1251), 274}, - {uniname2ctype_offset(str1252), 269}, - {uniname2ctype_offset(str1253), 285}, -#endif /* USE_UNICODE_AGE_PROPERTIES */ - {uniname2ctype_offset(str1254), 540}, -#ifndef USE_UNICODE_AGE_PROPERTIES - {-1}, -#else /* USE_UNICODE_AGE_PROPERTIES */ - {uniname2ctype_offset(str1255), 280}, -#endif /* USE_UNICODE_AGE_PROPERTIES */ - {uniname2ctype_offset(str1256), 267}, -#ifndef USE_UNICODE_AGE_PROPERTIES - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, #else /* USE_UNICODE_AGE_PROPERTIES */ - {uniname2ctype_offset(str1257), 279}, - {uniname2ctype_offset(str1258), 281}, - {uniname2ctype_offset(str1259), 272}, - {uniname2ctype_offset(str1260), 284}, - {uniname2ctype_offset(str1261), 271}, - {uniname2ctype_offset(str1262), 273}, + {-1}, + {uniname2ctype_offset(str1250), 272}, + {-1}, + {uniname2ctype_offset(str1252), 289}, + {uniname2ctype_offset(str1253), 274}, #endif /* USE_UNICODE_AGE_PROPERTIES */ - {uniname2ctype_offset(str1263), 64}, + {uniname2ctype_offset(str1254), 549}, #ifndef USE_UNICODE_AGE_PROPERTIES - {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, #else /* USE_UNICODE_AGE_PROPERTIES */ - {uniname2ctype_offset(str1264), 283}, - {-1}, + {uniname2ctype_offset(str1255), 273}, + {uniname2ctype_offset(str1256), 276}, + {uniname2ctype_offset(str1257), 288}, + {uniname2ctype_offset(str1258), 275}, + {uniname2ctype_offset(str1259), 277}, + {uniname2ctype_offset(str1260), 284}, + {uniname2ctype_offset(str1261), 287}, + {uniname2ctype_offset(str1262), 283}, + {uniname2ctype_offset(str1263), 285}, #endif /* USE_UNICODE_AGE_PROPERTIES */ - {uniname2ctype_offset(str1266), 21}, + {uniname2ctype_offset(str1264), 216}, #ifndef USE_UNICODE_AGE_PROPERTIES - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, #else /* USE_UNICODE_AGE_PROPERTIES */ - {uniname2ctype_offset(str1267), 282}, - {uniname2ctype_offset(str1268), 277}, + {uniname2ctype_offset(str1265), 281}, + {uniname2ctype_offset(str1266), 286}, + {uniname2ctype_offset(str1267), 280}, + {uniname2ctype_offset(str1268), 282}, + {uniname2ctype_offset(str1269), 279}, {-1}, - {uniname2ctype_offset(str1270), 276}, {uniname2ctype_offset(str1271), 278}, {-1}, {-1}, #endif /* USE_UNICODE_AGE_PROPERTIES */ {uniname2ctype_offset(str1274), 200}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1282), 596}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1278), 138}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1282), 608}, {-1}, {-1}, {uniname2ctype_offset(str1285), 105}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1289), 333}, + {uniname2ctype_offset(str1289), 338}, {-1}, {-1}, - {uniname2ctype_offset(str1292), 382}, + {uniname2ctype_offset(str1292), 387}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1297), 145}, {-1}, {-1}, @@ -40543,38 +41753,48 @@ uniname2ctype_p (register const char *str, register size_t len) {uniname2ctype_offset(str1301), 141}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1306), 15}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, + {uniname2ctype_offset(str1309), 64}, + {-1}, {-1}, + {uniname2ctype_offset(str1312), 21}, + {-1}, {uniname2ctype_offset(str1314), 193}, {-1}, {-1}, {uniname2ctype_offset(str1317), 86}, - {-1}, - {uniname2ctype_offset(str1319), 256}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, + {uniname2ctype_offset(str1328), 227}, {-1}, {-1}, - {uniname2ctype_offset(str1331), 252}, + {uniname2ctype_offset(str1331), 256}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1340), 105}, {-1}, {-1}, {uniname2ctype_offset(str1343), 120}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1348), 271}, + {uniname2ctype_offset(str1349), 227}, + {-1}, {-1}, + {uniname2ctype_offset(str1352), 88}, {-1}, {uniname2ctype_offset(str1354), 164}, - {uniname2ctype_offset(str1355), 254}, - {-1}, {-1}, - {uniname2ctype_offset(str1358), 594}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1358), 606}, {-1}, {uniname2ctype_offset(str1360), 3}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1365), 372}, - {uniname2ctype_offset(str1366), 36}, - {uniname2ctype_offset(str1367), 513}, {-1}, - {uniname2ctype_offset(str1369), 247}, + {uniname2ctype_offset(str1362), 609}, + {-1}, {-1}, + {uniname2ctype_offset(str1365), 377}, + {uniname2ctype_offset(str1366), 240}, + {uniname2ctype_offset(str1367), 520}, + {-1}, + {uniname2ctype_offset(str1369), 251}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1373), 263}, + {uniname2ctype_offset(str1373), 267}, {-1}, {uniname2ctype_offset(str1375), 135}, - {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1376), 234}, + {-1}, {-1}, {-1}, {uniname2ctype_offset(str1380), 35}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1384), 56}, @@ -40583,7 +41803,7 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1400), 201}, - {uniname2ctype_offset(str1401), 385}, + {uniname2ctype_offset(str1401), 390}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1407), 224}, {-1}, @@ -40592,887 +41812,884 @@ uniname2ctype_p (register const char *str, register size_t len) {uniname2ctype_offset(str1419), 140}, {uniname2ctype_offset(str1420), 140}, {-1}, - {uniname2ctype_offset(str1422), 310}, - {uniname2ctype_offset(str1423), 143}, - {-1}, {-1}, + {uniname2ctype_offset(str1422), 315}, + {-1}, {-1}, {-1}, {uniname2ctype_offset(str1426), 39}, {-1}, {uniname2ctype_offset(str1428), 181}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1434), 143}, + {uniname2ctype_offset(str1434), 134}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1438), 422}, + {uniname2ctype_offset(str1438), 427}, + {uniname2ctype_offset(str1439), 215}, {-1}, {-1}, - {uniname2ctype_offset(str1441), 215}, - {uniname2ctype_offset(str1442), 523}, - {-1}, {-1}, - {uniname2ctype_offset(str1445), 253}, - {-1}, {-1}, - {uniname2ctype_offset(str1448), 491}, + {uniname2ctype_offset(str1442), 530}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1448), 496}, {uniname2ctype_offset(str1449), 122}, - {uniname2ctype_offset(str1450), 134}, + {-1}, {uniname2ctype_offset(str1451), 203}, {-1}, {-1}, {uniname2ctype_offset(str1454), 145}, {-1}, {-1}, {uniname2ctype_offset(str1457), 166}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1462), 535}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1466), 241}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1470), 490}, - {uniname2ctype_offset(str1471), 492}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1475), 414}, - {uniname2ctype_offset(str1476), 494}, - {-1}, - {uniname2ctype_offset(str1478), 436}, - {-1}, {-1}, - {uniname2ctype_offset(str1481), 138}, + {uniname2ctype_offset(str1462), 543}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1470), 495}, + {uniname2ctype_offset(str1471), 497}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1485), 328}, + {uniname2ctype_offset(str1475), 419}, + {uniname2ctype_offset(str1476), 499}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1489), 33}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1495), 251}, + {uniname2ctype_offset(str1495), 255}, + {-1}, + {uniname2ctype_offset(str1497), 489}, {-1}, - {uniname2ctype_offset(str1497), 484}, - {uniname2ctype_offset(str1498), 199}, - {uniname2ctype_offset(str1499), 582}, + {uniname2ctype_offset(str1499), 593}, {-1}, {uniname2ctype_offset(str1501), 196}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1507), 122}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1505), 110}, {-1}, - {uniname2ctype_offset(str1509), 110}, - {-1}, {-1}, - {uniname2ctype_offset(str1512), 110}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1517), 581}, + {uniname2ctype_offset(str1507), 122}, + {uniname2ctype_offset(str1508), 110}, + {uniname2ctype_offset(str1509), 407}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1517), 592}, {-1}, - {uniname2ctype_offset(str1519), 219}, - {uniname2ctype_offset(str1520), 228}, - {-1}, {-1}, - {uniname2ctype_offset(str1523), 117}, - {uniname2ctype_offset(str1524), 471}, + {uniname2ctype_offset(str1519), 117}, + {uniname2ctype_offset(str1520), 232}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1524), 476}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1529), 120}, {-1}, - {uniname2ctype_offset(str1531), 407}, + {uniname2ctype_offset(str1531), 412}, {-1}, {uniname2ctype_offset(str1533), 142}, - {-1}, - {uniname2ctype_offset(str1535), 219}, + {-1}, {-1}, {uniname2ctype_offset(str1536), 127}, - {uniname2ctype_offset(str1537), 260}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1542), 453}, - {-1}, - {uniname2ctype_offset(str1544), 561}, + {uniname2ctype_offset(str1537), 264}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1544), 525}, {-1}, {-1}, {uniname2ctype_offset(str1547), 168}, - {uniname2ctype_offset(str1548), 518}, - {uniname2ctype_offset(str1549), 505}, - {-1}, {-1}, - {uniname2ctype_offset(str1552), 117}, - {-1}, {-1}, - {uniname2ctype_offset(str1555), 107}, + {uniname2ctype_offset(str1548), 117}, + {uniname2ctype_offset(str1549), 510}, {-1}, + {uniname2ctype_offset(str1551), 107}, + {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1557), 85}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1563), 264}, - {-1}, - {uniname2ctype_offset(str1565), 315}, + {uniname2ctype_offset(str1563), 268}, {-1}, - {uniname2ctype_offset(str1567), 148}, + {uniname2ctype_offset(str1565), 320}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1570), 210}, {-1}, - {uniname2ctype_offset(str1569), 236}, - {-1}, {-1}, {uniname2ctype_offset(str1572), 115}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1580), 131}, - {-1}, - {uniname2ctype_offset(str1582), 148}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1587), 529}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1594), 114}, {-1}, {-1}, + {uniname2ctype_offset(str1583), 125}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1587), 536}, + {uniname2ctype_offset(str1588), 458}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1597), 81}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1602), 97}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1607), 97}, - {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1613), 164}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1617), 488}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1622), 373}, - {uniname2ctype_offset(str1623), 546}, + {uniname2ctype_offset(str1617), 493}, + {uniname2ctype_offset(str1618), 267}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1622), 378}, + {uniname2ctype_offset(str1623), 555}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1629), 39}, - {-1}, - {uniname2ctype_offset(str1631), 176}, - {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1635), 72}, - {-1}, {-1}, - {uniname2ctype_offset(str1638), 426}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1643), 62}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1654), 393}, + {uniname2ctype_offset(str1655), 269}, + {uniname2ctype_offset(str1656), 255}, {-1}, - {uniname2ctype_offset(str1654), 388}, - {uniname2ctype_offset(str1655), 265}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1658), 176}, + {-1}, {-1}, + {uniname2ctype_offset(str1661), 513}, {uniname2ctype_offset(str1662), 129}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1671), 114}, + {-1}, + {uniname2ctype_offset(str1664), 441}, + {uniname2ctype_offset(str1665), 431}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1671), 333}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1675), 457}, - {uniname2ctype_offset(str1676), 176}, - {uniname2ctype_offset(str1677), 303}, + {uniname2ctype_offset(str1675), 462}, + {-1}, + {uniname2ctype_offset(str1677), 308}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1682), 595}, - {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1682), 607}, + {-1}, + {uniname2ctype_offset(str1684), 199}, + {-1}, {uniname2ctype_offset(str1686), 93}, {uniname2ctype_offset(str1687), 141}, - {-1}, {-1}, {-1}, + {-1}, + {uniname2ctype_offset(str1689), 62}, + {-1}, {uniname2ctype_offset(str1691), 124}, - {uniname2ctype_offset(str1692), 121}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1699), 367}, - {-1}, {-1}, - {uniname2ctype_offset(str1702), 510}, - {uniname2ctype_offset(str1703), 533}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1699), 372}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1703), 176}, {uniname2ctype_offset(str1704), 207}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1714), 207}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1719), 121}, + {-1}, {-1}, + {uniname2ctype_offset(str1722), 352}, {-1}, - {uniname2ctype_offset(str1716), 419}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1722), 347}, - {-1}, - {uniname2ctype_offset(str1724), 554}, - {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1724), 563}, + {-1}, {-1}, + {uniname2ctype_offset(str1727), 450}, {uniname2ctype_offset(str1728), 221}, - {uniname2ctype_offset(str1729), 430}, + {uniname2ctype_offset(str1729), 435}, {uniname2ctype_offset(str1730), 222}, - {uniname2ctype_offset(str1731), 517}, - {uniname2ctype_offset(str1732), 238}, - {uniname2ctype_offset(str1733), 123}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1731), 524}, + {uniname2ctype_offset(str1732), 242}, + {-1}, {-1}, + {uniname2ctype_offset(str1735), 253}, + {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1740), 129}, {-1}, {uniname2ctype_offset(str1742), 161}, {-1}, {-1}, - {uniname2ctype_offset(str1745), 509}, - {uniname2ctype_offset(str1746), 390}, + {uniname2ctype_offset(str1745), 515}, + {uniname2ctype_offset(str1746), 395}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1750), 20}, {-1}, - {uniname2ctype_offset(str1752), 502}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1757), 501}, + {uniname2ctype_offset(str1752), 507}, + {uniname2ctype_offset(str1753), 148}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1757), 506}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1766), 73}, - {-1}, {-1}, - {uniname2ctype_offset(str1769), 362}, + {-1}, + {uniname2ctype_offset(str1768), 148}, + {uniname2ctype_offset(str1769), 367}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1776), 126}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1780), 65}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1788), 137}, {-1}, {-1}, - {uniname2ctype_offset(str1791), 233}, + {uniname2ctype_offset(str1779), 123}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1788), 97}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1793), 97}, + {uniname2ctype_offset(str1794), 84}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1806), 336}, + {-1}, {-1}, + {uniname2ctype_offset(str1806), 341}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1810), 599}, - {uniname2ctype_offset(str1811), 236}, - {-1}, - {uniname2ctype_offset(str1813), 255}, + {uniname2ctype_offset(str1810), 612}, + {uniname2ctype_offset(str1811), 240}, + {uniname2ctype_offset(str1812), 84}, + {uniname2ctype_offset(str1813), 259}, + {-1}, {-1}, + {uniname2ctype_offset(str1816), 71}, + {uniname2ctype_offset(str1817), 4}, + {uniname2ctype_offset(str1818), 237}, {-1}, {-1}, - {uniname2ctype_offset(str1816), 565}, - {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1821), 224}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1825), 258}, - {uniname2ctype_offset(str1826), 202}, - {-1}, - {uniname2ctype_offset(str1828), 387}, + {uniname2ctype_offset(str1822), 202}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1828), 392}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1838), 585}, + {uniname2ctype_offset(str1838), 596}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1842), 379}, - {uniname2ctype_offset(str1843), 134}, + {uniname2ctype_offset(str1842), 384}, + {-1}, {-1}, + {uniname2ctype_offset(str1845), 258}, {-1}, {-1}, - {uniname2ctype_offset(str1846), 481}, - {-1}, {uniname2ctype_offset(str1848), 109}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1861), 202}, + {-1}, + {uniname2ctype_offset(str1850), 239}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1855), 244}, + {-1}, + {uniname2ctype_offset(str1857), 202}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1866), 61}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1871), 479}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1878), 27}, + {uniname2ctype_offset(str1871), 484}, + {-1}, + {uniname2ctype_offset(str1873), 486}, {-1}, {-1}, - {uniname2ctype_offset(str1881), 63}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1891), 150}, - {uniname2ctype_offset(str1892), 562}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1896), 588}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1904), 440}, - {uniname2ctype_offset(str1905), 559}, - {uniname2ctype_offset(str1906), 150}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1911), 343}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1915), 165}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1928), 424}, - {uniname2ctype_offset(str1929), 417}, - {uniname2ctype_offset(str1930), 445}, + {uniname2ctype_offset(str1876), 573}, + {-1}, {-1}, + {uniname2ctype_offset(str1879), 8}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1888), 517}, + {uniname2ctype_offset(str1889), 541}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1896), 599}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1902), 424}, {-1}, - {uniname2ctype_offset(str1932), 400}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1936), 323}, + {uniname2ctype_offset(str1904), 445}, + {uniname2ctype_offset(str1905), 570}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1913), 143}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1947), 194}, - {-1}, {-1}, - {uniname2ctype_offset(str1950), 409}, - {uniname2ctype_offset(str1951), 12}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1958), 109}, + {uniname2ctype_offset(str1924), 143}, {-1}, {-1}, - {uniname2ctype_offset(str1961), 103}, - {-1}, {-1}, - {uniname2ctype_offset(str1964), 425}, + {uniname2ctype_offset(str1927), 63}, + {-1}, + {uniname2ctype_offset(str1929), 422}, {-1}, {-1}, - {uniname2ctype_offset(str1967), 477}, - {uniname2ctype_offset(str1968), 603}, + {uniname2ctype_offset(str1932), 405}, {-1}, {-1}, - {uniname2ctype_offset(str1971), 153}, + {uniname2ctype_offset(str1935), 257}, + {uniname2ctype_offset(str1936), 328}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str1985), 393}, + {uniname2ctype_offset(str1950), 414}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1956), 245}, + {-1}, + {uniname2ctype_offset(str1958), 109}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1964), 430}, + {-1}, {-1}, + {uniname2ctype_offset(str1967), 482}, + {uniname2ctype_offset(str1968), 616}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1976), 270}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str1985), 398}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str1991), 1}, {-1}, - {uniname2ctype_offset(str1993), 360}, + {uniname2ctype_offset(str1993), 365}, {uniname2ctype_offset(str1994), 175}, {-1}, {uniname2ctype_offset(str1996), 42}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2006), 395}, + {-1}, + {uniname2ctype_offset(str1998), 153}, + {-1}, {-1}, + {uniname2ctype_offset(str2001), 374}, + {uniname2ctype_offset(str2002), 576}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2010), 363}, + {uniname2ctype_offset(str2006), 400}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2014), 322}, + {uniname2ctype_offset(str2010), 368}, + {uniname2ctype_offset(str2011), 262}, + {uniname2ctype_offset(str2012), 548}, {-1}, - {uniname2ctype_offset(str2016), 209}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2023), 32}, - {uniname2ctype_offset(str2024), 489}, + {uniname2ctype_offset(str2014), 327}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2033), 78}, + {uniname2ctype_offset(str2023), 32}, + {uniname2ctype_offset(str2024), 494}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str2043), 17}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2048), 92}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2055), 92}, - {-1}, {-1}, - {uniname2ctype_offset(str2058), 240}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2049), 244}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2062), 130}, + {uniname2ctype_offset(str2062), 209}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str2070), 9}, {-1}, {-1}, - {uniname2ctype_offset(str2073), 330}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2078), 245}, + {uniname2ctype_offset(str2073), 335}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2077), 150}, + {uniname2ctype_offset(str2078), 249}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2083), 324}, - {uniname2ctype_offset(str2084), 154}, - {uniname2ctype_offset(str2085), 20}, + {uniname2ctype_offset(str2092), 150}, + {-1}, {-1}, + {uniname2ctype_offset(str2095), 346}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2093), 192}, - {-1}, - {uniname2ctype_offset(str2095), 341}, - {-1}, - {uniname2ctype_offset(str2097), 214}, - {uniname2ctype_offset(str2098), 8}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2102), 43}, {uniname2ctype_offset(str2103), 162}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2109), 215}, - {uniname2ctype_offset(str2110), 123}, - {-1}, - {uniname2ctype_offset(str2112), 210}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2107), 215}, + {uniname2ctype_offset(str2108), 130}, {-1}, - {uniname2ctype_offset(str2114), 159}, + {uniname2ctype_offset(str2110), 329}, + {uniname2ctype_offset(str2111), 154}, + {-1}, {-1}, + {uniname2ctype_offset(str2114), 429}, {-1}, {-1}, {uniname2ctype_offset(str2117), 174}, - {-1}, - {uniname2ctype_offset(str2119), 216}, + {uniname2ctype_offset(str2118), 375}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2122), 254}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {uniname2ctype_offset(str2135), 128}, {-1}, - {uniname2ctype_offset(str2137), 172}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2137), 12}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2141), 159}, + {-1}, {-1}, {-1}, {uniname2ctype_offset(str2145), 52}, - {uniname2ctype_offset(str2146), 401}, + {uniname2ctype_offset(str2146), 406}, {-1}, {-1}, {uniname2ctype_offset(str2149), 221}, - {uniname2ctype_offset(str2150), 121}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2156), 123}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2162), 408}, {-1}, {-1}, - {uniname2ctype_offset(str2153), 352}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2161), 233}, - {-1}, {-1}, {-1}, {uniname2ctype_offset(str2165), 174}, {uniname2ctype_offset(str2166), 5}, - {uniname2ctype_offset(str2167), 112}, - {-1}, {-1}, - {uniname2ctype_offset(str2170), 216}, {-1}, {-1}, - {uniname2ctype_offset(str2173), 87}, + {uniname2ctype_offset(str2169), 87}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2177), 121}, + {uniname2ctype_offset(str2178), 87}, + {-1}, {-1}, {uniname2ctype_offset(str2181), 139}, - {uniname2ctype_offset(str2182), 87}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2188), 237}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2195), 344}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2195), 339}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2199), 159}, - {-1}, - {uniname2ctype_offset(str2201), 89}, - {-1}, {-1}, - {uniname2ctype_offset(str2204), 369}, {-1}, {-1}, {uniname2ctype_offset(str2207), 196}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2217), 128}, - {uniname2ctype_offset(str2218), 526}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2213), 371}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2222), 458}, + {uniname2ctype_offset(str2217), 128}, + {uniname2ctype_offset(str2218), 533}, + {uniname2ctype_offset(str2219), 78}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2224), 443}, {-1}, - {uniname2ctype_offset(str2224), 438}, - {uniname2ctype_offset(str2225), 459}, - {-1}, {-1}, - {uniname2ctype_offset(str2228), 82}, + {uniname2ctype_offset(str2226), 159}, + {-1}, + {uniname2ctype_offset(str2228), 89}, {uniname2ctype_offset(str2229), 35}, + {uniname2ctype_offset(str2230), 432}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2234), 92}, + {uniname2ctype_offset(str2235), 479}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2235), 474}, + {uniname2ctype_offset(str2241), 92}, {-1}, {-1}, - {uniname2ctype_offset(str2238), 154}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2244), 428}, + {uniname2ctype_offset(str2244), 433}, {-1}, {-1}, {uniname2ctype_offset(str2247), 36}, - {uniname2ctype_offset(str2248), 569}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2252), 240}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2258), 443}, - {-1}, - {uniname2ctype_offset(str2260), 235}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2268), 597}, + {uniname2ctype_offset(str2248), 580}, + {uniname2ctype_offset(str2249), 463}, {-1}, {-1}, - {uniname2ctype_offset(str2271), 18}, - {uniname2ctype_offset(str2272), 254}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2278), 124}, + {uniname2ctype_offset(str2252), 464}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2282), 230}, - {-1}, {-1}, - {uniname2ctype_offset(str2285), 38}, + {uniname2ctype_offset(str2265), 154}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2279), 192}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2283), 214}, + {-1}, + {uniname2ctype_offset(str2285), 448}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2294), 88}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2302), 368}, - {-1}, {-1}, - {uniname2ctype_offset(str2305), 205}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str2312), 177}, {-1}, {-1}, - {uniname2ctype_offset(str2315), 568}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2321), 370}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2339), 600}, + {uniname2ctype_offset(str2315), 579}, + {uniname2ctype_offset(str2316), 611}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2323), 172}, + {uniname2ctype_offset(str2324), 124}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2329), 373}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2343), 560}, - {uniname2ctype_offset(str2344), 82}, + {uniname2ctype_offset(str2333), 134}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2357), 237}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2361), 571}, - {-1}, {-1}, - {uniname2ctype_offset(str2364), 309}, - {uniname2ctype_offset(str2365), 403}, + {uniname2ctype_offset(str2343), 571}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2373), 37}, - {uniname2ctype_offset(str2374), 377}, - {uniname2ctype_offset(str2375), 197}, - {-1}, {-1}, - {uniname2ctype_offset(str2378), 237}, + {uniname2ctype_offset(str2351), 205}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2361), 582}, + {-1}, {-1}, + {uniname2ctype_offset(str2364), 314}, {-1}, - {uniname2ctype_offset(str2389), 204}, + {uniname2ctype_offset(str2366), 613}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2396), 376}, - {uniname2ctype_offset(str2397), 406}, - {uniname2ctype_offset(str2398), 398}, + {uniname2ctype_offset(str2373), 37}, + {uniname2ctype_offset(str2374), 382}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2415), 402}, - {uniname2ctype_offset(str2416), 366}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2397), 411}, + {uniname2ctype_offset(str2398), 403}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2405), 165}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2414), 82}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2421), 197}, + {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str2427), 23}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2431), 270}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2433), 427}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2437), 194}, + {-1}, {-1}, {uniname2ctype_offset(str2440), 100}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2451), 29}, + {uniname2ctype_offset(str2451), 103}, {-1}, {-1}, {uniname2ctype_offset(str2454), 220}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2458), 495}, - {-1}, - {uniname2ctype_offset(str2460), 246}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2460), 250}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2470), 433}, + {uniname2ctype_offset(str2470), 438}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str2475), 142}, + {-1}, {-1}, + {uniname2ctype_offset(str2478), 29}, + {uniname2ctype_offset(str2479), 351}, + {-1}, + {uniname2ctype_offset(str2481), 376}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2479), 346}, - {uniname2ctype_offset(str2480), 50}, - {uniname2ctype_offset(str2481), 371}, + {uniname2ctype_offset(str2485), 500}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, + {uniname2ctype_offset(str2506), 518}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2506), 511}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2513), 592}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2519), 466}, + {uniname2ctype_offset(str2513), 603}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2529), 165}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2534), 325}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2540), 226}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2530), 82}, + {-1}, {-1}, + {uniname2ctype_offset(str2533), 49}, + {uniname2ctype_offset(str2534), 330}, {-1}, - {uniname2ctype_offset(str2542), 125}, - {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2536), 469}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {uniname2ctype_offset(str2548), 118}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2552), 462}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2561), 435}, - {uniname2ctype_offset(str2562), 251}, - {-1}, - {uniname2ctype_offset(str2564), 357}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2562), 185}, {-1}, - {uniname2ctype_offset(str2566), 185}, - {uniname2ctype_offset(str2567), 304}, + {uniname2ctype_offset(str2564), 362}, {-1}, {-1}, - {uniname2ctype_offset(str2570), 476}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2575), 185}, - {uniname2ctype_offset(str2576), 99}, + {uniname2ctype_offset(str2567), 309}, {-1}, {-1}, - {uniname2ctype_offset(str2579), 133}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2586), 199}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2595), 327}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2603), 198}, + {uniname2ctype_offset(str2570), 481}, + {uniname2ctype_offset(str2571), 185}, + {uniname2ctype_offset(str2572), 99}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2576), 268}, + {-1}, {-1}, + {uniname2ctype_offset(str2579), 467}, {-1}, {-1}, - {uniname2ctype_offset(str2606), 359}, + {uniname2ctype_offset(str2582), 381}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2588), 440}, + {uniname2ctype_offset(str2589), 228}, + {-1}, + {uniname2ctype_offset(str2591), 332}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, + {uniname2ctype_offset(str2602), 210}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2606), 364}, {-1}, {-1}, {uniname2ctype_offset(str2609), 55}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2614), 538}, + {uniname2ctype_offset(str2610), 546}, + {uniname2ctype_offset(str2611), 179}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2624), 226}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2631), 107}, + {uniname2ctype_offset(str2627), 107}, {-1}, {-1}, - {uniname2ctype_offset(str2634), 266}, + {uniname2ctype_offset(str2630), 198}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2643), 437}, - {uniname2ctype_offset(str2644), 576}, + {uniname2ctype_offset(str2639), 442}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2644), 41}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2648), 243}, - {-1}, - {uniname2ctype_offset(str2650), 78}, - {-1}, {-1}, - {uniname2ctype_offset(str2653), 183}, - {-1}, {-1}, - {uniname2ctype_offset(str2656), 353}, + {uniname2ctype_offset(str2648), 247}, + {uniname2ctype_offset(str2649), 183}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2663), 182}, - {-1}, - {uniname2ctype_offset(str2665), 83}, - {-1}, {-1}, - {uniname2ctype_offset(str2668), 94}, + {uniname2ctype_offset(str2656), 358}, + {uniname2ctype_offset(str2657), 112}, {-1}, - {uniname2ctype_offset(str2670), 593}, - {-1}, {-1}, - {uniname2ctype_offset(str2673), 84}, - {-1}, {-1}, - {uniname2ctype_offset(str2676), 83}, + {uniname2ctype_offset(str2659), 182}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2666), 50}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2670), 605}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str2688), 139}, - {-1}, {-1}, - {uniname2ctype_offset(str2691), 84}, - {uniname2ctype_offset(str2692), 211}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2692), 83}, {-1}, {uniname2ctype_offset(str2694), 48}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2698), 119}, - {-1}, {-1}, - {uniname2ctype_offset(str2701), 418}, - {uniname2ctype_offset(str2702), 89}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2721), 198}, + {uniname2ctype_offset(str2695), 94}, {-1}, - {uniname2ctype_offset(str2723), 4}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2732), 130}, + {uniname2ctype_offset(str2697), 423}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2703), 83}, + {uniname2ctype_offset(str2704), 220}, + {uniname2ctype_offset(str2705), 471}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2719), 211}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2747), 54}, + {uniname2ctype_offset(str2725), 119}, + {uniname2ctype_offset(str2726), 226}, {-1}, {-1}, - {uniname2ctype_offset(str2750), 534}, + {uniname2ctype_offset(str2729), 89}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2760), 152}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2764), 241}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2745), 54}, + {-1}, {-1}, + {uniname2ctype_offset(str2748), 198}, + {-1}, + {uniname2ctype_offset(str2750), 542}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2759), 130}, + {-1}, + {uniname2ctype_offset(str2761), 18}, + {uniname2ctype_offset(str2762), 258}, + {-1}, {-1}, + {uniname2ctype_offset(str2765), 133}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2768), 90}, - {uniname2ctype_offset(str2769), 468}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2777), 28}, + {uniname2ctype_offset(str2769), 473}, + {-1}, {-1}, + {uniname2ctype_offset(str2772), 199}, {-1}, {-1}, - {uniname2ctype_offset(str2780), 227}, + {uniname2ctype_offset(str2775), 38}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, + {-1}, {-1}, + {uniname2ctype_offset(str2787), 152}, + {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str2793), 34}, + {-1}, + {uniname2ctype_offset(str2795), 90}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2816), 296}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2810), 226}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2816), 301}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2821), 378}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2834), 349}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2841), 222}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2848), 253}, + {uniname2ctype_offset(str2821), 383}, + {-1}, {-1}, + {uniname2ctype_offset(str2824), 132}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2830), 587}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2852), 291}, + {uniname2ctype_offset(str2834), 354}, + {uniname2ctype_offset(str2835), 132}, + {uniname2ctype_offset(str2836), 78}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, + {uniname2ctype_offset(str2847), 241}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2852), 296}, {-1}, {-1}, {uniname2ctype_offset(str2855), 190}, {uniname2ctype_offset(str2856), 66}, {-1}, {-1}, - {uniname2ctype_offset(str2859), 412}, - {-1}, {-1}, - {uniname2ctype_offset(str2862), 211}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2867), 295}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2871), 243}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2859), 417}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2867), 300}, + {uniname2ctype_offset(str2868), 241}, {-1}, {-1}, - {uniname2ctype_offset(str2883), 242}, + {uniname2ctype_offset(str2871), 247}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2879), 204}, {-1}, - {uniname2ctype_offset(str2885), 147}, - {uniname2ctype_offset(str2886), 133}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2904), 449}, - {uniname2ctype_offset(str2905), 262}, - {uniname2ctype_offset(str2906), 575}, - {-1}, {-1}, - {uniname2ctype_offset(str2909), 549}, + {uniname2ctype_offset(str2881), 147}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2885), 65}, + {uniname2ctype_offset(str2886), 604}, {-1}, {-1}, - {uniname2ctype_offset(str2912), 244}, + {uniname2ctype_offset(str2889), 211}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2899), 254}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2926), 51}, + {uniname2ctype_offset(str2904), 454}, + {uniname2ctype_offset(str2905), 266}, + {-1}, + {uniname2ctype_offset(str2907), 266}, + {-1}, + {uniname2ctype_offset(str2909), 558}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2915), 297}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, - {uniname2ctype_offset(str2938), 242}, - {-1}, {-1}, - {uniname2ctype_offset(str2941), 348}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2941), 353}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2963), 225}, - {uniname2ctype_offset(str2964), 503}, - {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2959), 225}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str2964), 508}, + {-1}, + {uniname2ctype_offset(str2966), 231}, {uniname2ctype_offset(str2967), 43}, + {-1}, {-1}, + {uniname2ctype_offset(str2970), 88}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {uniname2ctype_offset(str2980), 195}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2984), 547}, + {uniname2ctype_offset(str2984), 556}, {-1}, {uniname2ctype_offset(str2986), 118}, {uniname2ctype_offset(str2987), 54}, - {uniname2ctype_offset(str2988), 456}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str2993), 234}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3000), 16}, + {uniname2ctype_offset(str2988), 461}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {uniname2ctype_offset(str3001), 180}, {uniname2ctype_offset(str3002), 64}, {-1}, {-1}, - {uniname2ctype_offset(str3005), 460}, - {uniname2ctype_offset(str3006), 555}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3012), 80}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3028), 250}, + {uniname2ctype_offset(str3005), 465}, + {uniname2ctype_offset(str3006), 564}, + {-1}, + {uniname2ctype_offset(str3008), 80}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3045), 577}, + {-1}, + {uniname2ctype_offset(str3019), 165}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3055), 454}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3045), 588}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3053), 229}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3072), 133}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3089), 146}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3098), 580}, - {uniname2ctype_offset(str3099), 463}, - {uniname2ctype_offset(str3100), 103}, - {uniname2ctype_offset(str3101), 223}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3107), 299}, + {uniname2ctype_offset(str3079), 239}, + {-1}, {-1}, + {uniname2ctype_offset(str3082), 459}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3099), 468}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3107), 304}, {-1}, - {uniname2ctype_offset(str3109), 301}, + {uniname2ctype_offset(str3109), 306}, {-1}, {uniname2ctype_offset(str3111), 191}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, + {-1}, + {uniname2ctype_offset(str3122), 99}, + {-1}, {-1}, {uniname2ctype_offset(str3125), 191}, - {uniname2ctype_offset(str3126), 99}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3134), 223}, + {uniname2ctype_offset(str3142), 566}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3158), 314}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3165), 439}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3169), 47}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3176), 381}, + {uniname2ctype_offset(str3176), 386}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3180), 317}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3185), 126}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3194), 204}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3180), 322}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3188), 444}, {-1}, - {uniname2ctype_offset(str3205), 227}, - {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3190), 204}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3199), 248}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3204), 319}, + {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str3209), 62}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str3215), 180}, {-1}, {-1}, - {uniname2ctype_offset(str3218), 201}, + {uniname2ctype_offset(str3218), 125}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3237), 375}, + {uniname2ctype_offset(str3237), 380}, {-1}, - {uniname2ctype_offset(str3239), 294}, - {uniname2ctype_offset(str3240), 290}, + {uniname2ctype_offset(str3239), 299}, + {uniname2ctype_offset(str3240), 295}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str3248), 213}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3254), 190}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3254), 245}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3260), 201}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3267), 28}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3275), 146}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3284), 591}, {-1}, {-1}, - {uniname2ctype_offset(str3266), 421}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3287), 223}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, - {uniname2ctype_offset(str3286), 235}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, - {uniname2ctype_offset(str3297), 297}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3303), 293}, + {uniname2ctype_offset(str3297), 302}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3309), 178}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3317), 249}, + {uniname2ctype_offset(str3303), 298}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3320), 223}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str3328), 63}, - {uniname2ctype_offset(str3329), 587}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3348), 392}, - {uniname2ctype_offset(str3349), 423}, + {uniname2ctype_offset(str3329), 598}, {-1}, - {uniname2ctype_offset(str3351), 96}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3360), 234}, - {-1}, {-1}, - {uniname2ctype_offset(str3363), 96}, + {uniname2ctype_offset(str3331), 222}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3336), 178}, {-1}, - {uniname2ctype_offset(str3365), 578}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3338), 257}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3348), 397}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3355), 47}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3361), 589}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3371), 126}, + {uniname2ctype_offset(str3372), 16}, + {uniname2ctype_offset(str3373), 246}, + {-1}, {-1}, + {uniname2ctype_offset(str3376), 538}, + {-1}, + {uniname2ctype_offset(str3378), 96}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, + {uniname2ctype_offset(str3390), 96}, + {uniname2ctype_offset(str3391), 231}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3396), 586}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, + {uniname2ctype_offset(str3416), 51}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3433), 205}, {-1}, {-1}, + {uniname2ctype_offset(str3428), 246}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str3436), 213}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3439), 49}, - {-1}, {-1}, - {uniname2ctype_offset(str3442), 464}, + {uniname2ctype_offset(str3448), 426}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3458), 10}, - {-1}, - {uniname2ctype_offset(str3460), 589}, + {-1}, {-1}, + {uniname2ctype_offset(str3460), 600}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3479), 205}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3483), 238}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, + {uniname2ctype_offset(str3504), 10}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3511), 401}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3511), 396}, - {uniname2ctype_offset(str3512), 487}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3517), 179}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3531), 153}, - {uniname2ctype_offset(str3532), 550}, + {-1}, {-1}, + {uniname2ctype_offset(str3532), 559}, {uniname2ctype_offset(str3533), 57}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3550), 41}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3558), 59}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3585), 153}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3590), 103}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3604), 59}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3613), 214}, - {uniname2ctype_offset(str3614), 220}, - {-1}, - {uniname2ctype_offset(str3616), 45}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, - {uniname2ctype_offset(str3628), 71}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, - {uniname2ctype_offset(str3648), 450}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3648), 455}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str3664), 177}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3698), 492}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3705), 311}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, - {uniname2ctype_offset(str3703), 132}, - {-1}, - {uniname2ctype_offset(str3705), 306}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3714), 132}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3721), 428}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3744), 190}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3766), 452}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, + {uniname2ctype_offset(str3765), 179}, + {uniname2ctype_offset(str3766), 457}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3791), 65}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3805), 250}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3819), 162}, - {-1}, - {uniname2ctype_offset(str3821), 292}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3799), 214}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3807), 253}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, - {uniname2ctype_offset(str3842), 182}, - {-1}, {-1}, - {uniname2ctype_offset(str3845), 248}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3850), 238}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3891), 30}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3884), 420}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3888), 182}, + {-1}, {-1}, + {uniname2ctype_offset(str3891), 252}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3924), 405}, + {uniname2ctype_offset(str3924), 410}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3937), 30}, + {-1}, {-1}, {-1}, {-1}, {uniname2ctype_offset(str3942), 100}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3949), 269}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3976), 581}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3976), 570}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str3991), 147}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str3995), 147}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, @@ -41483,79 +42700,74 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, - {uniname2ctype_offset(str4087), 415}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str4106), 45}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4109), 119}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, + {uniname2ctype_offset(str4136), 119}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4137), 244}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4162), 544}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4175), 545}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str4194), 391}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4203), 80}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4254), 116}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str4281), 116}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str4287), 307}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4276), 116}, + {uniname2ctype_offset(str4291), 80}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, + {uniname2ctype_offset(str4303), 116}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4291), 302}, + {uniname2ctype_offset(str4309), 162}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4321), 75}, + {uniname2ctype_offset(str4348), 553}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str4361), 554}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, - {uniname2ctype_offset(str4360), 231}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4397), 386}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4405), 298}, - {uniname2ctype_offset(str4406), 300}, + {uniname2ctype_offset(str4432), 303}, + {uniname2ctype_offset(str4433), 305}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4460), 90}, + {uniname2ctype_offset(str4487), 90}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4485), 179}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4528), 46}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str4542), 235}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, @@ -41565,15 +42777,17 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, + {uniname2ctype_offset(str4627), 248}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4674), 601}, + {uniname2ctype_offset(str4674), 614}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4683), 451}, + {uniname2ctype_offset(str4683), 456}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, @@ -41584,8 +42798,7 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4772), 394}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str4772), 399}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, @@ -41597,6 +42810,8 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str4877), 75}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, @@ -41604,38 +42819,17 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4948), 590}, -#endif /* USE_UNICODE_PROPERTIES */ - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, -#ifndef USE_UNICODE_PROPERTIES - {uniname2ctype_offset(str6), 12}, - {uniname2ctype_offset(str7), 7}, - {uniname2ctype_offset(str8), 15}, - {uniname2ctype_offset(str9), 1}, - {uniname2ctype_offset(str10), 13}, - {uniname2ctype_offset(str11), 11}, - {uniname2ctype_offset(str12), 10}, - {uniname2ctype_offset(str13), 14}, - {uniname2ctype_offset(str14), 3}, - {uniname2ctype_offset(str15), 9}, - {uniname2ctype_offset(str16), 8}, - {uniname2ctype_offset(str17), 6}, - {uniname2ctype_offset(str18), 5}, - {uniname2ctype_offset(str19), 4}, - {uniname2ctype_offset(str20), 2} -#else /* USE_UNICODE_PROPERTIES */ - {uniname2ctype_offset(str4955), 155}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str4986), 413}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str4986), 418}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str5018), 46}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, @@ -41645,11 +42839,13 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, - {uniname2ctype_offset(str5114), 225}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str5134), 601}, + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str5141), 155}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, @@ -41667,6 +42863,8 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str5300), 225}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, @@ -41701,8 +42899,6 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {uniname2ctype_offset(str5608), 155}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, @@ -41744,6 +42940,8 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {-1}, {-1}, {-1}, {-1}, + {uniname2ctype_offset(str5980), 155}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, @@ -41757,8 +42955,7 @@ uniname2ctype_p (register const char *str, register size_t len) {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, - {-1}, {-1}, {-1}, - {uniname2ctype_offset(str6098), 602} + {uniname2ctype_offset(str6098), 615} #endif /* USE_UNICODE_PROPERTIES */ }; @@ -41789,22 +42986,22 @@ uniname2ctype(const UChar *name, unsigned int len) return -1; } #if defined ONIG_UNICODE_VERSION_STRING && !( \ - ONIG_UNICODE_VERSION_MAJOR == 12 && \ - ONIG_UNICODE_VERSION_MINOR == 1 && \ + ONIG_UNICODE_VERSION_MAJOR == 13 && \ + ONIG_UNICODE_VERSION_MINOR == 0 && \ ONIG_UNICODE_VERSION_TEENY == 0 && \ 1) # error ONIG_UNICODE_VERSION_STRING mismatch #endif -#define ONIG_UNICODE_VERSION_STRING "12.1.0" -#define ONIG_UNICODE_VERSION_MAJOR 12 -#define ONIG_UNICODE_VERSION_MINOR 1 +#define ONIG_UNICODE_VERSION_STRING "13.0.0" +#define ONIG_UNICODE_VERSION_MAJOR 13 +#define ONIG_UNICODE_VERSION_MINOR 0 #define ONIG_UNICODE_VERSION_TEENY 0 #if defined ONIG_UNICODE_EMOJI_VERSION_STRING && !( \ - ONIG_UNICODE_EMOJI_VERSION_MAJOR == 12 && \ + ONIG_UNICODE_EMOJI_VERSION_MAJOR == 13 && \ ONIG_UNICODE_EMOJI_VERSION_MINOR == 0 && \ 1) # error ONIG_UNICODE_EMOJI_VERSION_STRING mismatch #endif -#define ONIG_UNICODE_EMOJI_VERSION_STRING "12.0" -#define ONIG_UNICODE_EMOJI_VERSION_MAJOR 12 +#define ONIG_UNICODE_EMOJI_VERSION_STRING "13.0" +#define ONIG_UNICODE_EMOJI_VERSION_MAJOR 13 #define ONIG_UNICODE_EMOJI_VERSION_MINOR 0 diff --git a/ruby/enc/unicode/case-folding.rb b/ruby/enc/unicode/case-folding.rb old mode 100755 new mode 100644 index 362d6ebfd..4a29fdebf --- a/ruby/enc/unicode/case-folding.rb +++ b/ruby/enc/unicode/case-folding.rb @@ -232,7 +232,7 @@ def initialize(mapping_directory) @version = nil IO.foreach(File.join(mapping_directory, 'UnicodeData.txt'), mode: "rb") do |line| next if line =~ /^ - * Shengyuan Liu - * - * This file is part of libsquash, distributed under the MIT License - * For full terms see the included LICENSE file - */ - -#ifndef ENCLOSE_IO_H_999BC1DA -#define ENCLOSE_IO_H_999BC1DA - -#include "enclose_io_prelude.h" -#include "enclose_io_common.h" -#include "enclose_io_win32.h" -#include "enclose_io_unix.h" - -#endif diff --git a/ruby/enclose_io_common.h b/ruby/enclose_io_common.h deleted file mode 100644 index 5bab74232..000000000 --- a/ruby/enclose_io_common.h +++ /dev/null @@ -1,372 +0,0 @@ -/* - * Copyright (c) 2017 - 2020 Minqi Pan - * Shengyuan Liu - * - * This file is part of libsquash, distributed under the MIT License - * For full terms see the included LICENSE file - */ - -#ifndef ENCLOSE_IO_COMMON_H_39323079 -#define ENCLOSE_IO_COMMON_H_39323079 - -#include "squash.h" - -#ifndef __USE_XOPEN_EXTENDED -#define __USE_XOPEN_EXTENDED -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include /* PATH_MAX */ - -#ifdef __linux__ -#include /* PATH_MAX */ -#endif - -#ifdef _WIN32 -#include -#include -#else -#include -#include -#include -#include -#include -#include -#endif - -extern sqfs *enclose_io_fs; -extern sqfs_path enclose_io_cwd; - -#define ENCLOSE_IO_PP_NARG(...) \ - ENCLOSE_IO_PP_NARG_(__VA_ARGS__,ENCLOSE_IO_PP_RSEQ_N()) -#define ENCLOSE_IO_PP_NARG_(...) \ - ENCLOSE_IO_PP_ARG_N(__VA_ARGS__) -#define ENCLOSE_IO_PP_ARG_N( \ - _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \ - _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ - _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \ - _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \ - _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \ - _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \ - _61,_62,_63, N, ...) N -#define ENCLOSE_IO_PP_RSEQ_N() \ - 63,62,61,60, \ - 59,58,57,56,55,54,53,52,51,50, \ - 49,48,47,46,45,44,43,42,41,40, \ - 39,38,37,36,35,34,33,32,31,30, \ - 29,28,27,26,25,24,23,22,21,20, \ - 19,18,17,16,15,14,13,12,11,10, \ - 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 - -short enclose_io_is_path(char *pathname); -short enclose_io_is_path_w(wchar_t *pathname); -short enclose_io_is_relative_w(wchar_t *pathname); - -#define ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN(PATH, RETURN1, RETURN2) \ - if (mkdir_workdir) { \ - sqfs_path mkdir_workdir_expanded; \ - char *mkdir_workdir_expanded_head; \ - size_t mkdir_workdir_len; \ - size_t memcpy_len; \ - struct stat mkdir_workdir_buf; \ - mkdir_workdir_len = strlen(mkdir_workdir); \ - memcpy(mkdir_workdir_expanded, mkdir_workdir, mkdir_workdir_len); \ - memcpy_len = strlen(PATH); \ - if (SQUASHFS_PATH_LEN - mkdir_workdir_len < memcpy_len) { \ - memcpy_len = SQUASHFS_PATH_LEN - mkdir_workdir_len; \ - } \ - memcpy(&mkdir_workdir_expanded[mkdir_workdir_len], (PATH), memcpy_len); \ - mkdir_workdir_expanded[mkdir_workdir_len + memcpy_len] = '\0'; \ - mkdir_workdir_expanded_head = strstr(mkdir_workdir_expanded, enclose_io_mkdir_scope); \ - if (mkdir_workdir_expanded_head && '/' == mkdir_workdir_expanded_head[strlen(enclose_io_mkdir_scope)]) { \ - memmove(mkdir_workdir_expanded_head, mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope), strlen(mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope)) + 1); \ - if (0 == stat(mkdir_workdir_expanded, &mkdir_workdir_buf)) { \ - return(RETURN2); \ - } \ - } \ - } \ - return(RETURN1) - -#define ENCLOSE_IO_GEN_EXPANDED_NAME(path) \ - enclose_io_cwd_len = strlen(enclose_io_cwd); \ - memcpy(enclose_io_expanded, enclose_io_cwd, enclose_io_cwd_len); \ - memcpy_len = strlen(path); \ - if (SQUASHFS_PATH_LEN - enclose_io_cwd_len < memcpy_len) { memcpy_len = SQUASHFS_PATH_LEN - enclose_io_cwd_len; } \ - memcpy(&enclose_io_expanded[enclose_io_cwd_len], (path), memcpy_len); \ - enclose_io_expanded[enclose_io_cwd_len + memcpy_len] = '\0' - -//TODO maybe use WideCharToMultiByte -#define W_ENCLOSE_IO_PATH_CONVERT(path) \ - enclose_io_converted = (char *)enclose_io_converted_storage; \ - enclose_io_converted_length = wcstombs(enclose_io_converted_storage, (path), SQUASHFS_PATH_LEN); \ - if ((size_t)-1 == enclose_io_converted_length) { enclose_io_converted_length = 0; } \ - enclose_io_converted[enclose_io_converted_length] = '\0'; \ - if (strnlen(enclose_io_converted_storage, 4) >= 4 && (0 == strncmp(enclose_io_converted_storage, "\\\\?\\", 4) || 0 == strncmp(enclose_io_converted_storage, "//?/", 4))) { \ - if (strnlen(enclose_io_converted_storage, 6) >= 6 && ':' == enclose_io_converted_storage[5]) { \ - enclose_io_converted += 6; \ - } else { \ - enclose_io_converted += 4; \ - } \ - } else if (strnlen(enclose_io_converted_storage, 3) >= 3 && (0 == strncmp(enclose_io_converted_storage + 1, ":\\", 2) || 0 == strncmp(enclose_io_converted_storage + 1, ":/", 2))) { \ - enclose_io_converted += 2; \ - } \ - for (enclose_io_i = enclose_io_converted; *enclose_io_i; enclose_io_i++) { \ - if ('\\' == *enclose_io_i) { *enclose_io_i = '/'; } \ - } - -#define ENCLOSE_IO_SET_LAST_ERROR do { \ - if (ENOMEM == errno) { \ - SetLastError(ERROR_NOT_ENOUGH_MEMORY); \ - _doserrno = ERROR_NOT_ENOUGH_MEMORY; \ - } else if (ENOENT == errno) { \ - SetLastError(ERROR_FILE_NOT_FOUND); \ - _doserrno = ERROR_FILE_NOT_FOUND; \ - } else if (EBADF == errno) { \ - SetLastError(ERROR_INVALID_HANDLE); \ - _doserrno = ERROR_INVALID_HANDLE; \ - } else if (ENAMETOOLONG == errno) { \ - SetLastError(ERROR_BUFFER_OVERFLOW); \ - _doserrno = ERROR_BUFFER_OVERFLOW; \ - } else { \ - SetLastError(ERROR_INVALID_FUNCTION); \ - _doserrno = ERROR_INVALID_FUNCTION; \ - } \ - } while (0) - -int enclose_io_exepath(char* buffer, size_t* size); -int enclose_io_dos_return(int statement); -short enclose_io_if(const char* path); -SQUASH_OS_PATH enclose_io_ifextract(const char* path, const char* ext_name); -void enclose_io_chdir_helper(const char *path); -int enclose_io_chdir(const char *path); -char *enclose_io_getcwd(char *buf, size_t size); -char *enclose_io_getwd(char *buf); -int enclose_io_stat(const char *path, struct stat *buf); -int enclose_io_fstat(int fildes, struct stat *buf); -int enclose_io_open(int nargs, const char *pathname, int flags, ...); -int enclose_io_openat(int fd, int nargs, const char *pathname, int flags, ...); -int enclose_io_close(int fildes); -ssize_t enclose_io_read(int fildes, void *buf, size_t nbyte); -off_t enclose_io_lseek(int fildes, off_t offset, int whence); - -#ifdef _WIN32 - -#include "enclose_io_winapi.h" - -short enclose_io_if_w(const wchar_t* path); -int enclose_io__open(const char *pathname, int flags); -int enclose_io__wopen(const wchar_t *pathname, int flags, int mode); -int enclose_io__wmkdir(wchar_t* pathname); -int enclose_io_open_osfhandle(intptr_t osfhandle, int flags); -intptr_t enclose_io_get_osfhandle(int fd); -int enclose_io_wchdir(const wchar_t *path); -wchar_t *enclose_io_wgetcwd(wchar_t *buf, size_t size); -int enclose_io_fstati64(int fildes, struct _stati64 *buf); -__int64 enclose_io_lseeki64(int fildes, __int64 offset, int whence); - -HANDLE -EncloseIOCreateFileW( - LPCWSTR lpFileName, - DWORD dwDesiredAccess, - DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile -); - -NTSTATUS -EncloseIOpNtQueryDirectoryFile( - HANDLE FileHandle, - HANDLE Event, - PIO_APC_ROUTINE ApcRoutine, - PVOID ApcContext, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FileInformation, - ULONG Length, - FILE_INFORMATION_CLASS FileInformationClass, - BOOLEAN ReturnSingleEntry, - PUNICODE_STRING FileName, - BOOLEAN RestartScan -); - -BOOL -EncloseIOCloseHandle( - HANDLE hObject -); - -DWORD -EncloseIOGetFileAttributesW( - LPCWSTR lpFileName -); - -BOOL -EncloseIOGetFileAttributesExW( - LPCWSTR lpFileName, - GET_FILEEX_INFO_LEVELS fInfoLevelId, - LPVOID lpFileInformation -); - -NTSTATUS -EncloseIOpNtQueryInformationFile( - HANDLE FileHandle, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FileInformation, - ULONG Length, - FILE_INFORMATION_CLASS FileInformationClass); - -NTSTATUS -EncloseIOpNtQueryVolumeInformationFile( - HANDLE FileHandle, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FsInformation, - ULONG Length, - FS_INFORMATION_CLASS FsInformationClass); - -BOOL -EncloseIOReadFile( - HANDLE hFile, - LPVOID lpBuffer, - DWORD nNumberOfBytesToRead, - LPDWORD lpNumberOfBytesRead, - LPOVERLAPPED lpOverlapped -); - -BOOL -EncloseIOGetHandleInformation( - HANDLE hObject, - LPDWORD lpdwFlags -); - -DWORD -EncloseIOGetFileType( - HANDLE hFile -); - -HANDLE -EncloseIOFindFirstFileW( - LPCWSTR lpFileName, - LPWIN32_FIND_DATAW lpFindFileData -); - -BOOL -EncloseIOFindNextFileW( - HANDLE hFindFile, - LPWIN32_FIND_DATAW lpFindFileData -); - -BOOL -EncloseIOFindClose( - HANDLE hFindFile -); - -BOOL -EncloseIODeviceIoControl( - HANDLE hDevice, - DWORD dwIoControlCode, - LPVOID lpInBuffer, - DWORD nInBufferSize, - LPVOID lpOutBuffer, - DWORD nOutBufferSize, - LPDWORD lpBytesReturned, - LPOVERLAPPED lpOverlapped -); - -HANDLE -EncloseIOCreateIoCompletionPort( - HANDLE FileHandle, - HANDLE ExistingCompletionPort, - ULONG_PTR CompletionKey, - DWORD NumberOfConcurrentThreads -); - -BOOL -EncloseIOReadDirectoryChangesW( - HANDLE hDirectory, - LPVOID lpBuffer, - DWORD nBufferLength, - BOOL bWatchSubtree, - DWORD dwNotifyFilter, - LPDWORD lpBytesReturned, - LPOVERLAPPED lpOverlapped, - LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine -); - -HMODULE -EncloseIOLoadLibraryExW( - LPCWSTR lpLibFileName, - HANDLE hFile, - DWORD dwFlags -); - -BOOL -EncloseIOCreateProcessW( - LPCWSTR lpApplicationName, - LPWSTR lpCommandLine, - LPSECURITY_ATTRIBUTES lpProcessAttributes, - LPSECURITY_ATTRIBUTES lpThreadAttributes, - BOOL bInheritHandles, - DWORD dwCreationFlags, - LPVOID lpEnvironment, - LPCWSTR lpCurrentDirectory, - LPSTARTUPINFOW lpStartupInfo, - LPPROCESS_INFORMATION lpProcessInformation -); - -BOOL -EncloseIOSetCurrentDirectoryW( - LPCWSTR lpPathName -); - -DWORD -EncloseIOGetCurrentDirectoryW( - DWORD nBufferLength, - LPWSTR lpBuffer -); - -DWORD -EncloseIOGetFullPathNameW( - LPCWSTR lpFileName, - DWORD nBufferLength, - LPWSTR lpBuffer, - LPWSTR* lpFilePart -); - -BOOL -EncloseIOGetFileInformationByHandle( - HANDLE hFile, - LPBY_HANDLE_FILE_INFORMATION lpFileInformation -); - -#else // ifdef _WIN32 -int enclose_io_lstat(const char *path, struct stat *buf); -ssize_t enclose_io_readlink(const char *path, char *buf, size_t bufsize); -DIR * enclose_io_opendir(const char *filename); -DIR * enclose_io_fdopendir(int fd); -int enclose_io_closedir(DIR *dirp); -struct SQUASH_DIRENT * enclose_io_readdir(DIR *dirp); -long enclose_io_telldir(DIR *dirp); -void enclose_io_seekdir(DIR *dirp, long loc); -void enclose_io_rewinddir(DIR *dirp); -int enclose_io_dirfd(DIR *dirp); -int enclose_io_scandir(const char *dirname, struct SQUASH_DIRENT ***namelist, - int(*select)(const struct SQUASH_DIRENT *), - int(*compar)(const struct SQUASH_DIRENT **, const struct SQUASH_DIRENT **)); -ssize_t enclose_io_pread(int d, void *buf, size_t nbyte, off_t offset); -ssize_t enclose_io_readv(int d, const struct iovec *iov, int iovcnt); -void* enclose_io_dlopen(const char* path, int mode); -int enclose_io_access(const char *path, int mode); -int enclose_io_mkdir(const char *path, mode_t mode); -int enclose_io_execv(const char *path, char *const argv[]); - -#endif // ifdef _WIN32 - -#endif diff --git a/ruby/enclose_io_prelude.h b/ruby/enclose_io_prelude.h deleted file mode 100644 index ac877cc64..000000000 --- a/ruby/enclose_io_prelude.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2017 - 2020 Minqi Pan - * Shengyuan Liu - * - * This file is part of libsquash, distributed under the MIT License - * For full terms see the included LICENSE file - */ - -#ifndef ENCLOSE_IO_PRELUDE_H_E46A560C -#define ENCLOSE_IO_PRELUDE_H_E46A560C - -#ifdef _WIN32 -#define WINDOWS_H_A80B5674 -typedef unsigned short sqfs_mode_t; -typedef uint32_t sqfs_id_t; -typedef DWORD64 sqfs_off_t; -#endif // _WIN32 - -#endif /* end of include guard: ENCLOSE_IO_PRELUDE_H_E46A560C */ diff --git a/ruby/enclose_io_unix.c b/ruby/enclose_io_unix.c deleted file mode 100644 index 7ee07b77b..000000000 --- a/ruby/enclose_io_unix.c +++ /dev/null @@ -1,1435 +0,0 @@ -/* - * Copyright (c) 2017 - 2020 Minqi Pan - * Shengyuan Liu - * - * This file is part of libsquash, distributed under the MIT License - * For full terms see the included LICENSE file - */ - -#include "enclose_io_common.h" - -#ifdef _WIN32 -#include -#include -#include -#include -#include -#include -#include -#include -#define MAXPATHLEN 4096 -#define mode_t unsigned int -#endif - -#ifdef __linux__ -#include -#endif - -#ifdef __APPLE__ -#include -#include -#include -#include -#include // PATH_MAX -#endif - -sqfs *enclose_io_fs; -sqfs_path enclose_io_cwd; /* must end with a slash */ -SQUASH_OS_PATH generic_mkdir_workdir = NULL; -char *mkdir_workdir = NULL; /* must NOT end with a slash */ -char *enclose_io_mkdir_scope = "/__enclose_io_memfs__"; /* must NOT end with a slash */ - -#ifdef _WIN32 -#include -static void mkdir_workdir_halt_rm(const wchar_t *sPath) -{ - SHFILEOPSTRUCTW fileop; - size_t len = wcslen(sPath); - wchar_t pFrom[MAX_PATH * 2]; - - if (len > MAX_PATH) { - return; - } - wcscpy(pFrom, sPath); - pFrom[len] = 0; - pFrom[len + 1] = 0; - - fileop.hwnd = NULL; - fileop.wFunc = FO_DELETE; - fileop.pFrom = pFrom; - fileop.pTo = NULL; - fileop.fFlags = FOF_NOCONFIRMATION | FOF_SILENT; - fileop.fAnyOperationsAborted = FALSE; - fileop.lpszProgressTitle = NULL; - fileop.hNameMappings = NULL; - - SHFileOperationW(&fileop); -} -#else -static int mkdir_workdir_halt_rm(const char *arg1, const struct stat *ptr, int flag, struct FTW *ftwarg) -{ - if (FTW_D == flag || FTW_DNR == flag || FTW_DP == flag) { - rmdir(arg1); - } else { - unlink(arg1); - } -} -#endif - -static void mkdir_workdir_halt() -{ -#ifdef _WIN32 - mkdir_workdir_halt_rm(generic_mkdir_workdir); -#else - nftw(mkdir_workdir, mkdir_workdir_halt_rm, 20, FTW_PHYS | FTW_MOUNT | FTW_DEPTH); -#endif -} - -static char * enclose_io_mkdir_workdir() -{ - if (NULL == mkdir_workdir) { - MUTEX_LOCK(&squash_global_mutex); - if (NULL == mkdir_workdir) { - generic_mkdir_workdir = squash_tmpf(squash_tmpdir(), NULL); - if (NULL == generic_mkdir_workdir) { - mkdir_workdir = NULL; - return NULL; - } -#ifdef _WIN32 - mkdir_workdir = malloc(MAX_PATH * 3); - if (NULL == mkdir_workdir) { - mkdir_workdir = NULL; - free(generic_mkdir_workdir); - generic_mkdir_workdir = NULL; - return NULL; - } - if ((size_t)-1 == wcstombs(mkdir_workdir, generic_mkdir_workdir, MAX_PATH)) { - free(mkdir_workdir); - mkdir_workdir = NULL; - free(generic_mkdir_workdir); - generic_mkdir_workdir = NULL; - return NULL; - } - if (mkdir(mkdir_workdir)) { - free(mkdir_workdir); - mkdir_workdir = NULL; - free(generic_mkdir_workdir); - generic_mkdir_workdir = NULL; - return NULL; - } - if (atexit(mkdir_workdir_halt)) { - free(mkdir_workdir); - mkdir_workdir = NULL; - free(generic_mkdir_workdir); - generic_mkdir_workdir = NULL; - return NULL; - } -#else - mkdir_workdir = generic_mkdir_workdir; - if (mkdir(mkdir_workdir, S_IRWXU)) { - mkdir_workdir = NULL; - free(generic_mkdir_workdir); - generic_mkdir_workdir = NULL; - return NULL; - } - if (atexit(mkdir_workdir_halt)) { - mkdir_workdir = NULL; - free(generic_mkdir_workdir); - generic_mkdir_workdir = NULL; - return NULL; - } -#endif - } - MUTEX_UNLOCK(&squash_global_mutex); - } - return mkdir_workdir; -} - -static int enclose_io_mkdir_consult(char *path, mode_t mode) { - int ret; - char *head = NULL; - char *p = NULL; - char *p_left = NULL; - struct stat buf; - char *path2; - - while (strlen(path) - 1 >= 0 && '/' == path[strlen(path) - 1]) { - path[strlen(path) - 1] = 0; - } - - head = strstr(path, enclose_io_mkdir_scope); - if (NULL == head || '/' != head[strlen(enclose_io_mkdir_scope)]) { - errno = ENOENT; - return -1; - } - - for (p = head + strlen(enclose_io_mkdir_scope) + 1; *p; p++) { - if (*p == '/') { - *p = 0; - if (0 == squash_stat(enclose_io_fs, head, &buf) && S_ISDIR(buf.st_mode)) { - path2 = strdup(path); - if (NULL == path2) { - return -1; - } else { - memmove( - path2 + (head-path), - path2 + (head-path) + strlen(enclose_io_mkdir_scope), - strlen(path2 + (head-path) + strlen(enclose_io_mkdir_scope)) + 1 - ); -#ifdef _WIN32 - mkdir(path2); -#else - mkdir(path2, mode); -#endif - free(path2); - } - *p = '/'; - } else { - *p = '/'; - break; - } - } - } - memmove( - head, - head + strlen(enclose_io_mkdir_scope), - strlen(head + strlen(enclose_io_mkdir_scope)) + 1 - ); -#ifdef _WIN32 - return mkdir(path); -#else - return mkdir(path, mode); -#endif -} - -int enclose_io_mkdir(const char *path, mode_t mode) -{ - if (enclose_io_cwd[0] && '/' != *path) { - struct stat buf; - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - int ret; - int ret_inner; - const char* workdir; - const char* workdir_path; - - ENCLOSE_IO_GEN_EXPANDED_NAME(path); - ret = squash_stat(enclose_io_fs, enclose_io_expanded, &buf); - workdir = enclose_io_mkdir_workdir(); - if (NULL == workdir) { - errno = ENOENT; - return -1; - } - workdir_path = malloc(strlen(workdir) + strlen(enclose_io_expanded) + 1); - if (NULL == workdir_path) { - errno = ENOMEM; - return -1; - } - strcpy(workdir_path, workdir); - strcat(workdir_path, enclose_io_expanded); - ret_inner = enclose_io_mkdir_consult(workdir_path, mode); - free(workdir_path); - if (0 == ret) { - errno = EEXIST; - return -1; - } else { - return ret_inner; - } - } else if (enclose_io_is_path(path)) { - struct stat buf; - int ret; - int ret_inner; - const char* workdir; - const char* workdir_path; - - ret = squash_stat(enclose_io_fs, path, &buf); - workdir = enclose_io_mkdir_workdir(); - if (NULL == workdir) { - errno = ENOENT; - return -1; - } - workdir_path = malloc(strlen(workdir) + strlen(path) + 1); - if (NULL == workdir_path) { - errno = ENOMEM; - return -1; - } - strcpy(workdir_path, workdir); - strcat(workdir_path, path); - ret_inner = enclose_io_mkdir_consult(workdir_path, mode); - free(workdir_path); - if (0 == ret) { - errno = EEXIST; - return -1; - } else { - return ret_inner; - } - } else { - return mkdir(path, mode); - } -} - -#ifdef _WIN32 -int enclose_io__wmkdir(wchar_t* pathname) -{ - if (enclose_io_cwd[0] && enclose_io_is_relative_w(pathname)) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(pathname); - ENCLOSE_IO_GEN_EXPANDED_NAME(enclose_io_converted); - return enclose_io_dos_return(enclose_io_mkdir(enclose_io_expanded, 0777)); - } else if (enclose_io_is_path_w(pathname)) { - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(pathname); - return enclose_io_dos_return(enclose_io_mkdir(enclose_io_converted, 0777)); - } else { - return _wmkdir(pathname); - } -} -#else -int enclose_io__exec(const char *path, char *const argv[]) -{ - int i, ret, argc; - char **new_argv, **argv_memory = NULL; - size_t exec_path_len = 2 * PATH_MAX; - char* exec_path = (char*)(malloc(exec_path_len)); - - ret = enclose_io_exepath(exec_path, &exec_path_len); - assert(0 == ret); - - ret = setenv("ENCLOSE_IO_USE_ORIGINAL_RUBY", "true", 1); - ret = setenv("ENCLOSE_IO_USE_ORIGINAL_NODE", "true", 1); - assert(0 == ret); - - argc = 1; - while (argv[argc]) { ++argc; } - new_argv = (char **)malloc( (2 + argc) * sizeof(char *)); - assert(new_argv); - new_argv[0] = argv[0]; - new_argv[1] = path; - for (i = 1; i < argc; ++i) { - new_argv[2 + i - 1] = argv[i]; - } - new_argv[2 + argc - 1] = NULL; - - ret = execv(exec_path, new_argv); - - free(exec_path); - free(new_argv); - return ret; -} - -int enclose_io_execv(const char *path, char *const argv[]) -{ - const char* squash_extracted_path = NULL; - - if (enclose_io_cwd[0] && '/' != *path) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - ENCLOSE_IO_GEN_EXPANDED_NAME(path); - return enclose_io__exec(enclose_io_expanded, argv); - } else if (enclose_io_is_path(path)) { - return enclose_io__exec(path, argv); - } else { - return execv(path, argv); - } -} - -int enclose_io_lstat(const char *path, struct stat *buf) -{ - if (enclose_io_cwd[0] && '/' != *path) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - ENCLOSE_IO_GEN_EXPANDED_NAME(path); - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - squash_lstat(enclose_io_fs, enclose_io_expanded, buf), - lstat(mkdir_workdir_expanded, buf) - ); - } else if (enclose_io_is_path(path)) { - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - path, - squash_lstat(enclose_io_fs, path, buf), - lstat(mkdir_workdir_expanded, buf) - ); - } else { - return lstat(path, buf); - } -} - -ssize_t enclose_io_readlink(const char *path, char *buf, size_t bufsize) -{ - if (enclose_io_cwd[0] && '/' != *path) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - ENCLOSE_IO_GEN_EXPANDED_NAME(path); - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - squash_readlink(enclose_io_fs, enclose_io_expanded, buf, bufsize), - readlink(mkdir_workdir_expanded, buf, bufsize) - ); - } - else if (enclose_io_is_path(path)) { - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - path, - squash_readlink(enclose_io_fs, path, buf, bufsize), - readlink(mkdir_workdir_expanded, buf, bufsize) - ); - } - else { - return readlink(path, buf, bufsize); - } -} - -DIR * enclose_io_opendir(const char *filename) -{ - if (enclose_io_cwd[0] && '/' != *filename) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - ENCLOSE_IO_GEN_EXPANDED_NAME(filename); - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - (DIR *)squash_opendir(enclose_io_fs, enclose_io_expanded), - opendir(mkdir_workdir_expanded) - ); - } - else if (enclose_io_is_path(filename)) { - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - filename, - (DIR *)squash_opendir(enclose_io_fs, filename), - opendir(mkdir_workdir_expanded) - ); - } - else { - return opendir(filename); - } -} - -DIR * enclose_io_fdopendir(int fd) -{ - sqfs_err error; - short found; - SQUASH_DIR *dir; - int *handle; - struct squash_file *file; - sqfs *fs; - - if (!SQUASH_VALID_VFD(fd)) - { - return fdopendir(fd); - } - - file = squash_global_fdtable.fds[fd]; - - dir = calloc(1, sizeof(SQUASH_DIR)); - - if (NULL == dir) - { - errno = ENOMEM; - return NULL; - } - - fs = file->fs; - - dir->fs = fs; - dir->entries = NULL; - dir->nr = 0; - dir->filename = strdup(file->filename); - dir->fd = fd; - dir->actual_nr = 0; - dir->loc = 0; - - error = sqfs_inode_get(fs, &dir->node, sqfs_inode_root(fs)); - if (SQFS_OK != error) - { - goto failure; - } - error = sqfs_lookup_path_inner(fs, &dir->node, dir->filename, &found, 1); - if (SQFS_OK != error) - { - goto failure; - } - if (!found) - { - errno = ENOENT; - goto failure; - } - error = sqfs_dir_open(fs, &dir->node, &dir->dir, 0); - if (SQFS_OK != error) - { - goto failure; - } - - handle = (int *)(squash_global_fdtable.fds[dir->fd]->payload); - - MUTEX_LOCK(&squash_global_mutex); - free(handle); - squash_global_fdtable.fds[dir->fd]->payload = (void *)dir; - MUTEX_UNLOCK(&squash_global_mutex); - - return dir; -failure: - if (!errno) { - errno = ENOENT; - } - free(dir); - return NULL; -} - -int enclose_io_closedir(DIR *dirp) -{ - if (squash_find_entry(dirp)) { - return squash_closedir((SQUASH_DIR *)dirp); - } - else { - return closedir(dirp); - } -} - -struct SQUASH_DIRENT * enclose_io_readdir(DIR *dirp) -{ - if (squash_find_entry(dirp)) { - return squash_readdir((SQUASH_DIR *)dirp); - } - else { - return readdir(dirp); - } -} - -long enclose_io_telldir(DIR *dirp) -{ - if (squash_find_entry(dirp)) { - return squash_telldir((SQUASH_DIR *)dirp); - } - else { - return telldir(dirp); - } -} - -void enclose_io_seekdir(DIR *dirp, long loc) -{ - if (squash_find_entry(dirp)) { - return squash_seekdir((SQUASH_DIR *)dirp, loc); - } - else { - return seekdir(dirp, loc); - } -} - -void enclose_io_rewinddir(DIR *dirp) -{ - if (squash_find_entry(dirp)) { - return squash_rewinddir((SQUASH_DIR *)dirp); - } - else { - return rewinddir(dirp); - } -} - -int enclose_io_dirfd(DIR *dirp) -{ - if (squash_find_entry(dirp)) { - return squash_dirfd((SQUASH_DIR *)dirp); - } - else { - return dirfd(dirp); - } -} - -int enclose_io_scandir(const char *dirname, struct SQUASH_DIRENT ***namelist, - int(*select)(const struct SQUASH_DIRENT *), - int(*compar)(const struct SQUASH_DIRENT **, const struct SQUASH_DIRENT **)) -{ - if (enclose_io_cwd[0] && '/' != *dirname) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - ENCLOSE_IO_GEN_EXPANDED_NAME(dirname); - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - squash_scandir(enclose_io_fs, enclose_io_expanded, namelist, select, compar), - scandir(mkdir_workdir_expanded, namelist, select, compar) - ); - } - else if (enclose_io_is_path(dirname)) { - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - dirname, - squash_scandir(enclose_io_fs, dirname, namelist, select, compar), - scandir(mkdir_workdir_expanded, namelist, select, compar) - ); - } - else { - return scandir(dirname, namelist, select, compar); - } -} - -ssize_t enclose_io_pread(int d, void *buf, size_t nbyte, off_t offset) -{ - if (SQUASH_VALID_VFD(d)) { - off_t lseek_off, backup_off; - ssize_t read_ssize; - backup_off = squash_lseek(d, 0, SQUASH_SEEK_CUR); - if (-1 == backup_off) { - return -1; - } - lseek_off = squash_lseek(d, offset, SQUASH_SEEK_SET); - if (-1 == lseek_off) { - return -1; - } - read_ssize = squash_read(d, buf, nbyte); - if (-1 == read_ssize) { - return -1; - } - lseek_off = squash_lseek(d, backup_off, SQUASH_SEEK_SET); - assert(backup_off == lseek_off); - return read_ssize; - } else { - return pread(d, buf, nbyte, offset); - } -} - -ssize_t enclose_io_readv(int d, const struct iovec *iov, int iovcnt) -{ - if (SQUASH_VALID_VFD(d)) { - int i; - ssize_t i_ssize; - ssize_t ret = 0; - for (i = 0; i < iovcnt; ++i) { - i_ssize = squash_read(d, iov[i].iov_base, iov[i].iov_len); - if (-1 == i_ssize) { - return -1; - } else if (0 == i_ssize) { - break; - } else { - ret += i_ssize; - } - } - return ret; - } else { - return readv(d, iov, iovcnt); - } -} - -void* enclose_io_dlopen(const char* path, int mode) -{ - return dlopen(enclose_io_ifextract(path, NULL), mode); -} - -int enclose_io_access(const char *path, int mode) -{ - if (enclose_io_cwd[0] && '/' != *path) { - struct stat buf; - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - ENCLOSE_IO_GEN_EXPANDED_NAME(path); - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - squash_stat(enclose_io_fs, enclose_io_expanded, &buf), - access(mkdir_workdir_expanded, &buf) - ); - } else if (enclose_io_is_path(path)) { - struct stat buf; - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - path, - squash_stat(enclose_io_fs, path, &buf), - access(mkdir_workdir_expanded, &buf) - ); - } else { - return access(path, mode); - } -} - -#endif // !_WIN32 - -int enclose_io_dos_return(int statement) { -#ifdef _WIN32 - int ret = (statement); - if (-1 == ret) { - ENCLOSE_IO_SET_LAST_ERROR; - return ret; - } else { - return ret; - } -#else - return (statement); -#endif // _WIN32 -} - -short enclose_io_if(const char* path) -{ - if (enclose_io_cwd[0] && '/' != *path) { - return 1; - } else if (enclose_io_is_path(path)) { - return 1; - } else { - return 0; - } -} - -SQUASH_OS_PATH enclose_io_ifextract(const char* path, const char* ext_name) -{ - if (enclose_io_cwd[0] && '/' != *path) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - ENCLOSE_IO_GEN_EXPANDED_NAME(path); - return squash_extract(enclose_io_fs, enclose_io_expanded, ext_name); - } - else if (enclose_io_is_path(path)) { - return squash_extract(enclose_io_fs, path, ext_name); - } - else { - return path; - } -} - -void enclose_io_chdir_helper(const char *path) -{ - size_t memcpy_len = strlen(path); - if (SQUASHFS_PATH_LEN - 1 < memcpy_len) { - memcpy_len = SQUASHFS_PATH_LEN - 1; - } - memcpy(enclose_io_cwd, path, memcpy_len); - while ('/' == enclose_io_cwd[memcpy_len - 1]) { - memcpy_len--; - } - enclose_io_cwd[memcpy_len] = '/'; - enclose_io_cwd[memcpy_len + 1] = '\0'; -} - -int enclose_io_chdir(const char *path) -{ - if (enclose_io_is_path(path)) { - if (mkdir_workdir) { - sqfs_path mkdir_workdir_expanded; - char *mkdir_workdir_expanded_head; - size_t mkdir_workdir_len; - size_t memcpy_len; - struct stat mkdir_workdir_buf; - mkdir_workdir_len = strlen(mkdir_workdir); - memcpy(mkdir_workdir_expanded, mkdir_workdir, mkdir_workdir_len); - memcpy_len = strlen(path); - if (SQUASHFS_PATH_LEN - mkdir_workdir_len < memcpy_len) { - memcpy_len = SQUASHFS_PATH_LEN - mkdir_workdir_len; - } - memcpy(&mkdir_workdir_expanded[mkdir_workdir_len], (path), memcpy_len); - mkdir_workdir_expanded[mkdir_workdir_len + memcpy_len] = '\0'; - mkdir_workdir_expanded_head = strstr(mkdir_workdir_expanded, enclose_io_mkdir_scope); - if (mkdir_workdir_expanded_head && '/' == mkdir_workdir_expanded_head[strlen(enclose_io_mkdir_scope)]) { - memmove( - mkdir_workdir_expanded_head, - mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope), - strlen(mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope)) + 1 - ); - if (0 == stat(mkdir_workdir_expanded, &mkdir_workdir_buf)) { - int ret = chdir(mkdir_workdir_expanded); - if (0 == ret) { - enclose_io_chdir_helper(path); - } - return ret; - } - } - } - - struct stat st; - int ret; - - ret = squash_stat(enclose_io_fs, path, &st); - if (-1 == ret) { - #ifdef _WIN32 - ENCLOSE_IO_SET_LAST_ERROR; - #endif - return -1; - } - if (S_ISDIR(st.st_mode)) { - enclose_io_chdir_helper(path); - return 0; - } else { - errno = ENOENT; - #ifdef _WIN32 - ENCLOSE_IO_SET_LAST_ERROR; - #endif - return -1; - } - } else { - int ret; - - ret = chdir(path); - if (0 == ret) { - enclose_io_cwd[0] = '\0'; - } - return ret; - } -} - -char *enclose_io_getcwd(char *buf, size_t size) -{ - if (enclose_io_cwd[0]) { - size_t memcpy_len = strlen(enclose_io_cwd); - if (NULL == buf) { - buf = malloc((memcpy_len + 1) * sizeof(char)); - if (NULL == buf) { - errno = ENOMEM; - #ifdef _WIN32 - ENCLOSE_IO_SET_LAST_ERROR; - #endif - return NULL; - } - } else { - if (size - 1 < memcpy_len) { - memcpy_len = size - 1; - } - } - memcpy(buf, enclose_io_cwd, memcpy_len); - assert(memcpy_len - 1 >= 0); - buf[memcpy_len - 1] = '\0'; - return buf; - } else { - return getcwd(buf, size); - } -} - -char *enclose_io_getwd(char *buf) -{ - return enclose_io_getcwd(buf, MAXPATHLEN); -} - -#ifdef _WIN32 -short enclose_io_if_w(const wchar_t* path) -{ - if (enclose_io_cwd[0] && enclose_io_is_relative_w(path)) { - return 1; - } else if (enclose_io_is_path_w(path)) { - return 1; - } else { - return 0; - } -} - -BOOL -EncloseIOSetCurrentDirectoryW( - LPCWSTR lpPathName -) -{ - if (enclose_io_is_path_w(lpPathName)) { - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - int ret; - - W_ENCLOSE_IO_PATH_CONVERT(lpPathName); - - if (mkdir_workdir) { - sqfs_path mkdir_workdir_expanded; - char *mkdir_workdir_expanded_head; - size_t mkdir_workdir_len; - size_t memcpy_len; - struct stat mkdir_workdir_buf; - mkdir_workdir_len = strlen(mkdir_workdir); - memcpy(mkdir_workdir_expanded, mkdir_workdir, mkdir_workdir_len); - memcpy_len = strlen(enclose_io_converted); - if (SQUASHFS_PATH_LEN - mkdir_workdir_len < memcpy_len) { - memcpy_len = SQUASHFS_PATH_LEN - mkdir_workdir_len; - } - memcpy(&mkdir_workdir_expanded[mkdir_workdir_len], (enclose_io_converted), memcpy_len); - mkdir_workdir_expanded[mkdir_workdir_len + memcpy_len] = '\0'; - mkdir_workdir_expanded_head = strstr(mkdir_workdir_expanded, enclose_io_mkdir_scope); - if (mkdir_workdir_expanded_head && '/' == mkdir_workdir_expanded_head[strlen(enclose_io_mkdir_scope)]) { - memmove( - mkdir_workdir_expanded_head, - mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope), - strlen(mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope)) + 1 - ); - if (0 == stat(mkdir_workdir_expanded, &mkdir_workdir_buf)) { - BOOL ret = SetCurrentDirectory(mkdir_workdir_expanded); - if (ret) { - enclose_io_chdir_helper(enclose_io_converted); - } - return ret; - } - } - } - - ret = enclose_io_chdir(enclose_io_converted); - if (0 == ret) { - return 1; - } else { - return 0; - } - } else { - BOOL ret = SetCurrentDirectoryW(lpPathName); - // If the function succeeds, the return value is nonzero. - if (ret) { - enclose_io_cwd[0] = '\0'; - } - return ret; - } -} - -DWORD -EncloseIOGetCurrentDirectoryW( - DWORD nBufferLength, - LPWSTR lpBuffer -) -{ - if (enclose_io_cwd[0]) { - size_t x; - char *ret = enclose_io_getcwd(NULL, 0); - if (NULL == ret) { - return 0; - } - x = mbstowcs(lpBuffer, ret, nBufferLength - 1); - free(ret); - if (NULL == lpBuffer) { - return x + 1; - } else { - return x; - } - } else { - return GetCurrentDirectoryW( - nBufferLength, - lpBuffer - ); - } -} - -DWORD -EncloseIOGetFullPathNameW( - LPCWSTR lpFileName, - DWORD nBufferLength, - LPWSTR lpBuffer, - LPWSTR* lpFilePart -) -{ - DWORD retval = 0; - - if (enclose_io_cwd[0] && enclose_io_is_relative_w(lpFileName)) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - wchar_t enclose_io_expanded_w[SQUASHFS_PATH_LEN + 1]; - - W_ENCLOSE_IO_PATH_CONVERT(lpFileName); - ENCLOSE_IO_GEN_EXPANDED_NAME(enclose_io_converted); - - mbstowcs(enclose_io_expanded_w, enclose_io_expanded, SQUASHFS_PATH_LEN); - enclose_io_expanded_w[SQUASHFS_PATH_LEN] = 0; - - retval = GetFullPathNameW( - enclose_io_expanded_w, - nBufferLength, - lpBuffer, - lpFilePart - ); - } else { - retval = GetFullPathNameW( - lpFileName, - nBufferLength, - lpBuffer, - lpFilePart - ); - } - - if (0 == retval || retval > nBufferLength) { - return retval; - } - - if (0 == wcsncmp(lpBuffer + 1, L":\\__enclose_io_memfs__", 22)) { - assert(NULL == lpFilePart); // TODO - memmove(lpBuffer, lpBuffer + 2, (retval - 2) * sizeof(wchar_t)); - return retval - 2; - } - - return retval; -} - -#endif // _WIN32 - -int enclose_io_stat(const char *path, struct stat *buf) -{ - if (enclose_io_cwd[0] && '/' != *path) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - ENCLOSE_IO_GEN_EXPANDED_NAME(path); - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - enclose_io_dos_return(squash_stat(enclose_io_fs, enclose_io_expanded, buf)), - stat(mkdir_workdir_expanded, buf) - ); - } else if (enclose_io_is_path(path)) { - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - path, - enclose_io_dos_return(squash_stat(enclose_io_fs, path, buf)), - stat(mkdir_workdir_expanded, buf) - ); - } else { - return stat(path, buf); - } -} - -int enclose_io_fstat(int fildes, struct stat *buf) -{ - if (SQUASH_VALID_VFD(fildes)) { - return enclose_io_dos_return(squash_fstat(fildes, buf)); - } else { - return fstat(fildes, buf); - } -} - -int enclose_io_open(int nargs, const char *pathname, int flags, ...) -{ - if (enclose_io_cwd[0] && '/' != *pathname) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - ENCLOSE_IO_GEN_EXPANDED_NAME(pathname); - if (!(O_CREAT & flags)) { - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - enclose_io_dos_return(squash_open(enclose_io_fs, enclose_io_expanded)), - open(mkdir_workdir_expanded, flags) - ); - } else { - va_list args; - mode_t mode; - assert(3 == nargs); - va_start(args, flags); - mode = va_arg(args, mode_t); - va_end(args); - char *dir_thereof_ptr = strrchr(enclose_io_expanded, '/'); - if (dir_thereof_ptr) { - *dir_thereof_ptr = 0; - enclose_io_mkdir(enclose_io_expanded, 0777); - *dir_thereof_ptr = '/'; - } - if (mkdir_workdir) { - sqfs_path mkdir_workdir_expanded; - char *mkdir_workdir_expanded_head; - size_t mkdir_workdir_len; - size_t memcpy_len; - struct stat mkdir_workdir_buf; - mkdir_workdir_len = strlen(mkdir_workdir); - memcpy(mkdir_workdir_expanded, mkdir_workdir, mkdir_workdir_len); - memcpy_len = strlen(enclose_io_expanded); - if (SQUASHFS_PATH_LEN - mkdir_workdir_len < memcpy_len) { - memcpy_len = SQUASHFS_PATH_LEN - mkdir_workdir_len; - } - memcpy(&mkdir_workdir_expanded[mkdir_workdir_len], enclose_io_expanded, memcpy_len); - mkdir_workdir_expanded[mkdir_workdir_len + memcpy_len] = '\0'; - mkdir_workdir_expanded_head = strstr(mkdir_workdir_expanded, enclose_io_mkdir_scope); - if (mkdir_workdir_expanded_head && '/' == mkdir_workdir_expanded_head[strlen(enclose_io_mkdir_scope)]) { - memmove( - mkdir_workdir_expanded_head, - mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope), - strlen(mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope)) + 1 - ); - return enclose_io_dos_return(open(mkdir_workdir_expanded, flags, mode)); - } else { - errno = ENOENT; - return enclose_io_dos_return(-1); - } - } else { - errno = ENOENT; - return enclose_io_dos_return(-1); - } - } - } else if (enclose_io_is_path(pathname)) { - if (!(O_CREAT & flags)) { - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - pathname, - enclose_io_dos_return(squash_open(enclose_io_fs, pathname)), - open(mkdir_workdir_expanded, flags) - ); - } else { - va_list args; - mode_t mode; - assert(3 == nargs); - va_start(args, flags); - mode = va_arg(args, mode_t); - va_end(args); - char *dir_thereof_ptr = strrchr(pathname, '/'); - if (dir_thereof_ptr) { - *dir_thereof_ptr = 0; - enclose_io_mkdir(pathname, 0777); - *dir_thereof_ptr = '/'; - } - if (mkdir_workdir) { - sqfs_path mkdir_workdir_expanded; - char *mkdir_workdir_expanded_head; - size_t mkdir_workdir_len; - size_t memcpy_len; - struct stat mkdir_workdir_buf; - mkdir_workdir_len = strlen(mkdir_workdir); - memcpy(mkdir_workdir_expanded, mkdir_workdir, mkdir_workdir_len); - memcpy_len = strlen(pathname); - if (SQUASHFS_PATH_LEN - mkdir_workdir_len < memcpy_len) { - memcpy_len = SQUASHFS_PATH_LEN - mkdir_workdir_len; - } - memcpy(&mkdir_workdir_expanded[mkdir_workdir_len], pathname, memcpy_len); - mkdir_workdir_expanded[mkdir_workdir_len + memcpy_len] = '\0'; - mkdir_workdir_expanded_head = strstr(mkdir_workdir_expanded, enclose_io_mkdir_scope); - if (mkdir_workdir_expanded_head && '/' == mkdir_workdir_expanded_head[strlen(enclose_io_mkdir_scope)]) { - memmove( - mkdir_workdir_expanded_head, - mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope), - strlen(mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope)) + 1 - ); - return enclose_io_dos_return(open(mkdir_workdir_expanded, flags, mode)); - } else { - errno = ENOENT; - return enclose_io_dos_return(-1); - } - } else { - errno = ENOENT; - return enclose_io_dos_return(-1); - } - } - } else { - if (2 == nargs) { - return open(pathname, flags); - } else { - va_list args; - mode_t mode; - va_start(args, flags); - mode = va_arg(args, mode_t); - va_end(args); - return open(pathname, flags, mode); - } - } -} - -int enclose_io_close(int fildes) -{ - if (SQUASH_VALID_VFD(fildes)) { - return enclose_io_dos_return(squash_close(fildes)); - } else { - return close(fildes); - } -} - -ssize_t enclose_io_read(int fildes, void *buf, size_t nbyte) -{ - if (SQUASH_VALID_VFD(fildes)) { - return enclose_io_dos_return(squash_read(fildes, buf, nbyte)); - } else { - return read(fildes, buf, nbyte); - } -} - -off_t enclose_io_lseek(int fildes, off_t offset, int whence) -{ - if (SQUASH_VALID_VFD(fildes)) { - return enclose_io_dos_return(squash_lseek(fildes, offset, whence)); - } else { - return lseek(fildes, offset, whence); - } -} - -short enclose_io_is_path(char *pathname) -{ - if (strnlen((pathname), 21) >= 21) { - if (0 == strncmp((pathname), "/__enclose_io_memfs__", 21) -#ifdef _WIN32 - || 0 == strncmp((pathname), "\\__enclose_io_memfs__", 21) -#endif - ) { - return 1; - } - } -#ifdef _WIN32 - if (strnlen((pathname), 23) >= 23) { - if (0 == strncmp((pathname) + 1, ":/__enclose_io_memfs__", 22) - || 0 == strncmp((pathname) + 1, ":\\__enclose_io_memfs__", 22) - ) { - return 1; - } - } - if (strnlen((pathname), 24) >= 24) { - if (0 == strncmp((pathname), "\\\\?\\__enclose_io_memfs__", 24) || - 0 == strncmp((pathname), "//?/__enclose_io_memfs__", 24)) { - return 1; - } - } - if (strnlen((pathname), 27) >= 27) { - if (0 == strncmp((pathname), "\\\\?\\", 4) || - 0 == strncmp((pathname), "//?/", 4)) { - if (0 == strncmp((pathname) + 5, ":\\__enclose_io_memfs__", 22) || - 0 == strncmp((pathname) + 5, ":/__enclose_io_memfs__", 22)) { - return 1; - } - } - } -#endif - return 0; -} - -#ifdef _WIN32 -short enclose_io_is_path_w(wchar_t *pathname) -{ - if (wcsnlen((pathname), 21) >= 21) { - if (0 == wcsncmp((pathname), L"/__enclose_io_memfs__", 21) - || 0 == wcsncmp((pathname), L"\\__enclose_io_memfs__", 21) - ) { - return 1; - } - } - if (wcsnlen((pathname), 23) >= 23) { - if (0 == wcsncmp((pathname) + 1, L":/__enclose_io_memfs__", 22) - || 0 == wcsncmp((pathname) + 1, L":\\__enclose_io_memfs__", 22) - ) { - return 1; - } - } - if (wcsnlen((pathname), 24) >= 24) { - if (0 == wcsncmp((pathname), L"\\\\?\\__enclose_io_memfs__", 24) || - 0 == wcsncmp((pathname), L"//?/__enclose_io_memfs__", 24)) { - return 1; - } - } - if (wcsnlen((pathname), 27) >= 27) { - if (0 == wcsncmp((pathname), L"\\\\?\\", 4) || - 0 == wcsncmp((pathname), L"//?/", 4)) { - if (0 == wcsncmp((pathname) + 5, L":\\__enclose_io_memfs__", 22) || - 0 == wcsncmp((pathname) + 5, L":/__enclose_io_memfs__", 22)) { - return 1; - } - } - } - return 0; -} - -short enclose_io_is_relative_w(wchar_t *pathname) -{ - if (L'N' == pathname[0] && L'U' == pathname[1] && L'L' == pathname[2] && 0 == pathname[3]) { - return 0; - } - if (L'\\' == (pathname)[0] || - L'/' == (pathname)[0]) { - return 0; - } - if (wcsnlen(pathname, 3) >= 3) { - if (0 == wcsncmp((pathname) + 1, L":\\", 2) || - 0 == wcsncmp((pathname) + 1, L":/", 2)) { - return 0; - } - } - if (wcsnlen(pathname, 4) >= 4) { - if (0 == wcsncmp((pathname), L"\\\\?\\", 4) || - 0 == wcsncmp((pathname), L"//?/", 4)) { - return 0; - } - } - if (wcsnlen(pathname, 7) >= 7) { - if (0 == wcsncmp((pathname), L"\\\\?\\", 4) && 0 == wcsncmp((pathname) + 5, L":\\", 2) ) { - return 0; - } - if (0 == wcsncmp((pathname), L"//?/", 4) && 0 == wcsncmp((pathname) + 5, L":/", 2) ) { - return 0; - } - } - return 1; -} -#endif - -#ifndef _WIN32 -int enclose_io_openat(int nargs, int dirfd, const char* pathname, int flags, ...) -{ - if (3 == nargs) { - // If pathname is absolute, then dirfd is ignored. - if (enclose_io_is_path(pathname)) { - return enclose_io_open(nargs, pathname, flags); - } - - // If the pathname given in pathname is relative, - // then it is interpreted relative to the directory referred to by the file descriptor dirfd - // (rather than relative to the current working directory of the calling process, as is done by open(2) for a relative pathname). - // TODO: at dirfd - if (dirfd == AT_FDCWD && enclose_io_cwd[0] && '/' != *pathname) { - return enclose_io_open(nargs, pathname, flags); - } - - return openat(dirfd, pathname, flags); - } - else { - va_list args; - mode_t mode; - assert(4 == nargs); - va_start(args, flags); - mode = va_arg(args, mode_t); - va_end(args); - - // If pathname is absolute, then dirfd is ignored. - if (enclose_io_is_path(pathname)) { - return enclose_io_open(nargs, pathname, flags, mode); - } - - // If the pathname given in pathname is relative, - // then it is interpreted relative to the directory referred to by the file descriptor dirfd - // (rather than relative to the current working directory of the calling process, as is done by open(2) for a relative pathname). - // TODO: at dirfd - if (dirfd == AT_FDCWD && enclose_io_cwd[0] && '/' != *pathname) { - return enclose_io_open(nargs, pathname, flags, mode); - } - - return openat(dirfd, pathname, flags, mode); - } -} -#endif - -/* - * enclose_io_exepath is derived from uv_exepath of libuv. - * libuv is licensed for use as follows: - * - * 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. - */ -#ifdef _WIN32 -int enclose_io_exepath(char* buffer, size_t* size_ptr) { - int utf8_len, utf16_buffer_len, utf16_len; - WCHAR* utf16_buffer; - int err; - - if (buffer == NULL || size_ptr == NULL || *size_ptr == 0) { - return -1; - } - - if (*size_ptr > 32768) { - /* Windows paths can never be longer than this. */ - utf16_buffer_len = 32768; - } else { - utf16_buffer_len = (int) *size_ptr; - } - - utf16_buffer = (WCHAR*) malloc(sizeof(WCHAR) * utf16_buffer_len); - if (!utf16_buffer) { - return -1; - } - - /* Get the path as UTF-16. */ - utf16_len = GetModuleFileNameW(NULL, utf16_buffer, utf16_buffer_len); - if (utf16_len <= 0) { - err = GetLastError(); - goto error; - } - - /* utf16_len contains the length, *not* including the terminating null. */ - utf16_buffer[utf16_len] = L'\0'; - - /* Convert to UTF-8 */ - utf8_len = WideCharToMultiByte(CP_UTF8, - 0, - utf16_buffer, - -1, - buffer, - (int) *size_ptr, - NULL, - NULL); - if (utf8_len == 0) { - err = GetLastError(); - goto error; - } - - free(utf16_buffer); - - /* utf8_len *does* include the terminating null at this point, but the */ - /* returned size shouldn't. */ - *size_ptr = utf8_len - 1; - return 0; - - error: - free(utf16_buffer); - return -1; -} - -#endif - -#ifdef __linux__ -int enclose_io_exepath(char* buffer, size_t* size) { - ssize_t n; - - if (buffer == NULL || size == NULL || *size == 0) - return -1; - - n = *size - 1; - if (n > 0) - n = readlink("/proc/self/exe", buffer, n); - - if (n == -1) - return -1; - - buffer[n] = '\0'; - *size = n; - - return 0; -} -#endif - -#ifdef __APPLE__ -int enclose_io_exepath(char* buffer, size_t* size) { - /* realpath(exepath) may be > PATH_MAX so double it to be on the safe side. */ - char abspath[PATH_MAX * 2 + 1]; - char exepath[PATH_MAX + 1]; - uint32_t exepath_size; - size_t abspath_size; - - if (buffer == NULL || size == NULL || *size == 0) - return -1; - - exepath_size = sizeof(exepath); - if (_NSGetExecutablePath(exepath, &exepath_size)) - return -1; - - if (realpath(exepath, abspath) != abspath) - return -1; - - abspath_size = strlen(abspath); - if (abspath_size == 0) - return -1; - - *size -= 1; - if (*size > abspath_size) - *size = abspath_size; - - memcpy(buffer, abspath, *size); - buffer[*size] = '\0'; - - return 0; -} -#endif diff --git a/ruby/enclose_io_unix.h b/ruby/enclose_io_unix.h deleted file mode 100644 index 291f5277e..000000000 --- a/ruby/enclose_io_unix.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2017 - 2020 Minqi Pan - * Shengyuan Liu - * - * This file is part of libsquash, distributed under the MIT License - * For full terms see the included LICENSE file - */ - -#ifndef ENCLOSE_IO_UNIX_H_E0229A03 -#define ENCLOSE_IO_UNIX_H_E0229A03 -#ifndef __cplusplus -#ifndef _WIN32 - - #ifdef dirfd - #undef dirfd - #endif - - #define getcwd(...) enclose_io_getcwd(__VA_ARGS__) - #define getwd(...) enclose_io_getwd(__VA_ARGS__) - #define chdir(...) enclose_io_chdir(__VA_ARGS__) - #define stat(...) enclose_io_stat(__VA_ARGS__) - #define fstat(...) enclose_io_fstat(__VA_ARGS__) - #define lstat(...) enclose_io_lstat(__VA_ARGS__) - #define open(...) enclose_io_open(ENCLOSE_IO_PP_NARG(__VA_ARGS__), __VA_ARGS__) - #define openat(...) enclose_io_openat(ENCLOSE_IO_PP_NARG(__VA_ARGS__), __VA_ARGS__) - #define close(...) enclose_io_close(__VA_ARGS__) - #define read(...) enclose_io_read(__VA_ARGS__) - #define lseek(...) enclose_io_lseek(__VA_ARGS__) - #define readlink(...) enclose_io_readlink(__VA_ARGS__) - #define opendir(...) enclose_io_opendir(__VA_ARGS__) - #define fdopendir(...) enclose_io_fdopendir(__VA_ARGS__) - #define closedir(...) enclose_io_closedir(__VA_ARGS__) - #define readdir(...) enclose_io_readdir(__VA_ARGS__) - #define telldir(...) enclose_io_telldir(__VA_ARGS__) - #define seekdir(...) enclose_io_seekdir(__VA_ARGS__) - #define rewinddir(...) enclose_io_rewinddir(__VA_ARGS__) - #define dirfd(...) enclose_io_dirfd(__VA_ARGS__) - #define scandir(...) enclose_io_scandir(__VA_ARGS__) - #define pread(...) enclose_io_pread(__VA_ARGS__) - #define readv(...) enclose_io_readv(__VA_ARGS__) - #define dlopen(...) enclose_io_dlopen(__VA_ARGS__) - #define access(...) enclose_io_access(__VA_ARGS__) - #define mkdir(...) enclose_io_mkdir(__VA_ARGS__) - #define execv(...) enclose_io_execv(__VA_ARGS__) - -#endif // !_WIN32 -#endif //!__cplusplus -#endif diff --git a/ruby/enclose_io_win32.c b/ruby/enclose_io_win32.c deleted file mode 100644 index 85528ddd3..000000000 --- a/ruby/enclose_io_win32.c +++ /dev/null @@ -1,1325 +0,0 @@ -/* - * Copyright (c) 2017 - 2020 Minqi Pan - * Shengyuan Liu - * - * This file is part of libsquash, distributed under the MIT License - * For full terms see the included LICENSE file - */ - -#include "enclose_io_common.h" - -#ifdef _WIN32 - -extern char *mkdir_workdir; -extern char *enclose_io_mkdir_scope; - -int enclose_io__open(const char *pathname, int flags) -{ - if (enclose_io_cwd[0] && '/' != *pathname) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - ENCLOSE_IO_GEN_EXPANDED_NAME(pathname); - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - enclose_io_dos_return(squash_open(enclose_io_fs, enclose_io_expanded)), - _open(mkdir_workdir_expanded, flags) - ); - } else if (enclose_io_is_path(pathname)) { - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - pathname, - enclose_io_dos_return(squash_open(enclose_io_fs, pathname)), - _open(mkdir_workdir_expanded, flags) - ); - } else { - return _open(pathname, flags); - } -} - -int enclose_io__wopen(const wchar_t *pathname, int flags, int mode) -{ - if (enclose_io_cwd[0] && enclose_io_is_relative_w(pathname)) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(pathname); - ENCLOSE_IO_GEN_EXPANDED_NAME(enclose_io_converted); - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - enclose_io_dos_return(squash_open(enclose_io_fs, enclose_io_expanded)), - _open(mkdir_workdir_expanded, flags, mode) - ); - } else if (enclose_io_is_path_w(pathname)) { - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(pathname); - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_converted, - enclose_io_dos_return(squash_open(enclose_io_fs, enclose_io_converted)), - _open(mkdir_workdir_expanded, flags, mode) - ); - } else { - return _wopen(pathname, flags, mode); - } -} - -int enclose_io_open_osfhandle(intptr_t osfhandle, int flags) -{ - struct squash_file *entry = squash_find_entry((void *)osfhandle); - if (entry) { - return entry->fd; - } else { - return _open_osfhandle(osfhandle, flags); - } -} - -intptr_t enclose_io_get_osfhandle(int fd) -{ - if (SQUASH_VALID_VFD(fd)) { - assert(!(S_ISDIR(squash_global_fdtable.fds[fd]->st.st_mode))); - return (intptr_t)(squash_global_fdtable.fds[fd]->payload); - } - else { - return _get_osfhandle(fd); - } -} - -int enclose_io_wchdir(const wchar_t *path) -{ - if (enclose_io_is_path_w(path)) { - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - struct stat st; - int ret; - - W_ENCLOSE_IO_PATH_CONVERT(path); - - if (mkdir_workdir) { - sqfs_path mkdir_workdir_expanded; - char *mkdir_workdir_expanded_head; - size_t mkdir_workdir_len; - size_t memcpy_len; - struct stat mkdir_workdir_buf; - mkdir_workdir_len = strlen(mkdir_workdir); - memcpy(mkdir_workdir_expanded, mkdir_workdir, mkdir_workdir_len); - memcpy_len = strlen(enclose_io_converted); - if (SQUASHFS_PATH_LEN - mkdir_workdir_len < memcpy_len) { - memcpy_len = SQUASHFS_PATH_LEN - mkdir_workdir_len; - } - memcpy(&mkdir_workdir_expanded[mkdir_workdir_len], (enclose_io_converted), memcpy_len); - mkdir_workdir_expanded[mkdir_workdir_len + memcpy_len] = '\0'; - mkdir_workdir_expanded_head = strstr(mkdir_workdir_expanded, enclose_io_mkdir_scope); - if (mkdir_workdir_expanded_head && '/' == mkdir_workdir_expanded_head[strlen(enclose_io_mkdir_scope)]) { - memmove( - mkdir_workdir_expanded_head, - mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope), - strlen(mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope)) + 1 - ); - if (0 == stat(mkdir_workdir_expanded, &mkdir_workdir_buf)) { - int ret = _chdir(mkdir_workdir_expanded); - if (0 == ret) { - enclose_io_chdir_helper(enclose_io_converted); - } - return ret; - } - } - } - - ret = squash_stat(enclose_io_fs, enclose_io_converted, &st); - if (-1 == ret) { - ENCLOSE_IO_SET_LAST_ERROR; - return -1; - } - if (S_ISDIR(st.st_mode)) { - enclose_io_chdir_helper(enclose_io_converted); - return 0; - } else { - errno = ENOENT; - ENCLOSE_IO_SET_LAST_ERROR; - return -1; - } - } else { - int ret = _wchdir(path); - if (0 == ret) { - enclose_io_cwd[0] = '\0'; - } - return ret; - } -} - -wchar_t *enclose_io_wgetcwd(wchar_t *buf, size_t size) -{ - wchar_t tempbuf[SQUASHFS_PATH_LEN + 1]; - size_t retlen; - if (enclose_io_cwd[0]) { - retlen = mbstowcs(tempbuf, enclose_io_cwd, SQUASHFS_PATH_LEN); - if ((size_t)-1 == retlen) { - errno = ERANGE; - ENCLOSE_IO_SET_LAST_ERROR; - return NULL; - } - tempbuf[retlen] = L'\0'; - if (NULL == buf) { - buf = malloc((retlen + 1) * sizeof(wchar_t)); - if (NULL == buf) { - errno = ENOMEM; - return NULL; - } - } else { - if (size - 1 < retlen) { - retlen = size - 1; - } - } - memcpy(buf, tempbuf, retlen * sizeof(wchar_t)); - buf[retlen] = L'\0'; - return buf; - } else { - return _wgetcwd(buf, size); - } -} - -int enclose_io_fstati64(int fildes, struct _stati64 *buf) -{ - struct stat st; - if (SQUASH_VALID_VFD(fildes)) { - if (NULL == buf) { - errno = EINVAL; - ENCLOSE_IO_SET_LAST_ERROR; - return -1; - } - st = SQUASH_VFD_FILE(fildes)->st; - buf->st_dev = st.st_dev; - buf->st_ino = st.st_ino; - buf->st_mode = st.st_mode; - buf->st_nlink = st.st_nlink; - buf->st_uid = st.st_uid; - buf->st_gid = st.st_gid; - buf->st_rdev = st.st_rdev; - buf->st_size = st.st_size; - buf->st_atime = st.st_atime; - buf->st_mtime = st.st_mtime; - buf->st_ctime = st.st_ctime; - return 0; - } else { - return _fstati64(fildes, buf); - } -} - -__int64 enclose_io_lseeki64(int fildes, __int64 offset, int whence) -{ - if (SQUASH_VALID_VFD(fildes)) { - return enclose_io_dos_return(squash_lseek(fildes, offset, whence)); - } else { - return _lseeki64(fildes, offset, whence); - } -} - -static HANDLE EncloseIOCreateFileWHelper( - char * incoming, - DWORD dwFlagsAndAttributes) -{ - int ret; - struct stat buf; - SQUASH_DIR *dirp; - int follow_link; - - if (dwFlagsAndAttributes & FILE_FLAG_OPEN_REPARSE_POINT) { - ret = squash_lstat(enclose_io_fs, incoming, &buf); - follow_link = 0; - } else { - ret = squash_stat(enclose_io_fs, incoming, &buf); - follow_link = 1; - } - - if (-1 == ret) { - ENCLOSE_IO_SET_LAST_ERROR; - return INVALID_HANDLE_VALUE; - } - if (S_ISDIR(buf.st_mode)) { - dirp = squash_opendir_inner(enclose_io_fs, incoming, follow_link); - if (NULL != dirp) { - return (HANDLE)(dirp); - } else { - ENCLOSE_IO_SET_LAST_ERROR; - return INVALID_HANDLE_VALUE; - } - } else { - ret = squash_open_inner(enclose_io_fs, incoming, follow_link); - if (ret >= 0) { - return (HANDLE)(squash_global_fdtable.fds[ret]->payload); - } else { - ENCLOSE_IO_SET_LAST_ERROR; - return INVALID_HANDLE_VALUE; - } - } -} - -HANDLE -EncloseIOCreateFileW( - LPCWSTR lpFileName, - DWORD dwDesiredAccess, - DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile -) -{ - if (enclose_io_cwd[0] && enclose_io_is_relative_w(lpFileName)) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(lpFileName); - ENCLOSE_IO_GEN_EXPANDED_NAME(enclose_io_converted); - if (OPEN_EXISTING == dwCreationDisposition) { - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - EncloseIOCreateFileWHelper( - enclose_io_expanded, - dwFlagsAndAttributes - ), - CreateFile( - mkdir_workdir_expanded, - dwDesiredAccess, - dwShareMode, - lpSecurityAttributes, - dwCreationDisposition, - dwFlagsAndAttributes, - hTemplateFile - ) - ); - } else { - char *dir_thereof_ptr = strrchr(enclose_io_expanded, '/'); - if (dir_thereof_ptr) { - *dir_thereof_ptr = 0; - enclose_io_mkdir(enclose_io_expanded, 0777); - *dir_thereof_ptr = '/'; - } - if (mkdir_workdir) { - sqfs_path mkdir_workdir_expanded; - char *mkdir_workdir_expanded_head; - size_t mkdir_workdir_len; - size_t memcpy_len; - struct stat mkdir_workdir_buf; - mkdir_workdir_len = strlen(mkdir_workdir); - memcpy(mkdir_workdir_expanded, mkdir_workdir, mkdir_workdir_len); - memcpy_len = strlen(enclose_io_expanded); - if (SQUASHFS_PATH_LEN - mkdir_workdir_len < memcpy_len) { - memcpy_len = SQUASHFS_PATH_LEN - mkdir_workdir_len; - } - memcpy(&mkdir_workdir_expanded[mkdir_workdir_len], enclose_io_expanded, memcpy_len); - mkdir_workdir_expanded[mkdir_workdir_len + memcpy_len] = '\0'; - mkdir_workdir_expanded_head = strstr(mkdir_workdir_expanded, enclose_io_mkdir_scope); - if (mkdir_workdir_expanded_head && '/' == mkdir_workdir_expanded_head[strlen(enclose_io_mkdir_scope)]) { - memmove( - mkdir_workdir_expanded_head, - mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope), - strlen(mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope)) + 1 - ); - return CreateFile( - mkdir_workdir_expanded, - dwDesiredAccess, - dwShareMode, - lpSecurityAttributes, - dwCreationDisposition, - dwFlagsAndAttributes, - hTemplateFile - ); - } else { - errno = ENOENT; - ENCLOSE_IO_SET_LAST_ERROR; - return INVALID_HANDLE_VALUE; - } - } else { - errno = ENOENT; - ENCLOSE_IO_SET_LAST_ERROR; - return INVALID_HANDLE_VALUE; - } - } - } else if (enclose_io_is_path_w(lpFileName)) { - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(lpFileName); - - if (OPEN_EXISTING == dwCreationDisposition) { - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_converted, - EncloseIOCreateFileWHelper( - enclose_io_converted, - dwFlagsAndAttributes - ), - CreateFile( - mkdir_workdir_expanded, - dwDesiredAccess, - dwShareMode, - lpSecurityAttributes, - dwCreationDisposition, - dwFlagsAndAttributes, - hTemplateFile - ) - ); - } else { - char *dir_thereof_ptr = strrchr(enclose_io_converted, '/'); - if (dir_thereof_ptr) { - *dir_thereof_ptr = 0; - enclose_io_mkdir(enclose_io_converted, 0777); - *dir_thereof_ptr = '/'; - } - if (mkdir_workdir) { - sqfs_path mkdir_workdir_expanded; - char *mkdir_workdir_expanded_head; - size_t mkdir_workdir_len; - size_t memcpy_len; - struct stat mkdir_workdir_buf; - mkdir_workdir_len = strlen(mkdir_workdir); - memcpy(mkdir_workdir_expanded, mkdir_workdir, mkdir_workdir_len); - memcpy_len = strlen(enclose_io_converted); - if (SQUASHFS_PATH_LEN - mkdir_workdir_len < memcpy_len) { - memcpy_len = SQUASHFS_PATH_LEN - mkdir_workdir_len; - } - memcpy(&mkdir_workdir_expanded[mkdir_workdir_len], enclose_io_converted, memcpy_len); - mkdir_workdir_expanded[mkdir_workdir_len + memcpy_len] = '\0'; - mkdir_workdir_expanded_head = strstr(mkdir_workdir_expanded, enclose_io_mkdir_scope); - if (mkdir_workdir_expanded_head && '/' == mkdir_workdir_expanded_head[strlen(enclose_io_mkdir_scope)]) { - memmove( - mkdir_workdir_expanded_head, - mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope), - strlen(mkdir_workdir_expanded_head + strlen(enclose_io_mkdir_scope)) + 1 - ); - return CreateFile( - mkdir_workdir_expanded, - dwDesiredAccess, - dwShareMode, - lpSecurityAttributes, - dwCreationDisposition, - dwFlagsAndAttributes, - hTemplateFile - ); - } else { - errno = ENOENT; - ENCLOSE_IO_SET_LAST_ERROR; - return INVALID_HANDLE_VALUE; - } - } else { - errno = ENOENT; - ENCLOSE_IO_SET_LAST_ERROR; - return INVALID_HANDLE_VALUE; - } - } - } else { - return CreateFileW( - lpFileName, - dwDesiredAccess, - dwShareMode, - lpSecurityAttributes, - dwCreationDisposition, - dwFlagsAndAttributes, - hTemplateFile - ); - } -} - -BOOL -EncloseIOCloseHandle( - HANDLE hObject -) -{ - struct squash_file *sqf = squash_find_entry((void *)hObject); - if (sqf) { - int ret; - if (S_ISDIR(sqf->st.st_mode)) { - ret = squash_closedir((SQUASH_DIR *)hObject); - if (-1 == ret) { - ENCLOSE_IO_SET_LAST_ERROR; - return FALSE; - } - return TRUE; - } else { - ret = squash_close(*((int *)hObject)); - if (-1 == ret) { - ENCLOSE_IO_SET_LAST_ERROR; - return FALSE; - } - return TRUE; - } - } else { - return CloseHandle( - hObject - ); - } -} - -BOOL -EncloseIOReadFile( - HANDLE hFile, - LPVOID lpBuffer, - DWORD nNumberOfBytesToRead, - LPDWORD lpNumberOfBytesRead, - LPOVERLAPPED lpOverlapped -) -{ - struct squash_file *sqf = squash_find_entry((void *)hFile); - int ret; - - if (sqf) { - if (NULL != lpOverlapped) { - squash_lseek(sqf->fd, lpOverlapped->Offset, SQUASH_SEEK_SET); - assert(0 == lpOverlapped->OffsetHigh); // TODO support OffsetHigh - } - ret = squash_read(sqf->fd, lpBuffer, nNumberOfBytesToRead); - if (-1 == ret) { - ENCLOSE_IO_SET_LAST_ERROR; - return FALSE; - } - *lpNumberOfBytesRead = ret; - return TRUE; - } else { - return ReadFile( - hFile, - lpBuffer, - nNumberOfBytesToRead, - lpNumberOfBytesRead, - lpOverlapped - ); - } -} - -static DWORD EncloseIOGetFileAttributesHelper(struct stat *st) -{ - DWORD fa = 0; //FILE_ATTRIBUTE_READONLY; - if (S_ISCHR(st->st_mode)) { - fa |= FILE_ATTRIBUTE_DEVICE; - } else if (S_ISLNK(st->st_mode)) { - fa |= FILE_ATTRIBUTE_REPARSE_POINT; - } else if (S_ISDIR(st->st_mode)) { - fa |= FILE_ATTRIBUTE_DIRECTORY; - } else { - fa |= FILE_ATTRIBUTE_NORMAL; - } - return fa; -} - -DWORD -EncloseIOGetFileAttributesWHelper( - const char *path -) -{ - int ret; - struct stat buf; - ret = squash_stat(enclose_io_fs, path, &buf); - if (-1 == ret) { - ENCLOSE_IO_SET_LAST_ERROR; - return INVALID_FILE_ATTRIBUTES; - } - return EncloseIOGetFileAttributesHelper(&buf); -} - -DWORD -EncloseIOGetFileAttributesW( - LPCWSTR lpFileName -) -{ - if (enclose_io_cwd[0] && enclose_io_is_relative_w(lpFileName)) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(lpFileName); - ENCLOSE_IO_GEN_EXPANDED_NAME(enclose_io_converted); - - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - EncloseIOGetFileAttributesWHelper(enclose_io_expanded), - GetFileAttributes( - mkdir_workdir_expanded - ) - ); - } else if (enclose_io_is_path_w(lpFileName)) { - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(lpFileName); - - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_converted, - EncloseIOGetFileAttributesWHelper(enclose_io_converted), - GetFileAttributes( - mkdir_workdir_expanded - ) - ); - } else { - return GetFileAttributesW( - lpFileName - ); - } -} - -static void EncloseIOUnixtimeToFiletime(time_t time, FILETIME *ft) -{ - ULARGE_INTEGER tmp; - tmp.QuadPart = ((long long)time + (long long)((1970-1601)*365.2425) * 24 * 60 * 60) * 10 * 1000 * 1000; - ft->dwLowDateTime = tmp.LowPart; - ft->dwHighDateTime = tmp.HighPart; -} - -static void EncloseIOFillWin32FileAttributeDataHelper(WIN32_FILE_ATTRIBUTE_DATA *fa, struct stat *st) -{ - fa->dwFileAttributes = EncloseIOGetFileAttributesHelper(st); - EncloseIOUnixtimeToFiletime(st->st_atime, &fa->ftLastAccessTime); - EncloseIOUnixtimeToFiletime(st->st_mtime, &fa->ftLastWriteTime); - EncloseIOUnixtimeToFiletime(st->st_ctime, &fa->ftCreationTime); - // TODO somehow support large files? - fa->nFileSizeHigh = 0; - fa->nFileSizeLow = st->st_size; -} - -BOOL -EncloseIOGetFileAttributesExWHelper( - const char *path, - LPVOID lpFileInformation -) -{ - int ret; - struct stat buf; - WIN32_FILE_ATTRIBUTE_DATA *fa; - - ret = squash_stat(enclose_io_fs, path, &buf); - if (-1 == ret) { - ENCLOSE_IO_SET_LAST_ERROR; - return 0; - } - fa = (WIN32_FILE_ATTRIBUTE_DATA *)lpFileInformation; - EncloseIOFillWin32FileAttributeDataHelper(fa, &buf); - return 1; -} - -BOOL -EncloseIOGetFileAttributesExW( - LPCWSTR lpFileName, - GET_FILEEX_INFO_LEVELS fInfoLevelId, - LPVOID lpFileInformation -) -{ - if (enclose_io_cwd[0] && enclose_io_is_relative_w(lpFileName)) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(lpFileName); - ENCLOSE_IO_GEN_EXPANDED_NAME(enclose_io_converted); - assert(GetFileExInfoStandard == fInfoLevelId); - - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - EncloseIOGetFileAttributesExWHelper(enclose_io_expanded, lpFileInformation), - GetFileAttributesEx( - mkdir_workdir_expanded, - fInfoLevelId, - lpFileInformation - ), - ); - } else if (enclose_io_is_path_w(lpFileName)) { - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(lpFileName); - assert(GetFileExInfoStandard == fInfoLevelId); - - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_converted, - EncloseIOGetFileAttributesExWHelper(enclose_io_converted, lpFileInformation), - GetFileAttributesEx( - mkdir_workdir_expanded, - fInfoLevelId, - lpFileInformation - ) - ); - } else { - return GetFileAttributesExW( - lpFileName, - fInfoLevelId, - lpFileInformation - ); - } -} - -BOOL -EncloseIOGetHandleInformation( - HANDLE hObject, - LPDWORD lpdwFlags -) -{ - struct squash_file *sqf = squash_find_entry((void *)hObject); - if (sqf) { - *lpdwFlags = 0; - return 1; - } else { - return GetHandleInformation( - hObject, - lpdwFlags - ); - } -} - -DWORD -EncloseIOGetFileType( - HANDLE hFile -) -{ - struct squash_file *sqf = squash_find_entry((void *)hFile); - if (sqf) { - struct stat st; - st = sqf->st; - if (S_ISCHR(st.st_mode)) { - return FILE_TYPE_CHAR; - } else if (S_ISREG(st.st_mode)) { - return FILE_TYPE_DISK; - } else if (S_ISFIFO(st.st_mode)) { - return FILE_TYPE_PIPE; - } else { - return FILE_TYPE_UNKNOWN; - } - } else { - return GetFileType( - hFile - ); - } -} - -DWORD EncloseIODType2FileAttributes(int d_type) -{ - DWORD x = 0; //FILE_ATTRIBUTE_READONLY; - if (DT_CHR == d_type) { - x |= FILE_ATTRIBUTE_DEVICE; - } else if (DT_LNK == d_type) { - x |= FILE_ATTRIBUTE_REPARSE_POINT; - } else if (DT_DIR == d_type) { - x |= FILE_ATTRIBUTE_DIRECTORY; - } else { - x |= FILE_ATTRIBUTE_NORMAL; - } - return x; -} - -HANDLE -EncloseIOFindFirstFileHelper( - char *incoming, - LPWIN32_FIND_DATAW lpFindFileData -) -{ - char *dup_incoming = strdup(incoming); - char *parent = incoming + strlen(incoming); - SQUASH_DIR *dirp; - struct SQUASH_DIRENT *mydirent; - struct SQUASH_DIRENT dummy_dirent; - char *current_path_tail; - char *current_path; - size_t mbstowcs_size; - - while (parent >= incoming) { - if ('/' == *parent) { - break; - } - parent -= 1; - } - *parent = '\0'; - dirp = squash_opendir(enclose_io_fs, incoming); - if (NULL == dirp) { - ENCLOSE_IO_SET_LAST_ERROR; - return INVALID_HANDLE_VALUE; - } - dirp->payload = dup_incoming; - current_path = (char *)malloc(strlen(dup_incoming) + SQUASHFS_PATH_LEN + 1); - if (NULL == current_path) { - SetLastError(ERROR_NOT_ENOUGH_MEMORY); - return INVALID_HANDLE_VALUE; - } - memcpy(current_path, incoming, strlen(incoming) + 1); - strcat(current_path, "/"); - current_path_tail = current_path + strlen(current_path); - do { - mydirent = squash_readdir(dirp); - if (NULL == mydirent) { - // try to determine - // either this dir is empty - // or the dir is not empty and we run out of possible matches - if (dirp->actual_nr == 0) { - // this dir is empty - // so just return a "." to match the original Windows behavior - current_path_tail[0] = '.'; - current_path_tail[1] = 0; // we are sure that this will make true==PathMatchSpecA(current_path, dup_incoming) - dummy_dirent.d_namlen = 1; - dummy_dirent.d_ino = dirp->node.base.inode_number; - dummy_dirent.d_name[0] = '.'; - dummy_dirent.d_name[1] = 0; - dummy_dirent.d_type = DT_DIR; - mydirent = &dummy_dirent; - } - break; - } - memcpy(current_path_tail, mydirent->d_name, strlen(mydirent->d_name) + 1); - } while (!PathMatchSpecA(current_path, dup_incoming)); - free(current_path); - if (NULL == mydirent) { - int ret = squash_closedir(dirp); - assert(0 == ret); - ENCLOSE_IO_SET_LAST_ERROR; - return INVALID_HANDLE_VALUE; - } - mbstowcs_size = mbstowcs(lpFindFileData->cFileName, mydirent->d_name, sizeof(lpFindFileData->cFileName) / sizeof(lpFindFileData->cFileName[0]) - 1); - if ((size_t)-1 == mbstowcs_size) { - errno = EIO; - ENCLOSE_IO_SET_LAST_ERROR; - return 0; - } - lpFindFileData->cFileName[mbstowcs_size] = 0; - lpFindFileData->cAlternateFileName[0] = 0; - lpFindFileData->dwFileAttributes = EncloseIODType2FileAttributes(mydirent->d_type); - return (HANDLE)(dirp); -} - -HANDLE -EncloseIOFindFirstFileW( - LPCWSTR lpFileName, - LPWIN32_FIND_DATAW lpFindFileData -) -{ - if (enclose_io_cwd[0] && enclose_io_is_relative_w(lpFileName)) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(lpFileName); - ENCLOSE_IO_GEN_EXPANDED_NAME(enclose_io_converted); - - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - EncloseIOFindFirstFileHelper(enclose_io_expanded, lpFindFileData), - FindFirstFile( - mkdir_workdir_expanded, - lpFindFileData - ) - ); - } else if (enclose_io_is_path_w(lpFileName)) { - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(lpFileName); - - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_converted, - EncloseIOFindFirstFileHelper(enclose_io_converted, lpFindFileData), - FindFirstFile( - mkdir_workdir_expanded, - lpFindFileData - ) - ); - } else { - return FindFirstFileW( - lpFileName, - lpFindFileData - ); - } -} - -BOOL -EncloseIOFindNextFileW( - HANDLE hFindFile, - LPWIN32_FIND_DATAW lpFindFileData -) -{ - struct squash_file *sqf = squash_find_entry((void *)hFindFile); - - if (sqf) { - SQUASH_DIR *dirp; - struct SQUASH_DIRENT *mydirent; - char *current_path; - char *current_path_tail; - size_t mbstowcs_size; - - dirp = (SQUASH_DIR*)hFindFile; - current_path = (char *)malloc(strlen((char *)(dirp->payload)) + SQUASHFS_PATH_LEN + 1); - if (NULL == current_path) { - errno = ENOMEM; - ENCLOSE_IO_SET_LAST_ERROR; - return 0; - } - memcpy(current_path, dirp->filename, strlen(dirp->filename) + 1); - strcat(current_path, "/"); - current_path_tail = current_path + strlen(current_path); - do { - mydirent = squash_readdir(dirp); - if (NULL == mydirent) { - break; - } - memcpy(current_path_tail, mydirent->d_name, strlen(mydirent->d_name) + 1); - } while (!PathMatchSpecA(current_path, (char *)(dirp->payload))); - free(current_path); - if (NULL == mydirent) { - errno = ENOENT; - SetLastError(ERROR_NO_MORE_FILES); - _doserrno = ERROR_NO_MORE_FILES; - return 0; - } - mbstowcs_size = mbstowcs(lpFindFileData->cFileName, mydirent->d_name, sizeof(lpFindFileData->cFileName) / sizeof(lpFindFileData->cFileName[0]) - 1); - if ((size_t)-1 == mbstowcs_size) { - errno = EIO; - ENCLOSE_IO_SET_LAST_ERROR; - return 0; - } - lpFindFileData->cFileName[mbstowcs_size] = 0; - lpFindFileData->cAlternateFileName[0] = 0; - lpFindFileData->dwFileAttributes = EncloseIODType2FileAttributes(mydirent->d_type); - return 1; - } else { - return FindNextFileW( - hFindFile, - lpFindFileData - ); - } -} - -BOOL -EncloseIOFindClose( - HANDLE hFindFile -) -{ - struct squash_file *sqf = squash_find_entry((void *)hFindFile); - int ret; - - if (sqf) { - ret = squash_closedir((SQUASH_DIR *)hFindFile); - if (0 == ret) { - return 1; - } else { - ENCLOSE_IO_SET_LAST_ERROR; - return 0; - } - } else { - return FindClose( - hFindFile - ); - } -} - -BOOL -EncloseIODeviceIoControl( - HANDLE hDevice, - DWORD dwIoControlCode, - LPVOID lpInBuffer, - DWORD nInBufferSize, - LPVOID lpOutBuffer, - DWORD nOutBufferSize, - LPDWORD lpBytesReturned, - LPOVERLAPPED lpOverlapped -) -{ - struct squash_file *sqf = squash_find_entry((void *)hDevice); - int ret; - - if (sqf) { - char the_path[SQUASHFS_PATH_LEN + 1]; - wchar_t the_wpath[SQUASHFS_PATH_LEN + 1]; - struct stat st; - size_t retlen; - REPARSE_DATA_BUFFER* reparse_data = (REPARSE_DATA_BUFFER*)lpOutBuffer; - - // TODO handle the overlapped - assert(NULL == lpOverlapped); - - // TODO support more than FSCTL_GET_REPARSE_POINT - assert(0 == nInBufferSize); - - // FSCTL_GET_REPARSE_POINT - // https://msdn.microsoft.com/en-us/library/windows/desktop/aa364571(v=vs.85).aspx - assert(dwIoControlCode == FSCTL_GET_REPARSE_POINT); - assert(NULL == lpInBuffer); - st = sqf->st; - if (!S_ISLNK(st.st_mode)) { - errno = EINVAL; - SetLastError(ERROR_NOT_A_REPARSE_POINT); - _doserrno = ERROR_NOT_A_REPARSE_POINT; - return FALSE; - } - ret = squash_readlink_inode( - enclose_io_fs, - &sqf->node, - the_path, - SQUASHFS_PATH_LEN - ); - if (-1 == ret) { - ENCLOSE_IO_SET_LAST_ERROR; - return FALSE; - } - - retlen = mbstowcs(the_wpath, the_path, SQUASHFS_PATH_LEN); - if ((size_t)-1 == retlen) { - errno = ENAMETOOLONG; - ENCLOSE_IO_SET_LAST_ERROR; - return FALSE; - } - the_wpath[retlen] = L'\0'; - *lpBytesReturned = sizeof(REPARSE_DATA_BUFFER) + retlen * sizeof(wchar_t); - if (*lpBytesReturned > nOutBufferSize) { - *lpBytesReturned = 0; - errno = ENAMETOOLONG; - ENCLOSE_IO_SET_LAST_ERROR; - return FALSE; - } - reparse_data->ReparseTag = IO_REPARSE_TAG_SYMLINK; - memcpy(reparse_data->SymbolicLinkReparseBuffer.PathBuffer, the_wpath, (retlen + 1) * sizeof(wchar_t)); - reparse_data->SymbolicLinkReparseBuffer.SubstituteNameLength = retlen * sizeof(wchar_t); - reparse_data->SymbolicLinkReparseBuffer.SubstituteNameOffset = 0; - return TRUE; - } else { - return DeviceIoControl( - hDevice, - dwIoControlCode, - lpInBuffer, - nInBufferSize, - lpOutBuffer, - nOutBufferSize, - lpBytesReturned, - lpOverlapped - ); - } -} - -HANDLE -EncloseIOCreateIoCompletionPort( - HANDLE FileHandle, - HANDLE ExistingCompletionPort, - ULONG_PTR CompletionKey, - DWORD NumberOfConcurrentThreads -) -{ - struct squash_file *sqf = squash_find_entry((void *)FileHandle); - - if (sqf) { - // do nothing - assert(NULL != ExistingCompletionPort); - return ExistingCompletionPort; - } else { - return CreateIoCompletionPort( - FileHandle, - ExistingCompletionPort, - CompletionKey, - NumberOfConcurrentThreads - ); - } -} - -BOOL -EncloseIOReadDirectoryChangesW( - HANDLE hDirectory, - LPVOID lpBuffer, - DWORD nBufferLength, - BOOL bWatchSubtree, - DWORD dwNotifyFilter, - LPDWORD lpBytesReturned, - LPOVERLAPPED lpOverlapped, - LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine -) -{ - struct squash_file *sqf = squash_find_entry((void *)hDirectory); - - if (sqf) { - // do nothing - assert(lpOverlapped); - return TRUE; - } else { - return ReadDirectoryChangesW( - hDirectory, - lpBuffer, - nBufferLength, - bWatchSubtree, - dwNotifyFilter, - lpBytesReturned, - lpOverlapped, - lpCompletionRoutine - ); - } -} - -HMODULE -EncloseIOLoadLibraryExW( - LPCWSTR lpLibFileName, - HANDLE hFile, - DWORD dwFlags -) -{ - if (enclose_io_cwd[0] && enclose_io_is_relative_w(lpLibFileName)) { - sqfs_path enclose_io_expanded; - size_t enclose_io_cwd_len; - size_t memcpy_len; - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(lpLibFileName); - ENCLOSE_IO_GEN_EXPANDED_NAME(enclose_io_converted); - - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_expanded, - LoadLibraryExW( - squash_extract(enclose_io_fs, enclose_io_expanded, "dll"), - hFile, - dwFlags - ), - LoadLibraryEx( - mkdir_workdir_expanded, - hFile, - dwFlags - ) - ); - } - else if (enclose_io_is_path_w(lpLibFileName)) { - sqfs_path enclose_io_converted_storage; - char *enclose_io_converted; - char *enclose_io_i; - size_t enclose_io_converted_length; - - W_ENCLOSE_IO_PATH_CONVERT(lpLibFileName); - - ENCLOSE_IO_CONSIDER_MKDIR_WORKDIR_RETURN( - enclose_io_converted, - LoadLibraryExW( - squash_extract(enclose_io_fs, enclose_io_converted, "dll"), - hFile, - dwFlags - ), - LoadLibraryEx( - mkdir_workdir_expanded, - hFile, - dwFlags - ) - ); - } - else { - return LoadLibraryExW( - lpLibFileName, - hFile, - dwFlags - ); - } -} - -BOOL -EncloseIOCreateProcessW( - LPCWSTR lpApplicationName, - LPWSTR lpCommandLine, - LPSECURITY_ATTRIBUTES lpProcessAttributes, - LPSECURITY_ATTRIBUTES lpThreadAttributes, - BOOL bInheritHandles, - DWORD dwCreationFlags, - LPVOID lpEnvironment, - LPCWSTR lpCurrentDirectory, - LPSTARTUPINFOW lpStartupInfo, - LPPROCESS_INFORMATION lpProcessInformation -) -{ - if (NULL != lpCurrentDirectory && enclose_io_is_path_w(lpCurrentDirectory)) { - lpCurrentDirectory = NULL; - } - return CreateProcessW( - lpApplicationName, - lpCommandLine, - lpProcessAttributes, - lpThreadAttributes, - bInheritHandles, - dwCreationFlags, - lpEnvironment, - lpCurrentDirectory, - lpStartupInfo, - lpProcessInformation - ); -} - -BOOL -EncloseIOGetFileInformationByHandle( - HANDLE hFile, - LPBY_HANDLE_FILE_INFORMATION lpFileInformation -) -{ - struct squash_file *sqf = squash_find_entry((void *)hFile); - struct stat st; - if (sqf) { - st = sqf->st; - lpFileInformation->dwFileAttributes = EncloseIOGetFileAttributesHelper(&st); - EncloseIOUnixtimeToFiletime(st.st_ctime, &lpFileInformation->ftCreationTime); - EncloseIOUnixtimeToFiletime(st.st_atime, &lpFileInformation->ftLastAccessTime); - EncloseIOUnixtimeToFiletime(st.st_mtime, &lpFileInformation->ftLastWriteTime); - lpFileInformation->dwVolumeSerialNumber = 0; // TODO - lpFileInformation->nFileSizeHigh = 0; - lpFileInformation->nFileSizeLow = st.st_size; - lpFileInformation->nNumberOfLinks = st.st_nlink; - lpFileInformation->nFileIndexHigh = 0; - lpFileInformation->nFileIndexLow = st.st_ino; - return 1; - } else { - return GetFileInformationByHandle( - hFile, - lpFileInformation - ); - } -} - -#ifndef RUBY_EXPORT -NTSTATUS -EncloseIOpNtQueryInformationFile( - HANDLE FileHandle, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FileInformation, - ULONG Length, - FILE_INFORMATION_CLASS FileInformationClass) -{ - struct squash_file *sqf = squash_find_entry((void *)FileHandle); - struct stat st; - if (sqf) { - st = sqf->st; - IoStatusBlock->Status = STATUS_NOT_IMPLEMENTED; - FILE_ALL_INFORMATION *file_info = (FILE_ALL_INFORMATION *)FileInformation; - file_info->BasicInformation.FileAttributes = EncloseIOGetFileAttributesHelper(&st); - file_info->StandardInformation.EndOfFile.QuadPart = st.st_size; - - file_info->BasicInformation.LastAccessTime.QuadPart = st.st_atime * 10000000ULL + 116444736000000000ULL; - file_info->BasicInformation.ChangeTime.QuadPart = st.st_mtime * 10000000ULL + 116444736000000000ULL; - file_info->BasicInformation.LastWriteTime.QuadPart = st.st_mtime * 10000000ULL + 116444736000000000ULL; - file_info->BasicInformation.CreationTime.QuadPart = st.st_ctime * 10000000ULL + 116444736000000000ULL; - file_info->InternalInformation.IndexNumber.QuadPart = st.st_ino; - file_info->StandardInformation.AllocationSize.QuadPart = st.st_size; - file_info->StandardInformation.NumberOfLinks = st.st_nlink; - - return STATUS_SUCCESS; - } else { - return pNtQueryInformationFile( - FileHandle, - IoStatusBlock, - FileInformation, - Length, - FileInformationClass - ); - } -} - -NTSTATUS -EncloseIOpNtQueryVolumeInformationFile( - HANDLE FileHandle, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FsInformation, - ULONG Length, - FS_INFORMATION_CLASS FsInformationClass) -{ - if (squash_find_entry((void *)FileHandle)) { - IoStatusBlock->Status = STATUS_NOT_IMPLEMENTED; - return STATUS_SUCCESS; - } else { - return pNtQueryVolumeInformationFile( - FileHandle, - IoStatusBlock, - FsInformation, - Length, - FsInformationClass); - } -} - -NTSTATUS -EncloseIOpNtQueryDirectoryFile( - HANDLE FileHandle, - HANDLE Event, - PIO_APC_ROUTINE ApcRoutine, - PVOID ApcContext, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FileInformation, - ULONG Length, - FILE_INFORMATION_CLASS FileInformationClass, - BOOLEAN ReturnSingleEntry, - PUNICODE_STRING FileName, - BOOLEAN RestartScan -) -{ - SQUASH_DIR *handle; - struct SQUASH_DIRENT *mydirent; - size_t retlen; - - if (squash_find_entry((void *)FileHandle)) { - handle = (SQUASH_DIR *)FileHandle; - mydirent = squash_readdir(handle); - if (NULL == mydirent) { - return STATUS_NO_MORE_FILES; - } else { - /* FileInformation points to a buffer to hold directory entries. - * It's important that this buffer can hold at least one entry, regardless - * of the length of the file names present in the enumerated directory. - * A file name is at most 256 WCHARs long. - * According to MSDN, the buffer must be aligned at an 8-byte boundary. - */ - assert(Length > 256 * sizeof(wchar_t)); - FILE_DIRECTORY_INFORMATION *ret = (FILE_DIRECTORY_INFORMATION *)FileInformation; - ret->NextEntryOffset = 0; - retlen = mbstowcs(ret->FileName, mydirent->d_name, 255); - if ((size_t)-1 == retlen) { - return -1; - } - ret->FileName[retlen] = 0; - ret->FileNameLength = sizeof(ret->FileName[0]) * retlen; - ret->FileAttributes = EncloseIODType2FileAttributes(mydirent->d_type); - IoStatusBlock->Information = (char*)(&ret->FileName[retlen]) - (char*)FileInformation + 1; - return STATUS_SUCCESS; - } - } else { - return pNtQueryDirectoryFile( - FileHandle, - Event, - ApcRoutine, - ApcContext, - IoStatusBlock, - FileInformation, - Length, - FileInformationClass, - ReturnSingleEntry, - FileName, - RestartScan - ); - } -} - -#endif // !RUBY_EXPORT -#endif diff --git a/ruby/enclose_io_win32.h b/ruby/enclose_io_win32.h deleted file mode 100644 index 69e46754f..000000000 --- a/ruby/enclose_io_win32.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2017 - 2020 Minqi Pan - * Shengyuan Liu - * - * This file is part of libsquash, distributed under the MIT License - * For full terms see the included LICENSE file - */ - -#ifndef ENCLOSE_IO_WIN32_H_9A3D18C6 -#define ENCLOSE_IO_WIN32_H_9A3D18C6 -#ifndef __cplusplus -#ifdef _WIN32 - -#ifdef _fstati64 -#undef _fstati64 -#endif - -#define chdir(...) enclose_io_chdir(__VA_ARGS__) - -#ifndef RUBY_EXPORT - // Ruby has defined the following symbols to - // something like rb_w32_uopen - #define getcwd(...) enclose_io_getcwd(__VA_ARGS__) - #define stat(...) enclose_io_stat(__VA_ARGS__) - #define fstat(...) enclose_io_fstat(__VA_ARGS__) - #define open(...) enclose_io_open(ENCLOSE_IO_PP_NARG(__VA_ARGS__), __VA_ARGS__) - #define close(...) enclose_io_close(__VA_ARGS__) - #define read(...) enclose_io_read(__VA_ARGS__) - #define lseek(...) enclose_io_lseek(__VA_ARGS__) - - // Ruby does not use those things - #define pNtQueryDirectoryFile(...) EncloseIOpNtQueryDirectoryFile(__VA_ARGS__) - #define pNtQueryInformationFile(...) EncloseIOpNtQueryInformationFile(__VA_ARGS__) - #define pNtQueryVolumeInformationFile(...) EncloseIOpNtQueryVolumeInformationFile(__VA_ARGS__) -#endif // !RUBY_EXPORT - -#define _chdir(...) enclose_io_chdir(__VA_ARGS__) -#define _wchdir(...) enclose_io_wchdir(__VA_ARGS__) -#define _getwd(...) enclose_io_getwd(__VA_ARGS__) -#define _wgetwd(...) enclose_io_wgetwd(__VA_ARGS__) -#define _fstati64(...) enclose_io_fstati64(__VA_ARGS__) -#define _open(...) enclose_io__open(__VA_ARGS__) -#define _wopen(...) enclose_io__wopen(__VA_ARGS__) -#define _wmkdir(...) enclose_io__wmkdir(__VA_ARGS__) -#define _close(...) enclose_io_close(__VA_ARGS__) -#define _open_osfhandle(...) enclose_io_open_osfhandle(__VA_ARGS__) -#define _get_osfhandle(...) enclose_io_get_osfhandle(__VA_ARGS__) -#define _read(...) enclose_io_read(__VA_ARGS__) -#define _lseeki64(...) enclose_io_lseeki64(__VA_ARGS__) - -#define CreateFileW(...) EncloseIOCreateFileW(__VA_ARGS__) -#define CloseHandle(...) EncloseIOCloseHandle(__VA_ARGS__) -#define ReadFile(...) EncloseIOReadFile(__VA_ARGS__) - -#define GetFileAttributesW(...) EncloseIOGetFileAttributesW(__VA_ARGS__) -#define GetFileAttributesExW(...) EncloseIOGetFileAttributesExW(__VA_ARGS__) -#define GetHandleInformation(...) EncloseIOGetHandleInformation(__VA_ARGS__) -#define GetFileType(...) EncloseIOGetFileType(__VA_ARGS__) -#define FindFirstFileW(...) EncloseIOFindFirstFileW(__VA_ARGS__) -#define FindNextFileW(...) EncloseIOFindNextFileW(__VA_ARGS__) -#define FindClose(...) EncloseIOFindClose(__VA_ARGS__) -#define DeviceIoControl(...) EncloseIODeviceIoControl(__VA_ARGS__) -#define CreateIoCompletionPort(...) EncloseIOCreateIoCompletionPort(__VA_ARGS__) -#define ReadDirectoryChangesW(...) EncloseIOReadDirectoryChangesW(__VA_ARGS__) -#define LoadLibraryExW(...) EncloseIOLoadLibraryExW(__VA_ARGS__) -#define CreateProcessW(...) EncloseIOCreateProcessW(__VA_ARGS__) -#define SetCurrentDirectoryW(...) EncloseIOSetCurrentDirectoryW(__VA_ARGS__) -#define GetCurrentDirectoryW(...) EncloseIOGetCurrentDirectoryW(__VA_ARGS__) -#define GetFullPathNameW(...) EncloseIOGetFullPathNameW(__VA_ARGS__) -#define GetFileInformationByHandle(...) EncloseIOGetFileInformationByHandle(__VA_ARGS__) - -#endif //_WIN32 -#endif //!__cplusplus -#endif diff --git a/ruby/enclose_io_winapi.h b/ruby/enclose_io_winapi.h deleted file mode 100644 index 162ce0252..000000000 --- a/ruby/enclose_io_winapi.h +++ /dev/null @@ -1,246 +0,0 @@ -/* -* Copyright (c) 2017 - 2020 Minqi Pan -* Shengyuan Liu -* -* This file is part of libsquash, distributed under the MIT License -* For full terms see the included LICENSE file -*/ - -#ifndef ENCLOSE_IO_WINAPI_H_VD6Y96RT -#define ENCLOSE_IO_WINAPI_H_VD6Y96RT - -#ifndef STATUS_NO_MORE_FILES -# define STATUS_NO_MORE_FILES ((NTSTATUS) 0x80000006L) -#endif - -#ifndef STATUS_NOT_IMPLEMENTED -# define STATUS_NOT_IMPLEMENTED ((NTSTATUS) 0xC0000002L) -#endif - -#ifndef STATUS_SUCCESS -# define STATUS_SUCCESS ((NTSTATUS) 0x00000000L) -#endif - -typedef struct _IO_STATUS_BLOCK { - union { - NTSTATUS Status; - PVOID Pointer; - }; - ULONG_PTR Information; -} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; - -typedef VOID (NTAPI *PIO_APC_ROUTINE) - (PVOID ApcContext, - PIO_STATUS_BLOCK IoStatusBlock, - ULONG Reserved); - -typedef enum _FILE_INFORMATION_CLASS { - FileDirectoryInformation = 1, - FileFullDirectoryInformation, - FileBothDirectoryInformation, - FileBasicInformation, - FileStandardInformation, - FileInternalInformation, - FileEaInformation, - FileAccessInformation, - FileNameInformation, - FileRenameInformation, - FileLinkInformation, - FileNamesInformation, - FileDispositionInformation, - FilePositionInformation, - FileFullEaInformation, - FileModeInformation, - FileAlignmentInformation, - FileAllInformation, - FileAllocationInformation, - FileEndOfFileInformation, - FileAlternateNameInformation, - FileStreamInformation, - FilePipeInformation, - FilePipeLocalInformation, - FilePipeRemoteInformation, - FileMailslotQueryInformation, - FileMailslotSetInformation, - FileCompressionInformation, - FileObjectIdInformation, - FileCompletionInformation, - FileMoveClusterInformation, - FileQuotaInformation, - FileReparsePointInformation, - FileNetworkOpenInformation, - FileAttributeTagInformation, - FileTrackingInformation, - FileIdBothDirectoryInformation, - FileIdFullDirectoryInformation, - FileValidDataLengthInformation, - FileShortNameInformation, - FileIoCompletionNotificationInformation, - FileIoStatusBlockRangeInformation, - FileIoPriorityHintInformation, - FileSfioReserveInformation, - FileSfioVolumeInformation, - FileHardLinkInformation, - FileProcessIdsUsingFileInformation, - FileNormalizedNameInformation, - FileNetworkPhysicalNameInformation, - FileIdGlobalTxDirectoryInformation, - FileIsRemoteDeviceInformation, - FileAttributeCacheInformation, - FileNumaNodeInformation, - FileStandardLinkInformation, - FileRemoteProtocolInformation, - FileMaximumInformation -} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; - -/* from winternl.h */ -typedef struct _UNICODE_STRING { - USHORT Length; - USHORT MaximumLength; - PWSTR Buffer; -} UNICODE_STRING, *PUNICODE_STRING; - -typedef NTSTATUS(NTAPI *sNtQueryDirectoryFile) -(HANDLE FileHandle, - HANDLE Event, - PIO_APC_ROUTINE ApcRoutine, - PVOID ApcContext, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FileInformation, - ULONG Length, - FILE_INFORMATION_CLASS FileInformationClass, - BOOLEAN ReturnSingleEntry, - PUNICODE_STRING FileName, - BOOLEAN RestartScan - ); - -typedef struct _FILE_DIRECTORY_INFORMATION { - ULONG NextEntryOffset; - ULONG FileIndex; - LARGE_INTEGER CreationTime; - LARGE_INTEGER LastAccessTime; - LARGE_INTEGER LastWriteTime; - LARGE_INTEGER ChangeTime; - LARGE_INTEGER EndOfFile; - LARGE_INTEGER AllocationSize; - ULONG FileAttributes; - ULONG FileNameLength; - WCHAR FileName[1]; -} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; - -typedef NTSTATUS(NTAPI *sNtQueryInformationFile) -(HANDLE FileHandle, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FileInformation, - ULONG Length, - FILE_INFORMATION_CLASS FileInformationClass); - -typedef enum _FS_INFORMATION_CLASS { - FileFsVolumeInformation = 1, - FileFsLabelInformation = 2, - FileFsSizeInformation = 3, - FileFsDeviceInformation = 4, - FileFsAttributeInformation = 5, - FileFsControlInformation = 6, - FileFsFullSizeInformation = 7, - FileFsObjectIdInformation = 8, - FileFsDriverPathInformation = 9, - FileFsVolumeFlagsInformation = 10, - FileFsSectorSizeInformation = 11 -} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; - -typedef NTSTATUS(NTAPI *sNtQueryVolumeInformationFile) -(HANDLE FileHandle, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FsInformation, - ULONG Length, - FS_INFORMATION_CLASS FsInformationClass); - -typedef struct _FILE_BASIC_INFORMATION { - LARGE_INTEGER CreationTime; - LARGE_INTEGER LastAccessTime; - LARGE_INTEGER LastWriteTime; - LARGE_INTEGER ChangeTime; - DWORD FileAttributes; -} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; - -typedef struct _FILE_STANDARD_INFORMATION { - LARGE_INTEGER AllocationSize; - LARGE_INTEGER EndOfFile; - ULONG NumberOfLinks; - BOOLEAN DeletePending; - BOOLEAN Directory; -} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; - -typedef struct _FILE_INTERNAL_INFORMATION { - LARGE_INTEGER IndexNumber; -} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; - -typedef struct _FILE_EA_INFORMATION { - ULONG EaSize; -} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; - -typedef struct _FILE_ACCESS_INFORMATION { - ACCESS_MASK AccessFlags; -} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; - -typedef struct _FILE_POSITION_INFORMATION { - LARGE_INTEGER CurrentByteOffset; -} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; - -typedef struct _FILE_MODE_INFORMATION { - ULONG Mode; -} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; - -typedef struct _FILE_ALIGNMENT_INFORMATION { - ULONG AlignmentRequirement; -} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; - -typedef struct _FILE_NAME_INFORMATION { - ULONG FileNameLength; - WCHAR FileName[1]; -} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; - -typedef struct _FILE_ALL_INFORMATION { - FILE_BASIC_INFORMATION BasicInformation; - FILE_STANDARD_INFORMATION StandardInformation; - FILE_INTERNAL_INFORMATION InternalInformation; - FILE_EA_INFORMATION EaInformation; - FILE_ACCESS_INFORMATION AccessInformation; - FILE_POSITION_INFORMATION PositionInformation; - FILE_MODE_INFORMATION ModeInformation; - FILE_ALIGNMENT_INFORMATION AlignmentInformation; - FILE_NAME_INFORMATION NameInformation; -} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; - -extern sNtQueryDirectoryFile pNtQueryDirectoryFile; -extern sNtQueryInformationFile pNtQueryInformationFile; -extern sNtQueryVolumeInformationFile pNtQueryVolumeInformationFile; - -typedef struct _REPARSE_DATA_BUFFER { - ULONG ReparseTag; - USHORT ReparseDataLength; - USHORT Reserved; - union { - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - ULONG Flags; - WCHAR PathBuffer[1]; - } SymbolicLinkReparseBuffer; - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - WCHAR PathBuffer[1]; - } MountPointReparseBuffer; - struct { - UCHAR DataBuffer[1]; - } GenericReparseBuffer; - }; -} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; - -#endif diff --git a/ruby/encoding.c b/ruby/encoding.c index 69015cc8f..273710837 100644 --- a/ruby/encoding.c +++ b/ruby/encoding.c @@ -9,14 +9,25 @@ **********************************************************************/ -#include "ruby/encoding.h" -#include "internal.h" +#include "ruby/internal/config.h" + +#include + #include "encindex.h" +#include "internal.h" +#include "internal/enc.h" +#include "internal/encoding.h" +#include "internal/inits.h" +#include "internal/load.h" +#include "internal/object.h" +#include "internal/string.h" +#include "internal/vm.h" #include "regenc.h" -#include +#include "ruby/encoding.h" #include "ruby/util.h" - #include "ruby_assert.h" +#include "vm_sync.h" + #ifndef ENC_DEBUG #define ENC_DEBUG 0 #endif @@ -44,7 +55,10 @@ void rb_encdb_set_unicode(int index); static ID id_encoding; VALUE rb_cEncoding; -static VALUE rb_encoding_list; + +#define DEFAULT_ENCODING_LIST_CAPA 128 +static VALUE rb_default_encoding_list; +static VALUE rb_additional_encoding_list; struct rb_encoding_entry { const char *name; @@ -52,12 +66,27 @@ struct rb_encoding_entry { rb_encoding *base; }; -static struct { +static struct enc_table { struct rb_encoding_entry *list; int count; int size; st_table *names; -} enc_table; +} global_enc_table; + +static rb_encoding *global_enc_ascii, + *global_enc_utf_8, + *global_enc_us_ascii; + +#define GLOBAL_ENC_TABLE_ENTER(enc_table) struct enc_table *enc_table = &global_enc_table; RB_VM_LOCK_ENTER() +#define GLOBAL_ENC_TABLE_LEAVE() RB_VM_LOCK_LEAVE() +#define GLOBAL_ENC_TABLE_EVAL(enc_table, expr) do { \ + GLOBAL_ENC_TABLE_ENTER(enc_table); \ + { \ + expr; \ + } \ + GLOBAL_ENC_TABLE_LEAVE(); \ +} while (0) + #define ENC_DUMMY_FLAG (1<<24) #define ENC_INDEX_MASK (~(~0U<<24)) @@ -72,10 +101,6 @@ static struct { #define ENCODING_NAMELEN_MAX 63 #define valid_encoding_name_p(name) ((name) && strlen(name) <= ENCODING_NAMELEN_MAX) -#define enc_autoload_p(enc) (!rb_enc_mbmaxlen(enc)) - -static int load_encoding(const char *name); - static const rb_data_type_t encoding_data_type = { "encoding", {0, 0, 0,}, @@ -94,22 +119,69 @@ rb_data_is_encoding(VALUE obj) static VALUE enc_new(rb_encoding *encoding) { - return TypedData_Wrap_Struct(rb_cEncoding, &encoding_data_type, (void *)encoding); + VALUE enc = TypedData_Wrap_Struct(rb_cEncoding, &encoding_data_type, (void *)encoding); + rb_obj_freeze(enc); + FL_SET_RAW(enc, RUBY_FL_SHAREABLE); + return enc; +} + +static void +enc_list_update(int index, rb_raw_encoding *encoding) +{ + if (index < DEFAULT_ENCODING_LIST_CAPA) { + VALUE list = rb_default_encoding_list; + if (list && NIL_P(rb_ary_entry(list, index))) { + /* initialize encoding data */ + rb_ary_store(list, index, enc_new(encoding)); + } + } + else { + RB_VM_LOCK_ENTER(); + { + VALUE list = rb_additional_encoding_list; + if (list && NIL_P(rb_ary_entry(list, index))) { + /* initialize encoding data */ + rb_ary_store(list, index - DEFAULT_ENCODING_LIST_CAPA, enc_new(encoding)); + } + } + RB_VM_LOCK_LEAVE(); + } } static VALUE -rb_enc_from_encoding_index(int idx) +enc_list_lookup(int idx) { VALUE list, enc; - if (!(list = rb_encoding_list)) { - rb_bug("rb_enc_from_encoding_index(%d): no rb_encoding_list", idx); + if (idx < DEFAULT_ENCODING_LIST_CAPA) { + if (!(list = rb_default_encoding_list)) { + rb_bug("rb_enc_from_encoding_index(%d): no rb_default_encoding_list", idx); + } + enc = rb_ary_entry(list, idx); } - enc = rb_ary_entry(list, idx); + else { + RB_VM_LOCK_ENTER(); + { + if (!(list = rb_additional_encoding_list)) { + rb_bug("rb_enc_from_encoding_index(%d): no rb_additional_encoding_list", idx); + } + enc = rb_ary_entry(list, idx - DEFAULT_ENCODING_LIST_CAPA); + } + RB_VM_LOCK_LEAVE(); + } + if (NIL_P(enc)) { - rb_bug("rb_enc_from_encoding_index(%d): not created yet", idx); + rb_bug("rb_enc_from_encoding_index(%d): not created yet", idx); + } + else { + return enc; } - return enc; +} + +static VALUE +rb_enc_from_encoding_index(int idx) +{ + return enc_list_lookup(idx); } VALUE @@ -133,16 +205,14 @@ rb_enc_dummy_p(rb_encoding *enc) return ENC_DUMMY_P(enc) != 0; } -static int enc_autoload(rb_encoding *); - static int check_encoding(rb_encoding *enc) { int index = rb_enc_to_index(enc); if (rb_enc_from_index(index) != enc) return -1; - if (enc_autoload_p(enc)) { - index = enc_autoload(enc); + if (rb_enc_autoload_p(enc)) { + index = rb_enc_autoload(enc); } return index; } @@ -186,7 +256,7 @@ must_encindex(int index) rb_raise(rb_eEncodingError, "wrong encoding index %d for %s (expected %d)", index, rb_enc_name(enc), ENC_TO_ENCINDEX(enc)); } - if (enc_autoload_p(enc) && enc_autoload(enc) == -1) { + if (rb_enc_autoload_p(enc) && rb_enc_autoload(enc) == -1) { rb_loaderror("failed to load encoding (%s)", rb_enc_name(enc)); } @@ -197,6 +267,7 @@ int rb_to_encoding_index(VALUE enc) { int idx; + const char *name; idx = enc_check_encoding(enc); if (idx >= 0) { @@ -208,20 +279,33 @@ rb_to_encoding_index(VALUE enc) if (!rb_enc_asciicompat(rb_enc_get(enc))) { return -1; } - return rb_enc_find_index(StringValueCStr(enc)); + if (!(name = rb_str_to_cstr(enc))) { + return -1; + } + return rb_enc_find_index(name); +} + +static const char * +name_for_encoding(volatile VALUE *enc) +{ + VALUE name = StringValue(*enc); + const char *n; + + if (!rb_enc_asciicompat(rb_enc_get(name))) { + rb_raise(rb_eArgError, "invalid encoding name (non ASCII)"); + } + if (!(n = rb_str_to_cstr(name))) { + rb_raise(rb_eArgError, "invalid encoding name (NUL byte)"); + } + return n; } /* Returns encoding index or UNSPECIFIED_ENCODING */ static int str_find_encindex(VALUE enc) { - int idx; - - StringValue(enc); - if (!rb_enc_asciicompat(rb_enc_get(enc))) { - rb_raise(rb_eArgError, "invalid name encoding (non ASCII)"); - } - idx = rb_enc_find_index(StringValueCStr(enc)); + int idx = rb_enc_find_index(name_for_encoding(&enc)); + RB_GC_GUARD(enc); return idx; } @@ -259,26 +343,25 @@ rb_find_encoding(VALUE enc) } static int -enc_table_expand(int newsize) +enc_table_expand(struct enc_table *enc_table, int newsize) { struct rb_encoding_entry *ent; int count = newsize; - if (enc_table.size >= newsize) return newsize; + if (enc_table->size >= newsize) return newsize; newsize = (newsize + 7) / 8 * 8; - ent = REALLOC_N(enc_table.list, struct rb_encoding_entry, newsize); - memset(ent + enc_table.size, 0, sizeof(*ent)*(newsize - enc_table.size)); - enc_table.list = ent; - enc_table.size = newsize; + ent = REALLOC_N(enc_table->list, struct rb_encoding_entry, newsize); + memset(ent + enc_table->size, 0, sizeof(*ent)*(newsize - enc_table->size)); + enc_table->list = ent; + enc_table->size = newsize; return count; } static int -enc_register_at(int index, const char *name, rb_encoding *base_encoding) +enc_register_at(struct enc_table *enc_table, int index, const char *name, rb_encoding *base_encoding) { - struct rb_encoding_entry *ent = &enc_table.list[index]; + struct rb_encoding_entry *ent = &enc_table->list[index]; rb_raw_encoding *encoding; - VALUE list; if (!valid_encoding_name_p(name)) return -1; if (!ent->name) { @@ -300,76 +383,121 @@ enc_register_at(int index, const char *name, rb_encoding *base_encoding) encoding->name = name; encoding->ruby_encoding_index = index; ent->enc = encoding; - st_insert(enc_table.names, (st_data_t)name, (st_data_t)index); - list = rb_encoding_list; - if (list && NIL_P(rb_ary_entry(list, index))) { - /* initialize encoding data */ - rb_ary_store(list, index, enc_new(encoding)); - } + st_insert(enc_table->names, (st_data_t)name, (st_data_t)index); + + enc_list_update(index, encoding); return index; } static int -enc_register(const char *name, rb_encoding *encoding) +enc_register(struct enc_table *enc_table, const char *name, rb_encoding *encoding) { - int index = enc_table.count; + int index = enc_table->count; - if ((index = enc_table_expand(index + 1)) < 0) return -1; - enc_table.count = index; - return enc_register_at(index - 1, name, encoding); + enc_table->count = enc_table_expand(enc_table, index + 1); + return enc_register_at(enc_table, index, name, encoding); } static void set_encoding_const(const char *, rb_encoding *); -int rb_enc_registered(const char *name); +static int enc_registered(struct enc_table *enc_table, const char *name); + +static rb_encoding * +enc_from_index(struct enc_table *enc_table, int index) +{ + if (UNLIKELY(index < 0 || enc_table->count <= (index &= ENC_INDEX_MASK))) { + return 0; + } + return enc_table->list[index].enc; +} + +rb_encoding * +rb_enc_from_index(int index) +{ + rb_encoding *enc; + + switch (index) { + case ENCINDEX_ASCII: return global_enc_ascii; + case ENCINDEX_UTF_8: return global_enc_utf_8; + case ENCINDEX_US_ASCII: return global_enc_us_ascii; + default: + GLOBAL_ENC_TABLE_EVAL(enc_table, + enc = enc_from_index(enc_table, index)); + return enc; + } +} int rb_enc_register(const char *name, rb_encoding *encoding) { - int index = rb_enc_registered(name); + int index; + + GLOBAL_ENC_TABLE_ENTER(enc_table); + { + index = enc_registered(enc_table, name); + + if (index >= 0) { + rb_encoding *oldenc = enc_from_index(enc_table, index); + if (STRCASECMP(name, rb_enc_name(oldenc))) { + index = enc_register(enc_table, name, encoding); + } + else if (rb_enc_autoload_p(oldenc) || !ENC_DUMMY_P(oldenc)) { + enc_register_at(enc_table, index, name, encoding); + } + else { + rb_raise(rb_eArgError, "encoding %s is already registered", name); + } + } + else { + index = enc_register(enc_table, name, encoding); + set_encoding_const(name, rb_enc_from_index(index)); + } + } + GLOBAL_ENC_TABLE_LEAVE(); + return index; +} - if (index >= 0) { - rb_encoding *oldenc = rb_enc_from_index(index); - if (STRCASECMP(name, rb_enc_name(oldenc))) { - index = enc_register(name, encoding); - } - else if (enc_autoload_p(oldenc) || !ENC_DUMMY_P(oldenc)) { - enc_register_at(index, name, encoding); - } - else { - rb_raise(rb_eArgError, "encoding %s is already registered", name); - } - } - else { - index = enc_register(name, encoding); - set_encoding_const(name, rb_enc_from_index(index)); +int +enc_registered(struct enc_table *enc_table, const char *name) +{ + st_data_t idx = 0; + + if (!name) return -1; + if (!enc_table->list) return -1; + if (st_lookup(enc_table->names, (st_data_t)name, &idx)) { + return (int)idx; } - return index; + return -1; } void rb_encdb_declare(const char *name) { - int idx = rb_enc_registered(name); - if (idx < 0) { - idx = enc_register(name, 0); + GLOBAL_ENC_TABLE_ENTER(enc_table); + { + int idx = enc_registered(enc_table, name); + if (idx < 0) { + idx = enc_register(enc_table, name, 0); + } + set_encoding_const(name, rb_enc_from_index(idx)); } - set_encoding_const(name, rb_enc_from_index(idx)); + GLOBAL_ENC_TABLE_LEAVE(); } static void -enc_check_duplication(const char *name) +enc_check_duplication(struct enc_table *enc_table, const char *name) { - if (rb_enc_registered(name) >= 0) { + if (enc_registered(enc_table, name) >= 0) { rb_raise(rb_eArgError, "encoding %s is already registered", name); } } static rb_encoding* -set_base_encoding(int index, rb_encoding *base) +set_base_encoding(struct enc_table *enc_table, int index, rb_encoding *base) { - rb_encoding *enc = enc_table.list[index].enc; + rb_encoding *enc = enc_table->list[index].enc; - enc_table.list[index].base = base; + ASSUME(enc); + enc_table->list[index].base = base; if (ENC_DUMMY_P(base)) ENC_SET_DUMMY((rb_raw_encoding *)enc); return enc; } @@ -381,9 +509,13 @@ set_base_encoding(int index, rb_encoding *base) void rb_enc_set_base(const char *name, const char *orig) { - int idx = rb_enc_registered(name); - int origidx = rb_enc_registered(orig); - set_base_encoding(idx, rb_enc_from_index(origidx)); + GLOBAL_ENC_TABLE_ENTER(enc_table); + { + int idx = enc_registered(enc_table, name); + int origidx = enc_registered(enc_table, orig); + set_base_encoding(enc_table, idx, rb_enc_from_index(origidx)); + } + GLOBAL_ENC_TABLE_LEAVE(); } /* for encdb.h @@ -392,24 +524,39 @@ rb_enc_set_base(const char *name, const char *orig) int rb_enc_set_dummy(int index) { - rb_encoding *enc = enc_table.list[index].enc; + rb_encoding *enc; + + GLOBAL_ENC_TABLE_EVAL(enc_table, + enc = enc_table->list[index].enc); ENC_SET_DUMMY((rb_raw_encoding *)enc); return index; } -int -rb_enc_replicate(const char *name, rb_encoding *encoding) +static int +enc_replicate(struct enc_table *enc_table, const char *name, rb_encoding *encoding) { int idx; - enc_check_duplication(name); - idx = enc_register(name, encoding); - set_base_encoding(idx, encoding); + enc_check_duplication(enc_table, name); + idx = enc_register(enc_table, name, encoding); + if (idx < 0) rb_raise(rb_eArgError, "invalid encoding name: %s", name); + set_base_encoding(enc_table, idx, encoding); set_encoding_const(name, rb_enc_from_index(idx)); return idx; } +int +rb_enc_replicate(const char *name, rb_encoding *encoding) +{ + int r; + + GLOBAL_ENC_TABLE_EVAL(enc_table, + r = enc_replicate(enc_table, name, encoding)); + + return r; +} + /* * call-seq: * enc.replicate(name) -> encoding @@ -420,24 +567,24 @@ rb_enc_replicate(const char *name, rb_encoding *encoding) * */ static VALUE -enc_replicate(VALUE encoding, VALUE name) +enc_replicate_m(VALUE encoding, VALUE name) { - return rb_enc_from_encoding_index( - rb_enc_replicate(StringValueCStr(name), - rb_to_encoding(encoding))); + int idx = rb_enc_replicate(name_for_encoding(&name), rb_to_encoding(encoding)); + RB_GC_GUARD(name); + return rb_enc_from_encoding_index(idx); } static int -enc_replicate_with_index(const char *name, rb_encoding *origenc, int idx) +enc_replicate_with_index(struct enc_table *enc_table, const char *name, rb_encoding *origenc, int idx) { if (idx < 0) { - idx = enc_register(name, origenc); + idx = enc_register(enc_table, name, origenc); } else { - idx = enc_register_at(idx, name, origenc); + idx = enc_register_at(enc_table, idx, name, origenc); } if (idx >= 0) { - set_base_encoding(idx, origenc); + set_base_encoding(enc_table, idx, origenc); set_encoding_const(name, rb_enc_from_index(idx)); } else { @@ -449,33 +596,54 @@ enc_replicate_with_index(const char *name, rb_encoding *origenc, int idx) int rb_encdb_replicate(const char *name, const char *orig) { - int origidx = rb_enc_registered(orig); - int idx = rb_enc_registered(name); + int r; + + GLOBAL_ENC_TABLE_ENTER(enc_table); + { + int origidx = enc_registered(enc_table, orig); + int idx = enc_registered(enc_table, name); - if (origidx < 0) { - origidx = enc_register(orig, 0); + if (origidx < 0) { + origidx = enc_register(enc_table, orig, 0); + } + r = enc_replicate_with_index(enc_table, name, rb_enc_from_index(origidx), idx); } - return enc_replicate_with_index(name, rb_enc_from_index(origidx), idx); + GLOBAL_ENC_TABLE_LEAVE(); + + return r; } int rb_define_dummy_encoding(const char *name) { - int index = rb_enc_replicate(name, rb_ascii8bit_encoding()); - rb_encoding *enc = enc_table.list[index].enc; + int index; + + GLOBAL_ENC_TABLE_ENTER(enc_table); + { + index = enc_replicate(enc_table, name, rb_ascii8bit_encoding()); + rb_encoding *enc = enc_table->list[index].enc; + ENC_SET_DUMMY((rb_raw_encoding *)enc); + } + GLOBAL_ENC_TABLE_LEAVE(); - ENC_SET_DUMMY((rb_raw_encoding *)enc); return index; } int rb_encdb_dummy(const char *name) { - int index = enc_replicate_with_index(name, rb_ascii8bit_encoding(), - rb_enc_registered(name)); - rb_encoding *enc = enc_table.list[index].enc; + int index; + + GLOBAL_ENC_TABLE_ENTER(enc_table); + { + index = enc_replicate_with_index(enc_table, name, + rb_ascii8bit_encoding(), + enc_registered(enc_table, name)); + rb_encoding *enc = enc_table->list[index].enc; + ENC_SET_DUMMY((rb_raw_encoding *)enc); + } + GLOBAL_ENC_TABLE_LEAVE(); - ENC_SET_DUMMY((rb_raw_encoding *)enc); return index; } @@ -495,7 +663,7 @@ rb_encdb_dummy(const char *name) static VALUE enc_dummy_p(VALUE enc) { - return ENC_DUMMY_P(must_encoding(enc)) ? Qtrue : Qfalse; + return RBOOL(ENC_DUMMY_P(must_encoding(enc))); } /* @@ -511,7 +679,7 @@ enc_dummy_p(VALUE enc) static VALUE enc_ascii_compatible_p(VALUE enc) { - return rb_enc_asciicompat(must_encoding(enc)) ? Qtrue : Qfalse; + return RBOOL(rb_enc_asciicompat(must_encoding(enc))); } /* @@ -534,63 +702,84 @@ enc_dup_name(st_data_t name) * else returns NULL. */ static int -enc_alias_internal(const char *alias, int idx) +enc_alias_internal(struct enc_table *enc_table, const char *alias, int idx) { - return st_insert2(enc_table.names, (st_data_t)alias, (st_data_t)idx, + return st_insert2(enc_table->names, (st_data_t)alias, (st_data_t)idx, enc_dup_name); } static int -enc_alias(const char *alias, int idx) +enc_alias(struct enc_table *enc_table, const char *alias, int idx) { if (!valid_encoding_name_p(alias)) return -1; - if (!enc_alias_internal(alias, idx)) - set_encoding_const(alias, rb_enc_from_index(idx)); + if (!enc_alias_internal(enc_table, alias, idx)) + set_encoding_const(alias, enc_from_index(enc_table, idx)); return idx; } int rb_enc_alias(const char *alias, const char *orig) { - int idx; + int idx, r; - enc_check_duplication(alias); - if ((idx = rb_enc_find_index(orig)) < 0) { - return -1; + GLOBAL_ENC_TABLE_ENTER(enc_table); + { + enc_check_duplication(enc_table, alias); + if ((idx = rb_enc_find_index(orig)) < 0) { + r = -1; + } + else { + r = enc_alias(enc_table, alias, idx); + } } - return enc_alias(alias, idx); + GLOBAL_ENC_TABLE_LEAVE(); + + return r; } int rb_encdb_alias(const char *alias, const char *orig) { - int idx = rb_enc_registered(orig); + int r; - if (idx < 0) { - idx = enc_register(orig, 0); + GLOBAL_ENC_TABLE_ENTER(enc_table); + { + int idx = enc_registered(enc_table, orig); + + if (idx < 0) { + idx = enc_register(enc_table, orig, 0); + } + r = enc_alias(enc_table, alias, idx); } - return enc_alias(alias, idx); + GLOBAL_ENC_TABLE_LEAVE(); + + return r; } void rb_encdb_set_unicode(int index) { - ((rb_raw_encoding *)rb_enc_from_index(index))->flags |= ONIGENC_FLAG_UNICODE; + rb_raw_encoding *enc = (rb_raw_encoding *)rb_enc_from_index(index); + ASSUME(enc); + enc->flags |= ONIGENC_FLAG_UNICODE; } -void -rb_enc_init(void) +static void +rb_enc_init(struct enc_table *enc_table) { - enc_table_expand(ENCODING_COUNT + 1); - if (!enc_table.names) { - enc_table.names = st_init_strcasetable(); + enc_table_expand(enc_table, ENCODING_COUNT + 1); + if (!enc_table->names) { + enc_table->names = st_init_strcasetable(); } -#define ENC_REGISTER(enc) enc_register_at(ENCINDEX_##enc, rb_enc_name(&OnigEncoding##enc), &OnigEncoding##enc) +#define ENC_REGISTER(enc) enc_register_at(enc_table, ENCINDEX_##enc, rb_enc_name(&OnigEncoding##enc), &OnigEncoding##enc) ENC_REGISTER(ASCII); ENC_REGISTER(UTF_8); ENC_REGISTER(US_ASCII); + global_enc_ascii = enc_table->list[ENCINDEX_ASCII].enc; + global_enc_utf_8 = enc_table->list[ENCINDEX_UTF_8].enc; + global_enc_us_ascii = enc_table->list[ENCINDEX_US_ASCII].enc; #undef ENC_REGISTER -#define ENCDB_REGISTER(name, enc) enc_register_at(ENCINDEX_##enc, name, NULL) +#define ENCDB_REGISTER(name, enc) enc_register_at(enc_table, ENCINDEX_##enc, name, NULL) ENCDB_REGISTER("UTF-16BE", UTF_16BE); ENCDB_REGISTER("UTF-16LE", UTF_16LE); ENCDB_REGISTER("UTF-32BE", UTF_32BE); @@ -602,16 +791,7 @@ rb_enc_init(void) ENCDB_REGISTER("EUC-JP", EUC_JP); ENCDB_REGISTER("Windows-31J", Windows_31J); #undef ENCDB_REGISTER - enc_table.count = ENCINDEX_BUILTIN_MAX; -} - -rb_encoding * -rb_enc_from_index(int index) -{ - if (UNLIKELY(index < 0 || enc_table.count <= (index &= ENC_INDEX_MASK))) { - return 0; - } - return enc_table.list[index].enc; + enc_table->count = ENCINDEX_BUILTIN_MAX; } rb_encoding * @@ -620,24 +800,12 @@ rb_enc_get_from_index(int index) return must_encindex(index); } -int -rb_enc_registered(const char *name) -{ - st_data_t idx = 0; - - if (!name) return -1; - if (!enc_table.list) return -1; - if (st_lookup(enc_table.names, (st_data_t)name, &idx)) { - return (int)idx; - } - return -1; -} +int rb_require_internal_silent(VALUE fname); static int load_encoding(const char *name) { VALUE enclib = rb_sprintf("enc/%s.so", name); - VALUE verbose = ruby_verbose; VALUE debug = ruby_debug; VALUE errinfo; char *s = RSTRING_PTR(enclib) + 4, *e = RSTRING_END(enclib) - 3; @@ -650,40 +818,60 @@ load_encoding(const char *name) ++s; } enclib = rb_fstring(enclib); - ruby_verbose = Qfalse; ruby_debug = Qfalse; errinfo = rb_errinfo(); - loaded = rb_require_internal(enclib); - ruby_verbose = verbose; + loaded = rb_require_internal_silent(enclib); ruby_debug = debug; rb_set_errinfo(errinfo); - if (loaded < 0 || 1 < loaded) return -1; - if ((idx = rb_enc_registered(name)) < 0) return -1; - if (enc_autoload_p(enc_table.list[idx].enc)) return -1; + + GLOBAL_ENC_TABLE_ENTER(enc_table); + { + if (loaded < 0 || 1 < loaded) { + idx = -1; + } + else if ((idx = enc_registered(enc_table, name)) < 0) { + idx = -1; + } + else if (rb_enc_autoload_p(enc_table->list[idx].enc)) { + idx = -1; + } + } + GLOBAL_ENC_TABLE_LEAVE(); + return idx; } static int -enc_autoload(rb_encoding *enc) +enc_autoload_body(struct enc_table *enc_table, rb_encoding *enc) { - int i; - rb_encoding *base = enc_table.list[ENC_TO_ENCINDEX(enc)].base; + rb_encoding *base = enc_table->list[ENC_TO_ENCINDEX(enc)].base; if (base) { - i = 0; + int i = 0; do { - if (i >= enc_table.count) return -1; - } while (enc_table.list[i].enc != base && (++i, 1)); - if (enc_autoload_p(base)) { - if (enc_autoload(base) < 0) return -1; + if (i >= enc_table->count) return -1; + } while (enc_table->list[i].enc != base && (++i, 1)); + if (rb_enc_autoload_p(base)) { + if (rb_enc_autoload(base) < 0) return -1; } i = enc->ruby_encoding_index; - enc_register_at(i & ENC_INDEX_MASK, rb_enc_name(enc), base); - ((rb_raw_encoding *)enc)->ruby_encoding_index = i; + enc_register_at(enc_table, i & ENC_INDEX_MASK, rb_enc_name(enc), base); + ((rb_raw_encoding *)enc)->ruby_encoding_index = i; i &= ENC_INDEX_MASK; + return i; } else { - i = load_encoding(rb_enc_name(enc)); + return -2; + } +} + +int +rb_enc_autoload(rb_encoding *enc) +{ + int i; + GLOBAL_ENC_TABLE_EVAL(enc_table, i = enc_autoload_body(enc_table, enc)); + if (i == -2) { + i = load_encoding(rb_enc_name(enc)); } return i; } @@ -692,9 +880,11 @@ enc_autoload(rb_encoding *enc) int rb_enc_find_index(const char *name) { - int i = rb_enc_registered(name); + int i; rb_encoding *enc; + GLOBAL_ENC_TABLE_EVAL(enc_table, i = enc_registered(enc_table, name)); + if (i < 0) { i = load_encoding(name); } @@ -703,8 +893,8 @@ rb_enc_find_index(const char *name) rb_raise(rb_eArgError, "encoding %s is not registered", name); } } - else if (enc_autoload_p(enc)) { - if (enc_autoload(enc) < 0) { + else if (rb_enc_autoload_p(enc)) { + if (rb_enc_autoload(enc) < 0) { rb_warn("failed to load encoding (%s); use ASCII-8BIT instead", name); return 0; @@ -769,8 +959,18 @@ enc_get_index_str(VALUE str) if (i == ENCODING_INLINE_MAX) { VALUE iv; +#if 0 iv = rb_ivar_get(str, rb_id_encoding()); i = NUM2INT(iv); +#else + /* + * Tentatively, assume ASCII-8BIT, if encoding index instance + * variable is not found. This can happen when freeing after + * all instance variables are removed in `obj_free`. + */ + iv = rb_attr_get(str, rb_id_encoding()); + i = NIL_P(iv) ? ENCINDEX_ASCII : NUM2INT(iv); +#endif } return i; } @@ -874,12 +1074,9 @@ rb_enc_get(VALUE obj) return rb_enc_from_index(rb_enc_get_index(obj)); } -static rb_encoding* enc_compatible_str(VALUE str1, VALUE str2); - -rb_encoding* -rb_enc_check_str(VALUE str1, VALUE str2) +static rb_encoding* +rb_encoding_check(rb_encoding* enc, VALUE str1, VALUE str2) { - rb_encoding *enc = enc_compatible_str(MUST_STRING(str1), MUST_STRING(str2)); if (!enc) rb_raise(rb_eEncCompatError, "incompatible character encodings: %s and %s", rb_enc_name(rb_enc_get(str1)), @@ -887,15 +1084,20 @@ rb_enc_check_str(VALUE str1, VALUE str2) return enc; } +static rb_encoding* enc_compatible_str(VALUE str1, VALUE str2); + +rb_encoding* +rb_enc_check_str(VALUE str1, VALUE str2) +{ + rb_encoding *enc = enc_compatible_str(MUST_STRING(str1), MUST_STRING(str2)); + return rb_encoding_check(enc, str1, str2); +} + rb_encoding* rb_enc_check(VALUE str1, VALUE str2) { rb_encoding *enc = rb_enc_compatible(str1, str2); - if (!enc) - rb_raise(rb_eEncCompatError, "incompatible character encodings: %s and %s", - rb_enc_name(rb_enc_get(str1)), - rb_enc_name(rb_enc_get(str2))); - return enc; + return rb_encoding_check(enc, str1, str2); } static rb_encoding* @@ -909,7 +1111,7 @@ enc_compatible_latter(VALUE str1, VALUE str2, int idx1, int idx2) if (isstr2 && RSTRING_LEN(str2) == 0) return enc1; isstr1 = RB_TYPE_P(str1, T_STRING); - if (isstr1 && RSTRING_LEN(str1) == 0) + if (isstr1 && isstr2 && RSTRING_LEN(str1) == 0) return (rb_enc_asciicompat(enc1) && rb_enc_str_asciionly_p(str2)) ? enc1 : enc2; if (!rb_enc_asciicompat(enc1) || !rb_enc_asciicompat(enc2)) { return 0; @@ -1078,13 +1280,6 @@ rb_enc_codepoint_len(const char *p, const char *e, int *len_p, rb_encoding *enc) return rb_enc_mbc_to_codepoint(p, e, enc); } -#undef rb_enc_codepoint -unsigned int -rb_enc_codepoint(const char *p, const char *e, rb_encoding *enc) -{ - return rb_enc_codepoint_len(p, e, 0, enc); -} - int rb_enc_codelen(int c, rb_encoding *enc) { @@ -1095,13 +1290,6 @@ rb_enc_codelen(int c, rb_encoding *enc) return n; } -#undef rb_enc_code_to_mbclen -int -rb_enc_code_to_mbclen(int code, rb_encoding *enc) -{ - return ONIGENC_CODE_TO_MBCLEN(enc, code); -} - int rb_enc_toupper(int c, rb_encoding *enc) { @@ -1138,7 +1326,7 @@ enc_inspect(VALUE self) "#<%"PRIsVALUE":%s%s%s>", rb_obj_class(self), rb_enc_name(enc), (ENC_DUMMY_P(enc) ? " (dummy)" : ""), - enc_autoload_p(enc) ? " (autoload)" : ""); + rb_enc_autoload_p(enc) ? " (autoload)" : ""); } /* @@ -1183,7 +1371,10 @@ enc_names(VALUE self) args[0] = (VALUE)rb_to_encoding_index(self); args[1] = rb_ary_new2(0); - st_foreach(enc_table.names, enc_names_i, (st_data_t)args); + + GLOBAL_ENC_TABLE_EVAL(enc_table, + st_foreach(enc_table->names, enc_names_i, (st_data_t)args)); + return args[1]; } @@ -1209,7 +1400,14 @@ static VALUE enc_list(VALUE klass) { VALUE ary = rb_ary_new2(0); - rb_ary_replace(ary, rb_encoding_list); + + RB_VM_LOCK_ENTER(); + { + rb_ary_replace(ary, rb_default_encoding_list); + rb_ary_concat(ary, rb_additional_encoding_list); + } + RB_VM_LOCK_LEAVE(); + return ary; } @@ -1282,12 +1480,13 @@ enc_compatible_p(VALUE klass, VALUE str1, VALUE str2) return rb_enc_from_encoding(enc); } +NORETURN(static VALUE enc_s_alloc(VALUE klass)); /* :nodoc: */ static VALUE enc_s_alloc(VALUE klass) { rb_undefined_alloc(klass); - return Qnil; + UNREACHABLE_RETURN(Qnil); } /* :nodoc: */ @@ -1315,7 +1514,7 @@ enc_m_loader(VALUE klass, VALUE str) rb_encoding * rb_ascii8bit_encoding(void) { - return enc_table.list[ENCINDEX_ASCII].enc; + return global_enc_ascii; } int @@ -1327,7 +1526,7 @@ rb_ascii8bit_encindex(void) rb_encoding * rb_utf8_encoding(void) { - return enc_table.list[ENCINDEX_UTF_8].enc; + return global_enc_utf_8; } int @@ -1339,7 +1538,7 @@ rb_utf8_encindex(void) rb_encoding * rb_usascii_encoding(void) { - return enc_table.list[ENCINDEX_US_ASCII].enc; + return global_enc_us_ascii; } int @@ -1355,15 +1554,17 @@ rb_locale_encindex(void) { int idx = rb_locale_charmap_index(); - if (idx < 0) idx = ENCINDEX_ASCII; + if (idx < 0) idx = ENCINDEX_UTF_8; - if (rb_enc_registered("locale") < 0) { + GLOBAL_ENC_TABLE_ENTER(enc_table); + if (enc_registered(enc_table, "locale") < 0) { # if defined _WIN32 void Init_w32_codepage(void); Init_w32_codepage(); # endif - enc_alias_internal("locale", idx); + enc_alias_internal(enc_table, "locale", idx); } + GLOBAL_ENC_TABLE_LEAVE(); return idx; } @@ -1377,7 +1578,11 @@ rb_locale_encoding(void) int rb_filesystem_encindex(void) { - int idx = rb_enc_registered("filesystem"); + int idx; + + GLOBAL_ENC_TABLE_EVAL(enc_table, + idx = enc_registered(enc_table, "filesystem")); + if (idx < 0) idx = ENCINDEX_ASCII; return idx; @@ -1405,20 +1610,25 @@ enc_set_default_encoding(struct default_encoding *def, VALUE encoding, const cha /* Already set */ overridden = TRUE; - if (NIL_P(encoding)) { - def->index = -1; - def->enc = 0; - st_insert(enc_table.names, (st_data_t)strdup(name), - (st_data_t)UNSPECIFIED_ENCODING); - } - else { - def->index = rb_enc_to_index(rb_to_encoding(encoding)); - def->enc = 0; - enc_alias_internal(name, def->index); - } - - if (def == &default_external) - enc_alias_internal("filesystem", Init_enc_set_filesystem_encoding()); + GLOBAL_ENC_TABLE_ENTER(enc_table); + { + if (NIL_P(encoding)) { + def->index = -1; + def->enc = 0; + st_insert(enc_table->names, (st_data_t)strdup(name), + (st_data_t)UNSPECIFIED_ENCODING); + } + else { + def->index = rb_enc_to_index(rb_to_encoding(encoding)); + def->enc = 0; + enc_alias_internal(enc_table, name, def->index); + } + + if (def == &default_external) { + enc_alias_internal(enc_table, "filesystem", Init_enc_set_filesystem_encoding()); + } + } + GLOBAL_ENC_TABLE_LEAVE(); return overridden; } @@ -1465,9 +1675,11 @@ rb_enc_default_external(void) * encoding may not be valid. Be sure to check String#valid_encoding?. * * File data written to disk will be transcoded to the default external - * encoding when written. + * encoding when written, if default_internal is not nil. * - * The default external encoding is initialized by the locale or -E option. + * The default external encoding is initialized by the -E option. + * If -E isn't set, it is initialized to UTF-8 on Windows and the locale on + * other operating systems. */ static VALUE get_default_external(VALUE klass) @@ -1550,8 +1762,7 @@ rb_enc_default_internal(void) * The script encoding (__ENCODING__), not default_internal, is used as the * encoding of created strings. * - * Encoding::default_internal is initialized by the source file's - * internal_encoding or -E option. + * Encoding::default_internal is initialized with -E option or nil otherwise. */ static VALUE get_default_internal(VALUE klass) @@ -1664,8 +1875,15 @@ rb_enc_name_list_i(st_data_t name, st_data_t idx, st_data_t arg) static VALUE rb_enc_name_list(VALUE klass) { - VALUE ary = rb_ary_new2(enc_table.names->num_entries); - st_foreach(enc_table.names, rb_enc_name_list_i, (st_data_t)ary); + VALUE ary; + + GLOBAL_ENC_TABLE_ENTER(enc_table); + { + ary = rb_ary_new2(enc_table->names->num_entries); + st_foreach(enc_table->names, rb_enc_name_list_i, (st_data_t)ary); + } + GLOBAL_ENC_TABLE_LEAVE(); + return ary; } @@ -1710,7 +1928,10 @@ rb_enc_aliases(VALUE klass) VALUE aliases[2]; aliases[0] = rb_hash_new(); aliases[1] = rb_ary_new(); - st_foreach(enc_table.names, rb_enc_aliases_enc_i, (st_data_t)aliases); + + GLOBAL_ENC_TABLE_EVAL(enc_table, + st_foreach(enc_table->names, rb_enc_aliases_enc_i, (st_data_t)aliases)); + return aliases[0]; } @@ -1918,8 +2139,6 @@ rb_enc_aliases(VALUE klass) void Init_Encoding(void) { -#undef rb_intern -#define rb_intern(str) rb_intern_const(str) VALUE list; int i; @@ -1932,7 +2151,7 @@ Init_Encoding(void) rb_define_method(rb_cEncoding, "names", enc_names, 0); rb_define_method(rb_cEncoding, "dummy?", enc_dummy_p, 0); rb_define_method(rb_cEncoding, "ascii_compatible?", enc_ascii_compatible_p, 0); - rb_define_method(rb_cEncoding, "replicate", enc_replicate, 1); + rb_define_method(rb_cEncoding, "replicate", enc_replicate_m, 1); rb_define_singleton_method(rb_cEncoding, "list", enc_list, 0); rb_define_singleton_method(rb_cEncoding, "name_list", rb_enc_name_list, 0); rb_define_singleton_method(rb_cEncoding, "aliases", rb_enc_aliases, 0); @@ -1948,22 +2167,29 @@ Init_Encoding(void) rb_define_singleton_method(rb_cEncoding, "default_internal=", set_default_internal, 1); rb_define_singleton_method(rb_cEncoding, "locale_charmap", rb_locale_charmap, 0); /* in localeinit.c */ - list = rb_ary_new2(enc_table.count); + struct enc_table *enc_table = &global_enc_table; + + if (DEFAULT_ENCODING_LIST_CAPA < enc_table->count) rb_bug("DEFAULT_ENCODING_LIST_CAPA is too small"); + + list = rb_additional_encoding_list = rb_ary_new(); + RBASIC_CLEAR_CLASS(list); + rb_gc_register_mark_object(list); + + list = rb_default_encoding_list = rb_ary_new2(DEFAULT_ENCODING_LIST_CAPA); RBASIC_CLEAR_CLASS(list); - rb_encoding_list = list; rb_gc_register_mark_object(list); - for (i = 0; i < enc_table.count; ++i) { - rb_ary_push(list, enc_new(enc_table.list[i].enc)); + for (i = 0; i < enc_table->count; ++i) { + rb_ary_push(list, enc_new(enc_table->list[i].enc)); } - rb_marshal_define_compat(rb_cEncoding, Qnil, NULL, enc_m_loader); + rb_marshal_define_compat(rb_cEncoding, Qnil, 0, enc_m_loader); } void Init_encodings(void) { - rb_enc_init(); + rb_enc_init(&global_enc_table); } /* locale insensitive ctype functions */ @@ -1971,5 +2197,5 @@ Init_encodings(void) void rb_enc_foreach_name(int (*func)(st_data_t name, st_data_t idx, st_data_t arg), st_data_t arg) { - st_foreach(enc_table.names, func, arg); + GLOBAL_ENC_TABLE_EVAL(enc_table, st_foreach(enc_table->names, func, arg)); } diff --git a/ruby/enum.c b/ruby/enum.c index cc77964ff..f8e327ff7 100644 --- a/ruby/enum.c +++ b/ruby/enum.c @@ -9,17 +9,37 @@ **********************************************************************/ -#include "ruby/encoding.h" +#include "id.h" #include "internal.h" +#include "internal/compar.h" +#include "internal/enum.h" +#include "internal/hash.h" +#include "internal/imemo.h" +#include "internal/numeric.h" +#include "internal/object.h" +#include "internal/proc.h" +#include "internal/rational.h" +#include "internal/re.h" #include "ruby/util.h" -#include "id.h" +#include "ruby_assert.h" #include "symbol.h" -#include - VALUE rb_mEnumerable; static ID id_next; +static ID id__alone; +static ID id__separator; +static ID id_chunk_categorize; +static ID id_chunk_enumerable; +static ID id_sliceafter_enum; +static ID id_sliceafter_pat; +static ID id_sliceafter_pred; +static ID id_slicebefore_enumerable; +static ID id_slicebefore_sep_pat; +static ID id_slicebefore_sep_pred; +static ID id_slicewhen_enum; +static ID id_slicewhen_inverted; +static ID id_slicewhen_pred; #define id_div idDiv #define id_each idEach @@ -75,6 +95,22 @@ grep_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) return Qnil; } +static VALUE +grep_regexp_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) +{ + struct MEMO *memo = MEMO_CAST(args); + VALUE converted_element, match; + ENUM_WANT_SVALUE(); + + /* In case element can't be converted to a Symbol or String: not a match (don't raise) */ + converted_element = SYMBOL_P(i) ? i : rb_check_string_type(i); + match = NIL_P(converted_element) ? Qfalse : rb_reg_match_p(memo->v1, i, 0); + if (match == memo->u3.value) { + rb_ary_push(memo->v2, i); + } + return Qnil; +} + static VALUE grep_iter_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) { @@ -87,59 +123,88 @@ grep_iter_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) return Qnil; } +static VALUE +enum_grep0(VALUE obj, VALUE pat, VALUE test) +{ + VALUE ary = rb_ary_new(); + struct MEMO *memo = MEMO_NEW(pat, ary, test); + rb_block_call_func_t fn; + if (rb_block_given_p()) { + fn = grep_iter_i; + } + else if (RB_TYPE_P(pat, T_REGEXP) && + LIKELY(rb_method_basic_definition_p(CLASS_OF(pat), idEqq))) { + fn = grep_regexp_i; + } + else { + fn = grep_i; + } + rb_block_call(obj, id_each, 0, 0, fn, (VALUE)memo); + + return ary; +} + /* - * call-seq: - * enum.grep(pattern) -> array - * enum.grep(pattern) { |obj| block } -> array + * call-seq: + * grep(pattern) -> array + * grep(pattern) {|element| ... } -> array + * + * Returns an array of objects based elements of +self+ that match the given pattern. + * + * With no block given, returns an array containing each element + * for which pattern === element is +true+: * - * Returns an array of every element in enum for which - * Pattern === element. If the optional block is - * supplied, each matching element is passed to it, and the block's - * result is stored in the output array. + * a = ['foo', 'bar', 'car', 'moo'] + * a.grep(/ar/) # => ["bar", "car"] + * (1..10).grep(3..8) # => [3, 4, 5, 6, 7, 8] + * ['a', 'b', 0, 1].grep(Integer) # => [0, 1] * - * (1..100).grep 38..44 #=> [38, 39, 40, 41, 42, 43, 44] - * c = IO.constants - * c.grep(/SEEK/) #=> [:SEEK_SET, :SEEK_CUR, :SEEK_END] - * res = c.grep(/SEEK/) { |v| IO.const_get(v) } - * res #=> [0, 1, 2] + * With a block given, + * calls the block with each matching element and returns an array containing each + * object returned by the block: * + * a = ['foo', 'bar', 'car', 'moo'] + * a.grep(/ar/) {|element| element.upcase } # => ["BAR", "CAR"] + * + * Related: #grep_v. */ static VALUE enum_grep(VALUE obj, VALUE pat) { - VALUE ary = rb_ary_new(); - struct MEMO *memo = MEMO_NEW(pat, ary, Qtrue); - - rb_block_call(obj, id_each, 0, 0, rb_block_given_p() ? grep_iter_i : grep_i, (VALUE)memo); - - return ary; + return enum_grep0(obj, pat, Qtrue); } /* - * call-seq: - * enum.grep_v(pattern) -> array - * enum.grep_v(pattern) { |obj| block } -> array + * call-seq: + * grep_v(pattern) -> array + * grep_v(pattern) {|element| ... } -> array + * + * Returns an array of objects based on elements of +self+ + * that don't match the given pattern. + * + * With no block given, returns an array containing each element + * for which pattern === element is +false+: * - * Inverted version of Enumerable#grep. - * Returns an array of every element in enum for which - * not Pattern === element. + * a = ['foo', 'bar', 'car', 'moo'] + * a.grep_v(/ar/) # => ["foo", "moo"] + * (1..10).grep_v(3..8) # => [1, 2, 9, 10] + * ['a', 'b', 0, 1].grep_v(Integer) # => ["a", "b"] * - * (1..10).grep_v 2..5 #=> [1, 6, 7, 8, 9, 10] - * res =(1..10).grep_v(2..5) { |v| v * 2 } - * res #=> [2, 12, 14, 16, 18, 20] + * With a block given, + * calls the block with each non-matching element and returns an array containing each + * object returned by the block: * + * a = ['foo', 'bar', 'car', 'moo'] + * a.grep_v(/ar/) {|element| element.upcase } # => ["FOO", "MOO"] + * + * Related: #grep. */ static VALUE enum_grep_v(VALUE obj, VALUE pat) { - VALUE ary = rb_ary_new(); - struct MEMO *memo = MEMO_NEW(pat, ary, Qfalse); - - rb_block_call(obj, id_each, 0, 0, rb_block_given_p() ? grep_iter_i : grep_i, (VALUE)memo); - - return ary; + return enum_grep0(obj, pat, Qfalse); } #define COUNT_BIGNUM IMEMO_FL_USER0 @@ -204,20 +269,28 @@ count_all_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, memop)) } /* - * call-seq: - * enum.count -> int - * enum.count(item) -> int - * enum.count { |obj| block } -> int + * call-seq: + * count -> integer + * count(object) -> integer + * count {|element| ... } -> integer + * + * Returns the count of elements, based on an argument or block criterion, if given. + * + * With no argument and no block given, returns the number of elements: + * + * [0, 1, 2].count # => 3 + * {foo: 0, bar: 1, baz: 2}.count # => 3 + * + * With argument +object+ given, + * returns the number of elements that are == to +object+: + * + * [0, 1, 2, 1].count(1) # => 2 * - * Returns the number of items in +enum+ through enumeration. - * If an argument is given, the number of items in +enum+ that - * are equal to +item+ are counted. If a block is given, it - * counts the number of elements yielding a true value. + * With a block given, calls the block with each element + * and returns the number of elements for which the block returns a truthy value: * - * ary = [1, 2, 4, 2] - * ary.count #=> 4 - * ary.count(2) #=> 2 - * ary.count{ |x| x%2==0 } #=> 3 + * [0, 1, 2, 3].count {|element| element < 2} # => 2 + * {foo: 0, bar: 1, baz: 2}.count {|key, value| value < 2} # => 2 * */ @@ -264,31 +337,26 @@ find_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, memop)) } /* - * call-seq: - * enum.detect(ifnone = nil) { |obj| block } -> obj or nil - * enum.find(ifnone = nil) { |obj| block } -> obj or nil - * enum.detect(ifnone = nil) -> an_enumerator - * enum.find(ifnone = nil) -> an_enumerator + * 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 collection; + * returns the first element for which the block returns a truthy value: * - * Passes each entry in enum to block. Returns the - * first for which block is not false. If no - * object matches, calls ifnone and returns its result when it - * is specified, or returns nil otherwise. + * (0..9).find {|element| element > 2} # => 3 * - * If no block is given, an enumerator is returned instead. + * If no such element is found, calls +if_none_proc+ and returns its return value. * - * (1..100).detect #=> # - * (1..100).find #=> # + * (0..9).find(proc {false}) {|element| element > 12} # => false + * {foo: 0, bar: 1, baz: 2}.find {|key, value| key.start_with?('b') } # => [:bar, 1] + * {foo: 0, bar: 1, baz: 2}.find(proc {[]}) {|key, value| key.start_with?('c') } # => [] * - * (1..10).detect { |i| i % 5 == 0 && i % 7 == 0 } #=> nil - * (1..10).find { |i| i % 5 == 0 && i % 7 == 0 } #=> nil - * (1..10).detect(-> {0}) { |i| i % 5 == 0 && i % 7 == 0 } #=> 0 - * (1..10).find(-> {0}) { |i| i % 5 == 0 && i % 7 == 0 } #=> 0 - * (1..100).detect { |i| i % 5 == 0 && i % 7 == 0 } #=> 35 - * (1..100).find { |i| i % 5 == 0 && i % 7 == 0 } #=> 35 + * With no block given, returns an \Enumerator. * */ - static VALUE enum_find(int argc, VALUE *argv, VALUE obj) { @@ -337,21 +405,26 @@ find_index_iter_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, memop)) } /* - * call-seq: - * enum.find_index(value) -> int or nil - * enum.find_index { |obj| block } -> int or nil - * enum.find_index -> an_enumerator + * call-seq: + * find_index(object) -> integer or nil + * find_index {|element| ... } -> integer or nil + * find_index -> enumerator * - * Compares each entry in enum with value or passes - * to block. Returns the index for the first for which the - * evaluated value is non-false. If no object matches, returns - * nil + * Returns the index of the first element that meets a specified criterion, + * or +nil+ if no such element is found. * - * If neither block nor argument is given, an enumerator is returned instead. + * With argument +object+ given, + * returns the index of the first element that is == +object+: * - * (1..10).find_index { |i| i % 5 == 0 && i % 7 == 0 } #=> nil - * (1..100).find_index { |i| i % 5 == 0 && i % 7 == 0 } #=> 34 - * (1..100).find_index(50) #=> 49 + * ['a', 'b', 'c', 'b'].find_index('b') # => 1 + * + * With a block given, calls the block with successive elements; + * returns the first element for which the block returns a truthy value: + * + * ['a', 'b', 'c', 'b'].find_index {|element| element.start_with?('b') } # => 1 + * {foo: 0, bar: 1, baz: 2}.find_index {|key, value| value > 1 } # => 2 + * + * With no argument and no block given, returns an \Enumerator. * */ @@ -415,32 +488,23 @@ enum_size_over_p(VALUE obj, long n) } /* - * call-seq: - * enum.find_all { |obj| block } -> array - * enum.select { |obj| block } -> array - * enum.filter { |obj| block } -> array - * enum.find_all -> an_enumerator - * enum.select -> an_enumerator - * enum.filter -> an_enumerator - * - * Returns an array containing all elements of +enum+ - * for which the given +block+ returns a true value. - * - * The find_all and select methods are aliases. - * There is no performance benefit to either. - * - * If no block is given, an Enumerator is returned instead. + * call-seq: + * select {|element| ... } -> array + * select -> enumerator * + * Returns an array containing elements selected by the block. * - * (1..10).find_all { |i| i % 3 == 0 } #=> [3, 6, 9] + * With a block given, calls the block with successive elements; + * returns an array of those elements for which the block returns a truthy value: * - * [1,2,3,4,5].select { |num| num.even? } #=> [2, 4] + * (0..9).select {|element| element % 3 == 0 } # => [0, 3, 6, 9] + * a = {foo: 0, bar: 1, baz: 2}.select {|key, value| key.start_with?('b') } + * a # => {:bar=>1, :baz=>2} * - * [:foo, :bar].filter { |x| x == :foo } #=> [:foo] + * With no block given, returns an \Enumerator. * - * See also Enumerable#reject, Enumerable#grep. + * Related: #reject. */ - static VALUE enum_find_all(VALUE obj) { @@ -467,17 +531,19 @@ filter_map_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)) } /* - * call-seq: - * enum.filter_map { |obj| block } -> array - * enum.filter_map -> an_enumerator + * call-seq: + * filter_map {|element| ... } -> array + * filter_map -> enumerator * - * Returns a new array containing the truthy results (everything except - * +false+ or +nil+) of running the +block+ for every element in +enum+. + * Returns an array containing truthy elements returned by the block. * - * If no block is given, an Enumerator is returned instead. + * With a block given, calls the block with successive elements; + * returns an array containing each truthy value returned by the block: * + * (0..9).filter_map {|i| i * 2 if i.even? } # => [0, 4, 8, 12, 16] + * {foo: 0, bar: 1, baz: 2}.filter_map {|key, value| key if value.even? } # => [:foo, :baz] * - * (1..10).filter_map { |i| i * 2 if i.even? } #=> [4, 8, 12, 16, 20] + * When no block given, returns an \Enumerator. * */ static VALUE @@ -506,20 +572,21 @@ reject_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)) } /* - * call-seq: - * enum.reject { |obj| block } -> array - * enum.reject -> an_enumerator + * call-seq: + * reject {|element| ... } -> array + * reject -> enumerator * - * Returns an array for all elements of +enum+ for which the given - * +block+ returns false. + * Returns an array of objects rejected by the block. * - * If no block is given, an Enumerator is returned instead. + * With a block given, calls the block with successive elements; + * returns an array of those elements for which the block returns +nil+ or +false+: * - * (1..10).reject { |i| i % 3 == 0 } #=> [1, 2, 4, 5, 7, 8, 10] + * (0..9).reject {|i| i * 2 if i.even? } # => [1, 3, 5, 7, 9] + * {foo: 0, bar: 1, baz: 2}.reject {|key, value| key if value.odd? } # => {:foo=>0, :baz=>2} * - * [1, 2, 3, 4, 5].reject { |num| num.even? } #=> [1, 3, 5] + * When no block given, returns an \Enumerator. * - * See also Enumerable#find_all. + * Related: #select. */ static VALUE @@ -552,22 +619,21 @@ collect_all(RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)) } /* - * call-seq: - * enum.collect { |obj| block } -> array - * enum.map { |obj| block } -> array - * enum.collect -> an_enumerator - * enum.map -> an_enumerator + * call-seq: + * map {|element| ... } -> array + * map -> enumerator * - * Returns a new array with the results of running block once - * for every element in enum. + * Returns an array of objects returned by the block. * - * If no block is given, an enumerator is returned instead. + * With a block given, calls the block with successive elements; + * returns an array of the objects returned by the block: * - * (1..4).map { |i| i*i } #=> [1, 4, 9, 16] - * (1..4).collect { "cat" } #=> ["cat", "cat", "cat", "cat"] + * (0..4).map {|i| i*i } # => [0, 1, 4, 9, 16] + * {foo: 0, bar: 1, baz: 2}.map {|key, value| value*2} # => [0, 2, 4] + * + * With no block given, returns an \Enumerator. * */ - static VALUE enum_collect(VALUE obj) { @@ -601,22 +667,24 @@ flat_map_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)) } /* - * call-seq: - * enum.flat_map { |obj| block } -> array - * enum.collect_concat { |obj| block } -> array - * enum.flat_map -> an_enumerator - * enum.collect_concat -> an_enumerator + * call-seq: + * flat_map {|element| ... } -> array + * flat_map -> enumerator + * + * Returns an array of flattened objects returned by the block. * - * Returns a new array with the concatenated results of running - * block once for every element in enum. + * With a block given, calls the block with successive elements; + * returns a flattened array of objects returned by the block: * - * If no block is given, an enumerator is returned instead. + * [0, 1, 2, 3].flat_map {|element| -element } # => [0, -1, -2, -3] + * [0, 1, 2, 3].flat_map {|element| [element, -element] } # => [0, 0, 1, -1, 2, -2, 3, -3] + * [[0, 1], [2, 3]].flat_map {|e| e + [100] } # => [0, 1, 100, 2, 3, 100] + * {foo: 0, bar: 1, baz: 2}.flat_map {|key, value| [key, value] } # => [:foo, 0, :bar, 1, :baz, 2] * - * [1, 2, 3, 4].flat_map { |e| [e, -e] } #=> [1, -1, 2, -2, 3, -3, 4, -4] - * [[1, 2], [3, 4]].flat_map { |e| e + [100] } #=> [1, 2, 100, 3, 4, 100] + * With no block given, returns an \Enumerator. * + * Alias: #collect_concat. */ - static VALUE enum_flat_map(VALUE obj) { @@ -632,35 +700,37 @@ enum_flat_map(VALUE obj) /* * call-seq: - * enum.to_a(*args) -> array - * enum.entries(*args) -> array + * to_a -> array * - * Returns an array containing the items in enum. + * Returns an array containing the items in +self+: * - * (1..7).to_a #=> [1, 2, 3, 4, 5, 6, 7] - * { 'a'=>1, 'b'=>2, 'c'=>3 }.to_a #=> [["a", 1], ["b", 2], ["c", 3]] + * (0..4).to_a # => [0, 1, 2, 3, 4] * - * require 'prime' - * Prime.entries 10 #=> [2, 3, 5, 7] + * Enumerable#entries is an alias for Enumerable#to_a. */ static VALUE enum_to_a(int argc, VALUE *argv, VALUE obj) { VALUE ary = rb_ary_new(); - rb_block_call(obj, id_each, argc, argv, collect_all, ary); + rb_block_call_kw(obj, id_each, argc, argv, collect_all, ary, RB_PASS_CALLED_KEYWORDS); return ary; } static VALUE -enum_hashify(VALUE obj, int argc, const VALUE *argv, rb_block_call_func *iter) +enum_hashify_into(VALUE obj, int argc, const VALUE *argv, rb_block_call_func *iter, VALUE hash) { - VALUE hash = rb_hash_new(); rb_block_call(obj, id_each, argc, argv, iter, hash); return hash; } +static VALUE +enum_hashify(VALUE obj, int argc, const VALUE *argv, rb_block_call_func *iter) +{ + return enum_hashify_into(obj, argc, argv, iter, rb_hash_new()); +} + static VALUE enum_to_h_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, hash)) { @@ -676,20 +746,23 @@ enum_to_h_ii(RB_BLOCK_CALL_FUNC_ARGLIST(i, hash)) /* * call-seq: - * enum.to_h(*args) -> hash - * enum.to_h(*args) {...} -> hash + * to_h -> hash + * to_h {|element| ... } -> hash * - * Returns the result of interpreting enum as a list of - * [key, value] pairs. + * When +self+ consists of 2-element arrays, + * returns a hash each of whose entries is the key-value pair + * formed from one of those arrays: * - * %i[hello world].each_with_index.to_h - * # => {:hello => 0, :world => 1} + * [[:foo, 0], [:bar, 1], [:baz, 2]].to_h # => {:foo=>0, :bar=>1, :baz=>2} * - * If a block is given, the results of the block on each element of - * the enum will be used as pairs. + * When a block is given, the block is called with each element of +self+; + * the block should return a 2-element array which becomes a key-value pair + * in the returned hash: * - * (1..5).to_h {|x| [x, x ** 2]} - * #=> {1=>1, 2=>4, 3=>9, 4=>16, 5=>25} + * (0..3).to_h {|i| [i, i ** 2]} # => {0=>0, 1=>1, 2=>4, 3=>9} + * + * Raises an exception if an element of +self+ is not a 2-element array, + * and a block is not passed. */ static VALUE @@ -728,7 +801,7 @@ inject_op_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, p)) } else if (SYMBOL_P(name = memo->u3.value)) { const ID mid = SYM2ID(name); - MEMO_V1_SET(memo, rb_funcallv(memo->v1, mid, 1, &i)); + MEMO_V1_SET(memo, rb_funcallv_public(memo->v1, mid, 1, &i)); } else { VALUE args[2]; @@ -771,11 +844,11 @@ ary_inject_op(VALUE ary, VALUE init, VALUE op) if (FIXNUM_P(e)) { n += FIX2LONG(e); /* should not overflow long type */ if (!FIXABLE(n)) { - v = rb_big_plus(ULONG2NUM(n), v); + v = rb_big_plus(LONG2NUM(n), v); n = 0; } } - else if (RB_TYPE_P(e, T_BIGNUM)) + else if (RB_BIGNUM_TYPE_P(e)) v = rb_big_plus(e, v); else goto not_integer; @@ -798,48 +871,136 @@ ary_inject_op(VALUE ary, VALUE init, VALUE op) /* * call-seq: - * enum.inject(initial, sym) -> obj - * enum.inject(sym) -> obj - * enum.inject(initial) { |memo, obj| block } -> obj - * enum.inject { |memo, obj| block } -> obj - * enum.reduce(initial, sym) -> obj - * enum.reduce(sym) -> obj - * enum.reduce(initial) { |memo, obj| block } -> obj - * enum.reduce { |memo, obj| block } -> obj - * - * Combines all elements of enum by applying a binary - * operation, specified by a block or a symbol that names a - * method or operator. - * - * The inject and reduce methods are aliases. There - * is no performance benefit to either. - * - * If you specify a block, then for each element in enum - * the block is passed an accumulator value (memo) and the element. - * If you specify a symbol instead, then each element in the collection - * will be passed to the named method of memo. - * In either case, the result becomes the new value for memo. - * At the end of the iteration, the final value of memo is the - * return value for the method. - * - * If you do not explicitly specify an initial value for memo, - * then the first element of collection is used as the initial value - * of memo. - * - * - * # Sum some numbers - * (5..10).reduce(:+) #=> 45 - * # Same using a block and inject - * (5..10).inject { |sum, n| sum + n } #=> 45 - * # Multiply some numbers - * (5..10).reduce(1, :*) #=> 151200 - * # Same using a block - * (5..10).inject(1) { |product, n| product * n } #=> 151200 - * # find the longest word - * longest = %w{ cat sheep bear }.inject do |memo, word| - * memo.length > word.length ? memo : word - * end - * longest #=> "sheep" + * inject(symbol) -> object + * inject(initial_operand, symbol) -> object + * inject {|memo, operand| ... } -> object + * inject(initial_operand) {|memo, operand| ... } -> object + * + * Returns an object formed from operands via either: + * + * - A method named by +symbol+. + * - A block to which each operand is passed. + * + * With method-name argument +symbol+, + * combines operands using the method: + * + * # Sum, without initial_operand. + * (1..4).inject(:+) # => 10 + * # Sum, with initial_operand. + * (1..4).inject(10, :+) # => 20 + * + * With a block, passes each operand to the block: + * + * # Sum of squares, without initial_operand. + * (1..4).inject {|sum, n| sum + n*n } # => 30 + * # Sum of squares, with initial_operand. + * (1..4).inject(2) {|sum, n| sum + n*n } # => 32 + * + * Operands + * + * If argument +initial_operand+ is not given, + * the operands for +inject+ are simply the elements of +self+. + * Example calls and their operands: + * + * - (1..4).inject(:+):: [1, 2, 3, 4]. + * - (1...4).inject(:+):: [1, 2, 3]. + * - ('a'..'d').inject(:+):: ['a', 'b', 'c', 'd']. + * - ('a'...'d').inject(:+):: ['a', 'b', 'c']. + * + * Examples with first operand (which is self.first) of various types: + * + * # Integer. + * (1..4).inject(:+) # => 10 + * # Float. + * [1.0, 2, 3, 4].inject(:+) # => 10.0 + * # Character. + * ('a'..'d').inject(:+) # => "abcd" + * # Complex. + * [Complex(1, 2), 3, 4].inject(:+) # => (8+2i) + * + * If argument +initial_operand+ is given, + * the operands for +inject+ are that value plus the elements of +self+. + * Example calls their operands: + * + * - (1..4).inject(10, :+):: [10, 1, 2, 3, 4]. + * - (1...4).inject(10, :+):: [10, 1, 2, 3]. + * - ('a'..'d').inject('e', :+):: ['e', 'a', 'b', 'c', 'd']. + * - ('a'...'d').inject('e', :+):: ['e', 'a', 'b', 'c']. + * + * Examples with +initial_operand+ of various types: + * + * # Integer. + * (1..4).inject(2, :+) # => 12 + * # Float. + * (1..4).inject(2.0, :+) # => 12.0 + * # String. + * ('a'..'d').inject('foo', :+) # => "fooabcd" + * # Array. + * %w[a b c].inject(['x'], :push) # => ["x", "a", "b", "c"] + * # Complex. + * (1..4).inject(Complex(2, 2), :+) # => (12+2i) + * + * Combination by Given \Method + * + * If the method-name argument +symbol+ is given, + * the operands are combined by that method: + * + * - The first and second operands are combined. + * - That result is combined with the third operand. + * - That result is combined with the fourth operand. + * - And so on. + * + * The return value from +inject+ is the result of the last combination. + * + * This call to +inject+ computes the sum of the operands: + * + * (1..4).inject(:+) # => 10 + * + * Examples with various methods: + * + * # Integer addition. + * (1..4).inject(:+) # => 10 + * # Integer multiplication. + * (1..4).inject(:*) # => 24 + * # Character range concatenation. + * ('a'..'d').inject('', :+) # => "abcd" + * # String array concatenation. + * %w[foo bar baz].inject('', :+) # => "foobarbaz" + * # Hash update. + * h = [{foo: 0, bar: 1}, {baz: 2}, {bat: 3}].inject(:update) + * h # => {:foo=>0, :bar=>1, :baz=>2, :bat=>3} + * # Hash conversion to nested arrays. + * h = {foo: 0, bar: 1}.inject([], :push) + * h # => [[:foo, 0], [:bar, 1]] + * + * Combination by Given Block + * + * If a block is given, the operands are passed to the block: + * + * - The first call passes the first and second operands. + * - The second call passes the result of the first call, + * along with the third operand. + * - The third call passes the result of the second call, + * along with the fourth operand. + * - And so on. + * + * The return value from +inject+ is the return value from the last block call. + * + * This call to +inject+ gives a block + * that writes the memo and element, and also sums the elements: + * + * (1..4).inject do |memo, element| + * p "Memo: #{memo}; element: #{element}" + * memo + element + * end # => 10 + * + * Output: + * + * "Memo: 1; element: 2" + * "Memo: 3; element: 3" + * "Memo: 6; element: 4" + * + * Enumerable#reduce is an alias for Enumerable#inject. * */ static VALUE @@ -905,16 +1066,29 @@ partition_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, arys)) /* * call-seq: - * enum.partition { |obj| block } -> [ true_array, false_array ] - * enum.partition -> an_enumerator + * partition {|element| ... } -> [true_array, false_array] + * partition -> enumerator + * + * With a block given, returns an array of two arrays: * - * Returns two arrays, the first containing the elements of - * enum for which the block evaluates to true, the second - * containing the rest. + * - The first having those elements for which the block returns a truthy value. + * - The other having all other elements. * - * If no block is given, an enumerator is returned instead. + * Examples: * - * (1..6).partition { |v| v.even? } #=> [[2, 4, 6], [1, 3, 5]] + * p = (1..4).partition {|i| i.even? } + * p # => [[2, 4], [1, 3]] + * p = ('a'..'d').partition {|c| c < 'c' } + * p # => [["a", "b"], ["c", "d"]] + * h = {foo: 0, bar: 1, baz: 2, bat: 3} + * p = h.partition {|key, value| key.start_with?('b') } + * p # => [[[:bar, 1], [:baz, 2], [:bat, 3]], [[:foo, 0]]] + * p = h.partition {|key, value| value < 2 } + * p # => [[[:foo, 0], [:bar, 1]], [[:baz, 2], [:bat, 3]]] + * + * With no block given, returns an Enumerator. + * + * Related: Enumerable#group_by. * */ @@ -953,16 +1127,23 @@ group_by_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, hash)) /* * call-seq: - * enum.group_by { |obj| block } -> a_hash - * enum.group_by -> an_enumerator + * group_by {|element| ... } -> hash + * group_by -> enumerator + * + * With a block given returns a hash: * - * Groups the collection by result of the block. Returns a hash where the - * keys are the evaluated result from the block and the values are - * arrays of elements in the collection that correspond to the key. + * - Each key is a return value from the block. + * - Each value is an array of those elements for which the block returned that key. * - * If no block is given an enumerator is returned. + * Examples: * - * (1..6).group_by { |i| i%3 } #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]} + * g = (1..6).group_by {|i| i%3 } + * g # => {1=>[1, 4], 2=>[2, 5], 0=>[3, 6]} + * h = {foo: 0, bar: 1, baz: 0, bat: 1} + * g = h.group_by {|key, value| value } + * g # => {0=>[[:foo, 0], [:baz, 0]], 1=>[[:bar, 1], [:bat, 1]]} + * + * With no block given, returns an Enumerator. * */ @@ -974,47 +1155,86 @@ enum_group_by(VALUE obj) return enum_hashify(obj, 0, 0, group_by_i); } -static void -tally_up(VALUE hash, VALUE group) +static int +tally_up(st_data_t *group, st_data_t *value, st_data_t arg, int existing) { - VALUE tally = rb_hash_aref(hash, group); - if (NIL_P(tally)) { + VALUE tally = (VALUE)*value; + VALUE hash = (VALUE)arg; + if (!existing) { tally = INT2FIX(1); } else if (FIXNUM_P(tally) && tally < INT2FIX(FIXNUM_MAX)) { tally += INT2FIX(1) & ~FIXNUM_FLAG; } else { + Check_Type(tally, T_BIGNUM); tally = rb_big_plus(tally, INT2FIX(1)); + RB_OBJ_WRITTEN(hash, Qundef, tally); } - rb_hash_aset(hash, group, tally); + *value = (st_data_t)tally; + if (!SPECIAL_CONST_P(*group)) RB_OBJ_WRITTEN(hash, Qundef, *group); + return ST_CONTINUE; +} + +static VALUE +rb_enum_tally_up(VALUE hash, VALUE group) +{ + rb_hash_stlike_update(hash, group, tally_up, (st_data_t)hash); + return hash; } static VALUE tally_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, hash)) { ENUM_WANT_SVALUE(); - tally_up(hash, i); + rb_enum_tally_up(hash, i); return Qnil; } /* * call-seq: - * enum.tally -> a_hash + * tally -> new_hash + * tally(hash) -> hash + * + * Returns a hash containing the counts of equal elements: + * + * - Each key is an element of +self+. + * - Each value is the number elements equal to that key. + * + * With no argument: * - * Tallies the collection, i.e., counts the occurrences of each element. - * Returns a hash with the elements of the collection as keys and the - * corresponding counts as values. + * %w[a b c b c a c b].tally # => {"a"=>2, "b"=>3, "c"=>3} + * + * With a hash argument, that hash is used for the tally (instead of a new hash), + * and is returned; + * this may be useful for accumulating tallies across multiple enumerables: + * + * hash = {} + * hash = %w[a c d b c a].tally(hash) + * hash # => {"a"=>2, "c"=>2, "d"=>1, "b"=>1} + * hash = %w[b a z].tally(hash) + * hash # => {"a"=>3, "c"=>2, "d"=>1, "b"=>2, "z"=>1} + * hash = %w[b a m].tally(hash) + * hash # => {"a"=>4, "c"=>2, "d"=>1, "b"=>3, "z"=>1, "m"=> 1} * - * ["a", "b", "c", "b"].tally #=> {"a"=>1, "b"=>2, "c"=>1} */ static VALUE -enum_tally(VALUE obj) +enum_tally(int argc, VALUE *argv, VALUE obj) { - return enum_hashify(obj, 0, 0, tally_i); + VALUE hash; + if (rb_check_arity(argc, 0, 1)) { + hash = rb_convert_type(argv[0], T_HASH, "Hash", "to_hash"); + rb_check_frozen(hash); + } + else { + hash = rb_hash_new(); + } + + return enum_hashify_into(obj, 0, 0, tally_i, hash); } +NORETURN(static VALUE first_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, params))); static VALUE first_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, params)) { @@ -1031,18 +1251,26 @@ static VALUE enum_take(VALUE obj, VALUE n); /* * call-seq: - * enum.first -> obj or nil - * enum.first(n) -> an_array + * first -> element or nil + * first(n) -> array * - * Returns the first element, or the first +n+ elements, of the enumerable. - * If the enumerable is empty, the first form returns nil, and the - * second form returns an empty array. + * Returns the first element or elements. * - * %w[foo bar baz].first #=> "foo" - * %w[foo bar baz].first(2) #=> ["foo", "bar"] - * %w[foo bar baz].first(10) #=> ["foo", "bar", "baz"] - * [].first #=> nil - * [].first(10) #=> [] + * With no argument, returns the first element, or +nil+ if there is none: + * + * (1..4).first # => 1 + * %w[a b c].first # => "a" + * {foo: 1, bar: 1, baz: 2}.first # => [:foo, 1] + * [].first # => nil + * + * With integer argument +n+, returns an array + * containing the first +n+ elements that exist: + * + * (1..4).first(2) # => [1, 2] + * %w[a b c d].first(3) # => ["a", "b", "c"] + * %w[a b c d].first(50) # => ["a", "b", "c", "d"] + * {foo: 1, bar: 1, baz: 2}.first(2) # => [[:foo, 1], [:bar, 1]] + * [].first(2) # => [] * */ @@ -1061,28 +1289,35 @@ enum_first(int argc, VALUE *argv, VALUE obj) } } - /* * call-seq: - * enum.sort -> array - * enum.sort { |a, b| block } -> array + * sort -> array + * sort {|a, b| ... } -> array + * + * Returns an array containing the sorted elements of +self+. + * The ordering of equal elements is indeterminate and may be unstable. + * + * With no block given, the sort compares + * using the elements' own method <=>: * - * Returns an array containing the items in enum sorted. + * %w[b c a d].sort # => ["a", "b", "c", "d"] + * {foo: 0, bar: 1, baz: 2}.sort # => [[:bar, 1], [:baz, 2], [:foo, 0]] * - * Comparisons for the sort will be done using the items' own - * <=> operator or using an optional code block. + * With a block given, comparisons in the block determine the ordering. + * The block is called with two elements +a+ and +b+, and must return: * - * 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+. + * - A negative integer if a < b. + * - Zero if a == b. + * - A positive integer if a > b. * - * The result is not guaranteed to be stable. When the comparison of two - * elements returns +0+, the order of the elements is unpredictable. + * Examples: * - * %w(rhea kea flea).sort #=> ["flea", "kea", "rhea"] - * (1..10).sort { |a, b| b <=> a } #=> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] + * a = %w[b c a d] + * a.sort {|a, b| b <=> a } # => ["d", "c", "b", "a"] + * h = {foo: 0, bar: 1, baz: 2} + * h.sort {|a, b| b <=> a } # => [[:foo, 0], [:baz, 2], [:bar, 1]] * - * See also Enumerable#sort_by. It implements a Schwartzian transform + * See also #sort_by. It implements a Schwartzian transform * which is useful when key computation or comparison is expensive. */ @@ -1147,19 +1382,23 @@ sort_by_cmp(const void *ap, const void *bp, void *data) /* * call-seq: - * enum.sort_by { |obj| block } -> array - * enum.sort_by -> an_enumerator + * sort_by {|element| ... } -> array + * sort_by -> enumerator * - * Sorts enum using a set of keys generated by mapping the - * values in enum through the given block. + * With a block given, returns an array of elements of +self+, + * sorted according to the value returned by the block for each element. + * The ordering of equal elements is indeterminate and may be unstable. * - * The result is not guaranteed to be stable. When two keys are equal, - * the order of the corresponding elements is unpredictable. + * Examples: * - * If no block is given, an enumerator is returned instead. + * a = %w[xx xxx x xxxx] + * a.sort_by {|s| s.size } # => ["x", "xx", "xxx", "xxxx"] + * a.sort_by {|s| -s.size } # => ["xxxx", "xxx", "xx", "x"] + * h = {foo: 2, bar: 1, baz: 0} + * h.sort_by{|key, value| value } # => [[:baz, 0], [:bar, 1], [:foo, 2]] + * h.sort_by{|key, value| key } # => [[:bar, 1], [:baz, 0], [:foo, 2]] * - * %w{apple pear fig}.sort_by { |word| word.length } - * #=> ["fig", "pear", "apple"] + * With no block given, returns an Enumerator. * * The current implementation of #sort_by generates an array of * tuples containing the original collection element and the mapped @@ -1317,25 +1556,44 @@ DEFINE_ENUMFUNCS(all) /* * call-seq: - * enum.all? [{ |obj| block } ] -> true or false - * enum.all?(pattern) -> true or false - * - * Passes each element of the collection to the given block. The method - * returns true if the block never returns - * false or nil. If the block is not given, - * Ruby adds an implicit block of { |obj| obj } which will - * cause #all? to return +true+ when none of the collection members are - * +false+ or +nil+. - * - * If instead a pattern is supplied, the method returns whether - * pattern === element for every collection member. - * - * %w[ant bear cat].all? { |word| word.length >= 3 } #=> true - * %w[ant bear cat].all? { |word| word.length >= 4 } #=> false - * %w[ant bear cat].all?(/t/) #=> false - * [1, 2i, 3.14].all?(Numeric) #=> true - * [nil, true, 99].all? #=> false - * [].all? #=> true + * all? -> true or false + * all?(pattern) -> true or false + * all? {|element| ... } -> true or false + * + * Returns whether every element meets a given criterion. + * + * With no argument and no block, + * returns whether every element is truthy: + * + * (1..4).all? # => true + * %w[a b c d].all? # => true + * [1, 2, nil].all? # => false + * ['a','b', false].all? # => false + * [].all? # => true + * + * With argument +pattern+ and no block, + * returns whether for each element +element+, + * pattern === element: + * + * (1..4).all?(Integer) # => true + * (1..4).all?(Numeric) # => true + * (1..4).all?(Float) # => false + * %w[bar baz bat bam].all?(/ba/) # => true + * %w[bar baz bat bam].all?(/bar/) # => false + * %w[bar baz bat bam].all?('ba') # => false + * {foo: 0, bar: 1, baz: 2}.all?(Array) # => true + * {foo: 0, bar: 1, baz: 2}.all?(Hash) # => false + * [].all?(Integer) # => true + * + * With a block given, returns whether the block returns a truthy value + * for every element: + * + * (1..4).all? {|element| element < 5 } # => true + * (1..4).all? {|element| element < 4 } # => false + * {foo: 0, bar: 1, baz: 2}.all? {|key, value| value < 3 } # => true + * {foo: 0, bar: 1, baz: 2}.all? {|key, value| value < 2 } # => false + * + * Related: #any?, #none? #one?. * */ @@ -1359,26 +1617,44 @@ DEFINE_ENUMFUNCS(any) /* * call-seq: - * enum.any? [{ |obj| block }] -> true or false - * enum.any?(pattern) -> true or false - * - * Passes each element of the collection to the given block. The method - * returns true if the block ever returns a value other - * than false or nil. If the block is not - * given, Ruby adds an implicit block of { |obj| obj } that - * will cause #any? to return +true+ if at least one of the collection - * members is not +false+ or +nil+. - * - * If instead a pattern is supplied, the method returns whether - * pattern === element for any collection member. - * - * %w[ant bear cat].any? { |word| word.length >= 3 } #=> true - * %w[ant bear cat].any? { |word| word.length >= 4 } #=> true - * %w[ant bear cat].any?(/d/) #=> false - * [nil, true, 99].any?(Integer) #=> true - * [nil, true, 99].any? #=> true - * [].any? #=> false + * any? -> true or false + * any?(pattern) -> true or false + * any? {|element| ... } -> true or false + * + * Returns whether any element meets a given criterion. + * + * With no argument and no block, + * returns whether any element is truthy: + * + * (1..4).any? # => true + * %w[a b c d].any? # => true + * [1, false, nil].any? # => true + * [].any? # => false + * + * With argument +pattern+ and no block, + * returns whether for any element +element+, + * pattern === element: + * + * [nil, false, 0].any?(Integer) # => true + * [nil, false, 0].any?(Numeric) # => true + * [nil, false, 0].any?(Float) # => false + * %w[bar baz bat bam].any?(/m/) # => true + * %w[bar baz bat bam].any?(/foo/) # => false + * %w[bar baz bat bam].any?('ba') # => false + * {foo: 0, bar: 1, baz: 2}.any?(Array) # => true + * {foo: 0, bar: 1, baz: 2}.any?(Hash) # => false + * [].any?(Integer) # => false * + * With a block given, returns whether the block returns a truthy value + * for any element: + * + * (1..4).any? {|element| element < 2 } # => true + * (1..4).any? {|element| element < 1 } # => false + * {foo: 0, bar: 1, baz: 2}.any? {|key, value| value < 1 } # => true + * {foo: 0, bar: 1, baz: 2}.any? {|key, value| value < 0 } # => false + * + * + * Related: #all?, #none?, #one?. */ static VALUE @@ -1628,26 +1904,45 @@ rb_nmin_run(VALUE obj, VALUE num, int by, int rev, int ary) /* * call-seq: - * enum.one? [{ |obj| block }] -> true or false - * enum.one?(pattern) -> true or false - * - * Passes each element of the collection to the given block. The method - * returns true if the block returns true - * exactly once. If the block is not given, one? will return - * true only if exactly one of the collection members is - * true. - * - * If instead a pattern is supplied, the method returns whether - * pattern === element for exactly one collection member. - * - * %w{ant bear cat}.one? { |word| word.length == 4 } #=> true - * %w{ant bear cat}.one? { |word| word.length > 4 } #=> false - * %w{ant bear cat}.one? { |word| word.length < 4 } #=> false - * %w{ant bear cat}.one?(/t/) #=> false - * [ nil, true, 99 ].one? #=> false - * [ nil, true, false ].one? #=> true - * [ nil, true, 99 ].one?(Integer) #=> true - * [].one? #=> false + * one? -> true or false + * one?(pattern) -> true or false + * one? {|element| ... } -> true or false + * + * Returns whether exactly one element meets a given criterion. + * + * With no argument and no block, + * returns whether exactly one element is truthy: + * + * (1..1).one? # => true + * [1, nil, false].one? # => true + * (1..4).one? # => false + * {foo: 0}.one? # => true + * {foo: 0, bar: 1}.one? # => false + * [].one? # => false + * + * With argument +pattern+ and no block, + * returns whether for exactly one element +element+, + * pattern === element: + * + * [nil, false, 0].one?(Integer) # => true + * [nil, false, 0].one?(Numeric) # => true + * [nil, false, 0].one?(Float) # => false + * %w[bar baz bat bam].one?(/m/) # => true + * %w[bar baz bat bam].one?(/foo/) # => false + * %w[bar baz bat bam].one?('ba') # => false + * {foo: 0, bar: 1, baz: 2}.one?(Array) # => false + * {foo: 0}.one?(Array) # => true + * [].one?(Integer) # => false + * + * With a block given, returns whether the block returns a truthy value + * for exactly one element: + * + * (1..4).one? {|element| element < 2 } # => true + * (1..4).one? {|element| element < 1 } # => false + * {foo: 0, bar: 1, baz: 2}.one? {|key, value| value < 1 } # => true + * {foo: 0, bar: 1, baz: 2}.one? {|key, value| value < 2 } # => false + * + * Related: #none?, #all?, #any?. * */ static VALUE @@ -1674,25 +1969,43 @@ DEFINE_ENUMFUNCS(none) /* * call-seq: - * enum.none? [{ |obj| block }] -> true or false - * enum.none?(pattern) -> true or false - * - * Passes each element of the collection to the given block. The method - * returns true if the block never returns true - * for all elements. If the block is not given, none? will return - * true only if none of the collection members is true. - * - * If instead a pattern is supplied, the method returns whether - * pattern === element for none of the collection members. - * - * %w{ant bear cat}.none? { |word| word.length == 5 } #=> true - * %w{ant bear cat}.none? { |word| word.length >= 4 } #=> false - * %w{ant bear cat}.none?(/d/) #=> true - * [1, 3.14, 42].none?(Float) #=> false - * [].none? #=> true - * [nil].none? #=> true - * [nil, false].none? #=> true - * [nil, false, true].none? #=> false + * none? -> true or false + * none?(pattern) -> true or false + * none? {|element| ... } -> true or false + * + * Returns whether no element meets a given criterion. + * + * With no argument and no block, + * returns whether no element is truthy: + * + * (1..4).none? # => false + * [nil, false].none? # => true + * {foo: 0}.none? # => false + * {foo: 0, bar: 1}.none? # => false + * [].none? # => true + * + * With argument +pattern+ and no block, + * returns whether for no element +element+, + * pattern === element: + * + * [nil, false, 1.1].none?(Integer) # => true + * %w[bar baz bat bam].none?(/m/) # => false + * %w[bar baz bat bam].none?(/foo/) # => true + * %w[bar baz bat bam].none?('ba') # => true + * {foo: 0, bar: 1, baz: 2}.none?(Hash) # => true + * {foo: 0}.none?(Array) # => false + * [].none?(Integer) # => true + * + * With a block given, returns whether the block returns a truthy value + * for no element: + * + * (1..4).none? {|element| element < 1 } # => true + * (1..4).none? {|element| element < 2 } # => false + * {foo: 0, bar: 1, baz: 2}.none? {|key, value| value < 0 } # => true + * {foo: 0, bar: 1, baz: 2}.none? {|key, value| value < 1 } # => false + * + * Related: #one?, #all?, #any?. + * */ static VALUE enum_none(int argc, VALUE *argv, VALUE obj) @@ -1750,26 +2063,59 @@ min_ii(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) /* * call-seq: - * enum.min -> obj - * enum.min { |a, b| block } -> obj - * enum.min(n) -> array - * enum.min(n) { |a, b| block } -> array - * - * Returns the object in _enum_ with the minimum value. The - * first form assumes all objects implement Comparable; - * the second uses the block to return a <=> b. - * - * a = %w(albatross dog horse) - * a.min #=> "albatross" - * a.min { |a, b| a.length <=> b.length } #=> "dog" - * - * If the +n+ argument is given, minimum +n+ elements are returned - * as a sorted array. - * - * a = %w[albatross dog horse] - * a.min(2) #=> ["albatross", "dog"] - * a.min(2) {|a, b| a.length <=> b.length } #=> ["dog", "horse"] - * [5, 1, 3, 4, 2].min(3) #=> [1, 2, 3] + * min -> element + * min(n) -> array + * min {|a, b| ... } -> element + * min(n) {|a, b| ... } -> array + * + * Returns the element with the minimum element according to a given criterion. + * The ordering of equal elements is indeterminate and may be unstable. + * + * With no argument and no block, returns the minimum element, + * using the elements' own method <=> for comparison: + * + * (1..4).min # => 1 + * (-4..-1).min # => -4 + * %w[d c b a].min # => "a" + * {foo: 0, bar: 1, baz: 2}.min # => [:bar, 1] + * [].min # => nil + * + * With positive integer argument +n+ given, and no block, + * returns an array containing the first +n+ minimum elements that exist: + * + * (1..4).min(2) # => [1, 2] + * (-4..-1).min(2) # => [-4, -3] + * %w[d c b a].min(2) # => ["a", "b"] + * {foo: 0, bar: 1, baz: 2}.min(2) # => [[:bar, 1], [:baz, 2]] + * [].min(2) # => [] + * + * With a block given, the block determines the minimum elements. + * The block is called with two elements +a+ and +b+, and must return: + * + * - A negative integer if a < b. + * - Zero if a == b. + * - A positive integer if a > b. + * + * With a block given and no argument, + * returns the minimum element as determined by the block: + * + * %w[xxx x xxxx xx].min {|a, b| a.size <=> b.size } # => "x" + * h = {foo: 0, bar: 1, baz: 2} + * h.min {|pair1, pair2| pair1[1] <=> pair2[1] } # => [:foo, 0] + * [].min {|a, b| a <=> b } # => nil + * + * With a block given and positive integer argument +n+ given, + * returns an array containing the first +n+ minimum elements that exist, + * as determined by the block. + * + * %w[xxx x xxxx xx].min(2) {|a, b| a.size <=> b.size } # => ["x", "xx"] + * h = {foo: 0, bar: 1, baz: 2} + * h.min(2) {|pair1, pair2| pair1[1] <=> pair2[1] } + * # => [[:foo, 0], [:bar, 1]] + * [].min(2) {|a, b| a <=> b } # => [] + * + * Related: #min_by, #minmax, #max. + * */ static VALUE @@ -1842,26 +2188,59 @@ max_ii(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) /* * call-seq: - * enum.max -> obj - * enum.max { |a, b| block } -> obj - * enum.max(n) -> array - * enum.max(n) { |a, b| block } -> array - * - * Returns the object in _enum_ with the maximum value. The - * first form assumes all objects implement Comparable; - * the second uses the block to return a <=> b. - * - * a = %w(albatross dog horse) - * a.max #=> "horse" - * a.max { |a, b| a.length <=> b.length } #=> "albatross" - * - * If the +n+ argument is given, maximum +n+ elements are returned - * as an array, sorted in descending order. - * - * a = %w[albatross dog horse] - * a.max(2) #=> ["horse", "dog"] - * a.max(2) {|a, b| a.length <=> b.length } #=> ["albatross", "horse"] - * [5, 1, 3, 4, 2].max(3) #=> [5, 4, 3] + * max -> element + * max(n) -> array + * max {|a, b| ... } -> element + * max(n) {|a, b| ... } -> array + * + * Returns the element with the maximum element according to a given criterion. + * The ordering of equal elements is indeterminate and may be unstable. + * + * With no argument and no block, returns the maximum element, + * using the elements' own method <=> for comparison: + * + * (1..4).max # => 4 + * (-4..-1).max # => -1 + * %w[d c b a].max # => "d" + * {foo: 0, bar: 1, baz: 2}.max # => [:foo, 0] + * [].max # => nil + * + * With positive integer argument +n+ given, and no block, + * returns an array containing the first +n+ maximum elements that exist: + * + * (1..4).max(2) # => [4, 3] + * (-4..-1).max(2) # => [-1, -2] + * %w[d c b a].max(2) # => ["d", "c"] + * {foo: 0, bar: 1, baz: 2}.max(2) # => [[:foo, 0], [:baz, 2]] + * [].max(2) # => [] + * + * With a block given, the block determines the maximum elements. + * The block is called with two elements +a+ and +b+, and must return: + * + * - A negative integer if a < b. + * - Zero if a == b. + * - A positive integer if a > b. + * + * With a block given and no argument, + * returns the maximum element as determined by the block: + * + * %w[xxx x xxxx xx].max {|a, b| a.size <=> b.size } # => "xxxx" + * h = {foo: 0, bar: 1, baz: 2} + * h.max {|pair1, pair2| pair1[1] <=> pair2[1] } # => [:baz, 2] + * [].max {|a, b| a <=> b } # => nil + * + * With a block given and positive integer argument +n+ given, + * returns an array containing the first +n+ maximum elements that exist, + * as determined by the block. + * + * %w[xxx x xxxx xx].max(2) {|a, b| a.size <=> b.size } # => ["xxxx", "xxx"] + * h = {foo: 0, bar: 1, baz: 2} + * h.max(2) {|pair1, pair2| pair1[1] <=> pair2[1] } + * # => [[:baz, 2], [:bar, 1]] + * [].max(2) {|a, b| a <=> b } # => [] + * + * Related: #min, #minmax, #max_by. + * */ static VALUE @@ -2002,17 +2381,33 @@ minmax_ii(RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo)) /* * call-seq: - * enum.minmax -> [min, max] - * enum.minmax { |a, b| block } -> [min, max] + * minmax -> [minimum, maximum] + * minmax {|a, b| ... } -> [minimum, maximum] + * + * Returns a 2-element array containing the minimum and maximum elements + * according to a given criterion. + * The ordering of equal elements is indeterminate and may be unstable. + * + * With no argument and no block, returns the minimum and maximum elements, + * using the elements' own method <=> for comparison: + * + * (1..4).minmax # => [1, 4] + * (-4..-1).minmax # => [-4, -1] + * %w[d c b a].minmax # => ["a", "d"] + * {foo: 0, bar: 1, baz: 2}.minmax # => [[:bar, 1], [:foo, 0]] + * [].minmax # => [nil, nil] + * + * With a block given, returns the minimum and maximum elements + * as determined by the block: * - * Returns a two element array which contains the minimum and the - * maximum value in the enumerable. The first form assumes all - * objects implement Comparable; the second uses the - * block to return a <=> b. + * %w[xxx x xxxx xx].minmax {|a, b| a.size <=> b.size } # => ["x", "xxxx"] + * h = {foo: 0, bar: 1, baz: 2} + * h.minmax {|pair1, pair2| pair1[1] <=> pair2[1] } + * # => [[:foo, 0], [:baz, 2]] + * [].minmax {|a, b| a <=> b } # => [nil, nil] + * + * Related: #min, #max, #minmax_by. * - * a = %w(albatross dog horse) - * a.minmax #=> ["albatross", "horse"] - * a.minmax { |a, b| a.length <=> b.length } #=> ["dog", "albatross"] */ static VALUE @@ -2064,25 +2459,38 @@ min_by_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) /* * call-seq: - * enum.min_by {|obj| block } -> obj - * enum.min_by -> an_enumerator - * enum.min_by(n) {|obj| block } -> array - * enum.min_by(n) -> an_enumerator + * min_by {|element| ... } -> element + * min_by(n) {|element| ... } -> array + * min_by -> enumerator + * min_by(n) -> enumerator + * + * Returns the elements for which the block returns the minimum values. + * + * With a block given and no argument, + * returns the element for which the block returns the minimum value: + * + * (1..4).min_by {|element| -element } # => 4 + * %w[a b c d].min_by {|element| -element.ord } # => "d" + * {foo: 0, bar: 1, baz: 2}.min_by {|key, value| -value } # => [:baz, 2] + * [].min_by {|element| -element } # => nil * - * Returns the object in enum that gives the minimum - * value from the given block. + * With a block given and positive integer argument +n+ given, + * returns an array containing the +n+ elements + * for which the block returns minimum values: * - * If no block is given, an enumerator is returned instead. + * (1..4).min_by(2) {|element| -element } + * # => [4, 3] + * %w[a b c d].min_by(2) {|element| -element.ord } + * # => ["d", "c"] + * {foo: 0, bar: 1, baz: 2}.min_by(2) {|key, value| -value } + * # => [[:baz, 2], [:bar, 1]] + * [].min_by(2) {|element| -element } + * # => [] * - * a = %w(albatross dog horse) - * a.min_by { |x| x.length } #=> "dog" + * Returns an Enumerator if no block is given. * - * If the +n+ argument is given, minimum +n+ elements are returned - * as an array. These +n+ elements are sorted by the value from the - * given block. + * Related: #min, #minmax, #max_by. * - * a = %w[albatross dog horse] - * p a.min_by(2) {|x| x.length } #=> ["dog", "horse"] */ static VALUE @@ -2126,69 +2534,37 @@ max_by_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) /* * call-seq: - * enum.max_by {|obj| block } -> obj - * enum.max_by -> an_enumerator - * enum.max_by(n) {|obj| block } -> obj - * enum.max_by(n) -> an_enumerator - * - * Returns the object in enum that gives the maximum - * value from the given block. - * - * If no block is given, an enumerator is returned instead. - * - * a = %w(albatross dog horse) - * a.max_by { |x| x.length } #=> "albatross" - * - * If the +n+ argument is given, maximum +n+ elements are returned - * as an array. These +n+ elements are sorted by the value from the - * given block, in descending order. - * - * a = %w[albatross dog horse] - * a.max_by(2) {|x| x.length } #=> ["albatross", "horse"] - * - * enum.max_by(n) can be used to implement weighted random sampling. - * Following example implements and use Enumerable#wsample. - * - * module Enumerable - * # weighted random sampling. - * # - * # Pavlos S. Efraimidis, Paul G. Spirakis - * # Weighted random sampling with a reservoir - * # Information Processing Letters - * # Volume 97, Issue 5 (16 March 2006) - * def wsample(n) - * self.max_by(n) {|v| rand ** (1.0/yield(v)) } - * end - * end - * e = (-20..20).to_a*10000 - * a = e.wsample(20000) {|x| - * Math.exp(-(x/5.0)**2) # normal distribution - * } - * # a is 20000 samples from e. - * p a.length #=> 20000 - * h = a.group_by {|x| x } - * -10.upto(10) {|x| puts "*" * (h[x].length/30.0).to_i if h[x] } - * #=> * - * # *** - * # ****** - * # *********** - * # ****************** - * # ***************************** - * # ***************************************** - * # **************************************************** - * # *************************************************************** - * # ******************************************************************** - * # *********************************************************************** - * # *********************************************************************** - * # ************************************************************** - * # **************************************************** - * # *************************************** - * # *************************** - * # ****************** - * # *********** - * # ******* - * # *** - * # * + * max_by {|element| ... } -> element + * max_by(n) {|element| ... } -> array + * max_by -> enumerator + * max_by(n) -> enumerator + * + * Returns the elements for which the block returns the maximum values. + * + * With a block given and no argument, + * returns the element for which the block returns the maximum value: + * + * (1..4).max_by {|element| -element } # => 1 + * %w[a b c d].max_by {|element| -element.ord } # => "a" + * {foo: 0, bar: 1, baz: 2}.max_by {|key, value| -value } # => [:foo, 0] + * [].max_by {|element| -element } # => nil + * + * With a block given and positive integer argument +n+ given, + * returns an array containing the +n+ elements + * for which the block returns maximum values: + * + * (1..4).max_by(2) {|element| -element } + * # => [1, 2] + * %w[a b c d].max_by(2) {|element| -element.ord } + * # => ["a", "b"] + * {foo: 0, bar: 1, baz: 2}.max_by(2) {|key, value| -value } + * # => [[:foo, 0], [:bar, 1]] + * [].max_by(2) {|element| -element } + * # => [] + * + * Returns an Enumerator if no block is given. + * + * Related: #max, #minmax, #min_by. * */ @@ -2285,17 +2661,25 @@ minmax_by_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo)) /* * call-seq: - * enum.minmax_by { |obj| block } -> [min, max] - * enum.minmax_by -> an_enumerator + * minmax_by {|element| ... } -> [minimum, maximum] + * minmax_by -> enumerator * - * Returns a two element array containing the objects in - * enum that correspond to the minimum and maximum values respectively - * from the given block. + * Returns a 2-element array containing the elements + * for which the block returns minimum and maximum values: * - * If no block is given, an enumerator is returned instead. + * (1..4).minmax_by {|element| -element } + * # => [4, 1] + * %w[a b c d].minmax_by {|element| -element.ord } + * # => ["d", "a"] + * {foo: 0, bar: 1, baz: 2}.minmax_by {|key, value| -value } + * # => [[:baz, 2], [:foo, 0]] + * [].minmax_by {|element| -element } + * # => [nil, nil] + * + * Returns an Enumerator if no block is given. + * + * Related: #max_by, #minmax, #min_by. * - * a = %w(albatross dog horse) - * a.minmax_by { |x| x.length } #=> ["dog", "albatross"] */ static VALUE @@ -2333,16 +2717,20 @@ member_i(RB_BLOCK_CALL_FUNC_ARGLIST(iter, args)) /* * call-seq: - * enum.include?(obj) -> true or false - * enum.member?(obj) -> true or false + * include?(object) -> true or false + * + * Returns whether for any element object == element: * - * Returns true if any member of enum equals - * obj. Equality is tested using ==. + * (1..4).include?(2) # => true + * (1..4).include?(5) # => false + * (1..4).include?('2') # => false + * %w[a b c d].include?('b') # => true + * %w[a b c d].include?('2') # => false + * {foo: 0, bar: 1, baz: 2}.include?(:foo) # => true + * {foo: 0, bar: 1, baz: 2}.include?('foo') # => false + * {foo: 0, bar: 1, baz: 2}.include?(0) # => false * - * (1..10).include? 5 #=> true - * (1..10).include? 15 #=> false - * (1..10).member? 5 #=> true - * (1..10).member? 15 #=> false + * Enumerable#member? is an alias for Enumerable#include?. * */ @@ -2367,20 +2755,28 @@ each_with_index_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, memo)) /* * call-seq: - * enum.each_with_index(*args) { |obj, i| block } -> enum - * enum.each_with_index(*args) -> an_enumerator + * each_with_index(*args) {|element, i| ..... } -> self + * each_with_index(*args) -> enumerator * - * Calls block with two arguments, the item and its index, - * for each item in enum. Given arguments are passed through - * to #each(). + * With a block given, calls the block with each element and its index; + * returns +self+: * - * If no block is given, an enumerator is returned instead. + * h = {} + * (1..4).each_with_index {|element, i| h[element] = i } # => 1..4 + * h # => {1=>0, 2=>1, 3=>2, 4=>3} * - * hash = Hash.new - * %w(cat dog wombat).each_with_index { |item, index| - * hash[item] = index - * } - * hash #=> {"cat"=>0, "dog"=>1, "wombat"=>2} + * h = {} + * %w[a b c d].each_with_index {|element, i| h[element] = i } + * # => ["a", "b", "c", "d"] + * h # => {"a"=>0, "b"=>1, "c"=>2, "d"=>3} + * + * a = [] + * h = {foo: 0, bar: 1, baz: 2} + * h.each_with_index {|element, i| a.push([i, element]) } + * # => {:foo=>0, :bar=>1, :baz=>2} + * a # => [[0, [:foo, 0]], [1, [:bar, 1]], [2, [:baz, 2]]] + * + * With no block given, returns an Enumerator. * */ @@ -2399,20 +2795,28 @@ enum_each_with_index(int argc, VALUE *argv, VALUE obj) /* * call-seq: - * enum.reverse_each(*args) { |item| block } -> enum - * enum.reverse_each(*args) -> an_enumerator + * reverse_each(*args) {|element| ... } -> self + * reverse_each(*args) -> enumerator * - * Builds a temporary array and traverses that array in reverse order. + * With a block given, calls the block with each element, + * but in reverse order; returns +self+: * - * If no block is given, an enumerator is returned instead. + * a = [] + * (1..4).reverse_each {|element| a.push(-element) } # => 1..4 + * a # => [-4, -3, -2, -1] * - * (1..3).reverse_each { |v| p v } + * a = [] + * %w[a b c d].reverse_each {|element| a.push(element) } + * # => ["a", "b", "c", "d"] + * a # => ["d", "c", "b", "a"] * - * produces: + * a = [] + * h.reverse_each {|element| a.push(element) } + * # => {:foo=>0, :bar=>1, :baz=>2} + * a # => [[:baz, 2], [:bar, 1], [:foo, 0]] + * + * With no block given, returns an Enumerator. * - * 3 - * 2 - * 1 */ static VALUE @@ -2449,30 +2853,39 @@ each_val_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, p)) /* * call-seq: - * enum.each_entry { |obj| block } -> enum - * enum.each_entry -> an_enumerator - * - * Calls block once for each element in +self+, passing that - * element as a parameter, converting multiple values from yield to an - * array. - * - * If no block is given, an enumerator is returned instead. - * - * class Foo - * include Enumerable - * def each - * yield 1 - * yield 1, 2 - * yield - * end - * end - * Foo.new.each_entry{ |o| p o } + * each_entry(*args) {|element| ... } -> self + * each_entry(*args) -> enumerator + * + * Calls the given block with each element, + * converting multiple values from yield to an array; returns +self+: + * + * a = [] + * (1..4).each_entry {|element| a.push(element) } # => 1..4 + * a # => [1, 2, 3, 4] + * + * a = [] + * h = {foo: 0, bar: 1, baz:2} + * h.each_entry {|element| a.push(element) } + * # => {:foo=>0, :bar=>1, :baz=>2} + * a # => [[:foo, 0], [:bar, 1], [:baz, 2]] + * + * class Foo + * include Enumerable + * def each + * yield 1 + * yield 1, 2 + * yield + * end + * end + * Foo.new.each_entry {|yielded| p yielded } * - * produces: + * Output: * - * 1 - * [1, 2] - * nil + * 1 + * [1, 2] + * nil + * + * With no block given, returns an Enumerator. * */ @@ -2537,7 +2950,7 @@ enum_each_slice_size(VALUE obj, VALUE args, VALUE eobj) if (slice_size <= 0) rb_raise(rb_eArgError, "invalid slice size"); size = enum_size(obj, 0, 0); - if (size == Qnil) return Qnil; + if (NIL_P(size)) return Qnil; if (RB_FLOAT_TYPE_P(size) && RTEST(rb_funcall(size, infinite_p, 0))) { return size; } @@ -2548,18 +2961,22 @@ enum_each_slice_size(VALUE obj, VALUE args, VALUE eobj) /* * call-seq: - * enum.each_slice(n) { ... } -> nil - * enum.each_slice(n) -> an_enumerator + * each_slice(n) { ... } -> self + * each_slice(n) -> enumerator + * + * Calls the block with each successive disjoint +n+-tuple of elements; + * returns +self+: + * + * a = [] + * (1..10).each_slice(3) {|tuple| a.push(tuple) } + * a # => [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]] * - * Iterates the given block for each slice of elements. If no - * block is given, returns an enumerator. + * a = [] + * h = {foo: 0, bar: 1, baz: 2, bat: 3, bam: 4} + * h.each_slice(2) {|tuple| a.push(tuple) } + * a # => [[[:foo, 0], [:bar, 1]], [[:baz, 2], [:bat, 3]], [[:bam, 4]]] * - * (1..10).each_slice(3) { |a| p a } - * # outputs below - * [1, 2, 3] - * [4, 5, 6] - * [7, 8, 9] - * [10] + * With no block given, returns an Enumerator. * */ static VALUE @@ -2580,7 +2997,7 @@ enum_each_slice(VALUE obj, VALUE n) ary = memo->v1; if (RARRAY_LEN(ary) > 0) rb_yield(ary); - return Qnil; + return obj; } static VALUE @@ -2615,7 +3032,7 @@ enum_each_cons_size(VALUE obj, VALUE args, VALUE eobj) if (cons_size <= 0) rb_raise(rb_eArgError, "invalid size"); size = enum_size(obj, 0, 0); - if (size == Qnil) return Qnil; + if (NIL_P(size)) return Qnil; n = add_int(size, 1 - cons_size); return (OPTIMIZED_CMP(n, zero, cmp_opt) == -1) ? zero : n; @@ -2623,23 +3040,22 @@ enum_each_cons_size(VALUE obj, VALUE args, VALUE eobj) /* * call-seq: - * enum.each_cons(n) { ... } -> nil - * enum.each_cons(n) -> an_enumerator - * - * Iterates the given block for each array of consecutive - * elements. If no block is given, returns an enumerator. - * - * e.g.: - * (1..10).each_cons(3) { |a| p a } - * # outputs below - * [1, 2, 3] - * [2, 3, 4] - * [3, 4, 5] - * [4, 5, 6] - * [5, 6, 7] - * [6, 7, 8] - * [7, 8, 9] - * [8, 9, 10] + * each_cons(n) { ... } -> self + * each_cons(n) -> enumerator + * + * Calls the block with each successive overlapped +n+-tuple of elements; + * returns +self+: + * + * a = [] + * (1..5).each_cons(3) {|element| a.push(element) } + * a # => [[1, 2, 3], [2, 3, 4], [3, 4, 5]] + * + * a = [] + * h = {foo: 0, bar: 1, baz: 2, bam: 3} + * h.each_cons(2) {|element| a.push(element) } + * a # => [[[:foo, 0], [:bar, 1]], [[:bar, 1], [:baz, 2]], [[:baz, 2], [:bam, 3]]] + * + * With no block given, returns an Enumerator. * */ static VALUE @@ -2652,11 +3068,11 @@ enum_each_cons(VALUE obj, VALUE n) if (size <= 0) rb_raise(rb_eArgError, "invalid size"); RETURN_SIZED_ENUMERATOR(obj, 1, &n, enum_each_cons_size); arity = rb_block_arity(); - if (enum_size_over_p(obj, size)) return Qnil; + if (enum_size_over_p(obj, size)) return obj; memo = MEMO_NEW(rb_ary_new2(size), dont_recycle_block_arg(arity), size); rb_block_call(obj, id_each, 0, 0, each_cons_i, (VALUE)memo); - return Qnil; + return obj; } static VALUE @@ -2668,16 +3084,17 @@ each_with_object_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, memo)) /* * call-seq: - * enum.each_with_object(obj) { |(*args), memo_obj| ... } -> obj - * enum.each_with_object(obj) -> an_enumerator + * each_with_object(object) { |(*args), memo_object| ... } -> object + * each_with_object(object) -> enumerator * - * Iterates the given block for each element with an arbitrary - * object given, and returns the initially given object. + * Calls the block once for each element, passing both the element + * and the given object: * - * If no block is given, returns an enumerator. + * (1..4).each_with_object([]) {|i, a| a.push(i**2) } # => [1, 4, 9, 16] + * h.each_with_object({}) {|element, h| k, v = *element; h[v] = k } + * # => {0=>:foo, 1=>:bar, 2=>:baz} * - * evens = (1..10).each_with_object([]) { |i, a| a << i*2 } - * #=> [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] + * With no block given, returns an Enumerator. * */ static VALUE @@ -2779,29 +3196,68 @@ zip_i(RB_BLOCK_CALL_FUNC_ARGLIST(val, memoval)) /* * call-seq: - * enum.zip(arg, ...) -> an_array_of_array - * enum.zip(arg, ...) { |arr| block } -> nil - * - * Takes one element from enum and merges corresponding - * elements from each args. This generates a sequence of - * n-element arrays, where n is one more than the - * count of arguments. The length of the resulting sequence will be - * enum#size. If the size of any argument is less than - * enum#size, 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 ] - * - * a.zip(b) #=> [[4, 7], [5, 8], [6, 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]] - * - * c = [] - * a.zip(b) { |x, y| c << x + y } #=> nil - * c #=> [11, 13, 15] + * zip(*other_enums) -> array + * zip(*other_enums) {|array| ... } -> nil + * + * With no block given, returns a new array +new_array+ of size self.size + * whose elements are arrays. + * Each nested array new_array[n] + * is of size other_enums.size+1, and contains: + * + * - The +n+-th element of self. + * - The +n+-th element of each of the +other_enums+. + * + * If all +other_enums+ and self are the same size, + * all elements are included in the result, and there is no +nil+-filling: + * + * a = [:a0, :a1, :a2, :a3] + * b = [:b0, :b1, :b2, :b3] + * c = [:c0, :c1, :c2, :c3] + * d = a.zip(b, c) + * d # => [[:a0, :b0, :c0], [:a1, :b1, :c1], [:a2, :b2, :c2], [:a3, :b3, :c3]] + * + * f = {foo: 0, bar: 1, baz: 2} + * g = {goo: 3, gar: 4, gaz: 5} + * h = {hoo: 6, har: 7, haz: 8} + * d = f.zip(g, h) + * d # => [ + * # [[:foo, 0], [:goo, 3], [:hoo, 6]], + * # [[:bar, 1], [:gar, 4], [:har, 7]], + * # [[:baz, 2], [:gaz, 5], [:haz, 8]] + * # ] + * + * If any enumerable in other_enums is smaller than self, + * fills to self.size with +nil+: + * + * a = [:a0, :a1, :a2, :a3] + * b = [:b0, :b1, :b2] + * c = [:c0, :c1] + * d = a.zip(b, c) + * d # => [[:a0, :b0, :c0], [:a1, :b1, :c1], [:a2, :b2, nil], [:a3, nil, nil]] + * + * If any enumerable in other_enums is larger than self, + * its trailing elements are ignored: + * + * a = [:a0, :a1, :a2, :a3] + * b = [:b0, :b1, :b2, :b3, :b4] + * c = [:c0, :c1, :c2, :c3, :c4, :c5] + * d = a.zip(b, c) + * d # => [[:a0, :b0, :c0], [:a1, :b1, :c1], [:a2, :b2, :c2], [:a3, :b3, :c3]] + * + * When a block is given, calls the block with each of the sub-arrays + * (formed as above); returns nil: + * + * a = [:a0, :a1, :a2, :a3] + * b = [:b0, :b1, :b2, :b3] + * c = [:c0, :c1, :c2, :c3] + * a.zip(b, c) {|sub_array| p sub_array} # => nil + * + * Output: + * + * [:a0, :b0, :c0] + * [:a1, :b1, :c1] + * [:a2, :b2, :c2] + * [:a3, :b3, :c3] * */ @@ -2857,13 +3313,16 @@ take_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) /* * call-seq: - * enum.take(n) -> array + * take(n) -> array + * + * For non-negative integer +n+, returns the first +n+ elements: * - * Returns first n elements from enum. + * r = (1..4) + * r.take(2) # => [1, 2] + * r.take(0) # => [] * - * a = [1, 2, 3, 4, 5, 0] - * a.take(3) #=> [1, 2, 3] - * a.take(30) #=> [1, 2, 3, 4, 5, 0] + * h = {foo: 0, bar: 1, baz: 2, bat: 3} + * h.take(2) # => [[:foo, 0], [:bar, 1]] * */ @@ -2896,16 +3355,20 @@ take_while_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)) /* * call-seq: - * enum.take_while { |obj| block } -> array - * enum.take_while -> an_enumerator + * take_while {|element| ... } -> array + * take_while -> enumerator * - * Passes elements to the block until the block returns +nil+ or +false+, - * then stops iterating and returns an array of all prior elements. + * Calls the block with successive elements as long as the block + * returns a truthy value; + * returns an array of all elements up to that point: * - * If no block is given, an enumerator is returned instead. * - * a = [1, 2, 3, 4, 5, 0] - * a.take_while { |i| i < 3 } #=> [1, 2] + * (1..4).take_while{|i| i < 3 } # => [1, 2] + * h = {foo: 0, bar: 1, baz: 2} + * h.take_while{|element| key, value = *element; value < 2 } + * # => [[:foo, 0], [:bar, 1]] + * + * With no block given, returns an Enumerator. * */ @@ -2935,13 +3398,20 @@ drop_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) /* * call-seq: - * enum.drop(n) -> array + * drop(n) -> array + * + * For positive integer +n+, returns an array containing + * all but the first +n+ elements: * - * Drops first n elements from enum, and returns rest elements - * in an array. + * r = (1..4) + * r.drop(3) # => [4] + * r.drop(2) # => [3, 4] + * r.drop(1) # => [2, 3, 4] + * r.drop(0) # => [1, 2, 3, 4] + * r.drop(50) # => [] * - * a = [1, 2, 3, 4, 5, 0] - * a.drop(3) #=> [4, 5, 0] + * h = {foo: 0, bar: 1, baz: 2, bat: 3} + * h.drop(2) # => [[:baz, 2], [:bat, 3]] * */ @@ -2980,17 +3450,20 @@ drop_while_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) /* * call-seq: - * enum.drop_while { |obj| block } -> array - * enum.drop_while -> an_enumerator + * drop_while {|element| ... } -> array + * drop_while -> enumerator + * + * Calls the block with successive elements as long as the block + * returns a truthy value; + * returns an array of all elements after that point: * - * 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. * - * If no block is given, an enumerator is returned instead. + * (1..4).drop_while{|i| i < 3 } # => [3, 4] + * h = {foo: 0, bar: 1, baz: 2} + * a = h.drop_while{|element| key, value = *element; value < 2 } + * a # => [[:baz, 2]] * - * a = [1, 2, 3, 4, 5, 0] - * a.drop_while { |i| i < 3 } #=> [3, 4, 5, 0] + * With no block given, returns an Enumerator. * */ @@ -3040,22 +3513,28 @@ enum_cycle_size(VALUE self, VALUE args, VALUE eobj) /* * call-seq: - * enum.cycle(n=nil) { |obj| block } -> nil - * enum.cycle(n=nil) -> an_enumerator + * cycle(n = nil) {|element| ...} -> nil + * cycle(n = nil) -> enumerator * - * Calls block for each element of enum repeatedly _n_ - * times or forever if none or +nil+ is given. If a non-positive - * number is given or the collection is empty, does nothing. Returns - * +nil+ if the loop has finished without getting interrupted. + * When called with positive integer argument +n+ and a block, + * calls the block with each element, then does so again, + * until it has done so +n+ times; returns +nil+: * - * Enumerable#cycle saves elements in an internal array so changes - * to enum after the first pass have no effect. + * a = [] + * (1..4).cycle(3) {|element| a.push(element) } # => nil + * a # => [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4] + * a = [] + * ('a'..'d').cycle(2) {|element| a.push(element) } + * a # => ["a", "b", "c", "d", "a", "b", "c", "d"] + * a = [] + * {foo: 0, bar: 1, baz: 2}.cycle(2) {|element| a.push(element) } + * a # => [[:foo, 0], [:bar, 1], [:baz, 2], [:foo, 0], [:bar, 1], [:baz, 2]] * - * If no block is given, an enumerator is returned instead. + * If count is zero or negative, does not call the block. * - * 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. + * When called with a block and +n+ is +nil+, cycles forever. + * + * When no block is given, returns an Enumerator. * */ @@ -3101,8 +3580,8 @@ chunk_ii(RB_BLOCK_CALL_FUNC_ARGLIST(i, _argp)) { struct chunk_arg *argp = MEMO_FOR(struct chunk_arg, _argp); VALUE v, s; - VALUE alone = ID2SYM(rb_intern("_alone")); - VALUE separator = ID2SYM(rb_intern("_separator")); + VALUE alone = ID2SYM(id__alone); + VALUE separator = ID2SYM(id__separator); ENUM_WANT_SVALUE(); @@ -3154,8 +3633,8 @@ chunk_i(RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator)) VALUE arg; struct chunk_arg *memo = NEW_MEMO_FOR(struct chunk_arg, arg); - enumerable = rb_ivar_get(enumerator, rb_intern("chunk_enumerable")); - memo->categorize = rb_ivar_get(enumerator, rb_intern("chunk_categorize")); + enumerable = rb_ivar_get(enumerator, id_chunk_enumerable); + memo->categorize = rb_ivar_get(enumerator, id_chunk_categorize); memo->prev_value = Qnil; memo->prev_elts = Qnil; memo->yielder = yielder; @@ -3171,50 +3650,78 @@ chunk_i(RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator)) /* * call-seq: - * enum.chunk { |elt| ... } -> an_enumerator + * chunk {|array| ... } -> enumerator * - * Enumerates over the items, chunking them together based on the return - * value of the block. + * Each element in the returned enumerator is a 2-element array consisting of: * - * Consecutive elements which return the same block value are chunked together. + * - A value returned by the block. + * - An array ("chunk") containing the element for which that value was returned, + * and all following elements for which the block returned the same value: * - * For example, consecutive even numbers and odd numbers can be - * chunked as follows. + * So that: * - * [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5].chunk { |n| - * n.even? - * }.each { |even, ary| - * p [even, ary] - * } - * #=> [false, [3, 1]] - * # [true, [4]] - * # [false, [1, 5, 9]] - * # [true, [2, 6]] - * # [false, [5, 3, 5]] + * - Each block return value that is different from its predecessor + * begins a new chunk. + * - Each block return value that is the same as its predecessor + * continues the same chunk. + * + * Example: + * + * e = (0..10).chunk {|i| (i / 3).floor } # => # + * # The enumerator elements. + * e.next # => [0, [0, 1, 2]] + * e.next # => [1, [3, 4, 5]] + * e.next # => [2, [6, 7, 8]] + * e.next # => [3, [9, 10]] + * + * \Method +chunk+ is especially useful for an enumerable that is already sorted. + * This example counts words for each initial letter in a large array of words: + * + * # Get sorted words from a web page. + * url = 'https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt' + * words = URI::open(url).readlines + * # Make chunks, one for each letter. + * e = words.chunk {|word| word.upcase[0] } # => # + * # Display 'A' through 'F'. + * e.each {|c, words| p [c, words.length]; break if c == 'F' } * - * This method is especially useful for sorted series of elements. - * The following example counts words for each initial letter. + * Output: * - * open("/usr/share/dict/words", "r:iso-8859-1") { |f| - * f.chunk { |line| line.ord }.each { |ch, lines| p [ch.chr, lines.length] } + * ["A", 17096] + * ["B", 11070] + * ["C", 19901] + * ["D", 10896] + * ["E", 8736] + * ["F", 6860] + * + * You can use the special symbol :_alone to force an element + * into its own separate chuck: + * + * a = [0, 0, 1, 1] + * e = a.chunk{|i| i.even? ? :_alone : true } + * e.to_a # => [[:_alone, [0]], [:_alone, [0]], [true, [1, 1]]] + * + * For example, you can put each line that contains a URL into its own chunk: + * + * pattern = /http/ + * open(filename) { |f| + * f.chunk { |line| line =~ pattern ? :_alone : true }.each { |key, lines| + * pp lines + * } * } - * #=> ["\n", 1] - * # ["A", 1327] - * # ["B", 1372] - * # ["C", 1507] - * # ["D", 791] - * # ... * - * The following key values have special meaning: - * - +nil+ and +:_separator+ specifies that the elements should be dropped. - * - +:_alone+ specifies that the element should be chunked by itself. + * You can use the special symbol :_separator or +nil+ + * to force an element to be ignored (not included in any chunk): * - * Any other symbols that begin with an underscore will raise an error: + * a = [0, 0, -1, 1, 1] + * e = a.chunk{|i| i < 0 ? :_separator : true } + * e.to_a # => [[true, [0, 0]], [true, [1, 1]]] * - * items.chunk { |item| :_underscore } - * #=> RuntimeError: symbols beginning with an underscore are reserved + * Note that the separator does end the chunk: * - * +nil+ and +:_separator+ can be used to ignore some elements. + * a = [0, 0, -1, 1, -1, 1] + * e = a.chunk{|i| i < 0 ? :_separator : true } + * e.to_a # => [[true, [0, 0]], [true, [1]], [true, [1]]] * * For example, the sequence of hyphens in svn log can be eliminated as follows: * @@ -3244,18 +3751,6 @@ chunk_i(RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator)) * pp lines * } * - * +:_alone+ can be used to force items into their own chunk. - * For example, you can put lines that contain a URL by themselves, - * and chunk the rest of the lines together, like this: - * - * pattern = /http/ - * open(filename) { |f| - * f.chunk { |line| line =~ pattern ? :_alone : true }.each { |key, lines| - * pp lines - * } - * } - * - * If no block is given, an enumerator to `chunk` is returned instead. */ static VALUE enum_chunk(VALUE enumerable) @@ -3265,8 +3760,8 @@ enum_chunk(VALUE enumerable) RETURN_SIZED_ENUMERATOR(enumerable, 0, 0, enum_size); enumerator = rb_obj_alloc(rb_cEnumerator); - rb_ivar_set(enumerator, rb_intern("chunk_enumerable"), enumerable); - rb_ivar_set(enumerator, rb_intern("chunk_categorize"), rb_block_proc()); + rb_ivar_set(enumerator, id_chunk_enumerable, enumerable); + rb_ivar_set(enumerator, id_chunk_categorize, rb_block_proc()); rb_block_call(enumerator, idInitialize, 0, 0, chunk_i, enumerator); return enumerator; } @@ -3313,9 +3808,9 @@ slicebefore_i(RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator)) VALUE arg; struct slicebefore_arg *memo = NEW_MEMO_FOR(struct slicebefore_arg, arg); - enumerable = rb_ivar_get(enumerator, rb_intern("slicebefore_enumerable")); - memo->sep_pred = rb_attr_get(enumerator, rb_intern("slicebefore_sep_pred")); - memo->sep_pat = NIL_P(memo->sep_pred) ? rb_ivar_get(enumerator, rb_intern("slicebefore_sep_pat")) : Qnil; + enumerable = rb_ivar_get(enumerator, id_slicebefore_enumerable); + memo->sep_pred = rb_attr_get(enumerator, id_slicebefore_sep_pred); + memo->sep_pat = NIL_P(memo->sep_pred) ? rb_ivar_get(enumerator, id_slicebefore_sep_pat) : Qnil; memo->prev_elts = Qnil; memo->yielder = yielder; @@ -3328,24 +3823,41 @@ slicebefore_i(RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator)) /* * call-seq: - * enum.slice_before(pattern) -> an_enumerator - * enum.slice_before { |elt| bool } -> an_enumerator + * slice_before(pattern) -> enumerator + * slice_before {|array| ... } -> enumerator * - * Creates an enumerator for each chunked elements. - * The beginnings of chunks are defined by _pattern_ and the block. - - * If _pattern_ === _elt_ returns true or the block - * returns true for the element, the element is beginning of a - * chunk. - - * The === and _block_ is called from the first element to the last - * element of _enum_. The result for the first element is ignored. - - * The result enumerator yields the chunked elements as an array. - * So +each+ method can be called as follows: + * With argument +pattern+, returns an enumerator that uses the pattern + * to partition elements into arrays ("slices"). + * An element begins a new slice if element === pattern + * (or if it is the first element). + * + * a = %w[foo bar fop for baz fob fog bam foy] + * e = a.slice_before(/ba/) # => # + * e.each {|array| p array } + * + * Output: + * + * ["foo"] + * ["bar", "fop", "for"] + * ["baz", "fob", "fog"] + * ["bam", "foy"] + * + * With a block, returns an enumerator that uses the block + * to partition elements into arrays. + * An element begins a new slice if its block return is a truthy value + * (or if it is the first element): * - * enum.slice_before(pattern).each { |ary| ... } - * enum.slice_before { |elt| bool }.each { |ary| ... } + * e = (1..20).slice_before {|i| i % 4 == 2 } # => # + * e.each {|array| p array } + * + * Output: + * + * [1] + * [2, 3, 4, 5] + * [6, 7, 8, 9] + * [10, 11, 12, 13] + * [14, 15, 16, 17] + * [18, 19, 20] * * Other methods of the Enumerator class and Enumerable module, * such as +to_a+, +map+, etc., are also usable. @@ -3363,7 +3875,6 @@ slicebefore_i(RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator)) * f.slice_before { |line| /\A\S/ === line }.each { |e| pp e } * } * - * * "svn proplist -R" produces multiline output for each file. * They can be chunked as follows: * @@ -3479,15 +3990,15 @@ enum_slice_before(int argc, VALUE *argv, VALUE enumerable) if (argc != 0) rb_error_arity(argc, 0, 0); enumerator = rb_obj_alloc(rb_cEnumerator); - rb_ivar_set(enumerator, rb_intern("slicebefore_sep_pred"), rb_block_proc()); + rb_ivar_set(enumerator, id_slicebefore_sep_pred, rb_block_proc()); } else { VALUE sep_pat; rb_scan_args(argc, argv, "1", &sep_pat); enumerator = rb_obj_alloc(rb_cEnumerator); - rb_ivar_set(enumerator, rb_intern("slicebefore_sep_pat"), sep_pat); + rb_ivar_set(enumerator, id_slicebefore_sep_pat, sep_pat); } - rb_ivar_set(enumerator, rb_intern("slicebefore_enumerable"), enumerable); + rb_ivar_set(enumerator, id_slicebefore_enumerable, enumerable); rb_block_call(enumerator, idInitialize, 0, 0, slicebefore_i, enumerator); return enumerator; } @@ -3543,9 +4054,9 @@ sliceafter_i(RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator)) VALUE arg; struct sliceafter_arg *memo = NEW_MEMO_FOR(struct sliceafter_arg, arg); - enumerable = rb_ivar_get(enumerator, rb_intern("sliceafter_enum")); - memo->pat = rb_ivar_get(enumerator, rb_intern("sliceafter_pat")); - memo->pred = rb_attr_get(enumerator, rb_intern("sliceafter_pred")); + enumerable = rb_ivar_get(enumerator, id_sliceafter_enum); + memo->pat = rb_ivar_get(enumerator, id_sliceafter_pat); + memo->pred = rb_attr_get(enumerator, id_sliceafter_pred); memo->prev_elts = Qnil; memo->yielder = yielder; @@ -3558,24 +4069,39 @@ sliceafter_i(RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator)) /* * call-seq: - * enum.slice_after(pattern) -> an_enumerator - * enum.slice_after { |elt| bool } -> an_enumerator + * slice_after(pattern) -> enumerator + * slice_after {|array| ... } -> enumerator + * + * With argument +pattern+, returns an enumerator that uses the pattern + * to partition elements into arrays ("slices"). + * An element ends the current slice if element === pattern: + * + * a = %w[foo bar fop for baz fob fog bam foy] + * e = a.slice_after(/ba/) # => # + * e.each {|array| p array } + * + * Output: * - * Creates an enumerator for each chunked elements. - * The ends of chunks are defined by _pattern_ and the block. + * ["foo", "bar"] + * ["fop", "for", "baz"] + * ["fob", "fog", "bam"] + * ["foy"] * - * If _pattern_ === _elt_ returns true or the block - * returns true for the element, the element is end of a - * chunk. + * With a block, returns an enumerator that uses the block + * to partition elements into arrays. + * An element ends the current slice if its block return is a truthy value: * - * The === and _block_ is called from the first element to the last - * element of _enum_. + * e = (1..20).slice_after {|i| i % 4 == 2 } # => # + * e.each {|array| p array } * - * The result enumerator yields the chunked elements as an array. - * So +each+ method can be called as follows: + * Output: * - * enum.slice_after(pattern).each { |ary| ... } - * enum.slice_after { |elt| bool }.each { |ary| ... } + * [1, 2] + * [3, 4, 5, 6] + * [7, 8, 9, 10] + * [11, 12, 13, 14] + * [15, 16, 17, 18] + * [19, 20] * * Other methods of the Enumerator class and Enumerable module, * such as +map+, etc., are also usable. @@ -3608,9 +4134,9 @@ enum_slice_after(int argc, VALUE *argv, VALUE enumerable) } enumerator = rb_obj_alloc(rb_cEnumerator); - rb_ivar_set(enumerator, rb_intern("sliceafter_enum"), enumerable); - rb_ivar_set(enumerator, rb_intern("sliceafter_pat"), pat); - rb_ivar_set(enumerator, rb_intern("sliceafter_pred"), pred); + rb_ivar_set(enumerator, id_sliceafter_enum, enumerable); + rb_ivar_set(enumerator, id_sliceafter_pat, pat); + rb_ivar_set(enumerator, id_sliceafter_pred, pred); rb_block_call(enumerator, idInitialize, 0, 0, sliceafter_i, enumerator); return enumerator; @@ -3673,12 +4199,12 @@ slicewhen_i(RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator)) struct slicewhen_arg *memo = NEW_PARTIAL_MEMO_FOR(struct slicewhen_arg, arg, inverted); - enumerable = rb_ivar_get(enumerator, rb_intern("slicewhen_enum")); - memo->pred = rb_attr_get(enumerator, rb_intern("slicewhen_pred")); + enumerable = rb_ivar_get(enumerator, id_slicewhen_enum); + memo->pred = rb_attr_get(enumerator, id_slicewhen_pred); memo->prev_elt = Qundef; memo->prev_elts = Qnil; memo->yielder = yielder; - memo->inverted = RTEST(rb_attr_get(enumerator, rb_intern("slicewhen_inverted"))); + memo->inverted = RTEST(rb_attr_get(enumerator, id_slicewhen_inverted)); rb_block_call(enumerable, id_each, 0, 0, slicewhen_ii, arg); memo = MEMO_FOR(struct slicewhen_arg, arg); @@ -3689,65 +4215,23 @@ slicewhen_i(RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator)) /* * call-seq: - * enum.slice_when {|elt_before, elt_after| bool } -> an_enumerator + * slice_when {|element, next_element| ... } -> enumerator * - * Creates an enumerator for each chunked elements. - * The beginnings of chunks are defined by the block. + * The returned enumerator uses the block + * to partition elements into arrays ("slices"); + * it calls the block with each element and its successor; + * begins a new slice if and only if the block returns a truthy value: * - * This method split each chunk using adjacent elements, - * _elt_before_ and _elt_after_, - * in the receiver enumerator. - * This method split chunks between _elt_before_ and _elt_after_ where - * the block returns true. + * a = [0, 1, 2, 4, 5, 6, 8, 9] + * e = a.slice_when {|i, j| j != i + 1 } + * e.each {|array| p array } * - * The block is called the length of the receiver enumerator minus one. + * Output: * - * The result enumerator yields the chunked elements as an array. - * So +each+ method can be called as follows: + * [0, 1, 2] + * [4, 5, 6] + * [8, 9] * - * enum.slice_when { |elt_before, elt_after| bool }.each { |ary| ... } - * - * Other methods of the Enumerator class and Enumerable module, - * such as +to_a+, +map+, etc., are also usable. - * - * For example, one-by-one increasing subsequence can be chunked as follows: - * - * a = [1,2,4,9,10,11,12,15,16,19,20,21] - * b = a.slice_when {|i, j| i+1 != j } - * p b.to_a #=> [[1, 2], [4], [9, 10, 11, 12], [15, 16], [19, 20, 21]] - * c = b.map {|a| a.length < 3 ? a : "#{a.first}-#{a.last}" } - * p c #=> [[1, 2], [4], "9-12", [15, 16], "19-21"] - * d = c.join(",") - * p d #=> "1,2,4,9-12,15,16,19-21" - * - * Near elements (threshold: 6) in sorted array can be chunked as follows: - * - * a = [3, 11, 14, 25, 28, 29, 29, 41, 55, 57] - * p a.slice_when {|i, j| 6 < j - i }.to_a - * #=> [[3], [11, 14], [25, 28, 29, 29], [41], [55, 57]] - * - * Increasing (non-decreasing) subsequence can be chunked as follows: - * - * a = [0, 9, 2, 2, 3, 2, 7, 5, 9, 5] - * p a.slice_when {|i, j| i > j }.to_a - * #=> [[0, 9], [2, 2, 3], [2, 7], [5, 9], [5]] - * - * Adjacent evens and odds can be chunked as follows: - * (Enumerable#chunk is another way to do it.) - * - * a = [7, 5, 9, 2, 0, 7, 9, 4, 2, 0] - * p a.slice_when {|i, j| i.even? != j.even? }.to_a - * #=> [[7, 5, 9], [2, 0], [7, 9], [4, 2, 0]] - * - * Paragraphs (non-empty lines with trailing empty lines) can be chunked as follows: - * (See Enumerable#chunk to ignore empty lines.) - * - * lines = ["foo\n", "bar\n", "\n", "baz\n", "qux\n"] - * p lines.slice_when {|l1, l2| /\A\s*\z/ =~ l1 && /\S/ =~ l2 }.to_a - * #=> [["foo\n", "bar\n", "\n"], ["baz\n", "qux\n"]] - * - * Enumerable#chunk_while does the same, except splitting when the block - * returns false instead of true. */ static VALUE enum_slice_when(VALUE enumerable) @@ -3758,9 +4242,9 @@ enum_slice_when(VALUE enumerable) pred = rb_block_proc(); enumerator = rb_obj_alloc(rb_cEnumerator); - rb_ivar_set(enumerator, rb_intern("slicewhen_enum"), enumerable); - rb_ivar_set(enumerator, rb_intern("slicewhen_pred"), pred); - rb_ivar_set(enumerator, rb_intern("slicewhen_inverted"), Qfalse); + rb_ivar_set(enumerator, id_slicewhen_enum, enumerable); + rb_ivar_set(enumerator, id_slicewhen_pred, pred); + rb_ivar_set(enumerator, id_slicewhen_inverted, Qfalse); rb_block_call(enumerator, idInitialize, 0, 0, slicewhen_i, enumerator); return enumerator; @@ -3768,52 +4252,27 @@ enum_slice_when(VALUE enumerable) /* * call-seq: - * enum.chunk_while {|elt_before, elt_after| bool } -> an_enumerator - * - * Creates an enumerator for each chunked elements. - * The beginnings of chunks are defined by the block. - * - * This method split each chunk using adjacent elements, - * _elt_before_ and _elt_after_, - * in the receiver enumerator. - * This method split chunks between _elt_before_ and _elt_after_ where - * the block returns false. - * - * The block is called the length of the receiver enumerator minus one. - * - * The result enumerator yields the chunked elements as an array. - * So +each+ method can be called as follows: + * chunk_while {|element, next_element| ... } -> enumerator * - * enum.chunk_while { |elt_before, elt_after| bool }.each { |ary| ... } + * The returned Enumerator uses the block to partition elements + * into arrays ("chunks"); + * it calls the block with each element and its successor; + * begins a new chunk if and only if the block returns a truthy value: * - * Other methods of the Enumerator class and Enumerable module, - * such as +to_a+, +map+, etc., are also usable. - * - * For example, one-by-one increasing subsequence can be chunked as follows: + * Example: * - * a = [1,2,4,9,10,11,12,15,16,19,20,21] - * b = a.chunk_while {|i, j| i+1 == j } - * p b.to_a #=> [[1, 2], [4], [9, 10, 11, 12], [15, 16], [19, 20, 21]] - * c = b.map {|a| a.length < 3 ? a : "#{a.first}-#{a.last}" } - * p c #=> [[1, 2], [4], "9-12", [15, 16], "19-21"] - * d = c.join(",") - * p d #=> "1,2,4,9-12,15,16,19-21" + * a = [1, 2, 4, 9, 10, 11, 12, 15, 16, 19, 20, 21] + * e = a.chunk_while {|i, j| j == i + 1 } + * e.each {|array| p array } * - * Increasing (non-decreasing) subsequence can be chunked as follows: + * Output: * - * a = [0, 9, 2, 2, 3, 2, 7, 5, 9, 5] - * p a.chunk_while {|i, j| i <= j }.to_a - * #=> [[0, 9], [2, 2, 3], [2, 7], [5, 9], [5]] + * [1, 2] + * [4] + * [9, 10, 11, 12] + * [15, 16] + * [19, 20, 21] * - * Adjacent evens and odds can be chunked as follows: - * (Enumerable#chunk is another way to do it.) - * - * a = [7, 5, 9, 2, 0, 7, 9, 4, 2, 0] - * p a.chunk_while {|i, j| i.even? == j.even? }.to_a - * #=> [[7, 5, 9], [2, 0], [7, 9], [4, 2, 0]] - * - * Enumerable#slice_when does the same, except splitting when the block - * returns true instead of false. */ static VALUE enum_chunk_while(VALUE enumerable) @@ -3824,9 +4283,9 @@ enum_chunk_while(VALUE enumerable) pred = rb_block_proc(); enumerator = rb_obj_alloc(rb_cEnumerator); - rb_ivar_set(enumerator, rb_intern("slicewhen_enum"), enumerable); - rb_ivar_set(enumerator, rb_intern("slicewhen_pred"), pred); - rb_ivar_set(enumerator, rb_intern("slicewhen_inverted"), Qtrue); + rb_ivar_set(enumerator, id_slicewhen_enum, enumerable); + rb_ivar_set(enumerator, id_slicewhen_pred, pred); + rb_ivar_set(enumerator, id_slicewhen_inverted, Qtrue); rb_block_call(enumerator, idInitialize, 0, 0, slicewhen_i, enumerator); return enumerator; @@ -3841,122 +4300,141 @@ struct enum_sum_memo { }; static void -sum_iter(VALUE i, struct enum_sum_memo *memo) +sum_iter_normalize_memo(struct enum_sum_memo *memo) { - const int unused = (assert(memo != NULL), 0); + assert(FIXABLE(memo->n)); + memo->v = rb_fix_plus(LONG2FIX(memo->n), memo->v); + memo->n = 0; - long n = memo->n; - VALUE v = memo->v; - VALUE r = memo->r; - double f = memo->f; - double c = memo->c; + switch (TYPE(memo->r)) { + case T_RATIONAL: memo->v = rb_rational_plus(memo->r, memo->v); break; + case T_UNDEF: break; + default: UNREACHABLE; /* or ...? */ + } + memo->r = Qundef; +} - if (memo->block_given) - i = rb_yield(i); +static void +sum_iter_fixnum(VALUE i, struct enum_sum_memo *memo) +{ + memo->n += FIX2LONG(i); /* should not overflow long type */ + if (! FIXABLE(memo->n)) { + memo->v = rb_big_plus(LONG2NUM(memo->n), memo->v); + memo->n = 0; + } +} - if (memo->float_value) - goto float_value; +static void +sum_iter_bignum(VALUE i, struct enum_sum_memo *memo) +{ + memo->v = rb_big_plus(i, memo->v); +} - if (FIXNUM_P(v) || RB_TYPE_P(v, T_BIGNUM) || RB_TYPE_P(v, T_RATIONAL)) { - if (FIXNUM_P(i)) { - n += FIX2LONG(i); /* should not overflow long type */ - if (!FIXABLE(n)) { - v = rb_big_plus(LONG2NUM(n), v); - n = 0; - } - } - else if (RB_TYPE_P(i, T_BIGNUM)) - v = rb_big_plus(i, v); - else if (RB_TYPE_P(i, T_RATIONAL)) { - if (r == Qundef) - r = i; - else - r = rb_rational_plus(r, i); - } - else { - if (n != 0) { - v = rb_fix_plus(LONG2FIX(n), v); - n = 0; - } - if (r != Qundef) { - /* r can be an Integer when mathn is loaded */ - if (FIXNUM_P(r)) - v = rb_fix_plus(r, v); - else if (RB_TYPE_P(r, T_BIGNUM)) - v = rb_big_plus(r, v); - else - v = rb_rational_plus(r, v); - r = Qundef; - } - if (RB_FLOAT_TYPE_P(i)) { - f = NUM2DBL(v); - c = 0.0; - memo->float_value = 1; - goto float_value; - } - else - goto some_value; - } +static void +sum_iter_rational(VALUE i, struct enum_sum_memo *memo) +{ + if (memo->r == Qundef) { + memo->r = i; } - else if (RB_FLOAT_TYPE_P(v)) { - /* - * Kahan-Babuska balancing compensated summation algorithm - * See http://link.springer.com/article/10.1007/s00607-005-0139-x - */ - double x, t; - - float_value: - if (RB_FLOAT_TYPE_P(i)) - x = RFLOAT_VALUE(i); - else if (FIXNUM_P(i)) - x = FIX2LONG(i); - else if (RB_TYPE_P(i, T_BIGNUM)) - x = rb_big2dbl(i); - else if (RB_TYPE_P(i, T_RATIONAL)) - x = rb_num2dbl(i); - else { - v = DBL2NUM(f); - memo->float_value = 0; - goto some_value; - } + else { + memo->r = rb_rational_plus(memo->r, i); + } +} - if (isnan(f)) return; - if (isnan(x)) { - memo->v = i; - memo->f = x; - return; - } - if (isinf(x)) { - if (isinf(f) && signbit(x) != signbit(f)) { - memo->f = NAN; - memo->v = DBL2NUM(f); - } - else { - memo->f = x; - memo->v = i; - } - return; +static void +sum_iter_some_value(VALUE i, struct enum_sum_memo *memo) +{ + memo->v = rb_funcallv(memo->v, idPLUS, 1, &i); +} + +static void +sum_iter_Kahan_Babuska(VALUE i, struct enum_sum_memo *memo) +{ + /* + * Kahan-Babuska balancing compensated summation algorithm + * See https://link.springer.com/article/10.1007/s00607-005-0139-x + */ + double x; + + switch (TYPE(i)) { + case T_FLOAT: x = RFLOAT_VALUE(i); break; + case T_FIXNUM: x = FIX2LONG(i); break; + case T_BIGNUM: x = rb_big2dbl(i); break; + case T_RATIONAL: x = rb_num2dbl(i); break; + default: + memo->v = DBL2NUM(memo->f); + memo->float_value = 0; + sum_iter_some_value(i, memo); + return; + } + + double f = memo->f; + + if (isnan(f)) { + return; + } + else if (! isfinite(x)) { + if (isinf(x) && isinf(f) && signbit(x) != signbit(f)) { + i = DBL2NUM(f); + x = nan(""); } - if (isinf(f)) return; + memo->v = i; + memo->f = x; + return; + } + else if (isinf(f)) { + return; + } - t = f + x; - if (fabs(f) >= fabs(x)) - c += ((f - t) + x); - else - c += ((x - t) + f); - f = t; + double c = memo->c; + double t = f + x; + + if (fabs(f) >= fabs(x)) { + c += ((f - t) + x); } else { - some_value: - v = rb_funcallv(v, idPLUS, 1, &i); + c += ((x - t) + f); } + f = t; - memo->v = v; - memo->n = n; - memo->r = r; memo->f = f; memo->c = c; - (void)unused; +} + +static void +sum_iter(VALUE i, struct enum_sum_memo *memo) +{ + assert(memo != NULL); + if (memo->block_given) { + i = rb_yield(i); + } + + if (memo->float_value) { + sum_iter_Kahan_Babuska(i, memo); + } + else switch (TYPE(memo->v)) { + default: sum_iter_some_value(i, memo); return; + case T_FLOAT: sum_iter_Kahan_Babuska(i, memo); return; + case T_FIXNUM: + case T_BIGNUM: + case T_RATIONAL: + switch (TYPE(i)) { + case T_FIXNUM: sum_iter_fixnum(i, memo); return; + case T_BIGNUM: sum_iter_bignum(i, memo); return; + case T_RATIONAL: sum_iter_rational(i, memo); return; + case T_FLOAT: + sum_iter_normalize_memo(memo); + memo->f = NUM2DBL(memo->v); + memo->c = 0.0; + memo->float_value = 1; + sum_iter_Kahan_Babuska(i, memo); + return; + default: + sum_iter_normalize_memo(memo); + sum_iter_some_value(i, memo); + return; + } + } } static VALUE @@ -4005,36 +4483,35 @@ int_range_sum(VALUE beg, VALUE end, int excl, VALUE init) } /* - * call-seq: - * enum.sum(init=0) -> number - * enum.sum(init=0) {|e| expr } -> number - * - * Returns the sum of elements in an Enumerable. + * call-seq: + * sum(initial_value = 0) -> number + * sum(initial_value = 0) {|element| ... } -> object * - * If a block is given, the block is applied to each element - * before addition. + * With no block given, + * returns the sum of +initial_value+ and the elements: * - * If enum is empty, it returns init. + * (1..100).sum # => 5050 + * (1..100).sum(1) # => 5051 + * ('a'..'d').sum('foo') # => "fooabcd" * - * For example: + * Generally, the sum is computed using methods + and +each+; + * for performance optimizations, those methods may not be used, + * and so any redefinition of those methods may not have effect here. * - * { 1 => 10, 2 => 20 }.sum {|k, v| k * v } #=> 50 - * (1..10).sum #=> 55 - * (1..10).sum {|v| v * 2 } #=> 110 - * ('a'..'z').sum #=> TypeError + * One such optimization: When possible, computes using Gauss's summation + * formula n(n+1)/2: * - * This method can be used for non-numeric objects by - * explicit init argument. + * 100 * (100 + 1) / 2 # => 5050 * - * { 1 => 10, 2 => 20 }.sum([]) #=> [1, 10, 2, 20] - * "a\nb\nc".each_line.lazy.map(&:chomp).sum("") #=> "abc" + * With a block given, calls the block with each element; + * returns the sum of +initial_value+ and the block return values: * - * If the method is applied to an Integer range without a block, - * the sum is not done by iteration, but instead using Gauss's summation - * formula. + * (1..4).sum {|i| i*i } # => 30 + * (1..4).sum(100) {|i| i*i } # => 130 + * h = {a: 0, b: 1, c: 2, d: 3, e: 4, f: 5} + * h.sum {|key, value| value.odd? ? value : 0 } # => 9 + * ('a'..'f').sum('x') {|c| c < 'd' ? c : '' } # => "xabc" * - * Enumerable#sum method may not respect method redefinition of "+" - * methods such as Integer#+, or "each" methods such as Range#each. */ static VALUE enum_sum(int argc, VALUE* argv, VALUE obj) @@ -4059,8 +4536,8 @@ enum_sum(int argc, VALUE* argv, VALUE obj) if (RTEST(rb_range_values(obj, &beg, &end, &excl))) { if (!memo.block_given && !memo.float_value && - (FIXNUM_P(beg) || RB_TYPE_P(beg, T_BIGNUM)) && - (FIXNUM_P(end) || RB_TYPE_P(end, T_BIGNUM))) { + (FIXNUM_P(beg) || RB_BIGNUM_TYPE_P(beg)) && + (FIXNUM_P(end) || RB_BIGNUM_TYPE_P(end))) { return int_range_sum(beg, end, excl, memo.v); } } @@ -4078,13 +4555,7 @@ enum_sum(int argc, VALUE* argv, VALUE obj) if (memo.n != 0) memo.v = rb_fix_plus(LONG2FIX(memo.n), memo.v); if (memo.r != Qundef) { - /* r can be an Integer when mathn is loaded */ - if (FIXNUM_P(memo.r)) - memo.v = rb_fix_plus(memo.r, memo.v); - else if (RB_TYPE_P(memo.r, T_BIGNUM)) - memo.v = rb_big_plus(memo.r, memo.v); - else - memo.v = rb_rational_plus(memo.r, memo.v); + memo.v = rb_rational_plus(memo.r, memo.v); } return memo.v; } @@ -4108,12 +4579,23 @@ uniq_iter(RB_BLOCK_CALL_FUNC_ARGLIST(i, hash)) /* * call-seq: - * enum.uniq -> new_ary - * enum.uniq { |item| ... } -> new_ary + * uniq -> array + * uniq {|element| ... } -> array + * + * With no block, returns a new array containing only unique elements; + * the array has no two elements +e0+ and +e1+ such that e0.eql?(e1): + * + * %w[a b c c b a a b c].uniq # => ["a", "b", "c"] + * [0, 1, 2, 2, 1, 0, 0, 1, 2].uniq # => [0, 1, 2] * - * Returns a new array by removing duplicate values in +self+. + * With a block, returns a new array containing only for which the block + * returns a unique value: + * + * a = [0, 1, 2, 3, 4, 5, 5, 4, 3, 2, 1] + * a.uniq {|i| i.even? ? i : 0 } # => [0, 2, 4] + * a = %w[a b c d e e d c b a a b c d e] + a.uniq {|c| c < 'c' } # => ["a", "c"] * - * See also Array#uniq. */ static VALUE @@ -4130,22 +4612,196 @@ enum_uniq(VALUE obj) return ret; } +static VALUE +compact_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)) +{ + ENUM_WANT_SVALUE(); + + if (!NIL_P(i)) { + rb_ary_push(ary, i); + } + return Qnil; +} + +/* + * call-seq: + * compact -> array + * + * Returns an array of all non-+nil+ elements: + * + * a = [nil, 0, nil, 'a', false, nil, false, nil, 'a', nil, 0, nil] + * a.compact # => [0, "a", false, false, "a", 0] + * + */ + +static VALUE +enum_compact(VALUE obj) +{ + VALUE ary; + + ary = rb_ary_new(); + rb_block_call(obj, id_each, 0, 0, compact_i, ary); + + return ary; +} + + /* - * The Enumerable mixin provides collection classes with several - * traversal and searching methods, and with the ability to sort. The - * class must provide a method #each, which yields - * successive members of the collection. If Enumerable#max, #min, or - * #sort is used, the objects in the collection must also implement a - * meaningful <=> operator, as these methods rely on an - * ordering between members of the collection. + * == What's Here + * + * \Module \Enumerable provides methods that are useful to a collection class for: + * - {Querying}[#module-Enumerable-label-Methods+for+Querying] + * - {Fetching}[#module-Enumerable-label-Methods+for+Fetching] + * - {Searching}[#module-Enumerable-label-Methods+for+Searching] + * - {Sorting}[#module-Enumerable-label-Methods+for+Sorting] + * - {Iterating}[#module-Enumerable-label-Methods+for+Iterating] + * - {And more....}[#module-Enumerable-label-Other+Methods] + * + * === Methods for Querying + * + * These methods return information about the \Enumerable other than the elements themselves: + * + * #include?, #member?:: Returns +true+ if self == object, +false+ otherwise. + * #all?:: Returns +true+ if all elements meet a specified criterion; +false+ otherwise. + * #any?:: Returns +true+ if any element meets a specified criterion; +false+ otherwise. + * #none?:: Returns +true+ if no element meets a specified criterion; +false+ otherwise. + * #one?:: Returns +true+ if exactly one element meets a specified criterion; +false+ otherwise. + * #count:: Returns the count of elements, + * based on an argument or block criterion, if given. + * #tally:: Returns a new \Hash containing the counts of occurrences of each element. + * + * === Methods for Fetching + * + * These methods return entries from the \Enumerable, without modifying it: + * + * Leading, trailing, or all elements: + * #entries, #to_a:: Returns all elements. + * #first:: Returns the first element or leading elements. + * #take:: Returns a specified number of leading elements. + * #drop:: Returns a specified number of trailing elements. + * #take_while:: Returns leading elements as specified by the given block. + * #drop_while:: Returns trailing elements as specified by the given block. + * + * Minimum and maximum value elements: + * #min:: Returns the elements whose values are smallest among the elements, + * as determined by <=> or a given block. + * #max:: Returns the elements whose values are largest among the elements, + * as determined by <=> or a given block. + * #minmax:: Returns a 2-element \Array containing the smallest and largest elements. + * #min_by:: Returns the smallest element, as determined by the given block. + * #max_by:: Returns the largest element, as determined by the given block. + * #minmax_by:: Returns the smallest and largest elements, as determined by the given block. + * + * Groups, slices, and partitions: + * #group_by:: Returns a \Hash that partitions the elements into groups. + * #partition:: Returns elements partitioned into two new Arrays, as determined by the given block. + * #slice_after:: Returns a new \Enumerator whose entries are a partition of +self+, + based either on a given +object+ or a given block. + * #slice_before:: Returns a new \Enumerator whose entries are a partition of +self+, + based either on a given +object+ or a given block. + * #slice_when:: Returns a new \Enumerator whose entries are a partition of +self+ + based on the given block. + * #chunk:: Returns elements organized into chunks as specified by the given block. + * #chunk_while:: Returns elements organized into chunks as specified by the given block. + * + * === Methods for Searching and Filtering + * + * These methods return elements that meet a specified criterion. + * + * #find, #detect:: Returns an element selected by the block. + * #find_all, #filter, #select:: Returns elements selected by the block. + * #find_index:: Returns the index of an element selected by a given object or block. + * #reject:: Returns elements not rejected by the block. + * #uniq:: Returns elements that are not duplicates. + * + * === Methods for Sorting + * + * These methods return elements in sorted order. + * + * #sort:: Returns the elements, sorted by <=> or the given block. + * #sort_by:: Returns the elements, sorted by the given block. + * + * === Methods for Iterating + * + * #each_entry:: Calls the block with each successive element + * (slightly different from #each). + * #each_with_index:: Calls the block with each successive element and its index. + * #each_with_object:: Calls the block with each successive element and a given object. + * #each_slice:: Calls the block with successive non-overlapping slices. + * #each_cons:: Calls the block with successive overlapping slices. + * (different from #each_slice). + * #reverse_each:: Calls the block with each successive element, in reverse order. + * + * === Other Methods + * + * #map, #collect:: Returns objects returned by the block. + * #filter_map:: Returns truthy objects returned by the block. + * #flat_map, #collect_concat:: Returns flattened objects returned by the block. + * #grep:: Returns elements selected by a given object + * or objects returned by a given block. + * #grep_v:: Returns elements selected by a given object + * or objects returned by a given block. + * #reduce, #inject:: Returns the object formed by combining all elements. + * #sum:: Returns the sum of the elements, using method +++. + * #zip:: Combines each element with elements from other enumerables; + * returns the n-tuples or calls the block with each. + * #cycle:: Calls the block with each element, cycling repeatedly. + * + * == Usage + * + * To use module \Enumerable in a collection class: + * + * - Include it: + * + * include Enumerable + * + * - Implement method #each + * which must yield successive elements of the collection. + * The method will be called by almost any \Enumerable method. + * + * Example: + * + * class Foo + * include Enumerable + * def each + * yield 1 + * yield 1, 2 + * yield + * end + * end + * Foo.new.each_entry{ |element| p element } + * + * Output: + * + * 1 + * [1, 2] + * nil + * + * == \Enumerable in Ruby Core Classes + * Some Ruby classes include \Enumerable: + * - Array + * - Dir + * - Hash + * - IO + * - Range + * - Set + * - Struct + * Virtually all methods in \Enumerable call method +#each+ in the including class: + * - Hash#each yields the next key-value pair as a 2-element \Array. + * - Struct#each yields the next name-value pair as a 2-element \Array. + * - For the other classes above, +#each+ yields the next object from the collection. + * + * == About the Examples + * The example code snippets for the \Enumerable methods: + * - Always show the use of one or more \Array-like classes (often \Array itself). + * - Sometimes show the use of a \Hash-like class. + * For some methods, though, the usage would not make sense, + * and so it is not shown. Example: #tally would find exactly one of each \Hash entry. */ void Init_Enumerable(void) { -#undef rb_intern -#define rb_intern(str) rb_intern_const(str) - rb_mEnumerable = rb_define_module("Enumerable"); rb_define_method(rb_mEnumerable, "to_a", enum_to_a, -1); @@ -4173,7 +4829,7 @@ Init_Enumerable(void) rb_define_method(rb_mEnumerable, "reduce", enum_inject, -1); rb_define_method(rb_mEnumerable, "partition", enum_partition, 0); rb_define_method(rb_mEnumerable, "group_by", enum_group_by, 0); - rb_define_method(rb_mEnumerable, "tally", enum_tally, 0); + rb_define_method(rb_mEnumerable, "tally", enum_tally, -1); rb_define_method(rb_mEnumerable, "first", enum_first, -1); rb_define_method(rb_mEnumerable, "all?", enum_all, -1); rb_define_method(rb_mEnumerable, "any?", enum_any, -1); @@ -4206,6 +4862,20 @@ Init_Enumerable(void) rb_define_method(rb_mEnumerable, "chunk_while", enum_chunk_while, 0); rb_define_method(rb_mEnumerable, "sum", enum_sum, -1); rb_define_method(rb_mEnumerable, "uniq", enum_uniq, 0); - - id_next = rb_intern("next"); + rb_define_method(rb_mEnumerable, "compact", enum_compact, 0); + + id__alone = rb_intern_const("_alone"); + id__separator = rb_intern_const("_separator"); + id_chunk_categorize = rb_intern_const("chunk_categorize"); + id_chunk_enumerable = rb_intern_const("chunk_enumerable"); + id_next = rb_intern_const("next"); + id_sliceafter_enum = rb_intern_const("sliceafter_enum"); + id_sliceafter_pat = rb_intern_const("sliceafter_pat"); + id_sliceafter_pred = rb_intern_const("sliceafter_pred"); + id_slicebefore_enumerable = rb_intern_const("slicebefore_enumerable"); + id_slicebefore_sep_pat = rb_intern_const("slicebefore_sep_pat"); + id_slicebefore_sep_pred = rb_intern_const("slicebefore_sep_pred"); + id_slicewhen_enum = rb_intern_const("slicewhen_enum"); + id_slicewhen_inverted = rb_intern_const("slicewhen_inverted"); + id_slicewhen_pred = rb_intern_const("slicewhen_pred"); } diff --git a/ruby/enumerator.c b/ruby/enumerator.c index 9d0547da0..be469ee38 100644 --- a/ruby/enumerator.c +++ b/ruby/enumerator.c @@ -12,14 +12,23 @@ ************************************************/ -#include "ruby/ruby.h" -#include "internal.h" -#include "id.h" +#include "ruby/internal/config.h" #ifdef HAVE_FLOAT_H #include #endif +#include "id.h" +#include "internal.h" +#include "internal/enumerator.h" +#include "internal/error.h" +#include "internal/hash.h" +#include "internal/imemo.h" +#include "internal/numeric.h" +#include "internal/range.h" +#include "internal/rational.h" +#include "ruby/ruby.h" + /* * Document-class: Enumerator * @@ -73,6 +82,14 @@ * puts e.next # => 3 * puts e.next # raises StopIteration * + * Note that enumeration sequence by +next+, +next_values+, +peek+ and + * +peek_values+ do not affect other non-external + * enumeration methods, unless the underlying iteration method itself has + * side-effect, e.g. IO#each_line. + * + * Moreover, implementation typically uses fibers so performance could be + * slower and exception stacktraces different than expected. + * * You can use this to implement an internal iterator as follows: * * def ext_each(e) @@ -376,8 +393,6 @@ enumerator_allocate(VALUE klass) return enum_obj; } -#define PASS_KW_SPLAT (rb_empty_keyword_given_p() ? RB_PASS_EMPTY_KEYWORDS : rb_keyword_given_p()) - static VALUE enumerator_init(VALUE enum_obj, VALUE obj, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *size_fn, VALUE size, int kw_splat) { @@ -405,15 +420,31 @@ enumerator_init(VALUE enum_obj, VALUE obj, VALUE meth, int argc, const VALUE *ar return enum_obj; } +static VALUE +convert_to_feasible_size_value(VALUE obj) +{ + if (NIL_P(obj)) { + return obj; + } + else if (rb_respond_to(obj, id_call)) { + return obj; + } + else if (RB_FLOAT_TYPE_P(obj) && RFLOAT_VALUE(obj) == HUGE_VAL) { + return obj; + } + else { + return rb_to_int(obj); + } +} + /* * call-seq: * Enumerator.new(size = nil) { |yielder| ... } - * Enumerator.new(obj, method = :each, *args) * * Creates a new Enumerator object, which can be used as an * Enumerable. * - * In the first form, iteration is defined by the given block, in + * Iteration is defined by the given block, in * which a "yielder" object, given as block parameter, can be used to * yield a value by calling the +yield+ method (aliased as <<): * @@ -430,52 +461,16 @@ enumerator_init(VALUE enum_obj, VALUE obj, VALUE meth, int argc, const VALUE *ar * The optional parameter can be used to specify how to calculate the size * in a lazy fashion (see Enumerator#size). It can either be a value or * a callable object. - * - * In the deprecated second form, a generated Enumerator iterates over the - * given object using the given method with the given arguments passed. - * - * Use of this form is discouraged. Use Object#enum_for or Object#to_enum - * instead. - * - * e = Enumerator.new(ObjectSpace, :each_object) - * #-> ObjectSpace.enum_for(:each_object) - * - * e.select { |obj| obj.is_a?(Class) } # => array of all classes - * */ static VALUE enumerator_initialize(int argc, VALUE *argv, VALUE obj) { - VALUE recv, meth = sym_each; - VALUE size = Qnil; - int kw_splat = 0; - - if (rb_block_given_p()) { - rb_check_arity(argc, 0, 1); - recv = generator_init(generator_allocate(rb_cGenerator), rb_block_proc()); - if (argc) { - if (NIL_P(argv[0]) || rb_respond_to(argv[0], id_call) || - (RB_TYPE_P(argv[0], T_FLOAT) && RFLOAT_VALUE(argv[0]) == HUGE_VAL)) { - size = argv[0]; - } - else { - size = rb_to_int(argv[0]); - } - argc = 0; - } - } - else { - rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS); - rb_warn_deprecated("Enumerator.new without a block", "Object#to_enum"); - recv = *argv++; - if (--argc) { - meth = *argv++; - --argc; - } - kw_splat = PASS_KW_SPLAT; - } + VALUE iter = rb_block_proc(); + VALUE recv = generator_init(generator_allocate(rb_cGenerator), iter); + VALUE arg0 = rb_check_arity(argc, 0, 1) ? argv[0] : Qnil; + VALUE size = convert_to_feasible_size_value(arg0); - return enumerator_init(obj, recv, meth, argc, argv, 0, size, kw_splat); + return enumerator_init(obj, recv, sym_each, 0, 0, 0, size, false); } /* :nodoc: */ @@ -522,27 +517,25 @@ static VALUE lazy_to_enum_i(VALUE self, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *size_fn, int kw_splat); VALUE -rb_enumeratorize_with_size(VALUE obj, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *size_fn) +rb_enumeratorize_with_size_kw(VALUE obj, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *size_fn, int kw_splat) { - /* Similar effect as calling obj.to_enum, i.e. dispatching to either - Kernel#to_enum vs Lazy#to_enum */ - if (RTEST(rb_obj_is_kind_of(obj, rb_cLazy))) - return lazy_to_enum_i(obj, meth, argc, argv, size_fn, PASS_KW_SPLAT); - else - return enumerator_init(enumerator_allocate(rb_cEnumerator), - obj, meth, argc, argv, size_fn, Qnil, PASS_KW_SPLAT); + VALUE base_class = rb_cEnumerator; + + if (RTEST(rb_obj_is_kind_of(obj, rb_cLazy))) { + base_class = rb_cLazy; + } + else if (RTEST(rb_obj_is_kind_of(obj, rb_cEnumChain))) { + obj = enumerator_init(enumerator_allocate(rb_cEnumerator), obj, sym_each, 0, 0, 0, Qnil, false); + } + + return enumerator_init(enumerator_allocate(base_class), + obj, meth, argc, argv, size_fn, Qnil, kw_splat); } VALUE -rb_enumeratorize_with_size_kw(VALUE obj, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *size_fn, int kw_splat) +rb_enumeratorize_with_size(VALUE obj, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *size_fn) { - /* Similar effect as calling obj.to_enum, i.e. dispatching to either - Kernel#to_enum vs Lazy#to_enum */ - if (RTEST(rb_obj_is_kind_of(obj, rb_cLazy))) - return lazy_to_enum_i(obj, meth, argc, argv, size_fn, kw_splat); - else - return enumerator_init(enumerator_allocate(rb_cEnumerator), - obj, meth, argc, argv, size_fn, Qnil, kw_splat); + return rb_enumeratorize_with_size_kw(obj, meth, argc, argv, size_fn, rb_keyword_given_p()); } static VALUE @@ -716,9 +709,9 @@ enumerator_with_object_i(RB_BLOCK_CALL_FUNC_ARGLIST(val, memo)) * puts "#{string}: #{x}" * end * - * # => foo:0 - * # => foo:1 - * # => foo:2 + * # => foo: 0 + * # => foo: 1 + * # => foo: 2 */ static VALUE enumerator_with_object(VALUE obj, VALUE memo) @@ -798,6 +791,8 @@ get_next_values(VALUE obj, struct enumerator *e) * internal position forward. When the position reached at the end, * StopIteration is raised. * + * See class-level notes about external iterators. + * * This method can be used to distinguish yield and yield * nil. * @@ -831,10 +826,6 @@ get_next_values(VALUE obj, struct enumerator *e) * # yield nil [nil] nil * # yield [1, 2] [[1, 2]] [1, 2] * - * Note that +next_values+ does not affect other non-external enumeration - * methods unless underlying iteration method itself has side-effect, e.g. - * IO#each_line. - * */ static VALUE @@ -888,9 +879,7 @@ ary2sv(VALUE args, int dup) * p e.next #=> 3 * p e.next #raises StopIteration * - * Note that enumeration sequence by +next+ does not affect other non-external - * enumeration methods, unless the underlying iteration methods itself has - * side-effect, e.g. IO#each_line. + * See class-level notes about external iterators. * */ @@ -920,6 +909,8 @@ enumerator_peek_values(VALUE obj) * doesn't move the internal position forward. If the position is already at * the end, StopIteration is raised. * + * See class-level notes about external iterators. + * * === Example * * o = Object.new @@ -954,6 +945,8 @@ enumerator_peek_values_m(VALUE obj) * position forward. If the position is already at the end, StopIteration * is raised. * + * See class-level notes about external iterators. + * * === Example * * a = [1,2,3] @@ -1351,7 +1344,7 @@ yielder_yield_push(VALUE obj, VALUE arg) } /* - * Returns a Proc object that takes an argument and yields it. + * Returns a Proc object that takes arguments and yields them. * * This method is implemented so that a Yielder object can be directly * passed to another method as a block argument. @@ -1539,17 +1532,7 @@ lazyenum_size(VALUE self, VALUE args, VALUE eobj) return enum_size(self); } -static VALUE -lazy_size(VALUE self) -{ - return enum_size(rb_ivar_get(self, id_receiver)); -} - -static VALUE -lazy_receiver_size(VALUE generator, VALUE args, VALUE lazy) -{ - return lazy_size(lazy); -} +#define lazy_receiver_size lazy_map_size static VALUE lazy_init_iterator(RB_BLOCK_CALL_FUNC_ARGLIST(val, m)) @@ -1591,24 +1574,47 @@ lazy_init_block_i(RB_BLOCK_CALL_FUNC_ARGLIST(val, m)) #define LAZY_MEMO_BREAK_P(memo) ((memo)->memo_flags & LAZY_MEMO_BREAK) #define LAZY_MEMO_PACKED_P(memo) ((memo)->memo_flags & LAZY_MEMO_PACKED) #define LAZY_MEMO_SET_BREAK(memo) ((memo)->memo_flags |= LAZY_MEMO_BREAK) +#define LAZY_MEMO_RESET_BREAK(memo) ((memo)->memo_flags &= ~LAZY_MEMO_BREAK) #define LAZY_MEMO_SET_VALUE(memo, value) MEMO_V2_SET(memo, value) #define LAZY_MEMO_SET_PACKED(memo) ((memo)->memo_flags |= LAZY_MEMO_PACKED) #define LAZY_MEMO_RESET_PACKED(memo) ((memo)->memo_flags &= ~LAZY_MEMO_PACKED) +static VALUE lazy_yielder_result(struct MEMO *result, VALUE yielder, VALUE procs_array, VALUE memos, long i); + static VALUE lazy_init_yielder(RB_BLOCK_CALL_FUNC_ARGLIST(_, m)) { VALUE yielder = RARRAY_AREF(m, 0); VALUE procs_array = RARRAY_AREF(m, 1); VALUE memos = rb_attr_get(yielder, id_memo); - long i = 0; struct MEMO *result; - int cont = 1; - result = MEMO_NEW(Qnil, rb_enum_values_pack(argc, argv), + result = MEMO_NEW(m, rb_enum_values_pack(argc, argv), argc > 1 ? LAZY_MEMO_PACKED : 0); + return lazy_yielder_result(result, yielder, procs_array, memos, 0); +} + +static VALUE +lazy_yielder_yield(struct MEMO *result, long memo_index, int argc, const VALUE *argv) +{ + VALUE m = result->v1; + VALUE yielder = RARRAY_AREF(m, 0); + VALUE procs_array = RARRAY_AREF(m, 1); + VALUE memos = rb_attr_get(yielder, id_memo); + LAZY_MEMO_SET_VALUE(result, rb_enum_values_pack(argc, argv)); + if (argc > 1) + LAZY_MEMO_SET_PACKED(result); + else + LAZY_MEMO_RESET_PACKED(result); + return lazy_yielder_result(result, yielder, procs_array, memos, memo_index); +} + +static VALUE +lazy_yielder_result(struct MEMO *result, VALUE yielder, VALUE procs_array, VALUE memos, long i) +{ + int cont = 1; - for (i = 0; i < RARRAY_LEN(procs_array); i++) { + for (; i < RARRAY_LEN(procs_array); i++) { VALUE proc = RARRAY_AREF(procs_array, i); struct proc_entry *entry = proc_entry_ptr(proc); if (!(*entry->fn->proc)(proc, result, memos, i)) { @@ -1703,13 +1709,13 @@ lazy_generator_init(VALUE enumerator, VALUE procs) * * # This will fetch all URLs before selecting * # necessary data - * URLS.map { |u| JSON.parse(open(u).read) } + * URLS.map { |u| JSON.parse(URI.open(u).read) } * .select { |data| data.key?('stats') } * .first(5) * * # This will fetch URLs one-by-one, only till * # there is enough data to satisfy the condition - * URLS.lazy.map { |u| JSON.parse(open(u).read) } + * URLS.lazy.map { |u| JSON.parse(URI.open(u).read) } * .select { |data| data.key?('stats') } * .first(5) * @@ -1803,6 +1809,7 @@ lazy_set_args(VALUE lazy, VALUE args) } } +#if 0 static VALUE lazy_set_method(VALUE lazy, VALUE args, rb_enumerator_size_func *size_fn) { @@ -1811,6 +1818,7 @@ lazy_set_method(VALUE lazy, VALUE args, rb_enumerator_size_func *size_fn) e->size_fn = size_fn; return lazy; } +#endif static VALUE lazy_add_method(VALUE obj, int argc, VALUE *argv, VALUE args, VALUE memo, @@ -1884,7 +1892,7 @@ lazy_add_method(VALUE obj, int argc, VALUE *argv, VALUE args, VALUE memo, static VALUE enumerable_lazy(VALUE obj) { - VALUE result = lazy_to_enum_i(obj, sym_each, 0, 0, lazyenum_size, PASS_KW_SPLAT); + VALUE result = lazy_to_enum_i(obj, sym_each, 0, 0, lazyenum_size, rb_keyword_given_p()); /* Qfalse indicates that the Enumerator::Lazy has no method name */ rb_ivar_set(result, id_method, Qfalse); return result; @@ -1932,7 +1940,7 @@ lazy_to_enum(int argc, VALUE *argv, VALUE self) if (RTEST((super_meth = rb_hash_aref(lazy_use_super_method, meth)))) { meth = super_meth; } - lazy = lazy_to_enum_i(self, meth, argc, argv, 0, PASS_KW_SPLAT); + lazy = lazy_to_enum_i(self, meth, argc, argv, 0, rb_keyword_given_p()); if (rb_block_given_p()) { enumerator_ptr(lazy)->size = rb_block_proc(); } @@ -2022,58 +2030,58 @@ lazy_map(VALUE obj) return lazy_add_method(obj, 0, 0, Qnil, Qnil, &lazy_map_funcs); } +struct flat_map_i_arg { + struct MEMO *result; + long index; +}; + static VALUE -lazy_flat_map_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, yielder)) +lazy_flat_map_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, y)) { - VALUE arg = rb_enum_values_pack(argc, argv); + struct flat_map_i_arg *arg = (struct flat_map_i_arg *)y; - return rb_funcallv(yielder, idLTLT, 1, &arg); + return lazy_yielder_yield(arg->result, arg->index, argc, argv); } -static VALUE -lazy_flat_map_each(VALUE obj, VALUE yielder) +static struct MEMO * +lazy_flat_map_proc(VALUE proc_entry, struct MEMO *result, VALUE memos, long memo_index) { - rb_block_call(obj, id_each, 0, 0, lazy_flat_map_i, yielder); - return Qnil; -} + VALUE value = lazyenum_yield_values(proc_entry, result); + VALUE ary = 0; + const long proc_index = memo_index + 1; + int break_p = LAZY_MEMO_BREAK_P(result); -static VALUE -lazy_flat_map_to_ary(VALUE obj, VALUE yielder) -{ - VALUE ary = rb_check_array_type(obj); - if (NIL_P(ary)) { - rb_funcall(yielder, idLTLT, 1, obj); + if (RB_TYPE_P(value, T_ARRAY)) { + ary = value; } - else { - long i; - for (i = 0; i < RARRAY_LEN(ary); i++) { - rb_funcall(yielder, idLTLT, 1, RARRAY_AREF(ary, i)); - } + else if (rb_respond_to(value, id_force) && rb_respond_to(value, id_each)) { + struct flat_map_i_arg arg = {.result = result, .index = proc_index}; + LAZY_MEMO_RESET_BREAK(result); + rb_block_call(value, id_each, 0, 0, lazy_flat_map_i, (VALUE)&arg); + if (break_p) LAZY_MEMO_SET_BREAK(result); + return 0; } - return Qnil; -} -static VALUE -lazy_flat_map_proc(RB_BLOCK_CALL_FUNC_ARGLIST(val, m)) -{ - VALUE result = rb_yield_values2(argc - 1, &argv[1]); - if (RB_TYPE_P(result, T_ARRAY)) { - long i; - for (i = 0; i < RARRAY_LEN(result); i++) { - rb_funcall(argv[0], idLTLT, 1, RARRAY_AREF(result, i)); - } - } - else { - if (rb_respond_to(result, id_force) && rb_respond_to(result, id_each)) { - lazy_flat_map_each(result, argv[0]); - } - else { - lazy_flat_map_to_ary(result, argv[0]); - } + if (ary || !NIL_P(ary = rb_check_array_type(value))) { + long i; + LAZY_MEMO_RESET_BREAK(result); + for (i = 0; i + 1 < RARRAY_LEN(ary); i++) { + const VALUE argv = RARRAY_AREF(ary, i); + lazy_yielder_yield(result, proc_index, 1, &argv); + } + if (break_p) LAZY_MEMO_SET_BREAK(result); + if (i >= RARRAY_LEN(ary)) return 0; + value = RARRAY_AREF(ary, i); } - return Qnil; + LAZY_MEMO_SET_VALUE(result, value); + LAZY_MEMO_RESET_PACKED(result); + return result; } +static const lazyenum_funcs lazy_flat_map_funcs = { + lazy_flat_map_proc, 0, +}; + /* * call-seq: * lazy.collect_concat { |obj| block } -> a_lazy_enumerator @@ -2104,9 +2112,7 @@ lazy_flat_map(VALUE obj) rb_raise(rb_eArgError, "tried to call lazy flat_map without a block"); } - return lazy_set_method(rb_block_call(rb_cLazy, id_new, 1, &obj, - lazy_flat_map_proc, 0), - Qnil, 0); + return lazy_add_method(obj, 0, 0, Qnil, Qnil, &lazy_flat_map_funcs); } static struct MEMO * @@ -2308,58 +2314,59 @@ next_stopped(VALUE obj, VALUE _) return Qnil; } -static VALUE -lazy_zip_arrays_func(RB_BLOCK_CALL_FUNC_ARGLIST(val, arrays)) +static struct MEMO * +lazy_zip_arrays_func(VALUE proc_entry, struct MEMO *result, VALUE memos, long memo_index) { - VALUE yielder, ary, memo; - long i, count; - - yielder = argv[0]; - memo = rb_attr_get(yielder, id_memo); - count = NIL_P(memo) ? 0 : NUM2LONG(memo); + struct proc_entry *entry = proc_entry_ptr(proc_entry); + VALUE ary, arrays = entry->memo; + VALUE memo = rb_ary_entry(memos, memo_index); + long i, count = NIL_P(memo) ? 0 : NUM2LONG(memo); ary = rb_ary_new2(RARRAY_LEN(arrays) + 1); - rb_ary_push(ary, argv[1]); + rb_ary_push(ary, result->memo_value); for (i = 0; i < RARRAY_LEN(arrays); i++) { rb_ary_push(ary, rb_ary_entry(RARRAY_AREF(arrays, i), count)); } - rb_funcall(yielder, idLTLT, 1, ary); - rb_ivar_set(yielder, id_memo, LONG2NUM(++count)); - return Qnil; + LAZY_MEMO_SET_VALUE(result, ary); + LAZY_MEMO_SET_PACKED(result); + rb_ary_store(memos, memo_index, LONG2NUM(++count)); + return result; } -static VALUE -lazy_zip_func(RB_BLOCK_CALL_FUNC_ARGLIST(val, zip_args)) +static struct MEMO * +lazy_zip_func(VALUE proc_entry, struct MEMO *result, VALUE memos, long memo_index) { - VALUE yielder, ary, arg, v; + struct proc_entry *entry = proc_entry_ptr(proc_entry); + VALUE arg = rb_ary_entry(memos, memo_index); + VALUE zip_args = entry->memo; + VALUE ary, v; long i; - yielder = argv[0]; - arg = rb_attr_get(yielder, id_memo); if (NIL_P(arg)) { arg = rb_ary_new2(RARRAY_LEN(zip_args)); for (i = 0; i < RARRAY_LEN(zip_args); i++) { rb_ary_push(arg, rb_funcall(RARRAY_AREF(zip_args, i), id_to_enum, 0)); } - rb_ivar_set(yielder, id_memo, arg); + rb_ary_store(memos, memo_index, arg); } ary = rb_ary_new2(RARRAY_LEN(arg) + 1); - v = Qnil; - if (--argc > 0) { - ++argv; - v = argc > 1 ? rb_ary_new_from_values(argc, argv) : *argv; - } - rb_ary_push(ary, v); + rb_ary_push(ary, result->memo_value); for (i = 0; i < RARRAY_LEN(arg); i++) { v = rb_rescue2(call_next, RARRAY_AREF(arg, i), next_stopped, 0, rb_eStopIteration, (VALUE)0); rb_ary_push(ary, v); } - rb_funcall(yielder, idLTLT, 1, ary); - return Qnil; + LAZY_MEMO_SET_VALUE(result, ary); + LAZY_MEMO_SET_PACKED(result); + return result; } +static const lazyenum_funcs lazy_zip_funcs[] = { + {lazy_zip_func, lazy_receiver_size,}, + {lazy_zip_arrays_func, lazy_receiver_size,}, +}; + /* * call-seq: * lazy.zip(arg, ...) -> lazy_enumerator @@ -2373,7 +2380,7 @@ lazy_zip(int argc, VALUE *argv, VALUE obj) { VALUE ary, v; long i; - rb_block_call_func *func = lazy_zip_arrays_func; + const lazyenum_funcs *funcs = &lazy_zip_funcs[1]; if (rb_block_given_p()) { return rb_call_super(argc, argv); @@ -2390,15 +2397,13 @@ lazy_zip(int argc, VALUE *argv, VALUE obj) } } ary = rb_ary_new4(argc, argv); - func = lazy_zip_func; + funcs = &lazy_zip_funcs[0]; break; } rb_ary_push(ary, v); } - return lazy_set_method(rb_block_call(rb_cLazy, id_new, 1, &obj, - func, ary), - ary, lazy_receiver_size); + return lazy_add_method(obj, 0, 0, ary, ary, funcs); } static struct MEMO * @@ -2646,6 +2651,30 @@ lazy_uniq(VALUE obj) return lazy_add_method(obj, 0, 0, Qnil, Qnil, funcs); } +static struct MEMO * +lazy_compact_proc(VALUE proc_entry, struct MEMO *result, VALUE memos, long memo_index) +{ + if (NIL_P(result->memo_value)) return 0; + return result; +} + +static const lazyenum_funcs lazy_compact_funcs = { + lazy_compact_proc, 0, +}; + +/* + * call-seq: + * lazy.compact -> lazy_enumerator + * + * Like Enumerable#compact, but chains operation to be lazy-evaluated. + */ + +static VALUE +lazy_compact(VALUE obj) +{ + return lazy_add_method(obj, 0, 0, Qnil, Qnil, &lazy_compact_funcs); +} + static struct MEMO * lazy_with_index_proc(VALUE proc_entry, struct MEMO* result, VALUE memos, long memo_index) { @@ -2662,7 +2691,8 @@ lazy_with_index_proc(VALUE proc_entry, struct MEMO* result, VALUE memos, long me if (entry->proc) { rb_proc_call_with_block(entry->proc, 2, argv, Qnil); LAZY_MEMO_RESET_PACKED(result); - } else { + } + else { LAZY_MEMO_SET_VALUE(result, rb_ary_new_from_values(2, argv)); LAZY_MEMO_SET_PACKED(result); } @@ -2670,8 +2700,14 @@ lazy_with_index_proc(VALUE proc_entry, struct MEMO* result, VALUE memos, long me return result; } +static VALUE +lazy_with_index_size(VALUE proc, VALUE receiver) +{ + return receiver; +} + static const lazyenum_funcs lazy_with_index_funcs = { - lazy_with_index_proc, 0, + lazy_with_index_proc, lazy_with_index_size, }; /* @@ -2679,7 +2715,8 @@ static const lazyenum_funcs lazy_with_index_funcs = { * lazy.with_index(offset = 0) {|(*args), idx| block } * lazy.with_index(offset = 0) * - * If a block is given, iterates the given block for each element + * If a block is given, returns a lazy enumerator that will + * iterate over the given block for each element * with an index, which starts from +offset+, and returns a * lazy enumerator that yields the same values (without the index). * @@ -2917,6 +2954,8 @@ producer_each_stop(VALUE dummy, VALUE exc) return rb_attr_get(exc, id_result); } +NORETURN(static VALUE producer_each_i(VALUE obj)); + static VALUE producer_each_i(VALUE obj) { @@ -2929,7 +2968,8 @@ producer_each_i(VALUE obj) if (init == Qundef) { curr = Qnil; - } else { + } + else { rb_yield(init); curr = init; } @@ -2939,7 +2979,7 @@ producer_each_i(VALUE obj) rb_yield(curr); } - return Qnil; + UNREACHABLE_RETURN(Qnil); } /* :nodoc: */ @@ -2978,7 +3018,7 @@ producer_size(VALUE obj, VALUE args, VALUE eobj) * enclosing_section = ancestors.find { |n| n.type == :section } * * Using ::produce together with Enumerable methods like Enumerable#detect, - * Enumerable#slice, Enumerable#take_while can provide Enumerator-based alternatives + * Enumerable#slice_after, Enumerable#take_while can provide Enumerator-based alternatives * for +while+ and +until+ cycles: * * # Find next Tuesday @@ -3104,6 +3144,21 @@ enum_chain_initialize(VALUE obj, VALUE enums) return obj; } +static VALUE +new_enum_chain(VALUE enums) +{ + long i; + VALUE obj = enum_chain_initialize(enum_chain_allocate(rb_cEnumChain), enums); + + for (i = 0; i < RARRAY_LEN(enums); i++) { + if (RTEST(rb_obj_is_kind_of(RARRAY_AREF(enums, i), rb_cLazy))) { + return enumerable_lazy(obj); + } + } + + return obj; +} + /* :nodoc: */ static VALUE enum_chain_init_copy(VALUE obj, VALUE orig) @@ -3132,7 +3187,7 @@ enum_chain_total_size(VALUE enums) for (i = 0; i < RARRAY_LEN(enums); i++) { VALUE size = enum_size(RARRAY_AREF(enums, i)); - if (NIL_P(size) || (RB_TYPE_P(size, T_FLOAT) && isinf(NUM2DBL(size)))) { + if (NIL_P(size) || (RB_FLOAT_TYPE_P(size) && isinf(NUM2DBL(size)))) { return size; } if (!RB_INTEGER_TYPE_P(size)) { @@ -3273,8 +3328,7 @@ enum_chain(int argc, VALUE *argv, VALUE obj) { VALUE enums = rb_ary_new_from_values(1, &obj); rb_ary_cat(enums, argv, argc); - - return enum_chain_initialize(enum_chain_allocate(rb_cEnumChain), enums); + return new_enum_chain(enums); } /* @@ -3290,9 +3344,7 @@ enum_chain(int argc, VALUE *argv, VALUE obj) static VALUE enumerator_plus(VALUE obj, VALUE eobj) { - VALUE enums = rb_ary_new_from_args(2, obj, eobj); - - return enum_chain_initialize(enum_chain_allocate(rb_cEnumChain), enums); + return new_enum_chain(rb_ary_new_from_args(2, obj, eobj)); } /* @@ -3302,6 +3354,9 @@ enumerator_plus(VALUE obj, VALUE eobj) * that is a representation of sequences of numbers with common difference. * Instances of this class can be generated by the Range#step and Numeric#step * methods. + * + * The class can be used for slicing Array (see Array#slice) or custom + * collections. */ VALUE @@ -3310,11 +3365,11 @@ rb_arith_seq_new(VALUE obj, VALUE meth, int argc, VALUE const *argv, VALUE beg, VALUE end, VALUE step, int excl) { VALUE aseq = enumerator_init(enumerator_allocate(rb_cArithSeq), - obj, meth, argc, argv, size_fn, Qnil, PASS_KW_SPLAT); + obj, meth, argc, argv, size_fn, Qnil, rb_keyword_given_p()); rb_ivar_set(aseq, id_begin, beg); rb_ivar_set(aseq, id_end, end); rb_ivar_set(aseq, id_step, step); - rb_ivar_set(aseq, id_exclude_end, excl ? Qtrue : Qfalse); + rb_ivar_set(aseq, id_exclude_end, RBOOL(excl)); return aseq; } @@ -3380,17 +3435,53 @@ rb_arithmetic_sequence_extract(VALUE obj, rb_arithmetic_sequence_components_t *c component->exclude_end = arith_seq_exclude_end_p(obj); return 1; } - else if (rb_obj_is_kind_of(obj, rb_cRange)) { - component->begin = RANGE_BEG(obj); - component->end = RANGE_END(obj); + else if (rb_range_values(obj, &component->begin, &component->end, &component->exclude_end)) { component->step = INT2FIX(1); - component->exclude_end = RTEST(RANGE_EXCL(obj)); return 1; } return 0; } +VALUE +rb_arithmetic_sequence_beg_len_step(VALUE obj, long *begp, long *lenp, long *stepp, long len, int err) +{ + RBIMPL_NONNULL_ARG(begp); + RBIMPL_NONNULL_ARG(lenp); + RBIMPL_NONNULL_ARG(stepp); + + rb_arithmetic_sequence_components_t aseq; + if (!rb_arithmetic_sequence_extract(obj, &aseq)) { + return Qfalse; + } + + long step = NIL_P(aseq.step) ? 1 : NUM2LONG(aseq.step); + *stepp = step; + + if (step < 0) { + VALUE tmp = aseq.begin; + aseq.begin = aseq.end; + aseq.end = tmp; + } + + if (err == 0 && (step < -1 || step > 1)) { + if (rb_range_component_beg_len(aseq.begin, aseq.end, aseq.exclude_end, begp, lenp, len, 1) == Qtrue) { + if (*begp > len) + goto out_of_range; + if (*lenp > len) + goto out_of_range; + return Qtrue; + } + } + else { + return rb_range_component_beg_len(aseq.begin, aseq.end, aseq.exclude_end, begp, lenp, len, err); + } + + out_of_range: + rb_raise(rb_eRangeError, "%+"PRIsVALUE" out of range", obj); + return Qnil; +} + /* * call-seq: * aseq.first -> num or nil @@ -3535,6 +3626,88 @@ arith_seq_first(int argc, VALUE *argv, VALUE self) return rb_call_super(argc, argv); } +static inline VALUE +num_plus(VALUE a, VALUE b) +{ + if (RB_INTEGER_TYPE_P(a)) { + return rb_int_plus(a, b); + } + else if (RB_FLOAT_TYPE_P(a)) { + return rb_float_plus(a, b); + } + else if (RB_TYPE_P(a, T_RATIONAL)) { + return rb_rational_plus(a, b); + } + else { + return rb_funcallv(a, '+', 1, &b); + } +} + +static inline VALUE +num_minus(VALUE a, VALUE b) +{ + if (RB_INTEGER_TYPE_P(a)) { + return rb_int_minus(a, b); + } + else if (RB_FLOAT_TYPE_P(a)) { + return rb_float_minus(a, b); + } + else if (RB_TYPE_P(a, T_RATIONAL)) { + return rb_rational_minus(a, b); + } + else { + return rb_funcallv(a, '-', 1, &b); + } +} + +static inline VALUE +num_mul(VALUE a, VALUE b) +{ + if (RB_INTEGER_TYPE_P(a)) { + return rb_int_mul(a, b); + } + else if (RB_FLOAT_TYPE_P(a)) { + return rb_float_mul(a, b); + } + else if (RB_TYPE_P(a, T_RATIONAL)) { + return rb_rational_mul(a, b); + } + else { + return rb_funcallv(a, '*', 1, &b); + } +} + +static inline VALUE +num_idiv(VALUE a, VALUE b) +{ + VALUE q; + if (RB_INTEGER_TYPE_P(a)) { + q = rb_int_idiv(a, b); + } + else if (RB_FLOAT_TYPE_P(a)) { + q = rb_float_div(a, b); + } + else if (RB_TYPE_P(a, T_RATIONAL)) { + q = rb_rational_div(a, b); + } + else { + q = rb_funcallv(a, idDiv, 1, &b); + } + + if (RB_INTEGER_TYPE_P(q)) { + return q; + } + else if (RB_FLOAT_TYPE_P(q)) { + return rb_float_floor(q, 0); + } + else if (RB_TYPE_P(q, T_RATIONAL)) { + return rb_rational_floor(q, 0); + } + else { + return rb_funcall(q, rb_intern("floor"), 0); + } +} + /* * call-seq: * aseq.last -> num or nil @@ -3559,7 +3732,7 @@ arith_seq_last(int argc, VALUE *argv, VALUE self) b = arith_seq_begin(self); s = arith_seq_step(self); - len_1 = rb_int_idiv(rb_int_minus(e, b), s); + len_1 = num_idiv(num_minus(e, b), s); if (rb_num_negative_int_p(len_1)) { if (argc == 0) { return Qnil; @@ -3567,9 +3740,9 @@ arith_seq_last(int argc, VALUE *argv, VALUE self) return rb_ary_new_capa(0); } - last = rb_int_plus(b, rb_int_mul(s, len_1)); + last = num_plus(b, num_mul(s, len_1)); if ((last_is_adjusted = arith_seq_exclude_end_p(self) && rb_equal(last, e))) { - last = rb_int_minus(last, s); + last = num_minus(last, s); } if (argc == 0) { @@ -3778,57 +3951,28 @@ arith_seq_each(VALUE self) return self; } - len_1 = rb_int_idiv(rb_int_minus(e, c), s); - last = rb_int_plus(c, rb_int_mul(s, len_1)); + len_1 = num_idiv(num_minus(e, c), s); + last = num_plus(c, num_mul(s, len_1)); if (x && rb_equal(last, e)) { - last = rb_int_minus(last, s); + last = num_minus(last, s); } if (rb_num_negative_int_p(s)) { while (NUM_GE(c, last)) { rb_yield(c); - c = rb_int_plus(c, s); + c = num_plus(c, s); } } else { while (NUM_GE(last, c)) { rb_yield(c); - c = rb_int_plus(c, s); + c = num_plus(c, s); } } return self; } -static double -arith_seq_float_step_size(double beg, double end, double step, int excl) -{ - double const epsilon = DBL_EPSILON; - double n, err; - - if (step == 0) { - return HUGE_VAL; - } - n = (end - beg) / step; - err = (fabs(beg) + fabs(end) + fabs(end - beg)) / fabs(step) * epsilon; - if (isinf(step)) { - return step > 0 ? beg <= end : beg >= end; - } - if (err > 0.5) err = 0.5; - if (excl) { - if (n <= 0) return 0; - if (n < 1) - n = 0; - else - n = floor(n - err); - } - else { - if (n < 0) return 0; - n = floor(n + err); - } - return n + 1; -} - /* * call-seq: * aseq.size -> num or nil @@ -3862,9 +4006,9 @@ arith_seq_size(VALUE self) ee = NUM2DBL(e); } - n = arith_seq_float_step_size(NUM2DBL(b), ee, NUM2DBL(s), x); + n = ruby_float_step_size(NUM2DBL(b), ee, NUM2DBL(s), x); if (isinf(n)) return DBL2NUM(n); - if (POSFIXABLE(n)) return LONG2FIX(n); + if (POSFIXABLE(n)) return LONG2FIX((long)n); return rb_dbl2big(n); } @@ -3896,10 +4040,11 @@ arith_seq_size(VALUE self) return len; } +#define sym(name) ID2SYM(rb_intern_const(name)) void InitVM_Enumerator(void) { - ID id_private = rb_intern("private"); + ID id_private = rb_intern_const("private"); rb_define_method(rb_mKernel, "to_enum", obj_to_enum, -1); rb_define_method(rb_mKernel, "enum_for", obj_to_enum, -1); @@ -3949,23 +4094,23 @@ InitVM_Enumerator(void) rb_define_alias(rb_cLazy, "_enumerable_uniq", "uniq"); rb_define_private_method(rb_cLazy, "_enumerable_with_index", enumerator_with_index, -1); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_map"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_collect"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_flat_map"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_collect_concat"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_select"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_find_all"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_filter"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_filter_map"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_reject"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_grep"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_grep_v"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_zip"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_take"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_take_while"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_drop"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_drop_while"))); - rb_funcall(rb_cLazy, id_private, 1, ID2SYM(rb_intern("_enumerable_uniq"))); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_map")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_collect")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_flat_map")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_collect_concat")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_select")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_find_all")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_filter")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_filter_map")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_reject")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_grep")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_grep_v")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_zip")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_take")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_take_while")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_drop")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_drop_while")); + rb_funcall(rb_cLazy, id_private, 1, sym("_enumerable_uniq")); rb_define_method(rb_cLazy, "initialize", lazy_initialize, -1); rb_define_method(rb_cLazy, "to_enum", lazy_to_enum, -1); @@ -3994,27 +4139,28 @@ InitVM_Enumerator(void) rb_define_method(rb_cLazy, "slice_when", lazy_super, -1); rb_define_method(rb_cLazy, "chunk_while", lazy_super, -1); rb_define_method(rb_cLazy, "uniq", lazy_uniq, 0); + rb_define_method(rb_cLazy, "compact", lazy_compact, 0); rb_define_method(rb_cLazy, "with_index", lazy_with_index, -1); lazy_use_super_method = rb_hash_new_with_size(18); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("map")), ID2SYM(rb_intern("_enumerable_map"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("collect")), ID2SYM(rb_intern("_enumerable_collect"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("flat_map")), ID2SYM(rb_intern("_enumerable_flat_map"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("collect_concat")), ID2SYM(rb_intern("_enumerable_collect_concat"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("select")), ID2SYM(rb_intern("_enumerable_select"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("find_all")), ID2SYM(rb_intern("_enumerable_find_all"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("filter")), ID2SYM(rb_intern("_enumerable_filter"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("filter_map")), ID2SYM(rb_intern("_enumerable_filter_map"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("reject")), ID2SYM(rb_intern("_enumerable_reject"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("grep")), ID2SYM(rb_intern("_enumerable_grep"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("grep_v")), ID2SYM(rb_intern("_enumerable_grep_v"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("zip")), ID2SYM(rb_intern("_enumerable_zip"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("take")), ID2SYM(rb_intern("_enumerable_take"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("take_while")), ID2SYM(rb_intern("_enumerable_take_while"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("drop")), ID2SYM(rb_intern("_enumerable_drop"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("drop_while")), ID2SYM(rb_intern("_enumerable_drop_while"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("uniq")), ID2SYM(rb_intern("_enumerable_uniq"))); - rb_hash_aset(lazy_use_super_method, ID2SYM(rb_intern("with_index")), ID2SYM(rb_intern("_enumerable_with_index"))); + rb_hash_aset(lazy_use_super_method, sym("map"), sym("_enumerable_map")); + rb_hash_aset(lazy_use_super_method, sym("collect"), sym("_enumerable_collect")); + rb_hash_aset(lazy_use_super_method, sym("flat_map"), sym("_enumerable_flat_map")); + rb_hash_aset(lazy_use_super_method, sym("collect_concat"), sym("_enumerable_collect_concat")); + rb_hash_aset(lazy_use_super_method, sym("select"), sym("_enumerable_select")); + rb_hash_aset(lazy_use_super_method, sym("find_all"), sym("_enumerable_find_all")); + rb_hash_aset(lazy_use_super_method, sym("filter"), sym("_enumerable_filter")); + rb_hash_aset(lazy_use_super_method, sym("filter_map"), sym("_enumerable_filter_map")); + rb_hash_aset(lazy_use_super_method, sym("reject"), sym("_enumerable_reject")); + rb_hash_aset(lazy_use_super_method, sym("grep"), sym("_enumerable_grep")); + rb_hash_aset(lazy_use_super_method, sym("grep_v"), sym("_enumerable_grep_v")); + rb_hash_aset(lazy_use_super_method, sym("zip"), sym("_enumerable_zip")); + rb_hash_aset(lazy_use_super_method, sym("take"), sym("_enumerable_take")); + rb_hash_aset(lazy_use_super_method, sym("take_while"), sym("_enumerable_take_while")); + rb_hash_aset(lazy_use_super_method, sym("drop"), sym("_enumerable_drop")); + rb_hash_aset(lazy_use_super_method, sym("drop_while"), sym("_enumerable_drop_while")); + rb_hash_aset(lazy_use_super_method, sym("uniq"), sym("_enumerable_uniq")); + rb_hash_aset(lazy_use_super_method, sym("with_index"), sym("_enumerable_with_index")); rb_obj_freeze(lazy_use_super_method); rb_gc_register_mark_object(lazy_use_super_method); @@ -4062,6 +4208,11 @@ InitVM_Enumerator(void) rb_define_method(rb_cEnumChain, "size", enum_chain_size, 0); rb_define_method(rb_cEnumChain, "rewind", enum_chain_rewind, 0); rb_define_method(rb_cEnumChain, "inspect", enum_chain_inspect, 0); + rb_undef_method(rb_cEnumChain, "feed"); + rb_undef_method(rb_cEnumChain, "next"); + rb_undef_method(rb_cEnumChain, "next_values"); + rb_undef_method(rb_cEnumChain, "peek"); + rb_undef_method(rb_cEnumChain, "peek_values"); /* ArithmeticSequence */ rb_cArithSeq = rb_define_class_under(rb_cEnumerator, "ArithmeticSequence", rb_cEnumerator); @@ -4083,28 +4234,28 @@ InitVM_Enumerator(void) rb_provide("enumerator.so"); /* for backward compatibility */ } +#undef sym -#undef rb_intern void Init_Enumerator(void) { - id_rewind = rb_intern("rewind"); - id_new = rb_intern("new"); - id_next = rb_intern("next"); - id_result = rb_intern("result"); - id_receiver = rb_intern("receiver"); - id_arguments = rb_intern("arguments"); - id_memo = rb_intern("memo"); - id_method = rb_intern("method"); - id_force = rb_intern("force"); - id_to_enum = rb_intern("to_enum"); - id_begin = rb_intern("begin"); - id_end = rb_intern("end"); - id_step = rb_intern("step"); - id_exclude_end = rb_intern("exclude_end"); + id_rewind = rb_intern_const("rewind"); + id_new = rb_intern_const("new"); + id_next = rb_intern_const("next"); + id_result = rb_intern_const("result"); + id_receiver = rb_intern_const("receiver"); + id_arguments = rb_intern_const("arguments"); + id_memo = rb_intern_const("memo"); + id_method = rb_intern_const("method"); + id_force = rb_intern_const("force"); + id_to_enum = rb_intern_const("to_enum"); + id_begin = rb_intern_const("begin"); + id_end = rb_intern_const("end"); + id_step = rb_intern_const("step"); + id_exclude_end = rb_intern_const("exclude_end"); sym_each = ID2SYM(id_each); - sym_cycle = ID2SYM(rb_intern("cycle")); - sym_yield = ID2SYM(rb_intern("yield")); + sym_cycle = ID2SYM(rb_intern_const("cycle")); + sym_yield = ID2SYM(rb_intern_const("yield")); InitVM(Enumerator); } diff --git a/ruby/error.c b/ruby/error.c index 9557d8552..a870d0200 100644 --- a/ruby/error.c +++ b/ruby/error.c @@ -9,29 +9,43 @@ **********************************************************************/ -#include "ruby/encoding.h" -#include "ruby/st.h" -#include "internal.h" -#include "ruby_assert.h" -#include "vm_core.h" -#include "builtin.h" +#include "ruby/internal/config.h" -#include +#include #include +#include + #ifdef HAVE_STDLIB_H -#include +# include #endif -#include + #ifdef HAVE_UNISTD_H -#include +# include #endif #if defined __APPLE__ # include #endif +#include "internal.h" +#include "internal/error.h" +#include "internal/eval.h" +#include "internal/hash.h" +#include "internal/io.h" +#include "internal/load.h" +#include "internal/object.h" +#include "internal/symbol.h" +#include "internal/thread.h" +#include "internal/variable.h" +#include "ruby/encoding.h" +#include "ruby/st.h" +#include "ruby_assert.h" +#include "vm_core.h" + +#include "builtin.h" + /*! - * \defgroup exception Exception handlings + * \addtogroup exception * \{ */ @@ -51,6 +65,7 @@ VALUE rb_iseqw_local_variables(VALUE iseqval); VALUE rb_iseqw_new(const rb_iseq_t *); int rb_str_end_with_asciichar(VALUE str, int c); +long rb_backtrace_length_limit = -1; VALUE rb_eEAGAIN; VALUE rb_eEWOULDBLOCK; VALUE rb_eEINPROGRESS; @@ -58,6 +73,13 @@ static VALUE rb_mWarning; static VALUE rb_cWarningBuffer; static ID id_warn; +static ID id_category; +static ID id_deprecated; +static ID id_experimental; +static VALUE sym_category; +static struct { + st_table *id2enum, *enum2id; +} warning_categories; extern const char ruby_description[]; @@ -86,6 +108,7 @@ err_position_0(char *buf, long len, const char *file, int line) } } +RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 5, 0) static VALUE err_vcatf(VALUE str, const char *pre, const char *file, int line, const char *fmt, va_list args) @@ -128,7 +151,9 @@ rb_syntax_error_append(VALUE exc, VALUE file, int line, int column, return exc; } -static unsigned int warning_disabled_categories; +static unsigned int warning_disabled_categories = ( + 1U << RB_WARN_CATEGORY_DEPRECATED | + 0); static unsigned int rb_warning_category_mask(VALUE category) @@ -139,18 +164,24 @@ rb_warning_category_mask(VALUE category) rb_warning_category_t rb_warning_category_from_name(VALUE category) { - rb_warning_category_t cat = RB_WARN_CATEGORY_NONE; + st_data_t cat_value; + ID cat_id; Check_Type(category, T_SYMBOL); - if (category == ID2SYM(rb_intern("deprecated"))) { - cat = RB_WARN_CATEGORY_DEPRECATED; - } - else if (category == ID2SYM(rb_intern("experimental"))) { - cat = RB_WARN_CATEGORY_EXPERIMENTAL; - } - else { + if (!(cat_id = rb_check_id(&category)) || + !st_lookup(warning_categories.id2enum, cat_id, &cat_value)) { rb_raise(rb_eArgError, "unknown category: %"PRIsVALUE, category); } - return cat; + return (rb_warning_category_t)cat_value; +} + +static VALUE +rb_warning_category_to_name(rb_warning_category_t category) +{ + st_data_t id; + if (!st_lookup(warning_categories.enum2id, category, &id)) { + rb_raise(rb_eArgError, "invalid category: %d", (int)category); + } + return id ? ID2SYM(id) : Qnil; } void @@ -167,7 +198,7 @@ rb_warning_category_enabled_p(rb_warning_category_t category) } /* - * call-seq + * call-seq: * Warning[category] -> true or false * * Returns the flag to show the warning messages for +category+. @@ -187,13 +218,11 @@ static VALUE rb_warning_s_aref(VALUE mod, VALUE category) { rb_warning_category_t cat = rb_warning_category_from_name(category); - if (rb_warning_category_enabled_p(cat)) - return Qtrue; - return Qfalse; + return RBOOL(rb_warning_category_enabled_p(cat)); } /* - * call-seq + * call-seq: * Warning[category] = flag -> flag * * Sets the warning flags for +category+. @@ -215,17 +244,31 @@ rb_warning_s_aset(VALUE mod, VALUE category, VALUE flag) /* * call-seq: - * warn(msg) -> nil + * warn(msg, category: nil) -> nil * * Writes warning message +msg+ to $stderr. This method is called by - * Ruby for all emitted warnings. + * Ruby for all emitted warnings. A +category+ may be included with + * the warning. + * + * See the documentation of the Warning module for how to customize this. */ static VALUE -rb_warning_s_warn(VALUE mod, VALUE str) +rb_warning_s_warn(int argc, VALUE *argv, VALUE mod) { + VALUE str; + VALUE opt; + VALUE category = Qnil; + + rb_scan_args(argc, argv, "1:", &str, &opt); + if (!NIL_P(opt)) rb_get_kwargs(opt, &id_category, 0, 1, &category); + Check_Type(str, T_STRING); rb_must_asciicompat(str); + if (!NIL_P(category)) { + rb_warning_category_t cat = rb_warning_category_from_name(category); + if (!rb_warning_category_enabled_p(cat)) return Qnil; + } rb_write_error_str(str); return Qnil; } @@ -238,11 +281,30 @@ rb_warning_s_warn(VALUE mod, VALUE str) * Warning.warn is called for all warnings issued by Ruby. * By default, warnings are printed to $stderr. * - * By overriding Warning.warn, you can change how warnings are - * handled by Ruby, either filtering some warnings, and/or outputting - * warnings somewhere other than $stderr. When Warning.warn is - * overridden, super can be called to get the default behavior of - * printing the warning to $stderr. + * Changing the behavior of Warning.warn is useful to customize how warnings are + * handled by Ruby, for instance by filtering some warnings, and/or outputting + * warnings somewhere other than $stderr. + * + * If you want to change the behavior of Warning.warn you should use + * +Warning.extend(MyNewModuleWithWarnMethod)+ and you can use `super` + * to get the default behavior of printing the warning to $stderr. + * + * Example: + * module MyWarningFilter + * def warn(message, category: nil, **kwargs) + * if /some warning I want to ignore/.match?(message) + * # ignore + * else + * super + * end + * end + * end + * Warning.extend MyWarningFilter + * + * You should never redefine Warning#warn (the instance method), as that will + * then no longer provide a way to use the default behavior. + * + * The +warning+ gem provides convenient ways to customize Warning.warn. */ static VALUE @@ -251,12 +313,40 @@ rb_warning_warn(VALUE mod, VALUE str) return rb_funcallv(mod, id_warn, 1, &str); } + +static int +rb_warning_warn_arity(void) +{ + const rb_method_entry_t *me = rb_method_entry(rb_singleton_class(rb_mWarning), id_warn); + return me ? rb_method_entry_arity(me) : 1; +} + +static VALUE +rb_warn_category(VALUE str, VALUE category) +{ + if (RUBY_DEBUG && !NIL_P(category)) { + rb_warning_category_from_name(category); + } + + if (rb_warning_warn_arity() == 1) { + return rb_warning_warn(rb_mWarning, str); + } + else { + VALUE args[2]; + args[0] = str; + args[1] = rb_hash_new(); + rb_hash_aset(args[1], sym_category, category); + return rb_funcallv_kw(rb_mWarning, id_warn, 2, args, RB_PASS_KEYWORDS); + } +} + static void rb_write_warning_str(VALUE str) { rb_warning_warn(rb_mWarning, str); } +RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 4, 0) static VALUE warn_vsprintf(rb_encoding *enc, const char *file, int line, const char *fmt, va_list args) { @@ -295,6 +385,21 @@ rb_compile_warning(const char *file, int line, const char *fmt, ...) rb_write_warning_str(str); } +void +rb_category_compile_warn(rb_warning_category_t category, const char *file, int line, const char *fmt, ...) +{ + VALUE str; + va_list args; + + if (NIL_P(ruby_verbose)) return; + + va_start(args, fmt); + str = warn_vsprintf(NULL, file, line, fmt, args); + va_end(args); + rb_warn_category(str, rb_warning_category_to_name(category)); +} + +RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 0) static VALUE warning_string(rb_encoding *enc, const char *fmt, va_list args) { @@ -319,6 +424,16 @@ rb_warn(const char *fmt, ...) } } +void +rb_category_warn(rb_warning_category_t category, const char *fmt, ...) +{ + if (!NIL_P(ruby_verbose)) { + with_warning_string(mesg, 0, fmt) { + rb_warn_category(mesg, rb_warning_category_to_name(category)); + } + } +} + void rb_enc_warn(rb_encoding *enc, const char *fmt, ...) { @@ -340,6 +455,17 @@ rb_warning(const char *fmt, ...) } } +/* rb_category_warning() reports only in verbose mode */ +void +rb_category_warning(rb_warning_category_t category, const char *fmt, ...) +{ + if (RTEST(ruby_verbose)) { + with_warning_string(mesg, 0, fmt) { + rb_warn_category(mesg, rb_warning_category_to_name(category)); + } + } +} + VALUE rb_warning_string(const char *fmt, ...) { @@ -360,20 +486,51 @@ rb_enc_warning(rb_encoding *enc, const char *fmt, ...) } #endif +static bool +deprecation_warning_enabled(void) +{ + if (NIL_P(ruby_verbose)) return false; + if (!rb_warning_category_enabled_p(RB_WARN_CATEGORY_DEPRECATED)) return false; + return true; +} + +static void +warn_deprecated(VALUE mesg, const char *removal, const char *suggest) +{ + rb_str_set_len(mesg, RSTRING_LEN(mesg) - 1); + rb_str_cat_cstr(mesg, " is deprecated"); + if (removal) { + rb_str_catf(mesg, " and will be removed in Ruby %s", removal); + } + if (suggest) rb_str_catf(mesg, "; use %s instead", suggest); + rb_str_cat_cstr(mesg, "\n"); + rb_warn_category(mesg, ID2SYM(id_deprecated)); +} + void rb_warn_deprecated(const char *fmt, const char *suggest, ...) { - if (NIL_P(ruby_verbose)) return; - if (!rb_warning_category_enabled_p(RB_WARN_CATEGORY_DEPRECATED)) return; + if (!deprecation_warning_enabled()) return; + va_list args; va_start(args, suggest); VALUE mesg = warning_string(0, fmt, args); va_end(args); - rb_str_set_len(mesg, RSTRING_LEN(mesg) - 1); - rb_str_cat_cstr(mesg, " is deprecated"); - if (suggest) rb_str_catf(mesg, "; use %s instead", suggest); - rb_str_cat_cstr(mesg, "\n"); - rb_write_warning_str(mesg); + + warn_deprecated(mesg, NULL, suggest); +} + +void +rb_warn_deprecated_to_remove(const char *removal, const char *fmt, const char *suggest, ...) +{ + if (!deprecation_warning_enabled()) return; + + va_list args; + va_start(args, suggest); + VALUE mesg = warning_string(0, fmt, args); + va_end(args); + + warn_deprecated(mesg, removal, suggest); } static inline int @@ -393,9 +550,10 @@ warning_write(int argc, VALUE *argv, VALUE buf) return buf; } -VALUE rb_ec_backtrace_location_ary(rb_execution_context_t *ec, long lev, long n); +VALUE rb_ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n, bool skip_internal); + static VALUE -rb_warn_m(rb_execution_context_t *ec, VALUE exc, VALUE msgs, VALUE uplevel) +rb_warn_m(rb_execution_context_t *ec, VALUE exc, VALUE msgs, VALUE uplevel, VALUE category) { VALUE location = Qnil; int argc = RARRAY_LENINT(msgs); @@ -408,7 +566,7 @@ rb_warn_m(rb_execution_context_t *ec, VALUE exc, VALUE msgs, VALUE uplevel) if (lev < 0) { rb_raise(rb_eArgError, "negative level (%ld)", lev); } - location = rb_ec_backtrace_location_ary(ec, lev + 1, 1); + location = rb_ec_backtrace_location_ary(ec, lev + 1, 1, TRUE); if (!NIL_P(location)) { location = rb_ary_entry(location, 0); } @@ -431,12 +589,18 @@ rb_warn_m(rb_execution_context_t *ec, VALUE exc, VALUE msgs, VALUE uplevel) rb_io_puts(argc, argv, str); RBASIC_SET_CLASS(str, rb_cString); } + + if (!NIL_P(category)) { + category = rb_to_symbol_type(category); + rb_warning_category_from_name(category); + } + if (exc == rb_mWarning) { rb_must_asciicompat(str); rb_write_error_str(str); } else { - rb_write_warning_str(str); + rb_warn_category(str, category); } } return Qnil; @@ -516,7 +680,7 @@ preface_dump(FILE *out) static const char msg[] = "" "-- Crash Report log information " "--------------------------------------------\n" - " See Crash Report log file under the one of following:\n" + " See Crash Report log file in one of the following locations:\n" # if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6 " * ~/Library/Logs/CrashReporter\n" " * /Library/Logs/CrashReporter\n" @@ -556,6 +720,7 @@ postscript_dump(FILE *out) bug_important_message(out, msg, msglen); } +RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 0) static void bug_report_begin_valist(FILE *out, const char *fmt, va_list args) { @@ -567,17 +732,6 @@ bug_report_begin_valist(FILE *out, const char *fmt, va_list args) snprintf(buf, sizeof(buf), "\n%s\n\n", ruby_description); fputs(buf, out); preface_dump(out); - -#if RUBY_DEVEL - const char *cmd = getenv("RUBY_ON_BUG"); - if (cmd) { - snprintf(buf, sizeof(buf), "%s %"PRI_PIDT_PREFIX"d", cmd, getpid()); - int r = system(buf); - if (r == -1) { - snprintf(buf, sizeof(buf), "Launching RUBY_ON_BUG command failed."); - } - } -#endif } #define bug_report_begin(out, fmt) do { \ @@ -630,18 +784,27 @@ die(void) abort(); } +RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 0) void -rb_bug(const char *fmt, ...) +rb_bug_without_die(const char *fmt, va_list args) { const char *file = NULL; int line = 0; if (GET_EC()) { - file = rb_source_location_cstr(&line); + file = rb_source_location_cstr(&line); } - report_bug(file, line, fmt, NULL); + report_bug_valist(file, line, fmt, NULL, args); +} +void +rb_bug(const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + rb_bug_without_die(fmt, args); + va_end(args); die(); } @@ -736,7 +899,7 @@ static const char builtin_types[][10] = { "Array", "Hash", "Struct", - "Bignum", + "Integer", "File", "Data", /* internal use: wrapped C pointers */ "MatchData", /* data of $~ */ @@ -747,14 +910,14 @@ static const char builtin_types[][10] = { "true", "false", "Symbol", /* :symbol */ - "Fixnum", + "Integer", "undef", /* internal use: #undef; should not happen */ "", /* 0x17 */ "", /* 0x18 */ "", /* 0x19 */ - "Memo", /* internal use: general memo */ - "Node", /* internal use: syntax tree node */ - "iClass", /* internal use: mixed-in module holder */ + "", /* internal use: general memo */ + "", /* internal use: syntax tree node */ + "", /* internal use: mixed-in module holder */ }; const char * @@ -767,6 +930,17 @@ rb_builtin_type_name(int t) return 0; } +static VALUE +displaying_class_of(VALUE x) +{ + switch (x) { + case Qfalse: return rb_fstring_cstr("false"); + case Qnil: return rb_fstring_cstr("nil"); + case Qtrue: return rb_fstring_cstr("true"); + default: return rb_obj_class(x); + } +} + static const char * builtin_class_name(VALUE x) { @@ -804,7 +978,7 @@ rb_builtin_class_name(VALUE x) return etype; } -NORETURN(static void unexpected_type(VALUE, int, int)); +COLDFUNC NORETURN(static void unexpected_type(VALUE, int, int)); #define UNDEF_LEAKED "undef leaked to the Ruby space" static void @@ -814,13 +988,8 @@ unexpected_type(VALUE x, int xt, int t) VALUE mesg, exc = rb_eFatal; if (tname) { - const char *cname = builtin_class_name(x); - if (cname) - mesg = rb_sprintf("wrong argument type %s (expected %s)", - cname, tname); - else - mesg = rb_sprintf("wrong argument type %"PRIsVALUE" (expected %s)", - rb_obj_class(x), tname); + mesg = rb_sprintf("wrong argument type %"PRIsVALUE" (expected %s)", + displaying_class_of(x), tname); exc = rb_eTypeError; } else if (xt > T_MASK && xt <= 0x3f) { @@ -838,12 +1007,20 @@ rb_check_type(VALUE x, int t) { int xt; - if (x == Qundef) { + if (RB_UNLIKELY(x == Qundef)) { rb_bug(UNDEF_LEAKED); } xt = TYPE(x); - if (xt != t || (xt == T_DATA && RTYPEDDATA_P(x))) { + if (xt != t || (xt == T_DATA && rbimpl_rtypeddata_p(x))) { + /* + * Typed data is not simple `T_DATA`, but in a sense an + * extension of `struct RVALUE`, which are incompatible with + * each other except when inherited. + * + * So it is not enough to just check `T_DATA`, it must be + * identified by its `type` using `Check_TypedStruct` instead. + */ unexpected_type(x, xt, t); } } @@ -851,7 +1028,7 @@ rb_check_type(VALUE x, int t) void rb_unexpected_type(VALUE x, int t) { - if (x == Qundef) { + if (RB_UNLIKELY(x == Qundef)) { rb_bug(UNDEF_LEAKED); } @@ -888,26 +1065,26 @@ rb_typeddata_is_instance_of(VALUE obj, const rb_data_type_t *data_type) void * rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type) { - const char *etype; + VALUE actual; if (!RB_TYPE_P(obj, T_DATA)) { - wrong_type: - etype = builtin_class_name(obj); - if (!etype) - rb_raise(rb_eTypeError, "wrong argument type %"PRIsVALUE" (expected %s)", - rb_obj_class(obj), data_type->wrap_struct_name); - wrong_datatype: - rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)", - etype, data_type->wrap_struct_name); - } - if (!RTYPEDDATA_P(obj)) { - goto wrong_type; + actual = displaying_class_of(obj); + } + else if (!RTYPEDDATA_P(obj)) { + actual = displaying_class_of(obj); } else if (!rb_typeddata_inherited_p(RTYPEDDATA_TYPE(obj), data_type)) { - etype = RTYPEDDATA_TYPE(obj)->wrap_struct_name; - goto wrong_datatype; + const char *name = RTYPEDDATA_TYPE(obj)->wrap_struct_name; + actual = rb_str_new_cstr(name); /* or rb_fstring_cstr? not sure... */ + } + else { + return DATA_PTR(obj); } - return DATA_PTR(obj); + + const char *expected = data_type->wrap_struct_name; + rb_raise(rb_eTypeError, "wrong argument type %"PRIsVALUE" (expected %s)", + actual, expected); + UNREACHABLE_RETURN(NULL); } /* exception classes */ @@ -933,6 +1110,7 @@ VALUE rb_eNotImpError; VALUE rb_eNoMemError; VALUE rb_cNameErrorMesg; VALUE rb_eNoMatchingPatternError; +VALUE rb_eNoMatchingPatternKeyError; VALUE rb_eScriptError; VALUE rb_eSyntaxError; @@ -945,7 +1123,7 @@ static VALUE rb_eNOERROR; ID ruby_static_id_cause; #define id_cause ruby_static_id_cause static ID id_message, id_backtrace; -static ID id_key, id_args, id_Errno, id_errno, id_i_path; +static ID id_key, id_matchee, id_args, id_Errno, id_errno, id_i_path; static ID id_receiver, id_recv, id_iseq, id_local_variables; static ID id_private_call_p, id_top, id_bottom; #define id_bt idBt @@ -986,7 +1164,8 @@ exc_init(VALUE exc, VALUE mesg) /* * call-seq: - * Exception.new(msg = nil) -> exception + * Exception.new(msg = nil) -> exception + * Exception.exception(msg = nil) -> exception * * Construct a new Exception object, optionally passing in * a message. @@ -1005,7 +1184,7 @@ exc_initialize(int argc, VALUE *argv, VALUE exc) * Document-method: exception * * call-seq: - * exc.exception(string) -> an_exception or exc + * exc.exception([string]) -> an_exception or exc * * With no argument, or if the argument is the same as the receiver, * return the receiver. Otherwise, create a new @@ -1065,7 +1244,7 @@ rb_get_message(VALUE exc) static VALUE exc_s_to_tty_p(VALUE self) { - return rb_stderr_tty_p() ? Qtrue : Qfalse; + return RBOOL(rb_stderr_tty_p()); } /* @@ -1105,8 +1284,8 @@ exc_full_message(int argc, VALUE *argv, VALUE exc) rb_get_kwargs(opt, kw, 0, kw_max_, args); switch (args[kw_highlight]) { default: - rb_raise(rb_eArgError, "expected true or false as " - "highlight: %+"PRIsVALUE, args[kw_highlight]); + rb_bool_expected(args[kw_highlight], "highlight"); + UNREACHABLE; case Qundef: args[kw_highlight] = Qnil; break; case Qtrue: case Qfalse: case Qnil: break; } @@ -1370,9 +1549,7 @@ exc_equal(VALUE exc, VALUE obj) if (!rb_equal(rb_attr_get(exc, id_mesg), mesg)) return Qfalse; - if (!rb_equal(exc_backtrace(exc), backtrace)) - return Qfalse; - return Qtrue; + return rb_equal(exc_backtrace(exc), backtrace); } /* @@ -1460,10 +1637,7 @@ exit_success_p(VALUE exc) if (NIL_P(status_val)) return Qtrue; status = NUM2INT(status_val); - if (WIFEXITED(status) && WEXITSTATUS(status) == EXIT_SUCCESS) - return Qtrue; - - return Qfalse; + return RBOOL(WIFEXITED(status) && WEXITSTATUS(status) == EXIT_SUCCESS); } static VALUE @@ -1636,7 +1810,7 @@ static VALUE nometh_err_init_attr(VALUE exc, VALUE args, int priv) { rb_ivar_set(exc, id_args, args); - rb_ivar_set(exc, id_private_call_p, priv ? Qtrue : Qfalse); + rb_ivar_set(exc, id_private_call_p, RBOOL(priv)); return exc; } @@ -1712,9 +1886,9 @@ static const rb_data_type_t name_err_mesg_data_type = { /* :nodoc: */ static VALUE -rb_name_err_mesg_new(VALUE mesg, VALUE recv, VALUE method) +rb_name_err_mesg_init(VALUE klass, VALUE mesg, VALUE recv, VALUE method) { - VALUE result = TypedData_Wrap_Struct(rb_cNameErrorMesg, &name_err_mesg_data_type, 0); + VALUE result = TypedData_Wrap_Struct(klass, &name_err_mesg_data_type, 0); VALUE *ptr = ALLOC_N(VALUE, NAME_ERR_MESG_COUNT); ptr[NAME_ERR_MESG__MESG] = mesg; @@ -1724,6 +1898,35 @@ rb_name_err_mesg_new(VALUE mesg, VALUE recv, VALUE method) return result; } +/* :nodoc: */ +static VALUE +rb_name_err_mesg_new(VALUE mesg, VALUE recv, VALUE method) +{ + return rb_name_err_mesg_init(rb_cNameErrorMesg, mesg, recv, method); +} + +/* :nodoc: */ +static VALUE +name_err_mesg_alloc(VALUE klass) +{ + return rb_name_err_mesg_init(klass, Qnil, Qnil, Qnil); +} + +/* :nodoc: */ +static VALUE +name_err_mesg_init_copy(VALUE obj1, VALUE obj2) +{ + VALUE *ptr1, *ptr2; + + if (obj1 == obj2) return obj1; + rb_obj_init_copy(obj1, obj2); + + TypedData_Get_Struct(obj1, VALUE, &name_err_mesg_data_type, ptr1); + TypedData_Get_Struct(obj2, VALUE, &name_err_mesg_data_type, ptr2); + MEMCPY(ptr1, ptr2, VALUE, NAME_ERR_MESG_COUNT); + return obj1; +} + /* :nodoc: */ static VALUE name_err_mesg_equal(VALUE obj1, VALUE obj2) @@ -1744,6 +1947,17 @@ name_err_mesg_equal(VALUE obj1, VALUE obj2) return Qtrue; } +/* :nodoc: */ +static VALUE +name_err_mesg_receiver_name(VALUE obj) +{ + if (RB_SPECIAL_CONST_P(obj)) return Qundef; + if (RB_BUILTIN_TYPE(obj) == T_MODULE || RB_BUILTIN_TYPE(obj) == T_CLASS) { + return rb_check_funcall(obj, rb_intern("name"), 0, 0); + } + return Qundef; +} + /* :nodoc: */ static VALUE name_err_mesg_to_str(VALUE obj) @@ -1772,10 +1986,14 @@ name_err_mesg_to_str(VALUE obj) d = FAKE_CSTR(&d_str, "false"); break; default: - d = rb_protect(rb_inspect, obj, &state); - if (state) + d = rb_protect(name_err_mesg_receiver_name, obj, &state); + if (state || d == Qundef || NIL_P(d)) + d = rb_protect(rb_inspect, obj, &state); + if (state) { rb_set_errinfo(Qnil); - if (NIL_P(d) || RSTRING_LEN(d) > 65) { + } + d = rb_check_string_type(d); + if (NIL_P(d)) { d = rb_any_to_s(obj); } singleton = (RSTRING_LEN(d) > 0 && RSTRING_PTR(d)[0] == '#'); @@ -1946,6 +2164,73 @@ key_err_initialize(int argc, VALUE *argv, VALUE self) return self; } +/* + * call-seq: + * no_matching_pattern_key_error.matchee -> object + * + * Return the matchee associated with this NoMatchingPatternKeyError exception. + */ + +static VALUE +no_matching_pattern_key_err_matchee(VALUE self) +{ + VALUE matchee; + + matchee = rb_ivar_lookup(self, id_matchee, Qundef); + if (matchee != Qundef) return matchee; + rb_raise(rb_eArgError, "no matchee is available"); +} + +/* + * call-seq: + * no_matching_pattern_key_error.key -> object + * + * Return the key caused this NoMatchingPatternKeyError exception. + */ + +static VALUE +no_matching_pattern_key_err_key(VALUE self) +{ + VALUE key; + + key = rb_ivar_lookup(self, id_key, Qundef); + if (key != Qundef) return key; + rb_raise(rb_eArgError, "no key is available"); +} + +/* + * call-seq: + * NoMatchingPatternKeyError.new(message=nil, matchee: nil, key: nil) -> no_matching_pattern_key_error + * + * Construct a new +NoMatchingPatternKeyError+ exception with the given message, + * matchee and key. + */ + +static VALUE +no_matching_pattern_key_err_initialize(int argc, VALUE *argv, VALUE self) +{ + VALUE options; + + rb_call_super(rb_scan_args(argc, argv, "01:", NULL, &options), argv); + + if (!NIL_P(options)) { + ID keywords[2]; + VALUE values[numberof(keywords)]; + int i; + keywords[0] = id_matchee; + keywords[1] = id_key; + rb_get_kwargs(options, keywords, 0, numberof(values), values); + for (i = 0; i < numberof(values); ++i) { + if (values[i] != Qundef) { + rb_ivar_set(self, keywords[i], values[i]); + } + } + } + + return self; +} + + /* * call-seq: * SyntaxError.new([msg]) -> syntax_error @@ -2137,9 +2422,7 @@ syserr_eqq(VALUE self, VALUE exc) num = rb_funcallv(exc, id_errno, 0, 0); } e = rb_const_get(self, id_Errno); - if (FIXNUM_P(num) ? num == e : rb_equal(num, e)) - return Qtrue; - return Qfalse; + return RBOOL(FIXNUM_P(num) ? num == e : rb_equal(num, e)); } @@ -2444,6 +2727,8 @@ syserr_eqq(VALUE self, VALUE exc) */ /* + * Document-class: Exception + * * \Class Exception and its subclasses are used to communicate between * Kernel#raise and +rescue+ statements in begin ... end blocks. * @@ -2538,10 +2823,56 @@ syserr_eqq(VALUE self, VALUE exc) * * fatal */ +static VALUE +exception_alloc(VALUE klass) +{ + return rb_class_allocate_instance(klass); +} + +static VALUE +exception_dumper(VALUE exc) +{ + // TODO: Currently, the instance variables "bt" and "bt_locations" + // refers to the same object (Array of String). But "bt_locations" + // should have an Array of Thread::Backtrace::Locations. + + return exc; +} + +static int +ivar_copy_i(st_data_t key, st_data_t val, st_data_t exc) +{ + rb_ivar_set((VALUE) exc, (ID) key, (VALUE) val); + return ST_CONTINUE; +} + +static VALUE +exception_loader(VALUE exc, VALUE obj) +{ + // The loader function of rb_marshal_define_compat seems to be called for two events: + // one is for fixup (r_fixup_compat), the other is for TYPE_USERDEF. + // In the former case, the first argument is an instance of Exception (because + // we pass rb_eException to rb_marshal_define_compat). In the latter case, the first + // argument is a class object (see TYPE_USERDEF case in r_object0). + // We want to copy all instance variables (but "bt_locations") from obj to exc. + // But we do not want to do so in the second case, so the following branch is for that. + if (RB_TYPE_P(exc, T_CLASS)) return obj; // maybe called from Marshal's TYPE_USERDEF + + rb_ivar_foreach(obj, ivar_copy_i, exc); + + if (rb_attr_get(exc, id_bt) == rb_attr_get(exc, id_bt_locations)) { + rb_ivar_set(exc, id_bt_locations, Qnil); + } + + return exc; +} + void Init_Exception(void) { rb_eException = rb_define_class("Exception", rb_cObject); + rb_define_alloc_func(rb_eException, exception_alloc); + rb_marshal_define_compat(rb_eException, rb_eException, exception_dumper, exception_loader); rb_define_singleton_method(rb_eException, "exception", rb_class_new_instance, -1); rb_define_singleton_method(rb_eException, "to_tty?", exc_s_to_tty_p, 0); rb_define_method(rb_eException, "exception", exc_exception, -1); @@ -2590,7 +2921,9 @@ Init_Exception(void) rb_define_method(rb_eNameError, "name", name_err_name, 0); rb_define_method(rb_eNameError, "receiver", name_err_receiver, 0); rb_define_method(rb_eNameError, "local_variables", name_err_local_variables, 0); - rb_cNameErrorMesg = rb_define_class_under(rb_eNameError, "message", rb_cData); + rb_cNameErrorMesg = rb_define_class_under(rb_eNameError, "message", rb_cObject); + rb_define_alloc_func(rb_cNameErrorMesg, name_err_mesg_alloc); + rb_define_method(rb_cNameErrorMesg, "initialize_copy", name_err_mesg_init_copy, 1); rb_define_method(rb_cNameErrorMesg, "==", name_err_mesg_equal, 1); rb_define_method(rb_cNameErrorMesg, "to_str", name_err_mesg_to_str, 0); rb_define_method(rb_cNameErrorMesg, "_dump", name_err_mesg_dump, 1); @@ -2608,7 +2941,11 @@ Init_Exception(void) rb_eNoMemError = rb_define_class("NoMemoryError", rb_eException); rb_eEncodingError = rb_define_class("EncodingError", rb_eStandardError); rb_eEncCompatError = rb_define_class_under(rb_cEncoding, "CompatibilityError", rb_eEncodingError); - rb_eNoMatchingPatternError = rb_define_class("NoMatchingPatternError", rb_eRuntimeError); + rb_eNoMatchingPatternError = rb_define_class("NoMatchingPatternError", rb_eStandardError); + rb_eNoMatchingPatternKeyError = rb_define_class("NoMatchingPatternKeyError", rb_eNoMatchingPatternError); + rb_define_method(rb_eNoMatchingPatternKeyError, "initialize", no_matching_pattern_key_err_initialize, -1); + rb_define_method(rb_eNoMatchingPatternKeyError, "matchee", no_matching_pattern_key_err_matchee, 0); + rb_define_method(rb_eNoMatchingPatternKeyError, "key", no_matching_pattern_key_err_key, 0); syserr_tbl = st_init_numtable(); rb_eSystemCallError = rb_define_class("SystemCallError", rb_eStandardError); @@ -2621,7 +2958,7 @@ Init_Exception(void) rb_mWarning = rb_define_module("Warning"); rb_define_singleton_method(rb_mWarning, "[]", rb_warning_s_aref, 1); rb_define_singleton_method(rb_mWarning, "[]=", rb_warning_s_aset, 2); - rb_define_method(rb_mWarning, "warn", rb_warning_s_warn, 1); + rb_define_method(rb_mWarning, "warn", rb_warning_s_warn, -1); rb_extend_object(rb_mWarning, rb_mWarning); /* :nodoc: */ @@ -2632,6 +2969,7 @@ Init_Exception(void) id_message = rb_intern_const("message"); id_backtrace = rb_intern_const("backtrace"); id_key = rb_intern_const("key"); + id_matchee = rb_intern_const("matchee"); id_args = rb_intern_const("args"); id_receiver = rb_intern_const("receiver"); id_private_call_p = rb_intern_const("private_call?"); @@ -2640,10 +2978,24 @@ Init_Exception(void) id_errno = rb_intern_const("errno"); id_i_path = rb_intern_const("@path"); id_warn = rb_intern_const("warn"); + id_category = rb_intern_const("category"); + id_deprecated = rb_intern_const("deprecated"); + id_experimental = rb_intern_const("experimental"); id_top = rb_intern_const("top"); id_bottom = rb_intern_const("bottom"); id_iseq = rb_make_internal_id(); id_recv = rb_make_internal_id(); + + sym_category = ID2SYM(id_category); + + warning_categories.id2enum = rb_init_identtable(); + st_add_direct(warning_categories.id2enum, id_deprecated, RB_WARN_CATEGORY_DEPRECATED); + st_add_direct(warning_categories.id2enum, id_experimental, RB_WARN_CATEGORY_EXPERIMENTAL); + + warning_categories.enum2id = rb_init_identtable(); + st_add_direct(warning_categories.enum2id, RB_WARN_CATEGORY_NONE, 0); + st_add_direct(warning_categories.enum2id, RB_WARN_CATEGORY_DEPRECATED, id_deprecated); + st_add_direct(warning_categories.enum2id, RB_WARN_CATEGORY_EXPERIMENTAL, id_experimental); } void @@ -2813,6 +3165,12 @@ rb_sys_fail_path_in(const char *func_name, VALUE path) void rb_syserr_fail_path_in(const char *func_name, int n, VALUE path) +{ + rb_exc_raise(rb_syserr_new_path_in(func_name, n, path)); +} + +VALUE +rb_syserr_new_path_in(const char *func_name, int n, VALUE path) { VALUE args[2]; @@ -2825,40 +3183,45 @@ rb_syserr_fail_path_in(const char *func_name, int n, VALUE path) } args[0] = path; args[1] = rb_str_new_cstr(func_name); - rb_exc_raise(rb_class_new_instance(2, args, get_syserr(n))); + return rb_class_new_instance(2, args, get_syserr(n)); } #endif +NORETURN(static void rb_mod_exc_raise(VALUE exc, VALUE mod)); + +static void +rb_mod_exc_raise(VALUE exc, VALUE mod) +{ + rb_extend_object(exc, mod); + rb_exc_raise(exc); +} + void rb_mod_sys_fail(VALUE mod, const char *mesg) { VALUE exc = make_errno_exc(mesg); - rb_extend_object(exc, mod); - rb_exc_raise(exc); + rb_mod_exc_raise(exc, mod); } void rb_mod_sys_fail_str(VALUE mod, VALUE mesg) { VALUE exc = make_errno_exc_str(mesg); - rb_extend_object(exc, mod); - rb_exc_raise(exc); + rb_mod_exc_raise(exc, mod); } void rb_mod_syserr_fail(VALUE mod, int e, const char *mesg) { VALUE exc = rb_syserr_new(e, mesg); - rb_extend_object(exc, mod); - rb_exc_raise(exc); + rb_mod_exc_raise(exc, mod); } void rb_mod_syserr_fail_str(VALUE mod, int e, VALUE mesg) { VALUE exc = rb_syserr_new_str(e, mesg); - rb_extend_object(exc, mod); - rb_exc_raise(exc); + rb_mod_exc_raise(exc, mod); } static void @@ -3033,14 +3396,14 @@ rb_check_frozen(VALUE obj) void rb_error_untrusted(VALUE obj) { - rb_warning("rb_error_untrusted is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove_at(3.2, "rb_error_untrusted", NULL); } #undef rb_check_trusted void rb_check_trusted(VALUE obj) { - rb_warning("rb_check_trusted is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove_at(3.2, "rb_check_trusted", NULL); } void @@ -3064,12 +3427,6 @@ Init_syserr(void) #include "warning.rbinc" -void -Init_warning(void) -{ - load_warning(); -} - /*! * \} */ diff --git a/ruby/eval.c b/ruby/eval.c index 08f7ba97d..0de3105ac 100644 --- a/ruby/eval.c +++ b/ruby/eval.c @@ -11,24 +11,38 @@ **********************************************************************/ -#include "internal.h" +#include "ruby/internal/config.h" + +#ifdef HAVE_SYS_PRCTL_H +#include +#endif + #include "eval_intern.h" -#include "iseq.h" #include "gc.h" -#include "ruby/vm.h" -#include "vm_core.h" +#include "internal.h" +#include "internal/class.h" +#include "internal/error.h" +#include "internal/eval.h" +#include "internal/hash.h" +#include "internal/inits.h" +#include "internal/io.h" +#include "internal/object.h" +#include "internal/thread.h" +#include "internal/variable.h" +#include "ruby/fiber/scheduler.h" +#include "iseq.h" #include "mjit.h" #include "probes.h" #include "probes_helper.h" -#ifdef HAVE_SYS_PRCTL_H -#include -#endif +#include "ruby/vm.h" +#include "vm_core.h" +#include "ractor_core.h" -NORETURN(void rb_raise_jump(VALUE, VALUE)); +NORETURN(static void rb_raise_jump(VALUE, VALUE)); void rb_ec_clear_current_thread_trace_func(const rb_execution_context_t *ec); void rb_ec_clear_all_trace_func(const rb_execution_context_t *ec); -static int rb_ec_cleanup(rb_execution_context_t *ec, volatile int ex); +static int rb_ec_cleanup(rb_execution_context_t *ec, int ex); static int rb_ec_exec_node(rb_execution_context_t *ec, void *n); VALUE rb_eLocalJumpError; @@ -47,11 +61,6 @@ extern ID ruby_static_id_cause; (!SPECIAL_CONST_P(obj) && \ (BUILTIN_TYPE(obj) == T_CLASS || BUILTIN_TYPE(obj) == T_MODULE)) -/*! - * Initializes the VM and builtin libraries. - * @retval 0 if succeeded. - * @retval non-zero an error occurred. - */ int ruby_setup(void) { @@ -85,11 +94,6 @@ ruby_setup(void) return state; } -/*! - * Calls ruby_setup() and check error. - * - * Prints errors and calls exit(3) if an error occurred. - */ void ruby_init(void) { @@ -101,16 +105,6 @@ ruby_init(void) } } -/*! Processes command line arguments and compiles the Ruby source to execute. - * - * This function does: - * \li Processes the given command line flags and arguments for ruby(1) - * \li compiles the source code from the given argument, -e or stdin, and - * \li returns the compiled source as an opaque pointer to an internal data structure - * - * @return an opaque pointer to the compiled source or an internal special value. - * @sa ruby_executable_node(). - */ void * ruby_options(int argc, char **argv) { @@ -132,9 +126,27 @@ ruby_options(int argc, char **argv) return iseq; } +static void +rb_ec_fiber_scheduler_finalize(rb_execution_context_t *ec) +{ + enum ruby_tag_type state; + + EC_PUSH_TAG(ec); + if ((state = EC_EXEC_TAG()) == TAG_NONE) { + rb_fiber_scheduler_set(Qnil); + } + else { + state = error_handle(ec, state); + } + EC_POP_TAG(); +} + static void rb_ec_teardown(rb_execution_context_t *ec) { + // If the user code defined a scheduler for the top level thread, run it: + rb_ec_fiber_scheduler_finalize(ec); + EC_PUSH_TAG(ec); if (EC_EXEC_TAG() == TAG_NONE) { rb_vm_trap_exit(rb_ec_vm_ptr(ec)); @@ -152,13 +164,6 @@ rb_ec_finalize(rb_execution_context_t *ec) rb_objspace_call_finalizer(rb_ec_vm_ptr(ec)->objspace); } -/** Runs the VM finalization processes. - * - * END{} and procs registered by Kernel.#at_exit are - * executed here. See the Ruby language spec for more details. - * - * @note This function is allowed to raise an exception if an error occurred. - */ void ruby_finalize(void) { @@ -167,24 +172,14 @@ ruby_finalize(void) rb_ec_finalize(ec); } -/** Destructs the VM. - * - * Runs the VM finalization processes as well as ruby_finalize(), and frees - * resources used by the VM. - * - * @param ex Default value to the return value. - * @return If an error occurred returns a non-zero. If otherwise, returns the - * given ex. - * @note This function does not raise any exception. - */ int -ruby_cleanup(volatile int ex) +ruby_cleanup(int ex) { return rb_ec_cleanup(GET_EC(), ex); } static int -rb_ec_cleanup(rb_execution_context_t *ec, volatile int ex) +rb_ec_cleanup(rb_execution_context_t *ec, int ex0) { int state; volatile VALUE errs[2] = { Qundef, Qundef }; @@ -193,16 +188,16 @@ rb_ec_cleanup(rb_execution_context_t *ec, volatile int ex) rb_thread_t *const volatile th0 = th; volatile int sysex = EXIT_SUCCESS; volatile int step = 0; + volatile int ex = ex0; rb_threadptr_interrupt(th); rb_threadptr_check_signal(th); + EC_PUSH_TAG(ec); if ((state = EC_EXEC_TAG()) == TAG_NONE) { - th = th0; SAVE_ROOT_JMPBUF(th, { RUBY_VM_CHECK_INTS(ec); }); step_0: step++; - th = th0; errs[1] = ec->errinfo; if (THROW_DATA_P(ec->errinfo)) ec->errinfo = Qnil; ruby_init_stack(&errs[STACK_UPPER(errs, 0, 1)]); @@ -210,27 +205,27 @@ rb_ec_cleanup(rb_execution_context_t *ec, volatile int ex) SAVE_ROOT_JMPBUF(th, rb_ec_teardown(ec)); step_1: step++; - th = th0; /* protect from Thread#raise */ th->status = THREAD_KILLED; errs[0] = ec->errinfo; - SAVE_ROOT_JMPBUF(th, rb_thread_terminate_all()); + SAVE_ROOT_JMPBUF(th, rb_ractor_terminate_all()); } else { + th = th0; switch (step) { case 0: goto step_0; case 1: goto step_1; } if (ex == 0) ex = state; } - th = th0; ec->errinfo = errs[1]; sysex = error_handle(ec, ex); state = 0; for (nerr = 0; nerr < numberof(errs); ++nerr) { VALUE err = ATOMIC_VALUE_EXCHANGE(errs[nerr], Qnil); + VALUE sig; if (!RTEST(err)) continue; @@ -246,6 +241,11 @@ rb_ec_cleanup(rb_execution_context_t *ec, volatile int ex) state = NUM2INT(sig); break; } + else if (rb_obj_is_kind_of(err, rb_eSystemCallError) && + FIXNUM_P(sig = rb_attr_get(err, id_signo))) { + state = NUM2INT(sig); + break; + } else if (sysex == EXIT_SUCCESS) { sysex = EXIT_FAILURE; } @@ -257,7 +257,9 @@ rb_ec_cleanup(rb_execution_context_t *ec, volatile int ex) /* unlock again if finalizer took mutexes. */ rb_threadptr_unlock_all_locking_mutexes(th); + th = th0; EC_POP_TAG(); + th = th0; rb_thread_stop_timer_thread(); ruby_vm_destruct(th->vm); if (state) ruby_default_signal(state); @@ -283,25 +285,12 @@ rb_ec_exec_node(rb_execution_context_t *ec, void *n) return state; } -/*! Calls ruby_cleanup() and exits the process */ void ruby_stop(int ex) { exit(ruby_cleanup(ex)); } -/*! Checks the return value of ruby_options(). - * @param n return value of ruby_options(). - * @param status pointer to the exit status of this process. - * - * ruby_options() sometimes returns a special value to indicate this process - * should immediately exit. This function checks if the case. Also stores the - * exit status that the caller have to pass to exit(3) into - * *status. - * - * @retval non-zero if the given opaque pointer is actually a compiled source. - * @retval 0 if the given value is such a special value. - */ int ruby_executable_node(void *n, int *status) { @@ -319,10 +308,6 @@ ruby_executable_node(void *n, int *status) return FALSE; } -/*! Runs the given compiled source and exits this process. - * @retval 0 if successfully run the source - * @retval non-zero if an error occurred. -*/ int ruby_run_node(void *n) { @@ -336,7 +321,6 @@ ruby_run_node(void *n) return rb_ec_cleanup(ec, rb_ec_exec_node(ec, n)); } -/*! Runs the given compiled source */ int ruby_exec_node(void *n) { @@ -438,9 +422,11 @@ void rb_class_modify_check(VALUE klass) { if (SPECIAL_CONST_P(klass)) { - noclass: Check_Type(klass, T_CLASS); } + if (RB_TYPE_P(klass, T_MODULE)) { + rb_module_set_initialized(klass); + } if (OBJ_FROZEN(klass)) { const char *desc; @@ -456,6 +442,8 @@ rb_class_modify_check(VALUE klass) case T_CLASS: desc = "Class"; break; + default: + break; } } } @@ -469,7 +457,8 @@ rb_class_modify_check(VALUE klass) desc = "class"; break; default: - goto noclass; + Check_Type(klass, T_CLASS); + UNREACHABLE; } } rb_frozen_error_raise(klass, "can't modify frozen %s: %"PRIsVALUE, desc, klass); @@ -622,16 +611,19 @@ setup_exception(rb_execution_context_t *ec, int tag, volatile VALUE mesg, VALUE } if (rb_ec_set_raised(ec)) { - fatal: - ec->errinfo = exception_error; - rb_ec_reset_raised(ec); - EC_JUMP_TAG(ec, TAG_FATAL); + goto fatal; } if (tag != TAG_FATAL) { RUBY_DTRACE_HOOK(RAISE, rb_obj_classname(ec->errinfo)); EXEC_EVENT_HOOK(ec, RUBY_EVENT_RAISE, ec->cfp->self, 0, 0, 0, mesg); } + return; + + fatal: + ec->errinfo = exception_error; + rb_ec_reset_raised(ec); + EC_JUMP_TAG(ec, TAG_FATAL); } /*! \private */ @@ -657,6 +649,17 @@ rb_longjmp(rb_execution_context_t *ec, int tag, volatile VALUE mesg, VALUE cause static VALUE make_exception(int argc, const VALUE *argv, int isstr); +NORETURN(static void rb_exc_exception(VALUE mesg, int tag, VALUE cause)); + +static void +rb_exc_exception(VALUE mesg, int tag, VALUE cause) +{ + if (!NIL_P(mesg)) { + mesg = make_exception(1, &mesg, FALSE); + } + rb_longjmp(GET_EC(), tag, mesg, cause); +} + /*! * Raises an exception in the current thread. * \param[in] mesg an Exception class or an \c Exception object. @@ -667,10 +670,7 @@ static VALUE make_exception(int argc, const VALUE *argv, int isstr); void rb_exc_raise(VALUE mesg) { - if (!NIL_P(mesg)) { - mesg = make_exception(1, &mesg, FALSE); - } - rb_longjmp(GET_EC(), TAG_RAISE, mesg, Qundef); + rb_exc_exception(mesg, TAG_RAISE, Qundef); } /*! @@ -683,16 +683,9 @@ rb_exc_raise(VALUE mesg) void rb_exc_fatal(VALUE mesg) { - if (!NIL_P(mesg)) { - mesg = make_exception(1, &mesg, FALSE); - } - rb_longjmp(GET_EC(), TAG_FATAL, mesg, Qnil); + rb_exc_exception(mesg, TAG_FATAL, Qnil); } -/*! - * Raises an \c Interrupt exception. - * \ingroup exception - */ void rb_interrupt(void) { @@ -784,69 +777,42 @@ static VALUE make_exception(int argc, const VALUE *argv, int isstr) { VALUE mesg, exc; - int n; mesg = Qnil; switch (argc) { case 0: - break; + return Qnil; case 1: exc = argv[0]; - if (NIL_P(exc)) - break; - if (isstr) { + if (isstr &&! NIL_P(exc)) { mesg = rb_check_string_type(exc); if (!NIL_P(mesg)) { - mesg = rb_exc_new3(rb_eRuntimeError, mesg); - break; + return rb_exc_new3(rb_eRuntimeError, mesg); } } - n = 0; - goto exception_call; case 2: case 3: - exc = argv[0]; - n = 1; - exception_call: - mesg = rb_check_funcall(exc, idException, n, argv+1); - if (mesg == Qundef) { - rb_raise(rb_eTypeError, "exception class/object expected"); - } break; default: rb_error_arity(argc, 0, 3); } - if (argc > 0) { - if (!rb_obj_is_kind_of(mesg, rb_eException)) - rb_raise(rb_eTypeError, "exception object expected"); - if (argc > 2) - set_backtrace(mesg, argv[2]); + if (NIL_P(mesg)) { + mesg = rb_check_funcall(argv[0], idException, argc != 1, &argv[1]); + } + if (mesg == Qundef) { + rb_raise(rb_eTypeError, "exception class/object expected"); + } + if (!rb_obj_is_kind_of(mesg, rb_eException)) { + rb_raise(rb_eTypeError, "exception object expected"); + } + if (argc == 3) { + set_backtrace(mesg, argv[2]); } return mesg; } -/*! - * Make an \c Exception object from the list of arguments in a manner - * similar to \c Kernel\#raise. - * - * \param[in] argc the number of arguments - * \param[in] argv a pointer to the array of arguments. - * - * The first form of this function takes a \c String argument. Then - * it returns a \c RuntimeError whose error message is the given value. - * - * The second from of this function takes an \c Exception object. Then - * it just returns the given value. - * - * The last form takes an exception class, an optional error message and - * an optional array of backtrace. Then it passes the optional arguments - * to \c #exception method of the exception class. - * - * \return the exception object, or \c Qnil if \c argc is 0. - * \ingroup exception - */ VALUE rb_make_exception(int argc, const VALUE *argv) { @@ -854,9 +820,8 @@ rb_make_exception(int argc, const VALUE *argv) } /*! \private - * \todo can be static? */ -void +static void rb_raise_jump(VALUE mesg, VALUE cause) { rb_execution_context_t *ec = GET_EC(); @@ -872,14 +837,6 @@ rb_raise_jump(VALUE mesg, VALUE cause) rb_longjmp(ec, TAG_RAISE, mesg, cause); } -/*! - * Continues the exception caught by rb_protect() and rb_eval_string_protect(). - * - * This function never return to the caller. - * \param[in] the value of \c *state which the protect function has set to the - * their last parameter. - * \ingroup exception - */ void rb_jump_tag(int tag) { @@ -889,11 +846,6 @@ rb_jump_tag(int tag) EC_JUMP_TAG(GET_EC(), tag); } -/*! Determines if the current method is given a block. - * \retval zero if not given - * \retval non-zero if given - * \ingroup defmethod - */ int rb_block_given_p(void) { @@ -913,21 +865,8 @@ rb_keyword_given_p(void) return rb_vm_cframe_keyword_p(GET_EC()->cfp); } -/* -- Remove In 3.0 -- */ -int rb_vm_cframe_empty_keyword_p(const rb_control_frame_t *cfp); -int -rb_empty_keyword_given_p(void) -{ - return rb_vm_cframe_empty_keyword_p(GET_EC()->cfp); -} - VALUE rb_eThreadError; -/*! Declares that the current method needs a block. - * - * Raises a \c LocalJumpError if not given a block. - * \ingroup defmethod - */ void rb_need_block(void) { @@ -936,28 +875,6 @@ rb_need_block(void) } } -/*! An equivalent of \c rescue clause. - * - * Equivalent to begin .. rescue err_type .. end - * - * \param[in] b_proc a function which potentially raises an exception. - * \param[in] data1 the argument of \a b_proc - * \param[in] r_proc a function which rescues an exception in \a b_proc. - * \param[in] data2 the first argument of \a r_proc - * \param[in] ... 1 or more exception classes. Must be terminated by \c (VALUE)0. - * - * First it calls the function \a b_proc, with \a data1 as the argument. - * When \a b_proc raises an exception, it calls \a r_proc with \a data2 and - * the exception object if the exception is a kind of one of the given - * exception classes. - * - * \return the return value of \a b_proc if no exception occurs, - * or the return value of \a r_proc if otherwise. - * \sa rb_rescue - * \sa rb_ensure - * \sa rb_protect - * \ingroup exception - */ VALUE rb_rescue2(VALUE (* b_proc) (VALUE), VALUE data1, VALUE (* r_proc) (VALUE, VALUE), VALUE data2, ...) @@ -969,10 +886,6 @@ rb_rescue2(VALUE (* b_proc) (VALUE), VALUE data1, return ret; } -/*! - * \copydoc rb_rescue2 - * \param[in] args exception classes, terminated by 0. - */ VALUE rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1, VALUE (* r_proc) (VALUE, VALUE), VALUE data2, @@ -992,7 +905,7 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1, else if (result) { /* escape from r_proc */ if (state == TAG_RETRY) { - state = 0; + state = TAG_NONE; ec->errinfo = Qnil; result = Qfalse; goto retry_entry; @@ -1004,17 +917,21 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1, if (state == TAG_RAISE) { int handle = FALSE; VALUE eclass; + va_list ap; - while ((eclass = va_arg(args, VALUE)) != 0) { + result = Qnil; + /* reuses args when raised again after retrying in r_proc */ + va_copy(ap, args); + while ((eclass = va_arg(ap, VALUE)) != 0) { if (rb_obj_is_kind_of(ec->errinfo, eclass)) { handle = TRUE; break; } } + va_end(ap); if (handle) { - result = Qnil; - state = 0; + state = TAG_NONE; if (r_proc) { result = (*r_proc) (data2, ec->errinfo); } @@ -1029,20 +946,6 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1, return result; } -/*! An equivalent of \c rescue clause. - * - * Equivalent to begin .. rescue .. end. - * - * It is same as - * \code{cpp} - * rb_rescue2(b_proc, data1, r_proc, data2, rb_eStandardError, (VALUE)0); - * \endcode - * - * \sa rb_rescue2 - * \sa rb_ensure - * \sa rb_protect - * \ingroup exception - */ VALUE rb_rescue(VALUE (* b_proc)(VALUE), VALUE data1, VALUE (* r_proc)(VALUE, VALUE), VALUE data2) @@ -1051,23 +954,6 @@ rb_rescue(VALUE (* b_proc)(VALUE), VALUE data1, (VALUE)0); } -/*! Protects a function call from potential global escapes from the function. - * - * Such global escapes include exceptions, \c Kernel\#throw, \c break in - * an iterator, for example. - * It first calls the function func with arg as the argument. - * If no exception occurred during func, it returns the result of func and - * *state is zero. - * Otherwise, it returns Qnil and sets *state to nonzero. - * If state is NULL, it is not set in both cases. - * - * You have to clear the error info with rb_set_errinfo(Qnil) when - * ignoring the caught exception. - * \ingroup exception - * \sa rb_rescue - * \sa rb_rescue2 - * \sa rb_ensure - */ VALUE rb_protect(VALUE (* proc) (VALUE), VALUE data, int *pstate) { @@ -1075,42 +961,20 @@ rb_protect(VALUE (* proc) (VALUE), VALUE data, int *pstate) volatile enum ruby_tag_type state; rb_execution_context_t * volatile ec = GET_EC(); rb_control_frame_t *volatile cfp = ec->cfp; - struct rb_vm_protect_tag protect_tag; - rb_jmpbuf_t org_jmpbuf; - - protect_tag.prev = ec->protect_tag; EC_PUSH_TAG(ec); - ec->protect_tag = &protect_tag; - MEMCPY(&org_jmpbuf, &rb_ec_thread_ptr(ec)->root_jmpbuf, rb_jmpbuf_t, 1); if ((state = EC_EXEC_TAG()) == TAG_NONE) { SAVE_ROOT_JMPBUF(rb_ec_thread_ptr(ec), result = (*proc) (data)); } else { rb_vm_rewind_cfp(ec, cfp); } - MEMCPY(&rb_ec_thread_ptr(ec)->root_jmpbuf, &org_jmpbuf, rb_jmpbuf_t, 1); - ec->protect_tag = protect_tag.prev; EC_POP_TAG(); if (pstate != NULL) *pstate = state; return result; } -/*! - * An equivalent to \c ensure clause. - * - * Equivalent to begin .. ensure .. end. - * - * Calls the function \a b_proc with \a data1 as the argument, - * then calls \a e_proc with \a data2 when execution terminated. - * \return The return value of \a b_proc if no exception occurred, - * or \c Qnil if otherwise. - * \sa rb_rescue - * \sa rb_rescue2 - * \sa rb_protect - * \ingroup exception - */ VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*e_proc)(VALUE), VALUE data2) { @@ -1167,35 +1031,12 @@ frame_called_id(rb_control_frame_t *cfp) } } -/*! - * The original name of the current method. - * - * The function returns the original name of the method even if - * an alias of the method is called. - * The function can also return 0 if it is not in a method. This - * case can happen in a toplevel of a source file, for example. - * - * \returns the ID of the name or 0 - * \sa rb_frame_callee - * \ingroup defmethod - */ ID rb_frame_this_func(void) { return frame_func_id(GET_EC()->cfp); } -/*! - * The name of the current method. - * - * The function returns the alias if an alias of the method is called. - * The function can also return 0 if it is not in a method. This - * case can happen in a toplevel of a source file, for example. - * - * \returns the ID of the name or 0. - * \sa rb_frame_this_func - * \ingroup defmethod - */ ID rb_frame_callee(void) { @@ -1287,6 +1128,10 @@ rb_mod_include(int argc, VALUE *argv, VALUE module) CONST_ID(id_append_features, "append_features"); CONST_ID(id_included, "included"); + if (FL_TEST(module, RMODULE_IS_REFINEMENT)) { + rb_warn_deprecated_to_remove_at(3.2, "Refinement#include", NULL); + } + rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS); for (i = 0; i < argc; i++) Check_Type(argv[i], T_MODULE); @@ -1333,6 +1178,10 @@ rb_mod_prepend(int argc, VALUE *argv, VALUE module) int i; ID id_prepend_features, id_prepended; + if (FL_TEST(module, RMODULE_IS_REFINEMENT)) { + rb_warn_deprecated_to_remove_at(3.2, "Refinement#prepend", NULL); + } + CONST_ID(id_prepend_features, "prepend_features"); CONST_ID(id_prepended, "prepended"); @@ -1370,7 +1219,7 @@ refinement_superclass(VALUE superclass) { if (RB_TYPE_P(superclass, T_MODULE)) { /* FIXME: Should ancestors of superclass be used here? */ - return rb_include_class_new(superclass, rb_cBasicObject); + return rb_include_class_new(RCLASS_ORIGIN(superclass), rb_cBasicObject); } else { return superclass; @@ -1379,9 +1228,8 @@ refinement_superclass(VALUE superclass) /*! * \private - * \todo can be static? */ -void +static void rb_using_refinement(rb_cref_t *cref, VALUE klass, VALUE module) { VALUE iclass, c, superclass = klass; @@ -1412,8 +1260,7 @@ rb_using_refinement(rb_cref_t *cref, VALUE klass, VALUE module) c = iclass = rb_include_class_new(module, superclass); RB_OBJ_WRITE(c, &RCLASS_REFINED_CLASS(c), klass); - RCLASS_M_TBL(OBJ_WB_UNPROTECT(c)) = - RCLASS_M_TBL(OBJ_WB_UNPROTECT(module)); /* TODO: check unprotecting */ + RCLASS_M_TBL(c) = RCLASS_M_TBL(module); module = RCLASS_SUPER(module); while (module && module != klass) { @@ -1466,14 +1313,13 @@ using_module_recursive(const rb_cref_t *cref, VALUE klass) /*! * \private - * \todo can be static? */ -void +static void rb_using_module(const rb_cref_t *cref, VALUE module) { Check_Type(module, T_MODULE); using_module_recursive(cref, module); - rb_clear_method_cache_by_class(rb_cObject); + rb_clear_method_cache_all(); } /*! \private */ @@ -1543,9 +1389,6 @@ rb_mod_refine(VALUE module, VALUE klass) } ensure_class_or_module(klass); - if (RB_TYPE_P(klass, T_MODULE)) { - FL_SET(klass, RCLASS_REFINED_BY_ANY); - } CONST_ID(id_refinements, "__refinements__"); refinements = rb_attr_get(module, id_refinements); if (NIL_P(refinements)) { @@ -1562,7 +1405,7 @@ rb_mod_refine(VALUE module, VALUE klass) refinement = rb_hash_lookup(refinements, klass); if (NIL_P(refinement)) { VALUE superclass = refinement_superclass(klass); - refinement = rb_module_new(); + refinement = rb_refinement_new(); RCLASS_SET_SUPER(refinement, superclass); FL_SET(refinement, RMODULE_IS_REFINEMENT); CONST_ID(id_refined_class, "__refined_class__"); @@ -1667,21 +1510,62 @@ rb_mod_s_used_modules(VALUE _) return rb_funcall(ary, rb_intern("uniq"), 0); } -/*! - * Calls \c #initialize method of \a obj with the given arguments. - * - * It also forwards the given block to \c #initialize if given. - * - * \param[in] obj the receiver object - * \param[in] argc the number of arguments - * \param[in] argv a pointer to the array of arguments - * \ingroup object +struct refinement_import_methods_arg { + rb_cref_t *cref; + VALUE refinement; + VALUE module; +}; + +/* vm.c */ +rb_cref_t *rb_vm_cref_dup_without_refinements(const rb_cref_t *cref); + +static enum rb_id_table_iterator_result +refinement_import_methods_i(ID key, VALUE value, void *data) +{ + const rb_method_entry_t *me = (const rb_method_entry_t *)value; + struct refinement_import_methods_arg *arg = (struct refinement_import_methods_arg *)data; + + if (me->def->type != VM_METHOD_TYPE_ISEQ) { + rb_raise(rb_eArgError, "Can't import method which is not defined with Ruby code: %"PRIsVALUE"#%"PRIsVALUE, rb_class_path(arg->module), rb_id2str(key)); + } + rb_cref_t *new_cref = rb_vm_cref_dup_without_refinements(me->def->body.iseq.cref); + CREF_REFINEMENTS_SET(new_cref, CREF_REFINEMENTS(arg->cref)); + rb_add_method_iseq(arg->refinement, key, me->def->body.iseq.iseqptr, new_cref, METHOD_ENTRY_VISI(me)); + return ID_TABLE_CONTINUE; +} + +/* + * Note: docs for the method are in class.c */ + +static VALUE +refinement_import_methods(int argc, VALUE *argv, VALUE refinement) +{ + int i; + struct refinement_import_methods_arg arg; + + rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS); + for (i = 0; i < argc; i++) { + Check_Type(argv[i], T_MODULE); + if (RCLASS_SUPER(argv[i])) { + rb_warn("%"PRIsVALUE" has ancestors, but Refinement#import_methods doesn't import their methods", rb_class_path(argv[i])); + } + } + arg.cref = rb_vm_cref_replace_with_duplicated_cref(); + arg.refinement = refinement; + for (i = 0; i < argc; i++) { + arg.module = argv[i]; + struct rb_id_table *m_tbl = RCLASS_M_TBL(argv[i]); + if (!m_tbl) continue; + rb_id_table_foreach(m_tbl, refinement_import_methods_i, &arg); + } + return refinement; +} + void rb_obj_call_init(VALUE obj, int argc, const VALUE *argv) { - PASS_PASSED_BLOCK_HANDLER(); - rb_funcallv_kw(obj, idInitialize, argc, argv, RB_NO_KEYWORDS); + rb_obj_call_init_kw(obj, argc, argv, RB_NO_KEYWORDS); } void @@ -1691,12 +1575,6 @@ rb_obj_call_init_kw(VALUE obj, int argc, const VALUE *argv, int kw_splat) rb_funcallv_kw(obj, idInitialize, argc, argv, kw_splat); } -/*! - * Extend the object with the module. - * - * Same as \c Module\#extend_object. - * \ingroup class - */ void rb_extend_object(VALUE obj, VALUE module) { @@ -1872,26 +1750,12 @@ errinfo_getter(ID id, VALUE *_) return get_errinfo(); } -/*! The current exception in the current thread. - * - * Same as \c $! in Ruby. - * \return the current exception or \c Qnil - * \ingroup exception - */ VALUE rb_errinfo(void) { return GET_EC()->errinfo; } -/*! Sets the current exception (\c $!) to the given value - * - * \param[in] err an \c Exception object or \c Qnil. - * \exception TypeError if \a err is neither an exception nor \c nil. - * \note this function does not raise the exception. - * Use \c rb_raise() when you want to raise. - * \ingroup exception - */ void rb_set_errinfo(VALUE err) { @@ -1993,7 +1857,10 @@ f_current_dirname(VALUE _) * call-seq: * global_variables -> array * - * Returns an array of the names of global variables. + * Returns an array of the names of global variables. This includes + * special regexp global variables such as $~ and $+, + * but does not include the numbered regexp global variables ($1, + * $2, etc.). * * global_variables.grep /std/ #=> [:$stdin, :$stdout, :$stderr] */ @@ -2055,6 +1922,9 @@ Init_eval(void) rb_define_virtual_variable("$@", errat_getter, errat_setter); rb_define_virtual_variable("$!", errinfo_getter, 0); + rb_gvar_ractor_local("$@"); + rb_gvar_ractor_local("$!"); + rb_define_global_function("raise", f_raise, -1); rb_define_global_function("fail", f_raise, -1); @@ -2075,6 +1945,7 @@ Init_eval(void) rb_define_singleton_method(rb_cModule, "used_modules", rb_mod_s_used_modules, 0); rb_undef_method(rb_cClass, "refine"); + rb_define_private_method(rb_cRefinement, "import_methods", refinement_import_methods, -1); rb_undef_method(rb_cClass, "module_function"); diff --git a/ruby/eval_error.c b/ruby/eval_error.c index 847072ab9..9b453eede 100644 --- a/ruby/eval_error.c +++ b/ruby/eval_error.c @@ -228,34 +228,48 @@ print_errinfo(const VALUE eclass, const VALUE errat, const VALUE emesg, const VA } static void -print_backtrace(const VALUE eclass, const VALUE errat, const VALUE str, int reverse) +print_backtrace(const VALUE eclass, const VALUE errat, const VALUE str, int reverse, long backtrace_limit) { if (!NIL_P(errat)) { long i; long len = RARRAY_LEN(errat); - int skip = eclass == rb_eSysStackError; const int threshold = 1000000000; int width = (len <= 1) ? INT_MIN : ((int)log10((double)(len > threshold ? ((len - 1) / threshold) : len - 1)) + (len < threshold ? 0 : 9) + 1); -#define TRACE_MAX (TRACE_HEAD+TRACE_TAIL+5) -#define TRACE_HEAD 8 -#define TRACE_TAIL 5 + long skip_start = -1, skip_len = 0; + + // skip for stackoverflow + if (eclass == rb_eSysStackError) { + long trace_head = 9; + long trace_tail = 4; + long trace_max = trace_head + trace_tail + 5; + if (len > trace_max) { + skip_start = trace_head; + skip_len = len - trace_max + 5; + } + } + + // skip for explicit limit + if (backtrace_limit >= 0 && len > backtrace_limit + 2) { + skip_start = backtrace_limit + 1; + skip_len = len - skip_start; + } for (i = 1; i < len; i++) { + if (i == skip_start) { + write_warn_str(str, rb_sprintf("\t ... %ld levels...\n", skip_len)); + i += skip_len; + if (i >= len) break; + } VALUE line = RARRAY_AREF(errat, reverse ? len - i : i); if (RB_TYPE_P(line, T_STRING)) { VALUE bt = rb_str_new_cstr("\t"); if (reverse) rb_str_catf(bt, "%*ld: ", width, len - i); write_warn_str(str, rb_str_catf(bt, "from %"PRIsVALUE"\n", line)); } - if (skip && i == TRACE_HEAD && len > TRACE_MAX) { - write_warn_str(str, rb_sprintf("\t ... %ld levels...\n", - len - TRACE_HEAD - TRACE_TAIL)); - i = len - TRACE_TAIL; - } } } } @@ -275,7 +289,7 @@ shown_cause_p(VALUE cause, VALUE *shown_causes) } static void -show_cause(VALUE errinfo, VALUE str, VALUE highlight, VALUE reverse, VALUE *shown_causes) +show_cause(VALUE errinfo, VALUE str, VALUE highlight, VALUE reverse, long backtrace_limit, VALUE *shown_causes) { VALUE cause = rb_attr_get(errinfo, id_cause); if (!NIL_P(cause) && rb_obj_is_kind_of(cause, rb_eException) && @@ -284,14 +298,14 @@ show_cause(VALUE errinfo, VALUE str, VALUE highlight, VALUE reverse, VALUE *show VALUE errat = rb_get_backtrace(cause); VALUE emesg = rb_get_message(cause); if (reverse) { - show_cause(cause, str, highlight, reverse, shown_causes); - print_backtrace(eclass, errat, str, TRUE); + show_cause(cause, str, highlight, reverse, backtrace_limit, shown_causes); + print_backtrace(eclass, errat, str, TRUE, backtrace_limit); print_errinfo(eclass, errat, emesg, str, highlight!=0); } else { print_errinfo(eclass, errat, emesg, str, highlight!=0); - print_backtrace(eclass, errat, str, FALSE); - show_cause(cause, str, highlight, reverse, shown_causes); + print_backtrace(eclass, errat, str, FALSE, backtrace_limit); + show_cause(cause, str, highlight, reverse, backtrace_limit, shown_causes); } } } @@ -301,6 +315,7 @@ rb_error_write(VALUE errinfo, VALUE emesg, VALUE errat, VALUE str, VALUE highlig { volatile VALUE eclass; VALUE shown_causes = 0; + long backtrace_limit = rb_backtrace_length_limit; if (NIL_P(errinfo)) return; @@ -309,9 +324,9 @@ rb_error_write(VALUE errinfo, VALUE emesg, VALUE errat, VALUE str, VALUE highlig errat = Qnil; } eclass = CLASS_OF(errinfo); - if (NIL_P(reverse) || NIL_P(highlight)) { + if (NIL_P(reverse)) reverse = Qfalse; + if (NIL_P(highlight)) { VALUE tty = (VALUE)rb_stderr_tty_p(); - if (NIL_P(reverse)) reverse = tty; if (NIL_P(highlight)) highlight = tty; } if (reverse) { @@ -331,14 +346,14 @@ rb_error_write(VALUE errinfo, VALUE emesg, VALUE errat, VALUE str, VALUE highlig len = p - (msg = buff); } write_warn2(str, msg, len); - show_cause(errinfo, str, highlight, reverse, &shown_causes); - print_backtrace(eclass, errat, str, TRUE); + show_cause(errinfo, str, highlight, reverse, backtrace_limit, &shown_causes); + print_backtrace(eclass, errat, str, TRUE, backtrace_limit); print_errinfo(eclass, errat, emesg, str, highlight!=0); } else { print_errinfo(eclass, errat, emesg, str, highlight!=0); - print_backtrace(eclass, errat, str, FALSE); - show_cause(errinfo, str, highlight, reverse, &shown_causes); + print_backtrace(eclass, errat, str, FALSE, backtrace_limit); + show_cause(errinfo, str, highlight, reverse, backtrace_limit, &shown_causes); } } @@ -348,6 +363,7 @@ rb_ec_error_print(rb_execution_context_t * volatile ec, volatile VALUE errinfo) volatile uint8_t raised_flag = ec->raised_flag; volatile VALUE errat = Qundef; volatile VALUE emesg = Qundef; + volatile bool written = false; if (NIL_P(errinfo)) return; @@ -362,7 +378,10 @@ rb_ec_error_print(rb_execution_context_t * volatile ec, volatile VALUE errinfo) emesg = rb_get_message(errinfo); } - rb_error_write(errinfo, emesg, errat, Qnil, Qnil, Qnil); + if (!written) { + written = true; + rb_error_write(errinfo, emesg, errat, Qnil, Qnil, Qfalse); + } EC_POP_TAG(); ec->errinfo = errinfo; @@ -411,8 +430,8 @@ rb_print_inaccessible(VALUE klass, ID id, rb_method_visibility_t visi) switch (visi & METHOD_VISI_MASK) { case METHOD_VISI_UNDEF: case METHOD_VISI_PUBLIC: mesg = inaccessible_mesg(""); break; - case METHOD_VISI_PRIVATE: mesg = inaccessible_mesg(" private"); break; - case METHOD_VISI_PROTECTED: mesg = inaccessible_mesg(" protected"); break; + case METHOD_VISI_PRIVATE: mesg = inaccessible_mesg("private"); break; + case METHOD_VISI_PROTECTED: mesg = inaccessible_mesg("protected"); break; default: UNREACHABLE; } rb_name_err_raise_str(mesg, klass, ID2SYM(id)); @@ -474,6 +493,10 @@ error_handle(rb_execution_context_t *ec, int ex) rb_ivar_get(errinfo, id_signo) != INT2FIX(SIGSEGV)) { /* no message when exiting by signal */ } + else if (rb_obj_is_kind_of(errinfo, rb_eSystemCallError) && + FIXNUM_P(rb_attr_get(errinfo, id_signo))) { + /* no message when exiting by error to be mapped to signal */ + } else { rb_ec_error_print(ec, errinfo); } diff --git a/ruby/eval_intern.h b/ruby/eval_intern.h index aa07ce30e..78feb241a 100644 --- a/ruby/eval_intern.h +++ b/ruby/eval_intern.h @@ -91,40 +91,12 @@ extern int select_large_fdset(int, fd_set *, fd_set *, fd_set *, struct timeval #include -#ifdef _MSC_VER -#define SAVE_ROOT_JMPBUF_BEFORE_STMT \ - __try { -#define SAVE_ROOT_JMPBUF_AFTER_STMT \ - } \ - __except (GetExceptionCode() == EXCEPTION_STACK_OVERFLOW ? \ - (rb_ec_raised_set(GET_EC(), RAISED_STACKOVERFLOW), \ - raise(SIGSEGV), \ - EXCEPTION_EXECUTE_HANDLER) : \ - EXCEPTION_CONTINUE_SEARCH) { \ - /* never reaches here */ \ - } -#elif defined(__MINGW32__) -LONG WINAPI rb_w32_stack_overflow_handler(struct _EXCEPTION_POINTERS *); -#define SAVE_ROOT_JMPBUF_BEFORE_STMT \ - do { \ - PVOID _handler = AddVectoredExceptionHandler(1, rb_w32_stack_overflow_handler); - -#define SAVE_ROOT_JMPBUF_AFTER_STMT \ - RemoveVectoredExceptionHandler(_handler); \ - } while (0); -#else -#define SAVE_ROOT_JMPBUF_BEFORE_STMT -#define SAVE_ROOT_JMPBUF_AFTER_STMT -#endif #define SAVE_ROOT_JMPBUF(th, stmt) do \ - if (ruby_setjmp((th)->root_jmpbuf) == 0) { \ - SAVE_ROOT_JMPBUF_BEFORE_STMT \ + if (true) { \ stmt; \ - SAVE_ROOT_JMPBUF_AFTER_STMT \ } \ - else { \ - rb_fiber_start(); \ + else if (th) { /* suppress unused-variable warning */ \ } while (0) #define EC_PUSH_TAG(ec) do { \ @@ -132,7 +104,8 @@ LONG WINAPI rb_w32_stack_overflow_handler(struct _EXCEPTION_POINTERS *); struct rb_vm_tag _tag; \ _tag.state = TAG_NONE; \ _tag.tag = Qundef; \ - _tag.prev = _ec->tag; + _tag.prev = _ec->tag; \ + _tag.lock_rec = rb_ec_vm_lock_rec(_ec); \ #define EC_POP_TAG() \ _ec->tag = _tag.prev; \ @@ -143,7 +116,7 @@ LONG WINAPI rb_w32_stack_overflow_handler(struct _EXCEPTION_POINTERS *); #define EC_REPUSH_TAG() (void)(_ec->tag = &_tag) -#if defined __GNUC__ && __GNUC__ == 4 && (__GNUC_MINOR__ >= 6 && __GNUC_MINOR__ <= 8) || __clang__ +#if defined __GNUC__ && __GNUC__ == 4 && (__GNUC_MINOR__ >= 6 && __GNUC_MINOR__ <= 8) || defined __clang__ /* This macro prevents GCC 4.6--4.8 from emitting maybe-uninitialized warnings. * This macro also prevents Clang from dumping core in EC_EXEC_TAG(). * (I confirmed Clang 4.0.1 and 5.0.0.) @@ -157,12 +130,23 @@ LONG WINAPI rb_w32_stack_overflow_handler(struct _EXCEPTION_POINTERS *); # define VAR_NOCLOBBERED(var) var #endif +static inline void +rb_ec_vm_lock_rec_check(const rb_execution_context_t *ec, unsigned int recorded_lock_rec) +{ + unsigned int current_lock_rec = rb_ec_vm_lock_rec(ec); + if (current_lock_rec != recorded_lock_rec) { + rb_ec_vm_lock_rec_release(ec, recorded_lock_rec, current_lock_rec); + } +} + /* clear ec->tag->state, and return the value */ static inline int rb_ec_tag_state(const rb_execution_context_t *ec) { - enum ruby_tag_type state = ec->tag->state; - ec->tag->state = TAG_NONE; + struct rb_vm_tag *tag = ec->tag; + enum ruby_tag_type state = tag->state; + tag->state = TAG_NONE; + rb_ec_vm_lock_rec_check(ec, tag->lock_rec); return state; } @@ -189,11 +173,30 @@ rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st) #define CREF_FL_PUSHED_BY_EVAL IMEMO_FL_USER1 #define CREF_FL_OMOD_SHARED IMEMO_FL_USER2 +#define CREF_FL_SINGLETON IMEMO_FL_USER3 + +static inline int CREF_SINGLETON(const rb_cref_t *cref); static inline VALUE CREF_CLASS(const rb_cref_t *cref) { - return cref->klass; + if (CREF_SINGLETON(cref)) { + return CLASS_OF(cref->klass_or_self); + } + else { + return cref->klass_or_self; + } +} + +static inline VALUE +CREF_CLASS_FOR_DEFINITION(const rb_cref_t *cref) +{ + if (CREF_SINGLETON(cref)) { + return rb_singleton_class(cref->klass_or_self); + } + else { + return cref->klass_or_self; + } } static inline rb_cref_t * @@ -232,6 +235,18 @@ CREF_PUSHED_BY_EVAL_SET(rb_cref_t *cref) cref->flags |= CREF_FL_PUSHED_BY_EVAL; } +static inline int +CREF_SINGLETON(const rb_cref_t *cref) +{ + return cref->flags & CREF_FL_SINGLETON; +} + +static inline void +CREF_SINGLETON_SET(rb_cref_t *cref) +{ + cref->flags |= CREF_FL_SINGLETON; +} + static inline int CREF_OMOD_SHARED(const rb_cref_t *cref) { @@ -268,7 +283,7 @@ VALUE rb_make_exception(int argc, const VALUE *argv); NORETURN(void rb_method_name_error(VALUE, VALUE)); -NORETURN(void rb_fiber_start(void)); +NORETURN(void rb_fiber_start(rb_fiber_t*)); NORETURN(void rb_print_undef(VALUE, ID, rb_method_visibility_t)); NORETURN(void rb_print_undef_str(VALUE, VALUE)); @@ -281,17 +296,25 @@ rb_cref_t *rb_vm_cref(void); rb_cref_t *rb_vm_cref_replace_with_duplicated_cref(void); VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, VALUE block_handler, VALUE filename); void rb_vm_set_progname(VALUE filename); -void rb_thread_terminate_all(void); VALUE rb_vm_cbase(void); /* vm_backtrace.c */ VALUE rb_ec_backtrace_object(const rb_execution_context_t *ec); VALUE rb_ec_backtrace_str_ary(const rb_execution_context_t *ec, long lev, long n); -VALUE rb_ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n); +VALUE rb_ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n, bool skip_internal); #ifndef CharNext /* defined as CharNext[AW] on Windows. */ # ifdef HAVE_MBLEN -# define CharNext(p) ((p) + mblen((p), RUBY_MBCHAR_MAXSIZE)) +# define CharNext(p) rb_char_next(p) +static inline char * +rb_char_next(const char *p) +{ + if (p) { + int len = mblen(p, RUBY_MBCHAR_MAXSIZE); + p += len > 0 ? len : 1; + } + return (char *)p; +} # else # define CharNext(p) ((p) + 1) # endif diff --git a/ruby/eval_jump.c b/ruby/eval_jump.c index 75d4ad020..2ea73b0da 100644 --- a/ruby/eval_jump.c +++ b/ruby/eval_jump.c @@ -48,7 +48,7 @@ rb_f_at_exit(VALUE _) } struct end_proc_data { - void (*func) (); + void (*func) (VALUE); VALUE data; struct end_proc_data *next; }; diff --git a/ruby/ext/-test-/RUBY_ALIGNOF/c.c b/ruby/ext/-test-/RUBY_ALIGNOF/c.c new file mode 100644 index 000000000..7a9f7cb49 --- /dev/null +++ b/ruby/ext/-test-/RUBY_ALIGNOF/c.c @@ -0,0 +1,15 @@ +#include "ruby.h" +#include + +struct T { + char _; + double t; +}; + +RBIMPL_STATIC_ASSERT(RUBY_ALIGNOF, RUBY_ALIGNOF(double) == offsetof(struct T, t)); + +void +Init_RUBY_ALIGNOF(void) +{ + // Windows linker mandates this symbol to exist. +} diff --git a/ruby/ext/-test-/RUBY_ALIGNOF/cpp.cpp b/ruby/ext/-test-/RUBY_ALIGNOF/cpp.cpp new file mode 100644 index 000000000..ed76d49b9 --- /dev/null +++ b/ruby/ext/-test-/RUBY_ALIGNOF/cpp.cpp @@ -0,0 +1,9 @@ +#include "ruby.h" +#include + +struct T { + char _; + double t; +}; + +RBIMPL_STATIC_ASSERT(RUBY_ALIGNOF, RUBY_ALIGNOF(double) == offsetof(T, t)); diff --git a/ruby/ext/-test-/RUBY_ALIGNOF/depend b/ruby/ext/-test-/RUBY_ALIGNOF/depend new file mode 100644 index 000000000..f12fdf59c --- /dev/null +++ b/ruby/ext/-test-/RUBY_ALIGNOF/depend @@ -0,0 +1,161 @@ +# AUTOGENERATED DEPENDENCIES START +c.o: $(RUBY_EXTCONF_H) +c.o: $(arch_hdrdir)/ruby/config.h +c.o: $(hdrdir)/ruby.h +c.o: $(hdrdir)/ruby/assert.h +c.o: $(hdrdir)/ruby/backward.h +c.o: $(hdrdir)/ruby/backward/2/assume.h +c.o: $(hdrdir)/ruby/backward/2/attributes.h +c.o: $(hdrdir)/ruby/backward/2/bool.h +c.o: $(hdrdir)/ruby/backward/2/inttypes.h +c.o: $(hdrdir)/ruby/backward/2/limits.h +c.o: $(hdrdir)/ruby/backward/2/long_long.h +c.o: $(hdrdir)/ruby/backward/2/stdalign.h +c.o: $(hdrdir)/ruby/backward/2/stdarg.h +c.o: $(hdrdir)/ruby/defines.h +c.o: $(hdrdir)/ruby/intern.h +c.o: $(hdrdir)/ruby/internal/anyargs.h +c.o: $(hdrdir)/ruby/internal/arithmetic.h +c.o: $(hdrdir)/ruby/internal/arithmetic/char.h +c.o: $(hdrdir)/ruby/internal/arithmetic/double.h +c.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +c.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +c.o: $(hdrdir)/ruby/internal/arithmetic/int.h +c.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +c.o: $(hdrdir)/ruby/internal/arithmetic/long.h +c.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +c.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +c.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +c.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +c.o: $(hdrdir)/ruby/internal/arithmetic/short.h +c.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +c.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +c.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +c.o: $(hdrdir)/ruby/internal/assume.h +c.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +c.o: $(hdrdir)/ruby/internal/attr/artificial.h +c.o: $(hdrdir)/ruby/internal/attr/cold.h +c.o: $(hdrdir)/ruby/internal/attr/const.h +c.o: $(hdrdir)/ruby/internal/attr/constexpr.h +c.o: $(hdrdir)/ruby/internal/attr/deprecated.h +c.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +c.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +c.o: $(hdrdir)/ruby/internal/attr/error.h +c.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +c.o: $(hdrdir)/ruby/internal/attr/forceinline.h +c.o: $(hdrdir)/ruby/internal/attr/format.h +c.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +c.o: $(hdrdir)/ruby/internal/attr/noalias.h +c.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +c.o: $(hdrdir)/ruby/internal/attr/noexcept.h +c.o: $(hdrdir)/ruby/internal/attr/noinline.h +c.o: $(hdrdir)/ruby/internal/attr/nonnull.h +c.o: $(hdrdir)/ruby/internal/attr/noreturn.h +c.o: $(hdrdir)/ruby/internal/attr/pure.h +c.o: $(hdrdir)/ruby/internal/attr/restrict.h +c.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +c.o: $(hdrdir)/ruby/internal/attr/warning.h +c.o: $(hdrdir)/ruby/internal/attr/weakref.h +c.o: $(hdrdir)/ruby/internal/cast.h +c.o: $(hdrdir)/ruby/internal/compiler_is.h +c.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +c.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +c.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +c.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +c.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +c.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +c.o: $(hdrdir)/ruby/internal/compiler_since.h +c.o: $(hdrdir)/ruby/internal/config.h +c.o: $(hdrdir)/ruby/internal/constant_p.h +c.o: $(hdrdir)/ruby/internal/core.h +c.o: $(hdrdir)/ruby/internal/core/rarray.h +c.o: $(hdrdir)/ruby/internal/core/rbasic.h +c.o: $(hdrdir)/ruby/internal/core/rbignum.h +c.o: $(hdrdir)/ruby/internal/core/rclass.h +c.o: $(hdrdir)/ruby/internal/core/rdata.h +c.o: $(hdrdir)/ruby/internal/core/rfile.h +c.o: $(hdrdir)/ruby/internal/core/rhash.h +c.o: $(hdrdir)/ruby/internal/core/robject.h +c.o: $(hdrdir)/ruby/internal/core/rregexp.h +c.o: $(hdrdir)/ruby/internal/core/rstring.h +c.o: $(hdrdir)/ruby/internal/core/rstruct.h +c.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +c.o: $(hdrdir)/ruby/internal/ctype.h +c.o: $(hdrdir)/ruby/internal/dllexport.h +c.o: $(hdrdir)/ruby/internal/dosish.h +c.o: $(hdrdir)/ruby/internal/error.h +c.o: $(hdrdir)/ruby/internal/eval.h +c.o: $(hdrdir)/ruby/internal/event.h +c.o: $(hdrdir)/ruby/internal/fl_type.h +c.o: $(hdrdir)/ruby/internal/gc.h +c.o: $(hdrdir)/ruby/internal/glob.h +c.o: $(hdrdir)/ruby/internal/globals.h +c.o: $(hdrdir)/ruby/internal/has/attribute.h +c.o: $(hdrdir)/ruby/internal/has/builtin.h +c.o: $(hdrdir)/ruby/internal/has/c_attribute.h +c.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +c.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +c.o: $(hdrdir)/ruby/internal/has/extension.h +c.o: $(hdrdir)/ruby/internal/has/feature.h +c.o: $(hdrdir)/ruby/internal/has/warning.h +c.o: $(hdrdir)/ruby/internal/intern/array.h +c.o: $(hdrdir)/ruby/internal/intern/bignum.h +c.o: $(hdrdir)/ruby/internal/intern/class.h +c.o: $(hdrdir)/ruby/internal/intern/compar.h +c.o: $(hdrdir)/ruby/internal/intern/complex.h +c.o: $(hdrdir)/ruby/internal/intern/cont.h +c.o: $(hdrdir)/ruby/internal/intern/dir.h +c.o: $(hdrdir)/ruby/internal/intern/enum.h +c.o: $(hdrdir)/ruby/internal/intern/enumerator.h +c.o: $(hdrdir)/ruby/internal/intern/error.h +c.o: $(hdrdir)/ruby/internal/intern/eval.h +c.o: $(hdrdir)/ruby/internal/intern/file.h +c.o: $(hdrdir)/ruby/internal/intern/gc.h +c.o: $(hdrdir)/ruby/internal/intern/hash.h +c.o: $(hdrdir)/ruby/internal/intern/io.h +c.o: $(hdrdir)/ruby/internal/intern/load.h +c.o: $(hdrdir)/ruby/internal/intern/marshal.h +c.o: $(hdrdir)/ruby/internal/intern/numeric.h +c.o: $(hdrdir)/ruby/internal/intern/object.h +c.o: $(hdrdir)/ruby/internal/intern/parse.h +c.o: $(hdrdir)/ruby/internal/intern/proc.h +c.o: $(hdrdir)/ruby/internal/intern/process.h +c.o: $(hdrdir)/ruby/internal/intern/random.h +c.o: $(hdrdir)/ruby/internal/intern/range.h +c.o: $(hdrdir)/ruby/internal/intern/rational.h +c.o: $(hdrdir)/ruby/internal/intern/re.h +c.o: $(hdrdir)/ruby/internal/intern/ruby.h +c.o: $(hdrdir)/ruby/internal/intern/select.h +c.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +c.o: $(hdrdir)/ruby/internal/intern/signal.h +c.o: $(hdrdir)/ruby/internal/intern/sprintf.h +c.o: $(hdrdir)/ruby/internal/intern/string.h +c.o: $(hdrdir)/ruby/internal/intern/struct.h +c.o: $(hdrdir)/ruby/internal/intern/thread.h +c.o: $(hdrdir)/ruby/internal/intern/time.h +c.o: $(hdrdir)/ruby/internal/intern/variable.h +c.o: $(hdrdir)/ruby/internal/intern/vm.h +c.o: $(hdrdir)/ruby/internal/interpreter.h +c.o: $(hdrdir)/ruby/internal/iterator.h +c.o: $(hdrdir)/ruby/internal/memory.h +c.o: $(hdrdir)/ruby/internal/method.h +c.o: $(hdrdir)/ruby/internal/module.h +c.o: $(hdrdir)/ruby/internal/newobj.h +c.o: $(hdrdir)/ruby/internal/rgengc.h +c.o: $(hdrdir)/ruby/internal/scan_args.h +c.o: $(hdrdir)/ruby/internal/special_consts.h +c.o: $(hdrdir)/ruby/internal/static_assert.h +c.o: $(hdrdir)/ruby/internal/stdalign.h +c.o: $(hdrdir)/ruby/internal/stdbool.h +c.o: $(hdrdir)/ruby/internal/symbol.h +c.o: $(hdrdir)/ruby/internal/value.h +c.o: $(hdrdir)/ruby/internal/value_type.h +c.o: $(hdrdir)/ruby/internal/variable.h +c.o: $(hdrdir)/ruby/internal/warning_push.h +c.o: $(hdrdir)/ruby/internal/xmalloc.h +c.o: $(hdrdir)/ruby/missing.h +c.o: $(hdrdir)/ruby/ruby.h +c.o: $(hdrdir)/ruby/st.h +c.o: $(hdrdir)/ruby/subst.h +c.o: c.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/-test-/RUBY_ALIGNOF/extconf.rb b/ruby/ext/-test-/RUBY_ALIGNOF/extconf.rb new file mode 100644 index 000000000..98a370e98 --- /dev/null +++ b/ruby/ext/-test-/RUBY_ALIGNOF/extconf.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: false +$objs = %W"c.#$OBJEXT" + +$objs << "cpp.#$OBJEXT" if MakeMakefile['C++'].have_devel? + +create_makefile("-test-/RUBY_ALIGNOF") diff --git a/ruby/ext/-test-/arith_seq/extract/depend b/ruby/ext/-test-/arith_seq/extract/depend index bb0719941..ac7782527 100644 --- a/ruby/ext/-test-/arith_seq/extract/depend +++ b/ruby/ext/-test-/arith_seq/extract/depend @@ -3,8 +3,155 @@ extract.o: $(RUBY_EXTCONF_H) extract.o: $(arch_hdrdir)/ruby/config.h extract.o: $(hdrdir)/ruby/assert.h extract.o: $(hdrdir)/ruby/backward.h +extract.o: $(hdrdir)/ruby/backward/2/assume.h +extract.o: $(hdrdir)/ruby/backward/2/attributes.h +extract.o: $(hdrdir)/ruby/backward/2/bool.h +extract.o: $(hdrdir)/ruby/backward/2/inttypes.h +extract.o: $(hdrdir)/ruby/backward/2/limits.h +extract.o: $(hdrdir)/ruby/backward/2/long_long.h +extract.o: $(hdrdir)/ruby/backward/2/stdalign.h +extract.o: $(hdrdir)/ruby/backward/2/stdarg.h extract.o: $(hdrdir)/ruby/defines.h extract.o: $(hdrdir)/ruby/intern.h +extract.o: $(hdrdir)/ruby/internal/anyargs.h +extract.o: $(hdrdir)/ruby/internal/arithmetic.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/char.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/double.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/int.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/long.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/short.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +extract.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +extract.o: $(hdrdir)/ruby/internal/assume.h +extract.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +extract.o: $(hdrdir)/ruby/internal/attr/artificial.h +extract.o: $(hdrdir)/ruby/internal/attr/cold.h +extract.o: $(hdrdir)/ruby/internal/attr/const.h +extract.o: $(hdrdir)/ruby/internal/attr/constexpr.h +extract.o: $(hdrdir)/ruby/internal/attr/deprecated.h +extract.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +extract.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +extract.o: $(hdrdir)/ruby/internal/attr/error.h +extract.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +extract.o: $(hdrdir)/ruby/internal/attr/forceinline.h +extract.o: $(hdrdir)/ruby/internal/attr/format.h +extract.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +extract.o: $(hdrdir)/ruby/internal/attr/noalias.h +extract.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +extract.o: $(hdrdir)/ruby/internal/attr/noexcept.h +extract.o: $(hdrdir)/ruby/internal/attr/noinline.h +extract.o: $(hdrdir)/ruby/internal/attr/nonnull.h +extract.o: $(hdrdir)/ruby/internal/attr/noreturn.h +extract.o: $(hdrdir)/ruby/internal/attr/pure.h +extract.o: $(hdrdir)/ruby/internal/attr/restrict.h +extract.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +extract.o: $(hdrdir)/ruby/internal/attr/warning.h +extract.o: $(hdrdir)/ruby/internal/attr/weakref.h +extract.o: $(hdrdir)/ruby/internal/cast.h +extract.o: $(hdrdir)/ruby/internal/compiler_is.h +extract.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +extract.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +extract.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +extract.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +extract.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +extract.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +extract.o: $(hdrdir)/ruby/internal/compiler_since.h +extract.o: $(hdrdir)/ruby/internal/config.h +extract.o: $(hdrdir)/ruby/internal/constant_p.h +extract.o: $(hdrdir)/ruby/internal/core.h +extract.o: $(hdrdir)/ruby/internal/core/rarray.h +extract.o: $(hdrdir)/ruby/internal/core/rbasic.h +extract.o: $(hdrdir)/ruby/internal/core/rbignum.h +extract.o: $(hdrdir)/ruby/internal/core/rclass.h +extract.o: $(hdrdir)/ruby/internal/core/rdata.h +extract.o: $(hdrdir)/ruby/internal/core/rfile.h +extract.o: $(hdrdir)/ruby/internal/core/rhash.h +extract.o: $(hdrdir)/ruby/internal/core/robject.h +extract.o: $(hdrdir)/ruby/internal/core/rregexp.h +extract.o: $(hdrdir)/ruby/internal/core/rstring.h +extract.o: $(hdrdir)/ruby/internal/core/rstruct.h +extract.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +extract.o: $(hdrdir)/ruby/internal/ctype.h +extract.o: $(hdrdir)/ruby/internal/dllexport.h +extract.o: $(hdrdir)/ruby/internal/dosish.h +extract.o: $(hdrdir)/ruby/internal/error.h +extract.o: $(hdrdir)/ruby/internal/eval.h +extract.o: $(hdrdir)/ruby/internal/event.h +extract.o: $(hdrdir)/ruby/internal/fl_type.h +extract.o: $(hdrdir)/ruby/internal/gc.h +extract.o: $(hdrdir)/ruby/internal/glob.h +extract.o: $(hdrdir)/ruby/internal/globals.h +extract.o: $(hdrdir)/ruby/internal/has/attribute.h +extract.o: $(hdrdir)/ruby/internal/has/builtin.h +extract.o: $(hdrdir)/ruby/internal/has/c_attribute.h +extract.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +extract.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +extract.o: $(hdrdir)/ruby/internal/has/extension.h +extract.o: $(hdrdir)/ruby/internal/has/feature.h +extract.o: $(hdrdir)/ruby/internal/has/warning.h +extract.o: $(hdrdir)/ruby/internal/intern/array.h +extract.o: $(hdrdir)/ruby/internal/intern/bignum.h +extract.o: $(hdrdir)/ruby/internal/intern/class.h +extract.o: $(hdrdir)/ruby/internal/intern/compar.h +extract.o: $(hdrdir)/ruby/internal/intern/complex.h +extract.o: $(hdrdir)/ruby/internal/intern/cont.h +extract.o: $(hdrdir)/ruby/internal/intern/dir.h +extract.o: $(hdrdir)/ruby/internal/intern/enum.h +extract.o: $(hdrdir)/ruby/internal/intern/enumerator.h +extract.o: $(hdrdir)/ruby/internal/intern/error.h +extract.o: $(hdrdir)/ruby/internal/intern/eval.h +extract.o: $(hdrdir)/ruby/internal/intern/file.h +extract.o: $(hdrdir)/ruby/internal/intern/gc.h +extract.o: $(hdrdir)/ruby/internal/intern/hash.h +extract.o: $(hdrdir)/ruby/internal/intern/io.h +extract.o: $(hdrdir)/ruby/internal/intern/load.h +extract.o: $(hdrdir)/ruby/internal/intern/marshal.h +extract.o: $(hdrdir)/ruby/internal/intern/numeric.h +extract.o: $(hdrdir)/ruby/internal/intern/object.h +extract.o: $(hdrdir)/ruby/internal/intern/parse.h +extract.o: $(hdrdir)/ruby/internal/intern/proc.h +extract.o: $(hdrdir)/ruby/internal/intern/process.h +extract.o: $(hdrdir)/ruby/internal/intern/random.h +extract.o: $(hdrdir)/ruby/internal/intern/range.h +extract.o: $(hdrdir)/ruby/internal/intern/rational.h +extract.o: $(hdrdir)/ruby/internal/intern/re.h +extract.o: $(hdrdir)/ruby/internal/intern/ruby.h +extract.o: $(hdrdir)/ruby/internal/intern/select.h +extract.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +extract.o: $(hdrdir)/ruby/internal/intern/signal.h +extract.o: $(hdrdir)/ruby/internal/intern/sprintf.h +extract.o: $(hdrdir)/ruby/internal/intern/string.h +extract.o: $(hdrdir)/ruby/internal/intern/struct.h +extract.o: $(hdrdir)/ruby/internal/intern/thread.h +extract.o: $(hdrdir)/ruby/internal/intern/time.h +extract.o: $(hdrdir)/ruby/internal/intern/variable.h +extract.o: $(hdrdir)/ruby/internal/intern/vm.h +extract.o: $(hdrdir)/ruby/internal/interpreter.h +extract.o: $(hdrdir)/ruby/internal/iterator.h +extract.o: $(hdrdir)/ruby/internal/memory.h +extract.o: $(hdrdir)/ruby/internal/method.h +extract.o: $(hdrdir)/ruby/internal/module.h +extract.o: $(hdrdir)/ruby/internal/newobj.h +extract.o: $(hdrdir)/ruby/internal/rgengc.h +extract.o: $(hdrdir)/ruby/internal/scan_args.h +extract.o: $(hdrdir)/ruby/internal/special_consts.h +extract.o: $(hdrdir)/ruby/internal/static_assert.h +extract.o: $(hdrdir)/ruby/internal/stdalign.h +extract.o: $(hdrdir)/ruby/internal/stdbool.h +extract.o: $(hdrdir)/ruby/internal/symbol.h +extract.o: $(hdrdir)/ruby/internal/value.h +extract.o: $(hdrdir)/ruby/internal/value_type.h +extract.o: $(hdrdir)/ruby/internal/variable.h +extract.o: $(hdrdir)/ruby/internal/warning_push.h +extract.o: $(hdrdir)/ruby/internal/xmalloc.h extract.o: $(hdrdir)/ruby/missing.h extract.o: $(hdrdir)/ruby/ruby.h extract.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/array/concat/depend b/ruby/ext/-test-/array/concat/depend new file mode 100644 index 000000000..e1d49bc64 --- /dev/null +++ b/ruby/ext/-test-/array/concat/depend @@ -0,0 +1,161 @@ +# AUTOGENERATED DEPENDENCIES START +to_ary_concat.o: $(RUBY_EXTCONF_H) +to_ary_concat.o: $(arch_hdrdir)/ruby/config.h +to_ary_concat.o: $(hdrdir)/ruby.h +to_ary_concat.o: $(hdrdir)/ruby/assert.h +to_ary_concat.o: $(hdrdir)/ruby/backward.h +to_ary_concat.o: $(hdrdir)/ruby/backward/2/assume.h +to_ary_concat.o: $(hdrdir)/ruby/backward/2/attributes.h +to_ary_concat.o: $(hdrdir)/ruby/backward/2/bool.h +to_ary_concat.o: $(hdrdir)/ruby/backward/2/inttypes.h +to_ary_concat.o: $(hdrdir)/ruby/backward/2/limits.h +to_ary_concat.o: $(hdrdir)/ruby/backward/2/long_long.h +to_ary_concat.o: $(hdrdir)/ruby/backward/2/stdalign.h +to_ary_concat.o: $(hdrdir)/ruby/backward/2/stdarg.h +to_ary_concat.o: $(hdrdir)/ruby/defines.h +to_ary_concat.o: $(hdrdir)/ruby/intern.h +to_ary_concat.o: $(hdrdir)/ruby/internal/anyargs.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/char.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/double.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/int.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/long.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/short.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +to_ary_concat.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +to_ary_concat.o: $(hdrdir)/ruby/internal/assume.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/artificial.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/cold.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/const.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/constexpr.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/deprecated.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/error.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/forceinline.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/format.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/noalias.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/noexcept.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/noinline.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/nonnull.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/noreturn.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/pure.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/restrict.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/warning.h +to_ary_concat.o: $(hdrdir)/ruby/internal/attr/weakref.h +to_ary_concat.o: $(hdrdir)/ruby/internal/cast.h +to_ary_concat.o: $(hdrdir)/ruby/internal/compiler_is.h +to_ary_concat.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +to_ary_concat.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +to_ary_concat.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +to_ary_concat.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +to_ary_concat.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +to_ary_concat.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +to_ary_concat.o: $(hdrdir)/ruby/internal/compiler_since.h +to_ary_concat.o: $(hdrdir)/ruby/internal/config.h +to_ary_concat.o: $(hdrdir)/ruby/internal/constant_p.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core/rarray.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core/rbasic.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core/rbignum.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core/rclass.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core/rdata.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core/rfile.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core/rhash.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core/robject.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core/rregexp.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core/rstring.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core/rstruct.h +to_ary_concat.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +to_ary_concat.o: $(hdrdir)/ruby/internal/ctype.h +to_ary_concat.o: $(hdrdir)/ruby/internal/dllexport.h +to_ary_concat.o: $(hdrdir)/ruby/internal/dosish.h +to_ary_concat.o: $(hdrdir)/ruby/internal/error.h +to_ary_concat.o: $(hdrdir)/ruby/internal/eval.h +to_ary_concat.o: $(hdrdir)/ruby/internal/event.h +to_ary_concat.o: $(hdrdir)/ruby/internal/fl_type.h +to_ary_concat.o: $(hdrdir)/ruby/internal/gc.h +to_ary_concat.o: $(hdrdir)/ruby/internal/glob.h +to_ary_concat.o: $(hdrdir)/ruby/internal/globals.h +to_ary_concat.o: $(hdrdir)/ruby/internal/has/attribute.h +to_ary_concat.o: $(hdrdir)/ruby/internal/has/builtin.h +to_ary_concat.o: $(hdrdir)/ruby/internal/has/c_attribute.h +to_ary_concat.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +to_ary_concat.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +to_ary_concat.o: $(hdrdir)/ruby/internal/has/extension.h +to_ary_concat.o: $(hdrdir)/ruby/internal/has/feature.h +to_ary_concat.o: $(hdrdir)/ruby/internal/has/warning.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/array.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/bignum.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/class.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/compar.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/complex.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/cont.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/dir.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/enum.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/enumerator.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/error.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/eval.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/file.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/gc.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/hash.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/io.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/load.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/marshal.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/numeric.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/object.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/parse.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/proc.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/process.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/random.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/range.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/rational.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/re.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/ruby.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/select.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/signal.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/sprintf.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/string.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/struct.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/thread.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/time.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/variable.h +to_ary_concat.o: $(hdrdir)/ruby/internal/intern/vm.h +to_ary_concat.o: $(hdrdir)/ruby/internal/interpreter.h +to_ary_concat.o: $(hdrdir)/ruby/internal/iterator.h +to_ary_concat.o: $(hdrdir)/ruby/internal/memory.h +to_ary_concat.o: $(hdrdir)/ruby/internal/method.h +to_ary_concat.o: $(hdrdir)/ruby/internal/module.h +to_ary_concat.o: $(hdrdir)/ruby/internal/newobj.h +to_ary_concat.o: $(hdrdir)/ruby/internal/rgengc.h +to_ary_concat.o: $(hdrdir)/ruby/internal/scan_args.h +to_ary_concat.o: $(hdrdir)/ruby/internal/special_consts.h +to_ary_concat.o: $(hdrdir)/ruby/internal/static_assert.h +to_ary_concat.o: $(hdrdir)/ruby/internal/stdalign.h +to_ary_concat.o: $(hdrdir)/ruby/internal/stdbool.h +to_ary_concat.o: $(hdrdir)/ruby/internal/symbol.h +to_ary_concat.o: $(hdrdir)/ruby/internal/value.h +to_ary_concat.o: $(hdrdir)/ruby/internal/value_type.h +to_ary_concat.o: $(hdrdir)/ruby/internal/variable.h +to_ary_concat.o: $(hdrdir)/ruby/internal/warning_push.h +to_ary_concat.o: $(hdrdir)/ruby/internal/xmalloc.h +to_ary_concat.o: $(hdrdir)/ruby/missing.h +to_ary_concat.o: $(hdrdir)/ruby/ruby.h +to_ary_concat.o: $(hdrdir)/ruby/st.h +to_ary_concat.o: $(hdrdir)/ruby/subst.h +to_ary_concat.o: to_ary_concat.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/-test-/array/concat/extconf.rb b/ruby/ext/-test-/array/concat/extconf.rb new file mode 100644 index 000000000..cdd79126c --- /dev/null +++ b/ruby/ext/-test-/array/concat/extconf.rb @@ -0,0 +1,2 @@ +# frozen_string_literal: false +create_makefile("-test-/array/to_ary_concat") diff --git a/ruby/ext/-test-/array/concat/to_ary_concat.c b/ruby/ext/-test-/array/concat/to_ary_concat.c new file mode 100644 index 000000000..07a96d390 --- /dev/null +++ b/ruby/ext/-test-/array/concat/to_ary_concat.c @@ -0,0 +1,38 @@ +#include "ruby.h" + +// Bar + +typedef struct { + int dummy; +} Bar; + +static rb_data_type_t Bar_type = { + "Bar", + {NULL, RUBY_TYPED_DEFAULT_FREE, NULL }, +}; + +static VALUE +Bar_alloc(VALUE klass) +{ + return TypedData_Wrap_Struct(klass, &Bar_type, NULL); +} + +static VALUE +Bar_to_ary(VALUE _self) +{ + VALUE ary = rb_ary_new2(2); + VALUE foo = rb_ary_new2(0); + rb_ary_push(ary, foo); + rb_ary_push(ary, foo); + rb_ary_push(ary, foo); + return ary; +} + +void +Init_to_ary_concat(void) +{ + VALUE mBug = rb_define_module("Bug"); + VALUE bar = rb_define_class_under(mBug, "Bar", rb_cObject); + rb_define_alloc_func(bar, Bar_alloc); + rb_define_method(bar, "to_ary", Bar_to_ary, 0); +} diff --git a/ruby/ext/-test-/array/resize/depend b/ruby/ext/-test-/array/resize/depend index a03cc47d5..bd0b1bf28 100644 --- a/ruby/ext/-test-/array/resize/depend +++ b/ruby/ext/-test-/array/resize/depend @@ -3,8 +3,155 @@ resize.o: $(RUBY_EXTCONF_H) resize.o: $(arch_hdrdir)/ruby/config.h resize.o: $(hdrdir)/ruby/assert.h resize.o: $(hdrdir)/ruby/backward.h +resize.o: $(hdrdir)/ruby/backward/2/assume.h +resize.o: $(hdrdir)/ruby/backward/2/attributes.h +resize.o: $(hdrdir)/ruby/backward/2/bool.h +resize.o: $(hdrdir)/ruby/backward/2/inttypes.h +resize.o: $(hdrdir)/ruby/backward/2/limits.h +resize.o: $(hdrdir)/ruby/backward/2/long_long.h +resize.o: $(hdrdir)/ruby/backward/2/stdalign.h +resize.o: $(hdrdir)/ruby/backward/2/stdarg.h resize.o: $(hdrdir)/ruby/defines.h resize.o: $(hdrdir)/ruby/intern.h +resize.o: $(hdrdir)/ruby/internal/anyargs.h +resize.o: $(hdrdir)/ruby/internal/arithmetic.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/char.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/double.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/int.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/long.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/short.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +resize.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +resize.o: $(hdrdir)/ruby/internal/assume.h +resize.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +resize.o: $(hdrdir)/ruby/internal/attr/artificial.h +resize.o: $(hdrdir)/ruby/internal/attr/cold.h +resize.o: $(hdrdir)/ruby/internal/attr/const.h +resize.o: $(hdrdir)/ruby/internal/attr/constexpr.h +resize.o: $(hdrdir)/ruby/internal/attr/deprecated.h +resize.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +resize.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +resize.o: $(hdrdir)/ruby/internal/attr/error.h +resize.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +resize.o: $(hdrdir)/ruby/internal/attr/forceinline.h +resize.o: $(hdrdir)/ruby/internal/attr/format.h +resize.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +resize.o: $(hdrdir)/ruby/internal/attr/noalias.h +resize.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +resize.o: $(hdrdir)/ruby/internal/attr/noexcept.h +resize.o: $(hdrdir)/ruby/internal/attr/noinline.h +resize.o: $(hdrdir)/ruby/internal/attr/nonnull.h +resize.o: $(hdrdir)/ruby/internal/attr/noreturn.h +resize.o: $(hdrdir)/ruby/internal/attr/pure.h +resize.o: $(hdrdir)/ruby/internal/attr/restrict.h +resize.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +resize.o: $(hdrdir)/ruby/internal/attr/warning.h +resize.o: $(hdrdir)/ruby/internal/attr/weakref.h +resize.o: $(hdrdir)/ruby/internal/cast.h +resize.o: $(hdrdir)/ruby/internal/compiler_is.h +resize.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +resize.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +resize.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +resize.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +resize.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +resize.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +resize.o: $(hdrdir)/ruby/internal/compiler_since.h +resize.o: $(hdrdir)/ruby/internal/config.h +resize.o: $(hdrdir)/ruby/internal/constant_p.h +resize.o: $(hdrdir)/ruby/internal/core.h +resize.o: $(hdrdir)/ruby/internal/core/rarray.h +resize.o: $(hdrdir)/ruby/internal/core/rbasic.h +resize.o: $(hdrdir)/ruby/internal/core/rbignum.h +resize.o: $(hdrdir)/ruby/internal/core/rclass.h +resize.o: $(hdrdir)/ruby/internal/core/rdata.h +resize.o: $(hdrdir)/ruby/internal/core/rfile.h +resize.o: $(hdrdir)/ruby/internal/core/rhash.h +resize.o: $(hdrdir)/ruby/internal/core/robject.h +resize.o: $(hdrdir)/ruby/internal/core/rregexp.h +resize.o: $(hdrdir)/ruby/internal/core/rstring.h +resize.o: $(hdrdir)/ruby/internal/core/rstruct.h +resize.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +resize.o: $(hdrdir)/ruby/internal/ctype.h +resize.o: $(hdrdir)/ruby/internal/dllexport.h +resize.o: $(hdrdir)/ruby/internal/dosish.h +resize.o: $(hdrdir)/ruby/internal/error.h +resize.o: $(hdrdir)/ruby/internal/eval.h +resize.o: $(hdrdir)/ruby/internal/event.h +resize.o: $(hdrdir)/ruby/internal/fl_type.h +resize.o: $(hdrdir)/ruby/internal/gc.h +resize.o: $(hdrdir)/ruby/internal/glob.h +resize.o: $(hdrdir)/ruby/internal/globals.h +resize.o: $(hdrdir)/ruby/internal/has/attribute.h +resize.o: $(hdrdir)/ruby/internal/has/builtin.h +resize.o: $(hdrdir)/ruby/internal/has/c_attribute.h +resize.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +resize.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +resize.o: $(hdrdir)/ruby/internal/has/extension.h +resize.o: $(hdrdir)/ruby/internal/has/feature.h +resize.o: $(hdrdir)/ruby/internal/has/warning.h +resize.o: $(hdrdir)/ruby/internal/intern/array.h +resize.o: $(hdrdir)/ruby/internal/intern/bignum.h +resize.o: $(hdrdir)/ruby/internal/intern/class.h +resize.o: $(hdrdir)/ruby/internal/intern/compar.h +resize.o: $(hdrdir)/ruby/internal/intern/complex.h +resize.o: $(hdrdir)/ruby/internal/intern/cont.h +resize.o: $(hdrdir)/ruby/internal/intern/dir.h +resize.o: $(hdrdir)/ruby/internal/intern/enum.h +resize.o: $(hdrdir)/ruby/internal/intern/enumerator.h +resize.o: $(hdrdir)/ruby/internal/intern/error.h +resize.o: $(hdrdir)/ruby/internal/intern/eval.h +resize.o: $(hdrdir)/ruby/internal/intern/file.h +resize.o: $(hdrdir)/ruby/internal/intern/gc.h +resize.o: $(hdrdir)/ruby/internal/intern/hash.h +resize.o: $(hdrdir)/ruby/internal/intern/io.h +resize.o: $(hdrdir)/ruby/internal/intern/load.h +resize.o: $(hdrdir)/ruby/internal/intern/marshal.h +resize.o: $(hdrdir)/ruby/internal/intern/numeric.h +resize.o: $(hdrdir)/ruby/internal/intern/object.h +resize.o: $(hdrdir)/ruby/internal/intern/parse.h +resize.o: $(hdrdir)/ruby/internal/intern/proc.h +resize.o: $(hdrdir)/ruby/internal/intern/process.h +resize.o: $(hdrdir)/ruby/internal/intern/random.h +resize.o: $(hdrdir)/ruby/internal/intern/range.h +resize.o: $(hdrdir)/ruby/internal/intern/rational.h +resize.o: $(hdrdir)/ruby/internal/intern/re.h +resize.o: $(hdrdir)/ruby/internal/intern/ruby.h +resize.o: $(hdrdir)/ruby/internal/intern/select.h +resize.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +resize.o: $(hdrdir)/ruby/internal/intern/signal.h +resize.o: $(hdrdir)/ruby/internal/intern/sprintf.h +resize.o: $(hdrdir)/ruby/internal/intern/string.h +resize.o: $(hdrdir)/ruby/internal/intern/struct.h +resize.o: $(hdrdir)/ruby/internal/intern/thread.h +resize.o: $(hdrdir)/ruby/internal/intern/time.h +resize.o: $(hdrdir)/ruby/internal/intern/variable.h +resize.o: $(hdrdir)/ruby/internal/intern/vm.h +resize.o: $(hdrdir)/ruby/internal/interpreter.h +resize.o: $(hdrdir)/ruby/internal/iterator.h +resize.o: $(hdrdir)/ruby/internal/memory.h +resize.o: $(hdrdir)/ruby/internal/method.h +resize.o: $(hdrdir)/ruby/internal/module.h +resize.o: $(hdrdir)/ruby/internal/newobj.h +resize.o: $(hdrdir)/ruby/internal/rgengc.h +resize.o: $(hdrdir)/ruby/internal/scan_args.h +resize.o: $(hdrdir)/ruby/internal/special_consts.h +resize.o: $(hdrdir)/ruby/internal/static_assert.h +resize.o: $(hdrdir)/ruby/internal/stdalign.h +resize.o: $(hdrdir)/ruby/internal/stdbool.h +resize.o: $(hdrdir)/ruby/internal/symbol.h +resize.o: $(hdrdir)/ruby/internal/value.h +resize.o: $(hdrdir)/ruby/internal/value_type.h +resize.o: $(hdrdir)/ruby/internal/variable.h +resize.o: $(hdrdir)/ruby/internal/warning_push.h +resize.o: $(hdrdir)/ruby/internal/xmalloc.h resize.o: $(hdrdir)/ruby/missing.h resize.o: $(hdrdir)/ruby/ruby.h resize.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/array/resize/resize.c b/ruby/ext/-test-/array/resize/resize.c index 08bcee3e7..cfe910ebe 100644 --- a/ruby/ext/-test-/array/resize/resize.c +++ b/ruby/ext/-test-/array/resize/resize.c @@ -1,7 +1,7 @@ #include "ruby/ruby.h" static VALUE -ary_resize(VALUE ary, VALUE len) +ary_resize(VALUE klass, VALUE ary, VALUE len) { rb_ary_resize(ary, NUM2LONG(len)); return ary; @@ -10,5 +10,7 @@ ary_resize(VALUE ary, VALUE len) void Init_resize(void) { - rb_define_method(rb_cArray, "__resize__", ary_resize, 1); + VALUE mBug = rb_define_module("Bug"); + VALUE klass = rb_define_class_under(mBug, "Array", rb_cObject); + rb_define_singleton_method(klass, "__resize__", ary_resize, 2); } diff --git a/ruby/ext/-test-/auto_ext.rb b/ruby/ext/-test-/auto_ext.rb index 71606a9dd..58c49c177 100644 --- a/ruby/ext/-test-/auto_ext.rb +++ b/ruby/ext/-test-/auto_ext.rb @@ -6,5 +6,6 @@ def auto_ext(feat = $0[%r[/ext/(-test-/.*)/extconf.rb\z], 1], inc: false) inits.delete("init") inits.map! {|s|"X(#{s})"} $defs << "-DTEST_INIT_FUNCS(X)=\"#{inits.join(' ')}\"" + create_header create_makefile(feat) end diff --git a/ruby/ext/-test-/bignum/big2str.c b/ruby/ext/-test-/bignum/big2str.c index ec4bde291..255e8ad72 100644 --- a/ruby/ext/-test-/bignum/big2str.c +++ b/ruby/ext/-test-/bignum/big2str.c @@ -1,4 +1,4 @@ -#include "internal.h" +#include "internal/bignum.h" static VALUE big(VALUE x) @@ -12,7 +12,7 @@ big(VALUE x) } static VALUE -big2str_generic(VALUE x, VALUE vbase) +big2str_generic(VALUE klass, VALUE x, VALUE vbase) { int base = NUM2INT(vbase); if (base < 2 || 36 < base) @@ -23,7 +23,7 @@ big2str_generic(VALUE x, VALUE vbase) #define POW2_P(x) (((x)&((x)-1))==0) static VALUE -big2str_poweroftwo(VALUE x, VALUE vbase) +big2str_poweroftwo(VALUE klass, VALUE x, VALUE vbase) { int base = NUM2INT(vbase); if (base < 2 || 36 < base || !POW2_P(base)) @@ -33,7 +33,7 @@ big2str_poweroftwo(VALUE x, VALUE vbase) #if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H) static VALUE -big2str_gmp(VALUE x, VALUE vbase) +big2str_gmp(VALUE klass, VALUE x, VALUE vbase) { int base = NUM2INT(vbase); if (base < 2 || 36 < base) @@ -47,7 +47,7 @@ big2str_gmp(VALUE x, VALUE vbase) void Init_big2str(VALUE klass) { - rb_define_method(rb_cInteger, "big2str_generic", big2str_generic, 1); - rb_define_method(rb_cInteger, "big2str_poweroftwo", big2str_poweroftwo, 1); - rb_define_method(rb_cInteger, "big2str_gmp", big2str_gmp, 1); + rb_define_singleton_method(klass, "big2str_generic", big2str_generic, 2); + rb_define_singleton_method(klass, "big2str_poweroftwo", big2str_poweroftwo, 2); + rb_define_singleton_method(klass, "big2str_gmp", big2str_gmp, 2); } diff --git a/ruby/ext/-test-/bignum/bigzero.c b/ruby/ext/-test-/bignum/bigzero.c index 35117db7a..e2bfebcd3 100644 --- a/ruby/ext/-test-/bignum/bigzero.c +++ b/ruby/ext/-test-/bignum/bigzero.c @@ -1,4 +1,4 @@ -#include "internal.h" +#include "internal/bignum.h" static VALUE bug_big_zero(VALUE self, VALUE length) diff --git a/ruby/ext/-test-/bignum/depend b/ruby/ext/-test-/bignum/depend index 38c9f6114..28edc15f2 100644 --- a/ruby/ext/-test-/bignum/depend +++ b/ruby/ext/-test-/bignum/depend @@ -1,50 +1,635 @@ # AUTOGENERATED DEPENDENCIES START big2str.o: $(RUBY_EXTCONF_H) big2str.o: $(arch_hdrdir)/ruby/config.h -big2str.o: $(hdrdir)/ruby.h big2str.o: $(hdrdir)/ruby/assert.h big2str.o: $(hdrdir)/ruby/backward.h +big2str.o: $(hdrdir)/ruby/backward/2/assume.h +big2str.o: $(hdrdir)/ruby/backward/2/attributes.h +big2str.o: $(hdrdir)/ruby/backward/2/bool.h +big2str.o: $(hdrdir)/ruby/backward/2/inttypes.h +big2str.o: $(hdrdir)/ruby/backward/2/limits.h +big2str.o: $(hdrdir)/ruby/backward/2/long_long.h +big2str.o: $(hdrdir)/ruby/backward/2/stdalign.h +big2str.o: $(hdrdir)/ruby/backward/2/stdarg.h big2str.o: $(hdrdir)/ruby/defines.h big2str.o: $(hdrdir)/ruby/intern.h +big2str.o: $(hdrdir)/ruby/internal/anyargs.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/char.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/double.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/int.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/long.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/short.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +big2str.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +big2str.o: $(hdrdir)/ruby/internal/assume.h +big2str.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +big2str.o: $(hdrdir)/ruby/internal/attr/artificial.h +big2str.o: $(hdrdir)/ruby/internal/attr/cold.h +big2str.o: $(hdrdir)/ruby/internal/attr/const.h +big2str.o: $(hdrdir)/ruby/internal/attr/constexpr.h +big2str.o: $(hdrdir)/ruby/internal/attr/deprecated.h +big2str.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +big2str.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +big2str.o: $(hdrdir)/ruby/internal/attr/error.h +big2str.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +big2str.o: $(hdrdir)/ruby/internal/attr/forceinline.h +big2str.o: $(hdrdir)/ruby/internal/attr/format.h +big2str.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +big2str.o: $(hdrdir)/ruby/internal/attr/noalias.h +big2str.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +big2str.o: $(hdrdir)/ruby/internal/attr/noexcept.h +big2str.o: $(hdrdir)/ruby/internal/attr/noinline.h +big2str.o: $(hdrdir)/ruby/internal/attr/nonnull.h +big2str.o: $(hdrdir)/ruby/internal/attr/noreturn.h +big2str.o: $(hdrdir)/ruby/internal/attr/pure.h +big2str.o: $(hdrdir)/ruby/internal/attr/restrict.h +big2str.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +big2str.o: $(hdrdir)/ruby/internal/attr/warning.h +big2str.o: $(hdrdir)/ruby/internal/attr/weakref.h +big2str.o: $(hdrdir)/ruby/internal/cast.h +big2str.o: $(hdrdir)/ruby/internal/compiler_is.h +big2str.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +big2str.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +big2str.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +big2str.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +big2str.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +big2str.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +big2str.o: $(hdrdir)/ruby/internal/compiler_since.h +big2str.o: $(hdrdir)/ruby/internal/config.h +big2str.o: $(hdrdir)/ruby/internal/constant_p.h +big2str.o: $(hdrdir)/ruby/internal/core.h +big2str.o: $(hdrdir)/ruby/internal/core/rarray.h +big2str.o: $(hdrdir)/ruby/internal/core/rbasic.h +big2str.o: $(hdrdir)/ruby/internal/core/rbignum.h +big2str.o: $(hdrdir)/ruby/internal/core/rclass.h +big2str.o: $(hdrdir)/ruby/internal/core/rdata.h +big2str.o: $(hdrdir)/ruby/internal/core/rfile.h +big2str.o: $(hdrdir)/ruby/internal/core/rhash.h +big2str.o: $(hdrdir)/ruby/internal/core/robject.h +big2str.o: $(hdrdir)/ruby/internal/core/rregexp.h +big2str.o: $(hdrdir)/ruby/internal/core/rstring.h +big2str.o: $(hdrdir)/ruby/internal/core/rstruct.h +big2str.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +big2str.o: $(hdrdir)/ruby/internal/ctype.h +big2str.o: $(hdrdir)/ruby/internal/dllexport.h +big2str.o: $(hdrdir)/ruby/internal/dosish.h +big2str.o: $(hdrdir)/ruby/internal/error.h +big2str.o: $(hdrdir)/ruby/internal/eval.h +big2str.o: $(hdrdir)/ruby/internal/event.h +big2str.o: $(hdrdir)/ruby/internal/fl_type.h +big2str.o: $(hdrdir)/ruby/internal/gc.h +big2str.o: $(hdrdir)/ruby/internal/glob.h +big2str.o: $(hdrdir)/ruby/internal/globals.h +big2str.o: $(hdrdir)/ruby/internal/has/attribute.h +big2str.o: $(hdrdir)/ruby/internal/has/builtin.h +big2str.o: $(hdrdir)/ruby/internal/has/c_attribute.h +big2str.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +big2str.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +big2str.o: $(hdrdir)/ruby/internal/has/extension.h +big2str.o: $(hdrdir)/ruby/internal/has/feature.h +big2str.o: $(hdrdir)/ruby/internal/has/warning.h +big2str.o: $(hdrdir)/ruby/internal/intern/array.h +big2str.o: $(hdrdir)/ruby/internal/intern/bignum.h +big2str.o: $(hdrdir)/ruby/internal/intern/class.h +big2str.o: $(hdrdir)/ruby/internal/intern/compar.h +big2str.o: $(hdrdir)/ruby/internal/intern/complex.h +big2str.o: $(hdrdir)/ruby/internal/intern/cont.h +big2str.o: $(hdrdir)/ruby/internal/intern/dir.h +big2str.o: $(hdrdir)/ruby/internal/intern/enum.h +big2str.o: $(hdrdir)/ruby/internal/intern/enumerator.h +big2str.o: $(hdrdir)/ruby/internal/intern/error.h +big2str.o: $(hdrdir)/ruby/internal/intern/eval.h +big2str.o: $(hdrdir)/ruby/internal/intern/file.h +big2str.o: $(hdrdir)/ruby/internal/intern/gc.h +big2str.o: $(hdrdir)/ruby/internal/intern/hash.h +big2str.o: $(hdrdir)/ruby/internal/intern/io.h +big2str.o: $(hdrdir)/ruby/internal/intern/load.h +big2str.o: $(hdrdir)/ruby/internal/intern/marshal.h +big2str.o: $(hdrdir)/ruby/internal/intern/numeric.h +big2str.o: $(hdrdir)/ruby/internal/intern/object.h +big2str.o: $(hdrdir)/ruby/internal/intern/parse.h +big2str.o: $(hdrdir)/ruby/internal/intern/proc.h +big2str.o: $(hdrdir)/ruby/internal/intern/process.h +big2str.o: $(hdrdir)/ruby/internal/intern/random.h +big2str.o: $(hdrdir)/ruby/internal/intern/range.h +big2str.o: $(hdrdir)/ruby/internal/intern/rational.h +big2str.o: $(hdrdir)/ruby/internal/intern/re.h +big2str.o: $(hdrdir)/ruby/internal/intern/ruby.h +big2str.o: $(hdrdir)/ruby/internal/intern/select.h +big2str.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +big2str.o: $(hdrdir)/ruby/internal/intern/signal.h +big2str.o: $(hdrdir)/ruby/internal/intern/sprintf.h +big2str.o: $(hdrdir)/ruby/internal/intern/string.h +big2str.o: $(hdrdir)/ruby/internal/intern/struct.h +big2str.o: $(hdrdir)/ruby/internal/intern/thread.h +big2str.o: $(hdrdir)/ruby/internal/intern/time.h +big2str.o: $(hdrdir)/ruby/internal/intern/variable.h +big2str.o: $(hdrdir)/ruby/internal/intern/vm.h +big2str.o: $(hdrdir)/ruby/internal/interpreter.h +big2str.o: $(hdrdir)/ruby/internal/iterator.h +big2str.o: $(hdrdir)/ruby/internal/memory.h +big2str.o: $(hdrdir)/ruby/internal/method.h +big2str.o: $(hdrdir)/ruby/internal/module.h +big2str.o: $(hdrdir)/ruby/internal/newobj.h +big2str.o: $(hdrdir)/ruby/internal/rgengc.h +big2str.o: $(hdrdir)/ruby/internal/scan_args.h +big2str.o: $(hdrdir)/ruby/internal/special_consts.h +big2str.o: $(hdrdir)/ruby/internal/static_assert.h +big2str.o: $(hdrdir)/ruby/internal/stdalign.h +big2str.o: $(hdrdir)/ruby/internal/stdbool.h +big2str.o: $(hdrdir)/ruby/internal/symbol.h +big2str.o: $(hdrdir)/ruby/internal/value.h +big2str.o: $(hdrdir)/ruby/internal/value_type.h +big2str.o: $(hdrdir)/ruby/internal/variable.h +big2str.o: $(hdrdir)/ruby/internal/warning_push.h +big2str.o: $(hdrdir)/ruby/internal/xmalloc.h big2str.o: $(hdrdir)/ruby/missing.h big2str.o: $(hdrdir)/ruby/ruby.h big2str.o: $(hdrdir)/ruby/st.h big2str.o: $(hdrdir)/ruby/subst.h -big2str.o: $(top_srcdir)/internal.h +big2str.o: $(top_srcdir)/internal/bignum.h big2str.o: big2str.c bigzero.o: $(RUBY_EXTCONF_H) bigzero.o: $(arch_hdrdir)/ruby/config.h -bigzero.o: $(hdrdir)/ruby.h bigzero.o: $(hdrdir)/ruby/assert.h bigzero.o: $(hdrdir)/ruby/backward.h +bigzero.o: $(hdrdir)/ruby/backward/2/assume.h +bigzero.o: $(hdrdir)/ruby/backward/2/attributes.h +bigzero.o: $(hdrdir)/ruby/backward/2/bool.h +bigzero.o: $(hdrdir)/ruby/backward/2/inttypes.h +bigzero.o: $(hdrdir)/ruby/backward/2/limits.h +bigzero.o: $(hdrdir)/ruby/backward/2/long_long.h +bigzero.o: $(hdrdir)/ruby/backward/2/stdalign.h +bigzero.o: $(hdrdir)/ruby/backward/2/stdarg.h bigzero.o: $(hdrdir)/ruby/defines.h bigzero.o: $(hdrdir)/ruby/intern.h +bigzero.o: $(hdrdir)/ruby/internal/anyargs.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/char.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/double.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/int.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/long.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/short.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +bigzero.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +bigzero.o: $(hdrdir)/ruby/internal/assume.h +bigzero.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +bigzero.o: $(hdrdir)/ruby/internal/attr/artificial.h +bigzero.o: $(hdrdir)/ruby/internal/attr/cold.h +bigzero.o: $(hdrdir)/ruby/internal/attr/const.h +bigzero.o: $(hdrdir)/ruby/internal/attr/constexpr.h +bigzero.o: $(hdrdir)/ruby/internal/attr/deprecated.h +bigzero.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +bigzero.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +bigzero.o: $(hdrdir)/ruby/internal/attr/error.h +bigzero.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +bigzero.o: $(hdrdir)/ruby/internal/attr/forceinline.h +bigzero.o: $(hdrdir)/ruby/internal/attr/format.h +bigzero.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +bigzero.o: $(hdrdir)/ruby/internal/attr/noalias.h +bigzero.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +bigzero.o: $(hdrdir)/ruby/internal/attr/noexcept.h +bigzero.o: $(hdrdir)/ruby/internal/attr/noinline.h +bigzero.o: $(hdrdir)/ruby/internal/attr/nonnull.h +bigzero.o: $(hdrdir)/ruby/internal/attr/noreturn.h +bigzero.o: $(hdrdir)/ruby/internal/attr/pure.h +bigzero.o: $(hdrdir)/ruby/internal/attr/restrict.h +bigzero.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +bigzero.o: $(hdrdir)/ruby/internal/attr/warning.h +bigzero.o: $(hdrdir)/ruby/internal/attr/weakref.h +bigzero.o: $(hdrdir)/ruby/internal/cast.h +bigzero.o: $(hdrdir)/ruby/internal/compiler_is.h +bigzero.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +bigzero.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +bigzero.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +bigzero.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +bigzero.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +bigzero.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +bigzero.o: $(hdrdir)/ruby/internal/compiler_since.h +bigzero.o: $(hdrdir)/ruby/internal/config.h +bigzero.o: $(hdrdir)/ruby/internal/constant_p.h +bigzero.o: $(hdrdir)/ruby/internal/core.h +bigzero.o: $(hdrdir)/ruby/internal/core/rarray.h +bigzero.o: $(hdrdir)/ruby/internal/core/rbasic.h +bigzero.o: $(hdrdir)/ruby/internal/core/rbignum.h +bigzero.o: $(hdrdir)/ruby/internal/core/rclass.h +bigzero.o: $(hdrdir)/ruby/internal/core/rdata.h +bigzero.o: $(hdrdir)/ruby/internal/core/rfile.h +bigzero.o: $(hdrdir)/ruby/internal/core/rhash.h +bigzero.o: $(hdrdir)/ruby/internal/core/robject.h +bigzero.o: $(hdrdir)/ruby/internal/core/rregexp.h +bigzero.o: $(hdrdir)/ruby/internal/core/rstring.h +bigzero.o: $(hdrdir)/ruby/internal/core/rstruct.h +bigzero.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +bigzero.o: $(hdrdir)/ruby/internal/ctype.h +bigzero.o: $(hdrdir)/ruby/internal/dllexport.h +bigzero.o: $(hdrdir)/ruby/internal/dosish.h +bigzero.o: $(hdrdir)/ruby/internal/error.h +bigzero.o: $(hdrdir)/ruby/internal/eval.h +bigzero.o: $(hdrdir)/ruby/internal/event.h +bigzero.o: $(hdrdir)/ruby/internal/fl_type.h +bigzero.o: $(hdrdir)/ruby/internal/gc.h +bigzero.o: $(hdrdir)/ruby/internal/glob.h +bigzero.o: $(hdrdir)/ruby/internal/globals.h +bigzero.o: $(hdrdir)/ruby/internal/has/attribute.h +bigzero.o: $(hdrdir)/ruby/internal/has/builtin.h +bigzero.o: $(hdrdir)/ruby/internal/has/c_attribute.h +bigzero.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +bigzero.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +bigzero.o: $(hdrdir)/ruby/internal/has/extension.h +bigzero.o: $(hdrdir)/ruby/internal/has/feature.h +bigzero.o: $(hdrdir)/ruby/internal/has/warning.h +bigzero.o: $(hdrdir)/ruby/internal/intern/array.h +bigzero.o: $(hdrdir)/ruby/internal/intern/bignum.h +bigzero.o: $(hdrdir)/ruby/internal/intern/class.h +bigzero.o: $(hdrdir)/ruby/internal/intern/compar.h +bigzero.o: $(hdrdir)/ruby/internal/intern/complex.h +bigzero.o: $(hdrdir)/ruby/internal/intern/cont.h +bigzero.o: $(hdrdir)/ruby/internal/intern/dir.h +bigzero.o: $(hdrdir)/ruby/internal/intern/enum.h +bigzero.o: $(hdrdir)/ruby/internal/intern/enumerator.h +bigzero.o: $(hdrdir)/ruby/internal/intern/error.h +bigzero.o: $(hdrdir)/ruby/internal/intern/eval.h +bigzero.o: $(hdrdir)/ruby/internal/intern/file.h +bigzero.o: $(hdrdir)/ruby/internal/intern/gc.h +bigzero.o: $(hdrdir)/ruby/internal/intern/hash.h +bigzero.o: $(hdrdir)/ruby/internal/intern/io.h +bigzero.o: $(hdrdir)/ruby/internal/intern/load.h +bigzero.o: $(hdrdir)/ruby/internal/intern/marshal.h +bigzero.o: $(hdrdir)/ruby/internal/intern/numeric.h +bigzero.o: $(hdrdir)/ruby/internal/intern/object.h +bigzero.o: $(hdrdir)/ruby/internal/intern/parse.h +bigzero.o: $(hdrdir)/ruby/internal/intern/proc.h +bigzero.o: $(hdrdir)/ruby/internal/intern/process.h +bigzero.o: $(hdrdir)/ruby/internal/intern/random.h +bigzero.o: $(hdrdir)/ruby/internal/intern/range.h +bigzero.o: $(hdrdir)/ruby/internal/intern/rational.h +bigzero.o: $(hdrdir)/ruby/internal/intern/re.h +bigzero.o: $(hdrdir)/ruby/internal/intern/ruby.h +bigzero.o: $(hdrdir)/ruby/internal/intern/select.h +bigzero.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +bigzero.o: $(hdrdir)/ruby/internal/intern/signal.h +bigzero.o: $(hdrdir)/ruby/internal/intern/sprintf.h +bigzero.o: $(hdrdir)/ruby/internal/intern/string.h +bigzero.o: $(hdrdir)/ruby/internal/intern/struct.h +bigzero.o: $(hdrdir)/ruby/internal/intern/thread.h +bigzero.o: $(hdrdir)/ruby/internal/intern/time.h +bigzero.o: $(hdrdir)/ruby/internal/intern/variable.h +bigzero.o: $(hdrdir)/ruby/internal/intern/vm.h +bigzero.o: $(hdrdir)/ruby/internal/interpreter.h +bigzero.o: $(hdrdir)/ruby/internal/iterator.h +bigzero.o: $(hdrdir)/ruby/internal/memory.h +bigzero.o: $(hdrdir)/ruby/internal/method.h +bigzero.o: $(hdrdir)/ruby/internal/module.h +bigzero.o: $(hdrdir)/ruby/internal/newobj.h +bigzero.o: $(hdrdir)/ruby/internal/rgengc.h +bigzero.o: $(hdrdir)/ruby/internal/scan_args.h +bigzero.o: $(hdrdir)/ruby/internal/special_consts.h +bigzero.o: $(hdrdir)/ruby/internal/static_assert.h +bigzero.o: $(hdrdir)/ruby/internal/stdalign.h +bigzero.o: $(hdrdir)/ruby/internal/stdbool.h +bigzero.o: $(hdrdir)/ruby/internal/symbol.h +bigzero.o: $(hdrdir)/ruby/internal/value.h +bigzero.o: $(hdrdir)/ruby/internal/value_type.h +bigzero.o: $(hdrdir)/ruby/internal/variable.h +bigzero.o: $(hdrdir)/ruby/internal/warning_push.h +bigzero.o: $(hdrdir)/ruby/internal/xmalloc.h bigzero.o: $(hdrdir)/ruby/missing.h bigzero.o: $(hdrdir)/ruby/ruby.h bigzero.o: $(hdrdir)/ruby/st.h bigzero.o: $(hdrdir)/ruby/subst.h -bigzero.o: $(top_srcdir)/internal.h +bigzero.o: $(top_srcdir)/internal/bignum.h bigzero.o: bigzero.c div.o: $(RUBY_EXTCONF_H) div.o: $(arch_hdrdir)/ruby/config.h -div.o: $(hdrdir)/ruby.h div.o: $(hdrdir)/ruby/assert.h div.o: $(hdrdir)/ruby/backward.h +div.o: $(hdrdir)/ruby/backward/2/assume.h +div.o: $(hdrdir)/ruby/backward/2/attributes.h +div.o: $(hdrdir)/ruby/backward/2/bool.h +div.o: $(hdrdir)/ruby/backward/2/inttypes.h +div.o: $(hdrdir)/ruby/backward/2/limits.h +div.o: $(hdrdir)/ruby/backward/2/long_long.h +div.o: $(hdrdir)/ruby/backward/2/stdalign.h +div.o: $(hdrdir)/ruby/backward/2/stdarg.h div.o: $(hdrdir)/ruby/defines.h div.o: $(hdrdir)/ruby/intern.h +div.o: $(hdrdir)/ruby/internal/anyargs.h +div.o: $(hdrdir)/ruby/internal/arithmetic.h +div.o: $(hdrdir)/ruby/internal/arithmetic/char.h +div.o: $(hdrdir)/ruby/internal/arithmetic/double.h +div.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +div.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +div.o: $(hdrdir)/ruby/internal/arithmetic/int.h +div.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +div.o: $(hdrdir)/ruby/internal/arithmetic/long.h +div.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +div.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +div.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +div.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +div.o: $(hdrdir)/ruby/internal/arithmetic/short.h +div.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +div.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +div.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +div.o: $(hdrdir)/ruby/internal/assume.h +div.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +div.o: $(hdrdir)/ruby/internal/attr/artificial.h +div.o: $(hdrdir)/ruby/internal/attr/cold.h +div.o: $(hdrdir)/ruby/internal/attr/const.h +div.o: $(hdrdir)/ruby/internal/attr/constexpr.h +div.o: $(hdrdir)/ruby/internal/attr/deprecated.h +div.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +div.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +div.o: $(hdrdir)/ruby/internal/attr/error.h +div.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +div.o: $(hdrdir)/ruby/internal/attr/forceinline.h +div.o: $(hdrdir)/ruby/internal/attr/format.h +div.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +div.o: $(hdrdir)/ruby/internal/attr/noalias.h +div.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +div.o: $(hdrdir)/ruby/internal/attr/noexcept.h +div.o: $(hdrdir)/ruby/internal/attr/noinline.h +div.o: $(hdrdir)/ruby/internal/attr/nonnull.h +div.o: $(hdrdir)/ruby/internal/attr/noreturn.h +div.o: $(hdrdir)/ruby/internal/attr/pure.h +div.o: $(hdrdir)/ruby/internal/attr/restrict.h +div.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +div.o: $(hdrdir)/ruby/internal/attr/warning.h +div.o: $(hdrdir)/ruby/internal/attr/weakref.h +div.o: $(hdrdir)/ruby/internal/cast.h +div.o: $(hdrdir)/ruby/internal/compiler_is.h +div.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +div.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +div.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +div.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +div.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +div.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +div.o: $(hdrdir)/ruby/internal/compiler_since.h +div.o: $(hdrdir)/ruby/internal/config.h +div.o: $(hdrdir)/ruby/internal/constant_p.h +div.o: $(hdrdir)/ruby/internal/core.h +div.o: $(hdrdir)/ruby/internal/core/rarray.h +div.o: $(hdrdir)/ruby/internal/core/rbasic.h +div.o: $(hdrdir)/ruby/internal/core/rbignum.h +div.o: $(hdrdir)/ruby/internal/core/rclass.h +div.o: $(hdrdir)/ruby/internal/core/rdata.h +div.o: $(hdrdir)/ruby/internal/core/rfile.h +div.o: $(hdrdir)/ruby/internal/core/rhash.h +div.o: $(hdrdir)/ruby/internal/core/robject.h +div.o: $(hdrdir)/ruby/internal/core/rregexp.h +div.o: $(hdrdir)/ruby/internal/core/rstring.h +div.o: $(hdrdir)/ruby/internal/core/rstruct.h +div.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +div.o: $(hdrdir)/ruby/internal/ctype.h +div.o: $(hdrdir)/ruby/internal/dllexport.h +div.o: $(hdrdir)/ruby/internal/dosish.h +div.o: $(hdrdir)/ruby/internal/error.h +div.o: $(hdrdir)/ruby/internal/eval.h +div.o: $(hdrdir)/ruby/internal/event.h +div.o: $(hdrdir)/ruby/internal/fl_type.h +div.o: $(hdrdir)/ruby/internal/gc.h +div.o: $(hdrdir)/ruby/internal/glob.h +div.o: $(hdrdir)/ruby/internal/globals.h +div.o: $(hdrdir)/ruby/internal/has/attribute.h +div.o: $(hdrdir)/ruby/internal/has/builtin.h +div.o: $(hdrdir)/ruby/internal/has/c_attribute.h +div.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +div.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +div.o: $(hdrdir)/ruby/internal/has/extension.h +div.o: $(hdrdir)/ruby/internal/has/feature.h +div.o: $(hdrdir)/ruby/internal/has/warning.h +div.o: $(hdrdir)/ruby/internal/intern/array.h +div.o: $(hdrdir)/ruby/internal/intern/bignum.h +div.o: $(hdrdir)/ruby/internal/intern/class.h +div.o: $(hdrdir)/ruby/internal/intern/compar.h +div.o: $(hdrdir)/ruby/internal/intern/complex.h +div.o: $(hdrdir)/ruby/internal/intern/cont.h +div.o: $(hdrdir)/ruby/internal/intern/dir.h +div.o: $(hdrdir)/ruby/internal/intern/enum.h +div.o: $(hdrdir)/ruby/internal/intern/enumerator.h +div.o: $(hdrdir)/ruby/internal/intern/error.h +div.o: $(hdrdir)/ruby/internal/intern/eval.h +div.o: $(hdrdir)/ruby/internal/intern/file.h +div.o: $(hdrdir)/ruby/internal/intern/gc.h +div.o: $(hdrdir)/ruby/internal/intern/hash.h +div.o: $(hdrdir)/ruby/internal/intern/io.h +div.o: $(hdrdir)/ruby/internal/intern/load.h +div.o: $(hdrdir)/ruby/internal/intern/marshal.h +div.o: $(hdrdir)/ruby/internal/intern/numeric.h +div.o: $(hdrdir)/ruby/internal/intern/object.h +div.o: $(hdrdir)/ruby/internal/intern/parse.h +div.o: $(hdrdir)/ruby/internal/intern/proc.h +div.o: $(hdrdir)/ruby/internal/intern/process.h +div.o: $(hdrdir)/ruby/internal/intern/random.h +div.o: $(hdrdir)/ruby/internal/intern/range.h +div.o: $(hdrdir)/ruby/internal/intern/rational.h +div.o: $(hdrdir)/ruby/internal/intern/re.h +div.o: $(hdrdir)/ruby/internal/intern/ruby.h +div.o: $(hdrdir)/ruby/internal/intern/select.h +div.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +div.o: $(hdrdir)/ruby/internal/intern/signal.h +div.o: $(hdrdir)/ruby/internal/intern/sprintf.h +div.o: $(hdrdir)/ruby/internal/intern/string.h +div.o: $(hdrdir)/ruby/internal/intern/struct.h +div.o: $(hdrdir)/ruby/internal/intern/thread.h +div.o: $(hdrdir)/ruby/internal/intern/time.h +div.o: $(hdrdir)/ruby/internal/intern/variable.h +div.o: $(hdrdir)/ruby/internal/intern/vm.h +div.o: $(hdrdir)/ruby/internal/interpreter.h +div.o: $(hdrdir)/ruby/internal/iterator.h +div.o: $(hdrdir)/ruby/internal/memory.h +div.o: $(hdrdir)/ruby/internal/method.h +div.o: $(hdrdir)/ruby/internal/module.h +div.o: $(hdrdir)/ruby/internal/newobj.h +div.o: $(hdrdir)/ruby/internal/rgengc.h +div.o: $(hdrdir)/ruby/internal/scan_args.h +div.o: $(hdrdir)/ruby/internal/special_consts.h +div.o: $(hdrdir)/ruby/internal/static_assert.h +div.o: $(hdrdir)/ruby/internal/stdalign.h +div.o: $(hdrdir)/ruby/internal/stdbool.h +div.o: $(hdrdir)/ruby/internal/symbol.h +div.o: $(hdrdir)/ruby/internal/value.h +div.o: $(hdrdir)/ruby/internal/value_type.h +div.o: $(hdrdir)/ruby/internal/variable.h +div.o: $(hdrdir)/ruby/internal/warning_push.h +div.o: $(hdrdir)/ruby/internal/xmalloc.h div.o: $(hdrdir)/ruby/missing.h div.o: $(hdrdir)/ruby/ruby.h div.o: $(hdrdir)/ruby/st.h div.o: $(hdrdir)/ruby/subst.h -div.o: $(top_srcdir)/internal.h +div.o: $(top_srcdir)/internal/bignum.h div.o: div.c init.o: $(RUBY_EXTCONF_H) init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h @@ -52,41 +637,479 @@ init.o: $(hdrdir)/ruby/subst.h init.o: init.c intpack.o: $(RUBY_EXTCONF_H) intpack.o: $(arch_hdrdir)/ruby/config.h -intpack.o: $(hdrdir)/ruby.h intpack.o: $(hdrdir)/ruby/assert.h intpack.o: $(hdrdir)/ruby/backward.h +intpack.o: $(hdrdir)/ruby/backward/2/assume.h +intpack.o: $(hdrdir)/ruby/backward/2/attributes.h +intpack.o: $(hdrdir)/ruby/backward/2/bool.h +intpack.o: $(hdrdir)/ruby/backward/2/inttypes.h +intpack.o: $(hdrdir)/ruby/backward/2/limits.h +intpack.o: $(hdrdir)/ruby/backward/2/long_long.h +intpack.o: $(hdrdir)/ruby/backward/2/stdalign.h +intpack.o: $(hdrdir)/ruby/backward/2/stdarg.h intpack.o: $(hdrdir)/ruby/defines.h intpack.o: $(hdrdir)/ruby/intern.h +intpack.o: $(hdrdir)/ruby/internal/anyargs.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/char.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/double.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/int.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/long.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/short.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +intpack.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +intpack.o: $(hdrdir)/ruby/internal/assume.h +intpack.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +intpack.o: $(hdrdir)/ruby/internal/attr/artificial.h +intpack.o: $(hdrdir)/ruby/internal/attr/cold.h +intpack.o: $(hdrdir)/ruby/internal/attr/const.h +intpack.o: $(hdrdir)/ruby/internal/attr/constexpr.h +intpack.o: $(hdrdir)/ruby/internal/attr/deprecated.h +intpack.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +intpack.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +intpack.o: $(hdrdir)/ruby/internal/attr/error.h +intpack.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +intpack.o: $(hdrdir)/ruby/internal/attr/forceinline.h +intpack.o: $(hdrdir)/ruby/internal/attr/format.h +intpack.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +intpack.o: $(hdrdir)/ruby/internal/attr/noalias.h +intpack.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +intpack.o: $(hdrdir)/ruby/internal/attr/noexcept.h +intpack.o: $(hdrdir)/ruby/internal/attr/noinline.h +intpack.o: $(hdrdir)/ruby/internal/attr/nonnull.h +intpack.o: $(hdrdir)/ruby/internal/attr/noreturn.h +intpack.o: $(hdrdir)/ruby/internal/attr/pure.h +intpack.o: $(hdrdir)/ruby/internal/attr/restrict.h +intpack.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +intpack.o: $(hdrdir)/ruby/internal/attr/warning.h +intpack.o: $(hdrdir)/ruby/internal/attr/weakref.h +intpack.o: $(hdrdir)/ruby/internal/cast.h +intpack.o: $(hdrdir)/ruby/internal/compiler_is.h +intpack.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +intpack.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +intpack.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +intpack.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +intpack.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +intpack.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +intpack.o: $(hdrdir)/ruby/internal/compiler_since.h +intpack.o: $(hdrdir)/ruby/internal/config.h +intpack.o: $(hdrdir)/ruby/internal/constant_p.h +intpack.o: $(hdrdir)/ruby/internal/core.h +intpack.o: $(hdrdir)/ruby/internal/core/rarray.h +intpack.o: $(hdrdir)/ruby/internal/core/rbasic.h +intpack.o: $(hdrdir)/ruby/internal/core/rbignum.h +intpack.o: $(hdrdir)/ruby/internal/core/rclass.h +intpack.o: $(hdrdir)/ruby/internal/core/rdata.h +intpack.o: $(hdrdir)/ruby/internal/core/rfile.h +intpack.o: $(hdrdir)/ruby/internal/core/rhash.h +intpack.o: $(hdrdir)/ruby/internal/core/robject.h +intpack.o: $(hdrdir)/ruby/internal/core/rregexp.h +intpack.o: $(hdrdir)/ruby/internal/core/rstring.h +intpack.o: $(hdrdir)/ruby/internal/core/rstruct.h +intpack.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +intpack.o: $(hdrdir)/ruby/internal/ctype.h +intpack.o: $(hdrdir)/ruby/internal/dllexport.h +intpack.o: $(hdrdir)/ruby/internal/dosish.h +intpack.o: $(hdrdir)/ruby/internal/error.h +intpack.o: $(hdrdir)/ruby/internal/eval.h +intpack.o: $(hdrdir)/ruby/internal/event.h +intpack.o: $(hdrdir)/ruby/internal/fl_type.h +intpack.o: $(hdrdir)/ruby/internal/gc.h +intpack.o: $(hdrdir)/ruby/internal/glob.h +intpack.o: $(hdrdir)/ruby/internal/globals.h +intpack.o: $(hdrdir)/ruby/internal/has/attribute.h +intpack.o: $(hdrdir)/ruby/internal/has/builtin.h +intpack.o: $(hdrdir)/ruby/internal/has/c_attribute.h +intpack.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +intpack.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +intpack.o: $(hdrdir)/ruby/internal/has/extension.h +intpack.o: $(hdrdir)/ruby/internal/has/feature.h +intpack.o: $(hdrdir)/ruby/internal/has/warning.h +intpack.o: $(hdrdir)/ruby/internal/intern/array.h +intpack.o: $(hdrdir)/ruby/internal/intern/bignum.h +intpack.o: $(hdrdir)/ruby/internal/intern/class.h +intpack.o: $(hdrdir)/ruby/internal/intern/compar.h +intpack.o: $(hdrdir)/ruby/internal/intern/complex.h +intpack.o: $(hdrdir)/ruby/internal/intern/cont.h +intpack.o: $(hdrdir)/ruby/internal/intern/dir.h +intpack.o: $(hdrdir)/ruby/internal/intern/enum.h +intpack.o: $(hdrdir)/ruby/internal/intern/enumerator.h +intpack.o: $(hdrdir)/ruby/internal/intern/error.h +intpack.o: $(hdrdir)/ruby/internal/intern/eval.h +intpack.o: $(hdrdir)/ruby/internal/intern/file.h +intpack.o: $(hdrdir)/ruby/internal/intern/gc.h +intpack.o: $(hdrdir)/ruby/internal/intern/hash.h +intpack.o: $(hdrdir)/ruby/internal/intern/io.h +intpack.o: $(hdrdir)/ruby/internal/intern/load.h +intpack.o: $(hdrdir)/ruby/internal/intern/marshal.h +intpack.o: $(hdrdir)/ruby/internal/intern/numeric.h +intpack.o: $(hdrdir)/ruby/internal/intern/object.h +intpack.o: $(hdrdir)/ruby/internal/intern/parse.h +intpack.o: $(hdrdir)/ruby/internal/intern/proc.h +intpack.o: $(hdrdir)/ruby/internal/intern/process.h +intpack.o: $(hdrdir)/ruby/internal/intern/random.h +intpack.o: $(hdrdir)/ruby/internal/intern/range.h +intpack.o: $(hdrdir)/ruby/internal/intern/rational.h +intpack.o: $(hdrdir)/ruby/internal/intern/re.h +intpack.o: $(hdrdir)/ruby/internal/intern/ruby.h +intpack.o: $(hdrdir)/ruby/internal/intern/select.h +intpack.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +intpack.o: $(hdrdir)/ruby/internal/intern/signal.h +intpack.o: $(hdrdir)/ruby/internal/intern/sprintf.h +intpack.o: $(hdrdir)/ruby/internal/intern/string.h +intpack.o: $(hdrdir)/ruby/internal/intern/struct.h +intpack.o: $(hdrdir)/ruby/internal/intern/thread.h +intpack.o: $(hdrdir)/ruby/internal/intern/time.h +intpack.o: $(hdrdir)/ruby/internal/intern/variable.h +intpack.o: $(hdrdir)/ruby/internal/intern/vm.h +intpack.o: $(hdrdir)/ruby/internal/interpreter.h +intpack.o: $(hdrdir)/ruby/internal/iterator.h +intpack.o: $(hdrdir)/ruby/internal/memory.h +intpack.o: $(hdrdir)/ruby/internal/method.h +intpack.o: $(hdrdir)/ruby/internal/module.h +intpack.o: $(hdrdir)/ruby/internal/newobj.h +intpack.o: $(hdrdir)/ruby/internal/rgengc.h +intpack.o: $(hdrdir)/ruby/internal/scan_args.h +intpack.o: $(hdrdir)/ruby/internal/special_consts.h +intpack.o: $(hdrdir)/ruby/internal/static_assert.h +intpack.o: $(hdrdir)/ruby/internal/stdalign.h +intpack.o: $(hdrdir)/ruby/internal/stdbool.h +intpack.o: $(hdrdir)/ruby/internal/symbol.h +intpack.o: $(hdrdir)/ruby/internal/value.h +intpack.o: $(hdrdir)/ruby/internal/value_type.h +intpack.o: $(hdrdir)/ruby/internal/variable.h +intpack.o: $(hdrdir)/ruby/internal/warning_push.h +intpack.o: $(hdrdir)/ruby/internal/xmalloc.h intpack.o: $(hdrdir)/ruby/missing.h intpack.o: $(hdrdir)/ruby/ruby.h intpack.o: $(hdrdir)/ruby/st.h intpack.o: $(hdrdir)/ruby/subst.h -intpack.o: $(top_srcdir)/internal.h +intpack.o: $(top_srcdir)/internal/bignum.h intpack.o: intpack.c mul.o: $(RUBY_EXTCONF_H) mul.o: $(arch_hdrdir)/ruby/config.h -mul.o: $(hdrdir)/ruby.h mul.o: $(hdrdir)/ruby/assert.h mul.o: $(hdrdir)/ruby/backward.h +mul.o: $(hdrdir)/ruby/backward/2/assume.h +mul.o: $(hdrdir)/ruby/backward/2/attributes.h +mul.o: $(hdrdir)/ruby/backward/2/bool.h +mul.o: $(hdrdir)/ruby/backward/2/inttypes.h +mul.o: $(hdrdir)/ruby/backward/2/limits.h +mul.o: $(hdrdir)/ruby/backward/2/long_long.h +mul.o: $(hdrdir)/ruby/backward/2/stdalign.h +mul.o: $(hdrdir)/ruby/backward/2/stdarg.h mul.o: $(hdrdir)/ruby/defines.h mul.o: $(hdrdir)/ruby/intern.h +mul.o: $(hdrdir)/ruby/internal/anyargs.h +mul.o: $(hdrdir)/ruby/internal/arithmetic.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/char.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/double.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/int.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/long.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/short.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +mul.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +mul.o: $(hdrdir)/ruby/internal/assume.h +mul.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +mul.o: $(hdrdir)/ruby/internal/attr/artificial.h +mul.o: $(hdrdir)/ruby/internal/attr/cold.h +mul.o: $(hdrdir)/ruby/internal/attr/const.h +mul.o: $(hdrdir)/ruby/internal/attr/constexpr.h +mul.o: $(hdrdir)/ruby/internal/attr/deprecated.h +mul.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +mul.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +mul.o: $(hdrdir)/ruby/internal/attr/error.h +mul.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +mul.o: $(hdrdir)/ruby/internal/attr/forceinline.h +mul.o: $(hdrdir)/ruby/internal/attr/format.h +mul.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +mul.o: $(hdrdir)/ruby/internal/attr/noalias.h +mul.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +mul.o: $(hdrdir)/ruby/internal/attr/noexcept.h +mul.o: $(hdrdir)/ruby/internal/attr/noinline.h +mul.o: $(hdrdir)/ruby/internal/attr/nonnull.h +mul.o: $(hdrdir)/ruby/internal/attr/noreturn.h +mul.o: $(hdrdir)/ruby/internal/attr/pure.h +mul.o: $(hdrdir)/ruby/internal/attr/restrict.h +mul.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +mul.o: $(hdrdir)/ruby/internal/attr/warning.h +mul.o: $(hdrdir)/ruby/internal/attr/weakref.h +mul.o: $(hdrdir)/ruby/internal/cast.h +mul.o: $(hdrdir)/ruby/internal/compiler_is.h +mul.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +mul.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +mul.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +mul.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +mul.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +mul.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +mul.o: $(hdrdir)/ruby/internal/compiler_since.h +mul.o: $(hdrdir)/ruby/internal/config.h +mul.o: $(hdrdir)/ruby/internal/constant_p.h +mul.o: $(hdrdir)/ruby/internal/core.h +mul.o: $(hdrdir)/ruby/internal/core/rarray.h +mul.o: $(hdrdir)/ruby/internal/core/rbasic.h +mul.o: $(hdrdir)/ruby/internal/core/rbignum.h +mul.o: $(hdrdir)/ruby/internal/core/rclass.h +mul.o: $(hdrdir)/ruby/internal/core/rdata.h +mul.o: $(hdrdir)/ruby/internal/core/rfile.h +mul.o: $(hdrdir)/ruby/internal/core/rhash.h +mul.o: $(hdrdir)/ruby/internal/core/robject.h +mul.o: $(hdrdir)/ruby/internal/core/rregexp.h +mul.o: $(hdrdir)/ruby/internal/core/rstring.h +mul.o: $(hdrdir)/ruby/internal/core/rstruct.h +mul.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +mul.o: $(hdrdir)/ruby/internal/ctype.h +mul.o: $(hdrdir)/ruby/internal/dllexport.h +mul.o: $(hdrdir)/ruby/internal/dosish.h +mul.o: $(hdrdir)/ruby/internal/error.h +mul.o: $(hdrdir)/ruby/internal/eval.h +mul.o: $(hdrdir)/ruby/internal/event.h +mul.o: $(hdrdir)/ruby/internal/fl_type.h +mul.o: $(hdrdir)/ruby/internal/gc.h +mul.o: $(hdrdir)/ruby/internal/glob.h +mul.o: $(hdrdir)/ruby/internal/globals.h +mul.o: $(hdrdir)/ruby/internal/has/attribute.h +mul.o: $(hdrdir)/ruby/internal/has/builtin.h +mul.o: $(hdrdir)/ruby/internal/has/c_attribute.h +mul.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +mul.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +mul.o: $(hdrdir)/ruby/internal/has/extension.h +mul.o: $(hdrdir)/ruby/internal/has/feature.h +mul.o: $(hdrdir)/ruby/internal/has/warning.h +mul.o: $(hdrdir)/ruby/internal/intern/array.h +mul.o: $(hdrdir)/ruby/internal/intern/bignum.h +mul.o: $(hdrdir)/ruby/internal/intern/class.h +mul.o: $(hdrdir)/ruby/internal/intern/compar.h +mul.o: $(hdrdir)/ruby/internal/intern/complex.h +mul.o: $(hdrdir)/ruby/internal/intern/cont.h +mul.o: $(hdrdir)/ruby/internal/intern/dir.h +mul.o: $(hdrdir)/ruby/internal/intern/enum.h +mul.o: $(hdrdir)/ruby/internal/intern/enumerator.h +mul.o: $(hdrdir)/ruby/internal/intern/error.h +mul.o: $(hdrdir)/ruby/internal/intern/eval.h +mul.o: $(hdrdir)/ruby/internal/intern/file.h +mul.o: $(hdrdir)/ruby/internal/intern/gc.h +mul.o: $(hdrdir)/ruby/internal/intern/hash.h +mul.o: $(hdrdir)/ruby/internal/intern/io.h +mul.o: $(hdrdir)/ruby/internal/intern/load.h +mul.o: $(hdrdir)/ruby/internal/intern/marshal.h +mul.o: $(hdrdir)/ruby/internal/intern/numeric.h +mul.o: $(hdrdir)/ruby/internal/intern/object.h +mul.o: $(hdrdir)/ruby/internal/intern/parse.h +mul.o: $(hdrdir)/ruby/internal/intern/proc.h +mul.o: $(hdrdir)/ruby/internal/intern/process.h +mul.o: $(hdrdir)/ruby/internal/intern/random.h +mul.o: $(hdrdir)/ruby/internal/intern/range.h +mul.o: $(hdrdir)/ruby/internal/intern/rational.h +mul.o: $(hdrdir)/ruby/internal/intern/re.h +mul.o: $(hdrdir)/ruby/internal/intern/ruby.h +mul.o: $(hdrdir)/ruby/internal/intern/select.h +mul.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +mul.o: $(hdrdir)/ruby/internal/intern/signal.h +mul.o: $(hdrdir)/ruby/internal/intern/sprintf.h +mul.o: $(hdrdir)/ruby/internal/intern/string.h +mul.o: $(hdrdir)/ruby/internal/intern/struct.h +mul.o: $(hdrdir)/ruby/internal/intern/thread.h +mul.o: $(hdrdir)/ruby/internal/intern/time.h +mul.o: $(hdrdir)/ruby/internal/intern/variable.h +mul.o: $(hdrdir)/ruby/internal/intern/vm.h +mul.o: $(hdrdir)/ruby/internal/interpreter.h +mul.o: $(hdrdir)/ruby/internal/iterator.h +mul.o: $(hdrdir)/ruby/internal/memory.h +mul.o: $(hdrdir)/ruby/internal/method.h +mul.o: $(hdrdir)/ruby/internal/module.h +mul.o: $(hdrdir)/ruby/internal/newobj.h +mul.o: $(hdrdir)/ruby/internal/rgengc.h +mul.o: $(hdrdir)/ruby/internal/scan_args.h +mul.o: $(hdrdir)/ruby/internal/special_consts.h +mul.o: $(hdrdir)/ruby/internal/static_assert.h +mul.o: $(hdrdir)/ruby/internal/stdalign.h +mul.o: $(hdrdir)/ruby/internal/stdbool.h +mul.o: $(hdrdir)/ruby/internal/symbol.h +mul.o: $(hdrdir)/ruby/internal/value.h +mul.o: $(hdrdir)/ruby/internal/value_type.h +mul.o: $(hdrdir)/ruby/internal/variable.h +mul.o: $(hdrdir)/ruby/internal/warning_push.h +mul.o: $(hdrdir)/ruby/internal/xmalloc.h mul.o: $(hdrdir)/ruby/missing.h mul.o: $(hdrdir)/ruby/ruby.h mul.o: $(hdrdir)/ruby/st.h mul.o: $(hdrdir)/ruby/subst.h -mul.o: $(top_srcdir)/internal.h +mul.o: $(top_srcdir)/internal/bignum.h mul.o: mul.c str2big.o: $(RUBY_EXTCONF_H) str2big.o: $(arch_hdrdir)/ruby/config.h -str2big.o: $(hdrdir)/ruby.h str2big.o: $(hdrdir)/ruby/assert.h str2big.o: $(hdrdir)/ruby/backward.h +str2big.o: $(hdrdir)/ruby/backward/2/assume.h +str2big.o: $(hdrdir)/ruby/backward/2/attributes.h +str2big.o: $(hdrdir)/ruby/backward/2/bool.h +str2big.o: $(hdrdir)/ruby/backward/2/inttypes.h +str2big.o: $(hdrdir)/ruby/backward/2/limits.h +str2big.o: $(hdrdir)/ruby/backward/2/long_long.h +str2big.o: $(hdrdir)/ruby/backward/2/stdalign.h +str2big.o: $(hdrdir)/ruby/backward/2/stdarg.h str2big.o: $(hdrdir)/ruby/defines.h str2big.o: $(hdrdir)/ruby/intern.h +str2big.o: $(hdrdir)/ruby/internal/anyargs.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/char.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/double.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/int.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/long.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/short.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +str2big.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +str2big.o: $(hdrdir)/ruby/internal/assume.h +str2big.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +str2big.o: $(hdrdir)/ruby/internal/attr/artificial.h +str2big.o: $(hdrdir)/ruby/internal/attr/cold.h +str2big.o: $(hdrdir)/ruby/internal/attr/const.h +str2big.o: $(hdrdir)/ruby/internal/attr/constexpr.h +str2big.o: $(hdrdir)/ruby/internal/attr/deprecated.h +str2big.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +str2big.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +str2big.o: $(hdrdir)/ruby/internal/attr/error.h +str2big.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +str2big.o: $(hdrdir)/ruby/internal/attr/forceinline.h +str2big.o: $(hdrdir)/ruby/internal/attr/format.h +str2big.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +str2big.o: $(hdrdir)/ruby/internal/attr/noalias.h +str2big.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +str2big.o: $(hdrdir)/ruby/internal/attr/noexcept.h +str2big.o: $(hdrdir)/ruby/internal/attr/noinline.h +str2big.o: $(hdrdir)/ruby/internal/attr/nonnull.h +str2big.o: $(hdrdir)/ruby/internal/attr/noreturn.h +str2big.o: $(hdrdir)/ruby/internal/attr/pure.h +str2big.o: $(hdrdir)/ruby/internal/attr/restrict.h +str2big.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +str2big.o: $(hdrdir)/ruby/internal/attr/warning.h +str2big.o: $(hdrdir)/ruby/internal/attr/weakref.h +str2big.o: $(hdrdir)/ruby/internal/cast.h +str2big.o: $(hdrdir)/ruby/internal/compiler_is.h +str2big.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +str2big.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +str2big.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +str2big.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +str2big.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +str2big.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +str2big.o: $(hdrdir)/ruby/internal/compiler_since.h +str2big.o: $(hdrdir)/ruby/internal/config.h +str2big.o: $(hdrdir)/ruby/internal/constant_p.h +str2big.o: $(hdrdir)/ruby/internal/core.h +str2big.o: $(hdrdir)/ruby/internal/core/rarray.h +str2big.o: $(hdrdir)/ruby/internal/core/rbasic.h +str2big.o: $(hdrdir)/ruby/internal/core/rbignum.h +str2big.o: $(hdrdir)/ruby/internal/core/rclass.h +str2big.o: $(hdrdir)/ruby/internal/core/rdata.h +str2big.o: $(hdrdir)/ruby/internal/core/rfile.h +str2big.o: $(hdrdir)/ruby/internal/core/rhash.h +str2big.o: $(hdrdir)/ruby/internal/core/robject.h +str2big.o: $(hdrdir)/ruby/internal/core/rregexp.h +str2big.o: $(hdrdir)/ruby/internal/core/rstring.h +str2big.o: $(hdrdir)/ruby/internal/core/rstruct.h +str2big.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +str2big.o: $(hdrdir)/ruby/internal/ctype.h +str2big.o: $(hdrdir)/ruby/internal/dllexport.h +str2big.o: $(hdrdir)/ruby/internal/dosish.h +str2big.o: $(hdrdir)/ruby/internal/error.h +str2big.o: $(hdrdir)/ruby/internal/eval.h +str2big.o: $(hdrdir)/ruby/internal/event.h +str2big.o: $(hdrdir)/ruby/internal/fl_type.h +str2big.o: $(hdrdir)/ruby/internal/gc.h +str2big.o: $(hdrdir)/ruby/internal/glob.h +str2big.o: $(hdrdir)/ruby/internal/globals.h +str2big.o: $(hdrdir)/ruby/internal/has/attribute.h +str2big.o: $(hdrdir)/ruby/internal/has/builtin.h +str2big.o: $(hdrdir)/ruby/internal/has/c_attribute.h +str2big.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +str2big.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +str2big.o: $(hdrdir)/ruby/internal/has/extension.h +str2big.o: $(hdrdir)/ruby/internal/has/feature.h +str2big.o: $(hdrdir)/ruby/internal/has/warning.h +str2big.o: $(hdrdir)/ruby/internal/intern/array.h +str2big.o: $(hdrdir)/ruby/internal/intern/bignum.h +str2big.o: $(hdrdir)/ruby/internal/intern/class.h +str2big.o: $(hdrdir)/ruby/internal/intern/compar.h +str2big.o: $(hdrdir)/ruby/internal/intern/complex.h +str2big.o: $(hdrdir)/ruby/internal/intern/cont.h +str2big.o: $(hdrdir)/ruby/internal/intern/dir.h +str2big.o: $(hdrdir)/ruby/internal/intern/enum.h +str2big.o: $(hdrdir)/ruby/internal/intern/enumerator.h +str2big.o: $(hdrdir)/ruby/internal/intern/error.h +str2big.o: $(hdrdir)/ruby/internal/intern/eval.h +str2big.o: $(hdrdir)/ruby/internal/intern/file.h +str2big.o: $(hdrdir)/ruby/internal/intern/gc.h +str2big.o: $(hdrdir)/ruby/internal/intern/hash.h +str2big.o: $(hdrdir)/ruby/internal/intern/io.h +str2big.o: $(hdrdir)/ruby/internal/intern/load.h +str2big.o: $(hdrdir)/ruby/internal/intern/marshal.h +str2big.o: $(hdrdir)/ruby/internal/intern/numeric.h +str2big.o: $(hdrdir)/ruby/internal/intern/object.h +str2big.o: $(hdrdir)/ruby/internal/intern/parse.h +str2big.o: $(hdrdir)/ruby/internal/intern/proc.h +str2big.o: $(hdrdir)/ruby/internal/intern/process.h +str2big.o: $(hdrdir)/ruby/internal/intern/random.h +str2big.o: $(hdrdir)/ruby/internal/intern/range.h +str2big.o: $(hdrdir)/ruby/internal/intern/rational.h +str2big.o: $(hdrdir)/ruby/internal/intern/re.h +str2big.o: $(hdrdir)/ruby/internal/intern/ruby.h +str2big.o: $(hdrdir)/ruby/internal/intern/select.h +str2big.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +str2big.o: $(hdrdir)/ruby/internal/intern/signal.h +str2big.o: $(hdrdir)/ruby/internal/intern/sprintf.h +str2big.o: $(hdrdir)/ruby/internal/intern/string.h +str2big.o: $(hdrdir)/ruby/internal/intern/struct.h +str2big.o: $(hdrdir)/ruby/internal/intern/thread.h +str2big.o: $(hdrdir)/ruby/internal/intern/time.h +str2big.o: $(hdrdir)/ruby/internal/intern/variable.h +str2big.o: $(hdrdir)/ruby/internal/intern/vm.h +str2big.o: $(hdrdir)/ruby/internal/interpreter.h +str2big.o: $(hdrdir)/ruby/internal/iterator.h +str2big.o: $(hdrdir)/ruby/internal/memory.h +str2big.o: $(hdrdir)/ruby/internal/method.h +str2big.o: $(hdrdir)/ruby/internal/module.h +str2big.o: $(hdrdir)/ruby/internal/newobj.h +str2big.o: $(hdrdir)/ruby/internal/rgengc.h +str2big.o: $(hdrdir)/ruby/internal/scan_args.h +str2big.o: $(hdrdir)/ruby/internal/special_consts.h +str2big.o: $(hdrdir)/ruby/internal/static_assert.h +str2big.o: $(hdrdir)/ruby/internal/stdalign.h +str2big.o: $(hdrdir)/ruby/internal/stdbool.h +str2big.o: $(hdrdir)/ruby/internal/symbol.h +str2big.o: $(hdrdir)/ruby/internal/value.h +str2big.o: $(hdrdir)/ruby/internal/value_type.h +str2big.o: $(hdrdir)/ruby/internal/variable.h +str2big.o: $(hdrdir)/ruby/internal/warning_push.h +str2big.o: $(hdrdir)/ruby/internal/xmalloc.h str2big.o: $(hdrdir)/ruby/missing.h str2big.o: $(hdrdir)/ruby/ruby.h str2big.o: $(hdrdir)/ruby/st.h str2big.o: $(hdrdir)/ruby/subst.h -str2big.o: $(top_srcdir)/internal.h +str2big.o: $(top_srcdir)/internal/bignum.h str2big.o: str2big.c # AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/-test-/bignum/div.c b/ruby/ext/-test-/bignum/div.c index a1db21dc3..85ee0677f 100644 --- a/ruby/ext/-test-/bignum/div.c +++ b/ruby/ext/-test-/bignum/div.c @@ -1,4 +1,4 @@ -#include "internal.h" +#include "internal/bignum.h" static VALUE big(VALUE x) @@ -12,14 +12,14 @@ big(VALUE x) } static VALUE -divrem_normal(VALUE x, VALUE y) +divrem_normal(VALUE klass, VALUE x, VALUE y) { return rb_big_norm(rb_big_divrem_normal(big(x), big(y))); } #if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H) static VALUE -divrem_gmp(VALUE x, VALUE y) +divrem_gmp(VALUE klass, VALUE x, VALUE y) { return rb_big_norm(rb_big_divrem_gmp(big(x), big(y))); } @@ -30,6 +30,6 @@ divrem_gmp(VALUE x, VALUE y) void Init_div(VALUE klass) { - rb_define_method(rb_cInteger, "big_divrem_normal", divrem_normal, 1); - rb_define_method(rb_cInteger, "big_divrem_gmp", divrem_gmp, 1); + rb_define_singleton_method(klass, "big_divrem_normal", divrem_normal, 2); + rb_define_singleton_method(klass, "big_divrem_gmp", divrem_gmp, 2); } diff --git a/ruby/ext/-test-/bignum/intpack.c b/ruby/ext/-test-/bignum/intpack.c index 2d19442cf..d5591505e 100644 --- a/ruby/ext/-test-/bignum/intpack.c +++ b/ruby/ext/-test-/bignum/intpack.c @@ -1,7 +1,7 @@ -#include "internal.h" +#include "internal/bignum.h" static VALUE -rb_integer_pack_raw_m(VALUE val, VALUE buf, VALUE numwords_arg, VALUE wordsize_arg, VALUE nails, VALUE flags) +rb_integer_pack_raw_m(VALUE klass, VALUE val, VALUE buf, VALUE numwords_arg, VALUE wordsize_arg, VALUE nails, VALUE flags) { int sign; size_t numwords = 0; @@ -17,7 +17,7 @@ rb_integer_pack_raw_m(VALUE val, VALUE buf, VALUE numwords_arg, VALUE wordsize_a } static VALUE -rb_integer_pack_m(VALUE val, VALUE numwords_arg, VALUE wordsize_arg, VALUE nails, VALUE flags) +rb_integer_pack_m(VALUE klass, VALUE val, VALUE numwords_arg, VALUE wordsize_arg, VALUE nails, VALUE flags) { int sign; size_t numwords = NUM2SIZET(numwords_arg); @@ -45,7 +45,7 @@ rb_integer_unpack_m(VALUE klass, VALUE buf, VALUE numwords, VALUE wordsize, VALU } static VALUE -rb_integer_test_numbits_2comp_without_sign(VALUE val) +rb_integer_test_numbits_2comp_without_sign(VALUE klass, VALUE val) { size_t size; int neg = FIXNUM_P(val) ? FIX2LONG(val) < 0 : BIGNUM_NEGATIVE_P(val); @@ -54,7 +54,7 @@ rb_integer_test_numbits_2comp_without_sign(VALUE val) } static VALUE -rb_integer_test_numbytes_2comp_with_sign(VALUE val) +rb_integer_test_numbytes_2comp_with_sign(VALUE klass, VALUE val) { int neg = FIXNUM_P(val) ? FIX2LONG(val) < 0 : BIGNUM_NEGATIVE_P(val); int nlz_bits; @@ -67,21 +67,21 @@ rb_integer_test_numbytes_2comp_with_sign(VALUE val) void Init_intpack(VALUE klass) { - rb_define_method(rb_cInteger, "test_pack_raw", rb_integer_pack_raw_m, 5); - rb_define_method(rb_cInteger, "test_pack", rb_integer_pack_m, 4); - rb_define_singleton_method(rb_cInteger, "test_unpack", rb_integer_unpack_m, 5); - rb_define_const(rb_cInteger, "INTEGER_PACK_MSWORD_FIRST", INT2NUM(INTEGER_PACK_MSWORD_FIRST)); - rb_define_const(rb_cInteger, "INTEGER_PACK_LSWORD_FIRST", INT2NUM(INTEGER_PACK_LSWORD_FIRST)); - rb_define_const(rb_cInteger, "INTEGER_PACK_MSBYTE_FIRST", INT2NUM(INTEGER_PACK_MSBYTE_FIRST)); - rb_define_const(rb_cInteger, "INTEGER_PACK_LSBYTE_FIRST", INT2NUM(INTEGER_PACK_LSBYTE_FIRST)); - rb_define_const(rb_cInteger, "INTEGER_PACK_NATIVE_BYTE_ORDER", INT2NUM(INTEGER_PACK_NATIVE_BYTE_ORDER)); - rb_define_const(rb_cInteger, "INTEGER_PACK_2COMP", INT2NUM(INTEGER_PACK_2COMP)); - rb_define_const(rb_cInteger, "INTEGER_PACK_LITTLE_ENDIAN", INT2NUM(INTEGER_PACK_LITTLE_ENDIAN)); - rb_define_const(rb_cInteger, "INTEGER_PACK_BIG_ENDIAN", INT2NUM(INTEGER_PACK_BIG_ENDIAN)); - rb_define_const(rb_cInteger, "INTEGER_PACK_FORCE_BIGNUM", INT2NUM(INTEGER_PACK_FORCE_BIGNUM)); - rb_define_const(rb_cInteger, "INTEGER_PACK_NEGATIVE", INT2NUM(INTEGER_PACK_NEGATIVE)); - rb_define_const(rb_cInteger, "INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION", INT2NUM(INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION)); + rb_define_singleton_method(klass, "test_pack_raw", rb_integer_pack_raw_m, 6); + rb_define_singleton_method(klass, "test_pack", rb_integer_pack_m, 5); + rb_define_singleton_method(klass, "test_unpack", rb_integer_unpack_m, 5); + rb_define_const(klass, "INTEGER_PACK_MSWORD_FIRST", INT2NUM(INTEGER_PACK_MSWORD_FIRST)); + rb_define_const(klass, "INTEGER_PACK_LSWORD_FIRST", INT2NUM(INTEGER_PACK_LSWORD_FIRST)); + rb_define_const(klass, "INTEGER_PACK_MSBYTE_FIRST", INT2NUM(INTEGER_PACK_MSBYTE_FIRST)); + rb_define_const(klass, "INTEGER_PACK_LSBYTE_FIRST", INT2NUM(INTEGER_PACK_LSBYTE_FIRST)); + rb_define_const(klass, "INTEGER_PACK_NATIVE_BYTE_ORDER", INT2NUM(INTEGER_PACK_NATIVE_BYTE_ORDER)); + rb_define_const(klass, "INTEGER_PACK_2COMP", INT2NUM(INTEGER_PACK_2COMP)); + rb_define_const(klass, "INTEGER_PACK_LITTLE_ENDIAN", INT2NUM(INTEGER_PACK_LITTLE_ENDIAN)); + rb_define_const(klass, "INTEGER_PACK_BIG_ENDIAN", INT2NUM(INTEGER_PACK_BIG_ENDIAN)); + rb_define_const(klass, "INTEGER_PACK_FORCE_BIGNUM", INT2NUM(INTEGER_PACK_FORCE_BIGNUM)); + rb_define_const(klass, "INTEGER_PACK_NEGATIVE", INT2NUM(INTEGER_PACK_NEGATIVE)); + rb_define_const(klass, "INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION", INT2NUM(INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION)); - rb_define_method(rb_cInteger, "test_numbits_2comp_without_sign", rb_integer_test_numbits_2comp_without_sign, 0); - rb_define_method(rb_cInteger, "test_numbytes_2comp_with_sign", rb_integer_test_numbytes_2comp_with_sign, 0); + rb_define_singleton_method(klass, "test_numbits_2comp_without_sign", rb_integer_test_numbits_2comp_without_sign, 1); + rb_define_singleton_method(klass, "test_numbytes_2comp_with_sign", rb_integer_test_numbytes_2comp_with_sign, 1); } diff --git a/ruby/ext/-test-/bignum/mul.c b/ruby/ext/-test-/bignum/mul.c index b922f3443..05ba103c4 100644 --- a/ruby/ext/-test-/bignum/mul.c +++ b/ruby/ext/-test-/bignum/mul.c @@ -1,4 +1,4 @@ -#include "internal.h" +#include "internal/bignum.h" static VALUE big(VALUE x) @@ -12,38 +12,38 @@ big(VALUE x) } static VALUE -mul_normal(VALUE x, VALUE y) +mul_normal(VALUE klass, VALUE x, VALUE y) { return rb_big_norm(rb_big_mul_normal(big(x), big(y))); } static VALUE -sq_fast(VALUE x) +sq_fast(VALUE klass, VALUE x) { return rb_big_norm(rb_big_sq_fast(big(x))); } static VALUE -mul_balance(VALUE x, VALUE y) +mul_balance(VALUE klass, VALUE x, VALUE y) { return rb_big_norm(rb_big_mul_balance(big(x), big(y))); } static VALUE -mul_karatsuba(VALUE x, VALUE y) +mul_karatsuba(VALUE klass, VALUE x, VALUE y) { return rb_big_norm(rb_big_mul_karatsuba(big(x), big(y))); } static VALUE -mul_toom3(VALUE x, VALUE y) +mul_toom3(VALUE klass, VALUE x, VALUE y) { return rb_big_norm(rb_big_mul_toom3(big(x), big(y))); } #if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H) static VALUE -mul_gmp(VALUE x, VALUE y) +mul_gmp(VALUE klass, VALUE x, VALUE y) { return rb_big_norm(rb_big_mul_gmp(big(x), big(y))); } @@ -54,12 +54,12 @@ mul_gmp(VALUE x, VALUE y) void Init_mul(VALUE klass) { - rb_define_const(rb_cInteger, "SIZEOF_BDIGIT", INT2NUM(SIZEOF_BDIGIT)); - rb_define_const(rb_cInteger, "BITSPERDIG", INT2NUM(SIZEOF_BDIGIT * CHAR_BIT)); - rb_define_method(rb_cInteger, "big_mul_normal", mul_normal, 1); - rb_define_method(rb_cInteger, "big_sq_fast", sq_fast, 0); - rb_define_method(rb_cInteger, "big_mul_balance", mul_balance, 1); - rb_define_method(rb_cInteger, "big_mul_karatsuba", mul_karatsuba, 1); - rb_define_method(rb_cInteger, "big_mul_toom3", mul_toom3, 1); - rb_define_method(rb_cInteger, "big_mul_gmp", mul_gmp, 1); + rb_define_const(klass, "SIZEOF_BDIGIT", INT2NUM(SIZEOF_BDIGIT)); + rb_define_const(klass, "BITSPERDIG", INT2NUM(SIZEOF_BDIGIT * CHAR_BIT)); + rb_define_singleton_method(klass, "big_mul_normal", mul_normal, 2); + rb_define_singleton_method(klass, "big_sq_fast", sq_fast, 1); + rb_define_singleton_method(klass, "big_mul_balance", mul_balance, 2); + rb_define_singleton_method(klass, "big_mul_karatsuba", mul_karatsuba, 2); + rb_define_singleton_method(klass, "big_mul_toom3", mul_toom3, 2); + rb_define_singleton_method(klass, "big_mul_gmp", mul_gmp, 2); } diff --git a/ruby/ext/-test-/bignum/str2big.c b/ruby/ext/-test-/bignum/str2big.c index bc79ef032..337cf8fb6 100644 --- a/ruby/ext/-test-/bignum/str2big.c +++ b/ruby/ext/-test-/bignum/str2big.c @@ -1,26 +1,26 @@ -#include "internal.h" +#include "internal/bignum.h" static VALUE -str2big_poweroftwo(VALUE str, VALUE vbase, VALUE badcheck) +str2big_poweroftwo(VALUE klass, VALUE str, VALUE vbase, VALUE badcheck) { return rb_str2big_poweroftwo(str, NUM2INT(vbase), RTEST(badcheck)); } static VALUE -str2big_normal(VALUE str, VALUE vbase, VALUE badcheck) +str2big_normal(VALUE klass, VALUE str, VALUE vbase, VALUE badcheck) { return rb_str2big_normal(str, NUM2INT(vbase), RTEST(badcheck)); } static VALUE -str2big_karatsuba(VALUE str, VALUE vbase, VALUE badcheck) +str2big_karatsuba(VALUE klass, VALUE str, VALUE vbase, VALUE badcheck) { return rb_str2big_karatsuba(str, NUM2INT(vbase), RTEST(badcheck)); } #if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H) static VALUE -str2big_gmp(VALUE str, VALUE vbase, VALUE badcheck) +str2big_gmp(VALUE klass, VALUE str, VALUE vbase, VALUE badcheck) { return rb_str2big_gmp(str, NUM2INT(vbase), RTEST(badcheck)); } @@ -31,8 +31,8 @@ str2big_gmp(VALUE str, VALUE vbase, VALUE badcheck) void Init_str2big(VALUE klass) { - rb_define_method(rb_cString, "str2big_poweroftwo", str2big_poweroftwo, 2); - rb_define_method(rb_cString, "str2big_normal", str2big_normal, 2); - rb_define_method(rb_cString, "str2big_karatsuba", str2big_karatsuba, 2); - rb_define_method(rb_cString, "str2big_gmp", str2big_gmp, 2); + rb_define_singleton_method(klass, "str2big_poweroftwo", str2big_poweroftwo, 3); + rb_define_singleton_method(klass, "str2big_normal", str2big_normal, 3); + rb_define_singleton_method(klass, "str2big_karatsuba", str2big_karatsuba, 3); + rb_define_singleton_method(klass, "str2big_gmp", str2big_gmp, 3); } diff --git a/ruby/ext/-test-/bug-14834/depend b/ruby/ext/-test-/bug-14834/depend index 5206f995b..086713990 100644 --- a/ruby/ext/-test-/bug-14834/depend +++ b/ruby/ext/-test-/bug-14834/depend @@ -3,9 +3,156 @@ bug-14384.o: $(RUBY_EXTCONF_H) bug-14384.o: $(arch_hdrdir)/ruby/config.h bug-14384.o: $(hdrdir)/ruby/assert.h bug-14384.o: $(hdrdir)/ruby/backward.h +bug-14384.o: $(hdrdir)/ruby/backward/2/assume.h +bug-14384.o: $(hdrdir)/ruby/backward/2/attributes.h +bug-14384.o: $(hdrdir)/ruby/backward/2/bool.h +bug-14384.o: $(hdrdir)/ruby/backward/2/inttypes.h +bug-14384.o: $(hdrdir)/ruby/backward/2/limits.h +bug-14384.o: $(hdrdir)/ruby/backward/2/long_long.h +bug-14384.o: $(hdrdir)/ruby/backward/2/stdalign.h +bug-14384.o: $(hdrdir)/ruby/backward/2/stdarg.h bug-14384.o: $(hdrdir)/ruby/debug.h bug-14384.o: $(hdrdir)/ruby/defines.h bug-14384.o: $(hdrdir)/ruby/intern.h +bug-14384.o: $(hdrdir)/ruby/internal/anyargs.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/char.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/double.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/int.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/long.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/short.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +bug-14384.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +bug-14384.o: $(hdrdir)/ruby/internal/assume.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/artificial.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/cold.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/const.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/constexpr.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/deprecated.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/error.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/forceinline.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/format.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/noalias.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/noexcept.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/noinline.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/nonnull.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/noreturn.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/pure.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/restrict.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/warning.h +bug-14384.o: $(hdrdir)/ruby/internal/attr/weakref.h +bug-14384.o: $(hdrdir)/ruby/internal/cast.h +bug-14384.o: $(hdrdir)/ruby/internal/compiler_is.h +bug-14384.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +bug-14384.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +bug-14384.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +bug-14384.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +bug-14384.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +bug-14384.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +bug-14384.o: $(hdrdir)/ruby/internal/compiler_since.h +bug-14384.o: $(hdrdir)/ruby/internal/config.h +bug-14384.o: $(hdrdir)/ruby/internal/constant_p.h +bug-14384.o: $(hdrdir)/ruby/internal/core.h +bug-14384.o: $(hdrdir)/ruby/internal/core/rarray.h +bug-14384.o: $(hdrdir)/ruby/internal/core/rbasic.h +bug-14384.o: $(hdrdir)/ruby/internal/core/rbignum.h +bug-14384.o: $(hdrdir)/ruby/internal/core/rclass.h +bug-14384.o: $(hdrdir)/ruby/internal/core/rdata.h +bug-14384.o: $(hdrdir)/ruby/internal/core/rfile.h +bug-14384.o: $(hdrdir)/ruby/internal/core/rhash.h +bug-14384.o: $(hdrdir)/ruby/internal/core/robject.h +bug-14384.o: $(hdrdir)/ruby/internal/core/rregexp.h +bug-14384.o: $(hdrdir)/ruby/internal/core/rstring.h +bug-14384.o: $(hdrdir)/ruby/internal/core/rstruct.h +bug-14384.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +bug-14384.o: $(hdrdir)/ruby/internal/ctype.h +bug-14384.o: $(hdrdir)/ruby/internal/dllexport.h +bug-14384.o: $(hdrdir)/ruby/internal/dosish.h +bug-14384.o: $(hdrdir)/ruby/internal/error.h +bug-14384.o: $(hdrdir)/ruby/internal/eval.h +bug-14384.o: $(hdrdir)/ruby/internal/event.h +bug-14384.o: $(hdrdir)/ruby/internal/fl_type.h +bug-14384.o: $(hdrdir)/ruby/internal/gc.h +bug-14384.o: $(hdrdir)/ruby/internal/glob.h +bug-14384.o: $(hdrdir)/ruby/internal/globals.h +bug-14384.o: $(hdrdir)/ruby/internal/has/attribute.h +bug-14384.o: $(hdrdir)/ruby/internal/has/builtin.h +bug-14384.o: $(hdrdir)/ruby/internal/has/c_attribute.h +bug-14384.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +bug-14384.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +bug-14384.o: $(hdrdir)/ruby/internal/has/extension.h +bug-14384.o: $(hdrdir)/ruby/internal/has/feature.h +bug-14384.o: $(hdrdir)/ruby/internal/has/warning.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/array.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/bignum.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/class.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/compar.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/complex.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/cont.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/dir.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/enum.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/enumerator.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/error.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/eval.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/file.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/gc.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/hash.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/io.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/load.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/marshal.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/numeric.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/object.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/parse.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/proc.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/process.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/random.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/range.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/rational.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/re.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/ruby.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/select.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/signal.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/sprintf.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/string.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/struct.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/thread.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/time.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/variable.h +bug-14384.o: $(hdrdir)/ruby/internal/intern/vm.h +bug-14384.o: $(hdrdir)/ruby/internal/interpreter.h +bug-14384.o: $(hdrdir)/ruby/internal/iterator.h +bug-14384.o: $(hdrdir)/ruby/internal/memory.h +bug-14384.o: $(hdrdir)/ruby/internal/method.h +bug-14384.o: $(hdrdir)/ruby/internal/module.h +bug-14384.o: $(hdrdir)/ruby/internal/newobj.h +bug-14384.o: $(hdrdir)/ruby/internal/rgengc.h +bug-14384.o: $(hdrdir)/ruby/internal/scan_args.h +bug-14384.o: $(hdrdir)/ruby/internal/special_consts.h +bug-14384.o: $(hdrdir)/ruby/internal/static_assert.h +bug-14384.o: $(hdrdir)/ruby/internal/stdalign.h +bug-14384.o: $(hdrdir)/ruby/internal/stdbool.h +bug-14384.o: $(hdrdir)/ruby/internal/symbol.h +bug-14384.o: $(hdrdir)/ruby/internal/value.h +bug-14384.o: $(hdrdir)/ruby/internal/value_type.h +bug-14384.o: $(hdrdir)/ruby/internal/variable.h +bug-14384.o: $(hdrdir)/ruby/internal/warning_push.h +bug-14384.o: $(hdrdir)/ruby/internal/xmalloc.h bug-14384.o: $(hdrdir)/ruby/missing.h bug-14384.o: $(hdrdir)/ruby/ruby.h bug-14384.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/bug-3571/depend b/ruby/ext/-test-/bug-3571/depend index 74911f0af..73d1fec43 100644 --- a/ruby/ext/-test-/bug-3571/depend +++ b/ruby/ext/-test-/bug-3571/depend @@ -4,8 +4,155 @@ bug.o: $(arch_hdrdir)/ruby/config.h bug.o: $(hdrdir)/ruby.h bug.o: $(hdrdir)/ruby/assert.h bug.o: $(hdrdir)/ruby/backward.h +bug.o: $(hdrdir)/ruby/backward/2/assume.h +bug.o: $(hdrdir)/ruby/backward/2/attributes.h +bug.o: $(hdrdir)/ruby/backward/2/bool.h +bug.o: $(hdrdir)/ruby/backward/2/inttypes.h +bug.o: $(hdrdir)/ruby/backward/2/limits.h +bug.o: $(hdrdir)/ruby/backward/2/long_long.h +bug.o: $(hdrdir)/ruby/backward/2/stdalign.h +bug.o: $(hdrdir)/ruby/backward/2/stdarg.h bug.o: $(hdrdir)/ruby/defines.h bug.o: $(hdrdir)/ruby/intern.h +bug.o: $(hdrdir)/ruby/internal/anyargs.h +bug.o: $(hdrdir)/ruby/internal/arithmetic.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/char.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/double.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/int.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/long.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/short.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +bug.o: $(hdrdir)/ruby/internal/assume.h +bug.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +bug.o: $(hdrdir)/ruby/internal/attr/artificial.h +bug.o: $(hdrdir)/ruby/internal/attr/cold.h +bug.o: $(hdrdir)/ruby/internal/attr/const.h +bug.o: $(hdrdir)/ruby/internal/attr/constexpr.h +bug.o: $(hdrdir)/ruby/internal/attr/deprecated.h +bug.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +bug.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +bug.o: $(hdrdir)/ruby/internal/attr/error.h +bug.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +bug.o: $(hdrdir)/ruby/internal/attr/forceinline.h +bug.o: $(hdrdir)/ruby/internal/attr/format.h +bug.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +bug.o: $(hdrdir)/ruby/internal/attr/noalias.h +bug.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +bug.o: $(hdrdir)/ruby/internal/attr/noexcept.h +bug.o: $(hdrdir)/ruby/internal/attr/noinline.h +bug.o: $(hdrdir)/ruby/internal/attr/nonnull.h +bug.o: $(hdrdir)/ruby/internal/attr/noreturn.h +bug.o: $(hdrdir)/ruby/internal/attr/pure.h +bug.o: $(hdrdir)/ruby/internal/attr/restrict.h +bug.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +bug.o: $(hdrdir)/ruby/internal/attr/warning.h +bug.o: $(hdrdir)/ruby/internal/attr/weakref.h +bug.o: $(hdrdir)/ruby/internal/cast.h +bug.o: $(hdrdir)/ruby/internal/compiler_is.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +bug.o: $(hdrdir)/ruby/internal/compiler_since.h +bug.o: $(hdrdir)/ruby/internal/config.h +bug.o: $(hdrdir)/ruby/internal/constant_p.h +bug.o: $(hdrdir)/ruby/internal/core.h +bug.o: $(hdrdir)/ruby/internal/core/rarray.h +bug.o: $(hdrdir)/ruby/internal/core/rbasic.h +bug.o: $(hdrdir)/ruby/internal/core/rbignum.h +bug.o: $(hdrdir)/ruby/internal/core/rclass.h +bug.o: $(hdrdir)/ruby/internal/core/rdata.h +bug.o: $(hdrdir)/ruby/internal/core/rfile.h +bug.o: $(hdrdir)/ruby/internal/core/rhash.h +bug.o: $(hdrdir)/ruby/internal/core/robject.h +bug.o: $(hdrdir)/ruby/internal/core/rregexp.h +bug.o: $(hdrdir)/ruby/internal/core/rstring.h +bug.o: $(hdrdir)/ruby/internal/core/rstruct.h +bug.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +bug.o: $(hdrdir)/ruby/internal/ctype.h +bug.o: $(hdrdir)/ruby/internal/dllexport.h +bug.o: $(hdrdir)/ruby/internal/dosish.h +bug.o: $(hdrdir)/ruby/internal/error.h +bug.o: $(hdrdir)/ruby/internal/eval.h +bug.o: $(hdrdir)/ruby/internal/event.h +bug.o: $(hdrdir)/ruby/internal/fl_type.h +bug.o: $(hdrdir)/ruby/internal/gc.h +bug.o: $(hdrdir)/ruby/internal/glob.h +bug.o: $(hdrdir)/ruby/internal/globals.h +bug.o: $(hdrdir)/ruby/internal/has/attribute.h +bug.o: $(hdrdir)/ruby/internal/has/builtin.h +bug.o: $(hdrdir)/ruby/internal/has/c_attribute.h +bug.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +bug.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +bug.o: $(hdrdir)/ruby/internal/has/extension.h +bug.o: $(hdrdir)/ruby/internal/has/feature.h +bug.o: $(hdrdir)/ruby/internal/has/warning.h +bug.o: $(hdrdir)/ruby/internal/intern/array.h +bug.o: $(hdrdir)/ruby/internal/intern/bignum.h +bug.o: $(hdrdir)/ruby/internal/intern/class.h +bug.o: $(hdrdir)/ruby/internal/intern/compar.h +bug.o: $(hdrdir)/ruby/internal/intern/complex.h +bug.o: $(hdrdir)/ruby/internal/intern/cont.h +bug.o: $(hdrdir)/ruby/internal/intern/dir.h +bug.o: $(hdrdir)/ruby/internal/intern/enum.h +bug.o: $(hdrdir)/ruby/internal/intern/enumerator.h +bug.o: $(hdrdir)/ruby/internal/intern/error.h +bug.o: $(hdrdir)/ruby/internal/intern/eval.h +bug.o: $(hdrdir)/ruby/internal/intern/file.h +bug.o: $(hdrdir)/ruby/internal/intern/gc.h +bug.o: $(hdrdir)/ruby/internal/intern/hash.h +bug.o: $(hdrdir)/ruby/internal/intern/io.h +bug.o: $(hdrdir)/ruby/internal/intern/load.h +bug.o: $(hdrdir)/ruby/internal/intern/marshal.h +bug.o: $(hdrdir)/ruby/internal/intern/numeric.h +bug.o: $(hdrdir)/ruby/internal/intern/object.h +bug.o: $(hdrdir)/ruby/internal/intern/parse.h +bug.o: $(hdrdir)/ruby/internal/intern/proc.h +bug.o: $(hdrdir)/ruby/internal/intern/process.h +bug.o: $(hdrdir)/ruby/internal/intern/random.h +bug.o: $(hdrdir)/ruby/internal/intern/range.h +bug.o: $(hdrdir)/ruby/internal/intern/rational.h +bug.o: $(hdrdir)/ruby/internal/intern/re.h +bug.o: $(hdrdir)/ruby/internal/intern/ruby.h +bug.o: $(hdrdir)/ruby/internal/intern/select.h +bug.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +bug.o: $(hdrdir)/ruby/internal/intern/signal.h +bug.o: $(hdrdir)/ruby/internal/intern/sprintf.h +bug.o: $(hdrdir)/ruby/internal/intern/string.h +bug.o: $(hdrdir)/ruby/internal/intern/struct.h +bug.o: $(hdrdir)/ruby/internal/intern/thread.h +bug.o: $(hdrdir)/ruby/internal/intern/time.h +bug.o: $(hdrdir)/ruby/internal/intern/variable.h +bug.o: $(hdrdir)/ruby/internal/intern/vm.h +bug.o: $(hdrdir)/ruby/internal/interpreter.h +bug.o: $(hdrdir)/ruby/internal/iterator.h +bug.o: $(hdrdir)/ruby/internal/memory.h +bug.o: $(hdrdir)/ruby/internal/method.h +bug.o: $(hdrdir)/ruby/internal/module.h +bug.o: $(hdrdir)/ruby/internal/newobj.h +bug.o: $(hdrdir)/ruby/internal/rgengc.h +bug.o: $(hdrdir)/ruby/internal/scan_args.h +bug.o: $(hdrdir)/ruby/internal/special_consts.h +bug.o: $(hdrdir)/ruby/internal/static_assert.h +bug.o: $(hdrdir)/ruby/internal/stdalign.h +bug.o: $(hdrdir)/ruby/internal/stdbool.h +bug.o: $(hdrdir)/ruby/internal/symbol.h +bug.o: $(hdrdir)/ruby/internal/value.h +bug.o: $(hdrdir)/ruby/internal/value_type.h +bug.o: $(hdrdir)/ruby/internal/variable.h +bug.o: $(hdrdir)/ruby/internal/warning_push.h +bug.o: $(hdrdir)/ruby/internal/xmalloc.h bug.o: $(hdrdir)/ruby/missing.h bug.o: $(hdrdir)/ruby/ruby.h bug.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/bug-5832/depend b/ruby/ext/-test-/bug-5832/depend index 74911f0af..73d1fec43 100644 --- a/ruby/ext/-test-/bug-5832/depend +++ b/ruby/ext/-test-/bug-5832/depend @@ -4,8 +4,155 @@ bug.o: $(arch_hdrdir)/ruby/config.h bug.o: $(hdrdir)/ruby.h bug.o: $(hdrdir)/ruby/assert.h bug.o: $(hdrdir)/ruby/backward.h +bug.o: $(hdrdir)/ruby/backward/2/assume.h +bug.o: $(hdrdir)/ruby/backward/2/attributes.h +bug.o: $(hdrdir)/ruby/backward/2/bool.h +bug.o: $(hdrdir)/ruby/backward/2/inttypes.h +bug.o: $(hdrdir)/ruby/backward/2/limits.h +bug.o: $(hdrdir)/ruby/backward/2/long_long.h +bug.o: $(hdrdir)/ruby/backward/2/stdalign.h +bug.o: $(hdrdir)/ruby/backward/2/stdarg.h bug.o: $(hdrdir)/ruby/defines.h bug.o: $(hdrdir)/ruby/intern.h +bug.o: $(hdrdir)/ruby/internal/anyargs.h +bug.o: $(hdrdir)/ruby/internal/arithmetic.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/char.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/double.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/int.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/long.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/short.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +bug.o: $(hdrdir)/ruby/internal/assume.h +bug.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +bug.o: $(hdrdir)/ruby/internal/attr/artificial.h +bug.o: $(hdrdir)/ruby/internal/attr/cold.h +bug.o: $(hdrdir)/ruby/internal/attr/const.h +bug.o: $(hdrdir)/ruby/internal/attr/constexpr.h +bug.o: $(hdrdir)/ruby/internal/attr/deprecated.h +bug.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +bug.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +bug.o: $(hdrdir)/ruby/internal/attr/error.h +bug.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +bug.o: $(hdrdir)/ruby/internal/attr/forceinline.h +bug.o: $(hdrdir)/ruby/internal/attr/format.h +bug.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +bug.o: $(hdrdir)/ruby/internal/attr/noalias.h +bug.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +bug.o: $(hdrdir)/ruby/internal/attr/noexcept.h +bug.o: $(hdrdir)/ruby/internal/attr/noinline.h +bug.o: $(hdrdir)/ruby/internal/attr/nonnull.h +bug.o: $(hdrdir)/ruby/internal/attr/noreturn.h +bug.o: $(hdrdir)/ruby/internal/attr/pure.h +bug.o: $(hdrdir)/ruby/internal/attr/restrict.h +bug.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +bug.o: $(hdrdir)/ruby/internal/attr/warning.h +bug.o: $(hdrdir)/ruby/internal/attr/weakref.h +bug.o: $(hdrdir)/ruby/internal/cast.h +bug.o: $(hdrdir)/ruby/internal/compiler_is.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +bug.o: $(hdrdir)/ruby/internal/compiler_since.h +bug.o: $(hdrdir)/ruby/internal/config.h +bug.o: $(hdrdir)/ruby/internal/constant_p.h +bug.o: $(hdrdir)/ruby/internal/core.h +bug.o: $(hdrdir)/ruby/internal/core/rarray.h +bug.o: $(hdrdir)/ruby/internal/core/rbasic.h +bug.o: $(hdrdir)/ruby/internal/core/rbignum.h +bug.o: $(hdrdir)/ruby/internal/core/rclass.h +bug.o: $(hdrdir)/ruby/internal/core/rdata.h +bug.o: $(hdrdir)/ruby/internal/core/rfile.h +bug.o: $(hdrdir)/ruby/internal/core/rhash.h +bug.o: $(hdrdir)/ruby/internal/core/robject.h +bug.o: $(hdrdir)/ruby/internal/core/rregexp.h +bug.o: $(hdrdir)/ruby/internal/core/rstring.h +bug.o: $(hdrdir)/ruby/internal/core/rstruct.h +bug.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +bug.o: $(hdrdir)/ruby/internal/ctype.h +bug.o: $(hdrdir)/ruby/internal/dllexport.h +bug.o: $(hdrdir)/ruby/internal/dosish.h +bug.o: $(hdrdir)/ruby/internal/error.h +bug.o: $(hdrdir)/ruby/internal/eval.h +bug.o: $(hdrdir)/ruby/internal/event.h +bug.o: $(hdrdir)/ruby/internal/fl_type.h +bug.o: $(hdrdir)/ruby/internal/gc.h +bug.o: $(hdrdir)/ruby/internal/glob.h +bug.o: $(hdrdir)/ruby/internal/globals.h +bug.o: $(hdrdir)/ruby/internal/has/attribute.h +bug.o: $(hdrdir)/ruby/internal/has/builtin.h +bug.o: $(hdrdir)/ruby/internal/has/c_attribute.h +bug.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +bug.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +bug.o: $(hdrdir)/ruby/internal/has/extension.h +bug.o: $(hdrdir)/ruby/internal/has/feature.h +bug.o: $(hdrdir)/ruby/internal/has/warning.h +bug.o: $(hdrdir)/ruby/internal/intern/array.h +bug.o: $(hdrdir)/ruby/internal/intern/bignum.h +bug.o: $(hdrdir)/ruby/internal/intern/class.h +bug.o: $(hdrdir)/ruby/internal/intern/compar.h +bug.o: $(hdrdir)/ruby/internal/intern/complex.h +bug.o: $(hdrdir)/ruby/internal/intern/cont.h +bug.o: $(hdrdir)/ruby/internal/intern/dir.h +bug.o: $(hdrdir)/ruby/internal/intern/enum.h +bug.o: $(hdrdir)/ruby/internal/intern/enumerator.h +bug.o: $(hdrdir)/ruby/internal/intern/error.h +bug.o: $(hdrdir)/ruby/internal/intern/eval.h +bug.o: $(hdrdir)/ruby/internal/intern/file.h +bug.o: $(hdrdir)/ruby/internal/intern/gc.h +bug.o: $(hdrdir)/ruby/internal/intern/hash.h +bug.o: $(hdrdir)/ruby/internal/intern/io.h +bug.o: $(hdrdir)/ruby/internal/intern/load.h +bug.o: $(hdrdir)/ruby/internal/intern/marshal.h +bug.o: $(hdrdir)/ruby/internal/intern/numeric.h +bug.o: $(hdrdir)/ruby/internal/intern/object.h +bug.o: $(hdrdir)/ruby/internal/intern/parse.h +bug.o: $(hdrdir)/ruby/internal/intern/proc.h +bug.o: $(hdrdir)/ruby/internal/intern/process.h +bug.o: $(hdrdir)/ruby/internal/intern/random.h +bug.o: $(hdrdir)/ruby/internal/intern/range.h +bug.o: $(hdrdir)/ruby/internal/intern/rational.h +bug.o: $(hdrdir)/ruby/internal/intern/re.h +bug.o: $(hdrdir)/ruby/internal/intern/ruby.h +bug.o: $(hdrdir)/ruby/internal/intern/select.h +bug.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +bug.o: $(hdrdir)/ruby/internal/intern/signal.h +bug.o: $(hdrdir)/ruby/internal/intern/sprintf.h +bug.o: $(hdrdir)/ruby/internal/intern/string.h +bug.o: $(hdrdir)/ruby/internal/intern/struct.h +bug.o: $(hdrdir)/ruby/internal/intern/thread.h +bug.o: $(hdrdir)/ruby/internal/intern/time.h +bug.o: $(hdrdir)/ruby/internal/intern/variable.h +bug.o: $(hdrdir)/ruby/internal/intern/vm.h +bug.o: $(hdrdir)/ruby/internal/interpreter.h +bug.o: $(hdrdir)/ruby/internal/iterator.h +bug.o: $(hdrdir)/ruby/internal/memory.h +bug.o: $(hdrdir)/ruby/internal/method.h +bug.o: $(hdrdir)/ruby/internal/module.h +bug.o: $(hdrdir)/ruby/internal/newobj.h +bug.o: $(hdrdir)/ruby/internal/rgengc.h +bug.o: $(hdrdir)/ruby/internal/scan_args.h +bug.o: $(hdrdir)/ruby/internal/special_consts.h +bug.o: $(hdrdir)/ruby/internal/static_assert.h +bug.o: $(hdrdir)/ruby/internal/stdalign.h +bug.o: $(hdrdir)/ruby/internal/stdbool.h +bug.o: $(hdrdir)/ruby/internal/symbol.h +bug.o: $(hdrdir)/ruby/internal/value.h +bug.o: $(hdrdir)/ruby/internal/value_type.h +bug.o: $(hdrdir)/ruby/internal/variable.h +bug.o: $(hdrdir)/ruby/internal/warning_push.h +bug.o: $(hdrdir)/ruby/internal/xmalloc.h bug.o: $(hdrdir)/ruby/missing.h bug.o: $(hdrdir)/ruby/ruby.h bug.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/bug_reporter/depend b/ruby/ext/-test-/bug_reporter/depend index 62bac0356..d36d0fb6c 100644 --- a/ruby/ext/-test-/bug_reporter/depend +++ b/ruby/ext/-test-/bug_reporter/depend @@ -4,8 +4,155 @@ bug_reporter.o: $(arch_hdrdir)/ruby/config.h bug_reporter.o: $(hdrdir)/ruby.h bug_reporter.o: $(hdrdir)/ruby/assert.h bug_reporter.o: $(hdrdir)/ruby/backward.h +bug_reporter.o: $(hdrdir)/ruby/backward/2/assume.h +bug_reporter.o: $(hdrdir)/ruby/backward/2/attributes.h +bug_reporter.o: $(hdrdir)/ruby/backward/2/bool.h +bug_reporter.o: $(hdrdir)/ruby/backward/2/inttypes.h +bug_reporter.o: $(hdrdir)/ruby/backward/2/limits.h +bug_reporter.o: $(hdrdir)/ruby/backward/2/long_long.h +bug_reporter.o: $(hdrdir)/ruby/backward/2/stdalign.h +bug_reporter.o: $(hdrdir)/ruby/backward/2/stdarg.h bug_reporter.o: $(hdrdir)/ruby/defines.h bug_reporter.o: $(hdrdir)/ruby/intern.h +bug_reporter.o: $(hdrdir)/ruby/internal/anyargs.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/char.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/double.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/int.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/long.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/short.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +bug_reporter.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +bug_reporter.o: $(hdrdir)/ruby/internal/assume.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/artificial.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/cold.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/const.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/constexpr.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/deprecated.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/error.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/forceinline.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/format.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/noalias.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/noexcept.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/noinline.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/nonnull.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/noreturn.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/pure.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/restrict.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/warning.h +bug_reporter.o: $(hdrdir)/ruby/internal/attr/weakref.h +bug_reporter.o: $(hdrdir)/ruby/internal/cast.h +bug_reporter.o: $(hdrdir)/ruby/internal/compiler_is.h +bug_reporter.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +bug_reporter.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +bug_reporter.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +bug_reporter.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +bug_reporter.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +bug_reporter.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +bug_reporter.o: $(hdrdir)/ruby/internal/compiler_since.h +bug_reporter.o: $(hdrdir)/ruby/internal/config.h +bug_reporter.o: $(hdrdir)/ruby/internal/constant_p.h +bug_reporter.o: $(hdrdir)/ruby/internal/core.h +bug_reporter.o: $(hdrdir)/ruby/internal/core/rarray.h +bug_reporter.o: $(hdrdir)/ruby/internal/core/rbasic.h +bug_reporter.o: $(hdrdir)/ruby/internal/core/rbignum.h +bug_reporter.o: $(hdrdir)/ruby/internal/core/rclass.h +bug_reporter.o: $(hdrdir)/ruby/internal/core/rdata.h +bug_reporter.o: $(hdrdir)/ruby/internal/core/rfile.h +bug_reporter.o: $(hdrdir)/ruby/internal/core/rhash.h +bug_reporter.o: $(hdrdir)/ruby/internal/core/robject.h +bug_reporter.o: $(hdrdir)/ruby/internal/core/rregexp.h +bug_reporter.o: $(hdrdir)/ruby/internal/core/rstring.h +bug_reporter.o: $(hdrdir)/ruby/internal/core/rstruct.h +bug_reporter.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +bug_reporter.o: $(hdrdir)/ruby/internal/ctype.h +bug_reporter.o: $(hdrdir)/ruby/internal/dllexport.h +bug_reporter.o: $(hdrdir)/ruby/internal/dosish.h +bug_reporter.o: $(hdrdir)/ruby/internal/error.h +bug_reporter.o: $(hdrdir)/ruby/internal/eval.h +bug_reporter.o: $(hdrdir)/ruby/internal/event.h +bug_reporter.o: $(hdrdir)/ruby/internal/fl_type.h +bug_reporter.o: $(hdrdir)/ruby/internal/gc.h +bug_reporter.o: $(hdrdir)/ruby/internal/glob.h +bug_reporter.o: $(hdrdir)/ruby/internal/globals.h +bug_reporter.o: $(hdrdir)/ruby/internal/has/attribute.h +bug_reporter.o: $(hdrdir)/ruby/internal/has/builtin.h +bug_reporter.o: $(hdrdir)/ruby/internal/has/c_attribute.h +bug_reporter.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +bug_reporter.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +bug_reporter.o: $(hdrdir)/ruby/internal/has/extension.h +bug_reporter.o: $(hdrdir)/ruby/internal/has/feature.h +bug_reporter.o: $(hdrdir)/ruby/internal/has/warning.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/array.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/bignum.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/class.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/compar.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/complex.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/cont.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/dir.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/enum.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/enumerator.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/error.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/eval.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/file.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/gc.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/hash.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/io.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/load.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/marshal.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/numeric.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/object.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/parse.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/proc.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/process.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/random.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/range.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/rational.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/re.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/ruby.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/select.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/signal.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/sprintf.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/string.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/struct.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/thread.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/time.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/variable.h +bug_reporter.o: $(hdrdir)/ruby/internal/intern/vm.h +bug_reporter.o: $(hdrdir)/ruby/internal/interpreter.h +bug_reporter.o: $(hdrdir)/ruby/internal/iterator.h +bug_reporter.o: $(hdrdir)/ruby/internal/memory.h +bug_reporter.o: $(hdrdir)/ruby/internal/method.h +bug_reporter.o: $(hdrdir)/ruby/internal/module.h +bug_reporter.o: $(hdrdir)/ruby/internal/newobj.h +bug_reporter.o: $(hdrdir)/ruby/internal/rgengc.h +bug_reporter.o: $(hdrdir)/ruby/internal/scan_args.h +bug_reporter.o: $(hdrdir)/ruby/internal/special_consts.h +bug_reporter.o: $(hdrdir)/ruby/internal/static_assert.h +bug_reporter.o: $(hdrdir)/ruby/internal/stdalign.h +bug_reporter.o: $(hdrdir)/ruby/internal/stdbool.h +bug_reporter.o: $(hdrdir)/ruby/internal/symbol.h +bug_reporter.o: $(hdrdir)/ruby/internal/value.h +bug_reporter.o: $(hdrdir)/ruby/internal/value_type.h +bug_reporter.o: $(hdrdir)/ruby/internal/variable.h +bug_reporter.o: $(hdrdir)/ruby/internal/warning_push.h +bug_reporter.o: $(hdrdir)/ruby/internal/xmalloc.h bug_reporter.o: $(hdrdir)/ruby/missing.h bug_reporter.o: $(hdrdir)/ruby/ruby.h bug_reporter.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/class/depend b/ruby/ext/-test-/class/depend index 451256cc7..bb74e1f24 100644 --- a/ruby/ext/-test-/class/depend +++ b/ruby/ext/-test-/class/depend @@ -3,8 +3,155 @@ class2name.o: $(RUBY_EXTCONF_H) class2name.o: $(arch_hdrdir)/ruby/config.h class2name.o: $(hdrdir)/ruby/assert.h class2name.o: $(hdrdir)/ruby/backward.h +class2name.o: $(hdrdir)/ruby/backward/2/assume.h +class2name.o: $(hdrdir)/ruby/backward/2/attributes.h +class2name.o: $(hdrdir)/ruby/backward/2/bool.h +class2name.o: $(hdrdir)/ruby/backward/2/inttypes.h +class2name.o: $(hdrdir)/ruby/backward/2/limits.h +class2name.o: $(hdrdir)/ruby/backward/2/long_long.h +class2name.o: $(hdrdir)/ruby/backward/2/stdalign.h +class2name.o: $(hdrdir)/ruby/backward/2/stdarg.h class2name.o: $(hdrdir)/ruby/defines.h class2name.o: $(hdrdir)/ruby/intern.h +class2name.o: $(hdrdir)/ruby/internal/anyargs.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/char.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/double.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/int.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/long.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/short.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +class2name.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +class2name.o: $(hdrdir)/ruby/internal/assume.h +class2name.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +class2name.o: $(hdrdir)/ruby/internal/attr/artificial.h +class2name.o: $(hdrdir)/ruby/internal/attr/cold.h +class2name.o: $(hdrdir)/ruby/internal/attr/const.h +class2name.o: $(hdrdir)/ruby/internal/attr/constexpr.h +class2name.o: $(hdrdir)/ruby/internal/attr/deprecated.h +class2name.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +class2name.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +class2name.o: $(hdrdir)/ruby/internal/attr/error.h +class2name.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +class2name.o: $(hdrdir)/ruby/internal/attr/forceinline.h +class2name.o: $(hdrdir)/ruby/internal/attr/format.h +class2name.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +class2name.o: $(hdrdir)/ruby/internal/attr/noalias.h +class2name.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +class2name.o: $(hdrdir)/ruby/internal/attr/noexcept.h +class2name.o: $(hdrdir)/ruby/internal/attr/noinline.h +class2name.o: $(hdrdir)/ruby/internal/attr/nonnull.h +class2name.o: $(hdrdir)/ruby/internal/attr/noreturn.h +class2name.o: $(hdrdir)/ruby/internal/attr/pure.h +class2name.o: $(hdrdir)/ruby/internal/attr/restrict.h +class2name.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +class2name.o: $(hdrdir)/ruby/internal/attr/warning.h +class2name.o: $(hdrdir)/ruby/internal/attr/weakref.h +class2name.o: $(hdrdir)/ruby/internal/cast.h +class2name.o: $(hdrdir)/ruby/internal/compiler_is.h +class2name.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +class2name.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +class2name.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +class2name.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +class2name.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +class2name.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +class2name.o: $(hdrdir)/ruby/internal/compiler_since.h +class2name.o: $(hdrdir)/ruby/internal/config.h +class2name.o: $(hdrdir)/ruby/internal/constant_p.h +class2name.o: $(hdrdir)/ruby/internal/core.h +class2name.o: $(hdrdir)/ruby/internal/core/rarray.h +class2name.o: $(hdrdir)/ruby/internal/core/rbasic.h +class2name.o: $(hdrdir)/ruby/internal/core/rbignum.h +class2name.o: $(hdrdir)/ruby/internal/core/rclass.h +class2name.o: $(hdrdir)/ruby/internal/core/rdata.h +class2name.o: $(hdrdir)/ruby/internal/core/rfile.h +class2name.o: $(hdrdir)/ruby/internal/core/rhash.h +class2name.o: $(hdrdir)/ruby/internal/core/robject.h +class2name.o: $(hdrdir)/ruby/internal/core/rregexp.h +class2name.o: $(hdrdir)/ruby/internal/core/rstring.h +class2name.o: $(hdrdir)/ruby/internal/core/rstruct.h +class2name.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +class2name.o: $(hdrdir)/ruby/internal/ctype.h +class2name.o: $(hdrdir)/ruby/internal/dllexport.h +class2name.o: $(hdrdir)/ruby/internal/dosish.h +class2name.o: $(hdrdir)/ruby/internal/error.h +class2name.o: $(hdrdir)/ruby/internal/eval.h +class2name.o: $(hdrdir)/ruby/internal/event.h +class2name.o: $(hdrdir)/ruby/internal/fl_type.h +class2name.o: $(hdrdir)/ruby/internal/gc.h +class2name.o: $(hdrdir)/ruby/internal/glob.h +class2name.o: $(hdrdir)/ruby/internal/globals.h +class2name.o: $(hdrdir)/ruby/internal/has/attribute.h +class2name.o: $(hdrdir)/ruby/internal/has/builtin.h +class2name.o: $(hdrdir)/ruby/internal/has/c_attribute.h +class2name.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +class2name.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +class2name.o: $(hdrdir)/ruby/internal/has/extension.h +class2name.o: $(hdrdir)/ruby/internal/has/feature.h +class2name.o: $(hdrdir)/ruby/internal/has/warning.h +class2name.o: $(hdrdir)/ruby/internal/intern/array.h +class2name.o: $(hdrdir)/ruby/internal/intern/bignum.h +class2name.o: $(hdrdir)/ruby/internal/intern/class.h +class2name.o: $(hdrdir)/ruby/internal/intern/compar.h +class2name.o: $(hdrdir)/ruby/internal/intern/complex.h +class2name.o: $(hdrdir)/ruby/internal/intern/cont.h +class2name.o: $(hdrdir)/ruby/internal/intern/dir.h +class2name.o: $(hdrdir)/ruby/internal/intern/enum.h +class2name.o: $(hdrdir)/ruby/internal/intern/enumerator.h +class2name.o: $(hdrdir)/ruby/internal/intern/error.h +class2name.o: $(hdrdir)/ruby/internal/intern/eval.h +class2name.o: $(hdrdir)/ruby/internal/intern/file.h +class2name.o: $(hdrdir)/ruby/internal/intern/gc.h +class2name.o: $(hdrdir)/ruby/internal/intern/hash.h +class2name.o: $(hdrdir)/ruby/internal/intern/io.h +class2name.o: $(hdrdir)/ruby/internal/intern/load.h +class2name.o: $(hdrdir)/ruby/internal/intern/marshal.h +class2name.o: $(hdrdir)/ruby/internal/intern/numeric.h +class2name.o: $(hdrdir)/ruby/internal/intern/object.h +class2name.o: $(hdrdir)/ruby/internal/intern/parse.h +class2name.o: $(hdrdir)/ruby/internal/intern/proc.h +class2name.o: $(hdrdir)/ruby/internal/intern/process.h +class2name.o: $(hdrdir)/ruby/internal/intern/random.h +class2name.o: $(hdrdir)/ruby/internal/intern/range.h +class2name.o: $(hdrdir)/ruby/internal/intern/rational.h +class2name.o: $(hdrdir)/ruby/internal/intern/re.h +class2name.o: $(hdrdir)/ruby/internal/intern/ruby.h +class2name.o: $(hdrdir)/ruby/internal/intern/select.h +class2name.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +class2name.o: $(hdrdir)/ruby/internal/intern/signal.h +class2name.o: $(hdrdir)/ruby/internal/intern/sprintf.h +class2name.o: $(hdrdir)/ruby/internal/intern/string.h +class2name.o: $(hdrdir)/ruby/internal/intern/struct.h +class2name.o: $(hdrdir)/ruby/internal/intern/thread.h +class2name.o: $(hdrdir)/ruby/internal/intern/time.h +class2name.o: $(hdrdir)/ruby/internal/intern/variable.h +class2name.o: $(hdrdir)/ruby/internal/intern/vm.h +class2name.o: $(hdrdir)/ruby/internal/interpreter.h +class2name.o: $(hdrdir)/ruby/internal/iterator.h +class2name.o: $(hdrdir)/ruby/internal/memory.h +class2name.o: $(hdrdir)/ruby/internal/method.h +class2name.o: $(hdrdir)/ruby/internal/module.h +class2name.o: $(hdrdir)/ruby/internal/newobj.h +class2name.o: $(hdrdir)/ruby/internal/rgengc.h +class2name.o: $(hdrdir)/ruby/internal/scan_args.h +class2name.o: $(hdrdir)/ruby/internal/special_consts.h +class2name.o: $(hdrdir)/ruby/internal/static_assert.h +class2name.o: $(hdrdir)/ruby/internal/stdalign.h +class2name.o: $(hdrdir)/ruby/internal/stdbool.h +class2name.o: $(hdrdir)/ruby/internal/symbol.h +class2name.o: $(hdrdir)/ruby/internal/value.h +class2name.o: $(hdrdir)/ruby/internal/value_type.h +class2name.o: $(hdrdir)/ruby/internal/variable.h +class2name.o: $(hdrdir)/ruby/internal/warning_push.h +class2name.o: $(hdrdir)/ruby/internal/xmalloc.h class2name.o: $(hdrdir)/ruby/missing.h class2name.o: $(hdrdir)/ruby/ruby.h class2name.o: $(hdrdir)/ruby/st.h @@ -15,8 +162,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/cxxanyargs/cxxanyargs.cpp b/ruby/ext/-test-/cxxanyargs/cxxanyargs.cpp index efe35fa35..eded13e2e 100644 --- a/ruby/ext/-test-/cxxanyargs/cxxanyargs.cpp +++ b/ruby/ext/-test-/cxxanyargs/cxxanyargs.cpp @@ -5,12 +5,18 @@ #elif defined(_MSC_VER) #pragma warning(disable : 4996) +#elif defined(__INTEL_COMPILER) +#pragma warning(disable : 1786) + #elif defined(__clang__) #pragma clang diagnostic ignored "-Wdeprecated-declarations" #elif defined(__GNUC__) #pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#elif defined(__SUNPRO_CC) +#pragma error_messages (off,symdeprecated) + #else // :FIXME: improve here for your compiler. @@ -36,6 +42,18 @@ namespace test_rb_define_virtual_variable { RUBY_METHOD_FUNC(getter), reinterpret_cast(setter)); // old rb_define_virtual_variable("test", getter, setter); // new + +#ifdef HAVE_NULLPTR + rb_define_virtual_variable("test", nullptr, reinterpret_cast(setter)); + rb_define_virtual_variable("test", nullptr, setter); + + rb_define_virtual_variable("test", RUBY_METHOD_FUNC(getter), nullptr); + rb_define_virtual_variable("test", getter, nullptr); + + // It doesn't make any sense for both function pointers be nullptr at + // the same time. +#endif + return self; } } @@ -62,6 +80,18 @@ struct test_rb_define_hooked_variable { RUBY_METHOD_FUNC(getter), reinterpret_cast(setter)); // old rb_define_hooked_variable("test", &v, getter, setter); // new + +#ifdef HAVE_NULLPTR + rb_define_hooked_variable("test", &v, nullptr, reinterpret_cast(setter)); + rb_define_hooked_variable("test", &v, nullptr, setter); + + rb_define_hooked_variable("test", &v, RUBY_METHOD_FUNC(getter), nullptr); + rb_define_hooked_variable("test", &v, getter, nullptr); + + // It doesn't make any sense for both function pointers be nullptr at + // the same time. +#endif + return self; } }; @@ -83,6 +113,10 @@ namespace test_rb_iterate { VALUE test(VALUE self) { +#ifdef HAVE_NULLPTR + rb_iterate(iter, self, nullptr, self); +#endif + rb_iterate(iter, self, RUBY_METHOD_FUNC(block), self); // old return rb_iterate(iter, self, block, self); // new } @@ -100,6 +134,11 @@ namespace test_rb_block_call { { const ID mid = rb_intern("each"); const VALUE argv[] = { Qundef }; + +#ifdef HAVE_NULLPTR + rb_block_call(self, mid, 0, argv, nullptr, self); +#endif + rb_block_call(self, mid, 0, argv, RUBY_METHOD_FUNC(block), self); // old return rb_block_call(self, mid, 0, argv, block, self); // new } @@ -121,6 +160,11 @@ namespace test_rb_rescue { VALUE test(VALUE self) { +#ifdef HAVE_NULLPTR + rb_rescue(RUBY_METHOD_FUNC(begin), self, nullptr, self); + rb_rescue(begin, self, nullptr, self); +#endif + rb_rescue(RUBY_METHOD_FUNC(begin), self, RUBY_METHOD_FUNC(rescue), self); // old return rb_rescue(begin, self, rescue, self); // new } @@ -142,9 +186,14 @@ namespace test_rb_rescue2 { VALUE test(VALUE self) { +#ifdef HAVE_NULLPTR + rb_rescue2(RUBY_METHOD_FUNC(begin), self, nullptr, self, rb_eStandardError, rb_eFatal, (VALUE)0); + rb_rescue2(begin, self, nullptr, self, rb_eStandardError, rb_eFatal, (VALUE)0); +#endif + rb_rescue2(RUBY_METHOD_FUNC(begin), self, RUBY_METHOD_FUNC(rescue), self, - rb_eStandardError, rb_eFatal, 0); // old - return rb_rescue2(begin, self, rescue, self, rb_eStandardError, rb_eFatal, 0); // new + rb_eStandardError, rb_eFatal, (VALUE)0); // old + return rb_rescue2(begin, self, rescue, self, rb_eStandardError, rb_eFatal, (VALUE)0); // new } } @@ -164,6 +213,11 @@ namespace test_rb_ensure { VALUE test(VALUE self) { +#ifdef HAVE_NULLPTR + rb_ensure(RUBY_METHOD_FUNC(begin), self, nullptr, self); + rb_ensure(begin, self, nullptr, self); +#endif + rb_ensure(RUBY_METHOD_FUNC(begin), self, RUBY_METHOD_FUNC(ensure), self); // old return rb_ensure(begin, self, ensure, self); // new } @@ -180,6 +234,11 @@ namespace test_rb_catch { test(VALUE self) { static const char *zero = 0; + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as a catcher. +#endif + rb_catch(zero, RUBY_METHOD_FUNC(catcher), self); // old return rb_catch(zero, catcher, self); // new } @@ -195,6 +254,10 @@ namespace test_rb_catch_obj { VALUE test(VALUE self) { +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as a catcher. +#endif + rb_catch_obj(self, RUBY_METHOD_FUNC(catcher), self); // old return rb_catch_obj(self, catcher, self); // new } @@ -210,6 +273,10 @@ namespace test_rb_fiber_new { VALUE test(VALUE self) { +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as a fiber. +#endif + rb_fiber_new(RUBY_METHOD_FUNC(fiber), self); // old return rb_fiber_new(fiber, self); // new } @@ -225,6 +292,10 @@ namespace test_rb_proc_new { VALUE test(VALUE self) { +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as a proc. +#endif + rb_fiber_new(RUBY_METHOD_FUNC(proc), self); // old return rb_fiber_new(proc, self); // new } @@ -244,6 +315,11 @@ struct test_rb_thread_create { test(VALUE self) { v = self; + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as a thread. +#endif + rb_thread_create(RUBY_METHOD_FUNC(thread), &v); // old return rb_thread_create(thread, &v); // new } @@ -262,6 +338,11 @@ namespace test_st_foreach { { st_data_t data = 0; st_table *st = st_init_numtable(); + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as an iterator. +#endif + st_foreach(st, reinterpret_cast(iter), data); // old st_foreach(st, iter, data); // new return self; @@ -280,6 +361,11 @@ namespace test_st_foreach_check { { st_data_t data = 0; st_table *st = st_init_numtable(); + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as an iterator. +#endif + st_foreach_check(st, reinterpret_cast(iter), data, data); // old st_foreach_check(st, iter, data, data); // new return self; @@ -298,6 +384,11 @@ namespace test_st_foreach_safe { { st_data_t data = 0; st_table *st = st_init_numtable(); + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as an iterator. +#endif + st_foreach_safe(st, reinterpret_cast(iter), data); // old st_foreach_safe(st, iter, data); // new return self; @@ -315,6 +406,11 @@ namespace test_rb_hash_foreach { test(VALUE self) { VALUE h = rb_hash_new(); + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as an iterator. +#endif + rb_hash_foreach(h, reinterpret_cast(iter), self); // old rb_hash_foreach(h, iter, self); // new return self; @@ -331,6 +427,10 @@ namespace test_rb_ivar_foreach { VALUE test(VALUE self) { +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as an iterator. +#endif + rb_ivar_foreach(self, reinterpret_cast(iter), self); // old rb_ivar_foreach(self, iter, self); // new return self; @@ -362,6 +462,12 @@ namespace test_rb_define_method { return Qnil; } + static VALUE + mc(int, const VALUE*, VALUE) + { + return Qnil; + } + VALUE test(VALUE self) { @@ -370,18 +476,102 @@ namespace test_rb_define_method { rb_define_method(self, "m2", m2, 2); rb_define_method(self, "ma", ma, -2); rb_define_method(self, "mv", mv, -1); + rb_define_method(self, "mc", mc, -1); // Cast by RUBY_METHOD_FUNC rb_define_method(self, "m1", RUBY_METHOD_FUNC(m1), 1); rb_define_method(self, "m2", RUBY_METHOD_FUNC(m2), 2); rb_define_method(self, "ma", RUBY_METHOD_FUNC(ma), -2); rb_define_method(self, "mv", RUBY_METHOD_FUNC(mv), -1); + rb_define_method(self, "mc", RUBY_METHOD_FUNC(mc), -1); // Explicit cast instead of RUBY_METHOD_FUNC rb_define_method(self, "m1", (VALUE (*)(...))(m1), 1); rb_define_method(self, "m2", (VALUE (*)(...))(m2), 2); rb_define_method(self, "ma", (VALUE (*)(...))(ma), -2); rb_define_method(self, "mv", (VALUE (*)(...))(mv), -1); + rb_define_method(self, "mc", (VALUE (*)(...))(mc), -1); + + // rb_f_notimplement + rb_define_method(self, "m1", rb_f_notimplement, 1); + rb_define_method(self, "m2", rb_f_notimplement, 2); + rb_define_method(self, "ma", rb_f_notimplement, -2); + rb_define_method(self, "mv", rb_f_notimplement, -1); + rb_define_method(self, "mc", rb_f_notimplement, -1); + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as a method. +#endif + + return self; + } +} + +namespace test_rb_define_method_id { + static VALUE + m1(VALUE, VALUE) + { + return Qnil; + } + + static VALUE + m2(VALUE, VALUE, VALUE) + { + return Qnil; + } + + static VALUE + ma(VALUE, VALUE) + { + return Qnil; + } + + static VALUE + mv(int, VALUE*, VALUE) + { + return Qnil; + } + + static VALUE + mc(int, const VALUE*, VALUE) + { + return Qnil; + } + + VALUE + test(VALUE self) + { + // No cast + rb_define_method_id(self, rb_intern("m1"), m1, 1); + rb_define_method_id(self, rb_intern("m2"), m2, 2); + rb_define_method_id(self, rb_intern("ma"), ma, -2); + rb_define_method_id(self, rb_intern("mv"), mv, -1); + rb_define_method_id(self, rb_intern("mc"), mc, -1); + + // Cast by RUBY_METHOD_FUNC + rb_define_method_id(self, rb_intern("m1"), RUBY_METHOD_FUNC(m1), 1); + rb_define_method_id(self, rb_intern("m2"), RUBY_METHOD_FUNC(m2), 2); + rb_define_method_id(self, rb_intern("ma"), RUBY_METHOD_FUNC(ma), -2); + rb_define_method_id(self, rb_intern("mv"), RUBY_METHOD_FUNC(mv), -1); + rb_define_method_id(self, rb_intern("mc"), RUBY_METHOD_FUNC(mc), -1); + + // Explicit cast instead of RUBY_METHOD_FUNC + rb_define_method_id(self, rb_intern("m1"), (VALUE (*)(...))(m1), 1); + rb_define_method_id(self, rb_intern("m2"), (VALUE (*)(...))(m2), 2); + rb_define_method_id(self, rb_intern("ma"), (VALUE (*)(...))(ma), -2); + rb_define_method_id(self, rb_intern("mv"), (VALUE (*)(...))(mv), -1); + rb_define_method_id(self, rb_intern("mc"), (VALUE (*)(...))(mc), -1); + + // rb_f_notimplement + rb_define_method_id(self, rb_intern("m1"), rb_f_notimplement, 1); + rb_define_method_id(self, rb_intern("m2"), rb_f_notimplement, 2); + rb_define_method_id(self, rb_intern("ma"), rb_f_notimplement, -2); + rb_define_method_id(self, rb_intern("mv"), rb_f_notimplement, -1); + rb_define_method_id(self, rb_intern("mc"), rb_f_notimplement, -1); + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as a method. +#endif return self; } @@ -412,6 +602,12 @@ namespace test_rb_define_module_function { return Qnil; } + static VALUE + mc(int, const VALUE*, VALUE) + { + return Qnil; + } + VALUE test(VALUE self) { @@ -420,18 +616,32 @@ namespace test_rb_define_module_function { rb_define_module_function(self, "m2", m2, 2); rb_define_module_function(self, "ma", ma, -2); rb_define_module_function(self, "mv", mv, -1); + rb_define_module_function(self, "mc", mc, -1); // Cast by RUBY_METHOD_FUNC rb_define_module_function(self, "m1", RUBY_METHOD_FUNC(m1), 1); rb_define_module_function(self, "m2", RUBY_METHOD_FUNC(m2), 2); rb_define_module_function(self, "ma", RUBY_METHOD_FUNC(ma), -2); rb_define_module_function(self, "mv", RUBY_METHOD_FUNC(mv), -1); + rb_define_module_function(self, "mc", RUBY_METHOD_FUNC(mc), -1); // Explicit cast instead of RUBY_METHOD_FUNC rb_define_module_function(self, "m1", (VALUE (*)(...))(m1), 1); rb_define_module_function(self, "m2", (VALUE (*)(...))(m2), 2); rb_define_module_function(self, "ma", (VALUE (*)(...))(ma), -2); rb_define_module_function(self, "mv", (VALUE (*)(...))(mv), -1); + rb_define_module_function(self, "mc", (VALUE (*)(...))(mc), -1); + + // rb_f_notimplement + rb_define_module_function(self, "m1", rb_f_notimplement, 1); + rb_define_module_function(self, "m2", rb_f_notimplement, 2); + rb_define_module_function(self, "ma", rb_f_notimplement, -2); + rb_define_module_function(self, "mv", rb_f_notimplement, -1); + rb_define_module_function(self, "mc", rb_f_notimplement, -1); + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as a method. +#endif return self; } @@ -462,6 +672,12 @@ namespace test_rb_define_singleton_method { return Qnil; } + static VALUE + mc(int, const VALUE*, VALUE) + { + return Qnil; + } + VALUE test(VALUE self) { @@ -470,18 +686,32 @@ namespace test_rb_define_singleton_method { rb_define_singleton_method(self, "m2", m2, 2); rb_define_singleton_method(self, "ma", ma, -2); rb_define_singleton_method(self, "mv", mv, -1); + rb_define_singleton_method(self, "mc", mc, -1); // Cast by RUBY_METHOD_FUNC rb_define_singleton_method(self, "m1", RUBY_METHOD_FUNC(m1), 1); rb_define_singleton_method(self, "m2", RUBY_METHOD_FUNC(m2), 2); rb_define_singleton_method(self, "ma", RUBY_METHOD_FUNC(ma), -2); rb_define_singleton_method(self, "mv", RUBY_METHOD_FUNC(mv), -1); + rb_define_singleton_method(self, "mc", RUBY_METHOD_FUNC(mc), -1); // Explicit cast instead of RUBY_METHOD_FUNC rb_define_singleton_method(self, "m1", (VALUE (*)(...))(m1), 1); rb_define_singleton_method(self, "m2", (VALUE (*)(...))(m2), 2); rb_define_singleton_method(self, "ma", (VALUE (*)(...))(ma), -2); rb_define_singleton_method(self, "mv", (VALUE (*)(...))(mv), -1); + rb_define_singleton_method(self, "mc", (VALUE (*)(...))(mc), -1); + + // rb_f_notimplement + rb_define_singleton_method(self, "m1", rb_f_notimplement, 1); + rb_define_singleton_method(self, "m2", rb_f_notimplement, 2); + rb_define_singleton_method(self, "ma", rb_f_notimplement, -2); + rb_define_singleton_method(self, "mv", rb_f_notimplement, -1); + rb_define_singleton_method(self, "mc", rb_f_notimplement, -1); + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as a method. +#endif return self; } @@ -512,6 +742,12 @@ namespace test_rb_define_protected_method { return Qnil; } + static VALUE + mc(int, const VALUE*, VALUE) + { + return Qnil; + } + VALUE test(VALUE self) { @@ -520,18 +756,32 @@ namespace test_rb_define_protected_method { rb_define_protected_method(self, "m2", m2, 2); rb_define_protected_method(self, "ma", ma, -2); rb_define_protected_method(self, "mv", mv, -1); + rb_define_protected_method(self, "mc", mc, -1); // Cast by RUBY_METHOD_FUNC rb_define_protected_method(self, "m1", RUBY_METHOD_FUNC(m1), 1); rb_define_protected_method(self, "m2", RUBY_METHOD_FUNC(m2), 2); rb_define_protected_method(self, "ma", RUBY_METHOD_FUNC(ma), -2); rb_define_protected_method(self, "mv", RUBY_METHOD_FUNC(mv), -1); + rb_define_protected_method(self, "mc", RUBY_METHOD_FUNC(mc), -1); // Explicit cast instead of RUBY_METHOD_FUNC rb_define_protected_method(self, "m1", (VALUE (*)(...))(m1), 1); rb_define_protected_method(self, "m2", (VALUE (*)(...))(m2), 2); rb_define_protected_method(self, "ma", (VALUE (*)(...))(ma), -2); rb_define_protected_method(self, "mv", (VALUE (*)(...))(mv), -1); + rb_define_protected_method(self, "mc", (VALUE (*)(...))(mc), -1); + + // rb_f_notimplement + rb_define_protected_method(self, "m1", rb_f_notimplement, 1); + rb_define_protected_method(self, "m2", rb_f_notimplement, 2); + rb_define_protected_method(self, "ma", rb_f_notimplement, -2); + rb_define_protected_method(self, "mv", rb_f_notimplement, -1); + rb_define_protected_method(self, "mc", rb_f_notimplement, -1); + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as a method. +#endif return self; } @@ -562,6 +812,12 @@ namespace test_rb_define_private_method { return Qnil; } + static VALUE + mc(int, const VALUE*, VALUE) + { + return Qnil; + } + VALUE test(VALUE self) { @@ -570,18 +826,102 @@ namespace test_rb_define_private_method { rb_define_private_method(self, "m2", m2, 2); rb_define_private_method(self, "ma", ma, -2); rb_define_private_method(self, "mv", mv, -1); + rb_define_private_method(self, "mc", mc, -1); // Cast by RUBY_METHOD_FUNC rb_define_private_method(self, "m1", RUBY_METHOD_FUNC(m1), 1); rb_define_private_method(self, "m2", RUBY_METHOD_FUNC(m2), 2); rb_define_private_method(self, "ma", RUBY_METHOD_FUNC(ma), -2); rb_define_private_method(self, "mv", RUBY_METHOD_FUNC(mv), -1); + rb_define_private_method(self, "mc", RUBY_METHOD_FUNC(mc), -1); // Explicit cast instead of RUBY_METHOD_FUNC rb_define_private_method(self, "m1", (VALUE (*)(...))(m1), 1); rb_define_private_method(self, "m2", (VALUE (*)(...))(m2), 2); rb_define_private_method(self, "ma", (VALUE (*)(...))(ma), -2); rb_define_private_method(self, "mv", (VALUE (*)(...))(mv), -1); + rb_define_private_method(self, "mc", (VALUE (*)(...))(mc), -1); + + // rb_f_notimplement + rb_define_private_method(self, "m1", rb_f_notimplement, 1); + rb_define_private_method(self, "m2", rb_f_notimplement, 2); + rb_define_private_method(self, "ma", rb_f_notimplement, -2); + rb_define_private_method(self, "mv", rb_f_notimplement, -1); + rb_define_private_method(self, "mc", rb_f_notimplement, -1); + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as a method. +#endif + + return self; + } +} + +namespace test_rb_define_global_function { + static VALUE + m1(VALUE, VALUE) + { + return Qnil; + } + + static VALUE + m2(VALUE, VALUE, VALUE) + { + return Qnil; + } + + static VALUE + ma(VALUE, VALUE) + { + return Qnil; + } + + static VALUE + mv(int, VALUE*, VALUE) + { + return Qnil; + } + + static VALUE + mc(int, const VALUE*, VALUE) + { + return Qnil; + } + + VALUE + test(VALUE self) + { + // No cast + rb_define_global_function("m1", m1, 1); + rb_define_global_function("m2", m2, 2); + rb_define_global_function("ma", ma, -2); + rb_define_global_function("mv", mv, -1); + rb_define_global_function("mc", mc, -1); + + // Cast by RUBY_METHOD_FUNC + rb_define_global_function("m1", RUBY_METHOD_FUNC(m1), 1); + rb_define_global_function("m2", RUBY_METHOD_FUNC(m2), 2); + rb_define_global_function("ma", RUBY_METHOD_FUNC(ma), -2); + rb_define_global_function("mv", RUBY_METHOD_FUNC(mv), -1); + rb_define_global_function("mc", RUBY_METHOD_FUNC(mc), -1); + + // Explicit cast instead of RUBY_METHOD_FUNC + rb_define_global_function("m1", (VALUE (*)(...))(m1), 1); + rb_define_global_function("m2", (VALUE (*)(...))(m2), 2); + rb_define_global_function("ma", (VALUE (*)(...))(ma), -2); + rb_define_global_function("mv", (VALUE (*)(...))(mv), -1); + rb_define_global_function("mc", (VALUE (*)(...))(mc), -1); + + // rb_f_notimplement + rb_define_global_function("m1", rb_f_notimplement, 1); + rb_define_global_function("m2", rb_f_notimplement, 2); + rb_define_global_function("ma", rb_f_notimplement, -2); + rb_define_global_function("mv", rb_f_notimplement, -1); + rb_define_global_function("mc", rb_f_notimplement, -1); + +#ifdef HAVE_NULLPTR + // It doesn't make any sense at all to pass nullptr as a method. +#endif return self; } @@ -612,8 +952,10 @@ Init_cxxanyargs(void) test(rb_hash_foreach); test(rb_ivar_foreach); test(rb_define_method); + test(rb_define_method_id); test(rb_define_module_function); test(rb_define_singleton_method); test(rb_define_protected_method); test(rb_define_private_method); + test(rb_define_global_function); } diff --git a/ruby/ext/-test-/cxxanyargs/depend b/ruby/ext/-test-/cxxanyargs/depend index 02113b6c2..fc3d8e45d 100644 --- a/ruby/ext/-test-/cxxanyargs/depend +++ b/ruby/ext/-test-/cxxanyargs/depend @@ -6,20 +6,8 @@ $(TARGET_SO) $(STATIC_LIB): $(FAILURES:.cpp=.failed) $(Q)$(RUBY) -rfileutils \ -e "t = ARGV.shift" \ -e "err = IO.popen(ARGV, err:[:child, :out], &:read)" \ - -e "abort err unless /rb_define_method/ =~ err" \ + -e "abort err unless /rb_define_method/ =~ err.b" \ -e "File.write(t, err)" $@ $(MAKE) $(*F).o # AUTOGENERATED DEPENDENCIES START -cxxanyargs.o: $(RUBY_EXTCONF_H) -cxxanyargs.o: $(arch_hdrdir)/ruby/config.h -cxxanyargs.o: $(hdrdir)/ruby/assert.h -cxxanyargs.o: $(hdrdir)/ruby/backward.h -cxxanyargs.o: $(hdrdir)/ruby/backward/cxxanyargs.hpp -cxxanyargs.o: $(hdrdir)/ruby/defines.h -cxxanyargs.o: $(hdrdir)/ruby/intern.h -cxxanyargs.o: $(hdrdir)/ruby/missing.h -cxxanyargs.o: $(hdrdir)/ruby/ruby.h -cxxanyargs.o: $(hdrdir)/ruby/st.h -cxxanyargs.o: $(hdrdir)/ruby/subst.h -cxxanyargs.o: cxxanyargs.cpp # AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/-test-/cxxanyargs/extconf.rb b/ruby/ext/-test-/cxxanyargs/extconf.rb index 08d8c8301..9749f4206 100644 --- a/ruby/ext/-test-/cxxanyargs/extconf.rb +++ b/ruby/ext/-test-/cxxanyargs/extconf.rb @@ -2,12 +2,23 @@ cxx = MakeMakefile["C++"] -ok = cxx.try_compile(<<~'begin', "") do |x| +# #### have_devel hack #### +# cxx.try_compile tries to detect compilers, but the try_compile below is +# trying to detect a compiler in a different way. We need to prevent the +# default detection routine. + +cxx.instance_variable_set(:'@have_devel', true) + +ok = cxx.try_link(<<~'begin', "") do |x| #include "ruby/config.h" + #ifdef RUBY_ALTERNATIVE_MALLOC_HEADER + # include RUBY_ALTERNATIVE_MALLOC_HEADER + #endif + namespace { - typedef int conftest[SIZEOF_LONG == sizeof(long) ? 1 : -1]; - typedef int conftest[SIZEOF_VOIDP == sizeof(void*) ? 1 : -1]; + typedef int conftest1[SIZEOF_LONG == sizeof(long) ? 1 : -1]; + typedef int conftest2[SIZEOF_VOIDP == sizeof(void*) ? 1 : -1]; } int @@ -21,6 +32,8 @@ x.sub! %<#include "ruby.h">, '' end +cxx.instance_variable_set(:'@have_devel', ok) + if ok $srcs = %w[cxxanyargs.cpp] failures = Dir.glob($srcdir + "/failure*.cpp").map {|n| File.basename(n)} diff --git a/ruby/ext/-test-/debug/depend b/ruby/ext/-test-/debug/depend index 662ed8751..20f7be675 100644 --- a/ruby/ext/-test-/debug/depend +++ b/ruby/ext/-test-/debug/depend @@ -4,8 +4,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h @@ -15,9 +162,156 @@ inspector.o: $(RUBY_EXTCONF_H) inspector.o: $(arch_hdrdir)/ruby/config.h inspector.o: $(hdrdir)/ruby/assert.h inspector.o: $(hdrdir)/ruby/backward.h +inspector.o: $(hdrdir)/ruby/backward/2/assume.h +inspector.o: $(hdrdir)/ruby/backward/2/attributes.h +inspector.o: $(hdrdir)/ruby/backward/2/bool.h +inspector.o: $(hdrdir)/ruby/backward/2/inttypes.h +inspector.o: $(hdrdir)/ruby/backward/2/limits.h +inspector.o: $(hdrdir)/ruby/backward/2/long_long.h +inspector.o: $(hdrdir)/ruby/backward/2/stdalign.h +inspector.o: $(hdrdir)/ruby/backward/2/stdarg.h inspector.o: $(hdrdir)/ruby/debug.h inspector.o: $(hdrdir)/ruby/defines.h inspector.o: $(hdrdir)/ruby/intern.h +inspector.o: $(hdrdir)/ruby/internal/anyargs.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/char.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/double.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/int.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/long.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/short.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +inspector.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +inspector.o: $(hdrdir)/ruby/internal/assume.h +inspector.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +inspector.o: $(hdrdir)/ruby/internal/attr/artificial.h +inspector.o: $(hdrdir)/ruby/internal/attr/cold.h +inspector.o: $(hdrdir)/ruby/internal/attr/const.h +inspector.o: $(hdrdir)/ruby/internal/attr/constexpr.h +inspector.o: $(hdrdir)/ruby/internal/attr/deprecated.h +inspector.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +inspector.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +inspector.o: $(hdrdir)/ruby/internal/attr/error.h +inspector.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +inspector.o: $(hdrdir)/ruby/internal/attr/forceinline.h +inspector.o: $(hdrdir)/ruby/internal/attr/format.h +inspector.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +inspector.o: $(hdrdir)/ruby/internal/attr/noalias.h +inspector.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +inspector.o: $(hdrdir)/ruby/internal/attr/noexcept.h +inspector.o: $(hdrdir)/ruby/internal/attr/noinline.h +inspector.o: $(hdrdir)/ruby/internal/attr/nonnull.h +inspector.o: $(hdrdir)/ruby/internal/attr/noreturn.h +inspector.o: $(hdrdir)/ruby/internal/attr/pure.h +inspector.o: $(hdrdir)/ruby/internal/attr/restrict.h +inspector.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +inspector.o: $(hdrdir)/ruby/internal/attr/warning.h +inspector.o: $(hdrdir)/ruby/internal/attr/weakref.h +inspector.o: $(hdrdir)/ruby/internal/cast.h +inspector.o: $(hdrdir)/ruby/internal/compiler_is.h +inspector.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +inspector.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +inspector.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +inspector.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +inspector.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +inspector.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +inspector.o: $(hdrdir)/ruby/internal/compiler_since.h +inspector.o: $(hdrdir)/ruby/internal/config.h +inspector.o: $(hdrdir)/ruby/internal/constant_p.h +inspector.o: $(hdrdir)/ruby/internal/core.h +inspector.o: $(hdrdir)/ruby/internal/core/rarray.h +inspector.o: $(hdrdir)/ruby/internal/core/rbasic.h +inspector.o: $(hdrdir)/ruby/internal/core/rbignum.h +inspector.o: $(hdrdir)/ruby/internal/core/rclass.h +inspector.o: $(hdrdir)/ruby/internal/core/rdata.h +inspector.o: $(hdrdir)/ruby/internal/core/rfile.h +inspector.o: $(hdrdir)/ruby/internal/core/rhash.h +inspector.o: $(hdrdir)/ruby/internal/core/robject.h +inspector.o: $(hdrdir)/ruby/internal/core/rregexp.h +inspector.o: $(hdrdir)/ruby/internal/core/rstring.h +inspector.o: $(hdrdir)/ruby/internal/core/rstruct.h +inspector.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +inspector.o: $(hdrdir)/ruby/internal/ctype.h +inspector.o: $(hdrdir)/ruby/internal/dllexport.h +inspector.o: $(hdrdir)/ruby/internal/dosish.h +inspector.o: $(hdrdir)/ruby/internal/error.h +inspector.o: $(hdrdir)/ruby/internal/eval.h +inspector.o: $(hdrdir)/ruby/internal/event.h +inspector.o: $(hdrdir)/ruby/internal/fl_type.h +inspector.o: $(hdrdir)/ruby/internal/gc.h +inspector.o: $(hdrdir)/ruby/internal/glob.h +inspector.o: $(hdrdir)/ruby/internal/globals.h +inspector.o: $(hdrdir)/ruby/internal/has/attribute.h +inspector.o: $(hdrdir)/ruby/internal/has/builtin.h +inspector.o: $(hdrdir)/ruby/internal/has/c_attribute.h +inspector.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +inspector.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +inspector.o: $(hdrdir)/ruby/internal/has/extension.h +inspector.o: $(hdrdir)/ruby/internal/has/feature.h +inspector.o: $(hdrdir)/ruby/internal/has/warning.h +inspector.o: $(hdrdir)/ruby/internal/intern/array.h +inspector.o: $(hdrdir)/ruby/internal/intern/bignum.h +inspector.o: $(hdrdir)/ruby/internal/intern/class.h +inspector.o: $(hdrdir)/ruby/internal/intern/compar.h +inspector.o: $(hdrdir)/ruby/internal/intern/complex.h +inspector.o: $(hdrdir)/ruby/internal/intern/cont.h +inspector.o: $(hdrdir)/ruby/internal/intern/dir.h +inspector.o: $(hdrdir)/ruby/internal/intern/enum.h +inspector.o: $(hdrdir)/ruby/internal/intern/enumerator.h +inspector.o: $(hdrdir)/ruby/internal/intern/error.h +inspector.o: $(hdrdir)/ruby/internal/intern/eval.h +inspector.o: $(hdrdir)/ruby/internal/intern/file.h +inspector.o: $(hdrdir)/ruby/internal/intern/gc.h +inspector.o: $(hdrdir)/ruby/internal/intern/hash.h +inspector.o: $(hdrdir)/ruby/internal/intern/io.h +inspector.o: $(hdrdir)/ruby/internal/intern/load.h +inspector.o: $(hdrdir)/ruby/internal/intern/marshal.h +inspector.o: $(hdrdir)/ruby/internal/intern/numeric.h +inspector.o: $(hdrdir)/ruby/internal/intern/object.h +inspector.o: $(hdrdir)/ruby/internal/intern/parse.h +inspector.o: $(hdrdir)/ruby/internal/intern/proc.h +inspector.o: $(hdrdir)/ruby/internal/intern/process.h +inspector.o: $(hdrdir)/ruby/internal/intern/random.h +inspector.o: $(hdrdir)/ruby/internal/intern/range.h +inspector.o: $(hdrdir)/ruby/internal/intern/rational.h +inspector.o: $(hdrdir)/ruby/internal/intern/re.h +inspector.o: $(hdrdir)/ruby/internal/intern/ruby.h +inspector.o: $(hdrdir)/ruby/internal/intern/select.h +inspector.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +inspector.o: $(hdrdir)/ruby/internal/intern/signal.h +inspector.o: $(hdrdir)/ruby/internal/intern/sprintf.h +inspector.o: $(hdrdir)/ruby/internal/intern/string.h +inspector.o: $(hdrdir)/ruby/internal/intern/struct.h +inspector.o: $(hdrdir)/ruby/internal/intern/thread.h +inspector.o: $(hdrdir)/ruby/internal/intern/time.h +inspector.o: $(hdrdir)/ruby/internal/intern/variable.h +inspector.o: $(hdrdir)/ruby/internal/intern/vm.h +inspector.o: $(hdrdir)/ruby/internal/interpreter.h +inspector.o: $(hdrdir)/ruby/internal/iterator.h +inspector.o: $(hdrdir)/ruby/internal/memory.h +inspector.o: $(hdrdir)/ruby/internal/method.h +inspector.o: $(hdrdir)/ruby/internal/module.h +inspector.o: $(hdrdir)/ruby/internal/newobj.h +inspector.o: $(hdrdir)/ruby/internal/rgengc.h +inspector.o: $(hdrdir)/ruby/internal/scan_args.h +inspector.o: $(hdrdir)/ruby/internal/special_consts.h +inspector.o: $(hdrdir)/ruby/internal/static_assert.h +inspector.o: $(hdrdir)/ruby/internal/stdalign.h +inspector.o: $(hdrdir)/ruby/internal/stdbool.h +inspector.o: $(hdrdir)/ruby/internal/symbol.h +inspector.o: $(hdrdir)/ruby/internal/value.h +inspector.o: $(hdrdir)/ruby/internal/value_type.h +inspector.o: $(hdrdir)/ruby/internal/variable.h +inspector.o: $(hdrdir)/ruby/internal/warning_push.h +inspector.o: $(hdrdir)/ruby/internal/xmalloc.h inspector.o: $(hdrdir)/ruby/missing.h inspector.o: $(hdrdir)/ruby/ruby.h inspector.o: $(hdrdir)/ruby/st.h @@ -27,9 +321,156 @@ profile_frames.o: $(RUBY_EXTCONF_H) profile_frames.o: $(arch_hdrdir)/ruby/config.h profile_frames.o: $(hdrdir)/ruby/assert.h profile_frames.o: $(hdrdir)/ruby/backward.h +profile_frames.o: $(hdrdir)/ruby/backward/2/assume.h +profile_frames.o: $(hdrdir)/ruby/backward/2/attributes.h +profile_frames.o: $(hdrdir)/ruby/backward/2/bool.h +profile_frames.o: $(hdrdir)/ruby/backward/2/inttypes.h +profile_frames.o: $(hdrdir)/ruby/backward/2/limits.h +profile_frames.o: $(hdrdir)/ruby/backward/2/long_long.h +profile_frames.o: $(hdrdir)/ruby/backward/2/stdalign.h +profile_frames.o: $(hdrdir)/ruby/backward/2/stdarg.h profile_frames.o: $(hdrdir)/ruby/debug.h profile_frames.o: $(hdrdir)/ruby/defines.h profile_frames.o: $(hdrdir)/ruby/intern.h +profile_frames.o: $(hdrdir)/ruby/internal/anyargs.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/char.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/double.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/int.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/long.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/short.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +profile_frames.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +profile_frames.o: $(hdrdir)/ruby/internal/assume.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/artificial.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/cold.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/const.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/constexpr.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/deprecated.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/error.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/forceinline.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/format.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/noalias.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/noexcept.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/noinline.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/nonnull.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/noreturn.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/pure.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/restrict.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/warning.h +profile_frames.o: $(hdrdir)/ruby/internal/attr/weakref.h +profile_frames.o: $(hdrdir)/ruby/internal/cast.h +profile_frames.o: $(hdrdir)/ruby/internal/compiler_is.h +profile_frames.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +profile_frames.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +profile_frames.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +profile_frames.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +profile_frames.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +profile_frames.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +profile_frames.o: $(hdrdir)/ruby/internal/compiler_since.h +profile_frames.o: $(hdrdir)/ruby/internal/config.h +profile_frames.o: $(hdrdir)/ruby/internal/constant_p.h +profile_frames.o: $(hdrdir)/ruby/internal/core.h +profile_frames.o: $(hdrdir)/ruby/internal/core/rarray.h +profile_frames.o: $(hdrdir)/ruby/internal/core/rbasic.h +profile_frames.o: $(hdrdir)/ruby/internal/core/rbignum.h +profile_frames.o: $(hdrdir)/ruby/internal/core/rclass.h +profile_frames.o: $(hdrdir)/ruby/internal/core/rdata.h +profile_frames.o: $(hdrdir)/ruby/internal/core/rfile.h +profile_frames.o: $(hdrdir)/ruby/internal/core/rhash.h +profile_frames.o: $(hdrdir)/ruby/internal/core/robject.h +profile_frames.o: $(hdrdir)/ruby/internal/core/rregexp.h +profile_frames.o: $(hdrdir)/ruby/internal/core/rstring.h +profile_frames.o: $(hdrdir)/ruby/internal/core/rstruct.h +profile_frames.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +profile_frames.o: $(hdrdir)/ruby/internal/ctype.h +profile_frames.o: $(hdrdir)/ruby/internal/dllexport.h +profile_frames.o: $(hdrdir)/ruby/internal/dosish.h +profile_frames.o: $(hdrdir)/ruby/internal/error.h +profile_frames.o: $(hdrdir)/ruby/internal/eval.h +profile_frames.o: $(hdrdir)/ruby/internal/event.h +profile_frames.o: $(hdrdir)/ruby/internal/fl_type.h +profile_frames.o: $(hdrdir)/ruby/internal/gc.h +profile_frames.o: $(hdrdir)/ruby/internal/glob.h +profile_frames.o: $(hdrdir)/ruby/internal/globals.h +profile_frames.o: $(hdrdir)/ruby/internal/has/attribute.h +profile_frames.o: $(hdrdir)/ruby/internal/has/builtin.h +profile_frames.o: $(hdrdir)/ruby/internal/has/c_attribute.h +profile_frames.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +profile_frames.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +profile_frames.o: $(hdrdir)/ruby/internal/has/extension.h +profile_frames.o: $(hdrdir)/ruby/internal/has/feature.h +profile_frames.o: $(hdrdir)/ruby/internal/has/warning.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/array.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/bignum.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/class.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/compar.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/complex.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/cont.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/dir.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/enum.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/enumerator.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/error.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/eval.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/file.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/gc.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/hash.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/io.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/load.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/marshal.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/numeric.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/object.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/parse.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/proc.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/process.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/random.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/range.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/rational.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/re.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/ruby.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/select.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/signal.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/sprintf.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/string.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/struct.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/thread.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/time.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/variable.h +profile_frames.o: $(hdrdir)/ruby/internal/intern/vm.h +profile_frames.o: $(hdrdir)/ruby/internal/interpreter.h +profile_frames.o: $(hdrdir)/ruby/internal/iterator.h +profile_frames.o: $(hdrdir)/ruby/internal/memory.h +profile_frames.o: $(hdrdir)/ruby/internal/method.h +profile_frames.o: $(hdrdir)/ruby/internal/module.h +profile_frames.o: $(hdrdir)/ruby/internal/newobj.h +profile_frames.o: $(hdrdir)/ruby/internal/rgengc.h +profile_frames.o: $(hdrdir)/ruby/internal/scan_args.h +profile_frames.o: $(hdrdir)/ruby/internal/special_consts.h +profile_frames.o: $(hdrdir)/ruby/internal/static_assert.h +profile_frames.o: $(hdrdir)/ruby/internal/stdalign.h +profile_frames.o: $(hdrdir)/ruby/internal/stdbool.h +profile_frames.o: $(hdrdir)/ruby/internal/symbol.h +profile_frames.o: $(hdrdir)/ruby/internal/value.h +profile_frames.o: $(hdrdir)/ruby/internal/value_type.h +profile_frames.o: $(hdrdir)/ruby/internal/variable.h +profile_frames.o: $(hdrdir)/ruby/internal/warning_push.h +profile_frames.o: $(hdrdir)/ruby/internal/xmalloc.h profile_frames.o: $(hdrdir)/ruby/missing.h profile_frames.o: $(hdrdir)/ruby/ruby.h profile_frames.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/enumerator_kw/depend b/ruby/ext/-test-/enumerator_kw/depend index b7489eaf7..4347538d3 100644 --- a/ruby/ext/-test-/enumerator_kw/depend +++ b/ruby/ext/-test-/enumerator_kw/depend @@ -4,8 +4,155 @@ enumerator_kw.o: $(arch_hdrdir)/ruby/config.h enumerator_kw.o: $(hdrdir)/ruby.h enumerator_kw.o: $(hdrdir)/ruby/assert.h enumerator_kw.o: $(hdrdir)/ruby/backward.h +enumerator_kw.o: $(hdrdir)/ruby/backward/2/assume.h +enumerator_kw.o: $(hdrdir)/ruby/backward/2/attributes.h +enumerator_kw.o: $(hdrdir)/ruby/backward/2/bool.h +enumerator_kw.o: $(hdrdir)/ruby/backward/2/inttypes.h +enumerator_kw.o: $(hdrdir)/ruby/backward/2/limits.h +enumerator_kw.o: $(hdrdir)/ruby/backward/2/long_long.h +enumerator_kw.o: $(hdrdir)/ruby/backward/2/stdalign.h +enumerator_kw.o: $(hdrdir)/ruby/backward/2/stdarg.h enumerator_kw.o: $(hdrdir)/ruby/defines.h enumerator_kw.o: $(hdrdir)/ruby/intern.h +enumerator_kw.o: $(hdrdir)/ruby/internal/anyargs.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/char.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/double.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/int.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/long.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/short.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +enumerator_kw.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +enumerator_kw.o: $(hdrdir)/ruby/internal/assume.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/artificial.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/cold.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/const.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/constexpr.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/deprecated.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/error.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/forceinline.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/format.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/noalias.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/noexcept.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/noinline.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/nonnull.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/noreturn.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/pure.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/restrict.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/warning.h +enumerator_kw.o: $(hdrdir)/ruby/internal/attr/weakref.h +enumerator_kw.o: $(hdrdir)/ruby/internal/cast.h +enumerator_kw.o: $(hdrdir)/ruby/internal/compiler_is.h +enumerator_kw.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +enumerator_kw.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +enumerator_kw.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +enumerator_kw.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +enumerator_kw.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +enumerator_kw.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +enumerator_kw.o: $(hdrdir)/ruby/internal/compiler_since.h +enumerator_kw.o: $(hdrdir)/ruby/internal/config.h +enumerator_kw.o: $(hdrdir)/ruby/internal/constant_p.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core/rarray.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core/rbasic.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core/rbignum.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core/rclass.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core/rdata.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core/rfile.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core/rhash.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core/robject.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core/rregexp.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core/rstring.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core/rstruct.h +enumerator_kw.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +enumerator_kw.o: $(hdrdir)/ruby/internal/ctype.h +enumerator_kw.o: $(hdrdir)/ruby/internal/dllexport.h +enumerator_kw.o: $(hdrdir)/ruby/internal/dosish.h +enumerator_kw.o: $(hdrdir)/ruby/internal/error.h +enumerator_kw.o: $(hdrdir)/ruby/internal/eval.h +enumerator_kw.o: $(hdrdir)/ruby/internal/event.h +enumerator_kw.o: $(hdrdir)/ruby/internal/fl_type.h +enumerator_kw.o: $(hdrdir)/ruby/internal/gc.h +enumerator_kw.o: $(hdrdir)/ruby/internal/glob.h +enumerator_kw.o: $(hdrdir)/ruby/internal/globals.h +enumerator_kw.o: $(hdrdir)/ruby/internal/has/attribute.h +enumerator_kw.o: $(hdrdir)/ruby/internal/has/builtin.h +enumerator_kw.o: $(hdrdir)/ruby/internal/has/c_attribute.h +enumerator_kw.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +enumerator_kw.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +enumerator_kw.o: $(hdrdir)/ruby/internal/has/extension.h +enumerator_kw.o: $(hdrdir)/ruby/internal/has/feature.h +enumerator_kw.o: $(hdrdir)/ruby/internal/has/warning.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/array.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/bignum.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/class.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/compar.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/complex.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/cont.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/dir.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/enum.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/enumerator.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/error.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/eval.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/file.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/gc.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/hash.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/io.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/load.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/marshal.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/numeric.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/object.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/parse.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/proc.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/process.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/random.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/range.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/rational.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/re.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/ruby.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/select.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/signal.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/sprintf.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/string.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/struct.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/thread.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/time.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/variable.h +enumerator_kw.o: $(hdrdir)/ruby/internal/intern/vm.h +enumerator_kw.o: $(hdrdir)/ruby/internal/interpreter.h +enumerator_kw.o: $(hdrdir)/ruby/internal/iterator.h +enumerator_kw.o: $(hdrdir)/ruby/internal/memory.h +enumerator_kw.o: $(hdrdir)/ruby/internal/method.h +enumerator_kw.o: $(hdrdir)/ruby/internal/module.h +enumerator_kw.o: $(hdrdir)/ruby/internal/newobj.h +enumerator_kw.o: $(hdrdir)/ruby/internal/rgengc.h +enumerator_kw.o: $(hdrdir)/ruby/internal/scan_args.h +enumerator_kw.o: $(hdrdir)/ruby/internal/special_consts.h +enumerator_kw.o: $(hdrdir)/ruby/internal/static_assert.h +enumerator_kw.o: $(hdrdir)/ruby/internal/stdalign.h +enumerator_kw.o: $(hdrdir)/ruby/internal/stdbool.h +enumerator_kw.o: $(hdrdir)/ruby/internal/symbol.h +enumerator_kw.o: $(hdrdir)/ruby/internal/value.h +enumerator_kw.o: $(hdrdir)/ruby/internal/value_type.h +enumerator_kw.o: $(hdrdir)/ruby/internal/variable.h +enumerator_kw.o: $(hdrdir)/ruby/internal/warning_push.h +enumerator_kw.o: $(hdrdir)/ruby/internal/xmalloc.h enumerator_kw.o: $(hdrdir)/ruby/missing.h enumerator_kw.o: $(hdrdir)/ruby/ruby.h enumerator_kw.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/exception/depend b/ruby/ext/-test-/exception/depend index d0958de9b..05f6ff655 100644 --- a/ruby/ext/-test-/exception/depend +++ b/ruby/ext/-test-/exception/depend @@ -3,8 +3,155 @@ dataerror.o: $(RUBY_EXTCONF_H) dataerror.o: $(arch_hdrdir)/ruby/config.h dataerror.o: $(hdrdir)/ruby/assert.h dataerror.o: $(hdrdir)/ruby/backward.h +dataerror.o: $(hdrdir)/ruby/backward/2/assume.h +dataerror.o: $(hdrdir)/ruby/backward/2/attributes.h +dataerror.o: $(hdrdir)/ruby/backward/2/bool.h +dataerror.o: $(hdrdir)/ruby/backward/2/inttypes.h +dataerror.o: $(hdrdir)/ruby/backward/2/limits.h +dataerror.o: $(hdrdir)/ruby/backward/2/long_long.h +dataerror.o: $(hdrdir)/ruby/backward/2/stdalign.h +dataerror.o: $(hdrdir)/ruby/backward/2/stdarg.h dataerror.o: $(hdrdir)/ruby/defines.h dataerror.o: $(hdrdir)/ruby/intern.h +dataerror.o: $(hdrdir)/ruby/internal/anyargs.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/char.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/double.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/int.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/long.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/short.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +dataerror.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +dataerror.o: $(hdrdir)/ruby/internal/assume.h +dataerror.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +dataerror.o: $(hdrdir)/ruby/internal/attr/artificial.h +dataerror.o: $(hdrdir)/ruby/internal/attr/cold.h +dataerror.o: $(hdrdir)/ruby/internal/attr/const.h +dataerror.o: $(hdrdir)/ruby/internal/attr/constexpr.h +dataerror.o: $(hdrdir)/ruby/internal/attr/deprecated.h +dataerror.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +dataerror.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +dataerror.o: $(hdrdir)/ruby/internal/attr/error.h +dataerror.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +dataerror.o: $(hdrdir)/ruby/internal/attr/forceinline.h +dataerror.o: $(hdrdir)/ruby/internal/attr/format.h +dataerror.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +dataerror.o: $(hdrdir)/ruby/internal/attr/noalias.h +dataerror.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +dataerror.o: $(hdrdir)/ruby/internal/attr/noexcept.h +dataerror.o: $(hdrdir)/ruby/internal/attr/noinline.h +dataerror.o: $(hdrdir)/ruby/internal/attr/nonnull.h +dataerror.o: $(hdrdir)/ruby/internal/attr/noreturn.h +dataerror.o: $(hdrdir)/ruby/internal/attr/pure.h +dataerror.o: $(hdrdir)/ruby/internal/attr/restrict.h +dataerror.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +dataerror.o: $(hdrdir)/ruby/internal/attr/warning.h +dataerror.o: $(hdrdir)/ruby/internal/attr/weakref.h +dataerror.o: $(hdrdir)/ruby/internal/cast.h +dataerror.o: $(hdrdir)/ruby/internal/compiler_is.h +dataerror.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +dataerror.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +dataerror.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +dataerror.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +dataerror.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +dataerror.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +dataerror.o: $(hdrdir)/ruby/internal/compiler_since.h +dataerror.o: $(hdrdir)/ruby/internal/config.h +dataerror.o: $(hdrdir)/ruby/internal/constant_p.h +dataerror.o: $(hdrdir)/ruby/internal/core.h +dataerror.o: $(hdrdir)/ruby/internal/core/rarray.h +dataerror.o: $(hdrdir)/ruby/internal/core/rbasic.h +dataerror.o: $(hdrdir)/ruby/internal/core/rbignum.h +dataerror.o: $(hdrdir)/ruby/internal/core/rclass.h +dataerror.o: $(hdrdir)/ruby/internal/core/rdata.h +dataerror.o: $(hdrdir)/ruby/internal/core/rfile.h +dataerror.o: $(hdrdir)/ruby/internal/core/rhash.h +dataerror.o: $(hdrdir)/ruby/internal/core/robject.h +dataerror.o: $(hdrdir)/ruby/internal/core/rregexp.h +dataerror.o: $(hdrdir)/ruby/internal/core/rstring.h +dataerror.o: $(hdrdir)/ruby/internal/core/rstruct.h +dataerror.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +dataerror.o: $(hdrdir)/ruby/internal/ctype.h +dataerror.o: $(hdrdir)/ruby/internal/dllexport.h +dataerror.o: $(hdrdir)/ruby/internal/dosish.h +dataerror.o: $(hdrdir)/ruby/internal/error.h +dataerror.o: $(hdrdir)/ruby/internal/eval.h +dataerror.o: $(hdrdir)/ruby/internal/event.h +dataerror.o: $(hdrdir)/ruby/internal/fl_type.h +dataerror.o: $(hdrdir)/ruby/internal/gc.h +dataerror.o: $(hdrdir)/ruby/internal/glob.h +dataerror.o: $(hdrdir)/ruby/internal/globals.h +dataerror.o: $(hdrdir)/ruby/internal/has/attribute.h +dataerror.o: $(hdrdir)/ruby/internal/has/builtin.h +dataerror.o: $(hdrdir)/ruby/internal/has/c_attribute.h +dataerror.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +dataerror.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +dataerror.o: $(hdrdir)/ruby/internal/has/extension.h +dataerror.o: $(hdrdir)/ruby/internal/has/feature.h +dataerror.o: $(hdrdir)/ruby/internal/has/warning.h +dataerror.o: $(hdrdir)/ruby/internal/intern/array.h +dataerror.o: $(hdrdir)/ruby/internal/intern/bignum.h +dataerror.o: $(hdrdir)/ruby/internal/intern/class.h +dataerror.o: $(hdrdir)/ruby/internal/intern/compar.h +dataerror.o: $(hdrdir)/ruby/internal/intern/complex.h +dataerror.o: $(hdrdir)/ruby/internal/intern/cont.h +dataerror.o: $(hdrdir)/ruby/internal/intern/dir.h +dataerror.o: $(hdrdir)/ruby/internal/intern/enum.h +dataerror.o: $(hdrdir)/ruby/internal/intern/enumerator.h +dataerror.o: $(hdrdir)/ruby/internal/intern/error.h +dataerror.o: $(hdrdir)/ruby/internal/intern/eval.h +dataerror.o: $(hdrdir)/ruby/internal/intern/file.h +dataerror.o: $(hdrdir)/ruby/internal/intern/gc.h +dataerror.o: $(hdrdir)/ruby/internal/intern/hash.h +dataerror.o: $(hdrdir)/ruby/internal/intern/io.h +dataerror.o: $(hdrdir)/ruby/internal/intern/load.h +dataerror.o: $(hdrdir)/ruby/internal/intern/marshal.h +dataerror.o: $(hdrdir)/ruby/internal/intern/numeric.h +dataerror.o: $(hdrdir)/ruby/internal/intern/object.h +dataerror.o: $(hdrdir)/ruby/internal/intern/parse.h +dataerror.o: $(hdrdir)/ruby/internal/intern/proc.h +dataerror.o: $(hdrdir)/ruby/internal/intern/process.h +dataerror.o: $(hdrdir)/ruby/internal/intern/random.h +dataerror.o: $(hdrdir)/ruby/internal/intern/range.h +dataerror.o: $(hdrdir)/ruby/internal/intern/rational.h +dataerror.o: $(hdrdir)/ruby/internal/intern/re.h +dataerror.o: $(hdrdir)/ruby/internal/intern/ruby.h +dataerror.o: $(hdrdir)/ruby/internal/intern/select.h +dataerror.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +dataerror.o: $(hdrdir)/ruby/internal/intern/signal.h +dataerror.o: $(hdrdir)/ruby/internal/intern/sprintf.h +dataerror.o: $(hdrdir)/ruby/internal/intern/string.h +dataerror.o: $(hdrdir)/ruby/internal/intern/struct.h +dataerror.o: $(hdrdir)/ruby/internal/intern/thread.h +dataerror.o: $(hdrdir)/ruby/internal/intern/time.h +dataerror.o: $(hdrdir)/ruby/internal/intern/variable.h +dataerror.o: $(hdrdir)/ruby/internal/intern/vm.h +dataerror.o: $(hdrdir)/ruby/internal/interpreter.h +dataerror.o: $(hdrdir)/ruby/internal/iterator.h +dataerror.o: $(hdrdir)/ruby/internal/memory.h +dataerror.o: $(hdrdir)/ruby/internal/method.h +dataerror.o: $(hdrdir)/ruby/internal/module.h +dataerror.o: $(hdrdir)/ruby/internal/newobj.h +dataerror.o: $(hdrdir)/ruby/internal/rgengc.h +dataerror.o: $(hdrdir)/ruby/internal/scan_args.h +dataerror.o: $(hdrdir)/ruby/internal/special_consts.h +dataerror.o: $(hdrdir)/ruby/internal/static_assert.h +dataerror.o: $(hdrdir)/ruby/internal/stdalign.h +dataerror.o: $(hdrdir)/ruby/internal/stdbool.h +dataerror.o: $(hdrdir)/ruby/internal/symbol.h +dataerror.o: $(hdrdir)/ruby/internal/value.h +dataerror.o: $(hdrdir)/ruby/internal/value_type.h +dataerror.o: $(hdrdir)/ruby/internal/variable.h +dataerror.o: $(hdrdir)/ruby/internal/warning_push.h +dataerror.o: $(hdrdir)/ruby/internal/xmalloc.h dataerror.o: $(hdrdir)/ruby/missing.h dataerror.o: $(hdrdir)/ruby/ruby.h dataerror.o: $(hdrdir)/ruby/st.h @@ -15,9 +162,165 @@ enc_raise.o: $(arch_hdrdir)/ruby/config.h enc_raise.o: $(hdrdir)/ruby.h enc_raise.o: $(hdrdir)/ruby/assert.h enc_raise.o: $(hdrdir)/ruby/backward.h +enc_raise.o: $(hdrdir)/ruby/backward/2/assume.h +enc_raise.o: $(hdrdir)/ruby/backward/2/attributes.h +enc_raise.o: $(hdrdir)/ruby/backward/2/bool.h +enc_raise.o: $(hdrdir)/ruby/backward/2/inttypes.h +enc_raise.o: $(hdrdir)/ruby/backward/2/limits.h +enc_raise.o: $(hdrdir)/ruby/backward/2/long_long.h +enc_raise.o: $(hdrdir)/ruby/backward/2/stdalign.h +enc_raise.o: $(hdrdir)/ruby/backward/2/stdarg.h enc_raise.o: $(hdrdir)/ruby/defines.h enc_raise.o: $(hdrdir)/ruby/encoding.h enc_raise.o: $(hdrdir)/ruby/intern.h +enc_raise.o: $(hdrdir)/ruby/internal/anyargs.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/char.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/double.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/int.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/long.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/short.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +enc_raise.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +enc_raise.o: $(hdrdir)/ruby/internal/assume.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/artificial.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/cold.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/const.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/constexpr.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/deprecated.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/error.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/forceinline.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/format.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/noalias.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/noexcept.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/noinline.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/nonnull.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/noreturn.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/pure.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/restrict.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/warning.h +enc_raise.o: $(hdrdir)/ruby/internal/attr/weakref.h +enc_raise.o: $(hdrdir)/ruby/internal/cast.h +enc_raise.o: $(hdrdir)/ruby/internal/compiler_is.h +enc_raise.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +enc_raise.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +enc_raise.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +enc_raise.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +enc_raise.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +enc_raise.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +enc_raise.o: $(hdrdir)/ruby/internal/compiler_since.h +enc_raise.o: $(hdrdir)/ruby/internal/config.h +enc_raise.o: $(hdrdir)/ruby/internal/constant_p.h +enc_raise.o: $(hdrdir)/ruby/internal/core.h +enc_raise.o: $(hdrdir)/ruby/internal/core/rarray.h +enc_raise.o: $(hdrdir)/ruby/internal/core/rbasic.h +enc_raise.o: $(hdrdir)/ruby/internal/core/rbignum.h +enc_raise.o: $(hdrdir)/ruby/internal/core/rclass.h +enc_raise.o: $(hdrdir)/ruby/internal/core/rdata.h +enc_raise.o: $(hdrdir)/ruby/internal/core/rfile.h +enc_raise.o: $(hdrdir)/ruby/internal/core/rhash.h +enc_raise.o: $(hdrdir)/ruby/internal/core/robject.h +enc_raise.o: $(hdrdir)/ruby/internal/core/rregexp.h +enc_raise.o: $(hdrdir)/ruby/internal/core/rstring.h +enc_raise.o: $(hdrdir)/ruby/internal/core/rstruct.h +enc_raise.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +enc_raise.o: $(hdrdir)/ruby/internal/ctype.h +enc_raise.o: $(hdrdir)/ruby/internal/dllexport.h +enc_raise.o: $(hdrdir)/ruby/internal/dosish.h +enc_raise.o: $(hdrdir)/ruby/internal/encoding/coderange.h +enc_raise.o: $(hdrdir)/ruby/internal/encoding/ctype.h +enc_raise.o: $(hdrdir)/ruby/internal/encoding/encoding.h +enc_raise.o: $(hdrdir)/ruby/internal/encoding/pathname.h +enc_raise.o: $(hdrdir)/ruby/internal/encoding/re.h +enc_raise.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +enc_raise.o: $(hdrdir)/ruby/internal/encoding/string.h +enc_raise.o: $(hdrdir)/ruby/internal/encoding/symbol.h +enc_raise.o: $(hdrdir)/ruby/internal/encoding/transcode.h +enc_raise.o: $(hdrdir)/ruby/internal/error.h +enc_raise.o: $(hdrdir)/ruby/internal/eval.h +enc_raise.o: $(hdrdir)/ruby/internal/event.h +enc_raise.o: $(hdrdir)/ruby/internal/fl_type.h +enc_raise.o: $(hdrdir)/ruby/internal/gc.h +enc_raise.o: $(hdrdir)/ruby/internal/glob.h +enc_raise.o: $(hdrdir)/ruby/internal/globals.h +enc_raise.o: $(hdrdir)/ruby/internal/has/attribute.h +enc_raise.o: $(hdrdir)/ruby/internal/has/builtin.h +enc_raise.o: $(hdrdir)/ruby/internal/has/c_attribute.h +enc_raise.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +enc_raise.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +enc_raise.o: $(hdrdir)/ruby/internal/has/extension.h +enc_raise.o: $(hdrdir)/ruby/internal/has/feature.h +enc_raise.o: $(hdrdir)/ruby/internal/has/warning.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/array.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/bignum.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/class.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/compar.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/complex.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/cont.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/dir.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/enum.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/enumerator.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/error.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/eval.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/file.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/gc.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/hash.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/io.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/load.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/marshal.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/numeric.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/object.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/parse.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/proc.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/process.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/random.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/range.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/rational.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/re.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/ruby.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/select.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/signal.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/sprintf.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/string.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/struct.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/thread.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/time.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/variable.h +enc_raise.o: $(hdrdir)/ruby/internal/intern/vm.h +enc_raise.o: $(hdrdir)/ruby/internal/interpreter.h +enc_raise.o: $(hdrdir)/ruby/internal/iterator.h +enc_raise.o: $(hdrdir)/ruby/internal/memory.h +enc_raise.o: $(hdrdir)/ruby/internal/method.h +enc_raise.o: $(hdrdir)/ruby/internal/module.h +enc_raise.o: $(hdrdir)/ruby/internal/newobj.h +enc_raise.o: $(hdrdir)/ruby/internal/rgengc.h +enc_raise.o: $(hdrdir)/ruby/internal/scan_args.h +enc_raise.o: $(hdrdir)/ruby/internal/special_consts.h +enc_raise.o: $(hdrdir)/ruby/internal/static_assert.h +enc_raise.o: $(hdrdir)/ruby/internal/stdalign.h +enc_raise.o: $(hdrdir)/ruby/internal/stdbool.h +enc_raise.o: $(hdrdir)/ruby/internal/symbol.h +enc_raise.o: $(hdrdir)/ruby/internal/value.h +enc_raise.o: $(hdrdir)/ruby/internal/value_type.h +enc_raise.o: $(hdrdir)/ruby/internal/variable.h +enc_raise.o: $(hdrdir)/ruby/internal/warning_push.h +enc_raise.o: $(hdrdir)/ruby/internal/xmalloc.h enc_raise.o: $(hdrdir)/ruby/missing.h enc_raise.o: $(hdrdir)/ruby/onigmo.h enc_raise.o: $(hdrdir)/ruby/oniguruma.h @@ -30,8 +333,155 @@ ensured.o: $(arch_hdrdir)/ruby/config.h ensured.o: $(hdrdir)/ruby.h ensured.o: $(hdrdir)/ruby/assert.h ensured.o: $(hdrdir)/ruby/backward.h +ensured.o: $(hdrdir)/ruby/backward/2/assume.h +ensured.o: $(hdrdir)/ruby/backward/2/attributes.h +ensured.o: $(hdrdir)/ruby/backward/2/bool.h +ensured.o: $(hdrdir)/ruby/backward/2/inttypes.h +ensured.o: $(hdrdir)/ruby/backward/2/limits.h +ensured.o: $(hdrdir)/ruby/backward/2/long_long.h +ensured.o: $(hdrdir)/ruby/backward/2/stdalign.h +ensured.o: $(hdrdir)/ruby/backward/2/stdarg.h ensured.o: $(hdrdir)/ruby/defines.h ensured.o: $(hdrdir)/ruby/intern.h +ensured.o: $(hdrdir)/ruby/internal/anyargs.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ensured.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ensured.o: $(hdrdir)/ruby/internal/assume.h +ensured.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ensured.o: $(hdrdir)/ruby/internal/attr/artificial.h +ensured.o: $(hdrdir)/ruby/internal/attr/cold.h +ensured.o: $(hdrdir)/ruby/internal/attr/const.h +ensured.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ensured.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ensured.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ensured.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ensured.o: $(hdrdir)/ruby/internal/attr/error.h +ensured.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ensured.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ensured.o: $(hdrdir)/ruby/internal/attr/format.h +ensured.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ensured.o: $(hdrdir)/ruby/internal/attr/noalias.h +ensured.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ensured.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ensured.o: $(hdrdir)/ruby/internal/attr/noinline.h +ensured.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ensured.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ensured.o: $(hdrdir)/ruby/internal/attr/pure.h +ensured.o: $(hdrdir)/ruby/internal/attr/restrict.h +ensured.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ensured.o: $(hdrdir)/ruby/internal/attr/warning.h +ensured.o: $(hdrdir)/ruby/internal/attr/weakref.h +ensured.o: $(hdrdir)/ruby/internal/cast.h +ensured.o: $(hdrdir)/ruby/internal/compiler_is.h +ensured.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ensured.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ensured.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ensured.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ensured.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ensured.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ensured.o: $(hdrdir)/ruby/internal/compiler_since.h +ensured.o: $(hdrdir)/ruby/internal/config.h +ensured.o: $(hdrdir)/ruby/internal/constant_p.h +ensured.o: $(hdrdir)/ruby/internal/core.h +ensured.o: $(hdrdir)/ruby/internal/core/rarray.h +ensured.o: $(hdrdir)/ruby/internal/core/rbasic.h +ensured.o: $(hdrdir)/ruby/internal/core/rbignum.h +ensured.o: $(hdrdir)/ruby/internal/core/rclass.h +ensured.o: $(hdrdir)/ruby/internal/core/rdata.h +ensured.o: $(hdrdir)/ruby/internal/core/rfile.h +ensured.o: $(hdrdir)/ruby/internal/core/rhash.h +ensured.o: $(hdrdir)/ruby/internal/core/robject.h +ensured.o: $(hdrdir)/ruby/internal/core/rregexp.h +ensured.o: $(hdrdir)/ruby/internal/core/rstring.h +ensured.o: $(hdrdir)/ruby/internal/core/rstruct.h +ensured.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ensured.o: $(hdrdir)/ruby/internal/ctype.h +ensured.o: $(hdrdir)/ruby/internal/dllexport.h +ensured.o: $(hdrdir)/ruby/internal/dosish.h +ensured.o: $(hdrdir)/ruby/internal/error.h +ensured.o: $(hdrdir)/ruby/internal/eval.h +ensured.o: $(hdrdir)/ruby/internal/event.h +ensured.o: $(hdrdir)/ruby/internal/fl_type.h +ensured.o: $(hdrdir)/ruby/internal/gc.h +ensured.o: $(hdrdir)/ruby/internal/glob.h +ensured.o: $(hdrdir)/ruby/internal/globals.h +ensured.o: $(hdrdir)/ruby/internal/has/attribute.h +ensured.o: $(hdrdir)/ruby/internal/has/builtin.h +ensured.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ensured.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ensured.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ensured.o: $(hdrdir)/ruby/internal/has/extension.h +ensured.o: $(hdrdir)/ruby/internal/has/feature.h +ensured.o: $(hdrdir)/ruby/internal/has/warning.h +ensured.o: $(hdrdir)/ruby/internal/intern/array.h +ensured.o: $(hdrdir)/ruby/internal/intern/bignum.h +ensured.o: $(hdrdir)/ruby/internal/intern/class.h +ensured.o: $(hdrdir)/ruby/internal/intern/compar.h +ensured.o: $(hdrdir)/ruby/internal/intern/complex.h +ensured.o: $(hdrdir)/ruby/internal/intern/cont.h +ensured.o: $(hdrdir)/ruby/internal/intern/dir.h +ensured.o: $(hdrdir)/ruby/internal/intern/enum.h +ensured.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ensured.o: $(hdrdir)/ruby/internal/intern/error.h +ensured.o: $(hdrdir)/ruby/internal/intern/eval.h +ensured.o: $(hdrdir)/ruby/internal/intern/file.h +ensured.o: $(hdrdir)/ruby/internal/intern/gc.h +ensured.o: $(hdrdir)/ruby/internal/intern/hash.h +ensured.o: $(hdrdir)/ruby/internal/intern/io.h +ensured.o: $(hdrdir)/ruby/internal/intern/load.h +ensured.o: $(hdrdir)/ruby/internal/intern/marshal.h +ensured.o: $(hdrdir)/ruby/internal/intern/numeric.h +ensured.o: $(hdrdir)/ruby/internal/intern/object.h +ensured.o: $(hdrdir)/ruby/internal/intern/parse.h +ensured.o: $(hdrdir)/ruby/internal/intern/proc.h +ensured.o: $(hdrdir)/ruby/internal/intern/process.h +ensured.o: $(hdrdir)/ruby/internal/intern/random.h +ensured.o: $(hdrdir)/ruby/internal/intern/range.h +ensured.o: $(hdrdir)/ruby/internal/intern/rational.h +ensured.o: $(hdrdir)/ruby/internal/intern/re.h +ensured.o: $(hdrdir)/ruby/internal/intern/ruby.h +ensured.o: $(hdrdir)/ruby/internal/intern/select.h +ensured.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ensured.o: $(hdrdir)/ruby/internal/intern/signal.h +ensured.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ensured.o: $(hdrdir)/ruby/internal/intern/string.h +ensured.o: $(hdrdir)/ruby/internal/intern/struct.h +ensured.o: $(hdrdir)/ruby/internal/intern/thread.h +ensured.o: $(hdrdir)/ruby/internal/intern/time.h +ensured.o: $(hdrdir)/ruby/internal/intern/variable.h +ensured.o: $(hdrdir)/ruby/internal/intern/vm.h +ensured.o: $(hdrdir)/ruby/internal/interpreter.h +ensured.o: $(hdrdir)/ruby/internal/iterator.h +ensured.o: $(hdrdir)/ruby/internal/memory.h +ensured.o: $(hdrdir)/ruby/internal/method.h +ensured.o: $(hdrdir)/ruby/internal/module.h +ensured.o: $(hdrdir)/ruby/internal/newobj.h +ensured.o: $(hdrdir)/ruby/internal/rgengc.h +ensured.o: $(hdrdir)/ruby/internal/scan_args.h +ensured.o: $(hdrdir)/ruby/internal/special_consts.h +ensured.o: $(hdrdir)/ruby/internal/static_assert.h +ensured.o: $(hdrdir)/ruby/internal/stdalign.h +ensured.o: $(hdrdir)/ruby/internal/stdbool.h +ensured.o: $(hdrdir)/ruby/internal/symbol.h +ensured.o: $(hdrdir)/ruby/internal/value.h +ensured.o: $(hdrdir)/ruby/internal/value_type.h +ensured.o: $(hdrdir)/ruby/internal/variable.h +ensured.o: $(hdrdir)/ruby/internal/warning_push.h +ensured.o: $(hdrdir)/ruby/internal/xmalloc.h ensured.o: $(hdrdir)/ruby/missing.h ensured.o: $(hdrdir)/ruby/ruby.h ensured.o: $(hdrdir)/ruby/st.h @@ -42,8 +492,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/fatal/depend b/ruby/ext/-test-/fatal/depend index c74360fdf..ccb274e8f 100644 --- a/ruby/ext/-test-/fatal/depend +++ b/ruby/ext/-test-/fatal/depend @@ -4,8 +4,155 @@ rb_fatal.o: $(arch_hdrdir)/ruby/config.h rb_fatal.o: $(hdrdir)/ruby.h rb_fatal.o: $(hdrdir)/ruby/assert.h rb_fatal.o: $(hdrdir)/ruby/backward.h +rb_fatal.o: $(hdrdir)/ruby/backward/2/assume.h +rb_fatal.o: $(hdrdir)/ruby/backward/2/attributes.h +rb_fatal.o: $(hdrdir)/ruby/backward/2/bool.h +rb_fatal.o: $(hdrdir)/ruby/backward/2/inttypes.h +rb_fatal.o: $(hdrdir)/ruby/backward/2/limits.h +rb_fatal.o: $(hdrdir)/ruby/backward/2/long_long.h +rb_fatal.o: $(hdrdir)/ruby/backward/2/stdalign.h +rb_fatal.o: $(hdrdir)/ruby/backward/2/stdarg.h rb_fatal.o: $(hdrdir)/ruby/defines.h rb_fatal.o: $(hdrdir)/ruby/intern.h +rb_fatal.o: $(hdrdir)/ruby/internal/anyargs.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/char.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/double.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/int.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/long.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/short.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +rb_fatal.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +rb_fatal.o: $(hdrdir)/ruby/internal/assume.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/artificial.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/cold.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/const.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/constexpr.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/deprecated.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/error.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/forceinline.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/format.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/noalias.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/noexcept.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/noinline.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/nonnull.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/noreturn.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/pure.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/restrict.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/warning.h +rb_fatal.o: $(hdrdir)/ruby/internal/attr/weakref.h +rb_fatal.o: $(hdrdir)/ruby/internal/cast.h +rb_fatal.o: $(hdrdir)/ruby/internal/compiler_is.h +rb_fatal.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +rb_fatal.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +rb_fatal.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +rb_fatal.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +rb_fatal.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +rb_fatal.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +rb_fatal.o: $(hdrdir)/ruby/internal/compiler_since.h +rb_fatal.o: $(hdrdir)/ruby/internal/config.h +rb_fatal.o: $(hdrdir)/ruby/internal/constant_p.h +rb_fatal.o: $(hdrdir)/ruby/internal/core.h +rb_fatal.o: $(hdrdir)/ruby/internal/core/rarray.h +rb_fatal.o: $(hdrdir)/ruby/internal/core/rbasic.h +rb_fatal.o: $(hdrdir)/ruby/internal/core/rbignum.h +rb_fatal.o: $(hdrdir)/ruby/internal/core/rclass.h +rb_fatal.o: $(hdrdir)/ruby/internal/core/rdata.h +rb_fatal.o: $(hdrdir)/ruby/internal/core/rfile.h +rb_fatal.o: $(hdrdir)/ruby/internal/core/rhash.h +rb_fatal.o: $(hdrdir)/ruby/internal/core/robject.h +rb_fatal.o: $(hdrdir)/ruby/internal/core/rregexp.h +rb_fatal.o: $(hdrdir)/ruby/internal/core/rstring.h +rb_fatal.o: $(hdrdir)/ruby/internal/core/rstruct.h +rb_fatal.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +rb_fatal.o: $(hdrdir)/ruby/internal/ctype.h +rb_fatal.o: $(hdrdir)/ruby/internal/dllexport.h +rb_fatal.o: $(hdrdir)/ruby/internal/dosish.h +rb_fatal.o: $(hdrdir)/ruby/internal/error.h +rb_fatal.o: $(hdrdir)/ruby/internal/eval.h +rb_fatal.o: $(hdrdir)/ruby/internal/event.h +rb_fatal.o: $(hdrdir)/ruby/internal/fl_type.h +rb_fatal.o: $(hdrdir)/ruby/internal/gc.h +rb_fatal.o: $(hdrdir)/ruby/internal/glob.h +rb_fatal.o: $(hdrdir)/ruby/internal/globals.h +rb_fatal.o: $(hdrdir)/ruby/internal/has/attribute.h +rb_fatal.o: $(hdrdir)/ruby/internal/has/builtin.h +rb_fatal.o: $(hdrdir)/ruby/internal/has/c_attribute.h +rb_fatal.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +rb_fatal.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +rb_fatal.o: $(hdrdir)/ruby/internal/has/extension.h +rb_fatal.o: $(hdrdir)/ruby/internal/has/feature.h +rb_fatal.o: $(hdrdir)/ruby/internal/has/warning.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/array.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/bignum.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/class.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/compar.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/complex.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/cont.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/dir.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/enum.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/enumerator.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/error.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/eval.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/file.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/gc.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/hash.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/io.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/load.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/marshal.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/numeric.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/object.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/parse.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/proc.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/process.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/random.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/range.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/rational.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/re.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/ruby.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/select.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/signal.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/sprintf.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/string.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/struct.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/thread.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/time.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/variable.h +rb_fatal.o: $(hdrdir)/ruby/internal/intern/vm.h +rb_fatal.o: $(hdrdir)/ruby/internal/interpreter.h +rb_fatal.o: $(hdrdir)/ruby/internal/iterator.h +rb_fatal.o: $(hdrdir)/ruby/internal/memory.h +rb_fatal.o: $(hdrdir)/ruby/internal/method.h +rb_fatal.o: $(hdrdir)/ruby/internal/module.h +rb_fatal.o: $(hdrdir)/ruby/internal/newobj.h +rb_fatal.o: $(hdrdir)/ruby/internal/rgengc.h +rb_fatal.o: $(hdrdir)/ruby/internal/scan_args.h +rb_fatal.o: $(hdrdir)/ruby/internal/special_consts.h +rb_fatal.o: $(hdrdir)/ruby/internal/static_assert.h +rb_fatal.o: $(hdrdir)/ruby/internal/stdalign.h +rb_fatal.o: $(hdrdir)/ruby/internal/stdbool.h +rb_fatal.o: $(hdrdir)/ruby/internal/symbol.h +rb_fatal.o: $(hdrdir)/ruby/internal/value.h +rb_fatal.o: $(hdrdir)/ruby/internal/value_type.h +rb_fatal.o: $(hdrdir)/ruby/internal/variable.h +rb_fatal.o: $(hdrdir)/ruby/internal/warning_push.h +rb_fatal.o: $(hdrdir)/ruby/internal/xmalloc.h rb_fatal.o: $(hdrdir)/ruby/missing.h rb_fatal.o: $(hdrdir)/ruby/ruby.h rb_fatal.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/fatal/rb_fatal.c b/ruby/ext/-test-/fatal/rb_fatal.c index 71aef4658..eedbc51f8 100644 --- a/ruby/ext/-test-/fatal/rb_fatal.c +++ b/ruby/ext/-test-/fatal/rb_fatal.c @@ -15,5 +15,6 @@ ruby_fatal(VALUE obj, VALUE msg) void Init_rb_fatal(void) { - rb_define_method(rb_mKernel, "rb_fatal", ruby_fatal, 1); + VALUE mBug = rb_define_module("Bug"); + rb_define_singleton_method(mBug, "rb_fatal", ruby_fatal, 1); } diff --git a/ruby/ext/-test-/file/depend b/ruby/ext/-test-/file/depend index afdf116a9..a6ac8bb55 100644 --- a/ruby/ext/-test-/file/depend +++ b/ruby/ext/-test-/file/depend @@ -3,9 +3,165 @@ fs.o: $(RUBY_EXTCONF_H) fs.o: $(arch_hdrdir)/ruby/config.h fs.o: $(hdrdir)/ruby/assert.h fs.o: $(hdrdir)/ruby/backward.h +fs.o: $(hdrdir)/ruby/backward/2/assume.h +fs.o: $(hdrdir)/ruby/backward/2/attributes.h +fs.o: $(hdrdir)/ruby/backward/2/bool.h +fs.o: $(hdrdir)/ruby/backward/2/inttypes.h +fs.o: $(hdrdir)/ruby/backward/2/limits.h +fs.o: $(hdrdir)/ruby/backward/2/long_long.h +fs.o: $(hdrdir)/ruby/backward/2/stdalign.h +fs.o: $(hdrdir)/ruby/backward/2/stdarg.h fs.o: $(hdrdir)/ruby/defines.h fs.o: $(hdrdir)/ruby/encoding.h fs.o: $(hdrdir)/ruby/intern.h +fs.o: $(hdrdir)/ruby/internal/anyargs.h +fs.o: $(hdrdir)/ruby/internal/arithmetic.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/char.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/double.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/int.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/long.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/short.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +fs.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +fs.o: $(hdrdir)/ruby/internal/assume.h +fs.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +fs.o: $(hdrdir)/ruby/internal/attr/artificial.h +fs.o: $(hdrdir)/ruby/internal/attr/cold.h +fs.o: $(hdrdir)/ruby/internal/attr/const.h +fs.o: $(hdrdir)/ruby/internal/attr/constexpr.h +fs.o: $(hdrdir)/ruby/internal/attr/deprecated.h +fs.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +fs.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +fs.o: $(hdrdir)/ruby/internal/attr/error.h +fs.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +fs.o: $(hdrdir)/ruby/internal/attr/forceinline.h +fs.o: $(hdrdir)/ruby/internal/attr/format.h +fs.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +fs.o: $(hdrdir)/ruby/internal/attr/noalias.h +fs.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +fs.o: $(hdrdir)/ruby/internal/attr/noexcept.h +fs.o: $(hdrdir)/ruby/internal/attr/noinline.h +fs.o: $(hdrdir)/ruby/internal/attr/nonnull.h +fs.o: $(hdrdir)/ruby/internal/attr/noreturn.h +fs.o: $(hdrdir)/ruby/internal/attr/pure.h +fs.o: $(hdrdir)/ruby/internal/attr/restrict.h +fs.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +fs.o: $(hdrdir)/ruby/internal/attr/warning.h +fs.o: $(hdrdir)/ruby/internal/attr/weakref.h +fs.o: $(hdrdir)/ruby/internal/cast.h +fs.o: $(hdrdir)/ruby/internal/compiler_is.h +fs.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +fs.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +fs.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +fs.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +fs.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +fs.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +fs.o: $(hdrdir)/ruby/internal/compiler_since.h +fs.o: $(hdrdir)/ruby/internal/config.h +fs.o: $(hdrdir)/ruby/internal/constant_p.h +fs.o: $(hdrdir)/ruby/internal/core.h +fs.o: $(hdrdir)/ruby/internal/core/rarray.h +fs.o: $(hdrdir)/ruby/internal/core/rbasic.h +fs.o: $(hdrdir)/ruby/internal/core/rbignum.h +fs.o: $(hdrdir)/ruby/internal/core/rclass.h +fs.o: $(hdrdir)/ruby/internal/core/rdata.h +fs.o: $(hdrdir)/ruby/internal/core/rfile.h +fs.o: $(hdrdir)/ruby/internal/core/rhash.h +fs.o: $(hdrdir)/ruby/internal/core/robject.h +fs.o: $(hdrdir)/ruby/internal/core/rregexp.h +fs.o: $(hdrdir)/ruby/internal/core/rstring.h +fs.o: $(hdrdir)/ruby/internal/core/rstruct.h +fs.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +fs.o: $(hdrdir)/ruby/internal/ctype.h +fs.o: $(hdrdir)/ruby/internal/dllexport.h +fs.o: $(hdrdir)/ruby/internal/dosish.h +fs.o: $(hdrdir)/ruby/internal/encoding/coderange.h +fs.o: $(hdrdir)/ruby/internal/encoding/ctype.h +fs.o: $(hdrdir)/ruby/internal/encoding/encoding.h +fs.o: $(hdrdir)/ruby/internal/encoding/pathname.h +fs.o: $(hdrdir)/ruby/internal/encoding/re.h +fs.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +fs.o: $(hdrdir)/ruby/internal/encoding/string.h +fs.o: $(hdrdir)/ruby/internal/encoding/symbol.h +fs.o: $(hdrdir)/ruby/internal/encoding/transcode.h +fs.o: $(hdrdir)/ruby/internal/error.h +fs.o: $(hdrdir)/ruby/internal/eval.h +fs.o: $(hdrdir)/ruby/internal/event.h +fs.o: $(hdrdir)/ruby/internal/fl_type.h +fs.o: $(hdrdir)/ruby/internal/gc.h +fs.o: $(hdrdir)/ruby/internal/glob.h +fs.o: $(hdrdir)/ruby/internal/globals.h +fs.o: $(hdrdir)/ruby/internal/has/attribute.h +fs.o: $(hdrdir)/ruby/internal/has/builtin.h +fs.o: $(hdrdir)/ruby/internal/has/c_attribute.h +fs.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +fs.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +fs.o: $(hdrdir)/ruby/internal/has/extension.h +fs.o: $(hdrdir)/ruby/internal/has/feature.h +fs.o: $(hdrdir)/ruby/internal/has/warning.h +fs.o: $(hdrdir)/ruby/internal/intern/array.h +fs.o: $(hdrdir)/ruby/internal/intern/bignum.h +fs.o: $(hdrdir)/ruby/internal/intern/class.h +fs.o: $(hdrdir)/ruby/internal/intern/compar.h +fs.o: $(hdrdir)/ruby/internal/intern/complex.h +fs.o: $(hdrdir)/ruby/internal/intern/cont.h +fs.o: $(hdrdir)/ruby/internal/intern/dir.h +fs.o: $(hdrdir)/ruby/internal/intern/enum.h +fs.o: $(hdrdir)/ruby/internal/intern/enumerator.h +fs.o: $(hdrdir)/ruby/internal/intern/error.h +fs.o: $(hdrdir)/ruby/internal/intern/eval.h +fs.o: $(hdrdir)/ruby/internal/intern/file.h +fs.o: $(hdrdir)/ruby/internal/intern/gc.h +fs.o: $(hdrdir)/ruby/internal/intern/hash.h +fs.o: $(hdrdir)/ruby/internal/intern/io.h +fs.o: $(hdrdir)/ruby/internal/intern/load.h +fs.o: $(hdrdir)/ruby/internal/intern/marshal.h +fs.o: $(hdrdir)/ruby/internal/intern/numeric.h +fs.o: $(hdrdir)/ruby/internal/intern/object.h +fs.o: $(hdrdir)/ruby/internal/intern/parse.h +fs.o: $(hdrdir)/ruby/internal/intern/proc.h +fs.o: $(hdrdir)/ruby/internal/intern/process.h +fs.o: $(hdrdir)/ruby/internal/intern/random.h +fs.o: $(hdrdir)/ruby/internal/intern/range.h +fs.o: $(hdrdir)/ruby/internal/intern/rational.h +fs.o: $(hdrdir)/ruby/internal/intern/re.h +fs.o: $(hdrdir)/ruby/internal/intern/ruby.h +fs.o: $(hdrdir)/ruby/internal/intern/select.h +fs.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +fs.o: $(hdrdir)/ruby/internal/intern/signal.h +fs.o: $(hdrdir)/ruby/internal/intern/sprintf.h +fs.o: $(hdrdir)/ruby/internal/intern/string.h +fs.o: $(hdrdir)/ruby/internal/intern/struct.h +fs.o: $(hdrdir)/ruby/internal/intern/thread.h +fs.o: $(hdrdir)/ruby/internal/intern/time.h +fs.o: $(hdrdir)/ruby/internal/intern/variable.h +fs.o: $(hdrdir)/ruby/internal/intern/vm.h +fs.o: $(hdrdir)/ruby/internal/interpreter.h +fs.o: $(hdrdir)/ruby/internal/iterator.h +fs.o: $(hdrdir)/ruby/internal/memory.h +fs.o: $(hdrdir)/ruby/internal/method.h +fs.o: $(hdrdir)/ruby/internal/module.h +fs.o: $(hdrdir)/ruby/internal/newobj.h +fs.o: $(hdrdir)/ruby/internal/rgengc.h +fs.o: $(hdrdir)/ruby/internal/scan_args.h +fs.o: $(hdrdir)/ruby/internal/special_consts.h +fs.o: $(hdrdir)/ruby/internal/static_assert.h +fs.o: $(hdrdir)/ruby/internal/stdalign.h +fs.o: $(hdrdir)/ruby/internal/stdbool.h +fs.o: $(hdrdir)/ruby/internal/symbol.h +fs.o: $(hdrdir)/ruby/internal/value.h +fs.o: $(hdrdir)/ruby/internal/value_type.h +fs.o: $(hdrdir)/ruby/internal/variable.h +fs.o: $(hdrdir)/ruby/internal/warning_push.h +fs.o: $(hdrdir)/ruby/internal/xmalloc.h fs.o: $(hdrdir)/ruby/io.h fs.o: $(hdrdir)/ruby/missing.h fs.o: $(hdrdir)/ruby/onigmo.h @@ -19,8 +175,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h @@ -30,9 +333,165 @@ stat.o: $(RUBY_EXTCONF_H) stat.o: $(arch_hdrdir)/ruby/config.h stat.o: $(hdrdir)/ruby/assert.h stat.o: $(hdrdir)/ruby/backward.h +stat.o: $(hdrdir)/ruby/backward/2/assume.h +stat.o: $(hdrdir)/ruby/backward/2/attributes.h +stat.o: $(hdrdir)/ruby/backward/2/bool.h +stat.o: $(hdrdir)/ruby/backward/2/inttypes.h +stat.o: $(hdrdir)/ruby/backward/2/limits.h +stat.o: $(hdrdir)/ruby/backward/2/long_long.h +stat.o: $(hdrdir)/ruby/backward/2/stdalign.h +stat.o: $(hdrdir)/ruby/backward/2/stdarg.h stat.o: $(hdrdir)/ruby/defines.h stat.o: $(hdrdir)/ruby/encoding.h stat.o: $(hdrdir)/ruby/intern.h +stat.o: $(hdrdir)/ruby/internal/anyargs.h +stat.o: $(hdrdir)/ruby/internal/arithmetic.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/char.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/double.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/int.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/long.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/short.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +stat.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +stat.o: $(hdrdir)/ruby/internal/assume.h +stat.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +stat.o: $(hdrdir)/ruby/internal/attr/artificial.h +stat.o: $(hdrdir)/ruby/internal/attr/cold.h +stat.o: $(hdrdir)/ruby/internal/attr/const.h +stat.o: $(hdrdir)/ruby/internal/attr/constexpr.h +stat.o: $(hdrdir)/ruby/internal/attr/deprecated.h +stat.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +stat.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +stat.o: $(hdrdir)/ruby/internal/attr/error.h +stat.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +stat.o: $(hdrdir)/ruby/internal/attr/forceinline.h +stat.o: $(hdrdir)/ruby/internal/attr/format.h +stat.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +stat.o: $(hdrdir)/ruby/internal/attr/noalias.h +stat.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +stat.o: $(hdrdir)/ruby/internal/attr/noexcept.h +stat.o: $(hdrdir)/ruby/internal/attr/noinline.h +stat.o: $(hdrdir)/ruby/internal/attr/nonnull.h +stat.o: $(hdrdir)/ruby/internal/attr/noreturn.h +stat.o: $(hdrdir)/ruby/internal/attr/pure.h +stat.o: $(hdrdir)/ruby/internal/attr/restrict.h +stat.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +stat.o: $(hdrdir)/ruby/internal/attr/warning.h +stat.o: $(hdrdir)/ruby/internal/attr/weakref.h +stat.o: $(hdrdir)/ruby/internal/cast.h +stat.o: $(hdrdir)/ruby/internal/compiler_is.h +stat.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +stat.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +stat.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +stat.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +stat.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +stat.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +stat.o: $(hdrdir)/ruby/internal/compiler_since.h +stat.o: $(hdrdir)/ruby/internal/config.h +stat.o: $(hdrdir)/ruby/internal/constant_p.h +stat.o: $(hdrdir)/ruby/internal/core.h +stat.o: $(hdrdir)/ruby/internal/core/rarray.h +stat.o: $(hdrdir)/ruby/internal/core/rbasic.h +stat.o: $(hdrdir)/ruby/internal/core/rbignum.h +stat.o: $(hdrdir)/ruby/internal/core/rclass.h +stat.o: $(hdrdir)/ruby/internal/core/rdata.h +stat.o: $(hdrdir)/ruby/internal/core/rfile.h +stat.o: $(hdrdir)/ruby/internal/core/rhash.h +stat.o: $(hdrdir)/ruby/internal/core/robject.h +stat.o: $(hdrdir)/ruby/internal/core/rregexp.h +stat.o: $(hdrdir)/ruby/internal/core/rstring.h +stat.o: $(hdrdir)/ruby/internal/core/rstruct.h +stat.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +stat.o: $(hdrdir)/ruby/internal/ctype.h +stat.o: $(hdrdir)/ruby/internal/dllexport.h +stat.o: $(hdrdir)/ruby/internal/dosish.h +stat.o: $(hdrdir)/ruby/internal/encoding/coderange.h +stat.o: $(hdrdir)/ruby/internal/encoding/ctype.h +stat.o: $(hdrdir)/ruby/internal/encoding/encoding.h +stat.o: $(hdrdir)/ruby/internal/encoding/pathname.h +stat.o: $(hdrdir)/ruby/internal/encoding/re.h +stat.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +stat.o: $(hdrdir)/ruby/internal/encoding/string.h +stat.o: $(hdrdir)/ruby/internal/encoding/symbol.h +stat.o: $(hdrdir)/ruby/internal/encoding/transcode.h +stat.o: $(hdrdir)/ruby/internal/error.h +stat.o: $(hdrdir)/ruby/internal/eval.h +stat.o: $(hdrdir)/ruby/internal/event.h +stat.o: $(hdrdir)/ruby/internal/fl_type.h +stat.o: $(hdrdir)/ruby/internal/gc.h +stat.o: $(hdrdir)/ruby/internal/glob.h +stat.o: $(hdrdir)/ruby/internal/globals.h +stat.o: $(hdrdir)/ruby/internal/has/attribute.h +stat.o: $(hdrdir)/ruby/internal/has/builtin.h +stat.o: $(hdrdir)/ruby/internal/has/c_attribute.h +stat.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +stat.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +stat.o: $(hdrdir)/ruby/internal/has/extension.h +stat.o: $(hdrdir)/ruby/internal/has/feature.h +stat.o: $(hdrdir)/ruby/internal/has/warning.h +stat.o: $(hdrdir)/ruby/internal/intern/array.h +stat.o: $(hdrdir)/ruby/internal/intern/bignum.h +stat.o: $(hdrdir)/ruby/internal/intern/class.h +stat.o: $(hdrdir)/ruby/internal/intern/compar.h +stat.o: $(hdrdir)/ruby/internal/intern/complex.h +stat.o: $(hdrdir)/ruby/internal/intern/cont.h +stat.o: $(hdrdir)/ruby/internal/intern/dir.h +stat.o: $(hdrdir)/ruby/internal/intern/enum.h +stat.o: $(hdrdir)/ruby/internal/intern/enumerator.h +stat.o: $(hdrdir)/ruby/internal/intern/error.h +stat.o: $(hdrdir)/ruby/internal/intern/eval.h +stat.o: $(hdrdir)/ruby/internal/intern/file.h +stat.o: $(hdrdir)/ruby/internal/intern/gc.h +stat.o: $(hdrdir)/ruby/internal/intern/hash.h +stat.o: $(hdrdir)/ruby/internal/intern/io.h +stat.o: $(hdrdir)/ruby/internal/intern/load.h +stat.o: $(hdrdir)/ruby/internal/intern/marshal.h +stat.o: $(hdrdir)/ruby/internal/intern/numeric.h +stat.o: $(hdrdir)/ruby/internal/intern/object.h +stat.o: $(hdrdir)/ruby/internal/intern/parse.h +stat.o: $(hdrdir)/ruby/internal/intern/proc.h +stat.o: $(hdrdir)/ruby/internal/intern/process.h +stat.o: $(hdrdir)/ruby/internal/intern/random.h +stat.o: $(hdrdir)/ruby/internal/intern/range.h +stat.o: $(hdrdir)/ruby/internal/intern/rational.h +stat.o: $(hdrdir)/ruby/internal/intern/re.h +stat.o: $(hdrdir)/ruby/internal/intern/ruby.h +stat.o: $(hdrdir)/ruby/internal/intern/select.h +stat.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +stat.o: $(hdrdir)/ruby/internal/intern/signal.h +stat.o: $(hdrdir)/ruby/internal/intern/sprintf.h +stat.o: $(hdrdir)/ruby/internal/intern/string.h +stat.o: $(hdrdir)/ruby/internal/intern/struct.h +stat.o: $(hdrdir)/ruby/internal/intern/thread.h +stat.o: $(hdrdir)/ruby/internal/intern/time.h +stat.o: $(hdrdir)/ruby/internal/intern/variable.h +stat.o: $(hdrdir)/ruby/internal/intern/vm.h +stat.o: $(hdrdir)/ruby/internal/interpreter.h +stat.o: $(hdrdir)/ruby/internal/iterator.h +stat.o: $(hdrdir)/ruby/internal/memory.h +stat.o: $(hdrdir)/ruby/internal/method.h +stat.o: $(hdrdir)/ruby/internal/module.h +stat.o: $(hdrdir)/ruby/internal/newobj.h +stat.o: $(hdrdir)/ruby/internal/rgengc.h +stat.o: $(hdrdir)/ruby/internal/scan_args.h +stat.o: $(hdrdir)/ruby/internal/special_consts.h +stat.o: $(hdrdir)/ruby/internal/static_assert.h +stat.o: $(hdrdir)/ruby/internal/stdalign.h +stat.o: $(hdrdir)/ruby/internal/stdbool.h +stat.o: $(hdrdir)/ruby/internal/symbol.h +stat.o: $(hdrdir)/ruby/internal/value.h +stat.o: $(hdrdir)/ruby/internal/value_type.h +stat.o: $(hdrdir)/ruby/internal/variable.h +stat.o: $(hdrdir)/ruby/internal/warning_push.h +stat.o: $(hdrdir)/ruby/internal/xmalloc.h stat.o: $(hdrdir)/ruby/io.h stat.o: $(hdrdir)/ruby/missing.h stat.o: $(hdrdir)/ruby/onigmo.h diff --git a/ruby/ext/-test-/float/depend b/ruby/ext/-test-/float/depend index 6007bd3c0..661f4876d 100644 --- a/ruby/ext/-test-/float/depend +++ b/ruby/ext/-test-/float/depend @@ -7,8 +7,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h @@ -19,8 +166,155 @@ nextafter.o: $(arch_hdrdir)/ruby/config.h nextafter.o: $(hdrdir)/ruby.h nextafter.o: $(hdrdir)/ruby/assert.h nextafter.o: $(hdrdir)/ruby/backward.h +nextafter.o: $(hdrdir)/ruby/backward/2/assume.h +nextafter.o: $(hdrdir)/ruby/backward/2/attributes.h +nextafter.o: $(hdrdir)/ruby/backward/2/bool.h +nextafter.o: $(hdrdir)/ruby/backward/2/inttypes.h +nextafter.o: $(hdrdir)/ruby/backward/2/limits.h +nextafter.o: $(hdrdir)/ruby/backward/2/long_long.h +nextafter.o: $(hdrdir)/ruby/backward/2/stdalign.h +nextafter.o: $(hdrdir)/ruby/backward/2/stdarg.h nextafter.o: $(hdrdir)/ruby/defines.h nextafter.o: $(hdrdir)/ruby/intern.h +nextafter.o: $(hdrdir)/ruby/internal/anyargs.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/char.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/double.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/int.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/long.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/short.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +nextafter.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +nextafter.o: $(hdrdir)/ruby/internal/assume.h +nextafter.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +nextafter.o: $(hdrdir)/ruby/internal/attr/artificial.h +nextafter.o: $(hdrdir)/ruby/internal/attr/cold.h +nextafter.o: $(hdrdir)/ruby/internal/attr/const.h +nextafter.o: $(hdrdir)/ruby/internal/attr/constexpr.h +nextafter.o: $(hdrdir)/ruby/internal/attr/deprecated.h +nextafter.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +nextafter.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +nextafter.o: $(hdrdir)/ruby/internal/attr/error.h +nextafter.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +nextafter.o: $(hdrdir)/ruby/internal/attr/forceinline.h +nextafter.o: $(hdrdir)/ruby/internal/attr/format.h +nextafter.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +nextafter.o: $(hdrdir)/ruby/internal/attr/noalias.h +nextafter.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +nextafter.o: $(hdrdir)/ruby/internal/attr/noexcept.h +nextafter.o: $(hdrdir)/ruby/internal/attr/noinline.h +nextafter.o: $(hdrdir)/ruby/internal/attr/nonnull.h +nextafter.o: $(hdrdir)/ruby/internal/attr/noreturn.h +nextafter.o: $(hdrdir)/ruby/internal/attr/pure.h +nextafter.o: $(hdrdir)/ruby/internal/attr/restrict.h +nextafter.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +nextafter.o: $(hdrdir)/ruby/internal/attr/warning.h +nextafter.o: $(hdrdir)/ruby/internal/attr/weakref.h +nextafter.o: $(hdrdir)/ruby/internal/cast.h +nextafter.o: $(hdrdir)/ruby/internal/compiler_is.h +nextafter.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +nextafter.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +nextafter.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +nextafter.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +nextafter.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +nextafter.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +nextafter.o: $(hdrdir)/ruby/internal/compiler_since.h +nextafter.o: $(hdrdir)/ruby/internal/config.h +nextafter.o: $(hdrdir)/ruby/internal/constant_p.h +nextafter.o: $(hdrdir)/ruby/internal/core.h +nextafter.o: $(hdrdir)/ruby/internal/core/rarray.h +nextafter.o: $(hdrdir)/ruby/internal/core/rbasic.h +nextafter.o: $(hdrdir)/ruby/internal/core/rbignum.h +nextafter.o: $(hdrdir)/ruby/internal/core/rclass.h +nextafter.o: $(hdrdir)/ruby/internal/core/rdata.h +nextafter.o: $(hdrdir)/ruby/internal/core/rfile.h +nextafter.o: $(hdrdir)/ruby/internal/core/rhash.h +nextafter.o: $(hdrdir)/ruby/internal/core/robject.h +nextafter.o: $(hdrdir)/ruby/internal/core/rregexp.h +nextafter.o: $(hdrdir)/ruby/internal/core/rstring.h +nextafter.o: $(hdrdir)/ruby/internal/core/rstruct.h +nextafter.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +nextafter.o: $(hdrdir)/ruby/internal/ctype.h +nextafter.o: $(hdrdir)/ruby/internal/dllexport.h +nextafter.o: $(hdrdir)/ruby/internal/dosish.h +nextafter.o: $(hdrdir)/ruby/internal/error.h +nextafter.o: $(hdrdir)/ruby/internal/eval.h +nextafter.o: $(hdrdir)/ruby/internal/event.h +nextafter.o: $(hdrdir)/ruby/internal/fl_type.h +nextafter.o: $(hdrdir)/ruby/internal/gc.h +nextafter.o: $(hdrdir)/ruby/internal/glob.h +nextafter.o: $(hdrdir)/ruby/internal/globals.h +nextafter.o: $(hdrdir)/ruby/internal/has/attribute.h +nextafter.o: $(hdrdir)/ruby/internal/has/builtin.h +nextafter.o: $(hdrdir)/ruby/internal/has/c_attribute.h +nextafter.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +nextafter.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +nextafter.o: $(hdrdir)/ruby/internal/has/extension.h +nextafter.o: $(hdrdir)/ruby/internal/has/feature.h +nextafter.o: $(hdrdir)/ruby/internal/has/warning.h +nextafter.o: $(hdrdir)/ruby/internal/intern/array.h +nextafter.o: $(hdrdir)/ruby/internal/intern/bignum.h +nextafter.o: $(hdrdir)/ruby/internal/intern/class.h +nextafter.o: $(hdrdir)/ruby/internal/intern/compar.h +nextafter.o: $(hdrdir)/ruby/internal/intern/complex.h +nextafter.o: $(hdrdir)/ruby/internal/intern/cont.h +nextafter.o: $(hdrdir)/ruby/internal/intern/dir.h +nextafter.o: $(hdrdir)/ruby/internal/intern/enum.h +nextafter.o: $(hdrdir)/ruby/internal/intern/enumerator.h +nextafter.o: $(hdrdir)/ruby/internal/intern/error.h +nextafter.o: $(hdrdir)/ruby/internal/intern/eval.h +nextafter.o: $(hdrdir)/ruby/internal/intern/file.h +nextafter.o: $(hdrdir)/ruby/internal/intern/gc.h +nextafter.o: $(hdrdir)/ruby/internal/intern/hash.h +nextafter.o: $(hdrdir)/ruby/internal/intern/io.h +nextafter.o: $(hdrdir)/ruby/internal/intern/load.h +nextafter.o: $(hdrdir)/ruby/internal/intern/marshal.h +nextafter.o: $(hdrdir)/ruby/internal/intern/numeric.h +nextafter.o: $(hdrdir)/ruby/internal/intern/object.h +nextafter.o: $(hdrdir)/ruby/internal/intern/parse.h +nextafter.o: $(hdrdir)/ruby/internal/intern/proc.h +nextafter.o: $(hdrdir)/ruby/internal/intern/process.h +nextafter.o: $(hdrdir)/ruby/internal/intern/random.h +nextafter.o: $(hdrdir)/ruby/internal/intern/range.h +nextafter.o: $(hdrdir)/ruby/internal/intern/rational.h +nextafter.o: $(hdrdir)/ruby/internal/intern/re.h +nextafter.o: $(hdrdir)/ruby/internal/intern/ruby.h +nextafter.o: $(hdrdir)/ruby/internal/intern/select.h +nextafter.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +nextafter.o: $(hdrdir)/ruby/internal/intern/signal.h +nextafter.o: $(hdrdir)/ruby/internal/intern/sprintf.h +nextafter.o: $(hdrdir)/ruby/internal/intern/string.h +nextafter.o: $(hdrdir)/ruby/internal/intern/struct.h +nextafter.o: $(hdrdir)/ruby/internal/intern/thread.h +nextafter.o: $(hdrdir)/ruby/internal/intern/time.h +nextafter.o: $(hdrdir)/ruby/internal/intern/variable.h +nextafter.o: $(hdrdir)/ruby/internal/intern/vm.h +nextafter.o: $(hdrdir)/ruby/internal/interpreter.h +nextafter.o: $(hdrdir)/ruby/internal/iterator.h +nextafter.o: $(hdrdir)/ruby/internal/memory.h +nextafter.o: $(hdrdir)/ruby/internal/method.h +nextafter.o: $(hdrdir)/ruby/internal/module.h +nextafter.o: $(hdrdir)/ruby/internal/newobj.h +nextafter.o: $(hdrdir)/ruby/internal/rgengc.h +nextafter.o: $(hdrdir)/ruby/internal/scan_args.h +nextafter.o: $(hdrdir)/ruby/internal/special_consts.h +nextafter.o: $(hdrdir)/ruby/internal/static_assert.h +nextafter.o: $(hdrdir)/ruby/internal/stdalign.h +nextafter.o: $(hdrdir)/ruby/internal/stdbool.h +nextafter.o: $(hdrdir)/ruby/internal/symbol.h +nextafter.o: $(hdrdir)/ruby/internal/value.h +nextafter.o: $(hdrdir)/ruby/internal/value_type.h +nextafter.o: $(hdrdir)/ruby/internal/variable.h +nextafter.o: $(hdrdir)/ruby/internal/warning_push.h +nextafter.o: $(hdrdir)/ruby/internal/xmalloc.h nextafter.o: $(hdrdir)/ruby/missing.h nextafter.o: $(hdrdir)/ruby/ruby.h nextafter.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/funcall/depend b/ruby/ext/-test-/funcall/depend index a5f43a804..adec76f14 100644 --- a/ruby/ext/-test-/funcall/depend +++ b/ruby/ext/-test-/funcall/depend @@ -4,8 +4,155 @@ funcall.o: $(arch_hdrdir)/ruby/config.h funcall.o: $(hdrdir)/ruby.h funcall.o: $(hdrdir)/ruby/assert.h funcall.o: $(hdrdir)/ruby/backward.h +funcall.o: $(hdrdir)/ruby/backward/2/assume.h +funcall.o: $(hdrdir)/ruby/backward/2/attributes.h +funcall.o: $(hdrdir)/ruby/backward/2/bool.h +funcall.o: $(hdrdir)/ruby/backward/2/inttypes.h +funcall.o: $(hdrdir)/ruby/backward/2/limits.h +funcall.o: $(hdrdir)/ruby/backward/2/long_long.h +funcall.o: $(hdrdir)/ruby/backward/2/stdalign.h +funcall.o: $(hdrdir)/ruby/backward/2/stdarg.h funcall.o: $(hdrdir)/ruby/defines.h funcall.o: $(hdrdir)/ruby/intern.h +funcall.o: $(hdrdir)/ruby/internal/anyargs.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/char.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/double.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/int.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/long.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/short.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +funcall.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +funcall.o: $(hdrdir)/ruby/internal/assume.h +funcall.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +funcall.o: $(hdrdir)/ruby/internal/attr/artificial.h +funcall.o: $(hdrdir)/ruby/internal/attr/cold.h +funcall.o: $(hdrdir)/ruby/internal/attr/const.h +funcall.o: $(hdrdir)/ruby/internal/attr/constexpr.h +funcall.o: $(hdrdir)/ruby/internal/attr/deprecated.h +funcall.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +funcall.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +funcall.o: $(hdrdir)/ruby/internal/attr/error.h +funcall.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +funcall.o: $(hdrdir)/ruby/internal/attr/forceinline.h +funcall.o: $(hdrdir)/ruby/internal/attr/format.h +funcall.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +funcall.o: $(hdrdir)/ruby/internal/attr/noalias.h +funcall.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +funcall.o: $(hdrdir)/ruby/internal/attr/noexcept.h +funcall.o: $(hdrdir)/ruby/internal/attr/noinline.h +funcall.o: $(hdrdir)/ruby/internal/attr/nonnull.h +funcall.o: $(hdrdir)/ruby/internal/attr/noreturn.h +funcall.o: $(hdrdir)/ruby/internal/attr/pure.h +funcall.o: $(hdrdir)/ruby/internal/attr/restrict.h +funcall.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +funcall.o: $(hdrdir)/ruby/internal/attr/warning.h +funcall.o: $(hdrdir)/ruby/internal/attr/weakref.h +funcall.o: $(hdrdir)/ruby/internal/cast.h +funcall.o: $(hdrdir)/ruby/internal/compiler_is.h +funcall.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +funcall.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +funcall.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +funcall.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +funcall.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +funcall.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +funcall.o: $(hdrdir)/ruby/internal/compiler_since.h +funcall.o: $(hdrdir)/ruby/internal/config.h +funcall.o: $(hdrdir)/ruby/internal/constant_p.h +funcall.o: $(hdrdir)/ruby/internal/core.h +funcall.o: $(hdrdir)/ruby/internal/core/rarray.h +funcall.o: $(hdrdir)/ruby/internal/core/rbasic.h +funcall.o: $(hdrdir)/ruby/internal/core/rbignum.h +funcall.o: $(hdrdir)/ruby/internal/core/rclass.h +funcall.o: $(hdrdir)/ruby/internal/core/rdata.h +funcall.o: $(hdrdir)/ruby/internal/core/rfile.h +funcall.o: $(hdrdir)/ruby/internal/core/rhash.h +funcall.o: $(hdrdir)/ruby/internal/core/robject.h +funcall.o: $(hdrdir)/ruby/internal/core/rregexp.h +funcall.o: $(hdrdir)/ruby/internal/core/rstring.h +funcall.o: $(hdrdir)/ruby/internal/core/rstruct.h +funcall.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +funcall.o: $(hdrdir)/ruby/internal/ctype.h +funcall.o: $(hdrdir)/ruby/internal/dllexport.h +funcall.o: $(hdrdir)/ruby/internal/dosish.h +funcall.o: $(hdrdir)/ruby/internal/error.h +funcall.o: $(hdrdir)/ruby/internal/eval.h +funcall.o: $(hdrdir)/ruby/internal/event.h +funcall.o: $(hdrdir)/ruby/internal/fl_type.h +funcall.o: $(hdrdir)/ruby/internal/gc.h +funcall.o: $(hdrdir)/ruby/internal/glob.h +funcall.o: $(hdrdir)/ruby/internal/globals.h +funcall.o: $(hdrdir)/ruby/internal/has/attribute.h +funcall.o: $(hdrdir)/ruby/internal/has/builtin.h +funcall.o: $(hdrdir)/ruby/internal/has/c_attribute.h +funcall.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +funcall.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +funcall.o: $(hdrdir)/ruby/internal/has/extension.h +funcall.o: $(hdrdir)/ruby/internal/has/feature.h +funcall.o: $(hdrdir)/ruby/internal/has/warning.h +funcall.o: $(hdrdir)/ruby/internal/intern/array.h +funcall.o: $(hdrdir)/ruby/internal/intern/bignum.h +funcall.o: $(hdrdir)/ruby/internal/intern/class.h +funcall.o: $(hdrdir)/ruby/internal/intern/compar.h +funcall.o: $(hdrdir)/ruby/internal/intern/complex.h +funcall.o: $(hdrdir)/ruby/internal/intern/cont.h +funcall.o: $(hdrdir)/ruby/internal/intern/dir.h +funcall.o: $(hdrdir)/ruby/internal/intern/enum.h +funcall.o: $(hdrdir)/ruby/internal/intern/enumerator.h +funcall.o: $(hdrdir)/ruby/internal/intern/error.h +funcall.o: $(hdrdir)/ruby/internal/intern/eval.h +funcall.o: $(hdrdir)/ruby/internal/intern/file.h +funcall.o: $(hdrdir)/ruby/internal/intern/gc.h +funcall.o: $(hdrdir)/ruby/internal/intern/hash.h +funcall.o: $(hdrdir)/ruby/internal/intern/io.h +funcall.o: $(hdrdir)/ruby/internal/intern/load.h +funcall.o: $(hdrdir)/ruby/internal/intern/marshal.h +funcall.o: $(hdrdir)/ruby/internal/intern/numeric.h +funcall.o: $(hdrdir)/ruby/internal/intern/object.h +funcall.o: $(hdrdir)/ruby/internal/intern/parse.h +funcall.o: $(hdrdir)/ruby/internal/intern/proc.h +funcall.o: $(hdrdir)/ruby/internal/intern/process.h +funcall.o: $(hdrdir)/ruby/internal/intern/random.h +funcall.o: $(hdrdir)/ruby/internal/intern/range.h +funcall.o: $(hdrdir)/ruby/internal/intern/rational.h +funcall.o: $(hdrdir)/ruby/internal/intern/re.h +funcall.o: $(hdrdir)/ruby/internal/intern/ruby.h +funcall.o: $(hdrdir)/ruby/internal/intern/select.h +funcall.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +funcall.o: $(hdrdir)/ruby/internal/intern/signal.h +funcall.o: $(hdrdir)/ruby/internal/intern/sprintf.h +funcall.o: $(hdrdir)/ruby/internal/intern/string.h +funcall.o: $(hdrdir)/ruby/internal/intern/struct.h +funcall.o: $(hdrdir)/ruby/internal/intern/thread.h +funcall.o: $(hdrdir)/ruby/internal/intern/time.h +funcall.o: $(hdrdir)/ruby/internal/intern/variable.h +funcall.o: $(hdrdir)/ruby/internal/intern/vm.h +funcall.o: $(hdrdir)/ruby/internal/interpreter.h +funcall.o: $(hdrdir)/ruby/internal/iterator.h +funcall.o: $(hdrdir)/ruby/internal/memory.h +funcall.o: $(hdrdir)/ruby/internal/method.h +funcall.o: $(hdrdir)/ruby/internal/module.h +funcall.o: $(hdrdir)/ruby/internal/newobj.h +funcall.o: $(hdrdir)/ruby/internal/rgengc.h +funcall.o: $(hdrdir)/ruby/internal/scan_args.h +funcall.o: $(hdrdir)/ruby/internal/special_consts.h +funcall.o: $(hdrdir)/ruby/internal/static_assert.h +funcall.o: $(hdrdir)/ruby/internal/stdalign.h +funcall.o: $(hdrdir)/ruby/internal/stdbool.h +funcall.o: $(hdrdir)/ruby/internal/symbol.h +funcall.o: $(hdrdir)/ruby/internal/value.h +funcall.o: $(hdrdir)/ruby/internal/value_type.h +funcall.o: $(hdrdir)/ruby/internal/variable.h +funcall.o: $(hdrdir)/ruby/internal/warning_push.h +funcall.o: $(hdrdir)/ruby/internal/xmalloc.h funcall.o: $(hdrdir)/ruby/missing.h funcall.o: $(hdrdir)/ruby/ruby.h funcall.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/gvl/call_without_gvl/call_without_gvl.c b/ruby/ext/-test-/gvl/call_without_gvl/call_without_gvl.c index d77c2f323..233635421 100644 --- a/ruby/ext/-test-/gvl/call_without_gvl/call_without_gvl.c +++ b/ruby/ext/-test-/gvl/call_without_gvl/call_without_gvl.c @@ -24,7 +24,7 @@ thread_runnable_sleep(VALUE thread, VALUE timeout) rb_thread_call_without_gvl(native_sleep_callback, &timeval, RUBY_UBF_IO, NULL); - return thread; + return Qnil; } struct loop_ctl { @@ -65,12 +65,14 @@ thread_ubf_async_safe(VALUE thread, VALUE notify_fd) ctl.stop = 0; rb_nogvl(do_loop, &ctl, stop_set, &ctl, RB_NOGVL_UBF_ASYNC_SAFE); - return thread; + return Qnil; } void Init_call_without_gvl(void) { - rb_define_method(rb_cThread, "__runnable_sleep__", thread_runnable_sleep, 1); - rb_define_method(rb_cThread, "__ubf_async_safe__", thread_ubf_async_safe, 1); + VALUE mBug = rb_define_module("Bug"); + VALUE klass = rb_define_module_under(mBug, "Thread"); + rb_define_singleton_method(klass, "runnable_sleep", thread_runnable_sleep, 1); + rb_define_singleton_method(klass, "ubf_async_safe", thread_ubf_async_safe, 1); } diff --git a/ruby/ext/-test-/gvl/call_without_gvl/depend b/ruby/ext/-test-/gvl/call_without_gvl/depend index 3d4253b97..d74a52522 100644 --- a/ruby/ext/-test-/gvl/call_without_gvl/depend +++ b/ruby/ext/-test-/gvl/call_without_gvl/depend @@ -3,8 +3,155 @@ call_without_gvl.o: $(RUBY_EXTCONF_H) call_without_gvl.o: $(arch_hdrdir)/ruby/config.h call_without_gvl.o: $(hdrdir)/ruby/assert.h call_without_gvl.o: $(hdrdir)/ruby/backward.h +call_without_gvl.o: $(hdrdir)/ruby/backward/2/assume.h +call_without_gvl.o: $(hdrdir)/ruby/backward/2/attributes.h +call_without_gvl.o: $(hdrdir)/ruby/backward/2/bool.h +call_without_gvl.o: $(hdrdir)/ruby/backward/2/inttypes.h +call_without_gvl.o: $(hdrdir)/ruby/backward/2/limits.h +call_without_gvl.o: $(hdrdir)/ruby/backward/2/long_long.h +call_without_gvl.o: $(hdrdir)/ruby/backward/2/stdalign.h +call_without_gvl.o: $(hdrdir)/ruby/backward/2/stdarg.h call_without_gvl.o: $(hdrdir)/ruby/defines.h call_without_gvl.o: $(hdrdir)/ruby/intern.h +call_without_gvl.o: $(hdrdir)/ruby/internal/anyargs.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/char.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/double.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/int.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/long.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/short.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +call_without_gvl.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +call_without_gvl.o: $(hdrdir)/ruby/internal/assume.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/artificial.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/cold.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/const.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/constexpr.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/deprecated.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/error.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/forceinline.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/format.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/noalias.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/noexcept.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/noinline.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/nonnull.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/noreturn.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/pure.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/restrict.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/warning.h +call_without_gvl.o: $(hdrdir)/ruby/internal/attr/weakref.h +call_without_gvl.o: $(hdrdir)/ruby/internal/cast.h +call_without_gvl.o: $(hdrdir)/ruby/internal/compiler_is.h +call_without_gvl.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +call_without_gvl.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +call_without_gvl.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +call_without_gvl.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +call_without_gvl.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +call_without_gvl.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +call_without_gvl.o: $(hdrdir)/ruby/internal/compiler_since.h +call_without_gvl.o: $(hdrdir)/ruby/internal/config.h +call_without_gvl.o: $(hdrdir)/ruby/internal/constant_p.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core/rarray.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core/rbasic.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core/rbignum.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core/rclass.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core/rdata.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core/rfile.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core/rhash.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core/robject.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core/rregexp.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core/rstring.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core/rstruct.h +call_without_gvl.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +call_without_gvl.o: $(hdrdir)/ruby/internal/ctype.h +call_without_gvl.o: $(hdrdir)/ruby/internal/dllexport.h +call_without_gvl.o: $(hdrdir)/ruby/internal/dosish.h +call_without_gvl.o: $(hdrdir)/ruby/internal/error.h +call_without_gvl.o: $(hdrdir)/ruby/internal/eval.h +call_without_gvl.o: $(hdrdir)/ruby/internal/event.h +call_without_gvl.o: $(hdrdir)/ruby/internal/fl_type.h +call_without_gvl.o: $(hdrdir)/ruby/internal/gc.h +call_without_gvl.o: $(hdrdir)/ruby/internal/glob.h +call_without_gvl.o: $(hdrdir)/ruby/internal/globals.h +call_without_gvl.o: $(hdrdir)/ruby/internal/has/attribute.h +call_without_gvl.o: $(hdrdir)/ruby/internal/has/builtin.h +call_without_gvl.o: $(hdrdir)/ruby/internal/has/c_attribute.h +call_without_gvl.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +call_without_gvl.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +call_without_gvl.o: $(hdrdir)/ruby/internal/has/extension.h +call_without_gvl.o: $(hdrdir)/ruby/internal/has/feature.h +call_without_gvl.o: $(hdrdir)/ruby/internal/has/warning.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/array.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/bignum.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/class.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/compar.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/complex.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/cont.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/dir.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/enum.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/enumerator.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/error.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/eval.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/file.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/gc.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/hash.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/io.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/load.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/marshal.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/numeric.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/object.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/parse.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/proc.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/process.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/random.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/range.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/rational.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/re.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/ruby.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/select.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/signal.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/sprintf.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/string.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/struct.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/thread.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/time.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/variable.h +call_without_gvl.o: $(hdrdir)/ruby/internal/intern/vm.h +call_without_gvl.o: $(hdrdir)/ruby/internal/interpreter.h +call_without_gvl.o: $(hdrdir)/ruby/internal/iterator.h +call_without_gvl.o: $(hdrdir)/ruby/internal/memory.h +call_without_gvl.o: $(hdrdir)/ruby/internal/method.h +call_without_gvl.o: $(hdrdir)/ruby/internal/module.h +call_without_gvl.o: $(hdrdir)/ruby/internal/newobj.h +call_without_gvl.o: $(hdrdir)/ruby/internal/rgengc.h +call_without_gvl.o: $(hdrdir)/ruby/internal/scan_args.h +call_without_gvl.o: $(hdrdir)/ruby/internal/special_consts.h +call_without_gvl.o: $(hdrdir)/ruby/internal/static_assert.h +call_without_gvl.o: $(hdrdir)/ruby/internal/stdalign.h +call_without_gvl.o: $(hdrdir)/ruby/internal/stdbool.h +call_without_gvl.o: $(hdrdir)/ruby/internal/symbol.h +call_without_gvl.o: $(hdrdir)/ruby/internal/value.h +call_without_gvl.o: $(hdrdir)/ruby/internal/value_type.h +call_without_gvl.o: $(hdrdir)/ruby/internal/variable.h +call_without_gvl.o: $(hdrdir)/ruby/internal/warning_push.h +call_without_gvl.o: $(hdrdir)/ruby/internal/xmalloc.h call_without_gvl.o: $(hdrdir)/ruby/missing.h call_without_gvl.o: $(hdrdir)/ruby/ruby.h call_without_gvl.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/hash/depend b/ruby/ext/-test-/hash/depend index 5e2b8056c..b8460734c 100644 --- a/ruby/ext/-test-/hash/depend +++ b/ruby/ext/-test-/hash/depend @@ -4,8 +4,155 @@ delete.o: $(arch_hdrdir)/ruby/config.h delete.o: $(hdrdir)/ruby.h delete.o: $(hdrdir)/ruby/assert.h delete.o: $(hdrdir)/ruby/backward.h +delete.o: $(hdrdir)/ruby/backward/2/assume.h +delete.o: $(hdrdir)/ruby/backward/2/attributes.h +delete.o: $(hdrdir)/ruby/backward/2/bool.h +delete.o: $(hdrdir)/ruby/backward/2/inttypes.h +delete.o: $(hdrdir)/ruby/backward/2/limits.h +delete.o: $(hdrdir)/ruby/backward/2/long_long.h +delete.o: $(hdrdir)/ruby/backward/2/stdalign.h +delete.o: $(hdrdir)/ruby/backward/2/stdarg.h delete.o: $(hdrdir)/ruby/defines.h delete.o: $(hdrdir)/ruby/intern.h +delete.o: $(hdrdir)/ruby/internal/anyargs.h +delete.o: $(hdrdir)/ruby/internal/arithmetic.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/char.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/double.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/int.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/long.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/short.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +delete.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +delete.o: $(hdrdir)/ruby/internal/assume.h +delete.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +delete.o: $(hdrdir)/ruby/internal/attr/artificial.h +delete.o: $(hdrdir)/ruby/internal/attr/cold.h +delete.o: $(hdrdir)/ruby/internal/attr/const.h +delete.o: $(hdrdir)/ruby/internal/attr/constexpr.h +delete.o: $(hdrdir)/ruby/internal/attr/deprecated.h +delete.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +delete.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +delete.o: $(hdrdir)/ruby/internal/attr/error.h +delete.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +delete.o: $(hdrdir)/ruby/internal/attr/forceinline.h +delete.o: $(hdrdir)/ruby/internal/attr/format.h +delete.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +delete.o: $(hdrdir)/ruby/internal/attr/noalias.h +delete.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +delete.o: $(hdrdir)/ruby/internal/attr/noexcept.h +delete.o: $(hdrdir)/ruby/internal/attr/noinline.h +delete.o: $(hdrdir)/ruby/internal/attr/nonnull.h +delete.o: $(hdrdir)/ruby/internal/attr/noreturn.h +delete.o: $(hdrdir)/ruby/internal/attr/pure.h +delete.o: $(hdrdir)/ruby/internal/attr/restrict.h +delete.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +delete.o: $(hdrdir)/ruby/internal/attr/warning.h +delete.o: $(hdrdir)/ruby/internal/attr/weakref.h +delete.o: $(hdrdir)/ruby/internal/cast.h +delete.o: $(hdrdir)/ruby/internal/compiler_is.h +delete.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +delete.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +delete.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +delete.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +delete.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +delete.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +delete.o: $(hdrdir)/ruby/internal/compiler_since.h +delete.o: $(hdrdir)/ruby/internal/config.h +delete.o: $(hdrdir)/ruby/internal/constant_p.h +delete.o: $(hdrdir)/ruby/internal/core.h +delete.o: $(hdrdir)/ruby/internal/core/rarray.h +delete.o: $(hdrdir)/ruby/internal/core/rbasic.h +delete.o: $(hdrdir)/ruby/internal/core/rbignum.h +delete.o: $(hdrdir)/ruby/internal/core/rclass.h +delete.o: $(hdrdir)/ruby/internal/core/rdata.h +delete.o: $(hdrdir)/ruby/internal/core/rfile.h +delete.o: $(hdrdir)/ruby/internal/core/rhash.h +delete.o: $(hdrdir)/ruby/internal/core/robject.h +delete.o: $(hdrdir)/ruby/internal/core/rregexp.h +delete.o: $(hdrdir)/ruby/internal/core/rstring.h +delete.o: $(hdrdir)/ruby/internal/core/rstruct.h +delete.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +delete.o: $(hdrdir)/ruby/internal/ctype.h +delete.o: $(hdrdir)/ruby/internal/dllexport.h +delete.o: $(hdrdir)/ruby/internal/dosish.h +delete.o: $(hdrdir)/ruby/internal/error.h +delete.o: $(hdrdir)/ruby/internal/eval.h +delete.o: $(hdrdir)/ruby/internal/event.h +delete.o: $(hdrdir)/ruby/internal/fl_type.h +delete.o: $(hdrdir)/ruby/internal/gc.h +delete.o: $(hdrdir)/ruby/internal/glob.h +delete.o: $(hdrdir)/ruby/internal/globals.h +delete.o: $(hdrdir)/ruby/internal/has/attribute.h +delete.o: $(hdrdir)/ruby/internal/has/builtin.h +delete.o: $(hdrdir)/ruby/internal/has/c_attribute.h +delete.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +delete.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +delete.o: $(hdrdir)/ruby/internal/has/extension.h +delete.o: $(hdrdir)/ruby/internal/has/feature.h +delete.o: $(hdrdir)/ruby/internal/has/warning.h +delete.o: $(hdrdir)/ruby/internal/intern/array.h +delete.o: $(hdrdir)/ruby/internal/intern/bignum.h +delete.o: $(hdrdir)/ruby/internal/intern/class.h +delete.o: $(hdrdir)/ruby/internal/intern/compar.h +delete.o: $(hdrdir)/ruby/internal/intern/complex.h +delete.o: $(hdrdir)/ruby/internal/intern/cont.h +delete.o: $(hdrdir)/ruby/internal/intern/dir.h +delete.o: $(hdrdir)/ruby/internal/intern/enum.h +delete.o: $(hdrdir)/ruby/internal/intern/enumerator.h +delete.o: $(hdrdir)/ruby/internal/intern/error.h +delete.o: $(hdrdir)/ruby/internal/intern/eval.h +delete.o: $(hdrdir)/ruby/internal/intern/file.h +delete.o: $(hdrdir)/ruby/internal/intern/gc.h +delete.o: $(hdrdir)/ruby/internal/intern/hash.h +delete.o: $(hdrdir)/ruby/internal/intern/io.h +delete.o: $(hdrdir)/ruby/internal/intern/load.h +delete.o: $(hdrdir)/ruby/internal/intern/marshal.h +delete.o: $(hdrdir)/ruby/internal/intern/numeric.h +delete.o: $(hdrdir)/ruby/internal/intern/object.h +delete.o: $(hdrdir)/ruby/internal/intern/parse.h +delete.o: $(hdrdir)/ruby/internal/intern/proc.h +delete.o: $(hdrdir)/ruby/internal/intern/process.h +delete.o: $(hdrdir)/ruby/internal/intern/random.h +delete.o: $(hdrdir)/ruby/internal/intern/range.h +delete.o: $(hdrdir)/ruby/internal/intern/rational.h +delete.o: $(hdrdir)/ruby/internal/intern/re.h +delete.o: $(hdrdir)/ruby/internal/intern/ruby.h +delete.o: $(hdrdir)/ruby/internal/intern/select.h +delete.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +delete.o: $(hdrdir)/ruby/internal/intern/signal.h +delete.o: $(hdrdir)/ruby/internal/intern/sprintf.h +delete.o: $(hdrdir)/ruby/internal/intern/string.h +delete.o: $(hdrdir)/ruby/internal/intern/struct.h +delete.o: $(hdrdir)/ruby/internal/intern/thread.h +delete.o: $(hdrdir)/ruby/internal/intern/time.h +delete.o: $(hdrdir)/ruby/internal/intern/variable.h +delete.o: $(hdrdir)/ruby/internal/intern/vm.h +delete.o: $(hdrdir)/ruby/internal/interpreter.h +delete.o: $(hdrdir)/ruby/internal/iterator.h +delete.o: $(hdrdir)/ruby/internal/memory.h +delete.o: $(hdrdir)/ruby/internal/method.h +delete.o: $(hdrdir)/ruby/internal/module.h +delete.o: $(hdrdir)/ruby/internal/newobj.h +delete.o: $(hdrdir)/ruby/internal/rgengc.h +delete.o: $(hdrdir)/ruby/internal/scan_args.h +delete.o: $(hdrdir)/ruby/internal/special_consts.h +delete.o: $(hdrdir)/ruby/internal/static_assert.h +delete.o: $(hdrdir)/ruby/internal/stdalign.h +delete.o: $(hdrdir)/ruby/internal/stdbool.h +delete.o: $(hdrdir)/ruby/internal/symbol.h +delete.o: $(hdrdir)/ruby/internal/value.h +delete.o: $(hdrdir)/ruby/internal/value_type.h +delete.o: $(hdrdir)/ruby/internal/variable.h +delete.o: $(hdrdir)/ruby/internal/warning_push.h +delete.o: $(hdrdir)/ruby/internal/xmalloc.h delete.o: $(hdrdir)/ruby/missing.h delete.o: $(hdrdir)/ruby/ruby.h delete.o: $(hdrdir)/ruby/st.h @@ -16,8 +163,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/integer/core_ext.c b/ruby/ext/-test-/integer/core_ext.c index 510ba4a1e..e364aa4b4 100644 --- a/ruby/ext/-test-/integer/core_ext.c +++ b/ruby/ext/-test-/integer/core_ext.c @@ -1,19 +1,19 @@ -#include "internal.h" +#include "internal/numeric.h" static VALUE -int_bignum_p(VALUE self) +int_bignum_p(VALUE klass, VALUE self) { return RB_TYPE_P(self, T_BIGNUM) ? Qtrue : Qfalse; } static VALUE -int_fixnum_p(VALUE self) +int_fixnum_p(VALUE klass, VALUE self) { return FIXNUM_P(self) ? Qtrue : Qfalse; } static VALUE -rb_int_to_bignum(VALUE x) +rb_int_to_bignum(VALUE klass, VALUE x) { if (FIXNUM_P(x)) x = rb_int2big(FIX2LONG(x)); @@ -21,7 +21,7 @@ rb_int_to_bignum(VALUE x) } static VALUE -positive_pow(VALUE x, VALUE y) +positive_pow(VALUE klass, VALUE x, VALUE y) { return rb_int_positive_pow(NUM2LONG(x), NUM2ULONG(y)); } @@ -29,8 +29,8 @@ positive_pow(VALUE x, VALUE y) void Init_core_ext(VALUE klass) { - rb_define_method(rb_cInteger, "bignum?", int_bignum_p, 0); - rb_define_method(rb_cInteger, "fixnum?", int_fixnum_p, 0); - rb_define_method(rb_cInteger, "to_bignum", rb_int_to_bignum, 0); - rb_define_method(rb_cInteger, "positive_pow", positive_pow, 1); + rb_define_singleton_method(klass, "bignum?", int_bignum_p, 1); + rb_define_singleton_method(klass, "fixnum?", int_fixnum_p, 1); + rb_define_singleton_method(klass, "to_bignum", rb_int_to_bignum, 1); + rb_define_singleton_method(klass, "positive_pow", positive_pow, 2); } diff --git a/ruby/ext/-test-/integer/depend b/ruby/ext/-test-/integer/depend index 5c9d58138..522f6283a 100644 --- a/ruby/ext/-test-/integer/depend +++ b/ruby/ext/-test-/integer/depend @@ -1,24 +1,325 @@ # AUTOGENERATED DEPENDENCIES START core_ext.o: $(RUBY_EXTCONF_H) core_ext.o: $(arch_hdrdir)/ruby/config.h -core_ext.o: $(hdrdir)/ruby.h core_ext.o: $(hdrdir)/ruby/assert.h core_ext.o: $(hdrdir)/ruby/backward.h +core_ext.o: $(hdrdir)/ruby/backward/2/assume.h +core_ext.o: $(hdrdir)/ruby/backward/2/attributes.h +core_ext.o: $(hdrdir)/ruby/backward/2/bool.h +core_ext.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +core_ext.o: $(hdrdir)/ruby/backward/2/inttypes.h +core_ext.o: $(hdrdir)/ruby/backward/2/limits.h +core_ext.o: $(hdrdir)/ruby/backward/2/long_long.h +core_ext.o: $(hdrdir)/ruby/backward/2/stdalign.h +core_ext.o: $(hdrdir)/ruby/backward/2/stdarg.h core_ext.o: $(hdrdir)/ruby/defines.h core_ext.o: $(hdrdir)/ruby/intern.h +core_ext.o: $(hdrdir)/ruby/internal/anyargs.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/char.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/double.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/int.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/long.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/short.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +core_ext.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +core_ext.o: $(hdrdir)/ruby/internal/assume.h +core_ext.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +core_ext.o: $(hdrdir)/ruby/internal/attr/artificial.h +core_ext.o: $(hdrdir)/ruby/internal/attr/cold.h +core_ext.o: $(hdrdir)/ruby/internal/attr/const.h +core_ext.o: $(hdrdir)/ruby/internal/attr/constexpr.h +core_ext.o: $(hdrdir)/ruby/internal/attr/deprecated.h +core_ext.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +core_ext.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +core_ext.o: $(hdrdir)/ruby/internal/attr/error.h +core_ext.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +core_ext.o: $(hdrdir)/ruby/internal/attr/forceinline.h +core_ext.o: $(hdrdir)/ruby/internal/attr/format.h +core_ext.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +core_ext.o: $(hdrdir)/ruby/internal/attr/noalias.h +core_ext.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +core_ext.o: $(hdrdir)/ruby/internal/attr/noexcept.h +core_ext.o: $(hdrdir)/ruby/internal/attr/noinline.h +core_ext.o: $(hdrdir)/ruby/internal/attr/nonnull.h +core_ext.o: $(hdrdir)/ruby/internal/attr/noreturn.h +core_ext.o: $(hdrdir)/ruby/internal/attr/pure.h +core_ext.o: $(hdrdir)/ruby/internal/attr/restrict.h +core_ext.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +core_ext.o: $(hdrdir)/ruby/internal/attr/warning.h +core_ext.o: $(hdrdir)/ruby/internal/attr/weakref.h +core_ext.o: $(hdrdir)/ruby/internal/cast.h +core_ext.o: $(hdrdir)/ruby/internal/compiler_is.h +core_ext.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +core_ext.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +core_ext.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +core_ext.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +core_ext.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +core_ext.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +core_ext.o: $(hdrdir)/ruby/internal/compiler_since.h +core_ext.o: $(hdrdir)/ruby/internal/config.h +core_ext.o: $(hdrdir)/ruby/internal/constant_p.h +core_ext.o: $(hdrdir)/ruby/internal/core.h +core_ext.o: $(hdrdir)/ruby/internal/core/rarray.h +core_ext.o: $(hdrdir)/ruby/internal/core/rbasic.h +core_ext.o: $(hdrdir)/ruby/internal/core/rbignum.h +core_ext.o: $(hdrdir)/ruby/internal/core/rclass.h +core_ext.o: $(hdrdir)/ruby/internal/core/rdata.h +core_ext.o: $(hdrdir)/ruby/internal/core/rfile.h +core_ext.o: $(hdrdir)/ruby/internal/core/rhash.h +core_ext.o: $(hdrdir)/ruby/internal/core/robject.h +core_ext.o: $(hdrdir)/ruby/internal/core/rregexp.h +core_ext.o: $(hdrdir)/ruby/internal/core/rstring.h +core_ext.o: $(hdrdir)/ruby/internal/core/rstruct.h +core_ext.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +core_ext.o: $(hdrdir)/ruby/internal/ctype.h +core_ext.o: $(hdrdir)/ruby/internal/dllexport.h +core_ext.o: $(hdrdir)/ruby/internal/dosish.h +core_ext.o: $(hdrdir)/ruby/internal/error.h +core_ext.o: $(hdrdir)/ruby/internal/eval.h +core_ext.o: $(hdrdir)/ruby/internal/event.h +core_ext.o: $(hdrdir)/ruby/internal/fl_type.h +core_ext.o: $(hdrdir)/ruby/internal/gc.h +core_ext.o: $(hdrdir)/ruby/internal/glob.h +core_ext.o: $(hdrdir)/ruby/internal/globals.h +core_ext.o: $(hdrdir)/ruby/internal/has/attribute.h +core_ext.o: $(hdrdir)/ruby/internal/has/builtin.h +core_ext.o: $(hdrdir)/ruby/internal/has/c_attribute.h +core_ext.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +core_ext.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +core_ext.o: $(hdrdir)/ruby/internal/has/extension.h +core_ext.o: $(hdrdir)/ruby/internal/has/feature.h +core_ext.o: $(hdrdir)/ruby/internal/has/warning.h +core_ext.o: $(hdrdir)/ruby/internal/intern/array.h +core_ext.o: $(hdrdir)/ruby/internal/intern/bignum.h +core_ext.o: $(hdrdir)/ruby/internal/intern/class.h +core_ext.o: $(hdrdir)/ruby/internal/intern/compar.h +core_ext.o: $(hdrdir)/ruby/internal/intern/complex.h +core_ext.o: $(hdrdir)/ruby/internal/intern/cont.h +core_ext.o: $(hdrdir)/ruby/internal/intern/dir.h +core_ext.o: $(hdrdir)/ruby/internal/intern/enum.h +core_ext.o: $(hdrdir)/ruby/internal/intern/enumerator.h +core_ext.o: $(hdrdir)/ruby/internal/intern/error.h +core_ext.o: $(hdrdir)/ruby/internal/intern/eval.h +core_ext.o: $(hdrdir)/ruby/internal/intern/file.h +core_ext.o: $(hdrdir)/ruby/internal/intern/gc.h +core_ext.o: $(hdrdir)/ruby/internal/intern/hash.h +core_ext.o: $(hdrdir)/ruby/internal/intern/io.h +core_ext.o: $(hdrdir)/ruby/internal/intern/load.h +core_ext.o: $(hdrdir)/ruby/internal/intern/marshal.h +core_ext.o: $(hdrdir)/ruby/internal/intern/numeric.h +core_ext.o: $(hdrdir)/ruby/internal/intern/object.h +core_ext.o: $(hdrdir)/ruby/internal/intern/parse.h +core_ext.o: $(hdrdir)/ruby/internal/intern/proc.h +core_ext.o: $(hdrdir)/ruby/internal/intern/process.h +core_ext.o: $(hdrdir)/ruby/internal/intern/random.h +core_ext.o: $(hdrdir)/ruby/internal/intern/range.h +core_ext.o: $(hdrdir)/ruby/internal/intern/rational.h +core_ext.o: $(hdrdir)/ruby/internal/intern/re.h +core_ext.o: $(hdrdir)/ruby/internal/intern/ruby.h +core_ext.o: $(hdrdir)/ruby/internal/intern/select.h +core_ext.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +core_ext.o: $(hdrdir)/ruby/internal/intern/signal.h +core_ext.o: $(hdrdir)/ruby/internal/intern/sprintf.h +core_ext.o: $(hdrdir)/ruby/internal/intern/string.h +core_ext.o: $(hdrdir)/ruby/internal/intern/struct.h +core_ext.o: $(hdrdir)/ruby/internal/intern/thread.h +core_ext.o: $(hdrdir)/ruby/internal/intern/time.h +core_ext.o: $(hdrdir)/ruby/internal/intern/variable.h +core_ext.o: $(hdrdir)/ruby/internal/intern/vm.h +core_ext.o: $(hdrdir)/ruby/internal/interpreter.h +core_ext.o: $(hdrdir)/ruby/internal/iterator.h +core_ext.o: $(hdrdir)/ruby/internal/memory.h +core_ext.o: $(hdrdir)/ruby/internal/method.h +core_ext.o: $(hdrdir)/ruby/internal/module.h +core_ext.o: $(hdrdir)/ruby/internal/newobj.h +core_ext.o: $(hdrdir)/ruby/internal/rgengc.h +core_ext.o: $(hdrdir)/ruby/internal/scan_args.h +core_ext.o: $(hdrdir)/ruby/internal/special_consts.h +core_ext.o: $(hdrdir)/ruby/internal/static_assert.h +core_ext.o: $(hdrdir)/ruby/internal/stdalign.h +core_ext.o: $(hdrdir)/ruby/internal/stdbool.h +core_ext.o: $(hdrdir)/ruby/internal/symbol.h +core_ext.o: $(hdrdir)/ruby/internal/value.h +core_ext.o: $(hdrdir)/ruby/internal/value_type.h +core_ext.o: $(hdrdir)/ruby/internal/variable.h +core_ext.o: $(hdrdir)/ruby/internal/warning_push.h +core_ext.o: $(hdrdir)/ruby/internal/xmalloc.h core_ext.o: $(hdrdir)/ruby/missing.h core_ext.o: $(hdrdir)/ruby/ruby.h core_ext.o: $(hdrdir)/ruby/st.h core_ext.o: $(hdrdir)/ruby/subst.h -core_ext.o: $(top_srcdir)/internal.h +core_ext.o: $(top_srcdir)/internal/bignum.h +core_ext.o: $(top_srcdir)/internal/bits.h +core_ext.o: $(top_srcdir)/internal/compilers.h +core_ext.o: $(top_srcdir)/internal/fixnum.h +core_ext.o: $(top_srcdir)/internal/numeric.h +core_ext.o: $(top_srcdir)/internal/serial.h +core_ext.o: $(top_srcdir)/internal/static_assert.h +core_ext.o: $(top_srcdir)/internal/vm.h core_ext.o: core_ext.c init.o: $(RUBY_EXTCONF_H) init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h @@ -29,8 +330,155 @@ my_integer.o: $(arch_hdrdir)/ruby/config.h my_integer.o: $(hdrdir)/ruby.h my_integer.o: $(hdrdir)/ruby/assert.h my_integer.o: $(hdrdir)/ruby/backward.h +my_integer.o: $(hdrdir)/ruby/backward/2/assume.h +my_integer.o: $(hdrdir)/ruby/backward/2/attributes.h +my_integer.o: $(hdrdir)/ruby/backward/2/bool.h +my_integer.o: $(hdrdir)/ruby/backward/2/inttypes.h +my_integer.o: $(hdrdir)/ruby/backward/2/limits.h +my_integer.o: $(hdrdir)/ruby/backward/2/long_long.h +my_integer.o: $(hdrdir)/ruby/backward/2/stdalign.h +my_integer.o: $(hdrdir)/ruby/backward/2/stdarg.h my_integer.o: $(hdrdir)/ruby/defines.h my_integer.o: $(hdrdir)/ruby/intern.h +my_integer.o: $(hdrdir)/ruby/internal/anyargs.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/char.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/double.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/int.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/long.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/short.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +my_integer.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +my_integer.o: $(hdrdir)/ruby/internal/assume.h +my_integer.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +my_integer.o: $(hdrdir)/ruby/internal/attr/artificial.h +my_integer.o: $(hdrdir)/ruby/internal/attr/cold.h +my_integer.o: $(hdrdir)/ruby/internal/attr/const.h +my_integer.o: $(hdrdir)/ruby/internal/attr/constexpr.h +my_integer.o: $(hdrdir)/ruby/internal/attr/deprecated.h +my_integer.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +my_integer.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +my_integer.o: $(hdrdir)/ruby/internal/attr/error.h +my_integer.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +my_integer.o: $(hdrdir)/ruby/internal/attr/forceinline.h +my_integer.o: $(hdrdir)/ruby/internal/attr/format.h +my_integer.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +my_integer.o: $(hdrdir)/ruby/internal/attr/noalias.h +my_integer.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +my_integer.o: $(hdrdir)/ruby/internal/attr/noexcept.h +my_integer.o: $(hdrdir)/ruby/internal/attr/noinline.h +my_integer.o: $(hdrdir)/ruby/internal/attr/nonnull.h +my_integer.o: $(hdrdir)/ruby/internal/attr/noreturn.h +my_integer.o: $(hdrdir)/ruby/internal/attr/pure.h +my_integer.o: $(hdrdir)/ruby/internal/attr/restrict.h +my_integer.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +my_integer.o: $(hdrdir)/ruby/internal/attr/warning.h +my_integer.o: $(hdrdir)/ruby/internal/attr/weakref.h +my_integer.o: $(hdrdir)/ruby/internal/cast.h +my_integer.o: $(hdrdir)/ruby/internal/compiler_is.h +my_integer.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +my_integer.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +my_integer.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +my_integer.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +my_integer.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +my_integer.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +my_integer.o: $(hdrdir)/ruby/internal/compiler_since.h +my_integer.o: $(hdrdir)/ruby/internal/config.h +my_integer.o: $(hdrdir)/ruby/internal/constant_p.h +my_integer.o: $(hdrdir)/ruby/internal/core.h +my_integer.o: $(hdrdir)/ruby/internal/core/rarray.h +my_integer.o: $(hdrdir)/ruby/internal/core/rbasic.h +my_integer.o: $(hdrdir)/ruby/internal/core/rbignum.h +my_integer.o: $(hdrdir)/ruby/internal/core/rclass.h +my_integer.o: $(hdrdir)/ruby/internal/core/rdata.h +my_integer.o: $(hdrdir)/ruby/internal/core/rfile.h +my_integer.o: $(hdrdir)/ruby/internal/core/rhash.h +my_integer.o: $(hdrdir)/ruby/internal/core/robject.h +my_integer.o: $(hdrdir)/ruby/internal/core/rregexp.h +my_integer.o: $(hdrdir)/ruby/internal/core/rstring.h +my_integer.o: $(hdrdir)/ruby/internal/core/rstruct.h +my_integer.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +my_integer.o: $(hdrdir)/ruby/internal/ctype.h +my_integer.o: $(hdrdir)/ruby/internal/dllexport.h +my_integer.o: $(hdrdir)/ruby/internal/dosish.h +my_integer.o: $(hdrdir)/ruby/internal/error.h +my_integer.o: $(hdrdir)/ruby/internal/eval.h +my_integer.o: $(hdrdir)/ruby/internal/event.h +my_integer.o: $(hdrdir)/ruby/internal/fl_type.h +my_integer.o: $(hdrdir)/ruby/internal/gc.h +my_integer.o: $(hdrdir)/ruby/internal/glob.h +my_integer.o: $(hdrdir)/ruby/internal/globals.h +my_integer.o: $(hdrdir)/ruby/internal/has/attribute.h +my_integer.o: $(hdrdir)/ruby/internal/has/builtin.h +my_integer.o: $(hdrdir)/ruby/internal/has/c_attribute.h +my_integer.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +my_integer.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +my_integer.o: $(hdrdir)/ruby/internal/has/extension.h +my_integer.o: $(hdrdir)/ruby/internal/has/feature.h +my_integer.o: $(hdrdir)/ruby/internal/has/warning.h +my_integer.o: $(hdrdir)/ruby/internal/intern/array.h +my_integer.o: $(hdrdir)/ruby/internal/intern/bignum.h +my_integer.o: $(hdrdir)/ruby/internal/intern/class.h +my_integer.o: $(hdrdir)/ruby/internal/intern/compar.h +my_integer.o: $(hdrdir)/ruby/internal/intern/complex.h +my_integer.o: $(hdrdir)/ruby/internal/intern/cont.h +my_integer.o: $(hdrdir)/ruby/internal/intern/dir.h +my_integer.o: $(hdrdir)/ruby/internal/intern/enum.h +my_integer.o: $(hdrdir)/ruby/internal/intern/enumerator.h +my_integer.o: $(hdrdir)/ruby/internal/intern/error.h +my_integer.o: $(hdrdir)/ruby/internal/intern/eval.h +my_integer.o: $(hdrdir)/ruby/internal/intern/file.h +my_integer.o: $(hdrdir)/ruby/internal/intern/gc.h +my_integer.o: $(hdrdir)/ruby/internal/intern/hash.h +my_integer.o: $(hdrdir)/ruby/internal/intern/io.h +my_integer.o: $(hdrdir)/ruby/internal/intern/load.h +my_integer.o: $(hdrdir)/ruby/internal/intern/marshal.h +my_integer.o: $(hdrdir)/ruby/internal/intern/numeric.h +my_integer.o: $(hdrdir)/ruby/internal/intern/object.h +my_integer.o: $(hdrdir)/ruby/internal/intern/parse.h +my_integer.o: $(hdrdir)/ruby/internal/intern/proc.h +my_integer.o: $(hdrdir)/ruby/internal/intern/process.h +my_integer.o: $(hdrdir)/ruby/internal/intern/random.h +my_integer.o: $(hdrdir)/ruby/internal/intern/range.h +my_integer.o: $(hdrdir)/ruby/internal/intern/rational.h +my_integer.o: $(hdrdir)/ruby/internal/intern/re.h +my_integer.o: $(hdrdir)/ruby/internal/intern/ruby.h +my_integer.o: $(hdrdir)/ruby/internal/intern/select.h +my_integer.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +my_integer.o: $(hdrdir)/ruby/internal/intern/signal.h +my_integer.o: $(hdrdir)/ruby/internal/intern/sprintf.h +my_integer.o: $(hdrdir)/ruby/internal/intern/string.h +my_integer.o: $(hdrdir)/ruby/internal/intern/struct.h +my_integer.o: $(hdrdir)/ruby/internal/intern/thread.h +my_integer.o: $(hdrdir)/ruby/internal/intern/time.h +my_integer.o: $(hdrdir)/ruby/internal/intern/variable.h +my_integer.o: $(hdrdir)/ruby/internal/intern/vm.h +my_integer.o: $(hdrdir)/ruby/internal/interpreter.h +my_integer.o: $(hdrdir)/ruby/internal/iterator.h +my_integer.o: $(hdrdir)/ruby/internal/memory.h +my_integer.o: $(hdrdir)/ruby/internal/method.h +my_integer.o: $(hdrdir)/ruby/internal/module.h +my_integer.o: $(hdrdir)/ruby/internal/newobj.h +my_integer.o: $(hdrdir)/ruby/internal/rgengc.h +my_integer.o: $(hdrdir)/ruby/internal/scan_args.h +my_integer.o: $(hdrdir)/ruby/internal/special_consts.h +my_integer.o: $(hdrdir)/ruby/internal/static_assert.h +my_integer.o: $(hdrdir)/ruby/internal/stdalign.h +my_integer.o: $(hdrdir)/ruby/internal/stdbool.h +my_integer.o: $(hdrdir)/ruby/internal/symbol.h +my_integer.o: $(hdrdir)/ruby/internal/value.h +my_integer.o: $(hdrdir)/ruby/internal/value_type.h +my_integer.o: $(hdrdir)/ruby/internal/variable.h +my_integer.o: $(hdrdir)/ruby/internal/warning_push.h +my_integer.o: $(hdrdir)/ruby/internal/xmalloc.h my_integer.o: $(hdrdir)/ruby/missing.h my_integer.o: $(hdrdir)/ruby/ruby.h my_integer.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/iseq_load/depend b/ruby/ext/-test-/iseq_load/depend index ac549546e..cffd63138 100644 --- a/ruby/ext/-test-/iseq_load/depend +++ b/ruby/ext/-test-/iseq_load/depend @@ -4,8 +4,155 @@ iseq_load.o: $(arch_hdrdir)/ruby/config.h iseq_load.o: $(hdrdir)/ruby.h iseq_load.o: $(hdrdir)/ruby/assert.h iseq_load.o: $(hdrdir)/ruby/backward.h +iseq_load.o: $(hdrdir)/ruby/backward/2/assume.h +iseq_load.o: $(hdrdir)/ruby/backward/2/attributes.h +iseq_load.o: $(hdrdir)/ruby/backward/2/bool.h +iseq_load.o: $(hdrdir)/ruby/backward/2/inttypes.h +iseq_load.o: $(hdrdir)/ruby/backward/2/limits.h +iseq_load.o: $(hdrdir)/ruby/backward/2/long_long.h +iseq_load.o: $(hdrdir)/ruby/backward/2/stdalign.h +iseq_load.o: $(hdrdir)/ruby/backward/2/stdarg.h iseq_load.o: $(hdrdir)/ruby/defines.h iseq_load.o: $(hdrdir)/ruby/intern.h +iseq_load.o: $(hdrdir)/ruby/internal/anyargs.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/char.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/double.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/int.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/long.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/short.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +iseq_load.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +iseq_load.o: $(hdrdir)/ruby/internal/assume.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/artificial.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/cold.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/const.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/constexpr.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/deprecated.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/error.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/forceinline.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/format.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/noalias.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/noexcept.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/noinline.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/nonnull.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/noreturn.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/pure.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/restrict.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/warning.h +iseq_load.o: $(hdrdir)/ruby/internal/attr/weakref.h +iseq_load.o: $(hdrdir)/ruby/internal/cast.h +iseq_load.o: $(hdrdir)/ruby/internal/compiler_is.h +iseq_load.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +iseq_load.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +iseq_load.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +iseq_load.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +iseq_load.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +iseq_load.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +iseq_load.o: $(hdrdir)/ruby/internal/compiler_since.h +iseq_load.o: $(hdrdir)/ruby/internal/config.h +iseq_load.o: $(hdrdir)/ruby/internal/constant_p.h +iseq_load.o: $(hdrdir)/ruby/internal/core.h +iseq_load.o: $(hdrdir)/ruby/internal/core/rarray.h +iseq_load.o: $(hdrdir)/ruby/internal/core/rbasic.h +iseq_load.o: $(hdrdir)/ruby/internal/core/rbignum.h +iseq_load.o: $(hdrdir)/ruby/internal/core/rclass.h +iseq_load.o: $(hdrdir)/ruby/internal/core/rdata.h +iseq_load.o: $(hdrdir)/ruby/internal/core/rfile.h +iseq_load.o: $(hdrdir)/ruby/internal/core/rhash.h +iseq_load.o: $(hdrdir)/ruby/internal/core/robject.h +iseq_load.o: $(hdrdir)/ruby/internal/core/rregexp.h +iseq_load.o: $(hdrdir)/ruby/internal/core/rstring.h +iseq_load.o: $(hdrdir)/ruby/internal/core/rstruct.h +iseq_load.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +iseq_load.o: $(hdrdir)/ruby/internal/ctype.h +iseq_load.o: $(hdrdir)/ruby/internal/dllexport.h +iseq_load.o: $(hdrdir)/ruby/internal/dosish.h +iseq_load.o: $(hdrdir)/ruby/internal/error.h +iseq_load.o: $(hdrdir)/ruby/internal/eval.h +iseq_load.o: $(hdrdir)/ruby/internal/event.h +iseq_load.o: $(hdrdir)/ruby/internal/fl_type.h +iseq_load.o: $(hdrdir)/ruby/internal/gc.h +iseq_load.o: $(hdrdir)/ruby/internal/glob.h +iseq_load.o: $(hdrdir)/ruby/internal/globals.h +iseq_load.o: $(hdrdir)/ruby/internal/has/attribute.h +iseq_load.o: $(hdrdir)/ruby/internal/has/builtin.h +iseq_load.o: $(hdrdir)/ruby/internal/has/c_attribute.h +iseq_load.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +iseq_load.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +iseq_load.o: $(hdrdir)/ruby/internal/has/extension.h +iseq_load.o: $(hdrdir)/ruby/internal/has/feature.h +iseq_load.o: $(hdrdir)/ruby/internal/has/warning.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/array.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/bignum.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/class.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/compar.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/complex.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/cont.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/dir.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/enum.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/enumerator.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/error.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/eval.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/file.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/gc.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/hash.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/io.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/load.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/marshal.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/numeric.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/object.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/parse.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/proc.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/process.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/random.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/range.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/rational.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/re.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/ruby.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/select.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/signal.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/sprintf.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/string.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/struct.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/thread.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/time.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/variable.h +iseq_load.o: $(hdrdir)/ruby/internal/intern/vm.h +iseq_load.o: $(hdrdir)/ruby/internal/interpreter.h +iseq_load.o: $(hdrdir)/ruby/internal/iterator.h +iseq_load.o: $(hdrdir)/ruby/internal/memory.h +iseq_load.o: $(hdrdir)/ruby/internal/method.h +iseq_load.o: $(hdrdir)/ruby/internal/module.h +iseq_load.o: $(hdrdir)/ruby/internal/newobj.h +iseq_load.o: $(hdrdir)/ruby/internal/rgengc.h +iseq_load.o: $(hdrdir)/ruby/internal/scan_args.h +iseq_load.o: $(hdrdir)/ruby/internal/special_consts.h +iseq_load.o: $(hdrdir)/ruby/internal/static_assert.h +iseq_load.o: $(hdrdir)/ruby/internal/stdalign.h +iseq_load.o: $(hdrdir)/ruby/internal/stdbool.h +iseq_load.o: $(hdrdir)/ruby/internal/symbol.h +iseq_load.o: $(hdrdir)/ruby/internal/value.h +iseq_load.o: $(hdrdir)/ruby/internal/value_type.h +iseq_load.o: $(hdrdir)/ruby/internal/variable.h +iseq_load.o: $(hdrdir)/ruby/internal/warning_push.h +iseq_load.o: $(hdrdir)/ruby/internal/xmalloc.h iseq_load.o: $(hdrdir)/ruby/missing.h iseq_load.o: $(hdrdir)/ruby/ruby.h iseq_load.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/iter/depend b/ruby/ext/-test-/iter/depend index 5e754950c..5bda724d2 100644 --- a/ruby/ext/-test-/iter/depend +++ b/ruby/ext/-test-/iter/depend @@ -4,8 +4,155 @@ break.o: $(arch_hdrdir)/ruby/config.h break.o: $(hdrdir)/ruby.h break.o: $(hdrdir)/ruby/assert.h break.o: $(hdrdir)/ruby/backward.h +break.o: $(hdrdir)/ruby/backward/2/assume.h +break.o: $(hdrdir)/ruby/backward/2/attributes.h +break.o: $(hdrdir)/ruby/backward/2/bool.h +break.o: $(hdrdir)/ruby/backward/2/inttypes.h +break.o: $(hdrdir)/ruby/backward/2/limits.h +break.o: $(hdrdir)/ruby/backward/2/long_long.h +break.o: $(hdrdir)/ruby/backward/2/stdalign.h +break.o: $(hdrdir)/ruby/backward/2/stdarg.h break.o: $(hdrdir)/ruby/defines.h break.o: $(hdrdir)/ruby/intern.h +break.o: $(hdrdir)/ruby/internal/anyargs.h +break.o: $(hdrdir)/ruby/internal/arithmetic.h +break.o: $(hdrdir)/ruby/internal/arithmetic/char.h +break.o: $(hdrdir)/ruby/internal/arithmetic/double.h +break.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +break.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +break.o: $(hdrdir)/ruby/internal/arithmetic/int.h +break.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +break.o: $(hdrdir)/ruby/internal/arithmetic/long.h +break.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +break.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +break.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +break.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +break.o: $(hdrdir)/ruby/internal/arithmetic/short.h +break.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +break.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +break.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +break.o: $(hdrdir)/ruby/internal/assume.h +break.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +break.o: $(hdrdir)/ruby/internal/attr/artificial.h +break.o: $(hdrdir)/ruby/internal/attr/cold.h +break.o: $(hdrdir)/ruby/internal/attr/const.h +break.o: $(hdrdir)/ruby/internal/attr/constexpr.h +break.o: $(hdrdir)/ruby/internal/attr/deprecated.h +break.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +break.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +break.o: $(hdrdir)/ruby/internal/attr/error.h +break.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +break.o: $(hdrdir)/ruby/internal/attr/forceinline.h +break.o: $(hdrdir)/ruby/internal/attr/format.h +break.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +break.o: $(hdrdir)/ruby/internal/attr/noalias.h +break.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +break.o: $(hdrdir)/ruby/internal/attr/noexcept.h +break.o: $(hdrdir)/ruby/internal/attr/noinline.h +break.o: $(hdrdir)/ruby/internal/attr/nonnull.h +break.o: $(hdrdir)/ruby/internal/attr/noreturn.h +break.o: $(hdrdir)/ruby/internal/attr/pure.h +break.o: $(hdrdir)/ruby/internal/attr/restrict.h +break.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +break.o: $(hdrdir)/ruby/internal/attr/warning.h +break.o: $(hdrdir)/ruby/internal/attr/weakref.h +break.o: $(hdrdir)/ruby/internal/cast.h +break.o: $(hdrdir)/ruby/internal/compiler_is.h +break.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +break.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +break.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +break.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +break.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +break.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +break.o: $(hdrdir)/ruby/internal/compiler_since.h +break.o: $(hdrdir)/ruby/internal/config.h +break.o: $(hdrdir)/ruby/internal/constant_p.h +break.o: $(hdrdir)/ruby/internal/core.h +break.o: $(hdrdir)/ruby/internal/core/rarray.h +break.o: $(hdrdir)/ruby/internal/core/rbasic.h +break.o: $(hdrdir)/ruby/internal/core/rbignum.h +break.o: $(hdrdir)/ruby/internal/core/rclass.h +break.o: $(hdrdir)/ruby/internal/core/rdata.h +break.o: $(hdrdir)/ruby/internal/core/rfile.h +break.o: $(hdrdir)/ruby/internal/core/rhash.h +break.o: $(hdrdir)/ruby/internal/core/robject.h +break.o: $(hdrdir)/ruby/internal/core/rregexp.h +break.o: $(hdrdir)/ruby/internal/core/rstring.h +break.o: $(hdrdir)/ruby/internal/core/rstruct.h +break.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +break.o: $(hdrdir)/ruby/internal/ctype.h +break.o: $(hdrdir)/ruby/internal/dllexport.h +break.o: $(hdrdir)/ruby/internal/dosish.h +break.o: $(hdrdir)/ruby/internal/error.h +break.o: $(hdrdir)/ruby/internal/eval.h +break.o: $(hdrdir)/ruby/internal/event.h +break.o: $(hdrdir)/ruby/internal/fl_type.h +break.o: $(hdrdir)/ruby/internal/gc.h +break.o: $(hdrdir)/ruby/internal/glob.h +break.o: $(hdrdir)/ruby/internal/globals.h +break.o: $(hdrdir)/ruby/internal/has/attribute.h +break.o: $(hdrdir)/ruby/internal/has/builtin.h +break.o: $(hdrdir)/ruby/internal/has/c_attribute.h +break.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +break.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +break.o: $(hdrdir)/ruby/internal/has/extension.h +break.o: $(hdrdir)/ruby/internal/has/feature.h +break.o: $(hdrdir)/ruby/internal/has/warning.h +break.o: $(hdrdir)/ruby/internal/intern/array.h +break.o: $(hdrdir)/ruby/internal/intern/bignum.h +break.o: $(hdrdir)/ruby/internal/intern/class.h +break.o: $(hdrdir)/ruby/internal/intern/compar.h +break.o: $(hdrdir)/ruby/internal/intern/complex.h +break.o: $(hdrdir)/ruby/internal/intern/cont.h +break.o: $(hdrdir)/ruby/internal/intern/dir.h +break.o: $(hdrdir)/ruby/internal/intern/enum.h +break.o: $(hdrdir)/ruby/internal/intern/enumerator.h +break.o: $(hdrdir)/ruby/internal/intern/error.h +break.o: $(hdrdir)/ruby/internal/intern/eval.h +break.o: $(hdrdir)/ruby/internal/intern/file.h +break.o: $(hdrdir)/ruby/internal/intern/gc.h +break.o: $(hdrdir)/ruby/internal/intern/hash.h +break.o: $(hdrdir)/ruby/internal/intern/io.h +break.o: $(hdrdir)/ruby/internal/intern/load.h +break.o: $(hdrdir)/ruby/internal/intern/marshal.h +break.o: $(hdrdir)/ruby/internal/intern/numeric.h +break.o: $(hdrdir)/ruby/internal/intern/object.h +break.o: $(hdrdir)/ruby/internal/intern/parse.h +break.o: $(hdrdir)/ruby/internal/intern/proc.h +break.o: $(hdrdir)/ruby/internal/intern/process.h +break.o: $(hdrdir)/ruby/internal/intern/random.h +break.o: $(hdrdir)/ruby/internal/intern/range.h +break.o: $(hdrdir)/ruby/internal/intern/rational.h +break.o: $(hdrdir)/ruby/internal/intern/re.h +break.o: $(hdrdir)/ruby/internal/intern/ruby.h +break.o: $(hdrdir)/ruby/internal/intern/select.h +break.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +break.o: $(hdrdir)/ruby/internal/intern/signal.h +break.o: $(hdrdir)/ruby/internal/intern/sprintf.h +break.o: $(hdrdir)/ruby/internal/intern/string.h +break.o: $(hdrdir)/ruby/internal/intern/struct.h +break.o: $(hdrdir)/ruby/internal/intern/thread.h +break.o: $(hdrdir)/ruby/internal/intern/time.h +break.o: $(hdrdir)/ruby/internal/intern/variable.h +break.o: $(hdrdir)/ruby/internal/intern/vm.h +break.o: $(hdrdir)/ruby/internal/interpreter.h +break.o: $(hdrdir)/ruby/internal/iterator.h +break.o: $(hdrdir)/ruby/internal/memory.h +break.o: $(hdrdir)/ruby/internal/method.h +break.o: $(hdrdir)/ruby/internal/module.h +break.o: $(hdrdir)/ruby/internal/newobj.h +break.o: $(hdrdir)/ruby/internal/rgengc.h +break.o: $(hdrdir)/ruby/internal/scan_args.h +break.o: $(hdrdir)/ruby/internal/special_consts.h +break.o: $(hdrdir)/ruby/internal/static_assert.h +break.o: $(hdrdir)/ruby/internal/stdalign.h +break.o: $(hdrdir)/ruby/internal/stdbool.h +break.o: $(hdrdir)/ruby/internal/symbol.h +break.o: $(hdrdir)/ruby/internal/value.h +break.o: $(hdrdir)/ruby/internal/value_type.h +break.o: $(hdrdir)/ruby/internal/variable.h +break.o: $(hdrdir)/ruby/internal/warning_push.h +break.o: $(hdrdir)/ruby/internal/xmalloc.h break.o: $(hdrdir)/ruby/missing.h break.o: $(hdrdir)/ruby/ruby.h break.o: $(hdrdir)/ruby/st.h @@ -16,8 +163,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h @@ -28,8 +322,155 @@ yield.o: $(arch_hdrdir)/ruby/config.h yield.o: $(hdrdir)/ruby.h yield.o: $(hdrdir)/ruby/assert.h yield.o: $(hdrdir)/ruby/backward.h +yield.o: $(hdrdir)/ruby/backward/2/assume.h +yield.o: $(hdrdir)/ruby/backward/2/attributes.h +yield.o: $(hdrdir)/ruby/backward/2/bool.h +yield.o: $(hdrdir)/ruby/backward/2/inttypes.h +yield.o: $(hdrdir)/ruby/backward/2/limits.h +yield.o: $(hdrdir)/ruby/backward/2/long_long.h +yield.o: $(hdrdir)/ruby/backward/2/stdalign.h +yield.o: $(hdrdir)/ruby/backward/2/stdarg.h yield.o: $(hdrdir)/ruby/defines.h yield.o: $(hdrdir)/ruby/intern.h +yield.o: $(hdrdir)/ruby/internal/anyargs.h +yield.o: $(hdrdir)/ruby/internal/arithmetic.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/char.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/double.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/int.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/long.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/short.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +yield.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +yield.o: $(hdrdir)/ruby/internal/assume.h +yield.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +yield.o: $(hdrdir)/ruby/internal/attr/artificial.h +yield.o: $(hdrdir)/ruby/internal/attr/cold.h +yield.o: $(hdrdir)/ruby/internal/attr/const.h +yield.o: $(hdrdir)/ruby/internal/attr/constexpr.h +yield.o: $(hdrdir)/ruby/internal/attr/deprecated.h +yield.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +yield.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +yield.o: $(hdrdir)/ruby/internal/attr/error.h +yield.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +yield.o: $(hdrdir)/ruby/internal/attr/forceinline.h +yield.o: $(hdrdir)/ruby/internal/attr/format.h +yield.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +yield.o: $(hdrdir)/ruby/internal/attr/noalias.h +yield.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +yield.o: $(hdrdir)/ruby/internal/attr/noexcept.h +yield.o: $(hdrdir)/ruby/internal/attr/noinline.h +yield.o: $(hdrdir)/ruby/internal/attr/nonnull.h +yield.o: $(hdrdir)/ruby/internal/attr/noreturn.h +yield.o: $(hdrdir)/ruby/internal/attr/pure.h +yield.o: $(hdrdir)/ruby/internal/attr/restrict.h +yield.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +yield.o: $(hdrdir)/ruby/internal/attr/warning.h +yield.o: $(hdrdir)/ruby/internal/attr/weakref.h +yield.o: $(hdrdir)/ruby/internal/cast.h +yield.o: $(hdrdir)/ruby/internal/compiler_is.h +yield.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +yield.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +yield.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +yield.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +yield.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +yield.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +yield.o: $(hdrdir)/ruby/internal/compiler_since.h +yield.o: $(hdrdir)/ruby/internal/config.h +yield.o: $(hdrdir)/ruby/internal/constant_p.h +yield.o: $(hdrdir)/ruby/internal/core.h +yield.o: $(hdrdir)/ruby/internal/core/rarray.h +yield.o: $(hdrdir)/ruby/internal/core/rbasic.h +yield.o: $(hdrdir)/ruby/internal/core/rbignum.h +yield.o: $(hdrdir)/ruby/internal/core/rclass.h +yield.o: $(hdrdir)/ruby/internal/core/rdata.h +yield.o: $(hdrdir)/ruby/internal/core/rfile.h +yield.o: $(hdrdir)/ruby/internal/core/rhash.h +yield.o: $(hdrdir)/ruby/internal/core/robject.h +yield.o: $(hdrdir)/ruby/internal/core/rregexp.h +yield.o: $(hdrdir)/ruby/internal/core/rstring.h +yield.o: $(hdrdir)/ruby/internal/core/rstruct.h +yield.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +yield.o: $(hdrdir)/ruby/internal/ctype.h +yield.o: $(hdrdir)/ruby/internal/dllexport.h +yield.o: $(hdrdir)/ruby/internal/dosish.h +yield.o: $(hdrdir)/ruby/internal/error.h +yield.o: $(hdrdir)/ruby/internal/eval.h +yield.o: $(hdrdir)/ruby/internal/event.h +yield.o: $(hdrdir)/ruby/internal/fl_type.h +yield.o: $(hdrdir)/ruby/internal/gc.h +yield.o: $(hdrdir)/ruby/internal/glob.h +yield.o: $(hdrdir)/ruby/internal/globals.h +yield.o: $(hdrdir)/ruby/internal/has/attribute.h +yield.o: $(hdrdir)/ruby/internal/has/builtin.h +yield.o: $(hdrdir)/ruby/internal/has/c_attribute.h +yield.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +yield.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +yield.o: $(hdrdir)/ruby/internal/has/extension.h +yield.o: $(hdrdir)/ruby/internal/has/feature.h +yield.o: $(hdrdir)/ruby/internal/has/warning.h +yield.o: $(hdrdir)/ruby/internal/intern/array.h +yield.o: $(hdrdir)/ruby/internal/intern/bignum.h +yield.o: $(hdrdir)/ruby/internal/intern/class.h +yield.o: $(hdrdir)/ruby/internal/intern/compar.h +yield.o: $(hdrdir)/ruby/internal/intern/complex.h +yield.o: $(hdrdir)/ruby/internal/intern/cont.h +yield.o: $(hdrdir)/ruby/internal/intern/dir.h +yield.o: $(hdrdir)/ruby/internal/intern/enum.h +yield.o: $(hdrdir)/ruby/internal/intern/enumerator.h +yield.o: $(hdrdir)/ruby/internal/intern/error.h +yield.o: $(hdrdir)/ruby/internal/intern/eval.h +yield.o: $(hdrdir)/ruby/internal/intern/file.h +yield.o: $(hdrdir)/ruby/internal/intern/gc.h +yield.o: $(hdrdir)/ruby/internal/intern/hash.h +yield.o: $(hdrdir)/ruby/internal/intern/io.h +yield.o: $(hdrdir)/ruby/internal/intern/load.h +yield.o: $(hdrdir)/ruby/internal/intern/marshal.h +yield.o: $(hdrdir)/ruby/internal/intern/numeric.h +yield.o: $(hdrdir)/ruby/internal/intern/object.h +yield.o: $(hdrdir)/ruby/internal/intern/parse.h +yield.o: $(hdrdir)/ruby/internal/intern/proc.h +yield.o: $(hdrdir)/ruby/internal/intern/process.h +yield.o: $(hdrdir)/ruby/internal/intern/random.h +yield.o: $(hdrdir)/ruby/internal/intern/range.h +yield.o: $(hdrdir)/ruby/internal/intern/rational.h +yield.o: $(hdrdir)/ruby/internal/intern/re.h +yield.o: $(hdrdir)/ruby/internal/intern/ruby.h +yield.o: $(hdrdir)/ruby/internal/intern/select.h +yield.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +yield.o: $(hdrdir)/ruby/internal/intern/signal.h +yield.o: $(hdrdir)/ruby/internal/intern/sprintf.h +yield.o: $(hdrdir)/ruby/internal/intern/string.h +yield.o: $(hdrdir)/ruby/internal/intern/struct.h +yield.o: $(hdrdir)/ruby/internal/intern/thread.h +yield.o: $(hdrdir)/ruby/internal/intern/time.h +yield.o: $(hdrdir)/ruby/internal/intern/variable.h +yield.o: $(hdrdir)/ruby/internal/intern/vm.h +yield.o: $(hdrdir)/ruby/internal/interpreter.h +yield.o: $(hdrdir)/ruby/internal/iterator.h +yield.o: $(hdrdir)/ruby/internal/memory.h +yield.o: $(hdrdir)/ruby/internal/method.h +yield.o: $(hdrdir)/ruby/internal/module.h +yield.o: $(hdrdir)/ruby/internal/newobj.h +yield.o: $(hdrdir)/ruby/internal/rgengc.h +yield.o: $(hdrdir)/ruby/internal/scan_args.h +yield.o: $(hdrdir)/ruby/internal/special_consts.h +yield.o: $(hdrdir)/ruby/internal/static_assert.h +yield.o: $(hdrdir)/ruby/internal/stdalign.h +yield.o: $(hdrdir)/ruby/internal/stdbool.h +yield.o: $(hdrdir)/ruby/internal/symbol.h +yield.o: $(hdrdir)/ruby/internal/value.h +yield.o: $(hdrdir)/ruby/internal/value_type.h +yield.o: $(hdrdir)/ruby/internal/variable.h +yield.o: $(hdrdir)/ruby/internal/warning_push.h +yield.o: $(hdrdir)/ruby/internal/xmalloc.h yield.o: $(hdrdir)/ruby/missing.h yield.o: $(hdrdir)/ruby/ruby.h yield.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/load/protect/depend b/ruby/ext/-test-/load/protect/depend index b62393f1c..43413b4e9 100644 --- a/ruby/ext/-test-/load/protect/depend +++ b/ruby/ext/-test-/load/protect/depend @@ -4,8 +4,155 @@ protect.o: $(arch_hdrdir)/ruby/config.h protect.o: $(hdrdir)/ruby.h protect.o: $(hdrdir)/ruby/assert.h protect.o: $(hdrdir)/ruby/backward.h +protect.o: $(hdrdir)/ruby/backward/2/assume.h +protect.o: $(hdrdir)/ruby/backward/2/attributes.h +protect.o: $(hdrdir)/ruby/backward/2/bool.h +protect.o: $(hdrdir)/ruby/backward/2/inttypes.h +protect.o: $(hdrdir)/ruby/backward/2/limits.h +protect.o: $(hdrdir)/ruby/backward/2/long_long.h +protect.o: $(hdrdir)/ruby/backward/2/stdalign.h +protect.o: $(hdrdir)/ruby/backward/2/stdarg.h protect.o: $(hdrdir)/ruby/defines.h protect.o: $(hdrdir)/ruby/intern.h +protect.o: $(hdrdir)/ruby/internal/anyargs.h +protect.o: $(hdrdir)/ruby/internal/arithmetic.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/char.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/double.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/int.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/long.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/short.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +protect.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +protect.o: $(hdrdir)/ruby/internal/assume.h +protect.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +protect.o: $(hdrdir)/ruby/internal/attr/artificial.h +protect.o: $(hdrdir)/ruby/internal/attr/cold.h +protect.o: $(hdrdir)/ruby/internal/attr/const.h +protect.o: $(hdrdir)/ruby/internal/attr/constexpr.h +protect.o: $(hdrdir)/ruby/internal/attr/deprecated.h +protect.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +protect.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +protect.o: $(hdrdir)/ruby/internal/attr/error.h +protect.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +protect.o: $(hdrdir)/ruby/internal/attr/forceinline.h +protect.o: $(hdrdir)/ruby/internal/attr/format.h +protect.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +protect.o: $(hdrdir)/ruby/internal/attr/noalias.h +protect.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +protect.o: $(hdrdir)/ruby/internal/attr/noexcept.h +protect.o: $(hdrdir)/ruby/internal/attr/noinline.h +protect.o: $(hdrdir)/ruby/internal/attr/nonnull.h +protect.o: $(hdrdir)/ruby/internal/attr/noreturn.h +protect.o: $(hdrdir)/ruby/internal/attr/pure.h +protect.o: $(hdrdir)/ruby/internal/attr/restrict.h +protect.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +protect.o: $(hdrdir)/ruby/internal/attr/warning.h +protect.o: $(hdrdir)/ruby/internal/attr/weakref.h +protect.o: $(hdrdir)/ruby/internal/cast.h +protect.o: $(hdrdir)/ruby/internal/compiler_is.h +protect.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +protect.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +protect.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +protect.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +protect.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +protect.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +protect.o: $(hdrdir)/ruby/internal/compiler_since.h +protect.o: $(hdrdir)/ruby/internal/config.h +protect.o: $(hdrdir)/ruby/internal/constant_p.h +protect.o: $(hdrdir)/ruby/internal/core.h +protect.o: $(hdrdir)/ruby/internal/core/rarray.h +protect.o: $(hdrdir)/ruby/internal/core/rbasic.h +protect.o: $(hdrdir)/ruby/internal/core/rbignum.h +protect.o: $(hdrdir)/ruby/internal/core/rclass.h +protect.o: $(hdrdir)/ruby/internal/core/rdata.h +protect.o: $(hdrdir)/ruby/internal/core/rfile.h +protect.o: $(hdrdir)/ruby/internal/core/rhash.h +protect.o: $(hdrdir)/ruby/internal/core/robject.h +protect.o: $(hdrdir)/ruby/internal/core/rregexp.h +protect.o: $(hdrdir)/ruby/internal/core/rstring.h +protect.o: $(hdrdir)/ruby/internal/core/rstruct.h +protect.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +protect.o: $(hdrdir)/ruby/internal/ctype.h +protect.o: $(hdrdir)/ruby/internal/dllexport.h +protect.o: $(hdrdir)/ruby/internal/dosish.h +protect.o: $(hdrdir)/ruby/internal/error.h +protect.o: $(hdrdir)/ruby/internal/eval.h +protect.o: $(hdrdir)/ruby/internal/event.h +protect.o: $(hdrdir)/ruby/internal/fl_type.h +protect.o: $(hdrdir)/ruby/internal/gc.h +protect.o: $(hdrdir)/ruby/internal/glob.h +protect.o: $(hdrdir)/ruby/internal/globals.h +protect.o: $(hdrdir)/ruby/internal/has/attribute.h +protect.o: $(hdrdir)/ruby/internal/has/builtin.h +protect.o: $(hdrdir)/ruby/internal/has/c_attribute.h +protect.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +protect.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +protect.o: $(hdrdir)/ruby/internal/has/extension.h +protect.o: $(hdrdir)/ruby/internal/has/feature.h +protect.o: $(hdrdir)/ruby/internal/has/warning.h +protect.o: $(hdrdir)/ruby/internal/intern/array.h +protect.o: $(hdrdir)/ruby/internal/intern/bignum.h +protect.o: $(hdrdir)/ruby/internal/intern/class.h +protect.o: $(hdrdir)/ruby/internal/intern/compar.h +protect.o: $(hdrdir)/ruby/internal/intern/complex.h +protect.o: $(hdrdir)/ruby/internal/intern/cont.h +protect.o: $(hdrdir)/ruby/internal/intern/dir.h +protect.o: $(hdrdir)/ruby/internal/intern/enum.h +protect.o: $(hdrdir)/ruby/internal/intern/enumerator.h +protect.o: $(hdrdir)/ruby/internal/intern/error.h +protect.o: $(hdrdir)/ruby/internal/intern/eval.h +protect.o: $(hdrdir)/ruby/internal/intern/file.h +protect.o: $(hdrdir)/ruby/internal/intern/gc.h +protect.o: $(hdrdir)/ruby/internal/intern/hash.h +protect.o: $(hdrdir)/ruby/internal/intern/io.h +protect.o: $(hdrdir)/ruby/internal/intern/load.h +protect.o: $(hdrdir)/ruby/internal/intern/marshal.h +protect.o: $(hdrdir)/ruby/internal/intern/numeric.h +protect.o: $(hdrdir)/ruby/internal/intern/object.h +protect.o: $(hdrdir)/ruby/internal/intern/parse.h +protect.o: $(hdrdir)/ruby/internal/intern/proc.h +protect.o: $(hdrdir)/ruby/internal/intern/process.h +protect.o: $(hdrdir)/ruby/internal/intern/random.h +protect.o: $(hdrdir)/ruby/internal/intern/range.h +protect.o: $(hdrdir)/ruby/internal/intern/rational.h +protect.o: $(hdrdir)/ruby/internal/intern/re.h +protect.o: $(hdrdir)/ruby/internal/intern/ruby.h +protect.o: $(hdrdir)/ruby/internal/intern/select.h +protect.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +protect.o: $(hdrdir)/ruby/internal/intern/signal.h +protect.o: $(hdrdir)/ruby/internal/intern/sprintf.h +protect.o: $(hdrdir)/ruby/internal/intern/string.h +protect.o: $(hdrdir)/ruby/internal/intern/struct.h +protect.o: $(hdrdir)/ruby/internal/intern/thread.h +protect.o: $(hdrdir)/ruby/internal/intern/time.h +protect.o: $(hdrdir)/ruby/internal/intern/variable.h +protect.o: $(hdrdir)/ruby/internal/intern/vm.h +protect.o: $(hdrdir)/ruby/internal/interpreter.h +protect.o: $(hdrdir)/ruby/internal/iterator.h +protect.o: $(hdrdir)/ruby/internal/memory.h +protect.o: $(hdrdir)/ruby/internal/method.h +protect.o: $(hdrdir)/ruby/internal/module.h +protect.o: $(hdrdir)/ruby/internal/newobj.h +protect.o: $(hdrdir)/ruby/internal/rgengc.h +protect.o: $(hdrdir)/ruby/internal/scan_args.h +protect.o: $(hdrdir)/ruby/internal/special_consts.h +protect.o: $(hdrdir)/ruby/internal/static_assert.h +protect.o: $(hdrdir)/ruby/internal/stdalign.h +protect.o: $(hdrdir)/ruby/internal/stdbool.h +protect.o: $(hdrdir)/ruby/internal/symbol.h +protect.o: $(hdrdir)/ruby/internal/value.h +protect.o: $(hdrdir)/ruby/internal/value_type.h +protect.o: $(hdrdir)/ruby/internal/variable.h +protect.o: $(hdrdir)/ruby/internal/warning_push.h +protect.o: $(hdrdir)/ruby/internal/xmalloc.h protect.o: $(hdrdir)/ruby/missing.h protect.o: $(hdrdir)/ruby/ruby.h protect.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/marshal/compat/depend b/ruby/ext/-test-/marshal/compat/depend index f15950696..366fb8896 100644 --- a/ruby/ext/-test-/marshal/compat/depend +++ b/ruby/ext/-test-/marshal/compat/depend @@ -4,8 +4,155 @@ usrcompat.o: $(arch_hdrdir)/ruby/config.h usrcompat.o: $(hdrdir)/ruby.h usrcompat.o: $(hdrdir)/ruby/assert.h usrcompat.o: $(hdrdir)/ruby/backward.h +usrcompat.o: $(hdrdir)/ruby/backward/2/assume.h +usrcompat.o: $(hdrdir)/ruby/backward/2/attributes.h +usrcompat.o: $(hdrdir)/ruby/backward/2/bool.h +usrcompat.o: $(hdrdir)/ruby/backward/2/inttypes.h +usrcompat.o: $(hdrdir)/ruby/backward/2/limits.h +usrcompat.o: $(hdrdir)/ruby/backward/2/long_long.h +usrcompat.o: $(hdrdir)/ruby/backward/2/stdalign.h +usrcompat.o: $(hdrdir)/ruby/backward/2/stdarg.h usrcompat.o: $(hdrdir)/ruby/defines.h usrcompat.o: $(hdrdir)/ruby/intern.h +usrcompat.o: $(hdrdir)/ruby/internal/anyargs.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/char.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/double.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/int.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/long.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/short.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +usrcompat.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +usrcompat.o: $(hdrdir)/ruby/internal/assume.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/artificial.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/cold.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/const.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/constexpr.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/deprecated.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/error.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/forceinline.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/format.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/noalias.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/noexcept.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/noinline.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/nonnull.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/noreturn.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/pure.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/restrict.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/warning.h +usrcompat.o: $(hdrdir)/ruby/internal/attr/weakref.h +usrcompat.o: $(hdrdir)/ruby/internal/cast.h +usrcompat.o: $(hdrdir)/ruby/internal/compiler_is.h +usrcompat.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +usrcompat.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +usrcompat.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +usrcompat.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +usrcompat.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +usrcompat.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +usrcompat.o: $(hdrdir)/ruby/internal/compiler_since.h +usrcompat.o: $(hdrdir)/ruby/internal/config.h +usrcompat.o: $(hdrdir)/ruby/internal/constant_p.h +usrcompat.o: $(hdrdir)/ruby/internal/core.h +usrcompat.o: $(hdrdir)/ruby/internal/core/rarray.h +usrcompat.o: $(hdrdir)/ruby/internal/core/rbasic.h +usrcompat.o: $(hdrdir)/ruby/internal/core/rbignum.h +usrcompat.o: $(hdrdir)/ruby/internal/core/rclass.h +usrcompat.o: $(hdrdir)/ruby/internal/core/rdata.h +usrcompat.o: $(hdrdir)/ruby/internal/core/rfile.h +usrcompat.o: $(hdrdir)/ruby/internal/core/rhash.h +usrcompat.o: $(hdrdir)/ruby/internal/core/robject.h +usrcompat.o: $(hdrdir)/ruby/internal/core/rregexp.h +usrcompat.o: $(hdrdir)/ruby/internal/core/rstring.h +usrcompat.o: $(hdrdir)/ruby/internal/core/rstruct.h +usrcompat.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +usrcompat.o: $(hdrdir)/ruby/internal/ctype.h +usrcompat.o: $(hdrdir)/ruby/internal/dllexport.h +usrcompat.o: $(hdrdir)/ruby/internal/dosish.h +usrcompat.o: $(hdrdir)/ruby/internal/error.h +usrcompat.o: $(hdrdir)/ruby/internal/eval.h +usrcompat.o: $(hdrdir)/ruby/internal/event.h +usrcompat.o: $(hdrdir)/ruby/internal/fl_type.h +usrcompat.o: $(hdrdir)/ruby/internal/gc.h +usrcompat.o: $(hdrdir)/ruby/internal/glob.h +usrcompat.o: $(hdrdir)/ruby/internal/globals.h +usrcompat.o: $(hdrdir)/ruby/internal/has/attribute.h +usrcompat.o: $(hdrdir)/ruby/internal/has/builtin.h +usrcompat.o: $(hdrdir)/ruby/internal/has/c_attribute.h +usrcompat.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +usrcompat.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +usrcompat.o: $(hdrdir)/ruby/internal/has/extension.h +usrcompat.o: $(hdrdir)/ruby/internal/has/feature.h +usrcompat.o: $(hdrdir)/ruby/internal/has/warning.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/array.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/bignum.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/class.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/compar.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/complex.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/cont.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/dir.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/enum.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/enumerator.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/error.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/eval.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/file.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/gc.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/hash.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/io.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/load.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/marshal.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/numeric.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/object.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/parse.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/proc.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/process.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/random.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/range.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/rational.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/re.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/ruby.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/select.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/signal.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/sprintf.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/string.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/struct.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/thread.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/time.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/variable.h +usrcompat.o: $(hdrdir)/ruby/internal/intern/vm.h +usrcompat.o: $(hdrdir)/ruby/internal/interpreter.h +usrcompat.o: $(hdrdir)/ruby/internal/iterator.h +usrcompat.o: $(hdrdir)/ruby/internal/memory.h +usrcompat.o: $(hdrdir)/ruby/internal/method.h +usrcompat.o: $(hdrdir)/ruby/internal/module.h +usrcompat.o: $(hdrdir)/ruby/internal/newobj.h +usrcompat.o: $(hdrdir)/ruby/internal/rgengc.h +usrcompat.o: $(hdrdir)/ruby/internal/scan_args.h +usrcompat.o: $(hdrdir)/ruby/internal/special_consts.h +usrcompat.o: $(hdrdir)/ruby/internal/static_assert.h +usrcompat.o: $(hdrdir)/ruby/internal/stdalign.h +usrcompat.o: $(hdrdir)/ruby/internal/stdbool.h +usrcompat.o: $(hdrdir)/ruby/internal/symbol.h +usrcompat.o: $(hdrdir)/ruby/internal/value.h +usrcompat.o: $(hdrdir)/ruby/internal/value_type.h +usrcompat.o: $(hdrdir)/ruby/internal/variable.h +usrcompat.o: $(hdrdir)/ruby/internal/warning_push.h +usrcompat.o: $(hdrdir)/ruby/internal/xmalloc.h usrcompat.o: $(hdrdir)/ruby/missing.h usrcompat.o: $(hdrdir)/ruby/ruby.h usrcompat.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/marshal/internal_ivar/depend b/ruby/ext/-test-/marshal/internal_ivar/depend index f280347c0..b90f9b257 100644 --- a/ruby/ext/-test-/marshal/internal_ivar/depend +++ b/ruby/ext/-test-/marshal/internal_ivar/depend @@ -4,8 +4,155 @@ internal_ivar.o: $(arch_hdrdir)/ruby/config.h internal_ivar.o: $(hdrdir)/ruby.h internal_ivar.o: $(hdrdir)/ruby/assert.h internal_ivar.o: $(hdrdir)/ruby/backward.h +internal_ivar.o: $(hdrdir)/ruby/backward/2/assume.h +internal_ivar.o: $(hdrdir)/ruby/backward/2/attributes.h +internal_ivar.o: $(hdrdir)/ruby/backward/2/bool.h +internal_ivar.o: $(hdrdir)/ruby/backward/2/inttypes.h +internal_ivar.o: $(hdrdir)/ruby/backward/2/limits.h +internal_ivar.o: $(hdrdir)/ruby/backward/2/long_long.h +internal_ivar.o: $(hdrdir)/ruby/backward/2/stdalign.h +internal_ivar.o: $(hdrdir)/ruby/backward/2/stdarg.h internal_ivar.o: $(hdrdir)/ruby/defines.h internal_ivar.o: $(hdrdir)/ruby/intern.h +internal_ivar.o: $(hdrdir)/ruby/internal/anyargs.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/char.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/double.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/int.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/long.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/short.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +internal_ivar.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +internal_ivar.o: $(hdrdir)/ruby/internal/assume.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/artificial.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/cold.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/const.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/constexpr.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/deprecated.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/error.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/forceinline.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/format.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/noalias.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/noexcept.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/noinline.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/nonnull.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/noreturn.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/pure.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/restrict.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/warning.h +internal_ivar.o: $(hdrdir)/ruby/internal/attr/weakref.h +internal_ivar.o: $(hdrdir)/ruby/internal/cast.h +internal_ivar.o: $(hdrdir)/ruby/internal/compiler_is.h +internal_ivar.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +internal_ivar.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +internal_ivar.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +internal_ivar.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +internal_ivar.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +internal_ivar.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +internal_ivar.o: $(hdrdir)/ruby/internal/compiler_since.h +internal_ivar.o: $(hdrdir)/ruby/internal/config.h +internal_ivar.o: $(hdrdir)/ruby/internal/constant_p.h +internal_ivar.o: $(hdrdir)/ruby/internal/core.h +internal_ivar.o: $(hdrdir)/ruby/internal/core/rarray.h +internal_ivar.o: $(hdrdir)/ruby/internal/core/rbasic.h +internal_ivar.o: $(hdrdir)/ruby/internal/core/rbignum.h +internal_ivar.o: $(hdrdir)/ruby/internal/core/rclass.h +internal_ivar.o: $(hdrdir)/ruby/internal/core/rdata.h +internal_ivar.o: $(hdrdir)/ruby/internal/core/rfile.h +internal_ivar.o: $(hdrdir)/ruby/internal/core/rhash.h +internal_ivar.o: $(hdrdir)/ruby/internal/core/robject.h +internal_ivar.o: $(hdrdir)/ruby/internal/core/rregexp.h +internal_ivar.o: $(hdrdir)/ruby/internal/core/rstring.h +internal_ivar.o: $(hdrdir)/ruby/internal/core/rstruct.h +internal_ivar.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +internal_ivar.o: $(hdrdir)/ruby/internal/ctype.h +internal_ivar.o: $(hdrdir)/ruby/internal/dllexport.h +internal_ivar.o: $(hdrdir)/ruby/internal/dosish.h +internal_ivar.o: $(hdrdir)/ruby/internal/error.h +internal_ivar.o: $(hdrdir)/ruby/internal/eval.h +internal_ivar.o: $(hdrdir)/ruby/internal/event.h +internal_ivar.o: $(hdrdir)/ruby/internal/fl_type.h +internal_ivar.o: $(hdrdir)/ruby/internal/gc.h +internal_ivar.o: $(hdrdir)/ruby/internal/glob.h +internal_ivar.o: $(hdrdir)/ruby/internal/globals.h +internal_ivar.o: $(hdrdir)/ruby/internal/has/attribute.h +internal_ivar.o: $(hdrdir)/ruby/internal/has/builtin.h +internal_ivar.o: $(hdrdir)/ruby/internal/has/c_attribute.h +internal_ivar.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +internal_ivar.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +internal_ivar.o: $(hdrdir)/ruby/internal/has/extension.h +internal_ivar.o: $(hdrdir)/ruby/internal/has/feature.h +internal_ivar.o: $(hdrdir)/ruby/internal/has/warning.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/array.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/bignum.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/class.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/compar.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/complex.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/cont.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/dir.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/enum.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/enumerator.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/error.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/eval.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/file.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/gc.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/hash.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/io.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/load.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/marshal.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/numeric.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/object.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/parse.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/proc.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/process.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/random.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/range.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/rational.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/re.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/ruby.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/select.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/signal.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/sprintf.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/string.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/struct.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/thread.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/time.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/variable.h +internal_ivar.o: $(hdrdir)/ruby/internal/intern/vm.h +internal_ivar.o: $(hdrdir)/ruby/internal/interpreter.h +internal_ivar.o: $(hdrdir)/ruby/internal/iterator.h +internal_ivar.o: $(hdrdir)/ruby/internal/memory.h +internal_ivar.o: $(hdrdir)/ruby/internal/method.h +internal_ivar.o: $(hdrdir)/ruby/internal/module.h +internal_ivar.o: $(hdrdir)/ruby/internal/newobj.h +internal_ivar.o: $(hdrdir)/ruby/internal/rgengc.h +internal_ivar.o: $(hdrdir)/ruby/internal/scan_args.h +internal_ivar.o: $(hdrdir)/ruby/internal/special_consts.h +internal_ivar.o: $(hdrdir)/ruby/internal/static_assert.h +internal_ivar.o: $(hdrdir)/ruby/internal/stdalign.h +internal_ivar.o: $(hdrdir)/ruby/internal/stdbool.h +internal_ivar.o: $(hdrdir)/ruby/internal/symbol.h +internal_ivar.o: $(hdrdir)/ruby/internal/value.h +internal_ivar.o: $(hdrdir)/ruby/internal/value_type.h +internal_ivar.o: $(hdrdir)/ruby/internal/variable.h +internal_ivar.o: $(hdrdir)/ruby/internal/warning_push.h +internal_ivar.o: $(hdrdir)/ruby/internal/xmalloc.h internal_ivar.o: $(hdrdir)/ruby/missing.h internal_ivar.o: $(hdrdir)/ruby/ruby.h internal_ivar.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/marshal/usr/depend b/ruby/ext/-test-/marshal/usr/depend index 21c0c2d74..4a01f2d5e 100644 --- a/ruby/ext/-test-/marshal/usr/depend +++ b/ruby/ext/-test-/marshal/usr/depend @@ -4,8 +4,155 @@ usrmarshal.o: $(arch_hdrdir)/ruby/config.h usrmarshal.o: $(hdrdir)/ruby.h usrmarshal.o: $(hdrdir)/ruby/assert.h usrmarshal.o: $(hdrdir)/ruby/backward.h +usrmarshal.o: $(hdrdir)/ruby/backward/2/assume.h +usrmarshal.o: $(hdrdir)/ruby/backward/2/attributes.h +usrmarshal.o: $(hdrdir)/ruby/backward/2/bool.h +usrmarshal.o: $(hdrdir)/ruby/backward/2/inttypes.h +usrmarshal.o: $(hdrdir)/ruby/backward/2/limits.h +usrmarshal.o: $(hdrdir)/ruby/backward/2/long_long.h +usrmarshal.o: $(hdrdir)/ruby/backward/2/stdalign.h +usrmarshal.o: $(hdrdir)/ruby/backward/2/stdarg.h usrmarshal.o: $(hdrdir)/ruby/defines.h usrmarshal.o: $(hdrdir)/ruby/intern.h +usrmarshal.o: $(hdrdir)/ruby/internal/anyargs.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/char.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/double.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/int.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/long.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/short.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +usrmarshal.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +usrmarshal.o: $(hdrdir)/ruby/internal/assume.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/artificial.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/cold.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/const.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/constexpr.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/deprecated.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/error.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/forceinline.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/format.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/noalias.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/noexcept.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/noinline.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/nonnull.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/noreturn.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/pure.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/restrict.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/warning.h +usrmarshal.o: $(hdrdir)/ruby/internal/attr/weakref.h +usrmarshal.o: $(hdrdir)/ruby/internal/cast.h +usrmarshal.o: $(hdrdir)/ruby/internal/compiler_is.h +usrmarshal.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +usrmarshal.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +usrmarshal.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +usrmarshal.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +usrmarshal.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +usrmarshal.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +usrmarshal.o: $(hdrdir)/ruby/internal/compiler_since.h +usrmarshal.o: $(hdrdir)/ruby/internal/config.h +usrmarshal.o: $(hdrdir)/ruby/internal/constant_p.h +usrmarshal.o: $(hdrdir)/ruby/internal/core.h +usrmarshal.o: $(hdrdir)/ruby/internal/core/rarray.h +usrmarshal.o: $(hdrdir)/ruby/internal/core/rbasic.h +usrmarshal.o: $(hdrdir)/ruby/internal/core/rbignum.h +usrmarshal.o: $(hdrdir)/ruby/internal/core/rclass.h +usrmarshal.o: $(hdrdir)/ruby/internal/core/rdata.h +usrmarshal.o: $(hdrdir)/ruby/internal/core/rfile.h +usrmarshal.o: $(hdrdir)/ruby/internal/core/rhash.h +usrmarshal.o: $(hdrdir)/ruby/internal/core/robject.h +usrmarshal.o: $(hdrdir)/ruby/internal/core/rregexp.h +usrmarshal.o: $(hdrdir)/ruby/internal/core/rstring.h +usrmarshal.o: $(hdrdir)/ruby/internal/core/rstruct.h +usrmarshal.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +usrmarshal.o: $(hdrdir)/ruby/internal/ctype.h +usrmarshal.o: $(hdrdir)/ruby/internal/dllexport.h +usrmarshal.o: $(hdrdir)/ruby/internal/dosish.h +usrmarshal.o: $(hdrdir)/ruby/internal/error.h +usrmarshal.o: $(hdrdir)/ruby/internal/eval.h +usrmarshal.o: $(hdrdir)/ruby/internal/event.h +usrmarshal.o: $(hdrdir)/ruby/internal/fl_type.h +usrmarshal.o: $(hdrdir)/ruby/internal/gc.h +usrmarshal.o: $(hdrdir)/ruby/internal/glob.h +usrmarshal.o: $(hdrdir)/ruby/internal/globals.h +usrmarshal.o: $(hdrdir)/ruby/internal/has/attribute.h +usrmarshal.o: $(hdrdir)/ruby/internal/has/builtin.h +usrmarshal.o: $(hdrdir)/ruby/internal/has/c_attribute.h +usrmarshal.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +usrmarshal.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +usrmarshal.o: $(hdrdir)/ruby/internal/has/extension.h +usrmarshal.o: $(hdrdir)/ruby/internal/has/feature.h +usrmarshal.o: $(hdrdir)/ruby/internal/has/warning.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/array.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/bignum.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/class.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/compar.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/complex.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/cont.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/dir.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/enum.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/enumerator.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/error.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/eval.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/file.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/gc.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/hash.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/io.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/load.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/marshal.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/numeric.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/object.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/parse.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/proc.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/process.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/random.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/range.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/rational.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/re.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/ruby.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/select.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/signal.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/sprintf.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/string.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/struct.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/thread.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/time.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/variable.h +usrmarshal.o: $(hdrdir)/ruby/internal/intern/vm.h +usrmarshal.o: $(hdrdir)/ruby/internal/interpreter.h +usrmarshal.o: $(hdrdir)/ruby/internal/iterator.h +usrmarshal.o: $(hdrdir)/ruby/internal/memory.h +usrmarshal.o: $(hdrdir)/ruby/internal/method.h +usrmarshal.o: $(hdrdir)/ruby/internal/module.h +usrmarshal.o: $(hdrdir)/ruby/internal/newobj.h +usrmarshal.o: $(hdrdir)/ruby/internal/rgengc.h +usrmarshal.o: $(hdrdir)/ruby/internal/scan_args.h +usrmarshal.o: $(hdrdir)/ruby/internal/special_consts.h +usrmarshal.o: $(hdrdir)/ruby/internal/static_assert.h +usrmarshal.o: $(hdrdir)/ruby/internal/stdalign.h +usrmarshal.o: $(hdrdir)/ruby/internal/stdbool.h +usrmarshal.o: $(hdrdir)/ruby/internal/symbol.h +usrmarshal.o: $(hdrdir)/ruby/internal/value.h +usrmarshal.o: $(hdrdir)/ruby/internal/value_type.h +usrmarshal.o: $(hdrdir)/ruby/internal/variable.h +usrmarshal.o: $(hdrdir)/ruby/internal/warning_push.h +usrmarshal.o: $(hdrdir)/ruby/internal/xmalloc.h usrmarshal.o: $(hdrdir)/ruby/missing.h usrmarshal.o: $(hdrdir)/ruby/ruby.h usrmarshal.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/memory_status/depend b/ruby/ext/-test-/memory_status/depend index 657ef59c3..c9cc903ff 100644 --- a/ruby/ext/-test-/memory_status/depend +++ b/ruby/ext/-test-/memory_status/depend @@ -4,8 +4,155 @@ memory_status.o: $(arch_hdrdir)/ruby/config.h memory_status.o: $(hdrdir)/ruby.h memory_status.o: $(hdrdir)/ruby/assert.h memory_status.o: $(hdrdir)/ruby/backward.h +memory_status.o: $(hdrdir)/ruby/backward/2/assume.h +memory_status.o: $(hdrdir)/ruby/backward/2/attributes.h +memory_status.o: $(hdrdir)/ruby/backward/2/bool.h +memory_status.o: $(hdrdir)/ruby/backward/2/inttypes.h +memory_status.o: $(hdrdir)/ruby/backward/2/limits.h +memory_status.o: $(hdrdir)/ruby/backward/2/long_long.h +memory_status.o: $(hdrdir)/ruby/backward/2/stdalign.h +memory_status.o: $(hdrdir)/ruby/backward/2/stdarg.h memory_status.o: $(hdrdir)/ruby/defines.h memory_status.o: $(hdrdir)/ruby/intern.h +memory_status.o: $(hdrdir)/ruby/internal/anyargs.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/char.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/double.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/int.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/long.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/short.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +memory_status.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +memory_status.o: $(hdrdir)/ruby/internal/assume.h +memory_status.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +memory_status.o: $(hdrdir)/ruby/internal/attr/artificial.h +memory_status.o: $(hdrdir)/ruby/internal/attr/cold.h +memory_status.o: $(hdrdir)/ruby/internal/attr/const.h +memory_status.o: $(hdrdir)/ruby/internal/attr/constexpr.h +memory_status.o: $(hdrdir)/ruby/internal/attr/deprecated.h +memory_status.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +memory_status.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +memory_status.o: $(hdrdir)/ruby/internal/attr/error.h +memory_status.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +memory_status.o: $(hdrdir)/ruby/internal/attr/forceinline.h +memory_status.o: $(hdrdir)/ruby/internal/attr/format.h +memory_status.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +memory_status.o: $(hdrdir)/ruby/internal/attr/noalias.h +memory_status.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +memory_status.o: $(hdrdir)/ruby/internal/attr/noexcept.h +memory_status.o: $(hdrdir)/ruby/internal/attr/noinline.h +memory_status.o: $(hdrdir)/ruby/internal/attr/nonnull.h +memory_status.o: $(hdrdir)/ruby/internal/attr/noreturn.h +memory_status.o: $(hdrdir)/ruby/internal/attr/pure.h +memory_status.o: $(hdrdir)/ruby/internal/attr/restrict.h +memory_status.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +memory_status.o: $(hdrdir)/ruby/internal/attr/warning.h +memory_status.o: $(hdrdir)/ruby/internal/attr/weakref.h +memory_status.o: $(hdrdir)/ruby/internal/cast.h +memory_status.o: $(hdrdir)/ruby/internal/compiler_is.h +memory_status.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +memory_status.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +memory_status.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +memory_status.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +memory_status.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +memory_status.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +memory_status.o: $(hdrdir)/ruby/internal/compiler_since.h +memory_status.o: $(hdrdir)/ruby/internal/config.h +memory_status.o: $(hdrdir)/ruby/internal/constant_p.h +memory_status.o: $(hdrdir)/ruby/internal/core.h +memory_status.o: $(hdrdir)/ruby/internal/core/rarray.h +memory_status.o: $(hdrdir)/ruby/internal/core/rbasic.h +memory_status.o: $(hdrdir)/ruby/internal/core/rbignum.h +memory_status.o: $(hdrdir)/ruby/internal/core/rclass.h +memory_status.o: $(hdrdir)/ruby/internal/core/rdata.h +memory_status.o: $(hdrdir)/ruby/internal/core/rfile.h +memory_status.o: $(hdrdir)/ruby/internal/core/rhash.h +memory_status.o: $(hdrdir)/ruby/internal/core/robject.h +memory_status.o: $(hdrdir)/ruby/internal/core/rregexp.h +memory_status.o: $(hdrdir)/ruby/internal/core/rstring.h +memory_status.o: $(hdrdir)/ruby/internal/core/rstruct.h +memory_status.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +memory_status.o: $(hdrdir)/ruby/internal/ctype.h +memory_status.o: $(hdrdir)/ruby/internal/dllexport.h +memory_status.o: $(hdrdir)/ruby/internal/dosish.h +memory_status.o: $(hdrdir)/ruby/internal/error.h +memory_status.o: $(hdrdir)/ruby/internal/eval.h +memory_status.o: $(hdrdir)/ruby/internal/event.h +memory_status.o: $(hdrdir)/ruby/internal/fl_type.h +memory_status.o: $(hdrdir)/ruby/internal/gc.h +memory_status.o: $(hdrdir)/ruby/internal/glob.h +memory_status.o: $(hdrdir)/ruby/internal/globals.h +memory_status.o: $(hdrdir)/ruby/internal/has/attribute.h +memory_status.o: $(hdrdir)/ruby/internal/has/builtin.h +memory_status.o: $(hdrdir)/ruby/internal/has/c_attribute.h +memory_status.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +memory_status.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +memory_status.o: $(hdrdir)/ruby/internal/has/extension.h +memory_status.o: $(hdrdir)/ruby/internal/has/feature.h +memory_status.o: $(hdrdir)/ruby/internal/has/warning.h +memory_status.o: $(hdrdir)/ruby/internal/intern/array.h +memory_status.o: $(hdrdir)/ruby/internal/intern/bignum.h +memory_status.o: $(hdrdir)/ruby/internal/intern/class.h +memory_status.o: $(hdrdir)/ruby/internal/intern/compar.h +memory_status.o: $(hdrdir)/ruby/internal/intern/complex.h +memory_status.o: $(hdrdir)/ruby/internal/intern/cont.h +memory_status.o: $(hdrdir)/ruby/internal/intern/dir.h +memory_status.o: $(hdrdir)/ruby/internal/intern/enum.h +memory_status.o: $(hdrdir)/ruby/internal/intern/enumerator.h +memory_status.o: $(hdrdir)/ruby/internal/intern/error.h +memory_status.o: $(hdrdir)/ruby/internal/intern/eval.h +memory_status.o: $(hdrdir)/ruby/internal/intern/file.h +memory_status.o: $(hdrdir)/ruby/internal/intern/gc.h +memory_status.o: $(hdrdir)/ruby/internal/intern/hash.h +memory_status.o: $(hdrdir)/ruby/internal/intern/io.h +memory_status.o: $(hdrdir)/ruby/internal/intern/load.h +memory_status.o: $(hdrdir)/ruby/internal/intern/marshal.h +memory_status.o: $(hdrdir)/ruby/internal/intern/numeric.h +memory_status.o: $(hdrdir)/ruby/internal/intern/object.h +memory_status.o: $(hdrdir)/ruby/internal/intern/parse.h +memory_status.o: $(hdrdir)/ruby/internal/intern/proc.h +memory_status.o: $(hdrdir)/ruby/internal/intern/process.h +memory_status.o: $(hdrdir)/ruby/internal/intern/random.h +memory_status.o: $(hdrdir)/ruby/internal/intern/range.h +memory_status.o: $(hdrdir)/ruby/internal/intern/rational.h +memory_status.o: $(hdrdir)/ruby/internal/intern/re.h +memory_status.o: $(hdrdir)/ruby/internal/intern/ruby.h +memory_status.o: $(hdrdir)/ruby/internal/intern/select.h +memory_status.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +memory_status.o: $(hdrdir)/ruby/internal/intern/signal.h +memory_status.o: $(hdrdir)/ruby/internal/intern/sprintf.h +memory_status.o: $(hdrdir)/ruby/internal/intern/string.h +memory_status.o: $(hdrdir)/ruby/internal/intern/struct.h +memory_status.o: $(hdrdir)/ruby/internal/intern/thread.h +memory_status.o: $(hdrdir)/ruby/internal/intern/time.h +memory_status.o: $(hdrdir)/ruby/internal/intern/variable.h +memory_status.o: $(hdrdir)/ruby/internal/intern/vm.h +memory_status.o: $(hdrdir)/ruby/internal/interpreter.h +memory_status.o: $(hdrdir)/ruby/internal/iterator.h +memory_status.o: $(hdrdir)/ruby/internal/memory.h +memory_status.o: $(hdrdir)/ruby/internal/method.h +memory_status.o: $(hdrdir)/ruby/internal/module.h +memory_status.o: $(hdrdir)/ruby/internal/newobj.h +memory_status.o: $(hdrdir)/ruby/internal/rgengc.h +memory_status.o: $(hdrdir)/ruby/internal/scan_args.h +memory_status.o: $(hdrdir)/ruby/internal/special_consts.h +memory_status.o: $(hdrdir)/ruby/internal/static_assert.h +memory_status.o: $(hdrdir)/ruby/internal/stdalign.h +memory_status.o: $(hdrdir)/ruby/internal/stdbool.h +memory_status.o: $(hdrdir)/ruby/internal/symbol.h +memory_status.o: $(hdrdir)/ruby/internal/value.h +memory_status.o: $(hdrdir)/ruby/internal/value_type.h +memory_status.o: $(hdrdir)/ruby/internal/variable.h +memory_status.o: $(hdrdir)/ruby/internal/warning_push.h +memory_status.o: $(hdrdir)/ruby/internal/xmalloc.h memory_status.o: $(hdrdir)/ruby/missing.h memory_status.o: $(hdrdir)/ruby/ruby.h memory_status.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/memory_status/memory_status.c b/ruby/ext/-test-/memory_status/memory_status.c index 5775fa56f..afacbee78 100644 --- a/ruby/ext/-test-/memory_status/memory_status.c +++ b/ruby/ext/-test-/memory_status/memory_status.c @@ -10,11 +10,15 @@ static VALUE cMemoryStatus; +#undef HAVE_RSS +#undef HAVE_PEAK + static VALUE read_status(VALUE self) { VALUE size = INT2FIX(0); #if defined __APPLE__ +# define HAVE_RSS 1 VALUE rss; kern_return_t error; # if defined MACH_TASK_BASIC_INFO @@ -40,14 +44,20 @@ read_status(VALUE self) rss = ULL2NUM(taskinfo.resident_size); rb_struct_aset(self, INT2FIX(1), rss); #elif defined _WIN32 - VALUE peak; +# define HAVE_RSS 1 +# define HAVE_PEAK 1 + VALUE rss, peak; PROCESS_MEMORY_COUNTERS c; c.cb = sizeof(c); if (!GetProcessMemoryInfo(GetCurrentProcess(), &c, c.cb)) return Qnil; size = SIZET2NUM(c.PagefileUsage); + rss = SIZET2NUM(c.WorkingSetSize); peak = SIZET2NUM(c.PeakWorkingSetSize); - rb_struct_aset(self, INT2FIX(1), peak); + rb_struct_aset(self, INT2FIX(2), peak); +#endif +#ifdef HAVE_RSS + rb_struct_aset(self, INT2FIX(1), rss); #endif rb_struct_aset(self, INT2FIX(0), size); return self; @@ -59,9 +69,10 @@ Init_memory_status(void) VALUE mMemory = rb_define_module("Memory"); cMemoryStatus = rb_struct_define_under(mMemory, "Status", "size", -#if defined __APPLE__ +#ifdef HAVE_RSS "rss", -#elif defined _WIN32 +#endif +#ifdef HAVE_PEAK "peak", #endif (char *)NULL); diff --git a/ruby/ext/-test-/memory_view/depend b/ruby/ext/-test-/memory_view/depend new file mode 100644 index 000000000..c42e9f54a --- /dev/null +++ b/ruby/ext/-test-/memory_view/depend @@ -0,0 +1,162 @@ +# AUTOGENERATED DEPENDENCIES START +memory_view.o: $(RUBY_EXTCONF_H) +memory_view.o: $(arch_hdrdir)/ruby/config.h +memory_view.o: $(hdrdir)/ruby.h +memory_view.o: $(hdrdir)/ruby/assert.h +memory_view.o: $(hdrdir)/ruby/backward.h +memory_view.o: $(hdrdir)/ruby/backward/2/assume.h +memory_view.o: $(hdrdir)/ruby/backward/2/attributes.h +memory_view.o: $(hdrdir)/ruby/backward/2/bool.h +memory_view.o: $(hdrdir)/ruby/backward/2/inttypes.h +memory_view.o: $(hdrdir)/ruby/backward/2/limits.h +memory_view.o: $(hdrdir)/ruby/backward/2/long_long.h +memory_view.o: $(hdrdir)/ruby/backward/2/stdalign.h +memory_view.o: $(hdrdir)/ruby/backward/2/stdarg.h +memory_view.o: $(hdrdir)/ruby/defines.h +memory_view.o: $(hdrdir)/ruby/intern.h +memory_view.o: $(hdrdir)/ruby/internal/anyargs.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/char.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/double.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/int.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/long.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/short.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +memory_view.o: $(hdrdir)/ruby/internal/assume.h +memory_view.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +memory_view.o: $(hdrdir)/ruby/internal/attr/artificial.h +memory_view.o: $(hdrdir)/ruby/internal/attr/cold.h +memory_view.o: $(hdrdir)/ruby/internal/attr/const.h +memory_view.o: $(hdrdir)/ruby/internal/attr/constexpr.h +memory_view.o: $(hdrdir)/ruby/internal/attr/deprecated.h +memory_view.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +memory_view.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +memory_view.o: $(hdrdir)/ruby/internal/attr/error.h +memory_view.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +memory_view.o: $(hdrdir)/ruby/internal/attr/forceinline.h +memory_view.o: $(hdrdir)/ruby/internal/attr/format.h +memory_view.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +memory_view.o: $(hdrdir)/ruby/internal/attr/noalias.h +memory_view.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +memory_view.o: $(hdrdir)/ruby/internal/attr/noexcept.h +memory_view.o: $(hdrdir)/ruby/internal/attr/noinline.h +memory_view.o: $(hdrdir)/ruby/internal/attr/nonnull.h +memory_view.o: $(hdrdir)/ruby/internal/attr/noreturn.h +memory_view.o: $(hdrdir)/ruby/internal/attr/pure.h +memory_view.o: $(hdrdir)/ruby/internal/attr/restrict.h +memory_view.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +memory_view.o: $(hdrdir)/ruby/internal/attr/warning.h +memory_view.o: $(hdrdir)/ruby/internal/attr/weakref.h +memory_view.o: $(hdrdir)/ruby/internal/cast.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_since.h +memory_view.o: $(hdrdir)/ruby/internal/config.h +memory_view.o: $(hdrdir)/ruby/internal/constant_p.h +memory_view.o: $(hdrdir)/ruby/internal/core.h +memory_view.o: $(hdrdir)/ruby/internal/core/rarray.h +memory_view.o: $(hdrdir)/ruby/internal/core/rbasic.h +memory_view.o: $(hdrdir)/ruby/internal/core/rbignum.h +memory_view.o: $(hdrdir)/ruby/internal/core/rclass.h +memory_view.o: $(hdrdir)/ruby/internal/core/rdata.h +memory_view.o: $(hdrdir)/ruby/internal/core/rfile.h +memory_view.o: $(hdrdir)/ruby/internal/core/rhash.h +memory_view.o: $(hdrdir)/ruby/internal/core/robject.h +memory_view.o: $(hdrdir)/ruby/internal/core/rregexp.h +memory_view.o: $(hdrdir)/ruby/internal/core/rstring.h +memory_view.o: $(hdrdir)/ruby/internal/core/rstruct.h +memory_view.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +memory_view.o: $(hdrdir)/ruby/internal/ctype.h +memory_view.o: $(hdrdir)/ruby/internal/dllexport.h +memory_view.o: $(hdrdir)/ruby/internal/dosish.h +memory_view.o: $(hdrdir)/ruby/internal/error.h +memory_view.o: $(hdrdir)/ruby/internal/eval.h +memory_view.o: $(hdrdir)/ruby/internal/event.h +memory_view.o: $(hdrdir)/ruby/internal/fl_type.h +memory_view.o: $(hdrdir)/ruby/internal/gc.h +memory_view.o: $(hdrdir)/ruby/internal/glob.h +memory_view.o: $(hdrdir)/ruby/internal/globals.h +memory_view.o: $(hdrdir)/ruby/internal/has/attribute.h +memory_view.o: $(hdrdir)/ruby/internal/has/builtin.h +memory_view.o: $(hdrdir)/ruby/internal/has/c_attribute.h +memory_view.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +memory_view.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +memory_view.o: $(hdrdir)/ruby/internal/has/extension.h +memory_view.o: $(hdrdir)/ruby/internal/has/feature.h +memory_view.o: $(hdrdir)/ruby/internal/has/warning.h +memory_view.o: $(hdrdir)/ruby/internal/intern/array.h +memory_view.o: $(hdrdir)/ruby/internal/intern/bignum.h +memory_view.o: $(hdrdir)/ruby/internal/intern/class.h +memory_view.o: $(hdrdir)/ruby/internal/intern/compar.h +memory_view.o: $(hdrdir)/ruby/internal/intern/complex.h +memory_view.o: $(hdrdir)/ruby/internal/intern/cont.h +memory_view.o: $(hdrdir)/ruby/internal/intern/dir.h +memory_view.o: $(hdrdir)/ruby/internal/intern/enum.h +memory_view.o: $(hdrdir)/ruby/internal/intern/enumerator.h +memory_view.o: $(hdrdir)/ruby/internal/intern/error.h +memory_view.o: $(hdrdir)/ruby/internal/intern/eval.h +memory_view.o: $(hdrdir)/ruby/internal/intern/file.h +memory_view.o: $(hdrdir)/ruby/internal/intern/gc.h +memory_view.o: $(hdrdir)/ruby/internal/intern/hash.h +memory_view.o: $(hdrdir)/ruby/internal/intern/io.h +memory_view.o: $(hdrdir)/ruby/internal/intern/load.h +memory_view.o: $(hdrdir)/ruby/internal/intern/marshal.h +memory_view.o: $(hdrdir)/ruby/internal/intern/numeric.h +memory_view.o: $(hdrdir)/ruby/internal/intern/object.h +memory_view.o: $(hdrdir)/ruby/internal/intern/parse.h +memory_view.o: $(hdrdir)/ruby/internal/intern/proc.h +memory_view.o: $(hdrdir)/ruby/internal/intern/process.h +memory_view.o: $(hdrdir)/ruby/internal/intern/random.h +memory_view.o: $(hdrdir)/ruby/internal/intern/range.h +memory_view.o: $(hdrdir)/ruby/internal/intern/rational.h +memory_view.o: $(hdrdir)/ruby/internal/intern/re.h +memory_view.o: $(hdrdir)/ruby/internal/intern/ruby.h +memory_view.o: $(hdrdir)/ruby/internal/intern/select.h +memory_view.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +memory_view.o: $(hdrdir)/ruby/internal/intern/signal.h +memory_view.o: $(hdrdir)/ruby/internal/intern/sprintf.h +memory_view.o: $(hdrdir)/ruby/internal/intern/string.h +memory_view.o: $(hdrdir)/ruby/internal/intern/struct.h +memory_view.o: $(hdrdir)/ruby/internal/intern/thread.h +memory_view.o: $(hdrdir)/ruby/internal/intern/time.h +memory_view.o: $(hdrdir)/ruby/internal/intern/variable.h +memory_view.o: $(hdrdir)/ruby/internal/intern/vm.h +memory_view.o: $(hdrdir)/ruby/internal/interpreter.h +memory_view.o: $(hdrdir)/ruby/internal/iterator.h +memory_view.o: $(hdrdir)/ruby/internal/memory.h +memory_view.o: $(hdrdir)/ruby/internal/method.h +memory_view.o: $(hdrdir)/ruby/internal/module.h +memory_view.o: $(hdrdir)/ruby/internal/newobj.h +memory_view.o: $(hdrdir)/ruby/internal/rgengc.h +memory_view.o: $(hdrdir)/ruby/internal/scan_args.h +memory_view.o: $(hdrdir)/ruby/internal/special_consts.h +memory_view.o: $(hdrdir)/ruby/internal/static_assert.h +memory_view.o: $(hdrdir)/ruby/internal/stdalign.h +memory_view.o: $(hdrdir)/ruby/internal/stdbool.h +memory_view.o: $(hdrdir)/ruby/internal/symbol.h +memory_view.o: $(hdrdir)/ruby/internal/value.h +memory_view.o: $(hdrdir)/ruby/internal/value_type.h +memory_view.o: $(hdrdir)/ruby/internal/variable.h +memory_view.o: $(hdrdir)/ruby/internal/warning_push.h +memory_view.o: $(hdrdir)/ruby/internal/xmalloc.h +memory_view.o: $(hdrdir)/ruby/memory_view.h +memory_view.o: $(hdrdir)/ruby/missing.h +memory_view.o: $(hdrdir)/ruby/ruby.h +memory_view.o: $(hdrdir)/ruby/st.h +memory_view.o: $(hdrdir)/ruby/subst.h +memory_view.o: memory_view.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/-test-/memory_view/extconf.rb b/ruby/ext/-test-/memory_view/extconf.rb new file mode 100644 index 000000000..123b80b8d --- /dev/null +++ b/ruby/ext/-test-/memory_view/extconf.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: false +require "mkmf" + +require_relative "../auto_ext.rb" +auto_ext(inc: true) diff --git a/ruby/ext/-test-/memory_view/memory_view.c b/ruby/ext/-test-/memory_view/memory_view.c new file mode 100644 index 000000000..c1df0353c --- /dev/null +++ b/ruby/ext/-test-/memory_view/memory_view.c @@ -0,0 +1,450 @@ +#include "ruby.h" + +#ifdef HAVE_RUBY_MEMORY_VIEW_H +#include "ruby/memory_view.h" + +#define STRUCT_ALIGNOF(T, result) do { \ + (result) = RUBY_ALIGNOF(T); \ +} while(0) + +static ID id_str; +static VALUE sym_format; +static VALUE sym_native_size_p; +static VALUE sym_offset; +static VALUE sym_size; +static VALUE sym_repeat; +static VALUE sym_obj; +static VALUE sym_byte_size; +static VALUE sym_readonly; +static VALUE sym_format; +static VALUE sym_item_size; +static VALUE sym_ndim; +static VALUE sym_shape; +static VALUE sym_strides; +static VALUE sym_sub_offsets; +static VALUE sym_endianness; +static VALUE sym_little_endian; +static VALUE sym_big_endian; + +static bool +exportable_string_get_memory_view(VALUE obj, rb_memory_view_t *view, int flags) +{ + VALUE str = rb_ivar_get(obj, id_str); + rb_memory_view_init_as_byte_array(view, obj, RSTRING_PTR(str), RSTRING_LEN(str), true); + return true; +} + +static bool +exportable_string_memory_view_available_p(VALUE obj) +{ + VALUE str = rb_ivar_get(obj, id_str); + return !NIL_P(str); +} + +static const rb_memory_view_entry_t exportable_string_memory_view_entry = { + exportable_string_get_memory_view, + NULL, + exportable_string_memory_view_available_p +}; + +static VALUE +memory_view_available_p(VALUE mod, VALUE obj) +{ + return rb_memory_view_available_p(obj) ? Qtrue : Qfalse; +} + +static VALUE +memory_view_register(VALUE mod, VALUE obj) +{ + return rb_memory_view_register(obj, &exportable_string_memory_view_entry) ? Qtrue : Qfalse; +} + +static VALUE +memory_view_item_size_from_format(VALUE mod, VALUE format) +{ + const char *c_str = NULL; + if (!NIL_P(format)) + c_str = StringValueCStr(format); + const char *err = NULL; + ssize_t item_size = rb_memory_view_item_size_from_format(c_str, &err); + if (!err) + return rb_assoc_new(SSIZET2NUM(item_size), Qnil); + else + return rb_assoc_new(SSIZET2NUM(item_size), rb_str_new_cstr(err)); +} + +static VALUE +memory_view_parse_item_format(VALUE mod, VALUE format) +{ + const char *c_str = NULL; + if (!NIL_P(format)) + c_str = StringValueCStr(format); + const char *err = NULL; + + rb_memory_view_item_component_t *members; + size_t n_members; + ssize_t item_size = rb_memory_view_parse_item_format(c_str, &members, &n_members, &err); + + VALUE result = rb_ary_new_capa(3); + rb_ary_push(result, SSIZET2NUM(item_size)); + + if (!err) { + VALUE ary = rb_ary_new_capa((long)n_members); + size_t i; + for (i = 0; i < n_members; ++i) { + VALUE member = rb_hash_new(); + rb_hash_aset(member, sym_format, rb_str_new(&members[i].format, 1)); + rb_hash_aset(member, sym_native_size_p, members[i].native_size_p ? Qtrue : Qfalse); + rb_hash_aset(member, sym_endianness, members[i].little_endian_p ? sym_little_endian : sym_big_endian); + rb_hash_aset(member, sym_offset, SSIZET2NUM(members[i].offset)); + rb_hash_aset(member, sym_size, SSIZET2NUM(members[i].size)); + rb_hash_aset(member, sym_repeat, SSIZET2NUM(members[i].repeat)); + rb_ary_push(ary, member); + } + xfree(members); + rb_ary_push(result, ary); + rb_ary_push(result, Qnil); + } + else { + rb_ary_push(result, Qnil); // members + rb_ary_push(result, rb_str_new_cstr(err)); + } + + return result; +} + +static VALUE +memory_view_get_memory_view_info(VALUE mod, VALUE obj) +{ + rb_memory_view_t view; + + if (!rb_memory_view_get(obj, &view, 0)) { + return Qnil; + } + + VALUE hash = rb_hash_new(); + rb_hash_aset(hash, sym_obj, view.obj); + rb_hash_aset(hash, sym_byte_size, SSIZET2NUM(view.byte_size)); + rb_hash_aset(hash, sym_readonly, view.readonly ? Qtrue : Qfalse); + rb_hash_aset(hash, sym_format, view.format ? rb_str_new_cstr(view.format) : Qnil); + rb_hash_aset(hash, sym_item_size, SSIZET2NUM(view.item_size)); + rb_hash_aset(hash, sym_ndim, SSIZET2NUM(view.ndim)); + + if (view.shape) { + VALUE shape = rb_ary_new_capa(view.ndim); + rb_hash_aset(hash, sym_shape, shape); + } + else { + rb_hash_aset(hash, sym_shape, Qnil); + } + + if (view.strides) { + VALUE strides = rb_ary_new_capa(view.ndim); + rb_hash_aset(hash, sym_strides, strides); + } + else { + rb_hash_aset(hash, sym_strides, Qnil); + } + + if (view.sub_offsets) { + VALUE sub_offsets = rb_ary_new_capa(view.ndim); + rb_hash_aset(hash, sym_sub_offsets, sub_offsets); + } + else { + rb_hash_aset(hash, sym_sub_offsets, Qnil); + } + + rb_memory_view_release(&view); + + return hash; +} + +static VALUE +memory_view_fill_contiguous_strides(VALUE mod, VALUE ndim_v, VALUE item_size_v, VALUE shape_v, VALUE row_major_p) +{ + ssize_t i, ndim = NUM2SSIZET(ndim_v); + + Check_Type(shape_v, T_ARRAY); + ssize_t *shape = ALLOC_N(ssize_t, ndim); + for (i = 0; i < ndim; ++i) { + shape[i] = NUM2SSIZET(RARRAY_AREF(shape_v, i)); + } + + ssize_t *strides = ALLOC_N(ssize_t, ndim); + rb_memory_view_fill_contiguous_strides(ndim, NUM2SSIZET(item_size_v), shape, RTEST(row_major_p), strides); + + VALUE result = rb_ary_new_capa(ndim); + for (i = 0; i < ndim; ++i) { + rb_ary_push(result, SSIZET2NUM(strides[i])); + } + + xfree(strides); + xfree(shape); + + return result; +} + +static VALUE +memory_view_get_ref_count(VALUE obj) +{ + if (rb_memory_view_exported_object_registry == Qundef) { + return Qnil; + } + + st_table *table; + TypedData_Get_Struct(rb_memory_view_exported_object_registry, st_table, + &rb_memory_view_exported_object_registry_data_type, + table); + + st_data_t count; + if (st_lookup(table, (st_data_t)obj, &count)) { + return ULL2NUM(count); + } + + return Qnil; +} + +static VALUE +memory_view_ref_count_while_exporting_i(VALUE obj, long n) +{ + if (n == 0) { + return memory_view_get_ref_count(obj); + } + + rb_memory_view_t view; + if (!rb_memory_view_get(obj, &view, 0)) { + return Qnil; + } + + VALUE ref_count = memory_view_ref_count_while_exporting_i(obj, n-1); + rb_memory_view_release(&view); + + return ref_count; +} + +static VALUE +memory_view_ref_count_while_exporting(VALUE mod, VALUE obj, VALUE n) +{ + Check_Type(n, T_FIXNUM); + return memory_view_ref_count_while_exporting_i(obj, FIX2LONG(n)); +} + +static VALUE +memory_view_extract_item_members(VALUE mod, VALUE str, VALUE format) +{ + StringValue(str); + StringValue(format); + + rb_memory_view_item_component_t *members; + size_t n_members; + const char *err = NULL; + (void)rb_memory_view_parse_item_format(RSTRING_PTR(format), &members, &n_members, &err); + if (err != NULL) { + rb_raise(rb_eArgError, "Unable to parse item format"); + } + + VALUE item = rb_memory_view_extract_item_members(RSTRING_PTR(str), members, n_members); + xfree(members); + + return item; +} + +static VALUE +expstr_initialize(VALUE obj, VALUE s) +{ + if (!NIL_P(s)) { + Check_Type(s, T_STRING); + } + rb_ivar_set(obj, id_str, s); + return Qnil; +} + +static bool +mdview_get_memory_view(VALUE obj, rb_memory_view_t *view, int flags) +{ + VALUE buf_v = rb_ivar_get(obj, id_str); + VALUE format_v = rb_ivar_get(obj, SYM2ID(sym_format)); + VALUE shape_v = rb_ivar_get(obj, SYM2ID(sym_shape)); + VALUE strides_v = rb_ivar_get(obj, SYM2ID(sym_strides)); + + const char *err; + const ssize_t item_size = rb_memory_view_item_size_from_format(RSTRING_PTR(format_v), &err); + if (item_size < 0) { + return false; + } + + ssize_t ndim = RARRAY_LEN(shape_v); + if (!NIL_P(strides_v) && RARRAY_LEN(strides_v) != ndim) { + rb_raise(rb_eArgError, "strides has an invalid dimension"); + } + + ssize_t *shape = ALLOC_N(ssize_t, ndim); + ssize_t *strides = ALLOC_N(ssize_t, ndim); + ssize_t i; + if (!NIL_P(strides_v)) { + for (i = 0; i < ndim; ++i) { + shape[i] = NUM2SSIZET(RARRAY_AREF(shape_v, i)); + strides[i] = NUM2SSIZET(RARRAY_AREF(strides_v, i)); + } + } + else { + for (i = 0; i < ndim; ++i) { + shape[i] = NUM2SSIZET(RARRAY_AREF(shape_v, i)); + } + + i = ndim - 1; + strides[i] = item_size; + for (; i > 0; --i) { + strides[i-1] = strides[i] * shape[i]; + } + } + + rb_memory_view_init_as_byte_array(view, obj, RSTRING_PTR(buf_v), RSTRING_LEN(buf_v), true); + view->format = RSTRING_PTR(format_v); + view->item_size = item_size; + view->ndim = ndim; + view->shape = shape; + view->strides = strides; + view->sub_offsets = NULL; + + return true; +} + +static bool +mdview_release_memory_view(VALUE obj, rb_memory_view_t *view) +{ + if (view->shape) xfree((void *)view->shape); + if (view->strides) xfree((void *)view->strides); + + return true; +} + +static bool +mdview_memory_view_available_p(VALUE obj) +{ + return true; +} + +static const rb_memory_view_entry_t mdview_memory_view_entry = { + mdview_get_memory_view, + mdview_release_memory_view, + mdview_memory_view_available_p +}; + +static VALUE +mdview_initialize(VALUE obj, VALUE buf, VALUE format, VALUE shape, VALUE strides) +{ + Check_Type(buf, T_STRING); + StringValue(format); + Check_Type(shape, T_ARRAY); + if (!NIL_P(strides)) Check_Type(strides, T_ARRAY); + + rb_ivar_set(obj, id_str, buf); + rb_ivar_set(obj, SYM2ID(sym_format), format); + rb_ivar_set(obj, SYM2ID(sym_shape), shape); + rb_ivar_set(obj, SYM2ID(sym_strides), strides); + return Qnil; +} + +static VALUE +mdview_aref(VALUE obj, VALUE indices_v) +{ + Check_Type(indices_v, T_ARRAY); + + rb_memory_view_t view; + if (!rb_memory_view_get(obj, &view, 0)) { + rb_raise(rb_eRuntimeError, "rb_memory_view_get: failed"); + } + + if (RARRAY_LEN(indices_v) != view.ndim) { + rb_raise(rb_eKeyError, "Indices has an invalid dimension"); + } + + VALUE buf_indices; + ssize_t *indices = ALLOCV_N(ssize_t, buf_indices, view.ndim); + + ssize_t i; + for (i = 0; i < view.ndim; ++i) { + indices[i] = NUM2SSIZET(RARRAY_AREF(indices_v, i)); + } + + VALUE result = rb_memory_view_get_item(&view, indices); + ALLOCV_END(buf_indices); + rb_memory_view_release(&view); + + return result; +} + +#endif /* HAVE_RUBY_MEMORY_VIEW_H */ + +void +Init_memory_view(void) +{ + rb_ext_ractor_safe(true); +#ifdef HAVE_RUBY_MEMORY_VIEW_H + VALUE mMemoryViewTestUtils = rb_define_module("MemoryViewTestUtils"); + + rb_define_module_function(mMemoryViewTestUtils, "available?", memory_view_available_p, 1); + rb_define_module_function(mMemoryViewTestUtils, "register", memory_view_register, 1); + rb_define_module_function(mMemoryViewTestUtils, "item_size_from_format", memory_view_item_size_from_format, 1); + rb_define_module_function(mMemoryViewTestUtils, "parse_item_format", memory_view_parse_item_format, 1); + rb_define_module_function(mMemoryViewTestUtils, "get_memory_view_info", memory_view_get_memory_view_info, 1); + rb_define_module_function(mMemoryViewTestUtils, "fill_contiguous_strides", memory_view_fill_contiguous_strides, 4); + rb_define_module_function(mMemoryViewTestUtils, "ref_count_while_exporting", memory_view_ref_count_while_exporting, 2); + rb_define_module_function(mMemoryViewTestUtils, "extract_item_members", memory_view_extract_item_members, 2); + + VALUE cExportableString = rb_define_class_under(mMemoryViewTestUtils, "ExportableString", rb_cObject); + rb_define_method(cExportableString, "initialize", expstr_initialize, 1); + rb_memory_view_register(cExportableString, &exportable_string_memory_view_entry); + + VALUE cMDView = rb_define_class_under(mMemoryViewTestUtils, "MultiDimensionalView", rb_cObject); + rb_define_method(cMDView, "initialize", mdview_initialize, 4); + rb_define_method(cMDView, "[]", mdview_aref, 1); + rb_memory_view_register(cMDView, &mdview_memory_view_entry); + + id_str = rb_intern_const("__str__"); + sym_format = ID2SYM(rb_intern_const("format")); + sym_native_size_p = ID2SYM(rb_intern_const("native_size_p")); + sym_offset = ID2SYM(rb_intern_const("offset")); + sym_size = ID2SYM(rb_intern_const("size")); + sym_repeat = ID2SYM(rb_intern_const("repeat")); + sym_obj = ID2SYM(rb_intern_const("obj")); + sym_byte_size = ID2SYM(rb_intern_const("byte_size")); + sym_readonly = ID2SYM(rb_intern_const("readonly")); + sym_format = ID2SYM(rb_intern_const("format")); + sym_item_size = ID2SYM(rb_intern_const("item_size")); + sym_ndim = ID2SYM(rb_intern_const("ndim")); + sym_shape = ID2SYM(rb_intern_const("shape")); + sym_strides = ID2SYM(rb_intern_const("strides")); + sym_sub_offsets = ID2SYM(rb_intern_const("sub_offsets")); + sym_endianness = ID2SYM(rb_intern_const("endianness")); + sym_little_endian = ID2SYM(rb_intern_const("little_endian")); + sym_big_endian = ID2SYM(rb_intern_const("big_endian")); + +#ifdef WORDS_BIGENDIAN + rb_const_set(mMemoryViewTestUtils, rb_intern_const("NATIVE_ENDIAN"), sym_big_endian); +#else + rb_const_set(mMemoryViewTestUtils, rb_intern_const("NATIVE_ENDIAN"), sym_little_endian); +#endif + +#define DEF_ALIGNMENT_CONST(type, TYPE) do { \ + int alignment; \ + STRUCT_ALIGNOF(type, alignment); \ + rb_const_set(mMemoryViewTestUtils, rb_intern_const(#TYPE "_ALIGNMENT"), INT2FIX(alignment)); \ +} while(0) + + DEF_ALIGNMENT_CONST(short, SHORT); + DEF_ALIGNMENT_CONST(int, INT); + DEF_ALIGNMENT_CONST(long, LONG); + DEF_ALIGNMENT_CONST(LONG_LONG, LONG_LONG); + DEF_ALIGNMENT_CONST(int16_t, INT16); + DEF_ALIGNMENT_CONST(int32_t, INT32); + DEF_ALIGNMENT_CONST(int64_t, INT64); + DEF_ALIGNMENT_CONST(intptr_t, INTPTR); + DEF_ALIGNMENT_CONST(float, FLOAT); + DEF_ALIGNMENT_CONST(double, DOUBLE); + +#undef DEF_ALIGNMENT_CONST + +#endif /* HAVE_RUBY_MEMORY_VIEW_H */ +} diff --git a/ruby/ext/-test-/method/depend b/ruby/ext/-test-/method/depend index 028d97e1a..f091d3718 100644 --- a/ruby/ext/-test-/method/depend +++ b/ruby/ext/-test-/method/depend @@ -4,8 +4,155 @@ arity.o: $(arch_hdrdir)/ruby/config.h arity.o: $(hdrdir)/ruby.h arity.o: $(hdrdir)/ruby/assert.h arity.o: $(hdrdir)/ruby/backward.h +arity.o: $(hdrdir)/ruby/backward/2/assume.h +arity.o: $(hdrdir)/ruby/backward/2/attributes.h +arity.o: $(hdrdir)/ruby/backward/2/bool.h +arity.o: $(hdrdir)/ruby/backward/2/inttypes.h +arity.o: $(hdrdir)/ruby/backward/2/limits.h +arity.o: $(hdrdir)/ruby/backward/2/long_long.h +arity.o: $(hdrdir)/ruby/backward/2/stdalign.h +arity.o: $(hdrdir)/ruby/backward/2/stdarg.h arity.o: $(hdrdir)/ruby/defines.h arity.o: $(hdrdir)/ruby/intern.h +arity.o: $(hdrdir)/ruby/internal/anyargs.h +arity.o: $(hdrdir)/ruby/internal/arithmetic.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/char.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/double.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/int.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/long.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/short.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +arity.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +arity.o: $(hdrdir)/ruby/internal/assume.h +arity.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +arity.o: $(hdrdir)/ruby/internal/attr/artificial.h +arity.o: $(hdrdir)/ruby/internal/attr/cold.h +arity.o: $(hdrdir)/ruby/internal/attr/const.h +arity.o: $(hdrdir)/ruby/internal/attr/constexpr.h +arity.o: $(hdrdir)/ruby/internal/attr/deprecated.h +arity.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +arity.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +arity.o: $(hdrdir)/ruby/internal/attr/error.h +arity.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +arity.o: $(hdrdir)/ruby/internal/attr/forceinline.h +arity.o: $(hdrdir)/ruby/internal/attr/format.h +arity.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +arity.o: $(hdrdir)/ruby/internal/attr/noalias.h +arity.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +arity.o: $(hdrdir)/ruby/internal/attr/noexcept.h +arity.o: $(hdrdir)/ruby/internal/attr/noinline.h +arity.o: $(hdrdir)/ruby/internal/attr/nonnull.h +arity.o: $(hdrdir)/ruby/internal/attr/noreturn.h +arity.o: $(hdrdir)/ruby/internal/attr/pure.h +arity.o: $(hdrdir)/ruby/internal/attr/restrict.h +arity.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +arity.o: $(hdrdir)/ruby/internal/attr/warning.h +arity.o: $(hdrdir)/ruby/internal/attr/weakref.h +arity.o: $(hdrdir)/ruby/internal/cast.h +arity.o: $(hdrdir)/ruby/internal/compiler_is.h +arity.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +arity.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +arity.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +arity.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +arity.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +arity.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +arity.o: $(hdrdir)/ruby/internal/compiler_since.h +arity.o: $(hdrdir)/ruby/internal/config.h +arity.o: $(hdrdir)/ruby/internal/constant_p.h +arity.o: $(hdrdir)/ruby/internal/core.h +arity.o: $(hdrdir)/ruby/internal/core/rarray.h +arity.o: $(hdrdir)/ruby/internal/core/rbasic.h +arity.o: $(hdrdir)/ruby/internal/core/rbignum.h +arity.o: $(hdrdir)/ruby/internal/core/rclass.h +arity.o: $(hdrdir)/ruby/internal/core/rdata.h +arity.o: $(hdrdir)/ruby/internal/core/rfile.h +arity.o: $(hdrdir)/ruby/internal/core/rhash.h +arity.o: $(hdrdir)/ruby/internal/core/robject.h +arity.o: $(hdrdir)/ruby/internal/core/rregexp.h +arity.o: $(hdrdir)/ruby/internal/core/rstring.h +arity.o: $(hdrdir)/ruby/internal/core/rstruct.h +arity.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +arity.o: $(hdrdir)/ruby/internal/ctype.h +arity.o: $(hdrdir)/ruby/internal/dllexport.h +arity.o: $(hdrdir)/ruby/internal/dosish.h +arity.o: $(hdrdir)/ruby/internal/error.h +arity.o: $(hdrdir)/ruby/internal/eval.h +arity.o: $(hdrdir)/ruby/internal/event.h +arity.o: $(hdrdir)/ruby/internal/fl_type.h +arity.o: $(hdrdir)/ruby/internal/gc.h +arity.o: $(hdrdir)/ruby/internal/glob.h +arity.o: $(hdrdir)/ruby/internal/globals.h +arity.o: $(hdrdir)/ruby/internal/has/attribute.h +arity.o: $(hdrdir)/ruby/internal/has/builtin.h +arity.o: $(hdrdir)/ruby/internal/has/c_attribute.h +arity.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +arity.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +arity.o: $(hdrdir)/ruby/internal/has/extension.h +arity.o: $(hdrdir)/ruby/internal/has/feature.h +arity.o: $(hdrdir)/ruby/internal/has/warning.h +arity.o: $(hdrdir)/ruby/internal/intern/array.h +arity.o: $(hdrdir)/ruby/internal/intern/bignum.h +arity.o: $(hdrdir)/ruby/internal/intern/class.h +arity.o: $(hdrdir)/ruby/internal/intern/compar.h +arity.o: $(hdrdir)/ruby/internal/intern/complex.h +arity.o: $(hdrdir)/ruby/internal/intern/cont.h +arity.o: $(hdrdir)/ruby/internal/intern/dir.h +arity.o: $(hdrdir)/ruby/internal/intern/enum.h +arity.o: $(hdrdir)/ruby/internal/intern/enumerator.h +arity.o: $(hdrdir)/ruby/internal/intern/error.h +arity.o: $(hdrdir)/ruby/internal/intern/eval.h +arity.o: $(hdrdir)/ruby/internal/intern/file.h +arity.o: $(hdrdir)/ruby/internal/intern/gc.h +arity.o: $(hdrdir)/ruby/internal/intern/hash.h +arity.o: $(hdrdir)/ruby/internal/intern/io.h +arity.o: $(hdrdir)/ruby/internal/intern/load.h +arity.o: $(hdrdir)/ruby/internal/intern/marshal.h +arity.o: $(hdrdir)/ruby/internal/intern/numeric.h +arity.o: $(hdrdir)/ruby/internal/intern/object.h +arity.o: $(hdrdir)/ruby/internal/intern/parse.h +arity.o: $(hdrdir)/ruby/internal/intern/proc.h +arity.o: $(hdrdir)/ruby/internal/intern/process.h +arity.o: $(hdrdir)/ruby/internal/intern/random.h +arity.o: $(hdrdir)/ruby/internal/intern/range.h +arity.o: $(hdrdir)/ruby/internal/intern/rational.h +arity.o: $(hdrdir)/ruby/internal/intern/re.h +arity.o: $(hdrdir)/ruby/internal/intern/ruby.h +arity.o: $(hdrdir)/ruby/internal/intern/select.h +arity.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +arity.o: $(hdrdir)/ruby/internal/intern/signal.h +arity.o: $(hdrdir)/ruby/internal/intern/sprintf.h +arity.o: $(hdrdir)/ruby/internal/intern/string.h +arity.o: $(hdrdir)/ruby/internal/intern/struct.h +arity.o: $(hdrdir)/ruby/internal/intern/thread.h +arity.o: $(hdrdir)/ruby/internal/intern/time.h +arity.o: $(hdrdir)/ruby/internal/intern/variable.h +arity.o: $(hdrdir)/ruby/internal/intern/vm.h +arity.o: $(hdrdir)/ruby/internal/interpreter.h +arity.o: $(hdrdir)/ruby/internal/iterator.h +arity.o: $(hdrdir)/ruby/internal/memory.h +arity.o: $(hdrdir)/ruby/internal/method.h +arity.o: $(hdrdir)/ruby/internal/module.h +arity.o: $(hdrdir)/ruby/internal/newobj.h +arity.o: $(hdrdir)/ruby/internal/rgengc.h +arity.o: $(hdrdir)/ruby/internal/scan_args.h +arity.o: $(hdrdir)/ruby/internal/special_consts.h +arity.o: $(hdrdir)/ruby/internal/static_assert.h +arity.o: $(hdrdir)/ruby/internal/stdalign.h +arity.o: $(hdrdir)/ruby/internal/stdbool.h +arity.o: $(hdrdir)/ruby/internal/symbol.h +arity.o: $(hdrdir)/ruby/internal/value.h +arity.o: $(hdrdir)/ruby/internal/value_type.h +arity.o: $(hdrdir)/ruby/internal/variable.h +arity.o: $(hdrdir)/ruby/internal/warning_push.h +arity.o: $(hdrdir)/ruby/internal/xmalloc.h arity.o: $(hdrdir)/ruby/missing.h arity.o: $(hdrdir)/ruby/ruby.h arity.o: $(hdrdir)/ruby/st.h @@ -16,8 +163,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/notimplement/depend b/ruby/ext/-test-/notimplement/depend index 74911f0af..73d1fec43 100644 --- a/ruby/ext/-test-/notimplement/depend +++ b/ruby/ext/-test-/notimplement/depend @@ -4,8 +4,155 @@ bug.o: $(arch_hdrdir)/ruby/config.h bug.o: $(hdrdir)/ruby.h bug.o: $(hdrdir)/ruby/assert.h bug.o: $(hdrdir)/ruby/backward.h +bug.o: $(hdrdir)/ruby/backward/2/assume.h +bug.o: $(hdrdir)/ruby/backward/2/attributes.h +bug.o: $(hdrdir)/ruby/backward/2/bool.h +bug.o: $(hdrdir)/ruby/backward/2/inttypes.h +bug.o: $(hdrdir)/ruby/backward/2/limits.h +bug.o: $(hdrdir)/ruby/backward/2/long_long.h +bug.o: $(hdrdir)/ruby/backward/2/stdalign.h +bug.o: $(hdrdir)/ruby/backward/2/stdarg.h bug.o: $(hdrdir)/ruby/defines.h bug.o: $(hdrdir)/ruby/intern.h +bug.o: $(hdrdir)/ruby/internal/anyargs.h +bug.o: $(hdrdir)/ruby/internal/arithmetic.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/char.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/double.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/int.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/long.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/short.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +bug.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +bug.o: $(hdrdir)/ruby/internal/assume.h +bug.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +bug.o: $(hdrdir)/ruby/internal/attr/artificial.h +bug.o: $(hdrdir)/ruby/internal/attr/cold.h +bug.o: $(hdrdir)/ruby/internal/attr/const.h +bug.o: $(hdrdir)/ruby/internal/attr/constexpr.h +bug.o: $(hdrdir)/ruby/internal/attr/deprecated.h +bug.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +bug.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +bug.o: $(hdrdir)/ruby/internal/attr/error.h +bug.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +bug.o: $(hdrdir)/ruby/internal/attr/forceinline.h +bug.o: $(hdrdir)/ruby/internal/attr/format.h +bug.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +bug.o: $(hdrdir)/ruby/internal/attr/noalias.h +bug.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +bug.o: $(hdrdir)/ruby/internal/attr/noexcept.h +bug.o: $(hdrdir)/ruby/internal/attr/noinline.h +bug.o: $(hdrdir)/ruby/internal/attr/nonnull.h +bug.o: $(hdrdir)/ruby/internal/attr/noreturn.h +bug.o: $(hdrdir)/ruby/internal/attr/pure.h +bug.o: $(hdrdir)/ruby/internal/attr/restrict.h +bug.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +bug.o: $(hdrdir)/ruby/internal/attr/warning.h +bug.o: $(hdrdir)/ruby/internal/attr/weakref.h +bug.o: $(hdrdir)/ruby/internal/cast.h +bug.o: $(hdrdir)/ruby/internal/compiler_is.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +bug.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +bug.o: $(hdrdir)/ruby/internal/compiler_since.h +bug.o: $(hdrdir)/ruby/internal/config.h +bug.o: $(hdrdir)/ruby/internal/constant_p.h +bug.o: $(hdrdir)/ruby/internal/core.h +bug.o: $(hdrdir)/ruby/internal/core/rarray.h +bug.o: $(hdrdir)/ruby/internal/core/rbasic.h +bug.o: $(hdrdir)/ruby/internal/core/rbignum.h +bug.o: $(hdrdir)/ruby/internal/core/rclass.h +bug.o: $(hdrdir)/ruby/internal/core/rdata.h +bug.o: $(hdrdir)/ruby/internal/core/rfile.h +bug.o: $(hdrdir)/ruby/internal/core/rhash.h +bug.o: $(hdrdir)/ruby/internal/core/robject.h +bug.o: $(hdrdir)/ruby/internal/core/rregexp.h +bug.o: $(hdrdir)/ruby/internal/core/rstring.h +bug.o: $(hdrdir)/ruby/internal/core/rstruct.h +bug.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +bug.o: $(hdrdir)/ruby/internal/ctype.h +bug.o: $(hdrdir)/ruby/internal/dllexport.h +bug.o: $(hdrdir)/ruby/internal/dosish.h +bug.o: $(hdrdir)/ruby/internal/error.h +bug.o: $(hdrdir)/ruby/internal/eval.h +bug.o: $(hdrdir)/ruby/internal/event.h +bug.o: $(hdrdir)/ruby/internal/fl_type.h +bug.o: $(hdrdir)/ruby/internal/gc.h +bug.o: $(hdrdir)/ruby/internal/glob.h +bug.o: $(hdrdir)/ruby/internal/globals.h +bug.o: $(hdrdir)/ruby/internal/has/attribute.h +bug.o: $(hdrdir)/ruby/internal/has/builtin.h +bug.o: $(hdrdir)/ruby/internal/has/c_attribute.h +bug.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +bug.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +bug.o: $(hdrdir)/ruby/internal/has/extension.h +bug.o: $(hdrdir)/ruby/internal/has/feature.h +bug.o: $(hdrdir)/ruby/internal/has/warning.h +bug.o: $(hdrdir)/ruby/internal/intern/array.h +bug.o: $(hdrdir)/ruby/internal/intern/bignum.h +bug.o: $(hdrdir)/ruby/internal/intern/class.h +bug.o: $(hdrdir)/ruby/internal/intern/compar.h +bug.o: $(hdrdir)/ruby/internal/intern/complex.h +bug.o: $(hdrdir)/ruby/internal/intern/cont.h +bug.o: $(hdrdir)/ruby/internal/intern/dir.h +bug.o: $(hdrdir)/ruby/internal/intern/enum.h +bug.o: $(hdrdir)/ruby/internal/intern/enumerator.h +bug.o: $(hdrdir)/ruby/internal/intern/error.h +bug.o: $(hdrdir)/ruby/internal/intern/eval.h +bug.o: $(hdrdir)/ruby/internal/intern/file.h +bug.o: $(hdrdir)/ruby/internal/intern/gc.h +bug.o: $(hdrdir)/ruby/internal/intern/hash.h +bug.o: $(hdrdir)/ruby/internal/intern/io.h +bug.o: $(hdrdir)/ruby/internal/intern/load.h +bug.o: $(hdrdir)/ruby/internal/intern/marshal.h +bug.o: $(hdrdir)/ruby/internal/intern/numeric.h +bug.o: $(hdrdir)/ruby/internal/intern/object.h +bug.o: $(hdrdir)/ruby/internal/intern/parse.h +bug.o: $(hdrdir)/ruby/internal/intern/proc.h +bug.o: $(hdrdir)/ruby/internal/intern/process.h +bug.o: $(hdrdir)/ruby/internal/intern/random.h +bug.o: $(hdrdir)/ruby/internal/intern/range.h +bug.o: $(hdrdir)/ruby/internal/intern/rational.h +bug.o: $(hdrdir)/ruby/internal/intern/re.h +bug.o: $(hdrdir)/ruby/internal/intern/ruby.h +bug.o: $(hdrdir)/ruby/internal/intern/select.h +bug.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +bug.o: $(hdrdir)/ruby/internal/intern/signal.h +bug.o: $(hdrdir)/ruby/internal/intern/sprintf.h +bug.o: $(hdrdir)/ruby/internal/intern/string.h +bug.o: $(hdrdir)/ruby/internal/intern/struct.h +bug.o: $(hdrdir)/ruby/internal/intern/thread.h +bug.o: $(hdrdir)/ruby/internal/intern/time.h +bug.o: $(hdrdir)/ruby/internal/intern/variable.h +bug.o: $(hdrdir)/ruby/internal/intern/vm.h +bug.o: $(hdrdir)/ruby/internal/interpreter.h +bug.o: $(hdrdir)/ruby/internal/iterator.h +bug.o: $(hdrdir)/ruby/internal/memory.h +bug.o: $(hdrdir)/ruby/internal/method.h +bug.o: $(hdrdir)/ruby/internal/module.h +bug.o: $(hdrdir)/ruby/internal/newobj.h +bug.o: $(hdrdir)/ruby/internal/rgengc.h +bug.o: $(hdrdir)/ruby/internal/scan_args.h +bug.o: $(hdrdir)/ruby/internal/special_consts.h +bug.o: $(hdrdir)/ruby/internal/static_assert.h +bug.o: $(hdrdir)/ruby/internal/stdalign.h +bug.o: $(hdrdir)/ruby/internal/stdbool.h +bug.o: $(hdrdir)/ruby/internal/symbol.h +bug.o: $(hdrdir)/ruby/internal/value.h +bug.o: $(hdrdir)/ruby/internal/value_type.h +bug.o: $(hdrdir)/ruby/internal/variable.h +bug.o: $(hdrdir)/ruby/internal/warning_push.h +bug.o: $(hdrdir)/ruby/internal/xmalloc.h bug.o: $(hdrdir)/ruby/missing.h bug.o: $(hdrdir)/ruby/ruby.h bug.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/num2int/depend b/ruby/ext/-test-/num2int/depend index 76b69de85..77db0bfb8 100644 --- a/ruby/ext/-test-/num2int/depend +++ b/ruby/ext/-test-/num2int/depend @@ -4,8 +4,155 @@ num2int.o: $(arch_hdrdir)/ruby/config.h num2int.o: $(hdrdir)/ruby.h num2int.o: $(hdrdir)/ruby/assert.h num2int.o: $(hdrdir)/ruby/backward.h +num2int.o: $(hdrdir)/ruby/backward/2/assume.h +num2int.o: $(hdrdir)/ruby/backward/2/attributes.h +num2int.o: $(hdrdir)/ruby/backward/2/bool.h +num2int.o: $(hdrdir)/ruby/backward/2/inttypes.h +num2int.o: $(hdrdir)/ruby/backward/2/limits.h +num2int.o: $(hdrdir)/ruby/backward/2/long_long.h +num2int.o: $(hdrdir)/ruby/backward/2/stdalign.h +num2int.o: $(hdrdir)/ruby/backward/2/stdarg.h num2int.o: $(hdrdir)/ruby/defines.h num2int.o: $(hdrdir)/ruby/intern.h +num2int.o: $(hdrdir)/ruby/internal/anyargs.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/char.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/double.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/int.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/long.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/short.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +num2int.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +num2int.o: $(hdrdir)/ruby/internal/assume.h +num2int.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +num2int.o: $(hdrdir)/ruby/internal/attr/artificial.h +num2int.o: $(hdrdir)/ruby/internal/attr/cold.h +num2int.o: $(hdrdir)/ruby/internal/attr/const.h +num2int.o: $(hdrdir)/ruby/internal/attr/constexpr.h +num2int.o: $(hdrdir)/ruby/internal/attr/deprecated.h +num2int.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +num2int.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +num2int.o: $(hdrdir)/ruby/internal/attr/error.h +num2int.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +num2int.o: $(hdrdir)/ruby/internal/attr/forceinline.h +num2int.o: $(hdrdir)/ruby/internal/attr/format.h +num2int.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +num2int.o: $(hdrdir)/ruby/internal/attr/noalias.h +num2int.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +num2int.o: $(hdrdir)/ruby/internal/attr/noexcept.h +num2int.o: $(hdrdir)/ruby/internal/attr/noinline.h +num2int.o: $(hdrdir)/ruby/internal/attr/nonnull.h +num2int.o: $(hdrdir)/ruby/internal/attr/noreturn.h +num2int.o: $(hdrdir)/ruby/internal/attr/pure.h +num2int.o: $(hdrdir)/ruby/internal/attr/restrict.h +num2int.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +num2int.o: $(hdrdir)/ruby/internal/attr/warning.h +num2int.o: $(hdrdir)/ruby/internal/attr/weakref.h +num2int.o: $(hdrdir)/ruby/internal/cast.h +num2int.o: $(hdrdir)/ruby/internal/compiler_is.h +num2int.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +num2int.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +num2int.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +num2int.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +num2int.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +num2int.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +num2int.o: $(hdrdir)/ruby/internal/compiler_since.h +num2int.o: $(hdrdir)/ruby/internal/config.h +num2int.o: $(hdrdir)/ruby/internal/constant_p.h +num2int.o: $(hdrdir)/ruby/internal/core.h +num2int.o: $(hdrdir)/ruby/internal/core/rarray.h +num2int.o: $(hdrdir)/ruby/internal/core/rbasic.h +num2int.o: $(hdrdir)/ruby/internal/core/rbignum.h +num2int.o: $(hdrdir)/ruby/internal/core/rclass.h +num2int.o: $(hdrdir)/ruby/internal/core/rdata.h +num2int.o: $(hdrdir)/ruby/internal/core/rfile.h +num2int.o: $(hdrdir)/ruby/internal/core/rhash.h +num2int.o: $(hdrdir)/ruby/internal/core/robject.h +num2int.o: $(hdrdir)/ruby/internal/core/rregexp.h +num2int.o: $(hdrdir)/ruby/internal/core/rstring.h +num2int.o: $(hdrdir)/ruby/internal/core/rstruct.h +num2int.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +num2int.o: $(hdrdir)/ruby/internal/ctype.h +num2int.o: $(hdrdir)/ruby/internal/dllexport.h +num2int.o: $(hdrdir)/ruby/internal/dosish.h +num2int.o: $(hdrdir)/ruby/internal/error.h +num2int.o: $(hdrdir)/ruby/internal/eval.h +num2int.o: $(hdrdir)/ruby/internal/event.h +num2int.o: $(hdrdir)/ruby/internal/fl_type.h +num2int.o: $(hdrdir)/ruby/internal/gc.h +num2int.o: $(hdrdir)/ruby/internal/glob.h +num2int.o: $(hdrdir)/ruby/internal/globals.h +num2int.o: $(hdrdir)/ruby/internal/has/attribute.h +num2int.o: $(hdrdir)/ruby/internal/has/builtin.h +num2int.o: $(hdrdir)/ruby/internal/has/c_attribute.h +num2int.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +num2int.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +num2int.o: $(hdrdir)/ruby/internal/has/extension.h +num2int.o: $(hdrdir)/ruby/internal/has/feature.h +num2int.o: $(hdrdir)/ruby/internal/has/warning.h +num2int.o: $(hdrdir)/ruby/internal/intern/array.h +num2int.o: $(hdrdir)/ruby/internal/intern/bignum.h +num2int.o: $(hdrdir)/ruby/internal/intern/class.h +num2int.o: $(hdrdir)/ruby/internal/intern/compar.h +num2int.o: $(hdrdir)/ruby/internal/intern/complex.h +num2int.o: $(hdrdir)/ruby/internal/intern/cont.h +num2int.o: $(hdrdir)/ruby/internal/intern/dir.h +num2int.o: $(hdrdir)/ruby/internal/intern/enum.h +num2int.o: $(hdrdir)/ruby/internal/intern/enumerator.h +num2int.o: $(hdrdir)/ruby/internal/intern/error.h +num2int.o: $(hdrdir)/ruby/internal/intern/eval.h +num2int.o: $(hdrdir)/ruby/internal/intern/file.h +num2int.o: $(hdrdir)/ruby/internal/intern/gc.h +num2int.o: $(hdrdir)/ruby/internal/intern/hash.h +num2int.o: $(hdrdir)/ruby/internal/intern/io.h +num2int.o: $(hdrdir)/ruby/internal/intern/load.h +num2int.o: $(hdrdir)/ruby/internal/intern/marshal.h +num2int.o: $(hdrdir)/ruby/internal/intern/numeric.h +num2int.o: $(hdrdir)/ruby/internal/intern/object.h +num2int.o: $(hdrdir)/ruby/internal/intern/parse.h +num2int.o: $(hdrdir)/ruby/internal/intern/proc.h +num2int.o: $(hdrdir)/ruby/internal/intern/process.h +num2int.o: $(hdrdir)/ruby/internal/intern/random.h +num2int.o: $(hdrdir)/ruby/internal/intern/range.h +num2int.o: $(hdrdir)/ruby/internal/intern/rational.h +num2int.o: $(hdrdir)/ruby/internal/intern/re.h +num2int.o: $(hdrdir)/ruby/internal/intern/ruby.h +num2int.o: $(hdrdir)/ruby/internal/intern/select.h +num2int.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +num2int.o: $(hdrdir)/ruby/internal/intern/signal.h +num2int.o: $(hdrdir)/ruby/internal/intern/sprintf.h +num2int.o: $(hdrdir)/ruby/internal/intern/string.h +num2int.o: $(hdrdir)/ruby/internal/intern/struct.h +num2int.o: $(hdrdir)/ruby/internal/intern/thread.h +num2int.o: $(hdrdir)/ruby/internal/intern/time.h +num2int.o: $(hdrdir)/ruby/internal/intern/variable.h +num2int.o: $(hdrdir)/ruby/internal/intern/vm.h +num2int.o: $(hdrdir)/ruby/internal/interpreter.h +num2int.o: $(hdrdir)/ruby/internal/iterator.h +num2int.o: $(hdrdir)/ruby/internal/memory.h +num2int.o: $(hdrdir)/ruby/internal/method.h +num2int.o: $(hdrdir)/ruby/internal/module.h +num2int.o: $(hdrdir)/ruby/internal/newobj.h +num2int.o: $(hdrdir)/ruby/internal/rgengc.h +num2int.o: $(hdrdir)/ruby/internal/scan_args.h +num2int.o: $(hdrdir)/ruby/internal/special_consts.h +num2int.o: $(hdrdir)/ruby/internal/static_assert.h +num2int.o: $(hdrdir)/ruby/internal/stdalign.h +num2int.o: $(hdrdir)/ruby/internal/stdbool.h +num2int.o: $(hdrdir)/ruby/internal/symbol.h +num2int.o: $(hdrdir)/ruby/internal/value.h +num2int.o: $(hdrdir)/ruby/internal/value_type.h +num2int.o: $(hdrdir)/ruby/internal/variable.h +num2int.o: $(hdrdir)/ruby/internal/warning_push.h +num2int.o: $(hdrdir)/ruby/internal/xmalloc.h num2int.o: $(hdrdir)/ruby/missing.h num2int.o: $(hdrdir)/ruby/ruby.h num2int.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/path_to_class/depend b/ruby/ext/-test-/path_to_class/depend index 9a7f7d017..4911b80ad 100644 --- a/ruby/ext/-test-/path_to_class/depend +++ b/ruby/ext/-test-/path_to_class/depend @@ -4,8 +4,155 @@ path_to_class.o: $(arch_hdrdir)/ruby/config.h path_to_class.o: $(hdrdir)/ruby.h path_to_class.o: $(hdrdir)/ruby/assert.h path_to_class.o: $(hdrdir)/ruby/backward.h +path_to_class.o: $(hdrdir)/ruby/backward/2/assume.h +path_to_class.o: $(hdrdir)/ruby/backward/2/attributes.h +path_to_class.o: $(hdrdir)/ruby/backward/2/bool.h +path_to_class.o: $(hdrdir)/ruby/backward/2/inttypes.h +path_to_class.o: $(hdrdir)/ruby/backward/2/limits.h +path_to_class.o: $(hdrdir)/ruby/backward/2/long_long.h +path_to_class.o: $(hdrdir)/ruby/backward/2/stdalign.h +path_to_class.o: $(hdrdir)/ruby/backward/2/stdarg.h path_to_class.o: $(hdrdir)/ruby/defines.h path_to_class.o: $(hdrdir)/ruby/intern.h +path_to_class.o: $(hdrdir)/ruby/internal/anyargs.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/char.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/double.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/int.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/long.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/short.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +path_to_class.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +path_to_class.o: $(hdrdir)/ruby/internal/assume.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/artificial.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/cold.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/const.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/constexpr.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/deprecated.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/error.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/forceinline.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/format.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/noalias.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/noexcept.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/noinline.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/nonnull.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/noreturn.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/pure.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/restrict.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/warning.h +path_to_class.o: $(hdrdir)/ruby/internal/attr/weakref.h +path_to_class.o: $(hdrdir)/ruby/internal/cast.h +path_to_class.o: $(hdrdir)/ruby/internal/compiler_is.h +path_to_class.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +path_to_class.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +path_to_class.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +path_to_class.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +path_to_class.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +path_to_class.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +path_to_class.o: $(hdrdir)/ruby/internal/compiler_since.h +path_to_class.o: $(hdrdir)/ruby/internal/config.h +path_to_class.o: $(hdrdir)/ruby/internal/constant_p.h +path_to_class.o: $(hdrdir)/ruby/internal/core.h +path_to_class.o: $(hdrdir)/ruby/internal/core/rarray.h +path_to_class.o: $(hdrdir)/ruby/internal/core/rbasic.h +path_to_class.o: $(hdrdir)/ruby/internal/core/rbignum.h +path_to_class.o: $(hdrdir)/ruby/internal/core/rclass.h +path_to_class.o: $(hdrdir)/ruby/internal/core/rdata.h +path_to_class.o: $(hdrdir)/ruby/internal/core/rfile.h +path_to_class.o: $(hdrdir)/ruby/internal/core/rhash.h +path_to_class.o: $(hdrdir)/ruby/internal/core/robject.h +path_to_class.o: $(hdrdir)/ruby/internal/core/rregexp.h +path_to_class.o: $(hdrdir)/ruby/internal/core/rstring.h +path_to_class.o: $(hdrdir)/ruby/internal/core/rstruct.h +path_to_class.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +path_to_class.o: $(hdrdir)/ruby/internal/ctype.h +path_to_class.o: $(hdrdir)/ruby/internal/dllexport.h +path_to_class.o: $(hdrdir)/ruby/internal/dosish.h +path_to_class.o: $(hdrdir)/ruby/internal/error.h +path_to_class.o: $(hdrdir)/ruby/internal/eval.h +path_to_class.o: $(hdrdir)/ruby/internal/event.h +path_to_class.o: $(hdrdir)/ruby/internal/fl_type.h +path_to_class.o: $(hdrdir)/ruby/internal/gc.h +path_to_class.o: $(hdrdir)/ruby/internal/glob.h +path_to_class.o: $(hdrdir)/ruby/internal/globals.h +path_to_class.o: $(hdrdir)/ruby/internal/has/attribute.h +path_to_class.o: $(hdrdir)/ruby/internal/has/builtin.h +path_to_class.o: $(hdrdir)/ruby/internal/has/c_attribute.h +path_to_class.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +path_to_class.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +path_to_class.o: $(hdrdir)/ruby/internal/has/extension.h +path_to_class.o: $(hdrdir)/ruby/internal/has/feature.h +path_to_class.o: $(hdrdir)/ruby/internal/has/warning.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/array.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/bignum.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/class.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/compar.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/complex.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/cont.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/dir.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/enum.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/enumerator.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/error.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/eval.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/file.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/gc.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/hash.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/io.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/load.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/marshal.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/numeric.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/object.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/parse.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/proc.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/process.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/random.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/range.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/rational.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/re.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/ruby.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/select.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/signal.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/sprintf.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/string.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/struct.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/thread.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/time.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/variable.h +path_to_class.o: $(hdrdir)/ruby/internal/intern/vm.h +path_to_class.o: $(hdrdir)/ruby/internal/interpreter.h +path_to_class.o: $(hdrdir)/ruby/internal/iterator.h +path_to_class.o: $(hdrdir)/ruby/internal/memory.h +path_to_class.o: $(hdrdir)/ruby/internal/method.h +path_to_class.o: $(hdrdir)/ruby/internal/module.h +path_to_class.o: $(hdrdir)/ruby/internal/newobj.h +path_to_class.o: $(hdrdir)/ruby/internal/rgengc.h +path_to_class.o: $(hdrdir)/ruby/internal/scan_args.h +path_to_class.o: $(hdrdir)/ruby/internal/special_consts.h +path_to_class.o: $(hdrdir)/ruby/internal/static_assert.h +path_to_class.o: $(hdrdir)/ruby/internal/stdalign.h +path_to_class.o: $(hdrdir)/ruby/internal/stdbool.h +path_to_class.o: $(hdrdir)/ruby/internal/symbol.h +path_to_class.o: $(hdrdir)/ruby/internal/value.h +path_to_class.o: $(hdrdir)/ruby/internal/value_type.h +path_to_class.o: $(hdrdir)/ruby/internal/variable.h +path_to_class.o: $(hdrdir)/ruby/internal/warning_push.h +path_to_class.o: $(hdrdir)/ruby/internal/xmalloc.h path_to_class.o: $(hdrdir)/ruby/missing.h path_to_class.o: $(hdrdir)/ruby/ruby.h path_to_class.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/popen_deadlock/depend b/ruby/ext/-test-/popen_deadlock/depend index 4c3f3853f..e36a6c956 100644 --- a/ruby/ext/-test-/popen_deadlock/depend +++ b/ruby/ext/-test-/popen_deadlock/depend @@ -1,8 +1,156 @@ # AUTOGENERATED DEPENDENCIES START infinite_loop_dlsym.o: $(RUBY_EXTCONF_H) infinite_loop_dlsym.o: $(arch_hdrdir)/ruby/config.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/anyargs.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/char.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/double.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/int.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/long.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/short.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/assume.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/artificial.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/cold.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/const.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/constexpr.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/deprecated.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/error.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/forceinline.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/format.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/noalias.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/noexcept.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/noinline.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/nonnull.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/noreturn.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/pure.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/restrict.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/warning.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/attr/weakref.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/cast.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/compiler_is.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/compiler_since.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/config.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/constant_p.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core/rarray.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core/rbasic.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core/rbignum.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core/rclass.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core/rdata.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core/rfile.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core/rhash.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core/robject.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core/rregexp.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core/rstring.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core/rstruct.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/ctype.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/dllexport.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/dosish.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/error.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/eval.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/event.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/fl_type.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/gc.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/glob.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/globals.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/has/attribute.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/has/builtin.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/has/c_attribute.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/has/extension.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/has/feature.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/has/warning.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/array.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/bignum.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/class.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/compar.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/complex.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/cont.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/dir.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/enum.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/enumerator.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/error.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/eval.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/file.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/gc.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/hash.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/io.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/load.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/marshal.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/numeric.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/object.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/parse.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/proc.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/process.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/random.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/range.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/rational.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/re.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/ruby.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/select.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/signal.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/sprintf.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/string.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/struct.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/thread.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/time.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/variable.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/intern/vm.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/interpreter.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/iterator.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/memory.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/method.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/module.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/newobj.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/rgengc.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/scan_args.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/special_consts.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/static_assert.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/stdalign.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/stdbool.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/symbol.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/value.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/value_type.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/variable.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/warning_push.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/internal/xmalloc.h infinite_loop_dlsym.o: $(hdrdir)/ruby/assert.h infinite_loop_dlsym.o: $(hdrdir)/ruby/backward.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/backward/2/assume.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/backward/2/attributes.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/backward/2/bool.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/backward/2/inttypes.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/backward/2/limits.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/backward/2/long_long.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/backward/2/stdalign.h +infinite_loop_dlsym.o: $(hdrdir)/ruby/backward/2/stdarg.h infinite_loop_dlsym.o: $(hdrdir)/ruby/defines.h infinite_loop_dlsym.o: $(hdrdir)/ruby/intern.h infinite_loop_dlsym.o: $(hdrdir)/ruby/missing.h diff --git a/ruby/ext/-test-/popen_deadlock/extconf.rb b/ruby/ext/-test-/popen_deadlock/extconf.rb index 24a7d7993..6b6ee7a6b 100644 --- a/ruby/ext/-test-/popen_deadlock/extconf.rb +++ b/ruby/ext/-test-/popen_deadlock/extconf.rb @@ -1,5 +1,6 @@ # frozen_string_literal: false case RUBY_PLATFORM when /solaris/i, /linux/i + $LDFLAGS << " -ldl" create_makefile("-test-/popen_deadlock/infinite_loop_dlsym") end diff --git a/ruby/ext/-test-/postponed_job/depend b/ruby/ext/-test-/postponed_job/depend index 998e2dcc9..36f08b6eb 100644 --- a/ruby/ext/-test-/postponed_job/depend +++ b/ruby/ext/-test-/postponed_job/depend @@ -4,9 +4,156 @@ postponed_job.o: $(arch_hdrdir)/ruby/config.h postponed_job.o: $(hdrdir)/ruby.h postponed_job.o: $(hdrdir)/ruby/assert.h postponed_job.o: $(hdrdir)/ruby/backward.h +postponed_job.o: $(hdrdir)/ruby/backward/2/assume.h +postponed_job.o: $(hdrdir)/ruby/backward/2/attributes.h +postponed_job.o: $(hdrdir)/ruby/backward/2/bool.h +postponed_job.o: $(hdrdir)/ruby/backward/2/inttypes.h +postponed_job.o: $(hdrdir)/ruby/backward/2/limits.h +postponed_job.o: $(hdrdir)/ruby/backward/2/long_long.h +postponed_job.o: $(hdrdir)/ruby/backward/2/stdalign.h +postponed_job.o: $(hdrdir)/ruby/backward/2/stdarg.h postponed_job.o: $(hdrdir)/ruby/debug.h postponed_job.o: $(hdrdir)/ruby/defines.h postponed_job.o: $(hdrdir)/ruby/intern.h +postponed_job.o: $(hdrdir)/ruby/internal/anyargs.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/char.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/double.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/int.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/long.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/short.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +postponed_job.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +postponed_job.o: $(hdrdir)/ruby/internal/assume.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/artificial.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/cold.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/const.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/constexpr.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/deprecated.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/error.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/forceinline.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/format.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/noalias.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/noexcept.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/noinline.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/nonnull.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/noreturn.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/pure.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/restrict.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/warning.h +postponed_job.o: $(hdrdir)/ruby/internal/attr/weakref.h +postponed_job.o: $(hdrdir)/ruby/internal/cast.h +postponed_job.o: $(hdrdir)/ruby/internal/compiler_is.h +postponed_job.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +postponed_job.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +postponed_job.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +postponed_job.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +postponed_job.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +postponed_job.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +postponed_job.o: $(hdrdir)/ruby/internal/compiler_since.h +postponed_job.o: $(hdrdir)/ruby/internal/config.h +postponed_job.o: $(hdrdir)/ruby/internal/constant_p.h +postponed_job.o: $(hdrdir)/ruby/internal/core.h +postponed_job.o: $(hdrdir)/ruby/internal/core/rarray.h +postponed_job.o: $(hdrdir)/ruby/internal/core/rbasic.h +postponed_job.o: $(hdrdir)/ruby/internal/core/rbignum.h +postponed_job.o: $(hdrdir)/ruby/internal/core/rclass.h +postponed_job.o: $(hdrdir)/ruby/internal/core/rdata.h +postponed_job.o: $(hdrdir)/ruby/internal/core/rfile.h +postponed_job.o: $(hdrdir)/ruby/internal/core/rhash.h +postponed_job.o: $(hdrdir)/ruby/internal/core/robject.h +postponed_job.o: $(hdrdir)/ruby/internal/core/rregexp.h +postponed_job.o: $(hdrdir)/ruby/internal/core/rstring.h +postponed_job.o: $(hdrdir)/ruby/internal/core/rstruct.h +postponed_job.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +postponed_job.o: $(hdrdir)/ruby/internal/ctype.h +postponed_job.o: $(hdrdir)/ruby/internal/dllexport.h +postponed_job.o: $(hdrdir)/ruby/internal/dosish.h +postponed_job.o: $(hdrdir)/ruby/internal/error.h +postponed_job.o: $(hdrdir)/ruby/internal/eval.h +postponed_job.o: $(hdrdir)/ruby/internal/event.h +postponed_job.o: $(hdrdir)/ruby/internal/fl_type.h +postponed_job.o: $(hdrdir)/ruby/internal/gc.h +postponed_job.o: $(hdrdir)/ruby/internal/glob.h +postponed_job.o: $(hdrdir)/ruby/internal/globals.h +postponed_job.o: $(hdrdir)/ruby/internal/has/attribute.h +postponed_job.o: $(hdrdir)/ruby/internal/has/builtin.h +postponed_job.o: $(hdrdir)/ruby/internal/has/c_attribute.h +postponed_job.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +postponed_job.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +postponed_job.o: $(hdrdir)/ruby/internal/has/extension.h +postponed_job.o: $(hdrdir)/ruby/internal/has/feature.h +postponed_job.o: $(hdrdir)/ruby/internal/has/warning.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/array.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/bignum.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/class.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/compar.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/complex.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/cont.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/dir.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/enum.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/enumerator.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/error.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/eval.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/file.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/gc.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/hash.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/io.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/load.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/marshal.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/numeric.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/object.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/parse.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/proc.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/process.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/random.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/range.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/rational.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/re.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/ruby.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/select.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/signal.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/sprintf.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/string.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/struct.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/thread.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/time.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/variable.h +postponed_job.o: $(hdrdir)/ruby/internal/intern/vm.h +postponed_job.o: $(hdrdir)/ruby/internal/interpreter.h +postponed_job.o: $(hdrdir)/ruby/internal/iterator.h +postponed_job.o: $(hdrdir)/ruby/internal/memory.h +postponed_job.o: $(hdrdir)/ruby/internal/method.h +postponed_job.o: $(hdrdir)/ruby/internal/module.h +postponed_job.o: $(hdrdir)/ruby/internal/newobj.h +postponed_job.o: $(hdrdir)/ruby/internal/rgengc.h +postponed_job.o: $(hdrdir)/ruby/internal/scan_args.h +postponed_job.o: $(hdrdir)/ruby/internal/special_consts.h +postponed_job.o: $(hdrdir)/ruby/internal/static_assert.h +postponed_job.o: $(hdrdir)/ruby/internal/stdalign.h +postponed_job.o: $(hdrdir)/ruby/internal/stdbool.h +postponed_job.o: $(hdrdir)/ruby/internal/symbol.h +postponed_job.o: $(hdrdir)/ruby/internal/value.h +postponed_job.o: $(hdrdir)/ruby/internal/value_type.h +postponed_job.o: $(hdrdir)/ruby/internal/variable.h +postponed_job.o: $(hdrdir)/ruby/internal/warning_push.h +postponed_job.o: $(hdrdir)/ruby/internal/xmalloc.h postponed_job.o: $(hdrdir)/ruby/missing.h postponed_job.o: $(hdrdir)/ruby/ruby.h postponed_job.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/postponed_job/postponed_job.c b/ruby/ext/-test-/postponed_job/postponed_job.c index d8684d475..fa57bef6f 100644 --- a/ruby/ext/-test-/postponed_job/postponed_job.c +++ b/ruby/ext/-test-/postponed_job/postponed_job.c @@ -58,6 +58,34 @@ pjob_call_direct(VALUE self, VALUE obj) return self; } +#ifdef HAVE_PTHREAD_H +#include + +static void * +pjob_register_in_c_thread_i(void *obj) +{ + rb_postponed_job_register_one(0, pjob_one_callback, (void *)obj); + rb_postponed_job_register_one(0, pjob_one_callback, (void *)obj); + rb_postponed_job_register_one(0, pjob_one_callback, (void *)obj); + return NULL; +} + +static VALUE +pjob_register_in_c_thread(VALUE self, VALUE obj) +{ + pthread_t thread; + if (pthread_create(&thread, NULL, pjob_register_in_c_thread_i, (void *)obj)) { + return Qfalse; + } + + if (pthread_join(thread, NULL)) { + return Qfalse; + } + + return Qtrue; +} +#endif + void Init_postponed_job(VALUE self) { @@ -65,5 +93,8 @@ Init_postponed_job(VALUE self) rb_define_module_function(mBug, "postponed_job_register", pjob_register, 1); rb_define_module_function(mBug, "postponed_job_register_one", pjob_register_one, 1); rb_define_module_function(mBug, "postponed_job_call_direct", pjob_call_direct, 1); +#ifdef HAVE_PTHREAD_H + rb_define_module_function(mBug, "postponed_job_register_in_c_thread", pjob_register_in_c_thread, 1); +#endif } diff --git a/ruby/ext/-test-/printf/depend b/ruby/ext/-test-/printf/depend index 7860797f5..143317c77 100644 --- a/ruby/ext/-test-/printf/depend +++ b/ruby/ext/-test-/printf/depend @@ -4,9 +4,165 @@ printf.o: $(arch_hdrdir)/ruby/config.h printf.o: $(hdrdir)/ruby.h printf.o: $(hdrdir)/ruby/assert.h printf.o: $(hdrdir)/ruby/backward.h +printf.o: $(hdrdir)/ruby/backward/2/assume.h +printf.o: $(hdrdir)/ruby/backward/2/attributes.h +printf.o: $(hdrdir)/ruby/backward/2/bool.h +printf.o: $(hdrdir)/ruby/backward/2/inttypes.h +printf.o: $(hdrdir)/ruby/backward/2/limits.h +printf.o: $(hdrdir)/ruby/backward/2/long_long.h +printf.o: $(hdrdir)/ruby/backward/2/stdalign.h +printf.o: $(hdrdir)/ruby/backward/2/stdarg.h printf.o: $(hdrdir)/ruby/defines.h printf.o: $(hdrdir)/ruby/encoding.h printf.o: $(hdrdir)/ruby/intern.h +printf.o: $(hdrdir)/ruby/internal/anyargs.h +printf.o: $(hdrdir)/ruby/internal/arithmetic.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/char.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/double.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/int.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/long.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/short.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +printf.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +printf.o: $(hdrdir)/ruby/internal/assume.h +printf.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +printf.o: $(hdrdir)/ruby/internal/attr/artificial.h +printf.o: $(hdrdir)/ruby/internal/attr/cold.h +printf.o: $(hdrdir)/ruby/internal/attr/const.h +printf.o: $(hdrdir)/ruby/internal/attr/constexpr.h +printf.o: $(hdrdir)/ruby/internal/attr/deprecated.h +printf.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +printf.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +printf.o: $(hdrdir)/ruby/internal/attr/error.h +printf.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +printf.o: $(hdrdir)/ruby/internal/attr/forceinline.h +printf.o: $(hdrdir)/ruby/internal/attr/format.h +printf.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +printf.o: $(hdrdir)/ruby/internal/attr/noalias.h +printf.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +printf.o: $(hdrdir)/ruby/internal/attr/noexcept.h +printf.o: $(hdrdir)/ruby/internal/attr/noinline.h +printf.o: $(hdrdir)/ruby/internal/attr/nonnull.h +printf.o: $(hdrdir)/ruby/internal/attr/noreturn.h +printf.o: $(hdrdir)/ruby/internal/attr/pure.h +printf.o: $(hdrdir)/ruby/internal/attr/restrict.h +printf.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +printf.o: $(hdrdir)/ruby/internal/attr/warning.h +printf.o: $(hdrdir)/ruby/internal/attr/weakref.h +printf.o: $(hdrdir)/ruby/internal/cast.h +printf.o: $(hdrdir)/ruby/internal/compiler_is.h +printf.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +printf.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +printf.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +printf.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +printf.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +printf.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +printf.o: $(hdrdir)/ruby/internal/compiler_since.h +printf.o: $(hdrdir)/ruby/internal/config.h +printf.o: $(hdrdir)/ruby/internal/constant_p.h +printf.o: $(hdrdir)/ruby/internal/core.h +printf.o: $(hdrdir)/ruby/internal/core/rarray.h +printf.o: $(hdrdir)/ruby/internal/core/rbasic.h +printf.o: $(hdrdir)/ruby/internal/core/rbignum.h +printf.o: $(hdrdir)/ruby/internal/core/rclass.h +printf.o: $(hdrdir)/ruby/internal/core/rdata.h +printf.o: $(hdrdir)/ruby/internal/core/rfile.h +printf.o: $(hdrdir)/ruby/internal/core/rhash.h +printf.o: $(hdrdir)/ruby/internal/core/robject.h +printf.o: $(hdrdir)/ruby/internal/core/rregexp.h +printf.o: $(hdrdir)/ruby/internal/core/rstring.h +printf.o: $(hdrdir)/ruby/internal/core/rstruct.h +printf.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +printf.o: $(hdrdir)/ruby/internal/ctype.h +printf.o: $(hdrdir)/ruby/internal/dllexport.h +printf.o: $(hdrdir)/ruby/internal/dosish.h +printf.o: $(hdrdir)/ruby/internal/encoding/coderange.h +printf.o: $(hdrdir)/ruby/internal/encoding/ctype.h +printf.o: $(hdrdir)/ruby/internal/encoding/encoding.h +printf.o: $(hdrdir)/ruby/internal/encoding/pathname.h +printf.o: $(hdrdir)/ruby/internal/encoding/re.h +printf.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +printf.o: $(hdrdir)/ruby/internal/encoding/string.h +printf.o: $(hdrdir)/ruby/internal/encoding/symbol.h +printf.o: $(hdrdir)/ruby/internal/encoding/transcode.h +printf.o: $(hdrdir)/ruby/internal/error.h +printf.o: $(hdrdir)/ruby/internal/eval.h +printf.o: $(hdrdir)/ruby/internal/event.h +printf.o: $(hdrdir)/ruby/internal/fl_type.h +printf.o: $(hdrdir)/ruby/internal/gc.h +printf.o: $(hdrdir)/ruby/internal/glob.h +printf.o: $(hdrdir)/ruby/internal/globals.h +printf.o: $(hdrdir)/ruby/internal/has/attribute.h +printf.o: $(hdrdir)/ruby/internal/has/builtin.h +printf.o: $(hdrdir)/ruby/internal/has/c_attribute.h +printf.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +printf.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +printf.o: $(hdrdir)/ruby/internal/has/extension.h +printf.o: $(hdrdir)/ruby/internal/has/feature.h +printf.o: $(hdrdir)/ruby/internal/has/warning.h +printf.o: $(hdrdir)/ruby/internal/intern/array.h +printf.o: $(hdrdir)/ruby/internal/intern/bignum.h +printf.o: $(hdrdir)/ruby/internal/intern/class.h +printf.o: $(hdrdir)/ruby/internal/intern/compar.h +printf.o: $(hdrdir)/ruby/internal/intern/complex.h +printf.o: $(hdrdir)/ruby/internal/intern/cont.h +printf.o: $(hdrdir)/ruby/internal/intern/dir.h +printf.o: $(hdrdir)/ruby/internal/intern/enum.h +printf.o: $(hdrdir)/ruby/internal/intern/enumerator.h +printf.o: $(hdrdir)/ruby/internal/intern/error.h +printf.o: $(hdrdir)/ruby/internal/intern/eval.h +printf.o: $(hdrdir)/ruby/internal/intern/file.h +printf.o: $(hdrdir)/ruby/internal/intern/gc.h +printf.o: $(hdrdir)/ruby/internal/intern/hash.h +printf.o: $(hdrdir)/ruby/internal/intern/io.h +printf.o: $(hdrdir)/ruby/internal/intern/load.h +printf.o: $(hdrdir)/ruby/internal/intern/marshal.h +printf.o: $(hdrdir)/ruby/internal/intern/numeric.h +printf.o: $(hdrdir)/ruby/internal/intern/object.h +printf.o: $(hdrdir)/ruby/internal/intern/parse.h +printf.o: $(hdrdir)/ruby/internal/intern/proc.h +printf.o: $(hdrdir)/ruby/internal/intern/process.h +printf.o: $(hdrdir)/ruby/internal/intern/random.h +printf.o: $(hdrdir)/ruby/internal/intern/range.h +printf.o: $(hdrdir)/ruby/internal/intern/rational.h +printf.o: $(hdrdir)/ruby/internal/intern/re.h +printf.o: $(hdrdir)/ruby/internal/intern/ruby.h +printf.o: $(hdrdir)/ruby/internal/intern/select.h +printf.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +printf.o: $(hdrdir)/ruby/internal/intern/signal.h +printf.o: $(hdrdir)/ruby/internal/intern/sprintf.h +printf.o: $(hdrdir)/ruby/internal/intern/string.h +printf.o: $(hdrdir)/ruby/internal/intern/struct.h +printf.o: $(hdrdir)/ruby/internal/intern/thread.h +printf.o: $(hdrdir)/ruby/internal/intern/time.h +printf.o: $(hdrdir)/ruby/internal/intern/variable.h +printf.o: $(hdrdir)/ruby/internal/intern/vm.h +printf.o: $(hdrdir)/ruby/internal/interpreter.h +printf.o: $(hdrdir)/ruby/internal/iterator.h +printf.o: $(hdrdir)/ruby/internal/memory.h +printf.o: $(hdrdir)/ruby/internal/method.h +printf.o: $(hdrdir)/ruby/internal/module.h +printf.o: $(hdrdir)/ruby/internal/newobj.h +printf.o: $(hdrdir)/ruby/internal/rgengc.h +printf.o: $(hdrdir)/ruby/internal/scan_args.h +printf.o: $(hdrdir)/ruby/internal/special_consts.h +printf.o: $(hdrdir)/ruby/internal/static_assert.h +printf.o: $(hdrdir)/ruby/internal/stdalign.h +printf.o: $(hdrdir)/ruby/internal/stdbool.h +printf.o: $(hdrdir)/ruby/internal/symbol.h +printf.o: $(hdrdir)/ruby/internal/value.h +printf.o: $(hdrdir)/ruby/internal/value_type.h +printf.o: $(hdrdir)/ruby/internal/variable.h +printf.o: $(hdrdir)/ruby/internal/warning_push.h +printf.o: $(hdrdir)/ruby/internal/xmalloc.h printf.o: $(hdrdir)/ruby/missing.h printf.o: $(hdrdir)/ruby/onigmo.h printf.o: $(hdrdir)/ruby/oniguruma.h diff --git a/ruby/ext/-test-/proc/depend b/ruby/ext/-test-/proc/depend index 5946e4ca0..a1ce4cdf4 100644 --- a/ruby/ext/-test-/proc/depend +++ b/ruby/ext/-test-/proc/depend @@ -4,8 +4,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h @@ -16,8 +163,155 @@ receiver.o: $(arch_hdrdir)/ruby/config.h receiver.o: $(hdrdir)/ruby.h receiver.o: $(hdrdir)/ruby/assert.h receiver.o: $(hdrdir)/ruby/backward.h +receiver.o: $(hdrdir)/ruby/backward/2/assume.h +receiver.o: $(hdrdir)/ruby/backward/2/attributes.h +receiver.o: $(hdrdir)/ruby/backward/2/bool.h +receiver.o: $(hdrdir)/ruby/backward/2/inttypes.h +receiver.o: $(hdrdir)/ruby/backward/2/limits.h +receiver.o: $(hdrdir)/ruby/backward/2/long_long.h +receiver.o: $(hdrdir)/ruby/backward/2/stdalign.h +receiver.o: $(hdrdir)/ruby/backward/2/stdarg.h receiver.o: $(hdrdir)/ruby/defines.h receiver.o: $(hdrdir)/ruby/intern.h +receiver.o: $(hdrdir)/ruby/internal/anyargs.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/char.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/double.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/int.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/long.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/short.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +receiver.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +receiver.o: $(hdrdir)/ruby/internal/assume.h +receiver.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +receiver.o: $(hdrdir)/ruby/internal/attr/artificial.h +receiver.o: $(hdrdir)/ruby/internal/attr/cold.h +receiver.o: $(hdrdir)/ruby/internal/attr/const.h +receiver.o: $(hdrdir)/ruby/internal/attr/constexpr.h +receiver.o: $(hdrdir)/ruby/internal/attr/deprecated.h +receiver.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +receiver.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +receiver.o: $(hdrdir)/ruby/internal/attr/error.h +receiver.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +receiver.o: $(hdrdir)/ruby/internal/attr/forceinline.h +receiver.o: $(hdrdir)/ruby/internal/attr/format.h +receiver.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +receiver.o: $(hdrdir)/ruby/internal/attr/noalias.h +receiver.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +receiver.o: $(hdrdir)/ruby/internal/attr/noexcept.h +receiver.o: $(hdrdir)/ruby/internal/attr/noinline.h +receiver.o: $(hdrdir)/ruby/internal/attr/nonnull.h +receiver.o: $(hdrdir)/ruby/internal/attr/noreturn.h +receiver.o: $(hdrdir)/ruby/internal/attr/pure.h +receiver.o: $(hdrdir)/ruby/internal/attr/restrict.h +receiver.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +receiver.o: $(hdrdir)/ruby/internal/attr/warning.h +receiver.o: $(hdrdir)/ruby/internal/attr/weakref.h +receiver.o: $(hdrdir)/ruby/internal/cast.h +receiver.o: $(hdrdir)/ruby/internal/compiler_is.h +receiver.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +receiver.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +receiver.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +receiver.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +receiver.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +receiver.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +receiver.o: $(hdrdir)/ruby/internal/compiler_since.h +receiver.o: $(hdrdir)/ruby/internal/config.h +receiver.o: $(hdrdir)/ruby/internal/constant_p.h +receiver.o: $(hdrdir)/ruby/internal/core.h +receiver.o: $(hdrdir)/ruby/internal/core/rarray.h +receiver.o: $(hdrdir)/ruby/internal/core/rbasic.h +receiver.o: $(hdrdir)/ruby/internal/core/rbignum.h +receiver.o: $(hdrdir)/ruby/internal/core/rclass.h +receiver.o: $(hdrdir)/ruby/internal/core/rdata.h +receiver.o: $(hdrdir)/ruby/internal/core/rfile.h +receiver.o: $(hdrdir)/ruby/internal/core/rhash.h +receiver.o: $(hdrdir)/ruby/internal/core/robject.h +receiver.o: $(hdrdir)/ruby/internal/core/rregexp.h +receiver.o: $(hdrdir)/ruby/internal/core/rstring.h +receiver.o: $(hdrdir)/ruby/internal/core/rstruct.h +receiver.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +receiver.o: $(hdrdir)/ruby/internal/ctype.h +receiver.o: $(hdrdir)/ruby/internal/dllexport.h +receiver.o: $(hdrdir)/ruby/internal/dosish.h +receiver.o: $(hdrdir)/ruby/internal/error.h +receiver.o: $(hdrdir)/ruby/internal/eval.h +receiver.o: $(hdrdir)/ruby/internal/event.h +receiver.o: $(hdrdir)/ruby/internal/fl_type.h +receiver.o: $(hdrdir)/ruby/internal/gc.h +receiver.o: $(hdrdir)/ruby/internal/glob.h +receiver.o: $(hdrdir)/ruby/internal/globals.h +receiver.o: $(hdrdir)/ruby/internal/has/attribute.h +receiver.o: $(hdrdir)/ruby/internal/has/builtin.h +receiver.o: $(hdrdir)/ruby/internal/has/c_attribute.h +receiver.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +receiver.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +receiver.o: $(hdrdir)/ruby/internal/has/extension.h +receiver.o: $(hdrdir)/ruby/internal/has/feature.h +receiver.o: $(hdrdir)/ruby/internal/has/warning.h +receiver.o: $(hdrdir)/ruby/internal/intern/array.h +receiver.o: $(hdrdir)/ruby/internal/intern/bignum.h +receiver.o: $(hdrdir)/ruby/internal/intern/class.h +receiver.o: $(hdrdir)/ruby/internal/intern/compar.h +receiver.o: $(hdrdir)/ruby/internal/intern/complex.h +receiver.o: $(hdrdir)/ruby/internal/intern/cont.h +receiver.o: $(hdrdir)/ruby/internal/intern/dir.h +receiver.o: $(hdrdir)/ruby/internal/intern/enum.h +receiver.o: $(hdrdir)/ruby/internal/intern/enumerator.h +receiver.o: $(hdrdir)/ruby/internal/intern/error.h +receiver.o: $(hdrdir)/ruby/internal/intern/eval.h +receiver.o: $(hdrdir)/ruby/internal/intern/file.h +receiver.o: $(hdrdir)/ruby/internal/intern/gc.h +receiver.o: $(hdrdir)/ruby/internal/intern/hash.h +receiver.o: $(hdrdir)/ruby/internal/intern/io.h +receiver.o: $(hdrdir)/ruby/internal/intern/load.h +receiver.o: $(hdrdir)/ruby/internal/intern/marshal.h +receiver.o: $(hdrdir)/ruby/internal/intern/numeric.h +receiver.o: $(hdrdir)/ruby/internal/intern/object.h +receiver.o: $(hdrdir)/ruby/internal/intern/parse.h +receiver.o: $(hdrdir)/ruby/internal/intern/proc.h +receiver.o: $(hdrdir)/ruby/internal/intern/process.h +receiver.o: $(hdrdir)/ruby/internal/intern/random.h +receiver.o: $(hdrdir)/ruby/internal/intern/range.h +receiver.o: $(hdrdir)/ruby/internal/intern/rational.h +receiver.o: $(hdrdir)/ruby/internal/intern/re.h +receiver.o: $(hdrdir)/ruby/internal/intern/ruby.h +receiver.o: $(hdrdir)/ruby/internal/intern/select.h +receiver.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +receiver.o: $(hdrdir)/ruby/internal/intern/signal.h +receiver.o: $(hdrdir)/ruby/internal/intern/sprintf.h +receiver.o: $(hdrdir)/ruby/internal/intern/string.h +receiver.o: $(hdrdir)/ruby/internal/intern/struct.h +receiver.o: $(hdrdir)/ruby/internal/intern/thread.h +receiver.o: $(hdrdir)/ruby/internal/intern/time.h +receiver.o: $(hdrdir)/ruby/internal/intern/variable.h +receiver.o: $(hdrdir)/ruby/internal/intern/vm.h +receiver.o: $(hdrdir)/ruby/internal/interpreter.h +receiver.o: $(hdrdir)/ruby/internal/iterator.h +receiver.o: $(hdrdir)/ruby/internal/memory.h +receiver.o: $(hdrdir)/ruby/internal/method.h +receiver.o: $(hdrdir)/ruby/internal/module.h +receiver.o: $(hdrdir)/ruby/internal/newobj.h +receiver.o: $(hdrdir)/ruby/internal/rgengc.h +receiver.o: $(hdrdir)/ruby/internal/scan_args.h +receiver.o: $(hdrdir)/ruby/internal/special_consts.h +receiver.o: $(hdrdir)/ruby/internal/static_assert.h +receiver.o: $(hdrdir)/ruby/internal/stdalign.h +receiver.o: $(hdrdir)/ruby/internal/stdbool.h +receiver.o: $(hdrdir)/ruby/internal/symbol.h +receiver.o: $(hdrdir)/ruby/internal/value.h +receiver.o: $(hdrdir)/ruby/internal/value_type.h +receiver.o: $(hdrdir)/ruby/internal/variable.h +receiver.o: $(hdrdir)/ruby/internal/warning_push.h +receiver.o: $(hdrdir)/ruby/internal/xmalloc.h receiver.o: $(hdrdir)/ruby/missing.h receiver.o: $(hdrdir)/ruby/ruby.h receiver.o: $(hdrdir)/ruby/st.h @@ -28,8 +322,155 @@ super.o: $(arch_hdrdir)/ruby/config.h super.o: $(hdrdir)/ruby.h super.o: $(hdrdir)/ruby/assert.h super.o: $(hdrdir)/ruby/backward.h +super.o: $(hdrdir)/ruby/backward/2/assume.h +super.o: $(hdrdir)/ruby/backward/2/attributes.h +super.o: $(hdrdir)/ruby/backward/2/bool.h +super.o: $(hdrdir)/ruby/backward/2/inttypes.h +super.o: $(hdrdir)/ruby/backward/2/limits.h +super.o: $(hdrdir)/ruby/backward/2/long_long.h +super.o: $(hdrdir)/ruby/backward/2/stdalign.h +super.o: $(hdrdir)/ruby/backward/2/stdarg.h super.o: $(hdrdir)/ruby/defines.h super.o: $(hdrdir)/ruby/intern.h +super.o: $(hdrdir)/ruby/internal/anyargs.h +super.o: $(hdrdir)/ruby/internal/arithmetic.h +super.o: $(hdrdir)/ruby/internal/arithmetic/char.h +super.o: $(hdrdir)/ruby/internal/arithmetic/double.h +super.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +super.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +super.o: $(hdrdir)/ruby/internal/arithmetic/int.h +super.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +super.o: $(hdrdir)/ruby/internal/arithmetic/long.h +super.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +super.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +super.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +super.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +super.o: $(hdrdir)/ruby/internal/arithmetic/short.h +super.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +super.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +super.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +super.o: $(hdrdir)/ruby/internal/assume.h +super.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +super.o: $(hdrdir)/ruby/internal/attr/artificial.h +super.o: $(hdrdir)/ruby/internal/attr/cold.h +super.o: $(hdrdir)/ruby/internal/attr/const.h +super.o: $(hdrdir)/ruby/internal/attr/constexpr.h +super.o: $(hdrdir)/ruby/internal/attr/deprecated.h +super.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +super.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +super.o: $(hdrdir)/ruby/internal/attr/error.h +super.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +super.o: $(hdrdir)/ruby/internal/attr/forceinline.h +super.o: $(hdrdir)/ruby/internal/attr/format.h +super.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +super.o: $(hdrdir)/ruby/internal/attr/noalias.h +super.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +super.o: $(hdrdir)/ruby/internal/attr/noexcept.h +super.o: $(hdrdir)/ruby/internal/attr/noinline.h +super.o: $(hdrdir)/ruby/internal/attr/nonnull.h +super.o: $(hdrdir)/ruby/internal/attr/noreturn.h +super.o: $(hdrdir)/ruby/internal/attr/pure.h +super.o: $(hdrdir)/ruby/internal/attr/restrict.h +super.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +super.o: $(hdrdir)/ruby/internal/attr/warning.h +super.o: $(hdrdir)/ruby/internal/attr/weakref.h +super.o: $(hdrdir)/ruby/internal/cast.h +super.o: $(hdrdir)/ruby/internal/compiler_is.h +super.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +super.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +super.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +super.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +super.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +super.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +super.o: $(hdrdir)/ruby/internal/compiler_since.h +super.o: $(hdrdir)/ruby/internal/config.h +super.o: $(hdrdir)/ruby/internal/constant_p.h +super.o: $(hdrdir)/ruby/internal/core.h +super.o: $(hdrdir)/ruby/internal/core/rarray.h +super.o: $(hdrdir)/ruby/internal/core/rbasic.h +super.o: $(hdrdir)/ruby/internal/core/rbignum.h +super.o: $(hdrdir)/ruby/internal/core/rclass.h +super.o: $(hdrdir)/ruby/internal/core/rdata.h +super.o: $(hdrdir)/ruby/internal/core/rfile.h +super.o: $(hdrdir)/ruby/internal/core/rhash.h +super.o: $(hdrdir)/ruby/internal/core/robject.h +super.o: $(hdrdir)/ruby/internal/core/rregexp.h +super.o: $(hdrdir)/ruby/internal/core/rstring.h +super.o: $(hdrdir)/ruby/internal/core/rstruct.h +super.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +super.o: $(hdrdir)/ruby/internal/ctype.h +super.o: $(hdrdir)/ruby/internal/dllexport.h +super.o: $(hdrdir)/ruby/internal/dosish.h +super.o: $(hdrdir)/ruby/internal/error.h +super.o: $(hdrdir)/ruby/internal/eval.h +super.o: $(hdrdir)/ruby/internal/event.h +super.o: $(hdrdir)/ruby/internal/fl_type.h +super.o: $(hdrdir)/ruby/internal/gc.h +super.o: $(hdrdir)/ruby/internal/glob.h +super.o: $(hdrdir)/ruby/internal/globals.h +super.o: $(hdrdir)/ruby/internal/has/attribute.h +super.o: $(hdrdir)/ruby/internal/has/builtin.h +super.o: $(hdrdir)/ruby/internal/has/c_attribute.h +super.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +super.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +super.o: $(hdrdir)/ruby/internal/has/extension.h +super.o: $(hdrdir)/ruby/internal/has/feature.h +super.o: $(hdrdir)/ruby/internal/has/warning.h +super.o: $(hdrdir)/ruby/internal/intern/array.h +super.o: $(hdrdir)/ruby/internal/intern/bignum.h +super.o: $(hdrdir)/ruby/internal/intern/class.h +super.o: $(hdrdir)/ruby/internal/intern/compar.h +super.o: $(hdrdir)/ruby/internal/intern/complex.h +super.o: $(hdrdir)/ruby/internal/intern/cont.h +super.o: $(hdrdir)/ruby/internal/intern/dir.h +super.o: $(hdrdir)/ruby/internal/intern/enum.h +super.o: $(hdrdir)/ruby/internal/intern/enumerator.h +super.o: $(hdrdir)/ruby/internal/intern/error.h +super.o: $(hdrdir)/ruby/internal/intern/eval.h +super.o: $(hdrdir)/ruby/internal/intern/file.h +super.o: $(hdrdir)/ruby/internal/intern/gc.h +super.o: $(hdrdir)/ruby/internal/intern/hash.h +super.o: $(hdrdir)/ruby/internal/intern/io.h +super.o: $(hdrdir)/ruby/internal/intern/load.h +super.o: $(hdrdir)/ruby/internal/intern/marshal.h +super.o: $(hdrdir)/ruby/internal/intern/numeric.h +super.o: $(hdrdir)/ruby/internal/intern/object.h +super.o: $(hdrdir)/ruby/internal/intern/parse.h +super.o: $(hdrdir)/ruby/internal/intern/proc.h +super.o: $(hdrdir)/ruby/internal/intern/process.h +super.o: $(hdrdir)/ruby/internal/intern/random.h +super.o: $(hdrdir)/ruby/internal/intern/range.h +super.o: $(hdrdir)/ruby/internal/intern/rational.h +super.o: $(hdrdir)/ruby/internal/intern/re.h +super.o: $(hdrdir)/ruby/internal/intern/ruby.h +super.o: $(hdrdir)/ruby/internal/intern/select.h +super.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +super.o: $(hdrdir)/ruby/internal/intern/signal.h +super.o: $(hdrdir)/ruby/internal/intern/sprintf.h +super.o: $(hdrdir)/ruby/internal/intern/string.h +super.o: $(hdrdir)/ruby/internal/intern/struct.h +super.o: $(hdrdir)/ruby/internal/intern/thread.h +super.o: $(hdrdir)/ruby/internal/intern/time.h +super.o: $(hdrdir)/ruby/internal/intern/variable.h +super.o: $(hdrdir)/ruby/internal/intern/vm.h +super.o: $(hdrdir)/ruby/internal/interpreter.h +super.o: $(hdrdir)/ruby/internal/iterator.h +super.o: $(hdrdir)/ruby/internal/memory.h +super.o: $(hdrdir)/ruby/internal/method.h +super.o: $(hdrdir)/ruby/internal/module.h +super.o: $(hdrdir)/ruby/internal/newobj.h +super.o: $(hdrdir)/ruby/internal/rgengc.h +super.o: $(hdrdir)/ruby/internal/scan_args.h +super.o: $(hdrdir)/ruby/internal/special_consts.h +super.o: $(hdrdir)/ruby/internal/static_assert.h +super.o: $(hdrdir)/ruby/internal/stdalign.h +super.o: $(hdrdir)/ruby/internal/stdbool.h +super.o: $(hdrdir)/ruby/internal/symbol.h +super.o: $(hdrdir)/ruby/internal/value.h +super.o: $(hdrdir)/ruby/internal/value_type.h +super.o: $(hdrdir)/ruby/internal/variable.h +super.o: $(hdrdir)/ruby/internal/warning_push.h +super.o: $(hdrdir)/ruby/internal/xmalloc.h super.o: $(hdrdir)/ruby/missing.h super.o: $(hdrdir)/ruby/ruby.h super.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/random/depend b/ruby/ext/-test-/random/depend new file mode 100644 index 000000000..7cef34f11 --- /dev/null +++ b/ruby/ext/-test-/random/depend @@ -0,0 +1,320 @@ +# AUTOGENERATED DEPENDENCIES START +init.o: $(RUBY_EXTCONF_H) +init.o: $(arch_hdrdir)/ruby/config.h +init.o: $(hdrdir)/ruby.h +init.o: $(hdrdir)/ruby/assert.h +init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h +init.o: $(hdrdir)/ruby/defines.h +init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h +init.o: $(hdrdir)/ruby/missing.h +init.o: $(hdrdir)/ruby/ruby.h +init.o: $(hdrdir)/ruby/st.h +init.o: $(hdrdir)/ruby/subst.h +init.o: init.c +loop.o: $(RUBY_EXTCONF_H) +loop.o: $(arch_hdrdir)/ruby/config.h +loop.o: $(hdrdir)/ruby/assert.h +loop.o: $(hdrdir)/ruby/backward.h +loop.o: $(hdrdir)/ruby/backward/2/assume.h +loop.o: $(hdrdir)/ruby/backward/2/attributes.h +loop.o: $(hdrdir)/ruby/backward/2/bool.h +loop.o: $(hdrdir)/ruby/backward/2/inttypes.h +loop.o: $(hdrdir)/ruby/backward/2/limits.h +loop.o: $(hdrdir)/ruby/backward/2/long_long.h +loop.o: $(hdrdir)/ruby/backward/2/stdalign.h +loop.o: $(hdrdir)/ruby/backward/2/stdarg.h +loop.o: $(hdrdir)/ruby/defines.h +loop.o: $(hdrdir)/ruby/intern.h +loop.o: $(hdrdir)/ruby/internal/anyargs.h +loop.o: $(hdrdir)/ruby/internal/arithmetic.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/char.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/double.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/int.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/long.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/short.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +loop.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +loop.o: $(hdrdir)/ruby/internal/assume.h +loop.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +loop.o: $(hdrdir)/ruby/internal/attr/artificial.h +loop.o: $(hdrdir)/ruby/internal/attr/cold.h +loop.o: $(hdrdir)/ruby/internal/attr/const.h +loop.o: $(hdrdir)/ruby/internal/attr/constexpr.h +loop.o: $(hdrdir)/ruby/internal/attr/deprecated.h +loop.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +loop.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +loop.o: $(hdrdir)/ruby/internal/attr/error.h +loop.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +loop.o: $(hdrdir)/ruby/internal/attr/forceinline.h +loop.o: $(hdrdir)/ruby/internal/attr/format.h +loop.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +loop.o: $(hdrdir)/ruby/internal/attr/noalias.h +loop.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +loop.o: $(hdrdir)/ruby/internal/attr/noexcept.h +loop.o: $(hdrdir)/ruby/internal/attr/noinline.h +loop.o: $(hdrdir)/ruby/internal/attr/nonnull.h +loop.o: $(hdrdir)/ruby/internal/attr/noreturn.h +loop.o: $(hdrdir)/ruby/internal/attr/pure.h +loop.o: $(hdrdir)/ruby/internal/attr/restrict.h +loop.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +loop.o: $(hdrdir)/ruby/internal/attr/warning.h +loop.o: $(hdrdir)/ruby/internal/attr/weakref.h +loop.o: $(hdrdir)/ruby/internal/cast.h +loop.o: $(hdrdir)/ruby/internal/compiler_is.h +loop.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +loop.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +loop.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +loop.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +loop.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +loop.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +loop.o: $(hdrdir)/ruby/internal/compiler_since.h +loop.o: $(hdrdir)/ruby/internal/config.h +loop.o: $(hdrdir)/ruby/internal/constant_p.h +loop.o: $(hdrdir)/ruby/internal/core.h +loop.o: $(hdrdir)/ruby/internal/core/rarray.h +loop.o: $(hdrdir)/ruby/internal/core/rbasic.h +loop.o: $(hdrdir)/ruby/internal/core/rbignum.h +loop.o: $(hdrdir)/ruby/internal/core/rclass.h +loop.o: $(hdrdir)/ruby/internal/core/rdata.h +loop.o: $(hdrdir)/ruby/internal/core/rfile.h +loop.o: $(hdrdir)/ruby/internal/core/rhash.h +loop.o: $(hdrdir)/ruby/internal/core/robject.h +loop.o: $(hdrdir)/ruby/internal/core/rregexp.h +loop.o: $(hdrdir)/ruby/internal/core/rstring.h +loop.o: $(hdrdir)/ruby/internal/core/rstruct.h +loop.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +loop.o: $(hdrdir)/ruby/internal/ctype.h +loop.o: $(hdrdir)/ruby/internal/dllexport.h +loop.o: $(hdrdir)/ruby/internal/dosish.h +loop.o: $(hdrdir)/ruby/internal/error.h +loop.o: $(hdrdir)/ruby/internal/eval.h +loop.o: $(hdrdir)/ruby/internal/event.h +loop.o: $(hdrdir)/ruby/internal/fl_type.h +loop.o: $(hdrdir)/ruby/internal/gc.h +loop.o: $(hdrdir)/ruby/internal/glob.h +loop.o: $(hdrdir)/ruby/internal/globals.h +loop.o: $(hdrdir)/ruby/internal/has/attribute.h +loop.o: $(hdrdir)/ruby/internal/has/builtin.h +loop.o: $(hdrdir)/ruby/internal/has/c_attribute.h +loop.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +loop.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +loop.o: $(hdrdir)/ruby/internal/has/extension.h +loop.o: $(hdrdir)/ruby/internal/has/feature.h +loop.o: $(hdrdir)/ruby/internal/has/warning.h +loop.o: $(hdrdir)/ruby/internal/intern/array.h +loop.o: $(hdrdir)/ruby/internal/intern/bignum.h +loop.o: $(hdrdir)/ruby/internal/intern/class.h +loop.o: $(hdrdir)/ruby/internal/intern/compar.h +loop.o: $(hdrdir)/ruby/internal/intern/complex.h +loop.o: $(hdrdir)/ruby/internal/intern/cont.h +loop.o: $(hdrdir)/ruby/internal/intern/dir.h +loop.o: $(hdrdir)/ruby/internal/intern/enum.h +loop.o: $(hdrdir)/ruby/internal/intern/enumerator.h +loop.o: $(hdrdir)/ruby/internal/intern/error.h +loop.o: $(hdrdir)/ruby/internal/intern/eval.h +loop.o: $(hdrdir)/ruby/internal/intern/file.h +loop.o: $(hdrdir)/ruby/internal/intern/gc.h +loop.o: $(hdrdir)/ruby/internal/intern/hash.h +loop.o: $(hdrdir)/ruby/internal/intern/io.h +loop.o: $(hdrdir)/ruby/internal/intern/load.h +loop.o: $(hdrdir)/ruby/internal/intern/marshal.h +loop.o: $(hdrdir)/ruby/internal/intern/numeric.h +loop.o: $(hdrdir)/ruby/internal/intern/object.h +loop.o: $(hdrdir)/ruby/internal/intern/parse.h +loop.o: $(hdrdir)/ruby/internal/intern/proc.h +loop.o: $(hdrdir)/ruby/internal/intern/process.h +loop.o: $(hdrdir)/ruby/internal/intern/random.h +loop.o: $(hdrdir)/ruby/internal/intern/range.h +loop.o: $(hdrdir)/ruby/internal/intern/rational.h +loop.o: $(hdrdir)/ruby/internal/intern/re.h +loop.o: $(hdrdir)/ruby/internal/intern/ruby.h +loop.o: $(hdrdir)/ruby/internal/intern/select.h +loop.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +loop.o: $(hdrdir)/ruby/internal/intern/signal.h +loop.o: $(hdrdir)/ruby/internal/intern/sprintf.h +loop.o: $(hdrdir)/ruby/internal/intern/string.h +loop.o: $(hdrdir)/ruby/internal/intern/struct.h +loop.o: $(hdrdir)/ruby/internal/intern/thread.h +loop.o: $(hdrdir)/ruby/internal/intern/time.h +loop.o: $(hdrdir)/ruby/internal/intern/variable.h +loop.o: $(hdrdir)/ruby/internal/intern/vm.h +loop.o: $(hdrdir)/ruby/internal/interpreter.h +loop.o: $(hdrdir)/ruby/internal/iterator.h +loop.o: $(hdrdir)/ruby/internal/memory.h +loop.o: $(hdrdir)/ruby/internal/method.h +loop.o: $(hdrdir)/ruby/internal/module.h +loop.o: $(hdrdir)/ruby/internal/newobj.h +loop.o: $(hdrdir)/ruby/internal/rgengc.h +loop.o: $(hdrdir)/ruby/internal/scan_args.h +loop.o: $(hdrdir)/ruby/internal/special_consts.h +loop.o: $(hdrdir)/ruby/internal/static_assert.h +loop.o: $(hdrdir)/ruby/internal/stdalign.h +loop.o: $(hdrdir)/ruby/internal/stdbool.h +loop.o: $(hdrdir)/ruby/internal/symbol.h +loop.o: $(hdrdir)/ruby/internal/value.h +loop.o: $(hdrdir)/ruby/internal/value_type.h +loop.o: $(hdrdir)/ruby/internal/variable.h +loop.o: $(hdrdir)/ruby/internal/warning_push.h +loop.o: $(hdrdir)/ruby/internal/xmalloc.h +loop.o: $(hdrdir)/ruby/missing.h +loop.o: $(hdrdir)/ruby/random.h +loop.o: $(hdrdir)/ruby/ruby.h +loop.o: $(hdrdir)/ruby/st.h +loop.o: $(hdrdir)/ruby/subst.h +loop.o: loop.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/-test-/random/extconf.rb b/ruby/ext/-test-/random/extconf.rb new file mode 100644 index 000000000..d786b15db --- /dev/null +++ b/ruby/ext/-test-/random/extconf.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: false +require_relative "../auto_ext.rb" +auto_ext(inc: true) diff --git a/ruby/ext/-test-/random/init.c b/ruby/ext/-test-/random/init.c new file mode 100644 index 000000000..320cba0ad --- /dev/null +++ b/ruby/ext/-test-/random/init.c @@ -0,0 +1,11 @@ +#include "ruby.h" + +#define init(n) {void Init_random_##n(VALUE mod, VALUE base); Init_random_##n(mod, base);} + +void +Init_random(void) +{ + VALUE base = rb_const_get(rb_cRandom, rb_intern_const("Base")); + VALUE mod = rb_define_module_under(rb_define_module("Bug"), "Random"); + TEST_INIT_FUNCS(init); +} diff --git a/ruby/ext/-test-/random/loop.c b/ruby/ext/-test-/random/loop.c new file mode 100644 index 000000000..057209640 --- /dev/null +++ b/ruby/ext/-test-/random/loop.c @@ -0,0 +1,110 @@ +#include "ruby/random.h" + +static const uint32_t max_seeds = 1024; + +typedef struct { + rb_random_t base; + uint32_t num, idx, *buf; +} rand_loop_t; + +RB_RANDOM_INTERFACE_DECLARE_WITH_REAL(loop); +static const rb_random_interface_t random_loop_if = { + 32, + RB_RANDOM_INTERFACE_DEFINE_WITH_REAL(loop) +}; + +static size_t +random_loop_memsize(const void *ptr) +{ + const rand_loop_t *r = ptr; + return sizeof(*r) + r->num * sizeof(r->buf[0]); +} + +static rb_random_data_type_t random_loop_type = { + "random/loop", + { + rb_random_mark, + RUBY_TYPED_DEFAULT_FREE, + random_loop_memsize, + }, + RB_RANDOM_PARENT, + (void *)&random_loop_if, + RUBY_TYPED_FREE_IMMEDIATELY +}; + + +static VALUE +loop_alloc(VALUE klass) +{ + rand_loop_t *rnd; + VALUE obj = TypedData_Make_Struct(klass, rand_loop_t, &random_loop_type, rnd); + rb_random_base_init(&rnd->base); + return obj; +} + +static void +loop_init(rb_random_t *rnd, const uint32_t *buf, size_t len) +{ + rand_loop_t *r = (rand_loop_t *)rnd; + + if (len > max_seeds) len = max_seeds; + + REALLOC_N(r->buf, uint32_t, len); + MEMCPY(r->buf, buf, uint32_t, (r->num = (uint32_t)len)); +} + +static void +loop_get_bytes(rb_random_t *rnd, void *p, size_t n) +{ + uint8_t *buf = p; + while (n > 0) { + uint32_t x = loop_get_int32(rnd); + switch (n % 4) { + case 0: + *buf++ = (uint8_t)x; + n--; + /* FALLTHROUGH */ + case 3: + *buf++ = (uint8_t)x; + n--; + /* FALLTHROUGH */ + case 2: + *buf++ = (uint8_t)x; + n--; + /* FALLTHROUGH */ + case 1: + *buf++ = (uint8_t)x; + n--; + } + } +} + +static uint32_t +loop_get_int32(rb_random_t *rnd) +{ + rand_loop_t *r = (rand_loop_t *)rnd; + if (r->idx < r->num) { + uint32_t x = r->buf[r->idx++]; + if (r->idx >= r->num) r->idx = 0; + return x; + } + else if (r->num) { + return r->buf[r->idx = 0]; + } + return 0; +} + +static double +loop_get_real(rb_random_t *rnd, int excl) +{ + uint32_t a = loop_get_int32(rnd); + return ldexp(a, -16); +} + +void +Init_random_loop(VALUE mod, VALUE base) +{ + VALUE c = rb_define_class_under(mod, "Loop", base); + rb_define_alloc_func(c, loop_alloc); + RB_RANDOM_DATA_INIT_PARENT(random_loop_type); +} diff --git a/ruby/ext/-test-/rational/depend b/ruby/ext/-test-/rational/depend index 39e65933f..3fbe6e0a0 100644 --- a/ruby/ext/-test-/rational/depend +++ b/ruby/ext/-test-/rational/depend @@ -5,15 +5,173 @@ rat.o: rat.c $(top_srcdir)/internal.h # AUTOGENERATED DEPENDENCIES START rat.o: $(RUBY_EXTCONF_H) rat.o: $(arch_hdrdir)/ruby/config.h -rat.o: $(hdrdir)/ruby.h rat.o: $(hdrdir)/ruby/assert.h rat.o: $(hdrdir)/ruby/backward.h +rat.o: $(hdrdir)/ruby/backward/2/assume.h +rat.o: $(hdrdir)/ruby/backward/2/attributes.h +rat.o: $(hdrdir)/ruby/backward/2/bool.h +rat.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +rat.o: $(hdrdir)/ruby/backward/2/inttypes.h +rat.o: $(hdrdir)/ruby/backward/2/limits.h +rat.o: $(hdrdir)/ruby/backward/2/long_long.h +rat.o: $(hdrdir)/ruby/backward/2/stdalign.h +rat.o: $(hdrdir)/ruby/backward/2/stdarg.h rat.o: $(hdrdir)/ruby/defines.h rat.o: $(hdrdir)/ruby/intern.h +rat.o: $(hdrdir)/ruby/internal/anyargs.h +rat.o: $(hdrdir)/ruby/internal/arithmetic.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/char.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/double.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/int.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/long.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/short.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +rat.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +rat.o: $(hdrdir)/ruby/internal/assume.h +rat.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +rat.o: $(hdrdir)/ruby/internal/attr/artificial.h +rat.o: $(hdrdir)/ruby/internal/attr/cold.h +rat.o: $(hdrdir)/ruby/internal/attr/const.h +rat.o: $(hdrdir)/ruby/internal/attr/constexpr.h +rat.o: $(hdrdir)/ruby/internal/attr/deprecated.h +rat.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +rat.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +rat.o: $(hdrdir)/ruby/internal/attr/error.h +rat.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +rat.o: $(hdrdir)/ruby/internal/attr/forceinline.h +rat.o: $(hdrdir)/ruby/internal/attr/format.h +rat.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +rat.o: $(hdrdir)/ruby/internal/attr/noalias.h +rat.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +rat.o: $(hdrdir)/ruby/internal/attr/noexcept.h +rat.o: $(hdrdir)/ruby/internal/attr/noinline.h +rat.o: $(hdrdir)/ruby/internal/attr/nonnull.h +rat.o: $(hdrdir)/ruby/internal/attr/noreturn.h +rat.o: $(hdrdir)/ruby/internal/attr/pure.h +rat.o: $(hdrdir)/ruby/internal/attr/restrict.h +rat.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +rat.o: $(hdrdir)/ruby/internal/attr/warning.h +rat.o: $(hdrdir)/ruby/internal/attr/weakref.h +rat.o: $(hdrdir)/ruby/internal/cast.h +rat.o: $(hdrdir)/ruby/internal/compiler_is.h +rat.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +rat.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +rat.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +rat.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +rat.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +rat.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +rat.o: $(hdrdir)/ruby/internal/compiler_since.h +rat.o: $(hdrdir)/ruby/internal/config.h +rat.o: $(hdrdir)/ruby/internal/constant_p.h +rat.o: $(hdrdir)/ruby/internal/core.h +rat.o: $(hdrdir)/ruby/internal/core/rarray.h +rat.o: $(hdrdir)/ruby/internal/core/rbasic.h +rat.o: $(hdrdir)/ruby/internal/core/rbignum.h +rat.o: $(hdrdir)/ruby/internal/core/rclass.h +rat.o: $(hdrdir)/ruby/internal/core/rdata.h +rat.o: $(hdrdir)/ruby/internal/core/rfile.h +rat.o: $(hdrdir)/ruby/internal/core/rhash.h +rat.o: $(hdrdir)/ruby/internal/core/robject.h +rat.o: $(hdrdir)/ruby/internal/core/rregexp.h +rat.o: $(hdrdir)/ruby/internal/core/rstring.h +rat.o: $(hdrdir)/ruby/internal/core/rstruct.h +rat.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +rat.o: $(hdrdir)/ruby/internal/ctype.h +rat.o: $(hdrdir)/ruby/internal/dllexport.h +rat.o: $(hdrdir)/ruby/internal/dosish.h +rat.o: $(hdrdir)/ruby/internal/error.h +rat.o: $(hdrdir)/ruby/internal/eval.h +rat.o: $(hdrdir)/ruby/internal/event.h +rat.o: $(hdrdir)/ruby/internal/fl_type.h +rat.o: $(hdrdir)/ruby/internal/gc.h +rat.o: $(hdrdir)/ruby/internal/glob.h +rat.o: $(hdrdir)/ruby/internal/globals.h +rat.o: $(hdrdir)/ruby/internal/has/attribute.h +rat.o: $(hdrdir)/ruby/internal/has/builtin.h +rat.o: $(hdrdir)/ruby/internal/has/c_attribute.h +rat.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +rat.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +rat.o: $(hdrdir)/ruby/internal/has/extension.h +rat.o: $(hdrdir)/ruby/internal/has/feature.h +rat.o: $(hdrdir)/ruby/internal/has/warning.h +rat.o: $(hdrdir)/ruby/internal/intern/array.h +rat.o: $(hdrdir)/ruby/internal/intern/bignum.h +rat.o: $(hdrdir)/ruby/internal/intern/class.h +rat.o: $(hdrdir)/ruby/internal/intern/compar.h +rat.o: $(hdrdir)/ruby/internal/intern/complex.h +rat.o: $(hdrdir)/ruby/internal/intern/cont.h +rat.o: $(hdrdir)/ruby/internal/intern/dir.h +rat.o: $(hdrdir)/ruby/internal/intern/enum.h +rat.o: $(hdrdir)/ruby/internal/intern/enumerator.h +rat.o: $(hdrdir)/ruby/internal/intern/error.h +rat.o: $(hdrdir)/ruby/internal/intern/eval.h +rat.o: $(hdrdir)/ruby/internal/intern/file.h +rat.o: $(hdrdir)/ruby/internal/intern/gc.h +rat.o: $(hdrdir)/ruby/internal/intern/hash.h +rat.o: $(hdrdir)/ruby/internal/intern/io.h +rat.o: $(hdrdir)/ruby/internal/intern/load.h +rat.o: $(hdrdir)/ruby/internal/intern/marshal.h +rat.o: $(hdrdir)/ruby/internal/intern/numeric.h +rat.o: $(hdrdir)/ruby/internal/intern/object.h +rat.o: $(hdrdir)/ruby/internal/intern/parse.h +rat.o: $(hdrdir)/ruby/internal/intern/proc.h +rat.o: $(hdrdir)/ruby/internal/intern/process.h +rat.o: $(hdrdir)/ruby/internal/intern/random.h +rat.o: $(hdrdir)/ruby/internal/intern/range.h +rat.o: $(hdrdir)/ruby/internal/intern/rational.h +rat.o: $(hdrdir)/ruby/internal/intern/re.h +rat.o: $(hdrdir)/ruby/internal/intern/ruby.h +rat.o: $(hdrdir)/ruby/internal/intern/select.h +rat.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +rat.o: $(hdrdir)/ruby/internal/intern/signal.h +rat.o: $(hdrdir)/ruby/internal/intern/sprintf.h +rat.o: $(hdrdir)/ruby/internal/intern/string.h +rat.o: $(hdrdir)/ruby/internal/intern/struct.h +rat.o: $(hdrdir)/ruby/internal/intern/thread.h +rat.o: $(hdrdir)/ruby/internal/intern/time.h +rat.o: $(hdrdir)/ruby/internal/intern/variable.h +rat.o: $(hdrdir)/ruby/internal/intern/vm.h +rat.o: $(hdrdir)/ruby/internal/interpreter.h +rat.o: $(hdrdir)/ruby/internal/iterator.h +rat.o: $(hdrdir)/ruby/internal/memory.h +rat.o: $(hdrdir)/ruby/internal/method.h +rat.o: $(hdrdir)/ruby/internal/module.h +rat.o: $(hdrdir)/ruby/internal/newobj.h +rat.o: $(hdrdir)/ruby/internal/rgengc.h +rat.o: $(hdrdir)/ruby/internal/scan_args.h +rat.o: $(hdrdir)/ruby/internal/special_consts.h +rat.o: $(hdrdir)/ruby/internal/static_assert.h +rat.o: $(hdrdir)/ruby/internal/stdalign.h +rat.o: $(hdrdir)/ruby/internal/stdbool.h +rat.o: $(hdrdir)/ruby/internal/symbol.h +rat.o: $(hdrdir)/ruby/internal/value.h +rat.o: $(hdrdir)/ruby/internal/value_type.h +rat.o: $(hdrdir)/ruby/internal/variable.h +rat.o: $(hdrdir)/ruby/internal/warning_push.h +rat.o: $(hdrdir)/ruby/internal/xmalloc.h rat.o: $(hdrdir)/ruby/missing.h rat.o: $(hdrdir)/ruby/ruby.h rat.o: $(hdrdir)/ruby/st.h rat.o: $(hdrdir)/ruby/subst.h -rat.o: $(top_srcdir)/internal.h +rat.o: $(top_srcdir)/internal/bignum.h +rat.o: $(top_srcdir)/internal/bits.h +rat.o: $(top_srcdir)/internal/compilers.h +rat.o: $(top_srcdir)/internal/fixnum.h +rat.o: $(top_srcdir)/internal/gc.h +rat.o: $(top_srcdir)/internal/numeric.h +rat.o: $(top_srcdir)/internal/rational.h +rat.o: $(top_srcdir)/internal/serial.h +rat.o: $(top_srcdir)/internal/static_assert.h +rat.o: $(top_srcdir)/internal/vm.h +rat.o: $(top_srcdir)/internal/warnings.h +rat.o: $(top_srcdir)/ruby_assert.h rat.o: rat.c # AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/-test-/rational/rat.c b/ruby/ext/-test-/rational/rat.c index 772546fca..6489fe3d7 100644 --- a/ruby/ext/-test-/rational/rat.c +++ b/ruby/ext/-test-/rational/rat.c @@ -1,4 +1,4 @@ -#include "internal.h" +#include "internal/rational.h" #if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H) static VALUE @@ -14,14 +14,14 @@ big(VALUE x) #endif static VALUE -gcd_normal(VALUE x, VALUE y) +gcd_normal(VALUE klass, VALUE x, VALUE y) { return rb_big_norm(rb_gcd_normal(rb_to_int(x), rb_to_int(y))); } #if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H) static VALUE -gcd_gmp(VALUE x, VALUE y) +gcd_gmp(VALUE klass, VALUE x, VALUE y) { return rb_big_norm(rb_gcd_gmp(big(x), big(y))); } @@ -29,9 +29,20 @@ gcd_gmp(VALUE x, VALUE y) #define gcd_gmp rb_f_notimplement #endif +static VALUE +s_rational_raw(VALUE klass, VALUE x, VALUE y) +{ + return rb_rational_raw(x, y); +} + void -Init_rational(VALUE klass) +Init_rational(void) { - rb_define_method(rb_cInteger, "gcd_normal", gcd_normal, 1); - rb_define_method(rb_cInteger, "gcd_gmp", gcd_gmp, 1); + VALUE mBug = rb_define_module("Bug"); + VALUE klass = rb_define_module_under(mBug, "Rational"); + + rb_define_singleton_method(klass, "gcd_normal", gcd_normal, 2); + rb_define_singleton_method(klass, "gcd_gmp", gcd_gmp, 2); + + rb_define_singleton_method(klass, "raw", s_rational_raw, 2); } diff --git a/ruby/ext/-test-/rb_call_super_kw/depend b/ruby/ext/-test-/rb_call_super_kw/depend index f65dcf969..a8126a9ef 100644 --- a/ruby/ext/-test-/rb_call_super_kw/depend +++ b/ruby/ext/-test-/rb_call_super_kw/depend @@ -4,8 +4,155 @@ rb_call_super_kw.o: $(arch_hdrdir)/ruby/config.h rb_call_super_kw.o: $(hdrdir)/ruby.h rb_call_super_kw.o: $(hdrdir)/ruby/assert.h rb_call_super_kw.o: $(hdrdir)/ruby/backward.h +rb_call_super_kw.o: $(hdrdir)/ruby/backward/2/assume.h +rb_call_super_kw.o: $(hdrdir)/ruby/backward/2/attributes.h +rb_call_super_kw.o: $(hdrdir)/ruby/backward/2/bool.h +rb_call_super_kw.o: $(hdrdir)/ruby/backward/2/inttypes.h +rb_call_super_kw.o: $(hdrdir)/ruby/backward/2/limits.h +rb_call_super_kw.o: $(hdrdir)/ruby/backward/2/long_long.h +rb_call_super_kw.o: $(hdrdir)/ruby/backward/2/stdalign.h +rb_call_super_kw.o: $(hdrdir)/ruby/backward/2/stdarg.h rb_call_super_kw.o: $(hdrdir)/ruby/defines.h rb_call_super_kw.o: $(hdrdir)/ruby/intern.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/anyargs.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/char.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/double.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/int.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/long.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/short.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/assume.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/artificial.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/cold.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/const.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/constexpr.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/deprecated.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/error.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/forceinline.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/format.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/noalias.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/noexcept.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/noinline.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/nonnull.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/noreturn.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/pure.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/restrict.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/warning.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/attr/weakref.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/cast.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/compiler_is.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/compiler_since.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/config.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/constant_p.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core/rarray.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core/rbasic.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core/rbignum.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core/rclass.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core/rdata.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core/rfile.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core/rhash.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core/robject.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core/rregexp.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core/rstring.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core/rstruct.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/ctype.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/dllexport.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/dosish.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/error.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/eval.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/event.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/fl_type.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/gc.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/glob.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/globals.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/has/attribute.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/has/builtin.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/has/c_attribute.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/has/extension.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/has/feature.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/has/warning.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/array.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/bignum.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/class.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/compar.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/complex.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/cont.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/dir.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/enum.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/enumerator.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/error.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/eval.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/file.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/gc.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/hash.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/io.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/load.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/marshal.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/numeric.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/object.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/parse.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/proc.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/process.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/random.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/range.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/rational.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/re.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/ruby.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/select.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/signal.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/sprintf.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/string.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/struct.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/thread.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/time.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/variable.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/intern/vm.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/interpreter.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/iterator.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/memory.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/method.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/module.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/newobj.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/rgengc.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/scan_args.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/special_consts.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/static_assert.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/stdalign.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/stdbool.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/symbol.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/value.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/value_type.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/variable.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/warning_push.h +rb_call_super_kw.o: $(hdrdir)/ruby/internal/xmalloc.h rb_call_super_kw.o: $(hdrdir)/ruby/missing.h rb_call_super_kw.o: $(hdrdir)/ruby/ruby.h rb_call_super_kw.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/recursion/depend b/ruby/ext/-test-/recursion/depend index bf8005724..12d7ae602 100644 --- a/ruby/ext/-test-/recursion/depend +++ b/ruby/ext/-test-/recursion/depend @@ -4,8 +4,155 @@ recursion.o: $(arch_hdrdir)/ruby/config.h recursion.o: $(hdrdir)/ruby.h recursion.o: $(hdrdir)/ruby/assert.h recursion.o: $(hdrdir)/ruby/backward.h +recursion.o: $(hdrdir)/ruby/backward/2/assume.h +recursion.o: $(hdrdir)/ruby/backward/2/attributes.h +recursion.o: $(hdrdir)/ruby/backward/2/bool.h +recursion.o: $(hdrdir)/ruby/backward/2/inttypes.h +recursion.o: $(hdrdir)/ruby/backward/2/limits.h +recursion.o: $(hdrdir)/ruby/backward/2/long_long.h +recursion.o: $(hdrdir)/ruby/backward/2/stdalign.h +recursion.o: $(hdrdir)/ruby/backward/2/stdarg.h recursion.o: $(hdrdir)/ruby/defines.h recursion.o: $(hdrdir)/ruby/intern.h +recursion.o: $(hdrdir)/ruby/internal/anyargs.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/char.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/double.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/int.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/long.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/short.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +recursion.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +recursion.o: $(hdrdir)/ruby/internal/assume.h +recursion.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +recursion.o: $(hdrdir)/ruby/internal/attr/artificial.h +recursion.o: $(hdrdir)/ruby/internal/attr/cold.h +recursion.o: $(hdrdir)/ruby/internal/attr/const.h +recursion.o: $(hdrdir)/ruby/internal/attr/constexpr.h +recursion.o: $(hdrdir)/ruby/internal/attr/deprecated.h +recursion.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +recursion.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +recursion.o: $(hdrdir)/ruby/internal/attr/error.h +recursion.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +recursion.o: $(hdrdir)/ruby/internal/attr/forceinline.h +recursion.o: $(hdrdir)/ruby/internal/attr/format.h +recursion.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +recursion.o: $(hdrdir)/ruby/internal/attr/noalias.h +recursion.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +recursion.o: $(hdrdir)/ruby/internal/attr/noexcept.h +recursion.o: $(hdrdir)/ruby/internal/attr/noinline.h +recursion.o: $(hdrdir)/ruby/internal/attr/nonnull.h +recursion.o: $(hdrdir)/ruby/internal/attr/noreturn.h +recursion.o: $(hdrdir)/ruby/internal/attr/pure.h +recursion.o: $(hdrdir)/ruby/internal/attr/restrict.h +recursion.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +recursion.o: $(hdrdir)/ruby/internal/attr/warning.h +recursion.o: $(hdrdir)/ruby/internal/attr/weakref.h +recursion.o: $(hdrdir)/ruby/internal/cast.h +recursion.o: $(hdrdir)/ruby/internal/compiler_is.h +recursion.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +recursion.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +recursion.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +recursion.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +recursion.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +recursion.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +recursion.o: $(hdrdir)/ruby/internal/compiler_since.h +recursion.o: $(hdrdir)/ruby/internal/config.h +recursion.o: $(hdrdir)/ruby/internal/constant_p.h +recursion.o: $(hdrdir)/ruby/internal/core.h +recursion.o: $(hdrdir)/ruby/internal/core/rarray.h +recursion.o: $(hdrdir)/ruby/internal/core/rbasic.h +recursion.o: $(hdrdir)/ruby/internal/core/rbignum.h +recursion.o: $(hdrdir)/ruby/internal/core/rclass.h +recursion.o: $(hdrdir)/ruby/internal/core/rdata.h +recursion.o: $(hdrdir)/ruby/internal/core/rfile.h +recursion.o: $(hdrdir)/ruby/internal/core/rhash.h +recursion.o: $(hdrdir)/ruby/internal/core/robject.h +recursion.o: $(hdrdir)/ruby/internal/core/rregexp.h +recursion.o: $(hdrdir)/ruby/internal/core/rstring.h +recursion.o: $(hdrdir)/ruby/internal/core/rstruct.h +recursion.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +recursion.o: $(hdrdir)/ruby/internal/ctype.h +recursion.o: $(hdrdir)/ruby/internal/dllexport.h +recursion.o: $(hdrdir)/ruby/internal/dosish.h +recursion.o: $(hdrdir)/ruby/internal/error.h +recursion.o: $(hdrdir)/ruby/internal/eval.h +recursion.o: $(hdrdir)/ruby/internal/event.h +recursion.o: $(hdrdir)/ruby/internal/fl_type.h +recursion.o: $(hdrdir)/ruby/internal/gc.h +recursion.o: $(hdrdir)/ruby/internal/glob.h +recursion.o: $(hdrdir)/ruby/internal/globals.h +recursion.o: $(hdrdir)/ruby/internal/has/attribute.h +recursion.o: $(hdrdir)/ruby/internal/has/builtin.h +recursion.o: $(hdrdir)/ruby/internal/has/c_attribute.h +recursion.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +recursion.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +recursion.o: $(hdrdir)/ruby/internal/has/extension.h +recursion.o: $(hdrdir)/ruby/internal/has/feature.h +recursion.o: $(hdrdir)/ruby/internal/has/warning.h +recursion.o: $(hdrdir)/ruby/internal/intern/array.h +recursion.o: $(hdrdir)/ruby/internal/intern/bignum.h +recursion.o: $(hdrdir)/ruby/internal/intern/class.h +recursion.o: $(hdrdir)/ruby/internal/intern/compar.h +recursion.o: $(hdrdir)/ruby/internal/intern/complex.h +recursion.o: $(hdrdir)/ruby/internal/intern/cont.h +recursion.o: $(hdrdir)/ruby/internal/intern/dir.h +recursion.o: $(hdrdir)/ruby/internal/intern/enum.h +recursion.o: $(hdrdir)/ruby/internal/intern/enumerator.h +recursion.o: $(hdrdir)/ruby/internal/intern/error.h +recursion.o: $(hdrdir)/ruby/internal/intern/eval.h +recursion.o: $(hdrdir)/ruby/internal/intern/file.h +recursion.o: $(hdrdir)/ruby/internal/intern/gc.h +recursion.o: $(hdrdir)/ruby/internal/intern/hash.h +recursion.o: $(hdrdir)/ruby/internal/intern/io.h +recursion.o: $(hdrdir)/ruby/internal/intern/load.h +recursion.o: $(hdrdir)/ruby/internal/intern/marshal.h +recursion.o: $(hdrdir)/ruby/internal/intern/numeric.h +recursion.o: $(hdrdir)/ruby/internal/intern/object.h +recursion.o: $(hdrdir)/ruby/internal/intern/parse.h +recursion.o: $(hdrdir)/ruby/internal/intern/proc.h +recursion.o: $(hdrdir)/ruby/internal/intern/process.h +recursion.o: $(hdrdir)/ruby/internal/intern/random.h +recursion.o: $(hdrdir)/ruby/internal/intern/range.h +recursion.o: $(hdrdir)/ruby/internal/intern/rational.h +recursion.o: $(hdrdir)/ruby/internal/intern/re.h +recursion.o: $(hdrdir)/ruby/internal/intern/ruby.h +recursion.o: $(hdrdir)/ruby/internal/intern/select.h +recursion.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +recursion.o: $(hdrdir)/ruby/internal/intern/signal.h +recursion.o: $(hdrdir)/ruby/internal/intern/sprintf.h +recursion.o: $(hdrdir)/ruby/internal/intern/string.h +recursion.o: $(hdrdir)/ruby/internal/intern/struct.h +recursion.o: $(hdrdir)/ruby/internal/intern/thread.h +recursion.o: $(hdrdir)/ruby/internal/intern/time.h +recursion.o: $(hdrdir)/ruby/internal/intern/variable.h +recursion.o: $(hdrdir)/ruby/internal/intern/vm.h +recursion.o: $(hdrdir)/ruby/internal/interpreter.h +recursion.o: $(hdrdir)/ruby/internal/iterator.h +recursion.o: $(hdrdir)/ruby/internal/memory.h +recursion.o: $(hdrdir)/ruby/internal/method.h +recursion.o: $(hdrdir)/ruby/internal/module.h +recursion.o: $(hdrdir)/ruby/internal/newobj.h +recursion.o: $(hdrdir)/ruby/internal/rgengc.h +recursion.o: $(hdrdir)/ruby/internal/scan_args.h +recursion.o: $(hdrdir)/ruby/internal/special_consts.h +recursion.o: $(hdrdir)/ruby/internal/static_assert.h +recursion.o: $(hdrdir)/ruby/internal/stdalign.h +recursion.o: $(hdrdir)/ruby/internal/stdbool.h +recursion.o: $(hdrdir)/ruby/internal/symbol.h +recursion.o: $(hdrdir)/ruby/internal/value.h +recursion.o: $(hdrdir)/ruby/internal/value_type.h +recursion.o: $(hdrdir)/ruby/internal/variable.h +recursion.o: $(hdrdir)/ruby/internal/warning_push.h +recursion.o: $(hdrdir)/ruby/internal/xmalloc.h recursion.o: $(hdrdir)/ruby/missing.h recursion.o: $(hdrdir)/ruby/ruby.h recursion.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/regexp/depend b/ruby/ext/-test-/regexp/depend index 7c88e1235..c46d87624 100644 --- a/ruby/ext/-test-/regexp/depend +++ b/ruby/ext/-test-/regexp/depend @@ -4,8 +4,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h @@ -16,8 +163,155 @@ parse_depth_limit.o: $(arch_hdrdir)/ruby/config.h parse_depth_limit.o: $(hdrdir)/ruby.h parse_depth_limit.o: $(hdrdir)/ruby/assert.h parse_depth_limit.o: $(hdrdir)/ruby/backward.h +parse_depth_limit.o: $(hdrdir)/ruby/backward/2/assume.h +parse_depth_limit.o: $(hdrdir)/ruby/backward/2/attributes.h +parse_depth_limit.o: $(hdrdir)/ruby/backward/2/bool.h +parse_depth_limit.o: $(hdrdir)/ruby/backward/2/inttypes.h +parse_depth_limit.o: $(hdrdir)/ruby/backward/2/limits.h +parse_depth_limit.o: $(hdrdir)/ruby/backward/2/long_long.h +parse_depth_limit.o: $(hdrdir)/ruby/backward/2/stdalign.h +parse_depth_limit.o: $(hdrdir)/ruby/backward/2/stdarg.h parse_depth_limit.o: $(hdrdir)/ruby/defines.h parse_depth_limit.o: $(hdrdir)/ruby/intern.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/anyargs.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/char.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/double.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/int.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/long.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/short.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/assume.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/artificial.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/cold.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/const.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/constexpr.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/deprecated.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/error.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/forceinline.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/format.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/noalias.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/noexcept.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/noinline.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/nonnull.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/noreturn.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/pure.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/restrict.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/warning.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/attr/weakref.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/cast.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/compiler_is.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/compiler_since.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/config.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/constant_p.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core/rarray.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core/rbasic.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core/rbignum.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core/rclass.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core/rdata.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core/rfile.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core/rhash.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core/robject.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core/rregexp.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core/rstring.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core/rstruct.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/ctype.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/dllexport.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/dosish.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/error.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/eval.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/event.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/fl_type.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/gc.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/glob.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/globals.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/has/attribute.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/has/builtin.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/has/c_attribute.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/has/extension.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/has/feature.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/has/warning.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/array.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/bignum.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/class.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/compar.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/complex.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/cont.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/dir.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/enum.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/enumerator.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/error.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/eval.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/file.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/gc.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/hash.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/io.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/load.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/marshal.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/numeric.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/object.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/parse.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/proc.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/process.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/random.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/range.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/rational.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/re.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/ruby.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/select.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/signal.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/sprintf.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/string.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/struct.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/thread.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/time.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/variable.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/intern/vm.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/interpreter.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/iterator.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/memory.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/method.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/module.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/newobj.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/rgengc.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/scan_args.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/special_consts.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/static_assert.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/stdalign.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/stdbool.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/symbol.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/value.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/value_type.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/variable.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/warning_push.h +parse_depth_limit.o: $(hdrdir)/ruby/internal/xmalloc.h parse_depth_limit.o: $(hdrdir)/ruby/missing.h parse_depth_limit.o: $(hdrdir)/ruby/onigmo.h parse_depth_limit.o: $(hdrdir)/ruby/ruby.h diff --git a/ruby/ext/-test-/scan_args/depend b/ruby/ext/-test-/scan_args/depend index c230961ae..99fd82ce3 100644 --- a/ruby/ext/-test-/scan_args/depend +++ b/ruby/ext/-test-/scan_args/depend @@ -4,8 +4,155 @@ scan_args.o: $(arch_hdrdir)/ruby/config.h scan_args.o: $(hdrdir)/ruby.h scan_args.o: $(hdrdir)/ruby/assert.h scan_args.o: $(hdrdir)/ruby/backward.h +scan_args.o: $(hdrdir)/ruby/backward/2/assume.h +scan_args.o: $(hdrdir)/ruby/backward/2/attributes.h +scan_args.o: $(hdrdir)/ruby/backward/2/bool.h +scan_args.o: $(hdrdir)/ruby/backward/2/inttypes.h +scan_args.o: $(hdrdir)/ruby/backward/2/limits.h +scan_args.o: $(hdrdir)/ruby/backward/2/long_long.h +scan_args.o: $(hdrdir)/ruby/backward/2/stdalign.h +scan_args.o: $(hdrdir)/ruby/backward/2/stdarg.h scan_args.o: $(hdrdir)/ruby/defines.h scan_args.o: $(hdrdir)/ruby/intern.h +scan_args.o: $(hdrdir)/ruby/internal/anyargs.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/char.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/double.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/int.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/long.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/short.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +scan_args.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +scan_args.o: $(hdrdir)/ruby/internal/assume.h +scan_args.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +scan_args.o: $(hdrdir)/ruby/internal/attr/artificial.h +scan_args.o: $(hdrdir)/ruby/internal/attr/cold.h +scan_args.o: $(hdrdir)/ruby/internal/attr/const.h +scan_args.o: $(hdrdir)/ruby/internal/attr/constexpr.h +scan_args.o: $(hdrdir)/ruby/internal/attr/deprecated.h +scan_args.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +scan_args.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +scan_args.o: $(hdrdir)/ruby/internal/attr/error.h +scan_args.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +scan_args.o: $(hdrdir)/ruby/internal/attr/forceinline.h +scan_args.o: $(hdrdir)/ruby/internal/attr/format.h +scan_args.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +scan_args.o: $(hdrdir)/ruby/internal/attr/noalias.h +scan_args.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +scan_args.o: $(hdrdir)/ruby/internal/attr/noexcept.h +scan_args.o: $(hdrdir)/ruby/internal/attr/noinline.h +scan_args.o: $(hdrdir)/ruby/internal/attr/nonnull.h +scan_args.o: $(hdrdir)/ruby/internal/attr/noreturn.h +scan_args.o: $(hdrdir)/ruby/internal/attr/pure.h +scan_args.o: $(hdrdir)/ruby/internal/attr/restrict.h +scan_args.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +scan_args.o: $(hdrdir)/ruby/internal/attr/warning.h +scan_args.o: $(hdrdir)/ruby/internal/attr/weakref.h +scan_args.o: $(hdrdir)/ruby/internal/cast.h +scan_args.o: $(hdrdir)/ruby/internal/compiler_is.h +scan_args.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +scan_args.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +scan_args.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +scan_args.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +scan_args.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +scan_args.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +scan_args.o: $(hdrdir)/ruby/internal/compiler_since.h +scan_args.o: $(hdrdir)/ruby/internal/config.h +scan_args.o: $(hdrdir)/ruby/internal/constant_p.h +scan_args.o: $(hdrdir)/ruby/internal/core.h +scan_args.o: $(hdrdir)/ruby/internal/core/rarray.h +scan_args.o: $(hdrdir)/ruby/internal/core/rbasic.h +scan_args.o: $(hdrdir)/ruby/internal/core/rbignum.h +scan_args.o: $(hdrdir)/ruby/internal/core/rclass.h +scan_args.o: $(hdrdir)/ruby/internal/core/rdata.h +scan_args.o: $(hdrdir)/ruby/internal/core/rfile.h +scan_args.o: $(hdrdir)/ruby/internal/core/rhash.h +scan_args.o: $(hdrdir)/ruby/internal/core/robject.h +scan_args.o: $(hdrdir)/ruby/internal/core/rregexp.h +scan_args.o: $(hdrdir)/ruby/internal/core/rstring.h +scan_args.o: $(hdrdir)/ruby/internal/core/rstruct.h +scan_args.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +scan_args.o: $(hdrdir)/ruby/internal/ctype.h +scan_args.o: $(hdrdir)/ruby/internal/dllexport.h +scan_args.o: $(hdrdir)/ruby/internal/dosish.h +scan_args.o: $(hdrdir)/ruby/internal/error.h +scan_args.o: $(hdrdir)/ruby/internal/eval.h +scan_args.o: $(hdrdir)/ruby/internal/event.h +scan_args.o: $(hdrdir)/ruby/internal/fl_type.h +scan_args.o: $(hdrdir)/ruby/internal/gc.h +scan_args.o: $(hdrdir)/ruby/internal/glob.h +scan_args.o: $(hdrdir)/ruby/internal/globals.h +scan_args.o: $(hdrdir)/ruby/internal/has/attribute.h +scan_args.o: $(hdrdir)/ruby/internal/has/builtin.h +scan_args.o: $(hdrdir)/ruby/internal/has/c_attribute.h +scan_args.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +scan_args.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +scan_args.o: $(hdrdir)/ruby/internal/has/extension.h +scan_args.o: $(hdrdir)/ruby/internal/has/feature.h +scan_args.o: $(hdrdir)/ruby/internal/has/warning.h +scan_args.o: $(hdrdir)/ruby/internal/intern/array.h +scan_args.o: $(hdrdir)/ruby/internal/intern/bignum.h +scan_args.o: $(hdrdir)/ruby/internal/intern/class.h +scan_args.o: $(hdrdir)/ruby/internal/intern/compar.h +scan_args.o: $(hdrdir)/ruby/internal/intern/complex.h +scan_args.o: $(hdrdir)/ruby/internal/intern/cont.h +scan_args.o: $(hdrdir)/ruby/internal/intern/dir.h +scan_args.o: $(hdrdir)/ruby/internal/intern/enum.h +scan_args.o: $(hdrdir)/ruby/internal/intern/enumerator.h +scan_args.o: $(hdrdir)/ruby/internal/intern/error.h +scan_args.o: $(hdrdir)/ruby/internal/intern/eval.h +scan_args.o: $(hdrdir)/ruby/internal/intern/file.h +scan_args.o: $(hdrdir)/ruby/internal/intern/gc.h +scan_args.o: $(hdrdir)/ruby/internal/intern/hash.h +scan_args.o: $(hdrdir)/ruby/internal/intern/io.h +scan_args.o: $(hdrdir)/ruby/internal/intern/load.h +scan_args.o: $(hdrdir)/ruby/internal/intern/marshal.h +scan_args.o: $(hdrdir)/ruby/internal/intern/numeric.h +scan_args.o: $(hdrdir)/ruby/internal/intern/object.h +scan_args.o: $(hdrdir)/ruby/internal/intern/parse.h +scan_args.o: $(hdrdir)/ruby/internal/intern/proc.h +scan_args.o: $(hdrdir)/ruby/internal/intern/process.h +scan_args.o: $(hdrdir)/ruby/internal/intern/random.h +scan_args.o: $(hdrdir)/ruby/internal/intern/range.h +scan_args.o: $(hdrdir)/ruby/internal/intern/rational.h +scan_args.o: $(hdrdir)/ruby/internal/intern/re.h +scan_args.o: $(hdrdir)/ruby/internal/intern/ruby.h +scan_args.o: $(hdrdir)/ruby/internal/intern/select.h +scan_args.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +scan_args.o: $(hdrdir)/ruby/internal/intern/signal.h +scan_args.o: $(hdrdir)/ruby/internal/intern/sprintf.h +scan_args.o: $(hdrdir)/ruby/internal/intern/string.h +scan_args.o: $(hdrdir)/ruby/internal/intern/struct.h +scan_args.o: $(hdrdir)/ruby/internal/intern/thread.h +scan_args.o: $(hdrdir)/ruby/internal/intern/time.h +scan_args.o: $(hdrdir)/ruby/internal/intern/variable.h +scan_args.o: $(hdrdir)/ruby/internal/intern/vm.h +scan_args.o: $(hdrdir)/ruby/internal/interpreter.h +scan_args.o: $(hdrdir)/ruby/internal/iterator.h +scan_args.o: $(hdrdir)/ruby/internal/memory.h +scan_args.o: $(hdrdir)/ruby/internal/method.h +scan_args.o: $(hdrdir)/ruby/internal/module.h +scan_args.o: $(hdrdir)/ruby/internal/newobj.h +scan_args.o: $(hdrdir)/ruby/internal/rgengc.h +scan_args.o: $(hdrdir)/ruby/internal/scan_args.h +scan_args.o: $(hdrdir)/ruby/internal/special_consts.h +scan_args.o: $(hdrdir)/ruby/internal/static_assert.h +scan_args.o: $(hdrdir)/ruby/internal/stdalign.h +scan_args.o: $(hdrdir)/ruby/internal/stdbool.h +scan_args.o: $(hdrdir)/ruby/internal/symbol.h +scan_args.o: $(hdrdir)/ruby/internal/value.h +scan_args.o: $(hdrdir)/ruby/internal/value_type.h +scan_args.o: $(hdrdir)/ruby/internal/variable.h +scan_args.o: $(hdrdir)/ruby/internal/warning_push.h +scan_args.o: $(hdrdir)/ruby/internal/xmalloc.h scan_args.o: $(hdrdir)/ruby/missing.h scan_args.o: $(hdrdir)/ruby/ruby.h scan_args.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/scan_args/scan_args.c b/ruby/ext/-test-/scan_args/scan_args.c index 9c374da66..8696aad3c 100644 --- a/ruby/ext/-test-/scan_args/scan_args.c +++ b/ruby/ext/-test-/scan_args/scan_args.c @@ -259,15 +259,6 @@ scan_args_k_lead_opt_hash(int argc, VALUE *argv, VALUE self) return rb_ary_new_from_values(numberof(args), args); } -static VALUE -scan_args_e_lead_opt_hash(int argc, VALUE *argv, VALUE self) -{ - VALUE args[4]; - int n = rb_scan_args_kw(RB_SCAN_ARGS_EMPTY_KEYWORDS, argc, argv, "11:", args+1, args+2, args+3); - args[0] = INT2NUM(n); - return rb_ary_new_from_values(numberof(args), args); -} - static VALUE scan_args_n_lead_opt_hash(int argc, VALUE *argv, VALUE self) { @@ -310,6 +301,5 @@ Init_scan_args(void) rb_define_singleton_method(module, "opt_var_trail_hash", scan_args_opt_var_trail_hash, -1); rb_define_singleton_method(module, "lead_opt_var_trail_hash", scan_args_lead_opt_var_trail_hash, -1); rb_define_singleton_method(module, "k_lead_opt_hash", scan_args_k_lead_opt_hash, -1); - rb_define_singleton_method(module, "e_lead_opt_hash", scan_args_e_lead_opt_hash, -1); rb_define_singleton_method(module, "n_lead_opt_hash", scan_args_n_lead_opt_hash, -1); } diff --git a/ruby/ext/-test-/st/foreach/depend b/ruby/ext/-test-/st/foreach/depend index 42d3909f4..612823079 100644 --- a/ruby/ext/-test-/st/foreach/depend +++ b/ruby/ext/-test-/st/foreach/depend @@ -4,8 +4,155 @@ foreach.o: $(arch_hdrdir)/ruby/config.h foreach.o: $(hdrdir)/ruby.h foreach.o: $(hdrdir)/ruby/assert.h foreach.o: $(hdrdir)/ruby/backward.h +foreach.o: $(hdrdir)/ruby/backward/2/assume.h +foreach.o: $(hdrdir)/ruby/backward/2/attributes.h +foreach.o: $(hdrdir)/ruby/backward/2/bool.h +foreach.o: $(hdrdir)/ruby/backward/2/inttypes.h +foreach.o: $(hdrdir)/ruby/backward/2/limits.h +foreach.o: $(hdrdir)/ruby/backward/2/long_long.h +foreach.o: $(hdrdir)/ruby/backward/2/stdalign.h +foreach.o: $(hdrdir)/ruby/backward/2/stdarg.h foreach.o: $(hdrdir)/ruby/defines.h foreach.o: $(hdrdir)/ruby/intern.h +foreach.o: $(hdrdir)/ruby/internal/anyargs.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/char.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/double.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/int.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/long.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/short.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +foreach.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +foreach.o: $(hdrdir)/ruby/internal/assume.h +foreach.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +foreach.o: $(hdrdir)/ruby/internal/attr/artificial.h +foreach.o: $(hdrdir)/ruby/internal/attr/cold.h +foreach.o: $(hdrdir)/ruby/internal/attr/const.h +foreach.o: $(hdrdir)/ruby/internal/attr/constexpr.h +foreach.o: $(hdrdir)/ruby/internal/attr/deprecated.h +foreach.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +foreach.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +foreach.o: $(hdrdir)/ruby/internal/attr/error.h +foreach.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +foreach.o: $(hdrdir)/ruby/internal/attr/forceinline.h +foreach.o: $(hdrdir)/ruby/internal/attr/format.h +foreach.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +foreach.o: $(hdrdir)/ruby/internal/attr/noalias.h +foreach.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +foreach.o: $(hdrdir)/ruby/internal/attr/noexcept.h +foreach.o: $(hdrdir)/ruby/internal/attr/noinline.h +foreach.o: $(hdrdir)/ruby/internal/attr/nonnull.h +foreach.o: $(hdrdir)/ruby/internal/attr/noreturn.h +foreach.o: $(hdrdir)/ruby/internal/attr/pure.h +foreach.o: $(hdrdir)/ruby/internal/attr/restrict.h +foreach.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +foreach.o: $(hdrdir)/ruby/internal/attr/warning.h +foreach.o: $(hdrdir)/ruby/internal/attr/weakref.h +foreach.o: $(hdrdir)/ruby/internal/cast.h +foreach.o: $(hdrdir)/ruby/internal/compiler_is.h +foreach.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +foreach.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +foreach.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +foreach.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +foreach.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +foreach.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +foreach.o: $(hdrdir)/ruby/internal/compiler_since.h +foreach.o: $(hdrdir)/ruby/internal/config.h +foreach.o: $(hdrdir)/ruby/internal/constant_p.h +foreach.o: $(hdrdir)/ruby/internal/core.h +foreach.o: $(hdrdir)/ruby/internal/core/rarray.h +foreach.o: $(hdrdir)/ruby/internal/core/rbasic.h +foreach.o: $(hdrdir)/ruby/internal/core/rbignum.h +foreach.o: $(hdrdir)/ruby/internal/core/rclass.h +foreach.o: $(hdrdir)/ruby/internal/core/rdata.h +foreach.o: $(hdrdir)/ruby/internal/core/rfile.h +foreach.o: $(hdrdir)/ruby/internal/core/rhash.h +foreach.o: $(hdrdir)/ruby/internal/core/robject.h +foreach.o: $(hdrdir)/ruby/internal/core/rregexp.h +foreach.o: $(hdrdir)/ruby/internal/core/rstring.h +foreach.o: $(hdrdir)/ruby/internal/core/rstruct.h +foreach.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +foreach.o: $(hdrdir)/ruby/internal/ctype.h +foreach.o: $(hdrdir)/ruby/internal/dllexport.h +foreach.o: $(hdrdir)/ruby/internal/dosish.h +foreach.o: $(hdrdir)/ruby/internal/error.h +foreach.o: $(hdrdir)/ruby/internal/eval.h +foreach.o: $(hdrdir)/ruby/internal/event.h +foreach.o: $(hdrdir)/ruby/internal/fl_type.h +foreach.o: $(hdrdir)/ruby/internal/gc.h +foreach.o: $(hdrdir)/ruby/internal/glob.h +foreach.o: $(hdrdir)/ruby/internal/globals.h +foreach.o: $(hdrdir)/ruby/internal/has/attribute.h +foreach.o: $(hdrdir)/ruby/internal/has/builtin.h +foreach.o: $(hdrdir)/ruby/internal/has/c_attribute.h +foreach.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +foreach.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +foreach.o: $(hdrdir)/ruby/internal/has/extension.h +foreach.o: $(hdrdir)/ruby/internal/has/feature.h +foreach.o: $(hdrdir)/ruby/internal/has/warning.h +foreach.o: $(hdrdir)/ruby/internal/intern/array.h +foreach.o: $(hdrdir)/ruby/internal/intern/bignum.h +foreach.o: $(hdrdir)/ruby/internal/intern/class.h +foreach.o: $(hdrdir)/ruby/internal/intern/compar.h +foreach.o: $(hdrdir)/ruby/internal/intern/complex.h +foreach.o: $(hdrdir)/ruby/internal/intern/cont.h +foreach.o: $(hdrdir)/ruby/internal/intern/dir.h +foreach.o: $(hdrdir)/ruby/internal/intern/enum.h +foreach.o: $(hdrdir)/ruby/internal/intern/enumerator.h +foreach.o: $(hdrdir)/ruby/internal/intern/error.h +foreach.o: $(hdrdir)/ruby/internal/intern/eval.h +foreach.o: $(hdrdir)/ruby/internal/intern/file.h +foreach.o: $(hdrdir)/ruby/internal/intern/gc.h +foreach.o: $(hdrdir)/ruby/internal/intern/hash.h +foreach.o: $(hdrdir)/ruby/internal/intern/io.h +foreach.o: $(hdrdir)/ruby/internal/intern/load.h +foreach.o: $(hdrdir)/ruby/internal/intern/marshal.h +foreach.o: $(hdrdir)/ruby/internal/intern/numeric.h +foreach.o: $(hdrdir)/ruby/internal/intern/object.h +foreach.o: $(hdrdir)/ruby/internal/intern/parse.h +foreach.o: $(hdrdir)/ruby/internal/intern/proc.h +foreach.o: $(hdrdir)/ruby/internal/intern/process.h +foreach.o: $(hdrdir)/ruby/internal/intern/random.h +foreach.o: $(hdrdir)/ruby/internal/intern/range.h +foreach.o: $(hdrdir)/ruby/internal/intern/rational.h +foreach.o: $(hdrdir)/ruby/internal/intern/re.h +foreach.o: $(hdrdir)/ruby/internal/intern/ruby.h +foreach.o: $(hdrdir)/ruby/internal/intern/select.h +foreach.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +foreach.o: $(hdrdir)/ruby/internal/intern/signal.h +foreach.o: $(hdrdir)/ruby/internal/intern/sprintf.h +foreach.o: $(hdrdir)/ruby/internal/intern/string.h +foreach.o: $(hdrdir)/ruby/internal/intern/struct.h +foreach.o: $(hdrdir)/ruby/internal/intern/thread.h +foreach.o: $(hdrdir)/ruby/internal/intern/time.h +foreach.o: $(hdrdir)/ruby/internal/intern/variable.h +foreach.o: $(hdrdir)/ruby/internal/intern/vm.h +foreach.o: $(hdrdir)/ruby/internal/interpreter.h +foreach.o: $(hdrdir)/ruby/internal/iterator.h +foreach.o: $(hdrdir)/ruby/internal/memory.h +foreach.o: $(hdrdir)/ruby/internal/method.h +foreach.o: $(hdrdir)/ruby/internal/module.h +foreach.o: $(hdrdir)/ruby/internal/newobj.h +foreach.o: $(hdrdir)/ruby/internal/rgengc.h +foreach.o: $(hdrdir)/ruby/internal/scan_args.h +foreach.o: $(hdrdir)/ruby/internal/special_consts.h +foreach.o: $(hdrdir)/ruby/internal/static_assert.h +foreach.o: $(hdrdir)/ruby/internal/stdalign.h +foreach.o: $(hdrdir)/ruby/internal/stdbool.h +foreach.o: $(hdrdir)/ruby/internal/symbol.h +foreach.o: $(hdrdir)/ruby/internal/value.h +foreach.o: $(hdrdir)/ruby/internal/value_type.h +foreach.o: $(hdrdir)/ruby/internal/variable.h +foreach.o: $(hdrdir)/ruby/internal/warning_push.h +foreach.o: $(hdrdir)/ruby/internal/xmalloc.h foreach.o: $(hdrdir)/ruby/missing.h foreach.o: $(hdrdir)/ruby/ruby.h foreach.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/st/numhash/depend b/ruby/ext/-test-/st/numhash/depend index 98dcef881..b3475f5fc 100644 --- a/ruby/ext/-test-/st/numhash/depend +++ b/ruby/ext/-test-/st/numhash/depend @@ -4,8 +4,155 @@ numhash.o: $(arch_hdrdir)/ruby/config.h numhash.o: $(hdrdir)/ruby.h numhash.o: $(hdrdir)/ruby/assert.h numhash.o: $(hdrdir)/ruby/backward.h +numhash.o: $(hdrdir)/ruby/backward/2/assume.h +numhash.o: $(hdrdir)/ruby/backward/2/attributes.h +numhash.o: $(hdrdir)/ruby/backward/2/bool.h +numhash.o: $(hdrdir)/ruby/backward/2/inttypes.h +numhash.o: $(hdrdir)/ruby/backward/2/limits.h +numhash.o: $(hdrdir)/ruby/backward/2/long_long.h +numhash.o: $(hdrdir)/ruby/backward/2/stdalign.h +numhash.o: $(hdrdir)/ruby/backward/2/stdarg.h numhash.o: $(hdrdir)/ruby/defines.h numhash.o: $(hdrdir)/ruby/intern.h +numhash.o: $(hdrdir)/ruby/internal/anyargs.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/char.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/double.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/int.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/long.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/short.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +numhash.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +numhash.o: $(hdrdir)/ruby/internal/assume.h +numhash.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +numhash.o: $(hdrdir)/ruby/internal/attr/artificial.h +numhash.o: $(hdrdir)/ruby/internal/attr/cold.h +numhash.o: $(hdrdir)/ruby/internal/attr/const.h +numhash.o: $(hdrdir)/ruby/internal/attr/constexpr.h +numhash.o: $(hdrdir)/ruby/internal/attr/deprecated.h +numhash.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +numhash.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +numhash.o: $(hdrdir)/ruby/internal/attr/error.h +numhash.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +numhash.o: $(hdrdir)/ruby/internal/attr/forceinline.h +numhash.o: $(hdrdir)/ruby/internal/attr/format.h +numhash.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +numhash.o: $(hdrdir)/ruby/internal/attr/noalias.h +numhash.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +numhash.o: $(hdrdir)/ruby/internal/attr/noexcept.h +numhash.o: $(hdrdir)/ruby/internal/attr/noinline.h +numhash.o: $(hdrdir)/ruby/internal/attr/nonnull.h +numhash.o: $(hdrdir)/ruby/internal/attr/noreturn.h +numhash.o: $(hdrdir)/ruby/internal/attr/pure.h +numhash.o: $(hdrdir)/ruby/internal/attr/restrict.h +numhash.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +numhash.o: $(hdrdir)/ruby/internal/attr/warning.h +numhash.o: $(hdrdir)/ruby/internal/attr/weakref.h +numhash.o: $(hdrdir)/ruby/internal/cast.h +numhash.o: $(hdrdir)/ruby/internal/compiler_is.h +numhash.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +numhash.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +numhash.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +numhash.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +numhash.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +numhash.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +numhash.o: $(hdrdir)/ruby/internal/compiler_since.h +numhash.o: $(hdrdir)/ruby/internal/config.h +numhash.o: $(hdrdir)/ruby/internal/constant_p.h +numhash.o: $(hdrdir)/ruby/internal/core.h +numhash.o: $(hdrdir)/ruby/internal/core/rarray.h +numhash.o: $(hdrdir)/ruby/internal/core/rbasic.h +numhash.o: $(hdrdir)/ruby/internal/core/rbignum.h +numhash.o: $(hdrdir)/ruby/internal/core/rclass.h +numhash.o: $(hdrdir)/ruby/internal/core/rdata.h +numhash.o: $(hdrdir)/ruby/internal/core/rfile.h +numhash.o: $(hdrdir)/ruby/internal/core/rhash.h +numhash.o: $(hdrdir)/ruby/internal/core/robject.h +numhash.o: $(hdrdir)/ruby/internal/core/rregexp.h +numhash.o: $(hdrdir)/ruby/internal/core/rstring.h +numhash.o: $(hdrdir)/ruby/internal/core/rstruct.h +numhash.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +numhash.o: $(hdrdir)/ruby/internal/ctype.h +numhash.o: $(hdrdir)/ruby/internal/dllexport.h +numhash.o: $(hdrdir)/ruby/internal/dosish.h +numhash.o: $(hdrdir)/ruby/internal/error.h +numhash.o: $(hdrdir)/ruby/internal/eval.h +numhash.o: $(hdrdir)/ruby/internal/event.h +numhash.o: $(hdrdir)/ruby/internal/fl_type.h +numhash.o: $(hdrdir)/ruby/internal/gc.h +numhash.o: $(hdrdir)/ruby/internal/glob.h +numhash.o: $(hdrdir)/ruby/internal/globals.h +numhash.o: $(hdrdir)/ruby/internal/has/attribute.h +numhash.o: $(hdrdir)/ruby/internal/has/builtin.h +numhash.o: $(hdrdir)/ruby/internal/has/c_attribute.h +numhash.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +numhash.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +numhash.o: $(hdrdir)/ruby/internal/has/extension.h +numhash.o: $(hdrdir)/ruby/internal/has/feature.h +numhash.o: $(hdrdir)/ruby/internal/has/warning.h +numhash.o: $(hdrdir)/ruby/internal/intern/array.h +numhash.o: $(hdrdir)/ruby/internal/intern/bignum.h +numhash.o: $(hdrdir)/ruby/internal/intern/class.h +numhash.o: $(hdrdir)/ruby/internal/intern/compar.h +numhash.o: $(hdrdir)/ruby/internal/intern/complex.h +numhash.o: $(hdrdir)/ruby/internal/intern/cont.h +numhash.o: $(hdrdir)/ruby/internal/intern/dir.h +numhash.o: $(hdrdir)/ruby/internal/intern/enum.h +numhash.o: $(hdrdir)/ruby/internal/intern/enumerator.h +numhash.o: $(hdrdir)/ruby/internal/intern/error.h +numhash.o: $(hdrdir)/ruby/internal/intern/eval.h +numhash.o: $(hdrdir)/ruby/internal/intern/file.h +numhash.o: $(hdrdir)/ruby/internal/intern/gc.h +numhash.o: $(hdrdir)/ruby/internal/intern/hash.h +numhash.o: $(hdrdir)/ruby/internal/intern/io.h +numhash.o: $(hdrdir)/ruby/internal/intern/load.h +numhash.o: $(hdrdir)/ruby/internal/intern/marshal.h +numhash.o: $(hdrdir)/ruby/internal/intern/numeric.h +numhash.o: $(hdrdir)/ruby/internal/intern/object.h +numhash.o: $(hdrdir)/ruby/internal/intern/parse.h +numhash.o: $(hdrdir)/ruby/internal/intern/proc.h +numhash.o: $(hdrdir)/ruby/internal/intern/process.h +numhash.o: $(hdrdir)/ruby/internal/intern/random.h +numhash.o: $(hdrdir)/ruby/internal/intern/range.h +numhash.o: $(hdrdir)/ruby/internal/intern/rational.h +numhash.o: $(hdrdir)/ruby/internal/intern/re.h +numhash.o: $(hdrdir)/ruby/internal/intern/ruby.h +numhash.o: $(hdrdir)/ruby/internal/intern/select.h +numhash.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +numhash.o: $(hdrdir)/ruby/internal/intern/signal.h +numhash.o: $(hdrdir)/ruby/internal/intern/sprintf.h +numhash.o: $(hdrdir)/ruby/internal/intern/string.h +numhash.o: $(hdrdir)/ruby/internal/intern/struct.h +numhash.o: $(hdrdir)/ruby/internal/intern/thread.h +numhash.o: $(hdrdir)/ruby/internal/intern/time.h +numhash.o: $(hdrdir)/ruby/internal/intern/variable.h +numhash.o: $(hdrdir)/ruby/internal/intern/vm.h +numhash.o: $(hdrdir)/ruby/internal/interpreter.h +numhash.o: $(hdrdir)/ruby/internal/iterator.h +numhash.o: $(hdrdir)/ruby/internal/memory.h +numhash.o: $(hdrdir)/ruby/internal/method.h +numhash.o: $(hdrdir)/ruby/internal/module.h +numhash.o: $(hdrdir)/ruby/internal/newobj.h +numhash.o: $(hdrdir)/ruby/internal/rgengc.h +numhash.o: $(hdrdir)/ruby/internal/scan_args.h +numhash.o: $(hdrdir)/ruby/internal/special_consts.h +numhash.o: $(hdrdir)/ruby/internal/static_assert.h +numhash.o: $(hdrdir)/ruby/internal/stdalign.h +numhash.o: $(hdrdir)/ruby/internal/stdbool.h +numhash.o: $(hdrdir)/ruby/internal/symbol.h +numhash.o: $(hdrdir)/ruby/internal/value.h +numhash.o: $(hdrdir)/ruby/internal/value_type.h +numhash.o: $(hdrdir)/ruby/internal/variable.h +numhash.o: $(hdrdir)/ruby/internal/warning_push.h +numhash.o: $(hdrdir)/ruby/internal/xmalloc.h numhash.o: $(hdrdir)/ruby/missing.h numhash.o: $(hdrdir)/ruby/ruby.h numhash.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/st/numhash/numhash.c b/ruby/ext/-test-/st/numhash/numhash.c index 71eeed491..aa8015e86 100644 --- a/ruby/ext/-test-/st/numhash/numhash.c +++ b/ruby/ext/-test-/st/numhash/numhash.c @@ -125,7 +125,7 @@ numhash_delete_safe(VALUE self, VALUE key) void Init_numhash(void) { - VALUE st = rb_define_class_under(rb_define_module("Bug"), "StNumHash", rb_cData); + VALUE st = rb_define_class_under(rb_define_module("Bug"), "StNumHash", rb_cObject); rb_define_alloc_func(st, numhash_alloc); rb_define_method(st, "initialize", numhash_init, 0); rb_define_method(st, "[]", numhash_aref, 1); diff --git a/ruby/ext/-test-/st/update/depend b/ruby/ext/-test-/st/update/depend index 241e6f9e6..bbf97cbbf 100644 --- a/ruby/ext/-test-/st/update/depend +++ b/ruby/ext/-test-/st/update/depend @@ -4,8 +4,155 @@ update.o: $(arch_hdrdir)/ruby/config.h update.o: $(hdrdir)/ruby.h update.o: $(hdrdir)/ruby/assert.h update.o: $(hdrdir)/ruby/backward.h +update.o: $(hdrdir)/ruby/backward/2/assume.h +update.o: $(hdrdir)/ruby/backward/2/attributes.h +update.o: $(hdrdir)/ruby/backward/2/bool.h +update.o: $(hdrdir)/ruby/backward/2/inttypes.h +update.o: $(hdrdir)/ruby/backward/2/limits.h +update.o: $(hdrdir)/ruby/backward/2/long_long.h +update.o: $(hdrdir)/ruby/backward/2/stdalign.h +update.o: $(hdrdir)/ruby/backward/2/stdarg.h update.o: $(hdrdir)/ruby/defines.h update.o: $(hdrdir)/ruby/intern.h +update.o: $(hdrdir)/ruby/internal/anyargs.h +update.o: $(hdrdir)/ruby/internal/arithmetic.h +update.o: $(hdrdir)/ruby/internal/arithmetic/char.h +update.o: $(hdrdir)/ruby/internal/arithmetic/double.h +update.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +update.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +update.o: $(hdrdir)/ruby/internal/arithmetic/int.h +update.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +update.o: $(hdrdir)/ruby/internal/arithmetic/long.h +update.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +update.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +update.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +update.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +update.o: $(hdrdir)/ruby/internal/arithmetic/short.h +update.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +update.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +update.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +update.o: $(hdrdir)/ruby/internal/assume.h +update.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +update.o: $(hdrdir)/ruby/internal/attr/artificial.h +update.o: $(hdrdir)/ruby/internal/attr/cold.h +update.o: $(hdrdir)/ruby/internal/attr/const.h +update.o: $(hdrdir)/ruby/internal/attr/constexpr.h +update.o: $(hdrdir)/ruby/internal/attr/deprecated.h +update.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +update.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +update.o: $(hdrdir)/ruby/internal/attr/error.h +update.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +update.o: $(hdrdir)/ruby/internal/attr/forceinline.h +update.o: $(hdrdir)/ruby/internal/attr/format.h +update.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +update.o: $(hdrdir)/ruby/internal/attr/noalias.h +update.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +update.o: $(hdrdir)/ruby/internal/attr/noexcept.h +update.o: $(hdrdir)/ruby/internal/attr/noinline.h +update.o: $(hdrdir)/ruby/internal/attr/nonnull.h +update.o: $(hdrdir)/ruby/internal/attr/noreturn.h +update.o: $(hdrdir)/ruby/internal/attr/pure.h +update.o: $(hdrdir)/ruby/internal/attr/restrict.h +update.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +update.o: $(hdrdir)/ruby/internal/attr/warning.h +update.o: $(hdrdir)/ruby/internal/attr/weakref.h +update.o: $(hdrdir)/ruby/internal/cast.h +update.o: $(hdrdir)/ruby/internal/compiler_is.h +update.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +update.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +update.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +update.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +update.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +update.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +update.o: $(hdrdir)/ruby/internal/compiler_since.h +update.o: $(hdrdir)/ruby/internal/config.h +update.o: $(hdrdir)/ruby/internal/constant_p.h +update.o: $(hdrdir)/ruby/internal/core.h +update.o: $(hdrdir)/ruby/internal/core/rarray.h +update.o: $(hdrdir)/ruby/internal/core/rbasic.h +update.o: $(hdrdir)/ruby/internal/core/rbignum.h +update.o: $(hdrdir)/ruby/internal/core/rclass.h +update.o: $(hdrdir)/ruby/internal/core/rdata.h +update.o: $(hdrdir)/ruby/internal/core/rfile.h +update.o: $(hdrdir)/ruby/internal/core/rhash.h +update.o: $(hdrdir)/ruby/internal/core/robject.h +update.o: $(hdrdir)/ruby/internal/core/rregexp.h +update.o: $(hdrdir)/ruby/internal/core/rstring.h +update.o: $(hdrdir)/ruby/internal/core/rstruct.h +update.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +update.o: $(hdrdir)/ruby/internal/ctype.h +update.o: $(hdrdir)/ruby/internal/dllexport.h +update.o: $(hdrdir)/ruby/internal/dosish.h +update.o: $(hdrdir)/ruby/internal/error.h +update.o: $(hdrdir)/ruby/internal/eval.h +update.o: $(hdrdir)/ruby/internal/event.h +update.o: $(hdrdir)/ruby/internal/fl_type.h +update.o: $(hdrdir)/ruby/internal/gc.h +update.o: $(hdrdir)/ruby/internal/glob.h +update.o: $(hdrdir)/ruby/internal/globals.h +update.o: $(hdrdir)/ruby/internal/has/attribute.h +update.o: $(hdrdir)/ruby/internal/has/builtin.h +update.o: $(hdrdir)/ruby/internal/has/c_attribute.h +update.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +update.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +update.o: $(hdrdir)/ruby/internal/has/extension.h +update.o: $(hdrdir)/ruby/internal/has/feature.h +update.o: $(hdrdir)/ruby/internal/has/warning.h +update.o: $(hdrdir)/ruby/internal/intern/array.h +update.o: $(hdrdir)/ruby/internal/intern/bignum.h +update.o: $(hdrdir)/ruby/internal/intern/class.h +update.o: $(hdrdir)/ruby/internal/intern/compar.h +update.o: $(hdrdir)/ruby/internal/intern/complex.h +update.o: $(hdrdir)/ruby/internal/intern/cont.h +update.o: $(hdrdir)/ruby/internal/intern/dir.h +update.o: $(hdrdir)/ruby/internal/intern/enum.h +update.o: $(hdrdir)/ruby/internal/intern/enumerator.h +update.o: $(hdrdir)/ruby/internal/intern/error.h +update.o: $(hdrdir)/ruby/internal/intern/eval.h +update.o: $(hdrdir)/ruby/internal/intern/file.h +update.o: $(hdrdir)/ruby/internal/intern/gc.h +update.o: $(hdrdir)/ruby/internal/intern/hash.h +update.o: $(hdrdir)/ruby/internal/intern/io.h +update.o: $(hdrdir)/ruby/internal/intern/load.h +update.o: $(hdrdir)/ruby/internal/intern/marshal.h +update.o: $(hdrdir)/ruby/internal/intern/numeric.h +update.o: $(hdrdir)/ruby/internal/intern/object.h +update.o: $(hdrdir)/ruby/internal/intern/parse.h +update.o: $(hdrdir)/ruby/internal/intern/proc.h +update.o: $(hdrdir)/ruby/internal/intern/process.h +update.o: $(hdrdir)/ruby/internal/intern/random.h +update.o: $(hdrdir)/ruby/internal/intern/range.h +update.o: $(hdrdir)/ruby/internal/intern/rational.h +update.o: $(hdrdir)/ruby/internal/intern/re.h +update.o: $(hdrdir)/ruby/internal/intern/ruby.h +update.o: $(hdrdir)/ruby/internal/intern/select.h +update.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +update.o: $(hdrdir)/ruby/internal/intern/signal.h +update.o: $(hdrdir)/ruby/internal/intern/sprintf.h +update.o: $(hdrdir)/ruby/internal/intern/string.h +update.o: $(hdrdir)/ruby/internal/intern/struct.h +update.o: $(hdrdir)/ruby/internal/intern/thread.h +update.o: $(hdrdir)/ruby/internal/intern/time.h +update.o: $(hdrdir)/ruby/internal/intern/variable.h +update.o: $(hdrdir)/ruby/internal/intern/vm.h +update.o: $(hdrdir)/ruby/internal/interpreter.h +update.o: $(hdrdir)/ruby/internal/iterator.h +update.o: $(hdrdir)/ruby/internal/memory.h +update.o: $(hdrdir)/ruby/internal/method.h +update.o: $(hdrdir)/ruby/internal/module.h +update.o: $(hdrdir)/ruby/internal/newobj.h +update.o: $(hdrdir)/ruby/internal/rgengc.h +update.o: $(hdrdir)/ruby/internal/scan_args.h +update.o: $(hdrdir)/ruby/internal/special_consts.h +update.o: $(hdrdir)/ruby/internal/static_assert.h +update.o: $(hdrdir)/ruby/internal/stdalign.h +update.o: $(hdrdir)/ruby/internal/stdbool.h +update.o: $(hdrdir)/ruby/internal/symbol.h +update.o: $(hdrdir)/ruby/internal/value.h +update.o: $(hdrdir)/ruby/internal/value_type.h +update.o: $(hdrdir)/ruby/internal/variable.h +update.o: $(hdrdir)/ruby/internal/warning_push.h +update.o: $(hdrdir)/ruby/internal/xmalloc.h update.o: $(hdrdir)/ruby/missing.h update.o: $(hdrdir)/ruby/ruby.h update.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/string/capacity.c b/ruby/ext/-test-/string/capacity.c index f5277bf4e..33b2023fd 100644 --- a/ruby/ext/-test-/string/capacity.c +++ b/ruby/ext/-test-/string/capacity.c @@ -1,13 +1,14 @@ #include "ruby.h" -#include "internal.h" +#include "internal/string.h" static VALUE bug_str_capacity(VALUE klass, VALUE str) { - return - STR_EMBED_P(str) ? INT2FIX(RSTRING_EMBED_LEN_MAX) : \ - STR_SHARED_P(str) ? INT2FIX(0) : \ - LONG2FIX(RSTRING(str)->as.heap.aux.capa); + if (!STR_EMBED_P(str) && STR_SHARED_P(str)) { + return INT2FIX(0); + } + + return LONG2FIX(rb_str_capacity(str)); } void diff --git a/ruby/ext/-test-/string/coderange.c b/ruby/ext/-test-/string/coderange.c index 1342ce20d..bc998ca37 100644 --- a/ruby/ext/-test-/string/coderange.c +++ b/ruby/ext/-test-/string/coderange.c @@ -38,10 +38,10 @@ str_coderange_scan(VALUE str) void Init_string_coderange(VALUE klass) { - sym_7bit = ID2SYM(rb_intern("7bit")); - sym_valid = ID2SYM(rb_intern("valid")); - sym_unknown = ID2SYM(rb_intern("unknown")); - sym_broken = ID2SYM(rb_intern("broken")); + sym_7bit = ID2SYM(rb_intern_const("7bit")); + sym_valid = ID2SYM(rb_intern_const("valid")); + sym_unknown = ID2SYM(rb_intern_const("unknown")); + sym_broken = ID2SYM(rb_intern_const("broken")); rb_define_method(klass, "coderange", str_coderange, 0); rb_define_method(klass, "coderange_scan", str_coderange_scan, 0); } diff --git a/ruby/ext/-test-/string/cstr.c b/ruby/ext/-test-/string/cstr.c index 71eafdb70..1eadb8b4f 100644 --- a/ruby/ext/-test-/string/cstr.c +++ b/ruby/ext/-test-/string/cstr.c @@ -1,5 +1,6 @@ -#include "ruby/encoding.h" #include "internal.h" +#include "internal/string.h" +#include "ruby/encoding.h" static VALUE bug_str_cstr_term(VALUE str) @@ -61,9 +62,13 @@ bug_str_unterminated_substring(VALUE str, VALUE vbeg, VALUE vlen) if (RSTRING_LEN(str) < beg + len) rb_raise(rb_eIndexError, "end: %ld", beg + len); str = rb_str_new_shared(str); if (STR_EMBED_P(str)) { +#if USE_RVARGC + RSTRING(str)->as.embed.len = (short)len; +#else RSTRING(str)->basic.flags &= ~RSTRING_EMBED_LEN_MASK; RSTRING(str)->basic.flags |= len << RSTRING_EMBED_LEN_SHIFT; - memmove(RSTRING(str)->as.ary, RSTRING(str)->as.ary + beg, len); +#endif + memmove(RSTRING(str)->as.embed.ary, RSTRING(str)->as.embed.ary + beg, len); } else { RSTRING(str)->as.heap.ptr += beg; @@ -111,7 +116,11 @@ bug_str_s_cstr_noembed(VALUE self, VALUE str) Check_Type(str, T_STRING); FL_SET((str2), STR_NOEMBED); memcpy(buf, RSTRING_PTR(str), capacity); +#if USE_RVARGC + RBASIC(str2)->flags &= ~(STR_SHARED | FL_USER5 | FL_USER6); +#else RBASIC(str2)->flags &= ~RSTRING_EMBED_LEN_MASK; +#endif RSTRING(str2)->as.heap.aux.capa = capacity; RSTRING(str2)->as.heap.ptr = buf; RSTRING(str2)->as.heap.len = RSTRING_LEN(str); diff --git a/ruby/ext/-test-/string/depend b/ruby/ext/-test-/string/depend index f6888b5da..1e2e12313 100644 --- a/ruby/ext/-test-/string/depend +++ b/ruby/ext/-test-/string/depend @@ -4,21 +4,338 @@ capacity.o: $(arch_hdrdir)/ruby/config.h capacity.o: $(hdrdir)/ruby.h capacity.o: $(hdrdir)/ruby/assert.h capacity.o: $(hdrdir)/ruby/backward.h +capacity.o: $(hdrdir)/ruby/backward/2/assume.h +capacity.o: $(hdrdir)/ruby/backward/2/attributes.h +capacity.o: $(hdrdir)/ruby/backward/2/bool.h +capacity.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +capacity.o: $(hdrdir)/ruby/backward/2/inttypes.h +capacity.o: $(hdrdir)/ruby/backward/2/limits.h +capacity.o: $(hdrdir)/ruby/backward/2/long_long.h +capacity.o: $(hdrdir)/ruby/backward/2/stdalign.h +capacity.o: $(hdrdir)/ruby/backward/2/stdarg.h capacity.o: $(hdrdir)/ruby/defines.h +capacity.o: $(hdrdir)/ruby/encoding.h capacity.o: $(hdrdir)/ruby/intern.h +capacity.o: $(hdrdir)/ruby/internal/anyargs.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/char.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/double.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/int.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/long.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/short.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +capacity.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +capacity.o: $(hdrdir)/ruby/internal/assume.h +capacity.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +capacity.o: $(hdrdir)/ruby/internal/attr/artificial.h +capacity.o: $(hdrdir)/ruby/internal/attr/cold.h +capacity.o: $(hdrdir)/ruby/internal/attr/const.h +capacity.o: $(hdrdir)/ruby/internal/attr/constexpr.h +capacity.o: $(hdrdir)/ruby/internal/attr/deprecated.h +capacity.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +capacity.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +capacity.o: $(hdrdir)/ruby/internal/attr/error.h +capacity.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +capacity.o: $(hdrdir)/ruby/internal/attr/forceinline.h +capacity.o: $(hdrdir)/ruby/internal/attr/format.h +capacity.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +capacity.o: $(hdrdir)/ruby/internal/attr/noalias.h +capacity.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +capacity.o: $(hdrdir)/ruby/internal/attr/noexcept.h +capacity.o: $(hdrdir)/ruby/internal/attr/noinline.h +capacity.o: $(hdrdir)/ruby/internal/attr/nonnull.h +capacity.o: $(hdrdir)/ruby/internal/attr/noreturn.h +capacity.o: $(hdrdir)/ruby/internal/attr/pure.h +capacity.o: $(hdrdir)/ruby/internal/attr/restrict.h +capacity.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +capacity.o: $(hdrdir)/ruby/internal/attr/warning.h +capacity.o: $(hdrdir)/ruby/internal/attr/weakref.h +capacity.o: $(hdrdir)/ruby/internal/cast.h +capacity.o: $(hdrdir)/ruby/internal/compiler_is.h +capacity.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +capacity.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +capacity.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +capacity.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +capacity.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +capacity.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +capacity.o: $(hdrdir)/ruby/internal/compiler_since.h +capacity.o: $(hdrdir)/ruby/internal/config.h +capacity.o: $(hdrdir)/ruby/internal/constant_p.h +capacity.o: $(hdrdir)/ruby/internal/core.h +capacity.o: $(hdrdir)/ruby/internal/core/rarray.h +capacity.o: $(hdrdir)/ruby/internal/core/rbasic.h +capacity.o: $(hdrdir)/ruby/internal/core/rbignum.h +capacity.o: $(hdrdir)/ruby/internal/core/rclass.h +capacity.o: $(hdrdir)/ruby/internal/core/rdata.h +capacity.o: $(hdrdir)/ruby/internal/core/rfile.h +capacity.o: $(hdrdir)/ruby/internal/core/rhash.h +capacity.o: $(hdrdir)/ruby/internal/core/robject.h +capacity.o: $(hdrdir)/ruby/internal/core/rregexp.h +capacity.o: $(hdrdir)/ruby/internal/core/rstring.h +capacity.o: $(hdrdir)/ruby/internal/core/rstruct.h +capacity.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +capacity.o: $(hdrdir)/ruby/internal/ctype.h +capacity.o: $(hdrdir)/ruby/internal/dllexport.h +capacity.o: $(hdrdir)/ruby/internal/dosish.h +capacity.o: $(hdrdir)/ruby/internal/encoding/coderange.h +capacity.o: $(hdrdir)/ruby/internal/encoding/ctype.h +capacity.o: $(hdrdir)/ruby/internal/encoding/encoding.h +capacity.o: $(hdrdir)/ruby/internal/encoding/pathname.h +capacity.o: $(hdrdir)/ruby/internal/encoding/re.h +capacity.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +capacity.o: $(hdrdir)/ruby/internal/encoding/string.h +capacity.o: $(hdrdir)/ruby/internal/encoding/symbol.h +capacity.o: $(hdrdir)/ruby/internal/encoding/transcode.h +capacity.o: $(hdrdir)/ruby/internal/error.h +capacity.o: $(hdrdir)/ruby/internal/eval.h +capacity.o: $(hdrdir)/ruby/internal/event.h +capacity.o: $(hdrdir)/ruby/internal/fl_type.h +capacity.o: $(hdrdir)/ruby/internal/gc.h +capacity.o: $(hdrdir)/ruby/internal/glob.h +capacity.o: $(hdrdir)/ruby/internal/globals.h +capacity.o: $(hdrdir)/ruby/internal/has/attribute.h +capacity.o: $(hdrdir)/ruby/internal/has/builtin.h +capacity.o: $(hdrdir)/ruby/internal/has/c_attribute.h +capacity.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +capacity.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +capacity.o: $(hdrdir)/ruby/internal/has/extension.h +capacity.o: $(hdrdir)/ruby/internal/has/feature.h +capacity.o: $(hdrdir)/ruby/internal/has/warning.h +capacity.o: $(hdrdir)/ruby/internal/intern/array.h +capacity.o: $(hdrdir)/ruby/internal/intern/bignum.h +capacity.o: $(hdrdir)/ruby/internal/intern/class.h +capacity.o: $(hdrdir)/ruby/internal/intern/compar.h +capacity.o: $(hdrdir)/ruby/internal/intern/complex.h +capacity.o: $(hdrdir)/ruby/internal/intern/cont.h +capacity.o: $(hdrdir)/ruby/internal/intern/dir.h +capacity.o: $(hdrdir)/ruby/internal/intern/enum.h +capacity.o: $(hdrdir)/ruby/internal/intern/enumerator.h +capacity.o: $(hdrdir)/ruby/internal/intern/error.h +capacity.o: $(hdrdir)/ruby/internal/intern/eval.h +capacity.o: $(hdrdir)/ruby/internal/intern/file.h +capacity.o: $(hdrdir)/ruby/internal/intern/gc.h +capacity.o: $(hdrdir)/ruby/internal/intern/hash.h +capacity.o: $(hdrdir)/ruby/internal/intern/io.h +capacity.o: $(hdrdir)/ruby/internal/intern/load.h +capacity.o: $(hdrdir)/ruby/internal/intern/marshal.h +capacity.o: $(hdrdir)/ruby/internal/intern/numeric.h +capacity.o: $(hdrdir)/ruby/internal/intern/object.h +capacity.o: $(hdrdir)/ruby/internal/intern/parse.h +capacity.o: $(hdrdir)/ruby/internal/intern/proc.h +capacity.o: $(hdrdir)/ruby/internal/intern/process.h +capacity.o: $(hdrdir)/ruby/internal/intern/random.h +capacity.o: $(hdrdir)/ruby/internal/intern/range.h +capacity.o: $(hdrdir)/ruby/internal/intern/rational.h +capacity.o: $(hdrdir)/ruby/internal/intern/re.h +capacity.o: $(hdrdir)/ruby/internal/intern/ruby.h +capacity.o: $(hdrdir)/ruby/internal/intern/select.h +capacity.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +capacity.o: $(hdrdir)/ruby/internal/intern/signal.h +capacity.o: $(hdrdir)/ruby/internal/intern/sprintf.h +capacity.o: $(hdrdir)/ruby/internal/intern/string.h +capacity.o: $(hdrdir)/ruby/internal/intern/struct.h +capacity.o: $(hdrdir)/ruby/internal/intern/thread.h +capacity.o: $(hdrdir)/ruby/internal/intern/time.h +capacity.o: $(hdrdir)/ruby/internal/intern/variable.h +capacity.o: $(hdrdir)/ruby/internal/intern/vm.h +capacity.o: $(hdrdir)/ruby/internal/interpreter.h +capacity.o: $(hdrdir)/ruby/internal/iterator.h +capacity.o: $(hdrdir)/ruby/internal/memory.h +capacity.o: $(hdrdir)/ruby/internal/method.h +capacity.o: $(hdrdir)/ruby/internal/module.h +capacity.o: $(hdrdir)/ruby/internal/newobj.h +capacity.o: $(hdrdir)/ruby/internal/rgengc.h +capacity.o: $(hdrdir)/ruby/internal/scan_args.h +capacity.o: $(hdrdir)/ruby/internal/special_consts.h +capacity.o: $(hdrdir)/ruby/internal/static_assert.h +capacity.o: $(hdrdir)/ruby/internal/stdalign.h +capacity.o: $(hdrdir)/ruby/internal/stdbool.h +capacity.o: $(hdrdir)/ruby/internal/symbol.h +capacity.o: $(hdrdir)/ruby/internal/value.h +capacity.o: $(hdrdir)/ruby/internal/value_type.h +capacity.o: $(hdrdir)/ruby/internal/variable.h +capacity.o: $(hdrdir)/ruby/internal/warning_push.h +capacity.o: $(hdrdir)/ruby/internal/xmalloc.h capacity.o: $(hdrdir)/ruby/missing.h +capacity.o: $(hdrdir)/ruby/onigmo.h +capacity.o: $(hdrdir)/ruby/oniguruma.h capacity.o: $(hdrdir)/ruby/ruby.h capacity.o: $(hdrdir)/ruby/st.h capacity.o: $(hdrdir)/ruby/subst.h -capacity.o: $(top_srcdir)/internal.h +capacity.o: $(top_srcdir)/internal/compilers.h +capacity.o: $(top_srcdir)/internal/string.h capacity.o: capacity.c coderange.o: $(RUBY_EXTCONF_H) coderange.o: $(arch_hdrdir)/ruby/config.h coderange.o: $(hdrdir)/ruby/assert.h coderange.o: $(hdrdir)/ruby/backward.h +coderange.o: $(hdrdir)/ruby/backward/2/assume.h +coderange.o: $(hdrdir)/ruby/backward/2/attributes.h +coderange.o: $(hdrdir)/ruby/backward/2/bool.h +coderange.o: $(hdrdir)/ruby/backward/2/inttypes.h +coderange.o: $(hdrdir)/ruby/backward/2/limits.h +coderange.o: $(hdrdir)/ruby/backward/2/long_long.h +coderange.o: $(hdrdir)/ruby/backward/2/stdalign.h +coderange.o: $(hdrdir)/ruby/backward/2/stdarg.h coderange.o: $(hdrdir)/ruby/defines.h coderange.o: $(hdrdir)/ruby/encoding.h coderange.o: $(hdrdir)/ruby/intern.h +coderange.o: $(hdrdir)/ruby/internal/anyargs.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/char.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/double.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/int.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/long.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/short.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +coderange.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +coderange.o: $(hdrdir)/ruby/internal/assume.h +coderange.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +coderange.o: $(hdrdir)/ruby/internal/attr/artificial.h +coderange.o: $(hdrdir)/ruby/internal/attr/cold.h +coderange.o: $(hdrdir)/ruby/internal/attr/const.h +coderange.o: $(hdrdir)/ruby/internal/attr/constexpr.h +coderange.o: $(hdrdir)/ruby/internal/attr/deprecated.h +coderange.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +coderange.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +coderange.o: $(hdrdir)/ruby/internal/attr/error.h +coderange.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +coderange.o: $(hdrdir)/ruby/internal/attr/forceinline.h +coderange.o: $(hdrdir)/ruby/internal/attr/format.h +coderange.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +coderange.o: $(hdrdir)/ruby/internal/attr/noalias.h +coderange.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +coderange.o: $(hdrdir)/ruby/internal/attr/noexcept.h +coderange.o: $(hdrdir)/ruby/internal/attr/noinline.h +coderange.o: $(hdrdir)/ruby/internal/attr/nonnull.h +coderange.o: $(hdrdir)/ruby/internal/attr/noreturn.h +coderange.o: $(hdrdir)/ruby/internal/attr/pure.h +coderange.o: $(hdrdir)/ruby/internal/attr/restrict.h +coderange.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +coderange.o: $(hdrdir)/ruby/internal/attr/warning.h +coderange.o: $(hdrdir)/ruby/internal/attr/weakref.h +coderange.o: $(hdrdir)/ruby/internal/cast.h +coderange.o: $(hdrdir)/ruby/internal/compiler_is.h +coderange.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +coderange.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +coderange.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +coderange.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +coderange.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +coderange.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +coderange.o: $(hdrdir)/ruby/internal/compiler_since.h +coderange.o: $(hdrdir)/ruby/internal/config.h +coderange.o: $(hdrdir)/ruby/internal/constant_p.h +coderange.o: $(hdrdir)/ruby/internal/core.h +coderange.o: $(hdrdir)/ruby/internal/core/rarray.h +coderange.o: $(hdrdir)/ruby/internal/core/rbasic.h +coderange.o: $(hdrdir)/ruby/internal/core/rbignum.h +coderange.o: $(hdrdir)/ruby/internal/core/rclass.h +coderange.o: $(hdrdir)/ruby/internal/core/rdata.h +coderange.o: $(hdrdir)/ruby/internal/core/rfile.h +coderange.o: $(hdrdir)/ruby/internal/core/rhash.h +coderange.o: $(hdrdir)/ruby/internal/core/robject.h +coderange.o: $(hdrdir)/ruby/internal/core/rregexp.h +coderange.o: $(hdrdir)/ruby/internal/core/rstring.h +coderange.o: $(hdrdir)/ruby/internal/core/rstruct.h +coderange.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +coderange.o: $(hdrdir)/ruby/internal/ctype.h +coderange.o: $(hdrdir)/ruby/internal/dllexport.h +coderange.o: $(hdrdir)/ruby/internal/dosish.h +coderange.o: $(hdrdir)/ruby/internal/encoding/coderange.h +coderange.o: $(hdrdir)/ruby/internal/encoding/ctype.h +coderange.o: $(hdrdir)/ruby/internal/encoding/encoding.h +coderange.o: $(hdrdir)/ruby/internal/encoding/pathname.h +coderange.o: $(hdrdir)/ruby/internal/encoding/re.h +coderange.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +coderange.o: $(hdrdir)/ruby/internal/encoding/string.h +coderange.o: $(hdrdir)/ruby/internal/encoding/symbol.h +coderange.o: $(hdrdir)/ruby/internal/encoding/transcode.h +coderange.o: $(hdrdir)/ruby/internal/error.h +coderange.o: $(hdrdir)/ruby/internal/eval.h +coderange.o: $(hdrdir)/ruby/internal/event.h +coderange.o: $(hdrdir)/ruby/internal/fl_type.h +coderange.o: $(hdrdir)/ruby/internal/gc.h +coderange.o: $(hdrdir)/ruby/internal/glob.h +coderange.o: $(hdrdir)/ruby/internal/globals.h +coderange.o: $(hdrdir)/ruby/internal/has/attribute.h +coderange.o: $(hdrdir)/ruby/internal/has/builtin.h +coderange.o: $(hdrdir)/ruby/internal/has/c_attribute.h +coderange.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +coderange.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +coderange.o: $(hdrdir)/ruby/internal/has/extension.h +coderange.o: $(hdrdir)/ruby/internal/has/feature.h +coderange.o: $(hdrdir)/ruby/internal/has/warning.h +coderange.o: $(hdrdir)/ruby/internal/intern/array.h +coderange.o: $(hdrdir)/ruby/internal/intern/bignum.h +coderange.o: $(hdrdir)/ruby/internal/intern/class.h +coderange.o: $(hdrdir)/ruby/internal/intern/compar.h +coderange.o: $(hdrdir)/ruby/internal/intern/complex.h +coderange.o: $(hdrdir)/ruby/internal/intern/cont.h +coderange.o: $(hdrdir)/ruby/internal/intern/dir.h +coderange.o: $(hdrdir)/ruby/internal/intern/enum.h +coderange.o: $(hdrdir)/ruby/internal/intern/enumerator.h +coderange.o: $(hdrdir)/ruby/internal/intern/error.h +coderange.o: $(hdrdir)/ruby/internal/intern/eval.h +coderange.o: $(hdrdir)/ruby/internal/intern/file.h +coderange.o: $(hdrdir)/ruby/internal/intern/gc.h +coderange.o: $(hdrdir)/ruby/internal/intern/hash.h +coderange.o: $(hdrdir)/ruby/internal/intern/io.h +coderange.o: $(hdrdir)/ruby/internal/intern/load.h +coderange.o: $(hdrdir)/ruby/internal/intern/marshal.h +coderange.o: $(hdrdir)/ruby/internal/intern/numeric.h +coderange.o: $(hdrdir)/ruby/internal/intern/object.h +coderange.o: $(hdrdir)/ruby/internal/intern/parse.h +coderange.o: $(hdrdir)/ruby/internal/intern/proc.h +coderange.o: $(hdrdir)/ruby/internal/intern/process.h +coderange.o: $(hdrdir)/ruby/internal/intern/random.h +coderange.o: $(hdrdir)/ruby/internal/intern/range.h +coderange.o: $(hdrdir)/ruby/internal/intern/rational.h +coderange.o: $(hdrdir)/ruby/internal/intern/re.h +coderange.o: $(hdrdir)/ruby/internal/intern/ruby.h +coderange.o: $(hdrdir)/ruby/internal/intern/select.h +coderange.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +coderange.o: $(hdrdir)/ruby/internal/intern/signal.h +coderange.o: $(hdrdir)/ruby/internal/intern/sprintf.h +coderange.o: $(hdrdir)/ruby/internal/intern/string.h +coderange.o: $(hdrdir)/ruby/internal/intern/struct.h +coderange.o: $(hdrdir)/ruby/internal/intern/thread.h +coderange.o: $(hdrdir)/ruby/internal/intern/time.h +coderange.o: $(hdrdir)/ruby/internal/intern/variable.h +coderange.o: $(hdrdir)/ruby/internal/intern/vm.h +coderange.o: $(hdrdir)/ruby/internal/interpreter.h +coderange.o: $(hdrdir)/ruby/internal/iterator.h +coderange.o: $(hdrdir)/ruby/internal/memory.h +coderange.o: $(hdrdir)/ruby/internal/method.h +coderange.o: $(hdrdir)/ruby/internal/module.h +coderange.o: $(hdrdir)/ruby/internal/newobj.h +coderange.o: $(hdrdir)/ruby/internal/rgengc.h +coderange.o: $(hdrdir)/ruby/internal/scan_args.h +coderange.o: $(hdrdir)/ruby/internal/special_consts.h +coderange.o: $(hdrdir)/ruby/internal/static_assert.h +coderange.o: $(hdrdir)/ruby/internal/stdalign.h +coderange.o: $(hdrdir)/ruby/internal/stdbool.h +coderange.o: $(hdrdir)/ruby/internal/symbol.h +coderange.o: $(hdrdir)/ruby/internal/value.h +coderange.o: $(hdrdir)/ruby/internal/value_type.h +coderange.o: $(hdrdir)/ruby/internal/variable.h +coderange.o: $(hdrdir)/ruby/internal/warning_push.h +coderange.o: $(hdrdir)/ruby/internal/xmalloc.h coderange.o: $(hdrdir)/ruby/missing.h coderange.o: $(hdrdir)/ruby/onigmo.h coderange.o: $(hdrdir)/ruby/oniguruma.h @@ -28,12 +345,168 @@ coderange.o: $(hdrdir)/ruby/subst.h coderange.o: coderange.c cstr.o: $(RUBY_EXTCONF_H) cstr.o: $(arch_hdrdir)/ruby/config.h -cstr.o: $(hdrdir)/ruby.h cstr.o: $(hdrdir)/ruby/assert.h cstr.o: $(hdrdir)/ruby/backward.h +cstr.o: $(hdrdir)/ruby/backward/2/assume.h +cstr.o: $(hdrdir)/ruby/backward/2/attributes.h +cstr.o: $(hdrdir)/ruby/backward/2/bool.h +cstr.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +cstr.o: $(hdrdir)/ruby/backward/2/inttypes.h +cstr.o: $(hdrdir)/ruby/backward/2/limits.h +cstr.o: $(hdrdir)/ruby/backward/2/long_long.h +cstr.o: $(hdrdir)/ruby/backward/2/stdalign.h +cstr.o: $(hdrdir)/ruby/backward/2/stdarg.h cstr.o: $(hdrdir)/ruby/defines.h cstr.o: $(hdrdir)/ruby/encoding.h cstr.o: $(hdrdir)/ruby/intern.h +cstr.o: $(hdrdir)/ruby/internal/anyargs.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/char.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/double.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/int.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/long.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/short.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +cstr.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +cstr.o: $(hdrdir)/ruby/internal/assume.h +cstr.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +cstr.o: $(hdrdir)/ruby/internal/attr/artificial.h +cstr.o: $(hdrdir)/ruby/internal/attr/cold.h +cstr.o: $(hdrdir)/ruby/internal/attr/const.h +cstr.o: $(hdrdir)/ruby/internal/attr/constexpr.h +cstr.o: $(hdrdir)/ruby/internal/attr/deprecated.h +cstr.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +cstr.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +cstr.o: $(hdrdir)/ruby/internal/attr/error.h +cstr.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +cstr.o: $(hdrdir)/ruby/internal/attr/forceinline.h +cstr.o: $(hdrdir)/ruby/internal/attr/format.h +cstr.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +cstr.o: $(hdrdir)/ruby/internal/attr/noalias.h +cstr.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +cstr.o: $(hdrdir)/ruby/internal/attr/noexcept.h +cstr.o: $(hdrdir)/ruby/internal/attr/noinline.h +cstr.o: $(hdrdir)/ruby/internal/attr/nonnull.h +cstr.o: $(hdrdir)/ruby/internal/attr/noreturn.h +cstr.o: $(hdrdir)/ruby/internal/attr/pure.h +cstr.o: $(hdrdir)/ruby/internal/attr/restrict.h +cstr.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +cstr.o: $(hdrdir)/ruby/internal/attr/warning.h +cstr.o: $(hdrdir)/ruby/internal/attr/weakref.h +cstr.o: $(hdrdir)/ruby/internal/cast.h +cstr.o: $(hdrdir)/ruby/internal/compiler_is.h +cstr.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +cstr.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +cstr.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +cstr.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +cstr.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +cstr.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +cstr.o: $(hdrdir)/ruby/internal/compiler_since.h +cstr.o: $(hdrdir)/ruby/internal/config.h +cstr.o: $(hdrdir)/ruby/internal/constant_p.h +cstr.o: $(hdrdir)/ruby/internal/core.h +cstr.o: $(hdrdir)/ruby/internal/core/rarray.h +cstr.o: $(hdrdir)/ruby/internal/core/rbasic.h +cstr.o: $(hdrdir)/ruby/internal/core/rbignum.h +cstr.o: $(hdrdir)/ruby/internal/core/rclass.h +cstr.o: $(hdrdir)/ruby/internal/core/rdata.h +cstr.o: $(hdrdir)/ruby/internal/core/rfile.h +cstr.o: $(hdrdir)/ruby/internal/core/rhash.h +cstr.o: $(hdrdir)/ruby/internal/core/robject.h +cstr.o: $(hdrdir)/ruby/internal/core/rregexp.h +cstr.o: $(hdrdir)/ruby/internal/core/rstring.h +cstr.o: $(hdrdir)/ruby/internal/core/rstruct.h +cstr.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +cstr.o: $(hdrdir)/ruby/internal/ctype.h +cstr.o: $(hdrdir)/ruby/internal/dllexport.h +cstr.o: $(hdrdir)/ruby/internal/dosish.h +cstr.o: $(hdrdir)/ruby/internal/encoding/coderange.h +cstr.o: $(hdrdir)/ruby/internal/encoding/ctype.h +cstr.o: $(hdrdir)/ruby/internal/encoding/encoding.h +cstr.o: $(hdrdir)/ruby/internal/encoding/pathname.h +cstr.o: $(hdrdir)/ruby/internal/encoding/re.h +cstr.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +cstr.o: $(hdrdir)/ruby/internal/encoding/string.h +cstr.o: $(hdrdir)/ruby/internal/encoding/symbol.h +cstr.o: $(hdrdir)/ruby/internal/encoding/transcode.h +cstr.o: $(hdrdir)/ruby/internal/error.h +cstr.o: $(hdrdir)/ruby/internal/eval.h +cstr.o: $(hdrdir)/ruby/internal/event.h +cstr.o: $(hdrdir)/ruby/internal/fl_type.h +cstr.o: $(hdrdir)/ruby/internal/gc.h +cstr.o: $(hdrdir)/ruby/internal/glob.h +cstr.o: $(hdrdir)/ruby/internal/globals.h +cstr.o: $(hdrdir)/ruby/internal/has/attribute.h +cstr.o: $(hdrdir)/ruby/internal/has/builtin.h +cstr.o: $(hdrdir)/ruby/internal/has/c_attribute.h +cstr.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +cstr.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +cstr.o: $(hdrdir)/ruby/internal/has/extension.h +cstr.o: $(hdrdir)/ruby/internal/has/feature.h +cstr.o: $(hdrdir)/ruby/internal/has/warning.h +cstr.o: $(hdrdir)/ruby/internal/intern/array.h +cstr.o: $(hdrdir)/ruby/internal/intern/bignum.h +cstr.o: $(hdrdir)/ruby/internal/intern/class.h +cstr.o: $(hdrdir)/ruby/internal/intern/compar.h +cstr.o: $(hdrdir)/ruby/internal/intern/complex.h +cstr.o: $(hdrdir)/ruby/internal/intern/cont.h +cstr.o: $(hdrdir)/ruby/internal/intern/dir.h +cstr.o: $(hdrdir)/ruby/internal/intern/enum.h +cstr.o: $(hdrdir)/ruby/internal/intern/enumerator.h +cstr.o: $(hdrdir)/ruby/internal/intern/error.h +cstr.o: $(hdrdir)/ruby/internal/intern/eval.h +cstr.o: $(hdrdir)/ruby/internal/intern/file.h +cstr.o: $(hdrdir)/ruby/internal/intern/gc.h +cstr.o: $(hdrdir)/ruby/internal/intern/hash.h +cstr.o: $(hdrdir)/ruby/internal/intern/io.h +cstr.o: $(hdrdir)/ruby/internal/intern/load.h +cstr.o: $(hdrdir)/ruby/internal/intern/marshal.h +cstr.o: $(hdrdir)/ruby/internal/intern/numeric.h +cstr.o: $(hdrdir)/ruby/internal/intern/object.h +cstr.o: $(hdrdir)/ruby/internal/intern/parse.h +cstr.o: $(hdrdir)/ruby/internal/intern/proc.h +cstr.o: $(hdrdir)/ruby/internal/intern/process.h +cstr.o: $(hdrdir)/ruby/internal/intern/random.h +cstr.o: $(hdrdir)/ruby/internal/intern/range.h +cstr.o: $(hdrdir)/ruby/internal/intern/rational.h +cstr.o: $(hdrdir)/ruby/internal/intern/re.h +cstr.o: $(hdrdir)/ruby/internal/intern/ruby.h +cstr.o: $(hdrdir)/ruby/internal/intern/select.h +cstr.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +cstr.o: $(hdrdir)/ruby/internal/intern/signal.h +cstr.o: $(hdrdir)/ruby/internal/intern/sprintf.h +cstr.o: $(hdrdir)/ruby/internal/intern/string.h +cstr.o: $(hdrdir)/ruby/internal/intern/struct.h +cstr.o: $(hdrdir)/ruby/internal/intern/thread.h +cstr.o: $(hdrdir)/ruby/internal/intern/time.h +cstr.o: $(hdrdir)/ruby/internal/intern/variable.h +cstr.o: $(hdrdir)/ruby/internal/intern/vm.h +cstr.o: $(hdrdir)/ruby/internal/interpreter.h +cstr.o: $(hdrdir)/ruby/internal/iterator.h +cstr.o: $(hdrdir)/ruby/internal/memory.h +cstr.o: $(hdrdir)/ruby/internal/method.h +cstr.o: $(hdrdir)/ruby/internal/module.h +cstr.o: $(hdrdir)/ruby/internal/newobj.h +cstr.o: $(hdrdir)/ruby/internal/rgengc.h +cstr.o: $(hdrdir)/ruby/internal/scan_args.h +cstr.o: $(hdrdir)/ruby/internal/special_consts.h +cstr.o: $(hdrdir)/ruby/internal/static_assert.h +cstr.o: $(hdrdir)/ruby/internal/stdalign.h +cstr.o: $(hdrdir)/ruby/internal/stdbool.h +cstr.o: $(hdrdir)/ruby/internal/symbol.h +cstr.o: $(hdrdir)/ruby/internal/value.h +cstr.o: $(hdrdir)/ruby/internal/value_type.h +cstr.o: $(hdrdir)/ruby/internal/variable.h +cstr.o: $(hdrdir)/ruby/internal/warning_push.h +cstr.o: $(hdrdir)/ruby/internal/xmalloc.h cstr.o: $(hdrdir)/ruby/missing.h cstr.o: $(hdrdir)/ruby/onigmo.h cstr.o: $(hdrdir)/ruby/oniguruma.h @@ -41,14 +514,163 @@ cstr.o: $(hdrdir)/ruby/ruby.h cstr.o: $(hdrdir)/ruby/st.h cstr.o: $(hdrdir)/ruby/subst.h cstr.o: $(top_srcdir)/internal.h +cstr.o: $(top_srcdir)/internal/compilers.h +cstr.o: $(top_srcdir)/internal/string.h cstr.o: cstr.c ellipsize.o: $(RUBY_EXTCONF_H) ellipsize.o: $(arch_hdrdir)/ruby/config.h ellipsize.o: $(hdrdir)/ruby.h ellipsize.o: $(hdrdir)/ruby/assert.h ellipsize.o: $(hdrdir)/ruby/backward.h +ellipsize.o: $(hdrdir)/ruby/backward/2/assume.h +ellipsize.o: $(hdrdir)/ruby/backward/2/attributes.h +ellipsize.o: $(hdrdir)/ruby/backward/2/bool.h +ellipsize.o: $(hdrdir)/ruby/backward/2/inttypes.h +ellipsize.o: $(hdrdir)/ruby/backward/2/limits.h +ellipsize.o: $(hdrdir)/ruby/backward/2/long_long.h +ellipsize.o: $(hdrdir)/ruby/backward/2/stdalign.h +ellipsize.o: $(hdrdir)/ruby/backward/2/stdarg.h ellipsize.o: $(hdrdir)/ruby/defines.h ellipsize.o: $(hdrdir)/ruby/intern.h +ellipsize.o: $(hdrdir)/ruby/internal/anyargs.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ellipsize.o: $(hdrdir)/ruby/internal/assume.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/artificial.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/cold.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/const.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/error.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/format.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/noalias.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/noinline.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/pure.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/restrict.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/warning.h +ellipsize.o: $(hdrdir)/ruby/internal/attr/weakref.h +ellipsize.o: $(hdrdir)/ruby/internal/cast.h +ellipsize.o: $(hdrdir)/ruby/internal/compiler_is.h +ellipsize.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ellipsize.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ellipsize.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ellipsize.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ellipsize.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ellipsize.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ellipsize.o: $(hdrdir)/ruby/internal/compiler_since.h +ellipsize.o: $(hdrdir)/ruby/internal/config.h +ellipsize.o: $(hdrdir)/ruby/internal/constant_p.h +ellipsize.o: $(hdrdir)/ruby/internal/core.h +ellipsize.o: $(hdrdir)/ruby/internal/core/rarray.h +ellipsize.o: $(hdrdir)/ruby/internal/core/rbasic.h +ellipsize.o: $(hdrdir)/ruby/internal/core/rbignum.h +ellipsize.o: $(hdrdir)/ruby/internal/core/rclass.h +ellipsize.o: $(hdrdir)/ruby/internal/core/rdata.h +ellipsize.o: $(hdrdir)/ruby/internal/core/rfile.h +ellipsize.o: $(hdrdir)/ruby/internal/core/rhash.h +ellipsize.o: $(hdrdir)/ruby/internal/core/robject.h +ellipsize.o: $(hdrdir)/ruby/internal/core/rregexp.h +ellipsize.o: $(hdrdir)/ruby/internal/core/rstring.h +ellipsize.o: $(hdrdir)/ruby/internal/core/rstruct.h +ellipsize.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ellipsize.o: $(hdrdir)/ruby/internal/ctype.h +ellipsize.o: $(hdrdir)/ruby/internal/dllexport.h +ellipsize.o: $(hdrdir)/ruby/internal/dosish.h +ellipsize.o: $(hdrdir)/ruby/internal/error.h +ellipsize.o: $(hdrdir)/ruby/internal/eval.h +ellipsize.o: $(hdrdir)/ruby/internal/event.h +ellipsize.o: $(hdrdir)/ruby/internal/fl_type.h +ellipsize.o: $(hdrdir)/ruby/internal/gc.h +ellipsize.o: $(hdrdir)/ruby/internal/glob.h +ellipsize.o: $(hdrdir)/ruby/internal/globals.h +ellipsize.o: $(hdrdir)/ruby/internal/has/attribute.h +ellipsize.o: $(hdrdir)/ruby/internal/has/builtin.h +ellipsize.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ellipsize.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ellipsize.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ellipsize.o: $(hdrdir)/ruby/internal/has/extension.h +ellipsize.o: $(hdrdir)/ruby/internal/has/feature.h +ellipsize.o: $(hdrdir)/ruby/internal/has/warning.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/array.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/bignum.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/class.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/compar.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/complex.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/cont.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/dir.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/enum.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/error.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/eval.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/file.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/gc.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/hash.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/io.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/load.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/marshal.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/numeric.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/object.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/parse.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/proc.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/process.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/random.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/range.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/rational.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/re.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/ruby.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/select.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/signal.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/string.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/struct.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/thread.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/time.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/variable.h +ellipsize.o: $(hdrdir)/ruby/internal/intern/vm.h +ellipsize.o: $(hdrdir)/ruby/internal/interpreter.h +ellipsize.o: $(hdrdir)/ruby/internal/iterator.h +ellipsize.o: $(hdrdir)/ruby/internal/memory.h +ellipsize.o: $(hdrdir)/ruby/internal/method.h +ellipsize.o: $(hdrdir)/ruby/internal/module.h +ellipsize.o: $(hdrdir)/ruby/internal/newobj.h +ellipsize.o: $(hdrdir)/ruby/internal/rgengc.h +ellipsize.o: $(hdrdir)/ruby/internal/scan_args.h +ellipsize.o: $(hdrdir)/ruby/internal/special_consts.h +ellipsize.o: $(hdrdir)/ruby/internal/static_assert.h +ellipsize.o: $(hdrdir)/ruby/internal/stdalign.h +ellipsize.o: $(hdrdir)/ruby/internal/stdbool.h +ellipsize.o: $(hdrdir)/ruby/internal/symbol.h +ellipsize.o: $(hdrdir)/ruby/internal/value.h +ellipsize.o: $(hdrdir)/ruby/internal/value_type.h +ellipsize.o: $(hdrdir)/ruby/internal/variable.h +ellipsize.o: $(hdrdir)/ruby/internal/warning_push.h +ellipsize.o: $(hdrdir)/ruby/internal/xmalloc.h ellipsize.o: $(hdrdir)/ruby/missing.h ellipsize.o: $(hdrdir)/ruby/ruby.h ellipsize.o: $(hdrdir)/ruby/st.h @@ -59,9 +681,165 @@ enc_associate.o: $(arch_hdrdir)/ruby/config.h enc_associate.o: $(hdrdir)/ruby.h enc_associate.o: $(hdrdir)/ruby/assert.h enc_associate.o: $(hdrdir)/ruby/backward.h +enc_associate.o: $(hdrdir)/ruby/backward/2/assume.h +enc_associate.o: $(hdrdir)/ruby/backward/2/attributes.h +enc_associate.o: $(hdrdir)/ruby/backward/2/bool.h +enc_associate.o: $(hdrdir)/ruby/backward/2/inttypes.h +enc_associate.o: $(hdrdir)/ruby/backward/2/limits.h +enc_associate.o: $(hdrdir)/ruby/backward/2/long_long.h +enc_associate.o: $(hdrdir)/ruby/backward/2/stdalign.h +enc_associate.o: $(hdrdir)/ruby/backward/2/stdarg.h enc_associate.o: $(hdrdir)/ruby/defines.h enc_associate.o: $(hdrdir)/ruby/encoding.h enc_associate.o: $(hdrdir)/ruby/intern.h +enc_associate.o: $(hdrdir)/ruby/internal/anyargs.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/char.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/double.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/int.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/long.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/short.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +enc_associate.o: $(hdrdir)/ruby/internal/assume.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/artificial.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/cold.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/const.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/constexpr.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/deprecated.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/error.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/forceinline.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/format.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/noalias.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/noexcept.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/noinline.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/nonnull.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/noreturn.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/pure.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/restrict.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/warning.h +enc_associate.o: $(hdrdir)/ruby/internal/attr/weakref.h +enc_associate.o: $(hdrdir)/ruby/internal/cast.h +enc_associate.o: $(hdrdir)/ruby/internal/compiler_is.h +enc_associate.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +enc_associate.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +enc_associate.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +enc_associate.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +enc_associate.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +enc_associate.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +enc_associate.o: $(hdrdir)/ruby/internal/compiler_since.h +enc_associate.o: $(hdrdir)/ruby/internal/config.h +enc_associate.o: $(hdrdir)/ruby/internal/constant_p.h +enc_associate.o: $(hdrdir)/ruby/internal/core.h +enc_associate.o: $(hdrdir)/ruby/internal/core/rarray.h +enc_associate.o: $(hdrdir)/ruby/internal/core/rbasic.h +enc_associate.o: $(hdrdir)/ruby/internal/core/rbignum.h +enc_associate.o: $(hdrdir)/ruby/internal/core/rclass.h +enc_associate.o: $(hdrdir)/ruby/internal/core/rdata.h +enc_associate.o: $(hdrdir)/ruby/internal/core/rfile.h +enc_associate.o: $(hdrdir)/ruby/internal/core/rhash.h +enc_associate.o: $(hdrdir)/ruby/internal/core/robject.h +enc_associate.o: $(hdrdir)/ruby/internal/core/rregexp.h +enc_associate.o: $(hdrdir)/ruby/internal/core/rstring.h +enc_associate.o: $(hdrdir)/ruby/internal/core/rstruct.h +enc_associate.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +enc_associate.o: $(hdrdir)/ruby/internal/ctype.h +enc_associate.o: $(hdrdir)/ruby/internal/dllexport.h +enc_associate.o: $(hdrdir)/ruby/internal/dosish.h +enc_associate.o: $(hdrdir)/ruby/internal/encoding/coderange.h +enc_associate.o: $(hdrdir)/ruby/internal/encoding/ctype.h +enc_associate.o: $(hdrdir)/ruby/internal/encoding/encoding.h +enc_associate.o: $(hdrdir)/ruby/internal/encoding/pathname.h +enc_associate.o: $(hdrdir)/ruby/internal/encoding/re.h +enc_associate.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +enc_associate.o: $(hdrdir)/ruby/internal/encoding/string.h +enc_associate.o: $(hdrdir)/ruby/internal/encoding/symbol.h +enc_associate.o: $(hdrdir)/ruby/internal/encoding/transcode.h +enc_associate.o: $(hdrdir)/ruby/internal/error.h +enc_associate.o: $(hdrdir)/ruby/internal/eval.h +enc_associate.o: $(hdrdir)/ruby/internal/event.h +enc_associate.o: $(hdrdir)/ruby/internal/fl_type.h +enc_associate.o: $(hdrdir)/ruby/internal/gc.h +enc_associate.o: $(hdrdir)/ruby/internal/glob.h +enc_associate.o: $(hdrdir)/ruby/internal/globals.h +enc_associate.o: $(hdrdir)/ruby/internal/has/attribute.h +enc_associate.o: $(hdrdir)/ruby/internal/has/builtin.h +enc_associate.o: $(hdrdir)/ruby/internal/has/c_attribute.h +enc_associate.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +enc_associate.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +enc_associate.o: $(hdrdir)/ruby/internal/has/extension.h +enc_associate.o: $(hdrdir)/ruby/internal/has/feature.h +enc_associate.o: $(hdrdir)/ruby/internal/has/warning.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/array.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/bignum.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/class.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/compar.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/complex.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/cont.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/dir.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/enum.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/enumerator.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/error.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/eval.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/file.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/gc.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/hash.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/io.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/load.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/marshal.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/numeric.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/object.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/parse.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/proc.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/process.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/random.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/range.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/rational.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/re.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/ruby.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/select.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/signal.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/sprintf.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/string.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/struct.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/thread.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/time.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/variable.h +enc_associate.o: $(hdrdir)/ruby/internal/intern/vm.h +enc_associate.o: $(hdrdir)/ruby/internal/interpreter.h +enc_associate.o: $(hdrdir)/ruby/internal/iterator.h +enc_associate.o: $(hdrdir)/ruby/internal/memory.h +enc_associate.o: $(hdrdir)/ruby/internal/method.h +enc_associate.o: $(hdrdir)/ruby/internal/module.h +enc_associate.o: $(hdrdir)/ruby/internal/newobj.h +enc_associate.o: $(hdrdir)/ruby/internal/rgengc.h +enc_associate.o: $(hdrdir)/ruby/internal/scan_args.h +enc_associate.o: $(hdrdir)/ruby/internal/special_consts.h +enc_associate.o: $(hdrdir)/ruby/internal/static_assert.h +enc_associate.o: $(hdrdir)/ruby/internal/stdalign.h +enc_associate.o: $(hdrdir)/ruby/internal/stdbool.h +enc_associate.o: $(hdrdir)/ruby/internal/symbol.h +enc_associate.o: $(hdrdir)/ruby/internal/value.h +enc_associate.o: $(hdrdir)/ruby/internal/value_type.h +enc_associate.o: $(hdrdir)/ruby/internal/variable.h +enc_associate.o: $(hdrdir)/ruby/internal/warning_push.h +enc_associate.o: $(hdrdir)/ruby/internal/xmalloc.h enc_associate.o: $(hdrdir)/ruby/missing.h enc_associate.o: $(hdrdir)/ruby/onigmo.h enc_associate.o: $(hdrdir)/ruby/oniguruma.h @@ -73,9 +851,165 @@ enc_str_buf_cat.o: $(RUBY_EXTCONF_H) enc_str_buf_cat.o: $(arch_hdrdir)/ruby/config.h enc_str_buf_cat.o: $(hdrdir)/ruby/assert.h enc_str_buf_cat.o: $(hdrdir)/ruby/backward.h +enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/assume.h +enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/attributes.h +enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/bool.h +enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/inttypes.h +enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/limits.h +enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/long_long.h +enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/stdalign.h +enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/stdarg.h enc_str_buf_cat.o: $(hdrdir)/ruby/defines.h enc_str_buf_cat.o: $(hdrdir)/ruby/encoding.h enc_str_buf_cat.o: $(hdrdir)/ruby/intern.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/anyargs.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/char.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/double.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/int.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/long.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/short.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/assume.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/artificial.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/cold.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/const.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/constexpr.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/deprecated.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/error.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/forceinline.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/format.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/noalias.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/noexcept.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/noinline.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/nonnull.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/noreturn.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/pure.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/restrict.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/warning.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/attr/weakref.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/cast.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/compiler_is.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/compiler_since.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/config.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/constant_p.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core/rarray.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core/rbasic.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core/rbignum.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core/rclass.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core/rdata.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core/rfile.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core/rhash.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core/robject.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core/rregexp.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core/rstring.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core/rstruct.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/ctype.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/dllexport.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/dosish.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/encoding/coderange.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/encoding/ctype.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/encoding/encoding.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/encoding/pathname.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/encoding/re.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/encoding/string.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/encoding/symbol.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/encoding/transcode.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/error.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/eval.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/event.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/fl_type.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/gc.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/glob.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/globals.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/has/attribute.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/has/builtin.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/has/c_attribute.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/has/extension.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/has/feature.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/has/warning.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/array.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/bignum.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/class.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/compar.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/complex.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/cont.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/dir.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/enum.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/enumerator.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/error.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/eval.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/file.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/gc.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/hash.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/io.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/load.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/marshal.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/numeric.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/object.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/parse.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/proc.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/process.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/random.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/range.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/rational.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/re.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/ruby.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/select.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/signal.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/sprintf.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/string.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/struct.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/thread.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/time.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/variable.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/intern/vm.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/interpreter.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/iterator.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/memory.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/method.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/module.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/newobj.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/rgengc.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/scan_args.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/special_consts.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/static_assert.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/stdalign.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/stdbool.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/symbol.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/value.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/value_type.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/variable.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/warning_push.h +enc_str_buf_cat.o: $(hdrdir)/ruby/internal/xmalloc.h enc_str_buf_cat.o: $(hdrdir)/ruby/missing.h enc_str_buf_cat.o: $(hdrdir)/ruby/onigmo.h enc_str_buf_cat.o: $(hdrdir)/ruby/oniguruma.h @@ -88,9 +1022,168 @@ fstring.o: $(arch_hdrdir)/ruby/config.h fstring.o: $(hdrdir)/ruby.h fstring.o: $(hdrdir)/ruby/assert.h fstring.o: $(hdrdir)/ruby/backward.h +fstring.o: $(hdrdir)/ruby/backward/2/assume.h +fstring.o: $(hdrdir)/ruby/backward/2/attributes.h +fstring.o: $(hdrdir)/ruby/backward/2/bool.h +fstring.o: $(hdrdir)/ruby/backward/2/inttypes.h +fstring.o: $(hdrdir)/ruby/backward/2/limits.h +fstring.o: $(hdrdir)/ruby/backward/2/long_long.h +fstring.o: $(hdrdir)/ruby/backward/2/stdalign.h +fstring.o: $(hdrdir)/ruby/backward/2/stdarg.h fstring.o: $(hdrdir)/ruby/defines.h +fstring.o: $(hdrdir)/ruby/encoding.h fstring.o: $(hdrdir)/ruby/intern.h +fstring.o: $(hdrdir)/ruby/internal/anyargs.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/char.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/double.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/int.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/long.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/short.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +fstring.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +fstring.o: $(hdrdir)/ruby/internal/assume.h +fstring.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +fstring.o: $(hdrdir)/ruby/internal/attr/artificial.h +fstring.o: $(hdrdir)/ruby/internal/attr/cold.h +fstring.o: $(hdrdir)/ruby/internal/attr/const.h +fstring.o: $(hdrdir)/ruby/internal/attr/constexpr.h +fstring.o: $(hdrdir)/ruby/internal/attr/deprecated.h +fstring.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +fstring.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +fstring.o: $(hdrdir)/ruby/internal/attr/error.h +fstring.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +fstring.o: $(hdrdir)/ruby/internal/attr/forceinline.h +fstring.o: $(hdrdir)/ruby/internal/attr/format.h +fstring.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +fstring.o: $(hdrdir)/ruby/internal/attr/noalias.h +fstring.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +fstring.o: $(hdrdir)/ruby/internal/attr/noexcept.h +fstring.o: $(hdrdir)/ruby/internal/attr/noinline.h +fstring.o: $(hdrdir)/ruby/internal/attr/nonnull.h +fstring.o: $(hdrdir)/ruby/internal/attr/noreturn.h +fstring.o: $(hdrdir)/ruby/internal/attr/pure.h +fstring.o: $(hdrdir)/ruby/internal/attr/restrict.h +fstring.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +fstring.o: $(hdrdir)/ruby/internal/attr/warning.h +fstring.o: $(hdrdir)/ruby/internal/attr/weakref.h +fstring.o: $(hdrdir)/ruby/internal/cast.h +fstring.o: $(hdrdir)/ruby/internal/compiler_is.h +fstring.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +fstring.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +fstring.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +fstring.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +fstring.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +fstring.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +fstring.o: $(hdrdir)/ruby/internal/compiler_since.h +fstring.o: $(hdrdir)/ruby/internal/config.h +fstring.o: $(hdrdir)/ruby/internal/constant_p.h +fstring.o: $(hdrdir)/ruby/internal/core.h +fstring.o: $(hdrdir)/ruby/internal/core/rarray.h +fstring.o: $(hdrdir)/ruby/internal/core/rbasic.h +fstring.o: $(hdrdir)/ruby/internal/core/rbignum.h +fstring.o: $(hdrdir)/ruby/internal/core/rclass.h +fstring.o: $(hdrdir)/ruby/internal/core/rdata.h +fstring.o: $(hdrdir)/ruby/internal/core/rfile.h +fstring.o: $(hdrdir)/ruby/internal/core/rhash.h +fstring.o: $(hdrdir)/ruby/internal/core/robject.h +fstring.o: $(hdrdir)/ruby/internal/core/rregexp.h +fstring.o: $(hdrdir)/ruby/internal/core/rstring.h +fstring.o: $(hdrdir)/ruby/internal/core/rstruct.h +fstring.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +fstring.o: $(hdrdir)/ruby/internal/ctype.h +fstring.o: $(hdrdir)/ruby/internal/dllexport.h +fstring.o: $(hdrdir)/ruby/internal/dosish.h +fstring.o: $(hdrdir)/ruby/internal/encoding/coderange.h +fstring.o: $(hdrdir)/ruby/internal/encoding/ctype.h +fstring.o: $(hdrdir)/ruby/internal/encoding/encoding.h +fstring.o: $(hdrdir)/ruby/internal/encoding/pathname.h +fstring.o: $(hdrdir)/ruby/internal/encoding/re.h +fstring.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +fstring.o: $(hdrdir)/ruby/internal/encoding/string.h +fstring.o: $(hdrdir)/ruby/internal/encoding/symbol.h +fstring.o: $(hdrdir)/ruby/internal/encoding/transcode.h +fstring.o: $(hdrdir)/ruby/internal/error.h +fstring.o: $(hdrdir)/ruby/internal/eval.h +fstring.o: $(hdrdir)/ruby/internal/event.h +fstring.o: $(hdrdir)/ruby/internal/fl_type.h +fstring.o: $(hdrdir)/ruby/internal/gc.h +fstring.o: $(hdrdir)/ruby/internal/glob.h +fstring.o: $(hdrdir)/ruby/internal/globals.h +fstring.o: $(hdrdir)/ruby/internal/has/attribute.h +fstring.o: $(hdrdir)/ruby/internal/has/builtin.h +fstring.o: $(hdrdir)/ruby/internal/has/c_attribute.h +fstring.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +fstring.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +fstring.o: $(hdrdir)/ruby/internal/has/extension.h +fstring.o: $(hdrdir)/ruby/internal/has/feature.h +fstring.o: $(hdrdir)/ruby/internal/has/warning.h +fstring.o: $(hdrdir)/ruby/internal/intern/array.h +fstring.o: $(hdrdir)/ruby/internal/intern/bignum.h +fstring.o: $(hdrdir)/ruby/internal/intern/class.h +fstring.o: $(hdrdir)/ruby/internal/intern/compar.h +fstring.o: $(hdrdir)/ruby/internal/intern/complex.h +fstring.o: $(hdrdir)/ruby/internal/intern/cont.h +fstring.o: $(hdrdir)/ruby/internal/intern/dir.h +fstring.o: $(hdrdir)/ruby/internal/intern/enum.h +fstring.o: $(hdrdir)/ruby/internal/intern/enumerator.h +fstring.o: $(hdrdir)/ruby/internal/intern/error.h +fstring.o: $(hdrdir)/ruby/internal/intern/eval.h +fstring.o: $(hdrdir)/ruby/internal/intern/file.h +fstring.o: $(hdrdir)/ruby/internal/intern/gc.h +fstring.o: $(hdrdir)/ruby/internal/intern/hash.h +fstring.o: $(hdrdir)/ruby/internal/intern/io.h +fstring.o: $(hdrdir)/ruby/internal/intern/load.h +fstring.o: $(hdrdir)/ruby/internal/intern/marshal.h +fstring.o: $(hdrdir)/ruby/internal/intern/numeric.h +fstring.o: $(hdrdir)/ruby/internal/intern/object.h +fstring.o: $(hdrdir)/ruby/internal/intern/parse.h +fstring.o: $(hdrdir)/ruby/internal/intern/proc.h +fstring.o: $(hdrdir)/ruby/internal/intern/process.h +fstring.o: $(hdrdir)/ruby/internal/intern/random.h +fstring.o: $(hdrdir)/ruby/internal/intern/range.h +fstring.o: $(hdrdir)/ruby/internal/intern/rational.h +fstring.o: $(hdrdir)/ruby/internal/intern/re.h +fstring.o: $(hdrdir)/ruby/internal/intern/ruby.h +fstring.o: $(hdrdir)/ruby/internal/intern/select.h +fstring.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +fstring.o: $(hdrdir)/ruby/internal/intern/signal.h +fstring.o: $(hdrdir)/ruby/internal/intern/sprintf.h +fstring.o: $(hdrdir)/ruby/internal/intern/string.h +fstring.o: $(hdrdir)/ruby/internal/intern/struct.h +fstring.o: $(hdrdir)/ruby/internal/intern/thread.h +fstring.o: $(hdrdir)/ruby/internal/intern/time.h +fstring.o: $(hdrdir)/ruby/internal/intern/variable.h +fstring.o: $(hdrdir)/ruby/internal/intern/vm.h +fstring.o: $(hdrdir)/ruby/internal/interpreter.h +fstring.o: $(hdrdir)/ruby/internal/iterator.h +fstring.o: $(hdrdir)/ruby/internal/memory.h +fstring.o: $(hdrdir)/ruby/internal/method.h +fstring.o: $(hdrdir)/ruby/internal/module.h +fstring.o: $(hdrdir)/ruby/internal/newobj.h +fstring.o: $(hdrdir)/ruby/internal/rgengc.h +fstring.o: $(hdrdir)/ruby/internal/scan_args.h +fstring.o: $(hdrdir)/ruby/internal/special_consts.h +fstring.o: $(hdrdir)/ruby/internal/static_assert.h +fstring.o: $(hdrdir)/ruby/internal/stdalign.h +fstring.o: $(hdrdir)/ruby/internal/stdbool.h +fstring.o: $(hdrdir)/ruby/internal/symbol.h +fstring.o: $(hdrdir)/ruby/internal/value.h +fstring.o: $(hdrdir)/ruby/internal/value_type.h +fstring.o: $(hdrdir)/ruby/internal/variable.h +fstring.o: $(hdrdir)/ruby/internal/warning_push.h +fstring.o: $(hdrdir)/ruby/internal/xmalloc.h fstring.o: $(hdrdir)/ruby/missing.h +fstring.o: $(hdrdir)/ruby/onigmo.h +fstring.o: $(hdrdir)/ruby/oniguruma.h fstring.o: $(hdrdir)/ruby/ruby.h fstring.o: $(hdrdir)/ruby/st.h fstring.o: $(hdrdir)/ruby/subst.h @@ -100,8 +1193,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h @@ -112,8 +1352,155 @@ modify.o: $(arch_hdrdir)/ruby/config.h modify.o: $(hdrdir)/ruby.h modify.o: $(hdrdir)/ruby/assert.h modify.o: $(hdrdir)/ruby/backward.h +modify.o: $(hdrdir)/ruby/backward/2/assume.h +modify.o: $(hdrdir)/ruby/backward/2/attributes.h +modify.o: $(hdrdir)/ruby/backward/2/bool.h +modify.o: $(hdrdir)/ruby/backward/2/inttypes.h +modify.o: $(hdrdir)/ruby/backward/2/limits.h +modify.o: $(hdrdir)/ruby/backward/2/long_long.h +modify.o: $(hdrdir)/ruby/backward/2/stdalign.h +modify.o: $(hdrdir)/ruby/backward/2/stdarg.h modify.o: $(hdrdir)/ruby/defines.h modify.o: $(hdrdir)/ruby/intern.h +modify.o: $(hdrdir)/ruby/internal/anyargs.h +modify.o: $(hdrdir)/ruby/internal/arithmetic.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/char.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/double.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/int.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/long.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/short.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +modify.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +modify.o: $(hdrdir)/ruby/internal/assume.h +modify.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +modify.o: $(hdrdir)/ruby/internal/attr/artificial.h +modify.o: $(hdrdir)/ruby/internal/attr/cold.h +modify.o: $(hdrdir)/ruby/internal/attr/const.h +modify.o: $(hdrdir)/ruby/internal/attr/constexpr.h +modify.o: $(hdrdir)/ruby/internal/attr/deprecated.h +modify.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +modify.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +modify.o: $(hdrdir)/ruby/internal/attr/error.h +modify.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +modify.o: $(hdrdir)/ruby/internal/attr/forceinline.h +modify.o: $(hdrdir)/ruby/internal/attr/format.h +modify.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +modify.o: $(hdrdir)/ruby/internal/attr/noalias.h +modify.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +modify.o: $(hdrdir)/ruby/internal/attr/noexcept.h +modify.o: $(hdrdir)/ruby/internal/attr/noinline.h +modify.o: $(hdrdir)/ruby/internal/attr/nonnull.h +modify.o: $(hdrdir)/ruby/internal/attr/noreturn.h +modify.o: $(hdrdir)/ruby/internal/attr/pure.h +modify.o: $(hdrdir)/ruby/internal/attr/restrict.h +modify.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +modify.o: $(hdrdir)/ruby/internal/attr/warning.h +modify.o: $(hdrdir)/ruby/internal/attr/weakref.h +modify.o: $(hdrdir)/ruby/internal/cast.h +modify.o: $(hdrdir)/ruby/internal/compiler_is.h +modify.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +modify.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +modify.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +modify.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +modify.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +modify.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +modify.o: $(hdrdir)/ruby/internal/compiler_since.h +modify.o: $(hdrdir)/ruby/internal/config.h +modify.o: $(hdrdir)/ruby/internal/constant_p.h +modify.o: $(hdrdir)/ruby/internal/core.h +modify.o: $(hdrdir)/ruby/internal/core/rarray.h +modify.o: $(hdrdir)/ruby/internal/core/rbasic.h +modify.o: $(hdrdir)/ruby/internal/core/rbignum.h +modify.o: $(hdrdir)/ruby/internal/core/rclass.h +modify.o: $(hdrdir)/ruby/internal/core/rdata.h +modify.o: $(hdrdir)/ruby/internal/core/rfile.h +modify.o: $(hdrdir)/ruby/internal/core/rhash.h +modify.o: $(hdrdir)/ruby/internal/core/robject.h +modify.o: $(hdrdir)/ruby/internal/core/rregexp.h +modify.o: $(hdrdir)/ruby/internal/core/rstring.h +modify.o: $(hdrdir)/ruby/internal/core/rstruct.h +modify.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +modify.o: $(hdrdir)/ruby/internal/ctype.h +modify.o: $(hdrdir)/ruby/internal/dllexport.h +modify.o: $(hdrdir)/ruby/internal/dosish.h +modify.o: $(hdrdir)/ruby/internal/error.h +modify.o: $(hdrdir)/ruby/internal/eval.h +modify.o: $(hdrdir)/ruby/internal/event.h +modify.o: $(hdrdir)/ruby/internal/fl_type.h +modify.o: $(hdrdir)/ruby/internal/gc.h +modify.o: $(hdrdir)/ruby/internal/glob.h +modify.o: $(hdrdir)/ruby/internal/globals.h +modify.o: $(hdrdir)/ruby/internal/has/attribute.h +modify.o: $(hdrdir)/ruby/internal/has/builtin.h +modify.o: $(hdrdir)/ruby/internal/has/c_attribute.h +modify.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +modify.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +modify.o: $(hdrdir)/ruby/internal/has/extension.h +modify.o: $(hdrdir)/ruby/internal/has/feature.h +modify.o: $(hdrdir)/ruby/internal/has/warning.h +modify.o: $(hdrdir)/ruby/internal/intern/array.h +modify.o: $(hdrdir)/ruby/internal/intern/bignum.h +modify.o: $(hdrdir)/ruby/internal/intern/class.h +modify.o: $(hdrdir)/ruby/internal/intern/compar.h +modify.o: $(hdrdir)/ruby/internal/intern/complex.h +modify.o: $(hdrdir)/ruby/internal/intern/cont.h +modify.o: $(hdrdir)/ruby/internal/intern/dir.h +modify.o: $(hdrdir)/ruby/internal/intern/enum.h +modify.o: $(hdrdir)/ruby/internal/intern/enumerator.h +modify.o: $(hdrdir)/ruby/internal/intern/error.h +modify.o: $(hdrdir)/ruby/internal/intern/eval.h +modify.o: $(hdrdir)/ruby/internal/intern/file.h +modify.o: $(hdrdir)/ruby/internal/intern/gc.h +modify.o: $(hdrdir)/ruby/internal/intern/hash.h +modify.o: $(hdrdir)/ruby/internal/intern/io.h +modify.o: $(hdrdir)/ruby/internal/intern/load.h +modify.o: $(hdrdir)/ruby/internal/intern/marshal.h +modify.o: $(hdrdir)/ruby/internal/intern/numeric.h +modify.o: $(hdrdir)/ruby/internal/intern/object.h +modify.o: $(hdrdir)/ruby/internal/intern/parse.h +modify.o: $(hdrdir)/ruby/internal/intern/proc.h +modify.o: $(hdrdir)/ruby/internal/intern/process.h +modify.o: $(hdrdir)/ruby/internal/intern/random.h +modify.o: $(hdrdir)/ruby/internal/intern/range.h +modify.o: $(hdrdir)/ruby/internal/intern/rational.h +modify.o: $(hdrdir)/ruby/internal/intern/re.h +modify.o: $(hdrdir)/ruby/internal/intern/ruby.h +modify.o: $(hdrdir)/ruby/internal/intern/select.h +modify.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +modify.o: $(hdrdir)/ruby/internal/intern/signal.h +modify.o: $(hdrdir)/ruby/internal/intern/sprintf.h +modify.o: $(hdrdir)/ruby/internal/intern/string.h +modify.o: $(hdrdir)/ruby/internal/intern/struct.h +modify.o: $(hdrdir)/ruby/internal/intern/thread.h +modify.o: $(hdrdir)/ruby/internal/intern/time.h +modify.o: $(hdrdir)/ruby/internal/intern/variable.h +modify.o: $(hdrdir)/ruby/internal/intern/vm.h +modify.o: $(hdrdir)/ruby/internal/interpreter.h +modify.o: $(hdrdir)/ruby/internal/iterator.h +modify.o: $(hdrdir)/ruby/internal/memory.h +modify.o: $(hdrdir)/ruby/internal/method.h +modify.o: $(hdrdir)/ruby/internal/module.h +modify.o: $(hdrdir)/ruby/internal/newobj.h +modify.o: $(hdrdir)/ruby/internal/rgengc.h +modify.o: $(hdrdir)/ruby/internal/scan_args.h +modify.o: $(hdrdir)/ruby/internal/special_consts.h +modify.o: $(hdrdir)/ruby/internal/static_assert.h +modify.o: $(hdrdir)/ruby/internal/stdalign.h +modify.o: $(hdrdir)/ruby/internal/stdbool.h +modify.o: $(hdrdir)/ruby/internal/symbol.h +modify.o: $(hdrdir)/ruby/internal/value.h +modify.o: $(hdrdir)/ruby/internal/value_type.h +modify.o: $(hdrdir)/ruby/internal/variable.h +modify.o: $(hdrdir)/ruby/internal/warning_push.h +modify.o: $(hdrdir)/ruby/internal/xmalloc.h modify.o: $(hdrdir)/ruby/missing.h modify.o: $(hdrdir)/ruby/ruby.h modify.o: $(hdrdir)/ruby/st.h @@ -124,9 +1511,165 @@ new.o: $(arch_hdrdir)/ruby/config.h new.o: $(hdrdir)/ruby.h new.o: $(hdrdir)/ruby/assert.h new.o: $(hdrdir)/ruby/backward.h +new.o: $(hdrdir)/ruby/backward/2/assume.h +new.o: $(hdrdir)/ruby/backward/2/attributes.h +new.o: $(hdrdir)/ruby/backward/2/bool.h +new.o: $(hdrdir)/ruby/backward/2/inttypes.h +new.o: $(hdrdir)/ruby/backward/2/limits.h +new.o: $(hdrdir)/ruby/backward/2/long_long.h +new.o: $(hdrdir)/ruby/backward/2/stdalign.h +new.o: $(hdrdir)/ruby/backward/2/stdarg.h new.o: $(hdrdir)/ruby/defines.h new.o: $(hdrdir)/ruby/encoding.h new.o: $(hdrdir)/ruby/intern.h +new.o: $(hdrdir)/ruby/internal/anyargs.h +new.o: $(hdrdir)/ruby/internal/arithmetic.h +new.o: $(hdrdir)/ruby/internal/arithmetic/char.h +new.o: $(hdrdir)/ruby/internal/arithmetic/double.h +new.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +new.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/int.h +new.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/long.h +new.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +new.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/short.h +new.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +new.o: $(hdrdir)/ruby/internal/assume.h +new.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +new.o: $(hdrdir)/ruby/internal/attr/artificial.h +new.o: $(hdrdir)/ruby/internal/attr/cold.h +new.o: $(hdrdir)/ruby/internal/attr/const.h +new.o: $(hdrdir)/ruby/internal/attr/constexpr.h +new.o: $(hdrdir)/ruby/internal/attr/deprecated.h +new.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +new.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +new.o: $(hdrdir)/ruby/internal/attr/error.h +new.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +new.o: $(hdrdir)/ruby/internal/attr/forceinline.h +new.o: $(hdrdir)/ruby/internal/attr/format.h +new.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +new.o: $(hdrdir)/ruby/internal/attr/noalias.h +new.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +new.o: $(hdrdir)/ruby/internal/attr/noexcept.h +new.o: $(hdrdir)/ruby/internal/attr/noinline.h +new.o: $(hdrdir)/ruby/internal/attr/nonnull.h +new.o: $(hdrdir)/ruby/internal/attr/noreturn.h +new.o: $(hdrdir)/ruby/internal/attr/pure.h +new.o: $(hdrdir)/ruby/internal/attr/restrict.h +new.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +new.o: $(hdrdir)/ruby/internal/attr/warning.h +new.o: $(hdrdir)/ruby/internal/attr/weakref.h +new.o: $(hdrdir)/ruby/internal/cast.h +new.o: $(hdrdir)/ruby/internal/compiler_is.h +new.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +new.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +new.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +new.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +new.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +new.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +new.o: $(hdrdir)/ruby/internal/compiler_since.h +new.o: $(hdrdir)/ruby/internal/config.h +new.o: $(hdrdir)/ruby/internal/constant_p.h +new.o: $(hdrdir)/ruby/internal/core.h +new.o: $(hdrdir)/ruby/internal/core/rarray.h +new.o: $(hdrdir)/ruby/internal/core/rbasic.h +new.o: $(hdrdir)/ruby/internal/core/rbignum.h +new.o: $(hdrdir)/ruby/internal/core/rclass.h +new.o: $(hdrdir)/ruby/internal/core/rdata.h +new.o: $(hdrdir)/ruby/internal/core/rfile.h +new.o: $(hdrdir)/ruby/internal/core/rhash.h +new.o: $(hdrdir)/ruby/internal/core/robject.h +new.o: $(hdrdir)/ruby/internal/core/rregexp.h +new.o: $(hdrdir)/ruby/internal/core/rstring.h +new.o: $(hdrdir)/ruby/internal/core/rstruct.h +new.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +new.o: $(hdrdir)/ruby/internal/ctype.h +new.o: $(hdrdir)/ruby/internal/dllexport.h +new.o: $(hdrdir)/ruby/internal/dosish.h +new.o: $(hdrdir)/ruby/internal/encoding/coderange.h +new.o: $(hdrdir)/ruby/internal/encoding/ctype.h +new.o: $(hdrdir)/ruby/internal/encoding/encoding.h +new.o: $(hdrdir)/ruby/internal/encoding/pathname.h +new.o: $(hdrdir)/ruby/internal/encoding/re.h +new.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +new.o: $(hdrdir)/ruby/internal/encoding/string.h +new.o: $(hdrdir)/ruby/internal/encoding/symbol.h +new.o: $(hdrdir)/ruby/internal/encoding/transcode.h +new.o: $(hdrdir)/ruby/internal/error.h +new.o: $(hdrdir)/ruby/internal/eval.h +new.o: $(hdrdir)/ruby/internal/event.h +new.o: $(hdrdir)/ruby/internal/fl_type.h +new.o: $(hdrdir)/ruby/internal/gc.h +new.o: $(hdrdir)/ruby/internal/glob.h +new.o: $(hdrdir)/ruby/internal/globals.h +new.o: $(hdrdir)/ruby/internal/has/attribute.h +new.o: $(hdrdir)/ruby/internal/has/builtin.h +new.o: $(hdrdir)/ruby/internal/has/c_attribute.h +new.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +new.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +new.o: $(hdrdir)/ruby/internal/has/extension.h +new.o: $(hdrdir)/ruby/internal/has/feature.h +new.o: $(hdrdir)/ruby/internal/has/warning.h +new.o: $(hdrdir)/ruby/internal/intern/array.h +new.o: $(hdrdir)/ruby/internal/intern/bignum.h +new.o: $(hdrdir)/ruby/internal/intern/class.h +new.o: $(hdrdir)/ruby/internal/intern/compar.h +new.o: $(hdrdir)/ruby/internal/intern/complex.h +new.o: $(hdrdir)/ruby/internal/intern/cont.h +new.o: $(hdrdir)/ruby/internal/intern/dir.h +new.o: $(hdrdir)/ruby/internal/intern/enum.h +new.o: $(hdrdir)/ruby/internal/intern/enumerator.h +new.o: $(hdrdir)/ruby/internal/intern/error.h +new.o: $(hdrdir)/ruby/internal/intern/eval.h +new.o: $(hdrdir)/ruby/internal/intern/file.h +new.o: $(hdrdir)/ruby/internal/intern/gc.h +new.o: $(hdrdir)/ruby/internal/intern/hash.h +new.o: $(hdrdir)/ruby/internal/intern/io.h +new.o: $(hdrdir)/ruby/internal/intern/load.h +new.o: $(hdrdir)/ruby/internal/intern/marshal.h +new.o: $(hdrdir)/ruby/internal/intern/numeric.h +new.o: $(hdrdir)/ruby/internal/intern/object.h +new.o: $(hdrdir)/ruby/internal/intern/parse.h +new.o: $(hdrdir)/ruby/internal/intern/proc.h +new.o: $(hdrdir)/ruby/internal/intern/process.h +new.o: $(hdrdir)/ruby/internal/intern/random.h +new.o: $(hdrdir)/ruby/internal/intern/range.h +new.o: $(hdrdir)/ruby/internal/intern/rational.h +new.o: $(hdrdir)/ruby/internal/intern/re.h +new.o: $(hdrdir)/ruby/internal/intern/ruby.h +new.o: $(hdrdir)/ruby/internal/intern/select.h +new.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +new.o: $(hdrdir)/ruby/internal/intern/signal.h +new.o: $(hdrdir)/ruby/internal/intern/sprintf.h +new.o: $(hdrdir)/ruby/internal/intern/string.h +new.o: $(hdrdir)/ruby/internal/intern/struct.h +new.o: $(hdrdir)/ruby/internal/intern/thread.h +new.o: $(hdrdir)/ruby/internal/intern/time.h +new.o: $(hdrdir)/ruby/internal/intern/variable.h +new.o: $(hdrdir)/ruby/internal/intern/vm.h +new.o: $(hdrdir)/ruby/internal/interpreter.h +new.o: $(hdrdir)/ruby/internal/iterator.h +new.o: $(hdrdir)/ruby/internal/memory.h +new.o: $(hdrdir)/ruby/internal/method.h +new.o: $(hdrdir)/ruby/internal/module.h +new.o: $(hdrdir)/ruby/internal/newobj.h +new.o: $(hdrdir)/ruby/internal/rgengc.h +new.o: $(hdrdir)/ruby/internal/scan_args.h +new.o: $(hdrdir)/ruby/internal/special_consts.h +new.o: $(hdrdir)/ruby/internal/static_assert.h +new.o: $(hdrdir)/ruby/internal/stdalign.h +new.o: $(hdrdir)/ruby/internal/stdbool.h +new.o: $(hdrdir)/ruby/internal/symbol.h +new.o: $(hdrdir)/ruby/internal/value.h +new.o: $(hdrdir)/ruby/internal/value_type.h +new.o: $(hdrdir)/ruby/internal/variable.h +new.o: $(hdrdir)/ruby/internal/warning_push.h +new.o: $(hdrdir)/ruby/internal/xmalloc.h new.o: $(hdrdir)/ruby/missing.h new.o: $(hdrdir)/ruby/onigmo.h new.o: $(hdrdir)/ruby/oniguruma.h @@ -139,8 +1682,155 @@ nofree.o: $(arch_hdrdir)/ruby/config.h nofree.o: $(hdrdir)/ruby.h nofree.o: $(hdrdir)/ruby/assert.h nofree.o: $(hdrdir)/ruby/backward.h +nofree.o: $(hdrdir)/ruby/backward/2/assume.h +nofree.o: $(hdrdir)/ruby/backward/2/attributes.h +nofree.o: $(hdrdir)/ruby/backward/2/bool.h +nofree.o: $(hdrdir)/ruby/backward/2/inttypes.h +nofree.o: $(hdrdir)/ruby/backward/2/limits.h +nofree.o: $(hdrdir)/ruby/backward/2/long_long.h +nofree.o: $(hdrdir)/ruby/backward/2/stdalign.h +nofree.o: $(hdrdir)/ruby/backward/2/stdarg.h nofree.o: $(hdrdir)/ruby/defines.h nofree.o: $(hdrdir)/ruby/intern.h +nofree.o: $(hdrdir)/ruby/internal/anyargs.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/char.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/double.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/int.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/long.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/short.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +nofree.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +nofree.o: $(hdrdir)/ruby/internal/assume.h +nofree.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +nofree.o: $(hdrdir)/ruby/internal/attr/artificial.h +nofree.o: $(hdrdir)/ruby/internal/attr/cold.h +nofree.o: $(hdrdir)/ruby/internal/attr/const.h +nofree.o: $(hdrdir)/ruby/internal/attr/constexpr.h +nofree.o: $(hdrdir)/ruby/internal/attr/deprecated.h +nofree.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +nofree.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +nofree.o: $(hdrdir)/ruby/internal/attr/error.h +nofree.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +nofree.o: $(hdrdir)/ruby/internal/attr/forceinline.h +nofree.o: $(hdrdir)/ruby/internal/attr/format.h +nofree.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +nofree.o: $(hdrdir)/ruby/internal/attr/noalias.h +nofree.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +nofree.o: $(hdrdir)/ruby/internal/attr/noexcept.h +nofree.o: $(hdrdir)/ruby/internal/attr/noinline.h +nofree.o: $(hdrdir)/ruby/internal/attr/nonnull.h +nofree.o: $(hdrdir)/ruby/internal/attr/noreturn.h +nofree.o: $(hdrdir)/ruby/internal/attr/pure.h +nofree.o: $(hdrdir)/ruby/internal/attr/restrict.h +nofree.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +nofree.o: $(hdrdir)/ruby/internal/attr/warning.h +nofree.o: $(hdrdir)/ruby/internal/attr/weakref.h +nofree.o: $(hdrdir)/ruby/internal/cast.h +nofree.o: $(hdrdir)/ruby/internal/compiler_is.h +nofree.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +nofree.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +nofree.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +nofree.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +nofree.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +nofree.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +nofree.o: $(hdrdir)/ruby/internal/compiler_since.h +nofree.o: $(hdrdir)/ruby/internal/config.h +nofree.o: $(hdrdir)/ruby/internal/constant_p.h +nofree.o: $(hdrdir)/ruby/internal/core.h +nofree.o: $(hdrdir)/ruby/internal/core/rarray.h +nofree.o: $(hdrdir)/ruby/internal/core/rbasic.h +nofree.o: $(hdrdir)/ruby/internal/core/rbignum.h +nofree.o: $(hdrdir)/ruby/internal/core/rclass.h +nofree.o: $(hdrdir)/ruby/internal/core/rdata.h +nofree.o: $(hdrdir)/ruby/internal/core/rfile.h +nofree.o: $(hdrdir)/ruby/internal/core/rhash.h +nofree.o: $(hdrdir)/ruby/internal/core/robject.h +nofree.o: $(hdrdir)/ruby/internal/core/rregexp.h +nofree.o: $(hdrdir)/ruby/internal/core/rstring.h +nofree.o: $(hdrdir)/ruby/internal/core/rstruct.h +nofree.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +nofree.o: $(hdrdir)/ruby/internal/ctype.h +nofree.o: $(hdrdir)/ruby/internal/dllexport.h +nofree.o: $(hdrdir)/ruby/internal/dosish.h +nofree.o: $(hdrdir)/ruby/internal/error.h +nofree.o: $(hdrdir)/ruby/internal/eval.h +nofree.o: $(hdrdir)/ruby/internal/event.h +nofree.o: $(hdrdir)/ruby/internal/fl_type.h +nofree.o: $(hdrdir)/ruby/internal/gc.h +nofree.o: $(hdrdir)/ruby/internal/glob.h +nofree.o: $(hdrdir)/ruby/internal/globals.h +nofree.o: $(hdrdir)/ruby/internal/has/attribute.h +nofree.o: $(hdrdir)/ruby/internal/has/builtin.h +nofree.o: $(hdrdir)/ruby/internal/has/c_attribute.h +nofree.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +nofree.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +nofree.o: $(hdrdir)/ruby/internal/has/extension.h +nofree.o: $(hdrdir)/ruby/internal/has/feature.h +nofree.o: $(hdrdir)/ruby/internal/has/warning.h +nofree.o: $(hdrdir)/ruby/internal/intern/array.h +nofree.o: $(hdrdir)/ruby/internal/intern/bignum.h +nofree.o: $(hdrdir)/ruby/internal/intern/class.h +nofree.o: $(hdrdir)/ruby/internal/intern/compar.h +nofree.o: $(hdrdir)/ruby/internal/intern/complex.h +nofree.o: $(hdrdir)/ruby/internal/intern/cont.h +nofree.o: $(hdrdir)/ruby/internal/intern/dir.h +nofree.o: $(hdrdir)/ruby/internal/intern/enum.h +nofree.o: $(hdrdir)/ruby/internal/intern/enumerator.h +nofree.o: $(hdrdir)/ruby/internal/intern/error.h +nofree.o: $(hdrdir)/ruby/internal/intern/eval.h +nofree.o: $(hdrdir)/ruby/internal/intern/file.h +nofree.o: $(hdrdir)/ruby/internal/intern/gc.h +nofree.o: $(hdrdir)/ruby/internal/intern/hash.h +nofree.o: $(hdrdir)/ruby/internal/intern/io.h +nofree.o: $(hdrdir)/ruby/internal/intern/load.h +nofree.o: $(hdrdir)/ruby/internal/intern/marshal.h +nofree.o: $(hdrdir)/ruby/internal/intern/numeric.h +nofree.o: $(hdrdir)/ruby/internal/intern/object.h +nofree.o: $(hdrdir)/ruby/internal/intern/parse.h +nofree.o: $(hdrdir)/ruby/internal/intern/proc.h +nofree.o: $(hdrdir)/ruby/internal/intern/process.h +nofree.o: $(hdrdir)/ruby/internal/intern/random.h +nofree.o: $(hdrdir)/ruby/internal/intern/range.h +nofree.o: $(hdrdir)/ruby/internal/intern/rational.h +nofree.o: $(hdrdir)/ruby/internal/intern/re.h +nofree.o: $(hdrdir)/ruby/internal/intern/ruby.h +nofree.o: $(hdrdir)/ruby/internal/intern/select.h +nofree.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +nofree.o: $(hdrdir)/ruby/internal/intern/signal.h +nofree.o: $(hdrdir)/ruby/internal/intern/sprintf.h +nofree.o: $(hdrdir)/ruby/internal/intern/string.h +nofree.o: $(hdrdir)/ruby/internal/intern/struct.h +nofree.o: $(hdrdir)/ruby/internal/intern/thread.h +nofree.o: $(hdrdir)/ruby/internal/intern/time.h +nofree.o: $(hdrdir)/ruby/internal/intern/variable.h +nofree.o: $(hdrdir)/ruby/internal/intern/vm.h +nofree.o: $(hdrdir)/ruby/internal/interpreter.h +nofree.o: $(hdrdir)/ruby/internal/iterator.h +nofree.o: $(hdrdir)/ruby/internal/memory.h +nofree.o: $(hdrdir)/ruby/internal/method.h +nofree.o: $(hdrdir)/ruby/internal/module.h +nofree.o: $(hdrdir)/ruby/internal/newobj.h +nofree.o: $(hdrdir)/ruby/internal/rgengc.h +nofree.o: $(hdrdir)/ruby/internal/scan_args.h +nofree.o: $(hdrdir)/ruby/internal/special_consts.h +nofree.o: $(hdrdir)/ruby/internal/static_assert.h +nofree.o: $(hdrdir)/ruby/internal/stdalign.h +nofree.o: $(hdrdir)/ruby/internal/stdbool.h +nofree.o: $(hdrdir)/ruby/internal/symbol.h +nofree.o: $(hdrdir)/ruby/internal/value.h +nofree.o: $(hdrdir)/ruby/internal/value_type.h +nofree.o: $(hdrdir)/ruby/internal/variable.h +nofree.o: $(hdrdir)/ruby/internal/warning_push.h +nofree.o: $(hdrdir)/ruby/internal/xmalloc.h nofree.o: $(hdrdir)/ruby/missing.h nofree.o: $(hdrdir)/ruby/ruby.h nofree.o: $(hdrdir)/ruby/st.h @@ -148,25 +1838,339 @@ nofree.o: $(hdrdir)/ruby/subst.h nofree.o: nofree.c normalize.o: $(RUBY_EXTCONF_H) normalize.o: $(arch_hdrdir)/ruby/config.h -normalize.o: $(hdrdir)/ruby.h normalize.o: $(hdrdir)/ruby/assert.h normalize.o: $(hdrdir)/ruby/backward.h +normalize.o: $(hdrdir)/ruby/backward/2/assume.h +normalize.o: $(hdrdir)/ruby/backward/2/attributes.h +normalize.o: $(hdrdir)/ruby/backward/2/bool.h +normalize.o: $(hdrdir)/ruby/backward/2/inttypes.h +normalize.o: $(hdrdir)/ruby/backward/2/limits.h +normalize.o: $(hdrdir)/ruby/backward/2/long_long.h +normalize.o: $(hdrdir)/ruby/backward/2/stdalign.h +normalize.o: $(hdrdir)/ruby/backward/2/stdarg.h normalize.o: $(hdrdir)/ruby/defines.h +normalize.o: $(hdrdir)/ruby/encoding.h normalize.o: $(hdrdir)/ruby/intern.h +normalize.o: $(hdrdir)/ruby/internal/anyargs.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/char.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/double.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/int.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/long.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/short.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +normalize.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +normalize.o: $(hdrdir)/ruby/internal/assume.h +normalize.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +normalize.o: $(hdrdir)/ruby/internal/attr/artificial.h +normalize.o: $(hdrdir)/ruby/internal/attr/cold.h +normalize.o: $(hdrdir)/ruby/internal/attr/const.h +normalize.o: $(hdrdir)/ruby/internal/attr/constexpr.h +normalize.o: $(hdrdir)/ruby/internal/attr/deprecated.h +normalize.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +normalize.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +normalize.o: $(hdrdir)/ruby/internal/attr/error.h +normalize.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +normalize.o: $(hdrdir)/ruby/internal/attr/forceinline.h +normalize.o: $(hdrdir)/ruby/internal/attr/format.h +normalize.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +normalize.o: $(hdrdir)/ruby/internal/attr/noalias.h +normalize.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +normalize.o: $(hdrdir)/ruby/internal/attr/noexcept.h +normalize.o: $(hdrdir)/ruby/internal/attr/noinline.h +normalize.o: $(hdrdir)/ruby/internal/attr/nonnull.h +normalize.o: $(hdrdir)/ruby/internal/attr/noreturn.h +normalize.o: $(hdrdir)/ruby/internal/attr/pure.h +normalize.o: $(hdrdir)/ruby/internal/attr/restrict.h +normalize.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +normalize.o: $(hdrdir)/ruby/internal/attr/warning.h +normalize.o: $(hdrdir)/ruby/internal/attr/weakref.h +normalize.o: $(hdrdir)/ruby/internal/cast.h +normalize.o: $(hdrdir)/ruby/internal/compiler_is.h +normalize.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +normalize.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +normalize.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +normalize.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +normalize.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +normalize.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +normalize.o: $(hdrdir)/ruby/internal/compiler_since.h +normalize.o: $(hdrdir)/ruby/internal/config.h +normalize.o: $(hdrdir)/ruby/internal/constant_p.h +normalize.o: $(hdrdir)/ruby/internal/core.h +normalize.o: $(hdrdir)/ruby/internal/core/rarray.h +normalize.o: $(hdrdir)/ruby/internal/core/rbasic.h +normalize.o: $(hdrdir)/ruby/internal/core/rbignum.h +normalize.o: $(hdrdir)/ruby/internal/core/rclass.h +normalize.o: $(hdrdir)/ruby/internal/core/rdata.h +normalize.o: $(hdrdir)/ruby/internal/core/rfile.h +normalize.o: $(hdrdir)/ruby/internal/core/rhash.h +normalize.o: $(hdrdir)/ruby/internal/core/robject.h +normalize.o: $(hdrdir)/ruby/internal/core/rregexp.h +normalize.o: $(hdrdir)/ruby/internal/core/rstring.h +normalize.o: $(hdrdir)/ruby/internal/core/rstruct.h +normalize.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +normalize.o: $(hdrdir)/ruby/internal/ctype.h +normalize.o: $(hdrdir)/ruby/internal/dllexport.h +normalize.o: $(hdrdir)/ruby/internal/dosish.h +normalize.o: $(hdrdir)/ruby/internal/encoding/coderange.h +normalize.o: $(hdrdir)/ruby/internal/encoding/ctype.h +normalize.o: $(hdrdir)/ruby/internal/encoding/encoding.h +normalize.o: $(hdrdir)/ruby/internal/encoding/pathname.h +normalize.o: $(hdrdir)/ruby/internal/encoding/re.h +normalize.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +normalize.o: $(hdrdir)/ruby/internal/encoding/string.h +normalize.o: $(hdrdir)/ruby/internal/encoding/symbol.h +normalize.o: $(hdrdir)/ruby/internal/encoding/transcode.h +normalize.o: $(hdrdir)/ruby/internal/error.h +normalize.o: $(hdrdir)/ruby/internal/eval.h +normalize.o: $(hdrdir)/ruby/internal/event.h +normalize.o: $(hdrdir)/ruby/internal/fl_type.h +normalize.o: $(hdrdir)/ruby/internal/gc.h +normalize.o: $(hdrdir)/ruby/internal/glob.h +normalize.o: $(hdrdir)/ruby/internal/globals.h +normalize.o: $(hdrdir)/ruby/internal/has/attribute.h +normalize.o: $(hdrdir)/ruby/internal/has/builtin.h +normalize.o: $(hdrdir)/ruby/internal/has/c_attribute.h +normalize.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +normalize.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +normalize.o: $(hdrdir)/ruby/internal/has/extension.h +normalize.o: $(hdrdir)/ruby/internal/has/feature.h +normalize.o: $(hdrdir)/ruby/internal/has/warning.h +normalize.o: $(hdrdir)/ruby/internal/intern/array.h +normalize.o: $(hdrdir)/ruby/internal/intern/bignum.h +normalize.o: $(hdrdir)/ruby/internal/intern/class.h +normalize.o: $(hdrdir)/ruby/internal/intern/compar.h +normalize.o: $(hdrdir)/ruby/internal/intern/complex.h +normalize.o: $(hdrdir)/ruby/internal/intern/cont.h +normalize.o: $(hdrdir)/ruby/internal/intern/dir.h +normalize.o: $(hdrdir)/ruby/internal/intern/enum.h +normalize.o: $(hdrdir)/ruby/internal/intern/enumerator.h +normalize.o: $(hdrdir)/ruby/internal/intern/error.h +normalize.o: $(hdrdir)/ruby/internal/intern/eval.h +normalize.o: $(hdrdir)/ruby/internal/intern/file.h +normalize.o: $(hdrdir)/ruby/internal/intern/gc.h +normalize.o: $(hdrdir)/ruby/internal/intern/hash.h +normalize.o: $(hdrdir)/ruby/internal/intern/io.h +normalize.o: $(hdrdir)/ruby/internal/intern/load.h +normalize.o: $(hdrdir)/ruby/internal/intern/marshal.h +normalize.o: $(hdrdir)/ruby/internal/intern/numeric.h +normalize.o: $(hdrdir)/ruby/internal/intern/object.h +normalize.o: $(hdrdir)/ruby/internal/intern/parse.h +normalize.o: $(hdrdir)/ruby/internal/intern/proc.h +normalize.o: $(hdrdir)/ruby/internal/intern/process.h +normalize.o: $(hdrdir)/ruby/internal/intern/random.h +normalize.o: $(hdrdir)/ruby/internal/intern/range.h +normalize.o: $(hdrdir)/ruby/internal/intern/rational.h +normalize.o: $(hdrdir)/ruby/internal/intern/re.h +normalize.o: $(hdrdir)/ruby/internal/intern/ruby.h +normalize.o: $(hdrdir)/ruby/internal/intern/select.h +normalize.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +normalize.o: $(hdrdir)/ruby/internal/intern/signal.h +normalize.o: $(hdrdir)/ruby/internal/intern/sprintf.h +normalize.o: $(hdrdir)/ruby/internal/intern/string.h +normalize.o: $(hdrdir)/ruby/internal/intern/struct.h +normalize.o: $(hdrdir)/ruby/internal/intern/thread.h +normalize.o: $(hdrdir)/ruby/internal/intern/time.h +normalize.o: $(hdrdir)/ruby/internal/intern/variable.h +normalize.o: $(hdrdir)/ruby/internal/intern/vm.h +normalize.o: $(hdrdir)/ruby/internal/interpreter.h +normalize.o: $(hdrdir)/ruby/internal/iterator.h +normalize.o: $(hdrdir)/ruby/internal/memory.h +normalize.o: $(hdrdir)/ruby/internal/method.h +normalize.o: $(hdrdir)/ruby/internal/module.h +normalize.o: $(hdrdir)/ruby/internal/newobj.h +normalize.o: $(hdrdir)/ruby/internal/rgengc.h +normalize.o: $(hdrdir)/ruby/internal/scan_args.h +normalize.o: $(hdrdir)/ruby/internal/special_consts.h +normalize.o: $(hdrdir)/ruby/internal/static_assert.h +normalize.o: $(hdrdir)/ruby/internal/stdalign.h +normalize.o: $(hdrdir)/ruby/internal/stdbool.h +normalize.o: $(hdrdir)/ruby/internal/symbol.h +normalize.o: $(hdrdir)/ruby/internal/value.h +normalize.o: $(hdrdir)/ruby/internal/value_type.h +normalize.o: $(hdrdir)/ruby/internal/variable.h +normalize.o: $(hdrdir)/ruby/internal/warning_push.h +normalize.o: $(hdrdir)/ruby/internal/xmalloc.h normalize.o: $(hdrdir)/ruby/missing.h +normalize.o: $(hdrdir)/ruby/onigmo.h +normalize.o: $(hdrdir)/ruby/oniguruma.h normalize.o: $(hdrdir)/ruby/ruby.h normalize.o: $(hdrdir)/ruby/st.h normalize.o: $(hdrdir)/ruby/subst.h -normalize.o: $(top_srcdir)/internal.h +normalize.o: $(top_srcdir)/internal/file.h normalize.o: normalize.c qsort.o: $(RUBY_EXTCONF_H) qsort.o: $(arch_hdrdir)/ruby/config.h qsort.o: $(hdrdir)/ruby.h qsort.o: $(hdrdir)/ruby/assert.h qsort.o: $(hdrdir)/ruby/backward.h +qsort.o: $(hdrdir)/ruby/backward/2/assume.h +qsort.o: $(hdrdir)/ruby/backward/2/attributes.h +qsort.o: $(hdrdir)/ruby/backward/2/bool.h +qsort.o: $(hdrdir)/ruby/backward/2/inttypes.h +qsort.o: $(hdrdir)/ruby/backward/2/limits.h +qsort.o: $(hdrdir)/ruby/backward/2/long_long.h +qsort.o: $(hdrdir)/ruby/backward/2/stdalign.h +qsort.o: $(hdrdir)/ruby/backward/2/stdarg.h qsort.o: $(hdrdir)/ruby/defines.h qsort.o: $(hdrdir)/ruby/encoding.h qsort.o: $(hdrdir)/ruby/intern.h +qsort.o: $(hdrdir)/ruby/internal/anyargs.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/char.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/double.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/int.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/long.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/short.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +qsort.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +qsort.o: $(hdrdir)/ruby/internal/assume.h +qsort.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +qsort.o: $(hdrdir)/ruby/internal/attr/artificial.h +qsort.o: $(hdrdir)/ruby/internal/attr/cold.h +qsort.o: $(hdrdir)/ruby/internal/attr/const.h +qsort.o: $(hdrdir)/ruby/internal/attr/constexpr.h +qsort.o: $(hdrdir)/ruby/internal/attr/deprecated.h +qsort.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +qsort.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +qsort.o: $(hdrdir)/ruby/internal/attr/error.h +qsort.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +qsort.o: $(hdrdir)/ruby/internal/attr/forceinline.h +qsort.o: $(hdrdir)/ruby/internal/attr/format.h +qsort.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +qsort.o: $(hdrdir)/ruby/internal/attr/noalias.h +qsort.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +qsort.o: $(hdrdir)/ruby/internal/attr/noexcept.h +qsort.o: $(hdrdir)/ruby/internal/attr/noinline.h +qsort.o: $(hdrdir)/ruby/internal/attr/nonnull.h +qsort.o: $(hdrdir)/ruby/internal/attr/noreturn.h +qsort.o: $(hdrdir)/ruby/internal/attr/pure.h +qsort.o: $(hdrdir)/ruby/internal/attr/restrict.h +qsort.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +qsort.o: $(hdrdir)/ruby/internal/attr/warning.h +qsort.o: $(hdrdir)/ruby/internal/attr/weakref.h +qsort.o: $(hdrdir)/ruby/internal/cast.h +qsort.o: $(hdrdir)/ruby/internal/compiler_is.h +qsort.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +qsort.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +qsort.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +qsort.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +qsort.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +qsort.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +qsort.o: $(hdrdir)/ruby/internal/compiler_since.h +qsort.o: $(hdrdir)/ruby/internal/config.h +qsort.o: $(hdrdir)/ruby/internal/constant_p.h +qsort.o: $(hdrdir)/ruby/internal/core.h +qsort.o: $(hdrdir)/ruby/internal/core/rarray.h +qsort.o: $(hdrdir)/ruby/internal/core/rbasic.h +qsort.o: $(hdrdir)/ruby/internal/core/rbignum.h +qsort.o: $(hdrdir)/ruby/internal/core/rclass.h +qsort.o: $(hdrdir)/ruby/internal/core/rdata.h +qsort.o: $(hdrdir)/ruby/internal/core/rfile.h +qsort.o: $(hdrdir)/ruby/internal/core/rhash.h +qsort.o: $(hdrdir)/ruby/internal/core/robject.h +qsort.o: $(hdrdir)/ruby/internal/core/rregexp.h +qsort.o: $(hdrdir)/ruby/internal/core/rstring.h +qsort.o: $(hdrdir)/ruby/internal/core/rstruct.h +qsort.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +qsort.o: $(hdrdir)/ruby/internal/ctype.h +qsort.o: $(hdrdir)/ruby/internal/dllexport.h +qsort.o: $(hdrdir)/ruby/internal/dosish.h +qsort.o: $(hdrdir)/ruby/internal/encoding/coderange.h +qsort.o: $(hdrdir)/ruby/internal/encoding/ctype.h +qsort.o: $(hdrdir)/ruby/internal/encoding/encoding.h +qsort.o: $(hdrdir)/ruby/internal/encoding/pathname.h +qsort.o: $(hdrdir)/ruby/internal/encoding/re.h +qsort.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +qsort.o: $(hdrdir)/ruby/internal/encoding/string.h +qsort.o: $(hdrdir)/ruby/internal/encoding/symbol.h +qsort.o: $(hdrdir)/ruby/internal/encoding/transcode.h +qsort.o: $(hdrdir)/ruby/internal/error.h +qsort.o: $(hdrdir)/ruby/internal/eval.h +qsort.o: $(hdrdir)/ruby/internal/event.h +qsort.o: $(hdrdir)/ruby/internal/fl_type.h +qsort.o: $(hdrdir)/ruby/internal/gc.h +qsort.o: $(hdrdir)/ruby/internal/glob.h +qsort.o: $(hdrdir)/ruby/internal/globals.h +qsort.o: $(hdrdir)/ruby/internal/has/attribute.h +qsort.o: $(hdrdir)/ruby/internal/has/builtin.h +qsort.o: $(hdrdir)/ruby/internal/has/c_attribute.h +qsort.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +qsort.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +qsort.o: $(hdrdir)/ruby/internal/has/extension.h +qsort.o: $(hdrdir)/ruby/internal/has/feature.h +qsort.o: $(hdrdir)/ruby/internal/has/warning.h +qsort.o: $(hdrdir)/ruby/internal/intern/array.h +qsort.o: $(hdrdir)/ruby/internal/intern/bignum.h +qsort.o: $(hdrdir)/ruby/internal/intern/class.h +qsort.o: $(hdrdir)/ruby/internal/intern/compar.h +qsort.o: $(hdrdir)/ruby/internal/intern/complex.h +qsort.o: $(hdrdir)/ruby/internal/intern/cont.h +qsort.o: $(hdrdir)/ruby/internal/intern/dir.h +qsort.o: $(hdrdir)/ruby/internal/intern/enum.h +qsort.o: $(hdrdir)/ruby/internal/intern/enumerator.h +qsort.o: $(hdrdir)/ruby/internal/intern/error.h +qsort.o: $(hdrdir)/ruby/internal/intern/eval.h +qsort.o: $(hdrdir)/ruby/internal/intern/file.h +qsort.o: $(hdrdir)/ruby/internal/intern/gc.h +qsort.o: $(hdrdir)/ruby/internal/intern/hash.h +qsort.o: $(hdrdir)/ruby/internal/intern/io.h +qsort.o: $(hdrdir)/ruby/internal/intern/load.h +qsort.o: $(hdrdir)/ruby/internal/intern/marshal.h +qsort.o: $(hdrdir)/ruby/internal/intern/numeric.h +qsort.o: $(hdrdir)/ruby/internal/intern/object.h +qsort.o: $(hdrdir)/ruby/internal/intern/parse.h +qsort.o: $(hdrdir)/ruby/internal/intern/proc.h +qsort.o: $(hdrdir)/ruby/internal/intern/process.h +qsort.o: $(hdrdir)/ruby/internal/intern/random.h +qsort.o: $(hdrdir)/ruby/internal/intern/range.h +qsort.o: $(hdrdir)/ruby/internal/intern/rational.h +qsort.o: $(hdrdir)/ruby/internal/intern/re.h +qsort.o: $(hdrdir)/ruby/internal/intern/ruby.h +qsort.o: $(hdrdir)/ruby/internal/intern/select.h +qsort.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +qsort.o: $(hdrdir)/ruby/internal/intern/signal.h +qsort.o: $(hdrdir)/ruby/internal/intern/sprintf.h +qsort.o: $(hdrdir)/ruby/internal/intern/string.h +qsort.o: $(hdrdir)/ruby/internal/intern/struct.h +qsort.o: $(hdrdir)/ruby/internal/intern/thread.h +qsort.o: $(hdrdir)/ruby/internal/intern/time.h +qsort.o: $(hdrdir)/ruby/internal/intern/variable.h +qsort.o: $(hdrdir)/ruby/internal/intern/vm.h +qsort.o: $(hdrdir)/ruby/internal/interpreter.h +qsort.o: $(hdrdir)/ruby/internal/iterator.h +qsort.o: $(hdrdir)/ruby/internal/memory.h +qsort.o: $(hdrdir)/ruby/internal/method.h +qsort.o: $(hdrdir)/ruby/internal/module.h +qsort.o: $(hdrdir)/ruby/internal/newobj.h +qsort.o: $(hdrdir)/ruby/internal/rgengc.h +qsort.o: $(hdrdir)/ruby/internal/scan_args.h +qsort.o: $(hdrdir)/ruby/internal/special_consts.h +qsort.o: $(hdrdir)/ruby/internal/static_assert.h +qsort.o: $(hdrdir)/ruby/internal/stdalign.h +qsort.o: $(hdrdir)/ruby/internal/stdbool.h +qsort.o: $(hdrdir)/ruby/internal/symbol.h +qsort.o: $(hdrdir)/ruby/internal/value.h +qsort.o: $(hdrdir)/ruby/internal/value_type.h +qsort.o: $(hdrdir)/ruby/internal/variable.h +qsort.o: $(hdrdir)/ruby/internal/warning_push.h +qsort.o: $(hdrdir)/ruby/internal/xmalloc.h qsort.o: $(hdrdir)/ruby/missing.h qsort.o: $(hdrdir)/ruby/onigmo.h qsort.o: $(hdrdir)/ruby/oniguruma.h @@ -175,13 +2179,319 @@ qsort.o: $(hdrdir)/ruby/st.h qsort.o: $(hdrdir)/ruby/subst.h qsort.o: $(hdrdir)/ruby/util.h qsort.o: qsort.c +rb_interned_str.o: $(RUBY_EXTCONF_H) +rb_interned_str.o: $(arch_hdrdir)/ruby/config.h +rb_interned_str.o: $(hdrdir)/ruby.h +rb_interned_str.o: $(hdrdir)/ruby/assert.h +rb_interned_str.o: $(hdrdir)/ruby/backward.h +rb_interned_str.o: $(hdrdir)/ruby/backward/2/assume.h +rb_interned_str.o: $(hdrdir)/ruby/backward/2/attributes.h +rb_interned_str.o: $(hdrdir)/ruby/backward/2/bool.h +rb_interned_str.o: $(hdrdir)/ruby/backward/2/inttypes.h +rb_interned_str.o: $(hdrdir)/ruby/backward/2/limits.h +rb_interned_str.o: $(hdrdir)/ruby/backward/2/long_long.h +rb_interned_str.o: $(hdrdir)/ruby/backward/2/stdalign.h +rb_interned_str.o: $(hdrdir)/ruby/backward/2/stdarg.h +rb_interned_str.o: $(hdrdir)/ruby/defines.h +rb_interned_str.o: $(hdrdir)/ruby/intern.h +rb_interned_str.o: $(hdrdir)/ruby/internal/anyargs.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/char.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/double.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/int.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/long.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/short.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +rb_interned_str.o: $(hdrdir)/ruby/internal/assume.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/artificial.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/cold.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/const.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/constexpr.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/deprecated.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/error.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/forceinline.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/format.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/noalias.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/noexcept.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/noinline.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/nonnull.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/noreturn.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/pure.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/restrict.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/warning.h +rb_interned_str.o: $(hdrdir)/ruby/internal/attr/weakref.h +rb_interned_str.o: $(hdrdir)/ruby/internal/cast.h +rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is.h +rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_since.h +rb_interned_str.o: $(hdrdir)/ruby/internal/config.h +rb_interned_str.o: $(hdrdir)/ruby/internal/constant_p.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core/rarray.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core/rbasic.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core/rbignum.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core/rclass.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core/rdata.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core/rfile.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core/rhash.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core/robject.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core/rregexp.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core/rstring.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core/rstruct.h +rb_interned_str.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +rb_interned_str.o: $(hdrdir)/ruby/internal/ctype.h +rb_interned_str.o: $(hdrdir)/ruby/internal/dllexport.h +rb_interned_str.o: $(hdrdir)/ruby/internal/dosish.h +rb_interned_str.o: $(hdrdir)/ruby/internal/error.h +rb_interned_str.o: $(hdrdir)/ruby/internal/eval.h +rb_interned_str.o: $(hdrdir)/ruby/internal/event.h +rb_interned_str.o: $(hdrdir)/ruby/internal/fl_type.h +rb_interned_str.o: $(hdrdir)/ruby/internal/gc.h +rb_interned_str.o: $(hdrdir)/ruby/internal/glob.h +rb_interned_str.o: $(hdrdir)/ruby/internal/globals.h +rb_interned_str.o: $(hdrdir)/ruby/internal/has/attribute.h +rb_interned_str.o: $(hdrdir)/ruby/internal/has/builtin.h +rb_interned_str.o: $(hdrdir)/ruby/internal/has/c_attribute.h +rb_interned_str.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +rb_interned_str.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +rb_interned_str.o: $(hdrdir)/ruby/internal/has/extension.h +rb_interned_str.o: $(hdrdir)/ruby/internal/has/feature.h +rb_interned_str.o: $(hdrdir)/ruby/internal/has/warning.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/array.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/bignum.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/class.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/compar.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/complex.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/cont.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/dir.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/enum.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/enumerator.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/error.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/eval.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/file.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/gc.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/hash.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/io.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/load.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/marshal.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/numeric.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/object.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/parse.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/proc.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/process.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/random.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/range.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/rational.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/re.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/ruby.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/select.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/signal.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/sprintf.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/string.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/struct.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/thread.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/time.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/variable.h +rb_interned_str.o: $(hdrdir)/ruby/internal/intern/vm.h +rb_interned_str.o: $(hdrdir)/ruby/internal/interpreter.h +rb_interned_str.o: $(hdrdir)/ruby/internal/iterator.h +rb_interned_str.o: $(hdrdir)/ruby/internal/memory.h +rb_interned_str.o: $(hdrdir)/ruby/internal/method.h +rb_interned_str.o: $(hdrdir)/ruby/internal/module.h +rb_interned_str.o: $(hdrdir)/ruby/internal/newobj.h +rb_interned_str.o: $(hdrdir)/ruby/internal/rgengc.h +rb_interned_str.o: $(hdrdir)/ruby/internal/scan_args.h +rb_interned_str.o: $(hdrdir)/ruby/internal/special_consts.h +rb_interned_str.o: $(hdrdir)/ruby/internal/static_assert.h +rb_interned_str.o: $(hdrdir)/ruby/internal/stdalign.h +rb_interned_str.o: $(hdrdir)/ruby/internal/stdbool.h +rb_interned_str.o: $(hdrdir)/ruby/internal/symbol.h +rb_interned_str.o: $(hdrdir)/ruby/internal/value.h +rb_interned_str.o: $(hdrdir)/ruby/internal/value_type.h +rb_interned_str.o: $(hdrdir)/ruby/internal/variable.h +rb_interned_str.o: $(hdrdir)/ruby/internal/warning_push.h +rb_interned_str.o: $(hdrdir)/ruby/internal/xmalloc.h +rb_interned_str.o: $(hdrdir)/ruby/missing.h +rb_interned_str.o: $(hdrdir)/ruby/ruby.h +rb_interned_str.o: $(hdrdir)/ruby/st.h +rb_interned_str.o: $(hdrdir)/ruby/subst.h +rb_interned_str.o: rb_interned_str.c rb_str_dup.o: $(RUBY_EXTCONF_H) rb_str_dup.o: $(arch_hdrdir)/ruby/config.h rb_str_dup.o: $(hdrdir)/ruby.h rb_str_dup.o: $(hdrdir)/ruby/assert.h rb_str_dup.o: $(hdrdir)/ruby/backward.h +rb_str_dup.o: $(hdrdir)/ruby/backward/2/assume.h +rb_str_dup.o: $(hdrdir)/ruby/backward/2/attributes.h +rb_str_dup.o: $(hdrdir)/ruby/backward/2/bool.h +rb_str_dup.o: $(hdrdir)/ruby/backward/2/inttypes.h +rb_str_dup.o: $(hdrdir)/ruby/backward/2/limits.h +rb_str_dup.o: $(hdrdir)/ruby/backward/2/long_long.h +rb_str_dup.o: $(hdrdir)/ruby/backward/2/stdalign.h +rb_str_dup.o: $(hdrdir)/ruby/backward/2/stdarg.h rb_str_dup.o: $(hdrdir)/ruby/defines.h rb_str_dup.o: $(hdrdir)/ruby/intern.h +rb_str_dup.o: $(hdrdir)/ruby/internal/anyargs.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/char.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/double.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/int.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/long.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/short.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +rb_str_dup.o: $(hdrdir)/ruby/internal/assume.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/artificial.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/cold.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/const.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/constexpr.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/deprecated.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/error.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/forceinline.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/format.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/noalias.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/noexcept.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/noinline.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/nonnull.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/noreturn.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/pure.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/restrict.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/warning.h +rb_str_dup.o: $(hdrdir)/ruby/internal/attr/weakref.h +rb_str_dup.o: $(hdrdir)/ruby/internal/cast.h +rb_str_dup.o: $(hdrdir)/ruby/internal/compiler_is.h +rb_str_dup.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +rb_str_dup.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +rb_str_dup.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +rb_str_dup.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +rb_str_dup.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +rb_str_dup.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +rb_str_dup.o: $(hdrdir)/ruby/internal/compiler_since.h +rb_str_dup.o: $(hdrdir)/ruby/internal/config.h +rb_str_dup.o: $(hdrdir)/ruby/internal/constant_p.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core/rarray.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core/rbasic.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core/rbignum.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core/rclass.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core/rdata.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core/rfile.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core/rhash.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core/robject.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core/rregexp.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core/rstring.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core/rstruct.h +rb_str_dup.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +rb_str_dup.o: $(hdrdir)/ruby/internal/ctype.h +rb_str_dup.o: $(hdrdir)/ruby/internal/dllexport.h +rb_str_dup.o: $(hdrdir)/ruby/internal/dosish.h +rb_str_dup.o: $(hdrdir)/ruby/internal/error.h +rb_str_dup.o: $(hdrdir)/ruby/internal/eval.h +rb_str_dup.o: $(hdrdir)/ruby/internal/event.h +rb_str_dup.o: $(hdrdir)/ruby/internal/fl_type.h +rb_str_dup.o: $(hdrdir)/ruby/internal/gc.h +rb_str_dup.o: $(hdrdir)/ruby/internal/glob.h +rb_str_dup.o: $(hdrdir)/ruby/internal/globals.h +rb_str_dup.o: $(hdrdir)/ruby/internal/has/attribute.h +rb_str_dup.o: $(hdrdir)/ruby/internal/has/builtin.h +rb_str_dup.o: $(hdrdir)/ruby/internal/has/c_attribute.h +rb_str_dup.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +rb_str_dup.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +rb_str_dup.o: $(hdrdir)/ruby/internal/has/extension.h +rb_str_dup.o: $(hdrdir)/ruby/internal/has/feature.h +rb_str_dup.o: $(hdrdir)/ruby/internal/has/warning.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/array.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/bignum.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/class.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/compar.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/complex.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/cont.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/dir.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/enum.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/enumerator.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/error.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/eval.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/file.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/gc.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/hash.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/io.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/load.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/marshal.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/numeric.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/object.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/parse.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/proc.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/process.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/random.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/range.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/rational.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/re.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/ruby.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/select.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/signal.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/sprintf.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/string.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/struct.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/thread.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/time.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/variable.h +rb_str_dup.o: $(hdrdir)/ruby/internal/intern/vm.h +rb_str_dup.o: $(hdrdir)/ruby/internal/interpreter.h +rb_str_dup.o: $(hdrdir)/ruby/internal/iterator.h +rb_str_dup.o: $(hdrdir)/ruby/internal/memory.h +rb_str_dup.o: $(hdrdir)/ruby/internal/method.h +rb_str_dup.o: $(hdrdir)/ruby/internal/module.h +rb_str_dup.o: $(hdrdir)/ruby/internal/newobj.h +rb_str_dup.o: $(hdrdir)/ruby/internal/rgengc.h +rb_str_dup.o: $(hdrdir)/ruby/internal/scan_args.h +rb_str_dup.o: $(hdrdir)/ruby/internal/special_consts.h +rb_str_dup.o: $(hdrdir)/ruby/internal/static_assert.h +rb_str_dup.o: $(hdrdir)/ruby/internal/stdalign.h +rb_str_dup.o: $(hdrdir)/ruby/internal/stdbool.h +rb_str_dup.o: $(hdrdir)/ruby/internal/symbol.h +rb_str_dup.o: $(hdrdir)/ruby/internal/value.h +rb_str_dup.o: $(hdrdir)/ruby/internal/value_type.h +rb_str_dup.o: $(hdrdir)/ruby/internal/variable.h +rb_str_dup.o: $(hdrdir)/ruby/internal/warning_push.h +rb_str_dup.o: $(hdrdir)/ruby/internal/xmalloc.h rb_str_dup.o: $(hdrdir)/ruby/missing.h rb_str_dup.o: $(hdrdir)/ruby/ruby.h rb_str_dup.o: $(hdrdir)/ruby/st.h @@ -192,8 +2502,155 @@ set_len.o: $(arch_hdrdir)/ruby/config.h set_len.o: $(hdrdir)/ruby.h set_len.o: $(hdrdir)/ruby/assert.h set_len.o: $(hdrdir)/ruby/backward.h +set_len.o: $(hdrdir)/ruby/backward/2/assume.h +set_len.o: $(hdrdir)/ruby/backward/2/attributes.h +set_len.o: $(hdrdir)/ruby/backward/2/bool.h +set_len.o: $(hdrdir)/ruby/backward/2/inttypes.h +set_len.o: $(hdrdir)/ruby/backward/2/limits.h +set_len.o: $(hdrdir)/ruby/backward/2/long_long.h +set_len.o: $(hdrdir)/ruby/backward/2/stdalign.h +set_len.o: $(hdrdir)/ruby/backward/2/stdarg.h set_len.o: $(hdrdir)/ruby/defines.h set_len.o: $(hdrdir)/ruby/intern.h +set_len.o: $(hdrdir)/ruby/internal/anyargs.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/char.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/double.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/int.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/long.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/short.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +set_len.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +set_len.o: $(hdrdir)/ruby/internal/assume.h +set_len.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +set_len.o: $(hdrdir)/ruby/internal/attr/artificial.h +set_len.o: $(hdrdir)/ruby/internal/attr/cold.h +set_len.o: $(hdrdir)/ruby/internal/attr/const.h +set_len.o: $(hdrdir)/ruby/internal/attr/constexpr.h +set_len.o: $(hdrdir)/ruby/internal/attr/deprecated.h +set_len.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +set_len.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +set_len.o: $(hdrdir)/ruby/internal/attr/error.h +set_len.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +set_len.o: $(hdrdir)/ruby/internal/attr/forceinline.h +set_len.o: $(hdrdir)/ruby/internal/attr/format.h +set_len.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +set_len.o: $(hdrdir)/ruby/internal/attr/noalias.h +set_len.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +set_len.o: $(hdrdir)/ruby/internal/attr/noexcept.h +set_len.o: $(hdrdir)/ruby/internal/attr/noinline.h +set_len.o: $(hdrdir)/ruby/internal/attr/nonnull.h +set_len.o: $(hdrdir)/ruby/internal/attr/noreturn.h +set_len.o: $(hdrdir)/ruby/internal/attr/pure.h +set_len.o: $(hdrdir)/ruby/internal/attr/restrict.h +set_len.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +set_len.o: $(hdrdir)/ruby/internal/attr/warning.h +set_len.o: $(hdrdir)/ruby/internal/attr/weakref.h +set_len.o: $(hdrdir)/ruby/internal/cast.h +set_len.o: $(hdrdir)/ruby/internal/compiler_is.h +set_len.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +set_len.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +set_len.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +set_len.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +set_len.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +set_len.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +set_len.o: $(hdrdir)/ruby/internal/compiler_since.h +set_len.o: $(hdrdir)/ruby/internal/config.h +set_len.o: $(hdrdir)/ruby/internal/constant_p.h +set_len.o: $(hdrdir)/ruby/internal/core.h +set_len.o: $(hdrdir)/ruby/internal/core/rarray.h +set_len.o: $(hdrdir)/ruby/internal/core/rbasic.h +set_len.o: $(hdrdir)/ruby/internal/core/rbignum.h +set_len.o: $(hdrdir)/ruby/internal/core/rclass.h +set_len.o: $(hdrdir)/ruby/internal/core/rdata.h +set_len.o: $(hdrdir)/ruby/internal/core/rfile.h +set_len.o: $(hdrdir)/ruby/internal/core/rhash.h +set_len.o: $(hdrdir)/ruby/internal/core/robject.h +set_len.o: $(hdrdir)/ruby/internal/core/rregexp.h +set_len.o: $(hdrdir)/ruby/internal/core/rstring.h +set_len.o: $(hdrdir)/ruby/internal/core/rstruct.h +set_len.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +set_len.o: $(hdrdir)/ruby/internal/ctype.h +set_len.o: $(hdrdir)/ruby/internal/dllexport.h +set_len.o: $(hdrdir)/ruby/internal/dosish.h +set_len.o: $(hdrdir)/ruby/internal/error.h +set_len.o: $(hdrdir)/ruby/internal/eval.h +set_len.o: $(hdrdir)/ruby/internal/event.h +set_len.o: $(hdrdir)/ruby/internal/fl_type.h +set_len.o: $(hdrdir)/ruby/internal/gc.h +set_len.o: $(hdrdir)/ruby/internal/glob.h +set_len.o: $(hdrdir)/ruby/internal/globals.h +set_len.o: $(hdrdir)/ruby/internal/has/attribute.h +set_len.o: $(hdrdir)/ruby/internal/has/builtin.h +set_len.o: $(hdrdir)/ruby/internal/has/c_attribute.h +set_len.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +set_len.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +set_len.o: $(hdrdir)/ruby/internal/has/extension.h +set_len.o: $(hdrdir)/ruby/internal/has/feature.h +set_len.o: $(hdrdir)/ruby/internal/has/warning.h +set_len.o: $(hdrdir)/ruby/internal/intern/array.h +set_len.o: $(hdrdir)/ruby/internal/intern/bignum.h +set_len.o: $(hdrdir)/ruby/internal/intern/class.h +set_len.o: $(hdrdir)/ruby/internal/intern/compar.h +set_len.o: $(hdrdir)/ruby/internal/intern/complex.h +set_len.o: $(hdrdir)/ruby/internal/intern/cont.h +set_len.o: $(hdrdir)/ruby/internal/intern/dir.h +set_len.o: $(hdrdir)/ruby/internal/intern/enum.h +set_len.o: $(hdrdir)/ruby/internal/intern/enumerator.h +set_len.o: $(hdrdir)/ruby/internal/intern/error.h +set_len.o: $(hdrdir)/ruby/internal/intern/eval.h +set_len.o: $(hdrdir)/ruby/internal/intern/file.h +set_len.o: $(hdrdir)/ruby/internal/intern/gc.h +set_len.o: $(hdrdir)/ruby/internal/intern/hash.h +set_len.o: $(hdrdir)/ruby/internal/intern/io.h +set_len.o: $(hdrdir)/ruby/internal/intern/load.h +set_len.o: $(hdrdir)/ruby/internal/intern/marshal.h +set_len.o: $(hdrdir)/ruby/internal/intern/numeric.h +set_len.o: $(hdrdir)/ruby/internal/intern/object.h +set_len.o: $(hdrdir)/ruby/internal/intern/parse.h +set_len.o: $(hdrdir)/ruby/internal/intern/proc.h +set_len.o: $(hdrdir)/ruby/internal/intern/process.h +set_len.o: $(hdrdir)/ruby/internal/intern/random.h +set_len.o: $(hdrdir)/ruby/internal/intern/range.h +set_len.o: $(hdrdir)/ruby/internal/intern/rational.h +set_len.o: $(hdrdir)/ruby/internal/intern/re.h +set_len.o: $(hdrdir)/ruby/internal/intern/ruby.h +set_len.o: $(hdrdir)/ruby/internal/intern/select.h +set_len.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +set_len.o: $(hdrdir)/ruby/internal/intern/signal.h +set_len.o: $(hdrdir)/ruby/internal/intern/sprintf.h +set_len.o: $(hdrdir)/ruby/internal/intern/string.h +set_len.o: $(hdrdir)/ruby/internal/intern/struct.h +set_len.o: $(hdrdir)/ruby/internal/intern/thread.h +set_len.o: $(hdrdir)/ruby/internal/intern/time.h +set_len.o: $(hdrdir)/ruby/internal/intern/variable.h +set_len.o: $(hdrdir)/ruby/internal/intern/vm.h +set_len.o: $(hdrdir)/ruby/internal/interpreter.h +set_len.o: $(hdrdir)/ruby/internal/iterator.h +set_len.o: $(hdrdir)/ruby/internal/memory.h +set_len.o: $(hdrdir)/ruby/internal/method.h +set_len.o: $(hdrdir)/ruby/internal/module.h +set_len.o: $(hdrdir)/ruby/internal/newobj.h +set_len.o: $(hdrdir)/ruby/internal/rgengc.h +set_len.o: $(hdrdir)/ruby/internal/scan_args.h +set_len.o: $(hdrdir)/ruby/internal/special_consts.h +set_len.o: $(hdrdir)/ruby/internal/static_assert.h +set_len.o: $(hdrdir)/ruby/internal/stdalign.h +set_len.o: $(hdrdir)/ruby/internal/stdbool.h +set_len.o: $(hdrdir)/ruby/internal/symbol.h +set_len.o: $(hdrdir)/ruby/internal/value.h +set_len.o: $(hdrdir)/ruby/internal/value_type.h +set_len.o: $(hdrdir)/ruby/internal/variable.h +set_len.o: $(hdrdir)/ruby/internal/warning_push.h +set_len.o: $(hdrdir)/ruby/internal/xmalloc.h set_len.o: $(hdrdir)/ruby/missing.h set_len.o: $(hdrdir)/ruby/ruby.h set_len.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/string/enc_str_buf_cat.c b/ruby/ext/-test-/string/enc_str_buf_cat.c index 9ac4a298b..4c1b262e1 100644 --- a/ruby/ext/-test-/string/enc_str_buf_cat.c +++ b/ruby/ext/-test-/string/enc_str_buf_cat.c @@ -7,8 +7,22 @@ enc_str_buf_cat(VALUE str, VALUE str2) return rb_enc_str_buf_cat(str, RSTRING_PTR(str2), RSTRING_LEN(str2), rb_enc_get(str2)); } +static VALUE +str_conv_enc_opts(VALUE str, VALUE from, VALUE to, VALUE ecflags, VALUE ecopts) +{ + rb_encoding *from_enc = NIL_P(from) ? NULL : rb_to_encoding(from); + rb_encoding *to_enc = NIL_P(to) ? NULL : rb_to_encoding(to); + int flags = NUM2INT(ecflags); + if (!NIL_P(ecopts)) { + Check_Type(ecopts, T_HASH); + OBJ_FREEZE(ecopts); + } + return rb_str_conv_enc_opts(str, from_enc, to_enc, flags, ecopts); +} + void Init_string_enc_str_buf_cat(VALUE klass) { rb_define_method(klass, "enc_str_buf_cat", enc_str_buf_cat, 1); + rb_define_method(klass, "str_conv_enc_opts", str_conv_enc_opts, 4); } diff --git a/ruby/ext/-test-/string/fstring.c b/ruby/ext/-test-/string/fstring.c index 30120b42f..2374319fe 100644 --- a/ruby/ext/-test-/string/fstring.c +++ b/ruby/ext/-test-/string/fstring.c @@ -1,4 +1,5 @@ #include "ruby.h" +#include "ruby/encoding.h" VALUE rb_fstring(VALUE str); @@ -8,8 +9,22 @@ bug_s_fstring(VALUE self, VALUE str) return rb_fstring(str); } +VALUE +bug_s_rb_enc_interned_str(VALUE self, VALUE encoding) +{ + return rb_enc_interned_str("foo", 3, RDATA(encoding)->data); +} + +VALUE +bug_s_rb_enc_str_new(VALUE self, VALUE encoding) +{ + return rb_enc_str_new("foo", 3, RDATA(encoding)->data); +} + void Init_string_fstring(VALUE klass) { rb_define_singleton_method(klass, "fstring", bug_s_fstring, 1); + rb_define_singleton_method(klass, "rb_enc_interned_str", bug_s_rb_enc_interned_str, 1); + rb_define_singleton_method(klass, "rb_enc_str_new", bug_s_rb_enc_str_new, 1); } diff --git a/ruby/ext/-test-/string/normalize.c b/ruby/ext/-test-/string/normalize.c index 0ba179763..a069288ee 100644 --- a/ruby/ext/-test-/string/normalize.c +++ b/ruby/ext/-test-/string/normalize.c @@ -1,4 +1,4 @@ -#include "internal.h" +#include "internal/file.h" #ifdef __APPLE__ static VALUE diff --git a/ruby/ext/-test-/string/rb_interned_str.c b/ruby/ext/-test-/string/rb_interned_str.c new file mode 100644 index 000000000..47643ec24 --- /dev/null +++ b/ruby/ext/-test-/string/rb_interned_str.c @@ -0,0 +1,14 @@ +#include "ruby.h" + +static VALUE +bug_rb_interned_str_dup(VALUE self, VALUE str) +{ + Check_Type(str, T_STRING); + return rb_interned_str(RSTRING_PTR(str), RSTRING_LEN(str)); +} + +void +Init_string_rb_interned_str(VALUE klass) +{ + rb_define_singleton_method(klass, "rb_interned_str_dup", bug_rb_interned_str_dup, 1); +} diff --git a/ruby/ext/-test-/struct/depend b/ruby/ext/-test-/struct/depend index 552daf0ac..c9dcffd3c 100644 --- a/ruby/ext/-test-/struct/depend +++ b/ruby/ext/-test-/struct/depend @@ -4,8 +4,155 @@ duplicate.o: $(arch_hdrdir)/ruby/config.h duplicate.o: $(hdrdir)/ruby.h duplicate.o: $(hdrdir)/ruby/assert.h duplicate.o: $(hdrdir)/ruby/backward.h +duplicate.o: $(hdrdir)/ruby/backward/2/assume.h +duplicate.o: $(hdrdir)/ruby/backward/2/attributes.h +duplicate.o: $(hdrdir)/ruby/backward/2/bool.h +duplicate.o: $(hdrdir)/ruby/backward/2/inttypes.h +duplicate.o: $(hdrdir)/ruby/backward/2/limits.h +duplicate.o: $(hdrdir)/ruby/backward/2/long_long.h +duplicate.o: $(hdrdir)/ruby/backward/2/stdalign.h +duplicate.o: $(hdrdir)/ruby/backward/2/stdarg.h duplicate.o: $(hdrdir)/ruby/defines.h duplicate.o: $(hdrdir)/ruby/intern.h +duplicate.o: $(hdrdir)/ruby/internal/anyargs.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/char.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/double.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/int.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/long.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/short.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +duplicate.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +duplicate.o: $(hdrdir)/ruby/internal/assume.h +duplicate.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +duplicate.o: $(hdrdir)/ruby/internal/attr/artificial.h +duplicate.o: $(hdrdir)/ruby/internal/attr/cold.h +duplicate.o: $(hdrdir)/ruby/internal/attr/const.h +duplicate.o: $(hdrdir)/ruby/internal/attr/constexpr.h +duplicate.o: $(hdrdir)/ruby/internal/attr/deprecated.h +duplicate.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +duplicate.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +duplicate.o: $(hdrdir)/ruby/internal/attr/error.h +duplicate.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +duplicate.o: $(hdrdir)/ruby/internal/attr/forceinline.h +duplicate.o: $(hdrdir)/ruby/internal/attr/format.h +duplicate.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +duplicate.o: $(hdrdir)/ruby/internal/attr/noalias.h +duplicate.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +duplicate.o: $(hdrdir)/ruby/internal/attr/noexcept.h +duplicate.o: $(hdrdir)/ruby/internal/attr/noinline.h +duplicate.o: $(hdrdir)/ruby/internal/attr/nonnull.h +duplicate.o: $(hdrdir)/ruby/internal/attr/noreturn.h +duplicate.o: $(hdrdir)/ruby/internal/attr/pure.h +duplicate.o: $(hdrdir)/ruby/internal/attr/restrict.h +duplicate.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +duplicate.o: $(hdrdir)/ruby/internal/attr/warning.h +duplicate.o: $(hdrdir)/ruby/internal/attr/weakref.h +duplicate.o: $(hdrdir)/ruby/internal/cast.h +duplicate.o: $(hdrdir)/ruby/internal/compiler_is.h +duplicate.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +duplicate.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +duplicate.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +duplicate.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +duplicate.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +duplicate.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +duplicate.o: $(hdrdir)/ruby/internal/compiler_since.h +duplicate.o: $(hdrdir)/ruby/internal/config.h +duplicate.o: $(hdrdir)/ruby/internal/constant_p.h +duplicate.o: $(hdrdir)/ruby/internal/core.h +duplicate.o: $(hdrdir)/ruby/internal/core/rarray.h +duplicate.o: $(hdrdir)/ruby/internal/core/rbasic.h +duplicate.o: $(hdrdir)/ruby/internal/core/rbignum.h +duplicate.o: $(hdrdir)/ruby/internal/core/rclass.h +duplicate.o: $(hdrdir)/ruby/internal/core/rdata.h +duplicate.o: $(hdrdir)/ruby/internal/core/rfile.h +duplicate.o: $(hdrdir)/ruby/internal/core/rhash.h +duplicate.o: $(hdrdir)/ruby/internal/core/robject.h +duplicate.o: $(hdrdir)/ruby/internal/core/rregexp.h +duplicate.o: $(hdrdir)/ruby/internal/core/rstring.h +duplicate.o: $(hdrdir)/ruby/internal/core/rstruct.h +duplicate.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +duplicate.o: $(hdrdir)/ruby/internal/ctype.h +duplicate.o: $(hdrdir)/ruby/internal/dllexport.h +duplicate.o: $(hdrdir)/ruby/internal/dosish.h +duplicate.o: $(hdrdir)/ruby/internal/error.h +duplicate.o: $(hdrdir)/ruby/internal/eval.h +duplicate.o: $(hdrdir)/ruby/internal/event.h +duplicate.o: $(hdrdir)/ruby/internal/fl_type.h +duplicate.o: $(hdrdir)/ruby/internal/gc.h +duplicate.o: $(hdrdir)/ruby/internal/glob.h +duplicate.o: $(hdrdir)/ruby/internal/globals.h +duplicate.o: $(hdrdir)/ruby/internal/has/attribute.h +duplicate.o: $(hdrdir)/ruby/internal/has/builtin.h +duplicate.o: $(hdrdir)/ruby/internal/has/c_attribute.h +duplicate.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +duplicate.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +duplicate.o: $(hdrdir)/ruby/internal/has/extension.h +duplicate.o: $(hdrdir)/ruby/internal/has/feature.h +duplicate.o: $(hdrdir)/ruby/internal/has/warning.h +duplicate.o: $(hdrdir)/ruby/internal/intern/array.h +duplicate.o: $(hdrdir)/ruby/internal/intern/bignum.h +duplicate.o: $(hdrdir)/ruby/internal/intern/class.h +duplicate.o: $(hdrdir)/ruby/internal/intern/compar.h +duplicate.o: $(hdrdir)/ruby/internal/intern/complex.h +duplicate.o: $(hdrdir)/ruby/internal/intern/cont.h +duplicate.o: $(hdrdir)/ruby/internal/intern/dir.h +duplicate.o: $(hdrdir)/ruby/internal/intern/enum.h +duplicate.o: $(hdrdir)/ruby/internal/intern/enumerator.h +duplicate.o: $(hdrdir)/ruby/internal/intern/error.h +duplicate.o: $(hdrdir)/ruby/internal/intern/eval.h +duplicate.o: $(hdrdir)/ruby/internal/intern/file.h +duplicate.o: $(hdrdir)/ruby/internal/intern/gc.h +duplicate.o: $(hdrdir)/ruby/internal/intern/hash.h +duplicate.o: $(hdrdir)/ruby/internal/intern/io.h +duplicate.o: $(hdrdir)/ruby/internal/intern/load.h +duplicate.o: $(hdrdir)/ruby/internal/intern/marshal.h +duplicate.o: $(hdrdir)/ruby/internal/intern/numeric.h +duplicate.o: $(hdrdir)/ruby/internal/intern/object.h +duplicate.o: $(hdrdir)/ruby/internal/intern/parse.h +duplicate.o: $(hdrdir)/ruby/internal/intern/proc.h +duplicate.o: $(hdrdir)/ruby/internal/intern/process.h +duplicate.o: $(hdrdir)/ruby/internal/intern/random.h +duplicate.o: $(hdrdir)/ruby/internal/intern/range.h +duplicate.o: $(hdrdir)/ruby/internal/intern/rational.h +duplicate.o: $(hdrdir)/ruby/internal/intern/re.h +duplicate.o: $(hdrdir)/ruby/internal/intern/ruby.h +duplicate.o: $(hdrdir)/ruby/internal/intern/select.h +duplicate.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +duplicate.o: $(hdrdir)/ruby/internal/intern/signal.h +duplicate.o: $(hdrdir)/ruby/internal/intern/sprintf.h +duplicate.o: $(hdrdir)/ruby/internal/intern/string.h +duplicate.o: $(hdrdir)/ruby/internal/intern/struct.h +duplicate.o: $(hdrdir)/ruby/internal/intern/thread.h +duplicate.o: $(hdrdir)/ruby/internal/intern/time.h +duplicate.o: $(hdrdir)/ruby/internal/intern/variable.h +duplicate.o: $(hdrdir)/ruby/internal/intern/vm.h +duplicate.o: $(hdrdir)/ruby/internal/interpreter.h +duplicate.o: $(hdrdir)/ruby/internal/iterator.h +duplicate.o: $(hdrdir)/ruby/internal/memory.h +duplicate.o: $(hdrdir)/ruby/internal/method.h +duplicate.o: $(hdrdir)/ruby/internal/module.h +duplicate.o: $(hdrdir)/ruby/internal/newobj.h +duplicate.o: $(hdrdir)/ruby/internal/rgengc.h +duplicate.o: $(hdrdir)/ruby/internal/scan_args.h +duplicate.o: $(hdrdir)/ruby/internal/special_consts.h +duplicate.o: $(hdrdir)/ruby/internal/static_assert.h +duplicate.o: $(hdrdir)/ruby/internal/stdalign.h +duplicate.o: $(hdrdir)/ruby/internal/stdbool.h +duplicate.o: $(hdrdir)/ruby/internal/symbol.h +duplicate.o: $(hdrdir)/ruby/internal/value.h +duplicate.o: $(hdrdir)/ruby/internal/value_type.h +duplicate.o: $(hdrdir)/ruby/internal/variable.h +duplicate.o: $(hdrdir)/ruby/internal/warning_push.h +duplicate.o: $(hdrdir)/ruby/internal/xmalloc.h duplicate.o: $(hdrdir)/ruby/missing.h duplicate.o: $(hdrdir)/ruby/ruby.h duplicate.o: $(hdrdir)/ruby/st.h @@ -16,8 +163,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h @@ -28,8 +322,155 @@ len.o: $(arch_hdrdir)/ruby/config.h len.o: $(hdrdir)/ruby.h len.o: $(hdrdir)/ruby/assert.h len.o: $(hdrdir)/ruby/backward.h +len.o: $(hdrdir)/ruby/backward/2/assume.h +len.o: $(hdrdir)/ruby/backward/2/attributes.h +len.o: $(hdrdir)/ruby/backward/2/bool.h +len.o: $(hdrdir)/ruby/backward/2/inttypes.h +len.o: $(hdrdir)/ruby/backward/2/limits.h +len.o: $(hdrdir)/ruby/backward/2/long_long.h +len.o: $(hdrdir)/ruby/backward/2/stdalign.h +len.o: $(hdrdir)/ruby/backward/2/stdarg.h len.o: $(hdrdir)/ruby/defines.h len.o: $(hdrdir)/ruby/intern.h +len.o: $(hdrdir)/ruby/internal/anyargs.h +len.o: $(hdrdir)/ruby/internal/arithmetic.h +len.o: $(hdrdir)/ruby/internal/arithmetic/char.h +len.o: $(hdrdir)/ruby/internal/arithmetic/double.h +len.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +len.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +len.o: $(hdrdir)/ruby/internal/arithmetic/int.h +len.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +len.o: $(hdrdir)/ruby/internal/arithmetic/long.h +len.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +len.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +len.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +len.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +len.o: $(hdrdir)/ruby/internal/arithmetic/short.h +len.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +len.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +len.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +len.o: $(hdrdir)/ruby/internal/assume.h +len.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +len.o: $(hdrdir)/ruby/internal/attr/artificial.h +len.o: $(hdrdir)/ruby/internal/attr/cold.h +len.o: $(hdrdir)/ruby/internal/attr/const.h +len.o: $(hdrdir)/ruby/internal/attr/constexpr.h +len.o: $(hdrdir)/ruby/internal/attr/deprecated.h +len.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +len.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +len.o: $(hdrdir)/ruby/internal/attr/error.h +len.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +len.o: $(hdrdir)/ruby/internal/attr/forceinline.h +len.o: $(hdrdir)/ruby/internal/attr/format.h +len.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +len.o: $(hdrdir)/ruby/internal/attr/noalias.h +len.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +len.o: $(hdrdir)/ruby/internal/attr/noexcept.h +len.o: $(hdrdir)/ruby/internal/attr/noinline.h +len.o: $(hdrdir)/ruby/internal/attr/nonnull.h +len.o: $(hdrdir)/ruby/internal/attr/noreturn.h +len.o: $(hdrdir)/ruby/internal/attr/pure.h +len.o: $(hdrdir)/ruby/internal/attr/restrict.h +len.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +len.o: $(hdrdir)/ruby/internal/attr/warning.h +len.o: $(hdrdir)/ruby/internal/attr/weakref.h +len.o: $(hdrdir)/ruby/internal/cast.h +len.o: $(hdrdir)/ruby/internal/compiler_is.h +len.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +len.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +len.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +len.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +len.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +len.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +len.o: $(hdrdir)/ruby/internal/compiler_since.h +len.o: $(hdrdir)/ruby/internal/config.h +len.o: $(hdrdir)/ruby/internal/constant_p.h +len.o: $(hdrdir)/ruby/internal/core.h +len.o: $(hdrdir)/ruby/internal/core/rarray.h +len.o: $(hdrdir)/ruby/internal/core/rbasic.h +len.o: $(hdrdir)/ruby/internal/core/rbignum.h +len.o: $(hdrdir)/ruby/internal/core/rclass.h +len.o: $(hdrdir)/ruby/internal/core/rdata.h +len.o: $(hdrdir)/ruby/internal/core/rfile.h +len.o: $(hdrdir)/ruby/internal/core/rhash.h +len.o: $(hdrdir)/ruby/internal/core/robject.h +len.o: $(hdrdir)/ruby/internal/core/rregexp.h +len.o: $(hdrdir)/ruby/internal/core/rstring.h +len.o: $(hdrdir)/ruby/internal/core/rstruct.h +len.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +len.o: $(hdrdir)/ruby/internal/ctype.h +len.o: $(hdrdir)/ruby/internal/dllexport.h +len.o: $(hdrdir)/ruby/internal/dosish.h +len.o: $(hdrdir)/ruby/internal/error.h +len.o: $(hdrdir)/ruby/internal/eval.h +len.o: $(hdrdir)/ruby/internal/event.h +len.o: $(hdrdir)/ruby/internal/fl_type.h +len.o: $(hdrdir)/ruby/internal/gc.h +len.o: $(hdrdir)/ruby/internal/glob.h +len.o: $(hdrdir)/ruby/internal/globals.h +len.o: $(hdrdir)/ruby/internal/has/attribute.h +len.o: $(hdrdir)/ruby/internal/has/builtin.h +len.o: $(hdrdir)/ruby/internal/has/c_attribute.h +len.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +len.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +len.o: $(hdrdir)/ruby/internal/has/extension.h +len.o: $(hdrdir)/ruby/internal/has/feature.h +len.o: $(hdrdir)/ruby/internal/has/warning.h +len.o: $(hdrdir)/ruby/internal/intern/array.h +len.o: $(hdrdir)/ruby/internal/intern/bignum.h +len.o: $(hdrdir)/ruby/internal/intern/class.h +len.o: $(hdrdir)/ruby/internal/intern/compar.h +len.o: $(hdrdir)/ruby/internal/intern/complex.h +len.o: $(hdrdir)/ruby/internal/intern/cont.h +len.o: $(hdrdir)/ruby/internal/intern/dir.h +len.o: $(hdrdir)/ruby/internal/intern/enum.h +len.o: $(hdrdir)/ruby/internal/intern/enumerator.h +len.o: $(hdrdir)/ruby/internal/intern/error.h +len.o: $(hdrdir)/ruby/internal/intern/eval.h +len.o: $(hdrdir)/ruby/internal/intern/file.h +len.o: $(hdrdir)/ruby/internal/intern/gc.h +len.o: $(hdrdir)/ruby/internal/intern/hash.h +len.o: $(hdrdir)/ruby/internal/intern/io.h +len.o: $(hdrdir)/ruby/internal/intern/load.h +len.o: $(hdrdir)/ruby/internal/intern/marshal.h +len.o: $(hdrdir)/ruby/internal/intern/numeric.h +len.o: $(hdrdir)/ruby/internal/intern/object.h +len.o: $(hdrdir)/ruby/internal/intern/parse.h +len.o: $(hdrdir)/ruby/internal/intern/proc.h +len.o: $(hdrdir)/ruby/internal/intern/process.h +len.o: $(hdrdir)/ruby/internal/intern/random.h +len.o: $(hdrdir)/ruby/internal/intern/range.h +len.o: $(hdrdir)/ruby/internal/intern/rational.h +len.o: $(hdrdir)/ruby/internal/intern/re.h +len.o: $(hdrdir)/ruby/internal/intern/ruby.h +len.o: $(hdrdir)/ruby/internal/intern/select.h +len.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +len.o: $(hdrdir)/ruby/internal/intern/signal.h +len.o: $(hdrdir)/ruby/internal/intern/sprintf.h +len.o: $(hdrdir)/ruby/internal/intern/string.h +len.o: $(hdrdir)/ruby/internal/intern/struct.h +len.o: $(hdrdir)/ruby/internal/intern/thread.h +len.o: $(hdrdir)/ruby/internal/intern/time.h +len.o: $(hdrdir)/ruby/internal/intern/variable.h +len.o: $(hdrdir)/ruby/internal/intern/vm.h +len.o: $(hdrdir)/ruby/internal/interpreter.h +len.o: $(hdrdir)/ruby/internal/iterator.h +len.o: $(hdrdir)/ruby/internal/memory.h +len.o: $(hdrdir)/ruby/internal/method.h +len.o: $(hdrdir)/ruby/internal/module.h +len.o: $(hdrdir)/ruby/internal/newobj.h +len.o: $(hdrdir)/ruby/internal/rgengc.h +len.o: $(hdrdir)/ruby/internal/scan_args.h +len.o: $(hdrdir)/ruby/internal/special_consts.h +len.o: $(hdrdir)/ruby/internal/static_assert.h +len.o: $(hdrdir)/ruby/internal/stdalign.h +len.o: $(hdrdir)/ruby/internal/stdbool.h +len.o: $(hdrdir)/ruby/internal/symbol.h +len.o: $(hdrdir)/ruby/internal/value.h +len.o: $(hdrdir)/ruby/internal/value_type.h +len.o: $(hdrdir)/ruby/internal/variable.h +len.o: $(hdrdir)/ruby/internal/warning_push.h +len.o: $(hdrdir)/ruby/internal/xmalloc.h len.o: $(hdrdir)/ruby/missing.h len.o: $(hdrdir)/ruby/ruby.h len.o: $(hdrdir)/ruby/st.h @@ -40,8 +481,155 @@ member.o: $(arch_hdrdir)/ruby/config.h member.o: $(hdrdir)/ruby.h member.o: $(hdrdir)/ruby/assert.h member.o: $(hdrdir)/ruby/backward.h +member.o: $(hdrdir)/ruby/backward/2/assume.h +member.o: $(hdrdir)/ruby/backward/2/attributes.h +member.o: $(hdrdir)/ruby/backward/2/bool.h +member.o: $(hdrdir)/ruby/backward/2/inttypes.h +member.o: $(hdrdir)/ruby/backward/2/limits.h +member.o: $(hdrdir)/ruby/backward/2/long_long.h +member.o: $(hdrdir)/ruby/backward/2/stdalign.h +member.o: $(hdrdir)/ruby/backward/2/stdarg.h member.o: $(hdrdir)/ruby/defines.h member.o: $(hdrdir)/ruby/intern.h +member.o: $(hdrdir)/ruby/internal/anyargs.h +member.o: $(hdrdir)/ruby/internal/arithmetic.h +member.o: $(hdrdir)/ruby/internal/arithmetic/char.h +member.o: $(hdrdir)/ruby/internal/arithmetic/double.h +member.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +member.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +member.o: $(hdrdir)/ruby/internal/arithmetic/int.h +member.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +member.o: $(hdrdir)/ruby/internal/arithmetic/long.h +member.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +member.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +member.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +member.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +member.o: $(hdrdir)/ruby/internal/arithmetic/short.h +member.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +member.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +member.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +member.o: $(hdrdir)/ruby/internal/assume.h +member.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +member.o: $(hdrdir)/ruby/internal/attr/artificial.h +member.o: $(hdrdir)/ruby/internal/attr/cold.h +member.o: $(hdrdir)/ruby/internal/attr/const.h +member.o: $(hdrdir)/ruby/internal/attr/constexpr.h +member.o: $(hdrdir)/ruby/internal/attr/deprecated.h +member.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +member.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +member.o: $(hdrdir)/ruby/internal/attr/error.h +member.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +member.o: $(hdrdir)/ruby/internal/attr/forceinline.h +member.o: $(hdrdir)/ruby/internal/attr/format.h +member.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +member.o: $(hdrdir)/ruby/internal/attr/noalias.h +member.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +member.o: $(hdrdir)/ruby/internal/attr/noexcept.h +member.o: $(hdrdir)/ruby/internal/attr/noinline.h +member.o: $(hdrdir)/ruby/internal/attr/nonnull.h +member.o: $(hdrdir)/ruby/internal/attr/noreturn.h +member.o: $(hdrdir)/ruby/internal/attr/pure.h +member.o: $(hdrdir)/ruby/internal/attr/restrict.h +member.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +member.o: $(hdrdir)/ruby/internal/attr/warning.h +member.o: $(hdrdir)/ruby/internal/attr/weakref.h +member.o: $(hdrdir)/ruby/internal/cast.h +member.o: $(hdrdir)/ruby/internal/compiler_is.h +member.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +member.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +member.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +member.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +member.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +member.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +member.o: $(hdrdir)/ruby/internal/compiler_since.h +member.o: $(hdrdir)/ruby/internal/config.h +member.o: $(hdrdir)/ruby/internal/constant_p.h +member.o: $(hdrdir)/ruby/internal/core.h +member.o: $(hdrdir)/ruby/internal/core/rarray.h +member.o: $(hdrdir)/ruby/internal/core/rbasic.h +member.o: $(hdrdir)/ruby/internal/core/rbignum.h +member.o: $(hdrdir)/ruby/internal/core/rclass.h +member.o: $(hdrdir)/ruby/internal/core/rdata.h +member.o: $(hdrdir)/ruby/internal/core/rfile.h +member.o: $(hdrdir)/ruby/internal/core/rhash.h +member.o: $(hdrdir)/ruby/internal/core/robject.h +member.o: $(hdrdir)/ruby/internal/core/rregexp.h +member.o: $(hdrdir)/ruby/internal/core/rstring.h +member.o: $(hdrdir)/ruby/internal/core/rstruct.h +member.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +member.o: $(hdrdir)/ruby/internal/ctype.h +member.o: $(hdrdir)/ruby/internal/dllexport.h +member.o: $(hdrdir)/ruby/internal/dosish.h +member.o: $(hdrdir)/ruby/internal/error.h +member.o: $(hdrdir)/ruby/internal/eval.h +member.o: $(hdrdir)/ruby/internal/event.h +member.o: $(hdrdir)/ruby/internal/fl_type.h +member.o: $(hdrdir)/ruby/internal/gc.h +member.o: $(hdrdir)/ruby/internal/glob.h +member.o: $(hdrdir)/ruby/internal/globals.h +member.o: $(hdrdir)/ruby/internal/has/attribute.h +member.o: $(hdrdir)/ruby/internal/has/builtin.h +member.o: $(hdrdir)/ruby/internal/has/c_attribute.h +member.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +member.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +member.o: $(hdrdir)/ruby/internal/has/extension.h +member.o: $(hdrdir)/ruby/internal/has/feature.h +member.o: $(hdrdir)/ruby/internal/has/warning.h +member.o: $(hdrdir)/ruby/internal/intern/array.h +member.o: $(hdrdir)/ruby/internal/intern/bignum.h +member.o: $(hdrdir)/ruby/internal/intern/class.h +member.o: $(hdrdir)/ruby/internal/intern/compar.h +member.o: $(hdrdir)/ruby/internal/intern/complex.h +member.o: $(hdrdir)/ruby/internal/intern/cont.h +member.o: $(hdrdir)/ruby/internal/intern/dir.h +member.o: $(hdrdir)/ruby/internal/intern/enum.h +member.o: $(hdrdir)/ruby/internal/intern/enumerator.h +member.o: $(hdrdir)/ruby/internal/intern/error.h +member.o: $(hdrdir)/ruby/internal/intern/eval.h +member.o: $(hdrdir)/ruby/internal/intern/file.h +member.o: $(hdrdir)/ruby/internal/intern/gc.h +member.o: $(hdrdir)/ruby/internal/intern/hash.h +member.o: $(hdrdir)/ruby/internal/intern/io.h +member.o: $(hdrdir)/ruby/internal/intern/load.h +member.o: $(hdrdir)/ruby/internal/intern/marshal.h +member.o: $(hdrdir)/ruby/internal/intern/numeric.h +member.o: $(hdrdir)/ruby/internal/intern/object.h +member.o: $(hdrdir)/ruby/internal/intern/parse.h +member.o: $(hdrdir)/ruby/internal/intern/proc.h +member.o: $(hdrdir)/ruby/internal/intern/process.h +member.o: $(hdrdir)/ruby/internal/intern/random.h +member.o: $(hdrdir)/ruby/internal/intern/range.h +member.o: $(hdrdir)/ruby/internal/intern/rational.h +member.o: $(hdrdir)/ruby/internal/intern/re.h +member.o: $(hdrdir)/ruby/internal/intern/ruby.h +member.o: $(hdrdir)/ruby/internal/intern/select.h +member.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +member.o: $(hdrdir)/ruby/internal/intern/signal.h +member.o: $(hdrdir)/ruby/internal/intern/sprintf.h +member.o: $(hdrdir)/ruby/internal/intern/string.h +member.o: $(hdrdir)/ruby/internal/intern/struct.h +member.o: $(hdrdir)/ruby/internal/intern/thread.h +member.o: $(hdrdir)/ruby/internal/intern/time.h +member.o: $(hdrdir)/ruby/internal/intern/variable.h +member.o: $(hdrdir)/ruby/internal/intern/vm.h +member.o: $(hdrdir)/ruby/internal/interpreter.h +member.o: $(hdrdir)/ruby/internal/iterator.h +member.o: $(hdrdir)/ruby/internal/memory.h +member.o: $(hdrdir)/ruby/internal/method.h +member.o: $(hdrdir)/ruby/internal/module.h +member.o: $(hdrdir)/ruby/internal/newobj.h +member.o: $(hdrdir)/ruby/internal/rgengc.h +member.o: $(hdrdir)/ruby/internal/scan_args.h +member.o: $(hdrdir)/ruby/internal/special_consts.h +member.o: $(hdrdir)/ruby/internal/static_assert.h +member.o: $(hdrdir)/ruby/internal/stdalign.h +member.o: $(hdrdir)/ruby/internal/stdbool.h +member.o: $(hdrdir)/ruby/internal/symbol.h +member.o: $(hdrdir)/ruby/internal/value.h +member.o: $(hdrdir)/ruby/internal/value_type.h +member.o: $(hdrdir)/ruby/internal/variable.h +member.o: $(hdrdir)/ruby/internal/warning_push.h +member.o: $(hdrdir)/ruby/internal/xmalloc.h member.o: $(hdrdir)/ruby/missing.h member.o: $(hdrdir)/ruby/ruby.h member.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/symbol/depend b/ruby/ext/-test-/symbol/depend index bccb4afc1..f462855b4 100644 --- a/ruby/ext/-test-/symbol/depend +++ b/ruby/ext/-test-/symbol/depend @@ -4,8 +4,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h @@ -16,8 +163,155 @@ type.o: $(arch_hdrdir)/ruby/config.h type.o: $(hdrdir)/ruby.h type.o: $(hdrdir)/ruby/assert.h type.o: $(hdrdir)/ruby/backward.h +type.o: $(hdrdir)/ruby/backward/2/assume.h +type.o: $(hdrdir)/ruby/backward/2/attributes.h +type.o: $(hdrdir)/ruby/backward/2/bool.h +type.o: $(hdrdir)/ruby/backward/2/inttypes.h +type.o: $(hdrdir)/ruby/backward/2/limits.h +type.o: $(hdrdir)/ruby/backward/2/long_long.h +type.o: $(hdrdir)/ruby/backward/2/stdalign.h +type.o: $(hdrdir)/ruby/backward/2/stdarg.h type.o: $(hdrdir)/ruby/defines.h type.o: $(hdrdir)/ruby/intern.h +type.o: $(hdrdir)/ruby/internal/anyargs.h +type.o: $(hdrdir)/ruby/internal/arithmetic.h +type.o: $(hdrdir)/ruby/internal/arithmetic/char.h +type.o: $(hdrdir)/ruby/internal/arithmetic/double.h +type.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +type.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +type.o: $(hdrdir)/ruby/internal/arithmetic/int.h +type.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +type.o: $(hdrdir)/ruby/internal/arithmetic/long.h +type.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +type.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +type.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +type.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +type.o: $(hdrdir)/ruby/internal/arithmetic/short.h +type.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +type.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +type.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +type.o: $(hdrdir)/ruby/internal/assume.h +type.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +type.o: $(hdrdir)/ruby/internal/attr/artificial.h +type.o: $(hdrdir)/ruby/internal/attr/cold.h +type.o: $(hdrdir)/ruby/internal/attr/const.h +type.o: $(hdrdir)/ruby/internal/attr/constexpr.h +type.o: $(hdrdir)/ruby/internal/attr/deprecated.h +type.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +type.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +type.o: $(hdrdir)/ruby/internal/attr/error.h +type.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +type.o: $(hdrdir)/ruby/internal/attr/forceinline.h +type.o: $(hdrdir)/ruby/internal/attr/format.h +type.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +type.o: $(hdrdir)/ruby/internal/attr/noalias.h +type.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +type.o: $(hdrdir)/ruby/internal/attr/noexcept.h +type.o: $(hdrdir)/ruby/internal/attr/noinline.h +type.o: $(hdrdir)/ruby/internal/attr/nonnull.h +type.o: $(hdrdir)/ruby/internal/attr/noreturn.h +type.o: $(hdrdir)/ruby/internal/attr/pure.h +type.o: $(hdrdir)/ruby/internal/attr/restrict.h +type.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +type.o: $(hdrdir)/ruby/internal/attr/warning.h +type.o: $(hdrdir)/ruby/internal/attr/weakref.h +type.o: $(hdrdir)/ruby/internal/cast.h +type.o: $(hdrdir)/ruby/internal/compiler_is.h +type.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +type.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +type.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +type.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +type.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +type.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +type.o: $(hdrdir)/ruby/internal/compiler_since.h +type.o: $(hdrdir)/ruby/internal/config.h +type.o: $(hdrdir)/ruby/internal/constant_p.h +type.o: $(hdrdir)/ruby/internal/core.h +type.o: $(hdrdir)/ruby/internal/core/rarray.h +type.o: $(hdrdir)/ruby/internal/core/rbasic.h +type.o: $(hdrdir)/ruby/internal/core/rbignum.h +type.o: $(hdrdir)/ruby/internal/core/rclass.h +type.o: $(hdrdir)/ruby/internal/core/rdata.h +type.o: $(hdrdir)/ruby/internal/core/rfile.h +type.o: $(hdrdir)/ruby/internal/core/rhash.h +type.o: $(hdrdir)/ruby/internal/core/robject.h +type.o: $(hdrdir)/ruby/internal/core/rregexp.h +type.o: $(hdrdir)/ruby/internal/core/rstring.h +type.o: $(hdrdir)/ruby/internal/core/rstruct.h +type.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +type.o: $(hdrdir)/ruby/internal/ctype.h +type.o: $(hdrdir)/ruby/internal/dllexport.h +type.o: $(hdrdir)/ruby/internal/dosish.h +type.o: $(hdrdir)/ruby/internal/error.h +type.o: $(hdrdir)/ruby/internal/eval.h +type.o: $(hdrdir)/ruby/internal/event.h +type.o: $(hdrdir)/ruby/internal/fl_type.h +type.o: $(hdrdir)/ruby/internal/gc.h +type.o: $(hdrdir)/ruby/internal/glob.h +type.o: $(hdrdir)/ruby/internal/globals.h +type.o: $(hdrdir)/ruby/internal/has/attribute.h +type.o: $(hdrdir)/ruby/internal/has/builtin.h +type.o: $(hdrdir)/ruby/internal/has/c_attribute.h +type.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +type.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +type.o: $(hdrdir)/ruby/internal/has/extension.h +type.o: $(hdrdir)/ruby/internal/has/feature.h +type.o: $(hdrdir)/ruby/internal/has/warning.h +type.o: $(hdrdir)/ruby/internal/intern/array.h +type.o: $(hdrdir)/ruby/internal/intern/bignum.h +type.o: $(hdrdir)/ruby/internal/intern/class.h +type.o: $(hdrdir)/ruby/internal/intern/compar.h +type.o: $(hdrdir)/ruby/internal/intern/complex.h +type.o: $(hdrdir)/ruby/internal/intern/cont.h +type.o: $(hdrdir)/ruby/internal/intern/dir.h +type.o: $(hdrdir)/ruby/internal/intern/enum.h +type.o: $(hdrdir)/ruby/internal/intern/enumerator.h +type.o: $(hdrdir)/ruby/internal/intern/error.h +type.o: $(hdrdir)/ruby/internal/intern/eval.h +type.o: $(hdrdir)/ruby/internal/intern/file.h +type.o: $(hdrdir)/ruby/internal/intern/gc.h +type.o: $(hdrdir)/ruby/internal/intern/hash.h +type.o: $(hdrdir)/ruby/internal/intern/io.h +type.o: $(hdrdir)/ruby/internal/intern/load.h +type.o: $(hdrdir)/ruby/internal/intern/marshal.h +type.o: $(hdrdir)/ruby/internal/intern/numeric.h +type.o: $(hdrdir)/ruby/internal/intern/object.h +type.o: $(hdrdir)/ruby/internal/intern/parse.h +type.o: $(hdrdir)/ruby/internal/intern/proc.h +type.o: $(hdrdir)/ruby/internal/intern/process.h +type.o: $(hdrdir)/ruby/internal/intern/random.h +type.o: $(hdrdir)/ruby/internal/intern/range.h +type.o: $(hdrdir)/ruby/internal/intern/rational.h +type.o: $(hdrdir)/ruby/internal/intern/re.h +type.o: $(hdrdir)/ruby/internal/intern/ruby.h +type.o: $(hdrdir)/ruby/internal/intern/select.h +type.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +type.o: $(hdrdir)/ruby/internal/intern/signal.h +type.o: $(hdrdir)/ruby/internal/intern/sprintf.h +type.o: $(hdrdir)/ruby/internal/intern/string.h +type.o: $(hdrdir)/ruby/internal/intern/struct.h +type.o: $(hdrdir)/ruby/internal/intern/thread.h +type.o: $(hdrdir)/ruby/internal/intern/time.h +type.o: $(hdrdir)/ruby/internal/intern/variable.h +type.o: $(hdrdir)/ruby/internal/intern/vm.h +type.o: $(hdrdir)/ruby/internal/interpreter.h +type.o: $(hdrdir)/ruby/internal/iterator.h +type.o: $(hdrdir)/ruby/internal/memory.h +type.o: $(hdrdir)/ruby/internal/method.h +type.o: $(hdrdir)/ruby/internal/module.h +type.o: $(hdrdir)/ruby/internal/newobj.h +type.o: $(hdrdir)/ruby/internal/rgengc.h +type.o: $(hdrdir)/ruby/internal/scan_args.h +type.o: $(hdrdir)/ruby/internal/special_consts.h +type.o: $(hdrdir)/ruby/internal/static_assert.h +type.o: $(hdrdir)/ruby/internal/stdalign.h +type.o: $(hdrdir)/ruby/internal/stdbool.h +type.o: $(hdrdir)/ruby/internal/symbol.h +type.o: $(hdrdir)/ruby/internal/value.h +type.o: $(hdrdir)/ruby/internal/value_type.h +type.o: $(hdrdir)/ruby/internal/variable.h +type.o: $(hdrdir)/ruby/internal/warning_push.h +type.o: $(hdrdir)/ruby/internal/xmalloc.h type.o: $(hdrdir)/ruby/missing.h type.o: $(hdrdir)/ruby/ruby.h type.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/thread_fd/depend b/ruby/ext/-test-/thread_fd/depend new file mode 100644 index 000000000..0c8c31eac --- /dev/null +++ b/ruby/ext/-test-/thread_fd/depend @@ -0,0 +1,160 @@ +# AUTOGENERATED DEPENDENCIES START +thread_fd.o: $(RUBY_EXTCONF_H) +thread_fd.o: $(arch_hdrdir)/ruby/config.h +thread_fd.o: $(hdrdir)/ruby/assert.h +thread_fd.o: $(hdrdir)/ruby/backward.h +thread_fd.o: $(hdrdir)/ruby/backward/2/assume.h +thread_fd.o: $(hdrdir)/ruby/backward/2/attributes.h +thread_fd.o: $(hdrdir)/ruby/backward/2/bool.h +thread_fd.o: $(hdrdir)/ruby/backward/2/inttypes.h +thread_fd.o: $(hdrdir)/ruby/backward/2/limits.h +thread_fd.o: $(hdrdir)/ruby/backward/2/long_long.h +thread_fd.o: $(hdrdir)/ruby/backward/2/stdalign.h +thread_fd.o: $(hdrdir)/ruby/backward/2/stdarg.h +thread_fd.o: $(hdrdir)/ruby/defines.h +thread_fd.o: $(hdrdir)/ruby/intern.h +thread_fd.o: $(hdrdir)/ruby/internal/anyargs.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/char.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/double.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/int.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/long.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/short.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +thread_fd.o: $(hdrdir)/ruby/internal/assume.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/artificial.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/cold.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/const.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/constexpr.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/deprecated.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/error.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/forceinline.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/format.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/noalias.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/noexcept.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/noinline.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/nonnull.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/noreturn.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/pure.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/restrict.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/warning.h +thread_fd.o: $(hdrdir)/ruby/internal/attr/weakref.h +thread_fd.o: $(hdrdir)/ruby/internal/cast.h +thread_fd.o: $(hdrdir)/ruby/internal/compiler_is.h +thread_fd.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +thread_fd.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +thread_fd.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +thread_fd.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +thread_fd.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +thread_fd.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +thread_fd.o: $(hdrdir)/ruby/internal/compiler_since.h +thread_fd.o: $(hdrdir)/ruby/internal/config.h +thread_fd.o: $(hdrdir)/ruby/internal/constant_p.h +thread_fd.o: $(hdrdir)/ruby/internal/core.h +thread_fd.o: $(hdrdir)/ruby/internal/core/rarray.h +thread_fd.o: $(hdrdir)/ruby/internal/core/rbasic.h +thread_fd.o: $(hdrdir)/ruby/internal/core/rbignum.h +thread_fd.o: $(hdrdir)/ruby/internal/core/rclass.h +thread_fd.o: $(hdrdir)/ruby/internal/core/rdata.h +thread_fd.o: $(hdrdir)/ruby/internal/core/rfile.h +thread_fd.o: $(hdrdir)/ruby/internal/core/rhash.h +thread_fd.o: $(hdrdir)/ruby/internal/core/robject.h +thread_fd.o: $(hdrdir)/ruby/internal/core/rregexp.h +thread_fd.o: $(hdrdir)/ruby/internal/core/rstring.h +thread_fd.o: $(hdrdir)/ruby/internal/core/rstruct.h +thread_fd.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +thread_fd.o: $(hdrdir)/ruby/internal/ctype.h +thread_fd.o: $(hdrdir)/ruby/internal/dllexport.h +thread_fd.o: $(hdrdir)/ruby/internal/dosish.h +thread_fd.o: $(hdrdir)/ruby/internal/error.h +thread_fd.o: $(hdrdir)/ruby/internal/eval.h +thread_fd.o: $(hdrdir)/ruby/internal/event.h +thread_fd.o: $(hdrdir)/ruby/internal/fl_type.h +thread_fd.o: $(hdrdir)/ruby/internal/gc.h +thread_fd.o: $(hdrdir)/ruby/internal/glob.h +thread_fd.o: $(hdrdir)/ruby/internal/globals.h +thread_fd.o: $(hdrdir)/ruby/internal/has/attribute.h +thread_fd.o: $(hdrdir)/ruby/internal/has/builtin.h +thread_fd.o: $(hdrdir)/ruby/internal/has/c_attribute.h +thread_fd.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +thread_fd.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +thread_fd.o: $(hdrdir)/ruby/internal/has/extension.h +thread_fd.o: $(hdrdir)/ruby/internal/has/feature.h +thread_fd.o: $(hdrdir)/ruby/internal/has/warning.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/array.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/bignum.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/class.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/compar.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/complex.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/cont.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/dir.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/enum.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/enumerator.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/error.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/eval.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/file.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/gc.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/hash.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/io.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/load.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/marshal.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/numeric.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/object.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/parse.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/proc.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/process.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/random.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/range.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/rational.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/re.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/ruby.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/select.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/signal.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/sprintf.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/string.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/struct.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/thread.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/time.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/variable.h +thread_fd.o: $(hdrdir)/ruby/internal/intern/vm.h +thread_fd.o: $(hdrdir)/ruby/internal/interpreter.h +thread_fd.o: $(hdrdir)/ruby/internal/iterator.h +thread_fd.o: $(hdrdir)/ruby/internal/memory.h +thread_fd.o: $(hdrdir)/ruby/internal/method.h +thread_fd.o: $(hdrdir)/ruby/internal/module.h +thread_fd.o: $(hdrdir)/ruby/internal/newobj.h +thread_fd.o: $(hdrdir)/ruby/internal/rgengc.h +thread_fd.o: $(hdrdir)/ruby/internal/scan_args.h +thread_fd.o: $(hdrdir)/ruby/internal/special_consts.h +thread_fd.o: $(hdrdir)/ruby/internal/static_assert.h +thread_fd.o: $(hdrdir)/ruby/internal/stdalign.h +thread_fd.o: $(hdrdir)/ruby/internal/stdbool.h +thread_fd.o: $(hdrdir)/ruby/internal/symbol.h +thread_fd.o: $(hdrdir)/ruby/internal/value.h +thread_fd.o: $(hdrdir)/ruby/internal/value_type.h +thread_fd.o: $(hdrdir)/ruby/internal/variable.h +thread_fd.o: $(hdrdir)/ruby/internal/warning_push.h +thread_fd.o: $(hdrdir)/ruby/internal/xmalloc.h +thread_fd.o: $(hdrdir)/ruby/missing.h +thread_fd.o: $(hdrdir)/ruby/ruby.h +thread_fd.o: $(hdrdir)/ruby/st.h +thread_fd.o: $(hdrdir)/ruby/subst.h +thread_fd.o: thread_fd.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/-test-/thread_fd/extconf.rb b/ruby/ext/-test-/thread_fd/extconf.rb new file mode 100644 index 000000000..a8bbe9d16 --- /dev/null +++ b/ruby/ext/-test-/thread_fd/extconf.rb @@ -0,0 +1,2 @@ +# frozen_string_literal: true +create_makefile('-test-/thread_fd') diff --git a/ruby/ext/-test-/thread_fd/thread_fd.c b/ruby/ext/-test-/thread_fd/thread_fd.c new file mode 100644 index 000000000..042b799dc --- /dev/null +++ b/ruby/ext/-test-/thread_fd/thread_fd.c @@ -0,0 +1,30 @@ +#include "ruby/ruby.h" + +static VALUE +thread_fd_close(VALUE ign, VALUE fd) +{ + rb_thread_fd_close(NUM2INT(fd)); + return Qnil; +} + +static VALUE +thread_fd_wait(VALUE ign, VALUE fd) +{ + int ret = rb_thread_wait_fd(NUM2INT(fd)); + return INT2NUM(ret); +} + +static VALUE +thread_fd_writable(VALUE ign, VALUE fd) +{ + int ret = rb_thread_fd_writable(NUM2INT(fd)); + return INT2NUM(ret); +} + +void +Init_thread_fd(void) +{ + rb_define_singleton_method(rb_cIO, "thread_fd_close", thread_fd_close, 1); + rb_define_singleton_method(rb_cIO, "thread_fd_wait", thread_fd_wait, 1); + rb_define_singleton_method(rb_cIO, "thread_fd_writable", thread_fd_writable, 1); +} diff --git a/ruby/ext/-test-/thread_fd_close/depend b/ruby/ext/-test-/thread_fd_close/depend deleted file mode 100644 index 8c49c2d4f..000000000 --- a/ruby/ext/-test-/thread_fd_close/depend +++ /dev/null @@ -1,13 +0,0 @@ -# AUTOGENERATED DEPENDENCIES START -thread_fd_close.o: $(RUBY_EXTCONF_H) -thread_fd_close.o: $(arch_hdrdir)/ruby/config.h -thread_fd_close.o: $(hdrdir)/ruby/assert.h -thread_fd_close.o: $(hdrdir)/ruby/backward.h -thread_fd_close.o: $(hdrdir)/ruby/defines.h -thread_fd_close.o: $(hdrdir)/ruby/intern.h -thread_fd_close.o: $(hdrdir)/ruby/missing.h -thread_fd_close.o: $(hdrdir)/ruby/ruby.h -thread_fd_close.o: $(hdrdir)/ruby/st.h -thread_fd_close.o: $(hdrdir)/ruby/subst.h -thread_fd_close.o: thread_fd_close.c -# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/-test-/thread_fd_close/extconf.rb b/ruby/ext/-test-/thread_fd_close/extconf.rb deleted file mode 100644 index 0d9694539..000000000 --- a/ruby/ext/-test-/thread_fd_close/extconf.rb +++ /dev/null @@ -1,2 +0,0 @@ -# frozen_string_literal: true -create_makefile('-test-/thread_fd_close') diff --git a/ruby/ext/-test-/thread_fd_close/thread_fd_close.c b/ruby/ext/-test-/thread_fd_close/thread_fd_close.c deleted file mode 100644 index 4fd967c5b..000000000 --- a/ruby/ext/-test-/thread_fd_close/thread_fd_close.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "ruby/ruby.h" - -static VALUE -thread_fd_close(VALUE ign, VALUE fd) -{ - rb_thread_fd_close(NUM2INT(fd)); - return Qnil; -} - -void -Init_thread_fd_close(void) -{ - rb_define_singleton_method(rb_cIO, "thread_fd_close", thread_fd_close, 1); -} diff --git a/ruby/ext/-test-/time/depend b/ruby/ext/-test-/time/depend index 2f4b8d1f1..557f65af6 100644 --- a/ruby/ext/-test-/time/depend +++ b/ruby/ext/-test-/time/depend @@ -4,8 +4,155 @@ init.o: $(arch_hdrdir)/ruby/config.h init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/ruby.h init.o: $(hdrdir)/ruby/st.h @@ -16,20 +163,319 @@ leap_second.o: $(arch_hdrdir)/ruby/config.h leap_second.o: $(hdrdir)/ruby.h leap_second.o: $(hdrdir)/ruby/assert.h leap_second.o: $(hdrdir)/ruby/backward.h +leap_second.o: $(hdrdir)/ruby/backward/2/assume.h +leap_second.o: $(hdrdir)/ruby/backward/2/attributes.h +leap_second.o: $(hdrdir)/ruby/backward/2/bool.h +leap_second.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +leap_second.o: $(hdrdir)/ruby/backward/2/inttypes.h +leap_second.o: $(hdrdir)/ruby/backward/2/limits.h +leap_second.o: $(hdrdir)/ruby/backward/2/long_long.h +leap_second.o: $(hdrdir)/ruby/backward/2/stdalign.h +leap_second.o: $(hdrdir)/ruby/backward/2/stdarg.h leap_second.o: $(hdrdir)/ruby/defines.h leap_second.o: $(hdrdir)/ruby/intern.h +leap_second.o: $(hdrdir)/ruby/internal/anyargs.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/char.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/double.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/int.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/long.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/short.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +leap_second.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +leap_second.o: $(hdrdir)/ruby/internal/assume.h +leap_second.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +leap_second.o: $(hdrdir)/ruby/internal/attr/artificial.h +leap_second.o: $(hdrdir)/ruby/internal/attr/cold.h +leap_second.o: $(hdrdir)/ruby/internal/attr/const.h +leap_second.o: $(hdrdir)/ruby/internal/attr/constexpr.h +leap_second.o: $(hdrdir)/ruby/internal/attr/deprecated.h +leap_second.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +leap_second.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +leap_second.o: $(hdrdir)/ruby/internal/attr/error.h +leap_second.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +leap_second.o: $(hdrdir)/ruby/internal/attr/forceinline.h +leap_second.o: $(hdrdir)/ruby/internal/attr/format.h +leap_second.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +leap_second.o: $(hdrdir)/ruby/internal/attr/noalias.h +leap_second.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +leap_second.o: $(hdrdir)/ruby/internal/attr/noexcept.h +leap_second.o: $(hdrdir)/ruby/internal/attr/noinline.h +leap_second.o: $(hdrdir)/ruby/internal/attr/nonnull.h +leap_second.o: $(hdrdir)/ruby/internal/attr/noreturn.h +leap_second.o: $(hdrdir)/ruby/internal/attr/pure.h +leap_second.o: $(hdrdir)/ruby/internal/attr/restrict.h +leap_second.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +leap_second.o: $(hdrdir)/ruby/internal/attr/warning.h +leap_second.o: $(hdrdir)/ruby/internal/attr/weakref.h +leap_second.o: $(hdrdir)/ruby/internal/cast.h +leap_second.o: $(hdrdir)/ruby/internal/compiler_is.h +leap_second.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +leap_second.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +leap_second.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +leap_second.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +leap_second.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +leap_second.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +leap_second.o: $(hdrdir)/ruby/internal/compiler_since.h +leap_second.o: $(hdrdir)/ruby/internal/config.h +leap_second.o: $(hdrdir)/ruby/internal/constant_p.h +leap_second.o: $(hdrdir)/ruby/internal/core.h +leap_second.o: $(hdrdir)/ruby/internal/core/rarray.h +leap_second.o: $(hdrdir)/ruby/internal/core/rbasic.h +leap_second.o: $(hdrdir)/ruby/internal/core/rbignum.h +leap_second.o: $(hdrdir)/ruby/internal/core/rclass.h +leap_second.o: $(hdrdir)/ruby/internal/core/rdata.h +leap_second.o: $(hdrdir)/ruby/internal/core/rfile.h +leap_second.o: $(hdrdir)/ruby/internal/core/rhash.h +leap_second.o: $(hdrdir)/ruby/internal/core/robject.h +leap_second.o: $(hdrdir)/ruby/internal/core/rregexp.h +leap_second.o: $(hdrdir)/ruby/internal/core/rstring.h +leap_second.o: $(hdrdir)/ruby/internal/core/rstruct.h +leap_second.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +leap_second.o: $(hdrdir)/ruby/internal/ctype.h +leap_second.o: $(hdrdir)/ruby/internal/dllexport.h +leap_second.o: $(hdrdir)/ruby/internal/dosish.h +leap_second.o: $(hdrdir)/ruby/internal/error.h +leap_second.o: $(hdrdir)/ruby/internal/eval.h +leap_second.o: $(hdrdir)/ruby/internal/event.h +leap_second.o: $(hdrdir)/ruby/internal/fl_type.h +leap_second.o: $(hdrdir)/ruby/internal/gc.h +leap_second.o: $(hdrdir)/ruby/internal/glob.h +leap_second.o: $(hdrdir)/ruby/internal/globals.h +leap_second.o: $(hdrdir)/ruby/internal/has/attribute.h +leap_second.o: $(hdrdir)/ruby/internal/has/builtin.h +leap_second.o: $(hdrdir)/ruby/internal/has/c_attribute.h +leap_second.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +leap_second.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +leap_second.o: $(hdrdir)/ruby/internal/has/extension.h +leap_second.o: $(hdrdir)/ruby/internal/has/feature.h +leap_second.o: $(hdrdir)/ruby/internal/has/warning.h +leap_second.o: $(hdrdir)/ruby/internal/intern/array.h +leap_second.o: $(hdrdir)/ruby/internal/intern/bignum.h +leap_second.o: $(hdrdir)/ruby/internal/intern/class.h +leap_second.o: $(hdrdir)/ruby/internal/intern/compar.h +leap_second.o: $(hdrdir)/ruby/internal/intern/complex.h +leap_second.o: $(hdrdir)/ruby/internal/intern/cont.h +leap_second.o: $(hdrdir)/ruby/internal/intern/dir.h +leap_second.o: $(hdrdir)/ruby/internal/intern/enum.h +leap_second.o: $(hdrdir)/ruby/internal/intern/enumerator.h +leap_second.o: $(hdrdir)/ruby/internal/intern/error.h +leap_second.o: $(hdrdir)/ruby/internal/intern/eval.h +leap_second.o: $(hdrdir)/ruby/internal/intern/file.h +leap_second.o: $(hdrdir)/ruby/internal/intern/gc.h +leap_second.o: $(hdrdir)/ruby/internal/intern/hash.h +leap_second.o: $(hdrdir)/ruby/internal/intern/io.h +leap_second.o: $(hdrdir)/ruby/internal/intern/load.h +leap_second.o: $(hdrdir)/ruby/internal/intern/marshal.h +leap_second.o: $(hdrdir)/ruby/internal/intern/numeric.h +leap_second.o: $(hdrdir)/ruby/internal/intern/object.h +leap_second.o: $(hdrdir)/ruby/internal/intern/parse.h +leap_second.o: $(hdrdir)/ruby/internal/intern/proc.h +leap_second.o: $(hdrdir)/ruby/internal/intern/process.h +leap_second.o: $(hdrdir)/ruby/internal/intern/random.h +leap_second.o: $(hdrdir)/ruby/internal/intern/range.h +leap_second.o: $(hdrdir)/ruby/internal/intern/rational.h +leap_second.o: $(hdrdir)/ruby/internal/intern/re.h +leap_second.o: $(hdrdir)/ruby/internal/intern/ruby.h +leap_second.o: $(hdrdir)/ruby/internal/intern/select.h +leap_second.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +leap_second.o: $(hdrdir)/ruby/internal/intern/signal.h +leap_second.o: $(hdrdir)/ruby/internal/intern/sprintf.h +leap_second.o: $(hdrdir)/ruby/internal/intern/string.h +leap_second.o: $(hdrdir)/ruby/internal/intern/struct.h +leap_second.o: $(hdrdir)/ruby/internal/intern/thread.h +leap_second.o: $(hdrdir)/ruby/internal/intern/time.h +leap_second.o: $(hdrdir)/ruby/internal/intern/variable.h +leap_second.o: $(hdrdir)/ruby/internal/intern/vm.h +leap_second.o: $(hdrdir)/ruby/internal/interpreter.h +leap_second.o: $(hdrdir)/ruby/internal/iterator.h +leap_second.o: $(hdrdir)/ruby/internal/memory.h +leap_second.o: $(hdrdir)/ruby/internal/method.h +leap_second.o: $(hdrdir)/ruby/internal/module.h +leap_second.o: $(hdrdir)/ruby/internal/newobj.h +leap_second.o: $(hdrdir)/ruby/internal/rgengc.h +leap_second.o: $(hdrdir)/ruby/internal/scan_args.h +leap_second.o: $(hdrdir)/ruby/internal/special_consts.h +leap_second.o: $(hdrdir)/ruby/internal/static_assert.h +leap_second.o: $(hdrdir)/ruby/internal/stdalign.h +leap_second.o: $(hdrdir)/ruby/internal/stdbool.h +leap_second.o: $(hdrdir)/ruby/internal/symbol.h +leap_second.o: $(hdrdir)/ruby/internal/value.h +leap_second.o: $(hdrdir)/ruby/internal/value_type.h +leap_second.o: $(hdrdir)/ruby/internal/variable.h +leap_second.o: $(hdrdir)/ruby/internal/warning_push.h +leap_second.o: $(hdrdir)/ruby/internal/xmalloc.h leap_second.o: $(hdrdir)/ruby/missing.h leap_second.o: $(hdrdir)/ruby/ruby.h leap_second.o: $(hdrdir)/ruby/st.h leap_second.o: $(hdrdir)/ruby/subst.h +leap_second.o: $(top_srcdir)/internal/bits.h +leap_second.o: $(top_srcdir)/internal/compilers.h +leap_second.o: $(top_srcdir)/internal/static_assert.h +leap_second.o: $(top_srcdir)/internal/time.h leap_second.o: leap_second.c new.o: $(RUBY_EXTCONF_H) new.o: $(arch_hdrdir)/ruby/config.h new.o: $(hdrdir)/ruby.h new.o: $(hdrdir)/ruby/assert.h new.o: $(hdrdir)/ruby/backward.h +new.o: $(hdrdir)/ruby/backward/2/assume.h +new.o: $(hdrdir)/ruby/backward/2/attributes.h +new.o: $(hdrdir)/ruby/backward/2/bool.h +new.o: $(hdrdir)/ruby/backward/2/inttypes.h +new.o: $(hdrdir)/ruby/backward/2/limits.h +new.o: $(hdrdir)/ruby/backward/2/long_long.h +new.o: $(hdrdir)/ruby/backward/2/stdalign.h +new.o: $(hdrdir)/ruby/backward/2/stdarg.h new.o: $(hdrdir)/ruby/defines.h new.o: $(hdrdir)/ruby/intern.h +new.o: $(hdrdir)/ruby/internal/anyargs.h +new.o: $(hdrdir)/ruby/internal/arithmetic.h +new.o: $(hdrdir)/ruby/internal/arithmetic/char.h +new.o: $(hdrdir)/ruby/internal/arithmetic/double.h +new.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +new.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/int.h +new.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/long.h +new.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +new.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/short.h +new.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +new.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +new.o: $(hdrdir)/ruby/internal/assume.h +new.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +new.o: $(hdrdir)/ruby/internal/attr/artificial.h +new.o: $(hdrdir)/ruby/internal/attr/cold.h +new.o: $(hdrdir)/ruby/internal/attr/const.h +new.o: $(hdrdir)/ruby/internal/attr/constexpr.h +new.o: $(hdrdir)/ruby/internal/attr/deprecated.h +new.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +new.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +new.o: $(hdrdir)/ruby/internal/attr/error.h +new.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +new.o: $(hdrdir)/ruby/internal/attr/forceinline.h +new.o: $(hdrdir)/ruby/internal/attr/format.h +new.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +new.o: $(hdrdir)/ruby/internal/attr/noalias.h +new.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +new.o: $(hdrdir)/ruby/internal/attr/noexcept.h +new.o: $(hdrdir)/ruby/internal/attr/noinline.h +new.o: $(hdrdir)/ruby/internal/attr/nonnull.h +new.o: $(hdrdir)/ruby/internal/attr/noreturn.h +new.o: $(hdrdir)/ruby/internal/attr/pure.h +new.o: $(hdrdir)/ruby/internal/attr/restrict.h +new.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +new.o: $(hdrdir)/ruby/internal/attr/warning.h +new.o: $(hdrdir)/ruby/internal/attr/weakref.h +new.o: $(hdrdir)/ruby/internal/cast.h +new.o: $(hdrdir)/ruby/internal/compiler_is.h +new.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +new.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +new.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +new.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +new.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +new.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +new.o: $(hdrdir)/ruby/internal/compiler_since.h +new.o: $(hdrdir)/ruby/internal/config.h +new.o: $(hdrdir)/ruby/internal/constant_p.h +new.o: $(hdrdir)/ruby/internal/core.h +new.o: $(hdrdir)/ruby/internal/core/rarray.h +new.o: $(hdrdir)/ruby/internal/core/rbasic.h +new.o: $(hdrdir)/ruby/internal/core/rbignum.h +new.o: $(hdrdir)/ruby/internal/core/rclass.h +new.o: $(hdrdir)/ruby/internal/core/rdata.h +new.o: $(hdrdir)/ruby/internal/core/rfile.h +new.o: $(hdrdir)/ruby/internal/core/rhash.h +new.o: $(hdrdir)/ruby/internal/core/robject.h +new.o: $(hdrdir)/ruby/internal/core/rregexp.h +new.o: $(hdrdir)/ruby/internal/core/rstring.h +new.o: $(hdrdir)/ruby/internal/core/rstruct.h +new.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +new.o: $(hdrdir)/ruby/internal/ctype.h +new.o: $(hdrdir)/ruby/internal/dllexport.h +new.o: $(hdrdir)/ruby/internal/dosish.h +new.o: $(hdrdir)/ruby/internal/error.h +new.o: $(hdrdir)/ruby/internal/eval.h +new.o: $(hdrdir)/ruby/internal/event.h +new.o: $(hdrdir)/ruby/internal/fl_type.h +new.o: $(hdrdir)/ruby/internal/gc.h +new.o: $(hdrdir)/ruby/internal/glob.h +new.o: $(hdrdir)/ruby/internal/globals.h +new.o: $(hdrdir)/ruby/internal/has/attribute.h +new.o: $(hdrdir)/ruby/internal/has/builtin.h +new.o: $(hdrdir)/ruby/internal/has/c_attribute.h +new.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +new.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +new.o: $(hdrdir)/ruby/internal/has/extension.h +new.o: $(hdrdir)/ruby/internal/has/feature.h +new.o: $(hdrdir)/ruby/internal/has/warning.h +new.o: $(hdrdir)/ruby/internal/intern/array.h +new.o: $(hdrdir)/ruby/internal/intern/bignum.h +new.o: $(hdrdir)/ruby/internal/intern/class.h +new.o: $(hdrdir)/ruby/internal/intern/compar.h +new.o: $(hdrdir)/ruby/internal/intern/complex.h +new.o: $(hdrdir)/ruby/internal/intern/cont.h +new.o: $(hdrdir)/ruby/internal/intern/dir.h +new.o: $(hdrdir)/ruby/internal/intern/enum.h +new.o: $(hdrdir)/ruby/internal/intern/enumerator.h +new.o: $(hdrdir)/ruby/internal/intern/error.h +new.o: $(hdrdir)/ruby/internal/intern/eval.h +new.o: $(hdrdir)/ruby/internal/intern/file.h +new.o: $(hdrdir)/ruby/internal/intern/gc.h +new.o: $(hdrdir)/ruby/internal/intern/hash.h +new.o: $(hdrdir)/ruby/internal/intern/io.h +new.o: $(hdrdir)/ruby/internal/intern/load.h +new.o: $(hdrdir)/ruby/internal/intern/marshal.h +new.o: $(hdrdir)/ruby/internal/intern/numeric.h +new.o: $(hdrdir)/ruby/internal/intern/object.h +new.o: $(hdrdir)/ruby/internal/intern/parse.h +new.o: $(hdrdir)/ruby/internal/intern/proc.h +new.o: $(hdrdir)/ruby/internal/intern/process.h +new.o: $(hdrdir)/ruby/internal/intern/random.h +new.o: $(hdrdir)/ruby/internal/intern/range.h +new.o: $(hdrdir)/ruby/internal/intern/rational.h +new.o: $(hdrdir)/ruby/internal/intern/re.h +new.o: $(hdrdir)/ruby/internal/intern/ruby.h +new.o: $(hdrdir)/ruby/internal/intern/select.h +new.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +new.o: $(hdrdir)/ruby/internal/intern/signal.h +new.o: $(hdrdir)/ruby/internal/intern/sprintf.h +new.o: $(hdrdir)/ruby/internal/intern/string.h +new.o: $(hdrdir)/ruby/internal/intern/struct.h +new.o: $(hdrdir)/ruby/internal/intern/thread.h +new.o: $(hdrdir)/ruby/internal/intern/time.h +new.o: $(hdrdir)/ruby/internal/intern/variable.h +new.o: $(hdrdir)/ruby/internal/intern/vm.h +new.o: $(hdrdir)/ruby/internal/interpreter.h +new.o: $(hdrdir)/ruby/internal/iterator.h +new.o: $(hdrdir)/ruby/internal/memory.h +new.o: $(hdrdir)/ruby/internal/method.h +new.o: $(hdrdir)/ruby/internal/module.h +new.o: $(hdrdir)/ruby/internal/newobj.h +new.o: $(hdrdir)/ruby/internal/rgengc.h +new.o: $(hdrdir)/ruby/internal/scan_args.h +new.o: $(hdrdir)/ruby/internal/special_consts.h +new.o: $(hdrdir)/ruby/internal/static_assert.h +new.o: $(hdrdir)/ruby/internal/stdalign.h +new.o: $(hdrdir)/ruby/internal/stdbool.h +new.o: $(hdrdir)/ruby/internal/symbol.h +new.o: $(hdrdir)/ruby/internal/value.h +new.o: $(hdrdir)/ruby/internal/value_type.h +new.o: $(hdrdir)/ruby/internal/variable.h +new.o: $(hdrdir)/ruby/internal/warning_push.h +new.o: $(hdrdir)/ruby/internal/xmalloc.h new.o: $(hdrdir)/ruby/missing.h new.o: $(hdrdir)/ruby/ruby.h new.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/time/leap_second.c b/ruby/ext/-test-/time/leap_second.c index 7eed421b7..ee7011fa9 100644 --- a/ruby/ext/-test-/time/leap_second.c +++ b/ruby/ext/-test-/time/leap_second.c @@ -1,6 +1,6 @@ #include "ruby.h" +#include "internal/time.h" -void ruby_reset_leap_second_info(void); static VALUE bug_time_s_reset_leap_second_info(VALUE klass) { diff --git a/ruby/ext/-test-/tracepoint/depend b/ruby/ext/-test-/tracepoint/depend index b811df447..f05f13d08 100644 --- a/ruby/ext/-test-/tracepoint/depend +++ b/ruby/ext/-test-/tracepoint/depend @@ -3,9 +3,156 @@ gc_hook.o: $(RUBY_EXTCONF_H) gc_hook.o: $(arch_hdrdir)/ruby/config.h gc_hook.o: $(hdrdir)/ruby/assert.h gc_hook.o: $(hdrdir)/ruby/backward.h +gc_hook.o: $(hdrdir)/ruby/backward/2/assume.h +gc_hook.o: $(hdrdir)/ruby/backward/2/attributes.h +gc_hook.o: $(hdrdir)/ruby/backward/2/bool.h +gc_hook.o: $(hdrdir)/ruby/backward/2/inttypes.h +gc_hook.o: $(hdrdir)/ruby/backward/2/limits.h +gc_hook.o: $(hdrdir)/ruby/backward/2/long_long.h +gc_hook.o: $(hdrdir)/ruby/backward/2/stdalign.h +gc_hook.o: $(hdrdir)/ruby/backward/2/stdarg.h gc_hook.o: $(hdrdir)/ruby/debug.h gc_hook.o: $(hdrdir)/ruby/defines.h gc_hook.o: $(hdrdir)/ruby/intern.h +gc_hook.o: $(hdrdir)/ruby/internal/anyargs.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/char.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/double.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/int.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/long.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/short.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +gc_hook.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +gc_hook.o: $(hdrdir)/ruby/internal/assume.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/artificial.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/cold.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/const.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/constexpr.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/deprecated.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/error.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/forceinline.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/format.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/noalias.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/noexcept.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/noinline.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/nonnull.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/noreturn.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/pure.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/restrict.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/warning.h +gc_hook.o: $(hdrdir)/ruby/internal/attr/weakref.h +gc_hook.o: $(hdrdir)/ruby/internal/cast.h +gc_hook.o: $(hdrdir)/ruby/internal/compiler_is.h +gc_hook.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +gc_hook.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +gc_hook.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +gc_hook.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +gc_hook.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +gc_hook.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +gc_hook.o: $(hdrdir)/ruby/internal/compiler_since.h +gc_hook.o: $(hdrdir)/ruby/internal/config.h +gc_hook.o: $(hdrdir)/ruby/internal/constant_p.h +gc_hook.o: $(hdrdir)/ruby/internal/core.h +gc_hook.o: $(hdrdir)/ruby/internal/core/rarray.h +gc_hook.o: $(hdrdir)/ruby/internal/core/rbasic.h +gc_hook.o: $(hdrdir)/ruby/internal/core/rbignum.h +gc_hook.o: $(hdrdir)/ruby/internal/core/rclass.h +gc_hook.o: $(hdrdir)/ruby/internal/core/rdata.h +gc_hook.o: $(hdrdir)/ruby/internal/core/rfile.h +gc_hook.o: $(hdrdir)/ruby/internal/core/rhash.h +gc_hook.o: $(hdrdir)/ruby/internal/core/robject.h +gc_hook.o: $(hdrdir)/ruby/internal/core/rregexp.h +gc_hook.o: $(hdrdir)/ruby/internal/core/rstring.h +gc_hook.o: $(hdrdir)/ruby/internal/core/rstruct.h +gc_hook.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +gc_hook.o: $(hdrdir)/ruby/internal/ctype.h +gc_hook.o: $(hdrdir)/ruby/internal/dllexport.h +gc_hook.o: $(hdrdir)/ruby/internal/dosish.h +gc_hook.o: $(hdrdir)/ruby/internal/error.h +gc_hook.o: $(hdrdir)/ruby/internal/eval.h +gc_hook.o: $(hdrdir)/ruby/internal/event.h +gc_hook.o: $(hdrdir)/ruby/internal/fl_type.h +gc_hook.o: $(hdrdir)/ruby/internal/gc.h +gc_hook.o: $(hdrdir)/ruby/internal/glob.h +gc_hook.o: $(hdrdir)/ruby/internal/globals.h +gc_hook.o: $(hdrdir)/ruby/internal/has/attribute.h +gc_hook.o: $(hdrdir)/ruby/internal/has/builtin.h +gc_hook.o: $(hdrdir)/ruby/internal/has/c_attribute.h +gc_hook.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +gc_hook.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +gc_hook.o: $(hdrdir)/ruby/internal/has/extension.h +gc_hook.o: $(hdrdir)/ruby/internal/has/feature.h +gc_hook.o: $(hdrdir)/ruby/internal/has/warning.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/array.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/bignum.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/class.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/compar.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/complex.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/cont.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/dir.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/enum.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/enumerator.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/error.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/eval.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/file.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/gc.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/hash.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/io.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/load.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/marshal.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/numeric.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/object.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/parse.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/proc.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/process.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/random.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/range.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/rational.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/re.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/ruby.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/select.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/signal.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/sprintf.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/string.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/struct.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/thread.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/time.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/variable.h +gc_hook.o: $(hdrdir)/ruby/internal/intern/vm.h +gc_hook.o: $(hdrdir)/ruby/internal/interpreter.h +gc_hook.o: $(hdrdir)/ruby/internal/iterator.h +gc_hook.o: $(hdrdir)/ruby/internal/memory.h +gc_hook.o: $(hdrdir)/ruby/internal/method.h +gc_hook.o: $(hdrdir)/ruby/internal/module.h +gc_hook.o: $(hdrdir)/ruby/internal/newobj.h +gc_hook.o: $(hdrdir)/ruby/internal/rgengc.h +gc_hook.o: $(hdrdir)/ruby/internal/scan_args.h +gc_hook.o: $(hdrdir)/ruby/internal/special_consts.h +gc_hook.o: $(hdrdir)/ruby/internal/static_assert.h +gc_hook.o: $(hdrdir)/ruby/internal/stdalign.h +gc_hook.o: $(hdrdir)/ruby/internal/stdbool.h +gc_hook.o: $(hdrdir)/ruby/internal/symbol.h +gc_hook.o: $(hdrdir)/ruby/internal/value.h +gc_hook.o: $(hdrdir)/ruby/internal/value_type.h +gc_hook.o: $(hdrdir)/ruby/internal/variable.h +gc_hook.o: $(hdrdir)/ruby/internal/warning_push.h +gc_hook.o: $(hdrdir)/ruby/internal/xmalloc.h gc_hook.o: $(hdrdir)/ruby/missing.h gc_hook.o: $(hdrdir)/ruby/ruby.h gc_hook.o: $(hdrdir)/ruby/st.h @@ -15,9 +162,156 @@ tracepoint.o: $(RUBY_EXTCONF_H) tracepoint.o: $(arch_hdrdir)/ruby/config.h tracepoint.o: $(hdrdir)/ruby/assert.h tracepoint.o: $(hdrdir)/ruby/backward.h +tracepoint.o: $(hdrdir)/ruby/backward/2/assume.h +tracepoint.o: $(hdrdir)/ruby/backward/2/attributes.h +tracepoint.o: $(hdrdir)/ruby/backward/2/bool.h +tracepoint.o: $(hdrdir)/ruby/backward/2/inttypes.h +tracepoint.o: $(hdrdir)/ruby/backward/2/limits.h +tracepoint.o: $(hdrdir)/ruby/backward/2/long_long.h +tracepoint.o: $(hdrdir)/ruby/backward/2/stdalign.h +tracepoint.o: $(hdrdir)/ruby/backward/2/stdarg.h tracepoint.o: $(hdrdir)/ruby/debug.h tracepoint.o: $(hdrdir)/ruby/defines.h tracepoint.o: $(hdrdir)/ruby/intern.h +tracepoint.o: $(hdrdir)/ruby/internal/anyargs.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/char.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/double.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/int.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/long.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/short.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +tracepoint.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +tracepoint.o: $(hdrdir)/ruby/internal/assume.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/artificial.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/cold.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/const.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/constexpr.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/deprecated.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/error.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/forceinline.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/format.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/noalias.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/noexcept.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/noinline.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/nonnull.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/noreturn.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/pure.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/restrict.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/warning.h +tracepoint.o: $(hdrdir)/ruby/internal/attr/weakref.h +tracepoint.o: $(hdrdir)/ruby/internal/cast.h +tracepoint.o: $(hdrdir)/ruby/internal/compiler_is.h +tracepoint.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +tracepoint.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +tracepoint.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +tracepoint.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +tracepoint.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +tracepoint.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +tracepoint.o: $(hdrdir)/ruby/internal/compiler_since.h +tracepoint.o: $(hdrdir)/ruby/internal/config.h +tracepoint.o: $(hdrdir)/ruby/internal/constant_p.h +tracepoint.o: $(hdrdir)/ruby/internal/core.h +tracepoint.o: $(hdrdir)/ruby/internal/core/rarray.h +tracepoint.o: $(hdrdir)/ruby/internal/core/rbasic.h +tracepoint.o: $(hdrdir)/ruby/internal/core/rbignum.h +tracepoint.o: $(hdrdir)/ruby/internal/core/rclass.h +tracepoint.o: $(hdrdir)/ruby/internal/core/rdata.h +tracepoint.o: $(hdrdir)/ruby/internal/core/rfile.h +tracepoint.o: $(hdrdir)/ruby/internal/core/rhash.h +tracepoint.o: $(hdrdir)/ruby/internal/core/robject.h +tracepoint.o: $(hdrdir)/ruby/internal/core/rregexp.h +tracepoint.o: $(hdrdir)/ruby/internal/core/rstring.h +tracepoint.o: $(hdrdir)/ruby/internal/core/rstruct.h +tracepoint.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +tracepoint.o: $(hdrdir)/ruby/internal/ctype.h +tracepoint.o: $(hdrdir)/ruby/internal/dllexport.h +tracepoint.o: $(hdrdir)/ruby/internal/dosish.h +tracepoint.o: $(hdrdir)/ruby/internal/error.h +tracepoint.o: $(hdrdir)/ruby/internal/eval.h +tracepoint.o: $(hdrdir)/ruby/internal/event.h +tracepoint.o: $(hdrdir)/ruby/internal/fl_type.h +tracepoint.o: $(hdrdir)/ruby/internal/gc.h +tracepoint.o: $(hdrdir)/ruby/internal/glob.h +tracepoint.o: $(hdrdir)/ruby/internal/globals.h +tracepoint.o: $(hdrdir)/ruby/internal/has/attribute.h +tracepoint.o: $(hdrdir)/ruby/internal/has/builtin.h +tracepoint.o: $(hdrdir)/ruby/internal/has/c_attribute.h +tracepoint.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +tracepoint.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +tracepoint.o: $(hdrdir)/ruby/internal/has/extension.h +tracepoint.o: $(hdrdir)/ruby/internal/has/feature.h +tracepoint.o: $(hdrdir)/ruby/internal/has/warning.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/array.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/bignum.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/class.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/compar.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/complex.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/cont.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/dir.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/enum.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/enumerator.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/error.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/eval.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/file.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/gc.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/hash.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/io.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/load.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/marshal.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/numeric.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/object.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/parse.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/proc.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/process.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/random.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/range.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/rational.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/re.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/ruby.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/select.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/signal.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/sprintf.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/string.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/struct.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/thread.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/time.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/variable.h +tracepoint.o: $(hdrdir)/ruby/internal/intern/vm.h +tracepoint.o: $(hdrdir)/ruby/internal/interpreter.h +tracepoint.o: $(hdrdir)/ruby/internal/iterator.h +tracepoint.o: $(hdrdir)/ruby/internal/memory.h +tracepoint.o: $(hdrdir)/ruby/internal/method.h +tracepoint.o: $(hdrdir)/ruby/internal/module.h +tracepoint.o: $(hdrdir)/ruby/internal/newobj.h +tracepoint.o: $(hdrdir)/ruby/internal/rgengc.h +tracepoint.o: $(hdrdir)/ruby/internal/scan_args.h +tracepoint.o: $(hdrdir)/ruby/internal/special_consts.h +tracepoint.o: $(hdrdir)/ruby/internal/static_assert.h +tracepoint.o: $(hdrdir)/ruby/internal/stdalign.h +tracepoint.o: $(hdrdir)/ruby/internal/stdbool.h +tracepoint.o: $(hdrdir)/ruby/internal/symbol.h +tracepoint.o: $(hdrdir)/ruby/internal/value.h +tracepoint.o: $(hdrdir)/ruby/internal/value_type.h +tracepoint.o: $(hdrdir)/ruby/internal/variable.h +tracepoint.o: $(hdrdir)/ruby/internal/warning_push.h +tracepoint.o: $(hdrdir)/ruby/internal/xmalloc.h tracepoint.o: $(hdrdir)/ruby/missing.h tracepoint.o: $(hdrdir)/ruby/ruby.h tracepoint.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/tracepoint/gc_hook.c b/ruby/ext/-test-/tracepoint/gc_hook.c index 54b469dca..5fd46fa51 100644 --- a/ruby/ext/-test-/tracepoint/gc_hook.c +++ b/ruby/ext/-test-/tracepoint/gc_hook.c @@ -42,14 +42,12 @@ set_gc_hook(VALUE module, VALUE proc, rb_event_flag_t event, const char *tp_str, { VALUE tpval; ID tp_key = rb_intern(tp_str); - ID proc_key = rb_intern(proc_str); /* disable previous keys */ if (rb_ivar_defined(module, tp_key) != 0 && RTEST(tpval = rb_ivar_get(module, tp_key))) { rb_tracepoint_disable(tpval); rb_ivar_set(module, tp_key, Qnil); - rb_ivar_set(module, proc_key, Qnil); } if (RTEST(proc)) { @@ -59,7 +57,6 @@ set_gc_hook(VALUE module, VALUE proc, rb_event_flag_t event, const char *tp_str, tpval = rb_tracepoint_new(0, event, gc_start_end_i, (void *)proc); rb_ivar_set(module, tp_key, tpval); - rb_ivar_set(module, proc_key, proc); /* GC guard */ rb_tracepoint_enable(tpval); } diff --git a/ruby/ext/-test-/typeddata/depend b/ruby/ext/-test-/typeddata/depend index e0dd0653a..9eb0666c7 100644 --- a/ruby/ext/-test-/typeddata/depend +++ b/ruby/ext/-test-/typeddata/depend @@ -4,8 +4,155 @@ typeddata.o: $(arch_hdrdir)/ruby/config.h typeddata.o: $(hdrdir)/ruby.h typeddata.o: $(hdrdir)/ruby/assert.h typeddata.o: $(hdrdir)/ruby/backward.h +typeddata.o: $(hdrdir)/ruby/backward/2/assume.h +typeddata.o: $(hdrdir)/ruby/backward/2/attributes.h +typeddata.o: $(hdrdir)/ruby/backward/2/bool.h +typeddata.o: $(hdrdir)/ruby/backward/2/inttypes.h +typeddata.o: $(hdrdir)/ruby/backward/2/limits.h +typeddata.o: $(hdrdir)/ruby/backward/2/long_long.h +typeddata.o: $(hdrdir)/ruby/backward/2/stdalign.h +typeddata.o: $(hdrdir)/ruby/backward/2/stdarg.h typeddata.o: $(hdrdir)/ruby/defines.h typeddata.o: $(hdrdir)/ruby/intern.h +typeddata.o: $(hdrdir)/ruby/internal/anyargs.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/char.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/double.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/int.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/long.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/short.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +typeddata.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +typeddata.o: $(hdrdir)/ruby/internal/assume.h +typeddata.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +typeddata.o: $(hdrdir)/ruby/internal/attr/artificial.h +typeddata.o: $(hdrdir)/ruby/internal/attr/cold.h +typeddata.o: $(hdrdir)/ruby/internal/attr/const.h +typeddata.o: $(hdrdir)/ruby/internal/attr/constexpr.h +typeddata.o: $(hdrdir)/ruby/internal/attr/deprecated.h +typeddata.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +typeddata.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +typeddata.o: $(hdrdir)/ruby/internal/attr/error.h +typeddata.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +typeddata.o: $(hdrdir)/ruby/internal/attr/forceinline.h +typeddata.o: $(hdrdir)/ruby/internal/attr/format.h +typeddata.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +typeddata.o: $(hdrdir)/ruby/internal/attr/noalias.h +typeddata.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +typeddata.o: $(hdrdir)/ruby/internal/attr/noexcept.h +typeddata.o: $(hdrdir)/ruby/internal/attr/noinline.h +typeddata.o: $(hdrdir)/ruby/internal/attr/nonnull.h +typeddata.o: $(hdrdir)/ruby/internal/attr/noreturn.h +typeddata.o: $(hdrdir)/ruby/internal/attr/pure.h +typeddata.o: $(hdrdir)/ruby/internal/attr/restrict.h +typeddata.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +typeddata.o: $(hdrdir)/ruby/internal/attr/warning.h +typeddata.o: $(hdrdir)/ruby/internal/attr/weakref.h +typeddata.o: $(hdrdir)/ruby/internal/cast.h +typeddata.o: $(hdrdir)/ruby/internal/compiler_is.h +typeddata.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +typeddata.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +typeddata.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +typeddata.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +typeddata.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +typeddata.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +typeddata.o: $(hdrdir)/ruby/internal/compiler_since.h +typeddata.o: $(hdrdir)/ruby/internal/config.h +typeddata.o: $(hdrdir)/ruby/internal/constant_p.h +typeddata.o: $(hdrdir)/ruby/internal/core.h +typeddata.o: $(hdrdir)/ruby/internal/core/rarray.h +typeddata.o: $(hdrdir)/ruby/internal/core/rbasic.h +typeddata.o: $(hdrdir)/ruby/internal/core/rbignum.h +typeddata.o: $(hdrdir)/ruby/internal/core/rclass.h +typeddata.o: $(hdrdir)/ruby/internal/core/rdata.h +typeddata.o: $(hdrdir)/ruby/internal/core/rfile.h +typeddata.o: $(hdrdir)/ruby/internal/core/rhash.h +typeddata.o: $(hdrdir)/ruby/internal/core/robject.h +typeddata.o: $(hdrdir)/ruby/internal/core/rregexp.h +typeddata.o: $(hdrdir)/ruby/internal/core/rstring.h +typeddata.o: $(hdrdir)/ruby/internal/core/rstruct.h +typeddata.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +typeddata.o: $(hdrdir)/ruby/internal/ctype.h +typeddata.o: $(hdrdir)/ruby/internal/dllexport.h +typeddata.o: $(hdrdir)/ruby/internal/dosish.h +typeddata.o: $(hdrdir)/ruby/internal/error.h +typeddata.o: $(hdrdir)/ruby/internal/eval.h +typeddata.o: $(hdrdir)/ruby/internal/event.h +typeddata.o: $(hdrdir)/ruby/internal/fl_type.h +typeddata.o: $(hdrdir)/ruby/internal/gc.h +typeddata.o: $(hdrdir)/ruby/internal/glob.h +typeddata.o: $(hdrdir)/ruby/internal/globals.h +typeddata.o: $(hdrdir)/ruby/internal/has/attribute.h +typeddata.o: $(hdrdir)/ruby/internal/has/builtin.h +typeddata.o: $(hdrdir)/ruby/internal/has/c_attribute.h +typeddata.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +typeddata.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +typeddata.o: $(hdrdir)/ruby/internal/has/extension.h +typeddata.o: $(hdrdir)/ruby/internal/has/feature.h +typeddata.o: $(hdrdir)/ruby/internal/has/warning.h +typeddata.o: $(hdrdir)/ruby/internal/intern/array.h +typeddata.o: $(hdrdir)/ruby/internal/intern/bignum.h +typeddata.o: $(hdrdir)/ruby/internal/intern/class.h +typeddata.o: $(hdrdir)/ruby/internal/intern/compar.h +typeddata.o: $(hdrdir)/ruby/internal/intern/complex.h +typeddata.o: $(hdrdir)/ruby/internal/intern/cont.h +typeddata.o: $(hdrdir)/ruby/internal/intern/dir.h +typeddata.o: $(hdrdir)/ruby/internal/intern/enum.h +typeddata.o: $(hdrdir)/ruby/internal/intern/enumerator.h +typeddata.o: $(hdrdir)/ruby/internal/intern/error.h +typeddata.o: $(hdrdir)/ruby/internal/intern/eval.h +typeddata.o: $(hdrdir)/ruby/internal/intern/file.h +typeddata.o: $(hdrdir)/ruby/internal/intern/gc.h +typeddata.o: $(hdrdir)/ruby/internal/intern/hash.h +typeddata.o: $(hdrdir)/ruby/internal/intern/io.h +typeddata.o: $(hdrdir)/ruby/internal/intern/load.h +typeddata.o: $(hdrdir)/ruby/internal/intern/marshal.h +typeddata.o: $(hdrdir)/ruby/internal/intern/numeric.h +typeddata.o: $(hdrdir)/ruby/internal/intern/object.h +typeddata.o: $(hdrdir)/ruby/internal/intern/parse.h +typeddata.o: $(hdrdir)/ruby/internal/intern/proc.h +typeddata.o: $(hdrdir)/ruby/internal/intern/process.h +typeddata.o: $(hdrdir)/ruby/internal/intern/random.h +typeddata.o: $(hdrdir)/ruby/internal/intern/range.h +typeddata.o: $(hdrdir)/ruby/internal/intern/rational.h +typeddata.o: $(hdrdir)/ruby/internal/intern/re.h +typeddata.o: $(hdrdir)/ruby/internal/intern/ruby.h +typeddata.o: $(hdrdir)/ruby/internal/intern/select.h +typeddata.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +typeddata.o: $(hdrdir)/ruby/internal/intern/signal.h +typeddata.o: $(hdrdir)/ruby/internal/intern/sprintf.h +typeddata.o: $(hdrdir)/ruby/internal/intern/string.h +typeddata.o: $(hdrdir)/ruby/internal/intern/struct.h +typeddata.o: $(hdrdir)/ruby/internal/intern/thread.h +typeddata.o: $(hdrdir)/ruby/internal/intern/time.h +typeddata.o: $(hdrdir)/ruby/internal/intern/variable.h +typeddata.o: $(hdrdir)/ruby/internal/intern/vm.h +typeddata.o: $(hdrdir)/ruby/internal/interpreter.h +typeddata.o: $(hdrdir)/ruby/internal/iterator.h +typeddata.o: $(hdrdir)/ruby/internal/memory.h +typeddata.o: $(hdrdir)/ruby/internal/method.h +typeddata.o: $(hdrdir)/ruby/internal/module.h +typeddata.o: $(hdrdir)/ruby/internal/newobj.h +typeddata.o: $(hdrdir)/ruby/internal/rgengc.h +typeddata.o: $(hdrdir)/ruby/internal/scan_args.h +typeddata.o: $(hdrdir)/ruby/internal/special_consts.h +typeddata.o: $(hdrdir)/ruby/internal/static_assert.h +typeddata.o: $(hdrdir)/ruby/internal/stdalign.h +typeddata.o: $(hdrdir)/ruby/internal/stdbool.h +typeddata.o: $(hdrdir)/ruby/internal/symbol.h +typeddata.o: $(hdrdir)/ruby/internal/value.h +typeddata.o: $(hdrdir)/ruby/internal/value_type.h +typeddata.o: $(hdrdir)/ruby/internal/variable.h +typeddata.o: $(hdrdir)/ruby/internal/warning_push.h +typeddata.o: $(hdrdir)/ruby/internal/xmalloc.h typeddata.o: $(hdrdir)/ruby/missing.h typeddata.o: $(hdrdir)/ruby/ruby.h typeddata.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/typeddata/typeddata.c b/ruby/ext/-test-/typeddata/typeddata.c index ae060960c..2adfd56ae 100644 --- a/ruby/ext/-test-/typeddata/typeddata.c +++ b/ruby/ext/-test-/typeddata/typeddata.c @@ -2,7 +2,7 @@ static const rb_data_type_t test_data = { "typed_data", - {NULL, ruby_xfree, NULL}, + {0, ruby_xfree, 0}, NULL, NULL, 0/* deferred free */, }; @@ -37,7 +37,7 @@ void Init_typeddata(void) { VALUE mBug = rb_define_module("Bug"); - VALUE klass = rb_define_class_under(mBug, "TypedData", rb_cData); + VALUE klass = rb_define_class_under(mBug, "TypedData", rb_cObject); rb_define_alloc_func(klass, test_alloc); rb_define_singleton_method(klass, "check", test_check, 1); rb_define_singleton_method(klass, "make", test_make, 1); diff --git a/ruby/ext/-test-/vm/depend b/ruby/ext/-test-/vm/depend index 0f85d69bb..a01669802 100644 --- a/ruby/ext/-test-/vm/depend +++ b/ruby/ext/-test-/vm/depend @@ -3,8 +3,155 @@ at_exit.o: $(RUBY_EXTCONF_H) at_exit.o: $(arch_hdrdir)/ruby/config.h at_exit.o: $(hdrdir)/ruby/assert.h at_exit.o: $(hdrdir)/ruby/backward.h +at_exit.o: $(hdrdir)/ruby/backward/2/assume.h +at_exit.o: $(hdrdir)/ruby/backward/2/attributes.h +at_exit.o: $(hdrdir)/ruby/backward/2/bool.h +at_exit.o: $(hdrdir)/ruby/backward/2/inttypes.h +at_exit.o: $(hdrdir)/ruby/backward/2/limits.h +at_exit.o: $(hdrdir)/ruby/backward/2/long_long.h +at_exit.o: $(hdrdir)/ruby/backward/2/stdalign.h +at_exit.o: $(hdrdir)/ruby/backward/2/stdarg.h at_exit.o: $(hdrdir)/ruby/defines.h at_exit.o: $(hdrdir)/ruby/intern.h +at_exit.o: $(hdrdir)/ruby/internal/anyargs.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/char.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/double.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/int.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/long.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/short.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +at_exit.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +at_exit.o: $(hdrdir)/ruby/internal/assume.h +at_exit.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +at_exit.o: $(hdrdir)/ruby/internal/attr/artificial.h +at_exit.o: $(hdrdir)/ruby/internal/attr/cold.h +at_exit.o: $(hdrdir)/ruby/internal/attr/const.h +at_exit.o: $(hdrdir)/ruby/internal/attr/constexpr.h +at_exit.o: $(hdrdir)/ruby/internal/attr/deprecated.h +at_exit.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +at_exit.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +at_exit.o: $(hdrdir)/ruby/internal/attr/error.h +at_exit.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +at_exit.o: $(hdrdir)/ruby/internal/attr/forceinline.h +at_exit.o: $(hdrdir)/ruby/internal/attr/format.h +at_exit.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +at_exit.o: $(hdrdir)/ruby/internal/attr/noalias.h +at_exit.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +at_exit.o: $(hdrdir)/ruby/internal/attr/noexcept.h +at_exit.o: $(hdrdir)/ruby/internal/attr/noinline.h +at_exit.o: $(hdrdir)/ruby/internal/attr/nonnull.h +at_exit.o: $(hdrdir)/ruby/internal/attr/noreturn.h +at_exit.o: $(hdrdir)/ruby/internal/attr/pure.h +at_exit.o: $(hdrdir)/ruby/internal/attr/restrict.h +at_exit.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +at_exit.o: $(hdrdir)/ruby/internal/attr/warning.h +at_exit.o: $(hdrdir)/ruby/internal/attr/weakref.h +at_exit.o: $(hdrdir)/ruby/internal/cast.h +at_exit.o: $(hdrdir)/ruby/internal/compiler_is.h +at_exit.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +at_exit.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +at_exit.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +at_exit.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +at_exit.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +at_exit.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +at_exit.o: $(hdrdir)/ruby/internal/compiler_since.h +at_exit.o: $(hdrdir)/ruby/internal/config.h +at_exit.o: $(hdrdir)/ruby/internal/constant_p.h +at_exit.o: $(hdrdir)/ruby/internal/core.h +at_exit.o: $(hdrdir)/ruby/internal/core/rarray.h +at_exit.o: $(hdrdir)/ruby/internal/core/rbasic.h +at_exit.o: $(hdrdir)/ruby/internal/core/rbignum.h +at_exit.o: $(hdrdir)/ruby/internal/core/rclass.h +at_exit.o: $(hdrdir)/ruby/internal/core/rdata.h +at_exit.o: $(hdrdir)/ruby/internal/core/rfile.h +at_exit.o: $(hdrdir)/ruby/internal/core/rhash.h +at_exit.o: $(hdrdir)/ruby/internal/core/robject.h +at_exit.o: $(hdrdir)/ruby/internal/core/rregexp.h +at_exit.o: $(hdrdir)/ruby/internal/core/rstring.h +at_exit.o: $(hdrdir)/ruby/internal/core/rstruct.h +at_exit.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +at_exit.o: $(hdrdir)/ruby/internal/ctype.h +at_exit.o: $(hdrdir)/ruby/internal/dllexport.h +at_exit.o: $(hdrdir)/ruby/internal/dosish.h +at_exit.o: $(hdrdir)/ruby/internal/error.h +at_exit.o: $(hdrdir)/ruby/internal/eval.h +at_exit.o: $(hdrdir)/ruby/internal/event.h +at_exit.o: $(hdrdir)/ruby/internal/fl_type.h +at_exit.o: $(hdrdir)/ruby/internal/gc.h +at_exit.o: $(hdrdir)/ruby/internal/glob.h +at_exit.o: $(hdrdir)/ruby/internal/globals.h +at_exit.o: $(hdrdir)/ruby/internal/has/attribute.h +at_exit.o: $(hdrdir)/ruby/internal/has/builtin.h +at_exit.o: $(hdrdir)/ruby/internal/has/c_attribute.h +at_exit.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +at_exit.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +at_exit.o: $(hdrdir)/ruby/internal/has/extension.h +at_exit.o: $(hdrdir)/ruby/internal/has/feature.h +at_exit.o: $(hdrdir)/ruby/internal/has/warning.h +at_exit.o: $(hdrdir)/ruby/internal/intern/array.h +at_exit.o: $(hdrdir)/ruby/internal/intern/bignum.h +at_exit.o: $(hdrdir)/ruby/internal/intern/class.h +at_exit.o: $(hdrdir)/ruby/internal/intern/compar.h +at_exit.o: $(hdrdir)/ruby/internal/intern/complex.h +at_exit.o: $(hdrdir)/ruby/internal/intern/cont.h +at_exit.o: $(hdrdir)/ruby/internal/intern/dir.h +at_exit.o: $(hdrdir)/ruby/internal/intern/enum.h +at_exit.o: $(hdrdir)/ruby/internal/intern/enumerator.h +at_exit.o: $(hdrdir)/ruby/internal/intern/error.h +at_exit.o: $(hdrdir)/ruby/internal/intern/eval.h +at_exit.o: $(hdrdir)/ruby/internal/intern/file.h +at_exit.o: $(hdrdir)/ruby/internal/intern/gc.h +at_exit.o: $(hdrdir)/ruby/internal/intern/hash.h +at_exit.o: $(hdrdir)/ruby/internal/intern/io.h +at_exit.o: $(hdrdir)/ruby/internal/intern/load.h +at_exit.o: $(hdrdir)/ruby/internal/intern/marshal.h +at_exit.o: $(hdrdir)/ruby/internal/intern/numeric.h +at_exit.o: $(hdrdir)/ruby/internal/intern/object.h +at_exit.o: $(hdrdir)/ruby/internal/intern/parse.h +at_exit.o: $(hdrdir)/ruby/internal/intern/proc.h +at_exit.o: $(hdrdir)/ruby/internal/intern/process.h +at_exit.o: $(hdrdir)/ruby/internal/intern/random.h +at_exit.o: $(hdrdir)/ruby/internal/intern/range.h +at_exit.o: $(hdrdir)/ruby/internal/intern/rational.h +at_exit.o: $(hdrdir)/ruby/internal/intern/re.h +at_exit.o: $(hdrdir)/ruby/internal/intern/ruby.h +at_exit.o: $(hdrdir)/ruby/internal/intern/select.h +at_exit.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +at_exit.o: $(hdrdir)/ruby/internal/intern/signal.h +at_exit.o: $(hdrdir)/ruby/internal/intern/sprintf.h +at_exit.o: $(hdrdir)/ruby/internal/intern/string.h +at_exit.o: $(hdrdir)/ruby/internal/intern/struct.h +at_exit.o: $(hdrdir)/ruby/internal/intern/thread.h +at_exit.o: $(hdrdir)/ruby/internal/intern/time.h +at_exit.o: $(hdrdir)/ruby/internal/intern/variable.h +at_exit.o: $(hdrdir)/ruby/internal/intern/vm.h +at_exit.o: $(hdrdir)/ruby/internal/interpreter.h +at_exit.o: $(hdrdir)/ruby/internal/iterator.h +at_exit.o: $(hdrdir)/ruby/internal/memory.h +at_exit.o: $(hdrdir)/ruby/internal/method.h +at_exit.o: $(hdrdir)/ruby/internal/module.h +at_exit.o: $(hdrdir)/ruby/internal/newobj.h +at_exit.o: $(hdrdir)/ruby/internal/rgengc.h +at_exit.o: $(hdrdir)/ruby/internal/scan_args.h +at_exit.o: $(hdrdir)/ruby/internal/special_consts.h +at_exit.o: $(hdrdir)/ruby/internal/static_assert.h +at_exit.o: $(hdrdir)/ruby/internal/stdalign.h +at_exit.o: $(hdrdir)/ruby/internal/stdbool.h +at_exit.o: $(hdrdir)/ruby/internal/symbol.h +at_exit.o: $(hdrdir)/ruby/internal/value.h +at_exit.o: $(hdrdir)/ruby/internal/value_type.h +at_exit.o: $(hdrdir)/ruby/internal/variable.h +at_exit.o: $(hdrdir)/ruby/internal/warning_push.h +at_exit.o: $(hdrdir)/ruby/internal/xmalloc.h at_exit.o: $(hdrdir)/ruby/missing.h at_exit.o: $(hdrdir)/ruby/ruby.h at_exit.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/-test-/wait/depend b/ruby/ext/-test-/wait/depend new file mode 100644 index 000000000..b5cdd1283 --- /dev/null +++ b/ruby/ext/-test-/wait/depend @@ -0,0 +1,173 @@ +# AUTOGENERATED DEPENDENCIES START +wait.o: $(RUBY_EXTCONF_H) +wait.o: $(arch_hdrdir)/ruby/config.h +wait.o: $(hdrdir)/ruby/assert.h +wait.o: $(hdrdir)/ruby/backward.h +wait.o: $(hdrdir)/ruby/backward/2/assume.h +wait.o: $(hdrdir)/ruby/backward/2/attributes.h +wait.o: $(hdrdir)/ruby/backward/2/bool.h +wait.o: $(hdrdir)/ruby/backward/2/inttypes.h +wait.o: $(hdrdir)/ruby/backward/2/limits.h +wait.o: $(hdrdir)/ruby/backward/2/long_long.h +wait.o: $(hdrdir)/ruby/backward/2/stdalign.h +wait.o: $(hdrdir)/ruby/backward/2/stdarg.h +wait.o: $(hdrdir)/ruby/defines.h +wait.o: $(hdrdir)/ruby/encoding.h +wait.o: $(hdrdir)/ruby/intern.h +wait.o: $(hdrdir)/ruby/internal/anyargs.h +wait.o: $(hdrdir)/ruby/internal/arithmetic.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/char.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/double.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/int.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/long.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/short.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +wait.o: $(hdrdir)/ruby/internal/assume.h +wait.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +wait.o: $(hdrdir)/ruby/internal/attr/artificial.h +wait.o: $(hdrdir)/ruby/internal/attr/cold.h +wait.o: $(hdrdir)/ruby/internal/attr/const.h +wait.o: $(hdrdir)/ruby/internal/attr/constexpr.h +wait.o: $(hdrdir)/ruby/internal/attr/deprecated.h +wait.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +wait.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +wait.o: $(hdrdir)/ruby/internal/attr/error.h +wait.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +wait.o: $(hdrdir)/ruby/internal/attr/forceinline.h +wait.o: $(hdrdir)/ruby/internal/attr/format.h +wait.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +wait.o: $(hdrdir)/ruby/internal/attr/noalias.h +wait.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +wait.o: $(hdrdir)/ruby/internal/attr/noexcept.h +wait.o: $(hdrdir)/ruby/internal/attr/noinline.h +wait.o: $(hdrdir)/ruby/internal/attr/nonnull.h +wait.o: $(hdrdir)/ruby/internal/attr/noreturn.h +wait.o: $(hdrdir)/ruby/internal/attr/pure.h +wait.o: $(hdrdir)/ruby/internal/attr/restrict.h +wait.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +wait.o: $(hdrdir)/ruby/internal/attr/warning.h +wait.o: $(hdrdir)/ruby/internal/attr/weakref.h +wait.o: $(hdrdir)/ruby/internal/cast.h +wait.o: $(hdrdir)/ruby/internal/compiler_is.h +wait.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +wait.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +wait.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +wait.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +wait.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +wait.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +wait.o: $(hdrdir)/ruby/internal/compiler_since.h +wait.o: $(hdrdir)/ruby/internal/config.h +wait.o: $(hdrdir)/ruby/internal/constant_p.h +wait.o: $(hdrdir)/ruby/internal/core.h +wait.o: $(hdrdir)/ruby/internal/core/rarray.h +wait.o: $(hdrdir)/ruby/internal/core/rbasic.h +wait.o: $(hdrdir)/ruby/internal/core/rbignum.h +wait.o: $(hdrdir)/ruby/internal/core/rclass.h +wait.o: $(hdrdir)/ruby/internal/core/rdata.h +wait.o: $(hdrdir)/ruby/internal/core/rfile.h +wait.o: $(hdrdir)/ruby/internal/core/rhash.h +wait.o: $(hdrdir)/ruby/internal/core/robject.h +wait.o: $(hdrdir)/ruby/internal/core/rregexp.h +wait.o: $(hdrdir)/ruby/internal/core/rstring.h +wait.o: $(hdrdir)/ruby/internal/core/rstruct.h +wait.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +wait.o: $(hdrdir)/ruby/internal/ctype.h +wait.o: $(hdrdir)/ruby/internal/dllexport.h +wait.o: $(hdrdir)/ruby/internal/dosish.h +wait.o: $(hdrdir)/ruby/internal/encoding/coderange.h +wait.o: $(hdrdir)/ruby/internal/encoding/ctype.h +wait.o: $(hdrdir)/ruby/internal/encoding/encoding.h +wait.o: $(hdrdir)/ruby/internal/encoding/pathname.h +wait.o: $(hdrdir)/ruby/internal/encoding/re.h +wait.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +wait.o: $(hdrdir)/ruby/internal/encoding/string.h +wait.o: $(hdrdir)/ruby/internal/encoding/symbol.h +wait.o: $(hdrdir)/ruby/internal/encoding/transcode.h +wait.o: $(hdrdir)/ruby/internal/error.h +wait.o: $(hdrdir)/ruby/internal/eval.h +wait.o: $(hdrdir)/ruby/internal/event.h +wait.o: $(hdrdir)/ruby/internal/fl_type.h +wait.o: $(hdrdir)/ruby/internal/gc.h +wait.o: $(hdrdir)/ruby/internal/glob.h +wait.o: $(hdrdir)/ruby/internal/globals.h +wait.o: $(hdrdir)/ruby/internal/has/attribute.h +wait.o: $(hdrdir)/ruby/internal/has/builtin.h +wait.o: $(hdrdir)/ruby/internal/has/c_attribute.h +wait.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +wait.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +wait.o: $(hdrdir)/ruby/internal/has/extension.h +wait.o: $(hdrdir)/ruby/internal/has/feature.h +wait.o: $(hdrdir)/ruby/internal/has/warning.h +wait.o: $(hdrdir)/ruby/internal/intern/array.h +wait.o: $(hdrdir)/ruby/internal/intern/bignum.h +wait.o: $(hdrdir)/ruby/internal/intern/class.h +wait.o: $(hdrdir)/ruby/internal/intern/compar.h +wait.o: $(hdrdir)/ruby/internal/intern/complex.h +wait.o: $(hdrdir)/ruby/internal/intern/cont.h +wait.o: $(hdrdir)/ruby/internal/intern/dir.h +wait.o: $(hdrdir)/ruby/internal/intern/enum.h +wait.o: $(hdrdir)/ruby/internal/intern/enumerator.h +wait.o: $(hdrdir)/ruby/internal/intern/error.h +wait.o: $(hdrdir)/ruby/internal/intern/eval.h +wait.o: $(hdrdir)/ruby/internal/intern/file.h +wait.o: $(hdrdir)/ruby/internal/intern/gc.h +wait.o: $(hdrdir)/ruby/internal/intern/hash.h +wait.o: $(hdrdir)/ruby/internal/intern/io.h +wait.o: $(hdrdir)/ruby/internal/intern/load.h +wait.o: $(hdrdir)/ruby/internal/intern/marshal.h +wait.o: $(hdrdir)/ruby/internal/intern/numeric.h +wait.o: $(hdrdir)/ruby/internal/intern/object.h +wait.o: $(hdrdir)/ruby/internal/intern/parse.h +wait.o: $(hdrdir)/ruby/internal/intern/proc.h +wait.o: $(hdrdir)/ruby/internal/intern/process.h +wait.o: $(hdrdir)/ruby/internal/intern/random.h +wait.o: $(hdrdir)/ruby/internal/intern/range.h +wait.o: $(hdrdir)/ruby/internal/intern/rational.h +wait.o: $(hdrdir)/ruby/internal/intern/re.h +wait.o: $(hdrdir)/ruby/internal/intern/ruby.h +wait.o: $(hdrdir)/ruby/internal/intern/select.h +wait.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +wait.o: $(hdrdir)/ruby/internal/intern/signal.h +wait.o: $(hdrdir)/ruby/internal/intern/sprintf.h +wait.o: $(hdrdir)/ruby/internal/intern/string.h +wait.o: $(hdrdir)/ruby/internal/intern/struct.h +wait.o: $(hdrdir)/ruby/internal/intern/thread.h +wait.o: $(hdrdir)/ruby/internal/intern/time.h +wait.o: $(hdrdir)/ruby/internal/intern/variable.h +wait.o: $(hdrdir)/ruby/internal/intern/vm.h +wait.o: $(hdrdir)/ruby/internal/interpreter.h +wait.o: $(hdrdir)/ruby/internal/iterator.h +wait.o: $(hdrdir)/ruby/internal/memory.h +wait.o: $(hdrdir)/ruby/internal/method.h +wait.o: $(hdrdir)/ruby/internal/module.h +wait.o: $(hdrdir)/ruby/internal/newobj.h +wait.o: $(hdrdir)/ruby/internal/rgengc.h +wait.o: $(hdrdir)/ruby/internal/scan_args.h +wait.o: $(hdrdir)/ruby/internal/special_consts.h +wait.o: $(hdrdir)/ruby/internal/static_assert.h +wait.o: $(hdrdir)/ruby/internal/stdalign.h +wait.o: $(hdrdir)/ruby/internal/stdbool.h +wait.o: $(hdrdir)/ruby/internal/symbol.h +wait.o: $(hdrdir)/ruby/internal/value.h +wait.o: $(hdrdir)/ruby/internal/value_type.h +wait.o: $(hdrdir)/ruby/internal/variable.h +wait.o: $(hdrdir)/ruby/internal/warning_push.h +wait.o: $(hdrdir)/ruby/internal/xmalloc.h +wait.o: $(hdrdir)/ruby/io.h +wait.o: $(hdrdir)/ruby/missing.h +wait.o: $(hdrdir)/ruby/onigmo.h +wait.o: $(hdrdir)/ruby/oniguruma.h +wait.o: $(hdrdir)/ruby/ruby.h +wait.o: $(hdrdir)/ruby/st.h +wait.o: $(hdrdir)/ruby/subst.h +wait.o: wait.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/-test-/wait/extconf.rb b/ruby/ext/-test-/wait/extconf.rb new file mode 100644 index 000000000..92787876a --- /dev/null +++ b/ruby/ext/-test-/wait/extconf.rb @@ -0,0 +1,2 @@ +# frozen_string_literal: false +create_makefile("-test-/wait") diff --git a/ruby/ext/-test-/wait/wait.c b/ruby/ext/-test-/wait/wait.c new file mode 100644 index 000000000..b73ee3580 --- /dev/null +++ b/ruby/ext/-test-/wait/wait.c @@ -0,0 +1,39 @@ +#include "ruby/ruby.h" +#include "ruby/io.h" + +static VALUE +io_wait(VALUE klass, VALUE io, VALUE events, VALUE timeout) +{ + return rb_io_wait(io, events, timeout); +} + +static VALUE +io_maybe_wait(VALUE klass, VALUE error, VALUE io, VALUE events, VALUE timeout) +{ + return rb_io_maybe_wait(RB_NUM2INT(error), io, events, timeout); +} + +static VALUE +io_maybe_wait_readable(VALUE klass, VALUE error, VALUE io, VALUE timeout) +{ + return RB_INT2NUM( + rb_io_maybe_wait_readable(RB_NUM2INT(error), io, timeout) + ); +} + +static VALUE +io_maybe_wait_writable(VALUE klass, VALUE error, VALUE io, VALUE timeout) +{ + return RB_INT2NUM( + rb_io_maybe_wait_writable(RB_NUM2INT(error), io, timeout) + ); +} + +void +Init_wait(void) +{ + rb_define_singleton_method(rb_cIO, "io_wait", io_wait, 3); + rb_define_singleton_method(rb_cIO, "io_maybe_wait", io_maybe_wait, 4); + rb_define_singleton_method(rb_cIO, "io_maybe_wait_readable", io_maybe_wait_readable, 3); + rb_define_singleton_method(rb_cIO, "io_maybe_wait_writable", io_maybe_wait_writable, 3); +} diff --git a/ruby/ext/-test-/wait_for_single_fd/depend b/ruby/ext/-test-/wait_for_single_fd/depend deleted file mode 100644 index 8549fca78..000000000 --- a/ruby/ext/-test-/wait_for_single_fd/depend +++ /dev/null @@ -1,17 +0,0 @@ -# AUTOGENERATED DEPENDENCIES START -wait_for_single_fd.o: $(RUBY_EXTCONF_H) -wait_for_single_fd.o: $(arch_hdrdir)/ruby/config.h -wait_for_single_fd.o: $(hdrdir)/ruby/assert.h -wait_for_single_fd.o: $(hdrdir)/ruby/backward.h -wait_for_single_fd.o: $(hdrdir)/ruby/defines.h -wait_for_single_fd.o: $(hdrdir)/ruby/encoding.h -wait_for_single_fd.o: $(hdrdir)/ruby/intern.h -wait_for_single_fd.o: $(hdrdir)/ruby/io.h -wait_for_single_fd.o: $(hdrdir)/ruby/missing.h -wait_for_single_fd.o: $(hdrdir)/ruby/onigmo.h -wait_for_single_fd.o: $(hdrdir)/ruby/oniguruma.h -wait_for_single_fd.o: $(hdrdir)/ruby/ruby.h -wait_for_single_fd.o: $(hdrdir)/ruby/st.h -wait_for_single_fd.o: $(hdrdir)/ruby/subst.h -wait_for_single_fd.o: wait_for_single_fd.c -# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/-test-/wait_for_single_fd/extconf.rb b/ruby/ext/-test-/wait_for_single_fd/extconf.rb deleted file mode 100644 index 2a976c8f4..000000000 --- a/ruby/ext/-test-/wait_for_single_fd/extconf.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: false -headers = %w(sys/types.h sys/time.h sys/event.h).select { |h| have_header(h) } -have_func('kqueue', headers) -create_makefile("-test-/wait_for_single_fd") diff --git a/ruby/ext/-test-/wait_for_single_fd/wait_for_single_fd.c b/ruby/ext/-test-/wait_for_single_fd/wait_for_single_fd.c deleted file mode 100644 index b8a33979b..000000000 --- a/ruby/ext/-test-/wait_for_single_fd/wait_for_single_fd.c +++ /dev/null @@ -1,94 +0,0 @@ -#include "ruby/ruby.h" -#include "ruby/io.h" - -static VALUE -wait_for_single_fd(VALUE ign, VALUE fd, VALUE events, VALUE timeout) -{ - struct timeval tv; - struct timeval *tvp = NULL; - int rc; - - if (!NIL_P(timeout)) { - tv = rb_time_timeval(timeout); - tvp = &tv; - } - - rc = rb_wait_for_single_fd(NUM2INT(fd), NUM2INT(events), tvp); - if (rc == -1) - rb_sys_fail("rb_wait_for_single_fd"); - return INT2NUM(rc); -} - -#ifdef HAVE_KQUEUE -/* ensure rb_wait_for_single_fd works on kqueue descriptors */ -#include -#include -#include -static VALUE -kqueue_test_wait(VALUE klass) -{ - int kqfd = -1; - int p[2] = { -1, -1 }; - struct timeval tv = { 0, 0 }; - const struct timespec ts = { 1, 0 }; - struct kevent kev; - const char *msg; - VALUE ret = Qfalse; - int e = 0; - int n; - - msg = "pipe"; - if (rb_cloexec_pipe(p) < 0) goto err; - - msg = "kqueue"; - kqfd = kqueue(); - if (kqfd < 0) goto err; - - n = rb_wait_for_single_fd(kqfd, RB_WAITFD_IN, &tv); - if (n != 0) { - msg = "spurious wakeup"; - errno = 0; - goto err; - } - - msg = "write"; - if (write(p[1], "", 1) < 0) goto err; - - EV_SET(&kev, p[0], EVFILT_READ, EV_ADD, 0, 0, 0); - - msg = "kevent"; - n = kevent(kqfd, &kev, 1, &kev, 1, &ts); - if (n < 0) goto err; - msg = NULL; - if (n == 1) { - n = rb_wait_for_single_fd(kqfd, RB_WAITFD_IN, &tv); - ret = INT2NUM(n); - } - else { - rb_warn("kevent did not return readiness"); - } -err: - if (msg) e = errno; - if (p[0] >= 0) close(p[0]); - if (p[1] >= 0) close(p[1]); - if (kqfd >= 0) close(kqfd); - if (msg) { - if (e) rb_syserr_fail(e, msg); - rb_raise(rb_eRuntimeError, "%s", msg); - } - return ret; -} -#endif /* HAVE_KQUEUE */ - -void -Init_wait_for_single_fd(void) -{ - rb_define_const(rb_cObject, "RB_WAITFD_IN", INT2NUM(RB_WAITFD_IN)); - rb_define_const(rb_cObject, "RB_WAITFD_OUT", INT2NUM(RB_WAITFD_OUT)); - rb_define_const(rb_cObject, "RB_WAITFD_PRI", INT2NUM(RB_WAITFD_PRI)); - rb_define_singleton_method(rb_cIO, "wait_for_single_fd", - wait_for_single_fd, 3); -#ifdef HAVE_KQUEUE - rb_define_singleton_method(rb_cIO, "kqueue_test_wait", kqueue_test_wait, 0); -#endif -} diff --git a/ruby/ext/-test-/win32/console/attribute.c b/ruby/ext/-test-/win32/console/attribute.c index a5f80fcaf..e3e80a199 100644 --- a/ruby/ext/-test-/win32/console/attribute.c +++ b/ruby/ext/-test-/win32/console/attribute.c @@ -13,7 +13,7 @@ io_handle(VALUE io) } static VALUE -console_info(VALUE io) +console_info(VALUE klass, VALUE io) { HANDLE h = io_handle(io); CONSOLE_SCREEN_BUFFER_INFO csbi; @@ -29,7 +29,7 @@ console_info(VALUE io) } static VALUE -console_set_attribute(VALUE io, VALUE attr) +console_set_attribute(VALUE klass, VALUE io, VALUE attr) { HANDLE h = io_handle(io); @@ -47,8 +47,8 @@ Init_attribute(VALUE m) "size_x", "size_y", "cur_x", "cur_y", "attr", NULL); - rb_define_method(rb_cIO, "console_info", console_info, 0); - rb_define_method(rb_cIO, "console_attribute", console_set_attribute, 1); + rb_define_singleton_method(m, "console_info", console_info, 1); + rb_define_singleton_method(m, "console_attribute", console_set_attribute, 2); rb_define_const(m, "FOREGROUND_MASK", INT2FIX(FOREGROUND_MASK)); rb_define_const(m, "FOREGROUND_BLUE", INT2FIX(FOREGROUND_BLUE)); diff --git a/ruby/ext/.document b/ruby/ext/.document index 6a491576a..aeb40c60f 100644 --- a/ruby/ext/.document +++ b/ruby/ext/.document @@ -2,9 +2,15 @@ bigdecimal/bigdecimal.c bigdecimal/lib +cgi/escape/escape.c continuation/continuation.c coverage/coverage.c +coverage/lib date/date_core.c +date/date_parse.c +date/date_strftime.c +date/date_strptime.c +date/lib dbm/dbm.c digest/bubblebabble/bubblebabble.c digest/digest.c @@ -13,6 +19,7 @@ digest/md5/md5init.c digest/rmd160/rmd160init.c digest/sha1/sha1init.c digest/sha2/sha2init.c +digest/sha2/lib etc/etc.c fcntl/fcntl.c fiber/fiber.c @@ -20,21 +27,26 @@ fiddle/closure.c fiddle/conversions.c fiddle/fiddle.c fiddle/function.c +fiddle/pinned.c fiddle/pointer.c fiddle/handle.c fiddle/lib gdbm/gdbm.c io/console/console.c +io/console/lib io/nonblock/nonblock.c io/wait/wait.c json/generator/generator.c json/lib json/parser/parser.c +monitor/lib +monitor/monitor.c nkf/lib nkf/nkf.c objspace/objspace.c objspace/objspace_dump.c objspace/object_tracing.c +objspace/lib openssl/lib openssl/ossl.c openssl/ossl_asn1.c @@ -58,6 +70,7 @@ openssl/ossl_pkey_rsa.c openssl/ossl_rand.c openssl/ossl_ssl.c openssl/ossl_ssl_session.c +openssl/ossl_ts.c openssl/ossl_x509.c openssl/ossl_x509attr.c openssl/ossl_x509cert.c @@ -78,14 +91,16 @@ psych/psych_yaml_tree.c pty/lib pty/pty.c racc/cparse/cparse.c +rbconfig/sizeof/*.c readline/readline.c ripper/lib -sdbm/init.c socket stringio/stringio.c strscan/strscan.c syslog/syslog.c syslog/lib +win32/lib +win32/resolv/*.c win32ole/lib win32ole/*.c zlib/zlib.c diff --git a/ruby/ext/Setup b/ruby/ext/Setup index ac79c86f8..0376e2fc6 100644 --- a/ruby/ext/Setup +++ b/ruby/ext/Setup @@ -33,7 +33,6 @@ #rbconfig/sizeof #readline #ripper -#sdbm #socket #stringio #strscan diff --git a/ruby/ext/Setup.atheos b/ruby/ext/Setup.atheos index 90a7d0134..3f6263b1e 100644 --- a/ruby/ext/Setup.atheos +++ b/ruby/ext/Setup.atheos @@ -20,7 +20,6 @@ pty racc/parse readline ripper -sdbm socket stringio strscan diff --git a/ruby/ext/Setup.nt b/ruby/ext/Setup.nt index fb5989b87..dc36aa868 100644 --- a/ruby/ext/Setup.nt +++ b/ruby/ext/Setup.nt @@ -21,7 +21,6 @@ nkf racc/cparse #readline #ripper -sdbm socket stringio strscan diff --git a/ruby/ext/bigdecimal/bigdecimal.c b/ruby/ext/bigdecimal/bigdecimal.c index 7ac883730..f4dcb2ee7 100644 --- a/ruby/ext/bigdecimal/bigdecimal.c +++ b/ruby/ext/bigdecimal/bigdecimal.c @@ -14,6 +14,7 @@ #include "ruby/util.h" #ifndef BIGDECIMAL_DEBUG +# undef NDEBUG # define NDEBUG #endif #include @@ -24,20 +25,16 @@ #include #include #include -#include "math.h" #ifdef HAVE_IEEEFP_H #include #endif +#include "bits.h" +#include "static_assert.h" + /* #define ENABLE_NUMERIC_STRING */ -#define MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, min, max) ( \ - (a) == 0 ? 0 : \ - (a) == -1 ? (b) < -(max) : \ - (a) > 0 ? \ - ((b) > 0 ? (max) / (a) < (b) : (min) / (a) > (b)) : \ - ((b) > 0 ? (min) / (a) < (b) : (max) / (a) > (b))) #define SIGNED_VALUE_MAX INTPTR_MAX #define SIGNED_VALUE_MIN INTPTR_MIN #define MUL_OVERFLOW_SIGNED_VALUE_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, SIGNED_VALUE_MIN, SIGNED_VALUE_MAX) @@ -65,20 +62,22 @@ static ID id_eq; static ID id_half; /* MACRO's to guard objects from GC by keeping them in stack */ +#ifdef RBIMPL_ATTR_MAYBE_UNUSED +#define ENTER(n) RBIMPL_ATTR_MAYBE_UNUSED() volatile VALUE vStack[n];int iStack=0 +#else #define ENTER(n) volatile VALUE RB_UNUSED_VAR(vStack[n]);int iStack=0 +#endif #define PUSH(x) (vStack[iStack++] = (VALUE)(x)) #define SAVE(p) PUSH((p)->obj) #define GUARD_OBJ(p,y) ((p)=(y), SAVE(p)) -#define BASE_FIG RMPD_COMPONENT_FIGURES -#define BASE RMPD_BASE +#define BASE_FIG BIGDECIMAL_COMPONENT_FIGURES +#define BASE BIGDECIMAL_BASE #define HALF_BASE (BASE/2) #define BASE1 (BASE/10) -#ifndef DBLE_FIG -#define DBLE_FIG (DBL_DIG+1) /* figure of double */ -#endif +#define LOG10_2 0.3010299956639812 #ifndef RRATIONAL_ZERO_P # define RRATIONAL_ZERO_P(x) (FIXNUM_P(rb_rational_num(x)) && \ @@ -103,30 +102,6 @@ static ID id_half; # define RB_OBJ_STRING(obj) StringValueCStr(obj) #endif -#ifndef HAVE_RB_RATIONAL_NUM -static inline VALUE -rb_rational_num(VALUE rat) -{ -#ifdef HAVE_TYPE_STRUCT_RRATIONAL - return RRATIONAL(rat)->num; -#else - return rb_funcall(rat, rb_intern("numerator"), 0); -#endif -} -#endif - -#ifndef HAVE_RB_RATIONAL_DEN -static inline VALUE -rb_rational_den(VALUE rat) -{ -#ifdef HAVE_TYPE_STRUCT_RRATIONAL - return RRATIONAL(rat)->den; -#else - return rb_funcall(rat, rb_intern("denominator"), 0); -#endif -} -#endif - #define BIGDECIMAL_POSITIVE_P(bd) ((bd)->sign > 0) #define BIGDECIMAL_NEGATIVE_P(bd) ((bd)->sign < 0) @@ -140,7 +115,9 @@ rb_rational_den(VALUE rat) */ static unsigned short VpGetException(void); static void VpSetException(unsigned short f); -static void VpInternalRound(Real *c, size_t ixDigit, BDIGIT vPrev, BDIGIT v); +static void VpCheckException(Real *p, bool always); +static VALUE VpCheckGetValue(Real *p); +static void VpInternalRound(Real *c, size_t ixDigit, DECDIG vPrev, DECDIG v); static int VpLimitRound(Real *c, size_t ixDigit); static Real *VpCopy(Real *pv, Real const* const x); @@ -152,6 +129,12 @@ static int VPrint(FILE *fp,const char *cntl_chr,Real *a); * **** BigDecimal part **** */ +static VALUE BigDecimal_nan(void); +static VALUE BigDecimal_positive_infinity(void); +static VALUE BigDecimal_negative_infinity(void); +static VALUE BigDecimal_positive_zero(void); +static VALUE BigDecimal_negative_zero(void); + static void BigDecimal_delete(void *pv) { @@ -162,14 +145,19 @@ static size_t BigDecimal_memsize(const void *ptr) { const Real *pv = ptr; - return (sizeof(*pv) + pv->MaxPrec * sizeof(BDIGIT)); + return (sizeof(*pv) + pv->MaxPrec * sizeof(DECDIG)); } +#ifndef HAVE_RB_EXT_RACTOR_SAFE +# undef RUBY_TYPED_FROZEN_SHAREABLE +# define RUBY_TYPED_FROZEN_SHAREABLE 0 +#endif + static const rb_data_type_t BigDecimal_data_type = { "BigDecimal", { 0, BigDecimal_delete, BigDecimal_memsize, }, #ifdef RUBY_TYPED_FREE_IMMEDIATELY - 0, 0, RUBY_TYPED_FREE_IMMEDIATELY + 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE #endif }; @@ -179,21 +167,6 @@ is_kind_of_BigDecimal(VALUE const v) return rb_typeddata_is_kind_of(v, &BigDecimal_data_type); } -static VALUE -ToValue(Real *p) -{ - if (VpIsNaN(p)) { - VpException(VP_EXCEPTION_NaN, "Computation results to 'NaN'(Not a Number)", 0); - } - else if (VpIsPosInf(p)) { - VpException(VP_EXCEPTION_INFINITY, "Computation results to 'Infinity'", 0); - } - else if (VpIsNegInf(p)) { - VpException(VP_EXCEPTION_INFINITY, "Computation results to '-Infinity'", 0); - } - return p->obj; -} - NORETURN(static void cannot_be_coerced_into_BigDecimal(VALUE, VALUE)); static void @@ -213,95 +186,67 @@ cannot_be_coerced_into_BigDecimal(VALUE exc_class, VALUE v) } static inline VALUE BigDecimal_div2(VALUE, VALUE, VALUE); +static VALUE rb_inum_convert_to_BigDecimal(VALUE val, size_t digs, int raise_exception); +static VALUE rb_float_convert_to_BigDecimal(VALUE val, size_t digs, int raise_exception); +static VALUE rb_rational_convert_to_BigDecimal(VALUE val, size_t digs, int raise_exception); +static VALUE rb_cstr_convert_to_BigDecimal(const char *c_str, size_t digs, int raise_exception); +static VALUE rb_convert_to_BigDecimal(VALUE val, size_t digs, int raise_exception); static Real* GetVpValueWithPrec(VALUE v, long prec, int must) { - ENTER(1); - Real *pv; - VALUE num, bg; - char szD[128]; - VALUE orig = Qundef; - double d; + const size_t digs = prec < 0 ? SIZE_MAX : (size_t)prec; -again: switch(TYPE(v)) { case T_FLOAT: - if (prec < 0) goto unable_to_coerce_without_prec; - if (prec > DBL_DIG+1) goto SomeOneMayDoIt; - d = RFLOAT_VALUE(v); - if (!isfinite(d)) { - pv = VpCreateRbObject(1, NULL); - VpDtoV(pv, d); - return pv; - } - if (d != 0.0) { - v = rb_funcall(v, id_to_r, 0); - goto again; - } - if (1/d < 0.0) { - return VpCreateRbObject(prec, "-0"); - } - return VpCreateRbObject(prec, "0"); + v = rb_float_convert_to_BigDecimal(v, digs, must); + break; case T_RATIONAL: - if (prec < 0) goto unable_to_coerce_without_prec; - - if (orig == Qundef ? (orig = v, 1) : orig != v) { - num = rb_rational_num(v); - pv = GetVpValueWithPrec(num, -1, must); - if (pv == NULL) goto SomeOneMayDoIt; - - v = BigDecimal_div2(ToValue(pv), rb_rational_den(v), LONG2NUM(prec)); - goto again; - } - - v = orig; - goto SomeOneMayDoIt; + v = rb_rational_convert_to_BigDecimal(v, digs, must); + break; case T_DATA: - if (is_kind_of_BigDecimal(v)) { - pv = DATA_PTR(v); - return pv; - } - else { - goto SomeOneMayDoIt; - } - break; + if (!is_kind_of_BigDecimal(v)) { + goto SomeOneMayDoIt; + } + break; - case T_FIXNUM: - sprintf(szD, "%ld", FIX2LONG(v)); - return VpCreateRbObject(VpBaseFig() * 2 + 1, szD); + case T_FIXNUM: { + char szD[128]; + sprintf(szD, "%ld", FIX2LONG(v)); + v = rb_cstr_convert_to_BigDecimal(szD, VpBaseFig() * 2 + 1, must); + break; + } #ifdef ENABLE_NUMERIC_STRING - case T_STRING: - StringValueCStr(v); - return VpCreateRbObject(RSTRING_LEN(v) + VpBaseFig() + 1, - RSTRING_PTR(v)); + case T_STRING: { + const char *c_str = StringValueCStr(v); + v = rb_cstr_convert_to_BigDecimal(c_str, RSTRING_LEN(v) + VpBaseFig() + 1, must); + break; + } #endif /* ENABLE_NUMERIC_STRING */ - case T_BIGNUM: - bg = rb_big2str(v, 10); - PUSH(bg); - return VpCreateRbObject(strlen(RSTRING_PTR(bg)) + VpBaseFig() + 1, - RSTRING_PTR(bg)); + case T_BIGNUM: { + VALUE bg = rb_big2str(v, 10); + v = rb_cstr_convert_to_BigDecimal(RSTRING_PTR(bg), RSTRING_LEN(bg) + VpBaseFig() + 1, must); + RB_GC_GUARD(bg); + break; + } + default: goto SomeOneMayDoIt; } + Real *vp; + TypedData_Get_Struct(v, Real, &BigDecimal_data_type, vp); + return vp; + SomeOneMayDoIt: if (must) { cannot_be_coerced_into_BigDecimal(rb_eTypeError, v); } return NULL; /* NULL means to coerce */ - -unable_to_coerce_without_prec: - if (must) { - rb_raise(rb_eArgError, - "%"PRIsVALUE" can't be coerced into BigDecimal without a precision", - RB_OBJ_CLASSNAME(v)); - } - return NULL; } static Real* @@ -311,11 +256,13 @@ GetVpValue(VALUE v, int must) } /* call-seq: - * BigDecimal.double_fig + * BigDecimal.double_fig -> integer + * + * Returns the number of digits a Float object is allowed to have; + * the result is system-dependent: + * + * BigDecimal.double_fig # => 16 * - * The BigDecimal.double_fig class method returns the number of digits a - * Float number is allowed to have. The result depends upon the CPU and OS - * in use. */ static VALUE BigDecimal_double_fig(VALUE self) @@ -324,15 +271,16 @@ BigDecimal_double_fig(VALUE self) } /* call-seq: - * big_decimal.precs -> array + * precs -> array * - * Returns an Array of two Integer values. + * Returns an Array of two Integer values that represent platform-dependent + * internal storage properties. * - * The first value is the current number of significant digits in the - * BigDecimal. The second value is the maximum number of significant digits - * for the BigDecimal. + * This method is deprecated and will be removed in the future. + * Instead, use BigDecimal#n_significant_digits for obtaining the number of + * significant digits in scientific notation, and BigDecimal#precision for + * obtaining the number of digits in decimal notation. * - * BigDecimal('5').precs #=> [9, 18] */ static VALUE @@ -342,19 +290,251 @@ BigDecimal_prec(VALUE self) Real *p; VALUE obj; + rb_category_warn(RB_WARN_CATEGORY_DEPRECATED, + "BigDecimal#precs is deprecated and will be removed in the future; " + "use BigDecimal#precision instead."); + GUARD_OBJ(p, GetVpValue(self, 1)); - obj = rb_assoc_new(INT2NUM(p->Prec*VpBaseFig()), - INT2NUM(p->MaxPrec*VpBaseFig())); + obj = rb_assoc_new(SIZET2NUM(p->Prec*VpBaseFig()), + SIZET2NUM(p->MaxPrec*VpBaseFig())); return obj; } +static void +BigDecimal_count_precision_and_scale(VALUE self, ssize_t *out_precision, ssize_t *out_scale) +{ + ENTER(1); + + if (out_precision == NULL && out_scale == NULL) + return; + + Real *p; + GUARD_OBJ(p, GetVpValue(self, 1)); + if (VpIsZero(p) || !VpIsDef(p)) { + zero: + if (out_precision) *out_precision = 0; + if (out_scale) *out_scale = 0; + return; + } + + DECDIG x; + + ssize_t n = p->Prec; /* The length of frac without zeros. */ + while (n > 0 && p->frac[n-1] == 0) --n; + if (n == 0) goto zero; + + int nlz = BASE_FIG; + for (x = p->frac[0]; x > 0; x /= 10) --nlz; + + int ntz = 0; + for (x = p->frac[n-1]; x > 0 && x % 10 == 0; x /= 10) ++ntz; + + /* + * Calculate the precision and the scale + * ------------------------------------- + * + * The most significant digit is frac[0], and the least significant digit + * is frac[Prec-1]. When the exponent is zero, the decimal point is + * located just before frac[0]. + * + * When the exponent is negative, the decimal point moves to leftward. + * In this case, the precision can be calculated by + * + * precision = BASE_FIG * (-exponent + n) - ntz, + * + * and the scale is the same as precision. + * + * 0 . 0000 0000 | frac[0] ... frac[n-1] | + * |<----------| exponent == -2 | + * |---------------------------------->| precision + * |---------------------------------->| scale + * + * + * Conversely, when the exponent is positive, the decimal point moves to + * rightward. In this case, the scale equals to + * + * BASE_FIG * (n - exponent) - ntz. + * + * the precision equals to + * + * scale + BASE_FIG * exponent - nlz. + * + * | frac[0] frac[1] . frac[2] ... frac[n-1] | + * |---------------->| exponent == 2 | + * | |---------------------->| scale + * |---------------------------------------->| precision + */ + + ssize_t ex = p->exponent; + + /* Count the number of decimal digits before frac[1]. */ + ssize_t n_digits_head = BASE_FIG; + if (ex < 0) { + n_digits_head += (-ex) * BASE_FIG; /* The number of leading zeros before frac[0]. */ + ex = 0; + } + else if (ex > 0) { + /* Count the number of decimal digits without the leading zeros in + * the most significant digit in the integral part. + */ + n_digits_head -= nlz; /* Make the number of digits */ + } + + if (out_precision) { + ssize_t precision = n_digits_head; + + /* Count the number of decimal digits after frac[0]. */ + if (ex > (ssize_t)n) { + /* In this case the number is an integer with some trailing zeros. */ + precision += (ex - 1) * BASE_FIG; + } + else if (n > 0) { + precision += (n - 1) * BASE_FIG; + + if (ex < (ssize_t)n) { + precision -= ntz; + } + } + + *out_precision = precision; + } + + if (out_scale) { + ssize_t scale = 0; + + if (p->exponent < 0) { + scale = n_digits_head + (n - 1) * BASE_FIG - ntz; + } + else if (n > p->exponent) { + scale = (n - p->exponent) * BASE_FIG - ntz; + } + + *out_scale = scale; + } +} + /* - * call-seq: hash + * call-seq: + * precision -> integer * - * Creates a hash for this BigDecimal. + * Returns the number of decimal digits in +self+: + * + * BigDecimal("0").precision # => 0 + * BigDecimal("1").precision # => 1 + * BigDecimal("1.1").precision # => 2 + * BigDecimal("3.1415").precision # => 5 + * BigDecimal("-1e20").precision # => 21 + * BigDecimal("1e-20").precision # => 20 + * BigDecimal("Infinity").precision # => 0 + * BigDecimal("-Infinity").precision # => 0 + * BigDecimal("NaN").precision # => 0 + * + */ +static VALUE +BigDecimal_precision(VALUE self) +{ + ssize_t precision; + BigDecimal_count_precision_and_scale(self, &precision, NULL); + return SSIZET2NUM(precision); +} + +/* + * call-seq: + * scale -> integer + * + * Returns the number of decimal digits following the decimal digits in +self+. + * + * BigDecimal("0").scale # => 0 + * BigDecimal("1").scale # => 1 + * BigDecimal("1.1").scale # => 1 + * BigDecimal("3.1415").scale # => 4 + * BigDecimal("-1e20").precision # => 0 + * BigDecimal("1e-20").precision # => 20 + * BigDecimal("Infinity").scale # => 0 + * BigDecimal("-Infinity").scale # => 0 + * BigDecimal("NaN").scale # => 0 + */ +static VALUE +BigDecimal_scale(VALUE self) +{ + ssize_t scale; + BigDecimal_count_precision_and_scale(self, NULL, &scale); + return SSIZET2NUM(scale); +} + +/* + * call-seq: + * precision_scale -> [integer, integer] + * + * Returns a 2-length array; the first item is the result of + * BigDecimal#precision and the second one is of BigDecimal#scale. + * + * See BigDecimal#precision. + * See BigDecimal#scale. + */ +static VALUE +BigDecimal_precision_scale(VALUE self) +{ + ssize_t precision, scale; + BigDecimal_count_precision_and_scale(self, &precision, &scale); + return rb_assoc_new(SSIZET2NUM(precision), SSIZET2NUM(scale)); +} + +/* + * call-seq: + * n_significant_digits -> integer + * + * Returns the number of decimal significant digits in +self+. + * + * BigDecimal("0").scale # => 0 + * BigDecimal("1").scale # => 1 + * BigDecimal("1.1").scale # => 2 + * BigDecimal("3.1415").scale # => 5 + * BigDecimal("-1e20").precision # => 1 + * BigDecimal("1e-20").precision # => 1 + * BigDecimal("Infinity").scale # => 0 + * BigDecimal("-Infinity").scale # => 0 + * BigDecimal("NaN").scale # => 0 + */ +static VALUE +BigDecimal_n_significant_digits(VALUE self) +{ + ENTER(1); + + Real *p; + GUARD_OBJ(p, GetVpValue(self, 1)); + if (VpIsZero(p) || !VpIsDef(p)) { + return INT2FIX(0); + } + + ssize_t n = p->Prec; /* The length of frac without trailing zeros. */ + for (n = p->Prec; n > 0 && p->frac[n-1] == 0; --n); + if (n == 0) return INT2FIX(0); + + DECDIG x; + int nlz = BASE_FIG; + for (x = p->frac[0]; x > 0; x /= 10) --nlz; + + int ntz = 0; + for (x = p->frac[n-1]; x > 0 && x % 10 == 0; x /= 10) ++ntz; + + ssize_t n_significant_digits = BASE_FIG*n - nlz - ntz; + return SSIZET2NUM(n_significant_digits); +} + +/* + * call-seq: + * hash -> integer + * + * Returns the integer hash value for +self+. + * + * Two instances of \BigDecimal have the same hash value if and only if + * they have equal: + * + * - Sign. + * - Fractional part. + * - Exponent. * - * Two BigDecimals with equal sign, - * fractional part and exponent have the same hash. */ static VALUE BigDecimal_hash(VALUE self) @@ -367,23 +547,23 @@ BigDecimal_hash(VALUE self) hash = (st_index_t)p->sign; /* hash!=2: the case for 0(1),NaN(0) or +-Infinity(3) is sign itself */ if(hash == 2 || hash == (st_index_t)-2) { - hash ^= rb_memhash(p->frac, sizeof(BDIGIT)*p->Prec); - hash += p->exponent; + hash ^= rb_memhash(p->frac, sizeof(DECDIG)*p->Prec); + hash += p->exponent; } return ST2FIX(hash); } /* - * call-seq: _dump + * call-seq: + * _dump -> string * - * Method used to provide marshalling support. + * Returns a string representing the marshalling of +self+. + * See module Marshal. * - * inf = BigDecimal('Infinity') - * #=> Infinity - * BigDecimal._load(inf._dump) - * #=> Infinity + * inf = BigDecimal('Infinity') # => Infinity + * dumped = inf._dump # => "9:Infinity" + * BigDecimal._load(dumped) # => Infinity * - * See the Marshal module. */ static VALUE BigDecimal_dump(int argc, VALUE *argv, VALUE self) @@ -425,12 +605,12 @@ BigDecimal_load(VALUE self, VALUE str) m = m*10 + (unsigned long)(ch-'0'); } if (m > VpBaseFig()) m -= VpBaseFig(); - GUARD_OBJ(pv, VpNewRbClass(m, (char *)pch, self)); + GUARD_OBJ(pv, VpNewRbClass(m, (char *)pch, self, true, true)); m /= VpBaseFig(); if (m && pv->MaxPrec > m) { pv->MaxPrec = m+1; } - return ToValue(pv); + return VpCheckGetValue(pv); } static unsigned short @@ -517,42 +697,166 @@ check_rounding_mode(VALUE const v) return sw; } -/* call-seq: - * BigDecimal.mode(mode, value) - * - * Controls handling of arithmetic exceptions and rounding. If no value - * is supplied, the current value is returned. - * - * Six values of the mode parameter control the handling of arithmetic - * exceptions: - * - * BigDecimal::EXCEPTION_NaN - * BigDecimal::EXCEPTION_INFINITY - * BigDecimal::EXCEPTION_UNDERFLOW - * BigDecimal::EXCEPTION_OVERFLOW - * BigDecimal::EXCEPTION_ZERODIVIDE - * BigDecimal::EXCEPTION_ALL - * - * For each mode parameter above, if the value set is false, computation - * continues after an arithmetic exception of the appropriate type. - * When computation continues, results are as follows: - * - * EXCEPTION_NaN:: NaN - * EXCEPTION_INFINITY:: +Infinity or -Infinity - * EXCEPTION_UNDERFLOW:: 0 - * EXCEPTION_OVERFLOW:: +Infinity or -Infinity - * EXCEPTION_ZERODIVIDE:: +Infinity or -Infinity - * - * One value of the mode parameter controls the rounding of numeric values: - * BigDecimal::ROUND_MODE. The values it can take are: - * - * ROUND_UP, :up:: round away from zero - * ROUND_DOWN, :down, :truncate:: round towards zero (truncate) - * ROUND_HALF_UP, :half_up, :default:: round towards the nearest neighbor, unless both neighbors are equidistant, in which case round away from zero. (default) - * ROUND_HALF_DOWN, :half_down:: round towards the nearest neighbor, unless both neighbors are equidistant, in which case round towards zero. - * ROUND_HALF_EVEN, :half_even, :banker:: round towards the nearest neighbor, unless both neighbors are equidistant, in which case round towards the even neighbor (Banker's rounding) - * ROUND_CEILING, :ceiling, :ceil:: round towards positive infinity (ceil) - * ROUND_FLOOR, :floor:: round towards negative infinity (floor) +/* call-seq: + * BigDecimal.mode(mode, setting = nil) -> integer + * + * Returns an integer representing the mode settings + * for exception handling and rounding. + * + * These modes control exception handling: + * + * - \BigDecimal::EXCEPTION_NaN. + * - \BigDecimal::EXCEPTION_INFINITY. + * - \BigDecimal::EXCEPTION_UNDERFLOW. + * - \BigDecimal::EXCEPTION_OVERFLOW. + * - \BigDecimal::EXCEPTION_ZERODIVIDE. + * - \BigDecimal::EXCEPTION_ALL. + * + * Values for +setting+ for exception handling: + * + * - +true+: sets the given +mode+ to +true+. + * - +false+: sets the given +mode+ to +false+. + * - +nil+: does not modify the mode settings. + * + * You can use method BigDecimal.save_exception_mode + * to temporarily change, and then automatically restore, exception modes. + * + * For clarity, some examples below begin by setting all + * exception modes to +false+. + * + * This mode controls the way rounding is to be performed: + * + * - \BigDecimal::ROUND_MODE + * + * You can use method BigDecimal.save_rounding_mode + * to temporarily change, and then automatically restore, the rounding mode. + * + * NaNs + * + * Mode \BigDecimal::EXCEPTION_NaN controls behavior + * when a \BigDecimal NaN is created. + * + * Settings: + * + * - +false+ (default): Returns BigDecimal('NaN'). + * - +true+: Raises FloatDomainError. + * + * Examples: + * + * BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0 + * BigDecimal('NaN') # => NaN + * BigDecimal.mode(BigDecimal::EXCEPTION_NaN, true) # => 2 + * BigDecimal('NaN') # Raises FloatDomainError + * + * Infinities + * + * Mode \BigDecimal::EXCEPTION_INFINITY controls behavior + * when a \BigDecimal Infinity or -Infinity is created. + * Settings: + * + * - +false+ (default): Returns BigDecimal('Infinity') + * or BigDecimal('-Infinity'). + * - +true+: Raises FloatDomainError. + * + * Examples: + * + * BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0 + * BigDecimal('Infinity') # => Infinity + * BigDecimal('-Infinity') # => -Infinity + * BigDecimal.mode(BigDecimal::EXCEPTION_INFINITY, true) # => 1 + * BigDecimal('Infinity') # Raises FloatDomainError + * BigDecimal('-Infinity') # Raises FloatDomainError + * + * Underflow + * + * Mode \BigDecimal::EXCEPTION_UNDERFLOW controls behavior + * when a \BigDecimal underflow occurs. + * Settings: + * + * - +false+ (default): Returns BigDecimal('0') + * or BigDecimal('-Infinity'). + * - +true+: Raises FloatDomainError. + * + * Examples: + * + * BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0 + * def flow_under + * x = BigDecimal('0.1') + * 100.times { x *= x } + * end + * flow_under # => 100 + * BigDecimal.mode(BigDecimal::EXCEPTION_UNDERFLOW, true) # => 4 + * flow_under # Raises FloatDomainError + * + * Overflow + * + * Mode \BigDecimal::EXCEPTION_OVERFLOW controls behavior + * when a \BigDecimal overflow occurs. + * Settings: + * + * - +false+ (default): Returns BigDecimal('Infinity') + * or BigDecimal('-Infinity'). + * - +true+: Raises FloatDomainError. + * + * Examples: + * + * BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0 + * def flow_over + * x = BigDecimal('10') + * 100.times { x *= x } + * end + * flow_over # => 100 + * BigDecimal.mode(BigDecimal::EXCEPTION_OVERFLOW, true) # => 1 + * flow_over # Raises FloatDomainError + * + * Zero Division + * + * Mode \BigDecimal::EXCEPTION_ZERODIVIDE controls behavior + * when a zero-division occurs. + * Settings: + * + * - +false+ (default): Returns BigDecimal('Infinity') + * or BigDecimal('-Infinity'). + * - +true+: Raises FloatDomainError. + * + * Examples: + * + * BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0 + * one = BigDecimal('1') + * zero = BigDecimal('0') + * one / zero # => Infinity + * BigDecimal.mode(BigDecimal::EXCEPTION_ZERODIVIDE, true) # => 16 + * one / zero # Raises FloatDomainError + * + * All Exceptions + * + * Mode \BigDecimal::EXCEPTION_ALL controls all of the above: + * + * BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0 + * BigDecimal.mode(BigDecimal::EXCEPTION_ALL, true) # => 23 + * + * Rounding + * + * Mode \BigDecimal::ROUND_MODE controls the way rounding is to be performed; + * its +setting+ values are: + * + * - +ROUND_UP+: Round away from zero. + * Aliased as +:up+. + * - +ROUND_DOWN+: Round toward zero. + * Aliased as +:down+ and +:truncate+. + * - +ROUND_HALF_UP+: Round toward the nearest neighbor; + * if the neighbors are equidistant, round away from zero. + * Aliased as +:half_up+ and +:default+. + * - +ROUND_HALF_DOWN+: Round toward the nearest neighbor; + * if the neighbors are equidistant, round toward zero. + * Aliased as +:half_down+. + * - +ROUND_HALF_EVEN+ (Banker's rounding): Round toward the nearest neighbor; + * if the neighbors are equidistant, round toward the even neighbor. + * Aliased as +:half_even+ and +:banker+. + * - +ROUND_CEILING+: Round toward positive infinity. + * Aliased as +:ceiling+ and +:ceil+. + * - +ROUND_FLOOR+: Round toward negative infinity. + * Aliased as +:floor:+. * */ static VALUE @@ -640,25 +944,54 @@ GetPrecisionInt(VALUE v) return n; } +static VALUE +BigDecimal_wrap_struct(VALUE obj, Real *vp) +{ + assert(is_kind_of_BigDecimal(obj)); + assert(vp != NULL); + + if (vp->obj == obj && RTYPEDDATA_DATA(obj) == vp) + return obj; + + assert(RTYPEDDATA_DATA(obj) == NULL); + assert(vp->obj == 0); + + RTYPEDDATA_DATA(obj) = vp; + vp->obj = obj; + RB_OBJ_FREEZE(obj); + return obj; +} + VP_EXPORT Real * -VpNewRbClass(size_t mx, const char *str, VALUE klass) +VpNewRbClass(size_t mx, const char *str, VALUE klass, bool strict_p, bool raise_exception) { VALUE obj = TypedData_Wrap_Struct(klass, &BigDecimal_data_type, 0); - Real *pv = VpAlloc(mx, str, 1, 1); - RTYPEDDATA_DATA(obj) = pv; - pv->obj = obj; - RB_OBJ_FREEZE(obj); + Real *pv = VpAlloc(mx, str, strict_p, raise_exception); + if (!pv) + return NULL; + BigDecimal_wrap_struct(obj, pv); return pv; } VP_EXPORT Real * -VpCreateRbObject(size_t mx, const char *str) +VpCreateRbObject(size_t mx, const char *str, bool raise_exception) { - return VpNewRbClass(mx, str, rb_cBigDecimal); + return VpNewRbClass(mx, str, rb_cBigDecimal, true, raise_exception); } -#define VpAllocReal(prec) (Real *)VpMemAlloc(offsetof(Real, frac) + (prec) * sizeof(BDIGIT)) -#define VpReallocReal(ptr, prec) (Real *)VpMemRealloc((ptr), offsetof(Real, frac) + (prec) * sizeof(BDIGIT)) +#define VpAllocReal(prec) (Real *)VpMemAlloc(offsetof(Real, frac) + (prec) * sizeof(DECDIG)) + +static Real * +VpReallocReal(Real *pv, size_t prec) +{ + VALUE obj = pv ? pv->obj : 0; + Real *new_pv = (Real *)VpMemRealloc(pv, offsetof(Real, frac) + prec * sizeof(DECDIG)); + if (obj) { + new_pv->obj = 0; + BigDecimal_wrap_struct(obj, new_pv); + } + return new_pv; +} static Real * VpCopy(Real *pv, Real const* const x) @@ -671,7 +1004,7 @@ VpCopy(Real *pv, Real const* const x) pv->exponent = x->exponent; pv->sign = x->sign; pv->flag = x->flag; - MEMCPY(pv->frac, x->frac, BDIGIT, pv->MaxPrec); + MEMCPY(pv->frac, x->frac, DECDIG, pv->MaxPrec); return pv; } @@ -710,15 +1043,7 @@ BigDecimal_IsFinite(VALUE self) static void BigDecimal_check_num(Real *p) { - if (VpIsNaN(p)) { - VpException(VP_EXCEPTION_NaN, "Computation results to 'NaN'(Not a Number)", 1); - } - else if (VpIsPosInf(p)) { - VpException(VP_EXCEPTION_INFINITY, "Computation results to 'Infinity'", 1); - } - else if (VpIsNegInf(p)) { - VpException(VP_EXCEPTION_INFINITY, "Computation results to '-Infinity'", 1); - } + VpCheckException(p, true); } static VALUE BigDecimal_split(VALUE self); @@ -741,7 +1066,7 @@ BigDecimal_to_i(VALUE self) if (e <= 0) return INT2FIX(0); nf = VpBaseFig(); if (e <= nf) { - return LONG2NUM((long)(VpGetSign(p) * (BDIGIT_DBL_SIGNED)p->frac[0])); + return LONG2NUM((long)(VpGetSign(p) * (DECDIG_DBL_SIGNED)p->frac[0])); } else { VALUE a = BigDecimal_split(self); @@ -875,8 +1200,8 @@ BigDecimal_coerce(VALUE self, VALUE other) Real *b; if (RB_TYPE_P(other, T_FLOAT)) { - GUARD_OBJ(b, GetVpValueWithPrec(other, DBL_DIG+1, 1)); - obj = rb_assoc_new(ToValue(b), self); + GUARD_OBJ(b, GetVpValueWithPrec(other, 0, 1)); + obj = rb_assoc_new(VpCheckGetValue(b), self); } else { if (RB_TYPE_P(other, T_RATIONAL)) { @@ -893,12 +1218,14 @@ BigDecimal_coerce(VALUE self, VALUE other) } /* - * call-seq: - * +big_decimal -> big_decimal + * call-seq: + * +big_decimal -> self + * + * Returns +self+: * - * Return self. + * +BigDecimal(5) # => 0.5e1 + * +BigDecimal(-5) # => -0.5e1 * - * +BigDecimal('5') #=> 0.5e1 */ static VALUE @@ -908,22 +1235,21 @@ BigDecimal_uplus(VALUE self) } /* - * Document-method: BigDecimal#add - * Document-method: BigDecimal#+ + * call-seq: + * self + value -> bigdecimal * - * call-seq: - * add(value, digits) + * Returns the \BigDecimal sum of +self+ and +value+: * - * Add the specified value. + * b = BigDecimal('111111.111') # => 0.111111111e6 + * b + 2 # => 0.111113111e6 + * b + 2.0 # => 0.111113111e6 + * b + Rational(2, 1) # => 0.111113111e6 + * b + Complex(2, 0) # => (0.111113111e6+0i) * - * e.g. - * c = a.add(b,n) - * c = a + b + * See the {Note About Precision}[BigDecimal.html#class-BigDecimal-label-A+Note+About+Precision]. * - * digits:: If specified and less than the number of significant digits of the - * result, the result is rounded to that number of digits, according - * to BigDecimal.mode. */ + static VALUE BigDecimal_add(VALUE self, VALUE r) { @@ -933,7 +1259,7 @@ BigDecimal_add(VALUE self, VALUE r) GUARD_OBJ(a, GetVpValue(self, 1)); if (RB_TYPE_P(r, T_FLOAT)) { - b = GetVpValueWithPrec(r, DBL_DIG+1, 1); + b = GetVpValueWithPrec(r, 0, 1); } else if (RB_TYPE_P(r, T_RATIONAL)) { b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1); @@ -950,11 +1276,11 @@ BigDecimal_add(VALUE self, VALUE r) mx = GetAddSubPrec(a, b); if (mx == (size_t)-1L) { - GUARD_OBJ(c,VpCreateRbObject(VpBaseFig() + 1, "0")); + GUARD_OBJ(c, VpCreateRbObject(VpBaseFig() + 1, "0", true)); VpAddSub(c, a, b, 1); } else { - GUARD_OBJ(c, VpCreateRbObject(mx * (VpBaseFig() + 1), "0")); + GUARD_OBJ(c, VpCreateRbObject(mx * (VpBaseFig() + 1), "0", true)); if(!mx) { VpSetInf(c, VpGetSign(a)); } @@ -962,24 +1288,21 @@ BigDecimal_add(VALUE self, VALUE r) VpAddSub(c, a, b, 1); } } - return ToValue(c); + return VpCheckGetValue(c); } - /* call-seq: - * a - b -> bigdecimal - * - * Subtract the specified value. + /* call-seq: + * self - value -> bigdecimal * - * e.g. - * c = a - b + * Returns the \BigDecimal difference of +self+ and +value+: * - * The precision of the result value depends on the type of +b+. + * b = BigDecimal('333333.333') # => 0.333333333e6 + * b - 2 # => 0.333331333e6 + * b - 2.0 # => 0.333331333e6 + * b - Rational(2, 1) # => 0.333331333e6 + * b - Complex(2, 0) # => (0.333331333e6+0i) * - * If +b+ is a Float, the precision of the result is Float::DIG+1. - * - * If +b+ is a BigDecimal, the precision of the result is +b+'s precision of - * internal representation from platform. So, it's return value is platform - * dependent. + * See the {Note About Precision}[BigDecimal.html#class-BigDecimal-label-A+Note+About+Precision]. * */ static VALUE @@ -991,7 +1314,7 @@ BigDecimal_sub(VALUE self, VALUE r) GUARD_OBJ(a, GetVpValue(self,1)); if (RB_TYPE_P(r, T_FLOAT)) { - b = GetVpValueWithPrec(r, DBL_DIG+1, 1); + b = GetVpValueWithPrec(r, 0, 1); } else if (RB_TYPE_P(r, T_RATIONAL)) { b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1); @@ -1008,11 +1331,11 @@ BigDecimal_sub(VALUE self, VALUE r) mx = GetAddSubPrec(a,b); if (mx == (size_t)-1L) { - GUARD_OBJ(c,VpCreateRbObject(VpBaseFig() + 1, "0")); + GUARD_OBJ(c, VpCreateRbObject(VpBaseFig() + 1, "0", true)); VpAddSub(c, a, b, -1); } else { - GUARD_OBJ(c,VpCreateRbObject(mx *(VpBaseFig() + 1), "0")); + GUARD_OBJ(c,VpCreateRbObject(mx *(VpBaseFig() + 1), "0", true)); if (!mx) { VpSetInf(c,VpGetSign(a)); } @@ -1020,7 +1343,7 @@ BigDecimal_sub(VALUE self, VALUE r) VpAddSub(c, a, b, -1); } } - return ToValue(c); + return VpCheckGetValue(c); } static VALUE @@ -1041,7 +1364,7 @@ BigDecimalCmp(VALUE self, VALUE r,char op) break; case T_FLOAT: - GUARD_OBJ(b, GetVpValueWithPrec(r, DBL_DIG+1, 0)); + GUARD_OBJ(b, GetVpValueWithPrec(r, 0, 0)); break; case T_RATIONAL: @@ -1158,12 +1481,19 @@ BigDecimal_eq(VALUE self, VALUE r) return BigDecimalCmp(self, r, '='); } -/* call-seq: - * a < b +/* call-seq: + * self < other -> true or false + * + * Returns +true+ if +self+ is less than +other+, +false+ otherwise: * - * Returns true if a is less than b. + * b = BigDecimal('1.5') # => 0.15e1 + * b < 2 # => true + * b < 2.0 # => true + * b < Rational(2, 1) # => true + * b < 1.5 # => false + * + * Raises an exception if the comparison cannot be made. * - * Values may be coerced to perform the comparison (see ==, BigDecimal#coerce). */ static VALUE BigDecimal_lt(VALUE self, VALUE r) @@ -1171,12 +1501,20 @@ BigDecimal_lt(VALUE self, VALUE r) return BigDecimalCmp(self, r, '<'); } -/* call-seq: - * a <= b +/* call-seq: + * self <= other -> true or false + * + * Returns +true+ if +self+ is less or equal to than +other+, +false+ otherwise: + * + * b = BigDecimal('1.5') # => 0.15e1 + * b <= 2 # => true + * b <= 2.0 # => true + * b <= Rational(2, 1) # => true + * b <= 1.5 # => true + * b < 1 # => false * - * Returns true if a is less than or equal to b. + * Raises an exception if the comparison cannot be made. * - * Values may be coerced to perform the comparison (see ==, BigDecimal#coerce). */ static VALUE BigDecimal_le(VALUE self, VALUE r) @@ -1184,12 +1522,19 @@ BigDecimal_le(VALUE self, VALUE r) return BigDecimalCmp(self, r, 'L'); } -/* call-seq: - * a > b +/* call-seq: + * self > other -> true or false + * + * Returns +true+ if +self+ is greater than +other+, +false+ otherwise: + * + * b = BigDecimal('1.5') + * b > 1 # => true + * b > 1.0 # => true + * b > Rational(1, 1) # => true + * b > 2 # => false * - * Returns true if a is greater than b. + * Raises an exception if the comparison cannot be made. * - * Values may be coerced to perform the comparison (see ==, BigDecimal#coerce). */ static VALUE BigDecimal_gt(VALUE self, VALUE r) @@ -1197,12 +1542,20 @@ BigDecimal_gt(VALUE self, VALUE r) return BigDecimalCmp(self, r, '>'); } -/* call-seq: - * a >= b +/* call-seq: + * self >= other -> true or false + * + * Returns +true+ if +self+ is greater than or equal to +other+, +false+ otherwise: + * + * b = BigDecimal('1.5') + * b >= 1 # => true + * b >= 1.0 # => true + * b >= Rational(1, 1) # => true + * b >= 1.5 # => true + * b > 2 # => false * - * Returns true if a is greater than or equal to b. + * Raises an exception if the comparison cannot be made. * - * Values may be coerced to perform the comparison (see ==, BigDecimal#coerce) */ static VALUE BigDecimal_ge(VALUE self, VALUE r) @@ -1212,11 +1565,14 @@ BigDecimal_ge(VALUE self, VALUE r) /* * call-seq: - * -big_decimal -> big_decimal + * -self -> bigdecimal * - * Return the negation of self. + * Returns the \BigDecimal negation of self: + * + * b0 = BigDecimal('1.5') + * b1 = -b0 # => -0.15e1 + * b2 = -b1 # => 0.15e1 * - * -BigDecimal('5') #=> -0.5e1 */ static VALUE @@ -1225,26 +1581,11 @@ BigDecimal_neg(VALUE self) ENTER(5); Real *c, *a; GUARD_OBJ(a, GetVpValue(self, 1)); - GUARD_OBJ(c, VpCreateRbObject(a->Prec *(VpBaseFig() + 1), "0")); + GUARD_OBJ(c, VpCreateRbObject(a->Prec *(VpBaseFig() + 1), "0", true)); VpAsgn(c, a, -1); - return ToValue(c); + return VpCheckGetValue(c); } - /* - * Document-method: BigDecimal#mult - * - * call-seq: mult(value, digits) - * - * Multiply by the specified value. - * - * e.g. - * c = a.mult(b,n) - * c = a * b - * - * digits:: If specified and less than the number of significant digits of the - * result, the result is rounded to that number of digits, according - * to BigDecimal.mode. - */ static VALUE BigDecimal_mult(VALUE self, VALUE r) { @@ -1254,7 +1595,7 @@ BigDecimal_mult(VALUE self, VALUE r) GUARD_OBJ(a, GetVpValue(self, 1)); if (RB_TYPE_P(r, T_FLOAT)) { - b = GetVpValueWithPrec(r, DBL_DIG+1, 1); + b = GetVpValueWithPrec(r, 0, 1); } else if (RB_TYPE_P(r, T_RATIONAL)) { b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1); @@ -1267,52 +1608,74 @@ BigDecimal_mult(VALUE self, VALUE r) SAVE(b); mx = a->Prec + b->Prec; - GUARD_OBJ(c, VpCreateRbObject(mx *(VpBaseFig() + 1), "0")); + GUARD_OBJ(c, VpCreateRbObject(mx *(VpBaseFig() + 1), "0", true)); VpMult(c, a, b); - return ToValue(c); + return VpCheckGetValue(c); } static VALUE -BigDecimal_divide(Real **c, Real **res, Real **div, VALUE self, VALUE r) +BigDecimal_divide(VALUE self, VALUE r, Real **c, Real **res, Real **div) /* For c = self.div(r): with round operation */ { ENTER(5); Real *a, *b; + ssize_t a_prec, b_prec; size_t mx; - GUARD_OBJ(a, GetVpValue(self, 1)); - if (RB_TYPE_P(r, T_FLOAT)) { - b = GetVpValueWithPrec(r, DBL_DIG+1, 1); + TypedData_Get_Struct(self, Real, &BigDecimal_data_type, a); + SAVE(a); + + VALUE rr = r; + if (is_kind_of_BigDecimal(rr)) { + /* do nothing */ + } + else if (RB_INTEGER_TYPE_P(r)) { + rr = rb_inum_convert_to_BigDecimal(r, 0, true); + } + else if (RB_TYPE_P(r, T_FLOAT)) { + rr = rb_float_convert_to_BigDecimal(r, 0, true); } else if (RB_TYPE_P(r, T_RATIONAL)) { - b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1); - } - else { - b = GetVpValue(r, 0); + rr = rb_rational_convert_to_BigDecimal(r, a->Prec*BASE_FIG, true); } - if (!b) return DoSomeOne(self, r, '/'); - SAVE(b); + if (!is_kind_of_BigDecimal(rr)) { + return DoSomeOne(self, r, '/'); + } + TypedData_Get_Struct(rr, Real, &BigDecimal_data_type, b); + SAVE(b); *div = b; - mx = a->Prec + vabs(a->exponent); - if (mx < b->Prec + vabs(b->exponent)) mx = b->Prec + vabs(b->exponent); - mx++; /* NOTE: An additional digit is needed for the compatibility to - the version 1.2.1 and the former. */ - mx = (mx + 1) * VpBaseFig(); - GUARD_OBJ((*c), VpCreateRbObject(mx, "#0")); - GUARD_OBJ((*res), VpCreateRbObject((mx+1) * 2 +(VpBaseFig() + 1), "#0")); + + mx = (a->Prec > b->Prec) ? a->Prec : b->Prec; + mx *= BASE_FIG; + + BigDecimal_count_precision_and_scale(self, &a_prec, NULL); + BigDecimal_count_precision_and_scale(rr, &b_prec, NULL); + mx = (a_prec > b_prec) ? a_prec : b_prec; + + if (2*BIGDECIMAL_DOUBLE_FIGURES > mx) + mx = 2*BIGDECIMAL_DOUBLE_FIGURES; + + GUARD_OBJ((*c), VpCreateRbObject(mx + 2*BASE_FIG, "#0", true)); + GUARD_OBJ((*res), VpCreateRbObject(mx*2 + 2*BASE_FIG, "#0", true)); VpDivd(*c, *res, a, b); + return Qnil; } +static VALUE BigDecimal_DoDivmod(VALUE self, VALUE r, Real **div, Real **mod); + /* call-seq: - * a / b -> bigdecimal - * quo(value) -> bigdecimal + * a / b -> bigdecimal * * Divide by the specified value. * + * The result precision will be the precision of the larger operand, + * but its minimum is 2*Float::DIG. + * * See BigDecimal#div. + * See BigDecimal#quo. */ static VALUE BigDecimal_div(VALUE self, VALUE r) @@ -1320,7 +1683,7 @@ BigDecimal_div(VALUE self, VALUE r) { ENTER(5); Real *c=NULL, *res=NULL, *div = NULL; - r = BigDecimal_divide(&c, &res, &div, self, r); + r = BigDecimal_divide(self, r, &c, &res, &div); if (!NIL_P(r)) return r; /* coerced by other */ SAVE(c); SAVE(res); SAVE(div); /* a/b = c + r/b */ @@ -1329,9 +1692,48 @@ BigDecimal_div(VALUE self, VALUE r) */ /* Round */ if (VpHasVal(div)) { /* frac[0] must be zero for NaN,INF,Zero */ - VpInternalRound(c, 0, c->frac[c->Prec-1], (BDIGIT)(VpBaseVal() * (BDIGIT_DBL)res->frac[0] / div->frac[0])); + VpInternalRound(c, 0, c->frac[c->Prec-1], (DECDIG)(VpBaseVal() * (DECDIG_DBL)res->frac[0] / div->frac[0])); + } + return VpCheckGetValue(c); +} + +static VALUE BigDecimal_round(int argc, VALUE *argv, VALUE self); + +/* call-seq: + * quo(value) -> bigdecimal + * quo(value, digits) -> bigdecimal + * + * Divide by the specified value. + * + * digits:: If specified and less than the number of significant digits of + * the result, the result is rounded to the given number of digits, + * according to the rounding mode indicated by BigDecimal.mode. + * + * If digits is 0 or omitted, the result is the same as for the + * / operator. + * + * See BigDecimal#/. + * See BigDecimal#div. + */ +static VALUE +BigDecimal_quo(int argc, VALUE *argv, VALUE self) +{ + VALUE value, digits, result; + SIGNED_VALUE n = -1; + + argc = rb_scan_args(argc, argv, "11", &value, &digits); + if (argc > 1) { + n = GetPrecisionInt(digits); + } + + if (n > 0) { + result = BigDecimal_div2(self, value, digits); + } + else { + result = BigDecimal_div(self, value); } - return ToValue(c); + + return result; } /* @@ -1344,77 +1746,104 @@ BigDecimal_DoDivmod(VALUE self, VALUE r, Real **div, Real **mod) ENTER(8); Real *c=NULL, *d=NULL, *res=NULL; Real *a, *b; + ssize_t a_prec, b_prec; size_t mx; - GUARD_OBJ(a, GetVpValue(self, 1)); - if (RB_TYPE_P(r, T_FLOAT)) { - b = GetVpValueWithPrec(r, DBL_DIG+1, 1); + TypedData_Get_Struct(self, Real, &BigDecimal_data_type, a); + SAVE(a); + + VALUE rr = r; + if (is_kind_of_BigDecimal(rr)) { + /* do nothing */ + } + else if (RB_INTEGER_TYPE_P(r)) { + rr = rb_inum_convert_to_BigDecimal(r, 0, true); + } + else if (RB_TYPE_P(r, T_FLOAT)) { + rr = rb_float_convert_to_BigDecimal(r, 0, true); } else if (RB_TYPE_P(r, T_RATIONAL)) { - b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1); + rr = rb_rational_convert_to_BigDecimal(r, a->Prec*BASE_FIG, true); } - else { - b = GetVpValue(r, 0); + + if (!is_kind_of_BigDecimal(rr)) { + return Qfalse; } - if (!b) return Qfalse; + TypedData_Get_Struct(rr, Real, &BigDecimal_data_type, b); SAVE(b); if (VpIsNaN(a) || VpIsNaN(b)) goto NaN; if (VpIsInf(a) && VpIsInf(b)) goto NaN; if (VpIsZero(b)) { - rb_raise(rb_eZeroDivError, "divided by 0"); + rb_raise(rb_eZeroDivError, "divided by 0"); } if (VpIsInf(a)) { - GUARD_OBJ(d, VpCreateRbObject(1, "0")); - VpSetInf(d, (SIGNED_VALUE)(VpGetSign(a) == VpGetSign(b) ? 1 : -1)); - GUARD_OBJ(c, VpCreateRbObject(1, "NaN")); - *div = d; - *mod = c; - return Qtrue; + if (VpGetSign(a) == VpGetSign(b)) { + VALUE inf = BigDecimal_positive_infinity(); + TypedData_Get_Struct(inf, Real, &BigDecimal_data_type, *div); + } + else { + VALUE inf = BigDecimal_negative_infinity(); + TypedData_Get_Struct(inf, Real, &BigDecimal_data_type, *div); + } + VALUE nan = BigDecimal_nan(); + TypedData_Get_Struct(nan, Real, &BigDecimal_data_type, *mod); + return Qtrue; } if (VpIsInf(b)) { - GUARD_OBJ(d, VpCreateRbObject(1, "0")); - *div = d; - *mod = a; - return Qtrue; + VALUE zero = BigDecimal_positive_zero(); + TypedData_Get_Struct(zero, Real, &BigDecimal_data_type, *div); + *mod = a; + return Qtrue; } if (VpIsZero(a)) { - GUARD_OBJ(c, VpCreateRbObject(1, "0")); - GUARD_OBJ(d, VpCreateRbObject(1, "0")); - *div = d; - *mod = c; - return Qtrue; - } - - mx = a->Prec + vabs(a->exponent); - if (mxPrec + vabs(b->exponent)) mx = b->Prec + vabs(b->exponent); - mx = (mx + 1) * VpBaseFig(); - GUARD_OBJ(c, VpCreateRbObject(mx, "0")); - GUARD_OBJ(res, VpCreateRbObject((mx+1) * 2 +(VpBaseFig() + 1), "#0")); + VALUE zero = BigDecimal_positive_zero(); + TypedData_Get_Struct(zero, Real, &BigDecimal_data_type, *div); + TypedData_Get_Struct(zero, Real, &BigDecimal_data_type, *mod); + return Qtrue; + } + + BigDecimal_count_precision_and_scale(self, &a_prec, NULL); + BigDecimal_count_precision_and_scale(rr, &b_prec, NULL); + + mx = (a_prec > b_prec) ? a_prec : b_prec; + if (2*BIGDECIMAL_DOUBLE_FIGURES > mx) + mx = 2*BIGDECIMAL_DOUBLE_FIGURES; + + GUARD_OBJ(c, VpCreateRbObject(mx + 2*BASE_FIG, "0", true)); + GUARD_OBJ(res, VpCreateRbObject(mx*2 + 2*BASE_FIG, "#0", true)); VpDivd(c, res, a, b); - mx = c->Prec * (VpBaseFig() + 1); - GUARD_OBJ(d, VpCreateRbObject(mx, "0")); + + mx = c->Prec * BASE_FIG; + GUARD_OBJ(d, VpCreateRbObject(mx, "0", true)); VpActiveRound(d, c, VP_ROUND_DOWN, 0); + VpMult(res, d, b); VpAddSub(c, a, res, -1); + if (!VpIsZero(c) && (VpGetSign(a) * VpGetSign(b) < 0)) { - VpAddSub(res, d, VpOne(), -1); - GUARD_OBJ(d, VpCreateRbObject(GetAddSubPrec(c, b)*(VpBaseFig() + 1), "0")); - VpAddSub(d, c, b, 1); - *div = res; - *mod = d; - } else { - *div = d; - *mod = c; + /* result adjustment for negative case */ + res = VpReallocReal(res, d->MaxPrec); + res->MaxPrec = d->MaxPrec; + VpAddSub(res, d, VpOne(), -1); + GUARD_OBJ(d, VpCreateRbObject(GetAddSubPrec(c, b) * 2*BASE_FIG, "0", true)); + VpAddSub(d, c, b, 1); + *div = res; + *mod = d; + } + else { + *div = d; + *mod = c; } return Qtrue; -NaN: - GUARD_OBJ(c, VpCreateRbObject(1, "NaN")); - GUARD_OBJ(d, VpCreateRbObject(1, "NaN")); - *div = d; - *mod = c; + NaN: + { + VALUE nan = BigDecimal_nan(); + TypedData_Get_Struct(nan, Real, &BigDecimal_data_type, *div); + TypedData_Get_Struct(nan, Real, &BigDecimal_data_type, *mod); + } return Qtrue; } @@ -1434,7 +1863,7 @@ BigDecimal_mod(VALUE self, VALUE r) /* %: a%b = a - (a.to_f/b).floor * b */ if (BigDecimal_DoDivmod(self, r, &div, &mod)) { SAVE(div); SAVE(mod); - return ToValue(mod); + return VpCheckGetValue(mod); } return DoSomeOne(self, r, '%'); } @@ -1449,7 +1878,7 @@ BigDecimal_divremain(VALUE self, VALUE r, Real **dv, Real **rv) GUARD_OBJ(a, GetVpValue(self, 1)); if (RB_TYPE_P(r, T_FLOAT)) { - b = GetVpValueWithPrec(r, DBL_DIG+1, 1); + b = GetVpValueWithPrec(r, 0, 1); } else if (RB_TYPE_P(r, T_RATIONAL)) { b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1); @@ -1462,17 +1891,17 @@ BigDecimal_divremain(VALUE self, VALUE r, Real **dv, Real **rv) SAVE(b); mx = (a->MaxPrec + b->MaxPrec) *VpBaseFig(); - GUARD_OBJ(c, VpCreateRbObject(mx, "0")); - GUARD_OBJ(res, VpCreateRbObject((mx+1) * 2 + (VpBaseFig() + 1), "#0")); - GUARD_OBJ(rr, VpCreateRbObject((mx+1) * 2 + (VpBaseFig() + 1), "#0")); - GUARD_OBJ(ff, VpCreateRbObject((mx+1) * 2 + (VpBaseFig() + 1), "#0")); + GUARD_OBJ(c, VpCreateRbObject(mx, "0", true)); + GUARD_OBJ(res, VpCreateRbObject((mx+1) * 2 + (VpBaseFig() + 1), "#0", true)); + GUARD_OBJ(rr, VpCreateRbObject((mx+1) * 2 + (VpBaseFig() + 1), "#0", true)); + GUARD_OBJ(ff, VpCreateRbObject((mx+1) * 2 + (VpBaseFig() + 1), "#0", true)); VpDivd(c, res, a, b); mx = c->Prec *(VpBaseFig() + 1); - GUARD_OBJ(d, VpCreateRbObject(mx, "0")); - GUARD_OBJ(f, VpCreateRbObject(mx, "0")); + GUARD_OBJ(d, VpCreateRbObject(mx, "0", true)); + GUARD_OBJ(f, VpCreateRbObject(mx, "0", true)); VpActiveRound(d, c, VP_ROUND_DOWN, 0); /* 0: round off */ @@ -1499,7 +1928,7 @@ BigDecimal_remainder(VALUE self, VALUE r) /* remainder */ Real *d, *rv = 0; f = BigDecimal_divremain(self, r, &d, &rv); if (!NIL_P(f)) return f; - return ToValue(rv); + return VpCheckGetValue(rv); } /* call-seq: @@ -1532,13 +1961,14 @@ BigDecimal_divmod(VALUE self, VALUE r) if (BigDecimal_DoDivmod(self, r, &div, &mod)) { SAVE(div); SAVE(mod); - return rb_assoc_new(ToValue(div), ToValue(mod)); + return rb_assoc_new(VpCheckGetValue(div), VpCheckGetValue(mod)); } return DoSomeOne(self,r,rb_intern("divmod")); } /* - * See BigDecimal#quo + * Do the same manner as Float#div when n is nil. + * Do the same manner as BigDecimal#quo when n is 0. */ static inline VALUE BigDecimal_div2(VALUE self, VALUE b, VALUE n) @@ -1550,7 +1980,7 @@ BigDecimal_div2(VALUE self, VALUE b, VALUE n) Real *div = NULL; Real *mod; if (BigDecimal_DoDivmod(self, b, &div, &mod)) { - return BigDecimal_to_i(ToValue(div)); + return BigDecimal_to_i(VpCheckGetValue(div)); } return DoSomeOne(self, b, rb_intern("div")); } @@ -1564,18 +1994,25 @@ BigDecimal_div2(VALUE self, VALUE b, VALUE n) Real *res = NULL; Real *av = NULL, *bv = NULL, *cv = NULL; size_t mx = ix + VpBaseFig()*2; + size_t b_prec = ix; size_t pl = VpSetPrecLimit(0); - GUARD_OBJ(cv, VpCreateRbObject(mx + VpBaseFig(), "0")); + GUARD_OBJ(cv, VpCreateRbObject(mx + VpBaseFig(), "0", true)); GUARD_OBJ(av, GetVpValue(self, 1)); - GUARD_OBJ(bv, GetVpValue(b, 1)); + /* TODO: I want to refactor this precision control for a float value later + * by introducing an implicit conversion function instead of + * GetVpValueWithPrec. */ + if (RB_FLOAT_TYPE_P(b) && b_prec > BIGDECIMAL_DOUBLE_FIGURES) { + b_prec = BIGDECIMAL_DOUBLE_FIGURES; + } + GUARD_OBJ(bv, GetVpValueWithPrec(b, b_prec, 1)); mx = av->Prec + bv->Prec + 2; if (mx <= cv->MaxPrec) mx = cv->MaxPrec + 1; - GUARD_OBJ(res, VpCreateRbObject((mx * 2 + 2)*VpBaseFig(), "#0")); + GUARD_OBJ(res, VpCreateRbObject((mx * 2 + 2)*VpBaseFig(), "#0", true)); VpDivd(cv, res, av, bv); VpSetPrecLimit(pl); VpLeftRound(cv, VpGetRoundMode(), ix); - return ToValue(cv); + return VpCheckGetValue(cv); } } @@ -1583,6 +2020,7 @@ BigDecimal_div2(VALUE self, VALUE b, VALUE n) * Document-method: BigDecimal#div * * call-seq: + * div(value) -> integer * div(value, digits) -> bigdecimal or integer * * Divide by the specified value. @@ -1597,6 +2035,9 @@ BigDecimal_div2(VALUE self, VALUE b, VALUE n) * If digits is not specified, the result is an integer, * by analogy with Float#div; see also BigDecimal#divmod. * + * See BigDecimal#/. + * See BigDecimal#quo. + * * Examples: * * a = BigDecimal("4") @@ -1620,6 +2061,31 @@ BigDecimal_div3(int argc, VALUE *argv, VALUE self) return BigDecimal_div2(self, b, n); } + /* + * call-seq: + * add(value, ndigits) -> new_bigdecimal + * + * Returns the \BigDecimal sum of +self+ and +value+ + * with a precision of +ndigits+ decimal digits. + * + * When +ndigits+ is less than the number of significant digits + * in the sum, the sum is rounded to that number of digits, + * according to the current rounding mode; see BigDecimal.mode. + * + * Examples: + * + * # Set the rounding mode. + * BigDecimal.mode(BigDecimal::ROUND_MODE, :half_up) + * b = BigDecimal('111111.111') + * b.add(1, 0) # => 0.111112111e6 + * b.add(1, 3) # => 0.111e6 + * b.add(1, 6) # => 0.111112e6 + * b.add(1, 15) # => 0.111112111e6 + * b.add(1.0, 15) # => 0.111112111e6 + * b.add(Rational(1, 1), 15) # => 0.111112111e6 + * + */ + static VALUE BigDecimal_add2(VALUE self, VALUE b, VALUE n) { @@ -1633,7 +2099,7 @@ BigDecimal_add2(VALUE self, VALUE b, VALUE n) VpSetPrecLimit(pl); GUARD_OBJ(cv, GetVpValue(c, 1)); VpLeftRound(cv, VpGetRoundMode(), mx); - return ToValue(cv); + return VpCheckGetValue(cv); } } @@ -1663,10 +2129,35 @@ BigDecimal_sub2(VALUE self, VALUE b, VALUE n) VpSetPrecLimit(pl); GUARD_OBJ(cv, GetVpValue(c, 1)); VpLeftRound(cv, VpGetRoundMode(), mx); - return ToValue(cv); + return VpCheckGetValue(cv); } } + /* + * call-seq: + * mult(other, ndigits) -> bigdecimal + * + * Returns the \BigDecimal product of +self+ and +value+ + * with a precision of +ndigits+ decimal digits. + * + * When +ndigits+ is less than the number of significant digits + * in the sum, the sum is rounded to that number of digits, + * according to the current rounding mode; see BigDecimal.mode. + * + * Examples: + * + * # Set the rounding mode. + * BigDecimal.mode(BigDecimal::ROUND_MODE, :half_up) + * b = BigDecimal('555555.555') + * b.mult(3, 0) # => 0.1666666665e7 + * b.mult(3, 3) # => 0.167e7 + * b.mult(3, 6) # => 0.166667e7 + * b.mult(3, 15) # => 0.1666666665e7 + * b.mult(3.0, 0) # => 0.1666666665e7 + * b.mult(Rational(3, 1), 0) # => 0.1666666665e7 + * b.mult(Complex(3, 0), 0) # => (0.1666666665e7+0.0i) + * + */ static VALUE BigDecimal_mult2(VALUE self, VALUE b, VALUE n) @@ -1681,18 +2172,19 @@ BigDecimal_mult2(VALUE self, VALUE b, VALUE n) VpSetPrecLimit(pl); GUARD_OBJ(cv, GetVpValue(c, 1)); VpLeftRound(cv, VpGetRoundMode(), mx); - return ToValue(cv); + return VpCheckGetValue(cv); } } /* * call-seq: - * big_decimal.abs -> big_decimal + * abs -> bigdecimal + * + * Returns the \BigDecimal absolute value of +self+: * - * Returns the absolute value, as a BigDecimal. + * BigDecimal('5').abs # => 0.5e1 + * BigDecimal('-3').abs # => 0.3e1 * - * BigDecimal('5').abs #=> 0.5e1 - * BigDecimal('-3').abs #=> 0.3e1 */ static VALUE @@ -1704,10 +2196,10 @@ BigDecimal_abs(VALUE self) GUARD_OBJ(a, GetVpValue(self, 1)); mx = a->Prec *(VpBaseFig() + 1); - GUARD_OBJ(c, VpCreateRbObject(mx, "0")); + GUARD_OBJ(c, VpCreateRbObject(mx, "0", true)); VpAsgn(c, a, 1); VpChangeSign(c, 1); - return ToValue(c); + return VpCheckGetValue(c); } /* call-seq: @@ -1729,9 +2221,9 @@ BigDecimal_sqrt(VALUE self, VALUE nFig) n = GetPrecisionInt(nFig) + VpDblFig() + BASE_FIG; if (mx <= n) mx = n; - GUARD_OBJ(c, VpCreateRbObject(mx, "0")); + GUARD_OBJ(c, VpCreateRbObject(mx, "0", true)); VpSqrt(c, a); - return ToValue(c); + return VpCheckGetValue(c); } /* Return the integer part of the number, as a BigDecimal. @@ -1745,9 +2237,9 @@ BigDecimal_fix(VALUE self) GUARD_OBJ(a, GetVpValue(self, 1)); mx = a->Prec *(VpBaseFig() + 1); - GUARD_OBJ(c, VpCreateRbObject(mx, "0")); + GUARD_OBJ(c, VpCreateRbObject(mx, "0", true)); VpActiveRound(c, a, VP_ROUND_DOWN, 0); /* 0: round off */ - return ToValue(c); + return VpCheckGetValue(c); } /* call-seq: @@ -1767,10 +2259,10 @@ BigDecimal_fix(VALUE self) * more than that many digits. * * If n is specified and negative, at least that many digits to the left of the - * decimal point will be 0 in the result. + * decimal point will be 0 in the result, and return value will be an Integer. * * BigDecimal('3.14159').round(3) #=> 3.142 - * BigDecimal('13345.234').round(-2) #=> 13300.0 + * BigDecimal('13345.234').round(-2) #=> 13300 * * The value of the optional mode argument can be used to determine how * rounding is performed; see BigDecimal.mode. @@ -1783,6 +2275,7 @@ BigDecimal_round(int argc, VALUE *argv, VALUE self) int iLoc = 0; VALUE vLoc; VALUE vRound; + int round_to_int = 0; size_t mx, pl; unsigned short sw = VpGetRoundMode(); @@ -1790,6 +2283,7 @@ BigDecimal_round(int argc, VALUE *argv, VALUE self) switch (rb_scan_args(argc, argv, "02", &vLoc, &vRound)) { case 0: iLoc = 0; + round_to_int = 1; break; case 1: if (RB_TYPE_P(vLoc, T_HASH)) { @@ -1797,6 +2291,7 @@ BigDecimal_round(int argc, VALUE *argv, VALUE self) } else { iLoc = NUM2INT(vLoc); + if (iLoc < 1) round_to_int = 1; } break; case 2: @@ -1815,13 +2310,13 @@ BigDecimal_round(int argc, VALUE *argv, VALUE self) pl = VpSetPrecLimit(0); GUARD_OBJ(a, GetVpValue(self, 1)); mx = a->Prec * (VpBaseFig() + 1); - GUARD_OBJ(c, VpCreateRbObject(mx, "0")); + GUARD_OBJ(c, VpCreateRbObject(mx, "0", true)); VpSetPrecLimit(pl); VpActiveRound(c, a, sw, iLoc); - if (argc == 0) { - return BigDecimal_to_i(ToValue(c)); + if (round_to_int) { + return BigDecimal_to_i(VpCheckGetValue(c)); } - return ToValue(c); + return VpCheckGetValue(c); } /* call-seq: @@ -1861,13 +2356,13 @@ BigDecimal_truncate(int argc, VALUE *argv, VALUE self) GUARD_OBJ(a, GetVpValue(self, 1)); mx = a->Prec * (VpBaseFig() + 1); - GUARD_OBJ(c, VpCreateRbObject(mx, "0")); + GUARD_OBJ(c, VpCreateRbObject(mx, "0", true)); VpSetPrecLimit(pl); VpActiveRound(c, a, VP_ROUND_DOWN, iLoc); /* 0: truncate */ if (argc == 0) { - return BigDecimal_to_i(ToValue(c)); + return BigDecimal_to_i(VpCheckGetValue(c)); } - return ToValue(c); + return VpCheckGetValue(c); } /* Return the fractional part of the number, as a BigDecimal. @@ -1881,9 +2376,9 @@ BigDecimal_frac(VALUE self) GUARD_OBJ(a, GetVpValue(self, 1)); mx = a->Prec * (VpBaseFig() + 1); - GUARD_OBJ(c, VpCreateRbObject(mx, "0")); + GUARD_OBJ(c, VpCreateRbObject(mx, "0", true)); VpFrac(c, a); - return ToValue(c); + return VpCheckGetValue(c); } /* call-seq: @@ -1921,16 +2416,16 @@ BigDecimal_floor(int argc, VALUE *argv, VALUE self) GUARD_OBJ(a, GetVpValue(self, 1)); mx = a->Prec * (VpBaseFig() + 1); - GUARD_OBJ(c, VpCreateRbObject(mx, "0")); + GUARD_OBJ(c, VpCreateRbObject(mx, "0", true)); VpSetPrecLimit(pl); VpActiveRound(c, a, VP_ROUND_FLOOR, iLoc); #ifdef BIGDECIMAL_DEBUG VPrint(stderr, "floor: c=%\n", c); #endif if (argc == 0) { - return BigDecimal_to_i(ToValue(c)); + return BigDecimal_to_i(VpCheckGetValue(c)); } - return ToValue(c); + return VpCheckGetValue(c); } /* call-seq: @@ -1967,13 +2462,13 @@ BigDecimal_ceil(int argc, VALUE *argv, VALUE self) GUARD_OBJ(a, GetVpValue(self, 1)); mx = a->Prec * (VpBaseFig() + 1); - GUARD_OBJ(c, VpCreateRbObject(mx, "0")); + GUARD_OBJ(c, VpCreateRbObject(mx, "0", true)); VpSetPrecLimit(pl); VpActiveRound(c, a, VP_ROUND_CEIL, iLoc); if (argc == 0) { - return BigDecimal_to_i(ToValue(c)); + return BigDecimal_to_i(VpCheckGetValue(c)); } - return ToValue(c); + return VpCheckGetValue(c); } /* call-seq: @@ -2067,7 +2562,7 @@ BigDecimal_to_s(int argc, VALUE *argv, VALUE self) nc += (nc + mc - 1) / mc + 1; } - str = rb_str_new(0, nc); + str = rb_usascii_str_new(0, nc); psz = RSTRING_PTR(str); if (fmt) { @@ -2132,7 +2627,7 @@ BigDecimal_split(VALUE self) rb_ary_push(obj, str); rb_str_resize(str, strlen(psz1)); rb_ary_push(obj, INT2FIX(10)); - rb_ary_push(obj, INT2NUM(e)); + rb_ary_push(obj, SSIZET2NUM(e)); return obj; } @@ -2145,7 +2640,7 @@ static VALUE BigDecimal_exponent(VALUE self) { ssize_t e = VpExponent10(GetVpValue(self, 1)); - return INT2NUM(e); + return SSIZET2NUM(e); } /* Returns a string representation of self. @@ -2269,13 +2764,13 @@ is_even(VALUE x) } static VALUE -rmpd_power_by_big_decimal(Real const* x, Real const* exp, ssize_t const n) +bigdecimal_power_by_bigdecimal(Real const* x, Real const* exp, ssize_t const n) { VALUE log_x, multiplied, y; volatile VALUE obj = exp->obj; if (VpIsZero(exp)) { - return ToValue(VpCreateRbObject(n, "1")); + return VpCheckGetValue(VpCreateRbObject(n, "1", true)); } log_x = BigMath_log(x->obj, SSIZET2NUM(n+1)); @@ -2313,10 +2808,10 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self) n = NIL_P(prec) ? (ssize_t)(x->Prec*VpBaseFig()) : NUM2SSIZET(prec); if (VpIsNaN(x)) { - y = VpCreateRbObject(n, "0"); + y = VpCreateRbObject(n, "0", true); RB_GC_GUARD(y->obj); VpSetNaN(y); - return ToValue(y); + return VpCheckGetValue(y); } retry: @@ -2338,7 +2833,10 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self) } goto retry; } - exp = GetVpValueWithPrec(vexp, DBL_DIG+1, 1); + if (NIL_P(prec)) { + n += BIGDECIMAL_DOUBLE_FIGURES; + } + exp = GetVpValueWithPrec(vexp, 0, 1); break; case T_RATIONAL: @@ -2353,6 +2851,9 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self) goto retry; } exp = GetVpValueWithPrec(vexp, n, 1); + if (NIL_P(prec)) { + n += n; + } break; case T_DATA: @@ -2363,6 +2864,10 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self) vexp = BigDecimal_to_i(vexp); goto retry; } + if (NIL_P(prec)) { + GUARD_OBJ(y, GetVpValue(vexp, 1)); + n += y->Prec*VpBaseFig(); + } exp = DATA_PTR(vexp); break; } @@ -2375,7 +2880,7 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self) if (VpIsZero(x)) { if (is_negative(vexp)) { - y = VpCreateRbObject(n, "#0"); + y = VpCreateRbObject(n, "#0", true); RB_GC_GUARD(y->obj); if (BIGDECIMAL_NEGATIVE_P(x)) { if (is_integer(vexp)) { @@ -2397,18 +2902,18 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self) /* (+0) ** (-num) -> Infinity */ VpSetPosInf(y); } - return ToValue(y); + return VpCheckGetValue(y); } else if (is_zero(vexp)) { - return ToValue(VpCreateRbObject(n, "1")); + return VpCheckGetValue(VpCreateRbObject(n, "1", true)); } else { - return ToValue(VpCreateRbObject(n, "0")); + return VpCheckGetValue(VpCreateRbObject(n, "0", true)); } } if (is_zero(vexp)) { - return ToValue(VpCreateRbObject(n, "1")); + return VpCheckGetValue(VpCreateRbObject(n, "1", true)); } else if (is_one(vexp)) { return self; @@ -2420,24 +2925,24 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self) if (is_integer(vexp)) { if (is_even(vexp)) { /* (-Infinity) ** (-even_integer) -> +0 */ - return ToValue(VpCreateRbObject(n, "0")); + return VpCheckGetValue(VpCreateRbObject(n, "0", true)); } else { /* (-Infinity) ** (-odd_integer) -> -0 */ - return ToValue(VpCreateRbObject(n, "-0")); + return VpCheckGetValue(VpCreateRbObject(n, "-0", true)); } } else { /* (-Infinity) ** (-non_integer) -> -0 */ - return ToValue(VpCreateRbObject(n, "-0")); + return VpCheckGetValue(VpCreateRbObject(n, "-0", true)); } } else { - return ToValue(VpCreateRbObject(n, "0")); + return VpCheckGetValue(VpCreateRbObject(n, "0", true)); } } else { - y = VpCreateRbObject(n, "0"); + y = VpCreateRbObject(n, "0", true); if (BIGDECIMAL_NEGATIVE_P(x)) { if (is_integer(vexp)) { if (is_even(vexp)) { @@ -2456,52 +2961,52 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self) else { VpSetPosInf(y); } - return ToValue(y); + return VpCheckGetValue(y); } } if (exp != NULL) { - return rmpd_power_by_big_decimal(x, exp, n); + return bigdecimal_power_by_bigdecimal(x, exp, n); } else if (RB_TYPE_P(vexp, T_BIGNUM)) { VALUE abs_value = BigDecimal_abs(self); if (is_one(abs_value)) { - return ToValue(VpCreateRbObject(n, "1")); + return VpCheckGetValue(VpCreateRbObject(n, "1", true)); } else if (RTEST(rb_funcall(abs_value, '<', 1, INT2FIX(1)))) { if (is_negative(vexp)) { - y = VpCreateRbObject(n, "0"); + y = VpCreateRbObject(n, "0", true); if (is_even(vexp)) { VpSetInf(y, VpGetSign(x)); } else { VpSetInf(y, -VpGetSign(x)); } - return ToValue(y); + return VpCheckGetValue(y); } else if (BIGDECIMAL_NEGATIVE_P(x) && is_even(vexp)) { - return ToValue(VpCreateRbObject(n, "-0")); + return VpCheckGetValue(VpCreateRbObject(n, "-0", true)); } else { - return ToValue(VpCreateRbObject(n, "0")); + return VpCheckGetValue(VpCreateRbObject(n, "0", true)); } } else { if (is_positive(vexp)) { - y = VpCreateRbObject(n, "0"); + y = VpCreateRbObject(n, "0", true); if (is_even(vexp)) { VpSetInf(y, VpGetSign(x)); } else { VpSetInf(y, -VpGetSign(x)); } - return ToValue(y); + return VpCheckGetValue(y); } else if (BIGDECIMAL_NEGATIVE_P(x) && is_even(vexp)) { - return ToValue(VpCreateRbObject(n, "-0")); + return VpCheckGetValue(VpCreateRbObject(n, "-0", true)); } else { - return ToValue(VpCreateRbObject(n, "0")); + return VpCheckGetValue(VpCreateRbObject(n, "0", true)); } } } @@ -2513,24 +3018,30 @@ BigDecimal_power(int argc, VALUE*argv, VALUE self) if (VpIsDef(x)) { mp = x->Prec * (VpBaseFig() + 1); - GUARD_OBJ(y, VpCreateRbObject(mp * (ma + 1), "0")); + GUARD_OBJ(y, VpCreateRbObject(mp * (ma + 1), "0", true)); } else { - GUARD_OBJ(y, VpCreateRbObject(1, "0")); + GUARD_OBJ(y, VpCreateRbObject(1, "0", true)); } - VpPower(y, x, int_exp); + VpPowerByInt(y, x, int_exp); if (!NIL_P(prec) && VpIsDef(y)) { VpMidRound(y, VpGetRoundMode(), n); } - return ToValue(y); + return VpCheckGetValue(y); } -/* call-seq: - * a ** n -> bigdecimal +/* call-seq: + * self ** other -> bigdecimal * - * Returns the value raised to the power of n. + * Returns the \BigDecimal value of +self+ raised to power +other+: + * + * b = BigDecimal('3.14') + * b ** 2 # => 0.98596e1 + * b ** 2.0 # => 0.98596e1 + * b ** Rational(2, 1) # => 0.98596e1 + * + * Related: BigDecimal#power. * - * See BigDecimal#power. */ static VALUE BigDecimal_power_op(VALUE self, VALUE exp) @@ -2584,169 +3095,483 @@ opts_exception_p(VALUE opts) } #endif -static Real * -VpNewVarArg(int argc, VALUE *argv) +static VALUE +check_exception(VALUE bd) { - size_t mf; - VALUE opts = Qnil; - VALUE nFig; - VALUE iniValue; - double d; - int exc; + assert(is_kind_of_BigDecimal(bd)); + + Real *vp; + TypedData_Get_Struct(bd, Real, &BigDecimal_data_type, vp); + VpCheckGetValue(vp); /* VpCheckGetValue performs exception check */ + + return bd; +} - argc = rb_scan_args(argc, argv, "11:", &iniValue, &nFig, &opts); - exc = opts_exception_p(opts); +static VALUE +rb_uint64_convert_to_BigDecimal(uint64_t uval, RB_UNUSED_VAR(size_t digs), int raise_exception) +{ + VALUE obj = TypedData_Wrap_Struct(rb_cBigDecimal, &BigDecimal_data_type, 0); - if (argc == 1) { - mf = 0; + Real *vp; + if (uval == 0) { + vp = VpAllocReal(1); + vp->MaxPrec = 1; + vp->Prec = 1; + vp->exponent = 1; + VpSetZero(vp, 1); + vp->frac[0] = 0; + } + else if (uval < BASE) { + vp = VpAllocReal(1); + vp->MaxPrec = 1; + vp->Prec = 1; + vp->exponent = 1; + VpSetSign(vp, 1); + vp->frac[0] = (DECDIG)uval; } else { - /* expand GetPrecisionInt for exception suppression */ - ssize_t n = NUM2INT(nFig); - if (n < 0) { - if (!exc) { - return NULL; + DECDIG buf[BIGDECIMAL_INT64_MAX_LENGTH] = {0,}; + DECDIG r = uval % BASE; + size_t len = 0, ntz = 0; + if (r == 0) { + // Count and skip trailing zeros + for (; r == 0 && uval > 0; ++ntz) { + uval /= BASE; + r = uval % BASE; } - rb_raise(rb_eArgError, "negative precision"); } - mf = (size_t)n; - } - - if (SPECIAL_CONST_P(iniValue)) { - switch (iniValue) { - case Qnil: - if (!exc) return NULL; - rb_raise(rb_eTypeError, "can't convert nil into BigDecimal"); - case Qtrue: - if (!exc) return NULL; - rb_raise(rb_eTypeError, "can't convert true into BigDecimal"); - case Qfalse: - if (!exc) return NULL; - rb_raise(rb_eTypeError, "can't convert false into BigDecimal"); - default: - break; + for (; uval > 0; ++len) { + // Store digits + buf[BIGDECIMAL_INT64_MAX_LENGTH - len - 1] = r; + uval /= BASE; + r = uval % BASE; } + + const size_t exp = len + ntz; + vp = VpAllocReal(len); + vp->MaxPrec = len; + vp->Prec = len; + vp->exponent = exp; + VpSetSign(vp, 1); + MEMCPY(vp->frac, buf + BIGDECIMAL_INT64_MAX_LENGTH - len, DECDIG, len); } - switch (TYPE(iniValue)) { - case T_DATA: - if (is_kind_of_BigDecimal(iniValue)) { - return DATA_PTR(iniValue); - } - break; + return BigDecimal_wrap_struct(obj, vp); +} - case T_FIXNUM: - /* fall through */ - case T_BIGNUM: - return GetVpValue(iniValue, 1); +static VALUE +rb_int64_convert_to_BigDecimal(int64_t ival, size_t digs, int raise_exception) +{ + const uint64_t uval = (ival < 0) ? (((uint64_t)-(ival+1))+1) : (uint64_t)ival; + VALUE bd = rb_uint64_convert_to_BigDecimal(uval, digs, raise_exception); + if (ival < 0) { + Real *vp; + TypedData_Get_Struct(bd, Real, &BigDecimal_data_type, vp); + VpSetSign(vp, -1); + } + return bd; +} - case T_FLOAT: - d = RFLOAT_VALUE(iniValue); - if (!isfinite(d)) { - Real *pv = VpCreateRbObject(1, NULL); - VpDtoV(pv, d); - return pv; +static VALUE +rb_big_convert_to_BigDecimal(VALUE val, RB_UNUSED_VAR(size_t digs), int raise_exception) +{ + assert(RB_TYPE_P(val, T_BIGNUM)); + + int leading_zeros; + size_t size = rb_absint_size(val, &leading_zeros); + int sign = FIX2INT(rb_big_cmp(val, INT2FIX(0))); + if (sign < 0 && leading_zeros == 0) { + size += 1; + } + if (size <= sizeof(long)) { + if (sign < 0) { + return rb_int64_convert_to_BigDecimal(NUM2LONG(val), digs, raise_exception); } - if (mf > DBL_DIG+1) { - if (!exc) { - return NULL; - } - rb_raise(rb_eArgError, "precision too large."); - } - /* fall through */ - case T_RATIONAL: - if (NIL_P(nFig)) { - if (!exc) { - return NULL; - } - rb_raise(rb_eArgError, - "can't omit precision for a %"PRIsVALUE".", - RB_OBJ_CLASSNAME(iniValue)); - } - return GetVpValueWithPrec(iniValue, mf, 1); + else { + return rb_uint64_convert_to_BigDecimal(NUM2ULONG(val), digs, raise_exception); + } + } +#if defined(SIZEOF_LONG_LONG) && SIZEOF_LONG < SIZEOF_LONG_LONG + else if (size <= sizeof(LONG_LONG)) { + if (sign < 0) { + return rb_int64_convert_to_BigDecimal(NUM2LL(val), digs, raise_exception); + } + else { + return rb_uint64_convert_to_BigDecimal(NUM2ULL(val), digs, raise_exception); + } + } +#endif + else { + VALUE str = rb_big2str(val, 10); + Real *vp = VpCreateRbObject(RSTRING_LEN(str) + BASE_FIG + 1, + RSTRING_PTR(str), true); + RB_GC_GUARD(str); + return check_exception(vp->obj); + } +} + +static VALUE +rb_inum_convert_to_BigDecimal(VALUE val, RB_UNUSED_VAR(size_t digs), int raise_exception) +{ + assert(RB_INTEGER_TYPE_P(val)); + if (FIXNUM_P(val)) { + return rb_int64_convert_to_BigDecimal(FIX2LONG(val), digs, raise_exception); + } + else { + return rb_big_convert_to_BigDecimal(val, digs, raise_exception); + } +} + +static VALUE +rb_float_convert_to_BigDecimal(VALUE val, size_t digs, int raise_exception) +{ + assert(RB_FLOAT_TYPE_P(val)); + + double d = RFLOAT_VALUE(val); + + if (isnan(d)) { + VALUE obj = BigDecimal_nan(); + return check_exception(obj); + } + else if (isinf(d)) { + VALUE obj; + if (d > 0) { + obj = BigDecimal_positive_infinity(); + } + else { + obj = BigDecimal_negative_infinity(); + } + return check_exception(obj); + } + else if (d == 0.0) { + if (1/d < 0.0) { + return BigDecimal_negative_zero(); + } + else { + return BigDecimal_positive_zero(); + } + } + + if (digs == SIZE_MAX) { + if (!raise_exception) + return Qnil; + rb_raise(rb_eArgError, + "can't omit precision for a %"PRIsVALUE".", + CLASS_OF(val)); + } + else if (digs > BIGDECIMAL_DOUBLE_FIGURES) { + if (!raise_exception) + return Qnil; + rb_raise(rb_eArgError, "precision too large."); + } + + /* Use the same logic in flo_to_s to convert a float to a decimal string */ + char buf[BIGDECIMAL_DOUBLE_FIGURES + BASE_FIG + 2 + 1]; /* sizeof(buf) == 28 in the typical case */ + int decpt, negative_p; + char *e; + const int mode = digs == 0 ? 0 : 2; + char *p = BigDecimal_dtoa(d, mode, (int)digs, &decpt, &negative_p, &e); + int len10 = (int)(e - p); + if (len10 > BIGDECIMAL_DOUBLE_FIGURES) { + /* TODO: Presumably, rounding should be done here. */ + len10 = BIGDECIMAL_DOUBLE_FIGURES; + } + memcpy(buf, p, len10); + xfree(p); + + VALUE inum; + size_t RB_UNUSED_VAR(prec) = 0; + size_t exp = 0; + if (decpt > 0) { + if (decpt < len10) { + /* + * len10 |---------------| + * : |-------| frac_len10 = len10 - decpt + * decpt |-------| |--| ntz10 = BASE_FIG - frac_len10 % BASE_FIG + * : : : + * 00 dd dddd.dddd dd 00 + * prec |-----.----.----.-----| prec = exp + roomof(frac_len, BASE_FIG) + * exp |-----.----| exp = roomof(decpt, BASE_FIG) + */ + const size_t frac_len10 = len10 - decpt; + const size_t ntz10 = BASE_FIG - frac_len10 % BASE_FIG; + memset(buf + len10, '0', ntz10); + buf[len10 + ntz10] = '\0'; + inum = rb_cstr_to_inum(buf, 10, false); + + exp = roomof(decpt, BASE_FIG); + prec = exp + roomof(frac_len10, BASE_FIG); + } + else { + /* + * decpt |-----------------------| + * len10 |----------| : + * : |------------| exp10 + * : : : + * 00 dd dddd dd 00 0000 0000.0 + * : : : : + * : |--| ntz10 = exp10 % BASE_FIG + * prec |-----.----.-----| : + * : |----.----| exp10 / BASE_FIG + * exp |-----.----.-----.----.----| + */ + const size_t exp10 = decpt - len10; + const size_t ntz10 = exp10 % BASE_FIG; + + memset(buf + len10, '0', ntz10); + buf[len10 + ntz10] = '\0'; + inum = rb_cstr_to_inum(buf, 10, false); + + prec = roomof(len10 + ntz10, BASE_FIG); + exp = prec + exp10 / BASE_FIG; + } + } + else if (decpt == 0) { + /* + * len10 |------------| + * : : + * 0.dddd dddd dd 00 + * : : : + * : |--| ntz10 = prec * BASE_FIG - len10 + * prec |----.----.-----| roomof(len10, BASE_FIG) + */ + prec = roomof(len10, BASE_FIG); + const size_t ntz10 = prec * BASE_FIG - len10; + + memset(buf + len10, '0', ntz10); + buf[len10 + ntz10] = '\0'; + inum = rb_cstr_to_inum(buf, 10, false); + } + else { + /* + * len10 |---------------| + * : : + * decpt |-------| |--| ntz10 = prec * BASE_FIG - nlz10 - len10 + * : : : + * 0.0000 00 dd dddd dddd dd 00 + * : : : + * nlz10 |--| : decpt % BASE_FIG + * prec |-----.----.----.-----| roomof(decpt + len10, BASE_FIG) - exp + * exp |----| decpt / BASE_FIG + */ + decpt = -decpt; + + const size_t nlz10 = decpt % BASE_FIG; + exp = decpt / BASE_FIG; + prec = roomof(decpt + len10, BASE_FIG) - exp; + const size_t ntz10 = prec * BASE_FIG - nlz10 - len10; + + if (nlz10 > 0) { + memmove(buf + nlz10, buf, len10); + memset(buf, '0', nlz10); + } + memset(buf + nlz10 + len10, '0', ntz10); + buf[nlz10 + len10 + ntz10] = '\0'; + inum = rb_cstr_to_inum(buf, 10, false); + + exp = -exp; + } + + VALUE bd = rb_inum_convert_to_BigDecimal(inum, SIZE_MAX, raise_exception); + Real *vp; + TypedData_Get_Struct(bd, Real, &BigDecimal_data_type, vp); + assert(vp->Prec == prec); + vp->exponent = exp; + + if (negative_p) VpSetSign(vp, -1); + return bd; +} + +static VALUE +rb_rational_convert_to_BigDecimal(VALUE val, size_t digs, int raise_exception) +{ + assert(RB_TYPE_P(val, T_RATIONAL)); + + if (digs == SIZE_MAX) { + if (!raise_exception) + return Qnil; + rb_raise(rb_eArgError, + "can't omit precision for a %"PRIsVALUE".", + CLASS_OF(val)); + } + + VALUE num = rb_inum_convert_to_BigDecimal(rb_rational_num(val), 0, raise_exception); + VALUE d = BigDecimal_div2(num, rb_rational_den(val), SIZET2NUM(digs)); + return d; +} + +static VALUE +rb_cstr_convert_to_BigDecimal(const char *c_str, size_t digs, int raise_exception) +{ + if (digs == SIZE_MAX) + digs = 0; + + Real *vp = VpCreateRbObject(digs, c_str, raise_exception); + if (!vp) + return Qnil; + return VpCheckGetValue(vp); +} + +static inline VALUE +rb_str_convert_to_BigDecimal(VALUE val, size_t digs, int raise_exception) +{ + const char *c_str = StringValueCStr(val); + return rb_cstr_convert_to_BigDecimal(c_str, digs, raise_exception); +} + +static VALUE +rb_convert_to_BigDecimal(VALUE val, size_t digs, int raise_exception) +{ + switch (val) { + case Qnil: + case Qtrue: + case Qfalse: + if (raise_exception) { + const char *cname = NIL_P(val) ? "nil" : + val == Qtrue ? "true" : + val == Qfalse ? "false" : + NULL; + rb_raise(rb_eTypeError, + "can't convert %s into BigDecimal", cname); + } + return Qnil; - case T_STRING: - /* fall through */ default: - break; + break; + } + + if (is_kind_of_BigDecimal(val)) { + if (digs == SIZE_MAX) + return check_exception(val); + + Real *vp; + TypedData_Get_Struct(val, Real, &BigDecimal_data_type, vp); + + VALUE copy = TypedData_Wrap_Struct(rb_cBigDecimal, &BigDecimal_data_type, 0); + vp = VpCopy(NULL, vp); + /* TODO: rounding */ + BigDecimal_wrap_struct(copy, vp); + return VpCheckGetValue(vp); + } + else if (RB_INTEGER_TYPE_P(val)) { + return rb_inum_convert_to_BigDecimal(val, digs, raise_exception); + } + else if (RB_FLOAT_TYPE_P(val)) { + return rb_float_convert_to_BigDecimal(val, digs, raise_exception); } - /* TODO: support to_d */ - if (!exc) { - iniValue = rb_check_convert_type(iniValue, T_STRING, "String", "to_str"); - if (NIL_P(iniValue)) return NULL; + else if (RB_TYPE_P(val, T_RATIONAL)) { + return rb_rational_convert_to_BigDecimal(val, digs, raise_exception); } - StringValueCStr(iniValue); - return VpAlloc(mf, RSTRING_PTR(iniValue), 1, exc); + else if (RB_TYPE_P(val, T_COMPLEX)) { + VALUE im = rb_complex_imag(val); + if (!is_zero(im)) { + /* TODO: handle raise_exception */ + rb_raise(rb_eArgError, + "Unable to make a BigDecimal from non-zero imaginary number"); + } + return rb_convert_to_BigDecimal(rb_complex_real(val), digs, raise_exception); + } + else if (RB_TYPE_P(val, T_STRING)) { + return rb_str_convert_to_BigDecimal(val, digs, raise_exception); + } + + /* TODO: chheck to_d */ + /* TODO: chheck to_int */ + + VALUE str = rb_check_convert_type(val, T_STRING, "String", "to_str"); + if (!RB_TYPE_P(str, T_STRING)) { + if (raise_exception) { + rb_raise(rb_eTypeError, + "can't convert %"PRIsVALUE" into BigDecimal", rb_obj_class(val)); + } + return Qnil; + } + return rb_str_convert_to_BigDecimal(str, digs, raise_exception); } -/* call-seq: - * BigDecimal(initial, digits, exception: true) +/* call-seq: + * BigDecimal(value, exception: true) -> bigdecimal + * BigDecimal(value, ndigits, exception: true) -> bigdecimal * - * Create a new BigDecimal object. + * Returns the \BigDecimal converted from +value+ + * with a precision of +ndigits+ decimal digits. * - * initial:: The initial value, as an Integer, a Float, a Rational, - * a BigDecimal, or a String. + * When +ndigits+ is less than the number of significant digits + * in the value, the result is rounded to that number of digits, + * according to the current rounding mode; see BigDecimal.mode. * - * If it is a String, spaces are ignored and unrecognized characters - * terminate the value. + * Returns +value+ converted to a \BigDecimal, depending on the type of +value+: * - * digits:: The number of significant digits, as an Integer. If omitted or 0, - * the number of significant digits is determined from the initial - * value. + * - Integer, Float, Rational, Complex, or BigDecimal: converted directly: * - * The actual number of significant digits used in computation is - * usually larger than the specified number. + * # Integer, Complex, or BigDecimal value does not require ndigits; ignored if given. + * BigDecimal(2) # => 0.2e1 + * BigDecimal(Complex(2, 0)) # => 0.2e1 + * BigDecimal(BigDecimal(2)) # => 0.2e1 + * # Float or Rational value requires ndigits. + * BigDecimal(2.0, 0) # => 0.2e1 + * BigDecimal(Rational(2, 1), 0) # => 0.2e1 * - * exception:: Whether an exception should be raised on invalid arguments. - * +true+ by default, if passed +false+, just returns +nil+ - * for invalid. + * - String: converted by parsing if it contains an integer or floating-point literal; + * leading and trailing whitespace is ignored: * + * # String does not require ndigits; ignored if given. + * BigDecimal('2') # => 0.2e1 + * BigDecimal('2.0') # => 0.2e1 + * BigDecimal('0.2e1') # => 0.2e1 + * BigDecimal(' 2.0 ') # => 0.2e1 * - * ==== Exceptions + * - Other type that responds to method :to_str: + * first converted to a string, then converted to a \BigDecimal, as above. * - * TypeError:: If the +initial+ type is neither Integer, Float, - * Rational, nor BigDecimal, this exception is raised. + * - Other type: * - * TypeError:: If the +digits+ is not an Integer, this exception is raised. + * - Raises an exception if keyword argument +exception+ is +true+. + * - Returns +nil+ if keyword argument +exception+ is +true+. * - * ArgumentError:: If +initial+ is a Float, and the +digits+ is larger than - * Float::DIG + 1, this exception is raised. + * Raises an exception if +value+ evaluates to a Float + * and +digits+ is larger than Float::DIG + 1. * - * ArgumentError:: If the +initial+ is a Float or Rational, and the +digits+ - * value is omitted, this exception is raised. */ static VALUE f_BigDecimal(int argc, VALUE *argv, VALUE self) { - ENTER(1); - Real *pv; - VALUE obj; - - if (argc > 0 && CLASS_OF(argv[0]) == rb_cBigDecimal) { - if (argc == 1 || (argc == 2 && RB_TYPE_P(argv[1], T_HASH))) return argv[0]; + VALUE val, digs_v, opts = Qnil; + argc = rb_scan_args(argc, argv, "11:", &val, &digs_v, &opts); + int exception = opts_exception_p(opts); + + size_t digs = SIZE_MAX; /* this means digs is omitted */ + if (argc > 1) { + digs_v = rb_to_int(digs_v); + if (FIXNUM_P(digs_v)) { + long n = FIX2LONG(digs_v); + if (n < 0) + goto negative_digs; + digs = (size_t)n; + } + else { + if (RBIGNUM_NEGATIVE_P(digs_v)) { + negative_digs: + if (!exception) + return Qnil; + rb_raise(rb_eArgError, "negative precision"); + } + digs = NUM2SIZET(digs_v); + } } - obj = TypedData_Wrap_Struct(rb_cBigDecimal, &BigDecimal_data_type, 0); - pv = VpNewVarArg(argc, argv); - if (pv == NULL) return Qnil; - SAVE(pv); - if (ToValue(pv)) pv = VpCopy(NULL, pv); - RTYPEDDATA_DATA(obj) = pv; - RB_OBJ_FREEZE(obj); - return pv->obj = obj; + + return rb_convert_to_BigDecimal(val, digs, exception); } static VALUE BigDecimal_s_interpret_loosely(VALUE klass, VALUE str) { - ENTER(1); - char const *c_str; - Real *pv; - - c_str = StringValueCStr(str); - GUARD_OBJ(pv, VpAlloc(0, c_str, 0, 1)); - pv->obj = TypedData_Wrap_Struct(klass, &BigDecimal_data_type, pv); - RB_OBJ_FREEZE(pv->obj); - return pv->obj; + char const *c_str = StringValueCStr(str); + Real *vp = VpNewRbClass(0, c_str, klass, false, true); + if (!vp) + return Qnil; + else + return VpCheckGetValue(vp); } /* call-seq: @@ -2765,7 +3590,7 @@ static VALUE BigDecimal_limit(int argc, VALUE *argv, VALUE self) { VALUE nFig; - VALUE nCur = INT2NUM(VpGetPrecLimit()); + VALUE nCur = SIZET2NUM(VpGetPrecLimit()); if (rb_scan_args(argc, argv, "01", &nFig) == 1) { int nf; @@ -2930,7 +3755,7 @@ BigMath_s_exp(VALUE klass, VALUE x, VALUE vprec) infinite = isinf(flo); nan = isnan(flo); if (!infinite && !nan) { - vx = GetVpValueWithPrec(x, DBL_DIG+1, 0); + vx = GetVpValueWithPrec(x, 0, 0); } break; @@ -2943,29 +3768,29 @@ BigMath_s_exp(VALUE klass, VALUE x, VALUE vprec) } if (infinite) { if (negative) { - return ToValue(GetVpValueWithPrec(INT2FIX(0), prec, 1)); + return VpCheckGetValue(GetVpValueWithPrec(INT2FIX(0), prec, 1)); } else { Real* vy; - vy = VpCreateRbObject(prec, "#0"); + vy = VpCreateRbObject(prec, "#0", true); VpSetInf(vy, VP_SIGN_POSITIVE_INFINITE); RB_GC_GUARD(vy->obj); - return ToValue(vy); + return VpCheckGetValue(vy); } } else if (nan) { Real* vy; - vy = VpCreateRbObject(prec, "#0"); + vy = VpCreateRbObject(prec, "#0", true); VpSetNaN(vy); RB_GC_GUARD(vy->obj); - return ToValue(vy); + return VpCheckGetValue(vy); } else if (vx == NULL) { cannot_be_coerced_into_BigDecimal(rb_eArgError, x); } x = vx->obj; - n = prec + rmpd_double_figures(); + n = prec + BIGDECIMAL_DOUBLE_FIGURES; negative = BIGDECIMAL_NEGATIVE_P(vx); if (negative) { VALUE x_zero = INT2NUM(1); @@ -2975,7 +3800,7 @@ BigMath_s_exp(VALUE klass, VALUE x, VALUE vprec) VpSetSign(vx, 1); } - one = ToValue(VpCreateRbObject(1, "1")); + one = VpCheckGetValue(VpCreateRbObject(1, "1", true)); y = one; d = y; i = 1; @@ -2990,8 +3815,8 @@ BigMath_s_exp(VALUE klass, VALUE x, VALUE vprec) if (m <= 0) { break; } - else if ((size_t)m < rmpd_double_figures()) { - m = rmpd_double_figures(); + else if ((size_t)m < BIGDECIMAL_DOUBLE_FIGURES) { + m = BIGDECIMAL_DOUBLE_FIGURES; } d = BigDecimal_mult(d, x); /* d <- d * x */ @@ -3083,7 +3908,7 @@ BigMath_s_log(VALUE klass, VALUE x, VALUE vprec) infinite = isinf(flo); nan = isnan(flo); if (!zero && !negative && !infinite && !nan) { - vx = GetVpValueWithPrec(x, DBL_DIG+1, 1); + vx = GetVpValueWithPrec(x, 0, 1); } break; @@ -3103,17 +3928,17 @@ BigMath_s_log(VALUE klass, VALUE x, VALUE vprec) } if (infinite && !negative) { Real* vy; - vy = VpCreateRbObject(prec, "#0"); + vy = VpCreateRbObject(prec, "#0", true); RB_GC_GUARD(vy->obj); VpSetInf(vy, VP_SIGN_POSITIVE_INFINITE); - return ToValue(vy); + return VpCheckGetValue(vy); } else if (nan) { Real* vy; - vy = VpCreateRbObject(prec, "#0"); + vy = VpCreateRbObject(prec, "#0", true); RB_GC_GUARD(vy->obj); VpSetNaN(vy); - return ToValue(vy); + return VpCheckGetValue(vy); } else if (zero || negative) { rb_raise(rb_eMathDomainError, @@ -3122,18 +3947,18 @@ BigMath_s_log(VALUE klass, VALUE x, VALUE vprec) else if (vx == NULL) { cannot_be_coerced_into_BigDecimal(rb_eArgError, x); } - x = ToValue(vx); + x = VpCheckGetValue(vx); - RB_GC_GUARD(one) = ToValue(VpCreateRbObject(1, "1")); - RB_GC_GUARD(two) = ToValue(VpCreateRbObject(1, "2")); + RB_GC_GUARD(one) = VpCheckGetValue(VpCreateRbObject(1, "1", true)); + RB_GC_GUARD(two) = VpCheckGetValue(VpCreateRbObject(1, "2", true)); - n = prec + rmpd_double_figures(); + n = prec + BIGDECIMAL_DOUBLE_FIGURES; RB_GC_GUARD(vn) = SSIZET2NUM(n); expo = VpExponent10(vx); if (expo < 0 || expo >= 3) { char buf[DECIMAL_SIZE_OF_BITS(SIZEOF_VALUE * CHAR_BIT) + 4]; snprintf(buf, sizeof(buf), "1E%"PRIdVALUE, -expo); - x = BigDecimal_mult2(x, ToValue(VpCreateRbObject(1, buf)), vn); + x = BigDecimal_mult2(x, VpCheckGetValue(VpCreateRbObject(1, buf, true)), vn); } else { expo = 0; @@ -3151,8 +3976,8 @@ BigMath_s_log(VALUE klass, VALUE x, VALUE vprec) if (m <= 0) { break; } - else if ((size_t)m < rmpd_double_figures()) { - m = rmpd_double_figures(); + else if ((size_t)m < BIGDECIMAL_DOUBLE_FIGURES) { + m = BIGDECIMAL_DOUBLE_FIGURES; } x = BigDecimal_mult2(x2, x, vn); @@ -3165,7 +3990,7 @@ BigMath_s_log(VALUE klass, VALUE x, VALUE vprec) if (expo != 0) { VALUE log10, vexpo, dy; log10 = BigMath_s_log(klass, INT2FIX(10), vprec); - vexpo = ToValue(GetVpValue(SSIZET2NUM(expo), 1)); + vexpo = VpCheckGetValue(GetVpValue(SSIZET2NUM(expo), 1)); dy = BigDecimal_mult(log10, vexpo); y = BigDecimal_add(y, dy); } @@ -3173,6 +3998,46 @@ BigMath_s_log(VALUE klass, VALUE x, VALUE vprec) return y; } +static VALUE BIGDECIMAL_NAN = Qnil; + +static VALUE +BigDecimal_nan(void) +{ + return BIGDECIMAL_NAN; +} + +static VALUE BIGDECIMAL_POSITIVE_INFINITY = Qnil; + +static VALUE +BigDecimal_positive_infinity(void) +{ + return BIGDECIMAL_POSITIVE_INFINITY; +} + +static VALUE BIGDECIMAL_NEGATIVE_INFINITY = Qnil; + +static VALUE +BigDecimal_negative_infinity(void) +{ + return BIGDECIMAL_NEGATIVE_INFINITY; +} + +static VALUE BIGDECIMAL_POSITIVE_ZERO = Qnil; + +static VALUE +BigDecimal_positive_zero(void) +{ + return BIGDECIMAL_POSITIVE_ZERO; +} + +static VALUE BIGDECIMAL_NEGATIVE_ZERO = Qnil; + +static VALUE +BigDecimal_negative_zero(void) +{ + return BIGDECIMAL_NEGATIVE_ZERO; +} + /* Document-class: BigDecimal * BigDecimal provides arbitrary-precision floating point decimal arithmetic. * @@ -3216,6 +4081,18 @@ BigMath_s_log(VALUE klass, VALUE x, VALUE vprec) * * (1.2 - 1.0) == 0.2 #=> false * + * == A Note About Precision + * + * For a calculation using a \BigDecimal and another +value+, + * the precision of the result depends on the type of +value+: + * + * - If +value+ is a \Float, + * the precision is Float::DIG + 1. + * - If +value+ is a \Rational, the precision is larger than Float::DIG + 1. + * - If +value+ is a \BigDecimal, the precision is +value+'s precision in the + * internal representation, which is platform-dependent. + * - If +value+ is other object, the precision is determined by the result of +BigDecimal(value)+. + * * == Special features of accurate decimal arithmetic * * Because BigDecimal is more accurate than normal binary floating point @@ -3301,6 +4178,9 @@ BigMath_s_log(VALUE klass, VALUE x, VALUE vprec) void Init_bigdecimal(void) { +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif VALUE arg; id_BigDecimal_exception_mode = rb_intern_const("BigDecimal.exception_mode"); @@ -3317,7 +4197,7 @@ Init_bigdecimal(void) rb_define_global_function("BigDecimal", f_BigDecimal, -1); /* Class methods */ - rb_undef_method(CLASS_OF(rb_cBigDecimal), "allocate"); + rb_undef_alloc_func(rb_cBigDecimal); rb_undef_method(CLASS_OF(rb_cBigDecimal), "new"); rb_define_singleton_method(rb_cBigDecimal, "interpret_loosely", BigDecimal_s_interpret_loosely, 1); rb_define_singleton_method(rb_cBigDecimal, "mode", BigDecimal_mode, -1); @@ -3441,17 +4321,41 @@ Init_bigdecimal(void) /* -3: Indicates that a value is negative and infinite. See BigDecimal.sign. */ rb_define_const(rb_cBigDecimal, "SIGN_NEGATIVE_INFINITE", INT2FIX(VP_SIGN_NEGATIVE_INFINITE)); - arg = rb_str_new2("+Infinity"); + /* Positive zero value. */ + arg = rb_str_new2("+0"); + BIGDECIMAL_POSITIVE_ZERO = f_BigDecimal(1, &arg, rb_cBigDecimal); + rb_gc_register_mark_object(BIGDECIMAL_POSITIVE_ZERO); + + /* Negative zero value. */ + arg = rb_str_new2("-0"); + BIGDECIMAL_NEGATIVE_ZERO = f_BigDecimal(1, &arg, rb_cBigDecimal); + rb_gc_register_mark_object(BIGDECIMAL_NEGATIVE_ZERO); + /* Positive infinity value. */ - rb_define_const(rb_cBigDecimal, "INFINITY", f_BigDecimal(1, &arg, rb_cBigDecimal)); - arg = rb_str_new2("NaN"); + arg = rb_str_new2("+Infinity"); + BIGDECIMAL_POSITIVE_INFINITY = f_BigDecimal(1, &arg, rb_cBigDecimal); + rb_gc_register_mark_object(BIGDECIMAL_POSITIVE_INFINITY); + + /* Negative infinity value. */ + arg = rb_str_new2("-Infinity"); + BIGDECIMAL_NEGATIVE_INFINITY = f_BigDecimal(1, &arg, rb_cBigDecimal); + rb_gc_register_mark_object(BIGDECIMAL_NEGATIVE_INFINITY); + /* 'Not a Number' value. */ - rb_define_const(rb_cBigDecimal, "NAN", f_BigDecimal(1, &arg, rb_cBigDecimal)); + arg = rb_str_new2("NaN"); + BIGDECIMAL_NAN = f_BigDecimal(1, &arg, rb_cBigDecimal); + rb_gc_register_mark_object(BIGDECIMAL_NAN); + /* Special value constants */ + rb_define_const(rb_cBigDecimal, "INFINITY", BIGDECIMAL_POSITIVE_INFINITY); + rb_define_const(rb_cBigDecimal, "NAN", BIGDECIMAL_NAN); /* instance methods */ - rb_define_method(rb_cBigDecimal, "initialize_copy", BigDecimal_initialize_copy, 1); rb_define_method(rb_cBigDecimal, "precs", BigDecimal_prec, 0); + rb_define_method(rb_cBigDecimal, "precision", BigDecimal_precision, 0); + rb_define_method(rb_cBigDecimal, "scale", BigDecimal_scale, 0); + rb_define_method(rb_cBigDecimal, "precision_scale", BigDecimal_precision_scale, 0); + rb_define_method(rb_cBigDecimal, "n_significant_digits", BigDecimal_n_significant_digits, 0); rb_define_method(rb_cBigDecimal, "add", BigDecimal_add2, 2); rb_define_method(rb_cBigDecimal, "sub", BigDecimal_sub2, 2); @@ -3469,7 +4373,7 @@ Init_bigdecimal(void) rb_define_method(rb_cBigDecimal, "-@", BigDecimal_neg, 0); rb_define_method(rb_cBigDecimal, "*", BigDecimal_mult, 1); rb_define_method(rb_cBigDecimal, "/", BigDecimal_div, 1); - rb_define_method(rb_cBigDecimal, "quo", BigDecimal_div, 1); + rb_define_method(rb_cBigDecimal, "quo", BigDecimal_quo, -1); rb_define_method(rb_cBigDecimal, "%", BigDecimal_mod, 1); rb_define_method(rb_cBigDecimal, "modulo", BigDecimal_mod, 1); rb_define_method(rb_cBigDecimal, "remainder", BigDecimal_remainder, 1); @@ -3560,14 +4464,17 @@ enum op_sw { static int VpIsDefOP(Real *c, Real *a, Real *b, enum op_sw sw); static int AddExponent(Real *a, SIGNED_VALUE n); -static BDIGIT VpAddAbs(Real *a,Real *b,Real *c); -static BDIGIT VpSubAbs(Real *a,Real *b,Real *c); -static size_t VpSetPTR(Real *a, Real *b, Real *c, size_t *a_pos, size_t *b_pos, size_t *c_pos, BDIGIT *av, BDIGIT *bv); +static DECDIG VpAddAbs(Real *a,Real *b,Real *c); +static DECDIG VpSubAbs(Real *a,Real *b,Real *c); +static size_t VpSetPTR(Real *a, Real *b, Real *c, size_t *a_pos, size_t *b_pos, size_t *c_pos, DECDIG *av, DECDIG *bv); static int VpNmlz(Real *a); static void VpFormatSt(char *psz, size_t fFmt); static int VpRdup(Real *m, size_t ind_m); #ifdef BIGDECIMAL_DEBUG +# ifdef HAVE_RB_EXT_RACTOR_SAFE +# error Need to make rewiting gnAlloc atomic +# endif static int gnAlloc = 0; /* Memory allocation counter */ #endif /* BIGDECIMAL_DEBUG */ @@ -3575,9 +4482,6 @@ VP_EXPORT void * VpMemAlloc(size_t mb) { void *p = xmalloc(mb); - if (!p) { - VpException(VP_EXCEPTION_MEMORY, "failed to allocate memory", 1); - } memset(p, 0, mb); #ifdef BIGDECIMAL_DEBUG gnAlloc++; /* Count allocation call */ @@ -3588,11 +4492,7 @@ VpMemAlloc(size_t mb) VP_EXPORT void * VpMemRealloc(void *ptr, size_t mb) { - void *p = xrealloc(ptr, mb); - if (!p) { - VpException(VP_EXCEPTION_MEMORY, "failed to allocate memory", 1); - } - return p; + return xrealloc(ptr, mb); } VP_EXPORT void @@ -3618,7 +4518,7 @@ VpFree(Real *pv) * EXCEPTION Handling. */ -#define rmpd_set_thread_local_exception_mode(mode) \ +#define bigdecimal_set_thread_local_exception_mode(mode) \ rb_thread_local_aset( \ rb_thread_current(), \ id_BigDecimal_exception_mode, \ @@ -3634,8 +4534,8 @@ VpGetException (void) ); if (NIL_P(vmode)) { - rmpd_set_thread_local_exception_mode(RMPD_EXCEPTION_MODE_DEFAULT); - return RMPD_EXCEPTION_MODE_DEFAULT; + bigdecimal_set_thread_local_exception_mode(BIGDECIMAL_EXCEPTION_MODE_DEFAULT); + return BIGDECIMAL_EXCEPTION_MODE_DEFAULT; } return NUM2USHORT(vmode); @@ -3644,20 +4544,41 @@ VpGetException (void) static void VpSetException(unsigned short f) { - rmpd_set_thread_local_exception_mode(f); + bigdecimal_set_thread_local_exception_mode(f); +} + +static void +VpCheckException(Real *p, bool always) +{ + if (VpIsNaN(p)) { + VpException(VP_EXCEPTION_NaN, "Computation results in 'NaN' (Not a Number)", always); + } + else if (VpIsPosInf(p)) { + VpException(VP_EXCEPTION_INFINITY, "Computation results in 'Infinity'", always); + } + else if (VpIsNegInf(p)) { + VpException(VP_EXCEPTION_INFINITY, "Computation results in '-Infinity'", always); + } +} + +static VALUE +VpCheckGetValue(Real *p) +{ + VpCheckException(p, false); + return p->obj; } /* * Precision limit. */ -#define rmpd_set_thread_local_precision_limit(limit) \ +#define bigdecimal_set_thread_local_precision_limit(limit) \ rb_thread_local_aset( \ rb_thread_current(), \ id_BigDecimal_precision_limit, \ SIZET2NUM(limit) \ ) -#define RMPD_PRECISION_LIMIT_DEFAULT ((size_t)0) +#define BIGDECIMAL_PRECISION_LIMIT_DEFAULT ((size_t)0) /* These 2 functions added at v1.1.7 */ VP_EXPORT size_t @@ -3669,8 +4590,8 @@ VpGetPrecLimit(void) ); if (NIL_P(vlimit)) { - rmpd_set_thread_local_precision_limit(RMPD_PRECISION_LIMIT_DEFAULT); - return RMPD_PRECISION_LIMIT_DEFAULT; + bigdecimal_set_thread_local_precision_limit(BIGDECIMAL_PRECISION_LIMIT_DEFAULT); + return BIGDECIMAL_PRECISION_LIMIT_DEFAULT; } return NUM2SIZET(vlimit); @@ -3680,7 +4601,7 @@ VP_EXPORT size_t VpSetPrecLimit(size_t n) { size_t const s = VpGetPrecLimit(); - rmpd_set_thread_local_precision_limit(n); + bigdecimal_set_thread_local_precision_limit(n); return s; } @@ -3688,7 +4609,7 @@ VpSetPrecLimit(size_t n) * Rounding mode. */ -#define rmpd_set_thread_local_rounding_mode(mode) \ +#define bigdecimal_set_thread_local_rounding_mode(mode) \ rb_thread_local_aset( \ rb_thread_current(), \ id_BigDecimal_rounding_mode, \ @@ -3704,8 +4625,8 @@ VpGetRoundMode(void) ); if (NIL_P(vmode)) { - rmpd_set_thread_local_rounding_mode(RMPD_ROUNDING_MODE_DEFAULT); - return RMPD_ROUNDING_MODE_DEFAULT; + bigdecimal_set_thread_local_rounding_mode(BIGDECIMAL_ROUNDING_MODE_DEFAULT); + return BIGDECIMAL_ROUNDING_MODE_DEFAULT; } return NUM2USHORT(vmode); @@ -3733,7 +4654,7 @@ VP_EXPORT unsigned short VpSetRoundMode(unsigned short n) { if (VpIsRoundMode(n)) { - rmpd_set_thread_local_rounding_mode(n); + bigdecimal_set_thread_local_rounding_mode(n); return n; } @@ -3810,7 +4731,7 @@ VpException(unsigned short f, const char *str,int always) { unsigned short const exception_mode = VpGetException(); - if (f == VP_EXCEPTION_OP || f == VP_EXCEPTION_MEMORY) always = 1; + if (f == VP_EXCEPTION_OP) always = 1; if (always || (exception_mode & f)) { switch(f) { @@ -3822,7 +4743,6 @@ VpException(unsigned short f, const char *str,int always) case VP_EXCEPTION_OP: rb_raise(rb_eFloatDomainError, "%s", str); break; - case VP_EXCEPTION_MEMORY: default: rb_fatal("%s", str); } @@ -3971,13 +4891,13 @@ VpNumOfChars(Real *vp,const char *pszFmt) * that BASE is as large as possible satisfying the * relation MaxVal <= BASE*(BASE+1). Where the value * MaxVal is the largest value which can be represented - * by one BDIGIT word in the computer used. + * by one DECDIG word in the computer used. * * [Returns] - * 1+DBL_DIG ... OK + * BIGDECIMAL_DOUBLE_FIGURES ... OK */ VP_EXPORT size_t -VpInit(BDIGIT BaseVal) +VpInit(DECDIG BaseVal) { /* Setup +/- Inf NaN -0 */ VpGetDoubleNegZero(); @@ -3992,16 +4912,16 @@ VpInit(BDIGIT BaseVal) #ifdef BIGDECIMAL_DEBUG if (gfDebug) { - printf("VpInit: BaseVal = %"PRIuBDIGIT"\n", BaseVal); - printf("\tBASE = %"PRIuBDIGIT"\n", BASE); - printf("\tHALF_BASE = %"PRIuBDIGIT"\n", HALF_BASE); - printf("\tBASE1 = %"PRIuBDIGIT"\n", BASE1); - printf("\tBASE_FIG = %u\n", BASE_FIG); - printf("\tDBLE_FIG = %d\n", DBLE_FIG); + printf("VpInit: BaseVal = %"PRIuDECDIG"\n", BaseVal); + printf("\tBASE = %"PRIuDECDIG"\n", BASE); + printf("\tHALF_BASE = %"PRIuDECDIG"\n", HALF_BASE); + printf("\tBASE1 = %"PRIuDECDIG"\n", BASE1); + printf("\tBASE_FIG = %u\n", BASE_FIG); + printf("\tBIGDECIMAL_DOUBLE_FIGURES = %d\n", BIGDECIMAL_DOUBLE_FIGURES); } #endif /* BIGDECIMAL_DEBUG */ - return rmpd_double_figures(); + return BIGDECIMAL_DOUBLE_FIGURES; } VP_EXPORT Real * @@ -4049,7 +4969,7 @@ AddExponent(Real *a, SIGNED_VALUE n) } Real * -rmpd_parse_special_string(const char *str) +bigdecimal_parse_special_string(const char *str) { static const struct { const char *str; @@ -4144,14 +5064,13 @@ VpAlloc(size_t mx, const char *szVal, int strict_p, int exc) /* at least mx digits. */ /* szVal==NULL ==> allocate zero value. */ vp = VpAllocReal(mx); - /* xmalloc() alway returns(or throw interruption) */ vp->MaxPrec = mx; /* set max precision */ VpSetZero(vp, 1); /* initialize vp to zero. */ return vp; } /* Check on Inf & NaN */ - if ((vp = rmpd_parse_special_string(szVal)) != NULL) { + if ((vp = bigdecimal_parse_special_string(szVal)) != NULL) { return vp; } @@ -4320,7 +5239,6 @@ VpAlloc(size_t mx, const char *szVal, int strict_p, int exc) nalloc = Max(nalloc, mx); mx = nalloc; vp = VpAllocReal(mx); - /* xmalloc() alway returns(or throw interruption) */ vp->MaxPrec = mx; /* set max precision */ VpSetZero(vp, sign); VpCtoV(vp, psz, ni, psz + ipf, nf, psz + ipe, ne); @@ -4359,7 +5277,7 @@ VpAsgn(Real *c, Real *a, int isw) VpSetSign(c, isw * VpGetSign(a)); /* set sign */ n = (a->Prec < c->MaxPrec) ? (a->Prec) : (c->MaxPrec); c->Prec = n; - memcpy(c->frac, a->frac, n * sizeof(BDIGIT)); + memcpy(c->frac, a->frac, n * sizeof(DECDIG)); /* Needs round ? */ if (isw != 10) { /* Not in ActiveRound */ @@ -4390,7 +5308,7 @@ VpAddSub(Real *c, Real *a, Real *b, int operation) short sw, isw; Real *a_ptr, *b_ptr; size_t n, na, nb, i; - BDIGIT mrv; + DECDIG mrv; #ifdef BIGDECIMAL_DEBUG if (gfDebug) { @@ -4518,7 +5436,7 @@ VpAddSub(Real *c, Real *a, Real *b, int operation) * a and b assuming abs(a)>abs(b). * c = abs(a) + abs(b) ; where |a|>=|b| */ -static BDIGIT +static DECDIG VpAddAbs(Real *a, Real *b, Real *c) { size_t word_shift; @@ -4528,7 +5446,7 @@ VpAddAbs(Real *a, Real *b, Real *c) size_t a_pos; size_t b_pos, b_pos_with_word_shift; size_t c_pos; - BDIGIT av, bv, carry, mrv; + DECDIG av, bv, carry, mrv; #ifdef BIGDECIMAL_DEBUG if (gfDebug) { @@ -4613,7 +5531,7 @@ VpAddAbs(Real *a, Real *b, Real *c) /* * c = abs(a) - abs(b) */ -static BDIGIT +static DECDIG VpSubAbs(Real *a, Real *b, Real *c) { size_t word_shift; @@ -4623,7 +5541,7 @@ VpSubAbs(Real *a, Real *b, Real *c) size_t a_pos; size_t b_pos, b_pos_with_word_shift; size_t c_pos; - BDIGIT av, bv, borrow, mrv; + DECDIG av, bv, borrow, mrv; #ifdef BIGDECIMAL_DEBUG if (gfDebug) { @@ -4730,7 +5648,7 @@ VpSubAbs(Real *a, Real *b, Real *c) * c_pos = | */ static size_t -VpSetPTR(Real *a, Real *b, Real *c, size_t *a_pos, size_t *b_pos, size_t *c_pos, BDIGIT *av, BDIGIT *bv) +VpSetPTR(Real *a, Real *b, Real *c, size_t *a_pos, size_t *b_pos, size_t *c_pos, DECDIG *av, DECDIG *bv) { size_t left_word, right_word, word_shift; @@ -4845,8 +5763,8 @@ VpMult(Real *c, Real *a, Real *b) size_t MxIndA, MxIndB, MxIndAB, MxIndC; size_t ind_c, i, ii, nc; size_t ind_as, ind_ae, ind_bs; - BDIGIT carry; - BDIGIT_DBL s; + DECDIG carry; + DECDIG_DBL s; Real *w; #ifdef BIGDECIMAL_DEBUG @@ -4900,7 +5818,7 @@ VpMult(Real *c, Real *a, Real *b) VpSetSign(c, VpGetSign(a) * VpGetSign(b)); /* set sign */ carry = 0; nc = ind_c = MxIndAB; - memset(c->frac, 0, (nc + 1) * sizeof(BDIGIT)); /* Initialize c */ + memset(c->frac, 0, (nc + 1) * sizeof(DECDIG)); /* Initialize c */ c->Prec = nc + 1; /* set precision */ for (nc = 0; nc < MxIndAB; ++nc, --ind_c) { if (nc < MxIndB) { /* The left triangle of the Fig. */ @@ -4920,15 +5838,15 @@ VpMult(Real *c, Real *a, Real *b) } for (i = ind_as; i <= ind_ae; ++i) { - s = (BDIGIT_DBL)a->frac[i] * b->frac[ind_bs--]; - carry = (BDIGIT)(s / BASE); - s -= (BDIGIT_DBL)carry * BASE; - c->frac[ind_c] += (BDIGIT)s; - if (c->frac[ind_c] >= BASE) { - s = c->frac[ind_c] / BASE; - carry += (BDIGIT)s; - c->frac[ind_c] -= (BDIGIT)(s * BASE); - } + s = (DECDIG_DBL)a->frac[i] * b->frac[ind_bs--]; + carry = (DECDIG)(s / BASE); + s -= (DECDIG_DBL)carry * BASE; + c->frac[ind_c] += (DECDIG)s; + if (c->frac[ind_c] >= BASE) { + s = c->frac[ind_c] / BASE; + carry += (DECDIG)s; + c->frac[ind_c] -= (DECDIG)(s * BASE); + } if (carry) { ii = ind_c; while (ii-- > 0) { @@ -4974,9 +5892,9 @@ VpDivd(Real *c, Real *r, Real *a, Real *b) size_t word_a, word_b, word_c, word_r; size_t i, n, ind_a, ind_b, ind_c, ind_r; size_t nLoop; - BDIGIT_DBL q, b1, b1p1, b1b2, b1b2p1, r1r2; - BDIGIT borrow, borrow1, borrow2; - BDIGIT_DBL qb; + DECDIG_DBL q, b1, b1p1, b1b2, b1b2p1, r1r2; + DECDIG borrow, borrow1, borrow2; + DECDIG_DBL qb; #ifdef BIGDECIMAL_DEBUG if (gfDebug) { @@ -5048,7 +5966,7 @@ VpDivd(Real *c, Real *r, Real *a, Real *b) ++ind_c; continue; } - r1r2 = (BDIGIT_DBL)r->frac[ind_c] * BASE + r->frac[ind_c + 1]; + r1r2 = (DECDIG_DBL)r->frac[ind_c] * BASE + r->frac[ind_c + 1]; if (r1r2 == b1b2) { /* The first two word digits is the same */ ind_b = 2; @@ -5085,17 +6003,17 @@ VpDivd(Real *c, Real *r, Real *a, Real *b) /* The first two word digits is not the same, */ /* then compare magnitude, and divide actually. */ if (r1r2 >= b1b2p1) { - q = r1r2 / b1b2p1; /* q == (BDIGIT)q */ - c->frac[ind_c] += (BDIGIT)q; - ind_r = b->Prec + ind_c - 1; - goto sub_mult; + q = r1r2 / b1b2p1; /* q == (DECDIG)q */ + c->frac[ind_c] += (DECDIG)q; + ind_r = b->Prec + ind_c - 1; + goto sub_mult; } div_b1p1: - if (ind_c + 1 >= word_c) goto out_side; - q = r1r2 / b1p1; /* q == (BDIGIT)q */ - c->frac[ind_c + 1] += (BDIGIT)q; - ind_r = b->Prec + ind_c; + if (ind_c + 1 >= word_c) goto out_side; + q = r1r2 / b1p1; /* q == (DECDIG)q */ + c->frac[ind_c + 1] += (DECDIG)q; + ind_r = b->Prec + ind_c; sub_mult: borrow1 = borrow2 = 0; @@ -5107,16 +6025,16 @@ VpDivd(Real *c, Real *r, Real *a, Real *b) qb = q * b->frac[ind_b]; if (qb < BASE) borrow1 = 0; else { - borrow1 = (BDIGIT)(qb / BASE); - qb -= (BDIGIT_DBL)borrow1 * BASE; /* get qb < BASE */ + borrow1 = (DECDIG)(qb / BASE); + qb -= (DECDIG_DBL)borrow1 * BASE; /* get qb < BASE */ } if(r->frac[ind_r] < qb) { - r->frac[ind_r] += (BDIGIT)(BASE - qb); - borrow2 = borrow2 + borrow1 + 1; + r->frac[ind_r] += (DECDIG)(BASE - qb); + borrow2 = borrow2 + borrow1 + 1; } else { - r->frac[ind_r] -= (BDIGIT)qb; - borrow2 += borrow1; + r->frac[ind_r] -= (DECDIG)qb; + borrow2 += borrow1; } if (borrow2) { if(r->frac[ind_r - 1] < borrow2) { @@ -5198,9 +6116,9 @@ VpNmlz(Real *a) i = 0; while (a->frac[i] == 0) ++i; /* skip the first few zeros */ if (i) { - a->Prec -= i; - if (!AddExponent(a, -(SIGNED_VALUE)i)) return 0; - memmove(&a->frac[0], &a->frac[i], a->Prec*sizeof(BDIGIT)); + a->Prec -= i; + if (!AddExponent(a, -(SIGNED_VALUE)i)) return 0; + memmove(&a->frac[0], &a->frac[i], a->Prec*sizeof(DECDIG)); } return 1; } @@ -5323,7 +6241,7 @@ static int VPrint(FILE *fp, const char *cntl_chr, Real *a) { size_t i, j, nc, nd, ZeroSup, sep = 10; - BDIGIT m, e, nn; + DECDIG m, e, nn; j = 0; nd = nc = 0; /* nd : number of digits in fraction part(every 10 digits, */ @@ -5358,7 +6276,7 @@ VPrint(FILE *fp, const char *cntl_chr, Real *a) case '0': case 'z': ZeroSup = 0; ++j; - sep = cntl_chr[j] == 'z' ? RMPD_COMPONENT_FIGURES : 10; + sep = cntl_chr[j] == 'z' ? BIGDECIMAL_COMPONENT_FIGURES : 10; break; } for (i = 0; i < a->Prec; ++i) { @@ -5467,7 +6385,7 @@ VP_EXPORT void VpSzMantissa(Real *a,char *psz) { size_t i, n, ZeroSup; - BDIGIT_DBL m, e, nn; + DECDIG_DBL m, e, nn; if (VpIsNaN(a)) { sprintf(psz, SZ_NaN); @@ -5550,7 +6468,7 @@ VpToString(Real *a, char *psz, size_t fFmt, int fPlus) /* fPlus = 0: default, 1: set ' ' before digits, 2: set '+' before digits. */ { size_t i, n, ZeroSup; - BDIGIT shift, m, e, nn; + DECDIG shift, m, e, nn; char *pszSav = psz; ssize_t ex; @@ -5598,7 +6516,7 @@ VpToFString(Real *a, char *psz, size_t fFmt, int fPlus) /* fPlus = 0: default, 1: set ' ' before digits, 2: set '+' before digits. */ { size_t i, n; - BDIGIT m, e, nn; + DECDIG m, e, nn; char *pszSav = psz; ssize_t ex; @@ -5673,7 +6591,7 @@ VpCtoV(Real *a, const char *int_chr, size_t ni, const char *frac, size_t nf, con me = ne; signe = 1; exponent_overflow = 0; - memset(a->frac, 0, ma * sizeof(BDIGIT)); + memset(a->frac, 0, ma * sizeof(DECDIG)); if (ne > 0) { i = 0; if (exp_chr[0] == '-') { @@ -5810,7 +6728,7 @@ VpCtoV(Real *a, const char *int_chr, size_t ni, const char *frac, size_t nf, con * [Output] * *d ... fraction part of m(d = 0.xxxxxxx). where # of 'x's is fig. * *e ... exponent of m. - * DBLE_FIG ... Number of digits in a double variable. + * BIGDECIMAL_DOUBLE_FIGURES ... Number of digits in a double variable. * * m -> d*10**e, 0Prec); *d = 0.0; @@ -5874,7 +6792,7 @@ VpVtoD(double *d, SIGNED_VALUE *e, Real *m) if (gfDebug) { VPrint(stdout, " VpVtoD: m=%\n", m); printf(" d=%e * 10 **%ld\n", *d, *e); - printf(" DBLE_FIG = %d\n", DBLE_FIG); + printf(" BIGDECIMAL_DOUBLE_FIGURES = %d\n", BIGDECIMAL_DOUBLE_FIGURES); } #endif /*BIGDECIMAL_DEBUG */ return f; @@ -5888,7 +6806,7 @@ VpDtoV(Real *m, double d) { size_t ind_m, mm; SIGNED_VALUE ne; - BDIGIT i; + DECDIG i; double val, val2; if (isnan(d)) { @@ -5923,12 +6841,12 @@ VpDtoV(Real *m, double d) /* Now val = 0.xxxxx*BASE**ne */ mm = m->MaxPrec; - memset(m->frac, 0, mm * sizeof(BDIGIT)); + memset(m->frac, 0, mm * sizeof(DECDIG)); for (ind_m = 0; val > 0.0 && ind_m < mm; ind_m++) { - val *= (double)BASE; - i = (BDIGIT)val; - val -= (double)i; - m->frac[ind_m] = i; + val *= (double)BASE; + i = (DECDIG)val; + val -= (double)i; + m->frac[ind_m] = i; } if (ind_m >= mm) ind_m = mm - 1; VpSetSign(m, (d > 0.0) ? 1 : -1); @@ -5936,7 +6854,7 @@ VpDtoV(Real *m, double d) m->exponent = ne; VpInternalRound(m, 0, (m->Prec > 0) ? m->frac[m->Prec-1] : 0, - (BDIGIT)(val*(double)BASE)); + (DECDIG)(val*(double)BASE)); Exit: #ifdef BIGDECIMAL_DEBUG @@ -6075,7 +6993,7 @@ VpSqrt(Real *y, Real *x) } VpDtoV(y, sqrt(val)); /* y <- sqrt(val) */ y->exponent += n; - n = (SIGNED_VALUE)((DBLE_FIG + BASE_FIG - 1) / BASE_FIG); + n = (SIGNED_VALUE)roomof(BIGDECIMAL_DOUBLE_FIGURES, BASE_FIG); y->MaxPrec = Min((size_t)n , y_prec); f->MaxPrec = y->MaxPrec + 1; n = (SIGNED_VALUE)(y_prec * BASE_FIG); @@ -6132,8 +7050,8 @@ VpMidRound(Real *y, unsigned short f, ssize_t nf) /* exptoadd: number of digits needed to compensate negative nf */ int fracf, fracf_1further; ssize_t n,i,ix,ioffset, exptoadd; - BDIGIT v, shifter; - BDIGIT div; + DECDIG v, shifter; + DECDIG div; nf += y->exponent * (ssize_t)BASE_FIG; exptoadd=0; @@ -6155,8 +7073,8 @@ VpMidRound(Real *y, unsigned short f, ssize_t nf) n = (ssize_t)BASE_FIG - ioffset - 1; for (shifter = 1, i = 0; i < n; ++i) shifter *= 10; - /* so the representation used (in y->frac) is an array of BDIGIT, where - each BDIGIT contains a value between 0 and BASE-1, consisting of BASE_FIG + /* so the representation used (in y->frac) is an array of DECDIG, where + each DECDIG contains a value between 0 and BASE-1, consisting of BASE_FIG decimal places. (that numbers of decimal places are typed as ssize_t is somewhat confusing) @@ -6164,10 +7082,10 @@ VpMidRound(Real *y, unsigned short f, ssize_t nf) nf is now position (in decimal places) of the digit from the start of the array. - ix is the position (in BDIGITS) of the BDIGIT containing the decimal digit, + ix is the position (in DECDIGs) of the DECDIG containing the decimal digit, from the start of the array. - v is the value of this BDIGIT + v is the value of this DECDIG ioffset is the number of extra decimal places along of this decimal digit within v. @@ -6193,7 +7111,7 @@ VpMidRound(Real *y, unsigned short f, ssize_t nf) now fracf_1further is whether any of the remaining digits within v are non-zero */ - /* now check all the remaining BDIGITS for zero-ness a whole BDIGIT at a time. + /* now check all the remaining DECDIGs for zero-ness a whole DECDIG at a time. if we spot any non-zeroness, that means that we found a positive digit under rounding position, and we also found a positive digit under one further than the rounding position, so both searches (to see if any such non-zero digit exists) @@ -6212,7 +7130,7 @@ VpMidRound(Real *y, unsigned short f, ssize_t nf) now v = the first digit under the rounding position */ /* drop digits after pointed digit */ - memset(y->frac + ix + 1, 0, (y->Prec - (ix + 1)) * sizeof(BDIGIT)); + memset(y->frac + ix + 1, 0, (y->Prec - (ix + 1)) * sizeof(DECDIG)); switch (f) { case VP_ROUND_DOWN: /* Truncate */ @@ -6240,11 +7158,11 @@ VpMidRound(Real *y, unsigned short f, ssize_t nf) } else { if (ioffset == 0) { - /* v is the first decimal digit of its BDIGIT; - need to grab the previous BDIGIT if present - to check for evenness of the previous decimal - digit (which is same as that of the BDIGIT since - base 10 has a factor of 2) */ + /* v is the first decimal digit of its DECDIG; + need to grab the previous DECDIG if present + to check for evenness of the previous decimal + digit (which is same as that of the DECDIG since + base 10 has a factor of 2) */ if (ix && (y->frac[ix-1] % 2)) ++div; } else { @@ -6292,7 +7210,7 @@ VpLeftRound(Real *y, unsigned short f, ssize_t nf) * Round from the left hand side of the digits. */ { - BDIGIT v; + DECDIG v; if (!VpHasVal(y)) return 0; /* Unable to round */ v = y->frac[0]; nf -= VpExponent(y) * (ssize_t)BASE_FIG; @@ -6323,7 +7241,7 @@ VpLimitRound(Real *c, size_t ixDigit) /* If I understand correctly, this is only ever used to round off the final decimal digit of precision */ static void -VpInternalRound(Real *c, size_t ixDigit, BDIGIT vPrev, BDIGIT v) +VpInternalRound(Real *c, size_t ixDigit, DECDIG vPrev, DECDIG v) { int f = 0; @@ -6373,7 +7291,7 @@ VpInternalRound(Real *c, size_t ixDigit, BDIGIT vPrev, BDIGIT v) static int VpRdup(Real *m, size_t ind_m) { - BDIGIT carry; + DECDIG carry; if (!ind_m) ind_m = m->Prec; @@ -6445,7 +7363,7 @@ VpFrac(Real *y, Real *x) * y = x ** n */ VP_EXPORT int -VpPower(Real *y, Real *x, SIGNED_VALUE n) +VpPowerByInt(Real *y, Real *x, SIGNED_VALUE n) { size_t s, ss; ssize_t sign; @@ -6532,8 +7450,8 @@ VpPower(Real *y, Real *x, SIGNED_VALUE n) Exit: #ifdef BIGDECIMAL_DEBUG if (gfDebug) { - VPrint(stdout, "VpPower y=%\n", y); - VPrint(stdout, "VpPower x=%\n", x); + VPrint(stdout, "VpPowerByInt y=%\n", y); + VPrint(stdout, "VpPowerByInt x=%\n", x); printf(" n=%"PRIdVALUE"\n", n); } #endif /* BIGDECIMAL_DEBUG */ @@ -6568,12 +7486,12 @@ VpVarCheck(Real * v) } for (i = 0; i < v->Prec; ++i) { if (v->frac[i] >= BASE) { - printf("ERROR(VpVarCheck): Illegal fraction\n"); - printf(" Frac[%"PRIuSIZE"]=%"PRIuBDIGIT"\n", i, v->frac[i]); - printf(" Prec. =%"PRIuSIZE"\n", v->Prec); - printf(" Exp. =%"PRIdVALUE"\n", v->exponent); - printf(" BASE =%"PRIuBDIGIT"\n", BASE); - return 3; + printf("ERROR(VpVarCheck): Illegal fraction\n"); + printf(" Frac[%"PRIuSIZE"]=%"PRIuDECDIG"\n", i, v->frac[i]); + printf(" Prec. =%"PRIuSIZE"\n", v->Prec); + printf(" Exp. =%"PRIdVALUE"\n", v->exponent); + printf(" BASE =%"PRIuDECDIG"\n", BASE); + return 3; } } return 0; diff --git a/ruby/ext/bigdecimal/bigdecimal.gemspec b/ruby/ext/bigdecimal/bigdecimal.gemspec index 7d767f598..fd49c1b00 100644 --- a/ruby/ext/bigdecimal/bigdecimal.gemspec +++ b/ruby/ext/bigdecimal/bigdecimal.gemspec @@ -1,17 +1,15 @@ # coding: utf-8 -bigdecimal_version = '2.0.0' - Gem::Specification.new do |s| s.name = "bigdecimal" - s.version = bigdecimal_version + s.version = "3.1.1" s.authors = ["Kenta Murata", "Zachary Scott", "Shigeo Kobayashi"] s.email = ["mrkn@mrkn.jp"] s.summary = "Arbitrary-precision decimal floating-point number library." s.description = "This library provides arbitrary-precision decimal floating-point number class." s.homepage = "https://github.com/ruby/bigdecimal" - s.license = "ruby" + s.license = "Ruby" s.require_paths = %w[lib] s.extensions = %w[ext/bigdecimal/extconf.rb] @@ -19,6 +17,12 @@ Gem::Specification.new do |s| bigdecimal.gemspec ext/bigdecimal/bigdecimal.c ext/bigdecimal/bigdecimal.h + ext/bigdecimal/bits.h + ext/bigdecimal/feature.h + ext/bigdecimal/missing.c + ext/bigdecimal/missing.h + ext/bigdecimal/missing/dtoa.c + ext/bigdecimal/static_assert.h lib/bigdecimal.rb lib/bigdecimal/jacobian.rb lib/bigdecimal/ludcmp.rb @@ -30,10 +34,5 @@ Gem::Specification.new do |s| sample/pi.rb ] - s.required_ruby_version = Gem::Requirement.new(">= 2.3.0") - - s.add_development_dependency "rake", "~> 10.0" - s.add_development_dependency "rake-compiler", ">= 0.9" - s.add_development_dependency "minitest", "< 5.0.0" - s.add_development_dependency "pry" + s.required_ruby_version = Gem::Requirement.new(">= 2.5.0") end diff --git a/ruby/ext/bigdecimal/bigdecimal.h b/ruby/ext/bigdecimal/bigdecimal.h index e3eae06e6..bd1c46743 100644 --- a/ruby/ext/bigdecimal/bigdecimal.h +++ b/ruby/ext/bigdecimal/bigdecimal.h @@ -10,62 +10,74 @@ #define RUBY_BIG_DECIMAL_H 1 #define RUBY_NO_OLD_COMPATIBILITY - #include "ruby/ruby.h" -#include - -#ifndef RB_UNUSED_VAR -# ifdef __GNUC__ -# define RB_UNUSED_VAR(x) x __attribute__ ((unused)) -# else -# define RB_UNUSED_VAR(x) x -# endif -#endif +#include "missing.h" -#ifndef UNREACHABLE -# define UNREACHABLE /* unreachable */ +#ifdef HAVE_FLOAT_H +# include #endif -#undef BDIGIT -#undef SIZEOF_BDIGITS -#undef BDIGIT_DBL -#undef BDIGIT_DBL_SIGNED -#undef PRI_BDIGIT_PREFIX -#undef PRI_BDIGIT_DBL_PREFIX - #ifdef HAVE_INT64_T -# define BDIGIT uint32_t -# define BDIGIT_DBL uint64_t -# define BDIGIT_DBL_SIGNED int64_t -# define SIZEOF_BDIGITS 4 -# define PRI_BDIGIT_PREFIX "" +# define DECDIG uint32_t +# define DECDIG_DBL uint64_t +# define DECDIG_DBL_SIGNED int64_t +# define SIZEOF_DECDIG 4 +# define PRI_DECDIG_PREFIX "" # ifdef PRI_LL_PREFIX -# define PRI_BDIGIT_DBL_PREFIX PRI_LL_PREFIX +# define PRI_DECDIG_DBL_PREFIX PRI_LL_PREFIX # else -# define PRI_BDIGIT_DBL_PREFIX "l" +# define PRI_DECDIG_DBL_PREFIX "l" # endif #else -# define BDIGIT uint16_t -# define BDIGIT_DBL uint32_t -# define BDIGIT_DBL_SIGNED int32_t -# define SIZEOF_BDIGITS 2 -# define PRI_BDIGIT_PREFIX "h" -# define PRI_BDIGIT_DBL_PREFIX "" +# define DECDIG uint16_t +# define DECDIG_DBL uint32_t +# define DECDIG_DBL_SIGNED int32_t +# define SIZEOF_DECDIG 2 +# define PRI_DECDIG_PREFIX "h" +# define PRI_DECDIG_DBL_PREFIX "" #endif -#define PRIdBDIGIT PRI_BDIGIT_PREFIX"d" -#define PRIiBDIGIT PRI_BDIGIT_PREFIX"i" -#define PRIoBDIGIT PRI_BDIGIT_PREFIX"o" -#define PRIuBDIGIT PRI_BDIGIT_PREFIX"u" -#define PRIxBDIGIT PRI_BDIGIT_PREFIX"x" -#define PRIXBDIGIT PRI_BDIGIT_PREFIX"X" +#define PRIdDECDIG PRI_DECDIG_PREFIX"d" +#define PRIiDECDIG PRI_DECDIG_PREFIX"i" +#define PRIoDECDIG PRI_DECDIG_PREFIX"o" +#define PRIuDECDIG PRI_DECDIG_PREFIX"u" +#define PRIxDECDIG PRI_DECDIG_PREFIX"x" +#define PRIXDECDIG PRI_DECDIG_PREFIX"X" + +#define PRIdDECDIG_DBL PRI_DECDIG_DBL_PREFIX"d" +#define PRIiDECDIG_DBL PRI_DECDIG_DBL_PREFIX"i" +#define PRIoDECDIG_DBL PRI_DECDIG_DBL_PREFIX"o" +#define PRIuDECDIG_DBL PRI_DECDIG_DBL_PREFIX"u" +#define PRIxDECDIG_DBL PRI_DECDIG_DBL_PREFIX"x" +#define PRIXDECDIG_DBL PRI_DECDIG_DBL_PREFIX"X" + +#if SIZEOF_DECDIG == 4 +# define BIGDECIMAL_BASE ((DECDIG)1000000000U) +# define BIGDECIMAL_COMPONENT_FIGURES 9 +/* + * The number of components required for a 64-bit integer. + * + * INT64_MAX: 9_223372036_854775807 + * UINT64_MAX: 18_446744073_709551615 + */ +# define BIGDECIMAL_INT64_MAX_LENGTH 3 + +#elif SIZEOF_DECDIG == 2 +# define BIGDECIMAL_BASE ((DECDIG)10000U) +# define BIGDECIMAL_COMPONENT_FIGURES 4 +/* + * The number of components required for a 64-bit integer. + * + * INT64_MAX: 922_3372_0368_5477_5807 + * UINT64_MAX: 1844_6744_0737_0955_1615 + */ +# define BIGDECIMAL_INT64_MAX_LENGTH 5 + +#else +# error Unknown size of DECDIG +#endif -#define PRIdBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"d" -#define PRIiBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"i" -#define PRIoBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"o" -#define PRIuBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"u" -#define PRIxBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"x" -#define PRIXBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"X" +#define BIGDECIMAL_DOUBLE_FIGURES (1+DBL_DIG) #if defined(__cplusplus) extern "C" { @@ -74,111 +86,8 @@ extern "C" { #endif #endif -#ifndef HAVE_LABS -static inline long -labs(long const x) -{ - if (x < 0) return -x; - return x; -} -#endif - -#ifndef HAVE_LLABS -static inline LONG_LONG -llabs(LONG_LONG const x) -{ - if (x < 0) return -x; - return x; -} -#endif - -#ifndef HAVE_FINITE -static int -finite(double) -{ - return !isnan(n) && !isinf(n); -} -#endif - -#ifndef isfinite -# ifndef HAVE_ISFINITE -# define HAVE_ISFINITE 1 -# define isfinite(x) finite(x) -# endif -#endif - -#ifndef FIX_CONST_VALUE_PTR -# if defined(__fcc__) || defined(__fcc_version) || \ - defined(__FCC__) || defined(__FCC_VERSION) -/* workaround for old version of Fujitsu C Compiler (fcc) */ -# define FIX_CONST_VALUE_PTR(x) ((const VALUE *)(x)) -# else -# define FIX_CONST_VALUE_PTR(x) (x) -# endif -#endif - -#ifndef HAVE_RB_ARRAY_CONST_PTR -static inline const VALUE * -rb_array_const_ptr(VALUE a) -{ - return FIX_CONST_VALUE_PTR((RBASIC(a)->flags & RARRAY_EMBED_FLAG) ? - RARRAY(a)->as.ary : RARRAY(a)->as.heap.ptr); -} -#endif - -#ifndef RARRAY_CONST_PTR -# define RARRAY_CONST_PTR(a) rb_array_const_ptr(a) -#endif - -#ifndef RARRAY_AREF -# define RARRAY_AREF(a, i) (RARRAY_CONST_PTR(a)[i]) -#endif - -#ifndef HAVE_RB_SYM2STR -static inline VALUE -rb_sym2str(VALUE sym) -{ - return rb_id2str(SYM2ID(sym)); -} -#endif - -#ifndef ST2FIX -# undef RB_ST2FIX -# define RB_ST2FIX(h) LONG2FIX((long)(h)) -# define ST2FIX(h) RB_ST2FIX(h) -#endif - -#ifdef vabs -# undef vabs -#endif -#if SIZEOF_VALUE <= SIZEOF_INT -# define vabs abs -#elif SIZEOF_VALUE <= SIZEOF_LONG -# define vabs labs -#elif SIZEOF_VALUE <= SIZEOF_LONG_LONG -# define vabs llabs -#endif - extern VALUE rb_cBigDecimal; -#if 0 || SIZEOF_BDIGITS >= 16 -# define RMPD_COMPONENT_FIGURES 38 -# define RMPD_BASE ((BDIGIT)100000000000000000000000000000000000000U) -#elif SIZEOF_BDIGITS >= 8 -# define RMPD_COMPONENT_FIGURES 19 -# define RMPD_BASE ((BDIGIT)10000000000000000000U) -#elif SIZEOF_BDIGITS >= 4 -# define RMPD_COMPONENT_FIGURES 9 -# define RMPD_BASE ((BDIGIT)1000000000U) -#elif SIZEOF_BDIGITS >= 2 -# define RMPD_COMPONENT_FIGURES 4 -# define RMPD_BASE ((BDIGIT)10000U) -#else -# define RMPD_COMPONENT_FIGURES 2 -# define RMPD_BASE ((BDIGIT)100U) -#endif - - /* * NaN & Infinity */ @@ -203,9 +112,8 @@ extern VALUE rb_cBigDecimal; /* Following 2 exceptions can't controlled by user */ #define VP_EXCEPTION_OP ((unsigned short)0x0020) -#define VP_EXCEPTION_MEMORY ((unsigned short)0x0040) -#define RMPD_EXCEPTION_MODE_DEFAULT 0U +#define BIGDECIMAL_EXCEPTION_MODE_DEFAULT 0U /* Computation mode */ #define VP_ROUND_MODE ((unsigned short)0x0100) @@ -217,7 +125,7 @@ extern VALUE rb_cBigDecimal; #define VP_ROUND_FLOOR 6 #define VP_ROUND_HALF_EVEN 7 -#define RMPD_ROUNDING_MODE_DEFAULT VP_ROUND_HALF_UP +#define BIGDECIMAL_ROUNDING_MODE_DEFAULT VP_ROUND_HALF_UP #define VP_SIGN_NaN 0 /* NaN */ #define VP_SIGN_POSITIVE_ZERO 1 /* Positive zero */ @@ -259,7 +167,7 @@ typedef struct { * -3 : Negative infinite number */ short flag; /* Not used in vp_routines,space for user. */ - BDIGIT frac[FLEXIBLE_ARRAY_SIZE]; /* Array of fraction part. */ + DECDIG frac[FLEXIBLE_ARRAY_SIZE]; /* Array of fraction part. */ } Real; /* @@ -268,21 +176,13 @@ typedef struct { * ------------------ */ -VP_EXPORT Real * -VpNewRbClass(size_t mx, char const *str, VALUE klass); - -VP_EXPORT Real *VpCreateRbObject(size_t mx,const char *str); +VP_EXPORT Real *VpNewRbClass(size_t mx, char const *str, VALUE klass, bool strict_p, bool raise_exception); -static inline BDIGIT -rmpd_base_value(void) { return RMPD_BASE; } -static inline size_t -rmpd_component_figures(void) { return RMPD_COMPONENT_FIGURES; } -static inline size_t -rmpd_double_figures(void) { return 1+DBL_DIG; } +VP_EXPORT Real *VpCreateRbObject(size_t mx, const char *str, bool raise_exception); -#define VpBaseFig() rmpd_component_figures() -#define VpDblFig() rmpd_double_figures() -#define VpBaseVal() rmpd_base_value() +#define VpBaseFig() BIGDECIMAL_COMPONENT_FIGURES +#define VpDblFig() BIGDECIMAL_DOUBLE_FIGURES +#define VpBaseVal() BIGDECIMAL_BASE /* Zero,Inf,NaN (isinf(),isnan() used to check) */ VP_EXPORT double VpGetDoubleNaN(void); @@ -304,7 +204,7 @@ VP_EXPORT int VpException(unsigned short f,const char *str,int always); VP_EXPORT int VpIsNegDoubleZero(double v); #endif VP_EXPORT size_t VpNumOfChars(Real *vp,const char *pszFmt); -VP_EXPORT size_t VpInit(BDIGIT BaseVal); +VP_EXPORT size_t VpInit(DECDIG BaseVal); VP_EXPORT void *VpMemAlloc(size_t mb); VP_EXPORT void *VpMemRealloc(void *ptr, size_t mb); VP_EXPORT void VpFree(Real *pv); @@ -330,7 +230,8 @@ VP_EXPORT int VpActiveRound(Real *y, Real *x, unsigned short f, ssize_t il); VP_EXPORT int VpMidRound(Real *y, unsigned short f, ssize_t nf); VP_EXPORT int VpLeftRound(Real *y, unsigned short f, ssize_t nf); VP_EXPORT void VpFrac(Real *y, Real *x); -VP_EXPORT int VpPower(Real *y, Real *x, SIGNED_VALUE n); +VP_EXPORT int VpPowerByInt(Real *y, Real *x, SIGNED_VALUE n); +#define VpPower VpPowerByInt /* VP constants */ VP_EXPORT Real *VpOne(void); diff --git a/ruby/ext/bigdecimal/bits.h b/ruby/ext/bigdecimal/bits.h new file mode 100644 index 000000000..6e1e4776e --- /dev/null +++ b/ruby/ext/bigdecimal/bits.h @@ -0,0 +1,141 @@ +#ifndef BIGDECIMAL_BITS_H +#define BIGDECIMAL_BITS_H + +#include "feature.h" +#include "static_assert.h" + +#if defined(__x86_64__) && defined(HAVE_X86INTRIN_H) +# include /* for _lzcnt_u64, etc. */ +#elif defined(_MSC_VER) && defined(HAVE_INTRIN_H) +# include /* for the following intrinsics */ +#endif + +#if defined(_MSC_VER) && defined(__AVX2__) +# pragma intrinsic(__lzcnt) +# pragma intrinsic(__lzcnt64) +#endif + +#define numberof(array) ((int)(sizeof(array) / sizeof((array)[0]))) +#define roomof(x, y) (((x) + (y) - 1) / (y)) +#define type_roomof(x, y) roomof(sizeof(x), sizeof(y)) + +#define MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, min, max) ( \ + (a) == 0 ? 0 : \ + (a) == -1 ? (b) < -(max) : \ + (a) > 0 ? \ + ((b) > 0 ? (max) / (a) < (b) : (min) / (a) > (b)) : \ + ((b) > 0 ? (min) / (a) < (b) : (max) / (a) > (b))) + +#ifdef HAVE_UINT128_T +# define bit_length(x) \ + (unsigned int) \ + (sizeof(x) <= sizeof(int32_t) ? 32 - nlz_int32((uint32_t)(x)) : \ + sizeof(x) <= sizeof(int64_t) ? 64 - nlz_int64((uint64_t)(x)) : \ + 128 - nlz_int128((uint128_t)(x))) +#else +# define bit_length(x) \ + (unsigned int) \ + (sizeof(x) <= sizeof(int32_t) ? 32 - nlz_int32((uint32_t)(x)) : \ + 64 - nlz_int64((uint64_t)(x))) +#endif + +static inline unsigned nlz_int32(uint32_t x); +static inline unsigned nlz_int64(uint64_t x); +#ifdef HAVE_UINT128_T +static inline unsigned nlz_int128(uint128_t x); +#endif + +static inline unsigned int +nlz_int32(uint32_t x) +{ +#if defined(_MSC_VER) && defined(__AVX2__) && defined(HAVE___LZCNT) + /* Note: It seems there is no such thing like __LZCNT__ predefined in MSVC. + * AMD CPUs have had this instruction for decades (since K10) but for + * Intel, Haswell is the oldest one. We need to use __AVX2__ for maximum + * safety. */ + return (unsigned int)__lzcnt(x); + +#elif defined(__x86_64__) && defined(__LZCNT__) && defined(HAVE__LZCNT_U32) + return (unsigned int)_lzcnt_u32(x); + +#elif defined(_MSC_VER) && defined(HAVE__BITSCANREVERSE) + unsigned long r; + return _BitScanReverse(&r, x) ? (31 - (int)r) : 32; + +#elif __has_builtin(__builtin_clz) + STATIC_ASSERT(sizeof_int, sizeof(int) * CHAR_BIT == 32); + return x ? (unsigned int)__builtin_clz(x) : 32; + +#else + uint32_t y; + unsigned n = 32; + y = x >> 16; if (y) {n -= 16; x = y;} + y = x >> 8; if (y) {n -= 8; x = y;} + y = x >> 4; if (y) {n -= 4; x = y;} + y = x >> 2; if (y) {n -= 2; x = y;} + y = x >> 1; if (y) {return n - 2;} + return (unsigned int)(n - x); +#endif +} + +static inline unsigned int +nlz_int64(uint64_t x) +{ +#if defined(_MSC_VER) && defined(__AVX2__) && defined(HAVE___LZCNT64) + return (unsigned int)__lzcnt64(x); + +#elif defined(__x86_64__) && defined(__LZCNT__) && defined(HAVE__LZCNT_U64) + return (unsigned int)_lzcnt_u64(x); + +#elif defined(_WIN64) && defined(_MSC_VER) && defined(HAVE__BITSCANREVERSE64) + unsigned long r; + return _BitScanReverse64(&r, x) ? (63u - (unsigned int)r) : 64; + +#elif __has_builtin(__builtin_clzl) && __has_builtin(__builtin_clzll) && !(defined(__sun) && defined(__sparc)) + if (x == 0) { + return 64; + } + else if (sizeof(long) * CHAR_BIT == 64) { + return (unsigned int)__builtin_clzl((unsigned long)x); + } + else if (sizeof(long long) * CHAR_BIT == 64) { + return (unsigned int)__builtin_clzll((unsigned long long)x); + } + else { + /* :FIXME: Is there a way to make this branch a compile-time error? */ + __builtin_unreachable(); + } + +#else + uint64_t y; + unsigned int n = 64; + y = x >> 32; if (y) {n -= 32; x = y;} + y = x >> 16; if (y) {n -= 16; x = y;} + y = x >> 8; if (y) {n -= 8; x = y;} + y = x >> 4; if (y) {n -= 4; x = y;} + y = x >> 2; if (y) {n -= 2; x = y;} + y = x >> 1; if (y) {return n - 2;} + return (unsigned int)(n - x); + +#endif +} + +#ifdef HAVE_UINT128_T +static inline unsigned int +nlz_int128(uint128_t x) +{ + uint64_t y = (uint64_t)(x >> 64); + + if (x == 0) { + return 128; + } + else if (y == 0) { + return (unsigned int)nlz_int64(x) + 64; + } + else { + return (unsigned int)nlz_int64(y); + } +} +#endif + +#endif /* BIGDECIMAL_BITS_H */ diff --git a/ruby/ext/bigdecimal/depend b/ruby/ext/bigdecimal/depend index ffd61b896..d6f40714b 100644 --- a/ruby/ext/bigdecimal/depend +++ b/ruby/ext/bigdecimal/depend @@ -5,8 +5,155 @@ Makefile: $(BIGDECIMAL_RB) bigdecimal.o: $(RUBY_EXTCONF_H) bigdecimal.o: $(arch_hdrdir)/ruby/config.h bigdecimal.o: $(hdrdir)/ruby/assert.h +bigdecimal.o: $(hdrdir)/ruby/backward/2/assume.h +bigdecimal.o: $(hdrdir)/ruby/backward/2/attributes.h +bigdecimal.o: $(hdrdir)/ruby/backward/2/bool.h +bigdecimal.o: $(hdrdir)/ruby/backward/2/inttypes.h +bigdecimal.o: $(hdrdir)/ruby/backward/2/limits.h +bigdecimal.o: $(hdrdir)/ruby/backward/2/long_long.h +bigdecimal.o: $(hdrdir)/ruby/backward/2/stdalign.h +bigdecimal.o: $(hdrdir)/ruby/backward/2/stdarg.h bigdecimal.o: $(hdrdir)/ruby/defines.h bigdecimal.o: $(hdrdir)/ruby/intern.h +bigdecimal.o: $(hdrdir)/ruby/internal/anyargs.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/char.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/double.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/int.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/long.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/short.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +bigdecimal.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +bigdecimal.o: $(hdrdir)/ruby/internal/assume.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/artificial.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/cold.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/const.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/constexpr.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/deprecated.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/error.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/forceinline.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/format.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/noalias.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/noexcept.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/noinline.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/nonnull.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/noreturn.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/pure.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/restrict.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/warning.h +bigdecimal.o: $(hdrdir)/ruby/internal/attr/weakref.h +bigdecimal.o: $(hdrdir)/ruby/internal/cast.h +bigdecimal.o: $(hdrdir)/ruby/internal/compiler_is.h +bigdecimal.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +bigdecimal.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +bigdecimal.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +bigdecimal.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +bigdecimal.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +bigdecimal.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +bigdecimal.o: $(hdrdir)/ruby/internal/compiler_since.h +bigdecimal.o: $(hdrdir)/ruby/internal/config.h +bigdecimal.o: $(hdrdir)/ruby/internal/constant_p.h +bigdecimal.o: $(hdrdir)/ruby/internal/core.h +bigdecimal.o: $(hdrdir)/ruby/internal/core/rarray.h +bigdecimal.o: $(hdrdir)/ruby/internal/core/rbasic.h +bigdecimal.o: $(hdrdir)/ruby/internal/core/rbignum.h +bigdecimal.o: $(hdrdir)/ruby/internal/core/rclass.h +bigdecimal.o: $(hdrdir)/ruby/internal/core/rdata.h +bigdecimal.o: $(hdrdir)/ruby/internal/core/rfile.h +bigdecimal.o: $(hdrdir)/ruby/internal/core/rhash.h +bigdecimal.o: $(hdrdir)/ruby/internal/core/robject.h +bigdecimal.o: $(hdrdir)/ruby/internal/core/rregexp.h +bigdecimal.o: $(hdrdir)/ruby/internal/core/rstring.h +bigdecimal.o: $(hdrdir)/ruby/internal/core/rstruct.h +bigdecimal.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +bigdecimal.o: $(hdrdir)/ruby/internal/ctype.h +bigdecimal.o: $(hdrdir)/ruby/internal/dllexport.h +bigdecimal.o: $(hdrdir)/ruby/internal/dosish.h +bigdecimal.o: $(hdrdir)/ruby/internal/error.h +bigdecimal.o: $(hdrdir)/ruby/internal/eval.h +bigdecimal.o: $(hdrdir)/ruby/internal/event.h +bigdecimal.o: $(hdrdir)/ruby/internal/fl_type.h +bigdecimal.o: $(hdrdir)/ruby/internal/gc.h +bigdecimal.o: $(hdrdir)/ruby/internal/glob.h +bigdecimal.o: $(hdrdir)/ruby/internal/globals.h +bigdecimal.o: $(hdrdir)/ruby/internal/has/attribute.h +bigdecimal.o: $(hdrdir)/ruby/internal/has/builtin.h +bigdecimal.o: $(hdrdir)/ruby/internal/has/c_attribute.h +bigdecimal.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +bigdecimal.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +bigdecimal.o: $(hdrdir)/ruby/internal/has/extension.h +bigdecimal.o: $(hdrdir)/ruby/internal/has/feature.h +bigdecimal.o: $(hdrdir)/ruby/internal/has/warning.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/array.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/bignum.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/class.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/compar.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/complex.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/cont.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/dir.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/enum.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/enumerator.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/error.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/eval.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/file.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/gc.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/hash.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/io.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/load.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/marshal.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/numeric.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/object.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/parse.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/proc.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/process.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/random.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/range.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/rational.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/re.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/ruby.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/select.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/signal.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/sprintf.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/string.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/struct.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/thread.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/time.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/variable.h +bigdecimal.o: $(hdrdir)/ruby/internal/intern/vm.h +bigdecimal.o: $(hdrdir)/ruby/internal/interpreter.h +bigdecimal.o: $(hdrdir)/ruby/internal/iterator.h +bigdecimal.o: $(hdrdir)/ruby/internal/memory.h +bigdecimal.o: $(hdrdir)/ruby/internal/method.h +bigdecimal.o: $(hdrdir)/ruby/internal/module.h +bigdecimal.o: $(hdrdir)/ruby/internal/newobj.h +bigdecimal.o: $(hdrdir)/ruby/internal/rgengc.h +bigdecimal.o: $(hdrdir)/ruby/internal/scan_args.h +bigdecimal.o: $(hdrdir)/ruby/internal/special_consts.h +bigdecimal.o: $(hdrdir)/ruby/internal/static_assert.h +bigdecimal.o: $(hdrdir)/ruby/internal/stdalign.h +bigdecimal.o: $(hdrdir)/ruby/internal/stdbool.h +bigdecimal.o: $(hdrdir)/ruby/internal/symbol.h +bigdecimal.o: $(hdrdir)/ruby/internal/value.h +bigdecimal.o: $(hdrdir)/ruby/internal/value_type.h +bigdecimal.o: $(hdrdir)/ruby/internal/variable.h +bigdecimal.o: $(hdrdir)/ruby/internal/warning_push.h +bigdecimal.o: $(hdrdir)/ruby/internal/xmalloc.h bigdecimal.o: $(hdrdir)/ruby/missing.h bigdecimal.o: $(hdrdir)/ruby/ruby.h bigdecimal.o: $(hdrdir)/ruby/st.h @@ -14,4 +161,168 @@ bigdecimal.o: $(hdrdir)/ruby/subst.h bigdecimal.o: $(hdrdir)/ruby/util.h bigdecimal.o: bigdecimal.c bigdecimal.o: bigdecimal.h +bigdecimal.o: bits.h +bigdecimal.o: feature.h +bigdecimal.o: missing.h +bigdecimal.o: static_assert.h +missing.o: $(RUBY_EXTCONF_H) +missing.o: $(arch_hdrdir)/ruby/config.h +missing.o: $(hdrdir)/ruby/assert.h +missing.o: $(hdrdir)/ruby/atomic.h +missing.o: $(hdrdir)/ruby/backward.h +missing.o: $(hdrdir)/ruby/backward/2/assume.h +missing.o: $(hdrdir)/ruby/backward/2/attributes.h +missing.o: $(hdrdir)/ruby/backward/2/bool.h +missing.o: $(hdrdir)/ruby/backward/2/inttypes.h +missing.o: $(hdrdir)/ruby/backward/2/limits.h +missing.o: $(hdrdir)/ruby/backward/2/long_long.h +missing.o: $(hdrdir)/ruby/backward/2/stdalign.h +missing.o: $(hdrdir)/ruby/backward/2/stdarg.h +missing.o: $(hdrdir)/ruby/defines.h +missing.o: $(hdrdir)/ruby/intern.h +missing.o: $(hdrdir)/ruby/internal/anyargs.h +missing.o: $(hdrdir)/ruby/internal/arithmetic.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/char.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/double.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/int.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/long.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/short.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +missing.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +missing.o: $(hdrdir)/ruby/internal/assume.h +missing.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +missing.o: $(hdrdir)/ruby/internal/attr/artificial.h +missing.o: $(hdrdir)/ruby/internal/attr/cold.h +missing.o: $(hdrdir)/ruby/internal/attr/const.h +missing.o: $(hdrdir)/ruby/internal/attr/constexpr.h +missing.o: $(hdrdir)/ruby/internal/attr/deprecated.h +missing.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +missing.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +missing.o: $(hdrdir)/ruby/internal/attr/error.h +missing.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +missing.o: $(hdrdir)/ruby/internal/attr/forceinline.h +missing.o: $(hdrdir)/ruby/internal/attr/format.h +missing.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +missing.o: $(hdrdir)/ruby/internal/attr/noalias.h +missing.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +missing.o: $(hdrdir)/ruby/internal/attr/noexcept.h +missing.o: $(hdrdir)/ruby/internal/attr/noinline.h +missing.o: $(hdrdir)/ruby/internal/attr/nonnull.h +missing.o: $(hdrdir)/ruby/internal/attr/noreturn.h +missing.o: $(hdrdir)/ruby/internal/attr/pure.h +missing.o: $(hdrdir)/ruby/internal/attr/restrict.h +missing.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +missing.o: $(hdrdir)/ruby/internal/attr/warning.h +missing.o: $(hdrdir)/ruby/internal/attr/weakref.h +missing.o: $(hdrdir)/ruby/internal/cast.h +missing.o: $(hdrdir)/ruby/internal/compiler_is.h +missing.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +missing.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +missing.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +missing.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +missing.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +missing.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +missing.o: $(hdrdir)/ruby/internal/compiler_since.h +missing.o: $(hdrdir)/ruby/internal/config.h +missing.o: $(hdrdir)/ruby/internal/constant_p.h +missing.o: $(hdrdir)/ruby/internal/core.h +missing.o: $(hdrdir)/ruby/internal/core/rarray.h +missing.o: $(hdrdir)/ruby/internal/core/rbasic.h +missing.o: $(hdrdir)/ruby/internal/core/rbignum.h +missing.o: $(hdrdir)/ruby/internal/core/rclass.h +missing.o: $(hdrdir)/ruby/internal/core/rdata.h +missing.o: $(hdrdir)/ruby/internal/core/rfile.h +missing.o: $(hdrdir)/ruby/internal/core/rhash.h +missing.o: $(hdrdir)/ruby/internal/core/robject.h +missing.o: $(hdrdir)/ruby/internal/core/rregexp.h +missing.o: $(hdrdir)/ruby/internal/core/rstring.h +missing.o: $(hdrdir)/ruby/internal/core/rstruct.h +missing.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +missing.o: $(hdrdir)/ruby/internal/ctype.h +missing.o: $(hdrdir)/ruby/internal/dllexport.h +missing.o: $(hdrdir)/ruby/internal/dosish.h +missing.o: $(hdrdir)/ruby/internal/error.h +missing.o: $(hdrdir)/ruby/internal/eval.h +missing.o: $(hdrdir)/ruby/internal/event.h +missing.o: $(hdrdir)/ruby/internal/fl_type.h +missing.o: $(hdrdir)/ruby/internal/gc.h +missing.o: $(hdrdir)/ruby/internal/glob.h +missing.o: $(hdrdir)/ruby/internal/globals.h +missing.o: $(hdrdir)/ruby/internal/has/attribute.h +missing.o: $(hdrdir)/ruby/internal/has/builtin.h +missing.o: $(hdrdir)/ruby/internal/has/c_attribute.h +missing.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +missing.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +missing.o: $(hdrdir)/ruby/internal/has/extension.h +missing.o: $(hdrdir)/ruby/internal/has/feature.h +missing.o: $(hdrdir)/ruby/internal/has/warning.h +missing.o: $(hdrdir)/ruby/internal/intern/array.h +missing.o: $(hdrdir)/ruby/internal/intern/bignum.h +missing.o: $(hdrdir)/ruby/internal/intern/class.h +missing.o: $(hdrdir)/ruby/internal/intern/compar.h +missing.o: $(hdrdir)/ruby/internal/intern/complex.h +missing.o: $(hdrdir)/ruby/internal/intern/cont.h +missing.o: $(hdrdir)/ruby/internal/intern/dir.h +missing.o: $(hdrdir)/ruby/internal/intern/enum.h +missing.o: $(hdrdir)/ruby/internal/intern/enumerator.h +missing.o: $(hdrdir)/ruby/internal/intern/error.h +missing.o: $(hdrdir)/ruby/internal/intern/eval.h +missing.o: $(hdrdir)/ruby/internal/intern/file.h +missing.o: $(hdrdir)/ruby/internal/intern/gc.h +missing.o: $(hdrdir)/ruby/internal/intern/hash.h +missing.o: $(hdrdir)/ruby/internal/intern/io.h +missing.o: $(hdrdir)/ruby/internal/intern/load.h +missing.o: $(hdrdir)/ruby/internal/intern/marshal.h +missing.o: $(hdrdir)/ruby/internal/intern/numeric.h +missing.o: $(hdrdir)/ruby/internal/intern/object.h +missing.o: $(hdrdir)/ruby/internal/intern/parse.h +missing.o: $(hdrdir)/ruby/internal/intern/proc.h +missing.o: $(hdrdir)/ruby/internal/intern/process.h +missing.o: $(hdrdir)/ruby/internal/intern/random.h +missing.o: $(hdrdir)/ruby/internal/intern/range.h +missing.o: $(hdrdir)/ruby/internal/intern/rational.h +missing.o: $(hdrdir)/ruby/internal/intern/re.h +missing.o: $(hdrdir)/ruby/internal/intern/ruby.h +missing.o: $(hdrdir)/ruby/internal/intern/select.h +missing.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +missing.o: $(hdrdir)/ruby/internal/intern/signal.h +missing.o: $(hdrdir)/ruby/internal/intern/sprintf.h +missing.o: $(hdrdir)/ruby/internal/intern/string.h +missing.o: $(hdrdir)/ruby/internal/intern/struct.h +missing.o: $(hdrdir)/ruby/internal/intern/thread.h +missing.o: $(hdrdir)/ruby/internal/intern/time.h +missing.o: $(hdrdir)/ruby/internal/intern/variable.h +missing.o: $(hdrdir)/ruby/internal/intern/vm.h +missing.o: $(hdrdir)/ruby/internal/interpreter.h +missing.o: $(hdrdir)/ruby/internal/iterator.h +missing.o: $(hdrdir)/ruby/internal/memory.h +missing.o: $(hdrdir)/ruby/internal/method.h +missing.o: $(hdrdir)/ruby/internal/module.h +missing.o: $(hdrdir)/ruby/internal/newobj.h +missing.o: $(hdrdir)/ruby/internal/rgengc.h +missing.o: $(hdrdir)/ruby/internal/scan_args.h +missing.o: $(hdrdir)/ruby/internal/special_consts.h +missing.o: $(hdrdir)/ruby/internal/static_assert.h +missing.o: $(hdrdir)/ruby/internal/stdalign.h +missing.o: $(hdrdir)/ruby/internal/stdbool.h +missing.o: $(hdrdir)/ruby/internal/symbol.h +missing.o: $(hdrdir)/ruby/internal/value.h +missing.o: $(hdrdir)/ruby/internal/value_type.h +missing.o: $(hdrdir)/ruby/internal/variable.h +missing.o: $(hdrdir)/ruby/internal/warning_push.h +missing.o: $(hdrdir)/ruby/internal/xmalloc.h +missing.o: $(hdrdir)/ruby/missing.h +missing.o: $(hdrdir)/ruby/ruby.h +missing.o: $(hdrdir)/ruby/st.h +missing.o: $(hdrdir)/ruby/subst.h +missing.o: missing.c +missing.o: missing/dtoa.c # AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/bigdecimal/extconf.rb b/ruby/ext/bigdecimal/extconf.rb index b4098fdac..9b0c55b21 100644 --- a/ruby/ext/bigdecimal/extconf.rb +++ b/ruby/ext/bigdecimal/extconf.rb @@ -3,10 +3,7 @@ def check_bigdecimal_version(gemspec_path) message "checking RUBY_BIGDECIMAL_VERSION... " - - bigdecimal_version = - IO.readlines(gemspec_path) - .grep(/\Abigdecimal_version\s+=\s+/)[0][/\'([^\']+)\'/, 1] + bigdecimal_version = File.read(gemspec_path).match(/^\s*s\.version\s+=\s+['"]([^'"]+)['"]\s*$/)[1] version_components = bigdecimal_version.split('.') bigdecimal_version = version_components[0, 3].join('.') @@ -16,6 +13,20 @@ def check_bigdecimal_version(gemspec_path) message "#{bigdecimal_version}\n" end +def have_builtin_func(name, check_expr, opt = "", &b) + checking_for checking_message(name.funcall_style, nil, opt) do + if try_compile(< +#endif + +#ifdef RBIMPL_HAS_BUILTIN +# define BIGDECIMAL_HAS_BUILTIN(...) RBIMPL_HAS_BUILTIN(__VA_ARGS__) + +#else +# /* The following section is copied from CRuby's builtin.h */ +# +# ifdef __has_builtin +# if defined(__INTEL_COMPILER) +# /* :TODO: Intel C Compiler has __has_builtin (since 19.1 maybe?), and is +# * reportedly broken. We have to skip them. However the situation can +# * change. They might improve someday. We need to revisit here later. */ +# elif defined(__GNUC__) && ! __has_builtin(__builtin_alloca) +# /* FreeBSD's defines its own *broken* version of +# * __has_builtin. Cygwin copied that content to be a victim of the +# * broken-ness. We don't take them into account. */ +# else +# define HAVE___HAS_BUILTIN 1 +# endif +# endif +# +# if defined(HAVE___HAS_BUILTIN) +# define BIGDECIMAL_HAS_BUILTIN(_) __has_builtin(_) +# +# elif defined(__GNUC__) +# define BIGDECIMAL_HAS_BUILTIN(_) BIGDECIMAL_HAS_BUILTIN_ ## _ +# if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 6)) +# define BIGDECIMAL_HAS_BUILTIN___builtin_clz 1 +# define BIGDECIMAL_HAS_BUILTIN___builtin_clzl 1 +# else +# define BIGDECIMAL_HAS_BUILTIN___builtin_clz 0 +# define BIGDECIMAL_HAS_BUILTIN___builtin_clzl 0 +# endif +# elif defined(_MSC_VER) +# define BIGDECIMAL_HAS_BUILTIN(_) 0 +# +# else +# define BIGDECIMAL_HAS_BUILTIN(_) BIGDECIMAL_HAS_BUILTIN_ ## _ +# define BIGDECIMAL_HAS_BUILTIN___builtin_clz HAVE_BUILTIN___BUILTIN_CLZ +# define BIGDECIMAL_HAS_BUILTIN___builtin_clzl HAVE_BUILTIN___BUILTIN_CLZL +# endif +#endif /* RBIMPL_HAS_BUILTIN */ + +#ifndef __has_builtin +# define __has_builtin(...) BIGDECIMAL_HAS_BUILTIN(__VA_ARGS__) +#endif + +#endif /* BIGDECIMAL_HAS_FEATURE_H */ diff --git a/ruby/ext/bigdecimal/lib/bigdecimal/util.rb b/ruby/ext/bigdecimal/lib/bigdecimal/util.rb index 4ece8347b..cb645d2a7 100644 --- a/ruby/ext/bigdecimal/lib/bigdecimal/util.rb +++ b/ruby/ext/bigdecimal/lib/bigdecimal/util.rb @@ -43,7 +43,7 @@ class Float < Numeric # # See also BigDecimal::new. # - def to_d(precision=Float::DIG) + def to_d(precision=0) BigDecimal(self, precision) end end @@ -131,6 +131,39 @@ def to_d(precision) end +class Complex < Numeric + # call-seq: + # cmp.to_d -> bigdecimal + # cmp.to_d(precision) -> bigdecimal + # + # Returns the value as a BigDecimal. + # + # The +precision+ parameter is required for a rational complex number. + # This parameter is used to determine the number of significant digits + # for the result. + # + # require 'bigdecimal' + # require 'bigdecimal/util' + # + # Complex(0.1234567, 0).to_d(4) # => 0.1235e0 + # Complex(Rational(22, 7), 0).to_d(3) # => 0.314e1 + # + # See also BigDecimal::new. + # + def to_d(*args) + BigDecimal(self) unless self.imag.zero? # to raise eerror + + if args.length == 0 + case self.real + when Rational + BigDecimal(self.real) # to raise error + end + end + self.real.to_d(*args) + end +end + + class NilClass # call-seq: # nil.to_d -> bigdecimal diff --git a/ruby/ext/bigdecimal/missing.c b/ruby/ext/bigdecimal/missing.c new file mode 100644 index 000000000..703232d92 --- /dev/null +++ b/ruby/ext/bigdecimal/missing.c @@ -0,0 +1,27 @@ +#include + +#ifdef HAVE_RUBY_ATOMIC_H +# include +#endif + +#ifdef RUBY_ATOMIC_PTR_CAS +# define ATOMIC_PTR_CAS(var, old, new) RUBY_ATOMIC_PTR_CAS(var, old, new) +#endif + +#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +/* GCC warns about unknown sanitizer, which is annoying. */ +# undef NO_SANITIZE +# define NO_SANITIZE(x, y) \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wattributes\"") \ + __attribute__((__no_sanitize__(x))) y; \ + _Pragma("GCC diagnostic pop") +#endif + +#undef strtod +#define strtod BigDecimal_strtod +#undef dtoa +#define dtoa BigDecimal_dtoa +#undef hdtoa +#define hdtoa BigDecimal_hdtoa +#include "missing/dtoa.c" diff --git a/ruby/ext/bigdecimal/missing.h b/ruby/ext/bigdecimal/missing.h new file mode 100644 index 000000000..796984915 --- /dev/null +++ b/ruby/ext/bigdecimal/missing.h @@ -0,0 +1,235 @@ +#ifndef MISSING_H +#define MISSING_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#ifdef HAVE_STDLIB_H +# include +#endif + +#ifdef HAVE_MATH_H +# include +#endif + +#ifndef RB_UNUSED_VAR +# if defined(_MSC_VER) && _MSC_VER >= 1911 +# define RB_UNUSED_VAR(x) x [[maybe_unused]] + +# elif defined(__has_cpp_attribute) && __has_cpp_attribute(maybe_unused) +# define RB_UNUSED_VAR(x) x [[maybe_unused]] + +# elif defined(__has_c_attribute) && __has_c_attribute(maybe_unused) +# define RB_UNUSED_VAR(x) x [[maybe_unused]] + +# elif defined(__GNUC__) +# define RB_UNUSED_VAR(x) x __attribute__ ((unused)) + +# else +# define RB_UNUSED_VAR(x) x +# endif +#endif /* RB_UNUSED_VAR */ + +#if defined(_MSC_VER) && _MSC_VER >= 1310 +# define HAVE___ASSUME + +#elif defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1300 +# define HAVE___ASSUME +#endif + +#ifndef UNREACHABLE +# if __has_builtin(__builtin_unreachable) +# define UNREACHABLE __builtin_unreachable() + +# elif defined(HAVE___ASSUME) +# define UNREACHABLE __assume(0) + +# else +# define UNREACHABLE /* unreachable */ +# endif +#endif /* UNREACHABLE */ + +/* bool */ + +#if defined(__bool_true_false_are_defined) +# /* Take that. */ + +#elif defined(HAVE_STDBOOL_H) +# include + +#else +typedef unsigned char _Bool; +# define bool _Bool +# define true ((_Bool)+1) +# define false ((_Bool)-1) +# define __bool_true_false_are_defined +#endif + +/* abs */ + +#ifndef HAVE_LABS +static inline long +labs(long const x) +{ + if (x < 0) return -x; + return x; +} +#endif + +#ifndef HAVE_LLABS +static inline LONG_LONG +llabs(LONG_LONG const x) +{ + if (x < 0) return -x; + return x; +} +#endif + +#ifdef vabs +# undef vabs +#endif +#if SIZEOF_VALUE <= SIZEOF_INT +# define vabs abs +#elif SIZEOF_VALUE <= SIZEOF_LONG +# define vabs labs +#elif SIZEOF_VALUE <= SIZEOF_LONG_LONG +# define vabs llabs +#endif + +/* finite */ + +#ifndef HAVE_FINITE +static int +finite(double) +{ + return !isnan(n) && !isinf(n); +} +#endif + +#ifndef isfinite +# ifndef HAVE_ISFINITE +# define HAVE_ISFINITE 1 +# define isfinite(x) finite(x) +# endif +#endif + +/* dtoa */ +char *BigDecimal_dtoa(double d_, int mode, int ndigits, int *decpt, int *sign, char **rve); + +/* rational */ + +#ifndef HAVE_RB_RATIONAL_NUM +static inline VALUE +rb_rational_num(VALUE rat) +{ +#ifdef HAVE_TYPE_STRUCT_RRATIONAL + return RRATIONAL(rat)->num; +#else + return rb_funcall(rat, rb_intern("numerator"), 0); +#endif +} +#endif + +#ifndef HAVE_RB_RATIONAL_DEN +static inline VALUE +rb_rational_den(VALUE rat) +{ +#ifdef HAVE_TYPE_STRUCT_RRATIONAL + return RRATIONAL(rat)->den; +#else + return rb_funcall(rat, rb_intern("denominator"), 0); +#endif +} +#endif + +/* complex */ + +#ifndef HAVE_RB_COMPLEX_REAL +static inline VALUE +rb_complex_real(VALUE cmp) +{ +#ifdef HAVE_TYPE_STRUCT_RCOMPLEX + return RCOMPLEX(cmp)->real; +#else + return rb_funcall(cmp, rb_intern("real"), 0); +#endif +} +#endif + +#ifndef HAVE_RB_COMPLEX_IMAG +static inline VALUE +rb_complex_imag(VALUE cmp) +{ +# ifdef HAVE_TYPE_STRUCT_RCOMPLEX + return RCOMPLEX(cmp)->imag; +# else + return rb_funcall(cmp, rb_intern("imag"), 0); +# endif +} +#endif + +/* array */ + +#ifndef FIX_CONST_VALUE_PTR +# if defined(__fcc__) || defined(__fcc_version) || \ + defined(__FCC__) || defined(__FCC_VERSION) +/* workaround for old version of Fujitsu C Compiler (fcc) */ +# define FIX_CONST_VALUE_PTR(x) ((const VALUE *)(x)) +# else +# define FIX_CONST_VALUE_PTR(x) (x) +# endif +#endif + +#ifndef HAVE_RB_ARRAY_CONST_PTR +static inline const VALUE * +rb_array_const_ptr(VALUE a) +{ + return FIX_CONST_VALUE_PTR((RBASIC(a)->flags & RARRAY_EMBED_FLAG) ? + RARRAY(a)->as.ary : RARRAY(a)->as.heap.ptr); +} +#endif + +#ifndef RARRAY_CONST_PTR +# define RARRAY_CONST_PTR(a) rb_array_const_ptr(a) +#endif + +#ifndef RARRAY_AREF +# define RARRAY_AREF(a, i) (RARRAY_CONST_PTR(a)[i]) +#endif + +/* symbol */ + +#ifndef HAVE_RB_SYM2STR +static inline VALUE +rb_sym2str(VALUE sym) +{ + return rb_id2str(SYM2ID(sym)); +} +#endif + +/* st */ + +#ifndef ST2FIX +# undef RB_ST2FIX +# define RB_ST2FIX(h) LONG2FIX((long)(h)) +# define ST2FIX(h) RB_ST2FIX(h) +#endif + +/* warning */ + +#if !defined(HAVE_RB_CATEGORY_WARN) || !defined(HAVE_CONST_RB_WARN_CATEGORY_DEPRECATED) +# define rb_category_warn(category, ...) rb_warn(__VA_ARGS__) +#endif + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* MISSING_H */ diff --git a/ruby/ext/bigdecimal/missing/dtoa.c b/ruby/ext/bigdecimal/missing/dtoa.c new file mode 100644 index 000000000..41b0a221d --- /dev/null +++ b/ruby/ext/bigdecimal/missing/dtoa.c @@ -0,0 +1,3462 @@ +/**************************************************************** + * + * The author of this software is David M. Gay. + * + * 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 + * is included in all copies of any software which is or includes a copy + * or modification of this software and in all copies of the supporting + * documentation for such software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + ***************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +/* On a machine with IEEE extended-precision registers, it is + * necessary to specify double-precision (53-bit) rounding precision + * before invoking strtod or dtoa. If the machine uses (the equivalent + * of) Intel 80x87 arithmetic, the call + * _control87(PC_53, MCW_PC); + * does this with many compilers. Whether this or another call is + * appropriate depends on the compiler; for this to work, it may be + * necessary to #include "float.h" or another system-dependent header + * file. + */ + +/* strtod for IEEE-, VAX-, and IBM-arithmetic machines. + * + * This strtod returns a nearest machine number to the input decimal + * string (or sets errno to ERANGE). With IEEE arithmetic, ties are + * broken by the IEEE round-even rule. Otherwise ties are broken by + * biased rounding (add half and chop). + * + * Inspired loosely by William D. Clinger's paper "How to Read Floating + * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101]. + * + * Modifications: + * + * 1. We only require IEEE, IBM, or VAX double-precision + * arithmetic (not IEEE double-extended). + * 2. We get by with floating-point arithmetic in a case that + * Clinger missed -- when we're computing d * 10^n + * for a small integer d and the integer n is not too + * much larger than 22 (the maximum integer k for which + * we can represent 10^k exactly), we may be able to + * compute (d*10^k) * 10^(e-k) with just one roundoff. + * 3. Rather than a bit-at-a-time adjustment of the binary + * result in the hard case, we use floating-point + * arithmetic to determine the adjustment to within + * one bit; only in really hard cases do we need to + * compute a second residual. + * 4. Because of 3., we don't need a large table of powers of 10 + * for ten-to-e (just some small tables, e.g. of 10^k + * for 0 <= k <= 22). + */ + +/* + * #define IEEE_LITTLE_ENDIAN for IEEE-arithmetic machines where the least + * significant byte has the lowest address. + * #define IEEE_BIG_ENDIAN for IEEE-arithmetic machines where the most + * significant byte has the lowest address. + * #define Long int on machines with 32-bit ints and 64-bit longs. + * #define IBM for IBM mainframe-style floating-point arithmetic. + * #define VAX for VAX-style floating-point arithmetic (D_floating). + * #define No_leftright to omit left-right logic in fast floating-point + * computation of dtoa. + * #define Honor_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3 + * and strtod and dtoa should round accordingly. + * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3 + * and Honor_FLT_ROUNDS is not #defined. + * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines + * that use extended-precision instructions to compute rounded + * products and quotients) with IBM. + * #define ROUND_BIASED for IEEE-format with biased rounding. + * #define Inaccurate_Divide for IEEE-format with correctly rounded + * products but inaccurate quotients, e.g., for Intel i860. + * #define NO_LONG_LONG on machines that do not have a "long long" + * integer type (of >= 64 bits). On such machines, you can + * #define Just_16 to store 16 bits per 32-bit Long when doing + * high-precision integer arithmetic. Whether this speeds things + * up or slows things down depends on the machine and the number + * being converted. If long long is available and the name is + * something other than "long long", #define Llong to be the name, + * and if "unsigned Llong" does not work as an unsigned version of + * Llong, #define #ULLong to be the corresponding unsigned type. + * #define KR_headers for old-style C function headers. + * #define Bad_float_h if your system lacks a float.h or if it does not + * define some or all of DBL_DIG, DBL_MAX_10_EXP, DBL_MAX_EXP, + * FLT_RADIX, FLT_ROUNDS, and DBL_MAX. + * #define MALLOC your_malloc, where your_malloc(n) acts like malloc(n) + * if memory is available and otherwise does something you deem + * appropriate. If MALLOC is undefined, malloc will be invoked + * directly -- and assumed always to succeed. + * #define Omit_Private_Memory to omit logic (added Jan. 1998) for making + * memory allocations from a private pool of memory when possible. + * When used, the private pool is PRIVATE_MEM bytes long: 2304 bytes, + * unless #defined to be a different length. This default length + * suffices to get rid of MALLOC calls except for unusual cases, + * such as decimal-to-binary conversion of a very long string of + * digits. The longest string dtoa can return is about 751 bytes + * long. For conversions by strtod of strings of 800 digits and + * all dtoa conversions in single-threaded executions with 8-byte + * pointers, PRIVATE_MEM >= 7400 appears to suffice; with 4-byte + * pointers, PRIVATE_MEM >= 7112 appears adequate. + * #define INFNAN_CHECK on IEEE systems to cause strtod to check for + * Infinity and NaN (case insensitively). On some systems (e.g., + * some HP systems), it may be necessary to #define NAN_WORD0 + * appropriately -- to the most significant word of a quiet NaN. + * (On HP Series 700/800 machines, -DNAN_WORD0=0x7ff40000 works.) + * When INFNAN_CHECK is #defined and No_Hex_NaN is not #defined, + * strtod also accepts (case insensitively) strings of the form + * NaN(x), where x is a string of hexadecimal digits and spaces; + * if there is only one string of hexadecimal digits, it is taken + * for the 52 fraction bits of the resulting NaN; if there are two + * or more strings of hex digits, the first is for the high 20 bits, + * the second and subsequent for the low 32 bits, with intervening + * white space ignored; but if this results in none of the 52 + * fraction bits being on (an IEEE Infinity symbol), then NAN_WORD0 + * and NAN_WORD1 are used instead. + * #define MULTIPLE_THREADS if the system offers preemptively scheduled + * multiple threads. In this case, you must provide (or suitably + * #define) two locks, acquired by ACQUIRE_DTOA_LOCK(n) and freed + * by FREE_DTOA_LOCK(n) for n = 0 or 1. (The second lock, accessed + * in pow5mult, ensures lazy evaluation of only one copy of high + * powers of 5; omitting this lock would introduce a small + * probability of wasting memory, but would otherwise be harmless.) + * You must also invoke freedtoa(s) to free the value s returned by + * dtoa. You may do so whether or not MULTIPLE_THREADS is #defined. + * #define NO_IEEE_Scale to disable new (Feb. 1997) logic in strtod that + * avoids underflows on inputs whose result does not underflow. + * If you #define NO_IEEE_Scale on a machine that uses IEEE-format + * floating-point numbers and flushes underflows to zero rather + * than implementing gradual underflow, then you must also #define + * Sudden_Underflow. + * #define YES_ALIAS to permit aliasing certain double values with + * arrays of ULongs. This leads to slightly better code with + * some compilers and was always used prior to 19990916, but it + * is not strictly legal and can cause trouble with aggressively + * optimizing compilers (e.g., gcc 2.95.1 under -O2). + * #define USE_LOCALE to use the current locale's decimal_point value. + * #define SET_INEXACT if IEEE arithmetic is being used and extra + * computation should be done to set the inexact flag when the + * result is inexact and avoid setting inexact when the result + * is exact. In this case, dtoa.c must be compiled in + * an environment, perhaps provided by #include "dtoa.c" in a + * suitable wrapper, that defines two functions, + * int get_inexact(void); + * void clear_inexact(void); + * such that get_inexact() returns a nonzero value if the + * inexact bit is already set, and clear_inexact() sets the + * inexact bit to 0. When SET_INEXACT is #defined, strtod + * also does extra computations to set the underflow and overflow + * flags when appropriate (i.e., when the result is tiny and + * inexact or when it is a numeric value rounded to +-infinity). + * #define NO_ERRNO if strtod should not assign errno = ERANGE when + * the result overflows to +-Infinity or underflows to 0. + */ + +#ifdef WORDS_BIGENDIAN +#define IEEE_BIG_ENDIAN +#else +#define IEEE_LITTLE_ENDIAN +#endif + +#ifdef __vax__ +#define VAX +#undef IEEE_BIG_ENDIAN +#undef IEEE_LITTLE_ENDIAN +#endif + +#if defined(__arm__) && !defined(__VFP_FP__) +#define IEEE_BIG_ENDIAN +#undef IEEE_LITTLE_ENDIAN +#endif + +#undef Long +#undef ULong + +#include + +#if (INT_MAX >> 30) && !(INT_MAX >> 31) +#define Long int +#define ULong unsigned int +#elif (LONG_MAX >> 30) && !(LONG_MAX >> 31) +#define Long long int +#define ULong unsigned long int +#else +#error No 32bit integer +#endif + +#if HAVE_LONG_LONG +#define Llong LONG_LONG +#else +#define NO_LONG_LONG +#endif + +#ifdef DEBUG +#include +#define Bug(x) {fprintf(stderr, "%s\n", (x)); exit(EXIT_FAILURE);} +#endif + +#ifndef ISDIGIT +#include +#define ISDIGIT(c) isdigit(c) +#endif +#include +#include +#include + +#ifdef USE_LOCALE +#include +#endif + +#ifdef MALLOC +extern void *MALLOC(size_t); +#else +#define MALLOC xmalloc +#endif +#ifdef FREE +extern void FREE(void*); +#else +#define FREE xfree +#endif +#ifndef NO_SANITIZE +#define NO_SANITIZE(x, y) y +#endif + +#ifndef Omit_Private_Memory +#ifndef PRIVATE_MEM +#define PRIVATE_MEM 2304 +#endif +#define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double)) +static double private_mem[PRIVATE_mem], *pmem_next = private_mem; +#endif + +#undef IEEE_Arith +#undef Avoid_Underflow +#ifdef IEEE_BIG_ENDIAN +#define IEEE_Arith +#endif +#ifdef IEEE_LITTLE_ENDIAN +#define IEEE_Arith +#endif + +#ifdef Bad_float_h + +#ifdef IEEE_Arith +#define DBL_DIG 15 +#define DBL_MAX_10_EXP 308 +#define DBL_MAX_EXP 1024 +#define FLT_RADIX 2 +#endif /*IEEE_Arith*/ + +#ifdef IBM +#define DBL_DIG 16 +#define DBL_MAX_10_EXP 75 +#define DBL_MAX_EXP 63 +#define FLT_RADIX 16 +#define DBL_MAX 7.2370055773322621e+75 +#endif + +#ifdef VAX +#define DBL_DIG 16 +#define DBL_MAX_10_EXP 38 +#define DBL_MAX_EXP 127 +#define FLT_RADIX 2 +#define DBL_MAX 1.7014118346046923e+38 +#endif + +#ifndef LONG_MAX +#define LONG_MAX 2147483647 +#endif + +#else /* ifndef Bad_float_h */ +#include +#endif /* Bad_float_h */ + +#include + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#ifndef hexdigit +static const char hexdigit[] = "0123456789abcdef0123456789ABCDEF"; +#endif + +#if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) + defined(VAX) + defined(IBM) != 1 +Exactly one of IEEE_LITTLE_ENDIAN, IEEE_BIG_ENDIAN, VAX, or IBM should be defined. +#endif + +typedef union { double d; ULong L[2]; } U; + +#ifdef YES_ALIAS +typedef double double_u; +# define dval(x) (x) +# ifdef IEEE_LITTLE_ENDIAN +# define word0(x) (((ULong *)&(x))[1]) +# define word1(x) (((ULong *)&(x))[0]) +# else +# define word0(x) (((ULong *)&(x))[0]) +# define word1(x) (((ULong *)&(x))[1]) +# endif +#else +typedef U double_u; +# ifdef IEEE_LITTLE_ENDIAN +# define word0(x) ((x).L[1]) +# define word1(x) ((x).L[0]) +# else +# define word0(x) ((x).L[0]) +# define word1(x) ((x).L[1]) +# endif +# define dval(x) ((x).d) +#endif + +/* The following definition of Storeinc is appropriate for MIPS processors. + * An alternative that might be better on some machines is + * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff) + */ +#if defined(IEEE_LITTLE_ENDIAN) + defined(VAX) + defined(__arm__) +#define Storeinc(a,b,c) (((unsigned short *)(a))[1] = (unsigned short)(b), \ +((unsigned short *)(a))[0] = (unsigned short)(c), (a)++) +#else +#define Storeinc(a,b,c) (((unsigned short *)(a))[0] = (unsigned short)(b), \ +((unsigned short *)(a))[1] = (unsigned short)(c), (a)++) +#endif + +/* #define P DBL_MANT_DIG */ +/* Ten_pmax = floor(P*log(2)/log(5)) */ +/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */ +/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */ +/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */ + +#ifdef IEEE_Arith +#define Exp_shift 20 +#define Exp_shift1 20 +#define Exp_msk1 0x100000 +#define Exp_msk11 0x100000 +#define Exp_mask 0x7ff00000 +#define P 53 +#define Bias 1023 +#define Emin (-1022) +#define Exp_1 0x3ff00000 +#define Exp_11 0x3ff00000 +#define Ebits 11 +#define Frac_mask 0xfffff +#define Frac_mask1 0xfffff +#define Ten_pmax 22 +#define Bletch 0x10 +#define Bndry_mask 0xfffff +#define Bndry_mask1 0xfffff +#define LSB 1 +#define Sign_bit 0x80000000 +#define Log2P 1 +#define Tiny0 0 +#define Tiny1 1 +#define Quick_max 14 +#define Int_max 14 +#ifndef NO_IEEE_Scale +#define Avoid_Underflow +#ifdef Flush_Denorm /* debugging option */ +#undef Sudden_Underflow +#endif +#endif + +#ifndef Flt_Rounds +#ifdef FLT_ROUNDS +#define Flt_Rounds FLT_ROUNDS +#else +#define Flt_Rounds 1 +#endif +#endif /*Flt_Rounds*/ + +#ifdef Honor_FLT_ROUNDS +#define Rounding rounding +#undef Check_FLT_ROUNDS +#define Check_FLT_ROUNDS +#else +#define Rounding Flt_Rounds +#endif + +#else /* ifndef IEEE_Arith */ +#undef Check_FLT_ROUNDS +#undef Honor_FLT_ROUNDS +#undef SET_INEXACT +#undef Sudden_Underflow +#define Sudden_Underflow +#ifdef IBM +#undef Flt_Rounds +#define Flt_Rounds 0 +#define Exp_shift 24 +#define Exp_shift1 24 +#define Exp_msk1 0x1000000 +#define Exp_msk11 0x1000000 +#define Exp_mask 0x7f000000 +#define P 14 +#define Bias 65 +#define Exp_1 0x41000000 +#define Exp_11 0x41000000 +#define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */ +#define Frac_mask 0xffffff +#define Frac_mask1 0xffffff +#define Bletch 4 +#define Ten_pmax 22 +#define Bndry_mask 0xefffff +#define Bndry_mask1 0xffffff +#define LSB 1 +#define Sign_bit 0x80000000 +#define Log2P 4 +#define Tiny0 0x100000 +#define Tiny1 0 +#define Quick_max 14 +#define Int_max 15 +#else /* VAX */ +#undef Flt_Rounds +#define Flt_Rounds 1 +#define Exp_shift 23 +#define Exp_shift1 7 +#define Exp_msk1 0x80 +#define Exp_msk11 0x800000 +#define Exp_mask 0x7f80 +#define P 56 +#define Bias 129 +#define Exp_1 0x40800000 +#define Exp_11 0x4080 +#define Ebits 8 +#define Frac_mask 0x7fffff +#define Frac_mask1 0xffff007f +#define Ten_pmax 24 +#define Bletch 2 +#define Bndry_mask 0xffff007f +#define Bndry_mask1 0xffff007f +#define LSB 0x10000 +#define Sign_bit 0x8000 +#define Log2P 1 +#define Tiny0 0x80 +#define Tiny1 0 +#define Quick_max 15 +#define Int_max 15 +#endif /* IBM, VAX */ +#endif /* IEEE_Arith */ + +#ifndef IEEE_Arith +#define ROUND_BIASED +#endif + +#ifdef RND_PRODQUOT +#define rounded_product(a,b) ((a) = rnd_prod((a), (b))) +#define rounded_quotient(a,b) ((a) = rnd_quot((a), (b))) +extern double rnd_prod(double, double), rnd_quot(double, double); +#else +#define rounded_product(a,b) ((a) *= (b)) +#define rounded_quotient(a,b) ((a) /= (b)) +#endif + +#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) +#define Big1 0xffffffff + +#ifndef Pack_32 +#define Pack_32 +#endif + +#define FFFFFFFF 0xffffffffUL + +#ifdef NO_LONG_LONG +#undef ULLong +#ifdef Just_16 +#undef Pack_32 +/* When Pack_32 is not defined, we store 16 bits per 32-bit Long. + * This makes some inner loops simpler and sometimes saves work + * during multiplications, but it often seems to make things slightly + * slower. Hence the default is now to store 32 bits per Long. + */ +#endif +#else /* long long available */ +#ifndef Llong +#define Llong long long +#endif +#ifndef ULLong +#define ULLong unsigned Llong +#endif +#endif /* NO_LONG_LONG */ + +#define MULTIPLE_THREADS 1 + +#ifndef MULTIPLE_THREADS +#define ACQUIRE_DTOA_LOCK(n) /*nothing*/ +#define FREE_DTOA_LOCK(n) /*nothing*/ +#else +#define ACQUIRE_DTOA_LOCK(n) /*unused right now*/ +#define FREE_DTOA_LOCK(n) /*unused right now*/ +#endif + +#ifndef ATOMIC_PTR_CAS +#define ATOMIC_PTR_CAS(var, old, new) ((var) = (new), (old)) +#endif +#ifndef LIKELY +#define LIKELY(x) (x) +#endif +#ifndef UNLIKELY +#define UNLIKELY(x) (x) +#endif +#ifndef ASSUME +#define ASSUME(x) (void)(x) +#endif + +#define Kmax 15 + +struct Bigint { + struct Bigint *next; + int k, maxwds, sign, wds; + ULong x[1]; +}; + +typedef struct Bigint Bigint; + +static Bigint *freelist[Kmax+1]; + +static Bigint * +Balloc(int k) +{ + int x; + Bigint *rv; +#ifndef Omit_Private_Memory + size_t len; +#endif + + rv = 0; + ACQUIRE_DTOA_LOCK(0); + if (k <= Kmax) { + rv = freelist[k]; + while (rv) { + Bigint *rvn = rv; + rv = ATOMIC_PTR_CAS(freelist[k], rv, rv->next); + if (LIKELY(rvn == rv)) { + ASSUME(rv); + break; + } + } + } + if (!rv) { + x = 1 << k; +#ifdef Omit_Private_Memory + rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(ULong)); +#else + len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1) + /sizeof(double); + if (k <= Kmax) { + double *pnext = pmem_next; + while (pnext - private_mem + len <= PRIVATE_mem) { + double *p = pnext; + pnext = ATOMIC_PTR_CAS(pmem_next, pnext, pnext + len); + if (LIKELY(p == pnext)) { + rv = (Bigint*)pnext; + ASSUME(rv); + break; + } + } + } + if (!rv) + rv = (Bigint*)MALLOC(len*sizeof(double)); +#endif + rv->k = k; + rv->maxwds = x; + } + FREE_DTOA_LOCK(0); + rv->sign = rv->wds = 0; + return rv; +} + +static void +Bfree(Bigint *v) +{ + Bigint *vn; + if (v) { + if (v->k > Kmax) { + FREE(v); + return; + } + ACQUIRE_DTOA_LOCK(0); + do { + vn = v->next = freelist[v->k]; + } while (UNLIKELY(ATOMIC_PTR_CAS(freelist[v->k], vn, v) != vn)); + FREE_DTOA_LOCK(0); + } +} + +#define Bcopy(x,y) memcpy((char *)&(x)->sign, (char *)&(y)->sign, \ +(y)->wds*sizeof(Long) + 2*sizeof(int)) + +static Bigint * +multadd(Bigint *b, int m, int a) /* multiply by m and add a */ +{ + int i, wds; + ULong *x; +#ifdef ULLong + ULLong carry, y; +#else + ULong carry, y; +#ifdef Pack_32 + ULong xi, z; +#endif +#endif + Bigint *b1; + + wds = b->wds; + x = b->x; + i = 0; + carry = a; + do { +#ifdef ULLong + y = *x * (ULLong)m + carry; + carry = y >> 32; + *x++ = (ULong)(y & FFFFFFFF); +#else +#ifdef Pack_32 + xi = *x; + y = (xi & 0xffff) * m + carry; + z = (xi >> 16) * m + (y >> 16); + carry = z >> 16; + *x++ = (z << 16) + (y & 0xffff); +#else + y = *x * m + carry; + carry = y >> 16; + *x++ = y & 0xffff; +#endif +#endif + } while (++i < wds); + if (carry) { + if (wds >= b->maxwds) { + b1 = Balloc(b->k+1); + Bcopy(b1, b); + Bfree(b); + b = b1; + } + b->x[wds++] = (ULong)carry; + b->wds = wds; + } + return b; +} + +static Bigint * +s2b(const char *s, int nd0, int nd, ULong y9) +{ + Bigint *b; + int i, k; + Long x, y; + + x = (nd + 8) / 9; + for (k = 0, y = 1; x > y; y <<= 1, k++) ; +#ifdef Pack_32 + b = Balloc(k); + b->x[0] = y9; + b->wds = 1; +#else + b = Balloc(k+1); + b->x[0] = y9 & 0xffff; + b->wds = (b->x[1] = y9 >> 16) ? 2 : 1; +#endif + + i = 9; + if (9 < nd0) { + s += 9; + do { + b = multadd(b, 10, *s++ - '0'); + } while (++i < nd0); + s++; + } + else + s += 10; + for (; i < nd; i++) + b = multadd(b, 10, *s++ - '0'); + return b; +} + +static int +hi0bits(register ULong x) +{ + register int k = 0; + + if (!(x & 0xffff0000)) { + k = 16; + x <<= 16; + } + if (!(x & 0xff000000)) { + k += 8; + x <<= 8; + } + if (!(x & 0xf0000000)) { + k += 4; + x <<= 4; + } + if (!(x & 0xc0000000)) { + k += 2; + x <<= 2; + } + if (!(x & 0x80000000)) { + k++; + if (!(x & 0x40000000)) + return 32; + } + return k; +} + +static int +lo0bits(ULong *y) +{ + register int k; + register ULong x = *y; + + if (x & 7) { + if (x & 1) + return 0; + if (x & 2) { + *y = x >> 1; + return 1; + } + *y = x >> 2; + return 2; + } + k = 0; + if (!(x & 0xffff)) { + k = 16; + x >>= 16; + } + if (!(x & 0xff)) { + k += 8; + x >>= 8; + } + if (!(x & 0xf)) { + k += 4; + x >>= 4; + } + if (!(x & 0x3)) { + k += 2; + x >>= 2; + } + if (!(x & 1)) { + k++; + x >>= 1; + if (!x) + return 32; + } + *y = x; + return k; +} + +static Bigint * +i2b(int i) +{ + Bigint *b; + + b = Balloc(1); + b->x[0] = i; + b->wds = 1; + return b; +} + +static Bigint * +mult(Bigint *a, Bigint *b) +{ + Bigint *c; + int k, wa, wb, wc; + ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0; + ULong y; +#ifdef ULLong + ULLong carry, z; +#else + ULong carry, z; +#ifdef Pack_32 + ULong z2; +#endif +#endif + + if (a->wds < b->wds) { + c = a; + a = b; + b = c; + } + k = a->k; + wa = a->wds; + wb = b->wds; + wc = wa + wb; + if (wc > a->maxwds) + k++; + c = Balloc(k); + for (x = c->x, xa = x + wc; x < xa; x++) + *x = 0; + xa = a->x; + xae = xa + wa; + xb = b->x; + xbe = xb + wb; + xc0 = c->x; +#ifdef ULLong + for (; xb < xbe; xc0++) { + if ((y = *xb++) != 0) { + x = xa; + xc = xc0; + carry = 0; + do { + z = *x++ * (ULLong)y + *xc + carry; + carry = z >> 32; + *xc++ = (ULong)(z & FFFFFFFF); + } while (x < xae); + *xc = (ULong)carry; + } + } +#else +#ifdef Pack_32 + for (; xb < xbe; xb++, xc0++) { + if ((y = *xb & 0xffff) != 0) { + x = xa; + xc = xc0; + carry = 0; + do { + z = (*x & 0xffff) * y + (*xc & 0xffff) + carry; + carry = z >> 16; + z2 = (*x++ >> 16) * y + (*xc >> 16) + carry; + carry = z2 >> 16; + Storeinc(xc, z2, z); + } while (x < xae); + *xc = (ULong)carry; + } + if ((y = *xb >> 16) != 0) { + x = xa; + xc = xc0; + carry = 0; + z2 = *xc; + do { + z = (*x & 0xffff) * y + (*xc >> 16) + carry; + carry = z >> 16; + Storeinc(xc, z, z2); + z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry; + carry = z2 >> 16; + } while (x < xae); + *xc = z2; + } + } +#else + for (; xb < xbe; xc0++) { + if (y = *xb++) { + x = xa; + xc = xc0; + carry = 0; + do { + z = *x++ * y + *xc + carry; + carry = z >> 16; + *xc++ = z & 0xffff; + } while (x < xae); + *xc = (ULong)carry; + } + } +#endif +#endif + for (xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ; + c->wds = wc; + return c; +} + +static Bigint *p5s; + +static Bigint * +pow5mult(Bigint *b, int k) +{ + Bigint *b1, *p5, *p51; + Bigint *p5tmp; + int i; + static const int p05[3] = { 5, 25, 125 }; + + if ((i = k & 3) != 0) + b = multadd(b, p05[i-1], 0); + + if (!(k >>= 2)) + return b; + if (!(p5 = p5s)) { + /* first time */ + ACQUIRE_DTOA_LOCK(1); + if (!(p5 = p5s)) { + p5 = i2b(625); + p5->next = 0; + p5tmp = ATOMIC_PTR_CAS(p5s, NULL, p5); + if (UNLIKELY(p5tmp)) { + Bfree(p5); + p5 = p5tmp; + } + } + FREE_DTOA_LOCK(1); + } + for (;;) { + if (k & 1) { + b1 = mult(b, p5); + Bfree(b); + b = b1; + } + if (!(k >>= 1)) + break; + if (!(p51 = p5->next)) { + ACQUIRE_DTOA_LOCK(1); + if (!(p51 = p5->next)) { + p51 = mult(p5,p5); + p51->next = 0; + p5tmp = ATOMIC_PTR_CAS(p5->next, NULL, p51); + if (UNLIKELY(p5tmp)) { + Bfree(p51); + p51 = p5tmp; + } + } + FREE_DTOA_LOCK(1); + } + p5 = p51; + } + return b; +} + +static Bigint * +lshift(Bigint *b, int k) +{ + int i, k1, n, n1; + Bigint *b1; + ULong *x, *x1, *xe, z; + +#ifdef Pack_32 + n = k >> 5; +#else + n = k >> 4; +#endif + k1 = b->k; + n1 = n + b->wds + 1; + for (i = b->maxwds; n1 > i; i <<= 1) + k1++; + b1 = Balloc(k1); + x1 = b1->x; + for (i = 0; i < n; i++) + *x1++ = 0; + x = b->x; + xe = x + b->wds; +#ifdef Pack_32 + if (k &= 0x1f) { + k1 = 32 - k; + z = 0; + do { + *x1++ = *x << k | z; + z = *x++ >> k1; + } while (x < xe); + if ((*x1 = z) != 0) + ++n1; + } +#else + if (k &= 0xf) { + k1 = 16 - k; + z = 0; + do { + *x1++ = *x << k & 0xffff | z; + z = *x++ >> k1; + } while (x < xe); + if (*x1 = z) + ++n1; + } +#endif + else + do { + *x1++ = *x++; + } while (x < xe); + b1->wds = n1 - 1; + Bfree(b); + return b1; +} + +static int +cmp(Bigint *a, Bigint *b) +{ + ULong *xa, *xa0, *xb, *xb0; + int i, j; + + i = a->wds; + j = b->wds; +#ifdef DEBUG + if (i > 1 && !a->x[i-1]) + Bug("cmp called with a->x[a->wds-1] == 0"); + if (j > 1 && !b->x[j-1]) + Bug("cmp called with b->x[b->wds-1] == 0"); +#endif + if (i -= j) + return i; + xa0 = a->x; + xa = xa0 + j; + xb0 = b->x; + xb = xb0 + j; + for (;;) { + if (*--xa != *--xb) + return *xa < *xb ? -1 : 1; + if (xa <= xa0) + break; + } + return 0; +} + +NO_SANITIZE("unsigned-integer-overflow", static Bigint * diff(Bigint *a, Bigint *b)); +static Bigint * +diff(Bigint *a, Bigint *b) +{ + Bigint *c; + int i, wa, wb; + ULong *xa, *xae, *xb, *xbe, *xc; +#ifdef ULLong + ULLong borrow, y; +#else + ULong borrow, y; +#ifdef Pack_32 + ULong z; +#endif +#endif + + i = cmp(a,b); + if (!i) { + c = Balloc(0); + c->wds = 1; + c->x[0] = 0; + return c; + } + if (i < 0) { + c = a; + a = b; + b = c; + i = 1; + } + else + i = 0; + c = Balloc(a->k); + c->sign = i; + wa = a->wds; + xa = a->x; + xae = xa + wa; + wb = b->wds; + xb = b->x; + xbe = xb + wb; + xc = c->x; + borrow = 0; +#ifdef ULLong + do { + y = (ULLong)*xa++ - *xb++ - borrow; + borrow = y >> 32 & (ULong)1; + *xc++ = (ULong)(y & FFFFFFFF); + } while (xb < xbe); + while (xa < xae) { + y = *xa++ - borrow; + borrow = y >> 32 & (ULong)1; + *xc++ = (ULong)(y & FFFFFFFF); + } +#else +#ifdef Pack_32 + do { + y = (*xa & 0xffff) - (*xb & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + z = (*xa++ >> 16) - (*xb++ >> 16) - borrow; + borrow = (z & 0x10000) >> 16; + Storeinc(xc, z, y); + } while (xb < xbe); + while (xa < xae) { + y = (*xa & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + z = (*xa++ >> 16) - borrow; + borrow = (z & 0x10000) >> 16; + Storeinc(xc, z, y); + } +#else + do { + y = *xa++ - *xb++ - borrow; + borrow = (y & 0x10000) >> 16; + *xc++ = y & 0xffff; + } while (xb < xbe); + while (xa < xae) { + y = *xa++ - borrow; + borrow = (y & 0x10000) >> 16; + *xc++ = y & 0xffff; + } +#endif +#endif + while (!*--xc) + wa--; + c->wds = wa; + return c; +} + +static double +ulp(double x_) +{ + register Long L; + double_u x, a; + dval(x) = x_; + + L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1; +#ifndef Avoid_Underflow +#ifndef Sudden_Underflow + if (L > 0) { +#endif +#endif +#ifdef IBM + L |= Exp_msk1 >> 4; +#endif + word0(a) = L; + word1(a) = 0; +#ifndef Avoid_Underflow +#ifndef Sudden_Underflow + } + else { + L = -L >> Exp_shift; + if (L < Exp_shift) { + word0(a) = 0x80000 >> L; + word1(a) = 0; + } + else { + word0(a) = 0; + L -= Exp_shift; + word1(a) = L >= 31 ? 1 : 1 << 31 - L; + } + } +#endif +#endif + return dval(a); +} + +static double +b2d(Bigint *a, int *e) +{ + ULong *xa, *xa0, w, y, z; + int k; + double_u d; +#ifdef VAX + ULong d0, d1; +#else +#define d0 word0(d) +#define d1 word1(d) +#endif + + xa0 = a->x; + xa = xa0 + a->wds; + y = *--xa; +#ifdef DEBUG + if (!y) Bug("zero y in b2d"); +#endif + k = hi0bits(y); + *e = 32 - k; +#ifdef Pack_32 + if (k < Ebits) { + d0 = Exp_1 | y >> (Ebits - k); + w = xa > xa0 ? *--xa : 0; + d1 = y << ((32-Ebits) + k) | w >> (Ebits - k); + goto ret_d; + } + z = xa > xa0 ? *--xa : 0; + if (k -= Ebits) { + d0 = Exp_1 | y << k | z >> (32 - k); + y = xa > xa0 ? *--xa : 0; + d1 = z << k | y >> (32 - k); + } + else { + d0 = Exp_1 | y; + d1 = z; + } +#else + if (k < Ebits + 16) { + z = xa > xa0 ? *--xa : 0; + d0 = Exp_1 | y << k - Ebits | z >> Ebits + 16 - k; + w = xa > xa0 ? *--xa : 0; + y = xa > xa0 ? *--xa : 0; + d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k; + goto ret_d; + } + z = xa > xa0 ? *--xa : 0; + w = xa > xa0 ? *--xa : 0; + k -= Ebits + 16; + d0 = Exp_1 | y << k + 16 | z << k | w >> 16 - k; + y = xa > xa0 ? *--xa : 0; + d1 = w << k + 16 | y << k; +#endif +ret_d: +#ifdef VAX + word0(d) = d0 >> 16 | d0 << 16; + word1(d) = d1 >> 16 | d1 << 16; +#else +#undef d0 +#undef d1 +#endif + return dval(d); +} + +static Bigint * +d2b(double d_, int *e, int *bits) +{ + double_u d; + Bigint *b; + int de, k; + ULong *x, y, z; +#ifndef Sudden_Underflow + int i; +#endif +#ifdef VAX + ULong d0, d1; +#endif + dval(d) = d_; +#ifdef VAX + d0 = word0(d) >> 16 | word0(d) << 16; + d1 = word1(d) >> 16 | word1(d) << 16; +#else +#define d0 word0(d) +#define d1 word1(d) +#endif + +#ifdef Pack_32 + b = Balloc(1); +#else + b = Balloc(2); +#endif + x = b->x; + + z = d0 & Frac_mask; + d0 &= 0x7fffffff; /* clear sign bit, which we ignore */ +#ifdef Sudden_Underflow + de = (int)(d0 >> Exp_shift); +#ifndef IBM + z |= Exp_msk11; +#endif +#else + if ((de = (int)(d0 >> Exp_shift)) != 0) + z |= Exp_msk1; +#endif +#ifdef Pack_32 + if ((y = d1) != 0) { + if ((k = lo0bits(&y)) != 0) { + x[0] = y | z << (32 - k); + z >>= k; + } + else + x[0] = y; +#ifndef Sudden_Underflow + i = +#endif + b->wds = (x[1] = z) ? 2 : 1; + } + else { +#ifdef DEBUG + if (!z) + Bug("Zero passed to d2b"); +#endif + k = lo0bits(&z); + x[0] = z; +#ifndef Sudden_Underflow + i = +#endif + b->wds = 1; + k += 32; + } +#else + if (y = d1) { + if (k = lo0bits(&y)) + if (k >= 16) { + x[0] = y | z << 32 - k & 0xffff; + x[1] = z >> k - 16 & 0xffff; + x[2] = z >> k; + i = 2; + } + else { + x[0] = y & 0xffff; + x[1] = y >> 16 | z << 16 - k & 0xffff; + x[2] = z >> k & 0xffff; + x[3] = z >> k+16; + i = 3; + } + else { + x[0] = y & 0xffff; + x[1] = y >> 16; + x[2] = z & 0xffff; + x[3] = z >> 16; + i = 3; + } + } + else { +#ifdef DEBUG + if (!z) + Bug("Zero passed to d2b"); +#endif + k = lo0bits(&z); + if (k >= 16) { + x[0] = z; + i = 0; + } + else { + x[0] = z & 0xffff; + x[1] = z >> 16; + i = 1; + } + k += 32; + } + while (!x[i]) + --i; + b->wds = i + 1; +#endif +#ifndef Sudden_Underflow + if (de) { +#endif +#ifdef IBM + *e = (de - Bias - (P-1) << 2) + k; + *bits = 4*P + 8 - k - hi0bits(word0(d) & Frac_mask); +#else + *e = de - Bias - (P-1) + k; + *bits = P - k; +#endif +#ifndef Sudden_Underflow + } + else { + *e = de - Bias - (P-1) + 1 + k; +#ifdef Pack_32 + *bits = 32*i - hi0bits(x[i-1]); +#else + *bits = (i+2)*16 - hi0bits(x[i]); +#endif + } +#endif + return b; +} +#undef d0 +#undef d1 + +static double +ratio(Bigint *a, Bigint *b) +{ + double_u da, db; + int k, ka, kb; + + dval(da) = b2d(a, &ka); + dval(db) = b2d(b, &kb); +#ifdef Pack_32 + k = ka - kb + 32*(a->wds - b->wds); +#else + k = ka - kb + 16*(a->wds - b->wds); +#endif +#ifdef IBM + if (k > 0) { + word0(da) += (k >> 2)*Exp_msk1; + if (k &= 3) + dval(da) *= 1 << k; + } + else { + k = -k; + word0(db) += (k >> 2)*Exp_msk1; + if (k &= 3) + dval(db) *= 1 << k; + } +#else + if (k > 0) + word0(da) += k*Exp_msk1; + else { + k = -k; + word0(db) += k*Exp_msk1; + } +#endif + return dval(da) / dval(db); +} + +static const double +tens[] = { + 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, + 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, + 1e20, 1e21, 1e22 +#ifdef VAX + , 1e23, 1e24 +#endif +}; + +static const double +#ifdef IEEE_Arith +bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 }; +static const double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, +#ifdef Avoid_Underflow + 9007199254740992.*9007199254740992.e-256 + /* = 2^106 * 1e-53 */ +#else + 1e-256 +#endif +}; +/* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */ +/* flag unnecessarily. It leads to a song and dance at the end of strtod. */ +#define Scale_Bit 0x10 +#define n_bigtens 5 +#else +#ifdef IBM +bigtens[] = { 1e16, 1e32, 1e64 }; +static const double tinytens[] = { 1e-16, 1e-32, 1e-64 }; +#define n_bigtens 3 +#else +bigtens[] = { 1e16, 1e32 }; +static const double tinytens[] = { 1e-16, 1e-32 }; +#define n_bigtens 2 +#endif +#endif + +#ifndef IEEE_Arith +#undef INFNAN_CHECK +#endif + +#ifdef INFNAN_CHECK + +#ifndef NAN_WORD0 +#define NAN_WORD0 0x7ff80000 +#endif + +#ifndef NAN_WORD1 +#define NAN_WORD1 0 +#endif + +static int +match(const char **sp, char *t) +{ + int c, d; + const char *s = *sp; + + while (d = *t++) { + if ((c = *++s) >= 'A' && c <= 'Z') + c += 'a' - 'A'; + if (c != d) + return 0; + } + *sp = s + 1; + return 1; +} + +#ifndef No_Hex_NaN +static void +hexnan(double *rvp, const char **sp) +{ + ULong c, x[2]; + const char *s; + int havedig, udx0, xshift; + + x[0] = x[1] = 0; + havedig = xshift = 0; + udx0 = 1; + s = *sp; + while (c = *(const unsigned char*)++s) { + if (c >= '0' && c <= '9') + c -= '0'; + else if (c >= 'a' && c <= 'f') + c += 10 - 'a'; + else if (c >= 'A' && c <= 'F') + c += 10 - 'A'; + else if (c <= ' ') { + if (udx0 && havedig) { + udx0 = 0; + xshift = 1; + } + continue; + } + else if (/*(*/ c == ')' && havedig) { + *sp = s + 1; + break; + } + else + return; /* invalid form: don't change *sp */ + havedig = 1; + if (xshift) { + xshift = 0; + x[0] = x[1]; + x[1] = 0; + } + if (udx0) + x[0] = (x[0] << 4) | (x[1] >> 28); + x[1] = (x[1] << 4) | c; + } + if ((x[0] &= 0xfffff) || x[1]) { + word0(*rvp) = Exp_mask | x[0]; + word1(*rvp) = x[1]; + } +} +#endif /*No_Hex_NaN*/ +#endif /* INFNAN_CHECK */ + +NO_SANITIZE("unsigned-integer-overflow", double strtod(const char *s00, char **se)); +double +strtod(const char *s00, char **se) +{ +#ifdef Avoid_Underflow + int scale; +#endif + int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign, + e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign; + const char *s, *s0, *s1; + double aadj, adj; + double_u aadj1, rv, rv0; + Long L; + ULong y, z; + Bigint *bb, *bb1, *bd, *bd0, *bs, *delta; +#ifdef SET_INEXACT + int inexact, oldinexact; +#endif +#ifdef Honor_FLT_ROUNDS + int rounding; +#endif +#ifdef USE_LOCALE + const char *s2; +#endif + + errno = 0; + sign = nz0 = nz = 0; + dval(rv) = 0.; + for (s = s00;;s++) + switch (*s) { + case '-': + sign = 1; + /* no break */ + case '+': + if (*++s) + goto break2; + /* no break */ + case 0: + goto ret0; + case '\t': + case '\n': + case '\v': + case '\f': + case '\r': + case ' ': + continue; + default: + goto break2; + } +break2: + if (*s == '0') { + if (s[1] == 'x' || s[1] == 'X') { + s0 = ++s; + adj = 0; + aadj = 1.0; + nd0 = -4; + + if (!*++s || !(s1 = strchr(hexdigit, *s))) goto ret0; + if (*s == '0') { + while (*++s == '0'); + s1 = strchr(hexdigit, *s); + } + if (s1 != NULL) { + do { + adj += aadj * ((s1 - hexdigit) & 15); + nd0 += 4; + aadj /= 16; + } while (*++s && (s1 = strchr(hexdigit, *s))); + } + + if (*s == '.') { + dsign = 1; + if (!*++s || !(s1 = strchr(hexdigit, *s))) goto ret0; + if (nd0 < 0) { + while (*s == '0') { + s++; + nd0 -= 4; + } + } + for (; *s && (s1 = strchr(hexdigit, *s)); ++s) { + adj += aadj * ((s1 - hexdigit) & 15); + if ((aadj /= 16) == 0.0) { + while (strchr(hexdigit, *++s)); + break; + } + } + } + else { + dsign = 0; + } + + if (*s == 'P' || *s == 'p') { + dsign = 0x2C - *++s; /* +: 2B, -: 2D */ + if (abs(dsign) == 1) s++; + else dsign = 1; + + nd = 0; + c = *s; + if (c < '0' || '9' < c) goto ret0; + do { + nd *= 10; + nd += c; + nd -= '0'; + c = *++s; + /* Float("0x0."+("0"*267)+"1fp2095") */ + if (nd + dsign * nd0 > 2095) { + while ('0' <= c && c <= '9') c = *++s; + break; + } + } while ('0' <= c && c <= '9'); + nd0 += nd * dsign; + } + else { + if (dsign) goto ret0; + } + dval(rv) = ldexp(adj, nd0); + goto ret; + } + nz0 = 1; + while (*++s == '0') ; + if (!*s) + goto ret; + } + s0 = s; + y = z = 0; + for (nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++) + if (nd < 9) + y = 10*y + c - '0'; + else if (nd < DBL_DIG + 2) + z = 10*z + c - '0'; + nd0 = nd; +#ifdef USE_LOCALE + s1 = localeconv()->decimal_point; + if (c == *s1) { + c = '.'; + if (*++s1) { + s2 = s; + for (;;) { + if (*++s2 != *s1) { + c = 0; + break; + } + if (!*++s1) { + s = s2; + break; + } + } + } + } +#endif + if (c == '.') { + if (!ISDIGIT(s[1])) + goto dig_done; + c = *++s; + if (!nd) { + for (; c == '0'; c = *++s) + nz++; + if (c > '0' && c <= '9') { + s0 = s; + nf += nz; + nz = 0; + goto have_dig; + } + goto dig_done; + } + for (; c >= '0' && c <= '9'; c = *++s) { +have_dig: + nz++; + if (nd > DBL_DIG * 4) { + continue; + } + if (c -= '0') { + nf += nz; + for (i = 1; i < nz; i++) + if (nd++ < 9) + y *= 10; + else if (nd <= DBL_DIG + 2) + z *= 10; + if (nd++ < 9) + y = 10*y + c; + else if (nd <= DBL_DIG + 2) + z = 10*z + c; + nz = 0; + } + } + } +dig_done: + e = 0; + if (c == 'e' || c == 'E') { + if (!nd && !nz && !nz0) { + goto ret0; + } + s00 = s; + esign = 0; + switch (c = *++s) { + case '-': + esign = 1; + case '+': + c = *++s; + } + if (c >= '0' && c <= '9') { + while (c == '0') + c = *++s; + if (c > '0' && c <= '9') { + L = c - '0'; + s1 = s; + while ((c = *++s) >= '0' && c <= '9') + L = 10*L + c - '0'; + if (s - s1 > 8 || L > 19999) + /* Avoid confusion from exponents + * so large that e might overflow. + */ + e = 19999; /* safe for 16 bit ints */ + else + e = (int)L; + if (esign) + e = -e; + } + else + e = 0; + } + else + s = s00; + } + if (!nd) { + if (!nz && !nz0) { +#ifdef INFNAN_CHECK + /* Check for Nan and Infinity */ + switch (c) { + case 'i': + case 'I': + if (match(&s,"nf")) { + --s; + if (!match(&s,"inity")) + ++s; + word0(rv) = 0x7ff00000; + word1(rv) = 0; + goto ret; + } + break; + case 'n': + case 'N': + if (match(&s, "an")) { + word0(rv) = NAN_WORD0; + word1(rv) = NAN_WORD1; +#ifndef No_Hex_NaN + if (*s == '(') /*)*/ + hexnan(&rv, &s); +#endif + goto ret; + } + } +#endif /* INFNAN_CHECK */ +ret0: + s = s00; + sign = 0; + } + goto ret; + } + e1 = e -= nf; + + /* Now we have nd0 digits, starting at s0, followed by a + * decimal point, followed by nd-nd0 digits. The number we're + * after is the integer represented by those digits times + * 10**e */ + + if (!nd0) + nd0 = nd; + k = nd < DBL_DIG + 2 ? nd : DBL_DIG + 2; + dval(rv) = y; + if (k > 9) { +#ifdef SET_INEXACT + if (k > DBL_DIG) + oldinexact = get_inexact(); +#endif + dval(rv) = tens[k - 9] * dval(rv) + z; + } + bd0 = bb = bd = bs = delta = 0; + if (nd <= DBL_DIG +#ifndef RND_PRODQUOT +#ifndef Honor_FLT_ROUNDS + && Flt_Rounds == 1 +#endif +#endif + ) { + if (!e) + goto ret; + if (e > 0) { + if (e <= Ten_pmax) { +#ifdef VAX + goto vax_ovfl_check; +#else +#ifdef Honor_FLT_ROUNDS + /* round correctly FLT_ROUNDS = 2 or 3 */ + if (sign) { + dval(rv) = -dval(rv); + sign = 0; + } +#endif + /* rv = */ rounded_product(dval(rv), tens[e]); + goto ret; +#endif + } + i = DBL_DIG - nd; + if (e <= Ten_pmax + i) { + /* A fancier test would sometimes let us do + * this for larger i values. + */ +#ifdef Honor_FLT_ROUNDS + /* round correctly FLT_ROUNDS = 2 or 3 */ + if (sign) { + dval(rv) = -dval(rv); + sign = 0; + } +#endif + e -= i; + dval(rv) *= tens[i]; +#ifdef VAX + /* VAX exponent range is so narrow we must + * worry about overflow here... + */ +vax_ovfl_check: + word0(rv) -= P*Exp_msk1; + /* rv = */ rounded_product(dval(rv), tens[e]); + if ((word0(rv) & Exp_mask) + > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) + goto ovfl; + word0(rv) += P*Exp_msk1; +#else + /* rv = */ rounded_product(dval(rv), tens[e]); +#endif + goto ret; + } + } +#ifndef Inaccurate_Divide + else if (e >= -Ten_pmax) { +#ifdef Honor_FLT_ROUNDS + /* round correctly FLT_ROUNDS = 2 or 3 */ + if (sign) { + dval(rv) = -dval(rv); + sign = 0; + } +#endif + /* rv = */ rounded_quotient(dval(rv), tens[-e]); + goto ret; + } +#endif + } + e1 += nd - k; + +#ifdef IEEE_Arith +#ifdef SET_INEXACT + inexact = 1; + if (k <= DBL_DIG) + oldinexact = get_inexact(); +#endif +#ifdef Avoid_Underflow + scale = 0; +#endif +#ifdef Honor_FLT_ROUNDS + if ((rounding = Flt_Rounds) >= 2) { + if (sign) + rounding = rounding == 2 ? 0 : 2; + else + if (rounding != 2) + rounding = 0; + } +#endif +#endif /*IEEE_Arith*/ + + /* Get starting approximation = rv * 10**e1 */ + + if (e1 > 0) { + if ((i = e1 & 15) != 0) + dval(rv) *= tens[i]; + if (e1 &= ~15) { + if (e1 > DBL_MAX_10_EXP) { +ovfl: +#ifndef NO_ERRNO + errno = ERANGE; +#endif + /* Can't trust HUGE_VAL */ +#ifdef IEEE_Arith +#ifdef Honor_FLT_ROUNDS + switch (rounding) { + case 0: /* toward 0 */ + case 3: /* toward -infinity */ + word0(rv) = Big0; + word1(rv) = Big1; + break; + default: + word0(rv) = Exp_mask; + word1(rv) = 0; + } +#else /*Honor_FLT_ROUNDS*/ + word0(rv) = Exp_mask; + word1(rv) = 0; +#endif /*Honor_FLT_ROUNDS*/ +#ifdef SET_INEXACT + /* set overflow bit */ + dval(rv0) = 1e300; + dval(rv0) *= dval(rv0); +#endif +#else /*IEEE_Arith*/ + word0(rv) = Big0; + word1(rv) = Big1; +#endif /*IEEE_Arith*/ + if (bd0) + goto retfree; + goto ret; + } + e1 >>= 4; + for (j = 0; e1 > 1; j++, e1 >>= 1) + if (e1 & 1) + dval(rv) *= bigtens[j]; + /* The last multiplication could overflow. */ + word0(rv) -= P*Exp_msk1; + dval(rv) *= bigtens[j]; + if ((z = word0(rv) & Exp_mask) + > Exp_msk1*(DBL_MAX_EXP+Bias-P)) + goto ovfl; + if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) { + /* set to largest number */ + /* (Can't trust DBL_MAX) */ + word0(rv) = Big0; + word1(rv) = Big1; + } + else + word0(rv) += P*Exp_msk1; + } + } + else if (e1 < 0) { + e1 = -e1; + if ((i = e1 & 15) != 0) + dval(rv) /= tens[i]; + if (e1 >>= 4) { + if (e1 >= 1 << n_bigtens) + goto undfl; +#ifdef Avoid_Underflow + if (e1 & Scale_Bit) + scale = 2*P; + for (j = 0; e1 > 0; j++, e1 >>= 1) + if (e1 & 1) + dval(rv) *= tinytens[j]; + if (scale && (j = 2*P + 1 - ((word0(rv) & Exp_mask) + >> Exp_shift)) > 0) { + /* scaled rv is denormal; zap j low bits */ + if (j >= 32) { + word1(rv) = 0; + if (j >= 53) + word0(rv) = (P+2)*Exp_msk1; + else + word0(rv) &= 0xffffffff << (j-32); + } + else + word1(rv) &= 0xffffffff << j; + } +#else + for (j = 0; e1 > 1; j++, e1 >>= 1) + if (e1 & 1) + dval(rv) *= tinytens[j]; + /* The last multiplication could underflow. */ + dval(rv0) = dval(rv); + dval(rv) *= tinytens[j]; + if (!dval(rv)) { + dval(rv) = 2.*dval(rv0); + dval(rv) *= tinytens[j]; +#endif + if (!dval(rv)) { +undfl: + dval(rv) = 0.; +#ifndef NO_ERRNO + errno = ERANGE; +#endif + if (bd0) + goto retfree; + goto ret; + } +#ifndef Avoid_Underflow + word0(rv) = Tiny0; + word1(rv) = Tiny1; + /* The refinement below will clean + * this approximation up. + */ + } +#endif + } + } + + /* Now the hard part -- adjusting rv to the correct value.*/ + + /* Put digits into bd: true value = bd * 10^e */ + + bd0 = s2b(s0, nd0, nd, y); + + for (;;) { + bd = Balloc(bd0->k); + Bcopy(bd, bd0); + bb = d2b(dval(rv), &bbe, &bbbits); /* rv = bb * 2^bbe */ + bs = i2b(1); + + if (e >= 0) { + bb2 = bb5 = 0; + bd2 = bd5 = e; + } + else { + bb2 = bb5 = -e; + bd2 = bd5 = 0; + } + if (bbe >= 0) + bb2 += bbe; + else + bd2 -= bbe; + bs2 = bb2; +#ifdef Honor_FLT_ROUNDS + if (rounding != 1) + bs2++; +#endif +#ifdef Avoid_Underflow + j = bbe - scale; + i = j + bbbits - 1; /* logb(rv) */ + if (i < Emin) /* denormal */ + j += P - Emin; + else + j = P + 1 - bbbits; +#else /*Avoid_Underflow*/ +#ifdef Sudden_Underflow +#ifdef IBM + j = 1 + 4*P - 3 - bbbits + ((bbe + bbbits - 1) & 3); +#else + j = P + 1 - bbbits; +#endif +#else /*Sudden_Underflow*/ + j = bbe; + i = j + bbbits - 1; /* logb(rv) */ + if (i < Emin) /* denormal */ + j += P - Emin; + else + j = P + 1 - bbbits; +#endif /*Sudden_Underflow*/ +#endif /*Avoid_Underflow*/ + bb2 += j; + bd2 += j; +#ifdef Avoid_Underflow + bd2 += scale; +#endif + i = bb2 < bd2 ? bb2 : bd2; + if (i > bs2) + i = bs2; + if (i > 0) { + bb2 -= i; + bd2 -= i; + bs2 -= i; + } + if (bb5 > 0) { + bs = pow5mult(bs, bb5); + bb1 = mult(bs, bb); + Bfree(bb); + bb = bb1; + } + if (bb2 > 0) + bb = lshift(bb, bb2); + if (bd5 > 0) + bd = pow5mult(bd, bd5); + if (bd2 > 0) + bd = lshift(bd, bd2); + if (bs2 > 0) + bs = lshift(bs, bs2); + delta = diff(bb, bd); + dsign = delta->sign; + delta->sign = 0; + i = cmp(delta, bs); +#ifdef Honor_FLT_ROUNDS + if (rounding != 1) { + if (i < 0) { + /* Error is less than an ulp */ + if (!delta->x[0] && delta->wds <= 1) { + /* exact */ +#ifdef SET_INEXACT + inexact = 0; +#endif + break; + } + if (rounding) { + if (dsign) { + adj = 1.; + goto apply_adj; + } + } + else if (!dsign) { + adj = -1.; + if (!word1(rv) + && !(word0(rv) & Frac_mask)) { + y = word0(rv) & Exp_mask; +#ifdef Avoid_Underflow + if (!scale || y > 2*P*Exp_msk1) +#else + if (y) +#endif + { + delta = lshift(delta,Log2P); + if (cmp(delta, bs) <= 0) + adj = -0.5; + } + } +apply_adj: +#ifdef Avoid_Underflow + if (scale && (y = word0(rv) & Exp_mask) + <= 2*P*Exp_msk1) + word0(adj) += (2*P+1)*Exp_msk1 - y; +#else +#ifdef Sudden_Underflow + if ((word0(rv) & Exp_mask) <= + P*Exp_msk1) { + word0(rv) += P*Exp_msk1; + dval(rv) += adj*ulp(dval(rv)); + word0(rv) -= P*Exp_msk1; + } + else +#endif /*Sudden_Underflow*/ +#endif /*Avoid_Underflow*/ + dval(rv) += adj*ulp(dval(rv)); + } + break; + } + adj = ratio(delta, bs); + if (adj < 1.) + adj = 1.; + if (adj <= 0x7ffffffe) { + /* adj = rounding ? ceil(adj) : floor(adj); */ + y = adj; + if (y != adj) { + if (!((rounding>>1) ^ dsign)) + y++; + adj = y; + } + } +#ifdef Avoid_Underflow + if (scale && (y = word0(rv) & Exp_mask) <= 2*P*Exp_msk1) + word0(adj) += (2*P+1)*Exp_msk1 - y; +#else +#ifdef Sudden_Underflow + if ((word0(rv) & Exp_mask) <= P*Exp_msk1) { + word0(rv) += P*Exp_msk1; + adj *= ulp(dval(rv)); + if (dsign) + dval(rv) += adj; + else + dval(rv) -= adj; + word0(rv) -= P*Exp_msk1; + goto cont; + } +#endif /*Sudden_Underflow*/ +#endif /*Avoid_Underflow*/ + adj *= ulp(dval(rv)); + if (dsign) + dval(rv) += adj; + else + dval(rv) -= adj; + goto cont; + } +#endif /*Honor_FLT_ROUNDS*/ + + if (i < 0) { + /* Error is less than half an ulp -- check for + * special case of mantissa a power of two. + */ + if (dsign || word1(rv) || word0(rv) & Bndry_mask +#ifdef IEEE_Arith +#ifdef Avoid_Underflow + || (word0(rv) & Exp_mask) <= (2*P+1)*Exp_msk1 +#else + || (word0(rv) & Exp_mask) <= Exp_msk1 +#endif +#endif + ) { +#ifdef SET_INEXACT + if (!delta->x[0] && delta->wds <= 1) + inexact = 0; +#endif + break; + } + if (!delta->x[0] && delta->wds <= 1) { + /* exact result */ +#ifdef SET_INEXACT + inexact = 0; +#endif + break; + } + delta = lshift(delta,Log2P); + if (cmp(delta, bs) > 0) + goto drop_down; + break; + } + if (i == 0) { + /* exactly half-way between */ + if (dsign) { + if ((word0(rv) & Bndry_mask1) == Bndry_mask1 + && word1(rv) == ( +#ifdef Avoid_Underflow + (scale && (y = word0(rv) & Exp_mask) <= 2*P*Exp_msk1) + ? (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) : +#endif + 0xffffffff)) { + /*boundary case -- increment exponent*/ + word0(rv) = (word0(rv) & Exp_mask) + + Exp_msk1 +#ifdef IBM + | Exp_msk1 >> 4 +#endif + ; + word1(rv) = 0; +#ifdef Avoid_Underflow + dsign = 0; +#endif + break; + } + } + else if (!(word0(rv) & Bndry_mask) && !word1(rv)) { +drop_down: + /* boundary case -- decrement exponent */ +#ifdef Sudden_Underflow /*{{*/ + L = word0(rv) & Exp_mask; +#ifdef IBM + if (L < Exp_msk1) +#else +#ifdef Avoid_Underflow + if (L <= (scale ? (2*P+1)*Exp_msk1 : Exp_msk1)) +#else + if (L <= Exp_msk1) +#endif /*Avoid_Underflow*/ +#endif /*IBM*/ + goto undfl; + L -= Exp_msk1; +#else /*Sudden_Underflow}{*/ +#ifdef Avoid_Underflow + if (scale) { + L = word0(rv) & Exp_mask; + if (L <= (2*P+1)*Exp_msk1) { + if (L > (P+2)*Exp_msk1) + /* round even ==> */ + /* accept rv */ + break; + /* rv = smallest denormal */ + goto undfl; + } + } +#endif /*Avoid_Underflow*/ + L = (word0(rv) & Exp_mask) - Exp_msk1; +#endif /*Sudden_Underflow}}*/ + word0(rv) = L | Bndry_mask1; + word1(rv) = 0xffffffff; +#ifdef IBM + goto cont; +#else + break; +#endif + } +#ifndef ROUND_BIASED + if (!(word1(rv) & LSB)) + break; +#endif + if (dsign) + dval(rv) += ulp(dval(rv)); +#ifndef ROUND_BIASED + else { + dval(rv) -= ulp(dval(rv)); +#ifndef Sudden_Underflow + if (!dval(rv)) + goto undfl; +#endif + } +#ifdef Avoid_Underflow + dsign = 1 - dsign; +#endif +#endif + break; + } + if ((aadj = ratio(delta, bs)) <= 2.) { + if (dsign) + aadj = dval(aadj1) = 1.; + else if (word1(rv) || word0(rv) & Bndry_mask) { +#ifndef Sudden_Underflow + if (word1(rv) == Tiny1 && !word0(rv)) + goto undfl; +#endif + aadj = 1.; + dval(aadj1) = -1.; + } + else { + /* special case -- power of FLT_RADIX to be */ + /* rounded down... */ + + if (aadj < 2./FLT_RADIX) + aadj = 1./FLT_RADIX; + else + aadj *= 0.5; + dval(aadj1) = -aadj; + } + } + else { + aadj *= 0.5; + dval(aadj1) = dsign ? aadj : -aadj; +#ifdef Check_FLT_ROUNDS + switch (Rounding) { + case 2: /* towards +infinity */ + dval(aadj1) -= 0.5; + break; + case 0: /* towards 0 */ + case 3: /* towards -infinity */ + dval(aadj1) += 0.5; + } +#else + if (Flt_Rounds == 0) + dval(aadj1) += 0.5; +#endif /*Check_FLT_ROUNDS*/ + } + y = word0(rv) & Exp_mask; + + /* Check for overflow */ + + if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) { + dval(rv0) = dval(rv); + word0(rv) -= P*Exp_msk1; + adj = dval(aadj1) * ulp(dval(rv)); + dval(rv) += adj; + if ((word0(rv) & Exp_mask) >= + Exp_msk1*(DBL_MAX_EXP+Bias-P)) { + if (word0(rv0) == Big0 && word1(rv0) == Big1) + goto ovfl; + word0(rv) = Big0; + word1(rv) = Big1; + goto cont; + } + else + word0(rv) += P*Exp_msk1; + } + else { +#ifdef Avoid_Underflow + if (scale && y <= 2*P*Exp_msk1) { + if (aadj <= 0x7fffffff) { + if ((z = (int)aadj) <= 0) + z = 1; + aadj = z; + dval(aadj1) = dsign ? aadj : -aadj; + } + word0(aadj1) += (2*P+1)*Exp_msk1 - y; + } + adj = dval(aadj1) * ulp(dval(rv)); + dval(rv) += adj; +#else +#ifdef Sudden_Underflow + if ((word0(rv) & Exp_mask) <= P*Exp_msk1) { + dval(rv0) = dval(rv); + word0(rv) += P*Exp_msk1; + adj = dval(aadj1) * ulp(dval(rv)); + dval(rv) += adj; +#ifdef IBM + if ((word0(rv) & Exp_mask) < P*Exp_msk1) +#else + if ((word0(rv) & Exp_mask) <= P*Exp_msk1) +#endif + { + if (word0(rv0) == Tiny0 && word1(rv0) == Tiny1) + goto undfl; + word0(rv) = Tiny0; + word1(rv) = Tiny1; + goto cont; + } + else + word0(rv) -= P*Exp_msk1; + } + else { + adj = dval(aadj1) * ulp(dval(rv)); + dval(rv) += adj; + } +#else /*Sudden_Underflow*/ + /* Compute adj so that the IEEE rounding rules will + * correctly round rv + adj in some half-way cases. + * If rv * ulp(rv) is denormalized (i.e., + * y <= (P-1)*Exp_msk1), we must adjust aadj to avoid + * trouble from bits lost to denormalization; + * example: 1.2e-307 . + */ + if (y <= (P-1)*Exp_msk1 && aadj > 1.) { + dval(aadj1) = (double)(int)(aadj + 0.5); + if (!dsign) + dval(aadj1) = -dval(aadj1); + } + adj = dval(aadj1) * ulp(dval(rv)); + dval(rv) += adj; +#endif /*Sudden_Underflow*/ +#endif /*Avoid_Underflow*/ + } + z = word0(rv) & Exp_mask; +#ifndef SET_INEXACT +#ifdef Avoid_Underflow + if (!scale) +#endif + if (y == z) { + /* Can we stop now? */ + L = (Long)aadj; + aadj -= L; + /* The tolerances below are conservative. */ + if (dsign || word1(rv) || word0(rv) & Bndry_mask) { + if (aadj < .4999999 || aadj > .5000001) + break; + } + else if (aadj < .4999999/FLT_RADIX) + break; + } +#endif +cont: + Bfree(bb); + Bfree(bd); + Bfree(bs); + Bfree(delta); + } +#ifdef SET_INEXACT + if (inexact) { + if (!oldinexact) { + word0(rv0) = Exp_1 + (70 << Exp_shift); + word1(rv0) = 0; + dval(rv0) += 1.; + } + } + else if (!oldinexact) + clear_inexact(); +#endif +#ifdef Avoid_Underflow + if (scale) { + word0(rv0) = Exp_1 - 2*P*Exp_msk1; + word1(rv0) = 0; + dval(rv) *= dval(rv0); +#ifndef NO_ERRNO + /* try to avoid the bug of testing an 8087 register value */ + if (word0(rv) == 0 && word1(rv) == 0) + errno = ERANGE; +#endif + } +#endif /* Avoid_Underflow */ +#ifdef SET_INEXACT + if (inexact && !(word0(rv) & Exp_mask)) { + /* set underflow bit */ + dval(rv0) = 1e-300; + dval(rv0) *= dval(rv0); + } +#endif +retfree: + Bfree(bb); + Bfree(bd); + Bfree(bs); + Bfree(bd0); + Bfree(delta); +ret: + if (se) + *se = (char *)s; + return sign ? -dval(rv) : dval(rv); +} + +NO_SANITIZE("unsigned-integer-overflow", static int quorem(Bigint *b, Bigint *S)); +static int +quorem(Bigint *b, Bigint *S) +{ + int n; + ULong *bx, *bxe, q, *sx, *sxe; +#ifdef ULLong + ULLong borrow, carry, y, ys; +#else + ULong borrow, carry, y, ys; +#ifdef Pack_32 + ULong si, z, zs; +#endif +#endif + + n = S->wds; +#ifdef DEBUG + /*debug*/ if (b->wds > n) + /*debug*/ Bug("oversize b in quorem"); +#endif + if (b->wds < n) + return 0; + sx = S->x; + sxe = sx + --n; + bx = b->x; + bxe = bx + n; + q = *bxe / (*sxe + 1); /* ensure q <= true quotient */ +#ifdef DEBUG + /*debug*/ if (q > 9) + /*debug*/ Bug("oversized quotient in quorem"); +#endif + if (q) { + borrow = 0; + carry = 0; + do { +#ifdef ULLong + ys = *sx++ * (ULLong)q + carry; + carry = ys >> 32; + y = *bx - (ys & FFFFFFFF) - borrow; + borrow = y >> 32 & (ULong)1; + *bx++ = (ULong)(y & FFFFFFFF); +#else +#ifdef Pack_32 + si = *sx++; + ys = (si & 0xffff) * q + carry; + zs = (si >> 16) * q + (ys >> 16); + carry = zs >> 16; + y = (*bx & 0xffff) - (ys & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + z = (*bx >> 16) - (zs & 0xffff) - borrow; + borrow = (z & 0x10000) >> 16; + Storeinc(bx, z, y); +#else + ys = *sx++ * q + carry; + carry = ys >> 16; + y = *bx - (ys & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + *bx++ = y & 0xffff; +#endif +#endif + } while (sx <= sxe); + if (!*bxe) { + bx = b->x; + while (--bxe > bx && !*bxe) + --n; + b->wds = n; + } + } + if (cmp(b, S) >= 0) { + q++; + borrow = 0; + carry = 0; + bx = b->x; + sx = S->x; + do { +#ifdef ULLong + ys = *sx++ + carry; + carry = ys >> 32; + y = *bx - (ys & FFFFFFFF) - borrow; + borrow = y >> 32 & (ULong)1; + *bx++ = (ULong)(y & FFFFFFFF); +#else +#ifdef Pack_32 + si = *sx++; + ys = (si & 0xffff) + carry; + zs = (si >> 16) + (ys >> 16); + carry = zs >> 16; + y = (*bx & 0xffff) - (ys & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + z = (*bx >> 16) - (zs & 0xffff) - borrow; + borrow = (z & 0x10000) >> 16; + Storeinc(bx, z, y); +#else + ys = *sx++ + carry; + carry = ys >> 16; + y = *bx - (ys & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + *bx++ = y & 0xffff; +#endif +#endif + } while (sx <= sxe); + bx = b->x; + bxe = bx + n; + if (!*bxe) { + while (--bxe > bx && !*bxe) + --n; + b->wds = n; + } + } + return q; +} + +#ifndef MULTIPLE_THREADS +static char *dtoa_result; +#endif + +#ifndef MULTIPLE_THREADS +static char * +rv_alloc(int i) +{ + return dtoa_result = MALLOC(i); +} +#else +#define rv_alloc(i) MALLOC(i) +#endif + +static char * +nrv_alloc(const char *s, char **rve, size_t n) +{ + char *rv, *t; + + t = rv = rv_alloc(n); + while ((*t = *s++) != 0) t++; + if (rve) + *rve = t; + return rv; +} + +#define rv_strdup(s, rve) nrv_alloc((s), (rve), strlen(s)+1) + +#ifndef MULTIPLE_THREADS +/* freedtoa(s) must be used to free values s returned by dtoa + * when MULTIPLE_THREADS is #defined. It should be used in all cases, + * but for consistency with earlier versions of dtoa, it is optional + * when MULTIPLE_THREADS is not defined. + */ + +static void +freedtoa(char *s) +{ + FREE(s); +} +#endif + +static const char INFSTR[] = "Infinity"; +static const char NANSTR[] = "NaN"; +static const char ZEROSTR[] = "0"; + +/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string. + * + * Inspired by "How to Print Floating-Point Numbers Accurately" by + * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126]. + * + * Modifications: + * 1. Rather than iterating, we use a simple numeric overestimate + * to determine k = floor(log10(d)). We scale relevant + * quantities using O(log2(k)) rather than O(k) multiplications. + * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't + * try to generate digits strictly left to right. Instead, we + * compute with fewer bits and propagate the carry if necessary + * when rounding the final digit up. This is often faster. + * 3. Under the assumption that input will be rounded nearest, + * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22. + * That is, we allow equality in stopping tests when the + * round-nearest rule will give the same floating-point value + * as would satisfaction of the stopping test with strict + * inequality. + * 4. We remove common factors of powers of 2 from relevant + * quantities. + * 5. When converting floating-point integers less than 1e16, + * we use floating-point arithmetic rather than resorting + * to multiple-precision integers. + * 6. When asked to produce fewer than 15 digits, we first try + * to get by with floating-point arithmetic; we resort to + * multiple-precision integer arithmetic only if we cannot + * guarantee that the floating-point calculation has given + * the correctly rounded result. For k requested digits and + * "uniformly" distributed input, the probability is + * something like 10^(k-15) that we must resort to the Long + * calculation. + */ + +char * +dtoa(double d_, int mode, int ndigits, int *decpt, int *sign, char **rve) +{ + /* Arguments ndigits, decpt, sign are similar to those + of ecvt and fcvt; trailing zeros are suppressed from + the returned string. If not null, *rve is set to point + to the end of the return value. If d is +-Infinity or NaN, + then *decpt is set to 9999. + + mode: + 0 ==> shortest string that yields d when read in + and rounded to nearest. + 1 ==> like 0, but with Steele & White stopping rule; + e.g. with IEEE P754 arithmetic , mode 0 gives + 1e23 whereas mode 1 gives 9.999999999999999e22. + 2 ==> max(1,ndigits) significant digits. This gives a + return value similar to that of ecvt, except + that trailing zeros are suppressed. + 3 ==> through ndigits past the decimal point. This + gives a return value similar to that from fcvt, + except that trailing zeros are suppressed, and + ndigits can be negative. + 4,5 ==> similar to 2 and 3, respectively, but (in + round-nearest mode) with the tests of mode 0 to + possibly return a shorter string that rounds to d. + With IEEE arithmetic and compilation with + -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same + as modes 2 and 3 when FLT_ROUNDS != 1. + 6-9 ==> Debugging modes similar to mode - 4: don't try + fast floating-point estimate (if applicable). + + Values of mode other than 0-9 are treated as mode 0. + + Sufficient space is allocated to the return value + to hold the suppressed trailing zeros. + */ + + int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1, + j, j1, k, k0, k_check, leftright, m2, m5, s2, s5, + spec_case, try_quick, half = 0; + Long L; +#ifndef Sudden_Underflow + int denorm; + ULong x; +#endif + Bigint *b, *b1, *delta, *mlo = 0, *mhi = 0, *S; + double ds; + double_u d, d2, eps; + char *s, *s0; +#ifdef Honor_FLT_ROUNDS + int rounding; +#endif +#ifdef SET_INEXACT + int inexact, oldinexact; +#endif + + dval(d) = d_; + +#ifndef MULTIPLE_THREADS + if (dtoa_result) { + freedtoa(dtoa_result); + dtoa_result = 0; + } +#endif + + if (word0(d) & Sign_bit) { + /* set sign for everything, including 0's and NaNs */ + *sign = 1; + word0(d) &= ~Sign_bit; /* clear sign bit */ + } + else + *sign = 0; + +#if defined(IEEE_Arith) + defined(VAX) +#ifdef IEEE_Arith + if ((word0(d) & Exp_mask) == Exp_mask) +#else + if (word0(d) == 0x8000) +#endif + { + /* Infinity or NaN */ + *decpt = 9999; +#ifdef IEEE_Arith + if (!word1(d) && !(word0(d) & 0xfffff)) + return rv_strdup(INFSTR, rve); +#endif + return rv_strdup(NANSTR, rve); + } +#endif +#ifdef IBM + dval(d) += 0; /* normalize */ +#endif + if (!dval(d)) { + *decpt = 1; + return rv_strdup(ZEROSTR, rve); + } + +#ifdef SET_INEXACT + try_quick = oldinexact = get_inexact(); + inexact = 1; +#endif +#ifdef Honor_FLT_ROUNDS + if ((rounding = Flt_Rounds) >= 2) { + if (*sign) + rounding = rounding == 2 ? 0 : 2; + else + if (rounding != 2) + rounding = 0; + } +#endif + + b = d2b(dval(d), &be, &bbits); +#ifdef Sudden_Underflow + i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)); +#else + if ((i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1))) != 0) { +#endif + dval(d2) = dval(d); + word0(d2) &= Frac_mask1; + word0(d2) |= Exp_11; +#ifdef IBM + if (j = 11 - hi0bits(word0(d2) & Frac_mask)) + dval(d2) /= 1 << j; +#endif + + /* log(x) ~=~ log(1.5) + (x-1.5)/1.5 + * log10(x) = log(x) / log(10) + * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10)) + * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2) + * + * This suggests computing an approximation k to log10(d) by + * + * k = (i - Bias)*0.301029995663981 + * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 ); + * + * We want k to be too large rather than too small. + * The error in the first-order Taylor series approximation + * is in our favor, so we just round up the constant enough + * to compensate for any error in the multiplication of + * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077, + * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14, + * adding 1e-13 to the constant term more than suffices. + * Hence we adjust the constant term to 0.1760912590558. + * (We could get a more accurate k by invoking log10, + * but this is probably not worthwhile.) + */ + + i -= Bias; +#ifdef IBM + i <<= 2; + i += j; +#endif +#ifndef Sudden_Underflow + denorm = 0; + } + else { + /* d is denormalized */ + + i = bbits + be + (Bias + (P-1) - 1); + x = i > 32 ? word0(d) << (64 - i) | word1(d) >> (i - 32) + : word1(d) << (32 - i); + dval(d2) = x; + word0(d2) -= 31*Exp_msk1; /* adjust exponent */ + i -= (Bias + (P-1) - 1) + 1; + denorm = 1; + } +#endif + ds = (dval(d2)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981; + k = (int)ds; + if (ds < 0. && ds != k) + k--; /* want k = floor(ds) */ + k_check = 1; + if (k >= 0 && k <= Ten_pmax) { + if (dval(d) < tens[k]) + k--; + k_check = 0; + } + j = bbits - i - 1; + if (j >= 0) { + b2 = 0; + s2 = j; + } + else { + b2 = -j; + s2 = 0; + } + if (k >= 0) { + b5 = 0; + s5 = k; + s2 += k; + } + else { + b2 -= k; + b5 = -k; + s5 = 0; + } + if (mode < 0 || mode > 9) + mode = 0; + +#ifndef SET_INEXACT +#ifdef Check_FLT_ROUNDS + try_quick = Rounding == 1; +#else + try_quick = 1; +#endif +#endif /*SET_INEXACT*/ + + if (mode > 5) { + mode -= 4; + try_quick = 0; + } + leftright = 1; + ilim = ilim1 = -1; + switch (mode) { + case 0: + case 1: + i = 18; + ndigits = 0; + break; + case 2: + leftright = 0; + /* no break */ + case 4: + if (ndigits <= 0) + ndigits = 1; + ilim = ilim1 = i = ndigits; + break; + case 3: + leftright = 0; + /* no break */ + case 5: + i = ndigits + k + 1; + ilim = i; + ilim1 = i - 1; + if (i <= 0) + i = 1; + } + s = s0 = rv_alloc(i+1); + +#ifdef Honor_FLT_ROUNDS + if (mode > 1 && rounding != 1) + leftright = 0; +#endif + + if (ilim >= 0 && ilim <= Quick_max && try_quick) { + + /* Try to get by with floating-point arithmetic. */ + + i = 0; + dval(d2) = dval(d); + k0 = k; + ilim0 = ilim; + ieps = 2; /* conservative */ + if (k > 0) { + ds = tens[k&0xf]; + j = k >> 4; + if (j & Bletch) { + /* prevent overflows */ + j &= Bletch - 1; + dval(d) /= bigtens[n_bigtens-1]; + ieps++; + } + for (; j; j >>= 1, i++) + if (j & 1) { + ieps++; + ds *= bigtens[i]; + } + dval(d) /= ds; + } + else if ((j1 = -k) != 0) { + dval(d) *= tens[j1 & 0xf]; + for (j = j1 >> 4; j; j >>= 1, i++) + if (j & 1) { + ieps++; + dval(d) *= bigtens[i]; + } + } + if (k_check && dval(d) < 1. && ilim > 0) { + if (ilim1 <= 0) + goto fast_failed; + ilim = ilim1; + k--; + dval(d) *= 10.; + ieps++; + } + dval(eps) = ieps*dval(d) + 7.; + word0(eps) -= (P-1)*Exp_msk1; + if (ilim == 0) { + S = mhi = 0; + dval(d) -= 5.; + if (dval(d) > dval(eps)) + goto one_digit; + if (dval(d) < -dval(eps)) + goto no_digits; + goto fast_failed; + } +#ifndef No_leftright + if (leftright) { + /* Use Steele & White method of only + * generating digits needed. + */ + dval(eps) = 0.5/tens[ilim-1] - dval(eps); + for (i = 0;;) { + L = (int)dval(d); + dval(d) -= L; + *s++ = '0' + (int)L; + if (dval(d) < dval(eps)) + goto ret1; + if (1. - dval(d) < dval(eps)) + goto bump_up; + if (++i >= ilim) + break; + dval(eps) *= 10.; + dval(d) *= 10.; + } + } + else { +#endif + /* Generate ilim digits, then fix them up. */ + dval(eps) *= tens[ilim-1]; + for (i = 1;; i++, dval(d) *= 10.) { + L = (Long)(dval(d)); + if (!(dval(d) -= L)) + ilim = i; + *s++ = '0' + (int)L; + if (i == ilim) { + if (dval(d) > 0.5 + dval(eps)) + goto bump_up; + else if (dval(d) < 0.5 - dval(eps)) { + while (*--s == '0') ; + s++; + goto ret1; + } + half = 1; + if ((*(s-1) - '0') & 1) { + goto bump_up; + } + break; + } + } +#ifndef No_leftright + } +#endif +fast_failed: + s = s0; + dval(d) = dval(d2); + k = k0; + ilim = ilim0; + } + + /* Do we have a "small" integer? */ + + if (be >= 0 && k <= Int_max) { + /* Yes. */ + ds = tens[k]; + if (ndigits < 0 && ilim <= 0) { + S = mhi = 0; + if (ilim < 0 || dval(d) <= 5*ds) + goto no_digits; + goto one_digit; + } + for (i = 1;; i++, dval(d) *= 10.) { + L = (Long)(dval(d) / ds); + dval(d) -= L*ds; +#ifdef Check_FLT_ROUNDS + /* If FLT_ROUNDS == 2, L will usually be high by 1 */ + if (dval(d) < 0) { + L--; + dval(d) += ds; + } +#endif + *s++ = '0' + (int)L; + if (!dval(d)) { +#ifdef SET_INEXACT + inexact = 0; +#endif + break; + } + if (i == ilim) { +#ifdef Honor_FLT_ROUNDS + if (mode > 1) + switch (rounding) { + case 0: goto ret1; + case 2: goto bump_up; + } +#endif + dval(d) += dval(d); + if (dval(d) > ds || (dval(d) == ds && (L & 1))) { +bump_up: + while (*--s == '9') + if (s == s0) { + k++; + *s = '0'; + break; + } + ++*s++; + } + break; + } + } + goto ret1; + } + + m2 = b2; + m5 = b5; + if (leftright) { + i = +#ifndef Sudden_Underflow + denorm ? be + (Bias + (P-1) - 1 + 1) : +#endif +#ifdef IBM + 1 + 4*P - 3 - bbits + ((bbits + be - 1) & 3); +#else + 1 + P - bbits; +#endif + b2 += i; + s2 += i; + mhi = i2b(1); + } + if (m2 > 0 && s2 > 0) { + i = m2 < s2 ? m2 : s2; + b2 -= i; + m2 -= i; + s2 -= i; + } + if (b5 > 0) { + if (leftright) { + if (m5 > 0) { + mhi = pow5mult(mhi, m5); + b1 = mult(mhi, b); + Bfree(b); + b = b1; + } + if ((j = b5 - m5) != 0) + b = pow5mult(b, j); + } + else + b = pow5mult(b, b5); + } + S = i2b(1); + if (s5 > 0) + S = pow5mult(S, s5); + + /* Check for special case that d is a normalized power of 2. */ + + spec_case = 0; + if ((mode < 2 || leftright) +#ifdef Honor_FLT_ROUNDS + && rounding == 1 +#endif + ) { + if (!word1(d) && !(word0(d) & Bndry_mask) +#ifndef Sudden_Underflow + && word0(d) & (Exp_mask & ~Exp_msk1) +#endif + ) { + /* The special case */ + b2 += Log2P; + s2 += Log2P; + spec_case = 1; + } + } + + /* Arrange for convenient computation of quotients: + * shift left if necessary so divisor has 4 leading 0 bits. + * + * Perhaps we should just compute leading 28 bits of S once + * and for all and pass them and a shift to quorem, so it + * can do shifts and ors to compute the numerator for q. + */ +#ifdef Pack_32 + if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f) != 0) + i = 32 - i; +#else + if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf) != 0) + i = 16 - i; +#endif + if (i > 4) { + i -= 4; + b2 += i; + m2 += i; + s2 += i; + } + else if (i < 4) { + i += 28; + b2 += i; + m2 += i; + s2 += i; + } + if (b2 > 0) + b = lshift(b, b2); + if (s2 > 0) + S = lshift(S, s2); + if (k_check) { + if (cmp(b,S) < 0) { + k--; + b = multadd(b, 10, 0); /* we botched the k estimate */ + if (leftright) + mhi = multadd(mhi, 10, 0); + ilim = ilim1; + } + } + if (ilim <= 0 && (mode == 3 || mode == 5)) { + if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) { + /* no digits, fcvt style */ +no_digits: + k = -1 - ndigits; + goto ret; + } +one_digit: + *s++ = '1'; + k++; + goto ret; + } + if (leftright) { + if (m2 > 0) + mhi = lshift(mhi, m2); + + /* Compute mlo -- check for special case + * that d is a normalized power of 2. + */ + + mlo = mhi; + if (spec_case) { + mhi = Balloc(mhi->k); + Bcopy(mhi, mlo); + mhi = lshift(mhi, Log2P); + } + + for (i = 1;;i++) { + dig = quorem(b,S) + '0'; + /* Do we yet have the shortest decimal string + * that will round to d? + */ + j = cmp(b, mlo); + delta = diff(S, mhi); + j1 = delta->sign ? 1 : cmp(b, delta); + Bfree(delta); +#ifndef ROUND_BIASED + if (j1 == 0 && mode != 1 && !(word1(d) & 1) +#ifdef Honor_FLT_ROUNDS + && rounding >= 1 +#endif + ) { + if (dig == '9') + goto round_9_up; + if (j > 0) + dig++; +#ifdef SET_INEXACT + else if (!b->x[0] && b->wds <= 1) + inexact = 0; +#endif + *s++ = dig; + goto ret; + } +#endif + if (j < 0 || (j == 0 && mode != 1 +#ifndef ROUND_BIASED + && !(word1(d) & 1) +#endif + )) { + if (!b->x[0] && b->wds <= 1) { +#ifdef SET_INEXACT + inexact = 0; +#endif + goto accept_dig; + } +#ifdef Honor_FLT_ROUNDS + if (mode > 1) + switch (rounding) { + case 0: goto accept_dig; + case 2: goto keep_dig; + } +#endif /*Honor_FLT_ROUNDS*/ + if (j1 > 0) { + b = lshift(b, 1); + j1 = cmp(b, S); + if ((j1 > 0 || (j1 == 0 && (dig & 1))) && dig++ == '9') + goto round_9_up; + } +accept_dig: + *s++ = dig; + goto ret; + } + if (j1 > 0) { +#ifdef Honor_FLT_ROUNDS + if (!rounding) + goto accept_dig; +#endif + if (dig == '9') { /* possible if i == 1 */ +round_9_up: + *s++ = '9'; + goto roundoff; + } + *s++ = dig + 1; + goto ret; + } +#ifdef Honor_FLT_ROUNDS +keep_dig: +#endif + *s++ = dig; + if (i == ilim) + break; + b = multadd(b, 10, 0); + if (mlo == mhi) + mlo = mhi = multadd(mhi, 10, 0); + else { + mlo = multadd(mlo, 10, 0); + mhi = multadd(mhi, 10, 0); + } + } + } + else + for (i = 1;; i++) { + *s++ = dig = quorem(b,S) + '0'; + if (!b->x[0] && b->wds <= 1) { +#ifdef SET_INEXACT + inexact = 0; +#endif + goto ret; + } + if (i >= ilim) + break; + b = multadd(b, 10, 0); + } + + /* Round off last digit */ + +#ifdef Honor_FLT_ROUNDS + switch (rounding) { + case 0: goto trimzeros; + case 2: goto roundoff; + } +#endif + b = lshift(b, 1); + j = cmp(b, S); + if (j > 0 || (j == 0 && (dig & 1))) { + roundoff: + while (*--s == '9') + if (s == s0) { + k++; + *s++ = '1'; + goto ret; + } + if (!half || (*s - '0') & 1) + ++*s; + } + else { + while (*--s == '0') ; + } + s++; +ret: + Bfree(S); + if (mhi) { + if (mlo && mlo != mhi) + Bfree(mlo); + Bfree(mhi); + } +ret1: +#ifdef SET_INEXACT + if (inexact) { + if (!oldinexact) { + word0(d) = Exp_1 + (70 << Exp_shift); + word1(d) = 0; + dval(d) += 1.; + } + } + else if (!oldinexact) + clear_inexact(); +#endif + Bfree(b); + *s = 0; + *decpt = k + 1; + if (rve) + *rve = s; + return s0; +} + +/*- + * Copyright (c) 2004-2008 David Schultz + * 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. + */ + +#define DBL_MANH_SIZE 20 +#define DBL_MANL_SIZE 32 +#define DBL_ADJ (DBL_MAX_EXP - 2) +#define SIGFIGS ((DBL_MANT_DIG + 3) / 4 + 1) +#define dexp_get(u) ((int)(word0(u) >> Exp_shift) & ~Exp_msk1) +#define dexp_set(u,v) (word0(u) = (((int)(word0(u)) & ~Exp_mask) | ((v) << Exp_shift))) +#define dmanh_get(u) ((uint32_t)(word0(u) & Frac_mask)) +#define dmanl_get(u) ((uint32_t)word1(u)) + + +/* + * This procedure converts a double-precision number in IEEE format + * into a string of hexadecimal digits and an exponent of 2. Its + * behavior is bug-for-bug compatible with dtoa() in mode 2, with the + * following exceptions: + * + * - An ndigits < 0 causes it to use as many digits as necessary to + * represent the number exactly. + * - The additional xdigs argument should point to either the string + * "0123456789ABCDEF" or the string "0123456789abcdef", depending on + * which case is desired. + * - This routine does not repeat dtoa's mistake of setting decpt + * to 9999 in the case of an infinity or NaN. INT_MAX is used + * for this purpose instead. + * + * Note that the C99 standard does not specify what the leading digit + * should be for non-zero numbers. For instance, 0x1.3p3 is the same + * as 0x2.6p2 is the same as 0x4.cp3. This implementation always makes + * the leading digit a 1. This ensures that the exponent printed is the + * actual base-2 exponent, i.e., ilogb(d). + * + * Inputs: d, xdigs, ndigits + * Outputs: decpt, sign, rve + */ +char * +hdtoa(double d, const char *xdigs, int ndigits, int *decpt, int *sign, char **rve) +{ + U u; + char *s, *s0; + int bufsize; + uint32_t manh, manl; + + u.d = d; + if (word0(u) & Sign_bit) { + /* set sign for everything, including 0's and NaNs */ + *sign = 1; + word0(u) &= ~Sign_bit; /* clear sign bit */ + } + else + *sign = 0; + + if (isinf(d)) { /* FP_INFINITE */ + *decpt = INT_MAX; + return rv_strdup(INFSTR, rve); + } + else if (isnan(d)) { /* FP_NAN */ + *decpt = INT_MAX; + return rv_strdup(NANSTR, rve); + } + else if (d == 0.0) { /* FP_ZERO */ + *decpt = 1; + return rv_strdup(ZEROSTR, rve); + } + else if (dexp_get(u)) { /* FP_NORMAL */ + *decpt = dexp_get(u) - DBL_ADJ; + } + else { /* FP_SUBNORMAL */ + u.d *= 5.363123171977039e+154 /* 0x1p514 */; + *decpt = dexp_get(u) - (514 + DBL_ADJ); + } + + if (ndigits == 0) /* dtoa() compatibility */ + ndigits = 1; + + /* + * If ndigits < 0, we are expected to auto-size, so we allocate + * enough space for all the digits. + */ + bufsize = (ndigits > 0) ? ndigits : SIGFIGS; + s0 = rv_alloc(bufsize+1); + + /* Round to the desired number of digits. */ + if (SIGFIGS > ndigits && ndigits > 0) { + float redux = 1.0f; + int offset = 4 * ndigits + DBL_MAX_EXP - 4 - DBL_MANT_DIG; + dexp_set(u, offset); + u.d += redux; + u.d -= redux; + *decpt += dexp_get(u) - offset; + } + + manh = dmanh_get(u); + manl = dmanl_get(u); + *s0 = '1'; + for (s = s0 + 1; s < s0 + bufsize; s++) { + *s = xdigs[(manh >> (DBL_MANH_SIZE - 4)) & 0xf]; + manh = (manh << 4) | (manl >> (DBL_MANL_SIZE - 4)); + manl <<= 4; + } + + /* If ndigits < 0, we are expected to auto-size the precision. */ + if (ndigits < 0) { + for (ndigits = SIGFIGS; s0[ndigits - 1] == '0'; ndigits--) + ; + } + + s = s0 + ndigits; + *s = '\0'; + if (rve != NULL) + *rve = s; + return (s0); +} + +#ifdef __cplusplus +#if 0 +{ /* satisfy cc-mode */ +#endif +} +#endif diff --git a/ruby/ext/bigdecimal/static_assert.h b/ruby/ext/bigdecimal/static_assert.h new file mode 100644 index 000000000..9295729bf --- /dev/null +++ b/ruby/ext/bigdecimal/static_assert.h @@ -0,0 +1,54 @@ +#ifndef BIGDECIMAL_STATIC_ASSERT_H +#define BIGDECIMAL_STATIC_ASSERT_H + +#include "feature.h" + +#ifdef HAVE_RUBY_INTERNAL_STATIC_ASSERT_H +# include +#endif + +#ifdef RBIMPL_STATIC_ASSERT +# define STATIC_ASSERT RBIMPL_STATIC_ASSERT +#endif + +#ifndef STATIC_ASSERT +# /* The following section is copied from CRuby's static_assert.h */ + +# if defined(__cplusplus) && defined(__cpp_static_assert) +# /* https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations */ +# define BIGDECIMAL_STATIC_ASSERT0 static_assert + +# elif defined(__cplusplus) && defined(_MSC_VER) && _MSC_VER >= 1600 +# define BIGDECIMAL_STATIC_ASSERT0 static_assert + +# elif defined(__INTEL_CXX11_MODE__) +# define BIGDECIMAL_STATIC_ASSERT0 static_assert + +# elif defined(__cplusplus) && __cplusplus >= 201103L +# define BIGDECIMAL_STATIC_ASSERT0 static_assert + +# elif defined(__cplusplus) && __has_extension(cxx_static_assert) +# define BIGDECIMAL_STATIC_ASSERT0 __extension__ static_assert + +# elif defined(__STDC_VERSION__) && __has_extension(c_static_assert) +# define BIGDECIMAL_STATIC_ASSERT0 __extension__ _Static_assert + +# elif defined(__STDC_VERSION__) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# define BIGDECIMAL_STATIC_ASSERT0 __extension__ _Static_assert +#endif + +# if defined(__DOXYGEN__) +# define STATIC_ASSERT static_assert + +# elif defined(BIGDECIMAL_STATIC_ASSERT0) +# define STATIC_ASSERT(name, expr) \ + BIGDECIMAL_STATIC_ASSERT0(expr, #name ": " #expr) + +# else +# define STATIC_ASSERT(name, expr) \ + typedef int static_assert_ ## name ## _check[1 - 2 * !(expr)] +# endif +#endif /* STATIC_ASSERT */ + + +#endif /* BIGDECIMAL_STATIC_ASSERT_H */ diff --git a/ruby/ext/bigdecimal/util/depend b/ruby/ext/bigdecimal/util/depend deleted file mode 100644 index 96b6a7fea..000000000 --- a/ruby/ext/bigdecimal/util/depend +++ /dev/null @@ -1,14 +0,0 @@ -# AUTOGENERATED DEPENDENCIES START -util.o: $(RUBY_EXTCONF_H) -util.o: $(arch_hdrdir)/ruby/config.h -util.o: $(hdrdir)/ruby.h -util.o: $(hdrdir)/ruby/assert.h -util.o: $(hdrdir)/ruby/backward.h -util.o: $(hdrdir)/ruby/defines.h -util.o: $(hdrdir)/ruby/intern.h -util.o: $(hdrdir)/ruby/missing.h -util.o: $(hdrdir)/ruby/ruby.h -util.o: $(hdrdir)/ruby/st.h -util.o: $(hdrdir)/ruby/subst.h -util.o: util.c -# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/cgi/escape/depend b/ruby/ext/cgi/escape/depend index 8d4736616..e726e579d 100644 --- a/ruby/ext/cgi/escape/depend +++ b/ruby/ext/cgi/escape/depend @@ -4,9 +4,165 @@ escape.o: $(arch_hdrdir)/ruby/config.h escape.o: $(hdrdir)/ruby.h escape.o: $(hdrdir)/ruby/assert.h escape.o: $(hdrdir)/ruby/backward.h +escape.o: $(hdrdir)/ruby/backward/2/assume.h +escape.o: $(hdrdir)/ruby/backward/2/attributes.h +escape.o: $(hdrdir)/ruby/backward/2/bool.h +escape.o: $(hdrdir)/ruby/backward/2/inttypes.h +escape.o: $(hdrdir)/ruby/backward/2/limits.h +escape.o: $(hdrdir)/ruby/backward/2/long_long.h +escape.o: $(hdrdir)/ruby/backward/2/stdalign.h +escape.o: $(hdrdir)/ruby/backward/2/stdarg.h escape.o: $(hdrdir)/ruby/defines.h escape.o: $(hdrdir)/ruby/encoding.h escape.o: $(hdrdir)/ruby/intern.h +escape.o: $(hdrdir)/ruby/internal/anyargs.h +escape.o: $(hdrdir)/ruby/internal/arithmetic.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/char.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/double.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/int.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/long.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/short.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +escape.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +escape.o: $(hdrdir)/ruby/internal/assume.h +escape.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +escape.o: $(hdrdir)/ruby/internal/attr/artificial.h +escape.o: $(hdrdir)/ruby/internal/attr/cold.h +escape.o: $(hdrdir)/ruby/internal/attr/const.h +escape.o: $(hdrdir)/ruby/internal/attr/constexpr.h +escape.o: $(hdrdir)/ruby/internal/attr/deprecated.h +escape.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +escape.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +escape.o: $(hdrdir)/ruby/internal/attr/error.h +escape.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +escape.o: $(hdrdir)/ruby/internal/attr/forceinline.h +escape.o: $(hdrdir)/ruby/internal/attr/format.h +escape.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +escape.o: $(hdrdir)/ruby/internal/attr/noalias.h +escape.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +escape.o: $(hdrdir)/ruby/internal/attr/noexcept.h +escape.o: $(hdrdir)/ruby/internal/attr/noinline.h +escape.o: $(hdrdir)/ruby/internal/attr/nonnull.h +escape.o: $(hdrdir)/ruby/internal/attr/noreturn.h +escape.o: $(hdrdir)/ruby/internal/attr/pure.h +escape.o: $(hdrdir)/ruby/internal/attr/restrict.h +escape.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +escape.o: $(hdrdir)/ruby/internal/attr/warning.h +escape.o: $(hdrdir)/ruby/internal/attr/weakref.h +escape.o: $(hdrdir)/ruby/internal/cast.h +escape.o: $(hdrdir)/ruby/internal/compiler_is.h +escape.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +escape.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +escape.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +escape.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +escape.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +escape.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +escape.o: $(hdrdir)/ruby/internal/compiler_since.h +escape.o: $(hdrdir)/ruby/internal/config.h +escape.o: $(hdrdir)/ruby/internal/constant_p.h +escape.o: $(hdrdir)/ruby/internal/core.h +escape.o: $(hdrdir)/ruby/internal/core/rarray.h +escape.o: $(hdrdir)/ruby/internal/core/rbasic.h +escape.o: $(hdrdir)/ruby/internal/core/rbignum.h +escape.o: $(hdrdir)/ruby/internal/core/rclass.h +escape.o: $(hdrdir)/ruby/internal/core/rdata.h +escape.o: $(hdrdir)/ruby/internal/core/rfile.h +escape.o: $(hdrdir)/ruby/internal/core/rhash.h +escape.o: $(hdrdir)/ruby/internal/core/robject.h +escape.o: $(hdrdir)/ruby/internal/core/rregexp.h +escape.o: $(hdrdir)/ruby/internal/core/rstring.h +escape.o: $(hdrdir)/ruby/internal/core/rstruct.h +escape.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +escape.o: $(hdrdir)/ruby/internal/ctype.h +escape.o: $(hdrdir)/ruby/internal/dllexport.h +escape.o: $(hdrdir)/ruby/internal/dosish.h +escape.o: $(hdrdir)/ruby/internal/encoding/coderange.h +escape.o: $(hdrdir)/ruby/internal/encoding/ctype.h +escape.o: $(hdrdir)/ruby/internal/encoding/encoding.h +escape.o: $(hdrdir)/ruby/internal/encoding/pathname.h +escape.o: $(hdrdir)/ruby/internal/encoding/re.h +escape.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +escape.o: $(hdrdir)/ruby/internal/encoding/string.h +escape.o: $(hdrdir)/ruby/internal/encoding/symbol.h +escape.o: $(hdrdir)/ruby/internal/encoding/transcode.h +escape.o: $(hdrdir)/ruby/internal/error.h +escape.o: $(hdrdir)/ruby/internal/eval.h +escape.o: $(hdrdir)/ruby/internal/event.h +escape.o: $(hdrdir)/ruby/internal/fl_type.h +escape.o: $(hdrdir)/ruby/internal/gc.h +escape.o: $(hdrdir)/ruby/internal/glob.h +escape.o: $(hdrdir)/ruby/internal/globals.h +escape.o: $(hdrdir)/ruby/internal/has/attribute.h +escape.o: $(hdrdir)/ruby/internal/has/builtin.h +escape.o: $(hdrdir)/ruby/internal/has/c_attribute.h +escape.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +escape.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +escape.o: $(hdrdir)/ruby/internal/has/extension.h +escape.o: $(hdrdir)/ruby/internal/has/feature.h +escape.o: $(hdrdir)/ruby/internal/has/warning.h +escape.o: $(hdrdir)/ruby/internal/intern/array.h +escape.o: $(hdrdir)/ruby/internal/intern/bignum.h +escape.o: $(hdrdir)/ruby/internal/intern/class.h +escape.o: $(hdrdir)/ruby/internal/intern/compar.h +escape.o: $(hdrdir)/ruby/internal/intern/complex.h +escape.o: $(hdrdir)/ruby/internal/intern/cont.h +escape.o: $(hdrdir)/ruby/internal/intern/dir.h +escape.o: $(hdrdir)/ruby/internal/intern/enum.h +escape.o: $(hdrdir)/ruby/internal/intern/enumerator.h +escape.o: $(hdrdir)/ruby/internal/intern/error.h +escape.o: $(hdrdir)/ruby/internal/intern/eval.h +escape.o: $(hdrdir)/ruby/internal/intern/file.h +escape.o: $(hdrdir)/ruby/internal/intern/gc.h +escape.o: $(hdrdir)/ruby/internal/intern/hash.h +escape.o: $(hdrdir)/ruby/internal/intern/io.h +escape.o: $(hdrdir)/ruby/internal/intern/load.h +escape.o: $(hdrdir)/ruby/internal/intern/marshal.h +escape.o: $(hdrdir)/ruby/internal/intern/numeric.h +escape.o: $(hdrdir)/ruby/internal/intern/object.h +escape.o: $(hdrdir)/ruby/internal/intern/parse.h +escape.o: $(hdrdir)/ruby/internal/intern/proc.h +escape.o: $(hdrdir)/ruby/internal/intern/process.h +escape.o: $(hdrdir)/ruby/internal/intern/random.h +escape.o: $(hdrdir)/ruby/internal/intern/range.h +escape.o: $(hdrdir)/ruby/internal/intern/rational.h +escape.o: $(hdrdir)/ruby/internal/intern/re.h +escape.o: $(hdrdir)/ruby/internal/intern/ruby.h +escape.o: $(hdrdir)/ruby/internal/intern/select.h +escape.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +escape.o: $(hdrdir)/ruby/internal/intern/signal.h +escape.o: $(hdrdir)/ruby/internal/intern/sprintf.h +escape.o: $(hdrdir)/ruby/internal/intern/string.h +escape.o: $(hdrdir)/ruby/internal/intern/struct.h +escape.o: $(hdrdir)/ruby/internal/intern/thread.h +escape.o: $(hdrdir)/ruby/internal/intern/time.h +escape.o: $(hdrdir)/ruby/internal/intern/variable.h +escape.o: $(hdrdir)/ruby/internal/intern/vm.h +escape.o: $(hdrdir)/ruby/internal/interpreter.h +escape.o: $(hdrdir)/ruby/internal/iterator.h +escape.o: $(hdrdir)/ruby/internal/memory.h +escape.o: $(hdrdir)/ruby/internal/method.h +escape.o: $(hdrdir)/ruby/internal/module.h +escape.o: $(hdrdir)/ruby/internal/newobj.h +escape.o: $(hdrdir)/ruby/internal/rgengc.h +escape.o: $(hdrdir)/ruby/internal/scan_args.h +escape.o: $(hdrdir)/ruby/internal/special_consts.h +escape.o: $(hdrdir)/ruby/internal/static_assert.h +escape.o: $(hdrdir)/ruby/internal/stdalign.h +escape.o: $(hdrdir)/ruby/internal/stdbool.h +escape.o: $(hdrdir)/ruby/internal/symbol.h +escape.o: $(hdrdir)/ruby/internal/value.h +escape.o: $(hdrdir)/ruby/internal/value_type.h +escape.o: $(hdrdir)/ruby/internal/variable.h +escape.o: $(hdrdir)/ruby/internal/warning_push.h +escape.o: $(hdrdir)/ruby/internal/xmalloc.h escape.o: $(hdrdir)/ruby/missing.h escape.o: $(hdrdir)/ruby/onigmo.h escape.o: $(hdrdir)/ruby/oniguruma.h diff --git a/ruby/ext/cgi/escape/escape.c b/ruby/ext/cgi/escape/escape.c index 47188819c..f88b61478 100644 --- a/ruby/ext/cgi/escape/escape.c +++ b/ruby/ext/cgi/escape/escape.c @@ -32,11 +32,21 @@ preserve_original_state(VALUE orig, VALUE dest) rb_enc_associate(dest, rb_enc_get(orig)); } +static inline long +escaped_length(VALUE str) +{ + const long len = RSTRING_LEN(str); + if (len >= LONG_MAX / HTML_ESCAPE_MAX_LEN) { + ruby_malloc_size_overflow(len, HTML_ESCAPE_MAX_LEN); + } + return len * HTML_ESCAPE_MAX_LEN; +} + static VALUE optimized_escape_html(VALUE str) { VALUE vbuf; - char *buf = ALLOCV_N(char, vbuf, RSTRING_LEN(str) * HTML_ESCAPE_MAX_LEN); + char *buf = ALLOCV_N(char, vbuf, escaped_length(str)); const char *cstr = RSTRING_PTR(str); const char *end = cstr + RSTRING_LEN(str); @@ -388,6 +398,10 @@ cgiesc_unescape(int argc, VALUE *argv, VALUE self) void Init_escape(void) { +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + id_accept_charset = rb_intern_const("@@accept_charset"); InitVM(escape); } diff --git a/ruby/ext/continuation/depend b/ruby/ext/continuation/depend index 08844aa6b..14ecac144 100644 --- a/ruby/ext/continuation/depend +++ b/ruby/ext/continuation/depend @@ -3,8 +3,155 @@ continuation.o: $(RUBY_EXTCONF_H) continuation.o: $(arch_hdrdir)/ruby/config.h continuation.o: $(hdrdir)/ruby/assert.h continuation.o: $(hdrdir)/ruby/backward.h +continuation.o: $(hdrdir)/ruby/backward/2/assume.h +continuation.o: $(hdrdir)/ruby/backward/2/attributes.h +continuation.o: $(hdrdir)/ruby/backward/2/bool.h +continuation.o: $(hdrdir)/ruby/backward/2/inttypes.h +continuation.o: $(hdrdir)/ruby/backward/2/limits.h +continuation.o: $(hdrdir)/ruby/backward/2/long_long.h +continuation.o: $(hdrdir)/ruby/backward/2/stdalign.h +continuation.o: $(hdrdir)/ruby/backward/2/stdarg.h continuation.o: $(hdrdir)/ruby/defines.h continuation.o: $(hdrdir)/ruby/intern.h +continuation.o: $(hdrdir)/ruby/internal/anyargs.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/char.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/double.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/int.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/long.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/short.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +continuation.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +continuation.o: $(hdrdir)/ruby/internal/assume.h +continuation.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +continuation.o: $(hdrdir)/ruby/internal/attr/artificial.h +continuation.o: $(hdrdir)/ruby/internal/attr/cold.h +continuation.o: $(hdrdir)/ruby/internal/attr/const.h +continuation.o: $(hdrdir)/ruby/internal/attr/constexpr.h +continuation.o: $(hdrdir)/ruby/internal/attr/deprecated.h +continuation.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +continuation.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +continuation.o: $(hdrdir)/ruby/internal/attr/error.h +continuation.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +continuation.o: $(hdrdir)/ruby/internal/attr/forceinline.h +continuation.o: $(hdrdir)/ruby/internal/attr/format.h +continuation.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +continuation.o: $(hdrdir)/ruby/internal/attr/noalias.h +continuation.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +continuation.o: $(hdrdir)/ruby/internal/attr/noexcept.h +continuation.o: $(hdrdir)/ruby/internal/attr/noinline.h +continuation.o: $(hdrdir)/ruby/internal/attr/nonnull.h +continuation.o: $(hdrdir)/ruby/internal/attr/noreturn.h +continuation.o: $(hdrdir)/ruby/internal/attr/pure.h +continuation.o: $(hdrdir)/ruby/internal/attr/restrict.h +continuation.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +continuation.o: $(hdrdir)/ruby/internal/attr/warning.h +continuation.o: $(hdrdir)/ruby/internal/attr/weakref.h +continuation.o: $(hdrdir)/ruby/internal/cast.h +continuation.o: $(hdrdir)/ruby/internal/compiler_is.h +continuation.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +continuation.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +continuation.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +continuation.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +continuation.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +continuation.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +continuation.o: $(hdrdir)/ruby/internal/compiler_since.h +continuation.o: $(hdrdir)/ruby/internal/config.h +continuation.o: $(hdrdir)/ruby/internal/constant_p.h +continuation.o: $(hdrdir)/ruby/internal/core.h +continuation.o: $(hdrdir)/ruby/internal/core/rarray.h +continuation.o: $(hdrdir)/ruby/internal/core/rbasic.h +continuation.o: $(hdrdir)/ruby/internal/core/rbignum.h +continuation.o: $(hdrdir)/ruby/internal/core/rclass.h +continuation.o: $(hdrdir)/ruby/internal/core/rdata.h +continuation.o: $(hdrdir)/ruby/internal/core/rfile.h +continuation.o: $(hdrdir)/ruby/internal/core/rhash.h +continuation.o: $(hdrdir)/ruby/internal/core/robject.h +continuation.o: $(hdrdir)/ruby/internal/core/rregexp.h +continuation.o: $(hdrdir)/ruby/internal/core/rstring.h +continuation.o: $(hdrdir)/ruby/internal/core/rstruct.h +continuation.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +continuation.o: $(hdrdir)/ruby/internal/ctype.h +continuation.o: $(hdrdir)/ruby/internal/dllexport.h +continuation.o: $(hdrdir)/ruby/internal/dosish.h +continuation.o: $(hdrdir)/ruby/internal/error.h +continuation.o: $(hdrdir)/ruby/internal/eval.h +continuation.o: $(hdrdir)/ruby/internal/event.h +continuation.o: $(hdrdir)/ruby/internal/fl_type.h +continuation.o: $(hdrdir)/ruby/internal/gc.h +continuation.o: $(hdrdir)/ruby/internal/glob.h +continuation.o: $(hdrdir)/ruby/internal/globals.h +continuation.o: $(hdrdir)/ruby/internal/has/attribute.h +continuation.o: $(hdrdir)/ruby/internal/has/builtin.h +continuation.o: $(hdrdir)/ruby/internal/has/c_attribute.h +continuation.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +continuation.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +continuation.o: $(hdrdir)/ruby/internal/has/extension.h +continuation.o: $(hdrdir)/ruby/internal/has/feature.h +continuation.o: $(hdrdir)/ruby/internal/has/warning.h +continuation.o: $(hdrdir)/ruby/internal/intern/array.h +continuation.o: $(hdrdir)/ruby/internal/intern/bignum.h +continuation.o: $(hdrdir)/ruby/internal/intern/class.h +continuation.o: $(hdrdir)/ruby/internal/intern/compar.h +continuation.o: $(hdrdir)/ruby/internal/intern/complex.h +continuation.o: $(hdrdir)/ruby/internal/intern/cont.h +continuation.o: $(hdrdir)/ruby/internal/intern/dir.h +continuation.o: $(hdrdir)/ruby/internal/intern/enum.h +continuation.o: $(hdrdir)/ruby/internal/intern/enumerator.h +continuation.o: $(hdrdir)/ruby/internal/intern/error.h +continuation.o: $(hdrdir)/ruby/internal/intern/eval.h +continuation.o: $(hdrdir)/ruby/internal/intern/file.h +continuation.o: $(hdrdir)/ruby/internal/intern/gc.h +continuation.o: $(hdrdir)/ruby/internal/intern/hash.h +continuation.o: $(hdrdir)/ruby/internal/intern/io.h +continuation.o: $(hdrdir)/ruby/internal/intern/load.h +continuation.o: $(hdrdir)/ruby/internal/intern/marshal.h +continuation.o: $(hdrdir)/ruby/internal/intern/numeric.h +continuation.o: $(hdrdir)/ruby/internal/intern/object.h +continuation.o: $(hdrdir)/ruby/internal/intern/parse.h +continuation.o: $(hdrdir)/ruby/internal/intern/proc.h +continuation.o: $(hdrdir)/ruby/internal/intern/process.h +continuation.o: $(hdrdir)/ruby/internal/intern/random.h +continuation.o: $(hdrdir)/ruby/internal/intern/range.h +continuation.o: $(hdrdir)/ruby/internal/intern/rational.h +continuation.o: $(hdrdir)/ruby/internal/intern/re.h +continuation.o: $(hdrdir)/ruby/internal/intern/ruby.h +continuation.o: $(hdrdir)/ruby/internal/intern/select.h +continuation.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +continuation.o: $(hdrdir)/ruby/internal/intern/signal.h +continuation.o: $(hdrdir)/ruby/internal/intern/sprintf.h +continuation.o: $(hdrdir)/ruby/internal/intern/string.h +continuation.o: $(hdrdir)/ruby/internal/intern/struct.h +continuation.o: $(hdrdir)/ruby/internal/intern/thread.h +continuation.o: $(hdrdir)/ruby/internal/intern/time.h +continuation.o: $(hdrdir)/ruby/internal/intern/variable.h +continuation.o: $(hdrdir)/ruby/internal/intern/vm.h +continuation.o: $(hdrdir)/ruby/internal/interpreter.h +continuation.o: $(hdrdir)/ruby/internal/iterator.h +continuation.o: $(hdrdir)/ruby/internal/memory.h +continuation.o: $(hdrdir)/ruby/internal/method.h +continuation.o: $(hdrdir)/ruby/internal/module.h +continuation.o: $(hdrdir)/ruby/internal/newobj.h +continuation.o: $(hdrdir)/ruby/internal/rgengc.h +continuation.o: $(hdrdir)/ruby/internal/scan_args.h +continuation.o: $(hdrdir)/ruby/internal/special_consts.h +continuation.o: $(hdrdir)/ruby/internal/static_assert.h +continuation.o: $(hdrdir)/ruby/internal/stdalign.h +continuation.o: $(hdrdir)/ruby/internal/stdbool.h +continuation.o: $(hdrdir)/ruby/internal/symbol.h +continuation.o: $(hdrdir)/ruby/internal/value.h +continuation.o: $(hdrdir)/ruby/internal/value_type.h +continuation.o: $(hdrdir)/ruby/internal/variable.h +continuation.o: $(hdrdir)/ruby/internal/warning_push.h +continuation.o: $(hdrdir)/ruby/internal/xmalloc.h continuation.o: $(hdrdir)/ruby/missing.h continuation.o: $(hdrdir)/ruby/ruby.h continuation.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/coverage/coverage.c b/ruby/ext/coverage/coverage.c index 8503c9d6c..3dc2490d4 100644 --- a/ruby/ext/coverage/coverage.c +++ b/ruby/ext/coverage/coverage.c @@ -8,25 +8,45 @@ ************************************************/ +#include "gc.h" +#include "internal/hash.h" +#include "internal/thread.h" +#include "internal/sanitizers.h" #include "ruby.h" #include "vm_core.h" -#include "gc.h" +static enum { + IDLE, + SUSPENDED, + RUNNING +} current_state = IDLE; static int current_mode; static VALUE me2counter = Qnil; /* * call-seq: - * Coverage.start => nil + * Coverage.setup => nil + * Coverage.setup(:all) => nil + * Coverage.setup(lines: bool, branches: bool, methods: bool) => nil + * Coverage.setup(oneshot_lines: true) => nil + * + * Set up the coverage measurement. + * + * Note that this method does not start the measurement itself. + * Use Coverage.resume to start the measurement. * - * Enables coverage measurement. + * You may want to use Coverage.start to setup and then start the measurement. */ static VALUE -rb_coverage_start(int argc, VALUE *argv, VALUE klass) +rb_coverage_setup(int argc, VALUE *argv, VALUE klass) { VALUE coverages, opt; int mode; + if (current_state != IDLE) { + rb_raise(rb_eRuntimeError, "coverage measurement is already setup"); + } + rb_scan_args(argc, argv, "01", &opt); if (argc == 0) { @@ -67,43 +87,116 @@ rb_coverage_start(int argc, VALUE *argv, VALUE klass) current_mode = mode; if (mode == 0) mode = COVERAGE_TARGET_LINES; rb_set_coverages(coverages, mode, me2counter); + current_state = SUSPENDED; } else if (current_mode != mode) { rb_raise(rb_eRuntimeError, "cannot change the measuring target during coverage measurement"); } + + + return Qnil; +} + +/* + * call-seq: + * Coverage.resume => nil + * + * Start/resume the coverage measurement. + * + * Caveat: Currently, only process-global coverage measurement is supported. + * You cannot measure per-thread covearge. If your process has multiple thread, + * using Coverage.resume/suspend to capture code coverage executed from only + * a limited code block, may yield misleading results. + */ +VALUE +rb_coverage_resume(VALUE klass) +{ + if (current_state == IDLE) { + rb_raise(rb_eRuntimeError, "coverage measurement is not set up yet"); + } + if (current_state == RUNNING) { + rb_raise(rb_eRuntimeError, "coverage measurement is already running"); + } + rb_resume_coverages(); + current_state = RUNNING; + return Qnil; +} + +/* + * call-seq: + * Coverage.start => nil + * Coverage.start(:all) => nil + * Coverage.start(lines: bool, branches: bool, methods: bool) => nil + * Coverage.start(oneshot_lines: true) => nil + * + * Enables the coverage measurement. + * See the documentation of Coverage class in detail. + * This is equivalent to Coverage.setup and Coverage.resume. + */ +static VALUE +rb_coverage_start(int argc, VALUE *argv, VALUE klass) +{ + rb_coverage_setup(argc, argv, klass); + rb_coverage_resume(klass); return Qnil; } +struct branch_coverage_result_builder +{ + int id; + VALUE result; + VALUE children; + VALUE counters; +}; + +static int +branch_coverage_ii(VALUE _key, VALUE branch, VALUE v) +{ + struct branch_coverage_result_builder *b = (struct branch_coverage_result_builder *) v; + + VALUE target_label = RARRAY_AREF(branch, 0); + VALUE target_first_lineno = RARRAY_AREF(branch, 1); + VALUE target_first_column = RARRAY_AREF(branch, 2); + VALUE target_last_lineno = RARRAY_AREF(branch, 3); + VALUE target_last_column = RARRAY_AREF(branch, 4); + long counter_idx = FIX2LONG(RARRAY_AREF(branch, 5)); + rb_hash_aset(b->children, rb_ary_new_from_args(6, target_label, LONG2FIX(b->id++), target_first_lineno, target_first_column, target_last_lineno, target_last_column), RARRAY_AREF(b->counters, counter_idx)); + + return ST_CONTINUE; +} + +static int +branch_coverage_i(VALUE _key, VALUE branch_base, VALUE v) +{ + struct branch_coverage_result_builder *b = (struct branch_coverage_result_builder *) v; + + VALUE base_type = RARRAY_AREF(branch_base, 0); + VALUE base_first_lineno = RARRAY_AREF(branch_base, 1); + VALUE base_first_column = RARRAY_AREF(branch_base, 2); + VALUE base_last_lineno = RARRAY_AREF(branch_base, 3); + VALUE base_last_column = RARRAY_AREF(branch_base, 4); + VALUE branches = RARRAY_AREF(branch_base, 5); + VALUE children = rb_hash_new(); + rb_hash_aset(b->result, rb_ary_new_from_args(6, base_type, LONG2FIX(b->id++), base_first_lineno, base_first_column, base_last_lineno, base_last_column), children); + b->children = children; + rb_hash_foreach(branches, branch_coverage_ii, v); + + return ST_CONTINUE; +} + static VALUE branch_coverage(VALUE branches) { - VALUE ret = rb_hash_new(); - VALUE structure = rb_ary_dup(RARRAY_AREF(branches, 0)); - VALUE counters = rb_ary_dup(RARRAY_AREF(branches, 1)); - int i, j; - long id = 0; - - for (i = 0; i < RARRAY_LEN(structure); i++) { - VALUE branches = RARRAY_AREF(structure, i); - VALUE base_type = RARRAY_AREF(branches, 0); - VALUE base_first_lineno = RARRAY_AREF(branches, 1); - VALUE base_first_column = RARRAY_AREF(branches, 2); - VALUE base_last_lineno = RARRAY_AREF(branches, 3); - VALUE base_last_column = RARRAY_AREF(branches, 4); - VALUE children = rb_hash_new(); - rb_hash_aset(ret, rb_ary_new_from_args(6, base_type, LONG2FIX(id++), base_first_lineno, base_first_column, base_last_lineno, base_last_column), children); - for (j = 5; j < RARRAY_LEN(branches); j += 6) { - VALUE target_label = RARRAY_AREF(branches, j); - VALUE target_first_lineno = RARRAY_AREF(branches, j + 1); - VALUE target_first_column = RARRAY_AREF(branches, j + 2); - VALUE target_last_lineno = RARRAY_AREF(branches, j + 3); - VALUE target_last_column = RARRAY_AREF(branches, j + 4); - int idx = FIX2INT(RARRAY_AREF(branches, j + 5)); - rb_hash_aset(children, rb_ary_new_from_args(6, target_label, LONG2FIX(id++), target_first_lineno, target_first_column, target_last_lineno, target_last_column), RARRAY_AREF(counters, idx)); - } - } + VALUE structure = RARRAY_AREF(branches, 0); + + struct branch_coverage_result_builder b; + b.id = 0; + b.result = rb_hash_new(); + b.counters = RARRAY_AREF(branches, 1); - return ret; + rb_hash_foreach(structure, branch_coverage_i, (VALUE)&b); + + return b.result; } static int @@ -122,6 +215,9 @@ method_coverage_i(void *vstart, void *vend, size_t stride, void *data) VALUE ncoverages = *(VALUE*)data, v; for (v = (VALUE)vstart; v != (VALUE)vend; v += stride) { + void *poisoned = asan_poisoned_object_p(v); + asan_unpoison_object(v, false); + if (RB_TYPE_P(v, T_IMEMO) && imemo_type(v) == imemo_ment) { const rb_method_entry_t *me = (rb_method_entry_t *) v; VALUE path, first_lineno, first_column, last_lineno, last_column; @@ -161,6 +257,10 @@ method_coverage_i(void *vstart, void *vend, size_t stride, void *data) rb_hash_aset(methods, key, rcount); } } + + if (poisoned) { + asan_poison_object(v); + } } return 0; } @@ -224,7 +324,8 @@ rb_coverage_peek_result(VALUE klass) if (!RTEST(coverages)) { rb_raise(rb_eRuntimeError, "coverage measurement is not enabled"); } - st_foreach(RHASH_TBL(coverages), coverage_peek_result_i, ncoverages); + OBJ_WB_UNPROTECT(coverages); + st_foreach(RHASH_TBL_RAW(coverages), coverage_peek_result_i, ncoverages); if (current_mode & COVERAGE_TARGET_METHODS) { rb_objspace_each_objects(method_coverage_i, &ncoverages); @@ -242,6 +343,24 @@ clear_me2counter_i(VALUE key, VALUE value, VALUE unused) return ST_CONTINUE; } +/* + * call-seq: + * Coverage.suspend => nil + * + * Suspend the coverage measurement. + * You can use Coverage.resume to restart the measurement. + */ +VALUE +rb_coverage_suspend(VALUE klass) +{ + if (current_state != RUNNING) { + rb_raise(rb_eRuntimeError, "coverage measurement is not running"); + } + rb_suspend_coverages(); + current_state = SUSPENDED; + return Qnil; +} + /* * call-seq: * Coverage.result(stop: true, clear: true) => hash @@ -257,6 +376,10 @@ rb_coverage_result(int argc, VALUE *argv, VALUE klass) VALUE opt; int stop = 1, clear = 1; + if (current_state == IDLE) { + rb_raise(rb_eRuntimeError, "coverage measurement is not enabled"); + } + rb_scan_args(argc, argv, "01", &opt); if (argc == 1) { @@ -275,13 +398,34 @@ rb_coverage_result(int argc, VALUE *argv, VALUE klass) if (!NIL_P(me2counter)) rb_hash_foreach(me2counter, clear_me2counter_i, Qnil); } if (stop) { + if (current_state == RUNNING) { + rb_coverage_suspend(klass); + } rb_reset_coverages(); me2counter = Qnil; + current_state = IDLE; } return ncoverages; } +/* + * call-seq: + * Coverage.state => :idle, :suspended, :running + * + * Returns the state of the coverage measurement. + */ +static VALUE +rb_coverage_state(VALUE klass) +{ + switch (current_state) { + case IDLE: return ID2SYM(rb_intern("idle")); + case SUSPENDED: return ID2SYM(rb_intern("suspended")); + case RUNNING: return ID2SYM(rb_intern("running")); + } + return Qnil; +} + /* * call-seq: * Coverage.running? => bool @@ -292,13 +436,15 @@ rb_coverage_result(int argc, VALUE *argv, VALUE klass) static VALUE rb_coverage_running(VALUE klass) { - VALUE coverages = rb_get_coverages(); - return RTEST(coverages) ? Qtrue : Qfalse; + return current_state == RUNNING ? Qtrue : Qfalse; } /* Coverage provides coverage measurement feature for Ruby. * This feature is experimental, so these APIs may be changed in future. * + * Caveat: Currently, only process-global coverage measurement is supported. + * You cannot measure per-thread covearge. + * * = Usage * * 1. require "coverage" @@ -309,7 +455,7 @@ rb_coverage_running(VALUE klass) * number of line execution by the interpreter. A +nil+ value means * coverage is disabled for this line (lines like +else+ and +end+). * - * = Example + * = Examples * * [foo.rb] * s = 0 @@ -328,14 +474,128 @@ rb_coverage_running(VALUE klass) * Coverage.start * require "foo.rb" * p Coverage.result #=> {"foo.rb"=>[1, 1, 10, nil, nil, 1, 1, nil, 0, nil]} + * + * == Lines Coverage + * + * If a coverage mode is not explicitly specified when starting coverage, lines + * coverage is what will run. It reports the number of line executions for each + * line. + * + * require "coverage" + * Coverage.start(lines: true) + * require "foo.rb" + * p Coverage.result #=> {"foo.rb"=>{:lines=>[1, 1, 10, nil, nil, 1, 1, nil, 0, nil]}} + * + * The value of the lines coverage result is an array containing how many times + * each line was executed. Order in this array is important. For example, the + * first item in this array, at index 0, reports how many times line 1 of this + * file was executed while coverage was run (which, in this example, is one + * time). + * + * A +nil+ value means coverage is disabled for this line (lines like +else+ + * and +end+). + * + * == Oneshot Lines Coverage + * + * Oneshot lines coverage tracks and reports on the executed lines while + * coverage is running. It will not report how many times a line was executed, + * only that it was executed. + * + * require "coverage" + * Coverage.start(oneshot_lines: true) + * require "foo.rb" + * p Coverage.result #=> {"foo.rb"=>{:oneshot_lines=>[1, 2, 3, 6, 7]}} + * + * The value of the oneshot lines coverage result is an array containing the + * line numbers that were executed. + * + * == Branches Coverage + * + * Branches coverage reports how many times each branch within each conditional + * was executed. + * + * require "coverage" + * Coverage.start(branches: true) + * require "foo.rb" + * p Coverage.result #=> {"foo.rb"=>{:branches=>{[:if, 0, 6, 0, 10, 3]=>{[:then, 1, 7, 2, 7, 7]=>1, [:else, 2, 9, 2, 9, 7]=>0}}}} + * + * Each entry within the branches hash is a conditional, the value of which is + * another hash where each entry is a branch in that conditional. The values + * are the number of times the method was executed, and the keys are identifying + * information about the branch. + * + * The information that makes up each key identifying branches or conditionals + * is the following, from left to right: + * + * 1. A label for the type of branch or conditional. + * 2. A unique identifier. + * 3. The starting line number it appears on in the file. + * 4. The starting column number it appears on in the file. + * 5. The ending line number it appears on in the file. + * 6. The ending column number it appears on in the file. + * + * == Methods Coverage + * + * Methods coverage reports how many times each method was executed. + * + * [foo_method.rb] + * class Greeter + * def greet + * "welcome!" + * end + * end + * + * def hello + * "Hi" + * end + * + * hello() + * Greeter.new.greet() + * [EOF] + * + * require "coverage" + * Coverage.start(methods: true) + * require "foo_method.rb" + * p Coverage.result #=> {"foo_method.rb"=>{:methods=>{[Object, :hello, 7, 0, 9, 3]=>1, [Greeter, :greet, 2, 2, 4, 5]=>1}}} + * + * Each entry within the methods hash represents a method. The values in this + * hash are the number of times the method was executed, and the keys are + * identifying information about the method. + * + * The information that makes up each key identifying a method is the following, + * from left to right: + * + * 1. The class. + * 2. The method name. + * 3. The starting line number the method appears on in the file. + * 4. The starting column number the method appears on in the file. + * 5. The ending line number the method appears on in the file. + * 6. The ending column number the method appears on in the file. + * + * == All Coverage Modes + * + * You can also run all modes of coverage simultaneously with this shortcut. + * Note that running all coverage modes does not run both lines and oneshot + * lines. Those modes cannot be run simultaneously. Lines coverage is run in + * this case, because you can still use it to determine whether or not a line + * was executed. + * + * require "coverage" + * Coverage.start(:all) + * require "foo.rb" + * p Coverage.result #=> {"foo.rb"=>{:lines=>[1, 1, 10, nil, nil, 1, 1, nil, 0, nil], :branches=>{[:if, 0, 6, 0, 10, 3]=>{[:then, 1, 7, 2, 7, 7]=>1, [:else, 2, 9, 2, 9, 7]=>0}}, :methods=>{}}} */ void Init_coverage(void) { VALUE rb_mCoverage = rb_define_module("Coverage"); + rb_define_module_function(rb_mCoverage, "setup", rb_coverage_setup, -1); rb_define_module_function(rb_mCoverage, "start", rb_coverage_start, -1); + rb_define_module_function(rb_mCoverage, "resume", rb_coverage_resume, 0); + rb_define_module_function(rb_mCoverage, "suspend", rb_coverage_suspend, 0); rb_define_module_function(rb_mCoverage, "result", rb_coverage_result, -1); rb_define_module_function(rb_mCoverage, "peek_result", rb_coverage_peek_result, 0); + rb_define_module_function(rb_mCoverage, "state", rb_coverage_state, 0); rb_define_module_function(rb_mCoverage, "running?", rb_coverage_running, 0); rb_global_variable(&me2counter); } diff --git a/ruby/ext/coverage/depend b/ruby/ext/coverage/depend index 20b76be04..228ee7381 100644 --- a/ruby/ext/coverage/depend +++ b/ruby/ext/coverage/depend @@ -3,9 +3,158 @@ coverage.o: $(RUBY_EXTCONF_H) coverage.o: $(arch_hdrdir)/ruby/config.h coverage.o: $(hdrdir)/ruby.h coverage.o: $(hdrdir)/ruby/assert.h +coverage.o: $(hdrdir)/ruby/atomic.h coverage.o: $(hdrdir)/ruby/backward.h +coverage.o: $(hdrdir)/ruby/backward/2/assume.h +coverage.o: $(hdrdir)/ruby/backward/2/attributes.h +coverage.o: $(hdrdir)/ruby/backward/2/bool.h +coverage.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +coverage.o: $(hdrdir)/ruby/backward/2/inttypes.h +coverage.o: $(hdrdir)/ruby/backward/2/limits.h +coverage.o: $(hdrdir)/ruby/backward/2/long_long.h +coverage.o: $(hdrdir)/ruby/backward/2/stdalign.h +coverage.o: $(hdrdir)/ruby/backward/2/stdarg.h coverage.o: $(hdrdir)/ruby/defines.h coverage.o: $(hdrdir)/ruby/intern.h +coverage.o: $(hdrdir)/ruby/internal/anyargs.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/char.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/double.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/int.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/long.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/short.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +coverage.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +coverage.o: $(hdrdir)/ruby/internal/assume.h +coverage.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +coverage.o: $(hdrdir)/ruby/internal/attr/artificial.h +coverage.o: $(hdrdir)/ruby/internal/attr/cold.h +coverage.o: $(hdrdir)/ruby/internal/attr/const.h +coverage.o: $(hdrdir)/ruby/internal/attr/constexpr.h +coverage.o: $(hdrdir)/ruby/internal/attr/deprecated.h +coverage.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +coverage.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +coverage.o: $(hdrdir)/ruby/internal/attr/error.h +coverage.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +coverage.o: $(hdrdir)/ruby/internal/attr/forceinline.h +coverage.o: $(hdrdir)/ruby/internal/attr/format.h +coverage.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +coverage.o: $(hdrdir)/ruby/internal/attr/noalias.h +coverage.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +coverage.o: $(hdrdir)/ruby/internal/attr/noexcept.h +coverage.o: $(hdrdir)/ruby/internal/attr/noinline.h +coverage.o: $(hdrdir)/ruby/internal/attr/nonnull.h +coverage.o: $(hdrdir)/ruby/internal/attr/noreturn.h +coverage.o: $(hdrdir)/ruby/internal/attr/pure.h +coverage.o: $(hdrdir)/ruby/internal/attr/restrict.h +coverage.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +coverage.o: $(hdrdir)/ruby/internal/attr/warning.h +coverage.o: $(hdrdir)/ruby/internal/attr/weakref.h +coverage.o: $(hdrdir)/ruby/internal/cast.h +coverage.o: $(hdrdir)/ruby/internal/compiler_is.h +coverage.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +coverage.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +coverage.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +coverage.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +coverage.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +coverage.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +coverage.o: $(hdrdir)/ruby/internal/compiler_since.h +coverage.o: $(hdrdir)/ruby/internal/config.h +coverage.o: $(hdrdir)/ruby/internal/constant_p.h +coverage.o: $(hdrdir)/ruby/internal/core.h +coverage.o: $(hdrdir)/ruby/internal/core/rarray.h +coverage.o: $(hdrdir)/ruby/internal/core/rbasic.h +coverage.o: $(hdrdir)/ruby/internal/core/rbignum.h +coverage.o: $(hdrdir)/ruby/internal/core/rclass.h +coverage.o: $(hdrdir)/ruby/internal/core/rdata.h +coverage.o: $(hdrdir)/ruby/internal/core/rfile.h +coverage.o: $(hdrdir)/ruby/internal/core/rhash.h +coverage.o: $(hdrdir)/ruby/internal/core/robject.h +coverage.o: $(hdrdir)/ruby/internal/core/rregexp.h +coverage.o: $(hdrdir)/ruby/internal/core/rstring.h +coverage.o: $(hdrdir)/ruby/internal/core/rstruct.h +coverage.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +coverage.o: $(hdrdir)/ruby/internal/ctype.h +coverage.o: $(hdrdir)/ruby/internal/dllexport.h +coverage.o: $(hdrdir)/ruby/internal/dosish.h +coverage.o: $(hdrdir)/ruby/internal/error.h +coverage.o: $(hdrdir)/ruby/internal/eval.h +coverage.o: $(hdrdir)/ruby/internal/event.h +coverage.o: $(hdrdir)/ruby/internal/fl_type.h +coverage.o: $(hdrdir)/ruby/internal/gc.h +coverage.o: $(hdrdir)/ruby/internal/glob.h +coverage.o: $(hdrdir)/ruby/internal/globals.h +coverage.o: $(hdrdir)/ruby/internal/has/attribute.h +coverage.o: $(hdrdir)/ruby/internal/has/builtin.h +coverage.o: $(hdrdir)/ruby/internal/has/c_attribute.h +coverage.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +coverage.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +coverage.o: $(hdrdir)/ruby/internal/has/extension.h +coverage.o: $(hdrdir)/ruby/internal/has/feature.h +coverage.o: $(hdrdir)/ruby/internal/has/warning.h +coverage.o: $(hdrdir)/ruby/internal/intern/array.h +coverage.o: $(hdrdir)/ruby/internal/intern/bignum.h +coverage.o: $(hdrdir)/ruby/internal/intern/class.h +coverage.o: $(hdrdir)/ruby/internal/intern/compar.h +coverage.o: $(hdrdir)/ruby/internal/intern/complex.h +coverage.o: $(hdrdir)/ruby/internal/intern/cont.h +coverage.o: $(hdrdir)/ruby/internal/intern/dir.h +coverage.o: $(hdrdir)/ruby/internal/intern/enum.h +coverage.o: $(hdrdir)/ruby/internal/intern/enumerator.h +coverage.o: $(hdrdir)/ruby/internal/intern/error.h +coverage.o: $(hdrdir)/ruby/internal/intern/eval.h +coverage.o: $(hdrdir)/ruby/internal/intern/file.h +coverage.o: $(hdrdir)/ruby/internal/intern/gc.h +coverage.o: $(hdrdir)/ruby/internal/intern/hash.h +coverage.o: $(hdrdir)/ruby/internal/intern/io.h +coverage.o: $(hdrdir)/ruby/internal/intern/load.h +coverage.o: $(hdrdir)/ruby/internal/intern/marshal.h +coverage.o: $(hdrdir)/ruby/internal/intern/numeric.h +coverage.o: $(hdrdir)/ruby/internal/intern/object.h +coverage.o: $(hdrdir)/ruby/internal/intern/parse.h +coverage.o: $(hdrdir)/ruby/internal/intern/proc.h +coverage.o: $(hdrdir)/ruby/internal/intern/process.h +coverage.o: $(hdrdir)/ruby/internal/intern/random.h +coverage.o: $(hdrdir)/ruby/internal/intern/range.h +coverage.o: $(hdrdir)/ruby/internal/intern/rational.h +coverage.o: $(hdrdir)/ruby/internal/intern/re.h +coverage.o: $(hdrdir)/ruby/internal/intern/ruby.h +coverage.o: $(hdrdir)/ruby/internal/intern/select.h +coverage.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +coverage.o: $(hdrdir)/ruby/internal/intern/signal.h +coverage.o: $(hdrdir)/ruby/internal/intern/sprintf.h +coverage.o: $(hdrdir)/ruby/internal/intern/string.h +coverage.o: $(hdrdir)/ruby/internal/intern/struct.h +coverage.o: $(hdrdir)/ruby/internal/intern/thread.h +coverage.o: $(hdrdir)/ruby/internal/intern/time.h +coverage.o: $(hdrdir)/ruby/internal/intern/variable.h +coverage.o: $(hdrdir)/ruby/internal/intern/vm.h +coverage.o: $(hdrdir)/ruby/internal/interpreter.h +coverage.o: $(hdrdir)/ruby/internal/iterator.h +coverage.o: $(hdrdir)/ruby/internal/memory.h +coverage.o: $(hdrdir)/ruby/internal/method.h +coverage.o: $(hdrdir)/ruby/internal/module.h +coverage.o: $(hdrdir)/ruby/internal/newobj.h +coverage.o: $(hdrdir)/ruby/internal/rgengc.h +coverage.o: $(hdrdir)/ruby/internal/scan_args.h +coverage.o: $(hdrdir)/ruby/internal/special_consts.h +coverage.o: $(hdrdir)/ruby/internal/static_assert.h +coverage.o: $(hdrdir)/ruby/internal/stdalign.h +coverage.o: $(hdrdir)/ruby/internal/stdbool.h +coverage.o: $(hdrdir)/ruby/internal/symbol.h +coverage.o: $(hdrdir)/ruby/internal/value.h +coverage.o: $(hdrdir)/ruby/internal/value_type.h +coverage.o: $(hdrdir)/ruby/internal/variable.h +coverage.o: $(hdrdir)/ruby/internal/warning_push.h +coverage.o: $(hdrdir)/ruby/internal/xmalloc.h coverage.o: $(hdrdir)/ruby/missing.h coverage.o: $(hdrdir)/ruby/ruby.h coverage.o: $(hdrdir)/ruby/st.h @@ -15,8 +164,20 @@ coverage.o: $(top_srcdir)/ccan/check_type/check_type.h coverage.o: $(top_srcdir)/ccan/container_of/container_of.h coverage.o: $(top_srcdir)/ccan/list/list.h coverage.o: $(top_srcdir)/ccan/str/str.h +coverage.o: $(top_srcdir)/darray.h coverage.o: $(top_srcdir)/gc.h coverage.o: $(top_srcdir)/internal.h +coverage.o: $(top_srcdir)/internal/array.h +coverage.o: $(top_srcdir)/internal/compilers.h +coverage.o: $(top_srcdir)/internal/gc.h +coverage.o: $(top_srcdir)/internal/hash.h +coverage.o: $(top_srcdir)/internal/imemo.h +coverage.o: $(top_srcdir)/internal/sanitizers.h +coverage.o: $(top_srcdir)/internal/serial.h +coverage.o: $(top_srcdir)/internal/static_assert.h +coverage.o: $(top_srcdir)/internal/thread.h +coverage.o: $(top_srcdir)/internal/vm.h +coverage.o: $(top_srcdir)/internal/warnings.h coverage.o: $(top_srcdir)/method.h coverage.o: $(top_srcdir)/node.h coverage.o: $(top_srcdir)/ruby_assert.h diff --git a/ruby/ext/date/date.gemspec b/ruby/ext/date/date.gemspec index bd323b7a0..cf0769697 100644 --- a/ruby/ext/date/date.gemspec +++ b/ruby/ext/date/date.gemspec @@ -1,7 +1,12 @@ # frozen_string_literal: true + +version = File.foreach(File.expand_path("../lib/date.rb", __FILE__)).find do |line| + /^\s*VERSION\s*=\s*["'](.*)["']/ =~ line and break $1 +end + Gem::Specification.new do |s| s.name = "date" - s.version = '3.0.0' + s.version = version s.summary = "A subclass of Object includes Comparable module for handling dates." s.description = "A subclass of Object includes Comparable module for handling dates." @@ -17,5 +22,5 @@ Gem::Specification.new do |s| s.authors = ["Tadayoshi Funaba"] s.email = [nil] s.homepage = "https://github.com/ruby/date" - s.license = "BSD-2-Clause" + s.licenses = ["Ruby", "BSD-2-Clause"] end diff --git a/ruby/ext/date/date_core.c b/ruby/ext/date/date_core.c index ccac90a32..f6579b81e 100644 --- a/ruby/ext/date/date_core.c +++ b/ruby/ext/date/date_core.c @@ -11,6 +11,7 @@ #include #endif +#undef NDEBUG #define NDEBUG #include @@ -52,6 +53,8 @@ static double positive_inf, negative_inf; #define f_add3(x,y,z) f_add(f_add(x, y), z) #define f_sub3(x,y,z) f_sub(f_sub(x, y), z) +#define f_frozen_ary(...) rb_obj_freeze(rb_ary_new3(__VA_ARGS__)) + static VALUE date_initialize(int argc, VALUE *argv, VALUE self); static VALUE datetime_initialize(int argc, VALUE *argv, VALUE self); @@ -2970,11 +2973,15 @@ d_lite_memsize(const void *ptr) return complex_dat_p(dat) ? sizeof(struct ComplexDateData) : sizeof(struct SimpleDateData); } +#ifndef HAVE_RB_EXT_RACTOR_SAFE +# define RUBY_TYPED_FROZEN_SHAREABLE 0 +#endif + static const rb_data_type_t d_lite_type = { "Date", {d_lite_gc_mark, RUBY_TYPED_DEFAULT_FREE, d_lite_memsize,}, 0, 0, - RUBY_TYPED_FREE_IMMEDIATELY|RUBY_TYPED_WB_PROTECTED, + RUBY_TYPED_FREE_IMMEDIATELY|RUBY_TYPED_WB_PROTECTED|RUBY_TYPED_FROZEN_SHAREABLE, }; inline static VALUE @@ -3766,89 +3773,89 @@ rt_complete_frags(VALUE klass, VALUE hash) VALUE k, a, d; if (NIL_P(tab)) { - tab = rb_ary_new3(11, - rb_ary_new3(2, + tab = f_frozen_ary(11, + f_frozen_ary(2, sym("time"), - rb_ary_new3(3, + f_frozen_ary(3, sym("hour"), sym("min"), sym("sec"))), - rb_ary_new3(2, + f_frozen_ary(2, Qnil, - rb_ary_new3(1, + f_frozen_ary(1, sym("jd"))), - rb_ary_new3(2, + f_frozen_ary(2, sym("ordinal"), - rb_ary_new3(5, + f_frozen_ary(5, sym("year"), sym("yday"), sym("hour"), sym("min"), sym("sec"))), - rb_ary_new3(2, + f_frozen_ary(2, sym("civil"), - rb_ary_new3(6, + f_frozen_ary(6, sym("year"), sym("mon"), sym("mday"), sym("hour"), sym("min"), sym("sec"))), - rb_ary_new3(2, + f_frozen_ary(2, sym("commercial"), - rb_ary_new3(6, + f_frozen_ary(6, sym("cwyear"), sym("cweek"), sym("cwday"), sym("hour"), sym("min"), sym("sec"))), - rb_ary_new3(2, + f_frozen_ary(2, sym("wday"), - rb_ary_new3(4, + f_frozen_ary(4, sym("wday"), sym("hour"), sym("min"), sym("sec"))), - rb_ary_new3(2, + f_frozen_ary(2, sym("wnum0"), - rb_ary_new3(6, + f_frozen_ary(6, sym("year"), sym("wnum0"), sym("wday"), sym("hour"), sym("min"), sym("sec"))), - rb_ary_new3(2, + f_frozen_ary(2, sym("wnum1"), - rb_ary_new3(6, + f_frozen_ary(6, sym("year"), sym("wnum1"), sym("wday"), sym("hour"), sym("min"), sym("sec"))), - rb_ary_new3(2, + f_frozen_ary(2, Qnil, - rb_ary_new3(6, + f_frozen_ary(6, sym("cwyear"), sym("cweek"), sym("wday"), sym("hour"), sym("min"), sym("sec"))), - rb_ary_new3(2, + f_frozen_ary(2, Qnil, - rb_ary_new3(6, + f_frozen_ary(6, sym("year"), sym("wnum0"), sym("cwday"), sym("hour"), sym("min"), sym("sec"))), - rb_ary_new3(2, + f_frozen_ary(2, Qnil, - rb_ary_new3(6, + f_frozen_ary(6, sym("year"), sym("wnum1"), sym("cwday"), @@ -4321,12 +4328,40 @@ date_s_strptime(int argc, VALUE *argv, VALUE klass) VALUE date__parse(VALUE str, VALUE comp); +static size_t +get_limit(VALUE opt) +{ + if (!NIL_P(opt)) { + VALUE limit = rb_hash_aref(opt, ID2SYM(rb_intern("limit"))); + if (NIL_P(limit)) return SIZE_MAX; + return NUM2SIZET(limit); + } + return 128; +} + +static void +check_limit(VALUE str, VALUE opt) +{ + if (NIL_P(str)) return; + if (SYMBOL_P(str)) str = rb_sym2str(str); + + StringValue(str); + size_t slen = RSTRING_LEN(str); + size_t limit = get_limit(opt); + if (slen > limit) { + rb_raise(rb_eArgError, + "string length (%"PRI_SIZE_PREFIX"u) exceeds the limit %"PRI_SIZE_PREFIX"u", slen, limit); + } +} + static VALUE date_s__parse_internal(int argc, VALUE *argv, VALUE klass) { - VALUE vstr, vcomp, hash; + VALUE vstr, vcomp, hash, opt; - rb_scan_args(argc, argv, "11", &vstr, &vcomp); + rb_scan_args(argc, argv, "11:", &vstr, &vcomp, &opt); + if (!NIL_P(opt)) argc--; + check_limit(vstr, opt); StringValue(vstr); if (!rb_enc_str_asciicompat_p(vstr)) rb_raise(rb_eArgError, @@ -4341,17 +4376,25 @@ date_s__parse_internal(int argc, VALUE *argv, VALUE klass) /* * call-seq: - * Date._parse(string[, comp=true]) -> hash + * Date._parse(string[, comp=true], limit: 128) -> hash * * Parses the given representation of date and time, and returns a - * hash of parsed elements. This method does not function as a - * validator. + * hash of parsed elements. + * + * This method *does not* function as a validator. If the input + * string does not match valid formats strictly, you may get a cryptic + * result. Should consider to use `Date._strptime` or + * `DateTime._strptime` instead of this method as possible. * * If the optional second argument is true and the detected year is in * the range "00" to "99", considers the year a 2-digit form and makes * it full. * * Date._parse('2001-02-03') #=> {:year=>2001, :mon=>2, :mday=>3} + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE date_s__parse(int argc, VALUE *argv, VALUE klass) @@ -4361,10 +4404,15 @@ date_s__parse(int argc, VALUE *argv, VALUE klass) /* * call-seq: - * Date.parse(string='-4712-01-01'[, comp=true[, start=Date::ITALY]]) -> date + * Date.parse(string='-4712-01-01'[, comp=true[, start=Date::ITALY]], limit: 128) -> date * * Parses the given representation of date and time, and creates a - * date object. This method does not function as a validator. + * date object. + * + * This method *does not* function as a validator. If the input + * string does not match valid formats strictly, you may get a cryptic + * result. Should consider to use `Date.strptime` instead of this + * method as possible. * * If the optional second argument is true and the detected year is in * the range "00" to "99", considers the year a 2-digit form and makes @@ -4373,13 +4421,18 @@ date_s__parse(int argc, VALUE *argv, VALUE klass) * Date.parse('2001-02-03') #=> # * Date.parse('20010203') #=> # * Date.parse('3rd Feb 2001') #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE date_s_parse(int argc, VALUE *argv, VALUE klass) { - VALUE str, comp, sg; + VALUE str, comp, sg, opt; - rb_scan_args(argc, argv, "03", &str, &comp, &sg); + rb_scan_args(argc, argv, "03:", &str, &comp, &sg, &opt); + if (!NIL_P(opt)) argc--; switch (argc) { case 0: @@ -4391,11 +4444,12 @@ date_s_parse(int argc, VALUE *argv, VALUE klass) } { - VALUE argv2[2], hash; - - argv2[0] = str; - argv2[1] = comp; - hash = date_s__parse(2, argv2, klass); + int argc2 = 2; + VALUE argv2[3]; + argv2[0] = str; + argv2[1] = comp; + if (!NIL_P(opt)) argv2[argc2++] = opt; + VALUE hash = date_s__parse(argc2, argv2, klass); return d_new_by_frags(klass, hash, sg); } } @@ -4409,19 +4463,28 @@ VALUE date__jisx0301(VALUE); /* * call-seq: - * Date._iso8601(string) -> hash + * Date._iso8601(string, limit: 128) -> hash * * Returns a hash of parsed elements. + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE -date_s__iso8601(VALUE klass, VALUE str) +date_s__iso8601(int argc, VALUE *argv, VALUE klass) { + VALUE str, opt; + + rb_scan_args(argc, argv, "1:", &str, &opt); + check_limit(str, opt); + return date__iso8601(str); } /* * call-seq: - * Date.iso8601(string='-4712-01-01'[, start=Date::ITALY]) -> date + * Date.iso8601(string='-4712-01-01'[, start=Date::ITALY], limit: 128) -> date * * Creates a new Date object by parsing from a string according to * some typical ISO 8601 formats. @@ -4429,13 +4492,18 @@ date_s__iso8601(VALUE klass, VALUE str) * Date.iso8601('2001-02-03') #=> # * Date.iso8601('20010203') #=> # * Date.iso8601('2001-W05-6') #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE date_s_iso8601(int argc, VALUE *argv, VALUE klass) { - VALUE str, sg; + VALUE str, sg, opt; - rb_scan_args(argc, argv, "02", &str, &sg); + rb_scan_args(argc, argv, "02:", &str, &sg, &opt); + if (!NIL_P(opt)) argc--; switch (argc) { case 0: @@ -4445,38 +4513,56 @@ date_s_iso8601(int argc, VALUE *argv, VALUE klass) } { - VALUE hash = date_s__iso8601(klass, str); + int argc2 = 1; + VALUE argv2[2]; + argv2[0] = str; + if (!NIL_P(opt)) argv2[argc2++] = opt; + VALUE hash = date_s__iso8601(argc2, argv2, klass); return d_new_by_frags(klass, hash, sg); } } /* * call-seq: - * Date._rfc3339(string) -> hash + * Date._rfc3339(string, limit: 128) -> hash * * Returns a hash of parsed elements. + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE -date_s__rfc3339(VALUE klass, VALUE str) +date_s__rfc3339(int argc, VALUE *argv, VALUE klass) { + VALUE str, opt; + + rb_scan_args(argc, argv, "1:", &str, &opt); + check_limit(str, opt); + return date__rfc3339(str); } /* * call-seq: - * Date.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> date + * Date.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> date * * Creates a new Date object by parsing from a string according to * some typical RFC 3339 formats. * * Date.rfc3339('2001-02-03T04:05:06+07:00') #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE date_s_rfc3339(int argc, VALUE *argv, VALUE klass) { - VALUE str, sg; + VALUE str, sg, opt; - rb_scan_args(argc, argv, "02", &str, &sg); + rb_scan_args(argc, argv, "02:", &str, &sg, &opt); + if (!NIL_P(opt)) argc--; switch (argc) { case 0: @@ -4486,38 +4572,56 @@ date_s_rfc3339(int argc, VALUE *argv, VALUE klass) } { - VALUE hash = date_s__rfc3339(klass, str); + int argc2 = 1; + VALUE argv2[2]; + argv2[0] = str; + if (!NIL_P(opt)) argv2[argc2++] = opt; + VALUE hash = date_s__rfc3339(argc2, argv2, klass); return d_new_by_frags(klass, hash, sg); } } /* * call-seq: - * Date._xmlschema(string) -> hash + * Date._xmlschema(string, limit: 128) -> hash * * Returns a hash of parsed elements. + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE -date_s__xmlschema(VALUE klass, VALUE str) +date_s__xmlschema(int argc, VALUE *argv, VALUE klass) { + VALUE str, opt; + + rb_scan_args(argc, argv, "1:", &str, &opt); + check_limit(str, opt); + return date__xmlschema(str); } /* * call-seq: - * Date.xmlschema(string='-4712-01-01'[, start=Date::ITALY]) -> date + * Date.xmlschema(string='-4712-01-01'[, start=Date::ITALY], limit: 128) -> date * * Creates a new Date object by parsing from a string according to * some typical XML Schema formats. * * Date.xmlschema('2001-02-03') #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE date_s_xmlschema(int argc, VALUE *argv, VALUE klass) { - VALUE str, sg; + VALUE str, sg, opt; - rb_scan_args(argc, argv, "02", &str, &sg); + rb_scan_args(argc, argv, "02:", &str, &sg, &opt); + if (!NIL_P(opt)) argc--; switch (argc) { case 0: @@ -4527,41 +4631,58 @@ date_s_xmlschema(int argc, VALUE *argv, VALUE klass) } { - VALUE hash = date_s__xmlschema(klass, str); + int argc2 = 1; + VALUE argv2[2]; + argv2[0] = str; + if (!NIL_P(opt)) argv2[argc2++] = opt; + VALUE hash = date_s__xmlschema(argc2, argv2, klass); return d_new_by_frags(klass, hash, sg); } } /* * call-seq: - * Date._rfc2822(string) -> hash - * Date._rfc822(string) -> hash + * Date._rfc2822(string, limit: 128) -> hash + * Date._rfc822(string, limit: 128) -> hash * * Returns a hash of parsed elements. + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE -date_s__rfc2822(VALUE klass, VALUE str) +date_s__rfc2822(int argc, VALUE *argv, VALUE klass) { + VALUE str, opt; + + rb_scan_args(argc, argv, "1:", &str, &opt); + check_limit(str, opt); + return date__rfc2822(str); } /* * call-seq: - * Date.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY]) -> date - * Date.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY]) -> date + * Date.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> date + * Date.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> date * * Creates a new Date object by parsing from a string according to * some typical RFC 2822 formats. * * Date.rfc2822('Sat, 3 Feb 2001 00:00:00 +0000') * #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE date_s_rfc2822(int argc, VALUE *argv, VALUE klass) { - VALUE str, sg; + VALUE str, sg, opt; - rb_scan_args(argc, argv, "02", &str, &sg); + rb_scan_args(argc, argv, "02:", &str, &sg, &opt); switch (argc) { case 0: @@ -4571,39 +4692,56 @@ date_s_rfc2822(int argc, VALUE *argv, VALUE klass) } { - VALUE hash = date_s__rfc2822(klass, str); + int argc2 = 1; + VALUE argv2[2]; + argv2[0] = str; + if (!NIL_P(opt)) argv2[argc2++] = opt; + VALUE hash = date_s__rfc2822(argc2, argv2, klass); return d_new_by_frags(klass, hash, sg); } } /* * call-seq: - * Date._httpdate(string) -> hash + * Date._httpdate(string, limit: 128) -> hash * * Returns a hash of parsed elements. + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE -date_s__httpdate(VALUE klass, VALUE str) +date_s__httpdate(int argc, VALUE *argv, VALUE klass) { + VALUE str, opt; + + rb_scan_args(argc, argv, "1:", &str, &opt); + check_limit(str, opt); + return date__httpdate(str); } /* * call-seq: - * Date.httpdate(string='Mon, 01 Jan -4712 00:00:00 GMT'[, start=Date::ITALY]) -> date + * Date.httpdate(string='Mon, 01 Jan -4712 00:00:00 GMT'[, start=Date::ITALY], limit: 128) -> date * * Creates a new Date object by parsing from a string according to * some RFC 2616 format. * * Date.httpdate('Sat, 03 Feb 2001 00:00:00 GMT') * #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE date_s_httpdate(int argc, VALUE *argv, VALUE klass) { - VALUE str, sg; + VALUE str, sg, opt; - rb_scan_args(argc, argv, "02", &str, &sg); + rb_scan_args(argc, argv, "02:", &str, &sg, &opt); switch (argc) { case 0: @@ -4613,26 +4751,39 @@ date_s_httpdate(int argc, VALUE *argv, VALUE klass) } { - VALUE hash = date_s__httpdate(klass, str); + int argc2 = 1; + VALUE argv2[2]; + argv2[0] = str; + if (!NIL_P(opt)) argv2[argc2++] = opt; + VALUE hash = date_s__httpdate(argc2, argv2, klass); return d_new_by_frags(klass, hash, sg); } } /* * call-seq: - * Date._jisx0301(string) -> hash + * Date._jisx0301(string, limit: 128) -> hash * * Returns a hash of parsed elements. + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE -date_s__jisx0301(VALUE klass, VALUE str) +date_s__jisx0301(int argc, VALUE *argv, VALUE klass) { + VALUE str, opt; + + rb_scan_args(argc, argv, "1:", &str, &opt); + check_limit(str, opt); + return date__jisx0301(str); } /* * call-seq: - * Date.jisx0301(string='-4712-01-01'[, start=Date::ITALY]) -> date + * Date.jisx0301(string='-4712-01-01'[, start=Date::ITALY], limit: 128) -> date * * Creates a new Date object by parsing from a string according to * some typical JIS X 0301 formats. @@ -4642,13 +4793,18 @@ date_s__jisx0301(VALUE klass, VALUE str) * For no-era year, legacy format, Heisei is assumed. * * Date.jisx0301('13.02.03') #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE date_s_jisx0301(int argc, VALUE *argv, VALUE klass) { - VALUE str, sg; + VALUE str, sg, opt; - rb_scan_args(argc, argv, "02", &str, &sg); + rb_scan_args(argc, argv, "02:", &str, &sg, &opt); + if (!NIL_P(opt)) argc--; switch (argc) { case 0: @@ -4658,7 +4814,11 @@ date_s_jisx0301(int argc, VALUE *argv, VALUE klass) } { - VALUE hash = date_s__jisx0301(klass, str); + int argc2 = 1; + VALUE argv2[2]; + argv2[0] = str; + if (!NIL_P(opt)) argv2[argc2++] = opt; + VALUE hash = date_s__jisx0301(argc2, argv2, klass); return d_new_by_frags(klass, hash, sg); } } @@ -6884,7 +7044,7 @@ date_strftime_internal(int argc, VALUE *argv, VALUE self, * %c - date and time (%a %b %e %T %Y) * %D - Date (%m/%d/%y) * %F - The ISO 8601 date format (%Y-%m-%d) - * %v - VMS date (%e-%b-%Y) + * %v - VMS date (%e-%^b-%Y) * %x - Same as %D * %X - Same as %T * %r - 12-hour time (%I:%M:%S %p) @@ -7201,11 +7361,14 @@ d_lite_marshal_load(VALUE self, VALUE a) if (simple_dat_p(dat)) { if (df || !f_zero_p(sf) || of) { - rb_raise(rb_eArgError, - "cannot load complex into simple"); + /* loading a fractional date; promote to complex */ + dat = ruby_xrealloc(dat, sizeof(struct ComplexDateData)); + RTYPEDDATA(self)->data = dat; + goto complex_data; } set_to_simple(self, &dat->s, nth, jd, sg, 0, 0, 0, HAVE_JD); } else { + complex_data: set_to_complex(self, &dat->c, nth, jd, df, sf, of, sg, 0, 0, 0, 0, 0, 0, HAVE_JD | HAVE_DF); @@ -7778,7 +7941,7 @@ datetime_s_now(int argc, VALUE *argv, VALUE klass) #ifdef HAVE_STRUCT_TM_TM_GMTOFF of = tm.tm_gmtoff; #elif defined(HAVE_TIMEZONE) -#ifdef HAVE_ALTZONE +#if defined(HAVE_ALTZONE) && !defined(_AIX) of = (long)-((tm.tm_isdst > 0) ? altzone : timezone); #else of = (long)-timezone; @@ -7994,10 +8157,15 @@ datetime_s_strptime(int argc, VALUE *argv, VALUE klass) /* * call-seq: - * DateTime.parse(string='-4712-01-01T00:00:00+00:00'[, comp=true[, start=Date::ITALY]]) -> datetime + * DateTime.parse(string='-4712-01-01T00:00:00+00:00'[, comp=true[, start=Date::ITALY]], limit: 128) -> datetime * * Parses the given representation of date and time, and creates a - * DateTime object. This method does not function as a validator. + * DateTime object. + * + * This method *does not* function as a validator. If the input + * string does not match valid formats strictly, you may get a cryptic + * result. Should consider to use `DateTime.strptime` instead of this + * method as possible. * * If the optional second argument is true and the detected year is in * the range "00" to "99", makes it full. @@ -8008,13 +8176,18 @@ datetime_s_strptime(int argc, VALUE *argv, VALUE klass) * #=> # * DateTime.parse('3rd Feb 2001 04:05:06 PM') * #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE datetime_s_parse(int argc, VALUE *argv, VALUE klass) { - VALUE str, comp, sg; + VALUE str, comp, sg, opt; - rb_scan_args(argc, argv, "03", &str, &comp, &sg); + rb_scan_args(argc, argv, "03:", &str, &comp, &sg, &opt); + if (!NIL_P(opt)) argc--; switch (argc) { case 0: @@ -8026,18 +8199,20 @@ datetime_s_parse(int argc, VALUE *argv, VALUE klass) } { - VALUE argv2[2], hash; - - argv2[0] = str; - argv2[1] = comp; - hash = date_s__parse(2, argv2, klass); + int argc2 = 2; + VALUE argv2[3]; + argv2[0] = str; + argv2[1] = comp; + argv2[2] = opt; + if (!NIL_P(opt)) argc2++; + VALUE hash = date_s__parse(argc2, argv2, klass); return dt_new_by_frags(klass, hash, sg); } } /* * call-seq: - * DateTime.iso8601(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> datetime + * DateTime.iso8601(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> datetime * * Creates a new DateTime object by parsing from a string according to * some typical ISO 8601 formats. @@ -8048,13 +8223,18 @@ datetime_s_parse(int argc, VALUE *argv, VALUE klass) * #=> # * DateTime.iso8601('2001-W05-6T04:05:06+07:00') * #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE datetime_s_iso8601(int argc, VALUE *argv, VALUE klass) { - VALUE str, sg; + VALUE str, sg, opt; - rb_scan_args(argc, argv, "02", &str, &sg); + rb_scan_args(argc, argv, "02:", &str, &sg, &opt); + if (!NIL_P(opt)) argc--; switch (argc) { case 0: @@ -8064,27 +8244,37 @@ datetime_s_iso8601(int argc, VALUE *argv, VALUE klass) } { - VALUE hash = date_s__iso8601(klass, str); + int argc2 = 1; + VALUE argv2[2]; + argv2[0] = str; + argv2[1] = opt; + if (!NIL_P(opt)) argc2--; + VALUE hash = date_s__iso8601(argc2, argv2, klass); return dt_new_by_frags(klass, hash, sg); } } /* * call-seq: - * DateTime.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> datetime + * DateTime.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> datetime * * Creates a new DateTime object by parsing from a string according to * some typical RFC 3339 formats. * * DateTime.rfc3339('2001-02-03T04:05:06+07:00') * #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE datetime_s_rfc3339(int argc, VALUE *argv, VALUE klass) { - VALUE str, sg; + VALUE str, sg, opt; - rb_scan_args(argc, argv, "02", &str, &sg); + rb_scan_args(argc, argv, "02:", &str, &sg, &opt); + if (!NIL_P(opt)) argc--; switch (argc) { case 0: @@ -8094,27 +8284,37 @@ datetime_s_rfc3339(int argc, VALUE *argv, VALUE klass) } { - VALUE hash = date_s__rfc3339(klass, str); + int argc2 = 1; + VALUE argv2[2]; + argv2[0] = str; + argv2[1] = opt; + if (!NIL_P(opt)) argc2++; + VALUE hash = date_s__rfc3339(argc2, argv2, klass); return dt_new_by_frags(klass, hash, sg); } } /* * call-seq: - * DateTime.xmlschema(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> datetime + * DateTime.xmlschema(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> datetime * * Creates a new DateTime object by parsing from a string according to * some typical XML Schema formats. * * DateTime.xmlschema('2001-02-03T04:05:06+07:00') * #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE datetime_s_xmlschema(int argc, VALUE *argv, VALUE klass) { - VALUE str, sg; + VALUE str, sg, opt; - rb_scan_args(argc, argv, "02", &str, &sg); + rb_scan_args(argc, argv, "02:", &str, &sg, &opt); + if (!NIL_P(opt)) argc--; switch (argc) { case 0: @@ -8124,28 +8324,38 @@ datetime_s_xmlschema(int argc, VALUE *argv, VALUE klass) } { - VALUE hash = date_s__xmlschema(klass, str); + int argc2 = 1; + VALUE argv2[2]; + argv2[0] = str; + argv2[1] = opt; + if (!NIL_P(opt)) argc2++; + VALUE hash = date_s__xmlschema(argc2, argv2, klass); return dt_new_by_frags(klass, hash, sg); } } /* * call-seq: - * DateTime.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY]) -> datetime - * DateTime.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY]) -> datetime + * DateTime.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> datetime + * DateTime.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> datetime * * Creates a new DateTime object by parsing from a string according to * some typical RFC 2822 formats. * * DateTime.rfc2822('Sat, 3 Feb 2001 04:05:06 +0700') * #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE datetime_s_rfc2822(int argc, VALUE *argv, VALUE klass) { - VALUE str, sg; + VALUE str, sg, opt; - rb_scan_args(argc, argv, "02", &str, &sg); + rb_scan_args(argc, argv, "02:", &str, &sg, &opt); + if (!NIL_P(opt)) argc--; switch (argc) { case 0: @@ -8155,7 +8365,12 @@ datetime_s_rfc2822(int argc, VALUE *argv, VALUE klass) } { - VALUE hash = date_s__rfc2822(klass, str); + int argc2 = 1; + VALUE argv2[2]; + argv2[0] = str; + argv2[1] = opt; + if (!NIL_P(opt)) argc2++; + VALUE hash = date_s__rfc2822(argc2, argv2, klass); return dt_new_by_frags(klass, hash, sg); } } @@ -8169,13 +8384,18 @@ datetime_s_rfc2822(int argc, VALUE *argv, VALUE klass) * * DateTime.httpdate('Sat, 03 Feb 2001 04:05:06 GMT') * #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE datetime_s_httpdate(int argc, VALUE *argv, VALUE klass) { - VALUE str, sg; + VALUE str, sg, opt; - rb_scan_args(argc, argv, "02", &str, &sg); + rb_scan_args(argc, argv, "02:", &str, &sg, &opt); + if (!NIL_P(opt)) argc--; switch (argc) { case 0: @@ -8185,14 +8405,19 @@ datetime_s_httpdate(int argc, VALUE *argv, VALUE klass) } { - VALUE hash = date_s__httpdate(klass, str); + int argc2 = 1; + VALUE argv2[2]; + argv2[0] = str; + argv2[1] = opt; + if (!NIL_P(opt)) argc2++; + VALUE hash = date_s__httpdate(argc2, argv2, klass); return dt_new_by_frags(klass, hash, sg); } } /* * call-seq: - * DateTime.jisx0301(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> datetime + * DateTime.jisx0301(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> datetime * * Creates a new DateTime object by parsing from a string according to * some typical JIS X 0301 formats. @@ -8204,13 +8429,18 @@ datetime_s_httpdate(int argc, VALUE *argv, VALUE klass) * * DateTime.jisx0301('13.02.03T04:05:06+07:00') * #=> # + * + * Raise an ArgumentError when the string length is longer than _limit_. + * You can stop this check by passing `limit: nil`, but note that + * it may take a long time to parse. */ static VALUE datetime_s_jisx0301(int argc, VALUE *argv, VALUE klass) { - VALUE str, sg; + VALUE str, sg, opt; - rb_scan_args(argc, argv, "02", &str, &sg); + rb_scan_args(argc, argv, "02:", &str, &sg, &opt); + if (!NIL_P(opt)) argc--; switch (argc) { case 0: @@ -8220,7 +8450,12 @@ datetime_s_jisx0301(int argc, VALUE *argv, VALUE klass) } { - VALUE hash = date_s__jisx0301(klass, str); + int argc2 = 1; + VALUE argv2[2]; + argv2[0] = str; + argv2[1] = opt; + if (!NIL_P(opt)) argc2++; + VALUE hash = date_s__jisx0301(argc2, argv2, klass); return dt_new_by_frags(klass, hash, sg); } } @@ -8356,7 +8591,7 @@ dt_lite_to_s(VALUE self) * %c - date and time (%a %b %e %T %Y) * %D - Date (%m/%d/%y) * %F - The ISO 8601 date format (%Y-%m-%d) - * %v - VMS date (%e-%b-%Y) + * %v - VMS date (%e-%^b-%Y) * %x - Same as %D * %X - Same as %T * %r - 12-hour time (%I:%M:%S %p) @@ -9098,13 +9333,13 @@ d_lite_zero(VALUE x) void Init_date_core(void) { -#undef rb_intern -#define rb_intern(str) rb_intern_const(str) - - id_cmp = rb_intern("<=>"); - id_le_p = rb_intern("<="); - id_ge_p = rb_intern(">="); - id_eqeq_p = rb_intern("=="); + #ifdef HAVE_RB_EXT_RACTOR_SAFE + RB_EXT_RACTOR_SAFE(true); + #endif + id_cmp = rb_intern_const("<=>"); + id_le_p = rb_intern_const("<="); + id_ge_p = rb_intern_const(">="); + id_eqeq_p = rb_intern_const("=="); half_days_in_day = rb_rational_new2(INT2FIX(1), INT2FIX(2)); @@ -9379,19 +9614,19 @@ Init_date_core(void) rb_define_singleton_method(cDate, "strptime", date_s_strptime, -1); rb_define_singleton_method(cDate, "_parse", date_s__parse, -1); rb_define_singleton_method(cDate, "parse", date_s_parse, -1); - rb_define_singleton_method(cDate, "_iso8601", date_s__iso8601, 1); + rb_define_singleton_method(cDate, "_iso8601", date_s__iso8601, -1); rb_define_singleton_method(cDate, "iso8601", date_s_iso8601, -1); - rb_define_singleton_method(cDate, "_rfc3339", date_s__rfc3339, 1); + rb_define_singleton_method(cDate, "_rfc3339", date_s__rfc3339, -1); rb_define_singleton_method(cDate, "rfc3339", date_s_rfc3339, -1); - rb_define_singleton_method(cDate, "_xmlschema", date_s__xmlschema, 1); + rb_define_singleton_method(cDate, "_xmlschema", date_s__xmlschema, -1); rb_define_singleton_method(cDate, "xmlschema", date_s_xmlschema, -1); - rb_define_singleton_method(cDate, "_rfc2822", date_s__rfc2822, 1); - rb_define_singleton_method(cDate, "_rfc822", date_s__rfc2822, 1); + rb_define_singleton_method(cDate, "_rfc2822", date_s__rfc2822, -1); + rb_define_singleton_method(cDate, "_rfc822", date_s__rfc2822, -1); rb_define_singleton_method(cDate, "rfc2822", date_s_rfc2822, -1); rb_define_singleton_method(cDate, "rfc822", date_s_rfc2822, -1); - rb_define_singleton_method(cDate, "_httpdate", date_s__httpdate, 1); + rb_define_singleton_method(cDate, "_httpdate", date_s__httpdate, -1); rb_define_singleton_method(cDate, "httpdate", date_s_httpdate, -1); - rb_define_singleton_method(cDate, "_jisx0301", date_s__jisx0301, 1); + rb_define_singleton_method(cDate, "_jisx0301", date_s__jisx0301, -1); rb_define_singleton_method(cDate, "jisx0301", date_s_jisx0301, -1); rb_define_method(cDate, "initialize", date_initialize, -1); @@ -9511,6 +9746,8 @@ Init_date_core(void) * A subclass of Date that easily handles date, hour, minute, second, * and offset. * + * DateTime class is considered deprecated. Use Time class. + * * DateTime does not consider any leap seconds, does not track * any summer time rules. * @@ -9571,18 +9808,18 @@ Init_date_core(void) * === When should you use DateTime and when should you use Time? * * It's a common misconception that - * {William Shakespeare}[http://en.wikipedia.org/wiki/William_Shakespeare] + * {William Shakespeare}[https://en.wikipedia.org/wiki/William_Shakespeare] * and - * {Miguel de Cervantes}[http://en.wikipedia.org/wiki/Miguel_de_Cervantes] + * {Miguel de Cervantes}[https://en.wikipedia.org/wiki/Miguel_de_Cervantes] * died on the same day in history - * so much so that UNESCO named April 23 as - * {World Book Day because of this fact}[http://en.wikipedia.org/wiki/World_Book_Day]. + * {World Book Day because of this fact}[https://en.wikipedia.org/wiki/World_Book_Day]. * However, because England hadn't yet adopted the - * {Gregorian Calendar Reform}[http://en.wikipedia.org/wiki/Gregorian_calendar#Gregorian_reform] - * (and wouldn't until {1752}[http://en.wikipedia.org/wiki/Calendar_(New_Style)_Act_1750]) + * {Gregorian Calendar Reform}[https://en.wikipedia.org/wiki/Gregorian_calendar#Gregorian_reform] + * (and wouldn't until {1752}[https://en.wikipedia.org/wiki/Calendar_(New_Style)_Act_1750]) * their deaths are actually 10 days apart. * Since Ruby's Time class implements a - * {proleptic Gregorian calendar}[http://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar] + * {proleptic Gregorian calendar}[https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar] * and has no concept of calendar reform there's no way * to express this with Time objects. This is where DateTime steps in: * @@ -9626,7 +9863,7 @@ Init_date_core(void) * #=> Fri, 04 May 1753 00:00:00 +0000 * * As you can see, if we're accurately tracking the number of - * {solar years}[http://en.wikipedia.org/wiki/Tropical_year] + * {solar years}[https://en.wikipedia.org/wiki/Tropical_year] * since Shakespeare's birthday then the correct anniversary date * would be the 4th May and not the 23rd April. * @@ -9638,10 +9875,10 @@ Init_date_core(void) * making the same mistakes as UNESCO. If you also have to deal * with timezones then best of luck - just bear in mind that * you'll probably be dealing with - * {local solar times}[http://en.wikipedia.org/wiki/Solar_time], + * {local solar times}[https://en.wikipedia.org/wiki/Solar_time], * since it wasn't until the 19th century that the introduction * of the railways necessitated the need for - * {Standard Time}[http://en.wikipedia.org/wiki/Standard_time#Great_Britain] + * {Standard Time}[https://en.wikipedia.org/wiki/Standard_time#Great_Britain] * and eventually timezones. */ diff --git a/ruby/ext/date/date_parse.c b/ruby/ext/date/date_parse.c index 519f29cbc..5fa036ed7 100644 --- a/ruby/ext/date/date_parse.c +++ b/ruby/ext/date/date_parse.c @@ -70,7 +70,7 @@ static size_t digit_span(const char *s, const char *e) { size_t i = 0; - while (s + i < e && isdigit(s[i])) i++; + while (s + i < e && isdigit((unsigned char)s[i])) i++; return i; } @@ -110,7 +110,7 @@ s3e(VALUE hash, VALUE y, VALUE m, VALUE d, int bc) s = RSTRING_PTR(y); ep = RSTRING_END(y); - while (s < ep && !issign(*s) && !isdigit(*s)) + while (s < ep && !issign(*s) && !isdigit((unsigned char)*s)) s++; if (s >= ep) goto no_date; bp = s; @@ -162,7 +162,7 @@ s3e(VALUE hash, VALUE y, VALUE m, VALUE d, int bc) s = RSTRING_PTR(y); ep = RSTRING_END(y); - while (s < ep && !issign(*s) && !isdigit(*s)) + while (s < ep && !issign(*s) && !isdigit((unsigned char)*s)) s++; if (s >= ep) goto no_year; bp = s; @@ -199,7 +199,7 @@ s3e(VALUE hash, VALUE y, VALUE m, VALUE d, int bc) s = RSTRING_PTR(m); ep = RSTRING_END(m); - while (s < ep && !isdigit(*s)) + while (s < ep && !isdigit((unsigned char)*s)) s++; if (s >= ep) goto no_month; bp = s; @@ -225,7 +225,7 @@ s3e(VALUE hash, VALUE y, VALUE m, VALUE d, int bc) s = RSTRING_PTR(d); ep = RSTRING_END(d); - while (s < ep && !isdigit(*s)) + while (s < ep && !isdigit((unsigned char)*s)) s++; if (s >= ep) goto no_mday; bp = s; @@ -276,6 +276,7 @@ regcomp(const char *source, long len, int opt) VALUE pat; pat = rb_reg_new(source, len, opt); + rb_obj_freeze(pat); rb_gc_register_mark_object(pat); return pat; } @@ -364,9 +365,9 @@ static int str_end_with_word(const char *s, long l, const char *w) { int n = (int)strlen(w); - if (l <= n || !isspace(s[l - n - 1])) return 0; + if (l <= n || !isspace((unsigned char)s[l - n - 1])) return 0; if (strncasecmp(&s[l - n], w, n)) return 0; - do ++n; while (l > n && isspace(s[l - n - 1])); + do ++n; while (l > n && isspace((unsigned char)s[l - n - 1])); return n; } @@ -376,7 +377,7 @@ shrunk_size(const char *s, long l) long i, ni; int sp = 0; for (i = ni = 0; i < l; ++i) { - if (!isspace(s[i])) { + if (!isspace((unsigned char)s[i])) { if (sp) ni++; sp = 0; ni++; @@ -394,7 +395,7 @@ shrink_space(char *d, const char *s, long l) long i, ni; int sp = 0; for (i = ni = 0; i < l; ++i) { - if (!isspace(s[i])) { + if (!isspace((unsigned char)s[i])) { if (sp) d[ni++] = ' '; sp = 0; d[ni++] = s[i]; @@ -754,8 +755,8 @@ check_year_width(VALUE y) l = RSTRING_LEN(y); if (l < 2) return 0; s = RSTRING_PTR(y); - if (!isdigit(s[1])) return 0; - return (l == 2 || !isdigit(s[2])); + if (!isdigit((unsigned char)s[1])) return 0; + return (l == 2 || !isdigit((unsigned char)s[2])); } static int diff --git a/ruby/ext/date/date_strftime.c b/ruby/ext/date/date_strftime.c index 9d8167b61..d7f28989d 100644 --- a/ruby/ext/date/date_strftime.c +++ b/ruby/ext/date/date_strftime.c @@ -393,7 +393,7 @@ date_strftime_with_tmx(char *s, const size_t maxsize, const char *format, continue; case 'v': - STRFTIME("%e-%b-%Y"); + STRFTIME("%e-%^b-%Y"); continue; case 'w': /* weekday, Sunday == 0, 0 - 6 */ diff --git a/ruby/ext/date/date_strptime.c b/ruby/ext/date/date_strptime.c index 26d9fd11b..7b06a3147 100644 --- a/ruby/ext/date/date_strptime.c +++ b/ruby/ext/date/date_strptime.c @@ -581,6 +581,7 @@ date__strptime_internal(const char *str, size_t slen, if (NIL_P(pat)) { pat = rb_reg_new(pat_source, sizeof pat_source - 1, ONIG_OPTION_IGNORECASE); + rb_obj_freeze(pat); rb_gc_register_mark_object(pat); } diff --git a/ruby/ext/date/depend b/ruby/ext/date/depend index 28847bef1..6841df724 100644 --- a/ruby/ext/date/depend +++ b/ruby/ext/date/depend @@ -4,9 +4,165 @@ date_core.o: $(arch_hdrdir)/ruby/config.h date_core.o: $(hdrdir)/ruby.h date_core.o: $(hdrdir)/ruby/assert.h date_core.o: $(hdrdir)/ruby/backward.h +date_core.o: $(hdrdir)/ruby/backward/2/assume.h +date_core.o: $(hdrdir)/ruby/backward/2/attributes.h +date_core.o: $(hdrdir)/ruby/backward/2/bool.h +date_core.o: $(hdrdir)/ruby/backward/2/inttypes.h +date_core.o: $(hdrdir)/ruby/backward/2/limits.h +date_core.o: $(hdrdir)/ruby/backward/2/long_long.h +date_core.o: $(hdrdir)/ruby/backward/2/stdalign.h +date_core.o: $(hdrdir)/ruby/backward/2/stdarg.h date_core.o: $(hdrdir)/ruby/defines.h date_core.o: $(hdrdir)/ruby/encoding.h date_core.o: $(hdrdir)/ruby/intern.h +date_core.o: $(hdrdir)/ruby/internal/anyargs.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/char.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/double.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/int.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/long.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/short.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +date_core.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +date_core.o: $(hdrdir)/ruby/internal/assume.h +date_core.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +date_core.o: $(hdrdir)/ruby/internal/attr/artificial.h +date_core.o: $(hdrdir)/ruby/internal/attr/cold.h +date_core.o: $(hdrdir)/ruby/internal/attr/const.h +date_core.o: $(hdrdir)/ruby/internal/attr/constexpr.h +date_core.o: $(hdrdir)/ruby/internal/attr/deprecated.h +date_core.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +date_core.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +date_core.o: $(hdrdir)/ruby/internal/attr/error.h +date_core.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +date_core.o: $(hdrdir)/ruby/internal/attr/forceinline.h +date_core.o: $(hdrdir)/ruby/internal/attr/format.h +date_core.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +date_core.o: $(hdrdir)/ruby/internal/attr/noalias.h +date_core.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +date_core.o: $(hdrdir)/ruby/internal/attr/noexcept.h +date_core.o: $(hdrdir)/ruby/internal/attr/noinline.h +date_core.o: $(hdrdir)/ruby/internal/attr/nonnull.h +date_core.o: $(hdrdir)/ruby/internal/attr/noreturn.h +date_core.o: $(hdrdir)/ruby/internal/attr/pure.h +date_core.o: $(hdrdir)/ruby/internal/attr/restrict.h +date_core.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +date_core.o: $(hdrdir)/ruby/internal/attr/warning.h +date_core.o: $(hdrdir)/ruby/internal/attr/weakref.h +date_core.o: $(hdrdir)/ruby/internal/cast.h +date_core.o: $(hdrdir)/ruby/internal/compiler_is.h +date_core.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +date_core.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +date_core.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +date_core.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +date_core.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +date_core.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +date_core.o: $(hdrdir)/ruby/internal/compiler_since.h +date_core.o: $(hdrdir)/ruby/internal/config.h +date_core.o: $(hdrdir)/ruby/internal/constant_p.h +date_core.o: $(hdrdir)/ruby/internal/core.h +date_core.o: $(hdrdir)/ruby/internal/core/rarray.h +date_core.o: $(hdrdir)/ruby/internal/core/rbasic.h +date_core.o: $(hdrdir)/ruby/internal/core/rbignum.h +date_core.o: $(hdrdir)/ruby/internal/core/rclass.h +date_core.o: $(hdrdir)/ruby/internal/core/rdata.h +date_core.o: $(hdrdir)/ruby/internal/core/rfile.h +date_core.o: $(hdrdir)/ruby/internal/core/rhash.h +date_core.o: $(hdrdir)/ruby/internal/core/robject.h +date_core.o: $(hdrdir)/ruby/internal/core/rregexp.h +date_core.o: $(hdrdir)/ruby/internal/core/rstring.h +date_core.o: $(hdrdir)/ruby/internal/core/rstruct.h +date_core.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +date_core.o: $(hdrdir)/ruby/internal/ctype.h +date_core.o: $(hdrdir)/ruby/internal/dllexport.h +date_core.o: $(hdrdir)/ruby/internal/dosish.h +date_core.o: $(hdrdir)/ruby/internal/encoding/coderange.h +date_core.o: $(hdrdir)/ruby/internal/encoding/ctype.h +date_core.o: $(hdrdir)/ruby/internal/encoding/encoding.h +date_core.o: $(hdrdir)/ruby/internal/encoding/pathname.h +date_core.o: $(hdrdir)/ruby/internal/encoding/re.h +date_core.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +date_core.o: $(hdrdir)/ruby/internal/encoding/string.h +date_core.o: $(hdrdir)/ruby/internal/encoding/symbol.h +date_core.o: $(hdrdir)/ruby/internal/encoding/transcode.h +date_core.o: $(hdrdir)/ruby/internal/error.h +date_core.o: $(hdrdir)/ruby/internal/eval.h +date_core.o: $(hdrdir)/ruby/internal/event.h +date_core.o: $(hdrdir)/ruby/internal/fl_type.h +date_core.o: $(hdrdir)/ruby/internal/gc.h +date_core.o: $(hdrdir)/ruby/internal/glob.h +date_core.o: $(hdrdir)/ruby/internal/globals.h +date_core.o: $(hdrdir)/ruby/internal/has/attribute.h +date_core.o: $(hdrdir)/ruby/internal/has/builtin.h +date_core.o: $(hdrdir)/ruby/internal/has/c_attribute.h +date_core.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +date_core.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +date_core.o: $(hdrdir)/ruby/internal/has/extension.h +date_core.o: $(hdrdir)/ruby/internal/has/feature.h +date_core.o: $(hdrdir)/ruby/internal/has/warning.h +date_core.o: $(hdrdir)/ruby/internal/intern/array.h +date_core.o: $(hdrdir)/ruby/internal/intern/bignum.h +date_core.o: $(hdrdir)/ruby/internal/intern/class.h +date_core.o: $(hdrdir)/ruby/internal/intern/compar.h +date_core.o: $(hdrdir)/ruby/internal/intern/complex.h +date_core.o: $(hdrdir)/ruby/internal/intern/cont.h +date_core.o: $(hdrdir)/ruby/internal/intern/dir.h +date_core.o: $(hdrdir)/ruby/internal/intern/enum.h +date_core.o: $(hdrdir)/ruby/internal/intern/enumerator.h +date_core.o: $(hdrdir)/ruby/internal/intern/error.h +date_core.o: $(hdrdir)/ruby/internal/intern/eval.h +date_core.o: $(hdrdir)/ruby/internal/intern/file.h +date_core.o: $(hdrdir)/ruby/internal/intern/gc.h +date_core.o: $(hdrdir)/ruby/internal/intern/hash.h +date_core.o: $(hdrdir)/ruby/internal/intern/io.h +date_core.o: $(hdrdir)/ruby/internal/intern/load.h +date_core.o: $(hdrdir)/ruby/internal/intern/marshal.h +date_core.o: $(hdrdir)/ruby/internal/intern/numeric.h +date_core.o: $(hdrdir)/ruby/internal/intern/object.h +date_core.o: $(hdrdir)/ruby/internal/intern/parse.h +date_core.o: $(hdrdir)/ruby/internal/intern/proc.h +date_core.o: $(hdrdir)/ruby/internal/intern/process.h +date_core.o: $(hdrdir)/ruby/internal/intern/random.h +date_core.o: $(hdrdir)/ruby/internal/intern/range.h +date_core.o: $(hdrdir)/ruby/internal/intern/rational.h +date_core.o: $(hdrdir)/ruby/internal/intern/re.h +date_core.o: $(hdrdir)/ruby/internal/intern/ruby.h +date_core.o: $(hdrdir)/ruby/internal/intern/select.h +date_core.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +date_core.o: $(hdrdir)/ruby/internal/intern/signal.h +date_core.o: $(hdrdir)/ruby/internal/intern/sprintf.h +date_core.o: $(hdrdir)/ruby/internal/intern/string.h +date_core.o: $(hdrdir)/ruby/internal/intern/struct.h +date_core.o: $(hdrdir)/ruby/internal/intern/thread.h +date_core.o: $(hdrdir)/ruby/internal/intern/time.h +date_core.o: $(hdrdir)/ruby/internal/intern/variable.h +date_core.o: $(hdrdir)/ruby/internal/intern/vm.h +date_core.o: $(hdrdir)/ruby/internal/interpreter.h +date_core.o: $(hdrdir)/ruby/internal/iterator.h +date_core.o: $(hdrdir)/ruby/internal/memory.h +date_core.o: $(hdrdir)/ruby/internal/method.h +date_core.o: $(hdrdir)/ruby/internal/module.h +date_core.o: $(hdrdir)/ruby/internal/newobj.h +date_core.o: $(hdrdir)/ruby/internal/rgengc.h +date_core.o: $(hdrdir)/ruby/internal/scan_args.h +date_core.o: $(hdrdir)/ruby/internal/special_consts.h +date_core.o: $(hdrdir)/ruby/internal/static_assert.h +date_core.o: $(hdrdir)/ruby/internal/stdalign.h +date_core.o: $(hdrdir)/ruby/internal/stdbool.h +date_core.o: $(hdrdir)/ruby/internal/symbol.h +date_core.o: $(hdrdir)/ruby/internal/value.h +date_core.o: $(hdrdir)/ruby/internal/value_type.h +date_core.o: $(hdrdir)/ruby/internal/variable.h +date_core.o: $(hdrdir)/ruby/internal/warning_push.h +date_core.o: $(hdrdir)/ruby/internal/xmalloc.h date_core.o: $(hdrdir)/ruby/missing.h date_core.o: $(hdrdir)/ruby/onigmo.h date_core.o: $(hdrdir)/ruby/oniguruma.h @@ -21,9 +177,166 @@ date_parse.o: $(arch_hdrdir)/ruby/config.h date_parse.o: $(hdrdir)/ruby.h date_parse.o: $(hdrdir)/ruby/assert.h date_parse.o: $(hdrdir)/ruby/backward.h +date_parse.o: $(hdrdir)/ruby/backward/2/assume.h +date_parse.o: $(hdrdir)/ruby/backward/2/attributes.h +date_parse.o: $(hdrdir)/ruby/backward/2/bool.h +date_parse.o: $(hdrdir)/ruby/backward/2/inttypes.h +date_parse.o: $(hdrdir)/ruby/backward/2/limits.h +date_parse.o: $(hdrdir)/ruby/backward/2/long_long.h +date_parse.o: $(hdrdir)/ruby/backward/2/stdalign.h +date_parse.o: $(hdrdir)/ruby/backward/2/stdarg.h date_parse.o: $(hdrdir)/ruby/defines.h date_parse.o: $(hdrdir)/ruby/encoding.h date_parse.o: $(hdrdir)/ruby/intern.h +date_parse.o: $(hdrdir)/ruby/internal/anyargs.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/char.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/double.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/int.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/long.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/short.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +date_parse.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +date_parse.o: $(hdrdir)/ruby/internal/assume.h +date_parse.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +date_parse.o: $(hdrdir)/ruby/internal/attr/artificial.h +date_parse.o: $(hdrdir)/ruby/internal/attr/cold.h +date_parse.o: $(hdrdir)/ruby/internal/attr/const.h +date_parse.o: $(hdrdir)/ruby/internal/attr/constexpr.h +date_parse.o: $(hdrdir)/ruby/internal/attr/deprecated.h +date_parse.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +date_parse.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +date_parse.o: $(hdrdir)/ruby/internal/attr/error.h +date_parse.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +date_parse.o: $(hdrdir)/ruby/internal/attr/forceinline.h +date_parse.o: $(hdrdir)/ruby/internal/attr/format.h +date_parse.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +date_parse.o: $(hdrdir)/ruby/internal/attr/noalias.h +date_parse.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +date_parse.o: $(hdrdir)/ruby/internal/attr/noexcept.h +date_parse.o: $(hdrdir)/ruby/internal/attr/noinline.h +date_parse.o: $(hdrdir)/ruby/internal/attr/nonnull.h +date_parse.o: $(hdrdir)/ruby/internal/attr/noreturn.h +date_parse.o: $(hdrdir)/ruby/internal/attr/pure.h +date_parse.o: $(hdrdir)/ruby/internal/attr/restrict.h +date_parse.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +date_parse.o: $(hdrdir)/ruby/internal/attr/warning.h +date_parse.o: $(hdrdir)/ruby/internal/attr/weakref.h +date_parse.o: $(hdrdir)/ruby/internal/cast.h +date_parse.o: $(hdrdir)/ruby/internal/compiler_is.h +date_parse.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +date_parse.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +date_parse.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +date_parse.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +date_parse.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +date_parse.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +date_parse.o: $(hdrdir)/ruby/internal/compiler_since.h +date_parse.o: $(hdrdir)/ruby/internal/config.h +date_parse.o: $(hdrdir)/ruby/internal/constant_p.h +date_parse.o: $(hdrdir)/ruby/internal/core.h +date_parse.o: $(hdrdir)/ruby/internal/core/rarray.h +date_parse.o: $(hdrdir)/ruby/internal/core/rbasic.h +date_parse.o: $(hdrdir)/ruby/internal/core/rbignum.h +date_parse.o: $(hdrdir)/ruby/internal/core/rclass.h +date_parse.o: $(hdrdir)/ruby/internal/core/rdata.h +date_parse.o: $(hdrdir)/ruby/internal/core/rfile.h +date_parse.o: $(hdrdir)/ruby/internal/core/rhash.h +date_parse.o: $(hdrdir)/ruby/internal/core/rmatch.h +date_parse.o: $(hdrdir)/ruby/internal/core/robject.h +date_parse.o: $(hdrdir)/ruby/internal/core/rregexp.h +date_parse.o: $(hdrdir)/ruby/internal/core/rstring.h +date_parse.o: $(hdrdir)/ruby/internal/core/rstruct.h +date_parse.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +date_parse.o: $(hdrdir)/ruby/internal/ctype.h +date_parse.o: $(hdrdir)/ruby/internal/dllexport.h +date_parse.o: $(hdrdir)/ruby/internal/dosish.h +date_parse.o: $(hdrdir)/ruby/internal/encoding/coderange.h +date_parse.o: $(hdrdir)/ruby/internal/encoding/ctype.h +date_parse.o: $(hdrdir)/ruby/internal/encoding/encoding.h +date_parse.o: $(hdrdir)/ruby/internal/encoding/pathname.h +date_parse.o: $(hdrdir)/ruby/internal/encoding/re.h +date_parse.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +date_parse.o: $(hdrdir)/ruby/internal/encoding/string.h +date_parse.o: $(hdrdir)/ruby/internal/encoding/symbol.h +date_parse.o: $(hdrdir)/ruby/internal/encoding/transcode.h +date_parse.o: $(hdrdir)/ruby/internal/error.h +date_parse.o: $(hdrdir)/ruby/internal/eval.h +date_parse.o: $(hdrdir)/ruby/internal/event.h +date_parse.o: $(hdrdir)/ruby/internal/fl_type.h +date_parse.o: $(hdrdir)/ruby/internal/gc.h +date_parse.o: $(hdrdir)/ruby/internal/glob.h +date_parse.o: $(hdrdir)/ruby/internal/globals.h +date_parse.o: $(hdrdir)/ruby/internal/has/attribute.h +date_parse.o: $(hdrdir)/ruby/internal/has/builtin.h +date_parse.o: $(hdrdir)/ruby/internal/has/c_attribute.h +date_parse.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +date_parse.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +date_parse.o: $(hdrdir)/ruby/internal/has/extension.h +date_parse.o: $(hdrdir)/ruby/internal/has/feature.h +date_parse.o: $(hdrdir)/ruby/internal/has/warning.h +date_parse.o: $(hdrdir)/ruby/internal/intern/array.h +date_parse.o: $(hdrdir)/ruby/internal/intern/bignum.h +date_parse.o: $(hdrdir)/ruby/internal/intern/class.h +date_parse.o: $(hdrdir)/ruby/internal/intern/compar.h +date_parse.o: $(hdrdir)/ruby/internal/intern/complex.h +date_parse.o: $(hdrdir)/ruby/internal/intern/cont.h +date_parse.o: $(hdrdir)/ruby/internal/intern/dir.h +date_parse.o: $(hdrdir)/ruby/internal/intern/enum.h +date_parse.o: $(hdrdir)/ruby/internal/intern/enumerator.h +date_parse.o: $(hdrdir)/ruby/internal/intern/error.h +date_parse.o: $(hdrdir)/ruby/internal/intern/eval.h +date_parse.o: $(hdrdir)/ruby/internal/intern/file.h +date_parse.o: $(hdrdir)/ruby/internal/intern/gc.h +date_parse.o: $(hdrdir)/ruby/internal/intern/hash.h +date_parse.o: $(hdrdir)/ruby/internal/intern/io.h +date_parse.o: $(hdrdir)/ruby/internal/intern/load.h +date_parse.o: $(hdrdir)/ruby/internal/intern/marshal.h +date_parse.o: $(hdrdir)/ruby/internal/intern/numeric.h +date_parse.o: $(hdrdir)/ruby/internal/intern/object.h +date_parse.o: $(hdrdir)/ruby/internal/intern/parse.h +date_parse.o: $(hdrdir)/ruby/internal/intern/proc.h +date_parse.o: $(hdrdir)/ruby/internal/intern/process.h +date_parse.o: $(hdrdir)/ruby/internal/intern/random.h +date_parse.o: $(hdrdir)/ruby/internal/intern/range.h +date_parse.o: $(hdrdir)/ruby/internal/intern/rational.h +date_parse.o: $(hdrdir)/ruby/internal/intern/re.h +date_parse.o: $(hdrdir)/ruby/internal/intern/ruby.h +date_parse.o: $(hdrdir)/ruby/internal/intern/select.h +date_parse.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +date_parse.o: $(hdrdir)/ruby/internal/intern/signal.h +date_parse.o: $(hdrdir)/ruby/internal/intern/sprintf.h +date_parse.o: $(hdrdir)/ruby/internal/intern/string.h +date_parse.o: $(hdrdir)/ruby/internal/intern/struct.h +date_parse.o: $(hdrdir)/ruby/internal/intern/thread.h +date_parse.o: $(hdrdir)/ruby/internal/intern/time.h +date_parse.o: $(hdrdir)/ruby/internal/intern/variable.h +date_parse.o: $(hdrdir)/ruby/internal/intern/vm.h +date_parse.o: $(hdrdir)/ruby/internal/interpreter.h +date_parse.o: $(hdrdir)/ruby/internal/iterator.h +date_parse.o: $(hdrdir)/ruby/internal/memory.h +date_parse.o: $(hdrdir)/ruby/internal/method.h +date_parse.o: $(hdrdir)/ruby/internal/module.h +date_parse.o: $(hdrdir)/ruby/internal/newobj.h +date_parse.o: $(hdrdir)/ruby/internal/rgengc.h +date_parse.o: $(hdrdir)/ruby/internal/scan_args.h +date_parse.o: $(hdrdir)/ruby/internal/special_consts.h +date_parse.o: $(hdrdir)/ruby/internal/static_assert.h +date_parse.o: $(hdrdir)/ruby/internal/stdalign.h +date_parse.o: $(hdrdir)/ruby/internal/stdbool.h +date_parse.o: $(hdrdir)/ruby/internal/symbol.h +date_parse.o: $(hdrdir)/ruby/internal/value.h +date_parse.o: $(hdrdir)/ruby/internal/value_type.h +date_parse.o: $(hdrdir)/ruby/internal/variable.h +date_parse.o: $(hdrdir)/ruby/internal/warning_push.h +date_parse.o: $(hdrdir)/ruby/internal/xmalloc.h date_parse.o: $(hdrdir)/ruby/missing.h date_parse.o: $(hdrdir)/ruby/onigmo.h date_parse.o: $(hdrdir)/ruby/oniguruma.h @@ -39,8 +352,155 @@ date_strftime.o: $(RUBY_EXTCONF_H) date_strftime.o: $(arch_hdrdir)/ruby/config.h date_strftime.o: $(hdrdir)/ruby/assert.h date_strftime.o: $(hdrdir)/ruby/backward.h +date_strftime.o: $(hdrdir)/ruby/backward/2/assume.h +date_strftime.o: $(hdrdir)/ruby/backward/2/attributes.h +date_strftime.o: $(hdrdir)/ruby/backward/2/bool.h +date_strftime.o: $(hdrdir)/ruby/backward/2/inttypes.h +date_strftime.o: $(hdrdir)/ruby/backward/2/limits.h +date_strftime.o: $(hdrdir)/ruby/backward/2/long_long.h +date_strftime.o: $(hdrdir)/ruby/backward/2/stdalign.h +date_strftime.o: $(hdrdir)/ruby/backward/2/stdarg.h date_strftime.o: $(hdrdir)/ruby/defines.h date_strftime.o: $(hdrdir)/ruby/intern.h +date_strftime.o: $(hdrdir)/ruby/internal/anyargs.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/char.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/double.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/int.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/long.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/short.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +date_strftime.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +date_strftime.o: $(hdrdir)/ruby/internal/assume.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/artificial.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/cold.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/const.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/constexpr.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/deprecated.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/error.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/forceinline.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/format.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/noalias.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/noexcept.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/noinline.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/nonnull.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/noreturn.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/pure.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/restrict.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/warning.h +date_strftime.o: $(hdrdir)/ruby/internal/attr/weakref.h +date_strftime.o: $(hdrdir)/ruby/internal/cast.h +date_strftime.o: $(hdrdir)/ruby/internal/compiler_is.h +date_strftime.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +date_strftime.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +date_strftime.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +date_strftime.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +date_strftime.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +date_strftime.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +date_strftime.o: $(hdrdir)/ruby/internal/compiler_since.h +date_strftime.o: $(hdrdir)/ruby/internal/config.h +date_strftime.o: $(hdrdir)/ruby/internal/constant_p.h +date_strftime.o: $(hdrdir)/ruby/internal/core.h +date_strftime.o: $(hdrdir)/ruby/internal/core/rarray.h +date_strftime.o: $(hdrdir)/ruby/internal/core/rbasic.h +date_strftime.o: $(hdrdir)/ruby/internal/core/rbignum.h +date_strftime.o: $(hdrdir)/ruby/internal/core/rclass.h +date_strftime.o: $(hdrdir)/ruby/internal/core/rdata.h +date_strftime.o: $(hdrdir)/ruby/internal/core/rfile.h +date_strftime.o: $(hdrdir)/ruby/internal/core/rhash.h +date_strftime.o: $(hdrdir)/ruby/internal/core/robject.h +date_strftime.o: $(hdrdir)/ruby/internal/core/rregexp.h +date_strftime.o: $(hdrdir)/ruby/internal/core/rstring.h +date_strftime.o: $(hdrdir)/ruby/internal/core/rstruct.h +date_strftime.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +date_strftime.o: $(hdrdir)/ruby/internal/ctype.h +date_strftime.o: $(hdrdir)/ruby/internal/dllexport.h +date_strftime.o: $(hdrdir)/ruby/internal/dosish.h +date_strftime.o: $(hdrdir)/ruby/internal/error.h +date_strftime.o: $(hdrdir)/ruby/internal/eval.h +date_strftime.o: $(hdrdir)/ruby/internal/event.h +date_strftime.o: $(hdrdir)/ruby/internal/fl_type.h +date_strftime.o: $(hdrdir)/ruby/internal/gc.h +date_strftime.o: $(hdrdir)/ruby/internal/glob.h +date_strftime.o: $(hdrdir)/ruby/internal/globals.h +date_strftime.o: $(hdrdir)/ruby/internal/has/attribute.h +date_strftime.o: $(hdrdir)/ruby/internal/has/builtin.h +date_strftime.o: $(hdrdir)/ruby/internal/has/c_attribute.h +date_strftime.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +date_strftime.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +date_strftime.o: $(hdrdir)/ruby/internal/has/extension.h +date_strftime.o: $(hdrdir)/ruby/internal/has/feature.h +date_strftime.o: $(hdrdir)/ruby/internal/has/warning.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/array.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/bignum.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/class.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/compar.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/complex.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/cont.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/dir.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/enum.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/enumerator.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/error.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/eval.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/file.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/gc.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/hash.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/io.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/load.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/marshal.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/numeric.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/object.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/parse.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/proc.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/process.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/random.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/range.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/rational.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/re.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/ruby.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/select.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/signal.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/sprintf.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/string.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/struct.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/thread.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/time.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/variable.h +date_strftime.o: $(hdrdir)/ruby/internal/intern/vm.h +date_strftime.o: $(hdrdir)/ruby/internal/interpreter.h +date_strftime.o: $(hdrdir)/ruby/internal/iterator.h +date_strftime.o: $(hdrdir)/ruby/internal/memory.h +date_strftime.o: $(hdrdir)/ruby/internal/method.h +date_strftime.o: $(hdrdir)/ruby/internal/module.h +date_strftime.o: $(hdrdir)/ruby/internal/newobj.h +date_strftime.o: $(hdrdir)/ruby/internal/rgengc.h +date_strftime.o: $(hdrdir)/ruby/internal/scan_args.h +date_strftime.o: $(hdrdir)/ruby/internal/special_consts.h +date_strftime.o: $(hdrdir)/ruby/internal/static_assert.h +date_strftime.o: $(hdrdir)/ruby/internal/stdalign.h +date_strftime.o: $(hdrdir)/ruby/internal/stdbool.h +date_strftime.o: $(hdrdir)/ruby/internal/symbol.h +date_strftime.o: $(hdrdir)/ruby/internal/value.h +date_strftime.o: $(hdrdir)/ruby/internal/value_type.h +date_strftime.o: $(hdrdir)/ruby/internal/variable.h +date_strftime.o: $(hdrdir)/ruby/internal/warning_push.h +date_strftime.o: $(hdrdir)/ruby/internal/xmalloc.h date_strftime.o: $(hdrdir)/ruby/missing.h date_strftime.o: $(hdrdir)/ruby/ruby.h date_strftime.o: $(hdrdir)/ruby/st.h @@ -52,9 +512,166 @@ date_strptime.o: $(arch_hdrdir)/ruby/config.h date_strptime.o: $(hdrdir)/ruby.h date_strptime.o: $(hdrdir)/ruby/assert.h date_strptime.o: $(hdrdir)/ruby/backward.h +date_strptime.o: $(hdrdir)/ruby/backward/2/assume.h +date_strptime.o: $(hdrdir)/ruby/backward/2/attributes.h +date_strptime.o: $(hdrdir)/ruby/backward/2/bool.h +date_strptime.o: $(hdrdir)/ruby/backward/2/inttypes.h +date_strptime.o: $(hdrdir)/ruby/backward/2/limits.h +date_strptime.o: $(hdrdir)/ruby/backward/2/long_long.h +date_strptime.o: $(hdrdir)/ruby/backward/2/stdalign.h +date_strptime.o: $(hdrdir)/ruby/backward/2/stdarg.h date_strptime.o: $(hdrdir)/ruby/defines.h date_strptime.o: $(hdrdir)/ruby/encoding.h date_strptime.o: $(hdrdir)/ruby/intern.h +date_strptime.o: $(hdrdir)/ruby/internal/anyargs.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/char.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/double.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/int.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/long.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/short.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +date_strptime.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +date_strptime.o: $(hdrdir)/ruby/internal/assume.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/artificial.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/cold.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/const.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/constexpr.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/deprecated.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/error.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/forceinline.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/format.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/noalias.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/noexcept.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/noinline.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/nonnull.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/noreturn.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/pure.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/restrict.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/warning.h +date_strptime.o: $(hdrdir)/ruby/internal/attr/weakref.h +date_strptime.o: $(hdrdir)/ruby/internal/cast.h +date_strptime.o: $(hdrdir)/ruby/internal/compiler_is.h +date_strptime.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +date_strptime.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +date_strptime.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +date_strptime.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +date_strptime.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +date_strptime.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +date_strptime.o: $(hdrdir)/ruby/internal/compiler_since.h +date_strptime.o: $(hdrdir)/ruby/internal/config.h +date_strptime.o: $(hdrdir)/ruby/internal/constant_p.h +date_strptime.o: $(hdrdir)/ruby/internal/core.h +date_strptime.o: $(hdrdir)/ruby/internal/core/rarray.h +date_strptime.o: $(hdrdir)/ruby/internal/core/rbasic.h +date_strptime.o: $(hdrdir)/ruby/internal/core/rbignum.h +date_strptime.o: $(hdrdir)/ruby/internal/core/rclass.h +date_strptime.o: $(hdrdir)/ruby/internal/core/rdata.h +date_strptime.o: $(hdrdir)/ruby/internal/core/rfile.h +date_strptime.o: $(hdrdir)/ruby/internal/core/rhash.h +date_strptime.o: $(hdrdir)/ruby/internal/core/rmatch.h +date_strptime.o: $(hdrdir)/ruby/internal/core/robject.h +date_strptime.o: $(hdrdir)/ruby/internal/core/rregexp.h +date_strptime.o: $(hdrdir)/ruby/internal/core/rstring.h +date_strptime.o: $(hdrdir)/ruby/internal/core/rstruct.h +date_strptime.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +date_strptime.o: $(hdrdir)/ruby/internal/ctype.h +date_strptime.o: $(hdrdir)/ruby/internal/dllexport.h +date_strptime.o: $(hdrdir)/ruby/internal/dosish.h +date_strptime.o: $(hdrdir)/ruby/internal/encoding/coderange.h +date_strptime.o: $(hdrdir)/ruby/internal/encoding/ctype.h +date_strptime.o: $(hdrdir)/ruby/internal/encoding/encoding.h +date_strptime.o: $(hdrdir)/ruby/internal/encoding/pathname.h +date_strptime.o: $(hdrdir)/ruby/internal/encoding/re.h +date_strptime.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +date_strptime.o: $(hdrdir)/ruby/internal/encoding/string.h +date_strptime.o: $(hdrdir)/ruby/internal/encoding/symbol.h +date_strptime.o: $(hdrdir)/ruby/internal/encoding/transcode.h +date_strptime.o: $(hdrdir)/ruby/internal/error.h +date_strptime.o: $(hdrdir)/ruby/internal/eval.h +date_strptime.o: $(hdrdir)/ruby/internal/event.h +date_strptime.o: $(hdrdir)/ruby/internal/fl_type.h +date_strptime.o: $(hdrdir)/ruby/internal/gc.h +date_strptime.o: $(hdrdir)/ruby/internal/glob.h +date_strptime.o: $(hdrdir)/ruby/internal/globals.h +date_strptime.o: $(hdrdir)/ruby/internal/has/attribute.h +date_strptime.o: $(hdrdir)/ruby/internal/has/builtin.h +date_strptime.o: $(hdrdir)/ruby/internal/has/c_attribute.h +date_strptime.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +date_strptime.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +date_strptime.o: $(hdrdir)/ruby/internal/has/extension.h +date_strptime.o: $(hdrdir)/ruby/internal/has/feature.h +date_strptime.o: $(hdrdir)/ruby/internal/has/warning.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/array.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/bignum.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/class.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/compar.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/complex.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/cont.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/dir.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/enum.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/enumerator.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/error.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/eval.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/file.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/gc.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/hash.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/io.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/load.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/marshal.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/numeric.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/object.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/parse.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/proc.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/process.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/random.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/range.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/rational.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/re.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/ruby.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/select.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/signal.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/sprintf.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/string.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/struct.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/thread.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/time.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/variable.h +date_strptime.o: $(hdrdir)/ruby/internal/intern/vm.h +date_strptime.o: $(hdrdir)/ruby/internal/interpreter.h +date_strptime.o: $(hdrdir)/ruby/internal/iterator.h +date_strptime.o: $(hdrdir)/ruby/internal/memory.h +date_strptime.o: $(hdrdir)/ruby/internal/method.h +date_strptime.o: $(hdrdir)/ruby/internal/module.h +date_strptime.o: $(hdrdir)/ruby/internal/newobj.h +date_strptime.o: $(hdrdir)/ruby/internal/rgengc.h +date_strptime.o: $(hdrdir)/ruby/internal/scan_args.h +date_strptime.o: $(hdrdir)/ruby/internal/special_consts.h +date_strptime.o: $(hdrdir)/ruby/internal/static_assert.h +date_strptime.o: $(hdrdir)/ruby/internal/stdalign.h +date_strptime.o: $(hdrdir)/ruby/internal/stdbool.h +date_strptime.o: $(hdrdir)/ruby/internal/symbol.h +date_strptime.o: $(hdrdir)/ruby/internal/value.h +date_strptime.o: $(hdrdir)/ruby/internal/value_type.h +date_strptime.o: $(hdrdir)/ruby/internal/variable.h +date_strptime.o: $(hdrdir)/ruby/internal/warning_push.h +date_strptime.o: $(hdrdir)/ruby/internal/xmalloc.h date_strptime.o: $(hdrdir)/ruby/missing.h date_strptime.o: $(hdrdir)/ruby/onigmo.h date_strptime.o: $(hdrdir)/ruby/oniguruma.h diff --git a/ruby/ext/date/extconf.rb b/ruby/ext/date/extconf.rb index 8938df13b..f891de403 100644 --- a/ruby/ext/date/extconf.rb +++ b/ruby/ext/date/extconf.rb @@ -3,7 +3,9 @@ config_string("strict_warnflags") {|w| $warnflags += " #{w}"} -have_var("timezone", "time.h") -have_var("altzone", "time.h") +with_werror("", {:werror => true}) do |opt, | + have_var("timezone", "time.h", opt) + have_var("altzone", "time.h", opt) +end create_makefile('date_core') diff --git a/ruby/ext/date/lib/date.rb b/ruby/ext/date/lib/date.rb index b72b4157f..5770187a8 100644 --- a/ruby/ext/date/lib/date.rb +++ b/ruby/ext/date/lib/date.rb @@ -4,6 +4,7 @@ require 'date_core' class Date + VERSION = '3.2.2' # :nodoc: def infinite? false @@ -11,8 +12,6 @@ def infinite? class Infinity < Numeric # :nodoc: - include Comparable - def initialize(d=1) @d = d <=> 0 end def d() @d end @@ -32,6 +31,8 @@ def +@() self.class.new(+d) end def <=>(other) case other when Infinity; return d <=> other.d + when Float::INFINITY; return d <=> 1 + when -Float::INFINITY; return d <=> -1 when Numeric; return d else begin diff --git a/ruby/ext/date/prereq.mk b/ruby/ext/date/prereq.mk index fa371e0d4..cee768597 100644 --- a/ruby/ext/date/prereq.mk +++ b/ruby/ext/date/prereq.mk @@ -9,4 +9,11 @@ zonetab.h: zonetab.list .PHONY: update-zonetab update-zonetab: - $(RUBY) -C $(srcdir) update-abbr.rb + $(RUBY) -C $(srcdir) update-abbr + +.PHONY: update-nothing +update-nothing: + +update = nothing + +zonetab.list: update-$(update) diff --git a/ruby/ext/date/update-abbr b/ruby/ext/date/update-abbr index e5f6a78c8..7fe9734e6 100644 --- a/ruby/ext/date/update-abbr +++ b/ruby/ext/date/update-abbr @@ -2,7 +2,7 @@ require 'nokogiri' require 'open-uri' -doc = Nokogiri::HTML(URI.open('https://www.timeanddate.com/time/zones/')) +doc = Nokogiri::HTML(URI.open(ARGV[0] || 'https://www.timeanddate.com/time/zones/')) h = {} @@ -26,9 +26,26 @@ end h.delete_if{|_,v| !v} lines = File.readlines('zonetab.list') -lines.select{|l| l.include?(',')}. - map{|l| l.split(',', 2)[0]}. - each{|a| h.delete(a)} +lines.map! do |l| + if (sep = /^%%/ =~ l)...(sep = /^%%/ =~ l) and !sep + z, o = l.split(/,\s*/, 2) + o.strip! + if ho = h.delete(z) and ho != eval(o) + warn "offset of #{z}: #{o} -> #{ho}" + l = l.sub(/,\s*\K.*/) { + if o.include?("*") + o1, o2 = ho.abs.divmod(3600) + o1 = "#{o1}*3600" + o1 = "(#{o1}+#{o2})" if o2 != 0 + ho < 0 ? "-#{o1}" : o1 + else + ho.to_s + end + } + end + end + l +end lines.insert(-2, h.sort.map{|k,v| "#{k},#{v}\n"}) lines.flatten! diff --git a/ruby/ext/date/zonetab.h b/ruby/ext/date/zonetab.h index 379f78e1b..d82b011dc 100644 --- a/ruby/ext/date/zonetab.h +++ b/ruby/ext/date/zonetab.h @@ -846,7 +846,7 @@ zonetab (register const char *str, register size_t len) {gperf_offsetof(stringpool, 22), 3*3600}, {-1}, #line 101 "zonetab.list" - {gperf_offsetof(stringpool, 24),10*3600}, + {gperf_offsetof(stringpool, 24),-6*3600}, #line 217 "zonetab.list" {gperf_offsetof(stringpool, 25),-18000}, #line 19 "zonetab.list" @@ -875,7 +875,7 @@ zonetab (register const char *str, register size_t len) #line 79 "zonetab.list" {gperf_offsetof(stringpool, 38), 2*3600}, #line 65 "zonetab.list" - {gperf_offsetof(stringpool, 39),-10*3600}, + {gperf_offsetof(stringpool, 39),2*3600}, {-1}, #line 202 "zonetab.list" {gperf_offsetof(stringpool, 41),28800}, @@ -998,7 +998,7 @@ zonetab (register const char *str, register size_t len) #line 148 "zonetab.list" {gperf_offsetof(stringpool, 107), -25200}, #line 96 "zonetab.list" - {gperf_offsetof(stringpool, 108), 8*3600}, + {gperf_offsetof(stringpool, 108), (6*3600+1800)}, #line 42 "zonetab.list" {gperf_offsetof(stringpool, 109), -10*3600}, #line 31 "zonetab.list" @@ -1017,11 +1017,11 @@ zonetab (register const char *str, register size_t len) {gperf_offsetof(stringpool, 117), 1*3600}, {-1}, #line 95 "zonetab.list" - {gperf_offsetof(stringpool, 119), 7*3600}, + {gperf_offsetof(stringpool, 119), 2*3600}, #line 313 "zonetab.list" {gperf_offsetof(stringpool, 120),43200}, #line 55 "zonetab.list" - {gperf_offsetof(stringpool, 121), -(3*3600+1800)}, + {gperf_offsetof(stringpool, 121), -(2*3600+1800)}, #line 184 "zonetab.list" {gperf_offsetof(stringpool, 122),31500}, #line 204 "zonetab.list" @@ -1168,7 +1168,7 @@ zonetab (register const char *str, register size_t len) #line 299 "zonetab.list" {gperf_offsetof(stringpool, 206),50400}, #line 85 "zonetab.list" - {gperf_offsetof(stringpool, 207), 2*3600}, + {gperf_offsetof(stringpool, 207), -11*3600}, {-1}, #line 142 "zonetab.list" {gperf_offsetof(stringpool, 209), 19800}, @@ -1371,7 +1371,7 @@ zonetab (register const char *str, register size_t len) {gperf_offsetof(stringpool, 324), 8*3600}, {-1}, #line 50 "zonetab.list" - {gperf_offsetof(stringpool, 326), -(2*3600+1800)}, + {gperf_offsetof(stringpool, 326), -(1*3600+1800)}, #line 285 "zonetab.list" {gperf_offsetof(stringpool, 327),-10800}, {-1}, {-1}, diff --git a/ruby/ext/date/zonetab.list b/ruby/ext/date/zonetab.list index 0618546eb..d2f902d2d 100644 --- a/ruby/ext/date/zonetab.list +++ b/ruby/ext/date/zonetab.list @@ -47,12 +47,12 @@ utc, 0*3600 wet, 0*3600 at, -2*3600 brst,-2*3600 -ndt, -(2*3600+1800) +ndt, -(1*3600+1800) art, -3*3600 adt, -3*3600 brt, -3*3600 clst,-3*3600 -nst, -(3*3600+1800) +nst, -(2*3600+1800) ast, -4*3600 clt, -4*3600 akdt,-8*3600 @@ -62,7 +62,7 @@ hadt,-9*3600 hdt, -9*3600 yst, -9*3600 ahst,-10*3600 -cat,-10*3600 +cat,2*3600 hast,-10*3600 hst,-10*3600 nt, -11*3600 @@ -82,7 +82,7 @@ fst, 2*3600 mest, 2*3600 mesz, 2*3600 sast, 2*3600 -sst, 2*3600 +sst, -11*3600 bt, 3*3600 eat, 3*3600 eest, 3*3600 @@ -92,13 +92,13 @@ zp4, 4*3600 zp5, 5*3600 ist, (5*3600+1800) zp6, 6*3600 -wast, 7*3600 -cct, 8*3600 +wast, 2*3600 +cct, (6*3600+1800) sgt, 8*3600 wadt, 8*3600 jst, 9*3600 kst, 9*3600 -east,10*3600 +east,-6*3600 gst, 10*3600 eadt,11*3600 idle,12*3600 diff --git a/ruby/ext/dbm/dbm.c b/ruby/ext/dbm/dbm.c deleted file mode 100644 index bc1d52773..000000000 --- a/ruby/ext/dbm/dbm.c +++ /dev/null @@ -1,1156 +0,0 @@ -/************************************************ - - dbm.c - - - $Author$ - created at: Mon Jan 24 15:59:52 JST 1994 - - Copyright (C) 1995-2001 Yukihiro Matsumoto - -************************************************/ - -#include "ruby.h" - -#ifdef HAVE_CDEFS_H -# include -#endif -#ifdef HAVE_SYS_CDEFS_H -# include -#endif -#include DBM_HDR -#include -#include - -#define DSIZE_TYPE TYPEOF_DATUM_DSIZE -#if SIZEOF_DATUM_DSIZE > SIZEOF_INT -# define RSTRING_DSIZE(s) RSTRING_LEN(s) -# define TOO_LONG(n) ((void)(n),0) -#else -# define RSTRING_DSIZE(s) RSTRING_LENINT(s) -# define TOO_LONG(n) ((long)(+(DSIZE_TYPE)(n)) != (n)) -#endif - -static VALUE rb_cDBM, rb_eDBMError; - -#define RUBY_DBM_RW_BIT 0x20000000 - -struct dbmdata { - long di_size; - DBM *di_dbm; -}; - -NORETURN(static void closed_dbm(void)); - -static void -closed_dbm(void) -{ - rb_raise(rb_eDBMError, "closed DBM file"); -} - -#define GetDBM(obj, dbmp) do {\ - TypedData_Get_Struct((obj), struct dbmdata, &dbm_type, (dbmp));\ - if ((dbmp)->di_dbm == 0) closed_dbm();\ -} while (0) - -#define GetDBM2(obj, dbmp, dbm) do {\ - GetDBM((obj), (dbmp));\ - (dbm) = (dbmp)->di_dbm;\ -} while (0) - -static void -free_dbm(void *ptr) -{ - struct dbmdata *dbmp = ptr; - if (dbmp->di_dbm) - dbm_close(dbmp->di_dbm); - xfree(dbmp); -} - -static size_t -memsize_dbm(const void *ptr) -{ - const struct dbmdata *dbmp = ptr; - size_t size = sizeof(*dbmp); - if (dbmp->di_dbm) - size += DBM_SIZEOF_DBM; - return size; -} - -static const rb_data_type_t dbm_type = { - "dbm", - {0, free_dbm, memsize_dbm,}, - 0, 0, - RUBY_TYPED_FREE_IMMEDIATELY, -}; - -/* - * call-seq: - * dbm.close - * - * Closes the database. - */ -static VALUE -fdbm_close(VALUE obj) -{ - struct dbmdata *dbmp; - - GetDBM(obj, dbmp); - dbm_close(dbmp->di_dbm); - dbmp->di_dbm = 0; - - return Qnil; -} - -/* - * call-seq: - * dbm.closed? -> true or false - * - * Returns true if the database is closed, false otherwise. - */ -static VALUE -fdbm_closed(VALUE obj) -{ - struct dbmdata *dbmp; - - TypedData_Get_Struct(obj, struct dbmdata, &dbm_type, dbmp); - if (dbmp->di_dbm == 0) - return Qtrue; - - return Qfalse; -} - -static VALUE -fdbm_alloc(VALUE klass) -{ - struct dbmdata *dbmp; - - return TypedData_Make_Struct(klass, struct dbmdata, &dbm_type, dbmp); -} - -/* - * call-seq: - * DBM.new(filename[, mode[, flags]]) -> dbm - * - * Open a dbm database with the specified name, which can include a directory - * path. Any file extensions needed will be supplied automatically by the dbm - * library. For example, Berkeley DB appends '.db', and GNU gdbm uses two - * physical files with extensions '.dir' and '.pag'. - * - * The mode should be an integer, as for Unix chmod. - * - * Flags should be one of READER, WRITER, WRCREAT or NEWDB. - */ -static VALUE -fdbm_initialize(int argc, VALUE *argv, VALUE obj) -{ - VALUE file, vmode, vflags; - DBM *dbm; - struct dbmdata *dbmp; - int mode, flags = 0; - - TypedData_Get_Struct(obj, struct dbmdata, &dbm_type, dbmp); - if (rb_scan_args(argc, argv, "12", &file, &vmode, &vflags) == 1) { - mode = 0666; /* default value */ - } - else if (NIL_P(vmode)) { - mode = -1; /* return nil if DB not exist */ - } - else { - mode = NUM2INT(vmode); - } - - if (!NIL_P(vflags)) - flags = NUM2INT(vflags); - - FilePathValue(file); - - /* - * Note: - * gdbm 1.10 works with O_CLOEXEC. gdbm 1.9.1 silently ignore it. - */ -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - - if (flags & RUBY_DBM_RW_BIT) { - flags &= ~RUBY_DBM_RW_BIT; - dbm = dbm_open(RSTRING_PTR(file), flags|O_CLOEXEC, mode); - } - else { - dbm = 0; - if (mode >= 0) { - dbm = dbm_open(RSTRING_PTR(file), O_RDWR|O_CREAT|O_CLOEXEC, mode); - } - if (!dbm) { - dbm = dbm_open(RSTRING_PTR(file), O_RDWR|O_CLOEXEC, 0); - } - if (!dbm) { - dbm = dbm_open(RSTRING_PTR(file), O_RDONLY|O_CLOEXEC, 0); - } - } - - if (dbm) { - /* - * History of dbm_pagfno() and dbm_dirfno() in ndbm and its compatibles. - * (dbm_pagfno() and dbm_dirfno() is not standardized.) - * - * 1986: 4.3BSD provides ndbm. - * It provides dbm_pagfno() and dbm_dirfno() as macros. - * 1991: gdbm-1.5 provides them as functions. - * They returns a same descriptor. - * (Earlier releases may have the functions too.) - * 1991: Net/2 provides Berkeley DB. - * It doesn't provide dbm_pagfno() and dbm_dirfno(). - * 1992: 4.4BSD Alpha provides Berkeley DB with dbm_dirfno() as a function. - * dbm_pagfno() is a macro as DBM_PAGFNO_NOT_AVAILABLE. - * 1997: Berkeley DB 2.0 is released by Sleepycat Software, Inc. - * It defines dbm_pagfno() and dbm_dirfno() as macros. - * 2011: gdbm-1.9 creates a separate dir file. - * dbm_pagfno() and dbm_dirfno() returns different descriptors. - */ -#if defined(HAVE_DBM_PAGFNO) - rb_fd_fix_cloexec(dbm_pagfno(dbm)); -#endif -#if defined(HAVE_DBM_DIRFNO) - rb_fd_fix_cloexec(dbm_dirfno(dbm)); -#endif - -#if defined(RUBYDBM_DB_HEADER) && defined(HAVE_TYPE_DBC) - /* Disable Berkeley DB error messages such as: - * DB->put: attempt to modify a read-only database */ - ((DBC*)dbm)->dbp->set_errfile(((DBC*)dbm)->dbp, NULL); -#endif - } - - if (!dbm) { - if (mode == -1) return Qnil; - rb_sys_fail_str(file); - } - - if (dbmp->di_dbm) - dbm_close(dbmp->di_dbm); - dbmp->di_dbm = dbm; - dbmp->di_size = -1; - - return obj; -} - -/* - * call-seq: - * DBM.open(filename[, mode[, flags]]) -> dbm - * DBM.open(filename[, mode[, flags]]) {|dbm| block} - * - * Open a dbm database and yields it if a block is given. See also - * DBM.new. - */ -static VALUE -fdbm_s_open(int argc, VALUE *argv, VALUE klass) -{ - VALUE obj = fdbm_alloc(klass); - - if (NIL_P(fdbm_initialize(argc, argv, obj))) { - return Qnil; - } - - if (rb_block_given_p()) { - return rb_ensure(rb_yield, obj, fdbm_close, obj); - } - - return obj; -} - -static VALUE -fdbm_fetch(VALUE obj, VALUE keystr, VALUE ifnone) -{ - datum key, value; - struct dbmdata *dbmp; - DBM *dbm; - long len; - - ExportStringValue(keystr); - len = RSTRING_LEN(keystr); - if (TOO_LONG(len)) goto not_found; - key.dptr = RSTRING_PTR(keystr); - key.dsize = (DSIZE_TYPE)len; - - GetDBM2(obj, dbmp, dbm); - value = dbm_fetch(dbm, key); - if (value.dptr == 0) { - not_found: - if (NIL_P(ifnone) && rb_block_given_p()) { - keystr = rb_str_dup(keystr); - return rb_yield(keystr); - } - return ifnone; - } - return rb_str_new(value.dptr, value.dsize); -} - -/* - * call-seq: - * dbm[key] -> string value or nil - * - * Return a value from the database by locating the key string - * provided. If the key is not found, returns nil. - */ -static VALUE -fdbm_aref(VALUE obj, VALUE keystr) -{ - return fdbm_fetch(obj, keystr, Qnil); -} - -/* - * call-seq: - * dbm.fetch(key[, ifnone]) -> value - * - * Return a value from the database by locating the key string - * provided. If the key is not found, returns +ifnone+. If +ifnone+ - * is not given, raises IndexError. - */ -static VALUE -fdbm_fetch_m(int argc, VALUE *argv, VALUE obj) -{ - VALUE keystr, valstr, ifnone; - - rb_scan_args(argc, argv, "11", &keystr, &ifnone); - valstr = fdbm_fetch(obj, keystr, ifnone); - if (argc == 1 && !rb_block_given_p() && NIL_P(valstr)) - rb_raise(rb_eIndexError, "key not found"); - - return valstr; -} - -/* - * call-seq: - * dbm.key(value) -> string - * - * Returns the key for the specified value. - */ -static VALUE -fdbm_key(VALUE obj, VALUE valstr) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - long len; - - ExportStringValue(valstr); - len = RSTRING_LEN(valstr); - if (TOO_LONG(len)) return Qnil; - - GetDBM2(obj, dbmp, dbm); - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - val = dbm_fetch(dbm, key); - if ((long)val.dsize == RSTRING_LEN(valstr) && - memcmp(val.dptr, RSTRING_PTR(valstr), val.dsize) == 0) { - return rb_str_new(key.dptr, key.dsize); - } - } - return Qnil; -} - -/* :nodoc: */ -static VALUE -fdbm_index(VALUE hash, VALUE value) -{ - rb_warn("DBM#index is deprecated; use DBM#key"); - return fdbm_key(hash, value); -} - -/* - * call-seq: - * dbm.select {|key, value| block} -> array - * - * Returns a new array consisting of the [key, value] pairs for which the code - * block returns true. - */ -static VALUE -fdbm_select(VALUE obj) -{ - VALUE new = rb_ary_new(); - datum key, val; - DBM *dbm; - struct dbmdata *dbmp; - - GetDBM2(obj, dbmp, dbm); - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - VALUE assoc, v; - val = dbm_fetch(dbm, key); - assoc = rb_assoc_new(rb_str_new(key.dptr, key.dsize), - rb_str_new(val.dptr, val.dsize)); - v = rb_yield(assoc); - if (RTEST(v)) { - rb_ary_push(new, assoc); - } - GetDBM2(obj, dbmp, dbm); - } - - return new; -} - -/* - * call-seq: - * dbm.values_at(key, ...) -> Array - * - * Returns an array containing the values associated with the given keys. - */ -static VALUE -fdbm_values_at(int argc, VALUE *argv, VALUE obj) -{ - VALUE new = rb_ary_new2(argc); - int i; - - for (i=0; idi_size = -1; - rb_raise(rb_eDBMError, "dbm_delete failed"); - } - else if (dbmp->di_size >= 0) { - dbmp->di_size--; - } - return valstr; -} - -/* - * call-seq: - * dbm.shift() -> [key, value] - * - * Removes a [key, value] pair from the database, and returns it. - * If the database is empty, returns nil. - * The order in which values are removed/returned is not guaranteed. - */ -static VALUE -fdbm_shift(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - VALUE keystr, valstr; - - fdbm_modify(obj); - GetDBM2(obj, dbmp, dbm); - dbmp->di_size = -1; - - key = dbm_firstkey(dbm); - if (!key.dptr) return Qnil; - val = dbm_fetch(dbm, key); - keystr = rb_str_new(key.dptr, key.dsize); - valstr = rb_str_new(val.dptr, val.dsize); - dbm_delete(dbm, key); - - return rb_assoc_new(keystr, valstr); -} - -/* - * call-seq: - * dbm.reject! {|key, value| block} -> self - * dbm.delete_if {|key, value| block} -> self - * - * Deletes all entries for which the code block returns true. - * Returns self. - */ -static VALUE -fdbm_delete_if(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - VALUE keystr, valstr; - VALUE ret, ary = rb_ary_tmp_new(0); - int status = 0; - long i, n; - - fdbm_modify(obj); - GetDBM2(obj, dbmp, dbm); - n = dbmp->di_size; - dbmp->di_size = -1; - - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - val = dbm_fetch(dbm, key); - keystr = rb_str_new(key.dptr, key.dsize); - OBJ_FREEZE(keystr); - valstr = rb_str_new(val.dptr, val.dsize); - ret = rb_protect(rb_yield, rb_assoc_new(rb_str_dup(keystr), valstr), &status); - if (status != 0) break; - if (RTEST(ret)) rb_ary_push(ary, keystr); - GetDBM2(obj, dbmp, dbm); - } - - for (i = 0; i < RARRAY_LEN(ary); i++) { - keystr = RARRAY_AREF(ary, i); - key.dptr = RSTRING_PTR(keystr); - key.dsize = (DSIZE_TYPE)RSTRING_LEN(keystr); - if (dbm_delete(dbm, key)) { - rb_raise(rb_eDBMError, "dbm_delete failed"); - } - } - if (status) rb_jump_tag(status); - if (n > 0) dbmp->di_size = n - RARRAY_LEN(ary); - rb_ary_clear(ary); - - return obj; -} - -/* - * call-seq: - * dbm.clear - * - * Deletes all data from the database. - */ -static VALUE -fdbm_clear(VALUE obj) -{ - datum key; - struct dbmdata *dbmp; - DBM *dbm; - - fdbm_modify(obj); - GetDBM2(obj, dbmp, dbm); - dbmp->di_size = -1; - while (key = dbm_firstkey(dbm), key.dptr) { - if (dbm_delete(dbm, key)) { - rb_raise(rb_eDBMError, "dbm_delete failed"); - } - } - dbmp->di_size = 0; - - return obj; -} - -/* - * call-seq: - * dbm.invert -> hash - * - * Returns a Hash (not a DBM database) created by using each value in the - * database as a key, with the corresponding key as its value. - */ -static VALUE -fdbm_invert(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - VALUE keystr, valstr; - VALUE hash = rb_hash_new(); - - GetDBM2(obj, dbmp, dbm); - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - val = dbm_fetch(dbm, key); - keystr = rb_str_new(key.dptr, key.dsize); - valstr = rb_str_new(val.dptr, val.dsize); - rb_hash_aset(hash, valstr, keystr); - } - return hash; -} - -static VALUE fdbm_store(VALUE,VALUE,VALUE); - -static VALUE -update_i(RB_BLOCK_CALL_FUNC_ARGLIST(pair, dbm)) -{ - const VALUE *ptr; - Check_Type(pair, T_ARRAY); - if (RARRAY_LEN(pair) < 2) { - rb_raise(rb_eArgError, "pair must be [key, value]"); - } - ptr = RARRAY_CONST_PTR(pair); - fdbm_store(dbm, ptr[0], ptr[1]); - return Qnil; -} - -/* - * call-seq: - * dbm.update(obj) - * - * Updates the database with multiple values from the specified object. - * Takes any object which implements the each_pair method, including - * Hash and DBM objects. - */ -static VALUE -fdbm_update(VALUE obj, VALUE other) -{ - rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); - return obj; -} - -/* - * call-seq: - * dbm.replace(obj) - * - * Replaces the contents of the database with the contents of the specified - * object. Takes any object which implements the each_pair method, including - * Hash and DBM objects. - */ -static VALUE -fdbm_replace(VALUE obj, VALUE other) -{ - fdbm_clear(obj); - rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); - return obj; -} - -/* - * call-seq: - * dbm.store(key, value) -> value - * dbm[key] = value - * - * Stores the specified string value in the database, indexed via the - * string key provided. - */ -static VALUE -fdbm_store(VALUE obj, VALUE keystr, VALUE valstr) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - - fdbm_modify(obj); - keystr = rb_obj_as_string(keystr); - valstr = rb_obj_as_string(valstr); - - key.dptr = RSTRING_PTR(keystr); - key.dsize = RSTRING_DSIZE(keystr); - - val.dptr = RSTRING_PTR(valstr); - val.dsize = RSTRING_DSIZE(valstr); - - GetDBM2(obj, dbmp, dbm); - dbmp->di_size = -1; - if (dbm_store(dbm, key, val, DBM_REPLACE)) { - dbm_clearerr(dbm); - if (errno == EPERM) rb_sys_fail(0); - rb_raise(rb_eDBMError, "dbm_store failed"); - } - - return valstr; -} - -/* - * call-seq: - * dbm.length -> integer - * dbm.size -> integer - * - * Returns the number of entries in the database. - */ -static VALUE -fdbm_length(VALUE obj) -{ - datum key; - struct dbmdata *dbmp; - DBM *dbm; - int i = 0; - - GetDBM2(obj, dbmp, dbm); - if (dbmp->di_size > 0) return INT2FIX(dbmp->di_size); - - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - i++; - } - dbmp->di_size = i; - - return INT2FIX(i); -} - -/* - * call-seq: - * dbm.empty? - * - * Returns true if the database is empty, false otherwise. - */ -static VALUE -fdbm_empty_p(VALUE obj) -{ - datum key; - struct dbmdata *dbmp; - DBM *dbm; - - GetDBM2(obj, dbmp, dbm); - if (dbmp->di_size < 0) { - dbm = dbmp->di_dbm; - - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - return Qfalse; - } - } - else { - if (dbmp->di_size) - return Qfalse; - } - return Qtrue; -} - -/* - * call-seq: - * dbm.each_value {|value| block} -> self - * - * Calls the block once for each value string in the database. Returns self. - */ -static VALUE -fdbm_each_value(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - - RETURN_ENUMERATOR(obj, 0, 0); - - GetDBM2(obj, dbmp, dbm); - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - val = dbm_fetch(dbm, key); - rb_yield(rb_str_new(val.dptr, val.dsize)); - GetDBM2(obj, dbmp, dbm); - } - return obj; -} - -/* - * call-seq: - * dbm.each_key {|key| block} -> self - * - * Calls the block once for each key string in the database. Returns self. - */ -static VALUE -fdbm_each_key(VALUE obj) -{ - datum key; - struct dbmdata *dbmp; - DBM *dbm; - - RETURN_ENUMERATOR(obj, 0, 0); - - GetDBM2(obj, dbmp, dbm); - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - rb_yield(rb_str_new(key.dptr, key.dsize)); - GetDBM2(obj, dbmp, dbm); - } - return obj; -} - -/* - * call-seq: - * dbm.each_pair {|key,value| block} -> self - * - * Calls the block once for each [key, value] pair in the database. - * Returns self. - */ -static VALUE -fdbm_each_pair(VALUE obj) -{ - datum key, val; - DBM *dbm; - struct dbmdata *dbmp; - VALUE keystr, valstr; - - RETURN_ENUMERATOR(obj, 0, 0); - - GetDBM2(obj, dbmp, dbm); - - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - val = dbm_fetch(dbm, key); - keystr = rb_str_new(key.dptr, key.dsize); - valstr = rb_str_new(val.dptr, val.dsize); - rb_yield(rb_assoc_new(keystr, valstr)); - GetDBM2(obj, dbmp, dbm); - } - - return obj; -} - -/* - * call-seq: - * dbm.keys -> array - * - * Returns an array of all the string keys in the database. - */ -static VALUE -fdbm_keys(VALUE obj) -{ - datum key; - struct dbmdata *dbmp; - DBM *dbm; - VALUE ary; - - GetDBM2(obj, dbmp, dbm); - - ary = rb_ary_new(); - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - rb_ary_push(ary, rb_str_new(key.dptr, key.dsize)); - } - - return ary; -} - -/* - * call-seq: - * dbm.values -> array - * - * Returns an array of all the string values in the database. - */ -static VALUE -fdbm_values(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - VALUE ary; - - GetDBM2(obj, dbmp, dbm); - ary = rb_ary_new(); - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - val = dbm_fetch(dbm, key); - rb_ary_push(ary, rb_str_new(val.dptr, val.dsize)); - } - - return ary; -} - -/* - * call-seq: - * dbm.include?(key) -> boolean - * dbm.has_key?(key) -> boolean - * dbm.member?(key) -> boolean - * dbm.key?(key) -> boolean - * - * Returns true if the database contains the specified key, false otherwise. - */ -static VALUE -fdbm_has_key(VALUE obj, VALUE keystr) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - long len; - - ExportStringValue(keystr); - len = RSTRING_LEN(keystr); - if (TOO_LONG(len)) return Qfalse; - key.dptr = RSTRING_PTR(keystr); - key.dsize = (DSIZE_TYPE)len; - - GetDBM2(obj, dbmp, dbm); - val = dbm_fetch(dbm, key); - if (val.dptr) return Qtrue; - return Qfalse; -} - -/* - * call-seq: - * dbm.has_value?(value) -> boolean - * dbm.value?(value) -> boolean - * - * Returns true if the database contains the specified string value, false - * otherwise. - */ -static VALUE -fdbm_has_value(VALUE obj, VALUE valstr) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - long len; - - ExportStringValue(valstr); - len = RSTRING_LEN(valstr); - if (TOO_LONG(len)) return Qfalse; - val.dptr = RSTRING_PTR(valstr); - val.dsize = (DSIZE_TYPE)len; - - GetDBM2(obj, dbmp, dbm); - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - val = dbm_fetch(dbm, key); - if ((DSIZE_TYPE)val.dsize == (DSIZE_TYPE)RSTRING_LEN(valstr) && - memcmp(val.dptr, RSTRING_PTR(valstr), val.dsize) == 0) - return Qtrue; - } - return Qfalse; -} - -/* - * call-seq: - * dbm.to_a -> array - * - * Converts the contents of the database to an array of [key, value] arrays, - * and returns it. - */ -static VALUE -fdbm_to_a(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - VALUE ary; - - GetDBM2(obj, dbmp, dbm); - ary = rb_ary_new(); - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - val = dbm_fetch(dbm, key); - rb_ary_push(ary, rb_assoc_new(rb_str_new(key.dptr, key.dsize), - rb_str_new(val.dptr, val.dsize))); - } - - return ary; -} - -/* - * call-seq: - * dbm.to_hash -> hash - * - * Converts the contents of the database to an in-memory Hash object, and - * returns it. - */ -static VALUE -fdbm_to_hash(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - VALUE hash; - - GetDBM2(obj, dbmp, dbm); - hash = rb_hash_new(); - for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) { - val = dbm_fetch(dbm, key); - rb_hash_aset(hash, rb_str_new(key.dptr, key.dsize), - rb_str_new(val.dptr, val.dsize)); - } - - return hash; -} - -/* - * call-seq: - * dbm.reject {|key,value| block} -> Hash - * - * Converts the contents of the database to an in-memory Hash, then calls - * Hash#reject with the specified code block, returning a new Hash. - */ -static VALUE -fdbm_reject(VALUE obj) -{ - return rb_hash_delete_if(fdbm_to_hash(obj)); -} - -/* - * == Introduction - * - * The DBM class provides a wrapper to a Unix-style - * {dbm}[http://en.wikipedia.org/wiki/Dbm] or Database Manager library. - * - * Dbm databases do not have tables or columns; they are simple key-value - * data stores, like a Ruby Hash except not resident in RAM. Keys and values - * must be strings. - * - * The exact library used depends on how Ruby was compiled. It could be any - * of the following: - * - * - The original ndbm library is released in 4.3BSD. - * It is based on dbm library in Unix Version 7 but has different API to - * support multiple databases in a process. - * - {Berkeley DB}[http://en.wikipedia.org/wiki/Berkeley_DB] versions - * 1 thru 6, also known as BDB and Sleepycat DB, now owned by Oracle - * Corporation. - * - Berkeley DB 1.x, still found in 4.4BSD derivatives (FreeBSD, OpenBSD, etc). - * - {gdbm}[http://www.gnu.org/software/gdbm/], the GNU implementation of dbm. - * - {qdbm}[http://fallabs.com/qdbm/index.html], another open source - * reimplementation of dbm. - * - * All of these dbm implementations have their own Ruby interfaces - * available, which provide richer (but varying) APIs. - * - * == Cautions - * - * Before you decide to use DBM, there are some issues you should consider: - * - * - Each implementation of dbm has its own file format. Generally, dbm - * libraries will not read each other's files. This makes dbm files - * a bad choice for data exchange. - * - * - Even running the same OS and the same dbm implementation, the database - * file format may depend on the CPU architecture. For example, files may - * not be portable between PowerPC and 386, or between 32 and 64 bit Linux. - * - * - Different versions of Berkeley DB use different file formats. A change to - * the OS may therefore break DBM access to existing files. - * - * - Data size limits vary between implementations. Original Berkeley DB was - * limited to 2GB of data. Dbm libraries also sometimes limit the total - * size of a key/value pair, and the total size of all the keys that hash - * to the same value. These limits can be as little as 512 bytes. That said, - * gdbm and recent versions of Berkeley DB do away with these limits. - * - * Given the above cautions, DBM is not a good choice for long term storage of - * important data. It is probably best used as a fast and easy alternative - * to a Hash for processing large amounts of data. - * - * == Example - * - * require 'dbm' - * db = DBM.open('rfcs', 0666, DBM::WRCREAT) - * db['822'] = 'Standard for the Format of ARPA Internet Text Messages' - * db['1123'] = 'Requirements for Internet Hosts - Application and Support' - * db['3068'] = 'An Anycast Prefix for 6to4 Relay Routers' - * puts db['822'] - */ -void -Init_dbm(void) -{ - rb_cDBM = rb_define_class("DBM", rb_cObject); - /* Document-class: DBMError - * Exception class used to return errors from the dbm library. - */ - rb_eDBMError = rb_define_class("DBMError", rb_eStandardError); - rb_include_module(rb_cDBM, rb_mEnumerable); - - rb_define_alloc_func(rb_cDBM, fdbm_alloc); - rb_define_singleton_method(rb_cDBM, "open", fdbm_s_open, -1); - - rb_define_method(rb_cDBM, "initialize", fdbm_initialize, -1); - rb_define_method(rb_cDBM, "close", fdbm_close, 0); - rb_define_method(rb_cDBM, "closed?", fdbm_closed, 0); - rb_define_method(rb_cDBM, "[]", fdbm_aref, 1); - rb_define_method(rb_cDBM, "fetch", fdbm_fetch_m, -1); - rb_define_method(rb_cDBM, "[]=", fdbm_store, 2); - rb_define_method(rb_cDBM, "store", fdbm_store, 2); - rb_define_method(rb_cDBM, "index", fdbm_index, 1); - rb_define_method(rb_cDBM, "key", fdbm_key, 1); - rb_define_method(rb_cDBM, "select", fdbm_select, 0); - rb_define_method(rb_cDBM, "values_at", fdbm_values_at, -1); - rb_define_method(rb_cDBM, "length", fdbm_length, 0); - rb_define_method(rb_cDBM, "size", fdbm_length, 0); - rb_define_method(rb_cDBM, "empty?", fdbm_empty_p, 0); - rb_define_method(rb_cDBM, "each", fdbm_each_pair, 0); - rb_define_method(rb_cDBM, "each_value", fdbm_each_value, 0); - rb_define_method(rb_cDBM, "each_key", fdbm_each_key, 0); - rb_define_method(rb_cDBM, "each_pair", fdbm_each_pair, 0); - rb_define_method(rb_cDBM, "keys", fdbm_keys, 0); - rb_define_method(rb_cDBM, "values", fdbm_values, 0); - rb_define_method(rb_cDBM, "shift", fdbm_shift, 0); - rb_define_method(rb_cDBM, "delete", fdbm_delete, 1); - rb_define_method(rb_cDBM, "delete_if", fdbm_delete_if, 0); - rb_define_method(rb_cDBM, "reject!", fdbm_delete_if, 0); - rb_define_method(rb_cDBM, "reject", fdbm_reject, 0); - rb_define_method(rb_cDBM, "clear", fdbm_clear, 0); - rb_define_method(rb_cDBM, "invert", fdbm_invert, 0); - rb_define_method(rb_cDBM, "update", fdbm_update, 1); - rb_define_method(rb_cDBM, "replace", fdbm_replace, 1); - - rb_define_method(rb_cDBM, "include?", fdbm_has_key, 1); - rb_define_method(rb_cDBM, "has_key?", fdbm_has_key, 1); - rb_define_method(rb_cDBM, "member?", fdbm_has_key, 1); - rb_define_method(rb_cDBM, "has_value?", fdbm_has_value, 1); - rb_define_method(rb_cDBM, "key?", fdbm_has_key, 1); - rb_define_method(rb_cDBM, "value?", fdbm_has_value, 1); - - rb_define_method(rb_cDBM, "to_a", fdbm_to_a, 0); - rb_define_method(rb_cDBM, "to_hash", fdbm_to_hash, 0); - - /* Indicates that dbm_open() should open the database in read-only mode */ - rb_define_const(rb_cDBM, "READER", INT2FIX(O_RDONLY|RUBY_DBM_RW_BIT)); - - /* Indicates that dbm_open() should open the database in read/write mode */ - rb_define_const(rb_cDBM, "WRITER", INT2FIX(O_RDWR|RUBY_DBM_RW_BIT)); - - /* Indicates that dbm_open() should open the database in read/write mode, - * and create it if it does not already exist - */ - rb_define_const(rb_cDBM, "WRCREAT", INT2FIX(O_RDWR|O_CREAT|RUBY_DBM_RW_BIT)); - - /* Indicates that dbm_open() should open the database in read/write mode, - * create it if it does not already exist, and delete all contents if it - * does already exist. - */ - rb_define_const(rb_cDBM, "NEWDB", INT2FIX(O_RDWR|O_CREAT|O_TRUNC|RUBY_DBM_RW_BIT)); - - { - VALUE version; -#if defined(_DBM_IOERR) - version = rb_str_new2("ndbm (4.3BSD)"); -#elif defined(RUBYDBM_GDBM_HEADER) -# if defined(HAVE_DECLARED_LIBVAR_GDBM_VERSION) - /* since gdbm 1.9 */ - version = rb_str_new2(gdbm_version); -# elif defined(HAVE_UNDECLARED_LIBVAR_GDBM_VERSION) - /* ndbm.h doesn't declare gdbm_version until gdbm 1.8.3. - * See extconf.rb for more information. */ - RUBY_EXTERN char *gdbm_version; - version = rb_str_new2(gdbm_version); -# else - version = rb_str_new2("GDBM (unknown)"); -# endif -#elif defined(RUBYDBM_DB_HEADER) -# if defined(HAVE_DB_VERSION) - /* The version of the dbm library, if using Berkeley DB */ - version = rb_str_new2(db_version(NULL, NULL, NULL)); -# else - version = rb_str_new2("Berkeley DB (unknown)"); -# endif -#elif defined(_RELIC_H) -# if defined(HAVE_DPVERSION) - version = rb_sprintf("QDBM %s", dpversion); -# else - version = rb_str_new2("QDBM (unknown)"); -# endif -#else - version = rb_str_new2("ndbm (unknown)"); -#endif - /* - * Identifies ndbm library version. - * - * Examples: - * - * - "ndbm (4.3BSD)" - * - "Berkeley DB 4.8.30: (April 9, 2010)" - * - "Berkeley DB (unknown)" (4.4BSD, maybe) - * - "GDBM version 1.8.3. 10/15/2002 (built Jul 1 2011 12:32:45)" - * - "QDBM 1.8.78" - * - */ - rb_define_const(rb_cDBM, "VERSION", version); - } -} diff --git a/ruby/ext/dbm/dbm.gemspec b/ruby/ext/dbm/dbm.gemspec deleted file mode 100644 index 9de425b52..000000000 --- a/ruby/ext/dbm/dbm.gemspec +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true -Gem::Specification.new do |s| - s.name = "dbm" - s.version = '1.1.0' - s.summary = "Provides a wrapper for the UNIX-style Database Manager Library" - s.description = "Provides a wrapper for the UNIX-style Database Manager Library" - - s.require_path = %w{lib} - s.files = %w{ext/dbm/extconf.rb ext/dbm/dbm.c} - s.extensions = %w{ext/dbm/extconf.rb} - s.required_ruby_version = ">= 2.3.0" - - s.authors = ["Yukihiro Matsumoto"] - s.email = ["matz@ruby-lang.org"] - s.homepage = "https://github.com/ruby/dbm" - s.license = "BSD-2-Clause" - - s.add_development_dependency "rake-compiler" - s.add_development_dependency "test-unit" -end diff --git a/ruby/ext/dbm/depend b/ruby/ext/dbm/depend deleted file mode 100644 index 192527a8e..000000000 --- a/ruby/ext/dbm/depend +++ /dev/null @@ -1,14 +0,0 @@ -# AUTOGENERATED DEPENDENCIES START -dbm.o: $(RUBY_EXTCONF_H) -dbm.o: $(arch_hdrdir)/ruby/config.h -dbm.o: $(hdrdir)/ruby.h -dbm.o: $(hdrdir)/ruby/assert.h -dbm.o: $(hdrdir)/ruby/backward.h -dbm.o: $(hdrdir)/ruby/defines.h -dbm.o: $(hdrdir)/ruby/intern.h -dbm.o: $(hdrdir)/ruby/missing.h -dbm.o: $(hdrdir)/ruby/ruby.h -dbm.o: $(hdrdir)/ruby/st.h -dbm.o: $(hdrdir)/ruby/subst.h -dbm.o: dbm.c -# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/dbm/extconf.rb b/ruby/ext/dbm/extconf.rb deleted file mode 100644 index c3d3d0789..000000000 --- a/ruby/ext/dbm/extconf.rb +++ /dev/null @@ -1,295 +0,0 @@ -# frozen_string_literal: true -# configure option: -# --with-dbm-type=COMMA-SEPARATED-NDBM-TYPES -# -# ndbm type: -# libc ndbm compatible library in libc. -# db Berkeley DB (libdb) -# db2 Berkeley DB (libdb2) -# db1 Berkeley DB (libdb1) -# db6 Berkeley DB (libdb6) -# db5 Berkeley DB (libdb5) -# db4 Berkeley DB (libdb4) -# db3 Berkeley DB (libdb3) -# gdbm_compat GDBM since 1.8.1 (libgdbm_compat) -# gdbm GDBM until 1.8.0 (libgdbm) -# qdbm QDBM (libqdbm) -# ndbm Some legacy OS may have libndbm. - -# :stopdoc: -require 'mkmf' - -dir_config("dbm") - -if dblib = with_config("dbm-type", nil) - dblib = dblib.split(/[ ,]+/) -else - dblib = %w(libc db db2 db1 db6 db5 db4 db3 gdbm_compat gdbm qdbm) -end -# --------- [Enclose.IO Hack start] --------- -dblib = %w(gdbm_compat) -# --------- [Enclose.IO Hack end] --------- - -headers = { - "libc" => ["ndbm.h"], # 4.3BSD original ndbm, Berkeley DB 1 in 4.4BSD libc. - "db" => ["db.h"], - "db1" => ["db1/ndbm.h", "db1.h", "ndbm.h"], - "db2" => ["db2/db.h", "db2.h", "db.h"], - "db3" => ["db3/db.h", "db3.h", "db.h"], - "db4" => ["db4/db.h", "db4.h", "db.h"], - "db5" => ["db5/db.h", "db5.h", "db.h"], - "db6" => ["db6/db.h", "db6.h", "db.h"], - "gdbm_compat" => ["gdbm-ndbm.h", "gdbm/ndbm.h", "ndbm.h"], # GDBM since 1.8.1 - "gdbm" => ["gdbm-ndbm.h", "gdbm/ndbm.h", "ndbm.h"], # GDBM until 1.8.0 - "qdbm" => ["qdbm/relic.h", "relic.h"], -} - -class << headers - attr_accessor :found - attr_accessor :defs -end -headers.found = [] -headers.defs = nil - -def headers.db_check(db, hdr) - old_libs = $libs.dup - old_defs = $defs.dup - result = db_check2(db, hdr) - if !result - $libs = old_libs - $defs = old_defs - end - result -end - -def have_declared_libvar(var, headers = nil, opt = "", &b) - checking_for checking_message([*var].compact.join(' '), headers, opt) do - try_declared_libvar(var, headers, opt, &b) - end -end - -def try_declared_libvar(var, headers = nil, opt = "", &b) - if try_link(<<"SRC", opt, &b) -#{cpp_include(headers)} -/*top*/ -int main(int argc, char *argv[]) { - void *conftest_var = &#{var}; - return 0; -} -SRC - $defs.push(format("-DHAVE_DECLARED_LIBVAR_%s", var.tr_cpp)) - true - else - false - end -end - -def have_undeclared_libvar(var, headers = nil, opt = "", &b) - checking_for checking_message([*var].compact.join(' '), headers, opt) do - try_undeclared_libvar(var, headers, opt, &b) - end -end - -def try_undeclared_libvar(var, headers = nil, opt = "", &b) - var, type = *var - if try_link(<<"SRC", opt, &b) -#{cpp_include(headers)} -/*top*/ -int main(int argc, char *argv[]) { - typedef #{type || 'int'} conftest_type; - extern conftest_type #{var}; - conftest_type *conftest_var = &#{var}; - return 0; -} -SRC - $defs.push(format("-DHAVE_UNDECLARED_LIBVAR_%s", var.tr_cpp)) - true - else - false - end -end - -def have_empty_macro_dbm_clearerr(headers = nil, opt = "", &b) - checking_for checking_message('empty macro of dbm_clearerr(foobarbaz)', - headers, opt) do - try_toplevel('dbm_clearerr(foobarbaz)', headers, opt, &b) - end -end - -def try_toplevel(src, headers = nil, opt = "", &b) - if try_compile(<<"SRC", opt, &b) -#{cpp_include(headers)} -/*top*/ -#{src} -SRC - true - else - false - end -end - - -def headers.db_check2(db, hdr) - $defs.push(%{-DRUBYDBM_DBM_HEADER='"#{hdr}"'}) - $defs.push(%{-DRUBYDBM_DBM_TYPE='"#{db}"'}) - - hsearch = nil - - case db - when /^db[2-6]?$/ - hsearch = "-DDB_DBM_HSEARCH" - when "gdbm_compat" - have_library("gdbm") or return false - end - - if !have_type("DBM", hdr, hsearch) - return false - end - - # 'libc' means ndbm is provided by libc. - # 4.3BSD original ndbm is contained in libc. - # 4.4BSD (and its derivatives such as NetBSD) contains Berkeley DB 1 in libc. - if !(db == 'libc' ? have_func('dbm_open("", 0, 0)', hdr, hsearch) : - have_library(db, 'dbm_open("", 0, 0)', hdr, hsearch)) - return false - end - - # Skip a mismatch of Berkeley DB's ndbm.h and old GDBM library. - # - # dbm_clearerr() should be available for any ndbm implementation. - # It is available since the original (4.3BSD) ndbm and standardized by POSIX. - # - # However "can't resolve symbol 'dbm_clearerr'" problem may be caused by - # header/library mismatch: Berkeley DB ndbm.h and GDBM library until 1.8.3. - # GDBM (until 1.8.3) provides dbm_clearerr() as a empty macro in the header - # and the library don't provide dbm_clearerr(). - # Berkeley DB provides dbm_clearerr() as a usual function. - # So Berkeley DB header with GDBM library causes the problem. - # - if !have_func('dbm_clearerr((DBM *)0)', hdr, hsearch) - return false - end - - # Berkeley DB's ndbm.h (since 1.85 at least) defines DBM_SUFFIX. - # Note that _DB_H_ is not defined on Mac OS X because - # it uses Berkeley DB 1 but ndbm.h doesn't include db.h. - have_db_header = have_macro('DBM_SUFFIX', hdr, hsearch) - - # Old GDBM's ndbm.h, until 1.8.3, defines dbm_clearerr as a macro which - # expands to no tokens. - have_gdbm_header1 = have_empty_macro_dbm_clearerr(hdr, hsearch) - - # Recent GDBM's ndbm.h, since 1.9, includes gdbm.h and it defines _GDBM_H_. - # ndbm compatibility layer of GDBM is provided by libgdbm (until 1.8.0) - # and libgdbm_compat (since 1.8.1). - have_gdbm_header2 = have_macro('_GDBM_H_', hdr, hsearch) - - # 4.3BSD's ndbm.h defines _DBM_IOERR. - # The original ndbm is provided by libc in 4.3BSD. - have_ndbm_header = have_macro('_DBM_IOERR', hdr, hsearch) - - # GDBM provides ndbm functions in libgdbm_compat since GDBM 1.8.1. - # GDBM's ndbm.h defines _GDBM_H_ since GDBM 1.9. - # If _GDBM_H_ is defined, 'gdbm_compat' is required and reject 'gdbm'. - if have_gdbm_header2 && db == 'gdbm' - return false - end - - if have_db_header - $defs.push('-DRUBYDBM_DB_HEADER') - end - - have_gdbm_header = have_gdbm_header1 | have_gdbm_header2 - if have_gdbm_header - $defs.push('-DRUBYDBM_GDBM_HEADER') - end - - # ndbm.h is provided by the original (4.3BSD) ndbm, - # Berkeley DB 1 in libc of 4.4BSD and - # ndbm compatibility layer of GDBM. - # So, try to check header/library mismatch. - # - # Several (possibly historical) distributions provides libndbm. - # It may be Berkeley DB, GDBM or 4.3BSD ndbm. - # So mismatch check is not performed for that. - # Note that libndbm is searched only when --with-dbm-type=ndbm is - # given for configure. - # - if hdr == 'ndbm.h' && db != 'libc' && db != 'ndbm' - if /\Adb\d?\z/ !~ db && have_db_header - return false - end - - if /\Agdbm/ !~ db && have_gdbm_header - return false - end - - if have_ndbm_header - return false - end - end - - # Berkeley DB - have_func('db_version((int *)0, (int *)0, (int *)0)', hdr, hsearch) - - # GDBM - have_gdbm_version = have_declared_libvar("gdbm_version", hdr, hsearch) - # gdbm_version is available since very old version (GDBM 1.5 at least). - # However it is not declared by ndbm.h until GDBM 1.8.3. - # We can't include both ndbm.h and gdbm.h because they both define datum type. - # ndbm.h includes gdbm.h and gdbm_version is declared since GDBM 1.9. - have_gdbm_version |= have_undeclared_libvar(["gdbm_version", "char *"], hdr, hsearch) - - # QDBM - have_var("dpversion", hdr, hsearch) - - # detect mismatch between GDBM header and other library. - # If GDBM header is included, GDBM library should be linked. - if have_gdbm_header && !have_gdbm_version - return false - end - - # DBC type is required to disable error messages by Berkeley DB 2 or later. - if have_db_header - have_type("DBC", hdr, hsearch) - end - - if hsearch - $defs << hsearch - @defs = hsearch - end - $defs << '-DDBM_HDR="<'+hdr+'>"' - @found << hdr - - puts "header: #{hdr}" - puts "library: #{db}" - - true -end - -if dblib.any? {|db| headers.fetch(db, ["ndbm.h"]).any? {|hdr| headers.db_check(db, hdr) } } - have_header("cdefs.h") - have_header("sys/cdefs.h") - have_func("dbm_pagfno((DBM *)0)", headers.found, headers.defs) - have_func("dbm_dirfno((DBM *)0)", headers.found, headers.defs) - convertible_int("datum.dsize", headers.found, headers.defs) - checking_for("sizeof(DBM) is available") { - if try_compile(< -#endif -#ifdef HAVE_SYS_CDEFS_H -# include -#endif -#include DBM_HDR - -const int sizeof_DBM = (int)sizeof(DBM); -SRC - $defs << '-DDBM_SIZEOF_DBM=sizeof(DBM)' - else - $defs << '-DDBM_SIZEOF_DBM=0' - end - } - create_makefile("dbm") -end -# :startdoc: diff --git a/ruby/ext/digest/bubblebabble/depend b/ruby/ext/digest/bubblebabble/depend index e7e2a8889..28d4f472a 100644 --- a/ruby/ext/digest/bubblebabble/depend +++ b/ruby/ext/digest/bubblebabble/depend @@ -4,8 +4,155 @@ bubblebabble.o: $(arch_hdrdir)/ruby/config.h bubblebabble.o: $(hdrdir)/ruby.h bubblebabble.o: $(hdrdir)/ruby/assert.h bubblebabble.o: $(hdrdir)/ruby/backward.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/assume.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/attributes.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/bool.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/inttypes.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/limits.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/long_long.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/stdalign.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/stdarg.h bubblebabble.o: $(hdrdir)/ruby/defines.h bubblebabble.o: $(hdrdir)/ruby/intern.h +bubblebabble.o: $(hdrdir)/ruby/internal/anyargs.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/char.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/double.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/int.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/long.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/short.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/assume.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/artificial.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/cold.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/const.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/constexpr.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/deprecated.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/error.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/forceinline.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/format.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/noalias.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/noexcept.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/noinline.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/nonnull.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/noreturn.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/pure.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/restrict.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/warning.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/weakref.h +bubblebabble.o: $(hdrdir)/ruby/internal/cast.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_since.h +bubblebabble.o: $(hdrdir)/ruby/internal/config.h +bubblebabble.o: $(hdrdir)/ruby/internal/constant_p.h +bubblebabble.o: $(hdrdir)/ruby/internal/core.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rarray.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rbasic.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rbignum.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rclass.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rdata.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rfile.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rhash.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/robject.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rregexp.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rstring.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rstruct.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +bubblebabble.o: $(hdrdir)/ruby/internal/ctype.h +bubblebabble.o: $(hdrdir)/ruby/internal/dllexport.h +bubblebabble.o: $(hdrdir)/ruby/internal/dosish.h +bubblebabble.o: $(hdrdir)/ruby/internal/error.h +bubblebabble.o: $(hdrdir)/ruby/internal/eval.h +bubblebabble.o: $(hdrdir)/ruby/internal/event.h +bubblebabble.o: $(hdrdir)/ruby/internal/fl_type.h +bubblebabble.o: $(hdrdir)/ruby/internal/gc.h +bubblebabble.o: $(hdrdir)/ruby/internal/glob.h +bubblebabble.o: $(hdrdir)/ruby/internal/globals.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/attribute.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/builtin.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/c_attribute.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/extension.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/feature.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/warning.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/array.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/bignum.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/class.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/compar.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/complex.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/cont.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/dir.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/enum.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/enumerator.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/error.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/eval.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/file.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/gc.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/hash.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/io.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/load.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/marshal.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/numeric.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/object.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/parse.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/proc.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/process.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/random.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/range.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/rational.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/re.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/ruby.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/select.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/signal.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/sprintf.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/string.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/struct.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/thread.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/time.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/variable.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/vm.h +bubblebabble.o: $(hdrdir)/ruby/internal/interpreter.h +bubblebabble.o: $(hdrdir)/ruby/internal/iterator.h +bubblebabble.o: $(hdrdir)/ruby/internal/memory.h +bubblebabble.o: $(hdrdir)/ruby/internal/method.h +bubblebabble.o: $(hdrdir)/ruby/internal/module.h +bubblebabble.o: $(hdrdir)/ruby/internal/newobj.h +bubblebabble.o: $(hdrdir)/ruby/internal/rgengc.h +bubblebabble.o: $(hdrdir)/ruby/internal/scan_args.h +bubblebabble.o: $(hdrdir)/ruby/internal/special_consts.h +bubblebabble.o: $(hdrdir)/ruby/internal/static_assert.h +bubblebabble.o: $(hdrdir)/ruby/internal/stdalign.h +bubblebabble.o: $(hdrdir)/ruby/internal/stdbool.h +bubblebabble.o: $(hdrdir)/ruby/internal/symbol.h +bubblebabble.o: $(hdrdir)/ruby/internal/value.h +bubblebabble.o: $(hdrdir)/ruby/internal/value_type.h +bubblebabble.o: $(hdrdir)/ruby/internal/variable.h +bubblebabble.o: $(hdrdir)/ruby/internal/warning_push.h +bubblebabble.o: $(hdrdir)/ruby/internal/xmalloc.h bubblebabble.o: $(hdrdir)/ruby/missing.h bubblebabble.o: $(hdrdir)/ruby/ruby.h bubblebabble.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/digest/bubblebabble/extconf.rb b/ruby/ext/digest/bubblebabble/extconf.rb index 21feed57f..8fb001c61 100644 --- a/ruby/ext/digest/bubblebabble/extconf.rb +++ b/ruby/ext/digest/bubblebabble/extconf.rb @@ -1,6 +1,4 @@ # frozen_string_literal: false require 'mkmf' -$defs << "-DHAVE_CONFIG_H" - create_makefile('digest/bubblebabble') diff --git a/ruby/ext/digest/depend b/ruby/ext/digest/depend index 87c39c8b8..041ba8be5 100644 --- a/ruby/ext/digest/depend +++ b/ruby/ext/digest/depend @@ -4,8 +4,155 @@ digest.o: $(arch_hdrdir)/ruby/config.h digest.o: $(hdrdir)/ruby.h digest.o: $(hdrdir)/ruby/assert.h digest.o: $(hdrdir)/ruby/backward.h +digest.o: $(hdrdir)/ruby/backward/2/assume.h +digest.o: $(hdrdir)/ruby/backward/2/attributes.h +digest.o: $(hdrdir)/ruby/backward/2/bool.h +digest.o: $(hdrdir)/ruby/backward/2/inttypes.h +digest.o: $(hdrdir)/ruby/backward/2/limits.h +digest.o: $(hdrdir)/ruby/backward/2/long_long.h +digest.o: $(hdrdir)/ruby/backward/2/stdalign.h +digest.o: $(hdrdir)/ruby/backward/2/stdarg.h digest.o: $(hdrdir)/ruby/defines.h digest.o: $(hdrdir)/ruby/intern.h +digest.o: $(hdrdir)/ruby/internal/anyargs.h +digest.o: $(hdrdir)/ruby/internal/arithmetic.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/char.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/double.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/int.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/long.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/short.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +digest.o: $(hdrdir)/ruby/internal/assume.h +digest.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +digest.o: $(hdrdir)/ruby/internal/attr/artificial.h +digest.o: $(hdrdir)/ruby/internal/attr/cold.h +digest.o: $(hdrdir)/ruby/internal/attr/const.h +digest.o: $(hdrdir)/ruby/internal/attr/constexpr.h +digest.o: $(hdrdir)/ruby/internal/attr/deprecated.h +digest.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +digest.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +digest.o: $(hdrdir)/ruby/internal/attr/error.h +digest.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +digest.o: $(hdrdir)/ruby/internal/attr/forceinline.h +digest.o: $(hdrdir)/ruby/internal/attr/format.h +digest.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +digest.o: $(hdrdir)/ruby/internal/attr/noalias.h +digest.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +digest.o: $(hdrdir)/ruby/internal/attr/noexcept.h +digest.o: $(hdrdir)/ruby/internal/attr/noinline.h +digest.o: $(hdrdir)/ruby/internal/attr/nonnull.h +digest.o: $(hdrdir)/ruby/internal/attr/noreturn.h +digest.o: $(hdrdir)/ruby/internal/attr/pure.h +digest.o: $(hdrdir)/ruby/internal/attr/restrict.h +digest.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +digest.o: $(hdrdir)/ruby/internal/attr/warning.h +digest.o: $(hdrdir)/ruby/internal/attr/weakref.h +digest.o: $(hdrdir)/ruby/internal/cast.h +digest.o: $(hdrdir)/ruby/internal/compiler_is.h +digest.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +digest.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +digest.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +digest.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +digest.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +digest.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +digest.o: $(hdrdir)/ruby/internal/compiler_since.h +digest.o: $(hdrdir)/ruby/internal/config.h +digest.o: $(hdrdir)/ruby/internal/constant_p.h +digest.o: $(hdrdir)/ruby/internal/core.h +digest.o: $(hdrdir)/ruby/internal/core/rarray.h +digest.o: $(hdrdir)/ruby/internal/core/rbasic.h +digest.o: $(hdrdir)/ruby/internal/core/rbignum.h +digest.o: $(hdrdir)/ruby/internal/core/rclass.h +digest.o: $(hdrdir)/ruby/internal/core/rdata.h +digest.o: $(hdrdir)/ruby/internal/core/rfile.h +digest.o: $(hdrdir)/ruby/internal/core/rhash.h +digest.o: $(hdrdir)/ruby/internal/core/robject.h +digest.o: $(hdrdir)/ruby/internal/core/rregexp.h +digest.o: $(hdrdir)/ruby/internal/core/rstring.h +digest.o: $(hdrdir)/ruby/internal/core/rstruct.h +digest.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +digest.o: $(hdrdir)/ruby/internal/ctype.h +digest.o: $(hdrdir)/ruby/internal/dllexport.h +digest.o: $(hdrdir)/ruby/internal/dosish.h +digest.o: $(hdrdir)/ruby/internal/error.h +digest.o: $(hdrdir)/ruby/internal/eval.h +digest.o: $(hdrdir)/ruby/internal/event.h +digest.o: $(hdrdir)/ruby/internal/fl_type.h +digest.o: $(hdrdir)/ruby/internal/gc.h +digest.o: $(hdrdir)/ruby/internal/glob.h +digest.o: $(hdrdir)/ruby/internal/globals.h +digest.o: $(hdrdir)/ruby/internal/has/attribute.h +digest.o: $(hdrdir)/ruby/internal/has/builtin.h +digest.o: $(hdrdir)/ruby/internal/has/c_attribute.h +digest.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +digest.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +digest.o: $(hdrdir)/ruby/internal/has/extension.h +digest.o: $(hdrdir)/ruby/internal/has/feature.h +digest.o: $(hdrdir)/ruby/internal/has/warning.h +digest.o: $(hdrdir)/ruby/internal/intern/array.h +digest.o: $(hdrdir)/ruby/internal/intern/bignum.h +digest.o: $(hdrdir)/ruby/internal/intern/class.h +digest.o: $(hdrdir)/ruby/internal/intern/compar.h +digest.o: $(hdrdir)/ruby/internal/intern/complex.h +digest.o: $(hdrdir)/ruby/internal/intern/cont.h +digest.o: $(hdrdir)/ruby/internal/intern/dir.h +digest.o: $(hdrdir)/ruby/internal/intern/enum.h +digest.o: $(hdrdir)/ruby/internal/intern/enumerator.h +digest.o: $(hdrdir)/ruby/internal/intern/error.h +digest.o: $(hdrdir)/ruby/internal/intern/eval.h +digest.o: $(hdrdir)/ruby/internal/intern/file.h +digest.o: $(hdrdir)/ruby/internal/intern/gc.h +digest.o: $(hdrdir)/ruby/internal/intern/hash.h +digest.o: $(hdrdir)/ruby/internal/intern/io.h +digest.o: $(hdrdir)/ruby/internal/intern/load.h +digest.o: $(hdrdir)/ruby/internal/intern/marshal.h +digest.o: $(hdrdir)/ruby/internal/intern/numeric.h +digest.o: $(hdrdir)/ruby/internal/intern/object.h +digest.o: $(hdrdir)/ruby/internal/intern/parse.h +digest.o: $(hdrdir)/ruby/internal/intern/proc.h +digest.o: $(hdrdir)/ruby/internal/intern/process.h +digest.o: $(hdrdir)/ruby/internal/intern/random.h +digest.o: $(hdrdir)/ruby/internal/intern/range.h +digest.o: $(hdrdir)/ruby/internal/intern/rational.h +digest.o: $(hdrdir)/ruby/internal/intern/re.h +digest.o: $(hdrdir)/ruby/internal/intern/ruby.h +digest.o: $(hdrdir)/ruby/internal/intern/select.h +digest.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +digest.o: $(hdrdir)/ruby/internal/intern/signal.h +digest.o: $(hdrdir)/ruby/internal/intern/sprintf.h +digest.o: $(hdrdir)/ruby/internal/intern/string.h +digest.o: $(hdrdir)/ruby/internal/intern/struct.h +digest.o: $(hdrdir)/ruby/internal/intern/thread.h +digest.o: $(hdrdir)/ruby/internal/intern/time.h +digest.o: $(hdrdir)/ruby/internal/intern/variable.h +digest.o: $(hdrdir)/ruby/internal/intern/vm.h +digest.o: $(hdrdir)/ruby/internal/interpreter.h +digest.o: $(hdrdir)/ruby/internal/iterator.h +digest.o: $(hdrdir)/ruby/internal/memory.h +digest.o: $(hdrdir)/ruby/internal/method.h +digest.o: $(hdrdir)/ruby/internal/module.h +digest.o: $(hdrdir)/ruby/internal/newobj.h +digest.o: $(hdrdir)/ruby/internal/rgengc.h +digest.o: $(hdrdir)/ruby/internal/scan_args.h +digest.o: $(hdrdir)/ruby/internal/special_consts.h +digest.o: $(hdrdir)/ruby/internal/static_assert.h +digest.o: $(hdrdir)/ruby/internal/stdalign.h +digest.o: $(hdrdir)/ruby/internal/stdbool.h +digest.o: $(hdrdir)/ruby/internal/symbol.h +digest.o: $(hdrdir)/ruby/internal/value.h +digest.o: $(hdrdir)/ruby/internal/value_type.h +digest.o: $(hdrdir)/ruby/internal/variable.h +digest.o: $(hdrdir)/ruby/internal/warning_push.h +digest.o: $(hdrdir)/ruby/internal/xmalloc.h digest.o: $(hdrdir)/ruby/missing.h digest.o: $(hdrdir)/ruby/ruby.h digest.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/digest/digest.c b/ruby/ext/digest/digest.c index a59f880ac..83f4ee42f 100644 --- a/ruby/ext/digest/digest.c +++ b/ruby/ext/digest/digest.c @@ -406,7 +406,7 @@ rb_digest_instance_digest_length(VALUE self) /* never blindly assume that #digest() returns a string */ StringValue(digest); - return INT2NUM(RSTRING_LEN(digest)); + return LONG2NUM(RSTRING_LEN(digest)); } /* @@ -725,7 +725,7 @@ rb_digest_base_digest_length(VALUE self) algo = get_digest_obj_metadata(self); - return INT2NUM(algo->digest_len); + return SIZET2NUM(algo->digest_len); } /* @@ -740,7 +740,7 @@ rb_digest_base_block_length(VALUE self) algo = get_digest_obj_metadata(self); - return INT2NUM(algo->block_len); + return SIZET2NUM(algo->block_len); } void @@ -765,6 +765,10 @@ InitVM_digest(void) */ rb_mDigest = rb_define_module("Digest"); +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + /* module functions */ rb_define_module_function(rb_mDigest, "hexencode", rb_digest_s_hexencode, 1); diff --git a/ruby/ext/digest/digest.gemspec b/ruby/ext/digest/digest.gemspec new file mode 100644 index 000000000..4a01c5fde --- /dev/null +++ b/ruby/ext/digest/digest.gemspec @@ -0,0 +1,44 @@ +# coding: utf-8 +# frozen_string_literal: true + +Gem::Specification.new do |spec| + version_module = Module.new do + version_rb = File.join(__dir__, "lib/digest/version.rb") + module_eval(File.read(version_rb), version_rb) + end + + spec.name = "digest" + spec.version = version_module::Digest::VERSION + spec.authors = ["Akinori MUSHA"] + spec.email = ["knu@idaemons.org"] + + spec.summary = %q{Provides a framework for message digest libraries.} + spec.description = %q{Provides a framework for message digest libraries.} + spec.homepage = "https://github.com/ruby/digest" + spec.licenses = ["Ruby", "BSD-2-Clause"] + + spec.files = [ + "LICENSE.txt", + "README.md", + *Dir["lib/digest{.rb,/**/*.rb}"], + ] + + spec.required_ruby_version = ">= 2.5.0" + + spec.bindir = "exe" + spec.executables = [] + + if Gem::Platform === spec.platform and spec.platform =~ 'java' or RUBY_ENGINE == 'jruby' + spec.platform = 'java' + + spec.files += Dir["ext/java/**/*.{rb,java}", "lib/digest.jar"] + spec.require_paths = %w[lib ext/java/org/jruby/ext/digest/lib] + else + spec.extensions = Dir["ext/digest/**/extconf.rb"] + + spec.files += Dir["ext/digest/**/{*.{rb,c,h,sh},depend}"] + spec.require_paths = %w[lib] + end + + spec.metadata["msys2_mingw_dependencies"] = "openssl" +end diff --git a/ruby/ext/digest/digest.h b/ruby/ext/digest/digest.h index 4b6954089..0d4f0e7cc 100644 --- a/ruby/ext/digest/digest.h +++ b/ruby/ext/digest/digest.h @@ -62,3 +62,11 @@ rb_id_metadata(void) { return rb_intern_const("metadata"); } + +static inline VALUE +rb_digest_make_metadata(const rb_digest_metadata_t *meta) +{ +#undef RUBY_UNTYPED_DATA_WARNING +#define RUBY_UNTYPED_DATA_WARNING 0 + return rb_obj_freeze(Data_Wrap_Struct(0, 0, 0, (void *)meta)); +} diff --git a/ruby/ext/digest/digest_conf.rb b/ruby/ext/digest/digest_conf.rb index 915b61877..1b929d873 100644 --- a/ruby/ext/digest/digest_conf.rb +++ b/ruby/ext/digest/digest_conf.rb @@ -1,57 +1,6 @@ # frozen_string_literal: false -# Copy from ext/openssl/extconf.rb -def find_openssl_library - if $mswin || $mingw - # required for static OpenSSL libraries - have_library("gdi32") # OpenSSL <= 1.0.2 (for RAND_screen()) - have_library("crypt32") - end - - return false unless have_header("openssl/ssl.h") - - ret = have_library("crypto", "CRYPTO_malloc") && - have_library("ssl", "SSL_new") - return ret if ret - - if $mswin - # OpenSSL >= 1.1.0: libcrypto.lib and libssl.lib. - if have_library("libcrypto", "CRYPTO_malloc") && - have_library("libssl", "SSL_new") - return true - end - - # OpenSSL <= 1.0.2: libeay32.lib and ssleay32.lib. - if have_library("libeay32", "CRYPTO_malloc") && - have_library("ssleay32", "SSL_new") - return true - end - - # LibreSSL: libcrypto-##.lib and libssl-##.lib, where ## is the ABI version - # number. We have to find the version number out by scanning libpath. - libpath = $LIBPATH.dup - libpath |= ENV["LIB"].split(File::PATH_SEPARATOR) - libpath.map! { |d| d.tr(File::ALT_SEPARATOR, File::SEPARATOR) } - - ret = [ - ["crypto", "CRYPTO_malloc"], - ["ssl", "SSL_new"] - ].all? do |base, func| - result = false - libs = ["lib#{base}-[0-9][0-9]", "lib#{base}-[0-9][0-9][0-9]"] - libs = Dir.glob(libs.map{|l| libpath.map{|d| File.join(d, l + ".*")}}.flatten).map{|path| File.basename(path, ".*")}.uniq - libs.each do |lib| - result = have_library(lib, func) - break if result - end - result - end - return ret if ret - end - return false -end - -def digest_conf(name, hdr = name, funcs = nil, types = nil) +def digest_conf(name) unless with_config("bundled-#{name}") cc = with_config("common-digest") if cc == true or /\b#{name}\b/ =~ cc @@ -62,22 +11,6 @@ def digest_conf(name, hdr = name, funcs = nil, types = nil) return :commondigest end end - - dir_config("openssl") - pkg_config("openssl") - require File.expand_path('../../openssl/deprecation', __FILE__) - if find_openssl_library - funcs ||= name.upcase - funcs = Array(funcs) - types ||= funcs - hdr = "openssl/#{hdr}.h" - if funcs.all? {|func| OpenSSL.check_func("#{func}_Transform", hdr)} && - types.all? {|type| have_type("#{type}_CTX", hdr)} - $defs << "-D#{name.upcase}_USE_OPENSSL" - $headers << "#{name}ossl.h" - return :ossl - end - end end $objs << "#{name}.#{$OBJEXT}" return diff --git a/ruby/ext/digest/extconf.rb b/ruby/ext/digest/extconf.rb index a8c68850a..0e5f08d79 100644 --- a/ruby/ext/digest/extconf.rb +++ b/ruby/ext/digest/extconf.rb @@ -6,6 +6,6 @@ $INSTALLFILES = { "digest.h" => "$(HDRDIR)" -} +} if $extmk create_makefile("digest") diff --git a/ruby/ext/digest/lib/digest.rb b/ruby/ext/digest/lib/digest.rb index ba0637af3..e995adb45 100644 --- a/ruby/ext/digest/lib/digest.rb +++ b/ruby/ext/digest/lib/digest.rb @@ -1,5 +1,19 @@ # frozen_string_literal: false -require 'digest.so' + +if defined?(Digest) && + /\A(?:2\.|3\.0\.[0-2]\z)/.match?(RUBY_VERSION) && + caller_locations.any? { |l| + %r{/(rubygems/gem_runner|bundler/cli)\.rb}.match?(l.path) + } + # Before Ruby 3.0.3/3.1.0, the gem and bundle commands used to load + # the digest library before loading additionally installed gems, so + # you will get constant redefinition warnings and unexpected + # implementation overwriting if we proceed here. Avoid that. + return +end + +require 'digest/version' +require 'digest/loader' module Digest # A mutex for Digest(). @@ -8,7 +22,7 @@ module Digest def self.const_missing(name) # :nodoc: case name when :SHA256, :SHA384, :SHA512 - lib = 'digest/sha2.so' + lib = 'digest/sha2' else lib = File.join('digest', name.to_s.downcase) end diff --git a/ruby/ext/digest/lib/digest/loader.rb b/ruby/ext/digest/lib/digest/loader.rb new file mode 100644 index 000000000..6b989e07b --- /dev/null +++ b/ruby/ext/digest/lib/digest/loader.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +require 'digest.so' diff --git a/ruby/ext/digest/lib/digest/version.rb b/ruby/ext/digest/lib/digest/version.rb new file mode 100644 index 000000000..79e6aeee9 --- /dev/null +++ b/ruby/ext/digest/lib/digest/version.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +module Digest + VERSION = "3.1.0" +end diff --git a/ruby/ext/digest/md5/depend b/ruby/ext/digest/md5/depend index abfd8de6a..2e07652cc 100644 --- a/ruby/ext/digest/md5/depend +++ b/ruby/ext/digest/md5/depend @@ -2,18 +2,327 @@ md5.o: md5.c md5.h $(srcdir)/../defs.h md5init.o: $(LOCAL_HDRS) # AUTOGENERATED DEPENDENCIES START +md5.o: $(RUBY_EXTCONF_H) +md5.o: $(arch_hdrdir)/ruby/config.h +md5.o: $(hdrdir)/ruby.h +md5.o: $(hdrdir)/ruby/assert.h +md5.o: $(hdrdir)/ruby/backward.h +md5.o: $(hdrdir)/ruby/backward/2/assume.h +md5.o: $(hdrdir)/ruby/backward/2/attributes.h +md5.o: $(hdrdir)/ruby/backward/2/bool.h +md5.o: $(hdrdir)/ruby/backward/2/inttypes.h +md5.o: $(hdrdir)/ruby/backward/2/limits.h +md5.o: $(hdrdir)/ruby/backward/2/long_long.h +md5.o: $(hdrdir)/ruby/backward/2/stdalign.h +md5.o: $(hdrdir)/ruby/backward/2/stdarg.h +md5.o: $(hdrdir)/ruby/defines.h +md5.o: $(hdrdir)/ruby/intern.h +md5.o: $(hdrdir)/ruby/internal/anyargs.h +md5.o: $(hdrdir)/ruby/internal/arithmetic.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/char.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/double.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/int.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/long.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/short.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +md5.o: $(hdrdir)/ruby/internal/assume.h +md5.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +md5.o: $(hdrdir)/ruby/internal/attr/artificial.h +md5.o: $(hdrdir)/ruby/internal/attr/cold.h +md5.o: $(hdrdir)/ruby/internal/attr/const.h +md5.o: $(hdrdir)/ruby/internal/attr/constexpr.h +md5.o: $(hdrdir)/ruby/internal/attr/deprecated.h +md5.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +md5.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +md5.o: $(hdrdir)/ruby/internal/attr/error.h +md5.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +md5.o: $(hdrdir)/ruby/internal/attr/forceinline.h +md5.o: $(hdrdir)/ruby/internal/attr/format.h +md5.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +md5.o: $(hdrdir)/ruby/internal/attr/noalias.h +md5.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +md5.o: $(hdrdir)/ruby/internal/attr/noexcept.h +md5.o: $(hdrdir)/ruby/internal/attr/noinline.h +md5.o: $(hdrdir)/ruby/internal/attr/nonnull.h +md5.o: $(hdrdir)/ruby/internal/attr/noreturn.h +md5.o: $(hdrdir)/ruby/internal/attr/pure.h +md5.o: $(hdrdir)/ruby/internal/attr/restrict.h +md5.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +md5.o: $(hdrdir)/ruby/internal/attr/warning.h +md5.o: $(hdrdir)/ruby/internal/attr/weakref.h +md5.o: $(hdrdir)/ruby/internal/cast.h +md5.o: $(hdrdir)/ruby/internal/compiler_is.h +md5.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +md5.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +md5.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +md5.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +md5.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +md5.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +md5.o: $(hdrdir)/ruby/internal/compiler_since.h +md5.o: $(hdrdir)/ruby/internal/config.h +md5.o: $(hdrdir)/ruby/internal/constant_p.h +md5.o: $(hdrdir)/ruby/internal/core.h +md5.o: $(hdrdir)/ruby/internal/core/rarray.h +md5.o: $(hdrdir)/ruby/internal/core/rbasic.h +md5.o: $(hdrdir)/ruby/internal/core/rbignum.h +md5.o: $(hdrdir)/ruby/internal/core/rclass.h +md5.o: $(hdrdir)/ruby/internal/core/rdata.h +md5.o: $(hdrdir)/ruby/internal/core/rfile.h +md5.o: $(hdrdir)/ruby/internal/core/rhash.h +md5.o: $(hdrdir)/ruby/internal/core/robject.h +md5.o: $(hdrdir)/ruby/internal/core/rregexp.h +md5.o: $(hdrdir)/ruby/internal/core/rstring.h +md5.o: $(hdrdir)/ruby/internal/core/rstruct.h +md5.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +md5.o: $(hdrdir)/ruby/internal/ctype.h +md5.o: $(hdrdir)/ruby/internal/dllexport.h +md5.o: $(hdrdir)/ruby/internal/dosish.h +md5.o: $(hdrdir)/ruby/internal/error.h +md5.o: $(hdrdir)/ruby/internal/eval.h +md5.o: $(hdrdir)/ruby/internal/event.h +md5.o: $(hdrdir)/ruby/internal/fl_type.h +md5.o: $(hdrdir)/ruby/internal/gc.h +md5.o: $(hdrdir)/ruby/internal/glob.h +md5.o: $(hdrdir)/ruby/internal/globals.h +md5.o: $(hdrdir)/ruby/internal/has/attribute.h +md5.o: $(hdrdir)/ruby/internal/has/builtin.h +md5.o: $(hdrdir)/ruby/internal/has/c_attribute.h +md5.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +md5.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +md5.o: $(hdrdir)/ruby/internal/has/extension.h +md5.o: $(hdrdir)/ruby/internal/has/feature.h +md5.o: $(hdrdir)/ruby/internal/has/warning.h +md5.o: $(hdrdir)/ruby/internal/intern/array.h +md5.o: $(hdrdir)/ruby/internal/intern/bignum.h +md5.o: $(hdrdir)/ruby/internal/intern/class.h +md5.o: $(hdrdir)/ruby/internal/intern/compar.h +md5.o: $(hdrdir)/ruby/internal/intern/complex.h +md5.o: $(hdrdir)/ruby/internal/intern/cont.h +md5.o: $(hdrdir)/ruby/internal/intern/dir.h +md5.o: $(hdrdir)/ruby/internal/intern/enum.h +md5.o: $(hdrdir)/ruby/internal/intern/enumerator.h +md5.o: $(hdrdir)/ruby/internal/intern/error.h +md5.o: $(hdrdir)/ruby/internal/intern/eval.h +md5.o: $(hdrdir)/ruby/internal/intern/file.h +md5.o: $(hdrdir)/ruby/internal/intern/gc.h +md5.o: $(hdrdir)/ruby/internal/intern/hash.h +md5.o: $(hdrdir)/ruby/internal/intern/io.h +md5.o: $(hdrdir)/ruby/internal/intern/load.h +md5.o: $(hdrdir)/ruby/internal/intern/marshal.h +md5.o: $(hdrdir)/ruby/internal/intern/numeric.h +md5.o: $(hdrdir)/ruby/internal/intern/object.h +md5.o: $(hdrdir)/ruby/internal/intern/parse.h +md5.o: $(hdrdir)/ruby/internal/intern/proc.h +md5.o: $(hdrdir)/ruby/internal/intern/process.h +md5.o: $(hdrdir)/ruby/internal/intern/random.h +md5.o: $(hdrdir)/ruby/internal/intern/range.h +md5.o: $(hdrdir)/ruby/internal/intern/rational.h +md5.o: $(hdrdir)/ruby/internal/intern/re.h +md5.o: $(hdrdir)/ruby/internal/intern/ruby.h +md5.o: $(hdrdir)/ruby/internal/intern/select.h +md5.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +md5.o: $(hdrdir)/ruby/internal/intern/signal.h +md5.o: $(hdrdir)/ruby/internal/intern/sprintf.h +md5.o: $(hdrdir)/ruby/internal/intern/string.h +md5.o: $(hdrdir)/ruby/internal/intern/struct.h +md5.o: $(hdrdir)/ruby/internal/intern/thread.h +md5.o: $(hdrdir)/ruby/internal/intern/time.h +md5.o: $(hdrdir)/ruby/internal/intern/variable.h +md5.o: $(hdrdir)/ruby/internal/intern/vm.h +md5.o: $(hdrdir)/ruby/internal/interpreter.h +md5.o: $(hdrdir)/ruby/internal/iterator.h +md5.o: $(hdrdir)/ruby/internal/memory.h +md5.o: $(hdrdir)/ruby/internal/method.h +md5.o: $(hdrdir)/ruby/internal/module.h +md5.o: $(hdrdir)/ruby/internal/newobj.h +md5.o: $(hdrdir)/ruby/internal/rgengc.h +md5.o: $(hdrdir)/ruby/internal/scan_args.h +md5.o: $(hdrdir)/ruby/internal/special_consts.h +md5.o: $(hdrdir)/ruby/internal/static_assert.h +md5.o: $(hdrdir)/ruby/internal/stdalign.h +md5.o: $(hdrdir)/ruby/internal/stdbool.h +md5.o: $(hdrdir)/ruby/internal/symbol.h +md5.o: $(hdrdir)/ruby/internal/value.h +md5.o: $(hdrdir)/ruby/internal/value_type.h +md5.o: $(hdrdir)/ruby/internal/variable.h +md5.o: $(hdrdir)/ruby/internal/warning_push.h +md5.o: $(hdrdir)/ruby/internal/xmalloc.h +md5.o: $(hdrdir)/ruby/missing.h +md5.o: $(hdrdir)/ruby/ruby.h +md5.o: $(hdrdir)/ruby/st.h +md5.o: $(hdrdir)/ruby/subst.h +md5.o: $(srcdir)/../defs.h +md5.o: md5.c +md5.o: md5.h md5init.o: $(RUBY_EXTCONF_H) md5init.o: $(arch_hdrdir)/ruby/config.h md5init.o: $(hdrdir)/ruby.h md5init.o: $(hdrdir)/ruby/assert.h md5init.o: $(hdrdir)/ruby/backward.h +md5init.o: $(hdrdir)/ruby/backward/2/assume.h +md5init.o: $(hdrdir)/ruby/backward/2/attributes.h +md5init.o: $(hdrdir)/ruby/backward/2/bool.h +md5init.o: $(hdrdir)/ruby/backward/2/inttypes.h +md5init.o: $(hdrdir)/ruby/backward/2/limits.h +md5init.o: $(hdrdir)/ruby/backward/2/long_long.h +md5init.o: $(hdrdir)/ruby/backward/2/stdalign.h +md5init.o: $(hdrdir)/ruby/backward/2/stdarg.h md5init.o: $(hdrdir)/ruby/defines.h md5init.o: $(hdrdir)/ruby/intern.h +md5init.o: $(hdrdir)/ruby/internal/anyargs.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +md5init.o: $(hdrdir)/ruby/internal/assume.h +md5init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +md5init.o: $(hdrdir)/ruby/internal/attr/artificial.h +md5init.o: $(hdrdir)/ruby/internal/attr/cold.h +md5init.o: $(hdrdir)/ruby/internal/attr/const.h +md5init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +md5init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +md5init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +md5init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +md5init.o: $(hdrdir)/ruby/internal/attr/error.h +md5init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +md5init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +md5init.o: $(hdrdir)/ruby/internal/attr/format.h +md5init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +md5init.o: $(hdrdir)/ruby/internal/attr/noalias.h +md5init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +md5init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +md5init.o: $(hdrdir)/ruby/internal/attr/noinline.h +md5init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +md5init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +md5init.o: $(hdrdir)/ruby/internal/attr/pure.h +md5init.o: $(hdrdir)/ruby/internal/attr/restrict.h +md5init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +md5init.o: $(hdrdir)/ruby/internal/attr/warning.h +md5init.o: $(hdrdir)/ruby/internal/attr/weakref.h +md5init.o: $(hdrdir)/ruby/internal/cast.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +md5init.o: $(hdrdir)/ruby/internal/compiler_since.h +md5init.o: $(hdrdir)/ruby/internal/config.h +md5init.o: $(hdrdir)/ruby/internal/constant_p.h +md5init.o: $(hdrdir)/ruby/internal/core.h +md5init.o: $(hdrdir)/ruby/internal/core/rarray.h +md5init.o: $(hdrdir)/ruby/internal/core/rbasic.h +md5init.o: $(hdrdir)/ruby/internal/core/rbignum.h +md5init.o: $(hdrdir)/ruby/internal/core/rclass.h +md5init.o: $(hdrdir)/ruby/internal/core/rdata.h +md5init.o: $(hdrdir)/ruby/internal/core/rfile.h +md5init.o: $(hdrdir)/ruby/internal/core/rhash.h +md5init.o: $(hdrdir)/ruby/internal/core/robject.h +md5init.o: $(hdrdir)/ruby/internal/core/rregexp.h +md5init.o: $(hdrdir)/ruby/internal/core/rstring.h +md5init.o: $(hdrdir)/ruby/internal/core/rstruct.h +md5init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +md5init.o: $(hdrdir)/ruby/internal/ctype.h +md5init.o: $(hdrdir)/ruby/internal/dllexport.h +md5init.o: $(hdrdir)/ruby/internal/dosish.h +md5init.o: $(hdrdir)/ruby/internal/error.h +md5init.o: $(hdrdir)/ruby/internal/eval.h +md5init.o: $(hdrdir)/ruby/internal/event.h +md5init.o: $(hdrdir)/ruby/internal/fl_type.h +md5init.o: $(hdrdir)/ruby/internal/gc.h +md5init.o: $(hdrdir)/ruby/internal/glob.h +md5init.o: $(hdrdir)/ruby/internal/globals.h +md5init.o: $(hdrdir)/ruby/internal/has/attribute.h +md5init.o: $(hdrdir)/ruby/internal/has/builtin.h +md5init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +md5init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +md5init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +md5init.o: $(hdrdir)/ruby/internal/has/extension.h +md5init.o: $(hdrdir)/ruby/internal/has/feature.h +md5init.o: $(hdrdir)/ruby/internal/has/warning.h +md5init.o: $(hdrdir)/ruby/internal/intern/array.h +md5init.o: $(hdrdir)/ruby/internal/intern/bignum.h +md5init.o: $(hdrdir)/ruby/internal/intern/class.h +md5init.o: $(hdrdir)/ruby/internal/intern/compar.h +md5init.o: $(hdrdir)/ruby/internal/intern/complex.h +md5init.o: $(hdrdir)/ruby/internal/intern/cont.h +md5init.o: $(hdrdir)/ruby/internal/intern/dir.h +md5init.o: $(hdrdir)/ruby/internal/intern/enum.h +md5init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +md5init.o: $(hdrdir)/ruby/internal/intern/error.h +md5init.o: $(hdrdir)/ruby/internal/intern/eval.h +md5init.o: $(hdrdir)/ruby/internal/intern/file.h +md5init.o: $(hdrdir)/ruby/internal/intern/gc.h +md5init.o: $(hdrdir)/ruby/internal/intern/hash.h +md5init.o: $(hdrdir)/ruby/internal/intern/io.h +md5init.o: $(hdrdir)/ruby/internal/intern/load.h +md5init.o: $(hdrdir)/ruby/internal/intern/marshal.h +md5init.o: $(hdrdir)/ruby/internal/intern/numeric.h +md5init.o: $(hdrdir)/ruby/internal/intern/object.h +md5init.o: $(hdrdir)/ruby/internal/intern/parse.h +md5init.o: $(hdrdir)/ruby/internal/intern/proc.h +md5init.o: $(hdrdir)/ruby/internal/intern/process.h +md5init.o: $(hdrdir)/ruby/internal/intern/random.h +md5init.o: $(hdrdir)/ruby/internal/intern/range.h +md5init.o: $(hdrdir)/ruby/internal/intern/rational.h +md5init.o: $(hdrdir)/ruby/internal/intern/re.h +md5init.o: $(hdrdir)/ruby/internal/intern/ruby.h +md5init.o: $(hdrdir)/ruby/internal/intern/select.h +md5init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +md5init.o: $(hdrdir)/ruby/internal/intern/signal.h +md5init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +md5init.o: $(hdrdir)/ruby/internal/intern/string.h +md5init.o: $(hdrdir)/ruby/internal/intern/struct.h +md5init.o: $(hdrdir)/ruby/internal/intern/thread.h +md5init.o: $(hdrdir)/ruby/internal/intern/time.h +md5init.o: $(hdrdir)/ruby/internal/intern/variable.h +md5init.o: $(hdrdir)/ruby/internal/intern/vm.h +md5init.o: $(hdrdir)/ruby/internal/interpreter.h +md5init.o: $(hdrdir)/ruby/internal/iterator.h +md5init.o: $(hdrdir)/ruby/internal/memory.h +md5init.o: $(hdrdir)/ruby/internal/method.h +md5init.o: $(hdrdir)/ruby/internal/module.h +md5init.o: $(hdrdir)/ruby/internal/newobj.h +md5init.o: $(hdrdir)/ruby/internal/rgengc.h +md5init.o: $(hdrdir)/ruby/internal/scan_args.h +md5init.o: $(hdrdir)/ruby/internal/special_consts.h +md5init.o: $(hdrdir)/ruby/internal/static_assert.h +md5init.o: $(hdrdir)/ruby/internal/stdalign.h +md5init.o: $(hdrdir)/ruby/internal/stdbool.h +md5init.o: $(hdrdir)/ruby/internal/symbol.h +md5init.o: $(hdrdir)/ruby/internal/value.h +md5init.o: $(hdrdir)/ruby/internal/value_type.h +md5init.o: $(hdrdir)/ruby/internal/variable.h +md5init.o: $(hdrdir)/ruby/internal/warning_push.h +md5init.o: $(hdrdir)/ruby/internal/xmalloc.h md5init.o: $(hdrdir)/ruby/missing.h md5init.o: $(hdrdir)/ruby/ruby.h md5init.o: $(hdrdir)/ruby/st.h md5init.o: $(hdrdir)/ruby/subst.h +md5init.o: $(srcdir)/../defs.h md5init.o: $(srcdir)/../digest.h +md5init.o: md5.h md5init.o: md5init.c -md5init.o: md5ossl.h # AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/digest/md5/extconf.rb b/ruby/ext/digest/md5/extconf.rb index dead9a228..01658e1b6 100644 --- a/ruby/ext/digest/md5/extconf.rb +++ b/ruby/ext/digest/md5/extconf.rb @@ -6,8 +6,6 @@ require "mkmf" require File.expand_path("../../digest_conf", __FILE__) -$defs << "-DHAVE_CONFIG_H" - $objs = [ "md5init.#{$OBJEXT}" ] digest_conf("md5") diff --git a/ruby/ext/digest/md5/md5.c b/ruby/ext/digest/md5/md5.c index 19fe54a69..3a7fe2cda 100644 --- a/ruby/ext/digest/md5/md5.c +++ b/ruby/ext/digest/md5/md5.c @@ -225,7 +225,7 @@ md5_process(MD5_CTX *pms, const uint8_t *data /*[64]*/) uint32_t xbuf[16]; const uint32_t *X; - if (!((data - (const uint8_t *)0) & 3)) { + if (!(((uintptr_t)data) & 3)) { /* data are properly aligned */ X = (const uint32_t *)data; } else { diff --git a/ruby/ext/digest/md5/md5init.c b/ruby/ext/digest/md5/md5init.c index dafd38a29..52cba78bf 100644 --- a/ruby/ext/digest/md5/md5init.c +++ b/ruby/ext/digest/md5/md5init.c @@ -3,9 +3,7 @@ #include #include "../digest.h" -#if defined(MD5_USE_OPENSSL) -#include "md5ossl.h" -#elif defined(MD5_USE_COMMONDIGEST) +#if defined(MD5_USE_COMMONDIGEST) #include "md5cc.h" #else #include "md5.h" @@ -59,8 +57,5 @@ Init_md5(void) cDigest_MD5 = rb_define_class_under(mDigest, "MD5", cDigest_Base); -#undef RUBY_UNTYPED_DATA_WARNING -#define RUBY_UNTYPED_DATA_WARNING 0 - rb_iv_set(cDigest_MD5, "metadata", - Data_Wrap_Struct(0, 0, 0, (void *)&md5)); + rb_iv_set(cDigest_MD5, "metadata", rb_digest_make_metadata(&md5)); } diff --git a/ruby/ext/digest/md5/md5ossl.h b/ruby/ext/digest/md5/md5ossl.h deleted file mode 100644 index 94aa7ae77..000000000 --- a/ruby/ext/digest/md5/md5ossl.h +++ /dev/null @@ -1,15 +0,0 @@ -/* $Id$ */ - -#ifndef MD5OSSL_H_INCLUDED -#define MD5OSSL_H_INCLUDED - -#include -#include - -#define MD5_BLOCK_LENGTH MD5_CBLOCK - -static DEFINE_FINISH_FUNC_FROM_FINAL(MD5) -#undef MD5_Finish -#define MD5_Finish rb_digest_MD5_finish - -#endif diff --git a/ruby/ext/digest/rmd160/depend b/ruby/ext/digest/rmd160/depend index 07c406a7d..fe3652a2f 100644 --- a/ruby/ext/digest/rmd160/depend +++ b/ruby/ext/digest/rmd160/depend @@ -2,18 +2,327 @@ rmd160.o: rmd160.c rmd160.h $(srcdir)/../defs.h rmd160init.o: $(LOCAL_HDRS) # AUTOGENERATED DEPENDENCIES START +rmd160.o: $(RUBY_EXTCONF_H) +rmd160.o: $(arch_hdrdir)/ruby/config.h +rmd160.o: $(hdrdir)/ruby.h +rmd160.o: $(hdrdir)/ruby/assert.h +rmd160.o: $(hdrdir)/ruby/backward.h +rmd160.o: $(hdrdir)/ruby/backward/2/assume.h +rmd160.o: $(hdrdir)/ruby/backward/2/attributes.h +rmd160.o: $(hdrdir)/ruby/backward/2/bool.h +rmd160.o: $(hdrdir)/ruby/backward/2/inttypes.h +rmd160.o: $(hdrdir)/ruby/backward/2/limits.h +rmd160.o: $(hdrdir)/ruby/backward/2/long_long.h +rmd160.o: $(hdrdir)/ruby/backward/2/stdalign.h +rmd160.o: $(hdrdir)/ruby/backward/2/stdarg.h +rmd160.o: $(hdrdir)/ruby/defines.h +rmd160.o: $(hdrdir)/ruby/intern.h +rmd160.o: $(hdrdir)/ruby/internal/anyargs.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/char.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/double.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/int.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/long.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/short.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +rmd160.o: $(hdrdir)/ruby/internal/assume.h +rmd160.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +rmd160.o: $(hdrdir)/ruby/internal/attr/artificial.h +rmd160.o: $(hdrdir)/ruby/internal/attr/cold.h +rmd160.o: $(hdrdir)/ruby/internal/attr/const.h +rmd160.o: $(hdrdir)/ruby/internal/attr/constexpr.h +rmd160.o: $(hdrdir)/ruby/internal/attr/deprecated.h +rmd160.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +rmd160.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +rmd160.o: $(hdrdir)/ruby/internal/attr/error.h +rmd160.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +rmd160.o: $(hdrdir)/ruby/internal/attr/forceinline.h +rmd160.o: $(hdrdir)/ruby/internal/attr/format.h +rmd160.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +rmd160.o: $(hdrdir)/ruby/internal/attr/noalias.h +rmd160.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +rmd160.o: $(hdrdir)/ruby/internal/attr/noexcept.h +rmd160.o: $(hdrdir)/ruby/internal/attr/noinline.h +rmd160.o: $(hdrdir)/ruby/internal/attr/nonnull.h +rmd160.o: $(hdrdir)/ruby/internal/attr/noreturn.h +rmd160.o: $(hdrdir)/ruby/internal/attr/pure.h +rmd160.o: $(hdrdir)/ruby/internal/attr/restrict.h +rmd160.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +rmd160.o: $(hdrdir)/ruby/internal/attr/warning.h +rmd160.o: $(hdrdir)/ruby/internal/attr/weakref.h +rmd160.o: $(hdrdir)/ruby/internal/cast.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_since.h +rmd160.o: $(hdrdir)/ruby/internal/config.h +rmd160.o: $(hdrdir)/ruby/internal/constant_p.h +rmd160.o: $(hdrdir)/ruby/internal/core.h +rmd160.o: $(hdrdir)/ruby/internal/core/rarray.h +rmd160.o: $(hdrdir)/ruby/internal/core/rbasic.h +rmd160.o: $(hdrdir)/ruby/internal/core/rbignum.h +rmd160.o: $(hdrdir)/ruby/internal/core/rclass.h +rmd160.o: $(hdrdir)/ruby/internal/core/rdata.h +rmd160.o: $(hdrdir)/ruby/internal/core/rfile.h +rmd160.o: $(hdrdir)/ruby/internal/core/rhash.h +rmd160.o: $(hdrdir)/ruby/internal/core/robject.h +rmd160.o: $(hdrdir)/ruby/internal/core/rregexp.h +rmd160.o: $(hdrdir)/ruby/internal/core/rstring.h +rmd160.o: $(hdrdir)/ruby/internal/core/rstruct.h +rmd160.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +rmd160.o: $(hdrdir)/ruby/internal/ctype.h +rmd160.o: $(hdrdir)/ruby/internal/dllexport.h +rmd160.o: $(hdrdir)/ruby/internal/dosish.h +rmd160.o: $(hdrdir)/ruby/internal/error.h +rmd160.o: $(hdrdir)/ruby/internal/eval.h +rmd160.o: $(hdrdir)/ruby/internal/event.h +rmd160.o: $(hdrdir)/ruby/internal/fl_type.h +rmd160.o: $(hdrdir)/ruby/internal/gc.h +rmd160.o: $(hdrdir)/ruby/internal/glob.h +rmd160.o: $(hdrdir)/ruby/internal/globals.h +rmd160.o: $(hdrdir)/ruby/internal/has/attribute.h +rmd160.o: $(hdrdir)/ruby/internal/has/builtin.h +rmd160.o: $(hdrdir)/ruby/internal/has/c_attribute.h +rmd160.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +rmd160.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +rmd160.o: $(hdrdir)/ruby/internal/has/extension.h +rmd160.o: $(hdrdir)/ruby/internal/has/feature.h +rmd160.o: $(hdrdir)/ruby/internal/has/warning.h +rmd160.o: $(hdrdir)/ruby/internal/intern/array.h +rmd160.o: $(hdrdir)/ruby/internal/intern/bignum.h +rmd160.o: $(hdrdir)/ruby/internal/intern/class.h +rmd160.o: $(hdrdir)/ruby/internal/intern/compar.h +rmd160.o: $(hdrdir)/ruby/internal/intern/complex.h +rmd160.o: $(hdrdir)/ruby/internal/intern/cont.h +rmd160.o: $(hdrdir)/ruby/internal/intern/dir.h +rmd160.o: $(hdrdir)/ruby/internal/intern/enum.h +rmd160.o: $(hdrdir)/ruby/internal/intern/enumerator.h +rmd160.o: $(hdrdir)/ruby/internal/intern/error.h +rmd160.o: $(hdrdir)/ruby/internal/intern/eval.h +rmd160.o: $(hdrdir)/ruby/internal/intern/file.h +rmd160.o: $(hdrdir)/ruby/internal/intern/gc.h +rmd160.o: $(hdrdir)/ruby/internal/intern/hash.h +rmd160.o: $(hdrdir)/ruby/internal/intern/io.h +rmd160.o: $(hdrdir)/ruby/internal/intern/load.h +rmd160.o: $(hdrdir)/ruby/internal/intern/marshal.h +rmd160.o: $(hdrdir)/ruby/internal/intern/numeric.h +rmd160.o: $(hdrdir)/ruby/internal/intern/object.h +rmd160.o: $(hdrdir)/ruby/internal/intern/parse.h +rmd160.o: $(hdrdir)/ruby/internal/intern/proc.h +rmd160.o: $(hdrdir)/ruby/internal/intern/process.h +rmd160.o: $(hdrdir)/ruby/internal/intern/random.h +rmd160.o: $(hdrdir)/ruby/internal/intern/range.h +rmd160.o: $(hdrdir)/ruby/internal/intern/rational.h +rmd160.o: $(hdrdir)/ruby/internal/intern/re.h +rmd160.o: $(hdrdir)/ruby/internal/intern/ruby.h +rmd160.o: $(hdrdir)/ruby/internal/intern/select.h +rmd160.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +rmd160.o: $(hdrdir)/ruby/internal/intern/signal.h +rmd160.o: $(hdrdir)/ruby/internal/intern/sprintf.h +rmd160.o: $(hdrdir)/ruby/internal/intern/string.h +rmd160.o: $(hdrdir)/ruby/internal/intern/struct.h +rmd160.o: $(hdrdir)/ruby/internal/intern/thread.h +rmd160.o: $(hdrdir)/ruby/internal/intern/time.h +rmd160.o: $(hdrdir)/ruby/internal/intern/variable.h +rmd160.o: $(hdrdir)/ruby/internal/intern/vm.h +rmd160.o: $(hdrdir)/ruby/internal/interpreter.h +rmd160.o: $(hdrdir)/ruby/internal/iterator.h +rmd160.o: $(hdrdir)/ruby/internal/memory.h +rmd160.o: $(hdrdir)/ruby/internal/method.h +rmd160.o: $(hdrdir)/ruby/internal/module.h +rmd160.o: $(hdrdir)/ruby/internal/newobj.h +rmd160.o: $(hdrdir)/ruby/internal/rgengc.h +rmd160.o: $(hdrdir)/ruby/internal/scan_args.h +rmd160.o: $(hdrdir)/ruby/internal/special_consts.h +rmd160.o: $(hdrdir)/ruby/internal/static_assert.h +rmd160.o: $(hdrdir)/ruby/internal/stdalign.h +rmd160.o: $(hdrdir)/ruby/internal/stdbool.h +rmd160.o: $(hdrdir)/ruby/internal/symbol.h +rmd160.o: $(hdrdir)/ruby/internal/value.h +rmd160.o: $(hdrdir)/ruby/internal/value_type.h +rmd160.o: $(hdrdir)/ruby/internal/variable.h +rmd160.o: $(hdrdir)/ruby/internal/warning_push.h +rmd160.o: $(hdrdir)/ruby/internal/xmalloc.h +rmd160.o: $(hdrdir)/ruby/missing.h +rmd160.o: $(hdrdir)/ruby/ruby.h +rmd160.o: $(hdrdir)/ruby/st.h +rmd160.o: $(hdrdir)/ruby/subst.h +rmd160.o: $(srcdir)/../defs.h +rmd160.o: rmd160.c +rmd160.o: rmd160.h rmd160init.o: $(RUBY_EXTCONF_H) rmd160init.o: $(arch_hdrdir)/ruby/config.h rmd160init.o: $(hdrdir)/ruby.h rmd160init.o: $(hdrdir)/ruby/assert.h rmd160init.o: $(hdrdir)/ruby/backward.h +rmd160init.o: $(hdrdir)/ruby/backward/2/assume.h +rmd160init.o: $(hdrdir)/ruby/backward/2/attributes.h +rmd160init.o: $(hdrdir)/ruby/backward/2/bool.h +rmd160init.o: $(hdrdir)/ruby/backward/2/inttypes.h +rmd160init.o: $(hdrdir)/ruby/backward/2/limits.h +rmd160init.o: $(hdrdir)/ruby/backward/2/long_long.h +rmd160init.o: $(hdrdir)/ruby/backward/2/stdalign.h +rmd160init.o: $(hdrdir)/ruby/backward/2/stdarg.h rmd160init.o: $(hdrdir)/ruby/defines.h rmd160init.o: $(hdrdir)/ruby/intern.h +rmd160init.o: $(hdrdir)/ruby/internal/anyargs.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +rmd160init.o: $(hdrdir)/ruby/internal/assume.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/artificial.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/cold.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/const.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/error.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/format.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/noalias.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/noinline.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/pure.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/restrict.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/warning.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/weakref.h +rmd160init.o: $(hdrdir)/ruby/internal/cast.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_since.h +rmd160init.o: $(hdrdir)/ruby/internal/config.h +rmd160init.o: $(hdrdir)/ruby/internal/constant_p.h +rmd160init.o: $(hdrdir)/ruby/internal/core.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rarray.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rbasic.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rbignum.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rclass.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rdata.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rfile.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rhash.h +rmd160init.o: $(hdrdir)/ruby/internal/core/robject.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rregexp.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rstring.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rstruct.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +rmd160init.o: $(hdrdir)/ruby/internal/ctype.h +rmd160init.o: $(hdrdir)/ruby/internal/dllexport.h +rmd160init.o: $(hdrdir)/ruby/internal/dosish.h +rmd160init.o: $(hdrdir)/ruby/internal/error.h +rmd160init.o: $(hdrdir)/ruby/internal/eval.h +rmd160init.o: $(hdrdir)/ruby/internal/event.h +rmd160init.o: $(hdrdir)/ruby/internal/fl_type.h +rmd160init.o: $(hdrdir)/ruby/internal/gc.h +rmd160init.o: $(hdrdir)/ruby/internal/glob.h +rmd160init.o: $(hdrdir)/ruby/internal/globals.h +rmd160init.o: $(hdrdir)/ruby/internal/has/attribute.h +rmd160init.o: $(hdrdir)/ruby/internal/has/builtin.h +rmd160init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +rmd160init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +rmd160init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +rmd160init.o: $(hdrdir)/ruby/internal/has/extension.h +rmd160init.o: $(hdrdir)/ruby/internal/has/feature.h +rmd160init.o: $(hdrdir)/ruby/internal/has/warning.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/array.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/bignum.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/class.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/compar.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/complex.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/cont.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/dir.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/enum.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/error.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/eval.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/file.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/gc.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/hash.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/io.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/load.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/marshal.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/numeric.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/object.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/parse.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/proc.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/process.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/random.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/range.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/rational.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/re.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/ruby.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/select.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/signal.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/string.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/struct.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/thread.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/time.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/variable.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/vm.h +rmd160init.o: $(hdrdir)/ruby/internal/interpreter.h +rmd160init.o: $(hdrdir)/ruby/internal/iterator.h +rmd160init.o: $(hdrdir)/ruby/internal/memory.h +rmd160init.o: $(hdrdir)/ruby/internal/method.h +rmd160init.o: $(hdrdir)/ruby/internal/module.h +rmd160init.o: $(hdrdir)/ruby/internal/newobj.h +rmd160init.o: $(hdrdir)/ruby/internal/rgengc.h +rmd160init.o: $(hdrdir)/ruby/internal/scan_args.h +rmd160init.o: $(hdrdir)/ruby/internal/special_consts.h +rmd160init.o: $(hdrdir)/ruby/internal/static_assert.h +rmd160init.o: $(hdrdir)/ruby/internal/stdalign.h +rmd160init.o: $(hdrdir)/ruby/internal/stdbool.h +rmd160init.o: $(hdrdir)/ruby/internal/symbol.h +rmd160init.o: $(hdrdir)/ruby/internal/value.h +rmd160init.o: $(hdrdir)/ruby/internal/value_type.h +rmd160init.o: $(hdrdir)/ruby/internal/variable.h +rmd160init.o: $(hdrdir)/ruby/internal/warning_push.h +rmd160init.o: $(hdrdir)/ruby/internal/xmalloc.h rmd160init.o: $(hdrdir)/ruby/missing.h rmd160init.o: $(hdrdir)/ruby/ruby.h rmd160init.o: $(hdrdir)/ruby/st.h rmd160init.o: $(hdrdir)/ruby/subst.h +rmd160init.o: $(srcdir)/../defs.h rmd160init.o: $(srcdir)/../digest.h +rmd160init.o: rmd160.h rmd160init.o: rmd160init.c -rmd160init.o: rmd160ossl.h # AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/digest/rmd160/extconf.rb b/ruby/ext/digest/rmd160/extconf.rb index a02ba5616..8b894da0c 100644 --- a/ruby/ext/digest/rmd160/extconf.rb +++ b/ruby/ext/digest/rmd160/extconf.rb @@ -6,11 +6,13 @@ require "mkmf" require File.expand_path("../../digest_conf", __FILE__) -$defs << "-DNDEBUG" << "-DHAVE_CONFIG_H" +if try_static_assert("RUBY_API_VERSION_MAJOR < 3", "ruby/version.h") + $defs << "-DNDEBUG" +end $objs = [ "rmd160init.#{$OBJEXT}" ] -digest_conf("rmd160", "ripemd", "RIPEMD160") +digest_conf("rmd160") have_header("sys/cdefs.h") diff --git a/ruby/ext/digest/rmd160/rmd160init.c b/ruby/ext/digest/rmd160/rmd160init.c index a2c0a023c..2ae81ec4d 100644 --- a/ruby/ext/digest/rmd160/rmd160init.c +++ b/ruby/ext/digest/rmd160/rmd160init.c @@ -3,11 +3,7 @@ #include #include "../digest.h" -#if defined(RMD160_USE_OPENSSL) -#include "rmd160ossl.h" -#else #include "rmd160.h" -#endif static const rb_digest_metadata_t rmd160 = { RUBY_DIGEST_API_VERSION, @@ -57,8 +53,5 @@ Init_rmd160(void) cDigest_RMD160 = rb_define_class_under(mDigest, "RMD160", cDigest_Base); -#undef RUBY_UNTYPED_DATA_WARNING -#define RUBY_UNTYPED_DATA_WARNING 0 - rb_iv_set(cDigest_RMD160, "metadata", - Data_Wrap_Struct(0, 0, 0, (void *)&rmd160)); + rb_iv_set(cDigest_RMD160, "metadata", rb_digest_make_metadata(&rmd160)); } diff --git a/ruby/ext/digest/rmd160/rmd160ossl.h b/ruby/ext/digest/rmd160/rmd160ossl.h deleted file mode 100644 index e6bf5ea8d..000000000 --- a/ruby/ext/digest/rmd160/rmd160ossl.h +++ /dev/null @@ -1,20 +0,0 @@ -/* $Id$ */ - -#ifndef RMD160OSSL_H_INCLUDED -#define RMD160OSSL_H_INCLUDED - -#include -#include - -#define RMD160_CTX RIPEMD160_CTX - -#define RMD160_Init RIPEMD160_Init -#define RMD160_Update RIPEMD160_Update - -#define RMD160_BLOCK_LENGTH RIPEMD160_CBLOCK -#define RMD160_DIGEST_LENGTH RIPEMD160_DIGEST_LENGTH - -static DEFINE_FINISH_FUNC_FROM_FINAL(RIPEMD160) -#define RMD160_Finish rb_digest_RIPEMD160_finish - -#endif diff --git a/ruby/ext/digest/sha1/depend b/ruby/ext/digest/sha1/depend index bc9e216ee..2b73455c0 100644 --- a/ruby/ext/digest/sha1/depend +++ b/ruby/ext/digest/sha1/depend @@ -2,18 +2,327 @@ sha1.o: sha1.c sha1.h $(srcdir)/../defs.h sha1init.o: $(LOCAL_HDRS) # AUTOGENERATED DEPENDENCIES START +sha1.o: $(RUBY_EXTCONF_H) +sha1.o: $(arch_hdrdir)/ruby/config.h +sha1.o: $(hdrdir)/ruby.h +sha1.o: $(hdrdir)/ruby/assert.h +sha1.o: $(hdrdir)/ruby/backward.h +sha1.o: $(hdrdir)/ruby/backward/2/assume.h +sha1.o: $(hdrdir)/ruby/backward/2/attributes.h +sha1.o: $(hdrdir)/ruby/backward/2/bool.h +sha1.o: $(hdrdir)/ruby/backward/2/inttypes.h +sha1.o: $(hdrdir)/ruby/backward/2/limits.h +sha1.o: $(hdrdir)/ruby/backward/2/long_long.h +sha1.o: $(hdrdir)/ruby/backward/2/stdalign.h +sha1.o: $(hdrdir)/ruby/backward/2/stdarg.h +sha1.o: $(hdrdir)/ruby/defines.h +sha1.o: $(hdrdir)/ruby/intern.h +sha1.o: $(hdrdir)/ruby/internal/anyargs.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/char.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/double.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/int.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/long.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/short.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +sha1.o: $(hdrdir)/ruby/internal/assume.h +sha1.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +sha1.o: $(hdrdir)/ruby/internal/attr/artificial.h +sha1.o: $(hdrdir)/ruby/internal/attr/cold.h +sha1.o: $(hdrdir)/ruby/internal/attr/const.h +sha1.o: $(hdrdir)/ruby/internal/attr/constexpr.h +sha1.o: $(hdrdir)/ruby/internal/attr/deprecated.h +sha1.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +sha1.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +sha1.o: $(hdrdir)/ruby/internal/attr/error.h +sha1.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +sha1.o: $(hdrdir)/ruby/internal/attr/forceinline.h +sha1.o: $(hdrdir)/ruby/internal/attr/format.h +sha1.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +sha1.o: $(hdrdir)/ruby/internal/attr/noalias.h +sha1.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +sha1.o: $(hdrdir)/ruby/internal/attr/noexcept.h +sha1.o: $(hdrdir)/ruby/internal/attr/noinline.h +sha1.o: $(hdrdir)/ruby/internal/attr/nonnull.h +sha1.o: $(hdrdir)/ruby/internal/attr/noreturn.h +sha1.o: $(hdrdir)/ruby/internal/attr/pure.h +sha1.o: $(hdrdir)/ruby/internal/attr/restrict.h +sha1.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +sha1.o: $(hdrdir)/ruby/internal/attr/warning.h +sha1.o: $(hdrdir)/ruby/internal/attr/weakref.h +sha1.o: $(hdrdir)/ruby/internal/cast.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +sha1.o: $(hdrdir)/ruby/internal/compiler_since.h +sha1.o: $(hdrdir)/ruby/internal/config.h +sha1.o: $(hdrdir)/ruby/internal/constant_p.h +sha1.o: $(hdrdir)/ruby/internal/core.h +sha1.o: $(hdrdir)/ruby/internal/core/rarray.h +sha1.o: $(hdrdir)/ruby/internal/core/rbasic.h +sha1.o: $(hdrdir)/ruby/internal/core/rbignum.h +sha1.o: $(hdrdir)/ruby/internal/core/rclass.h +sha1.o: $(hdrdir)/ruby/internal/core/rdata.h +sha1.o: $(hdrdir)/ruby/internal/core/rfile.h +sha1.o: $(hdrdir)/ruby/internal/core/rhash.h +sha1.o: $(hdrdir)/ruby/internal/core/robject.h +sha1.o: $(hdrdir)/ruby/internal/core/rregexp.h +sha1.o: $(hdrdir)/ruby/internal/core/rstring.h +sha1.o: $(hdrdir)/ruby/internal/core/rstruct.h +sha1.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +sha1.o: $(hdrdir)/ruby/internal/ctype.h +sha1.o: $(hdrdir)/ruby/internal/dllexport.h +sha1.o: $(hdrdir)/ruby/internal/dosish.h +sha1.o: $(hdrdir)/ruby/internal/error.h +sha1.o: $(hdrdir)/ruby/internal/eval.h +sha1.o: $(hdrdir)/ruby/internal/event.h +sha1.o: $(hdrdir)/ruby/internal/fl_type.h +sha1.o: $(hdrdir)/ruby/internal/gc.h +sha1.o: $(hdrdir)/ruby/internal/glob.h +sha1.o: $(hdrdir)/ruby/internal/globals.h +sha1.o: $(hdrdir)/ruby/internal/has/attribute.h +sha1.o: $(hdrdir)/ruby/internal/has/builtin.h +sha1.o: $(hdrdir)/ruby/internal/has/c_attribute.h +sha1.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +sha1.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +sha1.o: $(hdrdir)/ruby/internal/has/extension.h +sha1.o: $(hdrdir)/ruby/internal/has/feature.h +sha1.o: $(hdrdir)/ruby/internal/has/warning.h +sha1.o: $(hdrdir)/ruby/internal/intern/array.h +sha1.o: $(hdrdir)/ruby/internal/intern/bignum.h +sha1.o: $(hdrdir)/ruby/internal/intern/class.h +sha1.o: $(hdrdir)/ruby/internal/intern/compar.h +sha1.o: $(hdrdir)/ruby/internal/intern/complex.h +sha1.o: $(hdrdir)/ruby/internal/intern/cont.h +sha1.o: $(hdrdir)/ruby/internal/intern/dir.h +sha1.o: $(hdrdir)/ruby/internal/intern/enum.h +sha1.o: $(hdrdir)/ruby/internal/intern/enumerator.h +sha1.o: $(hdrdir)/ruby/internal/intern/error.h +sha1.o: $(hdrdir)/ruby/internal/intern/eval.h +sha1.o: $(hdrdir)/ruby/internal/intern/file.h +sha1.o: $(hdrdir)/ruby/internal/intern/gc.h +sha1.o: $(hdrdir)/ruby/internal/intern/hash.h +sha1.o: $(hdrdir)/ruby/internal/intern/io.h +sha1.o: $(hdrdir)/ruby/internal/intern/load.h +sha1.o: $(hdrdir)/ruby/internal/intern/marshal.h +sha1.o: $(hdrdir)/ruby/internal/intern/numeric.h +sha1.o: $(hdrdir)/ruby/internal/intern/object.h +sha1.o: $(hdrdir)/ruby/internal/intern/parse.h +sha1.o: $(hdrdir)/ruby/internal/intern/proc.h +sha1.o: $(hdrdir)/ruby/internal/intern/process.h +sha1.o: $(hdrdir)/ruby/internal/intern/random.h +sha1.o: $(hdrdir)/ruby/internal/intern/range.h +sha1.o: $(hdrdir)/ruby/internal/intern/rational.h +sha1.o: $(hdrdir)/ruby/internal/intern/re.h +sha1.o: $(hdrdir)/ruby/internal/intern/ruby.h +sha1.o: $(hdrdir)/ruby/internal/intern/select.h +sha1.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +sha1.o: $(hdrdir)/ruby/internal/intern/signal.h +sha1.o: $(hdrdir)/ruby/internal/intern/sprintf.h +sha1.o: $(hdrdir)/ruby/internal/intern/string.h +sha1.o: $(hdrdir)/ruby/internal/intern/struct.h +sha1.o: $(hdrdir)/ruby/internal/intern/thread.h +sha1.o: $(hdrdir)/ruby/internal/intern/time.h +sha1.o: $(hdrdir)/ruby/internal/intern/variable.h +sha1.o: $(hdrdir)/ruby/internal/intern/vm.h +sha1.o: $(hdrdir)/ruby/internal/interpreter.h +sha1.o: $(hdrdir)/ruby/internal/iterator.h +sha1.o: $(hdrdir)/ruby/internal/memory.h +sha1.o: $(hdrdir)/ruby/internal/method.h +sha1.o: $(hdrdir)/ruby/internal/module.h +sha1.o: $(hdrdir)/ruby/internal/newobj.h +sha1.o: $(hdrdir)/ruby/internal/rgengc.h +sha1.o: $(hdrdir)/ruby/internal/scan_args.h +sha1.o: $(hdrdir)/ruby/internal/special_consts.h +sha1.o: $(hdrdir)/ruby/internal/static_assert.h +sha1.o: $(hdrdir)/ruby/internal/stdalign.h +sha1.o: $(hdrdir)/ruby/internal/stdbool.h +sha1.o: $(hdrdir)/ruby/internal/symbol.h +sha1.o: $(hdrdir)/ruby/internal/value.h +sha1.o: $(hdrdir)/ruby/internal/value_type.h +sha1.o: $(hdrdir)/ruby/internal/variable.h +sha1.o: $(hdrdir)/ruby/internal/warning_push.h +sha1.o: $(hdrdir)/ruby/internal/xmalloc.h +sha1.o: $(hdrdir)/ruby/missing.h +sha1.o: $(hdrdir)/ruby/ruby.h +sha1.o: $(hdrdir)/ruby/st.h +sha1.o: $(hdrdir)/ruby/subst.h +sha1.o: $(srcdir)/../defs.h +sha1.o: sha1.c +sha1.o: sha1.h sha1init.o: $(RUBY_EXTCONF_H) sha1init.o: $(arch_hdrdir)/ruby/config.h sha1init.o: $(hdrdir)/ruby.h sha1init.o: $(hdrdir)/ruby/assert.h sha1init.o: $(hdrdir)/ruby/backward.h +sha1init.o: $(hdrdir)/ruby/backward/2/assume.h +sha1init.o: $(hdrdir)/ruby/backward/2/attributes.h +sha1init.o: $(hdrdir)/ruby/backward/2/bool.h +sha1init.o: $(hdrdir)/ruby/backward/2/inttypes.h +sha1init.o: $(hdrdir)/ruby/backward/2/limits.h +sha1init.o: $(hdrdir)/ruby/backward/2/long_long.h +sha1init.o: $(hdrdir)/ruby/backward/2/stdalign.h +sha1init.o: $(hdrdir)/ruby/backward/2/stdarg.h sha1init.o: $(hdrdir)/ruby/defines.h sha1init.o: $(hdrdir)/ruby/intern.h +sha1init.o: $(hdrdir)/ruby/internal/anyargs.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +sha1init.o: $(hdrdir)/ruby/internal/assume.h +sha1init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +sha1init.o: $(hdrdir)/ruby/internal/attr/artificial.h +sha1init.o: $(hdrdir)/ruby/internal/attr/cold.h +sha1init.o: $(hdrdir)/ruby/internal/attr/const.h +sha1init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +sha1init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +sha1init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +sha1init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +sha1init.o: $(hdrdir)/ruby/internal/attr/error.h +sha1init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +sha1init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +sha1init.o: $(hdrdir)/ruby/internal/attr/format.h +sha1init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +sha1init.o: $(hdrdir)/ruby/internal/attr/noalias.h +sha1init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +sha1init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +sha1init.o: $(hdrdir)/ruby/internal/attr/noinline.h +sha1init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +sha1init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +sha1init.o: $(hdrdir)/ruby/internal/attr/pure.h +sha1init.o: $(hdrdir)/ruby/internal/attr/restrict.h +sha1init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +sha1init.o: $(hdrdir)/ruby/internal/attr/warning.h +sha1init.o: $(hdrdir)/ruby/internal/attr/weakref.h +sha1init.o: $(hdrdir)/ruby/internal/cast.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_since.h +sha1init.o: $(hdrdir)/ruby/internal/config.h +sha1init.o: $(hdrdir)/ruby/internal/constant_p.h +sha1init.o: $(hdrdir)/ruby/internal/core.h +sha1init.o: $(hdrdir)/ruby/internal/core/rarray.h +sha1init.o: $(hdrdir)/ruby/internal/core/rbasic.h +sha1init.o: $(hdrdir)/ruby/internal/core/rbignum.h +sha1init.o: $(hdrdir)/ruby/internal/core/rclass.h +sha1init.o: $(hdrdir)/ruby/internal/core/rdata.h +sha1init.o: $(hdrdir)/ruby/internal/core/rfile.h +sha1init.o: $(hdrdir)/ruby/internal/core/rhash.h +sha1init.o: $(hdrdir)/ruby/internal/core/robject.h +sha1init.o: $(hdrdir)/ruby/internal/core/rregexp.h +sha1init.o: $(hdrdir)/ruby/internal/core/rstring.h +sha1init.o: $(hdrdir)/ruby/internal/core/rstruct.h +sha1init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +sha1init.o: $(hdrdir)/ruby/internal/ctype.h +sha1init.o: $(hdrdir)/ruby/internal/dllexport.h +sha1init.o: $(hdrdir)/ruby/internal/dosish.h +sha1init.o: $(hdrdir)/ruby/internal/error.h +sha1init.o: $(hdrdir)/ruby/internal/eval.h +sha1init.o: $(hdrdir)/ruby/internal/event.h +sha1init.o: $(hdrdir)/ruby/internal/fl_type.h +sha1init.o: $(hdrdir)/ruby/internal/gc.h +sha1init.o: $(hdrdir)/ruby/internal/glob.h +sha1init.o: $(hdrdir)/ruby/internal/globals.h +sha1init.o: $(hdrdir)/ruby/internal/has/attribute.h +sha1init.o: $(hdrdir)/ruby/internal/has/builtin.h +sha1init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +sha1init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +sha1init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +sha1init.o: $(hdrdir)/ruby/internal/has/extension.h +sha1init.o: $(hdrdir)/ruby/internal/has/feature.h +sha1init.o: $(hdrdir)/ruby/internal/has/warning.h +sha1init.o: $(hdrdir)/ruby/internal/intern/array.h +sha1init.o: $(hdrdir)/ruby/internal/intern/bignum.h +sha1init.o: $(hdrdir)/ruby/internal/intern/class.h +sha1init.o: $(hdrdir)/ruby/internal/intern/compar.h +sha1init.o: $(hdrdir)/ruby/internal/intern/complex.h +sha1init.o: $(hdrdir)/ruby/internal/intern/cont.h +sha1init.o: $(hdrdir)/ruby/internal/intern/dir.h +sha1init.o: $(hdrdir)/ruby/internal/intern/enum.h +sha1init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +sha1init.o: $(hdrdir)/ruby/internal/intern/error.h +sha1init.o: $(hdrdir)/ruby/internal/intern/eval.h +sha1init.o: $(hdrdir)/ruby/internal/intern/file.h +sha1init.o: $(hdrdir)/ruby/internal/intern/gc.h +sha1init.o: $(hdrdir)/ruby/internal/intern/hash.h +sha1init.o: $(hdrdir)/ruby/internal/intern/io.h +sha1init.o: $(hdrdir)/ruby/internal/intern/load.h +sha1init.o: $(hdrdir)/ruby/internal/intern/marshal.h +sha1init.o: $(hdrdir)/ruby/internal/intern/numeric.h +sha1init.o: $(hdrdir)/ruby/internal/intern/object.h +sha1init.o: $(hdrdir)/ruby/internal/intern/parse.h +sha1init.o: $(hdrdir)/ruby/internal/intern/proc.h +sha1init.o: $(hdrdir)/ruby/internal/intern/process.h +sha1init.o: $(hdrdir)/ruby/internal/intern/random.h +sha1init.o: $(hdrdir)/ruby/internal/intern/range.h +sha1init.o: $(hdrdir)/ruby/internal/intern/rational.h +sha1init.o: $(hdrdir)/ruby/internal/intern/re.h +sha1init.o: $(hdrdir)/ruby/internal/intern/ruby.h +sha1init.o: $(hdrdir)/ruby/internal/intern/select.h +sha1init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +sha1init.o: $(hdrdir)/ruby/internal/intern/signal.h +sha1init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +sha1init.o: $(hdrdir)/ruby/internal/intern/string.h +sha1init.o: $(hdrdir)/ruby/internal/intern/struct.h +sha1init.o: $(hdrdir)/ruby/internal/intern/thread.h +sha1init.o: $(hdrdir)/ruby/internal/intern/time.h +sha1init.o: $(hdrdir)/ruby/internal/intern/variable.h +sha1init.o: $(hdrdir)/ruby/internal/intern/vm.h +sha1init.o: $(hdrdir)/ruby/internal/interpreter.h +sha1init.o: $(hdrdir)/ruby/internal/iterator.h +sha1init.o: $(hdrdir)/ruby/internal/memory.h +sha1init.o: $(hdrdir)/ruby/internal/method.h +sha1init.o: $(hdrdir)/ruby/internal/module.h +sha1init.o: $(hdrdir)/ruby/internal/newobj.h +sha1init.o: $(hdrdir)/ruby/internal/rgengc.h +sha1init.o: $(hdrdir)/ruby/internal/scan_args.h +sha1init.o: $(hdrdir)/ruby/internal/special_consts.h +sha1init.o: $(hdrdir)/ruby/internal/static_assert.h +sha1init.o: $(hdrdir)/ruby/internal/stdalign.h +sha1init.o: $(hdrdir)/ruby/internal/stdbool.h +sha1init.o: $(hdrdir)/ruby/internal/symbol.h +sha1init.o: $(hdrdir)/ruby/internal/value.h +sha1init.o: $(hdrdir)/ruby/internal/value_type.h +sha1init.o: $(hdrdir)/ruby/internal/variable.h +sha1init.o: $(hdrdir)/ruby/internal/warning_push.h +sha1init.o: $(hdrdir)/ruby/internal/xmalloc.h sha1init.o: $(hdrdir)/ruby/missing.h sha1init.o: $(hdrdir)/ruby/ruby.h sha1init.o: $(hdrdir)/ruby/st.h sha1init.o: $(hdrdir)/ruby/subst.h +sha1init.o: $(srcdir)/../defs.h sha1init.o: $(srcdir)/../digest.h +sha1init.o: sha1.h sha1init.o: sha1init.c -sha1init.o: sha1ossl.h # AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/digest/sha1/extconf.rb b/ruby/ext/digest/sha1/extconf.rb index 0ff4158be..7582cd9ab 100644 --- a/ruby/ext/digest/sha1/extconf.rb +++ b/ruby/ext/digest/sha1/extconf.rb @@ -6,11 +6,9 @@ require "mkmf" require File.expand_path("../../digest_conf", __FILE__) -$defs << "-DHAVE_CONFIG_H" - $objs = [ "sha1init.#{$OBJEXT}" ] -digest_conf("sha1", "sha", nil, %w[SHA]) +digest_conf("sha1") have_header("sys/cdefs.h") diff --git a/ruby/ext/digest/sha1/sha1init.c b/ruby/ext/digest/sha1/sha1init.c index 3adf424b1..f7047bc6d 100644 --- a/ruby/ext/digest/sha1/sha1init.c +++ b/ruby/ext/digest/sha1/sha1init.c @@ -3,9 +3,7 @@ #include #include "../digest.h" -#if defined(SHA1_USE_OPENSSL) -#include "sha1ossl.h" -#elif defined(SHA1_USE_COMMONDIGEST) +#if defined(SHA1_USE_COMMONDIGEST) #include "sha1cc.h" #else #include "sha1.h" @@ -61,8 +59,5 @@ Init_sha1(void) cDigest_SHA1 = rb_define_class_under(mDigest, "SHA1", cDigest_Base); -#undef RUBY_UNTYPED_DATA_WARNING -#define RUBY_UNTYPED_DATA_WARNING 0 - rb_iv_set(cDigest_SHA1, "metadata", - Data_Wrap_Struct(0, 0, 0, (void *)&sha1)); + rb_iv_set(cDigest_SHA1, "metadata", rb_digest_make_metadata(&sha1)); } diff --git a/ruby/ext/digest/sha1/sha1ossl.h b/ruby/ext/digest/sha1/sha1ossl.h deleted file mode 100644 index 599efe9a2..000000000 --- a/ruby/ext/digest/sha1/sha1ossl.h +++ /dev/null @@ -1,22 +0,0 @@ -/* $Id$ */ - -#ifndef SHA1OSSL_H_INCLUDED -#define SHA1OSSL_H_INCLUDED - -#include -#include - -#define SHA1_CTX SHA_CTX - -#ifdef SHA_BLOCK_LENGTH -#define SHA1_BLOCK_LENGTH SHA_BLOCK_LENGTH -#else -#define SHA1_BLOCK_LENGTH SHA_CBLOCK -#endif -#define SHA1_DIGEST_LENGTH SHA_DIGEST_LENGTH - -static DEFINE_FINISH_FUNC_FROM_FINAL(SHA1) -#undef SHA1_Finish -#define SHA1_Finish rb_digest_SHA1_finish - -#endif diff --git a/ruby/ext/digest/sha2/depend b/ruby/ext/digest/sha2/depend index 8946d44f3..b3e52c644 100644 --- a/ruby/ext/digest/sha2/depend +++ b/ruby/ext/digest/sha2/depend @@ -2,18 +2,326 @@ sha2.o: sha2.c sha2.h $(srcdir)/../defs.h sha2init.o: $(LOCAL_HDRS) # AUTOGENERATED DEPENDENCIES START +sha2.o: $(RUBY_EXTCONF_H) +sha2.o: $(arch_hdrdir)/ruby/config.h +sha2.o: $(hdrdir)/ruby.h +sha2.o: $(hdrdir)/ruby/assert.h +sha2.o: $(hdrdir)/ruby/backward.h +sha2.o: $(hdrdir)/ruby/backward/2/assume.h +sha2.o: $(hdrdir)/ruby/backward/2/attributes.h +sha2.o: $(hdrdir)/ruby/backward/2/bool.h +sha2.o: $(hdrdir)/ruby/backward/2/inttypes.h +sha2.o: $(hdrdir)/ruby/backward/2/limits.h +sha2.o: $(hdrdir)/ruby/backward/2/long_long.h +sha2.o: $(hdrdir)/ruby/backward/2/stdalign.h +sha2.o: $(hdrdir)/ruby/backward/2/stdarg.h +sha2.o: $(hdrdir)/ruby/defines.h +sha2.o: $(hdrdir)/ruby/intern.h +sha2.o: $(hdrdir)/ruby/internal/anyargs.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/char.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/double.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/int.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/long.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/short.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +sha2.o: $(hdrdir)/ruby/internal/assume.h +sha2.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +sha2.o: $(hdrdir)/ruby/internal/attr/artificial.h +sha2.o: $(hdrdir)/ruby/internal/attr/cold.h +sha2.o: $(hdrdir)/ruby/internal/attr/const.h +sha2.o: $(hdrdir)/ruby/internal/attr/constexpr.h +sha2.o: $(hdrdir)/ruby/internal/attr/deprecated.h +sha2.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +sha2.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +sha2.o: $(hdrdir)/ruby/internal/attr/error.h +sha2.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +sha2.o: $(hdrdir)/ruby/internal/attr/forceinline.h +sha2.o: $(hdrdir)/ruby/internal/attr/format.h +sha2.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +sha2.o: $(hdrdir)/ruby/internal/attr/noalias.h +sha2.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +sha2.o: $(hdrdir)/ruby/internal/attr/noexcept.h +sha2.o: $(hdrdir)/ruby/internal/attr/noinline.h +sha2.o: $(hdrdir)/ruby/internal/attr/nonnull.h +sha2.o: $(hdrdir)/ruby/internal/attr/noreturn.h +sha2.o: $(hdrdir)/ruby/internal/attr/pure.h +sha2.o: $(hdrdir)/ruby/internal/attr/restrict.h +sha2.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +sha2.o: $(hdrdir)/ruby/internal/attr/warning.h +sha2.o: $(hdrdir)/ruby/internal/attr/weakref.h +sha2.o: $(hdrdir)/ruby/internal/cast.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +sha2.o: $(hdrdir)/ruby/internal/compiler_since.h +sha2.o: $(hdrdir)/ruby/internal/config.h +sha2.o: $(hdrdir)/ruby/internal/constant_p.h +sha2.o: $(hdrdir)/ruby/internal/core.h +sha2.o: $(hdrdir)/ruby/internal/core/rarray.h +sha2.o: $(hdrdir)/ruby/internal/core/rbasic.h +sha2.o: $(hdrdir)/ruby/internal/core/rbignum.h +sha2.o: $(hdrdir)/ruby/internal/core/rclass.h +sha2.o: $(hdrdir)/ruby/internal/core/rdata.h +sha2.o: $(hdrdir)/ruby/internal/core/rfile.h +sha2.o: $(hdrdir)/ruby/internal/core/rhash.h +sha2.o: $(hdrdir)/ruby/internal/core/robject.h +sha2.o: $(hdrdir)/ruby/internal/core/rregexp.h +sha2.o: $(hdrdir)/ruby/internal/core/rstring.h +sha2.o: $(hdrdir)/ruby/internal/core/rstruct.h +sha2.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +sha2.o: $(hdrdir)/ruby/internal/ctype.h +sha2.o: $(hdrdir)/ruby/internal/dllexport.h +sha2.o: $(hdrdir)/ruby/internal/dosish.h +sha2.o: $(hdrdir)/ruby/internal/error.h +sha2.o: $(hdrdir)/ruby/internal/eval.h +sha2.o: $(hdrdir)/ruby/internal/event.h +sha2.o: $(hdrdir)/ruby/internal/fl_type.h +sha2.o: $(hdrdir)/ruby/internal/gc.h +sha2.o: $(hdrdir)/ruby/internal/glob.h +sha2.o: $(hdrdir)/ruby/internal/globals.h +sha2.o: $(hdrdir)/ruby/internal/has/attribute.h +sha2.o: $(hdrdir)/ruby/internal/has/builtin.h +sha2.o: $(hdrdir)/ruby/internal/has/c_attribute.h +sha2.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +sha2.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +sha2.o: $(hdrdir)/ruby/internal/has/extension.h +sha2.o: $(hdrdir)/ruby/internal/has/feature.h +sha2.o: $(hdrdir)/ruby/internal/has/warning.h +sha2.o: $(hdrdir)/ruby/internal/intern/array.h +sha2.o: $(hdrdir)/ruby/internal/intern/bignum.h +sha2.o: $(hdrdir)/ruby/internal/intern/class.h +sha2.o: $(hdrdir)/ruby/internal/intern/compar.h +sha2.o: $(hdrdir)/ruby/internal/intern/complex.h +sha2.o: $(hdrdir)/ruby/internal/intern/cont.h +sha2.o: $(hdrdir)/ruby/internal/intern/dir.h +sha2.o: $(hdrdir)/ruby/internal/intern/enum.h +sha2.o: $(hdrdir)/ruby/internal/intern/enumerator.h +sha2.o: $(hdrdir)/ruby/internal/intern/error.h +sha2.o: $(hdrdir)/ruby/internal/intern/eval.h +sha2.o: $(hdrdir)/ruby/internal/intern/file.h +sha2.o: $(hdrdir)/ruby/internal/intern/gc.h +sha2.o: $(hdrdir)/ruby/internal/intern/hash.h +sha2.o: $(hdrdir)/ruby/internal/intern/io.h +sha2.o: $(hdrdir)/ruby/internal/intern/load.h +sha2.o: $(hdrdir)/ruby/internal/intern/marshal.h +sha2.o: $(hdrdir)/ruby/internal/intern/numeric.h +sha2.o: $(hdrdir)/ruby/internal/intern/object.h +sha2.o: $(hdrdir)/ruby/internal/intern/parse.h +sha2.o: $(hdrdir)/ruby/internal/intern/proc.h +sha2.o: $(hdrdir)/ruby/internal/intern/process.h +sha2.o: $(hdrdir)/ruby/internal/intern/random.h +sha2.o: $(hdrdir)/ruby/internal/intern/range.h +sha2.o: $(hdrdir)/ruby/internal/intern/rational.h +sha2.o: $(hdrdir)/ruby/internal/intern/re.h +sha2.o: $(hdrdir)/ruby/internal/intern/ruby.h +sha2.o: $(hdrdir)/ruby/internal/intern/select.h +sha2.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +sha2.o: $(hdrdir)/ruby/internal/intern/signal.h +sha2.o: $(hdrdir)/ruby/internal/intern/sprintf.h +sha2.o: $(hdrdir)/ruby/internal/intern/string.h +sha2.o: $(hdrdir)/ruby/internal/intern/struct.h +sha2.o: $(hdrdir)/ruby/internal/intern/thread.h +sha2.o: $(hdrdir)/ruby/internal/intern/time.h +sha2.o: $(hdrdir)/ruby/internal/intern/variable.h +sha2.o: $(hdrdir)/ruby/internal/intern/vm.h +sha2.o: $(hdrdir)/ruby/internal/interpreter.h +sha2.o: $(hdrdir)/ruby/internal/iterator.h +sha2.o: $(hdrdir)/ruby/internal/memory.h +sha2.o: $(hdrdir)/ruby/internal/method.h +sha2.o: $(hdrdir)/ruby/internal/module.h +sha2.o: $(hdrdir)/ruby/internal/newobj.h +sha2.o: $(hdrdir)/ruby/internal/rgengc.h +sha2.o: $(hdrdir)/ruby/internal/scan_args.h +sha2.o: $(hdrdir)/ruby/internal/special_consts.h +sha2.o: $(hdrdir)/ruby/internal/static_assert.h +sha2.o: $(hdrdir)/ruby/internal/stdalign.h +sha2.o: $(hdrdir)/ruby/internal/stdbool.h +sha2.o: $(hdrdir)/ruby/internal/symbol.h +sha2.o: $(hdrdir)/ruby/internal/value.h +sha2.o: $(hdrdir)/ruby/internal/value_type.h +sha2.o: $(hdrdir)/ruby/internal/variable.h +sha2.o: $(hdrdir)/ruby/internal/warning_push.h +sha2.o: $(hdrdir)/ruby/internal/xmalloc.h +sha2.o: $(hdrdir)/ruby/missing.h +sha2.o: $(hdrdir)/ruby/ruby.h +sha2.o: $(hdrdir)/ruby/st.h +sha2.o: $(hdrdir)/ruby/subst.h +sha2.o: $(srcdir)/../defs.h +sha2.o: sha2.c +sha2.o: sha2.h sha2init.o: $(RUBY_EXTCONF_H) sha2init.o: $(arch_hdrdir)/ruby/config.h sha2init.o: $(hdrdir)/ruby.h sha2init.o: $(hdrdir)/ruby/assert.h sha2init.o: $(hdrdir)/ruby/backward.h +sha2init.o: $(hdrdir)/ruby/backward/2/assume.h +sha2init.o: $(hdrdir)/ruby/backward/2/attributes.h +sha2init.o: $(hdrdir)/ruby/backward/2/bool.h +sha2init.o: $(hdrdir)/ruby/backward/2/inttypes.h +sha2init.o: $(hdrdir)/ruby/backward/2/limits.h +sha2init.o: $(hdrdir)/ruby/backward/2/long_long.h +sha2init.o: $(hdrdir)/ruby/backward/2/stdalign.h +sha2init.o: $(hdrdir)/ruby/backward/2/stdarg.h sha2init.o: $(hdrdir)/ruby/defines.h sha2init.o: $(hdrdir)/ruby/intern.h +sha2init.o: $(hdrdir)/ruby/internal/anyargs.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +sha2init.o: $(hdrdir)/ruby/internal/assume.h +sha2init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +sha2init.o: $(hdrdir)/ruby/internal/attr/artificial.h +sha2init.o: $(hdrdir)/ruby/internal/attr/cold.h +sha2init.o: $(hdrdir)/ruby/internal/attr/const.h +sha2init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +sha2init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +sha2init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +sha2init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +sha2init.o: $(hdrdir)/ruby/internal/attr/error.h +sha2init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +sha2init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +sha2init.o: $(hdrdir)/ruby/internal/attr/format.h +sha2init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +sha2init.o: $(hdrdir)/ruby/internal/attr/noalias.h +sha2init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +sha2init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +sha2init.o: $(hdrdir)/ruby/internal/attr/noinline.h +sha2init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +sha2init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +sha2init.o: $(hdrdir)/ruby/internal/attr/pure.h +sha2init.o: $(hdrdir)/ruby/internal/attr/restrict.h +sha2init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +sha2init.o: $(hdrdir)/ruby/internal/attr/warning.h +sha2init.o: $(hdrdir)/ruby/internal/attr/weakref.h +sha2init.o: $(hdrdir)/ruby/internal/cast.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_since.h +sha2init.o: $(hdrdir)/ruby/internal/config.h +sha2init.o: $(hdrdir)/ruby/internal/constant_p.h +sha2init.o: $(hdrdir)/ruby/internal/core.h +sha2init.o: $(hdrdir)/ruby/internal/core/rarray.h +sha2init.o: $(hdrdir)/ruby/internal/core/rbasic.h +sha2init.o: $(hdrdir)/ruby/internal/core/rbignum.h +sha2init.o: $(hdrdir)/ruby/internal/core/rclass.h +sha2init.o: $(hdrdir)/ruby/internal/core/rdata.h +sha2init.o: $(hdrdir)/ruby/internal/core/rfile.h +sha2init.o: $(hdrdir)/ruby/internal/core/rhash.h +sha2init.o: $(hdrdir)/ruby/internal/core/robject.h +sha2init.o: $(hdrdir)/ruby/internal/core/rregexp.h +sha2init.o: $(hdrdir)/ruby/internal/core/rstring.h +sha2init.o: $(hdrdir)/ruby/internal/core/rstruct.h +sha2init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +sha2init.o: $(hdrdir)/ruby/internal/ctype.h +sha2init.o: $(hdrdir)/ruby/internal/dllexport.h +sha2init.o: $(hdrdir)/ruby/internal/dosish.h +sha2init.o: $(hdrdir)/ruby/internal/error.h +sha2init.o: $(hdrdir)/ruby/internal/eval.h +sha2init.o: $(hdrdir)/ruby/internal/event.h +sha2init.o: $(hdrdir)/ruby/internal/fl_type.h +sha2init.o: $(hdrdir)/ruby/internal/gc.h +sha2init.o: $(hdrdir)/ruby/internal/glob.h +sha2init.o: $(hdrdir)/ruby/internal/globals.h +sha2init.o: $(hdrdir)/ruby/internal/has/attribute.h +sha2init.o: $(hdrdir)/ruby/internal/has/builtin.h +sha2init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +sha2init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +sha2init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +sha2init.o: $(hdrdir)/ruby/internal/has/extension.h +sha2init.o: $(hdrdir)/ruby/internal/has/feature.h +sha2init.o: $(hdrdir)/ruby/internal/has/warning.h +sha2init.o: $(hdrdir)/ruby/internal/intern/array.h +sha2init.o: $(hdrdir)/ruby/internal/intern/bignum.h +sha2init.o: $(hdrdir)/ruby/internal/intern/class.h +sha2init.o: $(hdrdir)/ruby/internal/intern/compar.h +sha2init.o: $(hdrdir)/ruby/internal/intern/complex.h +sha2init.o: $(hdrdir)/ruby/internal/intern/cont.h +sha2init.o: $(hdrdir)/ruby/internal/intern/dir.h +sha2init.o: $(hdrdir)/ruby/internal/intern/enum.h +sha2init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +sha2init.o: $(hdrdir)/ruby/internal/intern/error.h +sha2init.o: $(hdrdir)/ruby/internal/intern/eval.h +sha2init.o: $(hdrdir)/ruby/internal/intern/file.h +sha2init.o: $(hdrdir)/ruby/internal/intern/gc.h +sha2init.o: $(hdrdir)/ruby/internal/intern/hash.h +sha2init.o: $(hdrdir)/ruby/internal/intern/io.h +sha2init.o: $(hdrdir)/ruby/internal/intern/load.h +sha2init.o: $(hdrdir)/ruby/internal/intern/marshal.h +sha2init.o: $(hdrdir)/ruby/internal/intern/numeric.h +sha2init.o: $(hdrdir)/ruby/internal/intern/object.h +sha2init.o: $(hdrdir)/ruby/internal/intern/parse.h +sha2init.o: $(hdrdir)/ruby/internal/intern/proc.h +sha2init.o: $(hdrdir)/ruby/internal/intern/process.h +sha2init.o: $(hdrdir)/ruby/internal/intern/random.h +sha2init.o: $(hdrdir)/ruby/internal/intern/range.h +sha2init.o: $(hdrdir)/ruby/internal/intern/rational.h +sha2init.o: $(hdrdir)/ruby/internal/intern/re.h +sha2init.o: $(hdrdir)/ruby/internal/intern/ruby.h +sha2init.o: $(hdrdir)/ruby/internal/intern/select.h +sha2init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +sha2init.o: $(hdrdir)/ruby/internal/intern/signal.h +sha2init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +sha2init.o: $(hdrdir)/ruby/internal/intern/string.h +sha2init.o: $(hdrdir)/ruby/internal/intern/struct.h +sha2init.o: $(hdrdir)/ruby/internal/intern/thread.h +sha2init.o: $(hdrdir)/ruby/internal/intern/time.h +sha2init.o: $(hdrdir)/ruby/internal/intern/variable.h +sha2init.o: $(hdrdir)/ruby/internal/intern/vm.h +sha2init.o: $(hdrdir)/ruby/internal/interpreter.h +sha2init.o: $(hdrdir)/ruby/internal/iterator.h +sha2init.o: $(hdrdir)/ruby/internal/memory.h +sha2init.o: $(hdrdir)/ruby/internal/method.h +sha2init.o: $(hdrdir)/ruby/internal/module.h +sha2init.o: $(hdrdir)/ruby/internal/newobj.h +sha2init.o: $(hdrdir)/ruby/internal/rgengc.h +sha2init.o: $(hdrdir)/ruby/internal/scan_args.h +sha2init.o: $(hdrdir)/ruby/internal/special_consts.h +sha2init.o: $(hdrdir)/ruby/internal/static_assert.h +sha2init.o: $(hdrdir)/ruby/internal/stdalign.h +sha2init.o: $(hdrdir)/ruby/internal/stdbool.h +sha2init.o: $(hdrdir)/ruby/internal/symbol.h +sha2init.o: $(hdrdir)/ruby/internal/value.h +sha2init.o: $(hdrdir)/ruby/internal/value_type.h +sha2init.o: $(hdrdir)/ruby/internal/variable.h +sha2init.o: $(hdrdir)/ruby/internal/warning_push.h +sha2init.o: $(hdrdir)/ruby/internal/xmalloc.h sha2init.o: $(hdrdir)/ruby/missing.h sha2init.o: $(hdrdir)/ruby/ruby.h sha2init.o: $(hdrdir)/ruby/st.h sha2init.o: $(hdrdir)/ruby/subst.h sha2init.o: $(srcdir)/../digest.h +sha2init.o: sha2.h sha2init.o: sha2init.c -sha2init.o: sha2ossl.h # AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/digest/sha2/extconf.rb b/ruby/ext/digest/sha2/extconf.rb index 5c7f76c7f..3b772675e 100644 --- a/ruby/ext/digest/sha2/extconf.rb +++ b/ruby/ext/digest/sha2/extconf.rb @@ -6,11 +6,9 @@ require "mkmf" require File.expand_path("../../digest_conf", __FILE__) -$defs << "-DHAVE_CONFIG_H" - $objs = [ "sha2init.#{$OBJEXT}" ] -unless digest_conf("sha2", "sha", %w[SHA256 SHA512]) +unless digest_conf("sha2") have_type("u_int8_t") end diff --git a/ruby/ext/digest/sha2/lib/sha2.rb b/ruby/ext/digest/sha2/lib/sha2.rb index 61a073485..f17593a20 100644 --- a/ruby/ext/digest/sha2/lib/sha2.rb +++ b/ruby/ext/digest/sha2/lib/sha2.rb @@ -11,7 +11,7 @@ # $Id$ require 'digest' -require 'digest/sha2.so' +require 'digest/sha2/loader' module Digest # diff --git a/ruby/ext/digest/sha2/lib/sha2/loader.rb b/ruby/ext/digest/sha2/lib/sha2/loader.rb new file mode 100644 index 000000000..7d6d04a59 --- /dev/null +++ b/ruby/ext/digest/sha2/lib/sha2/loader.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +require 'digest/sha2.so' diff --git a/ruby/ext/digest/sha2/sha2.c b/ruby/ext/digest/sha2/sha2.c index c86eab37a..e7d7b15c5 100644 --- a/ruby/ext/digest/sha2/sha2.c +++ b/ruby/ext/digest/sha2/sha2.c @@ -94,7 +94,7 @@ /* * Define the followingsha2_* types to types of the correct length on - * the native archtecture. Most BSD systems and Linux define u_intXX_t + * the native architecture. Most BSD systems and Linux define u_intXX_t * types. Machines with very recent ANSI C headers, can use the * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H * during compile or in the sha.h header file. @@ -575,7 +575,7 @@ void SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) { usedspace = freespace = 0; } -int SHA256_Final(sha2_byte digest[], SHA256_CTX* context) { +int SHA256_Final(sha2_byte digest[SHA256_DIGEST_LENGTH], SHA256_CTX* context) { sha2_word32 *d = (sha2_word32*)digest; unsigned int usedspace; @@ -640,7 +640,7 @@ int SHA256_Final(sha2_byte digest[], SHA256_CTX* context) { return 1; } -char *SHA256_End(SHA256_CTX* context, char buffer[]) { +char *SHA256_End(SHA256_CTX* context, char buffer[SHA256_DIGEST_STRING_LENGTH]) { sha2_byte digest[SHA256_DIGEST_LENGTH], *d = digest; int i; @@ -943,7 +943,7 @@ void SHA512_Last(SHA512_CTX* context) { SHA512_Transform(context, (sha2_word64*)context->buffer); } -int SHA512_Final(sha2_byte digest[], SHA512_CTX* context) { +int SHA512_Final(sha2_byte digest[SHA512_DIGEST_LENGTH], SHA512_CTX* context) { sha2_word64 *d = (sha2_word64*)digest; /* Sanity check: */ @@ -973,7 +973,7 @@ int SHA512_Final(sha2_byte digest[], SHA512_CTX* context) { return 1; } -char *SHA512_End(SHA512_CTX* context, char buffer[]) { +char *SHA512_End(SHA512_CTX* context, char buffer[SHA512_DIGEST_STRING_LENGTH]) { sha2_byte digest[SHA512_DIGEST_LENGTH], *d = digest; int i; @@ -1019,7 +1019,7 @@ void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) { SHA512_Update((SHA512_CTX*)context, data, len); } -int SHA384_Final(sha2_byte digest[], SHA384_CTX* context) { +int SHA384_Final(sha2_byte digest[SHA384_DIGEST_LENGTH], SHA384_CTX* context) { sha2_word64 *d = (sha2_word64*)digest; /* Sanity check: */ @@ -1049,7 +1049,7 @@ int SHA384_Final(sha2_byte digest[], SHA384_CTX* context) { return 1; } -char *SHA384_End(SHA384_CTX* context, char buffer[]) { +char *SHA384_End(SHA384_CTX* context, char buffer[SHA384_DIGEST_STRING_LENGTH]) { sha2_byte digest[SHA384_DIGEST_LENGTH], *d = digest; int i; diff --git a/ruby/ext/digest/sha2/sha2init.c b/ruby/ext/digest/sha2/sha2init.c index 7d211784a..6ed275eb7 100644 --- a/ruby/ext/digest/sha2/sha2init.c +++ b/ruby/ext/digest/sha2/sha2init.c @@ -3,9 +3,7 @@ #include #include "../digest.h" -#if defined(SHA2_USE_OPENSSL) -#include "sha2ossl.h" -#elif defined(SHA2_USE_COMMONDIGEST) +#if defined(SHA2_USE_COMMONDIGEST) #include "sha2cc.h" #else #include "sha2.h" @@ -49,9 +47,7 @@ Init_sha2(void) cDigest_SHA##bitlen = rb_define_class_under(mDigest, "SHA" #bitlen, cDigest_Base); \ \ rb_ivar_set(cDigest_SHA##bitlen, id_metadata, \ - Data_Wrap_Struct(0, 0, 0, (void *)&sha##bitlen)); + rb_digest_make_metadata(&sha##bitlen)); -#undef RUBY_UNTYPED_DATA_WARNING -#define RUBY_UNTYPED_DATA_WARNING 0 FOREACH_BITLEN(DEFINE_ALGO_CLASS) } diff --git a/ruby/ext/digest/sha2/sha2ossl.h b/ruby/ext/digest/sha2/sha2ossl.h deleted file mode 100644 index 8dd053010..000000000 --- a/ruby/ext/digest/sha2/sha2ossl.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef SHA2OSSL_H_INCLUDED -#define SHA2OSSL_H_INCLUDED - -#include -#include - -#define SHA256_BLOCK_LENGTH SHA256_CBLOCK -#define SHA384_BLOCK_LENGTH SHA512_CBLOCK -#define SHA512_BLOCK_LENGTH SHA512_CBLOCK - -#ifndef __DragonFly__ -#define SHA384_Final SHA512_Final -#endif - -typedef SHA512_CTX SHA384_CTX; - -#undef SHA256_Finish -#undef SHA384_Finish -#undef SHA512_Finish -#define SHA256_Finish rb_digest_SHA256_finish -#define SHA384_Finish rb_digest_SHA384_finish -#define SHA512_Finish rb_digest_SHA512_finish -static DEFINE_FINISH_FUNC_FROM_FINAL(SHA256) -static DEFINE_FINISH_FUNC_FROM_FINAL(SHA384) -static DEFINE_FINISH_FUNC_FROM_FINAL(SHA512) - -#endif diff --git a/ruby/ext/etc/depend b/ruby/ext/etc/depend index 99e812c7e..9c2de2ba9 100644 --- a/ruby/ext/etc/depend +++ b/ruby/ext/etc/depend @@ -7,10 +7,167 @@ etc.o: $(RUBY_EXTCONF_H) etc.o: $(arch_hdrdir)/ruby/config.h etc.o: $(hdrdir)/ruby.h etc.o: $(hdrdir)/ruby/assert.h +etc.o: $(hdrdir)/ruby/atomic.h etc.o: $(hdrdir)/ruby/backward.h +etc.o: $(hdrdir)/ruby/backward/2/assume.h +etc.o: $(hdrdir)/ruby/backward/2/attributes.h +etc.o: $(hdrdir)/ruby/backward/2/bool.h +etc.o: $(hdrdir)/ruby/backward/2/inttypes.h +etc.o: $(hdrdir)/ruby/backward/2/limits.h +etc.o: $(hdrdir)/ruby/backward/2/long_long.h +etc.o: $(hdrdir)/ruby/backward/2/stdalign.h +etc.o: $(hdrdir)/ruby/backward/2/stdarg.h etc.o: $(hdrdir)/ruby/defines.h etc.o: $(hdrdir)/ruby/encoding.h etc.o: $(hdrdir)/ruby/intern.h +etc.o: $(hdrdir)/ruby/internal/anyargs.h +etc.o: $(hdrdir)/ruby/internal/arithmetic.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/char.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/double.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/int.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/long.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/short.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +etc.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +etc.o: $(hdrdir)/ruby/internal/assume.h +etc.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +etc.o: $(hdrdir)/ruby/internal/attr/artificial.h +etc.o: $(hdrdir)/ruby/internal/attr/cold.h +etc.o: $(hdrdir)/ruby/internal/attr/const.h +etc.o: $(hdrdir)/ruby/internal/attr/constexpr.h +etc.o: $(hdrdir)/ruby/internal/attr/deprecated.h +etc.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +etc.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +etc.o: $(hdrdir)/ruby/internal/attr/error.h +etc.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +etc.o: $(hdrdir)/ruby/internal/attr/forceinline.h +etc.o: $(hdrdir)/ruby/internal/attr/format.h +etc.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +etc.o: $(hdrdir)/ruby/internal/attr/noalias.h +etc.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +etc.o: $(hdrdir)/ruby/internal/attr/noexcept.h +etc.o: $(hdrdir)/ruby/internal/attr/noinline.h +etc.o: $(hdrdir)/ruby/internal/attr/nonnull.h +etc.o: $(hdrdir)/ruby/internal/attr/noreturn.h +etc.o: $(hdrdir)/ruby/internal/attr/pure.h +etc.o: $(hdrdir)/ruby/internal/attr/restrict.h +etc.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +etc.o: $(hdrdir)/ruby/internal/attr/warning.h +etc.o: $(hdrdir)/ruby/internal/attr/weakref.h +etc.o: $(hdrdir)/ruby/internal/cast.h +etc.o: $(hdrdir)/ruby/internal/compiler_is.h +etc.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +etc.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +etc.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +etc.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +etc.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +etc.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +etc.o: $(hdrdir)/ruby/internal/compiler_since.h +etc.o: $(hdrdir)/ruby/internal/config.h +etc.o: $(hdrdir)/ruby/internal/constant_p.h +etc.o: $(hdrdir)/ruby/internal/core.h +etc.o: $(hdrdir)/ruby/internal/core/rarray.h +etc.o: $(hdrdir)/ruby/internal/core/rbasic.h +etc.o: $(hdrdir)/ruby/internal/core/rbignum.h +etc.o: $(hdrdir)/ruby/internal/core/rclass.h +etc.o: $(hdrdir)/ruby/internal/core/rdata.h +etc.o: $(hdrdir)/ruby/internal/core/rfile.h +etc.o: $(hdrdir)/ruby/internal/core/rhash.h +etc.o: $(hdrdir)/ruby/internal/core/robject.h +etc.o: $(hdrdir)/ruby/internal/core/rregexp.h +etc.o: $(hdrdir)/ruby/internal/core/rstring.h +etc.o: $(hdrdir)/ruby/internal/core/rstruct.h +etc.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +etc.o: $(hdrdir)/ruby/internal/ctype.h +etc.o: $(hdrdir)/ruby/internal/dllexport.h +etc.o: $(hdrdir)/ruby/internal/dosish.h +etc.o: $(hdrdir)/ruby/internal/encoding/coderange.h +etc.o: $(hdrdir)/ruby/internal/encoding/ctype.h +etc.o: $(hdrdir)/ruby/internal/encoding/encoding.h +etc.o: $(hdrdir)/ruby/internal/encoding/pathname.h +etc.o: $(hdrdir)/ruby/internal/encoding/re.h +etc.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +etc.o: $(hdrdir)/ruby/internal/encoding/string.h +etc.o: $(hdrdir)/ruby/internal/encoding/symbol.h +etc.o: $(hdrdir)/ruby/internal/encoding/transcode.h +etc.o: $(hdrdir)/ruby/internal/error.h +etc.o: $(hdrdir)/ruby/internal/eval.h +etc.o: $(hdrdir)/ruby/internal/event.h +etc.o: $(hdrdir)/ruby/internal/fl_type.h +etc.o: $(hdrdir)/ruby/internal/gc.h +etc.o: $(hdrdir)/ruby/internal/glob.h +etc.o: $(hdrdir)/ruby/internal/globals.h +etc.o: $(hdrdir)/ruby/internal/has/attribute.h +etc.o: $(hdrdir)/ruby/internal/has/builtin.h +etc.o: $(hdrdir)/ruby/internal/has/c_attribute.h +etc.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +etc.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +etc.o: $(hdrdir)/ruby/internal/has/extension.h +etc.o: $(hdrdir)/ruby/internal/has/feature.h +etc.o: $(hdrdir)/ruby/internal/has/warning.h +etc.o: $(hdrdir)/ruby/internal/intern/array.h +etc.o: $(hdrdir)/ruby/internal/intern/bignum.h +etc.o: $(hdrdir)/ruby/internal/intern/class.h +etc.o: $(hdrdir)/ruby/internal/intern/compar.h +etc.o: $(hdrdir)/ruby/internal/intern/complex.h +etc.o: $(hdrdir)/ruby/internal/intern/cont.h +etc.o: $(hdrdir)/ruby/internal/intern/dir.h +etc.o: $(hdrdir)/ruby/internal/intern/enum.h +etc.o: $(hdrdir)/ruby/internal/intern/enumerator.h +etc.o: $(hdrdir)/ruby/internal/intern/error.h +etc.o: $(hdrdir)/ruby/internal/intern/eval.h +etc.o: $(hdrdir)/ruby/internal/intern/file.h +etc.o: $(hdrdir)/ruby/internal/intern/gc.h +etc.o: $(hdrdir)/ruby/internal/intern/hash.h +etc.o: $(hdrdir)/ruby/internal/intern/io.h +etc.o: $(hdrdir)/ruby/internal/intern/load.h +etc.o: $(hdrdir)/ruby/internal/intern/marshal.h +etc.o: $(hdrdir)/ruby/internal/intern/numeric.h +etc.o: $(hdrdir)/ruby/internal/intern/object.h +etc.o: $(hdrdir)/ruby/internal/intern/parse.h +etc.o: $(hdrdir)/ruby/internal/intern/proc.h +etc.o: $(hdrdir)/ruby/internal/intern/process.h +etc.o: $(hdrdir)/ruby/internal/intern/random.h +etc.o: $(hdrdir)/ruby/internal/intern/range.h +etc.o: $(hdrdir)/ruby/internal/intern/rational.h +etc.o: $(hdrdir)/ruby/internal/intern/re.h +etc.o: $(hdrdir)/ruby/internal/intern/ruby.h +etc.o: $(hdrdir)/ruby/internal/intern/select.h +etc.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +etc.o: $(hdrdir)/ruby/internal/intern/signal.h +etc.o: $(hdrdir)/ruby/internal/intern/sprintf.h +etc.o: $(hdrdir)/ruby/internal/intern/string.h +etc.o: $(hdrdir)/ruby/internal/intern/struct.h +etc.o: $(hdrdir)/ruby/internal/intern/thread.h +etc.o: $(hdrdir)/ruby/internal/intern/time.h +etc.o: $(hdrdir)/ruby/internal/intern/variable.h +etc.o: $(hdrdir)/ruby/internal/intern/vm.h +etc.o: $(hdrdir)/ruby/internal/interpreter.h +etc.o: $(hdrdir)/ruby/internal/iterator.h +etc.o: $(hdrdir)/ruby/internal/memory.h +etc.o: $(hdrdir)/ruby/internal/method.h +etc.o: $(hdrdir)/ruby/internal/module.h +etc.o: $(hdrdir)/ruby/internal/newobj.h +etc.o: $(hdrdir)/ruby/internal/rgengc.h +etc.o: $(hdrdir)/ruby/internal/scan_args.h +etc.o: $(hdrdir)/ruby/internal/special_consts.h +etc.o: $(hdrdir)/ruby/internal/static_assert.h +etc.o: $(hdrdir)/ruby/internal/stdalign.h +etc.o: $(hdrdir)/ruby/internal/stdbool.h +etc.o: $(hdrdir)/ruby/internal/symbol.h +etc.o: $(hdrdir)/ruby/internal/value.h +etc.o: $(hdrdir)/ruby/internal/value_type.h +etc.o: $(hdrdir)/ruby/internal/variable.h +etc.o: $(hdrdir)/ruby/internal/warning_push.h +etc.o: $(hdrdir)/ruby/internal/xmalloc.h etc.o: $(hdrdir)/ruby/io.h etc.o: $(hdrdir)/ruby/missing.h etc.o: $(hdrdir)/ruby/onigmo.h diff --git a/ruby/ext/etc/etc.c b/ruby/ext/etc/etc.c index 2f3fbb737..737d295ab 100644 --- a/ruby/ext/etc/etc.c +++ b/ruby/ext/etc/etc.c @@ -52,10 +52,33 @@ char *getenv(); #endif char *getlogin(); -#define RUBY_ETC_VERSION "1.1.0" +#define RUBY_ETC_VERSION "1.3.0" + +#ifdef HAVE_RB_DEPRECATE_CONSTANT +void rb_deprecate_constant(VALUE mod, const char *name); +#else +# define rb_deprecate_constant(mod,name) ((void)(mod),(void)(name)) +#endif #include "constdefs.h" +#ifdef HAVE_RUBY_ATOMIC_H +# include "ruby/atomic.h" +#else +typedef int rb_atomic_t; +# define RUBY_ATOMIC_CAS(var, oldval, newval) \ + ((var) == (oldval) ? ((var) = (newval), (oldval)) : (var)) +# define RUBY_ATOMIC_EXCHANGE(var, newval) \ + atomic_exchange(&var, newval) +static inline rb_atomic_t +atomic_exchange(volatile rb_atomic_t *var, rb_atomic_t newval) +{ + rb_atomic_t oldval = *var; + *var = newval; + return oldval; +} +#endif + /* call-seq: * getlogin -> String * @@ -119,6 +142,12 @@ safe_setup_filesystem_str(const char *str) #endif #ifdef HAVE_GETPWENT +# ifdef __APPLE__ +# define PW_TIME2VAL(t) INT2NUM((int)(t)) +# else +# define PW_TIME2VAL(t) TIMET2NUM(t) +# endif + static VALUE setup_passwd(struct passwd *pwd) { @@ -136,7 +165,7 @@ setup_passwd(struct passwd *pwd) safe_setup_filesystem_str(pwd->pw_dir), safe_setup_filesystem_str(pwd->pw_shell), #ifdef HAVE_STRUCT_PASSWD_PW_CHANGE - INT2NUM(pwd->pw_change), + PW_TIME2VAL(pwd->pw_change), #endif #ifdef HAVE_STRUCT_PASSWD_PW_QUOTA INT2NUM(pwd->pw_quota), @@ -151,7 +180,7 @@ setup_passwd(struct passwd *pwd) safe_setup_locale_str(pwd->pw_comment), #endif #ifdef HAVE_STRUCT_PASSWD_PW_EXPIRE - INT2NUM(pwd->pw_expire), + PW_TIME2VAL(pwd->pw_expire), #endif 0 /*dummy*/ ); @@ -228,12 +257,14 @@ etc_getpwnam(VALUE obj, VALUE nam) } #ifdef HAVE_GETPWENT -static int passwd_blocking = 0; +static rb_atomic_t passwd_blocking; static VALUE passwd_ensure(VALUE _) { endpwent(); - passwd_blocking = (int)Qfalse; + if (RUBY_ATOMIC_EXCHANGE(passwd_blocking, 0) != 1) { + rb_raise(rb_eRuntimeError, "unexpected passwd_blocking"); + } return Qnil; } @@ -252,10 +283,9 @@ passwd_iterate(VALUE _) static void each_passwd(void) { - if (passwd_blocking) { + if (RUBY_ATOMIC_CAS(passwd_blocking, 0, 1)) { rb_raise(rb_eRuntimeError, "parallel passwd iteration"); } - passwd_blocking = (int)Qtrue; rb_ensure(passwd_iterate, 0, passwd_ensure, 0); } #endif @@ -471,12 +501,14 @@ etc_getgrnam(VALUE obj, VALUE nam) } #ifdef HAVE_GETGRENT -static int group_blocking = 0; +static rb_atomic_t group_blocking; static VALUE group_ensure(VALUE _) { endgrent(); - group_blocking = (int)Qfalse; + if (RUBY_ATOMIC_EXCHANGE(group_blocking, 0) != 1) { + rb_raise(rb_eRuntimeError, "unexpected group_blocking"); + } return Qnil; } @@ -496,10 +528,9 @@ group_iterate(VALUE _) static void each_group(void) { - if (group_blocking) { + if (RUBY_ATOMIC_CAS(group_blocking, 0, 1)) { rb_raise(rb_eRuntimeError, "parallel group iteration"); } - group_blocking = (int)Qtrue; rb_ensure(group_iterate, 0, group_ensure, 0); } #endif @@ -926,11 +957,13 @@ io_pathconf(VALUE io, VALUE arg) static int etc_nprocessors_affin(void) { - cpu_set_t *cpuset; + cpu_set_t *cpuset, cpuset_buff[1024 / sizeof(cpu_set_t)]; size_t size; int ret; int n; + CPU_ZERO_S(sizeof(cpuset_buff), cpuset_buff); + /* * XXX: * man page says CPU_ALLOC takes number of cpus. But it is not accurate @@ -949,13 +982,12 @@ etc_nprocessors_affin(void) */ for (n=64; n <= 16384; n *= 2) { size = CPU_ALLOC_SIZE(n); - if (size >= 1024) { + if (size >= sizeof(cpuset_buff)) { cpuset = xcalloc(1, size); if (!cpuset) return -1; } else { - cpuset = alloca(size); - CPU_ZERO_S(size, cpuset); + cpuset = cpuset_buff; } ret = sched_getaffinity(0, size, cpuset); @@ -964,10 +996,10 @@ etc_nprocessors_affin(void) ret = CPU_COUNT_S(size, cpuset); } - if (size >= 1024) { + if (size >= sizeof(cpuset_buff)) { xfree(cpuset); } - if (ret > 0) { + if (ret > 0 || errno != EINVAL) { return ret; } } @@ -1064,6 +1096,9 @@ Init_etc(void) { VALUE mEtc; + #ifdef HAVE_RB_EXT_RACTOR_SAFE + RB_EXT_RACTOR_SAFE(true); + #endif mEtc = rb_define_module("Etc"); rb_define_const(mEtc, "VERSION", rb_str_new_cstr(RUBY_ETC_VERSION)); init_constants(mEtc); @@ -1165,9 +1200,9 @@ Init_etc(void) rb_define_const(mEtc, "Passwd", sPasswd); #endif rb_define_const(rb_cStruct, "Passwd", sPasswd); /* deprecated name */ + rb_deprecate_constant(rb_cStruct, "Passwd"); rb_extend_object(sPasswd, rb_mEnumerable); rb_define_singleton_method(sPasswd, "each", etc_each_passwd, 0); - #ifdef HAVE_GETGRENT sGroup = rb_struct_define_under(mEtc, "Group", "name", #ifdef HAVE_STRUCT_GROUP_GR_PASSWD @@ -1200,6 +1235,7 @@ Init_etc(void) rb_define_const(mEtc, "Group", sGroup); #endif rb_define_const(rb_cStruct, "Group", sGroup); /* deprecated name */ + rb_deprecate_constant(rb_cStruct, "Group"); rb_extend_object(sGroup, rb_mEnumerable); rb_define_singleton_method(sGroup, "each", etc_each_group, 0); #endif diff --git a/ruby/ext/etc/etc.gemspec b/ruby/ext/etc/etc.gemspec index f28016925..7d687e3b9 100644 --- a/ruby/ext/etc/etc.gemspec +++ b/ruby/ext/etc/etc.gemspec @@ -20,7 +20,7 @@ Gem::Specification.new do |spec| spec.summary = %q{Provides access to information typically stored in UNIX /etc directory.} spec.description = spec.summary spec.homepage = "https://github.com/ruby/etc" - spec.license = "BSD-2-Clause" + spec.licenses = ["Ruby", "BSD-2-Clause"] spec.files = %w[ LICENSE.txt @@ -29,7 +29,6 @@ Gem::Specification.new do |spec| ext/etc/etc.c ext/etc/extconf.rb ext/etc/mkconstants.rb - stub/etc.rb test/etc/test_etc.rb ] spec.bindir = "exe" diff --git a/ruby/ext/etc/extconf.rb b/ruby/ext/etc/extconf.rb index 435fbe7f3..6e7810a5e 100644 --- a/ruby/ext/etc/extconf.rb +++ b/ruby/ext/etc/extconf.rb @@ -47,6 +47,8 @@ %x[#{RbConfig.ruby} #{srcdir}/mkconstants.rb -o #{srcdir}/constdefs.h] end +have_func('rb_deprecate_constant(Qnil, "None")') + $distcleanfiles << "constdefs.h" create_makefile("etc") diff --git a/ruby/ext/extmk.rb b/ruby/ext/extmk.rb index 80a0a1208..4a087f294 100755 --- a/ruby/ext/extmk.rb +++ b/ruby/ext/extmk.rb @@ -647,6 +647,7 @@ def initialize(src) begin atomic_write_open($command_output) do |mf| mf.puts "V = 0" + mf.puts "V0 = $(V:0=)" mf.puts "Q1 = $(V:1=)" mf.puts "Q = $(Q1:0=@)" mf.puts "ECHO1 = $(V:1=@:)" diff --git a/ruby/ext/fcntl/depend b/ruby/ext/fcntl/depend index 60d6be6b8..46a9e7817 100644 --- a/ruby/ext/fcntl/depend +++ b/ruby/ext/fcntl/depend @@ -4,8 +4,155 @@ fcntl.o: $(arch_hdrdir)/ruby/config.h fcntl.o: $(hdrdir)/ruby.h fcntl.o: $(hdrdir)/ruby/assert.h fcntl.o: $(hdrdir)/ruby/backward.h +fcntl.o: $(hdrdir)/ruby/backward/2/assume.h +fcntl.o: $(hdrdir)/ruby/backward/2/attributes.h +fcntl.o: $(hdrdir)/ruby/backward/2/bool.h +fcntl.o: $(hdrdir)/ruby/backward/2/inttypes.h +fcntl.o: $(hdrdir)/ruby/backward/2/limits.h +fcntl.o: $(hdrdir)/ruby/backward/2/long_long.h +fcntl.o: $(hdrdir)/ruby/backward/2/stdalign.h +fcntl.o: $(hdrdir)/ruby/backward/2/stdarg.h fcntl.o: $(hdrdir)/ruby/defines.h fcntl.o: $(hdrdir)/ruby/intern.h +fcntl.o: $(hdrdir)/ruby/internal/anyargs.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/char.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/double.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/int.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/long.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/short.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +fcntl.o: $(hdrdir)/ruby/internal/assume.h +fcntl.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +fcntl.o: $(hdrdir)/ruby/internal/attr/artificial.h +fcntl.o: $(hdrdir)/ruby/internal/attr/cold.h +fcntl.o: $(hdrdir)/ruby/internal/attr/const.h +fcntl.o: $(hdrdir)/ruby/internal/attr/constexpr.h +fcntl.o: $(hdrdir)/ruby/internal/attr/deprecated.h +fcntl.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +fcntl.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +fcntl.o: $(hdrdir)/ruby/internal/attr/error.h +fcntl.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +fcntl.o: $(hdrdir)/ruby/internal/attr/forceinline.h +fcntl.o: $(hdrdir)/ruby/internal/attr/format.h +fcntl.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +fcntl.o: $(hdrdir)/ruby/internal/attr/noalias.h +fcntl.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +fcntl.o: $(hdrdir)/ruby/internal/attr/noexcept.h +fcntl.o: $(hdrdir)/ruby/internal/attr/noinline.h +fcntl.o: $(hdrdir)/ruby/internal/attr/nonnull.h +fcntl.o: $(hdrdir)/ruby/internal/attr/noreturn.h +fcntl.o: $(hdrdir)/ruby/internal/attr/pure.h +fcntl.o: $(hdrdir)/ruby/internal/attr/restrict.h +fcntl.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +fcntl.o: $(hdrdir)/ruby/internal/attr/warning.h +fcntl.o: $(hdrdir)/ruby/internal/attr/weakref.h +fcntl.o: $(hdrdir)/ruby/internal/cast.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_since.h +fcntl.o: $(hdrdir)/ruby/internal/config.h +fcntl.o: $(hdrdir)/ruby/internal/constant_p.h +fcntl.o: $(hdrdir)/ruby/internal/core.h +fcntl.o: $(hdrdir)/ruby/internal/core/rarray.h +fcntl.o: $(hdrdir)/ruby/internal/core/rbasic.h +fcntl.o: $(hdrdir)/ruby/internal/core/rbignum.h +fcntl.o: $(hdrdir)/ruby/internal/core/rclass.h +fcntl.o: $(hdrdir)/ruby/internal/core/rdata.h +fcntl.o: $(hdrdir)/ruby/internal/core/rfile.h +fcntl.o: $(hdrdir)/ruby/internal/core/rhash.h +fcntl.o: $(hdrdir)/ruby/internal/core/robject.h +fcntl.o: $(hdrdir)/ruby/internal/core/rregexp.h +fcntl.o: $(hdrdir)/ruby/internal/core/rstring.h +fcntl.o: $(hdrdir)/ruby/internal/core/rstruct.h +fcntl.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +fcntl.o: $(hdrdir)/ruby/internal/ctype.h +fcntl.o: $(hdrdir)/ruby/internal/dllexport.h +fcntl.o: $(hdrdir)/ruby/internal/dosish.h +fcntl.o: $(hdrdir)/ruby/internal/error.h +fcntl.o: $(hdrdir)/ruby/internal/eval.h +fcntl.o: $(hdrdir)/ruby/internal/event.h +fcntl.o: $(hdrdir)/ruby/internal/fl_type.h +fcntl.o: $(hdrdir)/ruby/internal/gc.h +fcntl.o: $(hdrdir)/ruby/internal/glob.h +fcntl.o: $(hdrdir)/ruby/internal/globals.h +fcntl.o: $(hdrdir)/ruby/internal/has/attribute.h +fcntl.o: $(hdrdir)/ruby/internal/has/builtin.h +fcntl.o: $(hdrdir)/ruby/internal/has/c_attribute.h +fcntl.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +fcntl.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +fcntl.o: $(hdrdir)/ruby/internal/has/extension.h +fcntl.o: $(hdrdir)/ruby/internal/has/feature.h +fcntl.o: $(hdrdir)/ruby/internal/has/warning.h +fcntl.o: $(hdrdir)/ruby/internal/intern/array.h +fcntl.o: $(hdrdir)/ruby/internal/intern/bignum.h +fcntl.o: $(hdrdir)/ruby/internal/intern/class.h +fcntl.o: $(hdrdir)/ruby/internal/intern/compar.h +fcntl.o: $(hdrdir)/ruby/internal/intern/complex.h +fcntl.o: $(hdrdir)/ruby/internal/intern/cont.h +fcntl.o: $(hdrdir)/ruby/internal/intern/dir.h +fcntl.o: $(hdrdir)/ruby/internal/intern/enum.h +fcntl.o: $(hdrdir)/ruby/internal/intern/enumerator.h +fcntl.o: $(hdrdir)/ruby/internal/intern/error.h +fcntl.o: $(hdrdir)/ruby/internal/intern/eval.h +fcntl.o: $(hdrdir)/ruby/internal/intern/file.h +fcntl.o: $(hdrdir)/ruby/internal/intern/gc.h +fcntl.o: $(hdrdir)/ruby/internal/intern/hash.h +fcntl.o: $(hdrdir)/ruby/internal/intern/io.h +fcntl.o: $(hdrdir)/ruby/internal/intern/load.h +fcntl.o: $(hdrdir)/ruby/internal/intern/marshal.h +fcntl.o: $(hdrdir)/ruby/internal/intern/numeric.h +fcntl.o: $(hdrdir)/ruby/internal/intern/object.h +fcntl.o: $(hdrdir)/ruby/internal/intern/parse.h +fcntl.o: $(hdrdir)/ruby/internal/intern/proc.h +fcntl.o: $(hdrdir)/ruby/internal/intern/process.h +fcntl.o: $(hdrdir)/ruby/internal/intern/random.h +fcntl.o: $(hdrdir)/ruby/internal/intern/range.h +fcntl.o: $(hdrdir)/ruby/internal/intern/rational.h +fcntl.o: $(hdrdir)/ruby/internal/intern/re.h +fcntl.o: $(hdrdir)/ruby/internal/intern/ruby.h +fcntl.o: $(hdrdir)/ruby/internal/intern/select.h +fcntl.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +fcntl.o: $(hdrdir)/ruby/internal/intern/signal.h +fcntl.o: $(hdrdir)/ruby/internal/intern/sprintf.h +fcntl.o: $(hdrdir)/ruby/internal/intern/string.h +fcntl.o: $(hdrdir)/ruby/internal/intern/struct.h +fcntl.o: $(hdrdir)/ruby/internal/intern/thread.h +fcntl.o: $(hdrdir)/ruby/internal/intern/time.h +fcntl.o: $(hdrdir)/ruby/internal/intern/variable.h +fcntl.o: $(hdrdir)/ruby/internal/intern/vm.h +fcntl.o: $(hdrdir)/ruby/internal/interpreter.h +fcntl.o: $(hdrdir)/ruby/internal/iterator.h +fcntl.o: $(hdrdir)/ruby/internal/memory.h +fcntl.o: $(hdrdir)/ruby/internal/method.h +fcntl.o: $(hdrdir)/ruby/internal/module.h +fcntl.o: $(hdrdir)/ruby/internal/newobj.h +fcntl.o: $(hdrdir)/ruby/internal/rgengc.h +fcntl.o: $(hdrdir)/ruby/internal/scan_args.h +fcntl.o: $(hdrdir)/ruby/internal/special_consts.h +fcntl.o: $(hdrdir)/ruby/internal/static_assert.h +fcntl.o: $(hdrdir)/ruby/internal/stdalign.h +fcntl.o: $(hdrdir)/ruby/internal/stdbool.h +fcntl.o: $(hdrdir)/ruby/internal/symbol.h +fcntl.o: $(hdrdir)/ruby/internal/value.h +fcntl.o: $(hdrdir)/ruby/internal/value_type.h +fcntl.o: $(hdrdir)/ruby/internal/variable.h +fcntl.o: $(hdrdir)/ruby/internal/warning_push.h +fcntl.o: $(hdrdir)/ruby/internal/xmalloc.h fcntl.o: $(hdrdir)/ruby/missing.h fcntl.o: $(hdrdir)/ruby/ruby.h fcntl.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/fcntl/fcntl.c b/ruby/ext/fcntl/fcntl.c index c93694c43..ee42d2abe 100644 --- a/ruby/ext/fcntl/fcntl.c +++ b/ruby/ext/fcntl/fcntl.c @@ -159,6 +159,20 @@ Init_fcntl(void) */ rb_define_const(mFcntl, "F_WRLCK", INT2NUM(F_WRLCK)); #endif +#ifdef F_SETPIPE_SZ + /* Document-const: F_SETPIPE_SZ + * + * Change the capacity of the pipe referred to by fd to be at least arg bytes. + */ + rb_define_const(mFcntl, "F_SETPIPE_SZ", INT2NUM(F_SETPIPE_SZ)); +#endif +#ifdef F_GETPIPE_SZ + /* Document-const: F_GETPIPE_SZ + * + * Return (as the function result) the capacity of the pipe referred to by fd. + */ + rb_define_const(mFcntl, "F_GETPIPE_SZ", INT2NUM(F_GETPIPE_SZ)); +#endif #ifdef O_CREAT /* Document-const: O_CREAT * diff --git a/ruby/ext/fcntl/fcntl.gemspec b/ruby/ext/fcntl/fcntl.gemspec index 0e3194fbd..048e101aa 100644 --- a/ruby/ext/fcntl/fcntl.gemspec +++ b/ruby/ext/fcntl/fcntl.gemspec @@ -3,14 +3,14 @@ Gem::Specification.new do |spec| spec.name = "fcntl" - spec.version = "1.0.0" + spec.version = "1.0.1" spec.authors = ["Yukihiro Matsumoto"] spec.email = ["matz@ruby-lang.org"] spec.summary = "Loads constants defined in the OS fcntl.h C header file" spec.description = "Loads constants defined in the OS fcntl.h C header file" spec.homepage = "https://github.com/ruby/fcntl" - spec.license = "BSD-2-Clause" + spec.licenses = ["Ruby", "BSD-2-Clause"] spec.files = ["ext/fcntl/extconf.rb", "ext/fcntl/fcntl.c"] spec.bindir = "exe" @@ -18,8 +18,4 @@ Gem::Specification.new do |spec| spec.require_paths = ["lib"] spec.extensions = "ext/fcntl/extconf.rb" spec.required_ruby_version = ">= 2.3.0" - - spec.add_development_dependency "bundler", "~> 1.14" - spec.add_development_dependency "rake", "~> 12" - spec.add_development_dependency "rake-compiler" end diff --git a/ruby/ext/fiber/depend b/ruby/ext/fiber/depend deleted file mode 100644 index 675263b95..000000000 --- a/ruby/ext/fiber/depend +++ /dev/null @@ -1,3 +0,0 @@ -# AUTOGENERATED DEPENDENCIES START -fiber.o: fiber.c -# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/fiber/extconf.rb b/ruby/ext/fiber/extconf.rb deleted file mode 100644 index 7f11e0daf..000000000 --- a/ruby/ext/fiber/extconf.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: false -require 'mkmf' -create_makefile('fiber') - diff --git a/ruby/ext/fiber/fiber.c b/ruby/ext/fiber/fiber.c deleted file mode 100644 index 12fcaad73..000000000 --- a/ruby/ext/fiber/fiber.c +++ /dev/null @@ -1,8 +0,0 @@ - -void ruby_Init_Fiber_as_Coroutine(void); - -void -Init_fiber(void) -{ - ruby_Init_Fiber_as_Coroutine(); -} diff --git a/ruby/ext/fiddle/closure.c b/ruby/ext/fiddle/closure.c index 1a80b2b02..3679e5c9a 100644 --- a/ruby/ext/fiddle/closure.c +++ b/ruby/ext/fiddle/closure.c @@ -13,11 +13,12 @@ typedef struct { ffi_type **argv; } fiddle_closure; -#if defined(USE_FFI_CLOSURE_ALLOC) -#elif defined(__OpenBSD__) || defined(__APPLE__) || defined(__linux__) +#if defined(__OpenBSD__) # define USE_FFI_CLOSURE_ALLOC 0 -#elif defined(RUBY_LIBFFI_MODVERSION) && RUBY_LIBFFI_MODVERSION < 3000005 && \ - (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_AMD64)) +#endif + +#if defined(USE_FFI_CLOSURE_ALLOC) +#elif !defined(HAVE_FFI_CLOSURE_ALLOC) # define USE_FFI_CLOSURE_ALLOC 0 #else # define USE_FFI_CLOSURE_ALLOC 1 @@ -129,6 +130,10 @@ with_gvl_callback(void *ptr) rb_ary_push(params, ULL2NUM(*(unsigned LONG_LONG *)x->args[i])); break; #endif + case TYPE_CONST_STRING: + rb_ary_push(params, + rb_str_new_cstr(*((const char **)(x->args[i])))); + break; default: rb_raise(rb_eRuntimeError, "closure args: %d", type); } @@ -174,6 +179,10 @@ with_gvl_callback(void *ptr) *(unsigned LONG_LONG *)x->resp = NUM2ULL(ret); break; #endif + case TYPE_CONST_STRING: + /* Dangerous. Callback must keep reference of the String. */ + *((const char **)(x->resp)) = StringValueCStr(ret); + break; default: rb_raise(rb_eRuntimeError, "closure retval: %d", type); } @@ -220,6 +229,7 @@ initialize(int rbargc, VALUE argv[], VALUE self) { VALUE ret; VALUE args; + VALUE normalized_args; VALUE abi; fiddle_closure * cl; ffi_cif * cif; @@ -238,21 +248,26 @@ initialize(int rbargc, VALUE argv[], VALUE self) cl->argv = (ffi_type **)xcalloc(argc + 1, sizeof(ffi_type *)); + normalized_args = rb_ary_new_capa(argc); for (i = 0; i < argc; i++) { - int type = NUM2INT(RARRAY_AREF(args, i)); - cl->argv[i] = INT2FFI_TYPE(type); + VALUE arg = rb_fiddle_type_ensure(RARRAY_AREF(args, i)); + rb_ary_push(normalized_args, arg); + cl->argv[i] = rb_fiddle_int_to_ffi_type(NUM2INT(arg)); } cl->argv[argc] = NULL; + ret = rb_fiddle_type_ensure(ret); rb_iv_set(self, "@ctype", ret); - rb_iv_set(self, "@args", args); + rb_iv_set(self, "@args", normalized_args); cif = &cl->cif; pcl = cl->pcl; - result = ffi_prep_cif(cif, NUM2INT(abi), argc, - INT2FFI_TYPE(NUM2INT(ret)), - cl->argv); + result = ffi_prep_cif(cif, + NUM2INT(abi), + argc, + rb_fiddle_int_to_ffi_type(NUM2INT(ret)), + cl->argv); if (FFI_OK != result) rb_raise(rb_eRuntimeError, "error prepping CIF %d", result); diff --git a/ruby/ext/fiddle/conversions.c b/ruby/ext/fiddle/conversions.c index d40ddc1f3..6e0ce3637 100644 --- a/ruby/ext/fiddle/conversions.c +++ b/ruby/ext/fiddle/conversions.c @@ -1,7 +1,159 @@ #include +VALUE +rb_fiddle_type_ensure(VALUE type) +{ + VALUE original_type = type; + + if (!RB_SYMBOL_P(type)) { + VALUE type_string = rb_check_string_type(type); + if (!NIL_P(type_string)) { + type = rb_to_symbol(type_string); + } + } + + if (RB_SYMBOL_P(type)) { + ID type_id = rb_sym2id(type); + ID void_id; + ID voidp_id; + ID char_id; + ID short_id; + ID int_id; + ID long_id; +#ifdef TYPE_LONG_LONG + ID long_long_id; +#endif +#ifdef TYPE_INT8_T + ID int8_t_id; +#endif +#ifdef TYPE_INT16_T + ID int16_t_id; +#endif +#ifdef TYPE_INT32_T + ID int32_t_id; +#endif +#ifdef TYPE_INT64_T + ID int64_t_id; +#endif + ID float_id; + ID double_id; + ID variadic_id; + ID const_string_id; + ID size_t_id; + ID ssize_t_id; + ID ptrdiff_t_id; + ID intptr_t_id; + ID uintptr_t_id; + RUBY_CONST_ID(void_id, "void"); + RUBY_CONST_ID(voidp_id, "voidp"); + RUBY_CONST_ID(char_id, "char"); + RUBY_CONST_ID(short_id, "short"); + RUBY_CONST_ID(int_id, "int"); + RUBY_CONST_ID(long_id, "long"); +#ifdef TYPE_LONG_LONG + RUBY_CONST_ID(long_long_id, "long_long"); +#endif +#ifdef TYPE_INT8_T + RUBY_CONST_ID(int8_t_id, "int8_t"); +#endif +#ifdef TYPE_INT16_T + RUBY_CONST_ID(int16_t_id, "int16_t"); +#endif +#ifdef TYPE_INT32_T + RUBY_CONST_ID(int32_t_id, "int32_t"); +#endif +#ifdef TYPE_INT64_T + RUBY_CONST_ID(int64_t_id, "int64_t"); +#endif + RUBY_CONST_ID(float_id, "float"); + RUBY_CONST_ID(double_id, "double"); + RUBY_CONST_ID(variadic_id, "variadic"); + RUBY_CONST_ID(const_string_id, "const_string"); + RUBY_CONST_ID(size_t_id, "size_t"); + RUBY_CONST_ID(ssize_t_id, "ssize_t"); + RUBY_CONST_ID(ptrdiff_t_id, "ptrdiff_t"); + RUBY_CONST_ID(intptr_t_id, "intptr_t"); + RUBY_CONST_ID(uintptr_t_id, "uintptr_t"); + if (type_id == void_id) { + return INT2NUM(TYPE_VOID); + } + else if (type_id == voidp_id) { + return INT2NUM(TYPE_VOIDP); + } + else if (type_id == char_id) { + return INT2NUM(TYPE_CHAR); + } + else if (type_id == short_id) { + return INT2NUM(TYPE_SHORT); + } + else if (type_id == int_id) { + return INT2NUM(TYPE_INT); + } + else if (type_id == long_id) { + return INT2NUM(TYPE_LONG); + } +#ifdef TYPE_LONG_LONG + else if (type_id == long_long_id) { + return INT2NUM(TYPE_LONG_LONG); + } +#endif +#ifdef TYPE_INT8_T + else if (type_id == int8_t_id) { + return INT2NUM(TYPE_INT8_T); + } +#endif +#ifdef TYPE_INT16_T + else if (type_id == int16_t_id) { + return INT2NUM(TYPE_INT16_T); + } +#endif +#ifdef TYPE_INT32_T + else if (type_id == int32_t_id) { + return INT2NUM(TYPE_INT32_T); + } +#endif +#ifdef TYPE_INT64_T + else if (type_id == int64_t_id) { + return INT2NUM(TYPE_INT64_T); + } +#endif + else if (type_id == float_id) { + return INT2NUM(TYPE_FLOAT); + } + else if (type_id == double_id) { + return INT2NUM(TYPE_DOUBLE); + } + else if (type_id == variadic_id) { + return INT2NUM(TYPE_VARIADIC); + } + else if (type_id == const_string_id) { + return INT2NUM(TYPE_CONST_STRING); + } + else if (type_id == size_t_id) { + return INT2NUM(TYPE_SIZE_T); + } + else if (type_id == ssize_t_id) { + return INT2NUM(TYPE_SSIZE_T); + } + else if (type_id == ptrdiff_t_id) { + return INT2NUM(TYPE_PTRDIFF_T); + } + else if (type_id == intptr_t_id) { + return INT2NUM(TYPE_INTPTR_T); + } + else if (type_id == uintptr_t_id) { + return INT2NUM(TYPE_UINTPTR_T); + } + else { + type = original_type; + } + } + + return rb_to_int(type); +} + ffi_type * -int_to_ffi_type(int type) +rb_fiddle_int_to_ffi_type(int type) { int signed_p = 1; @@ -33,66 +185,90 @@ int_to_ffi_type(int type) return &ffi_type_float; case TYPE_DOUBLE: return &ffi_type_double; + case TYPE_CONST_STRING: + return &ffi_type_pointer; default: rb_raise(rb_eRuntimeError, "unknown type %d", type); } return &ffi_type_pointer; } +ffi_type * +int_to_ffi_type(int type) +{ + return rb_fiddle_int_to_ffi_type(type); +} + void -value_to_generic(int type, VALUE src, fiddle_generic * dst) +rb_fiddle_value_to_generic(int type, VALUE *src, fiddle_generic *dst) { switch (type) { case TYPE_VOID: break; case TYPE_VOIDP: - dst->pointer = NUM2PTR(rb_Integer(src)); + dst->pointer = NUM2PTR(rb_Integer(*src)); break; case TYPE_CHAR: - dst->schar = (signed char)NUM2INT(src); + dst->schar = (signed char)NUM2INT(*src); break; case -TYPE_CHAR: - dst->uchar = (unsigned char)NUM2UINT(src); + dst->uchar = (unsigned char)NUM2UINT(*src); break; case TYPE_SHORT: - dst->sshort = (unsigned short)NUM2INT(src); + dst->sshort = (unsigned short)NUM2INT(*src); break; case -TYPE_SHORT: - dst->sshort = (signed short)NUM2UINT(src); + dst->sshort = (signed short)NUM2UINT(*src); break; case TYPE_INT: - dst->sint = NUM2INT(src); + dst->sint = NUM2INT(*src); break; case -TYPE_INT: - dst->uint = NUM2UINT(src); + dst->uint = NUM2UINT(*src); break; case TYPE_LONG: - dst->slong = NUM2LONG(src); + dst->slong = NUM2LONG(*src); break; case -TYPE_LONG: - dst->ulong = NUM2ULONG(src); + dst->ulong = NUM2ULONG(*src); break; #if HAVE_LONG_LONG case TYPE_LONG_LONG: - dst->slong_long = NUM2LL(src); + dst->slong_long = NUM2LL(*src); break; case -TYPE_LONG_LONG: - dst->ulong_long = NUM2ULL(src); + dst->ulong_long = NUM2ULL(*src); break; #endif case TYPE_FLOAT: - dst->ffloat = (float)NUM2DBL(src); + dst->ffloat = (float)NUM2DBL(*src); break; case TYPE_DOUBLE: - dst->ddouble = NUM2DBL(src); + dst->ddouble = NUM2DBL(*src); + break; + case TYPE_CONST_STRING: + if (NIL_P(*src)) { + dst->pointer = NULL; + } + else { + dst->pointer = rb_string_value_cstr(src); + } break; default: rb_raise(rb_eRuntimeError, "unknown type %d", type); } } +void +value_to_generic(int type, VALUE src, fiddle_generic *dst) +{ + /* src isn't safe from GC when type is TYPE_CONST_STRING and src + * isn't String. */ + rb_fiddle_value_to_generic(type, &src, dst); +} + VALUE -generic_to_value(VALUE rettype, fiddle_generic retval) +rb_fiddle_generic_to_value(VALUE rettype, fiddle_generic retval) { int type = NUM2INT(rettype); VALUE cPointer; @@ -131,6 +307,13 @@ generic_to_value(VALUE rettype, fiddle_generic retval) return rb_float_new(retval.ffloat); case TYPE_DOUBLE: return rb_float_new(retval.ddouble); + case TYPE_CONST_STRING: + if (retval.pointer) { + return rb_str_new_cstr(retval.pointer); + } + else { + return Qnil; + } default: rb_raise(rb_eRuntimeError, "unknown type %d", type); } @@ -138,4 +321,10 @@ generic_to_value(VALUE rettype, fiddle_generic retval) UNREACHABLE; } +VALUE +generic_to_value(VALUE rettype, fiddle_generic retval) +{ + return rb_fiddle_generic_to_value(rettype, retval); +} + /* vim: set noet sw=4 sts=4 */ diff --git a/ruby/ext/fiddle/conversions.h b/ruby/ext/fiddle/conversions.h index cbc610bad..c7c12a923 100644 --- a/ruby/ext/fiddle/conversions.h +++ b/ruby/ext/fiddle/conversions.h @@ -24,13 +24,22 @@ typedef union void * pointer; /* ffi_type_pointer */ } fiddle_generic; +VALUE rb_fiddle_type_ensure(VALUE type); +ffi_type * rb_fiddle_int_to_ffi_type(int type); +void rb_fiddle_value_to_generic(int type, VALUE *src, fiddle_generic *dst); +VALUE rb_fiddle_generic_to_value(VALUE rettype, fiddle_generic retval); + +/* Deprecated. Use rb_fiddle_*() version. */ ffi_type * int_to_ffi_type(int type); -void value_to_generic(int type, VALUE src, fiddle_generic * dst); +void value_to_generic(int type, VALUE src, fiddle_generic *dst); VALUE generic_to_value(VALUE rettype, fiddle_generic retval); -#define VALUE2GENERIC(_type, _src, _dst) value_to_generic((_type), (_src), (_dst)) -#define INT2FFI_TYPE(_type) int_to_ffi_type(_type) -#define GENERIC2VALUE(_type, _retval) generic_to_value((_type), (_retval)) +#define VALUE2GENERIC(_type, _src, _dst) \ + rb_fiddle_value_to_generic((_type), &(_src), (_dst)) +#define INT2FFI_TYPE(_type) \ + rb_fiddle_int_to_ffi_type(_type) +#define GENERIC2VALUE(_type, _retval) \ + rb_fiddle_generic_to_value((_type), (_retval)) #if SIZEOF_VOIDP == SIZEOF_LONG # define PTR2NUM(x) (LONG2NUM((long)(x))) diff --git a/ruby/ext/fiddle/depend b/ruby/ext/fiddle/depend index 5ed745fa0..4d33d46d3 100644 --- a/ruby/ext/fiddle/depend +++ b/ruby/ext/fiddle/depend @@ -57,8 +57,155 @@ closure.o: $(arch_hdrdir)/ruby/config.h closure.o: $(hdrdir)/ruby.h closure.o: $(hdrdir)/ruby/assert.h closure.o: $(hdrdir)/ruby/backward.h +closure.o: $(hdrdir)/ruby/backward/2/assume.h +closure.o: $(hdrdir)/ruby/backward/2/attributes.h +closure.o: $(hdrdir)/ruby/backward/2/bool.h +closure.o: $(hdrdir)/ruby/backward/2/inttypes.h +closure.o: $(hdrdir)/ruby/backward/2/limits.h +closure.o: $(hdrdir)/ruby/backward/2/long_long.h +closure.o: $(hdrdir)/ruby/backward/2/stdalign.h +closure.o: $(hdrdir)/ruby/backward/2/stdarg.h closure.o: $(hdrdir)/ruby/defines.h closure.o: $(hdrdir)/ruby/intern.h +closure.o: $(hdrdir)/ruby/internal/anyargs.h +closure.o: $(hdrdir)/ruby/internal/arithmetic.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/char.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/double.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/int.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/long.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/short.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +closure.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +closure.o: $(hdrdir)/ruby/internal/assume.h +closure.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +closure.o: $(hdrdir)/ruby/internal/attr/artificial.h +closure.o: $(hdrdir)/ruby/internal/attr/cold.h +closure.o: $(hdrdir)/ruby/internal/attr/const.h +closure.o: $(hdrdir)/ruby/internal/attr/constexpr.h +closure.o: $(hdrdir)/ruby/internal/attr/deprecated.h +closure.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +closure.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +closure.o: $(hdrdir)/ruby/internal/attr/error.h +closure.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +closure.o: $(hdrdir)/ruby/internal/attr/forceinline.h +closure.o: $(hdrdir)/ruby/internal/attr/format.h +closure.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +closure.o: $(hdrdir)/ruby/internal/attr/noalias.h +closure.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +closure.o: $(hdrdir)/ruby/internal/attr/noexcept.h +closure.o: $(hdrdir)/ruby/internal/attr/noinline.h +closure.o: $(hdrdir)/ruby/internal/attr/nonnull.h +closure.o: $(hdrdir)/ruby/internal/attr/noreturn.h +closure.o: $(hdrdir)/ruby/internal/attr/pure.h +closure.o: $(hdrdir)/ruby/internal/attr/restrict.h +closure.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +closure.o: $(hdrdir)/ruby/internal/attr/warning.h +closure.o: $(hdrdir)/ruby/internal/attr/weakref.h +closure.o: $(hdrdir)/ruby/internal/cast.h +closure.o: $(hdrdir)/ruby/internal/compiler_is.h +closure.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +closure.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +closure.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +closure.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +closure.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +closure.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +closure.o: $(hdrdir)/ruby/internal/compiler_since.h +closure.o: $(hdrdir)/ruby/internal/config.h +closure.o: $(hdrdir)/ruby/internal/constant_p.h +closure.o: $(hdrdir)/ruby/internal/core.h +closure.o: $(hdrdir)/ruby/internal/core/rarray.h +closure.o: $(hdrdir)/ruby/internal/core/rbasic.h +closure.o: $(hdrdir)/ruby/internal/core/rbignum.h +closure.o: $(hdrdir)/ruby/internal/core/rclass.h +closure.o: $(hdrdir)/ruby/internal/core/rdata.h +closure.o: $(hdrdir)/ruby/internal/core/rfile.h +closure.o: $(hdrdir)/ruby/internal/core/rhash.h +closure.o: $(hdrdir)/ruby/internal/core/robject.h +closure.o: $(hdrdir)/ruby/internal/core/rregexp.h +closure.o: $(hdrdir)/ruby/internal/core/rstring.h +closure.o: $(hdrdir)/ruby/internal/core/rstruct.h +closure.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +closure.o: $(hdrdir)/ruby/internal/ctype.h +closure.o: $(hdrdir)/ruby/internal/dllexport.h +closure.o: $(hdrdir)/ruby/internal/dosish.h +closure.o: $(hdrdir)/ruby/internal/error.h +closure.o: $(hdrdir)/ruby/internal/eval.h +closure.o: $(hdrdir)/ruby/internal/event.h +closure.o: $(hdrdir)/ruby/internal/fl_type.h +closure.o: $(hdrdir)/ruby/internal/gc.h +closure.o: $(hdrdir)/ruby/internal/glob.h +closure.o: $(hdrdir)/ruby/internal/globals.h +closure.o: $(hdrdir)/ruby/internal/has/attribute.h +closure.o: $(hdrdir)/ruby/internal/has/builtin.h +closure.o: $(hdrdir)/ruby/internal/has/c_attribute.h +closure.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +closure.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +closure.o: $(hdrdir)/ruby/internal/has/extension.h +closure.o: $(hdrdir)/ruby/internal/has/feature.h +closure.o: $(hdrdir)/ruby/internal/has/warning.h +closure.o: $(hdrdir)/ruby/internal/intern/array.h +closure.o: $(hdrdir)/ruby/internal/intern/bignum.h +closure.o: $(hdrdir)/ruby/internal/intern/class.h +closure.o: $(hdrdir)/ruby/internal/intern/compar.h +closure.o: $(hdrdir)/ruby/internal/intern/complex.h +closure.o: $(hdrdir)/ruby/internal/intern/cont.h +closure.o: $(hdrdir)/ruby/internal/intern/dir.h +closure.o: $(hdrdir)/ruby/internal/intern/enum.h +closure.o: $(hdrdir)/ruby/internal/intern/enumerator.h +closure.o: $(hdrdir)/ruby/internal/intern/error.h +closure.o: $(hdrdir)/ruby/internal/intern/eval.h +closure.o: $(hdrdir)/ruby/internal/intern/file.h +closure.o: $(hdrdir)/ruby/internal/intern/gc.h +closure.o: $(hdrdir)/ruby/internal/intern/hash.h +closure.o: $(hdrdir)/ruby/internal/intern/io.h +closure.o: $(hdrdir)/ruby/internal/intern/load.h +closure.o: $(hdrdir)/ruby/internal/intern/marshal.h +closure.o: $(hdrdir)/ruby/internal/intern/numeric.h +closure.o: $(hdrdir)/ruby/internal/intern/object.h +closure.o: $(hdrdir)/ruby/internal/intern/parse.h +closure.o: $(hdrdir)/ruby/internal/intern/proc.h +closure.o: $(hdrdir)/ruby/internal/intern/process.h +closure.o: $(hdrdir)/ruby/internal/intern/random.h +closure.o: $(hdrdir)/ruby/internal/intern/range.h +closure.o: $(hdrdir)/ruby/internal/intern/rational.h +closure.o: $(hdrdir)/ruby/internal/intern/re.h +closure.o: $(hdrdir)/ruby/internal/intern/ruby.h +closure.o: $(hdrdir)/ruby/internal/intern/select.h +closure.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +closure.o: $(hdrdir)/ruby/internal/intern/signal.h +closure.o: $(hdrdir)/ruby/internal/intern/sprintf.h +closure.o: $(hdrdir)/ruby/internal/intern/string.h +closure.o: $(hdrdir)/ruby/internal/intern/struct.h +closure.o: $(hdrdir)/ruby/internal/intern/thread.h +closure.o: $(hdrdir)/ruby/internal/intern/time.h +closure.o: $(hdrdir)/ruby/internal/intern/variable.h +closure.o: $(hdrdir)/ruby/internal/intern/vm.h +closure.o: $(hdrdir)/ruby/internal/interpreter.h +closure.o: $(hdrdir)/ruby/internal/iterator.h +closure.o: $(hdrdir)/ruby/internal/memory.h +closure.o: $(hdrdir)/ruby/internal/method.h +closure.o: $(hdrdir)/ruby/internal/module.h +closure.o: $(hdrdir)/ruby/internal/newobj.h +closure.o: $(hdrdir)/ruby/internal/rgengc.h +closure.o: $(hdrdir)/ruby/internal/scan_args.h +closure.o: $(hdrdir)/ruby/internal/special_consts.h +closure.o: $(hdrdir)/ruby/internal/static_assert.h +closure.o: $(hdrdir)/ruby/internal/stdalign.h +closure.o: $(hdrdir)/ruby/internal/stdbool.h +closure.o: $(hdrdir)/ruby/internal/symbol.h +closure.o: $(hdrdir)/ruby/internal/value.h +closure.o: $(hdrdir)/ruby/internal/value_type.h +closure.o: $(hdrdir)/ruby/internal/variable.h +closure.o: $(hdrdir)/ruby/internal/warning_push.h +closure.o: $(hdrdir)/ruby/internal/xmalloc.h closure.o: $(hdrdir)/ruby/missing.h closure.o: $(hdrdir)/ruby/ruby.h closure.o: $(hdrdir)/ruby/st.h @@ -74,8 +221,155 @@ conversions.o: $(arch_hdrdir)/ruby/config.h conversions.o: $(hdrdir)/ruby.h conversions.o: $(hdrdir)/ruby/assert.h conversions.o: $(hdrdir)/ruby/backward.h +conversions.o: $(hdrdir)/ruby/backward/2/assume.h +conversions.o: $(hdrdir)/ruby/backward/2/attributes.h +conversions.o: $(hdrdir)/ruby/backward/2/bool.h +conversions.o: $(hdrdir)/ruby/backward/2/inttypes.h +conversions.o: $(hdrdir)/ruby/backward/2/limits.h +conversions.o: $(hdrdir)/ruby/backward/2/long_long.h +conversions.o: $(hdrdir)/ruby/backward/2/stdalign.h +conversions.o: $(hdrdir)/ruby/backward/2/stdarg.h conversions.o: $(hdrdir)/ruby/defines.h conversions.o: $(hdrdir)/ruby/intern.h +conversions.o: $(hdrdir)/ruby/internal/anyargs.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/char.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/double.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/int.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/long.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/short.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +conversions.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +conversions.o: $(hdrdir)/ruby/internal/assume.h +conversions.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +conversions.o: $(hdrdir)/ruby/internal/attr/artificial.h +conversions.o: $(hdrdir)/ruby/internal/attr/cold.h +conversions.o: $(hdrdir)/ruby/internal/attr/const.h +conversions.o: $(hdrdir)/ruby/internal/attr/constexpr.h +conversions.o: $(hdrdir)/ruby/internal/attr/deprecated.h +conversions.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +conversions.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +conversions.o: $(hdrdir)/ruby/internal/attr/error.h +conversions.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +conversions.o: $(hdrdir)/ruby/internal/attr/forceinline.h +conversions.o: $(hdrdir)/ruby/internal/attr/format.h +conversions.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +conversions.o: $(hdrdir)/ruby/internal/attr/noalias.h +conversions.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +conversions.o: $(hdrdir)/ruby/internal/attr/noexcept.h +conversions.o: $(hdrdir)/ruby/internal/attr/noinline.h +conversions.o: $(hdrdir)/ruby/internal/attr/nonnull.h +conversions.o: $(hdrdir)/ruby/internal/attr/noreturn.h +conversions.o: $(hdrdir)/ruby/internal/attr/pure.h +conversions.o: $(hdrdir)/ruby/internal/attr/restrict.h +conversions.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +conversions.o: $(hdrdir)/ruby/internal/attr/warning.h +conversions.o: $(hdrdir)/ruby/internal/attr/weakref.h +conversions.o: $(hdrdir)/ruby/internal/cast.h +conversions.o: $(hdrdir)/ruby/internal/compiler_is.h +conversions.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +conversions.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +conversions.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +conversions.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +conversions.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +conversions.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +conversions.o: $(hdrdir)/ruby/internal/compiler_since.h +conversions.o: $(hdrdir)/ruby/internal/config.h +conversions.o: $(hdrdir)/ruby/internal/constant_p.h +conversions.o: $(hdrdir)/ruby/internal/core.h +conversions.o: $(hdrdir)/ruby/internal/core/rarray.h +conversions.o: $(hdrdir)/ruby/internal/core/rbasic.h +conversions.o: $(hdrdir)/ruby/internal/core/rbignum.h +conversions.o: $(hdrdir)/ruby/internal/core/rclass.h +conversions.o: $(hdrdir)/ruby/internal/core/rdata.h +conversions.o: $(hdrdir)/ruby/internal/core/rfile.h +conversions.o: $(hdrdir)/ruby/internal/core/rhash.h +conversions.o: $(hdrdir)/ruby/internal/core/robject.h +conversions.o: $(hdrdir)/ruby/internal/core/rregexp.h +conversions.o: $(hdrdir)/ruby/internal/core/rstring.h +conversions.o: $(hdrdir)/ruby/internal/core/rstruct.h +conversions.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +conversions.o: $(hdrdir)/ruby/internal/ctype.h +conversions.o: $(hdrdir)/ruby/internal/dllexport.h +conversions.o: $(hdrdir)/ruby/internal/dosish.h +conversions.o: $(hdrdir)/ruby/internal/error.h +conversions.o: $(hdrdir)/ruby/internal/eval.h +conversions.o: $(hdrdir)/ruby/internal/event.h +conversions.o: $(hdrdir)/ruby/internal/fl_type.h +conversions.o: $(hdrdir)/ruby/internal/gc.h +conversions.o: $(hdrdir)/ruby/internal/glob.h +conversions.o: $(hdrdir)/ruby/internal/globals.h +conversions.o: $(hdrdir)/ruby/internal/has/attribute.h +conversions.o: $(hdrdir)/ruby/internal/has/builtin.h +conversions.o: $(hdrdir)/ruby/internal/has/c_attribute.h +conversions.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +conversions.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +conversions.o: $(hdrdir)/ruby/internal/has/extension.h +conversions.o: $(hdrdir)/ruby/internal/has/feature.h +conversions.o: $(hdrdir)/ruby/internal/has/warning.h +conversions.o: $(hdrdir)/ruby/internal/intern/array.h +conversions.o: $(hdrdir)/ruby/internal/intern/bignum.h +conversions.o: $(hdrdir)/ruby/internal/intern/class.h +conversions.o: $(hdrdir)/ruby/internal/intern/compar.h +conversions.o: $(hdrdir)/ruby/internal/intern/complex.h +conversions.o: $(hdrdir)/ruby/internal/intern/cont.h +conversions.o: $(hdrdir)/ruby/internal/intern/dir.h +conversions.o: $(hdrdir)/ruby/internal/intern/enum.h +conversions.o: $(hdrdir)/ruby/internal/intern/enumerator.h +conversions.o: $(hdrdir)/ruby/internal/intern/error.h +conversions.o: $(hdrdir)/ruby/internal/intern/eval.h +conversions.o: $(hdrdir)/ruby/internal/intern/file.h +conversions.o: $(hdrdir)/ruby/internal/intern/gc.h +conversions.o: $(hdrdir)/ruby/internal/intern/hash.h +conversions.o: $(hdrdir)/ruby/internal/intern/io.h +conversions.o: $(hdrdir)/ruby/internal/intern/load.h +conversions.o: $(hdrdir)/ruby/internal/intern/marshal.h +conversions.o: $(hdrdir)/ruby/internal/intern/numeric.h +conversions.o: $(hdrdir)/ruby/internal/intern/object.h +conversions.o: $(hdrdir)/ruby/internal/intern/parse.h +conversions.o: $(hdrdir)/ruby/internal/intern/proc.h +conversions.o: $(hdrdir)/ruby/internal/intern/process.h +conversions.o: $(hdrdir)/ruby/internal/intern/random.h +conversions.o: $(hdrdir)/ruby/internal/intern/range.h +conversions.o: $(hdrdir)/ruby/internal/intern/rational.h +conversions.o: $(hdrdir)/ruby/internal/intern/re.h +conversions.o: $(hdrdir)/ruby/internal/intern/ruby.h +conversions.o: $(hdrdir)/ruby/internal/intern/select.h +conversions.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +conversions.o: $(hdrdir)/ruby/internal/intern/signal.h +conversions.o: $(hdrdir)/ruby/internal/intern/sprintf.h +conversions.o: $(hdrdir)/ruby/internal/intern/string.h +conversions.o: $(hdrdir)/ruby/internal/intern/struct.h +conversions.o: $(hdrdir)/ruby/internal/intern/thread.h +conversions.o: $(hdrdir)/ruby/internal/intern/time.h +conversions.o: $(hdrdir)/ruby/internal/intern/variable.h +conversions.o: $(hdrdir)/ruby/internal/intern/vm.h +conversions.o: $(hdrdir)/ruby/internal/interpreter.h +conversions.o: $(hdrdir)/ruby/internal/iterator.h +conversions.o: $(hdrdir)/ruby/internal/memory.h +conversions.o: $(hdrdir)/ruby/internal/method.h +conversions.o: $(hdrdir)/ruby/internal/module.h +conversions.o: $(hdrdir)/ruby/internal/newobj.h +conversions.o: $(hdrdir)/ruby/internal/rgengc.h +conversions.o: $(hdrdir)/ruby/internal/scan_args.h +conversions.o: $(hdrdir)/ruby/internal/special_consts.h +conversions.o: $(hdrdir)/ruby/internal/static_assert.h +conversions.o: $(hdrdir)/ruby/internal/stdalign.h +conversions.o: $(hdrdir)/ruby/internal/stdbool.h +conversions.o: $(hdrdir)/ruby/internal/symbol.h +conversions.o: $(hdrdir)/ruby/internal/value.h +conversions.o: $(hdrdir)/ruby/internal/value_type.h +conversions.o: $(hdrdir)/ruby/internal/variable.h +conversions.o: $(hdrdir)/ruby/internal/warning_push.h +conversions.o: $(hdrdir)/ruby/internal/xmalloc.h conversions.o: $(hdrdir)/ruby/missing.h conversions.o: $(hdrdir)/ruby/ruby.h conversions.o: $(hdrdir)/ruby/st.h @@ -90,8 +384,155 @@ fiddle.o: $(arch_hdrdir)/ruby/config.h fiddle.o: $(hdrdir)/ruby.h fiddle.o: $(hdrdir)/ruby/assert.h fiddle.o: $(hdrdir)/ruby/backward.h +fiddle.o: $(hdrdir)/ruby/backward/2/assume.h +fiddle.o: $(hdrdir)/ruby/backward/2/attributes.h +fiddle.o: $(hdrdir)/ruby/backward/2/bool.h +fiddle.o: $(hdrdir)/ruby/backward/2/inttypes.h +fiddle.o: $(hdrdir)/ruby/backward/2/limits.h +fiddle.o: $(hdrdir)/ruby/backward/2/long_long.h +fiddle.o: $(hdrdir)/ruby/backward/2/stdalign.h +fiddle.o: $(hdrdir)/ruby/backward/2/stdarg.h fiddle.o: $(hdrdir)/ruby/defines.h fiddle.o: $(hdrdir)/ruby/intern.h +fiddle.o: $(hdrdir)/ruby/internal/anyargs.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/char.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/double.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/int.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/long.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/short.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +fiddle.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +fiddle.o: $(hdrdir)/ruby/internal/assume.h +fiddle.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +fiddle.o: $(hdrdir)/ruby/internal/attr/artificial.h +fiddle.o: $(hdrdir)/ruby/internal/attr/cold.h +fiddle.o: $(hdrdir)/ruby/internal/attr/const.h +fiddle.o: $(hdrdir)/ruby/internal/attr/constexpr.h +fiddle.o: $(hdrdir)/ruby/internal/attr/deprecated.h +fiddle.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +fiddle.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +fiddle.o: $(hdrdir)/ruby/internal/attr/error.h +fiddle.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +fiddle.o: $(hdrdir)/ruby/internal/attr/forceinline.h +fiddle.o: $(hdrdir)/ruby/internal/attr/format.h +fiddle.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +fiddle.o: $(hdrdir)/ruby/internal/attr/noalias.h +fiddle.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +fiddle.o: $(hdrdir)/ruby/internal/attr/noexcept.h +fiddle.o: $(hdrdir)/ruby/internal/attr/noinline.h +fiddle.o: $(hdrdir)/ruby/internal/attr/nonnull.h +fiddle.o: $(hdrdir)/ruby/internal/attr/noreturn.h +fiddle.o: $(hdrdir)/ruby/internal/attr/pure.h +fiddle.o: $(hdrdir)/ruby/internal/attr/restrict.h +fiddle.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +fiddle.o: $(hdrdir)/ruby/internal/attr/warning.h +fiddle.o: $(hdrdir)/ruby/internal/attr/weakref.h +fiddle.o: $(hdrdir)/ruby/internal/cast.h +fiddle.o: $(hdrdir)/ruby/internal/compiler_is.h +fiddle.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +fiddle.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +fiddle.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +fiddle.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +fiddle.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +fiddle.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +fiddle.o: $(hdrdir)/ruby/internal/compiler_since.h +fiddle.o: $(hdrdir)/ruby/internal/config.h +fiddle.o: $(hdrdir)/ruby/internal/constant_p.h +fiddle.o: $(hdrdir)/ruby/internal/core.h +fiddle.o: $(hdrdir)/ruby/internal/core/rarray.h +fiddle.o: $(hdrdir)/ruby/internal/core/rbasic.h +fiddle.o: $(hdrdir)/ruby/internal/core/rbignum.h +fiddle.o: $(hdrdir)/ruby/internal/core/rclass.h +fiddle.o: $(hdrdir)/ruby/internal/core/rdata.h +fiddle.o: $(hdrdir)/ruby/internal/core/rfile.h +fiddle.o: $(hdrdir)/ruby/internal/core/rhash.h +fiddle.o: $(hdrdir)/ruby/internal/core/robject.h +fiddle.o: $(hdrdir)/ruby/internal/core/rregexp.h +fiddle.o: $(hdrdir)/ruby/internal/core/rstring.h +fiddle.o: $(hdrdir)/ruby/internal/core/rstruct.h +fiddle.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +fiddle.o: $(hdrdir)/ruby/internal/ctype.h +fiddle.o: $(hdrdir)/ruby/internal/dllexport.h +fiddle.o: $(hdrdir)/ruby/internal/dosish.h +fiddle.o: $(hdrdir)/ruby/internal/error.h +fiddle.o: $(hdrdir)/ruby/internal/eval.h +fiddle.o: $(hdrdir)/ruby/internal/event.h +fiddle.o: $(hdrdir)/ruby/internal/fl_type.h +fiddle.o: $(hdrdir)/ruby/internal/gc.h +fiddle.o: $(hdrdir)/ruby/internal/glob.h +fiddle.o: $(hdrdir)/ruby/internal/globals.h +fiddle.o: $(hdrdir)/ruby/internal/has/attribute.h +fiddle.o: $(hdrdir)/ruby/internal/has/builtin.h +fiddle.o: $(hdrdir)/ruby/internal/has/c_attribute.h +fiddle.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +fiddle.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +fiddle.o: $(hdrdir)/ruby/internal/has/extension.h +fiddle.o: $(hdrdir)/ruby/internal/has/feature.h +fiddle.o: $(hdrdir)/ruby/internal/has/warning.h +fiddle.o: $(hdrdir)/ruby/internal/intern/array.h +fiddle.o: $(hdrdir)/ruby/internal/intern/bignum.h +fiddle.o: $(hdrdir)/ruby/internal/intern/class.h +fiddle.o: $(hdrdir)/ruby/internal/intern/compar.h +fiddle.o: $(hdrdir)/ruby/internal/intern/complex.h +fiddle.o: $(hdrdir)/ruby/internal/intern/cont.h +fiddle.o: $(hdrdir)/ruby/internal/intern/dir.h +fiddle.o: $(hdrdir)/ruby/internal/intern/enum.h +fiddle.o: $(hdrdir)/ruby/internal/intern/enumerator.h +fiddle.o: $(hdrdir)/ruby/internal/intern/error.h +fiddle.o: $(hdrdir)/ruby/internal/intern/eval.h +fiddle.o: $(hdrdir)/ruby/internal/intern/file.h +fiddle.o: $(hdrdir)/ruby/internal/intern/gc.h +fiddle.o: $(hdrdir)/ruby/internal/intern/hash.h +fiddle.o: $(hdrdir)/ruby/internal/intern/io.h +fiddle.o: $(hdrdir)/ruby/internal/intern/load.h +fiddle.o: $(hdrdir)/ruby/internal/intern/marshal.h +fiddle.o: $(hdrdir)/ruby/internal/intern/numeric.h +fiddle.o: $(hdrdir)/ruby/internal/intern/object.h +fiddle.o: $(hdrdir)/ruby/internal/intern/parse.h +fiddle.o: $(hdrdir)/ruby/internal/intern/proc.h +fiddle.o: $(hdrdir)/ruby/internal/intern/process.h +fiddle.o: $(hdrdir)/ruby/internal/intern/random.h +fiddle.o: $(hdrdir)/ruby/internal/intern/range.h +fiddle.o: $(hdrdir)/ruby/internal/intern/rational.h +fiddle.o: $(hdrdir)/ruby/internal/intern/re.h +fiddle.o: $(hdrdir)/ruby/internal/intern/ruby.h +fiddle.o: $(hdrdir)/ruby/internal/intern/select.h +fiddle.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +fiddle.o: $(hdrdir)/ruby/internal/intern/signal.h +fiddle.o: $(hdrdir)/ruby/internal/intern/sprintf.h +fiddle.o: $(hdrdir)/ruby/internal/intern/string.h +fiddle.o: $(hdrdir)/ruby/internal/intern/struct.h +fiddle.o: $(hdrdir)/ruby/internal/intern/thread.h +fiddle.o: $(hdrdir)/ruby/internal/intern/time.h +fiddle.o: $(hdrdir)/ruby/internal/intern/variable.h +fiddle.o: $(hdrdir)/ruby/internal/intern/vm.h +fiddle.o: $(hdrdir)/ruby/internal/interpreter.h +fiddle.o: $(hdrdir)/ruby/internal/iterator.h +fiddle.o: $(hdrdir)/ruby/internal/memory.h +fiddle.o: $(hdrdir)/ruby/internal/method.h +fiddle.o: $(hdrdir)/ruby/internal/module.h +fiddle.o: $(hdrdir)/ruby/internal/newobj.h +fiddle.o: $(hdrdir)/ruby/internal/rgengc.h +fiddle.o: $(hdrdir)/ruby/internal/scan_args.h +fiddle.o: $(hdrdir)/ruby/internal/special_consts.h +fiddle.o: $(hdrdir)/ruby/internal/static_assert.h +fiddle.o: $(hdrdir)/ruby/internal/stdalign.h +fiddle.o: $(hdrdir)/ruby/internal/stdbool.h +fiddle.o: $(hdrdir)/ruby/internal/symbol.h +fiddle.o: $(hdrdir)/ruby/internal/value.h +fiddle.o: $(hdrdir)/ruby/internal/value_type.h +fiddle.o: $(hdrdir)/ruby/internal/variable.h +fiddle.o: $(hdrdir)/ruby/internal/warning_push.h +fiddle.o: $(hdrdir)/ruby/internal/xmalloc.h fiddle.o: $(hdrdir)/ruby/missing.h fiddle.o: $(hdrdir)/ruby/ruby.h fiddle.o: $(hdrdir)/ruby/st.h @@ -106,8 +547,155 @@ function.o: $(arch_hdrdir)/ruby/config.h function.o: $(hdrdir)/ruby.h function.o: $(hdrdir)/ruby/assert.h function.o: $(hdrdir)/ruby/backward.h +function.o: $(hdrdir)/ruby/backward/2/assume.h +function.o: $(hdrdir)/ruby/backward/2/attributes.h +function.o: $(hdrdir)/ruby/backward/2/bool.h +function.o: $(hdrdir)/ruby/backward/2/inttypes.h +function.o: $(hdrdir)/ruby/backward/2/limits.h +function.o: $(hdrdir)/ruby/backward/2/long_long.h +function.o: $(hdrdir)/ruby/backward/2/stdalign.h +function.o: $(hdrdir)/ruby/backward/2/stdarg.h function.o: $(hdrdir)/ruby/defines.h function.o: $(hdrdir)/ruby/intern.h +function.o: $(hdrdir)/ruby/internal/anyargs.h +function.o: $(hdrdir)/ruby/internal/arithmetic.h +function.o: $(hdrdir)/ruby/internal/arithmetic/char.h +function.o: $(hdrdir)/ruby/internal/arithmetic/double.h +function.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +function.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +function.o: $(hdrdir)/ruby/internal/arithmetic/int.h +function.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +function.o: $(hdrdir)/ruby/internal/arithmetic/long.h +function.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +function.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +function.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +function.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +function.o: $(hdrdir)/ruby/internal/arithmetic/short.h +function.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +function.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +function.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +function.o: $(hdrdir)/ruby/internal/assume.h +function.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +function.o: $(hdrdir)/ruby/internal/attr/artificial.h +function.o: $(hdrdir)/ruby/internal/attr/cold.h +function.o: $(hdrdir)/ruby/internal/attr/const.h +function.o: $(hdrdir)/ruby/internal/attr/constexpr.h +function.o: $(hdrdir)/ruby/internal/attr/deprecated.h +function.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +function.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +function.o: $(hdrdir)/ruby/internal/attr/error.h +function.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +function.o: $(hdrdir)/ruby/internal/attr/forceinline.h +function.o: $(hdrdir)/ruby/internal/attr/format.h +function.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +function.o: $(hdrdir)/ruby/internal/attr/noalias.h +function.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +function.o: $(hdrdir)/ruby/internal/attr/noexcept.h +function.o: $(hdrdir)/ruby/internal/attr/noinline.h +function.o: $(hdrdir)/ruby/internal/attr/nonnull.h +function.o: $(hdrdir)/ruby/internal/attr/noreturn.h +function.o: $(hdrdir)/ruby/internal/attr/pure.h +function.o: $(hdrdir)/ruby/internal/attr/restrict.h +function.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +function.o: $(hdrdir)/ruby/internal/attr/warning.h +function.o: $(hdrdir)/ruby/internal/attr/weakref.h +function.o: $(hdrdir)/ruby/internal/cast.h +function.o: $(hdrdir)/ruby/internal/compiler_is.h +function.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +function.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +function.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +function.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +function.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +function.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +function.o: $(hdrdir)/ruby/internal/compiler_since.h +function.o: $(hdrdir)/ruby/internal/config.h +function.o: $(hdrdir)/ruby/internal/constant_p.h +function.o: $(hdrdir)/ruby/internal/core.h +function.o: $(hdrdir)/ruby/internal/core/rarray.h +function.o: $(hdrdir)/ruby/internal/core/rbasic.h +function.o: $(hdrdir)/ruby/internal/core/rbignum.h +function.o: $(hdrdir)/ruby/internal/core/rclass.h +function.o: $(hdrdir)/ruby/internal/core/rdata.h +function.o: $(hdrdir)/ruby/internal/core/rfile.h +function.o: $(hdrdir)/ruby/internal/core/rhash.h +function.o: $(hdrdir)/ruby/internal/core/robject.h +function.o: $(hdrdir)/ruby/internal/core/rregexp.h +function.o: $(hdrdir)/ruby/internal/core/rstring.h +function.o: $(hdrdir)/ruby/internal/core/rstruct.h +function.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +function.o: $(hdrdir)/ruby/internal/ctype.h +function.o: $(hdrdir)/ruby/internal/dllexport.h +function.o: $(hdrdir)/ruby/internal/dosish.h +function.o: $(hdrdir)/ruby/internal/error.h +function.o: $(hdrdir)/ruby/internal/eval.h +function.o: $(hdrdir)/ruby/internal/event.h +function.o: $(hdrdir)/ruby/internal/fl_type.h +function.o: $(hdrdir)/ruby/internal/gc.h +function.o: $(hdrdir)/ruby/internal/glob.h +function.o: $(hdrdir)/ruby/internal/globals.h +function.o: $(hdrdir)/ruby/internal/has/attribute.h +function.o: $(hdrdir)/ruby/internal/has/builtin.h +function.o: $(hdrdir)/ruby/internal/has/c_attribute.h +function.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +function.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +function.o: $(hdrdir)/ruby/internal/has/extension.h +function.o: $(hdrdir)/ruby/internal/has/feature.h +function.o: $(hdrdir)/ruby/internal/has/warning.h +function.o: $(hdrdir)/ruby/internal/intern/array.h +function.o: $(hdrdir)/ruby/internal/intern/bignum.h +function.o: $(hdrdir)/ruby/internal/intern/class.h +function.o: $(hdrdir)/ruby/internal/intern/compar.h +function.o: $(hdrdir)/ruby/internal/intern/complex.h +function.o: $(hdrdir)/ruby/internal/intern/cont.h +function.o: $(hdrdir)/ruby/internal/intern/dir.h +function.o: $(hdrdir)/ruby/internal/intern/enum.h +function.o: $(hdrdir)/ruby/internal/intern/enumerator.h +function.o: $(hdrdir)/ruby/internal/intern/error.h +function.o: $(hdrdir)/ruby/internal/intern/eval.h +function.o: $(hdrdir)/ruby/internal/intern/file.h +function.o: $(hdrdir)/ruby/internal/intern/gc.h +function.o: $(hdrdir)/ruby/internal/intern/hash.h +function.o: $(hdrdir)/ruby/internal/intern/io.h +function.o: $(hdrdir)/ruby/internal/intern/load.h +function.o: $(hdrdir)/ruby/internal/intern/marshal.h +function.o: $(hdrdir)/ruby/internal/intern/numeric.h +function.o: $(hdrdir)/ruby/internal/intern/object.h +function.o: $(hdrdir)/ruby/internal/intern/parse.h +function.o: $(hdrdir)/ruby/internal/intern/proc.h +function.o: $(hdrdir)/ruby/internal/intern/process.h +function.o: $(hdrdir)/ruby/internal/intern/random.h +function.o: $(hdrdir)/ruby/internal/intern/range.h +function.o: $(hdrdir)/ruby/internal/intern/rational.h +function.o: $(hdrdir)/ruby/internal/intern/re.h +function.o: $(hdrdir)/ruby/internal/intern/ruby.h +function.o: $(hdrdir)/ruby/internal/intern/select.h +function.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +function.o: $(hdrdir)/ruby/internal/intern/signal.h +function.o: $(hdrdir)/ruby/internal/intern/sprintf.h +function.o: $(hdrdir)/ruby/internal/intern/string.h +function.o: $(hdrdir)/ruby/internal/intern/struct.h +function.o: $(hdrdir)/ruby/internal/intern/thread.h +function.o: $(hdrdir)/ruby/internal/intern/time.h +function.o: $(hdrdir)/ruby/internal/intern/variable.h +function.o: $(hdrdir)/ruby/internal/intern/vm.h +function.o: $(hdrdir)/ruby/internal/interpreter.h +function.o: $(hdrdir)/ruby/internal/iterator.h +function.o: $(hdrdir)/ruby/internal/memory.h +function.o: $(hdrdir)/ruby/internal/method.h +function.o: $(hdrdir)/ruby/internal/module.h +function.o: $(hdrdir)/ruby/internal/newobj.h +function.o: $(hdrdir)/ruby/internal/rgengc.h +function.o: $(hdrdir)/ruby/internal/scan_args.h +function.o: $(hdrdir)/ruby/internal/special_consts.h +function.o: $(hdrdir)/ruby/internal/static_assert.h +function.o: $(hdrdir)/ruby/internal/stdalign.h +function.o: $(hdrdir)/ruby/internal/stdbool.h +function.o: $(hdrdir)/ruby/internal/symbol.h +function.o: $(hdrdir)/ruby/internal/value.h +function.o: $(hdrdir)/ruby/internal/value_type.h +function.o: $(hdrdir)/ruby/internal/variable.h +function.o: $(hdrdir)/ruby/internal/warning_push.h +function.o: $(hdrdir)/ruby/internal/xmalloc.h function.o: $(hdrdir)/ruby/missing.h function.o: $(hdrdir)/ruby/ruby.h function.o: $(hdrdir)/ruby/st.h @@ -123,8 +711,155 @@ handle.o: $(arch_hdrdir)/ruby/config.h handle.o: $(hdrdir)/ruby.h handle.o: $(hdrdir)/ruby/assert.h handle.o: $(hdrdir)/ruby/backward.h +handle.o: $(hdrdir)/ruby/backward/2/assume.h +handle.o: $(hdrdir)/ruby/backward/2/attributes.h +handle.o: $(hdrdir)/ruby/backward/2/bool.h +handle.o: $(hdrdir)/ruby/backward/2/inttypes.h +handle.o: $(hdrdir)/ruby/backward/2/limits.h +handle.o: $(hdrdir)/ruby/backward/2/long_long.h +handle.o: $(hdrdir)/ruby/backward/2/stdalign.h +handle.o: $(hdrdir)/ruby/backward/2/stdarg.h handle.o: $(hdrdir)/ruby/defines.h handle.o: $(hdrdir)/ruby/intern.h +handle.o: $(hdrdir)/ruby/internal/anyargs.h +handle.o: $(hdrdir)/ruby/internal/arithmetic.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/char.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/double.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/int.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/long.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/short.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +handle.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +handle.o: $(hdrdir)/ruby/internal/assume.h +handle.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +handle.o: $(hdrdir)/ruby/internal/attr/artificial.h +handle.o: $(hdrdir)/ruby/internal/attr/cold.h +handle.o: $(hdrdir)/ruby/internal/attr/const.h +handle.o: $(hdrdir)/ruby/internal/attr/constexpr.h +handle.o: $(hdrdir)/ruby/internal/attr/deprecated.h +handle.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +handle.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +handle.o: $(hdrdir)/ruby/internal/attr/error.h +handle.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +handle.o: $(hdrdir)/ruby/internal/attr/forceinline.h +handle.o: $(hdrdir)/ruby/internal/attr/format.h +handle.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +handle.o: $(hdrdir)/ruby/internal/attr/noalias.h +handle.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +handle.o: $(hdrdir)/ruby/internal/attr/noexcept.h +handle.o: $(hdrdir)/ruby/internal/attr/noinline.h +handle.o: $(hdrdir)/ruby/internal/attr/nonnull.h +handle.o: $(hdrdir)/ruby/internal/attr/noreturn.h +handle.o: $(hdrdir)/ruby/internal/attr/pure.h +handle.o: $(hdrdir)/ruby/internal/attr/restrict.h +handle.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +handle.o: $(hdrdir)/ruby/internal/attr/warning.h +handle.o: $(hdrdir)/ruby/internal/attr/weakref.h +handle.o: $(hdrdir)/ruby/internal/cast.h +handle.o: $(hdrdir)/ruby/internal/compiler_is.h +handle.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +handle.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +handle.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +handle.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +handle.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +handle.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +handle.o: $(hdrdir)/ruby/internal/compiler_since.h +handle.o: $(hdrdir)/ruby/internal/config.h +handle.o: $(hdrdir)/ruby/internal/constant_p.h +handle.o: $(hdrdir)/ruby/internal/core.h +handle.o: $(hdrdir)/ruby/internal/core/rarray.h +handle.o: $(hdrdir)/ruby/internal/core/rbasic.h +handle.o: $(hdrdir)/ruby/internal/core/rbignum.h +handle.o: $(hdrdir)/ruby/internal/core/rclass.h +handle.o: $(hdrdir)/ruby/internal/core/rdata.h +handle.o: $(hdrdir)/ruby/internal/core/rfile.h +handle.o: $(hdrdir)/ruby/internal/core/rhash.h +handle.o: $(hdrdir)/ruby/internal/core/robject.h +handle.o: $(hdrdir)/ruby/internal/core/rregexp.h +handle.o: $(hdrdir)/ruby/internal/core/rstring.h +handle.o: $(hdrdir)/ruby/internal/core/rstruct.h +handle.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +handle.o: $(hdrdir)/ruby/internal/ctype.h +handle.o: $(hdrdir)/ruby/internal/dllexport.h +handle.o: $(hdrdir)/ruby/internal/dosish.h +handle.o: $(hdrdir)/ruby/internal/error.h +handle.o: $(hdrdir)/ruby/internal/eval.h +handle.o: $(hdrdir)/ruby/internal/event.h +handle.o: $(hdrdir)/ruby/internal/fl_type.h +handle.o: $(hdrdir)/ruby/internal/gc.h +handle.o: $(hdrdir)/ruby/internal/glob.h +handle.o: $(hdrdir)/ruby/internal/globals.h +handle.o: $(hdrdir)/ruby/internal/has/attribute.h +handle.o: $(hdrdir)/ruby/internal/has/builtin.h +handle.o: $(hdrdir)/ruby/internal/has/c_attribute.h +handle.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +handle.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +handle.o: $(hdrdir)/ruby/internal/has/extension.h +handle.o: $(hdrdir)/ruby/internal/has/feature.h +handle.o: $(hdrdir)/ruby/internal/has/warning.h +handle.o: $(hdrdir)/ruby/internal/intern/array.h +handle.o: $(hdrdir)/ruby/internal/intern/bignum.h +handle.o: $(hdrdir)/ruby/internal/intern/class.h +handle.o: $(hdrdir)/ruby/internal/intern/compar.h +handle.o: $(hdrdir)/ruby/internal/intern/complex.h +handle.o: $(hdrdir)/ruby/internal/intern/cont.h +handle.o: $(hdrdir)/ruby/internal/intern/dir.h +handle.o: $(hdrdir)/ruby/internal/intern/enum.h +handle.o: $(hdrdir)/ruby/internal/intern/enumerator.h +handle.o: $(hdrdir)/ruby/internal/intern/error.h +handle.o: $(hdrdir)/ruby/internal/intern/eval.h +handle.o: $(hdrdir)/ruby/internal/intern/file.h +handle.o: $(hdrdir)/ruby/internal/intern/gc.h +handle.o: $(hdrdir)/ruby/internal/intern/hash.h +handle.o: $(hdrdir)/ruby/internal/intern/io.h +handle.o: $(hdrdir)/ruby/internal/intern/load.h +handle.o: $(hdrdir)/ruby/internal/intern/marshal.h +handle.o: $(hdrdir)/ruby/internal/intern/numeric.h +handle.o: $(hdrdir)/ruby/internal/intern/object.h +handle.o: $(hdrdir)/ruby/internal/intern/parse.h +handle.o: $(hdrdir)/ruby/internal/intern/proc.h +handle.o: $(hdrdir)/ruby/internal/intern/process.h +handle.o: $(hdrdir)/ruby/internal/intern/random.h +handle.o: $(hdrdir)/ruby/internal/intern/range.h +handle.o: $(hdrdir)/ruby/internal/intern/rational.h +handle.o: $(hdrdir)/ruby/internal/intern/re.h +handle.o: $(hdrdir)/ruby/internal/intern/ruby.h +handle.o: $(hdrdir)/ruby/internal/intern/select.h +handle.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +handle.o: $(hdrdir)/ruby/internal/intern/signal.h +handle.o: $(hdrdir)/ruby/internal/intern/sprintf.h +handle.o: $(hdrdir)/ruby/internal/intern/string.h +handle.o: $(hdrdir)/ruby/internal/intern/struct.h +handle.o: $(hdrdir)/ruby/internal/intern/thread.h +handle.o: $(hdrdir)/ruby/internal/intern/time.h +handle.o: $(hdrdir)/ruby/internal/intern/variable.h +handle.o: $(hdrdir)/ruby/internal/intern/vm.h +handle.o: $(hdrdir)/ruby/internal/interpreter.h +handle.o: $(hdrdir)/ruby/internal/iterator.h +handle.o: $(hdrdir)/ruby/internal/memory.h +handle.o: $(hdrdir)/ruby/internal/method.h +handle.o: $(hdrdir)/ruby/internal/module.h +handle.o: $(hdrdir)/ruby/internal/newobj.h +handle.o: $(hdrdir)/ruby/internal/rgengc.h +handle.o: $(hdrdir)/ruby/internal/scan_args.h +handle.o: $(hdrdir)/ruby/internal/special_consts.h +handle.o: $(hdrdir)/ruby/internal/static_assert.h +handle.o: $(hdrdir)/ruby/internal/stdalign.h +handle.o: $(hdrdir)/ruby/internal/stdbool.h +handle.o: $(hdrdir)/ruby/internal/symbol.h +handle.o: $(hdrdir)/ruby/internal/value.h +handle.o: $(hdrdir)/ruby/internal/value_type.h +handle.o: $(hdrdir)/ruby/internal/variable.h +handle.o: $(hdrdir)/ruby/internal/warning_push.h +handle.o: $(hdrdir)/ruby/internal/xmalloc.h handle.o: $(hdrdir)/ruby/missing.h handle.o: $(hdrdir)/ruby/ruby.h handle.o: $(hdrdir)/ruby/st.h @@ -134,15 +869,511 @@ handle.o: conversions.h handle.o: fiddle.h handle.o: function.h handle.o: handle.c +memory_view.o: $(RUBY_EXTCONF_H) +memory_view.o: $(arch_hdrdir)/ruby/config.h +memory_view.o: $(hdrdir)/ruby.h +memory_view.o: $(hdrdir)/ruby/assert.h +memory_view.o: $(hdrdir)/ruby/backward.h +memory_view.o: $(hdrdir)/ruby/backward/2/assume.h +memory_view.o: $(hdrdir)/ruby/backward/2/attributes.h +memory_view.o: $(hdrdir)/ruby/backward/2/bool.h +memory_view.o: $(hdrdir)/ruby/backward/2/inttypes.h +memory_view.o: $(hdrdir)/ruby/backward/2/limits.h +memory_view.o: $(hdrdir)/ruby/backward/2/long_long.h +memory_view.o: $(hdrdir)/ruby/backward/2/stdalign.h +memory_view.o: $(hdrdir)/ruby/backward/2/stdarg.h +memory_view.o: $(hdrdir)/ruby/defines.h +memory_view.o: $(hdrdir)/ruby/encoding.h +memory_view.o: $(hdrdir)/ruby/intern.h +memory_view.o: $(hdrdir)/ruby/internal/anyargs.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/char.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/double.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/int.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/long.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/short.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +memory_view.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +memory_view.o: $(hdrdir)/ruby/internal/assume.h +memory_view.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +memory_view.o: $(hdrdir)/ruby/internal/attr/artificial.h +memory_view.o: $(hdrdir)/ruby/internal/attr/cold.h +memory_view.o: $(hdrdir)/ruby/internal/attr/const.h +memory_view.o: $(hdrdir)/ruby/internal/attr/constexpr.h +memory_view.o: $(hdrdir)/ruby/internal/attr/deprecated.h +memory_view.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +memory_view.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +memory_view.o: $(hdrdir)/ruby/internal/attr/error.h +memory_view.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +memory_view.o: $(hdrdir)/ruby/internal/attr/forceinline.h +memory_view.o: $(hdrdir)/ruby/internal/attr/format.h +memory_view.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +memory_view.o: $(hdrdir)/ruby/internal/attr/noalias.h +memory_view.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +memory_view.o: $(hdrdir)/ruby/internal/attr/noexcept.h +memory_view.o: $(hdrdir)/ruby/internal/attr/noinline.h +memory_view.o: $(hdrdir)/ruby/internal/attr/nonnull.h +memory_view.o: $(hdrdir)/ruby/internal/attr/noreturn.h +memory_view.o: $(hdrdir)/ruby/internal/attr/pure.h +memory_view.o: $(hdrdir)/ruby/internal/attr/restrict.h +memory_view.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +memory_view.o: $(hdrdir)/ruby/internal/attr/warning.h +memory_view.o: $(hdrdir)/ruby/internal/attr/weakref.h +memory_view.o: $(hdrdir)/ruby/internal/cast.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +memory_view.o: $(hdrdir)/ruby/internal/compiler_since.h +memory_view.o: $(hdrdir)/ruby/internal/config.h +memory_view.o: $(hdrdir)/ruby/internal/constant_p.h +memory_view.o: $(hdrdir)/ruby/internal/core.h +memory_view.o: $(hdrdir)/ruby/internal/core/rarray.h +memory_view.o: $(hdrdir)/ruby/internal/core/rbasic.h +memory_view.o: $(hdrdir)/ruby/internal/core/rbignum.h +memory_view.o: $(hdrdir)/ruby/internal/core/rclass.h +memory_view.o: $(hdrdir)/ruby/internal/core/rdata.h +memory_view.o: $(hdrdir)/ruby/internal/core/rfile.h +memory_view.o: $(hdrdir)/ruby/internal/core/rhash.h +memory_view.o: $(hdrdir)/ruby/internal/core/robject.h +memory_view.o: $(hdrdir)/ruby/internal/core/rregexp.h +memory_view.o: $(hdrdir)/ruby/internal/core/rstring.h +memory_view.o: $(hdrdir)/ruby/internal/core/rstruct.h +memory_view.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +memory_view.o: $(hdrdir)/ruby/internal/ctype.h +memory_view.o: $(hdrdir)/ruby/internal/dllexport.h +memory_view.o: $(hdrdir)/ruby/internal/dosish.h +memory_view.o: $(hdrdir)/ruby/internal/encoding/coderange.h +memory_view.o: $(hdrdir)/ruby/internal/encoding/ctype.h +memory_view.o: $(hdrdir)/ruby/internal/encoding/encoding.h +memory_view.o: $(hdrdir)/ruby/internal/encoding/pathname.h +memory_view.o: $(hdrdir)/ruby/internal/encoding/re.h +memory_view.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +memory_view.o: $(hdrdir)/ruby/internal/encoding/string.h +memory_view.o: $(hdrdir)/ruby/internal/encoding/symbol.h +memory_view.o: $(hdrdir)/ruby/internal/encoding/transcode.h +memory_view.o: $(hdrdir)/ruby/internal/error.h +memory_view.o: $(hdrdir)/ruby/internal/eval.h +memory_view.o: $(hdrdir)/ruby/internal/event.h +memory_view.o: $(hdrdir)/ruby/internal/fl_type.h +memory_view.o: $(hdrdir)/ruby/internal/gc.h +memory_view.o: $(hdrdir)/ruby/internal/glob.h +memory_view.o: $(hdrdir)/ruby/internal/globals.h +memory_view.o: $(hdrdir)/ruby/internal/has/attribute.h +memory_view.o: $(hdrdir)/ruby/internal/has/builtin.h +memory_view.o: $(hdrdir)/ruby/internal/has/c_attribute.h +memory_view.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +memory_view.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +memory_view.o: $(hdrdir)/ruby/internal/has/extension.h +memory_view.o: $(hdrdir)/ruby/internal/has/feature.h +memory_view.o: $(hdrdir)/ruby/internal/has/warning.h +memory_view.o: $(hdrdir)/ruby/internal/intern/array.h +memory_view.o: $(hdrdir)/ruby/internal/intern/bignum.h +memory_view.o: $(hdrdir)/ruby/internal/intern/class.h +memory_view.o: $(hdrdir)/ruby/internal/intern/compar.h +memory_view.o: $(hdrdir)/ruby/internal/intern/complex.h +memory_view.o: $(hdrdir)/ruby/internal/intern/cont.h +memory_view.o: $(hdrdir)/ruby/internal/intern/dir.h +memory_view.o: $(hdrdir)/ruby/internal/intern/enum.h +memory_view.o: $(hdrdir)/ruby/internal/intern/enumerator.h +memory_view.o: $(hdrdir)/ruby/internal/intern/error.h +memory_view.o: $(hdrdir)/ruby/internal/intern/eval.h +memory_view.o: $(hdrdir)/ruby/internal/intern/file.h +memory_view.o: $(hdrdir)/ruby/internal/intern/gc.h +memory_view.o: $(hdrdir)/ruby/internal/intern/hash.h +memory_view.o: $(hdrdir)/ruby/internal/intern/io.h +memory_view.o: $(hdrdir)/ruby/internal/intern/load.h +memory_view.o: $(hdrdir)/ruby/internal/intern/marshal.h +memory_view.o: $(hdrdir)/ruby/internal/intern/numeric.h +memory_view.o: $(hdrdir)/ruby/internal/intern/object.h +memory_view.o: $(hdrdir)/ruby/internal/intern/parse.h +memory_view.o: $(hdrdir)/ruby/internal/intern/proc.h +memory_view.o: $(hdrdir)/ruby/internal/intern/process.h +memory_view.o: $(hdrdir)/ruby/internal/intern/random.h +memory_view.o: $(hdrdir)/ruby/internal/intern/range.h +memory_view.o: $(hdrdir)/ruby/internal/intern/rational.h +memory_view.o: $(hdrdir)/ruby/internal/intern/re.h +memory_view.o: $(hdrdir)/ruby/internal/intern/ruby.h +memory_view.o: $(hdrdir)/ruby/internal/intern/select.h +memory_view.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +memory_view.o: $(hdrdir)/ruby/internal/intern/signal.h +memory_view.o: $(hdrdir)/ruby/internal/intern/sprintf.h +memory_view.o: $(hdrdir)/ruby/internal/intern/string.h +memory_view.o: $(hdrdir)/ruby/internal/intern/struct.h +memory_view.o: $(hdrdir)/ruby/internal/intern/thread.h +memory_view.o: $(hdrdir)/ruby/internal/intern/time.h +memory_view.o: $(hdrdir)/ruby/internal/intern/variable.h +memory_view.o: $(hdrdir)/ruby/internal/intern/vm.h +memory_view.o: $(hdrdir)/ruby/internal/interpreter.h +memory_view.o: $(hdrdir)/ruby/internal/iterator.h +memory_view.o: $(hdrdir)/ruby/internal/memory.h +memory_view.o: $(hdrdir)/ruby/internal/method.h +memory_view.o: $(hdrdir)/ruby/internal/module.h +memory_view.o: $(hdrdir)/ruby/internal/newobj.h +memory_view.o: $(hdrdir)/ruby/internal/rgengc.h +memory_view.o: $(hdrdir)/ruby/internal/scan_args.h +memory_view.o: $(hdrdir)/ruby/internal/special_consts.h +memory_view.o: $(hdrdir)/ruby/internal/static_assert.h +memory_view.o: $(hdrdir)/ruby/internal/stdalign.h +memory_view.o: $(hdrdir)/ruby/internal/stdbool.h +memory_view.o: $(hdrdir)/ruby/internal/symbol.h +memory_view.o: $(hdrdir)/ruby/internal/value.h +memory_view.o: $(hdrdir)/ruby/internal/value_type.h +memory_view.o: $(hdrdir)/ruby/internal/variable.h +memory_view.o: $(hdrdir)/ruby/internal/warning_push.h +memory_view.o: $(hdrdir)/ruby/internal/xmalloc.h +memory_view.o: $(hdrdir)/ruby/memory_view.h +memory_view.o: $(hdrdir)/ruby/missing.h +memory_view.o: $(hdrdir)/ruby/onigmo.h +memory_view.o: $(hdrdir)/ruby/oniguruma.h +memory_view.o: $(hdrdir)/ruby/ruby.h +memory_view.o: $(hdrdir)/ruby/st.h +memory_view.o: $(hdrdir)/ruby/subst.h +memory_view.o: closure.h +memory_view.o: conversions.h +memory_view.o: fiddle.h +memory_view.o: function.h +memory_view.o: memory_view.c +pinned.o: $(RUBY_EXTCONF_H) +pinned.o: $(arch_hdrdir)/ruby/config.h +pinned.o: $(hdrdir)/ruby.h +pinned.o: $(hdrdir)/ruby/assert.h +pinned.o: $(hdrdir)/ruby/backward.h +pinned.o: $(hdrdir)/ruby/backward/2/assume.h +pinned.o: $(hdrdir)/ruby/backward/2/attributes.h +pinned.o: $(hdrdir)/ruby/backward/2/bool.h +pinned.o: $(hdrdir)/ruby/backward/2/inttypes.h +pinned.o: $(hdrdir)/ruby/backward/2/limits.h +pinned.o: $(hdrdir)/ruby/backward/2/long_long.h +pinned.o: $(hdrdir)/ruby/backward/2/stdalign.h +pinned.o: $(hdrdir)/ruby/backward/2/stdarg.h +pinned.o: $(hdrdir)/ruby/defines.h +pinned.o: $(hdrdir)/ruby/intern.h +pinned.o: $(hdrdir)/ruby/internal/anyargs.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/char.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/double.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/int.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/long.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/short.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +pinned.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +pinned.o: $(hdrdir)/ruby/internal/assume.h +pinned.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +pinned.o: $(hdrdir)/ruby/internal/attr/artificial.h +pinned.o: $(hdrdir)/ruby/internal/attr/cold.h +pinned.o: $(hdrdir)/ruby/internal/attr/const.h +pinned.o: $(hdrdir)/ruby/internal/attr/constexpr.h +pinned.o: $(hdrdir)/ruby/internal/attr/deprecated.h +pinned.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +pinned.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +pinned.o: $(hdrdir)/ruby/internal/attr/error.h +pinned.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +pinned.o: $(hdrdir)/ruby/internal/attr/forceinline.h +pinned.o: $(hdrdir)/ruby/internal/attr/format.h +pinned.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +pinned.o: $(hdrdir)/ruby/internal/attr/noalias.h +pinned.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +pinned.o: $(hdrdir)/ruby/internal/attr/noexcept.h +pinned.o: $(hdrdir)/ruby/internal/attr/noinline.h +pinned.o: $(hdrdir)/ruby/internal/attr/nonnull.h +pinned.o: $(hdrdir)/ruby/internal/attr/noreturn.h +pinned.o: $(hdrdir)/ruby/internal/attr/pure.h +pinned.o: $(hdrdir)/ruby/internal/attr/restrict.h +pinned.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +pinned.o: $(hdrdir)/ruby/internal/attr/warning.h +pinned.o: $(hdrdir)/ruby/internal/attr/weakref.h +pinned.o: $(hdrdir)/ruby/internal/cast.h +pinned.o: $(hdrdir)/ruby/internal/compiler_is.h +pinned.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +pinned.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +pinned.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +pinned.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +pinned.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +pinned.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +pinned.o: $(hdrdir)/ruby/internal/compiler_since.h +pinned.o: $(hdrdir)/ruby/internal/config.h +pinned.o: $(hdrdir)/ruby/internal/constant_p.h +pinned.o: $(hdrdir)/ruby/internal/core.h +pinned.o: $(hdrdir)/ruby/internal/core/rarray.h +pinned.o: $(hdrdir)/ruby/internal/core/rbasic.h +pinned.o: $(hdrdir)/ruby/internal/core/rbignum.h +pinned.o: $(hdrdir)/ruby/internal/core/rclass.h +pinned.o: $(hdrdir)/ruby/internal/core/rdata.h +pinned.o: $(hdrdir)/ruby/internal/core/rfile.h +pinned.o: $(hdrdir)/ruby/internal/core/rhash.h +pinned.o: $(hdrdir)/ruby/internal/core/robject.h +pinned.o: $(hdrdir)/ruby/internal/core/rregexp.h +pinned.o: $(hdrdir)/ruby/internal/core/rstring.h +pinned.o: $(hdrdir)/ruby/internal/core/rstruct.h +pinned.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +pinned.o: $(hdrdir)/ruby/internal/ctype.h +pinned.o: $(hdrdir)/ruby/internal/dllexport.h +pinned.o: $(hdrdir)/ruby/internal/dosish.h +pinned.o: $(hdrdir)/ruby/internal/error.h +pinned.o: $(hdrdir)/ruby/internal/eval.h +pinned.o: $(hdrdir)/ruby/internal/event.h +pinned.o: $(hdrdir)/ruby/internal/fl_type.h +pinned.o: $(hdrdir)/ruby/internal/gc.h +pinned.o: $(hdrdir)/ruby/internal/glob.h +pinned.o: $(hdrdir)/ruby/internal/globals.h +pinned.o: $(hdrdir)/ruby/internal/has/attribute.h +pinned.o: $(hdrdir)/ruby/internal/has/builtin.h +pinned.o: $(hdrdir)/ruby/internal/has/c_attribute.h +pinned.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +pinned.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +pinned.o: $(hdrdir)/ruby/internal/has/extension.h +pinned.o: $(hdrdir)/ruby/internal/has/feature.h +pinned.o: $(hdrdir)/ruby/internal/has/warning.h +pinned.o: $(hdrdir)/ruby/internal/intern/array.h +pinned.o: $(hdrdir)/ruby/internal/intern/bignum.h +pinned.o: $(hdrdir)/ruby/internal/intern/class.h +pinned.o: $(hdrdir)/ruby/internal/intern/compar.h +pinned.o: $(hdrdir)/ruby/internal/intern/complex.h +pinned.o: $(hdrdir)/ruby/internal/intern/cont.h +pinned.o: $(hdrdir)/ruby/internal/intern/dir.h +pinned.o: $(hdrdir)/ruby/internal/intern/enum.h +pinned.o: $(hdrdir)/ruby/internal/intern/enumerator.h +pinned.o: $(hdrdir)/ruby/internal/intern/error.h +pinned.o: $(hdrdir)/ruby/internal/intern/eval.h +pinned.o: $(hdrdir)/ruby/internal/intern/file.h +pinned.o: $(hdrdir)/ruby/internal/intern/gc.h +pinned.o: $(hdrdir)/ruby/internal/intern/hash.h +pinned.o: $(hdrdir)/ruby/internal/intern/io.h +pinned.o: $(hdrdir)/ruby/internal/intern/load.h +pinned.o: $(hdrdir)/ruby/internal/intern/marshal.h +pinned.o: $(hdrdir)/ruby/internal/intern/numeric.h +pinned.o: $(hdrdir)/ruby/internal/intern/object.h +pinned.o: $(hdrdir)/ruby/internal/intern/parse.h +pinned.o: $(hdrdir)/ruby/internal/intern/proc.h +pinned.o: $(hdrdir)/ruby/internal/intern/process.h +pinned.o: $(hdrdir)/ruby/internal/intern/random.h +pinned.o: $(hdrdir)/ruby/internal/intern/range.h +pinned.o: $(hdrdir)/ruby/internal/intern/rational.h +pinned.o: $(hdrdir)/ruby/internal/intern/re.h +pinned.o: $(hdrdir)/ruby/internal/intern/ruby.h +pinned.o: $(hdrdir)/ruby/internal/intern/select.h +pinned.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +pinned.o: $(hdrdir)/ruby/internal/intern/signal.h +pinned.o: $(hdrdir)/ruby/internal/intern/sprintf.h +pinned.o: $(hdrdir)/ruby/internal/intern/string.h +pinned.o: $(hdrdir)/ruby/internal/intern/struct.h +pinned.o: $(hdrdir)/ruby/internal/intern/thread.h +pinned.o: $(hdrdir)/ruby/internal/intern/time.h +pinned.o: $(hdrdir)/ruby/internal/intern/variable.h +pinned.o: $(hdrdir)/ruby/internal/intern/vm.h +pinned.o: $(hdrdir)/ruby/internal/interpreter.h +pinned.o: $(hdrdir)/ruby/internal/iterator.h +pinned.o: $(hdrdir)/ruby/internal/memory.h +pinned.o: $(hdrdir)/ruby/internal/method.h +pinned.o: $(hdrdir)/ruby/internal/module.h +pinned.o: $(hdrdir)/ruby/internal/newobj.h +pinned.o: $(hdrdir)/ruby/internal/rgengc.h +pinned.o: $(hdrdir)/ruby/internal/scan_args.h +pinned.o: $(hdrdir)/ruby/internal/special_consts.h +pinned.o: $(hdrdir)/ruby/internal/static_assert.h +pinned.o: $(hdrdir)/ruby/internal/stdalign.h +pinned.o: $(hdrdir)/ruby/internal/stdbool.h +pinned.o: $(hdrdir)/ruby/internal/symbol.h +pinned.o: $(hdrdir)/ruby/internal/value.h +pinned.o: $(hdrdir)/ruby/internal/value_type.h +pinned.o: $(hdrdir)/ruby/internal/variable.h +pinned.o: $(hdrdir)/ruby/internal/warning_push.h +pinned.o: $(hdrdir)/ruby/internal/xmalloc.h +pinned.o: $(hdrdir)/ruby/missing.h +pinned.o: $(hdrdir)/ruby/ruby.h +pinned.o: $(hdrdir)/ruby/st.h +pinned.o: $(hdrdir)/ruby/subst.h +pinned.o: closure.h +pinned.o: conversions.h +pinned.o: fiddle.h +pinned.o: function.h +pinned.o: pinned.c pointer.o: $(RUBY_EXTCONF_H) pointer.o: $(arch_hdrdir)/ruby/config.h pointer.o: $(hdrdir)/ruby.h pointer.o: $(hdrdir)/ruby/assert.h pointer.o: $(hdrdir)/ruby/backward.h +pointer.o: $(hdrdir)/ruby/backward/2/assume.h +pointer.o: $(hdrdir)/ruby/backward/2/attributes.h +pointer.o: $(hdrdir)/ruby/backward/2/bool.h +pointer.o: $(hdrdir)/ruby/backward/2/inttypes.h +pointer.o: $(hdrdir)/ruby/backward/2/limits.h +pointer.o: $(hdrdir)/ruby/backward/2/long_long.h +pointer.o: $(hdrdir)/ruby/backward/2/stdalign.h +pointer.o: $(hdrdir)/ruby/backward/2/stdarg.h pointer.o: $(hdrdir)/ruby/defines.h pointer.o: $(hdrdir)/ruby/encoding.h pointer.o: $(hdrdir)/ruby/intern.h +pointer.o: $(hdrdir)/ruby/internal/anyargs.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/char.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/double.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/int.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/long.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/short.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +pointer.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +pointer.o: $(hdrdir)/ruby/internal/assume.h +pointer.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +pointer.o: $(hdrdir)/ruby/internal/attr/artificial.h +pointer.o: $(hdrdir)/ruby/internal/attr/cold.h +pointer.o: $(hdrdir)/ruby/internal/attr/const.h +pointer.o: $(hdrdir)/ruby/internal/attr/constexpr.h +pointer.o: $(hdrdir)/ruby/internal/attr/deprecated.h +pointer.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +pointer.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +pointer.o: $(hdrdir)/ruby/internal/attr/error.h +pointer.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +pointer.o: $(hdrdir)/ruby/internal/attr/forceinline.h +pointer.o: $(hdrdir)/ruby/internal/attr/format.h +pointer.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +pointer.o: $(hdrdir)/ruby/internal/attr/noalias.h +pointer.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +pointer.o: $(hdrdir)/ruby/internal/attr/noexcept.h +pointer.o: $(hdrdir)/ruby/internal/attr/noinline.h +pointer.o: $(hdrdir)/ruby/internal/attr/nonnull.h +pointer.o: $(hdrdir)/ruby/internal/attr/noreturn.h +pointer.o: $(hdrdir)/ruby/internal/attr/pure.h +pointer.o: $(hdrdir)/ruby/internal/attr/restrict.h +pointer.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +pointer.o: $(hdrdir)/ruby/internal/attr/warning.h +pointer.o: $(hdrdir)/ruby/internal/attr/weakref.h +pointer.o: $(hdrdir)/ruby/internal/cast.h +pointer.o: $(hdrdir)/ruby/internal/compiler_is.h +pointer.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +pointer.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +pointer.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +pointer.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +pointer.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +pointer.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +pointer.o: $(hdrdir)/ruby/internal/compiler_since.h +pointer.o: $(hdrdir)/ruby/internal/config.h +pointer.o: $(hdrdir)/ruby/internal/constant_p.h +pointer.o: $(hdrdir)/ruby/internal/core.h +pointer.o: $(hdrdir)/ruby/internal/core/rarray.h +pointer.o: $(hdrdir)/ruby/internal/core/rbasic.h +pointer.o: $(hdrdir)/ruby/internal/core/rbignum.h +pointer.o: $(hdrdir)/ruby/internal/core/rclass.h +pointer.o: $(hdrdir)/ruby/internal/core/rdata.h +pointer.o: $(hdrdir)/ruby/internal/core/rfile.h +pointer.o: $(hdrdir)/ruby/internal/core/rhash.h +pointer.o: $(hdrdir)/ruby/internal/core/robject.h +pointer.o: $(hdrdir)/ruby/internal/core/rregexp.h +pointer.o: $(hdrdir)/ruby/internal/core/rstring.h +pointer.o: $(hdrdir)/ruby/internal/core/rstruct.h +pointer.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +pointer.o: $(hdrdir)/ruby/internal/ctype.h +pointer.o: $(hdrdir)/ruby/internal/dllexport.h +pointer.o: $(hdrdir)/ruby/internal/dosish.h +pointer.o: $(hdrdir)/ruby/internal/encoding/coderange.h +pointer.o: $(hdrdir)/ruby/internal/encoding/ctype.h +pointer.o: $(hdrdir)/ruby/internal/encoding/encoding.h +pointer.o: $(hdrdir)/ruby/internal/encoding/pathname.h +pointer.o: $(hdrdir)/ruby/internal/encoding/re.h +pointer.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +pointer.o: $(hdrdir)/ruby/internal/encoding/string.h +pointer.o: $(hdrdir)/ruby/internal/encoding/symbol.h +pointer.o: $(hdrdir)/ruby/internal/encoding/transcode.h +pointer.o: $(hdrdir)/ruby/internal/error.h +pointer.o: $(hdrdir)/ruby/internal/eval.h +pointer.o: $(hdrdir)/ruby/internal/event.h +pointer.o: $(hdrdir)/ruby/internal/fl_type.h +pointer.o: $(hdrdir)/ruby/internal/gc.h +pointer.o: $(hdrdir)/ruby/internal/glob.h +pointer.o: $(hdrdir)/ruby/internal/globals.h +pointer.o: $(hdrdir)/ruby/internal/has/attribute.h +pointer.o: $(hdrdir)/ruby/internal/has/builtin.h +pointer.o: $(hdrdir)/ruby/internal/has/c_attribute.h +pointer.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +pointer.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +pointer.o: $(hdrdir)/ruby/internal/has/extension.h +pointer.o: $(hdrdir)/ruby/internal/has/feature.h +pointer.o: $(hdrdir)/ruby/internal/has/warning.h +pointer.o: $(hdrdir)/ruby/internal/intern/array.h +pointer.o: $(hdrdir)/ruby/internal/intern/bignum.h +pointer.o: $(hdrdir)/ruby/internal/intern/class.h +pointer.o: $(hdrdir)/ruby/internal/intern/compar.h +pointer.o: $(hdrdir)/ruby/internal/intern/complex.h +pointer.o: $(hdrdir)/ruby/internal/intern/cont.h +pointer.o: $(hdrdir)/ruby/internal/intern/dir.h +pointer.o: $(hdrdir)/ruby/internal/intern/enum.h +pointer.o: $(hdrdir)/ruby/internal/intern/enumerator.h +pointer.o: $(hdrdir)/ruby/internal/intern/error.h +pointer.o: $(hdrdir)/ruby/internal/intern/eval.h +pointer.o: $(hdrdir)/ruby/internal/intern/file.h +pointer.o: $(hdrdir)/ruby/internal/intern/gc.h +pointer.o: $(hdrdir)/ruby/internal/intern/hash.h +pointer.o: $(hdrdir)/ruby/internal/intern/io.h +pointer.o: $(hdrdir)/ruby/internal/intern/load.h +pointer.o: $(hdrdir)/ruby/internal/intern/marshal.h +pointer.o: $(hdrdir)/ruby/internal/intern/numeric.h +pointer.o: $(hdrdir)/ruby/internal/intern/object.h +pointer.o: $(hdrdir)/ruby/internal/intern/parse.h +pointer.o: $(hdrdir)/ruby/internal/intern/proc.h +pointer.o: $(hdrdir)/ruby/internal/intern/process.h +pointer.o: $(hdrdir)/ruby/internal/intern/random.h +pointer.o: $(hdrdir)/ruby/internal/intern/range.h +pointer.o: $(hdrdir)/ruby/internal/intern/rational.h +pointer.o: $(hdrdir)/ruby/internal/intern/re.h +pointer.o: $(hdrdir)/ruby/internal/intern/ruby.h +pointer.o: $(hdrdir)/ruby/internal/intern/select.h +pointer.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +pointer.o: $(hdrdir)/ruby/internal/intern/signal.h +pointer.o: $(hdrdir)/ruby/internal/intern/sprintf.h +pointer.o: $(hdrdir)/ruby/internal/intern/string.h +pointer.o: $(hdrdir)/ruby/internal/intern/struct.h +pointer.o: $(hdrdir)/ruby/internal/intern/thread.h +pointer.o: $(hdrdir)/ruby/internal/intern/time.h +pointer.o: $(hdrdir)/ruby/internal/intern/variable.h +pointer.o: $(hdrdir)/ruby/internal/intern/vm.h +pointer.o: $(hdrdir)/ruby/internal/interpreter.h +pointer.o: $(hdrdir)/ruby/internal/iterator.h +pointer.o: $(hdrdir)/ruby/internal/memory.h +pointer.o: $(hdrdir)/ruby/internal/method.h +pointer.o: $(hdrdir)/ruby/internal/module.h +pointer.o: $(hdrdir)/ruby/internal/newobj.h +pointer.o: $(hdrdir)/ruby/internal/rgengc.h +pointer.o: $(hdrdir)/ruby/internal/scan_args.h +pointer.o: $(hdrdir)/ruby/internal/special_consts.h +pointer.o: $(hdrdir)/ruby/internal/static_assert.h +pointer.o: $(hdrdir)/ruby/internal/stdalign.h +pointer.o: $(hdrdir)/ruby/internal/stdbool.h +pointer.o: $(hdrdir)/ruby/internal/symbol.h +pointer.o: $(hdrdir)/ruby/internal/value.h +pointer.o: $(hdrdir)/ruby/internal/value_type.h +pointer.o: $(hdrdir)/ruby/internal/variable.h +pointer.o: $(hdrdir)/ruby/internal/warning_push.h +pointer.o: $(hdrdir)/ruby/internal/xmalloc.h pointer.o: $(hdrdir)/ruby/io.h +pointer.o: $(hdrdir)/ruby/memory_view.h pointer.o: $(hdrdir)/ruby/missing.h pointer.o: $(hdrdir)/ruby/onigmo.h pointer.o: $(hdrdir)/ruby/oniguruma.h diff --git a/ruby/ext/fiddle/extconf.rb b/ruby/ext/fiddle/extconf.rb index fce0cb407..053456d53 100644 --- a/ruby/ext/fiddle/extconf.rb +++ b/ruby/ext/fiddle/extconf.rb @@ -3,23 +3,73 @@ # :stopdoc: +def gcc? + RbConfig::CONFIG["GCC"] == "yes" +end + +def disable_optimization_build_flag(flags) + if gcc? + expanded_flags = RbConfig.expand(flags.dup) + optimization_option_pattern = /(^|\s)?-O\d(\s|$)?/ + if optimization_option_pattern.match?(expanded_flags) + expanded_flags.gsub(optimization_option_pattern, '\\1-Og\\2') + else + flags + " -Og" + end + else + flags + end +end + +def enable_debug_build_flag(flags) + if gcc? + expanded_flags = RbConfig.expand(flags.dup) + debug_option_pattern = /(^|\s)-g(?:gdb)?\d?(\s|$)/ + if debug_option_pattern.match?(expanded_flags) + expanded_flags.gsub(debug_option_pattern, '\\1-ggdb3\\2') + else + flags + " -ggdb3" + end + else + flags + end +end + +checking_for(checking_message("--enable-debug-build option")) do + enable_debug_build = enable_config("debug-build", false) + if enable_debug_build + $CFLAGS = disable_optimization_build_flag($CFLAGS) + $CFLAGS = enable_debug_build_flag($CFLAGS) + end + enable_debug_build +end + +libffi_version = nil +have_libffi = false bundle = enable_config('bundled-libffi') -if ! bundle +unless bundle dir_config 'libffi' - pkg_config("libffi") and - ver = pkg_config("libffi", "modversion") + if pkg_config("libffi") + libffi_version = pkg_config("libffi", "modversion") + end + have_ffi_header = false if have_header(ffi_header = 'ffi.h') - true + have_ffi_header = true elsif have_header(ffi_header = 'ffi/ffi.h') - $defs.push(format('-DUSE_HEADER_HACKS')) - true - end and (have_library('ffi') || have_library('libffi')) -end or -begin + $defs.push('-DUSE_HEADER_HACKS') + have_ffi_header = true + end + if have_ffi_header && (have_library('ffi') || have_library('libffi')) + have_libffi = true + end +end + +unless have_libffi # for https://github.com/ruby/fiddle - if bundle && File.exist?("../../bin/extlibs.rb") + extlibs_rb = File.expand_path("../../bin/extlibs.rb", $srcdir) + if bundle && File.exist?(extlibs_rb) require "fileutils" require_relative "../../bin/extlibs" extlibs = ExtLibs.new @@ -28,31 +78,32 @@ Dir.glob("#{$srcdir}/libffi-*/").each{|dir| FileUtils.rm_rf(dir)} extlibs.run(["--cache=#{cache_dir}", ext_dir]) end - ver = bundle != false && - Dir.glob("#{$srcdir}/libffi-*/") - .map {|n| File.basename(n)} - .max_by {|n| n.scan(/\d+/).map(&:to_i)} - unless ver + if bundle != false + libffi_package_name = Dir.glob("#{$srcdir}/libffi-*/") + .map {|n| File.basename(n)} + .max_by {|n| n.scan(/\d+/).map(&:to_i)} + end + unless libffi_package_name raise "missing libffi. Please install libffi." end - srcdir = "#{$srcdir}/#{ver}" + libffi_srcdir = "#{$srcdir}/#{libffi_package_name}" ffi_header = 'ffi.h' libffi = Struct.new(*%I[dir srcdir builddir include lib a cflags ldflags opt arch]).new - libffi.dir = ver + libffi.dir = libffi_package_name if $srcdir == "." - libffi.builddir = "#{ver}/#{RUBY_PLATFORM}" + libffi.builddir = libffi_package_name libffi.srcdir = "." else libffi.builddir = libffi.dir - libffi.srcdir = relative_from(srcdir, "..") + libffi.srcdir = relative_from(libffi_srcdir, "..") end libffi.include = "#{libffi.builddir}/include" libffi.lib = "#{libffi.builddir}/.libs" libffi.a = "#{libffi.lib}/libffi_convenience.#{$LIBEXT}" nowarn = CONFIG.merge("warnflags"=>"") libffi.cflags = RbConfig.expand("$(CFLAGS)".dup, nowarn) - ver = ver[/libffi-(.*)/, 1] + libffi_version = libffi_package_name[/libffi-(.*)/, 1] FileUtils.mkdir_p(libffi.dir) libffi.opt = CONFIG['configure_args'][/'(-C)'/, 1] @@ -81,7 +132,6 @@ args.concat %W[ --srcdir=#{libffi.srcdir} --host=#{libffi.arch} - --enable-builddir=#{RUBY_PLATFORM} ] args << ($enable_shared || !$static ? '--enable-shared' : '--enable-static') args << libffi.opt if libffi.opt @@ -98,7 +148,7 @@ begin IO.copy_stream(libffi.dir + "/config.log", Logging.instance_variable_get(:@logfile)) rescue SystemCallError => e - Logfile.message("%s\n", e.message) + Logging.message("%s\n", e.message) end raise "failed to configure libffi. Please install libffi." end @@ -107,18 +157,37 @@ FileUtils.rm_f("#{libffi.include}/ffitarget.h") end unless File.file?("#{libffi.include}/ffitarget.h") - FileUtils.cp("#{srcdir}/src/x86/ffitarget.h", libffi.include, preserve: true) + FileUtils.cp("#{libffi_srcdir}/src/x86/ffitarget.h", libffi.include, preserve: true) end $INCFLAGS << " -I" << libffi.include end -if ver - ver = ver.gsub(/-rc\d+/, '') # If ver contains rc version, just ignored. - ver = (ver.split('.') + [0,0])[0,3] - $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ '%d%03d%03d' % ver }}) +if libffi_version + # If libffi_version contains rc version, just ignored. + libffi_version = libffi_version.gsub(/-rc\d+/, '') + libffi_version = (libffi_version.split('.').map(&:to_i) + [0,0])[0,3] + $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ '%d%03d%03d' % libffi_version }}) + warn "libffi_version: #{libffi_version.join('.')}" +end + +case +when $mswin, $mingw, (libffi_version && (libffi_version <=> [3, 2]) >= 0) + $defs << "-DUSE_FFI_CLOSURE_ALLOC=1" +when (libffi_version && (libffi_version <=> [3, 2]) < 0) +else + have_func('ffi_closure_alloc', ffi_header) +end + +if libffi_version + if (libffi_version <=> [3, 0, 11]) >= 0 + $defs << "-DHAVE_FFI_PREP_CIF_VAR" + end +else + have_func('ffi_prep_cif_var', ffi_header) end have_header 'sys/mman.h' +have_header 'link.h' if have_header "dlfcn.h" have_library "dl" @@ -128,10 +197,14 @@ end have_func "dlerror" + have_func "dlinfo" + have_const("RTLD_DI_LINKMAP", "dlfcn.h") elsif have_header "windows.h" - %w{ LoadLibrary FreeLibrary GetProcAddress }.each do |func| + %w{ LoadLibrary FreeLibrary GetProcAddress GetModuleFileName }.each do |func| abort "missing function #{func}" unless have_func(func) end + + have_library "ws2_32" end have_const('FFI_STDCALL', ffi_header) @@ -142,11 +215,13 @@ if /^\#define\s+SIZEOF_#{type}\s+(SIZEOF_(.+)|\d+)/ =~ config if size = $2 and size != 'VOIDP' size = types.fetch(size) {size} - $defs << format("-DTYPE_%s=TYPE_%s", signed||type, size) + $defs << "-DTYPE_#{signed||type}=TYPE_#{size}" end if signed check_signedness(type.downcase, "stddef.h") end + else + check_signedness(type.downcase, "stddef.h") end end @@ -154,7 +229,6 @@ $LOCAL_LIBS.prepend("./#{libffi.a} ").strip! # to exts.mk $INCFLAGS.gsub!(/-I#{libffi.dir}/, '-I$(LIBFFI_DIR)') end -$INCFLAGS << " -I$(top_srcdir)" create_makefile 'fiddle' do |conf| if !libffi next conf << "LIBFFI_CLEAN = none\n" diff --git a/ruby/ext/fiddle/extlibs b/ruby/ext/fiddle/extlibs index 1f0c9348e..68dac46a9 100644 --- a/ruby/ext/fiddle/extlibs +++ b/ruby/ext/fiddle/extlibs @@ -1,5 +1,13 @@ -https://ftp.osuosl.org/pub/blfs/conglomeration/libffi/libffi-3.2.1.tar.gz \ +ver = 3.2.1 +pkg = libffi-$(ver) + +https://ftp.osuosl.org/pub/blfs/conglomeration/libffi/$(pkg).tar.gz \ md5:83b89587607e3eb65c70d361f13bab43 \ sha512:980ca30a8d76f963fca722432b1fe5af77d7a4e4d2eac5144fbc5374d4c596609a293440573f4294207e1bdd9fda80ad1e1cafb2ffb543df5a275bc3bd546483 \ # - win32/libffi-3.2.1-mswin.patch -p0 + win32/$(pkg)-mswin.patch -p0 + +$(pkg)/config.guess -> /tool/config.guess +$(pkg)/config.sub -> /tool/config.sub + +! chdir: $(pkg)| autoconf || exit 0 diff --git a/ruby/ext/fiddle/fiddle.c b/ruby/ext/fiddle/fiddle.c index 9f3d1537d..a8b512326 100644 --- a/ruby/ext/fiddle/fiddle.c +++ b/ruby/ext/fiddle/fiddle.c @@ -1,41 +1,15 @@ #include VALUE mFiddle; +VALUE rb_eFiddleDLError; VALUE rb_eFiddleError; -#ifndef TYPE_SSIZE_T -# if SIZEOF_SIZE_T == SIZEOF_INT -# define TYPE_SSIZE_T TYPE_INT -# elif SIZEOF_SIZE_T == SIZEOF_LONG -# define TYPE_SSIZE_T TYPE_LONG -# elif defined HAVE_LONG_LONG && SIZEOF_SIZE_T == SIZEOF_LONG_LONG -# define TYPE_SSIZE_T TYPE_LONG_LONG -# endif -#endif -#define TYPE_SIZE_T (-1*SIGNEDNESS_OF_SIZE_T*TYPE_SSIZE_T) - -#ifndef TYPE_PTRDIFF_T -# if SIZEOF_PTRDIFF_T == SIZEOF_INT -# define TYPE_PTRDIFF_T TYPE_INT -# elif SIZEOF_PTRDIFF_T == SIZEOF_LONG -# define TYPE_PTRDIFF_T TYPE_LONG -# elif defined HAVE_LONG_LONG && SIZEOF_PTRDIFF_T == SIZEOF_LONG_LONG -# define TYPE_PTRDIFF_T TYPE_LONG_LONG -# endif -#endif +void Init_fiddle_pointer(void); +void Init_fiddle_pinned(void); -#ifndef TYPE_INTPTR_T -# if SIZEOF_INTPTR_T == SIZEOF_INT -# define TYPE_INTPTR_T TYPE_INT -# elif SIZEOF_INTPTR_T == SIZEOF_LONG -# define TYPE_INTPTR_T TYPE_LONG -# elif defined HAVE_LONG_LONG && SIZEOF_INTPTR_T == SIZEOF_LONG_LONG -# define TYPE_INTPTR_T TYPE_LONG_LONG -# endif +#ifdef HAVE_RUBY_MEMORY_VIEW_H +void Init_fiddle_memory_view(void); #endif -#define TYPE_UINTPTR_T (-TYPE_INTPTR_T) - -void Init_fiddle_pointer(void); /* * call-seq: Fiddle.malloc(size) @@ -47,8 +21,7 @@ static VALUE rb_fiddle_malloc(VALUE self, VALUE size) { void *ptr; - - ptr = (void*)ruby_xmalloc(NUM2SIZET(size)); + ptr = (void*)ruby_xcalloc(1, NUM2SIZET(size)); return PTR2NUM(ptr); } @@ -163,12 +136,33 @@ Init_fiddle(void) */ mFiddle = rb_define_module("Fiddle"); + /* + * Document-class: Fiddle::Error + * + * Generic error class for Fiddle + */ + rb_eFiddleError = rb_define_class_under(mFiddle, "Error", rb_eStandardError); + + /* + * Ruby installed by RubyInstaller for Windows always require + * bundled Fiddle because ruby_installer/runtime/dll_directory.rb + * requires Fiddle. It's used by + * rubygems/defaults/operating_system.rb. It means that the + * bundled Fiddle is always required on initialization. + * + * We just remove existing Fiddle::DLError here to override + * the bundled Fiddle. + */ + if (rb_const_defined(mFiddle, rb_intern("DLError"))) { + rb_const_remove(mFiddle, rb_intern("DLError")); + } + /* * Document-class: Fiddle::DLError * * standard dynamic load exception */ - rb_eFiddleError = rb_define_class_under(mFiddle, "DLError", rb_eStandardError); + rb_eFiddleDLError = rb_define_class_under(mFiddle, "DLError", rb_eFiddleError); /* Document-const: TYPE_VOID * @@ -214,6 +208,38 @@ Init_fiddle(void) rb_define_const(mFiddle, "TYPE_LONG_LONG", INT2NUM(TYPE_LONG_LONG)); #endif +#ifdef TYPE_INT8_T + /* Document-const: TYPE_INT8_T + * + * C type - int8_t + */ + rb_define_const(mFiddle, "TYPE_INT8_T", INT2NUM(TYPE_INT8_T)); +#endif + +#ifdef TYPE_INT16_T + /* Document-const: TYPE_INT16_T + * + * C type - int16_t + */ + rb_define_const(mFiddle, "TYPE_INT16_T", INT2NUM(TYPE_INT16_T)); +#endif + +#ifdef TYPE_INT32_T + /* Document-const: TYPE_INT32_T + * + * C type - int32_t + */ + rb_define_const(mFiddle, "TYPE_INT32_T", INT2NUM(TYPE_INT32_T)); +#endif + +#ifdef TYPE_INT64_T + /* Document-const: TYPE_INT64_T + * + * C type - int64_t + */ + rb_define_const(mFiddle, "TYPE_INT64_T", INT2NUM(TYPE_INT64_T)); +#endif + /* Document-const: TYPE_FLOAT * * C type - float @@ -226,6 +252,20 @@ Init_fiddle(void) */ rb_define_const(mFiddle, "TYPE_DOUBLE", INT2NUM(TYPE_DOUBLE)); +#ifdef HAVE_FFI_PREP_CIF_VAR + /* Document-const: TYPE_VARIADIC + * + * C type - ... + */ + rb_define_const(mFiddle, "TYPE_VARIADIC", INT2NUM(TYPE_VARIADIC)); +#endif + + /* Document-const: TYPE_CONST_STRING + * + * C type - const char* ('\0' terminated const char*) + */ + rb_define_const(mFiddle, "TYPE_CONST_STRING", INT2NUM(TYPE_CONST_STRING)); + /* Document-const: TYPE_SIZE_T * * C type - size_t @@ -294,6 +334,30 @@ Init_fiddle(void) rb_define_const(mFiddle, "ALIGN_LONG_LONG", INT2NUM(ALIGN_LONG_LONG)); #endif + /* Document-const: ALIGN_INT8_T + * + * The alignment size of a int8_t + */ + rb_define_const(mFiddle, "ALIGN_INT8_T", INT2NUM(ALIGN_INT8_T)); + + /* Document-const: ALIGN_INT16_T + * + * The alignment size of a int16_t + */ + rb_define_const(mFiddle, "ALIGN_INT16_T", INT2NUM(ALIGN_INT16_T)); + + /* Document-const: ALIGN_INT32_T + * + * The alignment size of a int32_t + */ + rb_define_const(mFiddle, "ALIGN_INT32_T", INT2NUM(ALIGN_INT32_T)); + + /* Document-const: ALIGN_INT64_T + * + * The alignment size of a int64_t + */ + rb_define_const(mFiddle, "ALIGN_INT64_T", INT2NUM(ALIGN_INT64_T)); + /* Document-const: ALIGN_FLOAT * * The alignment size of a float @@ -384,6 +448,30 @@ Init_fiddle(void) rb_define_const(mFiddle, "SIZEOF_LONG_LONG", INT2NUM(sizeof(LONG_LONG))); #endif + /* Document-const: SIZEOF_INT8_T + * + * size of a int8_t + */ + rb_define_const(mFiddle, "SIZEOF_INT8_T", INT2NUM(sizeof(int8_t))); + + /* Document-const: SIZEOF_INT16_T + * + * size of a int16_t + */ + rb_define_const(mFiddle, "SIZEOF_INT16_T", INT2NUM(sizeof(int16_t))); + + /* Document-const: SIZEOF_INT32_T + * + * size of a int32_t + */ + rb_define_const(mFiddle, "SIZEOF_INT32_T", INT2NUM(sizeof(int32_t))); + + /* Document-const: SIZEOF_INT64_T + * + * size of a int64_t + */ + rb_define_const(mFiddle, "SIZEOF_INT64_T", INT2NUM(sizeof(int64_t))); + /* Document-const: SIZEOF_FLOAT * * size of a float @@ -426,6 +514,12 @@ Init_fiddle(void) */ rb_define_const(mFiddle, "SIZEOF_UINTPTR_T", INT2NUM(sizeof(uintptr_t))); + /* Document-const: SIZEOF_CONST_STRING + * + * size of a const char* + */ + rb_define_const(mFiddle, "SIZEOF_CONST_STRING", INT2NUM(sizeof(const char*))); + /* Document-const: RUBY_FREE * * Address of the ruby_xfree() function @@ -450,5 +544,10 @@ Init_fiddle(void) Init_fiddle_closure(); Init_fiddle_handle(); Init_fiddle_pointer(); + Init_fiddle_pinned(); + +#ifdef HAVE_RUBY_MEMORY_VIEW_H + Init_fiddle_memory_view(); +#endif } /* vim: set noet sws=4 sw=4: */ diff --git a/ruby/ext/fiddle/fiddle.gemspec b/ruby/ext/fiddle/fiddle.gemspec index b29f4ec78..a9c0ec402 100644 --- a/ruby/ext/fiddle/fiddle.gemspec +++ b/ruby/ext/fiddle/fiddle.gemspec @@ -1,23 +1,62 @@ # frozen_string_literal: true + +version_module = Module.new do + version_rb = File.join(__dir__, "lib/fiddle/version.rb") + module_eval(File.read(version_rb), version_rb, __LINE__) +end + Gem::Specification.new do |spec| spec.name = "fiddle" - spec.version = '1.0.0' + spec.version = version_module::Fiddle::VERSION spec.authors = ["Aaron Patterson", "SHIBATA Hiroshi"] spec.email = ["aaron@tenderlovemaking.com", "hsbt@ruby-lang.org"] spec.summary = %q{A libffi wrapper for Ruby.} spec.description = %q{A libffi wrapper for Ruby.} spec.homepage = "https://github.com/ruby/fiddle" - spec.license = "BSD-2-Clause" + spec.licenses = ["Ruby", "BSD-2-Clause"] - spec.files = [".gitignore", ".travis.yml", "Gemfile", "LICENSE.txt", "README.md", "Rakefile", "bin/console", "bin/setup", "ext/fiddle/closure.c", "ext/fiddle/closure.h", "ext/fiddle/conversions.c", "ext/fiddle/conversions.h", "ext/fiddle/extconf.rb", "ext/fiddle/extlibs", "ext/fiddle/fiddle.c", "ext/fiddle/fiddle.h", "ext/fiddle/function.c", "ext/fiddle/function.h", "ext/fiddle/handle.c", "ext/fiddle/pointer.c", "ext/fiddle/win32/fficonfig.h", "ext/fiddle/win32/libffi-3.2.1-mswin.patch", "ext/fiddle/win32/libffi-config.rb", "ext/fiddle/win32/libffi.mk.tmpl", "fiddle.gemspec", "lib/fiddle.rb", "lib/fiddle/closure.rb", "lib/fiddle/cparser.rb", "lib/fiddle/function.rb", "lib/fiddle/import.rb", "lib/fiddle/pack.rb", "lib/fiddle/struct.rb", "lib/fiddle/types.rb", "lib/fiddle/value.rb"] - spec.bindir = "exe" - spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.files = [ + "LICENSE.txt", + "README.md", + "Rakefile", + "bin/downloader.rb", + "bin/extlibs.rb", + "ext/fiddle/closure.c", + "ext/fiddle/closure.h", + "ext/fiddle/conversions.c", + "ext/fiddle/conversions.h", + "ext/fiddle/depend", + "ext/fiddle/extconf.rb", + "ext/fiddle/extlibs", + "ext/fiddle/fiddle.c", + "ext/fiddle/fiddle.h", + "ext/fiddle/function.c", + "ext/fiddle/function.h", + "ext/fiddle/handle.c", + "ext/fiddle/memory_view.c", + "ext/fiddle/pinned.c", + "ext/fiddle/pointer.c", + "ext/fiddle/win32/fficonfig.h", + "ext/fiddle/win32/libffi-3.2.1-mswin.patch", + "ext/fiddle/win32/libffi-config.rb", + "ext/fiddle/win32/libffi.mk.tmpl", + "fiddle.gemspec", + "lib/fiddle.rb", + "lib/fiddle/closure.rb", + "lib/fiddle/cparser.rb", + "lib/fiddle/function.rb", + "lib/fiddle/import.rb", + "lib/fiddle/pack.rb", + "lib/fiddle/struct.rb", + "lib/fiddle/types.rb", + "lib/fiddle/value.rb", + "lib/fiddle/version.rb", + ] spec.require_paths = ["lib"] + spec.extensions = ["ext/fiddle/extconf.rb"] - spec.required_ruby_version = ">= 2.3.0" + spec.required_ruby_version = ">= 2.5.0" - spec.add_development_dependency "bundler" - spec.add_development_dependency "rake" - spec.add_development_dependency "rake-compiler" + spec.metadata["msys2_mingw_dependencies"] = "libffi" end diff --git a/ruby/ext/fiddle/fiddle.h b/ruby/ext/fiddle/fiddle.h index d2583c1cb..9de62a58c 100644 --- a/ruby/ext/fiddle/fiddle.h +++ b/ruby/ext/fiddle/fiddle.h @@ -12,6 +12,10 @@ #include #endif +#if defined(HAVE_LINK_H) +# include +#endif + #if defined(HAVE_DLFCN_H) # include # /* some stranger systems may not define all of these */ @@ -58,38 +62,38 @@ # error "CHAR_BIT not supported" #endif -# if SIZEOF_SHORT == 2 -# define ffi_type_ushort ffi_type_uint16 -# define ffi_type_sshort ffi_type_sint16 -# elif SIZEOF_SHORT == 4 -# define ffi_type_ushort ffi_type_uint32 -# define ffi_type_sshort ffi_type_sint32 -# else -# error "short size not supported" -# endif +#if SIZEOF_SHORT == 2 +# define ffi_type_ushort ffi_type_uint16 +# define ffi_type_sshort ffi_type_sint16 +#elif SIZEOF_SHORT == 4 +# define ffi_type_ushort ffi_type_uint32 +# define ffi_type_sshort ffi_type_sint32 +#else +# error "short size not supported" +#endif -# if SIZEOF_INT == 2 -# define ffi_type_uint ffi_type_uint16 -# define ffi_type_sint ffi_type_sint16 -# elif SIZEOF_INT == 4 -# define ffi_type_uint ffi_type_uint32 -# define ffi_type_sint ffi_type_sint32 -# elif SIZEOF_INT == 8 -# define ffi_type_uint ffi_type_uint64 -# define ffi_type_sint ffi_type_sint64 -# else -# error "int size not supported" -# endif +#if SIZEOF_INT == 2 +# define ffi_type_uint ffi_type_uint16 +# define ffi_type_sint ffi_type_sint16 +#elif SIZEOF_INT == 4 +# define ffi_type_uint ffi_type_uint32 +# define ffi_type_sint ffi_type_sint32 +#elif SIZEOF_INT == 8 +# define ffi_type_uint ffi_type_uint64 +# define ffi_type_sint ffi_type_sint64 +#else +# error "int size not supported" +#endif -# if SIZEOF_LONG == 4 -# define ffi_type_ulong ffi_type_uint32 -# define ffi_type_slong ffi_type_sint32 -# elif SIZEOF_LONG == 8 -# define ffi_type_ulong ffi_type_uint64 -# define ffi_type_slong ffi_type_sint64 -# else -# error "long size not supported" -# endif +#if SIZEOF_LONG == 4 +# define ffi_type_ulong ffi_type_uint32 +# define ffi_type_slong ffi_type_sint32 +#elif SIZEOF_LONG == 8 +# define ffi_type_ulong ffi_type_uint64 +# define ffi_type_slong ffi_type_sint64 +#else +# error "long size not supported" +#endif #if HAVE_LONG_LONG # if SIZEOF_LONG_LONG == 8 @@ -115,12 +119,67 @@ #endif #define TYPE_FLOAT 7 #define TYPE_DOUBLE 8 +#define TYPE_VARIADIC 9 +#define TYPE_CONST_STRING 10 + +#define TYPE_INT8_T TYPE_CHAR +#if SIZEOF_SHORT == 2 +# define TYPE_INT16_T TYPE_SHORT +#elif SIZEOF_INT == 2 +# define TYPE_INT16_T TYPE_INT +#endif +#if SIZEOF_SHORT == 4 +# define TYPE_INT32_T TYPE_SHORT +#elif SIZEOF_INT == 4 +# define TYPE_INT32_T TYPE_INT +#elif SIZEOF_LONG == 4 +# define TYPE_INT32_T TYPE_LONG +#endif +#if SIZEOF_INT == 8 +# define TYPE_INT64_T TYPE_INT +#elif SIZEOF_LONG == 8 +# define TYPE_INT64_T TYPE_LONG +#elif defined(TYPE_LONG_LONG) +# define TYPE_INT64_T TYPE_LONG_LONG +#endif + +#ifndef TYPE_SSIZE_T +# if SIZEOF_SIZE_T == SIZEOF_INT +# define TYPE_SSIZE_T TYPE_INT +# elif SIZEOF_SIZE_T == SIZEOF_LONG +# define TYPE_SSIZE_T TYPE_LONG +# elif defined HAVE_LONG_LONG && SIZEOF_SIZE_T == SIZEOF_LONG_LONG +# define TYPE_SSIZE_T TYPE_LONG_LONG +# endif +#endif +#define TYPE_SIZE_T (-1*SIGNEDNESS_OF_SIZE_T*TYPE_SSIZE_T) + +#ifndef TYPE_PTRDIFF_T +# if SIZEOF_PTRDIFF_T == SIZEOF_INT +# define TYPE_PTRDIFF_T TYPE_INT +# elif SIZEOF_PTRDIFF_T == SIZEOF_LONG +# define TYPE_PTRDIFF_T TYPE_LONG +# elif defined HAVE_LONG_LONG && SIZEOF_PTRDIFF_T == SIZEOF_LONG_LONG +# define TYPE_PTRDIFF_T TYPE_LONG_LONG +# endif +#endif + +#ifndef TYPE_INTPTR_T +# if SIZEOF_INTPTR_T == SIZEOF_INT +# define TYPE_INTPTR_T TYPE_INT +# elif SIZEOF_INTPTR_T == SIZEOF_LONG +# define TYPE_INTPTR_T TYPE_LONG +# elif defined HAVE_LONG_LONG && SIZEOF_INTPTR_T == SIZEOF_LONG_LONG +# define TYPE_INTPTR_T TYPE_LONG_LONG +# endif +#endif +#define TYPE_UINTPTR_T (-TYPE_INTPTR_T) #define ALIGN_OF(type) offsetof(struct {char align_c; type align_x;}, align_x) #define ALIGN_VOIDP ALIGN_OF(void*) -#define ALIGN_SHORT ALIGN_OF(short) #define ALIGN_CHAR ALIGN_OF(char) +#define ALIGN_SHORT ALIGN_OF(short) #define ALIGN_INT ALIGN_OF(int) #define ALIGN_LONG ALIGN_OF(long) #if HAVE_LONG_LONG @@ -129,10 +188,18 @@ #define ALIGN_FLOAT ALIGN_OF(float) #define ALIGN_DOUBLE ALIGN_OF(double) +#define ALIGN_INT8_T ALIGN_OF(int8_t) +#define ALIGN_INT16_T ALIGN_OF(int16_t) +#define ALIGN_INT32_T ALIGN_OF(int32_t) +#define ALIGN_INT64_T ALIGN_OF(int64_t) + extern VALUE mFiddle; -extern VALUE rb_eFiddleError; +extern VALUE rb_eFiddleDLError; VALUE rb_fiddle_new_function(VALUE address, VALUE arg_types, VALUE ret_type); +typedef void (*rb_fiddle_freefunc_t)(void*); +VALUE rb_fiddle_ptr_new_wrap(void *ptr, long size, rb_fiddle_freefunc_t func, VALUE wrap0, VALUE wrap1); + #endif /* vim: set noet sws=4 sw=4: */ diff --git a/ruby/ext/fiddle/function.c b/ruby/ext/fiddle/function.c index 994402e26..274d181d1 100644 --- a/ruby/ext/fiddle/function.c +++ b/ruby/ext/fiddle/function.c @@ -1,6 +1,8 @@ #include #include +#include + #ifdef PRIsVALUE # define RB_OBJ_CLASSNAME(obj) rb_obj_class(obj) # define RB_OBJ_STRING(obj) (obj) @@ -19,21 +21,21 @@ VALUE cFiddleFunction; #define Check_Max_Args_Long(name, len) \ Check_Max_Args_(name, len, "l") #define Check_Max_Args_(name, len, fmt) \ - if ((size_t)(len) < MAX_ARGS) { \ - /* OK */ \ - } \ - else { \ - rb_raise(rb_eTypeError, \ - name" is so large that it can cause integer overflow (%"fmt"d)", \ - (len)); \ - } + do { \ + if ((size_t)(len) >= MAX_ARGS) { \ + rb_raise(rb_eTypeError, \ + "%s is so large " \ + "that it can cause integer overflow (%"fmt"d)", \ + (name), (len)); \ + } \ + } while (0) static void deallocate(void *p) { - ffi_cif *ptr = p; - if (ptr->arg_types) xfree(ptr->arg_types); - xfree(ptr); + ffi_cif *cif = p; + if (cif->arg_types) xfree(cif->arg_types); + xfree(cif); } static size_t @@ -75,74 +77,114 @@ rb_fiddle_new_function(VALUE address, VALUE arg_types, VALUE ret_type) return rb_class_new_instance(3, argv, cFiddleFunction); } -static int -parse_keyword_arg_i(VALUE key, VALUE value, VALUE self) +static VALUE +normalize_argument_types(const char *name, + VALUE arg_types, + bool *is_variadic) { - if (key == ID2SYM(rb_intern("name"))) { - rb_iv_set(self, "@name", value); - } else { - rb_raise(rb_eArgError, "unknown keyword: %"PRIsVALUE, - RB_OBJ_STRING(key)); + VALUE normalized_arg_types; + int i; + int n_arg_types; + *is_variadic = false; + + Check_Type(arg_types, T_ARRAY); + n_arg_types = RARRAY_LENINT(arg_types); + Check_Max_Args(name, n_arg_types); + + normalized_arg_types = rb_ary_new_capa(n_arg_types); + for (i = 0; i < n_arg_types; i++) { + VALUE arg_type = RARRAY_AREF(arg_types, i); + int c_arg_type; + arg_type = rb_fiddle_type_ensure(arg_type); + c_arg_type = NUM2INT(arg_type); + if (c_arg_type == TYPE_VARIADIC) { + if (i != n_arg_types - 1) { + rb_raise(rb_eArgError, + "Fiddle::TYPE_VARIADIC must be the last argument type: " + "%"PRIsVALUE, + arg_types); + } + *is_variadic = true; + break; + } + else { + (void)INT2FFI_TYPE(c_arg_type); /* raise */ + } + rb_ary_push(normalized_arg_types, INT2FIX(c_arg_type)); } - return ST_CONTINUE; + + /* freeze to prevent inconsistency at calling #to_int later */ + OBJ_FREEZE(normalized_arg_types); + return normalized_arg_types; } static VALUE initialize(int argc, VALUE argv[], VALUE self) { ffi_cif * cif; - ffi_type **arg_types, *rtype; - ffi_status result; - VALUE ptr, args, ret_type, abi, kwds, ary; - int i, len; - int nabi; + VALUE ptr, arg_types, ret_type, abi, kwargs; + VALUE name = Qnil; + VALUE need_gvl = Qfalse; + int c_ret_type; + bool is_variadic = false; + ffi_abi c_ffi_abi; void *cfunc; - rb_scan_args(argc, argv, "31:", &ptr, &args, &ret_type, &abi, &kwds); + rb_scan_args(argc, argv, "31:", &ptr, &arg_types, &ret_type, &abi, &kwargs); rb_iv_set(self, "@closure", ptr); + if (!NIL_P(kwargs)) { + enum { + kw_name, + kw_need_gvl, + kw_max_, + }; + static ID kw[kw_max_]; + VALUE args[kw_max_]; + if (!kw[0]) { + kw[kw_name] = rb_intern_const("name"); + kw[kw_need_gvl] = rb_intern_const("need_gvl"); + } + rb_get_kwargs(kwargs, kw, 0, kw_max_, args); + if (args[kw_name] != Qundef) { + name = args[kw_name]; + } + if (args[kw_need_gvl] != Qundef) { + need_gvl = args[kw_need_gvl]; + } + } + rb_iv_set(self, "@name", name); + rb_iv_set(self, "@need_gvl", need_gvl); + ptr = rb_Integer(ptr); cfunc = NUM2PTR(ptr); PTR2NUM(cfunc); - nabi = NIL_P(abi) ? FFI_DEFAULT_ABI : NUM2INT(abi); - abi = INT2FIX(nabi); - i = NUM2INT(ret_type); - rtype = INT2FFI_TYPE(i); - ret_type = INT2FIX(i); - - Check_Type(args, T_ARRAY); - len = RARRAY_LENINT(args); - Check_Max_Args("args", len); - ary = rb_ary_subseq(args, 0, len); - for (i = 0; i < RARRAY_LEN(args); i++) { - VALUE a = RARRAY_AREF(args, i); - int type = NUM2INT(a); - (void)INT2FFI_TYPE(type); /* raise */ - if (INT2FIX(type) != a) rb_ary_store(ary, i, INT2FIX(type)); + c_ffi_abi = NIL_P(abi) ? FFI_DEFAULT_ABI : NUM2INT(abi); + abi = INT2FIX(c_ffi_abi); + ret_type = rb_fiddle_type_ensure(ret_type); + c_ret_type = NUM2INT(ret_type); + (void)INT2FFI_TYPE(c_ret_type); /* raise */ + ret_type = INT2FIX(c_ret_type); + + arg_types = normalize_argument_types("argument types", + arg_types, + &is_variadic); +#ifndef HAVE_FFI_PREP_CIF_VAR + if (is_variadic) { + rb_raise(rb_eNotImpError, + "ffi_prep_cif_var() is required in libffi " + "for variadic arguments"); } - OBJ_FREEZE(ary); +#endif rb_iv_set(self, "@ptr", ptr); - rb_iv_set(self, "@args", args); + rb_iv_set(self, "@argument_types", arg_types); rb_iv_set(self, "@return_type", ret_type); rb_iv_set(self, "@abi", abi); - - if (!NIL_P(kwds)) rb_hash_foreach(kwds, parse_keyword_arg_i, self); + rb_iv_set(self, "@is_variadic", is_variadic ? Qtrue : Qfalse); TypedData_Get_Struct(self, ffi_cif, &function_data_type, cif); - - arg_types = xcalloc(len + 1, sizeof(ffi_type *)); - - for (i = 0; i < RARRAY_LEN(args); i++) { - int type = NUM2INT(RARRAY_AREF(args, i)); - arg_types[i] = INT2FFI_TYPE(type); - } - arg_types[len] = NULL; - - result = ffi_prep_cif(cif, nabi, len, rtype, arg_types); - - if (result) - rb_raise(rb_eRuntimeError, "error creating CIF %d", result); + cif->arg_types = NULL; return self; } @@ -169,52 +211,182 @@ function_call(int argc, VALUE argv[], VALUE self) { struct nogvl_ffi_call_args args = { 0 }; fiddle_generic *generic_args; - VALUE cfunc, types, cPointer; + VALUE cfunc; + VALUE abi; + VALUE arg_types; + VALUE cPointer; + VALUE is_variadic; + VALUE need_gvl; + int n_arg_types; + int n_fixed_args = 0; + int n_call_args = 0; int i; + int i_call; + VALUE converted_args = Qnil; VALUE alloc_buffer = 0; cfunc = rb_iv_get(self, "@ptr"); - types = rb_iv_get(self, "@args"); + abi = rb_iv_get(self, "@abi"); + arg_types = rb_iv_get(self, "@argument_types"); cPointer = rb_const_get(mFiddle, rb_intern("Pointer")); - - Check_Max_Args("number of arguments", argc); - if (argc != (i = RARRAY_LENINT(types))) { - rb_error_arity(argc, i, i); + is_variadic = rb_iv_get(self, "@is_variadic"); + need_gvl = rb_iv_get(self, "@need_gvl"); + + n_arg_types = RARRAY_LENINT(arg_types); + n_fixed_args = n_arg_types; + if (RTEST(is_variadic)) { + if (argc < n_arg_types) { + rb_error_arity(argc, n_arg_types, UNLIMITED_ARGUMENTS); + } + if (((argc - n_arg_types) % 2) != 0) { + rb_raise(rb_eArgError, + "variadic arguments must be type and value pairs: " + "%"PRIsVALUE, + rb_ary_new_from_values(argc, argv)); + } + n_call_args = n_arg_types + ((argc - n_arg_types) / 2); } + else { + if (argc != n_arg_types) { + rb_error_arity(argc, n_arg_types, n_arg_types); + } + n_call_args = n_arg_types; + } + Check_Max_Args("the number of arguments", n_call_args); TypedData_Get_Struct(self, ffi_cif, &function_data_type, args.cif); + if (is_variadic && args.cif->arg_types) { + xfree(args.cif->arg_types); + args.cif->arg_types = NULL; + } + + if (!args.cif->arg_types) { + VALUE fixed_arg_types = arg_types; + VALUE return_type; + int c_return_type; + ffi_type *ffi_return_type; + ffi_type **ffi_arg_types; + ffi_status result; + + arg_types = rb_ary_dup(fixed_arg_types); + for (i = n_fixed_args; i < argc; i += 2) { + VALUE arg_type = argv[i]; + int c_arg_type; + arg_type = rb_fiddle_type_ensure(arg_type); + c_arg_type = NUM2INT(arg_type); + (void)INT2FFI_TYPE(c_arg_type); /* raise */ + rb_ary_push(arg_types, INT2FIX(c_arg_type)); + } + + return_type = rb_iv_get(self, "@return_type"); + c_return_type = FIX2INT(return_type); + ffi_return_type = INT2FFI_TYPE(c_return_type); + + ffi_arg_types = xcalloc(n_call_args + 1, sizeof(ffi_type *)); + for (i_call = 0; i_call < n_call_args; i_call++) { + VALUE arg_type; + int c_arg_type; + arg_type = RARRAY_AREF(arg_types, i_call); + c_arg_type = FIX2INT(arg_type); + ffi_arg_types[i_call] = INT2FFI_TYPE(c_arg_type); + } + ffi_arg_types[i_call] = NULL; + + if (is_variadic) { +#ifdef HAVE_FFI_PREP_CIF_VAR + result = ffi_prep_cif_var(args.cif, + FIX2INT(abi), + n_fixed_args, + n_call_args, + ffi_return_type, + ffi_arg_types); +#else + /* This code is never used because ffi_prep_cif_var() + * availability check is done in #initialize. */ + result = FFI_BAD_TYPEDEF; +#endif + } + else { + result = ffi_prep_cif(args.cif, + FIX2INT(abi), + n_call_args, + ffi_return_type, + ffi_arg_types); + } + if (result != FFI_OK) { + xfree(ffi_arg_types); + args.cif->arg_types = NULL; + rb_raise(rb_eRuntimeError, "error creating CIF %d", result); + } + } + generic_args = ALLOCV(alloc_buffer, - (size_t)(argc + 1) * sizeof(void *) + (size_t)argc * sizeof(fiddle_generic)); + sizeof(fiddle_generic) * n_call_args + + sizeof(void *) * (n_call_args + 1)); args.values = (void **)((char *)generic_args + - (size_t)argc * sizeof(fiddle_generic)); - - for (i = 0; i < argc; i++) { - VALUE type = RARRAY_AREF(types, i); - VALUE src = argv[i]; - int argtype = FIX2INT(type); - - if (argtype == TYPE_VOIDP) { - if(NIL_P(src)) { - src = INT2FIX(0); - } else if(cPointer != CLASS_OF(src)) { - src = rb_funcall(cPointer, rb_intern("[]"), 1, src); - } - src = rb_Integer(src); - } - - VALUE2GENERIC(argtype, src, &generic_args[i]); - args.values[i] = (void *)&generic_args[i]; + sizeof(fiddle_generic) * n_call_args); + + for (i = 0, i_call = 0; + i < argc && i_call < n_call_args; + i++, i_call++) { + VALUE arg_type; + int c_arg_type; + VALUE original_src; + VALUE src; + arg_type = RARRAY_AREF(arg_types, i_call); + c_arg_type = FIX2INT(arg_type); + if (i >= n_fixed_args) { + i++; + } + src = argv[i]; + + if (c_arg_type == TYPE_VOIDP) { + if (NIL_P(src)) { + src = INT2FIX(0); + } + else if (cPointer != CLASS_OF(src)) { + src = rb_funcall(cPointer, rb_intern("[]"), 1, src); + if (NIL_P(converted_args)) { + converted_args = rb_ary_new(); + } + rb_ary_push(converted_args, src); + } + src = rb_Integer(src); + } + + original_src = src; + VALUE2GENERIC(c_arg_type, src, &generic_args[i_call]); + if (src != original_src) { + if (NIL_P(converted_args)) { + converted_args = rb_ary_new(); + } + rb_ary_push(converted_args, src); + } + args.values[i_call] = (void *)&generic_args[i_call]; } - args.values[argc] = NULL; + args.values[i_call] = NULL; args.fn = (void(*)(void))NUM2PTR(cfunc); - (void)rb_thread_call_without_gvl(nogvl_ffi_call, &args, 0, 0); + if (RTEST(need_gvl)) { + ffi_call(args.cif, args.fn, &(args.retval), args.values); + } + else { + (void)rb_thread_call_without_gvl(nogvl_ffi_call, &args, 0, 0); + } - rb_funcall(mFiddle, rb_intern("last_error="), 1, INT2NUM(errno)); + { + int errno_keep = errno; #if defined(_WIN32) - rb_funcall(mFiddle, rb_intern("win32_last_error="), 1, INT2NUM(errno)); + DWORD error = WSAGetLastError(); + int socket_error = WSAGetLastError(); + rb_funcall(mFiddle, rb_intern("win32_last_error="), 1, + ULONG2NUM(error)); + rb_funcall(mFiddle, rb_intern("win32_last_socket_error="), 1, + INT2NUM(socket_error)); #endif + rb_funcall(mFiddle, rb_intern("last_error="), 1, INT2NUM(errno_keep)); + } ALLOCV_END(alloc_buffer); @@ -287,6 +459,10 @@ Init_fiddle_function(void) * Caller must ensure the underlying function is called in a * thread-safe manner if running in a multi-threaded process. * + * Note that it is not thread-safe to use this method to + * directly or indirectly call many Ruby C-extension APIs unless + * you don't pass +need_gvl: true+ to Fiddle::Function#new. + * * For an example see Fiddle::Function * */ @@ -294,13 +470,20 @@ Init_fiddle_function(void) /* * Document-method: new - * call-seq: new(ptr, args, ret_type, abi = DEFAULT) + * call-seq: new(ptr, + * args, + * ret_type, + * abi = DEFAULT, + * name: nil, + * need_gvl: false) * * Constructs a Function object. * * +ptr+ is a referenced function, of a Fiddle::Handle * * +args+ is an Array of arguments, passed to the +ptr+ function * * +ret_type+ is the return type of the function * * +abi+ is the ABI of the function + * * +name+ is the name of the function + * * +need_gvl+ is whether GVL is needed to call the function * */ rb_define_method(cFiddleFunction, "initialize", initialize, -1); diff --git a/ruby/ext/fiddle/handle.c b/ruby/ext/fiddle/handle.c index 700924afb..76b90909d 100644 --- a/ruby/ext/fiddle/handle.c +++ b/ruby/ext/fiddle/handle.c @@ -74,14 +74,14 @@ rb_fiddle_handle_close(VALUE self) /* Check dlclose for successful return value */ if(ret) { #if defined(HAVE_DLERROR) - rb_raise(rb_eFiddleError, "%s", dlerror()); + rb_raise(rb_eFiddleDLError, "%s", dlerror()); #else - rb_raise(rb_eFiddleError, "could not close handle"); + rb_raise(rb_eFiddleDLError, "could not close handle"); #endif } return INT2NUM(ret); } - rb_raise(rb_eFiddleError, "dlclose() called too many times"); + rb_raise(rb_eFiddleDLError, "dlclose() called too many times"); UNREACHABLE; } @@ -177,12 +177,12 @@ rb_fiddle_handle_initialize(int argc, VALUE argv[], VALUE self) ptr = dlopen(clib, cflag); #if defined(HAVE_DLERROR) if( !ptr && (err = dlerror()) ){ - rb_raise(rb_eFiddleError, "%s", err); + rb_raise(rb_eFiddleDLError, "%s", err); } #else if( !ptr ){ err = dlerror(); - rb_raise(rb_eFiddleError, "%s", err); + rb_raise(rb_eFiddleDLError, "%s", err); } #endif TypedData_Get_Struct(self, struct dl_handle, &fiddle_handle_data_type, fiddle_handle); @@ -259,7 +259,21 @@ rb_fiddle_handle_to_i(VALUE self) struct dl_handle *fiddle_handle; TypedData_Get_Struct(self, struct dl_handle, &fiddle_handle_data_type, fiddle_handle); - return PTR2NUM(fiddle_handle); + return PTR2NUM(fiddle_handle->ptr); +} + +/* + * call-seq: to_ptr + * + * Returns the Fiddle::Pointer of this handle. + */ +static VALUE +rb_fiddle_handle_to_ptr(VALUE self) +{ + struct dl_handle *fiddle_handle; + + TypedData_Get_Struct(self, struct dl_handle, &fiddle_handle_data_type, fiddle_handle); + return rb_fiddle_ptr_new_wrap(fiddle_handle->ptr, 0, 0, self, 0); } static VALUE fiddle_handle_sym(void *handle, VALUE symbol); @@ -278,7 +292,7 @@ rb_fiddle_handle_sym(VALUE self, VALUE sym) TypedData_Get_Struct(self, struct dl_handle, &fiddle_handle_data_type, fiddle_handle); if( ! fiddle_handle->open ){ - rb_raise(rb_eFiddleError, "closed handle"); + rb_raise(rb_eFiddleDLError, "closed handle"); } return fiddle_handle_sym(fiddle_handle->ptr, sym); @@ -366,12 +380,54 @@ fiddle_handle_sym(void *handle, VALUE symbol) } #endif if( !func ){ - rb_raise(rb_eFiddleError, "unknown symbol \"%"PRIsVALUE"\"", symbol); + rb_raise(rb_eFiddleDLError, "unknown symbol \"%"PRIsVALUE"\"", symbol); } return PTR2NUM(func); } +/* + * call-seq: file_name + * + * Returns the file name of this handle. + */ +static VALUE +rb_fiddle_handle_file_name(VALUE self) +{ + struct dl_handle *fiddle_handle; + + TypedData_Get_Struct(self, struct dl_handle, &fiddle_handle_data_type, fiddle_handle); + +#if defined(HAVE_DLINFO) && defined(HAVE_CONST_RTLD_DI_LINKMAP) + { + struct link_map *lm = NULL; + int res = dlinfo(fiddle_handle->ptr, RTLD_DI_LINKMAP, &lm); + if (res == 0 && lm != NULL) { + return rb_str_new_cstr(lm->l_name); + } + else { +#if defined(HAVE_DLERROR) + rb_raise(rb_eFiddleDLError, "could not get handle file name: %s", dlerror()); +#else + rb_raise(rb_eFiddleDLError, "could not get handle file name"); +#endif + } + } +#elif defined(HAVE_GETMODULEFILENAME) + { + char filename[MAX_PATH]; + DWORD res = GetModuleFileName(fiddle_handle->ptr, filename, MAX_PATH); + if (res == 0) { + rb_raise(rb_eFiddleDLError, "could not get handle file name: %s", dlerror()); + } + return rb_str_new_cstr(filename); + } +#else + (void)fiddle_handle; + return Qnil; +#endif +} + void Init_fiddle_handle(void) { @@ -466,9 +522,11 @@ Init_fiddle_handle(void) rb_define_method(rb_cHandle, "initialize", rb_fiddle_handle_initialize, -1); rb_define_method(rb_cHandle, "to_i", rb_fiddle_handle_to_i, 0); + rb_define_method(rb_cHandle, "to_ptr", rb_fiddle_handle_to_ptr, 0); rb_define_method(rb_cHandle, "close", rb_fiddle_handle_close, 0); rb_define_method(rb_cHandle, "sym", rb_fiddle_handle_sym, 1); rb_define_method(rb_cHandle, "[]", rb_fiddle_handle_sym, 1); + rb_define_method(rb_cHandle, "file_name", rb_fiddle_handle_file_name, 0); rb_define_method(rb_cHandle, "disable_close", rb_fiddle_handle_disable_close, 0); rb_define_method(rb_cHandle, "enable_close", rb_fiddle_handle_enable_close, 0); rb_define_method(rb_cHandle, "close_enabled?", rb_fiddle_handle_close_enabled_p, 0); diff --git a/ruby/ext/fiddle/lib/fiddle.rb b/ruby/ext/fiddle/lib/fiddle.rb index e9aa7e50a..451298931 100644 --- a/ruby/ext/fiddle/lib/fiddle.rb +++ b/ruby/ext/fiddle/lib/fiddle.rb @@ -1,7 +1,9 @@ # frozen_string_literal: true + require 'fiddle.so' -require 'fiddle/function' require 'fiddle/closure' +require 'fiddle/function' +require 'fiddle/version' module Fiddle if WINDOWS @@ -15,6 +17,18 @@ def self.win32_last_error def self.win32_last_error= error Thread.current[:__FIDDLE_WIN32_LAST_ERROR__] = error end + + # Returns the last win32 socket +Error+ of the current executing + # +Thread+ or nil if none + def self.win32_last_socket_error + Thread.current[:__FIDDLE_WIN32_LAST_SOCKET_ERROR__] + end + + # Sets the last win32 socket +Error+ of the current executing + # +Thread+ to +error+ + def self.win32_last_socket_error= error + Thread.current[:__FIDDLE_WIN32_LAST_SOCKET_ERROR__] = error + end end # Returns the last +Error+ of the current executing +Thread+ or nil if none diff --git a/ruby/ext/fiddle/lib/fiddle/cparser.rb b/ruby/ext/fiddle/lib/fiddle/cparser.rb index cd0a64fef..93a05513c 100644 --- a/ruby/ext/fiddle/lib/fiddle/cparser.rb +++ b/ruby/ext/fiddle/lib/fiddle/cparser.rb @@ -35,12 +35,37 @@ module CParser def parse_struct_signature(signature, tymap=nil) if signature.is_a?(String) signature = split_arguments(signature, /[,;]/) + elsif signature.is_a?(Hash) + signature = [signature] end mems = [] tys = [] signature.each{|msig| - msig = compact(msig) + msig = compact(msig) if msig.is_a?(String) case msig + when Hash + msig.each do |struct_name, struct_signature| + struct_name = struct_name.to_s if struct_name.is_a?(Symbol) + struct_name = compact(struct_name) + struct_count = nil + if struct_name =~ /^([\w\*\s]+)\[(\d+)\]$/ + struct_count = $2.to_i + struct_name = $1 + end + if struct_signature.respond_to?(:entity_class) + struct_type = struct_signature + else + parsed_struct = parse_struct_signature(struct_signature, tymap) + struct_type = CStructBuilder.create(CStruct, *parsed_struct) + end + if struct_count + ty = [struct_type, struct_count] + else + ty = struct_type + end + mems.push([struct_name, struct_type.members]) + tys.push(ty) + end when /^[\w\*\s]+[\*\s](\w+)$/ mems.push($1) tys.push(parse_ctype(msig, tymap)) @@ -123,55 +148,97 @@ def parse_signature(signature, tymap=nil) # def parse_ctype(ty, tymap=nil) tymap ||= {} - case ty - when Array + if ty.is_a?(Array) return [parse_ctype(ty[0], tymap), ty[1]] + end + ty = ty.gsub(/\Aconst\s+/, "") + case ty when 'void' return TYPE_VOID - when /^(?:(?:signed\s+)?long\s+long(?:\s+int\s+)?|int64_t)(?:\s+\w+)?$/ - if( defined?(TYPE_LONG_LONG) ) - return TYPE_LONG_LONG - else + when /\A(?:(?:signed\s+)?long\s+long(?:\s+int\s+)?|int64_t)(?:\s+\w+)?\z/ + unless Fiddle.const_defined?(:TYPE_LONG_LONG) raise(RuntimeError, "unsupported type: #{ty}") end - when /^(?:unsigned\s+long\s+long(?:\s+int\s+)?|uint64_t)(?:\s+\w+)?$/ - if( defined?(TYPE_LONG_LONG) ) - return -TYPE_LONG_LONG - else + return TYPE_LONG_LONG + when /\A(?:unsigned\s+long\s+long(?:\s+int\s+)?|uint64_t)(?:\s+\w+)?\z/ + unless Fiddle.const_defined?(:TYPE_LONG_LONG) raise(RuntimeError, "unsupported type: #{ty}") end - when /^(?:signed\s+)?long(?:\s+int\s+)?(?:\s+\w+)?$/ + return -TYPE_LONG_LONG + when /\A(?:signed\s+)?long(?:\s+int\s+)?(?:\s+\w+)?\z/ return TYPE_LONG - when /^unsigned\s+long(?:\s+int\s+)?(?:\s+\w+)?$/ + when /\Aunsigned\s+long(?:\s+int\s+)?(?:\s+\w+)?\z/ return -TYPE_LONG - when /^(?:signed\s+)?int(?:\s+\w+)?$/ + when /\A(?:signed\s+)?int(?:\s+\w+)?\z/ return TYPE_INT - when /^(?:unsigned\s+int|uint)(?:\s+\w+)?$/ + when /\A(?:unsigned\s+int|uint)(?:\s+\w+)?\z/ return -TYPE_INT - when /^(?:signed\s+)?short(?:\s+int\s+)?(?:\s+\w+)?$/ + when /\A(?:signed\s+)?short(?:\s+int\s+)?(?:\s+\w+)?\z/ return TYPE_SHORT - when /^unsigned\s+short(?:\s+int\s+)?(?:\s+\w+)?$/ + when /\Aunsigned\s+short(?:\s+int\s+)?(?:\s+\w+)?\z/ return -TYPE_SHORT - when /^(?:signed\s+)?char(?:\s+\w+)?$/ + when /\A(?:signed\s+)?char(?:\s+\w+)?\z/ return TYPE_CHAR - when /^unsigned\s+char(?:\s+\w+)?$/ + when /\Aunsigned\s+char(?:\s+\w+)?\z/ return -TYPE_CHAR - when /^float(?:\s+\w+)?$/ + when /\Aint8_t(?:\s+\w+)?\z/ + unless Fiddle.const_defined?(:TYPE_INT8_T) + raise(RuntimeError, "unsupported type: #{ty}") + end + return TYPE_INT8_T + when /\Auint8_t(?:\s+\w+)?\z/ + unless Fiddle.const_defined?(:TYPE_INT8_T) + raise(RuntimeError, "unsupported type: #{ty}") + end + return -TYPE_INT8_T + when /\Aint16_t(?:\s+\w+)?\z/ + unless Fiddle.const_defined?(:TYPE_INT16_T) + raise(RuntimeError, "unsupported type: #{ty}") + end + return TYPE_INT16_T + when /\Auint16_t(?:\s+\w+)?\z/ + unless Fiddle.const_defined?(:TYPE_INT16_T) + raise(RuntimeError, "unsupported type: #{ty}") + end + return -TYPE_INT16_T + when /\Aint32_t(?:\s+\w+)?\z/ + unless Fiddle.const_defined?(:TYPE_INT32_T) + raise(RuntimeError, "unsupported type: #{ty}") + end + return TYPE_INT32_T + when /\Auint32_t(?:\s+\w+)?\z/ + unless Fiddle.const_defined?(:TYPE_INT32_T) + raise(RuntimeError, "unsupported type: #{ty}") + end + return -TYPE_INT32_T + when /\Aint64_t(?:\s+\w+)?\z/ + unless Fiddle.const_defined?(:TYPE_INT64_T) + raise(RuntimeError, "unsupported type: #{ty}") + end + return TYPE_INT64_T + when /\Auint64_t(?:\s+\w+)?\z/ + unless Fiddle.const_defined?(:TYPE_INT64_T) + raise(RuntimeError, "unsupported type: #{ty}") + end + return -TYPE_INT64_T + when /\Afloat(?:\s+\w+)?\z/ return TYPE_FLOAT - when /^double(?:\s+\w+)?$/ + when /\Adouble(?:\s+\w+)?\z/ return TYPE_DOUBLE - when /^size_t(?:\s+\w+)?$/ + when /\Asize_t(?:\s+\w+)?\z/ return TYPE_SIZE_T - when /^ssize_t(?:\s+\w+)?$/ + when /\Assize_t(?:\s+\w+)?\z/ return TYPE_SSIZE_T - when /^ptrdiff_t(?:\s+\w+)?$/ + when /\Aptrdiff_t(?:\s+\w+)?\z/ return TYPE_PTRDIFF_T - when /^intptr_t(?:\s+\w+)?$/ + when /\Aintptr_t(?:\s+\w+)?\z/ return TYPE_INTPTR_T - when /^uintptr_t(?:\s+\w+)?$/ + when /\Auintptr_t(?:\s+\w+)?\z/ return TYPE_UINTPTR_T when /\*/, /\[[\s\d]*\]/ return TYPE_VOIDP + when "..." + return TYPE_VARIADIC else ty = ty.split(' ', 2)[0] if( tymap[ty] ) @@ -186,7 +253,7 @@ def parse_ctype(ty, tymap=nil) def split_arguments(arguments, sep=',') return [] if arguments.strip == 'void' - arguments.scan(/([\w\*\s]+\(\*\w*\)\(.*?\)|[\w\*\s\[\]]+)(?:#{sep}\s*|$)/).collect {|m| m[0]} + arguments.scan(/([\w\*\s]+\(\*\w*\)\(.*?\)|[\w\*\s\[\]]+|\.\.\.)(?:#{sep}\s*|\z)/).collect {|m| m[0]} end def compact(signature) diff --git a/ruby/ext/fiddle/lib/fiddle/function.rb b/ruby/ext/fiddle/lib/fiddle/function.rb index dd5e04e41..dc2e3e6bf 100644 --- a/ruby/ext/fiddle/lib/fiddle/function.rb +++ b/ruby/ext/fiddle/lib/fiddle/function.rb @@ -10,9 +10,20 @@ class Function # The name of this function attr_reader :name + # Whether GVL is needed to call this function + def need_gvl? + @need_gvl + end + # The integer memory location of this function def to_i ptr.to_i end + + # Turn this function in to a proc + def to_proc + this = self + lambda { |*args| this.call(*args) } + end end end diff --git a/ruby/ext/fiddle/lib/fiddle/import.rb b/ruby/ext/fiddle/lib/fiddle/import.rb index 178ebb8c7..09ffcef54 100644 --- a/ruby/ext/fiddle/lib/fiddle/import.rb +++ b/ruby/ext/fiddle/lib/fiddle/import.rb @@ -83,11 +83,7 @@ def dlload(*libs) when Importer lib.handlers else - begin - Fiddle.dlopen(lib) - rescue DLError - raise(DLError, "can't load #{lib}") - end + Fiddle.dlopen(lib) end }.flatten() @handler = CompositeHandler.new(handles) @@ -121,6 +117,8 @@ def sizeof(ty) return SIZEOF_DOUBLE when TYPE_VOIDP return SIZEOF_VOIDP + when TYPE_CONST_STRING + return SIZEOF_CONST_STRING else if defined?(TYPE_LONG_LONG) and ty == TYPE_LONG_LONG diff --git a/ruby/ext/fiddle/lib/fiddle/struct.rb b/ruby/ext/fiddle/lib/fiddle/struct.rb index 7c0dedb39..6d05bbd74 100644 --- a/ruby/ext/fiddle/lib/fiddle/struct.rb +++ b/ruby/ext/fiddle/lib/fiddle/struct.rb @@ -4,20 +4,168 @@ require 'fiddle/pack' module Fiddle - # C struct shell + # A base class for objects representing a C structure class CStruct + include Enumerable + # accessor to Fiddle::CStructEntity def CStruct.entity_class CStructEntity end + + def self.offsetof(name, members, types) # :nodoc: + offset = 0 + worklist = name.split('.') + this_type = self + while search_name = worklist.shift + index = 0 + member_index = members.index(search_name) + + unless member_index + # Possibly a sub-structure + member_index = members.index { |member_name, _| + member_name == search_name + } + return unless member_index + end + + types.each { |type, count = 1| + orig_offset = offset + if type.respond_to?(:entity_class) + align = type.alignment + type_size = type.size + else + align = PackInfo::ALIGN_MAP[type] + type_size = PackInfo::SIZE_MAP[type] + end + + # Unions shouldn't advance the offset + if this_type.entity_class == CUnionEntity + type_size = 0 + end + + offset = PackInfo.align(orig_offset, align) + + if worklist.empty? + return offset if index == member_index + else + if index == member_index + subtype = types[member_index] + members = subtype.members + types = subtype.types + this_type = subtype + break + end + end + + offset += (type_size * count) + index += 1 + } + end + nil + end + + def each + return enum_for(__function__) unless block_given? + + self.class.members.each do |name,| + yield(self[name]) + end + end + + def each_pair + return enum_for(__function__) unless block_given? + + self.class.members.each do |name,| + yield(name, self[name]) + end + end + + def to_h + hash = {} + each_pair do |name, value| + hash[name] = unstruct(value) + end + hash + end + + def replace(another) + if another.nil? + self.class.members.each do |name,| + self[name] = nil + end + elsif another.respond_to?(:each_pair) + another.each_pair do |name, value| + self[name] = value + end + else + another.each do |name, value| + self[name] = value + end + end + self + end + + private + def unstruct(value) + case value + when CStruct + value.to_h + when Array + value.collect do |v| + unstruct(v) + end + else + value + end + end end - # C union shell + # A base class for objects representing a C union class CUnion # accessor to Fiddle::CUnionEntity def CUnion.entity_class CUnionEntity end + + def self.offsetof(name, members, types) # :nodoc: + 0 + end + end + + # Wrapper for arrays within a struct + class StructArray < Array + include ValueUtil + + def initialize(ptr, type, initial_values) + @ptr = ptr + @type = type + @is_struct = @type.respond_to?(:entity_class) + if @is_struct + super(initial_values) + else + @size = Fiddle::PackInfo::SIZE_MAP[type] + @pack_format = Fiddle::PackInfo::PACK_MAP[type] + super(initial_values.collect { |v| unsigned_value(v, type) }) + end + end + + def to_ptr + @ptr + end + + def []=(index, value) + if index < 0 || index >= size + raise IndexError, 'index %d outside of array bounds 0...%d' % [index, size] + end + + if @is_struct + self[index].replace(value) + else + to_ptr[index * @size, @size] = [value].pack(@pack_format) + super(index, value) + end + end end # Used to construct C classes (CUnion, CStruct, etc) @@ -35,7 +183,7 @@ module CStructBuilder # Fiddle::Importer#struct and Fiddle::Importer#union wrap this functionality in an # easy-to-use manner. # - # Example: + # Examples: # # require 'fiddle/struct' # require 'fiddle/cparser' @@ -46,47 +194,113 @@ module CStructBuilder # # MyStruct = Fiddle::CStructBuilder.create(Fiddle::CUnion, types, members) # - # obj = MyStruct.allocate + # MyStruct.malloc(Fiddle::RUBY_FREE) do |obj| + # ... + # end + # + # obj = MyStruct.malloc(Fiddle::RUBY_FREE) + # begin + # ... + # ensure + # obj.call_free + # end + # + # obj = MyStruct.malloc + # begin + # ... + # ensure + # Fiddle.free obj.to_ptr + # end # def create(klass, types, members) new_class = Class.new(klass){ - define_method(:initialize){|addr| - @entity = klass.entity_class.new(addr, types) + define_method(:initialize){|addr, func = nil| + if addr.is_a?(self.class.entity_class) + @entity = addr + else + @entity = self.class.entity_class.new(addr, types, func) + end @entity.assign_names(members) } + define_method(:[]) { |*args| @entity.send(:[], *args) } + define_method(:[]=) { |*args| @entity.send(:[]=, *args) } define_method(:to_ptr){ @entity } define_method(:to_i){ @entity.to_i } + define_singleton_method(:types) { types } + define_singleton_method(:members) { members } + + # Return the offset of a struct member given its name. + # For example: + # + # MyStruct = struct [ + # "int64_t i", + # "char c", + # ] + # + # MyStruct.offsetof("i") # => 0 + # MyStruct.offsetof("c") # => 8 + # + define_singleton_method(:offsetof) { |name| + klass.offsetof(name, members, types) + } members.each{|name| + name = name[0] if name.is_a?(Array) # name is a nested struct + next if method_defined?(name) define_method(name){ @entity[name] } define_method(name + "="){|val| @entity[name] = val } } - } - size = klass.entity_class.size(types) - new_class.module_eval(<<-EOS, __FILE__, __LINE__+1) - def new_class.size() - #{size} - end - def new_class.malloc() - addr = Fiddle.malloc(#{size}) - new(addr) + entity_class = klass.entity_class + alignment = entity_class.alignment(types) + size = entity_class.size(types) + define_singleton_method(:alignment) { alignment } + define_singleton_method(:size) { size } + define_singleton_method(:malloc) do |func=nil, &block| + if block + entity_class.malloc(types, func, size) do |entity| + block.call(new(entity)) + end + else + new(entity_class.malloc(types, func, size)) + end end - EOS + } return new_class end module_function :create end - # A C struct wrapper + # A pointer to a C structure class CStructEntity < Fiddle::Pointer include PackInfo include ValueUtil + def CStructEntity.alignment(types) + max = 1 + types.each do |type, count = 1| + if type.respond_to?(:entity_class) + n = type.alignment + else + n = ALIGN_MAP[type] + end + max = n if n > max + end + max + end + # Allocates a C struct with the +types+ provided. # - # When the instance is garbage collected, the C function +func+ is called. - def CStructEntity.malloc(types, func = nil) - addr = Fiddle.malloc(CStructEntity.size(types)) - CStructEntity.new(addr, types, func) + # See Fiddle::Pointer.malloc for memory management issues. + def CStructEntity.malloc(types, func = nil, size = size(types), &block) + if block_given? + super(size, func) do |struct| + struct.set_ctypes types + yield struct + end + else + struct = super(size, func) + struct.set_ctypes types + struct + end end # Returns the offset for the packed sizes for the given +types+. @@ -102,9 +316,15 @@ def CStructEntity.size(types) max_align = types.map { |type, count = 1| last_offset = offset - align = PackInfo::ALIGN_MAP[type] + if type.respond_to?(:entity_class) + align = type.alignment + type_size = type.size + else + align = PackInfo::ALIGN_MAP[type] + type_size = PackInfo::SIZE_MAP[type] + end offset = PackInfo.align(last_offset, align) + - (PackInfo::SIZE_MAP[type] * count) + (type_size * count) align }.max @@ -118,13 +338,37 @@ def CStructEntity.size(types) # # See also Fiddle::Pointer.new def initialize(addr, types, func = nil) + if func && addr.is_a?(Pointer) && addr.free + raise ArgumentError, 'free function specified on both underlying struct Pointer and when creating a CStructEntity - who do you want to free this?' + end set_ctypes(types) super(addr, @size, func) end # Set the names of the +members+ in this C struct def assign_names(members) - @members = members + @members = [] + @nested_structs = {} + members.each_with_index do |member, index| + if member.is_a?(Array) # nested struct + member_name = member[0] + struct_type, struct_count = @ctypes[index] + if struct_count.nil? + struct = struct_type.new(to_i + @offset[index]) + else + structs = struct_count.times.map do |i| + struct_type.new(to_i + @offset[index] + i * struct_type.size) + end + struct = StructArray.new(to_i + @offset[index], + struct_type, + structs) + end + @nested_structs[member_name] = struct + else + member_name = member + end + @members << member_name + end end # Calculates the offsets and sizes for the given +types+ in the struct. @@ -135,12 +379,18 @@ def set_ctypes(types) max_align = types.map { |type, count = 1| orig_offset = offset - align = ALIGN_MAP[type] + if type.respond_to?(:entity_class) + align = type.alignment + type_size = type.size + else + align = ALIGN_MAP[type] + type_size = SIZE_MAP[type] + end offset = PackInfo.align(orig_offset, align) @offset << offset - offset += (SIZE_MAP[type] * count) + offset += (type_size * count) align }.max @@ -148,15 +398,34 @@ def set_ctypes(types) @size = PackInfo.align(offset, max_align) end - # Fetch struct member +name+ - def [](name) + # Fetch struct member +name+ if only one argument is specified. If two + # arguments are specified, the first is an offset and the second is a + # length and this method returns the string of +length+ bytes beginning at + # +offset+. + # + # Examples: + # + # my_struct = struct(['int id']).malloc + # my_struct.id = 1 + # my_struct['id'] # => 1 + # my_struct[0, 4] # => "\x01\x00\x00\x00".b + # + def [](*args) + return super(*args) if args.size > 1 + name = args[0] idx = @members.index(name) if( idx.nil? ) raise(ArgumentError, "no such member: #{name}") end ty = @ctypes[idx] if( ty.is_a?(Array) ) - r = super(@offset[idx], SIZE_MAP[ty[0]] * ty[1]) + if ty.first.respond_to?(:entity_class) + return @nested_structs[name] + else + r = super(@offset[idx], SIZE_MAP[ty[0]] * ty[1]) + end + elsif ty.respond_to?(:entity_class) + return @nested_structs[name] else r = super(@offset[idx], SIZE_MAP[ty.abs]) end @@ -176,14 +445,44 @@ def [](name) if( ty.is_a?(Integer) && (ty < 0) ) return unsigned_value(val, ty) elsif( ty.is_a?(Array) && (ty[0] < 0) ) - return val.collect{|v| unsigned_value(v,ty[0])} + return StructArray.new(self + @offset[idx], ty[0], val) else return val end end - # Set struct member +name+, to value +val+ - def []=(name, val) + # Set struct member +name+, to value +val+. If more arguments are + # specified, writes the string of bytes to the memory at the given + # +offset+ and +length+. + # + # Examples: + # + # my_struct = struct(['int id']).malloc + # my_struct['id'] = 1 + # my_struct[0, 4] = "\x01\x00\x00\x00".b + # my_struct.id # => 1 + # + def []=(*args) + return super(*args) if args.size > 2 + name, val = *args + name = name.to_s if name.is_a?(Symbol) + nested_struct = @nested_structs[name] + if nested_struct + if nested_struct.is_a?(StructArray) + if val.nil? + nested_struct.each do |s| + s.replace(nil) + end + else + val.each_with_index do |v, i| + nested_struct[i] = v + end + end + else + nested_struct.replace(val) + end + return val + end idx = @members.index(name) if( idx.nil? ) raise(ArgumentError, "no such member: #{name}") @@ -202,23 +501,16 @@ def []=(name, val) end end + undef_method :size= def to_s() # :nodoc: super(@size) end end - # A C union wrapper + # A pointer to a C union class CUnionEntity < CStructEntity include PackInfo - # Allocates a C union the +types+ provided. - # - # When the instance is garbage collected, the C function +func+ is called. - def CUnionEntity.malloc(types, func=nil) - addr = Fiddle.malloc(CUnionEntity.size(types)) - CUnionEntity.new(addr, types, func) - end - # Returns the size needed for the union with the given +types+. # # Fiddle::CUnionEntity.size( @@ -228,7 +520,11 @@ def CUnionEntity.malloc(types, func=nil) # Fiddle::TYPE_VOIDP ]) #=> 8 def CUnionEntity.size(types) types.map { |type, count = 1| - PackInfo::SIZE_MAP[type] * count + if type.respond_to?(:entity_class) + type.size * count + else + PackInfo::SIZE_MAP[type] * count + end }.max end @@ -241,4 +537,3 @@ def set_ctypes(types) end end end - diff --git a/ruby/ext/fiddle/lib/fiddle/types.rb b/ruby/ext/fiddle/lib/fiddle/types.rb index 8dc811d3e..7baf31ec9 100644 --- a/ruby/ext/fiddle/lib/fiddle/types.rb +++ b/ruby/ext/fiddle/lib/fiddle/types.rb @@ -27,28 +27,29 @@ module Fiddle # * WORD module Win32Types def included(m) # :nodoc: + # https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types m.module_eval{ - typealias "DWORD", "unsigned long" - typealias "PDWORD", "unsigned long *" - typealias "DWORD32", "unsigned long" - typealias "DWORD64", "unsigned long long" - typealias "WORD", "unsigned short" - typealias "PWORD", "unsigned short *" + typealias "ATOM", "WORD" typealias "BOOL", "int" - typealias "ATOM", "int" typealias "BYTE", "unsigned char" - typealias "PBYTE", "unsigned char *" + typealias "DWORD", "unsigned long" + typealias "DWORD32", "uint32_t" + typealias "DWORD64", "uint64_t" + typealias "HANDLE", "PVOID" + typealias "HDC", "HANDLE" + typealias "HINSTANCE", "HANDLE" + typealias "HWND", "HANDLE" + typealias "LPCSTR", "const char *" + typealias "LPSTR", "char *" + typealias "PBYTE", "BYTE *" + typealias "PDWORD", "DWORD *" + typealias "PHANDLE", "HANDLE *" + typealias "PVOID", "void *" + typealias "PWORD", "WORD *" + typealias "UCHAR", "unsigned char" typealias "UINT", "unsigned int" typealias "ULONG", "unsigned long" - typealias "UCHAR", "unsigned char" - typealias "HANDLE", "uintptr_t" - typealias "PHANDLE", "void*" - typealias "PVOID", "void*" - typealias "LPCSTR", "char*" - typealias "LPSTR", "char*" - typealias "HINSTANCE", "unsigned int" - typealias "HDC", "unsigned int" - typealias "HWND", "unsigned int" + typealias "WORD", "unsigned short" } end module_function :included diff --git a/ruby/ext/fiddle/lib/fiddle/version.rb b/ruby/ext/fiddle/lib/fiddle/version.rb new file mode 100644 index 000000000..db6504b65 --- /dev/null +++ b/ruby/ext/fiddle/lib/fiddle/version.rb @@ -0,0 +1,3 @@ +module Fiddle + VERSION = "1.1.0" +end diff --git a/ruby/ext/fiddle/libffi-3.2.1/ChangeLog b/ruby/ext/fiddle/libffi-3.2.1/ChangeLog deleted file mode 100644 index 68990e32c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/ChangeLog +++ /dev/null @@ -1,5505 +0,0 @@ -commit 20562ac0427c3578250d04c6e34fb0127d4551cf -Author: Anthony Green -Date: Wed Nov 12 07:00:59 2014 -0500 - - Fix for AArch64. Release as 3.2.1. - -commit a0bdc5250cd36f1d2578358e33299fd2408091ac -Author: Anthony Green -Date: Tue Nov 11 09:43:01 2014 -0500 - - Fix typo - -commit 67c0c0705318d2e567fd48e680d63dca3619a235 -Author: Anthony Green -Date: Tue Nov 11 07:30:49 2014 -0500 - - Final 3.2 changes - -commit ee826b933bbdeb68ee81876ffb508c3908eed371 -Author: Anthony Green -Date: Tue Nov 11 07:29:26 2014 -0500 - - Final 3.2 changes - -commit c81a705d53be97899d314953987936213244b1ba -Author: Anthony Green -Date: Tue Nov 4 13:29:58 2014 -0500 - - Mention OpenRISC - -commit 6a17ad540d7ddb7a812687f4380bd0ef2d2865bb -Merge: 990eb9d 0f316ab -Author: Anthony Green -Date: Sun Sep 28 00:54:00 2014 -0400 - - Merge pull request #134 from s-macke/openrisc - - Add OpenRISC support - -commit 990eb9d4c244324771a7d878a168bb8eba1850c0 -Author: Anthony Green -Date: Sun Sep 28 00:50:29 2014 -0400 - - Only run the complex type tests on supported platforms. - -commit 0f316ab7c11b8315a838a6ae4645d36ff2c46f4c -Author: Sebastian Macke -Date: Sat Sep 27 00:19:15 2014 +0000 - - Add OpenRISC support - - This patch adds support for the OpenRISC architecture. - (http://opencores.org/or1k/Main_Page) - - This patch has been tested under Linux with QEMU-user emulation support. - - 32 Bit - - big endian - - delayed instructions - This is the only available configuration under Linux. - - The description of the ABI can be found on the official website. - - Is passes the testsuite except of the unwindtest_ffi_call.cc - testcase, which seems to be a problem of gcc and not libffi. - Some testcases of the gcc testsuite still fail. - - Signed-off-by: Sebastian Macke - -commit 6695983d2f0857caab220862de12f3f94a55bcf6 -Author: Anthony Green -Date: Sat Sep 20 07:44:37 2014 -0400 - - Add complex type support. Mostly broken right now - -commit fbbf48fbdf9b1491af0aefc00523a1b5d8bb9349 -Author: Anthony Green -Date: Sat Sep 20 07:43:51 2014 -0400 - - Compile tests with -Wno-psabi when using GCC - -commit ae8d2554c5f192be54dadc9f99a1449b4df1b222 -Author: Anthony Green -Date: Sat Sep 20 07:08:37 2014 -0400 - - Update version to 3.2 - -commit b2ca59d39d2192021316561ea9dda3d35d8d35d9 -Author: Anthony Green -Date: Sat Sep 20 07:08:05 2014 -0400 - - More README updates for 3.2 - -commit f920a01ad8eafc79daaf331499ef9a97696c46a7 -Author: Anthony Green -Date: Sat Sep 20 06:54:06 2014 -0400 - - Update release notes. - -commit bfcbf329c5e4bebdb32134d4e53260e17e4e66cc -Author: Bernd Edlinger -Date: Sat Sep 20 06:51:45 2014 -0400 - - 2014-05-11 Bernd Edlinger - - Fix current cygwin-64 build problems. - * src/java_raw_api.c: Remove if !defined(FFI_NO_RAW_API). - * src/x86/ffi.c: Add if defined(__CYGWIN__). - * src/x86/win64.S (ffi_closure_win64, ffi_call_win64): Added - handling for FFI_TYPE_UINT64, FFI_TYPE_POINTER and FFI_TYPE_INT. - Added SEH information. Fixed formatting. - -commit 32cb2ce81db9457c6bd43a2587d7fa23a2edb9b1 -Author: Jakub Jelinek -Date: Sat Sep 20 06:39:55 2014 -0400 - - 2014-09-10 Jakub Jelinek - - * src/powerpc/linux64.S: Emit .note.GNU-stack even when - POWERPC64 is not defined. - * src/powerpc/linux64_closure.S: Likewise. Also test _CALL_ELF == 2. - -commit aaf3101ba81af8f488502881648e3f687721671e -Author: Matthias Klose -Date: Sat Sep 20 06:37:04 2014 -0400 - - Fix -Werror=declaration-after-statement problem - -commit 6e8a4460833594d5af1b4539178025da0077df19 -Author: Dominik Vogt -Date: Sat Sep 20 06:21:19 2014 -0400 - - 2014-07-22 Dominik Vogt - - * src/types.c (FFI_TYPEDEF, FFI_NONCONST_TYPEDEF): Merge the macros by - adding another argument that controls whether the result is const or not - (FFI_LDBL_CONST): Temporary macro to reduce ifdef confusion - * src/prep_cif.c (ffi_prep_cif_core): Replace list of systems with new - macro FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION - * src/pa/ffitarget.h (FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION): - Define. - * src/s390/ffitarget.h (FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION): - Define. - * src/x86/ffitarget.h (FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION): - Define. - - 2014-07-22 Dominik Vogt - - * doc/libffi.texi (Primitive Types): Document ffi_type_complex_float, - ffi_type_complex_double and ffi_type_complex_longdouble - (Complex Types): New subsection. - (Complex Type Example): Ditto. - * testsuite/libffi.call/cls_align_complex_double.c: New - FFI_TYPE_COMPLEX test. - * testsuite/libffi.call/cls_align_complex_float.c: Ditto. - * testsuite/libffi.call/cls_align_complex_longdouble.c: Ditto. - * testsuite/libffi.call/cls_complex_double.c: Ditto. - * testsuite/libffi.call/cls_complex_float.c: Ditto. - * testsuite/libffi.call/cls_complex_longdouble.c: Ditto. - * testsuite/libffi.call/cls_complex_struct_double.c: Ditto. - * testsuite/libffi.call/cls_complex_struct_float.c: Ditto. - * testsuite/libffi.call/cls_complex_struct_longdouble.c: Ditto. - * testsuite/libffi.call/cls_complex_va_double.c: Ditto. - * testsuite/libffi.call/cls_complex_va_float.c: Ditto. - * testsuite/libffi.call/cls_complex_va_longdouble.c: Ditto. - * testsuite/libffi.call/complex_double.c: Ditto. - * testsuite/libffi.call/complex_defs_double.c: Ditto. - * testsuite/libffi.call/complex_float.c: Ditto. - * testsuite/libffi.call/complex_defs_float.c: Ditto. - * testsuite/libffi.call/complex_longdouble.c: Ditto. - * testsuite/libffi.call/complex_defs_longdouble.c: Ditto. - * testsuite/libffi.call/complex_int.c: Ditto. - * testsuite/libffi.call/many_complex_double.c: Ditto. - * testsuite/libffi.call/many_complex_float.c: Ditto. - * testsuite/libffi.call/many_complex_longdouble.c: Ditto. - * testsuite/libffi.call/return_complex1_double.c: Ditto. - * testsuite/libffi.call/return_complex1_float.c: Ditto. - * testsuite/libffi.call/return_complex1_longdouble.c: Ditto. - * testsuite/libffi.call/return_complex2_double.c: Ditto. - * testsuite/libffi.call/return_complex2_float.c: Ditto. - * testsuite/libffi.call/return_complex2_longdouble.c: Ditto. - * testsuite/libffi.call/return_complex_double.c: Ditto. - * testsuite/libffi.call/return_complex_float.c: Ditto. - * testsuite/libffi.call/return_complex_longdouble.c: Ditto. - * src/raw_api.c (ffi_raw_to_ptrarray): Handle FFI_TYPE_COMPLEX - (ffi_ptrarray_to_raw): Ditto. - * src/prep_cif.c (ffi_prep_cif_core): Abort if FFI_TYPE_COMPLEX is not - implemented in libffi for the target. - * src/java_raw_api.c (ffi_java_raw_size): FFI_TYPE_COMPLEX not supported - yet (abort). - (ffi_java_raw_to_ptrarray): Ditto. - (ffi_java_rvalue_to_raw): Ditto. - (ffi_java_raw_to_rvalue): Ditto. - * src/debug.c (ffi_type_test): Add debug tests for complex types. - * include/ffi.h.in (FFI_TYPE_COMPLEX): Add new FFI_TYPE_COMPLEX. - (FFI_TYPE_LAST): Bump. - (ffi_type_complex_float): Add new ffi_type_.... - (ffi_type_complex_double): Ditto. - (ffi_type_complex_longdouble): Ditto. - - 2014-07-22 Dominik Vogt - - * src/s390/ffitarget.h (FFI_TARGET_HAS_COMPLEX_TYPE): Define to provide - FFI_TYPE_COMPLEX support. - * src/s390/ffi.c (ffi_check_struct_type): Implement FFI_TYPE_COMPLEX - (ffi_prep_args): Ditto. - (ffi_prep_cif_machdep): Ditto. - (ffi_closure_helper_SYSV): Ditto. - -commit 4c5c4088aa3e4d8103ff9ca441937da64fdd849a -Merge: 862f53d 5d6340e -Author: Anthony Green -Date: Thu Sep 18 19:10:54 2014 -0400 - - Merge pull request #132 from nielsAD/master - - Pascal and Register calling convention support on x86 - -commit 862f53de04ff898a128be7eec592bae60930d6df -Merge: 5df3840 aebf2c3 -Author: Anthony Green -Date: Thu Sep 18 19:06:08 2014 -0400 - - Merge pull request #130 from frida/fix/darwin-aarch64-float-alignment - - Fix alignment of FFI_TYPE_FLOAT for Apple's ARM64 ABI - -commit 5df384077f3633ec8cf2e08f9199e5a44994dbad -Merge: 7b7a528 0f4e09d -Author: Anthony Green -Date: Thu Sep 18 19:05:35 2014 -0400 - - Merge pull request #129 from frida/fix/darwin-aarch64-cif-prep - - Fix non-variadic CIF initialization for Apple/ARM64 - -commit 7b7a5284de7a99edfcee5ac362dbf76251698e1e -Merge: 4cd5e84 6172a99 -Author: Anthony Green -Date: Thu Sep 18 18:28:05 2014 -0400 - - Merge pull request #124 from knuesel/master - - Fix issue with builddir when calling configure with absolute path - -commit 4cd5e840122e22636b5838943372c4ed74618e35 -Merge: 1cee07b 08853e3 -Author: Anthony Green -Date: Thu Sep 18 18:27:15 2014 -0400 - - Merge pull request #123 from ehsan/clang-cl - - Add support for building with clang-cl - -commit 5d6340ef2cf81432da79ac8b0b1b1218ab391438 -Author: nielsAD -Date: Mon Aug 25 17:29:44 2014 +0200 - - Determine whether register arguments (THISCALL/FASTCALL/REGISTER) are really passed via register to closures. Use stack if not. - -commit 6e346487b879b4b056a847268e381ae6efec4c21 -Author: nielsAD -Date: Mon Aug 25 12:23:29 2014 +0200 - - Fixed THISCALL/FASTCALL closures and added basic support for PASCAL/REGISTER closures. - -commit 098dca6b31e42dd0256ed7d966729e31961f1461 -Author: nielsAD -Date: Sat Aug 23 00:18:47 2014 +0200 - - Support for calling functions with PASCAL and REGISTER calling conventions on x86 Windows/Linux. - Also changed indentation to be more consistent throughout the (adjusted) files. - -commit 08853e32fb6b750cda664ee6d3290d340429dd4d -Author: Ehsan Akhgari -Date: Thu Jul 31 20:33:33 2014 -0400 - - Enable forcing the usage of the static CRT in libffi's msvc wrapper - - This is required for AddressSanitizer builds with clang-cl. - -commit aebf2c3023b5ff056a708dc34169f7b549b2ec4f -Author: Ole André Vadla Ravnås -Date: Fri Jul 25 21:40:50 2014 +0200 - - Fix alignment of FFI_TYPE_FLOAT for Apple's ARM64 ABI - -commit 0f4e09d27dc175ce3e95d070b794351663c7220e -Author: Ole André Vadla Ravnås -Date: Sat Jul 26 00:11:06 2014 +0200 - - Fix non-variadic CIF initialization for Apple/ARM64 - - Turns out `aarch64_nfixedargs` wasn't initialized in the non-variadic - case, resulting in undefined behavior when allocating arguments. - -commit 6172a995e14bdbc6150aa02a361f710626a5c293 -Author: Jeremie Knuesel -Date: Wed Jun 25 12:28:17 2014 +0200 - - Fix issue with builddir when calling configure with absolute path - -commit fb25cd08ed5a87640b02f0feeb10a09b37cfddbe -Author: Ehsan Akhgari -Date: Wed Jun 11 12:07:24 2014 -0400 - - Add support for building with clang-cl - -commit 1cee07be4712411baa5eb8af22698bc8443a6d6e -Author: Anthony Green -Date: Thu Jun 12 06:30:59 2014 -0400 - - Remove compiler warning - -commit ad0d1d239afc7ad09203847793dcc020856d1035 -Author: Samuli Suominen -Date: Thu Jun 12 06:30:21 2014 -0400 - - Fix paths in libffi.pc.in - -commit df31a85103b0cc232bbc340d7e782a3853c7fad5 -Merge: 69289c1 360aa8c -Author: Anthony Green -Date: Fri Jun 6 08:24:35 2014 -0400 - - Merge pull request #122 from rvandermeulen/1014976 - - Don't make --enable-debug imply using the debug CRT in libffi - -commit 360aa8ca1ead2fdaefa7b1c6f01ad001d8abae7e -Author: Mike Hommey -Date: Mon Jun 2 09:21:10 2014 -0400 - - Bug 1014976 - Don't make --enable-debug imply using the debug CRT in libffi. - -commit 69289c10b0acb4b52c8b5df4cf738193c618db40 -Author: Anthony Green -Date: Sat May 31 08:54:08 2014 -0400 - - Prepare for libffi 3.1.1 - -commit 978c9540154d320525488db1b7049277122f736d -Author: Samuli Suominen -Date: Sat May 31 08:53:10 2014 -0400 - - Add missing GNU stack markings in win32.S - -commit cbc5a3c0200aa6c2cf8d6798d69a21501557c83f -Author: Ryan Hill -Date: Sat May 31 08:26:34 2014 -0400 - - Fix typo - -commit 9d8e3018ac3d0d338373bff7eefa9f006746f4ec -Author: Anthony Green -Date: Sat May 24 23:28:42 2014 -0400 - - Update current version. - -commit 18d56cca5a4ee95ad48b129100adf26231518ed0 -Author: Anthony Green -Date: Mon May 19 18:05:33 2014 -0400 - - Increment libtool version number - -commit 629f1029c47e522e4331988f02f32c203a070e28 -Merge: 0403f33 c1166d4 -Author: Anthony Green -Date: Mon May 19 18:04:28 2014 -0400 - - Merge pull request #120 from l0kod/tmpfile - - Create temporary file with O_TMPFILE and O_CLOEXEC when available - -commit c1166d4f653bf6d17ad8c265cf5e8da84e2e76dc -Author: Mickaël Salaün -Date: Mon May 12 19:44:08 2014 +0200 - - closures: Check for mkostemp(3) - -commit 8daeed9570af72eb135c8ded460d2888f05b2e68 -Author: Mickaël Salaün -Date: Sun May 11 22:54:58 2014 +0200 - - closures: Create temporary file with O_TMPFILE and O_CLOEXEC when available - - The open_temp_exec_file_dir function can create a temporary file without - file system accessible link. If the O_TMPFILE flag is not defined (old - Linux kernel or libc) the behavior is unchanged. - - The open_temp_exec_file_name function now need a new argument "flags" - (like O_CLOEXEC) used for temporary file creation. - - The O_TMPFILE flag allow temporary file creation without race condition. - This feature/fix prevent another process to access the (future) - executable file from the file system. - - The O_CLOEXEC flag automatically close the temporary file for any - execve. This avoid transmitting (executable) file descriptor to a child - process. - -commit 0403f332b1f478696c30d3d8a0e2f6eef24aaf88 -Author: Anthony Green -Date: Mon May 19 09:41:32 2014 -0400 - - Update date. Annoucing 3.1 today. - -commit 94ac0c168ee7b115409121d88b25a4979446c8da -Author: Anthony Green -Date: Mon May 19 09:37:21 2014 -0400 - - Increment libtool library revision number - -commit 57465744b6e1295d7202de5a7734df589518f1c8 -Author: Anthony Green -Date: Sun May 11 10:30:22 2014 -0400 - - Update to version 3.1 - -commit 0c2251a42df5108b6d9ebe5fe1cf83d0bcdf660e -Author: Anthony Green -Date: Sun May 11 10:22:30 2014 -0400 - - Support versions of git older than 1.8.5 - -commit 70c303cb88e23aaee91c87c56b108c50ab4f3c2f -Author: Anthony Green -Date: Sun May 11 09:56:40 2014 -0400 - - Fix testsuite for GCC 4.9.0 - -commit 52b3457093ed19b2a7c5fcf243c4014c90ce6225 -Author: Magnus Granberg -Date: Sun May 11 09:55:28 2014 -0400 - - Check /proc/self/status for PaX status. - -commit 7ba4c5d72aa440a4b21fb57e999e67c5957761da -Author: Dominik Vogt -Date: Sun May 11 09:52:47 2014 -0400 - - Use to get correct dir - -commit 31e0d4ecff6dc2a6c75a066ee099b52a43f6ba27 -Merge: 1c0e9a7 99909eb -Author: Anthony Green -Date: Wed Apr 23 19:24:47 2014 -0400 - - Merge pull request #119 from joshtriplett/fastcall-fastball - - src/x86/win32.S: Define ffi_closure_FASTCALL in the MASM section, too - -commit 99909eb6184b62408d88b6b4e7ab38e84e6d0bf3 -Author: Josh Triplett -Date: Tue Apr 22 21:17:52 2014 -0700 - - src/x86/win32.S: Define ffi_closure_FASTCALL in the MASM section, too - -commit 1c0e9a7297ced15413c2d2d5d35f6c650c4b46c9 -Merge: 93a24f2 d369522 -Author: Anthony Green -Date: Mon Apr 21 12:41:56 2014 -0400 - - Merge pull request #101 from joshtriplett/fastcall-closures - - Support closures for fastcall - -commit d36952273d4fafbda91ecc205fc0824f7cc65e70 -Author: Josh Triplett -Date: Sun Apr 20 12:03:25 2014 -0700 - - Support fastcall closures - - libffi on 32-bit x86 now supports closures for all supported ABIs. - Thus, rewrite the last remaining duplicated-by-ABI test (closure_stdcall - and closure_thiscall) to use the generic ABI_NUM/ABI_ATTR mechanism. - -commit 93a24f216bcdd1018b976d697179c6d49004015a -Merge: dd11a04 2349fec -Author: Anthony Green -Date: Sat Apr 12 19:38:07 2014 -0400 - - Merge pull request #80 from ueno/devel - - Fix typo in doc - -commit dd11a04061cb49ce1d702545693c24eb1267d648 -Merge: 8fa2812 03ca880 -Author: Anthony Green -Date: Sat Apr 12 19:37:21 2014 -0400 - - Merge pull request #86 from joshtriplett/testsuite-CC-CXX - - testsuite ignores CC parameter supplied to configure or make - -commit 8fa2812355e685a42abf9a62fbc674d616b2edee -Merge: 8a58e6b 419503f -Author: Anthony Green -Date: Sat Apr 12 19:32:08 2014 -0400 - - Merge pull request #116 from frida/fix/darwin-aarch64-variadic - - Fix handling of variadic calls on Darwin/AArch64 - -commit 8a58e6b7805b736def197b8baf8e465a2a3f6913 -Merge: 30b77c5 a539f7f -Author: Anthony Green -Date: Sat Apr 12 19:30:18 2014 -0400 - - Merge pull request #115 from frida/fix/darwin-aarch64-alignment - - Fix alignment of AArch64 assembler functions - -commit 30b77c56f95c63ecd83399aafdbad7b07330f2fd -Merge: dc33cb3 3e2b84d -Author: Anthony Green -Date: Sat Apr 12 19:29:13 2014 -0400 - - Merge pull request #117 from frida/fix/windows-regression - - Fix Windows regression - -commit 3e2b84d295531720917bf46afc532fc6d877e3ec -Author: Ole André Vadla Ravnås -Date: Sat Apr 12 01:04:04 2014 +0200 - - Fix Windows regression - - Introduced by b5fed601948237037513a9b7f967c8fc6c9ff1f6. - -commit 419503f409c321fe31ff59d963ef34bb913420d0 -Author: Ole André Vadla Ravnås -Date: Sun Apr 6 20:54:13 2014 +0200 - - Fix handling of variadic calls on Darwin/AArch64 - -commit a539f7ffd6783aa11353d13265520e453c565fb4 -Author: Ole André Vadla Ravnås -Date: Sun Apr 6 20:53:02 2014 +0200 - - Fix alignment of AArch64 assembler functions - -commit dc33cb3c998da521a960385c1269c3aef552f69f -Merge: c860a99 b5fed60 -Author: Anthony Green -Date: Sat Apr 5 23:41:22 2014 -0400 - - Merge pull request #114 from joshtriplett/bounce-on-a-tiny-trampoline - - Fix ABI on 32-bit non-Windows x86: go back to trampoline size 10 - -commit b5fed601948237037513a9b7f967c8fc6c9ff1f6 -Author: Josh Triplett -Date: Sat Apr 5 17:33:42 2014 -0700 - - Fix ABI on 32-bit non-Windows x86: go back to trampoline size 10 - - The trampoline size is part of the ABI, so it cannot change. Move the - logic from the stdcall and thiscall trampolines to the functions they - call, to reduce them both to 10 bytes. - - This drops the previously added support for raw THISCALL closures on - non-Windows. (Non-raw THISCALL closures still work.) - -commit 03ca880081b22efab09ba72268270f83017d3d7b -Author: Josh Triplett -Date: Thu Mar 27 08:44:34 2014 -0700 - - README: Note the testsuite changes to respect $CC and $CXX - -commit d74df8c5d8c6722ecb908da98c86cc8e2c755b84 -Author: Josh Triplett -Date: Thu Mar 27 00:44:12 2014 -0700 - - README: Update Windows example to set both CC and CXX - -commit 7d698125b1f05173f3656a89755a2eb58813b002 -Author: Josh Triplett -Date: Wed Mar 26 23:17:56 2014 -0700 - - Use the proper C++ compiler to run C++ tests - - Running the C compiler with -shared-libgcc -lstdc++ does not work on - non-GCC compilers. - -commit fa5e88f170cb37c7b2b9bb015c8c5b854ffd8a3e -Author: Josh Triplett -Date: Wed Mar 26 23:53:57 2014 -0700 - - .travis.yml: Make the build command more readable by splitting at && - - "script" can contain multiple commands to run in sequence. - -commit 0c3824702d3d59d37f8c177d646303f546187683 -Author: Josh Triplett -Date: Wed Mar 26 14:51:32 2014 -0700 - - Always set CC_FOR_TARGET for dejagnu, to make the testsuite respect $CC - - This fixes cross-compilation and compilation with CC="gcc -m32". - -commit 9946a92af31b30cb7760150d1f8ca6c11b01aeea -Author: Josh Triplett -Date: Wed Mar 26 20:18:58 2014 -0700 - - Stop looking for expect and runtest above top_builddir - - Users wishing to test hand-compiled versions of expect and runtest can - easily enough put them in their path or set EXPECT and RUNTEST - themselves. - -commit acb202325215058639234efb7af1f04c1c8a1f44 -Author: Josh Triplett -Date: Wed Mar 26 20:18:41 2014 -0700 - - Stop setting an empty AM_RUNTESTFLAGS - -commit c860a992fef5d7cd7bb0975b1632d17a9fafe007 -Author: Anthony Green -Date: Tue Mar 25 17:02:51 2014 -0400 - - Upgrade version to 3.1-rc1 - -commit 9837073e6203048a162a226798c5d252600219ed -Author: Anthony Green -Date: Tue Mar 25 16:24:14 2014 -0400 - - Update copyright date and clean up README notes. - -commit 18d3baa9f597b026675baa1b4e5a5eeef7577a08 -Merge: afee537 f0c8a31 -Author: Anthony Green -Date: Tue Mar 25 16:12:53 2014 -0400 - - Merge pull request #108 from joshtriplett/freebsd - - [3.1 blocker] Fix FreeBSD support - -commit afee53738a995e23bd2f89fd0f7b30b380566106 -Merge: 7d24785 b2d610e -Author: Anthony Green -Date: Tue Mar 25 16:12:35 2014 -0400 - - Merge pull request #106 from joshtriplett/darwin-award - - [3.1 blocker] Update OS X build system to include win32.S on 32-bit - -commit 7d2478568ed9f03cbf57627f449a2d2cf4d1571c -Merge: beab5f3 56be47f -Author: Anthony Green -Date: Tue Mar 25 16:12:17 2014 -0400 - - Merge pull request #110 from joshtriplett/w64 - - Fix 64-bit Windows support - -commit beab5f334d9ec5b8b91d1cc727d1029b40358e7e -Merge: 28fb197 ef5890e -Author: Anthony Green -Date: Tue Mar 25 16:07:47 2014 -0400 - - Merge pull request #105 from joshtriplett/win32-relocations - - [3.1 blocker] win32.S needs to handle relocations/GOT - -commit f0c8a31577172104049283f0a80c723084a5bd77 -Author: Josh Triplett -Date: Mon Mar 24 22:14:26 2014 -0700 - - Compile win32.S on FreeBSD - -commit b2d610e028b5ce48d1ad7e5d0debc9c321d891b2 -Author: Josh Triplett -Date: Fri Mar 21 11:10:13 2014 -0700 - - Compile win32.S on 32-bit Darwin as well - -commit be50b87a490e794362cb4a27ada2fbaab202adb8 -Author: Josh Triplett -Date: Mon Mar 24 21:44:13 2014 -0700 - - Always use configure to detect whether global symbols need underscores - - 64-bit Windows already used this check; make it universal, and use it in - place of an ifdef on X86_WIN32, to handle non-Windows platforms that use - the underscore, such as Darwin. - -commit 56be47f87629e31afbcb0774aa65735f539ee972 -Author: Josh Triplett -Date: Mon Mar 24 21:24:53 2014 -0700 - - Fix a warning on 64-bit Windows - - When sizeof(size_t) != sizeof(unsigned), adding a size_t to cif->bytes - produces a "possible loss of data" warning. However, the size_t in - question refers to the size of a single parameter. Use a cast to avoid - the warning. - -commit 48a8eda74aad8a21b6f26df5df08fe64c043d208 -Author: Josh Triplett -Date: Mon Mar 24 21:21:12 2014 -0700 - - Avoid referencing undefined ABIs on 64-bit Windows builds - - 64-bit Windows does not have FFI_STDCALL, FFI_THISCALL, or FFI_FASTCALL. - -commit f0f4138f90345d7d67dfa6783a7e1c7cc30d3c6f -Author: Josh Triplett -Date: Sat Mar 22 10:00:53 2014 -0700 - - win32.S: Add handling for position-independent code on Darwin - - Newer versions of Darwin generate the necessary stub functions - automatically and just need a call instruction, but accomodating older - versions as well requires adding the stub. - -commit ef5890ebafb7cd2fbf9acf161edb55fe1382871c -Author: Josh Triplett -Date: Fri Mar 21 11:01:39 2014 -0700 - - win32.S: Use shifting for multiplication rather than repeated addition - - The jump table code added a register to itself twice to multiply by 4; - shift the register left by 2 instead. - -commit 4fca48901e7e4f53bf490ed22607b2d2d8f4bfcc -Author: Josh Triplett -Date: Fri Mar 21 11:00:41 2014 -0700 - - win32.S: Make the jump tables position-independent - - Now that non-Windows platforms include win32.S, it needs to support - building as position-independent code. This fixes build failures on - target platforms that do not allow text relocations. - -commit 2087dcf736274286f76c69d3988fb6d7cc4fd0f5 -Author: Josh Triplett -Date: Fri Mar 21 10:57:06 2014 -0700 - - win32.S: Make calls to ffi_closure_SYSV_inner position-independent - - Now that non-Windows platforms include win32.S, it needs to support - building as position-independent code. This fixes one source of build - failures on target platforms that do not allow text relocations. - -commit 28fb197079cf1d11da4eef7c8c243ab05590c528 -Merge: c697472 c3dd0a1 -Author: Anthony Green -Date: Tue Mar 18 12:19:36 2014 -0400 - - Merge pull request #107 from rvandermeulen/msvcc - - Various compatibility fixes and improvements to msvcc.sh. - -commit c3dd0a1a0245fc174361a70876e88ae24285f861 -Author: Ryan VanderMeulen -Date: Tue Mar 18 12:09:45 2014 -0400 - - Various compatibility fixes and improvements to msvcc.sh. - - * Don't try to mix incompatible optimization flags in debug builds. - * Workaround ax_cc_maxopt.m4 not supporting MSVC and change -O3 to -O2. - * Fix MSVC warning by properly passing linker flags to compiler. - * Make msvcc.sh return 1 if invalid command line options are used rather than silently eating them. - * Add more comments. - -commit c697472fccfbb5b87b007c053cda9ef014b346b9 -Merge: 83fd2bc e48918e -Author: Anthony Green -Date: Mon Mar 17 00:32:42 2014 -0400 - - Merge pull request #102 from joshtriplett/test-generic - - Add ABIs to the test matrix; unify many bits of the testsuite - -commit e48918ecf876bc85d040fc50a232059c566553a8 -Author: Josh Triplett -Date: Sun Mar 16 20:29:27 2014 -0700 - - testsuite: Add ABIs to the test matrix; unify tests across ABIs - - This eliminates all the *_win32.c tests in favor of the tests they were - branched from, and expands test coverage to run many more tests on - stdcall, thiscall, and fastcall. - - This same mechanism also supports testing any other target that has - multiple ABIs. - -commit 4d4d368e5a55d9443c4c53b1b70d58ab6d8c941c -Author: Josh Triplett -Date: Sun Mar 16 17:02:05 2014 -0700 - - testsuite: Replace ffitestcxx.h with ffitest.h - - ffitest.h contains a superset of the functionality of ffitestcxx.h; - make the C++ tests include ffitest.h instead, and remove ffitestcxx.h. - -commit 3f97cf3413c46caf2a79f32ac9cda4620972c2d7 -Author: Josh Triplett -Date: Sun Mar 16 16:53:42 2014 -0700 - - testsuite: Unify the C and C++ testsuites - - These two testsuites differ only in the source file glob and a couple of - additional compiler options; unify the remaining bits. - -commit 0d9cce8edb937bbe771a6cdd25f671edf06d2128 -Author: Josh Triplett -Date: Sun Mar 16 16:22:58 2014 -0700 - - testsuite: ffitest.h: Parenthesize the CHECK macro - -commit 5695ec1444c5323e48fe4314f8c8f027625e67df -Author: Josh Triplett -Date: Sun Mar 16 16:04:58 2014 -0700 - - testsuite: Factor out a function to run a matrix of tests - - This commons up code from libffi.call/call.exp and - libffi.special/special.exp, unifies the optimization option matrix - between the two, and makes it easier to add more axes to the matrix - in the future. - -commit dfdb02cc869855d3b68571e5f7aa77ae8c9d254a -Author: Josh Triplett -Date: Sun Mar 16 15:26:26 2014 -0700 - - testsuite: Introduce a __THISCALL__ compiler-specific macro - -commit 83fd2bce0456224483435d4b764063f4513fd464 -Merge: 3658a07 06ff924 -Author: Anthony Green -Date: Sun Mar 16 22:03:29 2014 -0400 - - Merge pull request #99 from joshtriplett/gitignore - - .gitignore: Ignore more generated files - -commit 3658a0700a50d37a2fdba04fd9d79ad2f706d9f5 -Merge: d948d0a 46c5d3c -Author: Anthony Green -Date: Sun Mar 16 21:37:42 2014 -0400 - - Merge pull request #100 from rvandermeulen/bug-756740 - - Change double quotes in Makefile.am to single quotes. - -commit 46c5d3c30fdc2b43c076ad955078d7c5f1e75b37 -Author: Ryan VanderMeulen -Date: Sun Mar 16 21:16:08 2014 -0400 - - Change double quotes in Makefile.am to single quotes. - - This was originally done in PR #84, except the change was made to Makefile.in instead of Makefile.am and was therefore reverted the next time the files were regenerated. - -commit 06ff924215a2f9739efa2c059dc595bc4ec1c851 -Author: Josh Triplett -Date: Sun Mar 16 16:19:46 2014 -0700 - - .gitignore: Ignore more generated files - - The build process generates doc/libffi.info and fficonfig.h.in, so add - them to .gitignore. - -commit bad8948346e9b8813023a0cc78a3b6eb8d9c14c6 -Author: Josh Triplett -Date: Sun Mar 16 15:16:18 2014 -0700 - - testsuite: Introduce a __STDCALL__ compiler-specific macro - - Several tests want to use stdcall, which differs in syntax by compiler, - so introduce a macro for it in ffitest.h. - -commit 98a793fa36a4ab3ba24d059cb80a2891cdb940e1 -Author: Josh Triplett -Date: Sun Mar 16 15:20:36 2014 -0700 - - testsuite: Common up the ifdef blocks for compiler-specific macros - -commit d948d0a729c934b0224749338a3ba0a2c8f51c45 -Merge: b61b472 a86bd31 -Author: Anthony Green -Date: Sun Mar 16 10:53:48 2014 -0400 - - Merge pull request #98 from joshtriplett/unconfigure.host - - Merge configure.host into configure.ac - -commit a86bd318e2424d879d784ee7b29d6536d7a17c18 -Author: Josh Triplett -Date: Sun Mar 16 06:58:59 2014 -0700 - - Merge configure.host into configure.ac - - configure.host only has a single entry, and shows no signs of needing - more added. - -commit b61b472bd0647006d6685238721002017f1d119c -Author: Anthony Green -Date: Sun Mar 16 09:45:55 2014 -0400 - - Update version to 3.1-rc0. Clean up README. - -commit 7a64e7dbba54e6e9f69954adfb943be1856ff928 -Merge: 11a5c5c eef2e02 -Author: Anthony Green -Date: Sun Mar 16 09:39:08 2014 -0400 - - Merge pull request #97 from joshtriplett/remove-more-generated-files - - Remove more generated files - -commit 11a5c5c39f5861011f6c5ddf795da3a32b5f0082 -Merge: 9a62a21 1c68c07 -Author: Anthony Green -Date: Sun Mar 16 09:38:47 2014 -0400 - - Merge pull request #96 from joshtriplett/sawing-changelogs - - Generate ChangeLog from git in make dist; remove it from version control - -commit eef2e02a13d7d1c8145d47a64467f654406a3548 -Author: Josh Triplett -Date: Sun Mar 16 06:26:03 2014 -0700 - - doc: Remove autogenerated info file and stamp - -commit 9fb403d3c5d9643e0f561cab6d4a07b1e54907ff -Author: Josh Triplett -Date: Sun Mar 16 06:25:52 2014 -0700 - - fficonfig.h.in: Remove, configure generates it - -commit 1c68c07217fda78a779778c1480fedef7a58d5b4 -Author: Josh Triplett -Date: Sun Mar 16 06:11:58 2014 -0700 - - Generate ChangeLog from git in make dist - - Archive the existing ChangeLog to ChangeLog.libffi-3.1 - -commit c65ed55e655711e008282edbdd82ce95d008b4f6 -Author: Josh Triplett -Date: Sun Mar 16 05:52:00 2014 -0700 - - ChangeLog.v1: Fix typo in explanatory header. - -commit 9a62a21f5c3a8e1da463229f3170c8ab3031d920 -Author: Anthony Green -Date: Sun Mar 16 09:03:57 2014 -0400 - - Add missing ChangeLog entry. Clean up some entries. - -commit 9bc704c58cb7a049d867837e3a11e2e31886ec66 -Merge: 694447a e892e58 -Author: Anthony Green -Date: Sun Mar 16 08:41:00 2014 -0400 - - Merge pull request #95 from joshtriplett/news - - README: Update news for 3.0.14 - -commit e892e581d1838a06c18c7ecd50ebd79915cff92b -Author: Josh Triplett -Date: Sun Mar 16 05:38:24 2014 -0700 - - README: Update news for 3.0.14 - -commit 694447aa29deadd571efb4e9a26ee3f68ede1493 -Merge: fdc87f3 45a6c21 -Author: Anthony Green -Date: Sun Mar 16 08:32:05 2014 -0400 - - Merge pull request #93 from joshtriplett/travis-dist - - Make Travis check "make dist" - -commit 45a6c21efa944b520842e631dc54919b04884744 -Author: Josh Triplett -Date: Sun Mar 16 05:29:08 2014 -0700 - - .travis.yml: Test "make dist" too. - -commit fdc87f3b2ea37b58a4a9ae6c35083f544909fe3c -Merge: 7412b83 e1911f7 -Author: Anthony Green -Date: Sun Mar 16 08:05:51 2014 -0400 - - Merge pull request #85 from joshtriplett/stdcall - - stdcall support on Linux - -commit e1911f78df113ca58738b66089a070d4cf747de7 -Author: Josh Triplett -Date: Sun Mar 16 03:25:53 2014 -0700 - - Add support for stdcall, thiscall, and fastcall on non-Windows x86-32 - - Linux supports the stdcall calling convention, either via functions - explicitly declared with the stdcall attribute, or via code compiled - with -mrtd which effectively makes stdcall the default. - - This introduces FFI_STDCALL, FFI_THISCALL, and FFI_FASTCALL on - non-Windows x86-32 platforms, as non-default calling conventions. - -commit 7412b838d543aae4fa925862bd5702d3dacbc29a -Merge: c0cc5fd 9531d05 -Author: Anthony Green -Date: Sun Mar 16 07:58:16 2014 -0400 - - Merge pull request #90 from joshtriplett/win32-unifdef - - prep_cif.c: Remove unnecessary ifdef for X86_WIN32 - -commit c0cc5fdaa237b67e86f22d2f6e13f3b42d9aae33 -Merge: 98b5296 b3a5da0 -Author: Anthony Green -Date: Sun Mar 16 07:57:59 2014 -0400 - - Merge pull request #89 from joshtriplett/travis32 - - .travis.yml: Test on both 32-bit and 64-bit - -commit 9531d05f64c2a674e0197158ffad68d69f177bd0 -Author: Josh Triplett -Date: Sun Mar 16 01:50:02 2014 -0700 - - prep_cif.c: Remove unnecessary ifdef for X86_WIN32 - - ffi_prep_cif_core had a special case for X86_WIN32, checking for - FFI_THISCALL in addition to the FFI_FIRST_ABI-to-FFI_LAST_ABI range - before returning FFI_BAD_ABI. However, on X86_WIN32, FFI_THISCALL - already falls in that range, making the special case unnecessary. - Remove it. - -commit b3a5da068abd2f2983d9e67adbf41b0e0f34e37f -Author: Josh Triplett -Date: Sat Mar 15 23:27:56 2014 -0700 - - .travis.yml: Test on both 32-bit and 64-bit - -commit 98b52960485a261399f081915f36063de3854a5f -Merge: 134ce4c f6dd184 -Author: Anthony Green -Date: Sun Mar 16 07:51:33 2014 -0400 - - Merge pull request #94 from joshtriplett/esp-extra-stackery-perception - - ChangeLog: Document testsuite changes to remove fragile stack pointer checks - -commit f6dd1845434dd53e22129becdfa092c082df307c -Author: Josh Triplett -Date: Sun Mar 16 04:49:36 2014 -0700 - - ChangeLog: Document testsuite changes to remove fragile stack pointer checks - -commit 134ce4c0266bf994f07518fc534de53f1d3c8de8 -Merge: 2680e9e 9c27932 -Author: Anthony Green -Date: Sun Mar 16 07:47:17 2014 -0400 - - Merge pull request #91 from joshtriplett/esp-extra-stackery-perception - - testsuite: Remove fragile stack pointer checks - -commit 9c279328ee12fc869adff63ca81f1230977bd42b -Author: Josh Triplett -Date: Sun Mar 16 02:31:19 2014 -0700 - - testsuite: Remove fragile stack pointer checks - - testsuite/libffi.call/closure_stdcall.c and - testsuite/libffi.call/closure_thiscall.c include inline assembly to save - the stack pointer before and after the call, and compare the values. - However, compilers can and do leave the stack in different states for - these two pieces of inline assembly, such as by saving a temporary value - on the stack across the call; observed with gcc -Os, and verified as - spurious through careful inspection of disassembly. - -commit 2680e9ea9b4c87ea8042a61e551bd667493d4bd3 -Merge: 071eab3 82f8cb2 -Author: Anthony Green -Date: Sun Mar 16 07:44:08 2014 -0400 - - Merge pull request #88 from joshtriplett/such-precision-many-fail-wow - - testsuite/libffi.call/many.c: Avoid spurious failure due to excess precision - -commit 82f8cb24a1d976db35ae31a4b86cec8926da327d -Author: Josh Triplett -Date: Sun Mar 16 04:27:32 2014 -0700 - - ChangeLog: Document many.c and many_win32.c changes to avoid spurious failures - -commit 88d562a8b5912e99306063fe3bc289bab6ca6ebe -Author: Josh Triplett -Date: Sat Mar 15 22:08:19 2014 -0700 - - testsuite/libffi.call/many_win32.c: Avoid spurious failure due to excess precision - - The test case testsuite/libffi.call/many_win32.c can spuriously fail due - to excess floating-point precision. Instrumenting it with some printf - calls shows differences well above FLT_EPSILON. (Note when - instrumenting it that multiple computations of the difference, such as - one in a print and another in the conditional, may produce different - results.) - - Rather than complicating the test suite with architecture-specific flags - to avoid excess precision, just simplify the floating-point computation - to avoid a dependency on potential excess precision. - -commit c00a49ecd165b2d06c1c9b249d212dc843fa116f -Author: Josh Triplett -Date: Sat Mar 15 22:08:19 2014 -0700 - - testsuite/libffi.call/many.c: Avoid spurious failure due to excess precision - - The test case testsuite/libffi.call/many.c can spuriously fail due to - excess floating-point precision. Instrumenting it with some printf - calls shows differences well above FLT_EPSILON. (Note when - instrumenting it that multiple computations of the difference, such as - one in a print and another in the conditional, may produce different - results.) - - Rather than complicating the test suite with architecture-specific flags - to avoid excess precision, just simplify the floating-point computation - to avoid a dependency on potential excess precision. - -commit 071eab32a7f9fbbef46c0d8f37d9985bc9cceb37 -Merge: 2228c7a 2f44952 -Author: Anthony Green -Date: Sun Mar 16 07:36:52 2014 -0400 - - Merge pull request #92 from joshtriplett/autogen - - Re-add libtool-ldflags - -commit 2f44952c95765c1486fad66f57235f8d459a9748 -Author: Josh Triplett -Date: Sun Mar 16 04:35:12 2014 -0700 - - Re-add libtool-ldflags - -commit 2228c7ab190f3c529b9018495467b841fa21cba2 -Merge: 76d19d0 35634db -Author: Anthony Green -Date: Sun Mar 16 07:25:18 2014 -0400 - - Merge pull request #87 from joshtriplett/autogen - - Remove autogenerated files from the repository - -commit 35634dbceaac0a1544f7385addc01d21ef1ef6a8 -Author: Josh Triplett -Date: Sat Mar 15 18:11:16 2014 -0700 - - Remove autogenerated files from the repository - - Add an autogen.sh to regenerate them. - -commit 76d19d004e36e99d261ee78261e2f52cea5e4ab1 -Merge: c86d9b6 a1a6f71 -Author: Anthony Green -Date: Fri Mar 14 16:54:31 2014 -0400 - - Ensure the linker supports @unwind sections in libffi. - -commit c86d9b6cc6e16ee262844a33b40441374400758c -Merge: 4efb7db f8cdf11 -Author: Anthony Green -Date: Fri Mar 14 16:51:20 2014 -0400 - - Fix merge - -commit 4efb7dbfd9427c478a948cd0d464210123db8de8 -Merge: 634a475 18eb81d -Author: Anthony Green -Date: Fri Mar 14 16:47:57 2014 -0400 - - Merge pull request #81 from rvandermeulen/bug-756740 - - Allow building for mipsel with Android NDK r8. - -commit a1a6f71bfe4199293043b2e4cfb4c8d3cb1112f9 -Author: Ryan VanderMeulen -Date: Mon Mar 10 15:12:47 2014 -0400 - - Remove stray hunk that shouldn't have been included in this patch. - -commit f8cdf11467181f2a9a6b7e748167569aa58e3a81 -Author: Ryan VanderMeulen -Date: Mon Mar 10 15:04:58 2014 -0400 - - Replace double quotes with single quotes in Makefile.in to improve compatibility between some versions of MSYS and gmake. From Mozilla bug 943728. - https://bugzilla.mozilla.org/show_bug.cgi?id=943728 - -commit dfa3738732e1bc3a7f4130395ae4bab55fcebb99 -Author: Ryan VanderMeulen -Date: Mon Mar 10 14:53:48 2014 -0400 - - Ensure the linker supports @unwind sections in libffi. From Mozilla bug 756740. - https://bugzilla.mozilla.org/show_bug.cgi?id=778414 - - Also tracked as issue #42. - https://github.com/atgreen/libffi/issues/42 - -commit 18eb81d032f29d645d0498ba92bddfd651f009ae -Author: Ryan VanderMeulen -Date: Mon Mar 10 14:43:37 2014 -0400 - - Allow building for mipsel with Android NDK r8. From Mozilla bug 756740. - https://bugzilla.mozilla.org/show_bug.cgi?id=756740 - -commit 2349fec9a818fb52fd2f294bcbc7b3156cd113de -Author: Daiki Ueno -Date: Wed Mar 5 17:53:02 2014 +0900 - - Fix typo in doc - -commit 634a475eaf1bee31c09f7d519e31c13b64cd24df -Author: Anthony Green -Date: Sat Mar 1 18:37:29 2014 -0500 - - Update Makefile for new darwin scripts - -commit c7b67e874bb89859f9a07d1cf9606052b6c0dcc1 -Author: Anthony Green -Date: Sat Mar 1 18:34:18 2014 -0500 - - Add README note - -commit a04e30ba3dc303133d459c1ac273ceefe4d49b32 -Author: Anthony Green -Date: Fri Feb 28 17:20:59 2014 -0500 - - Add missing -DFFI_DEBUG flag - -commit 934dc1b5c8d6a9e727bedc72342831eb7d62c35f -Merge: 11d7aa9 67fbef3 -Author: Anthony Green -Date: Fri Feb 28 01:10:17 2014 -0500 - - Merge branch 'master' of github.com:/atgreen/libffi - -commit 11d7aa9d7a4bbe642944edc0f07cf96db9b270b6 -Merge: b40aeda 3b44d41 -Author: Anthony Green -Date: Fri Feb 28 01:06:48 2014 -0500 - - Merge pull request #46 from makotokato/android-clang - - Fix build failure when using clang for Android - -commit 67fbef3b56ff0ef88f9b1a7fe48cb77222fa6cec -Merge: b40aeda 3b44d41 -Author: Anthony Green -Date: Fri Feb 28 01:06:48 2014 -0500 - - Merge pull request #46 from makotokato/android-clang - - Fix build failure when using clang for Android - -commit b40aeda31a74d95a37c723b6243aabac466e67c4 -Merge: 20698ab 53ceaf1 -Author: Anthony Green -Date: Fri Feb 28 01:01:29 2014 -0500 - - Merge branch 'master' of github.com:/atgreen/libffi - -commit 53ceaf14c5eeb16ba09745f0ca87cca367d41a90 -Merge: 860fe66 cc9b518 -Author: Anthony Green -Date: Fri Feb 28 01:01:02 2014 -0500 - - Merge pull request #40 from wojdyr/master - - Correct the -L flag in libffi.pc.in - -commit 20698abc6a00092fd7fd3e434a3a29dc0f048f1e -Merge: 64bd069 1a0b01e -Author: Anthony Green -Date: Fri Feb 28 00:56:27 2014 -0500 - - Merge pull request #66 from ppizarro/master - - BlackFin fixes - Fatal error when calling a function defined in a shared library from within the function called by FFI - -commit 860fe6646f5ae603e99a8d1d722ddddba8b75769 -Merge: 64bd069 1a0b01e -Author: Anthony Green -Date: Fri Feb 28 00:56:27 2014 -0500 - - Merge pull request #66 from ppizarro/master - - BlackFin fixes - Fatal error when calling a function defined in a shared library from within the function called by FFI - -commit 64bd06990a7accf72271516a2110b86cdccd8df4 -Author: Anthony Green -Date: Fri Feb 28 00:52:56 2014 -0500 - - Add ChangeLog entry for Josh's change - -commit edf29c5169b06fcfc241445e152e325bc3c50e0e -Merge: 33c9954 3998d26 -Author: Anthony Green -Date: Fri Feb 28 00:50:25 2014 -0500 - - Merge pull request #75 from joshtriplett/longdouble - - Fix build error on x86 without distinct long double - -commit 33c9954f2eec539011a0f93270aaf013318837ae -Author: Anthony Green -Date: Fri Feb 28 00:38:41 2014 -0500 - - Rebuilt with new libtool - -commit 926b6989fbd08488b9105943293353d45ac527e0 -Merge: 5a88c85 cc82051 -Author: Anthony Green -Date: Fri Feb 28 00:26:57 2014 -0500 - - Merge branch 'master' of github.com:/atgreen/libffi - - Conflicts: - ChangeLog - -commit 5a88c85fde304052bed1581ed0b6452ac2c68838 -Author: Anthony Green -Date: Fri Feb 28 00:23:04 2014 -0500 - - Fix spelling errors - -commit cc82051c7e80cea772c4b72da026eb7e68d598fc -Author: Anthony Green -Date: Fri Feb 28 00:23:04 2014 -0500 - - Fix spelling errors - -commit 001aaf4b1b56349596bb6f6b5c1613dcbbd84ea8 -Author: Anthony Green -Date: Fri Feb 28 00:20:17 2014 -0500 - - When no VFP arguments are present the IP register is used - uninitialized. Initialize it to the value of FP. - - This fixes a number of testsuite failures when configured for - armv7l-unknown-linux-gnueabihf - -commit 49f7729c3ce697c12408c42ccb29cdf4eb66bb85 -Author: Anthony Green -Date: Fri Feb 28 00:17:16 2014 -0500 - - aarch64 fix - -commit 447483d51c6aa9df7116f346a73fc1cf795f4c2b -Merge: 51377bd b4df9cf -Author: Anthony Green -Date: Thu Feb 27 15:42:41 2014 -0500 - - Fix ChangeLog merge - -commit 3998d2604b5c0d45a098ff3119a9fd9710ef429d -Author: Josh Triplett -Date: Mon Feb 17 11:20:33 2014 -0800 - - Fix build error on x86 without distinct long double - - src/x86/ffi64.c: In function 'classify_argument': - src/x86/ffi64.c:205:5: error: duplicate case value - case FFI_TYPE_LONGDOUBLE: - ^ - src/x86/ffi64.c:202:5: error: previously used here - case FFI_TYPE_DOUBLE: - ^ - -commit 51377bda9aed0b2c1309c818460cab9d9ab3d46e -Merge: f08da54 40927bd -Author: Anthony Green -Date: Sat Feb 15 08:06:29 2014 -0500 - - Merge pull request #72 from heiher/devel - - MIPS N32: Fix call floating point va function - -commit f08da5465463e60a28f5e921f23ebf2ba984c148 -Merge: 3dc3f32 fa5f25c -Author: Anthony Green -Date: Sat Feb 15 08:06:11 2014 -0500 - - Merge pull request #68 from zeldin/master - - Linux/ppc64: Remove assumption on contents of r11 in closure - -commit 40927bd3e1e7c6007025ba10854fd8a0664e47df -Author: Heiher -Date: Tue Jan 21 23:18:27 2014 +0800 - - Fix call floating point va function - - I'm not sure floating-point arguments in GPR or FPR before calling - variable number arguments function. so, load all arguments to GPR and - FPR. - -commit b4df9cf9cc4a9a9401a53fd6bea1f3c2c283b97b -Author: Zachary Waldowski -Date: Wed Feb 5 14:22:52 2014 -0500 - - AArch64: Fix void fall-through case when assertions are enabled - -commit f466aad0d91a117e42571d1d6fb434fa0433c930 -Author: Zachary Waldowski -Date: Tue Jan 21 16:38:31 2014 -0500 - - AArch64: Fix missing semicolons when assertions are enabled - -commit 7ea677733bd98917241852b8901a6b7580728895 -Author: Anthony Green -Date: Sat Nov 30 20:58:31 2013 -0500 - - Remove build-ios from Makefile - - Conflicts: - ChangeLog - -commit 6ae046cc59c12b2cd40158d6bcb96f4a59886159 -Author: Anthony Green -Date: Sat Nov 30 21:06:51 2013 -0500 - - Mention Aarch64 on iOS - -commit bfc06b3fdb32abe90ce0749aedfec649df85a7ef -Author: Zachary Waldowski -Date: Mon Dec 30 17:36:39 2013 -0500 - - Update ChangeLog - -commit 0a0f12ce1f7be81006b08a3c81a636926d283a9b -Author: Zachary Waldowski -Date: Thu Jan 9 13:50:17 2014 -0500 - - AArch64: Remove duplicitous element_count call. - - This inhibits an analyzer warning by Clang. - -commit 4330fdcd92e67c816288d64ab230237065768206 -Author: Zachary Waldowski -Date: Thu Jan 9 13:53:30 2014 -0500 - - Darwin/aarch64: Respect iOS ABI re: stack argument alignment - -commit 0a333d6c3973935d4fe02aae76b10e39d3c88e07 -Author: Zachary Waldowski -Date: Thu Jan 9 14:03:29 2014 -0500 - - Darwin/aarch64: Fix size_t assumptions - -commit 2c18e3c76aad1b426617db05a4384e7c3a920176 -Author: Zachary Waldowski -Date: Mon Dec 30 16:14:02 2013 -0500 - - Darwin/aarch64: Fix "shadows declaration" warnings - -commit 1b8a8e20e344f3c55495ab6eb46bd14e843d4b3e -Author: Zachary Waldowski -Date: Thu Jan 9 13:55:21 2014 -0500 - - Darwin/aarch64: Use Clang cache invalidation builtin - -commit 6030cdcae776f8fb5876a53168f7d1e75d28a242 -Author: Zachary Waldowski -Date: Mon Dec 30 15:45:51 2013 -0500 - - Darwin/aarch64: Account for long double being equal to double - -commit 5658b0892683d2e24e4d5842978c184a7ad33858 -Author: Zachary Waldowski -Date: Mon Dec 30 16:33:47 2013 -0500 - - Darwin/aarch64: Use CNAME, restrict .size like ARM - -commit 07175780802acec5dc49fdedd6d20a62409a6707 -Author: Zachary Waldowski -Date: Mon Dec 30 17:48:22 2013 -0500 - - Darwin/aarch64: Fix invalid reference in assembly - -commit 9da28b44277fea3aeb827c35dd63d609d2524a8b -Author: Zachary Waldowski -Date: Mon Dec 30 16:23:21 2013 -0500 - - Darwin/x86_64: Fix 64-bit type shortening warnings - -commit 821d398f08bd1d540a5b235507812ffeee49b580 -Author: Zachary Waldowski -Date: Thu Jan 9 13:15:06 2014 -0500 - - Darwin: Merge build scripts, redo project, incl. arm64 - -commit 6eff9ff9e72463b9783be2514f944b6f05692054 -Author: Zachary Waldowski -Date: Mon Dec 30 17:48:10 2013 -0500 - - Darwin/iOS: Improve unified syntax use for LLVM - -commit ba0ea99c82aadd5957386a031e3122011bd36d52 -Author: Zachary Waldowski -Date: Mon Dec 30 15:27:44 2013 -0500 - - Fix dlmalloc warnings due to set_segment_flags, sizeof(size_t) - -commit 994be3a5c1d0d17b19103396103e128517fd62f9 -Author: Zachary Waldowski -Date: Mon Dec 30 15:27:14 2013 -0500 - - Darwin/iOS: Fix mis-typing of vfp_reg_free - -commit a8e0a835ab1f62d03ad6391760e3e8b7732d24f8 -Author: Zachary Waldowski -Date: Mon Dec 30 15:26:20 2013 -0500 - - Darwin/ARM: Assert on NULL dereference - - This inhibits an analyzer warning by Clang on all platforms. - -commit 13675341581c489ed9df8ba390c8e08a732decb2 -Author: Zachary Waldowski -Date: Thu Jan 9 13:42:08 2014 -0500 - - Darwin/i386: Inhibit Clang previous prototype warnings - -commit 66469c381e2e2cc96e7d409266dea0ffe177eeca -Author: Zachary Waldowski -Date: Thu Jan 9 13:41:45 2014 -0500 - - Darwin/ARM: Inhibit Clang previous prototype warnings - -commit 5bfe62a00d2d659eec9f19b39802b6e69844fc27 -Author: Zachary Waldowski -Date: Thu Jan 9 13:41:27 2014 -0500 - - Darwin/AArch64: Inhibit Clang previous prototype warnings - -commit fa5f25c20f76a6ef5e950a7ccbce826672c8a620 -Author: Marcus Comstedt -Date: Sat Jan 4 19:00:08 2014 +0100 - - Linux/ppc64: Remove assumption on contents of r11 in closure - -commit 1a0b01e171e9c750437cef2f18917f5a6e32c498 -Author: Paulo Pizarro -Date: Thu Jan 2 16:17:59 2014 -0200 - - When the function called by the ffi called a function defined in a shared library generate a fatal error - The correction was to take into consideration the GOT. - -commit 3dc3f32c35db5ab995a835225f6815369735ceb7 -Author: Anthony Green -Date: Thu Dec 5 16:23:25 2013 -0500 - - Undo iOS ARM64 changes. - -commit 356b2cbc304bfe5bdc28b8d1c68d1ff084e9ec37 -Merge: 484a758 07345a3 -Author: Anthony Green -Date: Sat Nov 30 22:38:13 2013 -0500 - - Merge branch 'master' of github.com:/atgreen/libffi - -commit 484a7584260e2fbb399ce90083046834271bf9ff -Author: Anthony Green -Date: Sat Nov 30 21:06:51 2013 -0500 - - Mention Aarch64 on iOS - -commit 07345a30ec0a2fa45a7c363d301f57723690cfa0 -Author: Anthony Green -Date: Sat Nov 30 21:06:51 2013 -0500 - - Mention Aarch64 on iOS - -commit d4b931c1b872378c35f12ddbb9a6d55e7f17c65e -Author: Anthony Green -Date: Sat Nov 30 20:58:31 2013 -0500 - - Remove build-ios from Makefile - -commit dfbf236d70fc1ec68e6ff193584a154353508e2f -Merge: 852ac3b bb9740e -Author: Anthony Green -Date: Sat Nov 30 20:54:54 2013 -0500 - - Merge branch 'master' of github.com:/atgreen/libffi - Add ChangeLog entry. - -commit bb9740e545205f93a525c77aa6d1cbf4ca9371f3 -Merge: ac75368 4d701e0 -Author: Anthony Green -Date: Sat Nov 30 17:54:39 2013 -0800 - - Merge pull request #60 from zwaldowski/ios-redo - - Mac/iOS support, including aarch64 port - -commit 4d701e03faa475a5eb3b54b90046114a1e27b813 -Author: Zachary Waldowski -Date: Sat Nov 30 13:25:27 2013 -0500 - - Darwin: Properly export headers from Xcode project - -commit 022f12eb9ad2264e838fa5fb453733f5177888f4 -Author: Zachary Waldowski -Date: Sat Nov 30 12:21:38 2013 -0500 - - Darwin: Freshen gen scripts, remove old build-ios.sh - -commit e820fe2025d7ad3df7584407946dfaad2af69599 -Author: Zachary Waldowski -Date: Sat Nov 30 12:03:51 2013 -0500 - - Darwin/iOS: Include x86_64+aarch64 pieces in library - -commit 0278284e470ec91db7cdc15ac3dcd64683305848 -Author: Zachary Waldowski -Date: Sat Nov 30 03:03:37 2013 -0500 - - Darwin/aarch64: size_t assumptions - -commit 9775446b6441c91cd9059215c106aa3bcf949767 -Author: Zachary Waldowski -Date: Sat Nov 30 02:39:34 2013 -0500 - - Darwin/aarch64: Fix “shadows declaration†warnings - -commit 4260badc37705d3618e774dfe61184ac709881c1 -Author: Zachary Waldowski -Date: Sat Nov 30 02:08:14 2013 -0500 - - Darwin/aarch64: Use Clang cache invalidation builtin - -commit 9fa7998d5f9250908cbf12a671479852ebadf9d1 -Author: Zachary Waldowski -Date: Sat Nov 30 02:07:48 2013 -0500 - - Darwin/aarch64: Inhibit Xcode warning - -commit 0e832048a93830575b0976406444e134e649a4f7 -Author: Zachary Waldowski -Date: Sat Nov 30 02:07:34 2013 -0500 - - Darwin/aarch64: double == long double - -commit 602dc22d76931092610234cf063f9f1b8dbc1a51 -Author: Zachary Waldowski -Date: Sat Nov 30 02:06:00 2013 -0500 - - Darwin/iOS prep script: try and compile for arm64 - -commit b513dfe79de4725e8a717325a9e3b5b9f69f63dc -Author: Zachary Waldowski -Date: Sat Nov 30 02:05:22 2013 -0500 - - Darwin/aarch64: Restrict .size to ELF like arm32. - -commit bc978099bf2812de755c076b67ef9c2547607572 -Author: Zachary Waldowski -Date: Sat Nov 30 02:04:57 2013 -0500 - - Darwin/aarch64: Potentially(?) fix compile error - -commit d6bb9314467c6e0683156559d23ca341c43fa3c8 -Author: Zachary Waldowski -Date: Sat Nov 30 02:04:22 2013 -0500 - - Darwin/aarch64: Use CNAME refs - -commit 33c46ce5680eea28d3437c8771ec1d137e226b45 -Author: Zachary Waldowski -Date: Sat Nov 30 04:13:42 2013 -0500 - - Darwin/Mac: Fix 64/32 shortening warnings - -commit 0612081e6c161d9d820742f995975d35da2adbc2 -Author: Zachary Waldowski -Date: Sat Nov 30 03:03:00 2013 -0500 - - Darwin: Misc size_t warnings - -commit 6a6247d179ec3859311c2d8775841b884f309f66 -Author: Zachary Waldowski -Date: Sat Nov 30 02:55:48 2013 -0500 - - Darwin: Fix dlmalloc warnings due to sizeof(size_t) - -commit 4d60d9e1e32de6166ffd63bbe9ce54cf961c78fc -Author: Zachary Waldowski -Date: Sat Nov 30 04:09:30 2013 -0500 - - Darwin: Rebuild Xcode project - -commit cb719a5c1c2eb391d6a5f5e02484ba4aa990a51b -Author: Zachary Waldowski -Date: Sat Nov 30 04:09:18 2013 -0500 - - Darwin/iOS: Fix LLVM 3.3 warning re: memcpy. - -commit 21bde92c9abb378f9c456a9d95e6f9b99ef8c920 -Author: Zachary Waldowski -Date: Sat Nov 30 03:43:42 2013 -0500 - - Darwin: Clean up, modernize generator scripts - -commit fd54eab74cef7891e4acaaafb71e783142ecb69e -Author: Zachary Waldowski -Date: Sat Nov 30 03:38:02 2013 -0500 - - Darwin/Mac: Also exclude OS X generated source - -commit 953b6f14c655141f9e7d82550a312c3eeb961091 -Author: Zachary Waldowski -Date: Tue Apr 24 11:16:20 2012 -0400 - - Darwin/iOS: More unified syntax support w/ Clang. - - Signed-off-by: Zachary Waldowski - -commit c713a55379481c339877f2e0003d97cb8d9ed80e -Author: Zachary Waldowski -Date: Tue Apr 24 10:25:29 2012 -0400 - - Darwin/iOS: Simplify RETLDM arguments for LLVM 3.1 - - Signed-off-by: Zachary Waldowski - -commit 16ba1b80028db5cb71cf86e5f79f5e48317f83c8 -Author: Zachary Waldowski -Date: Wed Apr 11 23:26:04 2012 -0400 - - Darwin: Silence Clang warnings. - -commit 852ac3bd302d6ed97b1ef65f4cbed69c258a48df -Merge: ab79d6e ac75368 -Author: Anthony Green -Date: Thu Nov 21 21:25:44 2013 -0500 - - Merge branch 'master' of github.com:/atgreen/libffi - - Conflicts: - ChangeLog - -commit ab79d6e21992dd86139ba07530ff888833b78a04 -Author: Alan Modra -Date: Thu Nov 21 06:12:35 2013 -0500 - - This separates the 32-bit sysv/linux/bsd code from the 64-bit linux - code, and makes it possible to link code compiled with different - options to those used to compile libffi. For example, a - -mlong-double-128 libffi can be used with -mlong-double-64 code. - - Using the return value area as a place to pass parameters wasn't such - a good idea, causing a failure of cls_ulonglong.c. I didn't see this - when running the mainline gcc libffi testsuite because that version of - the test is inferior to the upstreamm libffi test. - - Using NUM_FPR_ARG_REGISTERS rather than NUM_FPR_ARG_REGISTERS64 meant - that a parameter save area could be allocated before it was strictly - necessary. Wrong but harmless. Found when splitting apart ffi.c - into 32-bit and 64-bit support. - -commit ac7536889334d4be50709006d7e23536364d7891 -Author: Alan Modra -Date: Thu Nov 21 06:12:35 2013 -0500 - - This separates the 32-bit sysv/linux/bsd code from the 64-bit linux - code, and makes it possible to link code compiled with different - options to those used to compile libffi. For example, a - -mlong-double-128 libffi can be used with -mlong-double-64 code. - - Using the return value area as a place to pass parameters wasn't such - a good idea, causing a failure of cls_ulonglong.c. I didn't see this - when running the mainline gcc libffi testsuite because that version of - the test is inferior to the upstreamm libffi test. - - Using NUM_FPR_ARG_REGISTERS rather than NUM_FPR_ARG_REGISTERS64 meant - that a parameter save area could be allocated before it was strictly - necessary. Wrong but harmless. Found when splitting apart ffi.c - into 32-bit and 64-bit support. - -commit 69df91cfb4fa6bcb644350a80bff970f27478a6a -Merge: 2f45082 aa1f62c -Author: Anthony Green -Date: Mon Nov 18 06:34:04 2013 -0800 - - Merge pull request #59 from iains/powerpc-darwin-unwind-fix - - Fix PowerPC Darwin FDE encodings to use pcrel correctly. Modernise the picbase labels. - -commit aa1f62c0a093c30325dff1d4d2b6b4b22eb96929 -Author: Iain Sandoe -Date: Mon Nov 18 13:11:56 2013 +0000 - - Fix PowerPC Darwin FDE encodings to use pcrel correctly. Modernise the picbase labels. - -commit 2f450822a8698ba88441c56d152c7dc8924b127f -Author: Anthony Green -Date: Mon Nov 18 06:52:29 2013 -0500 - - Clean up code to appease modern GCC compiler. - -commit 16d56c51aded374730920a4acde76ff3d2860ae1 -Author: Alan Modra -Date: Mon Nov 18 06:36:03 2013 -0500 - - An #endif in the wrong place would cause compile failure on powerpcle. - Using bl instead of b doesn't cause runtime failures as you might think, - but does mess the processor branch prediction. - -commit 34f878a5ef28663f6b1d7fd26fb099429ea1579e -Merge: 83f65b6 1fd0457 -Author: Anthony Green -Date: Sat Nov 16 06:57:54 2013 -0500 - - Merge branch 'master' of github.com:/atgreen/libffi - - Conflicts: - ChangeLog - src/powerpc/ffi.c - -commit 83f65b63d9764a9cc7688fc5cda5ee2bd23faf54 -Author: Alan Modra -Date: Sat Nov 16 06:53:50 2013 -0500 - - Finally, this adds _CALL_ELF == 2 support. ELFv1 objects can't be - linked with ELFv2 objects, so this is one case where preprocessor - tests in ffi.c are fine. Also, there is no need to define a new - FFI_ELFv2 or somesuch value in enum ffi_abi. FFI_LINUX64 will happily - serve both ABIs. - -commit 1fd045784cac874b5d76b7fa931f67209a8280d3 -Author: Alan Modra -Date: Sat Nov 16 06:53:50 2013 -0500 - - Finally, this adds _CALL_ELF == 2 support. ELFv1 objects can't be - linked with ELFv2 objects, so this is one case where preprocessor - tests in ffi.c are fine. Also, there is no need to define a new - FFI_ELFv2 or somesuch value in enum ffi_abi. FFI_LINUX64 will happily - serve both ABIs. - -commit 362851379a49ce07d3e36e82c4e5c7b6cc16a352 -Author: Alan Modra -Date: Sat Nov 16 06:52:43 2013 -0500 - - Andreas' 2013-02-08 change reverted some breakage for struct return - values from 2011-11-12, but in so doing reintroduced string - instructions to sysv.S that are not supported on all powerpc variants. - This patch properly copies the bounce buffer to destination in C code - rather than in asm. - - I have tested this on powerpc64-linux, powerpc-linux and - powerpc-freebsd. Well, the last on powerpc-linux by lying to - configure with - - CC="gcc -m32 -msvr4-struct-return -mlong-double-64" \ - CXX="g++ -m32 -msvr4-struct-return -mlong-double-64" \ - /src/libffi-current/configure --build=powerpc-freebsd - - and then - - make && make CC="gcc -m32" CXX="g++ -m32" \ - RUNTESTFLAGS=--target_board=unix/-m32/-msvr4-struct-return/-mlong-double-64\ - check - -commit 1c06515d927d9de1582438d4eb5953890e79c5c7 -Author: Alan Modra -Date: Sat Nov 16 06:41:36 2013 -0500 - - The powerpc64 ABIs align structs passed by value, a fact ignored by - gcc for quite some time. Since gcc now does the correct alignment, - libffi needs to follow suit. This ought to be made selectable via - a new abi value, and the #ifdefs removed from ffi.c along with many - other #ifdefs present there and in assembly. I'll do that with a - followup patch sometime. - - This is a revised version of - https://sourceware.org/ml/libffi-discuss/2013/msg00162.html - -commit a97cf1fae575d8bfd5259c5c422025ad43911326 -Author: Alan Modra -Date: Sat Nov 16 06:40:13 2013 -0500 - - This patch prepares for ELFv2, where sizes of these areas change. It - also makes some minor changes to improve code efficiency. - -commit 164283f4ac5972ce2ab5e015cc2ab1014c23276c -Author: Alan Modra -Date: Sat Nov 16 06:38:55 2013 -0500 - - The powerpc64 support opted to pass floating point values both in the - fpr area and the parameter save area, necessary when the backend - doesn't know if a function argument corresponds to the ellipsis - arguments of a variadic function. This patch adds powerpc support for - variadic functions, and changes the code to only pass fp in the ABI - mandated area. ELFv2 needs this change since the parameter save area - may not exist there. - - This also fixes two faulty tests that used a non-variadic function - cast to call a variadic function, and spuriously reasoned that this is - somehow necessary for static functions.. - -commit 31257b3189f81a199bc2902c22bc5f2d7c54ccde -Author: Andrew Haley -Date: Sat Nov 16 06:35:51 2013 -0500 - - Fix sample closure code - -commit db0ace3a38496af73eae3df02ef353736d16909f -Author: Andrew Haley -Date: Sat Nov 16 06:29:25 2013 -0500 - - Fix broken test cases - -commit de10f5039ed7a53382ddcc95c368d03e535edb98 -Merge: 58c2577 f3657da -Author: Anthony Green -Date: Thu Nov 14 10:56:29 2013 -0500 - - Merge branch 'master' of https://github.com/bivab/libffi - - Conflicts: - ChangeLog - -commit f3657da278dd63afcdd8762894a9bdaea8ef028a -Author: David Schneider -Date: Thu Nov 14 13:02:16 2013 +0100 - - update Changelog - -commit 58c2577a3ff80e7416ef0434769e2af23365719c -Author: Alan Modra -Date: Wed Nov 13 16:55:36 2013 -0500 - - This enshrines the current testsuite practice of using ffi_arg for - returned values. It would be reasonable and logical to use the actual - return argument type as passed to ffi_prep_cif, but this would mean - changing a large number of tests that use ffi_arg and all backends - that write results to an ffi_arg. - -commit 8af42f9944f7ed72c81ae360aac6a84dc11f89dc -Author: Anthony Green -Date: Wed Nov 13 16:40:28 2013 -0500 - - Respect HAVE_ALLOCA_H - -commit cdf405d574f479b782454516366bd4f4b9b3415e -Author: David Schneider -Date: Wed Nov 13 15:50:21 2013 +0100 - - add a testcase for the double/float issue on ARMHF - -commit 77f823e31ffb557a466b24f7fba845fbf7831798 -Author: David Schneider -Date: Wed Nov 13 14:26:57 2013 +0100 - - stop trying to assing vfp regs once we are done with the registers - -commit 37067ec5036f2a6ed7a4799f83f8f53160460344 -Author: David Schneider -Date: Tue Nov 12 19:49:01 2013 +0100 - - mark all vfp registers as used when done. - - To avoid assigning registers the would fit, once arguments have been on - the stack, we mark all registers as used once we do not find a free - register for the first time. - -commit 2f5b7ce545473a7f6e41193edc29407cbebe82d5 -Author: Anthony Green -Date: Sat Nov 9 06:16:32 2013 -0500 - - UltraSPARC IIi fix. Update README and build configury. - -commit becd754434173032f426d22ffcbfe24f55b3c137 -Author: Mark Kettenis -Date: Wed Nov 6 06:43:49 2013 -0500 - - Align the stack pointer to 16-bytes. - -commit 05c31093409f7b3e6d795fac21d2c954313d8162 -Author: Konstantin Belousov -Date: Wed Nov 6 06:40:58 2013 -0500 - - Mark executable as not requiring executable stack. - -commit cf6bf9818e8394cfcdb07a40c6a5e2ee6b01d333 -Author: Anthony Green -Date: Sat Nov 2 17:23:59 2013 -0400 - - Fix up docs - -commit 02177176854d16fc0f1a5958aa34da2f306630ee -Merge: c242217 c265b4c -Author: Anthony Green -Date: Sat Nov 2 17:11:22 2013 -0400 - - Merge branch 'master' of github.com:/atgreen/libffi - -commit c2422174b3edc0de0b148dfd6b67087bb881c4a6 -Merge: f4b843f d918d47 -Author: Anthony Green -Date: Sat Nov 2 14:08:23 2013 -0700 - - Merge pull request #45 from foss-for-synopsys-dwc-arc-processors/arc_support - - arc: Fix build error - -commit c265b4cacb9130f042699a85de9c7242b3f49cc3 -Merge: f4b843f d918d47 -Author: Anthony Green -Date: Sat Nov 2 14:08:23 2013 -0700 - - Merge pull request #45 from foss-for-synopsys-dwc-arc-processors/arc_support - - arc: Fix build error - -commit f4b843f83710ac378c48abd87fe66bb519d30d2e -Author: Anthony Green -Date: Sat Nov 2 17:01:15 2013 -0400 - - Don't align stack for win32 - -commit f3cd39345713db8e414cf642b6cb65a4cfe6018c -Merge: 666f3e7 6aa1590 -Author: Anthony Green -Date: Sat Nov 2 13:17:57 2013 -0700 - - Merge pull request #51 from vbudovski/for_upstream - - Don't use 16 byte aligned stack for WIN32 - -commit 666f3e71b56d92c49fcd2d7f349b8f8ebca0f8a3 -Author: Anthony Green -Date: Sat Oct 26 09:12:42 2013 -0400 - - Add more credits to README. Tidy up. - -commit 73ada14e756bad97fad0e6915a821a3c7e079f81 -Author: Anthony Green -Date: Sat Oct 26 09:09:45 2013 -0400 - - Update README - -commit d3372c54ce7117e80d389ba875dc5b6b2213c71e -Author: Mark H Weaver -Date: Sat Oct 26 08:30:06 2013 -0400 - - Fix N32 ABI issue for MIPS. - -commit d6716aba8118eb0513885cfe557bedebb7016e8b -Author: Anthony Green -Date: Tue Oct 15 15:42:49 2013 -0400 - - Update travis-ci build dependencies to include texinfo - -commit 16b93a211bcfbe4bd0efdcf94de225a71aa0ee02 -Author: Sandra Loosemore -Date: Tue Oct 15 15:33:59 2013 -0400 - - Add nios2 port. - -commit 2f5626ce02fce8267ab48ceb6d7d0ed7d672a75e -Author: Sandra Loosemore -Date: Tue Oct 15 15:32:16 2013 -0400 - - Fix testsuite bug - -commit f64e4a865557e440774436b4c2b2fd7374290e97 -Author: Marcus Shawcroft -Date: Tue Oct 15 15:20:14 2013 -0400 - - Fix many.c testcase for Aarch64 - -commit 128cd1d2f358f26d9fa75a27cf2b30356f5dd903 -Author: Anthony Green -Date: Tue Oct 8 06:45:51 2013 -0400 - - Fix spelling errors - -commit ff06269d707cafbfef2a88afb07a79c9d1480c5f -Author: Anthony Green -Date: Tue Oct 8 06:32:18 2013 -0400 - - Update README for M88K and VAX - -commit d2fcbcdfbea750d1f6a9f493e2e6c4d5ffa71b34 -Author: Anthony Green -Date: Tue Oct 8 06:27:46 2013 -0400 - - Add m88k and VAX support. Update some configury bits. - -commit 6aa15900accc0a648cdebf11ec11d11697ebfffd -Author: Vitaly Budovski -Date: Thu Sep 5 12:05:06 2013 +1000 - - Don't use 16 byte aligned stack for WIN32 - - This fixes a crash when accessing __stdcall functions in Python ctypes. - -commit 3b44d41156149af8da2a58825fefdfa23274ae7a -Author: Makoto Kato -Date: Wed Jul 10 15:34:53 2013 +0900 - - Fix build failure when using clang for Android - - clang for Android generates __gnu_linux__ define, but gcc for Android doesn't. So we should add check it for Android - -commit d918d47809c174d62283306b282749f8db93661f -Author: Mischa Jonker -Date: Mon Jul 8 15:51:36 2013 +0200 - - arc: Fix build error - - One part of the patch for ARC support was missing in the upstreamed - version. - - Signed-off-by: Mischa Jonker - -commit d3d099b40c122550279789200263346f120f6909 -Author: Anthony Green -Date: Tue Jul 2 16:11:38 2013 -0400 - - little-endian ppc64 support - -commit 0f8690a84c874ec09a090c8c6adfb93c594acac6 -Author: Anthony Green -Date: Tue Jul 2 15:54:40 2013 -0400 - - Rebuild for ARC additions - -commit f88118b345f27c46f5445d6e4832c498ff9a6d85 -Author: Anthony Green -Date: Tue Jul 2 15:51:27 2013 -0400 - - Revert "Merge pull request #36 from abergmeier/emscripten_fix" - - This reverts commit 6a4d901dde7b3f87984c563505717cde3113d16e, reversing - changes made to b50a13b9c07ec09af4b9697e482acdad571e6961. - -commit 6a4d901dde7b3f87984c563505717cde3113d16e -Merge: b50a13b 587002c -Author: Anthony Green -Date: Tue Jul 2 12:12:34 2013 -0700 - - Merge pull request #36 from abergmeier/emscripten_fix - - Fixes for building with Emscripten - -commit b50a13b9c07ec09af4b9697e482acdad571e6961 -Merge: 767f1f9 b082e15 -Author: Anthony Green -Date: Tue Jul 2 12:10:26 2013 -0700 - - Merge pull request #44 from foss-for-synopsys-dwc-arc-processors/arc_support - - Add ARC support - -commit 767f1f96e5282da44d7340e6815e9820a3f78e39 -Merge: c3c40e0 b8a91d8 -Author: Anthony Green -Date: Tue Jul 2 12:08:04 2013 -0700 - - Merge pull request #43 from JensTimmerman/__m128 - - added include for xmmintrin.h - -commit b8a91d81be77d479327fdb6bdd9fdae6d18e6e63 -Author: Jens Timmerman -Date: Tue Jul 2 10:57:37 2013 +0200 - - added include for xmmintrin.h - -commit b082e15091961373c03d10ed0251f619ebb6ed76 -Author: Mischa Jonker -Date: Mon Jun 10 16:19:33 2013 +0200 - - Add ARC support - - This adds support for the ARC architecture to libffi. DesignWare ARC - is a family of processors from Synopsys, Inc. - - This patch has been tested on a little-endian system and passes - the testsuite. - - Signed-off-by: Mischa Jonker - -commit cc9b518687e46b0d1acafdd4bc3f3b281c25a3d9 -Author: Marcin Wojdyr -Date: Tue May 14 15:01:23 2013 +0200 - - Update libffi.pc.in - - use -L${toolexeclibdir} instead of -L${libdir} - to be consistent with Makefile.am - -commit 587002c092cffe6e7a8d7028f246c241d03b738c -Author: Andreas Bergmeier -Date: Fri Apr 19 17:12:24 2013 +0200 - - Enable disabling of libtool on platforms where it does not work (e.g. LLVM). - Build libraries normally then. - -commit c3c40e0290377d7cf948b072eedd8317c4bf215e -Merge: ede96e4 4750e3c -Author: Anthony Green -Date: Sat Mar 30 05:24:14 2013 -0700 - - Merge pull request #34 from davidsch/armhf - - Fix ARM hard-float support for large numbers of VFP arguments - -commit 4750e3c662fd9569cb3e2d28f539685fd1ca8caf -Author: David Schneider -Date: Thu Mar 28 16:56:36 2013 +0100 - - update changelog - -commit 9708e7cf09f1bf815f4d6485eb1f180fabb35804 -Author: David Schneider -Date: Wed Mar 27 19:31:04 2013 +0100 - - folow the ARM hard-float ABI in ffi_prep_incoming_args_VFP - -commit b41120981e5e49ca2da10b94b154775f50da5f36 -Author: David Schneider -Date: Wed Mar 27 16:38:35 2013 +0100 - - create separated versions of ffi_prep_incoming_args_* for SYSV and VFP ABIs. - - The different versions will be called depending on the value of cif->abi - -commit dd26f1f39c54861c5b91931f0f37a72942c2a072 -Author: David Schneider -Date: Thu Mar 28 15:39:01 2013 +0100 - - add a failing test for closures on ARM hardfloat - -commit 3c1608613ab3c2184222b98c5482cddedd6b559b -Author: David Schneider -Date: Tue Mar 26 19:24:47 2013 +0100 - - extend ffi_prepare_args for FFI_VFP (hard-float ABI), fixing an issue with passing VFP arguments in VFP registers and the stack, while at the same time not using all core registers. - -commit 0f2ff2d4c92719be8936179f9ab674f4d1a3fd14 -Author: David Schneider -Date: Tue Mar 26 19:22:02 2013 +0100 - - separate ARM ffi_prepare_args in a version implementing the simple SYSV calling convention and one for the hard-float calling convention - -commit 3a352b8a8252400a83de22c7c424bf1887b4a2ef -Author: David Schneider -Date: Tue Mar 26 14:24:04 2013 +0100 - - move the hardfloat specific argument copying code to the helper function - -commit 5df6b7944a4225b6eb329f3886be64e04e966f29 -Author: David Schneider -Date: Tue Mar 26 14:02:21 2013 +0100 - - extract setting of arguments to be passed to a helper function - -commit 7d1048c471bb4b1f9d67a9e9f8e95f9a1d2e6d45 -Author: David Schneider -Date: Tue Mar 26 11:33:33 2013 +0100 - - extract code to align the argument storage pointer to a helper function - -commit b9f013788f0f384c423ad963475aaacb55598135 -Author: David Schneider -Date: Mon Mar 25 13:27:36 2013 +0100 - - add a testcase, that on ARM hardfloat needs more than the 8 VFP argument registers to pass arguments to a call - -commit 2fbdb0f231cafdb77b025d3cd8afe90cda99b3ba -Author: David Schneider -Date: Mon Mar 25 13:26:02 2013 +0100 - - use the absolute value to check the test result against an epsilon - -commit ede96e4eb660bbf3e0fe048135efa8106f48af5d -Merge: f22ab3c 9e34992 -Author: Anthony Green -Date: Sun Mar 17 18:38:21 2013 -0400 - - Merge branch 'master' of github.com:/atgreen/libffi - -commit f22ab3c6877cbdd07f058b68816b0086b1cb0e1e -Merge: 12b1886 d08124b -Author: Anthony Green -Date: Sun Mar 17 18:34:54 2013 -0400 - - Merge branch 'master' of github.com:/atgreen/libffi - -commit 9e34992a5ea2fda1dba5875bf96dc91a7230f51f -Merge: 12b1886 d08124b -Author: Anthony Green -Date: Sun Mar 17 18:34:54 2013 -0400 - - Merge branch 'master' of github.com:/atgreen/libffi - -commit 12b1886d7b1f8aa264b1d348bfa47a0e14712df4 -Author: Anthony Green -Date: Sun Mar 17 18:32:12 2013 -0400 - - cygwin fix & updates for 3.0.13 - -commit d08124bedf2c6d61874fe215404783aeb9f6f1ac -Author: Anthony Green -Date: Sun Mar 17 18:32:12 2013 -0400 - - cygwin fix & updates for 3.0.13 - -commit cb32c812d04d1dfa72002cc04924e7e4fef89e02 -Author: Anthony Green -Date: Sun Mar 17 09:27:55 2013 -0400 - - Fix lib install dir - -commit efd7866a361a6f636bae8400d26c6811e56ca207 -Author: Anthony Green -Date: Sat Mar 16 08:35:57 2013 -0400 - - 2.0.13rc1 - -commit ff647ad4dff2f07dd153f295a1f70b1d906cd6ca -Merge: 4acf005 d9dd417 -Author: Anthony Green -Date: Sat Mar 16 08:20:40 2013 -0400 - - Merge branch 'master' of github.com:/atgreen/libffi - - Conflicts: - ChangeLog - -commit 4acf0056f55c757490dae6c29a65b0321327ea8a -Author: Anthony Green -Date: Sat Mar 16 08:18:45 2013 -0400 - - Build fix for soft-float power targets - -commit 675c9839224e4268187f1ec6f512127f9db555d0 -Author: Anthony Green -Date: Sat Mar 16 08:12:38 2013 -0400 - - Documentation fix - -commit 8a286f570ccd41db81f74ea7f248da62241d898a -Author: Anthony Green -Date: Sat Mar 16 08:01:19 2013 -0400 - - Fix for m68000 systems - -commit d9dd417b09566af55b7b3000bb53ccaf2e1d6c92 -Author: Anthony Green -Date: Sat Mar 16 08:01:19 2013 -0400 - - Fix for m68000 systems - -commit 215763d012a944d95406b394d6013b80d220e870 -Author: Anthony Green -Date: Sat Mar 16 07:57:35 2013 -0400 - - Update configury. - -commit 9180d8f39c9b6afe17b78277c2711a5d9948e824 -Merge: 2fb527a 7e1b326 -Author: Anthony Green -Date: Sat Mar 16 07:46:55 2013 -0400 - - Merge branch 'master' of github.com:/atgreen/libffi - -commit 2fb527a017a4943e176a489ff103231b86464b59 -Author: Anthony Green -Date: Sat Mar 16 07:46:38 2013 -0400 - - Add Meta processor support - -commit 211a9ebf4d1a9801e15e103566aed2b8c42790be -Merge: f308faf ee18766 -Author: Anthony Green -Date: Sat Mar 16 04:24:40 2013 -0700 - - Merge pull request #32 from alex/patch-1 - - Fix for a crasher due to misaligned stack on x86-32. - -commit 7e1b32649efd24814e86172e196f390566f9e970 -Merge: f308faf ee18766 -Author: Anthony Green -Date: Sat Mar 16 04:24:40 2013 -0700 - - Merge pull request #32 from alex/patch-1 - - Fix for a crasher due to misaligned stack on x86-32. - -commit ee18766b169811426c14b011fbb46d81e344f926 -Author: Alex Gaynor -Date: Thu Mar 14 15:00:33 2013 -0700 - - Fix for a crasher due to misaligned stack on x86-32. - - Full information on reproduction (using Python's ctypes available here: http://bugs.python.org/issue17423) - -commit f308faf1eabaf8dc24966ab17fbf94368f46b9c7 -Author: Anthony Green -Date: Mon Feb 11 14:25:13 2013 -0500 - - Add moxie support. Release 3.0.12. - -commit 4ea22e54e3b143fe05c413f6dddd236af6bcbfb2 -Author: Anthony Green -Date: Sun Feb 10 08:48:38 2013 -0500 - - Update README - -commit 10e77227b6ae85f46f28590bfb09ca3608554358 -Author: Anthony Green -Date: Sun Feb 10 08:47:26 2013 -0500 - - mend - -commit a9521411a53d58f2bf88199242200ceb0d4dae3a -Author: Anthony Green -Date: Sat Feb 9 06:54:40 2013 -0500 - - sparc v8 and testsuite fixes - -commit 70b11b47eea93bf43627588d494d0b3b0d062481 -Author: Anthony Green -Date: Fri Feb 8 16:12:19 2013 -0500 - - Fix small struct passing on ppc - -commit 63ba1fa79f7c4ce42de848debe233aab31aecb51 -Author: Anthony Green -Date: Fri Feb 8 15:18:19 2013 -0500 - - Remove xfail for arm*-*-*. - -commit 24fbca4c1d57d4ea628c0a8ba643684daf54a37e -Author: Anthony Green -Date: Fri Feb 8 14:19:56 2013 -0500 - - Fix typo - -commit b0fa11cb0a94ce6baca058eab9b10e40475e71d6 -Author: Anthony Green -Date: Fri Feb 8 14:17:13 2013 -0500 - - More man page cleanup - -commit 8bd15d139a58a6e46dc90a1cb2d89f59f32f06c7 -Author: Anthony Green -Date: Fri Feb 8 13:56:37 2013 -0500 - - Fix many.c testcase for ppc - -commit 7aab825cf198be85490d3cd80e778d415d85ad9b -Author: Anthony Green -Date: Fri Feb 8 13:26:21 2013 -0500 - - Add missing files to dist - -commit cb03ea8f4eb08024e44abe4392edc77b89fbfbad -Author: Anthony Green -Date: Fri Feb 8 12:25:18 2013 -0500 - - sparc v9 fixes for sun tools - -commit 35ee8d44f31dd3d3b88083c837dc351593e13cc2 -Author: Anthony Green -Date: Fri Feb 8 07:12:41 2013 -0500 - - Fix microblaze big-endian struct issue - -commit 9db7e1a958fc484ba149efe027008b9a170395fb -Author: Anthony Green -Date: Thu Feb 7 21:06:08 2013 -0500 - - Fix botched sparc patch. Update version. - -commit ce0138e61455f268af326e26908b9680ec2c4bea -Author: Anthony Green -Date: Thu Feb 7 18:04:01 2013 -0500 - - Update bug report address. rc2. - -commit fd07c9e40451e0ec1d0475cd54a83d45ccaea2c0 -Author: Anthony Green -Date: Thu Feb 7 18:00:36 2013 -0500 - - Add cache flushing routine for sun compiler on sparc solaris 2.8 - -commit ed6ae9501b2bab45daf93b4935eb0c977635b763 -Author: Anthony Green -Date: Thu Feb 7 16:43:36 2013 -0500 - - Add libtool-ldflags. Define toolexeclibdir for non-GCC builds. - -commit ffef2e046aaec853be356f0b8770a335185ea9cf -Author: Anthony Green -Date: Thu Feb 7 15:47:01 2013 -0500 - - x32 and libtool fixes - -commit 95eecebb2858dc6f1495a61072ff36d0a8127144 -Author: Anthony Green -Date: Thu Feb 7 15:32:46 2013 -0500 - - Remove a.out cruft from dist - -commit 176aa9d2e23d9cd57d6f250692d910b408f9a651 -Author: Anthony Green -Date: Thu Feb 7 15:29:22 2013 -0500 - - Fix GCC usage test and update README - -commit f3a4f3fdde89b04d66983a42a25d09161c5d4d54 -Author: Anthony Green -Date: Thu Feb 7 09:57:20 2013 -0500 - - Fixes for AIX xlc compiler. - -commit 522f8fef49848927482bc63c94afaea5b84e5ec1 -Author: Anthony Green -Date: Wed Feb 6 20:31:31 2013 -0500 - - Fix man page. Clean out junk. - -commit c4dfa259eb4e8e6f4c397868d7fee80aa0bb6a12 -Author: Anthony Green -Date: Wed Feb 6 17:43:24 2013 -0500 - - Bump soversion - -commit f62bd63fe6123cadedb8b2b2c72eb549c40fbce9 -Author: Anthony Green -Date: Wed Feb 6 17:38:32 2013 -0500 - - Release candidate 1 - -commit f7cd61e9e68a4a51147df04d75bfe5b91b9d9286 -Author: Anthony Green -Date: Wed Feb 6 17:38:04 2013 -0500 - - Fix pkgconfig install bits - -commit 6a790129427121f7db2d876e7218a3104e6d2741 -Author: Anthony Green -Date: Wed Feb 6 17:37:15 2013 -0500 - - Work around LLVM ABI problem on x86-64 - -commit 370112938e705128fd5dd4017fc1a1210bd0271a -Merge: bada2e3 bcc0c28 -Author: Anthony Green -Date: Sun Jan 27 05:09:04 2013 -0800 - - Merge pull request #28 from jralls/master - - Reorder x86_64 checks - -commit bcc0c28001b6d427d5cd8037d2e3c892babc6b4c -Author: John Ralls -Date: Sat Jan 26 15:21:14 2013 -0800 - - Reorder x86_64 tests - - So that darwin and cygwin/mingw are tested before the generic check -- - which allows them to actually be set. - -commit bada2e326d9a9acf3ae40cfa4f5d7a9ba97b2ea8 -Author: Anthony Green -Date: Mon Jan 21 08:02:07 2013 -0500 - - Update README - -commit 655bb8f3690feba8e840a5f1854b1d78ed08f692 -Merge: 1035ffb 840f975 -Author: Anthony Green -Date: Mon Jan 21 08:01:24 2013 -0500 - - Merge branch 'master' of github.com:/atgreen/libffi - -commit 1035ffb2f468e1a1c401d58cff7e7abb69838e68 -Merge: aeb8719 4086024 -Author: Anthony Green -Date: Mon Jan 21 07:55:53 2013 -0500 - - Update README - -commit 840f975866052fdd91b2c224d56e01ae5900b60d -Merge: aeb8719 4086024 -Author: Anthony Green -Date: Mon Jan 21 07:55:53 2013 -0500 - - Merge branch 'master' of github.com:/atgreen/libffi - -commit aeb8719a34756969970603fca4568530d56708af -Author: Anthony Green -Date: Mon Jan 21 07:37:30 2013 -0500 - - New microblaze support - -commit 40860245a4fd91a1b88adc9171ec993c549e45d5 -Author: Anthony Green -Date: Mon Jan 21 07:37:30 2013 -0500 - - New microblaze support - -commit 20cae32b152b43679ae65a85db9a1c6bb8a143dd -Author: Anthony Green -Date: Mon Jan 21 07:07:38 2013 -0500 - - Xtensa support - -commit 9742f91782faef4a15941508a22c408fb7d1d227 -Author: Anthony Green -Date: Mon Jan 21 07:03:41 2013 -0500 - - Mention IBM XL compiler support on AIX. - -commit f03eab08248f122ce3b623a18df9e19fae1b6e98 -Author: Anthony Green -Date: Fri Jan 11 17:14:11 2013 -0500 - - Remove obsolete inline test functions - -commit 05fbe1faedc7b2580d5f14010d00e9e3cee73951 -Author: Anthony Green -Date: Fri Jan 11 16:54:40 2013 -0500 - - xlc compiler support - -commit 0b4986a7889ed1864674192228f1162c1b5770a8 -Author: Anthony Green -Date: Fri Jan 11 11:19:52 2013 -0500 - - [travis] install dejagnu with sudo - -commit 3c337eef51ab9a4993fc875bfa26289dd6a08881 -Author: Anthony Green -Date: Fri Jan 11 11:18:14 2013 -0500 - - [travis] install dejagnu - -commit 90720962ce1baf9fc35d1bde1738102bcd5bd5ed -Author: Anthony Green -Date: Fri Jan 11 10:57:30 2013 -0500 - - Add first travis config file - -commit bff052d9cd5be41ba9e47c76114054af487d3c30 -Author: Anthony Green -Date: Fri Jan 11 10:24:32 2013 -0500 - - 32-bit x86 fix and more - -commit cd41aeab6176f839167955c016ecc19f65f75df3 -Author: Anthony Green -Date: Thu Jan 10 17:25:45 2013 -0500 - - Add compiler column to table - -commit 8bf987d4df7c4d21435b9211f6cc86abf5904b42 -Author: Anthony Green -Date: Thu Jan 10 17:24:51 2013 -0500 - - Fix for sunpro compiler on Solaris - -commit 3ee74fd6dc8ccd32b608bbff73526838fc34f70b -Author: Anthony Green -Date: Thu Jan 10 17:15:03 2013 -0500 - - Update documentation version. - -commit 13e2d7b92557a9511a0414df82bf2df3edc55cba -Author: Anthony Green -Date: Thu Jan 10 10:52:02 2013 -0500 - - Handle both 32 and 64-bit x86 builds regardless of target triple - -commit 5141543000fc86a3d49a907a2313713ee79e504d -Author: Anthony Green -Date: Thu Jan 10 07:35:53 2013 -0500 - - Don't run EH tests with non-GNU compiler - -commit 56ba8d86f47937a0afb81a2b9e77c9d235d9db45 -Author: Anthony Green -Date: Thu Jan 10 07:25:10 2013 -0500 - - Don't use warning checking macro with sun compiler - -commit 6a028caec1b2c7904feb4c4f9cb7e1125e1d1b60 -Author: Anthony Green -Date: Thu Jan 10 01:19:43 2013 -0500 - - Don't use GCCisms to define types when - + building with the SUNPRO compiler. - -commit 2d9b3939751b3ef9739049509d353ade10b32a8f -Author: Anthony Green -Date: Wed Jan 9 21:14:54 2013 -0500 - - Fix for closures with sunpro compiler - -commit 8308984e479e3274a36e98e8272b5adbb6b774c2 -Author: Anthony Green -Date: Tue Jan 8 15:14:21 2013 -0500 - - Make sure we're running dejagnu tests with the right compiler. - -commit f26c7ca67147450db2fe25ea932944e6cf145d5c -Author: Anthony Green -Date: Tue Jan 8 14:47:05 2013 -0500 - - Make compiler options in dejagnu runs compiler specific - -commit 74c776e21907fc2e59257c021f23077f8b7966cb -Author: Anthony Green -Date: Tue Jan 8 12:25:54 2013 -0500 - - Switch x86 Solaris to X86 from X86_64 - -commit 8962c8c8d06803e310bac0ffc8e84ea15daeff3f -Author: Anthony Green -Date: Tue Jan 8 12:22:24 2013 -0500 - - Fix read-only eh_frame test - -commit 35ddb69c2b49746d940e919ca226ecc1be94f14a -Author: Anthony Green -Date: Tue Jan 8 07:53:37 2013 -0500 - - Only emit DWARF unwind info when building with GCC - -commit f7879bc3f3a8d0bbfcc38771732c160a58ba9cd8 -Author: Anthony Green -Date: Tue Jan 8 07:30:28 2013 -0500 - - Testsuite fix for Solaris vendor compiler - -commit 67cea90fc0897021466fd102671019d30db474cd -Author: Anthony Green -Date: Mon Jan 7 06:30:24 2013 -0500 - - mend - -commit 0de3277b18cf54be3b81d509b9be9b47d9bc1e82 -Author: Thorsten Glaser -Date: Mon Dec 3 00:02:31 2012 +0000 - - Testsuite fixes (was Re: [PATCH] Fix libffi on m68k-linux-gnu, completely) - - Dixi quod… - - >although I believe some 3.0.11 checks to be broken: - - And indeed, with a few minor changes on top of git master, - I still get a full run of PASS plus one XPASS on amd64-linux! - - With the other patches (from this message’s parent) and - these applied, I get a full PASS on m68k-linux as well. - - So, please git am these three diffs ☺ - - bye, - //mirabilos - -- - FWIW, I'm quite impressed with mksh interactively. I thought it was much - *much* more bare bones. But it turns out it beats the living hell out of - ksh93 in that respect. I'd even consider it for my daily use if I hadn't - wasted half my life on my zsh setup. :-) -- Frank Terbeck in #!/bin/mksh - From 5cb15a3bad1f0fb360520dd48bfc938c821cdcca Mon Sep 17 00:00:00 2001 - From: Thorsten Glaser - Date: Sun, 2 Dec 2012 23:20:56 +0000 - Subject: [PATCH 1/2] Fix tests writing to a closure retval via pointer casts - - As explained in - all other tests that do the same cast to an ffi_arg pointer instead. - - PASS on amd64-linux (Xen domU) and m68k-linux (ARAnyM) - - Signed-off-by: Thorsten Glaser - -commit 8f4772f383abd71cfa141c8a70ba11c1aa4ebe2c -Author: Anthony Green -Date: Mon Jan 7 06:14:53 2013 -0500 - - m68k fixes for signed 8 and 16-bit calls. - -commit ea7f8440d58afbebb181e295ff564fdf3d6590a0 -Author: Anthony Green -Date: Fri Jan 4 09:09:32 2013 -0500 - - remove gcc-ism - -commit f06c0f10377ac04eeba5e632dbe5c62c629df4e6 -Author: Anthony Green -Date: Wed Jan 2 09:39:17 2013 -0500 - - Add missing ChangeLog entry and generated files. - -commit 1f8675d4c101d19d67ca0a55ff2ba973349558ad -Merge: 335f419 f6b58d2 -Author: Anthony Green -Date: Wed Jan 2 06:34:38 2013 -0800 - - Merge pull request #26 from rofl0r/master - - fix build error on ppc when long double == double - -commit 335f419a86090cda9f215d149572f9481c3ad034 -Merge: 53236d5 6d6f711 -Author: Anthony Green -Date: Wed Jan 2 06:30:03 2013 -0800 - - Merge pull request #23 from rurban/master - - cygwin/mingw shared libs need libtool LDFLAGS = -no-undefined - -commit 53236d5061034cc0a7f4647fc1bd05ba1aeb3d2a -Author: Anthony Green -Date: Wed Jan 2 09:24:55 2013 -0500 - - Regenerate files - -commit 72222ca3fbe560e13c8dc89ca441b28b7cc74daf -Author: Anthony Green -Date: Wed Jan 2 09:06:38 2013 -0500 - - Update texinfo.tex - -commit 1e326c95431fc9896422fa36659f3e833852579c -Author: Anthony Green -Date: Wed Jan 2 09:05:02 2013 -0500 - - Update config.guess and config.sub - -commit cb6671f5b8a9596ff968c6b6c304f70adf71b368 -Author: Anthony Green -Date: Wed Jan 2 08:56:07 2013 -0500 - - Missing .gitignore changes for xcode support - -commit ebbe77966855395a2a47ed2c09a38f93eb0481cf -Author: Anthony Green -Date: Wed Jan 2 08:54:05 2013 -0500 - - missed x32 libtool patch. - -commit 4394096da0aca0dd422b479a043c18b4f05c5770 -Author: Anthony Green -Date: Wed Jan 2 08:51:35 2013 -0500 - - missed trampoline_table patch. Move to GCC. - -commit ed7a59c3ff7c84bd95c374a5aff21599f705e6dc -Author: Anthony Green -Date: Wed Jan 2 08:48:01 2013 -0500 - - Windows symbol export fix. Move to GCC. - -commit ccee09a4ff843b11c7d8b6819776f57d187305c7 -Author: Anthony Green -Date: Wed Jan 2 08:41:55 2013 -0500 - - +2012-03-21 Peter Rosin - + - + * testsuite/lib/target-libpath.exp [*-*-cygwin*, *-*-mingw*] - + (set_ld_library_path_env_vars): Add the library search dir to PATH - + (and save PATH for later). - + (restore_ld_library_path_env_vars): Restore PATH. - -commit 089dbce7cc0889eb26444d89ae062c73c69f26f0 -Author: Anthony Green -Date: Wed Jan 2 08:37:35 2013 -0500 - - med - -commit 980a334c42b4b0eff32e55929ec6727d1326b05d -Author: Anthony Green -Date: Wed Jan 2 07:36:42 2013 -0500 - - Test GCC update - -commit 8bad679ade5000e57cdc9cacde22e8b99840930f -Author: Anthony Green -Date: Wed Jan 2 08:28:35 2013 -0500 - - New stand-alone patch - -commit 981c32ee115e9f0d6546a74592875e138222a9d1 -Author: Anthony Green -Date: Wed Jan 2 07:34:03 2013 -0500 - - Merge with GCC. Eliminate quilt bits. - -commit 61a054929517fb80c437ba71c91f3e20cfff581a -Author: Anthony Green -Date: Wed Nov 28 06:07:41 2012 -0500 - - Refresh config.guess and config.sub - -commit f6b58d2bdc0a24ce94dedce59802f091979df265 -Author: rofl0r -Date: Thu Nov 22 16:26:21 2012 +0100 - - fix build on ppc when long double == double - -commit 69da33a0761aeac73f9e9646269da61c906d6020 -Author: Anthony Green -Date: Mon Nov 12 15:25:47 2012 -0500 - - Pull in config.sub for aarch64 support and more - -commit f680b598b7bdde325ac9349e8c35151c228bf2df -Author: Anthony Green -Date: Tue Nov 6 16:00:40 2012 -0500 - - Add missing aarch64 configury bits - -commit dfadfb19853c57c8623c436d0ef2bdafab24b433 -Author: Anthony Green -Date: Wed Oct 31 06:46:41 2012 -0400 - - Rebase for ppc64 fix - -commit e944b8c7eb1e2eeb9c0f3b9742b4d7f476860ce1 -Author: Anthony Green -Date: Tue Oct 30 14:06:09 2012 -0400 - - Add PaX work-around - -commit 9ccd51be1fdeb99f8b4f42f905166c2abbba8ac0 -Merge: f342996 fa5d747 -Author: Anthony Green -Date: Tue Oct 30 13:37:37 2012 -0400 - - Fix commit conflicts - -commit f342996cb50eb23b868afcff5ac0cdbb6b505d63 -Author: Anthony Green -Date: Tue Oct 30 07:42:27 2012 -0400 - - Darwin12 fix - -commit 58e8b66f70cef2e3c9b0e5a707b45d634cbbf5d9 -Author: Anthony Green -Date: Tue Oct 30 07:07:19 2012 -0400 - - AArch64 port - -commit fa5d747905472571fd472c07d4726017624f66b3 -Author: Anthony Green -Date: Tue Oct 30 07:07:19 2012 -0400 - - AArch64 port - -commit 6993a6686f43f2313b18142c1e96189a27db2aa3 -Author: Anthony Green -Date: Tue Oct 30 06:59:32 2012 -0400 - - Fix autoconf macros - -commit 70084e70ddb13b29dd05c751b1904de206bbe790 -Author: Anthony Green -Date: Fri Oct 12 23:55:06 2012 -0400 - - Update Tile* port info - -commit 9c00a3f6742d61404b31268cc773e7130ff43331 -Author: Anthony Green -Date: Fri Oct 12 16:46:06 2012 -0400 - - TILE-Gx/TILEPro support - -commit 048d2f41c3a6664b4b64bf21e804686662da4160 -Author: Anthony Green -Date: Thu Oct 11 10:55:25 2012 -0400 - - Rebase - -commit 6d6f71108064f5069edd7bf771059d3b82640135 -Author: Reini Urban -Date: Sat Jul 7 12:42:00 2012 -0500 - - cygwin/mingw shared libs need libtool LDFLAGS = -no-undefined - - otherwise only static libs are created. - -commit d330f19292da8f39a78a9e2b0ba08df8094e3bc5 -Author: Nicolas Lelong -Date: Sat May 5 09:37:02 2012 -0400 - - iOS build fixes. - -commit 09b23cfc1d6d15361eee18818851fd3cacb26559 -Author: Anthony Green -Date: Fri Apr 27 08:29:48 2012 -0400 - - Update README with Blackfin/uClinux support - -commit 213ed15c70e72d666154c08e2b41dae3f61f20d3 -Author: Anthony Green -Date: Fri Apr 27 01:34:15 2012 -0400 - - Add blackfin supprt from Alexandre Keunecke. - -commit ff3d76fd427382ce7d2b2ed54acdd0bce470ca4f -Author: Anthony Green -Date: Wed Apr 11 23:16:48 2012 -0400 - - 3.0.11 - -commit 7e0a412c4fd9cbe77b467a9bf86f56aea62632c3 -Author: Anthony Green -Date: Wed Apr 11 22:47:44 2012 -0400 - - Update files to ship - -commit 39e6a5860416f7bad992149817e1da1ba7c460d4 -Author: Zachary Waldowski -Date: Wed Apr 11 22:39:46 2012 -0400 - - More mac/ios build improvements - -commit 853cc722a16f8d1254573ef3bb73c7b8f3d8a110 -Author: Anthony Green -Date: Tue Apr 10 06:33:33 2012 -0400 - - Fix typo for darwin targets - -commit 3f5023068cda07a3dd6dacbaa875a5b5fc96d4bb -Author: Anthony Green -Date: Fri Apr 6 20:34:51 2012 -0400 - - mend - -commit ebb8e8945681ce0af7a5c47a980287e8ece84b84 -Author: Mike Lewis -Date: Fri Apr 6 20:02:08 2012 -0400 - - Build iOS library with xcode - -commit a098b44f4c592c2192fcdef4fad6108eb3f4301c -Author: Anthony Green -Date: Fri Apr 6 17:04:35 2012 -0400 - - Reapply missing testsuite changes for arm - -commit 10d1e51393f08c14045db85843208f44f9f1e9ba -Author: Anthony Green -Date: Fri Apr 6 11:57:14 2012 -0400 - - Update to rc4. Upgrade autoconf version. - -commit 9bcc884276dc0a807b2605e510b11b1740dd9aa2 -Author: Anthony Green -Date: Fri Apr 6 11:53:07 2012 -0400 - - Fix Linux/x32 reference in README - -commit a044a56b1cd2a0924f5ec0d6b5a5089d14fcd1a1 -Author: Anthony Green -Date: Fri Apr 6 10:39:10 2012 -0400 - - Linux/x32 libtool fix - -commit 59bb61a36661b972e8443531d3b7bc736e131a4b -Author: Anthony Green -Date: Fri Apr 6 08:26:14 2012 -0400 - - Update libtool version, README, tests dists - -commit f2981454cbe25cf9411b710f46c5f5552003a123 -Author: Anthony Green -Date: Thu Apr 5 15:45:19 2012 -0400 - - Revert debug code changes - -commit 39dccddb606f6fdb8dcb177d416e884041da6e30 -Author: Zachary Waldowski -Date: Thu Apr 5 12:32:41 2012 -0400 - - Fix building with Clang for Darwin (OS X 10.6+ and iOS - 4.0+) - -commit 3afaa9a34a81a305227ae8cf4f12b9d0484d055e -Author: Peter Rosin -Date: Tue Apr 3 07:40:31 2012 -0400 - - Fix return_uc.c test case on windows. - -commit 65f40c35a2873d8328359ec4512bd0736dbe32c7 -Author: Anthony Green -Date: Tue Apr 3 07:35:59 2012 -0400 - - Repair ppc build regression. - -commit 0a1ab12a8d15caa894116a82249551f23ef65612 -Author: Peter Rosin -Date: Fri Mar 30 08:14:08 2012 -0400 - - Various MSVC-related changes. - -commit e1539266e6c6dde3c99832323586f33f977d1dc0 -Author: Anthony Green -Date: Fri Mar 30 00:40:18 2012 -0400 - - ARM VFP fix for old toolchains - -commit 7c5e60b5f47d725036a72162f136272bc407e3a1 -Author: Anthony Green -Date: Thu Mar 29 08:48:22 2012 -0400 - - Rebase on fixed GCC sources - -commit e72ed5eeaa9cfb0fdc86f6b3422734177b659f96 -Author: Anthony Green -Date: Wed Mar 21 09:52:28 2012 -0400 - - Fix vararg float test - -commit bd78c9c3311244dd5f877c915b0dff91621dd253 -Author: Anthony Green -Date: Wed Mar 21 08:09:30 2012 -0400 - - More cygwin fixes - -commit 84d3253f86dad6b4f261231935675d35fd964b05 -Author: Anthony Green -Date: Mon Mar 19 23:07:35 2012 -0400 - - Rebase post GCC merge - -commit 964c5b93f80dcaacf73056b7d15a4d2b4b7a217c -Author: Anthony Green -Date: Sat Mar 3 14:46:20 2012 -0500 - - abi check fixes and Linux/x32 support - -commit 6c194233a5f6f1d274669afc5924a9e1f69d4876 -Author: Anthony Green -Date: Sat Mar 3 14:17:54 2012 -0500 - - Add -no-undefined for both 32- and 64-bit x86 - windows-like hosts. - -commit 8360bf1cd0aba8db5582266da70467de7e89a57a -Author: Anthony Green -Date: Thu Feb 23 07:01:13 2012 -0500 - - Ensure that users don't include ffitarget.h directly - -commit d578b89619cf3d2baff027b203619dc307fc12e3 -Author: Anthony Green -Date: Wed Feb 15 00:18:18 2012 -0500 - - Fix ABI check regression - -commit dee20f8e45c486f5018f31e09bb362992aa498c3 -Author: Anthony Green -Date: Fri Feb 10 13:06:46 2012 -0500 - - Rebased from gcc - -commit 4130e1972d001143e5e9f3c6b65f2a6f9524169e -Author: Anthony Green -Date: Fri Feb 3 13:18:27 2012 -0600 - - Refresh autoconf-archive m4 scripts - -commit 1ff9c604bb214b5a305064af1049577ef783730a -Author: Anthony Green -Date: Wed Feb 1 16:34:30 2012 -0600 - - Rebase from GCC - -commit 211060eb8f714af0e935430efa6bb45e8e3ffc5d -Author: Anthony Green -Date: Mon Jan 23 14:24:01 2012 -0500 - - Alpha fix - -commit 78d9c638ba0de6edfbc603fd65d19c6562663248 -Author: Anthony Green -Date: Mon Jan 23 14:17:24 2012 -0500 - - mend - -commit afaf3381604bd81803d8a5f3bf4d462299f1aac3 -Author: Anthony Green -Date: Mon Jan 23 14:17:13 2012 -0500 - - mend - -commit 9e9c4aeb77de5608d602109f22100c1c0c79faad -Author: Anthony Green -Date: Mon Jan 23 14:11:23 2012 -0500 - - Add Amiga support - -commit 8efc0b1f4027d5a3cbf205e55d422d94e60f3226 -Author: Anthony Green -Date: Mon Jan 23 13:47:38 2012 -0500 - - Unlikely fixes - -commit 1df51398ae183dc208ba4599ee867278b04d13d3 -Author: Anthony Green -Date: Mon Jan 23 13:43:59 2012 -0500 - - mend - -commit cd2277cc796b96b149cd284ae85326529fe7fb9c -Author: Anthony Green -Date: Mon Jan 23 13:43:38 2012 -0500 - - mend - -commit 164e6fe04b189746c8bd5810c6e3e919770bb9d4 -Author: Anthony Green -Date: Mon Jan 23 12:41:06 2012 -0500 - - m68k fixes - -commit c365ee7577bef00cb3c2c0b5224147aea04138d8 -Author: Anthony Green -Date: Mon Jan 23 11:13:18 2012 -0500 - - Refresh - -commit f22c38bbd93bcc0c04bf26c3e414556b3177c385 -Author: Anthony Green -Date: Fri Nov 18 15:13:41 2011 -0500 - - Update variadic patch - -commit 03e9ee321a3c208f88d2432587ce40b2bb2430ba -Author: Anthony Green -Date: Fri Nov 18 15:13:00 2011 -0500 - - Fix cls_double_va.c and update docs - -commit 95f31151ec792809cfb80d385350f9f56d95aa25 -Author: Anthony Green -Date: Sat Nov 12 23:46:05 2011 -0500 - - Rerun automake - -commit 198ed1ef85cf18342627f8d44bc3f12c9975a49d -Author: Anthony Green -Date: Sat Nov 12 23:45:20 2011 -0500 - - Update version number - -commit 4f17e1f142e805b13959ba2594ee735eae439f4e -Author: Anthony Green -Date: Sat Nov 12 17:22:24 2011 -0500 - - Fix last patch - -commit ff9454da44859716a5bd4eaa344499288c79694f -Author: Anthony Green -Date: Sat Nov 12 17:18:51 2011 -0500 - - Add David Gilbert's variadic function call support - -commit ea14ae85e8f54ff046b7fb8a9cfe349475272044 -Author: Anthony Green -Date: Sat Nov 12 16:36:59 2011 -0500 - - clean up - -commit 52891f8a93f9b8de801cca4cf05639422dc9773e -Author: Anthony Green -Date: Sat Nov 12 16:35:55 2011 -0500 - - Add powerpc soft float support - -commit c8f1bde8e2566c5a87474b4d08aa934d6d28ee75 -Author: Anthony Green -Date: Sat Nov 12 16:21:02 2011 -0500 - - Remove junk file - -commit 6a6e7f862f3cc677e19131587caa619e7f9c7ffd -Author: Anthony Green -Date: Sat Nov 12 16:20:42 2011 -0500 - - Fix kfreebsd - -commit d52fbed05ccbdee9ed8b9c911cbb4f85b0ff0f2a -Author: Anthony Green -Date: Sat Nov 12 16:13:41 2011 -0500 - - Add missing ChangeLog entry - -commit 322052ce65c4fdac85bedc24726fd0e0094ba521 -Author: Anthony Green -Date: Sat Nov 12 16:11:49 2011 -0500 - - Fix arm wince alignment issue - -commit af18df2bc2f52df81e7b5c619bd86db8489dc873 -Author: Anthony Green -Date: Sat Nov 12 15:52:08 2011 -0500 - - Remove use of ppc string instructions - -commit 236c9391321f83ad40daf03f40c35c9ebc1da6b3 -Author: Anthony Green -Date: Sat Nov 12 07:37:40 2011 -0500 - - Fix darwin11 build problem - -commit c411f140f305ebb00d33c92b7cb2742bcd241b6a -Author: Anthony Green -Date: Sat Nov 12 07:32:36 2011 -0500 - - Fix ax_enable_builddir macro on BSD systems - -commit 3d56106b07735abef6ae9f032e94f560a0ed2f30 -Author: Anthony Green -Date: Sat Nov 12 07:20:24 2011 -0500 - - Rebase - -commit 8c01954c50bf8ef2e00a3db166060a1b8f83a20d -Author: Anthony Green -Date: Tue Sep 6 14:26:32 2011 -0400 - - Build assembly files with debug info - -commit fed646a2078969f4ce89c29107f1e72e03f4a977 -Author: Anthony Green -Date: Tue Sep 6 09:50:20 2011 -0400 - - Regenerate configury with missing m4 macros - -commit d76441cf71216f8f1e62e7ec852a7f4e21371ec8 -Author: Anthony Green -Date: Wed Aug 24 10:14:23 2011 -0400 - - Update list of supported OpenBSD systems - -commit ee6696fdf4768ba6dd037fb6dd99435afa13816e -Author: Anthony Green -Date: Tue Aug 23 12:30:29 2011 -0400 - - 3.0.11-rc1. soname bump. - -commit c6265c36a91eab8175d0e72db84d8225418f2379 -Author: Anthony Green -Date: Tue Aug 23 10:31:33 2011 -0400 - - Version 3.0.10 - -commit cc5e41bf32d18a14dbdd653d52eacdbdc934c392 -Author: Anthony Green -Date: Mon Aug 22 16:34:24 2011 -0400 - - Fix use of autoconf macros - -commit 049d8386ff52399e69a530b55b9feedc8a2589d2 -Author: Anthony Green -Date: Mon Aug 22 14:50:10 2011 -0400 - - Many new patches - -commit 3b7efa4e74f0dcebf70b447391987aedd3473306 -Author: Anthony Green -Date: Mon Aug 15 13:25:13 2011 -0400 - - Revert remove-debug-code patch temporarily (for ARM Fedora release) - -commit d992ac54a2a9e7e064ffebcb91e05e7cb86185c7 -Author: Anthony Green -Date: Fri Jul 29 17:32:53 2011 -0400 - - Refresh from GCC - -commit 2d3fb36420e09304220ee6c0652bae5eccdb965d -Author: Anthony Green -Date: Wed Mar 30 16:54:42 2011 -0400 - - Fix darwin EH - -commit 30ff28e1d8cd9ed5319f1fbe9c7cccacc8161fb3 -Author: Anthony Green -Date: Mon Feb 28 15:36:23 2011 -0500 - - Fix permissions - -commit 09f8f310f4f53a24289682d3d28f4399d7bafc3b -Author: Anthony Green -Date: Mon Feb 28 15:36:07 2011 -0500 - - More AIX fixes. rc9. - -commit 53d7b165642c220aa5166ba350b490802f359b54 -Merge: 18dd85d 3000dc2 -Author: Anthony Green -Date: Mon Feb 28 15:23:31 2011 -0500 - - Merge branch 'master' of https://github.com/landonf/libffi-ios - -commit 18dd85d6cb9f3f3eea2a3b70eb4e150045905c55 -Author: Anthony Green -Date: Fri Feb 25 16:23:04 2011 -0500 - - rc8. fix last patch. - -commit 74ee6ea8b42e60d44a3ae8938b1e42a38c1e66b4 -Author: Anthony Green -Date: Fri Feb 25 15:52:14 2011 -0500 - - rc7. More AIX fixes. - -commit 2541679dbd3db0014890f42192dbf8008ab923fa -Author: Anthony Green -Date: Fri Feb 25 15:09:13 2011 -0500 - - Fix ppc32 bug - -commit cbb062cc35c518004f1ab45c847f8ec4f66069ad -Author: Anthony Green -Date: Thu Feb 17 20:39:21 2011 -0500 - - Another non-GCC configury fix - -commit 8cf8878425e9971866fa6b27a3e4914729ad3960 -Author: Anthony Green -Date: Tue Feb 15 15:19:49 2011 -0500 - - Fix ax_cc_maxopt.m4 - -commit 24b72070c0937f9000744c77a636f07e04786b6a -Author: Anthony Green -Date: Mon Feb 14 15:30:57 2011 -0500 - - Fix warning and msvcc patches - -commit d72c49e556a8c516e97f6722d1be2f1209c21207 -Author: Anthony Green -Date: Sun Feb 13 11:41:05 2011 -0500 - - Add missing msvcc.sh - -commit 3000dc237f6017a7445d8404097a4f46b73fdd29 -Merge: 55e4a5a 1fbf9dc -Author: Landon Fuller -Date: Sun Feb 13 08:55:53 2011 -0500 - - Merge remote branch 'upstream/master' - -commit 1fbf9dc44feea564e84ad7406d17c5d5906ce0e0 -Author: Anthony Green -Date: Sun Feb 13 08:06:39 2011 -0500 - - Fix bad_abi test. rc5. - -commit 90af15ef5c1614b76370c4d13954586fabf9e8e3 -Author: Anthony Green -Date: Sat Feb 12 12:29:36 2011 -0500 - - iOS fixes - -commit 55e4a5aa1568558a04aa40f16fc022e459af53e3 -Author: Landon Fuller -Date: Sat Feb 12 12:13:46 2011 -0500 - - Add support for building a full armv6/armv7/i386 universal iOS library - -commit a0c80f279b8733d001cb5e5c5a3289ecb7a6e56a -Author: Landon Fuller -Date: Sat Feb 12 11:43:49 2011 -0500 - - Update my e-mail address. - -commit 8195e0e11df7a53fa474caa9375f73ca1136ed66 -Author: Landon Fuller -Date: Sat Feb 12 11:27:00 2011 -0500 - - Fix symbol prefixes on Darwin. - -commit 56b3f8cef0f28cefaa0f40fe0cf7c524adef131d -Author: Landon Fuller -Date: Sat Feb 12 11:14:54 2011 -0500 - - Modify the ffi_closure structures to hold table/table entry pointers instead of a code buffer. - - This re-integrates commit da2773e02ab26cc11a7f. - -commit 28a00f61ff3f64c4eb2269ce2aea3d493274469e -Author: Landon Fuller -Date: Sat Feb 12 11:01:48 2011 -0500 - - Apple assembler support; fixed most gas/ELF-isms. - -commit 7f2ea33a80bfced5e48ed7292f3b8f057d54ff8f -Author: Landon Fuller -Date: Sat Feb 12 10:39:18 2011 -0500 - - Replace RETLDM macro. - - The macro is incompatible with Apple's assembler; switch to - a simple inline version. - -commit 92ff23e77fa586455b427b71f49e1d9502470e6e -Author: Landon Fuller -Date: Sat Feb 12 10:24:49 2011 -0500 - - Switch to the current iOS 4.2 SDK. - -commit 58fb8ca2dfb89ad70284bb9678d3d4dbb658c8a7 -Merge: cc3fbd9 71c792f -Author: Landon Fuller -Date: Sat Feb 12 10:23:19 2011 -0500 - - Merge remote branch 'upstream/master' - -commit cc3fbd975ce9366d4c40a6ff6c108f664867bd7c -Merge: e449a43 f6ab3ed -Author: Landon Fuller -Date: Sat Feb 12 10:21:02 2011 -0500 - - Merge branch 'master' of github.com:landonf/libffi-ios - -commit e449a43bbe12f8119399928db1ae26adc71dde14 -Author: Landon Fuller -Date: Sat Feb 12 10:20:42 2011 -0500 - - Allow specification of the minimum supported iOS version. - -commit 71c792f51bcf3e2f334e5ea1fb1a8b667cb3aedb -Author: Anthony Green -Date: Sat Feb 12 09:33:11 2011 -0500 - - rc4 - -commit 7c7c9f327299331022f6000603a35f2310dfe308 -Author: Anthony Green -Date: Sat Feb 12 09:29:29 2011 -0500 - - ungccify parts of the build - -commit ed62e48b95a0fa60b685f647cb73c9e190eec35c -Author: Anthony Green -Date: Fri Feb 11 12:23:58 2011 -0500 - - Fix permissions - -commit 17d9e9e68ddb1b915a0b9751713033861b598575 -Author: Anthony Green -Date: Fri Feb 11 12:23:20 2011 -0500 - - Use newer autotools. Only build debug.c when --enable-debug. - -commit 6972a4ffda75761eaab7dfbe0fb1516b255e8e0c -Author: Anthony Green -Date: Fri Feb 11 07:32:51 2011 -0500 - - Fix xlc build on AIX - -commit 1833aa0fb9831eb0725b63e35886c0f6d35df480 -Author: Anthony Green -Date: Fri Feb 11 07:11:04 2011 -0500 - - sparc ABI test fix. - -commit f1fb139b4e283fffdcf205a903943d5e9d2bb2a2 -Author: Anthony Green -Date: Wed Feb 9 18:30:02 2011 -0500 - - Fix tests - -commit 5cb470331d181c84d5d621e88868327a324a5898 -Author: Anthony Green -Date: Wed Feb 9 15:23:06 2011 -0500 - - Fix permissions - -commit 269deef6dbbb426695919d3398357fada3bb288c -Author: Anthony Green -Date: Wed Feb 9 15:22:23 2011 -0500 - - rc3 - -commit 42695e72504f647444b8e8e9b90bd24f1e3220e1 -Author: Anthony Green -Date: Wed Feb 9 15:12:35 2011 -0500 - - Fix IRIX support - -commit a6e56b97f62a3feeb3301c24a2e4cae55e546021 -Author: Anthony Green -Date: Wed Feb 9 15:00:42 2011 -0500 - - Add powerpc64-*-darwin* support - -commit 747d6c32d4abb07c10c3a1f93579c3929aaa2487 -Author: Anthony Green -Date: Wed Feb 9 14:56:23 2011 -0500 - - Add Interix support - -commit eab6e41cde382aa07de6c011d514a14c0d62eb47 -Author: Anthony Green -Date: Wed Feb 9 10:15:02 2011 -0500 - - Remove README.markdown form libffi-ios - -commit 69dbe845f4ee3e6ce8999f17a1e4f2179ef7da89 -Author: Anthony Green -Date: Wed Feb 9 07:38:43 2011 -0500 - - Fix xfails - -commit f498318c07b95137fe259d86bdbe15347588b84a -Author: Anthony Green -Date: Wed Feb 9 06:26:46 2011 -0500 - - Update README for iOS again - -commit 630b9c0ac43c7edcbfd892e23c09fb26724f4ac0 -Author: Anthony Green -Date: Wed Feb 9 06:24:23 2011 -0500 - - Update to rc2 - -commit 0cad4386fa4c9ea5f8ca88b16247db4e5c8fea90 -Author: Anthony Green -Date: Wed Feb 9 06:11:46 2011 -0500 - - Add ChangeLog entry. Fix copyright headers. - -commit 09cb76f2645bd2c151846e9249d8ea707ba01e8c -Author: Anthony Green -Date: Tue Feb 8 20:39:51 2011 -0500 - - Add missing change - -commit 2e3a48ccdd54340983c46a29a0b41985e3e789ac -Author: Anthony Green -Date: Tue Feb 8 20:37:26 2011 -0500 - - Fix make dist - -commit 5e4814d9928e236a2a4afe84d6e1d4fdaa473206 -Author: Anthony Green -Date: Tue Feb 8 19:46:28 2011 -0500 - - fix permissions - -commit 5c0cc6f1536aa1738795a97303810a823c7fa2cb -Author: Anthony Green -Date: Tue Feb 8 19:45:59 2011 -0500 - - 3.0.10rc1 - -commit 857fe3de46d2286afa2fe772920ecf4aefa1688f -Author: Anthony Green -Date: Tue Feb 8 19:39:20 2011 -0500 - - Clean ups - -commit e2214f8adb5577c247452e2cc9f4cbe304d7ca9f -Author: Anthony Green -Date: Tue Feb 8 19:22:56 2011 -0500 - - Update README - -commit 1106229a5721a659da5c231ec0e8211119615394 -Merge: bc9d0be f6ab3ed -Author: Anthony Green -Date: Tue Feb 8 19:20:09 2011 -0500 - - Add iOS support - -commit bc9d0be2958ce475757f34dd2c878948aa77a39f -Author: Anthony Green -Date: Tue Feb 8 17:04:26 2011 -0500 - - 3.0.10rc0 changes - -commit 3b836249feae6d08d3e6887486e4b9961ddafa09 -Author: Anthony Green -Date: Tue Feb 8 14:28:59 2011 -0500 - - Rebase from GCC - -commit a26e3940619faeba6de54824c9540c90b1aab513 -Author: Anthony Green -Date: Tue Feb 8 13:56:12 2011 -0500 - - copyright updates patch - -commit b8099539f00e224107594101e9760b6dc081a056 -Author: Anthony Green -Date: Tue Feb 8 13:50:43 2011 -0500 - - Fix msvcc.sh botch - -commit dc411e8f99113a34656bfd2d3ae51259972488cc -Author: Anthony Green -Date: Tue Feb 8 10:49:29 2011 -0500 - - Fix HP-UX build - -commit 404585d1348e30ac58203bbd876d9131e5aed874 -Author: Anthony Green -Date: Tue Feb 8 10:44:36 2011 -0500 - - Fix sparc v8 aggregate type returns for sun's compiler - -commit 19ce713188e193e4522740d24c20170411883d2d -Author: Anthony Green -Date: Tue Feb 8 10:34:23 2011 -0500 - - grammar fix - -commit 89284fe55f1a8ad3bddbea796ee00d0e3ba411ce -Author: Anthony Green -Date: Tue Feb 8 10:19:19 2011 -0500 - - Fix AIX build with IBM XLC - -commit ba022c338af97cb18d9f8ed5a607fd483a61c09c -Author: Anthony Green -Date: Tue Feb 8 10:12:48 2011 -0500 - - fix win64-underscore patch - -commit 097e5f3924ee92a3ba6cd72f787da8a3eb14fea3 -Author: Anthony Green -Date: Tue Feb 8 10:11:00 2011 -0500 - - x86 pcrel test part 2 - -commit ed2c518d960b91d444be74e5a55779a9c4602f3b -Author: Anthony Green -Date: Tue Feb 8 10:10:07 2011 -0500 - - x86 pcrel test - -commit 0e5843995f46900ef212531281e08b224464f413 -Author: Anthony Green -Date: Tue Feb 8 07:52:40 2011 -0500 - - Refresh from GCC - -commit 5b9cd52784339a42e417174a55e310e214d435f9 -Author: Anthony Green -Date: Mon Nov 22 15:19:57 2010 -0500 - - win64-underscore patch - -commit 2db72615b50eb5c0f29725c02c740a2f0d7fc7d9 -Author: Anthony Green -Date: Sun Nov 21 10:50:56 2010 -0500 - - Rebase - -commit f6ab3edc23dc8fc7c47a31c896044150c23f04b5 -Author: Landon Fuller -Date: Wed Oct 27 19:34:51 2010 -0400 - - Include the license header in the generated output. - -commit cef619462887fa0f360e3ee702d1e04f112b5b38 -Author: Landon Fuller -Date: Wed Oct 27 13:59:30 2010 -0400 - - Add missing copyright/license header. - -commit 53f387b203413c9aa6e31f49dbb70d37d816330b -Author: Landon Fuller -Date: Sun Sep 19 19:57:17 2010 -0700 - - Minor README fix. - -commit 4fbcb5b5fbce11f4b168060e00639db33c85b75b -Author: Landon Fuller -Date: Sun Sep 19 19:50:37 2010 -0700 - - Minor README fix. - -commit 8e7652ef6acab5db7a29f786686a54f05cdbdc7d -Author: Landon Fuller -Date: Sun Sep 19 19:49:39 2010 -0700 - - Add a libffi-ios-specific github README. - -commit 83038cf24aa1a92b62b91ffee1dcc25d79243484 -Author: Landon Fuller -Date: Sun Sep 19 14:36:45 2010 -0700 - - Implement FFI_EXEC_TRAMPOLINE_TABLE allocator for iOS/ARM. - - This provides working closure support on iOS/ARM devices where - PROT_WRITE|PROT_EXEC is not permitted. The code passes basic - smoke tests, but requires further review. - -commit b00ff3e98fdde622cef617030e14d5356dff988f -Author: Landon Fuller -Date: Sun Sep 19 14:22:26 2010 -0700 - - Rename the generated symbol - -commit da2773e02ab26cc11a7fe87e985599f35cdf0649 -Author: Landon Fuller -Date: Sun Sep 19 14:21:37 2010 -0700 - - Modify the ffi_closure structures to hold table/table entry pointers instead of a code buffer. - -commit 01d71b7bed41844f80cb9feef20dcc5ece5ba2d0 -Author: Landon Fuller -Date: Sun Sep 19 14:21:14 2010 -0700 - - Regenerated the autoconf script - -commit 19afda0069c42e51c81dca7b10a5cf884b4cdce0 -Author: Landon Fuller -Date: Sun Sep 19 14:20:52 2010 -0700 - - Enable AC_SUBST for FFI_EXEC_TRAMPOLINE_TABLE - -commit 9e1196444e78aef20028c18891f44ebe39a815fd -Author: Landon Fuller -Date: Sun Sep 19 10:43:06 2010 -0700 - - Add a hard-coded FFI_EXEC_TRAMPOLINE_TABLE arm implementation. - - This implements support for re-mapping a shared table of executable - trampolines directly in front of a writable configuration page, working - around PROT_WRITE restrictions for sandboxed applications on Apple's - iOS. - - This implementation is for testing purposes; a proper allocator is still - necessary, and ARM-specific code needs to be moved out of - src/closures.c. - -commit f38364b399184e682fc3e785084bd497827bc5af -Author: Landon Fuller -Date: Sun Sep 19 10:42:36 2010 -0700 - - Fix symbol prefix for ffi_closure_SYSV_inner on Darwin. - -commit 36849e7716b77aa25e4175d1f4be1b93dbf47aac -Author: Landon Fuller -Date: Sun Sep 19 09:35:04 2010 -0700 - - Whitespace/comment fixes. - -commit b764162526854686e579a48b6ac5981f4eb886a3 -Author: Landon Fuller -Date: Sun Sep 19 09:04:34 2010 -0700 - - Fix the script name (build-iphone.sh -> build-ios.sh) - -commit a3d9aa85013341451ea97766485b7a11852d32b2 -Author: Landon Fuller -Date: Sun Sep 19 09:03:52 2010 -0700 - - Update the autogenerated autoconf/automake files. - -commit c71480eaf839f26bbdfcd8965f65ac4d8defddc0 -Author: Landon Fuller -Date: Sun Sep 19 09:02:05 2010 -0700 - - Update automake/autoconf to conditionally build src/arm/trampoline.S if FFI_EXEC_TRAMPOLINE_TABLE is enabled. - -commit 9af9291b73bc5e27ecd949bec8157f20426d65b8 -Author: Landon Fuller -Date: Sun Sep 19 08:52:33 2010 -0700 - - Add the trampoline table generated by gentramp.sh - -commit 68ce0c383ece84f69945d1c8c3fed03f7f9cb5d6 -Author: Landon Fuller -Date: Sun Sep 19 08:38:19 2010 -0700 - - Add a shell script that generates the ARM trampoline page. - - This generates a page of 340 trampolines, aligned within one page. The - trampolines use pc-relative addressing to reference config data - (context, jump address) from a page placed directly prior to the - trampoline page. This can be used on systems -- such as iOS -- that do not - support writable, executable memory by remapping the executable page - containing the trampolines directly above a newly allocated writable - config page. - -commit 75af086be8830a8eafe9b1ebda199d788bcb0c62 -Author: Landon Fuller -Date: Sat Sep 18 18:12:19 2010 -0700 - - Update autoconf files - -commit 1ac92cca9b02ef8d6a769f0de1adccd5c9630355 -Author: Landon Fuller -Date: Sat Sep 18 18:08:14 2010 -0700 - - Add autoconf check for W^X platforms that require a trampoline table. - - This adds the FFI_EXEC_TRAMPOLINE_TABLE. The flag is enabled for - arm-apple-darwin, where PROT_EXEC on writable (or formerly writable) pages is - not permitted for sandboxed binaries. - -commit be72fbab29b7190c702d8e1ac3d149855e95879d -Author: Landon Fuller -Date: Sat Sep 18 18:02:25 2010 -0700 - - Use the correct host triple for arm/darwin - -commit 70150bdf4509269965c72f2032bf74f285767afe -Author: Landon Fuller -Date: Sat Sep 18 16:38:03 2010 -0700 - - Add missing UNWIND entry; disables .pad on non-EABI targets. - -commit 6b452bafaec498df975ba8ac4c99de174e5f74f7 -Author: Landon Fuller -Date: Sat Sep 18 16:21:32 2010 -0700 - - Apple assembler support; fixed most gas/ELF-isms. - -commit 8ddac835b6f8b54ede764d0ea977dee4c82e2d67 -Author: Landon Fuller -Date: Sat Sep 18 15:38:06 2010 -0700 - - Fix placement of the __APPLE__ macro. - -commit 69043d02936bb0579ac59b4ee1ed8dec38c38db7 -Author: Landon Fuller -Date: Sat Sep 18 15:32:08 2010 -0700 - - Work-around libffi's FP ABI detection. - - On iOS, we must use the AAPCS floating point return value calling - conventions. libffi's ARM implementation will only use these conventions - if __SOFTFP__ is defined, which is not the case when GCC's - -mfloat-abi defaults to 'softfp' instead of 'soft'. To work around this - we manually define __SOFTFP__ for Apple platforms in the ARM-specific - sysv.S. - - See also: - http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iPhoneOSABIReference/Introduction/Introduction.html - http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf - -commit a82e6c354ea805114642a6e440abd0832cb1d23f -Author: Landon Fuller -Date: Sat Sep 18 14:44:24 2010 -0700 - - Add a stub iOS build script to drive autoconf - -commit 84e8de6e9fc19388f6f1102c013b7d0d52940ecc -Author: Anthony Green -Date: Fri Aug 6 01:35:12 2010 -0400 - - Restore execute permissions - -commit 3aeecc9eb1a6feba6549849cdd335c926415a4fc -Author: Anthony Green -Date: Thu Aug 5 15:19:00 2010 -0400 - - Fix win64-struct-args patch - -commit 00d0b59cd13f89ab8b44bd894eb7f0a131fcb472 -Author: Anthony Green -Date: Thu Aug 5 14:56:53 2010 -0400 - - Fix debug build for windows - -commit bda487e87064f27965155459a62dc52a744778d0 -Author: Anthony Green -Date: Thu Aug 5 09:02:41 2010 -0400 - - Don't use -safeseh with ml64 - -commit c1d28ba8d5029795af313ffeb81c97efc6d4c847 -Author: Anthony Green -Date: Thu Aug 5 08:48:16 2010 -0400 - - stdcall-x86-closure-fix - -commit 5feacad4a56c85b3f23a267a30b2cf424cd59548 -Author: Anthony Green -Date: Thu Aug 5 08:30:04 2010 -0400 - - define generic symbols carefully - -commit 10ea848900bc3018ac213cef52b44cacbe5cbebc -Author: Anthony Green -Date: Thu Aug 5 08:24:27 2010 -0400 - - don't copy win64 struct args - -commit d14178be4c49c3ada44a9fe9efe11d444372ddab -Author: Anthony Green -Date: Fri Jul 23 09:14:00 2010 -0400 - - FFI_LAST_ABI fix - -commit 3f5b1375ab1e2b8e3d593e21b27097a4a50f9b83 -Author: Anthony Green -Date: Mon Jul 12 14:39:18 2010 -0400 - - rebase - -commit eaf444eabc4c78703c0f98ac0197b1619c1b1bef -Author: Anthony Green -Date: Sat Jul 10 08:59:09 2010 -0400 - - Fix selinux test - -commit 630974152247f100ece4d44f10c3721bb4599fbf -Author: Anthony Green -Date: Wed May 5 20:14:56 2010 -0400 - - Micharl Kohler's spelling fixes - -commit 9dc9a293f3d4589fcaf02dd4288c8cebaefa508e -Author: Anthony Green -Date: Tue Apr 13 10:33:52 2010 -0400 - - Rebase to latest GCC sources - -commit f2c2a4fce9b3eca9f39b4f3545118bc256da4a73 -Author: Anthony Green -Date: Tue Apr 13 10:19:28 2010 -0400 - - Remove warnings and add OS/2 support - -commit c0b69e57d529e33d18b658cc5572a21e3663247c -Author: Anthony Green -Date: Tue Mar 30 08:30:22 2010 -0400 - - Dan Witte's windows build fixes. - -commit 59a259f4d348f593b45f452309f4d020a28051c4 -Author: Anthony Green -Date: Mon Mar 15 05:57:51 2010 -0400 - - Remove junk file - -commit 3de1eb36d37a66829e606421939874d0d60d816d -Author: Anthony Green -Date: Mon Mar 15 05:57:24 2010 -0400 - - fix-comments patch - -commit c3813b6d7f8a777700f4c5862190c0db148d4de8 -Author: Anthony Green -Date: Tue Jan 26 16:48:56 2010 -0500 - - Rebuild Makefiles with automake 1.11.1 for CVE-2009-4029. - -commit 8d27f68baa365bf883b6053c5f6bc819646d5434 -Author: Anthony Green -Date: Fri Jan 15 11:35:37 2010 -0500 - - Mention recent changes in README - -commit ff3cd68b8cf2d9a28cad7aa9beff46236eacec8c -Author: Anthony Green -Date: Fri Jan 15 11:27:24 2010 -0500 - - Add msvc.sh wrapper - -commit cadeba6cb53414a1253582f1719c286665de7b6c -Author: Anthony Green -Date: Fri Jan 15 10:46:51 2010 -0500 - - Microsoft Visual C port - -commit 0739e7dc00db766eb64f502ec4137b817638c9a1 -Author: Anthony Green -Date: Fri Jan 15 09:48:33 2010 -0500 - - Add x86 Sun Studio compiler support - -commit edfdfd2e85b8d01d2455934f1d7f4d7eb2f3cf1c -Author: Anthony Green -Date: Wed Jan 13 02:56:19 2010 -0500 - - Add closure example doc - -commit 7b7a42f221cf171e8d09df34cac6dc1fd8458cc3 -Author: Anthony Green -Date: Tue Jan 12 09:14:14 2010 -0500 - - Rebase from GCC - -commit 4b18d1f73dc7733137869e4ab5725cb90c1c8fde -Author: Anthony Green -Date: Fri Jan 1 10:24:27 2010 -0500 - - Add x86-64 MingW to README - -commit c3042afaf3f84abbbe9c91bf9bc9896b0d9eb003 -Author: Anthony Green -Date: Fri Jan 1 08:08:02 2010 -0500 - - Reset quilt patches post 3.0.9 merge with GCC - -commit b0304e9679bdfec6ac45a57b5c96542697249418 -Author: Anthony Green -Date: Thu Dec 31 11:32:40 2009 -0500 - - Update version - -commit 2e7e03d014d9c9bf40e97ce75cba089ad052fa6b -Author: Anthony Green -Date: Thu Dec 31 07:43:22 2009 -0500 - - Final updates before 3.0.9 - -commit aea706c52825c8eee677ffa7fdbdd3aed1725492 -Author: Anthony Green -Date: Tue Dec 29 10:09:31 2009 -0500 - - really 3.0.9rc12 - -commit 0cfe60e9d13f132b88995cfee41f2156344f6fa2 -Author: Anthony Green -Date: Tue Dec 29 10:06:04 2009 -0500 - - 3.0.9rc12 - -commit 14e2e92e8645804b6940b3e96c98e9f7f384a6b2 -Author: Anthony Green -Date: Sun Dec 27 21:03:33 2009 -0500 - - 3.0.9rc11 - -commit 884402787bf8eaf7ec207085037cf8ace2f660ec -Author: Anthony Green -Date: Sat Dec 26 12:57:23 2009 -0500 - - HPUX support and avr32 test fixes. - -commit 01c78756aff22efb1f122f8e93e068d7bf2185c7 -Author: Anthony Green -Date: Sat Dec 26 10:05:18 2009 -0500 - - 3.0.9rc9 - -commit 70868464651320268d79c6894db5a50fdc11032a -Author: Anthony Green -Date: Sat Dec 26 09:58:03 2009 -0500 - - Remove xfails for mips and arm - -commit 838d4ad920ec85cf5ca3b511221d67f6d9a99024 -Author: Anthony Green -Date: Sat Dec 26 09:57:27 2009 -0500 - - Remove a bunch of xfails. - -commit 7e37eaaf772f48906e69618c773b0a36c3927de9 -Author: Anthony Green -Date: Sat Dec 26 07:46:50 2009 -0500 - - Fix huge_struct for solaris - -commit 07cc7a37194bc34064ebed7f2724333a798411c8 -Author: Anthony Green -Date: Sat Dec 26 07:23:04 2009 -0500 - - 3.0.9rc8 - -commit 2b9be16ffabc81326128bc1bbdddff8ddc5d13d3 -Author: Anthony Green -Date: Sat Dec 26 07:04:45 2009 -0500 - - 3.0.9rc8 - -commit 9458d88f676e9a21ab8993a54e16754b11687419 -Author: Anthony Green -Date: Sat Dec 26 07:02:27 2009 -0500 - - Rebase from GCC - -commit 6a3412417593f068a04dc6163f4269cb295ad5ca -Author: Anthony Green -Date: Sat Dec 26 06:51:33 2009 -0500 - - Add Andreas Schwab's powerpc fix - -commit 39c8792ece1043f41f4c395a2ce71f4cf0ff4674 -Author: Anthony Green -Date: Fri Dec 25 21:52:28 2009 -0500 - - 3.0.9rc7 - -commit 1d04af52e3e24db69f742064694c22f8df5cc70e -Author: Anthony Green -Date: Fri Dec 25 09:50:36 2009 -0500 - - Updated some mips XFAILs - -commit 26e9509c9b7929bc4fcf697071699051a652b1fd -Author: Anthony Green -Date: Fri Dec 25 02:19:23 2009 -0500 - - Clean up ChangeLog.libffi for older patches. - -commit 9c157d3215e4393777f83eb6fa801df6528f40d7 -Author: Anthony Green -Date: Fri Dec 25 02:15:40 2009 -0500 - - Clean up undefine_AC_ARG_VAR_PRECIOUS patch. - -commit d22de05b0bfc480766bc1240615ce2830eee71b8 -Author: Anthony Green -Date: Fri Dec 25 02:04:23 2009 -0500 - - Fix patches - -commit 1fe3dc7c20dc4dbd8fed0d19c8618027d44ed971 -Author: Anthony Green -Date: Fri Dec 25 01:39:00 2009 -0500 - - Add windows support patch. - -commit f7c0bc613a88f7dbc2d18b345c10fa438833c170 -Author: Anthony Green -Date: Fri Dec 25 01:22:11 2009 -0500 - - 3.0.9rc6 - -commit c7fa2da8260258c11ab1dc7ac06fb611a2c1b50f -Author: Anthony Green -Date: Thu Dec 24 07:22:44 2009 -0500 - - 3.0.9rc6 - -commit da11bece0fde66fc0268db3a01207dda857e25d2 -Author: Anthony Green -Date: Thu Dec 24 05:34:46 2009 -0500 - - Release 3.0.9rc5 - -commit e3399b11edeab546b066bfc18574f3edb905d0dc -Author: Anthony Green -Date: Thu Dec 24 01:09:32 2009 -0500 - - Update README - -commit 115ab36fceee69740a01ce49bc27e1908cc237b1 -Author: Anthony Green -Date: Thu Dec 24 00:22:00 2009 -0500 - - Update missing changes for 3.0.9r4. - -commit f8c7a245bf5a80bd7e730ec03fcad17c8dcfcb07 -Author: Anthony Green -Date: Wed Dec 23 23:46:22 2009 -0500 - - Switch to quilt. Rebase to latest GCC. - -commit ce806772f02387b9a74f6496a263a368bccd5d59 -Merge: cd98813 dcc1f6b -Author: Anthony Green -Date: Mon Oct 5 00:41:35 2009 -0400 - - Merge branch 'master' of git@github.com:atgreen/libffi - -commit dcc1f6b4f1ffd2713bf68b791a13f85d455c8b1b -Author: Anthony Green -Date: Mon Oct 5 00:29:33 2009 -0400 - - More clean up. - -commit 2829f5941a223b9d851d8ab6318318e6197d7e01 -Author: Anthony Green -Date: Mon Oct 5 00:28:03 2009 -0400 - - Clean up - -commit cd98813de517ea64041637e3e78d27a001d6d3b4 -Author: Anthony Green -Date: Mon Oct 5 00:25:29 2009 -0400 - - From Jens Rehsack. Fix for 64-bit AIX. - -commit e4a91de766acc47f6c50f13cc11719a65e23ecba -Author: Anthony Green -Date: Mon Oct 5 00:16:17 2009 -0400 - - From Abdulaziz Ghuloum. Adds special case for Snow Leopard. - -commit 3425a763bcdaadb8b430226f427ec833afdcc96a -Author: Anthony Green -Date: Sun Oct 4 23:57:29 2009 -0400 - - Fix detection of free/openbsd. From Alexis Ballier. - -commit 2340e7a777902de61499d47823ad8d5e0eeb6203 -Author: Anthony Green -Date: Sun Oct 4 23:53:17 2009 -0400 - - AVR support - -commit 5cbe2058c128e848446ae79fe15ee54260a90559 -Author: Anthony Green -Date: Sun Oct 4 23:53:11 2009 -0400 - - Initial stand-alone patch. - -commit c6dddbd02bad9654ed58cdb0feb360934d105dec -Author: Anthony Green -Date: Sun Oct 4 08:11:33 2009 -0400 - - Initial commit - -commit 5ffc0c37486fb1538bccc0ca7acc807d4f1af932 -Author: Anthony Green -Date: Sun Oct 4 07:58:22 2009 -0400 - - Update version to 3.0.9rc1. Add more useful things to .gitignore. - -commit bd29f83ee9f6fa6b65adee9d3f57834f364d9887 -Author: Anthony Green -Date: Tue Sep 29 12:07:26 2009 -0400 - - Add .gitignore - -commit 9474f853f83e3f0167c1b306177321bfcc93e56d -Author: Anthony Green -Date: Tue Sep 29 11:13:02 2009 -0400 - - Remove old CVSROOT files. - -commit 0c25275ec24bfe2c2c25a000465f0950ef9dd51b -Author: twall -Date: Wed Aug 19 12:57:34 2009 +0000 - - Apply Dave Korn's cygwin/GCC changes - -commit 39228c27ed3f677a95b46380a8d31602b5777e1a -Author: aph -Date: Tue Jun 16 18:00:47 2009 +0000 - - 2009-06-16 Wim Lewis - - * src/powerpc/ffi.c: Avoid clobbering cr3 and cr4, which are - supposed to be callee-saved. - * src/powerpc/sysv.S (small_struct_return_value): Fix overrun of - return buffer for odd-size structs. - -commit 5e93cc704d127c2c8ae7f5d2cef621145d43e777 -Author: aph -Date: Tue Jun 16 17:41:47 2009 +0000 - - 2009-06-16 Andreas Tobler - - PR libffi/40444 - * testsuite/lib/libffi-dg.exp (libffi_target_compile): Add - allow_stack_execute for Darwin. - -commit b509af8959dc371b92392c623522ea6f4946a71d -Author: aph -Date: Tue Jun 16 16:17:52 2009 +0000 - - 2009-06-16 Andrew Haley - - * configure.ac (TARGETDIR): Add missing blank lines. - * configure: Regenerate. - -commit d57e96dc56ee76fbbb9b59d73aeaa92354db5ecb -Author: aph -Date: Tue Jun 16 09:59:02 2009 +0000 - - 2009-06-16 Andrew Haley - - * testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_medium2.c: Fix printf format - specifiers. - * testsuite/libffi.call/huge_struct.c: Ad x86 XFAILs. - * testsuite/libffi.call/float2.c: Fix dg-excess-errors. - * testsuite/libffi.call/ffitest.h, - testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRIuLL): Define. - -commit b01d6d1982c9e020507029bfd5a58a8c60d111fa -Author: aph -Date: Tue Jun 16 09:44:54 2009 +0000 - - 2009-06-16 Andrew Haley - - * testsuite/libffi.call/err_bad_typedef.c: xfail everywhere. - * testsuite/libffi.call/err_bad_abi.c: Likewise. - -commit 35b6ded138591900a88055a8a8ac1fadc29a76d6 -Author: aph -Date: Fri Jun 12 15:29:20 2009 +0000 - - 2009-06-11 Kaz Kojima - - * testsuite/libffi.call/cls_longdouble_va.c: Add xfail sh*-*-linux-*. - * testsuite/libffi.call/err_bad_abi.c: Add xfail sh*-*-*. - * testsuite/libffi.call/err_bad_typedef.c: Likewise. - -commit acc46605f2d95d67d69398e7644610f10a157ce3 -Author: aph -Date: Fri Jun 12 14:21:28 2009 +0000 - - 2009-06-12 Andrew Haley - - * ChangeLog.libffi: testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_medium2.c: Fix printf format - specifiers. - testsuite/libffi.special/unwindtest.cc: include stdint.h. - -commit 16d1996ed0797bd7c11aca2b0fe7e7748751aaf6 -Author: twall -Date: Thu Jun 11 14:27:42 2009 +0000 - - update changelog - -commit 92a515c33efe91be3cb0258f01c63aff208489c7 -Author: twall -Date: Thu Jun 11 14:27:28 2009 +0000 - - use ffi_closure_alloc instead of stack-based closure - -commit e4363160ba9e50167f9ca0a7399d537a1d2cd0ce -Author: twall -Date: Thu Jun 11 14:26:23 2009 +0000 - - remove unused extern - -commit 1dc2781d2ba38f5f000ff70069d617fb21e1d2af -Author: twall -Date: Thu Jun 11 11:36:16 2009 +0000 - - remove not-yet-applied changelog entries - -commit bb27735fe689dac97ec0dc847ed8d3d519620109 -Author: twall -Date: Wed Jun 10 10:42:36 2009 +0000 - - add win64 support - -commit b2a54c100c74854a409820817d54617fdda39eb8 -Author: aph -Date: Mon Jun 8 16:50:49 2009 +0000 - - 2009-06-08 Andrew Haley - - * testsuite/libffi.call/err_bad_abi.c: Add xfails. - * testsuite/libffi.call/cls_longdouble_va.c: Add xfails. - * testsuite/libffi.call/cls_dbls_struct.c: Add xfail x86_64-*-linux-*. - * testsuite/libffi.call/err_bad_typedef.c: Add xfails. - - * testsuite/libffi.call/stret_medium2.c: Add __UNUSED__ to args. - * testsuite/libffi.call/stret_medium.c: Likewise. - * testsuite/libffi.call/stret_large2.c: Likewise. - * testsuite/libffi.call/stret_large.c: Likewise. - -commit 25723e7141f73d3736d7244b980c89d97db852b6 -Author: aph -Date: Fri Jun 5 13:03:40 2009 +0000 - - 2009-06-05 Andrew Haley - - * src/x86/win32.S (_ffi_closure_STDCALL): Import from gcc. - -commit 70758199c7cd41f411987360ccb302b497a56dc9 -Author: aph -Date: Thu Jun 4 16:29:58 2009 +0000 - - 2009-06-04 Andrew Haley - - * src/powerpc/ffitarget.h: Fix misapplied merge from gcc. - -commit e8bb12563f9aa23ddf36fa6a5b92b16b5c3e1a7f -Author: aph -Date: Thu Jun 4 14:59:18 2009 +0000 - - 2009-06-04 Andrew Haley - - * src/mips/o32.S, - src/mips/n32.S: Fix licence formatting. - -commit d66a8e32c3671479e3ce0f6819673e5932ba6b7f -Author: aph -Date: Thu Jun 4 14:43:40 2009 +0000 - - 2009-06-04 Andrew Haley - - * src/x86/darwin.S: Fix licence formatting. - src/x86/win32.S: Likewise. - src/sh64/sysv.S: Likewise. - src/sh/sysv.S: Likewise. - -commit 7c3b7fd6b5db746b5b09a718f3044f811372f941 -Author: aph -Date: Thu Jun 4 14:39:20 2009 +0000 - - 2009-06-04 Andrew Haley - - * src/sh64/ffi.c: Remove lint directives. Was missing from merge - of Andreas Tobler's patch from 2006-04-22. - -commit 1a2f93a8b362db13638afd9fcb3f2650180bfa17 -Author: aph -Date: Thu Jun 4 10:45:51 2009 +0000 - - 2009-06-04 Andrew Haley - - * src/sh/ffi.c: Apply missing hunk from Alexandre Oliva's patch of - 2007-03-07. - -commit 944c95cf7aaaaf7c5fa368cda4673dd38f45020e -Author: aph -Date: Wed Jun 3 17:42:56 2009 +0000 - - 2009-05-22 Dave Korn - - * src/x86/win32.S (_ffi_closure_STDCALL): New function. - (.eh_frame): Add FDE for it. - - 2009-05-22 Dave Korn - - * configure.ac: Also check if assembler supports pc-relative - relocs on X86_WIN32 targets. - * configure: Regenerate. - * src/x86/win32.S (ffi_prep_args): Declare extern, not global. - (_ffi_call_SYSV): Add missing function type symbol .def and - add EH markup labels. - (_ffi_call_STDCALL): Likewise. - (_ffi_closure_SYSV): Likewise. - (_ffi_closure_raw_SYSV): Likewise. - (.eh_frame): Add hand-crafted EH data. - - 2008-11-21 Eric Botcazou - - * src/sparc/ffi.c (ffi_prep_cif_machdep): Add support for - signed/unsigned int8/16 return values. - * src/sparc/v8.S (ffi_call_v8): Likewise. - (ffi_closure_v8): Likewise. - - 2008-03-26 Kaz Kojima - - * src/sh/sysv.S: Add .note.GNU-stack on Linux. - * src/sh64/sysv.S: Likewise. - - 2008-03-26 Daniel Jacobowitz - - * src/arm/sysv.S: Fix ARM comment marker. - -commit 00fa972430bb1535a4b34bf029ebcad500027b0c -Author: twall -Date: Sat Dec 27 16:59:05 2008 +0000 - - properly glob-match - -commit f5179e6794ac35af26fe86e468b8508a7a570c55 -Author: twall -Date: Fri Dec 26 19:06:28 2008 +0000 - - Mark XFAIL on longdouble tests for x86_64/mingw - -commit 80e2b5a749208c8a18f994ec5bee84594d051cc8 -Author: twall -Date: Mon Dec 22 15:21:15 2008 +0000 - - clean up tests for win64 use - -commit 7063d9996f742576095c7b0eb5016c0f9a670aec -Author: green -Date: Fri Dec 19 16:13:46 2008 +0000 - - Version 3.0.8 with x86-solaris support - -commit bdfeb13f0df0a63b19d62597517237b54d92228b -Author: green -Date: Fri Dec 19 15:47:44 2008 +0000 - - Bump to 3.0.7 - -commit 69205de17d6ac4c11d4ba92d6a5b40a0c5f246b2 -Author: green -Date: Thu Jul 24 18:03:48 2008 +0000 - - Many test fixes (failures due to excessive compiler warnings). - -commit 260d513fea00b3613fe957a44a157fe72c4ca29e -Author: green -Date: Thu Jul 17 13:13:52 2008 +0000 - - Version 3.0.6. sh/sh64 fixes. - -commit 3704031875feabb74e3655ed03cff4c2b3c76ac6 -Author: green -Date: Thu Apr 3 18:57:57 2008 +0000 - - Rev 3.0.5. - -commit 8406f5f48f7f58a1c982a93a95d521cf82b3241f -Author: green -Date: Thu Apr 3 18:57:34 2008 +0000 - - 3.0.5 - -commit 23a9e73212b62f9684cedb0ce70e92c59cfdaffa -Author: green -Date: Wed Mar 5 00:07:02 2008 +0000 - - 2008-03-04 Anthony Green - Blake Chaffin - hos@tamanegi.org - - * testsuite/libffi.call/cls_align_longdouble_split2.c - testsuite/libffi.call/cls_align_longdouble_split.c - testsuite/libffi.call/cls_dbls_struct.c - testsuite/libffi.call/cls_double_va.c - testsuite/libffi.call/cls_longdouble.c - testsuite/libffi.call/cls_longdouble_va.c - testsuite/libffi.call/cls_pointer.c - testsuite/libffi.call/cls_pointer_stack.c - testsuite/libffi.call/err_bad_abi.c - testsuite/libffi.call/err_bad_typedef.c - testsuite/libffi.call/huge_struct.c - testsuite/libffi.call/stret_large2.c - testsuite/libffi.call/stret_large.c - testsuite/libffi.call/stret_medium2.c - testsuite/libffi.call/stret_medium.c: New tests from Apple. - -commit 429e37d3ad653e52e75bf725c883ab79e859f89a -Author: green -Date: Thu Feb 28 04:50:19 2008 +0000 - - clicky - -commit 51e79c428348c033314f54bcb30f7e388c59e347 -Author: green -Date: Thu Feb 28 04:47:35 2008 +0000 - - getclicky - -commit affcab04e280efeace45a72c4dc6152c0e4f1b7f -Author: green -Date: Tue Feb 26 19:01:53 2008 +0000 - - 2008-02-26 Jakub Jelinek - Anthony Green - - * src/alpha/osf.S: Add .note.GNU-stack on Linux. - * src/s390/sysv.S: Likewise. - * src/powerpc/linux64.S: Likewise. - * src/powerpc/linux64_closure.S: Likewise. - * src/powerpc/ppc_closure.S: Likewise. - * src/powerpc/sysv.S: Likewise. - * src/x86/unix64.S: Likewise. - * src/x86/sysv.S: Likewise. - * src/sparc/v8.S: Likewise. - * src/sparc/v9.S: Likewise. - * src/m68k/sysv.S: Likewise. - * src/ia64/unix.S: Likewise. - * src/arm/sysv.S: Likewise. - -commit 59689d5522c159a3ac967adb6b891cf5f22c890f -Author: green -Date: Tue Feb 26 17:40:51 2008 +0000 - - 2008-02-26 Anthony Green - Thomas Heller - - * src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C - comment. - -commit b13c84cf4668828ff8429ba4a2f94cd1eb574ae0 -Author: green -Date: Tue Feb 26 17:38:15 2008 +0000 - - 2008-02-26 Anthony Green - Thomas Heller - - * include/ffi.h.in: Change void (*)() to void (*)(void). - -commit 265289f679ffd24a88ae1aa2cef0e4aa14703cd8 -Author: green -Date: Tue Feb 26 17:34:36 2008 +0000 - - 2008-02-26 Anthony Green - - * src/alpha/ffi.c: Change void (*)() to void (*)(void). - src/alpha/osf.S, src/arm/ffi.c, src/frv/ffi.c, src/ia64/ffi.c, - src/ia64/unix.S, src/java_raw_api.c, src/m32r/ffi.c, - src/mips/ffi.c, src/pa/ffi.c, src/pa/hpux32.S, src/pa/linux.S, - src/powerpc/ffi.c, src/powerpc/ffi_darwin.c, src/raw_api.c, - src/s390/ffi.c, src/sh/ffi.c, src/sh64/ffi.c, src/sparc/ffi.c, - src/x86/ffi.c, src/x86/unix64.S, src/x86/darwin64.S,> src/x86/ffi64.c: Ditto. - -commit fb5036cd6d0f909918e90f7d2d9fd80d46682d5d -Author: green -Date: Sun Feb 24 17:25:25 2008 +0000 - - fix date - -commit 40bec108e7d0181e6c9928aa7a33187bcc0f3d6f -Author: green -Date: Sun Feb 24 17:25:02 2008 +0000 - - New release - -commit b922048fa82ea109a4af269ee47bbc2a586bbac2 -Author: green -Date: Sun Feb 24 17:24:00 2008 +0000 - - 2008-02-24 Anthony Green - - * configure.ac: Accept openbsd*, not just openbsd. - Bump version to 3.0.4. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -commit affca4b92d06e5554784c7e9b233029ef83f7d8a -Author: green -Date: Fri Feb 22 21:53:29 2008 +0000 - - sync readme with web page. - -commit 3e53d8752ea74859b4c64fbbf935e62a937c4d78 -Author: green -Date: Fri Feb 22 21:52:38 2008 +0000 - - New release - -commit 4d92f6c8e78fe084be65f3e8b58b859901ba796d -Author: green -Date: Fri Feb 22 21:49:46 2008 +0000 - - 2008-02-22 Anthony Green - - * configure.ac: Bump version to 3.0.3. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. Clean up test docs. - -commit 0e185fa11a01f816824ba2687ed3715ab6219bef -Author: green -Date: Fri Feb 22 21:43:18 2008 +0000 - - Update configure script. - -commit f73986bd211cfbbaa593d1309504d0dc68626191 -Author: green -Date: Fri Feb 22 21:40:53 2008 +0000 - - 2008-02-22 Bjoern Koenig - Andreas Tobler - - * configure.ac: Add amd64-*-freebsd* target. - * configure: Regenerate. - -commit 0208f68fe5de30c33e7f70ebc281635917013f5a -Author: green -Date: Fri Feb 22 21:15:44 2008 +0000 - - 2008-02-22 Thomas Heller - - * configure.ac: Add x86 OpenBSD support. - * configure: Rebuilt. - -commit 01adb0e638a86cf0d5e668ed8e08be9b0cd2505f -Author: green -Date: Thu Feb 21 16:17:26 2008 +0000 - - Fix README. - -commit 1edd4563225981a14f7d4fb9919b1ed88e38082f -Author: green -Date: Thu Feb 21 13:39:01 2008 +0000 - - 3.0.2 - -commit c9b542800864e2204db6e83f3843a17813ba6165 -Author: green -Date: Thu Feb 21 13:36:43 2008 +0000 - - add missing file - -commit d5fa5633d5c8d3c212a2267cfa38fba4091baa2c -Author: green -Date: Thu Feb 21 13:36:19 2008 +0000 - - 2008-02-21 Anthony Green - - * configure.ac: Bump version to 3.0.2. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - - 2008-02-21 Björn König - - * src/x86/freebsd.S: New file. - * configure.ac: Add x86 FreeBSD support. - * Makefile.am: Ditto. - -commit ac35bfc6fcadd8880c1efce36724820f9074b318 -Author: green -Date: Sat Feb 16 01:03:56 2008 +0000 - - Updated - -commit f7942975fee7b0162647dd79e2652615b737e98e -Author: green -Date: Sat Feb 16 01:02:00 2008 +0000 - - 2008-02-15 Anthony Green - - * configure.ac: Bump version to 3.0.1. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - - 2008-02-15 David Daney - - * src/mips/ffi.c: Remove extra '>' from include directive. - (ffi_prep_closure_loc): Use clear_location instead of tramp. - -commit 59aa6bb1bfc86a610ac1a8b123443efd75854dd1 -Author: green -Date: Fri Feb 15 20:52:26 2008 +0000 - - Add more platforms. - -commit 45a45ab99074448be0ae1a8d2ade50d28b60f8de -Author: green -Date: Fri Feb 15 19:16:36 2008 +0000 - - 3.0 notes - -commit 4db74cbea888c9f1251b85baf00d99b83d3b994d -Author: green -Date: Fri Feb 15 19:10:26 2008 +0000 - - Update - -commit c3e1101ffabf44d8a2ee46e03ba9ab582050a825 -Author: green -Date: Fri Feb 15 18:43:40 2008 +0000 - - 2008-02-15 Anthony Green - - * configure.ac: Bump version to 3.0.0, - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - - 2008-02-15 David Daney - - * src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE): - Define (conditionally), and use it to include cachectl.h. - (ffi_prep_closure_loc): Fix cache flushing. - * src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define. - -commit 7e0cc12e9233ad285db41ce8dbdda61ed2a7fb06 -Author: green -Date: Fri Feb 15 15:51:03 2008 +0000 - - New release - -commit 2d7dc885ec40d53866f29984d595511942c8b686 -Author: green -Date: Fri Feb 15 15:30:26 2008 +0000 - - * man/ffi_call.3, man/ffi_prep_cif.3, man/ffi.3: - Update dates and remove all references to ffi_prep_closure. - * configure.ac: Bump version to 2.99.9. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - -commit a0525f03eeaaed33b1eac80e0c016455cee3615d -Author: green -Date: Fri Feb 15 15:14:30 2008 +0000 - - New release. - -commit 2b30dfb3146ee26ad956d00ee05eb835ca1a95b4 -Author: green -Date: Fri Feb 15 15:12:43 2008 +0000 - - * man/ffi_prep_closure.3: Delete. - * man/Makefile.am (EXTRA_DIST): Remove ffi_prep_closure.3. - (man_MANS): Ditto. - * man/Makefile.in: Rebuilt. - * configure.ac: Bump version to 2.99.8. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - -commit bf41e64840ebcb6cc31a6f028253c1fde82705d8 -Author: green -Date: Fri Feb 15 01:56:50 2008 +0000 - - Update. - -commit 4d39ddee677bbb61d621893b91e11eac5e7c4af7 -Author: green -Date: Fri Feb 15 01:24:06 2008 +0000 - - * configure.ac: Bump version to 2.99.7. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * include/ffi.h.in LICENSE src/debug.c src/closures.c - src/ffitest.c src/s390/sysv.S src/s390/ffitarget.h - src/types.c src/m68k/ffitarget.h src/raw_api.c src/frv/ffi.c - src/frv/ffitarget.h src/sh/ffi.c src/sh/sysv.S - src/sh/ffitarget.h src/powerpc/ffitarget.h src/pa/ffi.c - src/pa/ffitarget.h src/pa/linux.S src/java_raw_api.c - src/cris/ffitarget.h src/x86/ffi.c src/x86/sysv.S - src/x86/unix64.S src/x86/win32.S src/x86/ffitarget.h - src/x86/ffi64.c src/x86/darwin.S src/ia64/ffi.c - src/ia64/ffitarget.h src/ia64/ia64_flags.h src/ia64/unix.S - src/sparc/ffi.c src/sparc/v9.S src/sparc/ffitarget.h - src/sparc/v8.S src/alpha/ffi.c src/alpha/ffitarget.h - src/alpha/osf.S src/sh64/ffi.c src/sh64/sysv.S - src/sh64/ffitarget.h src/mips/ffi.c src/mips/ffitarget.h - src/mips/n32.S src/mips/o32.S src/arm/ffi.c src/arm/sysv.S - src/arm/ffitarget.h src/prep_cif.c: Update license text. - -commit d58b032b41a12bd3d72148da6822ab59dd698ff9 -Author: green -Date: Fri Feb 15 00:59:25 2008 +0000 - - New release - -commit 91e5478df6d5ac63efbb10f025807b4606afab56 -Author: green -Date: Fri Feb 15 00:50:30 2008 +0000 - - Update supported platforms. Bump version. - -commit bd0768f877c8f7fd0d36af2191b203d4d057b1ce -Author: green -Date: Fri Feb 15 00:45:33 2008 +0000 - - * configure.ac: Bump version to 2.99.5. - * configure: Rebuilt. - * Makefile.am (EXTRA_DIST): Add darwin64.S - * Makefile.in: Rebuilt. - * testsuite/lib/libffi-dg.exp: Remove libstdc++ bits from GCC tree. - * LICENSE: Update WARRANTY. - -commit 49d345f767bd2cfee951bceaab6a1a07986cf293 -Author: green -Date: Thu Feb 14 23:43:27 2008 +0000 - - update license reference - -commit 12ac48fc79b515db7c9accd9fcaa87b0dcefccdb -Author: green -Date: Thu Feb 14 23:42:08 2008 +0000 - - Update WARRANTY - -commit 6b91c41da87e78552f2990dfc504a0a3349f340b -Author: green -Date: Thu Feb 14 23:38:27 2008 +0000 - - fix tarball reference - -commit 2b59579e3533334bee4788e076b4e520c2ab518c -Author: green -Date: Thu Feb 14 23:35:58 2008 +0000 - - First update in 5 years! - -commit 6cbdf3f3a3777a93382a2d508ddef1c353ff0955 -Author: green -Date: Thu Feb 14 22:44:06 2008 +0000 - - Fix .pc file bug and bump version - -commit 1d1dc81104b209df3cfef0840735c59efae2f655 -Author: green -Date: Thu Feb 14 22:03:37 2008 +0000 - - Add man files and info file. Update README. Tag as 2.99.3. - -commit f045a2367f793fa8b01534cf2e25bcc46afc8fa1 -Author: tromey -Date: Thu Feb 14 20:46:57 2008 +0000 - - Move entry from ChangeLog to ChangeLog.libffi - -commit 6257f07d1a9efd27fa83639cfba281f5d3188731 -Author: tromey -Date: Thu Feb 14 20:33:17 2008 +0000 - - * aclocal.m4, Makefile.in, configure, fficonfig.h.in: Rebuilt. - * mdate-sh, texinfo.tex: New files. - * Makefile.am (info_TEXINFOS): New variable. - * doc/libffi.texi: New file. - * doc/version.texi: Likewise. - -commit 4232af563c5509c3760a33e3684a2b958be755e1 -Author: green -Date: Thu Feb 14 16:19:21 2008 +0000 - - * Makefile.am (AM_CFLAGS): Don't compile with -D. - (lib_LTLIBRARIES): Define. - (toolexeclib_LIBRARIES): Undefine. - * Makefile.in: Rebuilt. - * configure.ac: Reset version to 2.99.1. - * configure.in: Rebuilt. - -commit 961543615c31f092b578a4b4cda914db64f9d0fa -Author: green -Date: Thu Feb 14 15:57:40 2008 +0000 - - Fix typo. - -commit aeb0abab87222f637fbf352d4effd3b76b52ed26 -Author: green -Date: Thu Feb 14 15:54:27 2008 +0000 - - * libffi.pc.in: Usse @PACKAGE_NAME@ and @PACKAGE_VERSION@. - * configure.ac: Reset version to 2.99.1. - * configure.in: Rebuilt. - * Makefile.am (EXTRA_DIST): Add ChangeLog.libffi. - * Makefile.in: Rebuilt. - * LICENSE: Update copyright notice. - -commit 77fe243556433eae119d8bd7469bfccdd5bd8a1a -Author: green -Date: Thu Feb 14 15:37:00 2008 +0000 - - Fix make dist again - -commit d4970cf4529459bf0f0e43c602cac396786c6802 -Author: green -Date: Thu Feb 14 15:18:56 2008 +0000 - - Fix make dist - -commit f0b1462f2d3024922ad71421bd5c4311fcb16da5 -Author: green -Date: Thu Feb 14 15:01:41 2008 +0000 - - Use pkgconfig. Increment libtool CURRENT version. - -commit 27e52f33baa069012a5adb2a3807f9ca1f2165ab -Author: green -Date: Sun Feb 3 13:59:48 2008 +0000 - - Fix header installs when using DESTDIR. - -commit fadab28eb6e33fb6dcdd7b9323e147142216d548 -Author: twall -Date: Sun Feb 3 12:32:22 2008 +0000 - - update changelog - -commit b5e44c8dfa92c87b99762c303cf5574a16db8f27 -Author: twall -Date: Sun Feb 3 01:12:32 2008 +0000 - - offset from code base address, not data base address - -commit f359848d1a995c0e44566d815f218729dc996e22 -Author: green -Date: Fri Feb 1 21:29:43 2008 +0000 - - Fix header installs. - -commit c30df49e157c7bfc8e19e3f8a72b9464fe225e54 -Author: green -Date: Fri Feb 1 21:13:55 2008 +0000 - - Revert my broken changes to twall's patch. - -commit 675561bb9aa0732c76698df10dd3007b5d0ec759 -Author: green -Date: Thu Jan 31 13:44:25 2008 +0000 - - Fix make dist . - -commit abc0bbf3813dc43e23d4c23e6fe794dbf287639b -Author: green -Date: Thu Jan 31 11:58:57 2008 +0000 - - Add Tim Wall's x86 windows patch. - -commit e332366d15a31198735b593ec8f7fc0558d783b8 -Author: green -Date: Wed Jan 30 13:21:02 2008 +0000 - - Add HJ's -fomit-frame-pointer struct return fix - -commit d4204240392af5b7750a08671b08e9c22dff5e93 -Author: green -Date: Wed Jan 30 12:42:34 2008 +0000 - - Clean up for new automake. - -commit f4932dd020df574637c9fb3fc1bb18e5a8f304cc -Author: green -Date: Wed Jan 30 12:40:25 2008 +0000 - - Fixes to run testsuite - -commit 085520ddc8db6a916bfc416b871fcb2d00074d40 -Author: green -Date: Tue Jan 29 15:16:43 2008 +0000 - - New files from gcc tree. - -commit 77175b3f7234e4875a4ef554ed1fe9fdc4133794 -Author: green -Date: Tue Jan 29 15:15:20 2008 +0000 - - Latest gcc svn sources - -commit 2544e45a0b2b634053df02da3a2ed9680eeed2a1 -Author: green -Date: Tue Jan 29 14:28:13 2008 +0000 - - Install ffitarget.h in $prefix/include. - -commit 6002211b1cc4daeb587d054b4f83968bda2c981e -Author: green -Date: Tue Jan 29 12:30:10 2008 +0000 - - Add new files. - -commit ccabd2b16be883cd03e5f0cd88ccfdd6ca39239d -Author: green -Date: Tue Jan 29 12:28:15 2008 +0000 - - Merge from gcc - -commit e680ecfbfca1da8d1823e48bc89b8375e66e128b -Author: tromey -Date: Sun Dec 24 23:12:15 2006 +0000 - - Pulled in libffi from gcc trunk. - Fixed build and install for standalone use. - -commit e7ba08965942ce872fdbc69f70f9848cc3d0bad6 -Author: root -Date: Sun Jun 4 23:22:24 2006 +0000 - - sourcware.org - -commit 0cd4aa24e21aaa964dfbdebc25ec5c8188049375 -Author: root -Date: Sun May 30 01:51:57 2004 +0000 - - Add LockDir - -commit 5826120fbd940d26cca76ed2522187505581e1ed -Author: green -Date: Tue Nov 4 06:09:08 2003 +0000 - - Add link to Gianni's web site. - -commit 220aa4b27db42d7ffaac5056000d5179f00d5ea3 -Author: jsm -Date: Tue Jan 21 08:07:42 2003 +0000 - - Newer, better, increased from before! (list of acceptable anon usernames) - -commit 1c3adc892cc1403dc4d3d7003a2385899836612e -Author: green -Date: Fri Dec 6 01:28:03 2002 +0000 - - Fixed Cygnus references. - -commit 4af66bb62fab9a8e318af3bf01e5486596a0c8d4 -Author: green -Date: Sun Oct 21 19:18:42 2001 +0000 - - Testsuite fixes. - -commit 5435965f9015ce40584c98d3816c3d05e7de1d21 -Author: green -Date: Mon Apr 23 00:32:03 2001 +0000 - - * include/ffi_common.h: Delete, after moving contents to... - * include/ffi_private.h: Subsume contents of ffi_common.h. - * include/Makefile.am (noinst_HEADERS): Remove ffi_common.h. - * include/Makefile.in: Rebuilt. - * arm/ffi.c, m68k/ffi.c, mips/ffi.c, powerpc/ffi.c, s390/ffi.c, - ia64/ffi.c: Include ffi_private.h, not ffi_common.h. - * alpha/ffi.c, sparc/ffi.c, x86/ffi.c: Don't include ffi_common.h. - * types.c, raw_api.c, java_raw_api.c, prep_cif.c: Don't include - ffi_common.h. - * debug.c: Include ffi_private.h instead of ffi_common.h. - - * mips/ffi.c (calc_n32_struct_flags): Make static. - (FIX_ARGP): Remove call to debugging routine ffi_stop_here. - - * mips/n32.S: Include ffi_private.h. - * mips/o32.S: Include ffi_private.h. - -commit 6fdb7de0fe3b7385e1fd78812ae69d9b3069d994 -Author: green -Date: Sun Apr 22 19:38:34 2001 +0000 - - * README: Update some comments. - - * Makefile.am (SUBDIRS): Add include so ffi.h gets installed. - * Makefile.in: Rebuilt. - - * include/ffi.h: Change ALPHA to __alpha__ and SPARC to __sparc__. - * types.c: Ditto. - * prep_cif.c (ffi_prep_cif): Ditto. - - * alpha/ffi.c, alpha/osf.S, sparc/ffi.c, sparc/v8.S, sparc/v9.S: - Include ffi_private.h. - - * include/ffi_private.h (FFI_TYPE_LAST): Define. - -commit bc7144b01b9707ef35f1a2e3e6996e005e82953a -Author: green -Date: Sun Apr 22 18:28:36 2001 +0000 - - Moved files from old home - -commit e57279831e20368c1aa1d2b35462b8629be73959 -Author: green -Date: Sun Apr 22 18:23:47 2001 +0000 - - These are dead. - -commit 7247436b5fe71767b29dc02b4da0fe18b08082e6 -Author: green -Date: Sun Apr 22 18:22:43 2001 +0000 - - All these files live somewhere else now. - -commit a8b0d40ff908e275028f676870c31d0d70274a98 -Author: green -Date: Sun Apr 22 18:17:14 2001 +0000 - - Many changes. Not quite there yet. - -commit f893d2273355710a290a26faebf5f12c3a34d0e3 -Author: green -Date: Sun Apr 22 18:13:22 2001 +0000 - - Moved m68k files - -commit 688ddfeced89cbb9d37b53005e1f7f2b9c78a8d7 -Author: green -Date: Sun Apr 22 18:12:33 2001 +0000 - - New, target indepentent, header - -commit f9e40776d488d5ecf43b3ae21444a1a2f6eca528 -Author: green -Date: Sun Apr 22 18:11:57 2001 +0000 - - Many changes. - -commit 8c1d2eb47f6bc314c431b75c85c107e8e43c4a76 -Author: green -Date: Sun Apr 22 18:10:47 2001 +0000 - - Many changes - -commit 1359dfc6582680a158b3caa3efb7a368da4aa12d -Author: green -Date: Sun Apr 22 18:10:20 2001 +0000 - - Moved ia64 files - -commit 6e2de5eee316a4579869aff50c7c5f6f478582d8 -Author: green -Date: Sun Apr 22 18:08:11 2001 +0000 - - Moved arm files - -commit 8807355af34cba8ffe87aee51152dfccec2771fa -Author: green -Date: Mon Apr 9 00:58:38 2001 +0000 - - Many many updates. Merge from gcc and then some. - -commit f7e9f91adec4ff1c2e7a13b3de81d2c5a3f55e7e -Author: green -Date: Mon Apr 17 03:32:37 2000 +0000 - - Mnay fixes. - -commit c4860de618f4956283f5c8230a2544e403dfe390 -Author: green -Date: Mon Apr 17 03:18:46 2000 +0000 - - Merge from libgcj. Merged patches from net. See ChangeLog for details. - -commit c578b58314990c3853429297c38ba14015fec5fa -Author: jsm -Date: Sat Oct 9 20:18:16 1999 +0000 - - 1999-10-09 Jason Molenda (jsm@bugshack.cygnus.com) - - * CVSROOT/auto_checkout, CVSROOT/commit_prep, CVSROOT/log_accum: - Deleted; generic versions now used for all repositories. - - * CVSROOT/commitinfo, CVSROOT/loginfo: Change pathnames to - generic versions. - - * CVSROOT/checkoutlist: Don't try to check out the removed - files any longer. - -commit acdb20051207fed7652dd9f122f65de5458c474c -Author: jsm -Date: Sat Oct 9 20:18:15 1999 +0000 - - 1999-10-09 Jason Molenda (jsm@bugshack.cygnus.com) - - * CVSROOT/auto_checkout, CVSROOT/commit_prep, CVSROOT/log_accum: - Deleted; generic versions now used for all repositories. - - * CVSROOT/commitinfo, CVSROOT/loginfo: Change pathnames to - generic versions. - - * CVSROOT/checkoutlist: Don't try to check out the removed - files any longer. - -commit e75be655ceedf7ab24c4e99d75eec9efeb979bc7 -Author: green -Date: Sun Aug 8 13:16:41 1999 +0000 - - New configury - -commit d6669a0dd5b266005325bbf6d5a8ff34574d809e -Author: green -Date: Sun Aug 8 13:05:12 1999 +0000 - - * include/ffi.h.in: Try to work around messy header problem - with PACKAGE and VERSION. - - * configure: Rebuilt. - * configure.in: Change version to 2.00-beta. - - * fficonfig.h.in: Rebuilt. - * acconfig.h (FFI_NO_STRUCTS, FFI_NO_RAW_API): Define. - - * src/x86/ffi.c (ffi_raw_call): Rename. - -commit 4819d52b007934a40d6d29a75ee30e857c4a93ae -Author: green -Date: Wed Aug 4 18:02:34 1999 +0000 - - New file for Kresten's closure work - -commit 2dbf801eb427cbf5021a9e1e512b5fc523524700 -Author: green -Date: Wed Aug 4 18:00:05 1999 +0000 - - Kresten's closure work. Initial checkin. - -commit d170961701b0f2bf7e824d7caba2ebe10002ed84 -Author: green -Date: Thu Jul 8 14:36:52 1999 +0000 - - * configure.in: Add x86 and powerpc BeOS configurations. - From Makoto Kato . - -commit c7747d976924ec6f2229cbcfbbdb98d364e10de9 -Author: jsm -Date: Wed May 12 23:32:16 1999 +0000 - - 1999-05-12 Jason Molenda (jsm@bugshack.cygnus.com) - * index.html: Add links to libffi* mail list archives. - -commit dd2aa9a8de22e26df3bbc85d068358641f6202f7 -Author: green -Date: Thu May 6 05:34:36 1999 +0000 - - * configure.in: Add warning about this being beta code. - Remove src/Makefile.am from the picture. - * configure: Rebuilt. - * Makefile.am: Move logic from src/Makefile.am. Add changes - to support libffi as a target library. - * Makefile.in: Rebuilt. - * aclocal.m4, config.guess, config.sub, ltconfig, ltmain.sh: - Upgraded to new autoconf, automake, libtool. - * README: Tweaks. - * LICENSE: Update copyright date. - * src/Makefile.am, src/Makefile.in: Removed. - -commit 4e9452abed58a3058ccdb446f96a29d50dda1f34 -Author: green -Date: Wed May 5 22:06:13 1999 +0000 - - Updated to new automake, libtool, autoconf - nothing works :-) - -commit 6d3b2bddaf4967fba8b8656c01bfc77ec0f2800c -Author: jsm -Date: Mon Apr 26 15:55:28 1999 +0000 - - 1999-04-26 Jason Molenda (jsm@bugshack.cygnus.com) - * index.html: Missed a reference to libffi-discuss@cygnus.com. Fixed. - -commit ebc6a9c28af831d3d187af8ff17319f0f309bd98 -Author: jsm -Date: Mon Apr 26 15:53:29 1999 +0000 - - 1999-04-26 Jason Molenda (jsm@bugshack.cygnus.com) - * index.html: Change links to ftp directory to point to sourceware - directory. - Change mailing list subscription forms to point to sourceware lists. - -commit 78ffc52a8b257061348c576ccb6fbbf8b48b0fff -Author: jsm -Date: Sun Apr 18 01:33:21 1999 +0000 - - Standard sourceware setup. - -commit b4d77e827d7ebef7e57ebcd71e71c15c62f1e0a8 -Author: jsm -Date: Mon Nov 30 11:11:25 1998 +0000 - - Small typeo. (I wouldn't bother except that it made the sentence hard - for me to parse on a casual read.) - -commit bfb73f08fdc987e37070c5fb0b196fbd28872888 -Author: jsm -Date: Mon Nov 30 10:44:55 1998 +0000 - - A few cleanups. Most notably, point to the correct subscribe cgi-bin - script. - -commit af8b7f037ccee3b7939ee226a1a2bbc2f057b35c -Author: green -Date: Mon Nov 30 06:20:05 1998 +0000 - - * index.html: Reformatted and updated to reflect hosting on - sourceware.cygnus.com (new mailing lists, etc). - -commit 334f0b060942aff8d26badaf7dde7830450dc5da -Author: green -Date: Sun Nov 29 16:56:12 1998 +0000 - - initial snapshot of documentation - -commit 3ab5cb4a1dcc7ecd7e773c97582b0099976c4753 -Author: green -Date: Sun Nov 29 16:56:10 1998 +0000 - - Initial revision - -commit d2a9eb5a8b7cbc8b769809cad59c82b975c178e2 -Merge: d3782ec bc75c54 -Author: green -Date: Sun Nov 29 16:48:16 1998 +0000 - - This commit was generated by cvs2svn to compensate for changes in r7, which - included commits to RCS files with non-trunk default branches. - -commit bc75c54bd311658005b065f1bf201b204c81cbca -Author: green -Date: Sun Nov 29 16:48:16 1998 +0000 - - Import of v1 code. - -commit d3782ec8160c644421dcea17b605fec6e328f14e -Author: jsm -Date: Fri Nov 20 20:18:00 1998 +0000 - - Send commit messages to mailing lists. - -commit 8d8d3843c484c2bb70d8375b2b799f75eb03f709 -Author: jsm -Date: Thu Oct 1 22:08:36 1998 +0000 - - initial checkin - -commit 49634f3bf221cc1939abafc788f7e4e31293fe73 -Author: jsm -Date: Thu Oct 1 22:08:35 1998 +0000 - - Add standard setup. - -commit c64a84c7693f8cd400fb94bba3c9bcfd9ad1fc36 -Author: jsm -Date: Thu Oct 1 22:08:34 1998 +0000 - - Add readers and standard modules file. - -commit 9813273b07fd082da573b3b6bfb8d23809b59eea -Author: jsm -Date: Thu Oct 1 22:08:33 1998 +0000 - - initial checkin diff --git a/ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libffi b/ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libffi deleted file mode 100644 index 49ba8dad3..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libffi +++ /dev/null @@ -1,584 +0,0 @@ -2011-02-08 Andreas Tobler - - * testsuite/lib/libffi.exp: Tweak for stand-alone mode. - -2009-12-25 Samuli Suominen - - * configure.ac: Undefine _AC_ARG_VAR_PRECIOUS for autoconf 2.64. - * configure: Rebuilt. - * fficonfig.h.in: Rebuilt. - -2009-06-16 Andrew Haley - - * testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_medium2.c: Fix printf format - specifiers. - * testsuite/libffi.call/huge_struct.c: Ad x86 XFAILs. - * testsuite/libffi.call/float2.c: Fix dg-excess-errors. - * testsuite/libffi.call/ffitest.h, - testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRIuLL): Define. - -2009-06-12 Andrew Haley - - * testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_medium2.c: Fix printf format - specifiers. - testsuite/libffi.special/unwindtest.cc: include stdint.h. - -2009-06-11 Timothy Wall - - * Makefile.am, - configure.ac, - include/ffi.h.in, - include/ffi_common.h, - src/closures.c, - src/dlmalloc.c, - src/x86/ffi.c, - src/x86/ffitarget.h, - src/x86/win64.S (new), - README: Added win64 support (mingw or MSVC) - * Makefile.in, - include/Makefile.in, - man/Makefile.in, - testsuite/Makefile.in, - configure, - aclocal.m4: Regenerated - * ltcf-c.sh: properly escape cygwin/w32 path - * man/ffi_call.3: Clarify size requirements for return value. - * src/x86/ffi64.c: Fix filename in comment. - * src/x86/win32.S: Remove unused extern. - - * testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/closure_stdcall.c, - testsuite/libffi.call/cls_12byte.c, - testsuite/libffi.call/cls_16byte.c, - testsuite/libffi.call/cls_18byte.c, - testsuite/libffi.call/cls_19byte.c, - testsuite/libffi.call/cls_1_1byte.c, - testsuite/libffi.call/cls_20byte.c, - testsuite/libffi.call/cls_20byte1.c, - testsuite/libffi.call/cls_24byte.c, - testsuite/libffi.call/cls_2byte.c, - testsuite/libffi.call/cls_3_1byte.c, - testsuite/libffi.call/cls_3byte1.c, - testsuite/libffi.call/cls_3byte2.c, - testsuite/libffi.call/cls_4_1byte.c, - testsuite/libffi.call/cls_4byte.c, - testsuite/libffi.call/cls_5_1_byte.c, - testsuite/libffi.call/cls_5byte.c, - testsuite/libffi.call/cls_64byte.c, - testsuite/libffi.call/cls_6_1_byte.c, - testsuite/libffi.call/cls_6byte.c, - testsuite/libffi.call/cls_7_1_byte.c, - testsuite/libffi.call/cls_7byte.c, - testsuite/libffi.call/cls_8byte.c, - testsuite/libffi.call/cls_9byte1.c, - testsuite/libffi.call/cls_9byte2.c, - testsuite/libffi.call/cls_align_double.c, - testsuite/libffi.call/cls_align_float.c, - testsuite/libffi.call/cls_align_longdouble.c, - testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_align_sint16.c, - testsuite/libffi.call/cls_align_sint32.c, - testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint16.c, - testsuite/libffi.call/cls_align_uint32.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_dbls_struct.c, - testsuite/libffi.call/cls_double.c, - testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_float.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_multi_schar.c, - testsuite/libffi.call/cls_multi_sshort.c, - testsuite/libffi.call/cls_multi_sshortchar.c, - testsuite/libffi.call/cls_multi_uchar.c, - testsuite/libffi.call/cls_multi_ushort.c, - testsuite/libffi.call/cls_multi_ushortchar.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c, - testsuite/libffi.call/cls_schar.c, - testsuite/libffi.call/cls_sint.c, - testsuite/libffi.call/cls_sshort.c, - testsuite/libffi.call/cls_uchar.c, - testsuite/libffi.call/cls_uint.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/cls_ushort.c, - testsuite/libffi.call/err_bad_abi.c, - testsuite/libffi.call/err_bad_typedef.c, - testsuite/libffi.call/float2.c, - testsuite/libffi.call/huge_struct.c, - testsuite/libffi.call/nested_struct.c, - testsuite/libffi.call/nested_struct1.c, - testsuite/libffi.call/nested_struct10.c, - testsuite/libffi.call/nested_struct2.c, - testsuite/libffi.call/nested_struct3.c, - testsuite/libffi.call/nested_struct4.c, - testsuite/libffi.call/nested_struct5.c, - testsuite/libffi.call/nested_struct6.c, - testsuite/libffi.call/nested_struct7.c, - testsuite/libffi.call/nested_struct8.c, - testsuite/libffi.call/nested_struct9.c, - testsuite/libffi.call/problem1.c, - testsuite/libffi.call/return_ldl.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_large.c, - testsuite/libffi.call/stret_large2.c, - testsuite/libffi.call/stret_medium.c, - testsuite/libffi.call/stret_medium2.c, - testsuite/libffi.special/unwindtest.cc: use ffi_closure_alloc instead - of checking for MMAP. Use intptr_t instead of long casts. - -2009-06-04 Andrew Haley - - * src/powerpc/ffitarget.h: Fix misapplied merge from gcc. - -2009-06-04 Andrew Haley - - * src/mips/o32.S, - src/mips/n32.S: Fix licence formatting. - -2009-06-04 Andrew Haley - - * src/x86/darwin.S: Fix licence formatting. - src/x86/win32.S: Likewise. - src/sh64/sysv.S: Likewise. - src/sh/sysv.S: Likewise. - -2009-06-04 Andrew Haley - - * src/sh64/ffi.c: Remove lint directives. Was missing from merge - of Andreas Tobler's patch from 2006-04-22. - -2009-06-04 Andrew Haley - - * src/sh/ffi.c: Apply missing hunk from Alexandre Oliva's patch of - 2007-03-07. - -2008-12-26 Timothy Wall - - * testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_align_longdouble.c, - testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c: mark expected - failures on x86_64 cygwin/mingw. - -2008-12-22 Timothy Wall - - * testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/closure_loc_fn0.c, - testsuite/libffi.call/closure_stdcall.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c: use portable cast from - pointer to integer (intptr_t). - * testsuite/libffi.call/cls_longdouble.c: disable for win64. - -2008-12-19 Anthony Green - - * configure.ac: Bump version to 3.0.8. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -2008-11-11 Anthony Green - - * configure.ac: Bump version to 3.0.7. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -2008-08-25 Andreas Tobler - - * src/powerpc/ffitarget.h (ffi_abi): Add FFI_LINUX and - FFI_LINUX_SOFT_FLOAT to the POWERPC_FREEBSD enum. - Add note about flag bits used for FFI_SYSV_TYPE_SMALL_STRUCT. - Adjust copyright notice. - * src/powerpc/ffi.c: Add two new flags to indicate if we have one - register or two register to use for FFI_SYSV structs. - (ffi_prep_cif_machdep): Pass the right register flag introduced above. - (ffi_closure_helper_SYSV): Fix the return type for - FFI_SYSV_TYPE_SMALL_STRUCT. Comment. - Adjust copyright notice. - -2008-07-24 Anthony Green - - * testsuite/libffi.call/cls_dbls_struct.c, - testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c, - testsuite/libffi.call/err_bad_abi.c: Clean up failures from - compiler warnings. - -2008-07-17 Anthony Green - - * configure.ac: Bump version to 3.0.6. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. Add documentation. - * README: Update for new release. - -2008-07-16 Kaz Kojima - - * src/sh/ffi.c (ffi_prep_closure_loc): Turn INSN into an unsigned - int. - -2008-07-16 Kaz Kojima - - * src/sh/sysv.S: Add .note.GNU-stack on Linux. - * src/sh64/sysv.S: Likewise. - -2008-04-03 Anthony Green - - * libffi.pc.in (Libs): Add -L${libdir}. - * configure.ac: Bump version to 3.0.5. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -2008-04-03 Anthony Green - Xerces Ranby - - * include/ffi.h.in: Wrap definition of target architecture to - protect from double definitions. - -2008-03-22 Moriyoshi Koizumi - - * src/x86/ffi.c (ffi_prep_closure_loc): Fix for bug revealed in - closure_loc_fn0.c. - * testsuite/libffi.call/closure_loc_fn0.c (closure_loc_test_fn0): - New test. - -2008-03-04 Anthony Green - Blake Chaffin - hos@tamanegi.org - - * testsuite/libffi.call/cls_align_longdouble_split2.c - testsuite/libffi.call/cls_align_longdouble_split.c - testsuite/libffi.call/cls_dbls_struct.c - testsuite/libffi.call/cls_double_va.c - testsuite/libffi.call/cls_longdouble.c - testsuite/libffi.call/cls_longdouble_va.c - testsuite/libffi.call/cls_pointer.c - testsuite/libffi.call/cls_pointer_stack.c - testsuite/libffi.call/err_bad_abi.c - testsuite/libffi.call/err_bad_typedef.c - testsuite/libffi.call/huge_struct.c - testsuite/libffi.call/stret_large2.c - testsuite/libffi.call/stret_large.c - testsuite/libffi.call/stret_medium2.c - testsuite/libffi.call/stret_medium.c: New tests from Apple. - -2008-02-26 Jakub Jelinek - Anthony Green - - * src/alpha/osf.S: Add .note.GNU-stack on Linux. - * src/s390/sysv.S: Likewise. - * src/powerpc/linux64.S: Likewise. - * src/powerpc/linux64_closure.S: Likewise. - * src/powerpc/ppc_closure.S: Likewise. - * src/powerpc/sysv.S: Likewise. - * src/x86/unix64.S: Likewise. - * src/x86/sysv.S: Likewise. - * src/sparc/v8.S: Likewise. - * src/sparc/v9.S: Likewise. - * src/m68k/sysv.S: Likewise. - * src/ia64/unix.S: Likewise. - * src/arm/sysv.S: Likewise. - -2008-02-26 Anthony Green - Thomas Heller - - * src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C - comment. - -2008-02-26 Anthony Green - Thomas Heller - - * include/ffi.h.in: Change void (*)() to void (*)(void). - -2008-02-26 Anthony Green - Thomas Heller - - * src/alpha/ffi.c: Change void (*)() to void (*)(void). - src/alpha/osf.S, src/arm/ffi.c, src/frv/ffi.c, src/ia64/ffi.c, - src/ia64/unix.S, src/java_raw_api.c, src/m32r/ffi.c, - src/mips/ffi.c, src/pa/ffi.c, src/pa/hpux32.S, src/pa/linux.S, - src/powerpc/ffi.c, src/powerpc/ffi_darwin.c, src/raw_api.c, - src/s390/ffi.c, src/sh/ffi.c, src/sh64/ffi.c, src/sparc/ffi.c, - src/x86/ffi.c, src/x86/unix64.S, src/x86/darwin64.S, - src/x86/ffi64.c: Ditto. - -2008-02-24 Anthony Green - - * configure.ac: Accept openbsd*, not just openbsd. - Bump version to 3.0.4. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -2008-02-22 Anthony Green - - * README: Clean up list of tested platforms. - -2008-02-22 Anthony Green - - * configure.ac: Bump version to 3.0.3. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. Clean up test docs. - -2008-02-22 Bjoern Koenig - Andreas Tobler - - * configure.ac: Add amd64-*-freebsd* target. - * configure: Regenerate. - -2008-02-22 Thomas Heller - - * configure.ac: Add x86 OpenBSD support. - * configure: Rebuilt. - -2008-02-21 Thomas Heller - - * README: Change "make test" to "make check". - -2008-02-21 Anthony Green - - * configure.ac: Bump version to 3.0.2. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -2008-02-21 Björn König - - * src/x86/freebsd.S: New file. - * configure.ac: Add x86 FreeBSD support. - * Makefile.am: Ditto. - -2008-02-15 Anthony Green - - * configure.ac: Bump version to 3.0.1. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -2008-02-15 David Daney - - * src/mips/ffi.c: Remove extra '>' from include directive. - (ffi_prep_closure_loc): Use clear_location instead of tramp. - -2008-02-15 Anthony Green - - * configure.ac: Bump version to 3.0.0. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - -2008-02-15 David Daney - - * src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE): - Define (conditionally), and use it to include cachectl.h. - (ffi_prep_closure_loc): Fix cache flushing. - * src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define. - -2008-02-15 Anthony Green - - * man/ffi_call.3, man/ffi_prep_cif.3, man/ffi.3: - Update dates and remove all references to ffi_prep_closure. - * configure.ac: Bump version to 2.99.9. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - -2008-02-15 Anthony Green - - * man/ffi_prep_closure.3: Delete. - * man/Makefile.am (EXTRA_DIST): Remove ffi_prep_closure.3. - (man_MANS): Ditto. - * man/Makefile.in: Rebuilt. - * configure.ac: Bump version to 2.99.8. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - -2008-02-14 Anthony Green - - * configure.ac: Bump version to 2.99.7. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * include/ffi.h.in LICENSE src/debug.c src/closures.c - src/ffitest.c src/s390/sysv.S src/s390/ffitarget.h - src/types.c src/m68k/ffitarget.h src/raw_api.c src/frv/ffi.c - src/frv/ffitarget.h src/sh/ffi.c src/sh/sysv.S - src/sh/ffitarget.h src/powerpc/ffitarget.h src/pa/ffi.c - src/pa/ffitarget.h src/pa/linux.S src/java_raw_api.c - src/cris/ffitarget.h src/x86/ffi.c src/x86/sysv.S - src/x86/unix64.S src/x86/win32.S src/x86/ffitarget.h - src/x86/ffi64.c src/x86/darwin.S src/ia64/ffi.c - src/ia64/ffitarget.h src/ia64/ia64_flags.h src/ia64/unix.S - src/sparc/ffi.c src/sparc/v9.S src/sparc/ffitarget.h - src/sparc/v8.S src/alpha/ffi.c src/alpha/ffitarget.h - src/alpha/osf.S src/sh64/ffi.c src/sh64/sysv.S - src/sh64/ffitarget.h src/mips/ffi.c src/mips/ffitarget.h - src/mips/n32.S src/mips/o32.S src/arm/ffi.c src/arm/sysv.S - src/arm/ffitarget.h src/prep_cif.c: Update license text. - -2008-02-14 Anthony Green - - * README: Update tested platforms. - * configure.ac: Bump version to 2.99.6. - * configure: Rebuilt. - -2008-02-14 Anthony Green - - * configure.ac: Bump version to 2.99.5. - * configure: Rebuilt. - * Makefile.am (EXTRA_DIST): Add darwin64.S - * Makefile.in: Rebuilt. - * testsuite/lib/libffi-dg.exp: Remove libstdc++ bits from GCC tree. - * LICENSE: Update WARRANTY. - -2008-02-14 Anthony Green - - * libffi.pc.in (libdir): Fix libdir definition. - * configure.ac: Bump version to 2.99.4. - * configure: Rebuilt. - -2008-02-14 Anthony Green - - * README: Update. - * libffi.info: New file. - * doc/stamp-vti: New file. - * configure.ac: Bump version to 2.99.3. - * configure: Rebuilt. - -2008-02-14 Anthony Green - - * Makefile.am (SUBDIRS): Add man dir. - * Makefile.in: Rebuilt. - * configure.ac: Create Makefile. - * configure: Rebuilt. - * man/ffi_call.3 man/ffi_prep_cif.3 man/ffi_prep_closure.3 - man/Makefile.am man/Makefile.in: New files. - -2008-02-14 Tom Tromey - - * aclocal.m4, Makefile.in, configure, fficonfig.h.in: Rebuilt. - * mdate-sh, texinfo.tex: New files. - * Makefile.am (info_TEXINFOS): New variable. - * doc/libffi.texi: New file. - * doc/version.texi: Likewise. - -2008-02-14 Anthony Green - - * Makefile.am (AM_CFLAGS): Don't compile with -D$(TARGET). - (lib_LTLIBRARIES): Define. - (toolexeclib_LIBRARIES): Undefine. - * Makefile.in: Rebuilt. - * configure.ac: Reset version to 2.99.1. - * configure.in: Rebuilt. - -2008-02-14 Anthony Green - - * libffi.pc.in: Use @PACKAGE_NAME@ and @PACKAGE_VERSION@. - * configure.ac: Reset version to 2.99.1. - * configure.in: Rebuilt. - * Makefile.am (EXTRA_DIST): Add ChangeLog.libffi. - * Makefile.in: Rebuilt. - * LICENSE: Update copyright notice. - -2008-02-14 Anthony Green - - * include/Makefile.am (nodist_includes_HEADERS): Define. Don't - distribute ffitarget.h or ffi.h from the build include dir. - * Makefile.in: Rebuilt. - -2008-02-14 Anthony Green - - * include/Makefile.am (includesdir): Install headers under libdir. - (pkgconfigdir): Define. Install libffi.pc. - * include/Makefile.in: Rebuilt. - * libffi.pc.in: Create. - * libtool-version: Increment CURRENT - * configure.ac: Add libffi.pc.in - * configure: Rebuilt. - -2008-02-03 Anthony Green - - * include/Makefile.am (includesdir): Fix header install with - DESTDIR. - * include/Makefile.in: Rebuilt. - -2008-02-03 Timothy Wall - - * src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL): Calculate jump return - offset based on code pointer, not data pointer. - -2008-02-01 Anthony Green - - * include/Makefile.am: Fix header installs. - * Makefile.am: Ditto. - * include/Makefile.in: Rebuilt. - * Makefile.in: Ditto. - -2008-02-01 Anthony Green - - * src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL, - FFI_INIT_TRAMPOLINE): Revert my broken changes to twall's last - patch. - -2008-01-31 Anthony Green - - * Makefile.am (EXTRA_DIST): Add missing files. - * testsuite/Makefile.am: Ditto. - * Makefile.in, testsuite/Makefile.in: Rebuilt. - -2008-01-31 Timothy Wall - - * testsuite/libffi.call/closure_stdcall.c: Add test for stdcall - closures. - * src/x86/ffitarget.h: Increase size of trampoline for stdcall - closures. - * src/x86/win32.S: Add assembly for stdcall closure. - * src/x86/ffi.c: Initialize stdcall closure trampoline. - -2008-01-30 H.J. Lu - - PR libffi/34612 - * src/x86/sysv.S (ffi_closure_SYSV): Pop 4 byte from stack when - returning struct. - - * testsuite/libffi.call/call.exp: Add "-O2 -fomit-frame-pointer" - tests. - -2008-01-30 Anthony Green - - * Makefile.am, include/Makefile.am: Move headers to - libffi_la_SOURCES for new automake. - * Makefile.in, include/Makefile.in: Rebuilt. - - * testsuite/lib/wrapper.exp: Copied from gcc tree to allow for - execution outside of gcc tree. - * testsuite/lib/target-libpath.exp: Ditto. - - * testsuite/lib/libffi-dg.exp: Many changes to allow for execution - outside of gcc tree. - diff --git a/ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libffi-3.1 b/ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libffi-3.1 deleted file mode 100644 index 8f7f50d6f..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libffi-3.1 +++ /dev/null @@ -1,6000 +0,0 @@ -2014-03-16 Josh Triplett - - * ChangeLog: Archive to ChangeLog.libffi-3.1 and delete. Future - changelogs will come from git, with autogenerated snapshots shipped in - distributed tarballs. - -2014-03-16 Josh Triplett - - Add support for stdcall, thiscall, and fastcall on non-Windows - x86-32. - - Linux supports the stdcall calling convention, either via - functions explicitly declared with the stdcall attribute, or via - code compiled with -mrtd which effectively makes stdcall the - default. - - This introduces FFI_STDCALL, FFI_THISCALL, and FFI_FASTCALL on - non-Windows x86-32 platforms, as non-default calling conventions. - - * Makefile.am: Compile in src/x86/win32.S on non-Windows x86-32. - * src/x86/ffitarget.h: Add FFI_STDCALL, FFI_THISCALL, and - FFI_FASTCALL on non-Windows x86-32. Increase trampoline size to - accomodate these calling conventions, and unify some ifdeffery. - * src/x86/ffi.c: Add support for FFI_STDCALL, FFI_THISCALL, and - FFI_FASTCALL on non-Windows x86-32 platforms; update ifdeffery. - * src/x86/win32.S: Support compiling on non-Windows x86-32 - platforms. On those platforms, avoid redefining the SYSV symbols - already provided by src/x86/sysv.S. - * testsuite/libffi.call/closure_stdcall.c: Run on non-Windows. - #define __stdcall if needed. - * testsuite/libffi.call/closure_thiscall.c: Run on non-Windows. - #define __fastcall if needed. - * testsuite/libffi.call/fastthis1_win32.c: Run on non-Windows. - * testsuite/libffi.call/fastthis2_win32.c: Ditto. - * testsuite/libffi.call/fastthis3_win32.c: Ditto. - * testsuite/libffi.call/many2_win32.c: Ditto. - * testsuite/libffi.call/many_win32.c: Ditto. - * testsuite/libffi.call/strlen2_win32.c: Ditto. - * testsuite/libffi.call/strlen_win32.c: Ditto. - * testsuite/libffi.call/struct1_win32.c: Ditto. - * testsuite/libffi.call/struct2_win32.c: Ditto. - -2014-03-16 Josh Triplett - - * prep_cif.c: Remove unnecessary ifdef for X86_WIN32. - ffi_prep_cif_core had a special case for X86_WIN32, checking for - FFI_THISCALL in addition to the FFI_FIRST_ABI-to-FFI_LAST_ABI - range before returning FFI_BAD_ABI. However, on X86_WIN32, - FFI_THISCALL already falls in that range, making the special case - unnecessary. Remove it. - -2014-03-16 Josh Triplett - - * testsuite/libffi.call/closure_stdcall.c, - testsuite/libffi.call/closure_thiscall.c: Remove fragile stack - pointer checks. These files included inline assembly to save the - stack pointer before and after the call, and compare the values. - However, compilers can and do leave the stack in different states - for these two pieces of inline assembly, such as by saving a - temporary value on the stack across the call; observed with gcc - -Os, and verified as spurious through careful inspection of - disassembly. - -2014-03-16 Josh Triplett - - * testsuite/libffi.call/many.c: Avoid spurious failure due to - excess floating-point precision. - * testsuite/libffi.call/many_win32.c: Ditto. - -2014-03-16 Josh Triplett - - * libtool-ldflags: Re-add. - -2014-03-16 Josh Triplett - - * Makefile.in, aclocal.m4, compile, config.guess, config.sub, - configure, depcomp, include/Makefile.in, install-sh, - libtool-ldflags, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4, - m4/ltsugar.m4, m4/ltversion.m4, m4/lt~obsolete.m4, - man/Makefile.in, mdate-sh, missing, testsuite/Makefile.in: Delete - autogenerated files from version control. - * .gitignore: Add autogenerated files. - * autogen.sh: New script to generate the autogenerated files. - * README: Document requirement to run autogen.sh when building - directly from version control. - * .travis.yml: Run autogen.sh - -2014-03-14 Anthony Green - - * configure, Makefile.in: Rebuilt. - -2014-03-10 Mike Hommey - - * configure.ac: Allow building for mipsel with Android NDK r8. - * Makefile.am (AM_MAKEFLAGS): Replace double quotes with single - quotes. - -2014-03-10 Landry Breuil - - * configure.ac: Ensure the linker supports @unwind sections in libffi. - -2014-03-01 Anthony Green - - * Makefile.am (EXTRA_DIST): Replace old scripts with - generate-darwin-source-and-headers.py. - * Makefile.in: Rebuilt. - -2014-02-28 Anthony Green - - * Makefile.am (AM_CFLAGS): Reintroduce missing -DFFI_DEBUG for - --enable-debug builds. - * Makefile.in: Rebuilt. - -2014-02-28 Makoto Kato - - * src/closures.c: Fix build failure when using clang for Android. - -2014-02-28 Marcin Wojdyr - - * libffi.pc.in (toolexeclibdir): use -L${toolexeclibdir} instead - of -L${libdir}. - -2014-02-28 Paulo Pizarro - - * src/bfin/sysv.S: Calling functions in shared libraries requires - considering the GOT. - -2014-02-28 Josh Triplett - - * src/x86/ffi64.c (classify_argument): Handle case where - FFI_TYPE_LONGDOUBLE == FFI_TYPE_DOUBLE. - -2014-02-28 Anthony Green - - * ltmain.sh: Generate with libtool-2.4.2.418. - * m4/libtool.m4, m4/ltoptions.m4, m4/ltversion.m4: Ditto. - * configure: Rebuilt. - -2014-02-28 Dominik Vogt - - * configure.ac (AC_ARG_ENABLE struct): Fix typo in help - message. - (AC_ARG_ENABLE raw_api): Ditto. - * configure, fficonfig.h.in: Rebuilt. - -2014-02-28 Will Newton - - * src/arm/sysv.S: Initialize IP register with FP. - -2014-02-28 Yufeng Zhang - - * src/aarch64/sysv.S (ffi_closure_SYSV): Use x29 as the - main CFA reg; update cfi_rel_offset. - -2014-02-15 Marcus Comstedt - - * src/powerpc/ffi_linux64.c, src/powerpc/linux64_closure.S: Remove - assumption on contents of r11 in closure. - -2014-02-09 Heiher - - * src/mips/n32.S: Fix call floating point va function. - -2014-01-21 Zachary Waldowski - - * src/aarch64/ffi.c: Fix missing semicolons on assertions under - debug mode. - -2013-12-30 Zachary Waldowski - - * .gitignore: Exclude darwin_* generated source and build_* trees. - * src/aarch64/ffi.c, src/arm/ffi.c, src/x86/ffi.c: Inhibit Clang - previous prototype warnings. - * src/arm/ffi.c: Prevent NULL dereference, fix short type warning - * src/dlmalloc.c: Fix warnings from set_segment_flags return type, - and the native use of size_t for malloc on platforms - * src/arm/sysv.S: Use unified syntax. Clang clean-ups for - ARM_FUNC_START. - * generate-osx-source-and-headers.py: Remove. - * build-ios.sh: Remove. - * libffi.xcodeproj/project.pbxproj: Rebuild targets. Include - x86_64+aarch64 pieces in library. Export headers properly. - * src/x86/ffi64.c: More Clang warning clean-ups. - * src/closures.c (open_temp_exec_file_dir): Use size_t. - * src/prep_cif.c (ffi_prep_cif_core): Cast ALIGN result. - * src/aarch64/sysv.S: Use CNAME for global symbols. Only use - .size for ELF targets. - * src/aarch64/ffi.c: Clean up for double == long double. Clean up - from Clang warnings. Use Clang cache invalidation builtin. Use - size_t in place of unsigned in many places. Accommodate for - differences in Apple AArch64 ABI. - -2013-12-02 Daniel Rodríguez Troitiño - - * generate-darwin-source-and-headers.py: Clean up, modernize, - merged version of previous scripts. - -2013-11-21 Anthony Green - - * configure, Makefile.in, include/Makefile.in, include/ffi.h.in, - man/Makefile.in, testsuite/Makefile.in, fficonfig.h.in: Rebuilt. - -2013-11-21 Alan Modra - - * Makefile.am (EXTRA_DIST): Add new src/powerpc files. - (nodist_libffi_la_SOURCES ): Likewise. - * configure.ac (HAVE_LONG_DOUBLE_VARIANT): Define for powerpc. - * include/ffi.h.in (ffi_prep_types): Declare. - * src/prep_cif.c (ffi_prep_cif_core): Call ffi_prep_types. - * src/types.c (FFI_NONCONST_TYPEDEF): Define and use for - HAVE_LONG_DOUBLE_VARIANT. - * src/powerpc/ffi_powerpc.h: New file. - * src/powerpc/ffi.c: Split into.. - * src/powerpc/ffi_sysv.c: ..new file, and.. - * src/powerpc/ffi_linux64.c: ..new file, rewriting parts. - * src/powerpc/ffitarget.h (enum ffi_abi): Rewrite powerpc ABI - selection as bits controlling features. - * src/powerpc/linux64.S: For consistency, use POWERPC64 rather - than __powerpc64__. - * src/powerpc/linux64_closure.S: Likewise. - * src/powerpc/ppc_closure.S: Likewise. Move .note.FNU-stack - inside guard. - * src/powerpc/sysv.S: Likewise. - * configure: Regenerate. - * fficonfig.h.in: Regenerate. - * Makefile.in: Regenerate. - -2013-11-20 Alan Modra - - * src/powerpc/ffi.c (ffi_prep_cif_machdep_core): Use - NUM_FPR_ARG_REGISTERS64 and NUM_GPR_ARG_REGISTERS64 not their - 32-bit versions for 64-bit code. - * src/powerpc/linux64_closure.S: Don't use the return value area - as a parameter save area on ELFv2. - -2013-11-18 Iain Sandoe - - * src/powerpc/darwin.S (EH): Correct use of pcrel FDE encoding. - * src/powerpc/darwin_closure.S (EH): Likewise. Modernise picbase - labels. - -2013-11-18 Anthony Green - - * src/arm/ffi.c (ffi_call): Hoist declaration of temp to top of - function. - * src/arm/ffi.c (ffi_closure_inner): Moderize function declaration - to appease compiler. - Thanks for Gregory P. Smith . - -2013-11-18 Anthony Green - - * README (tested): Mention PowerPC ELFv2. - -2013-11-16 Alan Modra - - * src/powerpc/ppc_closure.S: Move errant #endif to where it belongs. - Don't bl .Luint128. - -2013-11-16 Alan Modra - - * src/powerpc/ffi.c (ffi_prep_cif_machdep_core): Use #if _CALL_ELF - test to select parameter save sizing for ELFv2 vs. ELFv1. - * src/powerpc/ffitarget.h (FFI_V2_TYPE_FLOAT_HOMOG, - FFI_V2_TYPE_DOUBLE_HOMOG, FFI_V2_TYPE_SMALL_STRUCT): Define. - (FFI_TRAMPOLINE_SIZE): Define variant for ELFv2. - * src/powerpc/ffi.c (FLAG_ARG_NEEDS_PSAVE): Define. - (discover_homogeneous_aggregate): New function. - (ffi_prep_args64): Adjust start of param save area for ELFv2. - Handle homogenous floating point struct parms. - (ffi_prep_cif_machdep_core): Adjust space calculation for ELFv2. - Handle ELFv2 return values. Set FLAG_ARG_NEEDS_PSAVE. Handle - homogenous floating point structs. - (ffi_call): Increase size of smst_buffer for ELFv2. Handle ELFv2. - (flush_icache): Compile for ELFv2. - (ffi_prep_closure_loc): Set up ELFv2 trampoline. - (ffi_closure_helper_LINUX64): Don't return all structs directly - to caller. Handle homogenous floating point structs. Handle - ELFv2 struct return values. - * src/powerpc/linux64.S (ffi_call_LINUX64): Set up r2 for - ELFv2. Adjust toc save location. Call function pointer using - r12. Handle FLAG_RETURNS_SMST. Don't predict branches. - * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Set up r2 - for ELFv2. Define ELFv2 versions of STACKFRAME, PARMSAVE, and - RETVAL. Handle possibly missing parameter save area. Handle - ELFv2 return values. - (.note.GNU-stack): Move inside outer #ifdef. - -2013-11-16 Alan Modra - - * src/powerpc/ffi.c (ffi_prep_cif_machdep): Revert 2013-02-08 - change. Do not consume an int arg when returning a small struct - for FFI_SYSV ABI. - (ffi_call): Only use bounce buffer when FLAG_RETURNS_SMST. - Properly copy bounce buffer to destination. - * src/powerpc/sysv.S: Revert 2013-02-08 change. - * src/powerpc/ppc_closure.S: Remove stray '+'. - -2013-11-16 Alan Modra - - * src/powerpc/ffi.c (ffi_prep_args64): Align struct parameters - according to __STRUCT_PARM_ALIGN__. - (ffi_prep_cif_machdep_core): Likewise. - (ffi_closure_helper_LINUX64): Likewise. - -2013-11-16 Alan Modra - - * src/powerpc/linux64.S (ffi_call_LINUX64): Tweak restore of r28. - (.note.GNU-stack): Move inside outer #ifdef. - * src/powerpc/linux64_closure.S (STACKFRAME, PARMSAVE, - RETVAL): Define and use throughout. - (ffi_closure_LINUX64): Save fprs before buying stack. - (.note.GNU-stack): Move inside outer #ifdef. - -2013-11-16 Alan Modra - - * src/powerpc/ffitarget.h (FFI_TARGET_SPECIFIC_VARIADIC): Define. - (FFI_EXTRA_CIF_FIELDS): Define. - * src/powerpc/ffi.c (ffi_prep_args64): Save fprs as per the - ABI, not to both fpr and param save area. - (ffi_prep_cif_machdep_core): Renamed from ffi_prep_cif_machdep. - Keep initial flags. Formatting. Remove dead FFI_LINUX_SOFT_FLOAT - code. - (ffi_prep_cif_machdep, ffi_prep_cif_machdep_var): New functions. - (ffi_closure_helper_LINUX64): Pass floating point as per ABI, - not to both fpr and parameter save areas. - - * libffi/testsuite/libffi.call/cls_double_va.c (main): Correct - function cast and don't call ffi_prep_cif. - * libffi/testsuite/libffi.call/cls_longdouble_va.c (main): Likewise. - -2013-11-15 Andrew Haley - - * doc/libffi.texi (Closure Example): Fix the sample code. - * doc/libffi.info, doc/stamp-vti, doc/version.texi: Rebuilt. - -2013-11-15 Andrew Haley - - * testsuite/libffi.call/va_struct1.c (main): Fix broken test. - * testsuite/libffi.call/cls_uint_va.c (cls_ret_T_fn): Likewise - * testsuite/libffi.call/cls_struct_va1.c (test_fn): Likewise. - * testsuite/libffi.call/va_1.c (main): Likewise. - -2013-11-14 David Schneider - - * src/arm/ffi.c: Fix register allocation for mixed float and - doubles. - * testsuite/libffi.call/cls_many_mixed_float_double.c: Testcase - for many mixed float and double arguments. - -2013-11-13 Alan Modra - - * doc/libffi.texi (Simple Example): Correct example code. - * doc/libffi.info, doc/stamp-vti, doc/version.texi: Rebuilt. - -2013-11-13 Anthony Green - - * include/ffi_common.h: Respect HAVE_ALLOCA_H for GNU compiler - based build. (Thanks to tmr111116 on github) - -2013-11-09 Anthony Green - - * m4/libtool.m4: Refresh. - * configure, Makefile.in: Rebuilt. - * README: Add more notes about next release. - -2013-11-09 Shigeharu TAKENO - - * m4/ax_gcc_archflag.m4 (ax_gcc_arch): Don't recognize - UltraSPARC-IIi as ultrasparc3. - -2013-11-06 Mark Kettenis - - * src/x86/freebsd.S (ffi_call_SYSV): Align the stack pointer to - 16-bytes. - -2013-11-06 Konstantin Belousov - - * src/x86/freebsd.S (ffi_closure_raw_SYSV): Mark the assembler - source as not requiring executable stack. - -2013-11-02 Anthony Green - - * doc/libffi.texi (The Basics): Clarify return value buffer size - requirements. Also, NULL result buffer pointers are no longer - supported. - * doc/libffi.info: Rebuilt. - -2013-11-02 Mischa Jonker - - * Makefile.am (nodist_libffi_la_SOURCES): Fix build error. - * Makefile.in: Rebuilt. - -2013-11-02 David Schneider - - * src/arm/ffi.c: more robust argument handling for closures on arm hardfloat - * testsuite/libffi.call/many_mixed.c: New file. - * testsuite/libffi.call/cls_many_mixed_args.c: More tests. - -2013-11-02 Vitaly Budovski - - * src/x86/ffi.c (ffi_prep_cif_machdep): Don't align stack for win32. - -2013-10-23 Mark H Weaver - - * src/mips/ffi.c: Fix handling of uint32_t arguments on the - MIPS N32 ABI. - -2013-10-13 Sandra Loosemore - - * README: Add Nios II to table of supported platforms. - * Makefile.am (EXTRA_DIST): Add nios2 files. - (nodist_libffi_la_SOURCES): Likewise. - * Makefile.in: Regenerated. - * configure.ac (nios2*-linux*): New host. - (NIOS2): Add AM_CONDITIONAL. - * configure: Regenerated. - * src/nios2/ffi.c: New. - * src/nios2/ffitarget.h: New. - * src/nios2/sysv.S: New. - * src/prep_cif.c (initialize_aggregate): Handle extra structure - alignment via FFI_AGGREGATE_ALIGNMENT. - (ffi_prep_cif_core): Conditionalize structure return for NIOS2. - -2013-10-10 Sandra Loosemore - - * testsuite/libffi.call/cls_many_mixed_args.c (cls_ret_double_fn): - Fix uninitialized variable. - -2013-10-11 Marcus Shawcroft - - * testsuite/libffi.call/many.c (many): Replace * with +. - -2013-10-08 Ondřej Bílka - - * src/aarch64/ffi.c, src/aarch64/sysv.S, src/arm/ffi.c, - src/arm/gentramp.sh, src/bfin/sysv.S, src/closures.c, - src/dlmalloc.c, src/ia64/ffi.c, src/microblaze/ffi.c, - src/microblaze/sysv.S, src/powerpc/darwin_closure.S, - src/powerpc/ffi.c, src/powerpc/ffi_darwin.c, src/sh/ffi.c, - src/tile/tile.S, testsuite/libffi.call/nested_struct11.c: Fix - spelling errors. - -2013-10-08 Anthony Green - - * aclocal.m4, compile, config.guess, config.sub, depcomp, - install-sh, mdate-sh, missing, texinfo.tex: Update from upstream. - * configure.ac: Update version to 3.0.14-rc0. - * Makefile.in, configure, Makefile.in, include/Makefile.in, - man/Makefile.in, testsuite/Makefile.in: Rebuilt. - * README: Mention M88K and VAX. - -2013-07-15 Miod Vallat - - * Makefile.am, - configure.ac, - src/m88k/ffi.c, - src/m88k/ffitarget.h, - src/m88k/obsd.S, - src/vax/elfbsd.S, - src/vax/ffi.c, - src/vax/ffitarget.h: Add m88k and vax support. - -2013-06-24 Alan Modra - - * src/powerpc/ffi.c (ffi_prep_args_SYSV): Move var declaration - before statements. - (ffi_prep_args64): Support little-endian. - (ffi_closure_helper_SYSV, ffi_closure_helper_LINUX64): Likewise. - * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Likewise. - * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Likewise. - -2013-06-12 Mischa Jonker - - * configure.ac: Add support for ARC. - * Makefile.am: Likewise. - * README: Add ARC details. - * src/arc/arcompact.S: New. - * src/arc/ffi.c: Likewise. - * src/arc/ffitarget.h: Likewise. - -2013-03-28 David Schneider - - * src/arm/ffi.c: Fix support for ARM hard-float calling convention. - * src/arm/sysv.S: call different methods for SYSV and VFP ABIs. - * testsuite/libffi.call/cls_many_mixed_args.c: testcase for a closure with - mixed arguments, many doubles. - * testsuite/libffi.call/many_double.c: testcase for calling a function using - more than 8 doubles. - * testcase/libffi.call/many.c: use absolute value to check result against an - epsilon - -2013-03-17 Anthony Green - - * README: Update for 3.0.13. - * configure.ac: Ditto. - * configure: Rebuilt. - * doc/*: Update version. - -2013-03-17 Dave Korn - - * src/closures.c (is_emutramp_enabled - [!FFI_MMAP_EXEC_EMUTRAMP_PAX]): Move default definition outside - enclosing #if scope. - -2013-03-17 Anthony Green - - * configure.ac: Only modify toolexecdir in certain cases. - * configure: Rebuilt. - -2013-03-16 Gilles Talis - - * src/powerpc/ffi.c (ffi_prep_args_SYSV): Don't use - fparg_count,etc on __NO_FPRS__ targets. - -2013-03-16 Alan Hourihane - - * src/m68k/sysv.S (epilogue): Don't use extb instruction on - m680000 machines. - -2013-03-16 Alex Gaynor - - * src/x86/ffi.c (ffi_prep_cif_machdep): Always align stack. - -2013-03-13 Markos Chandras - - * configure.ac: Add support for Imagination Technologies Meta. - * Makefile.am: Likewise. - * README: Add Imagination Technologies Meta details. - * src/metag/ffi.c: New. - * src/metag/ffitarget.h: Likewise. - * src/metag/sysv.S: Likewise. - -2013-02-24 Andreas Schwab - - * doc/libffi.texi (Structures): Fix missing category argument of - @deftp. - -2013-02-11 Anthony Green - - * configure.ac: Update release number to 3.0.12. - * configure: Rebuilt. - * README: Update release info. - -2013-02-10 Anthony Green - - * README: Add Moxie. - * src/moxie/ffi.c: Created. - * src/moxie/eabi.S: Created. - * src/moxie/ffitarget.h: Created. - * Makefile.am (nodist_libffi_la_SOURCES): Add Moxie. - * Makefile.in: Rebuilt. - * configure.ac: Add Moxie. - * configure: Rebuilt. - * testsuite/libffi.call/huge_struct.c: Disable format string - warnings for moxie*-*-elf tests. - -2013-02-10 Anthony Green - - * Makefile.am (LTLDFLAGS): Fix reference. - * Makefile.in: Rebuilt. - -2013-02-10 Anthony Green - - * README: Update supported platforms. Update test results link. - -2013-02-09 Anthony Green - - * testsuite/libffi.call/negint.c: Remove forced -O2. - * testsuite/libffi.call/many2.c (foo): Remove GCCism. - * testsuite/libffi.call/ffitest.h: Add default PRIuPTR definition. - - * src/sparc/v8.S (ffi_closure_v8): Import ancient ulonglong - closure return type fix developed by Martin v. Löwis for cpython - fork. - -2013-02-08 Andreas Tobler - - * src/powerpc/ffi.c (ffi_prep_cif_machdep): Fix small struct - support. - * src/powerpc/sysv.S: Ditto. - -2013-02-08 Anthony Green - - * testsuite/libffi.call/cls_longdouble.c: Remove xfail for - arm*-*-*. - -2013-02-08 Anthony Green - - * src/sparc/ffi.c (ffi_prep_closure_loc): Fix cache flushing for GCC. - -2013-02-08 Matthias Klose - - * man/ffi_prep_cif.3: Clean up for debian linter. - -2013-02-08 Peter Bergner - - * src/powerpc/ffi.c (ffi_prep_args_SYSV): Account for FP args pushed - on the stack. - -2013-02-08 Anthony Green - - * Makefile.am (EXTRA_DIST): Add missing files. - * testsuite/Makefile.am (EXTRA_DIST): Ditto. - * Makefile.in: Rebuilt. - -2013-02-08 Anthony Green - - * configure.ac: Move sparc asm config checks to within functions - for compatibility with sun tools. - * configure: Rebuilt. - * src/sparc/ffi.c (ffi_prep_closure_loc): Flush cache on v9 - systems. - * src/sparc/v8.S (ffi_flush_icache): Implement a sparc v9 cache - flusher. - -2013-02-08 Nathan Rossi - - * src/microblaze/ffi.c (ffi_closure_call_SYSV): Fix handling of - small big-endian structures. - (ffi_prep_args): Ditto. - -2013-02-07 Anthony Green - - * src/sparc/v8.S (ffi_call_v8): Fix typo from last patch - (effectively hiding ffi_call_v8). - -2013-02-07 Anthony Green - - * configure.ac: Update bug reporting address. - * configure.in: Rebuild. - - * src/sparc/v8.S (ffi_flush_icache): Out-of-line cache flusher for - Sun compiler. - * src/sparc/ffi.c (ffi_call): Remove warning. - Call ffi_flush_icache for non-GCC builds. - (ffi_prep_closure_loc): Use ffi_flush_icache. - - * Makefile.am (EXTRA_DIST): Add libtool-ldflags. - * Makefile.in: Rebuilt. - * libtool-ldflags: New file. - -2013-02-07 Daniel Schepler - - * configure.ac: Correctly identify x32 systems as 64-bit. - * m4/libtool.m4: Remove libtool expr error. - * aclocal.m4, configure: Rebuilt. - -2013-02-07 Anthony Green - - * configure.ac: Fix GCC usage test. - * configure: Rebuilt. - * README: Mention LLVM/GCC x86_64 issue. - * testsuite/Makefile.in: Rebuilt. - -2013-02-07 Anthony Green - - * testsuite/libffi.call/cls_double_va.c (main): Replace // style - comments with /* */ for xlc compiler. - * testsuite/libffi.call/stret_large.c (main): Ditto. - * testsuite/libffi.call/stret_large2.c (main): Ditto. - * testsuite/libffi.call/nested_struct1.c (main): Ditto. - * testsuite/libffi.call/huge_struct.c (main): Ditto. - * testsuite/libffi.call/float_va.c (main): Ditto. - * testsuite/libffi.call/cls_struct_va1.c (main): Ditto. - * testsuite/libffi.call/cls_pointer_stack.c (main): Ditto. - * testsuite/libffi.call/cls_pointer.c (main): Ditto. - * testsuite/libffi.call/cls_longdouble_va.c (main): Ditto. - -2013-02-06 Anthony Green - - * man/ffi_prep_cif.3: Clean up for debian lintian checker. - -2013-02-06 Anthony Green - - * Makefile.am (pkgconfigdir): Add missing pkgconfig install bits. - * Makefile.in: Rebuild. - -2013-02-02 Mark H Weaver - - * src/x86/ffi64.c (ffi_call): Sign-extend integer arguments passed - via general purpose registers. - -2013-01-21 Nathan Rossi - - * README: Add MicroBlaze details. - * Makefile.am: Add MicroBlaze support. - * configure.ac: Likewise. - * src/microblaze/ffi.c: New. - * src/microblaze/ffitarget.h: Likewise. - * src/microblaze/sysv.S: Likewise. - -2013-01-21 Nathan Rossi - * testsuite/libffi.call/return_uc.c: Fixed issue. - -2013-01-21 Chris Zankel - - * README: Add Xtensa support. - * Makefile.am: Likewise. - * configure.ac: Likewise. - * Makefile.in Regenerate. - * configure: Likewise. - * src/prep_cif.c: Handle Xtensa. - * src/xtensa: New directory. - * src/xtensa/ffi.c: New file. - * src/xtensa/ffitarget.h: Ditto. - * src/xtensa/sysv.S: Ditto. - -2013-01-11 Anthony Green - - * src/powerpc/ffi_darwin.c (ffi_prep_args): Replace // style - comments with /* */ for xlc compiler. - * src/powerpc/aix.S (ffi_call_AIX): Ditto. - * testsuite/libffi.call/ffitest.h (allocate_mmap): Delete - deprecated inline function. - * testsuite/libffi.special/ffitestcxx.h: Ditto. - * README: Add update for AIX support. - -2013-01-11 Anthony Green - - * configure.ac: Robustify pc relative reloc check. - * m4/ax_cc_maxopt.m4: Don't -malign-double. This is an ABI - changing option for 32-bit x86. - * aclocal.m4, configure: Rebuilt. - * README: Update supported target list. - -2013-01-10 Anthony Green - - * README (tested): Add Compiler column to table. - -2013-01-10 Anthony Green - - * src/x86/ffi64.c (struct register_args): Make sse array and array - of unions for sunpro compiler compatibility. - -2013-01-10 Anthony Green - - * configure.ac: Test target platform size_t size. Handle both 32 - and 64-bit builds for x86_64-* and i?86-* targets (allowing for - CFLAG option to change default settings). - * configure, aclocal.m4: Rebuilt. - -2013-01-10 Anthony Green - - * testsuite/libffi.special/special.exp: Only run exception - handling tests when using GNU compiler. - - * m4/ax_compiler_vendor.m4: New file. - * configure.ac: Test for compiler vendor and don't use - AX_CFLAGS_WARN_ALL with the sun compiler. - * aclocal.m4, configure: Rebuilt. - -2013-01-10 Anthony Green - - * include/ffi_common.h: Don't use GCCisms to define types when - building with the SUNPRO compiler. - -2013-01-10 Anthony Green - - * configure.ac: Put local.exp in the right place. - * configure: Rebuilt. - - * src/x86/ffi.c: Update comment about regparm function attributes. - * src/x86/sysv.S (ffi_closure_SYSV): The SUNPRO compiler requires - that all function arguments be passed on the stack (no regparm - support). - -2013-01-08 Anthony Green - - * configure.ac: Generate local.exp. This sets CC_FOR_TARGET - when we are using the vendor compiler. - * testsuite/Makefile.am (EXTRA_DEJAGNU_SITE_CONFIG): Point to - ../local.exp. - * configure, testsuite/Makefile.in: Rebuilt. - - * testsuite/libffi.call/call.exp: Run tests with different - options, depending on whether or not we are using gcc or the - vendor compiler. - * testsuite/lib/libffi.exp (libffi-init): Set using_gcc based on - whether or not we are building/testing with gcc. - -2013-01-08 Anthony Green - - * configure.ac: Switch x86 solaris target to X86 by default. - * configure: Rebuilt. - -2013-01-08 Anthony Green - - * configure.ac: Fix test for read-only eh_frame. - * configure: Rebuilt. - -2013-01-08 Anthony Green - - * src/x86/sysv.S, src/x86/unix64.S: Only emit DWARF unwind info - when building with the GNU toolchain. - * testsuite/libffi.call/ffitest.h (CHECK): Fix for Solaris vendor - compiler. - -2013-01-07 Thorsten Glaser - - * testsuite/libffi.call/cls_uchar_va.c, - testsuite/libffi.call/cls_ushort_va.c, - testsuite/libffi.call/va_1.c: Testsuite fixes. - -2013-01-07 Thorsten Glaser - - * src/m68k/ffi.c (CIF_FLAGS_SINT8, CIF_FLAGS_SINT16): Define. - (ffi_prep_cif_machdep): Fix 8-bit and 16-bit signed calls. - * src/m68k/sysv.S (ffi_call_SYSV, ffi_closure_SYSV): Ditto. - -2013-01-04 Anthony Green - - * Makefile.am (AM_CFLAGS): Don't automatically add -fexceptions - and -Wall. This is set in the configure script after testing for - GCC. - * Makefile.in: Rebuilt. - -2013-01-02 rofl0r - - * src/powerpc/ffi.c (ffi_prep_cif_machdep): Fix build error on ppc - when long double == double. - -2013-01-02 Reini Urban - - * Makefile.am (libffi_la_LDFLAGS): Add -no-undefined to LDFLAGS - (required for shared libs on cygwin/mingw). - * Makefile.in: Rebuilt. - -2012-10-31 Alan Modra - - * src/powerpc/linux64_closure.S: Add new ABI support. - * src/powerpc/linux64.S: Likewise. - -2012-10-30 Magnus Granberg - Pavel Labushev - - * configure.ac: New options pax_emutramp - * configure, fficonfig.h.in: Regenerated - * src/closures.c: New function emutramp_enabled_check() and - checks. - -2012-10-30 Frederick Cheung - - * configure.ac: Enable FFI_MAP_EXEC_WRIT for Darwin 12 (mountain - lion) and future version. - * configure: Rebuild. - -2012-10-30 James Greenhalgh - Marcus Shawcroft - - * README: Add details of aarch64 port. - * src/aarch64/ffi.c: New. - * src/aarch64/ffitarget.h: Likewise. - * src/aarch64/sysv.S: Likewise. - * Makefile.am: Support aarch64. - * configure.ac: Support aarch64. - * Makefile.in, configure: Rebuilt. - -2012-10-30 James Greenhalgh - Marcus Shawcroft - - * testsuite/lib/libffi.exp: Add support for aarch64. - * testsuite/libffi.call/cls_struct_va1.c: New. - * testsuite/libffi.call/cls_uchar_va.c: Likewise. - * testsuite/libffi.call/cls_uint_va.c: Likewise. - * testsuite/libffi.call/cls_ulong_va.c: Likewise. - * testsuite/libffi.call/cls_ushort_va.c: Likewise. - * testsuite/libffi.call/nested_struct11.c: Likewise. - * testsuite/libffi.call/uninitialized.c: Likewise. - * testsuite/libffi.call/va_1.c: Likewise. - * testsuite/libffi.call/va_struct1.c: Likewise. - * testsuite/libffi.call/va_struct2.c: Likewise. - * testsuite/libffi.call/va_struct3.c: Likewise. - -2012-10-12 Walter Lee - - * Makefile.am: Add TILE-Gx/TILEPro support. - * configure.ac: Likewise. - * Makefile.in: Regenerate. - * configure: Likewise. - * src/prep_cif.c (ffi_prep_cif_core): Handle TILE-Gx/TILEPro. - * src/tile: New directory. - * src/tile/ffi.c: New file. - * src/tile/ffitarget.h: Ditto. - * src/tile/tile.S: Ditto. - -2012-10-12 Matthias Klose - - * generate-osx-source-and-headers.py: Normalize whitespace. - -2012-09-14 David Edelsohn - - * configure: Regenerated. - -2012-08-26 Andrew Pinski - - PR libffi/53014 - * src/mips/ffi.c (ffi_prep_closure_loc): Allow n32 with soft-float and n64 with - soft-float. - -2012-08-08 Uros Bizjak - - * src/s390/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test, - just return FFI_BAD_ABI when things are wrong. - -2012-07-18 H.J. Lu - - PR libffi/53982 - PR libffi/53973 - * src/x86/ffitarget.h: Check __ILP32__ instead of __LP64__ for x32. - (FFI_SIZEOF_JAVA_RAW): Defined to 4 for x32. - -2012-05-16 H.J. Lu - - * configure: Regenerated. - -2012-05-05 Nicolas Lelong - - * libffi.xcodeproj/project.pbxproj: Fixes. - * README: Update for iOS builds. - -2012-04-23 Alexandre Keunecke I. de Mendonca - - * configure.ac: Add Blackfin/sysv support - * Makefile.am: Add Blackfin/sysv support - * src/bfin/ffi.c: Add Blackfin/sysv support - * src/bfin/ffitarget.h: Add Blackfin/sysv support - -2012-04-11 Anthony Green - - * Makefile.am (EXTRA_DIST): Add new script. - * Makefile.in: Rebuilt. - -2012-04-11 Zachary Waldowski - - * generate-ios-source-and-headers.py, - libffi.xcodeproj/project.pbxproj: Support a Mac static library via - Xcode. Set iOS compatibility to 4.0. Move iOS trampoline - generation into an Xcode "run script" phase. Include both as - Xcode build scripts. Don't always regenerate config files. - -2012-04-10 Anthony Green - - * src/powerpc/ffi_darwin.c (ffi_prep_args): Add missing semicolon. - -2012-04-06 Anthony Green - - * Makefile.am (EXTRA_DIST): Add new iOS/xcode files. - * Makefile.in: Rebuilt. - -2012-04-06 Mike Lewis - - * generate-ios-source-and-headers.py: New file. - * libffi.xcodeproj/project.pbxproj: New file. - * README: Update instructions on building iOS binary. - * build-ios.sh: Delete. - -2012-04-06 Anthony Green - - * src/x86/ffi64.c (UINT128): Define differently for Intel and GNU - compilers, then use it. - -2012-04-06 H.J. Lu - - * m4/libtool.m4 (_LT_ENABLE_LOCK): Support x32. - -2012-04-06 Anthony Green - - * testsuite/Makefile.am (EXTRA_DIST): Add missing test cases. - * testsuite/Makefile.in: Rebuilt. - -2012-04-05 Zachary Waldowski - - * include/ffi.h.in: Add missing trampoline table fields. - * src/arm/sysv.S: Fix ENTRY definition, and wrap symbol references - in CNAME. - * src/x86/ffi.c: Wrap Windows specific code in ifdefs. - -2012-04-02 Peter Bergner - - * src/powerpc/ffi.c (ffi_prep_args_SYSV): Declare double_tmp. - Silence casting pointer to integer of different size warning. - Delete goto to previously deleted label. - (ffi_call): Silence possibly undefined warning. - (ffi_closure_helper_SYSV): Declare variable type. - -2012-04-02 Peter Rosin - - * src/x86/win32.S (ffi_call_win32): Sign/zero extend the return - value in the Intel version as is already done for the AT&T version. - (ffi_closure_SYSV): Likewise. - (ffi_closure_raw_SYSV): Likewise. - (ffi_closure_STDCALL): Likewise. - -2012-03-29 Peter Rosin - - * src/x86/win32.S (ffi_closure_raw_THISCALL): Unify the frame - generation, fix the ENDP label and remove the surplus third arg - from the 'lea' insn. - -2012-03-29 Peter Rosin - - * src/x86/win32.S (ffi_closure_raw_SYSV): Make the 'stubraw' label - visible outside the PROC, so that ffi_closure_raw_THISCALL can see - it. Also instruct the assembler to add a frame to the function. - -2012-03-23 Peter Rosin - - * Makefile.am (AM_CPPFLAGS): Add -DFFI_BUILDING. - * Makefile.in: Rebuilt. - * include/ffi.h.in [MSVC]: Add __declspec(dllimport) decorations - to all data exports, when compiling libffi clients using MSVC. - -2012-03-29 Peter Rosin - - * src/x86/ffitarget.h (ffi_abi): Add new ABI FFI_MS_CDECL and - make it the default for MSVC. - (FFI_TYPE_MS_STRUCT): New structure return convention. - * src/x86/ffi.c (ffi_prep_cif_machdep): Tweak the structure - return convention for FFI_MS_CDECL to be FFI_TYPE_MS_STRUCT - instead of an ordinary FFI_TYPE_STRUCT. - (ffi_prep_args): Treat FFI_TYPE_MS_STRUCT as FFI_TYPE_STRUCT. - (ffi_call): Likewise. - (ffi_prep_incoming_args_SYSV): Likewise. - (ffi_raw_call): Likewise. - (ffi_prep_closure_loc): Treat FFI_MS_CDECL as FFI_SYSV. - * src/x86/win32.S (ffi_closure_SYSV): For FFI_TYPE_MS_STRUCT, - return a pointer to the result structure in eax and don't pop - that pointer from the stack, the caller takes care of it. - (ffi_call_win32): Treat FFI_TYPE_MS_STRUCT as FFI_TYPE_STRUCT. - (ffi_closure_raw_SYSV): Likewise. - -2012-03-22 Peter Rosin - - * testsuite/libffi.call/closure_stdcall.c [MSVC]: Add inline - assembly version with Intel syntax. - * testsuite/libffi.call/closure_thiscall.c [MSVC]: Likewise. - -2012-03-23 Peter Rosin - - * testsuite/libffi.call/ffitest.h: Provide abstration of - __attribute__((fastcall)) in the form of a __FASTCALL__ - define. Define it to __fastcall for MSVC. - * testsuite/libffi.call/fastthis1_win32.c: Use the above. - * testsuite/libffi.call/fastthis2_win32.c: Likewise. - * testsuite/libffi.call/fastthis3_win32.c: Likewise. - * testsuite/libffi.call/strlen2_win32.c: Likewise. - * testsuite/libffi.call/struct1_win32.c: Likewise. - * testsuite/libffi.call/struct2_win32.c: Likewise. - -2012-03-22 Peter Rosin - - * src/x86/win32.S [MSVC] (ffi_closure_THISCALL): Remove the manual - frame on function entry, MASM adds one automatically. - -2012-03-22 Peter Rosin - - * testsuite/libffi.call/ffitest.h [MSVC]: Add kludge for missing - bits in the MSVC headers. - -2012-03-22 Peter Rosin - - * testsuite/libffi.call/cls_12byte.c: Adjust to the C89 style - with no declarations after statements. - * testsuite/libffi.call/cls_16byte.c: Likewise. - * testsuite/libffi.call/cls_18byte.c: Likewise. - * testsuite/libffi.call/cls_19byte.c: Likewise. - * testsuite/libffi.call/cls_1_1byte.c: Likewise. - * testsuite/libffi.call/cls_20byte.c: Likewise. - * testsuite/libffi.call/cls_20byte1.c: Likewise. - * testsuite/libffi.call/cls_24byte.c: Likewise. - * testsuite/libffi.call/cls_2byte.c: Likewise. - * testsuite/libffi.call/cls_3_1byte.c: Likewise. - * testsuite/libffi.call/cls_3byte1.c: Likewise. - * testsuite/libffi.call/cls_3byte2.c: Likewise. - * testsuite/libffi.call/cls_4_1byte.c: Likewise. - * testsuite/libffi.call/cls_4byte.c: Likewise. - * testsuite/libffi.call/cls_5_1_byte.c: Likewise. - * testsuite/libffi.call/cls_5byte.c: Likewise. - * testsuite/libffi.call/cls_64byte.c: Likewise. - * testsuite/libffi.call/cls_6_1_byte.c: Likewise. - * testsuite/libffi.call/cls_6byte.c: Likewise. - * testsuite/libffi.call/cls_7_1_byte.c: Likewise. - * testsuite/libffi.call/cls_7byte.c: Likewise. - * testsuite/libffi.call/cls_8byte.c: Likewise. - * testsuite/libffi.call/cls_9byte1.c: Likewise. - * testsuite/libffi.call/cls_9byte2.c: Likewise. - * testsuite/libffi.call/cls_align_double.c: Likewise. - * testsuite/libffi.call/cls_align_float.c: Likewise. - * testsuite/libffi.call/cls_align_longdouble.c: Likewise. - * testsuite/libffi.call/cls_align_longdouble_split.c: Likewise. - * testsuite/libffi.call/cls_align_longdouble_split2.c: Likewise. - * testsuite/libffi.call/cls_align_pointer.c: Likewise. - * testsuite/libffi.call/cls_align_sint16.c: Likewise. - * testsuite/libffi.call/cls_align_sint32.c: Likewise. - * testsuite/libffi.call/cls_align_sint64.c: Likewise. - * testsuite/libffi.call/cls_align_uint16.c: Likewise. - * testsuite/libffi.call/cls_align_uint32.c: Likewise. - * testsuite/libffi.call/cls_align_uint64.c: Likewise. - * testsuite/libffi.call/cls_dbls_struct.c: Likewise. - * testsuite/libffi.call/cls_pointer_stack.c: Likewise. - * testsuite/libffi.call/err_bad_typedef.c: Likewise. - * testsuite/libffi.call/huge_struct.c: Likewise. - * testsuite/libffi.call/nested_struct.c: Likewise. - * testsuite/libffi.call/nested_struct1.c: Likewise. - * testsuite/libffi.call/nested_struct10.c: Likewise. - * testsuite/libffi.call/nested_struct2.c: Likewise. - * testsuite/libffi.call/nested_struct3.c: Likewise. - * testsuite/libffi.call/nested_struct4.c: Likewise. - * testsuite/libffi.call/nested_struct5.c: Likewise. - * testsuite/libffi.call/nested_struct6.c: Likewise. - * testsuite/libffi.call/nested_struct7.c: Likewise. - * testsuite/libffi.call/nested_struct8.c: Likewise. - * testsuite/libffi.call/nested_struct9.c: Likewise. - * testsuite/libffi.call/stret_large.c: Likewise. - * testsuite/libffi.call/stret_large2.c: Likewise. - * testsuite/libffi.call/stret_medium.c: Likewise. - * testsuite/libffi.call/stret_medium2.c: Likewise. - * testsuite/libffi.call/struct1.c: Likewise. - * testsuite/libffi.call/struct1_win32.c: Likewise. - * testsuite/libffi.call/struct2.c: Likewise. - * testsuite/libffi.call/struct2_win32.c: Likewise. - * testsuite/libffi.call/struct3.c: Likewise. - * testsuite/libffi.call/struct4.c: Likewise. - * testsuite/libffi.call/struct5.c: Likewise. - * testsuite/libffi.call/struct6.c: Likewise. - * testsuite/libffi.call/struct7.c: Likewise. - * testsuite/libffi.call/struct8.c: Likewise. - * testsuite/libffi.call/struct9.c: Likewise. - * testsuite/libffi.call/testclosure.c: Likewise. - -2012-03-21 Peter Rosin - - * testsuite/libffi.call/float_va.c (float_va_fn): Use %f when - printing doubles (%lf is for long doubles). - (main): Likewise. - -2012-03-21 Peter Rosin - - * testsuite/lib/target-libpath.exp [*-*-cygwin*, *-*-mingw*] - (set_ld_library_path_env_vars): Add the library search dir to PATH - (and save PATH for later). - (restore_ld_library_path_env_vars): Restore PATH. - -2012-03-21 Peter Rosin - - * testsuite/lib/target-libpath.exp [*-*-cygwin*, *-*-mingw*] - (set_ld_library_path_env_vars): Add the library search dir to PATH - (and save PATH for later). - (restore_ld_library_path_env_vars): Restore PATH. - -2012-03-20 Peter Rosin - - * testsuite/libffi.call/strlen2_win32.c (main): Remove bug. - * src/x86/win32.S [MSVC] (ffi_closure_SYSV): Make the 'stub' label - visible outside the PROC, so that ffi_closure_THISCALL can see it. - -2012-03-20 Peter Rosin - - * testsuite/libffi.call/strlen2_win32.c (main): Remove bug. - * src/x86/win32.S [MSVC] (ffi_closure_SYSV): Make the 'stub' label - visible outside the PROC, so that ffi_closure_THISCALL can see it. - -2012-03-19 Alan Hourihane - - * src/m68k/ffi.c: Add MINT support. - * src/m68k/sysv.S: Ditto. - -2012-03-06 Chung-Lin Tang - - * src/arm/ffi.c (ffi_call): Add __ARM_EABI__ guard around call to - ffi_call_VFP(). - (ffi_prep_closure_loc): Add __ARM_EABI__ guard around use of - ffi_closure_VFP. - * src/arm/sysv.S: Add __ARM_EABI__ guard around VFP code. - -2012-03-19 chennam - - * src/powerpc/ffi_darwin.c (ffi_prep_closure_loc): Fix AIX closure - support. - -2012-03-13 Kaz Kojima - - * src/sh/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test, - just return FFI_BAD_ABI when things are wrong. - * src/sh64/ffi.c (ffi_prep_closure_loc): Ditto. - -2012-03-09 David Edelsohn - - * src/powerpc/aix_closure.S (ffi_closure_ASM): Adjust for Darwin64 - change to return value of ffi_closure_helper_DARWIN and load type - from return type. - -2012-03-03 H.J. Lu - - * src/x86/ffi64.c (ffi_call): Cast the return value to unsigned - long. - (ffi_prep_closure_loc): Cast to 64bit address in trampoline. - (ffi_closure_unix64_inner): Cast return pointer to unsigned long - first. - - * src/x86/ffitarget.h (FFI_SIZEOF_ARG): Defined to 8 for x32. - (ffi_arg): Set to unsigned long long for x32. - (ffi_sarg): Set to long long for x32. - -2012-03-03 H.J. Lu - - * src/prep_cif.c (ffi_prep_cif_core): Properly check bad ABI. - -2012-03-03 Andoni Morales Alastruey - - * configure.ac: Add -no-undefined for both 32- and 64-bit x86 - windows-like hosts. - * configure: Rebuilt. - -2012-02-27 Mikael Pettersson - - PR libffi/52223 - * Makefile.am (FLAGS_TO_PASS): Define. - * Makefile.in: Regenerate. - -2012-02-23 Anthony Green - - * src/*/ffitarget.h: Ensure that users never include ffitarget.h - directly. - -2012-02-23 Kai Tietz - - PR libffi/52221 - * src/x86/ffi.c (ffi_closure_raw_THISCALL): New - prototype. - (ffi_prep_raw_closure_loc): Use ffi_closure_raw_THISCALL for - thiscall-convention. - (ffi_raw_call): Use ffi_prep_args_raw. - * src/x86/win32.S (ffi_closure_raw_THISCALL): Add - implementation for stub. - -2012-02-10 Kai Tietz - - * configure.ac (AM_LTLDFLAGS): Add -no-undefine for x64 - windows target. - * configure: Regenerated. - -2012-02-08 Kai Tietz - - * src/prep_cif.c (ffi_prep_cif): Allow for X86_WIN32 - also FFI_THISCALL. - * src/x86/ffi.c (ffi_closure_THISCALL): Add prototype. - (FFI_INIT_TRAMPOLINE_THISCALL): New trampoline code. - (ffi_prep_closure_loc): Add FFI_THISCALL support. - * src/x86/ffitarget.h (FFI_TRAMPOLINE_SIZE): Adjust size. - * src/x86/win32.S (ffi_closure_THISCALL): New closure code - for thiscall-calling convention. - * testsuite/libffi.call/closure_thiscall.c: New test. - -2012-01-28 Kai Tietz - - * src/libffi/src/x86/ffi.c (ffi_call_win32): Add new - argument to prototype for specify calling-convention. - (ffi_call): Add support for stdcall/thiscall convention. - (ffi_prep_args): Likewise. - (ffi_raw_call): Likewise. - * src/x86/ffitarget.h (ffi_abi): Add FFI_THISCALL and - FFI_FASTCALL. - * src/x86/win32.S (_ffi_call_win32): Add support for - fastcall/thiscall calling-convention calls. - * testsuite/libffi.call/fastthis1_win32.c: New test. - * testsuite/libffi.call/fastthis2_win32.c: New test. - * testsuite/libffi.call/fastthis3_win32.c: New test. - * testsuite/libffi.call/strlen2_win32.c: New test. - * testsuite/libffi.call/many2_win32.c: New test. - * testsuite/libffi.call/struct1_win32.c: New test. - * testsuite/libffi.call/struct2_win32.c: New test. - -2012-01-23 Uros Bizjak - - * src/alpha/ffi.c (ffi_prep_closure_loc): Check for bad ABI. - -2012-01-23 Anthony Green - Chris Young - - * configure.ac: Add Amiga support. - * configure: Rebuilt. - -2012-01-23 Dmitry Nadezhin - - * include/ffi_common.h (LIKELY, UNLIKELY): Fix definitions. - -2012-01-23 Andreas Schwab - - * src/m68k/sysv.S (ffi_call_SYSV): Properly test for plain - mc68000. Test for __HAVE_68881__ in addition to __MC68881__. - -2012-01-19 Jakub Jelinek - - PR rtl-optimization/48496 - * src/ia64/ffi.c (ffi_call): Fix up aliasing violations. - -2012-01-09 Rainer Orth - - * configure.ac (i?86-*-*): Set TARGET to X86_64. - * configure: Regenerate. - -2011-12-07 Andrew Pinski - - PR libffi/50051 - * src/mips/n32.S: Add ".set mips4". - -2011-11-21 Andreas Tobler - - * configure: Regenerate. - -2011-11-12 David Gilbert - - * doc/libffi.texi, include/ffi.h.in, include/ffi_common.h, - man/Makefile.am, man/ffi.3, man/ffi_prep_cif.3, - man/ffi_prep_cif_var.3, src/arm/ffi.c, src/arm/ffitarget.h, - src/cris/ffi.c, src/prep_cif.c, - testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/float_va.c: Many changes to support variadic - function calls. - -2011-11-12 Kyle Moffett - - * src/powerpc/ffi.c, src/powerpc/ffitarget.h, - src/powerpc/ppc_closure.S, src/powerpc/sysv.S: Many changes for - softfloat powerpc variants. - -2011-11-12 Petr Salinger - - * configure.ac (FFI_EXEC_TRAMPOLINE_TABLE): Fix kfreebsd support. - * configure: Rebuilt. - -2011-11-12 Timothy Wall - - * src/arm/ffi.c (ffi_prep_args, ffi_prep_incoming_args_SYSV): Max - alignment of 4 for wince on ARM. - -2011-11-12 Kyle Moffett - Anthony Green - - * src/ppc/sysv.S, src/ppc/ffi.c: Remove use of ppc string - instructions (not available on some cores, like the PPC440). - -2011-11-12 Kimura Wataru - - * m4/ax_enable_builddir: Change from string comparison to numeric - comparison for wc output. - * configure.ac: Enable FFI_MMAP_EXEC_WRIT for darwin11 aka Mac OS - X 10.7. - * configure: Rebuilt. - -2011-11-12 Anthony Green - - * Makefile.am (AM_CCASFLAGS): Add -g option to build assembly - files with debug info. - * Makefile.in: Rebuilt. - -2011-11-12 Jasper Lievisse Adriaanse - - * README: Update list of supported OpenBSD systems. - -2011-11-12 Anthony Green - - * libtool-version: Update. - * Makefile.am (nodist_libffi_la_SOURCES): Add src/debug.c if - FFI_DEBUG. - (libffi_la_SOURCES): Remove src/debug.c - (EXTRA_DIST): Add src/debug.c - * Makefile.in: Rebuilt. - * README: Update for 3.0.11. - -2011-11-10 Richard Henderson - - * configure.ac (GCC_AS_CFI_PSEUDO_OP): Use it instead of inline check. - * configure, aclocal.m4: Rebuild. - -2011-09-04 Iain Sandoe - - PR libffi/49594 - * src/powerpc/darwin_closure.S (stubs): Make the stub binding - helper reference track the architecture pointer size. - -2011-08-25 Andrew Haley - - * src/arm/ffi.c (FFI_INIT_TRAMPOLINE): Remove hard-coded assembly - instructions. - * src/arm/sysv.S (ffi_arm_trampoline): Put them here instead. - -2011-07-11 Andrew Haley - - * src/arm/ffi.c (FFI_INIT_TRAMPOLINE): Clear icache. - -2011-06-29 Rainer Orth - - * testsuite/libffi.call/cls_double_va.c: Move PR number to comment. - * testsuite/libffi.call/cls_longdouble_va.c: Likewise. - -2011-06-29 Rainer Orth - - PR libffi/46660 - * testsuite/libffi.call/cls_double_va.c: xfail dg-output on - mips-sgi-irix6*. - * testsuite/libffi.call/cls_longdouble_va.c: Likewise. - -2011-06-14 Rainer Orth - - * testsuite/libffi.call/huge_struct.c (test_large_fn): Use PRIu8, - PRId8 instead of %hhu, %hhd. - * testsuite/libffi.call/ffitest.h [__alpha__ && __osf__] (PRId8, - PRIu8): Define. - [__sgi__] (PRId8, PRIu8): Define. - -2011-04-29 Rainer Orth - - * src/alpha/osf.S (UA_SI, FDE_ENCODING, FDE_ENCODE, FDE_ARANGE): - Define. - Use them to handle ELF vs. ECOFF differences. - [__osf__] (_GLOBAL__F_ffi_call_osf): Define. - -2011-03-30 Timothy Wall - - * src/powerpc/darwin.S: Fix unknown FDE encoding. - * src/powerpc/darwin_closure.S: ditto. - -2011-02-25 Anthony Green - - * src/powerpc/ffi.c (ffi_prep_closure_loc): Allow for more - 32-bit ABIs. - -2011-02-15 Anthony Green - - * m4/ax_cc_maxopt.m4: Don't -malign-double or use -ffast-math. - * configure: Rebuilt. - -2011-02-13 Ralf Wildenhues - - * configure: Regenerate. - -2011-02-13 Anthony Green - - * include/ffi_common.h (UNLIKELY, LIKELY): Define. - * src/x86/ffi64.c (UNLIKELY, LIKELY): Remove definition. - * src/prep_cif.c (UNLIKELY, LIKELY): Remove definition. - - * src/prep_cif.c (initialize_aggregate): Convert assertion into - FFI_BAD_TYPEDEF return. Initialize arg size and alignment to 0. - - * src/pa/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test, - just return FFI_BAD_ABI when things are wrong. - * src/arm/ffi.c (ffi_prep_closure_loc): Ditto. - * src/powerpc/ffi.c (ffi_prep_closure_loc): Ditto. - * src/mips/ffi.c (ffi_prep_closure_loc): Ditto. - * src/ia64/ffi.c (ffi_prep_closure_loc): Ditto. - * src/avr32/ffi.c (ffi_prep_closure_loc): Ditto. - -2011-02-11 Anthony Green - - * src/sparc/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test, - just return FFI_BAD_ABI when things are wrong. - -2012-02-11 Eric Botcazou - - * src/sparc/v9.S (STACKFRAME): Bump to 176. - -2011-02-09 Stuart Shelton - - http://bugs.gentoo.org/show_bug.cgi?id=286911 - * src/mips/ffitarget.h: Clean up error messages. - * src/java_raw_api.c (ffi_java_translate_args): Cast raw arg to - ffi_raw*. - * include/ffi.h.in: Add pragma for SGI compiler. - -2011-02-09 Anthony Green - - * configure.ac: Add powerpc64-*-darwin* support. - -2011-02-09 Anthony Green - - * README: Mention Interix. - -2011-02-09 Jonathan Callen - - * configure.ac: Add Interix to win32/cygwin/mingw case. - * configure: Ditto. - * src/closures.c: Treat Interix like Cygwin, instead of as a - generic win32. - -2011-02-09 Anthony Green - - * testsuite/libffi.call/err_bad_typedef.c: Remove xfail. - * testsuite/libffi.call/err_bad_abi.c: Remove xfail. - * src/x86/ffi64.c (UNLIKELY, LIKELY): Define. - (ffi_prep_closure_loc): Check for bad ABI. - * src/prep_cif.c (UNLIKELY, LIKELY): Define. - (initialize_aggregate): Check for bad types. - -2011-02-09 Landon Fuller - - * Makefile.am (EXTRA_DIST): Add build-ios.sh, src/arm/gentramp.sh, - src/arm/trampoline.S. - (nodist_libffi_la_SOURCES): Add src/arc/trampoline.S. - * configure.ac (FFI_EXEC_TRAMPOLINE_TABLE): Define. - * src/arm/ffi.c (ffi_trampoline_table) - (ffi_closure_trampoline_table_page, ffi_trampoline_table_entry) - (FFI_TRAMPOLINE_CODELOC_CONFIG, FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET) - (FFI_TRAMPOLINE_COUNT, ffi_trampoline_lock, ffi_trampoline_tables) - (ffi_trampoline_table_alloc, ffi_closure_alloc, ffi_closure_free): - Define for FFI_EXEC_TRAMPOLINE_TABLE case (iOS). - (ffi_prep_closure_loc): Handl FFI_EXEC_TRAMPOLINE_TABLE case - separately. - * src/arm/sysv.S: Handle Apple iOS host. - * src/closures.c: Handle FFI_EXEC_TRAMPOLINE_TABLE case. - * build-ios.sh: New file. - * fficonfig.h.in, configure, Makefile.in: Rebuilt. - * README: Mention ARM iOS. - -2011-02-08 Oren Held - - * src/dlmalloc.c (_STRUCT_MALLINFO): Define in order to avoid - redefinition of mallinfo on HP-UX. - -2011-02-08 Ginn Chen - - * src/sparc/ffi.c (ffi_call): Make compatible with Solaris Studio - aggregate return ABI. Flush cache. - (ffi_prep_closure_loc): Flush cache. - -2011-02-11 Anthony Green - - From Tom Honermann : - * src/powerpc/aix.S (ffi_call_AIX): Support for xlc toolchain on - AIX. Declare .ffi_prep_args. Insert nops after branch - instructions so that the AIX linker can insert TOC reload - instructions. - * src/powerpc/aix_closure.S: Declare .ffi_closure_helper_DARWIN. - -2011-02-08 Ed - - * src/powerpc/asm.h: Fix grammar nit in comment. - -2011-02-08 Uli Link - - * include/ffi.h.in (FFI_64_BIT_MAX): Define and use. - -2011-02-09 Rainer Orth - - PR libffi/46661 - * testsuite/libffi.call/cls_pointer.c (main): Cast void * to - uintptr_t first. - * testsuite/libffi.call/cls_pointer_stack.c (main): Likewise. - -2011-02-08 Rafael Avila de Espindola - - * configure.ac: Fix x86 test for pc related relocs. - * configure: Rebuilt. - -2011-02-07 Joel Sherrill - - * libffi/src/m68k/ffi.c: Add RTEMS support for cache flushing. - Handle case when CPU variant does not have long double support. - * libffi/src/m68k/sysv.S: Add support for mc68000, Coldfire, - and cores with soft floating point. - -2011-02-07 Joel Sherrill - - * configure.ac: Add mips*-*-rtems* support. - * configure: Regenerate. - * src/mips/ffitarget.h: Ensure needed constants are available - for targets which do not have sgidefs.h. - -2011-01-26 Dave Korn - - PR target/40125 - * configure.ac (AM_LTLDFLAGS): Add -bindir option for windows DLLs. - * configure: Regenerate. - -2010-12-18 Iain Sandoe - - PR libffi/29152 - PR libffi/42378 - * src/powerpc/darwin_closure.S: Provide Darwin64 implementation, - update comments. - * src/powerpc/ffitarget.h (POWERPC_DARWIN64): New, - (FFI_TRAMPOLINE_SIZE): Update for Darwin64. - * src/powerpc/darwin.S: Provide Darwin64 implementation, - update comments. - * src/powerpc/ffi_darwin.c: Likewise. - -2010-12-06 Rainer Orth - - * configure.ac (libffi_cv_as_ascii_pseudo_op): Use double - backslashes. - (libffi_cv_as_string_pseudo_op): Likewise. - * configure: Regenerate. - -2010-12-03 Chung-Lin Tang - - * src/arm/sysv.S (ffi_closure_SYSV): Add UNWIND to .pad directive. - (ffi_closure_VFP): Same. - (ffi_call_VFP): Move down to before ffi_closure_VFP. Add '.fpu vfp' - directive. - -2010-12-01 Rainer Orth - - * testsuite/libffi.call/ffitest.h [__sgi] (PRId64, PRIu64): Define. - (PRIuPTR): Define. - -2010-11-29 Richard Henderson - Rainer Orth - - * src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define. - (.eh_frame): Use FDE_ENCODING. - (.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE. - -2010-11-22 Jacek Caban - - * configure.ac: Check for symbol underscores on mingw-w64. - * configure: Rebuilt. - * src/x86/win64.S: Correctly access extern symbols in respect to - underscores. - -2010-11-15 Rainer Orth - - * testsuite/lib/libffi-dg.exp: Rename ... - * testsuite/lib/libffi.exp: ... to this. - * libffi/testsuite/libffi.call/call.exp: Don't load libffi-dg.exp. - * libffi/testsuite/libffi.special/special.exp: Likewise. - -2010-10-28 Chung-Lin Tang - - * src/arm/ffi.c (ffi_prep_args): Add VFP register argument handling - code, new parameter, and return value. Update comments. - (ffi_prep_cif_machdep): Add case for VFP struct return values. Add - call to layout_vfp_args(). - (ffi_call_SYSV): Update declaration. - (ffi_call_VFP): New declaration. - (ffi_call): Add VFP struct return conditions. Call ffi_call_VFP() - when ABI is FFI_VFP. - (ffi_closure_VFP): New declaration. - (ffi_closure_SYSV_inner): Add new vfp_args parameter, update call to - ffi_prep_incoming_args_SYSV(). - (ffi_prep_incoming_args_SYSV): Update parameters. Add VFP argument - case handling. - (ffi_prep_closure_loc): Pass ffi_closure_VFP to trampoline - construction under VFP hard-float. - (rec_vfp_type_p): New function. - (vfp_type_p): Same. - (place_vfp_arg): Same. - (layout_vfp_args): Same. - * src/arm/ffitarget.h (ffi_abi): Add FFI_VFP. Define FFI_DEFAULT_ABI - based on __ARM_PCS_VFP. - (FFI_EXTRA_CIF_FIELDS): Define for adding VFP hard-float specific - fields. - (FFI_TYPE_STRUCT_VFP_FLOAT): Define internally used type code. - (FFI_TYPE_STRUCT_VFP_DOUBLE): Same. - * src/arm/sysv.S (ffi_call_SYSV): Change call of ffi_prep_args() to - direct call. Move function pointer load upwards. - (ffi_call_VFP): New function. - (ffi_closure_VFP): Same. - - * testsuite/lib/libffi-dg.exp (check-flags): New function. - (dg-skip-if): New function. - * testsuite/libffi.call/cls_double_va.c: Skip if target is arm*-*-* - and compiler options include -mfloat-abi=hard. - * testsuite/libffi.call/cls_longdouble_va.c: Same. - -2010-10-01 Jakub Jelinek - - PR libffi/45677 - * src/x86/ffi64.c (ffi_prep_cif_machdep): Ensure cif->bytes is - a multiple of 8. - * testsuite/libffi.call/many2.c: New test. - -2010-08-20 Mark Wielaard - - * src/closures.c (open_temp_exec_file_mnt): Check if getmntent_r - returns NULL. - -2010-08-09 Andreas Tobler - - * configure.ac: Add target powerpc64-*-freebsd*. - * configure: Regenerate. - * testsuite/libffi.call/cls_align_longdouble_split.c: Pass - -mlong-double-128 only to linux targets. - * testsuite/libffi.call/cls_align_longdouble_split2.c: Likewise. - * testsuite/libffi.call/cls_longdouble.c: Likewise. - * testsuite/libffi.call/huge_struct.c: Likewise. - -2010-08-05 Dan Witte - - * Makefile.am: Pass FFI_DEBUG define to msvcc.sh for linking to the - debug CRT when --enable-debug is given. - * configure.ac: Define it. - * msvcc.sh: Translate -g and -DFFI_DEBUG appropriately. - -2010-08-04 Dan Witte - - * src/x86/ffitarget.h: Add X86_ANY define for all x86/x86_64 - platforms. - * src/x86/ffi.c: Remove redundant ifdef checks. - * src/prep_cif.c: Push stack space computation into src/x86/ffi.c - for X86_ANY so return value space doesn't get added twice. - -2010-08-03 Neil Rashbrooke - - * msvcc.sh: Don't pass -safeseh to ml64 because behavior is buggy. - -2010-07-22 Dan Witte - - * src/*/ffitarget.h: Make FFI_LAST_ABI one past the last valid ABI. - * src/prep_cif.c: Fix ABI assertion. - * src/cris/ffi.c: Ditto. - -2010-07-10 Evan Phoenix - - * src/closures.c (selinux_enabled_check): Fix strncmp usage bug. - -2010-07-07 Dan Horák - - * include/ffi.h.in: Protect #define with #ifndef. - * src/powerpc/ffitarget.h: Ditto. - * src/s390/ffitarget.h: Ditto. - * src/sparc/ffitarget.h: Ditto. - -2010-07-07 Neil Roberts - - * src/x86/sysv.S (ffi_call_SYSV): Align the stack pointer to - 16-bytes. - -2010-07-02 Jakub Jelinek - - * Makefile.am (AM_MAKEFLAGS): Pass also mandir to submakes. - * Makefile.in: Regenerated. - -2010-05-19 Rainer Orth - - * configure.ac (libffi_cv_as_x86_pcrel): Check for illegal in as - output, too. - (libffi_cv_as_ascii_pseudo_op): Check for .ascii. - (libffi_cv_as_string_pseudo_op): Check for .string. - * configure: Regenerate. - * fficonfig.h.in: Regenerate. - * src/x86/sysv.S (.eh_frame): Use .ascii, .string or error. - -2010-05-11 Dan Witte - - * doc/libffi.tex: Document previous change. - -2010-05-11 Makoto Kato - - * src/x86/ffi.c (ffi_call): Don't copy structs passed by value. - -2010-05-05 Michael Kohler - - * src/dlmalloc.c (dlfree): Fix spelling. - * src/ia64/ffi.c (ffi_prep_cif_machdep): Ditto. - * configure.ac: Ditto. - * configure: Rebuilt. - -2010-04-13 Dan Witte - - * msvcc.sh: Build with -W3 instead of -Wall. - * src/powerpc/ffi_darwin.c: Remove build warnings. - * src/x86/ffi.c: Ditto. - * src/x86/ffitarget.h: Ditto. - -2010-04-12 Dan Witte - Walter Meinl - - * configure.ac: Add OS/2 support. - * configure: Rebuilt. - * src/closures.c: Ditto. - * src/dlmalloc.c: Ditto. - * src/x86/win32.S: Ditto. - -2010-04-07 Jakub Jelinek - - * testsuite/libffi.call/err_bad_abi.c: Remove unused args variable. - -2010-04-02 Ralf Wildenhues - - * Makefile.in: Regenerate. - * aclocal.m4: Regenerate. - * include/Makefile.in: Regenerate. - * man/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2010-03-30 Dan Witte - - * msvcc.sh: Disable build warnings. - * README (tested): Clarify windows build procedure. - -2010-03-15 Rainer Orth - - * configure.ac (libffi_cv_as_x86_64_unwind_section_type): New test. - * configure: Regenerate. - * fficonfig.h.in: Regenerate. - * libffi/src/x86/unix64.S (.eh_frame) - [HAVE_AS_X86_64_UNWIND_SECTION_TYPE]: Use @unwind section type. - -2010-03-14 Matthias Klose - - * src/x86/ffi64.c: Fix typo in comment. - * src/x86/ffi.c: Use /* ... */ comment style. - -2010-02-24 Rainer Orth - - * doc/libffi.texi (The Closure API): Fix typo. - * doc/libffi.info: Remove. - -2010-02-15 Matthias Klose - - * src/arm/sysv.S (__ARM_ARCH__): Define for processor - __ARM_ARCH_7EM__. - -2010-01-15 Anthony Green - - * README: Add notes on building with Microsoft Visual C++. - -2010-01-15 Daniel Witte - - * msvcc.sh: New file. - - * src/x86/win32.S: Port assembly routines to MSVC and #ifdef. - * src/x86/ffi.c: Tweak function declaration and remove excess - parens. - * include/ffi.h.in: Add __declspec(align(8)) to typedef struct - ffi_closure. - - * src/x86/ffi.c: Merge ffi_call_SYSV and ffi_call_STDCALL into new - function ffi_call_win32 on X86_WIN32. - * src/x86/win32.S (ffi_call_SYSV): Rename to ffi_call_win32. - (ffi_call_STDCALL): Remove. - - * src/prep_cif.c (ffi_prep_cif): Move stack space allocation code - to ffi_prep_cif_machdep for x86. - * src/x86/ffi.c (ffi_prep_cif_machdep): To here. - -2010-01-15 Oliver Kiddle - - * src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for - Sun Studio compiler compatibility. - -2010-01-12 Conrad Irwin - - * doc/libffi.texi: Add closure example. - -2010-01-07 Rainer Orth - - PR libffi/40701 - * testsuite/libffi.call/ffitest.h [__alpha__ && __osf__] (PRIdLL, - PRIuLL, PRId64, PRIu64, PRIuPTR): Define. - * testsuite/libffi.call/cls_align_sint64.c: Add -Wno-format on - alpha*-dec-osf*. - * testsuite/libffi.call/cls_align_uint64.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/return_ll1.c: Likewise. - * testsuite/libffi.call/stret_medium2.c: Likewise. - * testsuite/libffi.special/ffitestcxx.h (allocate_mmap): Cast - MAP_FAILED to char *. - -2010-01-06 Rainer Orth - - * src/mips/n32.S: Use .abicalls and .eh_frame with __GNUC__. - -2009-12-31 Anthony Green - - * README: Update for libffi 3.0.9. - -2009-12-27 Matthias Klose - - * configure.ac (HAVE_LONG_DOUBLE): Define for mips when - appropriate. - * configure: Rebuilt. - -2009-12-26 Anthony Green - - * testsuite/libffi.call/cls_longdouble_va.c: Mark as xfail for - avr32*-*-*. - * testsuite/libffi.call/cls_double_va.c: Ditto. - -2009-12-26 Andreas Tobler - - * testsuite/libffi.call/ffitest.h: Conditionally include stdint.h - and inttypes.h. - * testsuite/libffi.special/unwindtest.cc: Ditto. - -2009-12-26 Andreas Tobler - - * configure.ac: Add amd64-*-openbsd*. - * configure: Rebuilt. - * testsuite/lib/libffi-dg.exp (libffi_target_compile): Link - openbsd programs with -lpthread. - -2009-12-26 Anthony Green - - * testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c: Remove xfail for - mips*-*-* and arm*-*-*. - * testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c, - testsuite/libffi.call/stret_medium2.c, - testsuite/libffi.call/stret_medium.c, - testsuite/libffi.call/stret_large.c, - testsuite/libffi.call/stret_large2.c: Remove xfail for arm*-*-*. - -2009-12-31 Kay Tietz - - * testsuite/libffi.call/ffitest.h, - testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRuLL): Fix - definitions. - -2009-12-31 Carlo Bramini - - * configure.ac (AM_LTLDFLAGS): Define for windows hosts. - * Makefile.am (libffi_la_LDFLAGS): Add AM_LTLDFLAGS. - * configure: Rebuilt. - * Makefile.in: Rebuilt. - -2009-12-31 Anthony Green - Blake Chaffin. - - * testsuite/libffi.call/huge_struct.c: New test case from Blake - Chaffin @ Apple. - -2009-12-28 David Edelsohn - - * src/powerpc/ffi_darwin.c (ffi_prep_args): Copy abi and nargs to - local variables. - (aix_adjust_aggregate_sizes): New function. - (ffi_prep_cif_machdep): Call it. - -2009-12-26 Andreas Tobler - - * configure.ac: Define FFI_MMAP_EXEC_WRIT for the given targets. - * configure: Regenerate. - * fficonfig.h.in: Likewise. - * src/closures.c: Remove the FFI_MMAP_EXEC_WRIT definition for - Solaris/x86. - -2009-12-26 Andreas Schwab - - * src/powerpc/ffi.c (ffi_prep_args_SYSV): Advance intarg_count - when a float arguments is passed in memory. - (ffi_closure_helper_SYSV): Mark general registers as used up when - a 64bit or soft-float long double argument is passed in memory. - -2009-12-25 Matthias Klose - - * man/ffi_call.3: Fix #include in examples. - * doc/libffi.texi: Add dircategory. - -2009-12-25 Frank Everdij - - * include/ffi.h.in: Placed '__GNUC__' ifdef around - '__attribute__((aligned(8)))' in ffi_closure, fixes compile for - IRIX MIPSPro c99. - * include/ffi_common.h: Added '__sgi' define to non - '__attribute__((__mode__()))' integer typedefs. - * src/mips/ffi.c (ffi_call, ffi_closure_mips_inner_O32, - ffi_closure_mips_inner_N32): Added 'defined(_MIPSEB)' to BE check. - (ffi_closure_mips_inner_O32, ffi_closure_mips_inner_N32): Added - FFI_LONGDOUBLE support and alignment(N32 only). - * src/mips/ffitarget.h: Corrected '#include ' for IRIX and - fixed non '__attribute__((__mode__()))' integer typedefs. - * src/mips/n32.S: Put '#ifdef linux' around '.abicalls' and '.eh_frame' - since they are Linux/GNU Assembler specific. - -2009-12-25 Bradley Smith - - * configure.ac, Makefile.am, src/avr32/ffi.c, - src/avr32/ffitarget.h, - src/avr32/sysv.S: Add AVR32 port. - * configure, Makefile.in: Rebuilt. - -2009-12-21 Andreas Tobler - - * configure.ac: Make i?86 build on FreeBSD and OpenBSD. - * configure: Regenerate. - -2009-12-15 John David Anglin - - * testsuite/libffi.call/ffitest.h: Define PRIuPTR on PA HP-UX. - -2009-12-13 John David Anglin - - * src/pa/ffi.c (ffi_closure_inner_pa32): Handle FFI_TYPE_LONGDOUBLE - type on HP-UX. - -2012-02-13 Kai Tietz - - PR libffi/52221 - * src/x86/ffi.c (ffi_prep_raw_closure_loc): Add thiscall - support for X86_WIN32. - (FFI_INIT_TRAMPOLINE_THISCALL): Fix displacement. - -2009-12-11 Eric Botcazou - - * src/sparc/ffi.c (ffi_closure_sparc_inner_v9): Properly align 'long - double' arguments. - -2009-12-11 Eric Botcazou - - * testsuite/libffi.call/ffitest.h: Define PRIuPTR on Solaris < 10. - -2009-12-10 Rainer Orth - - PR libffi/40700 - * src/closures.c [X86_64 && __sun__ && __svr4__] - (FFI_MMAP_EXEC_WRIT): Define. - -2009-12-08 David Daney - - * testsuite/libffi.call/stret_medium.c: Remove xfail for mips*-*-* - * testsuite/libffi.call/cls_align_longdouble_split2.c: Same. - * testsuite/libffi.call/stret_large.c: Same. - * testsuite/libffi.call/cls_align_longdouble_split.c: Same. - * testsuite/libffi.call/stret_large2.c: Same. - * testsuite/libffi.call/stret_medium2.c: Same. - -2009-12-07 David Edelsohn - - * src/powerpc/aix_closure.S (libffi_closure_ASM): Fix tablejump - typo. - -2009-12-05 David Edelsohn - - * src/powerpc/aix.S: Update AIX32 code to be consistent with AIX64 - code. - * src/powerpc/aix_closure.S: Same. - -2009-12-05 Ralf Wildenhues - - * Makefile.in: Regenerate. - * configure: Regenerate. - * include/Makefile.in: Regenerate. - * man/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2009-12-04 David Edelsohn - - * src/powerpc/aix_closure.S: Reorganize 64-bit code to match - linux64_closure.S. - -2009-12-04 Uros Bizjak - - PR libffi/41908 - * src/x86/ffi64.c (classify_argument): Update from - gcc/config/i386/i386.c. - (ffi_closure_unix64_inner): Do not use the address of two consecutive - SSE registers directly. - * testsuite/libffi.call/cls_dbls_struct.c (main): Remove xfail - for x86_64 linux targets. - -2009-12-04 David Edelsohn - - * src/powerpc/ffi_darwin.c (ffi_closure_helper_DARWIN): Increment - pfr for long double split between fpr13 and stack. - -2009-12-03 David Edelsohn - - * src/powerpc/ffi_darwin.c (ffi_prep_args): Increment next_arg and - fparg_count twice for long double. - -2009-12-03 David Edelsohn - - PR libffi/42243 - * src/powerpc/ffi_darwin.c (ffi_prep_args): Remove extra parentheses. - -2009-12-03 Uros Bizjak - - * testsuite/libffi.call/cls_longdouble_va.c (main): Fix format string. - Remove xfails for x86 linux targets. - -2009-12-02 David Edelsohn - - * src/powerpc/ffi_darwin.c (ffi_prep_args): Fix typo in INT64 - case. - -2009-12-01 David Edelsohn - - * src/powerpc/aix.S (ffi_call_AIX): Convert to more standard - register usage. Call ffi_prep_args directly. Add long double - return value support. - * src/powerpc/ffi_darwin.c (ffi_prep_args): Double arg increment - applies to FFI_TYPE_DOUBLE. Correct fpr_base increment typo. - Separate FFI_TYPE_SINT32 and FFI_TYPE_UINT32 cases. - (ffi_prep_cif_machdep): Only 16 byte stack alignment in 64 bit - mode. - (ffi_closure_helper_DARWIN): Remove nf and ng counters. Move temp - into case. - * src/powerpc/aix_closure.S: Maintain 16 byte stack alignment. - Allocate result area between params and FPRs. - -2009-11-30 David Edelsohn - - PR target/35484 - * src/powerpc/ffitarget.h (POWERPC64): Define for PPC64 Linux and - AIX64. - * src/powerpc/aix.S: Implement AIX64 version. - * src/powerpc/aix_closure.S: Implement AIX64 version. - (ffi_closure_ASM): Use extsb, lha and displament addresses. - * src/powerpc/ffi_darwin.c (ffi_prep_args): Implement AIX64 - support. - (ffi_prep_cif_machdep): Same. - (ffi_call): Same. - (ffi_closure_helper_DARWIN): Same. - -2009-11-02 Andreas Tobler - - PR libffi/41908 - * testsuite/libffi.call/testclosure.c: New test. - -2009-09-28 Kai Tietz - - * src/x86/win64.S (_ffi_call_win64 stack): Remove for gnu - assembly version use of ___chkstk. - -2009-09-23 Matthias Klose - - PR libffi/40242, PR libffi/41443 - * src/arm/sysv.S (__ARM_ARCH__): Define for processors - __ARM_ARCH_6T2__, __ARM_ARCH_6M__, __ARM_ARCH_7__, - __ARM_ARCH_7A__, __ARM_ARCH_7R__, __ARM_ARCH_7M__. - Change the conditionals to __SOFTFP__ || __ARM_EABI__ - for -mfloat-abi=softfp to work. - -2009-09-17 Loren J. Rittle - - PR testsuite/32843 (strikes again) - * src/x86/ffi.c (ffi_prep_cif_machdep): Add X86_FREEBSD to - enable proper extension on char and short. - -2009-09-15 David Daney - - * src/java_raw_api.c (ffi_java_raw_to_rvalue): Remove special - handling for FFI_TYPE_POINTER. - * src/mips/ffitarget.h (FFI_TYPE_STRUCT_D_SOFT, - FFI_TYPE_STRUCT_F_SOFT, FFI_TYPE_STRUCT_DD_SOFT, - FFI_TYPE_STRUCT_FF_SOFT, FFI_TYPE_STRUCT_FD_SOFT, - FFI_TYPE_STRUCT_DF_SOFT, FFI_TYPE_STRUCT_SOFT): New defines. - (FFI_N32_SOFT_FLOAT, FFI_N64_SOFT_FLOAT): New ffi_abi enumerations. - (enum ffi_abi): Set FFI_DEFAULT_ABI for soft-float. - * src/mips/n32.S (ffi_call_N32): Add handling for soft-float - structure and pointer returns. - (ffi_closure_N32): Add handling for pointer returns. - * src/mips/ffi.c (ffi_prep_args, calc_n32_struct_flags, - calc_n32_return_struct_flags): Handle soft-float. - (ffi_prep_cif_machdep): Handle soft-float, fix pointer handling. - (ffi_call_N32): Declare proper argument types. - (ffi_call, copy_struct_N32, ffi_closure_mips_inner_N32): Handle - soft-float. - -2009-08-24 Ralf Wildenhues - - * configure.ac (AC_PREREQ): Bump to 2.64. - -2009-08-22 Ralf Wildenhues - - * Makefile.am (install-html, install-pdf): Remove. - * Makefile.in: Regenerate. - - * Makefile.in: Regenerate. - * aclocal.m4: Regenerate. - * configure: Regenerate. - * fficonfig.h.in: Regenerate. - * include/Makefile.in: Regenerate. - * man/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2011-08-22 Jasper Lievisse Adriaanse - - * configure.ac: Add OpenBSD/hppa and OpenBSD/powerpc support. - * configure: Rebuilt. - -2009-07-30 Ralf Wildenhues - - * configure.ac (_AC_ARG_VAR_PRECIOUS): Use m4_rename_force. - -2009-07-24 Dave Korn - - PR libffi/40807 - * src/x86/ffi.c (ffi_prep_cif_machdep): Also use sign/zero-extending - return types for X86_WIN32. - * src/x86/win32.S (_ffi_call_SYSV): Handle omitted return types. - (_ffi_call_STDCALL, _ffi_closure_SYSV, _ffi_closure_raw_SYSV, - _ffi_closure_STDCALL): Likewise. - - * src/closures.c (is_selinux_enabled): Define to const 0 for Cygwin. - (dlmmap, dlmunmap): Also use these functions on Cygwin. - -2009-07-11 Richard Sandiford - - PR testsuite/40699 - PR testsuite/40707 - PR testsuite/40709 - * testsuite/lib/libffi-dg.exp: Revert 2009-07-02, 2009-07-01 and - 2009-06-30 commits. - -2009-07-01 Richard Sandiford - - * testsuite/lib/libffi-dg.exp (libffi-init): Set ld_library_path - to "" before adding paths. (This reinstates an assignment that - was removed by my 2009-06-30 commit, but changes the initial - value from "." to "".) - -2009-07-01 H.J. Lu - - PR testsuite/40601 - * testsuite/lib/libffi-dg.exp (libffi-init): Properly set - gccdir. Adjust ld_library_path for gcc only if gccdir isn't - empty. - -2009-06-30 Richard Sandiford - - * testsuite/lib/libffi-dg.exp (libffi-init): Don't add "." - to ld_library_path. Use add_path. Add just find_libgcc_s - to ld_library_path, not every libgcc multilib directory. - -2009-06-16 Wim Lewis - - * src/powerpc/ffi.c: Avoid clobbering cr3 and cr4, which are - supposed to be callee-saved. - * src/powerpc/sysv.S (small_struct_return_value): Fix overrun of - return buffer for odd-size structs. - -2009-06-16 Andreas Tobler - - PR libffi/40444 - * testsuite/lib/libffi-dg.exp (libffi_target_compile): Add - allow_stack_execute for Darwin. - -2009-06-16 Andrew Haley - - * configure.ac (TARGETDIR): Add missing blank lines. - * configure: Regenerate. - -2009-06-16 Andrew Haley - - * testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_medium2.c: Fix printf format - specifiers. - * testsuite/libffi.call/ffitest.h, - testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRIuLL): Define. - -2009-06-15 Andrew Haley - - * testsuite/libffi.call/err_bad_typedef.c: xfail everywhere. - * testsuite/libffi.call/err_bad_abi.c: Likewise. - -2009-06-12 Andrew Haley - - * Makefile.am: Remove info_TEXINFOS. - -2009-06-12 Andrew Haley - - * ChangeLog.libffi: testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_medium2.c: Fix printf format - specifiers. - testsuite/libffi.special/unwindtest.cc: include stdint.h. - -2009-06-11 Timothy Wall - - * Makefile.am, - configure.ac, - include/ffi.h.in, - include/ffi_common.h, - src/closures.c, - src/dlmalloc.c, - src/x86/ffi.c, - src/x86/ffitarget.h, - src/x86/win64.S (new), - README: Added win64 support (mingw or MSVC) - * Makefile.in, - include/Makefile.in, - man/Makefile.in, - testsuite/Makefile.in, - configure, - aclocal.m4: Regenerated - * ltcf-c.sh: properly escape cygwin/w32 path - * man/ffi_call.3: Clarify size requirements for return value. - * src/x86/ffi64.c: Fix filename in comment. - * src/x86/win32.S: Remove unused extern. - - * testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/closure_stdcall.c, - testsuite/libffi.call/cls_12byte.c, - testsuite/libffi.call/cls_16byte.c, - testsuite/libffi.call/cls_18byte.c, - testsuite/libffi.call/cls_19byte.c, - testsuite/libffi.call/cls_1_1byte.c, - testsuite/libffi.call/cls_20byte.c, - testsuite/libffi.call/cls_20byte1.c, - testsuite/libffi.call/cls_24byte.c, - testsuite/libffi.call/cls_2byte.c, - testsuite/libffi.call/cls_3_1byte.c, - testsuite/libffi.call/cls_3byte1.c, - testsuite/libffi.call/cls_3byte2.c, - testsuite/libffi.call/cls_4_1byte.c, - testsuite/libffi.call/cls_4byte.c, - testsuite/libffi.call/cls_5_1_byte.c, - testsuite/libffi.call/cls_5byte.c, - testsuite/libffi.call/cls_64byte.c, - testsuite/libffi.call/cls_6_1_byte.c, - testsuite/libffi.call/cls_6byte.c, - testsuite/libffi.call/cls_7_1_byte.c, - testsuite/libffi.call/cls_7byte.c, - testsuite/libffi.call/cls_8byte.c, - testsuite/libffi.call/cls_9byte1.c, - testsuite/libffi.call/cls_9byte2.c, - testsuite/libffi.call/cls_align_double.c, - testsuite/libffi.call/cls_align_float.c, - testsuite/libffi.call/cls_align_longdouble.c, - testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_align_sint16.c, - testsuite/libffi.call/cls_align_sint32.c, - testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint16.c, - testsuite/libffi.call/cls_align_uint32.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_dbls_struct.c, - testsuite/libffi.call/cls_double.c, - testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_float.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_multi_schar.c, - testsuite/libffi.call/cls_multi_sshort.c, - testsuite/libffi.call/cls_multi_sshortchar.c, - testsuite/libffi.call/cls_multi_uchar.c, - testsuite/libffi.call/cls_multi_ushort.c, - testsuite/libffi.call/cls_multi_ushortchar.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c, - testsuite/libffi.call/cls_schar.c, - testsuite/libffi.call/cls_sint.c, - testsuite/libffi.call/cls_sshort.c, - testsuite/libffi.call/cls_uchar.c, - testsuite/libffi.call/cls_uint.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/cls_ushort.c, - testsuite/libffi.call/err_bad_abi.c, - testsuite/libffi.call/err_bad_typedef.c, - testsuite/libffi.call/float2.c, - testsuite/libffi.call/huge_struct.c, - testsuite/libffi.call/nested_struct.c, - testsuite/libffi.call/nested_struct1.c, - testsuite/libffi.call/nested_struct10.c, - testsuite/libffi.call/nested_struct2.c, - testsuite/libffi.call/nested_struct3.c, - testsuite/libffi.call/nested_struct4.c, - testsuite/libffi.call/nested_struct5.c, - testsuite/libffi.call/nested_struct6.c, - testsuite/libffi.call/nested_struct7.c, - testsuite/libffi.call/nested_struct8.c, - testsuite/libffi.call/nested_struct9.c, - testsuite/libffi.call/problem1.c, - testsuite/libffi.call/return_ldl.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_large.c, - testsuite/libffi.call/stret_large2.c, - testsuite/libffi.call/stret_medium.c, - testsuite/libffi.call/stret_medium2.c, - testsuite/libffi.special/unwindtest.cc: use ffi_closure_alloc instead - of checking for MMAP. Use intptr_t instead of long casts. - -2009-06-11 Kaz Kojima - - * testsuite/libffi.call/cls_longdouble_va.c: Add xfail sh*-*-linux-*. - * testsuite/libffi.call/err_bad_abi.c: Add xfail sh*-*-*. - * testsuite/libffi.call/err_bad_typedef.c: Likewise. - -2009-06-09 Andrew Haley - - * src/x86/freebsd.S: Add missing file. - -2009-06-08 Andrew Haley - - Import from libffi 3.0.8: - - * doc/libffi.texi: New file. - * doc/libffi.info: Likewise. - * doc/stamp-vti: Likewise. - * man/Makefile.am: New file. - * man/ffi_call.3: New file. - - * Makefile.am (EXTRA_DIST): Add src/x86/darwin64.S, - src/dlmalloc.c. - (nodist_libffi_la_SOURCES): Add X86_FREEBSD. - - * configure.ac: Bump version to 3.0.8. - parisc*-*-linux*: Add. - i386-*-freebsd* | i386-*-openbsd*: Add. - powerpc-*-beos*: Add. - AM_CONDITIONAL X86_FREEBSD: Add. - AC_CONFIG_FILES: Add man/Makefile. - - * include/ffi.h.in (FFI_FN): Change void (*)() to void (*)(void). - -2009-06-08 Andrew Haley - - * README: Import from libffi 3.0.8. - -2009-06-08 Andrew Haley - - * testsuite/libffi.call/err_bad_abi.c: Add xfails. - * testsuite/libffi.call/cls_longdouble_va.c: Add xfails. - * testsuite/libffi.call/cls_dbls_struct.c: Add xfail x86_64-*-linux-*. - * testsuite/libffi.call/err_bad_typedef.c: Add xfails. - - * testsuite/libffi.call/stret_medium2.c: Add __UNUSED__ to args. - * testsuite/libffi.call/stret_medium.c: Likewise. - * testsuite/libffi.call/stret_large2.c: Likewise. - * testsuite/libffi.call/stret_large.c: Likewise. - -2008-12-26 Timothy Wall - - * testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_align_longdouble.c, - testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c: mark expected - failures on x86_64 cygwin/mingw. - -2008-12-22 Timothy Wall - - * testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/closure_loc_fn0.c, - testsuite/libffi.call/closure_stdcall.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c: use portable cast from - pointer to integer (intptr_t). - * testsuite/libffi.call/cls_longdouble.c: disable for win64. - -2008-07-24 Anthony Green - - * testsuite/libffi.call/cls_dbls_struct.c, - testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c, - testsuite/libffi.call/err_bad_abi.c: Clean up failures from - compiler warnings. - -2008-03-04 Anthony Green - Blake Chaffin - hos@tamanegi.org - - * testsuite/libffi.call/cls_align_longdouble_split2.c - testsuite/libffi.call/cls_align_longdouble_split.c - testsuite/libffi.call/cls_dbls_struct.c - testsuite/libffi.call/cls_double_va.c - testsuite/libffi.call/cls_longdouble.c - testsuite/libffi.call/cls_longdouble_va.c - testsuite/libffi.call/cls_pointer.c - testsuite/libffi.call/cls_pointer_stack.c - testsuite/libffi.call/err_bad_abi.c - testsuite/libffi.call/err_bad_typedef.c - testsuite/libffi.call/stret_large2.c - testsuite/libffi.call/stret_large.c - testsuite/libffi.call/stret_medium2.c - testsuite/libffi.call/stret_medium.c: New tests from Apple. - -2009-06-05 Andrew Haley - - * src/x86/ffitarget.h, src/x86/ffi.c: Merge stdcall changes from - libffi. - -2009-06-04 Andrew Haley - - * src/x86/ffitarget.h, src/x86/win32.S, src/x86/ffi.c: Back out - stdcall changes. - -2008-02-26 Anthony Green - Thomas Heller - - * src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C - comment. - -2008-02-03 Timothy Wall - - * src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL): Calculate jump return - offset based on code pointer, not data pointer. - -2008-01-31 Timothy Wall - - * testsuite/libffi.call/closure_stdcall.c: Add test for stdcall - closures. - * src/x86/ffitarget.h: Increase size of trampoline for stdcall - closures. - * src/x86/win32.S: Add assembly for stdcall closure. - * src/x86/ffi.c: Initialize stdcall closure trampoline. - -2009-06-04 Andrew Haley - - * include/ffi.h.in: Change void (*)() to void (*)(void). - * src/x86/ffi.c: Likewise. - -2009-06-04 Andrew Haley - - * src/powerpc/ppc_closure.S: Insert licence header. - * src/powerpc/linux64_closure.S: Likewise. - * src/m68k/sysv.S: Likewise. - - * src/sh64/ffi.c: Change void (*)() to void (*)(void). - * src/powerpc/ffi.c: Likewise. - * src/powerpc/ffi_darwin.c: Likewise. - * src/m32r/ffi.c: Likewise. - * src/sh64/ffi.c: Likewise. - * src/x86/ffi64.c: Likewise. - * src/alpha/ffi.c: Likewise. - * src/alpha/osf.S: Likewise. - * src/frv/ffi.c: Likewise. - * src/s390/ffi.c: Likewise. - * src/pa/ffi.c: Likewise. - * src/pa/hpux32.S: Likewise. - * src/ia64/unix.S: Likewise. - * src/ia64/ffi.c: Likewise. - * src/sparc/ffi.c: Likewise. - * src/mips/ffi.c: Likewise. - * src/sh/ffi.c: Likewise. - -2008-02-15 David Daney - - * src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE): - Define (conditionally), and use it to include cachectl.h. - (ffi_prep_closure_loc): Fix cache flushing. - * src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define. - -2009-06-04 Andrew Haley - - include/ffi.h.in, - src/arm/ffitarget.h, - src/arm/ffi.c, - src/arm/sysv.S, - src/powerpc/ffitarget.h, - src/closures.c, - src/sh64/ffitarget.h, - src/sh64/ffi.c, - src/sh64/sysv.S, - src/types.c, - src/x86/ffi64.c, - src/x86/ffitarget.h, - src/x86/win32.S, - src/x86/darwin.S, - src/x86/ffi.c, - src/x86/sysv.S, - src/x86/unix64.S, - src/alpha/ffitarget.h, - src/alpha/ffi.c, - src/alpha/osf.S, - src/m68k/ffitarget.h, - src/frv/ffitarget.h, - src/frv/ffi.c, - src/s390/ffitarget.h, - src/s390/sysv.S, - src/cris/ffitarget.h, - src/pa/linux.S, - src/pa/ffitarget.h, - src/pa/ffi.c, - src/raw_api.c, - src/ia64/ffitarget.h, - src/ia64/unix.S, - src/ia64/ffi.c, - src/ia64/ia64_flags.h, - src/java_raw_api.c, - src/debug.c, - src/sparc/v9.S, - src/sparc/ffitarget.h, - src/sparc/ffi.c, - src/sparc/v8.S, - src/mips/ffitarget.h, - src/mips/n32.S, - src/mips/o32.S, - src/mips/ffi.c, - src/prep_cif.c, - src/sh/ffitarget.h, - src/sh/ffi.c, - src/sh/sysv.S: Update license text. - -2009-05-22 Dave Korn - - * src/x86/win32.S (_ffi_closure_STDCALL): New function. - (.eh_frame): Add FDE for it. - -2009-05-22 Dave Korn - - * configure.ac: Also check if assembler supports pc-relative - relocs on X86_WIN32 targets. - * configure: Regenerate. - * src/x86/win32.S (ffi_prep_args): Declare extern, not global. - (_ffi_call_SYSV): Add missing function type symbol .def and - add EH markup labels. - (_ffi_call_STDCALL): Likewise. - (_ffi_closure_SYSV): Likewise. - (_ffi_closure_raw_SYSV): Likewise. - (.eh_frame): Add hand-crafted EH data. - -2009-04-09 Jakub Jelinek - - * testsuite/lib/libffi-dg.exp: Change copyright header to refer to - version 3 of the GNU General Public License and to point readers - at the COPYING3 file and the FSF's license web page. - * testsuite/libffi.call/call.exp: Likewise. - * testsuite/libffi.special/special.exp: Likewise. - -2009-03-01 Ralf Wildenhues - - * configure: Regenerate. - -2008-12-18 Rainer Orth - - PR libffi/26048 - * configure.ac (HAVE_AS_X86_PCREL): New test. - * configure: Regenerate. - * fficonfig.h.in: Regenerate. - * src/x86/sysv.S [!FFI_NO_RAW_API]: Precalculate - RAW_CLOSURE_CIF_OFFSET, RAW_CLOSURE_FUN_OFFSET, - RAW_CLOSURE_USER_DATA_OFFSET for the Solaris 10/x86 assembler. - (.eh_frame): Only use SYMBOL-. iff HAVE_AS_X86_PCREL. - * src/x86/unix64.S (.Lstore_table): Move to .text section. - (.Lload_table): Likewise. - (.eh_frame): Only use SYMBOL-. iff HAVE_AS_X86_PCREL. - -2008-12-18 Ralf Wildenhues - - * configure: Regenerate. - -2008-11-21 Eric Botcazou - - * src/sparc/ffi.c (ffi_prep_cif_machdep): Add support for - signed/unsigned int8/16 return values. - * src/sparc/v8.S (ffi_call_v8): Likewise. - (ffi_closure_v8): Likewise. - -2008-09-26 Peter O'Gorman - Steve Ellcey - - * configure: Regenerate for new libtool. - * Makefile.in: Ditto. - * include/Makefile.in: Ditto. - * aclocal.m4: Ditto. - -2008-08-25 Andreas Tobler - - * src/powerpc/ffitarget.h (ffi_abi): Add FFI_LINUX and - FFI_LINUX_SOFT_FLOAT to the POWERPC_FREEBSD enum. - Add note about flag bits used for FFI_SYSV_TYPE_SMALL_STRUCT. - Adjust copyright notice. - * src/powerpc/ffi.c: Add two new flags to indicate if we have one - register or two register to use for FFI_SYSV structs. - (ffi_prep_cif_machdep): Pass the right register flag introduced above. - (ffi_closure_helper_SYSV): Fix the return type for - FFI_SYSV_TYPE_SMALL_STRUCT. Comment. - Adjust copyright notice. - -2008-07-16 Kaz Kojima - - * src/sh/ffi.c (ffi_prep_closure_loc): Turn INSN into an unsigned - int. - -2008-06-17 Ralf Wildenhues - - * configure: Regenerate. - * include/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2008-06-07 Joseph Myers - - * configure.ac (parisc*-*-linux*, powerpc-*-sysv*, - powerpc-*-beos*): Remove. - * configure: Regenerate. - -2008-05-09 Julian Brown - - * Makefile.am (LTLDFLAGS): New. - (libffi_la_LDFLAGS): Use above. - * Makefile.in: Regenerate. - -2008-04-18 Paolo Bonzini - - PR bootstrap/35457 - * aclocal.m4: Regenerate. - * configure: Regenerate. - -2008-03-26 Kaz Kojima - - * src/sh/sysv.S: Add .note.GNU-stack on Linux. - * src/sh64/sysv.S: Likewise. - -2008-03-26 Daniel Jacobowitz - - * src/arm/sysv.S: Fix ARM comment marker. - -2008-03-26 Jakub Jelinek - - * src/alpha/osf.S: Add .note.GNU-stack on Linux. - * src/s390/sysv.S: Likewise. - * src/powerpc/ppc_closure.S: Likewise. - * src/powerpc/sysv.S: Likewise. - * src/x86/unix64.S: Likewise. - * src/x86/sysv.S: Likewise. - * src/sparc/v8.S: Likewise. - * src/sparc/v9.S: Likewise. - * src/m68k/sysv.S: Likewise. - * src/arm/sysv.S: Likewise. - -2008-03-16 Ralf Wildenhues - - * aclocal.m4: Regenerate. - * configure: Likewise. - * Makefile.in: Likewise. - * include/Makefile.in: Likewise. - * testsuite/Makefile.in: Likewise. - -2008-02-12 Bjoern Koenig - Andreas Tobler - - * configure.ac: Add amd64-*-freebsd* target. - * configure: Regenerate. - -2008-01-30 H.J. Lu - - PR libffi/34612 - * src/x86/sysv.S (ffi_closure_SYSV): Pop 4 byte from stack when - returning struct. - - * testsuite/libffi.call/call.exp: Add "-O2 -fomit-frame-pointer" - tests. - -2008-01-24 David Edelsohn - - * configure: Regenerate. - -2008-01-06 Andreas Tobler - - * src/x86/ffi.c (ffi_prep_cif_machdep): Fix thinko. - -2008-01-05 Andreas Tobler - - PR testsuite/32843 - * src/x86/ffi.c (ffi_prep_cif_machdep): Add code for - signed/unsigned int8/16 for X86_DARWIN. - Updated copyright info. - Handle one and two byte structs with special cif->flags. - * src/x86/ffitarget.h: Add special types for one and two byte structs. - Updated copyright info. - * src/x86/darwin.S (ffi_call_SYSV): Rewrite to use a jump table like - sysv.S - Remove code to pop args from the stack after call. - Special-case signed/unsigned for int8/16, one and two byte structs. - (ffi_closure_raw_SYSV): Handle FFI_TYPE_UINT8, - FFI_TYPE_SINT8, FFI_TYPE_UINT16, FFI_TYPE_SINT16, FFI_TYPE_UINT32, - FFI_TYPE_SINT32. - Updated copyright info. - -2007-12-08 David Daney - - * src/mips/n32.S (ffi_call_N32): Replace dadd with ADDU, dsub with - SUBU, add with ADDU and use smaller code sequences. - -2007-12-07 David Daney - - * src/mips/ffi.c (ffi_prep_cif_machdep): Handle long double return - type. - -2007-12-06 David Daney - - * include/ffi.h.in (FFI_SIZEOF_JAVA_RAW): Define if not already - defined. - (ffi_java_raw): New typedef. - (ffi_java_raw_call, ffi_java_ptrarray_to_raw, - ffi_java_raw_to_ptrarray): Change parameter types from ffi_raw to - ffi_java_raw. - (ffi_java_raw_closure) : Same. - (ffi_prep_java_raw_closure, ffi_prep_java_raw_closure_loc): Change - parameter types. - * src/java_raw_api.c (ffi_java_raw_size): Replace FFI_SIZEOF_ARG with - FFI_SIZEOF_JAVA_RAW. - (ffi_java_raw_to_ptrarray): Change type of raw to ffi_java_raw. - Replace FFI_SIZEOF_ARG with FFI_SIZEOF_JAVA_RAW. Use - sizeof(ffi_java_raw) for alignment calculations. - (ffi_java_ptrarray_to_raw): Same. - (ffi_java_rvalue_to_raw): Add special handling for FFI_TYPE_POINTER - if FFI_SIZEOF_JAVA_RAW == 4. - (ffi_java_raw_to_rvalue): Same. - (ffi_java_raw_call): Change type of raw to ffi_java_raw. - (ffi_java_translate_args): Same. - (ffi_prep_java_raw_closure_loc, ffi_prep_java_raw_closure): Change - parameter types. - * src/mips/ffitarget.h (FFI_SIZEOF_JAVA_RAW): Define for N32 ABI. - -2007-12-06 David Daney - - * src/mips/n32.S (ffi_closure_N32): Use 64-bit add instruction on - pointer values. - -2007-12-01 Andreas Tobler - - PR libffi/31937 - * src/powerpc/ffitarget.h: Introduce new ABI FFI_LINUX_SOFT_FLOAT. - Add local FFI_TYPE_UINT128 to handle soft-float long-double-128. - * src/powerpc/ffi.c: Distinguish between __NO_FPRS__ and not and - set the NUM_FPR_ARG_REGISTERS according to. - Add support for potential soft-float support under hard-float - architecture. - (ffi_prep_args_SYSV): Set NUM_FPR_ARG_REGISTERS to 0 in case of - FFI_LINUX_SOFT_FLOAT, handle float, doubles and long-doubles according - to the FFI_LINUX_SOFT_FLOAT ABI. - (ffi_prep_cif_machdep): Likewise. - (ffi_closure_helper_SYSV): Likewise. - * src/powerpc/ppc_closure.S: Make sure not to store float/double - on archs where __NO_FPRS__ is true. - Add FFI_TYPE_UINT128 support. - * src/powerpc/sysv.S: Add support for soft-float long-double-128. - Adjust copyright notice. - -2007-11-25 Andreas Tobler - - * src/closures.c: Move defintion of MAYBE_UNUSED from here to ... - * include/ffi_common.h: ... here. - Update copyright. - -2007-11-17 Andreas Tobler - - * src/powerpc/sysv.S: Load correct cr to compare if we have long double. - * src/powerpc/linux64.S: Likewise. - * src/powerpc/ffi.c: Add a comment to show which part goes into cr6. - * testsuite/libffi.call/return_ldl.c: New test. - -2007-09-04 - - * src/arm/sysv.S (UNWIND): New. - (Whole file): Conditionally compile unwinder directives. - * src/arm/sysv.S: Add unwinder directives. - - * src/arm/ffi.c (ffi_prep_args): Align structs by at least 4 bytes. - Only treat r0 as a struct address if we're actually returning a - struct by address. - Only copy the bytes that are actually within a struct. - (ffi_prep_cif_machdep): A Composite Type not larger than 4 bytes - is returned in r0, not passed by address. - (ffi_call): Allocate a word-sized temporary for the case where - a composite is returned in r0. - (ffi_prep_incoming_args_SYSV): Align as necessary. - -2007-08-05 Steven Newbury - - * src/arm/ffi.c (FFI_INIT_TRAMPOLINE): Use __clear_cache instead of - directly using the sys_cacheflush syscall. - -2007-07-27 Andrew Haley - - * src/arm/sysv.S (ffi_closure_SYSV): Add soft-float. - -2007-09-03 Maciej W. Rozycki - - * Makefile.am: Unify MIPS_IRIX and MIPS_LINUX into MIPS. - * configure.ac: Likewise. - * Makefile.in: Regenerate. - * include/Makefile.in: Likewise. - * testsuite/Makefile.in: Likewise. - * configure: Likewise. - -2007-08-24 David Daney - - * testsuite/libffi.call/return_sl.c: New test. - -2007-08-10 David Daney - - * testsuite/libffi.call/cls_multi_ushort.c, - testsuite/libffi.call/cls_align_uint16.c, - testsuite/libffi.call/nested_struct1.c, - testsuite/libffi.call/nested_struct3.c, - testsuite/libffi.call/cls_7_1_byte.c, - testsuite/libffi.call/nested_struct5.c, - testsuite/libffi.call/cls_double.c, - testsuite/libffi.call/nested_struct7.c, - testsuite/libffi.call/cls_sint.c, - testsuite/libffi.call/nested_struct9.c, - testsuite/libffi.call/cls_20byte1.c, - testsuite/libffi.call/cls_multi_sshortchar.c, - testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_3byte2.c, - testsuite/libffi.call/cls_multi_schar.c, - testsuite/libffi.call/cls_multi_uchar.c, - testsuite/libffi.call/cls_19byte.c, - testsuite/libffi.call/cls_9byte1.c, - testsuite/libffi.call/cls_align_float.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/problem1.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/cls_sshort.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/cls_align_double.c, - testsuite/libffi.call/nested_struct.c, - testsuite/libffi.call/cls_2byte.c, - testsuite/libffi.call/nested_struct10.c, - testsuite/libffi.call/cls_4byte.c, - testsuite/libffi.call/cls_6byte.c, - testsuite/libffi.call/cls_8byte.c, - testsuite/libffi.call/cls_multi_sshort.c, - testsuite/libffi.call/cls_align_sint16.c, - testsuite/libffi.call/cls_align_uint32.c, - testsuite/libffi.call/cls_20byte.c, - testsuite/libffi.call/cls_float.c, - testsuite/libffi.call/nested_struct2.c, - testsuite/libffi.call/cls_5_1_byte.c, - testsuite/libffi.call/nested_struct4.c, - testsuite/libffi.call/cls_24byte.c, - testsuite/libffi.call/nested_struct6.c, - testsuite/libffi.call/cls_64byte.c, - testsuite/libffi.call/nested_struct8.c, - testsuite/libffi.call/cls_uint.c, - testsuite/libffi.call/cls_multi_ushortchar.c, - testsuite/libffi.call/cls_schar.c, - testsuite/libffi.call/cls_uchar.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/cls_align_longdouble.c, - testsuite/libffi.call/cls_1_1byte.c, - testsuite/libffi.call/cls_12byte.c, - testsuite/libffi.call/cls_3_1byte.c, - testsuite/libffi.call/cls_3byte1.c, - testsuite/libffi.call/cls_4_1byte.c, - testsuite/libffi.call/cls_6_1_byte.c, - testsuite/libffi.call/cls_16byte.c, - testsuite/libffi.call/cls_18byte.c, - testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/cls_9byte2.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/cls_ushort.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/cls_5byte.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_7byte.c, - testsuite/libffi.call/cls_align_sint32.c, - testsuite/libffi.special/unwindtest_ffi_call.cc, - testsuite/libffi.special/unwindtest.cc: Remove xfail for mips64*-*-*. - -2007-08-10 David Daney - - PR libffi/28313 - * configure.ac: Don't treat mips64 as a special case. - * Makefile.am (nodist_libffi_la_SOURCES): Add n32.S. - * configure: Regenerate - * Makefile.in: Ditto. - * fficonfig.h.in: Ditto. - * src/mips/ffitarget.h (REG_L, REG_S, SUBU, ADDU, SRL, LI): Indent. - (LA, EH_FRAME_ALIGN, FDE_ADDR_BYTES): New preprocessor macros. - (FFI_DEFAULT_ABI): Set for n64 case. - (FFI_CLOSURES, FFI_TRAMPOLINE_SIZE): Define for n32 and n64 cases. - * src/mips/n32.S (ffi_call_N32): Add debug macros and labels for FDE. - (ffi_closure_N32): New function. - (.eh_frame): New section - * src/mips/o32.S: Clean up comments. - (ffi_closure_O32): Pass ffi_closure parameter in $12. - * src/mips/ffi.c: Use FFI_MIPS_N32 instead of - _MIPS_SIM == _ABIN32 throughout. - (FFI_MIPS_STOP_HERE): New, use in place of - ffi_stop_here. - (ffi_prep_args): Use unsigned long to hold pointer values. Rewrite - to support n32/n64 ABIs. - (calc_n32_struct_flags): Rewrite. - (calc_n32_return_struct_flags): Remove unused variable. Reverse - position of flag bits. - (ffi_prep_cif_machdep): Rewrite n32 portion. - (ffi_call): Enable for n64. Add special handling for small structure - return values. - (ffi_prep_closure_loc): Add n32 and n64 support. - (ffi_closure_mips_inner_O32): Add cast to silence warning. - (copy_struct_N32, ffi_closure_mips_inner_N32): New functions. - -2007-08-08 David Daney - - * testsuite/libffi.call/ffitest.h (ffi_type_mylong): Remove definition. - * testsuite/libffi.call/cls_align_uint16.c (main): Use correct type - specifiers. - * testsuite/libffi.call/nested_struct1.c (main): Ditto. - * testsuite/libffi.call/cls_sint.c (main): Ditto. - * testsuite/libffi.call/nested_struct9.c (main): Ditto. - * testsuite/libffi.call/cls_20byte1.c (main): Ditto. - * testsuite/libffi.call/cls_9byte1.c (main): Ditto. - * testsuite/libffi.call/closure_fn1.c (main): Ditto. - * testsuite/libffi.call/closure_fn3.c (main): Ditto. - * testsuite/libffi.call/return_dbl2.c (main): Ditto. - * testsuite/libffi.call/cls_sshort.c (main): Ditto. - * testsuite/libffi.call/return_fl3.c (main): Ditto. - * testsuite/libffi.call/closure_fn5.c (main): Ditto. - * testsuite/libffi.call/nested_struct.c (main): Ditto. - * testsuite/libffi.call/nested_struct10.c (main): Ditto. - * testsuite/libffi.call/return_ll1.c (main): Ditto. - * testsuite/libffi.call/cls_8byte.c (main): Ditto. - * testsuite/libffi.call/cls_align_uint32.c (main): Ditto. - * testsuite/libffi.call/cls_align_sint16.c (main): Ditto. - * testsuite/libffi.call/cls_20byte.c (main): Ditto. - * testsuite/libffi.call/nested_struct2.c (main): Ditto. - * testsuite/libffi.call/cls_24byte.c (main): Ditto. - * testsuite/libffi.call/nested_struct6.c (main): Ditto. - * testsuite/libffi.call/cls_uint.c (main): Ditto. - * testsuite/libffi.call/cls_12byte.c (main): Ditto. - * testsuite/libffi.call/cls_16byte.c (main): Ditto. - * testsuite/libffi.call/closure_fn0.c (main): Ditto. - * testsuite/libffi.call/cls_9byte2.c (main): Ditto. - * testsuite/libffi.call/closure_fn2.c (main): Ditto. - * testsuite/libffi.call/return_dbl1.c (main): Ditto. - * testsuite/libffi.call/closure_fn4.c (main): Ditto. - * testsuite/libffi.call/closure_fn6.c (main): Ditto. - * testsuite/libffi.call/cls_align_sint32.c (main): Ditto. - -2007-08-07 Andrew Haley - - * src/x86/sysv.S (ffi_closure_raw_SYSV): Fix typo in previous - checkin. - -2007-08-06 Andrew Haley - - PR testsuite/32843 - * src/x86/sysv.S (ffi_closure_raw_SYSV): Handle FFI_TYPE_UINT8, - FFI_TYPE_SINT8, FFI_TYPE_UINT16, FFI_TYPE_SINT16, FFI_TYPE_UINT32, - FFI_TYPE_SINT32. - -2007-08-02 David Daney - - * testsuite/libffi.call/return_ul.c (main): Define return type as - ffi_arg. Use proper printf conversion specifier. - -2007-07-30 Andrew Haley - - PR testsuite/32843 - * src/x86/ffi.c (ffi_prep_cif_machdep): in x86 case, add code for - signed/unsigned int8/16. - * src/x86/sysv.S (ffi_call_SYSV): Rewrite to: - Use a jump table. - Remove code to pop args from the stack after call. - Special-case signed/unsigned int8/16. - * testsuite/libffi.call/return_sc.c (main): Revert. - -2007-07-26 Richard Guenther - - PR testsuite/32843 - * testsuite/libffi.call/return_sc.c (main): Verify call - result as signed char, not ffi_arg. - -2007-07-16 Rainer Orth - - * configure.ac (i?86-*-solaris2.1[0-9]): Set TARGET to X86_64. - * configure: Regenerate. - -2007-07-11 David Daney - - * src/mips/ffi.c: Don't include sys/cachectl.h. - (ffi_prep_closure_loc): Use __builtin___clear_cache() instead of - cacheflush(). - -2007-05-18 Aurelien Jarno - - * src/arm/ffi.c (ffi_prep_closure_loc): Renamed and ajusted - from (ffi_prep_closure): ... this. - (FFI_INIT_TRAMPOLINE): Adjust. - -2005-12-31 Phil Blundell - - * src/arm/ffi.c (ffi_prep_incoming_args_SYSV, - ffi_closure_SYSV_inner, ffi_prep_closure): New, add closure support. - * src/arm/sysv.S(ffi_closure_SYSV): Likewise. - * src/arm/ffitarget.h (FFI_TRAMPOLINE_SIZE): Likewise. - (FFI_CLOSURES): Enable closure support. - -2007-07-03 Andrew Haley - - * testsuite/libffi.call/cls_multi_ushort.c, - testsuite/libffi.call/cls_align_uint16.c, - testsuite/libffi.call/nested_struct1.c, - testsuite/libffi.call/nested_struct3.c, - testsuite/libffi.call/cls_7_1_byte.c, - testsuite/libffi.call/cls_double.c, - testsuite/libffi.call/nested_struct5.c, - testsuite/libffi.call/nested_struct7.c, - testsuite/libffi.call/cls_sint.c, - testsuite/libffi.call/nested_struct9.c, - testsuite/libffi.call/cls_20byte1.c, - testsuite/libffi.call/cls_multi_sshortchar.c, - testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_3byte2.c, - testsuite/libffi.call/cls_multi_schar.c, - testsuite/libffi.call/cls_multi_uchar.c, - testsuite/libffi.call/cls_19byte.c, - testsuite/libffi.call/cls_9byte1.c, - testsuite/libffi.call/cls_align_float.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/problem1.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/cls_sshort.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/cls_align_double.c, - testsuite/libffi.call/cls_2byte.c, - testsuite/libffi.call/nested_struct.c, - testsuite/libffi.call/nested_struct10.c, - testsuite/libffi.call/cls_4byte.c, - testsuite/libffi.call/cls_6byte.c, - testsuite/libffi.call/cls_8byte.c, - testsuite/libffi.call/cls_multi_sshort.c, - testsuite/libffi.call/cls_align_uint32.c, - testsuite/libffi.call/cls_align_sint16.c, - testsuite/libffi.call/cls_float.c, - testsuite/libffi.call/cls_20byte.c, - testsuite/libffi.call/cls_5_1_byte.c, - testsuite/libffi.call/nested_struct2.c, - testsuite/libffi.call/cls_24byte.c, - testsuite/libffi.call/nested_struct4.c, - testsuite/libffi.call/nested_struct6.c, - testsuite/libffi.call/cls_64byte.c, - testsuite/libffi.call/nested_struct8.c, - testsuite/libffi.call/cls_uint.c, - testsuite/libffi.call/cls_multi_ushortchar.c, - testsuite/libffi.call/cls_schar.c, - testsuite/libffi.call/cls_uchar.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/cls_align_longdouble.c, - testsuite/libffi.call/cls_1_1byte.c, - testsuite/libffi.call/cls_12byte.c, - testsuite/libffi.call/cls_3_1byte.c, - testsuite/libffi.call/cls_3byte1.c, - testsuite/libffi.call/cls_4_1byte.c, - testsuite/libffi.call/cls_6_1_byte.c, - testsuite/libffi.call/cls_16byte.c, - testsuite/libffi.call/cls_18byte.c, - testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/cls_9byte2.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/cls_ushort.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/cls_5byte.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_7byte.c, - testsuite/libffi.call/cls_align_sint32.c, - testsuite/libffi.special/unwindtest_ffi_call.cc, - testsuite/libffi.special/unwindtest.cc: Enable for ARM. - -2007-07-05 H.J. Lu - - * aclocal.m4: Regenerated. - -2007-06-02 Paolo Bonzini - - * configure: Regenerate. - -2007-05-23 Steve Ellcey - - * Makefile.in: Regenerate. - * configure: Regenerate. - * aclocal.m4: Regenerate. - * include/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2007-05-10 Roman Zippel - - * src/m68k/ffi.c (ffi_prep_incoming_args_SYSV, - ffi_closure_SYSV_inner,ffi_prep_closure): New, add closure support. - * src/m68k/sysv.S(ffi_closure_SYSV,ffi_closure_struct_SYSV): Likewise. - * src/m68k/ffitarget.h (FFI_TRAMPOLINE_SIZE): Likewise. - (FFI_CLOSURES): Enable closure support. - -2007-05-10 Roman Zippel - - * configure.ac (HAVE_AS_CFI_PSEUDO_OP): New test. - * configure: Regenerate. - * fficonfig.h.in: Regenerate. - * src/m68k/sysv.S (CFI_STARTPROC,CFI_ENDPROC, - CFI_OFFSET,CFI_DEF_CFA): New macros. - (ffi_call_SYSV): Add callframe annotation. - -2007-05-10 Roman Zippel - - * src/m68k/ffi.c (ffi_prep_args,ffi_prep_cif_machdep): Fix - numerous test suite failures. - * src/m68k/sysv.S (ffi_call_SYSV): Likewise. - -2007-04-11 Paolo Bonzini - - * Makefile.am (EXTRA_DIST): Bring up to date. - * Makefile.in: Regenerate. - * src/frv/eabi.S: Remove RCS keyword. - -2007-04-06 Richard Henderson - - * configure.ac: Tidy target case. - (HAVE_LONG_DOUBLE): Allow the target to override. - * configure: Regenerate. - * include/ffi.h.in: Don't define ffi_type_foo if - LIBFFI_HIDE_BASIC_TYPES is defined. - (ffi_type_longdouble): If not HAVE_LONG_DOUBLE, define - to ffi_type_double. - * types.c (LIBFFI_HIDE_BASIC_TYPES): Define. - (FFI_TYPEDEF, ffi_type_void): Mark the data const. - (ffi_type_longdouble): Special case for Alpha. Don't define - if long double == double. - - * src/alpha/ffi.c (FFI_TYPE_LONGDOUBLE): Assert unique value. - (ffi_prep_cif_machdep): Handle it as the 128-bit type. - (ffi_call, ffi_closure_osf_inner): Likewise. - (ffi_closure_osf_inner): Likewise. Mark hidden. - (ffi_call_osf, ffi_closure_osf): Mark hidden. - * src/alpha/ffitarget.h (FFI_LAST_ABI): Tidy definition. - * src/alpha/osf.S (ffi_call_osf, ffi_closure_osf): Mark hidden. - (load_table): Handle 128-bit long double. - - * testsuite/libffi.call/float4.c: Add -mieee for alpha. - -2007-04-06 Tom Tromey - - PR libffi/31491: - * README: Fixed bug in example. - -2007-04-03 Jakub Jelinek - - * src/closures.c: Include sys/statfs.h. - (_GNU_SOURCE): Define on Linux. - (FFI_MMAP_EXEC_SELINUX): Define. - (selinux_enabled): New variable. - (selinux_enabled_check): New function. - (is_selinux_enabled): Define. - (dlmmap): Use it. - -2007-03-24 Uros Bizjak - - * testsuite/libffi.call/return_fl2.c (return_fl): Mark as static. - Use 'volatile float sum' to create sum of floats to avoid false - negative due to excess precision on ix86 targets. - (main): Ditto. - -2007-03-08 Alexandre Oliva - - * src/powerpc/ffi.c (flush_icache): Fix left-over from previous - patch. - (ffi_prep_closure_loc): Remove unneeded casts. Add needed ones. - -2007-03-07 Alexandre Oliva - - * include/ffi.h.in (ffi_closure_alloc, ffi_closure_free): New. - (ffi_prep_closure_loc): New. - (ffi_prep_raw_closure_loc): New. - (ffi_prep_java_raw_closure_loc): New. - * src/closures.c: New file. - * src/dlmalloc.c [FFI_MMAP_EXEC_WRIT] (struct malloc_segment): - Replace sflags with exec_offset. - [FFI_MMAP_EXEC_WRIT] (mmap_exec_offset, add_segment_exec_offset, - sub_segment_exec_offset): New macros. - (get_segment_flags, set_segment_flags, check_segment_merge): New - macros. - (is_mmapped_segment, is_extern_segment): Use get_segment_flags. - (add_segment, sys_alloc, create_mspace, create_mspace_with_base, - destroy_mspace): Use new macros. - (sys_alloc): Silence warning. - * Makefile.am (libffi_la_SOURCES): Add src/closures.c. - * Makefile.in: Rebuilt. - * src/prep_cif [FFI_CLOSURES] (ffi_prep_closure): Implement in - terms of ffi_prep_closure_loc. - * src/raw_api.c (ffi_prep_raw_closure_loc): Renamed and adjusted - from... - (ffi_prep_raw_closure): ... this. Re-implement in terms of the - renamed version. - * src/java_raw_api (ffi_prep_java_raw_closure_loc): Renamed and - adjusted from... - (ffi_prep_java_raw_closure): ... this. Re-implement in terms of - the renamed version. - * src/alpha/ffi.c (ffi_prep_closure_loc): Renamed from - (ffi_prep_closure): ... this. - * src/pa/ffi.c: Likewise. - * src/cris/ffi.c: Likewise. Adjust. - * src/frv/ffi.c: Likewise. - * src/ia64/ffi.c: Likewise. - * src/mips/ffi.c: Likewise. - * src/powerpc/ffi_darwin.c: Likewise. - * src/s390/ffi.c: Likewise. - * src/sh/ffi.c: Likewise. - * src/sh64/ffi.c: Likewise. - * src/sparc/ffi.c: Likewise. - * src/x86/ffi64.c: Likewise. - * src/x86/ffi.c: Likewise. - (FFI_INIT_TRAMPOLINE): Adjust. - (ffi_prep_raw_closure_loc): Renamed and adjusted from... - (ffi_prep_raw_closure): ... this. - * src/powerpc/ffi.c (ffi_prep_closure_loc): Renamed from - (ffi_prep_closure): ... this. - (flush_icache): Adjust. - -2007-03-07 Alexandre Oliva - - * src/dlmalloc.c: New file, imported version 2.8.3 of Doug - Lea's malloc. - -2007-03-01 Brooks Moses - - * Makefile.am: Add dummy install-pdf target. - * Makefile.in: Regenerate - -2007-02-13 Andreas Krebbel - - * src/s390/ffi.c (ffi_prep_args, ffi_prep_cif_machdep, - ffi_closure_helper_SYSV): Add long double handling. - -2007-02-02 Jakub Jelinek - - * src/powerpc/linux64.S (ffi_call_LINUX64): Move restore of r2 - immediately after bctrl instruction. - -2007-01-18 Alexandre Oliva - - * Makefile.am (all-recursive, install-recursive, - mostlyclean-recursive, clean-recursive, distclean-recursive, - maintainer-clean-recursive): Add missing targets. - * Makefile.in: Rebuilt. - -2006-12-14 Andreas Tobler - - * configure.ac: Add TARGET for x86_64-*-darwin*. - * Makefile.am (nodist_libffi_la_SOURCES): Add rules for 64-bit sources - for X86_DARWIN. - * src/x86/ffitarget.h: Set trampoline size for x86_64-*-darwin*. - * src/x86/darwin64.S: New file for x86_64-*-darwin* support. - * configure: Regenerate. - * Makefile.in: Regenerate. - * include/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - * testsuite/libffi.special/unwindtest_ffi_call.cc: New test case for - ffi_call only. - -2006-12-13 Andreas Tobler - - * aclocal.m4: Regenerate with aclocal -I .. as written in the - Makefile.am. - -2006-10-31 Geoffrey Keating - - * src/powerpc/ffi_darwin.c (darwin_adjust_aggregate_sizes): New. - (ffi_prep_cif_machdep): Call darwin_adjust_aggregate_sizes for - Darwin. - * testsuite/libffi.call/nested_struct4.c: Remove Darwin XFAIL. - * testsuite/libffi.call/nested_struct6.c: Remove Darwin XFAIL. - -2006-10-10 Paolo Bonzini - Sandro Tolaini - - * configure.ac [i*86-*-darwin*]: Set X86_DARWIN symbol and - conditional. - * configure: Regenerated. - * Makefile.am (nodist_libffi_la_SOURCES) [X86_DARWIN]: New case. - (EXTRA_DIST): Add src/x86/darwin.S. - * Makefile.in: Regenerated. - * include/Makefile.in: Regenerated. - * testsuite/Makefile.in: Regenerated. - - * src/x86/ffi.c (ffi_prep_cif_machdep) [X86_DARWIN]: Treat like - X86_WIN32, and additionally align stack to 16 bytes. - * src/x86/darwin.S: New, based on sysv.S. - * src/prep_cif.c (ffi_prep_cif) [X86_DARWIN]: Align > 8-byte structs. - -2006-09-12 David Daney - - PR libffi/23935 - * include/Makefile.am: Install both ffi.h and ffitarget.h in - $(libdir)/gcc/$(target_alias)/$(gcc_version)/include. - * aclocal.m4: Regenerated for automake 1.9.6. - * Makefile.in: Regenerated. - * include/Makefile.in: Regenerated. - * testsuite/Makefile.in: Regenerated. - -2006-08-17 Andreas Tobler - - * include/ffi_common.h (struct): Revert accidental commit. - -2006-08-15 Andreas Tobler - - * include/ffi_common.h: Remove lint directives. - * include/ffi.h.in: Likewise. - -2006-07-25 Torsten Schoenfeld - - * include/ffi.h.in (ffi_type_ulong, ffi_type_slong): Define correctly - for 32-bit architectures. - * testsuite/libffi.call/return_ul.c: New test case. - -2006-07-19 David Daney - - * testsuite/libffi.call/closure_fn6.c: Remove xfail for mips, - xfail remains for mips64. - -2006-05-23 Carlos O'Donell - - * Makefile.am: Add install-html target. Add install-html to .PHONY - * Makefile.in: Regenerate. - * aclocal.m4: Regenerate. - * include/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2006-05-18 John David Anglin - - * pa/ffi.c (ffi_prep_args_pa32): Load floating point arguments from - stack slot. - -2006-04-22 Andreas Tobler - - * README: Remove notice about 'Crazy Comments'. - * src/debug.c: Remove lint directives. Cleanup white spaces. - * src/java_raw_api.c: Likewise. - * src/prep_cif.c: Likewise. - * src/raw_api.c: Likewise. - * src/ffitest.c: Delete. No longer needed, all test cases migrated - to the testsuite. - * src/arm/ffi.c: Remove lint directives. - * src/m32r/ffi.c: Likewise. - * src/pa/ffi.c: Likewise. - * src/powerpc/ffi.c: Likewise. - * src/powerpc/ffi_darwin.c: Likewise. - * src/sh/ffi.c: Likewise. - * src/sh64/ffi.c: Likewise. - * src/x86/ffi.c: Likewise. - * testsuite/libffi.call/float2.c: Likewise. - * testsuite/libffi.call/promotion.c: Likewise. - * testsuite/libffi.call/struct1.c: Likewise. - -2006-04-13 Andreas Tobler - - * src/pa/hpux32.S: Correct unwind offset calculation for - ffi_closure_pa32. - * src/pa/linux.S: Likewise. - -2006-04-12 James E Wilson - - PR libgcj/26483 - * src/ia64/ffi.c (stf_spill, ldf_fill): Rewrite as macros. - (hfa_type_load): Call stf_spill. - (hfa_type_store): Call ldf_fill. - (ffi_call): Adjust calls to above routines. Add local temps for - macro result. - -2006-04-10 Matthias Klose - - * testsuite/lib/libffi-dg.exp (libffi-init): Recognize multilib - directory names containing underscores. - -2006-04-07 James E Wilson - - * testsuite/libffi.call/float4.c: New testcase. - -2006-04-05 John David Anglin - Andreas Tobler - - * Makefile.am: Add PA_HPUX port. - * Makefile.in: Regenerate. - * include/Makefile.in: Likewise. - * testsuite/Makefile.in: Likewise. - * configure.ac: Add PA_HPUX rules. - * configure: Regenerate. - * src/pa/ffitarget.h: Rename linux target to PA_LINUX. - Add PA_HPUX and PA64_HPUX. - Rename FFI_LINUX ABI to FFI_PA32 ABI. - (FFI_TRAMPOLINE_SIZE): Define for 32-bit HP-UX targets. - (FFI_TYPE_SMALL_STRUCT2): Define. - (FFI_TYPE_SMALL_STRUCT4): Likewise. - (FFI_TYPE_SMALL_STRUCT8): Likewise. - (FFI_TYPE_SMALL_STRUCT3): Redefine. - (FFI_TYPE_SMALL_STRUCT5): Likewise. - (FFI_TYPE_SMALL_STRUCT6): Likewise. - (FFI_TYPE_SMALL_STRUCT7): Likewise. - * src/pa/ffi.c (ROUND_DOWN): Delete. - (fldw, fstw, fldd, fstd): Use '__asm__'. - (ffi_struct_type): Add support for FFI_TYPE_SMALL_STRUCT2, - FFI_TYPE_SMALL_STRUCT4 and FFI_TYPE_SMALL_STRUCT8. - (ffi_prep_args_LINUX): Rename to ffi_prep_args_pa32. Update comment. - Simplify incrementing of stack slot variable. Change type of local - 'n' to unsigned int. - (ffi_size_stack_LINUX): Rename to ffi_size_stack_pa32. Handle long - double on PA_HPUX. - (ffi_prep_cif_machdep): Likewise. - (ffi_call): Likewise. - (ffi_closure_inner_LINUX): Rename to ffi_closure_inner_pa32. Change - return type to ffi_status. Simplify incrementing of stack slot - variable. Only copy floating point argument registers when PA_LINUX - is true. Reformat debug statement. - Add support for FFI_TYPE_SMALL_STRUCT2, FFI_TYPE_SMALL_STRUCT4 and - FFI_TYPE_SMALL_STRUCT8. - (ffi_closure_LINUX): Rename to ffi_closure_pa32. Add 'extern' to - declaration. - (ffi_prep_closure): Make linux trampoline conditional on PA_LINUX. - Add nops to cache flush. Add trampoline for PA_HPUX. - * src/pa/hpux32.S: New file. - * src/pa/linux.S (ffi_call_LINUX): Rename to ffi_call_pa32. Rename - ffi_prep_args_LINUX to ffi_prep_args_pa32. - Localize labels. Add support for 2, 4 and 8-byte small structs. Handle - unaligned destinations in 3, 5, 6 and 7-byte small structs. Order - argument type checks so that common argument types appear first. - (ffi_closure_LINUX): Rename to ffi_closure_pa32. Rename - ffi_closure_inner_LINUX to ffi_closure_inner_pa32. - -2006-03-24 Alan Modra - - * src/powerpc/ffitarget.h (enum ffi_abi): Add FFI_LINUX. Default - for 32-bit using IBM extended double format. Fix FFI_LAST_ABI. - * src/powerpc/ffi.c (ffi_prep_args_SYSV): Handle linux variant of - FFI_TYPE_LONGDOUBLE. - (ffi_prep_args64): Assert using IBM extended double. - (ffi_prep_cif_machdep): Don't munge FFI_TYPE_LONGDOUBLE type. - Handle FFI_LINUX FFI_TYPE_LONGDOUBLE return and args. - (ffi_call): Handle FFI_LINUX. - (ffi_closure_helper_SYSV): Non FFI_LINUX long double return needs - gpr3 return pointer as for struct return. Handle FFI_LINUX - FFI_TYPE_LONGDOUBLE return and args. Don't increment "nf" - unnecessarily. - * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Load both f1 and f2 - for FFI_TYPE_LONGDOUBLE. Move epilogue insns into case table. - Don't use r6 as pointer to results, instead use sp offset. Don't - make a special call to load lr with case table address, instead - use offset from previous call. - * src/powerpc/sysv.S (ffi_call_SYSV): Save long double return. - * src/powerpc/linux64.S (ffi_call_LINUX64): Simplify long double - return. - -2006-03-15 Kaz Kojima - - * src/sh64/ffi.c (ffi_prep_cif_machdep): Handle float arguments - passed with FP registers correctly. - (ffi_closure_helper_SYSV): Likewise. - * src/sh64/sysv.S: Likewise. - -2006-03-01 Andreas Tobler - - * testsuite/libffi.special/unwindtest.cc (closure_test_fn): Mark cif, - args and userdata unused. - (closure_test_fn1): Mark cif and userdata unused. - (main): Remove unused res. - -2006-02-28 Andreas Tobler - - * testsuite/libffi.call/call.exp: Adjust FSF address. Add test runs for - -O2, -O3, -Os and the warning flags -W -Wall. - * testsuite/libffi.special/special.exp: Likewise. - * testsuite/libffi.call/ffitest.h: Add an __UNUSED__ macro to mark - unused parameter unused for gcc or else do nothing. - * testsuite/libffi.special/ffitestcxx.h: Likewise. - * testsuite/libffi.call/cls_12byte.c (cls_struct_12byte_gn): Mark cif - and userdata unused. - * testsuite/libffi.call/cls_16byte.c (cls_struct_16byte_gn): Likewise. - * testsuite/libffi.call/cls_18byte.c (cls_struct_18byte_gn): Likewise. - * testsuite/libffi.call/cls_19byte.c (cls_struct_19byte_gn): Likewise. - * testsuite/libffi.call/cls_1_1byte.c (cls_struct_1_1byte_gn): Likewise. - * testsuite/libffi.call/cls_20byte.c (cls_struct_20byte_gn): Likewise. - * testsuite/libffi.call/cls_20byte1.c (cls_struct_20byte_gn): Likewise. - * testsuite/libffi.call/cls_24byte.c (cls_struct_24byte_gn): Likewise. - * testsuite/libffi.call/cls_2byte.c (cls_struct_2byte_gn): Likewise. - * testsuite/libffi.call/cls_3_1byte.c (cls_struct_3_1byte_gn): Likewise. - * testsuite/libffi.call/cls_3byte1.c (cls_struct_3byte_gn): Likewise. - * testsuite/libffi.call/cls_3byte2.c (cls_struct_3byte_gn1): Likewise. - * testsuite/libffi.call/cls_4_1byte.c (cls_struct_4_1byte_gn): Likewise. - * testsuite/libffi.call/cls_4byte.c (cls_struct_4byte_gn): Likewise. - * testsuite/libffi.call/cls_5_1_byte.c (cls_struct_5byte_gn): Likewise. - * testsuite/libffi.call/cls_5byte.c (cls_struct_5byte_gn): Likewise. - * testsuite/libffi.call/cls_64byte.c (cls_struct_64byte_gn): Likewise. - * testsuite/libffi.call/cls_6_1_byte.c (cls_struct_6byte_gn): Likewise. - * testsuite/libffi.call/cls_6byte.c (cls_struct_6byte_gn): Likewise. - * testsuite/libffi.call/cls_7_1_byte.c (cls_struct_7byte_gn): Likewise. - * testsuite/libffi.call/cls_7byte.c (cls_struct_7byte_gn): Likewise. - * testsuite/libffi.call/cls_8byte.c (cls_struct_8byte_gn): Likewise. - * testsuite/libffi.call/cls_9byte1.c (cls_struct_9byte_gn): Likewise. - * testsuite/libffi.call/cls_9byte2.c (cls_struct_9byte_gn): Likewise. - * testsuite/libffi.call/cls_align_double.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_float.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_longdouble.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_pointer.c (cls_struct_align_fn): Cast - void* to avoid compiler warning. - (main): Likewise. - (cls_struct_align_gn): Mark cif and userdata unused. - * testsuite/libffi.call/cls_align_sint16.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_sint32.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_sint64.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_uint16.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_uint32.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_double.c (cls_ret_double_fn): Likewise. - * testsuite/libffi.call/cls_float.c (cls_ret_float_fn): Likewise. - * testsuite/libffi.call/cls_multi_schar.c (test_func_gn): Mark cif and - data unused. - (main): Cast res_call to silence gcc. - * testsuite/libffi.call/cls_multi_sshort.c (test_func_gn): Mark cif and - data unused. - (main): Cast res_call to silence gcc. - * testsuite/libffi.call/cls_multi_sshortchar.c (test_func_gn): Mark cif - and data unused. - (main): Cast res_call to silence gcc. - * testsuite/libffi.call/cls_multi_uchar.c (test_func_gn): Mark cif and - data unused. - (main): Cast res_call to silence gcc. - * testsuite/libffi.call/cls_multi_ushort.c (test_func_gn): Mark cif and - data unused. - (main): Cast res_call to silence gcc. - * testsuite/libffi.call/cls_multi_ushortchar.c (test_func_gn): Mark cif - and data unused. - (main): Cast res_call to silence gcc. - * testsuite/libffi.call/cls_schar.c (cls_ret_schar_fn): Mark cif and - userdata unused. - (cls_ret_schar_fn): Cast printf parameter to silence gcc. - * testsuite/libffi.call/cls_sint.c (cls_ret_sint_fn): Mark cif and - userdata unused. - (cls_ret_sint_fn): Cast printf parameter to silence gcc. - * testsuite/libffi.call/cls_sshort.c (cls_ret_sshort_fn): Mark cif and - userdata unused. - (cls_ret_sshort_fn): Cast printf parameter to silence gcc. - * testsuite/libffi.call/cls_uchar.c (cls_ret_uchar_fn): Mark cif and - userdata unused. - (cls_ret_uchar_fn): Cast printf parameter to silence gcc. - * testsuite/libffi.call/cls_uint.c (cls_ret_uint_fn): Mark cif and - userdata unused. - (cls_ret_uint_fn): Cast printf parameter to silence gcc. - * testsuite/libffi.call/cls_ulonglong.c (cls_ret_ulonglong_fn): Mark cif - and userdata unused. - * testsuite/libffi.call/cls_ushort.c (cls_ret_ushort_fn): Mark cif and - userdata unused. - (cls_ret_ushort_fn): Cast printf parameter to silence gcc. - * testsuite/libffi.call/float.c (floating): Remove unused parameter e. - * testsuite/libffi.call/float1.c (main): Remove unused variable i. - Cleanup white spaces. - * testsuite/libffi.call/negint.c (checking): Remove unused variable i. - * testsuite/libffi.call/nested_struct.c (cls_struct_combined_gn): Mark - cif and userdata unused. - * testsuite/libffi.call/nested_struct1.c (cls_struct_combined_gn): - Likewise. - * testsuite/libffi.call/nested_struct10.c (B_gn): Likewise. - * testsuite/libffi.call/nested_struct2.c (B_fn): Adjust printf - formatters to silence gcc. - (B_gn): Mark cif and userdata unused. - * testsuite/libffi.call/nested_struct3.c (B_gn): Mark cif and userdata - unused. - * testsuite/libffi.call/nested_struct4.c: Mention related PR. - (B_gn): Mark cif and userdata unused. - * testsuite/libffi.call/nested_struct5.c (B_gn): Mark cif and userdata - unused. - * testsuite/libffi.call/nested_struct6.c: Mention related PR. - (B_gn): Mark cif and userdata unused. - * testsuite/libffi.call/nested_struct7.c (B_gn): Mark cif and userdata - unused. - * testsuite/libffi.call/nested_struct8.c (B_gn): Likewise. - * testsuite/libffi.call/nested_struct9.c (B_gn): Likewise. - * testsuite/libffi.call/problem1.c (stub): Likewise. - * testsuite/libffi.call/pyobjc-tc.c (main): Cast the result to silence - gcc. - * testsuite/libffi.call/return_fl2.c (return_fl): Add the note mentioned - in the last commit for this test case in the test case itself. - * testsuite/libffi.call/closure_fn0.c (closure_test_fn0): Mark cif as - unused. - * testsuite/libffi.call/closure_fn1.c (closure_test_fn1): Likewise. - * testsuite/libffi.call/closure_fn2.c (closure_test_fn2): Likewise. - * testsuite/libffi.call/closure_fn3.c (closure_test_fn3): Likewise. - * testsuite/libffi.call/closure_fn4.c (closure_test_fn0): Likewise. - * testsuite/libffi.call/closure_fn5.c (closure_test_fn5): Likewise. - * testsuite/libffi.call/closure_fn6.c (closure_test_fn0): Likewise. - -2006-02-22 Kaz Kojima - - * src/sh/sysv.S: Fix register numbers in the FDE for - ffi_closure_SYSV. - -2006-02-20 Andreas Tobler - - * testsuite/libffi.call/return_fl2.c (return_fl): Remove static - declaration to avoid a false negative on ix86. See PR323. - -2006-02-18 Kaz Kojima - - * src/sh/ffi.c (ffi_closure_helper_SYSV): Remove unused variable - and cast integer to void * if needed. Update the pointer to - the FP register saved area correctly. - -2006-02-17 Andreas Tobler - - * testsuite/libffi.call/nested_struct6.c: XFAIL this test until PR25630 - is fixed. - * testsuite/libffi.call/nested_struct4.c: Likewise. - -2006-02-16 Andreas Tobler - - * testsuite/libffi.call/return_dbl.c: New test case. - * testsuite/libffi.call/return_dbl1.c: Likewise. - * testsuite/libffi.call/return_dbl2.c: Likewise. - * testsuite/libffi.call/return_fl.c: Likewise. - * testsuite/libffi.call/return_fl1.c: Likewise. - * testsuite/libffi.call/return_fl2.c: Likewise. - * testsuite/libffi.call/return_fl3.c: Likewise. - * testsuite/libffi.call/closure_fn6.c: Likewise. - - * testsuite/libffi.call/nested_struct2.c: Remove ffi_type_mylong - definition. - * testsuite/libffi.call/ffitest.h: Add ffi_type_mylong definition - here to be used by other test cases too. - - * testsuite/libffi.call/nested_struct10.c: New test case. - * testsuite/libffi.call/nested_struct9.c: Likewise. - * testsuite/libffi.call/nested_struct8.c: Likewise. - * testsuite/libffi.call/nested_struct7.c: Likewise. - * testsuite/libffi.call/nested_struct6.c: Likewise. - * testsuite/libffi.call/nested_struct5.c: Likewise. - * testsuite/libffi.call/nested_struct4.c: Likewise. - -2006-01-21 Andreas Tobler - - * configure.ac: Enable libffi for sparc64-*-freebsd*. - * configure: Rebuilt. - -2006-01-18 Jakub Jelinek - - * src/powerpc/sysv.S (smst_two_register): Don't call __ashldi3, - instead do the shifting inline. - * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't compute %r5 - shift count unconditionally. Simplify load sequences for 1, 2, 3, 4 - and 8 byte structs, for the remaining struct sizes don't call - __lshrdi3, instead do the shifting inline. - -2005-12-07 Thiemo Seufer - - * src/mips/ffitarget.h: Remove obsolete sgidefs.h include. Add - missing parentheses. - * src/mips/o32.S (ffi_call_O32): Code formatting. Define - and use A3_OFF, FP_OFF, RA_OFF. Micro-optimizations. - (ffi_closure_O32): Likewise, but with newly defined A3_OFF2, - A2_OFF2, A1_OFF2, A0_OFF2, RA_OFF2, FP_OFF2, S0_OFF2, GP_OFF2, - V1_OFF2, V0_OFF2, FA_1_1_OFF2, FA_1_0_OFF2, FA_0_1_OFF2, - FA_0_0_OFF2. - * src/mips/ffi.c (ffi_prep_args): Code formatting. Fix - endianness bugs. - (ffi_prep_closure): Improve trampoline instruction scheduling. - (ffi_closure_mips_inner_O32): Fix endianness bugs. - -2005-12-03 Alan Modra - - * src/powerpc/ffi.c: Formatting. - (ffi_prep_args_SYSV): Avoid possible aliasing problems by using unions. - (ffi_prep_args64): Likewise. - -2005-09-30 Geoffrey Keating - - * testsuite/lib/libffi-dg.exp (libffi_target_compile): For - darwin, use -shared-libgcc not -lgcc_s, and explain why. - -2005-09-26 Tom Tromey - - * testsuite/libffi.call/float1.c (value_type): New typedef. - (CANARY): New define. - (main): Check for result buffer overflow. - * src/powerpc/linux64.S: Handle linux64 long double returns. - * src/powerpc/ffi.c (FLAG_RETURNS_128BITS): New constant. - (ffi_prep_cif_machdep): Handle linux64 long double returns. - -2005-08-25 Alan Modra - - PR target/23404 - * src/powerpc/ffi.c (ffi_prep_args_SYSV): Correct placement of stack - homed fp args. - (ffi_status ffi_prep_cif_machdep): Correct stack sizing for same. - -2005-08-11 Jakub Jelinek - - * configure.ac (HAVE_HIDDEN_VISIBILITY_ATTRIBUTE): New test. - (AH_BOTTOM): Add FFI_HIDDEN definition. - * configure: Rebuilt. - * fficonfig.h.in: Rebuilt. - * src/powerpc/ffi.c (hidden): Remove. - (ffi_closure_LINUX64, ffi_prep_args64, ffi_call_LINUX64, - ffi_closure_helper_LINUX64): Use FFI_HIDDEN instead of hidden. - * src/powerpc/linux64_closure.S (ffi_closure_LINUX64, - .ffi_closure_LINUX64): Use FFI_HIDDEN instead of .hidden. - * src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV): Remove, - add FFI_HIDDEN to its prototype. - (ffi_closure_SYSV_inner): New. - * src/x86/sysv.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New. - * src/x86/win32.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New. - -2005-08-10 Alfred M. Szmidt - - PR libffi/21819: - * configure: Rebuilt. - * configure.ac: Handle i*86-*-gnu*. - -2005-08-09 Jakub Jelinek - - * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Use - DW_CFA_offset_extended_sf rather than - DW_CFA_GNU_negative_offset_extended. - * src/powerpc/sysv.S (ffi_call_SYSV): Likewise. - -2005-07-22 SUGIOKA Toshinobu - - * src/sh/sysv.S (ffi_call_SYSV): Stop argument popping correctly - on sh3. - (ffi_closure_SYSV): Change the stack layout for sh3 struct argument. - * src/sh/ffi.c (ffi_prep_args): Fix sh3 argument copy, when it is - partially on register. - (ffi_closure_helper_SYSV): Likewise. - (ffi_prep_cif_machdep): Don't set too many cif->flags. - -2005-07-20 Kaz Kojima - - * src/sh/ffi.c (ffi_call): Handle small structures correctly. - Remove empty line. - * src/sh64/ffi.c (simple_type): Remove. - (return_type): Handle small structures correctly. - (ffi_prep_args): Likewise. - (ffi_call): Likewise. - (ffi_closure_helper_SYSV): Likewise. - * src/sh64/sysv.S (ffi_call_SYSV): Handle 1, 2 and 4-byte return. - Emit position independent code if PIC and remove wrong datalabel - prefixes from EH data. - -2005-07-19 Andreas Tobler - - * Makefile.am (nodist_libffi_la_SOURCES): Add POWERPC_FREEBSD. - * Makefile.in: Regenerate. - * include/Makefile.in: Likewise. - * testsuite/Makefile.in: Likewise. - * configure.ac: Add POWERPC_FREEBSD rules. - * configure: Regenerate. - * src/powerpc/ffitarget.h: Add POWERPC_FREEBSD rules. - (FFI_SYSV_TYPE_SMALL_STRUCT): Define. - * src/powerpc/ffi.c: Add flags to handle small structure returns - in ffi_call_SYSV. - (ffi_prep_cif_machdep): Handle small structures for SYSV 4 ABI. - Aka FFI_SYSV. - (ffi_closure_helper_SYSV): Likewise. - * src/powerpc/ppc_closure.S: Add return types for small structures. - * src/powerpc/sysv.S: Add bits to handle small structures for - final SYSV 4 ABI. - -2005-07-10 Andreas Tobler - - * testsuite/libffi.call/cls_5_1_byte.c: New test file. - * testsuite/libffi.call/cls_6_1_byte.c: Likewise. - * testsuite/libffi.call/cls_7_1_byte.c: Likewise. - -2005-07-05 Randolph Chung - - * src/pa/ffi.c (ffi_struct_type): Rename FFI_TYPE_SMALL_STRUCT1 - as FFI_TYPE_SMALL_STRUCT3. Break out handling for 5-7 byte - structures. Kill compilation warnings. - (ffi_closure_inner_LINUX): Print return values as hex in debug - message. Rename FFI_TYPE_SMALL_STRUCT1 as FFI_TYPE_SMALL_STRUCT3. - Properly handle 5-7 byte structure returns. - * src/pa/ffitarget.h (FFI_TYPE_SMALL_STRUCT1) - (FFI_TYPE_SMALL_STRUCT2): Remove. - (FFI_TYPE_SMALL_STRUCT3, FFI_TYPE_SMALL_STRUCT5) - (FFI_TYPE_SMALL_STRUCT6, FFI_TYPE_SMALL_STRUCT7): Define. - * src/pa/linux.S: Mark source file as using PA1.1 assembly. - (checksmst1, checksmst2): Remove. - (checksmst3): Optimize handling of 3-byte struct returns. - (checksmst567): Properly handle 5-7 byte struct returns. - -2005-06-15 Rainer Orth - - PR libgcj/21943 - * src/mips/n32.S: Enforce PIC code. - * src/mips/o32.S: Likewise. - -2005-06-15 Rainer Orth - - * configure.ac: Treat i*86-*-solaris2.10 and up as X86_64. - * configure: Regenerate. - -2005-06-01 Alan Modra - - * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't use JUMPTARGET - to call ffi_closure_helper_SYSV. Append @local instead. - * src/powerpc/sysv.S (ffi_call_SYSV): Likewise for ffi_prep_args_SYSV. - -2005-05-17 Kelley Cook - - * configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS. - Use AC_CHECK_SIZEOF instead of AC_COMPILE_CHECK_SIZEOF. - * Makefile.am (ACLOCAL_AMFLAGS): Remove -I ../config. - * aclocal.m4, configure, fficonfig.h.in, Makefile.in, - include/Makefile.in, testsuite/Makefile.in: Regenerate. - -2005-05-09 Mike Stump - - * configure: Regenerate. - -2005-05-08 Richard Henderson - - PR libffi/21285 - * src/alpha/osf.S: Update unwind into to match code. - -2005-05-04 Andreas Degert - Richard Henderson - - * src/x86/ffi64.c (ffi_prep_cif_machdep): Save sse-used flag in - bit 11 of flags. - (ffi_call): Mask return type field. Pass ssecount to ffi_call_unix64. - (ffi_prep_closure): Set carry bit if sse-used flag set. - * src/x86/unix64.S (ffi_call_unix64): Add ssecount argument. - Only load sse registers if ssecount non-zero. - (ffi_closure_unix64): Only save sse registers if carry set on entry. - -2005-04-29 Ralf Corsepius - - * configure.ac: Add i*86-*-rtems*, sparc*-*-rtems*, - powerpc-*rtems*, arm*-*-rtems*, sh-*-rtems*. - * configure: Regenerate. - -2005-04-20 Hans-Peter Nilsson - - * testsuite/lib/libffi-dg.exp (libffi-dg-test-1): In regsub use, - have Tcl8.3-compatible intermediate variable. - -2005-04-18 Simon Posnjak - Hans-Peter Nilsson - - * Makefile.am: Add CRIS support. - * configure.ac: Likewise. - * Makefile.in, configure, testsuite/Makefile.in, - include/Makefile.in: Regenerate. - * src/cris: New directory. - * src/cris/ffi.c, src/cris/sysv.S, src/cris/ffitarget.h: New files. - * src/prep_cif.c (ffi_prep_cif): Wrap in #ifndef __CRIS__. - - * testsuite/lib/libffi-dg.exp (libffi-dg-test-1): Replace \n with - \r?\n in output tests. - -2005-04-12 Mike Stump - - * configure: Regenerate. - -2005-03-30 Hans Boehm - - * src/ia64/ffitarget.h (ffi_arg): Use long long instead of DI. - -2005-03-30 Steve Ellcey - - * src/ia64/ffitarget.h (ffi_arg) ADD DI attribute. - (ffi_sarg) Ditto. - * src/ia64/unix.S (ffi_closure_unix): Extend gp - to 64 bits in ILP32 mode. - Load 64 bits even for short data. - -2005-03-23 Mike Stump - - * src/powerpc/darwin.S: Update for -m64 multilib. - * src/powerpc/darwin_closure.S: Likewise. - -2005-03-21 Zack Weinberg - - * configure.ac: Do not invoke TL_AC_GCC_VERSION. - Do not set tool_include_dir. - * aclocal.m4, configure, Makefile.in, testsuite/Makefile.in: - Regenerate. - * include/Makefile.am: Set gcc_version and toollibffidir. - * include/Makefile.in: Regenerate. - -2005-02-22 Andrew Haley - - * src/powerpc/ffi.c (ffi_prep_cif_machdep): Bump alignment to - odd-numbered register pairs for 64-bit integer types. - -2005-02-23 Andreas Tobler - - PR libffi/20104 - * testsuite/libffi.call/return_ll1.c: New test case. - -2005-02-11 Janis Johnson - - * testsuite/libffi.call/cls_align_longdouble.c: Remove dg-options. - * testsuite/libffi.call/float.c: Ditto. - * testsuite/libffi.call/float2.c: Ditto. - * testsuite/libffi.call/float3.c: Ditto. - -2005-02-08 Andreas Tobler - - * src/frv/ffitarget.h: Remove PPC stuff which does not belong to frv. - -2005-01-12 Eric Botcazou - - * testsuite/libffi.special/special.exp (cxx_options): Add - -shared-libgcc. - -2004-12-31 Richard Henderson - - * src/types.c (FFI_AGGREGATE_TYPEDEF): Remove. - (FFI_TYPEDEF): Rename from FFI_INTEGRAL_TYPEDEF. Replace size and - offset parameters with a type parameter; deduce size and structure - alignment. Update all users. - -2004-12-31 Richard Henderson - - * src/types.c (FFI_TYPE_POINTER): Define with sizeof. - (FFI_TYPE_LONGDOUBLE): Fix for ia64. - * src/ia64/ffitarget.h (struct ffi_ia64_trampoline_struct): Move - into ffi_prep_closure. - * src/ia64/ia64_flags.h, src/ia64/ffi.c, src/ia64/unix.S: Rewrite - from scratch. - -2004-12-27 Richard Henderson - - * src/x86/unix64.S: Fix typo in unwind info. - -2004-12-25 Richard Henderson - - * src/x86/ffi64.c (struct register_args): Rename from stackLayout. - (enum x86_64_reg_class): Add X86_64_COMPLEX_X87_CLASS. - (merge_classes): Check for it. - (SSE_CLASS_P): New. - (classify_argument): Pass byte_offset by value; perform all updates - inside struct case. - (examine_argument): Add classes argument; handle - X86_64_COMPLEX_X87_CLASS. - (ffi_prep_args): Merge into ... - (ffi_call): ... here. Share stack frame with ffi_call_unix64. - (ffi_prep_cif_machdep): Setup cif->flags for proper structure return. - (ffi_fill_return_value): Remove. - (ffi_prep_closure): Remove dead assert. - (ffi_closure_unix64_inner): Rename from ffi_closure_UNIX64_inner. - Rewrite to use struct register_args instead of va_list. Create - flags for handling structure returns. - * src/x86/unix64.S: Remove dead strings. - (ffi_call_unix64): Rename from ffi_call_UNIX64. Rewrite to share - stack frame with ffi_call. Handle structure returns properly. - (float2sse, floatfloat2sse, double2sse): Remove. - (sse2float, sse2double, sse2floatfloat): Remove. - (ffi_closure_unix64): Rename from ffi_closure_UNIX64. Rewrite - to handle structure returns properly. - -2004-12-08 David Edelsohn - - * Makefile.am (AM_MAKEFLAGS): Remove duplicate LIBCFLAGS and - PICFLAG. - * Makefile.in: Regenerated. - -2004-12-02 Richard Sandiford - - * configure.ac: Use TL_AC_GCC_VERSION to set gcc_version. - * configure, aclocal.m4, Makefile.in: Regenerate. - * include/Makefile.in, testsuite/Makefile.in: Regenerate. - -2004-11-29 Kelley Cook - - * configure: Regenerate for libtool change. - -2004-11-25 Kelley Cook - - * configure: Regenerate for libtool reversion. - -2004-11-24 Kelley Cook - - * configure: Regenerate for libtool change. - -2004-11-23 John David Anglin - - * testsuite/lib/libffi-dg.exp: Use new procs in target-libpath.exp. - -2004-11-23 Richard Sandiford - - * src/mips/o32.S (ffi_call_O32, ffi_closure_O32): Use jalr instead - of jal. Use an absolute encoding for the frame information. - -2004-11-23 Kelley Cook - - * Makefile.am: Remove no-dependencies. Add ACLOCAL_AMFLAGS. - * acinclude.m4: Delete logic for sincludes. - * aclocal.m4, Makefile.in, configure: Regenerate. - * include/Makefile: Likewise. - * testsuite/Makefile: Likewise. - -2004-11-22 Eric Botcazou - - * src/sparc/ffi.c (ffi_prep_closure): Align doubles and 64-bit integers - on a 8-byte boundary. - * src/sparc/v8.S (ffi_closure_v8): Reserve frame space for arguments. - -2004-10-27 Richard Earnshaw - - * src/arm/ffi.c (ffi_prep_cif_machdep): Handle functions that return - long long values. Round stack allocation to a multiple of 8 bytes - for ATPCS compatibility. - * src/arm/sysv.S (ffi_call_SYSV): Rework to avoid use of APCS register - names. Handle returning long long types. Add Thumb and interworking - support. Improve soft-float code. - -2004-10-27 Richard Earnshaw - - * testsuite/lib/libffi-db.exp (load_gcc_lib): New function. - (libffi_exit): New function. - (libffi_init): Build the testglue wrapper if needed. - -2004-10-25 Eric Botcazou - - PR other/18138 - * testsuite/lib/libffi-dg.exp: Accept more than one multilib libgcc. - -2004-10-25 Kazuhiro Inaoka - - * src/m32r/libffitarget.h (FFI_CLOSURES): Set to 0. - -2004-10-20 Kaz Kojima - - * src/sh/sysv.S (ffi_call_SYSV): Don't align for double data. - * testsuite/libffi.call/float3.c: New test case. - -2004-10-18 Kaz Kojima - - * src/sh/ffi.c (ffi_prep_closure): Set T bit in trampoline for - the function returning a structure pointed with R2. - * src/sh/sysv.S (ffi_closure_SYSV): Use R2 as the pointer to - the structure return value if T bit set. Emit position - independent code and EH data if PIC. - -2004-10-13 Kazuhiro Inaoka - - * Makefile.am: Add m32r support. - * configure.ac: Likewise. - * Makefile.in: Regenerate. - * confiugre: Regenerate. - * src/types.c: Add m32r port to FFI_INTERNAL_TYPEDEF - (uint64, sint64, double, longdouble) - * src/m32r: New directory. - * src/m32r/ffi.c: New file. - * src/m32r/sysv.S: Likewise. - * src/m32r/ffitarget.h: Likewise. - -2004-10-02 Kaz Kojima - - * testsuite/libffi.call/negint.c: New test case. - -2004-09-14 H.J. Lu - - PR libgcj/17465 - * testsuite/lib/libffi-dg.exp: Don't use global ld_library_path. - Set up LD_LIBRARY_PATH, SHLIB_PATH, LD_LIBRARYN32_PATH, - LD_LIBRARY64_PATH, LD_LIBRARY_PATH_32, LD_LIBRARY_PATH_64 and - DYLD_LIBRARY_PATH. - -2004-09-05 Andreas Tobler - - * testsuite/libffi.call/many_win32.c: Remove whitespaces. - * testsuite/libffi.call/promotion.c: Likewise. - * testsuite/libffi.call/return_ll.c: Remove unused var. Cleanup - whitespaces. - * testsuite/libffi.call/return_sc.c: Likewise. - * testsuite/libffi.call/return_uc.c: Likewise. - -2004-09-05 Andreas Tobler - - * src/powerpc/darwin.S: Fix comments and identation. - * src/powerpc/darwin_closure.S: Likewise. - -2004-09-02 Andreas Tobler - - * src/powerpc/ffi_darwin.c: Add flag for longdouble return values. - (ffi_prep_args): Handle longdouble arguments. - (ffi_prep_cif_machdep): Set flags for longdouble. Calculate space for - longdouble. - (ffi_closure_helper_DARWIN): Add closure handling for longdouble. - * src/powerpc/darwin.S (_ffi_call_DARWIN): Add handling of longdouble - values. - * src/powerpc/darwin_closure.S (_ffi_closure_ASM): Likewise. - * src/types.c: Defined longdouble size and alignment for darwin. - -2004-09-02 Andreas Tobler - - * src/powerpc/aix.S: Remove whitespaces. - * src/powerpc/aix_closure.S: Likewise. - * src/powerpc/asm.h: Likewise. - * src/powerpc/ffi.c: Likewise. - * src/powerpc/ffitarget.h: Likewise. - * src/powerpc/linux64.S: Likewise. - * src/powerpc/linux64_closure.S: Likewise. - * src/powerpc/ppc_closure.S: Likewise. - * src/powerpc/sysv.S: Likewise. - -2004-08-30 Anthony Green - - * Makefile.am: Add frv support. - * Makefile.in, testsuite/Makefile.in: Rebuilt. - * configure.ac: Read configure.host. - * configure.in: Read configure.host. - * configure.host: New file. frv-elf needs libgloss. - * include/ffi.h.in: Force ffi_closure to have a nice big (8) - alignment. This is needed to frv and shouldn't harm the others. - * include/ffi_common.h (ALIGN_DOWN): New macro. - * src/frv/ffi.c, src/frv/ffitarget.h, src/frv/eabi.S: New files. - -2004-08-24 David Daney - - * testsuite/libffi.call/closure_fn0.c: Xfail mips64* instead of mips*. - * testsuite/libffi.call/closure_fn1.c: Likewise. - * testsuite/libffi.call/closure_fn2.c Likewise. - * testsuite/libffi.call/closure_fn3.c: Likewise. - * testsuite/libffi.call/closure_fn4.c: Likewise. - * testsuite/libffi.call/closure_fn5.c: Likewise. - * testsuite/libffi.call/cls_18byte.c: Likewise. - * testsuite/libffi.call/cls_19byte.c: Likewise. - * testsuite/libffi.call/cls_1_1byte.c: Likewise. - * testsuite/libffi.call/cls_20byte.c: Likewise. - * testsuite/libffi.call/cls_20byte1.c: Likewise. - * testsuite/libffi.call/cls_24byte.c: Likewise. - * testsuite/libffi.call/cls_2byte.c: Likewise. - * testsuite/libffi.call/cls_3_1byte.c: Likewise. - * testsuite/libffi.call/cls_3byte1.c: Likewise. - * testsuite/libffi.call/cls_3byte2.c: Likewise. - * testsuite/libffi.call/cls_4_1byte.c: Likewise. - * testsuite/libffi.call/cls_4byte.c: Likewise. - * testsuite/libffi.call/cls_64byte.c: Likewise. - * testsuite/libffi.call/cls_6byte.c: Likewise. - * testsuite/libffi.call/cls_7byte.c: Likewise. - * testsuite/libffi.call/cls_8byte.c: Likewise. - * testsuite/libffi.call/cls_9byte1.c: Likewise. - * testsuite/libffi.call/cls_9byte2.c: Likewise. - * testsuite/libffi.call/cls_align_double.c: Likewise. - * testsuite/libffi.call/cls_align_float.c: Likewise. - * testsuite/libffi.call/cls_align_longdouble.c: Likewise. - * testsuite/libffi.call/cls_align_pointer.c: Likewise. - * testsuite/libffi.call/cls_align_sint16.c: Likewise. - * testsuite/libffi.call/cls_align_sint32.c: Likewise. - * testsuite/libffi.call/cls_align_sint64.c: Likewise. - * testsuite/libffi.call/cls_align_uint16.c: Likewise. - * testsuite/libffi.call/cls_align_uint32.c: Likewise. - * testsuite/libffi.call/cls_align_uint64.c: Likewise. - * testsuite/libffi.call/cls_double.c: Likewise. - * testsuite/libffi.call/cls_float.c: Likewise. - * testsuite/libffi.call/cls_multi_schar.c: Likewise. - * testsuite/libffi.call/cls_multi_sshort.c: Likewise. - * testsuite/libffi.call/cls_multi_sshortchar.c: Likewise. - * testsuite/libffi.call/cls_multi_uchar.c: Likewise. - * testsuite/libffi.call/cls_multi_ushort.c: Likewise. - * testsuite/libffi.call/cls_multi_ushortchar.c: Likewise. - * testsuite/libffi.call/cls_schar.c: Likewise. - * testsuite/libffi.call/cls_sint.c: Likewise. - * testsuite/libffi.call/cls_sshort.c: Likewise. - * testsuite/libffi.call/cls_uchar.c: Likewise. - * testsuite/libffi.call/cls_uint.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/cls_ushort.c: Likewise. - * testsuite/libffi.call/nested_struct.c: Likewise. - * testsuite/libffi.call/nested_struct1.c: Likewise. - * testsuite/libffi.call/nested_struct2.c: Likewise. - * testsuite/libffi.call/nested_struct3.c: Likewise. - * testsuite/libffi.call/problem1.c: Likewise. - * testsuite/libffi.special/unwindtest.cc: Likewise. - * testsuite/libffi.call/cls_12byte.c: Likewise and set return value - to zero. - * testsuite/libffi.call/cls_16byte.c: Likewise. - * testsuite/libffi.call/cls_5byte.c: Likewise. - -2004-08-23 David Daney - - PR libgcj/13141 - * src/mips/ffitarget.h (FFI_O32_SOFT_FLOAT): New ABI. - * src/mips/ffi.c (ffi_prep_args): Fix alignment calculation. - (ffi_prep_cif_machdep): Handle FFI_O32_SOFT_FLOAT floating point - parameters and return types. - (ffi_call): Handle FFI_O32_SOFT_FLOAT ABI. - (ffi_prep_closure): Ditto. - (ffi_closure_mips_inner_O32): Handle FFI_O32_SOFT_FLOAT ABI, fix - alignment calculations. - * src/mips/o32.S (ffi_closure_O32): Don't use floating point - instructions if FFI_O32_SOFT_FLOAT, make stack frame ABI compliant. - -2004-08-14 Casey Marshall - - * src/mips/ffi.c (ffi_pref_cif_machdep): set `cif->flags' to - contain `FFI_TYPE_UINT64' as return type for any 64-bit - integer (O32 ABI only). - (ffi_prep_closure): new function. - (ffi_closure_mips_inner_O32): new function. - * src/mips/ffitarget.h: Define `FFI_CLOSURES' and - `FFI_TRAMPOLINE_SIZE' appropriately if the ABI is o32. - * src/mips/o32.S (ffi_call_O32): add labels for .eh_frame. Return - 64 bit integers correctly. - (ffi_closure_O32): new function. - Added DWARF-2 unwind info for both functions. - -2004-08-10 Andrew Haley - - * src/x86/ffi64.c (ffi_prep_args ): 8-align all stack arguments. - -2004-08-01 Robert Millan - - * configure.ac: Detect knetbsd-gnu and kfreebsd-gnu. - * configure: Regenerate. - -2004-07-30 Maciej W. Rozycki - - * acinclude.m4 (AC_FUNC_MMAP_BLACKLIST): Check for - and mmap() explicitly instead of relying on preset autoconf cache - variables. - * aclocal.m4: Regenerate. - * configure: Regenerate. - -2004-07-11 Ulrich Weigand - - * src/s390/ffi.c (ffi_prep_args): Fix C aliasing violation. - (ffi_check_float_struct): Remove unused prototype. - -2004-06-30 Geoffrey Keating - - * src/powerpc/ffi_darwin.c (flush_icache): ';' is a comment - character on Darwin, use '\n\t' instead. - -2004-06-26 Matthias Klose - - * libtool-version: Fix typo in revision/age. - -2004-06-17 Matthias Klose - - * libtool-version: New. - * Makefile.am (libffi_la_LDFLAGS): Use -version-info for soname. - * Makefile.in: Regenerate. - -2004-06-15 Paolo Bonzini - - * Makefile.am: Remove useless multilib rules. - * Makefile.in: Regenerate. - * aclocal.m4: Regenerate with automake 1.8.5. - * configure.ac: Remove useless multilib configury. - * configure: Regenerate. - -2004-06-15 Paolo Bonzini - - * .cvsignore: New file. - -2004-06-10 Jakub Jelinek - - * src/ia64/unix.S (ffi_call_unix): Insert group barrier break - fp_done. - (ffi_closure_UNIX): Fix f14/f15 adjustment if FLOAT_SZ is ever - changed from 8. - -2004-06-06 Sean McNeil - - * configure.ac: Add x86_64-*-freebsd* support. - * configure: Regenerate. - -2004-04-26 Joe Buck - - Bug 15093 - * configure.ac: Test for existence of mmap and sys/mman.h before - checking blacklist. Fix suggested by Jim Wilson. - * configure: Regenerate. - -2004-04-26 Matt Austern - - * src/powerpc/darwin.S: Go through a non-lazy pointer for initial - FDE location. - * src/powerpc/darwin_closure.S: Likewise. - -2004-04-24 Andreas Tobler - - * testsuite/libffi.call/cls_multi_schar.c (main): Fix initialization - error. Reported by Thomas Heller . - * testsuite/libffi.call/cls_multi_sshort.c (main): Likewise. - * testsuite/libffi.call/cls_multi_ushort.c (main): Likewise. - -2004-03-20 Matthias Klose - - * src/pa/linux.S: Fix typo. - -2004-03-19 Matthias Klose - - * Makefile.am: Update. - * Makefile.in: Regenerate. - * src/pa/ffi.h.in: Remove. - * src/pa/ffitarget.h: New file. - -2004-02-10 Randolph Chung - - * Makefile.am: Add PA support. - * Makefile.in: Regenerate. - * include/Makefile.in: Regenerate. - * configure.ac: Add PA target. - * configure: Regenerate. - * src/pa/ffi.c: New file. - * src/pa/ffi.h.in: Add PA support. - * src/pa/linux.S: New file. - * prep_cif.c: Add PA support. - -2004-03-16 Hosaka Yuji - - * src/types.c: Fix alignment size of X86_WIN32 case int64 and - double. - * src/x86/ffi.c (ffi_prep_args): Replace ecif->cif->rtype->type - with ecif->cif->flags. - (ffi_call, ffi_prep_incoming_args_SYSV): Replace cif->rtype->type - with cif->flags. - (ffi_prep_cif_machdep): Add X86_WIN32 struct case. - (ffi_closure_SYSV): Add 1 or 2-bytes struct case for X86_WIN32. - * src/x86/win32.S (retstruct1b, retstruct2b, sc_retstruct1b, - sc_retstruct2b): Add for 1 or 2-bytes struct case. - -2004-03-15 Kelley Cook - - * configure.in: Rename file to ... - * configure.ac: ... this. - * fficonfig.h.in: Regenerate. - * Makefile.in: Regenerate. - * include/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2004-03-12 Matt Austern - - * src/powerpc/darwin.S: Fix EH information so it corresponds to - changes in EH format resulting from addition of linkonce support. - * src/powerpc/darwin_closure.S: Likewise. - -2004-03-11 Andreas Tobler - Paolo Bonzini - - * Makefile.am (AUTOMAKE_OPTIONS): Set them. - Remove VPATH. Remove rules for object files. Remove multilib support. - (AM_CCASFLAGS): Add. - * configure.in (AC_CONFIG_HEADERS): Relace AM_CONFIG_HEADER. - (AC_PREREQ): Bump version to 2.59. - (AC_INIT): Fill with version info and bug address. - (ORIGINAL_LD_FOR_MULTILIBS): Remove. - (AM_ENABLE_MULTILIB): Use this instead of AC_ARG_ENABLE. - De-precious CC so that the right flags are passed down to multilibs. - (AC_MSG_ERROR): Replace obsolete macro AC_ERROR. - (AC_CONFIG_FILES): Replace obsolete macro AC_LINK_FILES. - (AC_OUTPUT): Reorganize the output with AC_CONFIG_COMMANDS. - * configure: Rebuilt. - * aclocal.m4: Likewise. - * Makefile.in, include/Makefile.in, testsuite/Makefile.in: Likewise. - * fficonfig.h.in: Likewise. - -2004-03-11 Andreas Schwab - - * src/ia64/ffi.c (ffi_prep_incoming_args_UNIX): Get floating point - arguments from fp registers only for the first 8 parameter slots. - Don't convert a float parameter when passed in memory. - -2004-03-09 Hans-Peter Nilsson - - * configure: Regenerate for config/accross.m4 correction. - -2004-02-25 Matt Kraai - - * src/powerpc/ffi.c (ffi_prep_args_SYSV): Change - ecif->cif->bytes to bytes. - (ffi_prep_cif_machdep): Add braces around nested if statement. - -2004-02-09 Alan Modra - - * src/types.c (pointer): POWERPC64 has 8 byte pointers. - - * src/powerpc/ffi.c (ffi_prep_args64): Correct long double handling. - (ffi_closure_helper_LINUX64): Fix typo. - * testsuite/libffi.call/cls_align_longdouble.c: Pass -mlong-double-128 - for powerpc64-*-*. - * testsuite/libffi.call/float.c: Likewise. - * testsuite/libffi.call/float2.c: Likewise. - -2004-02-08 Alan Modra - - * src/powerpc/ffi.c (ffi_prep_cif_machdep ): Correct - long double function return and long double arg handling. - (ffi_closure_helper_LINUX64): Formatting. Delete unused "ng" var. - Use "end_pfr" instead of "nf". Correct long double handling. - Localise "temp". - * src/powerpc/linux64.S (ffi_call_LINUX64): Save f2 long double - return value. - * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Allocate - space for long double return value. Adjust stack frame and offsets. - Load f2 long double return. - -2004-02-07 Alan Modra - - * src/types.c: Use 16 byte long double for POWERPC64. - -2004-01-25 Eric Botcazou - - * src/sparc/ffi.c (ffi_prep_args_v9): Shift the parameter array - when the structure return address is passed in %o0. - (ffi_V9_return_struct): Rename into ffi_v9_layout_struct. - (ffi_v9_layout_struct): Align the field following a nested structure - on a word boundary. Use memmove instead of memcpy. - (ffi_call): Update call to ffi_V9_return_struct. - (ffi_prep_closure): Define 'ctx' only for V8. - (ffi_closure_sparc_inner): Clone into ffi_closure_sparc_inner_v8 - and ffi_closure_sparc_inner_v9. - (ffi_closure_sparc_inner_v8): Return long doubles by reference. - Always skip the structure return address. For structures and long - doubles, copy the argument directly. - (ffi_closure_sparc_inner_v9): Skip the structure return address only - if required. Shift the maximum floating-point slot accordingly. For - big structures, copy the argument directly; otherwise, left-justify the - argument and call ffi_v9_layout_struct to lay out the structure on - the stack. - * src/sparc/v8.S: Undef STACKFRAME before defining it. - (ffi_closure_v8): Pass the structure return address. Update call to - ffi_closure_sparc_inner_v8. Short-circuit FFI_TYPE_INT handling. - Skip the 'unimp' insn when returning long doubles and structures. - * src/sparc/v9.S: Undef STACKFRAME before defining it. - (ffi_closure_v9): Increase the frame size by 2 words. Short-circuit - FFI_TYPE_INT handling. Load structures both in integers and - floating-point registers on return. - * README: Update status of the SPARC port. - -2004-01-24 Andreas Tobler - - * testsuite/libffi.call/pyobjc-tc.c (main): Treat result value - as of type ffi_arg. - * testsuite/libffi.call/struct3.c (main): Fix CHECK. - -2004-01-22 Ulrich Weigand - - * testsuite/libffi.call/cls_uint.c (cls_ret_uint_fn): Treat result - value as of type ffi_arg, not unsigned int. - -2004-01-21 Michael Ritzert - - * ffi64.c (ffi_prep_args): Cast the RHS of an assignment instead - of the LHS. - -2004-01-12 Andreas Tobler - - * testsuite/lib/libffi-dg.exp: Set LD_LIBRARY_PATH_32 for - Solaris. - -2004-01-08 Rainer Orth - - * testsuite/libffi.call/ffitest.h (allocate_mmap): Cast MAP_FAILED - to void *. - -2003-12-10 Richard Henderson - - * testsuite/libffi.call/cls_align_pointer.c: Cast pointers to - size_t instead of int. - -2003-12-04 Hosaka Yuji - - * testsuite/libffi.call/many_win32.c: Include . - * testsuite/libffi.call/many_win32.c (main): Replace variable - int i with unsigned long ul. - - * testsuite/libffi.call/cls_align_uint64.c: New test case. - * testsuite/libffi.call/cls_align_sint64.c: Likewise. - * testsuite/libffi.call/cls_align_uint32.c: Likewise. - * testsuite/libffi.call/cls_align_sint32.c: Likewise. - * testsuite/libffi.call/cls_align_uint16.c: Likewise. - * testsuite/libffi.call/cls_align_sint16.c: Likewise. - * testsuite/libffi.call/cls_align_float.c: Likewise. - * testsuite/libffi.call/cls_align_double.c: Likewise. - * testsuite/libffi.call/cls_align_longdouble.c: Likewise. - * testsuite/libffi.call/cls_align_pointer.c: Likewise. - -2003-12-02 Hosaka Yuji - - PR other/13221 - * src/x86/ffi.c (ffi_prep_args, ffi_prep_incoming_args_SYSV): - Align arguments to 32 bits. - -2003-12-01 Andreas Tobler - - PR other/13221 - * testsuite/libffi.call/cls_multi_sshort.c: New test case. - * testsuite/libffi.call/cls_multi_sshortchar.c: Likewise. - * testsuite/libffi.call/cls_multi_uchar.c: Likewise. - * testsuite/libffi.call/cls_multi_schar.c: Likewise. - * testsuite/libffi.call/cls_multi_ushortchar.c: Likewise. - * testsuite/libffi.call/cls_multi_ushort.c: Likewise. - - * testsuite/libffi.special/unwindtest.cc: Cosmetics. - -2003-11-26 Kaveh R. Ghazi - - * testsuite/libffi.call/ffitest.h: Include . - * testsuite/libffi.special/ffitestcxx.h: Likewise. - -2003-11-22 Andreas Tobler - - * Makefile.in: Rebuilt. - * configure: Likewise. - * testsuite/libffi.special/unwindtest.cc: Convert the mmap to - the right type. - -2003-11-21 Andreas Jaeger - Andreas Tobler - - * acinclude.m4: Add AC_FUNC_MMAP_BLACKLIST. - * configure.in: Call AC_FUNC_MMAP_BLACKLIST. - * Makefile.in: Rebuilt. - * aclocal.m4: Likewise. - * configure: Likewise. - * fficonfig.h.in: Likewise. - * testsuite/lib/libffi-dg.exp: Add include dir. - * testsuite/libffi.call/ffitest.h: Add MMAP definitions. - * testsuite/libffi.special/ffitestcxx.h: Likewise. - * testsuite/libffi.call/closure_fn0.c: Use MMAP functionality - for ffi_closure if available. - * testsuite/libffi.call/closure_fn1.c: Likewise. - * testsuite/libffi.call/closure_fn2.c: Likewise. - * testsuite/libffi.call/closure_fn3.c: Likewise. - * testsuite/libffi.call/closure_fn4.c: Likewise. - * testsuite/libffi.call/closure_fn5.c: Likewise. - * testsuite/libffi.call/cls_12byte.c: Likewise. - * testsuite/libffi.call/cls_16byte.c: Likewise. - * testsuite/libffi.call/cls_18byte.c: Likewise. - * testsuite/libffi.call/cls_19byte.c: Likewise. - * testsuite/libffi.call/cls_1_1byte.c: Likewise. - * testsuite/libffi.call/cls_20byte.c: Likewise. - * testsuite/libffi.call/cls_20byte1.c: Likewise. - * testsuite/libffi.call/cls_24byte.c: Likewise. - * testsuite/libffi.call/cls_2byte.c: Likewise. - * testsuite/libffi.call/cls_3_1byte.c: Likewise. - * testsuite/libffi.call/cls_3byte1.c: Likewise. - * testsuite/libffi.call/cls_3byte2.c: Likewise. - * testsuite/libffi.call/cls_4_1byte.c: Likewise. - * testsuite/libffi.call/cls_4byte.c: Likewise. - * testsuite/libffi.call/cls_5byte.c: Likewise. - * testsuite/libffi.call/cls_64byte.c: Likewise. - * testsuite/libffi.call/cls_6byte.c: Likewise. - * testsuite/libffi.call/cls_7byte.c: Likewise. - * testsuite/libffi.call/cls_8byte.c: Likewise. - * testsuite/libffi.call/cls_9byte1.c: Likewise. - * testsuite/libffi.call/cls_9byte2.c: Likewise. - * testsuite/libffi.call/cls_double.c: Likewise. - * testsuite/libffi.call/cls_float.c: Likewise. - * testsuite/libffi.call/cls_schar.c: Likewise. - * testsuite/libffi.call/cls_sint.c: Likewise. - * testsuite/libffi.call/cls_sshort.c: Likewise. - * testsuite/libffi.call/cls_uchar.c: Likewise. - * testsuite/libffi.call/cls_uint.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/cls_ushort.c: Likewise. - * testsuite/libffi.call/nested_struct.c: Likewise. - * testsuite/libffi.call/nested_struct1.c: Likewise. - * testsuite/libffi.call/nested_struct2.c: Likewise. - * testsuite/libffi.call/nested_struct3.c: Likewise. - * testsuite/libffi.call/problem1.c: Likewise. - * testsuite/libffi.special/unwindtest.cc: Likewise. - -2003-11-20 Andreas Tobler - - * testsuite/lib/libffi-dg.exp: Make the -lgcc_s conditional. - -2003-11-19 Andreas Tobler - - * testsuite/lib/libffi-dg.exp: Add DYLD_LIBRARY_PATH for darwin. - Add -lgcc_s to additional flags. - -2003-11-12 Andreas Tobler - - * configure.in, include/Makefile.am: PR libgcj/11147, install - the ffitarget.h header file in a gcc versioned and target - dependent place. - * configure: Regenerated. - * Makefile.in, include/Makefile.in: Likewise. - * testsuite/Makefile.in: Likewise. - -2003-11-09 Andreas Tobler - - * testsuite/libffi.call/closure_fn0.c: Print result and check - with dg-output to make debugging easier. - * testsuite/libffi.call/closure_fn1.c: Likewise. - * testsuite/libffi.call/closure_fn2.c: Likewise. - * testsuite/libffi.call/closure_fn3.c: Likewise. - * testsuite/libffi.call/closure_fn4.c: Likewise. - * testsuite/libffi.call/closure_fn5.c: Likewise. - * testsuite/libffi.call/cls_12byte.c: Likewise. - * testsuite/libffi.call/cls_16byte.c: Likewise. - * testsuite/libffi.call/cls_18byte.c: Likewise. - * testsuite/libffi.call/cls_19byte.c: Likewise. - * testsuite/libffi.call/cls_1_1byte.c: Likewise. - * testsuite/libffi.call/cls_20byte.c: Likewise. - * testsuite/libffi.call/cls_20byte1.c: Likewise. - * testsuite/libffi.call/cls_24byte.c: Likewise. - * testsuite/libffi.call/cls_2byte.c: Likewise. - * testsuite/libffi.call/cls_3_1byte.c: Likewise. - * testsuite/libffi.call/cls_3byte1.c: Likewise. - * testsuite/libffi.call/cls_3byte2.c: Likewise. - * testsuite/libffi.call/cls_4_1byte.c: Likewise. - * testsuite/libffi.call/cls_4byte.c: Likewise. - * testsuite/libffi.call/cls_5byte.c: Likewise. - * testsuite/libffi.call/cls_64byte.c: Likewise. - * testsuite/libffi.call/cls_6byte.c: Likewise. - * testsuite/libffi.call/cls_7byte.c: Likewise. - * testsuite/libffi.call/cls_8byte.c: Likewise. - * testsuite/libffi.call/cls_9byte1.c: Likewise. - * testsuite/libffi.call/cls_9byte2.c: Likewise. - * testsuite/libffi.call/cls_double.c: Likewise. - * testsuite/libffi.call/cls_float.c: Likewise. - * testsuite/libffi.call/cls_schar.c: Likewise. - * testsuite/libffi.call/cls_sint.c: Likewise. - * testsuite/libffi.call/cls_sshort.c: Likewise. - * testsuite/libffi.call/cls_uchar.c: Likewise. - * testsuite/libffi.call/cls_uint.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/cls_ushort.c: Likewise. - * testsuite/libffi.call/problem1.c: Likewise. - - * testsuite/libffi.special/unwindtest.cc: Make ffi_closure - static. - -2003-11-08 Andreas Tobler - - * testsuite/libffi.call/cls_9byte2.c: New test case. - * testsuite/libffi.call/cls_9byte1.c: Likewise. - * testsuite/libffi.call/cls_64byte.c: Likewise. - * testsuite/libffi.call/cls_20byte1.c: Likewise. - * testsuite/libffi.call/cls_19byte.c: Likewise. - * testsuite/libffi.call/cls_18byte.c: Likewise. - * testsuite/libffi.call/closure_fn4.c: Likewise. - * testsuite/libffi.call/closure_fn5.c: Likewise. - * testsuite/libffi.call/cls_schar.c: Likewise. - * testsuite/libffi.call/cls_sint.c: Likewise. - * testsuite/libffi.call/cls_sshort.c: Likewise. - * testsuite/libffi.call/nested_struct2.c: Likewise. - * testsuite/libffi.call/nested_struct3.c: Likewise. - -2003-11-08 Andreas Tobler - - * testsuite/libffi.call/cls_double.c: Do a check on the result. - * testsuite/libffi.call/cls_uchar.c: Likewise. - * testsuite/libffi.call/cls_uint.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/cls_ushort.c: Likewise. - * testsuite/libffi.call/return_sc.c: Cleanup whitespaces. - -2003-11-06 Andreas Tobler - - * src/prep_cif.c (ffi_prep_cif): Move the validity check after - the initialization. - -2003-10-23 Andreas Tobler - - * src/java_raw_api.c (ffi_java_ptrarray_to_raw): Replace - FFI_ASSERT(FALSE) with FFI_ASSERT(0). - -2003-10-22 David Daney - - * src/mips/ffitarget.h: Replace undefined UINT32 and friends with - __attribute__((__mode__(__SI__))) and friends. - -2003-10-22 Andreas Schwab - - * src/ia64/ffi.c: Replace FALSE/TRUE with false/true. - -2003-10-21 Andreas Tobler - - * configure.in: AC_LINK_FILES(ffitarget.h). - * configure: Regenerate. - * Makefile.in: Likewise. - * include/Makefile.in: Likewise. - * testsuite/Makefile.in: Likewise. - * fficonfig.h.in: Likewise. - -2003-10-21 Paolo Bonzini - Richard Henderson - - Avoid that ffi.h includes fficonfig.h. - - * Makefile.am (EXTRA_DIST): Include ffitarget.h files - (TARGET_SRC_MIPS_GCC): Renamed to TARGET_SRC_MIPS_IRIX. - (TARGET_SRC_MIPS_SGI): Removed. - (MIPS_GCC): Renamed to TARGET_SRC_MIPS_IRIX. - (MIPS_SGI): Removed. - (CLEANFILES): Removed. - (mostlyclean-am, clean-am, mostlyclean-sub, clean-sub): New - targets. - * acconfig.h: Removed. - * configure.in: Compute sizeofs only for double and long double. - Use them to define and subst HAVE_LONG_DOUBLE. Include comments - into AC_DEFINE instead of using acconfig.h. Create - include/ffitarget.h instead of include/fficonfig.h. Rename - MIPS_GCC to MIPS_IRIX, drop MIPS_SGI since we are in gcc's tree. - AC_DEFINE EH_FRAME_FLAGS. - * include/Makefile.am (DISTCLEANFILES): New automake macro. - (hack_DATA): Add ffitarget.h. - * include/ffi.h.in: Remove all system specific definitions. - Declare raw API even if it is not installed, why bother? - Use limits.h instead of SIZEOF_* to define ffi_type_*. Do - not define EH_FRAME_FLAGS, it is in fficonfig.h now. Include - ffitarget.h instead of fficonfig.h. Remove ALIGN macro. - (UINT_ARG, INT_ARG): Removed, use ffi_arg and ffi_sarg instead. - * include/ffi_common.h (bool): Do not define. - (ffi_assert): Accept failed assertion. - (ffi_type_test): Return void and accept file/line. - (FFI_ASSERT): Pass stringized failed assertion. - (FFI_ASSERT_AT): New macro. - (FFI_ASSERT_VALID_TYPE): New macro. - (UINT8, SINT8, UINT16, SINT16, UINT32, SINT32, - UINT64, SINT64): Define here with gcc's __attribute__ macro - instead of in ffi.h - (FLOAT32, ALIGN): Define here instead of in ffi.h - * include/ffi-mips.h: Removed. Its content moved to - src/mips/ffitarget.h after separating assembly and C sections. - * src/alpha/ffi.c, src/alpha/ffi.c, src/java_raw_api.c - src/prep_cif.c, src/raw_api.c, src/ia64/ffi.c, - src/mips/ffi.c, src/mips/n32.S, src/mips/o32.S, - src/mips/ffitarget.h, src/sparc/ffi.c, src/x86/ffi64.c: - SIZEOF_ARG -> FFI_SIZEOF_ARG. - * src/ia64/ffi.c: Include stdbool.h (provided by GCC 2.95+). - * src/debug.c (ffi_assert): Accept stringized failed assertion. - (ffi_type_test): Rewritten. - * src/prep-cif.c (initialize_aggregate, ffi_prep_cif): Call - FFI_ASSERT_VALID_TYPE. - * src/alpha/ffitarget.h, src/arm/ffitarget.h, - src/ia64/ffitarget.h, src/m68k/ffitarget.h, - src/mips/ffitarget.h, src/powerpc/ffitarget.h, - src/s390/ffitarget.h, src/sh/ffitarget.h, - src/sh64/ffitarget.h, src/sparc/ffitarget.h, - src/x86/ffitarget.h: New files. - * src/alpha/osf.S, src/arm/sysv.S, src/ia64/unix.S, - src/m68k/sysv.S, src/mips/n32.S, src/mips/o32.S, - src/powerpc/aix.S, src/powerpc/darwin.S, - src/powerpc/ffi_darwin.c, src/powerpc/linux64.S, - src/powerpc/linux64_closure.S, src/powerpc/ppc_closure.S, - src/powerpc/sysv.S, src/s390/sysv.S, src/sh/sysv.S, - src/sh64/sysv.S, src/sparc/v8.S, src/sparc/v9.S, - src/x86/sysv.S, src/x86/unix64.S, src/x86/win32.S: - include fficonfig.h - -2003-10-20 Rainer Orth - - * src/mips/ffi.c: Use _ABIN32, _ABIO32 instead of external - _MIPS_SIM_NABI32, _MIPS_SIM_ABI32. - -2003-10-19 Andreas Tobler - - * src/powerpc/ffi_darwin.c (ffi_prep_args): Declare bytes again. - Used when FFI_DEBUG = 1. - -2003-10-14 Alan Modra - - * src/types.c (double, longdouble): Default POWERPC64 to 8 byte size - and align. - -2003-10-06 Rainer Orth - - * include/ffi_mips.h: Define FFI_MIPS_N32 for N32/N64 ABIs, - FFI_MIPS_O32 for O32 ABI. - -2003-10-01 Andreas Tobler - - * testsuite/lib/libffi-dg.exp: Set LD_LIBRARY_PATH_64 for - SPARC64. Cleanup whitespaces. - -2003-09-19 Andreas Tobler - - * testsuite/libffi.call/closure_fn0.c: Xfail mips, arm, - strongarm, xscale. Cleanup whitespaces. - * testsuite/libffi.call/closure_fn1.c: Likewise. - * testsuite/libffi.call/closure_fn2.c: Likewise. - * testsuite/libffi.call/closure_fn3.c: Likewise. - * testsuite/libffi.call/cls_12byte.c: Likewise. - * testsuite/libffi.call/cls_16byte.c: Likewise. - * testsuite/libffi.call/cls_1_1byte.c: Likewise. - * testsuite/libffi.call/cls_20byte.c: Likewise. - * testsuite/libffi.call/cls_24byte.c: Likewise. - * testsuite/libffi.call/cls_2byte.c: Likewise. - * testsuite/libffi.call/cls_3_1byte.c: Likewise. - * testsuite/libffi.call/cls_3byte1.c: Likewise. - * testsuite/libffi.call/cls_3byte2.c: Likewise. - * testsuite/libffi.call/cls_4_1byte.c: Likewise. - * testsuite/libffi.call/cls_4byte.c: Likewise. - * testsuite/libffi.call/cls_5byte.c: Likewise. - * testsuite/libffi.call/cls_6byte.c: Likewise. - * testsuite/libffi.call/cls_7byte.c: Likewise. - * testsuite/libffi.call/cls_8byte.c: Likewise. - * testsuite/libffi.call/cls_double.c: Likewise. - * testsuite/libffi.call/cls_float.c: Likewise. - * testsuite/libffi.call/cls_uchar.c: Likewise. - * testsuite/libffi.call/cls_uint.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/cls_ushort.c: Likewise. - * testsuite/libffi.call/nested_struct.c: Likewise. - * testsuite/libffi.call/nested_struct1.c: Likewise. - * testsuite/libffi.call/problem1.c: Likewise. - * testsuite/libffi.special/unwindtest.cc: Likewise. - * testsuite/libffi.call/pyobjc-tc.c: Cleanup whitespaces. - -2003-09-18 David Edelsohn - - * src/powerpc/aix.S: Cleanup whitespaces. - * src/powerpc/aix_closure.S: Likewise. - -2003-09-18 Andreas Tobler - - * src/powerpc/darwin.S: Cleanup whitespaces, comment formatting. - * src/powerpc/darwin_closure.S: Likewise. - * src/powerpc/ffi_darwin.c: Likewise. - -2003-09-18 Andreas Tobler - David Edelsohn - - * src/types.c (double): Add AIX and Darwin to the right TYPEDEF. - * src/powerpc/aix_closure.S: Remove the pointer to the outgoing - parameter stack. - * src/powerpc/darwin_closure.S: Likewise. - * src/powerpc/ffi_darwin.c (ffi_prep_args): Handle structures - according to the Darwin/AIX ABI. - (ffi_prep_cif_machdep): Likewise. - (ffi_closure_helper_DARWIN): Likewise. - Remove the outgoing parameter stack logic. Simplify the evaluation - of the different CASE types. - (ffi_prep_clousure): Avoid the casts on lvalues. Change the branch - statement in the trampoline code. - -2003-09-18 Kaz Kojima - - * src/sh/ffi.c (ffi_prep_args): Take account into the alignement - for the register size. - (ffi_closure_helper_SYSV): Handle the structure return value - address correctly. - (ffi_closure_helper_SYSV): Return the appropriate type when - the registers are used for the structure return value. - * src/sh/sysv.S (ffi_closure_SYSV): Fix the stack layout for - the 64-bit return value. Update copyright years. - -2003-09-17 Rainer Orth - - * testsuite/lib/libffi-dg.exp (libffi_target_compile): Search in - srcdir for ffi_mips.h. - -2003-09-12 Alan Modra - - * src/prep_cif.c (initialize_aggregate): Include tail padding in - structure size. - * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Correct - placement of float result. - * testsuite/libffi.special/unwindtest.cc (closure_test_fn1): Correct - cast of "resp" for big-endian 64 bit machines. - -2003-09-11 Alan Modra - - * src/types.c (double, longdouble): Merge identical SH and ARM - typedefs, and add POWERPC64. - * src/powerpc/ffi.c (ffi_prep_args64): Correct next_arg calc for - struct split over gpr and rest. - (ffi_prep_cif_machdep): Correct intarg_count for structures. - * src/powerpc/linux64.S (ffi_call_LINUX64): Fix gpr offsets. - -2003-09-09 Andreas Tobler - - * src/powerpc/ffi.c (ffi_closure_helper_SYSV) Handle struct - passing correctly. - -2003-09-09 Alan Modra - - * configure: Regenerate. - -2003-09-04 Andreas Tobler - - * Makefile.am: Remove build rules for ffitest. - * Makefile.in: Rebuilt. - -2003-09-04 Andreas Tobler - - * src/java_raw_api.c: Include to fix compiler warning - about implicit declaration of abort(). - -2003-09-04 Andreas Tobler - - * Makefile.am: Add dejagnu test framework. Fixes PR other/11411. - * Makefile.in: Rebuilt. - * configure.in: Add dejagnu test framework. - * configure: Rebuilt. - - * testsuite/Makefile.am: New file. - * testsuite/Makefile.in: Built - * testsuite/lib/libffi-dg.exp: New file. - * testsuite/config/default.exp: Likewise. - * testsuite/libffi.call/call.exp: Likewise. - * testsuite/libffi.call/ffitest.h: Likewise. - * testsuite/libffi.call/closure_fn0.c: Likewise. - * testsuite/libffi.call/closure_fn1.c: Likewise. - * testsuite/libffi.call/closure_fn2.c: Likewise. - * testsuite/libffi.call/closure_fn3.c: Likewise. - * testsuite/libffi.call/cls_1_1byte.c: Likewise. - * testsuite/libffi.call/cls_3_1byte.c: Likewise. - * testsuite/libffi.call/cls_4_1byte.c: Likewise. - * testsuite/libffi.call/cls_2byte.c: Likewise. - * testsuite/libffi.call/cls_3byte1.c: Likewise. - * testsuite/libffi.call/cls_3byte2.c: Likewise. - * testsuite/libffi.call/cls_4byte.c: Likewise. - * testsuite/libffi.call/cls_5byte.c: Likewise. - * testsuite/libffi.call/cls_6byte.c: Likewise. - * testsuite/libffi.call/cls_7byte.c: Likewise. - * testsuite/libffi.call/cls_8byte.c: Likewise. - * testsuite/libffi.call/cls_12byte.c: Likewise. - * testsuite/libffi.call/cls_16byte.c: Likewise. - * testsuite/libffi.call/cls_20byte.c: Likewise. - * testsuite/libffi.call/cls_24byte.c: Likewise. - * testsuite/libffi.call/cls_double.c: Likewise. - * testsuite/libffi.call/cls_float.c: Likewise. - * testsuite/libffi.call/cls_uchar.c: Likewise. - * testsuite/libffi.call/cls_uint.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/cls_ushort.c: Likewise. - * testsuite/libffi.call/float.c: Likewise. - * testsuite/libffi.call/float1.c: Likewise. - * testsuite/libffi.call/float2.c: Likewise. - * testsuite/libffi.call/many.c: Likewise. - * testsuite/libffi.call/many_win32.c: Likewise. - * testsuite/libffi.call/nested_struct.c: Likewise. - * testsuite/libffi.call/nested_struct1.c: Likewise. - * testsuite/libffi.call/pyobjc-tc.c: Likewise. - * testsuite/libffi.call/problem1.c: Likewise. - * testsuite/libffi.call/promotion.c: Likewise. - * testsuite/libffi.call/return_ll.c: Likewise. - * testsuite/libffi.call/return_sc.c: Likewise. - * testsuite/libffi.call/return_uc.c: Likewise. - * testsuite/libffi.call/strlen.c: Likewise. - * testsuite/libffi.call/strlen_win32.c: Likewise. - * testsuite/libffi.call/struct1.c: Likewise. - * testsuite/libffi.call/struct2.c: Likewise. - * testsuite/libffi.call/struct3.c: Likewise. - * testsuite/libffi.call/struct4.c: Likewise. - * testsuite/libffi.call/struct5.c: Likewise. - * testsuite/libffi.call/struct6.c: Likewise. - * testsuite/libffi.call/struct7.c: Likewise. - * testsuite/libffi.call/struct8.c: Likewise. - * testsuite/libffi.call/struct9.c: Likewise. - * testsuite/libffi.special/special.exp: New file. - * testsuite/libffi.special/ffitestcxx.h: Likewise. - * testsuite/libffi.special/unwindtest.cc: Likewise. - - -2003-08-13 Kaz Kojima - - * src/sh/ffi.c (OFS_INT16): Set 0 for little endian case. Update - copyright years. - -2003-08-02 Alan Modra - - * src/powerpc/ffi.c (ffi_prep_args64): Modify for changed gcc - structure passing. - (ffi_closure_helper_LINUX64): Likewise. - * src/powerpc/linux64.S: Remove code writing to parm save area. - * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Use return - address in lr from ffi_closure_helper_LINUX64 call to calculate - table address. Optimize function tail. - -2003-07-28 Andreas Tobler - - * src/sparc/ffi.c: Handle all floating point registers. - * src/sparc/v9.S: Likewise. Fixes second part of PR target/11410. - -2003-07-11 Gerald Pfeifer - - * README: Note that libffi is not part of GCC. Update the project - URL and status. - -2003-06-19 Franz Sirl - - * src/powerpc/ppc_closure.S: Include ffi.h. - -2003-06-13 Rainer Orth - - * src/x86/sysv.S: Avoid gas-only .uleb128/.sleb128 directives. - Use C style comments. - -2003-06-13 Kaz Kojima - - * Makefile.am: Add SHmedia support. Fix a typo of SH support. - * Makefile.in: Regenerate. - * configure.in (sh64-*-linux*, sh5*-*-linux*): Add target. - * configure: Regenerate. - * include/ffi.h.in: Add SHmedia support. - * src/sh64/ffi.c: New file. - * src/sh64/sysv.S: New file. - -2003-05-16 Jakub Jelinek - - * configure.in (HAVE_RO_EH_FRAME): Check whether .eh_frame section - should be read-only. - * configure: Rebuilt. - * fficonfig.h.in: Rebuilt. - * include/ffi.h.in (EH_FRAME_FLAGS): Define. - * src/alpha/osf.S: Use EH_FRAME_FLAGS. - * src/powerpc/linux64.S: Likewise. - * src/powerpc/linux64_closure.S: Likewise. Include ffi.h. - * src/powerpc/sysv.S: Use EH_FRAME_FLAGS. Use pcrel encoding - if -fpic/-fPIC/-mrelocatable. - * src/powerpc/powerpc_closure.S: Likewise. - * src/sparc/v8.S: If HAVE_RO_EH_FRAME is defined, don't include - #write in .eh_frame flags. - * src/sparc/v9.S: Likewise. - * src/x86/unix64.S: Use EH_FRAME_FLAGS. - * src/x86/sysv.S: Likewise. Use pcrel encoding if -fpic/-fPIC. - * src/s390/sysv.S: Use EH_FRAME_FLAGS. Include ffi.h. - -2003-05-07 Jeff Sturm - - Fixes PR bootstrap/10656 - * configure.in (HAVE_AS_REGISTER_PSEUDO_OP): Test assembler - support for .register pseudo-op. - * src/sparc/v8.S: Use it. - * fficonfig.h.in: Rebuilt. - * configure: Rebuilt. - -2003-04-18 Jakub Jelinek - - * include/ffi.h.in (POWERPC64): Define if 64-bit. - (enum ffi_abi): Add FFI_LINUX64 on POWERPC. - Make it the default on POWERPC64. - (FFI_TRAMPOLINE_SIZE): Define to 24 on POWERPC64. - * configure.in: Change powerpc-*-linux* into powerpc*-*-linux*. - * configure: Rebuilt. - * src/powerpc/ffi.c (hidden): Define. - (ffi_prep_args_SYSV): Renamed from - ffi_prep_args. Cast pointers to unsigned long to shut up warnings. - (NUM_GPR_ARG_REGISTERS64, NUM_FPR_ARG_REGISTERS64, - ASM_NEEDS_REGISTERS64): New. - (ffi_prep_args64): New function. - (ffi_prep_cif_machdep): Handle FFI_LINUX64 ABI. - (ffi_call): Likewise. - (ffi_prep_closure): Likewise. - (flush_icache): Surround by #ifndef POWERPC64. - (ffi_dblfl): New union type. - (ffi_closure_helper_SYSV): Use it to avoid aliasing problems. - (ffi_closure_helper_LINUX64): New function. - * src/powerpc/ppc_closure.S: Surround whole file by #ifndef - __powerpc64__. - * src/powerpc/sysv.S: Likewise. - (ffi_call_SYSV): Rename ffi_prep_args to ffi_prep_args_SYSV. - * src/powerpc/linux64.S: New file. - * src/powerpc/linux64_closure.S: New file. - * Makefile.am (EXTRA_DIST): Add src/powerpc/linux64.S and - src/powerpc/linux64_closure.S. - (TARGET_SRC_POWERPC): Likewise. - - * src/ffitest.c (closure_test_fn, closure_test_fn1, closure_test_fn2, - closure_test_fn3): Fix result printing on big-endian 64-bit - machines. - (main): Print tst2_arg instead of uninitialized tst2_result. - - * src/ffitest.c (main): Hide what closure pointer really points to - from the compiler. - -2003-04-16 Richard Earnshaw - - * configure.in (arm-*-netbsdelf*): Add configuration. - (configure): Regenerated. - -2003-04-04 Loren J. Rittle - - * include/Makefile.in: Regenerate. - -2003-03-21 Zdenek Dvorak - - * libffi/include/ffi.h.in: Define X86 instead of X86_64 in 32 - bit mode. - * libffi/src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV): - Receive closure pointer through parameter, read args using - __builtin_dwarf_cfa. - (FFI_INIT_TRAMPOLINE): Send closure reference through eax. - -2003-03-12 Andreas Schwab - - * configure.in: Avoid trailing /. in toolexeclibdir. - * configure: Rebuilt. - -2003-03-03 Andreas Tobler - - * src/powerpc/darwin_closure.S: Recode to fit dynamic libraries. - -2003-02-06 Andreas Tobler - - * libffi/src/powerpc/darwin_closure.S: - Fix alignement bug, allocate 8 bytes for the result. - * libffi/src/powerpc/aix_closure.S: - Likewise. - * libffi/src/powerpc/ffi_darwin.c: - Update stackframe description for aix/darwin_closure.S. - -2003-02-06 Jakub Jelinek - - * src/s390/ffi.c (ffi_closure_helper_SYSV): Add hidden visibility - attribute. - -2003-01-31 Christian Cornelssen , - Andreas Schwab - - * configure.in: Adjust command to source config-ml.in to account - for changes to the libffi_basedir definition. - (libffi_basedir): Remove ${srcdir} from value and include trailing - slash if nonempty. - - * configure: Regenerate. - -2003-01-29 Franz Sirl - - * src/powerpc/ppc_closure.S: Recode to fit shared libs. - -2003-01-28 Andrew Haley - - * include/ffi.h.in: Enable FFI_CLOSURES for x86_64. - * src/x86/ffi64.c (ffi_prep_closure): New. - (ffi_closure_UNIX64_inner): New. - * src/x86/unix64.S (ffi_closure_UNIX64): New. - -2003-01-27 Alexandre Oliva - - * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. - Remove USE_LIBDIR conditional. - * Makefile.am (toolexecdir, toolexeclibdir): Don't override. - * Makefile.in, configure: Rebuilt. - -2003-01027 David Edelsohn - - * Makefile.am (TARGET_SRC_POWERPC_AIX): Fix typo. - * Makefile.in: Regenerate. - -2003-01-22 Andrew Haley - - * src/powerpc/darwin.S (_ffi_call_AIX): Add Augmentation size to - unwind info. - -2003-01-21 Andreas Tobler - - * src/powerpc/darwin.S: Add unwind info. - * src/powerpc/darwin_closure.S: Likewise. - -2003-01-14 Andrew Haley - - * src/x86/ffi64.c (ffi_prep_args): Check for void retval. - (ffi_prep_cif_machdep): Likewise. - * src/x86/unix64.S: Add unwind info. - -2003-01-14 Andreas Jaeger - - * src/ffitest.c (main): Only use ffi_closures if those are - supported. - -2003-01-13 Andreas Tobler - - * libffi/src/ffitest.c - add closure testcases - -2003-01-13 Kevin B. Hendricks - - * libffi/src/powerpc/ffi.c - fix alignment bug for float (4 byte aligned iso 8 byte) - -2003-01-09 Geoffrey Keating - - * src/powerpc/ffi_darwin.c: Remove RCS version string. - * src/powerpc/darwin.S: Remove RCS version string. - -2003-01-03 Jeff Sturm - - * include/ffi.h.in: Add closure defines for SPARC, SPARC64. - * src/ffitest.c (main): Use static storage for closure. - * src/sparc/ffi.c (ffi_prep_closure, ffi_closure_sparc_inner): New. - * src/sparc/v8.S (ffi_closure_v8): New. - * src/sparc/v9.S (ffi_closure_v9): New. - -2002-11-10 Ranjit Mathew - - * include/ffi.h.in: Added FFI_STDCALL ffi_type - enumeration for X86_WIN32. - * src/x86/win32.S: Added ffi_call_STDCALL function - definition. - * src/x86/ffi.c (ffi_call/ffi_raw_call): Added - switch cases for recognising FFI_STDCALL and - calling ffi_call_STDCALL if target is X86_WIN32. - * src/ffitest.c (my_stdcall_strlen/stdcall_many): - stdcall versions of the "my_strlen" and "many" - test functions (for X86_WIN32). - Added test cases to test stdcall invocation using - these functions. - -2002-12-02 Kaz Kojima - - * src/sh/sysv.S: Add DWARF2 unwind info. - -2002-11-27 Ulrich Weigand - - * src/s390/sysv.S (.eh_frame section): Make section read-only. - -2002-11-26 Jim Wilson - - * src/types.c (FFI_TYPE_POINTER): Has size 8 on IA64. - -2002-11-23 H.J. Lu - - * acinclude.m4: Add dummy AM_PROG_LIBTOOL. - Include ../config/accross.m4. - * aclocal.m4; Rebuild. - * configure: Likewise. - -2002-11-15 Ulrich Weigand - - * src/s390/sysv.S (.eh_frame section): Adapt to pcrel FDE encoding. - -2002-11-11 DJ Delorie - - * configure.in: Look for common files in the right place. - -2002-10-08 Ulrich Weigand - - * src/java_raw_api.c (ffi_java_raw_to_ptrarray): Interpret - raw data as _Jv_word values, not ffi_raw. - (ffi_java_ptrarray_to_raw): Likewise. - (ffi_java_rvalue_to_raw): New function. - (ffi_java_raw_call): Call it. - (ffi_java_raw_to_rvalue): New function. - (ffi_java_translate_args): Call it. - * src/ffitest.c (closure_test_fn): Interpret return value - as ffi_arg, not int. - * src/s390/ffi.c (ffi_prep_cif_machdep): Add missing - FFI_TYPE_POINTER case. - (ffi_closure_helper_SYSV): Likewise. Also, assume return - values extended to word size. - -2002-10-02 Andreas Jaeger - - * src/x86/ffi64.c (ffi_prep_cif_machdep): Remove debug output. - -2002-10-01 Bo Thorsen - - * include/ffi.h.in: Fix i386 win32 compilation. - -2002-09-30 Ulrich Weigand - - * configure.in: Add s390x-*-linux-* target. - * configure: Regenerate. - * include/ffi.h.in: Define S390X for s390x targets. - (FFI_CLOSURES): Define for s390/s390x. - (FFI_TRAMPOLINE_SIZE): Likewise. - (FFI_NATIVE_RAW_API): Likewise. - * src/prep_cif.c (ffi_prep_cif): Do not compute stack space for s390. - * src/types.c (FFI_TYPE_POINTER): Use 8-byte pointers on s390x. - * src/s390/ffi.c: Major rework of existing code. Add support for - s390x targets. Add closure support. - * src/s390/sysv.S: Likewise. - -2002-09-29 Richard Earnshaw - - * src/arm/sysv.S: Fix typo. - -2002-09-28 Richard Earnshaw - - * src/arm/sysv.S: If we don't have machine/asm.h and the pre-processor - has defined __USER_LABEL_PREFIX__, then use it in CNAME. - (ffi_call_SYSV): Handle soft-float. - -2002-09-27 Bo Thorsen - - * include/ffi.h.in: Fix multilib x86-64 support. - -2002-09-22 Kaveh R. Ghazi - - * Makefile.am (all-multi): Fix multilib parallel build. - -2002-07-19 Kaz Kojima - - * configure.in (sh[34]*-*-linux*): Add brackets. - * configure: Regenerate. - -2002-07-18 Kaz Kojima - - * Makefile.am: Add SH support. - * Makefile.in: Regenerate. - * configure.in (sh-*-linux*, sh[34]*-*-linux*): Add target. - * configure: Regenerate. - * include/ffi.h.in: Add SH support. - * src/sh/ffi.c: New file. - * src/sh/sysv.S: New file. - * src/types.c: Add SH support. - -2002-07-16 Bo Thorsen - - * src/x86/ffi64.c: New file that adds x86-64 support. - * src/x86/unix64.S: New file that handles argument setup for - x86-64. - * src/x86/sysv.S: Don't use this on x86-64. - * src/x86/ffi.c: Don't use this on x86-64. - Remove unused vars. - * src/prep_cif.c (ffi_prep_cif): Don't do stack size calculation - for x86-64. - * src/ffitest.c (struct6): New test that tests a special case in - the x86-64 ABI. - (struct7): Likewise. - (struct8): Likewise. - (struct9): Likewise. - (closure_test_fn): Silence warning about this when it's not used. - (main): Add the new tests. - (main): Fix a couple of wrong casts and silence some compiler warnings. - * include/ffi.h.in: Add x86-64 ABI definition. - * fficonfig.h.in: Regenerate. - * Makefile.am: Add x86-64 support. - * configure.in: Likewise. - * Makefile.in: Regenerate. - * configure: Likewise. - -2002-06-24 Bo Thorsen - - * src/types.c: Merge settings for similar architectures. - Add x86-64 sizes and alignments. - -2002-06-23 Bo Thorsen - - * src/arm/ffi.c (ffi_prep_args): Remove unused vars. - * src/sparc/ffi.c (ffi_prep_args_v8): Likewise. - * src/mips/ffi.c (ffi_prep_args): Likewise. - * src/m68k/ffi.c (ffi_prep_args): Likewise. - -2002-07-18 H.J. Lu (hjl@gnu.org) - - * Makefile.am (TARGET_SRC_MIPS_LINUX): New. - (libffi_la_SOURCES): Support MIPS_LINUX. - (libffi_convenience_la_SOURCES): Likewise. - * Makefile.in: Regenerated. - - * configure.in (mips64*-*): Skip. - (mips*-*-linux*): New. - * configure: Regenerated. - - * src/mips/ffi.c: Include . - -2002-06-06 Ulrich Weigand - - * src/s390/sysv.S: Save/restore %r6. Add DWARF-2 unwind info. - -2002-05-27 Roger Sayle - - * src/x86/ffi.c (ffi_prep_args): Remove reference to avn. - -2002-05-27 Bo Thorsen - - * src/x86/ffi.c (ffi_prep_args): Remove unused variable and - fix formatting. - -2002-05-13 Andreas Tobler - - * src/powerpc/ffi_darwin.c (ffi_prep_closure): Declare fd at - beginning of function (for older apple cc). - -2002-05-08 Alexandre Oliva - - * configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at - script entry, and set LD to it when configuring multilibs. - * configure: Rebuilt. - -2002-05-05 Jason Thorpe - - * configure.in (sparc64-*-netbsd*): Add target. - (sparc-*-netbsdelf*): Likewise. - * configure: Regenerate. - -2002-04-28 David S. Miller - - * configure.in, configure: Fix SPARC test in previous change. - -2002-04-29 Gerhard Tonn - - * Makefile.am: Add Linux for S/390 support. - * Makefile.in: Regenerate. - * configure.in: Add Linux for S/390 support. - * configure: Regenerate. - * include/ffi.h.in: Add Linux for S/390 support. - * src/s390/ffi.c: New file from libffi CVS tree. - * src/s390/sysv.S: New file from libffi CVS tree. - -2002-04-28 Jakub Jelinek - - * configure.in (HAVE_AS_SPARC_UA_PCREL): Check for working - %r_disp32(). - * src/sparc/v8.S: Use it. - * src/sparc/v9.S: Likewise. - * fficonfig.h.in: Rebuilt. - * configure: Rebuilt. - -2002-04-08 Hans Boehm - - * src/java_raw_api.c (ffi_java_raw_size): Handle FFI_TYPE_DOUBLE - correctly. - * src/ia64/unix.S: Add unwind information. Fix comments. - Save sp in a way that's compatible with unwind info. - (ffi_call_unix): Correctly restore sp in all cases. - * src/ia64/ffi.c: Add, fix comments. - -2002-04-08 Jakub Jelinek - - * src/sparc/v8.S: Make .eh_frame dependent on target word size. - -2002-04-06 Jason Thorpe - - * configure.in (alpha*-*-netbsd*): Add target. - * configure: Regenerate. - -2002-04-04 Jeff Sturm - - * src/sparc/v8.S: Add unwind info. - * src/sparc/v9.S: Likewise. - -2002-03-30 Krister Walfridsson - - * configure.in: Enable i*86-*-netbsdelf*. - * configure: Rebuilt. - -2002-03-29 David Billinghurst - - PR other/2620 - * src/mips/n32.s: Delete - * src/mips/o32.s: Delete - -2002-03-21 Loren J. Rittle - - * configure.in: Enable alpha*-*-freebsd*. - * configure: Rebuilt. - -2002-03-17 Bryce McKinlay - - * Makefile.am: libfficonvenience -> libffi_convenience. - * Makefile.in: Rebuilt. - - * Makefile.am: Define ffitest_OBJECTS. - * Makefile.in: Rebuilt. - -2002-03-07 Andreas Tobler - David Edelsohn - - * Makefile.am (EXTRA_DIST): Add Darwin and AIX closure files. - (TARGET_SRC_POWERPC_AIX): Add aix_closure.S. - (TARGET_SRC_POWERPC_DARWIN): Add darwin_closure.S. - * Makefile.in: Regenerate. - * include/ffi.h.in: Add AIX and Darwin closure definitions. - * src/powerpc/ffi_darwin.c (ffi_prep_closure): New function. - (flush_icache, flush_range): New functions. - (ffi_closure_helper_DARWIN): New function. - * src/powerpc/aix_closure.S: New file. - * src/powerpc/darwin_closure.S: New file. - -2002-02-24 Jeff Sturm - - * include/ffi.h.in: Add typedef for ffi_arg. - * src/ffitest.c (main): Declare rint with ffi_arg. - -2002-02-21 Andreas Tobler - - * src/powerpc/ffi_darwin.c (ffi_prep_args): Skip appropriate - number of GPRs for floating-point arguments. - -2002-01-31 Anthony Green - - * configure: Rebuilt. - * configure.in: Replace CHECK_SIZEOF and endian tests with - cross-compiler friendly macros. - * aclocal.m4 (AC_COMPILE_CHECK_SIZEOF, AC_C_BIGENDIAN_CROSS): New - macros. - -2002-01-18 David Edelsohn - - * src/powerpc/darwin.S (_ffi_call_AIX): New. - * src/powerpc/aix.S (ffi_call_DARWIN): New. - -2002-01-17 David Edelsohn - - * Makefile.am (EXTRA_DIST): Add Darwin and AIX files. - (TARGET_SRC_POWERPC_AIX): New. - (POWERPC_AIX): New stanza. - * Makefile.in: Regenerate. - * configure.in: Add AIX case. - * configure: Regenerate. - * include/ffi.h.in (ffi_abi): Add FFI_AIX. - * src/powerpc/ffi_darwin.c (ffi_status): Use "long" to scale frame - size. Fix "long double" support. - (ffi_call): Add FFI_AIX case. - * src/powerpc/aix.S: New. - -2001-10-09 John Hornkvist - - Implement Darwin PowerPC ABI. - * configure.in: Handle powerpc-*-darwin*. - * Makefile.am: Set source files for POWERPC_DARWIN. - * configure: Rebuilt. - * Makefile.in: Rebuilt. - * include/ffi.h.in: Define FFI_DARWIN and FFI_DEFAULT_ABI for - POWERPC_DARWIN. - * src/powerpc/darwin.S: New file. - * src/powerpc/ffi_darwin.c: New file. - -2001-10-07 Joseph S. Myers - - * src/x86/ffi.c: Fix spelling error of "separate" as "seperate". - -2001-07-16 Rainer Orth - - * src/x86/sysv.S: Avoid gas-only .balign directive. - Use C style comments. - -2001-07-16 Rainer Orth - - * src/alpha/ffi.c (ffi_prep_closure): Avoid gas-only mnemonic. - Fixes PR bootstrap/3563. - -2001-06-26 Rainer Orth - - * src/alpha/osf.S (ffi_closure_osf): Use .rdata for ECOFF. - -2001-06-25 Rainer Orth - - * configure.in: Recognize sparc*-sun-* host. - * configure: Regenerate. - -2001-06-06 Andrew Haley - - * src/alpha/osf.S (__FRAME_BEGIN__): Conditionalize for ELF. - -2001-06-03 Andrew Haley - - * src/alpha/osf.S: Add unwind info. - * src/powerpc/sysv.S: Add unwind info. - * src/powerpc/ppc_closure.S: Likewise. - -2000-05-31 Jeff Sturm - - * configure.in: Fix AC_ARG_ENABLE usage. - * configure: Rebuilt. - -2001-05-06 Bryce McKinlay - - * configure.in: Remove warning about beta code. - * configure: Rebuilt. - -2001-04-25 Hans Boehm - - * src/ia64/unix.S: Restore stack pointer when returning from - ffi_closure_UNIX. - * src/ia64/ffi.c: Fix typo in comment. - -2001-04-18 Jim Wilson - - * src/ia64/unix.S: Delete unnecessary increment and decrement of loc2 - to eliminate RAW DV. - -2001-04-12 Bryce McKinlay - - * Makefile.am: Make a libtool convenience library. - * Makefile.in: Rebuilt. - -2001-03-29 Bryce McKinlay - - * configure.in: Use different syntax for subdirectory creation. - * configure: Rebuilt. - -2001-03-27 Jon Beniston - - * configure.in: Added X86_WIN32 target (Win32, CygWin, MingW). - * configure: Rebuilt. - * Makefile.am: Added X86_WIN32 target support. - * Makefile.in: Rebuilt. - - * include/ffi.h.in: Added X86_WIN32 target support. - - * src/ffitest.c: Doesn't run structure tests for X86_WIN32 targets. - * src/types.c: Added X86_WIN32 target support. - - * src/x86/win32.S: New file. Based on sysv.S, but with EH - stuff removed and made to work with CygWin's gas. - -2001-03-26 Bryce McKinlay - - * configure.in: Make target subdirectory in build dir. - * Makefile.am: Override suffix based rules to specify correct output - subdirectory. - * Makefile.in: Rebuilt. - * configure: Rebuilt. - -2001-03-23 Kevin B Hendricks - - * src/powerpc/ppc_closure.S: New file. - * src/powerpc/ffi.c (ffi_prep_args): Fixed ABI compatibility bug - involving long long and register pairs. - (ffi_prep_closure): New function. - (flush_icache): Likewise. - (ffi_closure_helper_SYSV): Likewise. - * include/ffi.h.in (FFI_CLOSURES): Define on PPC. - (FFI_TRAMPOLINE_SIZE): Likewise. - (FFI_NATIVE_RAW_API): Likewise. - * Makefile.in: Rebuilt. - * Makefile.am (EXTRA_DIST): Added src/powerpc/ppc_closure.S. - (TARGET_SRC_POWERPC): Likewise. - -2001-03-19 Tom Tromey - - * Makefile.in: Rebuilt. - * Makefile.am (ffitest_LDFLAGS): New macro. - -2001-03-02 Nick Clifton - - * include/ffi.h.in: Remove RCS ident string. - * include/ffi_mips.h: Remove RCS ident string. - * src/debug.c: Remove RCS ident string. - * src/ffitest.c: Remove RCS ident string. - * src/prep_cif.c: Remove RCS ident string. - * src/types.c: Remove RCS ident string. - * src/alpha/ffi.c: Remove RCS ident string. - * src/alpha/osf.S: Remove RCS ident string. - * src/arm/ffi.c: Remove RCS ident string. - * src/arm/sysv.S: Remove RCS ident string. - * src/mips/ffi.c: Remove RCS ident string. - * src/mips/n32.S: Remove RCS ident string. - * src/mips/o32.S: Remove RCS ident string. - * src/sparc/ffi.c: Remove RCS ident string. - * src/sparc/v8.S: Remove RCS ident string. - * src/sparc/v9.S: Remove RCS ident string. - * src/x86/ffi.c: Remove RCS ident string. - * src/x86/sysv.S: Remove RCS ident string. - -2001-02-08 Joseph S. Myers - - * include/ffi.h.in: Change sourceware.cygnus.com references to - gcc.gnu.org. - -2000-12-09 Richard Henderson - - * src/alpha/ffi.c (ffi_call): Simplify struct return test. - (ffi_closure_osf_inner): Index rather than increment avalue - and arg_types. Give ffi_closure_osf the raw return value type. - * src/alpha/osf.S (ffi_closure_osf): Handle return value type - promotion. - -2000-12-07 Richard Henderson - - * src/raw_api.c (ffi_translate_args): Fix typo. - (ffi_prep_closure): Likewise. - - * include/ffi.h.in [ALPHA]: Define FFI_CLOSURES and - FFI_TRAMPOLINE_SIZE. - * src/alpha/ffi.c (ffi_prep_cif_machdep): Adjust minimal - cif->bytes for new ffi_call_osf implementation. - (ffi_prep_args): Absorb into ... - (ffi_call): ... here. Do all stack allocation here and - avoid a callback function. - (ffi_prep_closure, ffi_closure_osf_inner): New. - * src/alpha/osf.S (ffi_call_osf): Reimplement with no callback. - (ffi_closure_osf): New. - -2000-09-10 Alexandre Oliva - - * config.guess, config.sub, install-sh: Removed. - * ltconfig, ltmain.sh, missing, mkinstalldirs: Likewise. - * Makefile.in: Rebuilt. - - * acinclude.m4: Include libtool macros from the top level. - * aclocal.m4, configure: Rebuilt. - -2000-08-22 Alexandre Oliva - - * configure.in [i*86-*-freebsd*] (TARGET, TARGETDIR): Set. - * configure: Rebuilt. - -2000-05-11 Scott Bambrough - - * libffi/src/arm/sysv.S (ffi_call_SYSV): Doubles are not saved to - memory correctly. Use conditional instructions, not branches where - possible. - -2000-05-04 Tom Tromey - - * configure: Rebuilt. - * configure.in: Match `arm*-*-linux-*'. - From Chris Dornan . - -2000-04-28 Jakub Jelinek - - * Makefile.am (SUBDIRS): Define. - (AM_MAKEFLAGS): Likewise. - (Multilib support.): Add section. - * Makefile.in: Rebuilt. - * ltconfig (extra_compiler_flags, extra_compiler_flags_value): - New variables. Set for gcc using -print-multi-lib. Export them - to libtool. - (sparc64-*-linux-gnu*): Use libsuff 64 for search paths. - * ltmain.sh (B|b|V): Don't throw away gcc's -B, -b and -V options - for -shared links. - (extra_compiler_flags_value, extra_compiler_flags): Check these - for extra compiler options which need to be passed down in - compiler_flags. - -2000-04-16 Anthony Green - - * configure: Rebuilt. - * configure.in: Change i*86-pc-linux* to i*86-*-linux*. - -2000-04-14 Jakub Jelinek - - * include/ffi.h.in (SPARC64): Define for 64bit SPARC builds. - Set SPARC FFI_DEFAULT_ABI based on SPARC64 define. - * src/sparc/ffi.c (ffi_prep_args_v8): Renamed from ffi_prep_args. - Replace all void * sizeofs with sizeof(int). - Only compare type with FFI_TYPE_LONGDOUBLE if LONGDOUBLE is - different than DOUBLE. - Remove FFI_TYPE_SINT32 and FFI_TYPE_UINT32 cases (handled elsewhere). - (ffi_prep_args_v9): New function. - (ffi_prep_cif_machdep): Handle V9 ABI and long long on V8. - (ffi_V9_return_struct): New function. - (ffi_call): Handle FFI_V9 ABI from 64bit code and FFI_V8 ABI from - 32bit code (not yet cross-arch calls). - * src/sparc/v8.S: Add struct return delay nop. - Handle long long. - * src/sparc/v9.S: New file. - * src/prep_cif.c (ffi_prep_cif): Return structure pointer - is used on sparc64 only for structures larger than 32 bytes. - Pass by reference for structures is done for structure arguments - larger than 16 bytes. - * src/ffitest.c (main): Use 64bit rint on sparc64. - Run long long tests on sparc. - * src/types.c (FFI_TYPE_POINTER): Pointer is 64bit on alpha and - sparc64. - (FFI_TYPE_LONGDOUBLE): long double is 128 bit aligned to 128 bits - on sparc64. - * configure.in (sparc-*-linux*): New supported target. - (sparc64-*-linux*): Likewise. - * configure: Rebuilt. - * Makefile.am: Add v9.S to SPARC files. - * Makefile.in: Likewise. - (LINK): Surround $(CCLD) into double quotes, so that multilib - compiles work correctly. - -2000-04-04 Alexandre Petit-Bianco - - * configure: Rebuilt. - * configure.in: (i*86-*-solaris*): New libffi target. Patch - proposed by Bryce McKinlay. - -2000-03-20 Tom Tromey - - * Makefile.in: Hand edit for java_raw_api.lo. - -2000-03-08 Bryce McKinlay - - * config.guess, config.sub: Update from the gcc tree. - Fix for PR libgcj/168. - -2000-03-03 Tom Tromey - - * Makefile.in: Fixed ia64 by hand. - - * configure: Rebuilt. - * configure.in (--enable-multilib): New option. - (libffi_basedir): New subst. - (AC_OUTPUT): Added multilib code. - -2000-03-02 Tom Tromey - - * Makefile.in: Rebuilt. - * Makefile.am (TARGET_SRC_IA64): Use `ia64', not `alpha', as - directory name. - -2000-02-25 Hans Boehm - - * src/ia64/ffi.c, src/ia64/ia64_flags.h, src/ia64/unix.S: New - files. - * src/raw_api.c (ffi_translate_args): Fixed typo in argument - list. - (ffi_prep_raw_closure): Use ffi_translate_args, not - ffi_closure_translate. - * src/java_raw_api.c: New file. - * src/ffitest.c (closure_test_fn): New function. - (main): Define `rint' as long long on IA64. Added new test when - FFI_CLOSURES is defined. - * include/ffi.h.in (ALIGN): Use size_t, not unsigned. - (ffi_abi): Recognize IA64. - (ffi_raw): Added `flt' field. - Added "Java raw API" code. - * configure.in: Recognize ia64. - * Makefile.am (TARGET_SRC_IA64): New macro. - (libffi_la_common_SOURCES): Added java_raw_api.c. - (libffi_la_SOURCES): Define in IA64 case. - -2000-01-04 Tom Tromey - - * Makefile.in: Rebuilt with newer automake. - -1999-12-31 Tom Tromey - - * Makefile.am (INCLUDES): Added -I$(top_srcdir)/src. - -1999-09-01 Tom Tromey - - * include/ffi.h.in: Removed PACKAGE and VERSION defines and - undefs. - * fficonfig.h.in: Rebuilt. - * configure: Rebuilt. - * configure.in: Pass 3rd argument to AM_INIT_AUTOMAKE. - Use AM_PROG_LIBTOOL (automake 1.4 compatibility). - * acconfig.h: Don't #undef PACKAGE or VERSION. - -1999-08-09 Anthony Green - - * include/ffi.h.in: Try to work around messy header problem - with PACKAGE and VERSION. - - * configure: Rebuilt. - * configure.in: Change version to 2.00-beta. - - * fficonfig.h.in: Rebuilt. - * acconfig.h (FFI_NO_STRUCTS, FFI_NO_RAW_API): Define. - - * src/x86/ffi.c (ffi_raw_call): Rename. - -1999-08-02 Kresten Krab Thorup - - * src/x86/ffi.c (ffi_closure_SYSV): New function. - (ffi_prep_incoming_args_SYSV): Ditto. - (ffi_prep_closure): Ditto. - (ffi_closure_raw_SYSV): Ditto. - (ffi_prep_raw_closure): More ditto. - (ffi_call_raw): Final ditto. - - * include/ffi.h.in: Add definitions for closure and raw API. - - * src/x86/ffi.c (ffi_prep_cif_machdep): Added case for - FFI_TYPE_UINT64. - - * Makefile.am (libffi_la_common_SOURCES): Added raw_api.c - - * src/raw_api.c: New file. - - * include/ffi.h.in (ffi_raw): New type. - (UINT_ARG, SINT_ARG): New defines. - (ffi_closure, ffi_raw_closure): New types. - (ffi_prep_closure, ffi_prep_raw_closure): New declarations. - - * configure.in: Add check for endianness and sizeof void*. - - * src/x86/sysv.S (ffi_call_SYSV): Call fixup routine via argument, - instead of directly. - - * configure: Rebuilt. - -Thu Jul 8 14:28:42 1999 Anthony Green - - * configure.in: Add x86 and powerpc BeOS configurations. - From Makoto Kato . - -1999-05-09 Anthony Green - - * configure.in: Add warning about this being beta code. - Remove src/Makefile.am from the picture. - * configure: Rebuilt. - - * Makefile.am: Move logic from src/Makefile.am. Add changes - to support libffi as a target library. - * Makefile.in: Rebuilt. - - * aclocal.m4, config.guess, config.sub, ltconfig, ltmain.sh: - Upgraded to new autoconf, automake, libtool. - - * README: Tweaks. - - * LICENSE: Update copyright date. - - * src/Makefile.am, src/Makefile.in: Removed. - -1998-11-29 Anthony Green - - * include/ChangeLog: Removed. - * src/ChangeLog: Removed. - * src/mips/ChangeLog: Removed. - * src/sparc/ChangeLog: Remboved. - * src/x86/ChangeLog: Removed. - - * ChangeLog.v1: Created. diff --git a/ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libgcj b/ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libgcj deleted file mode 100644 index ea5d02f19..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/ChangeLog.libgcj +++ /dev/null @@ -1,40 +0,0 @@ -2004-01-14 Kelley Cook - - * configure.in: Add in AC_PREREQ(2.13) - -2003-02-20 Alexandre Oliva - - * configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to - config.status. - * configure: Rebuilt. - -2002-01-27 Alexandre Oliva - - * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. - Remove USE_LIBDIR conditional. - * Makefile.am (toolexecdir, toolexeclibdir): Don't override. - * Makefile.in, configure: Rebuilt. - -Mon Aug 9 18:33:38 1999 Rainer Orth - - * include/Makefile.in: Rebuilt. - * Makefile.in: Rebuilt - * Makefile.am (toolexeclibdir): Add $(MULTISUBDIR) even for native - builds. - Use USE_LIBDIR. - - * configure: Rebuilt. - * configure.in (USE_LIBDIR): Define for native builds. - Use lowercase in configure --help explanations. - -1999-08-08 Anthony Green - - * include/ffi.h.in (FFI_FN): Remove `...'. - -1999-08-08 Anthony Green - - * Makefile.in: Rebuilt. - * Makefile.am (AM_CFLAGS): Compile with -fexceptions. - - * src/x86/sysv.S: Add exception handling metadata. - diff --git a/ruby/ext/fiddle/libffi-3.2.1/ChangeLog.v1 b/ruby/ext/fiddle/libffi-3.2.1/ChangeLog.v1 deleted file mode 100644 index af3a37756..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/ChangeLog.v1 +++ /dev/null @@ -1,764 +0,0 @@ -The libffi version 1 ChangeLog archive. - -Version 1 of libffi had per-directory ChangeLogs. Current and future -versions have a single ChangeLog file in the root directory. The -version 1 ChangeLogs have all been concatenated into this file for -future reference only. - ---- libffi ---------------------------------------------------------------- - -Mon Oct 5 02:17:50 1998 Anthony Green - - * configure.in: Boosted rev. - * configure, Makefile.in, aclocal.m4: Rebuilt. - * README: Boosted rev and updated release notes. - -Mon Oct 5 01:03:03 1998 Anthony Green - - * configure.in: Boosted rev. - * configure, Makefile.in, aclocal.m4: Rebuilt. - * README: Boosted rev and updated release notes. - -1998-07-25 Andreas Schwab - - * m68k/ffi.c (ffi_prep_cif_machdep): Use bitmask for cif->flags. - Correctly handle small structures. - (ffi_prep_args): Also handle small structures. - (ffi_call): Pass size of return type to ffi_call_SYSV. - * m68k/sysv.S: Adjust for above changes. Correctly align small - structures in the return value. - - * types.c (uint64, sint64) [M68K]: Change alignment to 4. - -Fri Apr 17 17:26:58 1998 Anthony Green - - * configure.in: Boosted rev. - * configure,Makefile.in,aclocal.m4: Rebuilt. - * README: Boosted rev and added release notes. - -Sun Feb 22 00:50:41 1998 Geoff Keating - - * configure.in: Add PowerPC config bits. - -1998-02-14 Andreas Schwab - - * configure.in: Add m68k config bits. Change AC_CANONICAL_SYSTEM - to AC_CANONICAL_HOST, this is not a compiler. Use $host instead - of $target. Remove AC_CHECK_SIZEOF(char), we already know the - result. Fix argument of AC_ARG_ENABLE. - * configure, fficonfig.h.in: Rebuilt. - -Tue Feb 10 20:53:40 1998 Richard Henderson - - * configure.in: Add Alpha config bits. - -Tue May 13 13:39:20 1997 Anthony Green - - * README: Updated dates and reworded Irix comments. - - * configure.in: Removed AC_PROG_RANLIB. - - * Makefile.in, aclocal.m4, config.guess, config.sub, configure, - ltmain.sh, */Makefile.in: libtoolized again and rebuilt with - automake and autoconf. - -Sat May 10 18:44:50 1997 Tom Tromey - - * configure, aclocal.m4: Rebuilt. - * configure.in: Don't compute EXTRADIST; now handled in - src/Makefile.in. Removed macros implied by AM_INIT_AUTOMAKE. - Don't run AM_MAINTAINER_MODE. - -Thu May 8 14:34:05 1997 Anthony Green - - * missing, ltmain.sh, ltconfig.sh: Created. These are new files - required by automake and libtool. - - * README: Boosted rev to 1.14. Added notes. - - * acconfig.h: Moved PACKAGE and VERSION for new automake. - - * configure.in: Changes for libtool. - - * Makefile.am (check): make test now make check. Uses libtool now. - - * Makefile.in, configure.in, aclocal.h, fficonfig.h.in: Rebuilt. - -Thu May 1 16:27:07 1997 Anthony Green - - * missing: Added file required by new automake. - -Tue Nov 26 14:10:42 1996 Anthony Green - - * acconfig.h: Added USING_PURIFY flag. This is defined when - --enable-purify-safety was used at configure time. - - * configure.in (allsources): Added --enable-purify-safety switch. - (VERSION): Boosted rev to 1.13. - * configure: Rebuilt. - -Fri Nov 22 06:46:12 1996 Anthony Green - - * configure.in (VERSION): Boosted rev to 1.12. - Removed special CFLAGS hack for gcc. - * configure: Rebuilt. - - * README: Boosted rev to 1.12. Added notes. - - * Many files: Cygnus Support changed to Cygnus Solutions. - -Wed Oct 30 11:15:25 1996 Anthony Green - - * configure.in (VERSION): Boosted rev to 1.11. - * configure: Rebuilt. - - * README: Boosted rev to 1.11. Added notes about GNU make. - -Tue Oct 29 12:25:12 1996 Anthony Green - - * configure.in: Fixed -Wall trick. - (VERSION): Boosted rev. - * configure: Rebuilt - - * acconfig.h: Needed for --enable-debug configure switch. - - * README: Boosted rev to 1.09. Added more notes on building - libffi, and LCLint. - - * configure.in: Added --enable-debug switch. Boosted rev to - 1.09. - * configure: Rebuilt - -Tue Oct 15 13:11:28 1996 Anthony Green - - * configure.in (VERSION): Boosted rev to 1.08 - * configure: Rebuilt. - - * README: Added n32 bug fix notes. - - * Makefile.am: Added "make lint" production. - * Makefile.in: Rebuilt. - -Mon Oct 14 10:54:46 1996 Anthony Green - - * README: Added web page reference. - - * configure.in, README: Boosted rev to 1.05 - * configure: Rebuilt. - - * README: Fixed n32 sample code. - -Fri Oct 11 17:09:28 1996 Anthony Green - - * README: Added sparc notes. - - * configure.in, README: Boosted rev to 1.04. - * configure: Rebuilt. - -Thu Oct 10 10:31:03 1996 Anthony Green - - * configure.in, README: Boosted rev to 1.03. - * configure: Rebuilt. - - * README: Added struct notes. - - * Makefile.am (EXTRA_DIST): Added LICENSE to distribution. - * Makefile.in: Rebuilt. - - * README: Removed Linux section. No special notes now - because aggregates arg/return types work. - -Wed Oct 9 16:16:42 1996 Anthony Green - - * README, configure.in (VERSION): Boosted rev to 1.02 - * configure: Rebuilt. - -Tue Oct 8 11:56:33 1996 Anthony Green - - * README (NOTE): Added n32 notes. - - * Makefile.am: Added test production. - * Makefile: Rebuilt - - * README: spell checked! - - * configure.in (VERSION): Boosted rev to 1.01 - * configure: Rebuilt. - -Mon Oct 7 15:50:22 1996 Anthony Green - - * configure.in: Added nasty bit to support SGI tools. - * configure: Rebuilt. - - * README: Added SGI notes. Added note about automake bug. - -Mon Oct 7 11:00:28 1996 Anthony Green - - * README: Rewrote intro, and fixed examples. - -Fri Oct 4 10:19:55 1996 Anthony Green - - * configure.in: -D$TARGET is no longer used as a compiler switch. - It is now inserted into ffi.h at configure time. - * configure: Rebuilt. - - * FFI_ABI and FFI_STATUS are now ffi_abi and ffi_status. - -Thu Oct 3 13:47:34 1996 Anthony Green - - * README, LICENSE: Created. Wrote some docs. - - * configure.in: Don't barf on i586-unknown-linuxaout. - Added EXTRADIST code for "make dist". - * configure: Rebuilt. - - * */Makefile.in: Rebuilt with patched automake. - -Tue Oct 1 17:12:25 1996 Anthony Green - - * Makefile.am, aclocal.m4, config.guess, config.sub, - configure.in, fficonfig.h.in, install-sh, mkinstalldirs, - stamp-h.in: Created - * Makefile.in, configure: Generated - ---- libffi/include -------------------------------------------------------- - -Tue Feb 24 13:09:36 1998 Anthony Green - - * ffi_mips.h: Updated FFI_TYPE_STRUCT_* values based on - ffi.h.in changes. This is a work-around for SGI's "simple" - assembler. - -Sun Feb 22 00:51:55 1998 Geoff Keating - - * ffi.h.in: PowerPC support. - -1998-02-14 Andreas Schwab - - * ffi.h.in: Add m68k support. - (FFI_TYPE_LONGDOUBLE): Make it a separate value. - -Tue Feb 10 20:55:16 1998 Richard Henderson - - * ffi.h.in (SIZEOF_ARG): Use a pointer type by default. - - * ffi.h.in: Alpha support. - -Fri Nov 22 06:48:45 1996 Anthony Green - - * ffi.h.in, ffi_common.h: Cygnus Support -> Cygnus Solutions. - -Wed Nov 20 22:31:01 1996 Anthony Green - - * ffi.h.in: Added ffi_type_void definition. - -Tue Oct 29 12:22:40 1996 Anthony Green - - * Makefile.am (hack_DATA): Always install ffi_mips.h. - - * ffi.h.in: Removed FFI_DEBUG. It's now in the correct - place (acconfig.h). - Added #include for size_t definition. - -Tue Oct 15 17:23:35 1996 Anthony Green - - * ffi.h.in, ffi_common.h, ffi_mips.h: More clean up. - Commented out #define of FFI_DEBUG. - -Tue Oct 15 13:01:06 1996 Anthony Green - - * ffi_common.h: Added bool definition. - - * ffi.h.in, ffi_common.h: Clean up based on LCLint output. - Added funny /*@...@*/ comments to annotate source. - -Mon Oct 14 12:29:23 1996 Anthony Green - - * ffi.h.in: Interface changes based on feedback from Jim - Blandy. - -Fri Oct 11 16:49:35 1996 Anthony Green - - * ffi.h.in: Small change for sparc support. - -Thu Oct 10 14:53:37 1996 Anthony Green - - * ffi_mips.h: Added FFI_TYPE_STRUCT_* definitions for - special structure return types. - -Wed Oct 9 13:55:57 1996 Anthony Green - - * ffi.h.in: Added SIZEOF_ARG definition for X86 - -Tue Oct 8 11:40:36 1996 Anthony Green - - * ffi.h.in (FFI_FN): Added macro for eliminating compiler warnings. - Use it to case your function pointers to the proper type. - - * ffi_mips.h (SIZEOF_ARG): Added magic to fix type promotion bug. - - * Makefile.am (EXTRA_DIST): Added ffi_mips.h to EXTRA_DIST. - * Makefile: Rebuilt. - - * ffi_mips.h: Created. Moved all common mips definitions here. - -Mon Oct 7 10:58:12 1996 Anthony Green - - * ffi.h.in: The SGI assember is very picky about parens. Redefined - some macros to avoid problems. - - * ffi.h.in: Added FFI_DEFAULT_ABI definitions. Also added - externs for pointer, and 64bit integral ffi_types. - -Fri Oct 4 09:51:37 1996 Anthony Green - - * ffi.h.in: Added FFI_ABI member to ffi_cif and changed - function prototypes accordingly. - Added #define @TARGET@. Now programs including ffi.h don't - have to specify this themselves. - -Thu Oct 3 15:36:44 1996 Anthony Green - - * ffi.h.in: Changed ffi_prep_cif's values from void* to void** - - * Makefile.am (EXTRA_DIST): Added EXTRA_DIST for "make dist" - to work. - * Makefile.in: Regenerated. - -Wed Oct 2 10:16:59 1996 Anthony Green - - * Makefile.am: Created - * Makefile.in: Generated - - * ffi_common.h: Added rcsid comment - -Tue Oct 1 17:13:51 1996 Anthony Green - - * ffi.h.in, ffi_common.h: Created - ---- libffi/src ------------------------------------------------------------ - -Mon Oct 5 02:17:50 1998 Anthony Green - - * arm/ffi.c, arm/sysv.S: Created. - - * Makefile.am: Added arm files. - * Makefile.in: Rebuilt. - -Mon Oct 5 01:41:38 1998 Anthony Green - - * Makefile.am (libffi_la_LDFLAGS): Incremented revision. - -Sun Oct 4 16:27:17 1998 Anthony Green - - * alpha/osf.S (ffi_call_osf): Patch for DU assembler. - - * ffitest.c (main): long long and long double return values work - for x86. - -Fri Apr 17 11:50:58 1998 Anthony Green - - * Makefile.in: Rebuilt. - - * ffitest.c (main): Floating point tests not executed for systems - with broken lond double (SunOS 4 w/ GCC). - - * types.c: Fixed x86 alignment info for long long types. - -Thu Apr 16 07:15:28 1998 Anthony Green - - * ffitest.c: Added more notes about GCC bugs under Irix 6. - -Wed Apr 15 08:42:22 1998 Anthony Green - - * ffitest.c (struct5): New test function. - (main): New test with struct5. - -Thu Mar 5 10:48:11 1998 Anthony Green - - * prep_cif.c (initialize_aggregate): Fix assertion for - nested structures. - -Tue Feb 24 16:33:41 1998 Anthony Green - - * prep_cif.c (ffi_prep_cif): Added long double support for sparc. - -Sun Feb 22 00:52:18 1998 Geoff Keating - - * powerpc/asm.h: New file. - * powerpc/ffi.c: New file. - * powerpc/sysv.S: New file. - * Makefile.am: PowerPC port. - * ffitest.c (main): Allow all tests to run even in presence of gcc - bug on PowerPC. - -1998-02-17 Anthony Green - - * mips/ffi.c: Fixed comment typo. - - * x86/ffi.c (ffi_prep_cif_machdep), x86/sysv.S (retfloat): - Fixed x86 long double return handling. - - * types.c: Fixed x86 long double alignment info. - -1998-02-14 Andreas Schwab - - * types.c: Add m68k support. - - * ffitest.c (floating): Add long double parameter. - (return_ll, ldblit): New functions to test long long and long - double return value. - (main): Fix type error in assignment of ts[1-4]_type.elements. - Add tests for long long and long double arguments and return - values. - - * prep_cif.c (ffi_prep_cif) [M68K]: Don't allocate argument for - struct value pointer. - - * m68k/ffi.c, m68k/sysv.S: New files. - * Makefile.am: Add bits for m68k port. Add kludge to work around - automake deficiency. - (test): Don't require "." in $PATH. - * Makefile.in: Rebuilt. - -Wed Feb 11 07:36:50 1998 Anthony Green - - * Makefile.in: Rebuilt. - -Tue Feb 10 20:56:00 1998 Richard Henderson - - * alpha/ffi.c, alpha/osf.S: New files. - * Makefile.am: Alpha port. - -Tue Nov 18 14:12:07 1997 Anthony Green - - * mips/ffi.c (ffi_prep_cif_machdep): Initialize rstruct_flag - for n32. - -Tue Jun 3 17:18:20 1997 Anthony Green - - * ffitest.c (main): Added hack to get structure tests working - correctly. - -Sat May 10 19:06:42 1997 Tom Tromey - - * Makefile.in: Rebuilt. - * Makefile.am (EXTRA_DIST): Explicitly list all distributable - files in subdirs. - (VERSION, CC): Removed. - -Thu May 8 17:19:01 1997 Anthony Green - - * Makefile.am: Many changes for new automake and libtool. - * Makefile.in: Rebuilt. - -Fri Nov 22 06:57:56 1996 Anthony Green - - * ffitest.c (main): Fixed test case for non mips machines. - -Wed Nov 20 22:31:59 1996 Anthony Green - - * types.c: Added ffi_type_void declaration. - -Tue Oct 29 13:07:19 1996 Anthony Green - - * ffitest.c (main): Fixed character constants. - (main): Emit warning for structure test 3 failure on Sun. - - * Makefile.am (VPATH): Fixed VPATH def'n so automake won't - strip it out. - Moved distdir hack from libffi to automake. - (ffitest): Added missing -c for $(COMPILE) (change in automake). - * Makefile.in: Rebuilt. - -Tue Oct 15 13:08:20 1996 Anthony Green - - * Makefile.am: Added "make lint" production. - * Makefile.in: Rebuilt. - - * prep_cif.c (STACK_ARG_SIZE): Improved STACK_ARG_SIZE macro. - Clean up based on LCLint output. Added funny /*@...@*/ comments to - annotate source. - - * ffitest.c, debug.c: Cleaned up code. - -Mon Oct 14 12:26:56 1996 Anthony Green - - * ffitest.c: Changes based on interface changes. - - * prep_cif.c (ffi_prep_cif): Cleaned up interface based on - feedback from Jim Blandy. - -Fri Oct 11 15:53:18 1996 Anthony Green - - * ffitest.c: Reordered tests while porting to sparc. - Made changes to handle lame structure passing for sparc. - Removed calls to fflush(). - - * prep_cif.c (ffi_prep_cif): Added special case for sparc - aggregate type arguments. - -Thu Oct 10 09:56:51 1996 Anthony Green - - * ffitest.c (main): Added structure passing/returning tests. - - * prep_cif.c (ffi_prep_cif): Perform proper initialization - of structure return types if needed. - (initialize_aggregate): Bug fix - -Wed Oct 9 16:04:20 1996 Anthony Green - - * types.c: Added special definitions for x86 (double doesn't - need double word alignment). - - * ffitest.c: Added many tests - -Tue Oct 8 09:19:22 1996 Anthony Green - - * prep_cif.c (ffi_prep_cif): Fixed assertion. - - * debug.c (ffi_assert): Must return a non void now. - - * Makefile.am: Added test production. - * Makefile: Rebuilt. - - * ffitest.c (main): Created. - - * types.c: Created. Stripped common code out of */ffi.c. - - * prep_cif.c: Added missing stdlib.h include. - - * debug.c (ffi_type_test): Used "a" to eliminate compiler - warnings in non-debug builds. Included ffi_common.h. - -Mon Oct 7 15:36:42 1996 Anthony Green - - * Makefile.am: Added a rule for .s -> .o - This is required by the SGI compiler. - * Makefile: Rebuilt. - -Fri Oct 4 09:51:08 1996 Anthony Green - - * prep_cif.c (initialize_aggregate): Moved abi specification - to ffi_prep_cif(). - -Thu Oct 3 15:37:37 1996 Anthony Green - - * prep_cif.c (ffi_prep_cif): Changed values from void* to void**. - (initialize_aggregate): Fixed aggregate type initialization. - - * Makefile.am (EXTRA_DIST): Added support code for "make dist". - * Makefile.in: Regenerated. - -Wed Oct 2 11:41:57 1996 Anthony Green - - * debug.c, prep_cif: Created. - - * Makefile.am: Added debug.o and prep_cif.o to OBJ. - * Makefile.in: Regenerated. - - * Makefile.am (INCLUDES): Added missing -I../include - * Makefile.in: Regenerated. - -Tue Oct 1 17:11:51 1996 Anthony Green - - * error.c, Makefile.am: Created. - * Makefile.in: Generated. - ---- libffi/src/x86 -------------------------------------------------------- - -Sun Oct 4 16:27:17 1998 Anthony Green - - * sysv.S (retlongdouble): Fixed long long return value support. - * ffi.c (ffi_prep_cif_machdep): Ditto. - -Wed May 13 04:30:33 1998 Anthony Green - - * ffi.c (ffi_prep_cif_machdep): Fixed long double return value - support. - -Wed Apr 15 08:43:20 1998 Anthony Green - - * ffi.c (ffi_prep_args): small struct support was missing. - -Thu May 8 16:53:58 1997 Anthony Green - - * objects.mak: Removed. - -Mon Dec 2 15:12:58 1996 Tom Tromey - - * sysv.S: Use .balign, for a.out Linux boxes. - -Tue Oct 15 13:06:50 1996 Anthony Green - - * ffi.c: Clean up based on LCLint output. - Added funny /*@...@*/ comments to annotate source. - -Fri Oct 11 16:43:38 1996 Anthony Green - - * ffi.c (ffi_call): Added assertion for bad ABIs. - -Wed Oct 9 13:57:27 1996 Anthony Green - - * sysv.S (retdouble): Fixed double return problems. - - * ffi.c (ffi_call): Corrected fn arg definition. - (ffi_prep_cif_machdep): Fixed double return problems - -Tue Oct 8 12:12:49 1996 Anthony Green - - * ffi.c: Moved ffi_type definitions to types.c. - (ffi_prep_args): Fixed type promotion bug. - -Mon Oct 7 15:53:06 1996 Anthony Green - - * ffi.c (FFI_*_TYPEDEF): Removed redundant ';' - -Fri Oct 4 09:54:53 1996 Anthony Green - - * ffi.c (ffi_call): Removed FFI_ABI arg, and swapped - remaining args. - -Wed Oct 2 10:07:05 1996 Anthony Green - - * ffi.c, sysv.S, objects.mak: Created. - (ffi_prep_cif): cif->rvalue no longer initialized to NULL. - (ffi_prep_cif_machdep): Moved machine independent cif processing - to src/prep_cif.c. Introduced ffi_prep_cif_machdep(). - ---- libffi/src/mips ------------------------------------------------------- - -Tue Feb 17 17:18:07 1998 Anthony Green - - * o32.S: Fixed typo in comment. - - * ffi.c (ffi_prep_cif_machdep): Fixed argument processing. - -Thu May 8 16:53:58 1997 Anthony Green - - * o32.s, n32.s: Wrappers for SGI tool support. - - * objects.mak: Removed. - -Tue Oct 29 14:37:45 1996 Anthony Green - - * ffi.c (ffi_prep_args): Changed int z to size_t z. - -Tue Oct 15 13:17:25 1996 Anthony Green - - * n32.S: Fixed bad stack munging. - - * ffi.c: Moved prototypes for ffi_call_?32() to here from - ffi_mips.h because extended_cif is not defined in ffi_mips.h. - -Mon Oct 14 12:42:02 1996 Anthony Green - - * ffi.c: Interface changes based on feedback from Jim Blandy. - -Thu Oct 10 11:22:16 1996 Anthony Green - - * n32.S, ffi.c: Lots of changes to support passing and - returning structures with the n32 calling convention. - - * n32.S: Fixed fn pointer bug. - - * ffi.c (ffi_prep_cif_machdep): Fix for o32 structure - return values. - (ffi_prep_args): Fixed n32 structure passing when structures - partially fit in registers. - -Wed Oct 9 13:49:25 1996 Anthony Green - - * objects.mak: Added n32.o. - - * n32.S: Created. - - * ffi.c (ffi_prep_args): Added magic to support proper - n32 processing. - -Tue Oct 8 10:37:35 1996 Anthony Green - - * ffi.c: Moved ffi_type definitions to types.c. - (ffi_prep_args): Fixed type promotion bug. - - * o32.S: This code is only built for o32 compiles. - A lot of the #define cruft has moved to ffi_mips.h. - - * ffi.c (ffi_prep_cif_machdep): Fixed arg flags. Second arg - is only processed if the first is either a float or double. - -Mon Oct 7 15:33:59 1996 Anthony Green - - * o32.S: Modified to compile under each of o32, n32 and n64. - - * ffi.c (FFI_*_TYPEDEF): Removed redundant ';' - -Fri Oct 4 09:53:25 1996 Anthony Green - - * ffi.c (ffi_call): Removed FFI_ABI arg, and swapped - remaining args. - -Wed Oct 2 17:41:22 1996 Anthony Green - - * o32.S: Removed crufty definitions. - -Wed Oct 2 12:53:42 1996 Anthony Green - - * ffi.c (ffi_prep_cif): cif->rvalue no longer initialized to NULL. - (ffi_prep_cif_machdep): Moved all machine independent cif processing - to src/prep_cif.c. Introduced ffi_prep_cif_machdep. Return types - of FFI_TYPE_STRUCT are no different than FFI_TYPE_INT. - -Tue Oct 1 17:11:02 1996 Anthony Green - - * ffi.c, o32.S, object.mak: Created - ---- libffi/src/sparc ------------------------------------------------------ - -Tue Feb 24 16:33:18 1998 Anthony Green - - * ffi.c (ffi_prep_args): Added long double support. - -Thu May 8 16:53:58 1997 Anthony Green - - * objects.mak: Removed. - -Thu May 1 16:07:56 1997 Anthony Green - - * v8.S: Fixed minor portability problem reported by - Russ McManus . - -Tue Nov 26 14:12:43 1996 Anthony Green - - * v8.S: Used STACKFRAME define elsewhere. - - * ffi.c (ffi_prep_args): Zero out space when USING_PURIFY - is set. - (ffi_prep_cif_machdep): Allocate the correct stack frame - space for functions with < 6 args. - -Tue Oct 29 15:08:55 1996 Anthony Green - - * ffi.c (ffi_prep_args): int z is now size_t z. - -Mon Oct 14 13:31:24 1996 Anthony Green - - * v8.S (ffi_call_V8): Gordon rewrites this again. It looks - great now. - - * ffi.c (ffi_call): The comment about hijacked registers - is no longer valid after gordoni hacked v8.S. - - * v8.S (ffi_call_V8): Rewrote with gordoni. Much simpler. - - * v8.S, ffi.c: ffi_call() had changed to accept more than - two args, so v8.S had to change (because it hijacks incoming - arg registers). - - * ffi.c: Interface changes based on feedback from Jim Blandy. - -Thu Oct 10 17:48:16 1996 Anthony Green - - * ffi.c, v8.S, objects.mak: Created. - - diff --git a/ruby/ext/fiddle/libffi-3.2.1/LICENSE b/ruby/ext/fiddle/libffi-3.2.1/LICENSE deleted file mode 100644 index a66fab4f2..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others. -See source files for details. - -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. diff --git a/ruby/ext/fiddle/libffi-3.2.1/Makefile.am b/ruby/ext/fiddle/libffi-3.2.1/Makefile.am deleted file mode 100644 index 0e4045100..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/Makefile.am +++ /dev/null @@ -1,258 +0,0 @@ -## Process this with automake to create Makefile.in - -AUTOMAKE_OPTIONS = foreign subdir-objects - -ACLOCAL_AMFLAGS = -I m4 - -SUBDIRS = include testsuite man - -EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj \ - src/aarch64/ffi.c src/aarch64/ffitarget.h src/aarch64/sysv.S \ - src/alpha/ffi.c src/alpha/osf.S \ - src/alpha/ffitarget.h src/arc/ffi.c src/arc/arcompact.S \ - src/arc/ffitarget.h src/arm/ffi.c src/arm/sysv.S \ - src/arm/ffitarget.h src/avr32/ffi.c src/avr32/sysv.S \ - src/avr32/ffitarget.h src/cris/ffi.c src/cris/sysv.S \ - src/cris/ffitarget.h src/ia64/ffi.c src/ia64/ffitarget.h \ - src/ia64/ia64_flags.h src/ia64/unix.S src/mips/ffi.c \ - src/mips/n32.S src/mips/o32.S src/metag/ffi.c \ - src/metag/ffitarget.h src/metag/sysv.S src/moxie/ffi.c \ - src/moxie/ffitarget.h src/moxie/eabi.S src/mips/ffitarget.h \ - src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \ - src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \ - src/m88k/ffi.c src/m88k/obsd.S src/m88k/ffitarget.h \ - src/microblaze/ffi.c src/microblaze/sysv.S \ - src/microblaze/ffitarget.h \ - src/nios2/ffi.c src/nios2/ffitarget.h src/nios2/sysv.S \ - src/or1k/ffi.c src/or1k/ffitarget.h src/or1k/sysv.S \ - src/powerpc/ffi.c src/powerpc/ffi_powerpc.h \ - src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c \ - src/powerpc/sysv.S src/powerpc/linux64.S \ - src/powerpc/linux64_closure.S src/powerpc/ppc_closure.S \ - src/powerpc/asm.h src/powerpc/aix.S src/powerpc/darwin.S \ - src/powerpc/aix_closure.S src/powerpc/darwin_closure.S \ - src/powerpc/ffi_darwin.c src/powerpc/ffitarget.h \ - src/s390/ffi.c src/s390/sysv.S src/s390/ffitarget.h \ - src/sh/ffi.c src/sh/sysv.S src/sh/ffitarget.h src/sh64/ffi.c \ - src/sh64/sysv.S src/sh64/ffitarget.h src/sparc/v8.S \ - src/sparc/v9.S src/sparc/ffitarget.h src/sparc/ffi.c \ - src/x86/darwin64.S src/x86/ffi.c src/x86/sysv.S \ - src/x86/win32.S src/x86/darwin.S src/x86/win64.S \ - src/x86/freebsd.S src/x86/ffi64.c src/x86/unix64.S \ - src/x86/ffitarget.h src/pa/ffitarget.h src/pa/ffi.c \ - src/pa/linux.S src/pa/hpux32.S src/frv/ffi.c src/bfin/ffi.c \ - src/bfin/ffitarget.h src/bfin/sysv.S src/frv/eabi.S \ - src/frv/ffitarget.h src/dlmalloc.c src/tile/ffi.c \ - src/tile/ffitarget.h src/tile/tile.S libtool-version \ - src/vax/ffi.c src/vax/ffitarget.h src/vax/elfbsd.S \ - src/xtensa/ffitarget.h src/xtensa/ffi.c src/xtensa/sysv.S \ - ChangeLog.libffi m4/libtool.m4 m4/lt~obsolete.m4 \ - m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 \ - m4/ltversion.m4 src/arm/gentramp.sh src/debug.c msvcc.sh \ - generate-darwin-source-and-headers.py \ - libffi.xcodeproj/project.pbxproj src/arm/trampoline.S \ - libtool-ldflags ChangeLog.libffi-3.1 - -info_TEXINFOS = doc/libffi.texi - -## ################################################################ - -## -## This section is for make and multilib madness. -## - -# Work around what appears to be a GNU make bug handling MAKEFLAGS -# values defined in terms of make variables, as is the case for CC and -# friends when we are called from the top level Makefile. -AM_MAKEFLAGS = \ - 'AR_FLAGS=$(AR_FLAGS)' \ - 'CC_FOR_BUILD=$(CC_FOR_BUILD)' \ - 'CFLAGS=$(CFLAGS)' \ - 'CXXFLAGS=$(CXXFLAGS)' \ - 'CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)' \ - 'CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)' \ - 'INSTALL=$(INSTALL)' \ - 'INSTALL_DATA=$(INSTALL_DATA)' \ - 'INSTALL_PROGRAM=$(INSTALL_PROGRAM)' \ - 'INSTALL_SCRIPT=$(INSTALL_SCRIPT)' \ - 'JC1FLAGS=$(JC1FLAGS)' \ - 'LDFLAGS=$(LDFLAGS)' \ - 'LIBCFLAGS=$(LIBCFLAGS)' \ - 'LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)' \ - 'MAKE=$(MAKE)' \ - 'MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)' \ - 'PICFLAG=$(PICFLAG)' \ - 'PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)' \ - 'RUNTESTFLAGS=$(RUNTESTFLAGS)' \ - 'SHELL=$(SHELL)' \ - 'exec_prefix=$(exec_prefix)' \ - 'infodir=$(infodir)' \ - 'libdir=$(libdir)' \ - 'mandir=$(mandir)' \ - 'prefix=$(prefix)' \ - 'AR=$(AR)' \ - 'AS=$(AS)' \ - 'CC=$(CC)' \ - 'CXX=$(CXX)' \ - 'LD=$(LD)' \ - 'NM=$(NM)' \ - 'RANLIB=$(RANLIB)' \ - 'DESTDIR=$(DESTDIR)' - -# Subdir rules rely on $(FLAGS_TO_PASS) -FLAGS_TO_PASS = $(AM_MAKEFLAGS) - -MAKEOVERRIDES= - -toolexeclib_LTLIBRARIES = libffi.la -noinst_LTLIBRARIES = libffi_convenience.la - -libffi_la_SOURCES = src/prep_cif.c src/types.c \ - src/raw_api.c src/java_raw_api.c src/closures.c - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libffi.pc - -nodist_libffi_la_SOURCES = - -if FFI_DEBUG -nodist_libffi_la_SOURCES += src/debug.c -endif - -if MIPS -nodist_libffi_la_SOURCES += src/mips/ffi.c src/mips/o32.S src/mips/n32.S -endif -if BFIN -nodist_libffi_la_SOURCES += src/bfin/ffi.c src/bfin/sysv.S -endif -if X86 -nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/sysv.S src/x86/win32.S -endif -if X86_FREEBSD -nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/freebsd.S src/x86/win32.S -endif -if X86_WIN32 -nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win32.S -endif -if X86_WIN64 -nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win64.S -endif -if X86_DARWIN -nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S -if X86_DARWIN32 -nodist_libffi_la_SOURCES += src/x86/win32.S -endif -endif -if SPARC -nodist_libffi_la_SOURCES += src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S -endif -if ALPHA -nodist_libffi_la_SOURCES += src/alpha/ffi.c src/alpha/osf.S -endif -if IA64 -nodist_libffi_la_SOURCES += src/ia64/ffi.c src/ia64/unix.S -endif -if M32R -nodist_libffi_la_SOURCES += src/m32r/sysv.S src/m32r/ffi.c -endif -if M68K -nodist_libffi_la_SOURCES += src/m68k/ffi.c src/m68k/sysv.S -endif -if M88K -nodist_libffi_la_SOURCES += src/m88k/ffi.c src/m88k/obsd.S -endif -if MOXIE -nodist_libffi_la_SOURCES += src/moxie/ffi.c src/moxie/eabi.S -endif -if MICROBLAZE -nodist_libffi_la_SOURCES += src/microblaze/ffi.c src/microblaze/sysv.S -endif -if NIOS2 -nodist_libffi_la_SOURCES += src/nios2/sysv.S src/nios2/ffi.c -endif -if OR1K -nodist_libffi_la_SOURCES += src/or1k/sysv.S src/or1k/ffi.c -endif -if POWERPC -nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S -endif -if POWERPC_AIX -nodist_libffi_la_SOURCES += src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S -endif -if POWERPC_DARWIN -nodist_libffi_la_SOURCES += src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S -endif -if POWERPC_FREEBSD -nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/sysv.S src/powerpc/ppc_closure.S -endif -if AARCH64 -nodist_libffi_la_SOURCES += src/aarch64/sysv.S src/aarch64/ffi.c -endif -if ARC -nodist_libffi_la_SOURCES += src/arc/arcompact.S src/arc/ffi.c -endif -if ARM -nodist_libffi_la_SOURCES += src/arm/sysv.S src/arm/ffi.c -if FFI_EXEC_TRAMPOLINE_TABLE -nodist_libffi_la_SOURCES += src/arm/trampoline.S -endif -endif -if AVR32 -nodist_libffi_la_SOURCES += src/avr32/sysv.S src/avr32/ffi.c -endif -if LIBFFI_CRIS -nodist_libffi_la_SOURCES += src/cris/sysv.S src/cris/ffi.c -endif -if FRV -nodist_libffi_la_SOURCES += src/frv/eabi.S src/frv/ffi.c -endif -if S390 -nodist_libffi_la_SOURCES += src/s390/sysv.S src/s390/ffi.c -endif -if X86_64 -nodist_libffi_la_SOURCES += src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S -endif -if SH -nodist_libffi_la_SOURCES += src/sh/sysv.S src/sh/ffi.c -endif -if SH64 -nodist_libffi_la_SOURCES += src/sh64/sysv.S src/sh64/ffi.c -endif -if PA_LINUX -nodist_libffi_la_SOURCES += src/pa/linux.S src/pa/ffi.c -endif -if PA_HPUX -nodist_libffi_la_SOURCES += src/pa/hpux32.S src/pa/ffi.c -endif -if TILE -nodist_libffi_la_SOURCES += src/tile/tile.S src/tile/ffi.c -endif -if XTENSA -nodist_libffi_la_SOURCES += src/xtensa/sysv.S src/xtensa/ffi.c -endif -if METAG -nodist_libffi_la_SOURCES += src/metag/sysv.S src/metag/ffi.c -endif -if VAX -nodist_libffi_la_SOURCES += src/vax/elfbsd.S src/vax/ffi.c -endif - -libffi_convenience_la_SOURCES = $(libffi_la_SOURCES) -nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES) - -LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/libtool-ldflags $(LDFLAGS)) - -AM_CFLAGS = -if FFI_DEBUG -# Build debug. Define FFI_DEBUG on the commandline so that, when building with -# MSVC, it can link against the debug CRT. -AM_CFLAGS += -DFFI_DEBUG -endif - -libffi_la_LDFLAGS = -no-undefined -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS) - -AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src -AM_CCASFLAGS = $(AM_CPPFLAGS) - -dist-hook: - if [ -d $(top_srcdir)/.git ] ; then (cd $(top_srcdir); git log --no-decorate) ; else echo 'See git log for history.' ; fi > $(distdir)/ChangeLog diff --git a/ruby/ext/fiddle/libffi-3.2.1/Makefile.in b/ruby/ext/fiddle/libffi-3.2.1/Makefile.in deleted file mode 100644 index dcc5f4751..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/Makefile.in +++ /dev/null @@ -1,2177 +0,0 @@ -# Makefile.in generated by automake 1.13.4 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2013 Free Software Foundation, Inc. - -# This Makefile.in 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. - -@SET_MAKE@ - - -VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -@FFI_DEBUG_TRUE@am__append_1 = src/debug.c -@MIPS_TRUE@am__append_2 = src/mips/ffi.c src/mips/o32.S src/mips/n32.S -@BFIN_TRUE@am__append_3 = src/bfin/ffi.c src/bfin/sysv.S -@X86_TRUE@am__append_4 = src/x86/ffi.c src/x86/sysv.S src/x86/win32.S -@X86_FREEBSD_TRUE@am__append_5 = src/x86/ffi.c src/x86/freebsd.S src/x86/win32.S -@X86_WIN32_TRUE@am__append_6 = src/x86/ffi.c src/x86/win32.S -@X86_WIN64_TRUE@am__append_7 = src/x86/ffi.c src/x86/win64.S -@X86_DARWIN_TRUE@am__append_8 = src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S -@X86_DARWIN32_TRUE@@X86_DARWIN_TRUE@am__append_9 = src/x86/win32.S -@SPARC_TRUE@am__append_10 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S -@ALPHA_TRUE@am__append_11 = src/alpha/ffi.c src/alpha/osf.S -@IA64_TRUE@am__append_12 = src/ia64/ffi.c src/ia64/unix.S -@M32R_TRUE@am__append_13 = src/m32r/sysv.S src/m32r/ffi.c -@M68K_TRUE@am__append_14 = src/m68k/ffi.c src/m68k/sysv.S -@M88K_TRUE@am__append_15 = src/m88k/ffi.c src/m88k/obsd.S -@MOXIE_TRUE@am__append_16 = src/moxie/ffi.c src/moxie/eabi.S -@MICROBLAZE_TRUE@am__append_17 = src/microblaze/ffi.c src/microblaze/sysv.S -@NIOS2_TRUE@am__append_18 = src/nios2/sysv.S src/nios2/ffi.c -@OR1K_TRUE@am__append_19 = src/or1k/sysv.S src/or1k/ffi.c -@POWERPC_TRUE@am__append_20 = src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S -@POWERPC_AIX_TRUE@am__append_21 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S -@POWERPC_DARWIN_TRUE@am__append_22 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S -@POWERPC_FREEBSD_TRUE@am__append_23 = src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/sysv.S src/powerpc/ppc_closure.S -@AARCH64_TRUE@am__append_24 = src/aarch64/sysv.S src/aarch64/ffi.c -@ARC_TRUE@am__append_25 = src/arc/arcompact.S src/arc/ffi.c -@ARM_TRUE@am__append_26 = src/arm/sysv.S src/arm/ffi.c -@ARM_TRUE@@FFI_EXEC_TRAMPOLINE_TABLE_TRUE@am__append_27 = src/arm/trampoline.S -@AVR32_TRUE@am__append_28 = src/avr32/sysv.S src/avr32/ffi.c -@LIBFFI_CRIS_TRUE@am__append_29 = src/cris/sysv.S src/cris/ffi.c -@FRV_TRUE@am__append_30 = src/frv/eabi.S src/frv/ffi.c -@S390_TRUE@am__append_31 = src/s390/sysv.S src/s390/ffi.c -@X86_64_TRUE@am__append_32 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S -@SH_TRUE@am__append_33 = src/sh/sysv.S src/sh/ffi.c -@SH64_TRUE@am__append_34 = src/sh64/sysv.S src/sh64/ffi.c -@PA_LINUX_TRUE@am__append_35 = src/pa/linux.S src/pa/ffi.c -@PA_HPUX_TRUE@am__append_36 = src/pa/hpux32.S src/pa/ffi.c -@TILE_TRUE@am__append_37 = src/tile/tile.S src/tile/ffi.c -@XTENSA_TRUE@am__append_38 = src/xtensa/sysv.S src/xtensa/ffi.c -@METAG_TRUE@am__append_39 = src/metag/sysv.S src/metag/ffi.c -@VAX_TRUE@am__append_40 = src/vax/elfbsd.S src/vax/ffi.c -# Build debug. Define FFI_DEBUG on the commandline so that, when building with -# MSVC, it can link against the debug CRT. -@FFI_DEBUG_TRUE@am__append_41 = -DFFI_DEBUG -subdir = . -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/configure $(am__configure_deps) \ - $(srcdir)/fficonfig.h.in $(srcdir)/libffi.pc.in depcomp \ - mdate-sh $(srcdir)/doc/version.texi $(srcdir)/doc/stamp-vti \ - texinfo.tex README compile config.guess config.sub install-sh \ - missing ltmain.sh -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/asmcfi.m4 \ - $(top_srcdir)/m4/ax_append_flag.m4 \ - $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compile_flag.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_configure_args.m4 \ - $(top_srcdir)/m4/ax_enable_builddir.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = fficonfig.h -CONFIG_CLEAN_FILES = libffi.pc -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(infodir)" \ - "$(DESTDIR)$(pkgconfigdir)" -LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES) -libffi_la_LIBADD = -am__dirstamp = $(am__leading_dot)dirstamp -am_libffi_la_OBJECTS = src/prep_cif.lo src/types.lo src/raw_api.lo \ - src/java_raw_api.lo src/closures.lo -@FFI_DEBUG_TRUE@am__objects_1 = src/debug.lo -@MIPS_TRUE@am__objects_2 = src/mips/ffi.lo src/mips/o32.lo \ -@MIPS_TRUE@ src/mips/n32.lo -@BFIN_TRUE@am__objects_3 = src/bfin/ffi.lo src/bfin/sysv.lo -@X86_TRUE@am__objects_4 = src/x86/ffi.lo src/x86/sysv.lo \ -@X86_TRUE@ src/x86/win32.lo -@X86_FREEBSD_TRUE@am__objects_5 = src/x86/ffi.lo src/x86/freebsd.lo \ -@X86_FREEBSD_TRUE@ src/x86/win32.lo -@X86_WIN32_TRUE@am__objects_6 = src/x86/ffi.lo src/x86/win32.lo -@X86_WIN64_TRUE@am__objects_7 = src/x86/ffi.lo src/x86/win64.lo -@X86_DARWIN_TRUE@am__objects_8 = src/x86/ffi.lo src/x86/darwin.lo \ -@X86_DARWIN_TRUE@ src/x86/ffi64.lo src/x86/darwin64.lo -@X86_DARWIN32_TRUE@@X86_DARWIN_TRUE@am__objects_9 = src/x86/win32.lo -@SPARC_TRUE@am__objects_10 = src/sparc/ffi.lo src/sparc/v8.lo \ -@SPARC_TRUE@ src/sparc/v9.lo -@ALPHA_TRUE@am__objects_11 = src/alpha/ffi.lo src/alpha/osf.lo -@IA64_TRUE@am__objects_12 = src/ia64/ffi.lo src/ia64/unix.lo -@M32R_TRUE@am__objects_13 = src/m32r/sysv.lo src/m32r/ffi.lo -@M68K_TRUE@am__objects_14 = src/m68k/ffi.lo src/m68k/sysv.lo -@M88K_TRUE@am__objects_15 = src/m88k/ffi.lo src/m88k/obsd.lo -@MOXIE_TRUE@am__objects_16 = src/moxie/ffi.lo src/moxie/eabi.lo -@MICROBLAZE_TRUE@am__objects_17 = src/microblaze/ffi.lo \ -@MICROBLAZE_TRUE@ src/microblaze/sysv.lo -@NIOS2_TRUE@am__objects_18 = src/nios2/sysv.lo src/nios2/ffi.lo -@OR1K_TRUE@am__objects_19 = src/or1k/sysv.lo src/or1k/ffi.lo -@POWERPC_TRUE@am__objects_20 = src/powerpc/ffi.lo \ -@POWERPC_TRUE@ src/powerpc/ffi_sysv.lo \ -@POWERPC_TRUE@ src/powerpc/ffi_linux64.lo src/powerpc/sysv.lo \ -@POWERPC_TRUE@ src/powerpc/ppc_closure.lo \ -@POWERPC_TRUE@ src/powerpc/linux64.lo \ -@POWERPC_TRUE@ src/powerpc/linux64_closure.lo -@POWERPC_AIX_TRUE@am__objects_21 = src/powerpc/ffi_darwin.lo \ -@POWERPC_AIX_TRUE@ src/powerpc/aix.lo \ -@POWERPC_AIX_TRUE@ src/powerpc/aix_closure.lo -@POWERPC_DARWIN_TRUE@am__objects_22 = src/powerpc/ffi_darwin.lo \ -@POWERPC_DARWIN_TRUE@ src/powerpc/darwin.lo \ -@POWERPC_DARWIN_TRUE@ src/powerpc/darwin_closure.lo -@POWERPC_FREEBSD_TRUE@am__objects_23 = src/powerpc/ffi.lo \ -@POWERPC_FREEBSD_TRUE@ src/powerpc/ffi_sysv.lo \ -@POWERPC_FREEBSD_TRUE@ src/powerpc/sysv.lo \ -@POWERPC_FREEBSD_TRUE@ src/powerpc/ppc_closure.lo -@AARCH64_TRUE@am__objects_24 = src/aarch64/sysv.lo src/aarch64/ffi.lo -@ARC_TRUE@am__objects_25 = src/arc/arcompact.lo src/arc/ffi.lo -@ARM_TRUE@am__objects_26 = src/arm/sysv.lo src/arm/ffi.lo -@ARM_TRUE@@FFI_EXEC_TRAMPOLINE_TABLE_TRUE@am__objects_27 = src/arm/trampoline.lo -@AVR32_TRUE@am__objects_28 = src/avr32/sysv.lo src/avr32/ffi.lo -@LIBFFI_CRIS_TRUE@am__objects_29 = src/cris/sysv.lo src/cris/ffi.lo -@FRV_TRUE@am__objects_30 = src/frv/eabi.lo src/frv/ffi.lo -@S390_TRUE@am__objects_31 = src/s390/sysv.lo src/s390/ffi.lo -@X86_64_TRUE@am__objects_32 = src/x86/ffi64.lo src/x86/unix64.lo \ -@X86_64_TRUE@ src/x86/ffi.lo src/x86/sysv.lo -@SH_TRUE@am__objects_33 = src/sh/sysv.lo src/sh/ffi.lo -@SH64_TRUE@am__objects_34 = src/sh64/sysv.lo src/sh64/ffi.lo -@PA_LINUX_TRUE@am__objects_35 = src/pa/linux.lo src/pa/ffi.lo -@PA_HPUX_TRUE@am__objects_36 = src/pa/hpux32.lo src/pa/ffi.lo -@TILE_TRUE@am__objects_37 = src/tile/tile.lo src/tile/ffi.lo -@XTENSA_TRUE@am__objects_38 = src/xtensa/sysv.lo src/xtensa/ffi.lo -@METAG_TRUE@am__objects_39 = src/metag/sysv.lo src/metag/ffi.lo -@VAX_TRUE@am__objects_40 = src/vax/elfbsd.lo src/vax/ffi.lo -nodist_libffi_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ - $(am__objects_3) $(am__objects_4) $(am__objects_5) \ - $(am__objects_6) $(am__objects_7) $(am__objects_8) \ - $(am__objects_9) $(am__objects_10) $(am__objects_11) \ - $(am__objects_12) $(am__objects_13) $(am__objects_14) \ - $(am__objects_15) $(am__objects_16) $(am__objects_17) \ - $(am__objects_18) $(am__objects_19) $(am__objects_20) \ - $(am__objects_21) $(am__objects_22) $(am__objects_23) \ - $(am__objects_24) $(am__objects_25) $(am__objects_26) \ - $(am__objects_27) $(am__objects_28) $(am__objects_29) \ - $(am__objects_30) $(am__objects_31) $(am__objects_32) \ - $(am__objects_33) $(am__objects_34) $(am__objects_35) \ - $(am__objects_36) $(am__objects_37) $(am__objects_38) \ - $(am__objects_39) $(am__objects_40) -libffi_la_OBJECTS = $(am_libffi_la_OBJECTS) \ - $(nodist_libffi_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -libffi_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libffi_la_LDFLAGS) $(LDFLAGS) -o $@ -libffi_convenience_la_LIBADD = -am__objects_41 = src/prep_cif.lo src/types.lo src/raw_api.lo \ - src/java_raw_api.lo src/closures.lo -am_libffi_convenience_la_OBJECTS = $(am__objects_41) -am__objects_42 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \ - $(am__objects_4) $(am__objects_5) $(am__objects_6) \ - $(am__objects_7) $(am__objects_8) $(am__objects_9) \ - $(am__objects_10) $(am__objects_11) $(am__objects_12) \ - $(am__objects_13) $(am__objects_14) $(am__objects_15) \ - $(am__objects_16) $(am__objects_17) $(am__objects_18) \ - $(am__objects_19) $(am__objects_20) $(am__objects_21) \ - $(am__objects_22) $(am__objects_23) $(am__objects_24) \ - $(am__objects_25) $(am__objects_26) $(am__objects_27) \ - $(am__objects_28) $(am__objects_29) $(am__objects_30) \ - $(am__objects_31) $(am__objects_32) $(am__objects_33) \ - $(am__objects_34) $(am__objects_35) $(am__objects_36) \ - $(am__objects_37) $(am__objects_38) $(am__objects_39) \ - $(am__objects_40) -nodist_libffi_convenience_la_OBJECTS = $(am__objects_42) -libffi_convenience_la_OBJECTS = $(am_libffi_convenience_la_OBJECTS) \ - $(nodist_libffi_convenience_la_OBJECTS) -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -LTCPPASCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CCASFLAGS) $(CCASFLAGS) -AM_V_CPPAS = $(am__v_CPPAS_@AM_V@) -am__v_CPPAS_ = $(am__v_CPPAS_@AM_DEFAULT_V@) -am__v_CPPAS_0 = @echo " CPPAS " $@; -am__v_CPPAS_1 = -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libffi_la_SOURCES) $(nodist_libffi_la_SOURCES) \ - $(libffi_convenience_la_SOURCES) \ - $(nodist_libffi_convenience_la_SOURCES) -DIST_SOURCES = $(libffi_la_SOURCES) $(libffi_convenience_la_SOURCES) -AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) -am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) -am__v_DVIPS_0 = @echo " DVIPS " $@; -am__v_DVIPS_1 = -AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) -am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) -am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; -am__v_MAKEINFO_1 = -AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) -am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) -am__v_INFOHTML_0 = @echo " INFOHTML" $@; -am__v_INFOHTML_1 = -AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) -am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) -am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; -am__v_TEXI2DVI_1 = -AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) -am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) -am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; -am__v_TEXI2PDF_1 = -AM_V_texinfo = $(am__v_texinfo_@AM_V@) -am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) -am__v_texinfo_0 = -q -am__v_texinfo_1 = -AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) -am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) -am__v_texidevnull_0 = > /dev/null -am__v_texidevnull_1 = -INFO_DEPS = $(srcdir)/doc/libffi.info -am__TEXINFO_TEX_DIR = $(srcdir) -DVIS = doc/libffi.dvi -PDFS = doc/libffi.pdf -PSS = doc/libffi.ps -HTMLS = doc/libffi.html -TEXINFOS = doc/libffi.texi -TEXI2DVI = texi2dvi -TEXI2PDF = $(TEXI2DVI) --pdf --batch -MAKEINFOHTML = $(MAKEINFO) --html -AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) -DVIPS = dvips -RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ - ctags-recursive dvi-recursive html-recursive info-recursive \ - install-data-recursive install-dvi-recursive \ - install-exec-recursive install-html-recursive \ - install-info-recursive install-pdf-recursive \ - install-ps-recursive install-recursive installcheck-recursive \ - installdirs-recursive pdf-recursive ps-recursive \ - tags-recursive uninstall-recursive -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -DATA = $(pkgconfig_DATA) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -am__recursive_targets = \ - $(RECURSIVE_TARGETS) \ - $(RECURSIVE_CLEAN_TARGETS) \ - $(am__extra_recursive_targets) -AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - cscope distdir dist dist-all distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)fficonfig.h.in -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ - || { sleep 5 && rm -rf "$(distdir)"; }; \ - else :; fi -am__post_remove_distdir = $(am__remove_distdir) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -DIST_TARGETS = dist-gzip -distuninstallcheck_listfiles = find . -type f -print -am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ - | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AM_LTLDFLAGS = @AM_LTLDFLAGS@ -AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@ -FGREP = @FGREP@ -GREP = @GREP@ -HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ -HAVE_LONG_DOUBLE_VARIANT = @HAVE_LONG_DOUBLE_VARIANT@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TARGET = @TARGET@ -TARGETDIR = @TARGETDIR@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_enable_builddir_sed = @ax_enable_builddir_sed@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sys_symbol_underscore = @sys_symbol_underscore@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -toolexecdir = @toolexecdir@ -toolexeclibdir = @toolexeclibdir@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign subdir-objects -ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = include testsuite man -EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj \ - src/aarch64/ffi.c src/aarch64/ffitarget.h src/aarch64/sysv.S \ - src/alpha/ffi.c src/alpha/osf.S \ - src/alpha/ffitarget.h src/arc/ffi.c src/arc/arcompact.S \ - src/arc/ffitarget.h src/arm/ffi.c src/arm/sysv.S \ - src/arm/ffitarget.h src/avr32/ffi.c src/avr32/sysv.S \ - src/avr32/ffitarget.h src/cris/ffi.c src/cris/sysv.S \ - src/cris/ffitarget.h src/ia64/ffi.c src/ia64/ffitarget.h \ - src/ia64/ia64_flags.h src/ia64/unix.S src/mips/ffi.c \ - src/mips/n32.S src/mips/o32.S src/metag/ffi.c \ - src/metag/ffitarget.h src/metag/sysv.S src/moxie/ffi.c \ - src/moxie/ffitarget.h src/moxie/eabi.S src/mips/ffitarget.h \ - src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \ - src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \ - src/m88k/ffi.c src/m88k/obsd.S src/m88k/ffitarget.h \ - src/microblaze/ffi.c src/microblaze/sysv.S \ - src/microblaze/ffitarget.h \ - src/nios2/ffi.c src/nios2/ffitarget.h src/nios2/sysv.S \ - src/or1k/ffi.c src/or1k/ffitarget.h src/or1k/sysv.S \ - src/powerpc/ffi.c src/powerpc/ffi_powerpc.h \ - src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c \ - src/powerpc/sysv.S src/powerpc/linux64.S \ - src/powerpc/linux64_closure.S src/powerpc/ppc_closure.S \ - src/powerpc/asm.h src/powerpc/aix.S src/powerpc/darwin.S \ - src/powerpc/aix_closure.S src/powerpc/darwin_closure.S \ - src/powerpc/ffi_darwin.c src/powerpc/ffitarget.h \ - src/s390/ffi.c src/s390/sysv.S src/s390/ffitarget.h \ - src/sh/ffi.c src/sh/sysv.S src/sh/ffitarget.h src/sh64/ffi.c \ - src/sh64/sysv.S src/sh64/ffitarget.h src/sparc/v8.S \ - src/sparc/v9.S src/sparc/ffitarget.h src/sparc/ffi.c \ - src/x86/darwin64.S src/x86/ffi.c src/x86/sysv.S \ - src/x86/win32.S src/x86/darwin.S src/x86/win64.S \ - src/x86/freebsd.S src/x86/ffi64.c src/x86/unix64.S \ - src/x86/ffitarget.h src/pa/ffitarget.h src/pa/ffi.c \ - src/pa/linux.S src/pa/hpux32.S src/frv/ffi.c src/bfin/ffi.c \ - src/bfin/ffitarget.h src/bfin/sysv.S src/frv/eabi.S \ - src/frv/ffitarget.h src/dlmalloc.c src/tile/ffi.c \ - src/tile/ffitarget.h src/tile/tile.S libtool-version \ - src/vax/ffi.c src/vax/ffitarget.h src/vax/elfbsd.S \ - src/xtensa/ffitarget.h src/xtensa/ffi.c src/xtensa/sysv.S \ - ChangeLog.libffi m4/libtool.m4 m4/lt~obsolete.m4 \ - m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 \ - m4/ltversion.m4 src/arm/gentramp.sh src/debug.c msvcc.sh \ - generate-darwin-source-and-headers.py \ - libffi.xcodeproj/project.pbxproj src/arm/trampoline.S \ - libtool-ldflags ChangeLog.libffi-3.1 - -info_TEXINFOS = doc/libffi.texi - -# Work around what appears to be a GNU make bug handling MAKEFLAGS -# values defined in terms of make variables, as is the case for CC and -# friends when we are called from the top level Makefile. -AM_MAKEFLAGS = \ - 'AR_FLAGS=$(AR_FLAGS)' \ - 'CC_FOR_BUILD=$(CC_FOR_BUILD)' \ - 'CFLAGS=$(CFLAGS)' \ - 'CXXFLAGS=$(CXXFLAGS)' \ - 'CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)' \ - 'CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)' \ - 'INSTALL=$(INSTALL)' \ - 'INSTALL_DATA=$(INSTALL_DATA)' \ - 'INSTALL_PROGRAM=$(INSTALL_PROGRAM)' \ - 'INSTALL_SCRIPT=$(INSTALL_SCRIPT)' \ - 'JC1FLAGS=$(JC1FLAGS)' \ - 'LDFLAGS=$(LDFLAGS)' \ - 'LIBCFLAGS=$(LIBCFLAGS)' \ - 'LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)' \ - 'MAKE=$(MAKE)' \ - 'MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)' \ - 'PICFLAG=$(PICFLAG)' \ - 'PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)' \ - 'RUNTESTFLAGS=$(RUNTESTFLAGS)' \ - 'SHELL=$(SHELL)' \ - 'exec_prefix=$(exec_prefix)' \ - 'infodir=$(infodir)' \ - 'libdir=$(libdir)' \ - 'mandir=$(mandir)' \ - 'prefix=$(prefix)' \ - 'AR=$(AR)' \ - 'AS=$(AS)' \ - 'CC=$(CC)' \ - 'CXX=$(CXX)' \ - 'LD=$(LD)' \ - 'NM=$(NM)' \ - 'RANLIB=$(RANLIB)' \ - 'DESTDIR=$(DESTDIR)' - - -# Subdir rules rely on $(FLAGS_TO_PASS) -FLAGS_TO_PASS = $(AM_MAKEFLAGS) -MAKEOVERRIDES = -toolexeclib_LTLIBRARIES = libffi.la -noinst_LTLIBRARIES = libffi_convenience.la -libffi_la_SOURCES = src/prep_cif.c src/types.c \ - src/raw_api.c src/java_raw_api.c src/closures.c - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libffi.pc -nodist_libffi_la_SOURCES = $(am__append_1) $(am__append_2) \ - $(am__append_3) $(am__append_4) $(am__append_5) \ - $(am__append_6) $(am__append_7) $(am__append_8) \ - $(am__append_9) $(am__append_10) $(am__append_11) \ - $(am__append_12) $(am__append_13) $(am__append_14) \ - $(am__append_15) $(am__append_16) $(am__append_17) \ - $(am__append_18) $(am__append_19) $(am__append_20) \ - $(am__append_21) $(am__append_22) $(am__append_23) \ - $(am__append_24) $(am__append_25) $(am__append_26) \ - $(am__append_27) $(am__append_28) $(am__append_29) \ - $(am__append_30) $(am__append_31) $(am__append_32) \ - $(am__append_33) $(am__append_34) $(am__append_35) \ - $(am__append_36) $(am__append_37) $(am__append_38) \ - $(am__append_39) $(am__append_40) -libffi_convenience_la_SOURCES = $(libffi_la_SOURCES) -nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES) -LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/libtool-ldflags $(LDFLAGS)) -AM_CFLAGS = $(am__append_41) -libffi_la_LDFLAGS = -no-undefined -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS) -AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src -AM_CCASFLAGS = $(AM_CPPFLAGS) -all: fficonfig.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -.SUFFIXES: .S .c .dvi .lo .o .obj .ps -am--refresh: Makefile - @: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -fficonfig.h: stamp-h1 - @if test ! -f $@; then rm -f stamp-h1; else :; fi - @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi - -stamp-h1: $(srcdir)/fficonfig.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status fficonfig.h -$(srcdir)/fficonfig.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f fficonfig.h stamp-h1 -libffi.pc: $(top_builddir)/config.status $(srcdir)/libffi.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(toolexeclib_LTLIBRARIES)'; test -n "$(toolexeclibdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(toolexeclibdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(toolexeclibdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(toolexeclibdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(toolexeclibdir)"; \ - } - -uninstall-toolexeclibLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(toolexeclib_LTLIBRARIES)'; test -n "$(toolexeclibdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(toolexeclibdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(toolexeclibdir)/$$f"; \ - done - -clean-toolexeclibLTLIBRARIES: - -test -z "$(toolexeclib_LTLIBRARIES)" || rm -f $(toolexeclib_LTLIBRARIES) - @list='$(toolexeclib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } -src/$(am__dirstamp): - @$(MKDIR_P) src - @: > src/$(am__dirstamp) -src/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/$(DEPDIR) - @: > src/$(DEPDIR)/$(am__dirstamp) -src/prep_cif.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -src/types.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -src/raw_api.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -src/java_raw_api.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -src/closures.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -src/debug.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -src/mips/$(am__dirstamp): - @$(MKDIR_P) src/mips - @: > src/mips/$(am__dirstamp) -src/mips/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/mips/$(DEPDIR) - @: > src/mips/$(DEPDIR)/$(am__dirstamp) -src/mips/ffi.lo: src/mips/$(am__dirstamp) \ - src/mips/$(DEPDIR)/$(am__dirstamp) -src/mips/o32.lo: src/mips/$(am__dirstamp) \ - src/mips/$(DEPDIR)/$(am__dirstamp) -src/mips/n32.lo: src/mips/$(am__dirstamp) \ - src/mips/$(DEPDIR)/$(am__dirstamp) -src/bfin/$(am__dirstamp): - @$(MKDIR_P) src/bfin - @: > src/bfin/$(am__dirstamp) -src/bfin/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/bfin/$(DEPDIR) - @: > src/bfin/$(DEPDIR)/$(am__dirstamp) -src/bfin/ffi.lo: src/bfin/$(am__dirstamp) \ - src/bfin/$(DEPDIR)/$(am__dirstamp) -src/bfin/sysv.lo: src/bfin/$(am__dirstamp) \ - src/bfin/$(DEPDIR)/$(am__dirstamp) -src/x86/$(am__dirstamp): - @$(MKDIR_P) src/x86 - @: > src/x86/$(am__dirstamp) -src/x86/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/x86/$(DEPDIR) - @: > src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/ffi.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/sysv.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/win32.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/freebsd.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/win64.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/darwin.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/ffi64.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/darwin64.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/sparc/$(am__dirstamp): - @$(MKDIR_P) src/sparc - @: > src/sparc/$(am__dirstamp) -src/sparc/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/sparc/$(DEPDIR) - @: > src/sparc/$(DEPDIR)/$(am__dirstamp) -src/sparc/ffi.lo: src/sparc/$(am__dirstamp) \ - src/sparc/$(DEPDIR)/$(am__dirstamp) -src/sparc/v8.lo: src/sparc/$(am__dirstamp) \ - src/sparc/$(DEPDIR)/$(am__dirstamp) -src/sparc/v9.lo: src/sparc/$(am__dirstamp) \ - src/sparc/$(DEPDIR)/$(am__dirstamp) -src/alpha/$(am__dirstamp): - @$(MKDIR_P) src/alpha - @: > src/alpha/$(am__dirstamp) -src/alpha/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/alpha/$(DEPDIR) - @: > src/alpha/$(DEPDIR)/$(am__dirstamp) -src/alpha/ffi.lo: src/alpha/$(am__dirstamp) \ - src/alpha/$(DEPDIR)/$(am__dirstamp) -src/alpha/osf.lo: src/alpha/$(am__dirstamp) \ - src/alpha/$(DEPDIR)/$(am__dirstamp) -src/ia64/$(am__dirstamp): - @$(MKDIR_P) src/ia64 - @: > src/ia64/$(am__dirstamp) -src/ia64/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/ia64/$(DEPDIR) - @: > src/ia64/$(DEPDIR)/$(am__dirstamp) -src/ia64/ffi.lo: src/ia64/$(am__dirstamp) \ - src/ia64/$(DEPDIR)/$(am__dirstamp) -src/ia64/unix.lo: src/ia64/$(am__dirstamp) \ - src/ia64/$(DEPDIR)/$(am__dirstamp) -src/m32r/$(am__dirstamp): - @$(MKDIR_P) src/m32r - @: > src/m32r/$(am__dirstamp) -src/m32r/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/m32r/$(DEPDIR) - @: > src/m32r/$(DEPDIR)/$(am__dirstamp) -src/m32r/sysv.lo: src/m32r/$(am__dirstamp) \ - src/m32r/$(DEPDIR)/$(am__dirstamp) -src/m32r/ffi.lo: src/m32r/$(am__dirstamp) \ - src/m32r/$(DEPDIR)/$(am__dirstamp) -src/m68k/$(am__dirstamp): - @$(MKDIR_P) src/m68k - @: > src/m68k/$(am__dirstamp) -src/m68k/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/m68k/$(DEPDIR) - @: > src/m68k/$(DEPDIR)/$(am__dirstamp) -src/m68k/ffi.lo: src/m68k/$(am__dirstamp) \ - src/m68k/$(DEPDIR)/$(am__dirstamp) -src/m68k/sysv.lo: src/m68k/$(am__dirstamp) \ - src/m68k/$(DEPDIR)/$(am__dirstamp) -src/m88k/$(am__dirstamp): - @$(MKDIR_P) src/m88k - @: > src/m88k/$(am__dirstamp) -src/m88k/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/m88k/$(DEPDIR) - @: > src/m88k/$(DEPDIR)/$(am__dirstamp) -src/m88k/ffi.lo: src/m88k/$(am__dirstamp) \ - src/m88k/$(DEPDIR)/$(am__dirstamp) -src/m88k/obsd.lo: src/m88k/$(am__dirstamp) \ - src/m88k/$(DEPDIR)/$(am__dirstamp) -src/moxie/$(am__dirstamp): - @$(MKDIR_P) src/moxie - @: > src/moxie/$(am__dirstamp) -src/moxie/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/moxie/$(DEPDIR) - @: > src/moxie/$(DEPDIR)/$(am__dirstamp) -src/moxie/ffi.lo: src/moxie/$(am__dirstamp) \ - src/moxie/$(DEPDIR)/$(am__dirstamp) -src/moxie/eabi.lo: src/moxie/$(am__dirstamp) \ - src/moxie/$(DEPDIR)/$(am__dirstamp) -src/microblaze/$(am__dirstamp): - @$(MKDIR_P) src/microblaze - @: > src/microblaze/$(am__dirstamp) -src/microblaze/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/microblaze/$(DEPDIR) - @: > src/microblaze/$(DEPDIR)/$(am__dirstamp) -src/microblaze/ffi.lo: src/microblaze/$(am__dirstamp) \ - src/microblaze/$(DEPDIR)/$(am__dirstamp) -src/microblaze/sysv.lo: src/microblaze/$(am__dirstamp) \ - src/microblaze/$(DEPDIR)/$(am__dirstamp) -src/nios2/$(am__dirstamp): - @$(MKDIR_P) src/nios2 - @: > src/nios2/$(am__dirstamp) -src/nios2/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/nios2/$(DEPDIR) - @: > src/nios2/$(DEPDIR)/$(am__dirstamp) -src/nios2/sysv.lo: src/nios2/$(am__dirstamp) \ - src/nios2/$(DEPDIR)/$(am__dirstamp) -src/nios2/ffi.lo: src/nios2/$(am__dirstamp) \ - src/nios2/$(DEPDIR)/$(am__dirstamp) -src/or1k/$(am__dirstamp): - @$(MKDIR_P) src/or1k - @: > src/or1k/$(am__dirstamp) -src/or1k/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/or1k/$(DEPDIR) - @: > src/or1k/$(DEPDIR)/$(am__dirstamp) -src/or1k/sysv.lo: src/or1k/$(am__dirstamp) \ - src/or1k/$(DEPDIR)/$(am__dirstamp) -src/or1k/ffi.lo: src/or1k/$(am__dirstamp) \ - src/or1k/$(DEPDIR)/$(am__dirstamp) -src/powerpc/$(am__dirstamp): - @$(MKDIR_P) src/powerpc - @: > src/powerpc/$(am__dirstamp) -src/powerpc/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/powerpc/$(DEPDIR) - @: > src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/ffi.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/ffi_sysv.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/ffi_linux64.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/sysv.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/ppc_closure.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/linux64.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/linux64_closure.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/ffi_darwin.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/aix.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/aix_closure.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/darwin.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/darwin_closure.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/aarch64/$(am__dirstamp): - @$(MKDIR_P) src/aarch64 - @: > src/aarch64/$(am__dirstamp) -src/aarch64/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/aarch64/$(DEPDIR) - @: > src/aarch64/$(DEPDIR)/$(am__dirstamp) -src/aarch64/sysv.lo: src/aarch64/$(am__dirstamp) \ - src/aarch64/$(DEPDIR)/$(am__dirstamp) -src/aarch64/ffi.lo: src/aarch64/$(am__dirstamp) \ - src/aarch64/$(DEPDIR)/$(am__dirstamp) -src/arc/$(am__dirstamp): - @$(MKDIR_P) src/arc - @: > src/arc/$(am__dirstamp) -src/arc/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/arc/$(DEPDIR) - @: > src/arc/$(DEPDIR)/$(am__dirstamp) -src/arc/arcompact.lo: src/arc/$(am__dirstamp) \ - src/arc/$(DEPDIR)/$(am__dirstamp) -src/arc/ffi.lo: src/arc/$(am__dirstamp) \ - src/arc/$(DEPDIR)/$(am__dirstamp) -src/arm/$(am__dirstamp): - @$(MKDIR_P) src/arm - @: > src/arm/$(am__dirstamp) -src/arm/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/arm/$(DEPDIR) - @: > src/arm/$(DEPDIR)/$(am__dirstamp) -src/arm/sysv.lo: src/arm/$(am__dirstamp) \ - src/arm/$(DEPDIR)/$(am__dirstamp) -src/arm/ffi.lo: src/arm/$(am__dirstamp) \ - src/arm/$(DEPDIR)/$(am__dirstamp) -src/arm/trampoline.lo: src/arm/$(am__dirstamp) \ - src/arm/$(DEPDIR)/$(am__dirstamp) -src/avr32/$(am__dirstamp): - @$(MKDIR_P) src/avr32 - @: > src/avr32/$(am__dirstamp) -src/avr32/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/avr32/$(DEPDIR) - @: > src/avr32/$(DEPDIR)/$(am__dirstamp) -src/avr32/sysv.lo: src/avr32/$(am__dirstamp) \ - src/avr32/$(DEPDIR)/$(am__dirstamp) -src/avr32/ffi.lo: src/avr32/$(am__dirstamp) \ - src/avr32/$(DEPDIR)/$(am__dirstamp) -src/cris/$(am__dirstamp): - @$(MKDIR_P) src/cris - @: > src/cris/$(am__dirstamp) -src/cris/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/cris/$(DEPDIR) - @: > src/cris/$(DEPDIR)/$(am__dirstamp) -src/cris/sysv.lo: src/cris/$(am__dirstamp) \ - src/cris/$(DEPDIR)/$(am__dirstamp) -src/cris/ffi.lo: src/cris/$(am__dirstamp) \ - src/cris/$(DEPDIR)/$(am__dirstamp) -src/frv/$(am__dirstamp): - @$(MKDIR_P) src/frv - @: > src/frv/$(am__dirstamp) -src/frv/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/frv/$(DEPDIR) - @: > src/frv/$(DEPDIR)/$(am__dirstamp) -src/frv/eabi.lo: src/frv/$(am__dirstamp) \ - src/frv/$(DEPDIR)/$(am__dirstamp) -src/frv/ffi.lo: src/frv/$(am__dirstamp) \ - src/frv/$(DEPDIR)/$(am__dirstamp) -src/s390/$(am__dirstamp): - @$(MKDIR_P) src/s390 - @: > src/s390/$(am__dirstamp) -src/s390/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/s390/$(DEPDIR) - @: > src/s390/$(DEPDIR)/$(am__dirstamp) -src/s390/sysv.lo: src/s390/$(am__dirstamp) \ - src/s390/$(DEPDIR)/$(am__dirstamp) -src/s390/ffi.lo: src/s390/$(am__dirstamp) \ - src/s390/$(DEPDIR)/$(am__dirstamp) -src/x86/unix64.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/sh/$(am__dirstamp): - @$(MKDIR_P) src/sh - @: > src/sh/$(am__dirstamp) -src/sh/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/sh/$(DEPDIR) - @: > src/sh/$(DEPDIR)/$(am__dirstamp) -src/sh/sysv.lo: src/sh/$(am__dirstamp) \ - src/sh/$(DEPDIR)/$(am__dirstamp) -src/sh/ffi.lo: src/sh/$(am__dirstamp) src/sh/$(DEPDIR)/$(am__dirstamp) -src/sh64/$(am__dirstamp): - @$(MKDIR_P) src/sh64 - @: > src/sh64/$(am__dirstamp) -src/sh64/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/sh64/$(DEPDIR) - @: > src/sh64/$(DEPDIR)/$(am__dirstamp) -src/sh64/sysv.lo: src/sh64/$(am__dirstamp) \ - src/sh64/$(DEPDIR)/$(am__dirstamp) -src/sh64/ffi.lo: src/sh64/$(am__dirstamp) \ - src/sh64/$(DEPDIR)/$(am__dirstamp) -src/pa/$(am__dirstamp): - @$(MKDIR_P) src/pa - @: > src/pa/$(am__dirstamp) -src/pa/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/pa/$(DEPDIR) - @: > src/pa/$(DEPDIR)/$(am__dirstamp) -src/pa/linux.lo: src/pa/$(am__dirstamp) \ - src/pa/$(DEPDIR)/$(am__dirstamp) -src/pa/ffi.lo: src/pa/$(am__dirstamp) src/pa/$(DEPDIR)/$(am__dirstamp) -src/pa/hpux32.lo: src/pa/$(am__dirstamp) \ - src/pa/$(DEPDIR)/$(am__dirstamp) -src/tile/$(am__dirstamp): - @$(MKDIR_P) src/tile - @: > src/tile/$(am__dirstamp) -src/tile/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/tile/$(DEPDIR) - @: > src/tile/$(DEPDIR)/$(am__dirstamp) -src/tile/tile.lo: src/tile/$(am__dirstamp) \ - src/tile/$(DEPDIR)/$(am__dirstamp) -src/tile/ffi.lo: src/tile/$(am__dirstamp) \ - src/tile/$(DEPDIR)/$(am__dirstamp) -src/xtensa/$(am__dirstamp): - @$(MKDIR_P) src/xtensa - @: > src/xtensa/$(am__dirstamp) -src/xtensa/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/xtensa/$(DEPDIR) - @: > src/xtensa/$(DEPDIR)/$(am__dirstamp) -src/xtensa/sysv.lo: src/xtensa/$(am__dirstamp) \ - src/xtensa/$(DEPDIR)/$(am__dirstamp) -src/xtensa/ffi.lo: src/xtensa/$(am__dirstamp) \ - src/xtensa/$(DEPDIR)/$(am__dirstamp) -src/metag/$(am__dirstamp): - @$(MKDIR_P) src/metag - @: > src/metag/$(am__dirstamp) -src/metag/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/metag/$(DEPDIR) - @: > src/metag/$(DEPDIR)/$(am__dirstamp) -src/metag/sysv.lo: src/metag/$(am__dirstamp) \ - src/metag/$(DEPDIR)/$(am__dirstamp) -src/metag/ffi.lo: src/metag/$(am__dirstamp) \ - src/metag/$(DEPDIR)/$(am__dirstamp) -src/vax/$(am__dirstamp): - @$(MKDIR_P) src/vax - @: > src/vax/$(am__dirstamp) -src/vax/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/vax/$(DEPDIR) - @: > src/vax/$(DEPDIR)/$(am__dirstamp) -src/vax/elfbsd.lo: src/vax/$(am__dirstamp) \ - src/vax/$(DEPDIR)/$(am__dirstamp) -src/vax/ffi.lo: src/vax/$(am__dirstamp) \ - src/vax/$(DEPDIR)/$(am__dirstamp) - -libffi.la: $(libffi_la_OBJECTS) $(libffi_la_DEPENDENCIES) $(EXTRA_libffi_la_DEPENDENCIES) - $(AM_V_CCLD)$(libffi_la_LINK) -rpath $(toolexeclibdir) $(libffi_la_OBJECTS) $(libffi_la_LIBADD) $(LIBS) - -libffi_convenience.la: $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_DEPENDENCIES) $(EXTRA_libffi_convenience_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -rm -f src/*.$(OBJEXT) - -rm -f src/*.lo - -rm -f src/aarch64/*.$(OBJEXT) - -rm -f src/aarch64/*.lo - -rm -f src/alpha/*.$(OBJEXT) - -rm -f src/alpha/*.lo - -rm -f src/arc/*.$(OBJEXT) - -rm -f src/arc/*.lo - -rm -f src/arm/*.$(OBJEXT) - -rm -f src/arm/*.lo - -rm -f src/avr32/*.$(OBJEXT) - -rm -f src/avr32/*.lo - -rm -f src/bfin/*.$(OBJEXT) - -rm -f src/bfin/*.lo - -rm -f src/cris/*.$(OBJEXT) - -rm -f src/cris/*.lo - -rm -f src/frv/*.$(OBJEXT) - -rm -f src/frv/*.lo - -rm -f src/ia64/*.$(OBJEXT) - -rm -f src/ia64/*.lo - -rm -f src/m32r/*.$(OBJEXT) - -rm -f src/m32r/*.lo - -rm -f src/m68k/*.$(OBJEXT) - -rm -f src/m68k/*.lo - -rm -f src/m88k/*.$(OBJEXT) - -rm -f src/m88k/*.lo - -rm -f src/metag/*.$(OBJEXT) - -rm -f src/metag/*.lo - -rm -f src/microblaze/*.$(OBJEXT) - -rm -f src/microblaze/*.lo - -rm -f src/mips/*.$(OBJEXT) - -rm -f src/mips/*.lo - -rm -f src/moxie/*.$(OBJEXT) - -rm -f src/moxie/*.lo - -rm -f src/nios2/*.$(OBJEXT) - -rm -f src/nios2/*.lo - -rm -f src/or1k/*.$(OBJEXT) - -rm -f src/or1k/*.lo - -rm -f src/pa/*.$(OBJEXT) - -rm -f src/pa/*.lo - -rm -f src/powerpc/*.$(OBJEXT) - -rm -f src/powerpc/*.lo - -rm -f src/s390/*.$(OBJEXT) - -rm -f src/s390/*.lo - -rm -f src/sh/*.$(OBJEXT) - -rm -f src/sh/*.lo - -rm -f src/sh64/*.$(OBJEXT) - -rm -f src/sh64/*.lo - -rm -f src/sparc/*.$(OBJEXT) - -rm -f src/sparc/*.lo - -rm -f src/tile/*.$(OBJEXT) - -rm -f src/tile/*.lo - -rm -f src/vax/*.$(OBJEXT) - -rm -f src/vax/*.lo - -rm -f src/x86/*.$(OBJEXT) - -rm -f src/x86/*.lo - -rm -f src/xtensa/*.$(OBJEXT) - -rm -f src/xtensa/*.lo - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/closures.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/debug.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/java_raw_api.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/prep_cif.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/raw_api.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/types.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/aarch64/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/aarch64/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/alpha/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/alpha/$(DEPDIR)/osf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/arc/$(DEPDIR)/arcompact.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/arc/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/trampoline.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/avr32/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/avr32/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/bfin/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/bfin/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/cris/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/cris/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/frv/$(DEPDIR)/eabi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/frv/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/ia64/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/ia64/$(DEPDIR)/unix.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/m32r/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/m32r/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/m68k/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/m68k/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/m88k/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/m88k/$(DEPDIR)/obsd.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/metag/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/metag/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/microblaze/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/microblaze/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/mips/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/mips/$(DEPDIR)/n32.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/mips/$(DEPDIR)/o32.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/moxie/$(DEPDIR)/eabi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/moxie/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/nios2/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/nios2/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/or1k/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/or1k/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/hpux32.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/linux.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/aix.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/aix_closure.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/darwin.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/darwin_closure.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi_darwin.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi_linux64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi_sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/linux64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/linux64_closure.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ppc_closure.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/s390/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/s390/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sh/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sh/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sh64/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sh64/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sparc/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sparc/$(DEPDIR)/v8.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sparc/$(DEPDIR)/v9.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/tile/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/tile/$(DEPDIR)/tile.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/vax/$(DEPDIR)/elfbsd.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/vax/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/darwin.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/darwin64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffi64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/freebsd.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/unix64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/win32.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/win64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/xtensa/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/xtensa/$(DEPDIR)/sysv.Plo@am__quote@ - -.S.o: -@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ $< - -.S.obj: -@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.S.lo: -@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(LTCPPASCOMPILE) -c -o $@ $< - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -rm -rf src/.libs src/_libs - -rm -rf src/aarch64/.libs src/aarch64/_libs - -rm -rf src/alpha/.libs src/alpha/_libs - -rm -rf src/arc/.libs src/arc/_libs - -rm -rf src/arm/.libs src/arm/_libs - -rm -rf src/avr32/.libs src/avr32/_libs - -rm -rf src/bfin/.libs src/bfin/_libs - -rm -rf src/cris/.libs src/cris/_libs - -rm -rf src/frv/.libs src/frv/_libs - -rm -rf src/ia64/.libs src/ia64/_libs - -rm -rf src/m32r/.libs src/m32r/_libs - -rm -rf src/m68k/.libs src/m68k/_libs - -rm -rf src/m88k/.libs src/m88k/_libs - -rm -rf src/metag/.libs src/metag/_libs - -rm -rf src/microblaze/.libs src/microblaze/_libs - -rm -rf src/mips/.libs src/mips/_libs - -rm -rf src/moxie/.libs src/moxie/_libs - -rm -rf src/nios2/.libs src/nios2/_libs - -rm -rf src/or1k/.libs src/or1k/_libs - -rm -rf src/pa/.libs src/pa/_libs - -rm -rf src/powerpc/.libs src/powerpc/_libs - -rm -rf src/s390/.libs src/s390/_libs - -rm -rf src/sh/.libs src/sh/_libs - -rm -rf src/sh64/.libs src/sh64/_libs - -rm -rf src/sparc/.libs src/sparc/_libs - -rm -rf src/tile/.libs src/tile/_libs - -rm -rf src/vax/.libs src/vax/_libs - -rm -rf src/x86/.libs src/x86/_libs - -rm -rf src/xtensa/.libs src/xtensa/_libs - -distclean-libtool: - -rm -f libtool config.lt -doc/$(am__dirstamp): - @$(MKDIR_P) doc - @: > doc/$(am__dirstamp) - -$(srcdir)/doc/libffi.info: doc/libffi.texi $(srcdir)/doc/version.texi - $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ - am__cwd=`pwd` && $(am__cd) $(srcdir) && \ - rm -rf $$backupdir && mkdir $$backupdir && \ - if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ - for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ - if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ - done; \ - else :; fi && \ - cd "$$am__cwd"; \ - if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \ - -o $@ $(srcdir)/doc/libffi.texi; \ - then \ - rc=0; \ - $(am__cd) $(srcdir); \ - else \ - rc=$$?; \ - $(am__cd) $(srcdir) && \ - $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ - fi; \ - rm -rf $$backupdir; exit $$rc - -doc/libffi.dvi: doc/libffi.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp) - $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ - $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ - `test -f 'doc/libffi.texi' || echo '$(srcdir)/'`doc/libffi.texi - -doc/libffi.pdf: doc/libffi.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp) - $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ - $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ - `test -f 'doc/libffi.texi' || echo '$(srcdir)/'`doc/libffi.texi - -doc/libffi.html: doc/libffi.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp) - $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) - $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \ - -o $(@:.html=.htp) `test -f 'doc/libffi.texi' || echo '$(srcdir)/'`doc/libffi.texi; \ - then \ - rm -rf $@; \ - if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ - mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ - else \ - if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ - rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ - exit 1; \ - fi -$(srcdir)/doc/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/doc/stamp-vti -$(srcdir)/doc/stamp-vti: doc/libffi.texi $(top_srcdir)/configure - test -f doc/$(am__dirstamp) || $(MAKE) $(AM_MAKEFLAGS) doc/$(am__dirstamp) - @(dir=.; test -f ./doc/libffi.texi || dir=$(srcdir); \ - set `$(SHELL) $(srcdir)/mdate-sh $$dir/doc/libffi.texi`; \ - echo "@set UPDATED $$1 $$2 $$3"; \ - echo "@set UPDATED-MONTH $$2 $$3"; \ - echo "@set EDITION $(VERSION)"; \ - echo "@set VERSION $(VERSION)") > vti.tmp - @cmp -s vti.tmp $(srcdir)/doc/version.texi \ - || (echo "Updating $(srcdir)/doc/version.texi"; \ - cp vti.tmp $(srcdir)/doc/version.texi) - -@rm -f vti.tmp - @cp $(srcdir)/doc/version.texi $@ - -mostlyclean-vti: - -rm -f vti.tmp - -maintainer-clean-vti: -@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/doc/stamp-vti $(srcdir)/doc/version.texi -.dvi.ps: - $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - $(DVIPS) $(AM_V_texinfo) -o $@ $< - -uninstall-dvi-am: - @$(NORMAL_UNINSTALL) - @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ - rm -f "$(DESTDIR)$(dvidir)/$$f"; \ - done - -uninstall-html-am: - @$(NORMAL_UNINSTALL) - @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ - rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ - done - -uninstall-info-am: - @$(PRE_UNINSTALL) - @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ - if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ - then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ - done; \ - else :; fi - @$(NORMAL_UNINSTALL) - @list='$(INFO_DEPS)'; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ - (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ - echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ - rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ - else :; fi); \ - done - -uninstall-pdf-am: - @$(NORMAL_UNINSTALL) - @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ - rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ - done - -uninstall-ps-am: - @$(NORMAL_UNINSTALL) - @list='$(PSS)'; test -n "$(psdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ - rm -f "$(DESTDIR)$(psdir)/$$f"; \ - done - -dist-info: $(INFO_DEPS) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; \ - for base in $$list; do \ - case $$base in \ - $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$base; then d=.; else d=$(srcdir); fi; \ - base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ - for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ - if test -f $$file; then \ - relfile=`expr "$$file" : "$$d/\(.*\)"`; \ - test -f "$(distdir)/$$relfile" || \ - cp -p $$file "$(distdir)/$$relfile"; \ - else :; fi; \ - done; \ - done - -mostlyclean-aminfo: - -rm -rf doc/libffi.t2d doc/libffi.t2p - -clean-aminfo: - -test -z "doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html" \ - || rm -rf doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html - -maintainer-clean-aminfo: - @list='$(INFO_DEPS)'; for i in $$list; do \ - i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ - echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ - rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ - done -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) - -# This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. -$(am__recursive_targets): - @fail=; \ - if $(am__make_keepgoing); then \ - failcom='fail=yes'; \ - else \ - failcom='exit 1'; \ - fi; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-recursive -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-recursive - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) -clean-cscope: - -rm -f cscope.files -cscope.files: clean-cscope cscopelist -cscopelist: cscopelist-recursive - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - $(am__make_dryrun) \ - || test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-info dist-hook - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__post_remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) - -dist-lzip: distdir - tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__post_remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) - -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lz*) \ - lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir) - chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__post_remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @test -n '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: trying to run $@ with an empty' \ - '$$(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - $(am__cd) '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile $(INFO_DEPS) $(LTLIBRARIES) $(DATA) fficonfig.h -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(pkgconfigdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -rm -f doc/$(am__dirstamp) - -rm -f src/$(DEPDIR)/$(am__dirstamp) - -rm -f src/$(am__dirstamp) - -rm -f src/aarch64/$(DEPDIR)/$(am__dirstamp) - -rm -f src/aarch64/$(am__dirstamp) - -rm -f src/alpha/$(DEPDIR)/$(am__dirstamp) - -rm -f src/alpha/$(am__dirstamp) - -rm -f src/arc/$(DEPDIR)/$(am__dirstamp) - -rm -f src/arc/$(am__dirstamp) - -rm -f src/arm/$(DEPDIR)/$(am__dirstamp) - -rm -f src/arm/$(am__dirstamp) - -rm -f src/avr32/$(DEPDIR)/$(am__dirstamp) - -rm -f src/avr32/$(am__dirstamp) - -rm -f src/bfin/$(DEPDIR)/$(am__dirstamp) - -rm -f src/bfin/$(am__dirstamp) - -rm -f src/cris/$(DEPDIR)/$(am__dirstamp) - -rm -f src/cris/$(am__dirstamp) - -rm -f src/frv/$(DEPDIR)/$(am__dirstamp) - -rm -f src/frv/$(am__dirstamp) - -rm -f src/ia64/$(DEPDIR)/$(am__dirstamp) - -rm -f src/ia64/$(am__dirstamp) - -rm -f src/m32r/$(DEPDIR)/$(am__dirstamp) - -rm -f src/m32r/$(am__dirstamp) - -rm -f src/m68k/$(DEPDIR)/$(am__dirstamp) - -rm -f src/m68k/$(am__dirstamp) - -rm -f src/m88k/$(DEPDIR)/$(am__dirstamp) - -rm -f src/m88k/$(am__dirstamp) - -rm -f src/metag/$(DEPDIR)/$(am__dirstamp) - -rm -f src/metag/$(am__dirstamp) - -rm -f src/microblaze/$(DEPDIR)/$(am__dirstamp) - -rm -f src/microblaze/$(am__dirstamp) - -rm -f src/mips/$(DEPDIR)/$(am__dirstamp) - -rm -f src/mips/$(am__dirstamp) - -rm -f src/moxie/$(DEPDIR)/$(am__dirstamp) - -rm -f src/moxie/$(am__dirstamp) - -rm -f src/nios2/$(DEPDIR)/$(am__dirstamp) - -rm -f src/nios2/$(am__dirstamp) - -rm -f src/or1k/$(DEPDIR)/$(am__dirstamp) - -rm -f src/or1k/$(am__dirstamp) - -rm -f src/pa/$(DEPDIR)/$(am__dirstamp) - -rm -f src/pa/$(am__dirstamp) - -rm -f src/powerpc/$(DEPDIR)/$(am__dirstamp) - -rm -f src/powerpc/$(am__dirstamp) - -rm -f src/s390/$(DEPDIR)/$(am__dirstamp) - -rm -f src/s390/$(am__dirstamp) - -rm -f src/sh/$(DEPDIR)/$(am__dirstamp) - -rm -f src/sh/$(am__dirstamp) - -rm -f src/sh64/$(DEPDIR)/$(am__dirstamp) - -rm -f src/sh64/$(am__dirstamp) - -rm -f src/sparc/$(DEPDIR)/$(am__dirstamp) - -rm -f src/sparc/$(am__dirstamp) - -rm -f src/tile/$(DEPDIR)/$(am__dirstamp) - -rm -f src/tile/$(am__dirstamp) - -rm -f src/vax/$(DEPDIR)/$(am__dirstamp) - -rm -f src/vax/$(am__dirstamp) - -rm -f src/x86/$(DEPDIR)/$(am__dirstamp) - -rm -f src/x86/$(am__dirstamp) - -rm -f src/xtensa/$(DEPDIR)/$(am__dirstamp) - -rm -f src/xtensa/$(am__dirstamp) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-aminfo clean-generic clean-libtool \ - clean-noinstLTLIBRARIES clean-toolexeclibLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf src/$(DEPDIR) src/aarch64/$(DEPDIR) src/alpha/$(DEPDIR) src/arc/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/bfin/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/m88k/$(DEPDIR) src/metag/$(DEPDIR) src/microblaze/$(DEPDIR) src/mips/$(DEPDIR) src/moxie/$(DEPDIR) src/nios2/$(DEPDIR) src/or1k/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/tile/$(DEPDIR) src/vax/$(DEPDIR) src/x86/$(DEPDIR) src/xtensa/$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: $(DVIS) - -html: html-recursive - -html-am: $(HTMLS) - -info: info-recursive - -info-am: $(INFO_DEPS) - -install-data-am: install-info-am install-pkgconfigDATA - -install-dvi: install-dvi-recursive - -install-dvi-am: $(DVIS) - @$(NORMAL_INSTALL) - @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ - done -install-exec-am: install-toolexeclibLTLIBRARIES - -install-html: install-html-recursive - -install-html-am: $(HTMLS) - @$(NORMAL_INSTALL) - @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ - $(am__strip_dir) \ - d2=$$d$$p; \ - if test -d "$$d2"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ - $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ - echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ - else \ - list2="$$list2 $$d2"; \ - fi; \ - done; \ - test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ - done; } -install-info: install-info-recursive - -install-info-am: $(INFO_DEPS) - @$(NORMAL_INSTALL) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ - fi; \ - for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ - for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ - $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ - if test -f $$ifile; then \ - echo "$$ifile"; \ - else : ; fi; \ - done; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done - @$(POST_INSTALL) - @if $(am__can_run_installinfo); then \ - list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ - install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ - done; \ - else : ; fi -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: $(PDFS) - @$(NORMAL_INSTALL) - @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done -install-ps: install-ps-recursive - -install-ps-am: $(PSS) - @$(NORMAL_INSTALL) - @list='$(PSS)'; test -n "$(psdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf src/$(DEPDIR) src/aarch64/$(DEPDIR) src/alpha/$(DEPDIR) src/arc/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/bfin/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/m88k/$(DEPDIR) src/metag/$(DEPDIR) src/microblaze/$(DEPDIR) src/mips/$(DEPDIR) src/moxie/$(DEPDIR) src/nios2/$(DEPDIR) src/or1k/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/tile/$(DEPDIR) src/vax/$(DEPDIR) src/x86/$(DEPDIR) src/xtensa/$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-aminfo \ - maintainer-clean-generic maintainer-clean-vti - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool mostlyclean-vti - -pdf: pdf-recursive - -pdf-am: $(PDFS) - -ps: ps-recursive - -ps-am: $(PSS) - -uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ - uninstall-pdf-am uninstall-pkgconfigDATA uninstall-ps-am \ - uninstall-toolexeclibLTLIBRARIES - -.MAKE: $(am__recursive_targets) all install-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ - am--refresh check check-am clean clean-aminfo clean-cscope \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - clean-toolexeclibLTLIBRARIES cscope cscopelist-am ctags \ - ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-info dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ - distcheck distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-data install-data-am \ - install-dvi install-dvi-am install-exec install-exec-am \ - install-html install-html-am install-info install-info-am \ - install-man install-pdf install-pdf-am install-pkgconfigDATA \ - install-ps install-ps-am install-strip \ - install-toolexeclibLTLIBRARIES installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-aminfo maintainer-clean-generic \ - maintainer-clean-vti mostlyclean mostlyclean-aminfo \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - mostlyclean-vti pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-dvi-am uninstall-html-am \ - uninstall-info-am uninstall-pdf-am uninstall-pkgconfigDATA \ - uninstall-ps-am uninstall-toolexeclibLTLIBRARIES - - -dist-hook: - if [ -d $(top_srcdir)/.git ] ; then (cd $(top_srcdir); git log --no-decorate) ; else echo 'See git log for history.' ; fi > $(distdir)/ChangeLog - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/ruby/ext/fiddle/libffi-3.2.1/README b/ruby/ext/fiddle/libffi-3.2.1/README deleted file mode 100644 index 5acc19d70..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/README +++ /dev/null @@ -1,447 +0,0 @@ -Status -====== - -libffi-3.2.1 was released on November 12, 2014. Check the libffi web -page for updates: . - - -What is libffi? -=============== - -Compilers for high level languages generate code that follow certain -conventions. These conventions are necessary, in part, for separate -compilation to work. One such convention is the "calling -convention". The "calling convention" is essentially a set of -assumptions made by the compiler about where function arguments will -be found on entry to a function. A "calling convention" also specifies -where the return value for a function is found. - -Some programs may not know at the time of compilation what arguments -are to be passed to a function. For instance, an interpreter may be -told at run-time about the number and types of arguments used to call -a given function. Libffi can be used in such programs to provide a -bridge from the interpreter program to compiled code. - -The libffi library provides a portable, high level programming -interface to various calling conventions. This allows a programmer to -call any function specified by a call interface description at run -time. - -FFI stands for Foreign Function Interface. A foreign function -interface is the popular name for the interface that allows code -written in one language to call code written in another language. The -libffi library really only provides the lowest, machine dependent -layer of a fully featured foreign function interface. A layer must -exist above libffi that handles type conversions for values passed -between the two languages. - - -Supported Platforms -=================== - -Libffi has been ported to many different platforms. -For specific configuration details and testing status, please -refer to the wiki page here: - - http://www.moxielogic.org/wiki/index.php?title=Libffi_3.2 - -At the time of release, the following basic configurations have been -tested: - -|-----------------+------------------+-------------------------| -| Architecture | Operating System | Compiler | -|-----------------+------------------+-------------------------| -| AArch64 (ARM64) | iOS | Clang | -| AArch64 | Linux | GCC | -| Alpha | Linux | GCC | -| Alpha | Tru64 | GCC | -| ARC | Linux | GCC | -| ARM | Linux | GCC | -| ARM | iOS | GCC | -| AVR32 | Linux | GCC | -| Blackfin | uClinux | GCC | -| HPPA | HPUX | GCC | -| IA-64 | Linux | GCC | -| M68K | FreeMiNT | GCC | -| M68K | Linux | GCC | -| M68K | RTEMS | GCC | -| M88K | OpenBSD/mvme88k | GCC | -| Meta | Linux | GCC | -| MicroBlaze | Linux | GCC | -| MIPS | IRIX | GCC | -| MIPS | Linux | GCC | -| MIPS | RTEMS | GCC | -| MIPS64 | Linux | GCC | -| Moxie | Bare metal | GCC | -| Nios II | Linux | GCC | -| OpenRISC | Linux | GCC | -| PowerPC 32-bit | AIX | IBM XL C | -| PowerPC 64-bit | AIX | IBM XL C | -| PowerPC | AMIGA | GCC | -| PowerPC | Linux | GCC | -| PowerPC | Mac OSX | GCC | -| PowerPC | FreeBSD | GCC | -| PowerPC 64-bit | FreeBSD | GCC | -| PowerPC 64-bit | Linux ELFv1 | GCC | -| PowerPC 64-bit | Linux ELFv2 | GCC | -| S390 | Linux | GCC | -| S390X | Linux | GCC | -| SPARC | Linux | GCC | -| SPARC | Solaris | GCC | -| SPARC | Solaris | Oracle Solaris Studio C | -| SPARC64 | Linux | GCC | -| SPARC64 | FreeBSD | GCC | -| SPARC64 | Solaris | Oracle Solaris Studio C | -| TILE-Gx/TILEPro | Linux | GCC | -| VAX | OpenBSD/vax | GCC | -| X86 | FreeBSD | GCC | -| X86 | GNU HURD | GCC | -| X86 | Interix | GCC | -| X86 | kFreeBSD | GCC | -| X86 | Linux | GCC | -| X86 | Mac OSX | GCC | -| X86 | OpenBSD | GCC | -| X86 | OS/2 | GCC | -| X86 | Solaris | GCC | -| X86 | Solaris | Oracle Solaris Studio C | -| X86 | Windows/Cygwin | GCC | -| X86 | Windows/MingW | GCC | -| X86-64 | FreeBSD | GCC | -| X86-64 | Linux | GCC | -| X86-64 | Linux/x32 | GCC | -| X86-64 | OpenBSD | GCC | -| X86-64 | Solaris | Oracle Solaris Studio C | -| X86-64 | Windows/Cygwin | GCC | -| X86-64 | Windows/MingW | GCC | -| Xtensa | Linux | GCC | -|-----------------+------------------+-------------------------| - -Please send additional platform test results to -libffi-discuss@sourceware.org and feel free to update the wiki page -above. - -Installing libffi -================= - -First you must configure the distribution for your particular -system. Go to the directory you wish to build libffi in and run the -"configure" program found in the root directory of the libffi source -distribution. - -If you're building libffi directly from version control, configure won't -exist yet; run ./autogen.sh first. - -You may want to tell configure where to install the libffi library and -header files. To do that, use the --prefix configure switch. Libffi -will install under /usr/local by default. - -If you want to enable extra run-time debugging checks use the the ---enable-debug configure switch. This is useful when your program dies -mysteriously while using libffi. - -Another useful configure switch is --enable-purify-safety. Using this -will add some extra code which will suppress certain warnings when you -are using Purify with libffi. Only use this switch when using -Purify, as it will slow down the library. - -It's also possible to build libffi on Windows platforms with -Microsoft's Visual C++ compiler. In this case, use the msvcc.sh -wrapper script during configuration like so: - -path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" - -For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64" and -CXX="path/to/msvcc.sh -m64". You may also need to specify --build -appropriately. - -It is also possible to build libffi on Windows platforms with the LLVM -project's clang-cl compiler, like below: - -path/to/configure CC="path/to/msvcc.sh -clang-cl" CXX="path/to/msvcc.sh -clang-cl" LD=link CPP="clang-cl -EP" - -When building with MSVC under a MingW environment, you may need to -remove the line in configure that sets 'fix_srcfile_path' to a 'cygpath' -command. ('cygpath' is not present in MingW, and is not required when -using MingW-style paths.) - -For iOS builds, the 'libffi.xcodeproj' Xcode project is available. - -Configure has many other options. Use "configure --help" to see them all. - -Once configure has finished, type "make". Note that you must be using -GNU make. You can ftp GNU make from ftp.gnu.org:/pub/gnu/make . - -To ensure that libffi is working as advertised, type "make check". -This will require that you have DejaGNU installed. - -To install the library and header files, type "make install". - - -History -======= - -See the git log for details at http://github.com/atgreen/libffi. - -3.2.1 Nov-12-14 - Build fix for non-iOS AArch64 targets. - -3.2 Nov-11-14 - Add C99 Complex Type support (currently only supported on - s390). - Add support for PASCAL and REGISTER calling conventions on x86 - Windows/Linux. - Add OpenRISC and Cygwin-64 support. - Bug fixes. - -3.1 May-19-14 - Add AArch64 (ARM64) iOS support. - Add Nios II support. - Add m88k and DEC VAX support. - Add support for stdcall, thiscall, and fastcall on non-Windows - 32-bit x86 targets such as Linux. - Various Android, MIPS N32, x86, FreeBSD and UltraSPARC IIi - fixes. - Make the testsuite more robust: eliminate several spurious - failures, and respect the $CC and $CXX environment variables. - Archive off the manually maintained ChangeLog in favor of git - log. - -3.0.13 Mar-17-13 - Add Meta support. - Add missing Moxie bits. - Fix stack alignment bug on 32-bit x86. - Build fix for m68000 targets. - Build fix for soft-float Power targets. - Fix the install dir location for some platforms when building - with GCC (OS X, Solaris). - Fix Cygwin regression. - -3.0.12 Feb-11-13 - Add Moxie support. - Add AArch64 support. - Add Blackfin support. - Add TILE-Gx/TILEPro support. - Add MicroBlaze support. - Add Xtensa support. - Add support for PaX enabled kernels with MPROTECT. - Add support for native vendor compilers on - Solaris and AIX. - Work around LLVM/GCC interoperability issue on x86_64. - -3.0.11 Apr-11-12 - Lots of build fixes. - Add support for variadic functions (ffi_prep_cif_var). - Add Linux/x32 support. - Add thiscall, fastcall and MSVC cdecl support on Windows. - Add Amiga and newer MacOS support. - Add m68k FreeMiNT support. - Integration with iOS' xcode build tools. - Fix Octeon and MC68881 support. - Fix code pessimizations. - -3.0.10 Aug-23-11 - Add support for Apple's iOS. - Add support for ARM VFP ABI. - Add RTEMS support for MIPS and M68K. - Fix instruction cache clearing problems on - ARM and SPARC. - Fix the N64 build on mips-sgi-irix6.5. - Enable builds with Microsoft's compiler. - Enable x86 builds with Oracle's Solaris compiler. - Fix support for calling code compiled with Oracle's Sparc - Solaris compiler. - Testsuite fixes for Tru64 Unix. - Additional platform support. - -3.0.9 Dec-31-09 - Add AVR32 and win64 ports. Add ARM softfp support. - Many fixes for AIX, Solaris, HP-UX, *BSD. - Several PowerPC and x86-64 bug fixes. - Build DLL for windows. - -3.0.8 Dec-19-08 - Add *BSD, BeOS, and PA-Linux support. - -3.0.7 Nov-11-08 - Fix for ppc FreeBSD. - (thanks to Andreas Tobler) - -3.0.6 Jul-17-08 - Fix for closures on sh. - Mark the sh/sh64 stack as non-executable. - (both thanks to Kaz Kojima) - -3.0.5 Apr-3-08 - Fix libffi.pc file. - Fix #define ARM for IcedTea users. - Fix x86 closure bug. - -3.0.4 Feb-24-08 - Fix x86 OpenBSD configury. - -3.0.3 Feb-22-08 - Enable x86 OpenBSD thanks to Thomas Heller, and - x86-64 FreeBSD thanks to Björn König and Andreas Tobler. - Clean up test instruction in README. - -3.0.2 Feb-21-08 - Improved x86 FreeBSD support. - Thanks to Björn König. - -3.0.1 Feb-15-08 - Fix instruction cache flushing bug on MIPS. - Thanks to David Daney. - -3.0.0 Feb-15-08 - Many changes, mostly thanks to the GCC project. - Cygnus Solutions is now Red Hat. - - [10 years go by...] - -1.20 Oct-5-98 - Raffaele Sena produces ARM port. - -1.19 Oct-5-98 - Fixed x86 long double and long long return support. - m68k bug fixes from Andreas Schwab. - Patch for DU assembler compatibility for the Alpha from Richard - Henderson. - -1.18 Apr-17-98 - Bug fixes and MIPS configuration changes. - -1.17 Feb-24-98 - Bug fixes and m68k port from Andreas Schwab. PowerPC port from - Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. - -1.16 Feb-11-98 - Richard Henderson produces Alpha port. - -1.15 Dec-4-97 - Fixed an n32 ABI bug. New libtool, auto* support. - -1.14 May-13-97 - libtool is now used to generate shared and static libraries. - Fixed a minor portability problem reported by Russ McManus - . - -1.13 Dec-2-96 - Added --enable-purify-safety to keep Purify from complaining - about certain low level code. - Sparc fix for calling functions with < 6 args. - Linux x86 a.out fix. - -1.12 Nov-22-96 - Added missing ffi_type_void, needed for supporting void return - types. Fixed test case for non MIPS machines. Cygnus Support - is now Cygnus Solutions. - -1.11 Oct-30-96 - Added notes about GNU make. - -1.10 Oct-29-96 - Added configuration fix for non GNU compilers. - -1.09 Oct-29-96 - Added --enable-debug configure switch. Clean-ups based on LCLint - feedback. ffi_mips.h is always installed. Many configuration - fixes. Fixed ffitest.c for sparc builds. - -1.08 Oct-15-96 - Fixed n32 problem. Many clean-ups. - -1.07 Oct-14-96 - Gordon Irlam rewrites v8.S again. Bug fixes. - -1.06 Oct-14-96 - Gordon Irlam improved the sparc port. - -1.05 Oct-14-96 - Interface changes based on feedback. - -1.04 Oct-11-96 - Sparc port complete (modulo struct passing bug). - -1.03 Oct-10-96 - Passing struct args, and returning struct values works for - all architectures/calling conventions. Expanded tests. - -1.02 Oct-9-96 - Added SGI n32 support. Fixed bugs in both o32 and Linux support. - Added "make test". - -1.01 Oct-8-96 - Fixed float passing bug in mips version. Restructured some - of the code. Builds cleanly with SGI tools. - -1.00 Oct-7-96 - First release. No public announcement. - - -Authors & Credits -================= - -libffi was originally written by Anthony Green . - -The developers of the GNU Compiler Collection project have made -innumerable valuable contributions. See the ChangeLog file for -details. - -Some of the ideas behind libffi were inspired by Gianni Mariani's free -gencall library for Silicon Graphics machines. - -The closure mechanism was designed and implemented by Kresten Krab -Thorup. - -Major processor architecture ports were contributed by the following -developers: - -aarch64 Marcus Shawcroft, James Greenhalgh -alpha Richard Henderson -arm Raffaele Sena -blackfin Alexandre Keunecke I. de Mendonca -cris Simon Posnjak, Hans-Peter Nilsson -frv Anthony Green -ia64 Hans Boehm -m32r Kazuhiro Inaoka -m68k Andreas Schwab -m88k Miod Vallat -microblaze Nathan Rossi -mips Anthony Green, Casey Marshall -mips64 David Daney -moxie Anthony Green -nios ii Sandra Loosemore -openrisc Sebastian Macke -pa Randolph Chung, Dave Anglin, Andreas Tobler -powerpc Geoffrey Keating, Andreas Tobler, - David Edelsohn, John Hornkvist -powerpc64 Jakub Jelinek -s390 Gerhard Tonn, Ulrich Weigand -sh Kaz Kojima -sh64 Kaz Kojima -sparc Anthony Green, Gordon Irlam -tile-gx/tilepro Walter Lee -vax Miod Vallat -x86 Anthony Green, Jon Beniston -x86-64 Bo Thorsen -xtensa Chris Zankel - -Jesper Skov and Andrew Haley both did more than their fair share of -stepping through the code and tracking down bugs. - -Thanks also to Tom Tromey for bug fixes, documentation and -configuration help. - -Thanks to Jim Blandy, who provided some useful feedback on the libffi -interface. - -Andreas Tobler has done a tremendous amount of work on the testsuite. - -Alex Oliva solved the executable page problem for SElinux. - -The list above is almost certainly incomplete and inaccurate. I'm -happy to make corrections or additions upon request. - -If you have a problem, or have found a bug, please send a note to the -author at green@moxielogic.com, or the project mailing list at -libffi-discuss@sourceware.org. diff --git a/ruby/ext/fiddle/libffi-3.2.1/acinclude.m4 b/ruby/ext/fiddle/libffi-3.2.1/acinclude.m4 deleted file mode 100644 index 3e8f8ba57..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/acinclude.m4 +++ /dev/null @@ -1,92 +0,0 @@ -# mmap(2) blacklisting. Some platforms provide the mmap library routine -# but don't support all of the features we need from it. -AC_DEFUN([AC_FUNC_MMAP_BLACKLIST], -[ -AC_CHECK_HEADER([sys/mman.h], - [libffi_header_sys_mman_h=yes], [libffi_header_sys_mman_h=no]) -AC_CHECK_FUNC([mmap], [libffi_func_mmap=yes], [libffi_func_mmap=no]) -if test "$libffi_header_sys_mman_h" != yes \ - || test "$libffi_func_mmap" != yes; then - ac_cv_func_mmap_file=no - ac_cv_func_mmap_dev_zero=no - ac_cv_func_mmap_anon=no -else - AC_CACHE_CHECK([whether read-only mmap of a plain file works], - ac_cv_func_mmap_file, - [# Add a system to this blacklist if - # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a - # memory area containing the same data that you'd get if you applied - # read() to the same fd. The only system known to have a problem here - # is VMS, where text files have record structure. - case "$host_os" in - vms* | ultrix*) - ac_cv_func_mmap_file=no ;; - *) - ac_cv_func_mmap_file=yes;; - esac]) - AC_CACHE_CHECK([whether mmap from /dev/zero works], - ac_cv_func_mmap_dev_zero, - [# Add a system to this blacklist if it has mmap() but /dev/zero - # does not exist, or if mmapping /dev/zero does not give anonymous - # zeroed pages with both the following properties: - # 1. If you map N consecutive pages in with one call, and then - # unmap any subset of those pages, the pages that were not - # explicitly unmapped remain accessible. - # 2. If you map two adjacent blocks of memory and then unmap them - # both at once, they must both go away. - # Systems known to be in this category are Windows (all variants), - # VMS, and Darwin. - case "$host_os" in - vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00) - ac_cv_func_mmap_dev_zero=no ;; - *) - ac_cv_func_mmap_dev_zero=yes;; - esac]) - - # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. - AC_CACHE_CHECK([for MAP_ANON(YMOUS)], ac_cv_decl_map_anon, - [AC_TRY_COMPILE( -[#include -#include -#include - -#ifndef MAP_ANONYMOUS -#define MAP_ANONYMOUS MAP_ANON -#endif -], -[int n = MAP_ANONYMOUS;], - ac_cv_decl_map_anon=yes, - ac_cv_decl_map_anon=no)]) - - if test $ac_cv_decl_map_anon = no; then - ac_cv_func_mmap_anon=no - else - AC_CACHE_CHECK([whether mmap with MAP_ANON(YMOUS) works], - ac_cv_func_mmap_anon, - [# Add a system to this blacklist if it has mmap() and MAP_ANON or - # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) - # doesn't give anonymous zeroed pages with the same properties listed - # above for use of /dev/zero. - # Systems known to be in this category are Windows, VMS, and SCO Unix. - case "$host_os" in - vms* | cygwin* | pe | mingw* | sco* | udk* ) - ac_cv_func_mmap_anon=no ;; - *) - ac_cv_func_mmap_anon=yes;; - esac]) - fi -fi - -if test $ac_cv_func_mmap_file = yes; then - AC_DEFINE(HAVE_MMAP_FILE, 1, - [Define if read-only mmap of a plain file works.]) -fi -if test $ac_cv_func_mmap_dev_zero = yes; then - AC_DEFINE(HAVE_MMAP_DEV_ZERO, 1, - [Define if mmap of /dev/zero works.]) -fi -if test $ac_cv_func_mmap_anon = yes; then - AC_DEFINE(HAVE_MMAP_ANON, 1, - [Define if mmap with MAP_ANON(YMOUS) works.]) -fi -]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/aclocal.m4 b/ruby/ext/fiddle/libffi-3.2.1/aclocal.m4 deleted file mode 100644 index 6292fbab7..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/aclocal.m4 +++ /dev/null @@ -1,1961 +0,0 @@ -# generated automatically by aclocal 1.13.4 -*- Autoconf -*- - -# Copyright (C) 1996-2013 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_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, -[m4_warning([this file was generated for autoconf 2.69. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically 'autoreconf'.])]) - -# ltdl.m4 - Configure ltdl for the target system. -*-Autoconf-*- -# -# Copyright (C) 1999-2006, 2007, 2008, 2011 Free Software Foundation, Inc. -# Written by Thomas Tanner, 1999 -# -# 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. - -# serial 18 LTDL_INIT - -# LT_CONFIG_LTDL_DIR(DIRECTORY, [LTDL-MODE]) -# ------------------------------------------ -# DIRECTORY contains the libltdl sources. It is okay to call this -# function multiple times, as long as the same DIRECTORY is always given. -AC_DEFUN([LT_CONFIG_LTDL_DIR], -[AC_BEFORE([$0], [LTDL_INIT]) -_$0($*) -])# LT_CONFIG_LTDL_DIR - -# We break this out into a separate macro, so that we can call it safely -# internally without being caught accidentally by the sed scan in libtoolize. -m4_defun([_LT_CONFIG_LTDL_DIR], -[dnl remove trailing slashes -m4_pushdef([_ARG_DIR], m4_bpatsubst([$1], [/*$])) -m4_case(_LTDL_DIR, - [], [dnl only set lt_ltdl_dir if _ARG_DIR is not simply `.' - m4_if(_ARG_DIR, [.], - [], - [m4_define([_LTDL_DIR], _ARG_DIR) - _LT_SHELL_INIT([lt_ltdl_dir=']_ARG_DIR['])])], - [m4_if(_ARG_DIR, _LTDL_DIR, - [], - [m4_fatal([multiple libltdl directories: `]_LTDL_DIR[', `]_ARG_DIR['])])]) -m4_popdef([_ARG_DIR]) -])# _LT_CONFIG_LTDL_DIR - -# Initialise: -m4_define([_LTDL_DIR], []) - - -# _LT_BUILD_PREFIX -# ---------------- -# If Autoconf is new enough, expand to `${top_build_prefix}', otherwise -# to `${top_builddir}/'. -m4_define([_LT_BUILD_PREFIX], -[m4_ifdef([AC_AUTOCONF_VERSION], - [m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.62]), - [-1], [m4_ifdef([_AC_HAVE_TOP_BUILD_PREFIX], - [${top_build_prefix}], - [${top_builddir}/])], - [${top_build_prefix}])], - [${top_builddir}/])[]dnl -]) - - -# LTDL_CONVENIENCE -# ---------------- -# sets LIBLTDL to the link flags for the libltdl convenience library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-convenience to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. LIBLTDL will be prefixed with -# '${top_build_prefix}' if available, otherwise with '${top_builddir}/', -# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single -# quotes!). If your package is not flat and you're not using automake, -# define top_build_prefix, top_builddir, and top_srcdir appropriately -# in your Makefiles. -AC_DEFUN([LTDL_CONVENIENCE], -[AC_BEFORE([$0], [LTDL_INIT])dnl -dnl Although the argument is deprecated and no longer documented, -dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one -dnl here make sure it is the same as any other declaration of libltdl's -dnl location! This also ensures lt_ltdl_dir is set when configure.ac is -dnl not yet using an explicit LT_CONFIG_LTDL_DIR. -m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl -_$0() -])# LTDL_CONVENIENCE - -# AC_LIBLTDL_CONVENIENCE accepted a directory argument in older libtools, -# now we have LT_CONFIG_LTDL_DIR: -AU_DEFUN([AC_LIBLTDL_CONVENIENCE], -[_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) -_LTDL_CONVENIENCE]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBLTDL_CONVENIENCE], []) - - -# _LTDL_CONVENIENCE -# ----------------- -# Code shared by LTDL_CONVENIENCE and LTDL_INIT([convenience]). -m4_defun([_LTDL_CONVENIENCE], -[case $enable_ltdl_convenience in - no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; - "") enable_ltdl_convenience=yes - ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; -esac -LIBLTDL='_LT_BUILD_PREFIX'"${lt_ltdl_dir+$lt_ltdl_dir/}libltdlc.la" -LTDLDEPS=$LIBLTDL -LTDLINCL='-I${top_srcdir}'"${lt_ltdl_dir+/$lt_ltdl_dir}" - -AC_SUBST([LIBLTDL]) -AC_SUBST([LTDLDEPS]) -AC_SUBST([LTDLINCL]) - -# For backwards non-gettext consistent compatibility... -INCLTDL="$LTDLINCL" -AC_SUBST([INCLTDL]) -])# _LTDL_CONVENIENCE - - -# LTDL_INSTALLABLE -# ---------------- -# sets LIBLTDL to the link flags for the libltdl installable library -# and LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-install to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called from here. If an installed libltdl -# is not found, LIBLTDL will be prefixed with '${top_build_prefix}' if -# available, otherwise with '${top_builddir}/', and LTDLINCL will be -# prefixed with '${top_srcdir}/' (note the single quotes!). If your -# package is not flat and you're not using automake, define top_build_prefix, -# top_builddir, and top_srcdir appropriately in your Makefiles. -# In the future, this macro may have to be called after LT_INIT. -AC_DEFUN([LTDL_INSTALLABLE], -[AC_BEFORE([$0], [LTDL_INIT])dnl -dnl Although the argument is deprecated and no longer documented, -dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one -dnl here make sure it is the same as any other declaration of libltdl's -dnl location! This also ensures lt_ltdl_dir is set when configure.ac is -dnl not yet using an explicit LT_CONFIG_LTDL_DIR. -m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl -_$0() -])# LTDL_INSTALLABLE - -# AC_LIBLTDL_INSTALLABLE accepted a directory argument in older libtools, -# now we have LT_CONFIG_LTDL_DIR: -AU_DEFUN([AC_LIBLTDL_INSTALLABLE], -[_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) -_LTDL_INSTALLABLE]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBLTDL_INSTALLABLE], []) - - -# _LTDL_INSTALLABLE -# ----------------- -# Code shared by LTDL_INSTALLABLE and LTDL_INIT([installable]). -m4_defun([_LTDL_INSTALLABLE], -[if test -f $prefix/lib/libltdl.la; then - lt_save_LDFLAGS="$LDFLAGS" - LDFLAGS="-L$prefix/lib $LDFLAGS" - AC_CHECK_LIB([ltdl], [lt_dlinit], [lt_lib_ltdl=yes]) - LDFLAGS="$lt_save_LDFLAGS" - if test x"${lt_lib_ltdl-no}" = xyes; then - if test x"$enable_ltdl_install" != xyes; then - # Don't overwrite $prefix/lib/libltdl.la without --enable-ltdl-install - AC_MSG_WARN([not overwriting libltdl at $prefix, force with `--enable-ltdl-install']) - enable_ltdl_install=no - fi - elif test x"$enable_ltdl_install" = xno; then - AC_MSG_WARN([libltdl not installed, but installation disabled]) - fi -fi - -# If configure.ac declared an installable ltdl, and the user didn't override -# with --disable-ltdl-install, we will install the shipped libltdl. -case $enable_ltdl_install in - no) ac_configure_args="$ac_configure_args --enable-ltdl-install=no" - LIBLTDL="-lltdl" - LTDLDEPS= - LTDLINCL= - ;; - *) enable_ltdl_install=yes - ac_configure_args="$ac_configure_args --enable-ltdl-install" - LIBLTDL='_LT_BUILD_PREFIX'"${lt_ltdl_dir+$lt_ltdl_dir/}libltdl.la" - LTDLDEPS=$LIBLTDL - LTDLINCL='-I${top_srcdir}'"${lt_ltdl_dir+/$lt_ltdl_dir}" - ;; -esac - -AC_SUBST([LIBLTDL]) -AC_SUBST([LTDLDEPS]) -AC_SUBST([LTDLINCL]) - -# For backwards non-gettext consistent compatibility... -INCLTDL="$LTDLINCL" -AC_SUBST([INCLTDL]) -])# LTDL_INSTALLABLE - - -# _LTDL_MODE_DISPATCH -# ------------------- -m4_define([_LTDL_MODE_DISPATCH], -[dnl If _LTDL_DIR is `.', then we are configuring libltdl itself: -m4_if(_LTDL_DIR, [], - [], - dnl if _LTDL_MODE was not set already, the default value is `subproject': - [m4_case(m4_default(_LTDL_MODE, [subproject]), - [subproject], [AC_CONFIG_SUBDIRS(_LTDL_DIR) - _LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"])], - [nonrecursive], [_LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"; lt_libobj_prefix="$lt_ltdl_dir/"])], - [recursive], [], - [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])])dnl -dnl Be careful not to expand twice: -m4_define([$0], []) -])# _LTDL_MODE_DISPATCH - - -# _LT_LIBOBJ(MODULE_NAME) -# ----------------------- -# Like AC_LIBOBJ, except that MODULE_NAME goes into _LT_LIBOBJS instead -# of into LIBOBJS. -AC_DEFUN([_LT_LIBOBJ], [ - m4_pattern_allow([^_LT_LIBOBJS$]) - _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext" -])# _LT_LIBOBJS - - -# LTDL_INIT([OPTIONS]) -# -------------------- -# Clients of libltdl can use this macro to allow the installer to -# choose between a shipped copy of the ltdl sources or a preinstalled -# version of the library. If the shipped ltdl sources are not in a -# subdirectory named libltdl, the directory name must be given by -# LT_CONFIG_LTDL_DIR. -AC_DEFUN([LTDL_INIT], -[dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -dnl We need to keep our own list of libobjs separate from our parent project, -dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while -dnl we look for our own LIBOBJs. -m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ])) -m4_pushdef([AC_LIBSOURCES]) - -dnl If not otherwise defined, default to the 1.5.x compatible subproject mode: -m4_if(_LTDL_MODE, [], - [m4_define([_LTDL_MODE], m4_default([$2], [subproject])) - m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])], - [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])]) - -AC_ARG_WITH([included_ltdl], - [AS_HELP_STRING([--with-included-ltdl], - [use the GNU ltdl sources included here])]) - -if test "x$with_included_ltdl" != xyes; then - # We are not being forced to use the included libltdl sources, so - # decide whether there is a useful installed version we can use. - AC_CHECK_HEADER([ltdl.h], - [AC_CHECK_DECL([lt_dlinterface_register], - [AC_CHECK_LIB([ltdl], [lt_dladvise_preload], - [with_included_ltdl=no], - [with_included_ltdl=yes])], - [with_included_ltdl=yes], - [AC_INCLUDES_DEFAULT - #include ])], - [with_included_ltdl=yes], - [AC_INCLUDES_DEFAULT] - ) -fi - -dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE -dnl was called yet, then for old times' sake, we assume libltdl is in an -dnl eponymous directory: -AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])]) - -AC_ARG_WITH([ltdl_include], - [AS_HELP_STRING([--with-ltdl-include=DIR], - [use the ltdl headers installed in DIR])]) - -if test -n "$with_ltdl_include"; then - if test -f "$with_ltdl_include/ltdl.h"; then : - else - AC_MSG_ERROR([invalid ltdl include directory: `$with_ltdl_include']) - fi -else - with_ltdl_include=no -fi - -AC_ARG_WITH([ltdl_lib], - [AS_HELP_STRING([--with-ltdl-lib=DIR], - [use the libltdl.la installed in DIR])]) - -if test -n "$with_ltdl_lib"; then - if test -f "$with_ltdl_lib/libltdl.la"; then : - else - AC_MSG_ERROR([invalid ltdl library directory: `$with_ltdl_lib']) - fi -else - with_ltdl_lib=no -fi - -case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in - ,yes,no,no,) - m4_case(m4_default(_LTDL_TYPE, [convenience]), - [convenience], [_LTDL_CONVENIENCE], - [installable], [_LTDL_INSTALLABLE], - [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)]) - ;; - ,no,no,no,) - # If the included ltdl is not to be used, then use the - # preinstalled libltdl we found. - AC_DEFINE([HAVE_LTDL], [1], - [Define this if a modern libltdl is already installed]) - LIBLTDL=-lltdl - LTDLDEPS= - LTDLINCL= - ;; - ,no*,no,*) - AC_MSG_ERROR([`--with-ltdl-include' and `--with-ltdl-lib' options must be used together]) - ;; - *) with_included_ltdl=no - LIBLTDL="-L$with_ltdl_lib -lltdl" - LTDLDEPS= - LTDLINCL="-I$with_ltdl_include" - ;; -esac -INCLTDL="$LTDLINCL" - -# Report our decision... -AC_MSG_CHECKING([where to find libltdl headers]) -AC_MSG_RESULT([$LTDLINCL]) -AC_MSG_CHECKING([where to find libltdl library]) -AC_MSG_RESULT([$LIBLTDL]) - -_LTDL_SETUP - -dnl restore autoconf definition. -m4_popdef([AC_LIBOBJ]) -m4_popdef([AC_LIBSOURCES]) - -AC_CONFIG_COMMANDS_PRE([ - _ltdl_libobjs= - _ltdl_ltlibobjs= - if test -n "$_LT_LIBOBJS"; then - # Remove the extension. - _lt_sed_drop_objext='s/\.o$//;s/\.obj$//' - for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do - _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext" - _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo" - done - fi - AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs]) - AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs]) -]) - -# Only expand once: -m4_define([LTDL_INIT]) -])# LTDL_INIT - -# Old names: -AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)]) -AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)]) -AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIB_LTDL], []) -dnl AC_DEFUN([AC_WITH_LTDL], []) -dnl AC_DEFUN([LT_WITH_LTDL], []) - - -# _LTDL_SETUP -# ----------- -# Perform all the checks necessary for compilation of the ltdl objects -# -- including compiler checks and header checks. This is a public -# interface mainly for the benefit of libltdl's own configure.ac, most -# other users should call LTDL_INIT instead. -AC_DEFUN([_LTDL_SETUP], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_SYS_MODULE_EXT])dnl -AC_REQUIRE([LT_SYS_MODULE_PATH])dnl -AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl -AC_REQUIRE([LT_LIB_DLLOAD])dnl -AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl -AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl -AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl -AC_REQUIRE([gl_FUNC_ARGZ])dnl - -m4_require([_LT_CHECK_OBJDIR])dnl -m4_require([_LT_HEADER_DLFCN])dnl -m4_require([_LT_CHECK_DLPREOPEN])dnl -m4_require([_LT_DECL_SED])dnl - -dnl Don't require this, or it will be expanded earlier than the code -dnl that sets the variables it relies on: -_LT_ENABLE_INSTALL - -dnl _LTDL_MODE specific code must be called at least once: -_LTDL_MODE_DISPATCH - -# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS -# the user used. This is so that ltdl.h can pick up the parent projects -# config.h file, The first file in AC_CONFIG_HEADERS must contain the -# definitions required by ltdl.c. -# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility). -AC_CONFIG_COMMANDS_PRE([dnl -m4_pattern_allow([^LT_CONFIG_H$])dnl -m4_ifset([AH_HEADER], - [LT_CONFIG_H=AH_HEADER], - [m4_ifset([AC_LIST_HEADERS], - [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's,^[[ ]]*,,;s,[[ :]].*$,,'`], - [])])]) -AC_SUBST([LT_CONFIG_H]) - -AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h], - [], [], [AC_INCLUDES_DEFAULT]) - -AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])]) -AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])]) - -m4_pattern_allow([LT_LIBEXT])dnl -AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension]) - -name= -eval "lt_libprefix=\"$libname_spec\"" -m4_pattern_allow([LT_LIBPREFIX])dnl -AC_DEFINE_UNQUOTED([LT_LIBPREFIX],["$lt_libprefix"],[The archive prefix]) - -name=ltdl -eval "LTDLOPEN=\"$libname_spec\"" -AC_SUBST([LTDLOPEN]) -])# _LTDL_SETUP - - -# _LT_ENABLE_INSTALL -# ------------------ -m4_define([_LT_ENABLE_INSTALL], -[AC_ARG_ENABLE([ltdl-install], - [AS_HELP_STRING([--enable-ltdl-install], [install libltdl])]) - -case ,${enable_ltdl_install},${enable_ltdl_convenience} in - *yes*) ;; - *) enable_ltdl_convenience=yes ;; -esac - -m4_ifdef([AM_CONDITIONAL], -[AM_CONDITIONAL(INSTALL_LTDL, test x"${enable_ltdl_install-no}" != xno) - AM_CONDITIONAL(CONVENIENCE_LTDL, test x"${enable_ltdl_convenience-no}" != xno)]) -])# _LT_ENABLE_INSTALL - - -# LT_SYS_DLOPEN_DEPLIBS -# --------------------- -AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_CACHE_CHECK([whether deplibs are loaded by dlopen], - [lt_cv_sys_dlopen_deplibs], - [# PORTME does your system automatically load deplibs for dlopen? - # or its logical equivalent (e.g. shl_load for HP-UX < 11) - # For now, we just catch OSes we know something about -- in the - # future, we'll try test this programmatically. - lt_cv_sys_dlopen_deplibs=unknown - case $host_os in - aix3*|aix4.1.*|aix4.2.*) - # Unknown whether this is true for these versions of AIX, but - # we want this `case' here to explicitly catch those versions. - lt_cv_sys_dlopen_deplibs=unknown - ;; - aix[[4-9]]*) - lt_cv_sys_dlopen_deplibs=yes - ;; - amigaos*) - case $host_cpu in - powerpc) - lt_cv_sys_dlopen_deplibs=no - ;; - esac - ;; - darwin*) - # Assuming the user has installed a libdl from somewhere, this is true - # If you are looking for one http://www.opendarwin.org/projects/dlcompat - lt_cv_sys_dlopen_deplibs=yes - ;; - freebsd* | dragonfly*) - lt_cv_sys_dlopen_deplibs=yes - ;; - gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu) - # GNU and its variants, using gnu ld.so (Glibc) - lt_cv_sys_dlopen_deplibs=yes - ;; - hpux10*|hpux11*) - lt_cv_sys_dlopen_deplibs=yes - ;; - interix*) - lt_cv_sys_dlopen_deplibs=yes - ;; - irix[[12345]]*|irix6.[[01]]*) - # Catch all versions of IRIX before 6.2, and indicate that we don't - # know how it worked for any of those versions. - lt_cv_sys_dlopen_deplibs=unknown - ;; - irix*) - # The case above catches anything before 6.2, and it's known that - # at 6.2 and later dlopen does load deplibs. - lt_cv_sys_dlopen_deplibs=yes - ;; - netbsd*) - lt_cv_sys_dlopen_deplibs=yes - ;; - openbsd*) - lt_cv_sys_dlopen_deplibs=yes - ;; - osf[[1234]]*) - # dlopen did load deplibs (at least at 4.x), but until the 5.x series, - # it did *not* use an RPATH in a shared library to find objects the - # library depends on, so we explicitly say `no'. - lt_cv_sys_dlopen_deplibs=no - ;; - osf5.0|osf5.0a|osf5.1) - # dlopen *does* load deplibs and with the right loader patch applied - # it even uses RPATH in a shared library to search for shared objects - # that the library depends on, but there's no easy way to know if that - # patch is installed. Since this is the case, all we can really - # say is unknown -- it depends on the patch being installed. If - # it is, this changes to `yes'. Without it, it would be `no'. - lt_cv_sys_dlopen_deplibs=unknown - ;; - osf*) - # the two cases above should catch all versions of osf <= 5.1. Read - # the comments above for what we know about them. - # At > 5.1, deplibs are loaded *and* any RPATH in a shared library - # is used to find them so we can finally say `yes'. - lt_cv_sys_dlopen_deplibs=yes - ;; - qnx*) - lt_cv_sys_dlopen_deplibs=yes - ;; - solaris*) - lt_cv_sys_dlopen_deplibs=yes - ;; - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - libltdl_cv_sys_dlopen_deplibs=yes - ;; - esac - ]) -if test "$lt_cv_sys_dlopen_deplibs" != yes; then - AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1], - [Define if the OS needs help to load dependent libraries for dlopen().]) -fi -])# LT_SYS_DLOPEN_DEPLIBS - -# Old name: -AU_ALIAS([AC_LTDL_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], []) - - -# LT_SYS_MODULE_EXT -# ----------------- -AC_DEFUN([LT_SYS_MODULE_EXT], -[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl -AC_CACHE_CHECK([which extension is used for runtime loadable modules], - [libltdl_cv_shlibext], -[ -module=yes -eval libltdl_cv_shlibext=$shrext_cmds -module=no -eval libltdl_cv_shrext=$shrext_cmds - ]) -if test -n "$libltdl_cv_shlibext"; then - m4_pattern_allow([LT_MODULE_EXT])dnl - AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"], - [Define to the extension used for runtime loadable modules, say, ".so".]) -fi -if test "$libltdl_cv_shrext" != "$libltdl_cv_shlibext"; then - m4_pattern_allow([LT_SHARED_EXT])dnl - AC_DEFINE_UNQUOTED([LT_SHARED_EXT], ["$libltdl_cv_shrext"], - [Define to the shared library suffix, say, ".dylib".]) -fi -])# LT_SYS_MODULE_EXT - -# Old name: -AU_ALIAS([AC_LTDL_SHLIBEXT], [LT_SYS_MODULE_EXT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_SHLIBEXT], []) - - -# LT_SYS_MODULE_PATH -# ------------------ -AC_DEFUN([LT_SYS_MODULE_PATH], -[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl -AC_CACHE_CHECK([which variable specifies run-time module search path], - [lt_cv_module_path_var], [lt_cv_module_path_var="$shlibpath_var"]) -if test -n "$lt_cv_module_path_var"; then - m4_pattern_allow([LT_MODULE_PATH_VAR])dnl - AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"], - [Define to the name of the environment variable that determines the run-time module search path.]) -fi -])# LT_SYS_MODULE_PATH - -# Old name: -AU_ALIAS([AC_LTDL_SHLIBPATH], [LT_SYS_MODULE_PATH]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_SHLIBPATH], []) - - -# LT_SYS_DLSEARCH_PATH -# -------------------- -AC_DEFUN([LT_SYS_DLSEARCH_PATH], -[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl -AC_CACHE_CHECK([for the default library search path], - [lt_cv_sys_dlsearch_path], - [lt_cv_sys_dlsearch_path="$sys_lib_dlsearch_path_spec"]) -if test -n "$lt_cv_sys_dlsearch_path"; then - sys_dlsearch_path= - for dir in $lt_cv_sys_dlsearch_path; do - if test -z "$sys_dlsearch_path"; then - sys_dlsearch_path="$dir" - else - sys_dlsearch_path="$sys_dlsearch_path$PATH_SEPARATOR$dir" - fi - done - m4_pattern_allow([LT_DLSEARCH_PATH])dnl - AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"], - [Define to the system default library search path.]) -fi -])# LT_SYS_DLSEARCH_PATH - -# Old name: -AU_ALIAS([AC_LTDL_SYSSEARCHPATH], [LT_SYS_DLSEARCH_PATH]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_SYSSEARCHPATH], []) - - -# _LT_CHECK_DLPREOPEN -# ------------------- -m4_defun([_LT_CHECK_DLPREOPEN], -[m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -AC_CACHE_CHECK([whether libtool supports -dlopen/-dlpreopen], - [libltdl_cv_preloaded_symbols], - [if test -n "$lt_cv_sys_global_symbol_pipe"; then - libltdl_cv_preloaded_symbols=yes - else - libltdl_cv_preloaded_symbols=no - fi - ]) -if test x"$libltdl_cv_preloaded_symbols" = xyes; then - AC_DEFINE([HAVE_PRELOADED_SYMBOLS], [1], - [Define if libtool can extract symbol lists from object files.]) -fi -])# _LT_CHECK_DLPREOPEN - - -# LT_LIB_DLLOAD -# ------------- -AC_DEFUN([LT_LIB_DLLOAD], -[m4_pattern_allow([^LT_DLLOADERS$]) -LT_DLLOADERS= -AC_SUBST([LT_DLLOADERS]) - -AC_LANG_PUSH([C]) - -LIBADD_DLOPEN= -AC_SEARCH_LIBS([dlopen], [dl], - [AC_DEFINE([HAVE_LIBDL], [1], - [Define if you have the libdl library or equivalent.]) - if test "$ac_cv_search_dlopen" != "none required" ; then - LIBADD_DLOPEN="-ldl" - fi - libltdl_cv_lib_dl_dlopen="yes" - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], - [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H -# include -#endif - ]], [[dlopen(0, 0);]])], - [AC_DEFINE([HAVE_LIBDL], [1], - [Define if you have the libdl library or equivalent.]) - libltdl_cv_func_dlopen="yes" - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], - [AC_CHECK_LIB([svld], [dlopen], - [AC_DEFINE([HAVE_LIBDL], [1], - [Define if you have the libdl library or equivalent.]) - LIBADD_DLOPEN="-lsvld" libltdl_cv_func_dlopen="yes" - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])]) -if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes -then - lt_save_LIBS="$LIBS" - LIBS="$LIBS $LIBADD_DLOPEN" - AC_CHECK_FUNCS([dlerror]) - LIBS="$lt_save_LIBS" -fi -AC_SUBST([LIBADD_DLOPEN]) - -LIBADD_SHL_LOAD= -AC_CHECK_FUNC([shl_load], - [AC_DEFINE([HAVE_SHL_LOAD], [1], - [Define if you have the shl_load function.]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"], - [AC_CHECK_LIB([dld], [shl_load], - [AC_DEFINE([HAVE_SHL_LOAD], [1], - [Define if you have the shl_load function.]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la" - LIBADD_SHL_LOAD="-ldld"])]) -AC_SUBST([LIBADD_SHL_LOAD]) - -case $host_os in -darwin[[1567]].*) -# We only want this for pre-Mac OS X 10.4. - AC_CHECK_FUNC([_dyld_func_lookup], - [AC_DEFINE([HAVE_DYLD], [1], - [Define if you have the _dyld_func_lookup function.]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"]) - ;; -beos*) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la" - ;; -cygwin* | mingw* | os2* | pw32*) - AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include ]]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la" - ;; -esac - -AC_CHECK_LIB([dld], [dld_link], - [AC_DEFINE([HAVE_DLD], [1], - [Define if you have the GNU dld library.]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"]) -AC_SUBST([LIBADD_DLD_LINK]) - -m4_pattern_allow([^LT_DLPREOPEN$]) -LT_DLPREOPEN= -if test -n "$LT_DLLOADERS" -then - for lt_loader in $LT_DLLOADERS; do - LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader " - done - AC_DEFINE([HAVE_LIBDLLOADER], [1], - [Define if libdlloader will be built on this platform]) -fi -AC_SUBST([LT_DLPREOPEN]) - -dnl This isn't used anymore, but set it for backwards compatibility -LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD" -AC_SUBST([LIBADD_DL]) - -AC_LANG_POP -])# LT_LIB_DLLOAD - -# Old name: -AU_ALIAS([AC_LTDL_DLLIB], [LT_LIB_DLLOAD]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_DLLIB], []) - - -# LT_SYS_SYMBOL_USCORE -# -------------------- -# does the compiler prefix global symbols with an underscore? -AC_DEFUN([LT_SYS_SYMBOL_USCORE], -[m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -AC_CACHE_CHECK([for _ prefix in compiled symbols], - [lt_cv_sys_symbol_underscore], - [lt_cv_sys_symbol_underscore=no - cat > conftest.$ac_ext <<_LT_EOF -void nm_test_func(){} -int main(){nm_test_func;return 0;} -_LT_EOF - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - ac_nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then - # See whether the symbols have a leading underscore. - if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then - lt_cv_sys_symbol_underscore=yes - else - if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then - : - else - echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD - fi - fi - else - echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.c >&AS_MESSAGE_LOG_FD - fi - rm -rf conftest* - ]) - sys_symbol_underscore=$lt_cv_sys_symbol_underscore - AC_SUBST([sys_symbol_underscore]) -])# LT_SYS_SYMBOL_USCORE - -# Old name: -AU_ALIAS([AC_LTDL_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_SYMBOL_USCORE], []) - - -# LT_FUNC_DLSYM_USCORE -# -------------------- -AC_DEFUN([LT_FUNC_DLSYM_USCORE], -[AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl -if test x"$lt_cv_sys_symbol_underscore" = xyes; then - if test x"$libltdl_cv_func_dlopen" = xyes || - test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then - AC_CACHE_CHECK([whether we have to add an underscore for dlsym], - [libltdl_cv_need_uscore], - [libltdl_cv_need_uscore=unknown - save_LIBS="$LIBS" - LIBS="$LIBS $LIBADD_DLOPEN" - _LT_TRY_DLOPEN_SELF( - [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes], - [], [libltdl_cv_need_uscore=cross]) - LIBS="$save_LIBS" - ]) - fi -fi - -if test x"$libltdl_cv_need_uscore" = xyes; then - AC_DEFINE([NEED_USCORE], [1], - [Define if dlsym() requires a leading underscore in symbol names.]) -fi -])# LT_FUNC_DLSYM_USCORE - -# Old name: -AU_ALIAS([AC_LTDL_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_DLSYM_USCORE], []) - -# Copyright (C) 2002-2013 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. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.13' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.13.4], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.13.4])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# Figure out how to run the assembler. -*- Autoconf -*- - -# Copyright (C) 2001-2013 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. - -# AM_PROG_AS -# ---------- -AC_DEFUN([AM_PROG_AS], -[# By default we simply use the C compiler to build assembly code. -AC_REQUIRE([AC_PROG_CC]) -test "${CCAS+set}" = set || CCAS=$CC -test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS -AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) -AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) -_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl -]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001-2013 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. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to -# '$srcdir', '$srcdir/..', or '$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is '.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997-2013 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. - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999-2013 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. - - -# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], - [$1], [CXX], [depcc="$CXX" am_compiler_list=], - [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], - [$1], [UPC], [depcc="$UPC" am_compiler_list=], - [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES. -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE([dependency-tracking], [dnl -AS_HELP_STRING( - [--enable-dependency-tracking], - [do not reject slow dependency extractors]) -AS_HELP_STRING( - [--disable-dependency-tracking], - [speeds up one-time build])]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -AC_SUBST([am__nodep])dnl -_AM_SUBST_NOTMAKE([am__nodep])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999-2013 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. - - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996-2013 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 macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.65])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[AC_DIAGNOSE([obsolete], - [$0: two- and three-arguments forms are deprecated.]) -m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), - [ok:ok],, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) - AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) -AM_MISSING_PROG([AUTOCONF], [autoconf]) -AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) -AM_MISSING_PROG([AUTOHEADER], [autoheader]) -AM_MISSING_PROG([MAKEINFO], [makeinfo]) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# -# -AC_SUBST([mkdir_p], ['$(MKDIR_P)']) -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES([CC])], - [m4_define([AC_PROG_CC], - m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES([CXX])], - [m4_define([AC_PROG_CXX], - m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES([OBJC])], - [m4_define([AC_PROG_OBJC], - m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], - [_AM_DEPENDENCIES([OBJCXX])], - [m4_define([AC_PROG_OBJCXX], - m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl -]) -AC_REQUIRE([AM_SILENT_RULES])dnl -dnl The testsuite driver may need to know about EXEEXT, so add the -dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This -dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001-2013 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. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST([install_sh])]) - -# Copyright (C) 2003-2013 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. - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- -# From Jim Meyering - -# Copyright (C) 1996-2013 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. - -# AM_MAINTAINER_MODE([DEFAULT-MODE]) -# ---------------------------------- -# Control maintainer-specific portions of Makefiles. -# Default is to disable them, unless 'enable' is passed literally. -# For symmetry, 'disable' may be passed as well. Anyway, the user -# can override the default with the --enable/--disable switch. -AC_DEFUN([AM_MAINTAINER_MODE], -[m4_case(m4_default([$1], [disable]), - [enable], [m4_define([am_maintainer_other], [disable])], - [disable], [m4_define([am_maintainer_other], [enable])], - [m4_define([am_maintainer_other], [enable]) - m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) -AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode's default is 'disable' unless 'enable' is passed - AC_ARG_ENABLE([maintainer-mode], - [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], - am_maintainer_other[ make rules and dependencies not useful - (and sometimes confusing) to the casual installer])], - [USE_MAINTAINER_MODE=$enableval], - [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) - AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) - MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST([MAINT])dnl -] -) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001-2013 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. - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Copyright (C) 1999-2013 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. - -# AM_PROG_CC_C_O -# -------------- -# Like AC_PROG_CC_C_O, but changed for automake. -AC_DEFUN([AM_PROG_CC_C_O], -[AC_REQUIRE([AC_PROG_CC_C_O])dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([compile])dnl -# FIXME: we rely on the cache variable name because -# there is no other way. -set dummy $CC -am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` -eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o -if test "$am_t" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -dnl Make sure AC_PROG_CC is never called again, or it will override our -dnl setting of CC. -m4_define([AC_PROG_CC], - [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997-2013 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. - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it is modern enough. -# If it is, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - AC_MSG_WARN(['missing' script is too old or missing]) -fi -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001-2013 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. - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# -------------------- -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) - -# _AM_SET_OPTIONS(OPTIONS) -# ------------------------ -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996-2013 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. - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; -esac - -# Do 'set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken - alias in your environment]) - fi - if test "$[2]" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT([yes]) -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi -AC_CONFIG_COMMANDS_PRE( - [AC_MSG_CHECKING([that generated files are newer than configure]) - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - AC_MSG_RESULT([done])]) -rm -f conftest.file -]) - -# Copyright (C) 2009-2013 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. - -# AM_SILENT_RULES([DEFAULT]) -# -------------------------- -# Enable less verbose build rules; with the default set to DEFAULT -# ("yes" being less verbose, "no" or empty being verbose). -AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], [dnl -AS_HELP_STRING( - [--enable-silent-rules], - [less verbose build output (undo: "make V=1")]) -AS_HELP_STRING( - [--disable-silent-rules], - [verbose build output (undo: "make V=0")])dnl -]) -case $enable_silent_rules in @%:@ ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac -dnl -dnl A few 'make' implementations (e.g., NonStop OS and NextStep) -dnl do not support nested variable expansions. -dnl See automake bug#9928 and bug#10237. -am_make=${MAKE-make} -AC_CACHE_CHECK([whether $am_make supports nested variables], - [am_cv_make_support_nested_variables], - [if AS_ECHO([['TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi]) -if test $am_cv_make_support_nested_variables = yes; then - dnl Using '$V' instead of '$(V)' breaks IRIX make. - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AC_SUBST([AM_V])dnl -AM_SUBST_NOTMAKE([AM_V])dnl -AC_SUBST([AM_DEFAULT_V])dnl -AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl -AC_SUBST([AM_DEFAULT_VERBOSITY])dnl -AM_BACKSLASH='\' -AC_SUBST([AM_BACKSLASH])dnl -_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl -]) - -# Copyright (C) 2001-2013 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. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor 'install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in "make install-strip", and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006-2013 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. - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# -------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004-2013 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. - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of 'v7', 'ustar', or 'pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -# -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AC_SUBST([AMTAR], ['$${TAR-tar}']) - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' - -m4_if([$1], [v7], - [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], - - [m4_case([$1], - [ustar], - [# The POSIX 1988 'ustar' format is defined with fixed-size fields. - # There is notably a 21 bits limit for the UID and the GID. In fact, - # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 - # and bug#13588). - am_max_uid=2097151 # 2^21 - 1 - am_max_gid=$am_max_uid - # The $UID and $GID variables are not portable, so we need to resort - # to the POSIX-mandated id(1) utility. Errors in the 'id' calls - # below are definitely unexpected, so allow the users to see them - # (that is, avoid stderr redirection). - am_uid=`id -u || echo unknown` - am_gid=`id -g || echo unknown` - AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) - if test $am_uid -le $am_max_uid; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - _am_tools=none - fi - AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) - if test $am_gid -le $am_max_gid; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - _am_tools=none - fi], - - [pax], - [], - - [m4_fatal([Unknown tar format])]) - - AC_MSG_CHECKING([how to create a $1 tar archive]) - - # Go ahead even if we have the value already cached. We do so because we - # need to set the values for the 'am__tar' and 'am__untar' variables. - _am_tools=${am_cv_prog_tar_$1-$_am_tools} - - for _am_tool in $_am_tools; do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works. - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi - done - rm -rf conftest.dir - - AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) - AC_MSG_RESULT([$am_cv_prog_tar_$1])]) - -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/asmcfi.m4]) -m4_include([m4/ax_append_flag.m4]) -m4_include([m4/ax_cc_maxopt.m4]) -m4_include([m4/ax_cflags_warn_all.m4]) -m4_include([m4/ax_check_compile_flag.m4]) -m4_include([m4/ax_compiler_vendor.m4]) -m4_include([m4/ax_configure_args.m4]) -m4_include([m4/ax_enable_builddir.m4]) -m4_include([m4/ax_gcc_archflag.m4]) -m4_include([m4/ax_gcc_x86_cpuid.m4]) -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) -m4_include([acinclude.m4]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/compile b/ruby/ext/fiddle/libffi-3.2.1/compile deleted file mode 100755 index 531136b06..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/compile +++ /dev/null @@ -1,347 +0,0 @@ -#! /bin/sh -# Wrapper for compilers which do not understand '-c -o'. - -scriptversion=2012-10-14.11; # UTC - -# Copyright (C) 1999-2013 Free Software Foundation, Inc. -# Written by Tom Tromey . -# -# 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 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 . - -# 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. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -nl=' -' - -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent tools from complaining about whitespace usage. -IFS=" "" $nl" - -file_conv= - -# func_file_conv build_file lazy -# Convert a $build file to $host form and store it in $file -# Currently only supports Windows hosts. If the determined conversion -# type is listed in (the comma separated) LAZY, no conversion will -# take place. -func_file_conv () -{ - file=$1 - case $file in - / | /[!/]*) # absolute file, and not a UNC file - if test -z "$file_conv"; then - # lazily determine how to convert abs files - case `uname -s` in - MINGW*) - file_conv=mingw - ;; - CYGWIN*) - file_conv=cygwin - ;; - *) - file_conv=wine - ;; - esac - fi - case $file_conv/,$2, in - *,$file_conv,*) - ;; - mingw/*) - file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` - ;; - cygwin/*) - file=`cygpath -m "$file" || echo "$file"` - ;; - wine/*) - file=`winepath -w "$file" || echo "$file"` - ;; - esac - ;; - esac -} - -# func_cl_dashL linkdir -# Make cl look for libraries in LINKDIR -func_cl_dashL () -{ - func_file_conv "$1" - if test -z "$lib_path"; then - lib_path=$file - else - lib_path="$lib_path;$file" - fi - linker_opts="$linker_opts -LIBPATH:$file" -} - -# func_cl_dashl library -# Do a library search-path lookup for cl -func_cl_dashl () -{ - lib=$1 - found=no - save_IFS=$IFS - IFS=';' - for dir in $lib_path $LIB - do - IFS=$save_IFS - if $shared && test -f "$dir/$lib.dll.lib"; then - found=yes - lib=$dir/$lib.dll.lib - break - fi - if test -f "$dir/$lib.lib"; then - found=yes - lib=$dir/$lib.lib - break - fi - if test -f "$dir/lib$lib.a"; then - found=yes - lib=$dir/lib$lib.a - break - fi - done - IFS=$save_IFS - - if test "$found" != yes; then - lib=$lib.lib - fi -} - -# func_cl_wrapper cl arg... -# Adjust compile command to suit cl -func_cl_wrapper () -{ - # Assume a capable shell - lib_path= - shared=: - linker_opts= - for arg - do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as 'compile cc -o foo foo.c'. - eat=1 - case $2 in - *.o | *.[oO][bB][jJ]) - func_file_conv "$2" - set x "$@" -Fo"$file" - shift - ;; - *) - func_file_conv "$2" - set x "$@" -Fe"$file" - shift - ;; - esac - ;; - -I) - eat=1 - func_file_conv "$2" mingw - set x "$@" -I"$file" - shift - ;; - -I*) - func_file_conv "${1#-I}" mingw - set x "$@" -I"$file" - shift - ;; - -l) - eat=1 - func_cl_dashl "$2" - set x "$@" "$lib" - shift - ;; - -l*) - func_cl_dashl "${1#-l}" - set x "$@" "$lib" - shift - ;; - -L) - eat=1 - func_cl_dashL "$2" - ;; - -L*) - func_cl_dashL "${1#-L}" - ;; - -static) - shared=false - ;; - -Wl,*) - arg=${1#-Wl,} - save_ifs="$IFS"; IFS=',' - for flag in $arg; do - IFS="$save_ifs" - linker_opts="$linker_opts $flag" - done - IFS="$save_ifs" - ;; - -Xlinker) - eat=1 - linker_opts="$linker_opts $2" - ;; - -*) - set x "$@" "$1" - shift - ;; - *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) - func_file_conv "$1" - set x "$@" -Tp"$file" - shift - ;; - *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) - func_file_conv "$1" mingw - set x "$@" "$file" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift - done - if test -n "$linker_opts"; then - linker_opts="-link$linker_opts" - fi - exec "$@" $linker_opts - exit 1 -} - -eat= - -case $1 in - '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: compile [--help] [--version] PROGRAM [ARGS] - -Wrapper for compilers which do not understand '-c -o'. -Remove '-o dest.o' from ARGS, run PROGRAM with the remaining -arguments, and rename the output as expected. - -If you are trying to build a whole package this is not the -right script to run: please start by reading the file 'INSTALL'. - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "compile $scriptversion" - exit $? - ;; - cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) - func_cl_wrapper "$@" # Doesn't return... - ;; -esac - -ofile= -cfile= - -for arg -do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as 'compile cc -o foo foo.c'. - # So we strip '-o arg' only if arg is an object. - eat=1 - case $2 in - *.o | *.obj) - ofile=$2 - ;; - *) - set x "$@" -o "$2" - shift - ;; - esac - ;; - *.c) - cfile=$1 - set x "$@" "$1" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift -done - -if test -z "$ofile" || test -z "$cfile"; then - # If no '-o' option was seen then we might have been invoked from a - # pattern rule where we don't need one. That is ok -- this is a - # normal compilation that the losing compiler can handle. If no - # '.c' file was seen then we are probably linking. That is also - # ok. - exec "$@" -fi - -# Name of file we expect compiler to create. -cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` - -# Create the lock directory. -# Note: use '[/\\:.-]' here to ensure that we don't use the same name -# that we are using for the .o file. Also, base the name on the expected -# object file name, since that is what matters with a parallel build. -lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d -while true; do - if mkdir "$lockdir" >/dev/null 2>&1; then - break - fi - sleep 1 -done -# FIXME: race condition here if user kills between mkdir and trap. -trap "rmdir '$lockdir'; exit 1" 1 2 15 - -# Run the compile. -"$@" -ret=$? - -if test -f "$cofile"; then - test "$cofile" = "$ofile" || mv "$cofile" "$ofile" -elif test -f "${cofile}bj"; then - test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" -fi - -rmdir "$lockdir" -exit $ret - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/ruby/ext/fiddle/libffi-3.2.1/config.guess b/ruby/ext/fiddle/libffi-3.2.1/config.guess deleted file mode 100755 index b79252d6b..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/config.guess +++ /dev/null @@ -1,1558 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright 1992-2013 Free Software Foundation, Inc. - -timestamp='2013-06-10' - -# 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 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. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# 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. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). -# -# Originally written by Per Bothner. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD -# -# Please send patches with a ChangeLog entry to config-patches@gnu.org. - - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -case "${UNAME_SYSTEM}" in -Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu - - eval $set_cc_for_build - cat <<-EOF > $dummy.c - #include - #if defined(__UCLIBC__) - LIBC=uclibc - #elif defined(__dietlibc__) - LIBC=dietlibc - #else - LIBC=gnu - #endif - EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - ;; -esac - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:Bitrig:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - aarch64_be:Linux:*:*) - UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - else - if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_PCS_VFP - then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi - else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf - fi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; - crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; - frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } - ;; - or1k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - or32:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} - exit ;; - ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} - exit ;; - ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} - exit ;; - x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - x86_64:Haiku:*:*) - echo x86_64-unknown-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc - fi - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi - fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - exit ;; - NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; - x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx - exit ;; -esac - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/ruby/ext/fiddle/libffi-3.2.1/config.sub b/ruby/ext/fiddle/libffi-3.2.1/config.sub deleted file mode 100755 index c765b34b7..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/config.sub +++ /dev/null @@ -1,1788 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright 1992-2013 Free Software Foundation, Inc. - -timestamp='2013-04-24' - -# 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 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. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# 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. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). - - -# Please send patches with a ChangeLog entry to config-patches@gnu.org. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright 1992-2013 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | be32 | be64 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 \ - | or1k | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none - ;; - xscaleeb) - basic_machine=armeb-unknown - ;; - - xscaleel) - basic_machine=armel-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pyramid-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i386-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tile*) - basic_machine=$basic_machine-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* | -plan9* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - hexagon-*) - os=-elf - ;; - tic54x-*) - os=-coff - ;; - tic55x-*) - os=-coff - ;; - tic6x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or1k-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/ruby/ext/fiddle/libffi-3.2.1/configure b/ruby/ext/fiddle/libffi-3.2.1/configure deleted file mode 100755 index c6da4670a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/configure +++ /dev/null @@ -1,21768 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libffi 3.2.1. -# -# Report bugs to . -# -# -# 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. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 - - test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: http://github.com/atgreen/libffi/issues about your -$0: system, including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - -SHELL=${CONFIG_SHELL-/bin/sh} - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='libffi' -PACKAGE_TARNAME='libffi' -PACKAGE_VERSION='3.2.1' -PACKAGE_STRING='libffi 3.2.1' -PACKAGE_BUGREPORT='http://github.com/atgreen/libffi/issues' -PACKAGE_URL='' - -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -toolexeclibdir -toolexecdir -FFI_DEBUG_FALSE -FFI_DEBUG_TRUE -TARGETDIR -TARGET -FFI_EXEC_TRAMPOLINE_TABLE -FFI_EXEC_TRAMPOLINE_TABLE_FALSE -FFI_EXEC_TRAMPOLINE_TABLE_TRUE -sys_symbol_underscore -HAVE_LONG_DOUBLE_VARIANT -HAVE_LONG_DOUBLE -ALLOCA -XTENSA_FALSE -XTENSA_TRUE -VAX_FALSE -VAX_TRUE -TILE_FALSE -TILE_TRUE -PA64_HPUX_FALSE -PA64_HPUX_TRUE -PA_HPUX_FALSE -PA_HPUX_TRUE -PA_LINUX_FALSE -PA_LINUX_TRUE -SH64_FALSE -SH64_TRUE -SH_FALSE -SH_TRUE -X86_64_FALSE -X86_64_TRUE -S390_FALSE -S390_TRUE -FRV_FALSE -FRV_TRUE -LIBFFI_CRIS_FALSE -LIBFFI_CRIS_TRUE -AVR32_FALSE -AVR32_TRUE -ARM_FALSE -ARM_TRUE -ARC_FALSE -ARC_TRUE -AARCH64_FALSE -AARCH64_TRUE -POWERPC_FREEBSD_FALSE -POWERPC_FREEBSD_TRUE -POWERPC_DARWIN_FALSE -POWERPC_DARWIN_TRUE -POWERPC_AIX_FALSE -POWERPC_AIX_TRUE -POWERPC_FALSE -POWERPC_TRUE -OR1K_FALSE -OR1K_TRUE -NIOS2_FALSE -NIOS2_TRUE -MOXIE_FALSE -MOXIE_TRUE -METAG_FALSE -METAG_TRUE -MICROBLAZE_FALSE -MICROBLAZE_TRUE -M88K_FALSE -M88K_TRUE -M68K_FALSE -M68K_TRUE -M32R_FALSE -M32R_TRUE -IA64_FALSE -IA64_TRUE -ALPHA_FALSE -ALPHA_TRUE -X86_DARWIN64_FALSE -X86_DARWIN64_TRUE -X86_DARWIN32_FALSE -X86_DARWIN32_TRUE -X86_DARWIN_FALSE -X86_DARWIN_TRUE -X86_WIN64_FALSE -X86_WIN64_TRUE -X86_WIN32_FALSE -X86_WIN32_TRUE -X86_FREEBSD_FALSE -X86_FREEBSD_TRUE -X86_FALSE -X86_TRUE -SPARC_FALSE -SPARC_TRUE -BFIN_FALSE -BFIN_TRUE -MIPS_FALSE -MIPS_TRUE -AM_LTLDFLAGS -AM_RUNTESTFLAGS -TESTSUBDIR_FALSE -TESTSUBDIR_TRUE -MAINT -MAINTAINER_MODE_FALSE -MAINTAINER_MODE_TRUE -PRTDIAG -CXXCPP -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -MANIFEST_TOOL -RANLIB -ac_ct_AR -AR -DLLTOOL -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -LIBTOOL -am__fastdepCCAS_FALSE -am__fastdepCCAS_TRUE -CCASDEPMODE -CCASFLAGS -CCAS -am__fastdepCXX_FALSE -am__fastdepCXX_TRUE -CXXDEPMODE -ac_ct_CXX -CXXFLAGS -CXX -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -am__nodep -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -AM_DEFAULT_V -AM_V -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -ax_enable_builddir_sed -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_builddir -enable_silent_rules -enable_dependency_tracking -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -with_sysroot -enable_libtool_lock -enable_portable_binary -with_gcc_arch -enable_maintainer_mode -enable_pax_emutramp -enable_debug -enable_structs -enable_raw_api -enable_purify_safety -' - ac_precious_vars='build_alias -host_alias -target_alias -CCAS -CCASFLAGS -CPP -CPPFLAGS -CXXCPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures libffi 3.2.1 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/libffi] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of libffi 3.2.1:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-builddir disable automatic build in subdir of sources - - --enable-silent-rules less verbose build output (undo: "make V=1") - --disable-silent-rules verbose build output (undo: "make V=0") - --enable-dependency-tracking - do not reject slow dependency extractors - --disable-dependency-tracking - speeds up one-time build - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - --enable-portable-binary - disable compiler optimizations that would produce - unportable binaries - --enable-maintainer-mode - enable make rules and dependencies not useful (and - sometimes confusing) to the casual installer - --enable-pax_emutramp enable pax emulated trampolines, for we can't use PROT_EXEC - --enable-debug debugging mode - --disable-structs omit code for struct support - --disable-raw-api make the raw api unavailable - --enable-purify-safety purify-safe mode - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-sysroot=DIR Search for dependent libraries within DIR - (or the compiler's sysroot if not specified). - --with-gcc-arch= use architecture for gcc -march/-mtune, - instead of guessing - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CCAS assembler compiler command (defaults to CC) - CCASFLAGS assembler compiler flags (defaults to CFLAGS) - CPP C preprocessor - CXXCPP C++ preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -libffi configure 3.2.1 -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_cpp - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_link - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - echo >>conftest.val; read $3 &5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ------------------------------------------------------ ## -## Report this to http://github.com/atgreen/libffi/issues ## -## ------------------------------------------------------ ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_type -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by libffi $as_me 3.2.1, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_config_headers="$ac_config_headers fficonfig.h" - - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -target_alias=${target_alias-$host_alias} - -case "${host}" in - frv*-elf) - LDFLAGS=`echo $LDFLAGS | sed "s/\-B^ *libgloss\/frv\///"`\ -B`pwd`/../libgloss/frv/ - ;; -esac - - - # [$]@ is unsable in 2.60+ but earlier autoconf had no ac_configure_args - if test "${ac_configure_args+set}" != "set" ; then - ac_configure_args= - for ac_arg in ${1+"$@"}; do - ac_configure_args="$ac_configure_args '$ac_arg'" - done - fi - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - - -ax_enable_builddir="." -# Check whether --enable-builddir was given. -if test "${enable_builddir+set}" = set; then : - enableval=$enable_builddir; ax_enable_builddir="$enableval" -else - ax_enable_builddir="auto" -fi - -if test ".$ac_srcdir_defaulted" != ".no" ; then -if test ".$srcdir" = ".." ; then - if test -f config.status ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: toplevel srcdir already configured... skipping subdir build" >&5 -$as_echo "$as_me: toplevel srcdir already configured... skipping subdir build" >&6;} - else - test ".$ax_enable_builddir" = "." && ax_enable_builddir="." - test ".$ax_enable_builddir" = ".no" && ax_enable_builddir="." - test ".$TARGET" = "." && TARGET="$target" - test ".$ax_enable_builddir" = ".auto" && ax_enable_builddir="$TARGET" - if test ".$ax_enable_builddir" != ".." ; then # we know where to go and - as_dir=$ax_enable_builddir; as_fn_mkdir_p - echo __.$ax_enable_builddir.__ > $ax_enable_builddir/conftest.tmp - cd $ax_enable_builddir - if grep __.$ax_enable_builddir.__ conftest.tmp >/dev/null 2>/dev/null ; then - rm conftest.tmp - { $as_echo "$as_me:${as_lineno-$LINENO}: result: continue configure in default builddir \"./$ax_enable_builddir\"" >&5 -$as_echo "continue configure in default builddir \"./$ax_enable_builddir\"" >&6; } - else - as_fn_error $? "could not change to default builddir \"./$ax_enable_builddir\"" "$LINENO" 5 - fi - srcdir=`echo "$ax_enable_builddir" | - sed -e 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g;s,[/]$,,;'` - # going to restart from subdirectory location - test -f $srcdir/config.log && mv $srcdir/config.log . - test -f $srcdir/confdefs.h && mv $srcdir/confdefs.h . - test -f $srcdir/conftest.log && mv $srcdir/conftest.log . - test -f $srcdir/$cache_file && mv $srcdir/$cache_file . - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ....exec $SHELL $srcdir/$0 \"--srcdir=$srcdir\" \"--enable-builddir=$ax_enable_builddir\" ${1+\"$@\"}" >&5 -$as_echo "....exec $SHELL $srcdir/$0 \"--srcdir=$srcdir\" \"--enable-builddir=$ax_enable_builddir\" ${1+\"$@\"}" >&6; } - case "$0" in # restart - [\\/]* | ?:[\\/]*) # Asbolute name - eval $SHELL "'$0'" "'--srcdir=$srcdir'" "'--enable-builddir=$ax_enable_builddir'" $ac_configure_args ;; - *) eval $SHELL "'$srcdir/$0'" "'--srcdir=$srcdir'" "'--enable-builddir=$ax_enable_builddir'" $ac_configure_args ;; - esac ; exit $? - fi - fi -fi fi -test ".$ax_enable_builddir" = ".auto" && ax_enable_builddir="." -# Extract the first word of "gsed sed", so it can be a program name with args. -set dummy gsed sed; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ax_enable_builddir_sed+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ax_enable_builddir_sed in - [\\/]* | ?:[\\/]*) - ac_cv_path_ax_enable_builddir_sed="$ax_enable_builddir_sed" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ax_enable_builddir_sed="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_ax_enable_builddir_sed" && ac_cv_path_ax_enable_builddir_sed="sed" - ;; -esac -fi -ax_enable_builddir_sed=$ac_cv_path_ax_enable_builddir_sed -if test -n "$ax_enable_builddir_sed"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_enable_builddir_sed" >&5 -$as_echo "$ax_enable_builddir_sed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -ax_enable_builddir_auxdir="$am_aux_dir" -ac_config_commands="$ac_config_commands buildir" - - -am__api_version='1.13' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; -esac - -# Do 'set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - if test "$2" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi - -rm -f conftest.file - -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in # ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=1;; -esac -am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } -if test $am_cv_make_support_nested_variables = yes; then - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AM_BACKSLASH='\' - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='libffi' - VERSION='3.2.1' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# -# -mkdir_p='$(MKDIR_P)' - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AMTAR='$${TAR-tar}' - - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar pax cpio none' - -am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' - - - - - - - -# The same as in boehm-gc and libstdc++. Have to borrow it from there. -# We must force CC to /not/ be precious variables; otherwise -# the wrong, non-multilib-adjusted value will be used in multilibs. -# As a side effect, we have to subst CFLAGS ourselves. -# Also save and restore CFLAGS, since AC_PROG_CC will come up with -# defaults of its own if none are provided. - - - -save_CFLAGS=$CFLAGS -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CXX" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CXX_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - -CFLAGS=$save_CFLAGS - - - - - -# By default we simply use the C compiler to build assembly code. - -test "${CCAS+set}" = set || CCAS=$CC -test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS - - - -depcc="$CCAS" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CCAS_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CCAS_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CCAS_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } -CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then - am__fastdepCCAS_TRUE= - am__fastdepCCAS_FALSE='#' -else - am__fastdepCCAS_TRUE='#' - am__fastdepCCAS_FALSE= -fi - - -if test "x$CC" != xcc; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 -$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 -$as_echo_n "checking whether cc understands -c and -o together... " >&6; } -fi -set dummy $CC; ac_cc=`$as_echo "$2" | - sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -# Make sure it works both with $CC and with simple cc. -# We do the test twice because some compilers refuse to overwrite an -# existing .o file with -o, though they will create one. -ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' -rm -f conftest2.* -if { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && - test -f conftest2.$ac_objext && { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; -then - eval ac_cv_prog_cc_${ac_cc}_c_o=yes - if test "x$CC" != xcc; then - # Test first that cc exists at all. - if { ac_try='cc -c conftest.$ac_ext >&5' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' - rm -f conftest2.* - if { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && - test -f conftest2.$ac_objext && { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; - then - # cc works too. - : - else - # cc exists but doesn't like -o. - eval ac_cv_prog_cc_${ac_cc}_c_o=no - fi - fi - fi -else - eval ac_cv_prog_cc_${ac_cc}_c_o=no -fi -rm -f core conftest* - -fi -if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h - -fi - -# FIXME: we rely on the cache variable name because -# there is no other way. -set dummy $CC -am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o -if test "$am_t" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi - - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.4.2' -macro_revision='1.3337' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "" -} - -case "$ECHO" in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac - -fi - -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac - -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then - reload_cmds=false - fi - ;; - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -fi - -: ${AR=ar} -: ${AR_FLAGS=cru} - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } - -# Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : - withval=$with_sysroot; -else - with_sysroot=no -fi - - -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 -$as_echo "${with_sysroot}" >&6; } - as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 - ;; -esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. -set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MANIFEST_TOOL"; then - ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL -if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_MANIFEST_TOOL"; then - ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MANIFEST_TOOL"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL -if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_MANIFEST_TOOL" = x; then - MANIFEST_TOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL - fi -else - MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" -fi - -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&5 - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi - - - - - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&5 - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&5 - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - - -func_stripname_cnf () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname_cnf - - - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for lt_pkg in $withval; do - IFS="$lt_save_ifs" - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; - *) - lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - lt_prog_compiler_wl='-Xlinker ' - if test -n "$lt_prog_compiler_pic"; then - lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - *Sun\ F* | *Sun*Fortran*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Intel*\ [CF]*Compiler*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - *Portland\ Group*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } -lt_prog_compiler_pic=$lt_cv_prog_compiler_pic - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; - *\ \(GNU\ Binutils\)\ [3-9]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='${wl}--export-all-symbols' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs=yes - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - fi - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - always_export_symbols=yes - file_list_spec='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, )='true' - enable_shared_with_static_runtimes=yes - exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - old_postinstall_cmds='chmod 644 $oldlib' - postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - enable_shared_with_static_runtimes=yes - ;; - esac - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec='' - fi - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -b" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler__b=yes - fi - else - lt_cv_prog_compiler__b=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } - -if test x"$lt_cv_prog_compiler__b" = xyes; then - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -fi - - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo (void) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_irix_exported_symbol=yes -else - lt_cv_irix_exported_symbol=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test "$lt_cv_irix_exported_symbol" = yes; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([A-Za-z]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Add ABI-specific directories to the system library path. - sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -else - _lt_caught_CXX_error=yes -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -compiler_needs_object_CXX=no -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_direct_absolute_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -inherit_rpath_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -reload_flag_CXX=$reload_flag -reload_cmds_CXX=$reload_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - - # save warnings/boilerplate of simple test code - ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - - ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - compiler_CXX=$CC - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' - else - lt_prog_compiler_no_builtin_flag_CXX= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - ld_shlibs_CXX=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - file_list_spec_CXX='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec_CXX='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath__CXX -fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath__CXX -fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - fi - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_CXX=' ' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=yes - file_list_spec_CXX='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' - enable_shared_with_static_runtimes_CXX=yes - # Don't use ranlib - old_postinstall_cmds_CXX='chmod 644 $oldlib' - postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - - - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec_CXX='' - fi - link_all_deplibs_CXX=yes - allow_undefined_flag_CXX="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - if test "$lt_cv_apple_cc_single_mod" != "yes"; then - archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi - - else - ld_shlibs_CXX=no - fi - - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - ld_shlibs_CXX=no - ;; - - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - - gnu*) - ;; - - haiku*) - archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs_CXX=yes - ;; - - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - inherit_rpath_CXX=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [1-5].* | *pgcpp\ [1-5].*) - prelink_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - old_archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object_CXX=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - ld_shlibs_CXX=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - hardcode_direct_absolute_CXX=yes - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - ld_shlibs_CXX=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - case $host in - osf3*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - ;; - *) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - ;; - esac - - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ - '"$old_archive_cmds_CXX" - reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ - '"$reload_cmds_CXX" - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } - test "$ld_shlibs_CXX" = no && can_build_shared=no - - GCC_CXX="$GXX" - LD_CXX="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - # Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF - - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - compiler_lib_search_dirs_CXX= -if test -n "${compiler_lib_search_path_CXX}"; then - compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic_CXX='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix[4-9]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-qpic' - lt_prog_compiler_static_CXX='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } -lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_CXX=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_CXX=yes - fi - else - lt_cv_prog_compiler_static_works_CXX=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then - : -else - lt_prog_compiler_static_CXX= -fi - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - case $host_os in - aix[4-9]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - ;; - esac - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -with_gnu_ld_CXX=$with_gnu_ld - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc_CXX=no - else - lt_cv_archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } - archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Add ABI-specific directories to the system library path. - sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } - -if test "$hardcode_action_CXX" = relink || - test "$inherit_rpath_CXX" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - - -# Test for 64-bit build. -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 -$as_echo_n "checking size of size_t... " >&6; } -if ${ac_cv_sizeof_size_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_size_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (size_t) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_size_t=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 -$as_echo "$ac_cv_sizeof_size_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t -_ACEOF - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 -$as_echo_n "checking for C compiler vendor... " >&6; } -if ${ax_cv_c_compiler_vendor+:} false; then : - $as_echo_n "(cached) " >&6 -else - # note: don't check for gcc first since some other compilers define __GNUC__ - vendors="intel: __ICC,__ECC,__INTEL_COMPILER - ibm: __xlc__,__xlC__,__IBMC__,__IBMCPP__ - pathscale: __PATHCC__,__PATHSCALE__ - clang: __clang__ - gnu: __GNUC__ - sun: __SUNPRO_C,__SUNPRO_CC - hp: __HP_cc,__HP_aCC - dec: __DECC,__DECCXX,__DECC_VER,__DECCXX_VER - borland: __BORLANDC__,__TURBOC__ - comeau: __COMO__ - cray: _CRAYC - kai: __KCC - lcc: __LCC__ - sgi: __sgi,sgi - microsoft: _MSC_VER - metrowerks: __MWERKS__ - watcom: __WATCOMC__ - portland: __PGI - unknown: UNKNOWN" - for ventest in $vendors; do - case $ventest in - *:) vendor=$ventest; continue ;; - *) vencpp="defined("`echo $ventest | sed 's/,/) || defined(/g'`")" ;; - esac - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #if !($vencpp) - thisisanerror; - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done - ax_cv_c_compiler_vendor=`echo $vendor | cut -d: -f1` - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 -$as_echo "$ax_cv_c_compiler_vendor" >&6; } - - - - - - -# Check whether --enable-portable-binary was given. -if test "${enable_portable_binary+set}" = set; then : - enableval=$enable_portable_binary; acx_maxopt_portable=$enableval -else - acx_maxopt_portable=no -fi - - -# Try to determine "good" native compiler flags if none specified via CFLAGS -if test "$ac_test_CFLAGS" != "set"; then - CFLAGS="" - case $ax_cv_c_compiler_vendor in - dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" - if test "x$acx_maxopt_portable" = xno; then - CFLAGS="$CFLAGS -arch host" - fi;; - - sun) CFLAGS="-native -fast -xO5 -dalign" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS -xarch=generic" - fi;; - - hp) CFLAGS="+Oall +Optrs_ansi +DSnative" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS +DAportable" - fi;; - - ibm) if test "x$acx_maxopt_portable" = xno; then - xlc_opt="-qarch=auto -qtune=auto" - else - xlc_opt="-qtune=auto" - fi - as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$xlc_opt" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $xlc_opt" >&5 -$as_echo_n "checking whether C compiler accepts $xlc_opt... " >&6; } -if eval \${$as_CACHEVAR+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ax_check_save_flags=$CFLAGS - CFLAGS="$CFLAGS $xlc_opt" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_CACHEVAR=yes" -else - eval "$as_CACHEVAR=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_check_save_flags -fi -eval ac_res=\$$as_CACHEVAR - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then : - CFLAGS="-O3 -qansialias -w $xlc_opt" -else - CFLAGS="-O3 -qansialias -w" - echo "******************************************************" - echo "* You seem to have the IBM C compiler. It is *" - echo "* recommended for best performance that you use: *" - echo "* *" - echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" - echo "* ^^^ ^^^ *" - echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" - echo "* CPU you have. (Set the CFLAGS environment var. *" - echo "* and re-run configure.) For more info, man cc. *" - echo "******************************************************" -fi - - ;; - - intel) CFLAGS="-O3 -ansi_alias" - if test "x$acx_maxopt_portable" = xno; then - icc_archflag=unknown - icc_flags="" - case $host_cpu in - i686*|x86_64*) - # icc accepts gcc assembly syntax, so these should work: - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 -$as_echo_n "checking for x86 cpuid 0 output... " >&6; } -if ${ax_cv_gcc_x86_cpuid_0+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 -$as_echo_n "checking for x86 cpuid 1 output... " >&6; } -if ${ax_cv_gcc_x86_cpuid_1+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_1=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *6a?:*[234]:*:*|*6[789b]?:*:*:*) icc_flags="-xK";; - *f3[347]:*:*:*|*f41347:*:*:*) icc_flags="-xP -xN -xW -xK";; - *f??:*:*:*) icc_flags="-xN -xW -xK";; - esac ;; - esac ;; - esac - if test "x$icc_flags" != x; then - for flag in $icc_flags; do - as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -if eval \${$as_CACHEVAR+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ax_check_save_flags=$CFLAGS - CFLAGS="$CFLAGS $flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_CACHEVAR=yes" -else - eval "$as_CACHEVAR=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_check_save_flags -fi -eval ac_res=\$$as_CACHEVAR - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then : - icc_archflag=$flag; break -else - : -fi - - done - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icc architecture flag" >&5 -$as_echo_n "checking for icc architecture flag... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icc_archflag" >&5 -$as_echo "$icc_archflag" >&6; } - if test "x$icc_archflag" != xunknown; then - CFLAGS="$CFLAGS $icc_archflag" - fi - fi - ;; - - gnu) - # default optimization flags for gcc on all systems - CFLAGS="-O3 -fomit-frame-pointer" - - # -malign-double for x86 systems - # LIBFFI -- DON'T DO THIS - CHANGES ABI - # AX_CHECK_COMPILE_FLAG(-malign-double, CFLAGS="$CFLAGS -malign-double") - - # -fstrict-aliasing for gcc-2.95+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5 -$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; } -if ${ax_cv_check_cflags___fstrict_aliasing+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ax_check_save_flags=$CFLAGS - CFLAGS="$CFLAGS -fstrict-aliasing" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_check_cflags___fstrict_aliasing=yes -else - ax_cv_check_cflags___fstrict_aliasing=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_check_save_flags -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fstrict_aliasing" >&5 -$as_echo "$ax_cv_check_cflags___fstrict_aliasing" >&6; } -if test x"$ax_cv_check_cflags___fstrict_aliasing" = xyes; then : - CFLAGS="$CFLAGS -fstrict-aliasing" -else - : -fi - - - # note that we enable "unsafe" fp optimization with other compilers, too - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5 -$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; } -if ${ax_cv_check_cflags___ffast_math+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ax_check_save_flags=$CFLAGS - CFLAGS="$CFLAGS -ffast-math" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_check_cflags___ffast_math=yes -else - ax_cv_check_cflags___ffast_math=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_check_save_flags -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___ffast_math" >&5 -$as_echo "$ax_cv_check_cflags___ffast_math" >&6; } -if test x"$ax_cv_check_cflags___ffast_math" = xyes; then : - CFLAGS="$CFLAGS -ffast-math" -else - : -fi - - - - - - -# Check whether --with-gcc-arch was given. -if test "${with_gcc_arch+set}" = set; then : - withval=$with_gcc_arch; ax_gcc_arch=$withval -else - ax_gcc_arch=yes -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 -$as_echo_n "checking for gcc architecture flag... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } -if ${ax_cv_gcc_archflag+:} false; then : - $as_echo_n "(cached) " >&6 -else - -ax_cv_gcc_archflag="unknown" - -if test "$GCC" = yes; then - -if test "x$ax_gcc_arch" = xyes; then -ax_gcc_arch="" -if test "$cross_compiling" = no; then -case $host_cpu in - i[3456]86*|x86_64*) # use cpuid codes - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 -$as_echo_n "checking for x86 cpuid 0 output... " >&6; } -if ${ax_cv_gcc_x86_cpuid_0+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 -$as_echo_n "checking for x86 cpuid 1 output... " >&6; } -if ${ax_cv_gcc_x86_cpuid_1+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_1=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ax_cv_gcc_x86_cpuid_0 in - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *5[48]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; - *5??:*:*:*) ax_gcc_arch=pentium ;; - *0?6[3456]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *0?6a?:*[01]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *0?6a?:*[234]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *0?6[9de]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; - *0?6[78b]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *0?6f?:*:*:*|*1?66?:*:*:*) ax_gcc_arch="core2 pentium-m pentium3 pentiumpro" ;; - *1?6[7d]?:*:*:*) ax_gcc_arch="penryn core2 pentium-m pentium3 pentiumpro" ;; - *1?6[aef]?:*:*:*|*2?6[5cef]?:*:*:*) ax_gcc_arch="corei7 core2 pentium-m pentium3 pentiumpro" ;; - *1?6c?:*:*:*|*[23]?66?:*:*:*) ax_gcc_arch="atom core2 pentium-m pentium3 pentiumpro" ;; - *2?6[ad]?:*:*:*) ax_gcc_arch="corei7-avx corei7 core2 pentium-m pentium3 pentiumpro" ;; - *0?6??:*:*:*) ax_gcc_arch=pentiumpro ;; - *6??:*:*:*) ax_gcc_arch="core2 pentiumpro" ;; - ?000?f3[347]:*:*:*|?000?f41347:*:*:*|?000?f6?:*:*:*) - case $host_cpu in - x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; - *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; - esac ;; - ?000?f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; - esac ;; - *:68747541:*:*) # AMD - case $ax_cv_gcc_x86_cpuid_1 in - *5[67]?:*:*:*) ax_gcc_arch=k6 ;; - *5[8d]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; - *5[9]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; - *60?:*:*:*) ax_gcc_arch=k7 ;; - *6[12]?:*:*:*) ax_gcc_arch="athlon k7" ;; - *6[34]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; - *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; - *6[68a]?:*:*:*) - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0x80000006 output" >&5 -$as_echo_n "checking for x86 cpuid 0x80000006 output... " >&6; } -if ${ax_cv_gcc_x86_cpuid_0x80000006+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0x80000006=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0x80000006, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0x80000006=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0x80000006=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0x80000006" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0x80000006" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - # L2 cache size - case $ax_cv_gcc_x86_cpuid_0x80000006 in - *:*:*[1-9a-f]??????:*) # (L2 = ecx >> 16) >= 256 - ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; - *) ax_gcc_arch="athlon-4 athlon k7" ;; - esac ;; - ?00??f[4cef8b]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; - ?00??f5?:*:*:*) ax_gcc_arch="opteron k8" ;; - ?00??f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; - ?00??f??:*:*:*) ax_gcc_arch="k8" ;; - ?05??f??:*:*:*) ax_gcc_arch="btver1 amdfam10 k8" ;; - ?06??f??:*:*:*) ax_gcc_arch="bdver1 amdfam10 k8" ;; - *f??:*:*:*) ax_gcc_arch="amdfam10 k8" ;; - esac ;; - *:746e6543:*:*) # IDT - case $ax_cv_gcc_x86_cpuid_1 in - *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; - *58?:*:*:*) ax_gcc_arch=winchip2 ;; - *6[78]?:*:*:*) ax_gcc_arch=c3 ;; - *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; - esac ;; - esac - if test x"$ax_gcc_arch" = x; then # fallback - case $host_cpu in - i586*) ax_gcc_arch=pentium ;; - i686*) ax_gcc_arch=pentiumpro ;; - esac - fi - ;; - - sparc*) - # Extract the first word of "prtdiag", so it can be a program name with args. -set dummy prtdiag; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PRTDIAG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PRTDIAG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PRTDIAG="$PRTDIAG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PRTDIAG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_PRTDIAG" && ac_cv_path_PRTDIAG="prtdiag" - ;; -esac -fi -PRTDIAG=$ac_cv_path_PRTDIAG -if test -n "$PRTDIAG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRTDIAG" >&5 -$as_echo "$PRTDIAG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` - cputype=`echo "$cputype" | tr -d ' -' | sed 's/SPARCIIi/SPARCII/' | tr $as_cr_LETTERS $as_cr_letters` - case $cputype in - *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; - *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; - *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; - *supersparc*|*tms390z5[05]*) ax_gcc_arch="supersparc v8" ;; - *hypersparc*|*rt62[056]*) ax_gcc_arch="hypersparc v8" ;; - *cypress*) ax_gcc_arch=cypress ;; - esac ;; - - alphaev5) ax_gcc_arch=ev5 ;; - alphaev56) ax_gcc_arch=ev56 ;; - alphapca56) ax_gcc_arch="pca56 ev56" ;; - alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; - alphaev6) ax_gcc_arch=ev6 ;; - alphaev67) ax_gcc_arch=ev67 ;; - alphaev68) ax_gcc_arch="ev68 ev67" ;; - alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; - alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; - alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; - - powerpc*) - cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` - cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'` - case $cputype in - *750*) ax_gcc_arch="750 G3" ;; - *740[0-9]*) ax_gcc_arch="$cputype 7400 G4" ;; - *74[4-5][0-9]*) ax_gcc_arch="$cputype 7450 G4" ;; - *74[0-9][0-9]*) ax_gcc_arch="$cputype G4" ;; - *970*) ax_gcc_arch="970 G5 power4";; - *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; - *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; - 603ev|8240) ax_gcc_arch="$cputype 603e 603";; - *) ax_gcc_arch=$cputype ;; - esac - ax_gcc_arch="$ax_gcc_arch powerpc" - ;; -esac -fi # not cross-compiling -fi # guess arch - -if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then -for arch in $ax_gcc_arch; do - if test "x$acx_maxopt_portable" = xyes; then # if we require portable code - flags="-mtune=$arch" - # -mcpu=$arch and m$arch generate nonportable code on every arch except - # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. - case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac - else - flags="-march=$arch -mcpu=$arch -m$arch" - fi - for flag in $flags; do - as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -if eval \${$as_CACHEVAR+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ax_check_save_flags=$CFLAGS - CFLAGS="$CFLAGS $flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_CACHEVAR=yes" -else - eval "$as_CACHEVAR=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_check_save_flags -fi -eval ac_res=\$$as_CACHEVAR - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then : - ax_cv_gcc_archflag=$flag; break -else - : -fi - - done - test "x$ax_cv_gcc_archflag" = xunknown || break -done -fi - -fi # $GCC=yes - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 -$as_echo_n "checking for gcc architecture flag... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_archflag" >&5 -$as_echo "$ax_cv_gcc_archflag" >&6; } -if test "x$ax_cv_gcc_archflag" = xunknown; then - : -else - CFLAGS="$CFLAGS $ax_cv_gcc_archflag" -fi - - ;; - esac - - if test -z "$CFLAGS"; then - echo "" - echo "********************************************************" - echo "* WARNING: Don't know the best CFLAGS for this system *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" - echo "********************************************************" - echo "" - CFLAGS="-O3" - fi - - as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$CFLAGS" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 -$as_echo_n "checking whether C compiler accepts $CFLAGS... " >&6; } -if eval \${$as_CACHEVAR+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ax_check_save_flags=$CFLAGS - CFLAGS="$CFLAGS $CFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_CACHEVAR=yes" -else - eval "$as_CACHEVAR=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_check_save_flags -fi -eval ac_res=\$$as_CACHEVAR - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then : - : -else - - echo "" - echo "********************************************************" - echo "* WARNING: The guessed CFLAGS don't seem to work with *" - echo "* your compiler. *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "********************************************************" - echo "" - CFLAGS="" - -fi - - -fi - -# The AX_CFLAGS_WARN_ALL macro doesn't currently work for sunpro -# compiler. -if test "$ax_cv_c_compiler_vendor" != "sun"; then - if ${CFLAGS+:} false; then : - case " $CFLAGS " in - *" "*) - { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains "; } >&5 - (: CFLAGS already contains ) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - ;; - *) - { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS \""; } >&5 - (: CFLAGS="$CFLAGS ") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - CFLAGS="$CFLAGS " - ;; - esac -else - CFLAGS="" -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking CFLAGS for maximum warnings" >&5 -$as_echo_n "checking CFLAGS for maximum warnings... " >&6; } -if ${ac_cv_cflags_warn_all+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_cflags_warn_all="no, unknown" -ac_save_CFLAGS="$CFLAGS" -for ac_arg in "-warn all % -warn all" "-pedantic % -Wall" "-xstrconst % -v" "-std1 % -verbose -w0 -warnprotos" "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" "-ansi -ansiE % -fullwarn" "+ESlit % +w1" "-Xc % -pvctl,fullmsg" "-h conform % -h msglevel 2" # -do CFLAGS="$ac_save_CFLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_cflags_warn_all=`echo $ac_arg | sed -e 's,.*% *,,'` ; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -CFLAGS="$ac_save_CFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags_warn_all" >&5 -$as_echo "$ac_cv_cflags_warn_all" >&6; } - -case ".$ac_cv_cflags_warn_all" in - .ok|.ok,*) ;; - .|.no|.no,*) ;; - *) if ${CFLAGS+:} false; then : - case " $CFLAGS " in - *" $ac_cv_cflags_warn_all "*) - { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$ac_cv_cflags_warn_all"; } >&5 - (: CFLAGS already contains $ac_cv_cflags_warn_all) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - ;; - *) - { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS \$ac_cv_cflags_warn_all\""; } >&5 - (: CFLAGS="$CFLAGS $ac_cv_cflags_warn_all") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - CFLAGS="$CFLAGS $ac_cv_cflags_warn_all" - ;; - esac -else - CFLAGS="$ac_cv_cflags_warn_all" -fi - ;; -esac - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -fi - -if test "x$GCC" = "xyes"; then - CFLAGS="$CFLAGS -fexceptions" -fi - -cat > local.exp <&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - -for ac_header in sys/mman.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_MMAN_H 1 -_ACEOF - -fi - -done - -for ac_func in mmap mkostemp -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = xyes; then : - libffi_header_sys_mman_h=yes -else - libffi_header_sys_mman_h=no -fi - - -ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" -if test "x$ac_cv_func_mmap" = xyes; then : - libffi_func_mmap=yes -else - libffi_func_mmap=no -fi - -if test "$libffi_header_sys_mman_h" != yes \ - || test "$libffi_func_mmap" != yes; then - ac_cv_func_mmap_file=no - ac_cv_func_mmap_dev_zero=no - ac_cv_func_mmap_anon=no -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether read-only mmap of a plain file works" >&5 -$as_echo_n "checking whether read-only mmap of a plain file works... " >&6; } -if ${ac_cv_func_mmap_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Add a system to this blacklist if - # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a - # memory area containing the same data that you'd get if you applied - # read() to the same fd. The only system known to have a problem here - # is VMS, where text files have record structure. - case "$host_os" in - vms* | ultrix*) - ac_cv_func_mmap_file=no ;; - *) - ac_cv_func_mmap_file=yes;; - esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_file" >&5 -$as_echo "$ac_cv_func_mmap_file" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap from /dev/zero works" >&5 -$as_echo_n "checking whether mmap from /dev/zero works... " >&6; } -if ${ac_cv_func_mmap_dev_zero+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Add a system to this blacklist if it has mmap() but /dev/zero - # does not exist, or if mmapping /dev/zero does not give anonymous - # zeroed pages with both the following properties: - # 1. If you map N consecutive pages in with one call, and then - # unmap any subset of those pages, the pages that were not - # explicitly unmapped remain accessible. - # 2. If you map two adjacent blocks of memory and then unmap them - # both at once, they must both go away. - # Systems known to be in this category are Windows (all variants), - # VMS, and Darwin. - case "$host_os" in - vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00) - ac_cv_func_mmap_dev_zero=no ;; - *) - ac_cv_func_mmap_dev_zero=yes;; - esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_dev_zero" >&5 -$as_echo "$ac_cv_func_mmap_dev_zero" >&6; } - - # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANON(YMOUS)" >&5 -$as_echo_n "checking for MAP_ANON(YMOUS)... " >&6; } -if ${ac_cv_decl_map_anon+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include - -#ifndef MAP_ANONYMOUS -#define MAP_ANONYMOUS MAP_ANON -#endif - -int -main () -{ -int n = MAP_ANONYMOUS; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_decl_map_anon=yes -else - ac_cv_decl_map_anon=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_map_anon" >&5 -$as_echo "$ac_cv_decl_map_anon" >&6; } - - if test $ac_cv_decl_map_anon = no; then - ac_cv_func_mmap_anon=no - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap with MAP_ANON(YMOUS) works" >&5 -$as_echo_n "checking whether mmap with MAP_ANON(YMOUS) works... " >&6; } -if ${ac_cv_func_mmap_anon+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Add a system to this blacklist if it has mmap() and MAP_ANON or - # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) - # doesn't give anonymous zeroed pages with the same properties listed - # above for use of /dev/zero. - # Systems known to be in this category are Windows, VMS, and SCO Unix. - case "$host_os" in - vms* | cygwin* | pe | mingw* | sco* | udk* ) - ac_cv_func_mmap_anon=no ;; - *) - ac_cv_func_mmap_anon=yes;; - esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_anon" >&5 -$as_echo "$ac_cv_func_mmap_anon" >&6; } - fi -fi - -if test $ac_cv_func_mmap_file = yes; then - -$as_echo "#define HAVE_MMAP_FILE 1" >>confdefs.h - -fi -if test $ac_cv_func_mmap_dev_zero = yes; then - -$as_echo "#define HAVE_MMAP_DEV_ZERO 1" >>confdefs.h - -fi -if test $ac_cv_func_mmap_anon = yes; then - -$as_echo "#define HAVE_MMAP_ANON 1" >>confdefs.h - -fi - - - if test -d $srcdir/testsuite; then - TESTSUBDIR_TRUE= - TESTSUBDIR_FALSE='#' -else - TESTSUBDIR_TRUE='#' - TESTSUBDIR_FALSE= -fi - - -TARGETDIR="unknown" -HAVE_LONG_DOUBLE_VARIANT=0 -case "$host" in - aarch64*-*-*) - TARGET=AARCH64; TARGETDIR=aarch64 - ;; - - alpha*-*-*) - TARGET=ALPHA; TARGETDIR=alpha; - # Support 128-bit long double, changeable via command-line switch. - HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' - ;; - - arc*-*-*) - TARGET=ARC; TARGETDIR=arc - ;; - - arm*-*-*) - TARGET=ARM; TARGETDIR=arm - ;; - - amd64-*-freebsd* | amd64-*-openbsd*) - TARGET=X86_64; TARGETDIR=x86 - ;; - - amd64-*-freebsd*) - TARGET=X86_64; TARGETDIR=x86 - ;; - - amd64-*-freebsd*) - TARGET=X86_64; TARGETDIR=x86 - ;; - - avr32*-*-*) - TARGET=AVR32; TARGETDIR=avr32 - ;; - - bfin*) - TARGET=BFIN; TARGETDIR=bfin - ;; - - cris-*-*) - TARGET=LIBFFI_CRIS; TARGETDIR=cris - ;; - - frv-*-*) - TARGET=FRV; TARGETDIR=frv - ;; - - hppa*-*-linux* | parisc*-*-linux* | hppa*-*-openbsd*) - TARGET=PA_LINUX; TARGETDIR=pa - ;; - hppa*64-*-hpux*) - TARGET=PA64_HPUX; TARGETDIR=pa - ;; - hppa*-*-hpux*) - TARGET=PA_HPUX; TARGETDIR=pa - ;; - - i?86-*-freebsd* | i?86-*-openbsd*) - TARGET=X86_FREEBSD; TARGETDIR=x86 - ;; - i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2* | i?86-*-interix*) - TARGET=X86_WIN32; TARGETDIR=x86 - # All mingw/cygwin/win32 builds require -no-undefined for sharedlib. - # We must also check with_cross_host to decide if this is a native - # or cross-build and select where to install dlls appropriately. - if test -n "$with_cross_host" && - test x"$with_cross_host" != x"no"; then - AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"'; - else - AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"'; - fi - ;; - i?86-*-darwin*) - TARGET=X86_DARWIN; TARGETDIR=x86 - ;; - i?86-*-solaris2.1[0-9]*) - TARGETDIR=x86 - if test $ac_cv_sizeof_size_t = 4; then - TARGET=X86; - else - TARGET=X86_64; - fi - ;; - - x86_64-*-darwin*) - TARGET=X86_DARWIN; TARGETDIR=x86 - ;; - - x86_64-*-cygwin* | x86_64-*-mingw*) - TARGET=X86_WIN64; TARGETDIR=x86 - # All mingw/cygwin/win32 builds require -no-undefined for sharedlib. - # We must also check with_cross_host to decide if this is a native - # or cross-build and select where to install dlls appropriately. - if test -n "$with_cross_host" && - test x"$with_cross_host" != x"no"; then - AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"'; - else - AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"'; - fi - ;; - - i?86-*-* | x86_64-*-*) - TARGETDIR=x86 - if test $ac_cv_sizeof_size_t = 4; then - case "$host" in - *-gnux32) - TARGET=X86_64 - ;; - *) - TARGET=X86 - ;; - esac - else - TARGET=X86_64; - fi - ;; - - ia64*-*-*) - TARGET=IA64; TARGETDIR=ia64 - ;; - - m32r*-*-*) - TARGET=M32R; TARGETDIR=m32r - ;; - - m68k-*-*) - TARGET=M68K; TARGETDIR=m68k - ;; - - m88k-*-*) - TARGET=M88K; TARGETDIR=m88k - ;; - - microblaze*-*-*) - TARGET=MICROBLAZE; TARGETDIR=microblaze - ;; - - moxie-*-*) - TARGET=MOXIE; TARGETDIR=moxie - ;; - - metag-*-*) - TARGET=METAG; TARGETDIR=metag - ;; - - mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*) - TARGET=MIPS; TARGETDIR=mips - ;; - mips*-*linux* | mips*-*-openbsd*) - # Support 128-bit long double for NewABI. - HAVE_LONG_DOUBLE='defined(__mips64)' - TARGET=MIPS; TARGETDIR=mips - ;; - - nios2*-linux*) - TARGET=NIOS2; TARGETDIR=nios2 - ;; - - or1k*-linux*) - TARGET=OR1K; TARGETDIR=or1k - ;; - - powerpc*-*-linux* | powerpc-*-sysv*) - TARGET=POWERPC; TARGETDIR=powerpc - HAVE_LONG_DOUBLE_VARIANT=1 - ;; - powerpc-*-amigaos*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc-*-beos*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc-*-darwin* | powerpc64-*-darwin*) - TARGET=POWERPC_DARWIN; TARGETDIR=powerpc - ;; - powerpc-*-aix* | rs6000-*-aix*) - TARGET=POWERPC_AIX; TARGETDIR=powerpc - ;; - powerpc-*-freebsd* | powerpc-*-openbsd*) - TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc - HAVE_LONG_DOUBLE_VARIANT=1 - ;; - powerpc64-*-freebsd*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc*-*-rtems*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - - s390-*-* | s390x-*-*) - TARGET=S390; TARGETDIR=s390 - ;; - - sh-*-* | sh[34]*-*-*) - TARGET=SH; TARGETDIR=sh - ;; - sh64-*-* | sh5*-*-*) - TARGET=SH64; TARGETDIR=sh64 - ;; - - sparc*-*-*) - TARGET=SPARC; TARGETDIR=sparc - ;; - - tile*-*) - TARGET=TILE; TARGETDIR=tile - ;; - - vax-*-*) - TARGET=VAX; TARGETDIR=vax - ;; - - xtensa*-*) - TARGET=XTENSA; TARGETDIR=xtensa - ;; - -esac - - - - -if test $TARGETDIR = unknown; then - as_fn_error $? "\"libffi has not been ported to $host.\"" "$LINENO" 5 -fi - - if test x$TARGET = xMIPS; then - MIPS_TRUE= - MIPS_FALSE='#' -else - MIPS_TRUE='#' - MIPS_FALSE= -fi - - if test x$TARGET = xBFIN; then - BFIN_TRUE= - BFIN_FALSE='#' -else - BFIN_TRUE='#' - BFIN_FALSE= -fi - - if test x$TARGET = xSPARC; then - SPARC_TRUE= - SPARC_FALSE='#' -else - SPARC_TRUE='#' - SPARC_FALSE= -fi - - if test x$TARGET = xX86; then - X86_TRUE= - X86_FALSE='#' -else - X86_TRUE='#' - X86_FALSE= -fi - - if test x$TARGET = xX86_FREEBSD; then - X86_FREEBSD_TRUE= - X86_FREEBSD_FALSE='#' -else - X86_FREEBSD_TRUE='#' - X86_FREEBSD_FALSE= -fi - - if test x$TARGET = xX86_WIN32; then - X86_WIN32_TRUE= - X86_WIN32_FALSE='#' -else - X86_WIN32_TRUE='#' - X86_WIN32_FALSE= -fi - - if test x$TARGET = xX86_WIN64; then - X86_WIN64_TRUE= - X86_WIN64_FALSE='#' -else - X86_WIN64_TRUE='#' - X86_WIN64_FALSE= -fi - - if test x$TARGET = xX86_DARWIN; then - X86_DARWIN_TRUE= - X86_DARWIN_FALSE='#' -else - X86_DARWIN_TRUE='#' - X86_DARWIN_FALSE= -fi - - if test x$TARGET = xX86_DARWIN && test $ac_cv_sizeof_size_t = 4; then - X86_DARWIN32_TRUE= - X86_DARWIN32_FALSE='#' -else - X86_DARWIN32_TRUE='#' - X86_DARWIN32_FALSE= -fi - - if test x$TARGET = xX86_DARWIN && test $ac_cv_sizeof_size_t = 8; then - X86_DARWIN64_TRUE= - X86_DARWIN64_FALSE='#' -else - X86_DARWIN64_TRUE='#' - X86_DARWIN64_FALSE= -fi - - if test x$TARGET = xALPHA; then - ALPHA_TRUE= - ALPHA_FALSE='#' -else - ALPHA_TRUE='#' - ALPHA_FALSE= -fi - - if test x$TARGET = xIA64; then - IA64_TRUE= - IA64_FALSE='#' -else - IA64_TRUE='#' - IA64_FALSE= -fi - - if test x$TARGET = xM32R; then - M32R_TRUE= - M32R_FALSE='#' -else - M32R_TRUE='#' - M32R_FALSE= -fi - - if test x$TARGET = xM68K; then - M68K_TRUE= - M68K_FALSE='#' -else - M68K_TRUE='#' - M68K_FALSE= -fi - - if test x$TARGET = xM88K; then - M88K_TRUE= - M88K_FALSE='#' -else - M88K_TRUE='#' - M88K_FALSE= -fi - - if test x$TARGET = xMICROBLAZE; then - MICROBLAZE_TRUE= - MICROBLAZE_FALSE='#' -else - MICROBLAZE_TRUE='#' - MICROBLAZE_FALSE= -fi - - if test x$TARGET = xMETAG; then - METAG_TRUE= - METAG_FALSE='#' -else - METAG_TRUE='#' - METAG_FALSE= -fi - - if test x$TARGET = xMOXIE; then - MOXIE_TRUE= - MOXIE_FALSE='#' -else - MOXIE_TRUE='#' - MOXIE_FALSE= -fi - - if test x$TARGET = xNIOS2; then - NIOS2_TRUE= - NIOS2_FALSE='#' -else - NIOS2_TRUE='#' - NIOS2_FALSE= -fi - - if test x$TARGET = xOR1K; then - OR1K_TRUE= - OR1K_FALSE='#' -else - OR1K_TRUE='#' - OR1K_FALSE= -fi - - if test x$TARGET = xPOWERPC; then - POWERPC_TRUE= - POWERPC_FALSE='#' -else - POWERPC_TRUE='#' - POWERPC_FALSE= -fi - - if test x$TARGET = xPOWERPC_AIX; then - POWERPC_AIX_TRUE= - POWERPC_AIX_FALSE='#' -else - POWERPC_AIX_TRUE='#' - POWERPC_AIX_FALSE= -fi - - if test x$TARGET = xPOWERPC_DARWIN; then - POWERPC_DARWIN_TRUE= - POWERPC_DARWIN_FALSE='#' -else - POWERPC_DARWIN_TRUE='#' - POWERPC_DARWIN_FALSE= -fi - - if test x$TARGET = xPOWERPC_FREEBSD; then - POWERPC_FREEBSD_TRUE= - POWERPC_FREEBSD_FALSE='#' -else - POWERPC_FREEBSD_TRUE='#' - POWERPC_FREEBSD_FALSE= -fi - - if test x$TARGET = xAARCH64; then - AARCH64_TRUE= - AARCH64_FALSE='#' -else - AARCH64_TRUE='#' - AARCH64_FALSE= -fi - - if test x$TARGET = xARC; then - ARC_TRUE= - ARC_FALSE='#' -else - ARC_TRUE='#' - ARC_FALSE= -fi - - if test x$TARGET = xARM; then - ARM_TRUE= - ARM_FALSE='#' -else - ARM_TRUE='#' - ARM_FALSE= -fi - - if test x$TARGET = xAVR32; then - AVR32_TRUE= - AVR32_FALSE='#' -else - AVR32_TRUE='#' - AVR32_FALSE= -fi - - if test x$TARGET = xLIBFFI_CRIS; then - LIBFFI_CRIS_TRUE= - LIBFFI_CRIS_FALSE='#' -else - LIBFFI_CRIS_TRUE='#' - LIBFFI_CRIS_FALSE= -fi - - if test x$TARGET = xFRV; then - FRV_TRUE= - FRV_FALSE='#' -else - FRV_TRUE='#' - FRV_FALSE= -fi - - if test x$TARGET = xS390; then - S390_TRUE= - S390_FALSE='#' -else - S390_TRUE='#' - S390_FALSE= -fi - - if test x$TARGET = xX86_64; then - X86_64_TRUE= - X86_64_FALSE='#' -else - X86_64_TRUE='#' - X86_64_FALSE= -fi - - if test x$TARGET = xSH; then - SH_TRUE= - SH_FALSE='#' -else - SH_TRUE='#' - SH_FALSE= -fi - - if test x$TARGET = xSH64; then - SH64_TRUE= - SH64_FALSE='#' -else - SH64_TRUE='#' - SH64_FALSE= -fi - - if test x$TARGET = xPA_LINUX; then - PA_LINUX_TRUE= - PA_LINUX_FALSE='#' -else - PA_LINUX_TRUE='#' - PA_LINUX_FALSE= -fi - - if test x$TARGET = xPA_HPUX; then - PA_HPUX_TRUE= - PA_HPUX_FALSE='#' -else - PA_HPUX_TRUE='#' - PA_HPUX_FALSE= -fi - - if test x$TARGET = xPA64_HPUX; then - PA64_HPUX_TRUE= - PA64_HPUX_FALSE='#' -else - PA64_HPUX_TRUE='#' - PA64_HPUX_FALSE= -fi - - if test x$TARGET = xTILE; then - TILE_TRUE= - TILE_FALSE='#' -else - TILE_TRUE='#' - TILE_FALSE= -fi - - if test x$TARGET = xVAX; then - VAX_TRUE= - VAX_FALSE='#' -else - VAX_TRUE='#' - VAX_FALSE= -fi - - if test x$TARGET = xXTENSA; then - XTENSA_TRUE= - XTENSA_FALSE='#' -else - XTENSA_TRUE='#' - XTENSA_FALSE= -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -for ac_func in memcpy -do : - ac_fn_c_check_func "$LINENO" "memcpy" "ac_cv_func_memcpy" -if test "x$ac_cv_func_memcpy" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MEMCPY 1 -_ACEOF - -fi -done - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -$as_echo_n "checking for working alloca.h... " >&6; } -if ${ac_cv_working_alloca_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_working_alloca_h=yes -else - ac_cv_working_alloca_h=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 -$as_echo "$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then - -$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 -$as_echo_n "checking for alloca... " >&6; } -if ${ac_cv_func_alloca_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include -# define alloca _alloca -# else -# ifdef HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -void *alloca (size_t); -# endif -# endif -# endif -# endif -#endif - -int -main () -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_func_alloca_works=yes -else - ac_cv_func_alloca_works=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 -$as_echo "$ac_cv_func_alloca_works" >&6; } - -if test $ac_cv_func_alloca_works = yes; then - -$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h - -else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. - -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - -$as_echo "#define C_ALLOCA 1" >>confdefs.h - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 -$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } -if ${ac_cv_os_cray+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then : - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 -$as_echo "$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - - break -fi - - done -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 -$as_echo_n "checking stack direction for C alloca... " >&6; } -if ${ac_cv_c_stack_direction+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_c_stack_direction=0 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction (int *addr, int depth) -{ - int dir, dummy = 0; - if (! addr) - addr = &dummy; - *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; - dir = depth ? find_stack_direction (addr, depth - 1) : 0; - return dir + dummy; -} - -int -main (int argc, char **argv) -{ - return find_stack_direction (0, argc + !argv + 20) < 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_stack_direction=1 -else - ac_cv_c_stack_direction=-1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 -$as_echo "$ac_cv_c_stack_direction" >&6; } -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF - - -fi - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 -$as_echo_n "checking size of double... " >&6; } -if ${ac_cv_sizeof_double+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_double" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (double) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_double=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 -$as_echo "$ac_cv_sizeof_double" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_DOUBLE $ac_cv_sizeof_double -_ACEOF - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 -$as_echo_n "checking size of long double... " >&6; } -if ${ac_cv_sizeof_long_double+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long_double" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (long double) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_long_double=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 -$as_echo "$ac_cv_sizeof_long_double" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double -_ACEOF - - - -# Also AC_SUBST this variable for ffi.h. -if test -z "$HAVE_LONG_DOUBLE"; then - HAVE_LONG_DOUBLE=0 - if test $ac_cv_sizeof_long_double != 0; then - if test $HAVE_LONG_DOUBLE_VARIANT != 0; then - -$as_echo "#define HAVE_LONG_DOUBLE_VARIANT 1" >>confdefs.h - - HAVE_LONG_DOUBLE=1 - else - if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then - HAVE_LONG_DOUBLE=1 - -$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h - - fi - fi - fi -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if ${ac_cv_c_bigendian+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main () -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h -;; #( - no) - ;; #( - universal) - -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h - - ;; #( - *) - as_fn_error $? "unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .cfi pseudo-op support" >&5 -$as_echo_n "checking assembler .cfi pseudo-op support... " >&6; } -if ${gcc_cv_as_cfi_pseudo_op+:} false; then : - $as_echo_n "(cached) " >&6 -else - - gcc_cv_as_cfi_pseudo_op=unknown - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -asm (".cfi_startproc\n\t.cfi_endproc"); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gcc_cv_as_cfi_pseudo_op=yes -else - gcc_cv_as_cfi_pseudo_op=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_cfi_pseudo_op" >&5 -$as_echo "$gcc_cv_as_cfi_pseudo_op" >&6; } - if test "x$gcc_cv_as_cfi_pseudo_op" = xyes; then - -$as_echo "#define HAVE_AS_CFI_PSEUDO_OP 1" >>confdefs.h - - fi - - -if test x$TARGET = xSPARC; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler and linker support unaligned pc related relocs" >&5 -$as_echo_n "checking assembler and linker support unaligned pc related relocs... " >&6; } -if ${libffi_cv_as_sparc_ua_pcrel+:} false; then : - $as_echo_n "(cached) " >&6 -else - - save_CFLAGS="$CFLAGS" - save_LDFLAGS="$LDFLAGS" - CFLAGS="$CFLAGS -fpic" - LDFLAGS="$LDFLAGS -shared" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text"); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - libffi_cv_as_sparc_ua_pcrel=yes -else - libffi_cv_as_sparc_ua_pcrel=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS="$save_CFLAGS" - LDFLAGS="$save_LDFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_sparc_ua_pcrel" >&5 -$as_echo "$libffi_cv_as_sparc_ua_pcrel" >&6; } - if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then - -$as_echo "#define HAVE_AS_SPARC_UA_PCREL 1" >>confdefs.h - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .register pseudo-op support" >&5 -$as_echo_n "checking assembler .register pseudo-op support... " >&6; } -if ${libffi_cv_as_register_pseudo_op+:} false; then : - $as_echo_n "(cached) " >&6 -else - - libffi_cv_as_register_pseudo_op=unknown - # Check if we have .register - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -asm (".register %g2, #scratch"); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libffi_cv_as_register_pseudo_op=yes -else - libffi_cv_as_register_pseudo_op=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_register_pseudo_op" >&5 -$as_echo "$libffi_cv_as_register_pseudo_op" >&6; } - if test "x$libffi_cv_as_register_pseudo_op" = xyes; then - -$as_echo "#define HAVE_AS_REGISTER_PSEUDO_OP 1" >>confdefs.h - - fi -fi - -if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler supports pc related relocs" >&5 -$as_echo_n "checking assembler supports pc related relocs... " >&6; } -if ${libffi_cv_as_x86_pcrel+:} false; then : - $as_echo_n "(cached) " >&6 -else - - libffi_cv_as_x86_pcrel=no - echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s - if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then - libffi_cv_as_x86_pcrel=yes - fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_x86_pcrel" >&5 -$as_echo "$libffi_cv_as_x86_pcrel" >&6; } - if test "x$libffi_cv_as_x86_pcrel" = xyes; then - -$as_echo "#define HAVE_AS_X86_PCREL 1" >>confdefs.h - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .ascii pseudo-op support" >&5 -$as_echo_n "checking assembler .ascii pseudo-op support... " >&6; } -if ${libffi_cv_as_ascii_pseudo_op+:} false; then : - $as_echo_n "(cached) " >&6 -else - - libffi_cv_as_ascii_pseudo_op=unknown - # Check if we have .ascii - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -asm (".ascii \\"string\\""); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libffi_cv_as_ascii_pseudo_op=yes -else - libffi_cv_as_ascii_pseudo_op=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_ascii_pseudo_op" >&5 -$as_echo "$libffi_cv_as_ascii_pseudo_op" >&6; } - if test "x$libffi_cv_as_ascii_pseudo_op" = xyes; then - -$as_echo "#define HAVE_AS_ASCII_PSEUDO_OP 1" >>confdefs.h - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .string pseudo-op support" >&5 -$as_echo_n "checking assembler .string pseudo-op support... " >&6; } -if ${libffi_cv_as_string_pseudo_op+:} false; then : - $as_echo_n "(cached) " >&6 -else - - libffi_cv_as_string_pseudo_op=unknown - # Check if we have .string - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -asm (".string \\"string\\""); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libffi_cv_as_string_pseudo_op=yes -else - libffi_cv_as_string_pseudo_op=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_string_pseudo_op" >&5 -$as_echo "$libffi_cv_as_string_pseudo_op" >&6; } - if test "x$libffi_cv_as_string_pseudo_op" = xyes; then - -$as_echo "#define HAVE_AS_STRING_PSEUDO_OP 1" >>confdefs.h - - fi -fi - -# On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. -# Check whether --enable-pax_emutramp was given. -if test "${enable_pax_emutramp+set}" = set; then : - enableval=$enable_pax_emutramp; if test "$enable_pax_emutramp" = "yes"; then - -$as_echo "#define FFI_MMAP_EXEC_EMUTRAMP_PAX 1" >>confdefs.h - - fi -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _ prefix in compiled symbols" >&5 -$as_echo_n "checking for _ prefix in compiled symbols... " >&6; } -if ${lt_cv_sys_symbol_underscore+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_sys_symbol_underscore=no - cat > conftest.$ac_ext <<_LT_EOF -void nm_test_func(){} -int main(){nm_test_func;return 0;} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - ac_nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$ac_nlist"; then - # See whether the symbols have a leading underscore. - if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then - lt_cv_sys_symbol_underscore=yes - else - if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then - : - else - echo "configure: cannot find nm_test_func in $ac_nlist" >&5 - fi - fi - else - echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "configure: failed program was:" >&5 - cat conftest.c >&5 - fi - rm -rf conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_symbol_underscore" >&5 -$as_echo "$lt_cv_sys_symbol_underscore" >&6; } - sys_symbol_underscore=$lt_cv_sys_symbol_underscore - - -if test "x$sys_symbol_underscore" = xyes; then - -$as_echo "#define SYMBOL_UNDERSCORE 1" >>confdefs.h - -fi - -FFI_EXEC_TRAMPOLINE_TABLE=0 -case "$target" in - *arm*-apple-darwin*) - FFI_EXEC_TRAMPOLINE_TABLE=1 - -$as_echo "#define FFI_EXEC_TRAMPOLINE_TABLE 1" >>confdefs.h - - ;; - *-apple-darwin1* | *-*-freebsd* | *-*-kfreebsd* | *-*-openbsd* | *-pc-solaris*) - -$as_echo "#define FFI_MMAP_EXEC_WRIT 1" >>confdefs.h - - ;; -esac - if test x$FFI_EXEC_TRAMPOLINE_TABLE = x1; then - FFI_EXEC_TRAMPOLINE_TABLE_TRUE= - FFI_EXEC_TRAMPOLINE_TABLE_FALSE='#' -else - FFI_EXEC_TRAMPOLINE_TABLE_TRUE='#' - FFI_EXEC_TRAMPOLINE_TABLE_FALSE= -fi - - - -if test x$TARGET = xX86_64; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking toolchain supports unwind section type" >&5 -$as_echo_n "checking toolchain supports unwind section type... " >&6; } -if ${libffi_cv_as_x86_64_unwind_section_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat > conftest1.s << EOF -.text -.globl foo -foo: -jmp bar -.section .eh_frame,"a",@unwind -bar: -EOF - - cat > conftest2.c << EOF -extern void foo(); -int main(){foo();} -EOF - - libffi_cv_as_x86_64_unwind_section_type=no - # we ensure that we can compile _and_ link an assembly file containing an @unwind section - # since the compiler can support it and not the linker (ie old binutils) - if $CC -Wa,--fatal-warnings $CFLAGS -c conftest1.s > /dev/null 2>&1 && \ - $CC conftest2.c conftest1.o > /dev/null 2>&1 ; then - libffi_cv_as_x86_64_unwind_section_type=yes - fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_x86_64_unwind_section_type" >&5 -$as_echo "$libffi_cv_as_x86_64_unwind_section_type" >&6; } - if test "x$libffi_cv_as_x86_64_unwind_section_type" = xyes; then - -$as_echo "#define HAVE_AS_X86_64_UNWIND_SECTION_TYPE 1" >>confdefs.h - - fi -fi - -if test "x$GCC" = "xyes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether .eh_frame section should be read-only" >&5 -$as_echo_n "checking whether .eh_frame section should be read-only... " >&6; } -if ${libffi_cv_ro_eh_frame+:} false; then : - $as_echo_n "(cached) " >&6 -else - - libffi_cv_ro_eh_frame=no - echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c - if $CC $CFLAGS -c -fpic -fexceptions -o conftest.o conftest.c > /dev/null 2>&1; then - objdump -h conftest.o > conftest.dump 2>&1 - libffi_eh_frame_line=`grep -n eh_frame conftest.dump | cut -d: -f 1` - libffi_test_line=`expr $libffi_eh_frame_line + 1`p - sed -n $libffi_test_line conftest.dump > conftest.line - if grep READONLY conftest.line > /dev/null; then - libffi_cv_ro_eh_frame=yes - fi - fi - rm -f conftest.* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_ro_eh_frame" >&5 -$as_echo "$libffi_cv_ro_eh_frame" >&6; } - if test "x$libffi_cv_ro_eh_frame" = xyes; then - -$as_echo "#define HAVE_RO_EH_FRAME 1" >>confdefs.h - - -$as_echo "#define EH_FRAME_FLAGS \"a\"" >>confdefs.h - - else - -$as_echo "#define EH_FRAME_FLAGS \"aw\"" >>confdefs.h - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((visibility(\"hidden\")))" >&5 -$as_echo_n "checking for __attribute__((visibility(\"hidden\")))... " >&6; } -if ${libffi_cv_hidden_visibility_attribute+:} false; then : - $as_echo_n "(cached) " >&6 -else - - echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1 ; }' > conftest.c - libffi_cv_hidden_visibility_attribute=no - if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - if grep '\.hidden.*foo' conftest.s >/dev/null; then - libffi_cv_hidden_visibility_attribute=yes - fi - fi - rm -f conftest.* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_hidden_visibility_attribute" >&5 -$as_echo "$libffi_cv_hidden_visibility_attribute" >&6; } - if test $libffi_cv_hidden_visibility_attribute = yes; then - -$as_echo "#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1" >>confdefs.h - - fi -fi - - - - - - - - -# Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : - enableval=$enable_debug; if test "$enable_debug" = "yes"; then - -$as_echo "#define FFI_DEBUG 1" >>confdefs.h - - fi -fi - - if test "$enable_debug" = "yes"; then - FFI_DEBUG_TRUE= - FFI_DEBUG_FALSE='#' -else - FFI_DEBUG_TRUE='#' - FFI_DEBUG_FALSE= -fi - - -# Check whether --enable-structs was given. -if test "${enable_structs+set}" = set; then : - enableval=$enable_structs; if test "$enable_structs" = "no"; then - -$as_echo "#define FFI_NO_STRUCTS 1" >>confdefs.h - - fi -fi - - if test "$enable_debug" = "yes"; then - FFI_DEBUG_TRUE= - FFI_DEBUG_FALSE='#' -else - FFI_DEBUG_TRUE='#' - FFI_DEBUG_FALSE= -fi - - -# Check whether --enable-raw-api was given. -if test "${enable_raw_api+set}" = set; then : - enableval=$enable_raw_api; if test "$enable_raw_api" = "no"; then - -$as_echo "#define FFI_NO_RAW_API 1" >>confdefs.h - - fi -fi - - -# Check whether --enable-purify-safety was given. -if test "${enable_purify_safety+set}" = set; then : - enableval=$enable_purify_safety; if test "$enable_purify_safety" = "yes"; then - -$as_echo "#define USING_PURIFY 1" >>confdefs.h - - fi -fi - - -# These variables are only ever used when we cross-build to X86_WIN32. -# And we only support this with GCC, so... -if test "x$GCC" = "xyes"; then - if test -n "$with_cross_host" && - test x"$with_cross_host" != x"no"; then - toolexecdir="${exec_prefix}"/'$(target_alias)' - toolexeclibdir="${toolexecdir}"/lib - else - toolexecdir="${libdir}"/gcc-lib/'$(target_alias)' - toolexeclibdir="${libdir}" - fi - multi_os_directory=`$CC $CFLAGS -print-multi-os-directory` - case $multi_os_directory in - .) ;; # Avoid trailing /. - ../*) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; - esac - -else - toolexeclibdir="${libdir}" -fi - - -ac_config_commands="$ac_config_commands include" - -ac_config_commands="$ac_config_commands src" - - -ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h" - - -ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" - - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${TESTSUBDIR_TRUE}" && test -z "${TESTSUBDIR_FALSE}"; then - as_fn_error $? "conditional \"TESTSUBDIR\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${MIPS_TRUE}" && test -z "${MIPS_FALSE}"; then - as_fn_error $? "conditional \"MIPS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BFIN_TRUE}" && test -z "${BFIN_FALSE}"; then - as_fn_error $? "conditional \"BFIN\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${SPARC_TRUE}" && test -z "${SPARC_FALSE}"; then - as_fn_error $? "conditional \"SPARC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_TRUE}" && test -z "${X86_FALSE}"; then - as_fn_error $? "conditional \"X86\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_FREEBSD_TRUE}" && test -z "${X86_FREEBSD_FALSE}"; then - as_fn_error $? "conditional \"X86_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_WIN32_TRUE}" && test -z "${X86_WIN32_FALSE}"; then - as_fn_error $? "conditional \"X86_WIN32\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_WIN64_TRUE}" && test -z "${X86_WIN64_FALSE}"; then - as_fn_error $? "conditional \"X86_WIN64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_DARWIN_TRUE}" && test -z "${X86_DARWIN_FALSE}"; then - as_fn_error $? "conditional \"X86_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_DARWIN32_TRUE}" && test -z "${X86_DARWIN32_FALSE}"; then - as_fn_error $? "conditional \"X86_DARWIN32\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_DARWIN64_TRUE}" && test -z "${X86_DARWIN64_FALSE}"; then - as_fn_error $? "conditional \"X86_DARWIN64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${ALPHA_TRUE}" && test -z "${ALPHA_FALSE}"; then - as_fn_error $? "conditional \"ALPHA\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${IA64_TRUE}" && test -z "${IA64_FALSE}"; then - as_fn_error $? "conditional \"IA64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${M32R_TRUE}" && test -z "${M32R_FALSE}"; then - as_fn_error $? "conditional \"M32R\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${M68K_TRUE}" && test -z "${M68K_FALSE}"; then - as_fn_error $? "conditional \"M68K\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${M88K_TRUE}" && test -z "${M88K_FALSE}"; then - as_fn_error $? "conditional \"M88K\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${MICROBLAZE_TRUE}" && test -z "${MICROBLAZE_FALSE}"; then - as_fn_error $? "conditional \"MICROBLAZE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${METAG_TRUE}" && test -z "${METAG_FALSE}"; then - as_fn_error $? "conditional \"METAG\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${MOXIE_TRUE}" && test -z "${MOXIE_FALSE}"; then - as_fn_error $? "conditional \"MOXIE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${NIOS2_TRUE}" && test -z "${NIOS2_FALSE}"; then - as_fn_error $? "conditional \"NIOS2\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${OR1K_TRUE}" && test -z "${OR1K_FALSE}"; then - as_fn_error $? "conditional \"OR1K\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${POWERPC_TRUE}" && test -z "${POWERPC_FALSE}"; then - as_fn_error $? "conditional \"POWERPC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${POWERPC_AIX_TRUE}" && test -z "${POWERPC_AIX_FALSE}"; then - as_fn_error $? "conditional \"POWERPC_AIX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${POWERPC_DARWIN_TRUE}" && test -z "${POWERPC_DARWIN_FALSE}"; then - as_fn_error $? "conditional \"POWERPC_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${POWERPC_FREEBSD_TRUE}" && test -z "${POWERPC_FREEBSD_FALSE}"; then - as_fn_error $? "conditional \"POWERPC_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${AARCH64_TRUE}" && test -z "${AARCH64_FALSE}"; then - as_fn_error $? "conditional \"AARCH64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${ARC_TRUE}" && test -z "${ARC_FALSE}"; then - as_fn_error $? "conditional \"ARC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${ARM_TRUE}" && test -z "${ARM_FALSE}"; then - as_fn_error $? "conditional \"ARM\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${AVR32_TRUE}" && test -z "${AVR32_FALSE}"; then - as_fn_error $? "conditional \"AVR32\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBFFI_CRIS_TRUE}" && test -z "${LIBFFI_CRIS_FALSE}"; then - as_fn_error $? "conditional \"LIBFFI_CRIS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${FRV_TRUE}" && test -z "${FRV_FALSE}"; then - as_fn_error $? "conditional \"FRV\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${S390_TRUE}" && test -z "${S390_FALSE}"; then - as_fn_error $? "conditional \"S390\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_64_TRUE}" && test -z "${X86_64_FALSE}"; then - as_fn_error $? "conditional \"X86_64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${SH_TRUE}" && test -z "${SH_FALSE}"; then - as_fn_error $? "conditional \"SH\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${SH64_TRUE}" && test -z "${SH64_FALSE}"; then - as_fn_error $? "conditional \"SH64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${PA_LINUX_TRUE}" && test -z "${PA_LINUX_FALSE}"; then - as_fn_error $? "conditional \"PA_LINUX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${PA_HPUX_TRUE}" && test -z "${PA_HPUX_FALSE}"; then - as_fn_error $? "conditional \"PA_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${PA64_HPUX_TRUE}" && test -z "${PA64_HPUX_FALSE}"; then - as_fn_error $? "conditional \"PA64_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${TILE_TRUE}" && test -z "${TILE_FALSE}"; then - as_fn_error $? "conditional \"TILE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${VAX_TRUE}" && test -z "${VAX_FALSE}"; then - as_fn_error $? "conditional \"VAX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${XTENSA_TRUE}" && test -z "${XTENSA_FALSE}"; then - as_fn_error $? "conditional \"XTENSA\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -if test -z "${FFI_EXEC_TRAMPOLINE_TABLE_TRUE}" && test -z "${FFI_EXEC_TRAMPOLINE_TABLE_FALSE}"; then - as_fn_error $? "conditional \"FFI_EXEC_TRAMPOLINE_TABLE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${FFI_DEBUG_TRUE}" && test -z "${FFI_DEBUG_FALSE}"; then - as_fn_error $? "conditional \"FFI_DEBUG\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${FFI_DEBUG_TRUE}" && test -z "${FFI_DEBUG_FALSE}"; then - as_fn_error $? "conditional \"FFI_DEBUG\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by libffi $as_me 3.2.1, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_links="$ac_config_links" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration links: -$config_links - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -libffi config.status 3.2.1 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -ax_enable_builddir_srcdir="$srcdir" # $srcdir -ax_enable_builddir_host="$HOST" # $HOST / $host -ax_enable_builddir_version="$VERSION" # $VERSION -ax_enable_builddir_package="$PACKAGE" # $PACKAGE -ax_enable_builddir_auxdir="$ax_enable_builddir_auxdir" # $AUX -ax_enable_builddir_sed="$ax_enable_builddir_sed" # $SED -ax_enable_builddir="$ax_enable_builddir" # $SUB - -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' -macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' -enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' -enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' -pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' -SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' -ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' -PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' -host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' -host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' -host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' -build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' -build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' -build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' -SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' -Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' -GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' -EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' -FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' -LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' -NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' -LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' -ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' -exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' -lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' -lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' -lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' -reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' -file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' -want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' -sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' -AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' -archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' -STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' -RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' -lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' -CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' -compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' -GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' -nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' -lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' -objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' -need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' -MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' -LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' -OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' -libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' -module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' -postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' -need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' -version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' -runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' -libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' -soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' -install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' -finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' -old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' -striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' -predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' -postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' -predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' -postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' -LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' -reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' -reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' -compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' -GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' -archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' -module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' -with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' -no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' -inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' -link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' -always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' -exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' -include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' -prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' -postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' -file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' -predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' -postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' -predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' -postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in SHELL \ -ECHO \ -PATH_SEPARATOR \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -file_magic_glob \ -want_nocaseglob \ -DLLTOOL \ -sharedlib_from_linklib_cmd \ -AR \ -AR_FLAGS \ -archiver_list_spec \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -nm_file_list_spec \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_pic \ -lt_prog_compiler_wl \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -MANIFEST_TOOL \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_separator \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -install_override_mode \ -finish_eval \ -old_striplib \ -striplib \ -compiler_lib_search_dirs \ -predep_objects \ -postdep_objects \ -predeps \ -postdeps \ -compiler_lib_search_path \ -LD_CXX \ -reload_flag_CXX \ -compiler_CXX \ -lt_prog_compiler_no_builtin_flag_CXX \ -lt_prog_compiler_pic_CXX \ -lt_prog_compiler_wl_CXX \ -lt_prog_compiler_static_CXX \ -lt_cv_prog_compiler_c_o_CXX \ -export_dynamic_flag_spec_CXX \ -whole_archive_flag_spec_CXX \ -compiler_needs_object_CXX \ -with_gnu_ld_CXX \ -allow_undefined_flag_CXX \ -no_undefined_flag_CXX \ -hardcode_libdir_flag_spec_CXX \ -hardcode_libdir_separator_CXX \ -exclude_expsyms_CXX \ -include_expsyms_CXX \ -file_list_spec_CXX \ -compiler_lib_search_dirs_CXX \ -predep_objects_CXX \ -postdep_objects_CXX \ -predeps_CXX \ -postdeps_CXX \ -compiler_lib_search_path_CXX; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postlink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec \ -reload_cmds_CXX \ -old_archive_cmds_CXX \ -old_archive_from_new_cmds_CXX \ -old_archive_from_expsyms_cmds_CXX \ -archive_cmds_CXX \ -archive_expsym_cmds_CXX \ -module_cmds_CXX \ -module_expsym_cmds_CXX \ -export_symbols_cmds_CXX \ -prelink_cmds_CXX \ -postlink_cmds_CXX; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - - -TARGETDIR="$TARGETDIR" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "fficonfig.h") CONFIG_HEADERS="$CONFIG_HEADERS fficonfig.h" ;; - "buildir") CONFIG_COMMANDS="$CONFIG_COMMANDS buildir" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;; - "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;; - "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;; - "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; - "include/ffi.h") CONFIG_FILES="$CONFIG_FILES include/ffi.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; - "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; - "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - :L) - # - # CONFIG_LINK - # - - if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then - : - else - # Prefer the file from the source tree if names are identical. - if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then - ac_source=$srcdir/$ac_source - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 -$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} - - if test ! -r "$ac_source"; then - as_fn_error $? "$ac_source: file not found" "$LINENO" 5 - fi - rm -f "$ac_file" - - # Try a relative symlink, then a hard link, then a copy. - case $ac_source in - [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; - *) ac_rel_source=$ac_top_build_prefix$ac_source ;; - esac - ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || - ln "$ac_source" "$ac_file" 2>/dev/null || - cp -p "$ac_source" "$ac_file" || - as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 - fi - ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "buildir":C) ac_top_srcdir="$ax_enable_builddir_srcdir" - if test ".$ax_enable_builddir" = ".." ; then - if test -f "$top_srcdir/Makefile" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: skipping top_srcdir/Makefile - left untouched" >&5 -$as_echo "$as_me: skipping top_srcdir/Makefile - left untouched" >&6;} - else - { $as_echo "$as_me:${as_lineno-$LINENO}: skipping top_srcdir/Makefile - not created" >&5 -$as_echo "$as_me: skipping top_srcdir/Makefile - not created" >&6;} - fi - else - if test -f "$ac_top_srcdir/Makefile" ; then - a=`grep "^VERSION " "$ac_top_srcdir/Makefile"` ; b=`grep "^VERSION " Makefile` - test "$a" != "$b" && rm "$ac_top_srcdir/Makefile" - fi - if test -f "$ac_top_srcdir/Makefile" ; then - echo "$ac_top_srcdir/Makefile : $ac_top_srcdir/Makefile.in" > $tmp/conftemp.mk - echo " @ echo 'REMOVED,,,' >\$@" >> $tmp/conftemp.mk - eval "${MAKE-make} -f $tmp/conftemp.mk 2>/dev/null >/dev/null" - if grep '^REMOVED,,,' "$ac_top_srcdir/Makefile" >/dev/null - then rm $ac_top_srcdir/Makefile ; fi - cp $tmp/conftemp.mk $ac_top_srcdir/makefiles.mk~ ## DEBUGGING - fi - if test ! -f "$ac_top_srcdir/Makefile" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: create top_srcdir/Makefile guessed from local Makefile" >&5 -$as_echo "$as_me: create top_srcdir/Makefile guessed from local Makefile" >&6;} - x='`' ; cat >$tmp/conftemp.sed <<_EOF -/^\$/n -x -/^\$/bS -x -/\\\\\$/{H;d;} -{H;s/.*//;x;} -bM -:S -x -/\\\\\$/{h;d;} -{h;s/.*//;x;} -:M -s/\\(\\n\\) /\\1 /g -/^ /d -/^[ ]*[\\#]/d -/^VPATH *=/d -s/^srcdir *=.*/srcdir = ./ -s/^top_srcdir *=.*/top_srcdir = ./ -/[:=]/!d -/^\\./d -/ = /b -/ .= /b -/:/!b -s/:.*/:/ -s/ / /g -s/ \\([a-z][a-z-]*[a-zA-Z0-9]\\)\\([ :]\\)/ \\1 \\1-all\\2/g -s/^\\([a-z][a-z-]*[a-zA-Z0-9]\\)\\([ :]\\)/\\1 \\1-all\\2/ -s/ / /g -/^all all-all[ :]/i\\ -all-configured : all-all -s/ [a-zA-Z0-9-]*-all [a-zA-Z0-9-]*-all-all//g -/-all-all/d -a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh $ax_enable_builddir_auxdir/config.guess $x \\\\\\ - ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\ - ; use=$x basename "\$\@" -all $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$n * \$\@"; if test "\$\$n" -eq "0" ; then : \\\\\\ - ; BUILD=$x grep "^####.*|" Makefile |tail -1| sed -e 's/.*|//' $x ; fi \\\\\\ - ; test ".\$\$BUILD" = "." && BUILD="." \\\\\\ - ; test "\$\$use" = "\$\@" && BUILD=$x echo "\$\$BUILD" | tail -1 $x \\\\\\ - ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; (cd "\$\$i" && test ! -f configure && \$(MAKE) \$\$use) || exit; done -/dist-all *:/a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh $ax_enable_builddir_auxdir/config.guess $x \\\\\\ - ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\ - ; found=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).tar.*" \\\\\\ - ; if test "\$\$found" -eq "0" ; then : \\\\\\ - ; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\ - ; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; for f in \$\$i/\$(PACKAGE)-\$(VERSION).tar.* \\\\\\ - ; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done -/dist-[a-zA-Z0-9]*-all *:/a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh ./config.guess $x \\\\\\ - ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\ - ; found=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).*" \\\\\\ - ; if test "\$\$found" -eq "0" ; then : \\\\\\ - ; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\ - ; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; for f in \$\$i/\$(PACKAGE)-\$(VERSION).* \\\\\\ - ; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done -/distclean-all *:/a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh $ax_enable_builddir_auxdir/config.guess $x \\\\\\ - ; BUILD=$x grep "^#### .*|" Makefile | sed -e 's/.*|//' $x \\\\\\ - ; use=$x basename "\$\@" -all $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$n * \$\@ (all local builds)" \\\\\\ - ; test ".\$\$BUILD" = "." && BUILD="." \\\\\\ - ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; echo "# rm -r \$\$i"; done ; echo "# (sleep 3)" ; sleep 3 \\\\\\ - ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; echo "\$\$i" | grep "^/" > /dev/null && continue \\\\\\ - ; echo "\$\$i" | grep "^../" > /dev/null && continue \\\\\\ - ; echo "rm -r \$\$i"; (rm -r "\$\$i") ; done ; rm Makefile -_EOF - cp "$tmp/conftemp.sed" "$ac_top_srcdir/makefile.sed~" ## DEBUGGING - $ax_enable_builddir_sed -f $tmp/conftemp.sed Makefile >$ac_top_srcdir/Makefile - if test -f "$ac_top_srcdir/Makefile.mk" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: extend top_srcdir/Makefile with top_srcdir/Makefile.mk" >&5 -$as_echo "$as_me: extend top_srcdir/Makefile with top_srcdir/Makefile.mk" >&6;} - cat $ac_top_srcdir/Makefile.mk >>$ac_top_srcdir/Makefile - fi ; xxxx="####" - echo "$xxxx CONFIGURATIONS FOR TOPLEVEL MAKEFILE: " >>$ac_top_srcdir/Makefile - # sanity check - if grep '^; echo "MAKE ' $ac_top_srcdir/Makefile >/dev/null ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: buggy sed found - it deletes tab in \"a\" text parts" >&5 -$as_echo "$as_me: buggy sed found - it deletes tab in \"a\" text parts" >&6;} - $ax_enable_builddir_sed -e '/^@ HOST=/s/^/ /' -e '/^; /s/^/ /' $ac_top_srcdir/Makefile \ - >$ac_top_srcdir/Makefile~ - (test -s $ac_top_srcdir/Makefile~ && mv $ac_top_srcdir/Makefile~ $ac_top_srcdir/Makefile) 2>/dev/null - fi - else - xxxx="\\#\\#\\#\\#" - # echo "/^$xxxx *$ax_enable_builddir_host /d" >$tmp/conftemp.sed - echo "s!^$xxxx [^|]* | *$ax_enable_builddir *\$!$xxxx ...... $ax_enable_builddir!" >$tmp/conftemp.sed - $ax_enable_builddir_sed -f "$tmp/conftemp.sed" "$ac_top_srcdir/Makefile" >$tmp/mkfile.tmp - cp "$tmp/conftemp.sed" "$ac_top_srcdir/makefiles.sed~" ## DEBUGGING - cp "$tmp/mkfile.tmp" "$ac_top_srcdir/makefiles.out~" ## DEBUGGING - if cmp -s "$ac_top_srcdir/Makefile" "$tmp/mkfile.tmp" 2>/dev/null ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: keeping top_srcdir/Makefile from earlier configure" >&5 -$as_echo "$as_me: keeping top_srcdir/Makefile from earlier configure" >&6;} - rm "$tmp/mkfile.tmp" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: reusing top_srcdir/Makefile from earlier configure" >&5 -$as_echo "$as_me: reusing top_srcdir/Makefile from earlier configure" >&6;} - mv "$tmp/mkfile.tmp" "$ac_top_srcdir/Makefile" - fi - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: build in $ax_enable_builddir (HOST=$ax_enable_builddir_host)" >&5 -$as_echo "$as_me: build in $ax_enable_builddir (HOST=$ax_enable_builddir_host)" >&6;} - xxxx="####" - echo "$xxxx" "$ax_enable_builddir_host" "|$ax_enable_builddir" >>$ac_top_srcdir/Makefile - fi - ;; - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool 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 (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="CXX " - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# The PATH separator for the build system. -PATH_SEPARATOR=$lt_PATH_SEPARATOR - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# convert \$build file names to \$host format. -to_host_file_cmd=$lt_cv_to_host_file_cmd - -# convert \$build files to toolchain format. -to_tool_file_cmd=$lt_cv_to_tool_file_cmd - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob=$lt_file_magic_glob - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob=$lt_want_nocaseglob - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd - -# The archiver. -AR=$lt_AR - -# Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS - -# How to feed a file listing to the archiver. -archiver_list_spec=$lt_archiver_list_spec - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# Specify filename containing input files for \$NM. -nm_file_list_spec=$lt_nm_file_list_spec - -# The root where to search for dependent libraries,and in which our libraries should be installed. -lt_sysroot=$lt_sysroot - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Manifest tool. -MANIFEST_TOOL=$lt_MANIFEST_TOOL - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects -postdep_objects=$lt_postdep_objects -predeps=$lt_predeps -postdeps=$lt_postdeps - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - if test x"$xsi_shell" = xyes; then - sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ -func_dirname ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_basename ()$/,/^} # func_basename /c\ -func_basename ()\ -{\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ -func_dirname_and_basename ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ -func_stripname ()\ -{\ -\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ -\ # positional parameters, so assign one to ordinary parameter first.\ -\ func_stripname_result=${3}\ -\ func_stripname_result=${func_stripname_result#"${1}"}\ -\ func_stripname_result=${func_stripname_result%"${2}"}\ -} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ -func_split_long_opt ()\ -{\ -\ func_split_long_opt_name=${1%%=*}\ -\ func_split_long_opt_arg=${1#*=}\ -} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ -func_split_short_opt ()\ -{\ -\ func_split_short_opt_arg=${1#??}\ -\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ -} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ -func_lo2o ()\ -{\ -\ case ${1} in\ -\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ -\ *) func_lo2o_result=${1} ;;\ -\ esac\ -} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_xform ()$/,/^} # func_xform /c\ -func_xform ()\ -{\ - func_xform_result=${1%.*}.lo\ -} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_arith ()$/,/^} # func_arith /c\ -func_arith ()\ -{\ - func_arith_result=$(( $* ))\ -} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_len ()$/,/^} # func_len /c\ -func_len ()\ -{\ - func_len_result=${#1}\ -} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - -fi - -if test x"$lt_shell_append" = xyes; then - sed -e '/^func_append ()$/,/^} # func_append /c\ -func_append ()\ -{\ - eval "${1}+=\\${2}"\ -} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ -func_append_quoted ()\ -{\ -\ func_quote_for_eval "${2}"\ -\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ -} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 -$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} -fi - - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - - cat <<_LT_EOF >> "$ofile" - -# ### BEGIN LIBTOOL TAG CONFIG: CXX - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# How to create reloadable object files. -reload_flag=$lt_reload_flag_CXX -reload_cmds=$lt_reload_cmds_CXX - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds_CXX - -# A language specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU compiler? -with_gcc=$GCC_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object_CXX - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld_CXX - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute_CXX - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath_CXX - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds_CXX - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds_CXX - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec_CXX - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects_CXX -postdep_objects=$lt_postdep_objects_CXX -predeps=$lt_predeps_CXX -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# ### END LIBTOOL TAG CONFIG: CXX -_LT_EOF - - ;; - "include":C) test -d include || mkdir include ;; - "src":C) -test -d src || mkdir src -test -d src/$TARGETDIR || mkdir src/$TARGETDIR - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/ruby/ext/fiddle/libffi-3.2.1/configure.ac b/ruby/ext/fiddle/libffi-3.2.1/configure.ac deleted file mode 100644 index a7bf5eefa..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/configure.ac +++ /dev/null @@ -1,625 +0,0 @@ -dnl Process this with autoconf to create configure - -AC_PREREQ(2.68) - -AC_INIT([libffi], [3.2.1], [http://github.com/atgreen/libffi/issues]) -AC_CONFIG_HEADERS([fficonfig.h]) - -AC_CANONICAL_SYSTEM -target_alias=${target_alias-$host_alias} - -case "${host}" in - frv*-elf) - LDFLAGS=`echo $LDFLAGS | sed "s/\-B[^ ]*libgloss\/frv\///"`\ -B`pwd`/../libgloss/frv/ - ;; -esac - -AX_ENABLE_BUILDDIR - -AM_INIT_AUTOMAKE - -# The same as in boehm-gc and libstdc++. Have to borrow it from there. -# We must force CC to /not/ be precious variables; otherwise -# the wrong, non-multilib-adjusted value will be used in multilibs. -# As a side effect, we have to subst CFLAGS ourselves. -# Also save and restore CFLAGS, since AC_PROG_CC will come up with -# defaults of its own if none are provided. - -m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) -m4_define([_AC_ARG_VAR_PRECIOUS],[]) -save_CFLAGS=$CFLAGS -AC_PROG_CC -AC_PROG_CXX -CFLAGS=$save_CFLAGS -m4_undefine([_AC_ARG_VAR_PRECIOUS]) -m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) - -AC_SUBST(CFLAGS) - -AM_PROG_AS -AM_PROG_CC_C_O -AC_PROG_LIBTOOL -AC_CONFIG_MACRO_DIR([m4]) - -# Test for 64-bit build. -AC_CHECK_SIZEOF([size_t]) - -AX_COMPILER_VENDOR -AX_CC_MAXOPT -# The AX_CFLAGS_WARN_ALL macro doesn't currently work for sunpro -# compiler. -if test "$ax_cv_c_compiler_vendor" != "sun"; then - AX_CFLAGS_WARN_ALL -fi - -if test "x$GCC" = "xyes"; then - CFLAGS="$CFLAGS -fexceptions" -fi - -cat > local.exp < conftest.s - if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then - libffi_cv_as_x86_pcrel=yes - fi - ]) - if test "x$libffi_cv_as_x86_pcrel" = xyes; then - AC_DEFINE(HAVE_AS_X86_PCREL, 1, - [Define if your assembler supports PC relative relocs.]) - fi - - AC_CACHE_CHECK([assembler .ascii pseudo-op support], - libffi_cv_as_ascii_pseudo_op, [ - libffi_cv_as_ascii_pseudo_op=unknown - # Check if we have .ascii - AC_TRY_COMPILE(,[asm (".ascii \\"string\\"");], - [libffi_cv_as_ascii_pseudo_op=yes], - [libffi_cv_as_ascii_pseudo_op=no]) - ]) - if test "x$libffi_cv_as_ascii_pseudo_op" = xyes; then - AC_DEFINE(HAVE_AS_ASCII_PSEUDO_OP, 1, - [Define if your assembler supports .ascii.]) - fi - - AC_CACHE_CHECK([assembler .string pseudo-op support], - libffi_cv_as_string_pseudo_op, [ - libffi_cv_as_string_pseudo_op=unknown - # Check if we have .string - AC_TRY_COMPILE(,[asm (".string \\"string\\"");], - [libffi_cv_as_string_pseudo_op=yes], - [libffi_cv_as_string_pseudo_op=no]) - ]) - if test "x$libffi_cv_as_string_pseudo_op" = xyes; then - AC_DEFINE(HAVE_AS_STRING_PSEUDO_OP, 1, - [Define if your assembler supports .string.]) - fi -fi - -# On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. -AC_ARG_ENABLE(pax_emutramp, - [ --enable-pax_emutramp enable pax emulated trampolines, for we can't use PROT_EXEC], - if test "$enable_pax_emutramp" = "yes"; then - AC_DEFINE(FFI_MMAP_EXEC_EMUTRAMP_PAX, 1, - [Define this if you want to enable pax emulated trampolines]) - fi) - -LT_SYS_SYMBOL_USCORE -if test "x$sys_symbol_underscore" = xyes; then - AC_DEFINE(SYMBOL_UNDERSCORE, 1, [Define if symbols are underscored.]) -fi - -FFI_EXEC_TRAMPOLINE_TABLE=0 -case "$target" in - *arm*-apple-darwin*) - FFI_EXEC_TRAMPOLINE_TABLE=1 - AC_DEFINE(FFI_EXEC_TRAMPOLINE_TABLE, 1, - [Cannot use PROT_EXEC on this target, so, we revert to - alternative means]) - ;; - *-apple-darwin1* | *-*-freebsd* | *-*-kfreebsd* | *-*-openbsd* | *-pc-solaris*) - AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1, - [Cannot use malloc on this target, so, we revert to - alternative means]) - ;; -esac -AM_CONDITIONAL(FFI_EXEC_TRAMPOLINE_TABLE, test x$FFI_EXEC_TRAMPOLINE_TABLE = x1) -AC_SUBST(FFI_EXEC_TRAMPOLINE_TABLE) - -if test x$TARGET = xX86_64; then - AC_CACHE_CHECK([toolchain supports unwind section type], - libffi_cv_as_x86_64_unwind_section_type, [ - cat > conftest1.s << EOF -.text -.globl foo -foo: -jmp bar -.section .eh_frame,"a",@unwind -bar: -EOF - - cat > conftest2.c << EOF -extern void foo(); -int main(){foo();} -EOF - - libffi_cv_as_x86_64_unwind_section_type=no - # we ensure that we can compile _and_ link an assembly file containing an @unwind section - # since the compiler can support it and not the linker (ie old binutils) - if $CC -Wa,--fatal-warnings $CFLAGS -c conftest1.s > /dev/null 2>&1 && \ - $CC conftest2.c conftest1.o > /dev/null 2>&1 ; then - libffi_cv_as_x86_64_unwind_section_type=yes - fi - ]) - if test "x$libffi_cv_as_x86_64_unwind_section_type" = xyes; then - AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1, - [Define if your assembler supports unwind section type.]) - fi -fi - -if test "x$GCC" = "xyes"; then - AC_CACHE_CHECK([whether .eh_frame section should be read-only], - libffi_cv_ro_eh_frame, [ - libffi_cv_ro_eh_frame=no - echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c - if $CC $CFLAGS -c -fpic -fexceptions -o conftest.o conftest.c > /dev/null 2>&1; then - objdump -h conftest.o > conftest.dump 2>&1 - libffi_eh_frame_line=`grep -n eh_frame conftest.dump | cut -d: -f 1` - libffi_test_line=`expr $libffi_eh_frame_line + 1`p - sed -n $libffi_test_line conftest.dump > conftest.line - if grep READONLY conftest.line > /dev/null; then - libffi_cv_ro_eh_frame=yes - fi - fi - rm -f conftest.* - ]) - if test "x$libffi_cv_ro_eh_frame" = xyes; then - AC_DEFINE(HAVE_RO_EH_FRAME, 1, - [Define if .eh_frame sections should be read-only.]) - AC_DEFINE(EH_FRAME_FLAGS, "a", - [Define to the flags needed for the .section .eh_frame directive. ]) - else - AC_DEFINE(EH_FRAME_FLAGS, "aw", - [Define to the flags needed for the .section .eh_frame directive. ]) - fi - - AC_CACHE_CHECK([for __attribute__((visibility("hidden")))], - libffi_cv_hidden_visibility_attribute, [ - echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1 ; }' > conftest.c - libffi_cv_hidden_visibility_attribute=no - if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then - if grep '\.hidden.*foo' conftest.s >/dev/null; then - libffi_cv_hidden_visibility_attribute=yes - fi - fi - rm -f conftest.* - ]) - if test $libffi_cv_hidden_visibility_attribute = yes; then - AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1, - [Define if __attribute__((visibility("hidden"))) is supported.]) - fi -fi - -AH_BOTTOM([ -#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -#ifdef LIBFFI_ASM -#define FFI_HIDDEN(name) .hidden name -#else -#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -#endif -#else -#ifdef LIBFFI_ASM -#define FFI_HIDDEN(name) -#else -#define FFI_HIDDEN -#endif -#endif -]) - -AC_SUBST(TARGET) -AC_SUBST(TARGETDIR) - -AC_SUBST(SHELL) - -AC_ARG_ENABLE(debug, -[ --enable-debug debugging mode], - if test "$enable_debug" = "yes"; then - AC_DEFINE(FFI_DEBUG, 1, [Define this if you want extra debugging.]) - fi) -AM_CONDITIONAL(FFI_DEBUG, test "$enable_debug" = "yes") - -AC_ARG_ENABLE(structs, -[ --disable-structs omit code for struct support], - if test "$enable_structs" = "no"; then - AC_DEFINE(FFI_NO_STRUCTS, 1, [Define this if you do not want support for aggregate types.]) - fi) -AM_CONDITIONAL(FFI_DEBUG, test "$enable_debug" = "yes") - -AC_ARG_ENABLE(raw-api, -[ --disable-raw-api make the raw api unavailable], - if test "$enable_raw_api" = "no"; then - AC_DEFINE(FFI_NO_RAW_API, 1, [Define this if you do not want support for the raw API.]) - fi) - -AC_ARG_ENABLE(purify-safety, -[ --enable-purify-safety purify-safe mode], - if test "$enable_purify_safety" = "yes"; then - AC_DEFINE(USING_PURIFY, 1, [Define this if you are using Purify and want to suppress spurious messages.]) - fi) - -# These variables are only ever used when we cross-build to X86_WIN32. -# And we only support this with GCC, so... -if test "x$GCC" = "xyes"; then - if test -n "$with_cross_host" && - test x"$with_cross_host" != x"no"; then - toolexecdir="${exec_prefix}"/'$(target_alias)' - toolexeclibdir="${toolexecdir}"/lib - else - toolexecdir="${libdir}"/gcc-lib/'$(target_alias)' - toolexeclibdir="${libdir}" - fi - multi_os_directory=`$CC $CFLAGS -print-multi-os-directory` - case $multi_os_directory in - .) ;; # Avoid trailing /. - ../*) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; - esac - AC_SUBST(toolexecdir) -else - toolexeclibdir="${libdir}" -fi -AC_SUBST(toolexeclibdir) - -AC_CONFIG_COMMANDS(include, [test -d include || mkdir include]) -AC_CONFIG_COMMANDS(src, [ -test -d src || mkdir src -test -d src/$TARGETDIR || mkdir src/$TARGETDIR -], [TARGETDIR="$TARGETDIR"]) - -AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) - -AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) - -AC_OUTPUT diff --git a/ruby/ext/fiddle/libffi-3.2.1/depcomp b/ruby/ext/fiddle/libffi-3.2.1/depcomp deleted file mode 100755 index 4ebd5b3a2..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/depcomp +++ /dev/null @@ -1,791 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2013-05-30.07; # UTC - -# Copyright (C) 1999-2013 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 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 . - -# 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. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by 'PROGRAMS ARGS'. - object Object file output by 'PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputting dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -# Get the directory component of the given path, and save it in the -# global variables '$dir'. Note that this directory component will -# be either empty or ending with a '/' character. This is deliberate. -set_dir_from () -{ - case $1 in - */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; - *) dir=;; - esac -} - -# Get the suffix-stripped basename of the given path, and save it the -# global variable '$base'. -set_base_from () -{ - base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` -} - -# If no dependency file was actually created by the compiler invocation, -# we still have to create a dummy depfile, to avoid errors with the -# Makefile "include basename.Plo" scheme. -make_dummy_depfile () -{ - echo "#dummy" > "$depfile" -} - -# Factor out some common post-processing of the generated depfile. -# Requires the auxiliary global variable '$tmpdepfile' to be set. -aix_post_process_depfile () -{ - # If the compiler actually managed to produce a dependency file, - # post-process it. - if test -f "$tmpdepfile"; then - # Each line is of the form 'foo.o: dependency.h'. - # Do two passes, one to just change these to - # $object: dependency.h - # and one to simply output - # dependency.h: - # which is needed to avoid the deleted-header problem. - { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" - sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" - } > "$depfile" - rm -f "$tmpdepfile" - else - make_dummy_depfile - fi -} - -# A tabulation character. -tab=' ' -# A newline character. -nl=' -' -# Character ranges might be problematic outside the C locale. -# These definitions help. -upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ -lower=abcdefghijklmnopqrstuvwxyz -digits=0123456789 -alpha=${upper}${lower} - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Avoid interferences from the environment. -gccflag= dashmflag= - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -cygpath_u="cygpath -u -f -" -if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvisualcpp -fi - -if test "$depmode" = msvc7msys; then - # This is just like msvc7 but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvc7 -fi - -if test "$depmode" = xlc; then - # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. - gccflag=-qmakedep=gcc,-MF - depmode=gcc -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. -## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. -## (see the conditional assignment to $gccflag above). -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). Also, it might not be -## supported by the other compilers which use the 'gcc' depmode. -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The second -e expression handles DOS-style file names with drive - # letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the "deleted header file" problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. -## Some versions of gcc put a space before the ':'. On the theory -## that the space means something, we add a space to the output as -## well. hp depmode also adds that space, but also prefixes the VPATH -## to the object. Take care to not repeat it in the output. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like '#:fec' to the end of the - # dependency line. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ - | tr "$nl" ' ' >> "$depfile" - echo >> "$depfile" - # The second pass generates a dummy entry for each header file. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" - ;; - -xlc) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts '$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - set_dir_from "$object" - set_base_from "$object" - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - aix_post_process_depfile - ;; - -tcc) - # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 - # FIXME: That version still under development at the moment of writing. - # Make that this statement remains true also for stable, released - # versions. - # It will wrap lines (doesn't matter whether long or short) with a - # trailing '\', as in: - # - # foo.o : \ - # foo.c \ - # foo.h \ - # - # It will put a trailing '\' even on the last line, and will use leading - # spaces rather than leading tabs (at least since its commit 0394caf7 - # "Emit spaces for -MD"). - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. - # We have to change lines of the first kind to '$object: \'. - sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" - # And for each line of the second kind, we have to emit a 'dep.h:' - # dummy dependency, to avoid the deleted-header problem. - sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" - rm -f "$tmpdepfile" - ;; - -## The order of this option in the case statement is important, since the -## shell code in configure will try each of these formats in the order -## listed in this file. A plain '-MD' option would be understood by many -## compilers, so we must ensure this comes after the gcc and icc options. -pgcc) - # Portland's C compiler understands '-MD'. - # Will always output deps to 'file.d' where file is the root name of the - # source file under compilation, even if file resides in a subdirectory. - # The object file name does not affect the name of the '.d' file. - # pgcc 10.2 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using '\' : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - set_dir_from "$object" - # Use the source, not the object, to determine the base name, since - # that's sadly what pgcc will do too. - set_base_from "$source" - tmpdepfile=$base.d - - # For projects that build the same source file twice into different object - # files, the pgcc approach of using the *source* file root name can cause - # problems in parallel builds. Use a locking strategy to avoid stomping on - # the same $tmpdepfile. - lockdir=$base.d-lock - trap " - echo '$0: caught signal, cleaning up...' >&2 - rmdir '$lockdir' - exit 1 - " 1 2 13 15 - numtries=100 - i=$numtries - while test $i -gt 0; do - # mkdir is a portable test-and-set. - if mkdir "$lockdir" 2>/dev/null; then - # This process acquired the lock. - "$@" -MD - stat=$? - # Release the lock. - rmdir "$lockdir" - break - else - # If the lock is being held by a different process, wait - # until the winning process is done or we timeout. - while test -d "$lockdir" && test $i -gt 0; do - sleep 1 - i=`expr $i - 1` - done - fi - i=`expr $i - 1` - done - trap - 1 2 13 15 - if test $i -le 0; then - echo "$0: failed to acquire lock after $numtries attempts" >&2 - echo "$0: check lockdir '$lockdir'" >&2 - exit 1 - fi - - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - set_dir_from "$object" - set_base_from "$object" - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" - # Add 'dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in 'foo.d' instead, so we check for that too. - # Subdirectories are respected. - set_dir_from "$object" - set_base_from "$object" - - if test "$libtool" = yes; then - # Libtool generates 2 separate objects for the 2 libraries. These - # two compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir$base.o.d # libtool 1.5 - tmpdepfile2=$dir.libs/$base.o.d # Likewise. - tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - # Same post-processing that is required for AIX mode. - aix_post_process_depfile - ;; - -msvc7) - if test "$libtool" = yes; then - showIncludes=-Wc,-showIncludes - else - showIncludes=-showIncludes - fi - "$@" $showIncludes > "$tmpdepfile" - stat=$? - grep -v '^Note: including file: ' "$tmpdepfile" - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The first sed program below extracts the file names and escapes - # backslashes for cygpath. The second sed program outputs the file - # name when reading, but also accumulates all include files in the - # hold buffer in order to output them again at the end. This only - # works with sed implementations that can handle large buffers. - sed < "$tmpdepfile" -n ' -/^Note: including file: *\(.*\)/ { - s//\1/ - s/\\/\\\\/g - p -}' | $cygpath_u | sort -u | sed -n ' -s/ /\\ /g -s/\(.*\)/'"$tab"'\1 \\/p -s/.\(.*\) \\/\1:/ -H -$ { - s/.*/'"$tab"'/ - G - p -}' >> "$depfile" - echo >> "$depfile" # make sure the fragment doesn't end with a backslash - rm -f "$tmpdepfile" - ;; - -msvc7msys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove '-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for ':' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. - "$@" $dashmflag | - sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this sed invocation - # correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no eat=no - for arg - do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - if test $eat = yes; then - eat=no - continue - fi - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -arch) - eat=yes ;; - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix=`echo "$object" | sed 's/^.*\././'` - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - # makedepend may prepend the VPATH from the source file name to the object. - # No need to regex-escape $object, excess matching of '.' is harmless. - sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process the last invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed '1,2d' "$tmpdepfile" \ - | tr ' ' "$nl" \ - | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove '-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E \ - | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - | sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - IFS=" " - for arg - do - case "$arg" in - -o) - shift - ;; - $object) - shift - ;; - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E 2>/dev/null | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" - echo "$tab" >> "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvcmsys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/ruby/ext/fiddle/libffi-3.2.1/doc/libffi.info b/ruby/ext/fiddle/libffi-3.2.1/doc/libffi.info deleted file mode 100644 index c4d0f0cfb..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/doc/libffi.info +++ /dev/null @@ -1,765 +0,0 @@ -This is libffi.info, produced by makeinfo version 5.1 from libffi.texi. - -This manual is for Libffi, a portable foreign-function interface -library. - - Copyright (C) 2008, 2010, 2011 Red Hat, Inc. - - Permission is granted to copy, distribute and/or modify this - document 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. A copy of the license is included - in the section entitled "GNU General Public License". - -INFO-DIR-SECTION Development -START-INFO-DIR-ENTRY -* libffi: (libffi). Portable foreign-function interface library. -END-INFO-DIR-ENTRY - - -File: libffi.info, Node: Top, Next: Introduction, Up: (dir) - -libffi -****** - -This manual is for Libffi, a portable foreign-function interface -library. - - Copyright (C) 2008, 2010, 2011 Red Hat, Inc. - - Permission is granted to copy, distribute and/or modify this - document 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. A copy of the license is included - in the section entitled "GNU General Public License". - -* Menu: - -* Introduction:: What is libffi? -* Using libffi:: How to use libffi. -* Missing Features:: Things libffi can't do. -* Index:: Index. - - -File: libffi.info, Node: Introduction, Next: Using libffi, Prev: Top, Up: Top - -1 What is libffi? -***************** - -Compilers for high level languages generate code that follow certain -conventions. These conventions are necessary, in part, for separate -compilation to work. One such convention is the "calling convention". -The calling convention is a set of assumptions made by the compiler -about where function arguments will be found on entry to a function. A -calling convention also specifies where the return value for a function -is found. The calling convention is also sometimes called the "ABI" or -"Application Binary Interface". - - Some programs may not know at the time of compilation what arguments -are to be passed to a function. For instance, an interpreter may be -told at run-time about the number and types of arguments used to call a -given function. 'Libffi' can be used in such programs to provide a -bridge from the interpreter program to compiled code. - - The 'libffi' library provides a portable, high level programming -interface to various calling conventions. This allows a programmer to -call any function specified by a call interface description at run time. - - FFI stands for Foreign Function Interface. A foreign function -interface is the popular name for the interface that allows code written -in one language to call code written in another language. The 'libffi' -library really only provides the lowest, machine dependent layer of a -fully featured foreign function interface. A layer must exist above -'libffi' that handles type conversions for values passed between the two -languages. - - -File: libffi.info, Node: Using libffi, Next: Missing Features, Prev: Introduction, Up: Top - -2 Using libffi -************** - -* Menu: - -* The Basics:: The basic libffi API. -* Simple Example:: A simple example. -* Types:: libffi type descriptions. -* Multiple ABIs:: Different passing styles on one platform. -* The Closure API:: Writing a generic function. -* Closure Example:: A closure example. - - -File: libffi.info, Node: The Basics, Next: Simple Example, Up: Using libffi - -2.1 The Basics -============== - -'Libffi' assumes that you have a pointer to the function you wish to -call and that you know the number and types of arguments to pass it, as -well as the return type of the function. - - The first thing you must do is create an 'ffi_cif' object that -matches the signature of the function you wish to call. This is a -separate step because it is common to make multiple calls using a single -'ffi_cif'. The "cif" in 'ffi_cif' stands for Call InterFace. To -prepare a call interface object, use the function 'ffi_prep_cif'. - - -- Function: ffi_status ffi_prep_cif (ffi_cif *CIF, ffi_abi ABI, - unsigned int NARGS, ffi_type *RTYPE, ffi_type **ARGTYPES) - This initializes CIF according to the given parameters. - - ABI is the ABI to use; normally 'FFI_DEFAULT_ABI' is what you want. - *note Multiple ABIs:: for more information. - - NARGS is the number of arguments that this function accepts. - - RTYPE is a pointer to an 'ffi_type' structure that describes the - return type of the function. *Note Types::. - - ARGTYPES is a vector of 'ffi_type' pointers. ARGTYPES must have - NARGS elements. If NARGS is 0, this argument is ignored. - - 'ffi_prep_cif' returns a 'libffi' status code, of type - 'ffi_status'. This will be either 'FFI_OK' if everything worked - properly; 'FFI_BAD_TYPEDEF' if one of the 'ffi_type' objects is - incorrect; or 'FFI_BAD_ABI' if the ABI parameter is invalid. - - If the function being called is variadic (varargs) then -'ffi_prep_cif_var' must be used instead of 'ffi_prep_cif'. - - -- Function: ffi_status ffi_prep_cif_var (ffi_cif *CIF, ffi_abi varabi, - unsigned int NFIXEDARGS, unsigned int varntotalargs, ffi_type - *RTYPE, ffi_type **ARGTYPES) - This initializes CIF according to the given parameters for a call - to a variadic function. In general it's operation is the same as - for 'ffi_prep_cif' except that: - - NFIXEDARGS is the number of fixed arguments, prior to any variadic - arguments. It must be greater than zero. - - NTOTALARGS the total number of arguments, including variadic and - fixed arguments. - - Note that, different cif's must be prepped for calls to the same - function when different numbers of arguments are passed. - - Also note that a call to 'ffi_prep_cif_var' with - NFIXEDARGS=NOTOTALARGS is NOT equivalent to a call to - 'ffi_prep_cif'. - - To call a function using an initialized 'ffi_cif', use the 'ffi_call' -function: - - -- Function: void ffi_call (ffi_cif *CIF, void *FN, void *RVALUE, void - **AVALUES) - This calls the function FN according to the description given in - CIF. CIF must have already been prepared using 'ffi_prep_cif'. - - RVALUE is a pointer to a chunk of memory that will hold the result - of the function call. This must be large enough to hold the - result, no smaller than the system register size (generally 32 or - 64 bits), and must be suitably aligned; it is the caller's - responsibility to ensure this. If CIF declares that the function - returns 'void' (using 'ffi_type_void'), then RVALUE is ignored. - - AVALUES is a vector of 'void *' pointers that point to the memory - locations holding the argument values for a call. If CIF declares - that the function has no arguments (i.e., NARGS was 0), then - AVALUES is ignored. Note that argument values may be modified by - the callee (for instance, structs passed by value); the burden of - copying pass-by-value arguments is placed on the caller. - - -File: libffi.info, Node: Simple Example, Next: Types, Prev: The Basics, Up: Using libffi - -2.2 Simple Example -================== - -Here is a trivial example that calls 'puts' a few times. - - #include - #include - - int main() - { - ffi_cif cif; - ffi_type *args[1]; - void *values[1]; - char *s; - ffi_arg rc; - - /* Initialize the argument info vectors */ - args[0] = &ffi_type_pointer; - values[0] = &s; - - /* Initialize the cif */ - if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_sint, args) == FFI_OK) - { - s = "Hello World!"; - ffi_call(&cif, puts, &rc, values); - /* rc now holds the result of the call to puts */ - - /* values holds a pointer to the function's arg, so to - call puts() again all we need to do is change the - value of s */ - s = "This is cool!"; - ffi_call(&cif, puts, &rc, values); - } - - return 0; - } - - -File: libffi.info, Node: Types, Next: Multiple ABIs, Prev: Simple Example, Up: Using libffi - -2.3 Types -========= - -* Menu: - -* Primitive Types:: Built-in types. -* Structures:: Structure types. -* Type Example:: Structure type example. -* Complex:: Complex types. -* Complex Type Example:: Complex type example. - - -File: libffi.info, Node: Primitive Types, Next: Structures, Up: Types - -2.3.1 Primitive Types ---------------------- - -'Libffi' provides a number of built-in type descriptors that can be used -to describe argument and return types: - -'ffi_type_void' - The type 'void'. This cannot be used for argument types, only for - return values. - -'ffi_type_uint8' - An unsigned, 8-bit integer type. - -'ffi_type_sint8' - A signed, 8-bit integer type. - -'ffi_type_uint16' - An unsigned, 16-bit integer type. - -'ffi_type_sint16' - A signed, 16-bit integer type. - -'ffi_type_uint32' - An unsigned, 32-bit integer type. - -'ffi_type_sint32' - A signed, 32-bit integer type. - -'ffi_type_uint64' - An unsigned, 64-bit integer type. - -'ffi_type_sint64' - A signed, 64-bit integer type. - -'ffi_type_float' - The C 'float' type. - -'ffi_type_double' - The C 'double' type. - -'ffi_type_uchar' - The C 'unsigned char' type. - -'ffi_type_schar' - The C 'signed char' type. (Note that there is not an exact - equivalent to the C 'char' type in 'libffi'; ordinarily you should - either use 'ffi_type_schar' or 'ffi_type_uchar' depending on - whether 'char' is signed.) - -'ffi_type_ushort' - The C 'unsigned short' type. - -'ffi_type_sshort' - The C 'short' type. - -'ffi_type_uint' - The C 'unsigned int' type. - -'ffi_type_sint' - The C 'int' type. - -'ffi_type_ulong' - The C 'unsigned long' type. - -'ffi_type_slong' - The C 'long' type. - -'ffi_type_longdouble' - On platforms that have a C 'long double' type, this is defined. On - other platforms, it is not. - -'ffi_type_pointer' - A generic 'void *' pointer. You should use this for all pointers, - regardless of their real type. - -'ffi_type_complex_float' - The C '_Complex float' type. - -'ffi_type_complex_double' - The C '_Complex double' type. - -'ffi_type_complex_longdouble' - The C '_Complex long double' type. On platforms that have a C - 'long double' type, this is defined. On other platforms, it is - not. - - Each of these is of type 'ffi_type', so you must take the address -when passing to 'ffi_prep_cif'. - - -File: libffi.info, Node: Structures, Next: Type Example, Prev: Primitive Types, Up: Types - -2.3.2 Structures ----------------- - -Although 'libffi' has no special support for unions or bit-fields, it is -perfectly happy passing structures back and forth. You must first -describe the structure to 'libffi' by creating a new 'ffi_type' object -for it. - - -- Data type: ffi_type - The 'ffi_type' has the following members: - 'size_t size' - This is set by 'libffi'; you should initialize it to zero. - - 'unsigned short alignment' - This is set by 'libffi'; you should initialize it to zero. - - 'unsigned short type' - For a structure, this should be set to 'FFI_TYPE_STRUCT'. - - 'ffi_type **elements' - This is a 'NULL'-terminated array of pointers to 'ffi_type' - objects. There is one element per field of the struct. - - -File: libffi.info, Node: Type Example, Next: Complex, Prev: Structures, Up: Types - -2.3.3 Type Example ------------------- - -The following example initializes a 'ffi_type' object representing the -'tm' struct from Linux's 'time.h'. - - Here is how the struct is defined: - - struct tm { - int tm_sec; - int tm_min; - int tm_hour; - int tm_mday; - int tm_mon; - int tm_year; - int tm_wday; - int tm_yday; - int tm_isdst; - /* Those are for future use. */ - long int __tm_gmtoff__; - __const char *__tm_zone__; - }; - - Here is the corresponding code to describe this struct to 'libffi': - - { - ffi_type tm_type; - ffi_type *tm_type_elements[12]; - int i; - - tm_type.size = tm_type.alignment = 0; - tm_type.type = FFI_TYPE_STRUCT; - tm_type.elements = &tm_type_elements; - - for (i = 0; i < 9; i++) - tm_type_elements[i] = &ffi_type_sint; - - tm_type_elements[9] = &ffi_type_slong; - tm_type_elements[10] = &ffi_type_pointer; - tm_type_elements[11] = NULL; - - /* tm_type can now be used to represent tm argument types and - return types for ffi_prep_cif() */ - } - - -File: libffi.info, Node: Complex, Next: Complex Type Example, Prev: Type Example, Up: Types - -2.3.4 Complex Types -------------------- - -'libffi' supports the complex types defined by the C99 standard -('_Complex float', '_Complex double' and '_Complex long double' with the -built-in type descriptors 'ffi_type_complex_float', -'ffi_type_complex_double' and 'ffi_type_complex_longdouble'. - - Custom complex types like '_Complex int' can also be used. An -'ffi_type' object has to be defined to describe the complex type to -'libffi'. - - -- Data type: ffi_type - 'size_t size' - This must be manually set to the size of the complex type. - - 'unsigned short alignment' - This must be manually set to the alignment of the complex - type. - - 'unsigned short type' - For a complex type, this must be set to 'FFI_TYPE_COMPLEX'. - - 'ffi_type **elements' - - This is a 'NULL'-terminated array of pointers to 'ffi_type' - objects. The first element is set to the 'ffi_type' of the - complex's base type. The second element must be set to - 'NULL'. - - The section *note Complex Type Example:: shows a way to determine the -'size' and 'alignment' members in a platform independent way. - - For platforms that have no complex support in 'libffi' yet, the -functions 'ffi_prep_cif' and 'ffi_prep_args' abort the program if they -encounter a complex type. - - -File: libffi.info, Node: Complex Type Example, Prev: Complex, Up: Types - -2.3.5 Complex Type Example --------------------------- - -This example demonstrates how to use complex types: - - #include - #include - #include - - void complex_fn(_Complex float cf, - _Complex double cd, - _Complex long double cld) - { - printf("cf=%f+%fi\ncd=%f+%fi\ncld=%f+%fi\n", - (float)creal (cf), (float)cimag (cf), - (float)creal (cd), (float)cimag (cd), - (float)creal (cld), (float)cimag (cld)); - } - - int main() - { - ffi_cif cif; - ffi_type *args[3]; - void *values[3]; - _Complex float cf; - _Complex double cd; - _Complex long double cld; - - /* Initialize the argument info vectors */ - args[0] = &ffi_type_complex_float; - args[1] = &ffi_type_complex_double; - args[2] = &ffi_type_complex_longdouble; - values[0] = &cf; - values[1] = &cd; - values[2] = &cld; - - /* Initialize the cif */ - if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, - &ffi_type_void, args) == FFI_OK) - { - cf = 1.0 + 20.0 * I; - cd = 300.0 + 4000.0 * I; - cld = 50000.0 + 600000.0 * I; - /* Call the function */ - ffi_call(&cif, (void (*)(void))complex_fn, 0, values); - } - - return 0; - } - - This is an example for defining a custom complex type descriptor for -compilers that support them: - - /* - * This macro can be used to define new complex type descriptors - * in a platform independent way. - * - * name: Name of the new descriptor is ffi_type_complex_. - * type: The C base type of the complex type. - */ - #define FFI_COMPLEX_TYPEDEF(name, type, ffitype) \ - static ffi_type *ffi_elements_complex_##name [2] = { \ - (ffi_type *)(&ffitype), NULL \ - }; \ - struct struct_align_complex_##name { \ - char c; \ - _Complex type x; \ - }; \ - ffi_type ffi_type_complex_##name = { \ - sizeof(_Complex type), \ - offsetof(struct struct_align_complex_##name, x), \ - FFI_TYPE_COMPLEX, \ - (ffi_type **)ffi_elements_complex_##name \ - } - - /* Define new complex type descriptors using the macro: */ - /* ffi_type_complex_sint */ - FFI_COMPLEX_TYPEDEF(sint, int, ffi_type_sint); - /* ffi_type_complex_uchar */ - FFI_COMPLEX_TYPEDEF(uchar, unsigned char, ffi_type_uint8); - - The new type descriptors can then be used like one of the built-in -type descriptors in the previous example. - - -File: libffi.info, Node: Multiple ABIs, Next: The Closure API, Prev: Types, Up: Using libffi - -2.4 Multiple ABIs -================= - -A given platform may provide multiple different ABIs at once. For -instance, the x86 platform has both 'stdcall' and 'fastcall' functions. - - 'libffi' provides some support for this. However, this is -necessarily platform-specific. - - -File: libffi.info, Node: The Closure API, Next: Closure Example, Prev: Multiple ABIs, Up: Using libffi - -2.5 The Closure API -=================== - -'libffi' also provides a way to write a generic function - a function -that can accept and decode any combination of arguments. This can be -useful when writing an interpreter, or to provide wrappers for arbitrary -functions. - - This facility is called the "closure API". Closures are not supported -on all platforms; you can check the 'FFI_CLOSURES' define to determine -whether they are supported on the current platform. - - Because closures work by assembling a tiny function at runtime, they -require special allocation on platforms that have a non-executable heap. -Memory management for closures is handled by a pair of functions: - - -- Function: void *ffi_closure_alloc (size_t SIZE, void **CODE) - Allocate a chunk of memory holding SIZE bytes. This returns a - pointer to the writable address, and sets *CODE to the - corresponding executable address. - - SIZE should be sufficient to hold a 'ffi_closure' object. - - -- Function: void ffi_closure_free (void *WRITABLE) - Free memory allocated using 'ffi_closure_alloc'. The argument is - the writable address that was returned. - - Once you have allocated the memory for a closure, you must construct -a 'ffi_cif' describing the function call. Finally you can prepare the -closure function: - - -- Function: ffi_status ffi_prep_closure_loc (ffi_closure *CLOSURE, - ffi_cif *CIF, void (*FUN) (ffi_cif *CIF, void *RET, void - **ARGS, void *USER_DATA), void *USER_DATA, void *CODELOC) - Prepare a closure function. - - CLOSURE is the address of a 'ffi_closure' object; this is the - writable address returned by 'ffi_closure_alloc'. - - CIF is the 'ffi_cif' describing the function parameters. - - USER_DATA is an arbitrary datum that is passed, uninterpreted, to - your closure function. - - CODELOC is the executable address returned by 'ffi_closure_alloc'. - - FUN is the function which will be called when the closure is - invoked. It is called with the arguments: - CIF - The 'ffi_cif' passed to 'ffi_prep_closure_loc'. - - RET - A pointer to the memory used for the function's return value. - FUN must fill this, unless the function is declared as - returning 'void'. - - ARGS - A vector of pointers to memory holding the arguments to the - function. - - USER_DATA - The same USER_DATA that was passed to 'ffi_prep_closure_loc'. - - 'ffi_prep_closure_loc' will return 'FFI_OK' if everything went ok, - and something else on error. - - After calling 'ffi_prep_closure_loc', you can cast CODELOC to the - appropriate pointer-to-function type. - - You may see old code referring to 'ffi_prep_closure'. This function -is deprecated, as it cannot handle the need for separate writable and -executable addresses. - - -File: libffi.info, Node: Closure Example, Prev: The Closure API, Up: Using libffi - -2.6 Closure Example -=================== - -A trivial example that creates a new 'puts' by binding 'fputs' with -'stdout'. - - #include - #include - - /* Acts like puts with the file given at time of enclosure. */ - void puts_binding(ffi_cif *cif, void *ret, void* args[], - void *stream) - { - *(ffi_arg *)ret = fputs(*(char **)args[0], (FILE *)stream); - } - - typedef int (*puts_t)(char *); - - int main() - { - ffi_cif cif; - ffi_type *args[1]; - ffi_closure *closure; - - void *bound_puts; - int rc; - - /* Allocate closure and bound_puts */ - closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts); - - if (closure) - { - /* Initialize the argument info vectors */ - args[0] = &ffi_type_pointer; - - /* Initialize the cif */ - if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_sint, args) == FFI_OK) - { - /* Initialize the closure, setting stream to stdout */ - if (ffi_prep_closure_loc(closure, &cif, puts_binding, - stdout, bound_puts) == FFI_OK) - { - rc = ((puts_t)bound_puts)("Hello World!"); - /* rc now holds the result of the call to fputs */ - } - } - } - - /* Deallocate both closure, and bound_puts */ - ffi_closure_free(closure); - - return 0; - } - - -File: libffi.info, Node: Missing Features, Next: Index, Prev: Using libffi, Up: Top - -3 Missing Features -****************** - -'libffi' is missing a few features. We welcome patches to add support -for these. - - * Variadic closures. - - * There is no support for bit fields in structures. - - * The closure API is - - * The "raw" API is undocumented. - - Note that variadic support is very new and tested on a relatively -small number of platforms. - - -File: libffi.info, Node: Index, Prev: Missing Features, Up: Top - -Index -***** - -[index] -* Menu: - -* ABI: Introduction. (line 13) -* Application Binary Interface: Introduction. (line 13) -* calling convention: Introduction. (line 13) -* cif: The Basics. (line 14) -* closure API: The Closure API. (line 13) -* closures: The Closure API. (line 13) -* FFI: Introduction. (line 31) -* ffi_call: The Basics. (line 62) -* FFI_CLOSURES: The Closure API. (line 13) -* ffi_closure_alloc: The Closure API. (line 19) -* ffi_closure_free: The Closure API. (line 26) -* ffi_prep_cif: The Basics. (line 16) -* ffi_prep_cif_var: The Basics. (line 39) -* ffi_prep_closure_loc: The Closure API. (line 34) -* ffi_status: The Basics. (line 16) -* ffi_status <1>: The Basics. (line 39) -* ffi_status <2>: The Closure API. (line 34) -* ffi_type: Structures. (line 11) -* ffi_type <1>: Structures. (line 11) -* ffi_type <2>: Complex. (line 15) -* ffi_type <3>: Complex. (line 15) -* ffi_type_complex_double: Primitive Types. (line 82) -* ffi_type_complex_float: Primitive Types. (line 79) -* ffi_type_complex_longdouble: Primitive Types. (line 85) -* ffi_type_double: Primitive Types. (line 41) -* ffi_type_float: Primitive Types. (line 38) -* ffi_type_longdouble: Primitive Types. (line 71) -* ffi_type_pointer: Primitive Types. (line 75) -* ffi_type_schar: Primitive Types. (line 47) -* ffi_type_sint: Primitive Types. (line 62) -* ffi_type_sint16: Primitive Types. (line 23) -* ffi_type_sint32: Primitive Types. (line 29) -* ffi_type_sint64: Primitive Types. (line 35) -* ffi_type_sint8: Primitive Types. (line 17) -* ffi_type_slong: Primitive Types. (line 68) -* ffi_type_sshort: Primitive Types. (line 56) -* ffi_type_uchar: Primitive Types. (line 44) -* ffi_type_uint: Primitive Types. (line 59) -* ffi_type_uint16: Primitive Types. (line 20) -* ffi_type_uint32: Primitive Types. (line 26) -* ffi_type_uint64: Primitive Types. (line 32) -* ffi_type_uint8: Primitive Types. (line 14) -* ffi_type_ulong: Primitive Types. (line 65) -* ffi_type_ushort: Primitive Types. (line 53) -* ffi_type_void: Primitive Types. (line 10) -* Foreign Function Interface: Introduction. (line 31) -* void: The Basics. (line 62) -* void <1>: The Closure API. (line 19) -* void <2>: The Closure API. (line 26) - - - -Tag Table: -Node: Top682 -Node: Introduction1429 -Node: Using libffi3061 -Node: The Basics3547 -Node: Simple Example7198 -Node: Types8229 -Node: Primitive Types8613 -Node: Structures10734 -Node: Type Example11608 -Node: Complex12890 -Node: Complex Type Example14308 -Node: Multiple ABIs17360 -Node: The Closure API17731 -Node: Closure Example20675 -Node: Missing Features22284 -Node: Index22737 - -End Tag Table diff --git a/ruby/ext/fiddle/libffi-3.2.1/doc/libffi.texi b/ruby/ext/fiddle/libffi-3.2.1/doc/libffi.texi deleted file mode 100644 index b1c9bc367..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/doc/libffi.texi +++ /dev/null @@ -1,770 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@setfilename libffi.info -@settitle libffi -@setchapternewpage off -@c %**end of header - -@c Merge the standard indexes into a single one. -@syncodeindex fn cp -@syncodeindex vr cp -@syncodeindex ky cp -@syncodeindex pg cp -@syncodeindex tp cp - -@include version.texi - -@copying - -This manual is for Libffi, a portable foreign-function interface -library. - -Copyright @copyright{} 2008, 2010, 2011 Red Hat, Inc. - -@quotation -Permission is granted to copy, distribute and/or modify this document -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. A copy of the license is included in the -section entitled ``GNU General Public License''. - -@end quotation -@end copying - -@dircategory Development -@direntry -* libffi: (libffi). Portable foreign-function interface library. -@end direntry - -@titlepage -@title Libffi -@page -@vskip 0pt plus 1filll -@insertcopying -@end titlepage - - -@ifnottex -@node Top -@top libffi - -@insertcopying - -@menu -* Introduction:: What is libffi? -* Using libffi:: How to use libffi. -* Missing Features:: Things libffi can't do. -* Index:: Index. -@end menu - -@end ifnottex - - -@node Introduction -@chapter What is libffi? - -Compilers for high level languages generate code that follow certain -conventions. These conventions are necessary, in part, for separate -compilation to work. One such convention is the @dfn{calling -convention}. The calling convention is a set of assumptions made by -the compiler about where function arguments will be found on entry to -a function. A calling convention also specifies where the return -value for a function is found. The calling convention is also -sometimes called the @dfn{ABI} or @dfn{Application Binary Interface}. -@cindex calling convention -@cindex ABI -@cindex Application Binary Interface - -Some programs may not know at the time of compilation what arguments -are to be passed to a function. For instance, an interpreter may be -told at run-time about the number and types of arguments used to call -a given function. @samp{Libffi} can be used in such programs to -provide a bridge from the interpreter program to compiled code. - -The @samp{libffi} library provides a portable, high level programming -interface to various calling conventions. This allows a programmer to -call any function specified by a call interface description at run -time. - -@acronym{FFI} stands for Foreign Function Interface. A foreign -function interface is the popular name for the interface that allows -code written in one language to call code written in another language. -The @samp{libffi} library really only provides the lowest, machine -dependent layer of a fully featured foreign function interface. A -layer must exist above @samp{libffi} that handles type conversions for -values passed between the two languages. -@cindex FFI -@cindex Foreign Function Interface - - -@node Using libffi -@chapter Using libffi - -@menu -* The Basics:: The basic libffi API. -* Simple Example:: A simple example. -* Types:: libffi type descriptions. -* Multiple ABIs:: Different passing styles on one platform. -* The Closure API:: Writing a generic function. -* Closure Example:: A closure example. -@end menu - - -@node The Basics -@section The Basics - -@samp{Libffi} assumes that you have a pointer to the function you wish -to call and that you know the number and types of arguments to pass -it, as well as the return type of the function. - -The first thing you must do is create an @code{ffi_cif} object that -matches the signature of the function you wish to call. This is a -separate step because it is common to make multiple calls using a -single @code{ffi_cif}. The @dfn{cif} in @code{ffi_cif} stands for -Call InterFace. To prepare a call interface object, use the function -@code{ffi_prep_cif}. -@cindex cif - -@findex ffi_prep_cif -@defun ffi_status ffi_prep_cif (ffi_cif *@var{cif}, ffi_abi @var{abi}, unsigned int @var{nargs}, ffi_type *@var{rtype}, ffi_type **@var{argtypes}) -This initializes @var{cif} according to the given parameters. - -@var{abi} is the ABI to use; normally @code{FFI_DEFAULT_ABI} is what -you want. @ref{Multiple ABIs} for more information. - -@var{nargs} is the number of arguments that this function accepts. - -@var{rtype} is a pointer to an @code{ffi_type} structure that -describes the return type of the function. @xref{Types}. - -@var{argtypes} is a vector of @code{ffi_type} pointers. -@var{argtypes} must have @var{nargs} elements. If @var{nargs} is 0, -this argument is ignored. - -@code{ffi_prep_cif} returns a @code{libffi} status code, of type -@code{ffi_status}. This will be either @code{FFI_OK} if everything -worked properly; @code{FFI_BAD_TYPEDEF} if one of the @code{ffi_type} -objects is incorrect; or @code{FFI_BAD_ABI} if the @var{abi} parameter -is invalid. -@end defun - -If the function being called is variadic (varargs) then -@code{ffi_prep_cif_var} must be used instead of @code{ffi_prep_cif}. - -@findex ffi_prep_cif_var -@defun ffi_status ffi_prep_cif_var (ffi_cif *@var{cif}, ffi_abi var{abi}, unsigned int @var{nfixedargs}, unsigned int var{ntotalargs}, ffi_type *@var{rtype}, ffi_type **@var{argtypes}) -This initializes @var{cif} according to the given parameters for -a call to a variadic function. In general it's operation is the -same as for @code{ffi_prep_cif} except that: - -@var{nfixedargs} is the number of fixed arguments, prior to any -variadic arguments. It must be greater than zero. - -@var{ntotalargs} the total number of arguments, including variadic -and fixed arguments. - -Note that, different cif's must be prepped for calls to the same -function when different numbers of arguments are passed. - -Also note that a call to @code{ffi_prep_cif_var} with -@var{nfixedargs}=@var{nototalargs} is NOT equivalent to a call to -@code{ffi_prep_cif}. - -@end defun - - -To call a function using an initialized @code{ffi_cif}, use the -@code{ffi_call} function: - -@findex ffi_call -@defun void ffi_call (ffi_cif *@var{cif}, void *@var{fn}, void *@var{rvalue}, void **@var{avalues}) -This calls the function @var{fn} according to the description given in -@var{cif}. @var{cif} must have already been prepared using -@code{ffi_prep_cif}. - -@var{rvalue} is a pointer to a chunk of memory that will hold the -result of the function call. This must be large enough to hold the -result, no smaller than the system register size (generally 32 or 64 -bits), and must be suitably aligned; it is the caller's responsibility -to ensure this. If @var{cif} declares that the function returns -@code{void} (using @code{ffi_type_void}), then @var{rvalue} is -ignored. - -@var{avalues} is a vector of @code{void *} pointers that point to the -memory locations holding the argument values for a call. If @var{cif} -declares that the function has no arguments (i.e., @var{nargs} was 0), -then @var{avalues} is ignored. Note that argument values may be -modified by the callee (for instance, structs passed by value); the -burden of copying pass-by-value arguments is placed on the caller. -@end defun - - -@node Simple Example -@section Simple Example - -Here is a trivial example that calls @code{puts} a few times. - -@example -#include -#include - -int main() -@{ - ffi_cif cif; - ffi_type *args[1]; - void *values[1]; - char *s; - ffi_arg rc; - - /* Initialize the argument info vectors */ - args[0] = &ffi_type_pointer; - values[0] = &s; - - /* Initialize the cif */ - if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_sint, args) == FFI_OK) - @{ - s = "Hello World!"; - ffi_call(&cif, puts, &rc, values); - /* rc now holds the result of the call to puts */ - - /* values holds a pointer to the function's arg, so to - call puts() again all we need to do is change the - value of s */ - s = "This is cool!"; - ffi_call(&cif, puts, &rc, values); - @} - - return 0; -@} -@end example - - -@node Types -@section Types - -@menu -* Primitive Types:: Built-in types. -* Structures:: Structure types. -* Type Example:: Structure type example. -* Complex:: Complex types. -* Complex Type Example:: Complex type example. -@end menu - -@node Primitive Types -@subsection Primitive Types - -@code{Libffi} provides a number of built-in type descriptors that can -be used to describe argument and return types: - -@table @code -@item ffi_type_void -@tindex ffi_type_void -The type @code{void}. This cannot be used for argument types, only -for return values. - -@item ffi_type_uint8 -@tindex ffi_type_uint8 -An unsigned, 8-bit integer type. - -@item ffi_type_sint8 -@tindex ffi_type_sint8 -A signed, 8-bit integer type. - -@item ffi_type_uint16 -@tindex ffi_type_uint16 -An unsigned, 16-bit integer type. - -@item ffi_type_sint16 -@tindex ffi_type_sint16 -A signed, 16-bit integer type. - -@item ffi_type_uint32 -@tindex ffi_type_uint32 -An unsigned, 32-bit integer type. - -@item ffi_type_sint32 -@tindex ffi_type_sint32 -A signed, 32-bit integer type. - -@item ffi_type_uint64 -@tindex ffi_type_uint64 -An unsigned, 64-bit integer type. - -@item ffi_type_sint64 -@tindex ffi_type_sint64 -A signed, 64-bit integer type. - -@item ffi_type_float -@tindex ffi_type_float -The C @code{float} type. - -@item ffi_type_double -@tindex ffi_type_double -The C @code{double} type. - -@item ffi_type_uchar -@tindex ffi_type_uchar -The C @code{unsigned char} type. - -@item ffi_type_schar -@tindex ffi_type_schar -The C @code{signed char} type. (Note that there is not an exact -equivalent to the C @code{char} type in @code{libffi}; ordinarily you -should either use @code{ffi_type_schar} or @code{ffi_type_uchar} -depending on whether @code{char} is signed.) - -@item ffi_type_ushort -@tindex ffi_type_ushort -The C @code{unsigned short} type. - -@item ffi_type_sshort -@tindex ffi_type_sshort -The C @code{short} type. - -@item ffi_type_uint -@tindex ffi_type_uint -The C @code{unsigned int} type. - -@item ffi_type_sint -@tindex ffi_type_sint -The C @code{int} type. - -@item ffi_type_ulong -@tindex ffi_type_ulong -The C @code{unsigned long} type. - -@item ffi_type_slong -@tindex ffi_type_slong -The C @code{long} type. - -@item ffi_type_longdouble -@tindex ffi_type_longdouble -On platforms that have a C @code{long double} type, this is defined. -On other platforms, it is not. - -@item ffi_type_pointer -@tindex ffi_type_pointer -A generic @code{void *} pointer. You should use this for all -pointers, regardless of their real type. - -@item ffi_type_complex_float -@tindex ffi_type_complex_float -The C @code{_Complex float} type. - -@item ffi_type_complex_double -@tindex ffi_type_complex_double -The C @code{_Complex double} type. - -@item ffi_type_complex_longdouble -@tindex ffi_type_complex_longdouble -The C @code{_Complex long double} type. -On platforms that have a C @code{long double} type, this is defined. -On other platforms, it is not. -@end table - -Each of these is of type @code{ffi_type}, so you must take the address -when passing to @code{ffi_prep_cif}. - - -@node Structures -@subsection Structures - -Although @samp{libffi} has no special support for unions or -bit-fields, it is perfectly happy passing structures back and forth. -You must first describe the structure to @samp{libffi} by creating a -new @code{ffi_type} object for it. - -@tindex ffi_type -@deftp {Data type} ffi_type -The @code{ffi_type} has the following members: -@table @code -@item size_t size -This is set by @code{libffi}; you should initialize it to zero. - -@item unsigned short alignment -This is set by @code{libffi}; you should initialize it to zero. - -@item unsigned short type -For a structure, this should be set to @code{FFI_TYPE_STRUCT}. - -@item ffi_type **elements -This is a @samp{NULL}-terminated array of pointers to @code{ffi_type} -objects. There is one element per field of the struct. -@end table -@end deftp - - -@node Type Example -@subsection Type Example - -The following example initializes a @code{ffi_type} object -representing the @code{tm} struct from Linux's @file{time.h}. - -Here is how the struct is defined: - -@example -struct tm @{ - int tm_sec; - int tm_min; - int tm_hour; - int tm_mday; - int tm_mon; - int tm_year; - int tm_wday; - int tm_yday; - int tm_isdst; - /* Those are for future use. */ - long int __tm_gmtoff__; - __const char *__tm_zone__; -@}; -@end example - -Here is the corresponding code to describe this struct to -@code{libffi}: - -@example - @{ - ffi_type tm_type; - ffi_type *tm_type_elements[12]; - int i; - - tm_type.size = tm_type.alignment = 0; - tm_type.type = FFI_TYPE_STRUCT; - tm_type.elements = &tm_type_elements; - - for (i = 0; i < 9; i++) - tm_type_elements[i] = &ffi_type_sint; - - tm_type_elements[9] = &ffi_type_slong; - tm_type_elements[10] = &ffi_type_pointer; - tm_type_elements[11] = NULL; - - /* tm_type can now be used to represent tm argument types and - return types for ffi_prep_cif() */ - @} -@end example - -@node Complex -@subsection Complex Types - -@samp{libffi} supports the complex types defined by the C99 -standard (@code{_Complex float}, @code{_Complex double} and -@code{_Complex long double} with the built-in type descriptors -@code{ffi_type_complex_float}, @code{ffi_type_complex_double} and -@code{ffi_type_complex_longdouble}. - -Custom complex types like @code{_Complex int} can also be used. -An @code{ffi_type} object has to be defined to describe the -complex type to @samp{libffi}. - -@tindex ffi_type -@deftp {Data type} ffi_type -@table @code -@item size_t size -This must be manually set to the size of the complex type. - -@item unsigned short alignment -This must be manually set to the alignment of the complex type. - -@item unsigned short type -For a complex type, this must be set to @code{FFI_TYPE_COMPLEX}. - -@item ffi_type **elements - -This is a @samp{NULL}-terminated array of pointers to -@code{ffi_type} objects. The first element is set to the -@code{ffi_type} of the complex's base type. The second element -must be set to @code{NULL}. -@end table -@end deftp - -The section @ref{Complex Type Example} shows a way to determine -the @code{size} and @code{alignment} members in a platform -independent way. - -For platforms that have no complex support in @code{libffi} yet, -the functions @code{ffi_prep_cif} and @code{ffi_prep_args} abort -the program if they encounter a complex type. - -@node Complex Type Example -@subsection Complex Type Example - -This example demonstrates how to use complex types: - -@example -#include -#include -#include - -void complex_fn(_Complex float cf, - _Complex double cd, - _Complex long double cld) -@{ - printf("cf=%f+%fi\ncd=%f+%fi\ncld=%f+%fi\n", - (float)creal (cf), (float)cimag (cf), - (float)creal (cd), (float)cimag (cd), - (float)creal (cld), (float)cimag (cld)); -@} - -int main() -@{ - ffi_cif cif; - ffi_type *args[3]; - void *values[3]; - _Complex float cf; - _Complex double cd; - _Complex long double cld; - - /* Initialize the argument info vectors */ - args[0] = &ffi_type_complex_float; - args[1] = &ffi_type_complex_double; - args[2] = &ffi_type_complex_longdouble; - values[0] = &cf; - values[1] = &cd; - values[2] = &cld; - - /* Initialize the cif */ - if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, - &ffi_type_void, args) == FFI_OK) - @{ - cf = 1.0 + 20.0 * I; - cd = 300.0 + 4000.0 * I; - cld = 50000.0 + 600000.0 * I; - /* Call the function */ - ffi_call(&cif, (void (*)(void))complex_fn, 0, values); - @} - - return 0; -@} -@end example - -This is an example for defining a custom complex type descriptor -for compilers that support them: - -@example -/* - * This macro can be used to define new complex type descriptors - * in a platform independent way. - * - * name: Name of the new descriptor is ffi_type_complex_. - * type: The C base type of the complex type. - */ -#define FFI_COMPLEX_TYPEDEF(name, type, ffitype) \ - static ffi_type *ffi_elements_complex_##name [2] = @{ \ - (ffi_type *)(&ffitype), NULL \ - @}; \ - struct struct_align_complex_##name @{ \ - char c; \ - _Complex type x; \ - @}; \ - ffi_type ffi_type_complex_##name = @{ \ - sizeof(_Complex type), \ - offsetof(struct struct_align_complex_##name, x), \ - FFI_TYPE_COMPLEX, \ - (ffi_type **)ffi_elements_complex_##name \ - @} - -/* Define new complex type descriptors using the macro: */ -/* ffi_type_complex_sint */ -FFI_COMPLEX_TYPEDEF(sint, int, ffi_type_sint); -/* ffi_type_complex_uchar */ -FFI_COMPLEX_TYPEDEF(uchar, unsigned char, ffi_type_uint8); -@end example - -The new type descriptors can then be used like one of the built-in -type descriptors in the previous example. - -@node Multiple ABIs -@section Multiple ABIs - -A given platform may provide multiple different ABIs at once. For -instance, the x86 platform has both @samp{stdcall} and @samp{fastcall} -functions. - -@code{libffi} provides some support for this. However, this is -necessarily platform-specific. - -@c FIXME: document the platforms - -@node The Closure API -@section The Closure API - -@code{libffi} also provides a way to write a generic function -- a -function that can accept and decode any combination of arguments. -This can be useful when writing an interpreter, or to provide wrappers -for arbitrary functions. - -This facility is called the @dfn{closure API}. Closures are not -supported on all platforms; you can check the @code{FFI_CLOSURES} -define to determine whether they are supported on the current -platform. -@cindex closures -@cindex closure API -@findex FFI_CLOSURES - -Because closures work by assembling a tiny function at runtime, they -require special allocation on platforms that have a non-executable -heap. Memory management for closures is handled by a pair of -functions: - -@findex ffi_closure_alloc -@defun void *ffi_closure_alloc (size_t @var{size}, void **@var{code}) -Allocate a chunk of memory holding @var{size} bytes. This returns a -pointer to the writable address, and sets *@var{code} to the -corresponding executable address. - -@var{size} should be sufficient to hold a @code{ffi_closure} object. -@end defun - -@findex ffi_closure_free -@defun void ffi_closure_free (void *@var{writable}) -Free memory allocated using @code{ffi_closure_alloc}. The argument is -the writable address that was returned. -@end defun - - -Once you have allocated the memory for a closure, you must construct a -@code{ffi_cif} describing the function call. Finally you can prepare -the closure function: - -@findex ffi_prep_closure_loc -@defun ffi_status ffi_prep_closure_loc (ffi_closure *@var{closure}, ffi_cif *@var{cif}, void (*@var{fun}) (ffi_cif *@var{cif}, void *@var{ret}, void **@var{args}, void *@var{user_data}), void *@var{user_data}, void *@var{codeloc}) -Prepare a closure function. - -@var{closure} is the address of a @code{ffi_closure} object; this is -the writable address returned by @code{ffi_closure_alloc}. - -@var{cif} is the @code{ffi_cif} describing the function parameters. - -@var{user_data} is an arbitrary datum that is passed, uninterpreted, -to your closure function. - -@var{codeloc} is the executable address returned by -@code{ffi_closure_alloc}. - -@var{fun} is the function which will be called when the closure is -invoked. It is called with the arguments: -@table @var -@item cif -The @code{ffi_cif} passed to @code{ffi_prep_closure_loc}. - -@item ret -A pointer to the memory used for the function's return value. -@var{fun} must fill this, unless the function is declared as returning -@code{void}. -@c FIXME: is this NULL for void-returning functions? - -@item args -A vector of pointers to memory holding the arguments to the function. - -@item user_data -The same @var{user_data} that was passed to -@code{ffi_prep_closure_loc}. -@end table - -@code{ffi_prep_closure_loc} will return @code{FFI_OK} if everything -went ok, and something else on error. -@c FIXME: what? - -After calling @code{ffi_prep_closure_loc}, you can cast @var{codeloc} -to the appropriate pointer-to-function type. -@end defun - -You may see old code referring to @code{ffi_prep_closure}. This -function is deprecated, as it cannot handle the need for separate -writable and executable addresses. - -@node Closure Example -@section Closure Example - -A trivial example that creates a new @code{puts} by binding -@code{fputs} with @code{stdout}. - -@example -#include -#include - -/* Acts like puts with the file given at time of enclosure. */ -void puts_binding(ffi_cif *cif, void *ret, void* args[], - void *stream) -@{ - *(ffi_arg *)ret = fputs(*(char **)args[0], (FILE *)stream); -@} - -typedef int (*puts_t)(char *); - -int main() -@{ - ffi_cif cif; - ffi_type *args[1]; - ffi_closure *closure; - - void *bound_puts; - int rc; - - /* Allocate closure and bound_puts */ - closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts); - - if (closure) - @{ - /* Initialize the argument info vectors */ - args[0] = &ffi_type_pointer; - - /* Initialize the cif */ - if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_sint, args) == FFI_OK) - @{ - /* Initialize the closure, setting stream to stdout */ - if (ffi_prep_closure_loc(closure, &cif, puts_binding, - stdout, bound_puts) == FFI_OK) - @{ - rc = ((puts_t)bound_puts)("Hello World!"); - /* rc now holds the result of the call to fputs */ - @} - @} - @} - - /* Deallocate both closure, and bound_puts */ - ffi_closure_free(closure); - - return 0; -@} - -@end example - - -@node Missing Features -@chapter Missing Features - -@code{libffi} is missing a few features. We welcome patches to add -support for these. - -@itemize @bullet -@item -Variadic closures. - -@item -There is no support for bit fields in structures. - -@item -The closure API is - -@c FIXME: ... - -@item -The ``raw'' API is undocumented. -@c argument promotion? -@c unions? -@c anything else? -@end itemize - -Note that variadic support is very new and tested on a relatively -small number of platforms. - -@node Index -@unnumbered Index - -@printindex cp - -@bye diff --git a/ruby/ext/fiddle/libffi-3.2.1/doc/stamp-vti b/ruby/ext/fiddle/libffi-3.2.1/doc/stamp-vti deleted file mode 100644 index ccef70f49..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/doc/stamp-vti +++ /dev/null @@ -1,4 +0,0 @@ -@set UPDATED 8 November 2014 -@set UPDATED-MONTH November 2014 -@set EDITION 3.2.1 -@set VERSION 3.2.1 diff --git a/ruby/ext/fiddle/libffi-3.2.1/doc/version.texi b/ruby/ext/fiddle/libffi-3.2.1/doc/version.texi deleted file mode 100644 index ccef70f49..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/doc/version.texi +++ /dev/null @@ -1,4 +0,0 @@ -@set UPDATED 8 November 2014 -@set UPDATED-MONTH November 2014 -@set EDITION 3.2.1 -@set VERSION 3.2.1 diff --git a/ruby/ext/fiddle/libffi-3.2.1/fficonfig.h.in b/ruby/ext/fiddle/libffi-3.2.1/fficonfig.h.in deleted file mode 100644 index 8aec513a5..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/fficonfig.h.in +++ /dev/null @@ -1,214 +0,0 @@ -/* fficonfig.h.in. Generated from configure.ac by autoheader. */ - -/* Define if building universal (internal helper macro) */ -#undef AC_APPLE_UNIVERSAL_BUILD - -/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP - systems. This function is required for `alloca.c' support on those systems. - */ -#undef CRAY_STACKSEG_END - -/* Define to 1 if using `alloca.c'. */ -#undef C_ALLOCA - -/* Define to the flags needed for the .section .eh_frame directive. */ -#undef EH_FRAME_FLAGS - -/* Define this if you want extra debugging. */ -#undef FFI_DEBUG - -/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -#undef FFI_EXEC_TRAMPOLINE_TABLE - -/* Define this if you want to enable pax emulated trampolines */ -#undef FFI_MMAP_EXEC_EMUTRAMP_PAX - -/* Cannot use malloc on this target, so, we revert to alternative means */ -#undef FFI_MMAP_EXEC_WRIT - -/* Define this if you do not want support for the raw API. */ -#undef FFI_NO_RAW_API - -/* Define this if you do not want support for aggregate types. */ -#undef FFI_NO_STRUCTS - -/* Define to 1 if you have `alloca', as a function or macro. */ -#undef HAVE_ALLOCA - -/* Define to 1 if you have and it should be used (not on Ultrix). - */ -#undef HAVE_ALLOCA_H - -/* Define if your assembler supports .ascii. */ -#undef HAVE_AS_ASCII_PSEUDO_OP - -/* Define if your assembler supports .cfi_* directives. */ -#undef HAVE_AS_CFI_PSEUDO_OP - -/* Define if your assembler supports .register. */ -#undef HAVE_AS_REGISTER_PSEUDO_OP - -/* Define if your assembler and linker support unaligned PC relative relocs. - */ -#undef HAVE_AS_SPARC_UA_PCREL - -/* Define if your assembler supports .string. */ -#undef HAVE_AS_STRING_PSEUDO_OP - -/* Define if your assembler supports unwind section type. */ -#undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE - -/* Define if your assembler supports PC relative relocs. */ -#undef HAVE_AS_X86_PCREL - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define if __attribute__((visibility("hidden"))) is supported. */ -#undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define if you have the long double type and it is bigger than a double */ -#undef HAVE_LONG_DOUBLE - -/* Define if you support more than one size of the long double type */ -#undef HAVE_LONG_DOUBLE_VARIANT - -/* Define to 1 if you have the `memcpy' function. */ -#undef HAVE_MEMCPY - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `mkostemp' function. */ -#undef HAVE_MKOSTEMP - -/* Define to 1 if you have the `mmap' function. */ -#undef HAVE_MMAP - -/* Define if mmap with MAP_ANON(YMOUS) works. */ -#undef HAVE_MMAP_ANON - -/* Define if mmap of /dev/zero works. */ -#undef HAVE_MMAP_DEV_ZERO - -/* Define if read-only mmap of a plain file works. */ -#undef HAVE_MMAP_FILE - -/* Define if .eh_frame sections should be read-only. */ -#undef HAVE_RO_EH_FRAME - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_MMAN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -#undef NO_MINUS_C_MINUS_O - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* The size of `double', as computed by sizeof. */ -#undef SIZEOF_DOUBLE - -/* The size of `long double', as computed by sizeof. */ -#undef SIZEOF_LONG_DOUBLE - -/* The size of `size_t', as computed by sizeof. */ -#undef SIZEOF_SIZE_T - -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at runtime. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -#undef STACK_DIRECTION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define if symbols are underscored. */ -#undef SYMBOL_UNDERSCORE - -/* Define this if you are using Purify and want to suppress spurious messages. - */ -#undef USING_PURIFY - -/* Version number of package */ -#undef VERSION - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -# undef WORDS_BIGENDIAN -# endif -#endif - -/* Define to `unsigned int' if does not define. */ -#undef size_t - - -#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -#ifdef LIBFFI_ASM -#define FFI_HIDDEN(name) .hidden name -#else -#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -#endif -#else -#ifdef LIBFFI_ASM -#define FFI_HIDDEN(name) -#else -#define FFI_HIDDEN -#endif -#endif - diff --git a/ruby/ext/fiddle/libffi-3.2.1/generate-darwin-source-and-headers.py b/ruby/ext/fiddle/libffi-3.2.1/generate-darwin-source-and-headers.py deleted file mode 100644 index 964e861d4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/generate-darwin-source-and-headers.py +++ /dev/null @@ -1,209 +0,0 @@ -#!/usr/bin/env python -import subprocess -import os -import errno -import collections -import glob -import argparse - -class Platform(object): - pass - -class simulator_platform(Platform): - directory = 'darwin_ios' - sdk = 'iphonesimulator' - arch = 'i386' - triple = 'i386-apple-darwin11' - version_min = '-miphoneos-version-min=5.1.1' - - prefix = "#ifdef __i386__\n\n" - suffix = "\n\n#endif" - src_dir = 'x86' - src_files = ['darwin.S', 'win32.S', 'ffi.c'] - - -class simulator64_platform(Platform): - directory = 'darwin_ios' - sdk = 'iphonesimulator' - arch = 'x86_64' - triple = 'x86_64-apple-darwin13' - version_min = '-miphoneos-version-min=7.0' - - prefix = "#ifdef __x86_64__\n\n" - suffix = "\n\n#endif" - src_dir = 'x86' - src_files = ['darwin64.S', 'ffi64.c'] - - -class device_platform(Platform): - directory = 'darwin_ios' - sdk = 'iphoneos' - arch = 'armv7' - triple = 'arm-apple-darwin11' - version_min = '-miphoneos-version-min=5.1.1' - - prefix = "#ifdef __arm__\n\n" - suffix = "\n\n#endif" - src_dir = 'arm' - src_files = ['sysv.S', 'trampoline.S', 'ffi.c'] - - -class device64_platform(Platform): - directory = 'darwin_ios' - sdk = 'iphoneos' - arch = 'arm64' - triple = 'aarch64-apple-darwin13' - version_min = '-miphoneos-version-min=7.0' - - prefix = "#ifdef __arm64__\n\n" - suffix = "\n\n#endif" - src_dir = 'aarch64' - src_files = ['sysv.S', 'ffi.c'] - - -class desktop32_platform(Platform): - directory = 'darwin_osx' - sdk = 'macosx' - arch = 'i386' - triple = 'i386-apple-darwin10' - version_min = '-mmacosx-version-min=10.6' - src_dir = 'x86' - src_files = ['darwin.S', 'win32.S', 'ffi.c'] - - prefix = "#ifdef __i386__\n\n" - suffix = "\n\n#endif" - - -class desktop64_platform(Platform): - directory = 'darwin_osx' - sdk = 'macosx' - arch = 'x86_64' - triple = 'x86_64-apple-darwin10' - version_min = '-mmacosx-version-min=10.6' - - prefix = "#ifdef __x86_64__\n\n" - suffix = "\n\n#endif" - src_dir = 'x86' - src_files = ['darwin64.S', 'ffi64.c'] - - -def mkdir_p(path): - try: - os.makedirs(path) - except OSError as exc: # Python >2.5 - if exc.errno == errno.EEXIST: - pass - else: - raise - - -def move_file(src_dir, dst_dir, filename, file_suffix=None, prefix='', suffix=''): - mkdir_p(dst_dir) - out_filename = filename - - if file_suffix: - split_name = os.path.splitext(filename) - out_filename = "%s_%s%s" % (split_name[0], file_suffix, split_name[1]) - - with open(os.path.join(src_dir, filename)) as in_file: - with open(os.path.join(dst_dir, out_filename), 'w') as out_file: - if prefix: - out_file.write(prefix) - - out_file.write(in_file.read()) - - if suffix: - out_file.write(suffix) - - -def list_files(src_dir, pattern=None, filelist=None): - if pattern: filelist = glob.iglob(os.path.join(src_dir, pattern)) - for file in filelist: - yield os.path.basename(file) - - -def copy_files(src_dir, dst_dir, pattern=None, filelist=None, file_suffix=None, prefix=None, suffix=None): - for filename in list_files(src_dir, pattern=pattern, filelist=filelist): - move_file(src_dir, dst_dir, filename, file_suffix=file_suffix, prefix=prefix, suffix=suffix) - - -def copy_src_platform_files(platform): - src_dir = os.path.join('src', platform.src_dir) - dst_dir = os.path.join(platform.directory, 'src', platform.src_dir) - copy_files(src_dir, dst_dir, filelist=platform.src_files, file_suffix=platform.arch, prefix=platform.prefix, suffix=platform.suffix) - - -def build_target(platform, platform_headers): - def xcrun_cmd(cmd): - return 'xcrun -sdk %s %s -arch %s' % (platform.sdk, cmd, platform.arch) - - tag='%s-%s' % (platform.sdk, platform.arch) - build_dir = 'build_%s' % tag - mkdir_p(build_dir) - env = dict(CC=xcrun_cmd('clang'), - LD=xcrun_cmd('ld'), - CFLAGS='%s' % (platform.version_min)) - working_dir = os.getcwd() - try: - os.chdir(build_dir) - subprocess.check_call(['../configure', '-host', platform.triple], env=env) - finally: - os.chdir(working_dir) - - for src_dir in [build_dir, os.path.join(build_dir, 'include')]: - copy_files(src_dir, - os.path.join(platform.directory, 'include'), - pattern='*.h', - file_suffix=platform.arch, - prefix=platform.prefix, - suffix=platform.suffix) - - for filename in list_files(src_dir, pattern='*.h'): - platform_headers[filename].add((platform.prefix, platform.arch, platform.suffix)) - - -def make_tramp(): - with open('src/arm/trampoline.S', 'w') as tramp_out: - p = subprocess.Popen(['bash', 'src/arm/gentramp.sh'], stdout=tramp_out) - p.wait() - - -def generate_source_and_headers(generate_osx=True, generate_ios=True): - copy_files('src', 'darwin_common/src', pattern='*.c') - copy_files('include', 'darwin_common/include', pattern='*.h') - - if generate_ios: - make_tramp() - copy_src_platform_files(simulator_platform) - copy_src_platform_files(simulator64_platform) - copy_src_platform_files(device_platform) - copy_src_platform_files(device64_platform) - if generate_osx: - copy_src_platform_files(desktop32_platform) - copy_src_platform_files(desktop64_platform) - - platform_headers = collections.defaultdict(set) - - if generate_ios: - build_target(simulator_platform, platform_headers) - build_target(simulator64_platform, platform_headers) - build_target(device_platform, platform_headers) - build_target(device64_platform, platform_headers) - if generate_osx: - build_target(desktop32_platform, platform_headers) - build_target(desktop64_platform, platform_headers) - - mkdir_p('darwin_common/include') - for header_name, tag_tuples in platform_headers.iteritems(): - basename, suffix = os.path.splitext(header_name) - with open(os.path.join('darwin_common/include', header_name), 'w') as header: - for tag_tuple in tag_tuples: - header.write('%s#include <%s_%s%s>\n%s\n' % (tag_tuple[0], basename, tag_tuple[1], suffix, tag_tuple[2])) - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--only-ios', action='store_true', default=False) - parser.add_argument('--only-osx', action='store_true', default=False) - args = parser.parse_args() - - generate_source_and_headers(generate_osx=not args.only_ios, generate_ios=not args.only_osx) diff --git a/ruby/ext/fiddle/libffi-3.2.1/include/Makefile.am b/ruby/ext/fiddle/libffi-3.2.1/include/Makefile.am deleted file mode 100644 index fd2802497..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/include/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -## Process this with automake to create Makefile.in - -AUTOMAKE_OPTIONS=foreign - -DISTCLEANFILES=ffitarget.h -EXTRA_DIST=ffi.h.in ffi_common.h - -includesdir = $(libdir)/@PACKAGE_NAME@-@PACKAGE_VERSION@/include -nodist_includes_HEADERS = ffi.h ffitarget.h diff --git a/ruby/ext/fiddle/libffi-3.2.1/include/Makefile.in b/ruby/ext/fiddle/libffi-3.2.1/include/Makefile.in deleted file mode 100644 index 9d747e80e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/include/Makefile.in +++ /dev/null @@ -1,587 +0,0 @@ -# Makefile.in generated by automake 1.13.4 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2013 Free Software Foundation, Inc. - -# This Makefile.in 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. - -@SET_MAKE@ - -VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = include -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(srcdir)/ffi.h.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/asmcfi.m4 \ - $(top_srcdir)/m4/ax_append_flag.m4 \ - $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compile_flag.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_configure_args.m4 \ - $(top_srcdir)/m4/ax_enable_builddir.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/fficonfig.h -CONFIG_CLEAN_FILES = ffi.h ffitarget.h -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -SOURCES = -DIST_SOURCES = -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(includesdir)" -HEADERS = $(nodist_includes_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AM_LTLDFLAGS = @AM_LTLDFLAGS@ -AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@ -FGREP = @FGREP@ -GREP = @GREP@ -HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ -HAVE_LONG_DOUBLE_VARIANT = @HAVE_LONG_DOUBLE_VARIANT@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TARGET = @TARGET@ -TARGETDIR = @TARGETDIR@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_enable_builddir_sed = @ax_enable_builddir_sed@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sys_symbol_underscore = @sys_symbol_underscore@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -toolexecdir = @toolexecdir@ -toolexeclibdir = @toolexeclibdir@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -DISTCLEANFILES = ffitarget.h -EXTRA_DIST = ffi.h.in ffi_common.h -includesdir = $(libdir)/@PACKAGE_NAME@-@PACKAGE_VERSION@/include -nodist_includes_HEADERS = ffi.h ffitarget.h -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign include/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -ffi.h: $(top_builddir)/config.status $(srcdir)/ffi.h.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-nodist_includesHEADERS: $(nodist_includes_HEADERS) - @$(NORMAL_INSTALL) - @list='$(nodist_includes_HEADERS)'; test -n "$(includesdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(includesdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(includesdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \ - done - -uninstall-nodist_includesHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nodist_includes_HEADERS)'; test -n "$(includesdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(includesdir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(includesdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-nodist_includesHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-nodist_includesHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool cscopelist-am ctags ctags-am distclean \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man \ - install-nodist_includesHEADERS install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-nodist_includesHEADERS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/ruby/ext/fiddle/libffi-3.2.1/include/ffi.h.in b/ruby/ext/fiddle/libffi-3.2.1/include/ffi.h.in deleted file mode 100644 index a20be0375..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/include/ffi.h.in +++ /dev/null @@ -1,492 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - libffi @VERSION@ - Copyright (c) 2011, 2014 Anthony Green - - Copyright (c) 1996-2003, 2007, 2008 Red Hat, 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: - - 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. - - ----------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------- - The basic API is described in the README file. - - The raw API is designed to bypass some of the argument packing - and unpacking on architectures for which it can be avoided. - - The closure API allows interpreted functions to be packaged up - inside a C function pointer, so that they can be called as C functions, - with no understanding on the client side that they are interpreted. - It can also be used in other cases in which it is necessary to package - up a user specified parameter and a function pointer as a single - function pointer. - - The closure API must be implemented in order to get its functionality, - e.g. for use by gij. Routines are provided to emulate the raw API - if the underlying platform doesn't allow faster implementation. - - More details on the raw and cloure API can be found in: - - http://gcc.gnu.org/ml/java/1999-q3/msg00138.html - - and - - http://gcc.gnu.org/ml/java/1999-q3/msg00174.html - -------------------------------------------------------------------- */ - -#ifndef LIBFFI_H -#define LIBFFI_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Specify which architecture libffi is configured for. */ -#ifndef @TARGET@ -#define @TARGET@ -#endif - -/* ---- System configuration information --------------------------------- */ - -#include - -#ifndef LIBFFI_ASM - -#if defined(_MSC_VER) && !defined(__clang__) -#define __attribute__(X) -#endif - -#include -#include - -/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). - But we can find it either under the correct ANSI name, or under GNU - C's internal name. */ - -#define FFI_64_BIT_MAX 9223372036854775807 - -#ifdef LONG_LONG_MAX -# define FFI_LONG_LONG_MAX LONG_LONG_MAX -#else -# ifdef LLONG_MAX -# define FFI_LONG_LONG_MAX LLONG_MAX -# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -# undef FFI_64_BIT_MAX -# define FFI_64_BIT_MAX 9223372036854775807LL -# endif /* _AIX52 or newer */ -# else -# ifdef __GNUC__ -# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -# endif -# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -# ifndef __PPC64__ -# if defined (__IBMC__) || defined (__IBMCPP__) -# define FFI_LONG_LONG_MAX LONGLONG_MAX -# endif -# endif /* __PPC64__ */ -# undef FFI_64_BIT_MAX -# define FFI_64_BIT_MAX 9223372036854775807LL -# endif -# ifdef _MSC_VER -# define FFI_LONG_LONG_MAX _I64_MAX -# undef FFI_64_BIT_MAX -# define FFI_64_BIT_MAX 9223372036854775807I64 -# endif -# endif -#endif - -/* The closure code assumes that this works on pointers, i.e. a size_t */ -/* can hold a pointer. */ - -typedef struct _ffi_type -{ - size_t size; - unsigned short alignment; - unsigned short type; - struct _ffi_type **elements; -} ffi_type; - -#ifndef LIBFFI_HIDE_BASIC_TYPES -#if SCHAR_MAX == 127 -# define ffi_type_uchar ffi_type_uint8 -# define ffi_type_schar ffi_type_sint8 -#else - #error "char size not supported" -#endif - -#if SHRT_MAX == 32767 -# define ffi_type_ushort ffi_type_uint16 -# define ffi_type_sshort ffi_type_sint16 -#elif SHRT_MAX == 2147483647 -# define ffi_type_ushort ffi_type_uint32 -# define ffi_type_sshort ffi_type_sint32 -#else - #error "short size not supported" -#endif - -#if INT_MAX == 32767 -# define ffi_type_uint ffi_type_uint16 -# define ffi_type_sint ffi_type_sint16 -#elif INT_MAX == 2147483647 -# define ffi_type_uint ffi_type_uint32 -# define ffi_type_sint ffi_type_sint32 -#elif INT_MAX == 9223372036854775807 -# define ffi_type_uint ffi_type_uint64 -# define ffi_type_sint ffi_type_sint64 -#else - #error "int size not supported" -#endif - -#if LONG_MAX == 2147483647 -# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX - #error "no 64-bit data type supported" -# endif -#elif LONG_MAX != FFI_64_BIT_MAX - #error "long size not supported" -#endif - -#if LONG_MAX == 2147483647 -# define ffi_type_ulong ffi_type_uint32 -# define ffi_type_slong ffi_type_sint32 -#elif LONG_MAX == FFI_64_BIT_MAX -# define ffi_type_ulong ffi_type_uint64 -# define ffi_type_slong ffi_type_sint64 -#else - #error "long size not supported" -#endif - -/* Need minimal decorations for DLLs to works on Windows. */ -/* GCC has autoimport and autoexport. Rely on Libtool to */ -/* help MSVC export from a DLL, but always declare data */ -/* to be imported for MSVC clients. This costs an extra */ -/* indirection for MSVC clients using the static version */ -/* of the library, but don't worry about that. Besides, */ -/* as a workaround, they can define FFI_BUILDING if they */ -/* *know* they are going to link with the static library. */ -#if defined _MSC_VER && !defined FFI_BUILDING -#define FFI_EXTERN extern __declspec(dllimport) -#else -#define FFI_EXTERN extern -#endif - -/* These are defined in types.c */ -FFI_EXTERN ffi_type ffi_type_void; -FFI_EXTERN ffi_type ffi_type_uint8; -FFI_EXTERN ffi_type ffi_type_sint8; -FFI_EXTERN ffi_type ffi_type_uint16; -FFI_EXTERN ffi_type ffi_type_sint16; -FFI_EXTERN ffi_type ffi_type_uint32; -FFI_EXTERN ffi_type ffi_type_sint32; -FFI_EXTERN ffi_type ffi_type_uint64; -FFI_EXTERN ffi_type ffi_type_sint64; -FFI_EXTERN ffi_type ffi_type_float; -FFI_EXTERN ffi_type ffi_type_double; -FFI_EXTERN ffi_type ffi_type_pointer; - -#if @HAVE_LONG_DOUBLE@ -FFI_EXTERN ffi_type ffi_type_longdouble; -#else -#define ffi_type_longdouble ffi_type_double -#endif - -#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -FFI_EXTERN ffi_type ffi_type_complex_float; -FFI_EXTERN ffi_type ffi_type_complex_double; -#if @HAVE_LONG_DOUBLE@ -FFI_EXTERN ffi_type ffi_type_complex_longdouble; -#else -#define ffi_type_complex_longdouble ffi_type_complex_double -#endif -#endif -#endif /* LIBFFI_HIDE_BASIC_TYPES */ - -typedef enum { - FFI_OK = 0, - FFI_BAD_TYPEDEF, - FFI_BAD_ABI -} ffi_status; - -typedef unsigned FFI_TYPE; - -typedef struct { - ffi_abi abi; - unsigned nargs; - ffi_type **arg_types; - ffi_type *rtype; - unsigned bytes; - unsigned flags; -#ifdef FFI_EXTRA_CIF_FIELDS - FFI_EXTRA_CIF_FIELDS; -#endif -} ffi_cif; - -#if @HAVE_LONG_DOUBLE_VARIANT@ -/* Used to adjust size/alignment of ffi types. */ -void ffi_prep_types (ffi_abi abi); -#endif - -/* Used internally, but overridden by some architectures */ -ffi_status ffi_prep_cif_core(ffi_cif *cif, - ffi_abi abi, - unsigned int isvariadic, - unsigned int nfixedargs, - unsigned int ntotalargs, - ffi_type *rtype, - ffi_type **atypes); - -/* ---- Definitions for the raw API -------------------------------------- */ - -#ifndef FFI_SIZEOF_ARG -# if LONG_MAX == 2147483647 -# define FFI_SIZEOF_ARG 4 -# elif LONG_MAX == FFI_64_BIT_MAX -# define FFI_SIZEOF_ARG 8 -# endif -#endif - -#ifndef FFI_SIZEOF_JAVA_RAW -# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -#endif - -typedef union { - ffi_sarg sint; - ffi_arg uint; - float flt; - char data[FFI_SIZEOF_ARG]; - void* ptr; -} ffi_raw; - -#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -/* This is a special case for mips64/n32 ABI (and perhaps others) where - sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -typedef union { - signed int sint; - unsigned int uint; - float flt; - char data[FFI_SIZEOF_JAVA_RAW]; - void* ptr; -} ffi_java_raw; -#else -typedef ffi_raw ffi_java_raw; -#endif - - -void ffi_raw_call (ffi_cif *cif, - void (*fn)(void), - void *rvalue, - ffi_raw *avalue); - -void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -size_t ffi_raw_size (ffi_cif *cif); - -/* This is analogous to the raw API, except it uses Java parameter */ -/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -/* longs and doubles are followed by an empty 64-bit word. */ - -void ffi_java_raw_call (ffi_cif *cif, - void (*fn)(void), - void *rvalue, - ffi_java_raw *avalue); - -void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -size_t ffi_java_raw_size (ffi_cif *cif); - -/* ---- Definitions for closures ----------------------------------------- */ - -#if FFI_CLOSURES - -#ifdef _MSC_VER -__declspec(align(8)) -#endif -typedef struct { -#if @FFI_EXEC_TRAMPOLINE_TABLE@ - void *trampoline_table; - void *trampoline_table_entry; -#else - char tramp[FFI_TRAMPOLINE_SIZE]; -#endif - ffi_cif *cif; - void (*fun)(ffi_cif*,void*,void**,void*); - void *user_data; -#ifdef __GNUC__ -} ffi_closure __attribute__((aligned (8))); -#else -} ffi_closure; -# ifdef __sgi -# pragma pack 0 -# endif -#endif - -void *ffi_closure_alloc (size_t size, void **code); -void ffi_closure_free (void *); - -ffi_status -ffi_prep_closure (ffi_closure*, - ffi_cif *, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data); - -ffi_status -ffi_prep_closure_loc (ffi_closure*, - ffi_cif *, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void*codeloc); - -#ifdef __sgi -# pragma pack 8 -#endif -typedef struct { -#if @FFI_EXEC_TRAMPOLINE_TABLE@ - void *trampoline_table; - void *trampoline_table_entry; -#else - char tramp[FFI_TRAMPOLINE_SIZE]; -#endif - ffi_cif *cif; - -#if !FFI_NATIVE_RAW_API - - /* if this is enabled, then a raw closure has the same layout - as a regular closure. We use this to install an intermediate - handler to do the transaltion, void** -> ffi_raw*. */ - - void (*translate_args)(ffi_cif*,void*,void**,void*); - void *this_closure; - -#endif - - void (*fun)(ffi_cif*,void*,ffi_raw*,void*); - void *user_data; - -} ffi_raw_closure; - -typedef struct { -#if @FFI_EXEC_TRAMPOLINE_TABLE@ - void *trampoline_table; - void *trampoline_table_entry; -#else - char tramp[FFI_TRAMPOLINE_SIZE]; -#endif - - ffi_cif *cif; - -#if !FFI_NATIVE_RAW_API - - /* if this is enabled, then a raw closure has the same layout - as a regular closure. We use this to install an intermediate - handler to do the transaltion, void** -> ffi_raw*. */ - - void (*translate_args)(ffi_cif*,void*,void**,void*); - void *this_closure; - -#endif - - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); - void *user_data; - -} ffi_java_raw_closure; - -ffi_status -ffi_prep_raw_closure (ffi_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data); - -ffi_status -ffi_prep_raw_closure_loc (ffi_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data, - void *codeloc); - -ffi_status -ffi_prep_java_raw_closure (ffi_java_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), - void *user_data); - -ffi_status -ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), - void *user_data, - void *codeloc); - -#endif /* FFI_CLOSURES */ - -/* ---- Public interface definition -------------------------------------- */ - -ffi_status ffi_prep_cif(ffi_cif *cif, - ffi_abi abi, - unsigned int nargs, - ffi_type *rtype, - ffi_type **atypes); - -ffi_status ffi_prep_cif_var(ffi_cif *cif, - ffi_abi abi, - unsigned int nfixedargs, - unsigned int ntotalargs, - ffi_type *rtype, - ffi_type **atypes); - -void ffi_call(ffi_cif *cif, - void (*fn)(void), - void *rvalue, - void **avalue); - -/* Useful for eliminating compiler warnings */ -#define FFI_FN(f) ((void (*)(void))f) - -/* ---- Definitions shared with assembly code ---------------------------- */ - -#endif - -/* If these change, update src/mips/ffitarget.h. */ -#define FFI_TYPE_VOID 0 -#define FFI_TYPE_INT 1 -#define FFI_TYPE_FLOAT 2 -#define FFI_TYPE_DOUBLE 3 -#if @HAVE_LONG_DOUBLE@ -#define FFI_TYPE_LONGDOUBLE 4 -#else -#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -#endif -#define FFI_TYPE_UINT8 5 -#define FFI_TYPE_SINT8 6 -#define FFI_TYPE_UINT16 7 -#define FFI_TYPE_SINT16 8 -#define FFI_TYPE_UINT32 9 -#define FFI_TYPE_SINT32 10 -#define FFI_TYPE_UINT64 11 -#define FFI_TYPE_SINT64 12 -#define FFI_TYPE_STRUCT 13 -#define FFI_TYPE_POINTER 14 -#define FFI_TYPE_COMPLEX 15 - -/* This should always refer to the last type code (for sanity checks) */ -#define FFI_TYPE_LAST FFI_TYPE_COMPLEX - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/include/ffi_common.h b/ruby/ext/fiddle/libffi-3.2.1/include/ffi_common.h deleted file mode 100644 index 37f5a9e92..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/include/ffi_common.h +++ /dev/null @@ -1,132 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green - Copyright (C) 2007 Free Software Foundation, Inc - Copyright (c) 1996 Red Hat, Inc. - - Common internal definitions and macros. Only necessary for building - libffi. - ----------------------------------------------------------------------- */ - -#ifndef FFI_COMMON_H -#define FFI_COMMON_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/* Do not move this. Some versions of AIX are very picky about where - this is positioned. */ -#ifdef __GNUC__ -# if HAVE_ALLOCA_H -# include -# else - /* mingw64 defines this already in malloc.h. */ -# ifndef alloca -# define alloca __builtin_alloca -# endif -# endif -# define MAYBE_UNUSED __attribute__((__unused__)) -#else -# define MAYBE_UNUSED -# if HAVE_ALLOCA_H -# include -# else -# ifdef _AIX -# pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -# ifdef _MSC_VER -# define alloca _alloca -# else -char *alloca (); -# endif -# endif -# endif -# endif -#endif - -/* Check for the existence of memcpy. */ -#if STDC_HEADERS -# include -#else -# ifndef HAVE_MEMCPY -# define memcpy(d, s, n) bcopy ((s), (d), (n)) -# endif -#endif - -#if defined(FFI_DEBUG) -#include -#endif - -#ifdef FFI_DEBUG -void ffi_assert(char *expr, char *file, int line); -void ffi_stop_here(void); -void ffi_type_test(ffi_type *a, char *file, int line); - -#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) -#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) -#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) -#else -#define FFI_ASSERT(x) -#define FFI_ASSERT_AT(x, f, l) -#define FFI_ASSERT_VALID_TYPE(x) -#endif - -#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) -#define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif); -ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, - unsigned int nfixedargs, unsigned int ntotalargs); - -/* Extended cif, used in callback from assembly routine */ -typedef struct -{ - ffi_cif *cif; - void *rvalue; - void **avalue; -} extended_cif; - -/* Terse sized type definitions. */ -#if defined(_MSC_VER) || defined(__sgi) || defined(__SUNPRO_C) -typedef unsigned char UINT8; -typedef signed char SINT8; -typedef unsigned short UINT16; -typedef signed short SINT16; -typedef unsigned int UINT32; -typedef signed int SINT32; -# ifdef _MSC_VER -typedef unsigned __int64 UINT64; -typedef signed __int64 SINT64; -# else -# include -typedef uint64_t UINT64; -typedef int64_t SINT64; -# endif -#else -typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); -typedef signed int SINT8 __attribute__((__mode__(__QI__))); -typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); -typedef signed int SINT16 __attribute__((__mode__(__HI__))); -typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); -typedef signed int SINT32 __attribute__((__mode__(__SI__))); -typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); -typedef signed int SINT64 __attribute__((__mode__(__DI__))); -#endif - -typedef float FLOAT32; - -#ifndef __GNUC__ -#define __builtin_expect(x, expected_value) (x) -#endif -#define LIKELY(x) __builtin_expect(!!(x),1) -#define UNLIKELY(x) __builtin_expect((x)!=0,0) - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/install-sh b/ruby/ext/fiddle/libffi-3.2.1/install-sh deleted file mode 100755 index 377bb8687..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/install-sh +++ /dev/null @@ -1,527 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2011-11-20.07; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# 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 -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# 'make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call 'install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - do_exit='(exit $ret); exit $ret' - trap "ret=129; $do_exit" 1 - trap "ret=130; $do_exit" 2 - trap "ret=141; $do_exit" 13 - trap "ret=143; $do_exit" 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names problematic for 'test' and other utilities. - case $src in - -* | [=\(\)!]) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - dst=$dst_arg - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test X"$d" = X && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/ruby/ext/fiddle/libffi-3.2.1/libffi.pc.in b/ruby/ext/fiddle/libffi-3.2.1/libffi.pc.in deleted file mode 100644 index edf6fde5e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/libffi.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -toolexeclibdir=@toolexeclibdir@ -includedir=${libdir}/@PACKAGE_NAME@-@PACKAGE_VERSION@/include - -Name: @PACKAGE_NAME@ -Description: Library supporting Foreign Function Interfaces -Version: @PACKAGE_VERSION@ -Libs: -L${toolexeclibdir} -lffi -Cflags: -I${includedir} diff --git a/ruby/ext/fiddle/libffi-3.2.1/libffi.xcodeproj/project.pbxproj b/ruby/ext/fiddle/libffi-3.2.1/libffi.xcodeproj/project.pbxproj deleted file mode 100644 index 1cf396ffa..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/libffi.xcodeproj/project.pbxproj +++ /dev/null @@ -1,637 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - DBFA714A187F1D8600A76262 /* ffi.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA713E187F1D8600A76262 /* ffi.h */; }; - DBFA714B187F1D8600A76262 /* ffi_common.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA713F187F1D8600A76262 /* ffi_common.h */; }; - DBFA714C187F1D8600A76262 /* fficonfig.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7140187F1D8600A76262 /* fficonfig.h */; }; - DBFA714D187F1D8600A76262 /* ffitarget.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7141187F1D8600A76262 /* ffitarget.h */; }; - DBFA714E187F1D8600A76262 /* closures.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7143187F1D8600A76262 /* closures.c */; }; - DBFA714F187F1D8600A76262 /* closures.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7143187F1D8600A76262 /* closures.c */; }; - DBFA7156187F1D8600A76262 /* prep_cif.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7147187F1D8600A76262 /* prep_cif.c */; }; - DBFA7157187F1D8600A76262 /* prep_cif.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7147187F1D8600A76262 /* prep_cif.c */; }; - DBFA7158187F1D8600A76262 /* raw_api.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7148187F1D8600A76262 /* raw_api.c */; }; - DBFA7159187F1D8600A76262 /* raw_api.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7148187F1D8600A76262 /* raw_api.c */; }; - DBFA715A187F1D8600A76262 /* types.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7149187F1D8600A76262 /* types.c */; }; - DBFA715B187F1D8600A76262 /* types.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7149187F1D8600A76262 /* types.c */; }; - DBFA7177187F1D9B00A76262 /* ffi_arm64.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA716C187F1D9B00A76262 /* ffi_arm64.c */; }; - DBFA7178187F1D9B00A76262 /* sysv_arm64.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA716D187F1D9B00A76262 /* sysv_arm64.S */; }; - DBFA7179187F1D9B00A76262 /* ffi_armv7.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA716F187F1D9B00A76262 /* ffi_armv7.c */; }; - DBFA717A187F1D9B00A76262 /* sysv_armv7.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7170187F1D9B00A76262 /* sysv_armv7.S */; }; - DBFA717B187F1D9B00A76262 /* trampoline_armv7.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7171187F1D9B00A76262 /* trampoline_armv7.S */; }; - DBFA717C187F1D9B00A76262 /* darwin64_x86_64.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7173187F1D9B00A76262 /* darwin64_x86_64.S */; }; - DBFA717D187F1D9B00A76262 /* darwin_i386.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7174187F1D9B00A76262 /* darwin_i386.S */; }; - DBFA717E187F1D9B00A76262 /* ffi64_x86_64.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7175187F1D9B00A76262 /* ffi64_x86_64.c */; }; - DBFA717F187F1D9B00A76262 /* ffi_i386.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA7176187F1D9B00A76262 /* ffi_i386.c */; }; - DBFA718E187F1DA100A76262 /* ffi_i386.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7182187F1DA100A76262 /* ffi_i386.h */; }; - DBFA718F187F1DA100A76262 /* ffi_x86_64.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7183187F1DA100A76262 /* ffi_x86_64.h */; }; - DBFA7190187F1DA100A76262 /* fficonfig_i386.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7184187F1DA100A76262 /* fficonfig_i386.h */; }; - DBFA7191187F1DA100A76262 /* fficonfig_x86_64.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7185187F1DA100A76262 /* fficonfig_x86_64.h */; }; - DBFA7192187F1DA100A76262 /* ffitarget_i386.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7186187F1DA100A76262 /* ffitarget_i386.h */; }; - DBFA7193187F1DA100A76262 /* ffitarget_x86_64.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFA7187187F1DA100A76262 /* ffitarget_x86_64.h */; }; - DBFA7194187F1DA100A76262 /* darwin64_x86_64.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA718A187F1DA100A76262 /* darwin64_x86_64.S */; }; - DBFA7195187F1DA100A76262 /* darwin_i386.S in Sources */ = {isa = PBXBuildFile; fileRef = DBFA718B187F1DA100A76262 /* darwin_i386.S */; }; - DBFA7196187F1DA100A76262 /* ffi64_x86_64.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA718C187F1DA100A76262 /* ffi64_x86_64.c */; }; - DBFA7197187F1DA100A76262 /* ffi_i386.c in Sources */ = {isa = PBXBuildFile; fileRef = DBFA718D187F1DA100A76262 /* ffi_i386.c */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - DB13B1641849DF1E0010F42D /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 8; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - DB13B1661849DF1E0010F42D /* libffi.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libffi.a; sourceTree = BUILT_PRODUCTS_DIR; }; - DB13B1911849DF510010F42D /* ffi.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = ffi.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - DBFA713E187F1D8600A76262 /* ffi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi.h; sourceTree = ""; }; - DBFA713F187F1D8600A76262 /* ffi_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_common.h; sourceTree = ""; }; - DBFA7140187F1D8600A76262 /* fficonfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig.h; sourceTree = ""; }; - DBFA7141187F1D8600A76262 /* ffitarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget.h; sourceTree = ""; }; - DBFA7143187F1D8600A76262 /* closures.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = closures.c; sourceTree = ""; }; - DBFA7145187F1D8600A76262 /* dlmalloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dlmalloc.c; sourceTree = ""; }; - DBFA7147187F1D8600A76262 /* prep_cif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = prep_cif.c; sourceTree = ""; }; - DBFA7148187F1D8600A76262 /* raw_api.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = raw_api.c; sourceTree = ""; }; - DBFA7149187F1D8600A76262 /* types.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = types.c; sourceTree = ""; }; - DBFA715E187F1D9B00A76262 /* ffi_arm64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_arm64.h; sourceTree = ""; }; - DBFA715F187F1D9B00A76262 /* ffi_armv7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_armv7.h; sourceTree = ""; }; - DBFA7160187F1D9B00A76262 /* ffi_i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_i386.h; sourceTree = ""; }; - DBFA7161187F1D9B00A76262 /* ffi_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_x86_64.h; sourceTree = ""; }; - DBFA7162187F1D9B00A76262 /* fficonfig_arm64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig_arm64.h; sourceTree = ""; }; - DBFA7163187F1D9B00A76262 /* fficonfig_armv7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig_armv7.h; sourceTree = ""; }; - DBFA7164187F1D9B00A76262 /* fficonfig_i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig_i386.h; sourceTree = ""; }; - DBFA7165187F1D9B00A76262 /* fficonfig_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig_x86_64.h; sourceTree = ""; }; - DBFA7166187F1D9B00A76262 /* ffitarget_arm64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget_arm64.h; sourceTree = ""; }; - DBFA7167187F1D9B00A76262 /* ffitarget_armv7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget_armv7.h; sourceTree = ""; }; - DBFA7168187F1D9B00A76262 /* ffitarget_i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget_i386.h; sourceTree = ""; }; - DBFA7169187F1D9B00A76262 /* ffitarget_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget_x86_64.h; sourceTree = ""; }; - DBFA716C187F1D9B00A76262 /* ffi_arm64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffi_arm64.c; sourceTree = ""; }; - DBFA716D187F1D9B00A76262 /* sysv_arm64.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = sysv_arm64.S; sourceTree = ""; }; - DBFA716F187F1D9B00A76262 /* ffi_armv7.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffi_armv7.c; sourceTree = ""; }; - DBFA7170187F1D9B00A76262 /* sysv_armv7.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = sysv_armv7.S; sourceTree = ""; }; - DBFA7171187F1D9B00A76262 /* trampoline_armv7.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = trampoline_armv7.S; sourceTree = ""; }; - DBFA7173187F1D9B00A76262 /* darwin64_x86_64.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = darwin64_x86_64.S; sourceTree = ""; }; - DBFA7174187F1D9B00A76262 /* darwin_i386.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = darwin_i386.S; sourceTree = ""; }; - DBFA7175187F1D9B00A76262 /* ffi64_x86_64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffi64_x86_64.c; sourceTree = ""; }; - DBFA7176187F1D9B00A76262 /* ffi_i386.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffi_i386.c; sourceTree = ""; }; - DBFA7182187F1DA100A76262 /* ffi_i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_i386.h; sourceTree = ""; }; - DBFA7183187F1DA100A76262 /* ffi_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffi_x86_64.h; sourceTree = ""; }; - DBFA7184187F1DA100A76262 /* fficonfig_i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig_i386.h; sourceTree = ""; }; - DBFA7185187F1DA100A76262 /* fficonfig_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fficonfig_x86_64.h; sourceTree = ""; }; - DBFA7186187F1DA100A76262 /* ffitarget_i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget_i386.h; sourceTree = ""; }; - DBFA7187187F1DA100A76262 /* ffitarget_x86_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffitarget_x86_64.h; sourceTree = ""; }; - DBFA718A187F1DA100A76262 /* darwin64_x86_64.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = darwin64_x86_64.S; sourceTree = ""; }; - DBFA718B187F1DA100A76262 /* darwin_i386.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = darwin_i386.S; sourceTree = ""; }; - DBFA718C187F1DA100A76262 /* ffi64_x86_64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffi64_x86_64.c; sourceTree = ""; }; - DBFA718D187F1DA100A76262 /* ffi_i386.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffi_i386.c; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXGroup section */ - DB13B15B1849DEB70010F42D = { - isa = PBXGroup; - children = ( - DBFA713C187F1D8600A76262 /* darwin_common */, - DBFA715C187F1D9B00A76262 /* darwin_ios */, - DBFA7180187F1DA100A76262 /* darwin_osx */, - DB13B1671849DF1E0010F42D /* Products */, - ); - sourceTree = ""; - }; - DB13B1671849DF1E0010F42D /* Products */ = { - isa = PBXGroup; - children = ( - DB13B1661849DF1E0010F42D /* libffi.a */, - DB13B1911849DF510010F42D /* ffi.dylib */, - ); - name = Products; - sourceTree = ""; - }; - DBFA713C187F1D8600A76262 /* darwin_common */ = { - isa = PBXGroup; - children = ( - DBFA713D187F1D8600A76262 /* include */, - DBFA7142187F1D8600A76262 /* src */, - ); - path = "darwin_common"; - sourceTree = ""; - }; - DBFA713D187F1D8600A76262 /* include */ = { - isa = PBXGroup; - children = ( - DBFA713E187F1D8600A76262 /* ffi.h */, - DBFA713F187F1D8600A76262 /* ffi_common.h */, - DBFA7140187F1D8600A76262 /* fficonfig.h */, - DBFA7141187F1D8600A76262 /* ffitarget.h */, - ); - path = include; - sourceTree = ""; - }; - DBFA7142187F1D8600A76262 /* src */ = { - isa = PBXGroup; - children = ( - DBFA7143187F1D8600A76262 /* closures.c */, - DBFA7145187F1D8600A76262 /* dlmalloc.c */, - DBFA7147187F1D8600A76262 /* prep_cif.c */, - DBFA7148187F1D8600A76262 /* raw_api.c */, - DBFA7149187F1D8600A76262 /* types.c */, - ); - path = src; - sourceTree = ""; - }; - DBFA715C187F1D9B00A76262 /* darwin_ios */ = { - isa = PBXGroup; - children = ( - DBFA715D187F1D9B00A76262 /* include */, - DBFA716A187F1D9B00A76262 /* src */, - ); - path = "darwin_ios"; - sourceTree = ""; - }; - DBFA715D187F1D9B00A76262 /* include */ = { - isa = PBXGroup; - children = ( - DBFA715E187F1D9B00A76262 /* ffi_arm64.h */, - DBFA715F187F1D9B00A76262 /* ffi_armv7.h */, - DBFA7160187F1D9B00A76262 /* ffi_i386.h */, - DBFA7161187F1D9B00A76262 /* ffi_x86_64.h */, - DBFA7162187F1D9B00A76262 /* fficonfig_arm64.h */, - DBFA7163187F1D9B00A76262 /* fficonfig_armv7.h */, - DBFA7164187F1D9B00A76262 /* fficonfig_i386.h */, - DBFA7165187F1D9B00A76262 /* fficonfig_x86_64.h */, - DBFA7166187F1D9B00A76262 /* ffitarget_arm64.h */, - DBFA7167187F1D9B00A76262 /* ffitarget_armv7.h */, - DBFA7168187F1D9B00A76262 /* ffitarget_i386.h */, - DBFA7169187F1D9B00A76262 /* ffitarget_x86_64.h */, - ); - path = include; - sourceTree = ""; - }; - DBFA716A187F1D9B00A76262 /* src */ = { - isa = PBXGroup; - children = ( - DBFA716B187F1D9B00A76262 /* aarch64 */, - DBFA716E187F1D9B00A76262 /* arm */, - DBFA7172187F1D9B00A76262 /* x86 */, - ); - path = src; - sourceTree = ""; - }; - DBFA716B187F1D9B00A76262 /* aarch64 */ = { - isa = PBXGroup; - children = ( - DBFA716C187F1D9B00A76262 /* ffi_arm64.c */, - DBFA716D187F1D9B00A76262 /* sysv_arm64.S */, - ); - path = aarch64; - sourceTree = ""; - }; - DBFA716E187F1D9B00A76262 /* arm */ = { - isa = PBXGroup; - children = ( - DBFA716F187F1D9B00A76262 /* ffi_armv7.c */, - DBFA7170187F1D9B00A76262 /* sysv_armv7.S */, - DBFA7171187F1D9B00A76262 /* trampoline_armv7.S */, - ); - path = arm; - sourceTree = ""; - }; - DBFA7172187F1D9B00A76262 /* x86 */ = { - isa = PBXGroup; - children = ( - DBFA7173187F1D9B00A76262 /* darwin64_x86_64.S */, - DBFA7174187F1D9B00A76262 /* darwin_i386.S */, - DBFA7175187F1D9B00A76262 /* ffi64_x86_64.c */, - DBFA7176187F1D9B00A76262 /* ffi_i386.c */, - ); - path = x86; - sourceTree = ""; - }; - DBFA7180187F1DA100A76262 /* darwin_osx */ = { - isa = PBXGroup; - children = ( - DBFA7181187F1DA100A76262 /* include */, - DBFA7188187F1DA100A76262 /* src */, - ); - path = "darwin_osx"; - sourceTree = ""; - }; - DBFA7181187F1DA100A76262 /* include */ = { - isa = PBXGroup; - children = ( - DBFA7182187F1DA100A76262 /* ffi_i386.h */, - DBFA7183187F1DA100A76262 /* ffi_x86_64.h */, - DBFA7184187F1DA100A76262 /* fficonfig_i386.h */, - DBFA7185187F1DA100A76262 /* fficonfig_x86_64.h */, - DBFA7186187F1DA100A76262 /* ffitarget_i386.h */, - DBFA7187187F1DA100A76262 /* ffitarget_x86_64.h */, - ); - path = include; - sourceTree = ""; - }; - DBFA7188187F1DA100A76262 /* src */ = { - isa = PBXGroup; - children = ( - DBFA7189187F1DA100A76262 /* x86 */, - ); - path = src; - sourceTree = ""; - }; - DBFA7189187F1DA100A76262 /* x86 */ = { - isa = PBXGroup; - children = ( - DBFA718A187F1DA100A76262 /* darwin64_x86_64.S */, - DBFA718B187F1DA100A76262 /* darwin_i386.S */, - DBFA718C187F1DA100A76262 /* ffi64_x86_64.c */, - DBFA718D187F1DA100A76262 /* ffi_i386.c */, - ); - path = x86; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - DB13B18F1849DF510010F42D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - DBFA714C187F1D8600A76262 /* fficonfig.h in Headers */, - DBFA714D187F1D8600A76262 /* ffitarget.h in Headers */, - DBFA714A187F1D8600A76262 /* ffi.h in Headers */, - DBFA718F187F1DA100A76262 /* ffi_x86_64.h in Headers */, - DBFA7191187F1DA100A76262 /* fficonfig_x86_64.h in Headers */, - DBFA718E187F1DA100A76262 /* ffi_i386.h in Headers */, - DBFA7190187F1DA100A76262 /* fficonfig_i386.h in Headers */, - DBFA714B187F1D8600A76262 /* ffi_common.h in Headers */, - DBFA7193187F1DA100A76262 /* ffitarget_x86_64.h in Headers */, - DBFA7192187F1DA100A76262 /* ffitarget_i386.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - DB13B1651849DF1E0010F42D /* libffi-iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = DB13B18B1849DF1E0010F42D /* Build configuration list for PBXNativeTarget "libffi-iOS" */; - buildPhases = ( - DB13B3051849E01C0010F42D /* ShellScript */, - DB13B1621849DF1E0010F42D /* Sources */, - DB13B1641849DF1E0010F42D /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "libffi-iOS"; - productName = ffi; - productReference = DB13B1661849DF1E0010F42D /* libffi.a */; - productType = "com.apple.product-type.library.static"; - }; - DB13B1901849DF510010F42D /* libffi-Mac */ = { - isa = PBXNativeTarget; - buildConfigurationList = DB13B1B01849DF520010F42D /* Build configuration list for PBXNativeTarget "libffi-Mac" */; - buildPhases = ( - DB13B3061849E0490010F42D /* ShellScript */, - DB13B18D1849DF510010F42D /* Sources */, - DB13B18F1849DF510010F42D /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "libffi-Mac"; - productName = ffi; - productReference = DB13B1911849DF510010F42D /* ffi.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - DB13B15C1849DEB70010F42D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0510; - }; - buildConfigurationList = DB13B15F1849DEB70010F42D /* Build configuration list for PBXProject "libffi" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = DB13B15B1849DEB70010F42D; - productRefGroup = DB13B1671849DF1E0010F42D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - DB13B1651849DF1E0010F42D /* libffi-iOS */, - DB13B1901849DF510010F42D /* libffi-Mac */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXShellScriptBuildPhase section */ - DB13B3051849E01C0010F42D /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/usr/bin/python generate-darwin-source-and-headers.py --only-ios"; - }; - DB13B3061849E0490010F42D /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/usr/bin/python generate-darwin-source-and-headers.py --only-osx"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - DB13B1621849DF1E0010F42D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DBFA717E187F1D9B00A76262 /* ffi64_x86_64.c in Sources */, - DBFA7179187F1D9B00A76262 /* ffi_armv7.c in Sources */, - DBFA717B187F1D9B00A76262 /* trampoline_armv7.S in Sources */, - DBFA714E187F1D8600A76262 /* closures.c in Sources */, - DBFA717A187F1D9B00A76262 /* sysv_armv7.S in Sources */, - DBFA717D187F1D9B00A76262 /* darwin_i386.S in Sources */, - DBFA7156187F1D8600A76262 /* prep_cif.c in Sources */, - DBFA717F187F1D9B00A76262 /* ffi_i386.c in Sources */, - DBFA7158187F1D8600A76262 /* raw_api.c in Sources */, - DBFA7178187F1D9B00A76262 /* sysv_arm64.S in Sources */, - DBFA717C187F1D9B00A76262 /* darwin64_x86_64.S in Sources */, - DBFA715A187F1D8600A76262 /* types.c in Sources */, - DBFA7177187F1D9B00A76262 /* ffi_arm64.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DB13B18D1849DF510010F42D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DBFA7196187F1DA100A76262 /* ffi64_x86_64.c in Sources */, - DBFA7195187F1DA100A76262 /* darwin_i386.S in Sources */, - DBFA7157187F1D8600A76262 /* prep_cif.c in Sources */, - DBFA7197187F1DA100A76262 /* ffi_i386.c in Sources */, - DBFA715B187F1D8600A76262 /* types.c in Sources */, - DBFA7159187F1D8600A76262 /* raw_api.c in Sources */, - DBFA714F187F1D8600A76262 /* closures.c in Sources */, - DBFA7194187F1DA100A76262 /* darwin64_x86_64.S in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - DB13B1601849DEB70010F42D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "darwin_common/include", - ); - ONLY_ACTIVE_ARCH = YES; - }; - name = Debug; - }; - DB13B1611849DEB70010F42D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "darwin_common/include", - ); - }; - name = Release; - }; - DB13B1871849DF1E0010F42D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DSTROOT = /tmp/ffi.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "darwin_ios/include", - ); - IPHONEOS_DEPLOYMENT_TARGET = 5.0; - "IPHONEOS_DEPLOYMENT_TARGET[arch=arm64]" = 7.0; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = ffi; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - DB13B1881849DF1E0010F42D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - DSTROOT = /tmp/ffi.dst; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "darwin_ios/include", - ); - IPHONEOS_DEPLOYMENT_TARGET = 5.0; - "IPHONEOS_DEPLOYMENT_TARGET[arch=arm64]" = 7.0; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = ffi; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - DB13B1B11849DF520010F42D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "darwin_osx/include", - ); - MACOSX_DEPLOYMENT_TARGET = 10.6; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = "-Wl,-no_compact_unwind"; - PRODUCT_NAME = ffi; - SDKROOT = macosx; - }; - name = Debug; - }; - DB13B1B21849DF520010F42D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "darwin_osx/include", - ); - MACOSX_DEPLOYMENT_TARGET = 10.6; - OTHER_LDFLAGS = "-Wl,-no_compact_unwind"; - PRODUCT_NAME = ffi; - SDKROOT = macosx; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - DB13B15F1849DEB70010F42D /* Build configuration list for PBXProject "libffi" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DB13B1601849DEB70010F42D /* Debug */, - DB13B1611849DEB70010F42D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DB13B18B1849DF1E0010F42D /* Build configuration list for PBXNativeTarget "libffi-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DB13B1871849DF1E0010F42D /* Debug */, - DB13B1881849DF1E0010F42D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DB13B1B01849DF520010F42D /* Build configuration list for PBXNativeTarget "libffi-Mac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DB13B1B11849DF520010F42D /* Debug */, - DB13B1B21849DF520010F42D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = DB13B15C1849DEB70010F42D /* Project object */; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/libtool-ldflags b/ruby/ext/fiddle/libffi-3.2.1/libtool-ldflags deleted file mode 100755 index e32e37bf1..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/libtool-ldflags +++ /dev/null @@ -1,106 +0,0 @@ -#! /bin/sh - -# Script to translate LDFLAGS into a form suitable for use with libtool. - -# Copyright (C) 2005 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 -# (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. -# -# 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. - -# Contributed by CodeSourcery, LLC. - -# This script is designed to be used from a Makefile that uses libtool -# to build libraries as follows: -# -# LTLDFLAGS = $(shell libtool-ldflags $(LDFLAGS)) -# -# Then, use (LTLDFLAGS) in place of $(LDFLAGS) in your link line. - -# The output of the script. This string is built up as we process the -# arguments. -result= -prev_arg= - -for arg -do - case $arg in - -f*|--*) - # Libtool does not ascribe any special meaning options - # that begin with -f or with a double-dash. So, it will - # think these options are linker options, and prefix them - # with "-Wl,". Then, the compiler driver will ignore the - # options. So, we prefix these options with -Xcompiler to - # make clear to libtool that they are in fact compiler - # options. - case $prev_arg in - -Xpreprocessor|-Xcompiler|-Xlinker) - # This option is already prefixed; don't prefix it again. - ;; - *) - result="$result -Xcompiler" - ;; - esac - ;; - *) - # We do not want to add -Xcompiler to other options because - # that would prevent libtool itself from recognizing them. - ;; - esac - prev_arg=$arg - - # If $(LDFLAGS) is (say): - # a "b'c d" e - # then the user expects that: - # $(LD) $(LDFLAGS) - # will pass three arguments to $(LD): - # 1) a - # 2) b'c d - # 3) e - # We must ensure, therefore, that the arguments are appropriately - # quoted so that using: - # libtool --mode=link ... $(LTLDFLAGS) - # will result in the same number of arguments being passed to - # libtool. In other words, when this script was invoked, the shell - # removed one level of quoting, present in $(LDFLAGS); we have to put - # it back. - - # Quote any embedded single quotes. - case $arg in - *"'"*) - # The following command creates the script: - # 1s,^X,,;s|'|'"'"'|g - # which removes a leading X, and then quotes and embedded single - # quotes. - sed_script="1s,^X,,;s|'|'\"'\"'|g" - # Add a leading "X" so that if $arg starts with a dash, - # the echo command will not try to interpret the argument - # as a command-line option. - arg="X$arg" - # Generate the quoted string. - quoted_arg=`echo "$arg" | sed -e "$sed_script"` - ;; - *) - quoted_arg=$arg - ;; - esac - # Surround the entire argument with single quotes. - quoted_arg="'"$quoted_arg"'" - - # Add it to the string. - result="$result $quoted_arg" -done - -# Output the string we have built up. -echo "$result" diff --git a/ruby/ext/fiddle/libffi-3.2.1/libtool-version b/ruby/ext/fiddle/libffi-3.2.1/libtool-version deleted file mode 100644 index 149a51a2a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/libtool-version +++ /dev/null @@ -1,29 +0,0 @@ -# This file is used to maintain libtool version info for libffi. See -# the libtool manual to understand the meaning of the fields. This is -# a separate file so that version updates don't involve re-running -# automake. -# -# Here are a set of rules to help you update your library version -# information: -# -# 1. Start with version information of `0:0:0' for each libtool library. -# -# 2. Update the version information only immediately before a public -# release of your software. More frequent updates are unnecessary, -# and only guarantee that the current interface number gets larger -# faster. -# -# 3. If the library source code has changed at all since the last -# update, then increment revision (`c:r:a' becomes `c:r+1:a'). -# -# 4. If any interfaces have been added, removed, or changed since the -# last update, increment current, and set revision to 0. -# -# 5. If any interfaces have been added since the last public release, -# then increment age. -# -# 6. If any interfaces have been removed since the last public -# release, then set age to 0. -# -# CURRENT:REVISION:AGE -6:4:0 diff --git a/ruby/ext/fiddle/libffi-3.2.1/ltmain.sh b/ruby/ext/fiddle/libffi-3.2.1/ltmain.sh deleted file mode 100644 index 63ae69dc6..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/ltmain.sh +++ /dev/null @@ -1,9655 +0,0 @@ - -# libtool (GNU libtool) 2.4.2 -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool 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 -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --no-quiet, --no-silent -# print informational messages (default) -# --no-warn don't display warning messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print more informational messages than default -# --no-verbose don't print the extra informational messages -# --version print version information -# -h, --help, --help-all print short, long, or detailed help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. When passed as first option, -# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.4.2 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . -# GNU libtool home page: . -# General help using GNU software: . - -PROGRAM=libtool -PACKAGE=libtool -VERSION=2.4.2 -TIMESTAMP="" -package_revision=1.3337 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# NLS nuisances: We save the old values to restore during execute mode. -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done -LC_ALL=C -LANGUAGE=C -export LANGUAGE LC_ALL - -$lt_unset CDPATH - - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - - - -: ${CP="cp -f"} -test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} # func_dirname may be replaced by extended shell implementation - - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} # func_basename may be replaced by extended shell implementation - - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} # func_dirname_and_basename may be replaced by extended shell implementation - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname may be replaced by extended shell implementation - - -# These SED scripts presuppose an absolute path with a trailing slash. -pathcar='s,^/\([^/]*\).*$,\1,' -pathcdr='s,^/[^/]*,,' -removedotparts=':dotsl - s@/\./@/@g - t dotsl - s,/\.$,/,' -collapseslashes='s@/\{1,\}@/@g' -finalslash='s,/*$,/,' - -# func_normal_abspath PATH -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -# value returned in "$func_normal_abspath_result" -func_normal_abspath () -{ - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` - while :; do - # Processed it all yet? - if test "$func_normal_abspath_tpath" = / ; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result" ; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - -# func_relative_path SRCDIR DSTDIR -# generates a relative path from SRCDIR to DSTDIR, with a trailing -# slash if non-empty, suitable for immediately appending a filename -# without needing to append a separator. -# value returned in "$func_relative_path_result" -func_relative_path () -{ - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=${func_dirname_result} - if test "x$func_relative_path_tlibdir" = x ; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done - - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test "x$func_stripname_result" != x ; then - func_relative_path_result=${func_relative_path_result}/${func_stripname_result} - fi - - # Normalisation. If bindir is libdir, return empty string, - # else relative path ending with a slash; either way, target - # file name can be directly appended. - if test ! -z "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result/" - func_relative_path_result=$func_stripname_result - fi -} - -# The name of this program: -func_dirname_and_basename "$progpath" -progname=$func_basename_result - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=${PATH_SEPARATOR-:} - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' - -# Sed substitution that converts a w32 file name or path -# which contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }$*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` - done - my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "$my_tmpdir" -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "$1" | $SED \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - -# func_tr_sh -# Turn $1 into a string suitable for a shell variable name. -# Result is stored in $func_tr_sh_result. All characters -# not in the set a-zA-Z0-9_ are replaced with '_'. Further, -# if $1 begins with a digit, a '_' is prepended as well. -func_tr_sh () -{ - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac -} - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $opt_debug - - $SED -n '/(C)/!b go - :more - /\./!{ - N - s/\n# / / - b more - } - :go - /^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $opt_debug - - $SED -n '/^# Usage:/,/^# *.*--help/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - echo - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help [NOEXIT] -# Echo long help message to standard output and exit, -# unless 'noexit' is passed as argument. -func_help () -{ - $opt_debug - - $SED -n '/^# Usage:/,/# Report bugs to/ { - :print - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ - p - d - } - /^# .* home page:/b print - /^# General help using/b print - ' < "$progpath" - ret=$? - if test -z "$1"; then - exit $ret - fi -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - $opt_debug - - func_error "missing argument for $1." - exit_cmd=exit -} - - -# func_split_short_opt shortopt -# Set func_split_short_opt_name and func_split_short_opt_arg shell -# variables after splitting SHORTOPT after the 2nd character. -func_split_short_opt () -{ - my_sed_short_opt='1s/^\(..\).*$/\1/;q' - my_sed_short_rest='1s/^..\(.*\)$/\1/;q' - - func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` - func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` -} # func_split_short_opt may be replaced by extended shell implementation - - -# func_split_long_opt longopt -# Set func_split_long_opt_name and func_split_long_opt_arg shell -# variables after splitting LONGOPT at the `=' sign. -func_split_long_opt () -{ - my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' - my_sed_long_arg='1s/^--[^=]*=//' - - func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` - func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` -} # func_split_long_opt may be replaced by extended shell implementation - -exit_cmd=: - - - - - -magic="%%%MAGIC variable%%%" -magic_exe="%%%MAGIC EXE variable%%%" - -# Global variables. -nonopt= -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "${1}=\$${1}\${2}" -} # func_append may be replaced by extended shell implementation - -# func_append_quoted var value -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -func_append_quoted () -{ - func_quote_for_eval "${2}" - eval "${1}=\$${1}\\ \$func_quote_for_eval_result" -} # func_append_quoted may be replaced by extended shell implementation - - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "${@}"` -} # func_arith may be replaced by extended shell implementation - - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` -} # func_len may be replaced by extended shell implementation - - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} # func_lo2o may be replaced by extended shell implementation - - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} # func_xform may be replaced by extended shell implementation - - -# func_fatal_configuration arg... -# Echo program name prefixed message to standard error, followed by -# a configuration failure hint, and exit. -func_fatal_configuration () -{ - func_error ${1+"$@"} - func_error "See the $PACKAGE documentation for more information." - func_fatal_error "Fatal configuration error." -} - - -# func_config -# Display the configuration for all the tags in this script. -func_config () -{ - re_begincf='^# ### BEGIN LIBTOOL' - re_endcf='^# ### END LIBTOOL' - - # Default configuration. - $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - - # Now print the configurations for the tags. - for tagname in $taglist; do - $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" - done - - exit $? -} - -# func_features -# Display the features supported by this script. -func_features () -{ - echo "host: $host" - if test "$build_libtool_libs" = yes; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - - exit $? -} - -# func_enable_tag tagname -# Verify that TAGNAME is valid, and either flag an error and exit, or -# enable the TAGNAME tag. We also add TAGNAME to the global $taglist -# variable here. -func_enable_tag () -{ - # Global variable: - tagname="$1" - - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf="/$re_begincf/,/$re_endcf/p" - - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac - - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; - *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -# Shorthand for --mode=foo, only valid as the first argument -case $1 in -clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; -compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; -execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; -finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; -install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; -link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; -uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; -esac - - - -# Option defaults: -opt_debug=: -opt_dry_run=false -opt_config=false -opt_preserve_dup_deps=false -opt_features=false -opt_finish=false -opt_help=false -opt_help_all=false -opt_silent=: -opt_warning=: -opt_verbose=: -opt_silent=false -opt_verbose=false - - -# Parse options once, thoroughly. This comes as soon as possible in the -# script to make things like `--version' happen as quickly as we can. -{ - # this just eases exit handling - while test $# -gt 0; do - opt="$1" - shift - case $opt in - --debug|-x) opt_debug='set -x' - func_echo "enabling shell trace mode" - $opt_debug - ;; - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - --config) - opt_config=: -func_config - ;; - --dlopen|-dlopen) - optarg="$1" - opt_dlopen="${opt_dlopen+$opt_dlopen -}$optarg" - shift - ;; - --preserve-dup-deps) - opt_preserve_dup_deps=: - ;; - --features) - opt_features=: -func_features - ;; - --finish) - opt_finish=: -set dummy --mode finish ${1+"$@"}; shift - ;; - --help) - opt_help=: - ;; - --help-all) - opt_help_all=: -opt_help=': help-all' - ;; - --mode) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_mode="$optarg" -case $optarg in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; -esac - shift - ;; - --no-silent|--no-quiet) - opt_silent=false -func_append preserve_args " $opt" - ;; - --no-warning|--no-warn) - opt_warning=false -func_append preserve_args " $opt" - ;; - --no-verbose) - opt_verbose=false -func_append preserve_args " $opt" - ;; - --silent|--quiet) - opt_silent=: -func_append preserve_args " $opt" - opt_verbose=false - ;; - --verbose|-v) - opt_verbose=: -func_append preserve_args " $opt" -opt_silent=false - ;; - --tag) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_tag="$optarg" -func_append preserve_args " $opt $optarg" -func_enable_tag "$optarg" - shift - ;; - - -\?|-h) func_usage ;; - --help) func_help ;; - --version) func_version ;; - - # Separate optargs to long options: - --*=*) - func_split_long_opt "$opt" - set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-n*|-v*) - func_split_short_opt "$opt" - set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognized option \`$opt'" ;; - *) set dummy "$opt" ${1+"$@"}; shift; break ;; - esac - done - - # Validate options: - - # save first non-option argument - if test "$#" -gt 0; then - nonopt="$opt" - shift - fi - - # preserve --debug - test "$opt_debug" = : || func_append preserve_args " --debug" - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - - $opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test "$opt_mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$opt_mode' for more information." - } - - - # Bail if the options were screwed - $exit_cmd $EXIT_FAILURE -} - - - - -## ----------- ## -## Main. ## -## ----------- ## - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_resolve_sysroot PATH -# Replace a leading = in PATH with a sysroot. Store the result into -# func_resolve_sysroot_result -func_resolve_sysroot () -{ - func_resolve_sysroot_result=$1 - case $func_resolve_sysroot_result in - =*) - func_stripname '=' '' "$func_resolve_sysroot_result" - func_resolve_sysroot_result=$lt_sysroot$func_stripname_result - ;; - esac -} - -# func_replace_sysroot PATH -# If PATH begins with the sysroot, replace it with = and -# store the result into func_replace_sysroot_result. -func_replace_sysroot () -{ - case "$lt_sysroot:$1" in - ?*:"$lt_sysroot"*) - func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result="=$func_stripname_result" - ;; - *) - # Including no sysroot. - func_replace_sysroot_result=$1 - ;; - esac -} - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case "$@ " in - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T </dev/null` - if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then - func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$lt_sed_naive_backslashify"` - else - func_convert_core_file_wine_to_w32_result= - fi - fi -} -# end: func_convert_core_file_wine_to_w32 - - -# func_convert_core_path_wine_to_w32 ARG -# Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. -# -# ARG is path to be converted from $build format to win32. -# Result is available in $func_convert_core_path_wine_to_w32_result. -# Unconvertible file (directory) names in ARG are skipped; if no directory names -# are convertible, then the result may be empty. -func_convert_core_path_wine_to_w32 () -{ - $opt_debug - # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result="" - if test -n "$1"; then - oldIFS=$IFS - IFS=: - for func_convert_core_path_wine_to_w32_f in $1; do - IFS=$oldIFS - func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result" ; then - if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" - else - func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" - fi - fi - done - IFS=$oldIFS - fi -} -# end: func_convert_core_path_wine_to_w32 - - -# func_cygpath ARGS... -# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when -# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) -# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or -# (2), returns the Cygwin file name or path in func_cygpath_result (input -# file name or path is assumed to be in w32 format, as previously converted -# from $build's *nix or MSYS format). In case (3), returns the w32 file name -# or path in func_cygpath_result (input file name or path is assumed to be in -# Cygwin format). Returns an empty string on error. -# -# ARGS are passed to cygpath, with the last one being the file name or path to -# be converted. -# -# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH -# environment variable; do not put it in $PATH. -func_cygpath () -{ - $opt_debug - if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then - func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` - if test "$?" -ne 0; then - # on failure, ensure result is empty - func_cygpath_result= - fi - else - func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" - fi -} -#end: func_cygpath - - -# func_convert_core_msys_to_w32 ARG -# Convert file name or path ARG from MSYS format to w32 format. Return -# result in func_convert_core_msys_to_w32_result. -func_convert_core_msys_to_w32 () -{ - $opt_debug - # awkward: cmd appends spaces to result - func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` -} -#end: func_convert_core_msys_to_w32 - - -# func_convert_file_check ARG1 ARG2 -# Verify that ARG1 (a file name in $build format) was converted to $host -# format in ARG2. Otherwise, emit an error message, but continue (resetting -# func_to_host_file_result to ARG1). -func_convert_file_check () -{ - $opt_debug - if test -z "$2" && test -n "$1" ; then - func_error "Could not determine host file name corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_file_result="$1" - fi -} -# end func_convert_file_check - - -# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH -# Verify that FROM_PATH (a path in $build format) was converted to $host -# format in TO_PATH. Otherwise, emit an error message, but continue, resetting -# func_to_host_file_result to a simplistic fallback value (see below). -func_convert_path_check () -{ - $opt_debug - if test -z "$4" && test -n "$3"; then - func_error "Could not determine the host path corresponding to" - func_error " \`$3'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This is a deliberately simplistic "conversion" and - # should not be "improved". See libtool.info. - if test "x$1" != "x$2"; then - lt_replace_pathsep_chars="s|$1|$2|g" - func_to_host_path_result=`echo "$3" | - $SED -e "$lt_replace_pathsep_chars"` - else - func_to_host_path_result="$3" - fi - fi -} -# end func_convert_path_check - - -# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG -# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT -# and appending REPL if ORIG matches BACKPAT. -func_convert_path_front_back_pathsep () -{ - $opt_debug - case $4 in - $1 ) func_to_host_path_result="$3$func_to_host_path_result" - ;; - esac - case $4 in - $2 ) func_append func_to_host_path_result "$3" - ;; - esac -} -# end func_convert_path_front_back_pathsep - - -################################################## -# $build to $host FILE NAME CONVERSION FUNCTIONS # -################################################## -# invoked via `$to_host_file_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# Result will be available in $func_to_host_file_result. - - -# func_to_host_file ARG -# Converts the file name ARG from $build format to $host format. Return result -# in func_to_host_file_result. -func_to_host_file () -{ - $opt_debug - $to_host_file_cmd "$1" -} -# end func_to_host_file - - -# func_to_tool_file ARG LAZY -# converts the file name ARG from $build format to toolchain format. Return -# result in func_to_tool_file_result. If the conversion in use is listed -# in (the comma separated) LAZY, no conversion takes place. -func_to_tool_file () -{ - $opt_debug - case ,$2, in - *,"$to_tool_file_cmd",*) - func_to_tool_file_result=$1 - ;; - *) - $to_tool_file_cmd "$1" - func_to_tool_file_result=$func_to_host_file_result - ;; - esac -} -# end func_to_tool_file - - -# func_convert_file_noop ARG -# Copy ARG to func_to_host_file_result. -func_convert_file_noop () -{ - func_to_host_file_result="$1" -} -# end func_convert_file_noop - - -# func_convert_file_msys_to_w32 ARG -# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_file_result. -func_convert_file_msys_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_to_host_file_result="$func_convert_core_msys_to_w32_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_w32 - - -# func_convert_file_cygwin_to_w32 ARG -# Convert file name ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_file_cygwin_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - # because $build is cygwin, we call "the" cygpath in $PATH; no need to use - # LT_CYGPATH in this case. - func_to_host_file_result=`cygpath -m "$1"` - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_cygwin_to_w32 - - -# func_convert_file_nix_to_w32 ARG -# Convert file name ARG from *nix to w32 format. Requires a wine environment -# and a working winepath. Returns result in func_to_host_file_result. -func_convert_file_nix_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_w32 - - -# func_convert_file_msys_to_cygwin ARG -# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_file_msys_to_cygwin () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result="$func_cygpath_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_cygwin - - -# func_convert_file_nix_to_cygwin ARG -# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed -# in a wine environment, working winepath, and LT_CYGPATH set. Returns result -# in func_to_host_file_result. -func_convert_file_nix_to_cygwin () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. - func_convert_core_file_wine_to_w32 "$1" - func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result="$func_cygpath_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_cygwin - - -############################################# -# $build to $host PATH CONVERSION FUNCTIONS # -############################################# -# invoked via `$to_host_path_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# The result will be available in $func_to_host_path_result. -# -# Path separators are also converted from $build format to $host format. If -# ARG begins or ends with a path separator character, it is preserved (but -# converted to $host format) on output. -# -# All path conversion functions are named using the following convention: -# file name conversion function : func_convert_file_X_to_Y () -# path conversion function : func_convert_path_X_to_Y () -# where, for any given $build/$host combination the 'X_to_Y' value is the -# same. If conversion functions are added for new $build/$host combinations, -# the two new functions must follow this pattern, or func_init_to_host_path_cmd -# will break. - - -# func_init_to_host_path_cmd -# Ensures that function "pointer" variable $to_host_path_cmd is set to the -# appropriate value, based on the value of $to_host_file_cmd. -to_host_path_cmd= -func_init_to_host_path_cmd () -{ - $opt_debug - if test -z "$to_host_path_cmd"; then - func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd="func_convert_path_${func_stripname_result}" - fi -} - - -# func_to_host_path ARG -# Converts the path ARG from $build format to $host format. Return result -# in func_to_host_path_result. -func_to_host_path () -{ - $opt_debug - func_init_to_host_path_cmd - $to_host_path_cmd "$1" -} -# end func_to_host_path - - -# func_convert_path_noop ARG -# Copy ARG to func_to_host_path_result. -func_convert_path_noop () -{ - func_to_host_path_result="$1" -} -# end func_convert_path_noop - - -# func_convert_path_msys_to_w32 ARG -# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_path_result. -func_convert_path_msys_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # Remove leading and trailing path separator characters from ARG. MSYS - # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; - # and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_msys_to_w32_result" - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_msys_to_w32 - - -# func_convert_path_cygwin_to_w32 ARG -# Convert path ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_path_cygwin_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_cygwin_to_w32 - - -# func_convert_path_nix_to_w32 ARG -# Convert path ARG from *nix to w32 format. Requires a wine environment and -# a working winepath. Returns result in func_to_host_file_result. -func_convert_path_nix_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_nix_to_w32 - - -# func_convert_path_msys_to_cygwin ARG -# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_path_msys_to_cygwin () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result="$func_cygpath_result" - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_msys_to_cygwin - - -# func_convert_path_nix_to_cygwin ARG -# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a -# a wine environment, working winepath, and LT_CYGPATH set. Returns result in -# func_to_host_file_result. -func_convert_path_nix_to_cygwin () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result="$func_cygpath_result" - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_nix_to_cygwin - - -# func_mode_compile arg... -func_mode_compile () -{ - $opt_debug - # Get the compilation command and the source file. - base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - pie_flag= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg="$arg" - arg_mode=normal - ;; - - target ) - libobj="$arg" - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - test -n "$libobj" && \ - func_fatal_error "you cannot specify \`-o' more than once" - arg_mode=target - continue - ;; - - -pie | -fpie | -fPIE) - func_append pie_flag " $arg" - continue - ;; - - -shared | -static | -prefer-pic | -prefer-non-pic) - func_append later " $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - lastarg= - save_ifs="$IFS"; IFS=',' - for arg in $args; do - IFS="$save_ifs" - func_append_quoted lastarg "$arg" - done - IFS="$save_ifs" - func_stripname ' ' '' "$lastarg" - lastarg=$func_stripname_result - - # Add the arguments to base_compile. - func_append base_compile " $lastarg" - continue - ;; - - *) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg="$srcfile" - srcfile="$arg" - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - func_append_quoted base_compile "$lastarg" - done # for arg - - case $arg_mode in - arg) - func_fatal_error "you must specify an argument for -Xcompile" - ;; - target) - func_fatal_error "you must specify a target with \`-o'" - ;; - *) - # Get the name of the library object. - test -z "$libobj" && { - func_basename "$srcfile" - libobj="$func_basename_result" - } - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - case $libobj in - *.[cCFSifmso] | \ - *.ada | *.adb | *.ads | *.asm | \ - *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ - *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) - func_xform "$libobj" - libobj=$func_xform_result - ;; - esac - - case $libobj in - *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; - *) - func_fatal_error "cannot determine name of library object from \`$libobj'" - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - continue - ;; - - -static) - build_libtool_libs=no - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ - && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - func_append removelist " $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - func_append removelist " $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 - srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - func_append command " -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - func_append command " -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - func_append command "$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { - test "$opt_mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $opt_mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to build PIC objects only - -prefer-non-pic try to build non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -bindir BINDIR specify path to binaries directory (for systems where - libraries must be found in the PATH setting at runtime) - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -Wc,FLAG - -Xcompiler FLAG pass linker-specific FLAG directly to the compiler - -Wl,FLAG - -Xlinker FLAG pass linker-specific FLAG directly to the linker - -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$opt_mode'" - ;; - esac - - echo - $ECHO "Try \`$progname --help' for more information about other modes." -} - -# Now that we've collected a possible --mode arg, show help if necessary -if $opt_help; then - if test "$opt_help" = :; then - func_mode_help - else - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - func_mode_help - done - } | sed -n '1p; 2,$s/^Usage:/ or: /p' - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - echo - func_mode_help - done - } | - sed '1d - /^When reporting/,/^Report/{ - H - d - } - $x - /information about other modes/d - /more detailed .*MODE/d - s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' - fi - exit $? -fi - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $opt_dlopen; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - func_append dir "/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -* | *.la | *.lo ) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_append_quoted args "$file" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$opt_mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libs= - libdirs= - admincmds= - - for opt in "$nonopt" ${1+"$@"} - do - if test -d "$opt"; then - func_append libdirs " $opt" - - elif test -f "$opt"; then - if func_lalib_unsafe_p "$opt"; then - func_append libs " $opt" - else - func_warning "\`$opt' is not a valid libtool archive" - fi - - else - func_fatal_error "invalid argument \`$opt'" - fi - done - - if test -n "$libs"; then - if test -n "$lt_sysroot"; then - sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` - sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" - else - sysroot_cmd= - fi - - # Remove sysroot references - if $opt_dry_run; then - for lib in $libs; do - echo "removing references to $lt_sysroot and \`=' prefixes from $lib" - done - else - tmpdir=`func_mktempdir` - for lib in $libs; do - sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ - > $tmpdir/tmp-la - mv -f $tmpdir/tmp-la $lib - done - ${RM}r "$tmpdir" - fi - fi - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || func_append admincmds " - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - echo - - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" - fi - exit $EXIT_SUCCESS -} - -test "$opt_mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" - install_shared_prog=$install_prog - case " $install_prog " in - *[\\\ /]cp\ *) install_cp=: ;; - *) install_cp=false ;; - esac - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - no_mode=: - for arg - do - arg2= - if test -n "$dest"; then - func_append files " $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - if $install_cp; then :; else - prev=$arg - fi - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - if test "x$prev" = x-m && test -n "$install_override_mode"; then - arg2=$install_override_mode - no_mode=false - fi - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - func_append install_shared_prog " $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -n "$install_override_mode" && $no_mode; then - if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" - fi - fi - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - func_append staticlibs " $file" - ;; - - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) func_append current_libdirs " $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) func_append future_libdirs " $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - func_append dir "$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && func_append staticlibs " $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $tool_oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$opt_mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) -#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" -#endif - -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" - $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - case $host in - *cygwin* | *mingw* | *cegcc* ) - # if an import library, we need to obtain dlname - if func_win32_import_lib_p "$dlprefile"; then - func_tr_sh "$dlprefile" - eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename="" - if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then - # Use subshell, to avoid clobbering current variable values - dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname" ; then - func_basename "$dlprefile_dlname" - dlprefile_dlbasename="$func_basename_result" - else - # no lafile. user explicitly requested -dlpreopen . - $sharedlib_from_linklib_cmd "$dlprefile" - dlprefile_dlbasename=$sharedlib_from_linklib_result - fi - fi - $opt_dry_run || { - if test -n "$dlprefile_dlbasename" ; then - eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' - else - func_warning "Could not compute DLL name from $name" - eval '$ECHO ": $name " >> "$nlist"' - fi - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" - } - else # not an import lib - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - fi - ;; - *) - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - ;; - esac - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - echo >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - echo >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) func_append symtab_cflags " $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -# Despite the name, also deal with 64 bit binaries. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - -# func_cygming_dll_for_implib ARG -# -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib () -{ - $opt_debug - sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` -} - -# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs -# -# The is the core of a fallback implementation of a -# platform-specific function to extract the name of the -# DLL associated with the specified import library LIBNAME. -# -# SECTION_NAME is either .idata$6 or .idata$7, depending -# on the platform and compiler that created the implib. -# -# Echos the name of the DLL associated with the -# specified import library. -func_cygming_dll_for_implib_fallback_core () -{ - $opt_debug - match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` - $OBJDUMP -s --section "$1" "$2" 2>/dev/null | - $SED '/^Contents of section '"$match_literal"':/{ - # Place marker at beginning of archive member dllname section - s/.*/====MARK====/ - p - d - } - # These lines can sometimes be longer than 43 characters, but - # are always uninteresting - /:[ ]*file format pe[i]\{,1\}-/d - /^In archive [^:]*:/d - # Ensure marker is printed - /^====MARK====/p - # Remove all lines with less than 43 characters - /^.\{43\}/!d - # From remaining lines, remove first 43 characters - s/^.\{43\}//' | - $SED -n ' - # Join marker and all lines until next marker into a single line - /^====MARK====/ b para - H - $ b para - b - :para - x - s/\n//g - # Remove the marker - s/^====MARK====// - # Remove trailing dots and whitespace - s/[\. \t]*$// - # Print - /./p' | - # we now have a list, one entry per line, of the stringified - # contents of the appropriate section of all members of the - # archive which possess that section. Heuristic: eliminate - # all those which have a first or second character that is - # a '.' (that is, objdump's representation of an unprintable - # character.) This should work for all archives with less than - # 0x302f exports -- but will fail for DLLs whose name actually - # begins with a literal '.' or a single character followed by - # a '.'. - # - # Of those that remain, print the first one. - $SED -e '/^\./d;/^.\./d;q' -} - -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - -# func_cygming_dll_for_implib_fallback ARG -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# -# This fallback implementation is for use when $DLLTOOL -# does not support the --identify-strict option. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib_fallback () -{ - $opt_debug - if func_cygming_gnu_implib_p "$1" ; then - # binutils import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1" ; then - # ms-generated import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` - else - # unknown - sharedlib_from_linklib_result="" - fi -} - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - if test "$lock_old_archive_extraction" = yes; then - lockfile=$f_ex_an_ar_oldlib.lock - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - fi - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ - 'stat=$?; rm -f "$lockfile"; exit $stat' - if test "$lock_old_archive_extraction" = yes; then - $opt_dry_run || rm -f "$lockfile" - fi - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=${1-no} - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - file=\"\$0\"" - - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` - $ECHO "\ - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - ECHO=\"$qECHO\" - fi - -# Very basic option parsing. These options are (a) specific to -# the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ which is used only on -# windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options which match -# this pattern). -# -# There are only two supported options: --lt-debug and -# --lt-dump-script. There is, deliberately, no --lt-help. -# -# The first argument to this parsing function should be the -# script's $0 value, followed by "$@". -lt_option_debug= -func_parse_lt_options () -{ - lt_script_arg0=\$0 - shift - for lt_opt - do - case \"\$lt_opt\" in - --lt-debug) lt_option_debug=1 ;; - --lt-dump-script) - lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` - test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. - lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` - cat \"\$lt_dump_D/\$lt_dump_F\" - exit 0 - ;; - --lt-*) - \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 - exit 1 - ;; - esac - done - - # Print the debug banner immediately: - if test -n \"\$lt_option_debug\"; then - echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 - fi -} - -# Used when --lt-debug. Prints its arguments to stdout -# (redirection is the responsibility of the caller) -func_lt_dump_args () -{ - lt_dump_args_N=1; - for lt_arg - do - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" - lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` - done -} - -# Core function for launching the target application -func_exec_program_core () -{ -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 -} - -# A function to encapsulate launching the target application -# Strips options in the --lt-* namespace from \$@ and -# launches target application with the remaining arguments. -func_exec_program () -{ - case \" \$* \" in - *\\ --lt-*) - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done ;; - esac - func_exec_program_core \${1+\"\$@\"} -} - - # Parse options - func_parse_lt_options \"\$0\" \${1+\"\$@\"} - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` - done - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # fixup the dll searchpath if we need to. - # - # Fix the DLL searchpath if we need to. Do this before prepending - # to shlibpath, because on Windows, both are PATH and uninstalled - # libraries must come first. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` - - export $shlibpath_var -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - func_exec_program \${1+\"\$@\"} - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} - - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -#else -# include -# include -# ifdef __CYGWIN__ -# include -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -/* declarations of non-ANSI functions */ -#if defined(__MINGW32__) -# ifdef __STRICT_ANSI__ -int _putenv (const char *); -# endif -#elif defined(__CYGWIN__) -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -/* #elif defined (other platforms) ... */ -#endif - -/* portability defines, excluding path handling macros */ -#if defined(_MSC_VER) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -# define S_IXUSR _S_IEXEC -# ifndef _INTPTR_T_DEFINED -# define _INTPTR_T_DEFINED -# define intptr_t int -# endif -#elif defined(__MINGW32__) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -#elif defined(__CYGWIN__) -# define HAVE_SETENV -# define FOPEN_WB "wb" -/* #elif defined (other platforms) ... */ -#endif - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -/* path handling portability macros */ -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#if defined(LT_DEBUGWRAPPER) -static int lt_debug = 1; -#else -static int lt_debug = 0; -#endif - -const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_debugprintf (const char *file, int line, const char *fmt, ...); -void lt_fatal (const char *file, int line, const char *message, ...); -static const char *nonnull (const char *s); -static const char *nonempty (const char *s); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); -char **prepare_spawn (char **argv); -void lt_dump_script (FILE *f); -EOF - - cat <= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", - nonempty (wrapper)); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - lt_debugprintf (__FILE__, __LINE__, - "checking path component for symlinks: %s\n", - tmp_pathspec); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - lt_fatal (__FILE__, __LINE__, - "error accessing file \"%s\": %s", - tmp_pathspec, nonnull (strerror (errno))); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal (__FILE__, __LINE__, - "could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -void -lt_debugprintf (const char *file, int line, const char *fmt, ...) -{ - va_list args; - if (lt_debug) - { - (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); - } -} - -static void -lt_error_core (int exit_status, const char *file, - int line, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *file, int line, const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); - va_end (ap); -} - -static const char * -nonnull (const char *s) -{ - return s ? s : "(null)"; -} - -static const char * -nonempty (const char *s) -{ - return (s && !*s) ? "(empty)" : nonnull (s); -} - -void -lt_setenv (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_setenv) setting '%s' to '%s'\n", - nonnull (name), nonnull (value)); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -EOF - case $host_os in - mingw*) - cat <<"EOF" - -/* Prepares an argument vector before calling spawn(). - Note that spawn() does not by itself call the command interpreter - (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : - ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&v); - v.dwPlatformId == VER_PLATFORM_WIN32_NT; - }) ? "cmd.exe" : "command.com"). - Instead it simply concatenates the arguments, separated by ' ', and calls - CreateProcess(). We must quote the arguments since Win32 CreateProcess() - interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a - special way: - - Space and tab are interpreted as delimiters. They are not treated as - delimiters if they are surrounded by double quotes: "...". - - Unescaped double quotes are removed from the input. Their only effect is - that within double quotes, space and tab are treated like normal - characters. - - Backslashes not followed by double quotes are not special. - - But 2*n+1 backslashes followed by a double quote become - n backslashes followed by a double quote (n >= 0): - \" -> " - \\\" -> \" - \\\\\" -> \\" - */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -char ** -prepare_spawn (char **argv) -{ - size_t argc; - char **new_argv; - size_t i; - - /* Count number of arguments. */ - for (argc = 0; argv[argc] != NULL; argc++) - ; - - /* Allocate new argument vector. */ - new_argv = XMALLOC (char *, argc + 1); - - /* Put quoted arguments into the new argument vector. */ - for (i = 0; i < argc; i++) - { - const char *string = argv[i]; - - if (string[0] == '\0') - new_argv[i] = xstrdup ("\"\""); - else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) - { - int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); - size_t length; - unsigned int backslashes; - const char *s; - char *quoted_string; - char *p; - - length = 0; - backslashes = 0; - if (quote_around) - length++; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - length += backslashes + 1; - length++; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - length += backslashes + 1; - - quoted_string = XMALLOC (char, length + 1); - - p = quoted_string; - backslashes = 0; - if (quote_around) - *p++ = '"'; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - { - unsigned int j; - for (j = backslashes + 1; j > 0; j--) - *p++ = '\\'; - } - *p++ = c; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - { - unsigned int j; - for (j = backslashes; j > 0; j--) - *p++ = '\\'; - *p++ = '"'; - } - *p = '\0'; - - new_argv[i] = quoted_string; - } - else - new_argv[i] = (char *) string; - } - new_argv[argc] = NULL; - - return new_argv; -} -EOF - ;; - esac - - cat <<"EOF" -void lt_dump_script (FILE* f) -{ -EOF - func_emit_wrapper yes | - $SED -n -e ' -s/^\(.\{79\}\)\(..*\)/\1\ -\2/ -h -s/\([\\"]\)/\\\1/g -s/$/\\n/ -s/\([^\n]*\).*/ fputs ("\1", f);/p -g -D' - cat <<"EOF" -} -EOF -} -# end: func_emit_cwrapperexe_src - -# func_win32_import_lib_p ARG -# True if ARG is an import lib, as indicated by $file_magic_cmd -func_win32_import_lib_p () -{ - $opt_debug - case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in - *import*) : ;; - *) false ;; - esac -} - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - bindir= - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - bindir) - bindir="$arg" - prev= - continue - ;; - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - func_append dlfiles " $arg" - else - func_append dlprefiles " $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) func_append deplibs " $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# func_append moreargs " $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) func_append rpath " $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) func_append xrpath " $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - func_append weak_libs " $arg" - prev= - continue - ;; - xcclinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -bindir) - prev=bindir - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname "-L" '' "$arg" - if test -z "$func_stripname_result"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "* | *" $arg "*) - # Will only happen for absolute or sysroot arguments - ;; - *) - # Preserve sysroot, but never include relative directories - case $dir in - [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; - *) func_append deplibs " -L$dir" ;; - esac - func_append lib_search_path " $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) func_append dllsearchpath ":$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - func_append deplibs " System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - func_append deplibs " $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot|--sysroot) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) func_append new_inherited_linker_flags " $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - =*) - func_stripname '=' '' "$dir" - dir=$lt_sysroot$func_stripname_result - ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - func_append arg " $func_quote_for_eval_result" - func_append compiler_flags " $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append linker_flags " $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # Flags to be passed through unchanged, with rationale: - # -64, -mips[0-9] enable 64-bit mode for the SGI compiler - # -r[0-9][0-9]* specify processor for the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler - # +DA*, +DD* enable 64-bit mode for the HP compiler - # -q* compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* architecture-specific flags for GCC - # -F/path path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* profiling flags for GCC - # @file GCC response files - # -tp=* Portland pgcc target processor selection - # --sysroot=* for sysroot support - # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-flto*|-fwhopr*|-fuse-linker-plugin) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - func_append compiler_flags " $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - func_append objs " $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - func_append deplibs " $arg" - func_append old_deplibs " $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - func_resolve_sysroot "$arg" - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - func_append dlfiles " $func_resolve_sysroot_result" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - func_append dlprefiles " $func_resolve_sysroot_result" - prev= - else - func_append deplibs " $func_resolve_sysroot_result" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - func_to_tool_file "$output_objdir/" - tool_output_objdir=$func_to_tool_file_result - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_preserve_dup_deps ; then - case "$libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append libs " $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; - esac - func_append pre_post_deps " $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - func_resolve_sysroot "$lib" - case $lib in - *.la) func_source "$func_resolve_sysroot_result" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - func_basename "$deplib" - deplib_base=$func_basename_result - case " $weak_libs " in - *" $deplib_base "*) ;; - *) func_append deplibs " $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append compiler_flags " $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) - func_resolve_sysroot "$deplib" - lib=$func_resolve_sysroot_result - ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." - else - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - func_append newdlprefiles " $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append newdlfiles " $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && func_append dlfiles " $dlopen" - test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - func_append convenience " $ladir/$objdir/$old_library" - func_append old_convenience " $ladir/$objdir/$old_library" - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - if test -n "$old_library" && - { test "$prefer_static_libs" = yes || - test "$prefer_static_libs,$installed" = "built,no"; }; then - linklib=$old_library - else - for l in $old_library $library_names; do - linklib="$l" - done - fi - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - func_append dlprefiles " $lib $dependency_libs" - else - func_append newdlfiles " $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$lt_sysroot$libdir" - absdir="$lt_sysroot$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - func_append notinst_path " $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - func_append notinst_path " $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - case "$host" in - # special handling for platforms with PE-DLLs. - *cygwin* | *mingw* | *cegcc* ) - # Linker will automatically link against shared library if both - # static and shared are present. Therefore, ensure we extract - # symbols from the import library if a shared library is present - # (otherwise, the dlopen module name will be incorrect). We do - # this by putting the import library name into $newdlprefiles. - # We recover the dlopen module name by 'saving' the la file - # name in a special purpose variable, and (later) extracting the - # dlname from the la file. - if test -n "$dlname"; then - func_tr_sh "$dir/$linklib" - eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" - func_append newdlprefiles " $dir/$linklib" - else - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - fi - ;; - * ) - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - func_append newdlprefiles " $dir/$dlname" - else - func_append newdlprefiles " $dir/$linklib" - fi - ;; - esac - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - func_append newlib_search_path " $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) func_append temp_rpath "$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - func_append notinst_deplibs " $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - func_append notinst_deplibs " $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - echo - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$opt_mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$absdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) func_append compile_shlibpath "$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$opt_mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system can not link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) func_append xrpath " $temp_xrpath";; - esac;; - *) func_append temp_deplibs " $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - func_append newlib_search_path " $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result";; - *) func_resolve_sysroot "$deplib" ;; - esac - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $func_resolve_sysroot_result "*) - func_append specialdeplibs " $func_resolve_sysroot_result" ;; - esac - fi - func_append tmp_libs " $func_resolve_sysroot_result" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_resolve_sysroot "$deplib" - deplib=$func_resolve_sysroot_result - func_dirname "$deplib" "" "." - dir=$func_dirname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) func_append lib_search_path " $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) func_append tmp_libs " $deplib" ;; - esac - ;; - *) func_append tmp_libs " $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - func_append tmp_libs " $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - func_append objs "$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - func_append libobjs " $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - # correct linux to gnu/linux during the next big refactor - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|qnx|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) # correct to gnu/linux during the next big refactor - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - func_append verstring ":${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - func_append libobjs " $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$opt_mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - func_append removelist " $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - func_append oldlibs " $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` - # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` - # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - func_replace_sysroot "$libdir" - func_append temp_xrpath " -R$func_replace_sysroot_result" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) func_append dlfiles " $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) func_append dlprefiles " $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - func_append deplibs " System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - func_append deplibs " -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - $nocaseglob - else - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - fi - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` - done - fi - case $tmp_deplibs in - *[!\ \ ]*) - echo - if test "X$deplibs_check_method" = "Xnone"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - ;; - esac - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - # Remove ${wl} instances when linking with ld. - # FIXME: should test the right _cmds variable. - case $archive_cmds in - *\$LD\ *) wl= ;; - esac - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$opt_mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - func_replace_sysroot "$libdir" - libdir=$func_replace_sysroot_result - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append dep_rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - func_append linknames " $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - func_append delfiles " $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd1 in $cmds; do - IFS="$save_ifs" - # Take the normal branch if the nm_file_list_spec branch - # doesn't work or if tool conversion is not needed. - case $nm_file_list_spec~$to_tool_file_cmd in - *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) - try_normal_branch=yes - eval cmd=\"$cmd1\" - func_len " $cmd" - len=$func_len_result - ;; - *) - try_normal_branch=no - ;; - esac - if test "$try_normal_branch" = yes \ - && { test "$len" -lt "$max_cmd_len" \ - || test "$max_cmd_len" -le -1; } - then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - elif test -n "$nm_file_list_spec"; then - func_basename "$output" - output_la=$func_basename_result - save_libobjs=$libobjs - save_output=$output - output=${output_objdir}/${output_la}.nm - func_to_tool_file "$output" - libobjs=$nm_file_list_spec$func_to_tool_file_result - func_append delfiles " $output" - func_verbose "creating $NM input file list: $output" - for obj in $save_libobjs; do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > "$output" - eval cmd=\"$cmd1\" - func_show_eval "$cmd" 'exit $?' - output=$save_output - libobjs=$save_libobjs - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - func_append tmp_deplibs " $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - func_append linker_flags " $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$opt_mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - func_basename "$output" - output_la=$func_basename_result - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - echo ')' >> $output - func_append delfiles " $output" - func_to_tool_file "$output" - output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - func_append delfiles " $output" - func_to_tool_file "$output" - output=$firstobj\"$file_list_spec$func_to_tool_file_result\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - reload_objs=$objlist - eval concat_cmds=\"$reload_cmds\" - else - # All subsequent reloadable object files will link in - # the last one created. - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=" $obj" - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\${concat_cmds}$reload_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - func_append delfiles " $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # If we're not building shared, we need to use non_pic_objs - test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - func_append compile_command " ${wl}-bind_at_load" - func_append finalize_command " ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - func_append compile_command " $compile_deplibs" - func_append finalize_command " $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) func_append dllsearchpath ":$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) func_append finalize_perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cegcc* | *mingw32ce*) - # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=no - ;; - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - func_append rpath "$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output_objdir/$outputname" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - func_append oldobjs " $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $addlibs - func_append oldobjs " $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append oldobjs " $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - echo "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - func_append oldobjs " $gentop/$newobj" - ;; - *) func_append oldobjs " $obj" ;; - esac - done - fi - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - elif test -n "$archiver_list_spec"; then - func_verbose "using command file archive linking..." - for obj in $oldobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > $output_objdir/$libname.libcmd - func_to_tool_file "$output_objdir/$libname.libcmd" - oldobjs=" $archiver_list_spec$func_to_tool_file_result" - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - func_resolve_sysroot "$deplib" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" - ;; - -L*) - func_stripname -L '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -L$func_replace_sysroot_result" - ;; - -R*) - func_stripname -R '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -R$func_replace_sysroot_result" - ;; - *) func_append newdependency_libs " $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" - ;; - *) func_append newdlfiles " $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlfiles " $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlprefiles " $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - # In fact, it would be nice if we could use this code for all target - # systems that can't hard-code library paths into their executables - # and that have no shared library path variable independent of PATH, - # but it turns out we can't easily determine that from inspecting - # libtool variables, so we have to hard-code the OSs to which it - # applies here; at the moment, that means platforms that use the PE - # object format with DLL files. See the long comment at the top of - # tests/bindir.at for full details. - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) - # If a -bindir argument was supplied, place the dll there. - if test "x$bindir" != x ; - then - func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result$dlname - else - # Otherwise fall back on heuristic. - tdlname=../bin/$dlname - fi - ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$opt_mode" = link || test "$opt_mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) func_append RM " $arg"; rmforce=yes ;; - -*) func_append RM " $arg" ;; - *) func_append files " $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - odir="$objdir" - else - odir="$dir/$objdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$opt_mode" = uninstall && odir="$dir" - - # Remember odir for removal later, being careful to avoid duplicates - if test "$opt_mode" = clean; then - case " $rmdirs " in - *" $odir "*) ;; - *) func_append rmdirs " $odir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - func_append rmfiles " $odir/$n" - done - test -n "$old_library" && func_append rmfiles " $odir/$old_library" - - case "$opt_mode" in - clean) - case " $library_names " in - *" $dlname "*) ;; - *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; - esac - test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - func_append rmfiles " $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - func_append rmfiles " $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$opt_mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - func_append rmfiles " $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - func_append rmfiles " $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - func_append rmfiles " $odir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - func_append rmfiles " $odir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$opt_mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$opt_mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/asmcfi.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/asmcfi.m4 deleted file mode 100644 index dbf73a0b3..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/asmcfi.m4 +++ /dev/null @@ -1,13 +0,0 @@ -AC_DEFUN([GCC_AS_CFI_PSEUDO_OP], -[AC_CACHE_CHECK([assembler .cfi pseudo-op support], - gcc_cv_as_cfi_pseudo_op, [ - gcc_cv_as_cfi_pseudo_op=unknown - AC_TRY_COMPILE([asm (".cfi_startproc\n\t.cfi_endproc");],, - [gcc_cv_as_cfi_pseudo_op=yes], - [gcc_cv_as_cfi_pseudo_op=no]) - ]) - if test "x$gcc_cv_as_cfi_pseudo_op" = xyes; then - AC_DEFINE(HAVE_AS_CFI_PSEUDO_OP, 1, - [Define if your assembler supports .cfi_* directives.]) - fi -]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_append_flag.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/ax_append_flag.m4 deleted file mode 100644 index 1d38b76fb..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_append_flag.m4 +++ /dev/null @@ -1,69 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_append_flag.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE]) -# -# DESCRIPTION -# -# FLAG is appended to the FLAGS-VARIABLE shell variable, with a space -# added in between. -# -# If FLAGS-VARIABLE is not specified, the current language's flags (e.g. -# CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains -# FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly -# FLAG. -# -# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# Copyright (c) 2011 Maarten Bosmans -# -# 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. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 2 - -AC_DEFUN([AX_APPEND_FLAG], -[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX -AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])])dnl -AS_VAR_SET_IF(FLAGS, - [case " AS_VAR_GET(FLAGS) " in - *" $1 "*) - AC_RUN_LOG([: FLAGS already contains $1]) - ;; - *) - AC_RUN_LOG([: FLAGS="$FLAGS $1"]) - AS_VAR_SET(FLAGS, ["AS_VAR_GET(FLAGS) $1"]) - ;; - esac], - [AS_VAR_SET(FLAGS,["$1"])]) -AS_VAR_POPDEF([FLAGS])dnl -])dnl AX_APPEND_FLAG diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_cc_maxopt.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/ax_cc_maxopt.m4 deleted file mode 100644 index 62e3b5330..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_cc_maxopt.m4 +++ /dev/null @@ -1,181 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_cc_maxopt.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CC_MAXOPT -# -# DESCRIPTION -# -# Try to turn on "good" C optimization flags for various compilers and -# architectures, for some definition of "good". (In our case, good for -# FFTW and hopefully for other scientific codes. Modify as needed.) -# -# The user can override the flags by setting the CFLAGS environment -# variable. The user can also specify --enable-portable-binary in order to -# disable any optimization flags that might result in a binary that only -# runs on the host architecture. -# -# Note also that the flags assume that ANSI C aliasing rules are followed -# by the code (e.g. for gcc's -fstrict-aliasing), and that floating-point -# computations can be re-ordered as needed. -# -# Requires macros: AX_CHECK_COMPILE_FLAG, AX_COMPILER_VENDOR, -# AX_GCC_ARCHFLAG, AX_GCC_X86_CPUID. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# 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. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 13 - -AC_DEFUN([AX_CC_MAXOPT], -[ -AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AX_COMPILER_VENDOR]) -AC_REQUIRE([AC_CANONICAL_HOST]) - -AC_ARG_ENABLE(portable-binary, [AS_HELP_STRING([--enable-portable-binary], [disable compiler optimizations that would produce unportable binaries])], - acx_maxopt_portable=$enableval, acx_maxopt_portable=no) - -# Try to determine "good" native compiler flags if none specified via CFLAGS -if test "$ac_test_CFLAGS" != "set"; then - CFLAGS="" - case $ax_cv_c_compiler_vendor in - dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" - if test "x$acx_maxopt_portable" = xno; then - CFLAGS="$CFLAGS -arch host" - fi;; - - sun) CFLAGS="-native -fast -xO5 -dalign" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS -xarch=generic" - fi;; - - hp) CFLAGS="+Oall +Optrs_ansi +DSnative" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS +DAportable" - fi;; - - ibm) if test "x$acx_maxopt_portable" = xno; then - xlc_opt="-qarch=auto -qtune=auto" - else - xlc_opt="-qtune=auto" - fi - AX_CHECK_COMPILE_FLAG($xlc_opt, - CFLAGS="-O3 -qansialias -w $xlc_opt", - [CFLAGS="-O3 -qansialias -w" - echo "******************************************************" - echo "* You seem to have the IBM C compiler. It is *" - echo "* recommended for best performance that you use: *" - echo "* *" - echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" - echo "* ^^^ ^^^ *" - echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" - echo "* CPU you have. (Set the CFLAGS environment var. *" - echo "* and re-run configure.) For more info, man cc. *" - echo "******************************************************"]) - ;; - - intel) CFLAGS="-O3 -ansi_alias" - if test "x$acx_maxopt_portable" = xno; then - icc_archflag=unknown - icc_flags="" - case $host_cpu in - i686*|x86_64*) - # icc accepts gcc assembly syntax, so these should work: - AX_GCC_X86_CPUID(0) - AX_GCC_X86_CPUID(1) - case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *6a?:*[[234]]:*:*|*6[[789b]]?:*:*:*) icc_flags="-xK";; - *f3[[347]]:*:*:*|*f4[1347]:*:*:*) icc_flags="-xP -xN -xW -xK";; - *f??:*:*:*) icc_flags="-xN -xW -xK";; - esac ;; - esac ;; - esac - if test "x$icc_flags" != x; then - for flag in $icc_flags; do - AX_CHECK_COMPILE_FLAG($flag, [icc_archflag=$flag; break]) - done - fi - AC_MSG_CHECKING([for icc architecture flag]) - AC_MSG_RESULT($icc_archflag) - if test "x$icc_archflag" != xunknown; then - CFLAGS="$CFLAGS $icc_archflag" - fi - fi - ;; - - gnu) - # default optimization flags for gcc on all systems - CFLAGS="-O3 -fomit-frame-pointer" - - # -malign-double for x86 systems - # LIBFFI -- DON'T DO THIS - CHANGES ABI - # AX_CHECK_COMPILE_FLAG(-malign-double, CFLAGS="$CFLAGS -malign-double") - - # -fstrict-aliasing for gcc-2.95+ - AX_CHECK_COMPILE_FLAG(-fstrict-aliasing, - CFLAGS="$CFLAGS -fstrict-aliasing") - - # note that we enable "unsafe" fp optimization with other compilers, too - AX_CHECK_COMPILE_FLAG(-ffast-math, CFLAGS="$CFLAGS -ffast-math") - - AX_GCC_ARCHFLAG($acx_maxopt_portable) - ;; - esac - - if test -z "$CFLAGS"; then - echo "" - echo "********************************************************" - echo "* WARNING: Don't know the best CFLAGS for this system *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" - echo "********************************************************" - echo "" - CFLAGS="-O3" - fi - - AX_CHECK_COMPILE_FLAG($CFLAGS, [], [ - echo "" - echo "********************************************************" - echo "* WARNING: The guessed CFLAGS don't seem to work with *" - echo "* your compiler. *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "********************************************************" - echo "" - CFLAGS="" - ]) - -fi -]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_cflags_warn_all.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/ax_cflags_warn_all.m4 deleted file mode 100644 index 0fa3e186b..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_cflags_warn_all.m4 +++ /dev/null @@ -1,122 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_cflags_warn_all.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] -# AX_CXXFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] -# AX_FCFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] -# -# DESCRIPTION -# -# Try to find a compiler option that enables most reasonable warnings. -# -# For the GNU compiler it will be -Wall (and -ansi -pedantic) The result -# is added to the shellvar being CFLAGS, CXXFLAGS, or FCFLAGS by default. -# -# Currently this macro knows about the GCC, Solaris, Digital Unix, AIX, -# HP-UX, IRIX, NEC SX-5 (Super-UX 10), Cray J90 (Unicos 10.0.0.8), and -# Intel compilers. For a given compiler, the Fortran flags are much more -# experimental than their C equivalents. -# -# - $1 shell-variable-to-add-to : CFLAGS, CXXFLAGS, or FCFLAGS -# - $2 add-value-if-not-found : nothing -# - $3 action-if-found : add value to shellvariable -# - $4 action-if-not-found : nothing -# -# NOTE: These macros depend on AX_APPEND_FLAG. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# Copyright (c) 2010 Rhys Ulerich -# -# 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. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 14 - -AC_DEFUN([AX_FLAGS_WARN_ALL],[dnl -AS_VAR_PUSHDEF([FLAGS],[_AC_LANG_PREFIX[]FLAGS])dnl -AS_VAR_PUSHDEF([VAR],[ac_cv_[]_AC_LANG_ABBREV[]flags_warn_all])dnl -AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], -VAR,[VAR="no, unknown" -ac_save_[]FLAGS="$[]FLAGS" -for ac_arg dnl -in "-warn all % -warn all" dnl Intel - "-pedantic % -Wall" dnl GCC - "-xstrconst % -v" dnl Solaris C - "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix - "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX - "-ansi -ansiE % -fullwarn" dnl IRIX - "+ESlit % +w1" dnl HP-UX C - "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) - "-h conform % -h msglevel 2" dnl Cray C (Unicos) - # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) -done -FLAGS="$ac_save_[]FLAGS" -]) -AS_VAR_POPDEF([FLAGS])dnl -AC_REQUIRE([AX_APPEND_FLAG]) -case ".$VAR" in - .ok|.ok,*) m4_ifvaln($3,$3) ;; - .|.no|.no,*) m4_default($4,[m4_ifval($2,[AX_APPEND_FLAG([$2], [$1])])]) ;; - *) m4_default($3,[AX_APPEND_FLAG([$VAR], [$1])]) ;; -esac -AS_VAR_POPDEF([VAR])dnl -])dnl AX_FLAGS_WARN_ALL -dnl implementation tactics: -dnl the for-argument contains a list of options. The first part of -dnl these does only exist to detect the compiler - usually it is -dnl a global option to enable -ansi or -extrawarnings. All other -dnl compilers will fail about it. That was needed since a lot of -dnl compilers will give false positives for some option-syntax -dnl like -Woption or -Xoption as they think of it is a pass-through -dnl to later compile stages or something. The "%" is used as a -dnl delimiter. A non-option comment can be given after "%%" marks -dnl which will be shown but not added to the respective C/CXXFLAGS. - -AC_DEFUN([AX_CFLAGS_WARN_ALL],[dnl -AC_LANG_PUSH([C]) -AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4]) -AC_LANG_POP([C]) -]) - -AC_DEFUN([AX_CXXFLAGS_WARN_ALL],[dnl -AC_LANG_PUSH([C++]) -AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4]) -AC_LANG_POP([C++]) -]) - -AC_DEFUN([AX_FCFLAGS_WARN_ALL],[dnl -AC_LANG_PUSH([Fortran]) -AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4]) -AC_LANG_POP([Fortran]) -]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_check_compile_flag.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/ax_check_compile_flag.m4 deleted file mode 100644 index c3a8d695a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_check_compile_flag.m4 +++ /dev/null @@ -1,72 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS]) -# -# DESCRIPTION -# -# Check whether the given FLAG works with the current language's compiler -# or gives an error. (Warnings, however, are ignored) -# -# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on -# success/failure. -# -# If EXTRA-FLAGS is defined, it is added to the current language's default -# flags (e.g. CFLAGS) when the check is done. The check is thus made with -# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to -# force the compiler to issue an error when a bad flag is given. -# -# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this -# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# Copyright (c) 2011 Maarten Bosmans -# -# 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. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 2 - -AC_DEFUN([AX_CHECK_COMPILE_FLAG], -[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX -AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl -AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ - ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - [AS_VAR_SET(CACHEVAR,[yes])], - [AS_VAR_SET(CACHEVAR,[no])]) - _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) -AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], - [m4_default([$2], :)], - [m4_default([$3], :)]) -AS_VAR_POPDEF([CACHEVAR])dnl -])dnl AX_CHECK_COMPILE_FLAGS diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_compiler_vendor.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/ax_compiler_vendor.m4 deleted file mode 100644 index 73e32ea9e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_compiler_vendor.m4 +++ /dev/null @@ -1,84 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_compiler_vendor.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_COMPILER_VENDOR -# -# DESCRIPTION -# -# Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, sun, -# hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, -# watcom, etc. The vendor is returned in the cache variable -# $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# 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. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 11 - -AC_DEFUN([AX_COMPILER_VENDOR], -[AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, - [# note: don't check for gcc first since some other compilers define __GNUC__ - vendors="intel: __ICC,__ECC,__INTEL_COMPILER - ibm: __xlc__,__xlC__,__IBMC__,__IBMCPP__ - pathscale: __PATHCC__,__PATHSCALE__ - clang: __clang__ - gnu: __GNUC__ - sun: __SUNPRO_C,__SUNPRO_CC - hp: __HP_cc,__HP_aCC - dec: __DECC,__DECCXX,__DECC_VER,__DECCXX_VER - borland: __BORLANDC__,__TURBOC__ - comeau: __COMO__ - cray: _CRAYC - kai: __KCC - lcc: __LCC__ - sgi: __sgi,sgi - microsoft: _MSC_VER - metrowerks: __MWERKS__ - watcom: __WATCOMC__ - portland: __PGI - unknown: UNKNOWN" - for ventest in $vendors; do - case $ventest in - *:) vendor=$ventest; continue ;; - *) vencpp="defined("`echo $ventest | sed 's/,/) || defined(/g'`")" ;; - esac - AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ - #if !($vencpp) - thisisanerror; - #endif - ])], [break]) - done - ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=`echo $vendor | cut -d: -f1` - ]) -]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_configure_args.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/ax_configure_args.m4 deleted file mode 100644 index 0726b1bc8..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_configure_args.m4 +++ /dev/null @@ -1,70 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_configure_args.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CONFIGURE_ARGS -# -# DESCRIPTION -# -# Helper macro for AX_ENABLE_BUILDDIR. -# -# The traditional way of starting a subdir-configure is running the script -# with ${1+"$@"} but since autoconf 2.60 this is broken. Instead we have -# to rely on eval'ing $ac_configure_args however some old autoconf -# versions do not provide that. To ensure maximum portability of autoconf -# extension macros this helper can be AC_REQUIRE'd so that -# $ac_configure_args will alsways be present. -# -# Sadly, the traditional "exec $SHELL" of the enable_builddir macros is -# spoiled now and must be replaced by "eval + exit $?". -# -# Example: -# -# AC_DEFUN([AX_ENABLE_SUBDIR],[dnl -# AC_REQUIRE([AX_CONFIGURE_ARGS])dnl -# eval $SHELL $ac_configure_args || exit $? -# ...]) -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# -# 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. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 9 - -AC_DEFUN([AX_CONFIGURE_ARGS],[ - # [$]@ is unsable in 2.60+ but earlier autoconf had no ac_configure_args - if test "${ac_configure_args+set}" != "set" ; then - ac_configure_args= - for ac_arg in ${1+"[$]@"}; do - ac_configure_args="$ac_configure_args '$ac_arg'" - done - fi -]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_enable_builddir.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/ax_enable_builddir.m4 deleted file mode 100644 index 3cb209371..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_enable_builddir.m4 +++ /dev/null @@ -1,301 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_enable_builddir.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_ENABLE_BUILDDIR [(dirstring-or-command [,Makefile.mk [,-all]])] -# -# DESCRIPTION -# -# If the current configure was run within the srcdir then we move all -# configure-files into a subdir and let the configure steps continue -# there. We provide an option --disable-builddir to suppress the move into -# a separate builddir. -# -# Defaults: -# -# $1 = $host (overridden with $HOST) -# $2 = Makefile.mk -# $3 = -all -# -# This macro must be called before AM_INIT_AUTOMAKE. It creates a default -# toplevel srcdir Makefile from the information found in the created -# toplevel builddir Makefile. It just copies the variables and -# rule-targets, each extended with a default rule-execution that recurses -# into the build directory of the current "HOST". You can override the -# auto-dection through `config.guess` and build-time of course, as in -# -# make HOST=i386-mingw-cross -# -# which can of course set at configure time as well using -# -# configure --host=i386-mingw-cross -# -# After the default has been created, additional rules can be appended -# that will not just recurse into the subdirectories and only ever exist -# in the srcdir toplevel makefile - these parts are read from the $2 = -# Makefile.mk file -# -# The automatic rules are usually scanning the toplevel Makefile for lines -# like '#### $host |$builddir' to recognize the place where to recurse -# into. Usually, the last one is the only one used. However, almost all -# targets have an additional "*-all" rule which makes the script to -# recurse into _all_ variants of the current HOST (!!) setting. The "-all" -# suffix can be overriden for the macro as well. -# -# a special rule is only given for things like "dist" that will copy the -# tarball from the builddir to the sourcedir (or $(PUB)) for reason of -# convenience. -# -# LICENSE -# -# Copyright (c) 2009 Guido U. Draheim -# Copyright (c) 2009 Alan Jenkins -# -# 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. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 23 - -AC_DEFUN([AX_ENABLE_BUILDDIR],[ -AC_REQUIRE([AC_CANONICAL_HOST])[]dnl -AC_REQUIRE([AX_CONFIGURE_ARGS])[]dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])[]dnl -AC_BEFORE([$0],[AM_INIT_AUTOMAKE])dnl -AS_VAR_PUSHDEF([SUB],[ax_enable_builddir])dnl -AS_VAR_PUSHDEF([AUX],[ax_enable_builddir_auxdir])dnl -AS_VAR_PUSHDEF([SED],[ax_enable_builddir_sed])dnl -SUB="." -AC_ARG_ENABLE([builddir], AS_HELP_STRING( - [--disable-builddir],[disable automatic build in subdir of sources]) - ,[SUB="$enableval"], [SUB="auto"]) -if test ".$ac_srcdir_defaulted" != ".no" ; then -if test ".$srcdir" = ".." ; then - if test -f config.status ; then - AC_MSG_NOTICE(toplevel srcdir already configured... skipping subdir build) - else - test ".$SUB" = "." && SUB="." - test ".$SUB" = ".no" && SUB="." - test ".$TARGET" = "." && TARGET="$target" - test ".$SUB" = ".auto" && SUB="m4_ifval([$1], [$1],[$TARGET])" - if test ".$SUB" != ".." ; then # we know where to go and - AS_MKDIR_P([$SUB]) - echo __.$SUB.__ > $SUB/conftest.tmp - cd $SUB - if grep __.$SUB.__ conftest.tmp >/dev/null 2>/dev/null ; then - rm conftest.tmp - AC_MSG_RESULT([continue configure in default builddir "./$SUB"]) - else - AC_MSG_ERROR([could not change to default builddir "./$SUB"]) - fi - srcdir=`echo "$SUB" | - sed -e 's,^\./,,;s,[[^/]]$,&/,;s,[[^/]]*/,../,g;s,[[/]]$,,;'` - # going to restart from subdirectory location - test -f $srcdir/config.log && mv $srcdir/config.log . - test -f $srcdir/confdefs.h && mv $srcdir/confdefs.h . - test -f $srcdir/conftest.log && mv $srcdir/conftest.log . - test -f $srcdir/$cache_file && mv $srcdir/$cache_file . - AC_MSG_RESULT(....exec $SHELL $srcdir/[$]0 "--srcdir=$srcdir" "--enable-builddir=$SUB" ${1+"[$]@"}) - case "[$]0" in # restart - [[\\/]]* | ?:[[\\/]]*) # Asbolute name - eval $SHELL "'[$]0'" "'--srcdir=$srcdir'" "'--enable-builddir=$SUB'" $ac_configure_args ;; - *) eval $SHELL "'$srcdir/[$]0'" "'--srcdir=$srcdir'" "'--enable-builddir=$SUB'" $ac_configure_args ;; - esac ; exit $? - fi - fi -fi fi -test ".$SUB" = ".auto" && SUB="." -dnl ac_path_prog uses "set dummy" to override $@ which would defeat the "exec" -AC_PATH_PROG(SED,gsed sed, sed) -AUX="$am_aux_dir" -AS_VAR_POPDEF([SED])dnl -AS_VAR_POPDEF([AUX])dnl -AS_VAR_POPDEF([SUB])dnl -AC_CONFIG_COMMANDS([buildir],[dnl .............. config.status .............. -AS_VAR_PUSHDEF([SUB],[ax_enable_builddir])dnl -AS_VAR_PUSHDEF([TOP],[top_srcdir])dnl -AS_VAR_PUSHDEF([SRC],[ac_top_srcdir])dnl -AS_VAR_PUSHDEF([AUX],[ax_enable_builddir_auxdir])dnl -AS_VAR_PUSHDEF([SED],[ax_enable_builddir_sed])dnl -pushdef([END],[Makefile.mk])dnl -pushdef([_ALL],[ifelse([$3],,[-all],[$3])])dnl - SRC="$ax_enable_builddir_srcdir" - if test ".$SUB" = ".." ; then - if test -f "$TOP/Makefile" ; then - AC_MSG_NOTICE([skipping TOP/Makefile - left untouched]) - else - AC_MSG_NOTICE([skipping TOP/Makefile - not created]) - fi - else - if test -f "$SRC/Makefile" ; then - a=`grep "^VERSION " "$SRC/Makefile"` ; b=`grep "^VERSION " Makefile` - test "$a" != "$b" && rm "$SRC/Makefile" - fi - if test -f "$SRC/Makefile" ; then - echo "$SRC/Makefile : $SRC/Makefile.in" > $tmp/conftemp.mk - echo " []@ echo 'REMOVED,,,' >\$[]@" >> $tmp/conftemp.mk - eval "${MAKE-make} -f $tmp/conftemp.mk 2>/dev/null >/dev/null" - if grep '^REMOVED,,,' "$SRC/Makefile" >/dev/null - then rm $SRC/Makefile ; fi - cp $tmp/conftemp.mk $SRC/makefiles.mk~ ## DEBUGGING - fi - if test ! -f "$SRC/Makefile" ; then - AC_MSG_NOTICE([create TOP/Makefile guessed from local Makefile]) - x='`' ; cat >$tmp/conftemp.sed <<_EOF -/^\$/n -x -/^\$/bS -x -/\\\\\$/{H;d;} -{H;s/.*//;x;} -bM -:S -x -/\\\\\$/{h;d;} -{h;s/.*//;x;} -:M -s/\\(\\n\\) /\\1 /g -/^ /d -/^[[ ]]*[[\\#]]/d -/^VPATH *=/d -s/^srcdir *=.*/srcdir = ./ -s/^top_srcdir *=.*/top_srcdir = ./ -/[[:=]]/!d -/^\\./d -dnl Now handle rules (i.e. lines containing ":" but not " = "). -/ = /b -/ .= /b -/:/!b -s/:.*/:/ -s/ / /g -s/ \\([[a-z]][[a-z-]]*[[a-zA-Z0-9]]\\)\\([[ :]]\\)/ \\1 \\1[]_ALL\\2/g -s/^\\([[a-z]][[a-z-]]*[[a-zA-Z0-9]]\\)\\([[ :]]\\)/\\1 \\1[]_ALL\\2/ -s/ / /g -/^all all[]_ALL[[ :]]/i\\ -all-configured : all[]_ALL -dnl dist-all exists... and would make for dist-all-all -s/ [[a-zA-Z0-9-]]*[]_ALL [[a-zA-Z0-9-]]*[]_ALL[]_ALL//g -/[]_ALL[]_ALL/d -a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\ - ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\ - ; use=$x basename "\$\@" _ALL $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$n * \$\@"; if test "\$\$n" -eq "0" ; then : \\\\\\ - ; BUILD=$x grep "^####.*|" Makefile |tail -1| sed -e 's/.*|//' $x ; fi \\\\\\ - ; test ".\$\$BUILD" = "." && BUILD="." \\\\\\ - ; test "\$\$use" = "\$\@" && BUILD=$x echo "\$\$BUILD" | tail -1 $x \\\\\\ - ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; (cd "\$\$i" && test ! -f configure && \$(MAKE) \$\$use) || exit; done -dnl special rule add-on: "dist" copies the tarball to $(PUB). (source tree) -/dist[]_ALL *:/a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\ - ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\ - ; found=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).tar.*" \\\\\\ - ; if test "\$\$found" -eq "0" ; then : \\\\\\ - ; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\ - ; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; for f in \$\$i/\$(PACKAGE)-\$(VERSION).tar.* \\\\\\ - ; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done -dnl special rule add-on: "dist-foo" copies all the archives to $(PUB). (source tree) -/dist-[[a-zA-Z0-9]]*[]_ALL *:/a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh ./config.guess $x \\\\\\ - ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\ - ; found=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).*" \\\\\\ - ; if test "\$\$found" -eq "0" ; then : \\\\\\ - ; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\ - ; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; for f in \$\$i/\$(PACKAGE)-\$(VERSION).* \\\\\\ - ; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done -dnl special rule add-on: "distclean" removes all local builddirs completely -/distclean[]_ALL *:/a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\ - ; BUILD=$x grep "^#### .*|" Makefile | sed -e 's/.*|//' $x \\\\\\ - ; use=$x basename "\$\@" _ALL $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$n * \$\@ (all local builds)" \\\\\\ - ; test ".\$\$BUILD" = "." && BUILD="." \\\\\\ - ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; echo "# rm -r \$\$i"; done ; echo "# (sleep 3)" ; sleep 3 \\\\\\ - ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; echo "\$\$i" | grep "^/" > /dev/null && continue \\\\\\ - ; echo "\$\$i" | grep "^../" > /dev/null && continue \\\\\\ - ; echo "rm -r \$\$i"; (rm -r "\$\$i") ; done ; rm Makefile -_EOF - cp "$tmp/conftemp.sed" "$SRC/makefile.sed~" ## DEBUGGING - $SED -f $tmp/conftemp.sed Makefile >$SRC/Makefile - if test -f "$SRC/m4_ifval([$2],[$2],[END])" ; then - AC_MSG_NOTICE([extend TOP/Makefile with TOP/m4_ifval([$2],[$2],[END])]) - cat $SRC/END >>$SRC/Makefile - fi ; xxxx="####" - echo "$xxxx CONFIGURATIONS FOR TOPLEVEL MAKEFILE: " >>$SRC/Makefile - # sanity check - if grep '^; echo "MAKE ' $SRC/Makefile >/dev/null ; then - AC_MSG_NOTICE([buggy sed found - it deletes tab in "a" text parts]) - $SED -e '/^@ HOST=/s/^/ /' -e '/^; /s/^/ /' $SRC/Makefile \ - >$SRC/Makefile~ - (test -s $SRC/Makefile~ && mv $SRC/Makefile~ $SRC/Makefile) 2>/dev/null - fi - else - xxxx="\\#\\#\\#\\#" - # echo "/^$xxxx *$ax_enable_builddir_host /d" >$tmp/conftemp.sed - echo "s!^$xxxx [[^|]]* | *$SUB *\$!$xxxx ...... $SUB!" >$tmp/conftemp.sed - $SED -f "$tmp/conftemp.sed" "$SRC/Makefile" >$tmp/mkfile.tmp - cp "$tmp/conftemp.sed" "$SRC/makefiles.sed~" ## DEBUGGING - cp "$tmp/mkfile.tmp" "$SRC/makefiles.out~" ## DEBUGGING - if cmp -s "$SRC/Makefile" "$tmp/mkfile.tmp" 2>/dev/null ; then - AC_MSG_NOTICE([keeping TOP/Makefile from earlier configure]) - rm "$tmp/mkfile.tmp" - else - AC_MSG_NOTICE([reusing TOP/Makefile from earlier configure]) - mv "$tmp/mkfile.tmp" "$SRC/Makefile" - fi - fi - AC_MSG_NOTICE([build in $SUB (HOST=$ax_enable_builddir_host)]) - xxxx="####" - echo "$xxxx" "$ax_enable_builddir_host" "|$SUB" >>$SRC/Makefile - fi -popdef([END])dnl -AS_VAR_POPDEF([SED])dnl -AS_VAR_POPDEF([AUX])dnl -AS_VAR_POPDEF([SRC])dnl -AS_VAR_POPDEF([TOP])dnl -AS_VAR_POPDEF([SUB])dnl -],[dnl -ax_enable_builddir_srcdir="$srcdir" # $srcdir -ax_enable_builddir_host="$HOST" # $HOST / $host -ax_enable_builddir_version="$VERSION" # $VERSION -ax_enable_builddir_package="$PACKAGE" # $PACKAGE -ax_enable_builddir_auxdir="$ax_enable_builddir_auxdir" # $AUX -ax_enable_builddir_sed="$ax_enable_builddir_sed" # $SED -ax_enable_builddir="$ax_enable_builddir" # $SUB -])dnl -]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_gcc_archflag.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/ax_gcc_archflag.m4 deleted file mode 100644 index aab2661c3..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_gcc_archflag.m4 +++ /dev/null @@ -1,225 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_gcc_archflag.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE]) -# -# DESCRIPTION -# -# This macro tries to guess the "native" arch corresponding to the target -# architecture for use with gcc's -march=arch or -mtune=arch flags. If -# found, the cache variable $ax_cv_gcc_archflag is set to this flag and -# ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is set to -# "unknown" and ACTION-FAILURE is executed. The default ACTION-SUCCESS is -# to add $ax_cv_gcc_archflag to the end of $CFLAGS. -# -# PORTABLE? should be either [yes] (default) or [no]. In the former case, -# the flag is set to -mtune (or equivalent) so that the architecture is -# only used for tuning, but the instruction set used is still portable. In -# the latter case, the flag is set to -march (or equivalent) so that -# architecture-specific instructions are enabled. -# -# The user can specify --with-gcc-arch= in order to override the -# macro's choice of architecture, or --without-gcc-arch to disable this. -# -# When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is -# called unless the user specified --with-gcc-arch manually. -# -# Requires macros: AX_CHECK_COMPILE_FLAG, AX_GCC_X86_CPUID -# -# (The main emphasis here is on recent CPUs, on the principle that doing -# high-performance computing on old hardware is uncommon.) -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# Copyright (c) 2012 Tsukasa Oi -# -# 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. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 11 - -AC_DEFUN([AX_GCC_ARCHFLAG], -[AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AC_CANONICAL_HOST]) - -AC_ARG_WITH(gcc-arch, [AS_HELP_STRING([--with-gcc-arch=], [use architecture for gcc -march/-mtune, instead of guessing])], - ax_gcc_arch=$withval, ax_gcc_arch=yes) - -AC_MSG_CHECKING([for gcc architecture flag]) -AC_MSG_RESULT([]) -AC_CACHE_VAL(ax_cv_gcc_archflag, -[ -ax_cv_gcc_archflag="unknown" - -if test "$GCC" = yes; then - -if test "x$ax_gcc_arch" = xyes; then -ax_gcc_arch="" -if test "$cross_compiling" = no; then -case $host_cpu in - i[[3456]]86*|x86_64*) # use cpuid codes - AX_GCC_X86_CPUID(0) - AX_GCC_X86_CPUID(1) - case $ax_cv_gcc_x86_cpuid_0 in - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; - *5??:*:*:*) ax_gcc_arch=pentium ;; - *0?6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *0?6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *0?6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *0?6[[9de]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; - *0?6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *0?6f?:*:*:*|*1?66?:*:*:*) ax_gcc_arch="core2 pentium-m pentium3 pentiumpro" ;; - *1?6[[7d]]?:*:*:*) ax_gcc_arch="penryn core2 pentium-m pentium3 pentiumpro" ;; - *1?6[[aef]]?:*:*:*|*2?6[[5cef]]?:*:*:*) ax_gcc_arch="corei7 core2 pentium-m pentium3 pentiumpro" ;; - *1?6c?:*:*:*|*[[23]]?66?:*:*:*) ax_gcc_arch="atom core2 pentium-m pentium3 pentiumpro" ;; - *2?6[[ad]]?:*:*:*) ax_gcc_arch="corei7-avx corei7 core2 pentium-m pentium3 pentiumpro" ;; - *0?6??:*:*:*) ax_gcc_arch=pentiumpro ;; - *6??:*:*:*) ax_gcc_arch="core2 pentiumpro" ;; - ?000?f3[[347]]:*:*:*|?000?f4[1347]:*:*:*|?000?f6?:*:*:*) - case $host_cpu in - x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; - *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; - esac ;; - ?000?f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; - esac ;; - *:68747541:*:*) # AMD - case $ax_cv_gcc_x86_cpuid_1 in - *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;; - *5[[8d]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; - *5[[9]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; - *60?:*:*:*) ax_gcc_arch=k7 ;; - *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;; - *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; - *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; - *6[[68a]]?:*:*:*) - AX_GCC_X86_CPUID(0x80000006) # L2 cache size - case $ax_cv_gcc_x86_cpuid_0x80000006 in - *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256 - ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; - *) ax_gcc_arch="athlon-4 athlon k7" ;; - esac ;; - ?00??f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; - ?00??f5?:*:*:*) ax_gcc_arch="opteron k8" ;; - ?00??f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; - ?00??f??:*:*:*) ax_gcc_arch="k8" ;; - ?05??f??:*:*:*) ax_gcc_arch="btver1 amdfam10 k8" ;; - ?06??f??:*:*:*) ax_gcc_arch="bdver1 amdfam10 k8" ;; - *f??:*:*:*) ax_gcc_arch="amdfam10 k8" ;; - esac ;; - *:746e6543:*:*) # IDT - case $ax_cv_gcc_x86_cpuid_1 in - *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; - *58?:*:*:*) ax_gcc_arch=winchip2 ;; - *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;; - *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; - esac ;; - esac - if test x"$ax_gcc_arch" = x; then # fallback - case $host_cpu in - i586*) ax_gcc_arch=pentium ;; - i686*) ax_gcc_arch=pentiumpro ;; - esac - fi - ;; - - sparc*) - AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/]) - cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` - cputype=`echo "$cputype" | tr -d ' -' | sed 's/SPARCIIi/SPARCII/' | tr $as_cr_LETTERS $as_cr_letters` - case $cputype in - *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; - *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; - *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; - *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;; - *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;; - *cypress*) ax_gcc_arch=cypress ;; - esac ;; - - alphaev5) ax_gcc_arch=ev5 ;; - alphaev56) ax_gcc_arch=ev56 ;; - alphapca56) ax_gcc_arch="pca56 ev56" ;; - alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; - alphaev6) ax_gcc_arch=ev6 ;; - alphaev67) ax_gcc_arch=ev67 ;; - alphaev68) ax_gcc_arch="ev68 ev67" ;; - alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; - alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; - alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; - - powerpc*) - cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` - cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'` - case $cputype in - *750*) ax_gcc_arch="750 G3" ;; - *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;; - *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;; - *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;; - *970*) ax_gcc_arch="970 G5 power4";; - *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; - *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; - 603ev|8240) ax_gcc_arch="$cputype 603e 603";; - *) ax_gcc_arch=$cputype ;; - esac - ax_gcc_arch="$ax_gcc_arch powerpc" - ;; -esac -fi # not cross-compiling -fi # guess arch - -if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then -for arch in $ax_gcc_arch; do - if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code - flags="-mtune=$arch" - # -mcpu=$arch and m$arch generate nonportable code on every arch except - # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. - case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac - else - flags="-march=$arch -mcpu=$arch -m$arch" - fi - for flag in $flags; do - AX_CHECK_COMPILE_FLAG($flag, [ax_cv_gcc_archflag=$flag; break]) - done - test "x$ax_cv_gcc_archflag" = xunknown || break -done -fi - -fi # $GCC=yes -]) -AC_MSG_CHECKING([for gcc architecture flag]) -AC_MSG_RESULT($ax_cv_gcc_archflag) -if test "x$ax_cv_gcc_archflag" = xunknown; then - m4_default([$3],:) -else - m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"]) -fi -]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_gcc_x86_cpuid.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/ax_gcc_x86_cpuid.m4 deleted file mode 100644 index 7d46fee02..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/ax_gcc_x86_cpuid.m4 +++ /dev/null @@ -1,79 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_gcc_x86_cpuid.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_X86_CPUID(OP) -# -# DESCRIPTION -# -# On Pentium and later x86 processors, with gcc or a compiler that has a -# compatible syntax for inline assembly instructions, run a small program -# that executes the cpuid instruction with input OP. This can be used to -# detect the CPU type. -# -# On output, the values of the eax, ebx, ecx, and edx registers are stored -# as hexadecimal strings as "eax:ebx:ecx:edx" in the cache variable -# ax_cv_gcc_x86_cpuid_OP. -# -# If the cpuid instruction fails (because you are running a -# cross-compiler, or because you are not using gcc, or because you are on -# a processor that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP -# is set to the string "unknown". -# -# This macro mainly exists to be used in AX_GCC_ARCHFLAG. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# 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. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 7 - -AC_DEFUN([AX_GCC_X86_CPUID], -[AC_REQUIRE([AC_PROG_CC]) -AC_LANG_PUSH([C]) -AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1, - [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [ - int op = $1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; -])], - [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid], - [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid], - [ax_cv_gcc_x86_cpuid_$1=unknown])]) -AC_LANG_POP([C]) -]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/libtool.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/libtool.m4 deleted file mode 100644 index 56666f0ec..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/libtool.m4 +++ /dev/null @@ -1,7986 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# 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. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool 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 (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 57 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl - -_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl -dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_WITH_SYSROOT])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PREPARE_SED_QUOTE_VARS -# -------------------------- -# Define a few sed substitution that help us do robust quoting. -m4_defun([_LT_PREPARE_SED_QUOTE_VARS], -[# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' -]) - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$[]1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -_LT_OUTPUT_LIBTOOL_INIT -]) - -# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) -# ------------------------------------ -# Generate a child script FILE with all initialization necessary to -# reuse the environment learned by the parent script, and make the -# file executable. If COMMENT is supplied, it is inserted after the -# `#!' sequence but before initialization text begins. After this -# macro, additional text can be appended to FILE to form the body of -# the child script. The macro ends with non-zero status if the -# file could not be fully written (such as if the disk is full). -m4_ifdef([AS_INIT_GENERATED], -[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], -[m4_defun([_LT_GENERATED_FILE_INIT], -[m4_require([AS_PREPARE])]dnl -[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl -[lt_write_fail=0 -cat >$1 <<_ASEOF || lt_write_fail=1 -#! $SHELL -# Generated by $as_me. -$2 -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$1 <<\_ASEOF || lt_write_fail=1 -AS_SHELL_SANITIZE -_AS_PREPARE -exec AS_MESSAGE_FD>&1 -_ASEOF -test $lt_write_fail = 0 && chmod +x $1[]dnl -m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], -[# Run this file to recreate a libtool stub with the current configuration.]) - -cat >>"$CONFIG_LT" <<\_LTEOF -lt_cl_silent=false -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2011 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -lt_cl_success=: -test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" -exec AS_MESSAGE_LOG_FD>/dev/null -$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false -exec AS_MESSAGE_LOG_FD>>config.log -$lt_cl_success || AS_EXIT(1) -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_REPLACE_SHELLFNS - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Go], [_LT_LANG(GO)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -m4_ifndef([AC_PROG_GO], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_GO. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ -m4_defun([AC_PROG_GO], -[AC_LANG_PUSH(Go)dnl -AC_ARG_VAR([GOC], [Go compiler command])dnl -AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl -_AC_ARG_VAR_LDFLAGS()dnl -AC_CHECK_TOOL(GOC, gccgo) -if test -z "$GOC"; then - if test -n "$ac_tool_prefix"; then - AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) - fi -fi -if test -z "$GOC"; then - AC_CHECK_PROG(GOC, gccgo, gccgo, false) -fi -])#m4_defun -])#m4_ifndef - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([AC_PROG_GO], - [LT_LANG(GO)], - [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) -dnl AC_DEFUN([AC_LIBTOOL_RC], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - - AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], - [lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD - echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD - $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD - echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD - $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES([TAG]) -# --------------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], - [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) -# ---------------------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -# Store the results from the different compilers for each TAGNAME. -# Allow to override them for all tags through lt_cv_aix_libpath. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], - [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ - lt_aix_libpath_sed='[ - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }]' - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi],[]) - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" - fi - ]) - aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) -fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[m4_divert_text([M4SH-INIT], [$1 -])])# _LT_SHELL_INIT - - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Find how we can fake an echo command that does not interpret backslash. -# In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script which will find a shell with a builtin -# printf (which we can use as an echo command). -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -AC_MSG_CHECKING([how to print strings]) -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$[]1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -case "$ECHO" in - printf*) AC_MSG_RESULT([printf]) ;; - print*) AC_MSG_RESULT([print -r]) ;; - *) AC_MSG_RESULT([cat]) ;; -esac - -m4_ifdef([_AS_DETECT_SUGGESTED], -[_AS_DETECT_SUGGESTED([ - test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test "X`printf %s $ECHO`" = "X$ECHO" \ - || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) - -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_WITH_SYSROOT -# ---------------- -AC_DEFUN([_LT_WITH_SYSROOT], -[AC_MSG_CHECKING([for sysroot]) -AC_ARG_WITH([sysroot], -[ --with-sysroot[=DIR] Search for dependent libraries within DIR - (or the compiler's sysroot if not specified).], -[], [with_sysroot=no]) - -dnl lt_sysroot will always be passed unquoted. We quote it here -dnl in case the user passed a directory name. -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - AC_MSG_RESULT([${with_sysroot}]) - AC_MSG_ERROR([The sysroot must be an absolute path.]) - ;; -esac - - AC_MSG_RESULT([${lt_sysroot:-no}]) -_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl -[dependent libraries, and in which our libraries should be installed.])]) - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_PROG_AR -# ----------- -m4_defun([_LT_PROG_AR], -[AC_CHECK_TOOLS(AR, [ar], false) -: ${AR=ar} -: ${AR_FLAGS=cru} -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) - -AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], - [lt_cv_ar_at_file=no - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - ]) - ]) - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi -_LT_DECL([], [archiver_list_spec], [1], - [How to feed a file listing to the archiver]) -])# _LT_PROG_AR - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[_LT_PROG_AR - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -_LT_DECL([], [lock_old_archive_extraction], [0], - [Whether to use a lock for old archive extraction]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[23]].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[[3-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], - [lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [lt_cv_shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - ]) - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Add ABI-specific directories to the system library path. - sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [install_override_mode], [1], - [Permission mode override for installation of shared libraries]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PROG_ECHO_BACKSLASH])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method = "file_magic"]) -_LT_DECL([], [file_magic_glob], [1], - [How to find potential files when deplibs_check_method = "file_magic"]) -_LT_DECL([], [want_nocaseglob], [1], - [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - -# _LT_CHECK_SHAREDLIB_FROM_LINKLIB -# -------------------------------- -# how to determine the name of the shared library -# associated with a specific link library. -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -m4_require([_LT_DECL_DLLTOOL]) -AC_CACHE_CHECK([how to associate runtime and link libraries], -lt_cv_sharedlib_from_linklib_cmd, -[lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac -]) -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - -_LT_DECL([], [sharedlib_from_linklib_cmd], [1], - [Command to associate shared and link libraries]) -])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB - - -# _LT_PATH_MANIFEST_TOOL -# ---------------------- -# locate the manifest tool -m4_defun([_LT_PATH_MANIFEST_TOOL], -[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], - [lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&AS_MESSAGE_LOG_FD - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest*]) -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi -_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl -])# _LT_PATH_MANIFEST_TOOL - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; - *) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; - esac - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT@&t@_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT@&t@_DLSYM_CONST -#else -# define LT@&t@_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT@&t@_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -_LT_DECL([], [nm_file_list_spec], [1], - [Specify filename containing input files for $NM]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' - if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - nagfor*) - # NAG Fortran compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - *Sun\ F* | *Sun*Fortran*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Intel*\ [[CF]]*Compiler*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - *Portland\ Group*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -AC_CACHE_CHECK([for $compiler option to produce PIC], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - ;; - esac - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; - *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - esac - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - m4_if($1, [], [ - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - _LT_LINKER_OPTION([if $CC understands -b], - _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], - [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], - [lt_cv_irix_exported_symbol], - [save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE( - [AC_LANG_SOURCE( - [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], - [C++], [[int foo (void) { return 0; }]], - [Fortran 77], [[ - subroutine foo - end]], - [Fortran], [[ - subroutine foo - end]])])], - [lt_cv_irix_exported_symbol=yes], - [lt_cv_irix_exported_symbol=no]) - LDFLAGS="$save_LDFLAGS"]) - if test "$lt_cv_irix_exported_symbol" = yes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_CACHE_CHECK([whether -lc should be explicitly linked in], - [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), - [$RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - ]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [postlink_cmds], [2], - [Commands necessary for finishing linking programs]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - gnu*) - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ - '"$_LT_TAGVAR(old_archive_cmds, $1)" - _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_FUNC_STRIPNAME_CNF -# ---------------------- -# func_stripname_cnf prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# -# This function is identical to the (non-XSI) version of func_stripname, -# except this one can be used by m4 code that may be executed by configure, -# rather than the libtool script. -m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl -AC_REQUIRE([_LT_DECL_SED]) -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) -func_stripname_cnf () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname_cnf -])# _LT_FUNC_STRIPNAME_CNF - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF -package foo -func foo() { -} -_LT_EOF -]) - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${F77-"f77"} - CFLAGS=$FFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" - CFLAGS="$lt_save_CFLAGS" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_LANG_PUSH(Fortran) - -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${FC-"f95"} - CFLAGS=$FCFLAGS - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -CFLAGS=$GCJFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_GO_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Go compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GO_CONFIG], -[AC_REQUIRE([LT_PROG_GO])dnl -AC_LANG_SAVE - -# Source file extension for Go test sources. -ac_ext=go - -# Object file extension for compiled Go test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="package main; func main() { }" - -# Code to be used in simple link tests -lt_simple_link_test_code='package main; func main() { }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GOC-"gccgo"} -CFLAGS=$GOFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# Go did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GO_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -CFLAGS= -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_GO -# ---------- -AC_DEFUN([LT_PROG_GO], -[AC_CHECK_TOOL(GOC, gccgo,) -]) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - -# _LT_DECL_DLLTOOL -# ---------------- -# Ensure DLLTOOL variable is set. -m4_defun([_LT_DECL_DLLTOOL], -[AC_CHECK_TOOL(DLLTOOL, dlltool, false) -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) -AC_SUBST([DLLTOOL]) -]) - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) -# ------------------------------------------------------ -# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and -# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. -m4_defun([_LT_PROG_FUNCTION_REPLACE], -[dnl { -sed -e '/^$1 ()$/,/^} # $1 /c\ -$1 ()\ -{\ -m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) -} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: -]) - - -# _LT_PROG_REPLACE_SHELLFNS -# ------------------------- -# Replace existing portable implementations of several shell functions with -# equivalent extended shell implementations where those features are available.. -m4_defun([_LT_PROG_REPLACE_SHELLFNS], -[if test x"$xsi_shell" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl - func_split_long_opt_name=${1%%=*} - func_split_long_opt_arg=${1#*=}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) - - _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) - - _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) - - _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) -fi - -if test x"$lt_shell_append" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) - - _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl - func_quote_for_eval "${2}" -dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ - eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) -fi -]) - -# _LT_PATH_CONVERSION_FUNCTIONS -# ----------------------------- -# Determine which file name conversion functions should be used by -# func_to_host_file (and, implicitly, by func_to_host_path). These are needed -# for certain cross-compile configurations and native mingw. -m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_MSG_CHECKING([how to convert $build file names to $host format]) -AC_CACHE_VAL(lt_cv_to_host_file_cmd, -[case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac -]) -to_host_file_cmd=$lt_cv_to_host_file_cmd -AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) -_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], - [0], [convert $build file names to $host format])dnl - -AC_MSG_CHECKING([how to convert $build file names to toolchain format]) -AC_CACHE_VAL(lt_cv_to_tool_file_cmd, -[#assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac -]) -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) -_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], - [0], [convert $build files to toolchain format])dnl -])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/ltoptions.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/ltoptions.m4 deleted file mode 100644 index 5d9acd8e2..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/ltoptions.m4 +++ /dev/null @@ -1,384 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# Written by Gary V. Vaughan, 2004 -# -# 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. - -# serial 7 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [1], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for lt_pkg in $withval; do - IFS="$lt_save_ifs" - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/ltsugar.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/ltsugar.m4 deleted file mode 100644 index 9000a057d..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/ltsugar.m4 +++ /dev/null @@ -1,123 +0,0 @@ -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# 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. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/ltversion.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/ltversion.m4 deleted file mode 100644 index 07a8602d4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# 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. - -# @configure_input@ - -# serial 3337 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.4.2]) -m4_define([LT_PACKAGE_REVISION], [1.3337]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.2' -macro_revision='1.3337' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/m4/lt~obsolete.m4 b/ruby/ext/fiddle/libffi-3.2.1/m4/lt~obsolete.m4 deleted file mode 100644 index c573da90c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/m4/lt~obsolete.m4 +++ /dev/null @@ -1,98 +0,0 @@ -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# 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. - -# serial 5 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) -m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) -m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) -m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) -m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) -m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) -m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/ruby/ext/fiddle/libffi-3.2.1/man/Makefile.am b/ruby/ext/fiddle/libffi-3.2.1/man/Makefile.am deleted file mode 100644 index afcbfb69f..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/man/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -## Process this with automake to create Makefile.in - -AUTOMAKE_OPTIONS=foreign - -EXTRA_DIST = ffi.3 ffi_call.3 ffi_prep_cif.3 ffi_prep_cif_var.3 - -man_MANS = ffi.3 ffi_call.3 ffi_prep_cif.3 ffi_prep_cif_var.3 - diff --git a/ruby/ext/fiddle/libffi-3.2.1/man/Makefile.in b/ruby/ext/fiddle/libffi-3.2.1/man/Makefile.in deleted file mode 100644 index d92af74fb..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/man/Makefile.in +++ /dev/null @@ -1,541 +0,0 @@ -# Makefile.in generated by automake 1.13.4 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2013 Free Software Foundation, Inc. - -# This Makefile.in 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. - -@SET_MAKE@ -VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = man -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/asmcfi.m4 \ - $(top_srcdir)/m4/ax_append_flag.m4 \ - $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compile_flag.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_configure_args.m4 \ - $(top_srcdir)/m4/ax_enable_builddir.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/fficonfig.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -SOURCES = -DIST_SOURCES = -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -man3dir = $(mandir)/man3 -am__installdirs = "$(DESTDIR)$(man3dir)" -NROFF = nroff -MANS = $(man_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AM_LTLDFLAGS = @AM_LTLDFLAGS@ -AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@ -FGREP = @FGREP@ -GREP = @GREP@ -HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ -HAVE_LONG_DOUBLE_VARIANT = @HAVE_LONG_DOUBLE_VARIANT@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TARGET = @TARGET@ -TARGETDIR = @TARGETDIR@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_enable_builddir_sed = @ax_enable_builddir_sed@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sys_symbol_underscore = @sys_symbol_underscore@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -toolexecdir = @toolexecdir@ -toolexeclibdir = @toolexeclibdir@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -EXTRA_DIST = ffi.3 ffi_call.3 ffi_prep_cif.3 ffi_prep_cif_var.3 -man_MANS = ffi.3 ffi_call.3 ffi_prep_cif.3 ffi_prep_cif_var.3 -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign man/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-man3: $(man_MANS) - @$(NORMAL_INSTALL) - @list1=''; \ - list2='$(man_MANS)'; \ - test -n "$(man3dir)" \ - && test -n "`echo $$list1$$list2`" \ - || exit 0; \ - echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ - { for i in $$list1; do echo "$$i"; done; \ - if test -n "$$list2"; then \ - for i in $$list2; do echo "$$i"; done \ - | sed -n '/\.3[a-z]*$$/p'; \ - fi; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ - done; } - -uninstall-man3: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man3dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.3[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) -tags TAGS: - -ctags CTAGS: - -cscope cscopelist: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(MANS) -installdirs: - for dir in "$(DESTDIR)$(man3dir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: install-man3 - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-man - -uninstall-man: uninstall-man3 - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - cscopelist-am ctags-am distclean distclean-generic \ - distclean-libtool distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man3 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am tags-am uninstall uninstall-am uninstall-man \ - uninstall-man3 - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/ruby/ext/fiddle/libffi-3.2.1/man/ffi.3 b/ruby/ext/fiddle/libffi-3.2.1/man/ffi.3 deleted file mode 100644 index 1f1d3031c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/man/ffi.3 +++ /dev/null @@ -1,41 +0,0 @@ -.Dd February 15, 2008 -.Dt FFI 3 -.Sh NAME -.Nm FFI -.Nd Foreign Function Interface -.Sh LIBRARY -libffi, -lffi -.Sh SYNOPSIS -.In ffi.h -.Ft ffi_status -.Fo ffi_prep_cif -.Fa "ffi_cif *cif" -.Fa "ffi_abi abi" -.Fa "unsigned int nargs" -.Fa "ffi_type *rtype" -.Fa "ffi_type **atypes" -.Fc -.Ft void -.Fo ffi_prep_cif_var -.Fa "ffi_cif *cif" -.Fa "ffi_abi abi" -.Fa "unsigned int nfixedargs" -.Fa "unsigned int ntotalargs" -.Fa "ffi_type *rtype" -.Fa "ffi_type **atypes" -.Fc -.Ft void -.Fo ffi_call -.Fa "ffi_cif *cif" -.Fa "void (*fn)(void)" -.Fa "void *rvalue" -.Fa "void **avalue" -.Fc -.Sh DESCRIPTION -The foreign function interface provides a mechanism by which a function can -generate a call to another function at runtime without requiring knowledge of -the called function's interface at compile time. -.Sh SEE ALSO -.Xr ffi_prep_cif 3 , -.Xr ffi_prep_cif_var 3 , -.Xr ffi_call 3 diff --git a/ruby/ext/fiddle/libffi-3.2.1/man/ffi_call.3 b/ruby/ext/fiddle/libffi-3.2.1/man/ffi_call.3 deleted file mode 100644 index 5351513f9..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/man/ffi_call.3 +++ /dev/null @@ -1,103 +0,0 @@ -.Dd February 15, 2008 -.Dt ffi_call 3 -.Sh NAME -.Nm ffi_call -.Nd Invoke a foreign function. -.Sh SYNOPSIS -.In ffi.h -.Ft void -.Fo ffi_call -.Fa "ffi_cif *cif" -.Fa "void (*fn)(void)" -.Fa "void *rvalue" -.Fa "void **avalue" -.Fc -.Sh DESCRIPTION -The -.Nm ffi_call -function provides a simple mechanism for invoking a function without -requiring knowledge of the function's interface at compile time. -.Fa fn -is called with the values retrieved from the pointers in the -.Fa avalue -array. The return value from -.Fa fn -is placed in storage pointed to by -.Fa rvalue . -.Fa cif -contains information describing the data types, sizes and alignments of the -arguments to and return value from -.Fa fn , -and must be initialized with -.Nm ffi_prep_cif -before it is used with -.Nm ffi_call . -.Pp -.Fa rvalue -must point to storage that is sizeof(ffi_arg) or larger for non-floating point -types. For smaller-sized return value types, the -.Nm ffi_arg -or -.Nm ffi_sarg -integral type must be used to hold -the return value. -.Sh EXAMPLES -.Bd -literal -#include -#include - -unsigned char -foo(unsigned int, float); - -int -main(int argc, const char **argv) -{ - ffi_cif cif; - ffi_type *arg_types[2]; - void *arg_values[2]; - ffi_status status; - - // Because the return value from foo() is smaller than sizeof(long), it - // must be passed as ffi_arg or ffi_sarg. - ffi_arg result; - - // Specify the data type of each argument. Available types are defined - // in . - arg_types[0] = &ffi_type_uint; - arg_types[1] = &ffi_type_float; - - // Prepare the ffi_cif structure. - if ((status = ffi_prep_cif(&cif, FFI_DEFAULT_ABI, - 2, &ffi_type_uint8, arg_types)) != FFI_OK) - { - // Handle the ffi_status error. - } - - // Specify the values of each argument. - unsigned int arg1 = 42; - float arg2 = 5.1; - - arg_values[0] = &arg1; - arg_values[1] = &arg2; - - // Invoke the function. - ffi_call(&cif, FFI_FN(foo), &result, arg_values); - - // The ffi_arg 'result' now contains the unsigned char returned from foo(), - // which can be accessed by a typecast. - printf("result is %hhu", (unsigned char)result); - - return 0; -} - -// The target function. -unsigned char -foo(unsigned int x, float y) -{ - unsigned char result = x - y; - return result; -} -.Ed -.Sh SEE ALSO -.Xr ffi 3 , -.Xr ffi_prep_cif 3 diff --git a/ruby/ext/fiddle/libffi-3.2.1/man/ffi_prep_cif.3 b/ruby/ext/fiddle/libffi-3.2.1/man/ffi_prep_cif.3 deleted file mode 100644 index ab2be8adc..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/man/ffi_prep_cif.3 +++ /dev/null @@ -1,68 +0,0 @@ -.Dd February 15, 2008 -.Dt ffi_prep_cif 3 -.Sh NAME -.Nm ffi_prep_cif -.Nd Prepare a -.Nm ffi_cif -structure for use with -.Nm ffi_call -. -.Sh SYNOPSIS -.In ffi.h -.Ft ffi_status -.Fo ffi_prep_cif -.Fa "ffi_cif *cif" -.Fa "ffi_abi abi" -.Fa "unsigned int nargs" -.Fa "ffi_type *rtype" -.Fa "ffi_type **atypes" -.Fc -.Sh DESCRIPTION -The -.Nm ffi_prep_cif -function prepares a -.Nm ffi_cif -structure for use with -.Nm ffi_call -. -.Fa abi -specifies a set of calling conventions to use. -.Fa atypes -is an array of -.Fa nargs -pointers to -.Nm ffi_type -structs that describe the data type, size and alignment of each argument. -.Fa rtype -points to an -.Nm ffi_type -that describes the data type, size and alignment of the -return value. Note that to call a variadic function -.Nm ffi_prep_cif_var -must be used instead. -.Sh RETURN VALUES -Upon successful completion, -.Nm ffi_prep_cif -returns -.Nm FFI_OK . -It will return -.Nm FFI_BAD_TYPEDEF -if -.Fa cif -is -.Nm NULL -or -.Fa atypes -or -.Fa rtype -is malformed. If -.Fa abi -does not refer to a valid ABI, -.Nm FFI_BAD_ABI -will be returned. Available ABIs are -defined in -.Nm . -.Sh SEE ALSO -.Xr ffi 3 , -.Xr ffi_call 3 , -.Xr ffi_prep_cif_var 3 diff --git a/ruby/ext/fiddle/libffi-3.2.1/man/ffi_prep_cif_var.3 b/ruby/ext/fiddle/libffi-3.2.1/man/ffi_prep_cif_var.3 deleted file mode 100644 index 7e19d0b07..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/man/ffi_prep_cif_var.3 +++ /dev/null @@ -1,73 +0,0 @@ -.Dd January 25, 2011 -.Dt ffi_prep_cif_var 3 -.Sh NAME -.Nm ffi_prep_cif_var -.Nd Prepare a -.Nm ffi_cif -structure for use with -.Nm ffi_call -for variadic functions. -.Sh SYNOPSIS -.In ffi.h -.Ft ffi_status -.Fo ffi_prep_cif_var -.Fa "ffi_cif *cif" -.Fa "ffi_abi abi" -.Fa "unsigned int nfixedargs" -.Fa "unsigned int ntotalargs" -.Fa "ffi_type *rtype" -.Fa "ffi_type **atypes" -.Fc -.Sh DESCRIPTION -The -.Nm ffi_prep_cif_var -function prepares a -.Nm ffi_cif -structure for use with -.Nm ffi_call -for variadic functions. -.Fa abi -specifies a set of calling conventions to use. -.Fa atypes -is an array of -.Fa ntotalargs -pointers to -.Nm ffi_type -structs that describe the data type, size and alignment of each argument. -.Fa rtype -points to an -.Nm ffi_type -that describes the data type, size and alignment of the -return value. -.Fa nfixedargs -must contain the number of fixed (non-variadic) arguments. -Note that to call a non-variadic function -.Nm ffi_prep_cif -must be used. -.Sh RETURN VALUES -Upon successful completion, -.Nm ffi_prep_cif_var -returns -.Nm FFI_OK . -It will return -.Nm FFI_BAD_TYPEDEF -if -.Fa cif -is -.Nm NULL -or -.Fa atypes -or -.Fa rtype -is malformed. If -.Fa abi -does not refer to a valid ABI, -.Nm FFI_BAD_ABI -will be returned. Available ABIs are -defined in -.Nm -. -.Sh SEE ALSO -.Xr ffi 3 , -.Xr ffi_call 3 , -.Xr ffi_prep_cif 3 diff --git a/ruby/ext/fiddle/libffi-3.2.1/mdate-sh b/ruby/ext/fiddle/libffi-3.2.1/mdate-sh deleted file mode 100755 index b3719cf76..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/mdate-sh +++ /dev/null @@ -1,224 +0,0 @@ -#!/bin/sh -# Get modification time of a file or directory and pretty-print it. - -scriptversion=2010-08-21.06; # UTC - -# Copyright (C) 1995-2013 Free Software Foundation, Inc. -# written by Ulrich Drepper , June 1995 -# -# 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 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 . - -# 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. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -fi - -case $1 in - '') - echo "$0: No file. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: mdate-sh [--help] [--version] FILE - -Pretty-print the modification day of FILE, in the format: -1 January 1970 - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "mdate-sh $scriptversion" - exit $? - ;; -esac - -error () -{ - echo "$0: $1" >&2 - exit 1 -} - - -# Prevent date giving response in another language. -LANG=C -export LANG -LC_ALL=C -export LC_ALL -LC_TIME=C -export LC_TIME - -# GNU ls changes its time format in response to the TIME_STYLE -# variable. Since we cannot assume 'unset' works, revert this -# variable to its documented default. -if test "${TIME_STYLE+set}" = set; then - TIME_STYLE=posix-long-iso - export TIME_STYLE -fi - -save_arg1=$1 - -# Find out how to get the extended ls output of a file or directory. -if ls -L /dev/null 1>/dev/null 2>&1; then - ls_command='ls -L -l -d' -else - ls_command='ls -l -d' -fi -# Avoid user/group names that might have spaces, when possible. -if ls -n /dev/null 1>/dev/null 2>&1; then - ls_command="$ls_command -n" -fi - -# A 'ls -l' line looks as follows on OS/2. -# drwxrwx--- 0 Aug 11 2001 foo -# This differs from Unix, which adds ownership information. -# drwxrwx--- 2 root root 4096 Aug 11 2001 foo -# -# To find the date, we split the line on spaces and iterate on words -# until we find a month. This cannot work with files whose owner is a -# user named "Jan", or "Feb", etc. However, it's unlikely that '/' -# will be owned by a user whose name is a month. So we first look at -# the extended ls output of the root directory to decide how many -# words should be skipped to get the date. - -# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. -set x`$ls_command /` - -# Find which argument is the month. -month= -command= -until test $month -do - test $# -gt 0 || error "failed parsing '$ls_command /' output" - shift - # Add another shift to the command. - command="$command shift;" - case $1 in - Jan) month=January; nummonth=1;; - Feb) month=February; nummonth=2;; - Mar) month=March; nummonth=3;; - Apr) month=April; nummonth=4;; - May) month=May; nummonth=5;; - Jun) month=June; nummonth=6;; - Jul) month=July; nummonth=7;; - Aug) month=August; nummonth=8;; - Sep) month=September; nummonth=9;; - Oct) month=October; nummonth=10;; - Nov) month=November; nummonth=11;; - Dec) month=December; nummonth=12;; - esac -done - -test -n "$month" || error "failed parsing '$ls_command /' output" - -# Get the extended ls output of the file or directory. -set dummy x`eval "$ls_command \"\\\$save_arg1\""` - -# Remove all preceding arguments -eval $command - -# Because of the dummy argument above, month is in $2. -# -# On a POSIX system, we should have -# -# $# = 5 -# $1 = file size -# $2 = month -# $3 = day -# $4 = year or time -# $5 = filename -# -# On Darwin 7.7.0 and 7.6.0, we have -# -# $# = 4 -# $1 = day -# $2 = month -# $3 = year or time -# $4 = filename - -# Get the month. -case $2 in - Jan) month=January; nummonth=1;; - Feb) month=February; nummonth=2;; - Mar) month=March; nummonth=3;; - Apr) month=April; nummonth=4;; - May) month=May; nummonth=5;; - Jun) month=June; nummonth=6;; - Jul) month=July; nummonth=7;; - Aug) month=August; nummonth=8;; - Sep) month=September; nummonth=9;; - Oct) month=October; nummonth=10;; - Nov) month=November; nummonth=11;; - Dec) month=December; nummonth=12;; -esac - -case $3 in - ???*) day=$1;; - *) day=$3; shift;; -esac - -# Here we have to deal with the problem that the ls output gives either -# the time of day or the year. -case $3 in - *:*) set `date`; eval year=\$$# - case $2 in - Jan) nummonthtod=1;; - Feb) nummonthtod=2;; - Mar) nummonthtod=3;; - Apr) nummonthtod=4;; - May) nummonthtod=5;; - Jun) nummonthtod=6;; - Jul) nummonthtod=7;; - Aug) nummonthtod=8;; - Sep) nummonthtod=9;; - Oct) nummonthtod=10;; - Nov) nummonthtod=11;; - Dec) nummonthtod=12;; - esac - # For the first six month of the year the time notation can also - # be used for files modified in the last year. - if (expr $nummonth \> $nummonthtod) > /dev/null; - then - year=`expr $year - 1` - fi;; - *) year=$3;; -esac - -# The result. -echo $day $month $year - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/ruby/ext/fiddle/libffi-3.2.1/missing b/ruby/ext/fiddle/libffi-3.2.1/missing deleted file mode 100755 index cdea51493..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/missing +++ /dev/null @@ -1,215 +0,0 @@ -#! /bin/sh -# Common wrapper for a few potentially missing GNU programs. - -scriptversion=2012-06-26.16; # UTC - -# Copyright (C) 1996-2013 Free Software Foundation, Inc. -# Originally written by Fran,cois Pinard , 1996. - -# 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 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 . - -# 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. - -if test $# -eq 0; then - echo 1>&2 "Try '$0 --help' for more information" - exit 1 -fi - -case $1 in - - --is-lightweight) - # Used by our autoconf macros to check whether the available missing - # script is modern enough. - exit 0 - ;; - - --run) - # Back-compat with the calling convention used by older automake. - shift - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due -to PROGRAM being missing or too old. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - -Supported PROGRAM values: - aclocal autoconf autoheader autom4te automake makeinfo - bison yacc flex lex help2man - -Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and -'g' are ignored when checking the name. - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: unknown '$1' option" - echo 1>&2 "Try '$0 --help' for more information" - exit 1 - ;; - -esac - -# Run the given program, remember its exit status. -"$@"; st=$? - -# If it succeeded, we are done. -test $st -eq 0 && exit 0 - -# Also exit now if we it failed (or wasn't found), and '--version' was -# passed; such an option is passed most likely to detect whether the -# program is present and works. -case $2 in --version|--help) exit $st;; esac - -# Exit code 63 means version mismatch. This often happens when the user -# tries to use an ancient version of a tool on a file that requires a -# minimum version. -if test $st -eq 63; then - msg="probably too old" -elif test $st -eq 127; then - # Program was missing. - msg="missing on your system" -else - # Program was found and executed, but failed. Give up. - exit $st -fi - -perl_URL=http://www.perl.org/ -flex_URL=http://flex.sourceforge.net/ -gnu_software_URL=http://www.gnu.org/software - -program_details () -{ - case $1 in - aclocal|automake) - echo "The '$1' program is part of the GNU Automake package:" - echo "<$gnu_software_URL/automake>" - echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" - echo "<$gnu_software_URL/autoconf>" - echo "<$gnu_software_URL/m4/>" - echo "<$perl_URL>" - ;; - autoconf|autom4te|autoheader) - echo "The '$1' program is part of the GNU Autoconf package:" - echo "<$gnu_software_URL/autoconf/>" - echo "It also requires GNU m4 and Perl in order to run:" - echo "<$gnu_software_URL/m4/>" - echo "<$perl_URL>" - ;; - esac -} - -give_advice () -{ - # Normalize program name to check for. - normalized_program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - - printf '%s\n' "'$1' is $msg." - - configure_deps="'configure.ac' or m4 files included by 'configure.ac'" - case $normalized_program in - autoconf*) - echo "You should only need it if you modified 'configure.ac'," - echo "or m4 files included by it." - program_details 'autoconf' - ;; - autoheader*) - echo "You should only need it if you modified 'acconfig.h' or" - echo "$configure_deps." - program_details 'autoheader' - ;; - automake*) - echo "You should only need it if you modified 'Makefile.am' or" - echo "$configure_deps." - program_details 'automake' - ;; - aclocal*) - echo "You should only need it if you modified 'acinclude.m4' or" - echo "$configure_deps." - program_details 'aclocal' - ;; - autom4te*) - echo "You might have modified some maintainer files that require" - echo "the 'automa4te' program to be rebuilt." - program_details 'autom4te' - ;; - bison*|yacc*) - echo "You should only need it if you modified a '.y' file." - echo "You may want to install the GNU Bison package:" - echo "<$gnu_software_URL/bison/>" - ;; - lex*|flex*) - echo "You should only need it if you modified a '.l' file." - echo "You may want to install the Fast Lexical Analyzer package:" - echo "<$flex_URL>" - ;; - help2man*) - echo "You should only need it if you modified a dependency" \ - "of a man page." - echo "You may want to install the GNU Help2man package:" - echo "<$gnu_software_URL/help2man/>" - ;; - makeinfo*) - echo "You should only need it if you modified a '.texi' file, or" - echo "any other file indirectly affecting the aspect of the manual." - echo "You might want to install the Texinfo package:" - echo "<$gnu_software_URL/texinfo/>" - echo "The spurious makeinfo call might also be the consequence of" - echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" - echo "want to install GNU make:" - echo "<$gnu_software_URL/make/>" - ;; - *) - echo "You might have modified some files without having the proper" - echo "tools for further handling them. Check the 'README' file, it" - echo "often tells you about the needed prerequisites for installing" - echo "this package. You may also peek at any GNU archive site, in" - echo "case some other package contains this missing '$1' program." - ;; - esac -} - -give_advice "$1" | sed -e '1s/^/WARNING: /' \ - -e '2,$s/^/ /' >&2 - -# Propagate the correct exit status (expected to be 127 for a program -# not found, 63 for a program that failed due to version mismatch). -exit $st - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/ruby/ext/fiddle/libffi-3.2.1/msvcc.sh b/ruby/ext/fiddle/libffi-3.2.1/msvcc.sh deleted file mode 100755 index 65fbfef7e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/msvcc.sh +++ /dev/null @@ -1,257 +0,0 @@ -#!/bin/sh - -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (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.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is the MSVC wrappificator. -# -# The Initial Developer of the Original Code is -# Timothy Wall . -# Portions created by the Initial Developer are Copyright (C) 2009 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Daniel Witte -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -# -# GCC-compatible wrapper for cl.exe and ml.exe. Arguments are given in GCC -# format and translated into something sensible for cl or ml. -# - -args_orig=$@ -args="-nologo -W3" -static_crt= -debug_crt= -cl="cl" -ml="ml" -safeseh="-safeseh" -output= - -while [ $# -gt 0 ] -do - case $1 - in - -fexceptions) - # Don't enable exceptions for now. - #args="$args -EHac" - shift 1 - ;; - -m32) - shift 1 - ;; - -m64) - ml="ml64" # "$MSVC/x86_amd64/ml64" - safeseh= - shift 1 - ;; - -clang-cl) - cl="clang-cl" - safeseh= - shift 1 - ;; - -O0) - args="$args -Od" - shift 1 - ;; - -O*) - # Runtime error checks (enabled by setting -RTC1 in the -DFFI_DEBUG - # case below) are not compatible with optimization flags and will - # cause the build to fail. Therefore, drop the optimization flag if - # -DFFI_DEBUG is also set. - case $args_orig in - *-DFFI_DEBUG*) - args="$args" - ;; - *) - # The ax_cc_maxopt.m4 macro from the upstream autoconf-archive - # project doesn't support MSVC and therefore ends up trying to - # use -O3. Use the equivalent "max optimization" flag for MSVC - # instead of erroring out. - case $1 in - -O3) - args="$args -O2" - ;; - *) - args="$args $1" - ;; - esac - opt="true" - ;; - esac - shift 1 - ;; - -g) - # Enable debug symbol generation. - args="$args -Zi" - shift 1 - ;; - -DFFI_DEBUG) - # Enable runtime error checks. - args="$args -RTC1" - defines="$defines $1" - shift 1 - ;; - -DUSE_STATIC_RTL) - # Link against static CRT. - static_crt=1 - shift 1 - ;; - -DUSE_DEBUG_RTL) - # Link against debug CRT. - debug_crt=1 - shift 1 - ;; - -c) - args="$args -c" - args="$(echo $args | sed 's%/Fe%/Fo%g')" - single="-c" - shift 1 - ;; - -D*=*) - name="$(echo $1|sed 's/-D\([^=][^=]*\)=.*/\1/g')" - value="$(echo $1|sed 's/-D[^=][^=]*=//g')" - args="$args -D${name}='$value'" - defines="$defines -D${name}='$value'" - shift 1 - ;; - -D*) - args="$args $1" - defines="$defines $1" - shift 1 - ;; - -I) - args="$args -I$2" - includes="$includes -I$2" - shift 2 - ;; - -I*) - args="$args $1" - includes="$includes $1" - shift 1 - ;; - -W|-Wextra) - # TODO map extra warnings - shift 1 - ;; - -Wall) - # -Wall on MSVC is overzealous, and we already build with -W3. Nothing - # to do here. - shift 1 - ;; - -pedantic) - # libffi tests -pedantic with -Wall, so drop it also. - shift 1 - ;; - -Werror) - args="$args -WX" - shift 1 - ;; - -W*) - # TODO map specific warnings - shift 1 - ;; - -S) - args="$args -FAs" - shift 1 - ;; - -o) - outdir="$(dirname $2)" - base="$(basename $2|sed 's/\.[^.]*//g')" - if [ -n "$single" ]; then - output="-Fo$2" - else - output="-Fe$2" - fi - if [ -n "$assembly" ]; then - args="$args $output" - else - args="$args $output -Fd$outdir/$base -Fp$outdir/$base -Fa$outdir/$base" - fi - shift 2 - ;; - *.S) - src=$1 - assembly="true" - shift 1 - ;; - *.c) - args="$args $1" - shift 1 - ;; - *) - # Assume it's an MSVC argument, and pass it through. - args="$args $1" - shift 1 - ;; - esac -done - -# If -Zi is specified, certain optimizations are implicitly disabled -# by MSVC. Add back those optimizations if this is an optimized build. -# NOTE: These arguments must come after all others. -if [ -n "$opt" ]; then - args="$args -link -OPT:REF -OPT:ICF -INCREMENTAL:NO" -fi - -if [ -n "$static_crt" ]; then - md=-MT -else - md=-MD -fi - -if [ -n "$debug_crt" ]; then - md="${md}d" -fi - -if [ -n "$assembly" ]; then - if [ -z "$outdir" ]; then - outdir="." - fi - ppsrc="$outdir/$(basename $src|sed 's/.S$/.asm/g')" - echo "$cl -nologo -EP $includes $defines $src > $ppsrc" - "$cl" -nologo -EP $includes $defines $src > $ppsrc || exit $? - output="$(echo $output | sed 's%/F[dpa][^ ]*%%g')" - args="-nologo $safeseh $single $output $ppsrc" - - echo "$ml $args" - eval "\"$ml\" $args" - result=$? - - # required to fix ml64 broken output? - #mv *.obj $outdir -else - args="$md $args" - echo "$cl $args" - # Return an error code of 1 if an invalid command line parameter is passed - # instead of just ignoring it. - eval "(\"$cl\" $args 2>&1 1>&3 | \ - awk '{print \$0} /D9002/ {error=1} END{exit error}' >&2) 3>&1" - result=$? -fi - -exit $result - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/aarch64/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/aarch64/ffi.c deleted file mode 100644 index cdb7816e7..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/aarch64/ffi.c +++ /dev/null @@ -1,1179 +0,0 @@ -/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. - -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. */ - -#include - -#include -#include - -#include - -/* Stack alignment requirement in bytes */ -#if defined (__APPLE__) -#define AARCH64_STACK_ALIGN 1 -#else -#define AARCH64_STACK_ALIGN 16 -#endif - -#define N_X_ARG_REG 8 -#define N_V_ARG_REG 8 - -#define AARCH64_FFI_WITH_V (1 << AARCH64_FFI_WITH_V_BIT) - -union _d -{ - UINT64 d; - UINT32 s[2]; -}; - -struct call_context -{ - UINT64 x [AARCH64_N_XREG]; - struct - { - union _d d[2]; - } v [AARCH64_N_VREG]; -}; - -#if defined (__clang__) && defined (__APPLE__) -extern void -sys_icache_invalidate (void *start, size_t len); -#endif - -static inline void -ffi_clear_cache (void *start, void *end) -{ -#if defined (__clang__) && defined (__APPLE__) - sys_icache_invalidate (start, (char *)end - (char *)start); -#elif defined (__GNUC__) - __builtin___clear_cache (start, end); -#else -#error "Missing builtin to flush instruction cache" -#endif -} - -static void * -get_x_addr (struct call_context *context, unsigned n) -{ - return &context->x[n]; -} - -static void * -get_s_addr (struct call_context *context, unsigned n) -{ -#if defined __AARCH64EB__ - return &context->v[n].d[1].s[1]; -#else - return &context->v[n].d[0].s[0]; -#endif -} - -static void * -get_d_addr (struct call_context *context, unsigned n) -{ -#if defined __AARCH64EB__ - return &context->v[n].d[1]; -#else - return &context->v[n].d[0]; -#endif -} - -static void * -get_v_addr (struct call_context *context, unsigned n) -{ - return &context->v[n]; -} - -/* Return the memory location at which a basic type would reside - were it to have been stored in register n. */ - -static void * -get_basic_type_addr (unsigned short type, struct call_context *context, - unsigned n) -{ - switch (type) - { - case FFI_TYPE_FLOAT: - return get_s_addr (context, n); - case FFI_TYPE_DOUBLE: - return get_d_addr (context, n); -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: - return get_v_addr (context, n); -#endif - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_INT: - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - return get_x_addr (context, n); - case FFI_TYPE_VOID: - return NULL; - default: - FFI_ASSERT (0); - return NULL; - } -} - -/* Return the alignment width for each of the basic types. */ - -static size_t -get_basic_type_alignment (unsigned short type) -{ - switch (type) - { - case FFI_TYPE_FLOAT: -#if defined (__APPLE__) - return sizeof (UINT32); -#endif - case FFI_TYPE_DOUBLE: - return sizeof (UINT64); -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: - return sizeof (long double); -#endif - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: -#if defined (__APPLE__) - return sizeof (UINT8); -#endif - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: -#if defined (__APPLE__) - return sizeof (UINT16); -#endif - case FFI_TYPE_UINT32: - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: -#if defined (__APPLE__) - return sizeof (UINT32); -#endif - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - return sizeof (UINT64); - - default: - FFI_ASSERT (0); - return 0; - } -} - -/* Return the size in bytes for each of the basic types. */ - -static size_t -get_basic_type_size (unsigned short type) -{ - switch (type) - { - case FFI_TYPE_FLOAT: - return sizeof (UINT32); - case FFI_TYPE_DOUBLE: - return sizeof (UINT64); -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: - return sizeof (long double); -#endif - case FFI_TYPE_UINT8: - return sizeof (UINT8); - case FFI_TYPE_SINT8: - return sizeof (SINT8); - case FFI_TYPE_UINT16: - return sizeof (UINT16); - case FFI_TYPE_SINT16: - return sizeof (SINT16); - case FFI_TYPE_UINT32: - return sizeof (UINT32); - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - return sizeof (SINT32); - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT64: - return sizeof (UINT64); - case FFI_TYPE_SINT64: - return sizeof (SINT64); - - default: - FFI_ASSERT (0); - return 0; - } -} - -extern void -ffi_call_SYSV (unsigned (*)(struct call_context *context, unsigned char *, - extended_cif *), - struct call_context *context, - extended_cif *, - size_t, - void (*fn)(void)); - -extern void -ffi_closure_SYSV (ffi_closure *); - -/* Test for an FFI floating point representation. */ - -static unsigned -is_floating_type (unsigned short type) -{ - return (type == FFI_TYPE_FLOAT || type == FFI_TYPE_DOUBLE - || type == FFI_TYPE_LONGDOUBLE); -} - -/* Test for a homogeneous structure. */ - -static unsigned short -get_homogeneous_type (ffi_type *ty) -{ - if (ty->type == FFI_TYPE_STRUCT && ty->elements) - { - unsigned i; - unsigned short candidate_type - = get_homogeneous_type (ty->elements[0]); - for (i =1; ty->elements[i]; i++) - { - unsigned short iteration_type = 0; - /* If we have a nested struct, we must find its homogeneous type. - If that fits with our candidate type, we are still - homogeneous. */ - if (ty->elements[i]->type == FFI_TYPE_STRUCT - && ty->elements[i]->elements) - { - iteration_type = get_homogeneous_type (ty->elements[i]); - } - else - { - iteration_type = ty->elements[i]->type; - } - - /* If we are not homogeneous, return FFI_TYPE_STRUCT. */ - if (candidate_type != iteration_type) - return FFI_TYPE_STRUCT; - } - return candidate_type; - } - - /* Base case, we have no more levels of nesting, so we - are a basic type, and so, trivially homogeneous in that type. */ - return ty->type; -} - -/* Determine the number of elements within a STRUCT. - - Note, we must handle nested structs. - - If ty is not a STRUCT this function will return 0. */ - -static unsigned -element_count (ffi_type *ty) -{ - if (ty->type == FFI_TYPE_STRUCT && ty->elements) - { - unsigned n; - unsigned elems = 0; - for (n = 0; ty->elements[n]; n++) - { - if (ty->elements[n]->type == FFI_TYPE_STRUCT - && ty->elements[n]->elements) - elems += element_count (ty->elements[n]); - else - elems++; - } - return elems; - } - return 0; -} - -/* Test for a homogeneous floating point aggregate. - - A homogeneous floating point aggregate is a homogeneous aggregate of - a half- single- or double- precision floating point type with one - to four elements. Note that this includes nested structs of the - basic type. */ - -static int -is_hfa (ffi_type *ty) -{ - if (ty->type == FFI_TYPE_STRUCT - && ty->elements[0] - && is_floating_type (get_homogeneous_type (ty))) - { - unsigned n = element_count (ty); - return n >= 1 && n <= 4; - } - return 0; -} - -/* Test if an ffi_type is a candidate for passing in a register. - - This test does not check that sufficient registers of the - appropriate class are actually available, merely that IFF - sufficient registers are available then the argument will be passed - in register(s). - - Note that an ffi_type that is deemed to be a register candidate - will always be returned in registers. - - Returns 1 if a register candidate else 0. */ - -static int -is_register_candidate (ffi_type *ty) -{ - switch (ty->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif - case FFI_TYPE_UINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_UINT32: - case FFI_TYPE_UINT64: - case FFI_TYPE_POINTER: - case FFI_TYPE_SINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_SINT32: - case FFI_TYPE_INT: - case FFI_TYPE_SINT64: - return 1; - - case FFI_TYPE_STRUCT: - if (is_hfa (ty)) - { - return 1; - } - else if (ty->size > 16) - { - /* Too large. Will be replaced with a pointer to memory. The - pointer MAY be passed in a register, but the value will - not. This test specifically fails since the argument will - never be passed by value in registers. */ - return 0; - } - else - { - /* Might be passed in registers depending on the number of - registers required. */ - return (ty->size + 7) / 8 < N_X_ARG_REG; - } - break; - - default: - FFI_ASSERT (0); - break; - } - - return 0; -} - -/* Test if an ffi_type argument or result is a candidate for a vector - register. */ - -static int -is_v_register_candidate (ffi_type *ty) -{ - return is_floating_type (ty->type) - || (ty->type == FFI_TYPE_STRUCT && is_hfa (ty)); -} - -/* Representation of the procedure call argument marshalling - state. - - The terse state variable names match the names used in the AARCH64 - PCS. */ - -struct arg_state -{ - unsigned ngrn; /* Next general-purpose register number. */ - unsigned nsrn; /* Next vector register number. */ - size_t nsaa; /* Next stack offset. */ - -#if defined (__APPLE__) - unsigned allocating_variadic; -#endif -}; - -/* Initialize a procedure call argument marshalling state. */ -static void -arg_init (struct arg_state *state, size_t call_frame_size) -{ - state->ngrn = 0; - state->nsrn = 0; - state->nsaa = 0; - -#if defined (__APPLE__) - state->allocating_variadic = 0; -#endif -} - -/* Return the number of available consecutive core argument - registers. */ - -static unsigned -available_x (struct arg_state *state) -{ - return N_X_ARG_REG - state->ngrn; -} - -/* Return the number of available consecutive vector argument - registers. */ - -static unsigned -available_v (struct arg_state *state) -{ - return N_V_ARG_REG - state->nsrn; -} - -static void * -allocate_to_x (struct call_context *context, struct arg_state *state) -{ - FFI_ASSERT (state->ngrn < N_X_ARG_REG); - return get_x_addr (context, (state->ngrn)++); -} - -static void * -allocate_to_s (struct call_context *context, struct arg_state *state) -{ - FFI_ASSERT (state->nsrn < N_V_ARG_REG); - return get_s_addr (context, (state->nsrn)++); -} - -static void * -allocate_to_d (struct call_context *context, struct arg_state *state) -{ - FFI_ASSERT (state->nsrn < N_V_ARG_REG); - return get_d_addr (context, (state->nsrn)++); -} - -static void * -allocate_to_v (struct call_context *context, struct arg_state *state) -{ - FFI_ASSERT (state->nsrn < N_V_ARG_REG); - return get_v_addr (context, (state->nsrn)++); -} - -/* Allocate an aligned slot on the stack and return a pointer to it. */ -static void * -allocate_to_stack (struct arg_state *state, void *stack, size_t alignment, - size_t size) -{ - void *allocation; - - /* Round up the NSAA to the larger of 8 or the natural - alignment of the argument's type. */ - state->nsaa = ALIGN (state->nsaa, alignment); - state->nsaa = ALIGN (state->nsaa, alignment); -#if defined (__APPLE__) - if (state->allocating_variadic) - state->nsaa = ALIGN (state->nsaa, 8); -#else - state->nsaa = ALIGN (state->nsaa, 8); -#endif - - allocation = stack + state->nsaa; - - state->nsaa += size; - return allocation; -} - -static void -copy_basic_type (void *dest, void *source, unsigned short type) -{ - /* This is necessary to ensure that basic types are copied - sign extended to 64-bits as libffi expects. */ - switch (type) - { - case FFI_TYPE_FLOAT: - *(float *) dest = *(float *) source; - break; - case FFI_TYPE_DOUBLE: - *(double *) dest = *(double *) source; - break; -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: - *(long double *) dest = *(long double *) source; - break; -#endif - case FFI_TYPE_UINT8: - *(ffi_arg *) dest = *(UINT8 *) source; - break; - case FFI_TYPE_SINT8: - *(ffi_sarg *) dest = *(SINT8 *) source; - break; - case FFI_TYPE_UINT16: - *(ffi_arg *) dest = *(UINT16 *) source; - break; - case FFI_TYPE_SINT16: - *(ffi_sarg *) dest = *(SINT16 *) source; - break; - case FFI_TYPE_UINT32: - *(ffi_arg *) dest = *(UINT32 *) source; - break; - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - *(ffi_sarg *) dest = *(SINT32 *) source; - break; - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT64: - *(ffi_arg *) dest = *(UINT64 *) source; - break; - case FFI_TYPE_SINT64: - *(ffi_sarg *) dest = *(SINT64 *) source; - break; - case FFI_TYPE_VOID: - break; - - default: - FFI_ASSERT (0); - } -} - -static void -copy_hfa_to_reg_or_stack (void *memory, - ffi_type *ty, - struct call_context *context, - unsigned char *stack, - struct arg_state *state) -{ - unsigned elems = element_count (ty); - if (available_v (state) < elems) - { - /* There are insufficient V registers. Further V register allocations - are prevented, the NSAA is adjusted (by allocate_to_stack ()) - and the argument is copied to memory at the adjusted NSAA. */ - state->nsrn = N_V_ARG_REG; - memcpy (allocate_to_stack (state, stack, ty->alignment, ty->size), - memory, - ty->size); - } - else - { - int i; - unsigned short type = get_homogeneous_type (ty); - for (i = 0; i < elems; i++) - { - void *reg = allocate_to_v (context, state); - copy_basic_type (reg, memory, type); - memory += get_basic_type_size (type); - } - } -} - -/* Either allocate an appropriate register for the argument type, or if - none are available, allocate a stack slot and return a pointer - to the allocated space. */ - -static void * -allocate_to_register_or_stack (struct call_context *context, - unsigned char *stack, - struct arg_state *state, - unsigned short type) -{ - size_t alignment = get_basic_type_alignment (type); - size_t size = alignment; - switch (type) - { - case FFI_TYPE_FLOAT: - /* This is the only case for which the allocated stack size - should not match the alignment of the type. */ - size = sizeof (UINT32); - /* Fall through. */ - case FFI_TYPE_DOUBLE: - if (state->nsrn < N_V_ARG_REG) - return allocate_to_d (context, state); - state->nsrn = N_V_ARG_REG; - break; -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: - if (state->nsrn < N_V_ARG_REG) - return allocate_to_v (context, state); - state->nsrn = N_V_ARG_REG; - break; -#endif - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_INT: - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - if (state->ngrn < N_X_ARG_REG) - return allocate_to_x (context, state); - state->ngrn = N_X_ARG_REG; - break; - default: - FFI_ASSERT (0); - } - - return allocate_to_stack (state, stack, alignment, size); -} - -/* Copy a value to an appropriate register, or if none are - available, to the stack. */ - -static void -copy_to_register_or_stack (struct call_context *context, - unsigned char *stack, - struct arg_state *state, - void *value, - unsigned short type) -{ - copy_basic_type ( - allocate_to_register_or_stack (context, stack, state, type), - value, - type); -} - -/* Marshall the arguments from FFI representation to procedure call - context and stack. */ - -static unsigned -aarch64_prep_args (struct call_context *context, unsigned char *stack, - extended_cif *ecif) -{ - int i; - struct arg_state state; - - arg_init (&state, ALIGN(ecif->cif->bytes, 16)); - - for (i = 0; i < ecif->cif->nargs; i++) - { - ffi_type *ty = ecif->cif->arg_types[i]; - switch (ty->type) - { - case FFI_TYPE_VOID: - FFI_ASSERT (0); - break; - - /* If the argument is a basic type the argument is allocated to an - appropriate register, or if none are available, to the stack. */ - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT32: - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - copy_to_register_or_stack (context, stack, &state, - ecif->avalue[i], ty->type); - break; - - case FFI_TYPE_STRUCT: - if (is_hfa (ty)) - { - copy_hfa_to_reg_or_stack (ecif->avalue[i], ty, context, - stack, &state); - } - else if (ty->size > 16) - { - /* If the argument is a composite type that is larger than 16 - bytes, then the argument has been copied to memory, and - the argument is replaced by a pointer to the copy. */ - - copy_to_register_or_stack (context, stack, &state, - &(ecif->avalue[i]), FFI_TYPE_POINTER); - } - else if (available_x (&state) >= (ty->size + 7) / 8) - { - /* If the argument is a composite type and the size in - double-words is not more than the number of available - X registers, then the argument is copied into consecutive - X registers. */ - int j; - for (j = 0; j < (ty->size + 7) / 8; j++) - { - memcpy (allocate_to_x (context, &state), - &(((UINT64 *) ecif->avalue[i])[j]), - sizeof (UINT64)); - } - } - else - { - /* Otherwise, there are insufficient X registers. Further X - register allocations are prevented, the NSAA is adjusted - (by allocate_to_stack ()) and the argument is copied to - memory at the adjusted NSAA. */ - state.ngrn = N_X_ARG_REG; - - memcpy (allocate_to_stack (&state, stack, ty->alignment, - ty->size), ecif->avalue + i, ty->size); - } - break; - - default: - FFI_ASSERT (0); - break; - } - -#if defined (__APPLE__) - if (i + 1 == ecif->cif->aarch64_nfixedargs) - { - state.ngrn = N_X_ARG_REG; - state.nsrn = N_V_ARG_REG; - - state.allocating_variadic = 1; - } -#endif - } - - return ecif->cif->aarch64_flags; -} - -ffi_status -ffi_prep_cif_machdep (ffi_cif *cif) -{ - /* Round the stack up to a multiple of the stack alignment requirement. */ - cif->bytes = - (cif->bytes + (AARCH64_STACK_ALIGN - 1)) & ~ (AARCH64_STACK_ALIGN - 1); - - /* Initialize our flags. We are interested if this CIF will touch a - vector register, if so we will enable context save and load to - those registers, otherwise not. This is intended to be friendly - to lazy float context switching in the kernel. */ - cif->aarch64_flags = 0; - - if (is_v_register_candidate (cif->rtype)) - { - cif->aarch64_flags |= AARCH64_FFI_WITH_V; - } - else - { - int i; - for (i = 0; i < cif->nargs; i++) - if (is_v_register_candidate (cif->arg_types[i])) - { - cif->aarch64_flags |= AARCH64_FFI_WITH_V; - break; - } - } - -#if defined (__APPLE__) - cif->aarch64_nfixedargs = 0; -#endif - - return FFI_OK; -} - -#if defined (__APPLE__) - -/* Perform Apple-specific cif processing for variadic calls */ -ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, - unsigned int nfixedargs, - unsigned int ntotalargs) -{ - ffi_status status; - - status = ffi_prep_cif_machdep (cif); - - cif->aarch64_nfixedargs = nfixedargs; - - return status; -} - -#endif - -/* Call a function with the provided arguments and capture the return - value. */ -void -ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - { - struct call_context context; - size_t stack_bytes; - - /* Figure out the total amount of stack space we need, the - above call frame space needs to be 16 bytes aligned to - ensure correct alignment of the first object inserted in - that space hence the ALIGN applied to cif->bytes.*/ - stack_bytes = ALIGN(cif->bytes, 16); - - memset (&context, 0, sizeof (context)); - if (is_register_candidate (cif->rtype)) - { - ffi_call_SYSV (aarch64_prep_args, &context, &ecif, stack_bytes, fn); - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT64: - case FFI_TYPE_INT: - case FFI_TYPE_SINT64: - { - void *addr = get_basic_type_addr (cif->rtype->type, - &context, 0); - copy_basic_type (rvalue, addr, cif->rtype->type); - break; - } - - case FFI_TYPE_STRUCT: - if (is_hfa (cif->rtype)) - { - int j; - unsigned short type = get_homogeneous_type (cif->rtype); - unsigned elems = element_count (cif->rtype); - for (j = 0; j < elems; j++) - { - void *reg = get_basic_type_addr (type, &context, j); - copy_basic_type (rvalue, reg, type); - rvalue += get_basic_type_size (type); - } - } - else if ((cif->rtype->size + 7) / 8 < N_X_ARG_REG) - { - size_t size = ALIGN (cif->rtype->size, sizeof (UINT64)); - memcpy (rvalue, get_x_addr (&context, 0), size); - } - else - { - FFI_ASSERT (0); - } - break; - - default: - FFI_ASSERT (0); - break; - } - } - else - { - memcpy (get_x_addr (&context, 8), &rvalue, sizeof (UINT64)); - ffi_call_SYSV (aarch64_prep_args, &context, &ecif, - stack_bytes, fn); - } - break; - } - - default: - FFI_ASSERT (0); - break; - } -} - -static unsigned char trampoline [] = -{ 0x70, 0x00, 0x00, 0x58, /* ldr x16, 1f */ - 0x91, 0x00, 0x00, 0x10, /* adr x17, 2f */ - 0x00, 0x02, 0x1f, 0xd6 /* br x16 */ -}; - -/* Build a trampoline. */ - -#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX,FLAGS) \ - ({unsigned char *__tramp = (unsigned char*)(TRAMP); \ - UINT64 __fun = (UINT64)(FUN); \ - UINT64 __ctx = (UINT64)(CTX); \ - UINT64 __flags = (UINT64)(FLAGS); \ - memcpy (__tramp, trampoline, sizeof (trampoline)); \ - memcpy (__tramp + 12, &__fun, sizeof (__fun)); \ - memcpy (__tramp + 20, &__ctx, sizeof (__ctx)); \ - memcpy (__tramp + 28, &__flags, sizeof (__flags)); \ - ffi_clear_cache(__tramp, __tramp + FFI_TRAMPOLINE_SIZE); \ - }) - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - if (cif->abi != FFI_SYSV) - return FFI_BAD_ABI; - - FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_SYSV, codeloc, - cif->aarch64_flags); - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - -/* Primary handler to setup and invoke a function within a closure. - - A closure when invoked enters via the assembler wrapper - ffi_closure_SYSV(). The wrapper allocates a call context on the - stack, saves the interesting registers (from the perspective of - the calling convention) into the context then passes control to - ffi_closure_SYSV_inner() passing the saved context and a pointer to - the stack at the point ffi_closure_SYSV() was invoked. - - On the return path the assembler wrapper will reload call context - registers. - - ffi_closure_SYSV_inner() marshalls the call context into ffi value - descriptors, invokes the wrapped function, then marshalls the return - value back into the call context. */ - -void FFI_HIDDEN -ffi_closure_SYSV_inner (ffi_closure *closure, struct call_context *context, - void *stack) -{ - ffi_cif *cif = closure->cif; - void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); - void *rvalue = NULL; - int i; - struct arg_state state; - - arg_init (&state, ALIGN(cif->bytes, 16)); - - for (i = 0; i < cif->nargs; i++) - { - ffi_type *ty = cif->arg_types[i]; - - switch (ty->type) - { - case FFI_TYPE_VOID: - FFI_ASSERT (0); - break; - - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_INT: - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: - avalue[i] = allocate_to_register_or_stack (context, stack, - &state, ty->type); - break; -#endif - - case FFI_TYPE_STRUCT: - if (is_hfa (ty)) - { - unsigned n = element_count (ty); - if (available_v (&state) < n) - { - state.nsrn = N_V_ARG_REG; - avalue[i] = allocate_to_stack (&state, stack, ty->alignment, - ty->size); - } - else - { - switch (get_homogeneous_type (ty)) - { - case FFI_TYPE_FLOAT: - { - /* Eeek! We need a pointer to the structure, - however the homogeneous float elements are - being passed in individual S registers, - therefore the structure is not represented as - a contiguous sequence of bytes in our saved - register context. We need to fake up a copy - of the structure laid out in memory - correctly. The fake can be tossed once the - closure function has returned hence alloca() - is sufficient. */ - int j; - UINT32 *p = avalue[i] = alloca (ty->size); - for (j = 0; j < element_count (ty); j++) - memcpy (&p[j], - allocate_to_s (context, &state), - sizeof (*p)); - break; - } - - case FFI_TYPE_DOUBLE: - { - /* Eeek! We need a pointer to the structure, - however the homogeneous float elements are - being passed in individual S registers, - therefore the structure is not represented as - a contiguous sequence of bytes in our saved - register context. We need to fake up a copy - of the structure laid out in memory - correctly. The fake can be tossed once the - closure function has returned hence alloca() - is sufficient. */ - int j; - UINT64 *p = avalue[i] = alloca (ty->size); - for (j = 0; j < element_count (ty); j++) - memcpy (&p[j], - allocate_to_d (context, &state), - sizeof (*p)); - break; - } - -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: - memcpy (&avalue[i], - allocate_to_v (context, &state), - sizeof (*avalue)); - break; -#endif - - default: - FFI_ASSERT (0); - break; - } - } - } - else if (ty->size > 16) - { - /* Replace Composite type of size greater than 16 with a - pointer. */ - memcpy (&avalue[i], - allocate_to_register_or_stack (context, stack, - &state, FFI_TYPE_POINTER), - sizeof (avalue[i])); - } - else if (available_x (&state) >= (ty->size + 7) / 8) - { - avalue[i] = get_x_addr (context, state.ngrn); - state.ngrn += (ty->size + 7) / 8; - } - else - { - state.ngrn = N_X_ARG_REG; - - avalue[i] = allocate_to_stack (&state, stack, ty->alignment, - ty->size); - } - break; - - default: - FFI_ASSERT (0); - break; - } - } - - /* Figure out where the return value will be passed, either in - registers or in a memory block allocated by the caller and passed - in x8. */ - - if (is_register_candidate (cif->rtype)) - { - /* Register candidates are *always* returned in registers. */ - - /* Allocate a scratchpad for the return value, we will let the - callee scrible the result into the scratch pad then move the - contents into the appropriate return value location for the - call convention. */ - rvalue = alloca (cif->rtype->size); - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Copy the return value into the call context so that it is returned - as expected to our caller. */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - break; - - case FFI_TYPE_UINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_UINT32: - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - case FFI_TYPE_SINT64: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif - { - void *addr = get_basic_type_addr (cif->rtype->type, context, 0); - copy_basic_type (addr, rvalue, cif->rtype->type); - break; - } - case FFI_TYPE_STRUCT: - if (is_hfa (cif->rtype)) - { - int j; - unsigned short type = get_homogeneous_type (cif->rtype); - unsigned elems = element_count (cif->rtype); - for (j = 0; j < elems; j++) - { - void *reg = get_basic_type_addr (type, context, j); - copy_basic_type (reg, rvalue, type); - rvalue += get_basic_type_size (type); - } - } - else if ((cif->rtype->size + 7) / 8 < N_X_ARG_REG) - { - size_t size = ALIGN (cif->rtype->size, sizeof (UINT64)) ; - memcpy (get_x_addr (context, 0), rvalue, size); - } - else - { - FFI_ASSERT (0); - } - break; - default: - FFI_ASSERT (0); - break; - } - } - else - { - memcpy (&rvalue, get_x_addr (context, 8), sizeof (UINT64)); - (closure->fun) (cif, rvalue, avalue, closure->user_data); - } -} - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/aarch64/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/aarch64/ffitarget.h deleted file mode 100644 index 4bbced26f..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/aarch64/ffitarget.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. - -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. */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi - { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV - } ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 36 -#define FFI_NATIVE_RAW_API 0 - -/* ---- Internal ---- */ - -#if defined (__APPLE__) -#define FFI_TARGET_SPECIFIC_VARIADIC -#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_flags; unsigned aarch64_nfixedargs -#else -#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_flags -#endif - -#define AARCH64_FFI_WITH_V_BIT 0 - -#define AARCH64_N_XREG 32 -#define AARCH64_N_VREG 32 -#define AARCH64_CALL_CONTEXT_SIZE (AARCH64_N_XREG * 8 + AARCH64_N_VREG * 16) - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/aarch64/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/aarch64/sysv.S deleted file mode 100644 index 169eab804..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/aarch64/sysv.S +++ /dev/null @@ -1,333 +0,0 @@ -/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. - -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. */ - -#define LIBFFI_ASM -#include -#include - -#ifdef HAVE_MACHINE_ASM_H -#include -#else -#ifdef __USER_LABEL_PREFIX__ -#define CONCAT1(a, b) CONCAT2(a, b) -#define CONCAT2(a, b) a ## b - -/* Use the right prefix for global labels. */ -#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) -#else -#define CNAME(x) x -#endif -#endif - -#define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off -#define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off -#define cfi_restore(reg) .cfi_restore reg -#define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg - - .text - .globl CNAME(ffi_call_SYSV) -#ifdef __ELF__ - .type CNAME(ffi_call_SYSV), #function -#endif -#ifdef __APPLE__ - .align 2 -#endif - -/* ffi_call_SYSV() - - Create a stack frame, setup an argument context, call the callee - and extract the result. - - The maximum required argument stack size is provided, - ffi_call_SYSV() allocates that stack space then calls the - prepare_fn to populate register context and stack. The - argument passing registers are loaded from the register - context and the callee called, on return the register passing - register are saved back to the context. Our caller will - extract the return value from the final state of the saved - register context. - - Prototype: - - extern unsigned - ffi_call_SYSV (void (*)(struct call_context *context, unsigned char *, - extended_cif *), - struct call_context *context, - extended_cif *, - size_t required_stack_size, - void (*fn)(void)); - - Therefore on entry we have: - - x0 prepare_fn - x1 &context - x2 &ecif - x3 bytes - x4 fn - - This function uses the following stack frame layout: - - == - saved x30(lr) - x29(fp)-> saved x29(fp) - saved x24 - saved x23 - saved x22 - sp' -> saved x21 - ... - sp -> (constructed callee stack arguments) - == - - Voila! */ - -#define ffi_call_SYSV_FS (8 * 4) - - .cfi_startproc -CNAME(ffi_call_SYSV): - stp x29, x30, [sp, #-16]! - cfi_adjust_cfa_offset (16) - cfi_rel_offset (x29, 0) - cfi_rel_offset (x30, 8) - - mov x29, sp - cfi_def_cfa_register (x29) - sub sp, sp, #ffi_call_SYSV_FS - - stp x21, x22, [sp, #0] - cfi_rel_offset (x21, 0 - ffi_call_SYSV_FS) - cfi_rel_offset (x22, 8 - ffi_call_SYSV_FS) - - stp x23, x24, [sp, #16] - cfi_rel_offset (x23, 16 - ffi_call_SYSV_FS) - cfi_rel_offset (x24, 24 - ffi_call_SYSV_FS) - - mov x21, x1 - mov x22, x2 - mov x24, x4 - - /* Allocate the stack space for the actual arguments, many - arguments will be passed in registers, but we assume - worst case and allocate sufficient stack for ALL of - the arguments. */ - sub sp, sp, x3 - - /* unsigned (*prepare_fn) (struct call_context *context, - unsigned char *stack, extended_cif *ecif); - */ - mov x23, x0 - mov x0, x1 - mov x1, sp - /* x2 already in place */ - blr x23 - - /* Preserve the flags returned. */ - mov x23, x0 - - /* Figure out if we should touch the vector registers. */ - tbz x23, #AARCH64_FFI_WITH_V_BIT, 1f - - /* Load the vector argument passing registers. */ - ldp q0, q1, [x21, #8*32 + 0] - ldp q2, q3, [x21, #8*32 + 32] - ldp q4, q5, [x21, #8*32 + 64] - ldp q6, q7, [x21, #8*32 + 96] -1: - /* Load the core argument passing registers. */ - ldp x0, x1, [x21, #0] - ldp x2, x3, [x21, #16] - ldp x4, x5, [x21, #32] - ldp x6, x7, [x21, #48] - - /* Don't forget x8 which may be holding the address of a return buffer. - */ - ldr x8, [x21, #8*8] - - blr x24 - - /* Save the core argument passing registers. */ - stp x0, x1, [x21, #0] - stp x2, x3, [x21, #16] - stp x4, x5, [x21, #32] - stp x6, x7, [x21, #48] - - /* Note nothing useful ever comes back in x8! */ - - /* Figure out if we should touch the vector registers. */ - tbz x23, #AARCH64_FFI_WITH_V_BIT, 1f - - /* Save the vector argument passing registers. */ - stp q0, q1, [x21, #8*32 + 0] - stp q2, q3, [x21, #8*32 + 32] - stp q4, q5, [x21, #8*32 + 64] - stp q6, q7, [x21, #8*32 + 96] -1: - /* All done, unwind our stack frame. */ - ldp x21, x22, [x29, # - ffi_call_SYSV_FS] - cfi_restore (x21) - cfi_restore (x22) - - ldp x23, x24, [x29, # - ffi_call_SYSV_FS + 16] - cfi_restore (x23) - cfi_restore (x24) - - mov sp, x29 - cfi_def_cfa_register (sp) - - ldp x29, x30, [sp], #16 - cfi_adjust_cfa_offset (-16) - cfi_restore (x29) - cfi_restore (x30) - - ret - - .cfi_endproc -#ifdef __ELF__ - .size CNAME(ffi_call_SYSV), .-CNAME(ffi_call_SYSV) -#endif - -#define ffi_closure_SYSV_FS (8 * 2 + AARCH64_CALL_CONTEXT_SIZE) - -/* ffi_closure_SYSV - - Closure invocation glue. This is the low level code invoked directly by - the closure trampoline to setup and call a closure. - - On entry x17 points to a struct trampoline_data, x16 has been clobbered - all other registers are preserved. - - We allocate a call context and save the argument passing registers, - then invoked the generic C ffi_closure_SYSV_inner() function to do all - the real work, on return we load the result passing registers back from - the call context. - - On entry - - extern void - ffi_closure_SYSV (struct trampoline_data *); - - struct trampoline_data - { - UINT64 *ffi_closure; - UINT64 flags; - }; - - This function uses the following stack frame layout: - - == - saved x30(lr) - x29(fp)-> saved x29(fp) - saved x22 - saved x21 - ... - sp -> call_context - == - - Voila! */ - - .text - .globl CNAME(ffi_closure_SYSV) -#ifdef __APPLE__ - .align 2 -#endif - .cfi_startproc -CNAME(ffi_closure_SYSV): - stp x29, x30, [sp, #-16]! - cfi_adjust_cfa_offset (16) - cfi_rel_offset (x29, 0) - cfi_rel_offset (x30, 8) - - mov x29, sp - cfi_def_cfa_register (x29) - - sub sp, sp, #ffi_closure_SYSV_FS - - stp x21, x22, [x29, #-16] - cfi_rel_offset (x21, -16) - cfi_rel_offset (x22, -8) - - /* Load x21 with &call_context. */ - mov x21, sp - /* Preserve our struct trampoline_data * */ - mov x22, x17 - - /* Save the rest of the argument passing registers. */ - stp x0, x1, [x21, #0] - stp x2, x3, [x21, #16] - stp x4, x5, [x21, #32] - stp x6, x7, [x21, #48] - /* Don't forget we may have been given a result scratch pad address. - */ - str x8, [x21, #64] - - /* Figure out if we should touch the vector registers. */ - ldr x0, [x22, #8] - tbz x0, #AARCH64_FFI_WITH_V_BIT, 1f - - /* Save the argument passing vector registers. */ - stp q0, q1, [x21, #8*32 + 0] - stp q2, q3, [x21, #8*32 + 32] - stp q4, q5, [x21, #8*32 + 64] - stp q6, q7, [x21, #8*32 + 96] -1: - /* Load &ffi_closure.. */ - ldr x0, [x22, #0] - mov x1, x21 - /* Compute the location of the stack at the point that the - trampoline was called. */ - add x2, x29, #16 - - bl CNAME(ffi_closure_SYSV_inner) - - /* Figure out if we should touch the vector registers. */ - ldr x0, [x22, #8] - tbz x0, #AARCH64_FFI_WITH_V_BIT, 1f - - /* Load the result passing vector registers. */ - ldp q0, q1, [x21, #8*32 + 0] - ldp q2, q3, [x21, #8*32 + 32] - ldp q4, q5, [x21, #8*32 + 64] - ldp q6, q7, [x21, #8*32 + 96] -1: - /* Load the result passing core registers. */ - ldp x0, x1, [x21, #0] - ldp x2, x3, [x21, #16] - ldp x4, x5, [x21, #32] - ldp x6, x7, [x21, #48] - /* Note nothing useful is returned in x8. */ - - /* We are done, unwind our frame. */ - ldp x21, x22, [x29, #-16] - cfi_restore (x21) - cfi_restore (x22) - - mov sp, x29 - cfi_def_cfa_register (sp) - - ldp x29, x30, [sp], #16 - cfi_adjust_cfa_offset (-16) - cfi_restore (x29) - cfi_restore (x30) - - ret - .cfi_endproc -#ifdef __ELF__ - .size CNAME(ffi_closure_SYSV), .-CNAME(ffi_closure_SYSV) -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/alpha/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/alpha/ffi.c deleted file mode 100644 index 192f691c4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/alpha/ffi.c +++ /dev/null @@ -1,288 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2012 Anthony Green - Copyright (c) 1998, 2001, 2007, 2008 Red Hat, Inc. - - Alpha Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include -#include - -/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; - all further uses in this file will refer to the 128-bit type. */ -#if defined(__LONG_DOUBLE_128__) -# if FFI_TYPE_LONGDOUBLE != 4 -# error FFI_TYPE_LONGDOUBLE out of date -# endif -#else -# undef FFI_TYPE_LONGDOUBLE -# define FFI_TYPE_LONGDOUBLE 4 -#endif - -extern void ffi_call_osf(void *, unsigned long, unsigned, void *, void (*)(void)) - FFI_HIDDEN; -extern void ffi_closure_osf(void) FFI_HIDDEN; - - -ffi_status -ffi_prep_cif_machdep(ffi_cif *cif) -{ - /* Adjust cif->bytes to represent a minimum 6 words for the temporary - register argument loading area. */ - if (cif->bytes < 6*FFI_SIZEOF_ARG) - cif->bytes = 6*FFI_SIZEOF_ARG; - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_STRUCT: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags = cif->rtype->type; - break; - - case FFI_TYPE_LONGDOUBLE: - /* 128-bit long double is returned in memory, like a struct. */ - cif->flags = FFI_TYPE_STRUCT; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - - return FFI_OK; -} - - -void -ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - unsigned long *stack, *argp; - long i, avn; - ffi_type **arg_types; - - /* If the return value is a struct and we don't have a return - value address then we need to make one. */ - if (rvalue == NULL && cif->flags == FFI_TYPE_STRUCT) - rvalue = alloca(cif->rtype->size); - - /* Allocate the space for the arguments, plus 4 words of temp - space for ffi_call_osf. */ - argp = stack = alloca(cif->bytes + 4*FFI_SIZEOF_ARG); - - if (cif->flags == FFI_TYPE_STRUCT) - *(void **) argp++ = rvalue; - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - while (i < avn) - { - size_t size = (*arg_types)->size; - - switch ((*arg_types)->type) - { - case FFI_TYPE_SINT8: - *(SINT64 *) argp = *(SINT8 *)(* avalue); - break; - - case FFI_TYPE_UINT8: - *(SINT64 *) argp = *(UINT8 *)(* avalue); - break; - - case FFI_TYPE_SINT16: - *(SINT64 *) argp = *(SINT16 *)(* avalue); - break; - - case FFI_TYPE_UINT16: - *(SINT64 *) argp = *(UINT16 *)(* avalue); - break; - - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - /* Note that unsigned 32-bit quantities are sign extended. */ - *(SINT64 *) argp = *(SINT32 *)(* avalue); - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_POINTER: - *(UINT64 *) argp = *(UINT64 *)(* avalue); - break; - - case FFI_TYPE_FLOAT: - if (argp - stack < 6) - { - /* Note the conversion -- all the fp regs are loaded as - doubles. The in-register format is the same. */ - *(double *) argp = *(float *)(* avalue); - } - else - *(float *) argp = *(float *)(* avalue); - break; - - case FFI_TYPE_DOUBLE: - *(double *) argp = *(double *)(* avalue); - break; - - case FFI_TYPE_LONGDOUBLE: - /* 128-bit long double is passed by reference. */ - *(long double **) argp = (long double *)(* avalue); - size = sizeof (long double *); - break; - - case FFI_TYPE_STRUCT: - memcpy(argp, *avalue, (*arg_types)->size); - break; - - default: - FFI_ASSERT(0); - } - - argp += ALIGN(size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - i++, arg_types++, avalue++; - } - - ffi_call_osf(stack, cif->bytes, cif->flags, rvalue, fn); -} - - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp; - - if (cif->abi != FFI_OSF) - return FFI_BAD_ABI; - - tramp = (unsigned int *) &closure->tramp[0]; - tramp[0] = 0x47fb0401; /* mov $27,$1 */ - tramp[1] = 0xa77b0010; /* ldq $27,16($27) */ - tramp[2] = 0x6bfb0000; /* jmp $31,($27),0 */ - tramp[3] = 0x47ff041f; /* nop */ - *(void **) &tramp[4] = ffi_closure_osf; - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - /* Flush the Icache. - - Tru64 UNIX as doesn't understand the imb mnemonic, so use call_pal - instead, since both Compaq as and gas can handle it. - - 0x86 is PAL_imb in Tru64 UNIX . */ - asm volatile ("call_pal 0x86" : : : "memory"); - - return FFI_OK; -} - - -long FFI_HIDDEN -ffi_closure_osf_inner(ffi_closure *closure, void *rvalue, unsigned long *argp) -{ - ffi_cif *cif; - void **avalue; - ffi_type **arg_types; - long i, avn, argn; - - cif = closure->cif; - avalue = alloca(cif->nargs * sizeof(void *)); - - argn = 0; - - /* Copy the caller's structure return address to that the closure - returns the data directly to the caller. */ - if (cif->flags == FFI_TYPE_STRUCT) - { - rvalue = (void *) argp[0]; - argn = 1; - } - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - /* Grab the addresses of the arguments from the stack frame. */ - while (i < avn) - { - size_t size = arg_types[i]->size; - - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_POINTER: - case FFI_TYPE_STRUCT: - avalue[i] = &argp[argn]; - break; - - case FFI_TYPE_FLOAT: - if (argn < 6) - { - /* Floats coming from registers need conversion from double - back to float format. */ - *(float *)&argp[argn - 6] = *(double *)&argp[argn - 6]; - avalue[i] = &argp[argn - 6]; - } - else - avalue[i] = &argp[argn]; - break; - - case FFI_TYPE_DOUBLE: - avalue[i] = &argp[argn - (argn < 6 ? 6 : 0)]; - break; - - case FFI_TYPE_LONGDOUBLE: - /* 128-bit long double is passed by reference. */ - avalue[i] = (long double *) argp[argn]; - size = sizeof (long double *); - break; - - default: - abort (); - } - - argn += ALIGN(size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - i++; - } - - /* Invoke the closure. */ - closure->fun (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_osf how to perform return type promotions. */ - return cif->rtype->type; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/alpha/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/alpha/ffitarget.h deleted file mode 100644 index af145bce8..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/alpha/ffitarget.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for Alpha. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_OSF, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_OSF -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 24 -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/alpha/osf.S b/ruby/ext/fiddle/libffi-3.2.1/src/alpha/osf.S deleted file mode 100644 index 6b9f4dfa0..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/alpha/osf.S +++ /dev/null @@ -1,387 +0,0 @@ -/* ----------------------------------------------------------------------- - osf.S - Copyright (c) 1998, 2001, 2007, 2008, 2011 Red Hat - - Alpha/OSF Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - .arch ev6 - .text - -/* ffi_call_osf (void *args, unsigned long bytes, unsigned flags, - void *raddr, void (*fnaddr)(void)); - - Bit o trickiness here -- ARGS+BYTES is the base of the stack frame - for this function. This has been allocated by ffi_call. We also - deallocate some of the stack that has been alloca'd. */ - - .align 3 - .globl ffi_call_osf - .ent ffi_call_osf - FFI_HIDDEN(ffi_call_osf) - -ffi_call_osf: - .frame $15, 32, $26, 0 - .mask 0x4008000, -32 -$LFB1: - addq $16,$17,$1 - mov $16, $30 - stq $26, 0($1) - stq $15, 8($1) - stq $18, 16($1) - mov $1, $15 -$LCFI1: - .prologue 0 - - stq $19, 24($1) - mov $20, $27 - - # Load up all of the (potential) argument registers. - ldq $16, 0($30) - ldt $f16, 0($30) - ldt $f17, 8($30) - ldq $17, 8($30) - ldt $f18, 16($30) - ldq $18, 16($30) - ldt $f19, 24($30) - ldq $19, 24($30) - ldt $f20, 32($30) - ldq $20, 32($30) - ldt $f21, 40($30) - ldq $21, 40($30) - - # Deallocate the register argument area. - lda $30, 48($30) - - jsr $26, ($27), 0 - ldgp $29, 0($26) - - # If the return value pointer is NULL, assume no return value. - ldq $19, 24($15) - ldq $18, 16($15) - ldq $26, 0($15) -$LCFI2: - beq $19, $noretval - - # Store the return value out in the proper type. - cmpeq $18, FFI_TYPE_INT, $1 - bne $1, $retint - cmpeq $18, FFI_TYPE_FLOAT, $2 - bne $2, $retfloat - cmpeq $18, FFI_TYPE_DOUBLE, $3 - bne $3, $retdouble - - .align 3 -$noretval: - ldq $15, 8($15) - ret - - .align 4 -$retint: - stq $0, 0($19) - nop - ldq $15, 8($15) - ret - - .align 4 -$retfloat: - sts $f0, 0($19) - nop - ldq $15, 8($15) - ret - - .align 4 -$retdouble: - stt $f0, 0($19) - nop - ldq $15, 8($15) - ret -$LFE1: - - .end ffi_call_osf - -/* ffi_closure_osf(...) - - Receives the closure argument in $1. */ - - .align 3 - .globl ffi_closure_osf - .ent ffi_closure_osf - FFI_HIDDEN(ffi_closure_osf) - -ffi_closure_osf: - .frame $30, 16*8, $26, 0 - .mask 0x4000000, -16*8 -$LFB2: - ldgp $29, 0($27) - subq $30, 16*8, $30 -$LCFI5: - stq $26, 0($30) -$LCFI6: - .prologue 1 - - # Store all of the potential argument registers in va_list format. - stt $f16, 4*8($30) - stt $f17, 5*8($30) - stt $f18, 6*8($30) - stt $f19, 7*8($30) - stt $f20, 8*8($30) - stt $f21, 9*8($30) - stq $16, 10*8($30) - stq $17, 11*8($30) - stq $18, 12*8($30) - stq $19, 13*8($30) - stq $20, 14*8($30) - stq $21, 15*8($30) - - # Call ffi_closure_osf_inner to do the bulk of the work. - mov $1, $16 - lda $17, 2*8($30) - lda $18, 10*8($30) - jsr $26, ffi_closure_osf_inner - ldgp $29, 0($26) - ldq $26, 0($30) - - # Load up the return value in the proper type. - lda $1, $load_table - s4addq $0, $1, $1 - ldl $1, 0($1) - addq $1, $29, $1 - jmp $31, ($1), $load_32 - - .align 4 -$load_none: - addq $30, 16*8, $30 - ret - - .align 4 -$load_float: - lds $f0, 16($30) - nop - addq $30, 16*8, $30 - ret - - .align 4 -$load_double: - ldt $f0, 16($30) - nop - addq $30, 16*8, $30 - ret - - .align 4 -$load_u8: -#ifdef __alpha_bwx__ - ldbu $0, 16($30) - nop -#else - ldq $0, 16($30) - and $0, 255, $0 -#endif - addq $30, 16*8, $30 - ret - - .align 4 -$load_s8: -#ifdef __alpha_bwx__ - ldbu $0, 16($30) - sextb $0, $0 -#else - ldq $0, 16($30) - sll $0, 56, $0 - sra $0, 56, $0 -#endif - addq $30, 16*8, $30 - ret - - .align 4 -$load_u16: -#ifdef __alpha_bwx__ - ldwu $0, 16($30) - nop -#else - ldq $0, 16($30) - zapnot $0, 3, $0 -#endif - addq $30, 16*8, $30 - ret - - .align 4 -$load_s16: -#ifdef __alpha_bwx__ - ldwu $0, 16($30) - sextw $0, $0 -#else - ldq $0, 16($30) - sll $0, 48, $0 - sra $0, 48, $0 -#endif - addq $30, 16*8, $30 - ret - - .align 4 -$load_32: - ldl $0, 16($30) - nop - addq $30, 16*8, $30 - ret - - .align 4 -$load_64: - ldq $0, 16($30) - nop - addq $30, 16*8, $30 - ret -$LFE2: - - .end ffi_closure_osf - -#ifdef __ELF__ -.section .rodata -#else -.rdata -#endif -$load_table: - .gprel32 $load_none # FFI_TYPE_VOID - .gprel32 $load_32 # FFI_TYPE_INT - .gprel32 $load_float # FFI_TYPE_FLOAT - .gprel32 $load_double # FFI_TYPE_DOUBLE - .gprel32 $load_none # FFI_TYPE_LONGDOUBLE - .gprel32 $load_u8 # FFI_TYPE_UINT8 - .gprel32 $load_s8 # FFI_TYPE_SINT8 - .gprel32 $load_u16 # FFI_TYPE_UINT16 - .gprel32 $load_s16 # FFI_TYPE_SINT16 - .gprel32 $load_32 # FFI_TYPE_UINT32 - .gprel32 $load_32 # FFI_TYPE_SINT32 - .gprel32 $load_64 # FFI_TYPE_UINT64 - .gprel32 $load_64 # FFI_TYPE_SINT64 - .gprel32 $load_none # FFI_TYPE_STRUCT - .gprel32 $load_64 # FFI_TYPE_POINTER - -/* Assert that the table above is in sync with ffi.h. */ - -#if FFI_TYPE_FLOAT != 2 \ - || FFI_TYPE_DOUBLE != 3 \ - || FFI_TYPE_UINT8 != 5 \ - || FFI_TYPE_SINT8 != 6 \ - || FFI_TYPE_UINT16 != 7 \ - || FFI_TYPE_SINT16 != 8 \ - || FFI_TYPE_UINT32 != 9 \ - || FFI_TYPE_SINT32 != 10 \ - || FFI_TYPE_UINT64 != 11 \ - || FFI_TYPE_SINT64 != 12 \ - || FFI_TYPE_STRUCT != 13 \ - || FFI_TYPE_POINTER != 14 \ - || FFI_TYPE_LAST != 14 -#error "osf.S out of sync with ffi.h" -#endif - -#ifdef __ELF__ -# define UA_SI .4byte -# define FDE_ENCODING 0x1b /* pcrel sdata4 */ -# define FDE_ENCODE(X) .4byte X-. -# define FDE_ARANGE(X) .4byte X -#elif defined __osf__ -# define UA_SI .align 0; .long -# define FDE_ENCODING 0x50 /* aligned absolute */ -# define FDE_ENCODE(X) .align 3; .quad X -# define FDE_ARANGE(X) .align 0; .quad X -#endif - -#ifdef __ELF__ - .section .eh_frame,EH_FRAME_FLAGS,@progbits -#elif defined __osf__ - .data - .align 3 - .globl _GLOBAL__F_ffi_call_osf -_GLOBAL__F_ffi_call_osf: -#endif -__FRAME_BEGIN__: - UA_SI $LECIE1-$LSCIE1 # Length of Common Information Entry -$LSCIE1: - UA_SI 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version - .ascii "zR\0" # CIE Augmentation - .byte 0x1 # uleb128 0x1; CIE Code Alignment Factor - .byte 0x78 # sleb128 -8; CIE Data Alignment Factor - .byte 26 # CIE RA Column - .byte 0x1 # uleb128 0x1; Augmentation size - .byte FDE_ENCODING # FDE Encoding - .byte 0xc # DW_CFA_def_cfa - .byte 30 # uleb128 column 30 - .byte 0 # uleb128 offset 0 - .align 3 -$LECIE1: -$LSFDE1: - UA_SI $LEFDE1-$LASFDE1 # FDE Length -$LASFDE1: - UA_SI $LASFDE1-__FRAME_BEGIN__ # FDE CIE offset - FDE_ENCODE($LFB1) # FDE initial location - FDE_ARANGE($LFE1-$LFB1) # FDE address range - .byte 0x0 # uleb128 0x0; Augmentation size - - .byte 0x4 # DW_CFA_advance_loc4 - UA_SI $LCFI1-$LFB1 - .byte 0x9a # DW_CFA_offset, column 26 - .byte 4 # uleb128 4*-8 - .byte 0x8f # DW_CFA_offset, column 15 - .byte 0x3 # uleb128 3*-8 - .byte 0xc # DW_CFA_def_cfa - .byte 15 # uleb128 column 15 - .byte 32 # uleb128 offset 32 - - .byte 0x4 # DW_CFA_advance_loc4 - UA_SI $LCFI2-$LCFI1 - .byte 0xda # DW_CFA_restore, column 26 - .align 3 -$LEFDE1: - -$LSFDE3: - UA_SI $LEFDE3-$LASFDE3 # FDE Length -$LASFDE3: - UA_SI $LASFDE3-__FRAME_BEGIN__ # FDE CIE offset - FDE_ENCODE($LFB2) # FDE initial location - FDE_ARANGE($LFE2-$LFB2) # FDE address range - .byte 0x0 # uleb128 0x0; Augmentation size - - .byte 0x4 # DW_CFA_advance_loc4 - UA_SI $LCFI5-$LFB2 - .byte 0xe # DW_CFA_def_cfa_offset - .byte 0x80,0x1 # uleb128 128 - - .byte 0x4 # DW_CFA_advance_loc4 - UA_SI $LCFI6-$LCFI5 - .byte 0x9a # DW_CFA_offset, column 26 - .byte 16 # uleb128 offset 16*-8 - .align 3 -$LEFDE3: -#if defined __osf__ - .align 0 - .long 0 # End of Table -#endif - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/arc/arcompact.S b/ruby/ext/fiddle/libffi-3.2.1/src/arc/arcompact.S deleted file mode 100644 index 03715fde4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/arc/arcompact.S +++ /dev/null @@ -1,135 +0,0 @@ -/* ----------------------------------------------------------------------- - arcompact.S - Copyright (c) 2013 Synposys, Inc. (www.synopsys.com) - - ARCompact Foreign Function Interface - - 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 RENESAS TECHNOLOGY 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#ifdef HAVE_MACHINE_ASM_H -#include -#else -#define CNAME(x) x -#define ENTRY(x) .globl CNAME(x)` .type CNAME(x),%function` CNAME(x): -#endif - -.text - - /* R0: ffi_prep_args */ - /* R1: &ecif */ - /* R2: cif->bytes */ - /* R3: fig->flags */ - /* R4: ecif.rvalue */ - /* R5: fn */ -ENTRY(ffi_call_ARCompact) - /* Save registers. */ - st.a fp, [sp, -4] /* fp + 20, fp */ - push_s blink /* fp + 16, blink */ - st.a r4, [sp, -4] /* fp + 12, ecif.rvalue */ - push_s r3 /* fp + 8, fig->flags */ - st.a r5, [sp, -4] /* fp + 4, fn */ - push_s r2 /* fp + 0, cif->bytes */ - mov fp, sp - - /* Make room for all of the new args. */ - sub sp, sp, r2 - - /* Place all of the ffi_prep_args in position. */ - /* ffi_prep_args(char *stack, extended_cif *ecif) */ - /* R1 already set. */ - - /* And call. */ - jl_s.d [r0] - mov_s r0, sp - - ld.ab r12, [fp, 4] /* cif->bytes */ - ld.ab r11, [fp, 4] /* fn */ - - /* Move first 8 parameters in registers... */ - ld_s r0, [sp] - ld_s r1, [sp, 4] - ld_s r2, [sp, 8] - ld_s r3, [sp, 12] - ld r4, [sp, 16] - ld r5, [sp, 20] - ld r6, [sp, 24] - ld r7, [sp, 28] - - /* ...and adjust the stack. */ - min r12, r12, 32 - - /* Call the function. */ - jl.d [r11] - add sp, sp, r12 - - mov sp, fp - pop_s r3 /* fig->flags, return type */ - pop_s r2 /* ecif.rvalue, pointer for return value */ - - /* If the return value pointer is NULL, assume no return value. */ - breq.d r2, 0, epilogue - pop_s blink - - /* Return INT. */ - brne r3, FFI_TYPE_INT, return_double - b.d epilogue - st_s r0, [r2] - -return_double: - brne r3, FFI_TYPE_DOUBLE, epilogue - st_s r0, [r2] - st_s r1, [r2,4] - -epilogue: - j_s.d [blink] - ld.ab fp, [sp, 4] - -ENTRY(ffi_closure_ARCompact) - st.a r0, [sp, -32] - st_s r1, [sp, 4] - st_s r2, [sp, 8] - st_s r3, [sp, 12] - st r4, [sp, 16] - st r5, [sp, 20] - st r6, [sp, 24] - st r7, [sp, 28] - - /* pointer to arguments */ - mov_s r2, sp - - /* return value goes here */ - sub sp, sp, 8 - mov_s r1, sp - - push_s blink - - bl.d ffi_closure_inner_ARCompact - mov_s r0, r8 /* codeloc, set by trampoline */ - - pop_s blink - - /* set return value to r1:r0 */ - pop_s r0 - pop_s r1 - j_s.d [blink] - add_s sp, sp, 32 diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/arc/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/arc/ffi.c deleted file mode 100644 index 32f82a7d5..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/arc/ffi.c +++ /dev/null @@ -1,268 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2013 Synopsys, Inc. (www.synopsys.com) - - ARC Foreign Function Interface - - 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 RENESAS TECHNOLOGY 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 -#include - -#include -#include - -#include - -/* for little endian ARC, the code is in fact stored as mixed endian for - performance reasons */ -#if __BIG_ENDIAN__ -#define CODE_ENDIAN(x) (x) -#else -#define CODE_ENDIAN(x) ( (((uint32_t) (x)) << 16) | (((uint32_t) (x)) >> 16)) -#endif - -/* ffi_prep_args is called by the assembly routine once stack - space has been allocated for the function's arguments. */ - -void -ffi_prep_args (char *stack, extended_cif * ecif) -{ - unsigned int i; - int tmp; - void **p_argv; - char *argp; - ffi_type **p_arg; - - tmp = 0; - argp = stack; - - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT) - { - *(void **) argp = ecif->rvalue; - argp += 4; - } - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); i--, p_arg++) - { - size_t z; - int alignment; - - /* align alignment to 4 */ - alignment = (((*p_arg)->alignment - 1) | 3) + 1; - - /* Align if necessary. */ - if ((alignment - 1) & (unsigned) argp) - argp = (char *) ALIGN (argp, alignment); - - z = (*p_arg)->size; - if (z < sizeof (int)) - { - z = sizeof (int); - - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int) *(SINT8 *) (*p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int) *(UINT8 *) (*p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int) *(SINT16 *) (*p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int) *(UINT16 *) (*p_argv); - break; - - case FFI_TYPE_STRUCT: - memcpy (argp, *p_argv, (*p_arg)->size); - break; - - default: - FFI_ASSERT (0); - } - } - else if (z == sizeof (int)) - { - *(unsigned int *) argp = (unsigned int) *(UINT32 *) (*p_argv); - } - else - { - if ((*p_arg)->type == FFI_TYPE_STRUCT) - { - memcpy (argp, *p_argv, z); - } - else - { - /* Double or long long 64bit. */ - memcpy (argp, *p_argv, z); - } - } - p_argv++; - argp += z; - } - - return; -} - -/* Perform machine dependent cif processing. */ -ffi_status -ffi_prep_cif_machdep (ffi_cif * cif) -{ - /* Set the return type flag. */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_STRUCT: - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_DOUBLE: - cif->flags = FFI_TYPE_DOUBLE; - break; - - case FFI_TYPE_FLOAT: - default: - cif->flags = FFI_TYPE_INT; - break; - } - - return FFI_OK; -} - -extern void ffi_call_ARCompact (void (*)(char *, extended_cif *), - extended_cif *, unsigned, unsigned, - unsigned *, void (*fn) (void)); - -void -ffi_call (ffi_cif * cif, void (*fn) (void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have - a return value address then we need to make one. */ - if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca (cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_ARCOMPACT: - ffi_call_ARCompact (ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; - - default: - FFI_ASSERT (0); - break; - } -} - -int -ffi_closure_inner_ARCompact (ffi_closure * closure, void *rvalue, - ffi_arg * args) -{ - void **arg_area, **p_argv; - ffi_cif *cif = closure->cif; - char *argp = (char *) args; - ffi_type **p_argt; - int i; - - arg_area = (void **) alloca (cif->nargs * sizeof (void *)); - - /* handle hidden argument */ - if (cif->flags == FFI_TYPE_STRUCT) - { - rvalue = *(void **) argp; - argp += 4; - } - - p_argv = arg_area; - - for (i = 0, p_argt = cif->arg_types; i < cif->nargs; - i++, p_argt++, p_argv++) - { - size_t z; - int alignment; - - /* align alignment to 4 */ - alignment = (((*p_argt)->alignment - 1) | 3) + 1; - - /* Align if necessary. */ - if ((alignment - 1) & (unsigned) argp) - argp = (char *) ALIGN (argp, alignment); - - z = (*p_argt)->size; - *p_argv = (void *) argp; - argp += z; - } - - (closure->fun) (cif, rvalue, arg_area, closure->user_data); - - return cif->flags; -} - -extern void ffi_closure_ARCompact (void); - -ffi_status -ffi_prep_closure_loc (ffi_closure * closure, ffi_cif * cif, - void (*fun) (ffi_cif *, void *, void **, void *), - void *user_data, void *codeloc) -{ - uint32_t *tramp = (uint32_t *) & (closure->tramp[0]); - - switch (cif->abi) - { - case FFI_ARCOMPACT: - FFI_ASSERT (tramp == codeloc); - tramp[0] = CODE_ENDIAN (0x200a1fc0); /* mov r8, pcl */ - tramp[1] = CODE_ENDIAN (0x20200f80); /* j [long imm] */ - tramp[2] = CODE_ENDIAN (ffi_closure_ARCompact); - break; - - default: - return FFI_BAD_ABI; - } - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - cacheflush (codeloc, FFI_TRAMPOLINE_SIZE, BCACHE); - - return FFI_OK; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/arc/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/arc/ffitarget.h deleted file mode 100644 index bf8311bc8..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/arc/ffitarget.h +++ /dev/null @@ -1,53 +0,0 @@ -/* ----------------------------------------------------------------------- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 2013 Synopsys, Inc. (www.synopsys.com) - Target configuration macros for ARC. - - 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 RENESAS TECHNOLOGY 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -/* ---- Generic type definitions ----------------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi -{ - FFI_FIRST_ABI = 0, - FFI_ARCOMPACT, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_ARCOMPACT -} ffi_abi; -#endif - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 12 -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/arm/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/arm/ffi.c deleted file mode 100644 index 6691ab57d..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/arm/ffi.c +++ /dev/null @@ -1,931 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2011 Timothy Wall - Copyright (c) 2011 Plausible Labs Cooperative, Inc. - Copyright (c) 2011 Anthony Green - Copyright (c) 2011 Free Software Foundation - Copyright (c) 1998, 2008, 2011 Red Hat, Inc. - - ARM Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -/* Forward declares. */ -static int vfp_type_p (ffi_type *); -static void layout_vfp_args (ffi_cif *); - -int ffi_prep_args_SYSV(char *stack, extended_cif *ecif, float *vfp_space); -int ffi_prep_args_VFP(char *stack, extended_cif *ecif, float *vfp_space); - -static char* ffi_align(ffi_type **p_arg, char *argp) -{ - /* Align if necessary */ - register size_t alignment = (*p_arg)->alignment; - if (alignment < 4) - { - alignment = 4; - } -#ifdef _WIN32_WCE - if (alignment > 4) - { - alignment = 4; - } -#endif - if ((alignment - 1) & (unsigned) argp) - { - argp = (char *) ALIGN(argp, alignment); - } - - if ((*p_arg)->type == FFI_TYPE_STRUCT) - { - argp = (char *) ALIGN(argp, 4); - } - return argp; -} - -static size_t ffi_put_arg(ffi_type **arg_type, void **arg, char *stack) -{ - register char* argp = stack; - register ffi_type **p_arg = arg_type; - register void **p_argv = arg; - register size_t z = (*p_arg)->size; - if (z < sizeof(int)) - { - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - memcpy(argp, *p_argv, (*p_arg)->size); - break; - - default: - FFI_ASSERT(0); - } - } - else if (z == sizeof(int)) - { - if ((*p_arg)->type == FFI_TYPE_FLOAT) - *(float *) argp = *(float *)(* p_argv); - else - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - } - else if (z == sizeof(double) && (*p_arg)->type == FFI_TYPE_DOUBLE) - { - *(double *) argp = *(double *)(* p_argv); - } - else - { - memcpy(argp, *p_argv, z); - } - return z; -} -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments - - The vfp_space parameter is the load area for VFP regs, the return - value is cif->vfp_used (word bitset of VFP regs used for passing - arguments). These are only used for the VFP hard-float ABI. -*/ -int ffi_prep_args_SYSV(char *stack, extended_cif *ecif, float *vfp_space) -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - argp = stack; - - - if ( ecif->cif->flags == FFI_TYPE_STRUCT ) { - *(void **) argp = ecif->rvalue; - argp += 4; - } - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); - i--, p_arg++, p_argv++) - { - argp = ffi_align(p_arg, argp); - argp += ffi_put_arg(p_arg, p_argv, argp); - } - - return 0; -} - -int ffi_prep_args_VFP(char *stack, extended_cif *ecif, float *vfp_space) -{ - register unsigned int i, vi = 0; - register void **p_argv; - register char *argp, *regp, *eo_regp; - register ffi_type **p_arg; - char stack_used = 0; - char done_with_regs = 0; - char is_vfp_type; - - // make sure we are using FFI_VFP - FFI_ASSERT(ecif->cif->abi == FFI_VFP); - - /* the first 4 words on the stack are used for values passed in core - * registers. */ - regp = stack; - eo_regp = argp = regp + 16; - - - /* if the function returns an FFI_TYPE_STRUCT in memory, that address is - * passed in r0 to the function */ - if ( ecif->cif->flags == FFI_TYPE_STRUCT ) { - *(void **) regp = ecif->rvalue; - regp += 4; - } - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); - i--, p_arg++, p_argv++) - { - is_vfp_type = vfp_type_p (*p_arg); - - /* Allocated in VFP registers. */ - if(vi < ecif->cif->vfp_nargs && is_vfp_type) - { - char *vfp_slot = (char *)(vfp_space + ecif->cif->vfp_args[vi++]); - ffi_put_arg(p_arg, p_argv, vfp_slot); - continue; - } - /* Try allocating in core registers. */ - else if (!done_with_regs && !is_vfp_type) - { - char *tregp = ffi_align(p_arg, regp); - size_t size = (*p_arg)->size; - size = (size < 4)? 4 : size; // pad - /* Check if there is space left in the aligned register area to place - * the argument */ - if(tregp + size <= eo_regp) - { - regp = tregp + ffi_put_arg(p_arg, p_argv, tregp); - done_with_regs = (regp == argp); - // ensure we did not write into the stack area - FFI_ASSERT(regp <= argp); - continue; - } - /* In case there are no arguments in the stack area yet, - the argument is passed in the remaining core registers and on the - stack. */ - else if (!stack_used) - { - stack_used = 1; - done_with_regs = 1; - argp = tregp + ffi_put_arg(p_arg, p_argv, tregp); - FFI_ASSERT(eo_regp < argp); - continue; - } - } - /* Base case, arguments are passed on the stack */ - stack_used = 1; - argp = ffi_align(p_arg, argp); - argp += ffi_put_arg(p_arg, p_argv, argp); - } - /* Indicate the VFP registers used. */ - return ecif->cif->vfp_used; -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - int type_code; - /* Round the stack up to a multiple of 8 bytes. This isn't needed - everywhere, but it is on some platforms, and it doesn't harm anything - when it isn't needed. */ - cif->bytes = (cif->bytes + 7) & ~7; - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags = (unsigned) FFI_TYPE_SINT64; - break; - - case FFI_TYPE_STRUCT: - if (cif->abi == FFI_VFP - && (type_code = vfp_type_p (cif->rtype)) != 0) - { - /* A Composite Type passed in VFP registers, either - FFI_TYPE_STRUCT_VFP_FLOAT or FFI_TYPE_STRUCT_VFP_DOUBLE. */ - cif->flags = (unsigned) type_code; - } - else if (cif->rtype->size <= 4) - /* A Composite Type not larger than 4 bytes is returned in r0. */ - cif->flags = (unsigned)FFI_TYPE_INT; - else - /* A Composite Type larger than 4 bytes, or whose size cannot - be determined statically ... is stored in memory at an - address passed [in r0]. */ - cif->flags = (unsigned)FFI_TYPE_STRUCT; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - - /* Map out the register placements of VFP register args. - The VFP hard-float calling conventions are slightly more sophisticated than - the base calling conventions, so we do it here instead of in ffi_prep_args(). */ - if (cif->abi == FFI_VFP) - layout_vfp_args (cif); - - return FFI_OK; -} - -/* Perform machine dependent cif processing for variadic calls */ -ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, - unsigned int nfixedargs, - unsigned int ntotalargs) -{ - /* VFP variadic calls actually use the SYSV ABI */ - if (cif->abi == FFI_VFP) - cif->abi = FFI_SYSV; - - return ffi_prep_cif_machdep(cif); -} - -/* Prototypes for assembly functions, in sysv.S */ -extern void ffi_call_SYSV (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *); -extern void ffi_call_VFP (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *); - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - int small_struct = (cif->flags == FFI_TYPE_INT - && cif->rtype->type == FFI_TYPE_STRUCT); - int vfp_struct = (cif->flags == FFI_TYPE_STRUCT_VFP_FLOAT - || cif->flags == FFI_TYPE_STRUCT_VFP_DOUBLE); - - unsigned int temp; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if ((rvalue == NULL) && - (cif->flags == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else if (small_struct) - ecif.rvalue = &temp; - else if (vfp_struct) - { - /* Largest case is double x 4. */ - ecif.rvalue = alloca(32); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV (fn, &ecif, cif->bytes, cif->flags, ecif.rvalue); - break; - - case FFI_VFP: -#ifdef __ARM_EABI__ - ffi_call_VFP (fn, &ecif, cif->bytes, cif->flags, ecif.rvalue); - break; -#endif - - default: - FFI_ASSERT(0); - break; - } - if (small_struct) - { - FFI_ASSERT(rvalue != NULL); - memcpy (rvalue, &temp, cif->rtype->size); - } - - else if (vfp_struct) - { - FFI_ASSERT(rvalue != NULL); - memcpy (rvalue, ecif.rvalue, cif->rtype->size); - } - -} - -/** private members **/ - -static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, - void** args, ffi_cif* cif, float *vfp_stack); - -static void ffi_prep_incoming_args_VFP (char *stack, void **ret, - void** args, ffi_cif* cif, float *vfp_stack); - -void ffi_closure_SYSV (ffi_closure *); - -void ffi_closure_VFP (ffi_closure *); - -/* This function is jumped to by the trampoline */ - -unsigned int FFI_HIDDEN -ffi_closure_inner (ffi_closure *closure, - void **respp, void *args, void *vfp_args) -{ - // our various things... - ffi_cif *cif; - void **arg_area; - - cif = closure->cif; - arg_area = (void**) alloca (cif->nargs * sizeof (void*)); - - /* this call will initialize ARG_AREA, such that each - * element in that array points to the corresponding - * value on the stack; and if the function returns - * a structure, it will re-set RESP to point to the - * structure return address. */ - if (cif->abi == FFI_VFP) - ffi_prep_incoming_args_VFP(args, respp, arg_area, cif, vfp_args); - else - ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif, vfp_args); - - (closure->fun) (cif, *respp, arg_area, closure->user_data); - - return cif->flags; -} - -/*@-exportheader@*/ -static void -ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, - void **avalue, ffi_cif *cif, - /* Used only under VFP hard-float ABI. */ - float *vfp_stack) -/*@=exportheader@*/ -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - - argp = stack; - - if ( cif->flags == FFI_TYPE_STRUCT ) { - *rvalue = *(void **) argp; - argp += 4; - } - - p_argv = avalue; - - for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) - { - size_t z; - - argp = ffi_align(p_arg, argp); - - z = (*p_arg)->size; - - /* because we're little endian, this is what it turns into. */ - - *p_argv = (void*) argp; - - p_argv++; - argp += z; - } - - return; -} - -/*@-exportheader@*/ -static void -ffi_prep_incoming_args_VFP(char *stack, void **rvalue, - void **avalue, ffi_cif *cif, - /* Used only under VFP hard-float ABI. */ - float *vfp_stack) -/*@=exportheader@*/ -{ - register unsigned int i, vi = 0; - register void **p_argv; - register char *argp, *regp, *eo_regp; - register ffi_type **p_arg; - char done_with_regs = 0; - char stack_used = 0; - char is_vfp_type; - - FFI_ASSERT(cif->abi == FFI_VFP); - regp = stack; - eo_regp = argp = regp + 16; - - if ( cif->flags == FFI_TYPE_STRUCT ) { - *rvalue = *(void **) regp; - regp += 4; - } - - p_argv = avalue; - - for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) - { - size_t z; - is_vfp_type = vfp_type_p (*p_arg); - - if(vi < cif->vfp_nargs && is_vfp_type) - { - *p_argv++ = (void*)(vfp_stack + cif->vfp_args[vi++]); - continue; - } - else if (!done_with_regs && !is_vfp_type) - { - char* tregp = ffi_align(p_arg, regp); - - z = (*p_arg)->size; - z = (z < 4)? 4 : z; // pad - - /* if the arguments either fits into the registers or uses registers - * and stack, while we haven't read other things from the stack */ - if(tregp + z <= eo_regp || !stack_used) - { - /* because we're little endian, this is what it turns into. */ - *p_argv = (void*) tregp; - - p_argv++; - regp = tregp + z; - // if we read past the last core register, make sure we have not read - // from the stack before and continue reading after regp - if(regp > eo_regp) - { - if(stack_used) - { - abort(); // we should never read past the end of the register - // are if the stack is already in use - } - argp = regp; - } - if(regp >= eo_regp) - { - done_with_regs = 1; - stack_used = 1; - } - continue; - } - } - stack_used = 1; - - argp = ffi_align(p_arg, argp); - - z = (*p_arg)->size; - - /* because we're little endian, this is what it turns into. */ - - *p_argv = (void*) argp; - - p_argv++; - argp += z; - } - - return; -} - -/* How to make a trampoline. */ - -extern unsigned int ffi_arm_trampoline[3]; - -#if FFI_EXEC_TRAMPOLINE_TABLE - -#include -#include -#include -#include - -extern void *ffi_closure_trampoline_table_page; - -typedef struct ffi_trampoline_table ffi_trampoline_table; -typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; - -struct ffi_trampoline_table { - /* contiguous writable and executable pages */ - vm_address_t config_page; - vm_address_t trampoline_page; - - /* free list tracking */ - uint16_t free_count; - ffi_trampoline_table_entry *free_list; - ffi_trampoline_table_entry *free_list_pool; - - ffi_trampoline_table *prev; - ffi_trampoline_table *next; -}; - -struct ffi_trampoline_table_entry { - void *(*trampoline)(); - ffi_trampoline_table_entry *next; -}; - -/* Override the standard architecture trampoline size */ -// XXX TODO - Fix -#undef FFI_TRAMPOLINE_SIZE -#define FFI_TRAMPOLINE_SIZE 12 - -/* The trampoline configuration is placed at 4080 bytes prior to the trampoline's entry point */ -#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - 4080)); - -/* The first 16 bytes of the config page are unused, as they are unaddressable from the trampoline page. */ -#define FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET 16 - -/* Total number of trampolines that fit in one trampoline table */ -#define FFI_TRAMPOLINE_COUNT ((PAGE_SIZE - FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET) / FFI_TRAMPOLINE_SIZE) - -static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; -static ffi_trampoline_table *ffi_trampoline_tables = NULL; - -static ffi_trampoline_table * -ffi_trampoline_table_alloc () -{ - ffi_trampoline_table *table = NULL; - - /* Loop until we can allocate two contiguous pages */ - while (table == NULL) { - vm_address_t config_page = 0x0; - kern_return_t kt; - - /* Try to allocate two pages */ - kt = vm_allocate (mach_task_self (), &config_page, PAGE_SIZE*2, VM_FLAGS_ANYWHERE); - if (kt != KERN_SUCCESS) { - fprintf(stderr, "vm_allocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); - break; - } - - /* Now drop the second half of the allocation to make room for the trampoline table */ - vm_address_t trampoline_page = config_page+PAGE_SIZE; - kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE); - if (kt != KERN_SUCCESS) { - fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); - break; - } - - /* Remap the trampoline table to directly follow the config page */ - vm_prot_t cur_prot; - vm_prot_t max_prot; - - kt = vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, mach_task_self (), (vm_address_t) &ffi_closure_trampoline_table_page, FALSE, &cur_prot, &max_prot, VM_INHERIT_SHARE); - - /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ - if (kt != KERN_SUCCESS) { - /* Log unexpected failures */ - if (kt != KERN_NO_SPACE) { - fprintf(stderr, "vm_remap() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); - } - - vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); - continue; - } - - /* We have valid trampoline and config pages */ - table = calloc (1, sizeof(ffi_trampoline_table)); - table->free_count = FFI_TRAMPOLINE_COUNT; - table->config_page = config_page; - table->trampoline_page = trampoline_page; - - /* Create and initialize the free list */ - table->free_list_pool = calloc(FFI_TRAMPOLINE_COUNT, sizeof(ffi_trampoline_table_entry)); - - uint16_t i; - for (i = 0; i < table->free_count; i++) { - ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; - entry->trampoline = (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); - - if (i < table->free_count - 1) - entry->next = &table->free_list_pool[i+1]; - } - - table->free_list = table->free_list_pool; - } - - return table; -} - -void * -ffi_closure_alloc (size_t size, void **code) -{ - /* Create the closure */ - ffi_closure *closure = malloc(size); - if (closure == NULL) - return NULL; - - pthread_mutex_lock(&ffi_trampoline_lock); - - /* Check for an active trampoline table with available entries. */ - ffi_trampoline_table *table = ffi_trampoline_tables; - if (table == NULL || table->free_list == NULL) { - table = ffi_trampoline_table_alloc (); - if (table == NULL) { - free(closure); - return NULL; - } - - /* Insert the new table at the top of the list */ - table->next = ffi_trampoline_tables; - if (table->next != NULL) - table->next->prev = table; - - ffi_trampoline_tables = table; - } - - /* Claim the free entry */ - ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; - ffi_trampoline_tables->free_list = entry->next; - ffi_trampoline_tables->free_count--; - entry->next = NULL; - - pthread_mutex_unlock(&ffi_trampoline_lock); - - /* Initialize the return values */ - *code = entry->trampoline; - closure->trampoline_table = table; - closure->trampoline_table_entry = entry; - - return closure; -} - -void -ffi_closure_free (void *ptr) -{ - ffi_closure *closure = ptr; - - pthread_mutex_lock(&ffi_trampoline_lock); - - /* Fetch the table and entry references */ - ffi_trampoline_table *table = closure->trampoline_table; - ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; - - /* Return the entry to the free list */ - entry->next = table->free_list; - table->free_list = entry; - table->free_count++; - - /* If all trampolines within this table are free, and at least one other table exists, deallocate - * the table */ - if (table->free_count == FFI_TRAMPOLINE_COUNT && ffi_trampoline_tables != table) { - /* Remove from the list */ - if (table->prev != NULL) - table->prev->next = table->next; - - if (table->next != NULL) - table->next->prev = table->prev; - - /* Deallocate pages */ - kern_return_t kt; - kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); - if (kt != KERN_SUCCESS) - fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); - - kt = vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); - if (kt != KERN_SUCCESS) - fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); - - /* Deallocate free list */ - free (table->free_list_pool); - free (table); - } else if (ffi_trampoline_tables != table) { - /* Otherwise, bump this table to the top of the list */ - table->prev = NULL; - table->next = ffi_trampoline_tables; - if (ffi_trampoline_tables != NULL) - ffi_trampoline_tables->prev = table; - - ffi_trampoline_tables = table; - } - - pthread_mutex_unlock (&ffi_trampoline_lock); - - /* Free the closure */ - free (closure); -} - -#else - -#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ -({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ - unsigned int __fun = (unsigned int)(FUN); \ - unsigned int __ctx = (unsigned int)(CTX); \ - unsigned char *insns = (unsigned char *)(CTX); \ - memcpy (__tramp, ffi_arm_trampoline, sizeof ffi_arm_trampoline); \ - *(unsigned int*) &__tramp[12] = __ctx; \ - *(unsigned int*) &__tramp[16] = __fun; \ - __clear_cache((&__tramp[0]), (&__tramp[19])); /* Clear data mapping. */ \ - __clear_cache(insns, insns + 3 * sizeof (unsigned int)); \ - /* Clear instruction \ - mapping. */ \ - }) - -#endif - -/* the cif must already be prep'ed */ - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - void (*closure_func)(ffi_closure*) = NULL; - - if (cif->abi == FFI_SYSV) - closure_func = &ffi_closure_SYSV; -#ifdef __ARM_EABI__ - else if (cif->abi == FFI_VFP) - closure_func = &ffi_closure_VFP; -#endif - else - return FFI_BAD_ABI; - -#if FFI_EXEC_TRAMPOLINE_TABLE - void **config = FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc); - config[0] = closure; - config[1] = closure_func; -#else - FFI_INIT_TRAMPOLINE (&closure->tramp[0], \ - closure_func, \ - codeloc); -#endif - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - -/* Below are routines for VFP hard-float support. */ - -static int rec_vfp_type_p (ffi_type *t, int *elt, int *elnum) -{ - switch (t->type) - { - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - *elt = (int) t->type; - *elnum = 1; - return 1; - - case FFI_TYPE_STRUCT_VFP_FLOAT: - *elt = FFI_TYPE_FLOAT; - *elnum = t->size / sizeof (float); - return 1; - - case FFI_TYPE_STRUCT_VFP_DOUBLE: - *elt = FFI_TYPE_DOUBLE; - *elnum = t->size / sizeof (double); - return 1; - - case FFI_TYPE_STRUCT:; - { - int base_elt = 0, total_elnum = 0; - ffi_type **el = t->elements; - while (*el) - { - int el_elt = 0, el_elnum = 0; - if (! rec_vfp_type_p (*el, &el_elt, &el_elnum) - || (base_elt && base_elt != el_elt) - || total_elnum + el_elnum > 4) - return 0; - base_elt = el_elt; - total_elnum += el_elnum; - el++; - } - *elnum = total_elnum; - *elt = base_elt; - return 1; - } - default: ; - } - return 0; -} - -static int vfp_type_p (ffi_type *t) -{ - int elt, elnum; - if (rec_vfp_type_p (t, &elt, &elnum)) - { - if (t->type == FFI_TYPE_STRUCT) - { - if (elnum == 1) - t->type = elt; - else - t->type = (elt == FFI_TYPE_FLOAT - ? FFI_TYPE_STRUCT_VFP_FLOAT - : FFI_TYPE_STRUCT_VFP_DOUBLE); - } - return (int) t->type; - } - return 0; -} - -static int place_vfp_arg (ffi_cif *cif, ffi_type *t) -{ - short reg = cif->vfp_reg_free; - int nregs = t->size / sizeof (float); - int align = ((t->type == FFI_TYPE_STRUCT_VFP_FLOAT - || t->type == FFI_TYPE_FLOAT) ? 1 : 2); - /* Align register number. */ - if ((reg & 1) && align == 2) - reg++; - while (reg + nregs <= 16) - { - int s, new_used = 0; - for (s = reg; s < reg + nregs; s++) - { - new_used |= (1 << s); - if (cif->vfp_used & (1 << s)) - { - reg += align; - goto next_reg; - } - } - /* Found regs to allocate. */ - cif->vfp_used |= new_used; - cif->vfp_args[cif->vfp_nargs++] = reg; - - /* Update vfp_reg_free. */ - if (cif->vfp_used & (1 << cif->vfp_reg_free)) - { - reg += nregs; - while (cif->vfp_used & (1 << reg)) - reg += 1; - cif->vfp_reg_free = reg; - } - return 0; - next_reg: ; - } - // done, mark all regs as used - cif->vfp_reg_free = 16; - cif->vfp_used = 0xFFFF; - return 1; -} - -static void layout_vfp_args (ffi_cif *cif) -{ - int i; - /* Init VFP fields */ - cif->vfp_used = 0; - cif->vfp_nargs = 0; - cif->vfp_reg_free = 0; - memset (cif->vfp_args, -1, 16); /* Init to -1. */ - - for (i = 0; i < cif->nargs; i++) - { - ffi_type *t = cif->arg_types[i]; - if (vfp_type_p (t) && place_vfp_arg (cif, t) == 1) - { - break; - } - } -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/arm/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/arm/ffitarget.h deleted file mode 100644 index 26d494d61..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/arm/ffitarget.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 2010 CodeSourcery - Copyright (c) 1996-2003 Red Hat, Inc. - - Target configuration macros for ARM. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_VFP, - FFI_LAST_ABI, -#ifdef __ARM_PCS_VFP - FFI_DEFAULT_ABI = FFI_VFP, -#else - FFI_DEFAULT_ABI = FFI_SYSV, -#endif -} ffi_abi; -#endif - -#define FFI_EXTRA_CIF_FIELDS \ - int vfp_used; \ - short vfp_reg_free, vfp_nargs; \ - signed char vfp_args[16] \ - -/* Internally used. */ -#define FFI_TYPE_STRUCT_VFP_FLOAT (FFI_TYPE_LAST + 1) -#define FFI_TYPE_STRUCT_VFP_DOUBLE (FFI_TYPE_LAST + 2) - -#define FFI_TARGET_SPECIFIC_VARIADIC - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 20 -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/arm/gentramp.sh b/ruby/ext/fiddle/libffi-3.2.1/src/arm/gentramp.sh deleted file mode 100755 index 05c43a30f..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/arm/gentramp.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh - -# ----------------------------------------------------------------------- -# gentramp.sh - Copyright (c) 2010, Plausible Labs Cooperative, Inc. -# -# ARM Trampoline Page Generator -# -# 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. -# ----------------------------------------------------------------------- - -PROGNAME=$0 - -# Each trampoline is exactly 3 instructions, or 12 bytes. If any of these values change, -# the entire arm trampoline implementation must be updated to match, too. - -# Size of an individual trampoline, in bytes -TRAMPOLINE_SIZE=12 - -# Page size, in bytes -PAGE_SIZE=4096 - -# Compute the size of the reachable config page; The first 16 bytes of the config page -# are unreachable due to our maximum pc-relative ldr offset. -PAGE_AVAIL=`expr $PAGE_SIZE - 16` - -# Compute the number of of available trampolines. -TRAMPOLINE_COUNT=`expr $PAGE_AVAIL / $TRAMPOLINE_SIZE` - -header () { - echo "# GENERATED CODE - DO NOT EDIT" - echo "# This file was generated by $PROGNAME" - echo "" - - # Write out the license header -cat << EOF -# Copyright (c) 2010, Plausible Labs Cooperative, 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: -# -# 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. -# ----------------------------------------------------------------------- - -EOF - - # Write out the trampoline table, aligned to the page boundary - echo ".text" - echo ".align 12" - echo ".globl _ffi_closure_trampoline_table_page" - echo "_ffi_closure_trampoline_table_page:" -} - - -# WARNING - Don't modify the trampoline code size without also updating the relevant libffi code -trampoline () { - cat << END - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - -END -} - -main () { - # Write out the header - header - - # Write out the trampolines - local i=0 - while [ $i -lt ${TRAMPOLINE_COUNT} ]; do - trampoline - local i=`expr $i + 1` - done -} - -main diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/arm/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/arm/sysv.S deleted file mode 100644 index 541bbe923..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/arm/sysv.S +++ /dev/null @@ -1,491 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 1998, 2008, 2011 Red Hat, Inc. - Copyright (c) 2011 Plausible Labs Cooperative, Inc. - - ARM Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#ifdef HAVE_MACHINE_ASM_H -#include -#else -#ifdef __USER_LABEL_PREFIX__ -#define CONCAT1(a, b) CONCAT2(a, b) -#define CONCAT2(a, b) a ## b - -/* Use the right prefix for global labels. */ -#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) -#else -#define CNAME(x) x -#endif -#ifdef __APPLE__ -#define ENTRY(x) .globl _##x; _##x: -#else -#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): -#endif /* __APPLE__ */ -#endif - -#ifdef __ELF__ -#define LSYM(x) .x -#else -#define LSYM(x) x -#endif - -/* Use the SOFTFP return value ABI on Mac OS X, as per the iOS ABI - Function Call Guide */ -#ifdef __APPLE__ -#define __SOFTFP__ -#endif - -/* We need a better way of testing for this, but for now, this is all - we can do. */ -@ This selects the minimum architecture level required. -#define __ARM_ARCH__ 3 - -#if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) -# undef __ARM_ARCH__ -# define __ARM_ARCH__ 4 -#endif - -#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ - || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \ - || defined(__ARM_ARCH_5TEJ__) -# undef __ARM_ARCH__ -# define __ARM_ARCH__ 5 -#endif - -#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ - || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ - || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ - || defined(__ARM_ARCH_6M__) -# undef __ARM_ARCH__ -# define __ARM_ARCH__ 6 -#endif - -#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ - || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ - || defined(__ARM_ARCH_7EM__) -# undef __ARM_ARCH__ -# define __ARM_ARCH__ 7 -#endif - -#if __ARM_ARCH__ >= 5 -# define call_reg(x) blx x -#elif defined (__ARM_ARCH_4T__) -# define call_reg(x) mov lr, pc ; bx x -# if defined(__thumb__) || defined(__THUMB_INTERWORK__) -# define __INTERWORKING__ -# endif -#else -# define call_reg(x) mov lr, pc ; mov pc, x -#endif - -/* Conditionally compile unwinder directives. */ -#ifdef __ARM_EABI__ -#define UNWIND -#else -#define UNWIND @ -#endif - -.syntax unified - -#if defined(__thumb__) && !defined(__THUMB_INTERWORK__) -#define ARM_FUNC_START(name) \ - .text; \ - .align 2; \ - .thumb; \ - .thumb_func; \ - ENTRY(name); \ - bx pc; \ - nop; \ - .arm; \ - UNWIND .fnstart; \ -_L__##name: -#else -#define ARM_FUNC_START(name) \ - .text; \ - .align 2; \ - .arm; \ - ENTRY(name); \ - UNWIND .fnstart -#endif - -.macro RETLDM regs=, cond=, dirn=ia -#if defined (__INTERWORKING__) - .ifc "\regs","" - ldr\cond lr, [sp], #4 - .else - ldm\cond\dirn sp!, {\regs, lr} - .endif - bx\cond lr -#else - .ifc "\regs","" - ldr\cond pc, [sp], #4 - .else - ldm\cond\dirn sp!, {\regs, pc} - .endif -#endif -.endm - - @ r0: ffi_prep_args - @ r1: &ecif - @ r2: cif->bytes - @ r3: fig->flags - @ sp+0: ecif.rvalue - - @ This assumes we are using gas. -ARM_FUNC_START(ffi_call_SYSV) - @ Save registers - stmfd sp!, {r0-r3, fp, lr} - UNWIND .save {r0-r3, fp, lr} - mov fp, sp - - UNWIND .setfp fp, sp - - @ Make room for all of the new args. - sub sp, fp, r2 - - @ Place all of the ffi_prep_args in position - mov r0, sp - @ r1 already set - - @ Call ffi_prep_args(stack, &ecif) - bl CNAME(ffi_prep_args_SYSV) - - @ move first 4 parameters in registers - ldmia sp, {r0-r3} - - @ and adjust stack - sub lr, fp, sp @ cif->bytes == fp - sp - ldr ip, [fp] @ load fn() in advance - cmp lr, #16 - movhs lr, #16 - add sp, sp, lr - - @ call (fn) (...) - call_reg(ip) - - @ Remove the space we pushed for the args - mov sp, fp - - @ Load r2 with the pointer to storage for the return value - ldr r2, [sp, #24] - - @ Load r3 with the return type code - ldr r3, [sp, #12] - - @ If the return value pointer is NULL, assume no return value. - cmp r2, #0 - beq LSYM(Lepilogue) - -@ return INT - cmp r3, #FFI_TYPE_INT -#if defined(__SOFTFP__) || defined(__ARM_EABI__) - cmpne r3, #FFI_TYPE_FLOAT -#endif - streq r0, [r2] - beq LSYM(Lepilogue) - - @ return INT64 - cmp r3, #FFI_TYPE_SINT64 -#if defined(__SOFTFP__) || defined(__ARM_EABI__) - cmpne r3, #FFI_TYPE_DOUBLE -#endif - stmiaeq r2, {r0, r1} - -#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) - beq LSYM(Lepilogue) - -@ return FLOAT - cmp r3, #FFI_TYPE_FLOAT - stfeqs f0, [r2] - beq LSYM(Lepilogue) - -@ return DOUBLE or LONGDOUBLE - cmp r3, #FFI_TYPE_DOUBLE - stfeqd f0, [r2] -#endif - -LSYM(Lepilogue): -#if defined (__INTERWORKING__) - ldmia sp!, {r0-r3,fp, lr} - bx lr -#else - ldmia sp!, {r0-r3,fp, pc} -#endif - -.ffi_call_SYSV_end: - UNWIND .fnend -#ifdef __ELF__ - .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) -#endif - - -/* - unsigned int FFI_HIDDEN - ffi_closure_inner (closure, respp, args) - ffi_closure *closure; - void **respp; - void *args; -*/ - -ARM_FUNC_START(ffi_closure_SYSV) - UNWIND .pad #16 - add ip, sp, #16 - stmfd sp!, {ip, lr} - UNWIND .save {r0, lr} - add r2, sp, #8 - UNWIND .pad #16 - sub sp, sp, #16 - str sp, [sp, #8] - add r1, sp, #8 - bl CNAME(ffi_closure_inner) - cmp r0, #FFI_TYPE_INT - beq .Lretint - - cmp r0, #FFI_TYPE_FLOAT -#if defined(__SOFTFP__) || defined(__ARM_EABI__) - beq .Lretint -#else - beq .Lretfloat -#endif - - cmp r0, #FFI_TYPE_DOUBLE -#if defined(__SOFTFP__) || defined(__ARM_EABI__) - beq .Lretlonglong -#else - beq .Lretdouble -#endif - - cmp r0, #FFI_TYPE_LONGDOUBLE -#if defined(__SOFTFP__) || defined(__ARM_EABI__) - beq .Lretlonglong -#else - beq .Lretlongdouble -#endif - - cmp r0, #FFI_TYPE_SINT64 - beq .Lretlonglong -.Lclosure_epilogue: - add sp, sp, #16 - ldmfd sp, {sp, pc} -.Lretint: - ldr r0, [sp] - b .Lclosure_epilogue -.Lretlonglong: - ldr r0, [sp] - ldr r1, [sp, #4] - b .Lclosure_epilogue - -#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) -.Lretfloat: - ldfs f0, [sp] - b .Lclosure_epilogue -.Lretdouble: - ldfd f0, [sp] - b .Lclosure_epilogue -.Lretlongdouble: - ldfd f0, [sp] - b .Lclosure_epilogue -#endif - -.ffi_closure_SYSV_end: - UNWIND .fnend -#ifdef __ELF__ - .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) -#endif - - -/* Below are VFP hard-float ABI call and closure implementations. - Add VFP FPU directive here. This is only compiled into the library - under EABI. */ -#ifdef __ARM_EABI__ - .fpu vfp - - @ r0: fn - @ r1: &ecif - @ r2: cif->bytes - @ r3: fig->flags - @ sp+0: ecif.rvalue - -ARM_FUNC_START(ffi_call_VFP) - @ Save registers - stmfd sp!, {r0-r3, fp, lr} - UNWIND .save {r0-r3, fp, lr} - mov fp, sp - UNWIND .setfp fp, sp - - @ Make room for all of the new args. - sub sp, sp, r2 - - @ Make room for loading VFP args - sub sp, sp, #64 - - @ Place all of the ffi_prep_args in position - mov r0, sp - @ r1 already set - sub r2, fp, #64 @ VFP scratch space - - @ Call ffi_prep_args(stack, &ecif, vfp_space) - bl CNAME(ffi_prep_args_VFP) - - @ Load VFP register args if needed - cmp r0, #0 - mov ip, fp - beq LSYM(Lbase_args) - - @ Load only d0 if possible - cmp r0, #3 - sub ip, fp, #64 - flddle d0, [ip] - fldmiadgt ip, {d0-d7} - -LSYM(Lbase_args): - @ move first 4 parameters in registers - ldmia sp, {r0-r3} - - @ and adjust stack - sub lr, ip, sp @ cif->bytes == (fp - 64) - sp - ldr ip, [fp] @ load fn() in advance - cmp lr, #16 - movhs lr, #16 - add sp, sp, lr - - @ call (fn) (...) - call_reg(ip) - - @ Remove the space we pushed for the args - mov sp, fp - - @ Load r2 with the pointer to storage for - @ the return value - ldr r2, [sp, #24] - - @ Load r3 with the return type code - ldr r3, [sp, #12] - - @ If the return value pointer is NULL, - @ assume no return value. - cmp r2, #0 - beq LSYM(Lepilogue_vfp) - - cmp r3, #FFI_TYPE_INT - streq r0, [r2] - beq LSYM(Lepilogue_vfp) - - cmp r3, #FFI_TYPE_SINT64 - stmeqia r2, {r0, r1} - beq LSYM(Lepilogue_vfp) - - cmp r3, #FFI_TYPE_FLOAT - fstseq s0, [r2] - beq LSYM(Lepilogue_vfp) - - cmp r3, #FFI_TYPE_DOUBLE - fstdeq d0, [r2] - beq LSYM(Lepilogue_vfp) - - cmp r3, #FFI_TYPE_STRUCT_VFP_FLOAT - cmpne r3, #FFI_TYPE_STRUCT_VFP_DOUBLE - fstmiadeq r2, {d0-d3} - -LSYM(Lepilogue_vfp): - RETLDM "r0-r3,fp" - -.ffi_call_VFP_end: - UNWIND .fnend - .size CNAME(ffi_call_VFP),.ffi_call_VFP_end-CNAME(ffi_call_VFP) - - -ARM_FUNC_START(ffi_closure_VFP) - fstmfdd sp!, {d0-d7} - @ r0-r3, then d0-d7 - UNWIND .pad #80 - add ip, sp, #80 - stmfd sp!, {ip, lr} - UNWIND .save {r0, lr} - add r2, sp, #72 - add r3, sp, #8 - UNWIND .pad #72 - sub sp, sp, #72 - str sp, [sp, #64] - add r1, sp, #64 - bl CNAME(ffi_closure_inner) - - cmp r0, #FFI_TYPE_INT - beq .Lretint_vfp - - cmp r0, #FFI_TYPE_FLOAT - beq .Lretfloat_vfp - - cmp r0, #FFI_TYPE_DOUBLE - cmpne r0, #FFI_TYPE_LONGDOUBLE - beq .Lretdouble_vfp - - cmp r0, #FFI_TYPE_SINT64 - beq .Lretlonglong_vfp - - cmp r0, #FFI_TYPE_STRUCT_VFP_FLOAT - beq .Lretfloat_struct_vfp - - cmp r0, #FFI_TYPE_STRUCT_VFP_DOUBLE - beq .Lretdouble_struct_vfp - -.Lclosure_epilogue_vfp: - add sp, sp, #72 - ldmfd sp, {sp, pc} - -.Lretfloat_vfp: - flds s0, [sp] - b .Lclosure_epilogue_vfp -.Lretdouble_vfp: - fldd d0, [sp] - b .Lclosure_epilogue_vfp -.Lretint_vfp: - ldr r0, [sp] - b .Lclosure_epilogue_vfp -.Lretlonglong_vfp: - ldmia sp, {r0, r1} - b .Lclosure_epilogue_vfp -.Lretfloat_struct_vfp: - fldmiad sp, {d0-d1} - b .Lclosure_epilogue_vfp -.Lretdouble_struct_vfp: - fldmiad sp, {d0-d3} - b .Lclosure_epilogue_vfp - -.ffi_closure_VFP_end: - UNWIND .fnend - .size CNAME(ffi_closure_VFP),.ffi_closure_VFP_end-CNAME(ffi_closure_VFP) -#endif - -ENTRY(ffi_arm_trampoline) - stmfd sp!, {r0-r3} - ldr r0, [pc] - ldr pc, [pc] - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",%progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/arm/trampoline.S b/ruby/ext/fiddle/libffi-3.2.1/src/arm/trampoline.S deleted file mode 100644 index 935e8de17..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/arm/trampoline.S +++ /dev/null @@ -1,4450 +0,0 @@ -# GENERATED CODE - DO NOT EDIT -# This file was generated by src/arm/gentramp.sh - -# Copyright (c) 2010, Plausible Labs Cooperative, 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: -# -# 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. -# ----------------------------------------------------------------------- - -.text -.align 12 -.globl _ffi_closure_trampoline_table_page -_ffi_closure_trampoline_table_page: - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/avr32/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/avr32/ffi.c deleted file mode 100644 index 3d43397b0..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/avr32/ffi.c +++ /dev/null @@ -1,423 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2011 Anthony Green - Copyright (c) 2009 Bradley Smith - - AVR32 Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -#include -#include -#include -#include - -/* #define DEBUG */ - -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned int, unsigned int, unsigned int*, unsigned int, - void (*fn)(void)); -extern void ffi_closure_SYSV (ffi_closure *); - -unsigned int pass_struct_on_stack(ffi_type *type) -{ - if(type->type != FFI_TYPE_STRUCT) - return 0; - - if(type->alignment < type->size && - !(type->size == 4 || type->size == 8) && - !(type->size == 8 && type->alignment >= 4)) - return 1; - - if(type->size == 3 || type->size == 5 || type->size == 6 || - type->size == 7) - return 1; - - return 0; -} - -/* ffi_prep_args is called by the assembly routine once stack space - * has been allocated for the function's arguments - * - * This is annoyingly complex since we need to keep track of used - * registers. - */ - -void ffi_prep_args(char *stack, extended_cif *ecif) -{ - unsigned int i; - void **p_argv; - ffi_type **p_arg; - char *reg_base = stack; - char *stack_base = stack + 20; - unsigned int stack_offset = 0; - unsigned int reg_mask = 0; - - p_argv = ecif->avalue; - - /* If cif->flags is struct then we know it's not passed in registers */ - if(ecif->cif->flags == FFI_TYPE_STRUCT) - { - *(void**)reg_base = ecif->rvalue; - reg_mask |= 1; - } - - for(i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs; - i++, p_arg++) - { - size_t z = (*p_arg)->size; - int alignment = (*p_arg)->alignment; - int type = (*p_arg)->type; - char *addr = 0; - - if(z % 4 != 0) - z += (4 - z % 4); - - if(reg_mask != 0x1f) - { - if(pass_struct_on_stack(*p_arg)) - { - addr = stack_base + stack_offset; - stack_offset += z; - } - else if(z == sizeof(int)) - { - char index = 0; - - while((reg_mask >> index) & 1) - index++; - - addr = reg_base + (index * 4); - reg_mask |= (1 << index); - } - else if(z == 2 * sizeof(int)) - { - if(!((reg_mask >> 1) & 1)) - { - addr = reg_base + 4; - reg_mask |= (3 << 1); - } - else if(!((reg_mask >> 3) & 1)) - { - addr = reg_base + 12; - reg_mask |= (3 << 3); - } - } - } - - if(!addr) - { - addr = stack_base + stack_offset; - stack_offset += z; - } - - if(type == FFI_TYPE_STRUCT && (*p_arg)->elements[1] == NULL) - type = (*p_arg)->elements[0]->type; - - switch(type) - { - case FFI_TYPE_UINT8: - *(unsigned int *)addr = (unsigned int)*(UINT8 *)(*p_argv); - break; - case FFI_TYPE_SINT8: - *(signed int *)addr = (signed int)*(SINT8 *)(*p_argv); - break; - case FFI_TYPE_UINT16: - *(unsigned int *)addr = (unsigned int)*(UINT16 *)(*p_argv); - break; - case FFI_TYPE_SINT16: - *(signed int *)addr = (signed int)*(SINT16 *)(*p_argv); - break; - default: - memcpy(addr, *p_argv, z); - } - - p_argv++; - } - -#ifdef DEBUG - /* Debugging */ - for(i = 0; i < 5; i++) - { - if((reg_mask & (1 << i)) == 0) - printf("r%d: (unused)\n", 12 - i); - else - printf("r%d: 0x%08x\n", 12 - i, ((unsigned int*)reg_base)[i]); - } - - for(i = 0; i < stack_offset / 4; i++) - { - printf("sp+%d: 0x%08x\n", i*4, ((unsigned int*)stack_base)[i]); - } -#endif -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - /* Round the stack up to a multiple of 8 bytes. This isn't needed - * everywhere, but it is on some platforms, and it doesn't harm - * anything when it isn't needed. */ - cif->bytes = (cif->bytes + 7) & ~7; - - /* Flag to indicate that he return value is in fact a struct */ - cif->rstruct_flag = 0; - - /* Set the return type flag */ - switch(cif->rtype->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - cif->flags = (unsigned)FFI_TYPE_UINT8; - break; - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - cif->flags = (unsigned)FFI_TYPE_UINT16; - break; - case FFI_TYPE_FLOAT: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_POINTER: - cif->flags = (unsigned)FFI_TYPE_UINT32; - break; - case FFI_TYPE_DOUBLE: - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags = (unsigned)FFI_TYPE_UINT64; - break; - case FFI_TYPE_STRUCT: - cif->rstruct_flag = 1; - if(!pass_struct_on_stack(cif->rtype)) - { - if(cif->rtype->size <= 1) - cif->flags = (unsigned)FFI_TYPE_UINT8; - else if(cif->rtype->size <= 2) - cif->flags = (unsigned)FFI_TYPE_UINT16; - else if(cif->rtype->size <= 4) - cif->flags = (unsigned)FFI_TYPE_UINT32; - else if(cif->rtype->size <= 8) - cif->flags = (unsigned)FFI_TYPE_UINT64; - else - cif->flags = (unsigned)cif->rtype->type; - } - else - cif->flags = (unsigned)cif->rtype->type; - break; - default: - cif->flags = (unsigned)cif->rtype->type; - break; - } - - return FFI_OK; -} - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - unsigned int size = 0, i = 0; - ffi_type **p_arg; - - ecif.cif = cif; - ecif.avalue = avalue; - - for(i = 0, p_arg = cif->arg_types; i < cif->nargs; i++, p_arg++) - size += (*p_arg)->size + (4 - (*p_arg)->size % 4); - - /* If the return value is a struct and we don't have a return value - * address then we need to make one */ - - /* If cif->flags is struct then it's not suitable for registers */ - if((rvalue == NULL) && (cif->flags == FFI_TYPE_STRUCT)) - ecif.rvalue = alloca(cif->rtype->size); - else - ecif.rvalue = rvalue; - - switch(cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args, &ecif, size, cif->flags, - ecif.rvalue, cif->rstruct_flag, fn); - break; - default: - FFI_ASSERT(0); - break; - } -} - -static void ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, - void **avalue, ffi_cif *cif) -{ - register unsigned int i, reg_mask = 0; - register void **p_argv; - register ffi_type **p_arg; - register char *reg_base = stack; - register char *stack_base = stack + 20; - register unsigned int stack_offset = 0; - -#ifdef DEBUG - /* Debugging */ - for(i = 0; i < cif->nargs + 7; i++) - { - printf("sp+%d: 0x%08x\n", i*4, ((unsigned int*)stack)[i]); - } -#endif - - /* If cif->flags is struct then we know it's not passed in registers */ - if(cif->flags == FFI_TYPE_STRUCT) - { - *rvalue = *(void **)reg_base; - reg_mask |= 1; - } - - p_argv = avalue; - - for(i = 0, p_arg = cif->arg_types; i < cif->nargs; i++, p_arg++) - { - size_t z = (*p_arg)->size; - int alignment = (*p_arg)->alignment; - - *p_argv = 0; - - if(z % 4 != 0) - z += (4 - z % 4); - - if(reg_mask != 0x1f) - { - if(pass_struct_on_stack(*p_arg)) - { - *p_argv = (void*)stack_base + stack_offset; - stack_offset += z; - } - else if(z <= sizeof(int)) - { - char index = 0; - - while((reg_mask >> index) & 1) - index++; - - *p_argv = (void*)reg_base + (index * 4); - reg_mask |= (1 << index); - } - else if(z == 2 * sizeof(int)) - { - if(!((reg_mask >> 1) & 1)) - { - *p_argv = (void*)reg_base + 4; - reg_mask |= (3 << 1); - } - else if(!((reg_mask >> 3) & 1)) - { - *p_argv = (void*)reg_base + 12; - reg_mask |= (3 << 3); - } - } - } - - if(!*p_argv) - { - *p_argv = (void*)stack_base + stack_offset; - stack_offset += z; - } - - if((*p_arg)->type != FFI_TYPE_STRUCT || - (*p_arg)->elements[1] == NULL) - { - if(alignment == 1) - **(unsigned int**)p_argv <<= 24; - else if(alignment == 2) - **(unsigned int**)p_argv <<= 16; - } - - p_argv++; - } - -#ifdef DEBUG - /* Debugging */ - for(i = 0; i < cif->nargs; i++) - { - printf("sp+%d: 0x%08x\n", i*4, *(((unsigned int**)avalue)[i])); - } -#endif -} - -/* This function is jumped to by the trampoline */ - -unsigned int ffi_closure_SYSV_inner(ffi_closure *closure, void **respp, - void *args) -{ - ffi_cif *cif; - void **arg_area; - unsigned int i, size = 0; - ffi_type **p_arg; - - cif = closure->cif; - - for(i = 0, p_arg = cif->arg_types; i < cif->nargs; i++, p_arg++) - size += (*p_arg)->size + (4 - (*p_arg)->size % 4); - - arg_area = (void **)alloca(size); - - /* this call will initialize ARG_AREA, such that each element in that - * array points to the corresponding value on the stack; and if the - * function returns a structure, it will re-set RESP to point to the - * structure return address. */ - - ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); - - (closure->fun)(cif, *respp, arg_area, closure->user_data); - - return cif->flags; -} - -ffi_status ffi_prep_closure_loc(ffi_closure* closure, ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), void *user_data, - void *codeloc) -{ - if (cif->abi != FFI_SYSV) - return FFI_BAD_ABI; - - unsigned char *__tramp = (unsigned char*)(&closure->tramp[0]); - unsigned int __fun = (unsigned int)(&ffi_closure_SYSV); - unsigned int __ctx = (unsigned int)(codeloc); - unsigned int __rstruct_flag = (unsigned int)(cif->rstruct_flag); - unsigned int __inner = (unsigned int)(&ffi_closure_SYSV_inner); - *(unsigned int*) &__tramp[0] = 0xebcd1f00; /* pushm r8-r12 */ - *(unsigned int*) &__tramp[4] = 0xfefc0010; /* ld.w r12, pc[16] */ - *(unsigned int*) &__tramp[8] = 0xfefb0010; /* ld.w r11, pc[16] */ - *(unsigned int*) &__tramp[12] = 0xfefa0010; /* ld.w r10, pc[16] */ - *(unsigned int*) &__tramp[16] = 0xfeff0010; /* ld.w pc, pc[16] */ - *(unsigned int*) &__tramp[20] = __ctx; - *(unsigned int*) &__tramp[24] = __rstruct_flag; - *(unsigned int*) &__tramp[28] = __inner; - *(unsigned int*) &__tramp[32] = __fun; - syscall(__NR_cacheflush, 0, (&__tramp[0]), 36); - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/avr32/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/avr32/ffitarget.h deleted file mode 100644 index d0c7586f9..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/avr32/ffitarget.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 2009 Bradley Smith - Target configuration macros for AVR32. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -#define FFI_EXTRA_CIF_FIELDS unsigned int rstruct_flag - -/* Definitions for closures */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 36 -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/avr32/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/avr32/sysv.S deleted file mode 100644 index a984b3c88..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/avr32/sysv.S +++ /dev/null @@ -1,208 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2009 Bradley Smith - - AVR32 Foreign Function Interface - - 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. - --------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - /* r12: ffi_prep_args - * r11: &ecif - * r10: size - * r9: cif->flags - * r8: ecif.rvalue - * sp+0: cif->rstruct_flag - * sp+4: fn */ - - .text - .align 1 - .globl ffi_call_SYSV - .type ffi_call_SYSV, @function -ffi_call_SYSV: - stm --sp, r0,r1,lr - stm --sp, r8-r12 - mov r0, sp - - /* Make room for all of the new args. */ - sub sp, r10 - /* Pad to make way for potential skipped registers */ - sub sp, 20 - - /* Call ffi_prep_args(stack, &ecif). */ - /* r11 already set */ - mov r1, r12 - mov r12, sp - icall r1 - - /* Save new argument size */ - mov r1, r12 - - /* Move first 5 parameters in registers. */ - ldm sp++, r8-r12 - - /* call (fn) (...). */ - ld.w r1, r0[36] - icall r1 - - /* Remove the space we pushed for the args. */ - mov sp, r0 - - /* Load r1 with the rstruct flag. */ - ld.w r1, sp[32] - - /* Load r9 with the return type code. */ - ld.w r9, sp[12] - - /* Load r8 with the return value pointer. */ - ld.w r8, sp[16] - - /* If the return value pointer is NULL, assume no return value. */ - cp.w r8, 0 - breq .Lend - - /* Check if return type is actually a struct */ - cp.w r1, 0 - breq 1f - - /* Return 8bit */ - cp.w r9, FFI_TYPE_UINT8 - breq .Lstore8 - - /* Return 16bit */ - cp.w r9, FFI_TYPE_UINT16 - breq .Lstore16 - -1: - /* Return 32bit */ - cp.w r9, FFI_TYPE_UINT32 - breq .Lstore32 - cp.w r9, FFI_TYPE_UINT16 - breq .Lstore32 - cp.w r9, FFI_TYPE_UINT8 - breq .Lstore32 - - /* Return 64bit */ - cp.w r9, FFI_TYPE_UINT64 - breq .Lstore64 - - /* Didn't match anything */ - bral .Lend - -.Lstore64: - st.w r8[0], r11 - st.w r8[4], r10 - bral .Lend - -.Lstore32: - st.w r8[0], r12 - bral .Lend - -.Lstore16: - st.h r8[0], r12 - bral .Lend - -.Lstore8: - st.b r8[0], r12 - bral .Lend - -.Lend: - sub sp, -20 - ldm sp++, r0,r1,pc - - .size ffi_call_SYSV, . - ffi_call_SYSV - - - /* r12: __ctx - * r11: __rstruct_flag - * r10: __inner */ - - .align 1 - .globl ffi_closure_SYSV - .type ffi_closure_SYSV, @function -ffi_closure_SYSV: - stm --sp, r0,lr - mov r0, r11 - mov r8, r10 - sub r10, sp, -8 - sub sp, 12 - st.w sp[8], sp - sub r11, sp, -8 - icall r8 - - /* Check if return type is actually a struct */ - cp.w r0, 0 - breq 1f - - /* Return 8bit */ - cp.w r12, FFI_TYPE_UINT8 - breq .Lget8 - - /* Return 16bit */ - cp.w r12, FFI_TYPE_UINT16 - breq .Lget16 - -1: - /* Return 32bit */ - cp.w r12, FFI_TYPE_UINT32 - breq .Lget32 - cp.w r12, FFI_TYPE_UINT16 - breq .Lget32 - cp.w r12, FFI_TYPE_UINT8 - breq .Lget32 - - /* Return 64bit */ - cp.w r12, FFI_TYPE_UINT64 - breq .Lget64 - - /* Didn't match anything */ - bral .Lclend - -.Lget64: - ld.w r11, sp[0] - ld.w r10, sp[4] - bral .Lclend - -.Lget32: - ld.w r12, sp[0] - bral .Lclend - -.Lget16: - ld.uh r12, sp[0] - bral .Lclend - -.Lget8: - ld.ub r12, sp[0] - bral .Lclend - -.Lclend: - sub sp, -12 - ldm sp++, r0,lr - sub sp, -20 - mov pc, lr - - .size ffi_closure_SYSV, . - ffi_closure_SYSV - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/bfin/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/bfin/ffi.c deleted file mode 100644 index 22a2acdac..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/bfin/ffi.c +++ /dev/null @@ -1,196 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2012 Alexandre K. I. de Mendonca , - Paulo Pizarro - - Blackfin Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ -#include -#include - -#include -#include - -/* Maximum number of GPRs available for argument passing. */ -#define MAX_GPRARGS 3 - -/* - * Return types - */ -#define FFIBFIN_RET_VOID 0 -#define FFIBFIN_RET_BYTE 1 -#define FFIBFIN_RET_HALFWORD 2 -#define FFIBFIN_RET_INT64 3 -#define FFIBFIN_RET_INT32 4 - -/*====================================================================*/ -/* PROTOTYPE * - /*====================================================================*/ -void ffi_prep_args(unsigned char *, extended_cif *); - -/*====================================================================*/ -/* Externals */ -/* (Assembly) */ -/*====================================================================*/ - -extern void ffi_call_SYSV(unsigned, extended_cif *, void(*)(unsigned char *, extended_cif *), unsigned, void *, void(*fn)(void)); - -/*====================================================================*/ -/* Implementation */ -/* */ -/*====================================================================*/ - - -/* - * This function calculates the return type (size) based on type. - */ - -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - /* --------------------------------------* - * Return handling * - * --------------------------------------*/ - switch (cif->rtype->type) { - case FFI_TYPE_VOID: - cif->flags = FFIBFIN_RET_VOID; - break; - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - cif->flags = FFIBFIN_RET_HALFWORD; - break; - case FFI_TYPE_UINT8: - cif->flags = FFIBFIN_RET_BYTE; - break; - case FFI_TYPE_INT: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_FLOAT: - case FFI_TYPE_POINTER: - case FFI_TYPE_SINT8: - cif->flags = FFIBFIN_RET_INT32; - break; - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_DOUBLE: - cif->flags = FFIBFIN_RET_INT64; - break; - case FFI_TYPE_STRUCT: - if (cif->rtype->size <= 4){ - cif->flags = FFIBFIN_RET_INT32; - }else if (cif->rtype->size == 8){ - cif->flags = FFIBFIN_RET_INT64; - }else{ - //it will return via a hidden pointer in P0 - cif->flags = FFIBFIN_RET_VOID; - } - break; - default: - FFI_ASSERT(0); - break; - } - return FFI_OK; -} - -/* - * This will prepare the arguments and will call the assembly routine - * cif = the call interface - * fn = the function to be called - * rvalue = the return value - * avalue = the arguments - */ -void ffi_call(ffi_cif *cif, void(*fn)(void), void *rvalue, void **avalue) -{ - int ret_type = cif->flags; - extended_cif ecif; - ecif.cif = cif; - ecif.avalue = avalue; - ecif.rvalue = rvalue; - - switch (cif->abi) { - case FFI_SYSV: - ffi_call_SYSV(cif->bytes, &ecif, ffi_prep_args, ret_type, ecif.rvalue, fn); - break; - default: - FFI_ASSERT(0); - break; - } -} - - -/* -* This function prepares the parameters (copies them from the ecif to the stack) -* to call the function (ffi_prep_args is called by the assembly routine in file -* sysv.S, which also calls the actual function) -*/ -void ffi_prep_args(unsigned char *stack, extended_cif *ecif) -{ - register unsigned int i = 0; - void **p_argv; - unsigned char *argp; - ffi_type **p_arg; - argp = stack; - p_argv = ecif->avalue; - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); - i--, p_arg++) { - size_t z; - z = (*p_arg)->size; - if (z < sizeof(int)) { - z = sizeof(int); - switch ((*p_arg)->type) { - case FFI_TYPE_SINT8: { - signed char v = *(SINT8 *)(* p_argv); - signed int t = v; - *(signed int *) argp = t; - } - break; - case FFI_TYPE_UINT8: { - unsigned char v = *(UINT8 *)(* p_argv); - unsigned int t = v; - *(unsigned int *) argp = t; - } - break; - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int) * (SINT16 *)(* p_argv); - break; - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int) * (UINT16 *)(* p_argv); - break; - case FFI_TYPE_STRUCT: - memcpy(argp, *p_argv, (*p_arg)->size); - break; - default: - FFI_ASSERT(0); - break; - } - } else if (z == sizeof(int)) { - *(unsigned int *) argp = (unsigned int) * (UINT32 *)(* p_argv); - } else { - memcpy(argp, *p_argv, z); - } - p_argv++; - argp += z; - } -} - - - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/bfin/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/bfin/ffitarget.h deleted file mode 100644 index 2175c0101..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/bfin/ffitarget.h +++ /dev/null @@ -1,43 +0,0 @@ -/* ----------------------------------------------------------------------- - ffitarget.h - Copyright (c) 2012 Alexandre K. I. de Mendonca - - Blackfin Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -#endif - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/bfin/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/bfin/sysv.S deleted file mode 100644 index f4278be24..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/bfin/sysv.S +++ /dev/null @@ -1,179 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2012 Alexandre K. I. de Mendonca , - Paulo Pizarro - - Blackfin Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -.text -.align 4 - - /* - There is a "feature" in the bfin toolchain that it puts a _ before function names - that's why the function here it's called _ffi_call_SYSV and not ffi_call_SYSV - */ - .global _ffi_call_SYSV; - .type _ffi_call_SYSV, STT_FUNC; - .func ffi_call_SYSV - - /* - cif->bytes = R0 (fp+8) - &ecif = R1 (fp+12) - ffi_prep_args = R2 (fp+16) - ret_type = stack (fp+20) - ecif.rvalue = stack (fp+24) - fn = stack (fp+28) - got (fp+32) - - There is room for improvement here (we can use temporary registers - instead of saving the values in the memory) - REGS: - P5 => Stack pointer (function arguments) - R5 => cif->bytes - R4 => ret->type - - FP-20 = P3 - FP-16 = SP (parameters area) - FP-12 = SP (temp) - FP-08 = function return part 1 [R0] - FP-04 = function return part 2 [R1] - */ - -_ffi_call_SYSV: -.prologue: - LINK 20; - [FP-20] = P3; - [FP+8] = R0; - [FP+12] = R1; - [FP+16] = R2; - -.allocate_stack: - //alocate cif->bytes into the stack - R1 = [FP+8]; - R0 = SP; - R0 = R0 - R1; - R1 = 4; - R0 = R0 - R1; - [FP-12] = SP; - SP = R0; - [FP-16] = SP; - -.call_prep_args: - //get the addr of prep_args - P0 = [P3 + _ffi_prep_args@FUNCDESC_GOT17M4]; - P1 = [P0]; - P3 = [P0+4]; - R0 = [FP-16];//SP (parameter area) - R1 = [FP+12];//ecif - call (P1); - -.call_user_function: - //ajust SP so as to allow the user function access the parameters on the stack - SP = [FP-16]; //point to function parameters - R0 = [SP]; - R1 = [SP+4]; - R2 = [SP+8]; - //load user function address - P0 = FP; - P0 +=28; - P1 = [P0]; - P1 = [P1]; - P3 = [P0+4]; - /* - For functions returning aggregate values (struct) occupying more than 8 bytes, - the caller allocates the return value object on the stack and the address - of this object is passed to the callee as a hidden argument in register P0. - */ - P0 = [FP+24]; - - call (P1); - SP = [FP-12]; -.compute_return: - P2 = [FP-20]; - [FP-8] = R0; - [FP-4] = R1; - - R0 = [FP+20]; - R1 = R0 << 2; - - R0 = [P2+.rettable@GOT17M4]; - R0 = R1 + R0; - P2 = R0; - R1 = [P2]; - - P2 = [FP+-20]; - R0 = [P2+.rettable@GOT17M4]; - R0 = R1 + R0; - P2 = R0; - R0 = [FP-8]; - R1 = [FP-4]; - jump (P2); - -/* -#define FFIBFIN_RET_VOID 0 -#define FFIBFIN_RET_BYTE 1 -#define FFIBFIN_RET_HALFWORD 2 -#define FFIBFIN_RET_INT64 3 -#define FFIBFIN_RET_INT32 4 -*/ -.align 4 -.align 4 -.rettable: - .dd .epilogue - .rettable - .dd .rbyte - .rettable; - .dd .rhalfword - .rettable; - .dd .rint64 - .rettable; - .dd .rint32 - .rettable; - -.rbyte: - P0 = [FP+24]; - R0 = R0.B (Z); - [P0] = R0; - JUMP .epilogue -.rhalfword: - P0 = [FP+24]; - R0 = R0.L; - [P0] = R0; - JUMP .epilogue -.rint64: - P0 = [FP+24];// &rvalue - [P0] = R0; - [P0+4] = R1; - JUMP .epilogue -.rint32: - P0 = [FP+24]; - [P0] = R0; -.epilogue: - R0 = [FP+8]; - R1 = [FP+12]; - R2 = [FP+16]; - P3 = [FP-20]; - UNLINK; - RTS; - -.size _ffi_call_SYSV,.-_ffi_call_SYSV; -.endfunc diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/closures.c b/ruby/ext/fiddle/libffi-3.2.1/src/closures.c deleted file mode 100644 index 721ff00ea..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/closures.c +++ /dev/null @@ -1,688 +0,0 @@ -/* ----------------------------------------------------------------------- - closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. - Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc - Copyright (c) 2011 Plausible Labs Cooperative, Inc. - - Code to allocate and deallocate memory for closures. - - 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. - ----------------------------------------------------------------------- */ - -#if defined __linux__ && !defined _GNU_SOURCE -#define _GNU_SOURCE 1 -#endif - -#include -#include - -#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE -# if __gnu_linux__ && !defined(__ANDROID__) -/* This macro indicates it may be forbidden to map anonymous memory - with both write and execute permission. Code compiled when this - option is defined will attempt to map such pages once, but if it - fails, it falls back to creating a temporary file in a writable and - executable filesystem and mapping pages from it into separate - locations in the virtual memory space, one location writable and - another executable. */ -# define FFI_MMAP_EXEC_WRIT 1 -# define HAVE_MNTENT 1 -# endif -# if defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__) -/* Windows systems may have Data Execution Protection (DEP) enabled, - which requires the use of VirtualMalloc/VirtualFree to alloc/free - executable memory. */ -# define FFI_MMAP_EXEC_WRIT 1 -# endif -#endif - -#if FFI_MMAP_EXEC_WRIT && !defined FFI_MMAP_EXEC_SELINUX -# ifdef __linux__ -/* When defined to 1 check for SELinux and if SELinux is active, - don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that - might cause audit messages. */ -# define FFI_MMAP_EXEC_SELINUX 1 -# endif -#endif - -#if FFI_CLOSURES - -# if FFI_EXEC_TRAMPOLINE_TABLE - -// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations. - -# elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */ - -#define USE_LOCKS 1 -#define USE_DL_PREFIX 1 -#ifdef __GNUC__ -#ifndef USE_BUILTIN_FFS -#define USE_BUILTIN_FFS 1 -#endif -#endif - -/* We need to use mmap, not sbrk. */ -#define HAVE_MORECORE 0 - -/* We could, in theory, support mremap, but it wouldn't buy us anything. */ -#define HAVE_MREMAP 0 - -/* We have no use for this, so save some code and data. */ -#define NO_MALLINFO 1 - -/* We need all allocations to be in regular segments, otherwise we - lose track of the corresponding code address. */ -#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T - -/* Don't allocate more than a page unless needed. */ -#define DEFAULT_GRANULARITY ((size_t)malloc_getpagesize) - -#if FFI_CLOSURE_TEST -/* Don't release single pages, to avoid a worst-case scenario of - continuously allocating and releasing single pages, but release - pairs of pages, which should do just as well given that allocations - are likely to be small. */ -#define DEFAULT_TRIM_THRESHOLD ((size_t)malloc_getpagesize) -#endif - -#include -#include -#include -#include -#ifndef _MSC_VER -#include -#endif -#include -#include -#if !defined(X86_WIN32) && !defined(X86_WIN64) -#ifdef HAVE_MNTENT -#include -#endif /* HAVE_MNTENT */ -#include -#include - -/* We don't want sys/mman.h to be included after we redefine mmap and - dlmunmap. */ -#include -#define LACKS_SYS_MMAN_H 1 - -#if FFI_MMAP_EXEC_SELINUX -#include -#include - -static int selinux_enabled = -1; - -static int -selinux_enabled_check (void) -{ - struct statfs sfs; - FILE *f; - char *buf = NULL; - size_t len = 0; - - if (statfs ("/selinux", &sfs) >= 0 - && (unsigned int) sfs.f_type == 0xf97cff8cU) - return 1; - f = fopen ("/proc/mounts", "r"); - if (f == NULL) - return 0; - while (getline (&buf, &len, f) >= 0) - { - char *p = strchr (buf, ' '); - if (p == NULL) - break; - p = strchr (p + 1, ' '); - if (p == NULL) - break; - if (strncmp (p + 1, "selinuxfs ", 10) == 0) - { - free (buf); - fclose (f); - return 1; - } - } - free (buf); - fclose (f); - return 0; -} - -#define is_selinux_enabled() (selinux_enabled >= 0 ? selinux_enabled \ - : (selinux_enabled = selinux_enabled_check ())) - -#else - -#define is_selinux_enabled() 0 - -#endif /* !FFI_MMAP_EXEC_SELINUX */ - -/* On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. */ -#ifdef FFI_MMAP_EXEC_EMUTRAMP_PAX -#include - -static int emutramp_enabled = -1; - -static int -emutramp_enabled_check (void) -{ - char *buf = NULL; - size_t len = 0; - FILE *f; - int ret; - f = fopen ("/proc/self/status", "r"); - if (f == NULL) - return 0; - ret = 0; - - while (getline (&buf, &len, f) != -1) - if (!strncmp (buf, "PaX:", 4)) - { - char emutramp; - if (sscanf (buf, "%*s %*c%c", &emutramp) == 1) - ret = (emutramp == 'E'); - break; - } - free (buf); - fclose (f); - return ret; -} - -#define is_emutramp_enabled() (emutramp_enabled >= 0 ? emutramp_enabled \ - : (emutramp_enabled = emutramp_enabled_check ())) -#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ - -#elif defined (__CYGWIN__) || defined(__INTERIX) - -#include - -/* Cygwin is Linux-like, but not quite that Linux-like. */ -#define is_selinux_enabled() 0 - -#endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ - -#ifndef FFI_MMAP_EXEC_EMUTRAMP_PAX -#define is_emutramp_enabled() 0 -#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ - -/* Declare all functions defined in dlmalloc.c as static. */ -static void *dlmalloc(size_t); -static void dlfree(void*); -static void *dlcalloc(size_t, size_t) MAYBE_UNUSED; -static void *dlrealloc(void *, size_t) MAYBE_UNUSED; -static void *dlmemalign(size_t, size_t) MAYBE_UNUSED; -static void *dlvalloc(size_t) MAYBE_UNUSED; -static int dlmallopt(int, int) MAYBE_UNUSED; -static size_t dlmalloc_footprint(void) MAYBE_UNUSED; -static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED; -static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED; -static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED; -static void *dlpvalloc(size_t) MAYBE_UNUSED; -static int dlmalloc_trim(size_t) MAYBE_UNUSED; -static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED; -static void dlmalloc_stats(void) MAYBE_UNUSED; - -#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) -/* Use these for mmap and munmap within dlmalloc.c. */ -static void *dlmmap(void *, size_t, int, int, int, off_t); -static int dlmunmap(void *, size_t); -#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ - -#define mmap dlmmap -#define munmap dlmunmap - -#include "dlmalloc.c" - -#undef mmap -#undef munmap - -#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) - -/* A mutex used to synchronize access to *exec* variables in this file. */ -static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; - -/* A file descriptor of a temporary file from which we'll map - executable pages. */ -static int execfd = -1; - -/* The amount of space already allocated from the temporary file. */ -static size_t execsize = 0; - -/* Open a temporary file name, and immediately unlink it. */ -static int -open_temp_exec_file_name (char *name, int flags) -{ - int fd; - -#ifdef HAVE_MKOSTEMP - fd = mkostemp (name, flags); -#else - fd = mkstemp (name); -#endif - - if (fd != -1) - unlink (name); - - return fd; -} - -/* Open a temporary file in the named directory. */ -static int -open_temp_exec_file_dir (const char *dir) -{ - static const char suffix[] = "/ffiXXXXXX"; - int lendir, flags; - char *tempname; -#ifdef O_TMPFILE - int fd; -#endif - -#ifdef O_CLOEXEC - flags = O_CLOEXEC; -#else - flags = 0; -#endif - -#ifdef O_TMPFILE - fd = open (dir, flags | O_RDWR | O_EXCL | O_TMPFILE, 0700); - /* If the running system does not support the O_TMPFILE flag then retry without it. */ - if (fd != -1 || (errno != EINVAL && errno != EISDIR && errno != EOPNOTSUPP)) { - return fd; - } else { - errno = 0; - } -#endif - - lendir = strlen (dir); - tempname = __builtin_alloca (lendir + sizeof (suffix)); - - if (!tempname) - return -1; - - memcpy (tempname, dir, lendir); - memcpy (tempname + lendir, suffix, sizeof (suffix)); - - return open_temp_exec_file_name (tempname, flags); -} - -/* Open a temporary file in the directory in the named environment - variable. */ -static int -open_temp_exec_file_env (const char *envvar) -{ - const char *value = getenv (envvar); - - if (!value) - return -1; - - return open_temp_exec_file_dir (value); -} - -#ifdef HAVE_MNTENT -/* Open a temporary file in an executable and writable mount point - listed in the mounts file. Subsequent calls with the same mounts - keep searching for mount points in the same file. Providing NULL - as the mounts file closes the file. */ -static int -open_temp_exec_file_mnt (const char *mounts) -{ - static const char *last_mounts; - static FILE *last_mntent; - - if (mounts != last_mounts) - { - if (last_mntent) - endmntent (last_mntent); - - last_mounts = mounts; - - if (mounts) - last_mntent = setmntent (mounts, "r"); - else - last_mntent = NULL; - } - - if (!last_mntent) - return -1; - - for (;;) - { - int fd; - struct mntent mnt; - char buf[MAXPATHLEN * 3]; - - if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)) == NULL) - return -1; - - if (hasmntopt (&mnt, "ro") - || hasmntopt (&mnt, "noexec") - || access (mnt.mnt_dir, W_OK)) - continue; - - fd = open_temp_exec_file_dir (mnt.mnt_dir); - - if (fd != -1) - return fd; - } -} -#endif /* HAVE_MNTENT */ - -/* Instructions to look for a location to hold a temporary file that - can be mapped in for execution. */ -static struct -{ - int (*func)(const char *); - const char *arg; - int repeat; -} open_temp_exec_file_opts[] = { - { open_temp_exec_file_env, "TMPDIR", 0 }, - { open_temp_exec_file_dir, "/tmp", 0 }, - { open_temp_exec_file_dir, "/var/tmp", 0 }, - { open_temp_exec_file_dir, "/dev/shm", 0 }, - { open_temp_exec_file_env, "HOME", 0 }, -#ifdef HAVE_MNTENT - { open_temp_exec_file_mnt, "/etc/mtab", 1 }, - { open_temp_exec_file_mnt, "/proc/mounts", 1 }, -#endif /* HAVE_MNTENT */ -}; - -/* Current index into open_temp_exec_file_opts. */ -static int open_temp_exec_file_opts_idx = 0; - -/* Reset a current multi-call func, then advances to the next entry. - If we're at the last, go back to the first and return nonzero, - otherwise return zero. */ -static int -open_temp_exec_file_opts_next (void) -{ - if (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) - open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func (NULL); - - open_temp_exec_file_opts_idx++; - if (open_temp_exec_file_opts_idx - == (sizeof (open_temp_exec_file_opts) - / sizeof (*open_temp_exec_file_opts))) - { - open_temp_exec_file_opts_idx = 0; - return 1; - } - - return 0; -} - -/* Return a file descriptor of a temporary zero-sized file in a - writable and executable filesystem. */ -static int -open_temp_exec_file (void) -{ - int fd; - - do - { - fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func - (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].arg); - - if (!open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat - || fd == -1) - { - if (open_temp_exec_file_opts_next ()) - break; - } - } - while (fd == -1); - - return fd; -} - -/* Map in a chunk of memory from the temporary exec file into separate - locations in the virtual memory address space, one writable and one - executable. Returns the address of the writable portion, after - storing an offset to the corresponding executable portion at the - last word of the requested chunk. */ -static void * -dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) -{ - void *ptr; - - if (execfd == -1) - { - open_temp_exec_file_opts_idx = 0; - retry_open: - execfd = open_temp_exec_file (); - if (execfd == -1) - return MFAIL; - } - - offset = execsize; - - if (ftruncate (execfd, offset + length)) - return MFAIL; - - flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS); - flags |= MAP_SHARED; - - ptr = mmap (NULL, length, (prot & ~PROT_WRITE) | PROT_EXEC, - flags, execfd, offset); - if (ptr == MFAIL) - { - if (!offset) - { - close (execfd); - goto retry_open; - } - ftruncate (execfd, offset); - return MFAIL; - } - else if (!offset - && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) - open_temp_exec_file_opts_next (); - - start = mmap (start, length, prot, flags, execfd, offset); - - if (start == MFAIL) - { - munmap (ptr, length); - ftruncate (execfd, offset); - return start; - } - - mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start; - - execsize += length; - - return start; -} - -/* Map in a writable and executable chunk of memory if possible. - Failing that, fall back to dlmmap_locked. */ -static void * -dlmmap (void *start, size_t length, int prot, - int flags, int fd, off_t offset) -{ - void *ptr; - - assert (start == NULL && length % malloc_getpagesize == 0 - && prot == (PROT_READ | PROT_WRITE) - && flags == (MAP_PRIVATE | MAP_ANONYMOUS) - && fd == -1 && offset == 0); - -#if FFI_CLOSURE_TEST - printf ("mapping in %zi\n", length); -#endif - - if (execfd == -1 && is_emutramp_enabled ()) - { - ptr = mmap (start, length, prot & ~PROT_EXEC, flags, fd, offset); - return ptr; - } - - if (execfd == -1 && !is_selinux_enabled ()) - { - ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset); - - if (ptr != MFAIL || (errno != EPERM && errno != EACCES)) - /* Cool, no need to mess with separate segments. */ - return ptr; - - /* If MREMAP_DUP is ever introduced and implemented, try mmap - with ((prot & ~PROT_WRITE) | PROT_EXEC) and mremap with - MREMAP_DUP and prot at this point. */ - } - - if (execsize == 0 || execfd == -1) - { - pthread_mutex_lock (&open_temp_exec_file_mutex); - ptr = dlmmap_locked (start, length, prot, flags, offset); - pthread_mutex_unlock (&open_temp_exec_file_mutex); - - return ptr; - } - - return dlmmap_locked (start, length, prot, flags, offset); -} - -/* Release memory at the given address, as well as the corresponding - executable page if it's separate. */ -static int -dlmunmap (void *start, size_t length) -{ - /* We don't bother decreasing execsize or truncating the file, since - we can't quite tell whether we're unmapping the end of the file. - We don't expect frequent deallocation anyway. If we did, we - could locate pages in the file by writing to the pages being - deallocated and checking that the file contents change. - Yuck. */ - msegmentptr seg = segment_holding (gm, start); - void *code; - -#if FFI_CLOSURE_TEST - printf ("unmapping %zi\n", length); -#endif - - if (seg && (code = add_segment_exec_offset (start, seg)) != start) - { - int ret = munmap (code, length); - if (ret) - return ret; - } - - return munmap (start, length); -} - -#if FFI_CLOSURE_FREE_CODE -/* Return segment holding given code address. */ -static msegmentptr -segment_holding_code (mstate m, char* addr) -{ - msegmentptr sp = &m->seg; - for (;;) { - if (addr >= add_segment_exec_offset (sp->base, sp) - && addr < add_segment_exec_offset (sp->base, sp) + sp->size) - return sp; - if ((sp = sp->next) == 0) - return 0; - } -} -#endif - -#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ - -/* Allocate a chunk of memory with the given size. Returns a pointer - to the writable address, and sets *CODE to the executable - corresponding virtual address. */ -void * -ffi_closure_alloc (size_t size, void **code) -{ - void *ptr; - - if (!code) - return NULL; - - ptr = dlmalloc (size); - - if (ptr) - { - msegmentptr seg = segment_holding (gm, ptr); - - *code = add_segment_exec_offset (ptr, seg); - } - - return ptr; -} - -/* Release a chunk of memory allocated with ffi_closure_alloc. If - FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the - writable or the executable address given. Otherwise, only the - writable address can be provided here. */ -void -ffi_closure_free (void *ptr) -{ -#if FFI_CLOSURE_FREE_CODE - msegmentptr seg = segment_holding_code (gm, ptr); - - if (seg) - ptr = sub_segment_exec_offset (ptr, seg); -#endif - - dlfree (ptr); -} - - -#if FFI_CLOSURE_TEST -/* Do some internal sanity testing to make sure allocation and - deallocation of pages are working as intended. */ -int main () -{ - void *p[3]; -#define GET(idx, len) do { p[idx] = dlmalloc (len); printf ("allocated %zi for p[%i]\n", (len), (idx)); } while (0) -#define PUT(idx) do { printf ("freeing p[%i]\n", (idx)); dlfree (p[idx]); } while (0) - GET (0, malloc_getpagesize / 2); - GET (1, 2 * malloc_getpagesize - 64 * sizeof (void*)); - PUT (1); - GET (1, 2 * malloc_getpagesize); - GET (2, malloc_getpagesize / 2); - PUT (1); - PUT (0); - PUT (2); - return 0; -} -#endif /* FFI_CLOSURE_TEST */ -# else /* ! FFI_MMAP_EXEC_WRIT */ - -/* On many systems, memory returned by malloc is writable and - executable, so just use it. */ - -#include - -void * -ffi_closure_alloc (size_t size, void **code) -{ - if (!code) - return NULL; - - return *code = malloc (size); -} - -void -ffi_closure_free (void *ptr) -{ - free (ptr); -} - -# endif /* ! FFI_MMAP_EXEC_WRIT */ -#endif /* FFI_CLOSURES */ diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/cris/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/cris/ffi.c deleted file mode 100644 index aaca5b1cb..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/cris/ffi.c +++ /dev/null @@ -1,386 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1998 Cygnus Solutions - Copyright (c) 2004 Simon Posnjak - Copyright (c) 2005 Axis Communications AB - Copyright (C) 2007 Free Software Foundation, Inc. - - CRIS Foreign Function Interface - - 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 SIMON POSNJAK 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 -#include - -#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) - -static ffi_status -initialize_aggregate_packed_struct (ffi_type * arg) -{ - ffi_type **ptr; - - FFI_ASSERT (arg != NULL); - - FFI_ASSERT (arg->elements != NULL); - FFI_ASSERT (arg->size == 0); - FFI_ASSERT (arg->alignment == 0); - - ptr = &(arg->elements[0]); - - while ((*ptr) != NULL) - { - if (((*ptr)->size == 0) - && (initialize_aggregate_packed_struct ((*ptr)) != FFI_OK)) - return FFI_BAD_TYPEDEF; - - FFI_ASSERT (ffi_type_test ((*ptr))); - - arg->size += (*ptr)->size; - - arg->alignment = (arg->alignment > (*ptr)->alignment) ? - arg->alignment : (*ptr)->alignment; - - ptr++; - } - - if (arg->size == 0) - return FFI_BAD_TYPEDEF; - else - return FFI_OK; -} - -int -ffi_prep_args (char *stack, extended_cif * ecif) -{ - unsigned int i; - unsigned int struct_count = 0; - void **p_argv; - char *argp; - ffi_type **p_arg; - - argp = stack; - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); i--, p_arg++) - { - size_t z; - - switch ((*p_arg)->type) - { - case FFI_TYPE_STRUCT: - { - z = (*p_arg)->size; - if (z <= 4) - { - memcpy (argp, *p_argv, z); - z = 4; - } - else if (z <= 8) - { - memcpy (argp, *p_argv, z); - z = 8; - } - else - { - unsigned int uiLocOnStack; - z = sizeof (void *); - uiLocOnStack = 4 * ecif->cif->nargs + struct_count; - struct_count = struct_count + (*p_arg)->size; - *(unsigned int *) argp = - (unsigned int) (UINT32 *) (stack + uiLocOnStack); - memcpy ((stack + uiLocOnStack), *p_argv, (*p_arg)->size); - } - break; - } - default: - z = (*p_arg)->size; - if (z < sizeof (int)) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int) *(SINT8 *) (*p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = - (unsigned int) *(UINT8 *) (*p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int) *(SINT16 *) (*p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = - (unsigned int) *(UINT16 *) (*p_argv); - break; - - default: - FFI_ASSERT (0); - } - z = sizeof (int); - } - else if (z == sizeof (int)) - *(unsigned int *) argp = (unsigned int) *(UINT32 *) (*p_argv); - else - memcpy (argp, *p_argv, z); - break; - } - p_argv++; - argp += z; - } - - return (struct_count); -} - -ffi_status FFI_HIDDEN -ffi_prep_cif_core (ffi_cif * cif, - ffi_abi abi, unsigned int isvariadic, - unsigned int nfixedargs, unsigned int ntotalargs, - ffi_type * rtype, ffi_type ** atypes) -{ - unsigned bytes = 0; - unsigned int i; - ffi_type **ptr; - - FFI_ASSERT (cif != NULL); - FFI_ASSERT((!isvariadic) || (nfixedargs >= 1)); - FFI_ASSERT(nfixedargs <= ntotalargs); - FFI_ASSERT (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI); - - cif->abi = abi; - cif->arg_types = atypes; - cif->nargs = ntotalargs; - cif->rtype = rtype; - - cif->flags = 0; - - if ((cif->rtype->size == 0) - && (initialize_aggregate_packed_struct (cif->rtype) != FFI_OK)) - return FFI_BAD_TYPEDEF; - - FFI_ASSERT_VALID_TYPE (cif->rtype); - - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - if (((*ptr)->size == 0) - && (initialize_aggregate_packed_struct ((*ptr)) != FFI_OK)) - return FFI_BAD_TYPEDEF; - - FFI_ASSERT_VALID_TYPE (*ptr); - - if (((*ptr)->alignment - 1) & bytes) - bytes = ALIGN (bytes, (*ptr)->alignment); - if ((*ptr)->type == FFI_TYPE_STRUCT) - { - if ((*ptr)->size > 8) - { - bytes += (*ptr)->size; - bytes += sizeof (void *); - } - else - { - if ((*ptr)->size > 4) - bytes += 8; - else - bytes += 4; - } - } - else - bytes += STACK_ARG_SIZE ((*ptr)->size); - } - - cif->bytes = bytes; - - return ffi_prep_cif_machdep (cif); -} - -ffi_status -ffi_prep_cif_machdep (ffi_cif * cif) -{ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_STRUCT: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags = (unsigned) cif->rtype->type; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - - return FFI_OK; -} - -extern void ffi_call_SYSV (int (*)(char *, extended_cif *), - extended_cif *, - unsigned, unsigned, unsigned *, void (*fn) ()) - __attribute__ ((__visibility__ ("hidden"))); - -void -ffi_call (ffi_cif * cif, void (*fn) (), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca (cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV (ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; - default: - FFI_ASSERT (0); - break; - } -} - -/* Because the following variables are not exported outside libffi, we - mark them hidden. */ - -/* Assembly code for the jump stub. */ -extern const char ffi_cris_trampoline_template[] - __attribute__ ((__visibility__ ("hidden"))); - -/* Offset into ffi_cris_trampoline_template of where to put the - ffi_prep_closure_inner function. */ -extern const int ffi_cris_trampoline_fn_offset - __attribute__ ((__visibility__ ("hidden"))); - -/* Offset into ffi_cris_trampoline_template of where to put the - closure data. */ -extern const int ffi_cris_trampoline_closure_offset - __attribute__ ((__visibility__ ("hidden"))); - -/* This function is sibling-called (jumped to) by the closure - trampoline. We get R10..R13 at PARAMS[0..3] and a copy of [SP] at - PARAMS[4] to simplify handling of a straddling parameter. A copy - of R9 is at PARAMS[5] and SP at PARAMS[6]. These parameters are - put at the appropriate place in CLOSURE which is then executed and - the return value is passed back to the caller. */ - -static unsigned long long -ffi_prep_closure_inner (void **params, ffi_closure* closure) -{ - char *register_args = (char *) params; - void *struct_ret = params[5]; - char *stack_args = params[6]; - char *ptr = register_args; - ffi_cif *cif = closure->cif; - ffi_type **arg_types = cif->arg_types; - - /* Max room needed is number of arguments as 64-bit values. */ - void **avalue = alloca (closure->cif->nargs * sizeof(void *)); - int i; - int doing_regs; - long long llret = 0; - - /* Find the address of each argument. */ - for (i = 0, doing_regs = 1; i < cif->nargs; i++) - { - /* Types up to and including 8 bytes go by-value. */ - if (arg_types[i]->size <= 4) - { - avalue[i] = ptr; - ptr += 4; - } - else if (arg_types[i]->size <= 8) - { - avalue[i] = ptr; - ptr += 8; - } - else - { - FFI_ASSERT (arg_types[i]->type == FFI_TYPE_STRUCT); - - /* Passed by-reference, so copy the pointer. */ - avalue[i] = *(void **) ptr; - ptr += 4; - } - - /* If we've handled more arguments than fit in registers, start - looking at the those passed on the stack. Step over the - first one if we had a straddling parameter. */ - if (doing_regs && ptr >= register_args + 4*4) - { - ptr = stack_args + ((ptr > register_args + 4*4) ? 4 : 0); - doing_regs = 0; - } - } - - /* Invoke the closure. */ - (closure->fun) (cif, - - cif->rtype->type == FFI_TYPE_STRUCT - /* The caller allocated space for the return - structure, and passed a pointer to this space in - R9. */ - ? struct_ret - - /* We take advantage of being able to ignore that - the high part isn't set if the return value is - not in R10:R11, but in R10 only. */ - : (void *) &llret, - - avalue, closure->user_data); - - return llret; -} - -/* API function: Prepare the trampoline. */ - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif *, void *, void **, void*), - void *user_data, - void *codeloc) -{ - void *innerfn = ffi_prep_closure_inner; - FFI_ASSERT (cif->abi == FFI_SYSV); - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - memcpy (closure->tramp, ffi_cris_trampoline_template, - FFI_CRIS_TRAMPOLINE_CODE_PART_SIZE); - memcpy (closure->tramp + ffi_cris_trampoline_fn_offset, - &innerfn, sizeof (void *)); - memcpy (closure->tramp + ffi_cris_trampoline_closure_offset, - &codeloc, sizeof (void *)); - - return FFI_OK; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/cris/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/cris/ffitarget.h deleted file mode 100644 index b837e976e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/cris/ffitarget.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for CRIS. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_CRIS_TRAMPOLINE_CODE_PART_SIZE 36 -#define FFI_CRIS_TRAMPOLINE_DATA_PART_SIZE (7*4) -#define FFI_TRAMPOLINE_SIZE \ - (FFI_CRIS_TRAMPOLINE_CODE_PART_SIZE + FFI_CRIS_TRAMPOLINE_DATA_PART_SIZE) -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/cris/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/cris/sysv.S deleted file mode 100644 index 79abaee4d..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/cris/sysv.S +++ /dev/null @@ -1,215 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2004 Simon Posnjak - Copyright (c) 2005 Axis Communications AB - - CRIS Foreign Function Interface - - 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 SIMON POSNJAK 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#define CONCAT(x,y) x ## y -#define XCONCAT(x,y) CONCAT (x, y) -#define L(x) XCONCAT (__USER_LABEL_PREFIX__, x) - - .text - - ;; OK, when we get called we should have this (according to - ;; AXIS ETRAX 100LX Programmer's Manual chapter 6.3). - ;; - ;; R10: ffi_prep_args (func. pointer) - ;; R11: &ecif - ;; R12: cif->bytes - ;; R13: fig->flags - ;; sp+0: ecif.rvalue - ;; sp+4: fn (function pointer to the function that we need to call) - - .globl L(ffi_call_SYSV) - .type L(ffi_call_SYSV),@function - .hidden L(ffi_call_SYSV) - -L(ffi_call_SYSV): - ;; Save the regs to the stack. - push $srp - ;; Used for stack pointer saving. - push $r6 - ;; Used for function address pointer. - push $r7 - ;; Used for stack pointer saving. - push $r8 - ;; We save fig->flags to stack we will need them after we - ;; call The Function. - push $r13 - - ;; Saving current stack pointer. - move.d $sp,$r8 - move.d $sp,$r6 - - ;; Move address of ffi_prep_args to r13. - move.d $r10,$r13 - - ;; Make room on the stack for the args of fn. - sub.d $r12,$sp - - ;; Function void ffi_prep_args(char *stack, extended_cif *ecif) parameters are: - ;; r10 <-- stack pointer - ;; r11 <-- &ecif (already there) - move.d $sp,$r10 - - ;; Call the function. - jsr $r13 - - ;; Save the size of the structures which are passed on stack. - move.d $r10,$r7 - - ;; Move first four args in to r10..r13. - move.d [$sp+0],$r10 - move.d [$sp+4],$r11 - move.d [$sp+8],$r12 - move.d [$sp+12],$r13 - - ;; Adjust the stack and check if any parameters are given on stack. - addq 16,$sp - sub.d $r7,$r6 - cmp.d $sp,$r6 - - bpl go_on - nop - -go_on_no_params_on_stack: - move.d $r6,$sp - -go_on: - ;; Discover if we need to put rval address in to r9. - move.d [$r8+0],$r7 - cmpq FFI_TYPE_STRUCT,$r7 - bne call_now - nop - - ;; Move rval address to $r9. - move.d [$r8+20],$r9 - -call_now: - ;; Move address of The Function in to r7. - move.d [$r8+24],$r7 - - ;; Call The Function. - jsr $r7 - - ;; Reset stack. - move.d $r8,$sp - - ;; Load rval type (fig->flags) in to r13. - pop $r13 - - ;; Detect rval type. - cmpq FFI_TYPE_VOID,$r13 - beq epilogue - - cmpq FFI_TYPE_STRUCT,$r13 - beq epilogue - - cmpq FFI_TYPE_DOUBLE,$r13 - beq return_double_or_longlong - - cmpq FFI_TYPE_UINT64,$r13 - beq return_double_or_longlong - - cmpq FFI_TYPE_SINT64,$r13 - beq return_double_or_longlong - nop - - ;; Just return the 32 bit value. - ba return - nop - -return_double_or_longlong: - ;; Load half of the rval to r10 and the other half to r11. - move.d [$sp+16],$r13 - move.d $r10,[$r13] - addq 4,$r13 - move.d $r11,[$r13] - ba epilogue - nop - -return: - ;; Load the rval to r10. - move.d [$sp+16],$r13 - move.d $r10,[$r13] - -epilogue: - pop $r8 - pop $r7 - pop $r6 - Jump [$sp+] - - .size ffi_call_SYSV,.-ffi_call_SYSV - -/* Save R10..R13 into an array, somewhat like varargs. Copy the next - argument too, to simplify handling of any straddling parameter. - Save R9 and SP after those. Jump to function handling the rest. - Since this is a template, copied and the main function filled in by - the user. */ - - .globl L(ffi_cris_trampoline_template) - .type L(ffi_cris_trampoline_template),@function - .hidden L(ffi_cris_trampoline_template) - -L(ffi_cris_trampoline_template): -0: - /* The value we get for "PC" is right after the prefix instruction, - two bytes from the beginning, i.e. 0b+2. */ - move.d $r10,[$pc+2f-(0b+2)] - move.d $pc,$r10 -1: - addq 2f-1b+4,$r10 - move.d $r11,[$r10+] - move.d $r12,[$r10+] - move.d $r13,[$r10+] - move.d [$sp],$r11 - move.d $r11,[$r10+] - move.d $r9,[$r10+] - move.d $sp,[$r10+] - subq FFI_CRIS_TRAMPOLINE_DATA_PART_SIZE,$r10 - move.d 0,$r11 -3: - jump 0 -2: - .size ffi_cris_trampoline_template,.-0b - -/* This macro create a constant usable as "extern const int \name" in - C from within libffi, when \name has no prefix decoration. */ - - .macro const name,value - .globl \name - .type \name,@object - .hidden \name -\name: - .dword \value - .size \name,4 - .endm - -/* Constants for offsets within the trampoline. We could do this with - just symbols, avoiding memory contents and memory accesses, but the - C usage code would look a bit stranger. */ - - const L(ffi_cris_trampoline_fn_offset),2b-4-0b - const L(ffi_cris_trampoline_closure_offset),3b-4-0b diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/debug.c b/ruby/ext/fiddle/libffi-3.2.1/src/debug.c deleted file mode 100644 index f3172b1ef..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/debug.c +++ /dev/null @@ -1,64 +0,0 @@ -/* ----------------------------------------------------------------------- - debug.c - Copyright (c) 1996 Red Hat, 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: - - 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. - ----------------------------------------------------------------------- */ - -#include -#include -#include -#include - -/* General debugging routines */ - -void ffi_stop_here(void) -{ - /* This function is only useful for debugging purposes. - Place a breakpoint on ffi_stop_here to be notified of - significant events. */ -} - -/* This function should only be called via the FFI_ASSERT() macro */ - -void ffi_assert(char *expr, char *file, int line) -{ - fprintf(stderr, "ASSERTION FAILURE: %s at %s:%d\n", expr, file, line); - ffi_stop_here(); - abort(); -} - -/* Perform a sanity check on an ffi_type structure */ - -void ffi_type_test(ffi_type *a, char *file, int line) -{ - FFI_ASSERT_AT(a != NULL, file, line); - - FFI_ASSERT_AT(a->type <= FFI_TYPE_LAST, file, line); - FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->size > 0, file, line); - FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->alignment > 0, file, line); - FFI_ASSERT_AT((a->type != FFI_TYPE_STRUCT && a->type != FFI_TYPE_COMPLEX) - || a->elements != NULL, file, line); - FFI_ASSERT_AT(a->type != FFI_TYPE_COMPLEX - || (a->elements != NULL - && a->elements[0] != NULL && a->elements[1] == NULL), - file, line); - -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/dlmalloc.c b/ruby/ext/fiddle/libffi-3.2.1/src/dlmalloc.c deleted file mode 100644 index 8725b4fd6..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/dlmalloc.c +++ /dev/null @@ -1,5161 +0,0 @@ -/* - This is a version (aka dlmalloc) of malloc/free/realloc written by - Doug Lea and released to the public domain, as explained at - http://creativecommons.org/licenses/publicdomain. Send questions, - comments, complaints, performance data, etc to dl@cs.oswego.edu - -* Version 2.8.3 Thu Sep 22 11:16:15 2005 Doug Lea (dl at gee) - - Note: There may be an updated version of this malloc obtainable at - ftp://gee.cs.oswego.edu/pub/misc/malloc.c - Check before installing! - -* Quickstart - - This library is all in one file to simplify the most common usage: - ftp it, compile it (-O3), and link it into another program. All of - the compile-time options default to reasonable values for use on - most platforms. You might later want to step through various - compile-time and dynamic tuning options. - - For convenience, an include file for code using this malloc is at: - ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.3.h - You don't really need this .h file unless you call functions not - defined in your system include files. The .h file contains only the - excerpts from this file needed for using this malloc on ANSI C/C++ - systems, so long as you haven't changed compile-time options about - naming and tuning parameters. If you do, then you can create your - own malloc.h that does include all settings by cutting at the point - indicated below. Note that you may already by default be using a C - library containing a malloc that is based on some version of this - malloc (for example in linux). You might still want to use the one - in this file to customize settings or to avoid overheads associated - with library versions. - -* Vital statistics: - - Supported pointer/size_t representation: 4 or 8 bytes - size_t MUST be an unsigned type of the same width as - pointers. (If you are using an ancient system that declares - size_t as a signed type, or need it to be a different width - than pointers, you can use a previous release of this malloc - (e.g. 2.7.2) supporting these.) - - Alignment: 8 bytes (default) - This suffices for nearly all current machines and C compilers. - However, you can define MALLOC_ALIGNMENT to be wider than this - if necessary (up to 128bytes), at the expense of using more space. - - Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes) - 8 or 16 bytes (if 8byte sizes) - Each malloced chunk has a hidden word of overhead holding size - and status information, and additional cross-check word - if FOOTERS is defined. - - Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead) - 8-byte ptrs: 32 bytes (including overhead) - - Even a request for zero bytes (i.e., malloc(0)) returns a - pointer to something of the minimum allocatable size. - The maximum overhead wastage (i.e., number of extra bytes - allocated than were requested in malloc) is less than or equal - to the minimum size, except for requests >= mmap_threshold that - are serviced via mmap(), where the worst case wastage is about - 32 bytes plus the remainder from a system page (the minimal - mmap unit); typically 4096 or 8192 bytes. - - Security: static-safe; optionally more or less - The "security" of malloc refers to the ability of malicious - code to accentuate the effects of errors (for example, freeing - space that is not currently malloc'ed or overwriting past the - ends of chunks) in code that calls malloc. This malloc - guarantees not to modify any memory locations below the base of - heap, i.e., static variables, even in the presence of usage - errors. The routines additionally detect most improper frees - and reallocs. All this holds as long as the static bookkeeping - for malloc itself is not corrupted by some other means. This - is only one aspect of security -- these checks do not, and - cannot, detect all possible programming errors. - - If FOOTERS is defined nonzero, then each allocated chunk - carries an additional check word to verify that it was malloced - from its space. These check words are the same within each - execution of a program using malloc, but differ across - executions, so externally crafted fake chunks cannot be - freed. This improves security by rejecting frees/reallocs that - could corrupt heap memory, in addition to the checks preventing - writes to statics that are always on. This may further improve - security at the expense of time and space overhead. (Note that - FOOTERS may also be worth using with MSPACES.) - - By default detected errors cause the program to abort (calling - "abort()"). You can override this to instead proceed past - errors by defining PROCEED_ON_ERROR. In this case, a bad free - has no effect, and a malloc that encounters a bad address - caused by user overwrites will ignore the bad address by - dropping pointers and indices to all known memory. This may - be appropriate for programs that should continue if at all - possible in the face of programming errors, although they may - run out of memory because dropped memory is never reclaimed. - - If you don't like either of these options, you can define - CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything - else. And if if you are sure that your program using malloc has - no errors or vulnerabilities, you can define INSECURE to 1, - which might (or might not) provide a small performance improvement. - - Thread-safety: NOT thread-safe unless USE_LOCKS defined - When USE_LOCKS is defined, each public call to malloc, free, - etc is surrounded with either a pthread mutex or a win32 - spinlock (depending on WIN32). This is not especially fast, and - can be a major bottleneck. It is designed only to provide - minimal protection in concurrent environments, and to provide a - basis for extensions. If you are using malloc in a concurrent - program, consider instead using ptmalloc, which is derived from - a version of this malloc. (See http://www.malloc.de). - - System requirements: Any combination of MORECORE and/or MMAP/MUNMAP - This malloc can use unix sbrk or any emulation (invoked using - the CALL_MORECORE macro) and/or mmap/munmap or any emulation - (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system - memory. On most unix systems, it tends to work best if both - MORECORE and MMAP are enabled. On Win32, it uses emulations - based on VirtualAlloc. It also uses common C library functions - like memset. - - Compliance: I believe it is compliant with the Single Unix Specification - (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably - others as well. - -* Overview of algorithms - - This is not the fastest, most space-conserving, most portable, or - most tunable malloc ever written. However it is among the fastest - while also being among the most space-conserving, portable and - tunable. Consistent balance across these factors results in a good - general-purpose allocator for malloc-intensive programs. - - In most ways, this malloc is a best-fit allocator. Generally, it - chooses the best-fitting existing chunk for a request, with ties - broken in approximately least-recently-used order. (This strategy - normally maintains low fragmentation.) However, for requests less - than 256bytes, it deviates from best-fit when there is not an - exactly fitting available chunk by preferring to use space adjacent - to that used for the previous small request, as well as by breaking - ties in approximately most-recently-used order. (These enhance - locality of series of small allocations.) And for very large requests - (>= 256Kb by default), it relies on system memory mapping - facilities, if supported. (This helps avoid carrying around and - possibly fragmenting memory used only for large chunks.) - - All operations (except malloc_stats and mallinfo) have execution - times that are bounded by a constant factor of the number of bits in - a size_t, not counting any clearing in calloc or copying in realloc, - or actions surrounding MORECORE and MMAP that have times - proportional to the number of non-contiguous regions returned by - system allocation routines, which is often just 1. - - The implementation is not very modular and seriously overuses - macros. Perhaps someday all C compilers will do as good a job - inlining modular code as can now be done by brute-force expansion, - but now, enough of them seem not to. - - Some compilers issue a lot of warnings about code that is - dead/unreachable only on some platforms, and also about intentional - uses of negation on unsigned types. All known cases of each can be - ignored. - - For a longer but out of date high-level description, see - http://gee.cs.oswego.edu/dl/html/malloc.html - -* MSPACES - If MSPACES is defined, then in addition to malloc, free, etc., - this file also defines mspace_malloc, mspace_free, etc. These - are versions of malloc routines that take an "mspace" argument - obtained using create_mspace, to control all internal bookkeeping. - If ONLY_MSPACES is defined, only these versions are compiled. - So if you would like to use this allocator for only some allocations, - and your system malloc for others, you can compile with - ONLY_MSPACES and then do something like... - static mspace mymspace = create_mspace(0,0); // for example - #define mymalloc(bytes) mspace_malloc(mymspace, bytes) - - (Note: If you only need one instance of an mspace, you can instead - use "USE_DL_PREFIX" to relabel the global malloc.) - - You can similarly create thread-local allocators by storing - mspaces as thread-locals. For example: - static __thread mspace tlms = 0; - void* tlmalloc(size_t bytes) { - if (tlms == 0) tlms = create_mspace(0, 0); - return mspace_malloc(tlms, bytes); - } - void tlfree(void* mem) { mspace_free(tlms, mem); } - - Unless FOOTERS is defined, each mspace is completely independent. - You cannot allocate from one and free to another (although - conformance is only weakly checked, so usage errors are not always - caught). If FOOTERS is defined, then each chunk carries around a tag - indicating its originating mspace, and frees are directed to their - originating spaces. - - ------------------------- Compile-time options --------------------------- - -Be careful in setting #define values for numerical constants of type -size_t. On some systems, literal values are not automatically extended -to size_t precision unless they are explicitly casted. - -WIN32 default: defined if _WIN32 defined - Defining WIN32 sets up defaults for MS environment and compilers. - Otherwise defaults are for unix. - -MALLOC_ALIGNMENT default: (size_t)8 - Controls the minimum alignment for malloc'ed chunks. It must be a - power of two and at least 8, even on machines for which smaller - alignments would suffice. It may be defined as larger than this - though. Note however that code and data structures are optimized for - the case of 8-byte alignment. - -MSPACES default: 0 (false) - If true, compile in support for independent allocation spaces. - This is only supported if HAVE_MMAP is true. - -ONLY_MSPACES default: 0 (false) - If true, only compile in mspace versions, not regular versions. - -USE_LOCKS default: 0 (false) - Causes each call to each public routine to be surrounded with - pthread or WIN32 mutex lock/unlock. (If set true, this can be - overridden on a per-mspace basis for mspace versions.) - -FOOTERS default: 0 - If true, provide extra checking and dispatching by placing - information in the footers of allocated chunks. This adds - space and time overhead. - -INSECURE default: 0 - If true, omit checks for usage errors and heap space overwrites. - -USE_DL_PREFIX default: NOT defined - Causes compiler to prefix all public routines with the string 'dl'. - This can be useful when you only want to use this malloc in one part - of a program, using your regular system malloc elsewhere. - -ABORT default: defined as abort() - Defines how to abort on failed checks. On most systems, a failed - check cannot die with an "assert" or even print an informative - message, because the underlying print routines in turn call malloc, - which will fail again. Generally, the best policy is to simply call - abort(). It's not very useful to do more than this because many - errors due to overwriting will show up as address faults (null, odd - addresses etc) rather than malloc-triggered checks, so will also - abort. Also, most compilers know that abort() does not return, so - can better optimize code conditionally calling it. - -PROCEED_ON_ERROR default: defined as 0 (false) - Controls whether detected bad addresses cause them to bypassed - rather than aborting. If set, detected bad arguments to free and - realloc are ignored. And all bookkeeping information is zeroed out - upon a detected overwrite of freed heap space, thus losing the - ability to ever return it from malloc again, but enabling the - application to proceed. If PROCEED_ON_ERROR is defined, the - static variable malloc_corruption_error_count is compiled in - and can be examined to see if errors have occurred. This option - generates slower code than the default abort policy. - -DEBUG default: NOT defined - The DEBUG setting is mainly intended for people trying to modify - this code or diagnose problems when porting to new platforms. - However, it may also be able to better isolate user errors than just - using runtime checks. The assertions in the check routines spell - out in more detail the assumptions and invariants underlying the - algorithms. The checking is fairly extensive, and will slow down - execution noticeably. Calling malloc_stats or mallinfo with DEBUG - set will attempt to check every non-mmapped allocated and free chunk - in the course of computing the summaries. - -ABORT_ON_ASSERT_FAILURE default: defined as 1 (true) - Debugging assertion failures can be nearly impossible if your - version of the assert macro causes malloc to be called, which will - lead to a cascade of further failures, blowing the runtime stack. - ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(), - which will usually make debugging easier. - -MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32 - The action to take before "return 0" when malloc fails to be able to - return memory because there is none available. - -HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES - True if this system supports sbrk or an emulation of it. - -MORECORE default: sbrk - The name of the sbrk-style system routine to call to obtain more - memory. See below for guidance on writing custom MORECORE - functions. The type of the argument to sbrk/MORECORE varies across - systems. It cannot be size_t, because it supports negative - arguments, so it is normally the signed type of the same width as - size_t (sometimes declared as "intptr_t"). It doesn't much matter - though. Internally, we only call it with arguments less than half - the max value of a size_t, which should work across all reasonable - possibilities, although sometimes generating compiler warnings. See - near the end of this file for guidelines for creating a custom - version of MORECORE. - -MORECORE_CONTIGUOUS default: 1 (true) - If true, take advantage of fact that consecutive calls to MORECORE - with positive arguments always return contiguous increasing - addresses. This is true of unix sbrk. It does not hurt too much to - set it true anyway, since malloc copes with non-contiguities. - Setting it false when definitely non-contiguous saves time - and possibly wasted space it would take to discover this though. - -MORECORE_CANNOT_TRIM default: NOT defined - True if MORECORE cannot release space back to the system when given - negative arguments. This is generally necessary only if you are - using a hand-crafted MORECORE function that cannot handle negative - arguments. - -HAVE_MMAP default: 1 (true) - True if this system supports mmap or an emulation of it. If so, and - HAVE_MORECORE is not true, MMAP is used for all system - allocation. If set and HAVE_MORECORE is true as well, MMAP is - primarily used to directly allocate very large blocks. It is also - used as a backup strategy in cases where MORECORE fails to provide - space from system. Note: A single call to MUNMAP is assumed to be - able to unmap memory that may have be allocated using multiple calls - to MMAP, so long as they are adjacent. - -HAVE_MREMAP default: 1 on linux, else 0 - If true realloc() uses mremap() to re-allocate large blocks and - extend or shrink allocation spaces. - -MMAP_CLEARS default: 1 on unix - True if mmap clears memory so calloc doesn't need to. This is true - for standard unix mmap using /dev/zero. - -USE_BUILTIN_FFS default: 0 (i.e., not used) - Causes malloc to use the builtin ffs() function to compute indices. - Some compilers may recognize and intrinsify ffs to be faster than the - supplied C version. Also, the case of x86 using gcc is special-cased - to an asm instruction, so is already as fast as it can be, and so - this setting has no effect. (On most x86s, the asm version is only - slightly faster than the C version.) - -malloc_getpagesize default: derive from system includes, or 4096. - The system page size. To the extent possible, this malloc manages - memory from the system in page-size units. This may be (and - usually is) a function rather than a constant. This is ignored - if WIN32, where page size is determined using getSystemInfo during - initialization. - -USE_DEV_RANDOM default: 0 (i.e., not used) - Causes malloc to use /dev/random to initialize secure magic seed for - stamping footers. Otherwise, the current time is used. - -NO_MALLINFO default: 0 - If defined, don't compile "mallinfo". This can be a simple way - of dealing with mismatches between system declarations and - those in this file. - -MALLINFO_FIELD_TYPE default: size_t - The type of the fields in the mallinfo struct. This was originally - defined as "int" in SVID etc, but is more usefully defined as - size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set - -REALLOC_ZERO_BYTES_FREES default: not defined - This should be set if a call to realloc with zero bytes should - be the same as a call to free. Some people think it should. Otherwise, - since this malloc returns a unique pointer for malloc(0), so does - realloc(p, 0). - -LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H -LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H -LACKS_STDLIB_H default: NOT defined unless on WIN32 - Define these if your system does not have these header files. - You might need to manually insert some of the declarations they provide. - -DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS, - system_info.dwAllocationGranularity in WIN32, - otherwise 64K. - Also settable using mallopt(M_GRANULARITY, x) - The unit for allocating and deallocating memory from the system. On - most systems with contiguous MORECORE, there is no reason to - make this more than a page. However, systems with MMAP tend to - either require or encourage larger granularities. You can increase - this value to prevent system allocation functions to be called so - often, especially if they are slow. The value must be at least one - page and must be a power of two. Setting to 0 causes initialization - to either page size or win32 region size. (Note: In previous - versions of malloc, the equivalent of this option was called - "TOP_PAD") - -DEFAULT_TRIM_THRESHOLD default: 2MB - Also settable using mallopt(M_TRIM_THRESHOLD, x) - The maximum amount of unused top-most memory to keep before - releasing via malloc_trim in free(). Automatic trimming is mainly - useful in long-lived programs using contiguous MORECORE. Because - trimming via sbrk can be slow on some systems, and can sometimes be - wasteful (in cases where programs immediately afterward allocate - more large chunks) the value should be high enough so that your - overall system performance would improve by releasing this much - memory. As a rough guide, you might set to a value close to the - average size of a process (program) running on your system. - Releasing this much memory would allow such a process to run in - memory. Generally, it is worth tuning trim thresholds when a - program undergoes phases where several large chunks are allocated - and released in ways that can reuse each other's storage, perhaps - mixed with phases where there are no such chunks at all. The trim - value must be greater than page size to have any useful effect. To - disable trimming completely, you can set to MAX_SIZE_T. Note that the trick - some people use of mallocing a huge space and then freeing it at - program startup, in an attempt to reserve system memory, doesn't - have the intended effect under automatic trimming, since that memory - will immediately be returned to the system. - -DEFAULT_MMAP_THRESHOLD default: 256K - Also settable using mallopt(M_MMAP_THRESHOLD, x) - The request size threshold for using MMAP to directly service a - request. Requests of at least this size that cannot be allocated - using already-existing space will be serviced via mmap. (If enough - normal freed space already exists it is used instead.) Using mmap - segregates relatively large chunks of memory so that they can be - individually obtained and released from the host system. A request - serviced through mmap is never reused by any other request (at least - not directly; the system may just so happen to remap successive - requests to the same locations). Segregating space in this way has - the benefits that: Mmapped space can always be individually released - back to the system, which helps keep the system level memory demands - of a long-lived program low. Also, mapped memory doesn't become - `locked' between other chunks, as can happen with normally allocated - chunks, which means that even trimming via malloc_trim would not - release them. However, it has the disadvantage that the space - cannot be reclaimed, consolidated, and then used to service later - requests, as happens with normal chunks. The advantages of mmap - nearly always outweigh disadvantages for "large" chunks, but the - value of "large" may vary across systems. The default is an - empirically derived value that works well in most systems. You can - disable mmap by setting to MAX_SIZE_T. - -*/ - -#ifndef WIN32 -#ifdef _WIN32 -#define WIN32 1 -#endif /* _WIN32 */ -#endif /* WIN32 */ -#ifdef WIN32 -#define WIN32_LEAN_AND_MEAN -#include -#define HAVE_MMAP 1 -#define HAVE_MORECORE 0 -#define LACKS_UNISTD_H -#define LACKS_SYS_PARAM_H -#define LACKS_SYS_MMAN_H -#define LACKS_STRING_H -#define LACKS_STRINGS_H -#define LACKS_SYS_TYPES_H -#define LACKS_ERRNO_H -#define MALLOC_FAILURE_ACTION -#define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */ -#endif /* WIN32 */ - -#ifdef __OS2__ -#define INCL_DOS -#include -#define HAVE_MMAP 1 -#define HAVE_MORECORE 0 -#define LACKS_SYS_MMAN_H -#endif /* __OS2__ */ - -#if defined(DARWIN) || defined(_DARWIN) -/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */ -#ifndef HAVE_MORECORE -#define HAVE_MORECORE 0 -#define HAVE_MMAP 1 -#endif /* HAVE_MORECORE */ -#endif /* DARWIN */ - -#ifndef LACKS_SYS_TYPES_H -#include /* For size_t */ -#endif /* LACKS_SYS_TYPES_H */ - -/* The maximum possible size_t value has all bits set */ -#define MAX_SIZE_T (~(size_t)0) - -#ifndef ONLY_MSPACES -#define ONLY_MSPACES 0 -#endif /* ONLY_MSPACES */ -#ifndef MSPACES -#if ONLY_MSPACES -#define MSPACES 1 -#else /* ONLY_MSPACES */ -#define MSPACES 0 -#endif /* ONLY_MSPACES */ -#endif /* MSPACES */ -#ifndef MALLOC_ALIGNMENT -#define MALLOC_ALIGNMENT ((size_t)8U) -#endif /* MALLOC_ALIGNMENT */ -#ifndef FOOTERS -#define FOOTERS 0 -#endif /* FOOTERS */ -#ifndef ABORT -#define ABORT abort() -#endif /* ABORT */ -#ifndef ABORT_ON_ASSERT_FAILURE -#define ABORT_ON_ASSERT_FAILURE 1 -#endif /* ABORT_ON_ASSERT_FAILURE */ -#ifndef PROCEED_ON_ERROR -#define PROCEED_ON_ERROR 0 -#endif /* PROCEED_ON_ERROR */ -#ifndef USE_LOCKS -#define USE_LOCKS 0 -#endif /* USE_LOCKS */ -#ifndef INSECURE -#define INSECURE 0 -#endif /* INSECURE */ -#ifndef HAVE_MMAP -#define HAVE_MMAP 1 -#endif /* HAVE_MMAP */ -#ifndef MMAP_CLEARS -#define MMAP_CLEARS 1 -#endif /* MMAP_CLEARS */ -#ifndef HAVE_MREMAP -#ifdef linux -#define HAVE_MREMAP 1 -#else /* linux */ -#define HAVE_MREMAP 0 -#endif /* linux */ -#endif /* HAVE_MREMAP */ -#ifndef MALLOC_FAILURE_ACTION -#define MALLOC_FAILURE_ACTION errno = ENOMEM; -#endif /* MALLOC_FAILURE_ACTION */ -#ifndef HAVE_MORECORE -#if ONLY_MSPACES -#define HAVE_MORECORE 0 -#else /* ONLY_MSPACES */ -#define HAVE_MORECORE 1 -#endif /* ONLY_MSPACES */ -#endif /* HAVE_MORECORE */ -#if !HAVE_MORECORE -#define MORECORE_CONTIGUOUS 0 -#else /* !HAVE_MORECORE */ -#ifndef MORECORE -#define MORECORE sbrk -#endif /* MORECORE */ -#ifndef MORECORE_CONTIGUOUS -#define MORECORE_CONTIGUOUS 1 -#endif /* MORECORE_CONTIGUOUS */ -#endif /* HAVE_MORECORE */ -#ifndef DEFAULT_GRANULARITY -#if MORECORE_CONTIGUOUS -#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */ -#else /* MORECORE_CONTIGUOUS */ -#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U) -#endif /* MORECORE_CONTIGUOUS */ -#endif /* DEFAULT_GRANULARITY */ -#ifndef DEFAULT_TRIM_THRESHOLD -#ifndef MORECORE_CANNOT_TRIM -#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) -#else /* MORECORE_CANNOT_TRIM */ -#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T -#endif /* MORECORE_CANNOT_TRIM */ -#endif /* DEFAULT_TRIM_THRESHOLD */ -#ifndef DEFAULT_MMAP_THRESHOLD -#if HAVE_MMAP -#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U) -#else /* HAVE_MMAP */ -#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T -#endif /* HAVE_MMAP */ -#endif /* DEFAULT_MMAP_THRESHOLD */ -#ifndef USE_BUILTIN_FFS -#define USE_BUILTIN_FFS 0 -#endif /* USE_BUILTIN_FFS */ -#ifndef USE_DEV_RANDOM -#define USE_DEV_RANDOM 0 -#endif /* USE_DEV_RANDOM */ -#ifndef NO_MALLINFO -#define NO_MALLINFO 0 -#endif /* NO_MALLINFO */ -#ifndef MALLINFO_FIELD_TYPE -#define MALLINFO_FIELD_TYPE size_t -#endif /* MALLINFO_FIELD_TYPE */ - -/* - mallopt tuning options. SVID/XPG defines four standard parameter - numbers for mallopt, normally defined in malloc.h. None of these - are used in this malloc, so setting them has no effect. But this - malloc does support the following options. -*/ - -#define M_TRIM_THRESHOLD (-1) -#define M_GRANULARITY (-2) -#define M_MMAP_THRESHOLD (-3) - -/* ------------------------ Mallinfo declarations ------------------------ */ - -#if !NO_MALLINFO -/* - This version of malloc supports the standard SVID/XPG mallinfo - routine that returns a struct containing usage properties and - statistics. It should work on any system that has a - /usr/include/malloc.h defining struct mallinfo. The main - declaration needed is the mallinfo struct that is returned (by-copy) - by mallinfo(). The malloinfo struct contains a bunch of fields that - are not even meaningful in this version of malloc. These fields are - are instead filled by mallinfo() with other numbers that might be of - interest. - - HAVE_USR_INCLUDE_MALLOC_H should be set if you have a - /usr/include/malloc.h file that includes a declaration of struct - mallinfo. If so, it is included; else a compliant version is - declared below. These must be precisely the same for mallinfo() to - work. The original SVID version of this struct, defined on most - systems with mallinfo, declares all fields as ints. But some others - define as unsigned long. If your system defines the fields using a - type of different width than listed here, you MUST #include your - system version and #define HAVE_USR_INCLUDE_MALLOC_H. -*/ - -/* #define HAVE_USR_INCLUDE_MALLOC_H */ - -#ifdef HAVE_USR_INCLUDE_MALLOC_H -#include "/usr/include/malloc.h" -#else /* HAVE_USR_INCLUDE_MALLOC_H */ - -/* HP-UX's stdlib.h redefines mallinfo unless _STRUCT_MALLINFO is defined */ -#define _STRUCT_MALLINFO - -struct mallinfo { - MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ - MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ - MALLINFO_FIELD_TYPE smblks; /* always 0 */ - MALLINFO_FIELD_TYPE hblks; /* always 0 */ - MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */ - MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */ - MALLINFO_FIELD_TYPE fsmblks; /* always 0 */ - MALLINFO_FIELD_TYPE uordblks; /* total allocated space */ - MALLINFO_FIELD_TYPE fordblks; /* total free space */ - MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */ -}; - -#endif /* HAVE_USR_INCLUDE_MALLOC_H */ -#endif /* NO_MALLINFO */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#if !ONLY_MSPACES - -/* ------------------- Declarations of public routines ------------------- */ - -#ifndef USE_DL_PREFIX -#define dlcalloc calloc -#define dlfree free -#define dlmalloc malloc -#define dlmemalign memalign -#define dlrealloc realloc -#define dlvalloc valloc -#define dlpvalloc pvalloc -#define dlmallinfo mallinfo -#define dlmallopt mallopt -#define dlmalloc_trim malloc_trim -#define dlmalloc_stats malloc_stats -#define dlmalloc_usable_size malloc_usable_size -#define dlmalloc_footprint malloc_footprint -#define dlmalloc_max_footprint malloc_max_footprint -#define dlindependent_calloc independent_calloc -#define dlindependent_comalloc independent_comalloc -#endif /* USE_DL_PREFIX */ - - -/* - malloc(size_t n) - Returns a pointer to a newly allocated chunk of at least n bytes, or - null if no space is available, in which case errno is set to ENOMEM - on ANSI C systems. - - If n is zero, malloc returns a minimum-sized chunk. (The minimum - size is 16 bytes on most 32bit systems, and 32 bytes on 64bit - systems.) Note that size_t is an unsigned type, so calls with - arguments that would be negative if signed are interpreted as - requests for huge amounts of space, which will often fail. The - maximum supported value of n differs across systems, but is in all - cases less than the maximum representable value of a size_t. -*/ -void* dlmalloc(size_t); - -/* - free(void* p) - Releases the chunk of memory pointed to by p, that had been previously - allocated using malloc or a related routine such as realloc. - It has no effect if p is null. If p was not malloced or already - freed, free(p) will by default cause the current program to abort. -*/ -void dlfree(void*); - -/* - calloc(size_t n_elements, size_t element_size); - Returns a pointer to n_elements * element_size bytes, with all locations - set to zero. -*/ -void* dlcalloc(size_t, size_t); - -/* - realloc(void* p, size_t n) - Returns a pointer to a chunk of size n that contains the same data - as does chunk p up to the minimum of (n, p's size) bytes, or null - if no space is available. - - The returned pointer may or may not be the same as p. The algorithm - prefers extending p in most cases when possible, otherwise it - employs the equivalent of a malloc-copy-free sequence. - - If p is null, realloc is equivalent to malloc. - - If space is not available, realloc returns null, errno is set (if on - ANSI) and p is NOT freed. - - if n is for fewer bytes than already held by p, the newly unused - space is lopped off and freed if possible. realloc with a size - argument of zero (re)allocates a minimum-sized chunk. - - The old unix realloc convention of allowing the last-free'd chunk - to be used as an argument to realloc is not supported. -*/ - -void* dlrealloc(void*, size_t); - -/* - memalign(size_t alignment, size_t n); - Returns a pointer to a newly allocated chunk of n bytes, aligned - in accord with the alignment argument. - - The alignment argument should be a power of two. If the argument is - not a power of two, the nearest greater power is used. - 8-byte alignment is guaranteed by normal malloc calls, so don't - bother calling memalign with an argument of 8 or less. - - Overreliance on memalign is a sure way to fragment space. -*/ -void* dlmemalign(size_t, size_t); - -/* - valloc(size_t n); - Equivalent to memalign(pagesize, n), where pagesize is the page - size of the system. If the pagesize is unknown, 4096 is used. -*/ -void* dlvalloc(size_t); - -/* - mallopt(int parameter_number, int parameter_value) - Sets tunable parameters The format is to provide a - (parameter-number, parameter-value) pair. mallopt then sets the - corresponding parameter to the argument value if it can (i.e., so - long as the value is meaningful), and returns 1 if successful else - 0. SVID/XPG/ANSI defines four standard param numbers for mallopt, - normally defined in malloc.h. None of these are use in this malloc, - so setting them has no effect. But this malloc also supports other - options in mallopt. See below for details. Briefly, supported - parameters are as follows (listed defaults are for "typical" - configurations). - - Symbol param # default allowed param values - M_TRIM_THRESHOLD -1 2*1024*1024 any (MAX_SIZE_T disables) - M_GRANULARITY -2 page size any power of 2 >= page size - M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support) -*/ -int dlmallopt(int, int); - -/* - malloc_footprint(); - Returns the number of bytes obtained from the system. The total - number of bytes allocated by malloc, realloc etc., is less than this - value. Unlike mallinfo, this function returns only a precomputed - result, so can be called frequently to monitor memory consumption. - Even if locks are otherwise defined, this function does not use them, - so results might not be up to date. -*/ -size_t dlmalloc_footprint(void); - -/* - malloc_max_footprint(); - Returns the maximum number of bytes obtained from the system. This - value will be greater than current footprint if deallocated space - has been reclaimed by the system. The peak number of bytes allocated - by malloc, realloc etc., is less than this value. Unlike mallinfo, - this function returns only a precomputed result, so can be called - frequently to monitor memory consumption. Even if locks are - otherwise defined, this function does not use them, so results might - not be up to date. -*/ -size_t dlmalloc_max_footprint(void); - -#if !NO_MALLINFO -/* - mallinfo() - Returns (by copy) a struct containing various summary statistics: - - arena: current total non-mmapped bytes allocated from system - ordblks: the number of free chunks - smblks: always zero. - hblks: current number of mmapped regions - hblkhd: total bytes held in mmapped regions - usmblks: the maximum total allocated space. This will be greater - than current total if trimming has occurred. - fsmblks: always zero - uordblks: current total allocated space (normal or mmapped) - fordblks: total free space - keepcost: the maximum number of bytes that could ideally be released - back to system via malloc_trim. ("ideally" means that - it ignores page restrictions etc.) - - Because these fields are ints, but internal bookkeeping may - be kept as longs, the reported values may wrap around zero and - thus be inaccurate. -*/ -struct mallinfo dlmallinfo(void); -#endif /* NO_MALLINFO */ - -/* - independent_calloc(size_t n_elements, size_t element_size, void* chunks[]); - - independent_calloc is similar to calloc, but instead of returning a - single cleared space, it returns an array of pointers to n_elements - independent elements that can hold contents of size elem_size, each - of which starts out cleared, and can be independently freed, - realloc'ed etc. The elements are guaranteed to be adjacently - allocated (this is not guaranteed to occur with multiple callocs or - mallocs), which may also improve cache locality in some - applications. - - The "chunks" argument is optional (i.e., may be null, which is - probably the most typical usage). If it is null, the returned array - is itself dynamically allocated and should also be freed when it is - no longer needed. Otherwise, the chunks array must be of at least - n_elements in length. It is filled in with the pointers to the - chunks. - - In either case, independent_calloc returns this pointer array, or - null if the allocation failed. If n_elements is zero and "chunks" - is null, it returns a chunk representing an array with zero elements - (which should be freed if not wanted). - - Each element must be individually freed when it is no longer - needed. If you'd like to instead be able to free all at once, you - should instead use regular calloc and assign pointers into this - space to represent elements. (In this case though, you cannot - independently free elements.) - - independent_calloc simplifies and speeds up implementations of many - kinds of pools. It may also be useful when constructing large data - structures that initially have a fixed number of fixed-sized nodes, - but the number is not known at compile time, and some of the nodes - may later need to be freed. For example: - - struct Node { int item; struct Node* next; }; - - struct Node* build_list() { - struct Node** pool; - int n = read_number_of_nodes_needed(); - if (n <= 0) return 0; - pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0); - if (pool == 0) die(); - // organize into a linked list... - struct Node* first = pool[0]; - for (i = 0; i < n-1; ++i) - pool[i]->next = pool[i+1]; - free(pool); // Can now free the array (or not, if it is needed later) - return first; - } -*/ -void** dlindependent_calloc(size_t, size_t, void**); - -/* - independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]); - - independent_comalloc allocates, all at once, a set of n_elements - chunks with sizes indicated in the "sizes" array. It returns - an array of pointers to these elements, each of which can be - independently freed, realloc'ed etc. The elements are guaranteed to - be adjacently allocated (this is not guaranteed to occur with - multiple callocs or mallocs), which may also improve cache locality - in some applications. - - The "chunks" argument is optional (i.e., may be null). If it is null - the returned array is itself dynamically allocated and should also - be freed when it is no longer needed. Otherwise, the chunks array - must be of at least n_elements in length. It is filled in with the - pointers to the chunks. - - In either case, independent_comalloc returns this pointer array, or - null if the allocation failed. If n_elements is zero and chunks is - null, it returns a chunk representing an array with zero elements - (which should be freed if not wanted). - - Each element must be individually freed when it is no longer - needed. If you'd like to instead be able to free all at once, you - should instead use a single regular malloc, and assign pointers at - particular offsets in the aggregate space. (In this case though, you - cannot independently free elements.) - - independent_comallac differs from independent_calloc in that each - element may have a different size, and also that it does not - automatically clear elements. - - independent_comalloc can be used to speed up allocation in cases - where several structs or objects must always be allocated at the - same time. For example: - - struct Head { ... } - struct Foot { ... } - - void send_message(char* msg) { - int msglen = strlen(msg); - size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) }; - void* chunks[3]; - if (independent_comalloc(3, sizes, chunks) == 0) - die(); - struct Head* head = (struct Head*)(chunks[0]); - char* body = (char*)(chunks[1]); - struct Foot* foot = (struct Foot*)(chunks[2]); - // ... - } - - In general though, independent_comalloc is worth using only for - larger values of n_elements. For small values, you probably won't - detect enough difference from series of malloc calls to bother. - - Overuse of independent_comalloc can increase overall memory usage, - since it cannot reuse existing noncontiguous small chunks that - might be available for some of the elements. -*/ -void** dlindependent_comalloc(size_t, size_t*, void**); - - -/* - pvalloc(size_t n); - Equivalent to valloc(minimum-page-that-holds(n)), that is, - round up n to nearest pagesize. - */ -void* dlpvalloc(size_t); - -/* - malloc_trim(size_t pad); - - If possible, gives memory back to the system (via negative arguments - to sbrk) if there is unused memory at the `high' end of the malloc - pool or in unused MMAP segments. You can call this after freeing - large blocks of memory to potentially reduce the system-level memory - requirements of a program. However, it cannot guarantee to reduce - memory. Under some allocation patterns, some large free blocks of - memory will be locked between two used chunks, so they cannot be - given back to the system. - - The `pad' argument to malloc_trim represents the amount of free - trailing space to leave untrimmed. If this argument is zero, only - the minimum amount of memory to maintain internal data structures - will be left. Non-zero arguments can be supplied to maintain enough - trailing space to service future expected allocations without having - to re-obtain memory from the system. - - Malloc_trim returns 1 if it actually released any memory, else 0. -*/ -int dlmalloc_trim(size_t); - -/* - malloc_usable_size(void* p); - - Returns the number of bytes you can actually use in - an allocated chunk, which may be more than you requested (although - often not) due to alignment and minimum size constraints. - You can use this many bytes without worrying about - overwriting other allocated objects. This is not a particularly great - programming practice. malloc_usable_size can be more useful in - debugging and assertions, for example: - - p = malloc(n); - assert(malloc_usable_size(p) >= 256); -*/ -size_t dlmalloc_usable_size(void*); - -/* - malloc_stats(); - Prints on stderr the amount of space obtained from the system (both - via sbrk and mmap), the maximum amount (which may be more than - current if malloc_trim and/or munmap got called), and the current - number of bytes allocated via malloc (or realloc, etc) but not yet - freed. Note that this is the number of bytes allocated, not the - number requested. It will be larger than the number requested - because of alignment and bookkeeping overhead. Because it includes - alignment wastage as being in use, this figure may be greater than - zero even when no user-level chunks are allocated. - - The reported current and maximum system memory can be inaccurate if - a program makes other calls to system memory allocation functions - (normally sbrk) outside of malloc. - - malloc_stats prints only the most commonly interesting statistics. - More information can be obtained by calling mallinfo. -*/ -void dlmalloc_stats(void); - -#endif /* ONLY_MSPACES */ - -#if MSPACES - -/* - mspace is an opaque type representing an independent - region of space that supports mspace_malloc, etc. -*/ -typedef void* mspace; - -/* - create_mspace creates and returns a new independent space with the - given initial capacity, or, if 0, the default granularity size. It - returns null if there is no system memory available to create the - space. If argument locked is non-zero, the space uses a separate - lock to control access. The capacity of the space will grow - dynamically as needed to service mspace_malloc requests. You can - control the sizes of incremental increases of this space by - compiling with a different DEFAULT_GRANULARITY or dynamically - setting with mallopt(M_GRANULARITY, value). -*/ -mspace create_mspace(size_t capacity, int locked); - -/* - destroy_mspace destroys the given space, and attempts to return all - of its memory back to the system, returning the total number of - bytes freed. After destruction, the results of access to all memory - used by the space become undefined. -*/ -size_t destroy_mspace(mspace msp); - -/* - create_mspace_with_base uses the memory supplied as the initial base - of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this - space is used for bookkeeping, so the capacity must be at least this - large. (Otherwise 0 is returned.) When this initial space is - exhausted, additional memory will be obtained from the system. - Destroying this space will deallocate all additionally allocated - space (if possible) but not the initial base. -*/ -mspace create_mspace_with_base(void* base, size_t capacity, int locked); - -/* - mspace_malloc behaves as malloc, but operates within - the given space. -*/ -void* mspace_malloc(mspace msp, size_t bytes); - -/* - mspace_free behaves as free, but operates within - the given space. - - If compiled with FOOTERS==1, mspace_free is not actually needed. - free may be called instead of mspace_free because freed chunks from - any space are handled by their originating spaces. -*/ -void mspace_free(mspace msp, void* mem); - -/* - mspace_realloc behaves as realloc, but operates within - the given space. - - If compiled with FOOTERS==1, mspace_realloc is not actually - needed. realloc may be called instead of mspace_realloc because - realloced chunks from any space are handled by their originating - spaces. -*/ -void* mspace_realloc(mspace msp, void* mem, size_t newsize); - -/* - mspace_calloc behaves as calloc, but operates within - the given space. -*/ -void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); - -/* - mspace_memalign behaves as memalign, but operates within - the given space. -*/ -void* mspace_memalign(mspace msp, size_t alignment, size_t bytes); - -/* - mspace_independent_calloc behaves as independent_calloc, but - operates within the given space. -*/ -void** mspace_independent_calloc(mspace msp, size_t n_elements, - size_t elem_size, void* chunks[]); - -/* - mspace_independent_comalloc behaves as independent_comalloc, but - operates within the given space. -*/ -void** mspace_independent_comalloc(mspace msp, size_t n_elements, - size_t sizes[], void* chunks[]); - -/* - mspace_footprint() returns the number of bytes obtained from the - system for this space. -*/ -size_t mspace_footprint(mspace msp); - -/* - mspace_max_footprint() returns the peak number of bytes obtained from the - system for this space. -*/ -size_t mspace_max_footprint(mspace msp); - - -#if !NO_MALLINFO -/* - mspace_mallinfo behaves as mallinfo, but reports properties of - the given space. -*/ -struct mallinfo mspace_mallinfo(mspace msp); -#endif /* NO_MALLINFO */ - -/* - mspace_malloc_stats behaves as malloc_stats, but reports - properties of the given space. -*/ -void mspace_malloc_stats(mspace msp); - -/* - mspace_trim behaves as malloc_trim, but - operates within the given space. -*/ -int mspace_trim(mspace msp, size_t pad); - -/* - An alias for mallopt. -*/ -int mspace_mallopt(int, int); - -#endif /* MSPACES */ - -#ifdef __cplusplus -}; /* end of extern "C" */ -#endif /* __cplusplus */ - -/* - ======================================================================== - To make a fully customizable malloc.h header file, cut everything - above this line, put into file malloc.h, edit to suit, and #include it - on the next line, as well as in programs that use this malloc. - ======================================================================== -*/ - -/* #include "malloc.h" */ - -/*------------------------------ internal #includes ---------------------- */ - -#ifdef _MSC_VER -#pragma warning( disable : 4146 ) /* no "unsigned" warnings */ -#endif /* _MSC_VER */ - -#include /* for printing in malloc_stats */ - -#ifndef LACKS_ERRNO_H -#include /* for MALLOC_FAILURE_ACTION */ -#endif /* LACKS_ERRNO_H */ -#if FOOTERS -#include /* for magic initialization */ -#endif /* FOOTERS */ -#ifndef LACKS_STDLIB_H -#include /* for abort() */ -#endif /* LACKS_STDLIB_H */ -#ifdef DEBUG -#if ABORT_ON_ASSERT_FAILURE -#define assert(x) if(!(x)) ABORT -#else /* ABORT_ON_ASSERT_FAILURE */ -#include -#endif /* ABORT_ON_ASSERT_FAILURE */ -#else /* DEBUG */ -#define assert(x) -#endif /* DEBUG */ -#ifndef LACKS_STRING_H -#include /* for memset etc */ -#endif /* LACKS_STRING_H */ -#if USE_BUILTIN_FFS -#ifndef LACKS_STRINGS_H -#include /* for ffs */ -#endif /* LACKS_STRINGS_H */ -#endif /* USE_BUILTIN_FFS */ -#if HAVE_MMAP -#ifndef LACKS_SYS_MMAN_H -#include /* for mmap */ -#endif /* LACKS_SYS_MMAN_H */ -#ifndef LACKS_FCNTL_H -#include -#endif /* LACKS_FCNTL_H */ -#endif /* HAVE_MMAP */ -#if HAVE_MORECORE -#ifndef LACKS_UNISTD_H -#include /* for sbrk */ -#else /* LACKS_UNISTD_H */ -#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) -extern void* sbrk(ptrdiff_t); -#endif /* FreeBSD etc */ -#endif /* LACKS_UNISTD_H */ -#endif /* HAVE_MMAP */ - -#ifndef WIN32 -#ifndef malloc_getpagesize -# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */ -# ifndef _SC_PAGE_SIZE -# define _SC_PAGE_SIZE _SC_PAGESIZE -# endif -# endif -# ifdef _SC_PAGE_SIZE -# define malloc_getpagesize sysconf(_SC_PAGE_SIZE) -# else -# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE) - extern size_t getpagesize(); -# define malloc_getpagesize getpagesize() -# else -# ifdef WIN32 /* use supplied emulation of getpagesize */ -# define malloc_getpagesize getpagesize() -# else -# ifndef LACKS_SYS_PARAM_H -# include -# endif -# ifdef EXEC_PAGESIZE -# define malloc_getpagesize EXEC_PAGESIZE -# else -# ifdef NBPG -# ifndef CLSIZE -# define malloc_getpagesize NBPG -# else -# define malloc_getpagesize (NBPG * CLSIZE) -# endif -# else -# ifdef NBPC -# define malloc_getpagesize NBPC -# else -# ifdef PAGESIZE -# define malloc_getpagesize PAGESIZE -# else /* just guess */ -# define malloc_getpagesize ((size_t)4096U) -# endif -# endif -# endif -# endif -# endif -# endif -# endif -#endif -#endif - -/* ------------------- size_t and alignment properties -------------------- */ - -/* The byte and bit size of a size_t */ -#define SIZE_T_SIZE (sizeof(size_t)) -#define SIZE_T_BITSIZE (sizeof(size_t) << 3) - -/* Some constants coerced to size_t */ -/* Annoying but necessary to avoid errors on some platforms */ -#define SIZE_T_ZERO ((size_t)0) -#define SIZE_T_ONE ((size_t)1) -#define SIZE_T_TWO ((size_t)2) -#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1) -#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2) -#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) -#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U) - -/* The bit mask value corresponding to MALLOC_ALIGNMENT */ -#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) - -/* True if address a has acceptable alignment */ -#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0) - -/* the number of bytes to offset an address to align it */ -#define align_offset(A)\ - ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ - ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) - -/* -------------------------- MMAP preliminaries ------------------------- */ - -/* - If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and - checks to fail so compiler optimizer can delete code rather than - using so many "#if"s. -*/ - - -/* MORECORE and MMAP must return MFAIL on failure */ -#define MFAIL ((void*)(MAX_SIZE_T)) -#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */ - -#if !HAVE_MMAP -#define IS_MMAPPED_BIT (SIZE_T_ZERO) -#define USE_MMAP_BIT (SIZE_T_ZERO) -#define CALL_MMAP(s) MFAIL -#define CALL_MUNMAP(a, s) (-1) -#define DIRECT_MMAP(s) MFAIL - -#else /* HAVE_MMAP */ -#define IS_MMAPPED_BIT (SIZE_T_ONE) -#define USE_MMAP_BIT (SIZE_T_ONE) - -#if !defined(WIN32) && !defined (__OS2__) -#define CALL_MUNMAP(a, s) munmap((a), (s)) -#define MMAP_PROT (PROT_READ|PROT_WRITE) -#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) -#define MAP_ANONYMOUS MAP_ANON -#endif /* MAP_ANON */ -#ifdef MAP_ANONYMOUS -#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) -#define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) -#else /* MAP_ANONYMOUS */ -/* - Nearly all versions of mmap support MAP_ANONYMOUS, so the following - is unlikely to be needed, but is supplied just in case. -*/ -#define MMAP_FLAGS (MAP_PRIVATE) -static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */ -#define CALL_MMAP(s) ((dev_zero_fd < 0) ? \ - (dev_zero_fd = open("/dev/zero", O_RDWR), \ - mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \ - mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) -#endif /* MAP_ANONYMOUS */ - -#define DIRECT_MMAP(s) CALL_MMAP(s) - -#elif defined(__OS2__) - -/* OS/2 MMAP via DosAllocMem */ -static void* os2mmap(size_t size) { - void* ptr; - if (DosAllocMem(&ptr, size, OBJ_ANY|PAG_COMMIT|PAG_READ|PAG_WRITE) && - DosAllocMem(&ptr, size, PAG_COMMIT|PAG_READ|PAG_WRITE)) - return MFAIL; - return ptr; -} - -#define os2direct_mmap(n) os2mmap(n) - -/* This function supports releasing coalesed segments */ -static int os2munmap(void* ptr, size_t size) { - while (size) { - ULONG ulSize = size; - ULONG ulFlags = 0; - if (DosQueryMem(ptr, &ulSize, &ulFlags) != 0) - return -1; - if ((ulFlags & PAG_BASE) == 0 ||(ulFlags & PAG_COMMIT) == 0 || - ulSize > size) - return -1; - if (DosFreeMem(ptr) != 0) - return -1; - ptr = ( void * ) ( ( char * ) ptr + ulSize ); - size -= ulSize; - } - return 0; -} - -#define CALL_MMAP(s) os2mmap(s) -#define CALL_MUNMAP(a, s) os2munmap((a), (s)) -#define DIRECT_MMAP(s) os2direct_mmap(s) - -#else /* WIN32 */ - -/* Win32 MMAP via VirtualAlloc */ -static void* win32mmap(size_t size) { - void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); - return (ptr != 0)? ptr: MFAIL; -} - -/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ -static void* win32direct_mmap(size_t size) { - void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, - PAGE_EXECUTE_READWRITE); - return (ptr != 0)? ptr: MFAIL; -} - -/* This function supports releasing coalesed segments */ -static int win32munmap(void* ptr, size_t size) { - MEMORY_BASIC_INFORMATION minfo; - char* cptr = ptr; - while (size) { - if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0) - return -1; - if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr || - minfo.State != MEM_COMMIT || minfo.RegionSize > size) - return -1; - if (VirtualFree(cptr, 0, MEM_RELEASE) == 0) - return -1; - cptr += minfo.RegionSize; - size -= minfo.RegionSize; - } - return 0; -} - -#define CALL_MMAP(s) win32mmap(s) -#define CALL_MUNMAP(a, s) win32munmap((a), (s)) -#define DIRECT_MMAP(s) win32direct_mmap(s) -#endif /* WIN32 */ -#endif /* HAVE_MMAP */ - -#if HAVE_MMAP && HAVE_MREMAP -#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) -#else /* HAVE_MMAP && HAVE_MREMAP */ -#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL -#endif /* HAVE_MMAP && HAVE_MREMAP */ - -#if HAVE_MORECORE -#define CALL_MORECORE(S) MORECORE(S) -#else /* HAVE_MORECORE */ -#define CALL_MORECORE(S) MFAIL -#endif /* HAVE_MORECORE */ - -/* mstate bit set if contiguous morecore disabled or failed */ -#define USE_NONCONTIGUOUS_BIT (4U) - -/* segment bit set in create_mspace_with_base */ -#define EXTERN_BIT (8U) - - -/* --------------------------- Lock preliminaries ------------------------ */ - -#if USE_LOCKS - -/* - When locks are defined, there are up to two global locks: - - * If HAVE_MORECORE, morecore_mutex protects sequences of calls to - MORECORE. In many cases sys_alloc requires two calls, that should - not be interleaved with calls by other threads. This does not - protect against direct calls to MORECORE by other threads not - using this lock, so there is still code to cope the best we can on - interference. - - * magic_init_mutex ensures that mparams.magic and other - unique mparams values are initialized only once. -*/ - -#if !defined(WIN32) && !defined(__OS2__) -/* By default use posix locks */ -#include -#define MLOCK_T pthread_mutex_t -#define INITIAL_LOCK(l) pthread_mutex_init(l, NULL) -#define ACQUIRE_LOCK(l) pthread_mutex_lock(l) -#define RELEASE_LOCK(l) pthread_mutex_unlock(l) - -#if HAVE_MORECORE -static MLOCK_T morecore_mutex = PTHREAD_MUTEX_INITIALIZER; -#endif /* HAVE_MORECORE */ - -static MLOCK_T magic_init_mutex = PTHREAD_MUTEX_INITIALIZER; - -#elif defined(__OS2__) -#define MLOCK_T HMTX -#define INITIAL_LOCK(l) DosCreateMutexSem(0, l, 0, FALSE) -#define ACQUIRE_LOCK(l) DosRequestMutexSem(*l, SEM_INDEFINITE_WAIT) -#define RELEASE_LOCK(l) DosReleaseMutexSem(*l) -#if HAVE_MORECORE -static MLOCK_T morecore_mutex; -#endif /* HAVE_MORECORE */ -static MLOCK_T magic_init_mutex; - -#else /* WIN32 */ -/* - Because lock-protected regions have bounded times, and there - are no recursive lock calls, we can use simple spinlocks. -*/ - -#define MLOCK_T long -static int win32_acquire_lock (MLOCK_T *sl) { - for (;;) { -#ifdef InterlockedCompareExchangePointer - if (!InterlockedCompareExchange(sl, 1, 0)) - return 0; -#else /* Use older void* version */ - if (!InterlockedCompareExchange((void**)sl, (void*)1, (void*)0)) - return 0; -#endif /* InterlockedCompareExchangePointer */ - Sleep (0); - } -} - -static void win32_release_lock (MLOCK_T *sl) { - InterlockedExchange (sl, 0); -} - -#define INITIAL_LOCK(l) *(l)=0 -#define ACQUIRE_LOCK(l) win32_acquire_lock(l) -#define RELEASE_LOCK(l) win32_release_lock(l) -#if HAVE_MORECORE -static MLOCK_T morecore_mutex; -#endif /* HAVE_MORECORE */ -static MLOCK_T magic_init_mutex; -#endif /* WIN32 */ - -#define USE_LOCK_BIT (2U) -#else /* USE_LOCKS */ -#define USE_LOCK_BIT (0U) -#define INITIAL_LOCK(l) -#endif /* USE_LOCKS */ - -#if USE_LOCKS && HAVE_MORECORE -#define ACQUIRE_MORECORE_LOCK() ACQUIRE_LOCK(&morecore_mutex); -#define RELEASE_MORECORE_LOCK() RELEASE_LOCK(&morecore_mutex); -#else /* USE_LOCKS && HAVE_MORECORE */ -#define ACQUIRE_MORECORE_LOCK() -#define RELEASE_MORECORE_LOCK() -#endif /* USE_LOCKS && HAVE_MORECORE */ - -#if USE_LOCKS -#define ACQUIRE_MAGIC_INIT_LOCK() ACQUIRE_LOCK(&magic_init_mutex); -#define RELEASE_MAGIC_INIT_LOCK() RELEASE_LOCK(&magic_init_mutex); -#else /* USE_LOCKS */ -#define ACQUIRE_MAGIC_INIT_LOCK() -#define RELEASE_MAGIC_INIT_LOCK() -#endif /* USE_LOCKS */ - - -/* ----------------------- Chunk representations ------------------------ */ - -/* - (The following includes lightly edited explanations by Colin Plumb.) - - The malloc_chunk declaration below is misleading (but accurate and - necessary). It declares a "view" into memory allowing access to - necessary fields at known offsets from a given base. - - Chunks of memory are maintained using a `boundary tag' method as - originally described by Knuth. (See the paper by Paul Wilson - ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such - techniques.) Sizes of free chunks are stored both in the front of - each chunk and at the end. This makes consolidating fragmented - chunks into bigger chunks fast. The head fields also hold bits - representing whether chunks are free or in use. - - Here are some pictures to make it clearer. They are "exploded" to - show that the state of a chunk can be thought of as extending from - the high 31 bits of the head field of its header through the - prev_foot and PINUSE_BIT bit of the following chunk header. - - A chunk that's in use looks like: - - chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Size of previous chunk (if P = 1) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| - | Size of this chunk 1| +-+ - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | | - +- -+ - | | - +- -+ - | : - +- size - sizeof(size_t) available payload bytes -+ - : | - chunk-> +- -+ - | | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1| - | Size of next chunk (may or may not be in use) | +-+ - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - And if it's free, it looks like this: - - chunk-> +- -+ - | User payload (must be in use, or we would have merged!) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| - | Size of this chunk 0| +-+ - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Next pointer | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Prev pointer | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | : - +- size - sizeof(struct chunk) unused bytes -+ - : | - chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Size of this chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0| - | Size of next chunk (must be in use, or we would have merged)| +-+ - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | : - +- User payload -+ - : | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - |0| - +-+ - Note that since we always merge adjacent free chunks, the chunks - adjacent to a free chunk must be in use. - - Given a pointer to a chunk (which can be derived trivially from the - payload pointer) we can, in O(1) time, find out whether the adjacent - chunks are free, and if so, unlink them from the lists that they - are on and merge them with the current chunk. - - Chunks always begin on even word boundaries, so the mem portion - (which is returned to the user) is also on an even word boundary, and - thus at least double-word aligned. - - The P (PINUSE_BIT) bit, stored in the unused low-order bit of the - chunk size (which is always a multiple of two words), is an in-use - bit for the *previous* chunk. If that bit is *clear*, then the - word before the current chunk size contains the previous chunk - size, and can be used to find the front of the previous chunk. - The very first chunk allocated always has this bit set, preventing - access to non-existent (or non-owned) memory. If pinuse is set for - any given chunk, then you CANNOT determine the size of the - previous chunk, and might even get a memory addressing fault when - trying to do so. - - The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of - the chunk size redundantly records whether the current chunk is - inuse. This redundancy enables usage checks within free and realloc, - and reduces indirection when freeing and consolidating chunks. - - Each freshly allocated chunk must have both cinuse and pinuse set. - That is, each allocated chunk borders either a previously allocated - and still in-use chunk, or the base of its memory arena. This is - ensured by making all allocations from the the `lowest' part of any - found chunk. Further, no free chunk physically borders another one, - so each free chunk is known to be preceded and followed by either - inuse chunks or the ends of memory. - - Note that the `foot' of the current chunk is actually represented - as the prev_foot of the NEXT chunk. This makes it easier to - deal with alignments etc but can be very confusing when trying - to extend or adapt this code. - - The exceptions to all this are - - 1. The special chunk `top' is the top-most available chunk (i.e., - the one bordering the end of available memory). It is treated - specially. Top is never included in any bin, is used only if - no other chunk is available, and is released back to the - system if it is very large (see M_TRIM_THRESHOLD). In effect, - the top chunk is treated as larger (and thus less well - fitting) than any other available chunk. The top chunk - doesn't update its trailing size field since there is no next - contiguous chunk that would have to index off it. However, - space is still allocated for it (TOP_FOOT_SIZE) to enable - separation or merging when space is extended. - - 3. Chunks allocated via mmap, which have the lowest-order bit - (IS_MMAPPED_BIT) set in their prev_foot fields, and do not set - PINUSE_BIT in their head fields. Because they are allocated - one-by-one, each must carry its own prev_foot field, which is - also used to hold the offset this chunk has within its mmapped - region, which is needed to preserve alignment. Each mmapped - chunk is trailed by the first two fields of a fake next-chunk - for sake of usage checks. - -*/ - -struct malloc_chunk { - size_t prev_foot; /* Size of previous chunk (if free). */ - size_t head; /* Size and inuse bits. */ - struct malloc_chunk* fd; /* double links -- used only if free. */ - struct malloc_chunk* bk; -}; - -typedef struct malloc_chunk mchunk; -typedef struct malloc_chunk* mchunkptr; -typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */ -typedef size_t bindex_t; /* Described below */ -typedef unsigned int binmap_t; /* Described below */ -typedef unsigned int flag_t; /* The type of various bit flag sets */ - -/* ------------------- Chunks sizes and alignments ----------------------- */ - -#define MCHUNK_SIZE (sizeof(mchunk)) - -#if FOOTERS -#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -#else /* FOOTERS */ -#define CHUNK_OVERHEAD (SIZE_T_SIZE) -#endif /* FOOTERS */ - -/* MMapped chunks need a second word of overhead ... */ -#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -/* ... and additional padding for fake next-chunk at foot */ -#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES) - -/* The smallest size we can malloc is an aligned minimal chunk */ -#define MIN_CHUNK_SIZE\ - ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) - -/* conversion from malloc headers to user pointers, and back */ -#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES)) -#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES)) -/* chunk associated with aligned address A */ -#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A))) - -/* Bounds on request (not chunk) sizes. */ -#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2) -#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE) - -/* pad request bytes into a usable size */ -#define pad_request(req) \ - (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) - -/* pad request, checking for minimum (but not maximum) */ -#define request2size(req) \ - (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req)) - - -/* ------------------ Operations on head and foot fields ----------------- */ - -/* - The head field of a chunk is or'ed with PINUSE_BIT when previous - adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in - use. If the chunk was obtained with mmap, the prev_foot field has - IS_MMAPPED_BIT set, otherwise holding the offset of the base of the - mmapped region to the base of the chunk. -*/ - -#define PINUSE_BIT (SIZE_T_ONE) -#define CINUSE_BIT (SIZE_T_TWO) -#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT) - -/* Head value for fenceposts */ -#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE) - -/* extraction of fields from head words */ -#define cinuse(p) ((p)->head & CINUSE_BIT) -#define pinuse(p) ((p)->head & PINUSE_BIT) -#define chunksize(p) ((p)->head & ~(INUSE_BITS)) - -#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT) -#define clear_cinuse(p) ((p)->head &= ~CINUSE_BIT) - -/* Treat space at ptr +/- offset as a chunk */ -#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s))) -#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s))) - -/* Ptr to next or previous physical malloc_chunk. */ -#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~INUSE_BITS))) -#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) )) - -/* extract next chunk's pinuse bit */ -#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT) - -/* Get/set size at footer */ -#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot) -#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s)) - -/* Set size, pinuse bit, and foot */ -#define set_size_and_pinuse_of_free_chunk(p, s)\ - ((p)->head = (s|PINUSE_BIT), set_foot(p, s)) - -/* Set size, pinuse bit, foot, and clear next pinuse */ -#define set_free_with_pinuse(p, s, n)\ - (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s)) - -#define is_mmapped(p)\ - (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_MMAPPED_BIT)) - -/* Get the internal overhead associated with chunk p */ -#define overhead_for(p)\ - (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD) - -/* Return true if malloced space is not necessarily cleared */ -#if MMAP_CLEARS -#define calloc_must_clear(p) (!is_mmapped(p)) -#else /* MMAP_CLEARS */ -#define calloc_must_clear(p) (1) -#endif /* MMAP_CLEARS */ - -/* ---------------------- Overlaid data structures ----------------------- */ - -/* - When chunks are not in use, they are treated as nodes of either - lists or trees. - - "Small" chunks are stored in circular doubly-linked lists, and look - like this: - - chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Size of previous chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - `head:' | Size of chunk, in bytes |P| - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Forward pointer to next chunk in list | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Back pointer to previous chunk in list | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Unused space (may be 0 bytes long) . - . . - . | -nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - `foot:' | Size of chunk, in bytes | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Larger chunks are kept in a form of bitwise digital trees (aka - tries) keyed on chunksizes. Because malloc_tree_chunks are only for - free chunks greater than 256 bytes, their size doesn't impose any - constraints on user chunk sizes. Each node looks like: - - chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Size of previous chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - `head:' | Size of chunk, in bytes |P| - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Forward pointer to next chunk of same size | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Back pointer to previous chunk of same size | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Pointer to left child (child[0]) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Pointer to right child (child[1]) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Pointer to parent | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | bin index of this chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Unused space . - . | -nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - `foot:' | Size of chunk, in bytes | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Each tree holding treenodes is a tree of unique chunk sizes. Chunks - of the same size are arranged in a circularly-linked list, with only - the oldest chunk (the next to be used, in our FIFO ordering) - actually in the tree. (Tree members are distinguished by a non-null - parent pointer.) If a chunk with the same size an an existing node - is inserted, it is linked off the existing node using pointers that - work in the same way as fd/bk pointers of small chunks. - - Each tree contains a power of 2 sized range of chunk sizes (the - smallest is 0x100 <= x < 0x180), which is is divided in half at each - tree level, with the chunks in the smaller half of the range (0x100 - <= x < 0x140 for the top nose) in the left subtree and the larger - half (0x140 <= x < 0x180) in the right subtree. This is, of course, - done by inspecting individual bits. - - Using these rules, each node's left subtree contains all smaller - sizes than its right subtree. However, the node at the root of each - subtree has no particular ordering relationship to either. (The - dividing line between the subtree sizes is based on trie relation.) - If we remove the last chunk of a given size from the interior of the - tree, we need to replace it with a leaf node. The tree ordering - rules permit a node to be replaced by any leaf below it. - - The smallest chunk in a tree (a common operation in a best-fit - allocator) can be found by walking a path to the leftmost leaf in - the tree. Unlike a usual binary tree, where we follow left child - pointers until we reach a null, here we follow the right child - pointer any time the left one is null, until we reach a leaf with - both child pointers null. The smallest chunk in the tree will be - somewhere along that path. - - The worst case number of steps to add, find, or remove a node is - bounded by the number of bits differentiating chunks within - bins. Under current bin calculations, this ranges from 6 up to 21 - (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case - is of course much better. -*/ - -struct malloc_tree_chunk { - /* The first four fields must be compatible with malloc_chunk */ - size_t prev_foot; - size_t head; - struct malloc_tree_chunk* fd; - struct malloc_tree_chunk* bk; - - struct malloc_tree_chunk* child[2]; - struct malloc_tree_chunk* parent; - bindex_t index; -}; - -typedef struct malloc_tree_chunk tchunk; -typedef struct malloc_tree_chunk* tchunkptr; -typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */ - -/* A little helper macro for trees */ -#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) - -/* ----------------------------- Segments -------------------------------- */ - -/* - Each malloc space may include non-contiguous segments, held in a - list headed by an embedded malloc_segment record representing the - top-most space. Segments also include flags holding properties of - the space. Large chunks that are directly allocated by mmap are not - included in this list. They are instead independently created and - destroyed without otherwise keeping track of them. - - Segment management mainly comes into play for spaces allocated by - MMAP. Any call to MMAP might or might not return memory that is - adjacent to an existing segment. MORECORE normally contiguously - extends the current space, so this space is almost always adjacent, - which is simpler and faster to deal with. (This is why MORECORE is - used preferentially to MMAP when both are available -- see - sys_alloc.) When allocating using MMAP, we don't use any of the - hinting mechanisms (inconsistently) supported in various - implementations of unix mmap, or distinguish reserving from - committing memory. Instead, we just ask for space, and exploit - contiguity when we get it. It is probably possible to do - better than this on some systems, but no general scheme seems - to be significantly better. - - Management entails a simpler variant of the consolidation scheme - used for chunks to reduce fragmentation -- new adjacent memory is - normally prepended or appended to an existing segment. However, - there are limitations compared to chunk consolidation that mostly - reflect the fact that segment processing is relatively infrequent - (occurring only when getting memory from system) and that we - don't expect to have huge numbers of segments: - - * Segments are not indexed, so traversal requires linear scans. (It - would be possible to index these, but is not worth the extra - overhead and complexity for most programs on most platforms.) - * New segments are only appended to old ones when holding top-most - memory; if they cannot be prepended to others, they are held in - different segments. - - Except for the top-most segment of an mstate, each segment record - is kept at the tail of its segment. Segments are added by pushing - segment records onto the list headed by &mstate.seg for the - containing mstate. - - Segment flags control allocation/merge/deallocation policies: - * If EXTERN_BIT set, then we did not allocate this segment, - and so should not try to deallocate or merge with others. - (This currently holds only for the initial segment passed - into create_mspace_with_base.) - * If IS_MMAPPED_BIT set, the segment may be merged with - other surrounding mmapped segments and trimmed/de-allocated - using munmap. - * If neither bit is set, then the segment was obtained using - MORECORE so can be merged with surrounding MORECORE'd segments - and deallocated/trimmed using MORECORE with negative arguments. -*/ - -struct malloc_segment { - char* base; /* base address */ - size_t size; /* allocated size */ - struct malloc_segment* next; /* ptr to next segment */ -#if FFI_MMAP_EXEC_WRIT - /* The mmap magic is supposed to store the address of the executable - segment at the very end of the requested block. */ - -# define mmap_exec_offset(b,s) (*(ptrdiff_t*)((b)+(s)-sizeof(ptrdiff_t))) - - /* We can only merge segments if their corresponding executable - segments are at identical offsets. */ -# define check_segment_merge(S,b,s) \ - (mmap_exec_offset((b),(s)) == (S)->exec_offset) - -# define add_segment_exec_offset(p,S) ((char*)(p) + (S)->exec_offset) -# define sub_segment_exec_offset(p,S) ((char*)(p) - (S)->exec_offset) - - /* The removal of sflags only works with HAVE_MORECORE == 0. */ - -# define get_segment_flags(S) (IS_MMAPPED_BIT) -# define set_segment_flags(S,v) \ - (((v) != IS_MMAPPED_BIT) ? (ABORT, (v)) : \ - (((S)->exec_offset = \ - mmap_exec_offset((S)->base, (S)->size)), \ - (mmap_exec_offset((S)->base + (S)->exec_offset, (S)->size) != \ - (S)->exec_offset) ? (ABORT, (v)) : \ - (mmap_exec_offset((S)->base, (S)->size) = 0), (v))) - - /* We use an offset here, instead of a pointer, because then, when - base changes, we don't have to modify this. On architectures - with segmented addresses, this might not work. */ - ptrdiff_t exec_offset; -#else - -# define get_segment_flags(S) ((S)->sflags) -# define set_segment_flags(S,v) ((S)->sflags = (v)) -# define check_segment_merge(S,b,s) (1) - - flag_t sflags; /* mmap and extern flag */ -#endif -}; - -#define is_mmapped_segment(S) (get_segment_flags(S) & IS_MMAPPED_BIT) -#define is_extern_segment(S) (get_segment_flags(S) & EXTERN_BIT) - -typedef struct malloc_segment msegment; -typedef struct malloc_segment* msegmentptr; - -/* ---------------------------- malloc_state ----------------------------- */ - -/* - A malloc_state holds all of the bookkeeping for a space. - The main fields are: - - Top - The topmost chunk of the currently active segment. Its size is - cached in topsize. The actual size of topmost space is - topsize+TOP_FOOT_SIZE, which includes space reserved for adding - fenceposts and segment records if necessary when getting more - space from the system. The size at which to autotrim top is - cached from mparams in trim_check, except that it is disabled if - an autotrim fails. - - Designated victim (dv) - This is the preferred chunk for servicing small requests that - don't have exact fits. It is normally the chunk split off most - recently to service another small request. Its size is cached in - dvsize. The link fields of this chunk are not maintained since it - is not kept in a bin. - - SmallBins - An array of bin headers for free chunks. These bins hold chunks - with sizes less than MIN_LARGE_SIZE bytes. Each bin contains - chunks of all the same size, spaced 8 bytes apart. To simplify - use in double-linked lists, each bin header acts as a malloc_chunk - pointing to the real first node, if it exists (else pointing to - itself). This avoids special-casing for headers. But to avoid - waste, we allocate only the fd/bk pointers of bins, and then use - repositioning tricks to treat these as the fields of a chunk. - - TreeBins - Treebins are pointers to the roots of trees holding a range of - sizes. There are 2 equally spaced treebins for each power of two - from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything - larger. - - Bin maps - There is one bit map for small bins ("smallmap") and one for - treebins ("treemap). Each bin sets its bit when non-empty, and - clears the bit when empty. Bit operations are then used to avoid - bin-by-bin searching -- nearly all "search" is done without ever - looking at bins that won't be selected. The bit maps - conservatively use 32 bits per map word, even if on 64bit system. - For a good description of some of the bit-based techniques used - here, see Henry S. Warren Jr's book "Hacker's Delight" (and - supplement at http://hackersdelight.org/). Many of these are - intended to reduce the branchiness of paths through malloc etc, as - well as to reduce the number of memory locations read or written. - - Segments - A list of segments headed by an embedded malloc_segment record - representing the initial space. - - Address check support - The least_addr field is the least address ever obtained from - MORECORE or MMAP. Attempted frees and reallocs of any address less - than this are trapped (unless INSECURE is defined). - - Magic tag - A cross-check field that should always hold same value as mparams.magic. - - Flags - Bits recording whether to use MMAP, locks, or contiguous MORECORE - - Statistics - Each space keeps track of current and maximum system memory - obtained via MORECORE or MMAP. - - Locking - If USE_LOCKS is defined, the "mutex" lock is acquired and released - around every public call using this mspace. -*/ - -/* Bin types, widths and sizes */ -#define NSMALLBINS (32U) -#define NTREEBINS (32U) -#define SMALLBIN_SHIFT (3U) -#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT) -#define TREEBIN_SHIFT (8U) -#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT) -#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE) -#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD) - -struct malloc_state { - binmap_t smallmap; - binmap_t treemap; - size_t dvsize; - size_t topsize; - char* least_addr; - mchunkptr dv; - mchunkptr top; - size_t trim_check; - size_t magic; - mchunkptr smallbins[(NSMALLBINS+1)*2]; - tbinptr treebins[NTREEBINS]; - size_t footprint; - size_t max_footprint; - flag_t mflags; -#if USE_LOCKS - MLOCK_T mutex; /* locate lock among fields that rarely change */ -#endif /* USE_LOCKS */ - msegment seg; -}; - -typedef struct malloc_state* mstate; - -/* ------------- Global malloc_state and malloc_params ------------------- */ - -/* - malloc_params holds global properties, including those that can be - dynamically set using mallopt. There is a single instance, mparams, - initialized in init_mparams. -*/ - -struct malloc_params { - size_t magic; - size_t page_size; - size_t granularity; - size_t mmap_threshold; - size_t trim_threshold; - flag_t default_mflags; -}; - -static struct malloc_params mparams; - -/* The global malloc_state used for all non-"mspace" calls */ -static struct malloc_state _gm_; -#define gm (&_gm_) -#define is_global(M) ((M) == &_gm_) -#define is_initialized(M) ((M)->top != 0) - -/* -------------------------- system alloc setup ------------------------- */ - -/* Operations on mflags */ - -#define use_lock(M) ((M)->mflags & USE_LOCK_BIT) -#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT) -#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT) - -#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT) -#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT) -#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT) - -#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT) -#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT) - -#define set_lock(M,L)\ - ((M)->mflags = (L)?\ - ((M)->mflags | USE_LOCK_BIT) :\ - ((M)->mflags & ~USE_LOCK_BIT)) - -/* page-align a size */ -#define page_align(S)\ - (((S) + (mparams.page_size)) & ~(mparams.page_size - SIZE_T_ONE)) - -/* granularity-align a size */ -#define granularity_align(S)\ - (((S) + (mparams.granularity)) & ~(mparams.granularity - SIZE_T_ONE)) - -#define is_page_aligned(S)\ - (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0) -#define is_granularity_aligned(S)\ - (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0) - -/* True if segment S holds address A */ -#define segment_holds(S, A)\ - ((char*)(A) >= S->base && (char*)(A) < S->base + S->size) - -/* Return segment holding given address */ -static msegmentptr segment_holding(mstate m, char* addr) { - msegmentptr sp = &m->seg; - for (;;) { - if (addr >= sp->base && addr < sp->base + sp->size) - return sp; - if ((sp = sp->next) == 0) - return 0; - } -} - -/* Return true if segment contains a segment link */ -static int has_segment_link(mstate m, msegmentptr ss) { - msegmentptr sp = &m->seg; - for (;;) { - if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size) - return 1; - if ((sp = sp->next) == 0) - return 0; - } -} - -#ifndef MORECORE_CANNOT_TRIM -#define should_trim(M,s) ((s) > (M)->trim_check) -#else /* MORECORE_CANNOT_TRIM */ -#define should_trim(M,s) (0) -#endif /* MORECORE_CANNOT_TRIM */ - -/* - TOP_FOOT_SIZE is padding at the end of a segment, including space - that may be needed to place segment records and fenceposts when new - noncontiguous segments are added. -*/ -#define TOP_FOOT_SIZE\ - (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) - - -/* ------------------------------- Hooks -------------------------------- */ - -/* - PREACTION should be defined to return 0 on success, and nonzero on - failure. If you are not using locking, you can redefine these to do - anything you like. -*/ - -#if USE_LOCKS - -/* Ensure locks are initialized */ -#define GLOBALLY_INITIALIZE() (mparams.page_size == 0 && init_mparams()) - -#define PREACTION(M) ((GLOBALLY_INITIALIZE() || use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0) -#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); } -#else /* USE_LOCKS */ - -#ifndef PREACTION -#define PREACTION(M) (0) -#endif /* PREACTION */ - -#ifndef POSTACTION -#define POSTACTION(M) -#endif /* POSTACTION */ - -#endif /* USE_LOCKS */ - -/* - CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses. - USAGE_ERROR_ACTION is triggered on detected bad frees and - reallocs. The argument p is an address that might have triggered the - fault. It is ignored by the two predefined actions, but might be - useful in custom actions that try to help diagnose errors. -*/ - -#if PROCEED_ON_ERROR - -/* A count of the number of corruption errors causing resets */ -int malloc_corruption_error_count; - -/* default corruption action */ -static void reset_on_error(mstate m); - -#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m) -#define USAGE_ERROR_ACTION(m, p) - -#else /* PROCEED_ON_ERROR */ - -#ifndef CORRUPTION_ERROR_ACTION -#define CORRUPTION_ERROR_ACTION(m) ABORT -#endif /* CORRUPTION_ERROR_ACTION */ - -#ifndef USAGE_ERROR_ACTION -#define USAGE_ERROR_ACTION(m,p) ABORT -#endif /* USAGE_ERROR_ACTION */ - -#endif /* PROCEED_ON_ERROR */ - -/* -------------------------- Debugging setup ---------------------------- */ - -#if ! DEBUG - -#define check_free_chunk(M,P) -#define check_inuse_chunk(M,P) -#define check_malloced_chunk(M,P,N) -#define check_mmapped_chunk(M,P) -#define check_malloc_state(M) -#define check_top_chunk(M,P) - -#else /* DEBUG */ -#define check_free_chunk(M,P) do_check_free_chunk(M,P) -#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P) -#define check_top_chunk(M,P) do_check_top_chunk(M,P) -#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N) -#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P) -#define check_malloc_state(M) do_check_malloc_state(M) - -static void do_check_any_chunk(mstate m, mchunkptr p); -static void do_check_top_chunk(mstate m, mchunkptr p); -static void do_check_mmapped_chunk(mstate m, mchunkptr p); -static void do_check_inuse_chunk(mstate m, mchunkptr p); -static void do_check_free_chunk(mstate m, mchunkptr p); -static void do_check_malloced_chunk(mstate m, void* mem, size_t s); -static void do_check_tree(mstate m, tchunkptr t); -static void do_check_treebin(mstate m, bindex_t i); -static void do_check_smallbin(mstate m, bindex_t i); -static void do_check_malloc_state(mstate m); -static int bin_find(mstate m, mchunkptr x); -static size_t traverse_and_check(mstate m); -#endif /* DEBUG */ - -/* ---------------------------- Indexing Bins ---------------------------- */ - -#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS) -#define small_index(s) ((s) >> SMALLBIN_SHIFT) -#define small_index2size(i) ((i) << SMALLBIN_SHIFT) -#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE)) - -/* addressing by index. See above about smallbin repositioning */ -#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1]))) -#define treebin_at(M,i) (&((M)->treebins[i])) - -/* assign tree index for size S to variable I */ -#if defined(__GNUC__) && defined(i386) -#define compute_tree_index(S, I)\ -{\ - size_t X = S >> TREEBIN_SHIFT;\ - if (X == 0)\ - I = 0;\ - else if (X > 0xFFFF)\ - I = NTREEBINS-1;\ - else {\ - unsigned int K;\ - __asm__("bsrl %1,%0\n\t" : "=r" (K) : "rm" (X));\ - I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ - }\ -} -#else /* GNUC */ -#define compute_tree_index(S, I)\ -{\ - size_t X = S >> TREEBIN_SHIFT;\ - if (X == 0)\ - I = 0;\ - else if (X > 0xFFFF)\ - I = NTREEBINS-1;\ - else {\ - unsigned int Y = (unsigned int)X;\ - unsigned int N = ((Y - 0x100) >> 16) & 8;\ - unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\ - N += K;\ - N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\ - K = 14 - N + ((Y <<= K) >> 15);\ - I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\ - }\ -} -#endif /* GNUC */ - -/* Bit representing maximum resolved size in a treebin at i */ -#define bit_for_tree_index(i) \ - (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2) - -/* Shift placing maximum resolved bit in a treebin at i as sign bit */ -#define leftshift_for_tree_index(i) \ - ((i == NTREEBINS-1)? 0 : \ - ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2))) - -/* The size of the smallest chunk held in bin with index i */ -#define minsize_for_tree_index(i) \ - ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \ - (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1))) - - -/* ------------------------ Operations on bin maps ----------------------- */ - -/* bit corresponding to given index */ -#define idx2bit(i) ((binmap_t)(1) << (i)) - -/* Mark/Clear bits with given index */ -#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i)) -#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i)) -#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i)) - -#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i)) -#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i)) -#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i)) - -/* index corresponding to given bit */ - -#if defined(__GNUC__) && defined(i386) -#define compute_bit2idx(X, I)\ -{\ - unsigned int J;\ - __asm__("bsfl %1,%0\n\t" : "=r" (J) : "rm" (X));\ - I = (bindex_t)J;\ -} - -#else /* GNUC */ -#if USE_BUILTIN_FFS -#define compute_bit2idx(X, I) I = ffs(X)-1 - -#else /* USE_BUILTIN_FFS */ -#define compute_bit2idx(X, I)\ -{\ - unsigned int Y = X - 1;\ - unsigned int K = Y >> (16-4) & 16;\ - unsigned int N = K; Y >>= K;\ - N += K = Y >> (8-3) & 8; Y >>= K;\ - N += K = Y >> (4-2) & 4; Y >>= K;\ - N += K = Y >> (2-1) & 2; Y >>= K;\ - N += K = Y >> (1-0) & 1; Y >>= K;\ - I = (bindex_t)(N + Y);\ -} -#endif /* USE_BUILTIN_FFS */ -#endif /* GNUC */ - -/* isolate the least set bit of a bitmap */ -#define least_bit(x) ((x) & -(x)) - -/* mask with all bits to left of least bit of x on */ -#define left_bits(x) ((x<<1) | -(x<<1)) - -/* mask with all bits to left of or equal to least bit of x on */ -#define same_or_left_bits(x) ((x) | -(x)) - - -/* ----------------------- Runtime Check Support ------------------------- */ - -/* - For security, the main invariant is that malloc/free/etc never - writes to a static address other than malloc_state, unless static - malloc_state itself has been corrupted, which cannot occur via - malloc (because of these checks). In essence this means that we - believe all pointers, sizes, maps etc held in malloc_state, but - check all of those linked or offsetted from other embedded data - structures. These checks are interspersed with main code in a way - that tends to minimize their run-time cost. - - When FOOTERS is defined, in addition to range checking, we also - verify footer fields of inuse chunks, which can be used guarantee - that the mstate controlling malloc/free is intact. This is a - streamlined version of the approach described by William Robertson - et al in "Run-time Detection of Heap-based Overflows" LISA'03 - http://www.usenix.org/events/lisa03/tech/robertson.html The footer - of an inuse chunk holds the xor of its mstate and a random seed, - that is checked upon calls to free() and realloc(). This is - (probablistically) unguessable from outside the program, but can be - computed by any code successfully malloc'ing any chunk, so does not - itself provide protection against code that has already broken - security through some other means. Unlike Robertson et al, we - always dynamically check addresses of all offset chunks (previous, - next, etc). This turns out to be cheaper than relying on hashes. -*/ - -#if !INSECURE -/* Check if address a is at least as high as any from MORECORE or MMAP */ -#define ok_address(M, a) ((char*)(a) >= (M)->least_addr) -/* Check if address of next chunk n is higher than base chunk p */ -#define ok_next(p, n) ((char*)(p) < (char*)(n)) -/* Check if p has its cinuse bit on */ -#define ok_cinuse(p) cinuse(p) -/* Check if p has its pinuse bit on */ -#define ok_pinuse(p) pinuse(p) - -#else /* !INSECURE */ -#define ok_address(M, a) (1) -#define ok_next(b, n) (1) -#define ok_cinuse(p) (1) -#define ok_pinuse(p) (1) -#endif /* !INSECURE */ - -#if (FOOTERS && !INSECURE) -/* Check if (alleged) mstate m has expected magic field */ -#define ok_magic(M) ((M)->magic == mparams.magic) -#else /* (FOOTERS && !INSECURE) */ -#define ok_magic(M) (1) -#endif /* (FOOTERS && !INSECURE) */ - - -/* In gcc, use __builtin_expect to minimize impact of checks */ -#if !INSECURE -#if defined(__GNUC__) && __GNUC__ >= 3 -#define RTCHECK(e) __builtin_expect(e, 1) -#else /* GNUC */ -#define RTCHECK(e) (e) -#endif /* GNUC */ -#else /* !INSECURE */ -#define RTCHECK(e) (1) -#endif /* !INSECURE */ - -/* macros to set up inuse chunks with or without footers */ - -#if !FOOTERS - -#define mark_inuse_foot(M,p,s) - -/* Set cinuse bit and pinuse bit of next chunk */ -#define set_inuse(M,p,s)\ - ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ - ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) - -/* Set cinuse and pinuse of this chunk and pinuse of next chunk */ -#define set_inuse_and_pinuse(M,p,s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ - ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) - -/* Set size, cinuse and pinuse bit of this chunk */ -#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT)) - -#else /* FOOTERS */ - -/* Set foot of inuse chunk to be xor of mstate and seed */ -#define mark_inuse_foot(M,p,s)\ - (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic)) - -#define get_mstate_for(p)\ - ((mstate)(((mchunkptr)((char*)(p) +\ - (chunksize(p))))->prev_foot ^ mparams.magic)) - -#define set_inuse(M,p,s)\ - ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ - (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \ - mark_inuse_foot(M,p,s)) - -#define set_inuse_and_pinuse(M,p,s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ - (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\ - mark_inuse_foot(M,p,s)) - -#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ - mark_inuse_foot(M, p, s)) - -#endif /* !FOOTERS */ - -/* ---------------------------- setting mparams -------------------------- */ - -/* Initialize mparams */ -static int init_mparams(void) { - if (mparams.page_size == 0) { - size_t s; - - mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD; - mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD; -#if MORECORE_CONTIGUOUS - mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT; -#else /* MORECORE_CONTIGUOUS */ - mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT; -#endif /* MORECORE_CONTIGUOUS */ - -#if (FOOTERS && !INSECURE) - { -#if USE_DEV_RANDOM - int fd; - unsigned char buf[sizeof(size_t)]; - /* Try to use /dev/urandom, else fall back on using time */ - if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 && - read(fd, buf, sizeof(buf)) == sizeof(buf)) { - s = *((size_t *) buf); - close(fd); - } - else -#endif /* USE_DEV_RANDOM */ - s = (size_t)(time(0) ^ (size_t)0x55555555U); - - s |= (size_t)8U; /* ensure nonzero */ - s &= ~(size_t)7U; /* improve chances of fault for bad values */ - - } -#else /* (FOOTERS && !INSECURE) */ - s = (size_t)0x58585858U; -#endif /* (FOOTERS && !INSECURE) */ - ACQUIRE_MAGIC_INIT_LOCK(); - if (mparams.magic == 0) { - mparams.magic = s; - /* Set up lock for main malloc area */ - INITIAL_LOCK(&gm->mutex); - gm->mflags = mparams.default_mflags; - } - RELEASE_MAGIC_INIT_LOCK(); - -#if !defined(WIN32) && !defined(__OS2__) - mparams.page_size = malloc_getpagesize; - mparams.granularity = ((DEFAULT_GRANULARITY != 0)? - DEFAULT_GRANULARITY : mparams.page_size); -#elif defined (__OS2__) - /* if low-memory is used, os2munmap() would break - if it were anything other than 64k */ - mparams.page_size = 4096u; - mparams.granularity = 65536u; -#else /* WIN32 */ - { - SYSTEM_INFO system_info; - GetSystemInfo(&system_info); - mparams.page_size = system_info.dwPageSize; - mparams.granularity = system_info.dwAllocationGranularity; - } -#endif /* WIN32 */ - - /* Sanity-check configuration: - size_t must be unsigned and as wide as pointer type. - ints must be at least 4 bytes. - alignment must be at least 8. - Alignment, min chunk size, and page size must all be powers of 2. - */ - if ((sizeof(size_t) != sizeof(char*)) || - (MAX_SIZE_T < MIN_CHUNK_SIZE) || - (sizeof(int) < 4) || - (MALLOC_ALIGNMENT < (size_t)8U) || - ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) || - ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) || - ((mparams.granularity & (mparams.granularity-SIZE_T_ONE)) != 0) || - ((mparams.page_size & (mparams.page_size-SIZE_T_ONE)) != 0)) - ABORT; - } - return 0; -} - -/* support for mallopt */ -static int change_mparam(int param_number, int value) { - size_t val = (size_t)value; - init_mparams(); - switch(param_number) { - case M_TRIM_THRESHOLD: - mparams.trim_threshold = val; - return 1; - case M_GRANULARITY: - if (val >= mparams.page_size && ((val & (val-1)) == 0)) { - mparams.granularity = val; - return 1; - } - else - return 0; - case M_MMAP_THRESHOLD: - mparams.mmap_threshold = val; - return 1; - default: - return 0; - } -} - -#if DEBUG -/* ------------------------- Debugging Support --------------------------- */ - -/* Check properties of any chunk, whether free, inuse, mmapped etc */ -static void do_check_any_chunk(mstate m, mchunkptr p) { - assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); - assert(ok_address(m, p)); -} - -/* Check properties of top chunk */ -static void do_check_top_chunk(mstate m, mchunkptr p) { - msegmentptr sp = segment_holding(m, (char*)p); - size_t sz = chunksize(p); - assert(sp != 0); - assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); - assert(ok_address(m, p)); - assert(sz == m->topsize); - assert(sz > 0); - assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE); - assert(pinuse(p)); - assert(!next_pinuse(p)); -} - -/* Check properties of (inuse) mmapped chunks */ -static void do_check_mmapped_chunk(mstate m, mchunkptr p) { - size_t sz = chunksize(p); - size_t len = (sz + (p->prev_foot & ~IS_MMAPPED_BIT) + MMAP_FOOT_PAD); - assert(is_mmapped(p)); - assert(use_mmap(m)); - assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); - assert(ok_address(m, p)); - assert(!is_small(sz)); - assert((len & (mparams.page_size-SIZE_T_ONE)) == 0); - assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD); - assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0); -} - -/* Check properties of inuse chunks */ -static void do_check_inuse_chunk(mstate m, mchunkptr p) { - do_check_any_chunk(m, p); - assert(cinuse(p)); - assert(next_pinuse(p)); - /* If not pinuse and not mmapped, previous chunk has OK offset */ - assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p); - if (is_mmapped(p)) - do_check_mmapped_chunk(m, p); -} - -/* Check properties of free chunks */ -static void do_check_free_chunk(mstate m, mchunkptr p) { - size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); - mchunkptr next = chunk_plus_offset(p, sz); - do_check_any_chunk(m, p); - assert(!cinuse(p)); - assert(!next_pinuse(p)); - assert (!is_mmapped(p)); - if (p != m->dv && p != m->top) { - if (sz >= MIN_CHUNK_SIZE) { - assert((sz & CHUNK_ALIGN_MASK) == 0); - assert(is_aligned(chunk2mem(p))); - assert(next->prev_foot == sz); - assert(pinuse(p)); - assert (next == m->top || cinuse(next)); - assert(p->fd->bk == p); - assert(p->bk->fd == p); - } - else /* markers are always of size SIZE_T_SIZE */ - assert(sz == SIZE_T_SIZE); - } -} - -/* Check properties of malloced chunks at the point they are malloced */ -static void do_check_malloced_chunk(mstate m, void* mem, size_t s) { - if (mem != 0) { - mchunkptr p = mem2chunk(mem); - size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); - do_check_inuse_chunk(m, p); - assert((sz & CHUNK_ALIGN_MASK) == 0); - assert(sz >= MIN_CHUNK_SIZE); - assert(sz >= s); - /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */ - assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE)); - } -} - -/* Check a tree and its subtrees. */ -static void do_check_tree(mstate m, tchunkptr t) { - tchunkptr head = 0; - tchunkptr u = t; - bindex_t tindex = t->index; - size_t tsize = chunksize(t); - bindex_t idx; - compute_tree_index(tsize, idx); - assert(tindex == idx); - assert(tsize >= MIN_LARGE_SIZE); - assert(tsize >= minsize_for_tree_index(idx)); - assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1)))); - - do { /* traverse through chain of same-sized nodes */ - do_check_any_chunk(m, ((mchunkptr)u)); - assert(u->index == tindex); - assert(chunksize(u) == tsize); - assert(!cinuse(u)); - assert(!next_pinuse(u)); - assert(u->fd->bk == u); - assert(u->bk->fd == u); - if (u->parent == 0) { - assert(u->child[0] == 0); - assert(u->child[1] == 0); - } - else { - assert(head == 0); /* only one node on chain has parent */ - head = u; - assert(u->parent != u); - assert (u->parent->child[0] == u || - u->parent->child[1] == u || - *((tbinptr*)(u->parent)) == u); - if (u->child[0] != 0) { - assert(u->child[0]->parent == u); - assert(u->child[0] != u); - do_check_tree(m, u->child[0]); - } - if (u->child[1] != 0) { - assert(u->child[1]->parent == u); - assert(u->child[1] != u); - do_check_tree(m, u->child[1]); - } - if (u->child[0] != 0 && u->child[1] != 0) { - assert(chunksize(u->child[0]) < chunksize(u->child[1])); - } - } - u = u->fd; - } while (u != t); - assert(head != 0); -} - -/* Check all the chunks in a treebin. */ -static void do_check_treebin(mstate m, bindex_t i) { - tbinptr* tb = treebin_at(m, i); - tchunkptr t = *tb; - int empty = (m->treemap & (1U << i)) == 0; - if (t == 0) - assert(empty); - if (!empty) - do_check_tree(m, t); -} - -/* Check all the chunks in a smallbin. */ -static void do_check_smallbin(mstate m, bindex_t i) { - sbinptr b = smallbin_at(m, i); - mchunkptr p = b->bk; - unsigned int empty = (m->smallmap & (1U << i)) == 0; - if (p == b) - assert(empty); - if (!empty) { - for (; p != b; p = p->bk) { - size_t size = chunksize(p); - mchunkptr q; - /* each chunk claims to be free */ - do_check_free_chunk(m, p); - /* chunk belongs in bin */ - assert(small_index(size) == i); - assert(p->bk == b || chunksize(p->bk) == chunksize(p)); - /* chunk is followed by an inuse chunk */ - q = next_chunk(p); - if (q->head != FENCEPOST_HEAD) - do_check_inuse_chunk(m, q); - } - } -} - -/* Find x in a bin. Used in other check functions. */ -static int bin_find(mstate m, mchunkptr x) { - size_t size = chunksize(x); - if (is_small(size)) { - bindex_t sidx = small_index(size); - sbinptr b = smallbin_at(m, sidx); - if (smallmap_is_marked(m, sidx)) { - mchunkptr p = b; - do { - if (p == x) - return 1; - } while ((p = p->fd) != b); - } - } - else { - bindex_t tidx; - compute_tree_index(size, tidx); - if (treemap_is_marked(m, tidx)) { - tchunkptr t = *treebin_at(m, tidx); - size_t sizebits = size << leftshift_for_tree_index(tidx); - while (t != 0 && chunksize(t) != size) { - t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; - sizebits <<= 1; - } - if (t != 0) { - tchunkptr u = t; - do { - if (u == (tchunkptr)x) - return 1; - } while ((u = u->fd) != t); - } - } - } - return 0; -} - -/* Traverse each chunk and check it; return total */ -static size_t traverse_and_check(mstate m) { - size_t sum = 0; - if (is_initialized(m)) { - msegmentptr s = &m->seg; - sum += m->topsize + TOP_FOOT_SIZE; - while (s != 0) { - mchunkptr q = align_as_chunk(s->base); - mchunkptr lastq = 0; - assert(pinuse(q)); - while (segment_holds(s, q) && - q != m->top && q->head != FENCEPOST_HEAD) { - sum += chunksize(q); - if (cinuse(q)) { - assert(!bin_find(m, q)); - do_check_inuse_chunk(m, q); - } - else { - assert(q == m->dv || bin_find(m, q)); - assert(lastq == 0 || cinuse(lastq)); /* Not 2 consecutive free */ - do_check_free_chunk(m, q); - } - lastq = q; - q = next_chunk(q); - } - s = s->next; - } - } - return sum; -} - -/* Check all properties of malloc_state. */ -static void do_check_malloc_state(mstate m) { - bindex_t i; - size_t total; - /* check bins */ - for (i = 0; i < NSMALLBINS; ++i) - do_check_smallbin(m, i); - for (i = 0; i < NTREEBINS; ++i) - do_check_treebin(m, i); - - if (m->dvsize != 0) { /* check dv chunk */ - do_check_any_chunk(m, m->dv); - assert(m->dvsize == chunksize(m->dv)); - assert(m->dvsize >= MIN_CHUNK_SIZE); - assert(bin_find(m, m->dv) == 0); - } - - if (m->top != 0) { /* check top chunk */ - do_check_top_chunk(m, m->top); - assert(m->topsize == chunksize(m->top)); - assert(m->topsize > 0); - assert(bin_find(m, m->top) == 0); - } - - total = traverse_and_check(m); - assert(total <= m->footprint); - assert(m->footprint <= m->max_footprint); -} -#endif /* DEBUG */ - -/* ----------------------------- statistics ------------------------------ */ - -#if !NO_MALLINFO -static struct mallinfo internal_mallinfo(mstate m) { - struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - if (!PREACTION(m)) { - check_malloc_state(m); - if (is_initialized(m)) { - size_t nfree = SIZE_T_ONE; /* top always free */ - size_t mfree = m->topsize + TOP_FOOT_SIZE; - size_t sum = mfree; - msegmentptr s = &m->seg; - while (s != 0) { - mchunkptr q = align_as_chunk(s->base); - while (segment_holds(s, q) && - q != m->top && q->head != FENCEPOST_HEAD) { - size_t sz = chunksize(q); - sum += sz; - if (!cinuse(q)) { - mfree += sz; - ++nfree; - } - q = next_chunk(q); - } - s = s->next; - } - - nm.arena = sum; - nm.ordblks = nfree; - nm.hblkhd = m->footprint - sum; - nm.usmblks = m->max_footprint; - nm.uordblks = m->footprint - mfree; - nm.fordblks = mfree; - nm.keepcost = m->topsize; - } - - POSTACTION(m); - } - return nm; -} -#endif /* !NO_MALLINFO */ - -static void internal_malloc_stats(mstate m) { - if (!PREACTION(m)) { - size_t maxfp = 0; - size_t fp = 0; - size_t used = 0; - check_malloc_state(m); - if (is_initialized(m)) { - msegmentptr s = &m->seg; - maxfp = m->max_footprint; - fp = m->footprint; - used = fp - (m->topsize + TOP_FOOT_SIZE); - - while (s != 0) { - mchunkptr q = align_as_chunk(s->base); - while (segment_holds(s, q) && - q != m->top && q->head != FENCEPOST_HEAD) { - if (!cinuse(q)) - used -= chunksize(q); - q = next_chunk(q); - } - s = s->next; - } - } - - fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp)); - fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp)); - fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used)); - - POSTACTION(m); - } -} - -/* ----------------------- Operations on smallbins ----------------------- */ - -/* - Various forms of linking and unlinking are defined as macros. Even - the ones for trees, which are very long but have very short typical - paths. This is ugly but reduces reliance on inlining support of - compilers. -*/ - -/* Link a free chunk into a smallbin */ -#define insert_small_chunk(M, P, S) {\ - bindex_t I = small_index(S);\ - mchunkptr B = smallbin_at(M, I);\ - mchunkptr F = B;\ - assert(S >= MIN_CHUNK_SIZE);\ - if (!smallmap_is_marked(M, I))\ - mark_smallmap(M, I);\ - else if (RTCHECK(ok_address(M, B->fd)))\ - F = B->fd;\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - B->fd = P;\ - F->bk = P;\ - P->fd = F;\ - P->bk = B;\ -} - -/* Unlink a chunk from a smallbin */ -#define unlink_small_chunk(M, P, S) {\ - mchunkptr F = P->fd;\ - mchunkptr B = P->bk;\ - bindex_t I = small_index(S);\ - assert(P != B);\ - assert(P != F);\ - assert(chunksize(P) == small_index2size(I));\ - if (F == B)\ - clear_smallmap(M, I);\ - else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\ - (B == smallbin_at(M,I) || ok_address(M, B)))) {\ - F->bk = B;\ - B->fd = F;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ -} - -/* Unlink the first chunk from a smallbin */ -#define unlink_first_small_chunk(M, B, P, I) {\ - mchunkptr F = P->fd;\ - assert(P != B);\ - assert(P != F);\ - assert(chunksize(P) == small_index2size(I));\ - if (B == F)\ - clear_smallmap(M, I);\ - else if (RTCHECK(ok_address(M, F))) {\ - B->fd = F;\ - F->bk = B;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ -} - -/* Replace dv node, binning the old one */ -/* Used only when dvsize known to be small */ -#define replace_dv(M, P, S) {\ - size_t DVS = M->dvsize;\ - if (DVS != 0) {\ - mchunkptr DV = M->dv;\ - assert(is_small(DVS));\ - insert_small_chunk(M, DV, DVS);\ - }\ - M->dvsize = S;\ - M->dv = P;\ -} - -/* ------------------------- Operations on trees ------------------------- */ - -/* Insert chunk into tree */ -#define insert_large_chunk(M, X, S) {\ - tbinptr* H;\ - bindex_t I;\ - compute_tree_index(S, I);\ - H = treebin_at(M, I);\ - X->index = I;\ - X->child[0] = X->child[1] = 0;\ - if (!treemap_is_marked(M, I)) {\ - mark_treemap(M, I);\ - *H = X;\ - X->parent = (tchunkptr)H;\ - X->fd = X->bk = X;\ - }\ - else {\ - tchunkptr T = *H;\ - size_t K = S << leftshift_for_tree_index(I);\ - for (;;) {\ - if (chunksize(T) != S) {\ - tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\ - K <<= 1;\ - if (*C != 0)\ - T = *C;\ - else if (RTCHECK(ok_address(M, C))) {\ - *C = X;\ - X->parent = T;\ - X->fd = X->bk = X;\ - break;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - break;\ - }\ - }\ - else {\ - tchunkptr F = T->fd;\ - if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\ - T->fd = F->bk = X;\ - X->fd = F;\ - X->bk = T;\ - X->parent = 0;\ - break;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - break;\ - }\ - }\ - }\ - }\ -} - -/* - Unlink steps: - - 1. If x is a chained node, unlink it from its same-sized fd/bk links - and choose its bk node as its replacement. - 2. If x was the last node of its size, but not a leaf node, it must - be replaced with a leaf node (not merely one with an open left or - right), to make sure that lefts and rights of descendants - correspond properly to bit masks. We use the rightmost descendant - of x. We could use any other leaf, but this is easy to locate and - tends to counteract removal of leftmosts elsewhere, and so keeps - paths shorter than minimally guaranteed. This doesn't loop much - because on average a node in a tree is near the bottom. - 3. If x is the base of a chain (i.e., has parent links) relink - x's parent and children to x's replacement (or null if none). -*/ - -#define unlink_large_chunk(M, X) {\ - tchunkptr XP = X->parent;\ - tchunkptr R;\ - if (X->bk != X) {\ - tchunkptr F = X->fd;\ - R = X->bk;\ - if (RTCHECK(ok_address(M, F))) {\ - F->bk = R;\ - R->fd = F;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - }\ - else {\ - tchunkptr* RP;\ - if (((R = *(RP = &(X->child[1]))) != 0) ||\ - ((R = *(RP = &(X->child[0]))) != 0)) {\ - tchunkptr* CP;\ - while ((*(CP = &(R->child[1])) != 0) ||\ - (*(CP = &(R->child[0])) != 0)) {\ - R = *(RP = CP);\ - }\ - if (RTCHECK(ok_address(M, RP)))\ - *RP = 0;\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - }\ - }\ - if (XP != 0) {\ - tbinptr* H = treebin_at(M, X->index);\ - if (X == *H) {\ - if ((*H = R) == 0) \ - clear_treemap(M, X->index);\ - }\ - else if (RTCHECK(ok_address(M, XP))) {\ - if (XP->child[0] == X) \ - XP->child[0] = R;\ - else \ - XP->child[1] = R;\ - }\ - else\ - CORRUPTION_ERROR_ACTION(M);\ - if (R != 0) {\ - if (RTCHECK(ok_address(M, R))) {\ - tchunkptr C0, C1;\ - R->parent = XP;\ - if ((C0 = X->child[0]) != 0) {\ - if (RTCHECK(ok_address(M, C0))) {\ - R->child[0] = C0;\ - C0->parent = R;\ - }\ - else\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - if ((C1 = X->child[1]) != 0) {\ - if (RTCHECK(ok_address(M, C1))) {\ - R->child[1] = C1;\ - C1->parent = R;\ - }\ - else\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - }\ - else\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - }\ -} - -/* Relays to large vs small bin operations */ - -#define insert_chunk(M, P, S)\ - if (is_small(S)) insert_small_chunk(M, P, S)\ - else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); } - -#define unlink_chunk(M, P, S)\ - if (is_small(S)) unlink_small_chunk(M, P, S)\ - else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); } - - -/* Relays to internal calls to malloc/free from realloc, memalign etc */ - -#if ONLY_MSPACES -#define internal_malloc(m, b) mspace_malloc(m, b) -#define internal_free(m, mem) mspace_free(m,mem); -#else /* ONLY_MSPACES */ -#if MSPACES -#define internal_malloc(m, b)\ - (m == gm)? dlmalloc(b) : mspace_malloc(m, b) -#define internal_free(m, mem)\ - if (m == gm) dlfree(mem); else mspace_free(m,mem); -#else /* MSPACES */ -#define internal_malloc(m, b) dlmalloc(b) -#define internal_free(m, mem) dlfree(mem) -#endif /* MSPACES */ -#endif /* ONLY_MSPACES */ - -/* ----------------------- Direct-mmapping chunks ----------------------- */ - -/* - Directly mmapped chunks are set up with an offset to the start of - the mmapped region stored in the prev_foot field of the chunk. This - allows reconstruction of the required argument to MUNMAP when freed, - and also allows adjustment of the returned chunk to meet alignment - requirements (especially in memalign). There is also enough space - allocated to hold a fake next chunk of size SIZE_T_SIZE to maintain - the PINUSE bit so frees can be checked. -*/ - -/* Malloc using mmap */ -static void* mmap_alloc(mstate m, size_t nb) { - size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); - if (mmsize > nb) { /* Check for wrap around 0 */ - char* mm = (char*)(DIRECT_MMAP(mmsize)); - if (mm != CMFAIL) { - size_t offset = align_offset(chunk2mem(mm)); - size_t psize = mmsize - offset - MMAP_FOOT_PAD; - mchunkptr p = (mchunkptr)(mm + offset); - p->prev_foot = offset | IS_MMAPPED_BIT; - (p)->head = (psize|CINUSE_BIT); - mark_inuse_foot(m, p, psize); - chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; - chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; - - if (mm < m->least_addr) - m->least_addr = mm; - if ((m->footprint += mmsize) > m->max_footprint) - m->max_footprint = m->footprint; - assert(is_aligned(chunk2mem(p))); - check_mmapped_chunk(m, p); - return chunk2mem(p); - } - } - return 0; -} - -/* Realloc using mmap */ -static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) { - size_t oldsize = chunksize(oldp); - if (is_small(nb)) /* Can't shrink mmap regions below small size */ - return 0; - /* Keep old chunk if big enough but not too big */ - if (oldsize >= nb + SIZE_T_SIZE && - (oldsize - nb) <= (mparams.granularity << 1)) - return oldp; - else { - size_t offset = oldp->prev_foot & ~IS_MMAPPED_BIT; - size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD; - size_t newmmsize = granularity_align(nb + SIX_SIZE_T_SIZES + - CHUNK_ALIGN_MASK); - char* cp = (char*)CALL_MREMAP((char*)oldp - offset, - oldmmsize, newmmsize, 1); - if (cp != CMFAIL) { - mchunkptr newp = (mchunkptr)(cp + offset); - size_t psize = newmmsize - offset - MMAP_FOOT_PAD; - newp->head = (psize|CINUSE_BIT); - mark_inuse_foot(m, newp, psize); - chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD; - chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0; - - if (cp < m->least_addr) - m->least_addr = cp; - if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint) - m->max_footprint = m->footprint; - check_mmapped_chunk(m, newp); - return newp; - } - } - return 0; -} - -/* -------------------------- mspace management -------------------------- */ - -/* Initialize top chunk and its size */ -static void init_top(mstate m, mchunkptr p, size_t psize) { - /* Ensure alignment */ - size_t offset = align_offset(chunk2mem(p)); - p = (mchunkptr)((char*)p + offset); - psize -= offset; - - m->top = p; - m->topsize = psize; - p->head = psize | PINUSE_BIT; - /* set size of fake trailing chunk holding overhead space only once */ - chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE; - m->trim_check = mparams.trim_threshold; /* reset on each update */ -} - -/* Initialize bins for a new mstate that is otherwise zeroed out */ -static void init_bins(mstate m) { - /* Establish circular links for smallbins */ - bindex_t i; - for (i = 0; i < NSMALLBINS; ++i) { - sbinptr bin = smallbin_at(m,i); - bin->fd = bin->bk = bin; - } -} - -#if PROCEED_ON_ERROR - -/* default corruption action */ -static void reset_on_error(mstate m) { - int i; - ++malloc_corruption_error_count; - /* Reinitialize fields to forget about all memory */ - m->smallbins = m->treebins = 0; - m->dvsize = m->topsize = 0; - m->seg.base = 0; - m->seg.size = 0; - m->seg.next = 0; - m->top = m->dv = 0; - for (i = 0; i < NTREEBINS; ++i) - *treebin_at(m, i) = 0; - init_bins(m); -} -#endif /* PROCEED_ON_ERROR */ - -/* Allocate chunk and prepend remainder with chunk in successor base. */ -static void* prepend_alloc(mstate m, char* newbase, char* oldbase, - size_t nb) { - mchunkptr p = align_as_chunk(newbase); - mchunkptr oldfirst = align_as_chunk(oldbase); - size_t psize = (char*)oldfirst - (char*)p; - mchunkptr q = chunk_plus_offset(p, nb); - size_t qsize = psize - nb; - set_size_and_pinuse_of_inuse_chunk(m, p, nb); - - assert((char*)oldfirst > (char*)q); - assert(pinuse(oldfirst)); - assert(qsize >= MIN_CHUNK_SIZE); - - /* consolidate remainder with first chunk of old base */ - if (oldfirst == m->top) { - size_t tsize = m->topsize += qsize; - m->top = q; - q->head = tsize | PINUSE_BIT; - check_top_chunk(m, q); - } - else if (oldfirst == m->dv) { - size_t dsize = m->dvsize += qsize; - m->dv = q; - set_size_and_pinuse_of_free_chunk(q, dsize); - } - else { - if (!cinuse(oldfirst)) { - size_t nsize = chunksize(oldfirst); - unlink_chunk(m, oldfirst, nsize); - oldfirst = chunk_plus_offset(oldfirst, nsize); - qsize += nsize; - } - set_free_with_pinuse(q, qsize, oldfirst); - insert_chunk(m, q, qsize); - check_free_chunk(m, q); - } - - check_malloced_chunk(m, chunk2mem(p), nb); - return chunk2mem(p); -} - - -/* Add a segment to hold a new noncontiguous region */ -static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) { - /* Determine locations and sizes of segment, fenceposts, old top */ - char* old_top = (char*)m->top; - msegmentptr oldsp = segment_holding(m, old_top); - char* old_end = oldsp->base + oldsp->size; - size_t ssize = pad_request(sizeof(struct malloc_segment)); - char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK); - size_t offset = align_offset(chunk2mem(rawsp)); - char* asp = rawsp + offset; - char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp; - mchunkptr sp = (mchunkptr)csp; - msegmentptr ss = (msegmentptr)(chunk2mem(sp)); - mchunkptr tnext = chunk_plus_offset(sp, ssize); - mchunkptr p = tnext; - int nfences = 0; - - /* reset top to new space */ - init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); - - /* Set up segment record */ - assert(is_aligned(ss)); - set_size_and_pinuse_of_inuse_chunk(m, sp, ssize); - *ss = m->seg; /* Push current record */ - m->seg.base = tbase; - m->seg.size = tsize; - (void)set_segment_flags(&m->seg, mmapped); - m->seg.next = ss; - - /* Insert trailing fenceposts */ - for (;;) { - mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE); - p->head = FENCEPOST_HEAD; - ++nfences; - if ((char*)(&(nextp->head)) < old_end) - p = nextp; - else - break; - } - assert(nfences >= 2); - - /* Insert the rest of old top into a bin as an ordinary free chunk */ - if (csp != old_top) { - mchunkptr q = (mchunkptr)old_top; - size_t psize = csp - old_top; - mchunkptr tn = chunk_plus_offset(q, psize); - set_free_with_pinuse(q, psize, tn); - insert_chunk(m, q, psize); - } - - check_top_chunk(m, m->top); -} - -/* -------------------------- System allocation -------------------------- */ - -/* Get memory from system using MORECORE or MMAP */ -static void* sys_alloc(mstate m, size_t nb) { - char* tbase = CMFAIL; - size_t tsize = 0; - flag_t mmap_flag = 0; - - init_mparams(); - - /* Directly map large chunks */ - if (use_mmap(m) && nb >= mparams.mmap_threshold) { - void* mem = mmap_alloc(m, nb); - if (mem != 0) - return mem; - } - - /* - Try getting memory in any of three ways (in most-preferred to - least-preferred order): - 1. A call to MORECORE that can normally contiguously extend memory. - (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or - or main space is mmapped or a previous contiguous call failed) - 2. A call to MMAP new space (disabled if not HAVE_MMAP). - Note that under the default settings, if MORECORE is unable to - fulfill a request, and HAVE_MMAP is true, then mmap is - used as a noncontiguous system allocator. This is a useful backup - strategy for systems with holes in address spaces -- in this case - sbrk cannot contiguously expand the heap, but mmap may be able to - find space. - 3. A call to MORECORE that cannot usually contiguously extend memory. - (disabled if not HAVE_MORECORE) - */ - - if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) { - char* br = CMFAIL; - msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top); - size_t asize = 0; - ACQUIRE_MORECORE_LOCK(); - - if (ss == 0) { /* First time through or recovery */ - char* base = (char*)CALL_MORECORE(0); - if (base != CMFAIL) { - asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); - /* Adjust to end on a page boundary */ - if (!is_page_aligned(base)) - asize += (page_align((size_t)base) - (size_t)base); - /* Can't call MORECORE if size is negative when treated as signed */ - if (asize < HALF_MAX_SIZE_T && - (br = (char*)(CALL_MORECORE(asize))) == base) { - tbase = base; - tsize = asize; - } - } - } - else { - /* Subtract out existing available top space from MORECORE request. */ - asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE); - /* Use mem here only if it did continuously extend old space */ - if (asize < HALF_MAX_SIZE_T && - (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) { - tbase = br; - tsize = asize; - } - } - - if (tbase == CMFAIL) { /* Cope with partial failure */ - if (br != CMFAIL) { /* Try to use/extend the space we did get */ - if (asize < HALF_MAX_SIZE_T && - asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) { - size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize); - if (esize < HALF_MAX_SIZE_T) { - char* end = (char*)CALL_MORECORE(esize); - if (end != CMFAIL) - asize += esize; - else { /* Can't use; try to release */ - (void)CALL_MORECORE(-asize); - br = CMFAIL; - } - } - } - } - if (br != CMFAIL) { /* Use the space we did get */ - tbase = br; - tsize = asize; - } - else - disable_contiguous(m); /* Don't try contiguous path in the future */ - } - - RELEASE_MORECORE_LOCK(); - } - - if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */ - size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE; - size_t rsize = granularity_align(req); - if (rsize > nb) { /* Fail if wraps around zero */ - char* mp = (char*)(CALL_MMAP(rsize)); - if (mp != CMFAIL) { - tbase = mp; - tsize = rsize; - mmap_flag = IS_MMAPPED_BIT; - } - } - } - - if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */ - size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); - if (asize < HALF_MAX_SIZE_T) { - char* br = CMFAIL; - char* end = CMFAIL; - ACQUIRE_MORECORE_LOCK(); - br = (char*)(CALL_MORECORE(asize)); - end = (char*)(CALL_MORECORE(0)); - RELEASE_MORECORE_LOCK(); - if (br != CMFAIL && end != CMFAIL && br < end) { - size_t ssize = end - br; - if (ssize > nb + TOP_FOOT_SIZE) { - tbase = br; - tsize = ssize; - } - } - } - } - - if (tbase != CMFAIL) { - - if ((m->footprint += tsize) > m->max_footprint) - m->max_footprint = m->footprint; - - if (!is_initialized(m)) { /* first-time initialization */ - m->seg.base = m->least_addr = tbase; - m->seg.size = tsize; - (void)set_segment_flags(&m->seg, mmap_flag); - m->magic = mparams.magic; - init_bins(m); - if (is_global(m)) - init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); - else { - /* Offset top by embedded malloc_state */ - mchunkptr mn = next_chunk(mem2chunk(m)); - init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE); - } - } - - else { - /* Try to merge with an existing segment */ - msegmentptr sp = &m->seg; - while (sp != 0 && tbase != sp->base + sp->size) - sp = sp->next; - if (sp != 0 && - !is_extern_segment(sp) && - check_segment_merge(sp, tbase, tsize) && - (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag && - segment_holds(sp, m->top)) { /* append */ - sp->size += tsize; - init_top(m, m->top, m->topsize + tsize); - } - else { - if (tbase < m->least_addr) - m->least_addr = tbase; - sp = &m->seg; - while (sp != 0 && sp->base != tbase + tsize) - sp = sp->next; - if (sp != 0 && - !is_extern_segment(sp) && - check_segment_merge(sp, tbase, tsize) && - (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag) { - char* oldbase = sp->base; - sp->base = tbase; - sp->size += tsize; - return prepend_alloc(m, tbase, oldbase, nb); - } - else - add_segment(m, tbase, tsize, mmap_flag); - } - } - - if (nb < m->topsize) { /* Allocate from new or extended top space */ - size_t rsize = m->topsize -= nb; - mchunkptr p = m->top; - mchunkptr r = m->top = chunk_plus_offset(p, nb); - r->head = rsize | PINUSE_BIT; - set_size_and_pinuse_of_inuse_chunk(m, p, nb); - check_top_chunk(m, m->top); - check_malloced_chunk(m, chunk2mem(p), nb); - return chunk2mem(p); - } - } - - MALLOC_FAILURE_ACTION; - return 0; -} - -/* ----------------------- system deallocation -------------------------- */ - -/* Unmap and unlink any mmapped segments that don't contain used chunks */ -static size_t release_unused_segments(mstate m) { - size_t released = 0; - msegmentptr pred = &m->seg; - msegmentptr sp = pred->next; - while (sp != 0) { - char* base = sp->base; - size_t size = sp->size; - msegmentptr next = sp->next; - if (is_mmapped_segment(sp) && !is_extern_segment(sp)) { - mchunkptr p = align_as_chunk(base); - size_t psize = chunksize(p); - /* Can unmap if first chunk holds entire segment and not pinned */ - if (!cinuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) { - tchunkptr tp = (tchunkptr)p; - assert(segment_holds(sp, (char*)sp)); - if (p == m->dv) { - m->dv = 0; - m->dvsize = 0; - } - else { - unlink_large_chunk(m, tp); - } - if (CALL_MUNMAP(base, size) == 0) { - released += size; - m->footprint -= size; - /* unlink obsoleted record */ - sp = pred; - sp->next = next; - } - else { /* back out if cannot unmap */ - insert_large_chunk(m, tp, psize); - } - } - } - pred = sp; - sp = next; - } - return released; -} - -static int sys_trim(mstate m, size_t pad) { - size_t released = 0; - if (pad < MAX_REQUEST && is_initialized(m)) { - pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */ - - if (m->topsize > pad) { - /* Shrink top space in granularity-size units, keeping at least one */ - size_t unit = mparams.granularity; - size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit - - SIZE_T_ONE) * unit; - msegmentptr sp = segment_holding(m, (char*)m->top); - - if (!is_extern_segment(sp)) { - if (is_mmapped_segment(sp)) { - if (HAVE_MMAP && - sp->size >= extra && - !has_segment_link(m, sp)) { /* can't shrink if pinned */ - size_t newsize = sp->size - extra; - /* Prefer mremap, fall back to munmap */ - if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) || - (CALL_MUNMAP(sp->base + newsize, extra) == 0)) { - released = extra; - } - } - } - else if (HAVE_MORECORE) { - if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */ - extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit; - ACQUIRE_MORECORE_LOCK(); - { - /* Make sure end of memory is where we last set it. */ - char* old_br = (char*)(CALL_MORECORE(0)); - if (old_br == sp->base + sp->size) { - char* rel_br = (char*)(CALL_MORECORE(-extra)); - char* new_br = (char*)(CALL_MORECORE(0)); - if (rel_br != CMFAIL && new_br < old_br) - released = old_br - new_br; - } - } - RELEASE_MORECORE_LOCK(); - } - } - - if (released != 0) { - sp->size -= released; - m->footprint -= released; - init_top(m, m->top, m->topsize - released); - check_top_chunk(m, m->top); - } - } - - /* Unmap any unused mmapped segments */ - if (HAVE_MMAP) - released += release_unused_segments(m); - - /* On failure, disable autotrim to avoid repeated failed future calls */ - if (released == 0) - m->trim_check = MAX_SIZE_T; - } - - return (released != 0)? 1 : 0; -} - -/* ---------------------------- malloc support --------------------------- */ - -/* allocate a large request from the best fitting chunk in a treebin */ -static void* tmalloc_large(mstate m, size_t nb) { - tchunkptr v = 0; - size_t rsize = -nb; /* Unsigned negation */ - tchunkptr t; - bindex_t idx; - compute_tree_index(nb, idx); - - if ((t = *treebin_at(m, idx)) != 0) { - /* Traverse tree for this bin looking for node with size == nb */ - size_t sizebits = nb << leftshift_for_tree_index(idx); - tchunkptr rst = 0; /* The deepest untaken right subtree */ - for (;;) { - tchunkptr rt; - size_t trem = chunksize(t) - nb; - if (trem < rsize) { - v = t; - if ((rsize = trem) == 0) - break; - } - rt = t->child[1]; - t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; - if (rt != 0 && rt != t) - rst = rt; - if (t == 0) { - t = rst; /* set t to least subtree holding sizes > nb */ - break; - } - sizebits <<= 1; - } - } - - if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */ - binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap; - if (leftbits != 0) { - bindex_t i; - binmap_t leastbit = least_bit(leftbits); - compute_bit2idx(leastbit, i); - t = *treebin_at(m, i); - } - } - - while (t != 0) { /* find smallest of tree or subtree */ - size_t trem = chunksize(t) - nb; - if (trem < rsize) { - rsize = trem; - v = t; - } - t = leftmost_child(t); - } - - /* If dv is a better fit, return 0 so malloc will use it */ - if (v != 0 && rsize < (size_t)(m->dvsize - nb)) { - if (RTCHECK(ok_address(m, v))) { /* split */ - mchunkptr r = chunk_plus_offset(v, nb); - assert(chunksize(v) == rsize + nb); - if (RTCHECK(ok_next(v, r))) { - unlink_large_chunk(m, v); - if (rsize < MIN_CHUNK_SIZE) - set_inuse_and_pinuse(m, v, (rsize + nb)); - else { - set_size_and_pinuse_of_inuse_chunk(m, v, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - insert_chunk(m, r, rsize); - } - return chunk2mem(v); - } - } - CORRUPTION_ERROR_ACTION(m); - } - return 0; -} - -/* allocate a small request from the best fitting chunk in a treebin */ -static void* tmalloc_small(mstate m, size_t nb) { - tchunkptr t, v; - size_t rsize; - bindex_t i; - binmap_t leastbit = least_bit(m->treemap); - compute_bit2idx(leastbit, i); - - v = t = *treebin_at(m, i); - rsize = chunksize(t) - nb; - - while ((t = leftmost_child(t)) != 0) { - size_t trem = chunksize(t) - nb; - if (trem < rsize) { - rsize = trem; - v = t; - } - } - - if (RTCHECK(ok_address(m, v))) { - mchunkptr r = chunk_plus_offset(v, nb); - assert(chunksize(v) == rsize + nb); - if (RTCHECK(ok_next(v, r))) { - unlink_large_chunk(m, v); - if (rsize < MIN_CHUNK_SIZE) - set_inuse_and_pinuse(m, v, (rsize + nb)); - else { - set_size_and_pinuse_of_inuse_chunk(m, v, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - replace_dv(m, r, rsize); - } - return chunk2mem(v); - } - } - - CORRUPTION_ERROR_ACTION(m); - return 0; -} - -/* --------------------------- realloc support --------------------------- */ - -static void* internal_realloc(mstate m, void* oldmem, size_t bytes) { - if (bytes >= MAX_REQUEST) { - MALLOC_FAILURE_ACTION; - return 0; - } - if (!PREACTION(m)) { - mchunkptr oldp = mem2chunk(oldmem); - size_t oldsize = chunksize(oldp); - mchunkptr next = chunk_plus_offset(oldp, oldsize); - mchunkptr newp = 0; - void* extra = 0; - - /* Try to either shrink or extend into top. Else malloc-copy-free */ - - if (RTCHECK(ok_address(m, oldp) && ok_cinuse(oldp) && - ok_next(oldp, next) && ok_pinuse(next))) { - size_t nb = request2size(bytes); - if (is_mmapped(oldp)) - newp = mmap_resize(m, oldp, nb); - else if (oldsize >= nb) { /* already big enough */ - size_t rsize = oldsize - nb; - newp = oldp; - if (rsize >= MIN_CHUNK_SIZE) { - mchunkptr remainder = chunk_plus_offset(newp, nb); - set_inuse(m, newp, nb); - set_inuse(m, remainder, rsize); - extra = chunk2mem(remainder); - } - } - else if (next == m->top && oldsize + m->topsize > nb) { - /* Expand into top */ - size_t newsize = oldsize + m->topsize; - size_t newtopsize = newsize - nb; - mchunkptr newtop = chunk_plus_offset(oldp, nb); - set_inuse(m, oldp, nb); - newtop->head = newtopsize |PINUSE_BIT; - m->top = newtop; - m->topsize = newtopsize; - newp = oldp; - } - } - else { - USAGE_ERROR_ACTION(m, oldmem); - POSTACTION(m); - return 0; - } - - POSTACTION(m); - - if (newp != 0) { - if (extra != 0) { - internal_free(m, extra); - } - check_inuse_chunk(m, newp); - return chunk2mem(newp); - } - else { - void* newmem = internal_malloc(m, bytes); - if (newmem != 0) { - size_t oc = oldsize - overhead_for(oldp); - memcpy(newmem, oldmem, (oc < bytes)? oc : bytes); - internal_free(m, oldmem); - } - return newmem; - } - } - return 0; -} - -/* --------------------------- memalign support -------------------------- */ - -static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { - if (alignment <= MALLOC_ALIGNMENT) /* Can just use malloc */ - return internal_malloc(m, bytes); - if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */ - alignment = MIN_CHUNK_SIZE; - if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */ - size_t a = MALLOC_ALIGNMENT << 1; - while (a < alignment) a <<= 1; - alignment = a; - } - - if (bytes >= MAX_REQUEST - alignment) { - if (m != 0) { /* Test isn't needed but avoids compiler warning */ - MALLOC_FAILURE_ACTION; - } - } - else { - size_t nb = request2size(bytes); - size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD; - char* mem = (char*)internal_malloc(m, req); - if (mem != 0) { - void* leader = 0; - void* trailer = 0; - mchunkptr p = mem2chunk(mem); - - if (PREACTION(m)) return 0; - if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */ - /* - Find an aligned spot inside chunk. Since we need to give - back leading space in a chunk of at least MIN_CHUNK_SIZE, if - the first calculation places us at a spot with less than - MIN_CHUNK_SIZE leader, we can move to the next aligned spot. - We've allocated enough total room so that this is always - possible. - */ - char* br = (char*)mem2chunk((size_t)(((size_t)(mem + - alignment - - SIZE_T_ONE)) & - -alignment)); - char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)? - br : br+alignment; - mchunkptr newp = (mchunkptr)pos; - size_t leadsize = pos - (char*)(p); - size_t newsize = chunksize(p) - leadsize; - - if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */ - newp->prev_foot = p->prev_foot + leadsize; - newp->head = (newsize|CINUSE_BIT); - } - else { /* Otherwise, give back leader, use the rest */ - set_inuse(m, newp, newsize); - set_inuse(m, p, leadsize); - leader = chunk2mem(p); - } - p = newp; - } - - /* Give back spare room at the end */ - if (!is_mmapped(p)) { - size_t size = chunksize(p); - if (size > nb + MIN_CHUNK_SIZE) { - size_t remainder_size = size - nb; - mchunkptr remainder = chunk_plus_offset(p, nb); - set_inuse(m, p, nb); - set_inuse(m, remainder, remainder_size); - trailer = chunk2mem(remainder); - } - } - - assert (chunksize(p) >= nb); - assert((((size_t)(chunk2mem(p))) % alignment) == 0); - check_inuse_chunk(m, p); - POSTACTION(m); - if (leader != 0) { - internal_free(m, leader); - } - if (trailer != 0) { - internal_free(m, trailer); - } - return chunk2mem(p); - } - } - return 0; -} - -/* ------------------------ comalloc/coalloc support --------------------- */ - -static void** ialloc(mstate m, - size_t n_elements, - size_t* sizes, - int opts, - void* chunks[]) { - /* - This provides common support for independent_X routines, handling - all of the combinations that can result. - - The opts arg has: - bit 0 set if all elements are same size (using sizes[0]) - bit 1 set if elements should be zeroed - */ - - size_t element_size; /* chunksize of each element, if all same */ - size_t contents_size; /* total size of elements */ - size_t array_size; /* request size of pointer array */ - void* mem; /* malloced aggregate space */ - mchunkptr p; /* corresponding chunk */ - size_t remainder_size; /* remaining bytes while splitting */ - void** marray; /* either "chunks" or malloced ptr array */ - mchunkptr array_chunk; /* chunk for malloced ptr array */ - flag_t was_enabled; /* to disable mmap */ - size_t size; - size_t i; - - /* compute array length, if needed */ - if (chunks != 0) { - if (n_elements == 0) - return chunks; /* nothing to do */ - marray = chunks; - array_size = 0; - } - else { - /* if empty req, must still return chunk representing empty array */ - if (n_elements == 0) - return (void**)internal_malloc(m, 0); - marray = 0; - array_size = request2size(n_elements * (sizeof(void*))); - } - - /* compute total element size */ - if (opts & 0x1) { /* all-same-size */ - element_size = request2size(*sizes); - contents_size = n_elements * element_size; - } - else { /* add up all the sizes */ - element_size = 0; - contents_size = 0; - for (i = 0; i != n_elements; ++i) - contents_size += request2size(sizes[i]); - } - - size = contents_size + array_size; - - /* - Allocate the aggregate chunk. First disable direct-mmapping so - malloc won't use it, since we would not be able to later - free/realloc space internal to a segregated mmap region. - */ - was_enabled = use_mmap(m); - disable_mmap(m); - mem = internal_malloc(m, size - CHUNK_OVERHEAD); - if (was_enabled) - enable_mmap(m); - if (mem == 0) - return 0; - - if (PREACTION(m)) return 0; - p = mem2chunk(mem); - remainder_size = chunksize(p); - - assert(!is_mmapped(p)); - - if (opts & 0x2) { /* optionally clear the elements */ - memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size); - } - - /* If not provided, allocate the pointer array as final part of chunk */ - if (marray == 0) { - size_t array_chunk_size; - array_chunk = chunk_plus_offset(p, contents_size); - array_chunk_size = remainder_size - contents_size; - marray = (void**) (chunk2mem(array_chunk)); - set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size); - remainder_size = contents_size; - } - - /* split out elements */ - for (i = 0; ; ++i) { - marray[i] = chunk2mem(p); - if (i != n_elements-1) { - if (element_size != 0) - size = element_size; - else - size = request2size(sizes[i]); - remainder_size -= size; - set_size_and_pinuse_of_inuse_chunk(m, p, size); - p = chunk_plus_offset(p, size); - } - else { /* the final element absorbs any overallocation slop */ - set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size); - break; - } - } - -#if DEBUG - if (marray != chunks) { - /* final element must have exactly exhausted chunk */ - if (element_size != 0) { - assert(remainder_size == element_size); - } - else { - assert(remainder_size == request2size(sizes[i])); - } - check_inuse_chunk(m, mem2chunk(marray)); - } - for (i = 0; i != n_elements; ++i) - check_inuse_chunk(m, mem2chunk(marray[i])); - -#endif /* DEBUG */ - - POSTACTION(m); - return marray; -} - - -/* -------------------------- public routines ---------------------------- */ - -#if !ONLY_MSPACES - -void* dlmalloc(size_t bytes) { - /* - Basic algorithm: - If a small request (< 256 bytes minus per-chunk overhead): - 1. If one exists, use a remainderless chunk in associated smallbin. - (Remainderless means that there are too few excess bytes to - represent as a chunk.) - 2. If it is big enough, use the dv chunk, which is normally the - chunk adjacent to the one used for the most recent small request. - 3. If one exists, split the smallest available chunk in a bin, - saving remainder in dv. - 4. If it is big enough, use the top chunk. - 5. If available, get memory from system and use it - Otherwise, for a large request: - 1. Find the smallest available binned chunk that fits, and use it - if it is better fitting than dv chunk, splitting if necessary. - 2. If better fitting than any binned chunk, use the dv chunk. - 3. If it is big enough, use the top chunk. - 4. If request size >= mmap threshold, try to directly mmap this chunk. - 5. If available, get memory from system and use it - - The ugly goto's here ensure that postaction occurs along all paths. - */ - - if (!PREACTION(gm)) { - void* mem; - size_t nb; - if (bytes <= MAX_SMALL_REQUEST) { - bindex_t idx; - binmap_t smallbits; - nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); - idx = small_index(nb); - smallbits = gm->smallmap >> idx; - - if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ - mchunkptr b, p; - idx += ~smallbits & 1; /* Uses next bin if idx empty */ - b = smallbin_at(gm, idx); - p = b->fd; - assert(chunksize(p) == small_index2size(idx)); - unlink_first_small_chunk(gm, b, p, idx); - set_inuse_and_pinuse(gm, p, small_index2size(idx)); - mem = chunk2mem(p); - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - - else if (nb > gm->dvsize) { - if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ - mchunkptr b, p, r; - size_t rsize; - bindex_t i; - binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); - binmap_t leastbit = least_bit(leftbits); - compute_bit2idx(leastbit, i); - b = smallbin_at(gm, i); - p = b->fd; - assert(chunksize(p) == small_index2size(i)); - unlink_first_small_chunk(gm, b, p, i); - rsize = small_index2size(i) - nb; - /* Fit here cannot be remainderless if 4byte sizes */ - if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) - set_inuse_and_pinuse(gm, p, small_index2size(i)); - else { - set_size_and_pinuse_of_inuse_chunk(gm, p, nb); - r = chunk_plus_offset(p, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - replace_dv(gm, r, rsize); - } - mem = chunk2mem(p); - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - - else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) { - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - } - } - else if (bytes >= MAX_REQUEST) - nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ - else { - nb = pad_request(bytes); - if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) { - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - } - - if (nb <= gm->dvsize) { - size_t rsize = gm->dvsize - nb; - mchunkptr p = gm->dv; - if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ - mchunkptr r = gm->dv = chunk_plus_offset(p, nb); - gm->dvsize = rsize; - set_size_and_pinuse_of_free_chunk(r, rsize); - set_size_and_pinuse_of_inuse_chunk(gm, p, nb); - } - else { /* exhaust dv */ - size_t dvs = gm->dvsize; - gm->dvsize = 0; - gm->dv = 0; - set_inuse_and_pinuse(gm, p, dvs); - } - mem = chunk2mem(p); - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - - else if (nb < gm->topsize) { /* Split top */ - size_t rsize = gm->topsize -= nb; - mchunkptr p = gm->top; - mchunkptr r = gm->top = chunk_plus_offset(p, nb); - r->head = rsize | PINUSE_BIT; - set_size_and_pinuse_of_inuse_chunk(gm, p, nb); - mem = chunk2mem(p); - check_top_chunk(gm, gm->top); - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - - mem = sys_alloc(gm, nb); - - postaction: - POSTACTION(gm); - return mem; - } - - return 0; -} - -void dlfree(void* mem) { - /* - Consolidate freed chunks with preceding or succeeding bordering - free chunks, if they exist, and then place in a bin. Intermixed - with special cases for top, dv, mmapped chunks, and usage errors. - */ - - if (mem != 0) { - mchunkptr p = mem2chunk(mem); -#if FOOTERS - mstate fm = get_mstate_for(p); - if (!ok_magic(fm)) { - USAGE_ERROR_ACTION(fm, p); - return; - } -#else /* FOOTERS */ -#define fm gm -#endif /* FOOTERS */ - if (!PREACTION(fm)) { - check_inuse_chunk(fm, p); - if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { - size_t psize = chunksize(p); - mchunkptr next = chunk_plus_offset(p, psize); - if (!pinuse(p)) { - size_t prevsize = p->prev_foot; - if ((prevsize & IS_MMAPPED_BIT) != 0) { - prevsize &= ~IS_MMAPPED_BIT; - psize += prevsize + MMAP_FOOT_PAD; - if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) - fm->footprint -= psize; - goto postaction; - } - else { - mchunkptr prev = chunk_minus_offset(p, prevsize); - psize += prevsize; - p = prev; - if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ - if (p != fm->dv) { - unlink_chunk(fm, p, prevsize); - } - else if ((next->head & INUSE_BITS) == INUSE_BITS) { - fm->dvsize = psize; - set_free_with_pinuse(p, psize, next); - goto postaction; - } - } - else - goto erroraction; - } - } - - if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { - if (!cinuse(next)) { /* consolidate forward */ - if (next == fm->top) { - size_t tsize = fm->topsize += psize; - fm->top = p; - p->head = tsize | PINUSE_BIT; - if (p == fm->dv) { - fm->dv = 0; - fm->dvsize = 0; - } - if (should_trim(fm, tsize)) - sys_trim(fm, 0); - goto postaction; - } - else if (next == fm->dv) { - size_t dsize = fm->dvsize += psize; - fm->dv = p; - set_size_and_pinuse_of_free_chunk(p, dsize); - goto postaction; - } - else { - size_t nsize = chunksize(next); - psize += nsize; - unlink_chunk(fm, next, nsize); - set_size_and_pinuse_of_free_chunk(p, psize); - if (p == fm->dv) { - fm->dvsize = psize; - goto postaction; - } - } - } - else - set_free_with_pinuse(p, psize, next); - insert_chunk(fm, p, psize); - check_free_chunk(fm, p); - goto postaction; - } - } - erroraction: - USAGE_ERROR_ACTION(fm, p); - postaction: - POSTACTION(fm); - } - } -#if !FOOTERS -#undef fm -#endif /* FOOTERS */ -} - -void* dlcalloc(size_t n_elements, size_t elem_size) { - void* mem; - size_t req = 0; - if (n_elements != 0) { - req = n_elements * elem_size; - if (((n_elements | elem_size) & ~(size_t)0xffff) && - (req / n_elements != elem_size)) - req = MAX_SIZE_T; /* force downstream failure on overflow */ - } - mem = dlmalloc(req); - if (mem != 0 && calloc_must_clear(mem2chunk(mem))) - memset(mem, 0, req); - return mem; -} - -void* dlrealloc(void* oldmem, size_t bytes) { - if (oldmem == 0) - return dlmalloc(bytes); -#ifdef REALLOC_ZERO_BYTES_FREES - if (bytes == 0) { - dlfree(oldmem); - return 0; - } -#endif /* REALLOC_ZERO_BYTES_FREES */ - else { -#if ! FOOTERS - mstate m = gm; -#else /* FOOTERS */ - mstate m = get_mstate_for(mem2chunk(oldmem)); - if (!ok_magic(m)) { - USAGE_ERROR_ACTION(m, oldmem); - return 0; - } -#endif /* FOOTERS */ - return internal_realloc(m, oldmem, bytes); - } -} - -void* dlmemalign(size_t alignment, size_t bytes) { - return internal_memalign(gm, alignment, bytes); -} - -void** dlindependent_calloc(size_t n_elements, size_t elem_size, - void* chunks[]) { - size_t sz = elem_size; /* serves as 1-element array */ - return ialloc(gm, n_elements, &sz, 3, chunks); -} - -void** dlindependent_comalloc(size_t n_elements, size_t sizes[], - void* chunks[]) { - return ialloc(gm, n_elements, sizes, 0, chunks); -} - -void* dlvalloc(size_t bytes) { - size_t pagesz; - init_mparams(); - pagesz = mparams.page_size; - return dlmemalign(pagesz, bytes); -} - -void* dlpvalloc(size_t bytes) { - size_t pagesz; - init_mparams(); - pagesz = mparams.page_size; - return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE)); -} - -int dlmalloc_trim(size_t pad) { - int result = 0; - if (!PREACTION(gm)) { - result = sys_trim(gm, pad); - POSTACTION(gm); - } - return result; -} - -size_t dlmalloc_footprint(void) { - return gm->footprint; -} - -size_t dlmalloc_max_footprint(void) { - return gm->max_footprint; -} - -#if !NO_MALLINFO -struct mallinfo dlmallinfo(void) { - return internal_mallinfo(gm); -} -#endif /* NO_MALLINFO */ - -void dlmalloc_stats() { - internal_malloc_stats(gm); -} - -size_t dlmalloc_usable_size(void* mem) { - if (mem != 0) { - mchunkptr p = mem2chunk(mem); - if (cinuse(p)) - return chunksize(p) - overhead_for(p); - } - return 0; -} - -int dlmallopt(int param_number, int value) { - return change_mparam(param_number, value); -} - -#endif /* !ONLY_MSPACES */ - -/* ----------------------------- user mspaces ---------------------------- */ - -#if MSPACES - -static mstate init_user_mstate(char* tbase, size_t tsize) { - size_t msize = pad_request(sizeof(struct malloc_state)); - mchunkptr mn; - mchunkptr msp = align_as_chunk(tbase); - mstate m = (mstate)(chunk2mem(msp)); - memset(m, 0, msize); - INITIAL_LOCK(&m->mutex); - msp->head = (msize|PINUSE_BIT|CINUSE_BIT); - m->seg.base = m->least_addr = tbase; - m->seg.size = m->footprint = m->max_footprint = tsize; - m->magic = mparams.magic; - m->mflags = mparams.default_mflags; - disable_contiguous(m); - init_bins(m); - mn = next_chunk(mem2chunk(m)); - init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE); - check_top_chunk(m, m->top); - return m; -} - -mspace create_mspace(size_t capacity, int locked) { - mstate m = 0; - size_t msize = pad_request(sizeof(struct malloc_state)); - init_mparams(); /* Ensure pagesize etc initialized */ - - if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { - size_t rs = ((capacity == 0)? mparams.granularity : - (capacity + TOP_FOOT_SIZE + msize)); - size_t tsize = granularity_align(rs); - char* tbase = (char*)(CALL_MMAP(tsize)); - if (tbase != CMFAIL) { - m = init_user_mstate(tbase, tsize); - set_segment_flags(&m->seg, IS_MMAPPED_BIT); - set_lock(m, locked); - } - } - return (mspace)m; -} - -mspace create_mspace_with_base(void* base, size_t capacity, int locked) { - mstate m = 0; - size_t msize = pad_request(sizeof(struct malloc_state)); - init_mparams(); /* Ensure pagesize etc initialized */ - - if (capacity > msize + TOP_FOOT_SIZE && - capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { - m = init_user_mstate((char*)base, capacity); - set_segment_flags(&m->seg, EXTERN_BIT); - set_lock(m, locked); - } - return (mspace)m; -} - -size_t destroy_mspace(mspace msp) { - size_t freed = 0; - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - msegmentptr sp = &ms->seg; - while (sp != 0) { - char* base = sp->base; - size_t size = sp->size; - flag_t flag = get_segment_flags(sp); - sp = sp->next; - if ((flag & IS_MMAPPED_BIT) && !(flag & EXTERN_BIT) && - CALL_MUNMAP(base, size) == 0) - freed += size; - } - } - else { - USAGE_ERROR_ACTION(ms,ms); - } - return freed; -} - -/* - mspace versions of routines are near-clones of the global - versions. This is not so nice but better than the alternatives. -*/ - - -void* mspace_malloc(mspace msp, size_t bytes) { - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - if (!PREACTION(ms)) { - void* mem; - size_t nb; - if (bytes <= MAX_SMALL_REQUEST) { - bindex_t idx; - binmap_t smallbits; - nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); - idx = small_index(nb); - smallbits = ms->smallmap >> idx; - - if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ - mchunkptr b, p; - idx += ~smallbits & 1; /* Uses next bin if idx empty */ - b = smallbin_at(ms, idx); - p = b->fd; - assert(chunksize(p) == small_index2size(idx)); - unlink_first_small_chunk(ms, b, p, idx); - set_inuse_and_pinuse(ms, p, small_index2size(idx)); - mem = chunk2mem(p); - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - - else if (nb > ms->dvsize) { - if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ - mchunkptr b, p, r; - size_t rsize; - bindex_t i; - binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); - binmap_t leastbit = least_bit(leftbits); - compute_bit2idx(leastbit, i); - b = smallbin_at(ms, i); - p = b->fd; - assert(chunksize(p) == small_index2size(i)); - unlink_first_small_chunk(ms, b, p, i); - rsize = small_index2size(i) - nb; - /* Fit here cannot be remainderless if 4byte sizes */ - if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) - set_inuse_and_pinuse(ms, p, small_index2size(i)); - else { - set_size_and_pinuse_of_inuse_chunk(ms, p, nb); - r = chunk_plus_offset(p, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - replace_dv(ms, r, rsize); - } - mem = chunk2mem(p); - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - - else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) { - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - } - } - else if (bytes >= MAX_REQUEST) - nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ - else { - nb = pad_request(bytes); - if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) { - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - } - - if (nb <= ms->dvsize) { - size_t rsize = ms->dvsize - nb; - mchunkptr p = ms->dv; - if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ - mchunkptr r = ms->dv = chunk_plus_offset(p, nb); - ms->dvsize = rsize; - set_size_and_pinuse_of_free_chunk(r, rsize); - set_size_and_pinuse_of_inuse_chunk(ms, p, nb); - } - else { /* exhaust dv */ - size_t dvs = ms->dvsize; - ms->dvsize = 0; - ms->dv = 0; - set_inuse_and_pinuse(ms, p, dvs); - } - mem = chunk2mem(p); - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - - else if (nb < ms->topsize) { /* Split top */ - size_t rsize = ms->topsize -= nb; - mchunkptr p = ms->top; - mchunkptr r = ms->top = chunk_plus_offset(p, nb); - r->head = rsize | PINUSE_BIT; - set_size_and_pinuse_of_inuse_chunk(ms, p, nb); - mem = chunk2mem(p); - check_top_chunk(ms, ms->top); - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - - mem = sys_alloc(ms, nb); - - postaction: - POSTACTION(ms); - return mem; - } - - return 0; -} - -void mspace_free(mspace msp, void* mem) { - if (mem != 0) { - mchunkptr p = mem2chunk(mem); -#if FOOTERS - mstate fm = get_mstate_for(p); -#else /* FOOTERS */ - mstate fm = (mstate)msp; -#endif /* FOOTERS */ - if (!ok_magic(fm)) { - USAGE_ERROR_ACTION(fm, p); - return; - } - if (!PREACTION(fm)) { - check_inuse_chunk(fm, p); - if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { - size_t psize = chunksize(p); - mchunkptr next = chunk_plus_offset(p, psize); - if (!pinuse(p)) { - size_t prevsize = p->prev_foot; - if ((prevsize & IS_MMAPPED_BIT) != 0) { - prevsize &= ~IS_MMAPPED_BIT; - psize += prevsize + MMAP_FOOT_PAD; - if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) - fm->footprint -= psize; - goto postaction; - } - else { - mchunkptr prev = chunk_minus_offset(p, prevsize); - psize += prevsize; - p = prev; - if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ - if (p != fm->dv) { - unlink_chunk(fm, p, prevsize); - } - else if ((next->head & INUSE_BITS) == INUSE_BITS) { - fm->dvsize = psize; - set_free_with_pinuse(p, psize, next); - goto postaction; - } - } - else - goto erroraction; - } - } - - if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { - if (!cinuse(next)) { /* consolidate forward */ - if (next == fm->top) { - size_t tsize = fm->topsize += psize; - fm->top = p; - p->head = tsize | PINUSE_BIT; - if (p == fm->dv) { - fm->dv = 0; - fm->dvsize = 0; - } - if (should_trim(fm, tsize)) - sys_trim(fm, 0); - goto postaction; - } - else if (next == fm->dv) { - size_t dsize = fm->dvsize += psize; - fm->dv = p; - set_size_and_pinuse_of_free_chunk(p, dsize); - goto postaction; - } - else { - size_t nsize = chunksize(next); - psize += nsize; - unlink_chunk(fm, next, nsize); - set_size_and_pinuse_of_free_chunk(p, psize); - if (p == fm->dv) { - fm->dvsize = psize; - goto postaction; - } - } - } - else - set_free_with_pinuse(p, psize, next); - insert_chunk(fm, p, psize); - check_free_chunk(fm, p); - goto postaction; - } - } - erroraction: - USAGE_ERROR_ACTION(fm, p); - postaction: - POSTACTION(fm); - } - } -} - -void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) { - void* mem; - size_t req = 0; - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - if (n_elements != 0) { - req = n_elements * elem_size; - if (((n_elements | elem_size) & ~(size_t)0xffff) && - (req / n_elements != elem_size)) - req = MAX_SIZE_T; /* force downstream failure on overflow */ - } - mem = internal_malloc(ms, req); - if (mem != 0 && calloc_must_clear(mem2chunk(mem))) - memset(mem, 0, req); - return mem; -} - -void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { - if (oldmem == 0) - return mspace_malloc(msp, bytes); -#ifdef REALLOC_ZERO_BYTES_FREES - if (bytes == 0) { - mspace_free(msp, oldmem); - return 0; - } -#endif /* REALLOC_ZERO_BYTES_FREES */ - else { -#if FOOTERS - mchunkptr p = mem2chunk(oldmem); - mstate ms = get_mstate_for(p); -#else /* FOOTERS */ - mstate ms = (mstate)msp; -#endif /* FOOTERS */ - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - return internal_realloc(ms, oldmem, bytes); - } -} - -void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) { - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - return internal_memalign(ms, alignment, bytes); -} - -void** mspace_independent_calloc(mspace msp, size_t n_elements, - size_t elem_size, void* chunks[]) { - size_t sz = elem_size; /* serves as 1-element array */ - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - return ialloc(ms, n_elements, &sz, 3, chunks); -} - -void** mspace_independent_comalloc(mspace msp, size_t n_elements, - size_t sizes[], void* chunks[]) { - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - return ialloc(ms, n_elements, sizes, 0, chunks); -} - -int mspace_trim(mspace msp, size_t pad) { - int result = 0; - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - if (!PREACTION(ms)) { - result = sys_trim(ms, pad); - POSTACTION(ms); - } - } - else { - USAGE_ERROR_ACTION(ms,ms); - } - return result; -} - -void mspace_malloc_stats(mspace msp) { - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - internal_malloc_stats(ms); - } - else { - USAGE_ERROR_ACTION(ms,ms); - } -} - -size_t mspace_footprint(mspace msp) { - size_t result; - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - result = ms->footprint; - } - USAGE_ERROR_ACTION(ms,ms); - return result; -} - - -size_t mspace_max_footprint(mspace msp) { - size_t result; - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - result = ms->max_footprint; - } - USAGE_ERROR_ACTION(ms,ms); - return result; -} - - -#if !NO_MALLINFO -struct mallinfo mspace_mallinfo(mspace msp) { - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - } - return internal_mallinfo(ms); -} -#endif /* NO_MALLINFO */ - -int mspace_mallopt(int param_number, int value) { - return change_mparam(param_number, value); -} - -#endif /* MSPACES */ - -/* -------------------- Alternative MORECORE functions ------------------- */ - -/* - Guidelines for creating a custom version of MORECORE: - - * For best performance, MORECORE should allocate in multiples of pagesize. - * MORECORE may allocate more memory than requested. (Or even less, - but this will usually result in a malloc failure.) - * MORECORE must not allocate memory when given argument zero, but - instead return one past the end address of memory from previous - nonzero call. - * For best performance, consecutive calls to MORECORE with positive - arguments should return increasing addresses, indicating that - space has been contiguously extended. - * Even though consecutive calls to MORECORE need not return contiguous - addresses, it must be OK for malloc'ed chunks to span multiple - regions in those cases where they do happen to be contiguous. - * MORECORE need not handle negative arguments -- it may instead - just return MFAIL when given negative arguments. - Negative arguments are always multiples of pagesize. MORECORE - must not misinterpret negative args as large positive unsigned - args. You can suppress all such calls from even occurring by defining - MORECORE_CANNOT_TRIM, - - As an example alternative MORECORE, here is a custom allocator - kindly contributed for pre-OSX macOS. It uses virtually but not - necessarily physically contiguous non-paged memory (locked in, - present and won't get swapped out). You can use it by uncommenting - this section, adding some #includes, and setting up the appropriate - defines above: - - #define MORECORE osMoreCore - - There is also a shutdown routine that should somehow be called for - cleanup upon program exit. - - #define MAX_POOL_ENTRIES 100 - #define MINIMUM_MORECORE_SIZE (64 * 1024U) - static int next_os_pool; - void *our_os_pools[MAX_POOL_ENTRIES]; - - void *osMoreCore(int size) - { - void *ptr = 0; - static void *sbrk_top = 0; - - if (size > 0) - { - if (size < MINIMUM_MORECORE_SIZE) - size = MINIMUM_MORECORE_SIZE; - if (CurrentExecutionLevel() == kTaskLevel) - ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0); - if (ptr == 0) - { - return (void *) MFAIL; - } - // save ptrs so they can be freed during cleanup - our_os_pools[next_os_pool] = ptr; - next_os_pool++; - ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK); - sbrk_top = (char *) ptr + size; - return ptr; - } - else if (size < 0) - { - // we don't currently support shrink behavior - return (void *) MFAIL; - } - else - { - return sbrk_top; - } - } - - // cleanup any allocated memory pools - // called as last thing before shutting down driver - - void osCleanupMem(void) - { - void **ptr; - - for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++) - if (*ptr) - { - PoolDeallocate(*ptr); - *ptr = 0; - } - } - -*/ - - -/* ----------------------------------------------------------------------- -History: - V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee) - * Add max_footprint functions - * Ensure all appropriate literals are size_t - * Fix conditional compilation problem for some #define settings - * Avoid concatenating segments with the one provided - in create_mspace_with_base - * Rename some variables to avoid compiler shadowing warnings - * Use explicit lock initialization. - * Better handling of sbrk interference. - * Simplify and fix segment insertion, trimming and mspace_destroy - * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x - * Thanks especially to Dennis Flanagan for help on these. - - V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee) - * Fix memalign brace error. - - V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee) - * Fix improper #endif nesting in C++ - * Add explicit casts needed for C++ - - V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee) - * Use trees for large bins - * Support mspaces - * Use segments to unify sbrk-based and mmap-based system allocation, - removing need for emulation on most platforms without sbrk. - * Default safety checks - * Optional footer checks. Thanks to William Robertson for the idea. - * Internal code refactoring - * Incorporate suggestions and platform-specific changes. - Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas, - Aaron Bachmann, Emery Berger, and others. - * Speed up non-fastbin processing enough to remove fastbins. - * Remove useless cfree() to avoid conflicts with other apps. - * Remove internal memcpy, memset. Compilers handle builtins better. - * Remove some options that no one ever used and rename others. - - V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee) - * Fix malloc_state bitmap array misdeclaration - - V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee) - * Allow tuning of FIRST_SORTED_BIN_SIZE - * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte. - * Better detection and support for non-contiguousness of MORECORE. - Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger - * Bypass most of malloc if no frees. Thanks To Emery Berger. - * Fix freeing of old top non-contiguous chunk im sysmalloc. - * Raised default trim and map thresholds to 256K. - * Fix mmap-related #defines. Thanks to Lubos Lunak. - * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield. - * Branch-free bin calculation - * Default trim and mmap thresholds now 256K. - - V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee) - * Introduce independent_comalloc and independent_calloc. - Thanks to Michael Pachos for motivation and help. - * Make optional .h file available - * Allow > 2GB requests on 32bit systems. - * new WIN32 sbrk, mmap, munmap, lock code from . - Thanks also to Andreas Mueller , - and Anonymous. - * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for - helping test this.) - * memalign: check alignment arg - * realloc: don't try to shift chunks backwards, since this - leads to more fragmentation in some programs and doesn't - seem to help in any others. - * Collect all cases in malloc requiring system memory into sysmalloc - * Use mmap as backup to sbrk - * Place all internal state in malloc_state - * Introduce fastbins (although similar to 2.5.1) - * Many minor tunings and cosmetic improvements - * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK - * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS - Thanks to Tony E. Bennett and others. - * Include errno.h to support default failure action. - - V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee) - * return null for negative arguments - * Added Several WIN32 cleanups from Martin C. Fong - * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h' - (e.g. WIN32 platforms) - * Cleanup header file inclusion for WIN32 platforms - * Cleanup code to avoid Microsoft Visual C++ compiler complaints - * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing - memory allocation routines - * Set 'malloc_getpagesize' for WIN32 platforms (needs more work) - * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to - usage of 'assert' in non-WIN32 code - * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to - avoid infinite loop - * Always call 'fREe()' rather than 'free()' - - V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee) - * Fixed ordering problem with boundary-stamping - - V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee) - * Added pvalloc, as recommended by H.J. Liu - * Added 64bit pointer support mainly from Wolfram Gloger - * Added anonymously donated WIN32 sbrk emulation - * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen - * malloc_extend_top: fix mask error that caused wastage after - foreign sbrks - * Add linux mremap support code from HJ Liu - - V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee) - * Integrated most documentation with the code. - * Add support for mmap, with help from - Wolfram Gloger (Gloger@lrz.uni-muenchen.de). - * Use last_remainder in more cases. - * Pack bins using idea from colin@nyx10.cs.du.edu - * Use ordered bins instead of best-fit threshold - * Eliminate block-local decls to simplify tracing and debugging. - * Support another case of realloc via move into top - * Fix error occurring when initial sbrk_base not word-aligned. - * Rely on page size for units instead of SBRK_UNIT to - avoid surprises about sbrk alignment conventions. - * Add mallinfo, mallopt. Thanks to Raymond Nijssen - (raymond@es.ele.tue.nl) for the suggestion. - * Add `pad' argument to malloc_trim and top_pad mallopt parameter. - * More precautions for cases where other routines call sbrk, - courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de). - * Added macros etc., allowing use in linux libc from - H.J. Lu (hjl@gnu.ai.mit.edu) - * Inverted this history list - - V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee) - * Re-tuned and fixed to behave more nicely with V2.6.0 changes. - * Removed all preallocation code since under current scheme - the work required to undo bad preallocations exceeds - the work saved in good cases for most test programs. - * No longer use return list or unconsolidated bins since - no scheme using them consistently outperforms those that don't - given above changes. - * Use best fit for very large chunks to prevent some worst-cases. - * Added some support for debugging - - V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee) - * Removed footers when chunks are in use. Thanks to - Paul Wilson (wilson@cs.texas.edu) for the suggestion. - - V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee) - * Added malloc_trim, with help from Wolfram Gloger - (wmglo@Dent.MED.Uni-Muenchen.DE). - - V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g) - - V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g) - * realloc: try to expand in both directions - * malloc: swap order of clean-bin strategy; - * realloc: only conditionally expand backwards - * Try not to scavenge used bins - * Use bin counts as a guide to preallocation - * Occasionally bin return list chunks in first scan - * Add a few optimizations from colin@nyx10.cs.du.edu - - V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g) - * faster bin computation & slightly different binning - * merged all consolidations to one part of malloc proper - (eliminating old malloc_find_space & malloc_clean_bin) - * Scan 2 returns chunks (not just 1) - * Propagate failure in realloc if malloc returns 0 - * Add stuff to allow compilation on non-ANSI compilers - from kpv@research.att.com - - V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu) - * removed potential for odd address access in prev_chunk - * removed dependency on getpagesize.h - * misc cosmetics and a bit more internal documentation - * anticosmetics: mangled names in macros to evade debugger strangeness - * tested on sparc, hp-700, dec-mips, rs6000 - with gcc & native cc (hp, dec only) allowing - Detlefs & Zorn comparison study (in SIGPLAN Notices.) - - Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu) - * Based loosely on libg++-1.2X malloc. (It retains some of the overall - structure of old version, but most details differ.) - -*/ diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/frv/eabi.S b/ruby/ext/fiddle/libffi-3.2.1/src/frv/eabi.S deleted file mode 100644 index 379ea4bb0..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/frv/eabi.S +++ /dev/null @@ -1,128 +0,0 @@ -/* ----------------------------------------------------------------------- - eabi.S - Copyright (c) 2004 Anthony Green - - FR-V Assembly glue. - - 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 AUTHOR 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - .globl ffi_prep_args_EABI - - .text - .p2align 4 - .globl ffi_call_EABI - .type ffi_call_EABI, @function - - # gr8 : ffi_prep_args - # gr9 : &ecif - # gr10: cif->bytes - # gr11: fig->flags - # gr12: ecif.rvalue - # gr13: fn - -ffi_call_EABI: - addi sp, #-80, sp - sti fp, @(sp, #24) - addi sp, #24, fp - movsg lr, gr5 - - /* Make room for the new arguments. */ - /* subi sp, fp, gr10 */ - - /* Store return address and incoming args on stack. */ - sti gr5, @(fp, #8) - sti gr8, @(fp, #-4) - sti gr9, @(fp, #-8) - sti gr10, @(fp, #-12) - sti gr11, @(fp, #-16) - sti gr12, @(fp, #-20) - sti gr13, @(fp, #-24) - - sub sp, gr10, sp - - /* Call ffi_prep_args. */ - ldi @(fp, #-4), gr4 - addi sp, #0, gr8 - ldi @(fp, #-8), gr9 -#ifdef __FRV_FDPIC__ - ldd @(gr4, gr0), gr14 - calll @(gr14, gr0) -#else - calll @(gr4, gr0) -#endif - - /* ffi_prep_args returns the new stack pointer. */ - mov gr8, gr4 - - ldi @(sp, #0), gr8 - ldi @(sp, #4), gr9 - ldi @(sp, #8), gr10 - ldi @(sp, #12), gr11 - ldi @(sp, #16), gr12 - ldi @(sp, #20), gr13 - - /* Always copy the return value pointer into the hidden - parameter register. This is only strictly necessary - when we're returning an aggregate type, but it doesn't - hurt to do this all the time, and it saves a branch. */ - ldi @(fp, #-20), gr3 - - /* Use the ffi_prep_args return value for the new sp. */ - mov gr4, sp - - /* Call the target function. */ - ldi @(fp, -24), gr4 -#ifdef __FRV_FDPIC__ - ldd @(gr4, gr0), gr14 - calll @(gr14, gr0) -#else - calll @(gr4, gr0) -#endif - - /* Store the result. */ - ldi @(fp, #-16), gr10 /* fig->flags */ - ldi @(fp, #-20), gr4 /* ecif.rvalue */ - - /* Is the return value stored in two registers? */ - cmpi gr10, #8, icc0 - bne icc0, 0, .L2 - /* Yes, save them. */ - sti gr8, @(gr4, #0) - sti gr9, @(gr4, #4) - bra .L3 -.L2: - /* Is the return value a structure? */ - cmpi gr10, #-1, icc0 - beq icc0, 0, .L3 - /* No, save a 4 byte return value. */ - sti gr8, @(gr4, #0) -.L3: - - /* Restore the stack, and return. */ - ldi @(fp, 8), gr5 - ld @(fp, gr0), fp - addi sp,#80,sp - jmpl @(gr5,gr0) - .size ffi_call_EABI, .-ffi_call_EABI - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/frv/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/frv/ffi.c deleted file mode 100644 index 5698c89c3..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/frv/ffi.c +++ /dev/null @@ -1,292 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (C) 2004 Anthony Green - Copyright (C) 2007 Free Software Foundation, Inc. - Copyright (C) 2008 Red Hat, Inc. - - FR-V Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -void *ffi_prep_args(char *stack, extended_cif *ecif) -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - register int count = 0; - - p_argv = ecif->avalue; - argp = stack; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); - i--, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - - if ((*p_arg)->type == FFI_TYPE_STRUCT) - { - z = sizeof(void*); - *(void **) argp = *p_argv; - } - /* if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (count > 24) - { - // This is going on the stack. Turn it into a double. - *(double *) argp = (double) *(float*)(* p_argv); - z = sizeof(double); - } - else - *(void **) argp = *(void **)(* p_argv); - } */ - else if (z < sizeof(int)) - { - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - } - else if (z == sizeof(int)) - { - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - } - else - { - memcpy(argp, *p_argv, z); - } - p_argv++; - argp += z; - count += z; - } - - return (stack + ((count > 24) ? 24 : ALIGN_DOWN(count, 8))); -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - if (cif->rtype->type == FFI_TYPE_STRUCT) - cif->flags = -1; - else - cif->flags = cif->rtype->size; - - cif->bytes = ALIGN (cif->bytes, 8); - - return FFI_OK; -} - -extern void ffi_call_EABI(void *(*)(char *, extended_cif *), - extended_cif *, - unsigned, unsigned, - unsigned *, - void (*fn)(void)); - -void ffi_call(ffi_cif *cif, - void (*fn)(void), - void *rvalue, - void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - - switch (cif->abi) - { - case FFI_EABI: - ffi_call_EABI(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; - default: - FFI_ASSERT(0); - break; - } -} - -void ffi_closure_eabi (unsigned arg1, unsigned arg2, unsigned arg3, - unsigned arg4, unsigned arg5, unsigned arg6) -{ - /* This function is called by a trampoline. The trampoline stows a - pointer to the ffi_closure object in gr7. We must save this - pointer in a place that will persist while we do our work. */ - register ffi_closure *creg __asm__ ("gr7"); - ffi_closure *closure = creg; - - /* Arguments that don't fit in registers are found on the stack - at a fixed offset above the current frame pointer. */ - register char *frame_pointer __asm__ ("fp"); - char *stack_args = frame_pointer + 16; - - /* Lay the register arguments down in a continuous chunk of memory. */ - unsigned register_args[6] = - { arg1, arg2, arg3, arg4, arg5, arg6 }; - - ffi_cif *cif = closure->cif; - ffi_type **arg_types = cif->arg_types; - void **avalue = alloca (cif->nargs * sizeof(void *)); - char *ptr = (char *) register_args; - int i; - - /* Find the address of each argument. */ - for (i = 0; i < cif->nargs; i++) - { - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - avalue[i] = ptr + 3; - break; - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - avalue[i] = ptr + 2; - break; - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_FLOAT: - avalue[i] = ptr; - break; - case FFI_TYPE_STRUCT: - avalue[i] = *(void**)ptr; - break; - default: - /* This is an 8-byte value. */ - avalue[i] = ptr; - ptr += 4; - break; - } - ptr += 4; - - /* If we've handled more arguments than fit in registers, - start looking at the those passed on the stack. */ - if (ptr == ((char *)register_args + (6*4))) - ptr = stack_args; - } - - /* Invoke the closure. */ - if (cif->rtype->type == FFI_TYPE_STRUCT) - { - /* The caller allocates space for the return structure, and - passes a pointer to this space in gr3. Use this value directly - as the return value. */ - register void *return_struct_ptr __asm__("gr3"); - (closure->fun) (cif, return_struct_ptr, avalue, closure->user_data); - } - else - { - /* Allocate space for the return value and call the function. */ - long long rvalue; - (closure->fun) (cif, &rvalue, avalue, closure->user_data); - - /* Functions return 4-byte or smaller results in gr8. 8-byte - values also use gr9. We fill the both, even for small return - values, just to avoid a branch. */ - asm ("ldi @(%0, #0), gr8" : : "r" (&rvalue)); - asm ("ldi @(%0, #0), gr9" : : "r" (&((int *) &rvalue)[1])); - } -} - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp = (unsigned int *) &closure->tramp[0]; - unsigned long fn = (long) ffi_closure_eabi; - unsigned long cls = (long) codeloc; -#ifdef __FRV_FDPIC__ - register void *got __asm__("gr15"); -#endif - int i; - - fn = (unsigned long) ffi_closure_eabi; - -#ifdef __FRV_FDPIC__ - tramp[0] = &((unsigned int *)codeloc)[2]; - tramp[1] = got; - tramp[2] = 0x8cfc0000 + (fn & 0xffff); /* setlos lo(fn), gr6 */ - tramp[3] = 0x8efc0000 + (cls & 0xffff); /* setlos lo(cls), gr7 */ - tramp[4] = 0x8cf80000 + (fn >> 16); /* sethi hi(fn), gr6 */ - tramp[5] = 0x8ef80000 + (cls >> 16); /* sethi hi(cls), gr7 */ - tramp[6] = 0x9cc86000; /* ldi @(gr6, #0), gr14 */ - tramp[7] = 0x8030e000; /* jmpl @(gr14, gr0) */ -#else - tramp[0] = 0x8cfc0000 + (fn & 0xffff); /* setlos lo(fn), gr6 */ - tramp[1] = 0x8efc0000 + (cls & 0xffff); /* setlos lo(cls), gr7 */ - tramp[2] = 0x8cf80000 + (fn >> 16); /* sethi hi(fn), gr6 */ - tramp[3] = 0x8ef80000 + (cls >> 16); /* sethi hi(cls), gr7 */ - tramp[4] = 0x80300006; /* jmpl @(gr0, gr6) */ -#endif - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - /* Cache flushing. */ - for (i = 0; i < FFI_TRAMPOLINE_SIZE; i++) - __asm__ volatile ("dcf @(%0,%1)\n\tici @(%2,%1)" :: "r" (tramp), "r" (i), - "r" (codeloc)); - - return FFI_OK; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/frv/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/frv/ffitarget.h deleted file mode 100644 index d42540e53..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/frv/ffitarget.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 1996-2004 Red Hat, Inc. - Target configuration macros for FR-V - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -/* ---- System specific configurations ----------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_EABI, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_EABI -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_NATIVE_RAW_API 0 - -#ifdef __FRV_FDPIC__ -/* Trampolines are 8 4-byte instructions long. */ -#define FFI_TRAMPOLINE_SIZE (8*4) -#else -/* Trampolines are 5 4-byte instructions long. */ -#define FFI_TRAMPOLINE_SIZE (5*4) -#endif - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/ia64/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/ia64/ffi.c deleted file mode 100644 index b77a836dd..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/ia64/ffi.c +++ /dev/null @@ -1,586 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1998, 2007, 2008, 2012 Red Hat, Inc. - Copyright (c) 2000 Hewlett Packard Company - Copyright (c) 2011 Anthony Green - - IA64 Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -#include -#include -#include - -#include "ia64_flags.h" - -/* A 64-bit pointer value. In LP64 mode, this is effectively a plain - pointer. In ILP32 mode, it's a pointer that's been extended to - 64 bits by "addp4". */ -typedef void *PTR64 __attribute__((mode(DI))); - -/* Memory image of fp register contents. This is the implementation - specific format used by ldf.fill/stf.spill. All we care about is - that it wants a 16 byte aligned slot. */ -typedef struct -{ - UINT64 x[2] __attribute__((aligned(16))); -} fpreg; - - -/* The stack layout given to ffi_call_unix and ffi_closure_unix_inner. */ - -struct ia64_args -{ - fpreg fp_regs[8]; /* Contents of 8 fp arg registers. */ - UINT64 gp_regs[8]; /* Contents of 8 gp arg registers. */ - UINT64 other_args[]; /* Arguments passed on stack, variable size. */ -}; - - -/* Adjust ADDR, a pointer to an 8 byte slot, to point to the low LEN bytes. */ - -static inline void * -endian_adjust (void *addr, size_t len) -{ -#ifdef __BIG_ENDIAN__ - return addr + (8 - len); -#else - return addr; -#endif -} - -/* Store VALUE to ADDR in the current cpu implementation's fp spill format. - This is a macro instead of a function, so that it works for all 3 floating - point types without type conversions. Type conversion to long double breaks - the denorm support. */ - -#define stf_spill(addr, value) \ - asm ("stf.spill %0 = %1%P0" : "=m" (*addr) : "f"(value)); - -/* Load a value from ADDR, which is in the current cpu implementation's - fp spill format. As above, this must also be a macro. */ - -#define ldf_fill(result, addr) \ - asm ("ldf.fill %0 = %1%P1" : "=f"(result) : "m"(*addr)); - -/* Return the size of the C type associated with with TYPE. Which will - be one of the FFI_IA64_TYPE_HFA_* values. */ - -static size_t -hfa_type_size (int type) -{ - switch (type) - { - case FFI_IA64_TYPE_HFA_FLOAT: - return sizeof(float); - case FFI_IA64_TYPE_HFA_DOUBLE: - return sizeof(double); - case FFI_IA64_TYPE_HFA_LDOUBLE: - return sizeof(__float80); - default: - abort (); - } -} - -/* Load from ADDR a value indicated by TYPE. Which will be one of - the FFI_IA64_TYPE_HFA_* values. */ - -static void -hfa_type_load (fpreg *fpaddr, int type, void *addr) -{ - switch (type) - { - case FFI_IA64_TYPE_HFA_FLOAT: - stf_spill (fpaddr, *(float *) addr); - return; - case FFI_IA64_TYPE_HFA_DOUBLE: - stf_spill (fpaddr, *(double *) addr); - return; - case FFI_IA64_TYPE_HFA_LDOUBLE: - stf_spill (fpaddr, *(__float80 *) addr); - return; - default: - abort (); - } -} - -/* Load VALUE into ADDR as indicated by TYPE. Which will be one of - the FFI_IA64_TYPE_HFA_* values. */ - -static void -hfa_type_store (int type, void *addr, fpreg *fpaddr) -{ - switch (type) - { - case FFI_IA64_TYPE_HFA_FLOAT: - { - float result; - ldf_fill (result, fpaddr); - *(float *) addr = result; - break; - } - case FFI_IA64_TYPE_HFA_DOUBLE: - { - double result; - ldf_fill (result, fpaddr); - *(double *) addr = result; - break; - } - case FFI_IA64_TYPE_HFA_LDOUBLE: - { - __float80 result; - ldf_fill (result, fpaddr); - *(__float80 *) addr = result; - break; - } - default: - abort (); - } -} - -/* Is TYPE a struct containing floats, doubles, or extended doubles, - all of the same fp type? If so, return the element type. Return - FFI_TYPE_VOID if not. */ - -static int -hfa_element_type (ffi_type *type, int nested) -{ - int element = FFI_TYPE_VOID; - - switch (type->type) - { - case FFI_TYPE_FLOAT: - /* We want to return VOID for raw floating-point types, but the - synthetic HFA type if we're nested within an aggregate. */ - if (nested) - element = FFI_IA64_TYPE_HFA_FLOAT; - break; - - case FFI_TYPE_DOUBLE: - /* Similarly. */ - if (nested) - element = FFI_IA64_TYPE_HFA_DOUBLE; - break; - - case FFI_TYPE_LONGDOUBLE: - /* Similarly, except that that HFA is true for double extended, - but not quad precision. Both have sizeof == 16, so tell the - difference based on the precision. */ - if (LDBL_MANT_DIG == 64 && nested) - element = FFI_IA64_TYPE_HFA_LDOUBLE; - break; - - case FFI_TYPE_STRUCT: - { - ffi_type **ptr = &type->elements[0]; - - for (ptr = &type->elements[0]; *ptr ; ptr++) - { - int sub_element = hfa_element_type (*ptr, 1); - if (sub_element == FFI_TYPE_VOID) - return FFI_TYPE_VOID; - - if (element == FFI_TYPE_VOID) - element = sub_element; - else if (element != sub_element) - return FFI_TYPE_VOID; - } - } - break; - - default: - return FFI_TYPE_VOID; - } - - return element; -} - - -/* Perform machine dependent cif processing. */ - -ffi_status -ffi_prep_cif_machdep(ffi_cif *cif) -{ - int flags; - - /* Adjust cif->bytes to include space for the bits of the ia64_args frame - that precedes the integer register portion. The estimate that the - generic bits did for the argument space required is good enough for the - integer component. */ - cif->bytes += offsetof(struct ia64_args, gp_regs[0]); - if (cif->bytes < sizeof(struct ia64_args)) - cif->bytes = sizeof(struct ia64_args); - - /* Set the return type flag. */ - flags = cif->rtype->type; - switch (cif->rtype->type) - { - case FFI_TYPE_LONGDOUBLE: - /* Leave FFI_TYPE_LONGDOUBLE as meaning double extended precision, - and encode quad precision as a two-word integer structure. */ - if (LDBL_MANT_DIG != 64) - flags = FFI_IA64_TYPE_SMALL_STRUCT | (16 << 8); - break; - - case FFI_TYPE_STRUCT: - { - size_t size = cif->rtype->size; - int hfa_type = hfa_element_type (cif->rtype, 0); - - if (hfa_type != FFI_TYPE_VOID) - { - size_t nelts = size / hfa_type_size (hfa_type); - if (nelts <= 8) - flags = hfa_type | (size << 8); - } - else - { - if (size <= 32) - flags = FFI_IA64_TYPE_SMALL_STRUCT | (size << 8); - } - } - break; - - default: - break; - } - cif->flags = flags; - - return FFI_OK; -} - -extern int ffi_call_unix (struct ia64_args *, PTR64, void (*)(void), UINT64); - -void -ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - struct ia64_args *stack; - long i, avn, gpcount, fpcount; - ffi_type **p_arg; - - FFI_ASSERT (cif->abi == FFI_UNIX); - - /* If we have no spot for a return value, make one. */ - if (rvalue == NULL && cif->rtype->type != FFI_TYPE_VOID) - rvalue = alloca (cif->rtype->size); - - /* Allocate the stack frame. */ - stack = alloca (cif->bytes); - - gpcount = fpcount = 0; - avn = cif->nargs; - for (i = 0, p_arg = cif->arg_types; i < avn; i++, p_arg++) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - stack->gp_regs[gpcount++] = *(SINT8 *)avalue[i]; - break; - case FFI_TYPE_UINT8: - stack->gp_regs[gpcount++] = *(UINT8 *)avalue[i]; - break; - case FFI_TYPE_SINT16: - stack->gp_regs[gpcount++] = *(SINT16 *)avalue[i]; - break; - case FFI_TYPE_UINT16: - stack->gp_regs[gpcount++] = *(UINT16 *)avalue[i]; - break; - case FFI_TYPE_SINT32: - stack->gp_regs[gpcount++] = *(SINT32 *)avalue[i]; - break; - case FFI_TYPE_UINT32: - stack->gp_regs[gpcount++] = *(UINT32 *)avalue[i]; - break; - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - stack->gp_regs[gpcount++] = *(UINT64 *)avalue[i]; - break; - - case FFI_TYPE_POINTER: - stack->gp_regs[gpcount++] = (UINT64)(PTR64) *(void **)avalue[i]; - break; - - case FFI_TYPE_FLOAT: - if (gpcount < 8 && fpcount < 8) - stf_spill (&stack->fp_regs[fpcount++], *(float *)avalue[i]); - { - UINT32 tmp; - memcpy (&tmp, avalue[i], sizeof (UINT32)); - stack->gp_regs[gpcount++] = tmp; - } - break; - - case FFI_TYPE_DOUBLE: - if (gpcount < 8 && fpcount < 8) - stf_spill (&stack->fp_regs[fpcount++], *(double *)avalue[i]); - memcpy (&stack->gp_regs[gpcount++], avalue[i], sizeof (UINT64)); - break; - - case FFI_TYPE_LONGDOUBLE: - if (gpcount & 1) - gpcount++; - if (LDBL_MANT_DIG == 64 && gpcount < 8 && fpcount < 8) - stf_spill (&stack->fp_regs[fpcount++], *(__float80 *)avalue[i]); - memcpy (&stack->gp_regs[gpcount], avalue[i], 16); - gpcount += 2; - break; - - case FFI_TYPE_STRUCT: - { - size_t size = (*p_arg)->size; - size_t align = (*p_arg)->alignment; - int hfa_type = hfa_element_type (*p_arg, 0); - - FFI_ASSERT (align <= 16); - if (align == 16 && (gpcount & 1)) - gpcount++; - - if (hfa_type != FFI_TYPE_VOID) - { - size_t hfa_size = hfa_type_size (hfa_type); - size_t offset = 0; - size_t gp_offset = gpcount * 8; - - while (fpcount < 8 - && offset < size - && gp_offset < 8 * 8) - { - hfa_type_load (&stack->fp_regs[fpcount], hfa_type, - avalue[i] + offset); - offset += hfa_size; - gp_offset += hfa_size; - fpcount += 1; - } - } - - memcpy (&stack->gp_regs[gpcount], avalue[i], size); - gpcount += (size + 7) / 8; - } - break; - - default: - abort (); - } - } - - ffi_call_unix (stack, rvalue, fn, cif->flags); -} - -/* Closures represent a pair consisting of a function pointer, and - some user data. A closure is invoked by reinterpreting the closure - as a function pointer, and branching to it. Thus we can make an - interpreted function callable as a C function: We turn the - interpreter itself, together with a pointer specifying the - interpreted procedure, into a closure. - - For IA64, function pointer are already pairs consisting of a code - pointer, and a gp pointer. The latter is needed to access global - variables. Here we set up such a pair as the first two words of - the closure (in the "trampoline" area), but we replace the gp - pointer with a pointer to the closure itself. We also add the real - gp pointer to the closure. This allows the function entry code to - both retrieve the user data, and to restore the correct gp pointer. */ - -extern void ffi_closure_unix (); - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - /* The layout of a function descriptor. A C function pointer really - points to one of these. */ - struct ia64_fd - { - UINT64 code_pointer; - UINT64 gp; - }; - - struct ffi_ia64_trampoline_struct - { - UINT64 code_pointer; /* Pointer to ffi_closure_unix. */ - UINT64 fake_gp; /* Pointer to closure, installed as gp. */ - UINT64 real_gp; /* Real gp value. */ - }; - - struct ffi_ia64_trampoline_struct *tramp; - struct ia64_fd *fd; - - if (cif->abi != FFI_UNIX) - return FFI_BAD_ABI; - - tramp = (struct ffi_ia64_trampoline_struct *)closure->tramp; - fd = (struct ia64_fd *)(void *)ffi_closure_unix; - - tramp->code_pointer = fd->code_pointer; - tramp->real_gp = fd->gp; - tramp->fake_gp = (UINT64)(PTR64)codeloc; - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - - -UINT64 -ffi_closure_unix_inner (ffi_closure *closure, struct ia64_args *stack, - void *rvalue, void *r8) -{ - ffi_cif *cif; - void **avalue; - ffi_type **p_arg; - long i, avn, gpcount, fpcount; - - cif = closure->cif; - avn = cif->nargs; - avalue = alloca (avn * sizeof (void *)); - - /* If the structure return value is passed in memory get that location - from r8 so as to pass the value directly back to the caller. */ - if (cif->flags == FFI_TYPE_STRUCT) - rvalue = r8; - - gpcount = fpcount = 0; - for (i = 0, p_arg = cif->arg_types; i < avn; i++, p_arg++) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - avalue[i] = endian_adjust(&stack->gp_regs[gpcount++], 1); - break; - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - avalue[i] = endian_adjust(&stack->gp_regs[gpcount++], 2); - break; - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - avalue[i] = endian_adjust(&stack->gp_regs[gpcount++], 4); - break; - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - avalue[i] = &stack->gp_regs[gpcount++]; - break; - case FFI_TYPE_POINTER: - avalue[i] = endian_adjust(&stack->gp_regs[gpcount++], sizeof(void*)); - break; - - case FFI_TYPE_FLOAT: - if (gpcount < 8 && fpcount < 8) - { - fpreg *addr = &stack->fp_regs[fpcount++]; - float result; - avalue[i] = addr; - ldf_fill (result, addr); - *(float *)addr = result; - } - else - avalue[i] = endian_adjust(&stack->gp_regs[gpcount], 4); - gpcount++; - break; - - case FFI_TYPE_DOUBLE: - if (gpcount < 8 && fpcount < 8) - { - fpreg *addr = &stack->fp_regs[fpcount++]; - double result; - avalue[i] = addr; - ldf_fill (result, addr); - *(double *)addr = result; - } - else - avalue[i] = &stack->gp_regs[gpcount]; - gpcount++; - break; - - case FFI_TYPE_LONGDOUBLE: - if (gpcount & 1) - gpcount++; - if (LDBL_MANT_DIG == 64 && gpcount < 8 && fpcount < 8) - { - fpreg *addr = &stack->fp_regs[fpcount++]; - __float80 result; - avalue[i] = addr; - ldf_fill (result, addr); - *(__float80 *)addr = result; - } - else - avalue[i] = &stack->gp_regs[gpcount]; - gpcount += 2; - break; - - case FFI_TYPE_STRUCT: - { - size_t size = (*p_arg)->size; - size_t align = (*p_arg)->alignment; - int hfa_type = hfa_element_type (*p_arg, 0); - - FFI_ASSERT (align <= 16); - if (align == 16 && (gpcount & 1)) - gpcount++; - - if (hfa_type != FFI_TYPE_VOID) - { - size_t hfa_size = hfa_type_size (hfa_type); - size_t offset = 0; - size_t gp_offset = gpcount * 8; - void *addr = alloca (size); - - avalue[i] = addr; - - while (fpcount < 8 - && offset < size - && gp_offset < 8 * 8) - { - hfa_type_store (hfa_type, addr + offset, - &stack->fp_regs[fpcount]); - offset += hfa_size; - gp_offset += hfa_size; - fpcount += 1; - } - - if (offset < size) - memcpy (addr + offset, (char *)stack->gp_regs + gp_offset, - size - offset); - } - else - avalue[i] = &stack->gp_regs[gpcount]; - - gpcount += (size + 7) / 8; - } - break; - - default: - abort (); - } - } - - closure->fun (cif, rvalue, avalue, closure->user_data); - - return cif->flags; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/ia64/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/ia64/ffitarget.h deleted file mode 100644 index e68cea615..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/ia64/ffitarget.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for IA-64. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long long ffi_arg; -typedef signed long long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_UNIX, /* Linux and all Unix variants use the same conventions */ - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_UNIX -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 24 /* Really the following struct, which */ - /* can be interpreted as a C function */ - /* descriptor: */ - -#endif - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/ia64/ia64_flags.h b/ruby/ext/fiddle/libffi-3.2.1/src/ia64/ia64_flags.h deleted file mode 100644 index 9d652cef1..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/ia64/ia64_flags.h +++ /dev/null @@ -1,40 +0,0 @@ -/* ----------------------------------------------------------------------- - ia64_flags.h - Copyright (c) 2000 Hewlett Packard Company - - IA64/unix Foreign Function Interface - - Original author: Hans Boehm, HP Labs - - 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. - ----------------------------------------------------------------------- */ - -/* "Type" codes used between assembly and C. When used as a part of - a cfi->flags value, the low byte will be these extra type codes, - and bits 8-31 will be the actual size of the type. */ - -/* Small structures containing N words in integer registers. */ -#define FFI_IA64_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 1) - -/* Homogeneous Floating Point Aggregates (HFAs) which are returned - in FP registers. */ -#define FFI_IA64_TYPE_HFA_FLOAT (FFI_TYPE_LAST + 2) -#define FFI_IA64_TYPE_HFA_DOUBLE (FFI_TYPE_LAST + 3) -#define FFI_IA64_TYPE_HFA_LDOUBLE (FFI_TYPE_LAST + 4) diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/ia64/unix.S b/ruby/ext/fiddle/libffi-3.2.1/src/ia64/unix.S deleted file mode 100644 index 4d2a86d42..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/ia64/unix.S +++ /dev/null @@ -1,560 +0,0 @@ -/* ----------------------------------------------------------------------- - unix.S - Copyright (c) 1998, 2008 Red Hat, Inc. - Copyright (c) 2000 Hewlett Packard Company - - IA64/unix Foreign Function Interface - - Primary author: Hans Boehm, HP Labs - - Loosely modeled on Cygnus code for other platforms. - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#include "ia64_flags.h" - - .pred.safe_across_calls p1-p5,p16-p63 -.text - -/* int ffi_call_unix (struct ia64_args *stack, PTR64 rvalue, - void (*fn)(void), int flags); - */ - - .align 16 - .global ffi_call_unix - .proc ffi_call_unix -ffi_call_unix: - .prologue - /* Bit o trickiness. We actually share a stack frame with ffi_call. - Rely on the fact that ffi_call uses a vframe and don't bother - tracking one here at all. */ - .fframe 0 - .save ar.pfs, r36 // loc0 - alloc loc0 = ar.pfs, 4, 3, 8, 0 - .save rp, loc1 - mov loc1 = b0 - .body - add r16 = 16, in0 - mov loc2 = gp - mov r8 = in1 - ;; - - /* Load up all of the argument registers. */ - ldf.fill f8 = [in0], 32 - ldf.fill f9 = [r16], 32 - ;; - ldf.fill f10 = [in0], 32 - ldf.fill f11 = [r16], 32 - ;; - ldf.fill f12 = [in0], 32 - ldf.fill f13 = [r16], 32 - ;; - ldf.fill f14 = [in0], 32 - ldf.fill f15 = [r16], 24 - ;; - ld8 out0 = [in0], 16 - ld8 out1 = [r16], 16 - ;; - ld8 out2 = [in0], 16 - ld8 out3 = [r16], 16 - ;; - ld8 out4 = [in0], 16 - ld8 out5 = [r16], 16 - ;; - ld8 out6 = [in0] - ld8 out7 = [r16] - ;; - - /* Deallocate the register save area from the stack frame. */ - mov sp = in0 - - /* Call the target function. */ - ld8 r16 = [in2], 8 - ;; - ld8 gp = [in2] - mov b6 = r16 - br.call.sptk.many b0 = b6 - ;; - - /* Dispatch to handle return value. */ - mov gp = loc2 - zxt1 r16 = in3 - ;; - mov ar.pfs = loc0 - addl r18 = @ltoffx(.Lst_table), gp - ;; - ld8.mov r18 = [r18], .Lst_table - mov b0 = loc1 - ;; - shladd r18 = r16, 3, r18 - ;; - ld8 r17 = [r18] - shr in3 = in3, 8 - ;; - add r17 = r17, r18 - ;; - mov b6 = r17 - br b6 - ;; - -.Lst_void: - br.ret.sptk.many b0 - ;; -.Lst_uint8: - zxt1 r8 = r8 - ;; - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_sint8: - sxt1 r8 = r8 - ;; - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_uint16: - zxt2 r8 = r8 - ;; - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_sint16: - sxt2 r8 = r8 - ;; - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_uint32: - zxt4 r8 = r8 - ;; - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_sint32: - sxt4 r8 = r8 - ;; - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_int64: - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_float: - stfs [in1] = f8 - br.ret.sptk.many b0 - ;; -.Lst_double: - stfd [in1] = f8 - br.ret.sptk.many b0 - ;; -.Lst_ldouble: - stfe [in1] = f8 - br.ret.sptk.many b0 - ;; - -.Lst_small_struct: - add sp = -16, sp - cmp.lt p6, p0 = 8, in3 - cmp.lt p7, p0 = 16, in3 - cmp.lt p8, p0 = 24, in3 - ;; - add r16 = 8, sp - add r17 = 16, sp - add r18 = 24, sp - ;; - st8 [sp] = r8 -(p6) st8 [r16] = r9 - mov out0 = in1 -(p7) st8 [r17] = r10 -(p8) st8 [r18] = r11 - mov out1 = sp - mov out2 = in3 - br.call.sptk.many b0 = memcpy# - ;; - mov ar.pfs = loc0 - mov b0 = loc1 - mov gp = loc2 - br.ret.sptk.many b0 - -.Lst_hfa_float: - add r16 = 4, in1 - cmp.lt p6, p0 = 4, in3 - ;; - stfs [in1] = f8, 8 -(p6) stfs [r16] = f9, 8 - cmp.lt p7, p0 = 8, in3 - cmp.lt p8, p0 = 12, in3 - ;; -(p7) stfs [in1] = f10, 8 -(p8) stfs [r16] = f11, 8 - cmp.lt p9, p0 = 16, in3 - cmp.lt p10, p0 = 20, in3 - ;; -(p9) stfs [in1] = f12, 8 -(p10) stfs [r16] = f13, 8 - cmp.lt p6, p0 = 24, in3 - cmp.lt p7, p0 = 28, in3 - ;; -(p6) stfs [in1] = f14 -(p7) stfs [r16] = f15 - br.ret.sptk.many b0 - ;; - -.Lst_hfa_double: - add r16 = 8, in1 - cmp.lt p6, p0 = 8, in3 - ;; - stfd [in1] = f8, 16 -(p6) stfd [r16] = f9, 16 - cmp.lt p7, p0 = 16, in3 - cmp.lt p8, p0 = 24, in3 - ;; -(p7) stfd [in1] = f10, 16 -(p8) stfd [r16] = f11, 16 - cmp.lt p9, p0 = 32, in3 - cmp.lt p10, p0 = 40, in3 - ;; -(p9) stfd [in1] = f12, 16 -(p10) stfd [r16] = f13, 16 - cmp.lt p6, p0 = 48, in3 - cmp.lt p7, p0 = 56, in3 - ;; -(p6) stfd [in1] = f14 -(p7) stfd [r16] = f15 - br.ret.sptk.many b0 - ;; - -.Lst_hfa_ldouble: - add r16 = 16, in1 - cmp.lt p6, p0 = 16, in3 - ;; - stfe [in1] = f8, 32 -(p6) stfe [r16] = f9, 32 - cmp.lt p7, p0 = 32, in3 - cmp.lt p8, p0 = 48, in3 - ;; -(p7) stfe [in1] = f10, 32 -(p8) stfe [r16] = f11, 32 - cmp.lt p9, p0 = 64, in3 - cmp.lt p10, p0 = 80, in3 - ;; -(p9) stfe [in1] = f12, 32 -(p10) stfe [r16] = f13, 32 - cmp.lt p6, p0 = 96, in3 - cmp.lt p7, p0 = 112, in3 - ;; -(p6) stfe [in1] = f14 -(p7) stfe [r16] = f15 - br.ret.sptk.many b0 - ;; - - .endp ffi_call_unix - - .align 16 - .global ffi_closure_unix - .proc ffi_closure_unix - -#define FRAME_SIZE (8*16 + 8*8 + 8*16) - -ffi_closure_unix: - .prologue - .save ar.pfs, r40 // loc0 - alloc loc0 = ar.pfs, 8, 4, 4, 0 - .fframe FRAME_SIZE - add r12 = -FRAME_SIZE, r12 - .save rp, loc1 - mov loc1 = b0 - .save ar.unat, loc2 - mov loc2 = ar.unat - .body - - /* Retrieve closure pointer and real gp. */ -#ifdef _ILP32 - addp4 out0 = 0, gp - addp4 gp = 16, gp -#else - mov out0 = gp - add gp = 16, gp -#endif - ;; - ld8 gp = [gp] - - /* Spill all of the possible argument registers. */ - add r16 = 16 + 8*16, sp - add r17 = 16 + 8*16 + 16, sp - ;; - stf.spill [r16] = f8, 32 - stf.spill [r17] = f9, 32 - mov loc3 = gp - ;; - stf.spill [r16] = f10, 32 - stf.spill [r17] = f11, 32 - ;; - stf.spill [r16] = f12, 32 - stf.spill [r17] = f13, 32 - ;; - stf.spill [r16] = f14, 32 - stf.spill [r17] = f15, 24 - ;; - .mem.offset 0, 0 - st8.spill [r16] = in0, 16 - .mem.offset 8, 0 - st8.spill [r17] = in1, 16 - add out1 = 16 + 8*16, sp - ;; - .mem.offset 0, 0 - st8.spill [r16] = in2, 16 - .mem.offset 8, 0 - st8.spill [r17] = in3, 16 - add out2 = 16, sp - ;; - .mem.offset 0, 0 - st8.spill [r16] = in4, 16 - .mem.offset 8, 0 - st8.spill [r17] = in5, 16 - mov out3 = r8 - ;; - .mem.offset 0, 0 - st8.spill [r16] = in6 - .mem.offset 8, 0 - st8.spill [r17] = in7 - - /* Invoke ffi_closure_unix_inner for the hard work. */ - br.call.sptk.many b0 = ffi_closure_unix_inner - ;; - - /* Dispatch to handle return value. */ - mov gp = loc3 - zxt1 r16 = r8 - ;; - addl r18 = @ltoffx(.Lld_table), gp - mov ar.pfs = loc0 - ;; - ld8.mov r18 = [r18], .Lld_table - mov b0 = loc1 - ;; - shladd r18 = r16, 3, r18 - mov ar.unat = loc2 - ;; - ld8 r17 = [r18] - shr r8 = r8, 8 - ;; - add r17 = r17, r18 - add r16 = 16, sp - ;; - mov b6 = r17 - br b6 - ;; - .label_state 1 - -.Lld_void: - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; -.Lld_int: - .body - .copy_state 1 - ld8 r8 = [r16] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; -.Lld_float: - .body - .copy_state 1 - ldfs f8 = [r16] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; -.Lld_double: - .body - .copy_state 1 - ldfd f8 = [r16] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; -.Lld_ldouble: - .body - .copy_state 1 - ldfe f8 = [r16] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; - -.Lld_small_struct: - .body - .copy_state 1 - add r17 = 8, r16 - cmp.lt p6, p0 = 8, r8 - cmp.lt p7, p0 = 16, r8 - cmp.lt p8, p0 = 24, r8 - ;; - ld8 r8 = [r16], 16 -(p6) ld8 r9 = [r17], 16 - ;; -(p7) ld8 r10 = [r16] -(p8) ld8 r11 = [r17] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; - -.Lld_hfa_float: - .body - .copy_state 1 - add r17 = 4, r16 - cmp.lt p6, p0 = 4, r8 - ;; - ldfs f8 = [r16], 8 -(p6) ldfs f9 = [r17], 8 - cmp.lt p7, p0 = 8, r8 - cmp.lt p8, p0 = 12, r8 - ;; -(p7) ldfs f10 = [r16], 8 -(p8) ldfs f11 = [r17], 8 - cmp.lt p9, p0 = 16, r8 - cmp.lt p10, p0 = 20, r8 - ;; -(p9) ldfs f12 = [r16], 8 -(p10) ldfs f13 = [r17], 8 - cmp.lt p6, p0 = 24, r8 - cmp.lt p7, p0 = 28, r8 - ;; -(p6) ldfs f14 = [r16] -(p7) ldfs f15 = [r17] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; - -.Lld_hfa_double: - .body - .copy_state 1 - add r17 = 8, r16 - cmp.lt p6, p0 = 8, r8 - ;; - ldfd f8 = [r16], 16 -(p6) ldfd f9 = [r17], 16 - cmp.lt p7, p0 = 16, r8 - cmp.lt p8, p0 = 24, r8 - ;; -(p7) ldfd f10 = [r16], 16 -(p8) ldfd f11 = [r17], 16 - cmp.lt p9, p0 = 32, r8 - cmp.lt p10, p0 = 40, r8 - ;; -(p9) ldfd f12 = [r16], 16 -(p10) ldfd f13 = [r17], 16 - cmp.lt p6, p0 = 48, r8 - cmp.lt p7, p0 = 56, r8 - ;; -(p6) ldfd f14 = [r16] -(p7) ldfd f15 = [r17] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; - -.Lld_hfa_ldouble: - .body - .copy_state 1 - add r17 = 16, r16 - cmp.lt p6, p0 = 16, r8 - ;; - ldfe f8 = [r16], 32 -(p6) ldfe f9 = [r17], 32 - cmp.lt p7, p0 = 32, r8 - cmp.lt p8, p0 = 48, r8 - ;; -(p7) ldfe f10 = [r16], 32 -(p8) ldfe f11 = [r17], 32 - cmp.lt p9, p0 = 64, r8 - cmp.lt p10, p0 = 80, r8 - ;; -(p9) ldfe f12 = [r16], 32 -(p10) ldfe f13 = [r17], 32 - cmp.lt p6, p0 = 96, r8 - cmp.lt p7, p0 = 112, r8 - ;; -(p6) ldfe f14 = [r16] -(p7) ldfe f15 = [r17] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; - - .endp ffi_closure_unix - - .section .rodata - .align 8 -.Lst_table: - data8 @pcrel(.Lst_void) // FFI_TYPE_VOID - data8 @pcrel(.Lst_sint32) // FFI_TYPE_INT - data8 @pcrel(.Lst_float) // FFI_TYPE_FLOAT - data8 @pcrel(.Lst_double) // FFI_TYPE_DOUBLE - data8 @pcrel(.Lst_ldouble) // FFI_TYPE_LONGDOUBLE - data8 @pcrel(.Lst_uint8) // FFI_TYPE_UINT8 - data8 @pcrel(.Lst_sint8) // FFI_TYPE_SINT8 - data8 @pcrel(.Lst_uint16) // FFI_TYPE_UINT16 - data8 @pcrel(.Lst_sint16) // FFI_TYPE_SINT16 - data8 @pcrel(.Lst_uint32) // FFI_TYPE_UINT32 - data8 @pcrel(.Lst_sint32) // FFI_TYPE_SINT32 - data8 @pcrel(.Lst_int64) // FFI_TYPE_UINT64 - data8 @pcrel(.Lst_int64) // FFI_TYPE_SINT64 - data8 @pcrel(.Lst_void) // FFI_TYPE_STRUCT - data8 @pcrel(.Lst_int64) // FFI_TYPE_POINTER - data8 @pcrel(.Lst_small_struct) // FFI_IA64_TYPE_SMALL_STRUCT - data8 @pcrel(.Lst_hfa_float) // FFI_IA64_TYPE_HFA_FLOAT - data8 @pcrel(.Lst_hfa_double) // FFI_IA64_TYPE_HFA_DOUBLE - data8 @pcrel(.Lst_hfa_ldouble) // FFI_IA64_TYPE_HFA_LDOUBLE - -.Lld_table: - data8 @pcrel(.Lld_void) // FFI_TYPE_VOID - data8 @pcrel(.Lld_int) // FFI_TYPE_INT - data8 @pcrel(.Lld_float) // FFI_TYPE_FLOAT - data8 @pcrel(.Lld_double) // FFI_TYPE_DOUBLE - data8 @pcrel(.Lld_ldouble) // FFI_TYPE_LONGDOUBLE - data8 @pcrel(.Lld_int) // FFI_TYPE_UINT8 - data8 @pcrel(.Lld_int) // FFI_TYPE_SINT8 - data8 @pcrel(.Lld_int) // FFI_TYPE_UINT16 - data8 @pcrel(.Lld_int) // FFI_TYPE_SINT16 - data8 @pcrel(.Lld_int) // FFI_TYPE_UINT32 - data8 @pcrel(.Lld_int) // FFI_TYPE_SINT32 - data8 @pcrel(.Lld_int) // FFI_TYPE_UINT64 - data8 @pcrel(.Lld_int) // FFI_TYPE_SINT64 - data8 @pcrel(.Lld_void) // FFI_TYPE_STRUCT - data8 @pcrel(.Lld_int) // FFI_TYPE_POINTER - data8 @pcrel(.Lld_small_struct) // FFI_IA64_TYPE_SMALL_STRUCT - data8 @pcrel(.Lld_hfa_float) // FFI_IA64_TYPE_HFA_FLOAT - data8 @pcrel(.Lld_hfa_double) // FFI_IA64_TYPE_HFA_DOUBLE - data8 @pcrel(.Lld_hfa_ldouble) // FFI_IA64_TYPE_HFA_LDOUBLE - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/java_raw_api.c b/ruby/ext/fiddle/libffi-3.2.1/src/java_raw_api.c deleted file mode 100644 index 127123d5b..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/java_raw_api.c +++ /dev/null @@ -1,374 +0,0 @@ -/* ----------------------------------------------------------------------- - java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. - - Cloned from raw_api.c - - Raw_api.c author: Kresten Krab Thorup - Java_raw_api.c author: Hans-J. Boehm - - $Id $ - - 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. - ----------------------------------------------------------------------- */ - -/* This defines a Java- and 64-bit specific variant of the raw API. */ -/* It assumes that "raw" argument blocks look like Java stacks on a */ -/* 64-bit machine. Arguments that can be stored in a single stack */ -/* stack slots (longs, doubles) occupy 128 bits, but only the first */ -/* 64 bits are actually used. */ - -#include -#include -#include - -#if !defined(NO_JAVA_RAW_API) - -size_t -ffi_java_raw_size (ffi_cif *cif) -{ - size_t result = 0; - int i; - - ffi_type **at = cif->arg_types; - - for (i = cif->nargs-1; i >= 0; i--, at++) - { - switch((*at) -> type) { - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_DOUBLE: - result += 2 * FFI_SIZEOF_JAVA_RAW; - break; - case FFI_TYPE_STRUCT: - /* No structure parameters in Java. */ - abort(); - case FFI_TYPE_COMPLEX: - /* Not supported yet. */ - abort(); - default: - result += FFI_SIZEOF_JAVA_RAW; - } - } - - return result; -} - - -void -ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) -{ - unsigned i; - ffi_type **tp = cif->arg_types; - -#if WORDS_BIGENDIAN - - for (i = 0; i < cif->nargs; i++, tp++, args++) - { - switch ((*tp)->type) - { - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - *args = (void*) ((char*)(raw++) + 3); - break; - - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - *args = (void*) ((char*)(raw++) + 2); - break; - -#if FFI_SIZEOF_JAVA_RAW == 8 - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_DOUBLE: - *args = (void *)raw; - raw += 2; - break; -#endif - - case FFI_TYPE_POINTER: - *args = (void*) &(raw++)->ptr; - break; - - case FFI_TYPE_COMPLEX: - /* Not supported yet. */ - abort(); - - default: - *args = raw; - raw += - ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); - } - } - -#else /* WORDS_BIGENDIAN */ - -#if !PDP - - /* then assume little endian */ - for (i = 0; i < cif->nargs; i++, tp++, args++) - { -#if FFI_SIZEOF_JAVA_RAW == 8 - switch((*tp)->type) { - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_DOUBLE: - *args = (void*) raw; - raw += 2; - break; - case FFI_TYPE_COMPLEX: - /* Not supported yet. */ - abort(); - default: - *args = (void*) raw++; - } -#else /* FFI_SIZEOF_JAVA_RAW != 8 */ - *args = (void*) raw; - raw += - ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -#endif /* FFI_SIZEOF_JAVA_RAW == 8 */ - } - -#else -#error "pdp endian not supported" -#endif /* ! PDP */ - -#endif /* WORDS_BIGENDIAN */ -} - -void -ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) -{ - unsigned i; - ffi_type **tp = cif->arg_types; - - for (i = 0; i < cif->nargs; i++, tp++, args++) - { - switch ((*tp)->type) - { - case FFI_TYPE_UINT8: -#if WORDS_BIGENDIAN - *(UINT32*)(raw++) = *(UINT8*) (*args); -#else - (raw++)->uint = *(UINT8*) (*args); -#endif - break; - - case FFI_TYPE_SINT8: -#if WORDS_BIGENDIAN - *(SINT32*)(raw++) = *(SINT8*) (*args); -#else - (raw++)->sint = *(SINT8*) (*args); -#endif - break; - - case FFI_TYPE_UINT16: -#if WORDS_BIGENDIAN - *(UINT32*)(raw++) = *(UINT16*) (*args); -#else - (raw++)->uint = *(UINT16*) (*args); -#endif - break; - - case FFI_TYPE_SINT16: -#if WORDS_BIGENDIAN - *(SINT32*)(raw++) = *(SINT16*) (*args); -#else - (raw++)->sint = *(SINT16*) (*args); -#endif - break; - - case FFI_TYPE_UINT32: -#if WORDS_BIGENDIAN - *(UINT32*)(raw++) = *(UINT32*) (*args); -#else - (raw++)->uint = *(UINT32*) (*args); -#endif - break; - - case FFI_TYPE_SINT32: -#if WORDS_BIGENDIAN - *(SINT32*)(raw++) = *(SINT32*) (*args); -#else - (raw++)->sint = *(SINT32*) (*args); -#endif - break; - - case FFI_TYPE_FLOAT: - (raw++)->flt = *(FLOAT32*) (*args); - break; - -#if FFI_SIZEOF_JAVA_RAW == 8 - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_DOUBLE: - raw->uint = *(UINT64*) (*args); - raw += 2; - break; -#endif - - case FFI_TYPE_POINTER: - (raw++)->ptr = **(void***) args; - break; - - default: -#if FFI_SIZEOF_JAVA_RAW == 8 - FFI_ASSERT(0); /* Should have covered all cases */ -#else - memcpy ((void*) raw->data, (void*)*args, (*tp)->size); - raw += - ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -#endif - } - } -} - -#if !FFI_NATIVE_RAW_API - -static void -ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue) -{ -#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 - switch (cif->rtype->type) - { - case FFI_TYPE_UINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_UINT32: - *(UINT64 *)rvalue <<= 32; - break; - - case FFI_TYPE_SINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_SINT32: - case FFI_TYPE_INT: -#if FFI_SIZEOF_JAVA_RAW == 4 - case FFI_TYPE_POINTER: -#endif - *(SINT64 *)rvalue <<= 32; - break; - - case FFI_TYPE_COMPLEX: - /* Not supported yet. */ - abort(); - - default: - break; - } -#endif -} - -static void -ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue) -{ -#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 - switch (cif->rtype->type) - { - case FFI_TYPE_UINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_UINT32: - *(UINT64 *)rvalue >>= 32; - break; - - case FFI_TYPE_SINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_SINT32: - case FFI_TYPE_INT: - *(SINT64 *)rvalue >>= 32; - break; - - case FFI_TYPE_COMPLEX: - /* Not supported yet. */ - abort(); - - default: - break; - } -#endif -} - -/* This is a generic definition of ffi_raw_call, to be used if the - * native system does not provide a machine-specific implementation. - * Having this, allows code to be written for the raw API, without - * the need for system-specific code to handle input in that format; - * these following couple of functions will handle the translation forth - * and back automatically. */ - -void ffi_java_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, - ffi_java_raw *raw) -{ - void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); - ffi_java_raw_to_ptrarray (cif, raw, avalue); - ffi_call (cif, fn, rvalue, avalue); - ffi_java_rvalue_to_raw (cif, rvalue); -} - -#if FFI_CLOSURES /* base system provides closures */ - -static void -ffi_java_translate_args (ffi_cif *cif, void *rvalue, - void **avalue, void *user_data) -{ - ffi_java_raw *raw = (ffi_java_raw*)alloca (ffi_java_raw_size (cif)); - ffi_raw_closure *cl = (ffi_raw_closure*)user_data; - - ffi_java_ptrarray_to_raw (cif, avalue, raw); - (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data); - ffi_java_raw_to_rvalue (cif, rvalue); -} - -ffi_status -ffi_prep_java_raw_closure_loc (ffi_java_raw_closure* cl, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), - void *user_data, - void *codeloc) -{ - ffi_status status; - - status = ffi_prep_closure_loc ((ffi_closure*) cl, - cif, - &ffi_java_translate_args, - codeloc, - codeloc); - if (status == FFI_OK) - { - cl->fun = fun; - cl->user_data = user_data; - } - - return status; -} - -/* Again, here is the generic version of ffi_prep_raw_closure, which - * will install an intermediate "hub" for translation of arguments from - * the pointer-array format, to the raw format */ - -ffi_status -ffi_prep_java_raw_closure (ffi_java_raw_closure* cl, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), - void *user_data) -{ - return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl); -} - -#endif /* FFI_CLOSURES */ -#endif /* !FFI_NATIVE_RAW_API */ -#endif /* !NO_JAVA_RAW_API */ diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/m32r/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/m32r/ffi.c deleted file mode 100644 index 300006349..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/m32r/ffi.c +++ /dev/null @@ -1,232 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2004 Renesas Technology - Copyright (c) 2008 Red Hat, Inc. - - M32R Foreign Function Interface - - 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 RENESAS TECHNOLOGY 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 -#include - -#include - -/* ffi_prep_args is called by the assembly routine once stack - space has been allocated for the function's arguments. */ - -void ffi_prep_args(char *stack, extended_cif *ecif) -{ - unsigned int i; - int tmp; - unsigned int avn; - void **p_argv; - char *argp; - ffi_type **p_arg; - - tmp = 0; - argp = stack; - - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT && ecif->cif->rtype->size > 8) - { - *(void **) argp = ecif->rvalue; - argp += 4; - } - - avn = ecif->cif->nargs; - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0) && (avn != 0); - i--, p_arg++) - { - size_t z; - - /* Align if necessary. */ - if (((*p_arg)->alignment - 1) & (unsigned) argp) - argp = (char *) ALIGN (argp, (*p_arg)->alignment); - - if (avn != 0) - { - avn--; - z = (*p_arg)->size; - if (z < sizeof (int)) - { - z = sizeof (int); - - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - z = (*p_arg)->size; - if ((*p_arg)->alignment != 1) - memcpy (argp, *p_argv, z); - else - memcpy (argp + 4 - z, *p_argv, z); - z = sizeof (int); - break; - - default: - FFI_ASSERT(0); - } - } - else if (z == sizeof (int)) - { - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - } - else - { - if ((*p_arg)->type == FFI_TYPE_STRUCT) - { - if (z > 8) - { - *(unsigned int *) argp = (unsigned int)(void *)(* p_argv); - z = sizeof(void *); - } - else - { - memcpy(argp, *p_argv, z); - z = 8; - } - } - else - { - /* Double or long long 64bit. */ - memcpy (argp, *p_argv, z); - } - } - p_argv++; - argp += z; - } - } - - return; -} - -/* Perform machine dependent cif processing. */ -ffi_status -ffi_prep_cif_machdep(ffi_cif *cif) -{ - /* Set the return type flag. */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_STRUCT: - if (cif->rtype->size <= 4) - cif->flags = FFI_TYPE_INT; - - else if (cif->rtype->size <= 8) - cif->flags = FFI_TYPE_DOUBLE; - - else - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_DOUBLE: - cif->flags = FFI_TYPE_DOUBLE; - break; - - case FFI_TYPE_FLOAT: - default: - cif->flags = FFI_TYPE_INT; - break; - } - - return FFI_OK; -} - -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have - a return value address then we need to make one. */ - if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca (cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - if (cif->rtype->type == FFI_TYPE_STRUCT) - { - int size = cif->rtype->size; - int align = cif->rtype->alignment; - - if (size < 4) - { - if (align == 1) - *(unsigned long *)(ecif.rvalue) <<= (4 - size) * 8; - } - else if (4 < size && size < 8) - { - if (align == 1) - { - memcpy (ecif.rvalue, ecif.rvalue + 8-size, size); - } - else if (align == 2) - { - if (size & 1) - size += 1; - - if (size != 8) - memcpy (ecif.rvalue, ecif.rvalue + 8-size, size); - } - } - } - break; - - default: - FFI_ASSERT(0); - break; - } -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/m32r/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/m32r/ffitarget.h deleted file mode 100644 index 6c3480198..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/m32r/ffitarget.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 2004 Renesas Technology. - Target configuration macros for M32R. - - 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 RENESAS TECHNOLOGY 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -/* ---- Generic type definitions ----------------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi - { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV - } ffi_abi; -#endif - -#define FFI_CLOSURES 0 -#define FFI_TRAMPOLINE_SIZE 24 -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/m32r/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/m32r/sysv.S deleted file mode 100644 index 06b75c226..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/m32r/sysv.S +++ /dev/null @@ -1,121 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2004 Renesas Technology - - M32R Foreign Function Interface - - 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 RENESAS TECHNOLOGY 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#ifdef HAVE_MACHINE_ASM_H -#include -#else -/* XXX these lose for some platforms, I'm sure. */ -#define CNAME(x) x -#define ENTRY(x) .globl CNAME(x)! .type CNAME(x),%function! CNAME(x): -#endif - -.text - - /* R0: ffi_prep_args */ - /* R1: &ecif */ - /* R2: cif->bytes */ - /* R3: fig->flags */ - /* sp+0: ecif.rvalue */ - /* sp+4: fn */ - - /* This assumes we are using gas. */ -ENTRY(ffi_call_SYSV) - /* Save registers. */ - push fp - push lr - push r3 - push r2 - push r1 - push r0 - mv fp, sp - - /* Make room for all of the new args. */ - sub sp, r2 - - /* Place all of the ffi_prep_args in position. */ - mv lr, r0 - mv r0, sp - /* R1 already set. */ - - /* And call. */ - jl lr - - /* Move first 4 parameters in registers... */ - ld r0, @(0,sp) - ld r1, @(4,sp) - ld r2, @(8,sp) - ld r3, @(12,sp) - - /* ...and adjust the stack. */ - ld lr, @(8,fp) - cmpi lr, #16 - bc adjust_stack - ldi lr, #16 -adjust_stack: - add sp, lr - - /* Call the function. */ - ld lr, @(28,fp) - jl lr - - /* Remove the space we pushed for the args. */ - mv sp, fp - - /* Load R2 with the pointer to storage for the return value. */ - ld r2, @(24,sp) - - /* Load R3 with the return type code. */ - ld r3, @(12,sp) - - /* If the return value pointer is NULL, assume no return value. */ - beqz r2, epilogue - - /* Return INT. */ - ldi r4, #FFI_TYPE_INT - bne r3, r4, return_double - st r0, @r2 - bra epilogue - -return_double: - /* Return DOUBLE or LONGDOUBLE. */ - ldi r4, #FFI_TYPE_DOUBLE - bne r3, r4, epilogue - st r0, @r2 - st r1, @(4,r2) - -epilogue: - pop r0 - pop r1 - pop r2 - pop r3 - pop lr - pop fp - jmp lr - -.ffi_call_SYSV_end: - .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/m68k/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/m68k/ffi.c deleted file mode 100644 index 0dee9383a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/m68k/ffi.c +++ /dev/null @@ -1,362 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - - m68k Foreign Function Interface - ----------------------------------------------------------------------- */ - -#include -#include - -#include -#include -#ifdef __rtems__ -void rtems_cache_flush_multiple_data_lines( const void *, size_t ); -#else -#include -#ifdef __MINT__ -#include -#include -#else -#include -#endif -#endif - -void ffi_call_SYSV (extended_cif *, - unsigned, unsigned, - void *, void (*fn) ()); -void *ffi_prep_args (void *stack, extended_cif *ecif); -void ffi_closure_SYSV (ffi_closure *); -void ffi_closure_struct_SYSV (ffi_closure *); -unsigned int ffi_closure_SYSV_inner (ffi_closure *closure, - void *resp, void *args); - -/* ffi_prep_args is called by the assembly routine once stack space has - been allocated for the function's arguments. */ - -void * -ffi_prep_args (void *stack, extended_cif *ecif) -{ - unsigned int i; - void **p_argv; - char *argp; - ffi_type **p_arg; - void *struct_value_ptr; - - argp = stack; - - if ( -#ifdef __MINT__ - (ecif->cif->rtype->type == FFI_TYPE_LONGDOUBLE) || -#endif - (((ecif->cif->rtype->type == FFI_TYPE_STRUCT) - && !ecif->cif->flags))) - struct_value_ptr = ecif->rvalue; - else - struct_value_ptr = NULL; - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - i != 0; - i--, p_arg++) - { - size_t z = (*p_arg)->size; - int type = (*p_arg)->type; - - if (z < sizeof (int)) - { - switch (type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int) *(SINT8 *) *p_argv; - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int) *(UINT8 *) *p_argv; - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int) *(SINT16 *) *p_argv; - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int) *(UINT16 *) *p_argv; - break; - - case FFI_TYPE_STRUCT: -#ifdef __MINT__ - if (z == 1 || z == 2) - memcpy (argp + 2, *p_argv, z); - else - memcpy (argp, *p_argv, z); -#else - memcpy (argp + sizeof (int) - z, *p_argv, z); -#endif - break; - - default: - FFI_ASSERT (0); - } - z = sizeof (int); - } - else - { - memcpy (argp, *p_argv, z); - - /* Align if necessary. */ - if ((sizeof(int) - 1) & z) - z = ALIGN(z, sizeof(int)); - } - - p_argv++; - argp += z; - } - - return struct_value_ptr; -} - -#define CIF_FLAGS_INT 1 -#define CIF_FLAGS_DINT 2 -#define CIF_FLAGS_FLOAT 4 -#define CIF_FLAGS_DOUBLE 8 -#define CIF_FLAGS_LDOUBLE 16 -#define CIF_FLAGS_POINTER 32 -#define CIF_FLAGS_STRUCT1 64 -#define CIF_FLAGS_STRUCT2 128 -#define CIF_FLAGS_SINT8 256 -#define CIF_FLAGS_SINT16 512 - -/* Perform machine dependent cif processing */ -ffi_status -ffi_prep_cif_machdep (ffi_cif *cif) -{ - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - cif->flags = 0; - break; - - case FFI_TYPE_STRUCT: - if (cif->rtype->elements[0]->type == FFI_TYPE_STRUCT && - cif->rtype->elements[1]) - { - cif->flags = 0; - break; - } - - switch (cif->rtype->size) - { - case 1: -#ifdef __MINT__ - cif->flags = CIF_FLAGS_STRUCT2; -#else - cif->flags = CIF_FLAGS_STRUCT1; -#endif - break; - case 2: - cif->flags = CIF_FLAGS_STRUCT2; - break; -#ifdef __MINT__ - case 3: -#endif - case 4: - cif->flags = CIF_FLAGS_INT; - break; -#ifdef __MINT__ - case 7: -#endif - case 8: - cif->flags = CIF_FLAGS_DINT; - break; - default: - cif->flags = 0; - break; - } - break; - - case FFI_TYPE_FLOAT: - cif->flags = CIF_FLAGS_FLOAT; - break; - - case FFI_TYPE_DOUBLE: - cif->flags = CIF_FLAGS_DOUBLE; - break; - -#if (FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE) - case FFI_TYPE_LONGDOUBLE: -#ifdef __MINT__ - cif->flags = 0; -#else - cif->flags = CIF_FLAGS_LDOUBLE; -#endif - break; -#endif - - case FFI_TYPE_POINTER: - cif->flags = CIF_FLAGS_POINTER; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags = CIF_FLAGS_DINT; - break; - - case FFI_TYPE_SINT16: - cif->flags = CIF_FLAGS_SINT16; - break; - - case FFI_TYPE_SINT8: - cif->flags = CIF_FLAGS_SINT8; - break; - - default: - cif->flags = CIF_FLAGS_INT; - break; - } - - return FFI_OK; -} - -void -ffi_call (ffi_cif *cif, void (*fn) (), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return value - address then we need to make one. */ - - if (rvalue == NULL - && cif->rtype->type == FFI_TYPE_STRUCT - && cif->rtype->size > 8) - ecif.rvalue = alloca (cif->rtype->size); - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV (&ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; - - default: - FFI_ASSERT (0); - break; - } -} - -static void -ffi_prep_incoming_args_SYSV (char *stack, void **avalue, ffi_cif *cif) -{ - unsigned int i; - void **p_argv; - char *argp; - ffi_type **p_arg; - - argp = stack; - p_argv = avalue; - - for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) - { - size_t z; - - z = (*p_arg)->size; -#ifdef __MINT__ - if (cif->flags && - cif->rtype->type == FFI_TYPE_STRUCT && - (z == 1 || z == 2)) - { - *p_argv = (void *) (argp + 2); - - z = 4; - } - else - if (cif->flags && - cif->rtype->type == FFI_TYPE_STRUCT && - (z == 3 || z == 4)) - { - *p_argv = (void *) (argp); - - z = 4; - } - else -#endif - if (z <= 4) - { - *p_argv = (void *) (argp + 4 - z); - - z = 4; - } - else - { - *p_argv = (void *) argp; - - /* Align if necessary */ - if ((sizeof(int) - 1) & z) - z = ALIGN(z, sizeof(int)); - } - - p_argv++; - argp += z; - } -} - -unsigned int -ffi_closure_SYSV_inner (ffi_closure *closure, void *resp, void *args) -{ - ffi_cif *cif; - void **arg_area; - - cif = closure->cif; - arg_area = (void**) alloca (cif->nargs * sizeof (void *)); - - ffi_prep_incoming_args_SYSV(args, arg_area, cif); - - (closure->fun) (cif, resp, arg_area, closure->user_data); - - return cif->flags; -} - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - if (cif->abi != FFI_SYSV) - return FFI_BAD_ABI; - - *(unsigned short *)closure->tramp = 0x207c; - *(void **)(closure->tramp + 2) = codeloc; - *(unsigned short *)(closure->tramp + 6) = 0x4ef9; - - if ( -#ifdef __MINT__ - (cif->rtype->type == FFI_TYPE_LONGDOUBLE) || -#endif - (((cif->rtype->type == FFI_TYPE_STRUCT) - && !cif->flags))) - *(void **)(closure->tramp + 8) = ffi_closure_struct_SYSV; - else - *(void **)(closure->tramp + 8) = ffi_closure_SYSV; - -#ifdef __rtems__ - rtems_cache_flush_multiple_data_lines( codeloc, FFI_TRAMPOLINE_SIZE ); -#elif defined(__MINT__) - Ssystem(S_FLUSHCACHE, codeloc, FFI_TRAMPOLINE_SIZE); -#else - syscall(SYS_cacheflush, codeloc, FLUSH_SCOPE_LINE, - FLUSH_CACHE_BOTH, FFI_TRAMPOLINE_SIZE); -#endif - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/m68k/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/m68k/ffitarget.h deleted file mode 100644 index e81dde2b2..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/m68k/ffitarget.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for Motorola 68K. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 16 -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/m68k/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/m68k/sysv.S deleted file mode 100644 index ec2b14f3d..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/m68k/sysv.S +++ /dev/null @@ -1,330 +0,0 @@ -/* ----------------------------------------------------------------------- - - sysv.S - Copyright (c) 2012 Alan Hourihane - Copyright (c) 1998, 2012 Andreas Schwab - Copyright (c) 2008 Red Hat, Inc. - Copyright (c) 2012 Thorsten Glaser - - m68k Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -#ifdef HAVE_AS_CFI_PSEUDO_OP -#define CFI_STARTPROC() .cfi_startproc -#define CFI_OFFSET(reg,off) .cfi_offset reg,off -#define CFI_DEF_CFA(reg,off) .cfi_def_cfa reg,off -#define CFI_ENDPROC() .cfi_endproc -#else -#define CFI_STARTPROC() -#define CFI_OFFSET(reg,off) -#define CFI_DEF_CFA(reg,off) -#define CFI_ENDPROC() -#endif - -#ifdef __MINT__ -#define CALLFUNC(funcname) _ ## funcname -#else -#define CALLFUNC(funcname) funcname -#endif - - .text - - .globl CALLFUNC(ffi_call_SYSV) - .type CALLFUNC(ffi_call_SYSV),@function - .align 4 - -CALLFUNC(ffi_call_SYSV): - CFI_STARTPROC() - link %fp,#0 - CFI_OFFSET(14,-8) - CFI_DEF_CFA(14,8) - move.l %d2,-(%sp) - CFI_OFFSET(2,-12) - - | Make room for all of the new args. - sub.l 12(%fp),%sp - - | Call ffi_prep_args - move.l 8(%fp),-(%sp) - pea 4(%sp) -#if !defined __PIC__ - jsr CALLFUNC(ffi_prep_args) -#else - bsr.l CALLFUNC(ffi_prep_args@PLTPC) -#endif - addq.l #8,%sp - - | Pass pointer to struct value, if any -#ifdef __MINT__ - move.l %d0,%a1 -#else - move.l %a0,%a1 -#endif - - | Call the function - move.l 24(%fp),%a0 - jsr (%a0) - - | Remove the space we pushed for the args - add.l 12(%fp),%sp - - | Load the pointer to storage for the return value - move.l 20(%fp),%a1 - - | Load the return type code - move.l 16(%fp),%d2 - - | If the return value pointer is NULL, assume no return value. - | NOTE: On the mc68000, tst on an address register is not supported. -#if !defined(__mc68020__) && !defined(__mc68030__) && !defined(__mc68040__) && !defined(__mc68060__) && !defined(__mcoldfire__) - cmp.w #0, %a1 -#else - tst.l %a1 -#endif - jbeq noretval - - btst #0,%d2 - jbeq retlongint - move.l %d0,(%a1) - jbra epilogue - -retlongint: - btst #1,%d2 - jbeq retfloat - move.l %d0,(%a1) - move.l %d1,4(%a1) - jbra epilogue - -retfloat: - btst #2,%d2 - jbeq retdouble -#if defined(__MC68881__) || defined(__HAVE_68881__) - fmove.s %fp0,(%a1) -#else - move.l %d0,(%a1) -#endif - jbra epilogue - -retdouble: - btst #3,%d2 - jbeq retlongdouble -#if defined(__MC68881__) || defined(__HAVE_68881__) - fmove.d %fp0,(%a1) -#else - move.l %d0,(%a1)+ - move.l %d1,(%a1) -#endif - jbra epilogue - -retlongdouble: - btst #4,%d2 - jbeq retpointer -#if defined(__MC68881__) || defined(__HAVE_68881__) - fmove.x %fp0,(%a1) -#else - move.l %d0,(%a1)+ - move.l %d1,(%a1)+ - move.l %d2,(%a1) -#endif - jbra epilogue - -retpointer: - btst #5,%d2 - jbeq retstruct1 -#ifdef __MINT__ - move.l %d0,(%a1) -#else - move.l %a0,(%a1) -#endif - jbra epilogue - -retstruct1: - btst #6,%d2 - jbeq retstruct2 - move.b %d0,(%a1) - jbra epilogue - -retstruct2: - btst #7,%d2 - jbeq retsint8 - move.w %d0,(%a1) - jbra epilogue - -retsint8: - btst #8,%d2 - jbeq retsint16 - | NOTE: On the mc68000, extb is not supported. 8->16, then 16->32. -#if !defined(__mc68020__) && !defined(__mc68030__) && !defined(__mc68040__) && !defined(__mc68060__) && !defined(__mcoldfire__) - ext.w %d0 - ext.l %d0 -#else - extb.l %d0 -#endif - move.l %d0,(%a1) - jbra epilogue - -retsint16: - btst #9,%d2 - jbeq noretval - ext.l %d0 - move.l %d0,(%a1) - -noretval: -epilogue: - move.l (%sp)+,%d2 - unlk %fp - rts - CFI_ENDPROC() - .size CALLFUNC(ffi_call_SYSV),.-CALLFUNC(ffi_call_SYSV) - - .globl CALLFUNC(ffi_closure_SYSV) - .type CALLFUNC(ffi_closure_SYSV), @function - .align 4 - -CALLFUNC(ffi_closure_SYSV): - CFI_STARTPROC() - link %fp,#-12 - CFI_OFFSET(14,-8) - CFI_DEF_CFA(14,8) - move.l %sp,-12(%fp) - pea 8(%fp) - pea -12(%fp) - move.l %a0,-(%sp) -#if !defined __PIC__ - jsr CALLFUNC(ffi_closure_SYSV_inner) -#else - bsr.l CALLFUNC(ffi_closure_SYSV_inner@PLTPC) -#endif - - lsr.l #1,%d0 - jne 1f - jcc .Lcls_epilogue - | CIF_FLAGS_INT - move.l -12(%fp),%d0 -.Lcls_epilogue: - | no CIF_FLAGS_* - unlk %fp - rts -1: - lea -12(%fp),%a0 - lsr.l #2,%d0 - jne 1f - jcs .Lcls_ret_float - | CIF_FLAGS_DINT - move.l (%a0)+,%d0 - move.l (%a0),%d1 - jra .Lcls_epilogue -.Lcls_ret_float: -#if defined(__MC68881__) || defined(__HAVE_68881__) - fmove.s (%a0),%fp0 -#else - move.l (%a0),%d0 -#endif - jra .Lcls_epilogue -1: - lsr.l #2,%d0 - jne 1f - jcs .Lcls_ret_ldouble - | CIF_FLAGS_DOUBLE -#if defined(__MC68881__) || defined(__HAVE_68881__) - fmove.d (%a0),%fp0 -#else - move.l (%a0)+,%d0 - move.l (%a0),%d1 -#endif - jra .Lcls_epilogue -.Lcls_ret_ldouble: -#if defined(__MC68881__) || defined(__HAVE_68881__) - fmove.x (%a0),%fp0 -#else - move.l (%a0)+,%d0 - move.l (%a0)+,%d1 - move.l (%a0),%d2 -#endif - jra .Lcls_epilogue -1: - lsr.l #2,%d0 - jne 1f - jcs .Lcls_ret_struct1 - | CIF_FLAGS_POINTER - move.l (%a0),%a0 - move.l %a0,%d0 - jra .Lcls_epilogue -.Lcls_ret_struct1: - move.b (%a0),%d0 - jra .Lcls_epilogue -1: - lsr.l #2,%d0 - jne 1f - jcs .Lcls_ret_sint8 - | CIF_FLAGS_STRUCT2 - move.w (%a0),%d0 - jra .Lcls_epilogue -.Lcls_ret_sint8: - move.l (%a0),%d0 - | NOTE: On the mc68000, extb is not supported. 8->16, then 16->32. -#if !defined(__mc68020__) && !defined(__mc68030__) && !defined(__mc68040__) && !defined(__mc68060__) && !defined(__mcoldfire__) - ext.w %d0 - ext.l %d0 -#else - extb.l %d0 -#endif - jra .Lcls_epilogue -1: - | CIF_FLAGS_SINT16 - move.l (%a0),%d0 - ext.l %d0 - jra .Lcls_epilogue - CFI_ENDPROC() - - .size CALLFUNC(ffi_closure_SYSV),.-CALLFUNC(ffi_closure_SYSV) - - .globl CALLFUNC(ffi_closure_struct_SYSV) - .type CALLFUNC(ffi_closure_struct_SYSV), @function - .align 4 - -CALLFUNC(ffi_closure_struct_SYSV): - CFI_STARTPROC() - link %fp,#0 - CFI_OFFSET(14,-8) - CFI_DEF_CFA(14,8) - move.l %sp,-12(%fp) - pea 8(%fp) - move.l %a1,-(%sp) - move.l %a0,-(%sp) -#if !defined __PIC__ - jsr CALLFUNC(ffi_closure_SYSV_inner) -#else - bsr.l CALLFUNC(ffi_closure_SYSV_inner@PLTPC) -#endif - unlk %fp - rts - CFI_ENDPROC() - .size CALLFUNC(ffi_closure_struct_SYSV),.-CALLFUNC(ffi_closure_struct_SYSV) - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/m88k/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/m88k/ffi.c deleted file mode 100644 index 68df49495..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/m88k/ffi.c +++ /dev/null @@ -1,400 +0,0 @@ -/* - * Copyright (c) 2013 Miodrag Vallat. - * - * 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. - */ - -/* - * m88k Foreign Function Interface - * - * This file attempts to provide all the FFI entry points which can reliably - * be implemented in C. - * - * Only OpenBSD/m88k is currently supported; other platforms (such as - * Motorola's SysV/m88k) could be supported with the following tweaks: - * - * - non-OpenBSD systems use an `outgoing parameter area' as part of the - * 88BCS calling convention, which is not supported under OpenBSD from - * release 3.6 onwards. Supporting it should be as easy as taking it - * into account when adjusting the stack, in the assembly code. - * - * - the logic deciding whether a function argument gets passed through - * registers, or on the stack, has changed several times in OpenBSD in - * edge cases (especially for structs larger than 32 bytes being passed - * by value). The code below attemps to match the logic used by the - * system compiler of OpenBSD 5.3, i.e. gcc 3.3.6 with many m88k backend - * fixes. - */ - -#include -#include - -#include -#include - -void ffi_call_OBSD (unsigned int, extended_cif *, unsigned int, void *, - void (*fn) ()); -void *ffi_prep_args (void *, extended_cif *); -void ffi_closure_OBSD (ffi_closure *); -void ffi_closure_struct_OBSD (ffi_closure *); -unsigned int ffi_closure_OBSD_inner (ffi_closure *, void *, unsigned int *, - char *); -void ffi_cacheflush_OBSD (unsigned int, unsigned int); - -#define CIF_FLAGS_INT (1 << 0) -#define CIF_FLAGS_DINT (1 << 1) - -/* - * Foreign Function Interface API - */ - -/* ffi_prep_args is called by the assembly routine once stack space has - been allocated for the function's arguments. */ - -void * -ffi_prep_args (void *stack, extended_cif *ecif) -{ - unsigned int i; - void **p_argv; - char *argp, *stackp; - unsigned int *regp; - unsigned int regused; - ffi_type **p_arg; - void *struct_value_ptr; - - regp = (unsigned int *)stack; - stackp = (char *)(regp + 8); - regused = 0; - - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT - && !ecif->cif->flags) - struct_value_ptr = ecif->rvalue; - else - struct_value_ptr = NULL; - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i != 0; i--, p_arg++) - { - size_t z; - unsigned short t, a; - - z = (*p_arg)->size; - t = (*p_arg)->type; - a = (*p_arg)->alignment; - - /* - * Figure out whether the argument can be passed through registers - * or on the stack. - * The rule is that registers can only receive simple types not larger - * than 64 bits, or structs the exact size of a register and aligned to - * the size of a register. - */ - if (t == FFI_TYPE_STRUCT) - { - if (z == sizeof (int) && a == sizeof (int) && regused < 8) - argp = (char *)regp; - else - argp = stackp; - } - else - { - if (z > sizeof (int) && regused < 8 - 1) - { - /* align to an even register pair */ - if (regused & 1) - { - regp++; - regused++; - } - } - if (regused < 8) - argp = (char *)regp; - else - argp = stackp; - } - - /* Enforce proper stack alignment of 64-bit types */ - if (argp == stackp && a > sizeof (int)) - { - stackp = (char *) ALIGN(stackp, a); - argp = stackp; - } - - switch (t) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int) *(SINT8 *) *p_argv; - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int) *(UINT8 *) *p_argv; - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int) *(SINT16 *) *p_argv; - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int) *(UINT16 *) *p_argv; - break; - - case FFI_TYPE_INT: - case FFI_TYPE_FLOAT: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_POINTER: - *(unsigned int *) argp = *(unsigned int *) *p_argv; - break; - - case FFI_TYPE_DOUBLE: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_STRUCT: - memcpy (argp, *p_argv, z); - break; - - default: - FFI_ASSERT (0); - } - - /* Align if necessary. */ - if ((sizeof (int) - 1) & z) - z = ALIGN(z, sizeof (int)); - - p_argv++; - - /* Be careful, once all registers are filled, and about to continue - on stack, regp == stackp. Therefore the check for regused as well. */ - if (argp == (char *)regp && regused < 8) - { - regp += z / sizeof (int); - regused += z / sizeof (int); - } - else - stackp += z; - } - - return struct_value_ptr; -} - -/* Perform machine dependent cif processing */ -ffi_status -ffi_prep_cif_machdep (ffi_cif *cif) -{ - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - cif->flags = 0; - break; - - case FFI_TYPE_STRUCT: - if (cif->rtype->size == sizeof (int) && - cif->rtype->alignment == sizeof (int)) - cif->flags = CIF_FLAGS_INT; - else - cif->flags = 0; - break; - - case FFI_TYPE_DOUBLE: - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags = CIF_FLAGS_DINT; - break; - - default: - cif->flags = CIF_FLAGS_INT; - break; - } - - return FFI_OK; -} - -void -ffi_call (ffi_cif *cif, void (*fn) (), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return value - address then we need to make one. */ - - if (rvalue == NULL - && cif->rtype->type == FFI_TYPE_STRUCT - && (cif->rtype->size != sizeof (int) - || cif->rtype->alignment != sizeof (int))) - ecif.rvalue = alloca (cif->rtype->size); - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_OBSD: - ffi_call_OBSD (cif->bytes, &ecif, cif->flags, ecif.rvalue, fn); - break; - - default: - FFI_ASSERT (0); - break; - } -} - -/* - * Closure API - */ - -static void -ffi_prep_closure_args_OBSD (ffi_cif *cif, void **avalue, unsigned int *regp, - char *stackp) -{ - unsigned int i; - void **p_argv; - char *argp; - unsigned int regused; - ffi_type **p_arg; - - regused = 0; - - p_argv = avalue; - - for (i = cif->nargs, p_arg = cif->arg_types; i != 0; i--, p_arg++) - { - size_t z; - unsigned short t, a; - - z = (*p_arg)->size; - t = (*p_arg)->type; - a = (*p_arg)->alignment; - - /* - * Figure out whether the argument has been passed through registers - * or on the stack. - * The rule is that registers can only receive simple types not larger - * than 64 bits, or structs the exact size of a register and aligned to - * the size of a register. - */ - if (t == FFI_TYPE_STRUCT) - { - if (z == sizeof (int) && a == sizeof (int) && regused < 8) - argp = (char *)regp; - else - argp = stackp; - } - else - { - if (z > sizeof (int) && regused < 8 - 1) - { - /* align to an even register pair */ - if (regused & 1) - { - regp++; - regused++; - } - } - if (regused < 8) - argp = (char *)regp; - else - argp = stackp; - } - - /* Enforce proper stack alignment of 64-bit types */ - if (argp == stackp && a > sizeof (int)) - { - stackp = (char *) ALIGN(stackp, a); - argp = stackp; - } - - if (z < sizeof (int) && t != FFI_TYPE_STRUCT) - *p_argv = (void *) (argp + sizeof (int) - z); - else - *p_argv = (void *) argp; - - /* Align if necessary */ - if ((sizeof (int) - 1) & z) - z = ALIGN(z, sizeof (int)); - - p_argv++; - - /* Be careful, once all registers are exhausted, and about to fetch from - stack, regp == stackp. Therefore the check for regused as well. */ - if (argp == (char *)regp && regused < 8) - { - regp += z / sizeof (int); - regused += z / sizeof (int); - } - else - stackp += z; - } -} - -unsigned int -ffi_closure_OBSD_inner (ffi_closure *closure, void *resp, unsigned int *regp, - char *stackp) -{ - ffi_cif *cif; - void **arg_area; - - cif = closure->cif; - arg_area = (void**) alloca (cif->nargs * sizeof (void *)); - - ffi_prep_closure_args_OBSD(cif, arg_area, regp, stackp); - - (closure->fun) (cif, resp, arg_area, closure->user_data); - - return cif->flags; -} - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, void *codeloc) -{ - unsigned int *tramp = (unsigned int *) codeloc; - void *fn; - - FFI_ASSERT (cif->abi == FFI_OBSD); - - if (cif->rtype->type == FFI_TYPE_STRUCT && !cif->flags) - fn = &ffi_closure_struct_OBSD; - else - fn = &ffi_closure_OBSD; - - /* or.u %r10, %r0, %hi16(fn) */ - tramp[0] = 0x5d400000 | (((unsigned int)fn) >> 16); - /* or.u %r13, %r0, %hi16(closure) */ - tramp[1] = 0x5da00000 | ((unsigned int)closure >> 16); - /* or %r10, %r10, %lo16(fn) */ - tramp[2] = 0x594a0000 | (((unsigned int)fn) & 0xffff); - /* jmp.n %r10 */ - tramp[3] = 0xf400c40a; - /* or %r13, %r13, %lo16(closure) */ - tramp[4] = 0x59ad0000 | ((unsigned int)closure & 0xffff); - - ffi_cacheflush_OBSD((unsigned int)codeloc, FFI_TRAMPOLINE_SIZE); - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/m88k/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/m88k/ffitarget.h deleted file mode 100644 index e52bf9fa3..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/m88k/ffitarget.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2013 Miodrag Vallat. - * - * 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. - */ - -/* - * m88k Foreign Function Interface - */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_OBSD, - FFI_DEFAULT_ABI = FFI_OBSD, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 0x14 -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/m88k/obsd.S b/ruby/ext/fiddle/libffi-3.2.1/src/m88k/obsd.S deleted file mode 100644 index 1944a23de..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/m88k/obsd.S +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright (c) 2013 Miodrag Vallat. - * - * 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. - */ - -/* - * m88k Foreign Function Interface - */ - -#define LIBFFI_ASM -#include -#include - - .text - -/* - * ffi_cacheflush_OBSD(unsigned int addr, %r2 - * unsigned int size); %r3 - */ - .align 4 - .globl ffi_cacheflush_OBSD - .type ffi_cacheflush_OBSD,@function -ffi_cacheflush_OBSD: - tb0 0, %r0, 451 - or %r0, %r0, %r0 - jmp %r1 - .size ffi_cacheflush_OBSD, . - ffi_cacheflush_OBSD - -/* - * ffi_call_OBSD(unsigned bytes, %r2 - * extended_cif *ecif, %r3 - * unsigned flags, %r4 - * void *rvalue, %r5 - * void (*fn)()); %r6 - */ - .align 4 - .globl ffi_call_OBSD - .type ffi_call_OBSD,@function -ffi_call_OBSD: - subu %r31, %r31, 32 - st %r30, %r31, 4 - st %r1, %r31, 0 - addu %r30, %r31, 32 - - | Save the few arguments we'll need after ffi_prep_args() - st.d %r4, %r31, 8 - st %r6, %r31, 16 - - | Allocate room for the image of r2-r9, and the stack space for - | the args (rounded to a 16-byte boundary) - addu %r2, %r2, (8 * 4) + 15 - clr %r2, %r2, 4<0> - subu %r31, %r31, %r2 - - | Fill register and stack image - or %r2, %r31, %r0 -#ifdef PIC - bsr ffi_prep_args#plt -#else - bsr ffi_prep_args -#endif - - | Save pointer to return struct address, if any - or %r12, %r2, %r0 - - | Get function pointer - subu %r4, %r30, 32 - ld %r1, %r4, 16 - - | Fetch the register arguments - ld.d %r2, %r31, (0 * 4) - ld.d %r4, %r31, (2 * 4) - ld.d %r6, %r31, (4 * 4) - ld.d %r8, %r31, (6 * 4) - addu %r31, %r31, (8 * 4) - - | Invoke the function - jsr %r1 - - | Restore stack now that we don't need the args anymore - subu %r31, %r30, 32 - - | Figure out what to return as the function's return value - ld %r5, %r31, 12 | rvalue - ld %r4, %r31, 8 | flags - - bcnd eq0, %r5, 9f - - bb0 0, %r4, 1f | CIF_FLAGS_INT - st %r2, %r5, 0 - br 9f - -1: - bb0 1, %r4, 1f | CIF_FLAGS_DINT - st.d %r2, %r5, 0 - br 9f - -1: -9: - ld %r1, %r31, 0 - ld %r30, %r31, 4 - jmp.n %r1 - addu %r31, %r31, 32 - .size ffi_call_OBSD, . - ffi_call_OBSD - -/* - * ffi_closure_OBSD(ffi_closure *closure); %r13 - */ - .align 4 - .globl ffi_closure_OBSD - .type ffi_closure_OBSD, @function -ffi_closure_OBSD: - subu %r31, %r31, 16 - st %r30, %r31, 4 - st %r1, %r31, 0 - addu %r30, %r31, 16 - - | Make room on the stack for saved register arguments and return - | value - subu %r31, %r31, (8 * 4) + (2 * 4) - st.d %r2, %r31, (0 * 4) - st.d %r4, %r31, (2 * 4) - st.d %r6, %r31, (4 * 4) - st.d %r8, %r31, (6 * 4) - - | Invoke the closure function - or %r5, %r30, 0 | calling stack - addu %r4, %r31, 0 | saved registers - addu %r3, %r31, (8 * 4) | return value - or %r2, %r13, %r0 | closure -#ifdef PIC - bsr ffi_closure_OBSD_inner#plt -#else - bsr ffi_closure_OBSD_inner -#endif - - | Figure out what to return as the function's return value - bb0 0, %r2, 1f | CIF_FLAGS_INT - ld %r2, %r31, (8 * 4) - br 9f - -1: - bb0 1, %r2, 1f | CIF_FLAGS_DINT - ld.d %r2, %r31, (8 * 4) - br 9f - -1: -9: - subu %r31, %r30, 16 - ld %r1, %r31, 0 - ld %r30, %r31, 4 - jmp.n %r1 - addu %r31, %r31, 16 - .size ffi_closure_OBSD,.-ffi_closure_OBSD - -/* - * ffi_closure_struct_OBSD(ffi_closure *closure); %r13 - */ - .align 4 - .globl ffi_closure_struct_OBSD - .type ffi_closure_struct_OBSD, @function -ffi_closure_struct_OBSD: - subu %r31, %r31, 16 - st %r30, %r31, 4 - st %r1, %r31, 0 - addu %r30, %r31, 16 - - | Make room on the stack for saved register arguments - subu %r31, %r31, (8 * 4) - st.d %r2, %r31, (0 * 4) - st.d %r4, %r31, (2 * 4) - st.d %r6, %r31, (4 * 4) - st.d %r8, %r31, (6 * 4) - - | Invoke the closure function - or %r5, %r30, 0 | calling stack - addu %r4, %r31, 0 | saved registers - or %r3, %r12, 0 | return value - or %r2, %r13, %r0 | closure -#ifdef PIC - bsr ffi_closure_OBSD_inner#plt -#else - bsr ffi_closure_OBSD_inner -#endif - - subu %r31, %r30, 16 - ld %r1, %r31, 0 - ld %r30, %r31, 4 - jmp.n %r1 - addu %r31, %r31, 16 - .size ffi_closure_struct_OBSD,.-ffi_closure_struct_OBSD diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/metag/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/metag/ffi.c deleted file mode 100644 index 46b383e7a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/metag/ffi.c +++ /dev/null @@ -1,330 +0,0 @@ -/* ---------------------------------------------------------------------- - ffi.c - Copyright (c) 2013 Imagination Technologies - - Meta Foreign Function Interface - 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 SIMON POSNJAK 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 -#include - -#include - -#define MIN(a,b) (((a) < (b)) ? (a) : (b)) - -/* - * ffi_prep_args is called by the assembly routine once stack space has been - * allocated for the function's arguments - */ - -unsigned int ffi_prep_args(char *stack, extended_cif *ecif) -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - - argp = stack; - - /* Store return value */ - if ( ecif->cif->flags == FFI_TYPE_STRUCT ) { - argp -= 4; - *(void **) argp = ecif->rvalue; - } - - p_argv = ecif->avalue; - - /* point to next location */ - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; (i != 0); i--, p_arg++, p_argv++) - { - size_t z; - - /* Move argp to address of argument */ - z = (*p_arg)->size; - argp -= z; - - /* Align if necessary */ - argp = (char *) ALIGN_DOWN(ALIGN_DOWN(argp, (*p_arg)->alignment), 4); - - if (z < sizeof(int)) { - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - case FFI_TYPE_STRUCT: - memcpy(argp, *p_argv, (*p_arg)->size); - break; - default: - FFI_ASSERT(0); - } - } else if ( z == sizeof(int)) { - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - } else { - memcpy(argp, *p_argv, z); - } - } - - /* return the size of the arguments to be passed in registers, - padded to an 8 byte boundary to preserve stack alignment */ - return ALIGN(MIN(stack - argp, 6*4), 8); -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - ffi_type **ptr; - unsigned i, bytes = 0; - - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) { - if ((*ptr)->size == 0) - return FFI_BAD_TYPEDEF; - - /* Perform a sanity check on the argument type, do this - check after the initialization. */ - FFI_ASSERT_VALID_TYPE(*ptr); - - /* Add any padding if necessary */ - if (((*ptr)->alignment - 1) & bytes) - bytes = ALIGN(bytes, (*ptr)->alignment); - - bytes += ALIGN((*ptr)->size, 4); - } - - /* Ensure arg space is aligned to an 8-byte boundary */ - bytes = ALIGN(bytes, 8); - - /* Make space for the return structure pointer */ - if (cif->rtype->type == FFI_TYPE_STRUCT) { - bytes += sizeof(void*); - - /* Ensure stack is aligned to an 8-byte boundary */ - bytes = ALIGN(bytes, 8); - } - - cif->bytes = bytes; - - /* Set the return type flag */ - switch (cif->rtype->type) { - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags = (unsigned) cif->rtype->type; - break; - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags = (unsigned) FFI_TYPE_SINT64; - break; - case FFI_TYPE_STRUCT: - /* Meta can store return values which are <= 64 bits */ - if (cif->rtype->size <= 4) - /* Returned to D0Re0 as 32-bit value */ - cif->flags = (unsigned)FFI_TYPE_INT; - else if ((cif->rtype->size > 4) && (cif->rtype->size <= 8)) - /* Returned valued is stored to D1Re0|R0Re0 */ - cif->flags = (unsigned)FFI_TYPE_DOUBLE; - else - /* value stored in memory */ - cif->flags = (unsigned)FFI_TYPE_STRUCT; - break; - default: - cif->flags = (unsigned)FFI_TYPE_INT; - break; - } - return FFI_OK; -} - -extern void ffi_call_SYSV(void (*fn)(void), extended_cif *, unsigned, unsigned, double *); - -/* - * Exported in API. Entry point - * cif -> ffi_cif object - * fn -> function pointer - * rvalue -> pointer to return value - * avalue -> vector of void * pointers pointing to memory locations holding the - * arguments - */ -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - int small_struct = (((cif->flags == FFI_TYPE_INT) || (cif->flags == FFI_TYPE_DOUBLE)) && (cif->rtype->type == FFI_TYPE_STRUCT)); - ecif.cif = cif; - ecif.avalue = avalue; - - double temp; - - /* - * If the return value is a struct and we don't have a return value address - * then we need to make one - */ - - if ((rvalue == NULL ) && (cif->flags == FFI_TYPE_STRUCT)) - ecif.rvalue = alloca(cif->rtype->size); - else if (small_struct) - ecif.rvalue = &temp; - else - ecif.rvalue = rvalue; - - switch (cif->abi) { - case FFI_SYSV: - ffi_call_SYSV(fn, &ecif, cif->bytes, cif->flags, ecif.rvalue); - break; - default: - FFI_ASSERT(0); - break; - } - - if (small_struct) - memcpy (rvalue, &temp, cif->rtype->size); -} - -/* private members */ - -static void ffi_prep_incoming_args_SYSV (char *, void **, void **, - ffi_cif*, float *); - -void ffi_closure_SYSV (ffi_closure *); - -/* Do NOT change that without changing the FFI_TRAMPOLINE_SIZE */ -extern unsigned int ffi_metag_trampoline[10]; /* 10 instructions */ - -/* end of private members */ - -/* - * __tramp: trampoline memory location - * __fun: assembly routine - * __ctx: memory location for wrapper - * - * At this point, tramp[0] == __ctx ! - */ -void ffi_init_trampoline(unsigned char *__tramp, unsigned int __fun, unsigned int __ctx) { - memcpy (__tramp, ffi_metag_trampoline, sizeof(ffi_metag_trampoline)); - *(unsigned int*) &__tramp[40] = __ctx; - *(unsigned int*) &__tramp[44] = __fun; - /* This will flush the instruction cache */ - __builtin_meta2_cachewd(&__tramp[0], 1); - __builtin_meta2_cachewd(&__tramp[47], 1); -} - - - -/* the cif must already be prepared */ - -ffi_status -ffi_prep_closure_loc (ffi_closure *closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - void (*closure_func)(ffi_closure*) = NULL; - - if (cif->abi == FFI_SYSV) - closure_func = &ffi_closure_SYSV; - else - return FFI_BAD_ABI; - - ffi_init_trampoline( - (unsigned char*)&closure->tramp[0], - (unsigned int)closure_func, - (unsigned int)codeloc); - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - - -/* This function is jumped to by the trampoline */ -unsigned int ffi_closure_SYSV_inner (closure, respp, args, vfp_args) - ffi_closure *closure; - void **respp; - void *args; - void *vfp_args; -{ - ffi_cif *cif; - void **arg_area; - - cif = closure->cif; - arg_area = (void**) alloca (cif->nargs * sizeof (void*)); - - /* - * This call will initialize ARG_AREA, such that each - * element in that array points to the corresponding - * value on the stack; and if the function returns - * a structure, it will re-set RESP to point to the - * structure return address. - */ - ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif, vfp_args); - - (closure->fun) ( cif, *respp, arg_area, closure->user_data); - - return cif->flags; -} - -static void ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, - void **avalue, ffi_cif *cif, - float *vfp_stack) -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - - /* stack points to original arguments */ - argp = stack; - - /* Store return value */ - if ( cif->flags == FFI_TYPE_STRUCT ) { - argp -= 4; - *rvalue = *(void **) argp; - } - - p_argv = avalue; - - for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) { - size_t z; - size_t alignment; - - alignment = (*p_arg)->alignment; - if (alignment < 4) - alignment = 4; - if ((alignment - 1) & (unsigned)argp) - argp = (char *) ALIGN(argp, alignment); - - z = (*p_arg)->size; - *p_argv = (void*) argp; - p_argv++; - argp -= z; - } - return; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/metag/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/metag/ffitarget.h deleted file mode 100644 index 7b9dbebca..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/metag/ffitarget.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2013 Imagination Technologies Ltd. - Target configuration macros for Meta - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_DEFAULT_ABI = FFI_SYSV, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1, -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 48 -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/metag/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/metag/sysv.S deleted file mode 100644 index b4b2a3b26..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/metag/sysv.S +++ /dev/null @@ -1,311 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2013 Imagination Technologies Ltd. - - Meta Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#ifdef HAVE_MACHINE_ASM_H -#include -#else -#ifdef __USER_LABEL_PREFIX__ -#define CONCAT1(a, b) CONCAT2(a, b) -#define CONCAT2(a, b) a ## b - -/* Use the right prefix for global labels. */ -#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) -#else -#define CNAME(x) x -#endif -#define ENTRY(x) .globl CNAME(x); .type CNAME(x), %function; CNAME(x): -#endif - -#ifdef __ELF__ -#define LSYM(x) .x -#else -#define LSYM(x) x -#endif - -.macro call_reg x= - .text - .balign 4 - mov D1RtP, \x - swap D1RtP, PC -.endm - -! Save register arguments -.macro SAVE_ARGS - .text - .balign 4 - setl [A0StP++], D0Ar6, D1Ar5 - setl [A0StP++], D0Ar4, D1Ar3 - setl [A0StP++], D0Ar2, D1Ar1 -.endm - -! Save retrun, frame pointer and other regs -.macro SAVE_REGS regs= - .text - .balign 4 - setl [A0StP++], D0FrT, D1RtP - ! Needs to be a pair of regs - .ifnc "\regs","" - setl [A0StP++], \regs - .endif -.endm - -! Declare a global function -.macro METAG_FUNC_START name - .text - .balign 4 - ENTRY(\name) -.endm - -! Return registers from the stack. Reverse SAVE_REGS operation -.macro RET_REGS regs=, cond= - .ifnc "\regs", "" - getl \regs, [--A0StP] - .endif - getl D0FrT, D1RtP, [--A0StP] -.endm - -! Return arguments -.macro RET_ARGS - getl D0Ar2, D1Ar1, [--A0StP] - getl D0Ar4, D1Ar3, [--A0StP] - getl D0Ar6, D1Ar5, [--A0StP] -.endm - - - ! D1Ar1: fn - ! D0Ar2: &ecif - ! D1Ar3: cif->bytes - ! D0Ar4: fig->flags - ! D1Ar5: ecif.rvalue - - ! This assumes we are using GNU as -METAG_FUNC_START ffi_call_SYSV - ! Save argument registers - - SAVE_ARGS - - ! new frame - mov D0FrT, A0FrP - add A0FrP, A0StP, #0 - - ! Preserve the old frame pointer - SAVE_REGS "D1.5, D0.5" - - ! Make room for new args. cifs->bytes is the total space for input - ! and return arguments - - add A0StP, A0StP, D1Ar3 - - ! Preserve cifs->bytes & fn - mov D0.5, D1Ar3 - mov D1.5, D1Ar1 - - ! Place all of the ffi_prep_args in position - mov D1Ar1, A0StP - - ! Call ffi_prep_args(stack, &ecif) -#ifdef __PIC__ - callr D1RtP, CNAME(ffi_prep_args@PLT) -#else - callr D1RtP, CNAME(ffi_prep_args) -#endif - - ! Restore fn pointer - - ! The foreign stack should look like this - ! XXXXX XXXXXX <--- stack pointer - ! FnArgN rvalue - ! FnArgN+2 FnArgN+1 - ! FnArgN+4 FnArgN+3 - ! .... - ! - - ! A0StP now points to the first (or return) argument + 4 - - ! Preserve cif->bytes - getl D0Ar2, D1Ar1, [--A0StP] - getl D0Ar4, D1Ar3, [--A0StP] - getl D0Ar6, D1Ar5, [--A0StP] - - ! Place A0StP to the first argument again - add A0StP, A0StP, #24 ! That's because we loaded 6 regs x 4 byte each - - ! A0FrP points to the initial stack without the reserved space for the - ! cifs->bytes, whilst A0StP points to the stack after the space allocation - - ! fn was the first argument of ffi_call_SYSV. - ! The stack at this point looks like this: - ! - ! A0StP(on entry to _SYSV) -> Arg6 Arg5 | low - ! Arg4 Arg3 | - ! Arg2 Arg1 | - ! A0FrP ----> D0FrtP D1RtP | - ! D1.5 D0.5 | - ! A0StP(bf prep_args) -> FnArgn FnArgn-1 | - ! FnArgn-2FnArgn-3 | - ! ................ | <= cifs->bytes - ! FnArg4 FnArg3 | - ! A0StP (prv_A0StP+cifs->bytes) FnArg2 FnArg1 | high - ! - ! fn was in Arg1 so it's located in in A0FrP+#-0xC - ! - - ! D0Re0 contains the size of arguments stored in registers - sub A0StP, A0StP, D0Re0 - - ! Arg1 is the function pointer for the foreign call. This has been - ! preserved in D1.5 - - ! Time to call (fn). Arguments should be like this: - ! Arg1-Arg6 are loaded to regs - ! The rest of the arguments are stored in stack pointed by A0StP - - call_reg D1.5 - - ! Reset stack. - - mov A0StP, A0FrP - - ! Load Arg1 with the pointer to storage for the return type - ! This was stored in Arg5 - - getd D1Ar1, [A0FrP+#-20] - - ! Load D0Ar2 with the return type code. This was stored in Arg4 (flags) - - getd D0Ar2, [A0FrP+#-16] - - ! We are ready to start processing the return value - ! D0Re0 (and D1Re0) hold the return value - - ! If the return value is NULL, assume no return value - cmp D1Ar1, #0 - beq LSYM(Lepilogue) - - ! return INT - cmp D0Ar2, #FFI_TYPE_INT - ! Sadly, there is no setd{cc} instruction so we need to workaround that - bne .INT64 - setd [D1Ar1], D0Re0 - b LSYM(Lepilogue) - - ! return INT64 -.INT64: - cmp D0Ar2, #FFI_TYPE_SINT64 - setleq [D1Ar1], D0Re0, D1Re0 - - ! return DOUBLE - cmp D0Ar2, #FFI_TYPE_DOUBLE - setl [D1AR1++], D0Re0, D1Re0 - -LSYM(Lepilogue): - ! At this point, the stack pointer points right after the argument - ! saved area. We need to restore 4 regs, therefore we need to move - ! 16 bytes ahead. - add A0StP, A0StP, #16 - RET_REGS "D1.5, D0.5" - RET_ARGS - getd D0Re0, [A0StP] - mov A0FrP, D0FrT - swap D1RtP, PC - -.ffi_call_SYSV_end: - .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) - - -/* - (called by ffi_metag_trampoline) - void ffi_closure_SYSV (ffi_closure*) - - (called by ffi_closure_SYSV) - unsigned int FFI_HIDDEN - ffi_closure_SYSV_inner (closure,respp, args) - ffi_closure *closure; - void **respp; - void *args; -*/ - -METAG_FUNC_START ffi_closure_SYSV - ! We assume that D1Ar1 holds the address of the - ! ffi_closure struct. We will use that to fetch the - ! arguments. The stack pointer points to an empty space - ! and it is ready to store more data. - - ! D1Ar1 is ready - ! Allocate stack space for return value - add A0StP, A0StP, #8 - ! Store it to D0Ar2 - sub D0Ar2, A0StP, #8 - - sub D1Ar3, A0FrP, #4 - - ! D1Ar3 contains the address of the original D1Ar1 argument - ! We need to subtract #4 later on - - ! Preverve D0Ar2 - mov D0.5, D0Ar2 - -#ifdef __PIC__ - callr D1RtP, CNAME(ffi_closure_SYSV_inner@PLT) -#else - callr D1RtP, CNAME(ffi_closure_SYSV_inner) -#endif - - ! Check the return value and store it to D0.5 - cmp D0Re0, #FFI_TYPE_INT - beq .Lretint - cmp D0Re0, #FFI_TYPE_DOUBLE - beq .Lretdouble -.Lclosure_epilogue: - sub A0StP, A0StP, #8 - RET_REGS "D1.5, D0.5" - RET_ARGS - swap D1RtP, PC - -.Lretint: - setd [D0.5], D0Re0 - b .Lclosure_epilogue -.Lretdouble: - setl [D0.5++], D0Re0, D1Re0 - b .Lclosure_epilogue -.ffi_closure_SYSV_end: -.size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) - - -ENTRY(ffi_metag_trampoline) - SAVE_ARGS - ! New frame - mov A0FrP, A0StP - SAVE_REGS "D1.5, D0.5" - mov D0.5, PC - ! Load D1Ar1 the value of ffi_metag_trampoline - getd D1Ar1, [D0.5 + #8] - ! Jump to ffi_closure_SYSV - getd PC, [D0.5 + #12] diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/microblaze/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/microblaze/ffi.c deleted file mode 100644 index ea962ea48..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/microblaze/ffi.c +++ /dev/null @@ -1,321 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2012, 2013 Xilinx, Inc - - MicroBlaze Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -extern void ffi_call_SYSV(void (*)(void*, extended_cif*), extended_cif*, - unsigned int, unsigned int, unsigned int*, void (*fn)(void), - unsigned int, unsigned int); - -extern void ffi_closure_SYSV(void); - -#define WORD_SIZE sizeof(unsigned int) -#define ARGS_REGISTER_SIZE (WORD_SIZE * 6) -#define WORD_ALIGN(x) ALIGN(x, WORD_SIZE) - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ -void ffi_prep_args(void* stack, extended_cif* ecif) -{ - unsigned int i; - ffi_type** p_arg; - void** p_argv; - void* stack_args_p = stack; - - p_argv = ecif->avalue; - - if (ecif == NULL || ecif->cif == NULL) { - return; /* no description to prepare */ - } - - if ((ecif->cif->rtype != NULL) && - (ecif->cif->rtype->type == FFI_TYPE_STRUCT)) - { - /* if return type is a struct which is referenced on the stack/reg5, - * by a pointer. Stored the return value pointer in r5. - */ - char* addr = stack_args_p; - memcpy(addr, &(ecif->rvalue), WORD_SIZE); - stack_args_p += WORD_SIZE; - } - - if (ecif->avalue == NULL) { - return; /* no arguments to prepare */ - } - - for (i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs; - i++, p_arg++) - { - size_t size = (*p_arg)->size; - int type = (*p_arg)->type; - void* value = p_argv[i]; - char* addr = stack_args_p; - int aligned_size = WORD_ALIGN(size); - - /* force word alignment on the stack */ - stack_args_p += aligned_size; - - switch (type) - { - case FFI_TYPE_UINT8: - *(unsigned int *)addr = (unsigned int)*(UINT8*)(value); - break; - case FFI_TYPE_SINT8: - *(signed int *)addr = (signed int)*(SINT8*)(value); - break; - case FFI_TYPE_UINT16: - *(unsigned int *)addr = (unsigned int)*(UINT16*)(value); - break; - case FFI_TYPE_SINT16: - *(signed int *)addr = (signed int)*(SINT16*)(value); - break; - case FFI_TYPE_STRUCT: -#if __BIG_ENDIAN__ - /* - * MicroBlaze toolchain appears to emit: - * bsrli r5, r5, 8 (caller) - * ... - * - * ... - * bslli r5, r5, 8 (callee) - * - * For structs like "struct a { uint8_t a[3]; };", when passed - * by value. - * - * Structs like "struct b { uint16_t a; };" are also expected - * to be packed strangely in registers. - * - * This appears to be because the microblaze toolchain expects - * "struct b == uint16_t", which is only any issue for big - * endian. - * - * The following is a work around for big-endian only, for the - * above mentioned case, it will re-align the contents of a - * <= 3-byte struct value. - */ - if (size < WORD_SIZE) - { - memcpy (addr + (WORD_SIZE - size), value, size); - break; - } -#endif - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_FLOAT: - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_DOUBLE: - default: - memcpy(addr, value, aligned_size); - } - } -} - -ffi_status ffi_prep_cif_machdep(ffi_cif* cif) -{ - /* check ABI */ - switch (cif->abi) - { - case FFI_SYSV: - break; - default: - return FFI_BAD_ABI; - } - return FFI_OK; -} - -void ffi_call(ffi_cif* cif, void (*fn)(void), void* rvalue, void** avalue) -{ - extended_cif ecif; - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) { - ecif.rvalue = alloca(cif->rtype->size); - } else { - ecif.rvalue = rvalue; - } - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn, cif->rtype->type, cif->rtype->size); - break; - default: - FFI_ASSERT(0); - break; - } -} - -void ffi_closure_call_SYSV(void* register_args, void* stack_args, - ffi_closure* closure, void* rvalue, - unsigned int* rtype, unsigned int* rsize) -{ - /* prepare arguments for closure call */ - ffi_cif* cif = closure->cif; - ffi_type** arg_types = cif->arg_types; - - /* re-allocate data for the args. This needs to be done in order to keep - * multi-word objects (e.g. structs) in contiguous memory. Callers are not - * required to store the value of args in the lower 6 words in the stack - * (although they are allocated in the stack). - */ - char* stackclone = alloca(cif->bytes); - void** avalue = alloca(cif->nargs * sizeof(void*)); - void* struct_rvalue = NULL; - char* ptr = stackclone; - int i; - - /* copy registers into stack clone */ - int registers_used = cif->bytes; - if (registers_used > ARGS_REGISTER_SIZE) { - registers_used = ARGS_REGISTER_SIZE; - } - memcpy(stackclone, register_args, registers_used); - - /* copy stack allocated args into stack clone */ - if (cif->bytes > ARGS_REGISTER_SIZE) { - int stack_used = cif->bytes - ARGS_REGISTER_SIZE; - memcpy(stackclone + ARGS_REGISTER_SIZE, stack_args, stack_used); - } - - /* preserve struct type return pointer passing */ - if ((cif->rtype != NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) { - struct_rvalue = *((void**)ptr); - ptr += WORD_SIZE; - } - - /* populate arg pointer list */ - for (i = 0; i < cif->nargs; i++) - { - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: -#ifdef __BIG_ENDIAN__ - avalue[i] = ptr + 3; -#else - avalue[i] = ptr; -#endif - break; - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: -#ifdef __BIG_ENDIAN__ - avalue[i] = ptr + 2; -#else - avalue[i] = ptr; -#endif - break; - case FFI_TYPE_STRUCT: -#if __BIG_ENDIAN__ - /* - * Work around strange ABI behaviour. - * (see info in ffi_prep_args) - */ - if (arg_types[i]->size < WORD_SIZE) - { - memcpy (ptr, ptr + (WORD_SIZE - arg_types[i]->size), arg_types[i]->size); - } -#endif - avalue[i] = (void*)ptr; - break; - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_DOUBLE: - avalue[i] = ptr; - break; - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_FLOAT: - default: - /* default 4-byte argument */ - avalue[i] = ptr; - break; - } - ptr += WORD_ALIGN(arg_types[i]->size); - } - - /* set the return type info passed back to the wrapper */ - *rsize = cif->rtype->size; - *rtype = cif->rtype->type; - if (struct_rvalue != NULL) { - closure->fun(cif, struct_rvalue, avalue, closure->user_data); - /* copy struct return pointer value into function return value */ - *((void**)rvalue) = struct_rvalue; - } else { - closure->fun(cif, rvalue, avalue, closure->user_data); - } -} - -ffi_status ffi_prep_closure_loc( - ffi_closure* closure, ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void* user_data, void* codeloc) -{ - unsigned long* tramp = (unsigned long*)&(closure->tramp[0]); - unsigned long cls = (unsigned long)codeloc; - unsigned long fn = 0; - unsigned long fn_closure_call_sysv = (unsigned long)ffi_closure_call_SYSV; - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - switch (cif->abi) - { - case FFI_SYSV: - fn = (unsigned long)ffi_closure_SYSV; - - /* load r11 (temp) with fn */ - /* imm fn(upper) */ - tramp[0] = 0xb0000000 | ((fn >> 16) & 0xffff); - /* addik r11, r0, fn(lower) */ - tramp[1] = 0x31600000 | (fn & 0xffff); - - /* load r12 (temp) with cls */ - /* imm cls(upper) */ - tramp[2] = 0xb0000000 | ((cls >> 16) & 0xffff); - /* addik r12, r0, cls(lower) */ - tramp[3] = 0x31800000 | (cls & 0xffff); - - /* load r3 (temp) with ffi_closure_call_SYSV */ - /* imm fn_closure_call_sysv(upper) */ - tramp[4] = 0xb0000000 | ((fn_closure_call_sysv >> 16) & 0xffff); - /* addik r3, r0, fn_closure_call_sysv(lower) */ - tramp[5] = 0x30600000 | (fn_closure_call_sysv & 0xffff); - /* branch/jump to address stored in r11 (fn) */ - tramp[6] = 0x98085800; /* bra r11 */ - - break; - default: - return FFI_BAD_ABI; - } - return FFI_OK; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/microblaze/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/microblaze/ffitarget.h deleted file mode 100644 index c6fa5a411..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/microblaze/ffitarget.h +++ /dev/null @@ -1,53 +0,0 @@ -/* ----------------------------------------------------------------------- - ffitarget.h - Copyright (c) 2012, 2013 Xilinx, Inc - - Target configuration macros for MicroBlaze. - - 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. - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -/* Definitions for closures */ - -#define FFI_CLOSURES 1 -#define FFI_NATIVE_RAW_API 0 - -#define FFI_TRAMPOLINE_SIZE (4*8) - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/microblaze/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/microblaze/sysv.S deleted file mode 100644 index ea43e9d54..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/microblaze/sysv.S +++ /dev/null @@ -1,302 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2012, 2013 Xilinx, Inc - - MicroBlaze Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - /* - * arg[0] (r5) = ffi_prep_args, - * arg[1] (r6) = &ecif, - * arg[2] (r7) = cif->bytes, - * arg[3] (r8) = cif->flags, - * arg[4] (r9) = ecif.rvalue, - * arg[5] (r10) = fn - * arg[6] (sp[0]) = cif->rtype->type - * arg[7] (sp[4]) = cif->rtype->size - */ - .text - .globl ffi_call_SYSV - .type ffi_call_SYSV, @function -ffi_call_SYSV: - /* push callee saves */ - addik r1, r1, -20 - swi r19, r1, 0 /* Frame Pointer */ - swi r20, r1, 4 /* PIC register */ - swi r21, r1, 8 /* PIC register */ - swi r22, r1, 12 /* save for locals */ - swi r23, r1, 16 /* save for locals */ - - /* save the r5-r10 registers in the stack */ - addik r1, r1, -24 /* increment sp to store 6x 32-bit words */ - swi r5, r1, 0 - swi r6, r1, 4 - swi r7, r1, 8 - swi r8, r1, 12 - swi r9, r1, 16 - swi r10, r1, 20 - - /* save function pointer */ - addik r3, r5, 0 /* copy ffi_prep_args into r3 */ - addik r22, r1, 0 /* save sp for unallocated args into r22 (callee-saved) */ - addik r23, r10, 0 /* save function address into r23 (callee-saved) */ - - /* prepare stack with allocation for n (bytes = r7) args */ - rsub r1, r7, r1 /* subtract bytes from sp */ - - /* prep args for ffi_prep_args call */ - addik r5, r1, 0 /* store stack pointer into arg[0] */ - /* r6 still holds ecif for arg[1] */ - - /* Call ffi_prep_args(stack, &ecif). */ - addik r1, r1, -4 - swi r15, r1, 0 /* store the link register in the frame */ - brald r15, r3 - nop /* branch has delay slot */ - lwi r15, r1, 0 - addik r1, r1, 4 /* restore the link register from the frame */ - /* returns calling stack pointer location */ - - /* prepare args for fn call, prep_args populates them onto the stack */ - lwi r5, r1, 0 /* arg[0] */ - lwi r6, r1, 4 /* arg[1] */ - lwi r7, r1, 8 /* arg[2] */ - lwi r8, r1, 12 /* arg[3] */ - lwi r9, r1, 16 /* arg[4] */ - lwi r10, r1, 20 /* arg[5] */ - - /* call (fn) (...). */ - addik r1, r1, -4 - swi r15, r1, 0 /* store the link register in the frame */ - brald r15, r23 - nop /* branch has delay slot */ - lwi r15, r1, 0 - addik r1, r1, 4 /* restore the link register from the frame */ - - /* Remove the space we pushed for the args. */ - addik r1, r22, 0 /* restore old SP */ - - /* restore this functions parameters */ - lwi r5, r1, 0 /* arg[0] */ - lwi r6, r1, 4 /* arg[1] */ - lwi r7, r1, 8 /* arg[2] */ - lwi r8, r1, 12 /* arg[3] */ - lwi r9, r1, 16 /* arg[4] */ - lwi r10, r1, 20 /* arg[5] */ - addik r1, r1, 24 /* decrement sp to de-allocate 6x 32-bit words */ - - /* If the return value pointer is NULL, assume no return value. */ - beqi r9, ffi_call_SYSV_end - - lwi r22, r1, 48 /* get return type (20 for locals + 28 for arg[6]) */ - lwi r23, r1, 52 /* get return size (20 for locals + 32 for arg[7]) */ - - /* Check if return type is actually a struct, do nothing */ - rsubi r11, r22, FFI_TYPE_STRUCT - beqi r11, ffi_call_SYSV_end - - /* Return 8bit */ - rsubi r11, r23, 1 - beqi r11, ffi_call_SYSV_store8 - - /* Return 16bit */ - rsubi r11, r23, 2 - beqi r11, ffi_call_SYSV_store16 - - /* Return 32bit */ - rsubi r11, r23, 4 - beqi r11, ffi_call_SYSV_store32 - - /* Return 64bit */ - rsubi r11, r23, 8 - beqi r11, ffi_call_SYSV_store64 - - /* Didn't match anything */ - bri ffi_call_SYSV_end - -ffi_call_SYSV_store64: - swi r3, r9, 0 /* store word r3 into return value */ - swi r4, r9, 4 /* store word r4 into return value */ - bri ffi_call_SYSV_end - -ffi_call_SYSV_store32: - swi r3, r9, 0 /* store word r3 into return value */ - bri ffi_call_SYSV_end - -ffi_call_SYSV_store16: -#ifdef __BIG_ENDIAN__ - shi r3, r9, 2 /* store half-word r3 into return value */ -#else - shi r3, r9, 0 /* store half-word r3 into return value */ -#endif - bri ffi_call_SYSV_end - -ffi_call_SYSV_store8: -#ifdef __BIG_ENDIAN__ - sbi r3, r9, 3 /* store byte r3 into return value */ -#else - sbi r3, r9, 0 /* store byte r3 into return value */ -#endif - bri ffi_call_SYSV_end - -ffi_call_SYSV_end: - /* callee restores */ - lwi r19, r1, 0 /* frame pointer */ - lwi r20, r1, 4 /* PIC register */ - lwi r21, r1, 8 /* PIC register */ - lwi r22, r1, 12 - lwi r23, r1, 16 - addik r1, r1, 20 - - /* return from sub-routine (with delay slot) */ - rtsd r15, 8 - nop - - .size ffi_call_SYSV, . - ffi_call_SYSV - -/* ------------------------------------------------------------------------- */ - - /* - * args passed into this function, are passed down to the callee. - * this function is the target of the closure trampoline, as such r12 is - * a pointer to the closure object. - */ - .text - .globl ffi_closure_SYSV - .type ffi_closure_SYSV, @function -ffi_closure_SYSV: - /* push callee saves */ - addik r11, r1, 28 /* save stack args start location (excluding regs/link) */ - addik r1, r1, -12 - swi r19, r1, 0 /* Frame Pointer */ - swi r20, r1, 4 /* PIC register */ - swi r21, r1, 8 /* PIC register */ - - /* store register args on stack */ - addik r1, r1, -24 - swi r5, r1, 0 - swi r6, r1, 4 - swi r7, r1, 8 - swi r8, r1, 12 - swi r9, r1, 16 - swi r10, r1, 20 - - /* setup args */ - addik r5, r1, 0 /* register_args */ - addik r6, r11, 0 /* stack_args */ - addik r7, r12, 0 /* closure object */ - addik r1, r1, -8 /* allocate return value */ - addik r8, r1, 0 /* void* rvalue */ - addik r1, r1, -8 /* allocate for return type/size values */ - addik r9, r1, 0 /* void* rtype */ - addik r10, r1, 4 /* void* rsize */ - - /* call the wrap_call function */ - addik r1, r1, -28 /* allocate args + link reg */ - swi r15, r1, 0 /* store the link register in the frame */ - brald r15, r3 - nop /* branch has delay slot */ - lwi r15, r1, 0 - addik r1, r1, 28 /* restore the link register from the frame */ - -ffi_closure_SYSV_prepare_return: - lwi r9, r1, 0 /* rtype */ - lwi r10, r1, 4 /* rsize */ - addik r1, r1, 8 /* de-allocate return info values */ - - /* Check if return type is actually a struct, store 4 bytes */ - rsubi r11, r9, FFI_TYPE_STRUCT - beqi r11, ffi_closure_SYSV_store32 - - /* Return 8bit */ - rsubi r11, r10, 1 - beqi r11, ffi_closure_SYSV_store8 - - /* Return 16bit */ - rsubi r11, r10, 2 - beqi r11, ffi_closure_SYSV_store16 - - /* Return 32bit */ - rsubi r11, r10, 4 - beqi r11, ffi_closure_SYSV_store32 - - /* Return 64bit */ - rsubi r11, r10, 8 - beqi r11, ffi_closure_SYSV_store64 - - /* Didn't match anything */ - bri ffi_closure_SYSV_end - -ffi_closure_SYSV_store64: - lwi r3, r1, 0 /* store word r3 into return value */ - lwi r4, r1, 4 /* store word r4 into return value */ - /* 64 bits == 2 words, no sign extend occurs */ - bri ffi_closure_SYSV_end - -ffi_closure_SYSV_store32: - lwi r3, r1, 0 /* store word r3 into return value */ - /* 32 bits == 1 word, no sign extend occurs */ - bri ffi_closure_SYSV_end - -ffi_closure_SYSV_store16: -#ifdef __BIG_ENDIAN__ - lhui r3, r1, 2 /* store half-word r3 into return value */ -#else - lhui r3, r1, 0 /* store half-word r3 into return value */ -#endif - rsubi r11, r9, FFI_TYPE_SINT16 - bnei r11, ffi_closure_SYSV_end - sext16 r3, r3 /* fix sign extend of sint8 */ - bri ffi_closure_SYSV_end - -ffi_closure_SYSV_store8: -#ifdef __BIG_ENDIAN__ - lbui r3, r1, 3 /* store byte r3 into return value */ -#else - lbui r3, r1, 0 /* store byte r3 into return value */ -#endif - rsubi r11, r9, FFI_TYPE_SINT8 - bnei r11, ffi_closure_SYSV_end - sext8 r3, r3 /* fix sign extend of sint8 */ - bri ffi_closure_SYSV_end - -ffi_closure_SYSV_end: - addik r1, r1, 8 /* de-allocate return value */ - - /* de-allocate stored args */ - addik r1, r1, 24 - - /* callee restores */ - lwi r19, r1, 0 /* frame pointer */ - lwi r20, r1, 4 /* PIC register */ - lwi r21, r1, 8 /* PIC register */ - addik r1, r1, 12 - - /* return from sub-routine (with delay slot) */ - rtsd r15, 8 - nop - - .size ffi_closure_SYSV, . - ffi_closure_SYSV diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/mips/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/mips/ffi.c deleted file mode 100644 index 5d0dd70cb..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/mips/ffi.c +++ /dev/null @@ -1,1050 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2011 Anthony Green - Copyright (c) 2008 David Daney - Copyright (c) 1996, 2007, 2008, 2011 Red Hat, Inc. - - MIPS Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -#ifdef __GNUC__ -# if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) -# define USE__BUILTIN___CLEAR_CACHE 1 -# endif -#endif - -#ifndef USE__BUILTIN___CLEAR_CACHE -# if defined(__OpenBSD__) -# include -# else -# include -# endif -#endif - -#ifdef FFI_DEBUG -# define FFI_MIPS_STOP_HERE() ffi_stop_here() -#else -# define FFI_MIPS_STOP_HERE() do {} while(0) -#endif - -#ifdef FFI_MIPS_N32 -#define FIX_ARGP \ -FFI_ASSERT(argp <= &stack[bytes]); \ -if (argp == &stack[bytes]) \ -{ \ - argp = stack; \ - FFI_MIPS_STOP_HERE(); \ -} -#else -#define FIX_ARGP -#endif - - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -static void ffi_prep_args(char *stack, - extended_cif *ecif, - int bytes, - int flags) -{ - int i; - void **p_argv; - char *argp; - ffi_type **p_arg; - -#ifdef FFI_MIPS_N32 - /* If more than 8 double words are used, the remainder go - on the stack. We reorder stuff on the stack here to - support this easily. */ - if (bytes > 8 * sizeof(ffi_arg)) - argp = &stack[bytes - (8 * sizeof(ffi_arg))]; - else - argp = stack; -#else - argp = stack; -#endif - - memset(stack, 0, bytes); - -#ifdef FFI_MIPS_N32 - if ( ecif->cif->rstruct_flag != 0 ) -#else - if ( ecif->cif->rtype->type == FFI_TYPE_STRUCT ) -#endif - { - *(ffi_arg *) argp = (ffi_arg) ecif->rvalue; - argp += sizeof(ffi_arg); - FIX_ARGP; - } - - p_argv = ecif->avalue; - - for (i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs; i++, p_arg++) - { - size_t z; - unsigned int a; - - /* Align if necessary. */ - a = (*p_arg)->alignment; - if (a < sizeof(ffi_arg)) - a = sizeof(ffi_arg); - - if ((a - 1) & (unsigned long) argp) - { - argp = (char *) ALIGN(argp, a); - FIX_ARGP; - } - - z = (*p_arg)->size; - if (z <= sizeof(ffi_arg)) - { - int type = (*p_arg)->type; - z = sizeof(ffi_arg); - - /* The size of a pointer depends on the ABI */ - if (type == FFI_TYPE_POINTER) - type = (ecif->cif->abi == FFI_N64 - || ecif->cif->abi == FFI_N64_SOFT_FLOAT) - ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; - - if (i < 8 && (ecif->cif->abi == FFI_N32_SOFT_FLOAT - || ecif->cif->abi == FFI_N64_SOFT_FLOAT)) - { - switch (type) - { - case FFI_TYPE_FLOAT: - type = FFI_TYPE_UINT32; - break; - case FFI_TYPE_DOUBLE: - type = FFI_TYPE_UINT64; - break; - default: - break; - } - } - switch (type) - { - case FFI_TYPE_SINT8: - *(ffi_arg *)argp = *(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(ffi_arg *)argp = *(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(ffi_arg *)argp = *(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(ffi_arg *)argp = *(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_SINT32: - *(ffi_arg *)argp = *(SINT32 *)(* p_argv); - break; - - case FFI_TYPE_UINT32: -#ifdef FFI_MIPS_N32 - /* The N32 ABI requires that 32-bit integers - be sign-extended to 64-bits, regardless of - whether they are signed or unsigned. */ - *(ffi_arg *)argp = *(SINT32 *)(* p_argv); -#else - *(ffi_arg *)argp = *(UINT32 *)(* p_argv); -#endif - break; - - /* This can only happen with 64bit slots. */ - case FFI_TYPE_FLOAT: - *(float *) argp = *(float *)(* p_argv); - break; - - /* Handle structures. */ - default: - memcpy(argp, *p_argv, (*p_arg)->size); - break; - } - } - else - { -#ifdef FFI_MIPS_O32 - memcpy(argp, *p_argv, z); -#else - { - unsigned long end = (unsigned long) argp + z; - unsigned long cap = (unsigned long) stack + bytes; - - /* Check if the data will fit within the register space. - Handle it if it doesn't. */ - - if (end <= cap) - memcpy(argp, *p_argv, z); - else - { - unsigned long portion = cap - (unsigned long)argp; - - memcpy(argp, *p_argv, portion); - argp = stack; - z -= portion; - memcpy(argp, (void*)((unsigned long)(*p_argv) + portion), - z); - } - } -#endif - } - p_argv++; - argp += z; - FIX_ARGP; - } -} - -#ifdef FFI_MIPS_N32 - -/* The n32 spec says that if "a chunk consists solely of a double - float field (but not a double, which is part of a union), it - is passed in a floating point register. Any other chunk is - passed in an integer register". This code traverses structure - definitions and generates the appropriate flags. */ - -static unsigned -calc_n32_struct_flags(int soft_float, ffi_type *arg, - unsigned *loc, unsigned *arg_reg) -{ - unsigned flags = 0; - unsigned index = 0; - - ffi_type *e; - - if (soft_float) - return 0; - - while ((e = arg->elements[index])) - { - /* Align this object. */ - *loc = ALIGN(*loc, e->alignment); - if (e->type == FFI_TYPE_DOUBLE) - { - /* Already aligned to FFI_SIZEOF_ARG. */ - *arg_reg = *loc / FFI_SIZEOF_ARG; - if (*arg_reg > 7) - break; - flags += (FFI_TYPE_DOUBLE << (*arg_reg * FFI_FLAG_BITS)); - *loc += e->size; - } - else - *loc += e->size; - index++; - } - /* Next Argument register at alignment of FFI_SIZEOF_ARG. */ - *arg_reg = ALIGN(*loc, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - - return flags; -} - -static unsigned -calc_n32_return_struct_flags(int soft_float, ffi_type *arg) -{ - unsigned flags = 0; - unsigned small = FFI_TYPE_SMALLSTRUCT; - ffi_type *e; - - /* Returning structures under n32 is a tricky thing. - A struct with only one or two floating point fields - is returned in $f0 (and $f2 if necessary). Any other - struct results at most 128 bits are returned in $2 - (the first 64 bits) and $3 (remainder, if necessary). - Larger structs are handled normally. */ - - if (arg->size > 16) - return 0; - - if (arg->size > 8) - small = FFI_TYPE_SMALLSTRUCT2; - - e = arg->elements[0]; - - if (e->type == FFI_TYPE_DOUBLE) - flags = FFI_TYPE_DOUBLE; - else if (e->type == FFI_TYPE_FLOAT) - flags = FFI_TYPE_FLOAT; - - if (flags && (e = arg->elements[1])) - { - if (e->type == FFI_TYPE_DOUBLE) - flags += FFI_TYPE_DOUBLE << FFI_FLAG_BITS; - else if (e->type == FFI_TYPE_FLOAT) - flags += FFI_TYPE_FLOAT << FFI_FLAG_BITS; - else - return small; - - if (flags && (arg->elements[2])) - { - /* There are three arguments and the first two are - floats! This must be passed the old way. */ - return small; - } - if (soft_float) - flags += FFI_TYPE_STRUCT_SOFT; - } - else - if (!flags) - return small; - - return flags; -} - -#endif - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - cif->flags = 0; - -#ifdef FFI_MIPS_O32 - /* Set the flags necessary for O32 processing. FFI_O32_SOFT_FLOAT - * does not have special handling for floating point args. - */ - - if (cif->rtype->type != FFI_TYPE_STRUCT && cif->abi == FFI_O32) - { - if (cif->nargs > 0) - { - switch ((cif->arg_types)[0]->type) - { - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags += (cif->arg_types)[0]->type; - break; - - default: - break; - } - - if (cif->nargs > 1) - { - /* Only handle the second argument if the first - is a float or double. */ - if (cif->flags) - { - switch ((cif->arg_types)[1]->type) - { - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags += (cif->arg_types)[1]->type << FFI_FLAG_BITS; - break; - - default: - break; - } - } - } - } - } - - /* Set the return type flag */ - - if (cif->abi == FFI_O32_SOFT_FLOAT) - { - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_STRUCT: - cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 2); - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_DOUBLE: - cif->flags += FFI_TYPE_UINT64 << (FFI_FLAG_BITS * 2); - break; - - case FFI_TYPE_FLOAT: - default: - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 2); - break; - } - } - else - { - /* FFI_O32 */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_STRUCT: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 2); - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags += FFI_TYPE_UINT64 << (FFI_FLAG_BITS * 2); - break; - - default: - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 2); - break; - } - } -#endif - -#ifdef FFI_MIPS_N32 - /* Set the flags necessary for N32 processing */ - { - int type; - unsigned arg_reg = 0; - unsigned loc = 0; - unsigned count = (cif->nargs < 8) ? cif->nargs : 8; - unsigned index = 0; - - unsigned struct_flags = 0; - int soft_float = (cif->abi == FFI_N32_SOFT_FLOAT - || cif->abi == FFI_N64_SOFT_FLOAT); - - if (cif->rtype->type == FFI_TYPE_STRUCT) - { - struct_flags = calc_n32_return_struct_flags(soft_float, cif->rtype); - - if (struct_flags == 0) - { - /* This means that the structure is being passed as - a hidden argument */ - - arg_reg = 1; - count = (cif->nargs < 7) ? cif->nargs : 7; - - cif->rstruct_flag = !0; - } - else - cif->rstruct_flag = 0; - } - else - cif->rstruct_flag = 0; - - while (count-- > 0 && arg_reg < 8) - { - type = (cif->arg_types)[index]->type; - if (soft_float) - { - switch (type) - { - case FFI_TYPE_FLOAT: - type = FFI_TYPE_UINT32; - break; - case FFI_TYPE_DOUBLE: - type = FFI_TYPE_UINT64; - break; - default: - break; - } - } - switch (type) - { - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags += - ((cif->arg_types)[index]->type << (arg_reg * FFI_FLAG_BITS)); - arg_reg++; - break; - case FFI_TYPE_LONGDOUBLE: - /* Align it. */ - arg_reg = ALIGN(arg_reg, 2); - /* Treat it as two adjacent doubles. */ - if (soft_float) - { - arg_reg += 2; - } - else - { - cif->flags += - (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); - arg_reg++; - cif->flags += - (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); - arg_reg++; - } - break; - - case FFI_TYPE_STRUCT: - loc = arg_reg * FFI_SIZEOF_ARG; - cif->flags += calc_n32_struct_flags(soft_float, - (cif->arg_types)[index], - &loc, &arg_reg); - break; - - default: - arg_reg++; - break; - } - - index++; - } - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_STRUCT: - { - if (struct_flags == 0) - { - /* The structure is returned through a hidden - first argument. Do nothing, 'cause FFI_TYPE_VOID - is 0 */ - } - else - { - /* The structure is returned via some tricky - mechanism */ - cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); - cif->flags += struct_flags << (4 + (FFI_FLAG_BITS * 8)); - } - break; - } - - case FFI_TYPE_VOID: - /* Do nothing, 'cause FFI_TYPE_VOID is 0 */ - break; - - case FFI_TYPE_POINTER: - if (cif->abi == FFI_N32_SOFT_FLOAT || cif->abi == FFI_N32) - cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8); - else - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); - break; - - case FFI_TYPE_FLOAT: - if (soft_float) - { - cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8); - break; - } - /* else fall through */ - case FFI_TYPE_DOUBLE: - if (soft_float) - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); - else - cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8); - break; - - case FFI_TYPE_LONGDOUBLE: - /* Long double is returned as if it were a struct containing - two doubles. */ - if (soft_float) - { - cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); - cif->flags += FFI_TYPE_SMALLSTRUCT2 << (4 + (FFI_FLAG_BITS * 8)); - } - else - { - cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); - cif->flags += (FFI_TYPE_DOUBLE - + (FFI_TYPE_DOUBLE << FFI_FLAG_BITS)) - << (4 + (FFI_FLAG_BITS * 8)); - } - break; - default: - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); - break; - } - } -#endif - - return FFI_OK; -} - -/* Low level routine for calling O32 functions */ -extern int ffi_call_O32(void (*)(char *, extended_cif *, int, int), - extended_cif *, unsigned, - unsigned, unsigned *, void (*)(void)); - -/* Low level routine for calling N32 functions */ -extern int ffi_call_N32(void (*)(char *, extended_cif *, int, int), - extended_cif *, unsigned, - unsigned, void *, void (*)(void)); - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - ecif.rvalue = alloca(cif->rtype->size); - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { -#ifdef FFI_MIPS_O32 - case FFI_O32: - case FFI_O32_SOFT_FLOAT: - ffi_call_O32(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; -#endif - -#ifdef FFI_MIPS_N32 - case FFI_N32: - case FFI_N32_SOFT_FLOAT: - case FFI_N64: - case FFI_N64_SOFT_FLOAT: - { - int copy_rvalue = 0; - int copy_offset = 0; - char *rvalue_copy = ecif.rvalue; - if (cif->rtype->type == FFI_TYPE_STRUCT && cif->rtype->size < 16) - { - /* For structures smaller than 16 bytes we clobber memory - in 8 byte increments. Make a copy so we don't clobber - the callers memory outside of the struct bounds. */ - rvalue_copy = alloca(16); - copy_rvalue = 1; - } - else if (cif->rtype->type == FFI_TYPE_FLOAT - && (cif->abi == FFI_N64_SOFT_FLOAT - || cif->abi == FFI_N32_SOFT_FLOAT)) - { - rvalue_copy = alloca (8); - copy_rvalue = 1; -#if defined(__MIPSEB__) || defined(_MIPSEB) - copy_offset = 4; -#endif - } - ffi_call_N32(ffi_prep_args, &ecif, cif->bytes, - cif->flags, rvalue_copy, fn); - if (copy_rvalue) - memcpy(ecif.rvalue, rvalue_copy + copy_offset, cif->rtype->size); - } - break; -#endif - - default: - FFI_ASSERT(0); - break; - } -} - -#if FFI_CLOSURES -#if defined(FFI_MIPS_O32) -extern void ffi_closure_O32(void); -#else -extern void ffi_closure_N32(void); -#endif /* FFI_MIPS_O32 */ - -ffi_status -ffi_prep_closure_loc (ffi_closure *closure, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp = (unsigned int *) &closure->tramp[0]; - void * fn; - char *clear_location = (char *) codeloc; - -#if defined(FFI_MIPS_O32) - if (cif->abi != FFI_O32 && cif->abi != FFI_O32_SOFT_FLOAT) - return FFI_BAD_ABI; - fn = ffi_closure_O32; -#else -#if _MIPS_SIM ==_ABIN32 - if (cif->abi != FFI_N32 - && cif->abi != FFI_N32_SOFT_FLOAT) - return FFI_BAD_ABI; -#else - if (cif->abi != FFI_N64 - && cif->abi != FFI_N64_SOFT_FLOAT) - return FFI_BAD_ABI; -#endif - fn = ffi_closure_N32; -#endif /* FFI_MIPS_O32 */ - -#if defined(FFI_MIPS_O32) || (_MIPS_SIM ==_ABIN32) - /* lui $25,high(fn) */ - tramp[0] = 0x3c190000 | ((unsigned)fn >> 16); - /* ori $25,low(fn) */ - tramp[1] = 0x37390000 | ((unsigned)fn & 0xffff); - /* lui $12,high(codeloc) */ - tramp[2] = 0x3c0c0000 | ((unsigned)codeloc >> 16); - /* jr $25 */ - tramp[3] = 0x03200008; - /* ori $12,low(codeloc) */ - tramp[4] = 0x358c0000 | ((unsigned)codeloc & 0xffff); -#else - /* N64 has a somewhat larger trampoline. */ - /* lui $25,high(fn) */ - tramp[0] = 0x3c190000 | ((unsigned long)fn >> 48); - /* lui $12,high(codeloc) */ - tramp[1] = 0x3c0c0000 | ((unsigned long)codeloc >> 48); - /* ori $25,mid-high(fn) */ - tramp[2] = 0x37390000 | (((unsigned long)fn >> 32 ) & 0xffff); - /* ori $12,mid-high(codeloc) */ - tramp[3] = 0x358c0000 | (((unsigned long)codeloc >> 32) & 0xffff); - /* dsll $25,$25,16 */ - tramp[4] = 0x0019cc38; - /* dsll $12,$12,16 */ - tramp[5] = 0x000c6438; - /* ori $25,mid-low(fn) */ - tramp[6] = 0x37390000 | (((unsigned long)fn >> 16 ) & 0xffff); - /* ori $12,mid-low(codeloc) */ - tramp[7] = 0x358c0000 | (((unsigned long)codeloc >> 16) & 0xffff); - /* dsll $25,$25,16 */ - tramp[8] = 0x0019cc38; - /* dsll $12,$12,16 */ - tramp[9] = 0x000c6438; - /* ori $25,low(fn) */ - tramp[10] = 0x37390000 | ((unsigned long)fn & 0xffff); - /* jr $25 */ - tramp[11] = 0x03200008; - /* ori $12,low(codeloc) */ - tramp[12] = 0x358c0000 | ((unsigned long)codeloc & 0xffff); - -#endif - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - -#ifdef USE__BUILTIN___CLEAR_CACHE - __builtin___clear_cache(clear_location, clear_location + FFI_TRAMPOLINE_SIZE); -#else - cacheflush (clear_location, FFI_TRAMPOLINE_SIZE, ICACHE); -#endif - return FFI_OK; -} - -/* - * Decodes the arguments to a function, which will be stored on the - * stack. AR is the pointer to the beginning of the integer arguments - * (and, depending upon the arguments, some floating-point arguments - * as well). FPR is a pointer to the area where floating point - * registers have been saved, if any. - * - * RVALUE is the location where the function return value will be - * stored. CLOSURE is the prepared closure to invoke. - * - * This function should only be called from assembly, which is in - * turn called from a trampoline. - * - * Returns the function return type. - * - * Based on the similar routine for sparc. - */ -int -ffi_closure_mips_inner_O32 (ffi_closure *closure, - void *rvalue, ffi_arg *ar, - double *fpr) -{ - ffi_cif *cif; - void **avaluep; - ffi_arg *avalue; - ffi_type **arg_types; - int i, avn, argn, seen_int; - - cif = closure->cif; - avalue = alloca (cif->nargs * sizeof (ffi_arg)); - avaluep = alloca (cif->nargs * sizeof (ffi_arg)); - - seen_int = (cif->abi == FFI_O32_SOFT_FLOAT); - argn = 0; - - if ((cif->flags >> (FFI_FLAG_BITS * 2)) == FFI_TYPE_STRUCT) - { - rvalue = (void *)(UINT32)ar[0]; - argn = 1; - } - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - while (i < avn) - { - if (i < 2 && !seen_int && - (arg_types[i]->type == FFI_TYPE_FLOAT || - arg_types[i]->type == FFI_TYPE_DOUBLE || - arg_types[i]->type == FFI_TYPE_LONGDOUBLE)) - { -#if defined(__MIPSEB__) || defined(_MIPSEB) - if (arg_types[i]->type == FFI_TYPE_FLOAT) - avaluep[i] = ((char *) &fpr[i]) + sizeof (float); - else -#endif - avaluep[i] = (char *) &fpr[i]; - } - else - { - if (arg_types[i]->alignment == 8 && (argn & 0x1)) - argn++; - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - avaluep[i] = &avalue[i]; - *(SINT8 *) &avalue[i] = (SINT8) ar[argn]; - break; - - case FFI_TYPE_UINT8: - avaluep[i] = &avalue[i]; - *(UINT8 *) &avalue[i] = (UINT8) ar[argn]; - break; - - case FFI_TYPE_SINT16: - avaluep[i] = &avalue[i]; - *(SINT16 *) &avalue[i] = (SINT16) ar[argn]; - break; - - case FFI_TYPE_UINT16: - avaluep[i] = &avalue[i]; - *(UINT16 *) &avalue[i] = (UINT16) ar[argn]; - break; - - default: - avaluep[i] = (char *) &ar[argn]; - break; - } - seen_int = 1; - } - argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - i++; - } - - /* Invoke the closure. */ - (closure->fun) (cif, rvalue, avaluep, closure->user_data); - - if (cif->abi == FFI_O32_SOFT_FLOAT) - { - switch (cif->rtype->type) - { - case FFI_TYPE_FLOAT: - return FFI_TYPE_INT; - case FFI_TYPE_DOUBLE: - return FFI_TYPE_UINT64; - default: - return cif->rtype->type; - } - } - else - { - return cif->rtype->type; - } -} - -#if defined(FFI_MIPS_N32) - -static void -copy_struct_N32(char *target, unsigned offset, ffi_abi abi, ffi_type *type, - int argn, unsigned arg_offset, ffi_arg *ar, - ffi_arg *fpr, int soft_float) -{ - ffi_type **elt_typep = type->elements; - while(*elt_typep) - { - ffi_type *elt_type = *elt_typep; - unsigned o; - char *tp; - char *argp; - char *fpp; - - o = ALIGN(offset, elt_type->alignment); - arg_offset += o - offset; - offset = o; - argn += arg_offset / sizeof(ffi_arg); - arg_offset = arg_offset % sizeof(ffi_arg); - - argp = (char *)(ar + argn); - fpp = (char *)(argn >= 8 ? ar + argn : fpr + argn); - - tp = target + offset; - - if (elt_type->type == FFI_TYPE_DOUBLE && !soft_float) - *(double *)tp = *(double *)fpp; - else - memcpy(tp, argp + arg_offset, elt_type->size); - - offset += elt_type->size; - arg_offset += elt_type->size; - elt_typep++; - argn += arg_offset / sizeof(ffi_arg); - arg_offset = arg_offset % sizeof(ffi_arg); - } -} - -/* - * Decodes the arguments to a function, which will be stored on the - * stack. AR is the pointer to the beginning of the integer - * arguments. FPR is a pointer to the area where floating point - * registers have been saved. - * - * RVALUE is the location where the function return value will be - * stored. CLOSURE is the prepared closure to invoke. - * - * This function should only be called from assembly, which is in - * turn called from a trampoline. - * - * Returns the function return flags. - * - */ -int -ffi_closure_mips_inner_N32 (ffi_closure *closure, - void *rvalue, ffi_arg *ar, - ffi_arg *fpr) -{ - ffi_cif *cif; - void **avaluep; - ffi_arg *avalue; - ffi_type **arg_types; - int i, avn, argn; - int soft_float; - ffi_arg *argp; - - cif = closure->cif; - soft_float = cif->abi == FFI_N64_SOFT_FLOAT - || cif->abi == FFI_N32_SOFT_FLOAT; - avalue = alloca (cif->nargs * sizeof (ffi_arg)); - avaluep = alloca (cif->nargs * sizeof (ffi_arg)); - - argn = 0; - - if (cif->rstruct_flag) - { -#if _MIPS_SIM==_ABIN32 - rvalue = (void *)(UINT32)ar[0]; -#else /* N64 */ - rvalue = (void *)ar[0]; -#endif - argn = 1; - } - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - while (i < avn) - { - if (arg_types[i]->type == FFI_TYPE_FLOAT - || arg_types[i]->type == FFI_TYPE_DOUBLE - || arg_types[i]->type == FFI_TYPE_LONGDOUBLE) - { - argp = (argn >= 8 || soft_float) ? ar + argn : fpr + argn; - if ((arg_types[i]->type == FFI_TYPE_LONGDOUBLE) && ((unsigned)argp & (arg_types[i]->alignment-1))) - { - argp=(ffi_arg*)ALIGN(argp,arg_types[i]->alignment); - argn++; - } -#if defined(__MIPSEB__) || defined(_MIPSEB) - if (arg_types[i]->type == FFI_TYPE_FLOAT && argn < 8) - avaluep[i] = ((char *) argp) + sizeof (float); - else -#endif - avaluep[i] = (char *) argp; - } - else - { - unsigned type = arg_types[i]->type; - - if (arg_types[i]->alignment > sizeof(ffi_arg)) - argn = ALIGN(argn, arg_types[i]->alignment / sizeof(ffi_arg)); - - argp = ar + argn; - - /* The size of a pointer depends on the ABI */ - if (type == FFI_TYPE_POINTER) - type = (cif->abi == FFI_N64 || cif->abi == FFI_N64_SOFT_FLOAT) - ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; - - if (soft_float && type == FFI_TYPE_FLOAT) - type = FFI_TYPE_UINT32; - - switch (type) - { - case FFI_TYPE_SINT8: - avaluep[i] = &avalue[i]; - *(SINT8 *) &avalue[i] = (SINT8) *argp; - break; - - case FFI_TYPE_UINT8: - avaluep[i] = &avalue[i]; - *(UINT8 *) &avalue[i] = (UINT8) *argp; - break; - - case FFI_TYPE_SINT16: - avaluep[i] = &avalue[i]; - *(SINT16 *) &avalue[i] = (SINT16) *argp; - break; - - case FFI_TYPE_UINT16: - avaluep[i] = &avalue[i]; - *(UINT16 *) &avalue[i] = (UINT16) *argp; - break; - - case FFI_TYPE_SINT32: - avaluep[i] = &avalue[i]; - *(SINT32 *) &avalue[i] = (SINT32) *argp; - break; - - case FFI_TYPE_UINT32: - avaluep[i] = &avalue[i]; - *(UINT32 *) &avalue[i] = (UINT32) *argp; - break; - - case FFI_TYPE_STRUCT: - if (argn < 8) - { - /* Allocate space for the struct as at least part of - it was passed in registers. */ - avaluep[i] = alloca(arg_types[i]->size); - copy_struct_N32(avaluep[i], 0, cif->abi, arg_types[i], - argn, 0, ar, fpr, soft_float); - - break; - } - /* Else fall through. */ - default: - avaluep[i] = (char *) argp; - break; - } - } - argn += ALIGN(arg_types[i]->size, sizeof(ffi_arg)) / sizeof(ffi_arg); - i++; - } - - /* Invoke the closure. */ - (closure->fun) (cif, rvalue, avaluep, closure->user_data); - - return cif->flags >> (FFI_FLAG_BITS * 8); -} - -#endif /* FFI_MIPS_N32 */ - -#endif /* FFI_CLOSURES */ diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/mips/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/mips/ffitarget.h deleted file mode 100644 index 717d65951..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/mips/ffitarget.h +++ /dev/null @@ -1,247 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for MIPS. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifdef linux -# include -#elif defined(__rtems__) -/* - * Subprogram calling convention - copied from sgidefs.h - */ -#define _MIPS_SIM_ABI32 1 -#define _MIPS_SIM_NABI32 2 -#define _MIPS_SIM_ABI64 3 -#elif !defined(__OpenBSD__) -# include -#endif - -# ifndef _ABIN32 -# define _ABIN32 _MIPS_SIM_NABI32 -# endif -# ifndef _ABI64 -# define _ABI64 _MIPS_SIM_ABI64 -# endif -# ifndef _ABIO32 -# define _ABIO32 _MIPS_SIM_ABI32 -# endif - -#if !defined(_MIPS_SIM) -# error -- something is very wrong -- -#else -# if (_MIPS_SIM==_ABIN32 && defined(_ABIN32)) || (_MIPS_SIM==_ABI64 && defined(_ABI64)) -# define FFI_MIPS_N32 -# else -# if (_MIPS_SIM==_ABIO32 && defined(_ABIO32)) -# define FFI_MIPS_O32 -# else -# error -- this is an unsupported platform -- -# endif -# endif -#endif - -#ifdef FFI_MIPS_O32 -/* O32 stack frames have 32bit integer args */ -# define FFI_SIZEOF_ARG 4 -#else -/* N32 and N64 frames have 64bit integer args */ -# define FFI_SIZEOF_ARG 8 -# if _MIPS_SIM == _ABIN32 -# define FFI_SIZEOF_JAVA_RAW 4 -# endif -#endif - -#define FFI_FLAG_BITS 2 - -/* SGI's strange assembler requires that we multiply by 4 rather - than shift left by FFI_FLAG_BITS */ - -#define FFI_ARGS_D FFI_TYPE_DOUBLE -#define FFI_ARGS_F FFI_TYPE_FLOAT -#define FFI_ARGS_DD FFI_TYPE_DOUBLE * 4 + FFI_TYPE_DOUBLE -#define FFI_ARGS_FF FFI_TYPE_FLOAT * 4 + FFI_TYPE_FLOAT -#define FFI_ARGS_FD FFI_TYPE_DOUBLE * 4 + FFI_TYPE_FLOAT -#define FFI_ARGS_DF FFI_TYPE_FLOAT * 4 + FFI_TYPE_DOUBLE - -/* Needed for N32 structure returns */ -#define FFI_TYPE_SMALLSTRUCT FFI_TYPE_UINT8 -#define FFI_TYPE_SMALLSTRUCT2 FFI_TYPE_SINT8 - -#if 0 -/* The SGI assembler can't handle this.. */ -#define FFI_TYPE_STRUCT_DD (( FFI_ARGS_DD ) << 4) + FFI_TYPE_STRUCT -/* (and so on) */ -#else -/* ...so we calculate these by hand! */ -#define FFI_TYPE_STRUCT_D 61 -#define FFI_TYPE_STRUCT_F 45 -#define FFI_TYPE_STRUCT_DD 253 -#define FFI_TYPE_STRUCT_FF 173 -#define FFI_TYPE_STRUCT_FD 237 -#define FFI_TYPE_STRUCT_DF 189 -#define FFI_TYPE_STRUCT_SMALL 93 -#define FFI_TYPE_STRUCT_SMALL2 109 - -/* and for n32 soft float, add 16 * 2^4 */ -#define FFI_TYPE_STRUCT_D_SOFT 317 -#define FFI_TYPE_STRUCT_F_SOFT 301 -#define FFI_TYPE_STRUCT_DD_SOFT 509 -#define FFI_TYPE_STRUCT_FF_SOFT 429 -#define FFI_TYPE_STRUCT_FD_SOFT 493 -#define FFI_TYPE_STRUCT_DF_SOFT 445 -#define FFI_TYPE_STRUCT_SOFT 16 -#endif - -#ifdef LIBFFI_ASM -#define v0 $2 -#define v1 $3 -#define a0 $4 -#define a1 $5 -#define a2 $6 -#define a3 $7 -#define a4 $8 -#define a5 $9 -#define a6 $10 -#define a7 $11 -#define t0 $8 -#define t1 $9 -#define t2 $10 -#define t3 $11 -#define t4 $12 -#define t5 $13 -#define t6 $14 -#define t7 $15 -#define t8 $24 -#define t9 $25 -#define ra $31 - -#ifdef FFI_MIPS_O32 -# define REG_L lw -# define REG_S sw -# define SUBU subu -# define ADDU addu -# define SRL srl -# define LI li -#else /* !FFI_MIPS_O32 */ -# define REG_L ld -# define REG_S sd -# define SUBU dsubu -# define ADDU daddu -# define SRL dsrl -# define LI dli -# if (_MIPS_SIM==_ABI64) -# define LA dla -# define EH_FRAME_ALIGN 3 -# define FDE_ADDR_BYTES .8byte -# else -# define LA la -# define EH_FRAME_ALIGN 2 -# define FDE_ADDR_BYTES .4byte -# endif /* _MIPS_SIM==_ABI64 */ -#endif /* !FFI_MIPS_O32 */ -#else /* !LIBFFI_ASM */ -# ifdef __GNUC__ -# ifdef FFI_MIPS_O32 -/* O32 stack frames have 32bit integer args */ -typedef unsigned int ffi_arg __attribute__((__mode__(__SI__))); -typedef signed int ffi_sarg __attribute__((__mode__(__SI__))); -#else -/* N32 and N64 frames have 64bit integer args */ -typedef unsigned int ffi_arg __attribute__((__mode__(__DI__))); -typedef signed int ffi_sarg __attribute__((__mode__(__DI__))); -# endif -# else -# ifdef FFI_MIPS_O32 -/* O32 stack frames have 32bit integer args */ -typedef __uint32_t ffi_arg; -typedef __int32_t ffi_sarg; -# else -/* N32 and N64 frames have 64bit integer args */ -typedef __uint64_t ffi_arg; -typedef __int64_t ffi_sarg; -# endif -# endif /* __GNUC__ */ - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_O32, - FFI_N32, - FFI_N64, - FFI_O32_SOFT_FLOAT, - FFI_N32_SOFT_FLOAT, - FFI_N64_SOFT_FLOAT, - FFI_LAST_ABI, - -#ifdef FFI_MIPS_O32 -#ifdef __mips_soft_float - FFI_DEFAULT_ABI = FFI_O32_SOFT_FLOAT -#else - FFI_DEFAULT_ABI = FFI_O32 -#endif -#else -# if _MIPS_SIM==_ABI64 -# ifdef __mips_soft_float - FFI_DEFAULT_ABI = FFI_N64_SOFT_FLOAT -# else - FFI_DEFAULT_ABI = FFI_N64 -# endif -# else -# ifdef __mips_soft_float - FFI_DEFAULT_ABI = FFI_N32_SOFT_FLOAT -# else - FFI_DEFAULT_ABI = FFI_N32 -# endif -# endif -#endif -} ffi_abi; - -#define FFI_EXTRA_CIF_FIELDS unsigned rstruct_flag -#endif /* !LIBFFI_ASM */ - -/* ---- Definitions for closures ----------------------------------------- */ - -#if defined(FFI_MIPS_O32) -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 20 -#else -/* N32/N64. */ -# define FFI_CLOSURES 1 -#if _MIPS_SIM==_ABI64 -#define FFI_TRAMPOLINE_SIZE 52 -#else -#define FFI_TRAMPOLINE_SIZE 20 -#endif -#endif /* FFI_MIPS_O32 */ -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/mips/n32.S b/ruby/ext/fiddle/libffi-3.2.1/src/mips/n32.S deleted file mode 100644 index c6985d30a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/mips/n32.S +++ /dev/null @@ -1,576 +0,0 @@ -/* ----------------------------------------------------------------------- - n32.S - Copyright (c) 1996, 1998, 2005, 2007, 2009, 2010 Red Hat, Inc. - - MIPS Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -/* Only build this code if we are compiling for n32 */ - -#if defined(FFI_MIPS_N32) - -#define callback a0 -#define bytes a2 -#define flags a3 -#define raddr a4 -#define fn a5 - -#define SIZEOF_FRAME ( 8 * FFI_SIZEOF_ARG ) - -#ifdef __GNUC__ - .abicalls -#endif - .set mips4 - .text - .align 2 - .globl ffi_call_N32 - .ent ffi_call_N32 -ffi_call_N32: -.LFB3: - .frame $fp, SIZEOF_FRAME, ra - .mask 0xc0000000,-FFI_SIZEOF_ARG - .fmask 0x00000000,0 - - # Prologue - SUBU $sp, SIZEOF_FRAME # Frame size -.LCFI0: - REG_S $fp, SIZEOF_FRAME - 2*FFI_SIZEOF_ARG($sp) # Save frame pointer - REG_S ra, SIZEOF_FRAME - 1*FFI_SIZEOF_ARG($sp) # Save return address -.LCFI1: - move $fp, $sp -.LCFI3: - move t9, callback # callback function pointer - REG_S bytes, 2*FFI_SIZEOF_ARG($fp) # bytes - REG_S flags, 3*FFI_SIZEOF_ARG($fp) # flags - REG_S raddr, 4*FFI_SIZEOF_ARG($fp) # raddr - REG_S fn, 5*FFI_SIZEOF_ARG($fp) # fn - - # Allocate at least 4 words in the argstack - move v0, bytes - bge bytes, 4 * FFI_SIZEOF_ARG, bigger - LI v0, 4 * FFI_SIZEOF_ARG - b sixteen - - bigger: - ADDU t4, v0, 2 * FFI_SIZEOF_ARG -1 # make sure it is aligned - and v0, t4, -2 * FFI_SIZEOF_ARG # to a proper boundry. - -sixteen: - SUBU $sp, $sp, v0 # move the stack pointer to reflect the - # arg space - - move a0, $sp # 4 * FFI_SIZEOF_ARG - ADDU a3, $fp, 3 * FFI_SIZEOF_ARG - - # Call ffi_prep_args - jal t9 - - # Copy the stack pointer to t9 - move t9, $sp - - # Fix the stack if there are more than 8 64bit slots worth - # of arguments. - - # Load the number of bytes - REG_L t6, 2*FFI_SIZEOF_ARG($fp) - - # Is it bigger than 8 * FFI_SIZEOF_ARG? - daddiu t8, t6, -(8 * FFI_SIZEOF_ARG) - bltz t8, loadregs - - ADDU t9, t9, t8 - -loadregs: - - REG_L t6, 3*FFI_SIZEOF_ARG($fp) # load the flags word into t6. - - and t4, t6, ((1< -#include - -/* Only build this code if we are compiling for o32 */ - -#if defined(FFI_MIPS_O32) - -#define callback a0 -#define bytes a2 -#define flags a3 - -#define SIZEOF_FRAME (4 * FFI_SIZEOF_ARG + 2 * FFI_SIZEOF_ARG) -#define A3_OFF (SIZEOF_FRAME + 3 * FFI_SIZEOF_ARG) -#define FP_OFF (SIZEOF_FRAME - 2 * FFI_SIZEOF_ARG) -#define RA_OFF (SIZEOF_FRAME - 1 * FFI_SIZEOF_ARG) - - .abicalls - .text - .align 2 - .globl ffi_call_O32 - .ent ffi_call_O32 -ffi_call_O32: -$LFB0: - # Prologue - SUBU $sp, SIZEOF_FRAME # Frame size -$LCFI0: - REG_S $fp, FP_OFF($sp) # Save frame pointer -$LCFI1: - REG_S ra, RA_OFF($sp) # Save return address -$LCFI2: - move $fp, $sp - -$LCFI3: - move t9, callback # callback function pointer - REG_S flags, A3_OFF($fp) # flags - - # Allocate at least 4 words in the argstack - LI v0, 4 * FFI_SIZEOF_ARG - blt bytes, v0, sixteen - - ADDU v0, bytes, 7 # make sure it is aligned - and v0, -8 # to an 8 byte boundry - -sixteen: - SUBU $sp, v0 # move the stack pointer to reflect the - # arg space - - ADDU a0, $sp, 4 * FFI_SIZEOF_ARG - - jalr t9 - - REG_L t0, A3_OFF($fp) # load the flags word - SRL t2, t0, 4 # shift our arg info - and t0, ((1<<4)-1) # mask out the return type - - ADDU $sp, 4 * FFI_SIZEOF_ARG # adjust $sp to new args - - bnez t0, pass_d # make it quick for int - REG_L a0, 0*FFI_SIZEOF_ARG($sp) # just go ahead and load the - REG_L a1, 1*FFI_SIZEOF_ARG($sp) # four regs. - REG_L a2, 2*FFI_SIZEOF_ARG($sp) - REG_L a3, 3*FFI_SIZEOF_ARG($sp) - b call_it - -pass_d: - bne t0, FFI_ARGS_D, pass_f - l.d $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args - REG_L a2, 2*FFI_SIZEOF_ARG($sp) # passing a double - REG_L a3, 3*FFI_SIZEOF_ARG($sp) - b call_it - -pass_f: - bne t0, FFI_ARGS_F, pass_d_d - l.s $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args - REG_L a1, 1*FFI_SIZEOF_ARG($sp) # passing a float - REG_L a2, 2*FFI_SIZEOF_ARG($sp) - REG_L a3, 3*FFI_SIZEOF_ARG($sp) - b call_it - -pass_d_d: - bne t0, FFI_ARGS_DD, pass_f_f - l.d $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args - l.d $f14, 2*FFI_SIZEOF_ARG($sp) # passing two doubles - b call_it - -pass_f_f: - bne t0, FFI_ARGS_FF, pass_d_f - l.s $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args - l.s $f14, 1*FFI_SIZEOF_ARG($sp) # passing two floats - REG_L a2, 2*FFI_SIZEOF_ARG($sp) - REG_L a3, 3*FFI_SIZEOF_ARG($sp) - b call_it - -pass_d_f: - bne t0, FFI_ARGS_DF, pass_f_d - l.d $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args - l.s $f14, 2*FFI_SIZEOF_ARG($sp) # passing double and float - REG_L a3, 3*FFI_SIZEOF_ARG($sp) - b call_it - -pass_f_d: - # assume that the only other combination must be float then double - # bne t0, FFI_ARGS_F_D, call_it - l.s $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args - l.d $f14, 2*FFI_SIZEOF_ARG($sp) # passing double and float - -call_it: - # Load the function pointer - REG_L t9, SIZEOF_FRAME + 5*FFI_SIZEOF_ARG($fp) - - # If the return value pointer is NULL, assume no return value. - REG_L t1, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp) - beqz t1, noretval - - bne t2, FFI_TYPE_INT, retlonglong - jalr t9 - REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp) - REG_S v0, 0(t0) - b epilogue - -retlonglong: - # Really any 64-bit int, signed or not. - bne t2, FFI_TYPE_UINT64, retfloat - jalr t9 - REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp) - REG_S v1, 4(t0) - REG_S v0, 0(t0) - b epilogue - -retfloat: - bne t2, FFI_TYPE_FLOAT, retdouble - jalr t9 - REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp) - s.s $f0, 0(t0) - b epilogue - -retdouble: - bne t2, FFI_TYPE_DOUBLE, noretval - jalr t9 - REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp) - s.d $f0, 0(t0) - b epilogue - -noretval: - jalr t9 - - # Epilogue -epilogue: - move $sp, $fp - REG_L $fp, FP_OFF($sp) # Restore frame pointer - REG_L ra, RA_OFF($sp) # Restore return address - ADDU $sp, SIZEOF_FRAME # Fix stack pointer - j ra - -$LFE0: - .end ffi_call_O32 - - -/* ffi_closure_O32. Expects address of the passed-in ffi_closure - in t4 ($12). Stores any arguments passed in registers onto the - stack, then calls ffi_closure_mips_inner_O32, which - then decodes them. - - Stack layout: - - 3 - a3 save - 2 - a2 save - 1 - a1 save - 0 - a0 save, original sp - -1 - ra save - -2 - fp save - -3 - $16 (s0) save - -4 - cprestore - -5 - return value high (v1) - -6 - return value low (v0) - -7 - f14 (le high, be low) - -8 - f14 (le low, be high) - -9 - f12 (le high, be low) - -10 - f12 (le low, be high) - -11 - Called function a3 save - -12 - Called function a2 save - -13 - Called function a1 save - -14 - Called function a0 save, our sp and fp point here - */ - -#define SIZEOF_FRAME2 (14 * FFI_SIZEOF_ARG) -#define A3_OFF2 (SIZEOF_FRAME2 + 3 * FFI_SIZEOF_ARG) -#define A2_OFF2 (SIZEOF_FRAME2 + 2 * FFI_SIZEOF_ARG) -#define A1_OFF2 (SIZEOF_FRAME2 + 1 * FFI_SIZEOF_ARG) -#define A0_OFF2 (SIZEOF_FRAME2 + 0 * FFI_SIZEOF_ARG) -#define RA_OFF2 (SIZEOF_FRAME2 - 1 * FFI_SIZEOF_ARG) -#define FP_OFF2 (SIZEOF_FRAME2 - 2 * FFI_SIZEOF_ARG) -#define S0_OFF2 (SIZEOF_FRAME2 - 3 * FFI_SIZEOF_ARG) -#define GP_OFF2 (SIZEOF_FRAME2 - 4 * FFI_SIZEOF_ARG) -#define V1_OFF2 (SIZEOF_FRAME2 - 5 * FFI_SIZEOF_ARG) -#define V0_OFF2 (SIZEOF_FRAME2 - 6 * FFI_SIZEOF_ARG) -#define FA_1_1_OFF2 (SIZEOF_FRAME2 - 7 * FFI_SIZEOF_ARG) -#define FA_1_0_OFF2 (SIZEOF_FRAME2 - 8 * FFI_SIZEOF_ARG) -#define FA_0_1_OFF2 (SIZEOF_FRAME2 - 9 * FFI_SIZEOF_ARG) -#define FA_0_0_OFF2 (SIZEOF_FRAME2 - 10 * FFI_SIZEOF_ARG) - - .text - .align 2 - .globl ffi_closure_O32 - .ent ffi_closure_O32 -ffi_closure_O32: -$LFB1: - # Prologue - .frame $fp, SIZEOF_FRAME2, ra - .set noreorder - .cpload t9 - .set reorder - SUBU $sp, SIZEOF_FRAME2 - .cprestore GP_OFF2 -$LCFI4: - REG_S $16, S0_OFF2($sp) # Save s0 - REG_S $fp, FP_OFF2($sp) # Save frame pointer - REG_S ra, RA_OFF2($sp) # Save return address -$LCFI6: - move $fp, $sp - -$LCFI7: - # Store all possible argument registers. If there are more than - # four arguments, then they are stored above where we put a3. - REG_S a0, A0_OFF2($fp) - REG_S a1, A1_OFF2($fp) - REG_S a2, A2_OFF2($fp) - REG_S a3, A3_OFF2($fp) - - # Load ABI enum to s0 - REG_L $16, 20($12) # cif pointer follows tramp. - REG_L $16, 0($16) # abi is first member. - - li $13, 1 # FFI_O32 - bne $16, $13, 1f # Skip fp save if FFI_O32_SOFT_FLOAT - - # Store all possible float/double registers. - s.d $f12, FA_0_0_OFF2($fp) - s.d $f14, FA_1_0_OFF2($fp) -1: - # Call ffi_closure_mips_inner_O32 to do the work. - la t9, ffi_closure_mips_inner_O32 - move a0, $12 # Pointer to the ffi_closure - addu a1, $fp, V0_OFF2 - addu a2, $fp, A0_OFF2 - addu a3, $fp, FA_0_0_OFF2 - jalr t9 - - # Load the return value into the appropriate register. - move $8, $2 - li $9, FFI_TYPE_VOID - beq $8, $9, closure_done - - li $13, 1 # FFI_O32 - bne $16, $13, 1f # Skip fp restore if FFI_O32_SOFT_FLOAT - - li $9, FFI_TYPE_FLOAT - l.s $f0, V0_OFF2($fp) - beq $8, $9, closure_done - - li $9, FFI_TYPE_DOUBLE - l.d $f0, V0_OFF2($fp) - beq $8, $9, closure_done -1: - REG_L $3, V1_OFF2($fp) - REG_L $2, V0_OFF2($fp) - -closure_done: - # Epilogue - move $sp, $fp - REG_L $16, S0_OFF2($sp) # Restore s0 - REG_L $fp, FP_OFF2($sp) # Restore frame pointer - REG_L ra, RA_OFF2($sp) # Restore return address - ADDU $sp, SIZEOF_FRAME2 - j ra -$LFE1: - .end ffi_closure_O32 - -/* DWARF-2 unwind info. */ - - .section .eh_frame,"a",@progbits -$Lframe0: - .4byte $LECIE0-$LSCIE0 # Length of Common Information Entry -$LSCIE0: - .4byte 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version - .ascii "zR\0" # CIE Augmentation - .uleb128 0x1 # CIE Code Alignment Factor - .sleb128 4 # CIE Data Alignment Factor - .byte 0x1f # CIE RA Column - .uleb128 0x1 # Augmentation size - .byte 0x00 # FDE Encoding (absptr) - .byte 0xc # DW_CFA_def_cfa - .uleb128 0x1d - .uleb128 0x0 - .align 2 -$LECIE0: -$LSFDE0: - .4byte $LEFDE0-$LASFDE0 # FDE Length -$LASFDE0: - .4byte $LASFDE0-$Lframe0 # FDE CIE offset - .4byte $LFB0 # FDE initial location - .4byte $LFE0-$LFB0 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x4 # DW_CFA_advance_loc4 - .4byte $LCFI0-$LFB0 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 0x18 - .byte 0x4 # DW_CFA_advance_loc4 - .4byte $LCFI2-$LCFI0 - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x1e # $fp - .sleb128 -2 # SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp) - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x1f # $ra - .sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp) - .byte 0x4 # DW_CFA_advance_loc4 - .4byte $LCFI3-$LCFI2 - .byte 0xc # DW_CFA_def_cfa - .uleb128 0x1e - .uleb128 0x18 - .align 2 -$LEFDE0: -$LSFDE1: - .4byte $LEFDE1-$LASFDE1 # FDE Length -$LASFDE1: - .4byte $LASFDE1-$Lframe0 # FDE CIE offset - .4byte $LFB1 # FDE initial location - .4byte $LFE1-$LFB1 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x4 # DW_CFA_advance_loc4 - .4byte $LCFI4-$LFB1 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 0x38 - .byte 0x4 # DW_CFA_advance_loc4 - .4byte $LCFI6-$LCFI4 - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x10 # $16 - .sleb128 -3 # SIZEOF_FRAME2 - 3*FFI_SIZEOF_ARG($sp) - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x1e # $fp - .sleb128 -2 # SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp) - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x1f # $ra - .sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp) - .byte 0x4 # DW_CFA_advance_loc4 - .4byte $LCFI7-$LCFI6 - .byte 0xc # DW_CFA_def_cfa - .uleb128 0x1e - .uleb128 0x38 - .align 2 -$LEFDE1: - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/moxie/eabi.S b/ruby/ext/fiddle/libffi-3.2.1/src/moxie/eabi.S deleted file mode 100644 index ac7aceb1a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/moxie/eabi.S +++ /dev/null @@ -1,101 +0,0 @@ -/* ----------------------------------------------------------------------- - eabi.S - Copyright (c) 2012, 2013 Anthony Green - - Moxie Assembly glue. - - 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 AUTHOR 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - .globl ffi_prep_args_EABI - - .text - .p2align 4 - .globl ffi_call_EABI - .type ffi_call_EABI, @function - - # $r0 : ffi_prep_args - # $r1 : &ecif - # $r2 : cif->bytes - # $r3 : fig->flags - # $r4 : ecif.rvalue - # $r5 : fn - -ffi_call_EABI: - push $sp, $r6 - push $sp, $r7 - push $sp, $r8 - dec $sp, 24 - - /* Store incoming args on stack. */ - sto.l 0($sp), $r0 /* ffi_prep_args */ - sto.l 4($sp), $r1 /* ecif */ - sto.l 8($sp), $r2 /* bytes */ - sto.l 12($sp), $r3 /* flags */ - sto.l 16($sp), $r4 /* &rvalue */ - sto.l 20($sp), $r5 /* fn */ - - /* Call ffi_prep_args. */ - mov $r6, $r4 /* Save result buffer */ - mov $r7, $r5 /* Save the target fn */ - mov $r8, $r3 /* Save the flags */ - sub.l $sp, $r2 /* Allocate stack space */ - mov $r0, $sp /* We can stomp over $r0 */ - /* $r1 is already set up */ - jsra ffi_prep_args - - /* Load register arguments. */ - ldo.l $r0, 0($sp) - ldo.l $r1, 4($sp) - ldo.l $r2, 8($sp) - ldo.l $r3, 12($sp) - ldo.l $r4, 16($sp) - ldo.l $r5, 20($sp) - - /* Call the target function. */ - jsr $r7 - - ldi.l $r7, 0xffffffff - cmp $r8, $r7 - beq retstruct - - ldi.l $r7, 4 - cmp $r8, $r7 - bgt ret2reg - - st.l ($r6), $r0 - jmpa retdone - -ret2reg: - st.l ($r6), $r0 - sto.l 4($r6), $r1 - -retstruct: -retdone: - /* Return. */ - ldo.l $r6, -4($fp) - ldo.l $r7, -8($fp) - ldo.l $r8, -12($fp) - ret - .size ffi_call_EABI, .-ffi_call_EABI - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/moxie/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/moxie/ffi.c deleted file mode 100644 index 540a04299..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/moxie/ffi.c +++ /dev/null @@ -1,272 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (C) 2012, 2013 Anthony Green - - Moxie Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -void *ffi_prep_args(char *stack, extended_cif *ecif) -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - register int count = 0; - - p_argv = ecif->avalue; - argp = stack; - - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT) - { - *(void **) argp = ecif->rvalue; - argp += 4; - } - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); - i--, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - - if ((*p_arg)->type == FFI_TYPE_STRUCT) - { - z = sizeof(void*); - *(void **) argp = *p_argv; - } - else if (z < sizeof(int)) - { - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - } - else if (z == sizeof(int)) - { - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - } - else - { - memcpy(argp, *p_argv, z); - } - p_argv++; - argp += z; - count += z; - } - - return (stack + ((count > 24) ? 24 : ALIGN_DOWN(count, 8))); -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - if (cif->rtype->type == FFI_TYPE_STRUCT) - cif->flags = -1; - else - cif->flags = cif->rtype->size; - - cif->bytes = ALIGN (cif->bytes, 8); - - return FFI_OK; -} - -extern void ffi_call_EABI(void *(*)(char *, extended_cif *), - extended_cif *, - unsigned, unsigned, - unsigned *, - void (*fn)(void)); - -void ffi_call(ffi_cif *cif, - void (*fn)(void), - void *rvalue, - void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_EABI: - ffi_call_EABI(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; - default: - FFI_ASSERT(0); - break; - } -} - -void ffi_closure_eabi (unsigned arg1, unsigned arg2, unsigned arg3, - unsigned arg4, unsigned arg5, unsigned arg6) -{ - /* This function is called by a trampoline. The trampoline stows a - pointer to the ffi_closure object in $r7. We must save this - pointer in a place that will persist while we do our work. */ - register ffi_closure *creg __asm__ ("$r12"); - ffi_closure *closure = creg; - - /* Arguments that don't fit in registers are found on the stack - at a fixed offset above the current frame pointer. */ - register char *frame_pointer __asm__ ("$fp"); - - /* Pointer to a struct return value. */ - void *struct_rvalue = (void *) arg1; - - /* 6 words reserved for register args + 3 words from jsr */ - char *stack_args = frame_pointer + 9*4; - - /* Lay the register arguments down in a continuous chunk of memory. */ - unsigned register_args[6] = - { arg1, arg2, arg3, arg4, arg5, arg6 }; - char *register_args_ptr = (char *) register_args; - - ffi_cif *cif = closure->cif; - ffi_type **arg_types = cif->arg_types; - void **avalue = alloca (cif->nargs * sizeof(void *)); - char *ptr = (char *) register_args; - int i; - - /* preserve struct type return pointer passing */ - if ((cif->rtype != NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) { - ptr += 4; - register_args_ptr = (char *)®ister_args[1]; - } - - /* Find the address of each argument. */ - for (i = 0; i < cif->nargs; i++) - { - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - avalue[i] = ptr + 3; - break; - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - avalue[i] = ptr + 2; - break; - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_FLOAT: - case FFI_TYPE_POINTER: - avalue[i] = ptr; - break; - case FFI_TYPE_STRUCT: - avalue[i] = *(void**)ptr; - break; - default: - /* This is an 8-byte value. */ - avalue[i] = ptr; - ptr += 4; - break; - } - ptr += 4; - - /* If we've handled more arguments than fit in registers, - start looking at the those passed on the stack. */ - if (ptr == ®ister_args[6]) - ptr = stack_args; - } - - /* Invoke the closure. */ - if (cif->rtype && (cif->rtype->type == FFI_TYPE_STRUCT)) - { - (closure->fun) (cif, struct_rvalue, avalue, closure->user_data); - } - else - { - /* Allocate space for the return value and call the function. */ - long long rvalue; - (closure->fun) (cif, &rvalue, avalue, closure->user_data); - asm ("mov $r12, %0\n ld.l $r0, ($r12)\n ldo.l $r1, 4($r12)" : : "r" (&rvalue)); - } -} - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned short *tramp = (unsigned short *) &closure->tramp[0]; - unsigned long fn = (long) ffi_closure_eabi; - unsigned long cls = (long) codeloc; - - if (cif->abi != FFI_EABI) - return FFI_BAD_ABI; - - fn = (unsigned long) ffi_closure_eabi; - - tramp[0] = 0x01e0; /* ldi.l $r7, .... */ - tramp[1] = cls >> 16; - tramp[2] = cls & 0xffff; - tramp[3] = 0x1a00; /* jmpa .... */ - tramp[4] = fn >> 16; - tramp[5] = fn & 0xffff; - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - return FFI_OK; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/moxie/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/moxie/ffitarget.h deleted file mode 100644 index 623e3ece5..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/moxie/ffitarget.h +++ /dev/null @@ -1,52 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012, 2013 Anthony Green - Target configuration macros for Moxie - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -/* ---- System specific configurations ----------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_EABI, - FFI_DEFAULT_ABI = FFI_EABI, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_NATIVE_RAW_API 0 - -/* Trampolines are 12-bytes long. See ffi_prep_closure_loc. */ -#define FFI_TRAMPOLINE_SIZE (12) - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/nios2/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/nios2/ffi.c deleted file mode 100644 index 2efa033f9..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/nios2/ffi.c +++ /dev/null @@ -1,304 +0,0 @@ -/* libffi support for Altera Nios II. - - Copyright (c) 2013 Mentor Graphics. - - 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. */ - - -#include -#include - -#include - -/* The Nios II Processor Reference Handbook defines the procedure call - ABI as follows. - - Arguments are passed as if a structure containing the types of - the arguments were constructed. The first 16 bytes are passed in r4 - through r7, the remainder on the stack. The first 16 bytes of a function - taking variable arguments are passed in r4-r7 in the same way. - - Return values of types up to 8 bytes are returned in r2 and r3. For - return values greater than 8 bytes, the caller must allocate memory for - the result and pass the address as if it were argument 0. - - While this isn't specified explicitly in the ABI documentation, GCC - promotes integral arguments smaller than int size to 32 bits. - - Also of note, the ABI specifies that all structure objects are - aligned to 32 bits even if all their fields have a smaller natural - alignment. See FFI_AGGREGATE_ALIGNMENT. */ - - -/* Declare the assembly language hooks. */ - -extern UINT64 ffi_call_sysv (void (*) (char *, extended_cif *), - extended_cif *, - unsigned, - void (*fn) (void)); -extern void ffi_closure_sysv (void); - -/* Perform machine-dependent cif processing. */ - -ffi_status ffi_prep_cif_machdep (ffi_cif *cif) -{ - /* We always want at least 16 bytes in the parameter block since it - simplifies the low-level call function. Also round the parameter - block size up to a multiple of 4 bytes to preserve - 32-bit alignment of the stack pointer. */ - if (cif->bytes < 16) - cif->bytes = 16; - else - cif->bytes = (cif->bytes + 3) & ~3; - - return FFI_OK; -} - - -/* ffi_prep_args is called by the assembly routine to transfer arguments - to the stack using the pointers in the ecif array. - Note that the stack buffer is big enough to fit all the arguments, - but the first 16 bytes will be copied to registers for the actual - call. */ - -void ffi_prep_args (char *stack, extended_cif *ecif) -{ - char *argp = stack; - unsigned int i; - - /* The implicit return value pointer is passed as if it were a hidden - first argument. */ - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT - && ecif->cif->rtype->size > 8) - { - (*(void **) argp) = ecif->rvalue; - argp += 4; - } - - for (i = 0; i < ecif->cif->nargs; i++) - { - void *avalue = ecif->avalue[i]; - ffi_type *atype = ecif->cif->arg_types[i]; - size_t size = atype->size; - size_t alignment = atype->alignment; - - /* Align argp as appropriate for the argument type. */ - if ((alignment - 1) & (unsigned) argp) - argp = (char *) ALIGN (argp, alignment); - - /* Copy the argument, promoting integral types smaller than a - word to word size. */ - if (size < sizeof (int)) - { - size = sizeof (int); - switch (atype->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int) *(SINT8 *) avalue; - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int) *(UINT8 *) avalue; - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int) *(SINT16 *) avalue; - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int) *(UINT16 *) avalue; - break; - - case FFI_TYPE_STRUCT: - memcpy (argp, avalue, atype->size); - break; - - default: - FFI_ASSERT(0); - } - } - else if (size == sizeof (int)) - *(unsigned int *) argp = (unsigned int) *(UINT32 *) avalue; - else - memcpy (argp, avalue, size); - argp += size; - } -} - - -/* Call FN using the prepared CIF. RVALUE points to space allocated by - the caller for the return value, and AVALUE is an array of argument - pointers. */ - -void ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) -{ - - extended_cif ecif; - UINT64 result; - - /* If bigret is true, this is the case where a return value of larger - than 8 bytes is handled by being passed by reference as an implicit - argument. */ - int bigret = (cif->rtype->type == FFI_TYPE_STRUCT - && cif->rtype->size > 8); - - ecif.cif = cif; - ecif.avalue = avalue; - - /* Allocate space for return value if this is the pass-by-reference case - and the caller did not provide a buffer. */ - if (rvalue == NULL && bigret) - ecif.rvalue = alloca (cif->rtype->size); - else - ecif.rvalue = rvalue; - - result = ffi_call_sysv (ffi_prep_args, &ecif, cif->bytes, fn); - - /* Now result contains the 64 bit contents returned from fn in - r2 and r3. Copy the value of the appropriate size to the user-provided - rvalue buffer. */ - if (rvalue && !bigret) - switch (cif->rtype->size) - { - case 1: - *(UINT8 *)rvalue = (UINT8) result; - break; - case 2: - *(UINT16 *)rvalue = (UINT16) result; - break; - case 4: - *(UINT32 *)rvalue = (UINT32) result; - break; - case 8: - *(UINT64 *)rvalue = (UINT64) result; - break; - default: - memcpy (rvalue, (void *)&result, cif->rtype->size); - break; - } -} - -/* This function is invoked from the closure trampoline to invoke - CLOSURE with argument block ARGS. Parse ARGS according to - CLOSURE->cfi and invoke CLOSURE->fun. */ - -static UINT64 -ffi_closure_helper (unsigned char *args, - ffi_closure *closure) -{ - ffi_cif *cif = closure->cif; - unsigned char *argp = args; - void **parsed_args = alloca (cif->nargs * sizeof (void *)); - UINT64 result; - void *retptr; - unsigned int i; - - /* First figure out what to do about the return type. If this is the - big-structure-return case, the first arg is the hidden return buffer - allocated by the caller. */ - if (cif->rtype->type == FFI_TYPE_STRUCT - && cif->rtype->size > 8) - { - retptr = *((void **) argp); - argp += 4; - } - else - retptr = (void *) &result; - - /* Fill in the array of argument pointers. */ - for (i = 0; i < cif->nargs; i++) - { - size_t size = cif->arg_types[i]->size; - size_t alignment = cif->arg_types[i]->alignment; - - /* Align argp as appropriate for the argument type. */ - if ((alignment - 1) & (unsigned) argp) - argp = (char *) ALIGN (argp, alignment); - - /* Arguments smaller than an int are promoted to int. */ - if (size < sizeof (int)) - size = sizeof (int); - - /* Store the pointer. */ - parsed_args[i] = argp; - argp += size; - } - - /* Call the user-supplied function. */ - (closure->fun) (cif, retptr, parsed_args, closure->user_data); - return result; -} - - -/* Initialize CLOSURE with a trampoline to call FUN with - CIF and USER_DATA. */ -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun) (ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp = (unsigned int *) &closure->tramp[0]; - int i; - - if (cif->abi != FFI_SYSV) - return FFI_BAD_ABI; - - /* The trampoline looks like: - movhi r8, %hi(ffi_closure_sysv) - ori r8, r8, %lo(ffi_closure_sysv) - movhi r9, %hi(ffi_closure_helper) - ori r0, r9, %lo(ffi_closure_helper) - movhi r10, %hi(closure) - ori r10, r10, %lo(closure) - jmp r8 - and then ffi_closure_sysv retrieves the closure pointer out of r10 - in addition to the arguments passed in the normal way for the call, - and invokes ffi_closure_helper. We encode the pointer to - ffi_closure_helper in the trampoline because making a PIC call - to it in ffi_closure_sysv would be messy (it would have to indirect - through the GOT). */ - -#define HI(x) ((((unsigned int) (x)) >> 16) & 0xffff) -#define LO(x) (((unsigned int) (x)) & 0xffff) - tramp[0] = (0 << 27) | (8 << 22) | (HI (ffi_closure_sysv) << 6) | 0x34; - tramp[1] = (8 << 27) | (8 << 22) | (LO (ffi_closure_sysv) << 6) | 0x14; - tramp[2] = (0 << 27) | (9 << 22) | (HI (ffi_closure_helper) << 6) | 0x34; - tramp[3] = (9 << 27) | (9 << 22) | (LO (ffi_closure_helper) << 6) | 0x14; - tramp[4] = (0 << 27) | (10 << 22) | (HI (closure) << 6) | 0x34; - tramp[5] = (10 << 27) | (10 << 22) | (LO (closure) << 6) | 0x14; - tramp[6] = (8 << 27) | (0x0d << 11) | 0x3a; -#undef HI -#undef LO - - /* Flush the caches. - See Example 9-4 in the Nios II Software Developer's Handbook. */ - for (i = 0; i < 7; i++) - asm volatile ("flushd 0(%0); flushi %0" :: "r"(tramp + i) : "memory"); - asm volatile ("flushp" ::: "memory"); - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - return FFI_OK; -} - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/nios2/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/nios2/ffitarget.h deleted file mode 100644 index 134d118c1..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/nios2/ffitarget.h +++ /dev/null @@ -1,52 +0,0 @@ -/* libffi target includes for Altera Nios II. - - Copyright (c) 2013 Mentor Graphics. - - 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. */ - - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -/* Structures have a 4-byte alignment even if all the fields have lesser - alignment requirements. */ -#define FFI_AGGREGATE_ALIGNMENT 4 - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 28 /* 7 instructions */ -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/nios2/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/nios2/sysv.S deleted file mode 100644 index 75f442bbe..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/nios2/sysv.S +++ /dev/null @@ -1,136 +0,0 @@ -/* Low-level libffi support for Altera Nios II. - - Copyright (c) 2013 Mentor Graphics. - - 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. */ - -/* This function is declared on the C side as - - extern UINT64 ffi_call_sysv (void (*arghook) (char *, extended_cif *), - extended_cif *ecif, - unsigned nbytes, - void (*fn) (void)); - - On input, the arguments appear as - r4 = arghook - r5 = ecif - r6 = nbytes - r7 = fn -*/ - - .section .text - .align 2 - .global ffi_call_sysv - .type ffi_call_sysv, @function - -ffi_call_sysv: - .cfi_startproc - - /* Create the stack frame, saving r16 so we can use it locally. */ - addi sp, sp, -12 - .cfi_def_cfa_offset 12 - stw ra, 8(sp) - stw fp, 4(sp) - stw r16, 0(sp) - .cfi_offset 31, -4 - .cfi_offset 28, -8 - .cfi_offset 16, -12 - mov fp, sp - .cfi_def_cfa_register 28 - mov r16, r7 - - /* Adjust the stack pointer to create the argument buffer - nbytes long. */ - sub sp, sp, r6 - - /* Call the arghook function. */ - mov r2, r4 /* fn */ - mov r4, sp /* argbuffer */ - callr r2 /* r5 already contains ecif */ - - /* Pop off the first 16 bytes of the argument buffer on the stack, - transferring the contents to the argument registers. */ - ldw r4, 0(sp) - ldw r5, 4(sp) - ldw r6, 8(sp) - ldw r7, 12(sp) - addi sp, sp, 16 - - /* Call the user function, which leaves its result in r2 and r3. */ - callr r16 - - /* Pop off the stack frame. */ - mov sp, fp - ldw ra, 8(sp) - ldw fp, 4(sp) - ldw r16, 0(sp) - addi sp, sp, 12 - ret - .cfi_endproc - .size ffi_call_sysv, .-ffi_call_sysv - - -/* Closure trampolines jump here after putting the C helper address - in r9 and the closure pointer in r10. The user-supplied arguments - to the closure are in the normal places, in r4-r7 and on the - stack. Push the register arguments on the stack too and then call the - C helper function to deal with them. */ - - .section .text - .align 2 - .global ffi_closure_sysv - .type ffi_closure_sysv, @function - -ffi_closure_sysv: - .cfi_startproc - - /* Create the stack frame, pushing the register args on the stack - just below the stack args. This is the same trick illustrated - in Figure 7-3 in the Nios II Processor Reference Handbook, used - for variable arguments and structures passed by value. */ - addi sp, sp, -20 - .cfi_def_cfa_offset 20 - stw ra, 0(sp) - .cfi_offset 31, -20 - stw r4, 4(sp) - .cfi_offset 4, -16 - stw r5, 8(sp) - .cfi_offset 5, -12 - stw r6, 12(sp) - .cfi_offset 6, -8 - stw r7, 16(sp) - .cfi_offset 7, -4 - - /* Call the helper. - r4 = pointer to arguments on stack - r5 = closure pointer (loaded in r10 by the trampoline) - r9 = address of helper function (loaded by trampoline) */ - addi r4, sp, 4 - mov r5, r10 - callr r9 - - /* Pop the stack and return. */ - ldw ra, 0(sp) - addi sp, sp, 20 - .cfi_def_cfa_offset -20 - ret - .cfi_endproc - .size ffi_closure_sysv, .-ffi_closure_sysv - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/or1k/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/or1k/ffi.c deleted file mode 100644 index 2bad938a2..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/or1k/ffi.c +++ /dev/null @@ -1,328 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2014 Sebastian Macke - - OpenRISC Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include "ffi_common.h" - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -void* ffi_prep_args(char *stack, extended_cif *ecif) -{ - char *stacktemp = stack; - int i, s; - ffi_type **arg; - int count = 0; - int nfixedargs; - - nfixedargs = ecif->cif->nfixedargs; - arg = ecif->cif->arg_types; - void **argv = ecif->avalue; - - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT) - { - *(void **) stack = ecif->rvalue; - stack += 4; - count = 4; - } - for(i=0; icif->nargs; i++) - { - - /* variadic args are saved on stack */ - if ((nfixedargs == 0) && (count < 24)) - { - count = 24; - stack = stacktemp + 24; - } - nfixedargs--; - - s = 4; - switch((*arg)->type) - { - case FFI_TYPE_STRUCT: - *(void **)stack = *argv; - break; - - case FFI_TYPE_SINT8: - *(signed int *) stack = (signed int)*(SINT8 *)(* argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) stack = (unsigned int)*(UINT8 *)(* argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) stack = (signed int)*(SINT16 *)(* argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) stack = (unsigned int)*(UINT16 *)(* argv); - break; - - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_FLOAT: - case FFI_TYPE_POINTER: - *(int *)stack = *(int*)(*argv); - break; - - default: /* 8 byte types */ - if (count == 20) /* never split arguments */ - { - stack += 4; - count += 4; - } - s = (*arg)->size; - memcpy(stack, *argv, s); - break; - } - - stack += s; - count += s; - argv++; - arg++; - } - return stacktemp + ((count>24)?24:0); -} - -extern void ffi_call_SYSV(unsigned, - extended_cif *, - void *(*)(int *, extended_cif *), - unsigned *, - void (*fn)(void), - unsigned); - - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - int i; - int size; - ffi_type **arg; - - /* Calculate size to allocate on stack */ - - for(i = 0, arg = cif->arg_types, size=0; i < cif->nargs; i++, arg++) - { - if ((*arg)->type == FFI_TYPE_STRUCT) - size += 4; - else - if ((*arg)->size <= 4) - size += 4; - else - size += 8; - } - - /* for variadic functions more space is needed on the stack */ - if (cif->nargs != cif->nfixedargs) - size += 24; - - if (cif->rtype->type == FFI_TYPE_STRUCT) - size += 4; - - - extended_cif ecif; - ecif.cif = cif; - ecif.avalue = avalue; - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV(size, &ecif, ffi_prep_args, rvalue, fn, cif->flags); - break; - default: - FFI_ASSERT(0); - break; - } -} - - -void ffi_closure_SYSV(unsigned long r3, unsigned long r4, unsigned long r5, - unsigned long r6, unsigned long r7, unsigned long r8) -{ - register int *sp __asm__ ("r17"); - register int *r13 __asm__ ("r13"); - - ffi_closure* closure = (ffi_closure*) r13; - char *stack_args = sp; - - /* Lay the register arguments down in a continuous chunk of memory. */ - unsigned register_args[6] = - { r3, r4, r5, r6, r7, r8 }; - - /* Pointer to a struct return value. */ - void *struct_rvalue = (void *) r3; - - ffi_cif *cif = closure->cif; - ffi_type **arg_types = cif->arg_types; - void **avalue = alloca (cif->nargs * sizeof(void *)); - char *ptr = (char *) register_args; - int count = 0; - int nfixedargs = cif->nfixedargs; - int i; - - /* preserve struct type return pointer passing */ - - if ((cif->rtype != NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ptr += 4; - count = 4; - } - - /* Find the address of each argument. */ - for (i = 0; i < cif->nargs; i++) - { - - /* variadic args are saved on stack */ - if ((nfixedargs == 0) && (count < 24)) - { - ptr = stack_args; - count = 24; - } - nfixedargs--; - - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - avalue[i] = ptr + 3; - break; - - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - avalue[i] = ptr + 2; - break; - - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_FLOAT: - case FFI_TYPE_POINTER: - avalue[i] = ptr; - break; - - case FFI_TYPE_STRUCT: - avalue[i] = *(void**)ptr; - break; - - default: - /* 8-byte values */ - - /* arguments are never splitted */ - if (ptr == ®ister_args[5]) - ptr = stack_args; - avalue[i] = ptr; - ptr += 4; - count += 4; - break; - } - ptr += 4; - count += 4; - - /* If we've handled more arguments than fit in registers, - start looking at the those passed on the stack. */ - - if (count == 24) - ptr = stack_args; - } - - if (cif->rtype && (cif->rtype->type == FFI_TYPE_STRUCT)) - { - (closure->fun) (cif, struct_rvalue, avalue, closure->user_data); - } else - { - long long rvalue; - (closure->fun) (cif, &rvalue, avalue, closure->user_data); - if (cif->rtype) - asm ("l.ori r12, %0, 0x0\n l.lwz r11, 0(r12)\n l.lwz r12, 4(r12)" : : "r" (&rvalue)); - } -} - - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - unsigned short *tramp = (unsigned short *) closure->tramp; - unsigned long fn = (unsigned long) ffi_closure_SYSV; - unsigned long cls = (unsigned long) codeloc; - - if (cif->abi != FFI_SYSV) - return FFI_BAD_ABI; - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - /* write pointers to temporary registers */ - tramp[0] = (0x6 << 10) | (13 << 5); /* l.movhi r13, ... */ - tramp[1] = cls >> 16; - tramp[2] = (0x2a << 10) | (13 << 5) | 13; /* l.ori r13, r13, ... */ - tramp[3] = cls & 0xFFFF; - - tramp[4] = (0x6 << 10) | (15 << 5); /* l.movhi r15, ... */ - tramp[5] = fn >> 16; - tramp[6] = (0x2a << 10) | (15 << 5) | 15; /* l.ori r15, r15 ... */ - tramp[7] = fn & 0xFFFF; - - tramp[8] = (0x11 << 10); /* l.jr r15 */ - tramp[9] = 15 << 11; - - tramp[10] = (0x2a << 10) | (17 << 5) | 1; /* l.ori r17, r1, ... */ - tramp[11] = 0x0; - - return FFI_OK; -} - - -ffi_status ffi_prep_cif_machdep (ffi_cif *cif) -{ - cif->flags = 0; - - /* structures are returned as pointers */ - if (cif->rtype->type == FFI_TYPE_STRUCT) - cif->flags = FFI_TYPE_STRUCT; - else - if (cif->rtype->size > 4) - cif->flags = FFI_TYPE_UINT64; - - cif->nfixedargs = cif->nargs; - - return FFI_OK; -} - - -ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, - unsigned int nfixedargs, unsigned int ntotalargs) -{ - ffi_status status; - - status = ffi_prep_cif_machdep (cif); - cif->nfixedargs = nfixedargs; - return status; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/or1k/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/or1k/ffitarget.h deleted file mode 100644 index e55da2861..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/or1k/ffitarget.h +++ /dev/null @@ -1,58 +0,0 @@ -/* ----------------------------------------------------------------------- - ffitarget.h - Copyright (c) 2014 Sebastian Macke - - OpenRISC Target configuration macros - - 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. - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -/* ---- System specific configurations ----------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_NATIVE_RAW_API 0 -#define FFI_TRAMPOLINE_SIZE (24) - -#define FFI_TARGET_SPECIFIC_VARIADIC 1 -#define FFI_EXTRA_CIF_FIELDS unsigned nfixedargs; - -#endif - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/or1k/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/or1k/sysv.S deleted file mode 100644 index df6570ba9..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/or1k/sysv.S +++ /dev/null @@ -1,107 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2014 Sebastian Macke - - OpenRISC Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -.text - .globl ffi_call_SYSV - .type ffi_call_SYSV, @function -/* - r3: size to allocate on stack - r4: extended cif structure - r5: function pointer ffi_prep_args - r6: ret address - r7: function to call - r8: flag for return type -*/ - -ffi_call_SYSV: - /* Store registers used on stack */ - l.sw -4(r1), r9 /* return address */ - l.sw -8(r1), r1 /* stack address */ - l.sw -12(r1), r14 /* callee saved registers */ - l.sw -16(r1), r16 - l.sw -20(r1), r18 - l.sw -24(r1), r20 - - l.ori r14, r1, 0x0 /* save stack pointer */ - l.addi r1, r1, -24 - - l.ori r16, r7, 0x0 /* save function address */ - l.ori r18, r6, 0x0 /* save ret address */ - l.ori r20, r8, 0x0 /* save flag */ - - l.sub r1, r1, r3 /* reserve space on stack */ - - /* Call ffi_prep_args */ - l.ori r3, r1, 0x0 /* first argument stack address, second already ecif */ - l.jalr r5 - l.nop - - /* Load register arguments and call*/ - - l.lwz r3, 0(r1) - l.lwz r4, 4(r1) - l.lwz r5, 8(r1) - l.lwz r6, 12(r1) - l.lwz r7, 16(r1) - l.lwz r8, 20(r1) - l.ori r1, r11, 0x0 /* new stack pointer */ - l.jalr r16 - l.nop - - /* handle return values */ - - l.sfeqi r20, FFI_TYPE_STRUCT - l.bf ret /* structs don't return an rvalue */ - l.nop - - /* copy ret address */ - - l.sfeqi r20, FFI_TYPE_UINT64 - l.bnf four_byte_ret /* 8 byte value is returned */ - l.nop - - l.sw 4(r18), r12 - -four_byte_ret: - l.sw 0(r18), r11 - -ret: - /* return */ - l.ori r1, r14, 0x0 /* reset stack pointer */ - l.lwz r9, -4(r1) - l.lwz r1, -8(r1) - l.lwz r14, -12(r1) - l.lwz r16, -16(r1) - l.lwz r18, -20(r1) - l.lwz r20, -24(r1) - l.jr r9 - l.nop - -.size ffi_call_SYSV, .-ffi_call_SYSV diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/pa/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/pa/ffi.c deleted file mode 100644 index 4ce2bc6f0..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/pa/ffi.c +++ /dev/null @@ -1,719 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - (c) 2011 Anthony Green - (c) 2008 Red Hat, Inc. - (c) 2006 Free Software Foundation, Inc. - (c) 2003-2004 Randolph Chung - - HPPA Foreign Function Interface - HP-UX PA ABI support - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -#include -#include - -#define ROUND_UP(v, a) (((size_t)(v) + (a) - 1) & ~((a) - 1)) - -#define MIN_STACK_SIZE 64 -#define FIRST_ARG_SLOT 9 -#define DEBUG_LEVEL 0 - -#define fldw(addr, fpreg) \ - __asm__ volatile ("fldw 0(%0), %%" #fpreg "L" : : "r"(addr) : #fpreg) -#define fstw(fpreg, addr) \ - __asm__ volatile ("fstw %%" #fpreg "L, 0(%0)" : : "r"(addr)) -#define fldd(addr, fpreg) \ - __asm__ volatile ("fldd 0(%0), %%" #fpreg : : "r"(addr) : #fpreg) -#define fstd(fpreg, addr) \ - __asm__ volatile ("fstd %%" #fpreg "L, 0(%0)" : : "r"(addr)) - -#define debug(lvl, x...) do { if (lvl <= DEBUG_LEVEL) { printf(x); } } while (0) - -static inline int ffi_struct_type(ffi_type *t) -{ - size_t sz = t->size; - - /* Small structure results are passed in registers, - larger ones are passed by pointer. Note that - small structures of size 2, 4 and 8 differ from - the corresponding integer types in that they have - different alignment requirements. */ - - if (sz <= 1) - return FFI_TYPE_UINT8; - else if (sz == 2) - return FFI_TYPE_SMALL_STRUCT2; - else if (sz == 3) - return FFI_TYPE_SMALL_STRUCT3; - else if (sz == 4) - return FFI_TYPE_SMALL_STRUCT4; - else if (sz == 5) - return FFI_TYPE_SMALL_STRUCT5; - else if (sz == 6) - return FFI_TYPE_SMALL_STRUCT6; - else if (sz == 7) - return FFI_TYPE_SMALL_STRUCT7; - else if (sz <= 8) - return FFI_TYPE_SMALL_STRUCT8; - else - return FFI_TYPE_STRUCT; /* else, we pass it by pointer. */ -} - -/* PA has a downward growing stack, which looks like this: - - Offset - [ Variable args ] - SP = (4*(n+9)) arg word N - ... - SP-52 arg word 4 - [ Fixed args ] - SP-48 arg word 3 - SP-44 arg word 2 - SP-40 arg word 1 - SP-36 arg word 0 - [ Frame marker ] - ... - SP-20 RP - SP-4 previous SP - - The first four argument words on the stack are reserved for use by - the callee. Instead, the general and floating registers replace - the first four argument slots. Non FP arguments are passed solely - in the general registers. FP arguments are passed in both general - and floating registers when using libffi. - - Non-FP 32-bit args are passed in gr26, gr25, gr24 and gr23. - Non-FP 64-bit args are passed in register pairs, starting - on an odd numbered register (i.e. r25+r26 and r23+r24). - FP 32-bit arguments are passed in fr4L, fr5L, fr6L and fr7L. - FP 64-bit arguments are passed in fr5 and fr7. - - The registers are allocated in the same manner as stack slots. - This allows the callee to save its arguments on the stack if - necessary: - - arg word 3 -> gr23 or fr7L - arg word 2 -> gr24 or fr6L or fr7R - arg word 1 -> gr25 or fr5L - arg word 0 -> gr26 or fr4L or fr5R - - Note that fr4R and fr6R are never used for arguments (i.e., - doubles are not passed in fr4 or fr6). - - The rest of the arguments are passed on the stack starting at SP-52, - but 64-bit arguments need to be aligned to an 8-byte boundary - - This means we can have holes either in the register allocation, - or in the stack. */ - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments - - The following code will put everything into the stack frame - (which was allocated by the asm routine), and on return - the asm routine will load the arguments that should be - passed by register into the appropriate registers - - NOTE: We load floating point args in this function... that means we - assume gcc will not mess with fp regs in here. */ - -void ffi_prep_args_pa32(UINT32 *stack, extended_cif *ecif, unsigned bytes) -{ - register unsigned int i; - register ffi_type **p_arg; - register void **p_argv; - unsigned int slot = FIRST_ARG_SLOT; - char *dest_cpy; - size_t len; - - debug(1, "%s: stack = %p, ecif = %p, bytes = %u\n", __FUNCTION__, stack, - ecif, bytes); - - p_arg = ecif->cif->arg_types; - p_argv = ecif->avalue; - - for (i = 0; i < ecif->cif->nargs; i++) - { - int type = (*p_arg)->type; - - switch (type) - { - case FFI_TYPE_SINT8: - *(SINT32 *)(stack - slot) = *(SINT8 *)(*p_argv); - break; - - case FFI_TYPE_UINT8: - *(UINT32 *)(stack - slot) = *(UINT8 *)(*p_argv); - break; - - case FFI_TYPE_SINT16: - *(SINT32 *)(stack - slot) = *(SINT16 *)(*p_argv); - break; - - case FFI_TYPE_UINT16: - *(UINT32 *)(stack - slot) = *(UINT16 *)(*p_argv); - break; - - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_POINTER: - debug(3, "Storing UINT32 %u in slot %u\n", *(UINT32 *)(*p_argv), - slot); - *(UINT32 *)(stack - slot) = *(UINT32 *)(*p_argv); - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - /* Align slot for 64-bit type. */ - slot += (slot & 1) ? 1 : 2; - *(UINT64 *)(stack - slot) = *(UINT64 *)(*p_argv); - break; - - case FFI_TYPE_FLOAT: - /* First 4 args go in fr4L - fr7L. */ - debug(3, "Storing UINT32(float) in slot %u\n", slot); - *(UINT32 *)(stack - slot) = *(UINT32 *)(*p_argv); - switch (slot - FIRST_ARG_SLOT) - { - /* First 4 args go in fr4L - fr7L. */ - case 0: fldw(stack - slot, fr4); break; - case 1: fldw(stack - slot, fr5); break; - case 2: fldw(stack - slot, fr6); break; - case 3: fldw(stack - slot, fr7); break; - } - break; - - case FFI_TYPE_DOUBLE: - /* Align slot for 64-bit type. */ - slot += (slot & 1) ? 1 : 2; - debug(3, "Storing UINT64(double) at slot %u\n", slot); - *(UINT64 *)(stack - slot) = *(UINT64 *)(*p_argv); - switch (slot - FIRST_ARG_SLOT) - { - /* First 2 args go in fr5, fr7. */ - case 1: fldd(stack - slot, fr5); break; - case 3: fldd(stack - slot, fr7); break; - } - break; - -#ifdef PA_HPUX - case FFI_TYPE_LONGDOUBLE: - /* Long doubles are passed in the same manner as structures - larger than 8 bytes. */ - *(UINT32 *)(stack - slot) = (UINT32)(*p_argv); - break; -#endif - - case FFI_TYPE_STRUCT: - - /* Structs smaller or equal than 4 bytes are passed in one - register. Structs smaller or equal 8 bytes are passed in two - registers. Larger structures are passed by pointer. */ - - len = (*p_arg)->size; - if (len <= 4) - { - dest_cpy = (char *)(stack - slot) + 4 - len; - memcpy(dest_cpy, (char *)*p_argv, len); - } - else if (len <= 8) - { - slot += (slot & 1) ? 1 : 2; - dest_cpy = (char *)(stack - slot) + 8 - len; - memcpy(dest_cpy, (char *)*p_argv, len); - } - else - *(UINT32 *)(stack - slot) = (UINT32)(*p_argv); - break; - - default: - FFI_ASSERT(0); - } - - slot++; - p_arg++; - p_argv++; - } - - /* Make sure we didn't mess up and scribble on the stack. */ - { - unsigned int n; - - debug(5, "Stack setup:\n"); - for (n = 0; n < (bytes + 3) / 4; n++) - { - if ((n%4) == 0) { debug(5, "\n%08x: ", (unsigned int)(stack - n)); } - debug(5, "%08x ", *(stack - n)); - } - debug(5, "\n"); - } - - FFI_ASSERT(slot * 4 <= bytes); - - return; -} - -static void ffi_size_stack_pa32(ffi_cif *cif) -{ - ffi_type **ptr; - int i; - int z = 0; /* # stack slots */ - - for (ptr = cif->arg_types, i = 0; i < cif->nargs; ptr++, i++) - { - int type = (*ptr)->type; - - switch (type) - { - case FFI_TYPE_DOUBLE: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - z += 2 + (z & 1); /* must start on even regs, so we may waste one */ - break; - -#ifdef PA_HPUX - case FFI_TYPE_LONGDOUBLE: -#endif - case FFI_TYPE_STRUCT: - z += 1; /* pass by ptr, callee will copy */ - break; - - default: /* <= 32-bit values */ - z++; - } - } - - /* We can fit up to 6 args in the default 64-byte stack frame, - if we need more, we need more stack. */ - if (z <= 6) - cif->bytes = MIN_STACK_SIZE; /* min stack size */ - else - cif->bytes = 64 + ROUND_UP((z - 6) * sizeof(UINT32), MIN_STACK_SIZE); - - debug(3, "Calculated stack size is %u bytes\n", cif->bytes); -} - -/* Perform machine dependent cif processing. */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags = (unsigned) cif->rtype->type; - break; - -#ifdef PA_HPUX - case FFI_TYPE_LONGDOUBLE: - /* Long doubles are treated like a structure. */ - cif->flags = FFI_TYPE_STRUCT; - break; -#endif - - case FFI_TYPE_STRUCT: - /* For the return type we have to check the size of the structures. - If the size is smaller or equal 4 bytes, the result is given back - in one register. If the size is smaller or equal 8 bytes than we - return the result in two registers. But if the size is bigger than - 8 bytes, we work with pointers. */ - cif->flags = ffi_struct_type(cif->rtype); - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - cif->flags = FFI_TYPE_UINT64; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - - /* Lucky us, because of the unique PA ABI we get to do our - own stack sizing. */ - switch (cif->abi) - { - case FFI_PA32: - ffi_size_stack_pa32(cif); - break; - - default: - FFI_ASSERT(0); - break; - } - - return FFI_OK; -} - -extern void ffi_call_pa32(void (*)(UINT32 *, extended_cif *, unsigned), - extended_cif *, unsigned, unsigned, unsigned *, - void (*fn)(void)); - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return - value address then we need to make one. */ - - if (rvalue == NULL -#ifdef PA_HPUX - && (cif->rtype->type == FFI_TYPE_STRUCT - || cif->rtype->type == FFI_TYPE_LONGDOUBLE)) -#else - && cif->rtype->type == FFI_TYPE_STRUCT) -#endif - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - - switch (cif->abi) - { - case FFI_PA32: - debug(3, "Calling ffi_call_pa32: ecif=%p, bytes=%u, flags=%u, rvalue=%p, fn=%p\n", &ecif, cif->bytes, cif->flags, ecif.rvalue, (void *)fn); - ffi_call_pa32(ffi_prep_args_pa32, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; - - default: - FFI_ASSERT(0); - break; - } -} - -#if FFI_CLOSURES -/* This is more-or-less an inverse of ffi_call -- we have arguments on - the stack, and we need to fill them into a cif structure and invoke - the user function. This really ought to be in asm to make sure - the compiler doesn't do things we don't expect. */ -ffi_status ffi_closure_inner_pa32(ffi_closure *closure, UINT32 *stack) -{ - ffi_cif *cif; - void **avalue; - void *rvalue; - UINT32 ret[2]; /* function can return up to 64-bits in registers */ - ffi_type **p_arg; - char *tmp; - int i, avn; - unsigned int slot = FIRST_ARG_SLOT; - register UINT32 r28 asm("r28"); - - cif = closure->cif; - - /* If returning via structure, callee will write to our pointer. */ - if (cif->flags == FFI_TYPE_STRUCT) - rvalue = (void *)r28; - else - rvalue = &ret[0]; - - avalue = (void **)alloca(cif->nargs * FFI_SIZEOF_ARG); - avn = cif->nargs; - p_arg = cif->arg_types; - - for (i = 0; i < avn; i++) - { - int type = (*p_arg)->type; - - switch (type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_POINTER: - avalue[i] = (char *)(stack - slot) + sizeof(UINT32) - (*p_arg)->size; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - slot += (slot & 1) ? 1 : 2; - avalue[i] = (void *)(stack - slot); - break; - - case FFI_TYPE_FLOAT: -#ifdef PA_LINUX - /* The closure call is indirect. In Linux, floating point - arguments in indirect calls with a prototype are passed - in the floating point registers instead of the general - registers. So, we need to replace what was previously - stored in the current slot with the value in the - corresponding floating point register. */ - switch (slot - FIRST_ARG_SLOT) - { - case 0: fstw(fr4, (void *)(stack - slot)); break; - case 1: fstw(fr5, (void *)(stack - slot)); break; - case 2: fstw(fr6, (void *)(stack - slot)); break; - case 3: fstw(fr7, (void *)(stack - slot)); break; - } -#endif - avalue[i] = (void *)(stack - slot); - break; - - case FFI_TYPE_DOUBLE: - slot += (slot & 1) ? 1 : 2; -#ifdef PA_LINUX - /* See previous comment for FFI_TYPE_FLOAT. */ - switch (slot - FIRST_ARG_SLOT) - { - case 1: fstd(fr5, (void *)(stack - slot)); break; - case 3: fstd(fr7, (void *)(stack - slot)); break; - } -#endif - avalue[i] = (void *)(stack - slot); - break; - -#ifdef PA_HPUX - case FFI_TYPE_LONGDOUBLE: - /* Long doubles are treated like a big structure. */ - avalue[i] = (void *) *(stack - slot); - break; -#endif - - case FFI_TYPE_STRUCT: - /* Structs smaller or equal than 4 bytes are passed in one - register. Structs smaller or equal 8 bytes are passed in two - registers. Larger structures are passed by pointer. */ - if((*p_arg)->size <= 4) - { - avalue[i] = (void *)(stack - slot) + sizeof(UINT32) - - (*p_arg)->size; - } - else if ((*p_arg)->size <= 8) - { - slot += (slot & 1) ? 1 : 2; - avalue[i] = (void *)(stack - slot) + sizeof(UINT64) - - (*p_arg)->size; - } - else - avalue[i] = (void *) *(stack - slot); - break; - - default: - FFI_ASSERT(0); - } - - slot++; - p_arg++; - } - - /* Invoke the closure. */ - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - debug(3, "after calling function, ret[0] = %08x, ret[1] = %08x\n", ret[0], - ret[1]); - - /* Store the result using the lower 2 bytes of the flags. */ - switch (cif->flags) - { - case FFI_TYPE_UINT8: - *(stack - FIRST_ARG_SLOT) = (UINT8)(ret[0] >> 24); - break; - case FFI_TYPE_SINT8: - *(stack - FIRST_ARG_SLOT) = (SINT8)(ret[0] >> 24); - break; - case FFI_TYPE_UINT16: - *(stack - FIRST_ARG_SLOT) = (UINT16)(ret[0] >> 16); - break; - case FFI_TYPE_SINT16: - *(stack - FIRST_ARG_SLOT) = (SINT16)(ret[0] >> 16); - break; - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - *(stack - FIRST_ARG_SLOT) = ret[0]; - break; - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - *(stack - FIRST_ARG_SLOT) = ret[0]; - *(stack - FIRST_ARG_SLOT - 1) = ret[1]; - break; - - case FFI_TYPE_DOUBLE: - fldd(rvalue, fr4); - break; - - case FFI_TYPE_FLOAT: - fldw(rvalue, fr4); - break; - - case FFI_TYPE_STRUCT: - /* Don't need a return value, done by caller. */ - break; - - case FFI_TYPE_SMALL_STRUCT2: - case FFI_TYPE_SMALL_STRUCT3: - case FFI_TYPE_SMALL_STRUCT4: - tmp = (void*)(stack - FIRST_ARG_SLOT); - tmp += 4 - cif->rtype->size; - memcpy((void*)tmp, &ret[0], cif->rtype->size); - break; - - case FFI_TYPE_SMALL_STRUCT5: - case FFI_TYPE_SMALL_STRUCT6: - case FFI_TYPE_SMALL_STRUCT7: - case FFI_TYPE_SMALL_STRUCT8: - { - unsigned int ret2[2]; - int off; - - /* Right justify ret[0] and ret[1] */ - switch (cif->flags) - { - case FFI_TYPE_SMALL_STRUCT5: off = 3; break; - case FFI_TYPE_SMALL_STRUCT6: off = 2; break; - case FFI_TYPE_SMALL_STRUCT7: off = 1; break; - default: off = 0; break; - } - - memset (ret2, 0, sizeof (ret2)); - memcpy ((char *)ret2 + off, ret, 8 - off); - - *(stack - FIRST_ARG_SLOT) = ret2[0]; - *(stack - FIRST_ARG_SLOT - 1) = ret2[1]; - } - break; - - case FFI_TYPE_POINTER: - case FFI_TYPE_VOID: - break; - - default: - debug(0, "assert with cif->flags: %d\n",cif->flags); - FFI_ASSERT(0); - break; - } - return FFI_OK; -} - -/* Fill in a closure to refer to the specified fun and user_data. - cif specifies the argument and result types for fun. - The cif must already be prep'ed. */ - -extern void ffi_closure_pa32(void); - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - UINT32 *tramp = (UINT32 *)(closure->tramp); -#ifdef PA_HPUX - UINT32 *tmp; -#endif - - if (cif->abi != FFI_PA32) - return FFI_BAD_ABI; - - /* Make a small trampoline that will branch to our - handler function. Use PC-relative addressing. */ - -#ifdef PA_LINUX - tramp[0] = 0xeaa00000; /* b,l .+8,%r21 ; %r21 <- pc+8 */ - tramp[1] = 0xd6a01c1e; /* depi 0,31,2,%r21 ; mask priv bits */ - tramp[2] = 0x4aa10028; /* ldw 20(%r21),%r1 ; load plabel */ - tramp[3] = 0x36b53ff1; /* ldo -8(%r21),%r21 ; get closure addr */ - tramp[4] = 0x0c201096; /* ldw 0(%r1),%r22 ; address of handler */ - tramp[5] = 0xeac0c000; /* bv%r0(%r22) ; branch to handler */ - tramp[6] = 0x0c281093; /* ldw 4(%r1),%r19 ; GP of handler */ - tramp[7] = ((UINT32)(ffi_closure_pa32) & ~2); - - /* Flush d/icache -- have to flush up 2 two lines because of - alignment. */ - __asm__ volatile( - "fdc 0(%0)\n\t" - "fdc %1(%0)\n\t" - "fic 0(%%sr4, %0)\n\t" - "fic %1(%%sr4, %0)\n\t" - "sync\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n" - : - : "r"((unsigned long)tramp & ~31), - "r"(32 /* stride */) - : "memory"); -#endif - -#ifdef PA_HPUX - tramp[0] = 0xeaa00000; /* b,l .+8,%r21 ; %r21 <- pc+8 */ - tramp[1] = 0xd6a01c1e; /* depi 0,31,2,%r21 ; mask priv bits */ - tramp[2] = 0x4aa10038; /* ldw 28(%r21),%r1 ; load plabel */ - tramp[3] = 0x36b53ff1; /* ldo -8(%r21),%r21 ; get closure addr */ - tramp[4] = 0x0c201096; /* ldw 0(%r1),%r22 ; address of handler */ - tramp[5] = 0x02c010b4; /* ldsid (%r22),%r20 ; load space id */ - tramp[6] = 0x00141820; /* mtsp %r20,%sr0 ; into %sr0 */ - tramp[7] = 0xe2c00000; /* be 0(%sr0,%r22) ; branch to handler */ - tramp[8] = 0x0c281093; /* ldw 4(%r1),%r19 ; GP of handler */ - tramp[9] = ((UINT32)(ffi_closure_pa32) & ~2); - - /* Flush d/icache -- have to flush three lines because of alignment. */ - __asm__ volatile( - "copy %1,%0\n\t" - "fdc,m %2(%0)\n\t" - "fdc,m %2(%0)\n\t" - "fdc,m %2(%0)\n\t" - "ldsid (%1),%0\n\t" - "mtsp %0,%%sr0\n\t" - "copy %1,%0\n\t" - "fic,m %2(%%sr0,%0)\n\t" - "fic,m %2(%%sr0,%0)\n\t" - "fic,m %2(%%sr0,%0)\n\t" - "sync\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n" - : "=&r" ((unsigned long)tmp) - : "r" ((unsigned long)tramp & ~31), - "r" (32/* stride */) - : "memory"); -#endif - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/pa/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/pa/ffitarget.h deleted file mode 100644 index fff4c6b38..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/pa/ffitarget.h +++ /dev/null @@ -1,85 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for hppa. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -/* ---- System specific configurations ----------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - -#ifdef PA_LINUX - FFI_PA32, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_PA32 -#endif - -#ifdef PA_HPUX - FFI_PA32, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_PA32 -#endif - -#ifdef PA64_HPUX -#error "PA64_HPUX FFI is not yet implemented" - FFI_PA64, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_PA64 -#endif -} ffi_abi; -#endif - -#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_NATIVE_RAW_API 0 - -#ifdef PA_LINUX -#define FFI_TRAMPOLINE_SIZE 32 -#else -#define FFI_TRAMPOLINE_SIZE 40 -#endif - -#define FFI_TYPE_SMALL_STRUCT2 -1 -#define FFI_TYPE_SMALL_STRUCT3 -2 -#define FFI_TYPE_SMALL_STRUCT4 -3 -#define FFI_TYPE_SMALL_STRUCT5 -4 -#define FFI_TYPE_SMALL_STRUCT6 -5 -#define FFI_TYPE_SMALL_STRUCT7 -6 -#define FFI_TYPE_SMALL_STRUCT8 -7 -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/pa/hpux32.S b/ruby/ext/fiddle/libffi-3.2.1/src/pa/hpux32.S deleted file mode 100644 index 40528bad7..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/pa/hpux32.S +++ /dev/null @@ -1,368 +0,0 @@ -/* ----------------------------------------------------------------------- - hpux32.S - Copyright (c) 2006 Free Software Foundation, Inc. - (c) 2008 Red Hat, Inc. - based on src/pa/linux.S - - HP-UX PA Foreign Function Interface - - 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 AUTHOR 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - .LEVEL 1.1 - .SPACE $PRIVATE$ - .IMPORT $global$,DATA - .IMPORT $$dyncall,MILLICODE - .SUBSPA $DATA$ - .align 4 - - /* void ffi_call_pa32(void (*)(char *, extended_cif *), - extended_cif *ecif, - unsigned bytes, - unsigned flags, - unsigned *rvalue, - void (*fn)(void)); - */ - - .export ffi_call_pa32,ENTRY,PRIV_LEV=3 - .import ffi_prep_args_pa32,CODE - - .SPACE $TEXT$ - .SUBSPA $CODE$ - .align 4 - -L$FB1 -ffi_call_pa32 - .proc - .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4 - .entry - stw %rp, -20(%sp) - copy %r3, %r1 -L$CFI11 - copy %sp, %r3 -L$CFI12 - - /* Setup the stack for calling prep_args... - We want the stack to look like this: - - [ Previous stack ] <- %r3 - - [ 64-bytes register save area ] <- %r4 - - [ Stack space for actual call, passed as ] <- %arg0 - [ arg0 to ffi_prep_args_pa32 ] - - [ Stack for calling prep_args ] <- %sp - */ - - stwm %r1, 64(%sp) - stw %r4, 12(%r3) -L$CFI13 - copy %sp, %r4 - - addl %arg2, %r4, %arg0 ; arg stack - stw %arg3, -48(%r3) ; save flags we need it later - - /* Call prep_args: - %arg0(stack) -- set up above - %arg1(ecif) -- same as incoming param - %arg2(bytes) -- same as incoming param */ - bl ffi_prep_args_pa32,%r2 - ldo 64(%arg0), %sp - ldo -64(%sp), %sp - - /* now %sp should point where %arg0 was pointing. */ - - /* Load the arguments that should be passed in registers - The fp args are loaded by the prep_args function. */ - ldw -36(%sp), %arg0 - ldw -40(%sp), %arg1 - ldw -44(%sp), %arg2 - ldw -48(%sp), %arg3 - - /* in case the function is going to return a structure - we need to give it a place to put the result. */ - ldw -52(%r3), %ret0 ; %ret0 <- rvalue - ldw -56(%r3), %r22 ; %r22 <- function to call - bl $$dyncall, %r31 ; Call the user function - copy %r31, %rp - - /* Prepare to store the result; we need to recover flags and rvalue. */ - ldw -48(%r3), %r21 ; r21 <- flags - ldw -52(%r3), %r20 ; r20 <- rvalue - - /* Store the result according to the return type. The most - likely types should come first. */ - -L$checkint - comib,<>,n FFI_TYPE_INT, %r21, L$checkint8 - b L$done - stw %ret0, 0(%r20) - -L$checkint8 - comib,<>,n FFI_TYPE_UINT8, %r21, L$checkint16 - b L$done - stb %ret0, 0(%r20) - -L$checkint16 - comib,<>,n FFI_TYPE_UINT16, %r21, L$checkdbl - b L$done - sth %ret0, 0(%r20) - -L$checkdbl - comib,<>,n FFI_TYPE_DOUBLE, %r21, L$checkfloat - b L$done - fstd %fr4,0(%r20) - -L$checkfloat - comib,<>,n FFI_TYPE_FLOAT, %r21, L$checkll - b L$done - fstw %fr4L,0(%r20) - -L$checkll - comib,<>,n FFI_TYPE_UINT64, %r21, L$checksmst2 - stw %ret0, 0(%r20) - b L$done - stw %ret1, 4(%r20) - -L$checksmst2 - comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, L$checksmst3 - /* 2-byte structs are returned in ret0 as ????xxyy. */ - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b L$done - stb %ret0, 0(%r20) - -L$checksmst3 - comib,<>,n FFI_TYPE_SMALL_STRUCT3, %r21, L$checksmst4 - /* 3-byte structs are returned in ret0 as ??xxyyzz. */ - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b L$done - stb %ret0, 0(%r20) - -L$checksmst4 - comib,<>,n FFI_TYPE_SMALL_STRUCT4, %r21, L$checksmst5 - /* 4-byte structs are returned in ret0 as wwxxyyzz. */ - extru %ret0, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b L$done - stb %ret0, 0(%r20) - -L$checksmst5 - comib,<>,n FFI_TYPE_SMALL_STRUCT5, %r21, L$checksmst6 - /* 5 byte values are returned right justified: - ret0 ret1 - 5: ??????aa bbccddee */ - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b L$done - stb %ret1, 0(%r20) - -L$checksmst6 - comib,<>,n FFI_TYPE_SMALL_STRUCT6, %r21, L$checksmst7 - /* 6 byte values are returned right justified: - ret0 ret1 - 6: ????aabb ccddeeff */ - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b L$done - stb %ret1, 0(%r20) - -L$checksmst7 - comib,<>,n FFI_TYPE_SMALL_STRUCT7, %r21, L$checksmst8 - /* 7 byte values are returned right justified: - ret0 ret1 - 7: ??aabbcc ddeeffgg */ - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b L$done - stb %ret1, 0(%r20) - -L$checksmst8 - comib,<>,n FFI_TYPE_SMALL_STRUCT8, %r21, L$done - /* 8 byte values are returned right justified: - ret0 ret1 - 8: aabbccdd eeffgghh */ - extru %ret0, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stb %ret1, 0(%r20) - -L$done - /* all done, return */ - copy %r4, %sp ; pop arg stack - ldw 12(%r3), %r4 - ldwm -64(%sp), %r3 ; .. and pop stack - ldw -20(%sp), %rp - bv %r0(%rp) - nop - .exit - .procend -L$FE1 - - /* void ffi_closure_pa32(void); - Called with closure argument in %r21 */ - - .SPACE $TEXT$ - .SUBSPA $CODE$ - .export ffi_closure_pa32,ENTRY,PRIV_LEV=3,RTNVAL=GR - .import ffi_closure_inner_pa32,CODE - .align 4 -L$FB2 -ffi_closure_pa32 - .proc - .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3 - .entry - - stw %rp, -20(%sp) - copy %r3, %r1 -L$CFI21 - copy %sp, %r3 -L$CFI22 - stwm %r1, 64(%sp) - - /* Put arguments onto the stack and call ffi_closure_inner. */ - stw %arg0, -36(%r3) - stw %arg1, -40(%r3) - stw %arg2, -44(%r3) - stw %arg3, -48(%r3) - - copy %r21, %arg0 - bl ffi_closure_inner_pa32, %r2 - copy %r3, %arg1 - ldwm -64(%sp), %r3 - ldw -20(%sp), %rp - ldw -36(%sp), %ret0 - bv %r0(%rp) - ldw -40(%sp), %ret1 - .exit - .procend -L$FE2: - - .SPACE $PRIVATE$ - .SUBSPA $DATA$ - - .align 4 - .EXPORT _GLOBAL__F_ffi_call_pa32,DATA -_GLOBAL__F_ffi_call_pa32 -L$frame1: - .word L$ECIE1-L$SCIE1 ;# Length of Common Information Entry -L$SCIE1: - .word 0x0 ;# CIE Identifier Tag - .byte 0x1 ;# CIE Version - .ascii "\0" ;# CIE Augmentation - .uleb128 0x1 ;# CIE Code Alignment Factor - .sleb128 4 ;# CIE Data Alignment Factor - .byte 0x2 ;# CIE RA Column - .byte 0xc ;# DW_CFA_def_cfa - .uleb128 0x1e - .uleb128 0x0 - .align 4 -L$ECIE1: -L$SFDE1: - .word L$EFDE1-L$ASFDE1 ;# FDE Length -L$ASFDE1: - .word L$ASFDE1-L$frame1 ;# FDE CIE offset - .word L$FB1 ;# FDE initial location - .word L$FE1-L$FB1 ;# FDE address range - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word L$CFI11-L$FB1 - .byte 0x83 ;# DW_CFA_offset, column 0x3 - .uleb128 0x0 - .byte 0x11 ;# DW_CFA_offset_extended_sf; save r2 at [r30-20] - .uleb128 0x2 - .sleb128 -5 - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word L$CFI12-L$CFI11 - .byte 0xd ;# DW_CFA_def_cfa_register = r3 - .uleb128 0x3 - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word L$CFI13-L$CFI12 - .byte 0x84 ;# DW_CFA_offset, column 0x4 - .uleb128 0x3 - - .align 4 -L$EFDE1: - -L$SFDE2: - .word L$EFDE2-L$ASFDE2 ;# FDE Length -L$ASFDE2: - .word L$ASFDE2-L$frame1 ;# FDE CIE offset - .word L$FB2 ;# FDE initial location - .word L$FE2-L$FB2 ;# FDE address range - .byte 0x4 ;# DW_CFA_advance_loc4 - .word L$CFI21-L$FB2 - .byte 0x83 ;# DW_CFA_offset, column 0x3 - .uleb128 0x0 - .byte 0x11 ;# DW_CFA_offset_extended_sf - .uleb128 0x2 - .sleb128 -5 - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word L$CFI22-L$CFI21 - .byte 0xd ;# DW_CFA_def_cfa_register = r3 - .uleb128 0x3 - - .align 4 -L$EFDE2: diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/pa/linux.S b/ruby/ext/fiddle/libffi-3.2.1/src/pa/linux.S deleted file mode 100644 index f11ae7680..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/pa/linux.S +++ /dev/null @@ -1,357 +0,0 @@ -/* ----------------------------------------------------------------------- - linux.S - (c) 2003-2004 Randolph Chung - (c) 2008 Red Hat, Inc. - - HPPA Foreign Function Interface - - 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 RENESAS TECHNOLOGY 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - .text - .level 1.1 - .align 4 - - /* void ffi_call_pa32(void (*)(char *, extended_cif *), - extended_cif *ecif, - unsigned bytes, - unsigned flags, - unsigned *rvalue, - void (*fn)(void)); - */ - - .export ffi_call_pa32,code - .import ffi_prep_args_pa32,code - - .type ffi_call_pa32, @function -.LFB1: -ffi_call_pa32: - .proc - .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4 - .entry - stw %rp, -20(%sp) - copy %r3, %r1 -.LCFI11: - - copy %sp, %r3 -.LCFI12: - - /* Setup the stack for calling prep_args... - We want the stack to look like this: - - [ Previous stack ] <- %r3 - - [ 64-bytes register save area ] <- %r4 - - [ Stack space for actual call, passed as ] <- %arg0 - [ arg0 to ffi_prep_args_pa32 ] - - [ Stack for calling prep_args ] <- %sp - */ - - stwm %r1, 64(%sp) - stw %r4, 12(%r3) -.LCFI13: - copy %sp, %r4 - - addl %arg2, %r4, %arg0 /* arg stack */ - stw %arg3, -48(%r3) /* save flags; we need it later */ - - /* Call prep_args: - %arg0(stack) -- set up above - %arg1(ecif) -- same as incoming param - %arg2(bytes) -- same as incoming param */ - bl ffi_prep_args_pa32,%r2 - ldo 64(%arg0), %sp - ldo -64(%sp), %sp - - /* now %sp should point where %arg0 was pointing. */ - - /* Load the arguments that should be passed in registers - The fp args were loaded by the prep_args function. */ - ldw -36(%sp), %arg0 - ldw -40(%sp), %arg1 - ldw -44(%sp), %arg2 - ldw -48(%sp), %arg3 - - /* in case the function is going to return a structure - we need to give it a place to put the result. */ - ldw -52(%r3), %ret0 /* %ret0 <- rvalue */ - ldw -56(%r3), %r22 /* %r22 <- function to call */ - bl $$dyncall, %r31 /* Call the user function */ - copy %r31, %rp - - /* Prepare to store the result; we need to recover flags and rvalue. */ - ldw -48(%r3), %r21 /* r21 <- flags */ - ldw -52(%r3), %r20 /* r20 <- rvalue */ - - /* Store the result according to the return type. */ - -.Lcheckint: - comib,<>,n FFI_TYPE_INT, %r21, .Lcheckint8 - b .Ldone - stw %ret0, 0(%r20) - -.Lcheckint8: - comib,<>,n FFI_TYPE_UINT8, %r21, .Lcheckint16 - b .Ldone - stb %ret0, 0(%r20) - -.Lcheckint16: - comib,<>,n FFI_TYPE_UINT16, %r21, .Lcheckdbl - b .Ldone - sth %ret0, 0(%r20) - -.Lcheckdbl: - comib,<>,n FFI_TYPE_DOUBLE, %r21, .Lcheckfloat - b .Ldone - fstd %fr4,0(%r20) - -.Lcheckfloat: - comib,<>,n FFI_TYPE_FLOAT, %r21, .Lcheckll - b .Ldone - fstw %fr4L,0(%r20) - -.Lcheckll: - comib,<>,n FFI_TYPE_UINT64, %r21, .Lchecksmst2 - stw %ret0, 0(%r20) - b .Ldone - stw %ret1, 4(%r20) - -.Lchecksmst2: - comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, .Lchecksmst3 - /* 2-byte structs are returned in ret0 as ????xxyy. */ - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b .Ldone - stb %ret0, 0(%r20) - -.Lchecksmst3: - comib,<>,n FFI_TYPE_SMALL_STRUCT3, %r21, .Lchecksmst4 - /* 3-byte structs are returned in ret0 as ??xxyyzz. */ - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b .Ldone - stb %ret0, 0(%r20) - -.Lchecksmst4: - comib,<>,n FFI_TYPE_SMALL_STRUCT4, %r21, .Lchecksmst5 - /* 4-byte structs are returned in ret0 as wwxxyyzz. */ - extru %ret0, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b .Ldone - stb %ret0, 0(%r20) - -.Lchecksmst5: - comib,<>,n FFI_TYPE_SMALL_STRUCT5, %r21, .Lchecksmst6 - /* 5 byte values are returned right justified: - ret0 ret1 - 5: ??????aa bbccddee */ - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b .Ldone - stb %ret1, 0(%r20) - -.Lchecksmst6: - comib,<>,n FFI_TYPE_SMALL_STRUCT6, %r21, .Lchecksmst7 - /* 6 byte values are returned right justified: - ret0 ret1 - 6: ????aabb ccddeeff */ - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b .Ldone - stb %ret1, 0(%r20) - -.Lchecksmst7: - comib,<>,n FFI_TYPE_SMALL_STRUCT7, %r21, .Lchecksmst8 - /* 7 byte values are returned right justified: - ret0 ret1 - 7: ??aabbcc ddeeffgg */ - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b .Ldone - stb %ret1, 0(%r20) - -.Lchecksmst8: - comib,<>,n FFI_TYPE_SMALL_STRUCT8, %r21, .Ldone - /* 8 byte values are returned right justified: - ret0 ret1 - 8: aabbccdd eeffgghh */ - extru %ret0, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stb %ret1, 0(%r20) - -.Ldone: - /* all done, return */ - copy %r4, %sp /* pop arg stack */ - ldw 12(%r3), %r4 - ldwm -64(%sp), %r3 /* .. and pop stack */ - ldw -20(%sp), %rp - bv %r0(%rp) - nop - .exit - .procend -.LFE1: - - /* void ffi_closure_pa32(void); - Called with closure argument in %r21 */ - .export ffi_closure_pa32,code - .import ffi_closure_inner_pa32,code - - .type ffi_closure_pa32, @function -.LFB2: -ffi_closure_pa32: - .proc - .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3 - .entry - - stw %rp, -20(%sp) -.LCFI20: - copy %r3, %r1 -.LCFI21: - copy %sp, %r3 -.LCFI22: - stwm %r1, 64(%sp) - - /* Put arguments onto the stack and call ffi_closure_inner. */ - stw %arg0, -36(%r3) - stw %arg1, -40(%r3) - stw %arg2, -44(%r3) - stw %arg3, -48(%r3) - - copy %r21, %arg0 - bl ffi_closure_inner_pa32, %r2 - copy %r3, %arg1 - - ldwm -64(%sp), %r3 - ldw -20(%sp), %rp - ldw -36(%sp), %ret0 - bv %r0(%r2) - ldw -40(%sp), %ret1 - - .exit - .procend -.LFE2: - - .section ".eh_frame",EH_FRAME_FLAGS,@progbits -.Lframe1: - .word .LECIE1-.LSCIE1 ;# Length of Common Information Entry -.LSCIE1: - .word 0x0 ;# CIE Identifier Tag - .byte 0x1 ;# CIE Version - .ascii "\0" ;# CIE Augmentation - .uleb128 0x1 ;# CIE Code Alignment Factor - .sleb128 4 ;# CIE Data Alignment Factor - .byte 0x2 ;# CIE RA Column - .byte 0xc ;# DW_CFA_def_cfa - .uleb128 0x1e - .uleb128 0x0 - .align 4 -.LECIE1: -.LSFDE1: - .word .LEFDE1-.LASFDE1 ;# FDE Length -.LASFDE1: - .word .LASFDE1-.Lframe1 ;# FDE CIE offset - .word .LFB1 ;# FDE initial location - .word .LFE1-.LFB1 ;# FDE address range - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word .LCFI11-.LFB1 - .byte 0x83 ;# DW_CFA_offset, column 0x3 - .uleb128 0x0 - .byte 0x11 ;# DW_CFA_offset_extended_sf; save r2 at [r30-20] - .uleb128 0x2 - .sleb128 -5 - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word .LCFI12-.LCFI11 - .byte 0xd ;# DW_CFA_def_cfa_register = r3 - .uleb128 0x3 - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word .LCFI13-.LCFI12 - .byte 0x84 ;# DW_CFA_offset, column 0x4 - .uleb128 0x3 - - .align 4 -.LEFDE1: - -.LSFDE2: - .word .LEFDE2-.LASFDE2 ;# FDE Length -.LASFDE2: - .word .LASFDE2-.Lframe1 ;# FDE CIE offset - .word .LFB2 ;# FDE initial location - .word .LFE2-.LFB2 ;# FDE address range - .byte 0x4 ;# DW_CFA_advance_loc4 - .word .LCFI21-.LFB2 - .byte 0x83 ;# DW_CFA_offset, column 0x3 - .uleb128 0x0 - .byte 0x11 ;# DW_CFA_offset_extended_sf - .uleb128 0x2 - .sleb128 -5 - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word .LCFI22-.LCFI21 - .byte 0xd ;# DW_CFA_def_cfa_register = r3 - .uleb128 0x3 - - .align 4 -.LEFDE2: diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/aix.S b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/aix.S deleted file mode 100644 index 349e78c26..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/aix.S +++ /dev/null @@ -1,328 +0,0 @@ -/* ----------------------------------------------------------------------- - aix.S - Copyright (c) 2002, 2009 Free Software Foundation, Inc. - based on darwin.S by John Hornkvist - - PowerPC Assembly glue. - - 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 AUTHOR 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. - ----------------------------------------------------------------------- */ - - .set r0,0 - .set r1,1 - .set r2,2 - .set r3,3 - .set r4,4 - .set r5,5 - .set r6,6 - .set r7,7 - .set r8,8 - .set r9,9 - .set r10,10 - .set r11,11 - .set r12,12 - .set r13,13 - .set r14,14 - .set r15,15 - .set r16,16 - .set r17,17 - .set r18,18 - .set r19,19 - .set r20,20 - .set r21,21 - .set r22,22 - .set r23,23 - .set r24,24 - .set r25,25 - .set r26,26 - .set r27,27 - .set r28,28 - .set r29,29 - .set r30,30 - .set r31,31 - .set f0,0 - .set f1,1 - .set f2,2 - .set f3,3 - .set f4,4 - .set f5,5 - .set f6,6 - .set f7,7 - .set f8,8 - .set f9,9 - .set f10,10 - .set f11,11 - .set f12,12 - .set f13,13 - .set f14,14 - .set f15,15 - .set f16,16 - .set f17,17 - .set f18,18 - .set f19,19 - .set f20,20 - .set f21,21 - - .extern .ffi_prep_args - -#define LIBFFI_ASM -#include -#include -#define JUMPTARGET(name) name -#define L(x) x - .file "aix.S" - .toc - - /* void ffi_call_AIX(extended_cif *ecif, unsigned long bytes, - * unsigned int flags, unsigned int *rvalue, - * void (*fn)(), - * void (*prep_args)(extended_cif*, unsigned *const)); - * r3=ecif, r4=bytes, r5=flags, r6=rvalue, r7=fn, r8=prep_args - */ - -.csect .text[PR] - .align 2 - .globl ffi_call_AIX - .globl .ffi_call_AIX -.csect ffi_call_AIX[DS] -ffi_call_AIX: -#ifdef __64BIT__ - .llong .ffi_call_AIX, TOC[tc0], 0 - .csect .text[PR] -.ffi_call_AIX: - /* Save registers we use. */ - mflr r0 - - std r28,-32(r1) - std r29,-24(r1) - std r30,-16(r1) - std r31, -8(r1) - - std r0, 16(r1) - mr r28, r1 /* our AP. */ - stdux r1, r1, r4 - - /* Save arguments over call... */ - mr r31, r5 /* flags, */ - mr r30, r6 /* rvalue, */ - mr r29, r7 /* function address. */ - std r2, 40(r1) - - /* Call ffi_prep_args. */ - mr r4, r1 - bl .ffi_prep_args - nop - - /* Now do the call. */ - ld r0, 0(r29) - ld r2, 8(r29) - ld r11, 16(r29) - /* Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40, r31 - mtctr r0 - /* Load all those argument registers. */ - /* We have set up a nice stack frame, just load it into registers. */ - ld r3, 40+(1*8)(r1) - ld r4, 40+(2*8)(r1) - ld r5, 40+(3*8)(r1) - ld r6, 40+(4*8)(r1) - nop - ld r7, 40+(5*8)(r1) - ld r8, 40+(6*8)(r1) - ld r9, 40+(7*8)(r1) - ld r10,40+(8*8)(r1) - -L1: - /* Load all the FP registers. */ - bf 6,L2 /* 2f + 0x18 */ - lfd f1,-32-(13*8)(r28) - lfd f2,-32-(12*8)(r28) - lfd f3,-32-(11*8)(r28) - lfd f4,-32-(10*8)(r28) - nop - lfd f5,-32-(9*8)(r28) - lfd f6,-32-(8*8)(r28) - lfd f7,-32-(7*8)(r28) - lfd f8,-32-(6*8)(r28) - nop - lfd f9,-32-(5*8)(r28) - lfd f10,-32-(4*8)(r28) - lfd f11,-32-(3*8)(r28) - lfd f12,-32-(2*8)(r28) - nop - lfd f13,-32-(1*8)(r28) - -L2: - /* Make the call. */ - bctrl - ld r2, 40(r1) - - /* Now, deal with the return value. */ - mtcrf 0x01, r31 - - bt 30, L(done_return_value) - bt 29, L(fp_return_value) - std r3, 0(r30) - - /* Fall through... */ - -L(done_return_value): - /* Restore the registers we used and return. */ - mr r1, r28 - ld r0, 16(r28) - ld r28, -32(r1) - mtlr r0 - ld r29, -24(r1) - ld r30, -16(r1) - ld r31, -8(r1) - blr - -L(fp_return_value): - bf 28, L(float_return_value) - stfd f1, 0(r30) - bf 31, L(done_return_value) - stfd f2, 8(r30) - b L(done_return_value) -L(float_return_value): - stfs f1, 0(r30) - b L(done_return_value) - -#else /* ! __64BIT__ */ - - .long .ffi_call_AIX, TOC[tc0], 0 - .csect .text[PR] -.ffi_call_AIX: - /* Save registers we use. */ - mflr r0 - - stw r28,-16(r1) - stw r29,-12(r1) - stw r30, -8(r1) - stw r31, -4(r1) - - stw r0, 8(r1) - mr r28, r1 /* out AP. */ - stwux r1, r1, r4 - - /* Save arguments over call... */ - mr r31, r5 /* flags, */ - mr r30, r6 /* rvalue, */ - mr r29, r7 /* function address, */ - stw r2, 20(r1) - - /* Call ffi_prep_args. */ - mr r4, r1 - bl .ffi_prep_args - nop - - /* Now do the call. */ - lwz r0, 0(r29) - lwz r2, 4(r29) - lwz r11, 8(r29) - /* Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40, r31 - mtctr r0 - /* Load all those argument registers. */ - /* We have set up a nice stack frame, just load it into registers. */ - lwz r3, 20+(1*4)(r1) - lwz r4, 20+(2*4)(r1) - lwz r5, 20+(3*4)(r1) - lwz r6, 20+(4*4)(r1) - nop - lwz r7, 20+(5*4)(r1) - lwz r8, 20+(6*4)(r1) - lwz r9, 20+(7*4)(r1) - lwz r10,20+(8*4)(r1) - -L1: - /* Load all the FP registers. */ - bf 6,L2 /* 2f + 0x18 */ - lfd f1,-16-(13*8)(r28) - lfd f2,-16-(12*8)(r28) - lfd f3,-16-(11*8)(r28) - lfd f4,-16-(10*8)(r28) - nop - lfd f5,-16-(9*8)(r28) - lfd f6,-16-(8*8)(r28) - lfd f7,-16-(7*8)(r28) - lfd f8,-16-(6*8)(r28) - nop - lfd f9,-16-(5*8)(r28) - lfd f10,-16-(4*8)(r28) - lfd f11,-16-(3*8)(r28) - lfd f12,-16-(2*8)(r28) - nop - lfd f13,-16-(1*8)(r28) - -L2: - /* Make the call. */ - bctrl - lwz r2, 20(r1) - - /* Now, deal with the return value. */ - mtcrf 0x01, r31 - - bt 30, L(done_return_value) - bt 29, L(fp_return_value) - stw r3, 0(r30) - bf 28, L(done_return_value) - stw r4, 4(r30) - - /* Fall through... */ - -L(done_return_value): - /* Restore the registers we used and return. */ - mr r1, r28 - lwz r0, 8(r28) - lwz r28,-16(r1) - mtlr r0 - lwz r29,-12(r1) - lwz r30, -8(r1) - lwz r31, -4(r1) - blr - -L(fp_return_value): - bf 28, L(float_return_value) - stfd f1, 0(r30) - b L(done_return_value) -L(float_return_value): - stfs f1, 0(r30) - b L(done_return_value) -#endif - .long 0 - .byte 0,0,0,1,128,4,0,0 -/* END(ffi_call_AIX) */ - -.csect .text[PR] - .align 2 - .globl ffi_call_DARWIN - .globl .ffi_call_DARWIN -.csect ffi_call_DARWIN[DS] -ffi_call_DARWIN: -#ifdef __64BIT__ - .llong .ffi_call_DARWIN, TOC[tc0], 0 -#else - .long .ffi_call_DARWIN, TOC[tc0], 0 -#endif - .csect .text[PR] -.ffi_call_DARWIN: - blr - .long 0 - .byte 0,0,0,0,0,0,0,0 -/* END(ffi_call_DARWIN) */ diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/aix_closure.S b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/aix_closure.S deleted file mode 100644 index aabd3c3c1..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/aix_closure.S +++ /dev/null @@ -1,447 +0,0 @@ -/* ----------------------------------------------------------------------- - aix_closure.S - Copyright (c) 2002, 2003, 2009 Free Software Foundation, Inc. - based on darwin_closure.S - - PowerPC Assembly glue. - - 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 AUTHOR 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. - ----------------------------------------------------------------------- */ - - .set r0,0 - .set r1,1 - .set r2,2 - .set r3,3 - .set r4,4 - .set r5,5 - .set r6,6 - .set r7,7 - .set r8,8 - .set r9,9 - .set r10,10 - .set r11,11 - .set r12,12 - .set r13,13 - .set r14,14 - .set r15,15 - .set r16,16 - .set r17,17 - .set r18,18 - .set r19,19 - .set r20,20 - .set r21,21 - .set r22,22 - .set r23,23 - .set r24,24 - .set r25,25 - .set r26,26 - .set r27,27 - .set r28,28 - .set r29,29 - .set r30,30 - .set r31,31 - .set f0,0 - .set f1,1 - .set f2,2 - .set f3,3 - .set f4,4 - .set f5,5 - .set f6,6 - .set f7,7 - .set f8,8 - .set f9,9 - .set f10,10 - .set f11,11 - .set f12,12 - .set f13,13 - .set f14,14 - .set f15,15 - .set f16,16 - .set f17,17 - .set f18,18 - .set f19,19 - .set f20,20 - .set f21,21 - - .extern .ffi_closure_helper_DARWIN - -#define LIBFFI_ASM -#define JUMPTARGET(name) name -#define L(x) x - .file "aix_closure.S" - .toc -LC..60: - .tc L..60[TC],L..60 - .csect .text[PR] - .align 2 - -.csect .text[PR] - .align 2 - .globl ffi_closure_ASM - .globl .ffi_closure_ASM -.csect ffi_closure_ASM[DS] -ffi_closure_ASM: -#ifdef __64BIT__ - .llong .ffi_closure_ASM, TOC[tc0], 0 - .csect .text[PR] -.ffi_closure_ASM: -/* we want to build up an area for the parameters passed */ -/* in registers (both floating point and integer) */ - - /* we store gpr 3 to gpr 10 (aligned to 4) - in the parents outgoing area */ - std r3, 48+(0*8)(r1) - std r4, 48+(1*8)(r1) - std r5, 48+(2*8)(r1) - std r6, 48+(3*8)(r1) - mflr r0 - - std r7, 48+(4*8)(r1) - std r8, 48+(5*8)(r1) - std r9, 48+(6*8)(r1) - std r10, 48+(7*8)(r1) - std r0, 16(r1) /* save the return address */ - - - /* 48 Bytes (Linkage Area) */ - /* 64 Bytes (params) */ - /* 16 Bytes (result) */ - /* 104 Bytes (13*8 from FPR) */ - /* 8 Bytes (alignment) */ - /* 240 Bytes */ - - stdu r1, -240(r1) /* skip over caller save area - keep stack aligned to 16 */ - - /* next save fpr 1 to fpr 13 (aligned to 8) */ - stfd f1, 128+(0*8)(r1) - stfd f2, 128+(1*8)(r1) - stfd f3, 128+(2*8)(r1) - stfd f4, 128+(3*8)(r1) - stfd f5, 128+(4*8)(r1) - stfd f6, 128+(5*8)(r1) - stfd f7, 128+(6*8)(r1) - stfd f8, 128+(7*8)(r1) - stfd f9, 128+(8*8)(r1) - stfd f10, 128+(9*8)(r1) - stfd f11, 128+(10*8)(r1) - stfd f12, 128+(11*8)(r1) - stfd f13, 128+(12*8)(r1) - - /* set up registers for the routine that actually does the work */ - /* get the context pointer from the trampoline */ - mr r3, r11 - - /* now load up the pointer to the result storage */ - addi r4, r1, 112 - - /* now load up the pointer to the saved gpr registers */ - addi r5, r1, 288 - - /* now load up the pointer to the saved fpr registers */ - addi r6, r1, 128 - - /* make the call */ - bl .ffi_closure_helper_DARWIN - nop - - /* now r3 contains the return type */ - /* so use it to look up in a table */ - /* so we know how to deal with each type */ - - /* look up the proper starting point in table */ - /* by using return type as offset */ - lhz r3, 10(r3) /* load type from return type */ - ld r4, LC..60(2) /* get address of jump table */ - sldi r3, r3, 4 /* now multiply return type by 16 */ - ld r0, 240+16(r1) /* load return address */ - add r3, r3, r4 /* add contents of table to table address */ - mtctr r3 - bctr /* jump to it */ - -/* Each fragment must be exactly 16 bytes long (4 instructions). - Align to 16 byte boundary for cache and dispatch efficiency. */ - .align 4 - -L..60: -/* case FFI_TYPE_VOID */ - mtlr r0 - addi r1, r1, 240 - blr - nop - -/* case FFI_TYPE_INT */ - lwa r3, 112+4(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_FLOAT */ - lfs f1, 112+0(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_DOUBLE */ - lfd f1, 112+0(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_LONGDOUBLE */ - lfd f1, 112+0(r1) - mtlr r0 - lfd f2, 112+8(r1) - b L..finish - -/* case FFI_TYPE_UINT8 */ - lbz r3, 112+7(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_SINT8 */ - lbz r3, 112+7(r1) - mtlr r0 - extsb r3, r3 - b L..finish - -/* case FFI_TYPE_UINT16 */ - lhz r3, 112+6(r1) - mtlr r0 -L..finish: - addi r1, r1, 240 - blr - -/* case FFI_TYPE_SINT16 */ - lha r3, 112+6(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_UINT32 */ - lwz r3, 112+4(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_SINT32 */ - lwa r3, 112+4(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_UINT64 */ - ld r3, 112+0(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_SINT64 */ - ld r3, 112+0(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_STRUCT */ - mtlr r0 - addi r1, r1, 240 - blr - nop - -/* case FFI_TYPE_POINTER */ - ld r3, 112+0(r1) - mtlr r0 - addi r1, r1, 240 - blr - -#else /* ! __64BIT__ */ - - .long .ffi_closure_ASM, TOC[tc0], 0 - .csect .text[PR] -.ffi_closure_ASM: -/* we want to build up an area for the parameters passed */ -/* in registers (both floating point and integer) */ - - /* we store gpr 3 to gpr 10 (aligned to 4) - in the parents outgoing area */ - stw r3, 24+(0*4)(r1) - stw r4, 24+(1*4)(r1) - stw r5, 24+(2*4)(r1) - stw r6, 24+(3*4)(r1) - mflr r0 - - stw r7, 24+(4*4)(r1) - stw r8, 24+(5*4)(r1) - stw r9, 24+(6*4)(r1) - stw r10, 24+(7*4)(r1) - stw r0, 8(r1) - - /* 24 Bytes (Linkage Area) */ - /* 32 Bytes (params) */ - /* 16 Bytes (result) */ - /* 104 Bytes (13*8 from FPR) */ - /* 176 Bytes */ - - stwu r1, -176(r1) /* skip over caller save area - keep stack aligned to 16 */ - - /* next save fpr 1 to fpr 13 (aligned to 8) */ - stfd f1, 72+(0*8)(r1) - stfd f2, 72+(1*8)(r1) - stfd f3, 72+(2*8)(r1) - stfd f4, 72+(3*8)(r1) - stfd f5, 72+(4*8)(r1) - stfd f6, 72+(5*8)(r1) - stfd f7, 72+(6*8)(r1) - stfd f8, 72+(7*8)(r1) - stfd f9, 72+(8*8)(r1) - stfd f10, 72+(9*8)(r1) - stfd f11, 72+(10*8)(r1) - stfd f12, 72+(11*8)(r1) - stfd f13, 72+(12*8)(r1) - - /* set up registers for the routine that actually does the work */ - /* get the context pointer from the trampoline */ - mr r3, r11 - - /* now load up the pointer to the result storage */ - addi r4, r1, 56 - - /* now load up the pointer to the saved gpr registers */ - addi r5, r1, 200 - - /* now load up the pointer to the saved fpr registers */ - addi r6, r1, 72 - - /* make the call */ - bl .ffi_closure_helper_DARWIN - nop - - /* now r3 contains the return type */ - /* so use it to look up in a table */ - /* so we know how to deal with each type */ - - /* look up the proper starting point in table */ - /* by using return type as offset */ - lhz r3, 6(r3) /* load type from return type */ - lwz r4, LC..60(2) /* get address of jump table */ - slwi r3, r3, 4 /* now multiply return type by 16 */ - lwz r0, 176+8(r1) /* load return address */ - add r3, r3, r4 /* add contents of table to table address */ - mtctr r3 - bctr /* jump to it */ - -/* Each fragment must be exactly 16 bytes long (4 instructions). - Align to 16 byte boundary for cache and dispatch efficiency. */ - .align 4 - -L..60: -/* case FFI_TYPE_VOID */ - mtlr r0 - addi r1, r1, 176 - blr - nop - -/* case FFI_TYPE_INT */ - lwz r3, 56+0(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_FLOAT */ - lfs f1, 56+0(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_DOUBLE */ - lfd f1, 56+0(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_LONGDOUBLE */ - lfd f1, 56+0(r1) - mtlr r0 - lfd f2, 56+8(r1) - b L..finish - -/* case FFI_TYPE_UINT8 */ - lbz r3, 56+3(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_SINT8 */ - lbz r3, 56+3(r1) - mtlr r0 - extsb r3, r3 - b L..finish - -/* case FFI_TYPE_UINT16 */ - lhz r3, 56+2(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_SINT16 */ - lha r3, 56+2(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_UINT32 */ - lwz r3, 56+0(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_SINT32 */ - lwz r3, 56+0(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_UINT64 */ - lwz r3, 56+0(r1) - mtlr r0 - lwz r4, 56+4(r1) - b L..finish - -/* case FFI_TYPE_SINT64 */ - lwz r3, 56+0(r1) - mtlr r0 - lwz r4, 56+4(r1) - b L..finish - -/* case FFI_TYPE_STRUCT */ - mtlr r0 - addi r1, r1, 176 - blr - nop - -/* case FFI_TYPE_POINTER */ - lwz r3, 56+0(r1) - mtlr r0 -L..finish: - addi r1, r1, 176 - blr -#endif -/* END(ffi_closure_ASM) */ diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/asm.h b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/asm.h deleted file mode 100644 index 994f62d07..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/asm.h +++ /dev/null @@ -1,125 +0,0 @@ -/* ----------------------------------------------------------------------- - asm.h - Copyright (c) 1998 Geoffrey Keating - - PowerPC Assembly glue. - - 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 AUTHOR 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. - ----------------------------------------------------------------------- */ - -#define ASM_GLOBAL_DIRECTIVE .globl - - -#define C_SYMBOL_NAME(name) name -/* Macro for a label. */ -#ifdef __STDC__ -#define C_LABEL(name) name##: -#else -#define C_LABEL(name) name/**/: -#endif - -/* This seems to always be the case on PPC. */ -#define ALIGNARG(log2) log2 -/* For ELF we need the `.type' directive to make shared libs work right. */ -#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg; -#define ASM_SIZE_DIRECTIVE(name) .size name,.-name - -/* If compiled for profiling, call `_mcount' at the start of each function. */ -#ifdef PROF -/* The mcount code relies on the return address being on the stack - to locate our caller and so it can restore it; so store one just - for its benefit. */ -#ifdef PIC -#define CALL_MCOUNT \ - .pushsection; \ - .section ".data"; \ - .align ALIGNARG(2); \ -0:.long 0; \ - .previous; \ - mflr %r0; \ - stw %r0,4(%r1); \ - bl _GLOBAL_OFFSET_TABLE_@local-4; \ - mflr %r11; \ - lwz %r0,0b@got(%r11); \ - bl JUMPTARGET(_mcount); -#else /* PIC */ -#define CALL_MCOUNT \ - .section ".data"; \ - .align ALIGNARG(2); \ -0:.long 0; \ - .previous; \ - mflr %r0; \ - lis %r11,0b@ha; \ - stw %r0,4(%r1); \ - addi %r0,%r11,0b@l; \ - bl JUMPTARGET(_mcount); -#endif /* PIC */ -#else /* PROF */ -#define CALL_MCOUNT /* Do nothing. */ -#endif /* PROF */ - -#define ENTRY(name) \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \ - ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ - .align ALIGNARG(2); \ - C_LABEL(name) \ - CALL_MCOUNT - -#define EALIGN_W_0 /* No words to insert. */ -#define EALIGN_W_1 nop -#define EALIGN_W_2 nop;nop -#define EALIGN_W_3 nop;nop;nop -#define EALIGN_W_4 EALIGN_W_3;nop -#define EALIGN_W_5 EALIGN_W_4;nop -#define EALIGN_W_6 EALIGN_W_5;nop -#define EALIGN_W_7 EALIGN_W_6;nop - -/* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes - past a 2^align boundary. */ -#ifdef PROF -#define EALIGN(name, alignt, words) \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \ - ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ - .align ALIGNARG(2); \ - C_LABEL(name) \ - CALL_MCOUNT \ - b 0f; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - 0: -#else /* PROF */ -#define EALIGN(name, alignt, words) \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \ - ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(name) -#endif - -#define END(name) \ - ASM_SIZE_DIRECTIVE(name) - -#ifdef PIC -#define JUMPTARGET(name) name##@plt -#else -#define JUMPTARGET(name) name -#endif - -/* Local labels stripped out by the linker. */ -#define L(x) .L##x diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/darwin.S b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/darwin.S deleted file mode 100644 index 066eb82ef..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/darwin.S +++ /dev/null @@ -1,378 +0,0 @@ -/* ----------------------------------------------------------------------- - darwin.S - Copyright (c) 2000 John Hornkvist - Copyright (c) 2004, 2010 Free Software Foundation, Inc. - - PowerPC Assembly glue. - - 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 AUTHOR 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#if defined(__ppc64__) -#define MODE_CHOICE(x, y) y -#else -#define MODE_CHOICE(x, y) x -#endif - -#define machine_choice MODE_CHOICE(ppc7400,ppc64) - -; Define some pseudo-opcodes for size-independent load & store of GPRs ... -#define lgu MODE_CHOICE(lwzu, ldu) -#define lg MODE_CHOICE(lwz,ld) -#define sg MODE_CHOICE(stw,std) -#define sgu MODE_CHOICE(stwu,stdu) -#define sgux MODE_CHOICE(stwux,stdux) - -; ... and the size of GPRs and their storage indicator. -#define GPR_BYTES MODE_CHOICE(4,8) -#define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */ -#define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */ - -; From the ABI doc: "Mac OS X ABI Function Call Guide" Version 2009-02-04. -#define LINKAGE_SIZE MODE_CHOICE(24,48) -#define PARAM_AREA MODE_CHOICE(32,64) -#define SAVED_LR_OFFSET MODE_CHOICE(8,16) /* save position for lr */ - -/* If there is any FP stuff we make space for all of the regs. */ -#define SAVED_FPR_COUNT 13 -#define FPR_SIZE 8 -#define RESULT_BYTES 16 - -/* This should be kept in step with the same value in ffi_darwin.c. */ -#define ASM_NEEDS_REGISTERS 4 -#define SAVE_REGS_SIZE (ASM_NEEDS_REGISTERS * GPR_BYTES) - -#include -#include - -#define JUMPTARGET(name) name -#define L(x) x - - .text - .align 2 - .globl _ffi_prep_args - - .align 2 - .globl _ffi_call_DARWIN - - /* We arrive here with: - r3 = ptr to extended cif. - r4 = -bytes. - r5 = cif flags. - r6 = ptr to return value. - r7 = fn pointer (user func). - r8 = fn pointer (ffi_prep_args). - r9 = ffi_type* for the ret val. */ - -_ffi_call_DARWIN: -Lstartcode: - mr r12,r8 /* We only need r12 until the call, - so it does not have to be saved. */ -LFB1: - /* Save the old stack pointer as AP. */ - mr r8,r1 -LCFI0: - - /* Save the retval type in parents frame. */ - sg r9,(LINKAGE_SIZE+6*GPR_BYTES)(r8) - - /* Allocate the stack space we need. */ - sgux r1,r1,r4 - - /* Save registers we use. */ - mflr r9 - sg r9,SAVED_LR_OFFSET(r8) - - sg r28,-(4 * GPR_BYTES)(r8) - sg r29,-(3 * GPR_BYTES)(r8) - sg r30,-(2 * GPR_BYTES)(r8) - sg r31,-( GPR_BYTES)(r8) - -#if !defined(POWERPC_DARWIN) - /* The TOC slot is reserved in the Darwin ABI and r2 is volatile. */ - sg r2,(5 * GPR_BYTES)(r1) -#endif - -LCFI1: - - /* Save arguments over call. */ - mr r31,r5 /* flags, */ - mr r30,r6 /* rvalue, */ - mr r29,r7 /* function address, */ - mr r28,r8 /* our AP. */ -LCFI2: - /* Call ffi_prep_args. r3 = extended cif, r4 = stack ptr copy. */ - mr r4,r1 - li r9,0 - - mtctr r12 /* r12 holds address of _ffi_prep_args. */ - bctrl - -#if !defined(POWERPC_DARWIN) - /* The TOC slot is reserved in the Darwin ABI and r2 is volatile. */ - lg r2,(5 * GPR_BYTES)(r1) -#endif - /* Now do the call. - Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40,r31 - /* Get the address to call into CTR. */ - mtctr r29 - /* Load all those argument registers. - We have set up a nice stack frame, just load it into registers. */ - lg r3, (LINKAGE_SIZE )(r1) - lg r4, (LINKAGE_SIZE + GPR_BYTES)(r1) - lg r5, (LINKAGE_SIZE + 2 * GPR_BYTES)(r1) - lg r6, (LINKAGE_SIZE + 3 * GPR_BYTES)(r1) - nop - lg r7, (LINKAGE_SIZE + 4 * GPR_BYTES)(r1) - lg r8, (LINKAGE_SIZE + 5 * GPR_BYTES)(r1) - lg r9, (LINKAGE_SIZE + 6 * GPR_BYTES)(r1) - lg r10,(LINKAGE_SIZE + 7 * GPR_BYTES)(r1) - -L1: - /* ... Load all the FP registers. */ - bf 6,L2 /* No floats to load. */ - lfd f1, -SAVE_REGS_SIZE-(13*FPR_SIZE)(r28) - lfd f2, -SAVE_REGS_SIZE-(12*FPR_SIZE)(r28) - lfd f3, -SAVE_REGS_SIZE-(11*FPR_SIZE)(r28) - lfd f4, -SAVE_REGS_SIZE-(10*FPR_SIZE)(r28) - nop - lfd f5, -SAVE_REGS_SIZE-( 9*FPR_SIZE)(r28) - lfd f6, -SAVE_REGS_SIZE-( 8*FPR_SIZE)(r28) - lfd f7, -SAVE_REGS_SIZE-( 7*FPR_SIZE)(r28) - lfd f8, -SAVE_REGS_SIZE-( 6*FPR_SIZE)(r28) - nop - lfd f9, -SAVE_REGS_SIZE-( 5*FPR_SIZE)(r28) - lfd f10,-SAVE_REGS_SIZE-( 4*FPR_SIZE)(r28) - lfd f11,-SAVE_REGS_SIZE-( 3*FPR_SIZE)(r28) - lfd f12,-SAVE_REGS_SIZE-( 2*FPR_SIZE)(r28) - nop - lfd f13,-SAVE_REGS_SIZE-( 1*FPR_SIZE)(r28) - -L2: - mr r12,r29 /* Put the target address in r12 as specified. */ - mtctr r12 - nop - nop - - /* Make the call. */ - bctrl - - /* Now, deal with the return value. */ - - /* m64 structure returns can occupy the same set of registers as - would be used to pass such a structure as arg0 - so take care - not to step on any possibly hot regs. */ - - /* Get the flags.. */ - mtcrf 0x03,r31 ; we need c6 & cr7 now. - ; FLAG_RETURNS_NOTHING also covers struct ret-by-ref. - bt 30,L(done_return_value) ; FLAG_RETURNS_NOTHING - bf 27,L(scalar_return_value) ; not FLAG_RETURNS_STRUCT - - /* OK, so we have a struct. */ -#if defined(__ppc64__) - bt 31,L(maybe_return_128) ; FLAG_RETURNS_128BITS, special case - - /* OK, we have to map the return back to a mem struct. - We are about to trample the parents param area, so recover the - return type. r29 is free, since the call is done. */ - lg r29,(LINKAGE_SIZE + 6 * GPR_BYTES)(r28) - - sg r3, (LINKAGE_SIZE )(r28) - sg r4, (LINKAGE_SIZE + GPR_BYTES)(r28) - sg r5, (LINKAGE_SIZE + 2 * GPR_BYTES)(r28) - sg r6, (LINKAGE_SIZE + 3 * GPR_BYTES)(r28) - nop - sg r7, (LINKAGE_SIZE + 4 * GPR_BYTES)(r28) - sg r8, (LINKAGE_SIZE + 5 * GPR_BYTES)(r28) - sg r9, (LINKAGE_SIZE + 6 * GPR_BYTES)(r28) - sg r10,(LINKAGE_SIZE + 7 * GPR_BYTES)(r28) - /* OK, so do the block move - we trust that memcpy will not trample - the fprs... */ - mr r3,r30 ; dest - addi r4,r28,LINKAGE_SIZE ; source - /* The size is a size_t, should be long. */ - lg r5,0(r29) - /* Figure out small structs */ - cmpi 0,r5,4 - bgt L3 ; 1, 2 and 4 bytes have special rules. - cmpi 0,r5,3 - beq L3 ; not 3 - addi r4,r4,8 - subf r4,r5,r4 -L3: - bl _memcpy - - /* ... do we need the FP registers? - recover the flags.. */ - mtcrf 0x03,r31 ; we need c6 & cr7 now. - bf 29,L(done_return_value) /* No floats in the struct. */ - stfd f1, -SAVE_REGS_SIZE-(13*FPR_SIZE)(r28) - stfd f2, -SAVE_REGS_SIZE-(12*FPR_SIZE)(r28) - stfd f3, -SAVE_REGS_SIZE-(11*FPR_SIZE)(r28) - stfd f4, -SAVE_REGS_SIZE-(10*FPR_SIZE)(r28) - nop - stfd f5, -SAVE_REGS_SIZE-( 9*FPR_SIZE)(r28) - stfd f6, -SAVE_REGS_SIZE-( 8*FPR_SIZE)(r28) - stfd f7, -SAVE_REGS_SIZE-( 7*FPR_SIZE)(r28) - stfd f8, -SAVE_REGS_SIZE-( 6*FPR_SIZE)(r28) - nop - stfd f9, -SAVE_REGS_SIZE-( 5*FPR_SIZE)(r28) - stfd f10,-SAVE_REGS_SIZE-( 4*FPR_SIZE)(r28) - stfd f11,-SAVE_REGS_SIZE-( 3*FPR_SIZE)(r28) - stfd f12,-SAVE_REGS_SIZE-( 2*FPR_SIZE)(r28) - nop - stfd f13,-SAVE_REGS_SIZE-( 1*FPR_SIZE)(r28) - - mr r3,r29 ; ffi_type * - mr r4,r30 ; dest - addi r5,r28,-SAVE_REGS_SIZE-(13*FPR_SIZE) ; fprs - xor r6,r6,r6 - sg r6,(LINKAGE_SIZE + 7 * GPR_BYTES)(r28) - addi r6,r28,(LINKAGE_SIZE + 7 * GPR_BYTES) ; point to a zeroed counter. - bl _darwin64_struct_floats_to_mem - - b L(done_return_value) -#else - stw r3,0(r30) ; m32 the only struct return in reg is 4 bytes. -#endif - b L(done_return_value) - -L(fp_return_value): - /* Do we have long double to store? */ - bf 31,L(fd_return_value) ; FLAG_RETURNS_128BITS - stfd f1,0(r30) - stfd f2,FPR_SIZE(r30) - b L(done_return_value) - -L(fd_return_value): - /* Do we have double to store? */ - bf 28,L(float_return_value) - stfd f1,0(r30) - b L(done_return_value) - -L(float_return_value): - /* We only have a float to store. */ - stfs f1,0(r30) - b L(done_return_value) - -L(scalar_return_value): - bt 29,L(fp_return_value) ; FLAG_RETURNS_FP - ; ffi_arg is defined as unsigned long. - sg r3,0(r30) ; Save the reg. - bf 28,L(done_return_value) ; not FLAG_RETURNS_64BITS - -#if defined(__ppc64__) -L(maybe_return_128): - std r3,0(r30) - bf 31,L(done_return_value) ; not FLAG_RETURNS_128BITS - std r4,8(r30) -#else - stw r4,4(r30) -#endif - - /* Fall through. */ - /* We want this at the end to simplify eh epilog computation. */ - -L(done_return_value): - /* Restore the registers we used and return. */ - lg r29,SAVED_LR_OFFSET(r28) - ; epilog - lg r31,-(1 * GPR_BYTES)(r28) - mtlr r29 - lg r30,-(2 * GPR_BYTES)(r28) - lg r29,-(3 * GPR_BYTES)(r28) - lg r28,-(4 * GPR_BYTES)(r28) - lg r1,0(r1) - blr -LFE1: - .align 1 -/* END(_ffi_call_DARWIN) */ - -/* Provide a null definition of _ffi_call_AIX. */ - .text - .globl _ffi_call_AIX - .align 2 -_ffi_call_AIX: - blr -/* END(_ffi_call_AIX) */ - -/* EH stuff. */ - -#define EH_DATA_ALIGN_FACT MODE_CHOICE(0x7c,0x78) - - .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -EH_frame1: - .set L$set$0,LECIE1-LSCIE1 - .long L$set$0 ; Length of Common Information Entry -LSCIE1: - .long 0x0 ; CIE Identifier Tag - .byte 0x1 ; CIE Version - .ascii "zR\0" ; CIE Augmentation - .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor - .byte EH_DATA_ALIGN_FACT ; sleb128 -4; CIE Data Alignment Factor - .byte 0x41 ; CIE RA Column - .byte 0x1 ; uleb128 0x1; Augmentation size - .byte 0x10 ; FDE Encoding (pcrel) - .byte 0xc ; DW_CFA_def_cfa - .byte 0x1 ; uleb128 0x1 - .byte 0x0 ; uleb128 0x0 - .align LOG2_GPR_BYTES -LECIE1: - - .globl _ffi_call_DARWIN.eh -_ffi_call_DARWIN.eh: -LSFDE1: - .set L$set$1,LEFDE1-LASFDE1 - .long L$set$1 ; FDE Length -LASFDE1: - .long LASFDE1-EH_frame1 ; FDE CIE offset - .g_long Lstartcode-. ; FDE initial location - .set L$set$3,LFE1-Lstartcode - .g_long L$set$3 ; FDE address range - .byte 0x0 ; uleb128 0x0; Augmentation size - .byte 0x4 ; DW_CFA_advance_loc4 - .set L$set$4,LCFI0-Lstartcode - .long L$set$4 - .byte 0xd ; DW_CFA_def_cfa_register - .byte 0x08 ; uleb128 0x08 - .byte 0x4 ; DW_CFA_advance_loc4 - .set L$set$5,LCFI1-LCFI0 - .long L$set$5 - .byte 0x11 ; DW_CFA_offset_extended_sf - .byte 0x41 ; uleb128 0x41 - .byte 0x7e ; sleb128 -2 - .byte 0x9f ; DW_CFA_offset, column 0x1f - .byte 0x1 ; uleb128 0x1 - .byte 0x9e ; DW_CFA_offset, column 0x1e - .byte 0x2 ; uleb128 0x2 - .byte 0x9d ; DW_CFA_offset, column 0x1d - .byte 0x3 ; uleb128 0x3 - .byte 0x9c ; DW_CFA_offset, column 0x1c - .byte 0x4 ; uleb128 0x4 - .byte 0x4 ; DW_CFA_advance_loc4 - .set L$set$6,LCFI2-LCFI1 - .long L$set$6 - .byte 0xd ; DW_CFA_def_cfa_register - .byte 0x1c ; uleb128 0x1c - .align LOG2_GPR_BYTES -LEFDE1: - .align 1 - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/darwin_closure.S b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/darwin_closure.S deleted file mode 100644 index c7734d419..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/darwin_closure.S +++ /dev/null @@ -1,571 +0,0 @@ -/* ----------------------------------------------------------------------- - darwin_closure.S - Copyright (c) 2002, 2003, 2004, 2010, - Free Software Foundation, Inc. - based on ppc_closure.S - - PowerPC Assembly glue. - - 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 AUTHOR 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#define L(x) x - -#if defined(__ppc64__) -#define MODE_CHOICE(x, y) y -#else -#define MODE_CHOICE(x, y) x -#endif - -#define machine_choice MODE_CHOICE(ppc7400,ppc64) - -; Define some pseudo-opcodes for size-independent load & store of GPRs ... -#define lgu MODE_CHOICE(lwzu, ldu) -#define lg MODE_CHOICE(lwz,ld) -#define sg MODE_CHOICE(stw,std) -#define sgu MODE_CHOICE(stwu,stdu) - -; ... and the size of GPRs and their storage indicator. -#define GPR_BYTES MODE_CHOICE(4,8) -#define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */ -#define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */ - -; From the ABI doc: "Mac OS X ABI Function Call Guide" Version 2009-02-04. -#define LINKAGE_SIZE MODE_CHOICE(24,48) -#define PARAM_AREA MODE_CHOICE(32,64) - -#define SAVED_CR_OFFSET MODE_CHOICE(4,8) /* save position for CR */ -#define SAVED_LR_OFFSET MODE_CHOICE(8,16) /* save position for lr */ - -/* WARNING: if ffi_type is changed... here be monsters. - Offsets of items within the result type. */ -#define FFI_TYPE_TYPE MODE_CHOICE(6,10) -#define FFI_TYPE_ELEM MODE_CHOICE(8,16) - -#define SAVED_FPR_COUNT 13 -#define FPR_SIZE 8 -/* biggest m64 struct ret is 8GPRS + 13FPRS = 168 bytes - rounded to 16bytes = 176. */ -#define RESULT_BYTES MODE_CHOICE(16,176) - -; The whole stack frame **MUST** be 16byte-aligned. -#define SAVE_SIZE (((LINKAGE_SIZE+PARAM_AREA+SAVED_FPR_COUNT*FPR_SIZE+RESULT_BYTES)+15) & -16LL) -#define PAD_SIZE (SAVE_SIZE-(LINKAGE_SIZE+PARAM_AREA+SAVED_FPR_COUNT*FPR_SIZE+RESULT_BYTES)) - -#define PARENT_PARM_BASE (SAVE_SIZE+LINKAGE_SIZE) -#define FP_SAVE_BASE (LINKAGE_SIZE+PARAM_AREA) - -#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 -; We no longer need the pic symbol stub for Darwin >= 9. -#define BLCLS_HELP _ffi_closure_helper_DARWIN -#define STRUCT_RETVALUE_P _darwin64_struct_ret_by_value_p -#define PASS_STR_FLOATS _darwin64_pass_struct_floats -#undef WANT_STUB -#else -#define BLCLS_HELP L_ffi_closure_helper_DARWIN$stub -#define STRUCT_RETVALUE_P L_darwin64_struct_ret_by_value_p$stub -#define PASS_STR_FLOATS L_darwin64_pass_struct_floats$stub -#define WANT_STUB -#endif - -/* m32/m64 - - The stack layout looks like this: - - | Additional params... | | Higher address - ~ ~ ~ - | Parameters (at least 8*4/8=32/64) | | NUM_GPR_ARG_REGISTERS - |--------------------------------------------| | - | TOC=R2 (AIX) Reserved (Darwin) 4/8 | | - |--------------------------------------------| | - | Reserved 2*4/8 | | - |--------------------------------------------| | - | Space for callee`s LR 4/8 | | - |--------------------------------------------| | - | Saved CR [low word for m64] 4/8 | | - |--------------------------------------------| | - | Current backchain pointer 4/8 |-/ Parent`s frame. - |--------------------------------------------| <+ <<< on entry to - | Result Bytes 16/176 | | - |--------------------------------------------| | - ~ padding to 16-byte alignment ~ ~ - |--------------------------------------------| | - | NUM_FPR_ARG_REGISTERS slots | | - | here fp13 .. fp1 13*8 | | - |--------------------------------------------| | - | R3..R10 8*4/8=32/64 | | NUM_GPR_ARG_REGISTERS - |--------------------------------------------| | - | TOC=R2 (AIX) Reserved (Darwin) 4/8 | | - |--------------------------------------------| | stack | - | Reserved [compiler,binder] 2*4/8 | | grows | - |--------------------------------------------| | down V - | Space for callees LR 4/8 | | - |--------------------------------------------| | lower addresses - | Saved CR [low word for m64] 4/8 | | - |--------------------------------------------| | stack pointer here - | Current backchain pointer 4/8 |-/ during - |--------------------------------------------| <<< call. - -*/ - - .file "darwin_closure.S" - - .machine machine_choice - - .text - .globl _ffi_closure_ASM - .align LOG2_GPR_BYTES -_ffi_closure_ASM: -LFB1: -Lstartcode: - mflr r0 /* extract return address */ - sg r0,SAVED_LR_OFFSET(r1) /* save the return address */ -LCFI0: - sgu r1,-SAVE_SIZE(r1) /* skip over caller save area - keep stack aligned to 16. */ -LCFI1: - /* We want to build up an area for the parameters passed - in registers. (both floating point and integer) */ - - /* Put gpr 3 to gpr 10 in the parents outgoing area... - ... the remainder of any params that overflowed the regs will - follow here. */ - sg r3, (PARENT_PARM_BASE )(r1) - sg r4, (PARENT_PARM_BASE + GPR_BYTES )(r1) - sg r5, (PARENT_PARM_BASE + GPR_BYTES * 2)(r1) - sg r6, (PARENT_PARM_BASE + GPR_BYTES * 3)(r1) - sg r7, (PARENT_PARM_BASE + GPR_BYTES * 4)(r1) - sg r8, (PARENT_PARM_BASE + GPR_BYTES * 5)(r1) - sg r9, (PARENT_PARM_BASE + GPR_BYTES * 6)(r1) - sg r10,(PARENT_PARM_BASE + GPR_BYTES * 7)(r1) - - /* We save fpr 1 to fpr 14 in our own save frame. */ - stfd f1, (FP_SAVE_BASE )(r1) - stfd f2, (FP_SAVE_BASE + FPR_SIZE )(r1) - stfd f3, (FP_SAVE_BASE + FPR_SIZE * 2 )(r1) - stfd f4, (FP_SAVE_BASE + FPR_SIZE * 3 )(r1) - stfd f5, (FP_SAVE_BASE + FPR_SIZE * 4 )(r1) - stfd f6, (FP_SAVE_BASE + FPR_SIZE * 5 )(r1) - stfd f7, (FP_SAVE_BASE + FPR_SIZE * 6 )(r1) - stfd f8, (FP_SAVE_BASE + FPR_SIZE * 7 )(r1) - stfd f9, (FP_SAVE_BASE + FPR_SIZE * 8 )(r1) - stfd f10,(FP_SAVE_BASE + FPR_SIZE * 9 )(r1) - stfd f11,(FP_SAVE_BASE + FPR_SIZE * 10)(r1) - stfd f12,(FP_SAVE_BASE + FPR_SIZE * 11)(r1) - stfd f13,(FP_SAVE_BASE + FPR_SIZE * 12)(r1) - - /* Set up registers for the routine that actually does the work - get the context pointer from the trampoline. */ - mr r3,r11 - - /* Now load up the pointer to the result storage. */ - addi r4,r1,(SAVE_SIZE-RESULT_BYTES) - - /* Now load up the pointer to the saved gpr registers. */ - addi r5,r1,PARENT_PARM_BASE - - /* Now load up the pointer to the saved fpr registers. */ - addi r6,r1,FP_SAVE_BASE - - /* Make the call. */ - bl BLCLS_HELP - - /* r3 contains the rtype pointer... save it since we will need - it later. */ - sg r3,LINKAGE_SIZE(r1) ; ffi_type * result_type - lg r0,0(r3) ; size => r0 - lhz r3,FFI_TYPE_TYPE(r3) ; type => r3 - - /* The helper will have intercepted structure returns and inserted - the caller`s destination address for structs returned by ref. */ - - /* r3 contains the return type so use it to look up in a table - so we know how to deal with each type. */ - - addi r5,r1,(SAVE_SIZE-RESULT_BYTES) /* Otherwise, our return is here. */ - bl Lget_ret_type0_addr /* Get pointer to Lret_type0 into LR. */ - mflr r4 /* Move to r4. */ - slwi r3,r3,4 /* Now multiply return type by 16. */ - add r3,r3,r4 /* Add contents of table to table address. */ - mtctr r3 - bctr /* Jump to it. */ -LFE1: -/* Each of the ret_typeX code fragments has to be exactly 16 bytes long - (4 instructions). For cache effectiveness we align to a 16 byte boundary - first. */ - - .align 4 - - nop - nop - nop -Lget_ret_type0_addr: - blrl - -/* case FFI_TYPE_VOID */ -Lret_type0: - b Lfinish - nop - nop - nop - -/* case FFI_TYPE_INT */ -Lret_type1: - lg r3,0(r5) - b Lfinish - nop - nop - -/* case FFI_TYPE_FLOAT */ -Lret_type2: - lfs f1,0(r5) - b Lfinish - nop - nop - -/* case FFI_TYPE_DOUBLE */ -Lret_type3: - lfd f1,0(r5) - b Lfinish - nop - nop - -/* case FFI_TYPE_LONGDOUBLE */ -Lret_type4: - lfd f1,0(r5) - lfd f2,8(r5) - b Lfinish - nop - -/* case FFI_TYPE_UINT8 */ -Lret_type5: -#if defined(__ppc64__) - lbz r3,7(r5) -#else - lbz r3,3(r5) -#endif - b Lfinish - nop - nop - -/* case FFI_TYPE_SINT8 */ -Lret_type6: -#if defined(__ppc64__) - lbz r3,7(r5) -#else - lbz r3,3(r5) -#endif - extsb r3,r3 - b Lfinish - nop - -/* case FFI_TYPE_UINT16 */ -Lret_type7: -#if defined(__ppc64__) - lhz r3,6(r5) -#else - lhz r3,2(r5) -#endif - b Lfinish - nop - nop - -/* case FFI_TYPE_SINT16 */ -Lret_type8: -#if defined(__ppc64__) - lha r3,6(r5) -#else - lha r3,2(r5) -#endif - b Lfinish - nop - nop - -/* case FFI_TYPE_UINT32 */ -Lret_type9: -#if defined(__ppc64__) - lwz r3,4(r5) -#else - lwz r3,0(r5) -#endif - b Lfinish - nop - nop - -/* case FFI_TYPE_SINT32 */ -Lret_type10: -#if defined(__ppc64__) - lwz r3,4(r5) -#else - lwz r3,0(r5) -#endif - b Lfinish - nop - nop - -/* case FFI_TYPE_UINT64 */ -Lret_type11: -#if defined(__ppc64__) - lg r3,0(r5) - b Lfinish - nop -#else - lwz r3,0(r5) - lwz r4,4(r5) - b Lfinish -#endif - nop - -/* case FFI_TYPE_SINT64 */ -Lret_type12: -#if defined(__ppc64__) - lg r3,0(r5) - b Lfinish - nop -#else - lwz r3,0(r5) - lwz r4,4(r5) - b Lfinish -#endif - nop - -/* case FFI_TYPE_STRUCT */ -Lret_type13: -#if defined(__ppc64__) - lg r3,0(r5) ; we need at least this... - cmpi 0,r0,4 - bgt Lstructend ; not a special small case - b Lsmallstruct ; see if we need more. -#else - cmpi 0,r0,4 - bgt Lfinish ; not by value - lg r3,0(r5) - b Lfinish -#endif -/* case FFI_TYPE_POINTER */ -Lret_type14: - lg r3,0(r5) - b Lfinish - nop - nop - -#if defined(__ppc64__) -Lsmallstruct: - beq Lfour ; continuation of Lret13. - cmpi 0,r0,3 - beq Lfinish ; don`t adjust this - can`t be any floats here... - srdi r3,r3,48 - cmpi 0,r0,2 - beq Lfinish ; .. or here .. - srdi r3,r3,8 - b Lfinish ; .. or here. - -Lfour: - lg r6,LINKAGE_SIZE(r1) ; get the result type - lg r6,FFI_TYPE_ELEM(r6) ; elements array pointer - lg r6,0(r6) ; first element - lhz r0,FFI_TYPE_TYPE(r6) ; OK go the type - cmpi 0,r0,2 ; FFI_TYPE_FLOAT - bne Lfourint - lfs f1,0(r5) ; just one float in the struct. - b Lfinish - -Lfourint: - srdi r3,r3,32 ; four bytes. - b Lfinish - -Lstructend: - lg r3,LINKAGE_SIZE(r1) ; get the result type - bl STRUCT_RETVALUE_P - cmpi 0,r3,0 - beq Lfinish ; nope. - /* Recover a pointer to the results. */ - addi r11,r1,(SAVE_SIZE-RESULT_BYTES) - lg r3,0(r11) ; we need at least this... - lg r4,8(r11) - cmpi 0,r0,16 - beq Lfinish ; special case 16 bytes we don't consider floats. - - /* OK, frustratingly, the process of saving the struct to mem might have - messed with the FPRs, so we have to re-load them :(. - We`ll use our FPRs space again - calling: - void darwin64_pass_struct_floats (ffi_type *s, char *src, - unsigned *nfpr, double **fprs) - We`ll temporarily pinch the first two slots of the param area for local - vars used by the routine. */ - xor r6,r6,r6 - addi r5,r1,PARENT_PARM_BASE ; some space - sg r6,0(r5) ; *nfpr zeroed. - addi r6,r5,8 ; **fprs - addi r3,r1,FP_SAVE_BASE ; pointer to FPRs space - sg r3,0(r6) - mr r4,r11 ; the struct is here... - lg r3,LINKAGE_SIZE(r1) ; ffi_type * result_type. - bl PASS_STR_FLOATS ; get struct floats into FPR save space. - /* See if we used any floats */ - lwz r0,(SAVE_SIZE-RESULT_BYTES)(r1) - cmpi 0,r0,0 - beq Lstructints ; nope. - /* OK load `em up... */ - lfd f1, (FP_SAVE_BASE )(r1) - lfd f2, (FP_SAVE_BASE + FPR_SIZE )(r1) - lfd f3, (FP_SAVE_BASE + FPR_SIZE * 2 )(r1) - lfd f4, (FP_SAVE_BASE + FPR_SIZE * 3 )(r1) - lfd f5, (FP_SAVE_BASE + FPR_SIZE * 4 )(r1) - lfd f6, (FP_SAVE_BASE + FPR_SIZE * 5 )(r1) - lfd f7, (FP_SAVE_BASE + FPR_SIZE * 6 )(r1) - lfd f8, (FP_SAVE_BASE + FPR_SIZE * 7 )(r1) - lfd f9, (FP_SAVE_BASE + FPR_SIZE * 8 )(r1) - lfd f10,(FP_SAVE_BASE + FPR_SIZE * 9 )(r1) - lfd f11,(FP_SAVE_BASE + FPR_SIZE * 10)(r1) - lfd f12,(FP_SAVE_BASE + FPR_SIZE * 11)(r1) - lfd f13,(FP_SAVE_BASE + FPR_SIZE * 12)(r1) - - /* point back at our saved struct. */ -Lstructints: - addi r11,r1,(SAVE_SIZE-RESULT_BYTES) - lg r3,0(r11) ; we end up picking the - lg r4,8(r11) ; first two again. - lg r5,16(r11) - lg r6,24(r11) - lg r7,32(r11) - lg r8,40(r11) - lg r9,48(r11) - lg r10,56(r11) -#endif - -/* case done */ -Lfinish: - addi r1,r1,SAVE_SIZE /* Restore stack pointer. */ - lg r0,SAVED_LR_OFFSET(r1) /* Get return address. */ - mtlr r0 /* Reset link register. */ - blr -Lendcode: - .align 1 - -/* END(ffi_closure_ASM) */ - -/* EH frame stuff. */ -#define EH_DATA_ALIGN_FACT MODE_CHOICE(0x7c,0x78) -/* 176, 400 */ -#define EH_FRAME_OFFSETA MODE_CHOICE(176,0x90) -#define EH_FRAME_OFFSETB MODE_CHOICE(1,3) - - .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -EH_frame1: - .set L$set$0,LECIE1-LSCIE1 - .long L$set$0 ; Length of Common Information Entry -LSCIE1: - .long 0x0 ; CIE Identifier Tag - .byte 0x1 ; CIE Version - .ascii "zR\0" ; CIE Augmentation - .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor - .byte EH_DATA_ALIGN_FACT ; sleb128 -4; CIE Data Alignment Factor - .byte 0x41 ; CIE RA Column - .byte 0x1 ; uleb128 0x1; Augmentation size - .byte 0x10 ; FDE Encoding (pcrel) - .byte 0xc ; DW_CFA_def_cfa - .byte 0x1 ; uleb128 0x1 - .byte 0x0 ; uleb128 0x0 - .align LOG2_GPR_BYTES -LECIE1: - .globl _ffi_closure_ASM.eh -_ffi_closure_ASM.eh: -LSFDE1: - .set L$set$1,LEFDE1-LASFDE1 - .long L$set$1 ; FDE Length - -LASFDE1: - .long LASFDE1-EH_frame1 ; FDE CIE offset - .g_long Lstartcode-. ; FDE initial location - .set L$set$3,LFE1-Lstartcode - .g_long L$set$3 ; FDE address range - .byte 0x0 ; uleb128 0x0; Augmentation size - .byte 0x4 ; DW_CFA_advance_loc4 - .set L$set$3,LCFI1-LCFI0 - .long L$set$3 - .byte 0xe ; DW_CFA_def_cfa_offset - .byte EH_FRAME_OFFSETA,EH_FRAME_OFFSETB ; uleb128 176,1/190,3 - .byte 0x4 ; DW_CFA_advance_loc4 - .set L$set$4,LCFI0-Lstartcode - .long L$set$4 - .byte 0x11 ; DW_CFA_offset_extended_sf - .byte 0x41 ; uleb128 0x41 - .byte 0x7e ; sleb128 -2 - .align LOG2_GPR_BYTES -LEFDE1: - .align 1 - -#ifdef WANT_STUB - .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 - .align 5 -L_ffi_closure_helper_DARWIN$stub: - .indirect_symbol _ffi_closure_helper_DARWIN - mflr r0 - bcl 20,31,"L1$spb" -"L1$spb": - mflr r11 - addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr-"L1$spb") - mtlr r0 - lwzu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr-"L1$spb")(r11) - mtctr r12 - bctr - .lazy_symbol_pointer -L_ffi_closure_helper_DARWIN$lazy_ptr: - .indirect_symbol _ffi_closure_helper_DARWIN - .g_long dyld_stub_binding_helper - -#if defined(__ppc64__) - .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 - .align 5 -L_darwin64_struct_ret_by_value_p$stub: - .indirect_symbol _darwin64_struct_ret_by_value_p - mflr r0 - bcl 20,31,"L2$spb" -"L2$spb": - mflr r11 - addis r11,r11,ha16(L_darwin64_struct_ret_by_value_p$lazy_ptr-"L2$spb") - mtlr r0 - lwzu r12,lo16(L_darwin64_struct_ret_by_value_p$lazy_ptr-"L2$spb")(r11) - mtctr r12 - bctr - .lazy_symbol_pointer -L_darwin64_struct_ret_by_value_p$lazy_ptr: - .indirect_symbol _darwin64_struct_ret_by_value_p - .g_long dyld_stub_binding_helper - - .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 - .align 5 -L_darwin64_pass_struct_floats$stub: - .indirect_symbol _darwin64_pass_struct_floats - mflr r0 - bcl 20,31,"L3$spb" -"L3$spb": - mflr r11 - addis r11,r11,ha16(L_darwin64_pass_struct_floats$lazy_ptr-"L3$spb") - mtlr r0 - lwzu r12,lo16(L_darwin64_pass_struct_floats$lazy_ptr-"L3$spb")(r11) - mtctr r12 - bctr - .lazy_symbol_pointer -L_darwin64_pass_struct_floats$lazy_ptr: - .indirect_symbol _darwin64_pass_struct_floats - .g_long dyld_stub_binding_helper -# endif -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi.c deleted file mode 100644 index efb441bbf..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi.c +++ /dev/null @@ -1,141 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (C) 2013 IBM - Copyright (C) 2011 Anthony Green - Copyright (C) 2011 Kyle Moffett - Copyright (C) 2008 Red Hat, Inc - Copyright (C) 2007, 2008 Free Software Foundation, Inc - Copyright (c) 1998 Geoffrey Keating - - PowerPC Foreign Function Interface - - 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 AUTHOR 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 "ffi.h" -#include "ffi_common.h" -#include "ffi_powerpc.h" - -#if HAVE_LONG_DOUBLE_VARIANT -/* Adjust ffi_type_longdouble. */ -void FFI_HIDDEN -ffi_prep_types (ffi_abi abi) -{ -# if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -# ifdef POWERPC64 - ffi_prep_types_linux64 (abi); -# else - ffi_prep_types_sysv (abi); -# endif -# endif -} -#endif - -/* Perform machine dependent cif processing */ -ffi_status FFI_HIDDEN -ffi_prep_cif_machdep (ffi_cif *cif) -{ -#ifdef POWERPC64 - return ffi_prep_cif_linux64 (cif); -#else - return ffi_prep_cif_sysv (cif); -#endif -} - -ffi_status FFI_HIDDEN -ffi_prep_cif_machdep_var (ffi_cif *cif, - unsigned int nfixedargs MAYBE_UNUSED, - unsigned int ntotalargs MAYBE_UNUSED) -{ -#ifdef POWERPC64 - return ffi_prep_cif_linux64_var (cif, nfixedargs, ntotalargs); -#else - return ffi_prep_cif_sysv (cif); -#endif -} - -void -ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - /* The final SYSV ABI says that structures smaller or equal 8 bytes - are returned in r3/r4. A draft ABI used by linux instead returns - them in memory. - - We bounce-buffer SYSV small struct return values so that sysv.S - can write r3 and r4 to memory without worrying about struct size. - - For ELFv2 ABI, use a bounce buffer for homogeneous structs too, - for similar reasons. */ - unsigned long smst_buffer[8]; - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - ecif.rvalue = rvalue; - if ((cif->flags & FLAG_RETURNS_SMST) != 0) - ecif.rvalue = smst_buffer; - /* Ensure that we have a valid struct return value. - FIXME: Isn't this just papering over a user problem? */ - else if (!rvalue && cif->rtype->type == FFI_TYPE_STRUCT) - ecif.rvalue = alloca (cif->rtype->size); - -#ifdef POWERPC64 - ffi_call_LINUX64 (&ecif, -(long) cif->bytes, cif->flags, ecif.rvalue, fn); -#else - ffi_call_SYSV (&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn); -#endif - - /* Check for a bounce-buffered return value */ - if (rvalue && ecif.rvalue == smst_buffer) - { - unsigned int rsize = cif->rtype->size; -#ifndef __LITTLE_ENDIAN__ - /* The SYSV ABI returns a structure of up to 4 bytes in size - left-padded in r3. */ -# ifndef POWERPC64 - if (rsize <= 4) - memcpy (rvalue, (char *) smst_buffer + 4 - rsize, rsize); - else -# endif - /* The SYSV ABI returns a structure of up to 8 bytes in size - left-padded in r3/r4, and the ELFv2 ABI similarly returns a - structure of up to 8 bytes in size left-padded in r3. */ - if (rsize <= 8) - memcpy (rvalue, (char *) smst_buffer + 8 - rsize, rsize); - else -#endif - memcpy (rvalue, smst_buffer, rsize); - } -} - - -ffi_status -ffi_prep_closure_loc (ffi_closure *closure, - ffi_cif *cif, - void (*fun) (ffi_cif *, void *, void **, void *), - void *user_data, - void *codeloc) -{ -#ifdef POWERPC64 - return ffi_prep_closure_loc_linux64 (closure, cif, fun, user_data, codeloc); -#else - return ffi_prep_closure_loc_sysv (closure, cif, fun, user_data, codeloc); -#endif -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_darwin.c b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_darwin.c deleted file mode 100644 index cf6fb6d4b..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_darwin.c +++ /dev/null @@ -1,1359 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi_darwin.c - - Copyright (C) 1998 Geoffrey Keating - Copyright (C) 2001 John Hornkvist - Copyright (C) 2002, 2006, 2007, 2009, 2010 Free Software Foundation, Inc. - - FFI support for Darwin and AIX. - - 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 AUTHOR 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 -#include - -#include - -extern void ffi_closure_ASM (void); - -enum { - /* The assembly depends on these exact flags. - For Darwin64 (when FLAG_RETURNS_STRUCT is set): - FLAG_RETURNS_FP indicates that the structure embeds FP data. - FLAG_RETURNS_128BITS signals a special struct size that is not - expanded for float content. */ - FLAG_RETURNS_128BITS = 1 << (31-31), /* These go in cr7 */ - FLAG_RETURNS_NOTHING = 1 << (31-30), - FLAG_RETURNS_FP = 1 << (31-29), - FLAG_RETURNS_64BITS = 1 << (31-28), - - FLAG_RETURNS_STRUCT = 1 << (31-27), /* This goes in cr6 */ - - FLAG_ARG_NEEDS_COPY = 1 << (31- 7), - FLAG_FP_ARGUMENTS = 1 << (31- 6), /* cr1.eq; specified by ABI */ - FLAG_4_GPR_ARGUMENTS = 1 << (31- 5), - FLAG_RETVAL_REFERENCE = 1 << (31- 4) -}; - -/* About the DARWIN ABI. */ -enum { - NUM_GPR_ARG_REGISTERS = 8, - NUM_FPR_ARG_REGISTERS = 13, - LINKAGE_AREA_GPRS = 6 -}; - -enum { ASM_NEEDS_REGISTERS = 4 }; /* r28-r31 */ - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments. - - m32/m64 - - The stack layout we want looks like this: - - | Return address from ffi_call_DARWIN | higher addresses - |--------------------------------------------| - | Previous backchain pointer 4/8 | stack pointer here - |--------------------------------------------|<+ <<< on entry to - | ASM_NEEDS_REGISTERS=r28-r31 4*(4/8) | | ffi_call_DARWIN - |--------------------------------------------| | - | When we have any FP activity... the | | - | FPRs occupy NUM_FPR_ARG_REGISTERS slots | | - | here fp13 .. fp1 from high to low addr. | | - ~ ~ ~ - | Parameters (at least 8*4/8=32/64) | | NUM_GPR_ARG_REGISTERS - |--------------------------------------------| | - | TOC=R2 (AIX) Reserved (Darwin) 4/8 | | - |--------------------------------------------| | stack | - | Reserved 2*4/8 | | grows | - |--------------------------------------------| | down V - | Space for callee's LR 4/8 | | - |--------------------------------------------| | lower addresses - | Saved CR [low word for m64] 4/8 | | - |--------------------------------------------| | stack pointer here - | Current backchain pointer 4/8 |-/ during - |--------------------------------------------| <<< ffi_call_DARWIN - - */ - -#if defined(POWERPC_DARWIN64) -static void -darwin64_pass_struct_by_value - (ffi_type *, char *, unsigned, unsigned *, double **, unsigned long **); -#endif - -/* This depends on GPR_SIZE = sizeof (unsigned long) */ - -void -ffi_prep_args (extended_cif *ecif, unsigned long *const stack) -{ - const unsigned bytes = ecif->cif->bytes; - const unsigned flags = ecif->cif->flags; - const unsigned nargs = ecif->cif->nargs; -#if !defined(POWERPC_DARWIN64) - const ffi_abi abi = ecif->cif->abi; -#endif - - /* 'stacktop' points at the previous backchain pointer. */ - unsigned long *const stacktop = stack + (bytes / sizeof(unsigned long)); - - /* 'fpr_base' points at the space for fpr1, and grows upwards as - we use FPR registers. */ - double *fpr_base = (double *) (stacktop - ASM_NEEDS_REGISTERS) - NUM_FPR_ARG_REGISTERS; - int gp_count = 0, fparg_count = 0; - - /* 'next_arg' grows up as we put parameters in it. */ - unsigned long *next_arg = stack + LINKAGE_AREA_GPRS; /* 6 reserved positions. */ - - int i; - double double_tmp; - void **p_argv = ecif->avalue; - unsigned long gprvalue; - ffi_type** ptr = ecif->cif->arg_types; -#if !defined(POWERPC_DARWIN64) - char *dest_cpy; -#endif - unsigned size_al = 0; - - /* Check that everything starts aligned properly. */ - FFI_ASSERT(((unsigned) (char *) stack & 0xF) == 0); - FFI_ASSERT(((unsigned) (char *) stacktop & 0xF) == 0); - FFI_ASSERT((bytes & 0xF) == 0); - - /* Deal with return values that are actually pass-by-reference. - Rule: - Return values are referenced by r3, so r4 is the first parameter. */ - - if (flags & FLAG_RETVAL_REFERENCE) - *next_arg++ = (unsigned long) (char *) ecif->rvalue; - - /* Now for the arguments. */ - for (i = nargs; i > 0; i--, ptr++, p_argv++) - { - switch ((*ptr)->type) - { - /* If a floating-point parameter appears before all of the general- - purpose registers are filled, the corresponding GPRs that match - the size of the floating-point parameter are skipped. */ - case FFI_TYPE_FLOAT: - double_tmp = *(float *) *p_argv; - if (fparg_count < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = double_tmp; -#if defined(POWERPC_DARWIN) - *(float *)next_arg = *(float *) *p_argv; -#else - *(double *)next_arg = double_tmp; -#endif - next_arg++; - gp_count++; - fparg_count++; - FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); - break; - - case FFI_TYPE_DOUBLE: - double_tmp = *(double *) *p_argv; - if (fparg_count < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = double_tmp; - *(double *)next_arg = double_tmp; -#ifdef POWERPC64 - next_arg++; - gp_count++; -#else - next_arg += 2; - gp_count += 2; -#endif - fparg_count++; - FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - - case FFI_TYPE_LONGDOUBLE: -# if defined(POWERPC64) && !defined(POWERPC_DARWIN64) - /* ??? This will exceed the regs count when the value starts at fp13 - and it will not put the extra bit on the stack. */ - if (fparg_count < NUM_FPR_ARG_REGISTERS) - *(long double *) fpr_base++ = *(long double *) *p_argv; - else - *(long double *) next_arg = *(long double *) *p_argv; - next_arg += 2; - fparg_count += 2; -# else - double_tmp = ((double *) *p_argv)[0]; - if (fparg_count < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = double_tmp; - *(double *) next_arg = double_tmp; -# if defined(POWERPC_DARWIN64) - next_arg++; - gp_count++; -# else - next_arg += 2; - gp_count += 2; -# endif - fparg_count++; - double_tmp = ((double *) *p_argv)[1]; - if (fparg_count < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = double_tmp; - *(double *) next_arg = double_tmp; -# if defined(POWERPC_DARWIN64) - next_arg++; - gp_count++; -# else - next_arg += 2; - gp_count += 2; -# endif - fparg_count++; -# endif - FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); - break; -#endif - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -#ifdef POWERPC64 - gprvalue = *(long long *) *p_argv; - goto putgpr; -#else - *(long long *) next_arg = *(long long *) *p_argv; - next_arg += 2; - gp_count += 2; -#endif - break; - case FFI_TYPE_POINTER: - gprvalue = *(unsigned long *) *p_argv; - goto putgpr; - case FFI_TYPE_UINT8: - gprvalue = *(unsigned char *) *p_argv; - goto putgpr; - case FFI_TYPE_SINT8: - gprvalue = *(signed char *) *p_argv; - goto putgpr; - case FFI_TYPE_UINT16: - gprvalue = *(unsigned short *) *p_argv; - goto putgpr; - case FFI_TYPE_SINT16: - gprvalue = *(signed short *) *p_argv; - goto putgpr; - - case FFI_TYPE_STRUCT: - size_al = (*ptr)->size; -#if defined(POWERPC_DARWIN64) - next_arg = (unsigned long *)ALIGN((char *)next_arg, (*ptr)->alignment); - darwin64_pass_struct_by_value (*ptr, (char *) *p_argv, - (unsigned) size_al, - (unsigned int *) &fparg_count, - &fpr_base, &next_arg); -#else - dest_cpy = (char *) next_arg; - - /* If the first member of the struct is a double, then include enough - padding in the struct size to align it to double-word. */ - if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) - size_al = ALIGN((*ptr)->size, 8); - -# if defined(POWERPC64) - FFI_ASSERT (abi != FFI_DARWIN); - memcpy ((char *) dest_cpy, (char *) *p_argv, size_al); - next_arg += (size_al + 7) / 8; -# else - /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, - SI 4 bytes) are aligned as if they were those modes. - Structures with 3 byte in size are padded upwards. */ - if (size_al < 3 && abi == FFI_DARWIN) - dest_cpy += 4 - size_al; - - memcpy((char *) dest_cpy, (char *) *p_argv, size_al); - next_arg += (size_al + 3) / 4; -# endif -#endif - break; - - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - gprvalue = *(signed int *) *p_argv; - goto putgpr; - - case FFI_TYPE_UINT32: - gprvalue = *(unsigned int *) *p_argv; - putgpr: - *next_arg++ = gprvalue; - gp_count++; - break; - default: - break; - } - } - - /* Check that we didn't overrun the stack... */ - /* FFI_ASSERT(gpr_base <= stacktop - ASM_NEEDS_REGISTERS); - FFI_ASSERT((unsigned *)fpr_base - <= stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS); - FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4); */ -} - -#if defined(POWERPC_DARWIN64) - -/* See if we can put some of the struct into fprs. - This should not be called for structures of size 16 bytes, since these are not - broken out this way. */ -static void -darwin64_scan_struct_for_floats (ffi_type *s, unsigned *nfpr) -{ - int i; - - FFI_ASSERT (s->type == FFI_TYPE_STRUCT) - - for (i = 0; s->elements[i] != NULL; i++) - { - ffi_type *p = s->elements[i]; - switch (p->type) - { - case FFI_TYPE_STRUCT: - darwin64_scan_struct_for_floats (p, nfpr); - break; - case FFI_TYPE_LONGDOUBLE: - (*nfpr) += 2; - break; - case FFI_TYPE_DOUBLE: - case FFI_TYPE_FLOAT: - (*nfpr) += 1; - break; - default: - break; - } - } -} - -static int -darwin64_struct_size_exceeds_gprs_p (ffi_type *s, char *src, unsigned *nfpr) -{ - unsigned struct_offset=0, i; - - for (i = 0; s->elements[i] != NULL; i++) - { - char *item_base; - ffi_type *p = s->elements[i]; - /* Find the start of this item (0 for the first one). */ - if (i > 0) - struct_offset = ALIGN(struct_offset, p->alignment); - - item_base = src + struct_offset; - - switch (p->type) - { - case FFI_TYPE_STRUCT: - if (darwin64_struct_size_exceeds_gprs_p (p, item_base, nfpr)) - return 1; - break; - case FFI_TYPE_LONGDOUBLE: - if (*nfpr >= NUM_FPR_ARG_REGISTERS) - return 1; - (*nfpr) += 1; - item_base += 8; - /* FALL THROUGH */ - case FFI_TYPE_DOUBLE: - if (*nfpr >= NUM_FPR_ARG_REGISTERS) - return 1; - (*nfpr) += 1; - break; - case FFI_TYPE_FLOAT: - if (*nfpr >= NUM_FPR_ARG_REGISTERS) - return 1; - (*nfpr) += 1; - break; - default: - /* If we try and place any item, that is non-float, once we've - exceeded the 8 GPR mark, then we can't fit the struct. */ - if ((unsigned long)item_base >= 8*8) - return 1; - break; - } - /* now count the size of what we just used. */ - struct_offset += p->size; - } - return 0; -} - -/* Can this struct be returned by value? */ -int -darwin64_struct_ret_by_value_p (ffi_type *s) -{ - unsigned nfp = 0; - - FFI_ASSERT (s && s->type == FFI_TYPE_STRUCT); - - /* The largest structure we can return is 8long + 13 doubles. */ - if (s->size > 168) - return 0; - - /* We can't pass more than 13 floats. */ - darwin64_scan_struct_for_floats (s, &nfp); - if (nfp > 13) - return 0; - - /* If there are not too many floats, and the struct is - small enough to accommodate in the GPRs, then it must be OK. */ - if (s->size <= 64) - return 1; - - /* Well, we have to look harder. */ - nfp = 0; - if (darwin64_struct_size_exceeds_gprs_p (s, NULL, &nfp)) - return 0; - - return 1; -} - -void -darwin64_pass_struct_floats (ffi_type *s, char *src, - unsigned *nfpr, double **fprs) -{ - int i; - double *fpr_base = *fprs; - unsigned struct_offset = 0; - - /* We don't assume anything about the alignment of the source. */ - for (i = 0; s->elements[i] != NULL; i++) - { - char *item_base; - ffi_type *p = s->elements[i]; - /* Find the start of this item (0 for the first one). */ - if (i > 0) - struct_offset = ALIGN(struct_offset, p->alignment); - item_base = src + struct_offset; - - switch (p->type) - { - case FFI_TYPE_STRUCT: - darwin64_pass_struct_floats (p, item_base, nfpr, - &fpr_base); - break; - case FFI_TYPE_LONGDOUBLE: - if (*nfpr < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = *(double *)item_base; - (*nfpr) += 1; - item_base += 8; - /* FALL THROUGH */ - case FFI_TYPE_DOUBLE: - if (*nfpr < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = *(double *)item_base; - (*nfpr) += 1; - break; - case FFI_TYPE_FLOAT: - if (*nfpr < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = (double) *(float *)item_base; - (*nfpr) += 1; - break; - default: - break; - } - /* now count the size of what we just used. */ - struct_offset += p->size; - } - /* Update the scores. */ - *fprs = fpr_base; -} - -/* Darwin64 special rules. - Break out a struct into params and float registers. */ -static void -darwin64_pass_struct_by_value (ffi_type *s, char *src, unsigned size, - unsigned *nfpr, double **fprs, unsigned long **arg) -{ - unsigned long *next_arg = *arg; - char *dest_cpy = (char *)next_arg; - - FFI_ASSERT (s->type == FFI_TYPE_STRUCT) - - if (!size) - return; - - /* First... special cases. */ - if (size < 3 - || (size == 4 - && s->elements[0] - && s->elements[0]->type != FFI_TYPE_FLOAT)) - { - /* Must be at least one GPR, padding is unspecified in value, - let's make it zero. */ - *next_arg = 0UL; - dest_cpy += 8 - size; - memcpy ((char *) dest_cpy, src, size); - next_arg++; - } - else if (size == 16) - { - memcpy ((char *) dest_cpy, src, size); - next_arg += 2; - } - else - { - /* now the general case, we consider embedded floats. */ - memcpy ((char *) dest_cpy, src, size); - darwin64_pass_struct_floats (s, src, nfpr, fprs); - next_arg += (size+7)/8; - } - - *arg = next_arg; -} - -double * -darwin64_struct_floats_to_mem (ffi_type *s, char *dest, double *fprs, unsigned *nf) -{ - int i; - unsigned struct_offset = 0; - - /* We don't assume anything about the alignment of the source. */ - for (i = 0; s->elements[i] != NULL; i++) - { - char *item_base; - ffi_type *p = s->elements[i]; - /* Find the start of this item (0 for the first one). */ - if (i > 0) - struct_offset = ALIGN(struct_offset, p->alignment); - item_base = dest + struct_offset; - - switch (p->type) - { - case FFI_TYPE_STRUCT: - fprs = darwin64_struct_floats_to_mem (p, item_base, fprs, nf); - break; - case FFI_TYPE_LONGDOUBLE: - if (*nf < NUM_FPR_ARG_REGISTERS) - { - *(double *)item_base = *fprs++ ; - (*nf) += 1; - } - item_base += 8; - /* FALL THROUGH */ - case FFI_TYPE_DOUBLE: - if (*nf < NUM_FPR_ARG_REGISTERS) - { - *(double *)item_base = *fprs++ ; - (*nf) += 1; - } - break; - case FFI_TYPE_FLOAT: - if (*nf < NUM_FPR_ARG_REGISTERS) - { - *(float *)item_base = (float) *fprs++ ; - (*nf) += 1; - } - break; - default: - break; - } - /* now count the size of what we just used. */ - struct_offset += p->size; - } - return fprs; -} - -#endif - -/* Adjust the size of S to be correct for Darwin. - On Darwin m32, the first field of a structure has natural alignment. - On Darwin m64, all fields have natural alignment. */ - -static void -darwin_adjust_aggregate_sizes (ffi_type *s) -{ - int i; - - if (s->type != FFI_TYPE_STRUCT) - return; - - s->size = 0; - for (i = 0; s->elements[i] != NULL; i++) - { - ffi_type *p; - int align; - - p = s->elements[i]; - if (p->type == FFI_TYPE_STRUCT) - darwin_adjust_aggregate_sizes (p); -#if defined(POWERPC_DARWIN64) - /* Natural alignment for all items. */ - align = p->alignment; -#else - /* Natural alignment for the first item... */ - if (i == 0) - align = p->alignment; - else if (p->alignment == 16 || p->alignment < 4) - /* .. subsequent items with vector or align < 4 have natural align. */ - align = p->alignment; - else - /* .. or align is 4. */ - align = 4; -#endif - /* Pad, if necessary, before adding the current item. */ - s->size = ALIGN(s->size, align) + p->size; - } - - s->size = ALIGN(s->size, s->alignment); - - /* This should not be necessary on m64, but harmless. */ - if (s->elements[0]->type == FFI_TYPE_UINT64 - || s->elements[0]->type == FFI_TYPE_SINT64 - || s->elements[0]->type == FFI_TYPE_DOUBLE - || s->elements[0]->alignment == 8) - s->alignment = s->alignment > 8 ? s->alignment : 8; - /* Do not add additional tail padding. */ -} - -/* Adjust the size of S to be correct for AIX. - Word-align double unless it is the first member of a structure. */ - -static void -aix_adjust_aggregate_sizes (ffi_type *s) -{ - int i; - - if (s->type != FFI_TYPE_STRUCT) - return; - - s->size = 0; - for (i = 0; s->elements[i] != NULL; i++) - { - ffi_type *p; - int align; - - p = s->elements[i]; - aix_adjust_aggregate_sizes (p); - align = p->alignment; - if (i != 0 && p->type == FFI_TYPE_DOUBLE) - align = 4; - s->size = ALIGN(s->size, align) + p->size; - } - - s->size = ALIGN(s->size, s->alignment); - - if (s->elements[0]->type == FFI_TYPE_UINT64 - || s->elements[0]->type == FFI_TYPE_SINT64 - || s->elements[0]->type == FFI_TYPE_DOUBLE - || s->elements[0]->alignment == 8) - s->alignment = s->alignment > 8 ? s->alignment : 8; - /* Do not add additional tail padding. */ -} - -/* Perform machine dependent cif processing. */ -ffi_status -ffi_prep_cif_machdep (ffi_cif *cif) -{ - /* All this is for the DARWIN ABI. */ - unsigned i; - ffi_type **ptr; - unsigned bytes; - unsigned fparg_count = 0, intarg_count = 0; - unsigned flags = 0; - unsigned size_al = 0; - - /* All the machine-independent calculation of cif->bytes will be wrong. - All the calculation of structure sizes will also be wrong. - Redo the calculation for DARWIN. */ - - if (cif->abi == FFI_DARWIN) - { - darwin_adjust_aggregate_sizes (cif->rtype); - for (i = 0; i < cif->nargs; i++) - darwin_adjust_aggregate_sizes (cif->arg_types[i]); - } - - if (cif->abi == FFI_AIX) - { - aix_adjust_aggregate_sizes (cif->rtype); - for (i = 0; i < cif->nargs; i++) - aix_adjust_aggregate_sizes (cif->arg_types[i]); - } - - /* Space for the frame pointer, callee's LR, CR, etc, and for - the asm's temp regs. */ - - bytes = (LINKAGE_AREA_GPRS + ASM_NEEDS_REGISTERS) * sizeof(unsigned long); - - /* Return value handling. - The rules m32 are as follows: - - 32-bit (or less) integer values are returned in gpr3; - - structures of size <= 4 bytes also returned in gpr3; - - 64-bit integer values [??? and structures between 5 and 8 bytes] are - returned in gpr3 and gpr4; - - Single/double FP values are returned in fpr1; - - Long double FP (if not equivalent to double) values are returned in - fpr1 and fpr2; - m64: - - 64-bit or smaller integral values are returned in GPR3 - - Single/double FP values are returned in fpr1; - - Long double FP values are returned in fpr1 and fpr2; - m64 Structures: - - If the structure could be accommodated in registers were it to be the - first argument to a routine, then it is returned in those registers. - m32/m64 structures otherwise: - - Larger structures values are allocated space and a pointer is passed - as the first argument. */ - switch (cif->rtype->type) - { - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - flags |= FLAG_RETURNS_128BITS; - flags |= FLAG_RETURNS_FP; - break; -#endif - - case FFI_TYPE_DOUBLE: - flags |= FLAG_RETURNS_64BITS; - /* Fall through. */ - case FFI_TYPE_FLOAT: - flags |= FLAG_RETURNS_FP; - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -#ifdef POWERPC64 - case FFI_TYPE_POINTER: -#endif - flags |= FLAG_RETURNS_64BITS; - break; - - case FFI_TYPE_STRUCT: -#if defined(POWERPC_DARWIN64) - { - /* Can we fit the struct into regs? */ - if (darwin64_struct_ret_by_value_p (cif->rtype)) - { - unsigned nfpr = 0; - flags |= FLAG_RETURNS_STRUCT; - if (cif->rtype->size != 16) - darwin64_scan_struct_for_floats (cif->rtype, &nfpr) ; - else - flags |= FLAG_RETURNS_128BITS; - /* Will be 0 for 16byte struct. */ - if (nfpr) - flags |= FLAG_RETURNS_FP; - } - else /* By ref. */ - { - flags |= FLAG_RETVAL_REFERENCE; - flags |= FLAG_RETURNS_NOTHING; - intarg_count++; - } - } -#elif defined(DARWIN_PPC) - if (cif->rtype->size <= 4) - flags |= FLAG_RETURNS_STRUCT; - else /* else by reference. */ - { - flags |= FLAG_RETVAL_REFERENCE; - flags |= FLAG_RETURNS_NOTHING; - intarg_count++; - } -#else /* assume we pass by ref. */ - flags |= FLAG_RETVAL_REFERENCE; - flags |= FLAG_RETURNS_NOTHING; - intarg_count++; -#endif - break; - case FFI_TYPE_VOID: - flags |= FLAG_RETURNS_NOTHING; - break; - - default: - /* Returns 32-bit integer, or similar. Nothing to do here. */ - break; - } - - /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the - first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest - goes on the stack. - ??? Structures are passed as a pointer to a copy of the structure. - Stuff on the stack needs to keep proper alignment. - For m64 the count is effectively of half-GPRs. */ - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - unsigned align_words; - switch ((*ptr)->type) - { - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - fparg_count++; -#if !defined(POWERPC_DARWIN64) - /* If this FP arg is going on the stack, it must be - 8-byte-aligned. */ - if (fparg_count > NUM_FPR_ARG_REGISTERS - && (intarg_count & 0x01) != 0) - intarg_count++; -#endif - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - fparg_count += 2; - /* If this FP arg is going on the stack, it must be - 16-byte-aligned. */ - if (fparg_count >= NUM_FPR_ARG_REGISTERS) -#if defined (POWERPC64) - intarg_count = ALIGN(intarg_count, 2); -#else - intarg_count = ALIGN(intarg_count, 4); -#endif - break; -#endif - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -#if defined(POWERPC64) - intarg_count++; -#else - /* 'long long' arguments are passed as two words, but - either both words must fit in registers or both go - on the stack. If they go on the stack, they must - be 8-byte-aligned. */ - if (intarg_count == NUM_GPR_ARG_REGISTERS-1 - || (intarg_count >= NUM_GPR_ARG_REGISTERS - && (intarg_count & 0x01) != 0)) - intarg_count++; - intarg_count += 2; -#endif - break; - - case FFI_TYPE_STRUCT: - size_al = (*ptr)->size; -#if defined(POWERPC_DARWIN64) - align_words = (*ptr)->alignment >> 3; - if (align_words) - intarg_count = ALIGN(intarg_count, align_words); - /* Base size of the struct. */ - intarg_count += (size_al + 7) / 8; - /* If 16 bytes then don't worry about floats. */ - if (size_al != 16) - /* Scan through for floats to be placed in regs. */ - darwin64_scan_struct_for_floats (*ptr, &fparg_count) ; -#else - align_words = (*ptr)->alignment >> 2; - if (align_words) - intarg_count = ALIGN(intarg_count, align_words); - /* If the first member of the struct is a double, then align - the struct to double-word. - if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) - size_al = ALIGN((*ptr)->size, 8); */ -# ifdef POWERPC64 - intarg_count += (size_al + 7) / 8; -# else - intarg_count += (size_al + 3) / 4; -# endif -#endif - break; - - default: - /* Everything else is passed as a 4-byte word in a GPR, either - the object itself or a pointer to it. */ - intarg_count++; - break; - } - } - - if (fparg_count != 0) - flags |= FLAG_FP_ARGUMENTS; - -#if defined(POWERPC_DARWIN64) - /* Space to image the FPR registers, if needed - which includes when they might be - used in a struct return. */ - if (fparg_count != 0 - || ((flags & FLAG_RETURNS_STRUCT) - && (flags & FLAG_RETURNS_FP))) - bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); -#else - /* Space for the FPR registers, if needed. */ - if (fparg_count != 0) - bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); -#endif - - /* Stack space. */ -#ifdef POWERPC64 - if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS) - bytes += (intarg_count + fparg_count) * sizeof(long); -#else - if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS) - bytes += (intarg_count + 2 * fparg_count) * sizeof(long); -#endif - else - bytes += NUM_GPR_ARG_REGISTERS * sizeof(long); - - /* The stack space allocated needs to be a multiple of 16 bytes. */ - bytes = ALIGN(bytes, 16) ; - - cif->flags = flags; - cif->bytes = bytes; - - return FFI_OK; -} - -extern void ffi_call_AIX(extended_cif *, long, unsigned, unsigned *, - void (*fn)(void), void (*fn2)(void)); - -extern void ffi_call_DARWIN(extended_cif *, long, unsigned, unsigned *, - void (*fn)(void), void (*fn2)(void), ffi_type*); - -void -ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return - value address then we need to make one. */ - - if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca (cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_AIX: - ffi_call_AIX(&ecif, -(long)cif->bytes, cif->flags, ecif.rvalue, fn, - FFI_FN(ffi_prep_args)); - break; - case FFI_DARWIN: - ffi_call_DARWIN(&ecif, -(long)cif->bytes, cif->flags, ecif.rvalue, fn, - FFI_FN(ffi_prep_args), cif->rtype); - break; - default: - FFI_ASSERT(0); - break; - } -} - -static void flush_icache(char *); -static void flush_range(char *, int); - -/* The layout of a function descriptor. A C function pointer really - points to one of these. */ - -typedef struct aix_fd_struct { - void *code_pointer; - void *toc; -} aix_fd; - -/* here I'd like to add the stack frame layout we use in darwin_closure.S - and aix_closure.S - - m32/m64 - - The stack layout looks like this: - - | Additional params... | | Higher address - ~ ~ ~ - | Parameters (at least 8*4/8=32/64) | | NUM_GPR_ARG_REGISTERS - |--------------------------------------------| | - | TOC=R2 (AIX) Reserved (Darwin) 4/8 | | - |--------------------------------------------| | - | Reserved 2*4/8 | | - |--------------------------------------------| | - | Space for callee's LR 4/8 | | - |--------------------------------------------| | - | Saved CR [low word for m64] 4/8 | | - |--------------------------------------------| | - | Current backchain pointer 4/8 |-/ Parent's frame. - |--------------------------------------------| <+ <<< on entry to ffi_closure_ASM - | Result Bytes 16 | | - |--------------------------------------------| | - ~ padding to 16-byte alignment ~ ~ - |--------------------------------------------| | - | NUM_FPR_ARG_REGISTERS slots | | - | here fp13 .. fp1 13*8 | | - |--------------------------------------------| | - | R3..R10 8*4/8=32/64 | | NUM_GPR_ARG_REGISTERS - |--------------------------------------------| | - | TOC=R2 (AIX) Reserved (Darwin) 4/8 | | - |--------------------------------------------| | stack | - | Reserved [compiler,binder] 2*4/8 | | grows | - |--------------------------------------------| | down V - | Space for callee's LR 4/8 | | - |--------------------------------------------| | lower addresses - | Saved CR [low word for m64] 4/8 | | - |--------------------------------------------| | stack pointer here - | Current backchain pointer 4/8 |-/ during - |--------------------------------------------| <<< ffi_closure_ASM. - -*/ - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp; - struct ffi_aix_trampoline_struct *tramp_aix; - aix_fd *fd; - - switch (cif->abi) - { - case FFI_DARWIN: - - FFI_ASSERT (cif->abi == FFI_DARWIN); - - tramp = (unsigned int *) &closure->tramp[0]; -#if defined(POWERPC_DARWIN64) - tramp[0] = 0x7c0802a6; /* mflr r0 */ - tramp[1] = 0x429f0015; /* bcl- 20,4*cr7+so, +0x18 (L1) */ - /* We put the addresses here. */ - tramp[6] = 0x7d6802a6; /*L1: mflr r11 */ - tramp[7] = 0xe98b0000; /* ld r12,0(r11) function address */ - tramp[8] = 0x7c0803a6; /* mtlr r0 */ - tramp[9] = 0x7d8903a6; /* mtctr r12 */ - tramp[10] = 0xe96b0008; /* lwz r11,8(r11) static chain */ - tramp[11] = 0x4e800420; /* bctr */ - - *((unsigned long *)&tramp[2]) = (unsigned long) ffi_closure_ASM; /* function */ - *((unsigned long *)&tramp[4]) = (unsigned long) codeloc; /* context */ -#else - tramp[0] = 0x7c0802a6; /* mflr r0 */ - tramp[1] = 0x429f000d; /* bcl- 20,4*cr7+so,0x10 */ - tramp[4] = 0x7d6802a6; /* mflr r11 */ - tramp[5] = 0x818b0000; /* lwz r12,0(r11) function address */ - tramp[6] = 0x7c0803a6; /* mtlr r0 */ - tramp[7] = 0x7d8903a6; /* mtctr r12 */ - tramp[8] = 0x816b0004; /* lwz r11,4(r11) static chain */ - tramp[9] = 0x4e800420; /* bctr */ - tramp[2] = (unsigned long) ffi_closure_ASM; /* function */ - tramp[3] = (unsigned long) codeloc; /* context */ -#endif - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - /* Flush the icache. Only necessary on Darwin. */ - flush_range(codeloc, FFI_TRAMPOLINE_SIZE); - - break; - - case FFI_AIX: - - tramp_aix = (struct ffi_aix_trampoline_struct *) (closure->tramp); - fd = (aix_fd *)(void *)ffi_closure_ASM; - - FFI_ASSERT (cif->abi == FFI_AIX); - - tramp_aix->code_pointer = fd->code_pointer; - tramp_aix->toc = fd->toc; - tramp_aix->static_chain = codeloc; - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - break; - - default: - return FFI_BAD_ABI; - break; - } - return FFI_OK; -} - -static void -flush_icache(char *addr) -{ -#ifndef _AIX - __asm__ volatile ( - "dcbf 0,%0\n" - "\tsync\n" - "\ticbi 0,%0\n" - "\tsync\n" - "\tisync" - : : "r"(addr) : "memory"); -#endif -} - -static void -flush_range(char * addr1, int size) -{ -#define MIN_LINE_SIZE 32 - int i; - for (i = 0; i < size; i += MIN_LINE_SIZE) - flush_icache(addr1+i); - flush_icache(addr1+size-1); -} - -typedef union -{ - float f; - double d; -} ffi_dblfl; - -ffi_type * -ffi_closure_helper_DARWIN (ffi_closure *, void *, - unsigned long *, ffi_dblfl *); - -/* Basically the trampoline invokes ffi_closure_ASM, and on - entry, r11 holds the address of the closure. - After storing the registers that could possibly contain - parameters to be passed into the stack frame and setting - up space for a return value, ffi_closure_ASM invokes the - following helper function to do most of the work. */ - -ffi_type * -ffi_closure_helper_DARWIN (ffi_closure *closure, void *rvalue, - unsigned long *pgr, ffi_dblfl *pfr) -{ - /* rvalue is the pointer to space for return value in closure assembly - pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM - pfr is the pointer to where f1-f13 are stored in ffi_closure_ASM. */ - - typedef double ldbits[2]; - - union ldu - { - ldbits lb; - long double ld; - }; - - void ** avalue; - ffi_type ** arg_types; - long i, avn; - ffi_cif * cif; - ffi_dblfl * end_pfr = pfr + NUM_FPR_ARG_REGISTERS; - unsigned size_al; -#if defined(POWERPC_DARWIN64) - unsigned fpsused = 0; -#endif - - cif = closure->cif; - avalue = alloca (cif->nargs * sizeof(void *)); - - if (cif->rtype->type == FFI_TYPE_STRUCT) - { -#if defined(POWERPC_DARWIN64) - if (!darwin64_struct_ret_by_value_p (cif->rtype)) - { - /* Won't fit into the regs - return by ref. */ - rvalue = (void *) *pgr; - pgr++; - } -#elif defined(DARWIN_PPC) - if (cif->rtype->size > 4) - { - rvalue = (void *) *pgr; - pgr++; - } -#else /* assume we return by ref. */ - rvalue = (void *) *pgr; - pgr++; -#endif - } - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - /* Grab the addresses of the arguments from the stack frame. */ - while (i < avn) - { - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: -#if defined(POWERPC64) - avalue[i] = (char *) pgr + 7; -#else - avalue[i] = (char *) pgr + 3; -#endif - pgr++; - break; - - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: -#if defined(POWERPC64) - avalue[i] = (char *) pgr + 6; -#else - avalue[i] = (char *) pgr + 2; -#endif - pgr++; - break; - - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: -#if defined(POWERPC64) - avalue[i] = (char *) pgr + 4; -#else - case FFI_TYPE_POINTER: - avalue[i] = pgr; -#endif - pgr++; - break; - - case FFI_TYPE_STRUCT: - size_al = arg_types[i]->size; -#if defined(POWERPC_DARWIN64) - pgr = (unsigned long *)ALIGN((char *)pgr, arg_types[i]->alignment); - if (size_al < 3 || size_al == 4) - { - avalue[i] = ((char *)pgr)+8-size_al; - if (arg_types[i]->elements[0]->type == FFI_TYPE_FLOAT - && fpsused < NUM_FPR_ARG_REGISTERS) - { - *(float *)pgr = (float) *(double *)pfr; - pfr++; - fpsused++; - } - } - else - { - if (size_al != 16) - pfr = (ffi_dblfl *) - darwin64_struct_floats_to_mem (arg_types[i], (char *)pgr, - (double *)pfr, &fpsused); - avalue[i] = pgr; - } - pgr += (size_al + 7) / 8; -#else - /* If the first member of the struct is a double, then align - the struct to double-word. */ - if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) - size_al = ALIGN(arg_types[i]->size, 8); -# if defined(POWERPC64) - FFI_ASSERT (cif->abi != FFI_DARWIN); - avalue[i] = pgr; - pgr += (size_al + 7) / 8; -# else - /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, - SI 4 bytes) are aligned as if they were those modes. */ - if (size_al < 3 && cif->abi == FFI_DARWIN) - avalue[i] = (char*) pgr + 4 - size_al; - else - avalue[i] = pgr; - pgr += (size_al + 3) / 4; -# endif -#endif - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: -#if defined(POWERPC64) - case FFI_TYPE_POINTER: - avalue[i] = pgr; - pgr++; - break; -#else - /* Long long ints are passed in two gpr's. */ - avalue[i] = pgr; - pgr += 2; - break; -#endif - - case FFI_TYPE_FLOAT: - /* A float value consumes a GPR. - There are 13 64bit floating point registers. */ - if (pfr < end_pfr) - { - double temp = pfr->d; - pfr->f = (float) temp; - avalue[i] = pfr; - pfr++; - } - else - { - avalue[i] = pgr; - } - pgr++; - break; - - case FFI_TYPE_DOUBLE: - /* A double value consumes two GPRs. - There are 13 64bit floating point registers. */ - if (pfr < end_pfr) - { - avalue[i] = pfr; - pfr++; - } - else - { - avalue[i] = pgr; - } -#ifdef POWERPC64 - pgr++; -#else - pgr += 2; -#endif - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - - case FFI_TYPE_LONGDOUBLE: -#ifdef POWERPC64 - if (pfr + 1 < end_pfr) - { - avalue[i] = pfr; - pfr += 2; - } - else - { - if (pfr < end_pfr) - { - *pgr = *(unsigned long *) pfr; - pfr++; - } - avalue[i] = pgr; - } - pgr += 2; -#else /* POWERPC64 */ - /* A long double value consumes four GPRs and two FPRs. - There are 13 64bit floating point registers. */ - if (pfr + 1 < end_pfr) - { - avalue[i] = pfr; - pfr += 2; - } - /* Here we have the situation where one part of the long double - is stored in fpr13 and the other part is already on the stack. - We use a union to pass the long double to avalue[i]. */ - else if (pfr + 1 == end_pfr) - { - union ldu temp_ld; - memcpy (&temp_ld.lb[0], pfr, sizeof(ldbits)); - memcpy (&temp_ld.lb[1], pgr + 2, sizeof(ldbits)); - avalue[i] = &temp_ld.ld; - pfr++; - } - else - { - avalue[i] = pgr; - } - pgr += 4; -#endif /* POWERPC64 */ - break; -#endif - default: - FFI_ASSERT(0); - } - i++; - } - - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_ASM to perform return type promotions. */ - return cif->rtype; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_linux64.c b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_linux64.c deleted file mode 100644 index b087af8c6..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_linux64.c +++ /dev/null @@ -1,943 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi_linux64.c - Copyright (C) 2013 IBM - Copyright (C) 2011 Anthony Green - Copyright (C) 2011 Kyle Moffett - Copyright (C) 2008 Red Hat, Inc - Copyright (C) 2007, 2008 Free Software Foundation, Inc - Copyright (c) 1998 Geoffrey Keating - - PowerPC Foreign Function Interface - - 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 AUTHOR 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 "ffi.h" - -#ifdef POWERPC64 -#include "ffi_common.h" -#include "ffi_powerpc.h" - - -/* About the LINUX64 ABI. */ -enum { - NUM_GPR_ARG_REGISTERS64 = 8, - NUM_FPR_ARG_REGISTERS64 = 13 -}; -enum { ASM_NEEDS_REGISTERS64 = 4 }; - - -#if HAVE_LONG_DOUBLE_VARIANT && FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -/* Adjust size of ffi_type_longdouble. */ -void FFI_HIDDEN -ffi_prep_types_linux64 (ffi_abi abi) -{ - if ((abi & (FFI_LINUX | FFI_LINUX_LONG_DOUBLE_128)) == FFI_LINUX) - { - ffi_type_longdouble.size = 8; - ffi_type_longdouble.alignment = 8; - } - else - { - ffi_type_longdouble.size = 16; - ffi_type_longdouble.alignment = 16; - } -} -#endif - - -#if _CALL_ELF == 2 -static unsigned int -discover_homogeneous_aggregate (const ffi_type *t, unsigned int *elnum) -{ - switch (t->type) - { - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - *elnum = 1; - return (int) t->type; - - case FFI_TYPE_STRUCT:; - { - unsigned int base_elt = 0, total_elnum = 0; - ffi_type **el = t->elements; - while (*el) - { - unsigned int el_elt, el_elnum = 0; - el_elt = discover_homogeneous_aggregate (*el, &el_elnum); - if (el_elt == 0 - || (base_elt && base_elt != el_elt)) - return 0; - base_elt = el_elt; - total_elnum += el_elnum; - if (total_elnum > 8) - return 0; - el++; - } - *elnum = total_elnum; - return base_elt; - } - - default: - return 0; - } -} -#endif - - -/* Perform machine dependent cif processing */ -static ffi_status -ffi_prep_cif_linux64_core (ffi_cif *cif) -{ - ffi_type **ptr; - unsigned bytes; - unsigned i, fparg_count = 0, intarg_count = 0; - unsigned flags = cif->flags; -#if _CALL_ELF == 2 - unsigned int elt, elnum; -#endif - -#if FFI_TYPE_LONGDOUBLE == FFI_TYPE_DOUBLE - /* If compiled without long double support.. */ - if ((cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0) - return FFI_BAD_ABI; -#endif - - /* The machine-independent calculation of cif->bytes doesn't work - for us. Redo the calculation. */ -#if _CALL_ELF == 2 - /* Space for backchain, CR, LR, TOC and the asm's temp regs. */ - bytes = (4 + ASM_NEEDS_REGISTERS64) * sizeof (long); - - /* Space for the general registers. */ - bytes += NUM_GPR_ARG_REGISTERS64 * sizeof (long); -#else - /* Space for backchain, CR, LR, cc/ld doubleword, TOC and the asm's temp - regs. */ - bytes = (6 + ASM_NEEDS_REGISTERS64) * sizeof (long); - - /* Space for the mandatory parm save area and general registers. */ - bytes += 2 * NUM_GPR_ARG_REGISTERS64 * sizeof (long); -#endif - - /* Return value handling. */ - switch (cif->rtype->type) - { -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - if ((cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0) - flags |= FLAG_RETURNS_128BITS; - /* Fall through. */ -#endif - case FFI_TYPE_DOUBLE: - flags |= FLAG_RETURNS_64BITS; - /* Fall through. */ - case FFI_TYPE_FLOAT: - flags |= FLAG_RETURNS_FP; - break; - - case FFI_TYPE_UINT128: - flags |= FLAG_RETURNS_128BITS; - /* Fall through. */ - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - flags |= FLAG_RETURNS_64BITS; - break; - - case FFI_TYPE_STRUCT: -#if _CALL_ELF == 2 - elt = discover_homogeneous_aggregate (cif->rtype, &elnum); - if (elt) - { - if (elt == FFI_TYPE_DOUBLE) - flags |= FLAG_RETURNS_64BITS; - flags |= FLAG_RETURNS_FP | FLAG_RETURNS_SMST; - break; - } - if (cif->rtype->size <= 16) - { - flags |= FLAG_RETURNS_SMST; - break; - } -#endif - intarg_count++; - flags |= FLAG_RETVAL_REFERENCE; - /* Fall through. */ - case FFI_TYPE_VOID: - flags |= FLAG_RETURNS_NOTHING; - break; - - default: - /* Returns 32-bit integer, or similar. Nothing to do here. */ - break; - } - - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - unsigned int align; - - switch ((*ptr)->type) - { -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - if ((cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0) - { - fparg_count++; - intarg_count++; - } - /* Fall through. */ -#endif - case FFI_TYPE_DOUBLE: - case FFI_TYPE_FLOAT: - fparg_count++; - intarg_count++; - if (fparg_count > NUM_FPR_ARG_REGISTERS64) - flags |= FLAG_ARG_NEEDS_PSAVE; - break; - - case FFI_TYPE_STRUCT: - if ((cif->abi & FFI_LINUX_STRUCT_ALIGN) != 0) - { - align = (*ptr)->alignment; - if (align > 16) - align = 16; - align = align / 8; - if (align > 1) - intarg_count = ALIGN (intarg_count, align); - } - intarg_count += ((*ptr)->size + 7) / 8; -#if _CALL_ELF == 2 - elt = discover_homogeneous_aggregate (*ptr, &elnum); - if (elt) - { - fparg_count += elnum; - if (fparg_count > NUM_FPR_ARG_REGISTERS64) - flags |= FLAG_ARG_NEEDS_PSAVE; - } - else -#endif - { - if (intarg_count > NUM_GPR_ARG_REGISTERS64) - flags |= FLAG_ARG_NEEDS_PSAVE; - } - break; - - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_INT: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - /* Everything else is passed as a 8-byte word in a GPR, either - the object itself or a pointer to it. */ - intarg_count++; - if (intarg_count > NUM_GPR_ARG_REGISTERS64) - flags |= FLAG_ARG_NEEDS_PSAVE; - break; - default: - FFI_ASSERT (0); - } - } - - if (fparg_count != 0) - flags |= FLAG_FP_ARGUMENTS; - if (intarg_count > 4) - flags |= FLAG_4_GPR_ARGUMENTS; - - /* Space for the FPR registers, if needed. */ - if (fparg_count != 0) - bytes += NUM_FPR_ARG_REGISTERS64 * sizeof (double); - - /* Stack space. */ -#if _CALL_ELF == 2 - if ((flags & FLAG_ARG_NEEDS_PSAVE) != 0) - bytes += intarg_count * sizeof (long); -#else - if (intarg_count > NUM_GPR_ARG_REGISTERS64) - bytes += (intarg_count - NUM_GPR_ARG_REGISTERS64) * sizeof (long); -#endif - - /* The stack space allocated needs to be a multiple of 16 bytes. */ - bytes = (bytes + 15) & ~0xF; - - cif->flags = flags; - cif->bytes = bytes; - - return FFI_OK; -} - -ffi_status FFI_HIDDEN -ffi_prep_cif_linux64 (ffi_cif *cif) -{ - if ((cif->abi & FFI_LINUX) != 0) - cif->nfixedargs = cif->nargs; -#if _CALL_ELF != 2 - else if (cif->abi == FFI_COMPAT_LINUX64) - { - /* This call is from old code. Don't touch cif->nfixedargs - since old code will be using a smaller cif. */ - cif->flags |= FLAG_COMPAT; - /* Translate to new abi value. */ - cif->abi = FFI_LINUX | FFI_LINUX_LONG_DOUBLE_128; - } -#endif - else - return FFI_BAD_ABI; - return ffi_prep_cif_linux64_core (cif); -} - -ffi_status FFI_HIDDEN -ffi_prep_cif_linux64_var (ffi_cif *cif, - unsigned int nfixedargs, - unsigned int ntotalargs MAYBE_UNUSED) -{ - if ((cif->abi & FFI_LINUX) != 0) - cif->nfixedargs = nfixedargs; -#if _CALL_ELF != 2 - else if (cif->abi == FFI_COMPAT_LINUX64) - { - /* This call is from old code. Don't touch cif->nfixedargs - since old code will be using a smaller cif. */ - cif->flags |= FLAG_COMPAT; - /* Translate to new abi value. */ - cif->abi = FFI_LINUX | FFI_LINUX_LONG_DOUBLE_128; - } -#endif - else - return FFI_BAD_ABI; -#if _CALL_ELF == 2 - cif->flags |= FLAG_ARG_NEEDS_PSAVE; -#endif - return ffi_prep_cif_linux64_core (cif); -} - - -/* ffi_prep_args64 is called by the assembly routine once stack space - has been allocated for the function's arguments. - - The stack layout we want looks like this: - - | Ret addr from ffi_call_LINUX64 8bytes | higher addresses - |--------------------------------------------| - | CR save area 8bytes | - |--------------------------------------------| - | Previous backchain pointer 8 | stack pointer here - |--------------------------------------------|<+ <<< on entry to - | Saved r28-r31 4*8 | | ffi_call_LINUX64 - |--------------------------------------------| | - | GPR registers r3-r10 8*8 | | - |--------------------------------------------| | - | FPR registers f1-f13 (optional) 13*8 | | - |--------------------------------------------| | - | Parameter save area | | - |--------------------------------------------| | - | TOC save area 8 | | - |--------------------------------------------| | stack | - | Linker doubleword 8 | | grows | - |--------------------------------------------| | down V - | Compiler doubleword 8 | | - |--------------------------------------------| | lower addresses - | Space for callee's LR 8 | | - |--------------------------------------------| | - | CR save area 8 | | - |--------------------------------------------| | stack pointer here - | Current backchain pointer 8 |-/ during - |--------------------------------------------| <<< ffi_call_LINUX64 - -*/ - -void FFI_HIDDEN -ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack) -{ - const unsigned long bytes = ecif->cif->bytes; - const unsigned long flags = ecif->cif->flags; - - typedef union - { - char *c; - unsigned long *ul; - float *f; - double *d; - size_t p; - } valp; - - /* 'stacktop' points at the previous backchain pointer. */ - valp stacktop; - - /* 'next_arg' points at the space for gpr3, and grows upwards as - we use GPR registers, then continues at rest. */ - valp gpr_base; - valp gpr_end; - valp rest; - valp next_arg; - - /* 'fpr_base' points at the space for fpr3, and grows upwards as - we use FPR registers. */ - valp fpr_base; - unsigned int fparg_count; - - unsigned int i, words, nargs, nfixedargs; - ffi_type **ptr; - double double_tmp; - union - { - void **v; - char **c; - signed char **sc; - unsigned char **uc; - signed short **ss; - unsigned short **us; - signed int **si; - unsigned int **ui; - unsigned long **ul; - float **f; - double **d; - } p_argv; - unsigned long gprvalue; - unsigned long align; - - stacktop.c = (char *) stack + bytes; - gpr_base.ul = stacktop.ul - ASM_NEEDS_REGISTERS64 - NUM_GPR_ARG_REGISTERS64; - gpr_end.ul = gpr_base.ul + NUM_GPR_ARG_REGISTERS64; -#if _CALL_ELF == 2 - rest.ul = stack + 4 + NUM_GPR_ARG_REGISTERS64; -#else - rest.ul = stack + 6 + NUM_GPR_ARG_REGISTERS64; -#endif - fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS64; - fparg_count = 0; - next_arg.ul = gpr_base.ul; - - /* Check that everything starts aligned properly. */ - FFI_ASSERT (((unsigned long) (char *) stack & 0xF) == 0); - FFI_ASSERT (((unsigned long) stacktop.c & 0xF) == 0); - FFI_ASSERT ((bytes & 0xF) == 0); - - /* Deal with return values that are actually pass-by-reference. */ - if (flags & FLAG_RETVAL_REFERENCE) - *next_arg.ul++ = (unsigned long) (char *) ecif->rvalue; - - /* Now for the arguments. */ - p_argv.v = ecif->avalue; - nargs = ecif->cif->nargs; -#if _CALL_ELF != 2 - nfixedargs = (unsigned) -1; - if ((flags & FLAG_COMPAT) == 0) -#endif - nfixedargs = ecif->cif->nfixedargs; - for (ptr = ecif->cif->arg_types, i = 0; - i < nargs; - i++, ptr++, p_argv.v++) - { -#if _CALL_ELF == 2 - unsigned int elt, elnum; -#endif - - switch ((*ptr)->type) - { -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - if ((ecif->cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0) - { - double_tmp = (*p_argv.d)[0]; - if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs) - { - *fpr_base.d++ = double_tmp; -# if _CALL_ELF != 2 - if ((flags & FLAG_COMPAT) != 0) - *next_arg.d = double_tmp; -# endif - } - else - *next_arg.d = double_tmp; - if (++next_arg.ul == gpr_end.ul) - next_arg.ul = rest.ul; - fparg_count++; - double_tmp = (*p_argv.d)[1]; - if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs) - { - *fpr_base.d++ = double_tmp; -# if _CALL_ELF != 2 - if ((flags & FLAG_COMPAT) != 0) - *next_arg.d = double_tmp; -# endif - } - else - *next_arg.d = double_tmp; - if (++next_arg.ul == gpr_end.ul) - next_arg.ul = rest.ul; - fparg_count++; - FFI_ASSERT (__LDBL_MANT_DIG__ == 106); - FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - break; - } - /* Fall through. */ -#endif - case FFI_TYPE_DOUBLE: - double_tmp = **p_argv.d; - if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs) - { - *fpr_base.d++ = double_tmp; -#if _CALL_ELF != 2 - if ((flags & FLAG_COMPAT) != 0) - *next_arg.d = double_tmp; -#endif - } - else - *next_arg.d = double_tmp; - if (++next_arg.ul == gpr_end.ul) - next_arg.ul = rest.ul; - fparg_count++; - FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - break; - - case FFI_TYPE_FLOAT: - double_tmp = **p_argv.f; - if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs) - { - *fpr_base.d++ = double_tmp; -#if _CALL_ELF != 2 - if ((flags & FLAG_COMPAT) != 0) - *next_arg.f = (float) double_tmp; -#endif - } - else - *next_arg.f = (float) double_tmp; - if (++next_arg.ul == gpr_end.ul) - next_arg.ul = rest.ul; - fparg_count++; - FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - break; - - case FFI_TYPE_STRUCT: - if ((ecif->cif->abi & FFI_LINUX_STRUCT_ALIGN) != 0) - { - align = (*ptr)->alignment; - if (align > 16) - align = 16; - if (align > 1) - next_arg.p = ALIGN (next_arg.p, align); - } -#if _CALL_ELF == 2 - elt = discover_homogeneous_aggregate (*ptr, &elnum); - if (elt) - { - union { - void *v; - float *f; - double *d; - } arg; - - arg.v = *p_argv.v; - if (elt == FFI_TYPE_FLOAT) - { - do - { - double_tmp = *arg.f++; - if (fparg_count < NUM_FPR_ARG_REGISTERS64 - && i < nfixedargs) - *fpr_base.d++ = double_tmp; - else - *next_arg.f = (float) double_tmp; - if (++next_arg.f == gpr_end.f) - next_arg.f = rest.f; - fparg_count++; - } - while (--elnum != 0); - if ((next_arg.p & 3) != 0) - { - if (++next_arg.f == gpr_end.f) - next_arg.f = rest.f; - } - } - else - do - { - double_tmp = *arg.d++; - if (fparg_count < NUM_FPR_ARG_REGISTERS64 && i < nfixedargs) - *fpr_base.d++ = double_tmp; - else - *next_arg.d = double_tmp; - if (++next_arg.d == gpr_end.d) - next_arg.d = rest.d; - fparg_count++; - } - while (--elnum != 0); - } - else -#endif - { - words = ((*ptr)->size + 7) / 8; - if (next_arg.ul >= gpr_base.ul && next_arg.ul + words > gpr_end.ul) - { - size_t first = gpr_end.c - next_arg.c; - memcpy (next_arg.c, *p_argv.c, first); - memcpy (rest.c, *p_argv.c + first, (*ptr)->size - first); - next_arg.c = rest.c + words * 8 - first; - } - else - { - char *where = next_arg.c; - -#ifndef __LITTLE_ENDIAN__ - /* Structures with size less than eight bytes are passed - left-padded. */ - if ((*ptr)->size < 8) - where += 8 - (*ptr)->size; -#endif - memcpy (where, *p_argv.c, (*ptr)->size); - next_arg.ul += words; - if (next_arg.ul == gpr_end.ul) - next_arg.ul = rest.ul; - } - } - break; - - case FFI_TYPE_UINT8: - gprvalue = **p_argv.uc; - goto putgpr; - case FFI_TYPE_SINT8: - gprvalue = **p_argv.sc; - goto putgpr; - case FFI_TYPE_UINT16: - gprvalue = **p_argv.us; - goto putgpr; - case FFI_TYPE_SINT16: - gprvalue = **p_argv.ss; - goto putgpr; - case FFI_TYPE_UINT32: - gprvalue = **p_argv.ui; - goto putgpr; - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - gprvalue = **p_argv.si; - goto putgpr; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_POINTER: - gprvalue = **p_argv.ul; - putgpr: - *next_arg.ul++ = gprvalue; - if (next_arg.ul == gpr_end.ul) - next_arg.ul = rest.ul; - break; - } - } - - FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS - || (next_arg.ul >= gpr_base.ul - && next_arg.ul <= gpr_base.ul + 4)); -} - - -#if _CALL_ELF == 2 -#define MIN_CACHE_LINE_SIZE 8 - -static void -flush_icache (char *wraddr, char *xaddr, int size) -{ - int i; - for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE) - __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" - : : "r" (xaddr + i), "r" (wraddr + i) : "memory"); - __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" "sync;" "isync;" - : : "r"(xaddr + size - 1), "r"(wraddr + size - 1) - : "memory"); -} -#endif - -ffi_status -ffi_prep_closure_loc_linux64 (ffi_closure *closure, - ffi_cif *cif, - void (*fun) (ffi_cif *, void *, void **, void *), - void *user_data, - void *codeloc) -{ -#if _CALL_ELF == 2 - unsigned int *tramp = (unsigned int *) &closure->tramp[0]; - - if (cif->abi < FFI_LINUX || cif->abi >= FFI_LAST_ABI) - return FFI_BAD_ABI; - - tramp[0] = 0xe96c0018; /* 0: ld 11,2f-0b(12) */ - tramp[1] = 0xe98c0010; /* ld 12,1f-0b(12) */ - tramp[2] = 0x7d8903a6; /* mtctr 12 */ - tramp[3] = 0x4e800420; /* bctr */ - /* 1: .quad function_addr */ - /* 2: .quad context */ - *(void **) &tramp[4] = (void *) ffi_closure_LINUX64; - *(void **) &tramp[6] = codeloc; - flush_icache ((char *)tramp, (char *)codeloc, FFI_TRAMPOLINE_SIZE); -#else - void **tramp = (void **) &closure->tramp[0]; - - if (cif->abi < FFI_LINUX || cif->abi >= FFI_LAST_ABI) - return FFI_BAD_ABI; - - /* Copy function address and TOC from ffi_closure_LINUX64. */ - memcpy (tramp, (char *) ffi_closure_LINUX64, 16); - tramp[2] = tramp[1]; - tramp[1] = codeloc; -#endif - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - return FFI_OK; -} - - -int FFI_HIDDEN -ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue, - unsigned long *pst, ffi_dblfl *pfr) -{ - /* rvalue is the pointer to space for return value in closure assembly */ - /* pst is the pointer to parameter save area - (r3-r10 are stored into its first 8 slots by ffi_closure_LINUX64) */ - /* pfr is the pointer to where f1-f13 are stored in ffi_closure_LINUX64 */ - - void **avalue; - ffi_type **arg_types; - unsigned long i, avn, nfixedargs; - ffi_cif *cif; - ffi_dblfl *end_pfr = pfr + NUM_FPR_ARG_REGISTERS64; - unsigned long align; - - cif = closure->cif; - avalue = alloca (cif->nargs * sizeof (void *)); - - /* Copy the caller's structure return value address so that the - closure returns the data directly to the caller. */ - if (cif->rtype->type == FFI_TYPE_STRUCT - && (cif->flags & FLAG_RETURNS_SMST) == 0) - { - rvalue = (void *) *pst; - pst++; - } - - i = 0; - avn = cif->nargs; -#if _CALL_ELF != 2 - nfixedargs = (unsigned) -1; - if ((cif->flags & FLAG_COMPAT) == 0) -#endif - nfixedargs = cif->nfixedargs; - arg_types = cif->arg_types; - - /* Grab the addresses of the arguments from the stack frame. */ - while (i < avn) - { - unsigned int elt, elnum; - - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: -#ifndef __LITTLE_ENDIAN__ - avalue[i] = (char *) pst + 7; - pst++; - break; -#endif - - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: -#ifndef __LITTLE_ENDIAN__ - avalue[i] = (char *) pst + 6; - pst++; - break; -#endif - - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: -#ifndef __LITTLE_ENDIAN__ - avalue[i] = (char *) pst + 4; - pst++; - break; -#endif - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_POINTER: - avalue[i] = pst; - pst++; - break; - - case FFI_TYPE_STRUCT: - if ((cif->abi & FFI_LINUX_STRUCT_ALIGN) != 0) - { - align = arg_types[i]->alignment; - if (align > 16) - align = 16; - if (align > 1) - pst = (unsigned long *) ALIGN ((size_t) pst, align); - } - elt = 0; -#if _CALL_ELF == 2 - elt = discover_homogeneous_aggregate (arg_types[i], &elnum); -#endif - if (elt) - { - union { - void *v; - unsigned long *ul; - float *f; - double *d; - size_t p; - } to, from; - - /* Repackage the aggregate from its parts. The - aggregate size is not greater than the space taken by - the registers so store back to the register/parameter - save arrays. */ - if (pfr + elnum <= end_pfr) - to.v = pfr; - else - to.v = pst; - - avalue[i] = to.v; - from.ul = pst; - if (elt == FFI_TYPE_FLOAT) - { - do - { - if (pfr < end_pfr && i < nfixedargs) - { - *to.f = (float) pfr->d; - pfr++; - } - else - *to.f = *from.f; - to.f++; - from.f++; - } - while (--elnum != 0); - } - else - { - do - { - if (pfr < end_pfr && i < nfixedargs) - { - *to.d = pfr->d; - pfr++; - } - else - *to.d = *from.d; - to.d++; - from.d++; - } - while (--elnum != 0); - } - } - else - { -#ifndef __LITTLE_ENDIAN__ - /* Structures with size less than eight bytes are passed - left-padded. */ - if (arg_types[i]->size < 8) - avalue[i] = (char *) pst + 8 - arg_types[i]->size; - else -#endif - avalue[i] = pst; - } - pst += (arg_types[i]->size + 7) / 8; - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - if ((cif->abi & FFI_LINUX_LONG_DOUBLE_128) != 0) - { - if (pfr + 1 < end_pfr && i + 1 < nfixedargs) - { - avalue[i] = pfr; - pfr += 2; - } - else - { - if (pfr < end_pfr && i < nfixedargs) - { - /* Passed partly in f13 and partly on the stack. - Move it all to the stack. */ - *pst = *(unsigned long *) pfr; - pfr++; - } - avalue[i] = pst; - } - pst += 2; - break; - } - /* Fall through. */ -#endif - case FFI_TYPE_DOUBLE: - /* On the outgoing stack all values are aligned to 8 */ - /* there are 13 64bit floating point registers */ - - if (pfr < end_pfr && i < nfixedargs) - { - avalue[i] = pfr; - pfr++; - } - else - avalue[i] = pst; - pst++; - break; - - case FFI_TYPE_FLOAT: - if (pfr < end_pfr && i < nfixedargs) - { - /* Float values are stored as doubles in the - ffi_closure_LINUX64 code. Fix them here. */ - pfr->f = (float) pfr->d; - avalue[i] = pfr; - pfr++; - } - else - avalue[i] = pst; - pst++; - break; - - default: - FFI_ASSERT (0); - } - - i++; - } - - - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_LINUX64 how to perform return type promotions. */ - if ((cif->flags & FLAG_RETURNS_SMST) != 0) - { - if ((cif->flags & FLAG_RETURNS_FP) == 0) - return FFI_V2_TYPE_SMALL_STRUCT + cif->rtype->size - 1; - else if ((cif->flags & FLAG_RETURNS_64BITS) != 0) - return FFI_V2_TYPE_DOUBLE_HOMOG; - else - return FFI_V2_TYPE_FLOAT_HOMOG; - } - return cif->rtype->type; -} -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_powerpc.h b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_powerpc.h deleted file mode 100644 index 2e61653d1..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_powerpc.h +++ /dev/null @@ -1,77 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi_powerpc.h - Copyright (C) 2013 IBM - Copyright (C) 2011 Anthony Green - Copyright (C) 2011 Kyle Moffett - Copyright (C) 2008 Red Hat, Inc - Copyright (C) 2007, 2008 Free Software Foundation, Inc - Copyright (c) 1998 Geoffrey Keating - - PowerPC Foreign Function Interface - - 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 AUTHOR 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. - ----------------------------------------------------------------------- */ - -enum { - /* The assembly depends on these exact flags. */ - /* These go in cr7 */ - FLAG_RETURNS_SMST = 1 << (31-31), /* Used for FFI_SYSV small structs. */ - FLAG_RETURNS_NOTHING = 1 << (31-30), - FLAG_RETURNS_FP = 1 << (31-29), - FLAG_RETURNS_64BITS = 1 << (31-28), - - /* This goes in cr6 */ - FLAG_RETURNS_128BITS = 1 << (31-27), - - FLAG_COMPAT = 1 << (31- 8), /* Not used by assembly */ - - /* These go in cr1 */ - FLAG_ARG_NEEDS_COPY = 1 << (31- 7), /* Used by sysv code */ - FLAG_ARG_NEEDS_PSAVE = FLAG_ARG_NEEDS_COPY, /* Used by linux64 code */ - FLAG_FP_ARGUMENTS = 1 << (31- 6), /* cr1.eq; specified by ABI */ - FLAG_4_GPR_ARGUMENTS = 1 << (31- 5), - FLAG_RETVAL_REFERENCE = 1 << (31- 4) -}; - -typedef union -{ - float f; - double d; -} ffi_dblfl; - -void FFI_HIDDEN ffi_closure_SYSV (void); -void FFI_HIDDEN ffi_call_SYSV(extended_cif *, unsigned, unsigned, unsigned *, - void (*)(void)); - -void FFI_HIDDEN ffi_prep_types_sysv (ffi_abi); -ffi_status FFI_HIDDEN ffi_prep_cif_sysv (ffi_cif *); -int FFI_HIDDEN ffi_closure_helper_SYSV (ffi_closure *, void *, unsigned long *, - ffi_dblfl *, unsigned long *); - -void FFI_HIDDEN ffi_call_LINUX64(extended_cif *, unsigned long, unsigned long, - unsigned long *, void (*)(void)); -void FFI_HIDDEN ffi_closure_LINUX64 (void); - -void FFI_HIDDEN ffi_prep_types_linux64 (ffi_abi); -ffi_status FFI_HIDDEN ffi_prep_cif_linux64 (ffi_cif *); -ffi_status FFI_HIDDEN ffi_prep_cif_linux64_var (ffi_cif *, unsigned int, - unsigned int); -void FFI_HIDDEN ffi_prep_args64 (extended_cif *, unsigned long *const); -int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure *, void *, - unsigned long *, ffi_dblfl *); diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_sysv.c b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_sysv.c deleted file mode 100644 index fbe85fe91..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffi_sysv.c +++ /dev/null @@ -1,931 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi_sysv.c - Copyright (C) 2013 IBM - Copyright (C) 2011 Anthony Green - Copyright (C) 2011 Kyle Moffett - Copyright (C) 2008 Red Hat, Inc - Copyright (C) 2007, 2008 Free Software Foundation, Inc - Copyright (c) 1998 Geoffrey Keating - - PowerPC Foreign Function Interface - - 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 AUTHOR 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 "ffi.h" - -#ifndef POWERPC64 -#include "ffi_common.h" -#include "ffi_powerpc.h" - - -/* About the SYSV ABI. */ -#define ASM_NEEDS_REGISTERS 4 -#define NUM_GPR_ARG_REGISTERS 8 -#define NUM_FPR_ARG_REGISTERS 8 - - -#if HAVE_LONG_DOUBLE_VARIANT && FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -/* Adjust size of ffi_type_longdouble. */ -void FFI_HIDDEN -ffi_prep_types_sysv (ffi_abi abi) -{ - if ((abi & (FFI_SYSV | FFI_SYSV_LONG_DOUBLE_128)) == FFI_SYSV) - { - ffi_type_longdouble.size = 8; - ffi_type_longdouble.alignment = 8; - } - else - { - ffi_type_longdouble.size = 16; - ffi_type_longdouble.alignment = 16; - } -} -#endif - -/* Transform long double, double and float to other types as per abi. */ -static int -translate_float (int abi, int type) -{ -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - if (type == FFI_TYPE_LONGDOUBLE - && (abi & FFI_SYSV_LONG_DOUBLE_128) == 0) - type = FFI_TYPE_DOUBLE; -#endif - if ((abi & FFI_SYSV_SOFT_FLOAT) != 0) - { - if (type == FFI_TYPE_FLOAT) - type = FFI_TYPE_UINT32; - else if (type == FFI_TYPE_DOUBLE) - type = FFI_TYPE_UINT64; -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - else if (type == FFI_TYPE_LONGDOUBLE) - type = FFI_TYPE_UINT128; - } - else if ((abi & FFI_SYSV_IBM_LONG_DOUBLE) == 0) - { - if (type == FFI_TYPE_LONGDOUBLE) - type = FFI_TYPE_STRUCT; -#endif - } - return type; -} - -/* Perform machine dependent cif processing */ -static ffi_status -ffi_prep_cif_sysv_core (ffi_cif *cif) -{ - ffi_type **ptr; - unsigned bytes; - unsigned i, fparg_count = 0, intarg_count = 0; - unsigned flags = cif->flags; - unsigned struct_copy_size = 0; - unsigned type = cif->rtype->type; - unsigned size = cif->rtype->size; - - /* The machine-independent calculation of cif->bytes doesn't work - for us. Redo the calculation. */ - - /* Space for the frame pointer, callee's LR, and the asm's temp regs. */ - bytes = (2 + ASM_NEEDS_REGISTERS) * sizeof (int); - - /* Space for the GPR registers. */ - bytes += NUM_GPR_ARG_REGISTERS * sizeof (int); - - /* Return value handling. The rules for SYSV are as follows: - - 32-bit (or less) integer values are returned in gpr3; - - Structures of size <= 4 bytes also returned in gpr3; - - 64-bit integer values and structures between 5 and 8 bytes are returned - in gpr3 and gpr4; - - Larger structures are allocated space and a pointer is passed as - the first argument. - - Single/double FP values are returned in fpr1; - - long doubles (if not equivalent to double) are returned in - fpr1,fpr2 for Linux and as for large structs for SysV. */ - - type = translate_float (cif->abi, type); - - switch (type) - { -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - flags |= FLAG_RETURNS_128BITS; - /* Fall through. */ -#endif - case FFI_TYPE_DOUBLE: - flags |= FLAG_RETURNS_64BITS; - /* Fall through. */ - case FFI_TYPE_FLOAT: - flags |= FLAG_RETURNS_FP; -#ifdef __NO_FPRS__ - return FFI_BAD_ABI; -#endif - break; - - case FFI_TYPE_UINT128: - flags |= FLAG_RETURNS_128BITS; - /* Fall through. */ - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - flags |= FLAG_RETURNS_64BITS; - break; - - case FFI_TYPE_STRUCT: - /* The final SYSV ABI says that structures smaller or equal 8 bytes - are returned in r3/r4. A draft ABI used by linux instead - returns them in memory. */ - if ((cif->abi & FFI_SYSV_STRUCT_RET) != 0 && size <= 8) - { - flags |= FLAG_RETURNS_SMST; - break; - } - intarg_count++; - flags |= FLAG_RETVAL_REFERENCE; - /* Fall through. */ - case FFI_TYPE_VOID: - flags |= FLAG_RETURNS_NOTHING; - break; - - default: - /* Returns 32-bit integer, or similar. Nothing to do here. */ - break; - } - - /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the - first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest - goes on the stack. Structures and long doubles (if not equivalent - to double) are passed as a pointer to a copy of the structure. - Stuff on the stack needs to keep proper alignment. */ - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - unsigned short typenum = (*ptr)->type; - - typenum = translate_float (cif->abi, typenum); - - switch (typenum) - { -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - fparg_count++; - /* Fall thru */ -#endif - case FFI_TYPE_DOUBLE: - fparg_count++; - /* If this FP arg is going on the stack, it must be - 8-byte-aligned. */ - if (fparg_count > NUM_FPR_ARG_REGISTERS - && intarg_count >= NUM_GPR_ARG_REGISTERS - && intarg_count % 2 != 0) - intarg_count++; -#ifdef __NO_FPRS__ - return FFI_BAD_ABI; -#endif - break; - - case FFI_TYPE_FLOAT: - fparg_count++; -#ifdef __NO_FPRS__ - return FFI_BAD_ABI; -#endif - break; - - case FFI_TYPE_UINT128: - /* A long double in FFI_LINUX_SOFT_FLOAT can use only a set - of four consecutive gprs. If we do not have enough, we - have to adjust the intarg_count value. */ - if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3 - && intarg_count < NUM_GPR_ARG_REGISTERS) - intarg_count = NUM_GPR_ARG_REGISTERS; - intarg_count += 4; - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - /* 'long long' arguments are passed as two words, but - either both words must fit in registers or both go - on the stack. If they go on the stack, they must - be 8-byte-aligned. - - Also, only certain register pairs can be used for - passing long long int -- specifically (r3,r4), (r5,r6), - (r7,r8), (r9,r10). */ - if (intarg_count == NUM_GPR_ARG_REGISTERS-1 - || intarg_count % 2 != 0) - intarg_count++; - intarg_count += 2; - break; - - case FFI_TYPE_STRUCT: - /* We must allocate space for a copy of these to enforce - pass-by-value. Pad the space up to a multiple of 16 - bytes (the maximum alignment required for anything under - the SYSV ABI). */ - struct_copy_size += ((*ptr)->size + 15) & ~0xF; - /* Fall through (allocate space for the pointer). */ - - case FFI_TYPE_POINTER: - case FFI_TYPE_INT: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - /* Everything else is passed as a 4-byte word in a GPR, either - the object itself or a pointer to it. */ - intarg_count++; - break; - - default: - FFI_ASSERT (0); - } - } - - if (fparg_count != 0) - flags |= FLAG_FP_ARGUMENTS; - if (intarg_count > 4) - flags |= FLAG_4_GPR_ARGUMENTS; - if (struct_copy_size != 0) - flags |= FLAG_ARG_NEEDS_COPY; - - /* Space for the FPR registers, if needed. */ - if (fparg_count != 0) - bytes += NUM_FPR_ARG_REGISTERS * sizeof (double); - - /* Stack space. */ - if (intarg_count > NUM_GPR_ARG_REGISTERS) - bytes += (intarg_count - NUM_GPR_ARG_REGISTERS) * sizeof (int); - if (fparg_count > NUM_FPR_ARG_REGISTERS) - bytes += (fparg_count - NUM_FPR_ARG_REGISTERS) * sizeof (double); - - /* The stack space allocated needs to be a multiple of 16 bytes. */ - bytes = (bytes + 15) & ~0xF; - - /* Add in the space for the copied structures. */ - bytes += struct_copy_size; - - cif->flags = flags; - cif->bytes = bytes; - - return FFI_OK; -} - -ffi_status FFI_HIDDEN -ffi_prep_cif_sysv (ffi_cif *cif) -{ - if ((cif->abi & FFI_SYSV) == 0) - { - /* This call is from old code. Translate to new ABI values. */ - cif->flags |= FLAG_COMPAT; - switch (cif->abi) - { - default: - return FFI_BAD_ABI; - - case FFI_COMPAT_SYSV: - cif->abi = FFI_SYSV | FFI_SYSV_STRUCT_RET | FFI_SYSV_LONG_DOUBLE_128; - break; - - case FFI_COMPAT_GCC_SYSV: - cif->abi = FFI_SYSV | FFI_SYSV_LONG_DOUBLE_128; - break; - - case FFI_COMPAT_LINUX: - cif->abi = (FFI_SYSV | FFI_SYSV_IBM_LONG_DOUBLE - | FFI_SYSV_LONG_DOUBLE_128); - break; - - case FFI_COMPAT_LINUX_SOFT_FLOAT: - cif->abi = (FFI_SYSV | FFI_SYSV_SOFT_FLOAT | FFI_SYSV_IBM_LONG_DOUBLE - | FFI_SYSV_LONG_DOUBLE_128); - break; - } - } - return ffi_prep_cif_sysv_core (cif); -} - -/* ffi_prep_args_SYSV is called by the assembly routine once stack space - has been allocated for the function's arguments. - - The stack layout we want looks like this: - - | Return address from ffi_call_SYSV 4bytes | higher addresses - |--------------------------------------------| - | Previous backchain pointer 4 | stack pointer here - |--------------------------------------------|<+ <<< on entry to - | Saved r28-r31 4*4 | | ffi_call_SYSV - |--------------------------------------------| | - | GPR registers r3-r10 8*4 | | ffi_call_SYSV - |--------------------------------------------| | - | FPR registers f1-f8 (optional) 8*8 | | - |--------------------------------------------| | stack | - | Space for copied structures | | grows | - |--------------------------------------------| | down V - | Parameters that didn't fit in registers | | - |--------------------------------------------| | lower addresses - | Space for callee's LR 4 | | - |--------------------------------------------| | stack pointer here - | Current backchain pointer 4 |-/ during - |--------------------------------------------| <<< ffi_call_SYSV - -*/ - -void FFI_HIDDEN -ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack) -{ - const unsigned bytes = ecif->cif->bytes; - const unsigned flags = ecif->cif->flags; - - typedef union - { - char *c; - unsigned *u; - long long *ll; - float *f; - double *d; - } valp; - - /* 'stacktop' points at the previous backchain pointer. */ - valp stacktop; - - /* 'gpr_base' points at the space for gpr3, and grows upwards as - we use GPR registers. */ - valp gpr_base; - int intarg_count; - -#ifndef __NO_FPRS__ - /* 'fpr_base' points at the space for fpr1, and grows upwards as - we use FPR registers. */ - valp fpr_base; - int fparg_count; -#endif - - /* 'copy_space' grows down as we put structures in it. It should - stay 16-byte aligned. */ - valp copy_space; - - /* 'next_arg' grows up as we put parameters in it. */ - valp next_arg; - - int i; - ffi_type **ptr; -#ifndef __NO_FPRS__ - double double_tmp; -#endif - union - { - void **v; - char **c; - signed char **sc; - unsigned char **uc; - signed short **ss; - unsigned short **us; - unsigned int **ui; - long long **ll; - float **f; - double **d; - } p_argv; - size_t struct_copy_size; - unsigned gprvalue; - - stacktop.c = (char *) stack + bytes; - gpr_base.u = stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS; - intarg_count = 0; -#ifndef __NO_FPRS__ - fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS; - fparg_count = 0; - copy_space.c = ((flags & FLAG_FP_ARGUMENTS) ? fpr_base.c : gpr_base.c); -#else - copy_space.c = gpr_base.c; -#endif - next_arg.u = stack + 2; - - /* Check that everything starts aligned properly. */ - FFI_ASSERT (((unsigned long) (char *) stack & 0xF) == 0); - FFI_ASSERT (((unsigned long) copy_space.c & 0xF) == 0); - FFI_ASSERT (((unsigned long) stacktop.c & 0xF) == 0); - FFI_ASSERT ((bytes & 0xF) == 0); - FFI_ASSERT (copy_space.c >= next_arg.c); - - /* Deal with return values that are actually pass-by-reference. */ - if (flags & FLAG_RETVAL_REFERENCE) - { - *gpr_base.u++ = (unsigned long) (char *) ecif->rvalue; - intarg_count++; - } - - /* Now for the arguments. */ - p_argv.v = ecif->avalue; - for (ptr = ecif->cif->arg_types, i = ecif->cif->nargs; - i > 0; - i--, ptr++, p_argv.v++) - { - unsigned int typenum = (*ptr)->type; - - typenum = translate_float (ecif->cif->abi, typenum); - - /* Now test the translated value */ - switch (typenum) - { -#ifndef __NO_FPRS__ -# if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - double_tmp = (*p_argv.d)[0]; - - if (fparg_count >= NUM_FPR_ARG_REGISTERS - 1) - { - if (intarg_count >= NUM_GPR_ARG_REGISTERS - && intarg_count % 2 != 0) - { - intarg_count++; - next_arg.u++; - } - *next_arg.d = double_tmp; - next_arg.u += 2; - double_tmp = (*p_argv.d)[1]; - *next_arg.d = double_tmp; - next_arg.u += 2; - } - else - { - *fpr_base.d++ = double_tmp; - double_tmp = (*p_argv.d)[1]; - *fpr_base.d++ = double_tmp; - } - - fparg_count += 2; - FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - break; -# endif - case FFI_TYPE_DOUBLE: - double_tmp = **p_argv.d; - - if (fparg_count >= NUM_FPR_ARG_REGISTERS) - { - if (intarg_count >= NUM_GPR_ARG_REGISTERS - && intarg_count % 2 != 0) - { - intarg_count++; - next_arg.u++; - } - *next_arg.d = double_tmp; - next_arg.u += 2; - } - else - *fpr_base.d++ = double_tmp; - fparg_count++; - FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - break; - - case FFI_TYPE_FLOAT: - double_tmp = **p_argv.f; - if (fparg_count >= NUM_FPR_ARG_REGISTERS) - { - *next_arg.f = (float) double_tmp; - next_arg.u += 1; - intarg_count++; - } - else - *fpr_base.d++ = double_tmp; - fparg_count++; - FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - break; -#endif /* have FPRs */ - - case FFI_TYPE_UINT128: - /* The soft float ABI for long doubles works like this, a long double - is passed in four consecutive GPRs if available. A maximum of 2 - long doubles can be passed in gprs. If we do not have 4 GPRs - left, the long double is passed on the stack, 4-byte aligned. */ - { - unsigned int int_tmp; - unsigned int ii; - if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3) - { - if (intarg_count < NUM_GPR_ARG_REGISTERS) - intarg_count = NUM_GPR_ARG_REGISTERS; - for (ii = 0; ii < 4; ii++) - { - int_tmp = (*p_argv.ui)[ii]; - *next_arg.u++ = int_tmp; - } - } - else - { - for (ii = 0; ii < 4; ii++) - { - int_tmp = (*p_argv.ui)[ii]; - *gpr_base.u++ = int_tmp; - } - } - intarg_count += 4; - break; - } - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - if (intarg_count == NUM_GPR_ARG_REGISTERS-1) - intarg_count++; - if (intarg_count >= NUM_GPR_ARG_REGISTERS) - { - if (intarg_count % 2 != 0) - { - intarg_count++; - next_arg.u++; - } - *next_arg.ll = **p_argv.ll; - next_arg.u += 2; - } - else - { - /* The abi states only certain register pairs can be - used for passing long long int specifically (r3,r4), - (r5,r6), (r7,r8), (r9,r10). If next arg is long long - but not correct starting register of pair then skip - until the proper starting register. */ - if (intarg_count % 2 != 0) - { - intarg_count ++; - gpr_base.u++; - } - *gpr_base.ll++ = **p_argv.ll; - } - intarg_count += 2; - break; - - case FFI_TYPE_STRUCT: - struct_copy_size = ((*ptr)->size + 15) & ~0xF; - copy_space.c -= struct_copy_size; - memcpy (copy_space.c, *p_argv.c, (*ptr)->size); - - gprvalue = (unsigned long) copy_space.c; - - FFI_ASSERT (copy_space.c > next_arg.c); - FFI_ASSERT (flags & FLAG_ARG_NEEDS_COPY); - goto putgpr; - - case FFI_TYPE_UINT8: - gprvalue = **p_argv.uc; - goto putgpr; - case FFI_TYPE_SINT8: - gprvalue = **p_argv.sc; - goto putgpr; - case FFI_TYPE_UINT16: - gprvalue = **p_argv.us; - goto putgpr; - case FFI_TYPE_SINT16: - gprvalue = **p_argv.ss; - goto putgpr; - - case FFI_TYPE_INT: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_POINTER: - - gprvalue = **p_argv.ui; - - putgpr: - if (intarg_count >= NUM_GPR_ARG_REGISTERS) - *next_arg.u++ = gprvalue; - else - *gpr_base.u++ = gprvalue; - intarg_count++; - break; - } - } - - /* Check that we didn't overrun the stack... */ - FFI_ASSERT (copy_space.c >= next_arg.c); - FFI_ASSERT (gpr_base.u <= stacktop.u - ASM_NEEDS_REGISTERS); - /* The assert below is testing that the number of integer arguments agrees - with the number found in ffi_prep_cif_machdep(). However, intarg_count - is incremented whenever we place an FP arg on the stack, so account for - that before our assert test. */ -#ifndef __NO_FPRS__ - if (fparg_count > NUM_FPR_ARG_REGISTERS) - intarg_count -= fparg_count - NUM_FPR_ARG_REGISTERS; - FFI_ASSERT (fpr_base.u - <= stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS); -#endif - FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4); -} - -#define MIN_CACHE_LINE_SIZE 8 - -static void -flush_icache (char *wraddr, char *xaddr, int size) -{ - int i; - for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE) - __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" - : : "r" (xaddr + i), "r" (wraddr + i) : "memory"); - __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" "sync;" "isync;" - : : "r"(xaddr + size - 1), "r"(wraddr + size - 1) - : "memory"); -} - -ffi_status FFI_HIDDEN -ffi_prep_closure_loc_sysv (ffi_closure *closure, - ffi_cif *cif, - void (*fun) (ffi_cif *, void *, void **, void *), - void *user_data, - void *codeloc) -{ - unsigned int *tramp; - - if (cif->abi < FFI_SYSV || cif->abi >= FFI_LAST_ABI) - return FFI_BAD_ABI; - - tramp = (unsigned int *) &closure->tramp[0]; - tramp[0] = 0x7c0802a6; /* mflr r0 */ - tramp[1] = 0x4800000d; /* bl 10 */ - tramp[4] = 0x7d6802a6; /* mflr r11 */ - tramp[5] = 0x7c0803a6; /* mtlr r0 */ - tramp[6] = 0x800b0000; /* lwz r0,0(r11) */ - tramp[7] = 0x816b0004; /* lwz r11,4(r11) */ - tramp[8] = 0x7c0903a6; /* mtctr r0 */ - tramp[9] = 0x4e800420; /* bctr */ - *(void **) &tramp[2] = (void *) ffi_closure_SYSV; /* function */ - *(void **) &tramp[3] = codeloc; /* context */ - - /* Flush the icache. */ - flush_icache ((char *)tramp, (char *)codeloc, FFI_TRAMPOLINE_SIZE); - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - return FFI_OK; -} - -/* Basically the trampoline invokes ffi_closure_SYSV, and on - entry, r11 holds the address of the closure. - After storing the registers that could possibly contain - parameters to be passed into the stack frame and setting - up space for a return value, ffi_closure_SYSV invokes the - following helper function to do most of the work. */ - -int -ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue, - unsigned long *pgr, ffi_dblfl *pfr, - unsigned long *pst) -{ - /* rvalue is the pointer to space for return value in closure assembly */ - /* pgr is the pointer to where r3-r10 are stored in ffi_closure_SYSV */ - /* pfr is the pointer to where f1-f8 are stored in ffi_closure_SYSV */ - /* pst is the pointer to outgoing parameter stack in original caller */ - - void ** avalue; - ffi_type ** arg_types; - long i, avn; -#ifndef __NO_FPRS__ - long nf = 0; /* number of floating registers already used */ -#endif - long ng = 0; /* number of general registers already used */ - - ffi_cif *cif = closure->cif; - unsigned size = cif->rtype->size; - unsigned short rtypenum = cif->rtype->type; - - avalue = alloca (cif->nargs * sizeof (void *)); - - /* First translate for softfloat/nonlinux */ - rtypenum = translate_float (cif->abi, rtypenum); - - /* Copy the caller's structure return value address so that the closure - returns the data directly to the caller. - For FFI_SYSV the result is passed in r3/r4 if the struct size is less - or equal 8 bytes. */ - if (rtypenum == FFI_TYPE_STRUCT - && !((cif->abi & FFI_SYSV_STRUCT_RET) != 0 && size <= 8)) - { - rvalue = (void *) *pgr; - ng++; - pgr++; - } - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - /* Grab the addresses of the arguments from the stack frame. */ - while (i < avn) { - unsigned short typenum = arg_types[i]->type; - - /* We may need to handle some values depending on ABI. */ - typenum = translate_float (cif->abi, typenum); - - switch (typenum) - { -#ifndef __NO_FPRS__ - case FFI_TYPE_FLOAT: - /* Unfortunately float values are stored as doubles - in the ffi_closure_SYSV code (since we don't check - the type in that routine). */ - if (nf < NUM_FPR_ARG_REGISTERS) - { - /* FIXME? here we are really changing the values - stored in the original calling routines outgoing - parameter stack. This is probably a really - naughty thing to do but... */ - double temp = pfr->d; - pfr->f = (float) temp; - avalue[i] = pfr; - nf++; - pfr++; - } - else - { - avalue[i] = pst; - pst += 1; - } - break; - - case FFI_TYPE_DOUBLE: - if (nf < NUM_FPR_ARG_REGISTERS) - { - avalue[i] = pfr; - nf++; - pfr++; - } - else - { - if (((long) pst) & 4) - pst++; - avalue[i] = pst; - pst += 2; - } - break; - -# if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - if (nf < NUM_FPR_ARG_REGISTERS - 1) - { - avalue[i] = pfr; - pfr += 2; - nf += 2; - } - else - { - if (((long) pst) & 4) - pst++; - avalue[i] = pst; - pst += 4; - nf = 8; - } - break; -# endif -#endif - - case FFI_TYPE_UINT128: - /* Test if for the whole long double, 4 gprs are available. - otherwise the stuff ends up on the stack. */ - if (ng < NUM_GPR_ARG_REGISTERS - 3) - { - avalue[i] = pgr; - pgr += 4; - ng += 4; - } - else - { - avalue[i] = pst; - pst += 4; - ng = 8+4; - } - break; - - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: -#ifndef __LITTLE_ENDIAN__ - if (ng < NUM_GPR_ARG_REGISTERS) - { - avalue[i] = (char *) pgr + 3; - ng++; - pgr++; - } - else - { - avalue[i] = (char *) pst + 3; - pst++; - } - break; -#endif - - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: -#ifndef __LITTLE_ENDIAN__ - if (ng < NUM_GPR_ARG_REGISTERS) - { - avalue[i] = (char *) pgr + 2; - ng++; - pgr++; - } - else - { - avalue[i] = (char *) pst + 2; - pst++; - } - break; -#endif - - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_POINTER: - if (ng < NUM_GPR_ARG_REGISTERS) - { - avalue[i] = pgr; - ng++; - pgr++; - } - else - { - avalue[i] = pst; - pst++; - } - break; - - case FFI_TYPE_STRUCT: - /* Structs are passed by reference. The address will appear in a - gpr if it is one of the first 8 arguments. */ - if (ng < NUM_GPR_ARG_REGISTERS) - { - avalue[i] = (void *) *pgr; - ng++; - pgr++; - } - else - { - avalue[i] = (void *) *pst; - pst++; - } - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - /* Passing long long ints are complex, they must - be passed in suitable register pairs such as - (r3,r4) or (r5,r6) or (r6,r7), or (r7,r8) or (r9,r10) - and if the entire pair aren't available then the outgoing - parameter stack is used for both but an alignment of 8 - must will be kept. So we must either look in pgr - or pst to find the correct address for this type - of parameter. */ - if (ng < NUM_GPR_ARG_REGISTERS - 1) - { - if (ng & 1) - { - /* skip r4, r6, r8 as starting points */ - ng++; - pgr++; - } - avalue[i] = pgr; - ng += 2; - pgr += 2; - } - else - { - if (((long) pst) & 4) - pst++; - avalue[i] = pst; - pst += 2; - ng = NUM_GPR_ARG_REGISTERS; - } - break; - - default: - FFI_ASSERT (0); - } - - i++; - } - - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_SYSV how to perform return type promotions. - Because the FFI_SYSV ABI returns the structures <= 8 bytes in - r3/r4 we have to tell ffi_closure_SYSV how to treat them. We - combine the base type FFI_SYSV_TYPE_SMALL_STRUCT with the size of - the struct less one. We never have a struct with size zero. - See the comment in ffitarget.h about ordering. */ - if (rtypenum == FFI_TYPE_STRUCT - && (cif->abi & FFI_SYSV_STRUCT_RET) != 0 && size <= 8) - return FFI_SYSV_TYPE_SMALL_STRUCT - 1 + size; - return rtypenum; -} -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffitarget.h deleted file mode 100644 index b47b0f5d3..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ffitarget.h +++ /dev/null @@ -1,183 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc - Copyright (c) 1996-2003 Red Hat, Inc. - - Target configuration macros for PowerPC. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -/* ---- System specific configurations ----------------------------------- */ - -#if defined (POWERPC) && defined (__powerpc64__) /* linux64 */ -#ifndef POWERPC64 -#define POWERPC64 -#endif -#elif defined (POWERPC_DARWIN) && defined (__ppc64__) /* Darwin64 */ -#ifndef POWERPC64 -#define POWERPC64 -#endif -#ifndef POWERPC_DARWIN64 -#define POWERPC_DARWIN64 -#endif -#elif defined (POWERPC_AIX) && defined (__64BIT__) /* AIX64 */ -#ifndef POWERPC64 -#define POWERPC64 -#endif -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - -#if defined (POWERPC_AIX) - FFI_AIX, - FFI_DARWIN, - FFI_DEFAULT_ABI = FFI_AIX, - FFI_LAST_ABI - -#elif defined (POWERPC_DARWIN) - FFI_AIX, - FFI_DARWIN, - FFI_DEFAULT_ABI = FFI_DARWIN, - FFI_LAST_ABI - -#else - /* The FFI_COMPAT values are used by old code. Since libffi may be - a shared library we have to support old values for backwards - compatibility. */ - FFI_COMPAT_SYSV, - FFI_COMPAT_GCC_SYSV, - FFI_COMPAT_LINUX64, - FFI_COMPAT_LINUX, - FFI_COMPAT_LINUX_SOFT_FLOAT, - -# if defined (POWERPC64) - /* This bit, always set in new code, must not be set in any of the - old FFI_COMPAT values that might be used for 64-bit linux. We - only need worry about FFI_COMPAT_LINUX64, but to be safe avoid - all old values. */ - FFI_LINUX = 8, - /* This and following bits can reuse FFI_COMPAT values. */ - FFI_LINUX_STRUCT_ALIGN = 1, - FFI_LINUX_LONG_DOUBLE_128 = 2, - FFI_DEFAULT_ABI = (FFI_LINUX -# ifdef __STRUCT_PARM_ALIGN__ - | FFI_LINUX_STRUCT_ALIGN -# endif -# ifdef __LONG_DOUBLE_128__ - | FFI_LINUX_LONG_DOUBLE_128 -# endif - ), - FFI_LAST_ABI = 12 - -# else - /* This bit, always set in new code, must not be set in any of the - old FFI_COMPAT values that might be used for 32-bit linux/sysv/bsd. */ - FFI_SYSV = 8, - /* This and following bits can reuse FFI_COMPAT values. */ - FFI_SYSV_SOFT_FLOAT = 1, - FFI_SYSV_STRUCT_RET = 2, - FFI_SYSV_IBM_LONG_DOUBLE = 4, - FFI_SYSV_LONG_DOUBLE_128 = 16, - - FFI_DEFAULT_ABI = (FFI_SYSV -# ifdef __NO_FPRS__ - | FFI_SYSV_SOFT_FLOAT -# endif -# if (defined (__SVR4_STRUCT_RETURN) \ - || defined (POWERPC_FREEBSD) && !defined (__AIX_STRUCT_RETURN)) - | FFI_SYSV_STRUCT_RET -# endif -# if __LDBL_MANT_DIG__ == 106 - | FFI_SYSV_IBM_LONG_DOUBLE -# endif -# ifdef __LONG_DOUBLE_128__ - | FFI_SYSV_LONG_DOUBLE_128 -# endif - ), - FFI_LAST_ABI = 32 -# endif -#endif - -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_NATIVE_RAW_API 0 -#if defined (POWERPC) || defined (POWERPC_FREEBSD) -# define FFI_TARGET_SPECIFIC_VARIADIC 1 -# define FFI_EXTRA_CIF_FIELDS unsigned nfixedargs -#endif - -/* For additional types like the below, take care about the order in - ppc_closures.S. They must follow after the FFI_TYPE_LAST. */ - -/* Needed for soft-float long-double-128 support. */ -#define FFI_TYPE_UINT128 (FFI_TYPE_LAST + 1) - -/* Needed for FFI_SYSV small structure returns. */ -#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 2) - -/* Used by ELFv2 for homogenous structure returns. */ -#define FFI_V2_TYPE_FLOAT_HOMOG (FFI_TYPE_LAST + 1) -#define FFI_V2_TYPE_DOUBLE_HOMOG (FFI_TYPE_LAST + 2) -#define FFI_V2_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 3) - -#if _CALL_ELF == 2 -# define FFI_TRAMPOLINE_SIZE 32 -#else -# if defined(POWERPC64) || defined(POWERPC_AIX) -# if defined(POWERPC_DARWIN64) -# define FFI_TRAMPOLINE_SIZE 48 -# else -# define FFI_TRAMPOLINE_SIZE 24 -# endif -# else /* POWERPC || POWERPC_AIX */ -# define FFI_TRAMPOLINE_SIZE 40 -# endif -#endif - -#ifndef LIBFFI_ASM -#if defined(POWERPC_DARWIN) || defined(POWERPC_AIX) -struct ffi_aix_trampoline_struct { - void * code_pointer; /* Pointer to ffi_closure_ASM */ - void * toc; /* TOC */ - void * static_chain; /* Pointer to closure */ -}; -#endif -#endif - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/linux64.S b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/linux64.S deleted file mode 100644 index d2acb7007..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/linux64.S +++ /dev/null @@ -1,261 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.h - Copyright (c) 2003 Jakub Jelinek - Copyright (c) 2008 Red Hat, Inc. - - PowerPC64 Assembly glue. - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -#ifdef POWERPC64 - .hidden ffi_call_LINUX64 - .globl ffi_call_LINUX64 -# if _CALL_ELF == 2 - .text -ffi_call_LINUX64: - addis %r2, %r12, .TOC.-ffi_call_LINUX64@ha - addi %r2, %r2, .TOC.-ffi_call_LINUX64@l - .localentry ffi_call_LINUX64, . - ffi_call_LINUX64 -# else - .section ".opd","aw" - .align 3 -ffi_call_LINUX64: -# ifdef _CALL_LINUX - .quad .L.ffi_call_LINUX64,.TOC.@tocbase,0 - .type ffi_call_LINUX64,@function - .text -.L.ffi_call_LINUX64: -# else - .hidden .ffi_call_LINUX64 - .globl .ffi_call_LINUX64 - .quad .ffi_call_LINUX64,.TOC.@tocbase,0 - .size ffi_call_LINUX64,24 - .type .ffi_call_LINUX64,@function - .text -.ffi_call_LINUX64: -# endif -# endif -.LFB1: - mflr %r0 - std %r28, -32(%r1) - std %r29, -24(%r1) - std %r30, -16(%r1) - std %r31, -8(%r1) - std %r0, 16(%r1) - - mr %r28, %r1 /* our AP. */ -.LCFI0: - stdux %r1, %r1, %r4 - mr %r31, %r5 /* flags, */ - mr %r30, %r6 /* rvalue, */ - mr %r29, %r7 /* function address. */ -/* Save toc pointer, not for the ffi_prep_args64 call, but for the later - bctrl function call. */ -# if _CALL_ELF == 2 - std %r2, 24(%r1) -# else - std %r2, 40(%r1) -# endif - - /* Call ffi_prep_args64. */ - mr %r4, %r1 -# if defined _CALL_LINUX || _CALL_ELF == 2 - bl ffi_prep_args64 -# else - bl .ffi_prep_args64 -# endif - -# if _CALL_ELF == 2 - mr %r12, %r29 -# else - ld %r12, 0(%r29) - ld %r2, 8(%r29) - ld %r11, 16(%r29) -# endif - /* Now do the call. */ - /* Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40, %r31 - - /* Get the address to call into CTR. */ - mtctr %r12 - /* Load all those argument registers. */ - ld %r3, -32-(8*8)(%r28) - ld %r4, -32-(7*8)(%r28) - ld %r5, -32-(6*8)(%r28) - ld %r6, -32-(5*8)(%r28) - bf- 5, 1f - ld %r7, -32-(4*8)(%r28) - ld %r8, -32-(3*8)(%r28) - ld %r9, -32-(2*8)(%r28) - ld %r10, -32-(1*8)(%r28) -1: - - /* Load all the FP registers. */ - bf- 6, 2f - lfd %f1, -32-(21*8)(%r28) - lfd %f2, -32-(20*8)(%r28) - lfd %f3, -32-(19*8)(%r28) - lfd %f4, -32-(18*8)(%r28) - lfd %f5, -32-(17*8)(%r28) - lfd %f6, -32-(16*8)(%r28) - lfd %f7, -32-(15*8)(%r28) - lfd %f8, -32-(14*8)(%r28) - lfd %f9, -32-(13*8)(%r28) - lfd %f10, -32-(12*8)(%r28) - lfd %f11, -32-(11*8)(%r28) - lfd %f12, -32-(10*8)(%r28) - lfd %f13, -32-(9*8)(%r28) -2: - - /* Make the call. */ - bctrl - - /* This must follow the call immediately, the unwinder - uses this to find out if r2 has been saved or not. */ -# if _CALL_ELF == 2 - ld %r2, 24(%r1) -# else - ld %r2, 40(%r1) -# endif - - /* Now, deal with the return value. */ - mtcrf 0x01, %r31 - bt 31, .Lstruct_return_value - bt 30, .Ldone_return_value - bt 29, .Lfp_return_value - std %r3, 0(%r30) - /* Fall through... */ - -.Ldone_return_value: - /* Restore the registers we used and return. */ - mr %r1, %r28 - ld %r0, 16(%r28) - ld %r28, -32(%r28) - mtlr %r0 - ld %r29, -24(%r1) - ld %r30, -16(%r1) - ld %r31, -8(%r1) - blr - -.Lfp_return_value: - bf 28, .Lfloat_return_value - stfd %f1, 0(%r30) - mtcrf 0x02, %r31 /* cr6 */ - bf 27, .Ldone_return_value - stfd %f2, 8(%r30) - b .Ldone_return_value -.Lfloat_return_value: - stfs %f1, 0(%r30) - b .Ldone_return_value - -.Lstruct_return_value: - bf 29, .Lsmall_struct - bf 28, .Lfloat_homog_return_value - stfd %f1, 0(%r30) - stfd %f2, 8(%r30) - stfd %f3, 16(%r30) - stfd %f4, 24(%r30) - stfd %f5, 32(%r30) - stfd %f6, 40(%r30) - stfd %f7, 48(%r30) - stfd %f8, 56(%r30) - b .Ldone_return_value - -.Lfloat_homog_return_value: - stfs %f1, 0(%r30) - stfs %f2, 4(%r30) - stfs %f3, 8(%r30) - stfs %f4, 12(%r30) - stfs %f5, 16(%r30) - stfs %f6, 20(%r30) - stfs %f7, 24(%r30) - stfs %f8, 28(%r30) - b .Ldone_return_value - -.Lsmall_struct: - std %r3, 0(%r30) - std %r4, 8(%r30) - b .Ldone_return_value - -.LFE1: - .long 0 - .byte 0,12,0,1,128,4,0,0 -# if _CALL_ELF == 2 - .size ffi_call_LINUX64,.-ffi_call_LINUX64 -# else -# ifdef _CALL_LINUX - .size ffi_call_LINUX64,.-.L.ffi_call_LINUX64 -# else - .size .ffi_call_LINUX64,.-.ffi_call_LINUX64 -# endif -# endif - - .section .eh_frame,EH_FRAME_FLAGS,@progbits -.Lframe1: - .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry -.LSCIE1: - .4byte 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version - .ascii "zR\0" # CIE Augmentation - .uleb128 0x1 # CIE Code Alignment Factor - .sleb128 -8 # CIE Data Alignment Factor - .byte 0x41 # CIE RA Column - .uleb128 0x1 # Augmentation size - .byte 0x14 # FDE Encoding (pcrel udata8) - .byte 0xc # DW_CFA_def_cfa - .uleb128 0x1 - .uleb128 0x0 - .align 3 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 # FDE Length -.LASFDE1: - .4byte .LASFDE1-.Lframe1 # FDE CIE offset - .8byte .LFB1-. # FDE initial location - .8byte .LFE1-.LFB1 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x2 # DW_CFA_advance_loc1 - .byte .LCFI0-.LFB1 - .byte 0xd # DW_CFA_def_cfa_register - .uleb128 0x1c - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x41 - .sleb128 -2 - .byte 0x9f # DW_CFA_offset, column 0x1f - .uleb128 0x1 - .byte 0x9e # DW_CFA_offset, column 0x1e - .uleb128 0x2 - .byte 0x9d # DW_CFA_offset, column 0x1d - .uleb128 0x3 - .byte 0x9c # DW_CFA_offset, column 0x1c - .uleb128 0x4 - .align 3 -.LEFDE1: - -#endif - -#if (defined __ELF__ && defined __linux__) || _CALL_ELF == 2 - .section .note.GNU-stack,"",@progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/linux64_closure.S b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/linux64_closure.S deleted file mode 100644 index 97421a43c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/linux64_closure.S +++ /dev/null @@ -1,392 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.h - Copyright (c) 2003 Jakub Jelinek - Copyright (c) 2008 Red Hat, Inc. - - PowerPC64 Assembly glue. - - 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. - ----------------------------------------------------------------------- */ -#define LIBFFI_ASM -#include -#include - - .file "linux64_closure.S" - -#ifdef POWERPC64 - FFI_HIDDEN (ffi_closure_LINUX64) - .globl ffi_closure_LINUX64 -# if _CALL_ELF == 2 - .text -ffi_closure_LINUX64: - addis %r2, %r12, .TOC.-ffi_closure_LINUX64@ha - addi %r2, %r2, .TOC.-ffi_closure_LINUX64@l - .localentry ffi_closure_LINUX64, . - ffi_closure_LINUX64 -# else - .section ".opd","aw" - .align 3 -ffi_closure_LINUX64: -# ifdef _CALL_LINUX - .quad .L.ffi_closure_LINUX64,.TOC.@tocbase,0 - .type ffi_closure_LINUX64,@function - .text -.L.ffi_closure_LINUX64: -# else - FFI_HIDDEN (.ffi_closure_LINUX64) - .globl .ffi_closure_LINUX64 - .quad .ffi_closure_LINUX64,.TOC.@tocbase,0 - .size ffi_closure_LINUX64,24 - .type .ffi_closure_LINUX64,@function - .text -.ffi_closure_LINUX64: -# endif -# endif - -# if _CALL_ELF == 2 -# 32 byte special reg save area + 64 byte parm save area -# + 64 byte retval area + 13*8 fpr save area + round to 16 -# define STACKFRAME 272 -# define PARMSAVE 32 -# define RETVAL PARMSAVE+64 -# else -# 48 bytes special reg save area + 64 bytes parm save area -# + 16 bytes retval area + 13*8 bytes fpr save area + round to 16 -# define STACKFRAME 240 -# define PARMSAVE 48 -# define RETVAL PARMSAVE+64 -# endif - -.LFB1: -# if _CALL_ELF == 2 - ld %r12, FFI_TRAMPOLINE_SIZE(%r11) # closure->cif - mflr %r0 - lwz %r12, 28(%r12) # cif->flags - mtcrf 0x40, %r12 - addi %r12, %r1, PARMSAVE - bt 7, .Lparmsave - # Our caller has not allocated a parameter save area. - # We need to allocate one here and use it to pass gprs to - # ffi_closure_helper_LINUX64. - addi %r12, %r1, -STACKFRAME+PARMSAVE -.Lparmsave: - std %r0, 16(%r1) - # Save general regs into parm save area - std %r3, 0(%r12) - std %r4, 8(%r12) - std %r5, 16(%r12) - std %r6, 24(%r12) - std %r7, 32(%r12) - std %r8, 40(%r12) - std %r9, 48(%r12) - std %r10, 56(%r12) - - # load up the pointer to the parm save area - mr %r5, %r12 -# else - # copy r2 to r11 and load TOC into r2 - mr %r11, %r2 - ld %r2, 16(%r11) - - mflr %r0 - # Save general regs into parm save area - # This is the parameter save area set up by our caller. - std %r3, PARMSAVE+0(%r1) - std %r4, PARMSAVE+8(%r1) - std %r5, PARMSAVE+16(%r1) - std %r6, PARMSAVE+24(%r1) - std %r7, PARMSAVE+32(%r1) - std %r8, PARMSAVE+40(%r1) - std %r9, PARMSAVE+48(%r1) - std %r10, PARMSAVE+56(%r1) - - std %r0, 16(%r1) - - # load up the pointer to the parm save area - addi %r5, %r1, PARMSAVE -# endif - - # next save fpr 1 to fpr 13 - stfd %f1, -104+(0*8)(%r1) - stfd %f2, -104+(1*8)(%r1) - stfd %f3, -104+(2*8)(%r1) - stfd %f4, -104+(3*8)(%r1) - stfd %f5, -104+(4*8)(%r1) - stfd %f6, -104+(5*8)(%r1) - stfd %f7, -104+(6*8)(%r1) - stfd %f8, -104+(7*8)(%r1) - stfd %f9, -104+(8*8)(%r1) - stfd %f10, -104+(9*8)(%r1) - stfd %f11, -104+(10*8)(%r1) - stfd %f12, -104+(11*8)(%r1) - stfd %f13, -104+(12*8)(%r1) - - # load up the pointer to the saved fpr registers */ - addi %r6, %r1, -104 - - # load up the pointer to the result storage - addi %r4, %r1, -STACKFRAME+RETVAL - - stdu %r1, -STACKFRAME(%r1) -.LCFI0: - - # get the context pointer from the trampoline - mr %r3, %r11 - - # make the call -# if defined _CALL_LINUX || _CALL_ELF == 2 - bl ffi_closure_helper_LINUX64 -# else - bl .ffi_closure_helper_LINUX64 -# endif -.Lret: - - # now r3 contains the return type - # so use it to look up in a table - # so we know how to deal with each type - - # look up the proper starting point in table - # by using return type as offset - ld %r0, STACKFRAME+16(%r1) - cmpldi %r3, FFI_V2_TYPE_SMALL_STRUCT - bge .Lsmall - mflr %r4 # move address of .Lret to r4 - sldi %r3, %r3, 4 # now multiply return type by 16 - addi %r4, %r4, .Lret_type0 - .Lret - add %r3, %r3, %r4 # add contents of table to table address - mtctr %r3 - bctr # jump to it - -# Each of the ret_typeX code fragments has to be exactly 16 bytes long -# (4 instructions). For cache effectiveness we align to a 16 byte boundary -# first. - .align 4 - -.Lret_type0: -# case FFI_TYPE_VOID - mtlr %r0 - addi %r1, %r1, STACKFRAME - blr - nop -# case FFI_TYPE_INT -# ifdef __LITTLE_ENDIAN__ - lwa %r3, RETVAL+0(%r1) -# else - lwa %r3, RETVAL+4(%r1) -# endif - mtlr %r0 - addi %r1, %r1, STACKFRAME - blr -# case FFI_TYPE_FLOAT - lfs %f1, RETVAL+0(%r1) - mtlr %r0 - addi %r1, %r1, STACKFRAME - blr -# case FFI_TYPE_DOUBLE - lfd %f1, RETVAL+0(%r1) - mtlr %r0 - addi %r1, %r1, STACKFRAME - blr -# case FFI_TYPE_LONGDOUBLE - lfd %f1, RETVAL+0(%r1) - mtlr %r0 - lfd %f2, RETVAL+8(%r1) - b .Lfinish -# case FFI_TYPE_UINT8 -# ifdef __LITTLE_ENDIAN__ - lbz %r3, RETVAL+0(%r1) -# else - lbz %r3, RETVAL+7(%r1) -# endif - mtlr %r0 - addi %r1, %r1, STACKFRAME - blr -# case FFI_TYPE_SINT8 -# ifdef __LITTLE_ENDIAN__ - lbz %r3, RETVAL+0(%r1) -# else - lbz %r3, RETVAL+7(%r1) -# endif - extsb %r3,%r3 - mtlr %r0 - b .Lfinish -# case FFI_TYPE_UINT16 -# ifdef __LITTLE_ENDIAN__ - lhz %r3, RETVAL+0(%r1) -# else - lhz %r3, RETVAL+6(%r1) -# endif - mtlr %r0 -.Lfinish: - addi %r1, %r1, STACKFRAME - blr -# case FFI_TYPE_SINT16 -# ifdef __LITTLE_ENDIAN__ - lha %r3, RETVAL+0(%r1) -# else - lha %r3, RETVAL+6(%r1) -# endif - mtlr %r0 - addi %r1, %r1, STACKFRAME - blr -# case FFI_TYPE_UINT32 -# ifdef __LITTLE_ENDIAN__ - lwz %r3, RETVAL+0(%r1) -# else - lwz %r3, RETVAL+4(%r1) -# endif - mtlr %r0 - addi %r1, %r1, STACKFRAME - blr -# case FFI_TYPE_SINT32 -# ifdef __LITTLE_ENDIAN__ - lwa %r3, RETVAL+0(%r1) -# else - lwa %r3, RETVAL+4(%r1) -# endif - mtlr %r0 - addi %r1, %r1, STACKFRAME - blr -# case FFI_TYPE_UINT64 - ld %r3, RETVAL+0(%r1) - mtlr %r0 - addi %r1, %r1, STACKFRAME - blr -# case FFI_TYPE_SINT64 - ld %r3, RETVAL+0(%r1) - mtlr %r0 - addi %r1, %r1, STACKFRAME - blr -# case FFI_TYPE_STRUCT - mtlr %r0 - addi %r1, %r1, STACKFRAME - blr - nop -# case FFI_TYPE_POINTER - ld %r3, RETVAL+0(%r1) - mtlr %r0 - addi %r1, %r1, STACKFRAME - blr -# case FFI_V2_TYPE_FLOAT_HOMOG - lfs %f1, RETVAL+0(%r1) - lfs %f2, RETVAL+4(%r1) - lfs %f3, RETVAL+8(%r1) - b .Lmorefloat -# case FFI_V2_TYPE_DOUBLE_HOMOG - lfd %f1, RETVAL+0(%r1) - lfd %f2, RETVAL+8(%r1) - lfd %f3, RETVAL+16(%r1) - lfd %f4, RETVAL+24(%r1) - mtlr %r0 - lfd %f5, RETVAL+32(%r1) - lfd %f6, RETVAL+40(%r1) - lfd %f7, RETVAL+48(%r1) - lfd %f8, RETVAL+56(%r1) - addi %r1, %r1, STACKFRAME - blr -.Lmorefloat: - lfs %f4, RETVAL+12(%r1) - mtlr %r0 - lfs %f5, RETVAL+16(%r1) - lfs %f6, RETVAL+20(%r1) - lfs %f7, RETVAL+24(%r1) - lfs %f8, RETVAL+28(%r1) - addi %r1, %r1, STACKFRAME - blr -.Lsmall: -# ifdef __LITTLE_ENDIAN__ - ld %r3,RETVAL+0(%r1) - mtlr %r0 - ld %r4,RETVAL+8(%r1) - addi %r1, %r1, STACKFRAME - blr -# else - # A struct smaller than a dword is returned in the low bits of r3 - # ie. right justified. Larger structs are passed left justified - # in r3 and r4. The return value area on the stack will have - # the structs as they are usually stored in memory. - cmpldi %r3, FFI_V2_TYPE_SMALL_STRUCT + 7 # size 8 bytes? - neg %r5, %r3 - ld %r3,RETVAL+0(%r1) - blt .Lsmalldown - mtlr %r0 - ld %r4,RETVAL+8(%r1) - addi %r1, %r1, STACKFRAME - blr -.Lsmalldown: - addi %r5, %r5, FFI_V2_TYPE_SMALL_STRUCT + 7 - mtlr %r0 - sldi %r5, %r5, 3 - addi %r1, %r1, STACKFRAME - srd %r3, %r3, %r5 - blr -# endif - -.LFE1: - .long 0 - .byte 0,12,0,1,128,0,0,0 -# if _CALL_ELF == 2 - .size ffi_closure_LINUX64,.-ffi_closure_LINUX64 -# else -# ifdef _CALL_LINUX - .size ffi_closure_LINUX64,.-.L.ffi_closure_LINUX64 -# else - .size .ffi_closure_LINUX64,.-.ffi_closure_LINUX64 -# endif -# endif - - .section .eh_frame,EH_FRAME_FLAGS,@progbits -.Lframe1: - .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry -.LSCIE1: - .4byte 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version - .ascii "zR\0" # CIE Augmentation - .uleb128 0x1 # CIE Code Alignment Factor - .sleb128 -8 # CIE Data Alignment Factor - .byte 0x41 # CIE RA Column - .uleb128 0x1 # Augmentation size - .byte 0x14 # FDE Encoding (pcrel udata8) - .byte 0xc # DW_CFA_def_cfa - .uleb128 0x1 - .uleb128 0x0 - .align 3 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 # FDE Length -.LASFDE1: - .4byte .LASFDE1-.Lframe1 # FDE CIE offset - .8byte .LFB1-. # FDE initial location - .8byte .LFE1-.LFB1 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x2 # DW_CFA_advance_loc1 - .byte .LCFI0-.LFB1 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 STACKFRAME - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x41 - .sleb128 -2 - .align 3 -.LEFDE1: - -#endif - -#if (defined __ELF__ && defined __linux__) || _CALL_ELF == 2 - .section .note.GNU-stack,"",@progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ppc_closure.S b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ppc_closure.S deleted file mode 100644 index 075922cbb..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/ppc_closure.S +++ /dev/null @@ -1,384 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.h - Copyright (c) 2003 Jakub Jelinek - Copyright (c) 2008 Red Hat, Inc. - - PowerPC Assembly glue. - - 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. - ----------------------------------------------------------------------- */ -#define LIBFFI_ASM -#include -#include -#include - - .file "ppc_closure.S" - -#ifndef POWERPC64 - -ENTRY(ffi_closure_SYSV) -.LFB1: - stwu %r1,-144(%r1) -.LCFI0: - mflr %r0 -.LCFI1: - stw %r0,148(%r1) - -# we want to build up an areas for the parameters passed -# in registers (both floating point and integer) - - # so first save gpr 3 to gpr 10 (aligned to 4) - stw %r3, 16(%r1) - stw %r4, 20(%r1) - stw %r5, 24(%r1) - stw %r6, 28(%r1) - stw %r7, 32(%r1) - stw %r8, 36(%r1) - stw %r9, 40(%r1) - stw %r10,44(%r1) - -#ifndef __NO_FPRS__ - # next save fpr 1 to fpr 8 (aligned to 8) - stfd %f1, 48(%r1) - stfd %f2, 56(%r1) - stfd %f3, 64(%r1) - stfd %f4, 72(%r1) - stfd %f5, 80(%r1) - stfd %f6, 88(%r1) - stfd %f7, 96(%r1) - stfd %f8, 104(%r1) -#endif - - # set up registers for the routine that actually does the work - # get the context pointer from the trampoline - mr %r3,%r11 - - # now load up the pointer to the result storage - addi %r4,%r1,112 - - # now load up the pointer to the saved gpr registers - addi %r5,%r1,16 - - # now load up the pointer to the saved fpr registers */ - addi %r6,%r1,48 - - # now load up the pointer to the outgoing parameter - # stack in the previous frame - # i.e. the previous frame pointer + 8 - addi %r7,%r1,152 - - # make the call - bl ffi_closure_helper_SYSV@local -.Lret: - # now r3 contains the return type - # so use it to look up in a table - # so we know how to deal with each type - - # look up the proper starting point in table - # by using return type as offset - - mflr %r4 # move address of .Lret to r4 - slwi %r3,%r3,4 # now multiply return type by 16 - addi %r4, %r4, .Lret_type0 - .Lret - lwz %r0,148(%r1) - add %r3,%r3,%r4 # add contents of table to table address - mtctr %r3 - bctr # jump to it -.LFE1: - -# Each of the ret_typeX code fragments has to be exactly 16 bytes long -# (4 instructions). For cache effectiveness we align to a 16 byte boundary -# first. - .align 4 -# case FFI_TYPE_VOID -.Lret_type0: - mtlr %r0 - addi %r1,%r1,144 - blr - nop - -# case FFI_TYPE_INT - lwz %r3,112+0(%r1) - mtlr %r0 -.Lfinish: - addi %r1,%r1,144 - blr - -# case FFI_TYPE_FLOAT -#ifndef __NO_FPRS__ - lfs %f1,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 -#else - nop - nop - nop -#endif - blr - -# case FFI_TYPE_DOUBLE -#ifndef __NO_FPRS__ - lfd %f1,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 -#else - nop - nop - nop -#endif - blr - -# case FFI_TYPE_LONGDOUBLE -#ifndef __NO_FPRS__ - lfd %f1,112+0(%r1) - lfd %f2,112+8(%r1) - mtlr %r0 - b .Lfinish -#else - nop - nop - nop - blr -#endif - -# case FFI_TYPE_UINT8 -#ifdef __LITTLE_ENDIAN__ - lbz %r3,112+0(%r1) -#else - lbz %r3,112+3(%r1) -#endif - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_SINT8 -#ifdef __LITTLE_ENDIAN__ - lbz %r3,112+0(%r1) -#else - lbz %r3,112+3(%r1) -#endif - extsb %r3,%r3 - mtlr %r0 - b .Lfinish - -# case FFI_TYPE_UINT16 -#ifdef __LITTLE_ENDIAN__ - lhz %r3,112+0(%r1) -#else - lhz %r3,112+2(%r1) -#endif - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_SINT16 -#ifdef __LITTLE_ENDIAN__ - lha %r3,112+0(%r1) -#else - lha %r3,112+2(%r1) -#endif - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_UINT32 - lwz %r3,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_SINT32 - lwz %r3,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_UINT64 - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) - mtlr %r0 - b .Lfinish - -# case FFI_TYPE_SINT64 - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) - mtlr %r0 - b .Lfinish - -# case FFI_TYPE_STRUCT - mtlr %r0 - addi %r1,%r1,144 - blr - nop - -# case FFI_TYPE_POINTER - lwz %r3,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_UINT128 - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) - lwz %r5,112+8(%r1) - b .Luint128 - -# The return types below are only used when the ABI type is FFI_SYSV. -# case FFI_SYSV_TYPE_SMALL_STRUCT + 1. One byte struct. - lbz %r3,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 2. Two byte struct. - lhz %r3,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 3. Three byte struct. - lwz %r3,112+0(%r1) -#ifdef __LITTLE_ENDIAN__ - mtlr %r0 - addi %r1,%r1,144 - blr -#else - srwi %r3,%r3,8 - mtlr %r0 - b .Lfinish -#endif - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 4. Four byte struct. - lwz %r3,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 5. Five byte struct. - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) -#ifdef __LITTLE_ENDIAN__ - mtlr %r0 - b .Lfinish -#else - li %r5,24 - b .Lstruct567 -#endif - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 6. Six byte struct. - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) -#ifdef __LITTLE_ENDIAN__ - mtlr %r0 - b .Lfinish -#else - li %r5,16 - b .Lstruct567 -#endif - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 7. Seven byte struct. - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) -#ifdef __LITTLE_ENDIAN__ - mtlr %r0 - b .Lfinish -#else - li %r5,8 - b .Lstruct567 -#endif - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 8. Eight byte struct. - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) - mtlr %r0 - b .Lfinish - -#ifndef __LITTLE_ENDIAN__ -.Lstruct567: - subfic %r6,%r5,32 - srw %r4,%r4,%r5 - slw %r6,%r3,%r6 - srw %r3,%r3,%r5 - or %r4,%r6,%r4 - mtlr %r0 - addi %r1,%r1,144 - blr -#endif - -.Luint128: - lwz %r6,112+12(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -END(ffi_closure_SYSV) - - .section ".eh_frame",EH_FRAME_FLAGS,@progbits -.Lframe1: - .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry -.LSCIE1: - .4byte 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version -#if defined _RELOCATABLE || defined __PIC__ - .ascii "zR\0" # CIE Augmentation -#else - .ascii "\0" # CIE Augmentation -#endif - .uleb128 0x1 # CIE Code Alignment Factor - .sleb128 -4 # CIE Data Alignment Factor - .byte 0x41 # CIE RA Column -#if defined _RELOCATABLE || defined __PIC__ - .uleb128 0x1 # Augmentation size - .byte 0x1b # FDE Encoding (pcrel sdata4) -#endif - .byte 0xc # DW_CFA_def_cfa - .uleb128 0x1 - .uleb128 0x0 - .align 2 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 # FDE Length -.LASFDE1: - .4byte .LASFDE1-.Lframe1 # FDE CIE offset -#if defined _RELOCATABLE || defined __PIC__ - .4byte .LFB1-. # FDE initial location -#else - .4byte .LFB1 # FDE initial location -#endif - .4byte .LFE1-.LFB1 # FDE address range -#if defined _RELOCATABLE || defined __PIC__ - .uleb128 0x0 # Augmentation size -#endif - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI0-.LFB1 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 144 - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI1-.LCFI0 - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x41 - .sleb128 -1 - .align 2 -.LEFDE1: - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/sysv.S deleted file mode 100644 index fed2380c9..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/powerpc/sysv.S +++ /dev/null @@ -1,220 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 1998 Geoffrey Keating - Copyright (C) 2007 Free Software Foundation, Inc - - PowerPC Assembly glue. - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#include - -#ifndef POWERPC64 - .globl ffi_prep_args_SYSV -ENTRY(ffi_call_SYSV) -.LFB1: - /* Save the old stack pointer as AP. */ - mr %r8,%r1 - -.LCFI0: - /* Allocate the stack space we need. */ - stwux %r1,%r1,%r4 - /* Save registers we use. */ - mflr %r9 - stw %r28,-16(%r8) -.LCFI1: - stw %r29,-12(%r8) -.LCFI2: - stw %r30, -8(%r8) -.LCFI3: - stw %r31, -4(%r8) -.LCFI4: - stw %r9, 4(%r8) -.LCFI5: - - /* Save arguments over call... */ - mr %r31,%r5 /* flags, */ - mr %r30,%r6 /* rvalue, */ - mr %r29,%r7 /* function address, */ - mr %r28,%r8 /* our AP. */ -.LCFI6: - - /* Call ffi_prep_args_SYSV. */ - mr %r4,%r1 - bl ffi_prep_args_SYSV@local - - /* Now do the call. */ - /* Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40,%r31 - /* Get the address to call into CTR. */ - mtctr %r29 - /* Load all those argument registers. */ - lwz %r3,-16-(8*4)(%r28) - lwz %r4,-16-(7*4)(%r28) - lwz %r5,-16-(6*4)(%r28) - lwz %r6,-16-(5*4)(%r28) - bf- 5,1f - nop - lwz %r7,-16-(4*4)(%r28) - lwz %r8,-16-(3*4)(%r28) - lwz %r9,-16-(2*4)(%r28) - lwz %r10,-16-(1*4)(%r28) - nop -1: - -#ifndef __NO_FPRS__ - /* Load all the FP registers. */ - bf- 6,2f - lfd %f1,-16-(8*4)-(8*8)(%r28) - lfd %f2,-16-(8*4)-(7*8)(%r28) - lfd %f3,-16-(8*4)-(6*8)(%r28) - lfd %f4,-16-(8*4)-(5*8)(%r28) - nop - lfd %f5,-16-(8*4)-(4*8)(%r28) - lfd %f6,-16-(8*4)-(3*8)(%r28) - lfd %f7,-16-(8*4)-(2*8)(%r28) - lfd %f8,-16-(8*4)-(1*8)(%r28) -#endif -2: - - /* Make the call. */ - bctrl - - /* Now, deal with the return value. */ - mtcrf 0x01,%r31 /* cr7 */ - bt- 31,L(small_struct_return_value) - bt- 30,L(done_return_value) -#ifndef __NO_FPRS__ - bt- 29,L(fp_return_value) -#endif - stw %r3,0(%r30) - bf+ 28,L(done_return_value) - stw %r4,4(%r30) - mtcrf 0x02,%r31 /* cr6 */ - bf 27,L(done_return_value) - stw %r5,8(%r30) - stw %r6,12(%r30) - /* Fall through... */ - -L(done_return_value): - /* Restore the registers we used and return. */ - lwz %r9, 4(%r28) - lwz %r31, -4(%r28) - mtlr %r9 - lwz %r30, -8(%r28) - lwz %r29,-12(%r28) - lwz %r28,-16(%r28) - lwz %r1,0(%r1) - blr - -#ifndef __NO_FPRS__ -L(fp_return_value): - bf 28,L(float_return_value) - stfd %f1,0(%r30) - mtcrf 0x02,%r31 /* cr6 */ - bf 27,L(done_return_value) - stfd %f2,8(%r30) - b L(done_return_value) -L(float_return_value): - stfs %f1,0(%r30) - b L(done_return_value) -#endif - -L(small_struct_return_value): - /* - * The C code always allocates a properly-aligned 8-byte bounce - * buffer to make this assembly code very simple. Just write out - * r3 and r4 to the buffer to allow the C code to handle the rest. - */ - stw %r3, 0(%r30) - stw %r4, 4(%r30) - b L(done_return_value) - -.LFE1: -END(ffi_call_SYSV) - - .section ".eh_frame",EH_FRAME_FLAGS,@progbits -.Lframe1: - .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ -.LSCIE1: - .4byte 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ -#if defined _RELOCATABLE || defined __PIC__ - .ascii "zR\0" /* CIE Augmentation */ -#else - .ascii "\0" /* CIE Augmentation */ -#endif - .uleb128 0x1 /* CIE Code Alignment Factor */ - .sleb128 -4 /* CIE Data Alignment Factor */ - .byte 0x41 /* CIE RA Column */ -#if defined _RELOCATABLE || defined __PIC__ - .uleb128 0x1 /* Augmentation size */ - .byte 0x1b /* FDE Encoding (pcrel sdata4) */ -#endif - .byte 0xc /* DW_CFA_def_cfa */ - .uleb128 0x1 - .uleb128 0x0 - .align 2 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 /* FDE Length */ -.LASFDE1: - .4byte .LASFDE1-.Lframe1 /* FDE CIE offset */ -#if defined _RELOCATABLE || defined __PIC__ - .4byte .LFB1-. /* FDE initial location */ -#else - .4byte .LFB1 /* FDE initial location */ -#endif - .4byte .LFE1-.LFB1 /* FDE address range */ -#if defined _RELOCATABLE || defined __PIC__ - .uleb128 0x0 /* Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI0-.LFB1 - .byte 0xd /* DW_CFA_def_cfa_register */ - .uleb128 0x08 - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI5-.LCFI0 - .byte 0x11 /* DW_CFA_offset_extended_sf */ - .uleb128 0x41 - .sleb128 -1 - .byte 0x9f /* DW_CFA_offset, column 0x1f */ - .uleb128 0x1 - .byte 0x9e /* DW_CFA_offset, column 0x1e */ - .uleb128 0x2 - .byte 0x9d /* DW_CFA_offset, column 0x1d */ - .uleb128 0x3 - .byte 0x9c /* DW_CFA_offset, column 0x1c */ - .uleb128 0x4 - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI6-.LCFI5 - .byte 0xd /* DW_CFA_def_cfa_register */ - .uleb128 0x1c - .align 2 -.LEFDE1: - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/prep_cif.c b/ruby/ext/fiddle/libffi-3.2.1/src/prep_cif.c deleted file mode 100644 index be5eae379..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/prep_cif.c +++ /dev/null @@ -1,253 +0,0 @@ -/* ----------------------------------------------------------------------- - prep_cif.c - Copyright (c) 2011, 2012 Anthony Green - Copyright (c) 1996, 1998, 2007 Red Hat, 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: - - 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. - ----------------------------------------------------------------------- */ - -#include -#include -#include - -/* Round up to FFI_SIZEOF_ARG. */ - -#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) - -/* Perform machine independent initialization of aggregate type - specifications. */ - -static ffi_status initialize_aggregate(ffi_type *arg) -{ - ffi_type **ptr; - - if (UNLIKELY(arg == NULL || arg->elements == NULL)) - return FFI_BAD_TYPEDEF; - - arg->size = 0; - arg->alignment = 0; - - ptr = &(arg->elements[0]); - - if (UNLIKELY(ptr == 0)) - return FFI_BAD_TYPEDEF; - - while ((*ptr) != NULL) - { - if (UNLIKELY(((*ptr)->size == 0) - && (initialize_aggregate((*ptr)) != FFI_OK))) - return FFI_BAD_TYPEDEF; - - /* Perform a sanity check on the argument type */ - FFI_ASSERT_VALID_TYPE(*ptr); - - arg->size = ALIGN(arg->size, (*ptr)->alignment); - arg->size += (*ptr)->size; - - arg->alignment = (arg->alignment > (*ptr)->alignment) ? - arg->alignment : (*ptr)->alignment; - - ptr++; - } - - /* Structure size includes tail padding. This is important for - structures that fit in one register on ABIs like the PowerPC64 - Linux ABI that right justify small structs in a register. - It's also needed for nested structure layout, for example - struct A { long a; char b; }; struct B { struct A x; char y; }; - should find y at an offset of 2*sizeof(long) and result in a - total size of 3*sizeof(long). */ - arg->size = ALIGN (arg->size, arg->alignment); - - /* On some targets, the ABI defines that structures have an additional - alignment beyond the "natural" one based on their elements. */ -#ifdef FFI_AGGREGATE_ALIGNMENT - if (FFI_AGGREGATE_ALIGNMENT > arg->alignment) - arg->alignment = FFI_AGGREGATE_ALIGNMENT; -#endif - - if (arg->size == 0) - return FFI_BAD_TYPEDEF; - else - return FFI_OK; -} - -#ifndef __CRIS__ -/* The CRIS ABI specifies structure elements to have byte - alignment only, so it completely overrides this functions, - which assumes "natural" alignment and padding. */ - -/* Perform machine independent ffi_cif preparation, then call - machine dependent routine. */ - -/* For non variadic functions isvariadic should be 0 and - nfixedargs==ntotalargs. - - For variadic calls, isvariadic should be 1 and nfixedargs - and ntotalargs set as appropriate. nfixedargs must always be >=1 */ - - -ffi_status FFI_HIDDEN ffi_prep_cif_core(ffi_cif *cif, ffi_abi abi, - unsigned int isvariadic, - unsigned int nfixedargs, - unsigned int ntotalargs, - ffi_type *rtype, ffi_type **atypes) -{ - unsigned bytes = 0; - unsigned int i; - ffi_type **ptr; - - FFI_ASSERT(cif != NULL); - FFI_ASSERT((!isvariadic) || (nfixedargs >= 1)); - FFI_ASSERT(nfixedargs <= ntotalargs); - - if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI)) - return FFI_BAD_ABI; - - cif->abi = abi; - cif->arg_types = atypes; - cif->nargs = ntotalargs; - cif->rtype = rtype; - - cif->flags = 0; - -#if HAVE_LONG_DOUBLE_VARIANT - ffi_prep_types (abi); -#endif - - /* Initialize the return type if necessary */ - if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) - return FFI_BAD_TYPEDEF; - -#ifndef FFI_TARGET_HAS_COMPLEX_TYPE - if (rtype->type == FFI_TYPE_COMPLEX) - abort(); -#endif - /* Perform a sanity check on the return type */ - FFI_ASSERT_VALID_TYPE(cif->rtype); - - /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ -#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION - /* Make space for the return structure pointer */ - if (cif->rtype->type == FFI_TYPE_STRUCT -#ifdef SPARC - && (cif->abi != FFI_V9 || cif->rtype->size > 32) -#endif -#ifdef TILE - && (cif->rtype->size > 10 * FFI_SIZEOF_ARG) -#endif -#ifdef XTENSA - && (cif->rtype->size > 16) -#endif -#ifdef NIOS2 - && (cif->rtype->size > 8) -#endif - ) - bytes = STACK_ARG_SIZE(sizeof(void*)); -#endif - - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - - /* Initialize any uninitialized aggregate type definitions */ - if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) - return FFI_BAD_TYPEDEF; - -#ifndef FFI_TARGET_HAS_COMPLEX_TYPE - if ((*ptr)->type == FFI_TYPE_COMPLEX) - abort(); -#endif - /* Perform a sanity check on the argument type, do this - check after the initialization. */ - FFI_ASSERT_VALID_TYPE(*ptr); - -#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -#ifdef SPARC - if (((*ptr)->type == FFI_TYPE_STRUCT - && ((*ptr)->size > 16 || cif->abi != FFI_V9)) - || ((*ptr)->type == FFI_TYPE_LONGDOUBLE - && cif->abi != FFI_V9)) - bytes += sizeof(void*); - else -#endif - { - /* Add any padding if necessary */ - if (((*ptr)->alignment - 1) & bytes) - bytes = (unsigned)ALIGN(bytes, (*ptr)->alignment); - -#ifdef TILE - if (bytes < 10 * FFI_SIZEOF_ARG && - bytes + STACK_ARG_SIZE((*ptr)->size) > 10 * FFI_SIZEOF_ARG) - { - /* An argument is never split between the 10 parameter - registers and the stack. */ - bytes = 10 * FFI_SIZEOF_ARG; - } -#endif -#ifdef XTENSA - if (bytes <= 6*4 && bytes + STACK_ARG_SIZE((*ptr)->size) > 6*4) - bytes = 6*4; -#endif - - bytes += STACK_ARG_SIZE((*ptr)->size); - } -#endif - } - - cif->bytes = bytes; - - /* Perform machine dependent cif processing */ -#ifdef FFI_TARGET_SPECIFIC_VARIADIC - if (isvariadic) - return ffi_prep_cif_machdep_var(cif, nfixedargs, ntotalargs); -#endif - - return ffi_prep_cif_machdep(cif); -} -#endif /* not __CRIS__ */ - -ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, - ffi_type *rtype, ffi_type **atypes) -{ - return ffi_prep_cif_core(cif, abi, 0, nargs, nargs, rtype, atypes); -} - -ffi_status ffi_prep_cif_var(ffi_cif *cif, - ffi_abi abi, - unsigned int nfixedargs, - unsigned int ntotalargs, - ffi_type *rtype, - ffi_type **atypes) -{ - return ffi_prep_cif_core(cif, abi, 1, nfixedargs, ntotalargs, rtype, atypes); -} - -#if FFI_CLOSURES - -ffi_status -ffi_prep_closure (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data) -{ - return ffi_prep_closure_loc (closure, cif, fun, user_data, closure); -} - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/raw_api.c b/ruby/ext/fiddle/libffi-3.2.1/src/raw_api.c deleted file mode 100644 index 276cb2280..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/raw_api.c +++ /dev/null @@ -1,267 +0,0 @@ -/* ----------------------------------------------------------------------- - raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. - - Author: Kresten Krab Thorup - - 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. - ----------------------------------------------------------------------- */ - -/* This file defines generic functions for use with the raw api. */ - -#include -#include - -#if !FFI_NO_RAW_API - -size_t -ffi_raw_size (ffi_cif *cif) -{ - size_t result = 0; - int i; - - ffi_type **at = cif->arg_types; - - for (i = cif->nargs-1; i >= 0; i--, at++) - { -#if !FFI_NO_STRUCTS - if ((*at)->type == FFI_TYPE_STRUCT) - result += ALIGN (sizeof (void*), FFI_SIZEOF_ARG); - else -#endif - result += ALIGN ((*at)->size, FFI_SIZEOF_ARG); - } - - return result; -} - - -void -ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args) -{ - unsigned i; - ffi_type **tp = cif->arg_types; - -#if WORDS_BIGENDIAN - - for (i = 0; i < cif->nargs; i++, tp++, args++) - { - switch ((*tp)->type) - { - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 1); - break; - - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 2); - break; - -#if FFI_SIZEOF_ARG >= 4 - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 4); - break; -#endif - -#if !FFI_NO_STRUCTS - case FFI_TYPE_STRUCT: - *args = (raw++)->ptr; - break; -#endif - - case FFI_TYPE_COMPLEX: - *args = (raw++)->ptr; - break; - - case FFI_TYPE_POINTER: - *args = (void*) &(raw++)->ptr; - break; - - default: - *args = raw; - raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - } - } - -#else /* WORDS_BIGENDIAN */ - -#if !PDP - - /* then assume little endian */ - for (i = 0; i < cif->nargs; i++, tp++, args++) - { -#if !FFI_NO_STRUCTS - if ((*tp)->type == FFI_TYPE_STRUCT) - { - *args = (raw++)->ptr; - } - else -#endif - if ((*tp)->type == FFI_TYPE_COMPLEX) - { - *args = (raw++)->ptr; - } - else - { - *args = (void*) raw; - raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*); - } - } - -#else -#error "pdp endian not supported" -#endif /* ! PDP */ - -#endif /* WORDS_BIGENDIAN */ -} - -void -ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw) -{ - unsigned i; - ffi_type **tp = cif->arg_types; - - for (i = 0; i < cif->nargs; i++, tp++, args++) - { - switch ((*tp)->type) - { - case FFI_TYPE_UINT8: - (raw++)->uint = *(UINT8*) (*args); - break; - - case FFI_TYPE_SINT8: - (raw++)->sint = *(SINT8*) (*args); - break; - - case FFI_TYPE_UINT16: - (raw++)->uint = *(UINT16*) (*args); - break; - - case FFI_TYPE_SINT16: - (raw++)->sint = *(SINT16*) (*args); - break; - -#if FFI_SIZEOF_ARG >= 4 - case FFI_TYPE_UINT32: - (raw++)->uint = *(UINT32*) (*args); - break; - - case FFI_TYPE_SINT32: - (raw++)->sint = *(SINT32*) (*args); - break; -#endif - -#if !FFI_NO_STRUCTS - case FFI_TYPE_STRUCT: - (raw++)->ptr = *args; - break; -#endif - - case FFI_TYPE_COMPLEX: - (raw++)->ptr = *args; - break; - - case FFI_TYPE_POINTER: - (raw++)->ptr = **(void***) args; - break; - - default: - memcpy ((void*) raw->data, (void*)*args, (*tp)->size); - raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - } - } -} - -#if !FFI_NATIVE_RAW_API - - -/* This is a generic definition of ffi_raw_call, to be used if the - * native system does not provide a machine-specific implementation. - * Having this, allows code to be written for the raw API, without - * the need for system-specific code to handle input in that format; - * these following couple of functions will handle the translation forth - * and back automatically. */ - -void ffi_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *raw) -{ - void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); - ffi_raw_to_ptrarray (cif, raw, avalue); - ffi_call (cif, fn, rvalue, avalue); -} - -#if FFI_CLOSURES /* base system provides closures */ - -static void -ffi_translate_args (ffi_cif *cif, void *rvalue, - void **avalue, void *user_data) -{ - ffi_raw *raw = (ffi_raw*)alloca (ffi_raw_size (cif)); - ffi_raw_closure *cl = (ffi_raw_closure*)user_data; - - ffi_ptrarray_to_raw (cif, avalue, raw); - (*cl->fun) (cif, rvalue, raw, cl->user_data); -} - -ffi_status -ffi_prep_raw_closure_loc (ffi_raw_closure* cl, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data, - void *codeloc) -{ - ffi_status status; - - status = ffi_prep_closure_loc ((ffi_closure*) cl, - cif, - &ffi_translate_args, - codeloc, - codeloc); - if (status == FFI_OK) - { - cl->fun = fun; - cl->user_data = user_data; - } - - return status; -} - -#endif /* FFI_CLOSURES */ -#endif /* !FFI_NATIVE_RAW_API */ - -#if FFI_CLOSURES - -/* Again, here is the generic version of ffi_prep_raw_closure, which - * will install an intermediate "hub" for translation of arguments from - * the pointer-array format, to the raw format */ - -ffi_status -ffi_prep_raw_closure (ffi_raw_closure* cl, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data) -{ - return ffi_prep_raw_closure_loc (cl, cif, fun, user_data, cl); -} - -#endif /* FFI_CLOSURES */ - -#endif /* !FFI_NO_RAW_API */ diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/s390/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/s390/ffi.c deleted file mode 100644 index 520ec7c61..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/s390/ffi.c +++ /dev/null @@ -1,792 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2000, 2007 Software AG - Copyright (c) 2008 Red Hat, Inc - - S390 Foreign Function Interface - - 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 AUTHOR 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. - ----------------------------------------------------------------------- */ -/*====================================================================*/ -/* Includes */ -/* -------- */ -/*====================================================================*/ - -#include -#include - -#include -#include - -/*====================== End of Includes =============================*/ - -/*====================================================================*/ -/* Defines */ -/* ------- */ -/*====================================================================*/ - -/* Maximum number of GPRs available for argument passing. */ -#define MAX_GPRARGS 5 - -/* Maximum number of FPRs available for argument passing. */ -#ifdef __s390x__ -#define MAX_FPRARGS 4 -#else -#define MAX_FPRARGS 2 -#endif - -/* Round to multiple of 16. */ -#define ROUND_SIZE(size) (((size) + 15) & ~15) - -/* If these values change, sysv.S must be adapted! */ -#define FFI390_RET_VOID 0 -#define FFI390_RET_STRUCT 1 -#define FFI390_RET_FLOAT 2 -#define FFI390_RET_DOUBLE 3 -#define FFI390_RET_INT32 4 -#define FFI390_RET_INT64 5 - -/*===================== End of Defines ===============================*/ - -/*====================================================================*/ -/* Prototypes */ -/* ---------- */ -/*====================================================================*/ - -static void ffi_prep_args (unsigned char *, extended_cif *); -void -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2) -__attribute__ ((visibility ("hidden"))) -#endif -ffi_closure_helper_SYSV (ffi_closure *, unsigned long *, - unsigned long long *, unsigned long *); - -/*====================== End of Prototypes ===========================*/ - -/*====================================================================*/ -/* Externals */ -/* --------- */ -/*====================================================================*/ - -extern void ffi_call_SYSV(unsigned, - extended_cif *, - void (*)(unsigned char *, extended_cif *), - unsigned, - void *, - void (*fn)(void)); - -extern void ffi_closure_SYSV(void); - -/*====================== End of Externals ============================*/ - -/*====================================================================*/ -/* */ -/* Name - ffi_check_struct_type. */ -/* */ -/* Function - Determine if a structure can be passed within a */ -/* general purpose or floating point register. */ -/* */ -/*====================================================================*/ - -static int -ffi_check_struct_type (ffi_type *arg) -{ - size_t size = arg->size; - - /* If the struct has just one element, look at that element - to find out whether to consider the struct as floating point. */ - while (arg->type == FFI_TYPE_STRUCT - && arg->elements[0] && !arg->elements[1]) - arg = arg->elements[0]; - - /* Structs of size 1, 2, 4, and 8 are passed in registers, - just like the corresponding int/float types. */ - switch (size) - { - case 1: - return FFI_TYPE_UINT8; - - case 2: - return FFI_TYPE_UINT16; - - case 4: - if (arg->type == FFI_TYPE_FLOAT) - return FFI_TYPE_FLOAT; - else - return FFI_TYPE_UINT32; - - case 8: - if (arg->type == FFI_TYPE_DOUBLE) - return FFI_TYPE_DOUBLE; - else - return FFI_TYPE_UINT64; - - default: - break; - } - - /* Other structs are passed via a pointer to the data. */ - return FFI_TYPE_POINTER; -} - -/*======================== End of Routine ============================*/ - -/*====================================================================*/ -/* */ -/* Name - ffi_prep_args. */ -/* */ -/* Function - Prepare parameters for call to function. */ -/* */ -/* ffi_prep_args is called by the assembly routine once stack space */ -/* has been allocated for the function's arguments. */ -/* */ -/*====================================================================*/ - -static void -ffi_prep_args (unsigned char *stack, extended_cif *ecif) -{ - /* The stack space will be filled with those areas: - - FPR argument register save area (highest addresses) - GPR argument register save area - temporary struct copies - overflow argument area (lowest addresses) - - We set up the following pointers: - - p_fpr: bottom of the FPR area (growing upwards) - p_gpr: bottom of the GPR area (growing upwards) - p_ov: bottom of the overflow area (growing upwards) - p_struct: top of the struct copy area (growing downwards) - - All areas are kept aligned to twice the word size. */ - - int gpr_off = ecif->cif->bytes; - int fpr_off = gpr_off + ROUND_SIZE (MAX_GPRARGS * sizeof (long)); - - unsigned long long *p_fpr = (unsigned long long *)(stack + fpr_off); - unsigned long *p_gpr = (unsigned long *)(stack + gpr_off); - unsigned char *p_struct = (unsigned char *)p_gpr; - unsigned long *p_ov = (unsigned long *)stack; - - int n_fpr = 0; - int n_gpr = 0; - int n_ov = 0; - - ffi_type **ptr; - void **p_argv = ecif->avalue; - int i; - - /* If we returning a structure then we set the first parameter register - to the address of where we are returning this structure. */ - - if (ecif->cif->flags == FFI390_RET_STRUCT) - p_gpr[n_gpr++] = (unsigned long) ecif->rvalue; - - /* Now for the arguments. */ - - for (ptr = ecif->cif->arg_types, i = ecif->cif->nargs; - i > 0; - i--, ptr++, p_argv++) - { - void *arg = *p_argv; - int type = (*ptr)->type; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - /* 16-byte long double is passed like a struct. */ - if (type == FFI_TYPE_LONGDOUBLE) - type = FFI_TYPE_STRUCT; -#endif - - /* Check how a structure type is passed. */ - if (type == FFI_TYPE_STRUCT || type == FFI_TYPE_COMPLEX) - { - if (type == FFI_TYPE_COMPLEX) - type = FFI_TYPE_POINTER; - else - type = ffi_check_struct_type (*ptr); - - /* If we pass the struct via pointer, copy the data. */ - if (type == FFI_TYPE_POINTER) - { - p_struct -= ROUND_SIZE ((*ptr)->size); - memcpy (p_struct, (char *)arg, (*ptr)->size); - arg = &p_struct; - } - } - - /* Now handle all primitive int/pointer/float data types. */ - switch (type) - { - case FFI_TYPE_DOUBLE: - if (n_fpr < MAX_FPRARGS) - p_fpr[n_fpr++] = *(unsigned long long *) arg; - else -#ifdef __s390x__ - p_ov[n_ov++] = *(unsigned long *) arg; -#else - p_ov[n_ov++] = ((unsigned long *) arg)[0], - p_ov[n_ov++] = ((unsigned long *) arg)[1]; -#endif - break; - - case FFI_TYPE_FLOAT: - if (n_fpr < MAX_FPRARGS) - p_fpr[n_fpr++] = (long long) *(unsigned int *) arg << 32; - else - p_ov[n_ov++] = *(unsigned int *) arg; - break; - - case FFI_TYPE_POINTER: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = (unsigned long)*(unsigned char **) arg; - else - p_ov[n_ov++] = (unsigned long)*(unsigned char **) arg; - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -#ifdef __s390x__ - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(unsigned long *) arg; - else - p_ov[n_ov++] = *(unsigned long *) arg; -#else - if (n_gpr == MAX_GPRARGS-1) - n_gpr = MAX_GPRARGS; - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = ((unsigned long *) arg)[0], - p_gpr[n_gpr++] = ((unsigned long *) arg)[1]; - else - p_ov[n_ov++] = ((unsigned long *) arg)[0], - p_ov[n_ov++] = ((unsigned long *) arg)[1]; -#endif - break; - - case FFI_TYPE_UINT32: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(unsigned int *) arg; - else - p_ov[n_ov++] = *(unsigned int *) arg; - break; - - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(signed int *) arg; - else - p_ov[n_ov++] = *(signed int *) arg; - break; - - case FFI_TYPE_UINT16: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(unsigned short *) arg; - else - p_ov[n_ov++] = *(unsigned short *) arg; - break; - - case FFI_TYPE_SINT16: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(signed short *) arg; - else - p_ov[n_ov++] = *(signed short *) arg; - break; - - case FFI_TYPE_UINT8: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(unsigned char *) arg; - else - p_ov[n_ov++] = *(unsigned char *) arg; - break; - - case FFI_TYPE_SINT8: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(signed char *) arg; - else - p_ov[n_ov++] = *(signed char *) arg; - break; - - default: - FFI_ASSERT (0); - break; - } - } -} - -/*======================== End of Routine ============================*/ - -/*====================================================================*/ -/* */ -/* Name - ffi_prep_cif_machdep. */ -/* */ -/* Function - Perform machine dependent CIF processing. */ -/* */ -/*====================================================================*/ - -ffi_status -ffi_prep_cif_machdep(ffi_cif *cif) -{ - size_t struct_size = 0; - int n_gpr = 0; - int n_fpr = 0; - int n_ov = 0; - - ffi_type **ptr; - int i; - - /* Determine return value handling. */ - - switch (cif->rtype->type) - { - /* Void is easy. */ - case FFI_TYPE_VOID: - cif->flags = FFI390_RET_VOID; - break; - - /* Structures and complex are returned via a hidden pointer. */ - case FFI_TYPE_STRUCT: - case FFI_TYPE_COMPLEX: - cif->flags = FFI390_RET_STRUCT; - n_gpr++; /* We need one GPR to pass the pointer. */ - break; - - /* Floating point values are returned in fpr 0. */ - case FFI_TYPE_FLOAT: - cif->flags = FFI390_RET_FLOAT; - break; - - case FFI_TYPE_DOUBLE: - cif->flags = FFI390_RET_DOUBLE; - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - cif->flags = FFI390_RET_STRUCT; - n_gpr++; - break; -#endif - /* Integer values are returned in gpr 2 (and gpr 3 - for 64-bit values on 31-bit machines). */ - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - cif->flags = FFI390_RET_INT64; - break; - - case FFI_TYPE_POINTER: - case FFI_TYPE_INT: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - /* These are to be extended to word size. */ -#ifdef __s390x__ - cif->flags = FFI390_RET_INT64; -#else - cif->flags = FFI390_RET_INT32; -#endif - break; - - default: - FFI_ASSERT (0); - break; - } - - /* Now for the arguments. */ - - for (ptr = cif->arg_types, i = cif->nargs; - i > 0; - i--, ptr++) - { - int type = (*ptr)->type; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - /* 16-byte long double is passed like a struct. */ - if (type == FFI_TYPE_LONGDOUBLE) - type = FFI_TYPE_STRUCT; -#endif - - /* Check how a structure type is passed. */ - if (type == FFI_TYPE_STRUCT || type == FFI_TYPE_COMPLEX) - { - if (type == FFI_TYPE_COMPLEX) - type = FFI_TYPE_POINTER; - else - type = ffi_check_struct_type (*ptr); - - /* If we pass the struct via pointer, we must reserve space - to copy its data for proper call-by-value semantics. */ - if (type == FFI_TYPE_POINTER) - struct_size += ROUND_SIZE ((*ptr)->size); - } - - /* Now handle all primitive int/float data types. */ - switch (type) - { - /* The first MAX_FPRARGS floating point arguments - go in FPRs, the rest overflow to the stack. */ - - case FFI_TYPE_DOUBLE: - if (n_fpr < MAX_FPRARGS) - n_fpr++; - else - n_ov += sizeof (double) / sizeof (long); - break; - - case FFI_TYPE_FLOAT: - if (n_fpr < MAX_FPRARGS) - n_fpr++; - else - n_ov++; - break; - - /* On 31-bit machines, 64-bit integers are passed in GPR pairs, - if one is still available, or else on the stack. If only one - register is free, skip the register (it won't be used for any - subsequent argument either). */ - -#ifndef __s390x__ - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - if (n_gpr == MAX_GPRARGS-1) - n_gpr = MAX_GPRARGS; - if (n_gpr < MAX_GPRARGS) - n_gpr += 2; - else - n_ov += 2; - break; -#endif - - /* Everything else is passed in GPRs (until MAX_GPRARGS - have been used) or overflows to the stack. */ - - default: - if (n_gpr < MAX_GPRARGS) - n_gpr++; - else - n_ov++; - break; - } - } - - /* Total stack space as required for overflow arguments - and temporary structure copies. */ - - cif->bytes = ROUND_SIZE (n_ov * sizeof (long)) + struct_size; - - return FFI_OK; -} - -/*======================== End of Routine ============================*/ - -/*====================================================================*/ -/* */ -/* Name - ffi_call. */ -/* */ -/* Function - Call the FFI routine. */ -/* */ -/*====================================================================*/ - -void -ffi_call(ffi_cif *cif, - void (*fn)(void), - void *rvalue, - void **avalue) -{ - int ret_type = cif->flags; - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - ecif.rvalue = rvalue; - - /* If we don't have a return value, we need to fake one. */ - if (rvalue == NULL) - { - if (ret_type == FFI390_RET_STRUCT) - ecif.rvalue = alloca (cif->rtype->size); - else - ret_type = FFI390_RET_VOID; - } - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV (cif->bytes, &ecif, ffi_prep_args, - ret_type, ecif.rvalue, fn); - break; - - default: - FFI_ASSERT (0); - break; - } -} - -/*======================== End of Routine ============================*/ - -/*====================================================================*/ -/* */ -/* Name - ffi_closure_helper_SYSV. */ -/* */ -/* Function - Call a FFI closure target function. */ -/* */ -/*====================================================================*/ - -void -ffi_closure_helper_SYSV (ffi_closure *closure, - unsigned long *p_gpr, - unsigned long long *p_fpr, - unsigned long *p_ov) -{ - unsigned long long ret_buffer; - - void *rvalue = &ret_buffer; - void **avalue; - void **p_arg; - - int n_gpr = 0; - int n_fpr = 0; - int n_ov = 0; - - ffi_type **ptr; - int i; - - /* Allocate buffer for argument list pointers. */ - - p_arg = avalue = alloca (closure->cif->nargs * sizeof (void *)); - - /* If we returning a structure, pass the structure address - directly to the target function. Otherwise, have the target - function store the return value to the GPR save area. */ - - if (closure->cif->flags == FFI390_RET_STRUCT) - rvalue = (void *) p_gpr[n_gpr++]; - - /* Now for the arguments. */ - - for (ptr = closure->cif->arg_types, i = closure->cif->nargs; - i > 0; - i--, p_arg++, ptr++) - { - int deref_struct_pointer = 0; - int type = (*ptr)->type; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - /* 16-byte long double is passed like a struct. */ - if (type == FFI_TYPE_LONGDOUBLE) - type = FFI_TYPE_STRUCT; -#endif - - /* Check how a structure type is passed. */ - if (type == FFI_TYPE_STRUCT || type == FFI_TYPE_COMPLEX) - { - if (type == FFI_TYPE_COMPLEX) - type = FFI_TYPE_POINTER; - else - type = ffi_check_struct_type (*ptr); - - /* If we pass the struct via pointer, remember to - retrieve the pointer later. */ - if (type == FFI_TYPE_POINTER) - deref_struct_pointer = 1; - } - - /* Pointers are passed like UINTs of the same size. */ - if (type == FFI_TYPE_POINTER) -#ifdef __s390x__ - type = FFI_TYPE_UINT64; -#else - type = FFI_TYPE_UINT32; -#endif - - /* Now handle all primitive int/float data types. */ - switch (type) - { - case FFI_TYPE_DOUBLE: - if (n_fpr < MAX_FPRARGS) - *p_arg = &p_fpr[n_fpr++]; - else - *p_arg = &p_ov[n_ov], - n_ov += sizeof (double) / sizeof (long); - break; - - case FFI_TYPE_FLOAT: - if (n_fpr < MAX_FPRARGS) - *p_arg = &p_fpr[n_fpr++]; - else - *p_arg = (char *)&p_ov[n_ov++] + sizeof (long) - 4; - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -#ifdef __s390x__ - if (n_gpr < MAX_GPRARGS) - *p_arg = &p_gpr[n_gpr++]; - else - *p_arg = &p_ov[n_ov++]; -#else - if (n_gpr == MAX_GPRARGS-1) - n_gpr = MAX_GPRARGS; - if (n_gpr < MAX_GPRARGS) - *p_arg = &p_gpr[n_gpr], n_gpr += 2; - else - *p_arg = &p_ov[n_ov], n_ov += 2; -#endif - break; - - case FFI_TYPE_INT: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - if (n_gpr < MAX_GPRARGS) - *p_arg = (char *)&p_gpr[n_gpr++] + sizeof (long) - 4; - else - *p_arg = (char *)&p_ov[n_ov++] + sizeof (long) - 4; - break; - - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - if (n_gpr < MAX_GPRARGS) - *p_arg = (char *)&p_gpr[n_gpr++] + sizeof (long) - 2; - else - *p_arg = (char *)&p_ov[n_ov++] + sizeof (long) - 2; - break; - - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - if (n_gpr < MAX_GPRARGS) - *p_arg = (char *)&p_gpr[n_gpr++] + sizeof (long) - 1; - else - *p_arg = (char *)&p_ov[n_ov++] + sizeof (long) - 1; - break; - - default: - FFI_ASSERT (0); - break; - } - - /* If this is a struct passed via pointer, we need to - actually retrieve that pointer. */ - if (deref_struct_pointer) - *p_arg = *(void **)*p_arg; - } - - - /* Call the target function. */ - (closure->fun) (closure->cif, rvalue, avalue, closure->user_data); - - /* Convert the return value. */ - switch (closure->cif->rtype->type) - { - /* Void is easy, and so is struct. */ - case FFI_TYPE_VOID: - case FFI_TYPE_STRUCT: - case FFI_TYPE_COMPLEX: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif - break; - - /* Floating point values are returned in fpr 0. */ - case FFI_TYPE_FLOAT: - p_fpr[0] = (long long) *(unsigned int *) rvalue << 32; - break; - - case FFI_TYPE_DOUBLE: - p_fpr[0] = *(unsigned long long *) rvalue; - break; - - /* Integer values are returned in gpr 2 (and gpr 3 - for 64-bit values on 31-bit machines). */ - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -#ifdef __s390x__ - p_gpr[0] = *(unsigned long *) rvalue; -#else - p_gpr[0] = ((unsigned long *) rvalue)[0], - p_gpr[1] = ((unsigned long *) rvalue)[1]; -#endif - break; - - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT32: - case FFI_TYPE_UINT16: - case FFI_TYPE_UINT8: - p_gpr[0] = *(unsigned long *) rvalue; - break; - - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - case FFI_TYPE_SINT16: - case FFI_TYPE_SINT8: - p_gpr[0] = *(signed long *) rvalue; - break; - - default: - FFI_ASSERT (0); - break; - } -} - -/*======================== End of Routine ============================*/ - -/*====================================================================*/ -/* */ -/* Name - ffi_prep_closure_loc. */ -/* */ -/* Function - Prepare a FFI closure. */ -/* */ -/*====================================================================*/ - -ffi_status -ffi_prep_closure_loc (ffi_closure *closure, - ffi_cif *cif, - void (*fun) (ffi_cif *, void *, void **, void *), - void *user_data, - void *codeloc) -{ - if (cif->abi != FFI_SYSV) - return FFI_BAD_ABI; - -#ifndef __s390x__ - *(short *)&closure->tramp [0] = 0x0d10; /* basr %r1,0 */ - *(short *)&closure->tramp [2] = 0x9801; /* lm %r0,%r1,6(%r1) */ - *(short *)&closure->tramp [4] = 0x1006; - *(short *)&closure->tramp [6] = 0x07f1; /* br %r1 */ - *(long *)&closure->tramp [8] = (long)codeloc; - *(long *)&closure->tramp[12] = (long)&ffi_closure_SYSV; -#else - *(short *)&closure->tramp [0] = 0x0d10; /* basr %r1,0 */ - *(short *)&closure->tramp [2] = 0xeb01; /* lmg %r0,%r1,14(%r1) */ - *(short *)&closure->tramp [4] = 0x100e; - *(short *)&closure->tramp [6] = 0x0004; - *(short *)&closure->tramp [8] = 0x07f1; /* br %r1 */ - *(long *)&closure->tramp[16] = (long)codeloc; - *(long *)&closure->tramp[24] = (long)&ffi_closure_SYSV; -#endif - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - -/*======================== End of Routine ============================*/ - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/s390/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/s390/ffitarget.h deleted file mode 100644 index 0e4868a1c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/s390/ffitarget.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for S390. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#if defined (__s390x__) -#ifndef S390X -#define S390X -#endif -#endif - -/* ---- System specific configurations ----------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -#define FFI_TARGET_HAS_COMPLEX_TYPE - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#ifdef S390X -#define FFI_TRAMPOLINE_SIZE 32 -#else -#define FFI_TRAMPOLINE_SIZE 16 -#endif -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/s390/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/s390/sysv.S deleted file mode 100644 index 4731a3177..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/s390/sysv.S +++ /dev/null @@ -1,434 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2000 Software AG - Copyright (c) 2008 Red Hat, Inc. - - S390 Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -#ifndef __s390x__ - -.text - - # r2: cif->bytes - # r3: &ecif - # r4: ffi_prep_args - # r5: ret_type - # r6: ecif.rvalue - # ov: fn - - # This assumes we are using gas. - .globl ffi_call_SYSV - .type ffi_call_SYSV,%function -ffi_call_SYSV: -.LFB1: - stm %r6,%r15,24(%r15) # Save registers -.LCFI0: - basr %r13,0 # Set up base register -.Lbase: - lr %r11,%r15 # Set up frame pointer -.LCFI1: - sr %r15,%r2 - ahi %r15,-96-48 # Allocate stack - lr %r8,%r6 # Save ecif.rvalue - sr %r9,%r9 - ic %r9,.Ltable-.Lbase(%r13,%r5) # Load epilog address - l %r7,96(%r11) # Load function address - st %r11,0(%r15) # Set up back chain - ahi %r11,-48 # Register save area -.LCFI2: - - la %r2,96(%r15) # Save area - # r3 already holds &ecif - basr %r14,%r4 # Call ffi_prep_args - - lm %r2,%r6,0(%r11) # Load arguments - ld %f0,32(%r11) - ld %f2,40(%r11) - la %r14,0(%r13,%r9) # Set return address - br %r7 # ... and call function - -.LretNone: # Return void - l %r4,48+56(%r11) - lm %r6,%r15,48+24(%r11) - br %r4 - -.LretFloat: - l %r4,48+56(%r11) - ste %f0,0(%r8) # Return float - lm %r6,%r15,48+24(%r11) - br %r4 - -.LretDouble: - l %r4,48+56(%r11) - std %f0,0(%r8) # Return double - lm %r6,%r15,48+24(%r11) - br %r4 - -.LretInt32: - l %r4,48+56(%r11) - st %r2,0(%r8) # Return int - lm %r6,%r15,48+24(%r11) - br %r4 - -.LretInt64: - l %r4,48+56(%r11) - stm %r2,%r3,0(%r8) # Return long long - lm %r6,%r15,48+24(%r11) - br %r4 - -.Ltable: - .byte .LretNone-.Lbase # FFI390_RET_VOID - .byte .LretNone-.Lbase # FFI390_RET_STRUCT - .byte .LretFloat-.Lbase # FFI390_RET_FLOAT - .byte .LretDouble-.Lbase # FFI390_RET_DOUBLE - .byte .LretInt32-.Lbase # FFI390_RET_INT32 - .byte .LretInt64-.Lbase # FFI390_RET_INT64 - -.LFE1: -.ffi_call_SYSV_end: - .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV - - - .globl ffi_closure_SYSV - .type ffi_closure_SYSV,%function -ffi_closure_SYSV: -.LFB2: - stm %r12,%r15,48(%r15) # Save registers -.LCFI10: - basr %r13,0 # Set up base register -.Lcbase: - stm %r2,%r6,8(%r15) # Save arguments - std %f0,64(%r15) - std %f2,72(%r15) - lr %r1,%r15 # Set up stack frame - ahi %r15,-96 -.LCFI11: - l %r12,.Lchelper-.Lcbase(%r13) # Get helper function - lr %r2,%r0 # Closure - la %r3,8(%r1) # GPRs - la %r4,64(%r1) # FPRs - la %r5,96(%r1) # Overflow - st %r1,0(%r15) # Set up back chain - - bas %r14,0(%r12,%r13) # Call helper - - l %r4,96+56(%r15) - ld %f0,96+64(%r15) # Load return registers - lm %r2,%r3,96+8(%r15) - lm %r12,%r15,96+48(%r15) - br %r4 - - .align 4 -.Lchelper: - .long ffi_closure_helper_SYSV-.Lcbase - -.LFE2: - -.ffi_closure_SYSV_end: - .size ffi_closure_SYSV,.ffi_closure_SYSV_end-ffi_closure_SYSV - - - .section .eh_frame,EH_FRAME_FLAGS,@progbits -.Lframe1: - .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry -.LSCIE1: - .4byte 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version - .ascii "zR\0" # CIE Augmentation - .uleb128 0x1 # CIE Code Alignment Factor - .sleb128 -4 # CIE Data Alignment Factor - .byte 0xe # CIE RA Column - .uleb128 0x1 # Augmentation size - .byte 0x1b # FDE Encoding (pcrel sdata4) - .byte 0xc # DW_CFA_def_cfa - .uleb128 0xf - .uleb128 0x60 - .align 4 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 # FDE Length -.LASFDE1: - .4byte .LASFDE1-.Lframe1 # FDE CIE offset - .4byte .LFB1-. # FDE initial location - .4byte .LFE1-.LFB1 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI0-.LFB1 - .byte 0x8f # DW_CFA_offset, column 0xf - .uleb128 0x9 - .byte 0x8e # DW_CFA_offset, column 0xe - .uleb128 0xa - .byte 0x8d # DW_CFA_offset, column 0xd - .uleb128 0xb - .byte 0x8c # DW_CFA_offset, column 0xc - .uleb128 0xc - .byte 0x8b # DW_CFA_offset, column 0xb - .uleb128 0xd - .byte 0x8a # DW_CFA_offset, column 0xa - .uleb128 0xe - .byte 0x89 # DW_CFA_offset, column 0x9 - .uleb128 0xf - .byte 0x88 # DW_CFA_offset, column 0x8 - .uleb128 0x10 - .byte 0x87 # DW_CFA_offset, column 0x7 - .uleb128 0x11 - .byte 0x86 # DW_CFA_offset, column 0x6 - .uleb128 0x12 - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI1-.LCFI0 - .byte 0xd # DW_CFA_def_cfa_register - .uleb128 0xb - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI2-.LCFI1 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 0x90 - .align 4 -.LEFDE1: -.LSFDE2: - .4byte .LEFDE2-.LASFDE2 # FDE Length -.LASFDE2: - .4byte .LASFDE2-.Lframe1 # FDE CIE offset - .4byte .LFB2-. # FDE initial location - .4byte .LFE2-.LFB2 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI10-.LFB2 - .byte 0x8f # DW_CFA_offset, column 0xf - .uleb128 0x9 - .byte 0x8e # DW_CFA_offset, column 0xe - .uleb128 0xa - .byte 0x8d # DW_CFA_offset, column 0xd - .uleb128 0xb - .byte 0x8c # DW_CFA_offset, column 0xc - .uleb128 0xc - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI11-.LCFI10 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 0xc0 - .align 4 -.LEFDE2: - -#else - -.text - - # r2: cif->bytes - # r3: &ecif - # r4: ffi_prep_args - # r5: ret_type - # r6: ecif.rvalue - # ov: fn - - # This assumes we are using gas. - .globl ffi_call_SYSV - .type ffi_call_SYSV,%function -ffi_call_SYSV: -.LFB1: - stmg %r6,%r15,48(%r15) # Save registers -.LCFI0: - larl %r13,.Lbase # Set up base register - lgr %r11,%r15 # Set up frame pointer -.LCFI1: - sgr %r15,%r2 - aghi %r15,-160-80 # Allocate stack - lgr %r8,%r6 # Save ecif.rvalue - llgc %r9,.Ltable-.Lbase(%r13,%r5) # Load epilog address - lg %r7,160(%r11) # Load function address - stg %r11,0(%r15) # Set up back chain - aghi %r11,-80 # Register save area -.LCFI2: - - la %r2,160(%r15) # Save area - # r3 already holds &ecif - basr %r14,%r4 # Call ffi_prep_args - - lmg %r2,%r6,0(%r11) # Load arguments - ld %f0,48(%r11) - ld %f2,56(%r11) - ld %f4,64(%r11) - ld %f6,72(%r11) - la %r14,0(%r13,%r9) # Set return address - br %r7 # ... and call function - -.Lbase: -.LretNone: # Return void - lg %r4,80+112(%r11) - lmg %r6,%r15,80+48(%r11) - br %r4 - -.LretFloat: - lg %r4,80+112(%r11) - ste %f0,0(%r8) # Return float - lmg %r6,%r15,80+48(%r11) - br %r4 - -.LretDouble: - lg %r4,80+112(%r11) - std %f0,0(%r8) # Return double - lmg %r6,%r15,80+48(%r11) - br %r4 - -.LretInt32: - lg %r4,80+112(%r11) - st %r2,0(%r8) # Return int - lmg %r6,%r15,80+48(%r11) - br %r4 - -.LretInt64: - lg %r4,80+112(%r11) - stg %r2,0(%r8) # Return long - lmg %r6,%r15,80+48(%r11) - br %r4 - -.Ltable: - .byte .LretNone-.Lbase # FFI390_RET_VOID - .byte .LretNone-.Lbase # FFI390_RET_STRUCT - .byte .LretFloat-.Lbase # FFI390_RET_FLOAT - .byte .LretDouble-.Lbase # FFI390_RET_DOUBLE - .byte .LretInt32-.Lbase # FFI390_RET_INT32 - .byte .LretInt64-.Lbase # FFI390_RET_INT64 - -.LFE1: -.ffi_call_SYSV_end: - .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV - - - .globl ffi_closure_SYSV - .type ffi_closure_SYSV,%function -ffi_closure_SYSV: -.LFB2: - stmg %r14,%r15,112(%r15) # Save registers -.LCFI10: - stmg %r2,%r6,16(%r15) # Save arguments - std %f0,128(%r15) - std %f2,136(%r15) - std %f4,144(%r15) - std %f6,152(%r15) - lgr %r1,%r15 # Set up stack frame - aghi %r15,-160 -.LCFI11: - lgr %r2,%r0 # Closure - la %r3,16(%r1) # GPRs - la %r4,128(%r1) # FPRs - la %r5,160(%r1) # Overflow - stg %r1,0(%r15) # Set up back chain - - brasl %r14,ffi_closure_helper_SYSV # Call helper - - lg %r14,160+112(%r15) - ld %f0,160+128(%r15) # Load return registers - lg %r2,160+16(%r15) - la %r15,160(%r15) - br %r14 -.LFE2: - -.ffi_closure_SYSV_end: - .size ffi_closure_SYSV,.ffi_closure_SYSV_end-ffi_closure_SYSV - - - - .section .eh_frame,EH_FRAME_FLAGS,@progbits -.Lframe1: - .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry -.LSCIE1: - .4byte 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version - .ascii "zR\0" # CIE Augmentation - .uleb128 0x1 # CIE Code Alignment Factor - .sleb128 -8 # CIE Data Alignment Factor - .byte 0xe # CIE RA Column - .uleb128 0x1 # Augmentation size - .byte 0x1b # FDE Encoding (pcrel sdata4) - .byte 0xc # DW_CFA_def_cfa - .uleb128 0xf - .uleb128 0xa0 - .align 8 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 # FDE Length -.LASFDE1: - .4byte .LASFDE1-.Lframe1 # FDE CIE offset - .4byte .LFB1-. # FDE initial location - .4byte .LFE1-.LFB1 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI0-.LFB1 - .byte 0x8f # DW_CFA_offset, column 0xf - .uleb128 0x5 - .byte 0x8e # DW_CFA_offset, column 0xe - .uleb128 0x6 - .byte 0x8d # DW_CFA_offset, column 0xd - .uleb128 0x7 - .byte 0x8c # DW_CFA_offset, column 0xc - .uleb128 0x8 - .byte 0x8b # DW_CFA_offset, column 0xb - .uleb128 0x9 - .byte 0x8a # DW_CFA_offset, column 0xa - .uleb128 0xa - .byte 0x89 # DW_CFA_offset, column 0x9 - .uleb128 0xb - .byte 0x88 # DW_CFA_offset, column 0x8 - .uleb128 0xc - .byte 0x87 # DW_CFA_offset, column 0x7 - .uleb128 0xd - .byte 0x86 # DW_CFA_offset, column 0x6 - .uleb128 0xe - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI1-.LCFI0 - .byte 0xd # DW_CFA_def_cfa_register - .uleb128 0xb - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI2-.LCFI1 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 0xf0 - .align 8 -.LEFDE1: -.LSFDE2: - .4byte .LEFDE2-.LASFDE2 # FDE Length -.LASFDE2: - .4byte .LASFDE2-.Lframe1 # FDE CIE offset - .4byte .LFB2-. # FDE initial location - .4byte .LFE2-.LFB2 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI10-.LFB2 - .byte 0x8f # DW_CFA_offset, column 0xf - .uleb128 0x5 - .byte 0x8e # DW_CFA_offset, column 0xe - .uleb128 0x6 - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI11-.LCFI10 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 0x140 - .align 8 -.LEFDE2: - -#endif - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/sh/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/sh/ffi.c deleted file mode 100644 index 9ec86bfb2..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/sh/ffi.c +++ /dev/null @@ -1,717 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2002-2008, 2012 Kaz Kojima - Copyright (c) 2008 Red Hat, Inc. - - SuperH Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -#define NGREGARG 4 -#if defined(__SH4__) -#define NFREGARG 8 -#endif - -#if defined(__HITACHI__) -#define STRUCT_VALUE_ADDRESS_WITH_ARG 1 -#else -#define STRUCT_VALUE_ADDRESS_WITH_ARG 0 -#endif - -/* If the structure has essentially an unique element, return its type. */ -static int -simple_type (ffi_type *arg) -{ - if (arg->type != FFI_TYPE_STRUCT) - return arg->type; - else if (arg->elements[1]) - return FFI_TYPE_STRUCT; - - return simple_type (arg->elements[0]); -} - -static int -return_type (ffi_type *arg) -{ - unsigned short type; - - if (arg->type != FFI_TYPE_STRUCT) - return arg->type; - - type = simple_type (arg->elements[0]); - if (! arg->elements[1]) - { - switch (type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - return FFI_TYPE_INT; - - default: - return type; - } - } - - /* gcc uses r0/r1 pair for some kind of structures. */ - if (arg->size <= 2 * sizeof (int)) - { - int i = 0; - ffi_type *e; - - while ((e = arg->elements[i++])) - { - type = simple_type (e); - switch (type) - { - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_INT: - case FFI_TYPE_FLOAT: - return FFI_TYPE_UINT64; - - default: - break; - } - } - } - - return FFI_TYPE_STRUCT; -} - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -void ffi_prep_args(char *stack, extended_cif *ecif) -{ - register unsigned int i; - register int tmp; - register unsigned int avn; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - int greg, ireg; -#if defined(__SH4__) - int freg = 0; -#endif - - tmp = 0; - argp = stack; - - if (return_type (ecif->cif->rtype) == FFI_TYPE_STRUCT) - { - *(void **) argp = ecif->rvalue; - argp += 4; - ireg = STRUCT_VALUE_ADDRESS_WITH_ARG ? 1 : 0; - } - else - ireg = 0; - - /* Set arguments for registers. */ - greg = ireg; - avn = ecif->cif->nargs; - p_argv = ecif->avalue; - - for (i = 0, p_arg = ecif->cif->arg_types; i < avn; i++, p_arg++, p_argv++) - { - size_t z; - - z = (*p_arg)->size; - if (z < sizeof(int)) - { - if (greg++ >= NGREGARG) - continue; - - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - argp += z; - } - else if (z == sizeof(int)) - { -#if defined(__SH4__) - if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (freg++ >= NFREGARG) - continue; - } - else -#endif - { - if (greg++ >= NGREGARG) - continue; - } - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - argp += z; - } -#if defined(__SH4__) - else if ((*p_arg)->type == FFI_TYPE_DOUBLE) - { - if (freg + 1 >= NFREGARG) - continue; - freg = (freg + 1) & ~1; - freg += 2; - memcpy (argp, *p_argv, z); - argp += z; - } -#endif - else - { - int n = (z + sizeof (int) - 1) / sizeof (int); -#if defined(__SH4__) - if (greg + n - 1 >= NGREGARG) - continue; -#else - if (greg >= NGREGARG) - continue; -#endif - greg += n; - memcpy (argp, *p_argv, z); - argp += n * sizeof (int); - } - } - - /* Set arguments on stack. */ - greg = ireg; -#if defined(__SH4__) - freg = 0; -#endif - p_argv = ecif->avalue; - - for (i = 0, p_arg = ecif->cif->arg_types; i < avn; i++, p_arg++, p_argv++) - { - size_t z; - - z = (*p_arg)->size; - if (z < sizeof(int)) - { - if (greg++ < NGREGARG) - continue; - - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - argp += z; - } - else if (z == sizeof(int)) - { -#if defined(__SH4__) - if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (freg++ < NFREGARG) - continue; - } - else -#endif - { - if (greg++ < NGREGARG) - continue; - } - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - argp += z; - } -#if defined(__SH4__) - else if ((*p_arg)->type == FFI_TYPE_DOUBLE) - { - if (freg + 1 < NFREGARG) - { - freg = (freg + 1) & ~1; - freg += 2; - continue; - } - memcpy (argp, *p_argv, z); - argp += z; - } -#endif - else - { - int n = (z + sizeof (int) - 1) / sizeof (int); - if (greg + n - 1 < NGREGARG) - { - greg += n; - continue; - } -#if (! defined(__SH4__)) - else if (greg < NGREGARG) - { - greg = NGREGARG; - continue; - } -#endif - memcpy (argp, *p_argv, z); - argp += n * sizeof (int); - } - } - - return; -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - int i, j; - int size, type; - int n, m; - int greg; -#if defined(__SH4__) - int freg = 0; -#endif - - cif->flags = 0; - - greg = ((return_type (cif->rtype) == FFI_TYPE_STRUCT) && - STRUCT_VALUE_ADDRESS_WITH_ARG) ? 1 : 0; - -#if defined(__SH4__) - for (i = j = 0; i < cif->nargs && j < 12; i++) - { - type = (cif->arg_types)[i]->type; - switch (type) - { - case FFI_TYPE_FLOAT: - if (freg >= NFREGARG) - continue; - freg++; - cif->flags += ((cif->arg_types)[i]->type) << (2 * j); - j++; - break; - - case FFI_TYPE_DOUBLE: - if ((freg + 1) >= NFREGARG) - continue; - freg = (freg + 1) & ~1; - freg += 2; - cif->flags += ((cif->arg_types)[i]->type) << (2 * j); - j++; - break; - - default: - size = (cif->arg_types)[i]->size; - n = (size + sizeof (int) - 1) / sizeof (int); - if (greg + n - 1 >= NGREGARG) - continue; - greg += n; - for (m = 0; m < n; m++) - cif->flags += FFI_TYPE_INT << (2 * j++); - break; - } - } -#else - for (i = j = 0; i < cif->nargs && j < 4; i++) - { - size = (cif->arg_types)[i]->size; - n = (size + sizeof (int) - 1) / sizeof (int); - if (greg >= NGREGARG) - continue; - else if (greg + n - 1 >= NGREGARG) - n = NGREGARG - greg; - greg += n; - for (m = 0; m < n; m++) - cif->flags += FFI_TYPE_INT << (2 * j++); - } -#endif - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_STRUCT: - cif->flags += (unsigned) (return_type (cif->rtype)) << 24; - break; - - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags += (unsigned) cif->rtype->type << 24; - break; - - default: - cif->flags += FFI_TYPE_INT << 24; - break; - } - - return FFI_OK; -} - -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - UINT64 trvalue; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if (cif->rtype->type == FFI_TYPE_STRUCT - && return_type (cif->rtype) != FFI_TYPE_STRUCT) - ecif.rvalue = &trvalue; - else if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, - fn); - break; - default: - FFI_ASSERT(0); - break; - } - - if (rvalue - && cif->rtype->type == FFI_TYPE_STRUCT - && return_type (cif->rtype) != FFI_TYPE_STRUCT) - memcpy (rvalue, &trvalue, cif->rtype->size); -} - -extern void ffi_closure_SYSV (void); -#if defined(__SH4__) -extern void __ic_invalidate (void *line); -#endif - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp; - unsigned int insn; - - if (cif->abi != FFI_SYSV) - return FFI_BAD_ABI; - - tramp = (unsigned int *) &closure->tramp[0]; - /* Set T bit if the function returns a struct pointed with R2. */ - insn = (return_type (cif->rtype) == FFI_TYPE_STRUCT - ? 0x0018 /* sett */ - : 0x0008 /* clrt */); - -#ifdef __LITTLE_ENDIAN__ - tramp[0] = 0xd301d102; - tramp[1] = 0x0000412b | (insn << 16); -#else - tramp[0] = 0xd102d301; - tramp[1] = 0x412b0000 | insn; -#endif - *(void **) &tramp[2] = (void *)codeloc; /* ctx */ - *(void **) &tramp[3] = (void *)ffi_closure_SYSV; /* funaddr */ - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - -#if defined(__SH4__) - /* Flush the icache. */ - __ic_invalidate(codeloc); -#endif - - return FFI_OK; -} - -/* Basically the trampoline invokes ffi_closure_SYSV, and on - * entry, r3 holds the address of the closure. - * After storing the registers that could possibly contain - * parameters to be passed into the stack frame and setting - * up space for a return value, ffi_closure_SYSV invokes the - * following helper function to do most of the work. - */ - -#ifdef __LITTLE_ENDIAN__ -#define OFS_INT8 0 -#define OFS_INT16 0 -#else -#define OFS_INT8 3 -#define OFS_INT16 2 -#endif - -int -ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue, - unsigned long *pgr, unsigned long *pfr, - unsigned long *pst) -{ - void **avalue; - ffi_type **p_arg; - int i, avn; - int ireg, greg = 0; -#if defined(__SH4__) - int freg = 0; -#endif - ffi_cif *cif; - - cif = closure->cif; - avalue = alloca(cif->nargs * sizeof(void *)); - - /* Copy the caller's structure return value address so that the closure - returns the data directly to the caller. */ - if (cif->rtype->type == FFI_TYPE_STRUCT && STRUCT_VALUE_ADDRESS_WITH_ARG) - { - rvalue = (void *) *pgr++; - ireg = 1; - } - else - ireg = 0; - - cif = closure->cif; - greg = ireg; - avn = cif->nargs; - - /* Grab the addresses of the arguments from the stack frame. */ - for (i = 0, p_arg = cif->arg_types; i < avn; i++, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - if (z < sizeof(int)) - { - if (greg++ >= NGREGARG) - continue; - - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - avalue[i] = (((char *)pgr) + OFS_INT8); - break; - - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - avalue[i] = (((char *)pgr) + OFS_INT16); - break; - - case FFI_TYPE_STRUCT: - avalue[i] = pgr; - break; - - default: - FFI_ASSERT(0); - } - pgr++; - } - else if (z == sizeof(int)) - { -#if defined(__SH4__) - if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (freg++ >= NFREGARG) - continue; - avalue[i] = pfr; - pfr++; - } - else -#endif - { - if (greg++ >= NGREGARG) - continue; - avalue[i] = pgr; - pgr++; - } - } -#if defined(__SH4__) - else if ((*p_arg)->type == FFI_TYPE_DOUBLE) - { - if (freg + 1 >= NFREGARG) - continue; - if (freg & 1) - pfr++; - freg = (freg + 1) & ~1; - freg += 2; - avalue[i] = pfr; - pfr += 2; - } -#endif - else - { - int n = (z + sizeof (int) - 1) / sizeof (int); -#if defined(__SH4__) - if (greg + n - 1 >= NGREGARG) - continue; -#else - if (greg >= NGREGARG) - continue; -#endif - greg += n; - avalue[i] = pgr; - pgr += n; - } - } - - greg = ireg; -#if defined(__SH4__) - freg = 0; -#endif - - for (i = 0, p_arg = cif->arg_types; i < avn; i++, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - if (z < sizeof(int)) - { - if (greg++ < NGREGARG) - continue; - - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - avalue[i] = (((char *)pst) + OFS_INT8); - break; - - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - avalue[i] = (((char *)pst) + OFS_INT16); - break; - - case FFI_TYPE_STRUCT: - avalue[i] = pst; - break; - - default: - FFI_ASSERT(0); - } - pst++; - } - else if (z == sizeof(int)) - { -#if defined(__SH4__) - if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (freg++ < NFREGARG) - continue; - } - else -#endif - { - if (greg++ < NGREGARG) - continue; - } - avalue[i] = pst; - pst++; - } -#if defined(__SH4__) - else if ((*p_arg)->type == FFI_TYPE_DOUBLE) - { - if (freg + 1 < NFREGARG) - { - freg = (freg + 1) & ~1; - freg += 2; - continue; - } - avalue[i] = pst; - pst += 2; - } -#endif - else - { - int n = (z + sizeof (int) - 1) / sizeof (int); - if (greg + n - 1 < NGREGARG) - { - greg += n; - continue; - } -#if (! defined(__SH4__)) - else if (greg < NGREGARG) - { - greg += n; - pst += greg - NGREGARG; - continue; - } -#endif - avalue[i] = pst; - pst += n; - } - } - - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_SYSV how to perform return type promotions. */ - return return_type (cif->rtype); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/sh/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/sh/ffitarget.h deleted file mode 100644 index a36bf4207..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/sh/ffitarget.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for SuperH. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -/* ---- Generic type definitions ----------------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 16 -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/sh/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/sh/sysv.S deleted file mode 100644 index 5be7516d6..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/sh/sysv.S +++ /dev/null @@ -1,850 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2002, 2003, 2004, 2006, 2008 Kaz Kojima - - SuperH Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#ifdef HAVE_MACHINE_ASM_H -#include -#else -/* XXX these lose for some platforms, I'm sure. */ -#define CNAME(x) x -#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): -#endif - -#if defined(__HITACHI__) -#define STRUCT_VALUE_ADDRESS_WITH_ARG 1 -#else -#define STRUCT_VALUE_ADDRESS_WITH_ARG 0 -#endif - -.text - - # r4: ffi_prep_args - # r5: &ecif - # r6: bytes - # r7: flags - # sp+0: rvalue - # sp+4: fn - - # This assumes we are using gas. -ENTRY(ffi_call_SYSV) - # Save registers -.LFB1: - mov.l r8,@-r15 -.LCFI0: - mov.l r9,@-r15 -.LCFI1: - mov.l r10,@-r15 -.LCFI2: - mov.l r12,@-r15 -.LCFI3: - mov.l r14,@-r15 -.LCFI4: - sts.l pr,@-r15 -.LCFI5: - mov r15,r14 -.LCFI6: -#if defined(__SH4__) - mov r6,r8 - mov r7,r9 - - sub r6,r15 - add #-16,r15 - mov #~7,r0 - and r0,r15 - - mov r4,r0 - jsr @r0 - mov r15,r4 - - mov r9,r1 - shlr8 r9 - shlr8 r9 - shlr8 r9 - - mov #FFI_TYPE_STRUCT,r2 - cmp/eq r2,r9 - bf 1f -#if STRUCT_VALUE_ADDRESS_WITH_ARG - mov.l @r15+,r4 - bra 2f - mov #5,r2 -#else - mov.l @r15+,r10 -#endif -1: - mov #4,r2 -2: - mov #4,r3 - -L_pass: - cmp/pl r8 - bf L_call_it - - mov r1,r0 - and #3,r0 - -L_pass_d: - cmp/eq #FFI_TYPE_DOUBLE,r0 - bf L_pass_f - - mov r3,r0 - and #1,r0 - tst r0,r0 - bt 1f - add #1,r3 -1: - mov #12,r0 - cmp/hs r0,r3 - bt/s 3f - shlr2 r1 - bsr L_pop_d - nop -3: - add #2,r3 - bra L_pass - add #-8,r8 - -L_pop_d: - mov r3,r0 - add r0,r0 - add r3,r0 - add #-12,r0 - braf r0 - nop -#ifdef __LITTLE_ENDIAN__ - fmov.s @r15+,fr5 - rts - fmov.s @r15+,fr4 - fmov.s @r15+,fr7 - rts - fmov.s @r15+,fr6 - fmov.s @r15+,fr9 - rts - fmov.s @r15+,fr8 - fmov.s @r15+,fr11 - rts - fmov.s @r15+,fr10 -#else - fmov.s @r15+,fr4 - rts - fmov.s @r15+,fr5 - fmov.s @r15+,fr6 - rts - fmov.s @r15+,fr7 - fmov.s @r15+,fr8 - rts - fmov.s @r15+,fr9 - fmov.s @r15+,fr10 - rts - fmov.s @r15+,fr11 -#endif - -L_pass_f: - cmp/eq #FFI_TYPE_FLOAT,r0 - bf L_pass_i - - mov #12,r0 - cmp/hs r0,r3 - bt/s 2f - shlr2 r1 - bsr L_pop_f - nop -2: - add #1,r3 - bra L_pass - add #-4,r8 - -L_pop_f: - mov r3,r0 - shll2 r0 - add #-16,r0 - braf r0 - nop -#ifdef __LITTLE_ENDIAN__ - rts - fmov.s @r15+,fr5 - rts - fmov.s @r15+,fr4 - rts - fmov.s @r15+,fr7 - rts - fmov.s @r15+,fr6 - rts - fmov.s @r15+,fr9 - rts - fmov.s @r15+,fr8 - rts - fmov.s @r15+,fr11 - rts - fmov.s @r15+,fr10 -#else - rts - fmov.s @r15+,fr4 - rts - fmov.s @r15+,fr5 - rts - fmov.s @r15+,fr6 - rts - fmov.s @r15+,fr7 - rts - fmov.s @r15+,fr8 - rts - fmov.s @r15+,fr9 - rts - fmov.s @r15+,fr10 - rts - fmov.s @r15+,fr11 -#endif - -L_pass_i: - cmp/eq #FFI_TYPE_INT,r0 - bf L_call_it - - mov #8,r0 - cmp/hs r0,r2 - bt/s 2f - shlr2 r1 - bsr L_pop_i - nop -2: - add #1,r2 - bra L_pass - add #-4,r8 - -L_pop_i: - mov r2,r0 - shll2 r0 - add #-16,r0 - braf r0 - nop - rts - mov.l @r15+,r4 - rts - mov.l @r15+,r5 - rts - mov.l @r15+,r6 - rts - mov.l @r15+,r7 - -L_call_it: - # call function -#if (! STRUCT_VALUE_ADDRESS_WITH_ARG) - mov r10, r2 -#endif - mov.l @(28,r14),r1 - jsr @r1 - nop - -L_ret_d: - mov #FFI_TYPE_DOUBLE,r2 - cmp/eq r2,r9 - bf L_ret_ll - - mov.l @(24,r14),r1 -#ifdef __LITTLE_ENDIAN__ - fmov.s fr1,@r1 - add #4,r1 - bra L_epilogue - fmov.s fr0,@r1 -#else - fmov.s fr0,@r1 - add #4,r1 - bra L_epilogue - fmov.s fr1,@r1 -#endif - -L_ret_ll: - mov #FFI_TYPE_SINT64,r2 - cmp/eq r2,r9 - bt/s 1f - mov #FFI_TYPE_UINT64,r2 - cmp/eq r2,r9 - bf L_ret_f - -1: - mov.l @(24,r14),r2 - mov.l r0,@r2 - bra L_epilogue - mov.l r1,@(4,r2) - -L_ret_f: - mov #FFI_TYPE_FLOAT,r2 - cmp/eq r2,r9 - bf L_ret_i - - mov.l @(24,r14),r1 - bra L_epilogue - fmov.s fr0,@r1 - -L_ret_i: - mov #FFI_TYPE_INT,r2 - cmp/eq r2,r9 - bf L_epilogue - - mov.l @(24,r14),r1 - bra L_epilogue - mov.l r0,@r1 - -L_epilogue: - # Remove the space we pushed for the args - mov r14,r15 - - lds.l @r15+,pr - mov.l @r15+,r14 - mov.l @r15+,r12 - mov.l @r15+,r10 - mov.l @r15+,r9 - rts - mov.l @r15+,r8 -#else - mov r6,r8 - mov r7,r9 - - sub r6,r15 - add #-16,r15 - mov #~7,r0 - and r0,r15 - - mov r4,r0 - jsr @r0 - mov r15,r4 - - mov r9,r3 - shlr8 r9 - shlr8 r9 - shlr8 r9 - - mov #FFI_TYPE_STRUCT,r2 - cmp/eq r2,r9 - bf 1f -#if STRUCT_VALUE_ADDRESS_WITH_ARG - mov.l @r15+,r4 - bra 2f - mov #5,r2 -#else - mov.l @r15+,r10 -#endif -1: - mov #4,r2 -2: - -L_pass: - cmp/pl r8 - bf L_call_it - - mov r3,r0 - and #3,r0 - -L_pass_d: - cmp/eq #FFI_TYPE_DOUBLE,r0 - bf L_pass_i - - mov r15,r0 - and #7,r0 - tst r0,r0 - bt 1f - add #4,r15 -1: - mov #8,r0 - cmp/hs r0,r2 - bt/s 2f - shlr2 r3 - bsr L_pop_d - nop -2: - add #2,r2 - bra L_pass - add #-8,r8 - -L_pop_d: - mov r2,r0 - add r0,r0 - add r2,r0 - add #-12,r0 - add r0,r0 - braf r0 - nop - mov.l @r15+,r4 - rts - mov.l @r15+,r5 - mov.l @r15+,r5 - rts - mov.l @r15+,r6 - mov.l @r15+,r6 - rts - mov.l @r15+,r7 - rts - mov.l @r15+,r7 - -L_pass_i: - cmp/eq #FFI_TYPE_INT,r0 - bf L_call_it - - mov #8,r0 - cmp/hs r0,r2 - bt/s 2f - shlr2 r3 - bsr L_pop_i - nop -2: - add #1,r2 - bra L_pass - add #-4,r8 - -L_pop_i: - mov r2,r0 - shll2 r0 - add #-16,r0 - braf r0 - nop - rts - mov.l @r15+,r4 - rts - mov.l @r15+,r5 - rts - mov.l @r15+,r6 - rts - mov.l @r15+,r7 - -L_call_it: - # call function -#if (! STRUCT_VALUE_ADDRESS_WITH_ARG) - mov r10, r2 -#endif - mov.l @(28,r14),r1 - jsr @r1 - nop - -L_ret_d: - mov #FFI_TYPE_DOUBLE,r2 - cmp/eq r2,r9 - bf L_ret_ll - - mov.l @(24,r14),r2 - mov.l r0,@r2 - bra L_epilogue - mov.l r1,@(4,r2) - -L_ret_ll: - mov #FFI_TYPE_SINT64,r2 - cmp/eq r2,r9 - bt/s 1f - mov #FFI_TYPE_UINT64,r2 - cmp/eq r2,r9 - bf L_ret_i - -1: - mov.l @(24,r14),r2 - mov.l r0,@r2 - bra L_epilogue - mov.l r1,@(4,r2) - -L_ret_i: - mov #FFI_TYPE_FLOAT,r2 - cmp/eq r2,r9 - bt 1f - mov #FFI_TYPE_INT,r2 - cmp/eq r2,r9 - bf L_epilogue -1: - mov.l @(24,r14),r1 - bra L_epilogue - mov.l r0,@r1 - -L_epilogue: - # Remove the space we pushed for the args - mov r14,r15 - - lds.l @r15+,pr - mov.l @r15+,r14 - mov.l @r15+,r12 - mov.l @r15+,r10 - mov.l @r15+,r9 - rts - mov.l @r15+,r8 -#endif -.LFE1: -.ffi_call_SYSV_end: - .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) - -.globl ffi_closure_helper_SYSV - -ENTRY(ffi_closure_SYSV) -.LFB2: - mov.l r7,@-r15 -.LCFI7: - mov.l r6,@-r15 -.LCFI8: - mov.l r5,@-r15 -.LCFI9: - mov.l r4,@-r15 -.LCFIA: - mov.l r14,@-r15 -.LCFIB: - sts.l pr,@-r15 - - /* Stack layout: - xx bytes (on stack parameters) - 16 bytes (register parameters) - 4 bytes (saved frame pointer) - 4 bytes (saved return address) - 32 bytes (floating register parameters, SH-4 only) - 8 bytes (result) - 4 bytes (pad) - 4 bytes (5th arg) - <- new stack pointer - */ -.LCFIC: -#if defined(__SH4__) - add #-48,r15 -#else - add #-16,r15 -#endif -.LCFID: - mov r15,r14 -.LCFIE: - -#if defined(__SH4__) - mov r14,r1 - add #48,r1 -#ifdef __LITTLE_ENDIAN__ - fmov.s fr10,@-r1 - fmov.s fr11,@-r1 - fmov.s fr8,@-r1 - fmov.s fr9,@-r1 - fmov.s fr6,@-r1 - fmov.s fr7,@-r1 - fmov.s fr4,@-r1 - fmov.s fr5,@-r1 -#else - fmov.s fr11,@-r1 - fmov.s fr10,@-r1 - fmov.s fr9,@-r1 - fmov.s fr8,@-r1 - fmov.s fr7,@-r1 - fmov.s fr6,@-r1 - fmov.s fr5,@-r1 - fmov.s fr4,@-r1 -#endif - mov r1,r7 - mov r14,r6 - add #56,r6 -#else - mov r14,r6 - add #24,r6 -#endif - - bt/s 10f - mov r2, r5 - mov r14,r1 - add #8,r1 - mov r1,r5 -10: - - mov r14,r1 -#if defined(__SH4__) - add #72,r1 -#else - add #40,r1 -#endif - mov.l r1,@r14 - -#ifdef PIC - mov.l L_got,r1 - mova L_got,r0 - add r0,r1 - mov.l L_helper,r0 - add r1,r0 -#else - mov.l L_helper,r0 -#endif - jsr @r0 - mov r3,r4 - - shll r0 - mov r0,r1 - mova L_table,r0 - add r1,r0 - mov.w @r0,r0 - mov r14,r2 - braf r0 - add #8,r2 -0: - .align 2 -#ifdef PIC -L_got: - .long _GLOBAL_OFFSET_TABLE_ -L_helper: - .long ffi_closure_helper_SYSV@GOTOFF -#else -L_helper: - .long ffi_closure_helper_SYSV -#endif -L_table: - .short L_case_v - 0b /* FFI_TYPE_VOID */ - .short L_case_i - 0b /* FFI_TYPE_INT */ -#if defined(__SH4__) - .short L_case_f - 0b /* FFI_TYPE_FLOAT */ - .short L_case_d - 0b /* FFI_TYPE_DOUBLE */ - .short L_case_d - 0b /* FFI_TYPE_LONGDOUBLE */ -#else - .short L_case_i - 0b /* FFI_TYPE_FLOAT */ - .short L_case_ll - 0b /* FFI_TYPE_DOUBLE */ - .short L_case_ll - 0b /* FFI_TYPE_LONGDOUBLE */ -#endif - .short L_case_uq - 0b /* FFI_TYPE_UINT8 */ - .short L_case_q - 0b /* FFI_TYPE_SINT8 */ - .short L_case_uh - 0b /* FFI_TYPE_UINT16 */ - .short L_case_h - 0b /* FFI_TYPE_SINT16 */ - .short L_case_i - 0b /* FFI_TYPE_UINT32 */ - .short L_case_i - 0b /* FFI_TYPE_SINT32 */ - .short L_case_ll - 0b /* FFI_TYPE_UINT64 */ - .short L_case_ll - 0b /* FFI_TYPE_SINT64 */ - .short L_case_v - 0b /* FFI_TYPE_STRUCT */ - .short L_case_i - 0b /* FFI_TYPE_POINTER */ - -#if defined(__SH4__) -L_case_d: -#ifdef __LITTLE_ENDIAN__ - fmov.s @r2+,fr1 - bra L_case_v - fmov.s @r2,fr0 -#else - fmov.s @r2+,fr0 - bra L_case_v - fmov.s @r2,fr1 -#endif - -L_case_f: - bra L_case_v - fmov.s @r2,fr0 -#endif - -L_case_ll: - mov.l @r2+,r0 - bra L_case_v - mov.l @r2,r1 - -L_case_i: - bra L_case_v - mov.l @r2,r0 - -L_case_q: -#ifdef __LITTLE_ENDIAN__ -#else - add #3,r2 -#endif - bra L_case_v - mov.b @r2,r0 - -L_case_uq: -#ifdef __LITTLE_ENDIAN__ -#else - add #3,r2 -#endif - mov.b @r2,r0 - bra L_case_v - extu.b r0,r0 - -L_case_h: -#ifdef __LITTLE_ENDIAN__ -#else - add #2,r2 -#endif - bra L_case_v - mov.w @r2,r0 - -L_case_uh: -#ifdef __LITTLE_ENDIAN__ -#else - add #2,r2 -#endif - mov.w @r2,r0 - extu.w r0,r0 - /* fall through */ - -L_case_v: -#if defined(__SH4__) - add #48,r15 -#else - add #16,r15 -#endif - lds.l @r15+,pr - mov.l @r15+,r14 - rts - add #16,r15 -.LFE2: -.ffi_closure_SYSV_end: - .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif - - .section ".eh_frame","aw",@progbits -__FRAME_BEGIN__: - .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ -.LSCIE1: - .4byte 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ -#ifdef PIC - .ascii "zR\0" /* CIE Augmentation */ -#else - .byte 0x0 /* CIE Augmentation */ -#endif - .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ - .byte 0x7c /* sleb128 -4; CIE Data Alignment Factor */ - .byte 0x11 /* CIE RA Column */ -#ifdef PIC - .uleb128 0x1 /* Augmentation size */ - .byte 0x10 /* FDE Encoding (pcrel) */ -#endif - .byte 0xc /* DW_CFA_def_cfa */ - .byte 0xf /* uleb128 0xf */ - .byte 0x0 /* uleb128 0x0 */ - .align 2 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 /* FDE Length */ -.LASFDE1: - .4byte .LASFDE1-__FRAME_BEGIN__ /* FDE CIE offset */ -#ifdef PIC - .4byte .LFB1-. /* FDE initial location */ -#else - .4byte .LFB1 /* FDE initial location */ -#endif - .4byte .LFE1-.LFB1 /* FDE address range */ -#ifdef PIC - .uleb128 0x0 /* Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI0-.LFB1 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x4 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI1-.LCFI0 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI2-.LCFI1 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0xc /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI3-.LCFI2 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x10 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI4-.LCFI3 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x14 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI5-.LCFI4 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x18 /* uleb128 0x4 */ - .byte 0x91 /* DW_CFA_offset, column 0x11 */ - .byte 0x6 /* uleb128 0x6 */ - .byte 0x8e /* DW_CFA_offset, column 0xe */ - .byte 0x5 /* uleb128 0x5 */ - .byte 0x8c /* DW_CFA_offset, column 0xc */ - .byte 0x4 /* uleb128 0x4 */ - .byte 0x8a /* DW_CFA_offset, column 0xa */ - .byte 0x3 /* uleb128 0x3 */ - .byte 0x89 /* DW_CFA_offset, column 0x9 */ - .byte 0x2 /* uleb128 0x2 */ - .byte 0x88 /* DW_CFA_offset, column 0x8 */ - .byte 0x1 /* uleb128 0x1 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI6-.LCFI5 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0xe /* uleb128 0xe */ - .align 2 -.LEFDE1: - -.LSFDE3: - .4byte .LEFDE3-.LASFDE3 /* FDE Length */ -.LASFDE3: - .4byte .LASFDE3-__FRAME_BEGIN__ /* FDE CIE offset */ -#ifdef PIC - .4byte .LFB2-. /* FDE initial location */ -#else - .4byte .LFB2 /* FDE initial location */ -#endif - .4byte .LFE2-.LFB2 /* FDE address range */ -#ifdef PIC - .uleb128 0x0 /* Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI7-.LFB2 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x4 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI8-.LCFI7 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI9-.LCFI8 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0xc /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFIA-.LCFI9 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x10 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFIB-.LCFIA - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x14 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFIC-.LCFIB - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x18 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFID-.LCFIC - .byte 0xe /* DW_CFA_def_cfa_offset */ -#if defined(__SH4__) - .byte 24+48 /* uleb128 24+48 */ -#else - .byte 24+16 /* uleb128 24+16 */ -#endif - .byte 0x91 /* DW_CFA_offset, column 0x11 */ - .byte 0x6 /* uleb128 0x6 */ - .byte 0x8e /* DW_CFA_offset, column 0xe */ - .byte 0x5 /* uleb128 0x5 */ - .byte 0x84 /* DW_CFA_offset, column 0x4 */ - .byte 0x4 /* uleb128 0x4 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x3 /* uleb128 0x3 */ - .byte 0x86 /* DW_CFA_offset, column 0x6 */ - .byte 0x2 /* uleb128 0x2 */ - .byte 0x87 /* DW_CFA_offset, column 0x7 */ - .byte 0x1 /* uleb128 0x1 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFIE-.LCFID - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0xe /* uleb128 0xe */ - .align 2 -.LEFDE3: diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/sh64/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/sh64/ffi.c deleted file mode 100644 index 123b87ace..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/sh64/ffi.c +++ /dev/null @@ -1,469 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2003, 2004, 2006, 2007, 2012 Kaz Kojima - Copyright (c) 2008 Anthony Green - - SuperH SHmedia Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -#define NGREGARG 8 -#define NFREGARG 12 - -static int -return_type (ffi_type *arg) -{ - - if (arg->type != FFI_TYPE_STRUCT) - return arg->type; - - /* gcc uses r2 if the result can be packed in on register. */ - if (arg->size <= sizeof (UINT8)) - return FFI_TYPE_UINT8; - else if (arg->size <= sizeof (UINT16)) - return FFI_TYPE_UINT16; - else if (arg->size <= sizeof (UINT32)) - return FFI_TYPE_UINT32; - else if (arg->size <= sizeof (UINT64)) - return FFI_TYPE_UINT64; - - return FFI_TYPE_STRUCT; -} - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -void ffi_prep_args(char *stack, extended_cif *ecif) -{ - register unsigned int i; - register unsigned int avn; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - - argp = stack; - - if (return_type (ecif->cif->rtype) == FFI_TYPE_STRUCT) - { - *(void **) argp = ecif->rvalue; - argp += sizeof (UINT64); - } - - avn = ecif->cif->nargs; - p_argv = ecif->avalue; - - for (i = 0, p_arg = ecif->cif->arg_types; i < avn; i++, p_arg++, p_argv++) - { - size_t z; - int align; - - z = (*p_arg)->size; - align = (*p_arg)->alignment; - if (z < sizeof (UINT32)) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(SINT64 *) argp = (SINT64) *(SINT8 *)(*p_argv); - break; - - case FFI_TYPE_UINT8: - *(UINT64 *) argp = (UINT64) *(UINT8 *)(*p_argv); - break; - - case FFI_TYPE_SINT16: - *(SINT64 *) argp = (SINT64) *(SINT16 *)(*p_argv); - break; - - case FFI_TYPE_UINT16: - *(UINT64 *) argp = (UINT64) *(UINT16 *)(*p_argv); - break; - - case FFI_TYPE_STRUCT: - memcpy (argp, *p_argv, z); - break; - - default: - FFI_ASSERT(0); - } - argp += sizeof (UINT64); - } - else if (z == sizeof (UINT32) && align == sizeof (UINT32)) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - *(SINT64 *) argp = (SINT64) *(SINT32 *) (*p_argv); - break; - - case FFI_TYPE_FLOAT: - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT32: - case FFI_TYPE_STRUCT: - *(UINT64 *) argp = (UINT64) *(UINT32 *) (*p_argv); - break; - - default: - FFI_ASSERT(0); - break; - } - argp += sizeof (UINT64); - } - else if (z == sizeof (UINT64) - && align == sizeof (UINT64) - && ((int) *p_argv & (sizeof (UINT64) - 1)) == 0) - { - *(UINT64 *) argp = *(UINT64 *) (*p_argv); - argp += sizeof (UINT64); - } - else - { - int n = (z + sizeof (UINT64) - 1) / sizeof (UINT64); - - memcpy (argp, *p_argv, z); - argp += n * sizeof (UINT64); - } - } - - return; -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - int i, j; - int size, type; - int n, m; - int greg; - int freg; - int fpair = -1; - - greg = (return_type (cif->rtype) == FFI_TYPE_STRUCT ? 1 : 0); - freg = 0; - cif->flags2 = 0; - - for (i = j = 0; i < cif->nargs; i++) - { - type = (cif->arg_types)[i]->type; - switch (type) - { - case FFI_TYPE_FLOAT: - greg++; - cif->bytes += sizeof (UINT64) - sizeof (float); - if (freg >= NFREGARG - 1) - continue; - if (fpair < 0) - { - fpair = freg; - freg += 2; - } - else - fpair = -1; - cif->flags2 += ((cif->arg_types)[i]->type) << (2 * j++); - break; - - case FFI_TYPE_DOUBLE: - if (greg++ >= NGREGARG && (freg + 1) >= NFREGARG) - continue; - if ((freg + 1) < NFREGARG) - { - freg += 2; - cif->flags2 += ((cif->arg_types)[i]->type) << (2 * j++); - } - else - cif->flags2 += FFI_TYPE_INT << (2 * j++); - break; - - default: - size = (cif->arg_types)[i]->size; - if (size < sizeof (UINT64)) - cif->bytes += sizeof (UINT64) - size; - n = (size + sizeof (UINT64) - 1) / sizeof (UINT64); - if (greg >= NGREGARG) - continue; - else if (greg + n - 1 >= NGREGARG) - greg = NGREGARG; - else - greg += n; - for (m = 0; m < n; m++) - cif->flags2 += FFI_TYPE_INT << (2 * j++); - break; - } - } - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_STRUCT: - cif->flags = return_type (cif->rtype); - break; - - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags = cif->rtype->type; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - - return FFI_OK; -} - -/*@-declundef@*/ -/*@-exportheader@*/ -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), - /*@out@*/ extended_cif *, - unsigned, unsigned, long long, - /*@out@*/ unsigned *, - void (*fn)(void)); -/*@=declundef@*/ -/*@=exportheader@*/ - -void ffi_call(/*@dependent@*/ ffi_cif *cif, - void (*fn)(void), - /*@out@*/ void *rvalue, - /*@dependent@*/ void **avalue) -{ - extended_cif ecif; - UINT64 trvalue; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if (cif->rtype->type == FFI_TYPE_STRUCT - && return_type (cif->rtype) != FFI_TYPE_STRUCT) - ecif.rvalue = &trvalue; - else if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, cif->flags2, - ecif.rvalue, fn); - break; - default: - FFI_ASSERT(0); - break; - } - - if (rvalue - && cif->rtype->type == FFI_TYPE_STRUCT - && return_type (cif->rtype) != FFI_TYPE_STRUCT) - memcpy (rvalue, &trvalue, cif->rtype->size); -} - -extern void ffi_closure_SYSV (void); -extern void __ic_invalidate (void *line); - -ffi_status -ffi_prep_closure_loc (ffi_closure *closure, - ffi_cif *cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp; - - if (cif->abi != FFI_SYSV) - return FFI_BAD_ABI; - - tramp = (unsigned int *) &closure->tramp[0]; - /* Since ffi_closure is an aligned object, the ffi trampoline is - called as an SHcompact code. Sigh. - SHcompact part: - mova @(1,pc),r0; add #1,r0; jmp @r0; nop; - SHmedia part: - movi fnaddr >> 16,r1; shori fnaddr,r1; ptabs/l r1,tr0 - movi cxt >> 16,r1; shori cxt,r1; blink tr0,r63 */ -#ifdef __LITTLE_ENDIAN__ - tramp[0] = 0x7001c701; - tramp[1] = 0x0009402b; -#else - tramp[0] = 0xc7017001; - tramp[1] = 0x402b0009; -#endif - tramp[2] = 0xcc000010 | (((UINT32) ffi_closure_SYSV) >> 16) << 10; - tramp[3] = 0xc8000010 | (((UINT32) ffi_closure_SYSV) & 0xffff) << 10; - tramp[4] = 0x6bf10600; - tramp[5] = 0xcc000010 | (((UINT32) codeloc) >> 16) << 10; - tramp[6] = 0xc8000010 | (((UINT32) codeloc) & 0xffff) << 10; - tramp[7] = 0x4401fff0; - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - /* Flush the icache. */ - asm volatile ("ocbwb %0,0; synco; icbi %1,0; synci" : : "r" (tramp), - "r"(codeloc)); - - return FFI_OK; -} - -/* Basically the trampoline invokes ffi_closure_SYSV, and on - * entry, r3 holds the address of the closure. - * After storing the registers that could possibly contain - * parameters to be passed into the stack frame and setting - * up space for a return value, ffi_closure_SYSV invokes the - * following helper function to do most of the work. - */ - -int -ffi_closure_helper_SYSV (ffi_closure *closure, UINT64 *rvalue, - UINT64 *pgr, UINT64 *pfr, UINT64 *pst) -{ - void **avalue; - ffi_type **p_arg; - int i, avn; - int greg, freg; - ffi_cif *cif; - int fpair = -1; - - cif = closure->cif; - avalue = alloca (cif->nargs * sizeof (void *)); - - /* Copy the caller's structure return value address so that the closure - returns the data directly to the caller. */ - if (return_type (cif->rtype) == FFI_TYPE_STRUCT) - { - rvalue = (UINT64 *) *pgr; - greg = 1; - } - else - greg = 0; - - freg = 0; - cif = closure->cif; - avn = cif->nargs; - - /* Grab the addresses of the arguments from the stack frame. */ - for (i = 0, p_arg = cif->arg_types; i < avn; i++, p_arg++) - { - size_t z; - void *p; - - z = (*p_arg)->size; - if (z < sizeof (UINT32)) - { - p = pgr + greg++; - - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - case FFI_TYPE_STRUCT: -#ifdef __LITTLE_ENDIAN__ - avalue[i] = p; -#else - avalue[i] = ((char *) p) + sizeof (UINT32) - z; -#endif - break; - - default: - FFI_ASSERT(0); - } - } - else if (z == sizeof (UINT32)) - { - if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (freg < NFREGARG - 1) - { - if (fpair >= 0) - { - avalue[i] = (UINT32 *) pfr + fpair; - fpair = -1; - } - else - { -#ifdef __LITTLE_ENDIAN__ - fpair = freg; - avalue[i] = (UINT32 *) pfr + (1 ^ freg); -#else - fpair = 1 ^ freg; - avalue[i] = (UINT32 *) pfr + freg; -#endif - freg += 2; - } - } - else -#ifdef __LITTLE_ENDIAN__ - avalue[i] = pgr + greg; -#else - avalue[i] = (UINT32 *) (pgr + greg) + 1; -#endif - } - else -#ifdef __LITTLE_ENDIAN__ - avalue[i] = pgr + greg; -#else - avalue[i] = (UINT32 *) (pgr + greg) + 1; -#endif - greg++; - } - else if ((*p_arg)->type == FFI_TYPE_DOUBLE) - { - if (freg + 1 >= NFREGARG) - avalue[i] = pgr + greg; - else - { - avalue[i] = pfr + (freg >> 1); - freg += 2; - } - greg++; - } - else - { - int n = (z + sizeof (UINT64) - 1) / sizeof (UINT64); - - avalue[i] = pgr + greg; - greg += n; - } - } - - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_SYSV how to perform return type promotions. */ - return return_type (cif->rtype); -} - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/sh64/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/sh64/ffitarget.h deleted file mode 100644 index 08a6fe96c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/sh64/ffitarget.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for SuperH - SHmedia. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -/* ---- Generic type definitions ----------------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; - -#define FFI_EXTRA_CIF_FIELDS long long flags2 -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 32 -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/sh64/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/sh64/sysv.S deleted file mode 100644 index c4587d5f3..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/sh64/sysv.S +++ /dev/null @@ -1,539 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2003, 2004, 2006, 2008 Kaz Kojima - - SuperH SHmedia Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#ifdef HAVE_MACHINE_ASM_H -#include -#else -/* XXX these lose for some platforms, I'm sure. */ -#define CNAME(x) x -#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): -#endif - -#ifdef __LITTLE_ENDIAN__ -#define OFS_FLT 0 -#else -#define OFS_FLT 4 -#endif - - .section .text..SHmedia32,"ax" - - # r2: ffi_prep_args - # r3: &ecif - # r4: bytes - # r5: flags - # r6: flags2 - # r7: rvalue - # r8: fn - - # This assumes we are using gas. - .align 5 -ENTRY(ffi_call_SYSV) - # Save registers -.LFB1: - addi.l r15, -48, r15 -.LCFI0: - st.q r15, 40, r32 - st.q r15, 32, r31 - st.q r15, 24, r30 - st.q r15, 16, r29 - st.q r15, 8, r28 - st.l r15, 4, r18 - st.l r15, 0, r14 -.LCFI1: - add.l r15, r63, r14 -.LCFI2: -# add r4, r63, r28 - add r5, r63, r29 - add r6, r63, r30 - add r7, r63, r31 - add r8, r63, r32 - - addi r4, (64 + 7), r4 - andi r4, ~7, r4 - sub.l r15, r4, r15 - - ptabs/l r2, tr0 - add r15, r63, r2 - blink tr0, r18 - - addi r15, 64, r22 - movi 0, r0 - movi 0, r1 - movi -1, r23 - - pt/l 1f, tr1 - bnei/l r29, FFI_TYPE_STRUCT, tr1 - ld.l r15, 0, r19 - addi r15, 8, r15 - addi r0, 1, r0 -1: - -.L_pass: - andi r30, 3, r20 - shlri r30, 2, r30 - - pt/l .L_call_it, tr0 - pt/l .L_pass_i, tr1 - pt/l .L_pass_f, tr2 - - beqi/l r20, FFI_TYPE_VOID, tr0 - beqi/l r20, FFI_TYPE_INT, tr1 - beqi/l r20, FFI_TYPE_FLOAT, tr2 - -.L_pass_d: - addi r0, 1, r0 - pt/l 3f, tr0 - movi 12, r20 - bge/l r1, r20, tr0 - - pt/l .L_pop_d, tr1 - pt/l 2f, tr0 - blink tr1, r63 -2: - addi.l r15, 8, r15 -3: - pt/l .L_pass, tr0 - addi r1, 2, r1 - blink tr0, r63 - -.L_pop_d: - pt/l .L_pop_d_tbl, tr1 - gettr tr1, r20 - shlli r1, 2, r21 - add r20, r21, r20 - ptabs/l r20, tr1 - blink tr1, r63 - -.L_pop_d_tbl: - fld.d r15, 0, dr0 - blink tr0, r63 - fld.d r15, 0, dr2 - blink tr0, r63 - fld.d r15, 0, dr4 - blink tr0, r63 - fld.d r15, 0, dr6 - blink tr0, r63 - fld.d r15, 0, dr8 - blink tr0, r63 - fld.d r15, 0, dr10 - blink tr0, r63 - -.L_pass_f: - addi r0, 1, r0 - pt/l 3f, tr0 - movi 12, r20 - bge/l r1, r20, tr0 - - pt/l .L_pop_f, tr1 - pt/l 2f, tr0 - blink tr1, r63 -2: - addi.l r15, 8, r15 -3: - pt/l .L_pass, tr0 - blink tr0, r63 - -.L_pop_f: - pt/l .L_pop_f_tbl, tr1 - pt/l 5f, tr2 - gettr tr1, r20 - bge/l r23, r63, tr2 - add r1, r63, r23 - shlli r1, 3, r21 - addi r1, 2, r1 - add r20, r21, r20 - ptabs/l r20, tr1 - blink tr1, r63 -5: - addi r23, 1, r21 - movi -1, r23 - shlli r21, 3, r21 - add r20, r21, r20 - ptabs/l r20, tr1 - blink tr1, r63 - -.L_pop_f_tbl: - fld.s r15, OFS_FLT, fr0 - blink tr0, r63 - fld.s r15, OFS_FLT, fr1 - blink tr0, r63 - fld.s r15, OFS_FLT, fr2 - blink tr0, r63 - fld.s r15, OFS_FLT, fr3 - blink tr0, r63 - fld.s r15, OFS_FLT, fr4 - blink tr0, r63 - fld.s r15, OFS_FLT, fr5 - blink tr0, r63 - fld.s r15, OFS_FLT, fr6 - blink tr0, r63 - fld.s r15, OFS_FLT, fr7 - blink tr0, r63 - fld.s r15, OFS_FLT, fr8 - blink tr0, r63 - fld.s r15, OFS_FLT, fr9 - blink tr0, r63 - fld.s r15, OFS_FLT, fr10 - blink tr0, r63 - fld.s r15, OFS_FLT, fr11 - blink tr0, r63 - -.L_pass_i: - pt/l 3f, tr0 - movi 8, r20 - bge/l r0, r20, tr0 - - pt/l .L_pop_i, tr1 - pt/l 2f, tr0 - blink tr1, r63 -2: - addi.l r15, 8, r15 -3: - pt/l .L_pass, tr0 - addi r0, 1, r0 - blink tr0, r63 - -.L_pop_i: - pt/l .L_pop_i_tbl, tr1 - gettr tr1, r20 - shlli r0, 3, r21 - add r20, r21, r20 - ptabs/l r20, tr1 - blink tr1, r63 - -.L_pop_i_tbl: - ld.q r15, 0, r2 - blink tr0, r63 - ld.q r15, 0, r3 - blink tr0, r63 - ld.q r15, 0, r4 - blink tr0, r63 - ld.q r15, 0, r5 - blink tr0, r63 - ld.q r15, 0, r6 - blink tr0, r63 - ld.q r15, 0, r7 - blink tr0, r63 - ld.q r15, 0, r8 - blink tr0, r63 - ld.q r15, 0, r9 - blink tr0, r63 - -.L_call_it: - # call function - pt/l 1f, tr1 - bnei/l r29, FFI_TYPE_STRUCT, tr1 - add r19, r63, r2 -1: - add r22, r63, r15 - ptabs/l r32, tr0 - blink tr0, r18 - - pt/l .L_ret_i, tr0 - pt/l .L_ret_ll, tr1 - pt/l .L_ret_d, tr2 - pt/l .L_ret_f, tr3 - pt/l .L_epilogue, tr4 - - beqi/l r29, FFI_TYPE_INT, tr0 - beqi/l r29, FFI_TYPE_UINT32, tr0 - beqi/l r29, FFI_TYPE_SINT64, tr1 - beqi/l r29, FFI_TYPE_UINT64, tr1 - beqi/l r29, FFI_TYPE_DOUBLE, tr2 - beqi/l r29, FFI_TYPE_FLOAT, tr3 - - pt/l .L_ret_q, tr0 - pt/l .L_ret_h, tr1 - - beqi/l r29, FFI_TYPE_UINT8, tr0 - beqi/l r29, FFI_TYPE_UINT16, tr1 - blink tr4, r63 - -.L_ret_d: - fst.d r31, 0, dr0 - blink tr4, r63 - -.L_ret_ll: - st.q r31, 0, r2 - blink tr4, r63 - -.L_ret_f: - fst.s r31, OFS_FLT, fr0 - blink tr4, r63 - -.L_ret_q: - st.b r31, 0, r2 - blink tr4, r63 - -.L_ret_h: - st.w r31, 0, r2 - blink tr4, r63 - -.L_ret_i: - st.l r31, 0, r2 - # Fall - -.L_epilogue: - # Remove the space we pushed for the args - add r14, r63, r15 - - ld.l r15, 0, r14 - ld.l r15, 4, r18 - ld.q r15, 8, r28 - ld.q r15, 16, r29 - ld.q r15, 24, r30 - ld.q r15, 32, r31 - ld.q r15, 40, r32 - addi.l r15, 48, r15 - ptabs r18, tr0 - blink tr0, r63 - -.LFE1: -.ffi_call_SYSV_end: - .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) - - .align 5 -ENTRY(ffi_closure_SYSV) -.LFB2: - addi.l r15, -136, r15 -.LCFI3: - st.l r15, 12, r18 - st.l r15, 8, r14 - st.l r15, 4, r12 -.LCFI4: - add r15, r63, r14 -.LCFI5: - /* Stack layout: - ... - 64 bytes (register parameters) - 48 bytes (floating register parameters) - 8 bytes (result) - 4 bytes (r18) - 4 bytes (r14) - 4 bytes (r12) - 4 bytes (for align) - <- new stack pointer - */ - fst.d r14, 24, dr0 - fst.d r14, 32, dr2 - fst.d r14, 40, dr4 - fst.d r14, 48, dr6 - fst.d r14, 56, dr8 - fst.d r14, 64, dr10 - st.q r14, 72, r2 - st.q r14, 80, r3 - st.q r14, 88, r4 - st.q r14, 96, r5 - st.q r14, 104, r6 - st.q r14, 112, r7 - st.q r14, 120, r8 - st.q r14, 128, r9 - - add r1, r63, r2 - addi r14, 16, r3 - addi r14, 72, r4 - addi r14, 24, r5 - addi r14, 136, r6 -#ifdef PIC - movi (((datalabel _GLOBAL_OFFSET_TABLE_-(.LPCS0-.)) >> 16) & 65535), r12 - shori ((datalabel _GLOBAL_OFFSET_TABLE_-(.LPCS0-.)) & 65535), r12 -.LPCS0: ptrel/u r12, tr0 - movi ((ffi_closure_helper_SYSV@GOTPLT) & 65535), r1 - gettr tr0, r12 - ldx.l r1, r12, r1 - ptabs r1, tr0 -#else - pt/l ffi_closure_helper_SYSV, tr0 -#endif - blink tr0, r18 - - shlli r2, 1, r1 - movi (((datalabel .L_table) >> 16) & 65535), r2 - shori ((datalabel .L_table) & 65535), r2 - ldx.w r2, r1, r1 - add r1, r2, r1 - pt/l .L_case_v, tr1 - ptabs r1, tr0 - blink tr0, r63 - - .align 2 -.L_table: - .word .L_case_v - datalabel .L_table /* FFI_TYPE_VOID */ - .word .L_case_i - datalabel .L_table /* FFI_TYPE_INT */ - .word .L_case_f - datalabel .L_table /* FFI_TYPE_FLOAT */ - .word .L_case_d - datalabel .L_table /* FFI_TYPE_DOUBLE */ - .word .L_case_d - datalabel .L_table /* FFI_TYPE_LONGDOUBLE */ - .word .L_case_uq - datalabel .L_table /* FFI_TYPE_UINT8 */ - .word .L_case_q - datalabel .L_table /* FFI_TYPE_SINT8 */ - .word .L_case_uh - datalabel .L_table /* FFI_TYPE_UINT16 */ - .word .L_case_h - datalabel .L_table /* FFI_TYPE_SINT16 */ - .word .L_case_i - datalabel .L_table /* FFI_TYPE_UINT32 */ - .word .L_case_i - datalabel .L_table /* FFI_TYPE_SINT32 */ - .word .L_case_ll - datalabel .L_table /* FFI_TYPE_UINT64 */ - .word .L_case_ll - datalabel .L_table /* FFI_TYPE_SINT64 */ - .word .L_case_v - datalabel .L_table /* FFI_TYPE_STRUCT */ - .word .L_case_i - datalabel .L_table /* FFI_TYPE_POINTER */ - - .align 2 -.L_case_d: - fld.d r14, 16, dr0 - blink tr1, r63 -.L_case_f: - fld.s r14, 16, fr0 - blink tr1, r63 -.L_case_ll: - ld.q r14, 16, r2 - blink tr1, r63 -.L_case_i: - ld.l r14, 16, r2 - blink tr1, r63 -.L_case_q: - ld.b r14, 16, r2 - blink tr1, r63 -.L_case_uq: - ld.ub r14, 16, r2 - blink tr1, r63 -.L_case_h: - ld.w r14, 16, r2 - blink tr1, r63 -.L_case_uh: - ld.uw r14, 16, r2 - blink tr1, r63 -.L_case_v: - add.l r14, r63, r15 - ld.l r15, 4, r12 - ld.l r15, 8, r14 - ld.l r15, 12, r18 - addi.l r15, 136, r15 - ptabs r18, tr0 - blink tr0, r63 - -.LFE2: -.ffi_closure_SYSV_end: - .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif - - .section ".eh_frame","aw",@progbits -__FRAME_BEGIN__: - .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ -.LSCIE1: - .4byte 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ -#ifdef PIC - .ascii "zR\0" /* CIE Augmentation */ -#else - .byte 0x0 /* CIE Augmentation */ -#endif - .uleb128 0x1 /* CIE Code Alignment Factor */ - .sleb128 -4 /* CIE Data Alignment Factor */ - .byte 0x12 /* CIE RA Column */ -#ifdef PIC - .uleb128 0x1 /* Augmentation size */ - .byte 0x10 /* FDE Encoding (pcrel) */ -#endif - .byte 0xc /* DW_CFA_def_cfa */ - .uleb128 0xf - .uleb128 0x0 - .align 2 -.LECIE1: -.LSFDE1: - .4byte datalabel .LEFDE1-datalabel .LASFDE1 /* FDE Length */ -.LASFDE1: - .4byte datalabel .LASFDE1-datalabel __FRAME_BEGIN__ -#ifdef PIC - .4byte .LFB1-. /* FDE initial location */ -#else - .4byte .LFB1 /* FDE initial location */ -#endif - .4byte datalabel .LFE1-datalabel .LFB1 /* FDE address range */ -#ifdef PIC - .uleb128 0x0 /* Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte datalabel .LCFI0-datalabel .LFB1 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .uleb128 0x30 - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte datalabel .LCFI1-datalabel .LCFI0 - .byte 0x8e /* DW_CFA_offset, column 0xe */ - .uleb128 0xc - .byte 0x92 /* DW_CFA_offset, column 0x12 */ - .uleb128 0xb - .byte 0x9c /* DW_CFA_offset, column 0x1c */ - .uleb128 0xa - .byte 0x9d /* DW_CFA_offset, column 0x1d */ - .uleb128 0x8 - .byte 0x9e /* DW_CFA_offset, column 0x1e */ - .uleb128 0x6 - .byte 0x9f /* DW_CFA_offset, column 0x1f */ - .uleb128 0x4 - .byte 0xa0 /* DW_CFA_offset, column 0x20 */ - .uleb128 0x2 - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte datalabel .LCFI2-datalabel .LCFI1 - .byte 0xd /* DW_CFA_def_cfa_register */ - .uleb128 0xe - .align 2 -.LEFDE1: - -.LSFDE3: - .4byte datalabel .LEFDE3-datalabel .LASFDE3 /* FDE Length */ -.LASFDE3: - .4byte datalabel .LASFDE3-datalabel __FRAME_BEGIN__ -#ifdef PIC - .4byte .LFB2-. /* FDE initial location */ -#else - .4byte .LFB2 /* FDE initial location */ -#endif - .4byte datalabel .LFE2-datalabel .LFB2 /* FDE address range */ -#ifdef PIC - .uleb128 0x0 /* Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte datalabel .LCFI3-datalabel .LFB2 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .uleb128 0x88 - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte datalabel .LCFI4-datalabel .LCFI3 - .byte 0x8c /* DW_CFA_offset, column 0xc */ - .uleb128 0x21 - .byte 0x8e /* DW_CFA_offset, column 0xe */ - .uleb128 0x20 - .byte 0x92 /* DW_CFA_offset, column 0x12 */ - .uleb128 0x1f - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte datalabel .LCFI5-datalabel .LCFI4 - .byte 0xd /* DW_CFA_def_cfa_register */ - .uleb128 0xe - .align 2 -.LEFDE3: diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/sparc/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/sparc/ffi.c deleted file mode 100644 index 9f0fded48..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/sparc/ffi.c +++ /dev/null @@ -1,681 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2011, 2013 Anthony Green - Copyright (c) 1996, 2003-2004, 2007-2008 Red Hat, Inc. - - SPARC Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -void ffi_prep_args_v8(char *stack, extended_cif *ecif) -{ - int i; - void **p_argv; - char *argp; - ffi_type **p_arg; - - /* Skip 16 words for the window save area */ - argp = stack + 16*sizeof(int); - - /* This should only really be done when we are returning a structure, - however, it's faster just to do it all the time... - - if ( ecif->cif->rtype->type == FFI_TYPE_STRUCT ) */ - *(int *) argp = (long)ecif->rvalue; - - /* And 1 word for the structure return value. */ - argp += sizeof(int); - -#ifdef USING_PURIFY - /* Purify will probably complain in our assembly routine, unless we - zero out this memory. */ - - ((int*)argp)[0] = 0; - ((int*)argp)[1] = 0; - ((int*)argp)[2] = 0; - ((int*)argp)[3] = 0; - ((int*)argp)[4] = 0; - ((int*)argp)[5] = 0; -#endif - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i; i--, p_arg++) - { - size_t z; - - if ((*p_arg)->type == FFI_TYPE_STRUCT -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || (*p_arg)->type == FFI_TYPE_LONGDOUBLE -#endif - ) - { - *(unsigned int *) argp = (unsigned long)(* p_argv); - z = sizeof(int); - } - else - { - z = (*p_arg)->size; - if (z < sizeof(int)) - { - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = *(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = *(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = *(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = *(UINT16 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - } - else - { - memcpy(argp, *p_argv, z); - } - } - p_argv++; - argp += z; - } - - return; -} - -int ffi_prep_args_v9(char *stack, extended_cif *ecif) -{ - int i, ret = 0; - int tmp; - void **p_argv; - char *argp; - ffi_type **p_arg; - - tmp = 0; - - /* Skip 16 words for the window save area */ - argp = stack + 16*sizeof(long long); - -#ifdef USING_PURIFY - /* Purify will probably complain in our assembly routine, unless we - zero out this memory. */ - - ((long long*)argp)[0] = 0; - ((long long*)argp)[1] = 0; - ((long long*)argp)[2] = 0; - ((long long*)argp)[3] = 0; - ((long long*)argp)[4] = 0; - ((long long*)argp)[5] = 0; -#endif - - p_argv = ecif->avalue; - - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT && - ecif->cif->rtype->size > 32) - { - *(unsigned long long *) argp = (unsigned long)ecif->rvalue; - argp += sizeof(long long); - tmp = 1; - } - - for (i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs; - i++, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - switch ((*p_arg)->type) - { - case FFI_TYPE_STRUCT: - if (z > 16) - { - /* For structures larger than 16 bytes we pass reference. */ - *(unsigned long long *) argp = (unsigned long)* p_argv; - argp += sizeof(long long); - tmp++; - p_argv++; - continue; - } - /* FALLTHROUGH */ - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif - ret = 1; /* We should promote into FP regs as well as integer. */ - break; - } - if (z < sizeof(long long)) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed long long *) argp = *(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned long long *) argp = *(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed long long *) argp = *(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned long long *) argp = *(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_SINT32: - *(signed long long *) argp = *(SINT32 *)(* p_argv); - break; - - case FFI_TYPE_UINT32: - *(unsigned long long *) argp = *(UINT32 *)(* p_argv); - break; - - case FFI_TYPE_FLOAT: - *(float *) (argp + 4) = *(FLOAT32 *)(* p_argv); /* Right justify */ - break; - - case FFI_TYPE_STRUCT: - memcpy(argp, *p_argv, z); - break; - - default: - FFI_ASSERT(0); - } - z = sizeof(long long); - tmp++; - } - else if (z == sizeof(long long)) - { - memcpy(argp, *p_argv, z); - z = sizeof(long long); - tmp++; - } - else - { - if ((tmp & 1) && (*p_arg)->alignment > 8) - { - tmp++; - argp += sizeof(long long); - } - memcpy(argp, *p_argv, z); - z = 2 * sizeof(long long); - tmp += 2; - } - p_argv++; - argp += z; - } - - return ret; -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - int wordsize; - - if (cif->abi != FFI_V9) - { - wordsize = 4; - - /* If we are returning a struct, this will already have been added. - Otherwise we need to add it because it's always got to be there! */ - - if (cif->rtype->type != FFI_TYPE_STRUCT) - cif->bytes += wordsize; - - /* sparc call frames require that space is allocated for 6 args, - even if they aren't used. Make that space if necessary. */ - - if (cif->bytes < 4*6+4) - cif->bytes = 4*6+4; - } - else - { - wordsize = 8; - - /* sparc call frames require that space is allocated for 6 args, - even if they aren't used. Make that space if necessary. */ - - if (cif->bytes < 8*6) - cif->bytes = 8*6; - } - - /* Adjust cif->bytes. to include 16 words for the window save area, - and maybe the struct/union return pointer area, */ - - cif->bytes += 16 * wordsize; - - /* The stack must be 2 word aligned, so round bytes up - appropriately. */ - - cif->bytes = ALIGN(cif->bytes, 2 * wordsize); - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif - cif->flags = cif->rtype->type; - break; - - case FFI_TYPE_STRUCT: - if (cif->abi == FFI_V9 && cif->rtype->size > 32) - cif->flags = FFI_TYPE_VOID; - else - cif->flags = FFI_TYPE_STRUCT; - break; - - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - if (cif->abi == FFI_V9) - cif->flags = FFI_TYPE_INT; - else - cif->flags = cif->rtype->type; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - if (cif->abi == FFI_V9) - cif->flags = FFI_TYPE_INT; - else - cif->flags = FFI_TYPE_SINT64; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - return FFI_OK; -} - -int ffi_v9_layout_struct(ffi_type *arg, int off, char *ret, char *intg, char *flt) -{ - ffi_type **ptr = &arg->elements[0]; - - while (*ptr != NULL) - { - if (off & ((*ptr)->alignment - 1)) - off = ALIGN(off, (*ptr)->alignment); - - switch ((*ptr)->type) - { - case FFI_TYPE_STRUCT: - off = ffi_v9_layout_struct(*ptr, off, ret, intg, flt); - off = ALIGN(off, FFI_SIZEOF_ARG); - break; - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif - memmove(ret + off, flt + off, (*ptr)->size); - off += (*ptr)->size; - break; - default: - memmove(ret + off, intg + off, (*ptr)->size); - off += (*ptr)->size; - break; - } - ptr++; - } - return off; -} - - -#ifdef SPARC64 -extern int ffi_call_v9(void *, extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); -#else -extern int ffi_call_v8(void *, extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); -#endif - -#ifndef __GNUC__ -void ffi_flush_icache (void *, size_t); -#endif - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - void *rval = rvalue; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - ecif.rvalue = rvalue; - if (cif->rtype->type == FFI_TYPE_STRUCT) - { - if (cif->rtype->size <= 32) - rval = alloca(64); - else - { - rval = NULL; - if (rvalue == NULL) - ecif.rvalue = alloca(cif->rtype->size); - } - } - - switch (cif->abi) - { - case FFI_V8: -#ifdef SPARC64 - /* We don't yet support calling 32bit code from 64bit */ - FFI_ASSERT(0); -#else - if (rvalue && (cif->rtype->type == FFI_TYPE_STRUCT -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || cif->flags == FFI_TYPE_LONGDOUBLE -#endif - )) - { - /* For v8, we need an "unimp" with size of returning struct */ - /* behind "call", so we alloc some executable space for it. */ - /* l7 is used, we need to make sure v8.S doesn't use %l7. */ - unsigned int *call_struct = NULL; - ffi_closure_alloc(32, (void **)&call_struct); - if (call_struct) - { - unsigned long f = (unsigned long)fn; - call_struct[0] = 0xae10001f; /* mov %i7, %l7 */ - call_struct[1] = 0xbe10000f; /* mov %o7, %i7 */ - call_struct[2] = 0x03000000 | f >> 10; /* sethi %hi(fn), %g1 */ - call_struct[3] = 0x9fc06000 | (f & 0x3ff); /* jmp %g1+%lo(fn), %o7 */ - call_struct[4] = 0x01000000; /* nop */ - if (cif->rtype->size < 0x7f) - call_struct[5] = cif->rtype->size; /* unimp */ - else - call_struct[5] = 0x01000000; /* nop */ - call_struct[6] = 0x81c7e008; /* ret */ - call_struct[7] = 0xbe100017; /* mov %l7, %i7 */ -#ifdef __GNUC__ - asm volatile ("iflush %0; iflush %0+8; iflush %0+16; iflush %0+24" : : - "r" (call_struct) : "memory"); - /* SPARC v8 requires 5 instructions for flush to be visible */ - asm volatile ("nop; nop; nop; nop; nop"); -#else - ffi_flush_icache (call_struct, 32); -#endif - ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes, - cif->flags, rvalue, call_struct); - ffi_closure_free(call_struct); - } - else - { - ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes, - cif->flags, rvalue, fn); - } - } - else - { - ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes, - cif->flags, rvalue, fn); - } -#endif - break; - case FFI_V9: -#ifdef SPARC64 - ffi_call_v9(ffi_prep_args_v9, &ecif, cif->bytes, - cif->flags, rval, fn); - if (rvalue && rval && cif->rtype->type == FFI_TYPE_STRUCT) - ffi_v9_layout_struct(cif->rtype, 0, (char *)rvalue, (char *)rval, ((char *)rval)+32); -#else - /* And vice versa */ - FFI_ASSERT(0); -#endif - break; - default: - FFI_ASSERT(0); - break; - } -} - - -#ifdef SPARC64 -extern void ffi_closure_v9(void); -#else -extern void ffi_closure_v8(void); -#endif - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp = (unsigned int *) &closure->tramp[0]; - unsigned long fn; -#ifdef SPARC64 - /* Trampoline address is equal to the closure address. We take advantage - of that to reduce the trampoline size by 8 bytes. */ - if (cif->abi != FFI_V9) - return FFI_BAD_ABI; - fn = (unsigned long) ffi_closure_v9; - tramp[0] = 0x83414000; /* rd %pc, %g1 */ - tramp[1] = 0xca586010; /* ldx [%g1+16], %g5 */ - tramp[2] = 0x81c14000; /* jmp %g5 */ - tramp[3] = 0x01000000; /* nop */ - *((unsigned long *) &tramp[4]) = fn; -#else - unsigned long ctx = (unsigned long) codeloc; - if (cif->abi != FFI_V8) - return FFI_BAD_ABI; - fn = (unsigned long) ffi_closure_v8; - tramp[0] = 0x03000000 | fn >> 10; /* sethi %hi(fn), %g1 */ - tramp[1] = 0x05000000 | ctx >> 10; /* sethi %hi(ctx), %g2 */ - tramp[2] = 0x81c06000 | (fn & 0x3ff); /* jmp %g1+%lo(fn) */ - tramp[3] = 0x8410a000 | (ctx & 0x3ff);/* or %g2, %lo(ctx) */ -#endif - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - /* Flush the Icache. closure is 8 bytes aligned. */ -#ifdef __GNUC__ -#ifdef SPARC64 - asm volatile ("flush %0; flush %0+8" : : "r" (closure) : "memory"); -#else - asm volatile ("iflush %0; iflush %0+8" : : "r" (closure) : "memory"); - /* SPARC v8 requires 5 instructions for flush to be visible */ - asm volatile ("nop; nop; nop; nop; nop"); -#endif -#else - ffi_flush_icache (closure, 16); -#endif - - return FFI_OK; -} - -int -ffi_closure_sparc_inner_v8(ffi_closure *closure, - void *rvalue, unsigned long *gpr, unsigned long *scratch) -{ - ffi_cif *cif; - ffi_type **arg_types; - void **avalue; - int i, argn; - - cif = closure->cif; - arg_types = cif->arg_types; - avalue = alloca(cif->nargs * sizeof(void *)); - - /* Copy the caller's structure return address so that the closure - returns the data directly to the caller. */ - if (cif->flags == FFI_TYPE_STRUCT -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || cif->flags == FFI_TYPE_LONGDOUBLE -#endif - ) - rvalue = (void *) gpr[0]; - - /* Always skip the structure return address. */ - argn = 1; - - /* Grab the addresses of the arguments from the stack frame. */ - for (i = 0; i < cif->nargs; i++) - { - if (arg_types[i]->type == FFI_TYPE_STRUCT -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || arg_types[i]->type == FFI_TYPE_LONGDOUBLE -#endif - ) - { - /* Straight copy of invisible reference. */ - avalue[i] = (void *)gpr[argn++]; - } - else if ((arg_types[i]->type == FFI_TYPE_DOUBLE - || arg_types[i]->type == FFI_TYPE_SINT64 - || arg_types[i]->type == FFI_TYPE_UINT64) - /* gpr is 8-byte aligned. */ - && (argn % 2) != 0) - { - /* Align on a 8-byte boundary. */ - scratch[0] = gpr[argn]; - scratch[1] = gpr[argn+1]; - avalue[i] = scratch; - scratch -= 2; - argn += 2; - } - else - { - /* Always right-justify. */ - argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - avalue[i] = ((char *) &gpr[argn]) - arg_types[i]->size; - } - } - - /* Invoke the closure. */ - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_sparc how to perform return type promotions. */ - return cif->rtype->type; -} - -int -ffi_closure_sparc_inner_v9(ffi_closure *closure, - void *rvalue, unsigned long *gpr, double *fpr) -{ - ffi_cif *cif; - ffi_type **arg_types; - void **avalue; - int i, argn, fp_slot_max; - - cif = closure->cif; - arg_types = cif->arg_types; - avalue = alloca(cif->nargs * sizeof(void *)); - - /* Copy the caller's structure return address so that the closure - returns the data directly to the caller. */ - if (cif->flags == FFI_TYPE_VOID - && cif->rtype->type == FFI_TYPE_STRUCT) - { - rvalue = (void *) gpr[0]; - /* Skip the structure return address. */ - argn = 1; - } - else - argn = 0; - - fp_slot_max = 16 - argn; - - /* Grab the addresses of the arguments from the stack frame. */ - for (i = 0; i < cif->nargs; i++) - { - if (arg_types[i]->type == FFI_TYPE_STRUCT) - { - if (arg_types[i]->size > 16) - { - /* Straight copy of invisible reference. */ - avalue[i] = (void *)gpr[argn++]; - } - else - { - /* Left-justify. */ - ffi_v9_layout_struct(arg_types[i], - 0, - (char *) &gpr[argn], - (char *) &gpr[argn], - (char *) &fpr[argn]); - avalue[i] = &gpr[argn]; - argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - } - } - else - { - /* Right-justify. */ - argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - - /* Align on a 16-byte boundary. */ -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - if (arg_types[i]->type == FFI_TYPE_LONGDOUBLE && (argn % 2) != 0) - argn++; -#endif - if (i < fp_slot_max - && (arg_types[i]->type == FFI_TYPE_FLOAT - || arg_types[i]->type == FFI_TYPE_DOUBLE -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || arg_types[i]->type == FFI_TYPE_LONGDOUBLE -#endif - )) - avalue[i] = ((char *) &fpr[argn]) - arg_types[i]->size; - else - avalue[i] = ((char *) &gpr[argn]) - arg_types[i]->size; - } - } - - /* Invoke the closure. */ - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_sparc how to perform return type promotions. */ - return cif->rtype->type; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/sparc/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/sparc/ffitarget.h deleted file mode 100644 index d89f7877a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/sparc/ffitarget.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Anthony Green - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for SPARC. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -/* ---- System specific configurations ----------------------------------- */ - -#if defined(__arch64__) || defined(__sparcv9) -#ifndef SPARC64 -#define SPARC64 -#endif -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_V8, - FFI_V8PLUS, - FFI_V9, - FFI_LAST_ABI, -#ifdef SPARC64 - FFI_DEFAULT_ABI = FFI_V9 -#else - FFI_DEFAULT_ABI = FFI_V8 -#endif -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_NATIVE_RAW_API 0 - -#ifdef SPARC64 -#define FFI_TRAMPOLINE_SIZE 24 -#else -#define FFI_TRAMPOLINE_SIZE 16 -#endif - -#endif - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/sparc/v8.S b/ruby/ext/fiddle/libffi-3.2.1/src/sparc/v8.S deleted file mode 100644 index 6bf7ac056..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/sparc/v8.S +++ /dev/null @@ -1,346 +0,0 @@ -/* ----------------------------------------------------------------------- - v8.S - Copyright (c) 2013 The Written Word, Inc. - Copyright (c) 1996, 1997, 2003, 2004, 2008 Red Hat, Inc. - - SPARC Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -#define STACKFRAME 96 /* Minimum stack framesize for SPARC */ -#define ARGS (64+4) /* Offset of register area in frame */ - -#ifndef __GNUC__ - .text - .align 8 -.globl ffi_flush_icache -.globl _ffi_flush_icache - -ffi_flush_icache: -_ffi_flush_icache: - add %o0, %o1, %o2 -#ifdef SPARC64 -1: flush %o0 -#else -1: iflush %o0 -#endif - add %o0, 8, %o0 - cmp %o0, %o2 - blt 1b - nop - nop - nop - nop - nop - retl - nop -.ffi_flush_icache_end: - .size ffi_flush_icache,.ffi_flush_icache_end-ffi_flush_icache -#endif - - .text - .align 8 -.globl ffi_call_v8 -.globl _ffi_call_v8 - -ffi_call_v8: -_ffi_call_v8: -.LLFB1: - save %sp, -STACKFRAME, %sp -.LLCFI0: - - sub %sp, %i2, %sp ! alloca() space in stack for frame to set up - add %sp, STACKFRAME, %l0 ! %l0 has start of - ! frame to set up - - mov %l0, %o0 ! call routine to set up frame - call %i0 - mov %i1, %o1 ! (delay) - - ld [%l0+ARGS], %o0 ! call foreign function - ld [%l0+ARGS+4], %o1 - ld [%l0+ARGS+8], %o2 - ld [%l0+ARGS+12], %o3 - ld [%l0+ARGS+16], %o4 - ld [%l0+ARGS+20], %o5 - call %i5 - mov %l0, %sp ! (delay) switch to frame - nop ! STRUCT returning functions skip 12 instead of 8 bytes - - ! If the return value pointer is NULL, assume no return value. - tst %i4 - bz done - nop - - cmp %i3, FFI_TYPE_INT - be,a done - st %o0, [%i4] ! (delay) - - cmp %i3, FFI_TYPE_FLOAT - be,a done - st %f0, [%i4+0] ! (delay) - - cmp %i3, FFI_TYPE_DOUBLE - be,a double - st %f0, [%i4+0] ! (delay) - - cmp %i3, FFI_TYPE_SINT8 - be,a sint8 - sll %o0, 24, %o0 ! (delay) - - cmp %i3, FFI_TYPE_UINT8 - be,a uint8 - sll %o0, 24, %o0 ! (delay) - - cmp %i3, FFI_TYPE_SINT16 - be,a sint16 - sll %o0, 16, %o0 ! (delay) - - cmp %i3, FFI_TYPE_UINT16 - be,a uint16 - sll %o0, 16, %o0 ! (delay) - - cmp %i3, FFI_TYPE_SINT64 - be,a longlong - st %o0, [%i4+0] ! (delay) -done: - ret - restore - -double: - st %f1, [%i4+4] - ret - restore - -sint8: - sra %o0, 24, %o0 - st %o0, [%i4+0] - ret - restore - -uint8: - srl %o0, 24, %o0 - st %o0, [%i4+0] - ret - restore - -sint16: - sra %o0, 16, %o0 - st %o0, [%i4+0] - ret - restore - -uint16: - srl %o0, 16, %o0 - st %o0, [%i4+0] - ret - restore - -longlong: - st %o1, [%i4+4] - ret - restore -.LLFE1: - -.ffi_call_v8_end: - .size ffi_call_v8,.ffi_call_v8_end-ffi_call_v8 - - -#undef STACKFRAME -#define STACKFRAME 104 /* 16*4 register window + - 1*4 struct return + - 6*4 args backing store + - 3*4 locals */ - -/* ffi_closure_v8(...) - - Receives the closure argument in %g2. */ - - .text - .align 8 - .globl ffi_closure_v8 - -ffi_closure_v8: -#ifdef HAVE_AS_REGISTER_PSEUDO_OP - .register %g2, #scratch -#endif -.LLFB2: - ! Reserve frame space for all arguments in case - ! we need to align them on a 8-byte boundary. - ld [%g2+FFI_TRAMPOLINE_SIZE], %g1 - ld [%g1+4], %g1 - sll %g1, 3, %g1 - add %g1, STACKFRAME, %g1 - ! %g1 == STACKFRAME + 8*nargs - neg %g1 - save %sp, %g1, %sp -.LLCFI1: - - ! Store all of the potential argument registers in va_list format. - st %i0, [%fp+68+0] - st %i1, [%fp+68+4] - st %i2, [%fp+68+8] - st %i3, [%fp+68+12] - st %i4, [%fp+68+16] - st %i5, [%fp+68+20] - - ! Call ffi_closure_sparc_inner to do the bulk of the work. - mov %g2, %o0 - add %fp, -8, %o1 - add %fp, 64, %o2 - call ffi_closure_sparc_inner_v8 - add %fp, -16, %o3 - - ! Load up the return value in the proper type. - ! See ffi_prep_cif_machdep for the list of cases. - cmp %o0, FFI_TYPE_VOID - be done1 - - cmp %o0, FFI_TYPE_INT - be done1 - ld [%fp-8], %i0 - - cmp %o0, FFI_TYPE_FLOAT - be,a done1 - ld [%fp-8], %f0 - - cmp %o0, FFI_TYPE_DOUBLE - be,a done1 - ldd [%fp-8], %f0 - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - cmp %o0, FFI_TYPE_LONGDOUBLE - be done2 -#endif - - cmp %o0, FFI_TYPE_STRUCT - be done2 - - cmp %o0, FFI_TYPE_SINT64 - be,a done1 - ldd [%fp-8], %i0 - - cmp %o0, FFI_TYPE_UINT64 - be,a done1 - ldd [%fp-8], %i0 - - ld [%fp-8], %i0 -done1: - jmp %i7+8 - restore -done2: - ! Skip 'unimp'. - jmp %i7+12 - restore -.LLFE2: - -.ffi_closure_v8_end: - .size ffi_closure_v8,.ffi_closure_v8_end-ffi_closure_v8 - -#ifdef SPARC64 -#define WS 8 -#define nword xword -#define uanword uaxword -#else -#define WS 4 -#define nword long -#define uanword uaword -#endif - -#ifdef HAVE_RO_EH_FRAME - .section ".eh_frame",#alloc -#else - .section ".eh_frame",#alloc,#write -#endif -.LLframe1: - .uaword .LLECIE1-.LLSCIE1 ! Length of Common Information Entry -.LLSCIE1: - .uaword 0x0 ! CIE Identifier Tag - .byte 0x1 ! CIE Version - .ascii "zR\0" ! CIE Augmentation - .byte 0x1 ! uleb128 0x1; CIE Code Alignment Factor - .byte 0x80-WS ! sleb128 -WS; CIE Data Alignment Factor - .byte 0xf ! CIE RA Column - .byte 0x1 ! uleb128 0x1; Augmentation size -#ifdef HAVE_AS_SPARC_UA_PCREL - .byte 0x1b ! FDE Encoding (pcrel sdata4) -#else - .byte 0x50 ! FDE Encoding (aligned absolute) -#endif - .byte 0xc ! DW_CFA_def_cfa - .byte 0xe ! uleb128 0xe - .byte 0x0 ! uleb128 0x0 - .align WS -.LLECIE1: -.LLSFDE1: - .uaword .LLEFDE1-.LLASFDE1 ! FDE Length -.LLASFDE1: - .uaword .LLASFDE1-.LLframe1 ! FDE CIE offset -#ifdef HAVE_AS_SPARC_UA_PCREL - .uaword %r_disp32(.LLFB1) - .uaword .LLFE1-.LLFB1 ! FDE address range -#else - .align WS - .nword .LLFB1 - .uanword .LLFE1-.LLFB1 ! FDE address range -#endif - .byte 0x0 ! uleb128 0x0; Augmentation size - .byte 0x4 ! DW_CFA_advance_loc4 - .uaword .LLCFI0-.LLFB1 - .byte 0xd ! DW_CFA_def_cfa_register - .byte 0x1e ! uleb128 0x1e - .byte 0x2d ! DW_CFA_GNU_window_save - .byte 0x9 ! DW_CFA_register - .byte 0xf ! uleb128 0xf - .byte 0x1f ! uleb128 0x1f - .align WS -.LLEFDE1: -.LLSFDE2: - .uaword .LLEFDE2-.LLASFDE2 ! FDE Length -.LLASFDE2: - .uaword .LLASFDE2-.LLframe1 ! FDE CIE offset -#ifdef HAVE_AS_SPARC_UA_PCREL - .uaword %r_disp32(.LLFB2) - .uaword .LLFE2-.LLFB2 ! FDE address range -#else - .align WS - .nword .LLFB2 - .uanword .LLFE2-.LLFB2 ! FDE address range -#endif - .byte 0x0 ! uleb128 0x0; Augmentation size - .byte 0x4 ! DW_CFA_advance_loc4 - .uaword .LLCFI1-.LLFB2 - .byte 0xd ! DW_CFA_def_cfa_register - .byte 0x1e ! uleb128 0x1e - .byte 0x2d ! DW_CFA_GNU_window_save - .byte 0x9 ! DW_CFA_register - .byte 0xf ! uleb128 0xf - .byte 0x1f ! uleb128 0x1f - .align WS -.LLEFDE2: - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/sparc/v9.S b/ruby/ext/fiddle/libffi-3.2.1/src/sparc/v9.S deleted file mode 100644 index bf31a2b51..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/sparc/v9.S +++ /dev/null @@ -1,307 +0,0 @@ -/* ----------------------------------------------------------------------- - v9.S - Copyright (c) 2000, 2003, 2004, 2008 Red Hat, Inc. - - SPARC 64-bit Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -#ifdef SPARC64 -/* Only compile this in for 64bit builds, because otherwise the object file - will have inproper architecture due to used instructions. */ - -#define STACKFRAME 176 /* Minimum stack framesize for SPARC 64-bit */ -#define STACK_BIAS 2047 -#define ARGS (128) /* Offset of register area in frame */ - -.text - .align 8 -.globl ffi_call_v9 -.globl _ffi_call_v9 - -ffi_call_v9: -_ffi_call_v9: -.LLFB1: - save %sp, -STACKFRAME, %sp -.LLCFI0: - - sub %sp, %i2, %sp ! alloca() space in stack for frame to set up - add %sp, STACKFRAME+STACK_BIAS, %l0 ! %l0 has start of - ! frame to set up - - mov %l0, %o0 ! call routine to set up frame - call %i0 - mov %i1, %o1 ! (delay) - brz,pt %o0, 1f - ldx [%l0+ARGS], %o0 ! call foreign function - - ldd [%l0+ARGS], %f0 - ldd [%l0+ARGS+8], %f2 - ldd [%l0+ARGS+16], %f4 - ldd [%l0+ARGS+24], %f6 - ldd [%l0+ARGS+32], %f8 - ldd [%l0+ARGS+40], %f10 - ldd [%l0+ARGS+48], %f12 - ldd [%l0+ARGS+56], %f14 - ldd [%l0+ARGS+64], %f16 - ldd [%l0+ARGS+72], %f18 - ldd [%l0+ARGS+80], %f20 - ldd [%l0+ARGS+88], %f22 - ldd [%l0+ARGS+96], %f24 - ldd [%l0+ARGS+104], %f26 - ldd [%l0+ARGS+112], %f28 - ldd [%l0+ARGS+120], %f30 - -1: ldx [%l0+ARGS+8], %o1 - ldx [%l0+ARGS+16], %o2 - ldx [%l0+ARGS+24], %o3 - ldx [%l0+ARGS+32], %o4 - ldx [%l0+ARGS+40], %o5 - call %i5 - sub %l0, STACK_BIAS, %sp ! (delay) switch to frame - - ! If the return value pointer is NULL, assume no return value. - brz,pn %i4, done - nop - - cmp %i3, FFI_TYPE_INT - be,a,pt %icc, done - stx %o0, [%i4+0] ! (delay) - - cmp %i3, FFI_TYPE_FLOAT - be,a,pn %icc, done - st %f0, [%i4+0] ! (delay) - - cmp %i3, FFI_TYPE_DOUBLE - be,a,pn %icc, done - std %f0, [%i4+0] ! (delay) - - cmp %i3, FFI_TYPE_STRUCT - be,pn %icc, dostruct - - cmp %i3, FFI_TYPE_LONGDOUBLE - bne,pt %icc, done - nop - std %f0, [%i4+0] - std %f2, [%i4+8] - -done: ret - restore - -dostruct: - /* This will not work correctly for unions. */ - stx %o0, [%i4+0] - stx %o1, [%i4+8] - stx %o2, [%i4+16] - stx %o3, [%i4+24] - std %f0, [%i4+32] - std %f2, [%i4+40] - std %f4, [%i4+48] - std %f6, [%i4+56] - ret - restore -.LLFE1: - -.ffi_call_v9_end: - .size ffi_call_v9,.ffi_call_v9_end-ffi_call_v9 - - -#undef STACKFRAME -#define STACKFRAME 336 /* 16*8 register window + - 6*8 args backing store + - 20*8 locals */ -#define FP %fp+STACK_BIAS - -/* ffi_closure_v9(...) - - Receives the closure argument in %g1. */ - - .text - .align 8 - .globl ffi_closure_v9 - -ffi_closure_v9: -.LLFB2: - save %sp, -STACKFRAME, %sp -.LLCFI1: - - ! Store all of the potential argument registers in va_list format. - stx %i0, [FP+128+0] - stx %i1, [FP+128+8] - stx %i2, [FP+128+16] - stx %i3, [FP+128+24] - stx %i4, [FP+128+32] - stx %i5, [FP+128+40] - - ! Store possible floating point argument registers too. - std %f0, [FP-128] - std %f2, [FP-120] - std %f4, [FP-112] - std %f6, [FP-104] - std %f8, [FP-96] - std %f10, [FP-88] - std %f12, [FP-80] - std %f14, [FP-72] - std %f16, [FP-64] - std %f18, [FP-56] - std %f20, [FP-48] - std %f22, [FP-40] - std %f24, [FP-32] - std %f26, [FP-24] - std %f28, [FP-16] - std %f30, [FP-8] - - ! Call ffi_closure_sparc_inner to do the bulk of the work. - mov %g1, %o0 - add %fp, STACK_BIAS-160, %o1 - add %fp, STACK_BIAS+128, %o2 - call ffi_closure_sparc_inner_v9 - add %fp, STACK_BIAS-128, %o3 - - ! Load up the return value in the proper type. - ! See ffi_prep_cif_machdep for the list of cases. - cmp %o0, FFI_TYPE_VOID - be,pn %icc, done1 - - cmp %o0, FFI_TYPE_INT - be,pn %icc, integer - - cmp %o0, FFI_TYPE_FLOAT - be,a,pn %icc, done1 - ld [FP-160], %f0 - - cmp %o0, FFI_TYPE_DOUBLE - be,a,pn %icc, done1 - ldd [FP-160], %f0 - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - cmp %o0, FFI_TYPE_LONGDOUBLE - be,a,pn %icc, longdouble1 - ldd [FP-160], %f0 -#endif - - ! FFI_TYPE_STRUCT - ldx [FP-152], %i1 - ldx [FP-144], %i2 - ldx [FP-136], %i3 - ldd [FP-160], %f0 - ldd [FP-152], %f2 - ldd [FP-144], %f4 - ldd [FP-136], %f6 - -integer: - ldx [FP-160], %i0 - -done1: - ret - restore - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -longdouble1: - ldd [FP-152], %f2 - ret - restore -#endif -.LLFE2: - -.ffi_closure_v9_end: - .size ffi_closure_v9,.ffi_closure_v9_end-ffi_closure_v9 - -#ifdef HAVE_RO_EH_FRAME - .section ".eh_frame",#alloc -#else - .section ".eh_frame",#alloc,#write -#endif -.LLframe1: - .uaword .LLECIE1-.LLSCIE1 ! Length of Common Information Entry -.LLSCIE1: - .uaword 0x0 ! CIE Identifier Tag - .byte 0x1 ! CIE Version - .ascii "zR\0" ! CIE Augmentation - .byte 0x1 ! uleb128 0x1; CIE Code Alignment Factor - .byte 0x78 ! sleb128 -8; CIE Data Alignment Factor - .byte 0xf ! CIE RA Column - .byte 0x1 ! uleb128 0x1; Augmentation size -#ifdef HAVE_AS_SPARC_UA_PCREL - .byte 0x1b ! FDE Encoding (pcrel sdata4) -#else - .byte 0x50 ! FDE Encoding (aligned absolute) -#endif - .byte 0xc ! DW_CFA_def_cfa - .byte 0xe ! uleb128 0xe - .byte 0xff,0xf ! uleb128 0x7ff - .align 8 -.LLECIE1: -.LLSFDE1: - .uaword .LLEFDE1-.LLASFDE1 ! FDE Length -.LLASFDE1: - .uaword .LLASFDE1-.LLframe1 ! FDE CIE offset -#ifdef HAVE_AS_SPARC_UA_PCREL - .uaword %r_disp32(.LLFB1) - .uaword .LLFE1-.LLFB1 ! FDE address range -#else - .align 8 - .xword .LLFB1 - .uaxword .LLFE1-.LLFB1 ! FDE address range -#endif - .byte 0x0 ! uleb128 0x0; Augmentation size - .byte 0x4 ! DW_CFA_advance_loc4 - .uaword .LLCFI0-.LLFB1 - .byte 0xd ! DW_CFA_def_cfa_register - .byte 0x1e ! uleb128 0x1e - .byte 0x2d ! DW_CFA_GNU_window_save - .byte 0x9 ! DW_CFA_register - .byte 0xf ! uleb128 0xf - .byte 0x1f ! uleb128 0x1f - .align 8 -.LLEFDE1: -.LLSFDE2: - .uaword .LLEFDE2-.LLASFDE2 ! FDE Length -.LLASFDE2: - .uaword .LLASFDE2-.LLframe1 ! FDE CIE offset -#ifdef HAVE_AS_SPARC_UA_PCREL - .uaword %r_disp32(.LLFB2) - .uaword .LLFE2-.LLFB2 ! FDE address range -#else - .align 8 - .xword .LLFB2 - .uaxword .LLFE2-.LLFB2 ! FDE address range -#endif - .byte 0x0 ! uleb128 0x0; Augmentation size - .byte 0x4 ! DW_CFA_advance_loc4 - .uaword .LLCFI1-.LLFB2 - .byte 0xd ! DW_CFA_def_cfa_register - .byte 0x1e ! uleb128 0x1e - .byte 0x2d ! DW_CFA_GNU_window_save - .byte 0x9 ! DW_CFA_register - .byte 0xf ! uleb128 0xf - .byte 0x1f ! uleb128 0x1f - .align 8 -.LLEFDE2: -#endif - -#ifdef __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/tile/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/tile/ffi.c deleted file mode 100644 index 3a94469c7..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/tile/ffi.c +++ /dev/null @@ -1,355 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2012 Tilera Corp. - - TILE Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -/* The first 10 registers are used to pass arguments and return values. */ -#define NUM_ARG_REGS 10 - -/* Performs a raw function call with the given NUM_ARG_REGS register arguments - and the specified additional stack arguments (if any). */ -extern void ffi_call_tile(ffi_sarg reg_args[NUM_ARG_REGS], - const ffi_sarg *stack_args, - size_t stack_args_bytes, - void (*fnaddr)(void)) - FFI_HIDDEN; - -/* This handles the raw call from the closure stub, cleaning up the - parameters and delegating to ffi_closure_tile_inner. */ -extern void ffi_closure_tile(void) FFI_HIDDEN; - - -ffi_status -ffi_prep_cif_machdep(ffi_cif *cif) -{ - /* We always allocate room for all registers. Even if we don't - use them as parameters, they get returned in the same array - as struct return values so we need to make room. */ - if (cif->bytes < NUM_ARG_REGS * FFI_SIZEOF_ARG) - cif->bytes = NUM_ARG_REGS * FFI_SIZEOF_ARG; - - if (cif->rtype->size > NUM_ARG_REGS * FFI_SIZEOF_ARG) - cif->flags = FFI_TYPE_STRUCT; - else - cif->flags = FFI_TYPE_INT; - - /* Nothing to do. */ - return FFI_OK; -} - - -static long -assign_to_ffi_arg(ffi_sarg *out, void *in, const ffi_type *type, - int write_to_reg) -{ - switch (type->type) - { - case FFI_TYPE_SINT8: - *out = *(SINT8 *)in; - return 1; - - case FFI_TYPE_UINT8: - *out = *(UINT8 *)in; - return 1; - - case FFI_TYPE_SINT16: - *out = *(SINT16 *)in; - return 1; - - case FFI_TYPE_UINT16: - *out = *(UINT16 *)in; - return 1; - - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: -#ifndef __LP64__ - case FFI_TYPE_POINTER: -#endif - /* Note that even unsigned 32-bit quantities are sign extended - on tilegx when stored in a register. */ - *out = *(SINT32 *)in; - return 1; - - case FFI_TYPE_FLOAT: -#ifdef __tilegx__ - if (write_to_reg) - { - /* Properly sign extend the value. */ - union { float f; SINT32 s32; } val; - val.f = *(float *)in; - *out = val.s32; - } - else -#endif - { - *(float *)out = *(float *)in; - } - return 1; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_DOUBLE: -#ifdef __LP64__ - case FFI_TYPE_POINTER: -#endif - *(UINT64 *)out = *(UINT64 *)in; - return sizeof(UINT64) / FFI_SIZEOF_ARG; - - case FFI_TYPE_STRUCT: - memcpy(out, in, type->size); - return (type->size + FFI_SIZEOF_ARG - 1) / FFI_SIZEOF_ARG; - - case FFI_TYPE_VOID: - /* Must be a return type. Nothing to do. */ - return 0; - - default: - FFI_ASSERT(0); - return -1; - } -} - - -void -ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - ffi_sarg * const arg_mem = alloca(cif->bytes); - ffi_sarg * const reg_args = arg_mem; - ffi_sarg * const stack_args = ®_args[NUM_ARG_REGS]; - ffi_sarg *argp = arg_mem; - ffi_type ** const arg_types = cif->arg_types; - const long num_args = cif->nargs; - long i; - - if (cif->flags == FFI_TYPE_STRUCT) - { - /* Pass a hidden pointer to the return value. We make sure there - is scratch space for the callee to store the return value even if - our caller doesn't care about it. */ - *argp++ = (intptr_t)(rvalue ? rvalue : alloca(cif->rtype->size)); - - /* No more work needed to return anything. */ - rvalue = NULL; - } - - for (i = 0; i < num_args; i++) - { - ffi_type *type = arg_types[i]; - void * const arg_in = avalue[i]; - ptrdiff_t arg_word = argp - arg_mem; - -#ifndef __tilegx__ - /* Doubleword-aligned values are always in an even-number register - pair, or doubleword-aligned stack slot if out of registers. */ - long align = arg_word & (type->alignment > FFI_SIZEOF_ARG); - argp += align; - arg_word += align; -#endif - - if (type->type == FFI_TYPE_STRUCT) - { - const size_t arg_size_in_words = - (type->size + FFI_SIZEOF_ARG - 1) / FFI_SIZEOF_ARG; - - if (arg_word < NUM_ARG_REGS && - arg_word + arg_size_in_words > NUM_ARG_REGS) - { - /* Args are not allowed to span registers and the stack. */ - argp = stack_args; - } - - memcpy(argp, arg_in, type->size); - argp += arg_size_in_words; - } - else - { - argp += assign_to_ffi_arg(argp, arg_in, arg_types[i], 1); - } - } - - /* Actually do the call. */ - ffi_call_tile(reg_args, stack_args, - cif->bytes - (NUM_ARG_REGS * FFI_SIZEOF_ARG), fn); - - if (rvalue != NULL) - assign_to_ffi_arg(rvalue, reg_args, cif->rtype, 0); -} - - -/* Template code for closure. */ -extern const UINT64 ffi_template_tramp_tile[] FFI_HIDDEN; - - -ffi_status -ffi_prep_closure_loc (ffi_closure *closure, - ffi_cif *cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ -#ifdef __tilegx__ - /* TILE-Gx */ - SINT64 c; - SINT64 h; - int s; - UINT64 *out; - - if (cif->abi != FFI_UNIX) - return FFI_BAD_ABI; - - out = (UINT64 *)closure->tramp; - - c = (intptr_t)closure; - h = (intptr_t)ffi_closure_tile; - s = 0; - - /* Find the smallest shift count that doesn't lose information - (i.e. no need to explicitly insert high bits of the address that - are just the sign extension of the low bits). */ - while ((c >> s) != (SINT16)(c >> s) || (h >> s) != (SINT16)(h >> s)) - s += 16; - -#define OPS(a, b, shift) \ - (create_Imm16_X0((a) >> (shift)) | create_Imm16_X1((b) >> (shift))) - - /* Emit the moveli. */ - *out++ = ffi_template_tramp_tile[0] | OPS(c, h, s); - for (s -= 16; s >= 0; s -= 16) - *out++ = ffi_template_tramp_tile[1] | OPS(c, h, s); - -#undef OPS - - *out++ = ffi_template_tramp_tile[2]; - -#else - /* TILEPro */ - UINT64 *out; - intptr_t delta; - - if (cif->abi != FFI_UNIX) - return FFI_BAD_ABI; - - out = (UINT64 *)closure->tramp; - delta = (intptr_t)ffi_closure_tile - (intptr_t)codeloc; - - *out++ = ffi_template_tramp_tile[0] | create_JOffLong_X1(delta >> 3); -#endif - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - invalidate_icache(closure->tramp, (char *)out - closure->tramp, - getpagesize()); - - return FFI_OK; -} - - -/* This is called by the assembly wrapper for closures. This does - all of the work. On entry reg_args[0] holds the values the registers - had when the closure was invoked. On return reg_args[1] holds the register - values to be returned to the caller (many of which may be garbage). */ -void FFI_HIDDEN -ffi_closure_tile_inner(ffi_closure *closure, - ffi_sarg reg_args[2][NUM_ARG_REGS], - ffi_sarg *stack_args) -{ - ffi_cif * const cif = closure->cif; - void ** const avalue = alloca(cif->nargs * sizeof(void *)); - void *rvalue; - ffi_type ** const arg_types = cif->arg_types; - ffi_sarg * const reg_args_in = reg_args[0]; - ffi_sarg * const reg_args_out = reg_args[1]; - ffi_sarg * argp; - long i, arg_word, nargs = cif->nargs; - /* Use a union to guarantee proper alignment for double. */ - union { ffi_sarg arg[NUM_ARG_REGS]; double d; UINT64 u64; } closure_ret; - - /* Start out reading register arguments. */ - argp = reg_args_in; - - /* Copy the caller's structure return address to that the closure - returns the data directly to the caller. */ - if (cif->flags == FFI_TYPE_STRUCT) - { - /* Return by reference via hidden pointer. */ - rvalue = (void *)(intptr_t)*argp++; - arg_word = 1; - } - else - { - /* Return the value in registers. */ - rvalue = &closure_ret; - arg_word = 0; - } - - /* Grab the addresses of the arguments. */ - for (i = 0; i < nargs; i++) - { - ffi_type * const type = arg_types[i]; - const size_t arg_size_in_words = - (type->size + FFI_SIZEOF_ARG - 1) / FFI_SIZEOF_ARG; - -#ifndef __tilegx__ - /* Doubleword-aligned values are always in an even-number register - pair, or doubleword-aligned stack slot if out of registers. */ - long align = arg_word & (type->alignment > FFI_SIZEOF_ARG); - argp += align; - arg_word += align; -#endif - - if (arg_word == NUM_ARG_REGS || - (arg_word < NUM_ARG_REGS && - arg_word + arg_size_in_words > NUM_ARG_REGS)) - { - /* Switch to reading arguments from the stack. */ - argp = stack_args; - arg_word = NUM_ARG_REGS; - } - - avalue[i] = argp; - argp += arg_size_in_words; - arg_word += arg_size_in_words; - } - - /* Invoke the closure. */ - closure->fun(cif, rvalue, avalue, closure->user_data); - - if (cif->flags != FFI_TYPE_STRUCT) - { - /* Canonicalize for register representation. */ - assign_to_ffi_arg(reg_args_out, &closure_ret, cif->rtype, 1); - } -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/tile/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/tile/ffitarget.h deleted file mode 100644 index 679fb5d90..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/tile/ffitarget.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012 Tilera Corp. - Target configuration macros for TILE. - - 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. - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifndef LIBFFI_ASM - -#include - -typedef uint_reg_t ffi_arg; -typedef int_reg_t ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_UNIX, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_UNIX -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ -#define FFI_CLOSURES 1 - -#ifdef __tilegx__ -/* We always pass 8-byte values, even in -m32 mode. */ -# define FFI_SIZEOF_ARG 8 -# ifdef __LP64__ -# define FFI_TRAMPOLINE_SIZE (8 * 5) /* 5 bundles */ -# else -# define FFI_TRAMPOLINE_SIZE (8 * 3) /* 3 bundles */ -# endif -#else -# define FFI_SIZEOF_ARG 4 -# define FFI_TRAMPOLINE_SIZE 8 /* 1 bundle */ -#endif -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/tile/tile.S b/ruby/ext/fiddle/libffi-3.2.1/src/tile/tile.S deleted file mode 100644 index d1f82cb3d..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/tile/tile.S +++ /dev/null @@ -1,360 +0,0 @@ -/* ----------------------------------------------------------------------- - tile.S - Copyright (c) 2011 Tilera Corp. - - Tilera TILEPro and TILE-Gx Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -/* Number of bytes in a register. */ -#define REG_SIZE FFI_SIZEOF_ARG - -/* Number of bytes in stack linkage area for backtracing. - - A note about the ABI: on entry to a procedure, sp points to a stack - slot where it must spill the return address if it's not a leaf. - REG_SIZE bytes beyond that is a slot owned by the caller which - contains the sp value that the caller had when it was originally - entered (i.e. the caller's frame pointer). */ -#define LINKAGE_SIZE (2 * REG_SIZE) - -/* The first 10 registers are used to pass arguments and return values. */ -#define NUM_ARG_REGS 10 - -#ifdef __tilegx__ -#define SW st -#define LW ld -#define BGZT bgtzt -#else -#define SW sw -#define LW lw -#define BGZT bgzt -#endif - - -/* void ffi_call_tile (int_reg_t reg_args[NUM_ARG_REGS], - const int_reg_t *stack_args, - unsigned long stack_args_bytes, - void (*fnaddr)(void)); - - On entry, REG_ARGS contain the outgoing register values, - and STACK_ARGS contains STACK_ARG_BYTES of additional values - to be passed on the stack. If STACK_ARG_BYTES is zero, then - STACK_ARGS is ignored. - - When the invoked function returns, the values of r0-r9 are - blindly stored back into REG_ARGS for the caller to examine. */ - - .section .text.ffi_call_tile, "ax", @progbits - .align 8 - .globl ffi_call_tile - FFI_HIDDEN(ffi_call_tile) -ffi_call_tile: - -/* Incoming arguments. */ -#define REG_ARGS r0 -#define INCOMING_STACK_ARGS r1 -#define STACK_ARG_BYTES r2 -#define ORIG_FNADDR r3 - -/* Temporary values. */ -#define FRAME_SIZE r10 -#define TMP r11 -#define TMP2 r12 -#define OUTGOING_STACK_ARGS r13 -#define REG_ADDR_PTR r14 -#define RETURN_REG_ADDR r15 -#define FNADDR r16 - - .cfi_startproc - { - /* Save return address. */ - SW sp, lr - .cfi_offset lr, 0 - /* Prepare to spill incoming r52. */ - addi TMP, sp, -REG_SIZE - /* Increase frame size to have room to spill r52 and REG_ARGS. - The +7 is to round up mod 8. */ - addi FRAME_SIZE, STACK_ARG_BYTES, \ - REG_SIZE + REG_SIZE + LINKAGE_SIZE + 7 - } - { - /* Round stack frame size to a multiple of 8 to satisfy ABI. */ - andi FRAME_SIZE, FRAME_SIZE, -8 - /* Compute where to spill REG_ARGS value. */ - addi TMP2, sp, -(REG_SIZE * 2) - } - { - /* Spill incoming r52. */ - SW TMP, r52 - .cfi_offset r52, -REG_SIZE - /* Set up our frame pointer. */ - move r52, sp - .cfi_def_cfa_register r52 - /* Push stack frame. */ - sub sp, sp, FRAME_SIZE - } - { - /* Prepare to set up stack linkage. */ - addi TMP, sp, REG_SIZE - /* Prepare to memcpy stack args. */ - addi OUTGOING_STACK_ARGS, sp, LINKAGE_SIZE - /* Save REG_ARGS which we will need after we call the subroutine. */ - SW TMP2, REG_ARGS - } - { - /* Set up linkage info to hold incoming stack pointer. */ - SW TMP, r52 - } - { - /* Skip stack args memcpy if we don't have any stack args (common). */ - blezt STACK_ARG_BYTES, .Ldone_stack_args_memcpy - } - -.Lmemcpy_stack_args: - { - /* Load incoming argument from stack_args. */ - LW TMP, INCOMING_STACK_ARGS - addi INCOMING_STACK_ARGS, INCOMING_STACK_ARGS, REG_SIZE - } - { - /* Store stack argument into outgoing stack argument area. */ - SW OUTGOING_STACK_ARGS, TMP - addi OUTGOING_STACK_ARGS, OUTGOING_STACK_ARGS, REG_SIZE - addi STACK_ARG_BYTES, STACK_ARG_BYTES, -REG_SIZE - } - { - BGZT STACK_ARG_BYTES, .Lmemcpy_stack_args - } -.Ldone_stack_args_memcpy: - - { - /* Copy aside ORIG_FNADDR so we can overwrite its register. */ - move FNADDR, ORIG_FNADDR - /* Prepare to load argument registers. */ - addi REG_ADDR_PTR, r0, REG_SIZE - /* Load outgoing r0. */ - LW r0, r0 - } - - /* Load up argument registers from the REG_ARGS array. */ -#define LOAD_REG(REG, PTR) \ - { \ - LW REG, PTR ; \ - addi PTR, PTR, REG_SIZE \ - } - - LOAD_REG(r1, REG_ADDR_PTR) - LOAD_REG(r2, REG_ADDR_PTR) - LOAD_REG(r3, REG_ADDR_PTR) - LOAD_REG(r4, REG_ADDR_PTR) - LOAD_REG(r5, REG_ADDR_PTR) - LOAD_REG(r6, REG_ADDR_PTR) - LOAD_REG(r7, REG_ADDR_PTR) - LOAD_REG(r8, REG_ADDR_PTR) - LOAD_REG(r9, REG_ADDR_PTR) - - { - /* Call the subroutine. */ - jalr FNADDR - } - - { - /* Restore original lr. */ - LW lr, r52 - /* Prepare to recover ARGS, which we spilled earlier. */ - addi TMP, r52, -(2 * REG_SIZE) - } - { - /* Restore ARGS, so we can fill it in with the return regs r0-r9. */ - LW RETURN_REG_ADDR, TMP - /* Prepare to restore original r52. */ - addi TMP, r52, -REG_SIZE - } - - { - /* Pop stack frame. */ - move sp, r52 - /* Restore original r52. */ - LW r52, TMP - } - -#define STORE_REG(REG, PTR) \ - { \ - SW PTR, REG ; \ - addi PTR, PTR, REG_SIZE \ - } - - /* Return all register values by reference. */ - STORE_REG(r0, RETURN_REG_ADDR) - STORE_REG(r1, RETURN_REG_ADDR) - STORE_REG(r2, RETURN_REG_ADDR) - STORE_REG(r3, RETURN_REG_ADDR) - STORE_REG(r4, RETURN_REG_ADDR) - STORE_REG(r5, RETURN_REG_ADDR) - STORE_REG(r6, RETURN_REG_ADDR) - STORE_REG(r7, RETURN_REG_ADDR) - STORE_REG(r8, RETURN_REG_ADDR) - STORE_REG(r9, RETURN_REG_ADDR) - - { - jrp lr - } - - .cfi_endproc - .size ffi_call_tile, .-ffi_call_tile - -/* ffi_closure_tile(...) - - On entry, lr points to the closure plus 8 bytes, and r10 - contains the actual return address. - - This function simply dumps all register parameters into a stack array - and passes the closure, the registers array, and the stack arguments - to C code that does all of the actual closure processing. */ - - .section .text.ffi_closure_tile, "ax", @progbits - .align 8 - .globl ffi_closure_tile - FFI_HIDDEN(ffi_closure_tile) - - .cfi_startproc -/* Room to spill all NUM_ARG_REGS incoming registers, plus frame linkage. */ -#define CLOSURE_FRAME_SIZE (((NUM_ARG_REGS * REG_SIZE * 2 + LINKAGE_SIZE) + 7) & -8) -ffi_closure_tile: - { -#ifdef __tilegx__ - st sp, lr - .cfi_offset lr, 0 -#else - /* Save return address (in r10 due to closure stub wrapper). */ - SW sp, r10 - .cfi_return_column r10 - .cfi_offset r10, 0 -#endif - /* Compute address for stack frame linkage. */ - addli r10, sp, -(CLOSURE_FRAME_SIZE - REG_SIZE) - } - { - /* Save incoming stack pointer in linkage area. */ - SW r10, sp - .cfi_offset sp, -(CLOSURE_FRAME_SIZE - REG_SIZE) - /* Push a new stack frame. */ - addli sp, sp, -CLOSURE_FRAME_SIZE - .cfi_adjust_cfa_offset CLOSURE_FRAME_SIZE - } - - { - /* Create pointer to where to start spilling registers. */ - addi r10, sp, LINKAGE_SIZE - } - - /* Spill all the incoming registers. */ - STORE_REG(r0, r10) - STORE_REG(r1, r10) - STORE_REG(r2, r10) - STORE_REG(r3, r10) - STORE_REG(r4, r10) - STORE_REG(r5, r10) - STORE_REG(r6, r10) - STORE_REG(r7, r10) - STORE_REG(r8, r10) - { - /* Save r9. */ - SW r10, r9 -#ifdef __tilegx__ - /* Pointer to closure is passed in r11. */ - move r0, r11 -#else - /* Compute pointer to the closure object. Because the closure - starts with a "jal ffi_closure_tile", we can just take the - value of lr (a phony return address pointing into the closure) - and subtract 8. */ - addi r0, lr, -8 -#endif - /* Compute a pointer to the register arguments we just spilled. */ - addi r1, sp, LINKAGE_SIZE - } - { - /* Compute a pointer to the extra stack arguments (if any). */ - addli r2, sp, CLOSURE_FRAME_SIZE + LINKAGE_SIZE - /* Call C code to deal with all of the grotty details. */ - jal ffi_closure_tile_inner - } - { - addli r10, sp, CLOSURE_FRAME_SIZE - } - { - /* Restore the return address. */ - LW lr, r10 - /* Compute pointer to registers array. */ - addli r10, sp, LINKAGE_SIZE + (NUM_ARG_REGS * REG_SIZE) - } - /* Return all the register values, which C code may have set. */ - LOAD_REG(r0, r10) - LOAD_REG(r1, r10) - LOAD_REG(r2, r10) - LOAD_REG(r3, r10) - LOAD_REG(r4, r10) - LOAD_REG(r5, r10) - LOAD_REG(r6, r10) - LOAD_REG(r7, r10) - LOAD_REG(r8, r10) - LOAD_REG(r9, r10) - { - /* Pop the frame. */ - addli sp, sp, CLOSURE_FRAME_SIZE - jrp lr - } - - .cfi_endproc - .size ffi_closure_tile, . - ffi_closure_tile - - -/* What follows are code template instructions that get copied to the - closure trampoline by ffi_prep_closure_loc. The zeroed operands - get replaced by their proper values at runtime. */ - - .section .text.ffi_template_tramp_tile, "ax", @progbits - .align 8 - .globl ffi_template_tramp_tile - FFI_HIDDEN(ffi_template_tramp_tile) -ffi_template_tramp_tile: -#ifdef __tilegx__ - { - moveli r11, 0 /* backpatched to address of containing closure. */ - moveli r10, 0 /* backpatched to ffi_closure_tile. */ - } - /* Note: the following bundle gets generated multiple times - depending on the pointer value (esp. useful for -m32 mode). */ - { shl16insli r11, r11, 0 ; shl16insli r10, r10, 0 } - { info 2+8 /* for backtracer: -> pc in lr, frame size 0 */ ; jr r10 } -#else - /* 'jal .' yields a PC-relative offset of zero so we can OR in the - right offset at runtime. */ - { move r10, lr ; jal . /* ffi_closure_tile */ } -#endif - - .size ffi_template_tramp_tile, . - ffi_template_tramp_tile diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/types.c b/ruby/ext/fiddle/libffi-3.2.1/src/types.c deleted file mode 100644 index 7e80aec6e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/types.c +++ /dev/null @@ -1,106 +0,0 @@ -/* ----------------------------------------------------------------------- - types.c - Copyright (c) 1996, 1998 Red Hat, Inc. - - Predefined ffi_types needed by libffi. - - 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. - ----------------------------------------------------------------------- */ - -/* Hide the basic type definitions from the header file, so that we - can redefine them here as "const". */ -#define LIBFFI_HIDE_BASIC_TYPES - -#include -#include - -/* Type definitions */ - -#define FFI_TYPEDEF(name, type, id, maybe_const)\ -struct struct_align_##name { \ - char c; \ - type x; \ -}; \ -maybe_const ffi_type ffi_type_##name = { \ - sizeof(type), \ - offsetof(struct struct_align_##name, x), \ - id, NULL \ -} - -#define FFI_COMPLEX_TYPEDEF(name, type, maybe_const) \ -static ffi_type *ffi_elements_complex_##name [2] = { \ - (ffi_type *)(&ffi_type_##name), NULL \ -}; \ -struct struct_align_complex_##name { \ - char c; \ - _Complex type x; \ -}; \ -maybe_const ffi_type ffi_type_complex_##name = { \ - sizeof(_Complex type), \ - offsetof(struct struct_align_complex_##name, x), \ - FFI_TYPE_COMPLEX, \ - (ffi_type **)ffi_elements_complex_##name \ -} - -/* Size and alignment are fake here. They must not be 0. */ -const ffi_type ffi_type_void = { - 1, 1, FFI_TYPE_VOID, NULL -}; - -FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8, const); -FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8, const); -FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16, const); -FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16, const); -FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32, const); -FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32, const); -FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64, const); -FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64, const); - -FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER, const); - -FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT, const); -FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const); - -#if !defined HAVE_LONG_DOUBLE_VARIANT || defined __alpha__ -#define FFI_LDBL_CONST const -#else -#define FFI_LDBL_CONST -#endif - -#ifdef __alpha__ -/* Even if we're not configured to default to 128-bit long double, - maintain binary compatibility, as -mlong-double-128 can be used - at any time. */ -/* Validate the hard-coded number below. */ -# if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4 -# error FFI_TYPE_LONGDOUBLE out of date -# endif -const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; -#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST); -#endif - -#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -FFI_COMPLEX_TYPEDEF(float, float, const); -FFI_COMPLEX_TYPEDEF(double, double, const); -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST); -#endif -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/vax/elfbsd.S b/ruby/ext/fiddle/libffi-3.2.1/src/vax/elfbsd.S deleted file mode 100644 index 01ca31340..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/vax/elfbsd.S +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright (c) 2013 Miodrag Vallat. - * - * 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. - */ - -/* - * vax Foreign Function Interface - */ - -#define LIBFFI_ASM -#include -#include - - .text - -/* - * void * %r0 - * ffi_call_elfbsd(extended_cif *ecif, 4(%ap) - * unsigned bytes, 8(%ap) - * unsigned flags, 12(%ap) - * void *rvalue, 16(%ap) - * void (*fn)()); 20(%ap) - */ - .globl ffi_call_elfbsd - .type ffi_call_elfbsd,@function - .align 2 -ffi_call_elfbsd: - .word 0x00c # save R2 and R3 - - # Allocate stack space for the args - subl2 8(%ap), %sp - - # Call ffi_prep_args - pushl %sp - pushl 4(%ap) - calls $2, ffi_prep_args - - # Get function pointer - movl 20(%ap), %r1 - - # Build a CALLS frame - ashl $-2, 8(%ap), %r0 - pushl %r0 # argument stack usage - movl %sp, %r0 # future %ap - # saved registers - bbc $11, 0(%r1), 1f - pushl %r11 -1: bbc $10, 0(%r1), 1f - pushl %r10 -1: bbc $9, 0(%r1), 1f - pushl %r9 -1: bbc $8, 0(%r1), 1f - pushl %r8 -1: bbc $7, 0(%r1), 1f - pushl %r7 -1: bbc $6, 0(%r1), 1f - pushl %r6 -1: bbc $5, 0(%r1), 1f - pushl %r5 -1: bbc $4, 0(%r1), 1f - pushl %r4 -1: bbc $3, 0(%r1), 1f - pushl %r3 -1: bbc $2, 0(%r1), 1f - pushl %r2 -1: - pushal 9f - pushl %fp - pushl %ap - movl 16(%ap), %r3 # struct return address, if needed - movl %r0, %ap - movzwl 4(%fp), %r0 # previous PSW, without the saved registers mask - bisl2 $0x20000000, %r0 # calls frame - movzwl 0(%r1), %r2 - bicw2 $0xf003, %r2 # only keep R11-R2 - ashl $16, %r2, %r2 - bisl2 %r2, %r0 # saved register mask of the called function - pushl %r0 - pushl $0 - movl %sp, %fp - - # Invoke the function - pushal 2(%r1) # skip procedure entry mask - movl %r3, %r1 - bicpsw $0x000f - rsb - -9: - # Copy return value if necessary - tstl 16(%ap) - jeql 9f - movl 16(%ap), %r2 - - bbc $0, 12(%ap), 1f # CIF_FLAGS_CHAR - movb %r0, 0(%r2) - brb 9f -1: - bbc $1, 12(%ap), 1f # CIF_FLAGS_SHORT - movw %r0, 0(%r2) - brb 9f -1: - bbc $2, 12(%ap), 1f # CIF_FLAGS_INT - movl %r0, 0(%r2) - brb 9f -1: - bbc $3, 12(%ap), 1f # CIF_FLAGS_DINT - movq %r0, 0(%r2) - brb 9f -1: - movl %r1, %r0 # might have been a struct - #brb 9f - -9: - ret - -/* - * ffi_closure_elfbsd(void); - * invoked with %r0: ffi_closure *closure - */ - .globl ffi_closure_elfbsd - .type ffi_closure_elfbsd, @function - .align 2 -ffi_closure_elfbsd: - .word 0 - - # Allocate room on stack for return value - subl2 $8, %sp - - # Invoke the closure function - pushal 4(%ap) # calling stack - pushal 4(%sp) # return value - pushl %r0 # closure - calls $3, ffi_closure_elfbsd_inner - - # Copy return value if necessary - bitb $1, %r0 # CIF_FLAGS_CHAR - beql 1f - movb 0(%sp), %r0 - brb 9f -1: - bitb $2, %r0 # CIF_FLAGS_SHORT - beql 1f - movw 0(%sp), %r0 - brb 9f -1: - bitb $4, %r0 # CIF_FLAGS_INT - beql 1f - movl 0(%sp), %r0 - brb 9f -1: - bitb $8, %r0 # CIF_FLAGS_DINT - beql 1f - movq 0(%sp), %r0 - #brb 9f -1: - -9: - ret - -/* - * ffi_closure_struct_elfbsd(void); - * invoked with %r0: ffi_closure *closure - * %r1: struct return address - */ - .globl ffi_closure_struct_elfbsd - .type ffi_closure_struct_elfbsd, @function - .align 2 -ffi_closure_struct_elfbsd: - .word 0 - - # Invoke the closure function - pushal 4(%ap) # calling stack - pushl %r1 # return value - pushl %r0 # closure - calls $3, ffi_closure_elfbsd_inner - - ret diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/vax/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/vax/ffi.c deleted file mode 100644 index f4d6bbb4f..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/vax/ffi.c +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Copyright (c) 2013 Miodrag Vallat. - * - * 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. - */ - -/* - * vax Foreign Function Interface - * - * This file attempts to provide all the FFI entry points which can reliably - * be implemented in C. - */ - -#include -#include - -#include -#include - -#define CIF_FLAGS_CHAR 1 /* for struct only */ -#define CIF_FLAGS_SHORT 2 /* for struct only */ -#define CIF_FLAGS_INT 4 -#define CIF_FLAGS_DINT 8 - -/* - * Foreign Function Interface API - */ - -void ffi_call_elfbsd (extended_cif *, unsigned, unsigned, void *, - void (*) ()); -void *ffi_prep_args (extended_cif *ecif, void *stack); - -void * -ffi_prep_args (extended_cif *ecif, void *stack) -{ - unsigned int i; - void **p_argv; - char *argp; - ffi_type **p_arg; - void *struct_value_ptr; - - argp = stack; - - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT - && !ecif->cif->flags) - struct_value_ptr = ecif->rvalue; - else - struct_value_ptr = NULL; - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - i != 0; - i--, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - if (z < sizeof (int)) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int) *(SINT8 *) *p_argv; - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int) *(UINT8 *) *p_argv; - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int) *(SINT16 *) *p_argv; - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int) *(UINT16 *) *p_argv; - break; - - case FFI_TYPE_STRUCT: - memcpy (argp, *p_argv, z); - break; - - default: - FFI_ASSERT (0); - } - z = sizeof (int); - } - else - { - memcpy (argp, *p_argv, z); - - /* Align if necessary. */ - if ((sizeof(int) - 1) & z) - z = ALIGN(z, sizeof(int)); - } - - p_argv++; - argp += z; - } - - return struct_value_ptr; -} - -ffi_status -ffi_prep_cif_machdep (ffi_cif *cif) -{ - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - cif->flags = 0; - break; - - case FFI_TYPE_STRUCT: - if (cif->rtype->elements[0]->type == FFI_TYPE_STRUCT && - cif->rtype->elements[1]) - { - cif->flags = 0; - break; - } - - if (cif->rtype->size == sizeof (char)) - cif->flags = CIF_FLAGS_CHAR; - else if (cif->rtype->size == sizeof (short)) - cif->flags = CIF_FLAGS_SHORT; - else if (cif->rtype->size == sizeof (int)) - cif->flags = CIF_FLAGS_INT; - else if (cif->rtype->size == 2 * sizeof (int)) - cif->flags = CIF_FLAGS_DINT; - else - cif->flags = 0; - break; - - default: - if (cif->rtype->size <= sizeof (int)) - cif->flags = CIF_FLAGS_INT; - else - cif->flags = CIF_FLAGS_DINT; - break; - } - - return FFI_OK; -} - -void -ffi_call (ffi_cif *cif, void (*fn) (), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return value - address then we need to make one. */ - - if (rvalue == NULL - && cif->rtype->type == FFI_TYPE_STRUCT - && cif->flags == 0) - ecif.rvalue = alloca (cif->rtype->size); - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_ELFBSD: - ffi_call_elfbsd (&ecif, cif->bytes, cif->flags, ecif.rvalue, fn); - break; - - default: - FFI_ASSERT (0); - break; - } -} - -/* - * Closure API - */ - -void ffi_closure_elfbsd (void); -void ffi_closure_struct_elfbsd (void); -unsigned int ffi_closure_elfbsd_inner (ffi_closure *, void *, char *); - -static void -ffi_prep_closure_elfbsd (ffi_cif *cif, void **avalue, char *stackp) -{ - unsigned int i; - void **p_argv; - ffi_type **p_arg; - - p_argv = avalue; - - for (i = cif->nargs, p_arg = cif->arg_types; i != 0; i--, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - *p_argv = stackp; - - /* Align if necessary */ - if ((sizeof (int) - 1) & z) - z = ALIGN(z, sizeof (int)); - - p_argv++; - stackp += z; - } -} - -unsigned int -ffi_closure_elfbsd_inner (ffi_closure *closure, void *resp, char *stack) -{ - ffi_cif *cif; - void **arg_area; - - cif = closure->cif; - arg_area = (void **) alloca (cif->nargs * sizeof (void *)); - - ffi_prep_closure_elfbsd (cif, arg_area, stack); - - (closure->fun) (cif, resp, arg_area, closure->user_data); - - return cif->flags; -} - -ffi_status -ffi_prep_closure_loc (ffi_closure *closure, ffi_cif *cif, - void (*fun)(ffi_cif *, void *, void **, void *), - void *user_data, void *codeloc) -{ - char *tramp = (char *) codeloc; - void *fn; - - FFI_ASSERT (cif->abi == FFI_ELFBSD); - - /* entry mask */ - *(unsigned short *)(tramp + 0) = 0x0000; - /* movl #closure, r0 */ - tramp[2] = 0xd0; - tramp[3] = 0x8f; - *(unsigned int *)(tramp + 4) = (unsigned int) closure; - tramp[8] = 0x50; - - if (cif->rtype->type == FFI_TYPE_STRUCT - && !cif->flags) - fn = &ffi_closure_struct_elfbsd; - else - fn = &ffi_closure_elfbsd; - - /* jmpl #fn */ - tramp[9] = 0x17; - tramp[10] = 0xef; - *(unsigned int *)(tramp + 11) = (unsigned int)fn + 2 - - (unsigned int)tramp - 9 - 6; - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/vax/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/vax/ffitarget.h deleted file mode 100644 index 2fc94881a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/vax/ffitarget.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2013 Miodrag Vallat. - * - * 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. - */ - -/* - * vax Foreign Function Interface - */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_ELFBSD, - FFI_DEFAULT_ABI = FFI_ELFBSD, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 15 -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/x86/darwin.S b/ruby/ext/fiddle/libffi-3.2.1/src/x86/darwin.S deleted file mode 100644 index 8f0f0707a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/x86/darwin.S +++ /dev/null @@ -1,444 +0,0 @@ -/* ----------------------------------------------------------------------- - darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003, 2005 Red Hat, Inc. - Copyright (C) 2008 Free Software Foundation, Inc. - - X86 Foreign Function Interface - - 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. - ----------------------------------------------------------------------- - */ - -#ifndef __x86_64__ - -#define LIBFFI_ASM -#include -#include - -.text - -.globl _ffi_prep_args - - .align 4 -.globl _ffi_call_SYSV - -_ffi_call_SYSV: -.LFB1: - pushl %ebp -.LCFI0: - movl %esp,%ebp -.LCFI1: - subl $8,%esp - /* Make room for all of the new args. */ - movl 16(%ebp),%ecx - subl %ecx,%esp - - movl %esp,%eax - - /* Place all of the ffi_prep_args in position */ - subl $8,%esp - pushl 12(%ebp) - pushl %eax - call *8(%ebp) - - /* Return stack to previous state and call the function */ - addl $16,%esp - - call *28(%ebp) - - /* Load %ecx with the return type code */ - movl 20(%ebp),%ecx - - /* Protect %esi. We're going to pop it in the epilogue. */ - pushl %esi - - /* If the return value pointer is NULL, assume no return value. */ - cmpl $0,24(%ebp) - jne 0f - - /* Even if there is no space for the return value, we are - obliged to handle floating-point values. */ - cmpl $FFI_TYPE_FLOAT,%ecx - jne noretval - fstp %st(0) - - jmp epilogue -0: - .align 4 - call 1f -.Lstore_table: - .long noretval-.Lstore_table /* FFI_TYPE_VOID */ - .long retint-.Lstore_table /* FFI_TYPE_INT */ - .long retfloat-.Lstore_table /* FFI_TYPE_FLOAT */ - .long retdouble-.Lstore_table /* FFI_TYPE_DOUBLE */ - .long retlongdouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ - .long retuint8-.Lstore_table /* FFI_TYPE_UINT8 */ - .long retsint8-.Lstore_table /* FFI_TYPE_SINT8 */ - .long retuint16-.Lstore_table /* FFI_TYPE_UINT16 */ - .long retsint16-.Lstore_table /* FFI_TYPE_SINT16 */ - .long retint-.Lstore_table /* FFI_TYPE_UINT32 */ - .long retint-.Lstore_table /* FFI_TYPE_SINT32 */ - .long retint64-.Lstore_table /* FFI_TYPE_UINT64 */ - .long retint64-.Lstore_table /* FFI_TYPE_SINT64 */ - .long retstruct-.Lstore_table /* FFI_TYPE_STRUCT */ - .long retint-.Lstore_table /* FFI_TYPE_POINTER */ - .long retstruct1b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_1B */ - .long retstruct2b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_2B */ -1: - pop %esi - add (%esi, %ecx, 4), %esi - jmp *%esi - - /* Sign/zero extend as appropriate. */ -retsint8: - movsbl %al, %eax - jmp retint - -retsint16: - movswl %ax, %eax - jmp retint - -retuint8: - movzbl %al, %eax - jmp retint - -retuint16: - movzwl %ax, %eax - jmp retint - -retfloat: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstps (%ecx) - jmp epilogue - -retdouble: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstpl (%ecx) - jmp epilogue - -retlongdouble: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstpt (%ecx) - jmp epilogue - -retint64: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - movl %edx,4(%ecx) - jmp epilogue - -retstruct1b: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movb %al,0(%ecx) - jmp epilogue - -retstruct2b: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movw %ax,0(%ecx) - jmp epilogue - -retint: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - -retstruct: - /* Nothing to do! */ - -noretval: -epilogue: - popl %esi - movl %ebp,%esp - popl %ebp - ret - -.LFE1: -.ffi_call_SYSV_end: - - .align 4 -FFI_HIDDEN (ffi_closure_SYSV) -.globl _ffi_closure_SYSV - -_ffi_closure_SYSV: -.LFB2: - pushl %ebp -.LCFI2: - movl %esp, %ebp -.LCFI3: - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 8(%ebp), %edx - movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ - movl %ebx, 8(%esp) -.LCFI7: - call L_ffi_closure_SYSV_inner$stub - movl 8(%esp), %ebx - movl -12(%ebp), %ecx - cmpl $FFI_TYPE_INT, %eax - je .Lcls_retint - - /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, - FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ - cmpl $FFI_TYPE_UINT64, %eax - jge 0f - cmpl $FFI_TYPE_UINT8, %eax - jge .Lcls_retint - -0: cmpl $FFI_TYPE_FLOAT, %eax - je .Lcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lcls_retllong - cmpl $FFI_TYPE_SMALL_STRUCT_1B, %eax - je .Lcls_retstruct1b - cmpl $FFI_TYPE_SMALL_STRUCT_2B, %eax - je .Lcls_retstruct2b - cmpl $FFI_TYPE_STRUCT, %eax - je .Lcls_retstruct -.Lcls_epilogue: - movl %ebp, %esp - popl %ebp - ret -.Lcls_retint: - movl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retfloat: - flds (%ecx) - jmp .Lcls_epilogue -.Lcls_retdouble: - fldl (%ecx) - jmp .Lcls_epilogue -.Lcls_retldouble: - fldt (%ecx) - jmp .Lcls_epilogue -.Lcls_retllong: - movl (%ecx), %eax - movl 4(%ecx), %edx - jmp .Lcls_epilogue -.Lcls_retstruct1b: - movsbl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retstruct2b: - movswl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retstruct: - lea -8(%ebp),%esp - movl %ebp, %esp - popl %ebp - ret $4 -.LFE2: - -#if !FFI_NO_RAW_API - -#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) -#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) -#define CIF_FLAGS_OFFSET 20 - - .align 4 -FFI_HIDDEN (ffi_closure_raw_SYSV) -.globl _ffi_closure_raw_SYSV - -_ffi_closure_raw_SYSV: -.LFB3: - pushl %ebp -.LCFI4: - movl %esp, %ebp -.LCFI5: - pushl %esi -.LCFI6: - subl $36, %esp - movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ - movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ - movl %edx, 12(%esp) /* user_data */ - leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ - movl %edx, 8(%esp) /* raw_args */ - leal -24(%ebp), %edx - movl %edx, 4(%esp) /* &res */ - movl %esi, (%esp) /* cif */ - call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ - movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ - cmpl $FFI_TYPE_INT, %eax - je .Lrcls_retint - - /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, - FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ - cmpl $FFI_TYPE_UINT64, %eax - jge 0f - cmpl $FFI_TYPE_UINT8, %eax - jge .Lrcls_retint -0: - cmpl $FFI_TYPE_FLOAT, %eax - je .Lrcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lrcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lrcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lrcls_retllong -.Lrcls_epilogue: - addl $36, %esp - popl %esi - popl %ebp - ret -.Lrcls_retint: - movl -24(%ebp), %eax - jmp .Lrcls_epilogue -.Lrcls_retfloat: - flds -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retdouble: - fldl -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retldouble: - fldt -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retllong: - movl -24(%ebp), %eax - movl -20(%ebp), %edx - jmp .Lrcls_epilogue -.LFE3: -#endif - -.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 -L_ffi_closure_SYSV_inner$stub: - .indirect_symbol _ffi_closure_SYSV_inner - hlt ; hlt ; hlt ; hlt ; hlt - - -.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -EH_frame1: - .set L$set$0,LECIE1-LSCIE1 - .long L$set$0 -LSCIE1: - .long 0x0 - .byte 0x1 - .ascii "zR\0" - .byte 0x1 - .byte 0x7c - .byte 0x8 - .byte 0x1 - .byte 0x10 - .byte 0xc - .byte 0x5 - .byte 0x4 - .byte 0x88 - .byte 0x1 - .align 2 -LECIE1: -.globl _ffi_call_SYSV.eh -_ffi_call_SYSV.eh: -LSFDE1: - .set L$set$1,LEFDE1-LASFDE1 - .long L$set$1 -LASFDE1: - .long LASFDE1-EH_frame1 - .long .LFB1-. - .set L$set$2,.LFE1-.LFB1 - .long L$set$2 - .byte 0x0 - .byte 0x4 - .set L$set$3,.LCFI0-.LFB1 - .long L$set$3 - .byte 0xe - .byte 0x8 - .byte 0x84 - .byte 0x2 - .byte 0x4 - .set L$set$4,.LCFI1-.LCFI0 - .long L$set$4 - .byte 0xd - .byte 0x4 - .align 2 -LEFDE1: -.globl _ffi_closure_SYSV.eh -_ffi_closure_SYSV.eh: -LSFDE2: - .set L$set$5,LEFDE2-LASFDE2 - .long L$set$5 -LASFDE2: - .long LASFDE2-EH_frame1 - .long .LFB2-. - .set L$set$6,.LFE2-.LFB2 - .long L$set$6 - .byte 0x0 - .byte 0x4 - .set L$set$7,.LCFI2-.LFB2 - .long L$set$7 - .byte 0xe - .byte 0x8 - .byte 0x84 - .byte 0x2 - .byte 0x4 - .set L$set$8,.LCFI3-.LCFI2 - .long L$set$8 - .byte 0xd - .byte 0x4 - .align 2 -LEFDE2: - -#if !FFI_NO_RAW_API - -.globl _ffi_closure_raw_SYSV.eh -_ffi_closure_raw_SYSV.eh: -LSFDE3: - .set L$set$10,LEFDE3-LASFDE3 - .long L$set$10 -LASFDE3: - .long LASFDE3-EH_frame1 - .long .LFB3-. - .set L$set$11,.LFE3-.LFB3 - .long L$set$11 - .byte 0x0 - .byte 0x4 - .set L$set$12,.LCFI4-.LFB3 - .long L$set$12 - .byte 0xe - .byte 0x8 - .byte 0x84 - .byte 0x2 - .byte 0x4 - .set L$set$13,.LCFI5-.LCFI4 - .long L$set$13 - .byte 0xd - .byte 0x4 - .byte 0x4 - .set L$set$14,.LCFI6-.LCFI5 - .long L$set$14 - .byte 0x85 - .byte 0x3 - .align 2 -LEFDE3: - -#endif - -#endif /* ifndef __x86_64__ */ diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/x86/darwin64.S b/ruby/ext/fiddle/libffi-3.2.1/src/x86/darwin64.S deleted file mode 100644 index 2f7394ef4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/x86/darwin64.S +++ /dev/null @@ -1,416 +0,0 @@ -/* ----------------------------------------------------------------------- - darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc. - Copyright (c) 2008 Red Hat, Inc. - derived from unix64.S - - x86-64 Foreign Function Interface for Darwin. - - 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 AUTHOR 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. - ----------------------------------------------------------------------- */ - -#ifdef __x86_64__ -#define LIBFFI_ASM -#include -#include - - .file "darwin64.S" -.text - -/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, - void *raddr, void (*fnaddr)(void)); - - Bit o trickiness here -- ARGS+BYTES is the base of the stack frame - for this function. This has been allocated by ffi_call. We also - deallocate some of the stack that has been alloca'd. */ - - .align 3 - .globl _ffi_call_unix64 - -_ffi_call_unix64: -LUW0: - movq (%rsp), %r10 /* Load return address. */ - leaq (%rdi, %rsi), %rax /* Find local stack base. */ - movq %rdx, (%rax) /* Save flags. */ - movq %rcx, 8(%rax) /* Save raddr. */ - movq %rbp, 16(%rax) /* Save old frame pointer. */ - movq %r10, 24(%rax) /* Relocate return address. */ - movq %rax, %rbp /* Finalize local stack frame. */ -LUW1: - movq %rdi, %r10 /* Save a copy of the register area. */ - movq %r8, %r11 /* Save a copy of the target fn. */ - movl %r9d, %eax /* Set number of SSE registers. */ - - /* Load up all argument registers. */ - movq (%r10), %rdi - movq 8(%r10), %rsi - movq 16(%r10), %rdx - movq 24(%r10), %rcx - movq 32(%r10), %r8 - movq 40(%r10), %r9 - testl %eax, %eax - jnz Lload_sse -Lret_from_load_sse: - - /* Deallocate the reg arg area. */ - leaq 176(%r10), %rsp - - /* Call the user function. */ - call *%r11 - - /* Deallocate stack arg area; local stack frame in redzone. */ - leaq 24(%rbp), %rsp - - movq 0(%rbp), %rcx /* Reload flags. */ - movq 8(%rbp), %rdi /* Reload raddr. */ - movq 16(%rbp), %rbp /* Reload old frame pointer. */ -LUW2: - - /* The first byte of the flags contains the FFI_TYPE. */ - movzbl %cl, %r10d - leaq Lstore_table(%rip), %r11 - movslq (%r11, %r10, 4), %r10 - addq %r11, %r10 - jmp *%r10 - -Lstore_table: - .long Lst_void-Lstore_table /* FFI_TYPE_VOID */ - .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */ - .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */ - .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */ - .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */ - .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */ - .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */ - .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */ - .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */ - .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */ - .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */ - .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */ - .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */ - .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */ - .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */ - - .text - .align 3 -Lst_void: - ret - .align 3 -Lst_uint8: - movzbq %al, %rax - movq %rax, (%rdi) - ret - .align 3 -Lst_sint8: - movsbq %al, %rax - movq %rax, (%rdi) - ret - .align 3 -Lst_uint16: - movzwq %ax, %rax - movq %rax, (%rdi) - .align 3 -Lst_sint16: - movswq %ax, %rax - movq %rax, (%rdi) - ret - .align 3 -Lst_uint32: - movl %eax, %eax - movq %rax, (%rdi) - .align 3 -Lst_sint32: - cltq - movq %rax, (%rdi) - ret - .align 3 -Lst_int64: - movq %rax, (%rdi) - ret - .align 3 -Lst_float: - movss %xmm0, (%rdi) - ret - .align 3 -Lst_double: - movsd %xmm0, (%rdi) - ret -Lst_ldouble: - fstpt (%rdi) - ret - .align 3 -Lst_struct: - leaq -20(%rsp), %rsi /* Scratch area in redzone. */ - - /* We have to locate the values now, and since we don't want to - write too much data into the user's return value, we spill the - value to a 16 byte scratch area first. Bits 8, 9, and 10 - control where the values are located. Only one of the three - bits will be set; see ffi_prep_cif_machdep for the pattern. */ - movd %xmm0, %r10 - movd %xmm1, %r11 - testl $0x100, %ecx - cmovnz %rax, %rdx - cmovnz %r10, %rax - testl $0x200, %ecx - cmovnz %r10, %rdx - testl $0x400, %ecx - cmovnz %r10, %rax - cmovnz %r11, %rdx - movq %rax, (%rsi) - movq %rdx, 8(%rsi) - - /* Bits 12-31 contain the true size of the structure. Copy from - the scratch area to the true destination. */ - shrl $12, %ecx - rep movsb - ret - - /* Many times we can avoid loading any SSE registers at all. - It's not worth an indirect jump to load the exact set of - SSE registers needed; zero or all is a good compromise. */ - .align 3 -LUW3: -Lload_sse: - movdqa 48(%r10), %xmm0 - movdqa 64(%r10), %xmm1 - movdqa 80(%r10), %xmm2 - movdqa 96(%r10), %xmm3 - movdqa 112(%r10), %xmm4 - movdqa 128(%r10), %xmm5 - movdqa 144(%r10), %xmm6 - movdqa 160(%r10), %xmm7 - jmp Lret_from_load_sse - -LUW4: - .align 3 - .globl _ffi_closure_unix64 - -_ffi_closure_unix64: -LUW5: - /* The carry flag is set by the trampoline iff SSE registers - are used. Don't clobber it before the branch instruction. */ - leaq -200(%rsp), %rsp -LUW6: - movq %rdi, (%rsp) - movq %rsi, 8(%rsp) - movq %rdx, 16(%rsp) - movq %rcx, 24(%rsp) - movq %r8, 32(%rsp) - movq %r9, 40(%rsp) - jc Lsave_sse -Lret_from_save_sse: - - movq %r10, %rdi - leaq 176(%rsp), %rsi - movq %rsp, %rdx - leaq 208(%rsp), %rcx - call _ffi_closure_unix64_inner - - /* Deallocate stack frame early; return value is now in redzone. */ - addq $200, %rsp -LUW7: - - /* The first byte of the return value contains the FFI_TYPE. */ - movzbl %al, %r10d - leaq Lload_table(%rip), %r11 - movslq (%r11, %r10, 4), %r10 - addq %r11, %r10 - jmp *%r10 - -Lload_table: - .long Lld_void-Lload_table /* FFI_TYPE_VOID */ - .long Lld_int32-Lload_table /* FFI_TYPE_INT */ - .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */ - .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */ - .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */ - .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */ - .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */ - .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */ - .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */ - .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */ - .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */ - .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */ - .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */ - .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */ - .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */ - - .text - .align 3 -Lld_void: - ret - .align 3 -Lld_int8: - movzbl -24(%rsp), %eax - ret - .align 3 -Lld_int16: - movzwl -24(%rsp), %eax - ret - .align 3 -Lld_int32: - movl -24(%rsp), %eax - ret - .align 3 -Lld_int64: - movq -24(%rsp), %rax - ret - .align 3 -Lld_float: - movss -24(%rsp), %xmm0 - ret - .align 3 -Lld_double: - movsd -24(%rsp), %xmm0 - ret - .align 3 -Lld_ldouble: - fldt -24(%rsp) - ret - .align 3 -Lld_struct: - /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, - %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading - both rdx and xmm1 with the second word. For the remaining, - bit 8 set means xmm0 gets the second word, and bit 9 means - that rax gets the second word. */ - movq -24(%rsp), %rcx - movq -16(%rsp), %rdx - movq -16(%rsp), %xmm1 - testl $0x100, %eax - cmovnz %rdx, %rcx - movd %rcx, %xmm0 - testl $0x200, %eax - movq -24(%rsp), %rax - cmovnz %rdx, %rax - ret - - /* See the comment above Lload_sse; the same logic applies here. */ - .align 3 -LUW8: -Lsave_sse: - movdqa %xmm0, 48(%rsp) - movdqa %xmm1, 64(%rsp) - movdqa %xmm2, 80(%rsp) - movdqa %xmm3, 96(%rsp) - movdqa %xmm4, 112(%rsp) - movdqa %xmm5, 128(%rsp) - movdqa %xmm6, 144(%rsp) - movdqa %xmm7, 160(%rsp) - jmp Lret_from_save_sse - -LUW9: -.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -EH_frame1: - .set L$set$0,LECIE1-LSCIE1 /* CIE Length */ - .long L$set$0 -LSCIE1: - .long 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ - .ascii "zR\0" /* CIE Augmentation */ - .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ - .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */ - .byte 0x10 /* CIE RA Column */ - .byte 0x1 /* uleb128 0x1; Augmentation size */ - .byte 0x10 /* FDE Encoding (pcrel sdata4) */ - .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ - .byte 0x7 /* uleb128 0x7 */ - .byte 0x8 /* uleb128 0x8 */ - .byte 0x90 /* DW_CFA_offset, column 0x10 */ - .byte 0x1 - .align 3 -LECIE1: - .globl _ffi_call_unix64.eh -_ffi_call_unix64.eh: -LSFDE1: - .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */ - .long L$set$1 -LASFDE1: - .long LASFDE1-EH_frame1 /* FDE CIE offset */ - .quad LUW0-. /* FDE initial location */ - .set L$set$2,LUW4-LUW0 /* FDE address range */ - .quad L$set$2 - .byte 0x0 /* Augmentation size */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .set L$set$3,LUW1-LUW0 - .long L$set$3 - - /* New stack frame based off rbp. This is a itty bit of unwind - trickery in that the CFA *has* changed. There is no easy way - to describe it correctly on entry to the function. Fortunately, - it doesn't matter too much since at all points we can correctly - unwind back to ffi_call. Note that the location to which we - moved the return address is (the new) CFA-8, so from the - perspective of the unwind info, it hasn't moved. */ - .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ - .byte 0x6 - .byte 0x20 - .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ - .byte 0x2 - .byte 0xa /* DW_CFA_remember_state */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .set L$set$4,LUW2-LUW1 - .long L$set$4 - .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ - .byte 0x7 - .byte 0x8 - .byte 0xc0+6 /* DW_CFA_restore, %rbp */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .set L$set$5,LUW3-LUW2 - .long L$set$5 - .byte 0xb /* DW_CFA_restore_state */ - - .align 3 -LEFDE1: - .globl _ffi_closure_unix64.eh -_ffi_closure_unix64.eh: -LSFDE3: - .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */ - .long L$set$6 -LASFDE3: - .long LASFDE3-EH_frame1 /* FDE CIE offset */ - .quad LUW5-. /* FDE initial location */ - .set L$set$7,LUW9-LUW5 /* FDE address range */ - .quad L$set$7 - .byte 0x0 /* Augmentation size */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .set L$set$8,LUW6-LUW5 - .long L$set$8 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 208,1 /* uleb128 208 */ - .byte 0xa /* DW_CFA_remember_state */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .set L$set$9,LUW7-LUW6 - .long L$set$9 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .set L$set$10,LUW8-LUW7 - .long L$set$10 - .byte 0xb /* DW_CFA_restore_state */ - - .align 3 -LEFDE3: - .subsections_via_symbols - -#endif /* __x86_64__ */ diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/x86/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/x86/ffi.c deleted file mode 100644 index fba8b0156..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/x86/ffi.c +++ /dev/null @@ -1,937 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1996, 1998, 1999, 2001, 2007, 2008 Red Hat, Inc. - Copyright (c) 2002 Ranjit Mathew - Copyright (c) 2002 Bo Thorsen - Copyright (c) 2002 Roger Sayle - Copyright (C) 2008, 2010 Free Software Foundation, Inc. - - x86 Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#if !defined(__x86_64__) || defined(_WIN64) || defined(__CYGWIN__) - -#ifdef _WIN64 -#include -#endif - -#include -#include - -#include - - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -unsigned int ffi_prep_args(char *stack, extended_cif *ecif); -unsigned int ffi_prep_args(char *stack, extended_cif *ecif) -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; -#ifndef X86_WIN64 - const int cabi = ecif->cif->abi; - const int dir = (cabi == FFI_PASCAL || cabi == FFI_REGISTER) ? -1 : +1; - unsigned int stack_args_count = 0; - void *p_stack_data[3]; - char *argp2 = stack; -#else - #define dir 1 -#endif - - argp = stack; - - if ((ecif->cif->flags == FFI_TYPE_STRUCT - || ecif->cif->flags == FFI_TYPE_MS_STRUCT) -#ifdef X86_WIN64 - && ((ecif->cif->rtype->size & (1 | 2 | 4 | 8)) == 0) -#endif - ) - { -#ifndef X86_WIN64 - /* For fastcall/thiscall/register this is first register-passed - argument. */ - if (cabi == FFI_THISCALL || cabi == FFI_FASTCALL || cabi == FFI_REGISTER) - { - p_stack_data[stack_args_count] = argp; - ++stack_args_count; - } -#endif - - *(void **) argp = ecif->rvalue; - argp += sizeof(void*); - } - - p_arg = ecif->cif->arg_types; - p_argv = ecif->avalue; - if (dir < 0) - { - const int nargs = ecif->cif->nargs - 1; - if (nargs > 0) - { - p_arg += nargs; - p_argv += nargs; - } - } - - for (i = ecif->cif->nargs; - i != 0; - i--, p_arg += dir, p_argv += dir) - { - size_t z; - - /* Align if necessary */ - if ((sizeof(void*) - 1) & (size_t) argp) - argp = (char *) ALIGN(argp, sizeof(void*)); - - z = (*p_arg)->size; - -#ifdef X86_WIN64 - if (z > FFI_SIZEOF_ARG - || ((*p_arg)->type == FFI_TYPE_STRUCT - && (z & (1 | 2 | 4 | 8)) == 0) -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - || ((*p_arg)->type == FFI_TYPE_LONGDOUBLE) -#endif - ) - { - z = FFI_SIZEOF_ARG; - *(void **)argp = *p_argv; - } - else if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - memcpy(argp, *p_argv, z); - } - else -#endif - if (z < FFI_SIZEOF_ARG) - { - z = FFI_SIZEOF_ARG; - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(ffi_sarg *) argp = (ffi_sarg)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(ffi_arg *) argp = (ffi_arg)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(ffi_sarg *) argp = (ffi_sarg)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(ffi_arg *) argp = (ffi_arg)*(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_SINT32: - *(ffi_sarg *) argp = (ffi_sarg)*(SINT32 *)(* p_argv); - break; - - case FFI_TYPE_UINT32: - *(ffi_arg *) argp = (ffi_arg)*(UINT32 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - *(ffi_arg *) argp = *(ffi_arg *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - } - else - { - memcpy(argp, *p_argv, z); - } - -#ifndef X86_WIN64 - /* For thiscall/fastcall/register convention register-passed arguments - are the first two none-floating-point arguments with a size - smaller or equal to sizeof (void*). */ - if ((z == FFI_SIZEOF_ARG) - && ((cabi == FFI_REGISTER) - || (cabi == FFI_THISCALL && stack_args_count < 1) - || (cabi == FFI_FASTCALL && stack_args_count < 2)) - && ((*p_arg)->type != FFI_TYPE_FLOAT && (*p_arg)->type != FFI_TYPE_STRUCT) - ) - { - if (dir < 0 && stack_args_count > 2) - { - /* Iterating arguments backwards, so first register-passed argument - will be passed last. Shift temporary values to make place. */ - p_stack_data[0] = p_stack_data[1]; - p_stack_data[1] = p_stack_data[2]; - stack_args_count = 2; - } - - p_stack_data[stack_args_count] = argp; - ++stack_args_count; - } -#endif - -#ifdef X86_WIN64 - argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); -#else - argp += z; -#endif - } - -#ifndef X86_WIN64 - /* We need to move the register-passed arguments for thiscall/fastcall/register - on top of stack, so that those can be moved to registers by call-handler. */ - if (stack_args_count > 0) - { - int i; - if (dir < 0 && stack_args_count > 1) - { - /* Reverse order if iterating arguments backwards */ - ffi_arg tmp = *(ffi_arg*) p_stack_data[0]; - *(ffi_arg*) p_stack_data[0] = *(ffi_arg*) p_stack_data[stack_args_count - 1]; - *(ffi_arg*) p_stack_data[stack_args_count - 1] = tmp; - } - - for (i = 0; i < stack_args_count; i++) - { - if (p_stack_data[i] != argp2) - { - ffi_arg tmp = *(ffi_arg*) p_stack_data[i]; - memmove (argp2 + FFI_SIZEOF_ARG, argp2, (size_t) ((char*) p_stack_data[i] - (char*)argp2)); - *(ffi_arg *) argp2 = tmp; - } - - argp2 += FFI_SIZEOF_ARG; - } - } - - return stack_args_count; -#endif - return 0; -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - unsigned int i; - ffi_type **ptr; - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_UINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT8: - case FFI_TYPE_SINT16: -#ifdef X86_WIN64 - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: -#endif - case FFI_TYPE_SINT64: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#ifndef X86_WIN64 -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif -#endif - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_UINT64: -#ifdef X86_WIN64 - case FFI_TYPE_POINTER: -#endif - cif->flags = FFI_TYPE_SINT64; - break; - - case FFI_TYPE_STRUCT: -#ifndef X86 - if (cif->rtype->size == 1) - { - cif->flags = FFI_TYPE_SMALL_STRUCT_1B; /* same as char size */ - } - else if (cif->rtype->size == 2) - { - cif->flags = FFI_TYPE_SMALL_STRUCT_2B; /* same as short size */ - } - else if (cif->rtype->size == 4) - { -#ifdef X86_WIN64 - cif->flags = FFI_TYPE_SMALL_STRUCT_4B; -#else - cif->flags = FFI_TYPE_INT; /* same as int type */ -#endif - } - else if (cif->rtype->size == 8) - { - cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ - } - else -#endif - { -#ifdef X86_WIN32 - if (cif->abi == FFI_MS_CDECL) - cif->flags = FFI_TYPE_MS_STRUCT; - else -#endif - cif->flags = FFI_TYPE_STRUCT; - /* allocate space for return value pointer */ - cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG); - } - break; - - default: -#ifdef X86_WIN64 - cif->flags = FFI_TYPE_SINT64; - break; - case FFI_TYPE_INT: - cif->flags = FFI_TYPE_SINT32; -#else - cif->flags = FFI_TYPE_INT; -#endif - break; - } - - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - if (((*ptr)->alignment - 1) & cif->bytes) - cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); - cif->bytes += (unsigned)ALIGN((*ptr)->size, FFI_SIZEOF_ARG); - } - -#ifdef X86_WIN64 - /* ensure space for storing four registers */ - cif->bytes += 4 * FFI_SIZEOF_ARG; -#endif - -#ifndef X86_WIN32 -#ifndef X86_WIN64 - if (cif->abi == FFI_SYSV || cif->abi == FFI_UNIX64) -#endif - cif->bytes = (cif->bytes + 15) & ~0xF; -#endif - - return FFI_OK; -} - -#ifdef X86_WIN64 -extern int -ffi_call_win64(unsigned int (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); -#else -extern void -ffi_call_win32(unsigned int (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned, unsigned *, void (*fn)(void)); -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); -#endif - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - -#ifdef X86_WIN64 - if (rvalue == NULL - && cif->flags == FFI_TYPE_STRUCT - && ((cif->rtype->size & (1 | 2 | 4 | 8)) == 0)) - { - ecif.rvalue = alloca((cif->rtype->size + 0xF) & ~0xF); - } -#else - if (rvalue == NULL - && (cif->flags == FFI_TYPE_STRUCT - || cif->flags == FFI_TYPE_MS_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } -#endif - else - ecif.rvalue = rvalue; - - - switch (cif->abi) - { -#ifdef X86_WIN64 - case FFI_WIN64: - ffi_call_win64(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; -#else -#ifndef X86_WIN32 - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, - fn); - break; -#else - case FFI_SYSV: - case FFI_MS_CDECL: -#endif - case FFI_STDCALL: - case FFI_THISCALL: - case FFI_FASTCALL: - case FFI_PASCAL: - case FFI_REGISTER: - ffi_call_win32(ffi_prep_args, &ecif, cif->abi, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; -#endif - default: - FFI_ASSERT(0); - break; - } -} - - -/** private members **/ - -/* The following __attribute__((regparm(1))) decorations will have no effect - on MSVC or SUNPRO_C -- standard conventions apply. */ -static unsigned int ffi_prep_incoming_args (char *stack, void **ret, - void** args, ffi_cif* cif); -void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) - __attribute__ ((regparm(1))); -unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) - __attribute__ ((regparm(1))); -unsigned int FFI_HIDDEN ffi_closure_WIN32_inner (ffi_closure *, void **, void *) - __attribute__ ((regparm(1))); -void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *) - __attribute__ ((regparm(1))); -#ifdef X86_WIN32 -void FFI_HIDDEN ffi_closure_raw_THISCALL (ffi_raw_closure *) - __attribute__ ((regparm(1))); -#endif -#ifndef X86_WIN64 -void FFI_HIDDEN ffi_closure_STDCALL (ffi_closure *); -void FFI_HIDDEN ffi_closure_THISCALL (ffi_closure *); -void FFI_HIDDEN ffi_closure_FASTCALL (ffi_closure *); -void FFI_HIDDEN ffi_closure_REGISTER (ffi_closure *); -#else -void FFI_HIDDEN ffi_closure_win64 (ffi_closure *); -#endif - -/* This function is jumped to by the trampoline */ - -#ifdef X86_WIN64 -void * FFI_HIDDEN -ffi_closure_win64_inner (ffi_closure *closure, void *args) { - ffi_cif *cif; - void **arg_area; - void *result; - void *resp = &result; - - cif = closure->cif; - arg_area = (void**) alloca (cif->nargs * sizeof (void*)); - - /* this call will initialize ARG_AREA, such that each - * element in that array points to the corresponding - * value on the stack; and if the function returns - * a structure, it will change RESP to point to the - * structure return address. */ - - ffi_prep_incoming_args(args, &resp, arg_area, cif); - - (closure->fun) (cif, resp, arg_area, closure->user_data); - - /* The result is returned in rax. This does the right thing for - result types except for floats; we have to 'mov xmm0, rax' in the - caller to correct this. - TODO: structure sizes of 3 5 6 7 are returned by reference, too!!! - */ - return cif->rtype->size > sizeof(void *) ? resp : *(void **)resp; -} - -#else -unsigned int FFI_HIDDEN __attribute__ ((regparm(1))) -ffi_closure_SYSV_inner (ffi_closure *closure, void **respp, void *args) -{ - /* our various things... */ - ffi_cif *cif; - void **arg_area; - - cif = closure->cif; - arg_area = (void**) alloca (cif->nargs * sizeof (void*)); - - /* this call will initialize ARG_AREA, such that each - * element in that array points to the corresponding - * value on the stack; and if the function returns - * a structure, it will change RESP to point to the - * structure return address. */ - - ffi_prep_incoming_args(args, respp, arg_area, cif); - - (closure->fun) (cif, *respp, arg_area, closure->user_data); - - return cif->flags; -} - -unsigned int FFI_HIDDEN __attribute__ ((regparm(1))) -ffi_closure_WIN32_inner (ffi_closure *closure, void **respp, void *args) -{ - /* our various things... */ - ffi_cif *cif; - void **arg_area; - unsigned int ret; - - cif = closure->cif; - arg_area = (void**) alloca (cif->nargs * sizeof (void*)); - - /* this call will initialize ARG_AREA, such that each - * element in that array points to the corresponding - * value on the stack; and if the function returns - * a structure, it will change RESP to point to the - * structure return address. */ - - ret = ffi_prep_incoming_args(args, respp, arg_area, cif); - - (closure->fun) (cif, *respp, arg_area, closure->user_data); - - return ret; -} -#endif /* !X86_WIN64 */ - -static unsigned int -ffi_prep_incoming_args(char *stack, void **rvalue, void **avalue, - ffi_cif *cif) -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; -#ifndef X86_WIN64 - const int cabi = cif->abi; - const int dir = (cabi == FFI_PASCAL || cabi == FFI_REGISTER) ? -1 : +1; - const unsigned int max_stack_count = (cabi == FFI_THISCALL) ? 1 - : (cabi == FFI_FASTCALL) ? 2 - : (cabi == FFI_REGISTER) ? 3 - : 0; - unsigned int passed_regs = 0; - void *p_stack_data[3] = { stack - 1 }; -#else - #define dir 1 -#endif - - argp = stack; -#ifndef X86_WIN64 - argp += max_stack_count * FFI_SIZEOF_ARG; -#endif - - if ((cif->flags == FFI_TYPE_STRUCT - || cif->flags == FFI_TYPE_MS_STRUCT) -#ifdef X86_WIN64 - && ((cif->rtype->size & (1 | 2 | 4 | 8)) == 0) -#endif - ) - { -#ifndef X86_WIN64 - if (passed_regs < max_stack_count) - { - *rvalue = *(void**) (stack + (passed_regs*FFI_SIZEOF_ARG)); - ++passed_regs; - } - else -#endif - { - *rvalue = *(void **) argp; - argp += sizeof(void *); - } - } - -#ifndef X86_WIN64 - /* Do register arguments first */ - for (i = 0, p_arg = cif->arg_types; - i < cif->nargs && passed_regs < max_stack_count; - i++, p_arg++) - { - size_t sz; - if ((*p_arg)->type == FFI_TYPE_FLOAT - || (*p_arg)->type == FFI_TYPE_STRUCT) - continue; - - sz = (*p_arg)->size; - if(sz == 0 || sz > FFI_SIZEOF_ARG) - continue; - - p_stack_data[passed_regs] = avalue + i; - avalue[i] = stack + (passed_regs*FFI_SIZEOF_ARG); - ++passed_regs; - } -#endif - - p_arg = cif->arg_types; - p_argv = avalue; - if (dir < 0) - { - const int nargs = cif->nargs - 1; - if (nargs > 0) - { - p_arg += nargs; - p_argv += nargs; - } - } - - for (i = cif->nargs; - i != 0; - i--, p_arg += dir, p_argv += dir) - { - size_t z; - - /* Align if necessary */ - if ((sizeof(void*) - 1) & (size_t) argp) - argp = (char *) ALIGN(argp, sizeof(void*)); - - z = (*p_arg)->size; - -#ifdef X86_WIN64 - if (z > FFI_SIZEOF_ARG - || ((*p_arg)->type == FFI_TYPE_STRUCT - && (z & (1 | 2 | 4 | 8)) == 0) -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - || ((*p_arg)->type == FFI_TYPE_LONGDOUBLE) -#endif - ) - { - z = FFI_SIZEOF_ARG; - *p_argv = *(void **)argp; - } - else -#else - if (passed_regs > 0 - && z <= FFI_SIZEOF_ARG - && (p_argv == p_stack_data[0] - || p_argv == p_stack_data[1] - || p_argv == p_stack_data[2])) - { - /* Already assigned a register value */ - continue; - } - else -#endif - { - /* because we're little endian, this is what it turns into. */ - *p_argv = (void*) argp; - } - -#ifdef X86_WIN64 - argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); -#else - argp += z; -#endif - } - - return (int)((size_t)argp - (size_t)stack); -} - -#define FFI_INIT_TRAMPOLINE_WIN64(TRAMP,FUN,CTX,MASK) \ -{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ - void* __fun = (void*)(FUN); \ - void* __ctx = (void*)(CTX); \ - *(unsigned char*) &__tramp[0] = 0x41; \ - *(unsigned char*) &__tramp[1] = 0xbb; \ - *(unsigned int*) &__tramp[2] = MASK; /* mov $mask, %r11 */ \ - *(unsigned char*) &__tramp[6] = 0x48; \ - *(unsigned char*) &__tramp[7] = 0xb8; \ - *(void**) &__tramp[8] = __ctx; /* mov __ctx, %rax */ \ - *(unsigned char *) &__tramp[16] = 0x49; \ - *(unsigned char *) &__tramp[17] = 0xba; \ - *(void**) &__tramp[18] = __fun; /* mov __fun, %r10 */ \ - *(unsigned char *) &__tramp[26] = 0x41; \ - *(unsigned char *) &__tramp[27] = 0xff; \ - *(unsigned char *) &__tramp[28] = 0xe2; /* jmp %r10 */ \ - } - -/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ - -#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ -{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ - unsigned int __fun = (unsigned int)(FUN); \ - unsigned int __ctx = (unsigned int)(CTX); \ - unsigned int __dis = __fun - (__ctx + 10); \ - *(unsigned char*) &__tramp[0] = 0xb8; \ - *(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ - *(unsigned char*) &__tramp[5] = 0xe9; \ - *(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ - } - -#define FFI_INIT_TRAMPOLINE_RAW_THISCALL(TRAMP,FUN,CTX,SIZE) \ -{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ - unsigned int __fun = (unsigned int)(FUN); \ - unsigned int __ctx = (unsigned int)(CTX); \ - unsigned int __dis = __fun - (__ctx + 49); \ - unsigned short __size = (unsigned short)(SIZE); \ - *(unsigned int *) &__tramp[0] = 0x8324048b; /* mov (%esp), %eax */ \ - *(unsigned int *) &__tramp[4] = 0x4c890cec; /* sub $12, %esp */ \ - *(unsigned int *) &__tramp[8] = 0x04890424; /* mov %ecx, 4(%esp) */ \ - *(unsigned char*) &__tramp[12] = 0x24; /* mov %eax, (%esp) */ \ - *(unsigned char*) &__tramp[13] = 0xb8; \ - *(unsigned int *) &__tramp[14] = __size; /* mov __size, %eax */ \ - *(unsigned int *) &__tramp[18] = 0x08244c8d; /* lea 8(%esp), %ecx */ \ - *(unsigned int *) &__tramp[22] = 0x4802e8c1; /* shr $2, %eax ; dec %eax */ \ - *(unsigned short*) &__tramp[26] = 0x0b74; /* jz 1f */ \ - *(unsigned int *) &__tramp[28] = 0x8908518b; /* 2b: mov 8(%ecx), %edx */ \ - *(unsigned int *) &__tramp[32] = 0x04c18311; /* mov %edx, (%ecx) ; add $4, %ecx */ \ - *(unsigned char*) &__tramp[36] = 0x48; /* dec %eax */ \ - *(unsigned short*) &__tramp[37] = 0xf575; /* jnz 2b ; 1f: */ \ - *(unsigned char*) &__tramp[39] = 0xb8; \ - *(unsigned int*) &__tramp[40] = __ctx; /* movl __ctx, %eax */ \ - *(unsigned char *) &__tramp[44] = 0xe8; \ - *(unsigned int*) &__tramp[45] = __dis; /* call __fun */ \ - *(unsigned char*) &__tramp[49] = 0xc2; /* ret */ \ - *(unsigned short*) &__tramp[50] = (__size + 8); /* ret (__size + 8) */ \ - } - -#define FFI_INIT_TRAMPOLINE_WIN32(TRAMP,FUN,CTX) \ -{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ - unsigned int __fun = (unsigned int)(FUN); \ - unsigned int __ctx = (unsigned int)(CTX); \ - unsigned int __dis = __fun - (__ctx + 10); \ - *(unsigned char*) &__tramp[0] = 0x68; \ - *(unsigned int*) &__tramp[1] = __ctx; /* push __ctx */ \ - *(unsigned char*) &__tramp[5] = 0xe9; \ - *(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ - } - -/* the cif must already be prep'ed */ - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ -#ifdef X86_WIN64 -#define ISFLOAT(IDX) (cif->arg_types[IDX]->type == FFI_TYPE_FLOAT || cif->arg_types[IDX]->type == FFI_TYPE_DOUBLE) -#define FLAG(IDX) (cif->nargs>(IDX)&&ISFLOAT(IDX)?(1<<(IDX)):0) - if (cif->abi == FFI_WIN64) - { - int mask = FLAG(0)|FLAG(1)|FLAG(2)|FLAG(3); - FFI_INIT_TRAMPOLINE_WIN64 (&closure->tramp[0], - &ffi_closure_win64, - codeloc, mask); - /* make sure we can execute here */ - } -#else - if (cif->abi == FFI_SYSV) - { - FFI_INIT_TRAMPOLINE (&closure->tramp[0], - &ffi_closure_SYSV, - (void*)codeloc); - } - else if (cif->abi == FFI_REGISTER) - { - FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], - &ffi_closure_REGISTER, - (void*)codeloc); - } - else if (cif->abi == FFI_FASTCALL) - { - FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], - &ffi_closure_FASTCALL, - (void*)codeloc); - } - else if (cif->abi == FFI_THISCALL) - { - FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], - &ffi_closure_THISCALL, - (void*)codeloc); - } - else if (cif->abi == FFI_STDCALL || cif->abi == FFI_PASCAL) - { - FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], - &ffi_closure_STDCALL, - (void*)codeloc); - } -#ifdef X86_WIN32 - else if (cif->abi == FFI_MS_CDECL) - { - FFI_INIT_TRAMPOLINE (&closure->tramp[0], - &ffi_closure_SYSV, - (void*)codeloc); - } -#endif /* X86_WIN32 */ -#endif /* !X86_WIN64 */ - else - { - return FFI_BAD_ABI; - } - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - -/* ------- Native raw API support -------------------------------- */ - -#if !FFI_NO_RAW_API - -ffi_status -ffi_prep_raw_closure_loc (ffi_raw_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data, - void *codeloc) -{ - int i; - - if (cif->abi != FFI_SYSV -#ifdef X86_WIN32 - && cif->abi != FFI_THISCALL -#endif - ) - return FFI_BAD_ABI; - - /* we currently don't support certain kinds of arguments for raw - closures. This should be implemented by a separate assembly - language routine, since it would require argument processing, - something we don't do now for performance. */ - - for (i = cif->nargs-1; i >= 0; i--) - { - FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT); - FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE); - } - -#ifdef X86_WIN32 - if (cif->abi == FFI_SYSV) - { -#endif - FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, - codeloc); -#ifdef X86_WIN32 - } - else if (cif->abi == FFI_THISCALL) - { - FFI_INIT_TRAMPOLINE_RAW_THISCALL (&closure->tramp[0], &ffi_closure_raw_THISCALL, codeloc, cif->bytes); - } -#endif - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - -static unsigned int -ffi_prep_args_raw(char *stack, extended_cif *ecif) -{ - const ffi_cif *cif = ecif->cif; - unsigned int i, passed_regs = 0; - -#ifndef X86_WIN64 - const unsigned int abi = cif->abi; - const unsigned int max_regs = (abi == FFI_THISCALL) ? 1 - : (abi == FFI_FASTCALL) ? 2 - : (abi == FFI_REGISTER) ? 3 - : 0; - - if (cif->flags == FFI_TYPE_STRUCT) - ++passed_regs; - - for (i = 0; i < cif->nargs && passed_regs <= max_regs; i++) - { - size_t sz; - if (cif->arg_types[i]->type == FFI_TYPE_FLOAT - || cif->arg_types[i]->type == FFI_TYPE_STRUCT) - continue; - - sz = cif->arg_types[i]->size; - if (sz == 0 || sz > FFI_SIZEOF_ARG) - continue; - - ++passed_regs; - } -#endif - - memcpy (stack, ecif->avalue, cif->bytes); - return passed_regs; -} - -/* we borrow this routine from libffi (it must be changed, though, to - * actually call the function passed in the first argument. as of - * libffi-1.20, this is not the case.) - */ - -void -ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *fake_avalue) -{ - extended_cif ecif; - void **avalue = (void **)fake_avalue; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if (rvalue == NULL - && (cif->flags == FFI_TYPE_STRUCT - || cif->flags == FFI_TYPE_MS_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - - switch (cif->abi) - { -#ifndef X86_WIN32 - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; -#else - case FFI_SYSV: - case FFI_MS_CDECL: -#endif -#ifndef X86_WIN64 - case FFI_STDCALL: - case FFI_THISCALL: - case FFI_FASTCALL: - case FFI_PASCAL: - case FFI_REGISTER: - ffi_call_win32(ffi_prep_args_raw, &ecif, cif->abi, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; -#endif - default: - FFI_ASSERT(0); - break; - } -} - -#endif - -#endif /* !__x86_64__ || X86_WIN64 */ - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/x86/ffi64.c b/ruby/ext/fiddle/libffi-3.2.1/src/x86/ffi64.c deleted file mode 100644 index 5a5e04383..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/x86/ffi64.c +++ /dev/null @@ -1,676 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi64.c - Copyright (c) 2013 The Written Word, Inc. - Copyright (c) 2011 Anthony Green - Copyright (c) 2008, 2010 Red Hat, Inc. - Copyright (c) 2002, 2007 Bo Thorsen - - x86-64 Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -#include -#include - -#ifdef __x86_64__ - -#define MAX_GPR_REGS 6 -#define MAX_SSE_REGS 8 - -#if defined(__INTEL_COMPILER) -#include "xmmintrin.h" -#define UINT128 __m128 -#else -#if defined(__SUNPRO_C) -#include -#define UINT128 __m128i -#else -#define UINT128 __int128_t -#endif -#endif - -union big_int_union -{ - UINT32 i32; - UINT64 i64; - UINT128 i128; -}; - -struct register_args -{ - /* Registers for argument passing. */ - UINT64 gpr[MAX_GPR_REGS]; - union big_int_union sse[MAX_SSE_REGS]; -}; - -extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, - void *raddr, void (*fnaddr)(void), unsigned ssecount); - -/* All reference to register classes here is identical to the code in - gcc/config/i386/i386.c. Do *not* change one without the other. */ - -/* Register class used for passing given 64bit part of the argument. - These represent classes as documented by the PS ABI, with the - exception of SSESF, SSEDF classes, that are basically SSE class, - just gcc will use SF or DFmode move instead of DImode to avoid - reformatting penalties. - - Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves - whenever possible (upper half does contain padding). */ -enum x86_64_reg_class - { - X86_64_NO_CLASS, - X86_64_INTEGER_CLASS, - X86_64_INTEGERSI_CLASS, - X86_64_SSE_CLASS, - X86_64_SSESF_CLASS, - X86_64_SSEDF_CLASS, - X86_64_SSEUP_CLASS, - X86_64_X87_CLASS, - X86_64_X87UP_CLASS, - X86_64_COMPLEX_X87_CLASS, - X86_64_MEMORY_CLASS - }; - -#define MAX_CLASSES 4 - -#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) - -/* x86-64 register passing implementation. See x86-64 ABI for details. Goal - of this code is to classify each 8bytes of incoming argument by the register - class and assign registers accordingly. */ - -/* Return the union class of CLASS1 and CLASS2. - See the x86-64 PS ABI for details. */ - -static enum x86_64_reg_class -merge_classes (enum x86_64_reg_class class1, enum x86_64_reg_class class2) -{ - /* Rule #1: If both classes are equal, this is the resulting class. */ - if (class1 == class2) - return class1; - - /* Rule #2: If one of the classes is NO_CLASS, the resulting class is - the other class. */ - if (class1 == X86_64_NO_CLASS) - return class2; - if (class2 == X86_64_NO_CLASS) - return class1; - - /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ - if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) - return X86_64_MEMORY_CLASS; - - /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ - if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) - || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) - return X86_64_INTEGERSI_CLASS; - if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS - || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) - return X86_64_INTEGER_CLASS; - - /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, - MEMORY is used. */ - if (class1 == X86_64_X87_CLASS - || class1 == X86_64_X87UP_CLASS - || class1 == X86_64_COMPLEX_X87_CLASS - || class2 == X86_64_X87_CLASS - || class2 == X86_64_X87UP_CLASS - || class2 == X86_64_COMPLEX_X87_CLASS) - return X86_64_MEMORY_CLASS; - - /* Rule #6: Otherwise class SSE is used. */ - return X86_64_SSE_CLASS; -} - -/* Classify the argument of type TYPE and mode MODE. - CLASSES will be filled by the register class used to pass each word - of the operand. The number of words is returned. In case the parameter - should be passed in memory, 0 is returned. As a special case for zero - sized containers, classes[0] will be NO_CLASS and 1 is returned. - - See the x86-64 PS ABI for details. -*/ -static size_t -classify_argument (ffi_type *type, enum x86_64_reg_class classes[], - size_t byte_offset) -{ - switch (type->type) - { - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_POINTER: - { - size_t size = byte_offset + type->size; - - if (size <= 4) - { - classes[0] = X86_64_INTEGERSI_CLASS; - return 1; - } - else if (size <= 8) - { - classes[0] = X86_64_INTEGER_CLASS; - return 1; - } - else if (size <= 12) - { - classes[0] = X86_64_INTEGER_CLASS; - classes[1] = X86_64_INTEGERSI_CLASS; - return 2; - } - else if (size <= 16) - { - classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; - return 2; - } - else - FFI_ASSERT (0); - } - case FFI_TYPE_FLOAT: - if (!(byte_offset % 8)) - classes[0] = X86_64_SSESF_CLASS; - else - classes[0] = X86_64_SSE_CLASS; - return 1; - case FFI_TYPE_DOUBLE: - classes[0] = X86_64_SSEDF_CLASS; - return 1; -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - classes[0] = X86_64_X87_CLASS; - classes[1] = X86_64_X87UP_CLASS; - return 2; -#endif - case FFI_TYPE_STRUCT: - { - const size_t UNITS_PER_WORD = 8; - size_t words = (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; - ffi_type **ptr; - int i; - enum x86_64_reg_class subclasses[MAX_CLASSES]; - - /* If the struct is larger than 32 bytes, pass it on the stack. */ - if (type->size > 32) - return 0; - - for (i = 0; i < words; i++) - classes[i] = X86_64_NO_CLASS; - - /* Zero sized arrays or structures are NO_CLASS. We return 0 to - signalize memory class, so handle it as special case. */ - if (!words) - { - classes[0] = X86_64_NO_CLASS; - return 1; - } - - /* Merge the fields of structure. */ - for (ptr = type->elements; *ptr != NULL; ptr++) - { - size_t num; - - byte_offset = ALIGN (byte_offset, (*ptr)->alignment); - - num = classify_argument (*ptr, subclasses, byte_offset % 8); - if (num == 0) - return 0; - for (i = 0; i < num; i++) - { - size_t pos = byte_offset / 8; - classes[i + pos] = - merge_classes (subclasses[i], classes[i + pos]); - } - - byte_offset += (*ptr)->size; - } - - if (words > 2) - { - /* When size > 16 bytes, if the first one isn't - X86_64_SSE_CLASS or any other ones aren't - X86_64_SSEUP_CLASS, everything should be passed in - memory. */ - if (classes[0] != X86_64_SSE_CLASS) - return 0; - - for (i = 1; i < words; i++) - if (classes[i] != X86_64_SSEUP_CLASS) - return 0; - } - - /* Final merger cleanup. */ - for (i = 0; i < words; i++) - { - /* If one class is MEMORY, everything should be passed in - memory. */ - if (classes[i] == X86_64_MEMORY_CLASS) - return 0; - - /* The X86_64_SSEUP_CLASS should be always preceded by - X86_64_SSE_CLASS or X86_64_SSEUP_CLASS. */ - if (classes[i] == X86_64_SSEUP_CLASS - && classes[i - 1] != X86_64_SSE_CLASS - && classes[i - 1] != X86_64_SSEUP_CLASS) - { - /* The first one should never be X86_64_SSEUP_CLASS. */ - FFI_ASSERT (i != 0); - classes[i] = X86_64_SSE_CLASS; - } - - /* If X86_64_X87UP_CLASS isn't preceded by X86_64_X87_CLASS, - everything should be passed in memory. */ - if (classes[i] == X86_64_X87UP_CLASS - && (classes[i - 1] != X86_64_X87_CLASS)) - { - /* The first one should never be X86_64_X87UP_CLASS. */ - FFI_ASSERT (i != 0); - return 0; - } - } - return words; - } - - default: - FFI_ASSERT(0); - } - return 0; /* Never reached. */ -} - -/* Examine the argument and return set number of register required in each - class. Return zero iff parameter should be passed in memory, otherwise - the number of registers. */ - -static size_t -examine_argument (ffi_type *type, enum x86_64_reg_class classes[MAX_CLASSES], - _Bool in_return, int *pngpr, int *pnsse) -{ - size_t n; - int i, ngpr, nsse; - - n = classify_argument (type, classes, 0); - if (n == 0) - return 0; - - ngpr = nsse = 0; - for (i = 0; i < n; ++i) - switch (classes[i]) - { - case X86_64_INTEGER_CLASS: - case X86_64_INTEGERSI_CLASS: - ngpr++; - break; - case X86_64_SSE_CLASS: - case X86_64_SSESF_CLASS: - case X86_64_SSEDF_CLASS: - nsse++; - break; - case X86_64_NO_CLASS: - case X86_64_SSEUP_CLASS: - break; - case X86_64_X87_CLASS: - case X86_64_X87UP_CLASS: - case X86_64_COMPLEX_X87_CLASS: - return in_return != 0; - default: - abort (); - } - - *pngpr = ngpr; - *pnsse = nsse; - - return n; -} - -/* Perform machine dependent cif processing. */ - -ffi_status -ffi_prep_cif_machdep (ffi_cif *cif) -{ - int gprcount, ssecount, i, avn, ngpr, nsse, flags; - enum x86_64_reg_class classes[MAX_CLASSES]; - size_t bytes, n; - - gprcount = ssecount = 0; - - flags = cif->rtype->type; - if (flags != FFI_TYPE_VOID) - { - n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); - if (n == 0) - { - /* The return value is passed in memory. A pointer to that - memory is the first argument. Allocate a register for it. */ - gprcount++; - /* We don't have to do anything in asm for the return. */ - flags = FFI_TYPE_VOID; - } - else if (flags == FFI_TYPE_STRUCT) - { - /* Mark which registers the result appears in. */ - _Bool sse0 = SSE_CLASS_P (classes[0]); - _Bool sse1 = n == 2 && SSE_CLASS_P (classes[1]); - if (sse0 && !sse1) - flags |= 1 << 8; - else if (!sse0 && sse1) - flags |= 1 << 9; - else if (sse0 && sse1) - flags |= 1 << 10; - /* Mark the true size of the structure. */ - flags |= cif->rtype->size << 12; - } - } - - /* Go over all arguments and determine the way they should be passed. - If it's in a register and there is space for it, let that be so. If - not, add it's size to the stack byte count. */ - for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) - { - if (examine_argument (cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 - || gprcount + ngpr > MAX_GPR_REGS - || ssecount + nsse > MAX_SSE_REGS) - { - long align = cif->arg_types[i]->alignment; - - if (align < 8) - align = 8; - - bytes = ALIGN (bytes, align); - bytes += cif->arg_types[i]->size; - } - else - { - gprcount += ngpr; - ssecount += nsse; - } - } - if (ssecount) - flags |= 1 << 11; - cif->flags = flags; - cif->bytes = (unsigned)ALIGN (bytes, 8); - - return FFI_OK; -} - -void -ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - enum x86_64_reg_class classes[MAX_CLASSES]; - char *stack, *argp; - ffi_type **arg_types; - int gprcount, ssecount, ngpr, nsse, i, avn; - _Bool ret_in_memory; - struct register_args *reg_args; - - /* Can't call 32-bit mode from 64-bit mode. */ - FFI_ASSERT (cif->abi == FFI_UNIX64); - - /* If the return value is a struct and we don't have a return value - address then we need to make one. Note the setting of flags to - VOID above in ffi_prep_cif_machdep. */ - ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT - && (cif->flags & 0xff) == FFI_TYPE_VOID); - if (rvalue == NULL && ret_in_memory) - rvalue = alloca (cif->rtype->size); - - /* Allocate the space for the arguments, plus 4 words of temp space. */ - stack = alloca (sizeof (struct register_args) + cif->bytes + 4*8); - reg_args = (struct register_args *) stack; - argp = stack + sizeof (struct register_args); - - gprcount = ssecount = 0; - - /* If the return value is passed in memory, add the pointer as the - first integer argument. */ - if (ret_in_memory) - reg_args->gpr[gprcount++] = (unsigned long) rvalue; - - avn = cif->nargs; - arg_types = cif->arg_types; - - for (i = 0; i < avn; ++i) - { - size_t n, size = arg_types[i]->size; - - n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); - if (n == 0 - || gprcount + ngpr > MAX_GPR_REGS - || ssecount + nsse > MAX_SSE_REGS) - { - long align = arg_types[i]->alignment; - - /* Stack arguments are *always* at least 8 byte aligned. */ - if (align < 8) - align = 8; - - /* Pass this argument in memory. */ - argp = (void *) ALIGN (argp, align); - memcpy (argp, avalue[i], size); - argp += size; - } - else - { - /* The argument is passed entirely in registers. */ - char *a = (char *) avalue[i]; - int j; - - for (j = 0; j < n; j++, a += 8, size -= 8) - { - switch (classes[j]) - { - case X86_64_INTEGER_CLASS: - case X86_64_INTEGERSI_CLASS: - /* Sign-extend integer arguments passed in general - purpose registers, to cope with the fact that - LLVM incorrectly assumes that this will be done - (the x86-64 PS ABI does not specify this). */ - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - *(SINT64 *)®_args->gpr[gprcount] = (SINT64) *((SINT8 *) a); - break; - case FFI_TYPE_SINT16: - *(SINT64 *)®_args->gpr[gprcount] = (SINT64) *((SINT16 *) a); - break; - case FFI_TYPE_SINT32: - *(SINT64 *)®_args->gpr[gprcount] = (SINT64) *((SINT32 *) a); - break; - default: - reg_args->gpr[gprcount] = 0; - memcpy (®_args->gpr[gprcount], a, size < 8 ? size : 8); - } - gprcount++; - break; - case X86_64_SSE_CLASS: - case X86_64_SSEDF_CLASS: - reg_args->sse[ssecount++].i64 = *(UINT64 *) a; - break; - case X86_64_SSESF_CLASS: - reg_args->sse[ssecount++].i32 = *(UINT32 *) a; - break; - default: - abort(); - } - } - } - } - - ffi_call_unix64 (stack, cif->bytes + sizeof (struct register_args), - cif->flags, rvalue, fn, ssecount); -} - - -extern void ffi_closure_unix64(void); - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - volatile unsigned short *tramp; - - /* Sanity check on the cif ABI. */ - { - int abi = cif->abi; - if (UNLIKELY (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI))) - return FFI_BAD_ABI; - } - - tramp = (volatile unsigned short *) &closure->tramp[0]; - - tramp[0] = 0xbb49; /* mov , %r11 */ - *((unsigned long long * volatile) &tramp[1]) - = (unsigned long) ffi_closure_unix64; - tramp[5] = 0xba49; /* mov , %r10 */ - *((unsigned long long * volatile) &tramp[6]) - = (unsigned long) codeloc; - - /* Set the carry bit iff the function uses any sse registers. - This is clc or stc, together with the first byte of the jmp. */ - tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8; - - tramp[11] = 0xe3ff; /* jmp *%r11 */ - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - return FFI_OK; -} - -int -ffi_closure_unix64_inner(ffi_closure *closure, void *rvalue, - struct register_args *reg_args, char *argp) -{ - ffi_cif *cif; - void **avalue; - ffi_type **arg_types; - long i, avn; - int gprcount, ssecount, ngpr, nsse; - int ret; - - cif = closure->cif; - avalue = alloca(cif->nargs * sizeof(void *)); - gprcount = ssecount = 0; - - ret = cif->rtype->type; - if (ret != FFI_TYPE_VOID) - { - enum x86_64_reg_class classes[MAX_CLASSES]; - size_t n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); - if (n == 0) - { - /* The return value goes in memory. Arrange for the closure - return value to go directly back to the original caller. */ - rvalue = (void *) (unsigned long) reg_args->gpr[gprcount++]; - /* We don't have to do anything in asm for the return. */ - ret = FFI_TYPE_VOID; - } - else if (ret == FFI_TYPE_STRUCT && n == 2) - { - /* Mark which register the second word of the structure goes in. */ - _Bool sse0 = SSE_CLASS_P (classes[0]); - _Bool sse1 = SSE_CLASS_P (classes[1]); - if (!sse0 && sse1) - ret |= 1 << 8; - else if (sse0 && !sse1) - ret |= 1 << 9; - } - } - - avn = cif->nargs; - arg_types = cif->arg_types; - - for (i = 0; i < avn; ++i) - { - enum x86_64_reg_class classes[MAX_CLASSES]; - size_t n; - - n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); - if (n == 0 - || gprcount + ngpr > MAX_GPR_REGS - || ssecount + nsse > MAX_SSE_REGS) - { - long align = arg_types[i]->alignment; - - /* Stack arguments are *always* at least 8 byte aligned. */ - if (align < 8) - align = 8; - - /* Pass this argument in memory. */ - argp = (void *) ALIGN (argp, align); - avalue[i] = argp; - argp += arg_types[i]->size; - } - /* If the argument is in a single register, or two consecutive - integer registers, then we can use that address directly. */ - else if (n == 1 - || (n == 2 && !(SSE_CLASS_P (classes[0]) - || SSE_CLASS_P (classes[1])))) - { - /* The argument is in a single register. */ - if (SSE_CLASS_P (classes[0])) - { - avalue[i] = ®_args->sse[ssecount]; - ssecount += n; - } - else - { - avalue[i] = ®_args->gpr[gprcount]; - gprcount += n; - } - } - /* Otherwise, allocate space to make them consecutive. */ - else - { - char *a = alloca (16); - int j; - - avalue[i] = a; - for (j = 0; j < n; j++, a += 8) - { - if (SSE_CLASS_P (classes[j])) - memcpy (a, ®_args->sse[ssecount++], 8); - else - memcpy (a, ®_args->gpr[gprcount++], 8); - } - } - } - - /* Invoke the closure. */ - closure->fun (cif, rvalue, avalue, closure->user_data); - - /* Tell assembly how to perform return type promotions. */ - return ret; -} - -#endif /* __x86_64__ */ diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/x86/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/x86/ffitarget.h deleted file mode 100644 index ff0f71857..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/x86/ffitarget.h +++ /dev/null @@ -1,152 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2012, 2014 Anthony Green - Copyright (c) 1996-2003, 2010 Red Hat, Inc. - Copyright (C) 2008 Free Software Foundation, Inc. - - Target configuration macros for x86 and x86-64. - - 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. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -/* ---- System specific configurations ----------------------------------- */ - -/* For code common to all platforms on x86 and x86_64. */ -#define X86_ANY - -#if defined (X86_64) && defined (__i386__) -#undef X86_64 -#define X86 -#endif - -#ifdef X86_WIN64 -#define FFI_SIZEOF_ARG 8 -#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ -#endif - -#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -#ifndef _MSC_VER -#define FFI_TARGET_HAS_COMPLEX_TYPE -#endif - -/* ---- Generic type definitions ----------------------------------------- */ - -#ifndef LIBFFI_ASM -#ifdef X86_WIN64 -#ifdef _MSC_VER -typedef unsigned __int64 ffi_arg; -typedef __int64 ffi_sarg; -#else -typedef unsigned long long ffi_arg; -typedef long long ffi_sarg; -#endif -#else -#if defined __x86_64__ && defined __ILP32__ -#define FFI_SIZEOF_ARG 8 -#define FFI_SIZEOF_JAVA_RAW 4 -typedef unsigned long long ffi_arg; -typedef long long ffi_sarg; -#else -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; -#endif -#endif - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - - /* ---- Intel x86 Win32 ---------- */ -#ifdef X86_WIN32 - FFI_SYSV, - FFI_STDCALL, - FFI_THISCALL, - FFI_FASTCALL, - FFI_MS_CDECL, - FFI_PASCAL, - FFI_REGISTER, - FFI_LAST_ABI, -#ifdef _MSC_VER - FFI_DEFAULT_ABI = FFI_MS_CDECL -#else - FFI_DEFAULT_ABI = FFI_SYSV -#endif - -#elif defined(X86_WIN64) - FFI_WIN64, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_WIN64 - -#else - /* ---- Intel x86 and AMD x86-64 - */ - FFI_SYSV, - FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ - FFI_THISCALL, - FFI_FASTCALL, - FFI_STDCALL, - FFI_PASCAL, - FFI_REGISTER, - FFI_LAST_ABI, -#if defined(__i386__) || defined(__i386) - FFI_DEFAULT_ABI = FFI_SYSV -#else - FFI_DEFAULT_ABI = FFI_UNIX64 -#endif -#endif -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) -#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) -#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) -#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) - -#if defined (X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) -#define FFI_TRAMPOLINE_SIZE 24 -#define FFI_NATIVE_RAW_API 0 -#else -#ifdef X86_WIN32 -#define FFI_TRAMPOLINE_SIZE 52 -#else -#ifdef X86_WIN64 -#define FFI_TRAMPOLINE_SIZE 29 -#define FFI_NATIVE_RAW_API 0 -#define FFI_NO_RAW_API 1 -#else -#define FFI_TRAMPOLINE_SIZE 10 -#endif -#endif -#ifndef X86_WIN64 -#define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ -#endif -#endif - -#endif - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/x86/freebsd.S b/ruby/ext/fiddle/libffi-3.2.1/src/x86/freebsd.S deleted file mode 100644 index 97e0b4eb8..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/x86/freebsd.S +++ /dev/null @@ -1,463 +0,0 @@ -/* ----------------------------------------------------------------------- - freebsd.S - Copyright (c) 1996, 1998, 2001, 2002, 2003, 2005 Red Hat, Inc. - Copyright (c) 2008 Björn König - - X86 Foreign Function Interface for FreeBSD - - 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. ------------------------------------------------------------------------ */ - -#ifndef __x86_64__ - -#define LIBFFI_ASM -#include -#include - -.text - -.globl ffi_prep_args - - .align 4 -.globl ffi_call_SYSV - .type ffi_call_SYSV,@function - -ffi_call_SYSV: -.LFB1: - pushl %ebp -.LCFI0: - movl %esp,%ebp -.LCFI1: - /* Make room for all of the new args. */ - movl 16(%ebp),%ecx - subl %ecx,%esp - - /* Align the stack pointer to 16-bytes */ - andl $0xfffffff0, %esp - - movl %esp,%eax - - /* Place all of the ffi_prep_args in position */ - pushl 12(%ebp) - pushl %eax - call *8(%ebp) - - /* Return stack to previous state and call the function */ - addl $8,%esp - - call *28(%ebp) - - /* Load %ecx with the return type code */ - movl 20(%ebp),%ecx - - /* Protect %esi. We're going to pop it in the epilogue. */ - pushl %esi - - /* If the return value pointer is NULL, assume no return value. */ - cmpl $0,24(%ebp) - jne 0f - - /* Even if there is no space for the return value, we are - obliged to handle floating-point values. */ - cmpl $FFI_TYPE_FLOAT,%ecx - jne noretval - fstp %st(0) - - jmp epilogue - -0: - call 1f - -.Lstore_table: - .long noretval-.Lstore_table /* FFI_TYPE_VOID */ - .long retint-.Lstore_table /* FFI_TYPE_INT */ - .long retfloat-.Lstore_table /* FFI_TYPE_FLOAT */ - .long retdouble-.Lstore_table /* FFI_TYPE_DOUBLE */ - .long retlongdouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ - .long retuint8-.Lstore_table /* FFI_TYPE_UINT8 */ - .long retsint8-.Lstore_table /* FFI_TYPE_SINT8 */ - .long retuint16-.Lstore_table /* FFI_TYPE_UINT16 */ - .long retsint16-.Lstore_table /* FFI_TYPE_SINT16 */ - .long retint-.Lstore_table /* FFI_TYPE_UINT32 */ - .long retint-.Lstore_table /* FFI_TYPE_SINT32 */ - .long retint64-.Lstore_table /* FFI_TYPE_UINT64 */ - .long retint64-.Lstore_table /* FFI_TYPE_SINT64 */ - .long retstruct-.Lstore_table /* FFI_TYPE_STRUCT */ - .long retint-.Lstore_table /* FFI_TYPE_POINTER */ - .long retstruct1b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_1B */ - .long retstruct2b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_2B */ - -1: - pop %esi - add (%esi, %ecx, 4), %esi - jmp *%esi - - /* Sign/zero extend as appropriate. */ -retsint8: - movsbl %al, %eax - jmp retint - -retsint16: - movswl %ax, %eax - jmp retint - -retuint8: - movzbl %al, %eax - jmp retint - -retuint16: - movzwl %ax, %eax - jmp retint - -retfloat: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstps (%ecx) - jmp epilogue - -retdouble: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstpl (%ecx) - jmp epilogue - -retlongdouble: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstpt (%ecx) - jmp epilogue - -retint64: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - movl %edx,4(%ecx) - jmp epilogue - -retstruct1b: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movb %al,0(%ecx) - jmp epilogue - -retstruct2b: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movw %ax,0(%ecx) - jmp epilogue - -retint: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - -retstruct: - /* Nothing to do! */ - -noretval: -epilogue: - popl %esi - movl %ebp,%esp - popl %ebp - ret -.LFE1: -.ffi_call_SYSV_end: - .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV - - .align 4 -FFI_HIDDEN (ffi_closure_SYSV) -.globl ffi_closure_SYSV - .type ffi_closure_SYSV, @function - -ffi_closure_SYSV: -.LFB2: - pushl %ebp -.LCFI2: - movl %esp, %ebp -.LCFI3: - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 8(%ebp), %edx - movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ -#if defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE || !defined __PIC__ - call ffi_closure_SYSV_inner -#else - movl %ebx, 8(%esp) -.LCFI7: - call 1f -1: popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx - call ffi_closure_SYSV_inner@PLT - movl 8(%esp), %ebx -#endif - movl -12(%ebp), %ecx - cmpl $FFI_TYPE_INT, %eax - je .Lcls_retint - - /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, - FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ - cmpl $FFI_TYPE_UINT64, %eax - jge 0f - cmpl $FFI_TYPE_UINT8, %eax - jge .Lcls_retint - -0: cmpl $FFI_TYPE_FLOAT, %eax - je .Lcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lcls_retllong - cmpl $FFI_TYPE_SMALL_STRUCT_1B, %eax - je .Lcls_retstruct1b - cmpl $FFI_TYPE_SMALL_STRUCT_2B, %eax - je .Lcls_retstruct2b - cmpl $FFI_TYPE_STRUCT, %eax - je .Lcls_retstruct -.Lcls_epilogue: - movl %ebp, %esp - popl %ebp - ret -.Lcls_retint: - movl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retfloat: - flds (%ecx) - jmp .Lcls_epilogue -.Lcls_retdouble: - fldl (%ecx) - jmp .Lcls_epilogue -.Lcls_retldouble: - fldt (%ecx) - jmp .Lcls_epilogue -.Lcls_retllong: - movl (%ecx), %eax - movl 4(%ecx), %edx - jmp .Lcls_epilogue -.Lcls_retstruct1b: - movsbl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retstruct2b: - movswl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retstruct: - movl %ebp, %esp - popl %ebp - ret $4 -.LFE2: - .size ffi_closure_SYSV, .-ffi_closure_SYSV - -#if !FFI_NO_RAW_API - -#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) -#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) -#define CIF_FLAGS_OFFSET 20 - - .align 4 -FFI_HIDDEN (ffi_closure_raw_SYSV) -.globl ffi_closure_raw_SYSV - .type ffi_closure_raw_SYSV, @function - -ffi_closure_raw_SYSV: -.LFB3: - pushl %ebp -.LCFI4: - movl %esp, %ebp -.LCFI5: - pushl %esi -.LCFI6: - subl $36, %esp - movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ - movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ - movl %edx, 12(%esp) /* user_data */ - leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ - movl %edx, 8(%esp) /* raw_args */ - leal -24(%ebp), %edx - movl %edx, 4(%esp) /* &res */ - movl %esi, (%esp) /* cif */ - call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ - movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ - cmpl $FFI_TYPE_INT, %eax - je .Lrcls_retint - - /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, - FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ - cmpl $FFI_TYPE_UINT64, %eax - jge 0f - cmpl $FFI_TYPE_UINT8, %eax - jge .Lrcls_retint -0: - cmpl $FFI_TYPE_FLOAT, %eax - je .Lrcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lrcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lrcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lrcls_retllong -.Lrcls_epilogue: - addl $36, %esp - popl %esi - popl %ebp - ret -.Lrcls_retint: - movl -24(%ebp), %eax - jmp .Lrcls_epilogue -.Lrcls_retfloat: - flds -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retdouble: - fldl -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retldouble: - fldt -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retllong: - movl -24(%ebp), %eax - movl -20(%ebp), %edx - jmp .Lrcls_epilogue -.LFE3: - .size ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV -#endif - - .section .eh_frame,EH_FRAME_FLAGS,@progbits -.Lframe1: - .long .LECIE1-.LSCIE1 /* Length of Common Information Entry */ -.LSCIE1: - .long 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ -#ifdef __PIC__ - .ascii "zR\0" /* CIE Augmentation */ -#else - .ascii "\0" /* CIE Augmentation */ -#endif - .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */ - .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */ - .byte 0x8 /* CIE RA Column */ -#ifdef __PIC__ - .byte 0x1 /* .uleb128 0x1; Augmentation size */ - .byte 0x1b /* FDE Encoding (pcrel sdata4) */ -#endif - .byte 0xc /* DW_CFA_def_cfa */ - .byte 0x4 /* .uleb128 0x4 */ - .byte 0x4 /* .uleb128 0x4 */ - .byte 0x88 /* DW_CFA_offset, column 0x8 */ - .byte 0x1 /* .uleb128 0x1 */ - .align 4 -.LECIE1: -.LSFDE1: - .long .LEFDE1-.LASFDE1 /* FDE Length */ -.LASFDE1: - .long .LASFDE1-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ - .long .LFB1-. /* FDE initial location */ -#else - .long .LFB1 /* FDE initial location */ -#endif - .long .LFE1-.LFB1 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI0-.LFB1 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x2 /* .uleb128 0x2 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI1-.LCFI0 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0x5 /* .uleb128 0x5 */ - .align 4 -.LEFDE1: -.LSFDE2: - .long .LEFDE2-.LASFDE2 /* FDE Length */ -.LASFDE2: - .long .LASFDE2-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ - .long .LFB2-. /* FDE initial location */ -#else - .long .LFB2 -#endif - .long .LFE2-.LFB2 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI2-.LFB2 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x2 /* .uleb128 0x2 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI3-.LCFI2 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0x5 /* .uleb128 0x5 */ -#if !defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE && defined __PIC__ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI7-.LCFI3 - .byte 0x83 /* DW_CFA_offset, column 0x3 */ - .byte 0xa /* .uleb128 0xa */ -#endif - .align 4 -.LEFDE2: - -#if !FFI_NO_RAW_API - -.LSFDE3: - .long .LEFDE3-.LASFDE3 /* FDE Length */ -.LASFDE3: - .long .LASFDE3-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ - .long .LFB3-. /* FDE initial location */ -#else - .long .LFB3 -#endif - .long .LFE3-.LFB3 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI4-.LFB3 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x2 /* .uleb128 0x2 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI5-.LCFI4 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0x5 /* .uleb128 0x5 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI6-.LCFI5 - .byte 0x86 /* DW_CFA_offset, column 0x6 */ - .byte 0x3 /* .uleb128 0x3 */ - .align 4 -.LEFDE3: - -#endif - -#endif /* ifndef __x86_64__ */ - - .section .note.GNU-stack,"",%progbits diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/x86/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/x86/sysv.S deleted file mode 100644 index 3bd5477e4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/x86/sysv.S +++ /dev/null @@ -1,483 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2013 The Written Word, Inc. - - Copyright (c) 1996,1998,2001-2003,2005,2008,2010 Red Hat, Inc. - - X86 Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#ifndef __x86_64__ - -#define LIBFFI_ASM -#include -#include - -.text - -.globl ffi_prep_args - - .align 4 -.globl ffi_call_SYSV - .type ffi_call_SYSV,@function - -ffi_call_SYSV: -.LFB1: - pushl %ebp -.LCFI0: - movl %esp,%ebp -.LCFI1: - /* Make room for all of the new args. */ - movl 16(%ebp),%ecx - subl %ecx,%esp - - /* Align the stack pointer to 16-bytes */ - andl $0xfffffff0, %esp - - movl %esp,%eax - - /* Place all of the ffi_prep_args in position */ - pushl 12(%ebp) - pushl %eax - call *8(%ebp) - - /* Return stack to previous state and call the function */ - addl $8,%esp - - call *28(%ebp) - - /* Load %ecx with the return type code */ - movl 20(%ebp),%ecx - - /* Protect %esi. We're going to pop it in the epilogue. */ - pushl %esi - - /* If the return value pointer is NULL, assume no return value. */ - cmpl $0,24(%ebp) - jne 0f - - /* Even if there is no space for the return value, we are - obliged to handle floating-point values. */ - cmpl $FFI_TYPE_FLOAT,%ecx - jne noretval - fstp %st(0) - - jmp epilogue - -0: - call 1f - -.Lstore_table: - .long noretval-.Lstore_table /* FFI_TYPE_VOID */ - .long retint-.Lstore_table /* FFI_TYPE_INT */ - .long retfloat-.Lstore_table /* FFI_TYPE_FLOAT */ - .long retdouble-.Lstore_table /* FFI_TYPE_DOUBLE */ - .long retlongdouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ - .long retuint8-.Lstore_table /* FFI_TYPE_UINT8 */ - .long retsint8-.Lstore_table /* FFI_TYPE_SINT8 */ - .long retuint16-.Lstore_table /* FFI_TYPE_UINT16 */ - .long retsint16-.Lstore_table /* FFI_TYPE_SINT16 */ - .long retint-.Lstore_table /* FFI_TYPE_UINT32 */ - .long retint-.Lstore_table /* FFI_TYPE_SINT32 */ - .long retint64-.Lstore_table /* FFI_TYPE_UINT64 */ - .long retint64-.Lstore_table /* FFI_TYPE_SINT64 */ - .long retstruct-.Lstore_table /* FFI_TYPE_STRUCT */ - .long retint-.Lstore_table /* FFI_TYPE_POINTER */ - -1: - pop %esi - add (%esi, %ecx, 4), %esi - jmp *%esi - - /* Sign/zero extend as appropriate. */ -retsint8: - movsbl %al, %eax - jmp retint - -retsint16: - movswl %ax, %eax - jmp retint - -retuint8: - movzbl %al, %eax - jmp retint - -retuint16: - movzwl %ax, %eax - jmp retint - -retfloat: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstps (%ecx) - jmp epilogue - -retdouble: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstpl (%ecx) - jmp epilogue - -retlongdouble: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstpt (%ecx) - jmp epilogue - -retint64: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - movl %edx,4(%ecx) - jmp epilogue - -retint: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - -retstruct: - /* Nothing to do! */ - -noretval: -epilogue: - popl %esi - movl %ebp,%esp - popl %ebp - ret -.LFE1: -.ffi_call_SYSV_end: - .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV - - .align 4 -FFI_HIDDEN (ffi_closure_SYSV) -.globl ffi_closure_SYSV - .type ffi_closure_SYSV, @function - -ffi_closure_SYSV: -.LFB2: - pushl %ebp -.LCFI2: - movl %esp, %ebp -.LCFI3: - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 8(%ebp), %edx -#ifdef __SUNPRO_C - /* The SUNPRO compiler doesn't support GCC's regparm function - attribute, so we have to pass all three arguments to - ffi_closure_SYSV_inner on the stack. */ - movl %edx, 8(%esp) /* args = __builtin_dwarf_cfa () */ - leal -12(%ebp), %edx - movl %edx, 4(%esp) /* &resp */ - movl %eax, (%esp) /* closure */ -#else - movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ -#endif -#if defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE || !defined __PIC__ - call ffi_closure_SYSV_inner -#else - movl %ebx, 8(%esp) -.LCFI7: - call 1f -1: popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx - call ffi_closure_SYSV_inner@PLT - movl 8(%esp), %ebx -#endif - movl -12(%ebp), %ecx - cmpl $FFI_TYPE_INT, %eax - je .Lcls_retint - - /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, - FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ - cmpl $FFI_TYPE_UINT64, %eax - jge 0f - cmpl $FFI_TYPE_UINT8, %eax - jge .Lcls_retint - -0: cmpl $FFI_TYPE_FLOAT, %eax - je .Lcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lcls_retllong - cmpl $FFI_TYPE_STRUCT, %eax - je .Lcls_retstruct -.Lcls_epilogue: - movl %ebp, %esp - popl %ebp - ret -.Lcls_retint: - movl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retfloat: - flds (%ecx) - jmp .Lcls_epilogue -.Lcls_retdouble: - fldl (%ecx) - jmp .Lcls_epilogue -.Lcls_retldouble: - fldt (%ecx) - jmp .Lcls_epilogue -.Lcls_retllong: - movl (%ecx), %eax - movl 4(%ecx), %edx - jmp .Lcls_epilogue -.Lcls_retstruct: - movl %ebp, %esp - popl %ebp - ret $4 -.LFE2: - .size ffi_closure_SYSV, .-ffi_closure_SYSV - -#if !FFI_NO_RAW_API - -/* Precalculate for e.g. the Solaris 10/x86 assembler. */ -#if FFI_TRAMPOLINE_SIZE == 10 -#define RAW_CLOSURE_CIF_OFFSET 12 -#define RAW_CLOSURE_FUN_OFFSET 16 -#define RAW_CLOSURE_USER_DATA_OFFSET 20 -#elif FFI_TRAMPOLINE_SIZE == 24 -#define RAW_CLOSURE_CIF_OFFSET 24 -#define RAW_CLOSURE_FUN_OFFSET 28 -#define RAW_CLOSURE_USER_DATA_OFFSET 32 -#else -#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) -#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) -#endif -#define CIF_FLAGS_OFFSET 20 - - .align 4 -FFI_HIDDEN (ffi_closure_raw_SYSV) -.globl ffi_closure_raw_SYSV - .type ffi_closure_raw_SYSV, @function - -ffi_closure_raw_SYSV: -.LFB3: - pushl %ebp -.LCFI4: - movl %esp, %ebp -.LCFI5: - pushl %esi -.LCFI6: - subl $36, %esp - movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ - movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ - movl %edx, 12(%esp) /* user_data */ - leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ - movl %edx, 8(%esp) /* raw_args */ - leal -24(%ebp), %edx - movl %edx, 4(%esp) /* &res */ - movl %esi, (%esp) /* cif */ - call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ - movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ - cmpl $FFI_TYPE_INT, %eax - je .Lrcls_retint - - /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, - FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ - cmpl $FFI_TYPE_UINT64, %eax - jge 0f - cmpl $FFI_TYPE_UINT8, %eax - jge .Lrcls_retint -0: - cmpl $FFI_TYPE_FLOAT, %eax - je .Lrcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lrcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lrcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lrcls_retllong -.Lrcls_epilogue: - addl $36, %esp - popl %esi - popl %ebp - ret -.Lrcls_retint: - movl -24(%ebp), %eax - jmp .Lrcls_epilogue -.Lrcls_retfloat: - flds -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retdouble: - fldl -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retldouble: - fldt -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retllong: - movl -24(%ebp), %eax - movl -20(%ebp), %edx - jmp .Lrcls_epilogue -.LFE3: - .size ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV -#endif - -#if defined __GNUC__ -/* Only emit dwarf unwind info when building with GNU toolchain. */ - -#if defined __PIC__ -# if defined __sun__ && defined __svr4__ -/* 32-bit Solaris 2/x86 uses datarel encoding for PIC. GNU ld before 2.22 - doesn't correctly sort .eh_frame_hdr with mixed encodings, so match this. */ -# define FDE_ENCODING 0x30 /* datarel */ -# define FDE_ENCODE(X) X@GOTOFF -# else -# define FDE_ENCODING 0x1b /* pcrel sdata4 */ -# if defined HAVE_AS_X86_PCREL -# define FDE_ENCODE(X) X-. -# else -# define FDE_ENCODE(X) X@rel -# endif -# endif -#else -# define FDE_ENCODING 0 /* absolute */ -# define FDE_ENCODE(X) X -#endif - - .section .eh_frame,EH_FRAME_FLAGS,@progbits -.Lframe1: - .long .LECIE1-.LSCIE1 /* Length of Common Information Entry */ -.LSCIE1: - .long 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ -#ifdef HAVE_AS_ASCII_PSEUDO_OP -#ifdef __PIC__ - .ascii "zR\0" /* CIE Augmentation */ -#else - .ascii "\0" /* CIE Augmentation */ -#endif -#elif defined HAVE_AS_STRING_PSEUDO_OP -#ifdef __PIC__ - .string "zR" /* CIE Augmentation */ -#else - .string "" /* CIE Augmentation */ -#endif -#else -#error missing .ascii/.string -#endif - .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */ - .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */ - .byte 0x8 /* CIE RA Column */ -#ifdef __PIC__ - .byte 0x1 /* .uleb128 0x1; Augmentation size */ - .byte FDE_ENCODING -#endif - .byte 0xc /* DW_CFA_def_cfa */ - .byte 0x4 /* .uleb128 0x4 */ - .byte 0x4 /* .uleb128 0x4 */ - .byte 0x88 /* DW_CFA_offset, column 0x8 */ - .byte 0x1 /* .uleb128 0x1 */ - .align 4 -.LECIE1: -.LSFDE1: - .long .LEFDE1-.LASFDE1 /* FDE Length */ -.LASFDE1: - .long .LASFDE1-.Lframe1 /* FDE CIE offset */ - .long FDE_ENCODE(.LFB1) /* FDE initial location */ - .long .LFE1-.LFB1 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI0-.LFB1 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x2 /* .uleb128 0x2 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI1-.LCFI0 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0x5 /* .uleb128 0x5 */ - .align 4 -.LEFDE1: -.LSFDE2: - .long .LEFDE2-.LASFDE2 /* FDE Length */ -.LASFDE2: - .long .LASFDE2-.Lframe1 /* FDE CIE offset */ - .long FDE_ENCODE(.LFB2) /* FDE initial location */ - .long .LFE2-.LFB2 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI2-.LFB2 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x2 /* .uleb128 0x2 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI3-.LCFI2 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0x5 /* .uleb128 0x5 */ -#if !defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE && defined __PIC__ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI7-.LCFI3 - .byte 0x83 /* DW_CFA_offset, column 0x3 */ - .byte 0xa /* .uleb128 0xa */ -#endif - .align 4 -.LEFDE2: - -#if !FFI_NO_RAW_API - -.LSFDE3: - .long .LEFDE3-.LASFDE3 /* FDE Length */ -.LASFDE3: - .long .LASFDE3-.Lframe1 /* FDE CIE offset */ - .long FDE_ENCODE(.LFB3) /* FDE initial location */ - .long .LFE3-.LFB3 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI4-.LFB3 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x2 /* .uleb128 0x2 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI5-.LCFI4 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0x5 /* .uleb128 0x5 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI6-.LCFI5 - .byte 0x86 /* DW_CFA_offset, column 0x6 */ - .byte 0x3 /* .uleb128 0x3 */ - .align 4 -.LEFDE3: - -#endif -#endif - -#endif /* ifndef __x86_64__ */ - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/x86/unix64.S b/ruby/ext/fiddle/libffi-3.2.1/src/x86/unix64.S deleted file mode 100644 index dcd6bc71e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/x86/unix64.S +++ /dev/null @@ -1,432 +0,0 @@ -/* ----------------------------------------------------------------------- - unix64.S - Copyright (c) 2013 The Written Word, Inc. - - Copyright (c) 2008 Red Hat, Inc - - Copyright (c) 2002 Bo Thorsen - - x86-64 Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#ifdef __x86_64__ -#define LIBFFI_ASM -#include -#include - -.text - -/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, - void *raddr, void (*fnaddr)(void)); - - Bit o trickiness here -- ARGS+BYTES is the base of the stack frame - for this function. This has been allocated by ffi_call. We also - deallocate some of the stack that has been alloca'd. */ - - .align 2 - .globl ffi_call_unix64 - .type ffi_call_unix64,@function - -ffi_call_unix64: -.LUW0: - movq (%rsp), %r10 /* Load return address. */ - leaq (%rdi, %rsi), %rax /* Find local stack base. */ - movq %rdx, (%rax) /* Save flags. */ - movq %rcx, 8(%rax) /* Save raddr. */ - movq %rbp, 16(%rax) /* Save old frame pointer. */ - movq %r10, 24(%rax) /* Relocate return address. */ - movq %rax, %rbp /* Finalize local stack frame. */ -.LUW1: - movq %rdi, %r10 /* Save a copy of the register area. */ - movq %r8, %r11 /* Save a copy of the target fn. */ - movl %r9d, %eax /* Set number of SSE registers. */ - - /* Load up all argument registers. */ - movq (%r10), %rdi - movq 8(%r10), %rsi - movq 16(%r10), %rdx - movq 24(%r10), %rcx - movq 32(%r10), %r8 - movq 40(%r10), %r9 - testl %eax, %eax - jnz .Lload_sse -.Lret_from_load_sse: - - /* Deallocate the reg arg area. */ - leaq 176(%r10), %rsp - - /* Call the user function. */ - call *%r11 - - /* Deallocate stack arg area; local stack frame in redzone. */ - leaq 24(%rbp), %rsp - - movq 0(%rbp), %rcx /* Reload flags. */ - movq 8(%rbp), %rdi /* Reload raddr. */ - movq 16(%rbp), %rbp /* Reload old frame pointer. */ -.LUW2: - - /* The first byte of the flags contains the FFI_TYPE. */ - movzbl %cl, %r10d - leaq .Lstore_table(%rip), %r11 - movslq (%r11, %r10, 4), %r10 - addq %r11, %r10 - jmp *%r10 - -.Lstore_table: - .long .Lst_void-.Lstore_table /* FFI_TYPE_VOID */ - .long .Lst_sint32-.Lstore_table /* FFI_TYPE_INT */ - .long .Lst_float-.Lstore_table /* FFI_TYPE_FLOAT */ - .long .Lst_double-.Lstore_table /* FFI_TYPE_DOUBLE */ - .long .Lst_ldouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ - .long .Lst_uint8-.Lstore_table /* FFI_TYPE_UINT8 */ - .long .Lst_sint8-.Lstore_table /* FFI_TYPE_SINT8 */ - .long .Lst_uint16-.Lstore_table /* FFI_TYPE_UINT16 */ - .long .Lst_sint16-.Lstore_table /* FFI_TYPE_SINT16 */ - .long .Lst_uint32-.Lstore_table /* FFI_TYPE_UINT32 */ - .long .Lst_sint32-.Lstore_table /* FFI_TYPE_SINT32 */ - .long .Lst_int64-.Lstore_table /* FFI_TYPE_UINT64 */ - .long .Lst_int64-.Lstore_table /* FFI_TYPE_SINT64 */ - .long .Lst_struct-.Lstore_table /* FFI_TYPE_STRUCT */ - .long .Lst_int64-.Lstore_table /* FFI_TYPE_POINTER */ - - .align 2 -.Lst_void: - ret - .align 2 - -.Lst_uint8: - movzbq %al, %rax - movq %rax, (%rdi) - ret - .align 2 -.Lst_sint8: - movsbq %al, %rax - movq %rax, (%rdi) - ret - .align 2 -.Lst_uint16: - movzwq %ax, %rax - movq %rax, (%rdi) - .align 2 -.Lst_sint16: - movswq %ax, %rax - movq %rax, (%rdi) - ret - .align 2 -.Lst_uint32: - movl %eax, %eax - movq %rax, (%rdi) - .align 2 -.Lst_sint32: - cltq - movq %rax, (%rdi) - ret - .align 2 -.Lst_int64: - movq %rax, (%rdi) - ret - - .align 2 -.Lst_float: - movss %xmm0, (%rdi) - ret - .align 2 -.Lst_double: - movsd %xmm0, (%rdi) - ret -.Lst_ldouble: - fstpt (%rdi) - ret - - .align 2 -.Lst_struct: - leaq -20(%rsp), %rsi /* Scratch area in redzone. */ - - /* We have to locate the values now, and since we don't want to - write too much data into the user's return value, we spill the - value to a 16 byte scratch area first. Bits 8, 9, and 10 - control where the values are located. Only one of the three - bits will be set; see ffi_prep_cif_machdep for the pattern. */ - movd %xmm0, %r10 - movd %xmm1, %r11 - testl $0x100, %ecx - cmovnz %rax, %rdx - cmovnz %r10, %rax - testl $0x200, %ecx - cmovnz %r10, %rdx - testl $0x400, %ecx - cmovnz %r10, %rax - cmovnz %r11, %rdx - movq %rax, (%rsi) - movq %rdx, 8(%rsi) - - /* Bits 12-31 contain the true size of the structure. Copy from - the scratch area to the true destination. */ - shrl $12, %ecx - rep movsb - ret - - /* Many times we can avoid loading any SSE registers at all. - It's not worth an indirect jump to load the exact set of - SSE registers needed; zero or all is a good compromise. */ - .align 2 -.LUW3: -.Lload_sse: - movdqa 48(%r10), %xmm0 - movdqa 64(%r10), %xmm1 - movdqa 80(%r10), %xmm2 - movdqa 96(%r10), %xmm3 - movdqa 112(%r10), %xmm4 - movdqa 128(%r10), %xmm5 - movdqa 144(%r10), %xmm6 - movdqa 160(%r10), %xmm7 - jmp .Lret_from_load_sse - -.LUW4: - .size ffi_call_unix64,.-ffi_call_unix64 - - .align 2 - .globl ffi_closure_unix64 - .type ffi_closure_unix64,@function - -ffi_closure_unix64: -.LUW5: - /* The carry flag is set by the trampoline iff SSE registers - are used. Don't clobber it before the branch instruction. */ - leaq -200(%rsp), %rsp -.LUW6: - movq %rdi, (%rsp) - movq %rsi, 8(%rsp) - movq %rdx, 16(%rsp) - movq %rcx, 24(%rsp) - movq %r8, 32(%rsp) - movq %r9, 40(%rsp) - jc .Lsave_sse -.Lret_from_save_sse: - - movq %r10, %rdi - leaq 176(%rsp), %rsi - movq %rsp, %rdx - leaq 208(%rsp), %rcx - call ffi_closure_unix64_inner@PLT - - /* Deallocate stack frame early; return value is now in redzone. */ - addq $200, %rsp -.LUW7: - - /* The first byte of the return value contains the FFI_TYPE. */ - movzbl %al, %r10d - leaq .Lload_table(%rip), %r11 - movslq (%r11, %r10, 4), %r10 - addq %r11, %r10 - jmp *%r10 - -.Lload_table: - .long .Lld_void-.Lload_table /* FFI_TYPE_VOID */ - .long .Lld_int32-.Lload_table /* FFI_TYPE_INT */ - .long .Lld_float-.Lload_table /* FFI_TYPE_FLOAT */ - .long .Lld_double-.Lload_table /* FFI_TYPE_DOUBLE */ - .long .Lld_ldouble-.Lload_table /* FFI_TYPE_LONGDOUBLE */ - .long .Lld_int8-.Lload_table /* FFI_TYPE_UINT8 */ - .long .Lld_int8-.Lload_table /* FFI_TYPE_SINT8 */ - .long .Lld_int16-.Lload_table /* FFI_TYPE_UINT16 */ - .long .Lld_int16-.Lload_table /* FFI_TYPE_SINT16 */ - .long .Lld_int32-.Lload_table /* FFI_TYPE_UINT32 */ - .long .Lld_int32-.Lload_table /* FFI_TYPE_SINT32 */ - .long .Lld_int64-.Lload_table /* FFI_TYPE_UINT64 */ - .long .Lld_int64-.Lload_table /* FFI_TYPE_SINT64 */ - .long .Lld_struct-.Lload_table /* FFI_TYPE_STRUCT */ - .long .Lld_int64-.Lload_table /* FFI_TYPE_POINTER */ - - .align 2 -.Lld_void: - ret - - .align 2 -.Lld_int8: - movzbl -24(%rsp), %eax - ret - .align 2 -.Lld_int16: - movzwl -24(%rsp), %eax - ret - .align 2 -.Lld_int32: - movl -24(%rsp), %eax - ret - .align 2 -.Lld_int64: - movq -24(%rsp), %rax - ret - - .align 2 -.Lld_float: - movss -24(%rsp), %xmm0 - ret - .align 2 -.Lld_double: - movsd -24(%rsp), %xmm0 - ret - .align 2 -.Lld_ldouble: - fldt -24(%rsp) - ret - - .align 2 -.Lld_struct: - /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, - %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading - both rdx and xmm1 with the second word. For the remaining, - bit 8 set means xmm0 gets the second word, and bit 9 means - that rax gets the second word. */ - movq -24(%rsp), %rcx - movq -16(%rsp), %rdx - movq -16(%rsp), %xmm1 - testl $0x100, %eax - cmovnz %rdx, %rcx - movd %rcx, %xmm0 - testl $0x200, %eax - movq -24(%rsp), %rax - cmovnz %rdx, %rax - ret - - /* See the comment above .Lload_sse; the same logic applies here. */ - .align 2 -.LUW8: -.Lsave_sse: - movdqa %xmm0, 48(%rsp) - movdqa %xmm1, 64(%rsp) - movdqa %xmm2, 80(%rsp) - movdqa %xmm3, 96(%rsp) - movdqa %xmm4, 112(%rsp) - movdqa %xmm5, 128(%rsp) - movdqa %xmm6, 144(%rsp) - movdqa %xmm7, 160(%rsp) - jmp .Lret_from_save_sse - -.LUW9: - .size ffi_closure_unix64,.-ffi_closure_unix64 - -#ifdef __GNUC__ -/* Only emit DWARF unwind info when building with the GNU toolchain. */ - -#ifdef HAVE_AS_X86_64_UNWIND_SECTION_TYPE - .section .eh_frame,"a",@unwind -#else - .section .eh_frame,"a",@progbits -#endif -.Lframe1: - .long .LECIE1-.LSCIE1 /* CIE Length */ -.LSCIE1: - .long 0 /* CIE Identifier Tag */ - .byte 1 /* CIE Version */ - .ascii "zR\0" /* CIE Augmentation */ - .uleb128 1 /* CIE Code Alignment Factor */ - .sleb128 -8 /* CIE Data Alignment Factor */ - .byte 0x10 /* CIE RA Column */ - .uleb128 1 /* Augmentation size */ - .byte 0x1b /* FDE Encoding (pcrel sdata4) */ - .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ - .uleb128 7 - .uleb128 8 - .byte 0x80+16 /* DW_CFA_offset, %rip offset 1*-8 */ - .uleb128 1 - .align 8 -.LECIE1: -.LSFDE1: - .long .LEFDE1-.LASFDE1 /* FDE Length */ -.LASFDE1: - .long .LASFDE1-.Lframe1 /* FDE CIE offset */ -#if HAVE_AS_X86_PCREL - .long .LUW0-. /* FDE initial location */ -#else - .long .LUW0@rel -#endif - .long .LUW4-.LUW0 /* FDE address range */ - .uleb128 0x0 /* Augmentation size */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LUW1-.LUW0 - - /* New stack frame based off rbp. This is a itty bit of unwind - trickery in that the CFA *has* changed. There is no easy way - to describe it correctly on entry to the function. Fortunately, - it doesn't matter too much since at all points we can correctly - unwind back to ffi_call. Note that the location to which we - moved the return address is (the new) CFA-8, so from the - perspective of the unwind info, it hasn't moved. */ - .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ - .uleb128 6 - .uleb128 32 - .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ - .uleb128 2 - .byte 0xa /* DW_CFA_remember_state */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LUW2-.LUW1 - .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ - .uleb128 7 - .uleb128 8 - .byte 0xc0+6 /* DW_CFA_restore, %rbp */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LUW3-.LUW2 - .byte 0xb /* DW_CFA_restore_state */ - - .align 8 -.LEFDE1: -.LSFDE3: - .long .LEFDE3-.LASFDE3 /* FDE Length */ -.LASFDE3: - .long .LASFDE3-.Lframe1 /* FDE CIE offset */ -#if HAVE_AS_X86_PCREL - .long .LUW5-. /* FDE initial location */ -#else - .long .LUW5@rel -#endif - .long .LUW9-.LUW5 /* FDE address range */ - .uleb128 0x0 /* Augmentation size */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LUW6-.LUW5 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .uleb128 208 - .byte 0xa /* DW_CFA_remember_state */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LUW7-.LUW6 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .uleb128 8 - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LUW8-.LUW7 - .byte 0xb /* DW_CFA_restore_state */ - - .align 8 -.LEFDE3: - -#endif /* __GNUC__ */ - -#endif /* __x86_64__ */ - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/x86/win32.S b/ruby/ext/fiddle/libffi-3.2.1/src/x86/win32.S deleted file mode 100644 index 3680bf538..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/x86/win32.S +++ /dev/null @@ -1,1351 +0,0 @@ -/* ----------------------------------------------------------------------- - win32.S - Copyright (c) 2014 Anthony Green - Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc. - Copyright (c) 2001 John Beniton - Copyright (c) 2002 Ranjit Mathew - Copyright (c) 2009 Daniel Witte - - - X86 Foreign Function Interface - - 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. - ----------------------------------------------------------------------- - */ - -#define LIBFFI_ASM -#include -#include - -#define CIF_BYTES_OFFSET 16 -#define CIF_FLAGS_OFFSET 20 - -#ifdef _MSC_VER - -#define CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) AND NOT 3) - -.386 -.MODEL FLAT, C - -EXTRN ffi_closure_SYSV_inner:NEAR -EXTRN ffi_closure_WIN32_inner:NEAR - -_TEXT SEGMENT - -ffi_call_win32 PROC NEAR, - ffi_prep_args : NEAR PTR DWORD, - ecif : NEAR PTR DWORD, - cif_abi : DWORD, - cif_bytes : DWORD, - cif_flags : DWORD, - rvalue : NEAR PTR DWORD, - fn : NEAR PTR DWORD - - ;; Make room for all of the new args. - mov ecx, cif_bytes - sub esp, ecx - - mov eax, esp - - ;; Call ffi_prep_args - push ecif - push eax - call ffi_prep_args - add esp, 8 - - ;; Prepare registers - ;; EAX stores the number of register arguments - cmp eax, 0 - je fun - cmp eax, 3 - jl prepr_two_cmp - - mov ecx, esp - add esp, 12 - mov eax, DWORD PTR [ecx+8] - jmp prepr_two -prepr_two_cmp: - cmp eax, 2 - jl prepr_one_prep - mov ecx, esp - add esp, 8 -prepr_two: - mov edx, DWORD PTR [ecx+4] - jmp prepr_one -prepr_one_prep: - mov ecx, esp - add esp, 4 -prepr_one: - mov ecx, DWORD PTR [ecx] - cmp cif_abi, 7 ;; FFI_REGISTER - jne fun - - xchg ecx, eax - -fun: - ;; Call function - call fn - - ;; Load ecx with the return type code - mov ecx, cif_flags - - ;; If the return value pointer is NULL, assume no return value. - cmp rvalue, 0 - jne ca_jumptable - - ;; Even if there is no space for the return value, we are - ;; obliged to handle floating-point values. - cmp ecx, FFI_TYPE_FLOAT - jne ca_epilogue - fstp st(0) - - jmp ca_epilogue - -ca_jumptable: - jmp [ca_jumpdata + 4 * ecx] -ca_jumpdata: - ;; Do not insert anything here between label and jump table. - dd offset ca_epilogue ;; FFI_TYPE_VOID - dd offset ca_retint ;; FFI_TYPE_INT - dd offset ca_retfloat ;; FFI_TYPE_FLOAT - dd offset ca_retdouble ;; FFI_TYPE_DOUBLE - dd offset ca_retlongdouble ;; FFI_TYPE_LONGDOUBLE - dd offset ca_retuint8 ;; FFI_TYPE_UINT8 - dd offset ca_retsint8 ;; FFI_TYPE_SINT8 - dd offset ca_retuint16 ;; FFI_TYPE_UINT16 - dd offset ca_retsint16 ;; FFI_TYPE_SINT16 - dd offset ca_retint ;; FFI_TYPE_UINT32 - dd offset ca_retint ;; FFI_TYPE_SINT32 - dd offset ca_retint64 ;; FFI_TYPE_UINT64 - dd offset ca_retint64 ;; FFI_TYPE_SINT64 - dd offset ca_epilogue ;; FFI_TYPE_STRUCT - dd offset ca_retint ;; FFI_TYPE_POINTER - dd offset ca_retstruct1b ;; FFI_TYPE_SMALL_STRUCT_1B - dd offset ca_retstruct2b ;; FFI_TYPE_SMALL_STRUCT_2B - dd offset ca_retint ;; FFI_TYPE_SMALL_STRUCT_4B - dd offset ca_epilogue ;; FFI_TYPE_MS_STRUCT - - /* Sign/zero extend as appropriate. */ -ca_retuint8: - movzx eax, al - jmp ca_retint - -ca_retsint8: - movsx eax, al - jmp ca_retint - -ca_retuint16: - movzx eax, ax - jmp ca_retint - -ca_retsint16: - movsx eax, ax - jmp ca_retint - -ca_retint: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - mov [ecx + 0], eax - jmp ca_epilogue - -ca_retint64: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - mov [ecx + 0], eax - mov [ecx + 4], edx - jmp ca_epilogue - -ca_retfloat: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - fstp DWORD PTR [ecx] - jmp ca_epilogue - -ca_retdouble: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - fstp QWORD PTR [ecx] - jmp ca_epilogue - -ca_retlongdouble: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - fstp TBYTE PTR [ecx] - jmp ca_epilogue - -ca_retstruct1b: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - mov [ecx + 0], al - jmp ca_epilogue - -ca_retstruct2b: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - mov [ecx + 0], ax - jmp ca_epilogue - -ca_epilogue: - ;; Epilogue code is autogenerated. - ret -ffi_call_win32 ENDP - -ffi_closure_THISCALL PROC NEAR - ;; Insert the register argument on the stack as the first argument - xchg DWORD PTR [esp+4], ecx - xchg DWORD PTR [esp], ecx - push ecx - jmp ffi_closure_STDCALL -ffi_closure_THISCALL ENDP - -ffi_closure_FASTCALL PROC NEAR - ;; Insert the 2 register arguments on the stack as the first argument - xchg DWORD PTR [esp+4], edx - xchg DWORD PTR [esp], ecx - push edx - push ecx - jmp ffi_closure_STDCALL -ffi_closure_FASTCALL ENDP - -ffi_closure_REGISTER PROC NEAR - ;; Insert the 3 register arguments on the stack as the first argument - push eax - xchg DWORD PTR [esp+8], ecx - xchg DWORD PTR [esp+4], edx - push ecx - push edx - jmp ffi_closure_STDCALL -ffi_closure_REGISTER ENDP - -ffi_closure_SYSV PROC NEAR FORCEFRAME - ;; the ffi_closure ctx is passed in eax by the trampoline. - - sub esp, 40 - lea edx, [ebp - 24] - mov [ebp - 12], edx ;; resp - lea edx, [ebp + 8] -stub:: - mov [esp + 8], edx ;; args - lea edx, [ebp - 12] - mov [esp + 4], edx ;; &resp - mov [esp], eax ;; closure - call ffi_closure_SYSV_inner - mov ecx, [ebp - 12] - -cs_jumptable: - jmp [cs_jumpdata + 4 * eax] -cs_jumpdata: - ;; Do not insert anything here between the label and jump table. - dd offset cs_epilogue ;; FFI_TYPE_VOID - dd offset cs_retint ;; FFI_TYPE_INT - dd offset cs_retfloat ;; FFI_TYPE_FLOAT - dd offset cs_retdouble ;; FFI_TYPE_DOUBLE - dd offset cs_retlongdouble ;; FFI_TYPE_LONGDOUBLE - dd offset cs_retuint8 ;; FFI_TYPE_UINT8 - dd offset cs_retsint8 ;; FFI_TYPE_SINT8 - dd offset cs_retuint16 ;; FFI_TYPE_UINT16 - dd offset cs_retsint16 ;; FFI_TYPE_SINT16 - dd offset cs_retint ;; FFI_TYPE_UINT32 - dd offset cs_retint ;; FFI_TYPE_SINT32 - dd offset cs_retint64 ;; FFI_TYPE_UINT64 - dd offset cs_retint64 ;; FFI_TYPE_SINT64 - dd offset cs_retstruct ;; FFI_TYPE_STRUCT - dd offset cs_retint ;; FFI_TYPE_POINTER - dd offset cs_retsint8 ;; FFI_TYPE_SMALL_STRUCT_1B - dd offset cs_retsint16 ;; FFI_TYPE_SMALL_STRUCT_2B - dd offset cs_retint ;; FFI_TYPE_SMALL_STRUCT_4B - dd offset cs_retmsstruct ;; FFI_TYPE_MS_STRUCT - -cs_retuint8: - movzx eax, BYTE PTR [ecx] - jmp cs_epilogue - -cs_retsint8: - movsx eax, BYTE PTR [ecx] - jmp cs_epilogue - -cs_retuint16: - movzx eax, WORD PTR [ecx] - jmp cs_epilogue - -cs_retsint16: - movsx eax, WORD PTR [ecx] - jmp cs_epilogue - -cs_retint: - mov eax, [ecx] - jmp cs_epilogue - -cs_retint64: - mov eax, [ecx + 0] - mov edx, [ecx + 4] - jmp cs_epilogue - -cs_retfloat: - fld DWORD PTR [ecx] - jmp cs_epilogue - -cs_retdouble: - fld QWORD PTR [ecx] - jmp cs_epilogue - -cs_retlongdouble: - fld TBYTE PTR [ecx] - jmp cs_epilogue - -cs_retstruct: - ;; Caller expects us to pop struct return value pointer hidden arg. - ;; Epilogue code is autogenerated. - ret 4 - -cs_retmsstruct: - ;; Caller expects us to return a pointer to the real return value. - mov eax, ecx - ;; Caller doesn't expects us to pop struct return value pointer hidden arg. - jmp cs_epilogue - -cs_epilogue: - ;; Epilogue code is autogenerated. - ret -ffi_closure_SYSV ENDP - -#if !FFI_NO_RAW_API - -#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) AND NOT 3) -#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) - -ffi_closure_raw_THISCALL PROC NEAR USES esi FORCEFRAME - sub esp, 36 - mov esi, [eax + RAW_CLOSURE_CIF_OFFSET] ;; closure->cif - mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data - mov [esp + 12], edx - lea edx, [ebp + 12] - jmp stubraw -ffi_closure_raw_THISCALL ENDP - -ffi_closure_raw_SYSV PROC NEAR USES esi FORCEFRAME - ;; the ffi_closure ctx is passed in eax by the trampoline. - - sub esp, 40 - mov esi, [eax + RAW_CLOSURE_CIF_OFFSET] ;; closure->cif - mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data - mov [esp + 12], edx ;; user_data - lea edx, [ebp + 8] -stubraw:: - mov [esp + 8], edx ;; raw_args - lea edx, [ebp - 24] - mov [esp + 4], edx ;; &res - mov [esp], esi ;; cif - call DWORD PTR [eax + RAW_CLOSURE_FUN_OFFSET] ;; closure->fun - mov eax, [esi + CIF_FLAGS_OFFSET] ;; cif->flags - lea ecx, [ebp - 24] - -cr_jumptable: - jmp [cr_jumpdata + 4 * eax] -cr_jumpdata: - ;; Do not insert anything here between the label and jump table. - dd offset cr_epilogue ;; FFI_TYPE_VOID - dd offset cr_retint ;; FFI_TYPE_INT - dd offset cr_retfloat ;; FFI_TYPE_FLOAT - dd offset cr_retdouble ;; FFI_TYPE_DOUBLE - dd offset cr_retlongdouble ;; FFI_TYPE_LONGDOUBLE - dd offset cr_retuint8 ;; FFI_TYPE_UINT8 - dd offset cr_retsint8 ;; FFI_TYPE_SINT8 - dd offset cr_retuint16 ;; FFI_TYPE_UINT16 - dd offset cr_retsint16 ;; FFI_TYPE_SINT16 - dd offset cr_retint ;; FFI_TYPE_UINT32 - dd offset cr_retint ;; FFI_TYPE_SINT32 - dd offset cr_retint64 ;; FFI_TYPE_UINT64 - dd offset cr_retint64 ;; FFI_TYPE_SINT64 - dd offset cr_epilogue ;; FFI_TYPE_STRUCT - dd offset cr_retint ;; FFI_TYPE_POINTER - dd offset cr_retsint8 ;; FFI_TYPE_SMALL_STRUCT_1B - dd offset cr_retsint16 ;; FFI_TYPE_SMALL_STRUCT_2B - dd offset cr_retint ;; FFI_TYPE_SMALL_STRUCT_4B - dd offset cr_epilogue ;; FFI_TYPE_MS_STRUCT - -cr_retuint8: - movzx eax, BYTE PTR [ecx] - jmp cr_epilogue - -cr_retsint8: - movsx eax, BYTE PTR [ecx] - jmp cr_epilogue - -cr_retuint16: - movzx eax, WORD PTR [ecx] - jmp cr_epilogue - -cr_retsint16: - movsx eax, WORD PTR [ecx] - jmp cr_epilogue - -cr_retint: - mov eax, [ecx] - jmp cr_epilogue - -cr_retint64: - mov eax, [ecx + 0] - mov edx, [ecx + 4] - jmp cr_epilogue - -cr_retfloat: - fld DWORD PTR [ecx] - jmp cr_epilogue - -cr_retdouble: - fld QWORD PTR [ecx] - jmp cr_epilogue - -cr_retlongdouble: - fld TBYTE PTR [ecx] - jmp cr_epilogue - -cr_epilogue: - ;; Epilogue code is autogenerated. - ret -ffi_closure_raw_SYSV ENDP - -#endif /* !FFI_NO_RAW_API */ - -ffi_closure_STDCALL PROC NEAR FORCEFRAME - mov eax, [esp] ;; the ffi_closure ctx passed by the trampoline. - - sub esp, 40 - lea edx, [ebp - 24] - mov [ebp - 12], edx ;; resp - lea edx, [ebp + 12] ;; account for stub return address on stack - mov [esp + 8], edx ;; args - lea edx, [ebp - 12] - mov [esp + 4], edx ;; &resp - mov [esp], eax ;; closure - call ffi_closure_WIN32_inner - mov ecx, [ebp - 12] - - xchg [ebp + 4], eax ;;xchg size of stack parameters and ffi_closure ctx - mov eax, DWORD PTR [eax + CLOSURE_CIF_OFFSET] - mov eax, DWORD PTR [eax + CIF_FLAGS_OFFSET] - -cd_jumptable: - jmp [cd_jumpdata + 4 * eax] -cd_jumpdata: - ;; Do not insert anything here between the label and jump table. - dd offset cd_epilogue ;; FFI_TYPE_VOID - dd offset cd_retint ;; FFI_TYPE_INT - dd offset cd_retfloat ;; FFI_TYPE_FLOAT - dd offset cd_retdouble ;; FFI_TYPE_DOUBLE - dd offset cd_retlongdouble ;; FFI_TYPE_LONGDOUBLE - dd offset cd_retuint8 ;; FFI_TYPE_UINT8 - dd offset cd_retsint8 ;; FFI_TYPE_SINT8 - dd offset cd_retuint16 ;; FFI_TYPE_UINT16 - dd offset cd_retsint16 ;; FFI_TYPE_SINT16 - dd offset cd_retint ;; FFI_TYPE_UINT32 - dd offset cd_retint ;; FFI_TYPE_SINT32 - dd offset cd_retint64 ;; FFI_TYPE_UINT64 - dd offset cd_retint64 ;; FFI_TYPE_SINT64 - dd offset cd_epilogue ;; FFI_TYPE_STRUCT - dd offset cd_retint ;; FFI_TYPE_POINTER - dd offset cd_retsint8 ;; FFI_TYPE_SMALL_STRUCT_1B - dd offset cd_retsint16 ;; FFI_TYPE_SMALL_STRUCT_2B - dd offset cd_retint ;; FFI_TYPE_SMALL_STRUCT_4B - -cd_retuint8: - movzx eax, BYTE PTR [ecx] - jmp cd_epilogue - -cd_retsint8: - movsx eax, BYTE PTR [ecx] - jmp cd_epilogue - -cd_retuint16: - movzx eax, WORD PTR [ecx] - jmp cd_epilogue - -cd_retsint16: - movsx eax, WORD PTR [ecx] - jmp cd_epilogue - -cd_retint: - mov eax, [ecx] - jmp cd_epilogue - -cd_retint64: - mov eax, [ecx + 0] - mov edx, [ecx + 4] - jmp cd_epilogue - -cd_retfloat: - fld DWORD PTR [ecx] - jmp cd_epilogue - -cd_retdouble: - fld QWORD PTR [ecx] - jmp cd_epilogue - -cd_retlongdouble: - fld TBYTE PTR [ecx] - jmp cd_epilogue - -cd_epilogue: - mov esp, ebp - pop ebp - mov ecx, [esp + 4] ;; Return address - add esp, [esp] ;; Parameters stack size - add esp, 8 - jmp ecx -ffi_closure_STDCALL ENDP - -_TEXT ENDS -END - -#else - -#define CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) - -#if defined(SYMBOL_UNDERSCORE) -#define USCORE_SYMBOL(x) _##x -#else -#define USCORE_SYMBOL(x) x -#endif - .text - - # This assumes we are using gas. - .balign 16 -FFI_HIDDEN(ffi_call_win32) - .globl USCORE_SYMBOL(ffi_call_win32) -#if defined(X86_WIN32) && !defined(__OS2__) - .def _ffi_call_win32; .scl 2; .type 32; .endef -#endif -USCORE_SYMBOL(ffi_call_win32): -.LFB1: - pushl %ebp -.LCFI0: - movl %esp,%ebp -.LCFI1: - # Make room for all of the new args. - movl 20(%ebp),%ecx - subl %ecx,%esp - - movl %esp,%eax - - # Call ffi_prep_args - pushl 12(%ebp) - pushl %eax - call *8(%ebp) - addl $8,%esp - - # Prepare registers - # EAX stores the number of register arguments - cmpl $0, %eax - je .fun - cmpl $3, %eax - jl .prepr_two_cmp - - movl %esp, %ecx - addl $12, %esp - movl 8(%ecx), %eax - jmp .prepr_two -.prepr_two_cmp: - cmpl $2, %eax - jl .prepr_one_prep - movl %esp, %ecx - addl $8, %esp -.prepr_two: - movl 4(%ecx), %edx - jmp .prepr_one -.prepr_one_prep: - movl %esp, %ecx - addl $4, %esp -.prepr_one: - movl (%ecx), %ecx - cmpl $7, 16(%ebp) # FFI_REGISTER - jne .fun - - xchgl %eax, %ecx - -.fun: - # FIXME: Align the stack to a 128-bit boundary to avoid - # potential performance hits. - - # Call function - call *32(%ebp) - - # stdcall functions pop arguments off the stack themselves - - # Load %ecx with the return type code - movl 24(%ebp),%ecx - - # If the return value pointer is NULL, assume no return value. - cmpl $0,28(%ebp) - jne 0f - - # Even if there is no space for the return value, we are - # obliged to handle floating-point values. - cmpl $FFI_TYPE_FLOAT,%ecx - jne .Lnoretval - fstp %st(0) - - jmp .Lepilogue - -0: - call 1f - # Do not insert anything here between the call and the jump table. -.Lstore_table: - .long .Lnoretval-.Lstore_table /* FFI_TYPE_VOID */ - .long .Lretint-.Lstore_table /* FFI_TYPE_INT */ - .long .Lretfloat-.Lstore_table /* FFI_TYPE_FLOAT */ - .long .Lretdouble-.Lstore_table /* FFI_TYPE_DOUBLE */ - .long .Lretlongdouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ - .long .Lretuint8-.Lstore_table /* FFI_TYPE_UINT8 */ - .long .Lretsint8-.Lstore_table /* FFI_TYPE_SINT8 */ - .long .Lretuint16-.Lstore_table /* FFI_TYPE_UINT16 */ - .long .Lretsint16-.Lstore_table /* FFI_TYPE_SINT16 */ - .long .Lretint-.Lstore_table /* FFI_TYPE_UINT32 */ - .long .Lretint-.Lstore_table /* FFI_TYPE_SINT32 */ - .long .Lretint64-.Lstore_table /* FFI_TYPE_UINT64 */ - .long .Lretint64-.Lstore_table /* FFI_TYPE_SINT64 */ - .long .Lretstruct-.Lstore_table /* FFI_TYPE_STRUCT */ - .long .Lretint-.Lstore_table /* FFI_TYPE_POINTER */ - .long .Lretstruct1b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_1B */ - .long .Lretstruct2b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_2B */ - .long .Lretstruct4b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_4B */ - .long .Lretstruct-.Lstore_table /* FFI_TYPE_MS_STRUCT */ -1: - shl $2, %ecx - add (%esp),%ecx - mov (%ecx),%ecx - add (%esp),%ecx - add $4, %esp - jmp *%ecx - - /* Sign/zero extend as appropriate. */ -.Lretsint8: - movsbl %al, %eax - jmp .Lretint - -.Lretsint16: - movswl %ax, %eax - jmp .Lretint - -.Lretuint8: - movzbl %al, %eax - jmp .Lretint - -.Lretuint16: - movzwl %ax, %eax - jmp .Lretint - -.Lretint: - # Load %ecx with the pointer to storage for the return value - movl 28(%ebp),%ecx - movl %eax,0(%ecx) - jmp .Lepilogue - -.Lretfloat: - # Load %ecx with the pointer to storage for the return value - movl 28(%ebp),%ecx - fstps (%ecx) - jmp .Lepilogue - -.Lretdouble: - # Load %ecx with the pointer to storage for the return value - movl 28(%ebp),%ecx - fstpl (%ecx) - jmp .Lepilogue - -.Lretlongdouble: - # Load %ecx with the pointer to storage for the return value - movl 28(%ebp),%ecx - fstpt (%ecx) - jmp .Lepilogue - -.Lretint64: - # Load %ecx with the pointer to storage for the return value - movl 28(%ebp),%ecx - movl %eax,0(%ecx) - movl %edx,4(%ecx) - jmp .Lepilogue - -.Lretstruct1b: - # Load %ecx with the pointer to storage for the return value - movl 28(%ebp),%ecx - movb %al,0(%ecx) - jmp .Lepilogue - -.Lretstruct2b: - # Load %ecx with the pointer to storage for the return value - movl 28(%ebp),%ecx - movw %ax,0(%ecx) - jmp .Lepilogue - -.Lretstruct4b: - # Load %ecx with the pointer to storage for the return value - movl 28(%ebp),%ecx - movl %eax,0(%ecx) - jmp .Lepilogue - -.Lretstruct: - # Nothing to do! - -.Lnoretval: -.Lepilogue: - movl %ebp,%esp - popl %ebp - ret -.ffi_call_win32_end: - .balign 16 -FFI_HIDDEN(ffi_closure_THISCALL) - .globl USCORE_SYMBOL(ffi_closure_THISCALL) -#if defined(X86_WIN32) && !defined(__OS2__) - .def _ffi_closure_THISCALL; .scl 2; .type 32; .endef -#endif -USCORE_SYMBOL(ffi_closure_THISCALL): - /* Insert the register argument on the stack as the first argument */ - xchg %ecx, 4(%esp) - xchg %ecx, (%esp) - push %ecx - jmp .ffi_closure_STDCALL_internal - - .balign 16 -FFI_HIDDEN(ffi_closure_FASTCALL) - .globl USCORE_SYMBOL(ffi_closure_FASTCALL) -#if defined(X86_WIN32) && !defined(__OS2__) - .def _ffi_closure_FASTCALL; .scl 2; .type 32; .endef -#endif -USCORE_SYMBOL(ffi_closure_FASTCALL): - /* Insert the 2 register arguments on the stack as the first two arguments */ - xchg %edx, 4(%esp) - xchg %ecx, (%esp) - push %edx - push %ecx - jmp .ffi_closure_STDCALL_internal -FFI_HIDDEN(ffi_closure_REGISTER) - .globl USCORE_SYMBOL(ffi_closure_REGISTER) -#if defined(X86_WIN32) && !defined(__OS2__) - .def _ffi_closure_REGISTER; .scl 2; .type 32; .endef -#endif -USCORE_SYMBOL(ffi_closure_REGISTER): - /* Insert the 3 register arguments on the stack as the first two arguments */ - push %eax - xchg %ecx, 8(%esp) - xchg %edx, 4(%esp) - push %ecx - push %edx - jmp .ffi_closure_STDCALL_internal - -.LFE1: - # This assumes we are using gas. - .balign 16 -FFI_HIDDEN(ffi_closure_SYSV) -#if defined(X86_WIN32) - .globl USCORE_SYMBOL(ffi_closure_SYSV) -#if defined(X86_WIN32) && !defined(__OS2__) - .def _ffi_closure_SYSV; .scl 2; .type 32; .endef -#endif -USCORE_SYMBOL(ffi_closure_SYSV): -#endif -.LFB3: - pushl %ebp -.LCFI4: - movl %esp, %ebp -.LCFI5: - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 8(%ebp), %edx - movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ -#if defined(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE) || !defined(__PIC__) - call USCORE_SYMBOL(ffi_closure_SYSV_inner) -#elif defined(X86_DARWIN) - calll L_ffi_closure_SYSV_inner$stub -#else - movl %ebx, 8(%esp) - call 1f -1: popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx - call ffi_closure_SYSV_inner@PLT - movl 8(%esp), %ebx -#endif - movl -12(%ebp), %ecx - -0: - call 1f - # Do not insert anything here between the call and the jump table. -.Lcls_store_table: - .long .Lcls_noretval-.Lcls_store_table /* FFI_TYPE_VOID */ - .long .Lcls_retint-.Lcls_store_table /* FFI_TYPE_INT */ - .long .Lcls_retfloat-.Lcls_store_table /* FFI_TYPE_FLOAT */ - .long .Lcls_retdouble-.Lcls_store_table /* FFI_TYPE_DOUBLE */ - .long .Lcls_retldouble-.Lcls_store_table /* FFI_TYPE_LONGDOUBLE */ - .long .Lcls_retuint8-.Lcls_store_table /* FFI_TYPE_UINT8 */ - .long .Lcls_retsint8-.Lcls_store_table /* FFI_TYPE_SINT8 */ - .long .Lcls_retuint16-.Lcls_store_table /* FFI_TYPE_UINT16 */ - .long .Lcls_retsint16-.Lcls_store_table /* FFI_TYPE_SINT16 */ - .long .Lcls_retint-.Lcls_store_table /* FFI_TYPE_UINT32 */ - .long .Lcls_retint-.Lcls_store_table /* FFI_TYPE_SINT32 */ - .long .Lcls_retllong-.Lcls_store_table /* FFI_TYPE_UINT64 */ - .long .Lcls_retllong-.Lcls_store_table /* FFI_TYPE_SINT64 */ - .long .Lcls_retstruct-.Lcls_store_table /* FFI_TYPE_STRUCT */ - .long .Lcls_retint-.Lcls_store_table /* FFI_TYPE_POINTER */ - .long .Lcls_retstruct1-.Lcls_store_table /* FFI_TYPE_SMALL_STRUCT_1B */ - .long .Lcls_retstruct2-.Lcls_store_table /* FFI_TYPE_SMALL_STRUCT_2B */ - .long .Lcls_retstruct4-.Lcls_store_table /* FFI_TYPE_SMALL_STRUCT_4B */ - .long .Lcls_retmsstruct-.Lcls_store_table /* FFI_TYPE_MS_STRUCT */ - -1: - shl $2, %eax - add (%esp),%eax - mov (%eax),%eax - add (%esp),%eax - add $4, %esp - jmp *%eax - - /* Sign/zero extend as appropriate. */ -.Lcls_retsint8: - movsbl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retsint16: - movswl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retuint8: - movzbl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retuint16: - movzwl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retint: - movl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retfloat: - flds (%ecx) - jmp .Lcls_epilogue - -.Lcls_retdouble: - fldl (%ecx) - jmp .Lcls_epilogue - -.Lcls_retldouble: - fldt (%ecx) - jmp .Lcls_epilogue - -.Lcls_retllong: - movl (%ecx), %eax - movl 4(%ecx), %edx - jmp .Lcls_epilogue - -.Lcls_retstruct1: - movsbl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retstruct2: - movswl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retstruct4: - movl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retstruct: - # Caller expects us to pop struct return value pointer hidden arg. - movl %ebp, %esp - popl %ebp - ret $0x4 - -.Lcls_retmsstruct: - # Caller expects us to return a pointer to the real return value. - mov %ecx, %eax - # Caller doesn't expects us to pop struct return value pointer hidden arg. - jmp .Lcls_epilogue - -.Lcls_noretval: -.Lcls_epilogue: - movl %ebp, %esp - popl %ebp - ret -.ffi_closure_SYSV_end: -.LFE3: - -#if !FFI_NO_RAW_API - -#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) -#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) - -#ifdef X86_WIN32 - .balign 16 -FFI_HIDDEN(ffi_closure_raw_THISCALL) - .globl USCORE_SYMBOL(ffi_closure_raw_THISCALL) -#if defined(X86_WIN32) && !defined(__OS2__) - .def _ffi_closure_raw_THISCALL; .scl 2; .type 32; .endef -#endif -USCORE_SYMBOL(ffi_closure_raw_THISCALL): - pushl %ebp - movl %esp, %ebp - pushl %esi - subl $36, %esp - movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ - movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ - movl %edx, 12(%esp) /* user_data */ - leal 12(%ebp), %edx /* __builtin_dwarf_cfa () */ - jmp .stubraw -#endif /* X86_WIN32 */ - - # This assumes we are using gas. - .balign 16 -#if defined(X86_WIN32) - .globl USCORE_SYMBOL(ffi_closure_raw_SYSV) -#if defined(X86_WIN32) && !defined(__OS2__) - .def _ffi_closure_raw_SYSV; .scl 2; .type 32; .endef -#endif -USCORE_SYMBOL(ffi_closure_raw_SYSV): -#endif /* defined(X86_WIN32) */ -.LFB4: - pushl %ebp -.LCFI6: - movl %esp, %ebp -.LCFI7: - pushl %esi -.LCFI8: - subl $36, %esp - movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ - movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ - movl %edx, 12(%esp) /* user_data */ - leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ -.stubraw: - movl %edx, 8(%esp) /* raw_args */ - leal -24(%ebp), %edx - movl %edx, 4(%esp) /* &res */ - movl %esi, (%esp) /* cif */ - call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ - movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ -0: - call 1f - # Do not insert anything here between the call and the jump table. -.Lrcls_store_table: - .long .Lrcls_noretval-.Lrcls_store_table /* FFI_TYPE_VOID */ - .long .Lrcls_retint-.Lrcls_store_table /* FFI_TYPE_INT */ - .long .Lrcls_retfloat-.Lrcls_store_table /* FFI_TYPE_FLOAT */ - .long .Lrcls_retdouble-.Lrcls_store_table /* FFI_TYPE_DOUBLE */ - .long .Lrcls_retldouble-.Lrcls_store_table /* FFI_TYPE_LONGDOUBLE */ - .long .Lrcls_retuint8-.Lrcls_store_table /* FFI_TYPE_UINT8 */ - .long .Lrcls_retsint8-.Lrcls_store_table /* FFI_TYPE_SINT8 */ - .long .Lrcls_retuint16-.Lrcls_store_table /* FFI_TYPE_UINT16 */ - .long .Lrcls_retsint16-.Lrcls_store_table /* FFI_TYPE_SINT16 */ - .long .Lrcls_retint-.Lrcls_store_table /* FFI_TYPE_UINT32 */ - .long .Lrcls_retint-.Lrcls_store_table /* FFI_TYPE_SINT32 */ - .long .Lrcls_retllong-.Lrcls_store_table /* FFI_TYPE_UINT64 */ - .long .Lrcls_retllong-.Lrcls_store_table /* FFI_TYPE_SINT64 */ - .long .Lrcls_retstruct-.Lrcls_store_table /* FFI_TYPE_STRUCT */ - .long .Lrcls_retint-.Lrcls_store_table /* FFI_TYPE_POINTER */ - .long .Lrcls_retstruct1-.Lrcls_store_table /* FFI_TYPE_SMALL_STRUCT_1B */ - .long .Lrcls_retstruct2-.Lrcls_store_table /* FFI_TYPE_SMALL_STRUCT_2B */ - .long .Lrcls_retstruct4-.Lrcls_store_table /* FFI_TYPE_SMALL_STRUCT_4B */ - .long .Lrcls_retstruct-.Lrcls_store_table /* FFI_TYPE_MS_STRUCT */ -1: - shl $2, %eax - add (%esp),%eax - mov (%eax),%eax - add (%esp),%eax - add $4, %esp - jmp *%eax - - /* Sign/zero extend as appropriate. */ -.Lrcls_retsint8: - movsbl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retsint16: - movswl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retuint8: - movzbl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retuint16: - movzwl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retint: - movl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retfloat: - flds -24(%ebp) - jmp .Lrcls_epilogue - -.Lrcls_retdouble: - fldl -24(%ebp) - jmp .Lrcls_epilogue - -.Lrcls_retldouble: - fldt -24(%ebp) - jmp .Lrcls_epilogue - -.Lrcls_retllong: - movl -24(%ebp), %eax - movl -20(%ebp), %edx - jmp .Lrcls_epilogue - -.Lrcls_retstruct1: - movsbl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retstruct2: - movswl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retstruct4: - movl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retstruct: - # Nothing to do! - -.Lrcls_noretval: -.Lrcls_epilogue: - addl $36, %esp - popl %esi - popl %ebp - ret -.ffi_closure_raw_SYSV_end: -.LFE4: - -#endif /* !FFI_NO_RAW_API */ - - # This assumes we are using gas. - .balign 16 -FFI_HIDDEN(ffi_closure_STDCALL) - .globl USCORE_SYMBOL(ffi_closure_STDCALL) -#if defined(X86_WIN32) && !defined(__OS2__) - .def _ffi_closure_STDCALL; .scl 2; .type 32; .endef -#endif -USCORE_SYMBOL(ffi_closure_STDCALL): -.ffi_closure_STDCALL_internal: - /* ffi_closure ctx is at top of the stack */ - movl (%esp), %eax -.LFB5: - pushl %ebp -.LCFI9: - movl %esp, %ebp -.LCFI10: - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 12(%ebp), %edx /* account for stub return address on stack */ - movl %edx, 4(%esp) /* args */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ -#if defined(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE) || !defined(__PIC__) - call USCORE_SYMBOL(ffi_closure_WIN32_inner) -#elif defined(X86_DARWIN) - calll L_ffi_closure_WIN32_inner$stub -#else - movl %ebx, 8(%esp) - call 1f -1: popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx - call ffi_closure_WIN32_inner@PLT - movl 8(%esp), %ebx -#endif - movl -12(%ebp), %ecx -0: - xchgl 4(%ebp), %eax /* xchg size of stack parameters and ffi_closure ctx */ - movl CLOSURE_CIF_OFFSET(%eax), %eax - movl CIF_FLAGS_OFFSET(%eax), %eax - - call 1f - # Do not insert anything here between the call and the jump table. -.Lscls_store_table: - .long .Lscls_noretval-.Lscls_store_table /* FFI_TYPE_VOID */ - .long .Lscls_retint-.Lscls_store_table /* FFI_TYPE_INT */ - .long .Lscls_retfloat-.Lscls_store_table /* FFI_TYPE_FLOAT */ - .long .Lscls_retdouble-.Lscls_store_table /* FFI_TYPE_DOUBLE */ - .long .Lscls_retldouble-.Lscls_store_table /* FFI_TYPE_LONGDOUBLE */ - .long .Lscls_retuint8-.Lscls_store_table /* FFI_TYPE_UINT8 */ - .long .Lscls_retsint8-.Lscls_store_table /* FFI_TYPE_SINT8 */ - .long .Lscls_retuint16-.Lscls_store_table /* FFI_TYPE_UINT16 */ - .long .Lscls_retsint16-.Lscls_store_table /* FFI_TYPE_SINT16 */ - .long .Lscls_retint-.Lscls_store_table /* FFI_TYPE_UINT32 */ - .long .Lscls_retint-.Lscls_store_table /* FFI_TYPE_SINT32 */ - .long .Lscls_retllong-.Lscls_store_table /* FFI_TYPE_UINT64 */ - .long .Lscls_retllong-.Lscls_store_table /* FFI_TYPE_SINT64 */ - .long .Lscls_retstruct-.Lscls_store_table /* FFI_TYPE_STRUCT */ - .long .Lscls_retint-.Lscls_store_table /* FFI_TYPE_POINTER */ - .long .Lscls_retstruct1-.Lscls_store_table /* FFI_TYPE_SMALL_STRUCT_1B */ - .long .Lscls_retstruct2-.Lscls_store_table /* FFI_TYPE_SMALL_STRUCT_2B */ - .long .Lscls_retstruct4-.Lscls_store_table /* FFI_TYPE_SMALL_STRUCT_4B */ -1: - shl $2, %eax - add (%esp),%eax - mov (%eax),%eax - add (%esp),%eax - add $4, %esp - jmp *%eax - - /* Sign/zero extend as appropriate. */ -.Lscls_retsint8: - movsbl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retsint16: - movswl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retuint8: - movzbl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retuint16: - movzwl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retint: - movl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retfloat: - flds (%ecx) - jmp .Lscls_epilogue - -.Lscls_retdouble: - fldl (%ecx) - jmp .Lscls_epilogue - -.Lscls_retldouble: - fldt (%ecx) - jmp .Lscls_epilogue - -.Lscls_retllong: - movl (%ecx), %eax - movl 4(%ecx), %edx - jmp .Lscls_epilogue - -.Lscls_retstruct1: - movsbl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retstruct2: - movswl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retstruct4: - movl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retstruct: - # Nothing to do! - -.Lscls_noretval: -.Lscls_epilogue: - movl %ebp, %esp - popl %ebp - movl 4(%esp), %ecx /* Return address */ - addl (%esp), %esp /* Parameters stack size */ - addl $8, %esp - jmp *%ecx -.ffi_closure_STDCALL_end: -.LFE5: - -#if defined(X86_DARWIN) -.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 -L_ffi_closure_SYSV_inner$stub: - .indirect_symbol _ffi_closure_SYSV_inner - hlt ; hlt ; hlt ; hlt ; hlt -L_ffi_closure_WIN32_inner$stub: - .indirect_symbol _ffi_closure_WIN32_inner - hlt ; hlt ; hlt ; hlt ; hlt -#endif - -#if defined(X86_WIN32) && !defined(__OS2__) - .section .eh_frame,"w" -#endif -.Lframe1: -.LSCIE1: - .long .LECIE1-.LASCIE1 /* Length of Common Information Entry */ -.LASCIE1: - .long 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ -#ifdef __PIC__ - .ascii "zR\0" /* CIE Augmentation */ -#else - .ascii "\0" /* CIE Augmentation */ -#endif - .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */ - .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */ - .byte 0x8 /* CIE RA Column */ -#ifdef __PIC__ - .byte 0x1 /* .uleb128 0x1; Augmentation size */ - .byte 0x1b /* FDE Encoding (pcrel sdata4) */ -#endif - .byte 0xc /* DW_CFA_def_cfa CFA = r4 + 4 = 4(%esp) */ - .byte 0x4 /* .uleb128 0x4 */ - .byte 0x4 /* .uleb128 0x4 */ - .byte 0x88 /* DW_CFA_offset, column 0x8 %eip at CFA + 1 * -4 */ - .byte 0x1 /* .uleb128 0x1 */ - .align 4 -.LECIE1: - -.LSFDE1: - .long .LEFDE1-.LASFDE1 /* FDE Length */ -.LASFDE1: - .long .LASFDE1-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB1-. /* FDE initial location */ -#else - .long .LFB1 -#endif - .long .LFE1-.LFB1 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - /* DW_CFA_xxx CFI instructions go here. */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI0-.LFB1 - .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ - .byte 0x2 /* .uleb128 0x2 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI1-.LCFI0 - .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ - .byte 0x5 /* .uleb128 0x5 */ - - /* End of DW_CFA_xxx CFI instructions. */ - .align 4 -.LEFDE1: - -.LSFDE3: - .long .LEFDE3-.LASFDE3 /* FDE Length */ -.LASFDE3: - .long .LASFDE3-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB3-. /* FDE initial location */ -#else - .long .LFB3 -#endif - .long .LFE3-.LFB3 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - /* DW_CFA_xxx CFI instructions go here. */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI4-.LFB3 - .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ - .byte 0x2 /* .uleb128 0x2 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI5-.LCFI4 - .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ - .byte 0x5 /* .uleb128 0x5 */ - - /* End of DW_CFA_xxx CFI instructions. */ - .align 4 -.LEFDE3: - -#if !FFI_NO_RAW_API - -.LSFDE4: - .long .LEFDE4-.LASFDE4 /* FDE Length */ -.LASFDE4: - .long .LASFDE4-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB4-. /* FDE initial location */ -#else - .long .LFB4 -#endif - .long .LFE4-.LFB4 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - /* DW_CFA_xxx CFI instructions go here. */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI6-.LFB4 - .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ - .byte 0x2 /* .uleb128 0x2 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI7-.LCFI6 - .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ - .byte 0x5 /* .uleb128 0x5 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI8-.LCFI7 - .byte 0x86 /* DW_CFA_offset, column 0x6 %esi at CFA + 3 * -4 */ - .byte 0x3 /* .uleb128 0x3 */ - - /* End of DW_CFA_xxx CFI instructions. */ - .align 4 -.LEFDE4: - -#endif /* !FFI_NO_RAW_API */ - -.LSFDE5: - .long .LEFDE5-.LASFDE5 /* FDE Length */ -.LASFDE5: - .long .LASFDE5-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB5-. /* FDE initial location */ -#else - .long .LFB5 -#endif - .long .LFE5-.LFB5 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - /* DW_CFA_xxx CFI instructions go here. */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI9-.LFB5 - .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ - .byte 0x2 /* .uleb128 0x2 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI10-.LCFI9 - .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ - .byte 0x5 /* .uleb128 0x5 */ - - /* End of DW_CFA_xxx CFI instructions. */ - .align 4 -.LEFDE5: - -#endif /* !_MSC_VER */ - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/x86/win64.S b/ruby/ext/fiddle/libffi-3.2.1/src/x86/win64.S deleted file mode 100644 index 347a26a85..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/x86/win64.S +++ /dev/null @@ -1,519 +0,0 @@ -#define LIBFFI_ASM -#include -#include - -/* Constants for ffi_call_win64 */ -#define STACK 0 -#define PREP_ARGS_FN 32 -#define ECIF 40 -#define CIF_BYTES 48 -#define CIF_FLAGS 56 -#define RVALUE 64 -#define FN 72 - -/* ffi_call_win64 (void (*prep_args_fn)(char *, extended_cif *), - extended_cif *ecif, unsigned bytes, unsigned flags, - unsigned *rvalue, void (*fn)()); - */ - -#ifdef _MSC_VER -PUBLIC ffi_call_win64 - -EXTRN __chkstk:NEAR -EXTRN ffi_closure_win64_inner:NEAR - -_TEXT SEGMENT - -;;; ffi_closure_win64 will be called with these registers set: -;;; rax points to 'closure' -;;; r11 contains a bit mask that specifies which of the -;;; first four parameters are float or double -;;; -;;; It must move the parameters passed in registers to their stack location, -;;; call ffi_closure_win64_inner for the actual work, then return the result. -;;; -ffi_closure_win64 PROC FRAME - ;; copy register arguments onto stack - test r11, 1 - jne first_is_float - mov QWORD PTR [rsp+8], rcx - jmp second -first_is_float: - movlpd QWORD PTR [rsp+8], xmm0 - -second: - test r11, 2 - jne second_is_float - mov QWORD PTR [rsp+16], rdx - jmp third -second_is_float: - movlpd QWORD PTR [rsp+16], xmm1 - -third: - test r11, 4 - jne third_is_float - mov QWORD PTR [rsp+24], r8 - jmp fourth -third_is_float: - movlpd QWORD PTR [rsp+24], xmm2 - -fourth: - test r11, 8 - jne fourth_is_float - mov QWORD PTR [rsp+32], r9 - jmp done -fourth_is_float: - movlpd QWORD PTR [rsp+32], xmm3 - -done: - .ALLOCSTACK 40 - sub rsp, 40 - .ENDPROLOG - mov rcx, rax ; context is first parameter - mov rdx, rsp ; stack is second parameter - add rdx, 48 ; point to start of arguments - mov rax, ffi_closure_win64_inner - call rax ; call the real closure function - add rsp, 40 - movd xmm0, rax ; If the closure returned a float, - ; ffi_closure_win64_inner wrote it to rax - ret 0 -ffi_closure_win64 ENDP - -ffi_call_win64 PROC FRAME - ;; copy registers onto stack - mov QWORD PTR [rsp+32], r9 - mov QWORD PTR [rsp+24], r8 - mov QWORD PTR [rsp+16], rdx - mov QWORD PTR [rsp+8], rcx - .PUSHREG rbp - push rbp - .ALLOCSTACK 48 - sub rsp, 48 ; 00000030H - .SETFRAME rbp, 32 - lea rbp, QWORD PTR [rsp+32] - .ENDPROLOG - - mov eax, DWORD PTR CIF_BYTES[rbp] - add rax, 15 - and rax, -16 - call __chkstk - sub rsp, rax - lea rax, QWORD PTR [rsp+32] - mov QWORD PTR STACK[rbp], rax - - mov rdx, QWORD PTR ECIF[rbp] - mov rcx, QWORD PTR STACK[rbp] - call QWORD PTR PREP_ARGS_FN[rbp] - - mov rsp, QWORD PTR STACK[rbp] - - movlpd xmm3, QWORD PTR [rsp+24] - movd r9, xmm3 - - movlpd xmm2, QWORD PTR [rsp+16] - movd r8, xmm2 - - movlpd xmm1, QWORD PTR [rsp+8] - movd rdx, xmm1 - - movlpd xmm0, QWORD PTR [rsp] - movd rcx, xmm0 - - call QWORD PTR FN[rbp] -ret_struct4b$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SMALL_STRUCT_4B - jne ret_struct2b$ - - mov rcx, QWORD PTR RVALUE[rbp] - mov DWORD PTR [rcx], eax - jmp SHORT ret_void$ - -ret_struct2b$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SMALL_STRUCT_2B - jne ret_struct1b$ - - mov rcx, QWORD PTR RVALUE[rbp] - mov WORD PTR [rcx], ax - jmp SHORT ret_void$ - -ret_struct1b$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SMALL_STRUCT_1B - jne ret_uint8$ - - mov rcx, QWORD PTR RVALUE[rbp] - mov BYTE PTR [rcx], al - jmp SHORT ret_void$ - -ret_uint8$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT8 - jne ret_sint8$ - - mov rcx, QWORD PTR RVALUE[rbp] - movzx rax, al - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_sint8$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT8 - jne ret_uint16$ - - mov rcx, QWORD PTR RVALUE[rbp] - movsx rax, al - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_uint16$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT16 - jne ret_sint16$ - - mov rcx, QWORD PTR RVALUE[rbp] - movzx rax, ax - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_sint16$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT16 - jne ret_uint32$ - - mov rcx, QWORD PTR RVALUE[rbp] - movsx rax, ax - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_uint32$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT32 - jne ret_sint32$ - - mov rcx, QWORD PTR RVALUE[rbp] - mov eax, eax - mov QWORD PTR [rcx], rax - -ret_void$: - xor rax, rax - - lea rsp, QWORD PTR [rbp+16] - pop rbp - ret 0 - -ret_sint32$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT32 - jne ret_float$ - - mov rcx, QWORD PTR RVALUE[rbp] - cdqe - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_float$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_FLOAT - jne SHORT ret_double$ - - mov rax, QWORD PTR RVALUE[rbp] - movss DWORD PTR [rax], xmm0 - jmp SHORT ret_void$ - -ret_double$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_DOUBLE - jne SHORT ret_uint64$ - - mov rax, QWORD PTR RVALUE[rbp] - movlpd QWORD PTR [rax], xmm0 - jmp SHORT ret_void$ - -ret_uint64$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT64 - jne SHORT ret_sint64$ - - mov rcx, QWORD PTR RVALUE[rbp] - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_sint64$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT64 - jne SHORT ret_pointer$ - - mov rcx, QWORD PTR RVALUE[rbp] - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_pointer$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_POINTER - jne SHORT ret_int$ - - mov rcx, QWORD PTR RVALUE[rbp] - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_int$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_INT - jne SHORT ret_void$ - - mov rcx, QWORD PTR RVALUE[rbp] - cdqe - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ -ffi_call_win64 ENDP -_TEXT ENDS -END - -#else - -#ifdef SYMBOL_UNDERSCORE -#define SYMBOL_NAME(name) _##name -#else -#define SYMBOL_NAME(name) name -#endif - -.text - -.extern SYMBOL_NAME(ffi_closure_win64_inner) - -# ffi_closure_win64 will be called with these registers set: -# rax points to 'closure' -# r11 contains a bit mask that specifies which of the -# first four parameters are float or double -# -# It must move the parameters passed in registers to their stack location, -# call ffi_closure_win64_inner for the actual work, then return the result. -# - .balign 16 - .globl SYMBOL_NAME(ffi_closure_win64) - .seh_proc SYMBOL_NAME(ffi_closure_win64) -SYMBOL_NAME(ffi_closure_win64): - # copy register arguments onto stack - test $1,%r11 - jne .Lfirst_is_float - mov %rcx, 8(%rsp) - jmp .Lsecond -.Lfirst_is_float: - movlpd %xmm0, 8(%rsp) - -.Lsecond: - test $2, %r11 - jne .Lsecond_is_float - mov %rdx, 16(%rsp) - jmp .Lthird -.Lsecond_is_float: - movlpd %xmm1, 16(%rsp) - -.Lthird: - test $4, %r11 - jne .Lthird_is_float - mov %r8,24(%rsp) - jmp .Lfourth -.Lthird_is_float: - movlpd %xmm2, 24(%rsp) - -.Lfourth: - test $8, %r11 - jne .Lfourth_is_float - mov %r9, 32(%rsp) - jmp .Ldone -.Lfourth_is_float: - movlpd %xmm3, 32(%rsp) - -.Ldone: - .seh_stackalloc 40 - sub $40, %rsp - .seh_endprologue - mov %rax, %rcx # context is first parameter - mov %rsp, %rdx # stack is second parameter - add $48, %rdx # point to start of arguments - leaq SYMBOL_NAME(ffi_closure_win64_inner)(%rip), %rax - callq *%rax # call the real closure function - add $40, %rsp - movq %rax, %xmm0 # If the closure returned a float, - # ffi_closure_win64_inner wrote it to rax - retq - .seh_endproc - - .balign 16 - .globl SYMBOL_NAME(ffi_call_win64) - .seh_proc SYMBOL_NAME(ffi_call_win64) -SYMBOL_NAME(ffi_call_win64): - # copy registers onto stack - mov %r9,32(%rsp) - mov %r8,24(%rsp) - mov %rdx,16(%rsp) - mov %rcx,8(%rsp) - .seh_pushreg rbp - push %rbp - .seh_stackalloc 48 - sub $48,%rsp - .seh_setframe rbp, 32 - lea 32(%rsp),%rbp - .seh_endprologue - - mov CIF_BYTES(%rbp),%eax - add $15, %rax - and $-16, %rax - cmpq $0x1000, %rax - jb Lch_done -Lch_probe: - subq $0x1000,%rsp - orl $0x0, (%rsp) - subq $0x1000,%rax - cmpq $0x1000,%rax - ja Lch_probe -Lch_done: - subq %rax, %rsp - orl $0x0, (%rsp) - lea 32(%rsp), %rax - mov %rax, STACK(%rbp) - - mov ECIF(%rbp), %rdx - mov STACK(%rbp), %rcx - callq *PREP_ARGS_FN(%rbp) - - mov STACK(%rbp), %rsp - - movlpd 24(%rsp), %xmm3 - movd %xmm3, %r9 - - movlpd 16(%rsp), %xmm2 - movd %xmm2, %r8 - - movlpd 8(%rsp), %xmm1 - movd %xmm1, %rdx - - movlpd (%rsp), %xmm0 - movd %xmm0, %rcx - - callq *FN(%rbp) -.Lret_struct4b: - cmpl $FFI_TYPE_SMALL_STRUCT_4B, CIF_FLAGS(%rbp) - jne .Lret_struct2b - - mov RVALUE(%rbp), %rcx - mov %eax, (%rcx) - jmp .Lret_void - -.Lret_struct2b: - cmpl $FFI_TYPE_SMALL_STRUCT_2B, CIF_FLAGS(%rbp) - jne .Lret_struct1b - - mov RVALUE(%rbp), %rcx - mov %ax, (%rcx) - jmp .Lret_void - -.Lret_struct1b: - cmpl $FFI_TYPE_SMALL_STRUCT_1B, CIF_FLAGS(%rbp) - jne .Lret_uint8 - - mov RVALUE(%rbp), %rcx - mov %al, (%rcx) - jmp .Lret_void - -.Lret_uint8: - cmpl $FFI_TYPE_UINT8, CIF_FLAGS(%rbp) - jne .Lret_sint8 - - mov RVALUE(%rbp), %rcx - movzbq %al, %rax - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_sint8: - cmpl $FFI_TYPE_SINT8, CIF_FLAGS(%rbp) - jne .Lret_uint16 - - mov RVALUE(%rbp), %rcx - movsbq %al, %rax - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_uint16: - cmpl $FFI_TYPE_UINT16, CIF_FLAGS(%rbp) - jne .Lret_sint16 - - mov RVALUE(%rbp), %rcx - movzwq %ax, %rax - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_sint16: - cmpl $FFI_TYPE_SINT16, CIF_FLAGS(%rbp) - jne .Lret_uint32 - - mov RVALUE(%rbp), %rcx - movswq %ax, %rax - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_uint32: - cmpl $FFI_TYPE_UINT32, CIF_FLAGS(%rbp) - jne .Lret_sint32 - - mov RVALUE(%rbp), %rcx - movl %eax, %eax - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_sint32: - cmpl $FFI_TYPE_SINT32, CIF_FLAGS(%rbp) - jne .Lret_float - - mov RVALUE(%rbp), %rcx - cltq - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_float: - cmpl $FFI_TYPE_FLOAT, CIF_FLAGS(%rbp) - jne .Lret_double - - mov RVALUE(%rbp), %rax - movss %xmm0, (%rax) - jmp .Lret_void - -.Lret_double: - cmpl $FFI_TYPE_DOUBLE, CIF_FLAGS(%rbp) - jne .Lret_uint64 - - mov RVALUE(%rbp), %rax - movlpd %xmm0, (%rax) - jmp .Lret_void - -.Lret_uint64: - cmpl $FFI_TYPE_UINT64, CIF_FLAGS(%rbp) - jne .Lret_sint64 - - mov RVALUE(%rbp), %rcx - mov %rax, (%rcx) - jmp .Lret_void - -.Lret_sint64: - cmpl $FFI_TYPE_SINT64, CIF_FLAGS(%rbp) - jne .Lret_pointer - - mov RVALUE(%rbp), %rcx - mov %rax, (%rcx) - jmp .Lret_void - -.Lret_pointer: - cmpl $FFI_TYPE_POINTER, CIF_FLAGS(%rbp) - jne .Lret_int - - mov RVALUE(%rbp), %rcx - mov %rax, (%rcx) - jmp .Lret_void - -.Lret_int: - cmpl $FFI_TYPE_INT, CIF_FLAGS(%rbp) - jne .Lret_void - - mov RVALUE(%rbp), %rcx - cltq - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_void: - xor %rax, %rax - - lea 16(%rbp), %rsp - pop %rbp - retq - .seh_endproc -#endif /* !_MSC_VER */ - diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/xtensa/ffi.c b/ruby/ext/fiddle/libffi-3.2.1/src/xtensa/ffi.c deleted file mode 100644 index fd94dafbe..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/xtensa/ffi.c +++ /dev/null @@ -1,298 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2013 Tensilica, Inc. - - XTENSA Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#include -#include - -/* - |----------------------------------------| - | | - on entry to ffi_call ----> |----------------------------------------| - | caller stack frame for registers a0-a3 | - |----------------------------------------| - | | - | additional arguments | - entry of the function ---> |----------------------------------------| - | copy of function arguments a2-a7 | - | - - - - - - - - - - - - - | - | | - - The area below the entry line becomes the new stack frame for the function. - -*/ - - -#define FFI_TYPE_STRUCT_REGS FFI_TYPE_LAST - - -extern void ffi_call_SYSV(void *rvalue, unsigned rsize, unsigned flags, - void(*fn)(void), unsigned nbytes, extended_cif*); -extern void ffi_closure_SYSV(void) FFI_HIDDEN; - -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - switch(cif->rtype->type) { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - cif->flags = cif->rtype->type; - break; - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - cif->flags = FFI_TYPE_UINT32; - break; - case FFI_TYPE_DOUBLE: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - cif->flags = FFI_TYPE_UINT64; // cif->rtype->type; - break; - case FFI_TYPE_STRUCT: - cif->flags = FFI_TYPE_STRUCT; //_REGS; - /* Up to 16 bytes are returned in registers */ - if (cif->rtype->size > 4 * 4) { - /* returned structure is referenced by a register; use 8 bytes - (including 4 bytes for potential additional alignment) */ - cif->flags = FFI_TYPE_STRUCT; - cif->bytes += 8; - } - break; - - default: - cif->flags = FFI_TYPE_UINT32; - break; - } - - /* Round the stack up to a full 4 register frame, just in case - (we use this size in movsp). This way, it's also a multiple of - 8 bytes for 64-bit arguments. */ - cif->bytes = ALIGN(cif->bytes, 16); - - return FFI_OK; -} - -void ffi_prep_args(extended_cif *ecif, unsigned char* stack) -{ - unsigned int i; - unsigned long *addr; - ffi_type **ptr; - - union { - void **v; - char **c; - signed char **sc; - unsigned char **uc; - signed short **ss; - unsigned short **us; - unsigned int **i; - long long **ll; - float **f; - double **d; - } p_argv; - - /* Verify that everything is aligned up properly */ - FFI_ASSERT (((unsigned long) stack & 0x7) == 0); - - p_argv.v = ecif->avalue; - addr = (unsigned long*)stack; - - /* structures with a size greater than 16 bytes are passed in memory */ - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT && ecif->cif->rtype->size > 16) - { - *addr++ = (unsigned long)ecif->rvalue; - } - - for (i = ecif->cif->nargs, ptr = ecif->cif->arg_types; - i > 0; - i--, ptr++, p_argv.v++) - { - switch ((*ptr)->type) - { - case FFI_TYPE_SINT8: - *addr++ = **p_argv.sc; - break; - case FFI_TYPE_UINT8: - *addr++ = **p_argv.uc; - break; - case FFI_TYPE_SINT16: - *addr++ = **p_argv.ss; - break; - case FFI_TYPE_UINT16: - *addr++ = **p_argv.us; - break; - case FFI_TYPE_FLOAT: - case FFI_TYPE_INT: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_POINTER: - *addr++ = **p_argv.i; - break; - case FFI_TYPE_DOUBLE: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - if (((unsigned long)addr & 4) != 0) - addr++; - *(unsigned long long*)addr = **p_argv.ll; - addr += sizeof(unsigned long long) / sizeof (addr); - break; - - case FFI_TYPE_STRUCT: - { - unsigned long offs; - unsigned long size; - - if (((unsigned long)addr & 4) != 0 && (*ptr)->alignment > 4) - addr++; - - offs = (unsigned long) addr - (unsigned long) stack; - size = (*ptr)->size; - - /* Entire structure must fit the argument registers or referenced */ - if (offs < FFI_REGISTER_NARGS * 4 - && offs + size > FFI_REGISTER_NARGS * 4) - addr = (unsigned long*) (stack + FFI_REGISTER_NARGS * 4); - - memcpy((char*) addr, *p_argv.c, size); - addr += (size + 3) / 4; - break; - } - - default: - FFI_ASSERT(0); - } - } -} - - -void ffi_call(ffi_cif* cif, void(*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - unsigned long rsize = cif->rtype->size; - int flags = cif->flags; - void *alloc = NULL; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* Note that for structures that are returned in registers (size <= 16 bytes) - we allocate a temporary buffer and use memcpy to copy it to the final - destination. The reason is that the target address might be misaligned or - the length not a multiple of 4 bytes. Handling all those cases would be - very complex. */ - - if (flags == FFI_TYPE_STRUCT && (rsize <= 16 || rvalue == NULL)) - { - alloc = alloca(ALIGN(rsize, 4)); - ecif.rvalue = alloc; - } - else - { - ecif.rvalue = rvalue; - } - - if (cif->abi != FFI_SYSV) - FFI_ASSERT(0); - - ffi_call_SYSV (ecif.rvalue, rsize, cif->flags, fn, cif->bytes, &ecif); - - if (alloc != NULL && rvalue != NULL) - memcpy(rvalue, alloc, rsize); -} - -extern void ffi_trampoline(); -extern void ffi_cacheflush(void* start, void* end); - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - /* copye trampoline to stack and patch 'ffi_closure_SYSV' pointer */ - memcpy(closure->tramp, ffi_trampoline, FFI_TRAMPOLINE_SIZE); - *(unsigned int*)(&closure->tramp[8]) = (unsigned int)ffi_closure_SYSV; - - // Do we have this function? - // __builtin___clear_cache(closer->tramp, closer->tramp + FFI_TRAMPOLINE_SIZE) - ffi_cacheflush(closure->tramp, closure->tramp + FFI_TRAMPOLINE_SIZE); - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - return FFI_OK; -} - - -long FFI_HIDDEN -ffi_closure_SYSV_inner(ffi_closure *closure, void **values, void *rvalue) -{ - ffi_cif *cif; - ffi_type **arg_types; - void **avalue; - int i, areg; - - cif = closure->cif; - if (cif->abi != FFI_SYSV) - return FFI_BAD_ABI; - - areg = 0; - - int rtype = cif->rtype->type; - if (rtype == FFI_TYPE_STRUCT && cif->rtype->size > 4 * 4) - { - rvalue = *values; - areg++; - } - - cif = closure->cif; - arg_types = cif->arg_types; - avalue = alloca(cif->nargs * sizeof(void *)); - - for (i = 0; i < cif->nargs; i++) - { - if (arg_types[i]->alignment == 8 && (areg & 1) != 0) - areg++; - - // skip the entry 16,a1 framework, add 16 bytes (4 registers) - if (areg == FFI_REGISTER_NARGS) - areg += 4; - - if (arg_types[i]->type == FFI_TYPE_STRUCT) - { - int numregs = ((arg_types[i]->size + 3) & ~3) / 4; - if (areg < FFI_REGISTER_NARGS && areg + numregs > FFI_REGISTER_NARGS) - areg = FFI_REGISTER_NARGS + 4; - } - - avalue[i] = &values[areg]; - areg += (arg_types[i]->size + 3) / 4; - } - - (closure->fun)(cif, rvalue, avalue, closure->user_data); - - return rtype; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/xtensa/ffitarget.h b/ruby/ext/fiddle/libffi-3.2.1/src/xtensa/ffitarget.h deleted file mode 100644 index 0ba728bc9..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/xtensa/ffitarget.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2013 Tensilica, Inc. - Target configuration macros for XTENSA. - - 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. - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_H -#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -#define FFI_REGISTER_NARGS 6 - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_NATIVE_RAW_API 0 -#define FFI_TRAMPOLINE_SIZE 24 - -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/src/xtensa/sysv.S b/ruby/ext/fiddle/libffi-3.2.1/src/xtensa/sysv.S deleted file mode 100644 index 64e6a0918..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/src/xtensa/sysv.S +++ /dev/null @@ -1,253 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2013 Tensilica, Inc. - - XTENSA Foreign Function Interface - - 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -#define ENTRY(name) .text; .globl name; .type name,@function; .align 4; name: -#define END(name) .size name , . - name - -/* Assert that the table below is in sync with ffi.h. */ - -#if FFI_TYPE_UINT8 != 5 \ - || FFI_TYPE_SINT8 != 6 \ - || FFI_TYPE_UINT16 != 7 \ - || FFI_TYPE_SINT16 != 8 \ - || FFI_TYPE_UINT32 != 9 \ - || FFI_TYPE_SINT32 != 10 \ - || FFI_TYPE_UINT64 != 11 -#error "xtensa/sysv.S out of sync with ffi.h" -#endif - - -/* ffi_call_SYSV (rvalue, rbytes, flags, (*fnaddr)(), bytes, ecif) - void *rvalue; a2 - unsigned long rbytes; a3 - unsigned flags; a4 - void (*fnaddr)(); a5 - unsigned long bytes; a6 - extended_cif* ecif) a7 -*/ - -ENTRY(ffi_call_SYSV) - - entry a1, 32 # 32 byte frame for using call8 below - - mov a10, a7 # a10(->arg0): ecif - sub a11, a1, a6 # a11(->arg1): stack pointer - mov a7, a1 # fp - movsp a1, a11 # set new sp = old_sp - bytes - - movi a8, ffi_prep_args - callx8 a8 # ffi_prep_args(ecif, stack) - - # prepare to move stack pointer back up to 6 arguments - # note that 'bytes' is already aligned - - movi a10, 6*4 - sub a11, a6, a10 - movgez a6, a10, a11 - add a6, a1, a6 - - - # we can pass up to 6 arguments in registers - # for simplicity, just load 6 arguments - # (the stack size is at least 32 bytes, so no risk to cross boundaries) - - l32i a10, a1, 0 - l32i a11, a1, 4 - l32i a12, a1, 8 - l32i a13, a1, 12 - l32i a14, a1, 16 - l32i a15, a1, 20 - - # move stack pointer - - movsp a1, a6 - - callx8 a5 # (*fn)(args...) - - # Handle return value(s) - - beqz a2, .Lexit - - movi a5, FFI_TYPE_STRUCT - bne a4, a5, .Lstore - movi a5, 16 - blt a5, a3, .Lexit - - s32i a10, a2, 0 - blti a3, 5, .Lexit - addi a3, a3, -1 - s32i a11, a2, 4 - blti a3, 8, .Lexit - s32i a12, a2, 8 - blti a3, 12, .Lexit - s32i a13, a2, 12 - -.Lexit: retw - -.Lstore: - addi a4, a4, -FFI_TYPE_UINT8 - bgei a4, 7, .Lexit # should never happen - movi a6, store_calls - add a4, a4, a4 - addx4 a6, a4, a6 # store_table + idx * 8 - jx a6 - - .align 8 -store_calls: - # UINT8 - s8i a10, a2, 0 - retw - - # SINT8 - .align 8 - s8i a10, a2, 0 - retw - - # UINT16 - .align 8 - s16i a10, a2, 0 - retw - - # SINT16 - .align 8 - s16i a10, a2, 0 - retw - - # UINT32 - .align 8 - s32i a10, a2, 0 - retw - - # SINT32 - .align 8 - s32i a10, a2, 0 - retw - - # UINT64 - .align 8 - s32i a10, a2, 0 - s32i a11, a2, 4 - retw - -END(ffi_call_SYSV) - - -/* - * void ffi_cacheflush (unsigned long start, unsigned long end) - */ - -#define EXTRA_ARGS_SIZE 24 - -ENTRY(ffi_cacheflush) - - entry a1, 16 - -1: dhwbi a2, 0 - ihi a2, 0 - addi a2, a2, 4 - blt a2, a3, 1b - - retw - -END(ffi_cacheflush) - -/* ffi_trampoline is copied to the stack */ - -ENTRY(ffi_trampoline) - - entry a1, 16 + (FFI_REGISTER_NARGS * 4) + (4 * 4) # [ 0] - j 2f # [ 3] - .align 4 # [ 6] -1: .long 0 # [ 8] -2: l32r a15, 1b # [12] - _mov a14, a0 # [15] - callx0 a15 # [18] - # [21] -END(ffi_trampoline) - -/* - * ffi_closure() - * - * a0: closure + 21 - * a14: return address (a0) - */ - -ENTRY(ffi_closure_SYSV) - - /* intentionally omitting entry here */ - - # restore return address (a0) and move pointer to closure to a10 - addi a10, a0, -21 - mov a0, a14 - - # allow up to 4 arguments as return values - addi a11, a1, 4 * 4 - - # save up to 6 arguments to stack (allocated by entry below) - s32i a2, a11, 0 - s32i a3, a11, 4 - s32i a4, a11, 8 - s32i a5, a11, 12 - s32i a6, a11, 16 - s32i a7, a11, 20 - - movi a8, ffi_closure_SYSV_inner - mov a12, a1 - callx8 a8 # .._inner(*closure, **avalue, *rvalue) - - # load up to four return arguments - l32i a2, a1, 0 - l32i a3, a1, 4 - l32i a4, a1, 8 - l32i a5, a1, 12 - - # (sign-)extend return value - movi a11, FFI_TYPE_UINT8 - bne a10, a11, 1f - extui a2, a2, 0, 8 - retw - -1: movi a11, FFI_TYPE_SINT8 - bne a10, a11, 1f - sext a2, a2, 7 - retw - -1: movi a11, FFI_TYPE_UINT16 - bne a10, a11, 1f - extui a2, a2, 0, 16 - retw - -1: movi a11, FFI_TYPE_SINT16 - bne a10, a11, 1f - sext a2, a2, 15 - -1: retw - -END(ffi_closure_SYSV) diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/Makefile.am b/ruby/ext/fiddle/libffi-3.2.1/testsuite/Makefile.am deleted file mode 100644 index da10465d2..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/Makefile.am +++ /dev/null @@ -1,85 +0,0 @@ -## Process this file with automake to produce Makefile.in. - -AUTOMAKE_OPTIONS = foreign dejagnu - -EXTRA_DEJAGNU_SITE_CONFIG=../local.exp - -CLEANFILES = *.exe core* *.log *.sum - -EXTRA_DIST = config/default.exp libffi.call/cls_19byte.c \ -libffi.call/cls_align_longdouble_split.c \ -libffi.call/closure_loc_fn0.c libffi.call/cls_schar.c \ -libffi.call/closure_fn1.c \ -libffi.call/return_ul.c libffi.call/cls_align_double.c \ -libffi.call/return_fl2.c libffi.call/cls_1_1byte.c \ -libffi.call/cls_64byte.c libffi.call/nested_struct7.c \ -libffi.call/cls_align_sint32.c libffi.call/nested_struct2.c \ -libffi.call/ffitest.h libffi.call/nested_struct4.c \ -libffi.call/cls_multi_ushort.c libffi.call/struct3.c \ -libffi.call/cls_3byte1.c libffi.call/cls_16byte.c \ -libffi.call/struct8.c libffi.call/nested_struct8.c \ -libffi.call/cls_multi_sshort.c libffi.call/cls_3byte2.c \ -libffi.call/cls_pointer.c \ -libffi.call/err_bad_typedef.c libffi.call/cls_4_1byte.c \ -libffi.call/cls_9byte2.c libffi.call/cls_multi_schar.c \ -libffi.call/stret_medium2.c libffi.call/cls_5_1_byte.c \ -libffi.call/call.exp libffi.call/cls_double.c \ -libffi.call/cls_align_sint16.c libffi.call/cls_uint.c \ -libffi.call/return_ll1.c libffi.call/nested_struct3.c \ -libffi.call/cls_20byte1.c libffi.call/closure_fn4.c \ -libffi.call/cls_uchar.c libffi.call/struct2.c libffi.call/cls_7byte.c \ -libffi.call/strlen.c libffi.call/many.c libffi.call/testclosure.c \ -libffi.call/return_fl.c libffi.call/struct5.c \ -libffi.call/cls_12byte.c libffi.call/cls_multi_sshortchar.c \ -libffi.call/cls_align_longdouble_split2.c libffi.call/return_dbl2.c \ -libffi.call/return_fl3.c libffi.call/stret_medium.c \ -libffi.call/nested_struct6.c libffi.call/closure_fn3.c \ -libffi.call/float3.c libffi.call/many2.c \ -libffi.call/closure_simple.c libffi.call/cls_align_uint16.c \ -libffi.call/cls_9byte1.c libffi.call/closure_fn6.c \ -libffi.call/cls_double_va.c libffi.call/cls_align_pointer.c \ -libffi.call/cls_align_longdouble.c libffi.call/closure_fn2.c \ -libffi.call/cls_sshort.c \ -libffi.call/nested_struct.c libffi.call/cls_20byte.c \ -libffi.call/cls_longdouble.c libffi.call/cls_multi_uchar.c \ -libffi.call/return_uc.c \ -libffi.call/cls_18byte.c libffi.call/cls_8byte.c \ -libffi.call/promotion.c \ -libffi.call/return_dbl.c libffi.call/cls_24byte.c \ -libffi.call/struct4.c libffi.call/cls_6byte.c \ -libffi.call/cls_align_uint32.c libffi.call/float.c \ -libffi.call/float1.c libffi.call/float_va.c libffi.call/negint.c \ -libffi.call/return_dbl1.c libffi.call/cls_3_1byte.c \ -libffi.call/cls_align_float.c libffi.call/return_fl1.c \ -libffi.call/nested_struct10.c libffi.call/nested_struct5.c \ -libffi.call/cls_align_sint64.c \ -libffi.call/stret_large2.c libffi.call/return_sl.c \ -libffi.call/closure_fn0.c libffi.call/cls_5byte.c \ -libffi.call/cls_2byte.c libffi.call/float2.c \ -libffi.call/cls_dbls_struct.c libffi.call/cls_sint.c \ -libffi.call/stret_large.c libffi.call/cls_ulonglong.c \ -libffi.call/cls_ushort.c libffi.call/nested_struct1.c \ -libffi.call/err_bad_abi.c libffi.call/cls_longdouble_va.c \ -libffi.call/cls_float.c libffi.call/cls_pointer_stack.c \ -libffi.call/pyobjc-tc.c libffi.call/cls_multi_ushortchar.c \ -libffi.call/struct1.c libffi.call/nested_struct9.c \ -libffi.call/huge_struct.c libffi.call/problem1.c \ -libffi.call/float4.c \ -libffi.call/return_ldl.c \ -libffi.call/closure_fn5.c \ -libffi.call/struct6.c libffi.call/return_ll.c libffi.call/struct9.c \ -libffi.call/return_sc.c libffi.call/struct7.c \ -libffi.call/cls_align_uint64.c libffi.call/cls_4byte.c \ -libffi.call/cls_6_1_byte.c \ -libffi.call/cls_7_1_byte.c libffi.call/unwindtest.cc \ -libffi.call/unwindtest_ffi_call.cc \ -lib/wrapper.exp lib/target-libpath.exp \ -lib/libffi.exp libffi.call/cls_struct_va1.c \ -libffi.call/cls_uchar_va.c libffi.call/cls_uint_va.c \ -libffi.call/cls_ulong_va.c libffi.call/cls_ushort_va.c \ -libffi.call/nested_struct11.c libffi.call/uninitialized.c \ -libffi.call/va_1.c libffi.call/va_struct1.c libffi.call/va_struct2.c \ -libffi.call/va_struct3.c \ -libffi.call/strlen2.c \ -libffi.call/strlen3.c \ -libffi.call/strlen4.c diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/Makefile.in b/ruby/ext/fiddle/libffi-3.2.1/testsuite/Makefile.in deleted file mode 100644 index 99e226c40..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/Makefile.in +++ /dev/null @@ -1,590 +0,0 @@ -# Makefile.in generated by automake 1.13.4 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2013 Free Software Foundation, Inc. - -# This Makefile.in 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. - -@SET_MAKE@ -VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = testsuite -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/asmcfi.m4 \ - $(top_srcdir)/m4/ax_append_flag.m4 \ - $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compile_flag.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_configure_args.m4 \ - $(top_srcdir)/m4/ax_enable_builddir.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/fficonfig.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -SOURCES = -DIST_SOURCES = -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -DEJATOOL = $(PACKAGE) -RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir -EXPECT = expect -RUNTEST = runtest -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AM_LTLDFLAGS = @AM_LTLDFLAGS@ -AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@ -FGREP = @FGREP@ -GREP = @GREP@ -HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ -HAVE_LONG_DOUBLE_VARIANT = @HAVE_LONG_DOUBLE_VARIANT@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TARGET = @TARGET@ -TARGETDIR = @TARGETDIR@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_enable_builddir_sed = @ax_enable_builddir_sed@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sys_symbol_underscore = @sys_symbol_underscore@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -toolexecdir = @toolexecdir@ -toolexeclibdir = @toolexeclibdir@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign dejagnu -EXTRA_DEJAGNU_SITE_CONFIG = ../local.exp -CLEANFILES = *.exe core* *.log *.sum -EXTRA_DIST = config/default.exp libffi.call/cls_19byte.c \ -libffi.call/cls_align_longdouble_split.c \ -libffi.call/closure_loc_fn0.c libffi.call/cls_schar.c \ -libffi.call/closure_fn1.c \ -libffi.call/return_ul.c libffi.call/cls_align_double.c \ -libffi.call/return_fl2.c libffi.call/cls_1_1byte.c \ -libffi.call/cls_64byte.c libffi.call/nested_struct7.c \ -libffi.call/cls_align_sint32.c libffi.call/nested_struct2.c \ -libffi.call/ffitest.h libffi.call/nested_struct4.c \ -libffi.call/cls_multi_ushort.c libffi.call/struct3.c \ -libffi.call/cls_3byte1.c libffi.call/cls_16byte.c \ -libffi.call/struct8.c libffi.call/nested_struct8.c \ -libffi.call/cls_multi_sshort.c libffi.call/cls_3byte2.c \ -libffi.call/cls_pointer.c \ -libffi.call/err_bad_typedef.c libffi.call/cls_4_1byte.c \ -libffi.call/cls_9byte2.c libffi.call/cls_multi_schar.c \ -libffi.call/stret_medium2.c libffi.call/cls_5_1_byte.c \ -libffi.call/call.exp libffi.call/cls_double.c \ -libffi.call/cls_align_sint16.c libffi.call/cls_uint.c \ -libffi.call/return_ll1.c libffi.call/nested_struct3.c \ -libffi.call/cls_20byte1.c libffi.call/closure_fn4.c \ -libffi.call/cls_uchar.c libffi.call/struct2.c libffi.call/cls_7byte.c \ -libffi.call/strlen.c libffi.call/many.c libffi.call/testclosure.c \ -libffi.call/return_fl.c libffi.call/struct5.c \ -libffi.call/cls_12byte.c libffi.call/cls_multi_sshortchar.c \ -libffi.call/cls_align_longdouble_split2.c libffi.call/return_dbl2.c \ -libffi.call/return_fl3.c libffi.call/stret_medium.c \ -libffi.call/nested_struct6.c libffi.call/closure_fn3.c \ -libffi.call/float3.c libffi.call/many2.c \ -libffi.call/closure_simple.c libffi.call/cls_align_uint16.c \ -libffi.call/cls_9byte1.c libffi.call/closure_fn6.c \ -libffi.call/cls_double_va.c libffi.call/cls_align_pointer.c \ -libffi.call/cls_align_longdouble.c libffi.call/closure_fn2.c \ -libffi.call/cls_sshort.c \ -libffi.call/nested_struct.c libffi.call/cls_20byte.c \ -libffi.call/cls_longdouble.c libffi.call/cls_multi_uchar.c \ -libffi.call/return_uc.c \ -libffi.call/cls_18byte.c libffi.call/cls_8byte.c \ -libffi.call/promotion.c \ -libffi.call/return_dbl.c libffi.call/cls_24byte.c \ -libffi.call/struct4.c libffi.call/cls_6byte.c \ -libffi.call/cls_align_uint32.c libffi.call/float.c \ -libffi.call/float1.c libffi.call/float_va.c libffi.call/negint.c \ -libffi.call/return_dbl1.c libffi.call/cls_3_1byte.c \ -libffi.call/cls_align_float.c libffi.call/return_fl1.c \ -libffi.call/nested_struct10.c libffi.call/nested_struct5.c \ -libffi.call/cls_align_sint64.c \ -libffi.call/stret_large2.c libffi.call/return_sl.c \ -libffi.call/closure_fn0.c libffi.call/cls_5byte.c \ -libffi.call/cls_2byte.c libffi.call/float2.c \ -libffi.call/cls_dbls_struct.c libffi.call/cls_sint.c \ -libffi.call/stret_large.c libffi.call/cls_ulonglong.c \ -libffi.call/cls_ushort.c libffi.call/nested_struct1.c \ -libffi.call/err_bad_abi.c libffi.call/cls_longdouble_va.c \ -libffi.call/cls_float.c libffi.call/cls_pointer_stack.c \ -libffi.call/pyobjc-tc.c libffi.call/cls_multi_ushortchar.c \ -libffi.call/struct1.c libffi.call/nested_struct9.c \ -libffi.call/huge_struct.c libffi.call/problem1.c \ -libffi.call/float4.c \ -libffi.call/return_ldl.c \ -libffi.call/closure_fn5.c \ -libffi.call/struct6.c libffi.call/return_ll.c libffi.call/struct9.c \ -libffi.call/return_sc.c libffi.call/struct7.c \ -libffi.call/cls_align_uint64.c libffi.call/cls_4byte.c \ -libffi.call/cls_6_1_byte.c \ -libffi.call/cls_7_1_byte.c libffi.call/unwindtest.cc \ -libffi.call/unwindtest_ffi_call.cc \ -lib/wrapper.exp lib/target-libpath.exp \ -lib/libffi.exp libffi.call/cls_struct_va1.c \ -libffi.call/cls_uchar_va.c libffi.call/cls_uint_va.c \ -libffi.call/cls_ulong_va.c libffi.call/cls_ushort_va.c \ -libffi.call/nested_struct11.c libffi.call/uninitialized.c \ -libffi.call/va_1.c libffi.call/va_struct1.c libffi.call/va_struct2.c \ -libffi.call/va_struct3.c \ -libffi.call/strlen2.c \ -libffi.call/strlen3.c \ -libffi.call/strlen4.c - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign testsuite/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags TAGS: - -ctags CTAGS: - -cscope cscopelist: - - -check-DEJAGNU: site.exp - srcdir='$(srcdir)'; export srcdir; \ - EXPECT=$(EXPECT); export EXPECT; \ - if $(SHELL) -c "$(RUNTEST) --version" > /dev/null 2>&1; then \ - exit_status=0; l='$(DEJATOOL)'; for tool in $$l; do \ - if $(RUNTEST) $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \ - then :; else exit_status=1; fi; \ - done; \ - else echo "WARNING: could not find '$(RUNTEST)'" 1>&2; :;\ - fi; \ - exit $$exit_status -site.exp: Makefile $(EXTRA_DEJAGNU_SITE_CONFIG) - @echo 'Making a new site.exp file ...' - @echo '## these variables are automatically generated by make ##' >site.tmp - @echo '# Do not edit here. If you wish to override these values' >>site.tmp - @echo '# edit the last section' >>site.tmp - @echo 'set srcdir "$(srcdir)"' >>site.tmp - @echo "set objdir `pwd`" >>site.tmp - @echo 'set build_alias "$(build_alias)"' >>site.tmp - @echo 'set build_triplet $(build_triplet)' >>site.tmp - @echo 'set host_alias "$(host_alias)"' >>site.tmp - @echo 'set host_triplet $(host_triplet)' >>site.tmp - @echo 'set target_alias "$(target_alias)"' >>site.tmp - @echo 'set target_triplet $(target_triplet)' >>site.tmp - @list='$(EXTRA_DEJAGNU_SITE_CONFIG)'; for f in $$list; do \ - echo "## Begin content included from file $$f. Do not modify. ##" \ - && cat `test -f "$$f" || echo '$(srcdir)/'`$$f \ - && echo "## End content included from file $$f. ##" \ - || exit 1; \ - done >> site.tmp - @echo "## End of auto-generated content; you can edit from here. ##" >> site.tmp - @if test -f site.exp; then \ - sed -e '1,/^## End of auto-generated content.*##/d' site.exp >> site.tmp; \ - fi - @-rm -f site.bak - @test ! -f site.exp || mv site.exp site.bak - @mv site.tmp site.exp - -distclean-DEJAGNU: - -rm -f site.exp site.bak - -l='$(DEJATOOL)'; for tool in $$l; do \ - rm -f $$tool.sum $$tool.log; \ - done - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-DEJAGNU distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: check-am install-am install-strip - -.PHONY: all all-am check check-DEJAGNU check-am clean clean-generic \ - clean-libtool cscopelist-am ctags-am distclean \ - distclean-DEJAGNU distclean-generic distclean-libtool distdir \ - dvi dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ - uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/config/default.exp b/ruby/ext/fiddle/libffi-3.2.1/testsuite/config/default.exp deleted file mode 100644 index 90967cccc..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/config/default.exp +++ /dev/null @@ -1 +0,0 @@ -load_lib "standard.exp" diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/lib/libffi.exp b/ruby/ext/fiddle/libffi-3.2.1/testsuite/lib/libffi.exp deleted file mode 100644 index 5051d3175..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/lib/libffi.exp +++ /dev/null @@ -1,413 +0,0 @@ -# Copyright (C) 2003, 2005, 2008, 2009, 2010, 2011, 2014 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 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. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING3. If not see -# . - -proc load_gcc_lib { filename } { - global srcdir - load_file $srcdir/lib/$filename -} - -load_lib dg.exp -load_lib libgloss.exp -load_gcc_lib target-libpath.exp -load_gcc_lib wrapper.exp - - -# Define libffi callbacks for dg.exp. - -proc libffi-dg-test-1 { target_compile prog do_what extra_tool_flags } { - - # To get all \n in dg-output test strings to match printf output - # in a system that outputs it as \015\012 (i.e. not just \012), we - # need to change all \n into \r?\n. As there is no dejagnu flag - # or hook to do that, we simply change the text being tested. - # Unfortunately, we have to know that the variable is called - # dg-output-text and lives in the caller of libffi-dg-test, which - # is two calls up. Overriding proc dg-output would be longer and - # would necessarily have the same assumption. - upvar 2 dg-output-text output_match - - if { [llength $output_match] > 1 } { - regsub -all "\n" [lindex $output_match 1] "\r?\n" x - set output_match [lreplace $output_match 1 1 $x] - } - - # Set up the compiler flags, based on what we're going to do. - - set options [list] - switch $do_what { - "compile" { - set compile_type "assembly" - set output_file "[file rootname [file tail $prog]].s" - } - "link" { - set compile_type "executable" - set output_file "[file rootname [file tail $prog]].exe" - # The following line is needed for targets like the i960 where - # the default output file is b.out. Sigh. - } - "run" { - set compile_type "executable" - # FIXME: "./" is to cope with "." not being in $PATH. - # Should this be handled elsewhere? - # YES. - set output_file "./[file rootname [file tail $prog]].exe" - # This is the only place where we care if an executable was - # created or not. If it was, dg.exp will try to run it. - remote_file build delete $output_file; - } - default { - perror "$do_what: not a valid dg-do keyword" - return "" - } - } - - if { $extra_tool_flags != "" } { - lappend options "additional_flags=$extra_tool_flags" - } - - set comp_output [libffi_target_compile "$prog" "$output_file" "$compile_type" $options]; - - - return [list $comp_output $output_file] -} - - -proc libffi-dg-test { prog do_what extra_tool_flags } { - return [libffi-dg-test-1 target_compile $prog $do_what $extra_tool_flags] -} - -proc libffi-init { args } { - global gluefile wrap_flags; - global srcdir - global blddirffi - global objdir - global TOOL_OPTIONS - global tool - global libffi_include - global libffi_link_flags - global tool_root_dir - global ld_library_path - - global using_gcc - - set blddirffi [pwd]/.. - verbose "libffi $blddirffi" - - # Are we building with GCC? - set tmp [grep ../config.status "GCC='yes'"] - if { [string match $tmp "GCC='yes'"] } { - - set using_gcc "yes" - - set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a] - if {$gccdir != ""} { - set gccdir [file dirname $gccdir] - } - verbose "gccdir $gccdir" - - set ld_library_path "." - append ld_library_path ":${gccdir}" - - set compiler "${gccdir}/xgcc" - if { [is_remote host] == 0 && [which $compiler] != 0 } { - foreach i "[exec $compiler --print-multi-lib]" { - set mldir "" - regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir - set mldir [string trimright $mldir "\;@"] - if { "$mldir" == "." } { - continue - } - if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } { - append ld_library_path ":${gccdir}/${mldir}" - } - } - } - - } else { - - set using_gcc "no" - - } - - # add the library path for libffi. - append ld_library_path ":${blddirffi}/.libs" - - verbose "ld_library_path: $ld_library_path" - - # Point to the Libffi headers in libffi. - set libffi_include "${blddirffi}/include" - verbose "libffi_include $libffi_include" - - set libffi_dir "${blddirffi}/.libs" - verbose "libffi_dir $libffi_dir" - if { $libffi_dir != "" } { - set libffi_dir [file dirname ${libffi_dir}] - set libffi_link_flags "-L${libffi_dir}/.libs" - } - - set_ld_library_path_env_vars - libffi_maybe_build_wrapper "${objdir}/testglue.o" -} - -proc libffi_exit { } { - global gluefile; - - if [info exists gluefile] { - file_on_build delete $gluefile; - unset gluefile; - } -} - -proc libffi_target_compile { source dest type options } { - global gluefile wrap_flags; - global srcdir - global blddirffi - global TOOL_OPTIONS - global libffi_link_flags - global libffi_include - global target_triplet - - - if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } { - lappend options "libs=${gluefile}" - lappend options "ldflags=$wrap_flags" - } - - # TOOL_OPTIONS must come first, so that it doesn't override testcase - # specific options. - if [info exists TOOL_OPTIONS] { - lappend options [concat "additional_flags=$TOOL_OPTIONS" $options]; - } - - # search for ffi_mips.h in srcdir, too - lappend options "additional_flags=-I${libffi_include} -I${srcdir}/../include -I${libffi_include}/.." - lappend options "additional_flags=${libffi_link_flags}" - - # Darwin needs a stack execution allowed flag. - - if { [istarget "*-*-darwin9*"] || [istarget "*-*-darwin1*"] - || [istarget "*-*-darwin2*"] } { - lappend options "additional_flags=-Wl,-allow_stack_execute" - } - - # If you're building the compiler with --prefix set to a place - # where it's not yet installed, then the linker won't be able to - # find the libgcc used by libffi.dylib. We could pass the - # -dylib_file option, but that's complicated, and it's much easier - # to just make the linker find libgcc using -L options. - if { [string match "*-*-darwin*" $target_triplet] } { - lappend options "libs= -shared-libgcc" - } - - if { [string match "*-*-openbsd*" $target_triplet] } { - lappend options "libs= -lpthread" - } - - lappend options "libs= -lffi" - - if { [string match "aarch64*-*-linux*" $target_triplet] } { - lappend options "libs= -lpthread" - } - - if { [string match "*.cc" $source] } { - lappend options "c++" - } - - verbose "options: $options" - return [target_compile $source $dest $type $options] -} - -# Utility routines. - -# -# search_for -- looks for a string match in a file -# -proc search_for { file pattern } { - set fd [open $file r] - while { [gets $fd cur_line]>=0 } { - if [string match "*$pattern*" $cur_line] then { - close $fd - return 1 - } - } - close $fd - return 0 -} - -# Modified dg-runtest that can cycle through a list of optimization options -# as c-torture does. -proc libffi-dg-runtest { testcases default-extra-flags } { - global runtests - - foreach test $testcases { - # If we're only testing specific files and this isn't one of - # them, skip it. - if ![runtest_file_p $runtests $test] { - continue - } - - # Look for a loop within the source code - if we don't find one, - # don't pass -funroll[-all]-loops. - global torture_with_loops torture_without_loops - if [expr [search_for $test "for*("]+[search_for $test "while*("]] { - set option_list $torture_with_loops - } else { - set option_list $torture_without_loops - } - - set nshort [file tail [file dirname $test]]/[file tail $test] - - foreach flags $option_list { - verbose "Testing $nshort, $flags" 1 - dg-test $test $flags ${default-extra-flags} - } - } -} - -proc run-many-tests { testcases extra_flags } { - global using_gcc - if { [string match $using_gcc "yes"] } { - set common "-W -Wall -Wno-psabi" - set optimizations { "-O0" "-O2" "-O3" "-Os" "-O2 -fomit-frame-pointer" } - } else { - # Assume we are using the vendor compiler. - set common "" - set optimizations { "" } - } - - set targetabis { "" } - if [string match $using_gcc "yes"] { - if [istarget "i?86-*-*"] { - set targetabis { - "" - "-DABI_NUM=FFI_STDCALL -DABI_ATTR=__STDCALL__" - "-DABI_NUM=FFI_THISCALL -DABI_ATTR=__THISCALL__" - "-DABI_NUM=FFI_FASTCALL -DABI_ATTR=__FASTCALL__" - } - } - } - - set common [ concat $common $extra_flags ] - foreach test $testcases { - set testname [file tail $test] - if [search_for $test "ABI_NUM"] { - set abis $targetabis - } else { - set abis { "" } - } - foreach opt $optimizations { - foreach abi $abis { - set options [concat $common $opt $abi] - verbose "Testing $testname, $options" 1 - dg-test $test $options "" - } - } - } -} - -# Like check_conditional_xfail, but callable from a dg test. - -proc dg-xfail-if { args } { - set args [lreplace $args 0 0] - set selector "target [join [lindex $args 1]]" - if { [dg-process-target $selector] == "S" } { - global compiler_conditional_xfail_data - set compiler_conditional_xfail_data $args - } -} - -proc check-flags { args } { - - # The args are within another list; pull them out. - set args [lindex $args 0] - - # The next two arguments are optional. If they were not specified, - # use the defaults. - if { [llength $args] == 2 } { - lappend $args [list "*"] - } - if { [llength $args] == 3 } { - lappend $args [list ""] - } - - # If the option strings are the defaults, or the same as the - # defaults, there is no need to call check_conditional_xfail to - # compare them to the actual options. - if { [string compare [lindex $args 2] "*"] == 0 - && [string compare [lindex $args 3] "" ] == 0 } { - set result 1 - } else { - # The target list might be an effective-target keyword, so replace - # the original list with "*-*-*", since we already know it matches. - set result [check_conditional_xfail [lreplace $args 1 1 "*-*-*"]] - } - - return $result -} - -proc dg-skip-if { args } { - # Verify the number of arguments. The last two are optional. - set args [lreplace $args 0 0] - if { [llength $args] < 2 || [llength $args] > 4 } { - error "dg-skip-if 2: need 2, 3, or 4 arguments" - } - - # Don't bother if we're already skipping the test. - upvar dg-do-what dg-do-what - if { [lindex ${dg-do-what} 1] == "N" } { - return - } - - set selector [list target [lindex $args 1]] - if { [dg-process-target $selector] == "S" } { - if [check-flags $args] { - upvar dg-do-what dg-do-what - set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] - } - } -} - -# We need to make sure that additional_files and additional_sources -# are both cleared out after every test. It is not enough to clear -# them out *before* the next test run because gcc-target-compile gets -# run directly from some .exp files (outside of any test). (Those -# uses should eventually be eliminated.) - -# Because the DG framework doesn't provide a hook that is run at the -# end of a test, we must replace dg-test with a wrapper. - -if { [info procs saved-dg-test] == [list] } { - rename dg-test saved-dg-test - - proc dg-test { args } { - global additional_files - global additional_sources - global errorInfo - - if { [ catch { eval saved-dg-test $args } errmsg ] } { - set saved_info $errorInfo - set additional_files "" - set additional_sources "" - error $errmsg $saved_info - } - set additional_files "" - set additional_sources "" - } -} - -# Local Variables: -# tcl-indent-level:4 -# End: diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/lib/target-libpath.exp b/ruby/ext/fiddle/libffi-3.2.1/testsuite/lib/target-libpath.exp deleted file mode 100644 index 6b7beba93..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/lib/target-libpath.exp +++ /dev/null @@ -1,283 +0,0 @@ -# Copyright (C) 2004, 2005, 2007 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 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. -# -# You should have received a copy of the GNU General Public License -# along with GCC; see the file COPYING3. If not see -# . - -# This file was contributed by John David Anglin (dave.anglin@nrc-cnrc.gc.ca) - -set orig_environment_saved 0 -set orig_ld_library_path_saved 0 -set orig_ld_run_path_saved 0 -set orig_shlib_path_saved 0 -set orig_ld_libraryn32_path_saved 0 -set orig_ld_library64_path_saved 0 -set orig_ld_library_path_32_saved 0 -set orig_ld_library_path_64_saved 0 -set orig_dyld_library_path_saved 0 -set orig_path_saved 0 - -####################################### -# proc set_ld_library_path_env_vars { } -####################################### - -proc set_ld_library_path_env_vars { } { - global ld_library_path - global orig_environment_saved - global orig_ld_library_path_saved - global orig_ld_run_path_saved - global orig_shlib_path_saved - global orig_ld_libraryn32_path_saved - global orig_ld_library64_path_saved - global orig_ld_library_path_32_saved - global orig_ld_library_path_64_saved - global orig_dyld_library_path_saved - global orig_path_saved - global orig_ld_library_path - global orig_ld_run_path - global orig_shlib_path - global orig_ld_libraryn32_path - global orig_ld_library64_path - global orig_ld_library_path_32 - global orig_ld_library_path_64 - global orig_dyld_library_path - global orig_path - global GCC_EXEC_PREFIX - - # Set the relocated compiler prefix, but only if the user hasn't specified one. - if { [info exists GCC_EXEC_PREFIX] && ![info exists env(GCC_EXEC_PREFIX)] } { - setenv GCC_EXEC_PREFIX "$GCC_EXEC_PREFIX" - } - - # Setting the ld library path causes trouble when testing cross-compilers. - if { [is_remote target] } { - return - } - - if { $orig_environment_saved == 0 } { - global env - - set orig_environment_saved 1 - - # Save the original environment. - if [info exists env(LD_LIBRARY_PATH)] { - set orig_ld_library_path "$env(LD_LIBRARY_PATH)" - set orig_ld_library_path_saved 1 - } - if [info exists env(LD_RUN_PATH)] { - set orig_ld_run_path "$env(LD_RUN_PATH)" - set orig_ld_run_path_saved 1 - } - if [info exists env(SHLIB_PATH)] { - set orig_shlib_path "$env(SHLIB_PATH)" - set orig_shlib_path_saved 1 - } - if [info exists env(LD_LIBRARYN32_PATH)] { - set orig_ld_libraryn32_path "$env(LD_LIBRARYN32_PATH)" - set orig_ld_libraryn32_path_saved 1 - } - if [info exists env(LD_LIBRARY64_PATH)] { - set orig_ld_library64_path "$env(LD_LIBRARY64_PATH)" - set orig_ld_library64_path_saved 1 - } - if [info exists env(LD_LIBRARY_PATH_32)] { - set orig_ld_library_path_32 "$env(LD_LIBRARY_PATH_32)" - set orig_ld_library_path_32_saved 1 - } - if [info exists env(LD_LIBRARY_PATH_64)] { - set orig_ld_library_path_64 "$env(LD_LIBRARY_PATH_64)" - set orig_ld_library_path_64_saved 1 - } - if [info exists env(DYLD_LIBRARY_PATH)] { - set orig_dyld_library_path "$env(DYLD_LIBRARY_PATH)" - set orig_dyld_library_path_saved 1 - } - if [info exists env(PATH)] { - set orig_path "$env(PATH)" - set orig_path_saved 1 - } - } - - # We need to set ld library path in the environment. Currently, - # unix.exp doesn't set the environment correctly for all systems. - # It only sets SHLIB_PATH and LD_LIBRARY_PATH when it executes a - # program. We also need the environment set for compilations, etc. - # - # On IRIX 6, we have to set variables akin to LD_LIBRARY_PATH, but - # called LD_LIBRARYN32_PATH (for the N32 ABI) and LD_LIBRARY64_PATH - # (for the 64-bit ABI). The same applies to Darwin (DYLD_LIBRARY_PATH), - # Solaris 32 bit (LD_LIBRARY_PATH_32), Solaris 64 bit (LD_LIBRARY_PATH_64), - # and HP-UX (SHLIB_PATH). In some cases, the variables are independent - # of LD_LIBRARY_PATH, and in other cases LD_LIBRARY_PATH is used if the - # variable is not defined. - # - # Doing this is somewhat of a hack as ld_library_path gets repeated in - # SHLIB_PATH and LD_LIBRARY_PATH when unix_load sets these variables. - if { $orig_ld_library_path_saved } { - setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path" - } else { - setenv LD_LIBRARY_PATH "$ld_library_path" - } - if { $orig_ld_run_path_saved } { - setenv LD_RUN_PATH "$ld_library_path:$orig_ld_run_path" - } else { - setenv LD_RUN_PATH "$ld_library_path" - } - # The default shared library dynamic path search for 64-bit - # HP-UX executables searches LD_LIBRARY_PATH before SHLIB_PATH. - # LD_LIBRARY_PATH isn't used for 32-bit executables. Thus, we - # set LD_LIBRARY_PATH and SHLIB_PATH as if they were independent. - if { $orig_shlib_path_saved } { - setenv SHLIB_PATH "$ld_library_path:$orig_shlib_path" - } else { - setenv SHLIB_PATH "$ld_library_path" - } - if { $orig_ld_libraryn32_path_saved } { - setenv LD_LIBRARYN32_PATH "$ld_library_path:$orig_ld_libraryn32_path" - } elseif { $orig_ld_library_path_saved } { - setenv LD_LIBRARYN32_PATH "$ld_library_path:$orig_ld_library_path" - } else { - setenv LD_LIBRARYN32_PATH "$ld_library_path" - } - if { $orig_ld_library64_path_saved } { - setenv LD_LIBRARY64_PATH "$ld_library_path:$orig_ld_library64_path" - } elseif { $orig_ld_library_path_saved } { - setenv LD_LIBRARY64_PATH "$ld_library_path:$orig_ld_library_path" - } else { - setenv LD_LIBRARY64_PATH "$ld_library_path" - } - if { $orig_ld_library_path_32_saved } { - setenv LD_LIBRARY_PATH_32 "$ld_library_path:$orig_ld_library_path_32" - } elseif { $orig_ld_library_path_saved } { - setenv LD_LIBRARY_PATH_32 "$ld_library_path:$orig_ld_library_path" - } else { - setenv LD_LIBRARY_PATH_32 "$ld_library_path" - } - if { $orig_ld_library_path_64_saved } { - setenv LD_LIBRARY_PATH_64 "$ld_library_path:$orig_ld_library_path_64" - } elseif { $orig_ld_library_path_saved } { - setenv LD_LIBRARY_PATH_64 "$ld_library_path:$orig_ld_library_path" - } else { - setenv LD_LIBRARY_PATH_64 "$ld_library_path" - } - if { $orig_dyld_library_path_saved } { - setenv DYLD_LIBRARY_PATH "$ld_library_path:$orig_dyld_library_path" - } else { - setenv DYLD_LIBRARY_PATH "$ld_library_path" - } - if { [istarget *-*-cygwin*] || [istarget *-*-mingw*] } { - if { $orig_path_saved } { - setenv PATH "$ld_library_path:$orig_path" - } else { - setenv PATH "$ld_library_path" - } - } - - verbose -log "set_ld_library_path_env_vars: ld_library_path=$ld_library_path" -} - -####################################### -# proc restore_ld_library_path_env_vars { } -####################################### - -proc restore_ld_library_path_env_vars { } { - global orig_environment_saved - global orig_ld_library_path_saved - global orig_ld_run_path_saved - global orig_shlib_path_saved - global orig_ld_libraryn32_path_saved - global orig_ld_library64_path_saved - global orig_ld_library_path_32_saved - global orig_ld_library_path_64_saved - global orig_dyld_library_path_saved - global orig_path_saved - global orig_ld_library_path - global orig_ld_run_path - global orig_shlib_path - global orig_ld_libraryn32_path - global orig_ld_library64_path - global orig_ld_library_path_32 - global orig_ld_library_path_64 - global orig_dyld_library_path - global orig_path - - if { $orig_environment_saved == 0 } { - return - } - - if { $orig_ld_library_path_saved } { - setenv LD_LIBRARY_PATH "$orig_ld_library_path" - } elseif [info exists env(LD_LIBRARY_PATH)] { - unsetenv LD_LIBRARY_PATH - } - if { $orig_ld_run_path_saved } { - setenv LD_RUN_PATH "$orig_ld_run_path" - } elseif [info exists env(LD_RUN_PATH)] { - unsetenv LD_RUN_PATH - } - if { $orig_shlib_path_saved } { - setenv SHLIB_PATH "$orig_shlib_path" - } elseif [info exists env(SHLIB_PATH)] { - unsetenv SHLIB_PATH - } - if { $orig_ld_libraryn32_path_saved } { - setenv LD_LIBRARYN32_PATH "$orig_ld_libraryn32_path" - } elseif [info exists env(LD_LIBRARYN32_PATH)] { - unsetenv LD_LIBRARYN32_PATH - } - if { $orig_ld_library64_path_saved } { - setenv LD_LIBRARY64_PATH "$orig_ld_library64_path" - } elseif [info exists env(LD_LIBRARY64_PATH)] { - unsetenv LD_LIBRARY64_PATH - } - if { $orig_ld_library_path_32_saved } { - setenv LD_LIBRARY_PATH_32 "$orig_ld_library_path_32" - } elseif [info exists env(LD_LIBRARY_PATH_32)] { - unsetenv LD_LIBRARY_PATH_32 - } - if { $orig_ld_library_path_64_saved } { - setenv LD_LIBRARY_PATH_64 "$orig_ld_library_path_64" - } elseif [info exists env(LD_LIBRARY_PATH_64)] { - unsetenv LD_LIBRARY_PATH_64 - } - if { $orig_dyld_library_path_saved } { - setenv DYLD_LIBRARY_PATH "$orig_dyld_library_path" - } elseif [info exists env(DYLD_LIBRARY_PATH)] { - unsetenv DYLD_LIBRARY_PATH - } - if { $orig_path_saved } { - setenv PATH "$orig_path" - } elseif [info exists env(PATH)] { - unsetenv PATH - } -} - -####################################### -# proc get_shlib_extension { } -####################################### - -proc get_shlib_extension { } { - global shlib_ext - - if { [ istarget *-*-darwin* ] } { - set shlib_ext "dylib" - } elseif { [ istarget *-*-cygwin* ] || [ istarget *-*-mingw* ] } { - set shlib_ext "dll" - } elseif { [ istarget hppa*-*-hpux* ] } { - set shlib_ext "sl" - } else { - set shlib_ext "so" - } - return $shlib_ext -} - diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/lib/wrapper.exp b/ruby/ext/fiddle/libffi-3.2.1/testsuite/lib/wrapper.exp deleted file mode 100644 index 4e5ae435a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/lib/wrapper.exp +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (C) 2004, 2007 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 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. -# -# You should have received a copy of the GNU General Public License -# along with GCC; see the file COPYING3. If not see -# . - -# This file contains GCC-specifics for status wrappers for test programs. - -# ${tool}_maybe_build_wrapper -- Build wrapper object if the target -# needs it. FILENAME is the path to the wrapper file. If there are -# additional arguments, they are command-line options to provide to -# the compiler when compiling FILENAME. - -proc ${tool}_maybe_build_wrapper { filename args } { - global gluefile wrap_flags - - if { [target_info needs_status_wrapper] != "" \ - && [target_info needs_status_wrapper] != "0" \ - && ![info exists gluefile] } { - set saved_wrap_compile_flags [target_info wrap_compile_flags] - set flags [join $args " "] - # The wrapper code may contain code that gcc objects on. This - # became true for dejagnu-1.4.4. The set of warnings and code - # that gcc objects on may change, so just make sure -w is always - # passed to turn off all warnings. - set_currtarget_info wrap_compile_flags \ - "$saved_wrap_compile_flags -w $flags" - set result [build_wrapper $filename] - set_currtarget_info wrap_compile_flags "$saved_wrap_compile_flags" - if { $result != "" } { - set gluefile [lindex $result 0] - set wrap_flags [lindex $result 1] - } - } -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/call.exp b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/call.exp deleted file mode 100644 index 5177f07f1..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/call.exp +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (C) 2003, 2006, 2009, 2010, 2014 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 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. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING3. If not see -# . - -dg-init -libffi-init - -global srcdir subdir - -set tlist [lsearch -inline -all -not -glob [lsort [glob -nocomplain -- $srcdir/$subdir/*.{c,cc}]] *complex*] -set ctlist [lsearch -inline -all -glob [lsort [glob -nocomplain -- $srcdir/$subdir/*.{c,cc}]] *complex*] - -run-many-tests $tlist "" - -if { ![istarget s390*] } { - - foreach test $ctlist { - unsupported "$test" - } - -} else { - - run-many-tests $ctlist "" - -} - -dg-finish - -# Local Variables: -# tcl-indent-level:4 -# End: diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn0.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn0.c deleted file mode 100644 index a579ff6c9..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn0.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple values passing from different type. - Also, exceed the limit of gpr and fpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20030828 */ - - - - -/* { dg-do run } */ -#include "ffitest.h" - -static void -closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(unsigned long long *)args[0] + (int)(*(int *)args[1]) + - (int)(*(unsigned long long *)args[2]) + (int)*(int *)args[3] + - (int)(*(signed short *)args[4]) + - (int)(*(unsigned long long *)args[5]) + - (int)*(int *)args[6] + (int)(*(int *)args[7]) + - (int)(*(double *)args[8]) + (int)*(int *)args[9] + - (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(int *)args[13]) + - (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(unsigned long long *)args[0], (int)(*(int *)args[1]), - (int)(*(unsigned long long *)args[2]), - (int)*(int *)args[3], (int)(*(signed short *)args[4]), - (int)(*(unsigned long long *)args[5]), - (int)*(int *)args[6], (int)(*(int *)args[7]), - (int)(*(double *)args[8]), (int)*(int *)args[9], - (int)(*(int *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(int *)args[13]), - (int)(*(int *)args[14]),*(int *)args[15], - (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); - -} - -typedef int (*closure_test_type0)(unsigned long long, int, unsigned long long, - int, signed short, unsigned long long, int, - int, double, int, int, float, int, int, - int, int); - -int main (void) -{ - ffi_cif cif; - void * code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int res; - - cl_arg_types[0] = &ffi_type_uint64; - cl_arg_types[1] = &ffi_type_sint; - cl_arg_types[2] = &ffi_type_uint64; - cl_arg_types[3] = &ffi_type_sint; - cl_arg_types[4] = &ffi_type_sshort; - cl_arg_types[5] = &ffi_type_uint64; - cl_arg_types[6] = &ffi_type_sint; - cl_arg_types[7] = &ffi_type_sint; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_sint; - cl_arg_types[10] = &ffi_type_sint; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_sint; - cl_arg_types[13] = &ffi_type_sint; - cl_arg_types[14] = &ffi_type_sint; - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn0, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type0)code)) - (1LL, 2, 3LL, 4, 127, 429LL, 7, 8, 9.5, 10, 11, 12, 13, - 19, 21, 1); - /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 680" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn1.c deleted file mode 100644 index 91231738c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn1.c +++ /dev/null @@ -1,81 +0,0 @@ -/* Area: closure_call. - Purpose: Check multiple values passing from different type. - Also, exceed the limit of gpr and fpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - - -static void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(float *)args[0] +(int)(*(float *)args[1]) + - (int)(*(float *)args[2]) + (int)*(float *)args[3] + - (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) + - (int)*(float *)args[6] + (int)(*(int *)args[7]) + - (int)(*(double*)args[8]) + (int)*(int *)args[9] + - (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(int *)args[13]) + - (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(float *)args[0], (int)(*(float *)args[1]), - (int)(*(float *)args[2]), (int)*(float *)args[3], - (int)(*(signed short *)args[4]), (int)(*(float *)args[5]), - (int)*(float *)args[6], (int)(*(int *)args[7]), - (int)(*(double *)args[8]), (int)*(int *)args[9], - (int)(*(int *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(int *)args[13]), - (int)(*(int *)args[14]), *(int *)args[15], - (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); -} - -typedef int (*closure_test_type1)(float, float, float, float, signed short, - float, float, int, double, int, int, float, - int, int, int, int); -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int res; - - cl_arg_types[0] = &ffi_type_float; - cl_arg_types[1] = &ffi_type_float; - cl_arg_types[2] = &ffi_type_float; - cl_arg_types[3] = &ffi_type_float; - cl_arg_types[4] = &ffi_type_sshort; - cl_arg_types[5] = &ffi_type_float; - cl_arg_types[6] = &ffi_type_float; - cl_arg_types[7] = &ffi_type_sint; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_sint; - cl_arg_types[10] = &ffi_type_sint; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_sint; - cl_arg_types[13] = &ffi_type_sint; - cl_arg_types[14] = &ffi_type_sint; - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type1)code)) - (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13, - 19, 21, 1); - /* { dg-output "1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 255" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn2.c deleted file mode 100644 index 08ff9d922..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn2.c +++ /dev/null @@ -1,81 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple values passing from different type. - Also, exceed the limit of gpr and fpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void closure_test_fn2(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(double *)args[0] +(int)(*(double *)args[1]) + - (int)(*(double *)args[2]) + (int)*(double *)args[3] + - (int)(*(signed short *)args[4]) + (int)(*(double *)args[5]) + - (int)*(double *)args[6] + (int)(*(int *)args[7]) + - (int)(*(double *)args[8]) + (int)*(int *)args[9] + - (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(float *)args[13]) + - (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(double *)args[0], (int)(*(double *)args[1]), - (int)(*(double *)args[2]), (int)*(double *)args[3], - (int)(*(signed short *)args[4]), (int)(*(double *)args[5]), - (int)*(double *)args[6], (int)(*(int *)args[7]), - (int)(*(double*)args[8]), (int)*(int *)args[9], - (int)(*(int *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(float *)args[13]), - (int)(*(int *)args[14]), *(int *)args[15], (int)(intptr_t)userdata, - (int)*(ffi_arg *)resp); -} - -typedef int (*closure_test_type2)(double, double, double, double, signed short, - double, double, int, double, int, int, float, - int, float, int, int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int res; - - cl_arg_types[0] = &ffi_type_double; - cl_arg_types[1] = &ffi_type_double; - cl_arg_types[2] = &ffi_type_double; - cl_arg_types[3] = &ffi_type_double; - cl_arg_types[4] = &ffi_type_sshort; - cl_arg_types[5] = &ffi_type_double; - cl_arg_types[6] = &ffi_type_double; - cl_arg_types[7] = &ffi_type_sint; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_sint; - cl_arg_types[10] = &ffi_type_sint; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_sint; - cl_arg_types[13] = &ffi_type_float; - cl_arg_types[14] = &ffi_type_sint; - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn2, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type2)code)) - (1, 2, 3, 4, 127, 5, 6, 8, 9, 10, 11, 12.0, 13, - 19.0, 21, 1); - /* { dg-output "1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 255" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn3.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn3.c deleted file mode 100644 index 9b54d805c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn3.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple values passing from different type. - Also, exceed the limit of gpr and fpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void closure_test_fn3(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) - { - *(ffi_arg*)resp = - (int)*(float *)args[0] +(int)(*(float *)args[1]) + - (int)(*(float *)args[2]) + (int)*(float *)args[3] + - (int)(*(float *)args[4]) + (int)(*(float *)args[5]) + - (int)*(float *)args[6] + (int)(*(float *)args[7]) + - (int)(*(double *)args[8]) + (int)*(int *)args[9] + - (int)(*(float *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(float *)args[13]) + - (int)(*(float *)args[14]) + *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(float *)args[0], (int)(*(float *)args[1]), - (int)(*(float *)args[2]), (int)*(float *)args[3], - (int)(*(float *)args[4]), (int)(*(float *)args[5]), - (int)*(float *)args[6], (int)(*(float *)args[7]), - (int)(*(double *)args[8]), (int)*(int *)args[9], - (int)(*(float *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(float *)args[13]), - (int)(*(float *)args[14]), *(int *)args[15], (int)(intptr_t)userdata, - (int)*(ffi_arg *)resp); - - } - -typedef int (*closure_test_type3)(float, float, float, float, float, float, - float, float, double, int, float, float, int, - float, float, int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int res; - - cl_arg_types[0] = &ffi_type_float; - cl_arg_types[1] = &ffi_type_float; - cl_arg_types[2] = &ffi_type_float; - cl_arg_types[3] = &ffi_type_float; - cl_arg_types[4] = &ffi_type_float; - cl_arg_types[5] = &ffi_type_float; - cl_arg_types[6] = &ffi_type_float; - cl_arg_types[7] = &ffi_type_float; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_sint; - cl_arg_types[10] = &ffi_type_float; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_sint; - cl_arg_types[13] = &ffi_type_float; - cl_arg_types[14] = &ffi_type_float; - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn3, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type3)code)) - (1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9, 10, 11.11, 12.0, 13, - 19.19, 21.21, 1); - /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 12 13 19 21 1 3: 135" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 135" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn4.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn4.c deleted file mode 100644 index d4a1530b0..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn4.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple long long values passing. - Also, exceed the limit of gpr and fpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20031026 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -static void -closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(unsigned long long *)args[0] + (int)*(unsigned long long *)args[1] + - (int)*(unsigned long long *)args[2] + (int)*(unsigned long long *)args[3] + - (int)*(unsigned long long *)args[4] + (int)*(unsigned long long *)args[5] + - (int)*(unsigned long long *)args[6] + (int)*(unsigned long long *)args[7] + - (int)*(unsigned long long *)args[8] + (int)*(unsigned long long *)args[9] + - (int)*(unsigned long long *)args[10] + - (int)*(unsigned long long *)args[11] + - (int)*(unsigned long long *)args[12] + - (int)*(unsigned long long *)args[13] + - (int)*(unsigned long long *)args[14] + - *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(unsigned long long *)args[0], - (int)*(unsigned long long *)args[1], - (int)*(unsigned long long *)args[2], - (int)*(unsigned long long *)args[3], - (int)*(unsigned long long *)args[4], - (int)*(unsigned long long *)args[5], - (int)*(unsigned long long *)args[6], - (int)*(unsigned long long *)args[7], - (int)*(unsigned long long *)args[8], - (int)*(unsigned long long *)args[9], - (int)*(unsigned long long *)args[10], - (int)*(unsigned long long *)args[11], - (int)*(unsigned long long *)args[12], - (int)*(unsigned long long *)args[13], - (int)*(unsigned long long *)args[14], - *(int *)args[15], - (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); - -} - -typedef int (*closure_test_type0)(unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int i, res; - - for (i = 0; i < 15; i++) { - cl_arg_types[i] = &ffi_type_uint64; - } - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn0, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type0)code)) - (1LL, 2LL, 3LL, 4LL, 127LL, 429LL, 7LL, 8LL, 9LL, 10LL, 11LL, 12LL, - 13LL, 19LL, 21LL, 1); - /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 680" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn5.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn5.c deleted file mode 100644 index 99074426c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn5.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple long long values passing. - Exceed the limit of gpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20031026 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void -closure_test_fn5(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(unsigned long long *)args[0] + (int)*(unsigned long long *)args[1] + - (int)*(unsigned long long *)args[2] + (int)*(unsigned long long *)args[3] + - (int)*(unsigned long long *)args[4] + (int)*(unsigned long long *)args[5] + - (int)*(unsigned long long *)args[6] + (int)*(unsigned long long *)args[7] + - (int)*(unsigned long long *)args[8] + (int)*(unsigned long long *)args[9] + - (int)*(int *)args[10] + - (int)*(unsigned long long *)args[11] + - (int)*(unsigned long long *)args[12] + - (int)*(unsigned long long *)args[13] + - (int)*(unsigned long long *)args[14] + - *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(unsigned long long *)args[0], - (int)*(unsigned long long *)args[1], - (int)*(unsigned long long *)args[2], - (int)*(unsigned long long *)args[3], - (int)*(unsigned long long *)args[4], - (int)*(unsigned long long *)args[5], - (int)*(unsigned long long *)args[6], - (int)*(unsigned long long *)args[7], - (int)*(unsigned long long *)args[8], - (int)*(unsigned long long *)args[9], - (int)*(int *)args[10], - (int)*(unsigned long long *)args[11], - (int)*(unsigned long long *)args[12], - (int)*(unsigned long long *)args[13], - (int)*(unsigned long long *)args[14], - *(int *)args[15], - (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); - -} - -typedef int (*closure_test_type0)(unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - int, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int i, res; - - for (i = 0; i < 10; i++) { - cl_arg_types[i] = &ffi_type_uint64; - } - cl_arg_types[10] = &ffi_type_sint; - for (i = 11; i < 15; i++) { - cl_arg_types[i] = &ffi_type_uint64; - } - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn5, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type0)code)) - (1LL, 2LL, 3LL, 4LL, 127LL, 429LL, 7LL, 8LL, 9LL, 10LL, 11, 12LL, - 13LL, 19LL, 21LL, 1); - /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 680" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn6.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn6.c deleted file mode 100644 index 73c54fd6b..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_fn6.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple values passing from different type. - Also, exceed the limit of gpr and fpr registers on PowerPC. - Limitations: none. - PR: PR23404 - Originator: 20050830 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void -closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(unsigned long long *)args[0] + - (int)(*(unsigned long long *)args[1]) + - (int)(*(unsigned long long *)args[2]) + - (int)*(unsigned long long *)args[3] + - (int)(*(int *)args[4]) + (int)(*(double *)args[5]) + - (int)*(double *)args[6] + (int)(*(float *)args[7]) + - (int)(*(double *)args[8]) + (int)*(double *)args[9] + - (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(int *)args[13]) + - (int)(*(double *)args[14]) + (int)*(double *)args[15] + - (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(unsigned long long *)args[0], - (int)(*(unsigned long long *)args[1]), - (int)(*(unsigned long long *)args[2]), - (int)*(unsigned long long *)args[3], - (int)(*(int *)args[4]), (int)(*(double *)args[5]), - (int)*(double *)args[6], (int)(*(float *)args[7]), - (int)(*(double *)args[8]), (int)*(double *)args[9], - (int)(*(int *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(int *)args[13]), - (int)(*(double *)args[14]), (int)(*(double *)args[15]), - (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); - -} - -typedef int (*closure_test_type0)(unsigned long long, - unsigned long long, - unsigned long long, - unsigned long long, - int, double, double, float, double, double, - int, float, int, int, double, double); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int res; - - cl_arg_types[0] = &ffi_type_uint64; - cl_arg_types[1] = &ffi_type_uint64; - cl_arg_types[2] = &ffi_type_uint64; - cl_arg_types[3] = &ffi_type_uint64; - cl_arg_types[4] = &ffi_type_sint; - cl_arg_types[5] = &ffi_type_double; - cl_arg_types[6] = &ffi_type_double; - cl_arg_types[7] = &ffi_type_float; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_double; - cl_arg_types[10] = &ffi_type_sint; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_sint; - cl_arg_types[13] = &ffi_type_sint; - cl_arg_types[14] = &ffi_type_double; - cl_arg_types[15] = &ffi_type_double; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn0, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type0)code)) - (1, 2, 3, 4, 127, 429., 7., 8., 9.5, 10., 11, 12., 13, - 19, 21., 1.); - /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 680" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_loc_fn0.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_loc_fn0.c deleted file mode 100644 index b3afa0bbd..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_loc_fn0.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple values passing from different type. - Also, exceed the limit of gpr and fpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20030828 */ - - - - -/* { dg-do run } */ -#include "ffitest.h" - -static void -closure_loc_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(unsigned long long *)args[0] + (int)(*(int *)args[1]) + - (int)(*(unsigned long long *)args[2]) + (int)*(int *)args[3] + - (int)(*(signed short *)args[4]) + - (int)(*(unsigned long long *)args[5]) + - (int)*(int *)args[6] + (int)(*(int *)args[7]) + - (int)(*(double *)args[8]) + (int)*(int *)args[9] + - (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(int *)args[13]) + - (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(unsigned long long *)args[0], (int)(*(int *)args[1]), - (int)(*(unsigned long long *)args[2]), - (int)*(int *)args[3], (int)(*(signed short *)args[4]), - (int)(*(unsigned long long *)args[5]), - (int)*(int *)args[6], (int)(*(int *)args[7]), - (int)(*(double *)args[8]), (int)*(int *)args[9], - (int)(*(int *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(int *)args[13]), - (int)(*(int *)args[14]),*(int *)args[15], - (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); - -} - -typedef int (*closure_loc_test_type0)(unsigned long long, int, unsigned long long, - int, signed short, unsigned long long, int, - int, double, int, int, float, int, int, - int, int); - -int main (void) -{ - ffi_cif cif; - ffi_closure *pcl; - ffi_type * cl_arg_types[17]; - int res; - void *codeloc; - - cl_arg_types[0] = &ffi_type_uint64; - cl_arg_types[1] = &ffi_type_sint; - cl_arg_types[2] = &ffi_type_uint64; - cl_arg_types[3] = &ffi_type_sint; - cl_arg_types[4] = &ffi_type_sshort; - cl_arg_types[5] = &ffi_type_uint64; - cl_arg_types[6] = &ffi_type_sint; - cl_arg_types[7] = &ffi_type_sint; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_sint; - cl_arg_types[10] = &ffi_type_sint; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_sint; - cl_arg_types[13] = &ffi_type_sint; - cl_arg_types[14] = &ffi_type_sint; - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - pcl = ffi_closure_alloc(sizeof(ffi_closure), &codeloc); - CHECK(pcl != NULL); - CHECK(codeloc != NULL); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_loc_test_fn0, - (void *) 3 /* userdata */, codeloc) == FFI_OK); - - CHECK(memcmp(pcl, codeloc, sizeof(*pcl)) == 0); - - res = (*((closure_loc_test_type0)codeloc)) - (1LL, 2, 3LL, 4, 127, 429LL, 7, 8, 9.5, 10, 11, 12, 13, - 19, 21, 1); - /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 680" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_simple.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_simple.c deleted file mode 100644 index 5a4e728d4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/closure_simple.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Area: closure_call - Purpose: Check simple closure handling with all ABIs - Limitations: none. - PR: none. - Originator: */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void -closure_test(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata) -{ - *(ffi_arg*)resp = - (int)*(int *)args[0] + (int)(*(int *)args[1]) - + (int)(*(int *)args[2]) + (int)(*(int *)args[3]) - + (int)(intptr_t)userdata; - - printf("%d %d %d %d: %d\n", - (int)*(int *)args[0], (int)(*(int *)args[1]), - (int)(*(int *)args[2]), (int)(*(int *)args[3]), - (int)*(ffi_arg *)resp); - -} - -typedef int (ABI_ATTR *closure_test_type0)(int, int, int, int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int res; - - cl_arg_types[0] = &ffi_type_uint; - cl_arg_types[1] = &ffi_type_uint; - cl_arg_types[2] = &ffi_type_uint; - cl_arg_types[3] = &ffi_type_uint; - cl_arg_types[4] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 4, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*(closure_test_type0)code)(0, 1, 2, 3); - /* { dg-output "0 1 2 3: 9" } */ - - printf("res: %d\n",res); - /* { dg-output "\nres: 9" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_12byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_12byte.c deleted file mode 100644 index ea0825d17..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_12byte.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_12byte { - int a; - int b; - int c; -} cls_struct_12byte; - -cls_struct_12byte cls_struct_12byte_fn(struct cls_struct_12byte b1, - struct cls_struct_12byte b2) -{ - struct cls_struct_12byte result; - - result.a = b1.a + b2.a; - result.b = b1.b + b2.b; - result.c = b1.c + b2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", b1.a, b1.b, b1.c, b2.a, b2.b, b2.c, - result.a, result.b, result.c); - - return result; -} - -static void cls_struct_12byte_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args , void* userdata __UNUSED__) -{ - struct cls_struct_12byte b1, b2; - - b1 = *(struct cls_struct_12byte*)(args[0]); - b2 = *(struct cls_struct_12byte*)(args[1]); - - *(cls_struct_12byte*)resp = cls_struct_12byte_fn(b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_12byte h_dbl = { 7, 4, 9 }; - struct cls_struct_12byte j_dbl = { 1, 5, 3 }; - struct cls_struct_12byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_sint; - cls_struct_fields[1] = &ffi_type_sint; - cls_struct_fields[2] = &ffi_type_sint; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &h_dbl; - args_dbl[1] = &j_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_12byte_fn), &res_dbl, args_dbl); - /* { dg-output "7 4 9 1 5 3: 8 9 12" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 8 9 12" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_12byte_gn, NULL, code) == FFI_OK); - - res_dbl.a = 0; - res_dbl.b = 0; - res_dbl.c = 0; - - res_dbl = ((cls_struct_12byte(*)(cls_struct_12byte, cls_struct_12byte))(code))(h_dbl, j_dbl); - /* { dg-output "\n7 4 9 1 5 3: 8 9 12" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 8 9 12" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_16byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_16byte.c deleted file mode 100644 index 89a08a2d9..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_16byte.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_16byte { - int a; - double b; - int c; -} cls_struct_16byte; - -cls_struct_16byte cls_struct_16byte_fn(struct cls_struct_16byte b1, - struct cls_struct_16byte b2) -{ - struct cls_struct_16byte result; - - result.a = b1.a + b2.a; - result.b = b1.b + b2.b; - result.c = b1.c + b2.c; - - printf("%d %g %d %d %g %d: %d %g %d\n", b1.a, b1.b, b1.c, b2.a, b2.b, b2.c, - result.a, result.b, result.c); - - return result; -} - -static void cls_struct_16byte_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - struct cls_struct_16byte b1, b2; - - b1 = *(struct cls_struct_16byte*)(args[0]); - b2 = *(struct cls_struct_16byte*)(args[1]); - - *(cls_struct_16byte*)resp = cls_struct_16byte_fn(b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_16byte h_dbl = { 7, 8.0, 9 }; - struct cls_struct_16byte j_dbl = { 1, 9.0, 3 }; - struct cls_struct_16byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_sint; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_sint; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &h_dbl; - args_dbl[1] = &j_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_16byte_fn), &res_dbl, args_dbl); - /* { dg-output "7 8 9 1 9 3: 8 17 12" } */ - printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 8 17 12" } */ - - res_dbl.a = 0; - res_dbl.b = 0.0; - res_dbl.c = 0; - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_16byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_16byte(*)(cls_struct_16byte, cls_struct_16byte))(code))(h_dbl, j_dbl); - /* { dg-output "\n7 8 9 1 9 3: 8 17 12" } */ - printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 8 17 12" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_18byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_18byte.c deleted file mode 100644 index 9f75da80a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_18byte.c +++ /dev/null @@ -1,96 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Double alignment check on darwin. - Limitations: none. - PR: none. - Originator: 20030915 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_18byte { - double a; - unsigned char b; - unsigned char c; - double d; -} cls_struct_18byte; - -cls_struct_18byte cls_struct_18byte_fn(struct cls_struct_18byte a1, - struct cls_struct_18byte a2) -{ - struct cls_struct_18byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - - - printf("%g %d %d %g %g %d %d %g: %g %d %d %g\n", a1.a, a1.b, a1.c, a1.d, - a2.a, a2.b, a2.c, a2.d, - result.a, result.b, result.c, result.d); - return result; -} - -static void -cls_struct_18byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_18byte a1, a2; - - a1 = *(struct cls_struct_18byte*)(args[0]); - a2 = *(struct cls_struct_18byte*)(args[1]); - - *(cls_struct_18byte*)resp = cls_struct_18byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[5]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - struct cls_struct_18byte g_dbl = { 1.0, 127, 126, 3.0 }; - struct cls_struct_18byte f_dbl = { 4.0, 125, 124, 5.0 }; - struct cls_struct_18byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_18byte_fn), &res_dbl, args_dbl); - /* { dg-output "1 127 126 3 4 125 124 5: 5 252 250 8" } */ - printf("res: %g %d %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 5 252 250 8" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_18byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_18byte(*)(cls_struct_18byte, cls_struct_18byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 127 126 3 4 125 124 5: 5 252 250 8" } */ - printf("res: %g %d %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 5 252 250 8" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_19byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_19byte.c deleted file mode 100644 index 278794b5b..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_19byte.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Double alignment check on darwin. - Limitations: none. - PR: none. - Originator: 20030915 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_19byte { - double a; - unsigned char b; - unsigned char c; - double d; - unsigned char e; -} cls_struct_19byte; - -cls_struct_19byte cls_struct_19byte_fn(struct cls_struct_19byte a1, - struct cls_struct_19byte a2) -{ - struct cls_struct_19byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - result.e = a1.e + a2.e; - - - printf("%g %d %d %g %d %g %d %d %g %d: %g %d %d %g %d\n", - a1.a, a1.b, a1.c, a1.d, a1.e, - a2.a, a2.b, a2.c, a2.d, a2.e, - result.a, result.b, result.c, result.d, result.e); - return result; -} - -static void -cls_struct_19byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_19byte a1, a2; - - a1 = *(struct cls_struct_19byte*)(args[0]); - a2 = *(struct cls_struct_19byte*)(args[1]); - - *(cls_struct_19byte*)resp = cls_struct_19byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[6]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - struct cls_struct_19byte g_dbl = { 1.0, 127, 126, 3.0, 120 }; - struct cls_struct_19byte f_dbl = { 4.0, 125, 124, 5.0, 119 }; - struct cls_struct_19byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = &ffi_type_uchar; - cls_struct_fields[5] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_19byte_fn), &res_dbl, args_dbl); - /* { dg-output "1 127 126 3 120 4 125 124 5 119: 5 252 250 8 239" } */ - printf("res: %g %d %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e); - /* { dg-output "\nres: 5 252 250 8 239" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_19byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_19byte(*)(cls_struct_19byte, cls_struct_19byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 127 126 3 120 4 125 124 5 119: 5 252 250 8 239" } */ - printf("res: %g %d %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e); - /* { dg-output "\nres: 5 252 250 8 239" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_1_1byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_1_1byte.c deleted file mode 100644 index 82492c020..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_1_1byte.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Especially with small structures which may fit in one - register. Depending on the ABI. - Limitations: none. - PR: none. - Originator: 20030902 */ - - - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_1_1byte { - unsigned char a; -} cls_struct_1_1byte; - -cls_struct_1_1byte cls_struct_1_1byte_fn(struct cls_struct_1_1byte a1, - struct cls_struct_1_1byte a2) -{ - struct cls_struct_1_1byte result; - - result.a = a1.a + a2.a; - - printf("%d %d: %d\n", a1.a, a2.a, result.a); - - return result; -} - -static void -cls_struct_1_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_1_1byte a1, a2; - - a1 = *(struct cls_struct_1_1byte*)(args[0]); - a2 = *(struct cls_struct_1_1byte*)(args[1]); - - *(cls_struct_1_1byte*)resp = cls_struct_1_1byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[2]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_1_1byte g_dbl = { 12 }; - struct cls_struct_1_1byte f_dbl = { 178 }; - struct cls_struct_1_1byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_1_1byte_fn), &res_dbl, args_dbl); - /* { dg-output "12 178: 190" } */ - printf("res: %d\n", res_dbl.a); - /* { dg-output "\nres: 190" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_1_1byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_1_1byte(*)(cls_struct_1_1byte, cls_struct_1_1byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 178: 190" } */ - printf("res: %d\n", res_dbl.a); - /* { dg-output "\nres: 190" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_20byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_20byte.c deleted file mode 100644 index 3f8bb28ad..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_20byte.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_20byte { - double a; - double b; - int c; -} cls_struct_20byte; - -cls_struct_20byte cls_struct_20byte_fn(struct cls_struct_20byte a1, - struct cls_struct_20byte a2) -{ - struct cls_struct_20byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%g %g %d %g %g %d: %g %g %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, - result.a, result.b, result.c); - return result; -} - -static void -cls_struct_20byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_20byte a1, a2; - - a1 = *(struct cls_struct_20byte*)(args[0]); - a2 = *(struct cls_struct_20byte*)(args[1]); - - *(cls_struct_20byte*)resp = cls_struct_20byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_20byte g_dbl = { 1.0, 2.0, 3 }; - struct cls_struct_20byte f_dbl = { 4.0, 5.0, 7 }; - struct cls_struct_20byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_sint; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_20byte_fn), &res_dbl, args_dbl); - /* { dg-output "1 2 3 4 5 7: 5 7 10" } */ - printf("res: %g %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 5 7 10" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_20byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_20byte(*)(cls_struct_20byte, cls_struct_20byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 2 3 4 5 7: 5 7 10" } */ - printf("res: %g %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 5 7 10" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_20byte1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_20byte1.c deleted file mode 100644 index 65627273c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_20byte1.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - - - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_20byte { - int a; - double b; - double c; -} cls_struct_20byte; - -cls_struct_20byte cls_struct_20byte_fn(struct cls_struct_20byte a1, - struct cls_struct_20byte a2) -{ - struct cls_struct_20byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %g %g %d %g %g: %d %g %g\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, - result.a, result.b, result.c); - return result; -} - -static void -cls_struct_20byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_20byte a1, a2; - - a1 = *(struct cls_struct_20byte*)(args[0]); - a2 = *(struct cls_struct_20byte*)(args[1]); - - *(cls_struct_20byte*)resp = cls_struct_20byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - struct cls_struct_20byte g_dbl = { 1, 2.0, 3.0 }; - struct cls_struct_20byte f_dbl = { 4, 5.0, 7.0 }; - struct cls_struct_20byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_sint; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_double; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_20byte_fn), &res_dbl, args_dbl); - /* { dg-output "1 2 3 4 5 7: 5 7 10" } */ - printf("res: %d %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 5 7 10" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_20byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_20byte(*)(cls_struct_20byte, cls_struct_20byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 2 3 4 5 7: 5 7 10" } */ - printf("res: %d %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 5 7 10" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_24byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_24byte.c deleted file mode 100644 index 1d82f6e4a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_24byte.c +++ /dev/null @@ -1,113 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_24byte { - double a; - double b; - int c; - float d; -} cls_struct_24byte; - -cls_struct_24byte cls_struct_24byte_fn(struct cls_struct_24byte b0, - struct cls_struct_24byte b1, - struct cls_struct_24byte b2, - struct cls_struct_24byte b3) -{ - struct cls_struct_24byte result; - - result.a = b0.a + b1.a + b2.a + b3.a; - result.b = b0.b + b1.b + b2.b + b3.b; - result.c = b0.c + b1.c + b2.c + b3.c; - result.d = b0.d + b1.d + b2.d + b3.d; - - printf("%g %g %d %g %g %g %d %g %g %g %d %g %g %g %d %g: %g %g %d %g\n", - b0.a, b0.b, b0.c, b0.d, - b1.a, b1.b, b1.c, b1.d, - b2.a, b2.b, b2.c, b2.d, - b3.a, b3.b, b3.c, b2.d, - result.a, result.b, result.c, result.d); - - return result; -} - -static void -cls_struct_24byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_24byte b0, b1, b2, b3; - - b0 = *(struct cls_struct_24byte*)(args[0]); - b1 = *(struct cls_struct_24byte*)(args[1]); - b2 = *(struct cls_struct_24byte*)(args[2]); - b3 = *(struct cls_struct_24byte*)(args[3]); - - *(cls_struct_24byte*)resp = cls_struct_24byte_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[5]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_24byte e_dbl = { 9.0, 2.0, 6, 5.0 }; - struct cls_struct_24byte f_dbl = { 1.0, 2.0, 3, 7.0 }; - struct cls_struct_24byte g_dbl = { 4.0, 5.0, 7, 9.0 }; - struct cls_struct_24byte h_dbl = { 8.0, 6.0, 1, 4.0 }; - struct cls_struct_24byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_sint; - cls_struct_fields[3] = &ffi_type_float; - cls_struct_fields[4] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = &cls_struct_type; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_24byte_fn), &res_dbl, args_dbl); - /* { dg-output "9 2 6 5 1 2 3 7 4 5 7 9 8 6 1 9: 22 15 17 25" } */ - printf("res: %g %g %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 22 15 17 25" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_24byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_24byte(*)(cls_struct_24byte, - cls_struct_24byte, - cls_struct_24byte, - cls_struct_24byte)) - (code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n9 2 6 5 1 2 3 7 4 5 7 9 8 6 1 9: 22 15 17 25" } */ - printf("res: %g %g %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 22 15 17 25" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_2byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_2byte.c deleted file mode 100644 index 81bb0a64a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_2byte.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Especially with small structures which may fit in one - register. Depending on the ABI. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_2byte { - unsigned char a; - unsigned char b; -} cls_struct_2byte; - -cls_struct_2byte cls_struct_2byte_fn(struct cls_struct_2byte a1, - struct cls_struct_2byte a2) -{ - struct cls_struct_2byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - - printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); - - return result; -} - -static void -cls_struct_2byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_2byte a1, a2; - - a1 = *(struct cls_struct_2byte*)(args[0]); - a2 = *(struct cls_struct_2byte*)(args[1]); - - *(cls_struct_2byte*)resp = cls_struct_2byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_2byte g_dbl = { 12, 127 }; - struct cls_struct_2byte f_dbl = { 1, 13 }; - struct cls_struct_2byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_2byte_fn), &res_dbl, args_dbl); - /* { dg-output "12 127 1 13: 13 140" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 13 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_2byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_2byte(*)(cls_struct_2byte, cls_struct_2byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 127 1 13: 13 140" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 13 140" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_3_1byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_3_1byte.c deleted file mode 100644 index b7827466f..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_3_1byte.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Especially with small structures which may fit in one - register. Depending on the ABI. - Limitations: none. - PR: none. - Originator: 20030902 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_3_1byte { - unsigned char a; - unsigned char b; - unsigned char c; -} cls_struct_3_1byte; - -cls_struct_3_1byte cls_struct_3_1byte_fn(struct cls_struct_3_1byte a1, - struct cls_struct_3_1byte a2) -{ - struct cls_struct_3_1byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, - a2.a, a2.b, a2.c, - result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_3_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_3_1byte a1, a2; - - a1 = *(struct cls_struct_3_1byte*)(args[0]); - a2 = *(struct cls_struct_3_1byte*)(args[1]); - - *(cls_struct_3_1byte*)resp = cls_struct_3_1byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_3_1byte g_dbl = { 12, 13, 14 }; - struct cls_struct_3_1byte f_dbl = { 178, 179, 180 }; - struct cls_struct_3_1byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_3_1byte_fn), &res_dbl, args_dbl); - /* { dg-output "12 13 14 178 179 180: 190 192 194" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 190 192 194" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3_1byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_3_1byte(*)(cls_struct_3_1byte, cls_struct_3_1byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 13 14 178 179 180: 190 192 194" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 190 192 194" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_3byte1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_3byte1.c deleted file mode 100644 index a02c463af..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_3byte1.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Especially with small structures which may fit in one - register. Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_3byte { - unsigned short a; - unsigned char b; -} cls_struct_3byte; - -cls_struct_3byte cls_struct_3byte_fn(struct cls_struct_3byte a1, - struct cls_struct_3byte a2) -{ - struct cls_struct_3byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - - printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); - - return result; -} - -static void -cls_struct_3byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_3byte a1, a2; - - a1 = *(struct cls_struct_3byte*)(args[0]); - a2 = *(struct cls_struct_3byte*)(args[1]); - - *(cls_struct_3byte*)resp = cls_struct_3byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_3byte g_dbl = { 12, 119 }; - struct cls_struct_3byte f_dbl = { 1, 15 }; - struct cls_struct_3byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_ushort; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_3byte_fn), &res_dbl, args_dbl); - /* { dg-output "12 119 1 15: 13 134" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 13 134" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_3byte(*)(cls_struct_3byte, cls_struct_3byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 119 1 15: 13 134" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 13 134" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_3byte2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_3byte2.c deleted file mode 100644 index c7251cead..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_3byte2.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Especially with small structures which may fit in one - register. Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_3byte_1 { - unsigned char a; - unsigned short b; -} cls_struct_3byte_1; - -cls_struct_3byte_1 cls_struct_3byte_fn1(struct cls_struct_3byte_1 a1, - struct cls_struct_3byte_1 a2) -{ - struct cls_struct_3byte_1 result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - - printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); - - return result; -} - -static void -cls_struct_3byte_gn1(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_3byte_1 a1, a2; - - a1 = *(struct cls_struct_3byte_1*)(args[0]); - a2 = *(struct cls_struct_3byte_1*)(args[1]); - - *(cls_struct_3byte_1*)resp = cls_struct_3byte_fn1(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_3byte_1 g_dbl = { 15, 125 }; - struct cls_struct_3byte_1 f_dbl = { 9, 19 }; - struct cls_struct_3byte_1 res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_ushort; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_3byte_fn1), &res_dbl, args_dbl); - /* { dg-output "15 125 9 19: 24 144" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 24 144" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3byte_gn1, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_3byte_1(*)(cls_struct_3byte_1, cls_struct_3byte_1))(code))(g_dbl, f_dbl); - /* { dg-output "\n15 125 9 19: 24 144" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 24 144" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_4_1byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_4_1byte.c deleted file mode 100644 index 2d6d8b622..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_4_1byte.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Especially with small structures which may fit in one - register. Depending on the ABI. - Limitations: none. - PR: none. - Originator: 20030902 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_4_1byte { - unsigned char a; - unsigned char b; - unsigned char c; - unsigned char d; -} cls_struct_4_1byte; - -cls_struct_4_1byte cls_struct_4_1byte_fn(struct cls_struct_4_1byte a1, - struct cls_struct_4_1byte a2) -{ - struct cls_struct_4_1byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - - printf("%d %d %d %d %d %d %d %d: %d %d %d %d\n", a1.a, a1.b, a1.c, a1.d, - a2.a, a2.b, a2.c, a2.d, - result.a, result.b, result.c, result.d); - - return result; -} - -static void -cls_struct_4_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_4_1byte a1, a2; - - a1 = *(struct cls_struct_4_1byte*)(args[0]); - a2 = *(struct cls_struct_4_1byte*)(args[1]); - - *(cls_struct_4_1byte*)resp = cls_struct_4_1byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[5]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_4_1byte g_dbl = { 12, 13, 14, 15 }; - struct cls_struct_4_1byte f_dbl = { 178, 179, 180, 181 }; - struct cls_struct_4_1byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_uchar; - cls_struct_fields[4] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_4_1byte_fn), &res_dbl, args_dbl); - /* { dg-output "12 13 14 15 178 179 180 181: 190 192 194 196" } */ - printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 190 192 194 196" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_4_1byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_4_1byte(*)(cls_struct_4_1byte, cls_struct_4_1byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 13 14 15 178 179 180 181: 190 192 194 196" } */ - printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 190 192 194 196" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_4byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_4byte.c deleted file mode 100644 index 4ac378776..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_4byte.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -typedef struct cls_struct_4byte { - unsigned short a; - unsigned short b; -} cls_struct_4byte; - -cls_struct_4byte cls_struct_4byte_fn(struct cls_struct_4byte a1, - struct cls_struct_4byte a2) -{ - struct cls_struct_4byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - - printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); - - return result; -} - -static void -cls_struct_4byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_4byte a1, a2; - - a1 = *(struct cls_struct_4byte*)(args[0]); - a2 = *(struct cls_struct_4byte*)(args[1]); - - *(cls_struct_4byte*)resp = cls_struct_4byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_4byte g_dbl = { 127, 120 }; - struct cls_struct_4byte f_dbl = { 12, 128 }; - struct cls_struct_4byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_ushort; - cls_struct_fields[1] = &ffi_type_ushort; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_4byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 12 128: 139 248" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 139 248" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_4byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_4byte(*)(cls_struct_4byte, cls_struct_4byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 12 128: 139 248" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 139 248" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_5_1_byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_5_1_byte.c deleted file mode 100644 index ad9d51c24..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_5_1_byte.c +++ /dev/null @@ -1,109 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20050708 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_5byte { - unsigned char a; - unsigned char b; - unsigned char c; - unsigned char d; - unsigned char e; -} cls_struct_5byte; - -cls_struct_5byte cls_struct_5byte_fn(struct cls_struct_5byte a1, - struct cls_struct_5byte a2) -{ - struct cls_struct_5byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - result.e = a1.e + a2.e; - - printf("%d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d\n", - a1.a, a1.b, a1.c, a1.d, a1.e, - a2.a, a2.b, a2.c, a2.d, a2.e, - result.a, result.b, result.c, result.d, result.e); - - return result; -} - -static void -cls_struct_5byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_5byte a1, a2; - - a1 = *(struct cls_struct_5byte*)(args[0]); - a2 = *(struct cls_struct_5byte*)(args[1]); - - *(cls_struct_5byte*)resp = cls_struct_5byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[6]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_5byte g_dbl = { 127, 120, 1, 3, 4 }; - struct cls_struct_5byte f_dbl = { 12, 128, 9, 3, 4 }; - struct cls_struct_5byte res_dbl = { 0, 0, 0, 0, 0 }; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_uchar; - cls_struct_fields[4] = &ffi_type_uchar; - cls_struct_fields[5] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_5byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 1 3 4 12 128 9 3 4: 139 248 10 6 8" } */ - printf("res: %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e); - /* { dg-output "\nres: 139 248 10 6 8" } */ - - res_dbl.a = 0; - res_dbl.b = 0; - res_dbl.c = 0; - res_dbl.d = 0; - res_dbl.e = 0; - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_5byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 1 3 4 12 128 9 3 4: 139 248 10 6 8" } */ - printf("res: %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e); - /* { dg-output "\nres: 139 248 10 6 8" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_5byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_5byte.c deleted file mode 100644 index 4e0c0003c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_5byte.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_5byte { - unsigned short a; - unsigned short b; - unsigned char c; -} cls_struct_5byte; - -cls_struct_5byte cls_struct_5byte_fn(struct cls_struct_5byte a1, - struct cls_struct_5byte a2) -{ - struct cls_struct_5byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, - a2.a, a2.b, a2.c, - result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_5byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_5byte a1, a2; - - a1 = *(struct cls_struct_5byte*)(args[0]); - a2 = *(struct cls_struct_5byte*)(args[1]); - - *(cls_struct_5byte*)resp = cls_struct_5byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_5byte g_dbl = { 127, 120, 1 }; - struct cls_struct_5byte f_dbl = { 12, 128, 9 }; - struct cls_struct_5byte res_dbl = { 0, 0, 0 }; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_ushort; - cls_struct_fields[1] = &ffi_type_ushort; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_5byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 1 12 128 9: 139 248 10" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 139 248 10" } */ - - res_dbl.a = 0; - res_dbl.b = 0; - res_dbl.c = 0; - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_5byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 1 12 128 9: 139 248 10" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 139 248 10" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_64byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_64byte.c deleted file mode 100644 index a55edc2c7..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_64byte.c +++ /dev/null @@ -1,124 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check bigger struct which overlaps - the gp and fp register count on Darwin/AIX/ppc64. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_64byte { - double a; - double b; - double c; - double d; - double e; - double f; - double g; - double h; -} cls_struct_64byte; - -cls_struct_64byte cls_struct_64byte_fn(struct cls_struct_64byte b0, - struct cls_struct_64byte b1, - struct cls_struct_64byte b2, - struct cls_struct_64byte b3) -{ - struct cls_struct_64byte result; - - result.a = b0.a + b1.a + b2.a + b3.a; - result.b = b0.b + b1.b + b2.b + b3.b; - result.c = b0.c + b1.c + b2.c + b3.c; - result.d = b0.d + b1.d + b2.d + b3.d; - result.e = b0.e + b1.e + b2.e + b3.e; - result.f = b0.f + b1.f + b2.f + b3.f; - result.g = b0.g + b1.g + b2.g + b3.g; - result.h = b0.h + b1.h + b2.h + b3.h; - - printf("%g %g %g %g %g %g %g %g\n", result.a, result.b, result.c, - result.d, result.e, result.f, result.g, result.h); - - return result; -} - -static void -cls_struct_64byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_64byte b0, b1, b2, b3; - - b0 = *(struct cls_struct_64byte*)(args[0]); - b1 = *(struct cls_struct_64byte*)(args[1]); - b2 = *(struct cls_struct_64byte*)(args[2]); - b3 = *(struct cls_struct_64byte*)(args[3]); - - *(cls_struct_64byte*)resp = cls_struct_64byte_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[9]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_64byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0 }; - struct cls_struct_64byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0 }; - struct cls_struct_64byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0 }; - struct cls_struct_64byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0 }; - struct cls_struct_64byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_double; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = &ffi_type_double; - cls_struct_fields[5] = &ffi_type_double; - cls_struct_fields[6] = &ffi_type_double; - cls_struct_fields[7] = &ffi_type_double; - cls_struct_fields[8] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = &cls_struct_type; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_64byte_fn), &res_dbl, args_dbl); - /* { dg-output "22 15 17 25 6 13 19 18" } */ - printf("res: %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_64byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_64byte(*)(cls_struct_64byte, - cls_struct_64byte, - cls_struct_64byte, - cls_struct_64byte)) - (code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n22 15 17 25 6 13 19 18" } */ - printf("res: %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_6_1_byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_6_1_byte.c deleted file mode 100644 index b4dcdba47..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_6_1_byte.c +++ /dev/null @@ -1,113 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20050708 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_6byte { - unsigned char a; - unsigned char b; - unsigned char c; - unsigned char d; - unsigned char e; - unsigned char f; -} cls_struct_6byte; - -cls_struct_6byte cls_struct_6byte_fn(struct cls_struct_6byte a1, - struct cls_struct_6byte a2) -{ - struct cls_struct_6byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - result.e = a1.e + a2.e; - result.f = a1.f + a2.f; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d %d\n", - a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, - a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, - result.a, result.b, result.c, result.d, result.e, result.f); - - return result; -} - -static void -cls_struct_6byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_6byte a1, a2; - - a1 = *(struct cls_struct_6byte*)(args[0]); - a2 = *(struct cls_struct_6byte*)(args[1]); - - *(cls_struct_6byte*)resp = cls_struct_6byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[7]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_6byte g_dbl = { 127, 120, 1, 3, 4, 5 }; - struct cls_struct_6byte f_dbl = { 12, 128, 9, 3, 4, 5 }; - struct cls_struct_6byte res_dbl = { 0, 0, 0, 0, 0, 0 }; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_uchar; - cls_struct_fields[4] = &ffi_type_uchar; - cls_struct_fields[5] = &ffi_type_uchar; - cls_struct_fields[6] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_6byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 1 3 4 5 12 128 9 3 4 5: 139 248 10 6 8 10" } */ - printf("res: %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f); - /* { dg-output "\nres: 139 248 10 6 8 10" } */ - - res_dbl.a = 0; - res_dbl.b = 0; - res_dbl.c = 0; - res_dbl.d = 0; - res_dbl.e = 0; - res_dbl.f = 0; - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_6byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_6byte(*)(cls_struct_6byte, cls_struct_6byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 1 3 4 5 12 128 9 3 4 5: 139 248 10 6 8 10" } */ - printf("res: %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f); - /* { dg-output "\nres: 139 248 10 6 8 10" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_6byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_6byte.c deleted file mode 100644 index 740678017..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_6byte.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_6byte { - unsigned short a; - unsigned short b; - unsigned char c; - unsigned char d; -} cls_struct_6byte; - -cls_struct_6byte cls_struct_6byte_fn(struct cls_struct_6byte a1, - struct cls_struct_6byte a2) -{ - struct cls_struct_6byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - - printf("%d %d %d %d %d %d %d %d: %d %d %d %d\n", a1.a, a1.b, a1.c, a1.d, - a2.a, a2.b, a2.c, a2.d, - result.a, result.b, result.c, result.d); - - return result; -} - -static void -cls_struct_6byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_6byte a1, a2; - - a1 = *(struct cls_struct_6byte*)(args[0]); - a2 = *(struct cls_struct_6byte*)(args[1]); - - *(cls_struct_6byte*)resp = cls_struct_6byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[5]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_6byte g_dbl = { 127, 120, 1, 128 }; - struct cls_struct_6byte f_dbl = { 12, 128, 9, 127 }; - struct cls_struct_6byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_ushort; - cls_struct_fields[1] = &ffi_type_ushort; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_uchar; - cls_struct_fields[4] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_6byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 1 128 12 128 9 127: 139 248 10 255" } */ - printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 139 248 10 255" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_6byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_6byte(*)(cls_struct_6byte, cls_struct_6byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 1 128 12 128 9 127: 139 248 10 255" } */ - printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 139 248 10 255" } */ - - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_7_1_byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_7_1_byte.c deleted file mode 100644 index 14a7e96f9..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_7_1_byte.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20050708 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_7byte { - unsigned char a; - unsigned char b; - unsigned char c; - unsigned char d; - unsigned char e; - unsigned char f; - unsigned char g; -} cls_struct_7byte; - -cls_struct_7byte cls_struct_7byte_fn(struct cls_struct_7byte a1, - struct cls_struct_7byte a2) -{ - struct cls_struct_7byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - result.e = a1.e + a2.e; - result.f = a1.f + a2.f; - result.g = a1.g + a2.g; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d %d %d\n", - a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g, - a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, a2.g, - result.a, result.b, result.c, result.d, result.e, result.f, result.g); - - return result; -} - -static void -cls_struct_7byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_7byte a1, a2; - - a1 = *(struct cls_struct_7byte*)(args[0]); - a2 = *(struct cls_struct_7byte*)(args[1]); - - *(cls_struct_7byte*)resp = cls_struct_7byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[8]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_7byte g_dbl = { 127, 120, 1, 3, 4, 5, 6 }; - struct cls_struct_7byte f_dbl = { 12, 128, 9, 3, 4, 5, 6 }; - struct cls_struct_7byte res_dbl = { 0, 0, 0, 0, 0, 0, 0 }; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_uchar; - cls_struct_fields[4] = &ffi_type_uchar; - cls_struct_fields[5] = &ffi_type_uchar; - cls_struct_fields[6] = &ffi_type_uchar; - cls_struct_fields[7] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_7byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 1 3 4 5 6 12 128 9 3 4 5 6: 139 248 10 6 8 10 12" } */ - printf("res: %d %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); - /* { dg-output "\nres: 139 248 10 6 8 10 12" } */ - - res_dbl.a = 0; - res_dbl.b = 0; - res_dbl.c = 0; - res_dbl.d = 0; - res_dbl.e = 0; - res_dbl.f = 0; - res_dbl.g = 0; - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_7byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_7byte(*)(cls_struct_7byte, cls_struct_7byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 1 3 4 5 6 12 128 9 3 4 5 6: 139 248 10 6 8 10 12" } */ - printf("res: %d %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); - /* { dg-output "\nres: 139 248 10 6 8 10 12" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_7byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_7byte.c deleted file mode 100644 index 1645cc635..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_7byte.c +++ /dev/null @@ -1,97 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_7byte { - unsigned short a; - unsigned short b; - unsigned char c; - unsigned short d; -} cls_struct_7byte; - -cls_struct_7byte cls_struct_7byte_fn(struct cls_struct_7byte a1, - struct cls_struct_7byte a2) -{ - struct cls_struct_7byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - - printf("%d %d %d %d %d %d %d %d: %d %d %d %d\n", a1.a, a1.b, a1.c, a1.d, - a2.a, a2.b, a2.c, a2.d, - result.a, result.b, result.c, result.d); - - return result; -} - -static void -cls_struct_7byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_7byte a1, a2; - - a1 = *(struct cls_struct_7byte*)(args[0]); - a2 = *(struct cls_struct_7byte*)(args[1]); - - *(cls_struct_7byte*)resp = cls_struct_7byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[5]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_7byte g_dbl = { 127, 120, 1, 254 }; - struct cls_struct_7byte f_dbl = { 12, 128, 9, 255 }; - struct cls_struct_7byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_ushort; - cls_struct_fields[1] = &ffi_type_ushort; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_ushort; - cls_struct_fields[4] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_7byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 1 254 12 128 9 255: 139 248 10 509" } */ - printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 139 248 10 509" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_7byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_7byte(*)(cls_struct_7byte, cls_struct_7byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 1 254 12 128 9 255: 139 248 10 509" } */ - printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 139 248 10 509" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_8byte.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_8byte.c deleted file mode 100644 index f6c1ea570..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_8byte.c +++ /dev/null @@ -1,88 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_8byte { - int a; - float b; -} cls_struct_8byte; - -cls_struct_8byte cls_struct_8byte_fn(struct cls_struct_8byte a1, - struct cls_struct_8byte a2) -{ - struct cls_struct_8byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - - printf("%d %g %d %g: %d %g\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); - - return result; -} - -static void -cls_struct_8byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_8byte a1, a2; - - a1 = *(struct cls_struct_8byte*)(args[0]); - a2 = *(struct cls_struct_8byte*)(args[1]); - - *(cls_struct_8byte*)resp = cls_struct_8byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_8byte g_dbl = { 1, 2.0 }; - struct cls_struct_8byte f_dbl = { 4, 5.0 }; - struct cls_struct_8byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_sint; - cls_struct_fields[1] = &ffi_type_float; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_8byte_fn), &res_dbl, args_dbl); - /* { dg-output "1 2 4 5: 5 7" } */ - printf("res: %d %g\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 5 7" } */ - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_8byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_8byte(*)(cls_struct_8byte, cls_struct_8byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 2 4 5: 5 7" } */ - printf("res: %d %g\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 5 7" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_9byte1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_9byte1.c deleted file mode 100644 index 0b8572223..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_9byte1.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Darwin/AIX do double-word - alignment of the struct if the first element is a double. - Check that it does not here. - Limitations: none. - PR: none. - Originator: 20030914 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_9byte { - int a; - double b; -} cls_struct_9byte; - -cls_struct_9byte cls_struct_9byte_fn(struct cls_struct_9byte b1, - struct cls_struct_9byte b2) -{ - struct cls_struct_9byte result; - - result.a = b1.a + b2.a; - result.b = b1.b + b2.b; - - printf("%d %g %d %g: %d %g\n", b1.a, b1.b, b2.a, b2.b, - result.a, result.b); - - return result; -} - -static void cls_struct_9byte_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - struct cls_struct_9byte b1, b2; - - b1 = *(struct cls_struct_9byte*)(args[0]); - b2 = *(struct cls_struct_9byte*)(args[1]); - - *(cls_struct_9byte*)resp = cls_struct_9byte_fn(b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - struct cls_struct_9byte h_dbl = { 7, 8.0}; - struct cls_struct_9byte j_dbl = { 1, 9.0}; - struct cls_struct_9byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_sint; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &h_dbl; - args_dbl[1] = &j_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_9byte_fn), &res_dbl, args_dbl); - /* { dg-output "7 8 1 9: 8 17" } */ - printf("res: %d %g\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 8 17" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_9byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_9byte(*)(cls_struct_9byte, cls_struct_9byte))(code))(h_dbl, j_dbl); - /* { dg-output "\n7 8 1 9: 8 17" } */ - printf("res: %d %g\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 8 17" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_9byte2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_9byte2.c deleted file mode 100644 index edf991de7..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_9byte2.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Darwin/AIX do double-word - alignment of the struct if the first element is a double. - Check that it does here. - Limitations: none. - PR: none. - Originator: 20030914 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_9byte { - double a; - int b; -} cls_struct_9byte; - -cls_struct_9byte cls_struct_9byte_fn(struct cls_struct_9byte b1, - struct cls_struct_9byte b2) -{ - struct cls_struct_9byte result; - - result.a = b1.a + b2.a; - result.b = b1.b + b2.b; - - printf("%g %d %g %d: %g %d\n", b1.a, b1.b, b2.a, b2.b, - result.a, result.b); - - return result; -} - -static void cls_struct_9byte_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - struct cls_struct_9byte b1, b2; - - b1 = *(struct cls_struct_9byte*)(args[0]); - b2 = *(struct cls_struct_9byte*)(args[1]); - - *(cls_struct_9byte*)resp = cls_struct_9byte_fn(b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - struct cls_struct_9byte h_dbl = { 7.0, 8}; - struct cls_struct_9byte j_dbl = { 1.0, 9}; - struct cls_struct_9byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_sint; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &h_dbl; - args_dbl[1] = &j_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_9byte_fn), &res_dbl, args_dbl); - /* { dg-output "7 8 1 9: 8 17" } */ - printf("res: %g %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 8 17" } */ - - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_9byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_9byte(*)(cls_struct_9byte, cls_struct_9byte))(code))(h_dbl, j_dbl); - /* { dg-output "\n7 8 1 9: 8 17" } */ - printf("res: %g %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 8 17" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_double.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_double.c deleted file mode 100644 index aad5f3ced..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_double.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of double. - Limitations: none. - PR: none. - Originator: 20031203 */ - - - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - double b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %g %d %d %g %d: %d %g %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_float.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_float.c deleted file mode 100644 index 37e085529..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_float.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of float. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - float b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %g %d %d %g %d: %d %g %d\n", a1.a, (double)a1.b, a1.c, a2.a, (double)a2.b, a2.c, result.a, (double)result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_float; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_longdouble.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_longdouble.c deleted file mode 100644 index b3322d861..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_longdouble.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of long double. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - long double b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %g %d %d %g %d: %d %g %d\n", a1.a, (double)a1.b, a1.c, a2.a, (double)a2.b, a2.c, result.a, (double)result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_longdouble; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_longdouble_split.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_longdouble_split.c deleted file mode 100644 index 15f936546..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_longdouble_split.c +++ /dev/null @@ -1,134 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of long double. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */ -/* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ - -#include "ffitest.h" - -typedef struct cls_struct_align { - long double a; - long double b; - long double c; - long double d; - long double e; - long double f; - long double g; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn( - cls_struct_align a1, - cls_struct_align a2) -{ - struct cls_struct_align r; - - r.a = a1.a + a2.a; - r.b = a1.b + a2.b; - r.c = a1.c + a2.c; - r.d = a1.d + a2.d; - r.e = a1.e + a2.e; - r.f = a1.f + a2.f; - r.g = a1.g + a2.g; - - printf("%Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg: " - "%Lg %Lg %Lg %Lg %Lg %Lg %Lg\n", - a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g, - a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, a2.g, - r.a, r.b, r.c, r.d, r.e, r.f, r.g); - - return r; -} - -cls_struct_align cls_struct_align_fn2( - cls_struct_align a1) -{ - struct cls_struct_align r; - - r.a = a1.a + 1; - r.b = a1.b + 1; - r.c = a1.c + 1; - r.d = a1.d + 1; - r.e = a1.e + 1; - r.f = a1.f + 1; - r.g = a1.g + 1; - - printf("%Lg %Lg %Lg %Lg %Lg %Lg %Lg: " - "%Lg %Lg %Lg %Lg %Lg %Lg %Lg\n", - a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g, - r.a, r.b, r.c, r.d, r.e, r.f, r.g); - - return r; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[8]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 }; - struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 }; - struct cls_struct_align res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_longdouble; - cls_struct_fields[1] = &ffi_type_longdouble; - cls_struct_fields[2] = &ffi_type_longdouble; - cls_struct_fields[3] = &ffi_type_longdouble; - cls_struct_fields[4] = &ffi_type_longdouble; - cls_struct_fields[5] = &ffi_type_longdouble; - cls_struct_fields[6] = &ffi_type_longdouble; - cls_struct_fields[7] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 12 13 14: 9 11 13 15 17 19 21" } */ - printf("res: %Lg %Lg %Lg %Lg %Lg %Lg %Lg\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); - /* { dg-output "\nres: 9 11 13 15 17 19 21" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 12 13 14: 9 11 13 15 17 19 21" } */ - printf("res: %Lg %Lg %Lg %Lg %Lg %Lg %Lg\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); - /* { dg-output "\nres: 9 11 13 15 17 19 21" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_longdouble_split2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_longdouble_split2.c deleted file mode 100644 index ca1c356cb..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_longdouble_split2.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of long double. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/18/2007 -*/ - -/* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ -/* { dg-do run { xfail strongarm*-*-* } } */ -/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */ -/* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ - -#include "ffitest.h" - -typedef struct cls_struct_align { - long double a; - long double b; - long double c; - long double d; - long double e; - double f; - long double g; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn( - cls_struct_align a1, - cls_struct_align a2) -{ - struct cls_struct_align r; - - r.a = a1.a + a2.a; - r.b = a1.b + a2.b; - r.c = a1.c + a2.c; - r.d = a1.d + a2.d; - r.e = a1.e + a2.e; - r.f = a1.f + a2.f; - r.g = a1.g + a2.g; - - printf("%Lg %Lg %Lg %Lg %Lg %g %Lg %Lg %Lg %Lg %Lg %Lg %g %Lg: " - "%Lg %Lg %Lg %Lg %Lg %g %Lg\n", - a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g, - a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, a2.g, - r.a, r.b, r.c, r.d, r.e, r.f, r.g); - - return r; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[8]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 }; - struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 }; - struct cls_struct_align res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_longdouble; - cls_struct_fields[1] = &ffi_type_longdouble; - cls_struct_fields[2] = &ffi_type_longdouble; - cls_struct_fields[3] = &ffi_type_longdouble; - cls_struct_fields[4] = &ffi_type_longdouble; - cls_struct_fields[5] = &ffi_type_double; - cls_struct_fields[6] = &ffi_type_longdouble; - cls_struct_fields[7] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 12 13 14: 9 11 13 15 17 19 21" } */ - printf("res: %Lg %Lg %Lg %Lg %Lg %g %Lg\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); - /* { dg-output "\nres: 9 11 13 15 17 19 21" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 12 13 14: 9 11 13 15 17 19 21" } */ - printf("res: %Lg %Lg %Lg %Lg %Lg %g %Lg\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); - /* { dg-output "\nres: 9 11 13 15 17 19 21" } */ - - exit(0); -} - - - diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_pointer.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_pointer.c deleted file mode 100644 index 8fbf36a5c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_pointer.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of pointer. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - void *b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = (void *)((uintptr_t)a1.b + (uintptr_t)a2.b); - result.c = a1.c + a2.c; - - printf("%d %" PRIuPTR " %d %d %" PRIuPTR " %d: %d %" PRIuPTR " %d\n", - a1.a, (uintptr_t)a1.b, a1.c, - a2.a, (uintptr_t)a2.b, a2.c, - result.a, (uintptr_t)result.b, - result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_align g_dbl = { 12, (void *)4951, 127 }; - struct cls_struct_align f_dbl = { 1, (void *)9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_pointer; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %" PRIuPTR " %d\n", res_dbl.a, (uintptr_t)res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %" PRIuPTR " %d\n", res_dbl.a, (uintptr_t)res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_sint16.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_sint16.c deleted file mode 100644 index 039b87473..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_sint16.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of sint16. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - signed short b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_sshort; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_sint32.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_sint32.c deleted file mode 100644 index c96c6d136..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_sint32.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of sint32. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - signed int b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_sint; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_sint64.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_sint64.c deleted file mode 100644 index 9aa7bdddf..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_sint64.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of sint64. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - signed long long b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %" PRIdLL " %d %d %" PRIdLL " %d: %d %" PRIdLL " %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_sint64; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_uint16.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_uint16.c deleted file mode 100644 index 97620b79d..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_uint16.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of uint16. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - unsigned short b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_ushort; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_uint32.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_uint32.c deleted file mode 100644 index 5766fadf0..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_uint32.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of uint32. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - unsigned int b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uint; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_uint64.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_uint64.c deleted file mode 100644 index a52cb8939..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_align_uint64.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of uint64. - Limitations: none. - PR: none. - Originator: 20031203 */ - - -/* { dg-do run } */ -/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - unsigned long long b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %" PRIdLL " %d %d %" PRIdLL " %d: %d %" PRIdLL " %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uint64; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_dbls_struct.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_dbls_struct.c deleted file mode 100644 index d6637911e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_dbls_struct.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check double arguments in structs. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/23/2007 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -typedef struct Dbls { - double x; - double y; -} Dbls; - -void -closure_test_fn(Dbls p) -{ - printf("%.1f %.1f\n", p.x, p.y); -} - -void -closure_test_gn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, - void** args, void* userdata __UNUSED__) -{ - closure_test_fn(*(Dbls*)args[0]); -} - -int main(int argc __UNUSED__, char** argv __UNUSED__) -{ - ffi_cif cif; - - void *code; - ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type* cl_arg_types[1]; - - ffi_type ts1_type; - ffi_type* ts1_type_elements[4]; - - Dbls arg = { 1.0, 2.0 }; - - ts1_type.size = 0; - ts1_type.alignment = 0; - ts1_type.type = FFI_TYPE_STRUCT; - ts1_type.elements = ts1_type_elements; - - ts1_type_elements[0] = &ffi_type_double; - ts1_type_elements[1] = &ffi_type_double; - ts1_type_elements[2] = NULL; - - cl_arg_types[0] = &ts1_type; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_void, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_gn, NULL, code) == FFI_OK); - - ((void*(*)(Dbls))(code))(arg); - /* { dg-output "1.0 2.0\n" } */ - - closure_test_fn(arg); - /* { dg-output "1.0 2.0\n" } */ - - return 0; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_double.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_double.c deleted file mode 100644 index 84ad4cb7d..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_double.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Area: closure_call - Purpose: Check return value double. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_double_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) - { - *(double *)resp = *(double *)args[0]; - - printf("%f: %f\n",*(double *)args[0], - *(double *)resp); - } -typedef double (*cls_ret_double)(double); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - double res; - - cl_arg_types[0] = &ffi_type_double; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_double, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_double_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_double)code))(21474.789); - /* { dg-output "21474.789000: 21474.789000" } */ - printf("res: %.6f\n", res); - /* { dg-output "\nres: 21474.789000" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_double_va.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_double_va.c deleted file mode 100644 index e077f92b8..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_double_va.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Test doubles passed in variable argument lists. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/6/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -/* { dg-output "" { xfail avr32*-*-* } } */ -/* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */ - -#include "ffitest.h" - -static void -cls_double_va_fn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - char* format = *(char**)args[0]; - double doubleValue = *(double*)args[1]; - - *(ffi_arg*)resp = printf(format, doubleValue); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args[3]; - ffi_type* arg_types[3]; - - char* format = "%.1f\n"; - double doubleArg = 7; - ffi_arg res = 0; - - arg_types[0] = &ffi_type_pointer; - arg_types[1] = &ffi_type_double; - arg_types[2] = NULL; - - /* This printf call is variadic */ - CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint, - arg_types) == FFI_OK); - - args[0] = &format; - args[1] = &doubleArg; - args[2] = NULL; - - ffi_call(&cif, FFI_FN(printf), &res, args); - /* { dg-output "7.0" } */ - printf("res: %d\n", (int) res); - /* { dg-output "\nres: 4" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL, - code) == FFI_OK); - - res = ((int(*)(char*, ...))(code))(format, doubleArg); - /* { dg-output "\n7.0" } */ - printf("res: %d\n", (int) res); - /* { dg-output "\nres: 4" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_float.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_float.c deleted file mode 100644 index 0090fed90..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_float.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Area: closure_call - Purpose: Check return value float. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_float_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) - { - *(float *)resp = *(float *)args[0]; - - printf("%g: %g\n",*(float *)args[0], - *(float *)resp); - } - -typedef float (*cls_ret_float)(float); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - float res; - - cl_arg_types[0] = &ffi_type_float; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_float, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_float_fn, NULL, code) == FFI_OK); - res = ((((cls_ret_float)code)(-2122.12))); - /* { dg-output "\\-2122.12: \\-2122.12" } */ - printf("res: %.6f\n", res); - /* { dg-output "\nres: \-2122.120117" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_longdouble.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_longdouble.c deleted file mode 100644 index 5dc9ac768..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_longdouble.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check long double arguments. - Limitations: none. - PR: none. - Originator: Blake Chaffin */ - -/* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ -/* This test is known to PASS on armv7l-unknown-linux-gnueabihf, so I have - remove the xfail for arm*-*-* below, until we know more. */ -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */ -/* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ - -#include "ffitest.h" - -long double cls_ldouble_fn( - long double a1, - long double a2, - long double a3, - long double a4, - long double a5, - long double a6, - long double a7, - long double a8) -{ - long double r = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8; - - printf("%Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg: %Lg\n", - a1, a2, a3, a4, a5, a6, a7, a8, r); - - return r; -} - -static void -cls_ldouble_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - long double a1 = *(long double*)args[0]; - long double a2 = *(long double*)args[1]; - long double a3 = *(long double*)args[2]; - long double a4 = *(long double*)args[3]; - long double a5 = *(long double*)args[4]; - long double a6 = *(long double*)args[5]; - long double a7 = *(long double*)args[6]; - long double a8 = *(long double*)args[7]; - - *(long double*)resp = cls_ldouble_fn( - a1, a2, a3, a4, a5, a6, a7, a8); -} - -int main(void) -{ - ffi_cif cif; - void* code; - ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args[9]; - ffi_type* arg_types[9]; - long double res = 0; - - long double arg1 = 1; - long double arg2 = 2; - long double arg3 = 3; - long double arg4 = 4; - long double arg5 = 5; - long double arg6 = 6; - long double arg7 = 7; - long double arg8 = 8; - - arg_types[0] = &ffi_type_longdouble; - arg_types[1] = &ffi_type_longdouble; - arg_types[2] = &ffi_type_longdouble; - arg_types[3] = &ffi_type_longdouble; - arg_types[4] = &ffi_type_longdouble; - arg_types[5] = &ffi_type_longdouble; - arg_types[6] = &ffi_type_longdouble; - arg_types[7] = &ffi_type_longdouble; - arg_types[8] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 8, &ffi_type_longdouble, - arg_types) == FFI_OK); - - args[0] = &arg1; - args[1] = &arg2; - args[2] = &arg3; - args[3] = &arg4; - args[4] = &arg5; - args[5] = &arg6; - args[6] = &arg7; - args[7] = &arg8; - args[8] = NULL; - - ffi_call(&cif, FFI_FN(cls_ldouble_fn), &res, args); - /* { dg-output "1 2 3 4 5 6 7 8: 36" } */ - printf("res: %Lg\n", res); - /* { dg-output "\nres: 36" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ldouble_gn, NULL, code) == FFI_OK); - - res = ((long double(*)(long double, long double, long double, long double, - long double, long double, long double, long double))(code))(arg1, arg2, - arg3, arg4, arg5, arg6, arg7, arg8); - /* { dg-output "\n1 2 3 4 5 6 7 8: 36" } */ - printf("res: %Lg\n", res); - /* { dg-output "\nres: 36" } */ - - return 0; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_longdouble_va.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_longdouble_va.c deleted file mode 100644 index 39b438b28..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_longdouble_va.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Test long doubles passed in variable argument lists. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/6/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -/* { dg-output "" { xfail avr32*-*-* x86_64-*-mingw* } } */ -/* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */ - -#include "ffitest.h" - -static void -cls_longdouble_va_fn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - char* format = *(char**)args[0]; - long double ldValue = *(long double*)args[1]; - - *(ffi_arg*)resp = printf(format, ldValue); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args[3]; - ffi_type* arg_types[3]; - - char* format = "%.1Lf\n"; - long double ldArg = 7; - ffi_arg res = 0; - - arg_types[0] = &ffi_type_pointer; - arg_types[1] = &ffi_type_longdouble; - arg_types[2] = NULL; - - /* This printf call is variadic */ - CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint, - arg_types) == FFI_OK); - - args[0] = &format; - args[1] = &ldArg; - args[2] = NULL; - - ffi_call(&cif, FFI_FN(printf), &res, args); - /* { dg-output "7.0" } */ - printf("res: %d\n", (int) res); - /* { dg-output "\nres: 4" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_longdouble_va_fn, NULL, - code) == FFI_OK); - - res = ((int(*)(char*, ...))(code))(format, ldArg); - /* { dg-output "\n7.0" } */ - printf("res: %d\n", (int) res); - /* { dg-output "\nres: 4" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_schar.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_schar.c deleted file mode 100644 index 71df7b651..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_schar.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check passing of multiple signed char values. - Limitations: none. - PR: PR13221. - Originator: 20031129 */ - -/* { dg-do run } */ -#include "ffitest.h" - -signed char test_func_fn(signed char a1, signed char a2) -{ - signed char result; - - result = a1 + a2; - - printf("%d %d: %d\n", a1, a2, result); - - return result; - -} - -static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, - void *data __UNUSED__) -{ - signed char a1, a2; - - a1 = *(signed char *)avals[0]; - a2 = *(signed char *)avals[1]; - - *(ffi_arg *)rval = test_func_fn(a1, a2); - -} - -typedef signed char (*test_type)(signed char, signed char); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void * args_dbl[3]; - ffi_type * cl_arg_types[3]; - ffi_arg res_call; - signed char a, b, res_closure; - - a = 2; - b = 125; - - args_dbl[0] = &a; - args_dbl[1] = &b; - args_dbl[2] = NULL; - - cl_arg_types[0] = &ffi_type_schar; - cl_arg_types[1] = &ffi_type_schar; - cl_arg_types[2] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, - &ffi_type_schar, cl_arg_types) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); - /* { dg-output "2 125: 127" } */ - printf("res: %d\n", (signed char)res_call); - /* { dg-output "\nres: 127" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); - - res_closure = (*((test_type)code))(2, 125); - /* { dg-output "\n2 125: 127" } */ - printf("res: %d\n", res_closure); - /* { dg-output "\nres: 127" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_sshort.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_sshort.c deleted file mode 100644 index 4c3915326..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_sshort.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check passing of multiple signed short values. - Limitations: none. - PR: PR13221. - Originator: 20031129 */ - -/* { dg-do run } */ -#include "ffitest.h" - -signed short test_func_fn(signed short a1, signed short a2) -{ - signed short result; - - result = a1 + a2; - - printf("%d %d: %d\n", a1, a2, result); - - return result; - -} - -static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, - void *data __UNUSED__) -{ - signed short a1, a2; - - a1 = *(signed short *)avals[0]; - a2 = *(signed short *)avals[1]; - - *(ffi_arg *)rval = test_func_fn(a1, a2); - -} - -typedef signed short (*test_type)(signed short, signed short); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void * args_dbl[3]; - ffi_type * cl_arg_types[3]; - ffi_arg res_call; - unsigned short a, b, res_closure; - - a = 2; - b = 32765; - - args_dbl[0] = &a; - args_dbl[1] = &b; - args_dbl[2] = NULL; - - cl_arg_types[0] = &ffi_type_sshort; - cl_arg_types[1] = &ffi_type_sshort; - cl_arg_types[2] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, - &ffi_type_sshort, cl_arg_types) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); - /* { dg-output "2 32765: 32767" } */ - printf("res: %d\n", (unsigned short)res_call); - /* { dg-output "\nres: 32767" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); - - res_closure = (*((test_type)code))(2, 32765); - /* { dg-output "\n2 32765: 32767" } */ - printf("res: %d\n", res_closure); - /* { dg-output "\nres: 32767" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_sshortchar.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_sshortchar.c deleted file mode 100644 index 1c3aeb5a6..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_sshortchar.c +++ /dev/null @@ -1,86 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check passing of multiple signed short/char values. - Limitations: none. - PR: PR13221. - Originator: 20031129 */ - -/* { dg-do run } */ -#include "ffitest.h" - -signed short test_func_fn(signed char a1, signed short a2, - signed char a3, signed short a4) -{ - signed short result; - - result = a1 + a2 + a3 + a4; - - printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result); - - return result; - -} - -static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, - void *data __UNUSED__) -{ - signed char a1, a3; - signed short a2, a4; - - a1 = *(signed char *)avals[0]; - a2 = *(signed short *)avals[1]; - a3 = *(signed char *)avals[2]; - a4 = *(signed short *)avals[3]; - - *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4); - -} - -typedef signed short (*test_type)(signed char, signed short, - signed char, signed short); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void * args_dbl[5]; - ffi_type * cl_arg_types[5]; - ffi_arg res_call; - signed char a, c; - signed short b, d, res_closure; - - a = 1; - b = 32765; - c = 127; - d = -128; - - args_dbl[0] = &a; - args_dbl[1] = &b; - args_dbl[2] = &c; - args_dbl[3] = &d; - args_dbl[4] = NULL; - - cl_arg_types[0] = &ffi_type_schar; - cl_arg_types[1] = &ffi_type_sshort; - cl_arg_types[2] = &ffi_type_schar; - cl_arg_types[3] = &ffi_type_sshort; - cl_arg_types[4] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_sshort, cl_arg_types) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); - /* { dg-output "1 32765 127 -128: 32765" } */ - printf("res: %d\n", (signed short)res_call); - /* { dg-output "\nres: 32765" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); - - res_closure = (*((test_type)code))(1, 32765, 127, -128); - /* { dg-output "\n1 32765 127 -128: 32765" } */ - printf("res: %d\n", res_closure); - /* { dg-output "\nres: 32765" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_uchar.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_uchar.c deleted file mode 100644 index 009c02c72..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_uchar.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check passing of multiple unsigned char values. - Limitations: none. - PR: PR13221. - Originator: 20031129 */ - -/* { dg-do run } */ -#include "ffitest.h" - -unsigned char test_func_fn(unsigned char a1, unsigned char a2, - unsigned char a3, unsigned char a4) -{ - unsigned char result; - - result = a1 + a2 + a3 + a4; - - printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result); - - return result; - -} - -static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, - void *data __UNUSED__) -{ - unsigned char a1, a2, a3, a4; - - a1 = *(unsigned char *)avals[0]; - a2 = *(unsigned char *)avals[1]; - a3 = *(unsigned char *)avals[2]; - a4 = *(unsigned char *)avals[3]; - - *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4); - -} - -typedef unsigned char (*test_type)(unsigned char, unsigned char, - unsigned char, unsigned char); - -void test_func(ffi_cif *cif __UNUSED__, void *rval __UNUSED__, void **avals, - void *data __UNUSED__) -{ - printf("%d %d %d %d\n", *(unsigned char *)avals[0], - *(unsigned char *)avals[1], *(unsigned char *)avals[2], - *(unsigned char *)avals[3]); -} -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void * args_dbl[5]; - ffi_type * cl_arg_types[5]; - ffi_arg res_call; - unsigned char a, b, c, d, res_closure; - - a = 1; - b = 2; - c = 127; - d = 125; - - args_dbl[0] = &a; - args_dbl[1] = &b; - args_dbl[2] = &c; - args_dbl[3] = &d; - args_dbl[4] = NULL; - - cl_arg_types[0] = &ffi_type_uchar; - cl_arg_types[1] = &ffi_type_uchar; - cl_arg_types[2] = &ffi_type_uchar; - cl_arg_types[3] = &ffi_type_uchar; - cl_arg_types[4] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_uchar, cl_arg_types) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); - /* { dg-output "1 2 127 125: 255" } */ - printf("res: %d\n", (unsigned char)res_call); - /* { dg-output "\nres: 255" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); - - res_closure = (*((test_type)code))(1, 2, 127, 125); - /* { dg-output "\n1 2 127 125: 255" } */ - printf("res: %d\n", res_closure); - /* { dg-output "\nres: 255" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_ushort.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_ushort.c deleted file mode 100644 index dd10ca734..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_ushort.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check passing of multiple unsigned short values. - Limitations: none. - PR: PR13221. - Originator: 20031129 */ - -/* { dg-do run } */ -#include "ffitest.h" - -unsigned short test_func_fn(unsigned short a1, unsigned short a2) -{ - unsigned short result; - - result = a1 + a2; - - printf("%d %d: %d\n", a1, a2, result); - - return result; - -} - -static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, - void *data __UNUSED__) -{ - unsigned short a1, a2; - - a1 = *(unsigned short *)avals[0]; - a2 = *(unsigned short *)avals[1]; - - *(ffi_arg *)rval = test_func_fn(a1, a2); - -} - -typedef unsigned short (*test_type)(unsigned short, unsigned short); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void * args_dbl[3]; - ffi_type * cl_arg_types[3]; - ffi_arg res_call; - unsigned short a, b, res_closure; - - a = 2; - b = 32765; - - args_dbl[0] = &a; - args_dbl[1] = &b; - args_dbl[2] = NULL; - - cl_arg_types[0] = &ffi_type_ushort; - cl_arg_types[1] = &ffi_type_ushort; - cl_arg_types[2] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, - &ffi_type_ushort, cl_arg_types) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); - /* { dg-output "2 32765: 32767" } */ - printf("res: %d\n", (unsigned short)res_call); - /* { dg-output "\nres: 32767" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); - - res_closure = (*((test_type)code))(2, 32765); - /* { dg-output "\n2 32765: 32767" } */ - printf("res: %d\n", res_closure); - /* { dg-output "\nres: 32767" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_ushortchar.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_ushortchar.c deleted file mode 100644 index 2588e97f9..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_multi_ushortchar.c +++ /dev/null @@ -1,86 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check passing of multiple unsigned short/char values. - Limitations: none. - PR: PR13221. - Originator: 20031129 */ - -/* { dg-do run } */ -#include "ffitest.h" - -unsigned short test_func_fn(unsigned char a1, unsigned short a2, - unsigned char a3, unsigned short a4) -{ - unsigned short result; - - result = a1 + a2 + a3 + a4; - - printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result); - - return result; - -} - -static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, - void *data __UNUSED__) -{ - unsigned char a1, a3; - unsigned short a2, a4; - - a1 = *(unsigned char *)avals[0]; - a2 = *(unsigned short *)avals[1]; - a3 = *(unsigned char *)avals[2]; - a4 = *(unsigned short *)avals[3]; - - *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4); - -} - -typedef unsigned short (*test_type)(unsigned char, unsigned short, - unsigned char, unsigned short); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void * args_dbl[5]; - ffi_type * cl_arg_types[5]; - ffi_arg res_call; - unsigned char a, c; - unsigned short b, d, res_closure; - - a = 1; - b = 2; - c = 127; - d = 128; - - args_dbl[0] = &a; - args_dbl[1] = &b; - args_dbl[2] = &c; - args_dbl[3] = &d; - args_dbl[4] = NULL; - - cl_arg_types[0] = &ffi_type_uchar; - cl_arg_types[1] = &ffi_type_ushort; - cl_arg_types[2] = &ffi_type_uchar; - cl_arg_types[3] = &ffi_type_ushort; - cl_arg_types[4] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_ushort, cl_arg_types) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); - /* { dg-output "1 2 127 128: 258" } */ - printf("res: %d\n", (unsigned short)res_call); - /* { dg-output "\nres: 258" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); - - res_closure = (*((test_type)code))(1, 2, 127, 128); - /* { dg-output "\n1 2 127 128: 258" } */ - printf("res: %d\n", res_closure); - /* { dg-output "\nres: 258" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_pointer.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_pointer.c deleted file mode 100644 index d82a87a71..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_pointer.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check pointer arguments. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/6/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -#include "ffitest.h" - -void* cls_pointer_fn(void* a1, void* a2) -{ - void* result = (void*)((intptr_t)a1 + (intptr_t)a2); - - printf("0x%08x 0x%08x: 0x%08x\n", - (unsigned int)(uintptr_t) a1, - (unsigned int)(uintptr_t) a2, - (unsigned int)(uintptr_t) result); - - return result; -} - -static void -cls_pointer_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - void* a1 = *(void**)(args[0]); - void* a2 = *(void**)(args[1]); - - *(void**)resp = cls_pointer_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args[3]; - /* ffi_type cls_pointer_type; */ - ffi_type* arg_types[3]; - -/* cls_pointer_type.size = sizeof(void*); - cls_pointer_type.alignment = 0; - cls_pointer_type.type = FFI_TYPE_POINTER; - cls_pointer_type.elements = NULL;*/ - - void* arg1 = (void*)0x12345678; - void* arg2 = (void*)0x89abcdef; - ffi_arg res = 0; - - arg_types[0] = &ffi_type_pointer; - arg_types[1] = &ffi_type_pointer; - arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_pointer, - arg_types) == FFI_OK); - - args[0] = &arg1; - args[1] = &arg2; - args[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_pointer_fn), &res, args); - /* { dg-output "0x12345678 0x89abcdef: 0x9be02467" } */ - printf("res: 0x%08x\n", (unsigned int) res); - /* { dg-output "\nres: 0x9be02467" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_pointer_gn, NULL, code) == FFI_OK); - - res = (ffi_arg)(uintptr_t)((void*(*)(void*, void*))(code))(arg1, arg2); - /* { dg-output "\n0x12345678 0x89abcdef: 0x9be02467" } */ - printf("res: 0x%08x\n", (unsigned int) res); - /* { dg-output "\nres: 0x9be02467" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_pointer_stack.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_pointer_stack.c deleted file mode 100644 index 1f1d9157b..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_pointer_stack.c +++ /dev/null @@ -1,142 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check pointer arguments across multiple hideous stack frames. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/7/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -#include "ffitest.h" - -static long dummyVar; - -long dummy_func( - long double a1, char b1, - long double a2, char b2, - long double a3, char b3, - long double a4, char b4) -{ - return a1 + b1 + a2 + b2 + a3 + b3 + a4 + b4; -} - -void* cls_pointer_fn2(void* a1, void* a2) -{ - long double trample1 = (intptr_t)a1 + (intptr_t)a2; - char trample2 = ((char*)&a1)[0] + ((char*)&a2)[0]; - long double trample3 = (intptr_t)trample1 + (intptr_t)a1; - char trample4 = trample2 + ((char*)&a1)[1]; - long double trample5 = (intptr_t)trample3 + (intptr_t)a2; - char trample6 = trample4 + ((char*)&a2)[1]; - long double trample7 = (intptr_t)trample5 + (intptr_t)trample1; - char trample8 = trample6 + trample2; - void* result; - - dummyVar = dummy_func(trample1, trample2, trample3, trample4, - trample5, trample6, trample7, trample8); - - result = (void*)((intptr_t)a1 + (intptr_t)a2); - - printf("0x%08x 0x%08x: 0x%08x\n", - (unsigned int)(uintptr_t) a1, - (unsigned int)(uintptr_t) a2, - (unsigned int)(uintptr_t) result); - - return result; -} - -void* cls_pointer_fn1(void* a1, void* a2) -{ - long double trample1 = (intptr_t)a1 + (intptr_t)a2; - char trample2 = ((char*)&a1)[0] + ((char*)&a2)[0]; - long double trample3 = (intptr_t)trample1 + (intptr_t)a1; - char trample4 = trample2 + ((char*)&a1)[1]; - long double trample5 = (intptr_t)trample3 + (intptr_t)a2; - char trample6 = trample4 + ((char*)&a2)[1]; - long double trample7 = (intptr_t)trample5 + (intptr_t)trample1; - char trample8 = trample6 + trample2; - void* result; - - dummyVar = dummy_func(trample1, trample2, trample3, trample4, - trample5, trample6, trample7, trample8); - - result = (void*)((intptr_t)a1 + (intptr_t)a2); - - printf("0x%08x 0x%08x: 0x%08x\n", - (unsigned int)(intptr_t) a1, - (unsigned int)(intptr_t) a2, - (unsigned int)(intptr_t) result); - - result = cls_pointer_fn2(result, a1); - - return result; -} - -static void -cls_pointer_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - void* a1 = *(void**)(args[0]); - void* a2 = *(void**)(args[1]); - - long double trample1 = (intptr_t)a1 + (intptr_t)a2; - char trample2 = ((char*)&a1)[0] + ((char*)&a2)[0]; - long double trample3 = (intptr_t)trample1 + (intptr_t)a1; - char trample4 = trample2 + ((char*)&a1)[1]; - long double trample5 = (intptr_t)trample3 + (intptr_t)a2; - char trample6 = trample4 + ((char*)&a2)[1]; - long double trample7 = (intptr_t)trample5 + (intptr_t)trample1; - char trample8 = trample6 + trample2; - - dummyVar = dummy_func(trample1, trample2, trample3, trample4, - trample5, trample6, trample7, trample8); - - *(void**)resp = cls_pointer_fn1(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args[3]; - /* ffi_type cls_pointer_type; */ - ffi_type* arg_types[3]; - -/* cls_pointer_type.size = sizeof(void*); - cls_pointer_type.alignment = 0; - cls_pointer_type.type = FFI_TYPE_POINTER; - cls_pointer_type.elements = NULL;*/ - - void* arg1 = (void*)0x01234567; - void* arg2 = (void*)0x89abcdef; - ffi_arg res = 0; - - arg_types[0] = &ffi_type_pointer; - arg_types[1] = &ffi_type_pointer; - arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_pointer, - arg_types) == FFI_OK); - - args[0] = &arg1; - args[1] = &arg2; - args[2] = NULL; - - printf("\n"); - ffi_call(&cif, FFI_FN(cls_pointer_fn1), &res, args); - - printf("res: 0x%08x\n", (unsigned int) res); - /* { dg-output "\n0x01234567 0x89abcdef: 0x8acf1356" } */ - /* { dg-output "\n0x8acf1356 0x01234567: 0x8bf258bd" } */ - /* { dg-output "\nres: 0x8bf258bd" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_pointer_gn, NULL, code) == FFI_OK); - - res = (ffi_arg)(uintptr_t)((void*(*)(void*, void*))(code))(arg1, arg2); - - printf("res: 0x%08x\n", (unsigned int) res); - /* { dg-output "\n0x01234567 0x89abcdef: 0x8acf1356" } */ - /* { dg-output "\n0x8acf1356 0x01234567: 0x8bf258bd" } */ - /* { dg-output "\nres: 0x8bf258bd" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_schar.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_schar.c deleted file mode 100644 index 82986b172..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_schar.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Area: closure_call - Purpose: Check return value schar. - Limitations: none. - PR: none. - Originator: 20031108 */ - - - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_schar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - *(ffi_arg*)resp = *(signed char *)args[0]; - printf("%d: %d\n",*(signed char *)args[0], - (int)*(ffi_arg *)(resp)); -} -typedef signed char (*cls_ret_schar)(signed char); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - signed char res; - - cl_arg_types[0] = &ffi_type_schar; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_schar, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_schar_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_schar)code))(127); - /* { dg-output "127: 127" } */ - printf("res: %d\n", res); - /* { dg-output "\nres: 127" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_sint.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_sint.c deleted file mode 100644 index c7e13b73a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_sint.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Area: closure_call - Purpose: Check return value sint32. - Limitations: none. - PR: none. - Originator: 20031108 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_sint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - *(ffi_arg*)resp = *(signed int *)args[0]; - printf("%d: %d\n",*(signed int *)args[0], - (int)*(ffi_arg *)(resp)); -} -typedef signed int (*cls_ret_sint)(signed int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - signed int res; - - cl_arg_types[0] = &ffi_type_sint; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_sint_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_sint)code))(65534); - /* { dg-output "65534: 65534" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 65534" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_sshort.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_sshort.c deleted file mode 100644 index 846d57ed1..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_sshort.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Area: closure_call - Purpose: Check return value sshort. - Limitations: none. - PR: none. - Originator: 20031108 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_sshort_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - *(ffi_arg*)resp = *(signed short *)args[0]; - printf("%d: %d\n",*(signed short *)args[0], - (int)*(ffi_arg *)(resp)); -} -typedef signed short (*cls_ret_sshort)(signed short); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - signed short res; - - cl_arg_types[0] = &ffi_type_sshort; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_sshort, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_sshort_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_sshort)code))(255); - /* { dg-output "255: 255" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 255" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_struct_va1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_struct_va1.c deleted file mode 100644 index 6d1fdaeb6..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_struct_va1.c +++ /dev/null @@ -1,114 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Test doubles passed in variable argument lists. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/6/2007 */ - -/* { dg-do run } */ -/* { dg-output "" { xfail avr32*-*-* } } */ -#include "ffitest.h" - -struct small_tag -{ - unsigned char a; - unsigned char b; -}; - -struct large_tag -{ - unsigned a; - unsigned b; - unsigned c; - unsigned d; - unsigned e; -}; - -static void -test_fn (ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - int n = *(int*)args[0]; - struct small_tag s1 = * (struct small_tag *) args[1]; - struct large_tag l1 = * (struct large_tag *) args[2]; - struct small_tag s2 = * (struct small_tag *) args[3]; - - printf ("%d %d %d %d %d %d %d %d %d %d\n", n, s1.a, s1.b, - l1.a, l1.b, l1.c, l1.d, l1.e, - s2.a, s2.b); - * (ffi_arg*) resp = 42; -} - -int -main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc (sizeof (ffi_closure), &code); - ffi_type* arg_types[5]; - - ffi_arg res = 0; - - ffi_type s_type; - ffi_type *s_type_elements[3]; - - ffi_type l_type; - ffi_type *l_type_elements[6]; - - struct small_tag s1; - struct small_tag s2; - struct large_tag l1; - - int si; - - s_type.size = 0; - s_type.alignment = 0; - s_type.type = FFI_TYPE_STRUCT; - s_type.elements = s_type_elements; - - s_type_elements[0] = &ffi_type_uchar; - s_type_elements[1] = &ffi_type_uchar; - s_type_elements[2] = NULL; - - l_type.size = 0; - l_type.alignment = 0; - l_type.type = FFI_TYPE_STRUCT; - l_type.elements = l_type_elements; - - l_type_elements[0] = &ffi_type_uint; - l_type_elements[1] = &ffi_type_uint; - l_type_elements[2] = &ffi_type_uint; - l_type_elements[3] = &ffi_type_uint; - l_type_elements[4] = &ffi_type_uint; - l_type_elements[5] = NULL; - - arg_types[0] = &ffi_type_sint; - arg_types[1] = &s_type; - arg_types[2] = &l_type; - arg_types[3] = &s_type; - arg_types[4] = NULL; - - CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &ffi_type_sint, - arg_types) == FFI_OK); - - si = 4; - s1.a = 5; - s1.b = 6; - - s2.a = 20; - s2.b = 21; - - l1.a = 10; - l1.b = 11; - l1.c = 12; - l1.d = 13; - l1.e = 14; - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_fn, NULL, code) == FFI_OK); - - res = ((int (*)(int, ...))(code))(si, s1, l1, s2); - /* { dg-output "4 5 6 10 11 12 13 14 20 21" } */ - printf("res: %d\n", (int) res); - /* { dg-output "\nres: 42" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uchar.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uchar.c deleted file mode 100644 index c1317e795..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uchar.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Area: closure_call - Purpose: Check return value uchar. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_uchar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - *(ffi_arg*)resp = *(unsigned char *)args[0]; - printf("%d: %d\n",*(unsigned char *)args[0], - (int)*(ffi_arg *)(resp)); -} -typedef unsigned char (*cls_ret_uchar)(unsigned char); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - unsigned char res; - - cl_arg_types[0] = &ffi_type_uchar; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uchar, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_uchar_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_uchar)code))(127); - /* { dg-output "127: 127" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 127" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uchar_va.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uchar_va.c deleted file mode 100644 index 6491c5b3d..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uchar_va.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Area: closure_call - Purpose: Test anonymous unsigned char argument. - Limitations: none. - PR: none. - Originator: ARM Ltd. */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef unsigned char T; - -static void cls_ret_T_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) - { - *(ffi_arg *)resp = *(T *)args[0]; - - printf("%d: %d %d\n", (int)(*(ffi_arg *)resp), *(T *)args[0], *(T *)args[1]); - } - -typedef T (*cls_ret_T)(T, ...); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[3]; - T res; - - cl_arg_types[0] = &ffi_type_uchar; - cl_arg_types[1] = &ffi_type_uchar; - cl_arg_types[2] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, - &ffi_type_uchar, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_T_fn, NULL, code) == FFI_OK); - res = ((((cls_ret_T)code)(67, 4))); - /* { dg-output "67: 67 4" } */ - printf("res: %d\n", res); - /* { dg-output "\nres: 67" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uint.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uint.c deleted file mode 100644 index 885cff5c3..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uint.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Area: closure_call - Purpose: Check return value uint. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_uint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - *(ffi_arg *)resp = *(unsigned int *)args[0]; - - printf("%d: %d\n",*(unsigned int *)args[0], - (int)*(ffi_arg *)(resp)); -} -typedef unsigned int (*cls_ret_uint)(unsigned int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - unsigned int res; - - cl_arg_types[0] = &ffi_type_uint; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_uint_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_uint)code))(2147483647); - /* { dg-output "2147483647: 2147483647" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 2147483647" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uint_va.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uint_va.c deleted file mode 100644 index b04cfd19c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_uint_va.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Area: closure_call - Purpose: Test anonymous unsigned int argument. - Limitations: none. - PR: none. - Originator: ARM Ltd. */ - -/* { dg-do run } */ - -#include "ffitest.h" - -typedef unsigned int T; - -static void cls_ret_T_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) - { - *(ffi_arg *)resp = *(T *)args[0]; - - printf("%d: %d %d\n", (int)*(ffi_arg *)resp, *(T *)args[0], *(T *)args[1]); - } - -typedef T (*cls_ret_T)(T, ...); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[3]; - T res; - - cl_arg_types[0] = &ffi_type_uint; - cl_arg_types[1] = &ffi_type_uint; - cl_arg_types[2] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, - &ffi_type_uint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_T_fn, NULL, code) == FFI_OK); - res = ((((cls_ret_T)code)(67, 4))); - /* { dg-output "67: 67 4" } */ - printf("res: %d\n", res); - /* { dg-output "\nres: 67" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ulong_va.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ulong_va.c deleted file mode 100644 index 0315082e0..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ulong_va.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Area: closure_call - Purpose: Test anonymous unsigned long argument. - Limitations: none. - PR: none. - Originator: ARM Ltd. */ - -/* { dg-do run } */ - -#include "ffitest.h" - -typedef unsigned long T; - -static void cls_ret_T_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) - { - *(T *)resp = *(T *)args[0]; - - printf("%ld: %ld %ld\n", *(T *)resp, *(T *)args[0], *(T *)args[1]); - } - -typedef T (*cls_ret_T)(T, ...); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[3]; - T res; - - cl_arg_types[0] = &ffi_type_ulong; - cl_arg_types[1] = &ffi_type_ulong; - cl_arg_types[2] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, - &ffi_type_ulong, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_T_fn, NULL, code) == FFI_OK); - res = ((((cls_ret_T)code)(67, 4))); - /* { dg-output "67: 67 4" } */ - printf("res: %ld\n", res); - /* { dg-output "\nres: 67" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ulonglong.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ulonglong.c deleted file mode 100644 index 62f2cae63..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ulonglong.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Area: closure_call - Purpose: Check return value long long. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ -#include "ffitest.h" - -static void cls_ret_ulonglong_fn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - *(unsigned long long *)resp= 0xfffffffffffffffLL ^ *(unsigned long long *)args[0]; - - printf("%" PRIuLL ": %" PRIuLL "\n",*(unsigned long long *)args[0], - *(unsigned long long *)(resp)); -} -typedef unsigned long long (*cls_ret_ulonglong)(unsigned long long); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - unsigned long long res; - - cl_arg_types[0] = &ffi_type_uint64; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uint64, cl_arg_types) == FFI_OK); - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_ulonglong_fn, NULL, code) == FFI_OK); - res = (*((cls_ret_ulonglong)code))(214LL); - /* { dg-output "214: 1152921504606846761" } */ - printf("res: %" PRIdLL "\n", res); - /* { dg-output "\nres: 1152921504606846761" } */ - - res = (*((cls_ret_ulonglong)code))(9223372035854775808LL); - /* { dg-output "\n9223372035854775808: 8070450533247928831" } */ - printf("res: %" PRIdLL "\n", res); - /* { dg-output "\nres: 8070450533247928831" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ushort.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ushort.c deleted file mode 100644 index a00100e07..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ushort.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Area: closure_call - Purpose: Check return value ushort. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_ushort_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - *(ffi_arg*)resp = *(unsigned short *)args[0]; - - printf("%d: %d\n",*(unsigned short *)args[0], - (int)*(ffi_arg *)(resp)); -} -typedef unsigned short (*cls_ret_ushort)(unsigned short); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - unsigned short res; - - cl_arg_types[0] = &ffi_type_ushort; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_ushort, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_ushort_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_ushort)code))(65535); - /* { dg-output "65535: 65535" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 65535" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ushort_va.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ushort_va.c deleted file mode 100644 index 37aa1064e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/cls_ushort_va.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Area: closure_call - Purpose: Test anonymous unsigned short argument. - Limitations: none. - PR: none. - Originator: ARM Ltd. */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef unsigned short T; - -static void cls_ret_T_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) - { - *(ffi_arg *)resp = *(T *)args[0]; - - printf("%d: %d %d\n", (int)(*(ffi_arg *)resp), *(T *)args[0], *(T *)args[1]); - } - -typedef T (*cls_ret_T)(T, ...); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[3]; - T res; - - cl_arg_types[0] = &ffi_type_ushort; - cl_arg_types[1] = &ffi_type_ushort; - cl_arg_types[2] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, - &ffi_type_ushort, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_T_fn, NULL, code) == FFI_OK); - res = ((((cls_ret_T)code)(67, 4))); - /* { dg-output "67: 67 4" } */ - printf("res: %d\n", res); - /* { dg-output "\nres: 67" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/err_bad_abi.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/err_bad_abi.c deleted file mode 100644 index f5a73179e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/err_bad_abi.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Area: ffi_prep_cif, ffi_prep_closure - Purpose: Test error return for bad ABIs. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/6/2007 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -static void -dummy_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, - void** args __UNUSED__, void* userdata __UNUSED__) -{} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type* arg_types[1]; - - arg_types[0] = NULL; - - CHECK(ffi_prep_cif(&cif, 255, 0, &ffi_type_void, - arg_types) == FFI_BAD_ABI); - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, &ffi_type_void, - arg_types) == FFI_OK); - - cif.abi= 255; - - CHECK(ffi_prep_closure_loc(pcl, &cif, dummy_fn, NULL, code) == FFI_BAD_ABI); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/err_bad_typedef.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/err_bad_typedef.c deleted file mode 100644 index bf6016186..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/err_bad_typedef.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Area: ffi_prep_cif - Purpose: Test error return for bad typedefs. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/6/2007 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -int main (void) -{ - ffi_cif cif; - ffi_type* arg_types[1]; - - ffi_type badType = ffi_type_void; - - arg_types[0] = NULL; - - badType.size = 0; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, &badType, - arg_types) == FFI_BAD_TYPEDEF); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/ffitest.h b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/ffitest.h deleted file mode 100644 index 15d5e4412..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/ffitest.h +++ /dev/null @@ -1,135 +0,0 @@ -#include -#include -#include -#include -#include -#include "fficonfig.h" - -#if defined HAVE_STDINT_H -#include -#endif - -#if defined HAVE_INTTYPES_H -#include -#endif - -#define MAX_ARGS 256 - -#define CHECK(x) (void)(!(x) ? (abort(), 1) : 0) - -/* Define macros so that compilers other than gcc can run the tests. */ -#undef __UNUSED__ -#if defined(__GNUC__) -#define __UNUSED__ __attribute__((__unused__)) -#define __STDCALL__ __attribute__((stdcall)) -#define __THISCALL__ __attribute__((thiscall)) -#define __FASTCALL__ __attribute__((fastcall)) -#else -#define __UNUSED__ -#define __STDCALL__ __stdcall -#define __THISCALL__ __thiscall -#define __FASTCALL__ __fastcall -#endif - -#ifndef ABI_NUM -#define ABI_NUM FFI_DEFAULT_ABI -#define ABI_ATTR -#endif - -/* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a - file open. */ -#ifdef HAVE_MMAP_ANON -# undef HAVE_MMAP_DEV_ZERO - -# include -# ifndef MAP_FAILED -# define MAP_FAILED -1 -# endif -# if !defined (MAP_ANONYMOUS) && defined (MAP_ANON) -# define MAP_ANONYMOUS MAP_ANON -# endif -# define USING_MMAP - -#endif - -#ifdef HAVE_MMAP_DEV_ZERO - -# include -# ifndef MAP_FAILED -# define MAP_FAILED -1 -# endif -# define USING_MMAP - -#endif - -/* MinGW kludge. */ -#ifdef _WIN64 -#define PRIdLL "I64d" -#define PRIuLL "I64u" -#else -#define PRIdLL "lld" -#define PRIuLL "llu" -#endif - -/* Tru64 UNIX kludge. */ -#if defined(__alpha__) && defined(__osf__) -/* Tru64 UNIX V4.0 doesn't support %lld/%lld, but long is 64-bit. */ -#undef PRIdLL -#define PRIdLL "ld" -#undef PRIuLL -#define PRIuLL "lu" -#define PRId8 "hd" -#define PRIu8 "hu" -#define PRId64 "ld" -#define PRIu64 "lu" -#define PRIuPTR "lu" -#endif - -/* PA HP-UX kludge. */ -#if defined(__hppa__) && defined(__hpux__) && !defined(PRIuPTR) -#define PRIuPTR "lu" -#endif - -/* IRIX kludge. */ -#if defined(__sgi) -/* IRIX 6.5 provides all definitions, but only for C99 - compilations. */ -#define PRId8 "hhd" -#define PRIu8 "hhu" -#if (_MIPS_SZLONG == 32) -#define PRId64 "lld" -#define PRIu64 "llu" -#endif -/* This doesn't match , which always has "lld" here, but the - arguments are uint64_t, int64_t, which are unsigned long, long for - 64-bit in . */ -#if (_MIPS_SZLONG == 64) -#define PRId64 "ld" -#define PRIu64 "lu" -#endif -/* This doesn't match , which has "u" here, but the arguments - are uintptr_t, which is always unsigned long. */ -#define PRIuPTR "lu" -#endif - -/* Solaris < 10 kludge. */ -#if defined(__sun__) && defined(__svr4__) && !defined(PRIuPTR) -#if defined(__arch64__) || defined (__x86_64__) -#define PRIuPTR "lu" -#else -#define PRIuPTR "u" -#endif -#endif - -/* MSVC kludge. */ -#if defined _MSC_VER -#define PRIuPTR "lu" -#define PRIu8 "u" -#define PRId8 "d" -#define PRIu64 "I64u" -#define PRId64 "I64d" -#endif - -#ifndef PRIuPTR -#define PRIuPTR "u" -#endif diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float.c deleted file mode 100644 index fbc272d84..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value float. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ - -#include "ffitest.h" - -static int floating(int a, float b, double c, long double d) -{ - int i; - - i = (int) ((float)a/b + ((float)c/(float)d)); - - return i; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - - float f; - signed int si1; - double d; - long double ld; - - args[0] = &ffi_type_sint; - values[0] = &si1; - args[1] = &ffi_type_float; - values[1] = &f; - args[2] = &ffi_type_double; - values[2] = &d; - args[3] = &ffi_type_longdouble; - values[3] = &ld; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_sint, args) == FFI_OK); - - si1 = 6; - f = 3.14159; - d = (double)1.0/(double)3.0; - ld = 2.71828182846L; - - floating (si1, f, d, ld); - - ffi_call(&cif, FFI_FN(floating), &rint, values); - - printf ("%d vs %d\n", (int)rint, floating (si1, f, d, ld)); - - CHECK((int)rint == floating(si1, f, d, ld)); - - exit (0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float1.c deleted file mode 100644 index 991d059fe..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float1.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value double. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -#include "float.h" - -typedef union -{ - double d; - unsigned char c[sizeof (double)]; -} value_type; - -#define CANARY 0xba - -static double dblit(float f) -{ - return f/3.0; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - float f; - value_type result[2]; - unsigned int i; - - args[0] = &ffi_type_float; - values[0] = &f; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_double, args) == FFI_OK); - - f = 3.14159; - - /* Put a canary in the return array. This is a regression test for - a buffer overrun. */ - memset(result[1].c, CANARY, sizeof (double)); - - ffi_call(&cif, FFI_FN(dblit), &result[0].d, values); - - /* These are not always the same!! Check for a reasonable delta */ - - CHECK(result[0].d - dblit(f) < DBL_EPSILON); - - /* Check the canary. */ - for (i = 0; i < sizeof (double); ++i) - CHECK(result[1].c[i] == CANARY); - - exit(0); - -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float2.c deleted file mode 100644 index a0b296cf4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float2.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value long double. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-excess-errors "fails" { target x86_64-*-mingw* x86_64-*-cygwin* } } */ -/* { dg-do run { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ - -#include "ffitest.h" -#include "float.h" - -static long double ldblit(float f) -{ - return (long double) (((long double) f)/ (long double) 3.0); -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - float f; - long double ld; - - args[0] = &ffi_type_float; - values[0] = &f; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_longdouble, args) == FFI_OK); - - f = 3.14159; - -#if 1 - /* This is ifdef'd out for now. long double support under SunOS/gcc - is pretty much non-existent. You'll get the odd bus error in library - routines like printf(). */ - printf ("%Lf\n", ldblit(f)); -#endif - ld = 666; - ffi_call(&cif, FFI_FN(ldblit), &ld, values); - -#if 1 - /* This is ifdef'd out for now. long double support under SunOS/gcc - is pretty much non-existent. You'll get the odd bus error in library - routines like printf(). */ - printf ("%Lf, %Lf, %Lf, %Lf\n", ld, ldblit(f), ld - ldblit(f), LDBL_EPSILON); -#endif - - /* These are not always the same!! Check for a reasonable delta */ - if (ld - ldblit(f) < LDBL_EPSILON) - puts("long double return value tests ok!"); - else - CHECK(0); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float3.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float3.c deleted file mode 100644 index 76bd5f287..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float3.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Area: ffi_call - Purpose: Check float arguments with different orders. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ - -#include "ffitest.h" -#include "float.h" - -static double floating_1(float a, double b, long double c) -{ - return (double) a + b + (double) c; -} - -static double floating_2(long double a, double b, float c) -{ - return (double) a + b + (double) c; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - double rd; - - float f; - double d; - long double ld; - - args[0] = &ffi_type_float; - values[0] = &f; - args[1] = &ffi_type_double; - values[1] = &d; - args[2] = &ffi_type_longdouble; - values[2] = &ld; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, - &ffi_type_double, args) == FFI_OK); - - f = 3.14159; - d = (double)1.0/(double)3.0; - ld = 2.71828182846L; - - floating_1 (f, d, ld); - - ffi_call(&cif, FFI_FN(floating_1), &rd, values); - - CHECK(rd - floating_1(f, d, ld) < DBL_EPSILON); - - args[0] = &ffi_type_longdouble; - values[0] = &ld; - args[1] = &ffi_type_double; - values[1] = &d; - args[2] = &ffi_type_float; - values[2] = &f; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, - &ffi_type_double, args) == FFI_OK); - - floating_2 (ld, d, f); - - ffi_call(&cif, FFI_FN(floating_2), &rd, values); - - CHECK(rd - floating_2(ld, d, f) < DBL_EPSILON); - - exit (0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float4.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float4.c deleted file mode 100644 index 0dd6d85e7..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float4.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Area: ffi_call - Purpose: Check denorm double value. - Limitations: none. - PR: PR26483. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -/* { dg-options "-mieee" { target alpha*-*-* } } */ - -#include "ffitest.h" -#include "float.h" - -typedef union -{ - double d; - unsigned char c[sizeof (double)]; -} value_type; - -#define CANARY 0xba - -static double dblit(double d) -{ - return d; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - double d; - value_type result[2]; - unsigned int i; - - args[0] = &ffi_type_double; - values[0] = &d; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_double, args) == FFI_OK); - - d = DBL_MIN / 2; - - /* Put a canary in the return array. This is a regression test for - a buffer overrun. */ - memset(result[1].c, CANARY, sizeof (double)); - - ffi_call(&cif, FFI_FN(dblit), &result[0].d, values); - - /* The standard delta check doesn't work for denorms. Since we didn't do - any arithmetic, we should get the original result back, and hence an - exact check should be OK here. */ - - CHECK(result[0].d == dblit(d)); - - /* Check the canary. */ - for (i = 0; i < sizeof (double); ++i) - CHECK(result[1].c[i] == CANARY); - - exit(0); - -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float_va.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float_va.c deleted file mode 100644 index 5acff91f6..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/float_va.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Area: fp and variadics - Purpose: check fp inputs and returns work on variadics, even the fixed params - Limitations: None - PR: none - Originator: 2011-01-25 - - Intended to stress the difference in ABI on ARM vfp -*/ - -/* { dg-do run } */ - -#include - -#include "ffitest.h" - -/* prints out all the parameters, and returns the sum of them all. - * 'x' is the number of variadic parameters all of which are double in this test - */ -double float_va_fn(unsigned int x, double y,...) -{ - double total=0.0; - va_list ap; - unsigned int i; - - total+=(double)x; - total+=y; - - printf("%u: %.1f :", x, y); - - va_start(ap, y); - for(i=0;i -#include -#include - -static float ABI_ATTR many(float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13) -{ -#if 0 - printf("%f %f %f %f %f %f %f %f %f %f %f %f %f\n", - (double) f1, (double) f2, (double) f3, (double) f4, (double) f5, - (double) f6, (double) f7, (double) f8, (double) f9, (double) f10, - (double) f11, (double) f12, (double) f13); -#endif - - return f1+f2+f3+f4+f5+f6+f7+f8+f9+f10+f11+f12+f13; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[13]; - void *values[13]; - float fa[13]; - float f, ff; - int i; - - for (i = 0; i < 13; i++) - { - args[i] = &ffi_type_float; - values[i] = &fa[i]; - fa[i] = (float) i; - } - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 13, - &ffi_type_float, args) == FFI_OK); - - ffi_call(&cif, FFI_FN(many), &f, values); - - ff = many(fa[0], fa[1], - fa[2], fa[3], - fa[4], fa[5], - fa[6], fa[7], - fa[8], fa[9], - fa[10],fa[11],fa[12]); - - if (fabs(f - ff) < FLT_EPSILON) - exit(0); - else - abort(); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/many2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/many2.c deleted file mode 100644 index 1c85746e4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/many2.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Area: ffi_call - Purpose: Check uint8_t arguments. - Limitations: none. - PR: PR45677. - Originator: Dan Witte 20100916 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -#define NARGS 7 - -typedef unsigned char u8; - -#ifdef __GNUC__ -__attribute__((noinline)) -#endif -uint8_t -foo (uint8_t a, uint8_t b, uint8_t c, uint8_t d, - uint8_t e, uint8_t f, uint8_t g) -{ - return a + b + c + d + e + f + g; -} - -uint8_t ABI_ATTR -bar (uint8_t a, uint8_t b, uint8_t c, uint8_t d, - uint8_t e, uint8_t f, uint8_t g) -{ - return foo (a, b, c, d, e, f, g); -} - -int -main (void) -{ - ffi_type *ffitypes[NARGS]; - int i; - ffi_cif cif; - ffi_arg result = 0; - uint8_t args[NARGS]; - void *argptrs[NARGS]; - - for (i = 0; i < NARGS; ++i) - ffitypes[i] = &ffi_type_uint8; - - CHECK (ffi_prep_cif (&cif, ABI_NUM, NARGS, - &ffi_type_uint8, ffitypes) == FFI_OK); - - for (i = 0; i < NARGS; ++i) - { - args[i] = i; - argptrs[i] = &args[i]; - } - ffi_call (&cif, FFI_FN (bar), &result, argptrs); - - CHECK (result == 21); - return 0; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/negint.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/negint.c deleted file mode 100644 index 6e2f26fc1..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/negint.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Area: ffi_call - Purpose: Check that negative integers are passed correctly. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ - -#include "ffitest.h" - -static int checking(int a, short b, signed char c) -{ - - return (a < 0 && b < 0 && c < 0); -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - - signed int si; - signed short ss; - signed char sc; - - args[0] = &ffi_type_sint; - values[0] = &si; - args[1] = &ffi_type_sshort; - values[1] = &ss; - args[2] = &ffi_type_schar; - values[2] = ≻ - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, - &ffi_type_sint, args) == FFI_OK); - - si = -6; - ss = -12; - sc = -1; - - checking (si, ss, sc); - - ffi_call(&cif, FFI_FN(checking), &rint, values); - - printf ("%d vs %d\n", (int)rint, checking (si, ss, sc)); - - CHECK(rint != 0); - - exit (0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct.c deleted file mode 100644 index c15e3a033..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct.c +++ /dev/null @@ -1,152 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_16byte1 { - double a; - float b; - int c; -} cls_struct_16byte1; - -typedef struct cls_struct_16byte2 { - int ii; - double dd; - float ff; -} cls_struct_16byte2; - -typedef struct cls_struct_combined { - cls_struct_16byte1 d; - cls_struct_16byte2 e; -} cls_struct_combined; - -cls_struct_combined cls_struct_combined_fn(struct cls_struct_16byte1 b0, - struct cls_struct_16byte2 b1, - struct cls_struct_combined b2) -{ - struct cls_struct_combined result; - - result.d.a = b0.a + b1.dd + b2.d.a; - result.d.b = b0.b + b1.ff + b2.d.b; - result.d.c = b0.c + b1.ii + b2.d.c; - result.e.ii = b0.c + b1.ii + b2.e.ii; - result.e.dd = b0.a + b1.dd + b2.e.dd; - result.e.ff = b0.b + b1.ff + b2.e.ff; - - printf("%g %g %d %d %g %g %g %g %d %d %g %g: %g %g %d %d %g %g\n", - b0.a, b0.b, b0.c, - b1.ii, b1.dd, b1.ff, - b2.d.a, b2.d.b, b2.d.c, - b2.e.ii, b2.e.dd, b2.e.ff, - result.d.a, result.d.b, result.d.c, - result.e.ii, result.e.dd, result.e.ff); - - return result; -} - -static void -cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_16byte1 b0; - struct cls_struct_16byte2 b1; - struct cls_struct_combined b2; - - b0 = *(struct cls_struct_16byte1*)(args[0]); - b1 = *(struct cls_struct_16byte2*)(args[1]); - b2 = *(struct cls_struct_combined*)(args[2]); - - - *(cls_struct_combined*)resp = cls_struct_combined_fn(b0, b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[5]; - ffi_type* cls_struct_fields1[5]; - ffi_type* cls_struct_fields2[5]; - ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6}; - struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0}; - struct cls_struct_combined g_dbl = {{4.0, 5.0, 6}, - {3, 1.0, 8.0}}; - struct cls_struct_combined res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_type2.size = 0; - cls_struct_type2.alignment = 0; - cls_struct_type2.type = FFI_TYPE_STRUCT; - cls_struct_type2.elements = cls_struct_fields2; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_float; - cls_struct_fields[2] = &ffi_type_sint; - cls_struct_fields[3] = NULL; - - cls_struct_fields1[0] = &ffi_type_sint; - cls_struct_fields1[1] = &ffi_type_double; - cls_struct_fields1[2] = &ffi_type_float; - cls_struct_fields1[3] = NULL; - - cls_struct_fields2[0] = &cls_struct_type; - cls_struct_fields2[1] = &cls_struct_type1; - cls_struct_fields2[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = &cls_struct_type2; - dbl_arg_types[3] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type2, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_combined_fn), &res_dbl, args_dbl); - /* { dg-output "9 2 6 1 2 3 4 5 6 3 1 8: 15 10 13 10 12 13" } */ - CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a)); - CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b)); - CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c)); - CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii)); - CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd)); - CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_combined(*)(cls_struct_16byte1, - cls_struct_16byte2, - cls_struct_combined)) - (code))(e_dbl, f_dbl, g_dbl); - /* { dg-output "\n9 2 6 1 2 3 4 5 6 3 1 8: 15 10 13 10 12 13" } */ - CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a)); - CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b)); - CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c)); - CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii)); - CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd)); - CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff)); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct1.c deleted file mode 100644 index 477a6b9bd..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct1.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_16byte1 { - double a; - float b; - int c; -} cls_struct_16byte1; - -typedef struct cls_struct_16byte2 { - int ii; - double dd; - float ff; -} cls_struct_16byte2; - -typedef struct cls_struct_combined { - cls_struct_16byte1 d; - cls_struct_16byte2 e; -} cls_struct_combined; - -cls_struct_combined cls_struct_combined_fn(struct cls_struct_16byte1 b0, - struct cls_struct_16byte2 b1, - struct cls_struct_combined b2, - struct cls_struct_16byte1 b3) -{ - struct cls_struct_combined result; - - result.d.a = b0.a + b1.dd + b2.d.a; - result.d.b = b0.b + b1.ff + b2.d.b; - result.d.c = b0.c + b1.ii + b2.d.c; - result.e.ii = b0.c + b1.ii + b2.e.ii; - result.e.dd = b0.a + b1.dd + b2.e.dd; - result.e.ff = b0.b + b1.ff + b2.e.ff; - - printf("%g %g %d %d %g %g %g %g %d %d %g %g %g %g %d: %g %g %d %d %g %g\n", - b0.a, b0.b, b0.c, - b1.ii, b1.dd, b1.ff, - b2.d.a, b2.d.b, b2.d.c, - b2.e.ii, b2.e.dd, b2.e.ff, - b3.a, b3.b, b3.c, - result.d.a, result.d.b, result.d.c, - result.e.ii, result.e.dd, result.e.ff); - - return result; -} - -static void -cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_16byte1 b0; - struct cls_struct_16byte2 b1; - struct cls_struct_combined b2; - struct cls_struct_16byte1 b3; - - b0 = *(struct cls_struct_16byte1*)(args[0]); - b1 = *(struct cls_struct_16byte2*)(args[1]); - b2 = *(struct cls_struct_combined*)(args[2]); - b3 = *(struct cls_struct_16byte1*)(args[3]); - - - *(cls_struct_combined*)resp = cls_struct_combined_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[5]; - ffi_type* cls_struct_fields1[5]; - ffi_type* cls_struct_fields2[5]; - ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6}; - struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0}; - struct cls_struct_combined g_dbl = {{4.0, 5.0, 6}, - {3, 1.0, 8.0}}; - struct cls_struct_16byte1 h_dbl = { 3.0, 2.0, 4}; - struct cls_struct_combined res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_type2.size = 0; - cls_struct_type2.alignment = 0; - cls_struct_type2.type = FFI_TYPE_STRUCT; - cls_struct_type2.elements = cls_struct_fields2; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_float; - cls_struct_fields[2] = &ffi_type_sint; - cls_struct_fields[3] = NULL; - - cls_struct_fields1[0] = &ffi_type_sint; - cls_struct_fields1[1] = &ffi_type_double; - cls_struct_fields1[2] = &ffi_type_float; - cls_struct_fields1[3] = NULL; - - cls_struct_fields2[0] = &cls_struct_type; - cls_struct_fields2[1] = &cls_struct_type1; - cls_struct_fields2[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = &cls_struct_type2; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type2, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_combined_fn), &res_dbl, args_dbl); - /* { dg-output "9 2 6 1 2 3 4 5 6 3 1 8 3 2 4: 15 10 13 10 12 13" } */ - CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a)); - CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b)); - CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c)); - CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii)); - CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd)); - CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_combined(*)(cls_struct_16byte1, - cls_struct_16byte2, - cls_struct_combined, - cls_struct_16byte1)) - (code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n9 2 6 1 2 3 4 5 6 3 1 8 3 2 4: 15 10 13 10 12 13" } */ - CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a)); - CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b)); - CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c)); - CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii)); - CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd)); - CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff)); - /* CHECK( 1 == 0); */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct10.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct10.c deleted file mode 100644 index 34a74e718..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct10.c +++ /dev/null @@ -1,133 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - unsigned long long a; - unsigned char b; -} A; - -typedef struct B { - unsigned char y; - struct A x; - unsigned int z; -} B; - -typedef struct C { - unsigned long long d; - unsigned char e; -} C; - -static B B_fn(struct A b2, struct B b3, struct C b4) -{ - struct B result; - - result.x.a = b2.a + b3.x.a + b3.z + b4.d; - result.x.b = b2.b + b3.x.b + b3.y + b4.e; - result.y = b2.b + b3.x.b + b4.e; - - printf("%d %d %d %d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, - (int)b3.x.a, b3.x.b, b3.y, b3.z, (int)b4.d, b4.e, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - struct C b2; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - b2 = *(struct C*)(args[2]); - - *(B*)resp = B_fn(b0, b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[4]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[4]; - ffi_type* cls_struct_fields2[3]; - ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; - ffi_type* dbl_arg_types[4]; - - struct A e_dbl = { 1LL, 7}; - struct B f_dbl = { 99, {12LL , 127}, 255}; - struct C g_dbl = { 2LL, 9}; - - struct B res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_type2.size = 0; - cls_struct_type2.alignment = 0; - cls_struct_type2.type = FFI_TYPE_STRUCT; - cls_struct_type2.elements = cls_struct_fields2; - - cls_struct_fields[0] = &ffi_type_uint64; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &ffi_type_uchar; - cls_struct_fields1[1] = &cls_struct_type; - cls_struct_fields1[2] = &ffi_type_uint; - cls_struct_fields1[3] = NULL; - - cls_struct_fields2[0] = &ffi_type_uint64; - cls_struct_fields2[1] = &ffi_type_uchar; - cls_struct_fields2[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = &cls_struct_type2; - dbl_arg_types[3] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99 255 2 9: 270 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + f_dbl.z + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl); - /* { dg-output "\n1 7 12 127 99 255 2 9: 270 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + f_dbl.z + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct11.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct11.c deleted file mode 100644 index 351049382..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct11.c +++ /dev/null @@ -1,121 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check parameter passing with nested structs - of a single type. This tests the special cases - for homogeneous floating-point aggregates in the - AArch64 PCS. - Limitations: none. - PR: none. - Originator: ARM Ltd. */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - float a_x; - float a_y; -} A; - -typedef struct B { - float b_x; - float b_y; -} B; - -typedef struct C { - A a; - B b; -} C; - -static C C_fn (int x, int y, int z, C source, int i, int j, int k) -{ - C result; - result.a.a_x = source.a.a_x; - result.a.a_y = source.a.a_y; - result.b.b_x = source.b.b_x; - result.b.b_y = source.b.b_y; - - printf ("%d, %d, %d, %d, %d, %d\n", x, y, z, i, j, k); - - printf ("%.1f, %.1f, %.1f, %.1f, " - "%.1f, %.1f, %.1f, %.1f\n", - source.a.a_x, source.a.a_y, - source.b.b_x, source.b.b_y, - result.a.a_x, result.a.a_y, - result.b.b_x, result.b.b_y); - - return result; -} - -int main (void) -{ - ffi_cif cif; - - ffi_type* struct_fields_source_a[3]; - ffi_type* struct_fields_source_b[3]; - ffi_type* struct_fields_source_c[3]; - ffi_type* arg_types[8]; - - ffi_type struct_type_a, struct_type_b, struct_type_c; - - struct A source_fld_a = {1.0, 2.0}; - struct B source_fld_b = {4.0, 8.0}; - int k = 1; - - struct C result; - struct C source = {source_fld_a, source_fld_b}; - - struct_type_a.size = 0; - struct_type_a.alignment = 0; - struct_type_a.type = FFI_TYPE_STRUCT; - struct_type_a.elements = struct_fields_source_a; - - struct_type_b.size = 0; - struct_type_b.alignment = 0; - struct_type_b.type = FFI_TYPE_STRUCT; - struct_type_b.elements = struct_fields_source_b; - - struct_type_c.size = 0; - struct_type_c.alignment = 0; - struct_type_c.type = FFI_TYPE_STRUCT; - struct_type_c.elements = struct_fields_source_c; - - struct_fields_source_a[0] = &ffi_type_float; - struct_fields_source_a[1] = &ffi_type_float; - struct_fields_source_a[2] = NULL; - - struct_fields_source_b[0] = &ffi_type_float; - struct_fields_source_b[1] = &ffi_type_float; - struct_fields_source_b[2] = NULL; - - struct_fields_source_c[0] = &struct_type_a; - struct_fields_source_c[1] = &struct_type_b; - struct_fields_source_c[2] = NULL; - - arg_types[0] = &ffi_type_sint32; - arg_types[1] = &ffi_type_sint32; - arg_types[2] = &ffi_type_sint32; - arg_types[3] = &struct_type_c; - arg_types[4] = &ffi_type_sint32; - arg_types[5] = &ffi_type_sint32; - arg_types[6] = &ffi_type_sint32; - arg_types[7] = NULL; - - void *args[7]; - args[0] = &k; - args[1] = &k; - args[2] = &k; - args[3] = &source; - args[4] = &k; - args[5] = &k; - args[6] = &k; - CHECK (ffi_prep_cif (&cif, FFI_DEFAULT_ABI, 7, &struct_type_c, - arg_types) == FFI_OK); - - ffi_call (&cif, FFI_FN (C_fn), &result, args); - /* { dg-output "1, 1, 1, 1, 1, 1\n" } */ - /* { dg-output "1.0, 2.0, 4.0, 8.0, 1.0, 2.0, 4.0, 8.0" } */ - CHECK (result.a.a_x == source.a.a_x); - CHECK (result.a.a_y == source.a.a_y); - CHECK (result.b.b_x == source.b.b_x); - CHECK (result.b.b_y == source.b.b_y); - exit (0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct2.c deleted file mode 100644 index 69268cdb8..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct2.c +++ /dev/null @@ -1,110 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20030911 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - unsigned long a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -B B_fn(struct A b0, struct B b1) -{ - struct B result; - - result.x.a = b0.a + b1.x.a; - result.x.b = b0.b + b1.x.b + b1.y; - result.y = b0.b + b1.x.b; - - printf("%lu %d %lu %d %d: %lu %d %d\n", b0.a, b0.b, b1.x.a, b1.x.b, b1.y, - result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - - *(B*)resp = B_fn(b0, b1); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type cls_struct_type, cls_struct_type1; - ffi_type* dbl_arg_types[3]; - - struct A e_dbl = { 1, 7}; - struct B f_dbl = {{12 , 127}, 99}; - - struct B res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_fields[0] = &ffi_type_ulong; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); - /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct3.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct3.c deleted file mode 100644 index ab18cad73..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct3.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20030911 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - unsigned long long a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -B B_fn(struct A b0, struct B b1) -{ - struct B result; - - result.x.a = b0.a + b1.x.a; - result.x.b = b0.b + b1.x.b + b1.y; - result.y = b0.b + b1.x.b; - - printf("%d %d %d %d %d: %d %d %d\n", (int)b0.a, b0.b, - (int)b1.x.a, b1.x.b, b1.y, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - - *(B*)resp = B_fn(b0, b1); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type cls_struct_type, cls_struct_type1; - ffi_type* dbl_arg_types[3]; - - struct A e_dbl = { 1LL, 7}; - struct B f_dbl = {{12LL , 127}, 99}; - - struct B res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_fields[0] = &ffi_type_uint64; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); - /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct4.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct4.c deleted file mode 100644 index 2ffb4d65a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct4.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: PR 25630. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - double a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -static B B_fn(struct A b2, struct B b3) -{ - struct B result; - - result.x.a = b2.a + b3.x.a; - result.x.b = b2.b + b3.x.b + b3.y; - result.y = b2.b + b3.x.b; - - printf("%d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, - (int)b3.x.a, b3.x.b, b3.y, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - - *(B*)resp = B_fn(b0, b1); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type cls_struct_type, cls_struct_type1; - ffi_type* dbl_arg_types[3]; - - struct A e_dbl = { 1.0, 7}; - struct B f_dbl = {{12.0 , 127}, 99}; - - struct B res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); - /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct5.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct5.c deleted file mode 100644 index 6c79845d9..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct5.c +++ /dev/null @@ -1,112 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - long double a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -static B B_fn(struct A b2, struct B b3) -{ - struct B result; - - result.x.a = b2.a + b3.x.a; - result.x.b = b2.b + b3.x.b + b3.y; - result.y = b2.b + b3.x.b; - - printf("%d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, - (int)b3.x.a, b3.x.b, b3.y, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - - *(B*)resp = B_fn(b0, b1); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type cls_struct_type, cls_struct_type1; - ffi_type* dbl_arg_types[3]; - - struct A e_dbl = { 1.0, 7}; - struct B f_dbl = {{12.0 , 127}, 99}; - - struct B res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_fields[0] = &ffi_type_longdouble; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); - /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct6.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct6.c deleted file mode 100644 index 59d35796f..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct6.c +++ /dev/null @@ -1,131 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: PR 25630. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - double a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -typedef struct C { - long d; - unsigned char e; -} C; - -static B B_fn(struct A b2, struct B b3, struct C b4) -{ - struct B result; - - result.x.a = b2.a + b3.x.a + b4.d; - result.x.b = b2.b + b3.x.b + b3.y + b4.e; - result.y = b2.b + b3.x.b + b4.e; - - printf("%d %d %d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, - (int)b3.x.a, b3.x.b, b3.y, (int)b4.d, b4.e, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - struct C b2; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - b2 = *(struct C*)(args[2]); - - *(B*)resp = B_fn(b0, b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[4]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type* cls_struct_fields2[3]; - ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; - ffi_type* dbl_arg_types[4]; - - struct A e_dbl = { 1.0, 7}; - struct B f_dbl = {{12.0 , 127}, 99}; - struct C g_dbl = { 2, 9}; - - struct B res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_type2.size = 0; - cls_struct_type2.alignment = 0; - cls_struct_type2.type = FFI_TYPE_STRUCT; - cls_struct_type2.elements = cls_struct_fields2; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - cls_struct_fields2[0] = &ffi_type_slong; - cls_struct_fields2[1] = &ffi_type_uchar; - cls_struct_fields2[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = &cls_struct_type2; - dbl_arg_types[3] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99 2 9: 15 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl); - /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct7.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct7.c deleted file mode 100644 index 27595e6f5..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct7.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - unsigned long long a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -static B B_fn(struct A b2, struct B b3) -{ - struct B result; - - result.x.a = b2.a + b3.x.a; - result.x.b = b2.b + b3.x.b + b3.y; - result.y = b2.b + b3.x.b; - - printf("%d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, - (int)b3.x.a, b3.x.b, b3.y, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - - *(B*)resp = B_fn(b0, b1); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type cls_struct_type, cls_struct_type1; - ffi_type* dbl_arg_types[3]; - - struct A e_dbl = { 1LL, 7}; - struct B f_dbl = {{12.0 , 127}, 99}; - - struct B res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_fields[0] = &ffi_type_uint64; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); - /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct8.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct8.c deleted file mode 100644 index 0e6c68281..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct8.c +++ /dev/null @@ -1,131 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - unsigned long long a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -typedef struct C { - unsigned long long d; - unsigned char e; -} C; - -static B B_fn(struct A b2, struct B b3, struct C b4) -{ - struct B result; - - result.x.a = b2.a + b3.x.a + b4.d; - result.x.b = b2.b + b3.x.b + b3.y + b4.e; - result.y = b2.b + b3.x.b + b4.e; - - printf("%d %d %d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, - (int)b3.x.a, b3.x.b, b3.y, (int)b4.d, b4.e, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - struct C b2; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - b2 = *(struct C*)(args[2]); - - *(B*)resp = B_fn(b0, b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[4]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type* cls_struct_fields2[3]; - ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; - ffi_type* dbl_arg_types[4]; - - struct A e_dbl = { 1LL, 7}; - struct B f_dbl = {{12LL , 127}, 99}; - struct C g_dbl = { 2LL, 9}; - - struct B res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_type2.size = 0; - cls_struct_type2.alignment = 0; - cls_struct_type2.type = FFI_TYPE_STRUCT; - cls_struct_type2.elements = cls_struct_fields2; - - cls_struct_fields[0] = &ffi_type_uint64; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - cls_struct_fields2[0] = &ffi_type_uint64; - cls_struct_fields2[1] = &ffi_type_uchar; - cls_struct_fields2[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = &cls_struct_type2; - dbl_arg_types[3] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99 2 9: 15 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl); - /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct9.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct9.c deleted file mode 100644 index 5f7ac6775..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/nested_struct9.c +++ /dev/null @@ -1,131 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - unsigned char a; - unsigned long long b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -typedef struct C { - unsigned long d; - unsigned char e; -} C; - -static B B_fn(struct A b2, struct B b3, struct C b4) -{ - struct B result; - - result.x.a = b2.a + b3.x.a + b4.d; - result.x.b = b2.b + b3.x.b + b3.y + b4.e; - result.y = b2.b + b3.x.b + b4.e; - - printf("%d %d %d %d %d %d %d: %d %d %d\n", b2.a, (int)b2.b, - b3.x.a, (int)b3.x.b, b3.y, (int)b4.d, b4.e, - result.x.a, (int)result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - struct C b2; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - b2 = *(struct C*)(args[2]); - - *(B*)resp = B_fn(b0, b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[4]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type* cls_struct_fields2[3]; - ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; - ffi_type* dbl_arg_types[4]; - - struct A e_dbl = { 1, 7LL}; - struct B f_dbl = {{12.0 , 127}, 99}; - struct C g_dbl = { 2, 9}; - - struct B res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_type2.size = 0; - cls_struct_type2.alignment = 0; - cls_struct_type2.type = FFI_TYPE_STRUCT; - cls_struct_type2.elements = cls_struct_fields2; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uint64; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - cls_struct_fields2[0] = &ffi_type_ulong; - cls_struct_fields2[1] = &ffi_type_uchar; - cls_struct_fields2[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = &cls_struct_type2; - dbl_arg_types[3] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99 2 9: 15 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl); - /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/problem1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/problem1.c deleted file mode 100644 index 6a91555a1..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/problem1.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct my_ffi_struct { - double a; - double b; - double c; -} my_ffi_struct; - -my_ffi_struct callee(struct my_ffi_struct a1, struct my_ffi_struct a2) -{ - struct my_ffi_struct result; - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - - printf("%g %g %g %g %g %g: %g %g %g\n", a1.a, a1.b, a1.c, - a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -void stub(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct my_ffi_struct a1; - struct my_ffi_struct a2; - - a1 = *(struct my_ffi_struct*)(args[0]); - a2 = *(struct my_ffi_struct*)(args[1]); - - *(my_ffi_struct *)resp = callee(a1, a2); -} - - -int main(void) -{ - ffi_type* my_ffi_struct_fields[4]; - ffi_type my_ffi_struct_type; - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args[4]; - ffi_type* arg_types[3]; - - struct my_ffi_struct g = { 1.0, 2.0, 3.0 }; - struct my_ffi_struct f = { 1.0, 2.0, 3.0 }; - struct my_ffi_struct res; - - my_ffi_struct_type.size = 0; - my_ffi_struct_type.alignment = 0; - my_ffi_struct_type.type = FFI_TYPE_STRUCT; - my_ffi_struct_type.elements = my_ffi_struct_fields; - - my_ffi_struct_fields[0] = &ffi_type_double; - my_ffi_struct_fields[1] = &ffi_type_double; - my_ffi_struct_fields[2] = &ffi_type_double; - my_ffi_struct_fields[3] = NULL; - - arg_types[0] = &my_ffi_struct_type; - arg_types[1] = &my_ffi_struct_type; - arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &my_ffi_struct_type, - arg_types) == FFI_OK); - - args[0] = &g; - args[1] = &f; - args[2] = NULL; - ffi_call(&cif, FFI_FN(callee), &res, args); - /* { dg-output "1 2 3 1 2 3: 2 4 6" } */ - printf("res: %g %g %g\n", res.a, res.b, res.c); - /* { dg-output "\nres: 2 4 6" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, stub, NULL, code) == FFI_OK); - - res = ((my_ffi_struct(*)(struct my_ffi_struct, struct my_ffi_struct))(code))(g, f); - /* { dg-output "\n1 2 3 1 2 3: 2 4 6" } */ - printf("res: %g %g %g\n", res.a, res.b, res.c); - /* { dg-output "\nres: 2 4 6" } */ - - exit(0);; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/promotion.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/promotion.c deleted file mode 100644 index 44561615d..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/promotion.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Area: ffi_call - Purpose: Promotion test. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -static int promotion(signed char sc, signed short ss, - unsigned char uc, unsigned short us) -{ - int r = (int) sc + (int) ss + (int) uc + (int) us; - - return r; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - signed char sc; - unsigned char uc; - signed short ss; - unsigned short us; - unsigned long ul; - - args[0] = &ffi_type_schar; - args[1] = &ffi_type_sshort; - args[2] = &ffi_type_uchar; - args[3] = &ffi_type_ushort; - values[0] = ≻ - values[1] = &ss; - values[2] = &uc; - values[3] = &us; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_sint, args) == FFI_OK); - - us = 0; - ul = 0; - - for (sc = (signed char) -127; - sc <= (signed char) 120; sc += 1) - for (ss = -30000; ss <= 30000; ss += 10000) - for (uc = (unsigned char) 0; - uc <= (unsigned char) 200; uc += 20) - for (us = 0; us <= 60000; us += 10000) - { - ul++; - ffi_call(&cif, FFI_FN(promotion), &rint, values); - CHECK((int)rint == (signed char) sc + (signed short) ss + - (unsigned char) uc + (unsigned short) us); - } - printf("%lu promotion tests run\n", ul); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/pyobjc-tc.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/pyobjc-tc.c deleted file mode 100644 index e29bd6c28..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/pyobjc-tc.c +++ /dev/null @@ -1,114 +0,0 @@ -/* Area: ffi_call - Purpose: Check different structures. - Limitations: none. - PR: none. - Originator: Ronald Oussoren 20030824 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct Point { - float x; - float y; -} Point; - -typedef struct Size { - float h; - float w; -} Size; - -typedef struct Rect { - Point o; - Size s; -} Rect; - -int doit(int o, char* s, Point p, Rect r, int last) -{ - printf("CALLED WITH %d %s {%f %f} {{%f %f} {%f %f}} %d\n", - o, s, p.x, p.y, r.o.x, r.o.y, r.s.h, r.s.w, last); - return 42; -} - - -int main(void) -{ - ffi_type point_type; - ffi_type size_type; - ffi_type rect_type; - ffi_cif cif; - ffi_type* arglist[6]; - void* values[6]; - int r; - - /* - * First set up FFI types for the 3 struct types - */ - - point_type.size = 0; /*sizeof(Point);*/ - point_type.alignment = 0; /*__alignof__(Point);*/ - point_type.type = FFI_TYPE_STRUCT; - point_type.elements = malloc(3 * sizeof(ffi_type*)); - point_type.elements[0] = &ffi_type_float; - point_type.elements[1] = &ffi_type_float; - point_type.elements[2] = NULL; - - size_type.size = 0;/* sizeof(Size);*/ - size_type.alignment = 0;/* __alignof__(Size);*/ - size_type.type = FFI_TYPE_STRUCT; - size_type.elements = malloc(3 * sizeof(ffi_type*)); - size_type.elements[0] = &ffi_type_float; - size_type.elements[1] = &ffi_type_float; - size_type.elements[2] = NULL; - - rect_type.size = 0;/*sizeof(Rect);*/ - rect_type.alignment =0;/* __alignof__(Rect);*/ - rect_type.type = FFI_TYPE_STRUCT; - rect_type.elements = malloc(3 * sizeof(ffi_type*)); - rect_type.elements[0] = &point_type; - rect_type.elements[1] = &size_type; - rect_type.elements[2] = NULL; - - /* - * Create a CIF - */ - arglist[0] = &ffi_type_sint; - arglist[1] = &ffi_type_pointer; - arglist[2] = &point_type; - arglist[3] = &rect_type; - arglist[4] = &ffi_type_sint; - arglist[5] = NULL; - - r = ffi_prep_cif(&cif, FFI_DEFAULT_ABI, - 5, &ffi_type_sint, arglist); - if (r != FFI_OK) { - abort(); - } - - - /* And call the function through the CIF */ - - { - Point p = { 1.0, 2.0 }; - Rect r = { { 9.0, 10.0}, { -1.0, -2.0 } }; - int o = 0; - int l = 42; - char* m = "myMethod"; - ffi_arg result; - - values[0] = &o; - values[1] = &m; - values[2] = &p; - values[3] = &r; - values[4] = &l; - values[5] = NULL; - - printf("CALLING WITH %d %s {%f %f} {{%f %f} {%f %f}} %d\n", - o, m, p.x, p.y, r.o.x, r.o.y, r.s.h, r.s.w, l); - - ffi_call(&cif, FFI_FN(doit), &result, values); - - printf ("The result is %d\n", (int)result); - - } - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_dbl.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_dbl.c deleted file mode 100644 index fd07e5017..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_dbl.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value double. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static double return_dbl(double dbl) -{ - printf ("%f\n", dbl); - return 2 * dbl; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - double dbl, rdbl; - - args[0] = &ffi_type_double; - values[0] = &dbl; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_double, args) == FFI_OK); - - for (dbl = -127.3; dbl < 127; dbl++) - { - ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values); - printf ("%f vs %f\n", rdbl, return_dbl(dbl)); - CHECK(rdbl == 2 * dbl); - } - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_dbl1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_dbl1.c deleted file mode 100644 index 0ea5d5055..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_dbl1.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value double. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static double return_dbl(double dbl1, float fl2, unsigned int in3, double dbl4) -{ - return dbl1 + fl2 + in3 + dbl4; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - double dbl1, dbl4, rdbl; - float fl2; - unsigned int in3; - args[0] = &ffi_type_double; - args[1] = &ffi_type_float; - args[2] = &ffi_type_uint; - args[3] = &ffi_type_double; - values[0] = &dbl1; - values[1] = &fl2; - values[2] = &in3; - values[3] = &dbl4; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_double, args) == FFI_OK); - dbl1 = 127.0; - fl2 = 128.0; - in3 = 255; - dbl4 = 512.7; - - ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values); - printf ("%f vs %f\n", rdbl, return_dbl(dbl1, fl2, in3, dbl4)); - CHECK(rdbl == dbl1 + fl2 + in3 + dbl4); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_dbl2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_dbl2.c deleted file mode 100644 index b3818f866..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_dbl2.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value double. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static double return_dbl(double dbl1, double dbl2, unsigned int in3, double dbl4) -{ - return dbl1 + dbl2 + in3 + dbl4; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - double dbl1, dbl2, dbl4, rdbl; - unsigned int in3; - args[0] = &ffi_type_double; - args[1] = &ffi_type_double; - args[2] = &ffi_type_uint; - args[3] = &ffi_type_double; - values[0] = &dbl1; - values[1] = &dbl2; - values[2] = &in3; - values[3] = &dbl4; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_double, args) == FFI_OK); - dbl1 = 127.0; - dbl2 = 128.0; - in3 = 255; - dbl4 = 512.7; - - ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values); - printf ("%f vs %f\n", rdbl, return_dbl(dbl1, dbl2, in3, dbl4)); - CHECK(rdbl == dbl1 + dbl2 + in3 + dbl4); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl.c deleted file mode 100644 index fb8a09e32..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value float. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static float return_fl(float fl) -{ - return 2 * fl; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - float fl, rfl; - - args[0] = &ffi_type_float; - values[0] = &fl; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_float, args) == FFI_OK); - - for (fl = -127.0; fl < 127; fl++) - { - ffi_call(&cif, FFI_FN(return_fl), &rfl, values); - printf ("%f vs %f\n", rfl, return_fl(fl)); - CHECK(rfl == 2 * fl); - } - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl1.c deleted file mode 100644 index c3d92c283..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl1.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value float. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static float return_fl(float fl1, float fl2) -{ - return fl1 + fl2; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - float fl1, fl2, rfl; - - args[0] = &ffi_type_float; - args[1] = &ffi_type_float; - values[0] = &fl1; - values[1] = &fl2; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, - &ffi_type_float, args) == FFI_OK); - fl1 = 127.0; - fl2 = 128.0; - - ffi_call(&cif, FFI_FN(return_fl), &rfl, values); - printf ("%f vs %f\n", rfl, return_fl(fl1, fl2)); - CHECK(rfl == fl1 + fl2); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl2.c deleted file mode 100644 index ddb976cc2..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl2.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value float. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -/* Use volatile float to avoid false negative on ix86. See PR target/323. */ -static float return_fl(float fl1, float fl2, float fl3, float fl4) -{ - volatile float sum; - - sum = fl1 + fl2 + fl3 + fl4; - return sum; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - float fl1, fl2, fl3, fl4, rfl; - volatile float sum; - - args[0] = &ffi_type_float; - args[1] = &ffi_type_float; - args[2] = &ffi_type_float; - args[3] = &ffi_type_float; - values[0] = &fl1; - values[1] = &fl2; - values[2] = &fl3; - values[3] = &fl4; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_float, args) == FFI_OK); - fl1 = 127.0; - fl2 = 128.0; - fl3 = 255.1; - fl4 = 512.7; - - ffi_call(&cif, FFI_FN(return_fl), &rfl, values); - printf ("%f vs %f\n", rfl, return_fl(fl1, fl2, fl3, fl4)); - - sum = fl1 + fl2 + fl3 + fl4; - CHECK(rfl == sum); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl3.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl3.c deleted file mode 100644 index c37877b18..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_fl3.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value float. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static float return_fl(float fl1, float fl2, unsigned int in3, float fl4) -{ - return fl1 + fl2 + in3 + fl4; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - float fl1, fl2, fl4, rfl; - unsigned int in3; - args[0] = &ffi_type_float; - args[1] = &ffi_type_float; - args[2] = &ffi_type_uint; - args[3] = &ffi_type_float; - values[0] = &fl1; - values[1] = &fl2; - values[2] = &in3; - values[3] = &fl4; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_float, args) == FFI_OK); - fl1 = 127.0; - fl2 = 128.0; - in3 = 255; - fl4 = 512.7; - - ffi_call(&cif, FFI_FN(return_fl), &rfl, values); - printf ("%f vs %f\n", rfl, return_fl(fl1, fl2, in3, fl4)); - CHECK(rfl == fl1 + fl2 + in3 + fl4); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ldl.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ldl.c deleted file mode 100644 index 5c2fe65ae..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ldl.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value long double. - Limitations: none. - PR: none. - Originator: 20071113 */ - -/* { dg-do run { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ -#include "ffitest.h" - -static long double return_ldl(long double ldl) -{ - return 2*ldl; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - long double ldl, rldl; - - args[0] = &ffi_type_longdouble; - values[0] = &ldl; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_longdouble, args) == FFI_OK); - - for (ldl = -127.0; ldl < 127.0; ldl++) - { - ffi_call(&cif, FFI_FN(return_ldl), &rldl, values); - CHECK(rldl == 2 * ldl); - } - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ll.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ll.c deleted file mode 100644 index ea4a1e447..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ll.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value long long. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -static long long return_ll(long long ll) -{ - return ll; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - long long rlonglong; - long long ll; - - args[0] = &ffi_type_sint64; - values[0] = ≪ - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_sint64, args) == FFI_OK); - - for (ll = 0LL; ll < 100LL; ll++) - { - ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values); - CHECK(rlonglong == ll); - } - - for (ll = 55555555555000LL; ll < 55555555555100LL; ll++) - { - ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values); - CHECK(rlonglong == ll); - } - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ll1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ll1.c deleted file mode 100644 index 593e8a307..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ll1.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Area: ffi_call - Purpose: Check if long long are passed in the corresponding regs on ppc. - Limitations: none. - PR: 20104. - Originator: 20050222 */ - -/* { dg-do run } */ -/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ -#include "ffitest.h" -static long long return_ll(int ll0, long long ll1, int ll2) -{ - return ll0 + ll1 + ll2; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - long long rlonglong; - long long ll1; - unsigned ll0, ll2; - - args[0] = &ffi_type_sint; - args[1] = &ffi_type_sint64; - args[2] = &ffi_type_sint; - values[0] = &ll0; - values[1] = &ll1; - values[2] = &ll2; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, - &ffi_type_sint64, args) == FFI_OK); - - ll0 = 11111111; - ll1 = 11111111111000LL; - ll2 = 11111111; - - ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values); - printf("res: %" PRIdLL ", %" PRIdLL "\n", rlonglong, ll0 + ll1 + ll2); - /* { dg-output "res: 11111133333222, 11111133333222" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_sc.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_sc.c deleted file mode 100644 index a36cf3eb8..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_sc.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value signed char. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -static signed char return_sc(signed char sc) -{ - return sc; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - signed char sc; - - args[0] = &ffi_type_schar; - values[0] = ≻ - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_schar, args) == FFI_OK); - - for (sc = (signed char) -127; - sc < (signed char) 127; sc++) - { - ffi_call(&cif, FFI_FN(return_sc), &rint, values); - CHECK((signed char)rint == sc); - } - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_sl.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_sl.c deleted file mode 100644 index f0fd345f7..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_sl.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Area: ffi_call - Purpose: Check if long as return type is handled correctly. - Limitations: none. - PR: none. - */ - -/* { dg-do run } */ -#include "ffitest.h" -static long return_sl(long l1, long l2) -{ - return l1 - l2; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg res; - unsigned long l1, l2; - - args[0] = &ffi_type_slong; - args[1] = &ffi_type_slong; - values[0] = &l1; - values[1] = &l2; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, - &ffi_type_slong, args) == FFI_OK); - - l1 = 1073741823L; - l2 = 1073741824L; - - ffi_call(&cif, FFI_FN(return_sl), &res, values); - printf("res: %ld, %ld\n", (long)res, l1 - l2); - /* { dg-output "res: -1, -1" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_uc.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_uc.c deleted file mode 100644 index 6fe554619..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_uc.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value unsigned char. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -static unsigned char return_uc(unsigned char uc) -{ - return uc; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - - unsigned char uc; - - args[0] = &ffi_type_uchar; - values[0] = &uc; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uchar, args) == FFI_OK); - - for (uc = (unsigned char) '\x00'; - uc < (unsigned char) '\xff'; uc++) - { - ffi_call(&cif, FFI_FN(return_uc), &rint, values); - CHECK((unsigned char)rint == uc); - } - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ul.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ul.c deleted file mode 100644 index 12b266f03..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/return_ul.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Area: ffi_call - Purpose: Check if unsigned long as return type is handled correctly. - Limitations: none. - PR: none. - Originator: 20060724 */ - -/* { dg-do run } */ -#include "ffitest.h" -static unsigned long return_ul(unsigned long ul1, unsigned long ul2) -{ - return ul1 + ul2; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg res; - unsigned long ul1, ul2; - - args[0] = &ffi_type_ulong; - args[1] = &ffi_type_ulong; - values[0] = &ul1; - values[1] = &ul2; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, - &ffi_type_ulong, args) == FFI_OK); - - ul1 = 1073741823L; - ul2 = 1073741824L; - - ffi_call(&cif, FFI_FN(return_ul), &res, values); - printf("res: %lu, %lu\n", (unsigned long)res, ul1 + ul2); - /* { dg-output "res: 2147483647, 2147483647" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_large.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_large.c deleted file mode 100644 index 71c2469e1..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_large.c +++ /dev/null @@ -1,145 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure returning with different structure size. - Depending on the ABI. Check bigger struct which overlaps - the gp and fp register count on Darwin/AIX/ppc64. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/21/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -#include "ffitest.h" - -/* 13 FPRs: 104 bytes */ -/* 14 FPRs: 112 bytes */ - -typedef struct struct_108byte { - double a; - double b; - double c; - double d; - double e; - double f; - double g; - double h; - double i; - double j; - double k; - double l; - double m; - int n; -} struct_108byte; - -struct_108byte cls_struct_108byte_fn( - struct_108byte b0, - struct_108byte b1, - struct_108byte b2, - struct_108byte b3) -{ - struct_108byte result; - - result.a = b0.a + b1.a + b2.a + b3.a; - result.b = b0.b + b1.b + b2.b + b3.b; - result.c = b0.c + b1.c + b2.c + b3.c; - result.d = b0.d + b1.d + b2.d + b3.d; - result.e = b0.e + b1.e + b2.e + b3.e; - result.f = b0.f + b1.f + b2.f + b3.f; - result.g = b0.g + b1.g + b2.g + b3.g; - result.h = b0.h + b1.h + b2.h + b3.h; - result.i = b0.i + b1.i + b2.i + b3.i; - result.j = b0.j + b1.j + b2.j + b3.j; - result.k = b0.k + b1.k + b2.k + b3.k; - result.l = b0.l + b1.l + b2.l + b3.l; - result.m = b0.m + b1.m + b2.m + b3.m; - result.n = b0.n + b1.n + b2.n + b3.n; - - printf("%g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", result.a, result.b, result.c, - result.d, result.e, result.f, result.g, result.h, result.i, - result.j, result.k, result.l, result.m, result.n); - - return result; -} - -static void -cls_struct_108byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) -{ - struct_108byte b0, b1, b2, b3; - - b0 = *(struct_108byte*)(args[0]); - b1 = *(struct_108byte*)(args[1]); - b2 = *(struct_108byte*)(args[2]); - b3 = *(struct_108byte*)(args[3]); - - *(struct_108byte*)resp = cls_struct_108byte_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[15]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct_108byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 1.0, 2.0, 3.0, 7.0, 2.0, 7 }; - struct_108byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4.0, 5.0, 7.0, 9.0, 1.0, 4 }; - struct_108byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 8.0, 6.0, 1.0, 4.0, 0.0, 3 }; - struct_108byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 9.0, 2.0, 6.0, 5.0, 3.0, 2 }; - struct_108byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_double; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = &ffi_type_double; - cls_struct_fields[5] = &ffi_type_double; - cls_struct_fields[6] = &ffi_type_double; - cls_struct_fields[7] = &ffi_type_double; - cls_struct_fields[8] = &ffi_type_double; - cls_struct_fields[9] = &ffi_type_double; - cls_struct_fields[10] = &ffi_type_double; - cls_struct_fields[11] = &ffi_type_double; - cls_struct_fields[12] = &ffi_type_double; - cls_struct_fields[13] = &ffi_type_sint32; - cls_struct_fields[14] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = &cls_struct_type; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_108byte_fn), &res_dbl, args_dbl); - /* { dg-output "22 15 17 25 6 13 19 18 22 15 17 25 6 16" } */ - printf("res: %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i, - res_dbl.j, res_dbl.k, res_dbl.l, res_dbl.m, res_dbl.n); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 22 15 17 25 6 16" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_108byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((struct_108byte(*)(struct_108byte, struct_108byte, - struct_108byte, struct_108byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n22 15 17 25 6 13 19 18 22 15 17 25 6 16" } */ - printf("res: %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i, - res_dbl.j, res_dbl.k, res_dbl.l, res_dbl.m, res_dbl.n); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 22 15 17 25 6 16" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_large2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_large2.c deleted file mode 100644 index d9c750ee1..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_large2.c +++ /dev/null @@ -1,148 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure returning with different structure size. - Depending on the ABI. Check bigger struct which overlaps - the gp and fp register count on Darwin/AIX/ppc64. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/21/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -#include "ffitest.h" - -/* 13 FPRs: 104 bytes */ -/* 14 FPRs: 112 bytes */ - -typedef struct struct_116byte { - double a; - double b; - double c; - double d; - double e; - double f; - double g; - double h; - double i; - double j; - double k; - double l; - double m; - double n; - int o; -} struct_116byte; - -struct_116byte cls_struct_116byte_fn( - struct_116byte b0, - struct_116byte b1, - struct_116byte b2, - struct_116byte b3) -{ - struct_116byte result; - - result.a = b0.a + b1.a + b2.a + b3.a; - result.b = b0.b + b1.b + b2.b + b3.b; - result.c = b0.c + b1.c + b2.c + b3.c; - result.d = b0.d + b1.d + b2.d + b3.d; - result.e = b0.e + b1.e + b2.e + b3.e; - result.f = b0.f + b1.f + b2.f + b3.f; - result.g = b0.g + b1.g + b2.g + b3.g; - result.h = b0.h + b1.h + b2.h + b3.h; - result.i = b0.i + b1.i + b2.i + b3.i; - result.j = b0.j + b1.j + b2.j + b3.j; - result.k = b0.k + b1.k + b2.k + b3.k; - result.l = b0.l + b1.l + b2.l + b3.l; - result.m = b0.m + b1.m + b2.m + b3.m; - result.n = b0.n + b1.n + b2.n + b3.n; - result.o = b0.o + b1.o + b2.o + b3.o; - - printf("%g %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", result.a, result.b, result.c, - result.d, result.e, result.f, result.g, result.h, result.i, - result.j, result.k, result.l, result.m, result.n, result.o); - - return result; -} - -static void -cls_struct_116byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) -{ - struct_116byte b0, b1, b2, b3; - - b0 = *(struct_116byte*)(args[0]); - b1 = *(struct_116byte*)(args[1]); - b2 = *(struct_116byte*)(args[2]); - b3 = *(struct_116byte*)(args[3]); - - *(struct_116byte*)resp = cls_struct_116byte_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[16]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct_116byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 7 }; - struct_116byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4.0, 5.0, 7.0, 9.0, 1.0, 6.0, 4 }; - struct_116byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 8.0, 6.0, 1.0, 4.0, 0.0, 7.0, 3 }; - struct_116byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 9.0, 2.0, 6.0, 5.0, 3.0, 8.0, 2 }; - struct_116byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_double; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = &ffi_type_double; - cls_struct_fields[5] = &ffi_type_double; - cls_struct_fields[6] = &ffi_type_double; - cls_struct_fields[7] = &ffi_type_double; - cls_struct_fields[8] = &ffi_type_double; - cls_struct_fields[9] = &ffi_type_double; - cls_struct_fields[10] = &ffi_type_double; - cls_struct_fields[11] = &ffi_type_double; - cls_struct_fields[12] = &ffi_type_double; - cls_struct_fields[13] = &ffi_type_double; - cls_struct_fields[14] = &ffi_type_sint32; - cls_struct_fields[15] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = &cls_struct_type; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_116byte_fn), &res_dbl, args_dbl); - /* { dg-output "22 15 17 25 6 13 19 18 22 15 17 25 6 26 16" } */ - printf("res: %g %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i, - res_dbl.j, res_dbl.k, res_dbl.l, res_dbl.m, res_dbl.n, res_dbl.o); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 22 15 17 25 6 26 16" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_116byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((struct_116byte(*)(struct_116byte, struct_116byte, - struct_116byte, struct_116byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n22 15 17 25 6 13 19 18 22 15 17 25 6 26 16" } */ - printf("res: %g %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i, - res_dbl.j, res_dbl.k, res_dbl.l, res_dbl.m, res_dbl.n, res_dbl.o); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 22 15 17 25 6 26 16" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_medium.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_medium.c deleted file mode 100644 index 973ee02ed..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_medium.c +++ /dev/null @@ -1,124 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure returning with different structure size. - Depending on the ABI. Check bigger struct which overlaps - the gp and fp register count on Darwin/AIX/ppc64. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/21/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -#include "ffitest.h" - -typedef struct struct_72byte { - double a; - double b; - double c; - double d; - double e; - double f; - double g; - double h; - double i; -} struct_72byte; - -struct_72byte cls_struct_72byte_fn( - struct_72byte b0, - struct_72byte b1, - struct_72byte b2, - struct_72byte b3) -{ - struct_72byte result; - - result.a = b0.a + b1.a + b2.a + b3.a; - result.b = b0.b + b1.b + b2.b + b3.b; - result.c = b0.c + b1.c + b2.c + b3.c; - result.d = b0.d + b1.d + b2.d + b3.d; - result.e = b0.e + b1.e + b2.e + b3.e; - result.f = b0.f + b1.f + b2.f + b3.f; - result.g = b0.g + b1.g + b2.g + b3.g; - result.h = b0.h + b1.h + b2.h + b3.h; - result.i = b0.i + b1.i + b2.i + b3.i; - - printf("%g %g %g %g %g %g %g %g %g\n", result.a, result.b, result.c, - result.d, result.e, result.f, result.g, result.h, result.i); - - return result; -} - -static void -cls_struct_72byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) -{ - struct_72byte b0, b1, b2, b3; - - b0 = *(struct_72byte*)(args[0]); - b1 = *(struct_72byte*)(args[1]); - b2 = *(struct_72byte*)(args[2]); - b3 = *(struct_72byte*)(args[3]); - - *(struct_72byte*)resp = cls_struct_72byte_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[10]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct_72byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 7.0 }; - struct_72byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4.0 }; - struct_72byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 3.0 }; - struct_72byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 2.0 }; - struct_72byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_double; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = &ffi_type_double; - cls_struct_fields[5] = &ffi_type_double; - cls_struct_fields[6] = &ffi_type_double; - cls_struct_fields[7] = &ffi_type_double; - cls_struct_fields[8] = &ffi_type_double; - cls_struct_fields[9] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = &cls_struct_type; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_72byte_fn), &res_dbl, args_dbl); - /* { dg-output "22 15 17 25 6 13 19 18 16" } */ - printf("res: %g %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_72byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((struct_72byte(*)(struct_72byte, struct_72byte, - struct_72byte, struct_72byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n22 15 17 25 6 13 19 18 16" } */ - printf("res: %g %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_medium2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_medium2.c deleted file mode 100644 index 84323d16a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/stret_medium2.c +++ /dev/null @@ -1,125 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure returning with different structure size. - Depending on the ABI. Check bigger struct which overlaps - the gp and fp register count on Darwin/AIX/ppc64. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/21/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ -#include "ffitest.h" - -typedef struct struct_72byte { - double a; - double b; - double c; - double d; - double e; - double f; - double g; - double h; - long long i; -} struct_72byte; - -struct_72byte cls_struct_72byte_fn( - struct_72byte b0, - struct_72byte b1, - struct_72byte b2, - struct_72byte b3) -{ - struct_72byte result; - - result.a = b0.a + b1.a + b2.a + b3.a; - result.b = b0.b + b1.b + b2.b + b3.b; - result.c = b0.c + b1.c + b2.c + b3.c; - result.d = b0.d + b1.d + b2.d + b3.d; - result.e = b0.e + b1.e + b2.e + b3.e; - result.f = b0.f + b1.f + b2.f + b3.f; - result.g = b0.g + b1.g + b2.g + b3.g; - result.h = b0.h + b1.h + b2.h + b3.h; - result.i = b0.i + b1.i + b2.i + b3.i; - - printf("%g %g %g %g %g %g %g %g %" PRIdLL "\n", result.a, result.b, result.c, - result.d, result.e, result.f, result.g, result.h, result.i); - - return result; -} - -static void -cls_struct_72byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) -{ - struct_72byte b0, b1, b2, b3; - - b0 = *(struct_72byte*)(args[0]); - b1 = *(struct_72byte*)(args[1]); - b2 = *(struct_72byte*)(args[2]); - b3 = *(struct_72byte*)(args[3]); - - *(struct_72byte*)resp = cls_struct_72byte_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[10]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - struct_72byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 7 }; - struct_72byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4 }; - struct_72byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 3 }; - struct_72byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 2 }; - struct_72byte res_dbl; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_double; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = &ffi_type_double; - cls_struct_fields[5] = &ffi_type_double; - cls_struct_fields[6] = &ffi_type_double; - cls_struct_fields[7] = &ffi_type_double; - cls_struct_fields[8] = &ffi_type_sint64; - cls_struct_fields[9] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = &cls_struct_type; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_72byte_fn), &res_dbl, args_dbl); - /* { dg-output "22 15 17 25 6 13 19 18 16" } */ - printf("res: %g %g %g %g %g %g %g %g %" PRIdLL "\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_72byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((struct_72byte(*)(struct_72byte, struct_72byte, - struct_72byte, struct_72byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n22 15 17 25 6 13 19 18 16" } */ - printf("res: %g %g %g %g %g %g %g %g %" PRIdLL "\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */ - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen.c deleted file mode 100644 index 35b70ea4e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Area: ffi_call - Purpose: Check strlen function call. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -static size_t ABI_ATTR my_strlen(char *s) -{ - return (strlen(s)); -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - char *s; - - args[0] = &ffi_type_pointer; - values[0] = (void*) &s; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, - &ffi_type_sint, args) == FFI_OK); - - s = "a"; - ffi_call(&cif, FFI_FN(my_strlen), &rint, values); - CHECK(rint == 1); - - s = "1234567"; - ffi_call(&cif, FFI_FN(my_strlen), &rint, values); - CHECK(rint == 7); - - s = "1234567890123456789012345"; - ffi_call(&cif, FFI_FN(my_strlen), &rint, values); - CHECK(rint == 25); - - exit (0); -} - diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen2.c deleted file mode 100644 index 96282bc0a..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen2.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Area: ffi_call - Purpose: Check strlen function call with additional arguments. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ - -#include "ffitest.h" - -static size_t ABI_ATTR my_f(char *s, float a) -{ - return (size_t) ((int) strlen(s) + (int) a); -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - char *s; - float v2; - args[0] = &ffi_type_pointer; - args[1] = &ffi_type_float; - values[0] = (void*) &s; - values[1] = (void*) &v2; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, - &ffi_type_sint, args) == FFI_OK); - - s = "a"; - v2 = 0.0; - ffi_call(&cif, FFI_FN(my_f), &rint, values); - CHECK(rint == 1); - - s = "1234567"; - v2 = -1.0; - ffi_call(&cif, FFI_FN(my_f), &rint, values); - CHECK(rint == 6); - - s = "1234567890123456789012345"; - v2 = 1.0; - ffi_call(&cif, FFI_FN(my_f), &rint, values); - CHECK(rint == 26); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen3.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen3.c deleted file mode 100644 index beba86e9e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen3.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Area: ffi_call - Purpose: Check strlen function call with additional arguments. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ - -#include "ffitest.h" - -static size_t ABI_ATTR my_f(float a, char *s) -{ - return (size_t) ((int) strlen(s) + (int) a); -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - char *s; - float v2; - args[1] = &ffi_type_pointer; - args[0] = &ffi_type_float; - values[1] = (void*) &s; - values[0] = (void*) &v2; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, - &ffi_type_sint, args) == FFI_OK); - - s = "a"; - v2 = 0.0; - ffi_call(&cif, FFI_FN(my_f), &rint, values); - CHECK(rint == 1); - - s = "1234567"; - v2 = -1.0; - ffi_call(&cif, FFI_FN(my_f), &rint, values); - CHECK(rint == 6); - - s = "1234567890123456789012345"; - v2 = 1.0; - ffi_call(&cif, FFI_FN(my_f), &rint, values); - CHECK(rint == 26); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen4.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen4.c deleted file mode 100644 index d5d42b4f6..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/strlen4.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Area: ffi_call - Purpose: Check strlen function call with additional arguments. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ - -#include "ffitest.h" - -static size_t ABI_ATTR my_f(float a, char *s, int i) -{ - return (size_t) ((int) strlen(s) + (int) a + i); -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - char *s; - int v1; - float v2; - args[2] = &ffi_type_sint; - args[1] = &ffi_type_pointer; - args[0] = &ffi_type_float; - values[2] = (void*) &v1; - values[1] = (void*) &s; - values[0] = (void*) &v2; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 3, - &ffi_type_sint, args) == FFI_OK); - - s = "a"; - v1 = 1; - v2 = 0.0; - ffi_call(&cif, FFI_FN(my_f), &rint, values); - CHECK(rint == 2); - - s = "1234567"; - v2 = -1.0; - v1 = -2; - ffi_call(&cif, FFI_FN(my_f), &rint, values); - CHECK(rint == 4); - - s = "1234567890123456789012345"; - v2 = 1.0; - v1 = 2; - ffi_call(&cif, FFI_FN(my_f), &rint, values); - CHECK(rint == 28); - - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct1.c deleted file mode 100644 index c13e23f87..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct1.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct -{ - unsigned char uc; - double d; - unsigned int ui; -} test_structure_1; - -static test_structure_1 ABI_ATTR struct1(test_structure_1 ts) -{ - ts.uc++; - ts.d--; - ts.ui++; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts1_type; - ffi_type *ts1_type_elements[4]; - - test_structure_1 ts1_arg; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_1 *ts1_result = - (test_structure_1 *) malloc (sizeof(test_structure_1)); - - ts1_type.size = 0; - ts1_type.alignment = 0; - ts1_type.type = FFI_TYPE_STRUCT; - ts1_type.elements = ts1_type_elements; - ts1_type_elements[0] = &ffi_type_uchar; - ts1_type_elements[1] = &ffi_type_double; - ts1_type_elements[2] = &ffi_type_uint; - ts1_type_elements[3] = NULL; - - args[0] = &ts1_type; - values[0] = &ts1_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, - &ts1_type, args) == FFI_OK); - - ts1_arg.uc = '\x01'; - ts1_arg.d = 3.14159; - ts1_arg.ui = 555; - - ffi_call(&cif, FFI_FN(struct1), ts1_result, values); - - CHECK(ts1_result->ui == 556); - CHECK(ts1_result->d == 3.14159 - 1); - - free (ts1_result); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct2.c deleted file mode 100644 index 5077a5ee4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct2.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct -{ - double d1; - double d2; -} test_structure_2; - -static test_structure_2 ABI_ATTR struct2(test_structure_2 ts) -{ - ts.d1--; - ts.d2--; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - test_structure_2 ts2_arg; - ffi_type ts2_type; - ffi_type *ts2_type_elements[3]; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_2 *ts2_result = - (test_structure_2 *) malloc (sizeof(test_structure_2)); - - ts2_type.size = 0; - ts2_type.alignment = 0; - ts2_type.type = FFI_TYPE_STRUCT; - ts2_type.elements = ts2_type_elements; - ts2_type_elements[0] = &ffi_type_double; - ts2_type_elements[1] = &ffi_type_double; - ts2_type_elements[2] = NULL; - - args[0] = &ts2_type; - values[0] = &ts2_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts2_type, args) == FFI_OK); - - ts2_arg.d1 = 5.55; - ts2_arg.d2 = 6.66; - - printf ("%g\n", ts2_arg.d1); - printf ("%g\n", ts2_arg.d2); - - ffi_call(&cif, FFI_FN(struct2), ts2_result, values); - - printf ("%g\n", ts2_result->d1); - printf ("%g\n", ts2_result->d2); - - CHECK(ts2_result->d1 == 5.55 - 1); - CHECK(ts2_result->d2 == 6.66 - 1); - - free (ts2_result); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct3.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct3.c deleted file mode 100644 index 7eba0ead6..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct3.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct -{ - int si; -} test_structure_3; - -static test_structure_3 ABI_ATTR struct3(test_structure_3 ts) -{ - ts.si = -(ts.si*2); - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - int compare_value; - ffi_type ts3_type; - ffi_type *ts3_type_elements[2]; - - test_structure_3 ts3_arg; - test_structure_3 *ts3_result = - (test_structure_3 *) malloc (sizeof(test_structure_3)); - - ts3_type.size = 0; - ts3_type.alignment = 0; - ts3_type.type = FFI_TYPE_STRUCT; - ts3_type.elements = ts3_type_elements; - ts3_type_elements[0] = &ffi_type_sint; - ts3_type_elements[1] = NULL; - - args[0] = &ts3_type; - values[0] = &ts3_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, - &ts3_type, args) == FFI_OK); - - ts3_arg.si = -123; - compare_value = ts3_arg.si; - - ffi_call(&cif, FFI_FN(struct3), ts3_result, values); - - printf ("%d %d\n", ts3_result->si, -(compare_value*2)); - - CHECK(ts3_result->si == -(compare_value*2)); - - free (ts3_result); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct4.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct4.c deleted file mode 100644 index 66a9551dd..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct4.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct -{ - unsigned ui1; - unsigned ui2; - unsigned ui3; -} test_structure_4; - -static test_structure_4 ABI_ATTR struct4(test_structure_4 ts) -{ - ts.ui3 = ts.ui1 * ts.ui2 * ts.ui3; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts4_type; - ffi_type *ts4_type_elements[4]; - - test_structure_4 ts4_arg; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_4 *ts4_result = - (test_structure_4 *) malloc (sizeof(test_structure_4)); - - ts4_type.size = 0; - ts4_type.alignment = 0; - ts4_type.type = FFI_TYPE_STRUCT; - ts4_type.elements = ts4_type_elements; - ts4_type_elements[0] = &ffi_type_uint; - ts4_type_elements[1] = &ffi_type_uint; - ts4_type_elements[2] = &ffi_type_uint; - ts4_type_elements[3] = NULL; - - args[0] = &ts4_type; - values[0] = &ts4_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts4_type, args) == FFI_OK); - - ts4_arg.ui1 = 2; - ts4_arg.ui2 = 3; - ts4_arg.ui3 = 4; - - ffi_call (&cif, FFI_FN(struct4), ts4_result, values); - - CHECK(ts4_result->ui3 == 2U * 3U * 4U); - - - free (ts4_result); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct5.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct5.c deleted file mode 100644 index 23e2a3f74..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct5.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -typedef struct -{ - char c1; - char c2; -} test_structure_5; - -static test_structure_5 ABI_ATTR struct5(test_structure_5 ts1, test_structure_5 ts2) -{ - ts1.c1 += ts2.c1; - ts1.c2 -= ts2.c2; - - return ts1; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts5_type; - ffi_type *ts5_type_elements[3]; - - test_structure_5 ts5_arg1, ts5_arg2; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_5 *ts5_result = - (test_structure_5 *) malloc (sizeof(test_structure_5)); - - ts5_type.size = 0; - ts5_type.alignment = 0; - ts5_type.type = FFI_TYPE_STRUCT; - ts5_type.elements = ts5_type_elements; - ts5_type_elements[0] = &ffi_type_schar; - ts5_type_elements[1] = &ffi_type_schar; - ts5_type_elements[2] = NULL; - - args[0] = &ts5_type; - args[1] = &ts5_type; - values[0] = &ts5_arg1; - values[1] = &ts5_arg2; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, &ts5_type, args) == FFI_OK); - - ts5_arg1.c1 = 2; - ts5_arg1.c2 = 6; - ts5_arg2.c1 = 5; - ts5_arg2.c2 = 3; - - ffi_call (&cif, FFI_FN(struct5), ts5_result, values); - - CHECK(ts5_result->c1 == 7); - CHECK(ts5_result->c2 == 3); - - - free (ts5_result); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct6.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct6.c deleted file mode 100644 index 173c66eb4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct6.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -typedef struct -{ - float f; - double d; -} test_structure_6; - -static test_structure_6 ABI_ATTR struct6 (test_structure_6 ts) -{ - ts.f += 1; - ts.d += 1; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts6_type; - ffi_type *ts6_type_elements[3]; - - test_structure_6 ts6_arg; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_6 *ts6_result = - (test_structure_6 *) malloc (sizeof(test_structure_6)); - - ts6_type.size = 0; - ts6_type.alignment = 0; - ts6_type.type = FFI_TYPE_STRUCT; - ts6_type.elements = ts6_type_elements; - ts6_type_elements[0] = &ffi_type_float; - ts6_type_elements[1] = &ffi_type_double; - ts6_type_elements[2] = NULL; - - args[0] = &ts6_type; - values[0] = &ts6_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts6_type, args) == FFI_OK); - - ts6_arg.f = 5.55f; - ts6_arg.d = 6.66; - - printf ("%g\n", ts6_arg.f); - printf ("%g\n", ts6_arg.d); - - ffi_call(&cif, FFI_FN(struct6), ts6_result, values); - - CHECK(ts6_result->f == 5.55f + 1); - CHECK(ts6_result->d == 6.66 + 1); - - free (ts6_result); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct7.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct7.c deleted file mode 100644 index badc7e055..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct7.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -typedef struct -{ - float f1; - float f2; - double d; -} test_structure_7; - -static test_structure_7 ABI_ATTR struct7 (test_structure_7 ts) -{ - ts.f1 += 1; - ts.f2 += 1; - ts.d += 1; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts7_type; - ffi_type *ts7_type_elements[4]; - - test_structure_7 ts7_arg; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_7 *ts7_result = - (test_structure_7 *) malloc (sizeof(test_structure_7)); - - ts7_type.size = 0; - ts7_type.alignment = 0; - ts7_type.type = FFI_TYPE_STRUCT; - ts7_type.elements = ts7_type_elements; - ts7_type_elements[0] = &ffi_type_float; - ts7_type_elements[1] = &ffi_type_float; - ts7_type_elements[2] = &ffi_type_double; - ts7_type_elements[3] = NULL; - - args[0] = &ts7_type; - values[0] = &ts7_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts7_type, args) == FFI_OK); - - ts7_arg.f1 = 5.55f; - ts7_arg.f2 = 55.5f; - ts7_arg.d = 6.66; - - printf ("%g\n", ts7_arg.f1); - printf ("%g\n", ts7_arg.f2); - printf ("%g\n", ts7_arg.d); - - ffi_call(&cif, FFI_FN(struct7), ts7_result, values); - - printf ("%g\n", ts7_result->f1); - printf ("%g\n", ts7_result->f2); - printf ("%g\n", ts7_result->d); - - CHECK(ts7_result->f1 == 5.55f + 1); - CHECK(ts7_result->f2 == 55.5f + 1); - CHECK(ts7_result->d == 6.66 + 1); - - free (ts7_result); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct8.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct8.c deleted file mode 100644 index ef204ecbb..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct8.c +++ /dev/null @@ -1,81 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -typedef struct -{ - float f1; - float f2; - float f3; - float f4; -} test_structure_8; - -static test_structure_8 ABI_ATTR struct8 (test_structure_8 ts) -{ - ts.f1 += 1; - ts.f2 += 1; - ts.f3 += 1; - ts.f4 += 1; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts8_type; - ffi_type *ts8_type_elements[5]; - - test_structure_8 ts8_arg; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_8 *ts8_result = - (test_structure_8 *) malloc (sizeof(test_structure_8)); - - ts8_type.size = 0; - ts8_type.alignment = 0; - ts8_type.type = FFI_TYPE_STRUCT; - ts8_type.elements = ts8_type_elements; - ts8_type_elements[0] = &ffi_type_float; - ts8_type_elements[1] = &ffi_type_float; - ts8_type_elements[2] = &ffi_type_float; - ts8_type_elements[3] = &ffi_type_float; - ts8_type_elements[4] = NULL; - - args[0] = &ts8_type; - values[0] = &ts8_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts8_type, args) == FFI_OK); - - ts8_arg.f1 = 5.55f; - ts8_arg.f2 = 55.5f; - ts8_arg.f3 = -5.55f; - ts8_arg.f4 = -55.5f; - - printf ("%g\n", ts8_arg.f1); - printf ("%g\n", ts8_arg.f2); - printf ("%g\n", ts8_arg.f3); - printf ("%g\n", ts8_arg.f4); - - ffi_call(&cif, FFI_FN(struct8), ts8_result, values); - - printf ("%g\n", ts8_result->f1); - printf ("%g\n", ts8_result->f2); - printf ("%g\n", ts8_result->f3); - printf ("%g\n", ts8_result->f4); - - CHECK(ts8_result->f1 == 5.55f + 1); - CHECK(ts8_result->f2 == 55.5f + 1); - CHECK(ts8_result->f3 == -5.55f + 1); - CHECK(ts8_result->f4 == -55.5f + 1); - - free (ts8_result); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct9.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct9.c deleted file mode 100644 index 4a13b818c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/struct9.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct -{ - float f; - int i; -} test_structure_9; - -static test_structure_9 ABI_ATTR struct9 (test_structure_9 ts) -{ - ts.f += 1; - ts.i += 1; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts9_type; - ffi_type *ts9_type_elements[3]; - - test_structure_9 ts9_arg; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_9 *ts9_result = - (test_structure_9 *) malloc (sizeof(test_structure_9)); - - ts9_type.size = 0; - ts9_type.alignment = 0; - ts9_type.type = FFI_TYPE_STRUCT; - ts9_type.elements = ts9_type_elements; - ts9_type_elements[0] = &ffi_type_float; - ts9_type_elements[1] = &ffi_type_sint; - ts9_type_elements[2] = NULL; - - args[0] = &ts9_type; - values[0] = &ts9_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts9_type, args) == FFI_OK); - - ts9_arg.f = 5.55f; - ts9_arg.i = 5; - - printf ("%g\n", ts9_arg.f); - printf ("%d\n", ts9_arg.i); - - ffi_call(&cif, FFI_FN(struct9), ts9_result, values); - - printf ("%g\n", ts9_result->f); - printf ("%d\n", ts9_result->i); - - CHECK(ts9_result->f == 5.55f + 1); - CHECK(ts9_result->i == 5 + 1); - - free (ts9_result); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/testclosure.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/testclosure.c deleted file mode 100644 index ca31056d8..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/testclosure.c +++ /dev/null @@ -1,70 +0,0 @@ -/* Area: closure_call - Purpose: Check return value float. - Limitations: none. - PR: 41908. - Originator: 20091102 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_combined { - float a; - float b; - float c; - float d; -} cls_struct_combined; - -void cls_struct_combined_fn(struct cls_struct_combined arg) -{ - printf("%g %g %g %g\n", - arg.a, arg.b, - arg.c, arg.d); - fflush(stdout); -} - -static void -cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, - void** args, void* userdata __UNUSED__) -{ - struct cls_struct_combined a0; - - a0 = *(struct cls_struct_combined*)(args[0]); - - cls_struct_combined_fn(a0); -} - - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type* cls_struct_fields0[5]; - ffi_type cls_struct_type0; - ffi_type* dbl_arg_types[5]; - - struct cls_struct_combined g_dbl = {4.0, 5.0, 1.0, 8.0}; - - cls_struct_type0.size = 0; - cls_struct_type0.alignment = 0; - cls_struct_type0.type = FFI_TYPE_STRUCT; - cls_struct_type0.elements = cls_struct_fields0; - - cls_struct_fields0[0] = &ffi_type_float; - cls_struct_fields0[1] = &ffi_type_float; - cls_struct_fields0[2] = &ffi_type_float; - cls_struct_fields0[3] = &ffi_type_float; - cls_struct_fields0[4] = NULL; - - dbl_arg_types[0] = &cls_struct_type0; - dbl_arg_types[1] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ffi_type_void, - dbl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK); - - ((void(*)(cls_struct_combined)) (code))(g_dbl); - /* { dg-output "4 5 1 8" } */ - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/uninitialized.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/uninitialized.c deleted file mode 100644 index f00d83023..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/uninitialized.c +++ /dev/null @@ -1,61 +0,0 @@ -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct -{ - unsigned char uc; - double d; - unsigned int ui; -} test_structure_1; - -static test_structure_1 struct1(test_structure_1 ts) -{ - ts.uc++; - ts.d--; - ts.ui++; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts1_type; - ffi_type *ts1_type_elements[4]; - - memset(&cif, 1, sizeof(cif)); - ts1_type.size = 0; - ts1_type.alignment = 0; - ts1_type.type = FFI_TYPE_STRUCT; - ts1_type.elements = ts1_type_elements; - ts1_type_elements[0] = &ffi_type_uchar; - ts1_type_elements[1] = &ffi_type_double; - ts1_type_elements[2] = &ffi_type_uint; - ts1_type_elements[3] = NULL; - - test_structure_1 ts1_arg; - /* This is a hack to get a properly aligned result buffer */ - test_structure_1 *ts1_result = - (test_structure_1 *) malloc (sizeof(test_structure_1)); - - args[0] = &ts1_type; - values[0] = &ts1_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ts1_type, args) == FFI_OK); - - ts1_arg.uc = '\x01'; - ts1_arg.d = 3.14159; - ts1_arg.ui = 555; - - ffi_call(&cif, FFI_FN(struct1), ts1_result, values); - - CHECK(ts1_result->ui == 556); - CHECK(ts1_result->d == 3.14159 - 1); - - free (ts1_result); - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/unwindtest.cc b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/unwindtest.cc deleted file mode 100644 index 67cfefeca..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/unwindtest.cc +++ /dev/null @@ -1,117 +0,0 @@ -/* Area: ffi_closure, unwind info - Purpose: Check if the unwind information is passed correctly. - Limitations: none. - PR: none. - Originator: Jeff Sturm */ - -/* { dg-do run } */ - -#include "ffitest.h" - -void ABI_ATTR -closure_test_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, - void** args __UNUSED__, void* userdata __UNUSED__) -{ - throw 9; -} - -typedef void (*closure_test_type)(); - -void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) - { - *(ffi_arg*)resp = - (int)*(float *)args[0] +(int)(*(float *)args[1]) + - (int)(*(float *)args[2]) + (int)*(float *)args[3] + - (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) + - (int)*(float *)args[6] + (int)(*(int *)args[7]) + - (int)(*(double*)args[8]) + (int)*(int *)args[9] + - (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(int *)args[13]) + - (int)(*(int *)args[14]) + *(int *)args[15] + (int)(intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(float *)args[0], (int)(*(float *)args[1]), - (int)(*(float *)args[2]), (int)*(float *)args[3], - (int)(*(signed short *)args[4]), (int)(*(float *)args[5]), - (int)*(float *)args[6], (int)(*(int *)args[7]), - (int)(*(double *)args[8]), (int)*(int *)args[9], - (int)(*(int *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(int *)args[13]), - (int)(*(int *)args[14]), *(int *)args[15], - (int)(intptr_t)userdata, (int)*(ffi_arg*)resp); - - throw (int)*(ffi_arg*)resp; -} - -typedef int (*closure_test_type1)(float, float, float, float, signed short, - float, float, int, double, int, int, float, - int, int, int, int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = (ffi_closure *)ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - - { - cl_arg_types[1] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, - &ffi_type_void, cl_arg_types) == FFI_OK); - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn, NULL, code) == FFI_OK); - - try - { - (*((closure_test_type)(code)))(); - } catch (int exception_code) - { - CHECK(exception_code == 9); - } - - printf("part one OK\n"); - /* { dg-output "part one OK" } */ - } - - { - - cl_arg_types[0] = &ffi_type_float; - cl_arg_types[1] = &ffi_type_float; - cl_arg_types[2] = &ffi_type_float; - cl_arg_types[3] = &ffi_type_float; - cl_arg_types[4] = &ffi_type_sshort; - cl_arg_types[5] = &ffi_type_float; - cl_arg_types[6] = &ffi_type_float; - cl_arg_types[7] = &ffi_type_uint; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_uint; - cl_arg_types[10] = &ffi_type_uint; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_uint; - cl_arg_types[13] = &ffi_type_uint; - cl_arg_types[14] = &ffi_type_uint; - cl_arg_types[15] = &ffi_type_uint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1, - (void *) 3 /* userdata */, code) == FFI_OK); - try - { - (*((closure_test_type1)code)) - (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13, - 19, 21, 1); - /* { dg-output "\n1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */ - } catch (int exception_code) - { - CHECK(exception_code == 255); - } - printf("part two OK\n"); - /* { dg-output "\npart two OK" } */ - } - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/unwindtest_ffi_call.cc b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/unwindtest_ffi_call.cc deleted file mode 100644 index ec611647e..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/unwindtest_ffi_call.cc +++ /dev/null @@ -1,54 +0,0 @@ -/* Area: ffi_call, unwind info - Purpose: Check if the unwind information is passed correctly. - Limitations: none. - PR: none. - Originator: Andreas Tobler 20061213 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -static int checking(int a __UNUSED__, short b __UNUSED__, - signed char c __UNUSED__) -{ - throw 9; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - - signed int si; - signed short ss; - signed char sc; - - args[0] = &ffi_type_sint; - values[0] = &si; - args[1] = &ffi_type_sshort; - values[1] = &ss; - args[2] = &ffi_type_schar; - values[2] = ≻ - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, - &ffi_type_sint, args) == FFI_OK); - - si = -6; - ss = -12; - sc = -1; - { - try - { - ffi_call(&cif, FFI_FN(checking), &rint, values); - } catch (int exception_code) - { - CHECK(exception_code == 9); - } - printf("part one OK\n"); - /* { dg-output "part one OK" } */ - } - exit(0); -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_1.c deleted file mode 100644 index 7f96809ea..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_1.c +++ /dev/null @@ -1,196 +0,0 @@ -/* Area: ffi_call - Purpose: Test passing struct in variable argument lists. - Limitations: none. - PR: none. - Originator: ARM Ltd. */ - -/* { dg-do run } */ -/* { dg-output "" { xfail avr32*-*-* } } */ - -#include "ffitest.h" -#include - -struct small_tag -{ - unsigned char a; - unsigned char b; -}; - -struct large_tag -{ - unsigned a; - unsigned b; - unsigned c; - unsigned d; - unsigned e; -}; - -static int -test_fn (int n, ...) -{ - va_list ap; - struct small_tag s1; - struct small_tag s2; - struct large_tag l; - unsigned char uc; - signed char sc; - unsigned short us; - signed short ss; - unsigned int ui; - signed int si; - unsigned long ul; - signed long sl; - float f; - double d; - - va_start (ap, n); - s1 = va_arg (ap, struct small_tag); - l = va_arg (ap, struct large_tag); - s2 = va_arg (ap, struct small_tag); - - uc = va_arg (ap, unsigned); - sc = va_arg (ap, signed); - - us = va_arg (ap, unsigned); - ss = va_arg (ap, signed); - - ui = va_arg (ap, unsigned int); - si = va_arg (ap, signed int); - - ul = va_arg (ap, unsigned long); - sl = va_arg (ap, signed long); - - f = va_arg (ap, double); /* C standard promotes float->double - when anonymous */ - d = va_arg (ap, double); - - printf ("%u %u %u %u %u %u %u %u %u uc=%u sc=%d %u %d %u %d %lu %ld %f %f\n", - s1.a, s1.b, l.a, l.b, l.c, l.d, l.e, - s2.a, s2.b, - uc, sc, - us, ss, - ui, si, - ul, sl, - f, d); - va_end (ap); - return n + 1; -} - -int -main (void) -{ - ffi_cif cif; - void* args[15]; - ffi_type* arg_types[15]; - - ffi_type s_type; - ffi_type *s_type_elements[3]; - - ffi_type l_type; - ffi_type *l_type_elements[6]; - - struct small_tag s1; - struct small_tag s2; - struct large_tag l1; - - int n; - ffi_arg res; - - unsigned char uc; - signed char sc; - unsigned short us; - signed short ss; - unsigned int ui; - signed int si; - unsigned long ul; - signed long sl; - double d1; - double f1; - - s_type.size = 0; - s_type.alignment = 0; - s_type.type = FFI_TYPE_STRUCT; - s_type.elements = s_type_elements; - - s_type_elements[0] = &ffi_type_uchar; - s_type_elements[1] = &ffi_type_uchar; - s_type_elements[2] = NULL; - - l_type.size = 0; - l_type.alignment = 0; - l_type.type = FFI_TYPE_STRUCT; - l_type.elements = l_type_elements; - - l_type_elements[0] = &ffi_type_uint; - l_type_elements[1] = &ffi_type_uint; - l_type_elements[2] = &ffi_type_uint; - l_type_elements[3] = &ffi_type_uint; - l_type_elements[4] = &ffi_type_uint; - l_type_elements[5] = NULL; - - arg_types[0] = &ffi_type_sint; - arg_types[1] = &s_type; - arg_types[2] = &l_type; - arg_types[3] = &s_type; - arg_types[4] = &ffi_type_uchar; - arg_types[5] = &ffi_type_schar; - arg_types[6] = &ffi_type_ushort; - arg_types[7] = &ffi_type_sshort; - arg_types[8] = &ffi_type_uint; - arg_types[9] = &ffi_type_sint; - arg_types[10] = &ffi_type_ulong; - arg_types[11] = &ffi_type_slong; - arg_types[12] = &ffi_type_double; - arg_types[13] = &ffi_type_double; - arg_types[14] = NULL; - - CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 14, &ffi_type_sint, arg_types) == FFI_OK); - - s1.a = 5; - s1.b = 6; - - l1.a = 10; - l1.b = 11; - l1.c = 12; - l1.d = 13; - l1.e = 14; - - s2.a = 7; - s2.b = 8; - - n = 41; - - uc = 9; - sc = 10; - us = 11; - ss = 12; - ui = 13; - si = 14; - ul = 15; - sl = 16; - f1 = 2.12; - d1 = 3.13; - - args[0] = &n; - args[1] = &s1; - args[2] = &l1; - args[3] = &s2; - args[4] = &uc; - args[5] = ≻ - args[6] = &us; - args[7] = &ss; - args[8] = &ui; - args[9] = &si; - args[10] = &ul; - args[11] = &sl; - args[12] = &f1; - args[13] = &d1; - args[14] = NULL; - - ffi_call(&cif, FFI_FN(test_fn), &res, args); - /* { dg-output "5 6 10 11 12 13 14 7 8 uc=9 sc=10 11 12 13 14 15 16 2.120000 3.130000" } */ - printf("res: %d\n", (int) res); - /* { dg-output "\nres: 42" } */ - - return 0; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_struct1.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_struct1.c deleted file mode 100644 index e6452061c..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_struct1.c +++ /dev/null @@ -1,121 +0,0 @@ -/* Area: ffi_call - Purpose: Test passing struct in variable argument lists. - Limitations: none. - PR: none. - Originator: ARM Ltd. */ - -/* { dg-do run } */ -/* { dg-output "" { xfail avr32*-*-* } } */ - -#include "ffitest.h" -#include - -struct small_tag -{ - unsigned char a; - unsigned char b; -}; - -struct large_tag -{ - unsigned a; - unsigned b; - unsigned c; - unsigned d; - unsigned e; -}; - -static int -test_fn (int n, ...) -{ - va_list ap; - struct small_tag s1; - struct small_tag s2; - struct large_tag l; - - va_start (ap, n); - s1 = va_arg (ap, struct small_tag); - l = va_arg (ap, struct large_tag); - s2 = va_arg (ap, struct small_tag); - printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, s1.b, l.a, l.b, l.c, l.d, l.e, - s2.a, s2.b); - va_end (ap); - return n + 1; -} - -int -main (void) -{ - ffi_cif cif; - void* args[5]; - ffi_type* arg_types[5]; - - ffi_type s_type; - ffi_type *s_type_elements[3]; - - ffi_type l_type; - ffi_type *l_type_elements[6]; - - struct small_tag s1; - struct small_tag s2; - struct large_tag l1; - - int n; - ffi_arg res; - - s_type.size = 0; - s_type.alignment = 0; - s_type.type = FFI_TYPE_STRUCT; - s_type.elements = s_type_elements; - - s_type_elements[0] = &ffi_type_uchar; - s_type_elements[1] = &ffi_type_uchar; - s_type_elements[2] = NULL; - - l_type.size = 0; - l_type.alignment = 0; - l_type.type = FFI_TYPE_STRUCT; - l_type.elements = l_type_elements; - - l_type_elements[0] = &ffi_type_uint; - l_type_elements[1] = &ffi_type_uint; - l_type_elements[2] = &ffi_type_uint; - l_type_elements[3] = &ffi_type_uint; - l_type_elements[4] = &ffi_type_uint; - l_type_elements[5] = NULL; - - arg_types[0] = &ffi_type_sint; - arg_types[1] = &s_type; - arg_types[2] = &l_type; - arg_types[3] = &s_type; - arg_types[4] = NULL; - - CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &ffi_type_sint, arg_types) == FFI_OK); - - s1.a = 5; - s1.b = 6; - - l1.a = 10; - l1.b = 11; - l1.c = 12; - l1.d = 13; - l1.e = 14; - - s2.a = 7; - s2.b = 8; - - n = 41; - - args[0] = &n; - args[1] = &s1; - args[2] = &l1; - args[3] = &s2; - args[4] = NULL; - - ffi_call(&cif, FFI_FN(test_fn), &res, args); - /* { dg-output "5 6 10 11 12 13 14 7 8" } */ - printf("res: %d\n", (int) res); - /* { dg-output "\nres: 42" } */ - - return 0; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_struct2.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_struct2.c deleted file mode 100644 index 56f5b9c75..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_struct2.c +++ /dev/null @@ -1,123 +0,0 @@ -/* Area: ffi_call - Purpose: Test passing struct in variable argument lists. - Limitations: none. - PR: none. - Originator: ARM Ltd. */ - -/* { dg-do run } */ -/* { dg-output "" { xfail avr32*-*-* } } */ - -#include "ffitest.h" -#include - -struct small_tag -{ - unsigned char a; - unsigned char b; -}; - -struct large_tag -{ - unsigned a; - unsigned b; - unsigned c; - unsigned d; - unsigned e; -}; - -static struct small_tag -test_fn (int n, ...) -{ - va_list ap; - struct small_tag s1; - struct small_tag s2; - struct large_tag l; - - va_start (ap, n); - s1 = va_arg (ap, struct small_tag); - l = va_arg (ap, struct large_tag); - s2 = va_arg (ap, struct small_tag); - printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, s1.b, l.a, l.b, l.c, l.d, l.e, - s2.a, s2.b); - va_end (ap); - s1.a += s2.a; - s1.b += s2.b; - return s1; -} - -int -main (void) -{ - ffi_cif cif; - void* args[5]; - ffi_type* arg_types[5]; - - ffi_type s_type; - ffi_type *s_type_elements[3]; - - ffi_type l_type; - ffi_type *l_type_elements[6]; - - struct small_tag s1; - struct small_tag s2; - struct large_tag l1; - - int n; - struct small_tag res; - - s_type.size = 0; - s_type.alignment = 0; - s_type.type = FFI_TYPE_STRUCT; - s_type.elements = s_type_elements; - - s_type_elements[0] = &ffi_type_uchar; - s_type_elements[1] = &ffi_type_uchar; - s_type_elements[2] = NULL; - - l_type.size = 0; - l_type.alignment = 0; - l_type.type = FFI_TYPE_STRUCT; - l_type.elements = l_type_elements; - - l_type_elements[0] = &ffi_type_uint; - l_type_elements[1] = &ffi_type_uint; - l_type_elements[2] = &ffi_type_uint; - l_type_elements[3] = &ffi_type_uint; - l_type_elements[4] = &ffi_type_uint; - l_type_elements[5] = NULL; - - arg_types[0] = &ffi_type_sint; - arg_types[1] = &s_type; - arg_types[2] = &l_type; - arg_types[3] = &s_type; - arg_types[4] = NULL; - - CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &s_type, arg_types) == FFI_OK); - - s1.a = 5; - s1.b = 6; - - l1.a = 10; - l1.b = 11; - l1.c = 12; - l1.d = 13; - l1.e = 14; - - s2.a = 7; - s2.b = 8; - - n = 41; - - args[0] = &n; - args[1] = &s1; - args[2] = &l1; - args[3] = &s2; - args[4] = NULL; - - ffi_call(&cif, FFI_FN(test_fn), &res, args); - /* { dg-output "5 6 10 11 12 13 14 7 8" } */ - printf("res: %d %d\n", res.a, res.b); - /* { dg-output "\nres: 12 14" } */ - - return 0; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_struct3.c b/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_struct3.c deleted file mode 100644 index 9a27e7fd4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/testsuite/libffi.call/va_struct3.c +++ /dev/null @@ -1,125 +0,0 @@ -/* Area: ffi_call - Purpose: Test passing struct in variable argument lists. - Limitations: none. - PR: none. - Originator: ARM Ltd. */ - -/* { dg-do run } */ -/* { dg-output "" { xfail avr32*-*-* } } */ - -#include "ffitest.h" -#include - -struct small_tag -{ - unsigned char a; - unsigned char b; -}; - -struct large_tag -{ - unsigned a; - unsigned b; - unsigned c; - unsigned d; - unsigned e; -}; - -static struct large_tag -test_fn (int n, ...) -{ - va_list ap; - struct small_tag s1; - struct small_tag s2; - struct large_tag l; - - va_start (ap, n); - s1 = va_arg (ap, struct small_tag); - l = va_arg (ap, struct large_tag); - s2 = va_arg (ap, struct small_tag); - printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, s1.b, l.a, l.b, l.c, l.d, l.e, - s2.a, s2.b); - va_end (ap); - l.a += s1.a; - l.b += s1.b; - l.c += s2.a; - l.d += s2.b; - return l; -} - -int -main (void) -{ - ffi_cif cif; - void* args[5]; - ffi_type* arg_types[5]; - - ffi_type s_type; - ffi_type *s_type_elements[3]; - - ffi_type l_type; - ffi_type *l_type_elements[6]; - - struct small_tag s1; - struct small_tag s2; - struct large_tag l1; - - int n; - struct large_tag res; - - s_type.size = 0; - s_type.alignment = 0; - s_type.type = FFI_TYPE_STRUCT; - s_type.elements = s_type_elements; - - s_type_elements[0] = &ffi_type_uchar; - s_type_elements[1] = &ffi_type_uchar; - s_type_elements[2] = NULL; - - l_type.size = 0; - l_type.alignment = 0; - l_type.type = FFI_TYPE_STRUCT; - l_type.elements = l_type_elements; - - l_type_elements[0] = &ffi_type_uint; - l_type_elements[1] = &ffi_type_uint; - l_type_elements[2] = &ffi_type_uint; - l_type_elements[3] = &ffi_type_uint; - l_type_elements[4] = &ffi_type_uint; - l_type_elements[5] = NULL; - - arg_types[0] = &ffi_type_sint; - arg_types[1] = &s_type; - arg_types[2] = &l_type; - arg_types[3] = &s_type; - arg_types[4] = NULL; - - CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &l_type, arg_types) == FFI_OK); - - s1.a = 5; - s1.b = 6; - - l1.a = 10; - l1.b = 11; - l1.c = 12; - l1.d = 13; - l1.e = 14; - - s2.a = 7; - s2.b = 8; - - n = 41; - - args[0] = &n; - args[1] = &s1; - args[2] = &l1; - args[3] = &s2; - args[4] = NULL; - - ffi_call(&cif, FFI_FN(test_fn), &res, args); - /* { dg-output "5 6 10 11 12 13 14 7 8" } */ - printf("res: %d %d %d %d %d\n", res.a, res.b, res.c, res.d, res.e); - /* { dg-output "\nres: 15 17 19 21 14" } */ - - return 0; -} diff --git a/ruby/ext/fiddle/libffi-3.2.1/texinfo.tex b/ruby/ext/fiddle/libffi-3.2.1/texinfo.tex deleted file mode 100644 index 85f184cc4..000000000 --- a/ruby/ext/fiddle/libffi-3.2.1/texinfo.tex +++ /dev/null @@ -1,10079 +0,0 @@ -% texinfo.tex -- TeX macros to handle Texinfo files. -% -% Load plain if necessary, i.e., if running under initex. -\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi -% -\def\texinfoversion{2013-02-01.11} -% -% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, -% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, -% 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. -% -% This texinfo.tex 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 3 of the -% License, or (at your option) any later version. -% -% This texinfo.tex file 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 . -% -% As a special exception, when this file is read by TeX when processing -% a Texinfo source document, you may use the result without -% restriction. This Exception is an additional permission under section 7 -% of the GNU General Public License, version 3 ("GPLv3"). -% -% Please try the latest version of texinfo.tex before submitting bug -% reports; you can get the latest version from: -% http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or -% http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or -% http://www.gnu.org/software/texinfo/ (the Texinfo home page) -% The texinfo.tex in any given distribution could well be out -% of date, so if that's what you're using, please check. -% -% Send bug reports to bug-texinfo@gnu.org. Please include including a -% complete document in each bug report with which we can reproduce the -% problem. Patches are, of course, greatly appreciated. -% -% To process a Texinfo manual with TeX, it's most reliable to use the -% texi2dvi shell script that comes with the distribution. For a simple -% manual foo.texi, however, you can get away with this: -% tex foo.texi -% texindex foo.?? -% tex foo.texi -% tex foo.texi -% dvips foo.dvi -o # or whatever; this makes foo.ps. -% The extra TeX runs get the cross-reference information correct. -% Sometimes one run after texindex suffices, and sometimes you need more -% than two; texi2dvi does it as many times as necessary. -% -% It is possible to adapt texinfo.tex for other languages, to some -% extent. You can get the existing language-specific files from the -% full Texinfo distribution. -% -% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. - - -\message{Loading texinfo [version \texinfoversion]:} - -% If in a .fmt file, print the version number -% and turn on active characters that we couldn't do earlier because -% they might have appeared in the input file name. -\everyjob{\message{[Texinfo version \texinfoversion]}% - \catcode`+=\active \catcode`\_=\active} - -\chardef\other=12 - -% We never want plain's \outer definition of \+ in Texinfo. -% For @tex, we can use \tabalign. -\let\+ = \relax - -% Save some plain tex macros whose names we will redefine. -\let\ptexb=\b -\let\ptexbullet=\bullet -\let\ptexc=\c -\let\ptexcomma=\, -\let\ptexdot=\. -\let\ptexdots=\dots -\let\ptexend=\end -\let\ptexequiv=\equiv -\let\ptexexclam=\! -\let\ptexfootnote=\footnote -\let\ptexgtr=> -\let\ptexhat=^ -\let\ptexi=\i -\let\ptexindent=\indent -\let\ptexinsert=\insert -\let\ptexlbrace=\{ -\let\ptexless=< -\let\ptexnewwrite\newwrite -\let\ptexnoindent=\noindent -\let\ptexplus=+ -\let\ptexraggedright=\raggedright -\let\ptexrbrace=\} -\let\ptexslash=\/ -\let\ptexstar=\* -\let\ptext=\t -\let\ptextop=\top -{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode - -% If this character appears in an error message or help string, it -% starts a new line in the output. -\newlinechar = `^^J - -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\thisisundefined - \let\linenumber = \empty % Pre-3.0. -\else - \def\linenumber{l.\the\inputlineno:\space} -\fi - -% Set up fixed words for English if not already set. -\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi -\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi -\ifx\putworderror\undefined \gdef\putworderror{error}\fi -\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi -\ifx\putwordin\undefined \gdef\putwordin{in}\fi -\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi -\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi -\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi -\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi -\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi -\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi -\ifx\putwordof\undefined \gdef\putwordof{of}\fi -\ifx\putwordon\undefined \gdef\putwordon{on}\fi -\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi -\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi -\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi -\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi -\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi -\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi -\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi -% -\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi -\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi -\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi -\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi -\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi -\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi -\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi -\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi -\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi -\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi -\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi -\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi -% -\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi -\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi -\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi -\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi -\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi - -% Since the category of space is not known, we have to be careful. -\chardef\spacecat = 10 -\def\spaceisspace{\catcode`\ =\spacecat} - -% sometimes characters are active, so we need control sequences. -\chardef\ampChar = `\& -\chardef\colonChar = `\: -\chardef\commaChar = `\, -\chardef\dashChar = `\- -\chardef\dotChar = `\. -\chardef\exclamChar= `\! -\chardef\hashChar = `\# -\chardef\lquoteChar= `\` -\chardef\questChar = `\? -\chardef\rquoteChar= `\' -\chardef\semiChar = `\; -\chardef\slashChar = `\/ -\chardef\underChar = `\_ - -% Ignore a token. -% -\def\gobble#1{} - -% The following is used inside several \edef's. -\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} - -% Hyphenation fixes. -\hyphenation{ - Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script - ap-pen-dix bit-map bit-maps - data-base data-bases eshell fall-ing half-way long-est man-u-script - man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm - par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces - spell-ing spell-ings - stand-alone strong-est time-stamp time-stamps which-ever white-space - wide-spread wrap-around -} - -% Margin to add to right of even pages, to left of odd pages. -\newdimen\bindingoffset -\newdimen\normaloffset -\newdimen\pagewidth \newdimen\pageheight - -% For a final copy, take out the rectangles -% that mark overfull boxes (in case you have decided -% that the text looks ok even though it passes the margin). -% -\def\finalout{\overfullrule=0pt } - -% Sometimes it is convenient to have everything in the transcript file -% and nothing on the terminal. We don't just call \tracingall here, -% since that produces some useless output on the terminal. We also make -% some effort to order the tracing commands to reduce output in the log -% file; cf. trace.sty in LaTeX. -% -\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% -\def\loggingall{% - \tracingstats2 - \tracingpages1 - \tracinglostchars2 % 2 gives us more in etex - \tracingparagraphs1 - \tracingoutput1 - \tracingmacros2 - \tracingrestores1 - \showboxbreadth\maxdimen \showboxdepth\maxdimen - \ifx\eTeXversion\thisisundefined\else % etex gives us more logging - \tracingscantokens1 - \tracingifs1 - \tracinggroups1 - \tracingnesting2 - \tracingassigns1 - \fi - \tracingcommands3 % 3 gives us more in etex - \errorcontextlines16 -}% - -% @errormsg{MSG}. Do the index-like expansions on MSG, but if things -% aren't perfect, it's not the end of the world, being an error message, -% after all. -% -\def\errormsg{\begingroup \indexnofonts \doerrormsg} -\def\doerrormsg#1{\errmessage{#1}} - -% add check for \lastpenalty to plain's definitions. If the last thing -% we did was a \nobreak, we don't want to insert more space. -% -\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount - \removelastskip\penalty-50\smallskip\fi\fi} -\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount - \removelastskip\penalty-100\medskip\fi\fi} -\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount - \removelastskip\penalty-200\bigskip\fi\fi} - -% Do @cropmarks to get crop marks. -% -\newif\ifcropmarks -\let\cropmarks = \cropmarkstrue -% -% Dimensions to add cropmarks at corners. -% Added by P. A. MacKay, 12 Nov. 1986 -% -\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines -\newdimen\cornerlong \cornerlong=1pc -\newdimen\cornerthick \cornerthick=.3pt -\newdimen\topandbottommargin \topandbottommargin=.75in - -% Output a mark which sets \thischapter, \thissection and \thiscolor. -% We dump everything together because we only have one kind of mark. -% This works because we only use \botmark / \topmark, not \firstmark. -% -% A mark contains a subexpression of the \ifcase ... \fi construct. -% \get*marks macros below extract the needed part using \ifcase. -% -% Another complication is to let the user choose whether \thischapter -% (\thissection) refers to the chapter (section) in effect at the top -% of a page, or that at the bottom of a page. The solution is -% described on page 260 of The TeXbook. It involves outputting two -% marks for the sectioning macros, one before the section break, and -% one after. I won't pretend I can describe this better than DEK... -\def\domark{% - \toks0=\expandafter{\lastchapterdefs}% - \toks2=\expandafter{\lastsectiondefs}% - \toks4=\expandafter{\prevchapterdefs}% - \toks6=\expandafter{\prevsectiondefs}% - \toks8=\expandafter{\lastcolordefs}% - \mark{% - \the\toks0 \the\toks2 - \noexpand\or \the\toks4 \the\toks6 - \noexpand\else \the\toks8 - }% -} -% \topmark doesn't work for the very first chapter (after the title -% page or the contents), so we use \firstmark there -- this gets us -% the mark with the chapter defs, unless the user sneaks in, e.g., -% @setcolor (or @url, or @link, etc.) between @contents and the very -% first @chapter. -\def\gettopheadingmarks{% - \ifcase0\topmark\fi - \ifx\thischapter\empty \ifcase0\firstmark\fi \fi -} -\def\getbottomheadingmarks{\ifcase1\botmark\fi} -\def\getcolormarks{\ifcase2\topmark\fi} - -% Avoid "undefined control sequence" errors. -\def\lastchapterdefs{} -\def\lastsectiondefs{} -\def\prevchapterdefs{} -\def\prevsectiondefs{} -\def\lastcolordefs{} - -% Main output routine. -\chardef\PAGE = 255 -\output = {\onepageout{\pagecontents\PAGE}} - -\newbox\headlinebox -\newbox\footlinebox - -% \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions, but you have to call it yourself. -\def\onepageout#1{% - \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi - % - \ifodd\pageno \advance\hoffset by \bindingoffset - \else \advance\hoffset by -\bindingoffset\fi - % - % Do this outside of the \shipout so @code etc. will be expanded in - % the headline as they should be, not taken literally (outputting ''code). - \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi - \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% - \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi - \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% - % - {% - % Have to do this stuff outside the \shipout because we want it to - % take effect in \write's, yet the group defined by the \vbox ends - % before the \shipout runs. - % - \indexdummies % don't expand commands in the output. - \normalturnoffactive % \ in index entries must not stay \, e.g., if - % the page break happens to be in the middle of an example. - % We don't want .vr (or whatever) entries like this: - % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} - % "\acronym" won't work when it's read back in; - % it needs to be - % {\code {{\tt \backslashcurfont }acronym} - \shipout\vbox{% - % Do this early so pdf references go to the beginning of the page. - \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi - % - \ifcropmarks \vbox to \outervsize\bgroup - \hsize = \outerhsize - \vskip-\topandbottommargin - \vtop to0pt{% - \line{\ewtop\hfil\ewtop}% - \nointerlineskip - \line{% - \vbox{\moveleft\cornerthick\nstop}% - \hfill - \vbox{\moveright\cornerthick\nstop}% - }% - \vss}% - \vskip\topandbottommargin - \line\bgroup - \hfil % center the page within the outer (page) hsize. - \ifodd\pageno\hskip\bindingoffset\fi - \vbox\bgroup - \fi - % - \unvbox\headlinebox - \pagebody{#1}% - \ifdim\ht\footlinebox > 0pt - % Only leave this space if the footline is nonempty. - % (We lessened \vsize for it in \oddfootingyyy.) - % The \baselineskip=24pt in plain's \makefootline has no effect. - \vskip 24pt - \unvbox\footlinebox - \fi - % - \ifcropmarks - \egroup % end of \vbox\bgroup - \hfil\egroup % end of (centering) \line\bgroup - \vskip\topandbottommargin plus1fill minus1fill - \boxmaxdepth = \cornerthick - \vbox to0pt{\vss - \line{% - \vbox{\moveleft\cornerthick\nsbot}% - \hfill - \vbox{\moveright\cornerthick\nsbot}% - }% - \nointerlineskip - \line{\ewbot\hfil\ewbot}% - }% - \egroup % \vbox from first cropmarks clause - \fi - }% end of \shipout\vbox - }% end of group with \indexdummies - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi -} - -\newinsert\margin \dimen\margin=\maxdimen - -\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} -{\catcode`\@ =11 -\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi -% marginal hacks, juha@viisa.uucp (Juha Takala) -\ifvoid\margin\else % marginal info is present - \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi -\dimen@=\dp#1\relax \unvbox#1\relax -\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi -\ifr@ggedbottom \kern-\dimen@ \vfil \fi} -} - -% Here are the rules for the cropmarks. Note that they are -% offset so that the space between them is truly \outerhsize or \outervsize -% (P. A. MacKay, 12 November, 1986) -% -\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} -\def\nstop{\vbox - {\hrule height\cornerthick depth\cornerlong width\cornerthick}} -\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} -\def\nsbot{\vbox - {\hrule height\cornerlong depth\cornerthick width\cornerthick}} - -% Parse an argument, then pass it to #1. The argument is the rest of -% the input line (except we remove a trailing comment). #1 should be a -% macro which expects an ordinary undelimited TeX argument. -% -\def\parsearg{\parseargusing{}} -\def\parseargusing#1#2{% - \def\argtorun{#2}% - \begingroup - \obeylines - \spaceisspace - #1% - \parseargline\empty% Insert the \empty token, see \finishparsearg below. -} - -{\obeylines % - \gdef\parseargline#1^^M{% - \endgroup % End of the group started in \parsearg. - \argremovecomment #1\comment\ArgTerm% - }% -} - -% First remove any @comment, then any @c comment. -\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} -\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} - -% Each occurrence of `\^^M' or `\^^M' is replaced by a single space. -% -% \argremovec might leave us with trailing space, e.g., -% @end itemize @c foo -% This space token undergoes the same procedure and is eventually removed -% by \finishparsearg. -% -\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} -\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} -\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% - \def\temp{#3}% - \ifx\temp\empty - % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: - \let\temp\finishparsearg - \else - \let\temp\argcheckspaces - \fi - % Put the space token in: - \temp#1 #3\ArgTerm -} - -% If a _delimited_ argument is enclosed in braces, they get stripped; so -% to get _exactly_ the rest of the line, we had to prevent such situation. -% We prepended an \empty token at the very beginning and we expand it now, -% just before passing the control to \argtorun. -% (Similarly, we have to think about #3 of \argcheckspacesY above: it is -% either the null string, or it ends with \^^M---thus there is no danger -% that a pair of braces would be stripped. -% -% But first, we have to remove the trailing space token. -% -\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} - -% \parseargdef\foo{...} -% is roughly equivalent to -% \def\foo{\parsearg\Xfoo} -% \def\Xfoo#1{...} -% -% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my -% favourite TeX trick. --kasal, 16nov03 - -\def\parseargdef#1{% - \expandafter \doparseargdef \csname\string#1\endcsname #1% -} -\def\doparseargdef#1#2{% - \def#2{\parsearg#1}% - \def#1##1% -} - -% Several utility definitions with active space: -{ - \obeyspaces - \gdef\obeyedspace{ } - - % Make each space character in the input produce a normal interword - % space in the output. Don't allow a line break at this space, as this - % is used only in environments like @example, where each line of input - % should produce a line of output anyway. - % - \gdef\sepspaces{\obeyspaces\let =\tie} - - % If an index command is used in an @example environment, any spaces - % therein should become regular spaces in the raw index file, not the - % expansion of \tie (\leavevmode \penalty \@M \ ). - \gdef\unsepspaces{\let =\space} -} - - -\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} - -% Define the framework for environments in texinfo.tex. It's used like this: -% -% \envdef\foo{...} -% \def\Efoo{...} -% -% It's the responsibility of \envdef to insert \begingroup before the -% actual body; @end closes the group after calling \Efoo. \envdef also -% defines \thisenv, so the current environment is known; @end checks -% whether the environment name matches. The \checkenv macro can also be -% used to check whether the current environment is the one expected. -% -% Non-false conditionals (@iftex, @ifset) don't fit into this, so they -% are not treated as environments; they don't open a group. (The -% implementation of @end takes care not to call \endgroup in this -% special case.) - - -% At run-time, environments start with this: -\def\startenvironment#1{\begingroup\def\thisenv{#1}} -% initialize -\let\thisenv\empty - -% ... but they get defined via ``\envdef\foo{...}'': -\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} -\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} - -% Check whether we're in the right environment: -\def\checkenv#1{% - \def\temp{#1}% - \ifx\thisenv\temp - \else - \badenverr - \fi -} - -% Environment mismatch, #1 expected: -\def\badenverr{% - \errhelp = \EMsimple - \errmessage{This command can appear only \inenvironment\temp, - not \inenvironment\thisenv}% -} -\def\inenvironment#1{% - \ifx#1\empty - outside of any environment% - \else - in environment \expandafter\string#1% - \fi -} - -% @end foo executes the definition of \Efoo. -% But first, it executes a specialized version of \checkenv -% -\parseargdef\end{% - \if 1\csname iscond.#1\endcsname - \else - % The general wording of \badenverr may not be ideal. - \expandafter\checkenv\csname#1\endcsname - \csname E#1\endcsname - \endgroup - \fi -} - -\newhelp\EMsimple{Press RETURN to continue.} - - -% Be sure we're in horizontal mode when doing a tie, since we make space -% equivalent to this in @example-like environments. Otherwise, a space -% at the beginning of a line will start with \penalty -- and -% since \penalty is valid in vertical mode, we'd end up putting the -% penalty on the vertical list instead of in the new paragraph. -{\catcode`@ = 11 - % Avoid using \@M directly, because that causes trouble - % if the definition is written into an index file. - \global\let\tiepenalty = \@M - \gdef\tie{\leavevmode\penalty\tiepenalty\ } -} - -% @: forces normal size whitespace following. -\def\:{\spacefactor=1000 } - -% @* forces a line break. -\def\*{\unskip\hfil\break\hbox{}\ignorespaces} - -% @/ allows a line break. -\let\/=\allowbreak - -% @. is an end-of-sentence period. -\def\.{.\spacefactor=\endofsentencespacefactor\space} - -% @! is an end-of-sentence bang. -\def\!{!\spacefactor=\endofsentencespacefactor\space} - -% @? is an end-of-sentence query. -\def\?{?\spacefactor=\endofsentencespacefactor\space} - -% @frenchspacing on|off says whether to put extra space after punctuation. -% -\def\onword{on} -\def\offword{off} -% -\parseargdef\frenchspacing{% - \def\temp{#1}% - \ifx\temp\onword \plainfrenchspacing - \else\ifx\temp\offword \plainnonfrenchspacing - \else - \errhelp = \EMsimple - \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% - \fi\fi -} - -% @w prevents a word break. Without the \leavevmode, @w at the -% beginning of a paragraph, when TeX is still in vertical mode, would -% produce a whole line of output instead of starting the paragraph. -\def\w#1{\leavevmode\hbox{#1}} - -% @group ... @end group forces ... to be all on one page, by enclosing -% it in a TeX vbox. We use \vtop instead of \vbox to construct the box -% to keep its height that of a normal line. According to the rules for -% \topskip (p.114 of the TeXbook), the glue inserted is -% max (\topskip - \ht (first item), 0). If that height is large, -% therefore, no glue is inserted, and the space between the headline and -% the text is small, which looks bad. -% -% Another complication is that the group might be very large. This can -% cause the glue on the previous page to be unduly stretched, because it -% does not have much material. In this case, it's better to add an -% explicit \vfill so that the extra space is at the bottom. The -% threshold for doing this is if the group is more than \vfilllimit -% percent of a page (\vfilllimit can be changed inside of @tex). -% -\newbox\groupbox -\def\vfilllimit{0.7} -% -\envdef\group{% - \ifnum\catcode`\^^M=\active \else - \errhelp = \groupinvalidhelp - \errmessage{@group invalid in context where filling is enabled}% - \fi - \startsavinginserts - % - \setbox\groupbox = \vtop\bgroup - % Do @comment since we are called inside an environment such as - % @example, where each end-of-line in the input causes an - % end-of-line in the output. We don't want the end-of-line after - % the `@group' to put extra space in the output. Since @group - % should appear on a line by itself (according to the Texinfo - % manual), we don't worry about eating any user text. - \comment -} -% -% The \vtop produces a box with normal height and large depth; thus, TeX puts -% \baselineskip glue before it, and (when the next line of text is done) -% \lineskip glue after it. Thus, space below is not quite equal to space -% above. But it's pretty close. -\def\Egroup{% - % To get correct interline space between the last line of the group - % and the first line afterwards, we have to propagate \prevdepth. - \endgraf % Not \par, as it may have been set to \lisppar. - \global\dimen1 = \prevdepth - \egroup % End the \vtop. - % \dimen0 is the vertical size of the group's box. - \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox - % \dimen2 is how much space is left on the page (more or less). - \dimen2 = \pageheight \advance\dimen2 by -\pagetotal - % if the group doesn't fit on the current page, and it's a big big - % group, force a page break. - \ifdim \dimen0 > \dimen2 - \ifdim \pagetotal < \vfilllimit\pageheight - \page - \fi - \fi - \box\groupbox - \prevdepth = \dimen1 - \checkinserts -} -% -% TeX puts in an \escapechar (i.e., `@') at the beginning of the help -% message, so this ends up printing `@group can only ...'. -% -\newhelp\groupinvalidhelp{% -group can only be used in environments such as @example,^^J% -where each line of input produces a line of output.} - -% @need space-in-mils -% forces a page break if there is not space-in-mils remaining. - -\newdimen\mil \mil=0.001in - -\parseargdef\need{% - % Ensure vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % - % If the @need value is less than one line space, it's useless. - \dimen0 = #1\mil - \dimen2 = \ht\strutbox - \advance\dimen2 by \dp\strutbox - \ifdim\dimen0 > \dimen2 - % - % Do a \strut just to make the height of this box be normal, so the - % normal leading is inserted relative to the preceding line. - % And a page break here is fine. - \vtop to #1\mil{\strut\vfil}% - % - % TeX does not even consider page breaks if a penalty added to the - % main vertical list is 10000 or more. But in order to see if the - % empty box we just added fits on the page, we must make it consider - % page breaks. On the other hand, we don't want to actually break the - % page after the empty box. So we use a penalty of 9999. - % - % There is an extremely small chance that TeX will actually break the - % page at this \penalty, if there are no other feasible breakpoints in - % sight. (If the user is using lots of big @group commands, which - % almost-but-not-quite fill up a page, TeX will have a hard time doing - % good page breaking, for example.) However, I could not construct an - % example where a page broke at this \penalty; if it happens in a real - % document, then we can reconsider our strategy. - \penalty9999 - % - % Back up by the size of the box, whether we did a page break or not. - \kern -#1\mil - % - % Do not allow a page break right after this kern. - \nobreak - \fi -} - -% @br forces paragraph break (and is undocumented). - -\let\br = \par - -% @page forces the start of a new page. -% -\def\page{\par\vfill\supereject} - -% @exdent text.... -% outputs text on separate line in roman font, starting at standard page margin - -% This records the amount of indent in the innermost environment. -% That's how much \exdent should take out. -\newskip\exdentamount - -% This defn is used inside fill environments such as @defun. -\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} - -% This defn is used inside nofill environments such as @example. -\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount - \leftline{\hskip\leftskip{\rm#1}}}} - -% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current -% paragraph. For more general purposes, use the \margin insertion -% class. WHICH is `l' or `r'. Not documented, written for gawk manual. -% -\newskip\inmarginspacing \inmarginspacing=1cm -\def\strutdepth{\dp\strutbox} -% -\def\doinmargin#1#2{\strut\vadjust{% - \nobreak - \kern-\strutdepth - \vtop to \strutdepth{% - \baselineskip=\strutdepth - \vss - % if you have multiple lines of stuff to put here, you'll need to - % make the vbox yourself of the appropriate size. - \ifx#1l% - \llap{\ignorespaces #2\hskip\inmarginspacing}% - \else - \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% - \fi - \null - }% -}} -\def\inleftmargin{\doinmargin l} -\def\inrightmargin{\doinmargin r} -% -% @inmargin{TEXT [, RIGHT-TEXT]} -% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; -% else use TEXT for both). -% -\def\inmargin#1{\parseinmargin #1,,\finish} -\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \def\lefttext{#1}% have both texts - \def\righttext{#2}% - \else - \def\lefttext{#1}% have only one text - \def\righttext{#1}% - \fi - % - \ifodd\pageno - \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin - \else - \def\temp{\inleftmargin\lefttext}% - \fi - \temp -} - -% @| inserts a changebar to the left of the current line. It should -% surround any changed text. This approach does *not* work if the -% change spans more than two lines of output. To handle that, we would -% have adopt a much more difficult approach (putting marks into the main -% vertical list for the beginning and end of each change). This command -% is not documented, not supported, and doesn't work. -% -\def\|{% - % \vadjust can only be used in horizontal mode. - \leavevmode - % - % Append this vertical mode material after the current line in the output. - \vadjust{% - % We want to insert a rule with the height and depth of the current - % leading; that is exactly what \strutbox is supposed to record. - \vskip-\baselineskip - % - % \vadjust-items are inserted at the left edge of the type. So - % the \llap here moves out into the left-hand margin. - \llap{% - % - % For a thicker or thinner bar, change the `1pt'. - \vrule height\baselineskip width1pt - % - % This is the space between the bar and the text. - \hskip 12pt - }% - }% -} - -% @include FILE -- \input text of FILE. -% -\def\include{\parseargusing\filenamecatcodes\includezzz} -\def\includezzz#1{% - \pushthisfilestack - \def\thisfile{#1}% - {% - \makevalueexpandable % we want to expand any @value in FILE. - \turnoffactive % and allow special characters in the expansion - \indexnofonts % Allow `@@' and other weird things in file names. - \wlog{texinfo.tex: doing @include of #1^^J}% - \edef\temp{\noexpand\input #1 }% - % - % This trickery is to read FILE outside of a group, in case it makes - % definitions, etc. - \expandafter - }\temp - \popthisfilestack -} -\def\filenamecatcodes{% - \catcode`\\=\other - \catcode`~=\other - \catcode`^=\other - \catcode`_=\other - \catcode`|=\other - \catcode`<=\other - \catcode`>=\other - \catcode`+=\other - \catcode`-=\other - \catcode`\`=\other - \catcode`\'=\other -} - -\def\pushthisfilestack{% - \expandafter\pushthisfilestackX\popthisfilestack\StackTerm -} -\def\pushthisfilestackX{% - \expandafter\pushthisfilestackY\thisfile\StackTerm -} -\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% - \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% -} - -\def\popthisfilestack{\errthisfilestackempty} -\def\errthisfilestackempty{\errmessage{Internal error: - the stack of filenames is empty.}} -% -\def\thisfile{} - -% @center line -% outputs that line, centered. -% -\parseargdef\center{% - \ifhmode - \let\centersub\centerH - \else - \let\centersub\centerV - \fi - \centersub{\hfil \ignorespaces#1\unskip \hfil}% - \let\centersub\relax % don't let the definition persist, just in case -} -\def\centerH#1{{% - \hfil\break - \advance\hsize by -\leftskip - \advance\hsize by -\rightskip - \line{#1}% - \break -}} -% -\newcount\centerpenalty -\def\centerV#1{% - % The idea here is the same as in \startdefun, \cartouche, etc.: if - % @center is the first thing after a section heading, we need to wipe - % out the negative parskip inserted by \sectionheading, but still - % prevent a page break here. - \centerpenalty = \lastpenalty - \ifnum\centerpenalty>10000 \vskip\parskip \fi - \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi - \line{\kern\leftskip #1\kern\rightskip}% -} - -% @sp n outputs n lines of vertical space -% -\parseargdef\sp{\vskip #1\baselineskip} - -% @comment ...line which is ignored... -% @c is the same as @comment -% @ignore ... @end ignore is another way to write a comment -% -\def\comment{\begingroup \catcode`\^^M=\other% -\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% -\commentxxx} -{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} -% -\let\c=\comment - -% @paragraphindent NCHARS -% We'll use ems for NCHARS, close enough. -% NCHARS can also be the word `asis' or `none'. -% We cannot feasibly implement @paragraphindent asis, though. -% -\def\asisword{asis} % no translation, these are keywords -\def\noneword{none} -% -\parseargdef\paragraphindent{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \defaultparindent = 0pt - \else - \defaultparindent = #1em - \fi - \fi - \parindent = \defaultparindent -} - -% @exampleindent NCHARS -% We'll use ems for NCHARS like @paragraphindent. -% It seems @exampleindent asis isn't necessary, but -% I preserve it to make it similar to @paragraphindent. -\parseargdef\exampleindent{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \lispnarrowing = 0pt - \else - \lispnarrowing = #1em - \fi - \fi -} - -% @firstparagraphindent WORD -% If WORD is `none', then suppress indentation of the first paragraph -% after a section heading. If WORD is `insert', then do indent at such -% paragraphs. -% -% The paragraph indentation is suppressed or not by calling -% \suppressfirstparagraphindent, which the sectioning commands do. -% We switch the definition of this back and forth according to WORD. -% By default, we suppress indentation. -% -\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} -\def\insertword{insert} -% -\parseargdef\firstparagraphindent{% - \def\temp{#1}% - \ifx\temp\noneword - \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent - \else\ifx\temp\insertword - \let\suppressfirstparagraphindent = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @firstparagraphindent option `\temp'}% - \fi\fi -} - -% Here is how we actually suppress indentation. Redefine \everypar to -% \kern backwards by \parindent, and then reset itself to empty. -% -% We also make \indent itself not actually do anything until the next -% paragraph. -% -\gdef\dosuppressfirstparagraphindent{% - \gdef\indent{% - \restorefirstparagraphindent - \indent - }% - \gdef\noindent{% - \restorefirstparagraphindent - \noindent - }% - \global\everypar = {% - \kern -\parindent - \restorefirstparagraphindent - }% -} - -\gdef\restorefirstparagraphindent{% - \global \let \indent = \ptexindent - \global \let \noindent = \ptexnoindent - \global \everypar = {}% -} - - -% @refill is a no-op. -\let\refill=\relax - -% If working on a large document in chapters, it is convenient to -% be able to disable indexing, cross-referencing, and contents, for test runs. -% This is done with @novalidate (before @setfilename). -% -\newif\iflinks \linkstrue % by default we want the aux files. -\let\novalidate = \linksfalse - -% @setfilename is done at the beginning of every texinfo file. -% So open here the files we need to have open while reading the input. -% This makes it possible to make a .fmt file for texinfo. -\def\setfilename{% - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \iflinks - \tryauxfile - % Open the new aux file. TeX will close it automatically at exit. - \immediate\openout\auxfile=\jobname.aux - \fi % \openindices needs to do some work in any case. - \openindices - \let\setfilename=\comment % Ignore extra @setfilename cmds. - % - % If texinfo.cnf is present on the system, read it. - % Useful for site-wide @afourpaper, etc. - \openin 1 texinfo.cnf - \ifeof 1 \else \input texinfo.cnf \fi - \closein 1 - % - \comment % Ignore the actual filename. -} - -% Called from \setfilename. -% -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} - -% @bye. -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} - - -\message{pdf,} -% adobe `portable' document format -\newcount\tempnum -\newcount\lnkcount -\newtoks\filename -\newcount\filenamelength -\newcount\pgn -\newtoks\toksA -\newtoks\toksB -\newtoks\toksC -\newtoks\toksD -\newbox\boxA -\newcount\countA -\newif\ifpdf -\newif\ifpdfmakepagedest - -% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 -% can be set). So we test for \relax and 0 as well as being undefined. -\ifx\pdfoutput\thisisundefined -\else - \ifx\pdfoutput\relax - \else - \ifcase\pdfoutput - \else - \pdftrue - \fi - \fi -\fi - -% PDF uses PostScript string constants for the names of xref targets, -% for display in the outlines, and in other places. Thus, we have to -% double any backslashes. Otherwise, a name like "\node" will be -% interpreted as a newline (\n), followed by o, d, e. Not good. -% -% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and -% related messages. The final outcome is that it is up to the TeX user -% to double the backslashes and otherwise make the string valid, so -% that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to -% do this reliably, so we use it. - -% #1 is a control sequence in which to do the replacements, -% which we \xdef. -\def\txiescapepdf#1{% - \ifx\pdfescapestring\thisisundefined - % No primitive available; should we give a warning or log? - % Many times it won't matter. - \else - % The expandable \pdfescapestring primitive escapes parentheses, - % backslashes, and other special chars. - \xdef#1{\pdfescapestring{#1}}% - \fi -} - -\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images -with PDF output, and none of those formats could be found. (.eps cannot -be supported due to the design of the PDF format; use regular TeX (DVI -output) for that.)} - -\ifpdf - % - % Color manipulation macros based on pdfcolor.tex, - % except using rgb instead of cmyk; the latter is said to render as a - % very dark gray on-screen and a very dark halftone in print, instead - % of actual black. - \def\rgbDarkRed{0.50 0.09 0.12} - \def\rgbBlack{0 0 0} - % - % k sets the color for filling (usual text, etc.); - % K sets the color for stroking (thin rules, e.g., normal _'s). - \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} - % - % Set color, and create a mark which defines \thiscolor accordingly, - % so that \makeheadline knows which color to restore. - \def\setcolor#1{% - \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% - \domark - \pdfsetcolor{#1}% - } - % - \def\maincolor{\rgbBlack} - \pdfsetcolor{\maincolor} - \edef\thiscolor{\maincolor} - \def\lastcolordefs{} - % - \def\makefootline{% - \baselineskip24pt - \line{\pdfsetcolor{\maincolor}\the\footline}% - } - % - \def\makeheadline{% - \vbox to 0pt{% - \vskip-22.5pt - \line{% - \vbox to8.5pt{}% - % Extract \thiscolor definition from the marks. - \getcolormarks - % Typeset the headline with \maincolor, then restore the color. - \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% - }% - \vss - }% - \nointerlineskip - } - % - % - \pdfcatalog{/PageMode /UseOutlines} - % - % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). - \def\dopdfimage#1#2#3{% - \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% - \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% - % - % pdftex (and the PDF format) support .pdf, .png, .jpg (among - % others). Let's try in that order, PDF first since if - % someone has a scalable image, presumably better to use that than a - % bitmap. - \let\pdfimgext=\empty - \begingroup - \openin 1 #1.pdf \ifeof 1 - \openin 1 #1.PDF \ifeof 1 - \openin 1 #1.png \ifeof 1 - \openin 1 #1.jpg \ifeof 1 - \openin 1 #1.jpeg \ifeof 1 - \openin 1 #1.JPG \ifeof 1 - \errhelp = \nopdfimagehelp - \errmessage{Could not find image file #1 for pdf}% - \else \gdef\pdfimgext{JPG}% - \fi - \else \gdef\pdfimgext{jpeg}% - \fi - \else \gdef\pdfimgext{jpg}% - \fi - \else \gdef\pdfimgext{png}% - \fi - \else \gdef\pdfimgext{PDF}% - \fi - \else \gdef\pdfimgext{pdf}% - \fi - \closein 1 - \endgroup - % - % without \immediate, ancient pdftex seg faults when the same image is - % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) - \ifnum\pdftexversion < 14 - \immediate\pdfimage - \else - \immediate\pdfximage - \fi - \ifdim \wd0 >0pt width \pdfimagewidth \fi - \ifdim \wd2 >0pt height \pdfimageheight \fi - \ifnum\pdftexversion<13 - #1.\pdfimgext - \else - {#1.\pdfimgext}% - \fi - \ifnum\pdftexversion < 14 \else - \pdfrefximage \pdflastximage - \fi} - % - \def\pdfmkdest#1{{% - % We have to set dummies so commands such as @code, and characters - % such as \, aren't expanded when present in a section title. - \indexnofonts - \turnoffactive - \makevalueexpandable - \def\pdfdestname{#1}% - \txiescapepdf\pdfdestname - \safewhatsit{\pdfdest name{\pdfdestname} xyz}% - }} - % - % used to mark target names; must be expandable. - \def\pdfmkpgn#1{#1} - % - % by default, use a color that is dark enough to print on paper as - % nearly black, but still distinguishable for online viewing. - \def\urlcolor{\rgbDarkRed} - \def\linkcolor{\rgbDarkRed} - \def\endlink{\setcolor{\maincolor}\pdfendlink} - % - % Adding outlines to PDF; macros for calculating structure of outlines - % come from Petr Olsak - \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% - \else \csname#1\endcsname \fi} - \def\advancenumber#1{\tempnum=\expnumber{#1}\relax - \advance\tempnum by 1 - \expandafter\xdef\csname#1\endcsname{\the\tempnum}} - % - % #1 is the section text, which is what will be displayed in the - % outline by the pdf viewer. #2 is the pdf expression for the number - % of subentries (or empty, for subsubsections). #3 is the node text, - % which might be empty if this toc entry had no corresponding node. - % #4 is the page number - % - \def\dopdfoutline#1#2#3#4{% - % Generate a link to the node text if that exists; else, use the - % page number. We could generate a destination for the section - % text in the case where a section has no node, but it doesn't - % seem worth the trouble, since most documents are normally structured. - \edef\pdfoutlinedest{#3}% - \ifx\pdfoutlinedest\empty - \def\pdfoutlinedest{#4}% - \else - \txiescapepdf\pdfoutlinedest - \fi - % - % Also escape PDF chars in the display string. - \edef\pdfoutlinetext{#1}% - \txiescapepdf\pdfoutlinetext - % - \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% - } - % - \def\pdfmakeoutlines{% - \begingroup - % Read toc silently, to get counts of subentries for \pdfoutline. - \def\partentry##1##2##3##4{}% ignore parts in the outlines - \def\numchapentry##1##2##3##4{% - \def\thischapnum{##2}% - \def\thissecnum{0}% - \def\thissubsecnum{0}% - }% - \def\numsecentry##1##2##3##4{% - \advancenumber{chap\thischapnum}% - \def\thissecnum{##2}% - \def\thissubsecnum{0}% - }% - \def\numsubsecentry##1##2##3##4{% - \advancenumber{sec\thissecnum}% - \def\thissubsecnum{##2}% - }% - \def\numsubsubsecentry##1##2##3##4{% - \advancenumber{subsec\thissubsecnum}% - }% - \def\thischapnum{0}% - \def\thissecnum{0}% - \def\thissubsecnum{0}% - % - % use \def rather than \let here because we redefine \chapentry et - % al. a second time, below. - \def\appentry{\numchapentry}% - \def\appsecentry{\numsecentry}% - \def\appsubsecentry{\numsubsecentry}% - \def\appsubsubsecentry{\numsubsubsecentry}% - \def\unnchapentry{\numchapentry}% - \def\unnsecentry{\numsecentry}% - \def\unnsubsecentry{\numsubsecentry}% - \def\unnsubsubsecentry{\numsubsubsecentry}% - \readdatafile{toc}% - % - % Read toc second time, this time actually producing the outlines. - % The `-' means take the \expnumber as the absolute number of - % subentries, which we calculated on our first read of the .toc above. - % - % We use the node names as the destinations. - \def\numchapentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% - \def\numsecentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% - \def\numsubsecentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% - \def\numsubsubsecentry##1##2##3##4{% count is always zero - \dopdfoutline{##1}{}{##3}{##4}}% - % - % PDF outlines are displayed using system fonts, instead of - % document fonts. Therefore we cannot use special characters, - % since the encoding is unknown. For example, the eogonek from - % Latin 2 (0xea) gets translated to a | character. Info from - % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. - % - % TODO this right, we have to translate 8-bit characters to - % their "best" equivalent, based on the @documentencoding. Too - % much work for too little return. Just use the ASCII equivalents - % we use for the index sort strings. - % - \indexnofonts - \setupdatafile - % We can have normal brace characters in the PDF outlines, unlike - % Texinfo index files. So set that up. - \def\{{\lbracecharliteral}% - \def\}{\rbracecharliteral}% - \catcode`\\=\active \otherbackslash - \input \tocreadfilename - \endgroup - } - {\catcode`[=1 \catcode`]=2 - \catcode`{=\other \catcode`}=\other - \gdef\lbracecharliteral[{]% - \gdef\rbracecharliteral[}]% - ] - % - \def\skipspaces#1{\def\PP{#1}\def\D{|}% - \ifx\PP\D\let\nextsp\relax - \else\let\nextsp\skipspaces - \addtokens{\filename}{\PP}% - \advance\filenamelength by 1 - \fi - \nextsp} - \def\getfilename#1{% - \filenamelength=0 - % If we don't expand the argument now, \skipspaces will get - % snagged on things like "@value{foo}". - \edef\temp{#1}% - \expandafter\skipspaces\temp|\relax - } - \ifnum\pdftexversion < 14 - \let \startlink \pdfannotlink - \else - \let \startlink \pdfstartlink - \fi - % make a live url in pdf output. - \def\pdfurl#1{% - \begingroup - % it seems we really need yet another set of dummies; have not - % tried to figure out what each command should do in the context - % of @url. for now, just make @/ a no-op, that's the only one - % people have actually reported a problem with. - % - \normalturnoffactive - \def\@{@}% - \let\/=\empty - \makevalueexpandable - % do we want to go so far as to use \indexnofonts instead of just - % special-casing \var here? - \def\var##1{##1}% - % - \leavevmode\setcolor{\urlcolor}% - \startlink attr{/Border [0 0 0]}% - user{/Subtype /Link /A << /S /URI /URI (#1) >>}% - \endgroup} - \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} - \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} - \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} - \def\maketoks{% - \expandafter\poptoks\the\toksA|ENDTOKS|\relax - \ifx\first0\adn0 - \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 - \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 - \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 - \else - \ifnum0=\countA\else\makelink\fi - \ifx\first.\let\next=\done\else - \let\next=\maketoks - \addtokens{\toksB}{\the\toksD} - \ifx\first,\addtokens{\toksB}{\space}\fi - \fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \next} - \def\makelink{\addtokens{\toksB}% - {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} - \def\pdflink#1{% - \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} - \setcolor{\linkcolor}#1\endlink} - \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} -\else - % non-pdf mode - \let\pdfmkdest = \gobble - \let\pdfurl = \gobble - \let\endlink = \relax - \let\setcolor = \gobble - \let\pdfsetcolor = \gobble - \let\pdfmakeoutlines = \relax -\fi % \ifx\pdfoutput - - -\message{fonts,} - -% Change the current font style to #1, remembering it in \curfontstyle. -% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in -% italics, not bold italics. -% -\def\setfontstyle#1{% - \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. - \csname ten#1\endcsname % change the current font -} - -% Select #1 fonts with the current style. -% -\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} - -\def\rm{\fam=0 \setfontstyle{rm}} -\def\it{\fam=\itfam \setfontstyle{it}} -\def\sl{\fam=\slfam \setfontstyle{sl}} -\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} -\def\tt{\fam=\ttfam \setfontstyle{tt}} - -% Unfortunately, we have to override this for titles and the like, since -% in those cases "rm" is bold. Sigh. -\def\rmisbold{\rm\def\curfontstyle{bf}} - -% Texinfo sort of supports the sans serif font style, which plain TeX does not. -% So we set up a \sf. -\newfam\sffam -\def\sf{\fam=\sffam \setfontstyle{sf}} -\let\li = \sf % Sometimes we call it \li, not \sf. - -% We don't need math for this font style. -\def\ttsl{\setfontstyle{ttsl}} - - -% Set the baselineskip to #1, and the lineskip and strut size -% correspondingly. There is no deep meaning behind these magic numbers -% used as factors; they just match (closely enough) what Knuth defined. -% -\def\lineskipfactor{.08333} -\def\strutheightpercent{.70833} -\def\strutdepthpercent {.29167} -% -% can get a sort of poor man's double spacing by redefining this. -\def\baselinefactor{1} -% -\newdimen\textleading -\def\setleading#1{% - \dimen0 = #1\relax - \normalbaselineskip = \baselinefactor\dimen0 - \normallineskip = \lineskipfactor\normalbaselineskip - \normalbaselines - \setbox\strutbox =\hbox{% - \vrule width0pt height\strutheightpercent\baselineskip - depth \strutdepthpercent \baselineskip - }% -} - -% PDF CMaps. See also LaTeX's t1.cmap. -% -% do nothing with this by default. -\expandafter\let\csname cmapOT1\endcsname\gobble -\expandafter\let\csname cmapOT1IT\endcsname\gobble -\expandafter\let\csname cmapOT1TT\endcsname\gobble - -% if we are producing pdf, and we have \pdffontattr, then define cmaps. -% (\pdffontattr was introduced many years ago, but people still run -% older pdftex's; it's easy to conditionalize, so we do.) -\ifpdf \ifx\pdffontattr\thisisundefined \else - \begingroup - \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. - \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-OT1-0) -%%Title: (TeX-OT1-0 TeX OT1 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (OT1) -/Supplement 0 ->> def -/CMapName /TeX-OT1-0 def -/CMapType 2 def -1 begincodespacerange -<00> <7F> -endcodespacerange -8 beginbfrange -<00> <01> <0393> -<09> <0A> <03A8> -<23> <26> <0023> -<28> <3B> <0028> -<3F> <5B> <003F> -<5D> <5E> <005D> -<61> <7A> <0061> -<7B> <7C> <2013> -endbfrange -40 beginbfchar -<02> <0398> -<03> <039B> -<04> <039E> -<05> <03A0> -<06> <03A3> -<07> <03D2> -<08> <03A6> -<0B> <00660066> -<0C> <00660069> -<0D> <0066006C> -<0E> <006600660069> -<0F> <00660066006C> -<10> <0131> -<11> <0237> -<12> <0060> -<13> <00B4> -<14> <02C7> -<15> <02D8> -<16> <00AF> -<17> <02DA> -<18> <00B8> -<19> <00DF> -<1A> <00E6> -<1B> <0153> -<1C> <00F8> -<1D> <00C6> -<1E> <0152> -<1F> <00D8> -<21> <0021> -<22> <201D> -<27> <2019> -<3C> <00A1> -<3D> <003D> -<3E> <00BF> -<5C> <201C> -<5F> <02D9> -<60> <2018> -<7D> <02DD> -<7E> <007E> -<7F> <00A8> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - }\endgroup - \expandafter\edef\csname cmapOT1\endcsname#1{% - \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% - }% -% -% \cmapOT1IT - \begingroup - \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. - \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-OT1IT-0) -%%Title: (TeX-OT1IT-0 TeX OT1IT 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (OT1IT) -/Supplement 0 ->> def -/CMapName /TeX-OT1IT-0 def -/CMapType 2 def -1 begincodespacerange -<00> <7F> -endcodespacerange -8 beginbfrange -<00> <01> <0393> -<09> <0A> <03A8> -<25> <26> <0025> -<28> <3B> <0028> -<3F> <5B> <003F> -<5D> <5E> <005D> -<61> <7A> <0061> -<7B> <7C> <2013> -endbfrange -42 beginbfchar -<02> <0398> -<03> <039B> -<04> <039E> -<05> <03A0> -<06> <03A3> -<07> <03D2> -<08> <03A6> -<0B> <00660066> -<0C> <00660069> -<0D> <0066006C> -<0E> <006600660069> -<0F> <00660066006C> -<10> <0131> -<11> <0237> -<12> <0060> -<13> <00B4> -<14> <02C7> -<15> <02D8> -<16> <00AF> -<17> <02DA> -<18> <00B8> -<19> <00DF> -<1A> <00E6> -<1B> <0153> -<1C> <00F8> -<1D> <00C6> -<1E> <0152> -<1F> <00D8> -<21> <0021> -<22> <201D> -<23> <0023> -<24> <00A3> -<27> <2019> -<3C> <00A1> -<3D> <003D> -<3E> <00BF> -<5C> <201C> -<5F> <02D9> -<60> <2018> -<7D> <02DD> -<7E> <007E> -<7F> <00A8> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - }\endgroup - \expandafter\edef\csname cmapOT1IT\endcsname#1{% - \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% - }% -% -% \cmapOT1TT - \begingroup - \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. - \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-OT1TT-0) -%%Title: (TeX-OT1TT-0 TeX OT1TT 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (OT1TT) -/Supplement 0 ->> def -/CMapName /TeX-OT1TT-0 def -/CMapType 2 def -1 begincodespacerange -<00> <7F> -endcodespacerange -5 beginbfrange -<00> <01> <0393> -<09> <0A> <03A8> -<21> <26> <0021> -<28> <5F> <0028> -<61> <7E> <0061> -endbfrange -32 beginbfchar -<02> <0398> -<03> <039B> -<04> <039E> -<05> <03A0> -<06> <03A3> -<07> <03D2> -<08> <03A6> -<0B> <2191> -<0C> <2193> -<0D> <0027> -<0E> <00A1> -<0F> <00BF> -<10> <0131> -<11> <0237> -<12> <0060> -<13> <00B4> -<14> <02C7> -<15> <02D8> -<16> <00AF> -<17> <02DA> -<18> <00B8> -<19> <00DF> -<1A> <00E6> -<1B> <0153> -<1C> <00F8> -<1D> <00C6> -<1E> <0152> -<1F> <00D8> -<20> <2423> -<27> <2019> -<60> <2018> -<7F> <00A8> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - }\endgroup - \expandafter\edef\csname cmapOT1TT\endcsname#1{% - \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% - }% -\fi\fi - - -% Set the font macro #1 to the font named \fontprefix#2. -% #3 is the font's design size, #4 is a scale factor, #5 is the CMap -% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). -% Example: -% #1 = \textrm -% #2 = \rmshape -% #3 = 10 -% #4 = \mainmagstep -% #5 = OT1 -% -\def\setfont#1#2#3#4#5{% - \font#1=\fontprefix#2#3 scaled #4 - \csname cmap#5\endcsname#1% -} -% This is what gets called when #5 of \setfont is empty. -\let\cmap\gobble -% -% (end of cmaps) - -% Use cm as the default font prefix. -% To specify the font prefix, you must define \fontprefix -% before you read in texinfo.tex. -\ifx\fontprefix\thisisundefined -\def\fontprefix{cm} -\fi -% Support font families that don't use the same naming scheme as CM. -\def\rmshape{r} -\def\rmbshape{bx} % where the normal face is bold -\def\bfshape{b} -\def\bxshape{bx} -\def\ttshape{tt} -\def\ttbshape{tt} -\def\ttslshape{sltt} -\def\itshape{ti} -\def\itbshape{bxti} -\def\slshape{sl} -\def\slbshape{bxsl} -\def\sfshape{ss} -\def\sfbshape{ss} -\def\scshape{csc} -\def\scbshape{csc} - -% Definitions for a main text size of 11pt. (The default in Texinfo.) -% -\def\definetextfontsizexi{% -% Text fonts (11.2pt, magstep1). -\def\textnominalsize{11pt} -\edef\mainmagstep{\magstephalf} -\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} -\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} -\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} -\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} -\setfont\textsl\slshape{10}{\mainmagstep}{OT1} -\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} -\setfont\textsc\scshape{10}{\mainmagstep}{OT1} -\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep -\def\textecsize{1095} - -% A few fonts for @defun names and args. -\setfont\defbf\bfshape{10}{\magstep1}{OT1} -\setfont\deftt\ttshape{10}{\magstep1}{OT1TT} -\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} - -% Fonts for indices, footnotes, small examples (9pt). -\def\smallnominalsize{9pt} -\setfont\smallrm\rmshape{9}{1000}{OT1} -\setfont\smalltt\ttshape{9}{1000}{OT1TT} -\setfont\smallbf\bfshape{10}{900}{OT1} -\setfont\smallit\itshape{9}{1000}{OT1IT} -\setfont\smallsl\slshape{9}{1000}{OT1} -\setfont\smallsf\sfshape{9}{1000}{OT1} -\setfont\smallsc\scshape{10}{900}{OT1} -\setfont\smallttsl\ttslshape{10}{900}{OT1TT} -\font\smalli=cmmi9 -\font\smallsy=cmsy9 -\def\smallecsize{0900} - -% Fonts for small examples (8pt). -\def\smallernominalsize{8pt} -\setfont\smallerrm\rmshape{8}{1000}{OT1} -\setfont\smallertt\ttshape{8}{1000}{OT1TT} -\setfont\smallerbf\bfshape{10}{800}{OT1} -\setfont\smallerit\itshape{8}{1000}{OT1IT} -\setfont\smallersl\slshape{8}{1000}{OT1} -\setfont\smallersf\sfshape{8}{1000}{OT1} -\setfont\smallersc\scshape{10}{800}{OT1} -\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} -\font\smalleri=cmmi8 -\font\smallersy=cmsy8 -\def\smallerecsize{0800} - -% Fonts for title page (20.4pt): -\def\titlenominalsize{20pt} -\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} -\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} -\setfont\titlesl\slbshape{10}{\magstep4}{OT1} -\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} -\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} -\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} -\let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4}{OT1} -\font\titlei=cmmi12 scaled \magstep3 -\font\titlesy=cmsy10 scaled \magstep4 -\def\titleecsize{2074} - -% Chapter (and unnumbered) fonts (17.28pt). -\def\chapnominalsize{17pt} -\setfont\chaprm\rmbshape{12}{\magstep2}{OT1} -\setfont\chapit\itbshape{10}{\magstep3}{OT1IT} -\setfont\chapsl\slbshape{10}{\magstep3}{OT1} -\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} -\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} -\setfont\chapsf\sfbshape{17}{1000}{OT1} -\let\chapbf=\chaprm -\setfont\chapsc\scbshape{10}{\magstep3}{OT1} -\font\chapi=cmmi12 scaled \magstep2 -\font\chapsy=cmsy10 scaled \magstep3 -\def\chapecsize{1728} - -% Section fonts (14.4pt). -\def\secnominalsize{14pt} -\setfont\secrm\rmbshape{12}{\magstep1}{OT1} -\setfont\secit\itbshape{10}{\magstep2}{OT1IT} -\setfont\secsl\slbshape{10}{\magstep2}{OT1} -\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} -\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} -\setfont\secsf\sfbshape{12}{\magstep1}{OT1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep2}{OT1} -\font\seci=cmmi12 scaled \magstep1 -\font\secsy=cmsy10 scaled \magstep2 -\def\sececsize{1440} - -% Subsection fonts (13.15pt). -\def\ssecnominalsize{13pt} -\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} -\setfont\ssecit\itbshape{10}{1315}{OT1IT} -\setfont\ssecsl\slbshape{10}{1315}{OT1} -\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} -\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} -\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{1315}{OT1} -\font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled 1315 -\def\ssececsize{1200} - -% Reduced fonts for @acro in text (10pt). -\def\reducednominalsize{10pt} -\setfont\reducedrm\rmshape{10}{1000}{OT1} -\setfont\reducedtt\ttshape{10}{1000}{OT1TT} -\setfont\reducedbf\bfshape{10}{1000}{OT1} -\setfont\reducedit\itshape{10}{1000}{OT1IT} -\setfont\reducedsl\slshape{10}{1000}{OT1} -\setfont\reducedsf\sfshape{10}{1000}{OT1} -\setfont\reducedsc\scshape{10}{1000}{OT1} -\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} -\font\reducedi=cmmi10 -\font\reducedsy=cmsy10 -\def\reducedecsize{1000} - -\textleading = 13.2pt % line spacing for 11pt CM -\textfonts % reset the current fonts -\rm -} % end of 11pt text font size definitions, \definetextfontsizexi - - -% Definitions to make the main text be 10pt Computer Modern, with -% section, chapter, etc., sizes following suit. This is for the GNU -% Press printing of the Emacs 22 manual. Maybe other manuals in the -% future. Used with @smallbook, which sets the leading to 12pt. -% -\def\definetextfontsizex{% -% Text fonts (10pt). -\def\textnominalsize{10pt} -\edef\mainmagstep{1000} -\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} -\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} -\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} -\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} -\setfont\textsl\slshape{10}{\mainmagstep}{OT1} -\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} -\setfont\textsc\scshape{10}{\mainmagstep}{OT1} -\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep -\def\textecsize{1000} - -% A few fonts for @defun names and args. -\setfont\defbf\bfshape{10}{\magstephalf}{OT1} -\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} -\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} - -% Fonts for indices, footnotes, small examples (9pt). -\def\smallnominalsize{9pt} -\setfont\smallrm\rmshape{9}{1000}{OT1} -\setfont\smalltt\ttshape{9}{1000}{OT1TT} -\setfont\smallbf\bfshape{10}{900}{OT1} -\setfont\smallit\itshape{9}{1000}{OT1IT} -\setfont\smallsl\slshape{9}{1000}{OT1} -\setfont\smallsf\sfshape{9}{1000}{OT1} -\setfont\smallsc\scshape{10}{900}{OT1} -\setfont\smallttsl\ttslshape{10}{900}{OT1TT} -\font\smalli=cmmi9 -\font\smallsy=cmsy9 -\def\smallecsize{0900} - -% Fonts for small examples (8pt). -\def\smallernominalsize{8pt} -\setfont\smallerrm\rmshape{8}{1000}{OT1} -\setfont\smallertt\ttshape{8}{1000}{OT1TT} -\setfont\smallerbf\bfshape{10}{800}{OT1} -\setfont\smallerit\itshape{8}{1000}{OT1IT} -\setfont\smallersl\slshape{8}{1000}{OT1} -\setfont\smallersf\sfshape{8}{1000}{OT1} -\setfont\smallersc\scshape{10}{800}{OT1} -\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} -\font\smalleri=cmmi8 -\font\smallersy=cmsy8 -\def\smallerecsize{0800} - -% Fonts for title page (20.4pt): -\def\titlenominalsize{20pt} -\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} -\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} -\setfont\titlesl\slbshape{10}{\magstep4}{OT1} -\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} -\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} -\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} -\let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4}{OT1} -\font\titlei=cmmi12 scaled \magstep3 -\font\titlesy=cmsy10 scaled \magstep4 -\def\titleecsize{2074} - -% Chapter fonts (14.4pt). -\def\chapnominalsize{14pt} -\setfont\chaprm\rmbshape{12}{\magstep1}{OT1} -\setfont\chapit\itbshape{10}{\magstep2}{OT1IT} -\setfont\chapsl\slbshape{10}{\magstep2}{OT1} -\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} -\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} -\setfont\chapsf\sfbshape{12}{\magstep1}{OT1} -\let\chapbf\chaprm -\setfont\chapsc\scbshape{10}{\magstep2}{OT1} -\font\chapi=cmmi12 scaled \magstep1 -\font\chapsy=cmsy10 scaled \magstep2 -\def\chapecsize{1440} - -% Section fonts (12pt). -\def\secnominalsize{12pt} -\setfont\secrm\rmbshape{12}{1000}{OT1} -\setfont\secit\itbshape{10}{\magstep1}{OT1IT} -\setfont\secsl\slbshape{10}{\magstep1}{OT1} -\setfont\sectt\ttbshape{12}{1000}{OT1TT} -\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} -\setfont\secsf\sfbshape{12}{1000}{OT1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep1}{OT1} -\font\seci=cmmi12 -\font\secsy=cmsy10 scaled \magstep1 -\def\sececsize{1200} - -% Subsection fonts (10pt). -\def\ssecnominalsize{10pt} -\setfont\ssecrm\rmbshape{10}{1000}{OT1} -\setfont\ssecit\itbshape{10}{1000}{OT1IT} -\setfont\ssecsl\slbshape{10}{1000}{OT1} -\setfont\ssectt\ttbshape{10}{1000}{OT1TT} -\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} -\setfont\ssecsf\sfbshape{10}{1000}{OT1} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{1000}{OT1} -\font\sseci=cmmi10 -\font\ssecsy=cmsy10 -\def\ssececsize{1000} - -% Reduced fonts for @acro in text (9pt). -\def\reducednominalsize{9pt} -\setfont\reducedrm\rmshape{9}{1000}{OT1} -\setfont\reducedtt\ttshape{9}{1000}{OT1TT} -\setfont\reducedbf\bfshape{10}{900}{OT1} -\setfont\reducedit\itshape{9}{1000}{OT1IT} -\setfont\reducedsl\slshape{9}{1000}{OT1} -\setfont\reducedsf\sfshape{9}{1000}{OT1} -\setfont\reducedsc\scshape{10}{900}{OT1} -\setfont\reducedttsl\ttslshape{10}{900}{OT1TT} -\font\reducedi=cmmi9 -\font\reducedsy=cmsy9 -\def\reducedecsize{0900} - -\divide\parskip by 2 % reduce space between paragraphs -\textleading = 12pt % line spacing for 10pt CM -\textfonts % reset the current fonts -\rm -} % end of 10pt text font size definitions, \definetextfontsizex - - -% We provide the user-level command -% @fonttextsize 10 -% (or 11) to redefine the text font size. pt is assumed. -% -\def\xiword{11} -\def\xword{10} -\def\xwordpt{10pt} -% -\parseargdef\fonttextsize{% - \def\textsizearg{#1}% - %\wlog{doing @fonttextsize \textsizearg}% - % - % Set \globaldefs so that documents can use this inside @tex, since - % makeinfo 4.8 does not support it, but we need it nonetheless. - % - \begingroup \globaldefs=1 - \ifx\textsizearg\xword \definetextfontsizex - \else \ifx\textsizearg\xiword \definetextfontsizexi - \else - \errhelp=\EMsimple - \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} - \fi\fi - \endgroup -} - - -% In order for the font changes to affect most math symbols and letters, -% we have to define the \textfont of the standard families. Since -% texinfo doesn't allow for producing subscripts and superscripts except -% in the main text, we don't bother to reset \scriptfont and -% \scriptscriptfont (which would also require loading a lot more fonts). -% -\def\resetmathfonts{% - \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy - \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf - \textfont\ttfam=\tentt \textfont\sffam=\tensf -} - -% The font-changing commands redefine the meanings of \tenSTYLE, instead -% of just \STYLE. We do this because \STYLE needs to also set the -% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire -% \tenSTYLE to set the current font. -% -% Each font-changing command also sets the names \lsize (one size lower) -% and \lllsize (three sizes lower). These relative commands are used in -% the LaTeX logo and acronyms. -% -% This all needs generalizing, badly. -% -\def\textfonts{% - \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl - \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy - \let\tenttsl=\textttsl - \def\curfontsize{text}% - \def\lsize{reduced}\def\lllsize{smaller}% - \resetmathfonts \setleading{\textleading}} -\def\titlefonts{% - \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl - \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc - \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy - \let\tenttsl=\titlettsl - \def\curfontsize{title}% - \def\lsize{chap}\def\lllsize{subsec}% - \resetmathfonts \setleading{27pt}} -\def\titlefont#1{{\titlefonts\rmisbold #1}} -\def\chapfonts{% - \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl - \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy - \let\tenttsl=\chapttsl - \def\curfontsize{chap}% - \def\lsize{sec}\def\lllsize{text}% - \resetmathfonts \setleading{19pt}} -\def\secfonts{% - \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl - \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy - \let\tenttsl=\secttsl - \def\curfontsize{sec}% - \def\lsize{subsec}\def\lllsize{reduced}% - \resetmathfonts \setleading{16pt}} -\def\subsecfonts{% - \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl - \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy - \let\tenttsl=\ssecttsl - \def\curfontsize{ssec}% - \def\lsize{text}\def\lllsize{small}% - \resetmathfonts \setleading{15pt}} -\let\subsubsecfonts = \subsecfonts -\def\reducedfonts{% - \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl - \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc - \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy - \let\tenttsl=\reducedttsl - \def\curfontsize{reduced}% - \def\lsize{small}\def\lllsize{smaller}% - \resetmathfonts \setleading{10.5pt}} -\def\smallfonts{% - \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl - \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc - \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy - \let\tenttsl=\smallttsl - \def\curfontsize{small}% - \def\lsize{smaller}\def\lllsize{smaller}% - \resetmathfonts \setleading{10.5pt}} -\def\smallerfonts{% - \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl - \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc - \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy - \let\tenttsl=\smallerttsl - \def\curfontsize{smaller}% - \def\lsize{smaller}\def\lllsize{smaller}% - \resetmathfonts \setleading{9.5pt}} - -% Fonts for short table of contents. -\setfont\shortcontrm\rmshape{12}{1000}{OT1} -\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 -\setfont\shortcontsl\slshape{12}{1000}{OT1} -\setfont\shortconttt\ttshape{12}{1000}{OT1TT} - -% Define these just so they can be easily changed for other fonts. -\def\angleleft{$\langle$} -\def\angleright{$\rangle$} - -% Set the fonts to use with the @small... environments. -\let\smallexamplefonts = \smallfonts - -% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample -% can fit this many characters: -% 8.5x11=86 smallbook=72 a4=90 a5=69 -% If we use \scriptfonts (8pt), then we can fit this many characters: -% 8.5x11=90+ smallbook=80 a4=90+ a5=77 -% For me, subjectively, the few extra characters that fit aren't worth -% the additional smallness of 8pt. So I'm making the default 9pt. -% -% By the way, for comparison, here's what fits with @example (10pt): -% 8.5x11=71 smallbook=60 a4=75 a5=58 -% --karl, 24jan03. - -% Set up the default fonts, so we can use them for creating boxes. -% -\definetextfontsizexi - - -\message{markup,} - -% Check if we are currently using a typewriter font. Since all the -% Computer Modern typewriter fonts have zero interword stretch (and -% shrink), and it is reasonable to expect all typewriter fonts to have -% this property, we can check that font parameter. -% -\def\ifmonospace{\ifdim\fontdimen3\font=0pt } - -% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will -% define and register \INITMACRO to be called on markup style changes. -% \INITMACRO can check \currentmarkupstyle for the innermost -% style and the set of \ifmarkupSTYLE switches for all styles -% currently in effect. -\newif\ifmarkupvar -\newif\ifmarkupsamp -\newif\ifmarkupkey -%\newif\ifmarkupfile % @file == @samp. -%\newif\ifmarkupoption % @option == @samp. -\newif\ifmarkupcode -\newif\ifmarkupkbd -%\newif\ifmarkupenv % @env == @code. -%\newif\ifmarkupcommand % @command == @code. -\newif\ifmarkuptex % @tex (and part of @math, for now). -\newif\ifmarkupexample -\newif\ifmarkupverb -\newif\ifmarkupverbatim - -\let\currentmarkupstyle\empty - -\def\setupmarkupstyle#1{% - \csname markup#1true\endcsname - \def\currentmarkupstyle{#1}% - \markupstylesetup -} - -\let\markupstylesetup\empty - -\def\defmarkupstylesetup#1{% - \expandafter\def\expandafter\markupstylesetup - \expandafter{\markupstylesetup #1}% - \def#1% -} - -% Markup style setup for left and right quotes. -\defmarkupstylesetup\markupsetuplq{% - \expandafter\let\expandafter \temp - \csname markupsetuplq\currentmarkupstyle\endcsname - \ifx\temp\relax \markupsetuplqdefault \else \temp \fi -} - -\defmarkupstylesetup\markupsetuprq{% - \expandafter\let\expandafter \temp - \csname markupsetuprq\currentmarkupstyle\endcsname - \ifx\temp\relax \markupsetuprqdefault \else \temp \fi -} - -{ -\catcode`\'=\active -\catcode`\`=\active - -\gdef\markupsetuplqdefault{\let`\lq} -\gdef\markupsetuprqdefault{\let'\rq} - -\gdef\markupsetcodequoteleft{\let`\codequoteleft} -\gdef\markupsetcodequoteright{\let'\codequoteright} -} - -\let\markupsetuplqcode \markupsetcodequoteleft -\let\markupsetuprqcode \markupsetcodequoteright -% -\let\markupsetuplqexample \markupsetcodequoteleft -\let\markupsetuprqexample \markupsetcodequoteright -% -\let\markupsetuplqkbd \markupsetcodequoteleft -\let\markupsetuprqkbd \markupsetcodequoteright -% -\let\markupsetuplqsamp \markupsetcodequoteleft -\let\markupsetuprqsamp \markupsetcodequoteright -% -\let\markupsetuplqverb \markupsetcodequoteleft -\let\markupsetuprqverb \markupsetcodequoteright -% -\let\markupsetuplqverbatim \markupsetcodequoteleft -\let\markupsetuprqverbatim \markupsetcodequoteright - -% Allow an option to not use regular directed right quote/apostrophe -% (char 0x27), but instead the undirected quote from cmtt (char 0x0d). -% The undirected quote is ugly, so don't make it the default, but it -% works for pasting with more pdf viewers (at least evince), the -% lilypond developers report. xpdf does work with the regular 0x27. -% -\def\codequoteright{% - \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax - \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax - '% - \else \char'15 \fi - \else \char'15 \fi -} -% -% and a similar option for the left quote char vs. a grave accent. -% Modern fonts display ASCII 0x60 as a grave accent, so some people like -% the code environments to do likewise. -% -\def\codequoteleft{% - \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax - \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax - % [Knuth] pp. 380,381,391 - % \relax disables Spanish ligatures ?` and !` of \tt font. - \relax`% - \else \char'22 \fi - \else \char'22 \fi -} - -% Commands to set the quote options. -% -\parseargdef\codequoteundirected{% - \def\temp{#1}% - \ifx\temp\onword - \expandafter\let\csname SETtxicodequoteundirected\endcsname - = t% - \else\ifx\temp\offword - \expandafter\let\csname SETtxicodequoteundirected\endcsname - = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% - \fi\fi -} -% -\parseargdef\codequotebacktick{% - \def\temp{#1}% - \ifx\temp\onword - \expandafter\let\csname SETtxicodequotebacktick\endcsname - = t% - \else\ifx\temp\offword - \expandafter\let\csname SETtxicodequotebacktick\endcsname - = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% - \fi\fi -} - -% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. -\def\noligaturesquoteleft{\relax\lq} - -% Count depth in font-changes, for error checks -\newcount\fontdepth \fontdepth=0 - -% Font commands. - -% #1 is the font command (\sl or \it), #2 is the text to slant. -% If we are in a monospaced environment, however, 1) always use \ttsl, -% and 2) do not add an italic correction. -\def\dosmartslant#1#2{% - \ifusingtt - {{\ttsl #2}\let\next=\relax}% - {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% - \next -} -\def\smartslanted{\dosmartslant\sl} -\def\smartitalic{\dosmartslant\it} - -% Output an italic correction unless \next (presumed to be the following -% character) is such as not to need one. -\def\smartitaliccorrection{% - \ifx\next,% - \else\ifx\next-% - \else\ifx\next.% - \else\ptexslash - \fi\fi\fi - \aftersmartic -} - -% Unconditional use \ttsl, and no ic. @var is set to this for defuns. -\def\ttslanted#1{{\ttsl #1}} - -% @cite is like \smartslanted except unconditionally use \sl. We never want -% ttsl for book titles, do we? -\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} - -\def\aftersmartic{} -\def\var#1{% - \let\saveaftersmartic = \aftersmartic - \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% - \smartslanted{#1}% -} - -\let\i=\smartitalic -\let\slanted=\smartslanted -\let\dfn=\smartslanted -\let\emph=\smartitalic - -% Explicit font changes: @r, @sc, undocumented @ii. -\def\r#1{{\rm #1}} % roman font -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font - -% @b, explicit bold. Also @strong. -\def\b#1{{\bf #1}} -\let\strong=\b - -% @sansserif, explicit sans. -\def\sansserif#1{{\sf #1}} - -% We can't just use \exhyphenpenalty, because that only has effect at -% the end of a paragraph. Restore normal hyphenation at the end of the -% group within which \nohyphenation is presumably called. -% -\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} -\def\restorehyphenation{\hyphenchar\font = `- } - -% Set sfcode to normal for the chars that usually have another value. -% Can't use plain's \frenchspacing because it uses the `\x notation, and -% sometimes \x has an active definition that messes things up. -% -\catcode`@=11 - \def\plainfrenchspacing{% - \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m - \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m - \def\endofsentencespacefactor{1000}% for @. and friends - } - \def\plainnonfrenchspacing{% - \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 - \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 - \def\endofsentencespacefactor{3000}% for @. and friends - } -\catcode`@=\other -\def\endofsentencespacefactor{3000}% default - -% @t, explicit typewriter. -\def\t#1{% - {\tt \rawbackslash \plainfrenchspacing #1}% - \null -} - -% @samp. -\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} - -% @indicateurl is \samp, that is, with quotes. -\let\indicateurl=\samp - -% @code (and similar) prints in typewriter, but with spaces the same -% size as normal in the surrounding text, without hyphenation, etc. -% This is a subroutine for that. -\def\tclose#1{% - {% - % Change normal interword space to be same as for the current font. - \spaceskip = \fontdimen2\font - % - % Switch to typewriter. - \tt - % - % But `\ ' produces the large typewriter interword space. - \def\ {{\spaceskip = 0pt{} }}% - % - % Turn off hyphenation. - \nohyphenation - % - \rawbackslash - \plainfrenchspacing - #1% - }% - \null % reset spacefactor to 1000 -} - -% We *must* turn on hyphenation at `-' and `_' in @code. -% Otherwise, it is too hard to avoid overfull hboxes -% in the Emacs manual, the Library manual, etc. -% -% Unfortunately, TeX uses one parameter (\hyphenchar) to control -% both hyphenation at - and hyphenation within words. -% We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate at a dash. -% -- rms. -{ - \catcode`\-=\active \catcode`\_=\active - \catcode`\'=\active \catcode`\`=\active - \global\let'=\rq \global\let`=\lq % default definitions - % - \global\def\code{\begingroup - \setupmarkupstyle{code}% - % The following should really be moved into \setupmarkupstyle handlers. - \catcode\dashChar=\active \catcode\underChar=\active - \ifallowcodebreaks - \let-\codedash - \let_\codeunder - \else - \let-\normaldash - \let_\realunder - \fi - \codex - } -} - -\def\codex #1{\tclose{#1}\endgroup} - -\def\normaldash{-} -\def\codedash{-\discretionary{}{}{}} -\def\codeunder{% - % this is all so @math{@code{var_name}+1} can work. In math mode, _ - % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) - % will therefore expand the active definition of _, which is us - % (inside @code that is), therefore an endless loop. - \ifusingtt{\ifmmode - \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. - \else\normalunderscore \fi - \discretionary{}{}{}}% - {\_}% -} - -% An additional complication: the above will allow breaks after, e.g., -% each of the four underscores in __typeof__. This is bad. -% @allowcodebreaks provides a document-level way to turn breaking at - -% and _ on and off. -% -\newif\ifallowcodebreaks \allowcodebreakstrue - -\def\keywordtrue{true} -\def\keywordfalse{false} - -\parseargdef\allowcodebreaks{% - \def\txiarg{#1}% - \ifx\txiarg\keywordtrue - \allowcodebreakstrue - \else\ifx\txiarg\keywordfalse - \allowcodebreaksfalse - \else - \errhelp = \EMsimple - \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% - \fi\fi -} - -% For @command, @env, @file, @option quotes seem unnecessary, -% so use \code rather than \samp. -\let\command=\code -\let\env=\code -\let\file=\code -\let\option=\code - -% @uref (abbreviation for `urlref') takes an optional (comma-separated) -% second argument specifying the text to display and an optional third -% arg as text to display instead of (rather than in addition to) the url -% itself. First (mandatory) arg is the url. -% (This \urefnobreak definition isn't used now, leaving it for a while -% for comparison.) -\def\urefnobreak#1{\dourefnobreak #1,,,\finish} -\def\dourefnobreak#1,#2,#3,#4\finish{\begingroup - \unsepspaces - \pdfurl{#1}% - \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt - \unhbox0 % third arg given, show only that - \else - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it - \else - \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url - \fi - \else - \code{#1}% only url given, so show it - \fi - \fi - \endlink -\endgroup} - -% This \urefbreak definition is the active one. -\def\urefbreak{\begingroup \urefcatcodes \dourefbreak} -\let\uref=\urefbreak -\def\dourefbreak#1{\urefbreakfinish #1,,,\finish} -\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example - \unsepspaces - \pdfurl{#1}% - \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt - \unhbox0 % third arg given, show only that - \else - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it - \else - \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url - \fi - \else - \urefcode{#1}% only url given, so show it - \fi - \fi - \endlink -\endgroup} - -% Allow line breaks around only a few characters (only). -\def\urefcatcodes{% - \catcode\ampChar=\active \catcode\dotChar=\active - \catcode\hashChar=\active \catcode\questChar=\active - \catcode\slashChar=\active -} -{ - \urefcatcodes - % - \global\def\urefcode{\begingroup - \setupmarkupstyle{code}% - \urefcatcodes - \let&\urefcodeamp - \let.\urefcodedot - \let#\urefcodehash - \let?\urefcodequest - \let/\urefcodeslash - \codex - } - % - % By default, they are just regular characters. - \global\def&{\normalamp} - \global\def.{\normaldot} - \global\def#{\normalhash} - \global\def?{\normalquest} - \global\def/{\normalslash} -} - -% we put a little stretch before and after the breakable chars, to help -% line breaking of long url's. The unequal skips make look better in -% cmtt at least, especially for dots. -\def\urefprestretch{\urefprebreak \hskip0pt plus.13em } -\def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } -% -\def\urefcodeamp{\urefprestretch \&\urefpoststretch} -\def\urefcodedot{\urefprestretch .\urefpoststretch} -\def\urefcodehash{\urefprestretch \#\urefpoststretch} -\def\urefcodequest{\urefprestretch ?\urefpoststretch} -\def\urefcodeslash{\futurelet\next\urefcodeslashfinish} -{ - \catcode`\/=\active - \global\def\urefcodeslashfinish{% - \urefprestretch \slashChar - % Allow line break only after the final / in a sequence of - % slashes, to avoid line break between the slashes in http://. - \ifx\next/\else \urefpoststretch \fi - } -} - -% One more complication: by default we'll break after the special -% characters, but some people like to break before the special chars, so -% allow that. Also allow no breaking at all, for manual control. -% -\parseargdef\urefbreakstyle{% - \def\txiarg{#1}% - \ifx\txiarg\wordnone - \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} - \else\ifx\txiarg\wordbefore - \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} - \else\ifx\txiarg\wordafter - \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} - \else - \errhelp = \EMsimple - \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% - \fi\fi\fi -} -\def\wordafter{after} -\def\wordbefore{before} -\def\wordnone{none} - -\urefbreakstyle after - -% @url synonym for @uref, since that's how everyone uses it. -% -\let\url=\uref - -% rms does not like angle brackets --karl, 17may97. -% So now @email is just like @uref, unless we are pdf. -% -%\def\email#1{\angleleft{\tt #1}\angleright} -\ifpdf - \def\email#1{\doemail#1,,\finish} - \def\doemail#1,#2,#3\finish{\begingroup - \unsepspaces - \pdfurl{mailto:#1}% - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi - \endlink - \endgroup} -\else - \let\email=\uref -\fi - -% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), -% `example' (@kbd uses ttsl only inside of @example and friends), -% or `code' (@kbd uses normal tty font always). -\parseargdef\kbdinputstyle{% - \def\txiarg{#1}% - \ifx\txiarg\worddistinct - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% - \else\ifx\txiarg\wordexample - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% - \else\ifx\txiarg\wordcode - \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% - \else - \errhelp = \EMsimple - \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% - \fi\fi\fi -} -\def\worddistinct{distinct} -\def\wordexample{example} -\def\wordcode{code} - -% Default is `distinct'. -\kbdinputstyle distinct - -% @kbd is like @code, except that if the argument is just one @key command, -% then @kbd has no effect. -\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} - -\def\xkey{\key} -\def\kbdsub#1#2#3\par{% - \def\one{#1}\def\three{#3}\def\threex{??}% - \ifx\one\xkey\ifx\threex\three \key{#2}% - \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi - \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi -} - -% definition of @key that produces a lozenge. Doesn't adjust to text size. -%\setfont\keyrm\rmshape{8}{1000}{OT1} -%\font\keysy=cmsy9 -%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% -% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% -% \vbox{\hrule\kern-0.4pt -% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% -% \kern-0.4pt\hrule}% -% \kern-.06em\raise0.4pt\hbox{\angleright}}}} - -% definition of @key with no lozenge. If the current font is already -% monospace, don't change it; that way, we respect @kbdinputstyle. But -% if it isn't monospace, then use \tt. -% -\def\key#1{{\setupmarkupstyle{key}% - \nohyphenation - \ifmonospace\else\tt\fi - #1}\null} - -% @clicksequence{File @click{} Open ...} -\def\clicksequence#1{\begingroup #1\endgroup} - -% @clickstyle @arrow (by default) -\parseargdef\clickstyle{\def\click{#1}} -\def\click{\arrow} - -% Typeset a dimension, e.g., `in' or `pt'. The only reason for the -% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. -% -\def\dmn#1{\thinspace #1} - -% @l was never documented to mean ``switch to the Lisp font'', -% and it is not used as such in any manual I can find. We need it for -% Polish suppressed-l. --karl, 22sep96. -%\def\l#1{{\li #1}\null} - -% @acronym for "FBI", "NATO", and the like. -% We print this one point size smaller, since it's intended for -% all-uppercase. -% -\def\acronym#1{\doacronym #1,,\finish} -\def\doacronym#1,#2,#3\finish{% - {\selectfonts\lsize #1}% - \def\temp{#2}% - \ifx\temp\empty \else - \space ({\unsepspaces \ignorespaces \temp \unskip})% - \fi - \null % reset \spacefactor=1000 -} - -% @abbr for "Comput. J." and the like. -% No font change, but don't do end-of-sentence spacing. -% -\def\abbr#1{\doabbr #1,,\finish} -\def\doabbr#1,#2,#3\finish{% - {\plainfrenchspacing #1}% - \def\temp{#2}% - \ifx\temp\empty \else - \space ({\unsepspaces \ignorespaces \temp \unskip})% - \fi - \null % reset \spacefactor=1000 -} - -% @asis just yields its argument. Used with @table, for example. -% -\def\asis#1{#1} - -% @math outputs its argument in math mode. -% -% One complication: _ usually means subscripts, but it could also mean -% an actual _ character, as in @math{@var{some_variable} + 1}. So make -% _ active, and distinguish by seeing if the current family is \slfam, -% which is what @var uses. -{ - \catcode`\_ = \active - \gdef\mathunderscore{% - \catcode`\_=\active - \def_{\ifnum\fam=\slfam \_\else\sb\fi}% - } -} -% Another complication: we want \\ (and @\) to output a math (or tt) \. -% FYI, plain.tex uses \\ as a temporary control sequence (for no -% particular reason), but this is not advertised and we don't care. -% -% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. -\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} -% -\def\math{% - \tex - \mathunderscore - \let\\ = \mathbackslash - \mathactive - % make the texinfo accent commands work in math mode - \let\"=\ddot - \let\'=\acute - \let\==\bar - \let\^=\hat - \let\`=\grave - \let\u=\breve - \let\v=\check - \let\~=\tilde - \let\dotaccent=\dot - $\finishmath -} -\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. - -% Some active characters (such as <) are spaced differently in math. -% We have to reset their definitions in case the @math was an argument -% to a command which sets the catcodes (such as @item or @section). -% -{ - \catcode`^ = \active - \catcode`< = \active - \catcode`> = \active - \catcode`+ = \active - \catcode`' = \active - \gdef\mathactive{% - \let^ = \ptexhat - \let< = \ptexless - \let> = \ptexgtr - \let+ = \ptexplus - \let' = \ptexquoteright - } -} - -% ctrl is no longer a Texinfo command, but leave this definition for fun. -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - -% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. -% Ignore unless FMTNAME == tex; then it is like @iftex and @tex, -% except specified as a normal braced arg, so no newlines to worry about. -% -\def\outfmtnametex{tex} -% -\long\def\inlinefmt#1{\doinlinefmt #1,\finish} -\long\def\doinlinefmt#1,#2,\finish{% - \def\inlinefmtname{#1}% - \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi -} -% For raw, must switch into @tex before parsing the argument, to avoid -% setting catcodes prematurely. Doing it this way means that, for -% example, @inlineraw{html, foo{bar} gets a parse error instead of being -% ignored. But this isn't important because if people want a literal -% *right* brace they would have to use a command anyway, so they may as -% well use a command to get a left brace too. We could re-use the -% delimiter character idea from \verb, but it seems like overkill. -% -\long\def\inlineraw{\tex \doinlineraw} -\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} -\def\doinlinerawtwo#1,#2,\finish{% - \def\inlinerawname{#1}% - \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi - \endgroup % close group opened by \tex. -} - - -\message{glyphs,} -% and logos. - -% @@ prints an @, as does @atchar{}. -\def\@{\char64 } -\let\atchar=\@ - -% @{ @} @lbracechar{} @rbracechar{} all generate brace characters. -% Unless we're in typewriter, use \ecfont because the CM text fonts do -% not have braces, and we don't want to switch into math. -\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} -\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} -\let\{=\mylbrace \let\lbracechar=\{ -\let\}=\myrbrace \let\rbracechar=\} -\begingroup - % Definitions to produce \{ and \} commands for indices, - % and @{ and @} for the aux/toc files. - \catcode`\{ = \other \catcode`\} = \other - \catcode`\[ = 1 \catcode`\] = 2 - \catcode`\! = 0 \catcode`\\ = \other - !gdef!lbracecmd[\{]% - !gdef!rbracecmd[\}]% - !gdef!lbraceatcmd[@{]% - !gdef!rbraceatcmd[@}]% -!endgroup - -% @comma{} to avoid , parsing problems. -\let\comma = , - -% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent -% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. -\let\, = \ptexc -\let\dotaccent = \ptexdot -\def\ringaccent#1{{\accent23 #1}} -\let\tieaccent = \ptext -\let\ubaraccent = \ptexb -\let\udotaccent = \d - -% Other special characters: @questiondown @exclamdown @ordf @ordm -% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. -\def\questiondown{?`} -\def\exclamdown{!`} -\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} -\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} - -% Dotless i and dotless j, used for accents. -\def\imacro{i} -\def\jmacro{j} -\def\dotless#1{% - \def\temp{#1}% - \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi - \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi - \else \errmessage{@dotless can be used only with i or j}% - \fi\fi -} - -% The \TeX{} logo, as in plain, but resetting the spacing so that a -% period following counts as ending a sentence. (Idea found in latex.) -% -\edef\TeX{\TeX \spacefactor=1000 } - -% @LaTeX{} logo. Not quite the same results as the definition in -% latex.ltx, since we use a different font for the raised A; it's most -% convenient for us to use an explicitly smaller font, rather than using -% the \scriptstyle font (since we don't reset \scriptstyle and -% \scriptscriptstyle). -% -\def\LaTeX{% - L\kern-.36em - {\setbox0=\hbox{T}% - \vbox to \ht0{\hbox{% - \ifx\textnominalsize\xwordpt - % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. - % Revert to plain's \scriptsize, which is 7pt. - \count255=\the\fam $\fam\count255 \scriptstyle A$% - \else - % For 11pt, we can use our lllsize. - \selectfonts\lllsize A% - \fi - }% - \vss - }}% - \kern-.15em - \TeX -} - -% Some math mode symbols. -\def\bullet{$\ptexbullet$} -\def\geq{\ifmmode \ge\else $\ge$\fi} -\def\leq{\ifmmode \le\else $\le$\fi} -\def\minus{\ifmmode -\else $-$\fi} - -% @dots{} outputs an ellipsis using the current font. -% We do .5em per period so that it has the same spacing in the cm -% typewriter fonts as three actual period characters; on the other hand, -% in other typewriter fonts three periods are wider than 1.5em. So do -% whichever is larger. -% -\def\dots{% - \leavevmode - \setbox0=\hbox{...}% get width of three periods - \ifdim\wd0 > 1.5em - \dimen0 = \wd0 - \else - \dimen0 = 1.5em - \fi - \hbox to \dimen0{% - \hskip 0pt plus.25fil - .\hskip 0pt plus1fil - .\hskip 0pt plus1fil - .\hskip 0pt plus.5fil - }% -} - -% @enddots{} is an end-of-sentence ellipsis. -% -\def\enddots{% - \dots - \spacefactor=\endofsentencespacefactor -} - -% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. -% -% Since these characters are used in examples, they should be an even number of -% \tt widths. Each \tt character is 1en, so two makes it 1em. -% -\def\point{$\star$} -\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} -\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} -\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} -\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} - -% The @error{} command. -% Adapted from the TeXbook's \boxit. -% -\newbox\errorbox -% -{\tentt \global\dimen0 = 3em}% Width of the box. -\dimen2 = .55pt % Thickness of rules -% The text. (`r' is open on the right, `e' somewhat less so on the left.) -\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} -% -\setbox\errorbox=\hbox to \dimen0{\hfil - \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. - \advance\hsize by -2\dimen2 % Rules. - \vbox{% - \hrule height\dimen2 - \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. - \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. - \kern3pt\vrule width\dimen2}% Space to right. - \hrule height\dimen2} - \hfil} -% -\def\error{\leavevmode\lower.7ex\copy\errorbox} - -% @pounds{} is a sterling sign, which Knuth put in the CM italic font. -% -\def\pounds{{\it\$}} - -% @euro{} comes from a separate font, depending on the current style. -% We use the free feym* fonts from the eurosym package by Henrik -% Theiling, which support regular, slanted, bold and bold slanted (and -% "outlined" (blackboard board, sort of) versions, which we don't need). -% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. -% -% Although only regular is the truly official Euro symbol, we ignore -% that. The Euro is designed to be slightly taller than the regular -% font height. -% -% feymr - regular -% feymo - slanted -% feybr - bold -% feybo - bold slanted -% -% There is no good (free) typewriter version, to my knowledge. -% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. -% Hmm. -% -% Also doesn't work in math. Do we need to do math with euro symbols? -% Hope not. -% -% -\def\euro{{\eurofont e}} -\def\eurofont{% - % We set the font at each command, rather than predefining it in - % \textfonts and the other font-switching commands, so that - % installations which never need the symbol don't have to have the - % font installed. - % - % There is only one designed size (nominal 10pt), so we always scale - % that to the current nominal size. - % - % By the way, simply using "at 1em" works for cmr10 and the like, but - % does not work for cmbx10 and other extended/shrunken fonts. - % - \def\eurosize{\csname\curfontsize nominalsize\endcsname}% - % - \ifx\curfontstyle\bfstylename - % bold: - \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize - \else - % regular: - \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize - \fi - \thiseurofont -} - -% Glyphs from the EC fonts. We don't use \let for the aliases, because -% sometimes we redefine the original macro, and the alias should reflect -% the redefinition. -% -% Use LaTeX names for the Icelandic letters. -\def\DH{{\ecfont \char"D0}} % Eth -\def\dh{{\ecfont \char"F0}} % eth -\def\TH{{\ecfont \char"DE}} % Thorn -\def\th{{\ecfont \char"FE}} % thorn -% -\def\guillemetleft{{\ecfont \char"13}} -\def\guillemotleft{\guillemetleft} -\def\guillemetright{{\ecfont \char"14}} -\def\guillemotright{\guillemetright} -\def\guilsinglleft{{\ecfont \char"0E}} -\def\guilsinglright{{\ecfont \char"0F}} -\def\quotedblbase{{\ecfont \char"12}} -\def\quotesinglbase{{\ecfont \char"0D}} -% -% This positioning is not perfect (see the ogonek LaTeX package), but -% we have the precomposed glyphs for the most common cases. We put the -% tests to use those glyphs in the single \ogonek macro so we have fewer -% dummy definitions to worry about for index entries, etc. -% -% ogonek is also used with other letters in Lithuanian (IOU), but using -% the precomposed glyphs for those is not so easy since they aren't in -% the same EC font. -\def\ogonek#1{{% - \def\temp{#1}% - \ifx\temp\macrocharA\Aogonek - \else\ifx\temp\macrochara\aogonek - \else\ifx\temp\macrocharE\Eogonek - \else\ifx\temp\macrochare\eogonek - \else - \ecfont \setbox0=\hbox{#1}% - \ifdim\ht0=1ex\accent"0C #1% - \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% - \fi - \fi\fi\fi\fi - }% -} -\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} -\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} -\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} -\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} -% -% Use the ec* fonts (cm-super in outline format) for non-CM glyphs. -\def\ecfont{% - % We can't distinguish serif/sans and italic/slanted, but this - % is used for crude hacks anyway (like adding French and German - % quotes to documents typeset with CM, where we lose kerning), so - % hopefully nobody will notice/care. - \edef\ecsize{\csname\curfontsize ecsize\endcsname}% - \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% - \ifmonospace - % typewriter: - \font\thisecfont = ectt\ecsize \space at \nominalsize - \else - \ifx\curfontstyle\bfstylename - % bold: - \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize - \else - % regular: - \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize - \fi - \fi - \thisecfont -} - -% @registeredsymbol - R in a circle. The font for the R should really -% be smaller yet, but lllsize is the best we can do for now. -% Adapted from the plain.tex definition of \copyright. -% -\def\registeredsymbol{% - $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% - \hfil\crcr\Orb}}% - }$% -} - -% @textdegree - the normal degrees sign. -% -\def\textdegree{$^\circ$} - -% Laurent Siebenmann reports \Orb undefined with: -% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 -% so we'll define it if necessary. -% -\ifx\Orb\thisisundefined -\def\Orb{\mathhexbox20D} -\fi - -% Quotes. -\chardef\quotedblleft="5C -\chardef\quotedblright=`\" -\chardef\quoteleft=`\` -\chardef\quoteright=`\' - - -\message{page headings,} - -\newskip\titlepagetopglue \titlepagetopglue = 1.5in -\newskip\titlepagebottomglue \titlepagebottomglue = 2pc - -% First the title page. Must do @settitle before @titlepage. -\newif\ifseenauthor -\newif\iffinishedtitlepage - -% Do an implicit @contents or @shortcontents after @end titlepage if the -% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. -% -\newif\ifsetcontentsaftertitlepage - \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue -\newif\ifsetshortcontentsaftertitlepage - \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue - -\parseargdef\shorttitlepage{% - \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} - -\envdef\titlepage{% - % Open one extra group, as we want to close it in the middle of \Etitlepage. - \begingroup - \parindent=0pt \textfonts - % Leave some space at the very top of the page. - \vglue\titlepagetopglue - % No rule at page bottom unless we print one at the top with @title. - \finishedtitlepagetrue - % - % Most title ``pages'' are actually two pages long, with space - % at the top of the second. We don't want the ragged left on the second. - \let\oldpage = \page - \def\page{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - \let\page = \oldpage - \page - \null - }% -} - -\def\Etitlepage{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - % It is important to do the page break before ending the group, - % because the headline and footline are only empty inside the group. - % If we use the new definition of \page, we always get a blank page - % after the title page, which we certainly don't want. - \oldpage - \endgroup - % - % Need this before the \...aftertitlepage checks so that if they are - % in effect the toc pages will come out with page numbers. - \HEADINGSon - % - % If they want short, they certainly want long too. - \ifsetshortcontentsaftertitlepage - \shortcontents - \contents - \global\let\shortcontents = \relax - \global\let\contents = \relax - \fi - % - \ifsetcontentsaftertitlepage - \contents - \global\let\contents = \relax - \global\let\shortcontents = \relax - \fi -} - -\def\finishtitlepage{% - \vskip4pt \hrule height 2pt width \hsize - \vskip\titlepagebottomglue - \finishedtitlepagetrue -} - -% Settings used for typesetting titles: no hyphenation, no indentation, -% don't worry much about spacing, ragged right. This should be used -% inside a \vbox, and fonts need to be set appropriately first. Because -% it is always used for titles, nothing else, we call \rmisbold. \par -% should be specified before the end of the \vbox, since a vbox is a group. -% -\def\raggedtitlesettings{% - \rmisbold - \hyphenpenalty=10000 - \parindent=0pt - \tolerance=5000 - \ptexraggedright -} - -% Macros to be used within @titlepage: - -\let\subtitlerm=\tenrm -\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} - -\parseargdef\title{% - \checkenv\titlepage - \vbox{\titlefonts \raggedtitlesettings #1\par}% - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt -} - -\parseargdef\subtitle{% - \checkenv\titlepage - {\subtitlefont \rightline{#1}}% -} - -% @author should come last, but may come many times. -% It can also be used inside @quotation. -% -\parseargdef\author{% - \def\temp{\quotation}% - \ifx\thisenv\temp - \def\quotationauthor{#1}% printed in \Equotation. - \else - \checkenv\titlepage - \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi - {\secfonts\rmisbold \leftline{#1}}% - \fi -} - - -% Set up page headings and footings. - -\let\thispage=\folio - -\newtoks\evenheadline % headline on even pages -\newtoks\oddheadline % headline on odd pages -\newtoks\evenfootline % footline on even pages -\newtoks\oddfootline % footline on odd pages - -% Now make TeX use those variables -\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline - \else \the\evenheadline \fi}} -\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline - \else \the\evenfootline \fi}\HEADINGShook} -\let\HEADINGShook=\relax - -% Commands to set those variables. -% For example, this is what @headings on does -% @evenheading @thistitle|@thispage|@thischapter -% @oddheading @thischapter|@thispage|@thistitle -% @evenfooting @thisfile|| -% @oddfooting ||@thisfile - - -\def\evenheading{\parsearg\evenheadingxxx} -\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} -\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\def\oddheading{\parsearg\oddheadingxxx} -\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} -\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% - -\def\evenfooting{\parsearg\evenfootingxxx} -\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} -\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\def\oddfooting{\parsearg\oddfootingxxx} -\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} -\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% - \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% - % - % Leave some space for the footline. Hopefully ok to assume - % @evenfooting will not be used by itself. - \global\advance\pageheight by -12pt - \global\advance\vsize by -12pt -} - -\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} - -% @evenheadingmarks top \thischapter <- chapter at the top of a page -% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page -% -% The same set of arguments for: -% -% @oddheadingmarks -% @evenfootingmarks -% @oddfootingmarks -% @everyheadingmarks -% @everyfootingmarks - -\def\evenheadingmarks{\headingmarks{even}{heading}} -\def\oddheadingmarks{\headingmarks{odd}{heading}} -\def\evenfootingmarks{\headingmarks{even}{footing}} -\def\oddfootingmarks{\headingmarks{odd}{footing}} -\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} - \headingmarks{odd}{heading}{#1} } -\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} - \headingmarks{odd}{footing}{#1} } -% #1 = even/odd, #2 = heading/footing, #3 = top/bottom. -\def\headingmarks#1#2#3 {% - \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname - \global\expandafter\let\csname get#1#2marks\endcsname \temp -} - -\everyheadingmarks bottom -\everyfootingmarks bottom - -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. -% @headings singleafter turns on single-sided headings after this page. -% By default, they are off at the start of a document, -% and turned `on' after @end titlepage. - -\def\headings #1 {\csname HEADINGS#1\endcsname} - -\def\headingsoff{% non-global headings elimination - \evenheadline={\hfil}\evenfootline={\hfil}% - \oddheadline={\hfil}\oddfootline={\hfil}% -} - -\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting -\HEADINGSoff % it's the default - -% When we turn headings on, set the page number to 1. -% For double-sided printing, put current file name in lower left corner, -% chapter name on inside top of right hand pages, document -% title on inside top of left hand pages, and page numbers on outside top -% edge of all pages. -\def\HEADINGSdouble{% -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} -\let\contentsalignmacro = \chappager - -% For single-sided printing, chapter title goes across top left of page, -% page number on top right. -\def\HEADINGSsingle{% -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} -\def\HEADINGSon{\HEADINGSdouble} - -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} -\let\HEADINGSdoubleafter=\HEADINGSafter -\def\HEADINGSdoublex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} - -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} -\def\HEADINGSsinglex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} - -% Subroutines used in generating headings -% This produces Day Month Year style of output. -% Only define if not already defined, in case a txi-??.tex file has set -% up a different format (e.g., txi-cs.tex does this). -\ifx\today\thisisundefined -\def\today{% - \number\day\space - \ifcase\month - \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr - \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug - \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec - \fi - \space\number\year} -\fi - -% @settitle line... specifies the title of the document, for headings. -% It generates no output of its own. -\def\thistitle{\putwordNoTitle} -\def\settitle{\parsearg{\gdef\thistitle}} - - -\message{tables,} -% Tables -- @table, @ftable, @vtable, @item(x). - -% default indentation of table text -\newdimen\tableindent \tableindent=.8in -% default indentation of @itemize and @enumerate text -\newdimen\itemindent \itemindent=.3in -% margin between end of table item and start of table text. -\newdimen\itemmargin \itemmargin=.1in - -% used internally for \itemindent minus \itemmargin -\newdimen\itemmax - -% Note @table, @ftable, and @vtable define @item, @itemx, etc., with -% these defs. -% They also define \itemindex -% to index the item name in whatever manner is desired (perhaps none). - -\newif\ifitemxneedsnegativevskip - -\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} - -\def\internalBitem{\smallbreak \parsearg\itemzzz} -\def\internalBitemx{\itemxpar \parsearg\itemzzz} - -\def\itemzzz #1{\begingroup % - \advance\hsize by -\rightskip - \advance\hsize by -\tableindent - \setbox0=\hbox{\itemindicate{#1}}% - \itemindex{#1}% - \nobreak % This prevents a break before @itemx. - % - % If the item text does not fit in the space we have, put it on a line - % by itself, and do not allow a page break either before or after that - % line. We do not start a paragraph here because then if the next - % command is, e.g., @kindex, the whatsit would get put into the - % horizontal list on a line by itself, resulting in extra blank space. - \ifdim \wd0>\itemmax - % - % Make this a paragraph so we get the \parskip glue and wrapping, - % but leave it ragged-right. - \begingroup - \advance\leftskip by-\tableindent - \advance\hsize by\tableindent - \advance\rightskip by0pt plus1fil\relax - \leavevmode\unhbox0\par - \endgroup - % - % We're going to be starting a paragraph, but we don't want the - % \parskip glue -- logically it's part of the @item we just started. - \nobreak \vskip-\parskip - % - % Stop a page break at the \parskip glue coming up. However, if - % what follows is an environment such as @example, there will be no - % \parskip glue; then the negative vskip we just inserted would - % cause the example and the item to crash together. So we use this - % bizarre value of 10001 as a signal to \aboveenvbreak to insert - % \parskip glue after all. Section titles are handled this way also. - % - \penalty 10001 - \endgroup - \itemxneedsnegativevskipfalse - \else - % The item text fits into the space. Start a paragraph, so that the - % following text (if any) will end up on the same line. - \noindent - % Do this with kerns and \unhbox so that if there is a footnote in - % the item text, it can migrate to the main vertical list and - % eventually be printed. - \nobreak\kern-\tableindent - \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 - \unhbox0 - \nobreak\kern\dimen0 - \endgroup - \itemxneedsnegativevskiptrue - \fi -} - -\def\item{\errmessage{@item while not in a list environment}} -\def\itemx{\errmessage{@itemx while not in a list environment}} - -% @table, @ftable, @vtable. -\envdef\table{% - \let\itemindex\gobble - \tablecheck{table}% -} -\envdef\ftable{% - \def\itemindex ##1{\doind {fn}{\code{##1}}}% - \tablecheck{ftable}% -} -\envdef\vtable{% - \def\itemindex ##1{\doind {vr}{\code{##1}}}% - \tablecheck{vtable}% -} -\def\tablecheck#1{% - \ifnum \the\catcode`\^^M=\active - \endgroup - \errmessage{This command won't work in this context; perhaps the problem is - that we are \inenvironment\thisenv}% - \def\next{\doignore{#1}}% - \else - \let\next\tablex - \fi - \next -} -\def\tablex#1{% - \def\itemindicate{#1}% - \parsearg\tabley -} -\def\tabley#1{% - {% - \makevalueexpandable - \edef\temp{\noexpand\tablez #1\space\space\space}% - \expandafter - }\temp \endtablez -} -\def\tablez #1 #2 #3 #4\endtablez{% - \aboveenvbreak - \ifnum 0#1>0 \advance \leftskip by #1\mil \fi - \ifnum 0#2>0 \tableindent=#2\mil \fi - \ifnum 0#3>0 \advance \rightskip by #3\mil \fi - \itemmax=\tableindent - \advance \itemmax by -\itemmargin - \advance \leftskip by \tableindent - \exdentamount=\tableindent - \parindent = 0pt - \parskip = \smallskipamount - \ifdim \parskip=0pt \parskip=2pt \fi - \let\item = \internalBitem - \let\itemx = \internalBitemx -} -\def\Etable{\endgraf\afterenvbreak} -\let\Eftable\Etable -\let\Evtable\Etable -\let\Eitemize\Etable -\let\Eenumerate\Etable - -% This is the counter used by @enumerate, which is really @itemize - -\newcount \itemno - -\envdef\itemize{\parsearg\doitemize} - -\def\doitemize#1{% - \aboveenvbreak - \itemmax=\itemindent - \advance\itemmax by -\itemmargin - \advance\leftskip by \itemindent - \exdentamount=\itemindent - \parindent=0pt - \parskip=\smallskipamount - \ifdim\parskip=0pt \parskip=2pt \fi - % - % Try typesetting the item mark that if the document erroneously says - % something like @itemize @samp (intending @table), there's an error - % right away at the @itemize. It's not the best error message in the - % world, but it's better than leaving it to the @item. This means if - % the user wants an empty mark, they have to say @w{} not just @w. - \def\itemcontents{#1}% - \setbox0 = \hbox{\itemcontents}% - % - % @itemize with no arg is equivalent to @itemize @bullet. - \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi - % - \let\item=\itemizeitem -} - -% Definition of @item while inside @itemize and @enumerate. -% -\def\itemizeitem{% - \advance\itemno by 1 % for enumerations - {\let\par=\endgraf \smallbreak}% reasonable place to break - {% - % If the document has an @itemize directly after a section title, a - % \nobreak will be last on the list, and \sectionheading will have - % done a \vskip-\parskip. In that case, we don't want to zero - % parskip, or the item text will crash with the heading. On the - % other hand, when there is normal text preceding the item (as there - % usually is), we do want to zero parskip, or there would be too much - % space. In that case, we won't have a \nobreak before. At least - % that's the theory. - \ifnum\lastpenalty<10000 \parskip=0in \fi - \noindent - \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% - % - \vadjust{\penalty 1200}}% not good to break after first line of item. - \flushcr -} - -% \splitoff TOKENS\endmark defines \first to be the first token in -% TOKENS, and \rest to be the remainder. -% -\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% - -% Allow an optional argument of an uppercase letter, lowercase letter, -% or number, to specify the first label in the enumerated list. No -% argument is the same as `1'. -% -\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} -\def\enumeratey #1 #2\endenumeratey{% - % If we were given no argument, pretend we were given `1'. - \def\thearg{#1}% - \ifx\thearg\empty \def\thearg{1}\fi - % - % Detect if the argument is a single token. If so, it might be a - % letter. Otherwise, the only valid thing it can be is a number. - % (We will always have one token, because of the test we just made. - % This is a good thing, since \splitoff doesn't work given nothing at - % all -- the first parameter is undelimited.) - \expandafter\splitoff\thearg\endmark - \ifx\rest\empty - % Only one token in the argument. It could still be anything. - % A ``lowercase letter'' is one whose \lccode is nonzero. - % An ``uppercase letter'' is one whose \lccode is both nonzero, and - % not equal to itself. - % Otherwise, we assume it's a number. - % - % We need the \relax at the end of the \ifnum lines to stop TeX from - % continuing to look for a . - % - \ifnum\lccode\expandafter`\thearg=0\relax - \numericenumerate % a number (we hope) - \else - % It's a letter. - \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax - \lowercaseenumerate % lowercase letter - \else - \uppercaseenumerate % uppercase letter - \fi - \fi - \else - % Multiple tokens in the argument. We hope it's a number. - \numericenumerate - \fi -} - -% An @enumerate whose labels are integers. The starting integer is -% given in \thearg. -% -\def\numericenumerate{% - \itemno = \thearg - \startenumeration{\the\itemno}% -} - -% The starting (lowercase) letter is in \thearg. -\def\lowercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more lowercase letters in @enumerate; get a bigger - alphabet}% - \fi - \char\lccode\itemno - }% -} - -% The starting (uppercase) letter is in \thearg. -\def\uppercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more uppercase letters in @enumerate; get a bigger - alphabet} - \fi - \char\uccode\itemno - }% -} - -% Call \doitemize, adding a period to the first argument and supplying the -% common last two arguments. Also subtract one from the initial value in -% \itemno, since @item increments \itemno. -% -\def\startenumeration#1{% - \advance\itemno by -1 - \doitemize{#1.}\flushcr -} - -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg -% to @enumerate. -% -\def\alphaenumerate{\enumerate{a}} -\def\capsenumerate{\enumerate{A}} -\def\Ealphaenumerate{\Eenumerate} -\def\Ecapsenumerate{\Eenumerate} - - -% @multitable macros -% Amy Hendrickson, 8/18/94, 3/6/96 -% -% @multitable ... @end multitable will make as many columns as desired. -% Contents of each column will wrap at width given in preamble. Width -% can be specified either with sample text given in a template line, -% or in percent of \hsize, the current width of text on page. - -% Table can continue over pages but will only break between lines. - -% To make preamble: -% -% Either define widths of columns in terms of percent of \hsize: -% @multitable @columnfractions .25 .3 .45 -% @item ... -% -% Numbers following @columnfractions are the percent of the total -% current hsize to be used for each column. You may use as many -% columns as desired. - - -% Or use a template: -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item ... -% using the widest term desired in each column. - -% Each new table line starts with @item, each subsequent new column -% starts with @tab. Empty columns may be produced by supplying @tab's -% with nothing between them for as many times as empty columns are needed, -% ie, @tab@tab@tab will produce two empty columns. - -% @item, @tab do not need to be on their own lines, but it will not hurt -% if they are. - -% Sample multitable: - -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item first col stuff @tab second col stuff @tab third col -% @item -% first col stuff -% @tab -% second col stuff -% @tab -% third col -% @item first col stuff @tab second col stuff -% @tab Many paragraphs of text may be used in any column. -% -% They will wrap at the width determined by the template. -% @item@tab@tab This will be in third column. -% @end multitable - -% Default dimensions may be reset by user. -% @multitableparskip is vertical space between paragraphs in table. -% @multitableparindent is paragraph indent in table. -% @multitablecolmargin is horizontal space to be left between columns. -% @multitablelinespace is space to leave between table items, baseline -% to baseline. -% 0pt means it depends on current normal line spacing. -% -\newskip\multitableparskip -\newskip\multitableparindent -\newdimen\multitablecolspace -\newskip\multitablelinespace -\multitableparskip=0pt -\multitableparindent=6pt -\multitablecolspace=12pt -\multitablelinespace=0pt - -% Macros used to set up halign preamble: -% -\let\endsetuptable\relax -\def\xendsetuptable{\endsetuptable} -\let\columnfractions\relax -\def\xcolumnfractions{\columnfractions} -\newif\ifsetpercent - -% #1 is the @columnfraction, usually a decimal number like .5, but might -% be just 1. We just use it, whatever it is. -% -\def\pickupwholefraction#1 {% - \global\advance\colcount by 1 - \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% - \setuptable -} - -\newcount\colcount -\def\setuptable#1{% - \def\firstarg{#1}% - \ifx\firstarg\xendsetuptable - \let\go = \relax - \else - \ifx\firstarg\xcolumnfractions - \global\setpercenttrue - \else - \ifsetpercent - \let\go\pickupwholefraction - \else - \global\advance\colcount by 1 - \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a - % separator; typically that is always in the input, anyway. - \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% - \fi - \fi - \ifx\go\pickupwholefraction - % Put the argument back for the \pickupwholefraction call, so - % we'll always have a period there to be parsed. - \def\go{\pickupwholefraction#1}% - \else - \let\go = \setuptable - \fi% - \fi - \go -} - -% multitable-only commands. -% -% @headitem starts a heading row, which we typeset in bold. -% Assignments have to be global since we are inside the implicit group -% of an alignment entry. \everycr resets \everytab so we don't have to -% undo it ourselves. -\def\headitemfont{\b}% for people to use in the template row; not changeable -\def\headitem{% - \checkenv\multitable - \crcr - \global\everytab={\bf}% can't use \headitemfont since the parsing differs - \the\everytab % for the first item -}% -% -% A \tab used to include \hskip1sp. But then the space in a template -% line is not enough. That is bad. So let's go back to just `&' until -% we again encounter the problem the 1sp was intended to solve. -% --karl, nathan@acm.org, 20apr99. -\def\tab{\checkenv\multitable &\the\everytab}% - -% @multitable ... @end multitable definitions: -% -\newtoks\everytab % insert after every tab. -% -\envdef\multitable{% - \vskip\parskip - \startsavinginserts - % - % @item within a multitable starts a normal row. - % We use \def instead of \let so that if one of the multitable entries - % contains an @itemize, we don't choke on the \item (seen as \crcr aka - % \endtemplate) expanding \doitemize. - \def\item{\crcr}% - % - \tolerance=9500 - \hbadness=9500 - \setmultitablespacing - \parskip=\multitableparskip - \parindent=\multitableparindent - \overfullrule=0pt - \global\colcount=0 - % - \everycr = {% - \noalign{% - \global\everytab={}% - \global\colcount=0 % Reset the column counter. - % Check for saved footnotes, etc. - \checkinserts - % Keeps underfull box messages off when table breaks over pages. - %\filbreak - % Maybe so, but it also creates really weird page breaks when the - % table breaks over pages. Wouldn't \vfil be better? Wait until the - % problem manifests itself, so it can be fixed for real --karl. - }% - }% - % - \parsearg\domultitable -} -\def\domultitable#1{% - % To parse everything between @multitable and @item: - \setuptable#1 \endsetuptable - % - % This preamble sets up a generic column definition, which will - % be used as many times as user calls for columns. - % \vtop will set a single line and will also let text wrap and - % continue for many paragraphs if desired. - \halign\bgroup &% - \global\advance\colcount by 1 - \multistrut - \vtop{% - % Use the current \colcount to find the correct column width: - \hsize=\expandafter\csname col\the\colcount\endcsname - % - % In order to keep entries from bumping into each other - % we will add a \leftskip of \multitablecolspace to all columns after - % the first one. - % - % If a template has been used, we will add \multitablecolspace - % to the width of each template entry. - % - % If the user has set preamble in terms of percent of \hsize we will - % use that dimension as the width of the column, and the \leftskip - % will keep entries from bumping into each other. Table will start at - % left margin and final column will justify at right margin. - % - % Make sure we don't inherit \rightskip from the outer environment. - \rightskip=0pt - \ifnum\colcount=1 - % The first column will be indented with the surrounding text. - \advance\hsize by\leftskip - \else - \ifsetpercent \else - % If user has not set preamble in terms of percent of \hsize - % we will advance \hsize by \multitablecolspace. - \advance\hsize by \multitablecolspace - \fi - % In either case we will make \leftskip=\multitablecolspace: - \leftskip=\multitablecolspace - \fi - % Ignoring space at the beginning and end avoids an occasional spurious - % blank line, when TeX decides to break the line at the space before the - % box from the multistrut, so the strut ends up on a line by itself. - % For example: - % @multitable @columnfractions .11 .89 - % @item @code{#} - % @tab Legal holiday which is valid in major parts of the whole country. - % Is automatically provided with highlighting sequences respectively - % marking characters. - \noindent\ignorespaces##\unskip\multistrut - }\cr -} -\def\Emultitable{% - \crcr - \egroup % end the \halign - \global\setpercentfalse -} - -\def\setmultitablespacing{% - \def\multistrut{\strut}% just use the standard line spacing - % - % Compute \multitablelinespace (if not defined by user) for use in - % \multitableparskip calculation. We used define \multistrut based on - % this, but (ironically) that caused the spacing to be off. - % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. -\ifdim\multitablelinespace=0pt -\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip -\global\advance\multitablelinespace by-\ht0 -\fi -% Test to see if parskip is larger than space between lines of -% table. If not, do nothing. -% If so, set to same dimension as multitablelinespace. -\ifdim\multitableparskip>\multitablelinespace -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller - % than skip between lines in the table. -\fi% -\ifdim\multitableparskip=0pt -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller - % than skip between lines in the table. -\fi} - - -\message{conditionals,} - -% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, -% @ifnotxml always succeed. They currently do nothing; we don't -% attempt to check whether the conditionals are properly nested. But we -% have to remember that they are conditionals, so that @end doesn't -% attempt to close an environment group. -% -\def\makecond#1{% - \expandafter\let\csname #1\endcsname = \relax - \expandafter\let\csname iscond.#1\endcsname = 1 -} -\makecond{iftex} -\makecond{ifnotdocbook} -\makecond{ifnothtml} -\makecond{ifnotinfo} -\makecond{ifnotplaintext} -\makecond{ifnotxml} - -% Ignore @ignore, @ifhtml, @ifinfo, and the like. -% -\def\direntry{\doignore{direntry}} -\def\documentdescription{\doignore{documentdescription}} -\def\docbook{\doignore{docbook}} -\def\html{\doignore{html}} -\def\ifdocbook{\doignore{ifdocbook}} -\def\ifhtml{\doignore{ifhtml}} -\def\ifinfo{\doignore{ifinfo}} -\def\ifnottex{\doignore{ifnottex}} -\def\ifplaintext{\doignore{ifplaintext}} -\def\ifxml{\doignore{ifxml}} -\def\ignore{\doignore{ignore}} -\def\menu{\doignore{menu}} -\def\xml{\doignore{xml}} - -% Ignore text until a line `@end #1', keeping track of nested conditionals. -% -% A count to remember the depth of nesting. -\newcount\doignorecount - -\def\doignore#1{\begingroup - % Scan in ``verbatim'' mode: - \obeylines - \catcode`\@ = \other - \catcode`\{ = \other - \catcode`\} = \other - % - % Make sure that spaces turn into tokens that match what \doignoretext wants. - \spaceisspace - % - % Count number of #1's that we've seen. - \doignorecount = 0 - % - % Swallow text until we reach the matching `@end #1'. - \dodoignore{#1}% -} - -{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. - \obeylines % - % - \gdef\dodoignore#1{% - % #1 contains the command name as a string, e.g., `ifinfo'. - % - % Define a command to find the next `@end #1'. - \long\def\doignoretext##1^^M@end #1{% - \doignoretextyyy##1^^M@#1\_STOP_}% - % - % And this command to find another #1 command, at the beginning of a - % line. (Otherwise, we would consider a line `@c @ifset', for - % example, to count as an @ifset for nesting.) - \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% - % - % And now expand that command. - \doignoretext ^^M% - }% -} - -\def\doignoreyyy#1{% - \def\temp{#1}% - \ifx\temp\empty % Nothing found. - \let\next\doignoretextzzz - \else % Found a nested condition, ... - \advance\doignorecount by 1 - \let\next\doignoretextyyy % ..., look for another. - % If we're here, #1 ends with ^^M\ifinfo (for example). - \fi - \next #1% the token \_STOP_ is present just after this macro. -} - -% We have to swallow the remaining "\_STOP_". -% -\def\doignoretextzzz#1{% - \ifnum\doignorecount = 0 % We have just found the outermost @end. - \let\next\enddoignore - \else % Still inside a nested condition. - \advance\doignorecount by -1 - \let\next\doignoretext % Look for the next @end. - \fi - \next -} - -% Finish off ignored text. -{ \obeylines% - % Ignore anything after the last `@end #1'; this matters in verbatim - % environments, where otherwise the newline after an ignored conditional - % would result in a blank line in the output. - \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% -} - - -% @set VAR sets the variable VAR to an empty value. -% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. -% -% Since we want to separate VAR from REST-OF-LINE (which might be -% empty), we can't just use \parsearg; we have to insert a space of our -% own to delimit the rest of the line, and then take it out again if we -% didn't need it. -% We rely on the fact that \parsearg sets \catcode`\ =10. -% -\parseargdef\set{\setyyy#1 \endsetyyy} -\def\setyyy#1 #2\endsetyyy{% - {% - \makevalueexpandable - \def\temp{#2}% - \edef\next{\gdef\makecsname{SET#1}}% - \ifx\temp\empty - \next{}% - \else - \setzzz#2\endsetzzz - \fi - }% -} -% Remove the trailing space \setxxx inserted. -\def\setzzz#1 \endsetzzz{\next{#1}} - -% @clear VAR clears (i.e., unsets) the variable VAR. -% -\parseargdef\clear{% - {% - \makevalueexpandable - \global\expandafter\let\csname SET#1\endcsname=\relax - }% -} - -% @value{foo} gets the text saved in variable foo. -\def\value{\begingroup\makevalueexpandable\valuexxx} -\def\valuexxx#1{\expandablevalue{#1}\endgroup} -{ - \catcode`\- = \active \catcode`\_ = \active - % - \gdef\makevalueexpandable{% - \let\value = \expandablevalue - % We don't want these characters active, ... - \catcode`\-=\other \catcode`\_=\other - % ..., but we might end up with active ones in the argument if - % we're called from @code, as @code{@value{foo-bar_}}, though. - % So \let them to their normal equivalents. - \let-\normaldash \let_\normalunderscore - } -} - -% We have this subroutine so that we can handle at least some @value's -% properly in indexes (we call \makevalueexpandable in \indexdummies). -% The command has to be fully expandable (if the variable is set), since -% the result winds up in the index file. This means that if the -% variable's value contains other Texinfo commands, it's almost certain -% it will fail (although perhaps we could fix that with sufficient work -% to do a one-level expansion on the result, instead of complete). -% -\def\expandablevalue#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - {[No value for ``#1'']}% - \message{Variable `#1', used in @value, is not set.}% - \else - \csname SET#1\endcsname - \fi -} - -% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined -% with @set. -% -% To get special treatment of `@end ifset,' call \makeond and the redefine. -% -\makecond{ifset} -\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} -\def\doifset#1#2{% - {% - \makevalueexpandable - \let\next=\empty - \expandafter\ifx\csname SET#2\endcsname\relax - #1% If not set, redefine \next. - \fi - \expandafter - }\next -} -\def\ifsetfail{\doignore{ifset}} - -% @ifclear VAR ... @end executes the `...' iff VAR has never been -% defined with @set, or has been undefined with @clear. -% -% The `\else' inside the `\doifset' parameter is a trick to reuse the -% above code: if the variable is not set, do nothing, if it is set, -% then redefine \next to \ifclearfail. -% -\makecond{ifclear} -\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} -\def\ifclearfail{\doignore{ifclear}} - -% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written -% without the @) is in fact defined. We can only feasibly check at the -% TeX level, so something like `mathcode' is going to considered -% defined even though it is not a Texinfo command. -% -\makecond{ifcommanddefined} -\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} -% -\def\doifcmddefined#1#2{{% - \makevalueexpandable - \let\next=\empty - \expandafter\ifx\csname #2\endcsname\relax - #1% If not defined, \let\next as above. - \fi - \expandafter - }\next -} -\def\ifcmddefinedfail{\doignore{ifcommanddefined}} - -% @ifcommandnotdefined CMD ... handled similar to @ifclear above. -\makecond{ifcommandnotdefined} -\def\ifcommandnotdefined{% - \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} -\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} - -% Set the `txicommandconditionals' variable, so documents have a way to -% test if the @ifcommand...defined conditionals are available. -\set txicommandconditionals - -% @dircategory CATEGORY -- specify a category of the dir file -% which this file should belong to. Ignore this in TeX. -\let\dircategory=\comment - -% @defininfoenclose. -\let\definfoenclose=\comment - - -\message{indexing,} -% Index generation facilities - -% Define \newwrite to be identical to plain tex's \newwrite -% except not \outer, so it can be used within macros and \if's. -\edef\newwrite{\makecsname{ptexnewwrite}} - -% \newindex {foo} defines an index named foo. -% It automatically defines \fooindex such that -% \fooindex ...rest of line... puts an entry in the index foo. -% It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. -% The name of an index should be no more than 2 characters long -% for the sake of vms. -% -\def\newindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 % Open the file - \fi - \expandafter\xdef\csname#1index\endcsname{% % Define @#1index - \noexpand\doindex{#1}} -} - -% @defindex foo == \newindex{foo} -% -\def\defindex{\parsearg\newindex} - -% Define @defcodeindex, like @defindex except put all entries in @code. -% -\def\defcodeindex{\parsearg\newcodeindex} -% -\def\newcodeindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 - \fi - \expandafter\xdef\csname#1index\endcsname{% - \noexpand\docodeindex{#1}}% -} - - -% @synindex foo bar makes index foo feed into index bar. -% Do this instead of @defindex foo if you don't want it as a separate index. -% -% @syncodeindex foo bar similar, but put all entries made for index foo -% inside @code. -% -\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} -\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} - -% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), -% #3 the target index (bar). -\def\dosynindex#1#2#3{% - % Only do \closeout if we haven't already done it, else we'll end up - % closing the target index. - \expandafter \ifx\csname donesynindex#2\endcsname \relax - % The \closeout helps reduce unnecessary open files; the limit on the - % Acorn RISC OS is a mere 16 files. - \expandafter\closeout\csname#2indfile\endcsname - \expandafter\let\csname donesynindex#2\endcsname = 1 - \fi - % redefine \fooindfile: - \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname - \expandafter\let\csname#2indfile\endcsname=\temp - % redefine \fooindex: - \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% -} - -% Define \doindex, the driver for all \fooindex macros. -% Argument #1 is generated by the calling \fooindex macro, -% and it is "foo", the name of the index. - -% \doindex just uses \parsearg; it calls \doind for the actual work. -% This is because \doind is more useful to call from other macros. - -% There is also \dosubind {index}{topic}{subtopic} -% which makes an entry in a two-level index such as the operation index. - -\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} -\def\singleindexer #1{\doind{\indexname}{#1}} - -% like the previous two, but they put @code around the argument. -\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} -\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} - -% Take care of Texinfo commands that can appear in an index entry. -% Since there are some commands we want to expand, and others we don't, -% we have to laboriously prevent expansion for those that we don't. -% -\def\indexdummies{% - \escapechar = `\\ % use backslash in output files. - \def\@{@}% change to @@ when we switch to @ as escape char in index files. - \def\ {\realbackslash\space }% - % - % Need these unexpandable (because we define \tt as a dummy) - % definitions when @{ or @} appear in index entry text. Also, more - % complicated, when \tex is in effect and \{ is a \delimiter again. - % We can't use \lbracecmd and \rbracecmd because texindex assumes - % braces and backslashes are used only as delimiters. Perhaps we - % should define @lbrace and @rbrace commands a la @comma. - \def\{{{\tt\char123}}% - \def\}{{\tt\char125}}% - % - % I don't entirely understand this, but when an index entry is - % generated from a macro call, the \endinput which \scanmacro inserts - % causes processing to be prematurely terminated. This is, - % apparently, because \indexsorttmp is fully expanded, and \endinput - % is an expandable command. The redefinition below makes \endinput - % disappear altogether for that purpose -- although logging shows that - % processing continues to some further point. On the other hand, it - % seems \endinput does not hurt in the printed index arg, since that - % is still getting written without apparent harm. - % - % Sample source (mac-idx3.tex, reported by Graham Percival to - % help-texinfo, 22may06): - % @macro funindex {WORD} - % @findex xyz - % @end macro - % ... - % @funindex commtest - % - % The above is not enough to reproduce the bug, but it gives the flavor. - % - % Sample whatsit resulting: - % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} - % - % So: - \let\endinput = \empty - % - % Do the redefinitions. - \commondummies -} - -% For the aux and toc files, @ is the escape character. So we want to -% redefine everything using @ as the escape character (instead of -% \realbackslash, still used for index files). When everything uses @, -% this will be simpler. -% -\def\atdummies{% - \def\@{@@}% - \def\ {@ }% - \let\{ = \lbraceatcmd - \let\} = \rbraceatcmd - % - % Do the redefinitions. - \commondummies - \otherbackslash -} - -% Called from \indexdummies and \atdummies. -% -\def\commondummies{% - % - % \definedummyword defines \#1 as \string\#1\space, thus effectively - % preventing its expansion. This is used only for control words, - % not control letters, because the \space would be incorrect for - % control characters, but is needed to separate the control word - % from whatever follows. - % - % For control letters, we have \definedummyletter, which omits the - % space. - % - % These can be used both for control words that take an argument and - % those that do not. If it is followed by {arg} in the input, then - % that will dutifully get written to the index (or wherever). - % - \def\definedummyword ##1{\def##1{\string##1\space}}% - \def\definedummyletter##1{\def##1{\string##1}}% - \let\definedummyaccent\definedummyletter - % - \commondummiesnofonts - % - \definedummyletter\_% - \definedummyletter\-% - % - % Non-English letters. - \definedummyword\AA - \definedummyword\AE - \definedummyword\DH - \definedummyword\L - \definedummyword\O - \definedummyword\OE - \definedummyword\TH - \definedummyword\aa - \definedummyword\ae - \definedummyword\dh - \definedummyword\exclamdown - \definedummyword\l - \definedummyword\o - \definedummyword\oe - \definedummyword\ordf - \definedummyword\ordm - \definedummyword\questiondown - \definedummyword\ss - \definedummyword\th - % - % Although these internal commands shouldn't show up, sometimes they do. - \definedummyword\bf - \definedummyword\gtr - \definedummyword\hat - \definedummyword\less - \definedummyword\sf - \definedummyword\sl - \definedummyword\tclose - \definedummyword\tt - % - \definedummyword\LaTeX - \definedummyword\TeX - % - % Assorted special characters. - \definedummyword\arrow - \definedummyword\bullet - \definedummyword\comma - \definedummyword\copyright - \definedummyword\registeredsymbol - \definedummyword\dots - \definedummyword\enddots - \definedummyword\entrybreak - \definedummyword\equiv - \definedummyword\error - \definedummyword\euro - \definedummyword\expansion - \definedummyword\geq - \definedummyword\guillemetleft - \definedummyword\guillemetright - \definedummyword\guilsinglleft - \definedummyword\guilsinglright - \definedummyword\lbracechar - \definedummyword\leq - \definedummyword\minus - \definedummyword\ogonek - \definedummyword\pounds - \definedummyword\point - \definedummyword\print - \definedummyword\quotedblbase - \definedummyword\quotedblleft - \definedummyword\quotedblright - \definedummyword\quoteleft - \definedummyword\quoteright - \definedummyword\quotesinglbase - \definedummyword\rbracechar - \definedummyword\result - \definedummyword\textdegree - % - % We want to disable all macros so that they are not expanded by \write. - \macrolist - % - \normalturnoffactive - % - % Handle some cases of @value -- where it does not contain any - % (non-fully-expandable) commands. - \makevalueexpandable -} - -% \commondummiesnofonts: common to \commondummies and \indexnofonts. -% -\def\commondummiesnofonts{% - % Control letters and accents. - \definedummyletter\!% - \definedummyaccent\"% - \definedummyaccent\'% - \definedummyletter\*% - \definedummyaccent\,% - \definedummyletter\.% - \definedummyletter\/% - \definedummyletter\:% - \definedummyaccent\=% - \definedummyletter\?% - \definedummyaccent\^% - \definedummyaccent\`% - \definedummyaccent\~% - \definedummyword\u - \definedummyword\v - \definedummyword\H - \definedummyword\dotaccent - \definedummyword\ogonek - \definedummyword\ringaccent - \definedummyword\tieaccent - \definedummyword\ubaraccent - \definedummyword\udotaccent - \definedummyword\dotless - % - % Texinfo font commands. - \definedummyword\b - \definedummyword\i - \definedummyword\r - \definedummyword\sansserif - \definedummyword\sc - \definedummyword\slanted - \definedummyword\t - % - % Commands that take arguments. - \definedummyword\abbr - \definedummyword\acronym - \definedummyword\anchor - \definedummyword\cite - \definedummyword\code - \definedummyword\command - \definedummyword\dfn - \definedummyword\dmn - \definedummyword\email - \definedummyword\emph - \definedummyword\env - \definedummyword\file - \definedummyword\image - \definedummyword\indicateurl - \definedummyword\inforef - \definedummyword\kbd - \definedummyword\key - \definedummyword\math - \definedummyword\option - \definedummyword\pxref - \definedummyword\ref - \definedummyword\samp - \definedummyword\strong - \definedummyword\tie - \definedummyword\uref - \definedummyword\url - \definedummyword\var - \definedummyword\verb - \definedummyword\w - \definedummyword\xref -} - -% \indexnofonts is used when outputting the strings to sort the index -% by, and when constructing control sequence names. It eliminates all -% control sequences and just writes whatever the best ASCII sort string -% would be for a given command (usually its argument). -% -\def\indexnofonts{% - % Accent commands should become @asis. - \def\definedummyaccent##1{\let##1\asis}% - % We can just ignore other control letters. - \def\definedummyletter##1{\let##1\empty}% - % All control words become @asis by default; overrides below. - \let\definedummyword\definedummyaccent - % - \commondummiesnofonts - % - % Don't no-op \tt, since it isn't a user-level command - % and is used in the definitions of the active chars like <, >, |, etc. - % Likewise with the other plain tex font commands. - %\let\tt=\asis - % - \def\ { }% - \def\@{@}% - \def\_{\normalunderscore}% - \def\-{}% @- shouldn't affect sorting - % - % Unfortunately, texindex is not prepared to handle braces in the - % content at all. So for index sorting, we map @{ and @} to strings - % starting with |, since that ASCII character is between ASCII { and }. - \def\{{|a}% - \def\lbracechar{|a}% - % - \def\}{|b}% - \def\rbracechar{|b}% - % - % Non-English letters. - \def\AA{AA}% - \def\AE{AE}% - \def\DH{DZZ}% - \def\L{L}% - \def\OE{OE}% - \def\O{O}% - \def\TH{ZZZ}% - \def\aa{aa}% - \def\ae{ae}% - \def\dh{dzz}% - \def\exclamdown{!}% - \def\l{l}% - \def\oe{oe}% - \def\ordf{a}% - \def\ordm{o}% - \def\o{o}% - \def\questiondown{?}% - \def\ss{ss}% - \def\th{zzz}% - % - \def\LaTeX{LaTeX}% - \def\TeX{TeX}% - % - % Assorted special characters. - % (The following {} will end up in the sort string, but that's ok.) - \def\arrow{->}% - \def\bullet{bullet}% - \def\comma{,}% - \def\copyright{copyright}% - \def\dots{...}% - \def\enddots{...}% - \def\equiv{==}% - \def\error{error}% - \def\euro{euro}% - \def\expansion{==>}% - \def\geq{>=}% - \def\guillemetleft{<<}% - \def\guillemetright{>>}% - \def\guilsinglleft{<}% - \def\guilsinglright{>}% - \def\leq{<=}% - \def\minus{-}% - \def\point{.}% - \def\pounds{pounds}% - \def\print{-|}% - \def\quotedblbase{"}% - \def\quotedblleft{"}% - \def\quotedblright{"}% - \def\quoteleft{`}% - \def\quoteright{'}% - \def\quotesinglbase{,}% - \def\registeredsymbol{R}% - \def\result{=>}% - \def\textdegree{o}% - % - \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax - \else \indexlquoteignore \fi - % - % We need to get rid of all macros, leaving only the arguments (if present). - % Of course this is not nearly correct, but it is the best we can do for now. - % makeinfo does not expand macros in the argument to @deffn, which ends up - % writing an index entry, and texindex isn't prepared for an index sort entry - % that starts with \. - % - % Since macro invocations are followed by braces, we can just redefine them - % to take a single TeX argument. The case of a macro invocation that - % goes to end-of-line is not handled. - % - \macrolist -} - -% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us -% ignore left quotes in the sort term. -{\catcode`\`=\active - \gdef\indexlquoteignore{\let`=\empty}} - -\let\indexbackslash=0 %overridden during \printindex. -\let\SETmarginindex=\relax % put index entries in margin (undocumented)? - -% Most index entries go through here, but \dosubind is the general case. -% #1 is the index name, #2 is the entry text. -\def\doind#1#2{\dosubind{#1}{#2}{}} - -% Workhorse for all \fooindexes. -% #1 is name of index, #2 is stuff to put there, #3 is subentry -- -% empty if called from \doind, as we usually are (the main exception -% is with most defuns, which call us directly). -% -\def\dosubind#1#2#3{% - \iflinks - {% - % Store the main index entry text (including the third arg). - \toks0 = {#2}% - % If third arg is present, precede it with a space. - \def\thirdarg{#3}% - \ifx\thirdarg\empty \else - \toks0 = \expandafter{\the\toks0 \space #3}% - \fi - % - \edef\writeto{\csname#1indfile\endcsname}% - % - \safewhatsit\dosubindwrite - }% - \fi -} - -% Write the entry in \toks0 to the index file: -% -\def\dosubindwrite{% - % Put the index entry in the margin if desired. - \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% - \fi - % - % Remember, we are within a group. - \indexdummies % Must do this here, since \bf, etc expand at this stage - \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now - % so it will be output as is; and it will print as backslash. - % - % Process the index entry with all font commands turned off, to - % get the string to sort by. - {\indexnofonts - \edef\temp{\the\toks0}% need full expansion - \xdef\indexsorttmp{\temp}% - }% - % - % Set up the complete index entry, with both the sort key and - % the original text, including any font commands. We write - % three arguments to \entry to the .?? file (four in the - % subentry case), texindex reduces to two when writing the .??s - % sorted result. - \edef\temp{% - \write\writeto{% - \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% - }% - \temp -} - -% Take care of unwanted page breaks/skips around a whatsit: -% -% If a skip is the last thing on the list now, preserve it -% by backing up by \lastskip, doing the \write, then inserting -% the skip again. Otherwise, the whatsit generated by the -% \write or \pdfdest will make \lastskip zero. The result is that -% sequences like this: -% @end defun -% @tindex whatever -% @defun ... -% will have extra space inserted, because the \medbreak in the -% start of the @defun won't see the skip inserted by the @end of -% the previous defun. -% -% But don't do any of this if we're not in vertical mode. We -% don't want to do a \vskip and prematurely end a paragraph. -% -% Avoid page breaks due to these extra skips, too. -% -% But wait, there is a catch there: -% We'll have to check whether \lastskip is zero skip. \ifdim is not -% sufficient for this purpose, as it ignores stretch and shrink parts -% of the skip. The only way seems to be to check the textual -% representation of the skip. -% -% The following is almost like \def\zeroskipmacro{0.0pt} except that -% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). -% -\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} -% -\newskip\whatsitskip -\newcount\whatsitpenalty -% -% ..., ready, GO: -% -\def\safewhatsit#1{\ifhmode - #1% - \else - % \lastskip and \lastpenalty cannot both be nonzero simultaneously. - \whatsitskip = \lastskip - \edef\lastskipmacro{\the\lastskip}% - \whatsitpenalty = \lastpenalty - % - % If \lastskip is nonzero, that means the last item was a - % skip. And since a skip is discardable, that means this - % -\whatsitskip glue we're inserting is preceded by a - % non-discardable item, therefore it is not a potential - % breakpoint, therefore no \nobreak needed. - \ifx\lastskipmacro\zeroskipmacro - \else - \vskip-\whatsitskip - \fi - % - #1% - % - \ifx\lastskipmacro\zeroskipmacro - % If \lastskip was zero, perhaps the last item was a penalty, and - % perhaps it was >=10000, e.g., a \nobreak. In that case, we want - % to re-insert the same penalty (values >10000 are used for various - % signals); since we just inserted a non-discardable item, any - % following glue (such as a \parskip) would be a breakpoint. For example: - % @deffn deffn-whatever - % @vindex index-whatever - % Description. - % would allow a break between the index-whatever whatsit - % and the "Description." paragraph. - \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi - \else - % On the other hand, if we had a nonzero \lastskip, - % this make-up glue would be preceded by a non-discardable item - % (the whatsit from the \write), so we must insert a \nobreak. - \nobreak\vskip\whatsitskip - \fi -\fi} - -% The index entry written in the file actually looks like -% \entry {sortstring}{page}{topic} -% or -% \entry {sortstring}{page}{topic}{subtopic} -% The texindex program reads in these files and writes files -% containing these kinds of lines: -% \initial {c} -% before the first topic whose initial is c -% \entry {topic}{pagelist} -% for a topic that is used without subtopics -% \primary {topic} -% for the beginning of a topic that is used with subtopics -% \secondary {subtopic}{pagelist} -% for each subtopic. - -% Define the user-accessible indexing commands -% @findex, @vindex, @kindex, @cindex. - -\def\findex {\fnindex} -\def\kindex {\kyindex} -\def\cindex {\cpindex} -\def\vindex {\vrindex} -\def\tindex {\tpindex} -\def\pindex {\pgindex} - -\def\cindexsub {\begingroup\obeylines\cindexsub} -{\obeylines % -\gdef\cindexsub "#1" #2^^M{\endgroup % -\dosubind{cp}{#2}{#1}}} - -% Define the macros used in formatting output of the sorted index material. - -% @printindex causes a particular index (the ??s file) to get printed. -% It does not print any chapter heading (usually an @unnumbered). -% -\parseargdef\printindex{\begingroup - \dobreak \chapheadingskip{10000}% - % - \smallfonts \rm - \tolerance = 9500 - \plainfrenchspacing - \everypar = {}% don't want the \kern\-parindent from indentation suppression. - % - % See if the index file exists and is nonempty. - % Change catcode of @ here so that if the index file contains - % \initial {@} - % as its first line, TeX doesn't complain about mismatched braces - % (because it thinks @} is a control sequence). - \catcode`\@ = 11 - \openin 1 \jobname.#1s - \ifeof 1 - % \enddoublecolumns gets confused if there is no text in the index, - % and it loses the chapter title and the aux file entries for the - % index. The easiest way to prevent this problem is to make sure - % there is some text. - \putwordIndexNonexistent - \else - % - % If the index file exists but is empty, then \openin leaves \ifeof - % false. We have to make TeX try to read something from the file, so - % it can discover if there is anything in it. - \read 1 to \temp - \ifeof 1 - \putwordIndexIsEmpty - \else - % Index files are almost Texinfo source, but we use \ as the escape - % character. It would be better to use @, but that's too big a change - % to make right now. - \def\indexbackslash{\backslashcurfont}% - \catcode`\\ = 0 - \escapechar = `\\ - \begindoublecolumns - \input \jobname.#1s - \enddoublecolumns - \fi - \fi - \closein 1 -\endgroup} - -% These macros are used by the sorted index file itself. -% Change them to control the appearance of the index. - -\def\initial#1{{% - % Some minor font changes for the special characters. - \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt - % - % Remove any glue we may have, we'll be inserting our own. - \removelastskip - % - % We like breaks before the index initials, so insert a bonus. - \nobreak - \vskip 0pt plus 3\baselineskip - \penalty 0 - \vskip 0pt plus -3\baselineskip - % - % Typeset the initial. Making this add up to a whole number of - % baselineskips increases the chance of the dots lining up from column - % to column. It still won't often be perfect, because of the stretch - % we need before each entry, but it's better. - % - % No shrink because it confuses \balancecolumns. - \vskip 1.67\baselineskip plus .5\baselineskip - \leftline{\secbf #1}% - % Do our best not to break after the initial. - \nobreak - \vskip .33\baselineskip plus .1\baselineskip -}} - -% \entry typesets a paragraph consisting of the text (#1), dot leaders, and -% then page number (#2) flushed to the right margin. It is used for index -% and table of contents entries. The paragraph is indented by \leftskip. -% -% A straightforward implementation would start like this: -% \def\entry#1#2{... -% But this freezes the catcodes in the argument, and can cause problems to -% @code, which sets - active. This problem was fixed by a kludge--- -% ``-'' was active throughout whole index, but this isn't really right. -% The right solution is to prevent \entry from swallowing the whole text. -% --kasal, 21nov03 -\def\entry{% - \begingroup - % - % Start a new paragraph if necessary, so our assignments below can't - % affect previous text. - \par - % - % Do not fill out the last line with white space. - \parfillskip = 0in - % - % No extra space above this paragraph. - \parskip = 0in - % - % Do not prefer a separate line ending with a hyphen to fewer lines. - \finalhyphendemerits = 0 - % - % \hangindent is only relevant when the entry text and page number - % don't both fit on one line. In that case, bob suggests starting the - % dots pretty far over on the line. Unfortunately, a large - % indentation looks wrong when the entry text itself is broken across - % lines. So we use a small indentation and put up with long leaders. - % - % \hangafter is reset to 1 (which is the value we want) at the start - % of each paragraph, so we need not do anything with that. - \hangindent = 2em - % - % When the entry text needs to be broken, just fill out the first line - % with blank space. - \rightskip = 0pt plus1fil - % - % A bit of stretch before each entry for the benefit of balancing - % columns. - \vskip 0pt plus1pt - % - % When reading the text of entry, convert explicit line breaks - % from @* into spaces. The user might give these in long section - % titles, for instance. - \def\*{\unskip\space\ignorespaces}% - \def\entrybreak{\hfil\break}% - % - % Swallow the left brace of the text (first parameter): - \afterassignment\doentry - \let\temp = -} -\def\entrybreak{\unskip\space\ignorespaces}% -\def\doentry{% - \bgroup % Instead of the swallowed brace. - \noindent - \aftergroup\finishentry - % And now comes the text of the entry. -} -\def\finishentry#1{% - % #1 is the page number. - % - % The following is kludged to not output a line of dots in the index if - % there are no page numbers. The next person who breaks this will be - % cursed by a Unix daemon. - \setbox\boxA = \hbox{#1}% - \ifdim\wd\boxA = 0pt - \ % - \else - % - % If we must, put the page number on a line of its own, and fill out - % this line with blank space. (The \hfil is overwhelmed with the - % fill leaders glue in \indexdotfill if the page number does fit.) - \hfil\penalty50 - \null\nobreak\indexdotfill % Have leaders before the page number. - % - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without it, a spurious underfull - % \hbox ensues. - \ifpdf - \pdfgettoks#1.% - \ \the\toksA - \else - \ #1% - \fi - \fi - \par - \endgroup -} - -% Like plain.tex's \dotfill, except uses up at least 1 em. -\def\indexdotfill{\cleaders - \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} - -\def\primary #1{\line{#1\hfil}} - -\newskip\secondaryindent \secondaryindent=0.5cm -\def\secondary#1#2{{% - \parfillskip=0in - \parskip=0in - \hangindent=1in - \hangafter=1 - \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill - \ifpdf - \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. - \else - #2 - \fi - \par -}} - -% Define two-column mode, which we use to typeset indexes. -% Adapted from the TeXbook, page 416, which is to say, -% the manmac.tex format used to print the TeXbook itself. -\catcode`\@=11 - -\newbox\partialpage -\newdimen\doublecolumnhsize - -\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns - % Grab any single-column material above us. - \output = {% - % - % Here is a possibility not foreseen in manmac: if we accumulate a - % whole lot of material, we might end up calling this \output - % routine twice in a row (see the doublecol-lose test, which is - % essentially a couple of indexes with @setchapternewpage off). In - % that case we just ship out what is in \partialpage with the normal - % output routine. Generally, \partialpage will be empty when this - % runs and this will be a no-op. See the indexspread.tex test case. - \ifvoid\partialpage \else - \onepageout{\pagecontents\partialpage}% - \fi - % - \global\setbox\partialpage = \vbox{% - % Unvbox the main output page. - \unvbox\PAGE - \kern-\topskip \kern\baselineskip - }% - }% - \eject % run that output routine to set \partialpage - % - % Use the double-column output routine for subsequent pages. - \output = {\doublecolumnout}% - % - % Change the page size parameters. We could do this once outside this - % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 - % format, but then we repeat the same computation. Repeating a couple - % of assignments once per index is clearly meaningless for the - % execution time, so we may as well do it in one place. - % - % First we halve the line length, less a little for the gutter between - % the columns. We compute the gutter based on the line length, so it - % changes automatically with the paper format. The magic constant - % below is chosen so that the gutter has the same value (well, +-<1pt) - % as it did when we hard-coded it. - % - % We put the result in a separate register, \doublecolumhsize, so we - % can restore it in \pagesofar, after \hsize itself has (potentially) - % been clobbered. - % - \doublecolumnhsize = \hsize - \advance\doublecolumnhsize by -.04154\hsize - \divide\doublecolumnhsize by 2 - \hsize = \doublecolumnhsize - % - % Double the \vsize as well. (We don't need a separate register here, - % since nobody clobbers \vsize.) - \vsize = 2\vsize -} - -% The double-column output routine for all double-column pages except -% the last. -% -\def\doublecolumnout{% - \splittopskip=\topskip \splitmaxdepth=\maxdepth - % Get the available space for the double columns -- the normal - % (undoubled) page height minus any material left over from the - % previous page. - \dimen@ = \vsize - \divide\dimen@ by 2 - \advance\dimen@ by -\ht\partialpage - % - % box0 will be the left-hand column, box2 the right. - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar - \unvbox255 - \penalty\outputpenalty -} -% -% Re-output the contents of the output page -- any previous material, -% followed by the two boxes we just split, in box0 and box2. -\def\pagesofar{% - \unvbox\partialpage - % - \hsize = \doublecolumnhsize - \wd0=\hsize \wd2=\hsize - \hbox to\pagewidth{\box0\hfil\box2}% -} -% -% All done with double columns. -\def\enddoublecolumns{% - % The following penalty ensures that the page builder is exercised - % _before_ we change the output routine. This is necessary in the - % following situation: - % - % The last section of the index consists only of a single entry. - % Before this section, \pagetotal is less than \pagegoal, so no - % break occurs before the last section starts. However, the last - % section, consisting of \initial and the single \entry, does not - % fit on the page and has to be broken off. Without the following - % penalty the page builder will not be exercised until \eject - % below, and by that time we'll already have changed the output - % routine to the \balancecolumns version, so the next-to-last - % double-column page will be processed with \balancecolumns, which - % is wrong: The two columns will go to the main vertical list, with - % the broken-off section in the recent contributions. As soon as - % the output routine finishes, TeX starts reconsidering the page - % break. The two columns and the broken-off section both fit on the - % page, because the two columns now take up only half of the page - % goal. When TeX sees \eject from below which follows the final - % section, it invokes the new output routine that we've set after - % \balancecolumns below; \onepageout will try to fit the two columns - % and the final section into the vbox of \pageheight (see - % \pagebody), causing an overfull box. - % - % Note that glue won't work here, because glue does not exercise the - % page builder, unlike penalties (see The TeXbook, pp. 280-281). - \penalty0 - % - \output = {% - % Split the last of the double-column material. Leave it on the - % current page, no automatic page break. - \balancecolumns - % - % If we end up splitting too much material for the current page, - % though, there will be another page break right after this \output - % invocation ends. Having called \balancecolumns once, we do not - % want to call it again. Therefore, reset \output to its normal - % definition right away. (We hope \balancecolumns will never be - % called on to balance too much material, but if it is, this makes - % the output somewhat more palatable.) - \global\output = {\onepageout{\pagecontents\PAGE}}% - }% - \eject - \endgroup % started in \begindoublecolumns - % - % \pagegoal was set to the doubled \vsize above, since we restarted - % the current page. We're now back to normal single-column - % typesetting, so reset \pagegoal to the normal \vsize (after the - % \endgroup where \vsize got restored). - \pagegoal = \vsize -} -% -% Called at the end of the double column material. -\def\balancecolumns{% - \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. - \dimen@ = \ht0 - \advance\dimen@ by \topskip - \advance\dimen@ by-\baselineskip - \divide\dimen@ by 2 % target to split to - %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% - \splittopskip = \topskip - % Loop until we get a decent breakpoint. - {% - \vbadness = 10000 - \loop - \global\setbox3 = \copy0 - \global\setbox1 = \vsplit3 to \dimen@ - \ifdim\ht3>\dimen@ - \global\advance\dimen@ by 1pt - \repeat - }% - %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% - \setbox0=\vbox to\dimen@{\unvbox1}% - \setbox2=\vbox to\dimen@{\unvbox3}% - % - \pagesofar -} -\catcode`\@ = \other - - -\message{sectioning,} -% Chapters, sections, etc. - -% Let's start with @part. -\outer\parseargdef\part{\partzzz{#1}} -\def\partzzz#1{% - \chapoddpage - \null - \vskip.3\vsize % move it down on the page a bit - \begingroup - \noindent \titlefonts\rmisbold #1\par % the text - \let\lastnode=\empty % no node to associate with - \writetocentry{part}{#1}{}% but put it in the toc - \headingsoff % no headline or footline on the part page - \chapoddpage - \endgroup -} - -% \unnumberedno is an oxymoron. But we count the unnumbered -% sections so that we can refer to them unambiguously in the pdf -% outlines by their "section number". We avoid collisions with chapter -% numbers by starting them at 10000. (If a document ever has 10000 -% chapters, we're in trouble anyway, I'm sure.) -\newcount\unnumberedno \unnumberedno = 10000 -\newcount\chapno -\newcount\secno \secno=0 -\newcount\subsecno \subsecno=0 -\newcount\subsubsecno \subsubsecno=0 - -% This counter is funny since it counts through charcodes of letters A, B, ... -\newcount\appendixno \appendixno = `\@ -% -% \def\appendixletter{\char\the\appendixno} -% We do the following ugly conditional instead of the above simple -% construct for the sake of pdftex, which needs the actual -% letter in the expansion, not just typeset. -% -\def\appendixletter{% - \ifnum\appendixno=`A A% - \else\ifnum\appendixno=`B B% - \else\ifnum\appendixno=`C C% - \else\ifnum\appendixno=`D D% - \else\ifnum\appendixno=`E E% - \else\ifnum\appendixno=`F F% - \else\ifnum\appendixno=`G G% - \else\ifnum\appendixno=`H H% - \else\ifnum\appendixno=`I I% - \else\ifnum\appendixno=`J J% - \else\ifnum\appendixno=`K K% - \else\ifnum\appendixno=`L L% - \else\ifnum\appendixno=`M M% - \else\ifnum\appendixno=`N N% - \else\ifnum\appendixno=`O O% - \else\ifnum\appendixno=`P P% - \else\ifnum\appendixno=`Q Q% - \else\ifnum\appendixno=`R R% - \else\ifnum\appendixno=`S S% - \else\ifnum\appendixno=`T T% - \else\ifnum\appendixno=`U U% - \else\ifnum\appendixno=`V V% - \else\ifnum\appendixno=`W W% - \else\ifnum\appendixno=`X X% - \else\ifnum\appendixno=`Y Y% - \else\ifnum\appendixno=`Z Z% - % The \the is necessary, despite appearances, because \appendixletter is - % expanded while writing the .toc file. \char\appendixno is not - % expandable, thus it is written literally, thus all appendixes come out - % with the same letter (or @) in the toc without it. - \else\char\the\appendixno - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} - -% Each @chapter defines these (using marks) as the number+name, number -% and name of the chapter. Page headings and footings can use -% these. @section does likewise. -\def\thischapter{} -\def\thischapternum{} -\def\thischaptername{} -\def\thissection{} -\def\thissectionnum{} -\def\thissectionname{} - -\newcount\absseclevel % used to calculate proper heading level -\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count - -% @raisesections: treat @section as chapter, @subsection as section, etc. -\def\raisesections{\global\advance\secbase by -1} -\let\up=\raisesections % original BFox name - -% @lowersections: treat @chapter as section, @section as subsection, etc. -\def\lowersections{\global\advance\secbase by 1} -\let\down=\lowersections % original BFox name - -% we only have subsub. -\chardef\maxseclevel = 3 -% -% A numbered section within an unnumbered changes to unnumbered too. -% To achieve this, remember the "biggest" unnum. sec. we are currently in: -\chardef\unnlevel = \maxseclevel -% -% Trace whether the current chapter is an appendix or not: -% \chapheadtype is "N" or "A", unnumbered chapters are ignored. -\def\chapheadtype{N} - -% Choose a heading macro -% #1 is heading type -% #2 is heading level -% #3 is text for heading -\def\genhead#1#2#3{% - % Compute the abs. sec. level: - \absseclevel=#2 - \advance\absseclevel by \secbase - % Make sure \absseclevel doesn't fall outside the range: - \ifnum \absseclevel < 0 - \absseclevel = 0 - \else - \ifnum \absseclevel > 3 - \absseclevel = 3 - \fi - \fi - % The heading type: - \def\headtype{#1}% - \if \headtype U% - \ifnum \absseclevel < \unnlevel - \chardef\unnlevel = \absseclevel - \fi - \else - % Check for appendix sections: - \ifnum \absseclevel = 0 - \edef\chapheadtype{\headtype}% - \else - \if \headtype A\if \chapheadtype N% - \errmessage{@appendix... within a non-appendix chapter}% - \fi\fi - \fi - % Check for numbered within unnumbered: - \ifnum \absseclevel > \unnlevel - \def\headtype{U}% - \else - \chardef\unnlevel = 3 - \fi - \fi - % Now print the heading: - \if \headtype U% - \ifcase\absseclevel - \unnumberedzzz{#3}% - \or \unnumberedseczzz{#3}% - \or \unnumberedsubseczzz{#3}% - \or \unnumberedsubsubseczzz{#3}% - \fi - \else - \if \headtype A% - \ifcase\absseclevel - \appendixzzz{#3}% - \or \appendixsectionzzz{#3}% - \or \appendixsubseczzz{#3}% - \or \appendixsubsubseczzz{#3}% - \fi - \else - \ifcase\absseclevel - \chapterzzz{#3}% - \or \seczzz{#3}% - \or \numberedsubseczzz{#3}% - \or \numberedsubsubseczzz{#3}% - \fi - \fi - \fi - \suppressfirstparagraphindent -} - -% an interface: -\def\numhead{\genhead N} -\def\apphead{\genhead A} -\def\unnmhead{\genhead U} - -% @chapter, @appendix, @unnumbered. Increment top-level counter, reset -% all lower-level sectioning counters to zero. -% -% Also set \chaplevelprefix, which we prepend to @float sequence numbers -% (e.g., figures), q.v. By default (before any chapter), that is empty. -\let\chaplevelprefix = \empty -% -\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz#1{% - % section resetting is \global in case the chapter is in a group, such - % as an @include file. - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\chapno by 1 - % - % Used for \float. - \gdef\chaplevelprefix{\the\chapno.}% - \resetallfloatnos - % - % \putwordChapter can contain complex things in translations. - \toks0=\expandafter{\putwordChapter}% - \message{\the\toks0 \space \the\chapno}% - % - % Write the actual heading. - \chapmacro{#1}{Ynumbered}{\the\chapno}% - % - % So @section and the like are numbered underneath this chapter. - \global\let\section = \numberedsec - \global\let\subsection = \numberedsubsec - \global\let\subsubsection = \numberedsubsubsec -} - -\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz -% -\def\appendixzzz#1{% - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\appendixno by 1 - \gdef\chaplevelprefix{\appendixletter.}% - \resetallfloatnos - % - % \putwordAppendix can contain complex things in translations. - \toks0=\expandafter{\putwordAppendix}% - \message{\the\toks0 \space \appendixletter}% - % - \chapmacro{#1}{Yappendix}{\appendixletter}% - % - \global\let\section = \appendixsec - \global\let\subsection = \appendixsubsec - \global\let\subsubsection = \appendixsubsubsec -} - -% normally unnmhead0 calls unnumberedzzz: -\outer\parseargdef\unnumbered{\unnmhead0{#1}} -\def\unnumberedzzz#1{% - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\unnumberedno by 1 - % - % Since an unnumbered has no number, no prefix for figures. - \global\let\chaplevelprefix = \empty - \resetallfloatnos - % - % This used to be simply \message{#1}, but TeX fully expands the - % argument to \message. Therefore, if #1 contained @-commands, TeX - % expanded them. For example, in `@unnumbered The @cite{Book}', TeX - % expanded @cite (which turns out to cause errors because \cite is meant - % to be executed, not expanded). - % - % Anyway, we don't want the fully-expanded definition of @cite to appear - % as a result of the \message, we just want `@cite' itself. We use - % \the to achieve this: TeX expands \the only once, - % simply yielding the contents of . (We also do this for - % the toc entries.) - \toks0 = {#1}% - \message{(\the\toks0)}% - % - \chapmacro{#1}{Ynothing}{\the\unnumberedno}% - % - \global\let\section = \unnumberedsec - \global\let\subsection = \unnumberedsubsec - \global\let\subsubsection = \unnumberedsubsubsec -} - -% @centerchap is like @unnumbered, but the heading is centered. -\outer\parseargdef\centerchap{% - % Well, we could do the following in a group, but that would break - % an assumption that \chapmacro is called at the outermost level. - % Thus we are safer this way: --kasal, 24feb04 - \let\centerparametersmaybe = \centerparameters - \unnmhead0{#1}% - \let\centerparametersmaybe = \relax -} - -% @top is like @unnumbered. -\let\top\unnumbered - -% Sections. -% -\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz -\def\seczzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% -} - -% normally calls appendixsectionzzz: -\outer\parseargdef\appendixsection{\apphead1{#1}} -\def\appendixsectionzzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% -} -\let\appendixsec\appendixsection - -% normally calls unnumberedseczzz: -\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} -\def\unnumberedseczzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% -} - -% Subsections. -% -% normally calls numberedsubseczzz: -\outer\parseargdef\numberedsubsec{\numhead2{#1}} -\def\numberedsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% -} - -% normally calls appendixsubseczzz: -\outer\parseargdef\appendixsubsec{\apphead2{#1}} -\def\appendixsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Yappendix}% - {\appendixletter.\the\secno.\the\subsecno}% -} - -% normally calls unnumberedsubseczzz: -\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} -\def\unnumberedsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Ynothing}% - {\the\unnumberedno.\the\secno.\the\subsecno}% -} - -% Subsubsections. -% -% normally numberedsubsubseczzz: -\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} -\def\numberedsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Ynumbered}% - {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -% normally appendixsubsubseczzz: -\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} -\def\appendixsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Yappendix}% - {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -% normally unnumberedsubsubseczzz: -\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} -\def\unnumberedsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Ynothing}% - {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -% These macros control what the section commands do, according -% to what kind of chapter we are in (ordinary, appendix, or unnumbered). -% Define them by default for a numbered chapter. -\let\section = \numberedsec -\let\subsection = \numberedsubsec -\let\subsubsection = \numberedsubsubsec - -% Define @majorheading, @heading and @subheading - -\def\majorheading{% - {\advance\chapheadingskip by 10pt \chapbreak }% - \parsearg\chapheadingzzz -} - -\def\chapheading{\chapbreak \parsearg\chapheadingzzz} -\def\chapheadingzzz#1{% - \vbox{\chapfonts \raggedtitlesettings #1\par}% - \nobreak\bigskip \nobreak - \suppressfirstparagraphindent -} - -% @heading, @subheading, @subsubheading. -\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} -\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} -\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} - -% These macros generate a chapter, section, etc. heading only -% (including whitespace, linebreaking, etc. around it), -% given all the information in convenient, parsed form. - -% Args are the skip and penalty (usually negative) -\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} - -% Parameter controlling skip before chapter headings (if needed) -\newskip\chapheadingskip - -% Define plain chapter starts, and page on/off switching for it. -\def\chapbreak{\dobreak \chapheadingskip {-4000}} -\def\chappager{\par\vfill\supereject} -% Because \domark is called before \chapoddpage, the filler page will -% get the headings for the next chapter, which is wrong. But we don't -% care -- we just disable all headings on the filler page. -\def\chapoddpage{% - \chappager - \ifodd\pageno \else - \begingroup - \headingsoff - \null - \chappager - \endgroup - \fi -} - -\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} - -\def\CHAPPAGoff{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chapbreak -\global\let\pagealignmacro=\chappager} - -\def\CHAPPAGon{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chappager -\global\let\pagealignmacro=\chappager -\global\def\HEADINGSon{\HEADINGSsingle}} - -\def\CHAPPAGodd{% -\global\let\contentsalignmacro = \chapoddpage -\global\let\pchapsepmacro=\chapoddpage -\global\let\pagealignmacro=\chapoddpage -\global\def\HEADINGSon{\HEADINGSdouble}} - -\CHAPPAGon - -% Chapter opening. -% -% #1 is the text, #2 is the section type (Ynumbered, Ynothing, -% Yappendix, Yomitfromtoc), #3 the chapter number. -% -% To test against our argument. -\def\Ynothingkeyword{Ynothing} -\def\Yomitfromtockeyword{Yomitfromtoc} -\def\Yappendixkeyword{Yappendix} -% -\def\chapmacro#1#2#3{% - % Insert the first mark before the heading break (see notes for \domark). - \let\prevchapterdefs=\lastchapterdefs - \let\prevsectiondefs=\lastsectiondefs - \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% - \gdef\thissection{}}% - % - \def\temptype{#2}% - \ifx\temptype\Ynothingkeyword - \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% - \gdef\thischapter{\thischaptername}}% - \else\ifx\temptype\Yomitfromtockeyword - \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% - \gdef\thischapter{}}% - \else\ifx\temptype\Yappendixkeyword - \toks0={#1}% - \xdef\lastchapterdefs{% - \gdef\noexpand\thischaptername{\the\toks0}% - \gdef\noexpand\thischapternum{\appendixletter}% - % \noexpand\putwordAppendix avoids expanding indigestible - % commands in some of the translations. - \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} - \noexpand\thischapternum: - \noexpand\thischaptername}% - }% - \else - \toks0={#1}% - \xdef\lastchapterdefs{% - \gdef\noexpand\thischaptername{\the\toks0}% - \gdef\noexpand\thischapternum{\the\chapno}% - % \noexpand\putwordChapter avoids expanding indigestible - % commands in some of the translations. - \gdef\noexpand\thischapter{\noexpand\putwordChapter{} - \noexpand\thischapternum: - \noexpand\thischaptername}% - }% - \fi\fi\fi - % - % Output the mark. Pass it through \safewhatsit, to take care of - % the preceding space. - \safewhatsit\domark - % - % Insert the chapter heading break. - \pchapsepmacro - % - % Now the second mark, after the heading break. No break points - % between here and the heading. - \let\prevchapterdefs=\lastchapterdefs - \let\prevsectiondefs=\lastsectiondefs - \domark - % - {% - \chapfonts \rmisbold - % - % Have to define \lastsection before calling \donoderef, because the - % xref code eventually uses it. On the other hand, it has to be called - % after \pchapsepmacro, or the headline will change too soon. - \gdef\lastsection{#1}% - % - % Only insert the separating space if we have a chapter/appendix - % number, and don't print the unnumbered ``number''. - \ifx\temptype\Ynothingkeyword - \setbox0 = \hbox{}% - \def\toctype{unnchap}% - \else\ifx\temptype\Yomitfromtockeyword - \setbox0 = \hbox{}% contents like unnumbered, but no toc entry - \def\toctype{omit}% - \else\ifx\temptype\Yappendixkeyword - \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% - \def\toctype{app}% - \else - \setbox0 = \hbox{#3\enspace}% - \def\toctype{numchap}% - \fi\fi\fi - % - % Write the toc entry for this chapter. Must come before the - % \donoderef, because we include the current node name in the toc - % entry, and \donoderef resets it to empty. - \writetocentry{\toctype}{#1}{#3}% - % - % For pdftex, we have to write out the node definition (aka, make - % the pdfdest) after any page break, but before the actual text has - % been typeset. If the destination for the pdf outline is after the - % text, then jumping from the outline may wind up with the text not - % being visible, for instance under high magnification. - \donoderef{#2}% - % - % Typeset the actual heading. - \nobreak % Avoid page breaks at the interline glue. - \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe - \unhbox0 #1\par}% - }% - \nobreak\bigskip % no page break after a chapter title - \nobreak -} - -% @centerchap -- centered and unnumbered. -\let\centerparametersmaybe = \relax -\def\centerparameters{% - \advance\rightskip by 3\rightskip - \leftskip = \rightskip - \parfillskip = 0pt -} - - -% I don't think this chapter style is supported any more, so I'm not -% updating it with the new noderef stuff. We'll see. --karl, 11aug03. -% -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} -% -\def\unnchfopen #1{% - \chapoddpage - \vbox{\chapfonts \raggedtitlesettings #1\par}% - \nobreak\bigskip\nobreak -} -\def\chfopen #1#2{\chapoddpage {\chapfonts -\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% -\par\penalty 5000 % -} -\def\centerchfopen #1{% - \chapoddpage - \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% - \nobreak\bigskip \nobreak -} -\def\CHAPFopen{% - \global\let\chapmacro=\chfopen - \global\let\centerchapmacro=\centerchfopen} - - -% Section titles. These macros combine the section number parts and -% call the generic \sectionheading to do the printing. -% -\newskip\secheadingskip -\def\secheadingbreak{\dobreak \secheadingskip{-1000}} - -% Subsection titles. -\newskip\subsecheadingskip -\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} - -% Subsubsection titles. -\def\subsubsecheadingskip{\subsecheadingskip} -\def\subsubsecheadingbreak{\subsecheadingbreak} - - -% Print any size, any type, section title. -% -% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is -% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the -% section number. -% -\def\seckeyword{sec} -% -\def\sectionheading#1#2#3#4{% - {% - \checkenv{}% should not be in an environment. - % - % Switch to the right set of fonts. - \csname #2fonts\endcsname \rmisbold - % - \def\sectionlevel{#2}% - \def\temptype{#3}% - % - % Insert first mark before the heading break (see notes for \domark). - \let\prevsectiondefs=\lastsectiondefs - \ifx\temptype\Ynothingkeyword - \ifx\sectionlevel\seckeyword - \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% - \gdef\thissection{\thissectionname}}% - \fi - \else\ifx\temptype\Yomitfromtockeyword - % Don't redefine \thissection. - \else\ifx\temptype\Yappendixkeyword - \ifx\sectionlevel\seckeyword - \toks0={#1}% - \xdef\lastsectiondefs{% - \gdef\noexpand\thissectionname{\the\toks0}% - \gdef\noexpand\thissectionnum{#4}% - % \noexpand\putwordSection avoids expanding indigestible - % commands in some of the translations. - \gdef\noexpand\thissection{\noexpand\putwordSection{} - \noexpand\thissectionnum: - \noexpand\thissectionname}% - }% - \fi - \else - \ifx\sectionlevel\seckeyword - \toks0={#1}% - \xdef\lastsectiondefs{% - \gdef\noexpand\thissectionname{\the\toks0}% - \gdef\noexpand\thissectionnum{#4}% - % \noexpand\putwordSection avoids expanding indigestible - % commands in some of the translations. - \gdef\noexpand\thissection{\noexpand\putwordSection{} - \noexpand\thissectionnum: - \noexpand\thissectionname}% - }% - \fi - \fi\fi\fi - % - % Go into vertical mode. Usually we'll already be there, but we - % don't want the following whatsit to end up in a preceding paragraph - % if the document didn't happen to have a blank line. - \par - % - % Output the mark. Pass it through \safewhatsit, to take care of - % the preceding space. - \safewhatsit\domark - % - % Insert space above the heading. - \csname #2headingbreak\endcsname - % - % Now the second mark, after the heading break. No break points - % between here and the heading. - \let\prevsectiondefs=\lastsectiondefs - \domark - % - % Only insert the space after the number if we have a section number. - \ifx\temptype\Ynothingkeyword - \setbox0 = \hbox{}% - \def\toctype{unn}% - \gdef\lastsection{#1}% - \else\ifx\temptype\Yomitfromtockeyword - % for @headings -- no section number, don't include in toc, - % and don't redefine \lastsection. - \setbox0 = \hbox{}% - \def\toctype{omit}% - \let\sectionlevel=\empty - \else\ifx\temptype\Yappendixkeyword - \setbox0 = \hbox{#4\enspace}% - \def\toctype{app}% - \gdef\lastsection{#1}% - \else - \setbox0 = \hbox{#4\enspace}% - \def\toctype{num}% - \gdef\lastsection{#1}% - \fi\fi\fi - % - % Write the toc entry (before \donoderef). See comments in \chapmacro. - \writetocentry{\toctype\sectionlevel}{#1}{#4}% - % - % Write the node reference (= pdf destination for pdftex). - % Again, see comments in \chapmacro. - \donoderef{#3}% - % - % Interline glue will be inserted when the vbox is completed. - % That glue will be a valid breakpoint for the page, since it'll be - % preceded by a whatsit (usually from the \donoderef, or from the - % \writetocentry if there was no node). We don't want to allow that - % break, since then the whatsits could end up on page n while the - % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. - \nobreak - % - % Output the actual section heading. - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright - \hangindent=\wd0 % zero if no section number - \unhbox0 #1}% - }% - % Add extra space after the heading -- half of whatever came above it. - % Don't allow stretch, though. - \kern .5 \csname #2headingskip\endcsname - % - % Do not let the kern be a potential breakpoint, as it would be if it - % was followed by glue. - \nobreak - % - % We'll almost certainly start a paragraph next, so don't let that - % glue accumulate. (Not a breakpoint because it's preceded by a - % discardable item.) However, when a paragraph is not started next - % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out - % or the negative glue will cause weirdly wrong output, typically - % obscuring the section heading with something else. - \vskip-\parskip - % - % This is so the last item on the main vertical list is a known - % \penalty > 10000, so \startdefun, etc., can recognize the situation - % and do the needful. - \penalty 10001 -} - - -\message{toc,} -% Table of contents. -\newwrite\tocfile - -% Write an entry to the toc file, opening it if necessary. -% Called from @chapter, etc. -% -% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} -% We append the current node name (if any) and page number as additional -% arguments for the \{chap,sec,...}entry macros which will eventually -% read this. The node name is used in the pdf outlines as the -% destination to jump to. -% -% We open the .toc file for writing here instead of at @setfilename (or -% any other fixed time) so that @contents can be anywhere in the document. -% But if #1 is `omit', then we don't do anything. This is used for the -% table of contents chapter openings themselves. -% -\newif\iftocfileopened -\def\omitkeyword{omit}% -% -\def\writetocentry#1#2#3{% - \edef\writetoctype{#1}% - \ifx\writetoctype\omitkeyword \else - \iftocfileopened\else - \immediate\openout\tocfile = \jobname.toc - \global\tocfileopenedtrue - \fi - % - \iflinks - {\atdummies - \edef\temp{% - \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% - \temp - }% - \fi - \fi - % - % Tell \shipout to create a pdf destination on each page, if we're - % writing pdf. These are used in the table of contents. We can't - % just write one on every page because the title pages are numbered - % 1 and 2 (the page numbers aren't printed), and so are the first - % two pages of the document. Thus, we'd have two destinations named - % `1', and two named `2'. - \ifpdf \global\pdfmakepagedesttrue \fi -} - - -% These characters do not print properly in the Computer Modern roman -% fonts, so we must take special care. This is more or less redundant -% with the Texinfo input format setup at the end of this file. -% -\def\activecatcodes{% - \catcode`\"=\active - \catcode`\$=\active - \catcode`\<=\active - \catcode`\>=\active - \catcode`\\=\active - \catcode`\^=\active - \catcode`\_=\active - \catcode`\|=\active - \catcode`\~=\active -} - - -% Read the toc file, which is essentially Texinfo input. -\def\readtocfile{% - \setupdatafile - \activecatcodes - \input \tocreadfilename -} - -\newskip\contentsrightmargin \contentsrightmargin=1in -\newcount\savepageno -\newcount\lastnegativepageno \lastnegativepageno = -1 - -% Prepare to read what we've written to \tocfile. -% -\def\startcontents#1{% - % If @setchapternewpage on, and @headings double, the contents should - % start on an odd page, unlike chapters. Thus, we maintain - % \contentsalignmacro in parallel with \pagealignmacro. - % From: Torbjorn Granlund - \contentsalignmacro - \immediate\closeout\tocfile - % - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \chapmacro{#1}{Yomitfromtoc}{}% - % - \savepageno = \pageno - \begingroup % Set up to handle contents files properly. - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. - % - % Roman numerals for page numbers. - \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi -} - -% redefined for the two-volume lispref. We always output on -% \jobname.toc even if this is redefined. -% -\def\tocreadfilename{\jobname.toc} - -% Normal (long) toc. -% -\def\contents{% - \startcontents{\putwordTOC}% - \openin 1 \tocreadfilename\space - \ifeof 1 \else - \readtocfile - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \ifeof 1 \else - \pdfmakeoutlines - \fi - \closein 1 - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} - -% And just the chapters. -\def\summarycontents{% - \startcontents{\putwordShortTOC}% - % - \let\partentry = \shortpartentry - \let\numchapentry = \shortchapentry - \let\appentry = \shortchapentry - \let\unnchapentry = \shortunnchapentry - % We want a true roman here for the page numbers. - \secfonts - \let\rm=\shortcontrm \let\bf=\shortcontbf - \let\sl=\shortcontsl \let\tt=\shortconttt - \rm - \hyphenpenalty = 10000 - \advance\baselineskip by 1pt % Open it up a little. - \def\numsecentry##1##2##3##4{} - \let\appsecentry = \numsecentry - \let\unnsecentry = \numsecentry - \let\numsubsecentry = \numsecentry - \let\appsubsecentry = \numsecentry - \let\unnsubsecentry = \numsecentry - \let\numsubsubsecentry = \numsecentry - \let\appsubsubsecentry = \numsecentry - \let\unnsubsubsecentry = \numsecentry - \openin 1 \tocreadfilename\space - \ifeof 1 \else - \readtocfile - \fi - \closein 1 - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} -\let\shortcontents = \summarycontents - -% Typeset the label for a chapter or appendix for the short contents. -% The arg is, e.g., `A' for an appendix, or `3' for a chapter. -% -\def\shortchaplabel#1{% - % This space should be enough, since a single number is .5em, and the - % widest letter (M) is 1em, at least in the Computer Modern fonts. - % But use \hss just in case. - % (This space doesn't include the extra space that gets added after - % the label; that gets put in by \shortchapentry above.) - % - % We'd like to right-justify chapter numbers, but that looks strange - % with appendix letters. And right-justifying numbers and - % left-justifying letters looks strange when there is less than 10 - % chapters. Have to read the whole toc once to know how many chapters - % there are before deciding ... - \hbox to 1em{#1\hss}% -} - -% These macros generate individual entries in the table of contents. -% The first argument is the chapter or section name. -% The last argument is the page number. -% The arguments in between are the chapter number, section number, ... - -% Parts, in the main contents. Replace the part number, which doesn't -% exist, with an empty box. Let's hope all the numbers have the same width. -% Also ignore the page number, which is conventionally not printed. -\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} -\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} -% -% Parts, in the short toc. -\def\shortpartentry#1#2#3#4{% - \penalty-300 - \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip - \shortchapentry{{\bf #1}}{\numeralbox}{}{}% -} - -% Chapters, in the main contents. -\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} -% -% Chapters, in the short toc. -% See comments in \dochapentry re vbox and related settings. -\def\shortchapentry#1#2#3#4{% - \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% -} - -% Appendices, in the main contents. -% Need the word Appendix, and a fixed-size box. -% -\def\appendixbox#1{% - % We use M since it's probably the widest letter. - \setbox0 = \hbox{\putwordAppendix{} M}% - \hbox to \wd0{\putwordAppendix{} #1\hss}} -% -\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} - -% Unnumbered chapters. -\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} -\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} - -% Sections. -\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} -\let\appsecentry=\numsecentry -\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} - -% Subsections. -\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} -\let\appsubsecentry=\numsubsecentry -\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} - -% And subsubsections. -\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} -\let\appsubsubsecentry=\numsubsubsecentry -\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} - -% This parameter controls the indentation of the various levels. -% Same as \defaultparindent. -\newdimen\tocindent \tocindent = 15pt - -% Now for the actual typesetting. In all these, #1 is the text and #2 is the -% page number. -% -% If the toc has to be broken over pages, we want it to be at chapters -% if at all possible; hence the \penalty. -\def\dochapentry#1#2{% - \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip - \begingroup - \chapentryfonts - \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup - \nobreak\vskip .25\baselineskip plus.1\baselineskip -} - -\def\dosecentry#1#2{\begingroup - \secentryfonts \leftskip=\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsecentry#1#2{\begingroup - \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsubsecentry#1#2{\begingroup - \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -% We use the same \entry macro as for the index entries. -\let\tocentry = \entry - -% Space between chapter (or whatever) number and the title. -\def\labelspace{\hskip1em \relax} - -\def\dopageno#1{{\rm #1}} -\def\doshortpageno#1{{\rm #1}} - -\def\chapentryfonts{\secfonts \rm} -\def\secentryfonts{\textfonts} -\def\subsecentryfonts{\textfonts} -\def\subsubsecentryfonts{\textfonts} - - -\message{environments,} -% @foo ... @end foo. - -% @tex ... @end tex escapes into raw TeX temporarily. -% One exception: @ is still an escape character, so that @end tex works. -% But \@ or @@ will get a plain @ character. - -\envdef\tex{% - \setupmarkupstyle{tex}% - \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 - \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 - \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie - \catcode `\%=14 - \catcode `\+=\other - \catcode `\"=\other - \catcode `\|=\other - \catcode `\<=\other - \catcode `\>=\other - \catcode`\`=\other - \catcode`\'=\other - \escapechar=`\\ - % - % ' is active in math mode (mathcode"8000). So reset it, and all our - % other math active characters (just in case), to plain's definitions. - \mathactive - % - \let\b=\ptexb - \let\bullet=\ptexbullet - \let\c=\ptexc - \let\,=\ptexcomma - \let\.=\ptexdot - \let\dots=\ptexdots - \let\equiv=\ptexequiv - \let\!=\ptexexclam - \let\i=\ptexi - \let\indent=\ptexindent - \let\noindent=\ptexnoindent - \let\{=\ptexlbrace - \let\+=\tabalign - \let\}=\ptexrbrace - \let\/=\ptexslash - \let\*=\ptexstar - \let\t=\ptext - \expandafter \let\csname top\endcsname=\ptextop % outer - \let\frenchspacing=\plainfrenchspacing - % - \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% - \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% - \def\@{@}% -} -% There is no need to define \Etex. - -% Define @lisp ... @end lisp. -% @lisp environment forms a group so it can rebind things, -% including the definition of @end lisp (which normally is erroneous). - -% Amount to narrow the margins by for @lisp. -\newskip\lispnarrowing \lispnarrowing=0.4in - -% This is the definition that ^^M gets inside @lisp, @example, and other -% such environments. \null is better than a space, since it doesn't -% have any width. -\def\lisppar{\null\endgraf} - -% This space is always present above and below environments. -\newskip\envskipamount \envskipamount = 0pt - -% Make spacing and below environment symmetrical. We use \parskip here -% to help in doing that, since in @example-like environments \parskip -% is reset to zero; thus the \afterenvbreak inserts no space -- but the -% start of the next paragraph will insert \parskip. -% -\def\aboveenvbreak{{% - % =10000 instead of <10000 because of a special case in \itemzzz and - % \sectionheading, q.v. - \ifnum \lastpenalty=10000 \else - \advance\envskipamount by \parskip - \endgraf - \ifdim\lastskip<\envskipamount - \removelastskip - % it's not a good place to break if the last penalty was \nobreak - % or better ... - \ifnum\lastpenalty<10000 \penalty-50 \fi - \vskip\envskipamount - \fi - \fi -}} - -\let\afterenvbreak = \aboveenvbreak - -% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will -% also clear it, so that its embedded environments do the narrowing again. -\let\nonarrowing=\relax - -% @cartouche ... @end cartouche: draw rectangle w/rounded corners around -% environment contents. -\font\circle=lcircle10 -\newdimen\circthick -\newdimen\cartouter\newdimen\cartinner -\newskip\normbskip\newskip\normpskip\newskip\normlskip -\circthick=\fontdimen8\circle -% -\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth -\def\ctr{{\hskip 6pt\circle\char'010}} -\def\cbl{{\circle\char'012\hskip -6pt}} -\def\cbr{{\hskip 6pt\circle\char'011}} -\def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} -\def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} -% -\newskip\lskip\newskip\rskip - -\envdef\cartouche{% - \ifhmode\par\fi % can't be in the midst of a paragraph. - \startsavinginserts - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt % we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18.4pt % allow for 3pt kerns on either - % side, and for 6pt waste from - % each corner char, and rule thickness - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing = t% - % - % If this cartouche directly follows a sectioning command, we need the - % \parskip glue (backspaced over by default) or the cartouche can - % collide with the section heading. - \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi - % - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \kern3pt - \hsize=\cartinner - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip - \comment % For explanation, see the end of def\group. -} -\def\Ecartouche{% - \ifhmode\par\fi - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup - \checkinserts -} - - -% This macro is called at the beginning of all the @example variants, -% inside a group. -\newdimen\nonfillparindent -\def\nonfillstart{% - \aboveenvbreak - \hfuzz = 12pt % Don't be fussy - \sepspaces % Make spaces be word-separators rather than space tokens. - \let\par = \lisppar % don't ignore blank lines - \obeylines % each line of input is a line of output - \parskip = 0pt - % Turn off paragraph indentation but redefine \indent to emulate - % the normal \indent. - \nonfillparindent=\parindent - \parindent = 0pt - \let\indent\nonfillindent - % - \emergencystretch = 0pt % don't try to avoid overfull boxes - \ifx\nonarrowing\relax - \advance \leftskip by \lispnarrowing - \exdentamount=\lispnarrowing - \else - \let\nonarrowing = \relax - \fi - \let\exdent=\nofillexdent -} - -\begingroup -\obeyspaces -% We want to swallow spaces (but not other tokens) after the fake -% @indent in our nonfill-environments, where spaces are normally -% active and set to @tie, resulting in them not being ignored after -% @indent. -\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% -\gdef\nonfillindentcheck{% -\ifx\temp % -\expandafter\nonfillindentgobble% -\else% -\leavevmode\nonfillindentbox% -\fi% -}% -\endgroup -\def\nonfillindentgobble#1{\nonfillindent} -\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} - -% If you want all examples etc. small: @set dispenvsize small. -% If you want even small examples the full size: @set dispenvsize nosmall. -% This affects the following displayed environments: -% @example, @display, @format, @lisp -% -\def\smallword{small} -\def\nosmallword{nosmall} -\let\SETdispenvsize\relax -\def\setnormaldispenv{% - \ifx\SETdispenvsize\smallword - % end paragraph for sake of leading, in case document has no blank - % line. This is redundant with what happens in \aboveenvbreak, but - % we need to do it before changing the fonts, and it's inconvenient - % to change the fonts afterward. - \ifnum \lastpenalty=10000 \else \endgraf \fi - \smallexamplefonts \rm - \fi -} -\def\setsmalldispenv{% - \ifx\SETdispenvsize\nosmallword - \else - \ifnum \lastpenalty=10000 \else \endgraf \fi - \smallexamplefonts \rm - \fi -} - -% We often define two environments, @foo and @smallfoo. -% Let's do it in one command. #1 is the env name, #2 the definition. -\def\makedispenvdef#1#2{% - \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% - \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% - \expandafter\let\csname E#1\endcsname \afterenvbreak - \expandafter\let\csname Esmall#1\endcsname \afterenvbreak -} - -% Define two environment synonyms (#1 and #2) for an environment. -\def\maketwodispenvdef#1#2#3{% - \makedispenvdef{#1}{#3}% - \makedispenvdef{#2}{#3}% -} -% -% @lisp: indented, narrowed, typewriter font; -% @example: same as @lisp. -% -% @smallexample and @smalllisp: use smaller fonts. -% Originally contributed by Pavel@xerox. -% -\maketwodispenvdef{lisp}{example}{% - \nonfillstart - \tt\setupmarkupstyle{example}% - \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. - \gobble % eat return -} -% @display/@smalldisplay: same as @lisp except keep current font. -% -\makedispenvdef{display}{% - \nonfillstart - \gobble -} - -% @format/@smallformat: same as @display except don't narrow margins. -% -\makedispenvdef{format}{% - \let\nonarrowing = t% - \nonfillstart - \gobble -} - -% @flushleft: same as @format, but doesn't obey \SETdispenvsize. -\envdef\flushleft{% - \let\nonarrowing = t% - \nonfillstart - \gobble -} -\let\Eflushleft = \afterenvbreak - -% @flushright. -% -\envdef\flushright{% - \let\nonarrowing = t% - \nonfillstart - \advance\leftskip by 0pt plus 1fill\relax - \gobble -} -\let\Eflushright = \afterenvbreak - - -% @raggedright does more-or-less normal line breaking but no right -% justification. From plain.tex. -\envdef\raggedright{% - \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax -} -\let\Eraggedright\par - -\envdef\raggedleft{% - \parindent=0pt \leftskip0pt plus2em - \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt - \hbadness=10000 % Last line will usually be underfull, so turn off - % badness reporting. -} -\let\Eraggedleft\par - -\envdef\raggedcenter{% - \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em - \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt - \hbadness=10000 % Last line will usually be underfull, so turn off - % badness reporting. -} -\let\Eraggedcenter\par - - -% @quotation does normal linebreaking (hence we can't use \nonfillstart) -% and narrows the margins. We keep \parskip nonzero in general, since -% we're doing normal filling. So, when using \aboveenvbreak and -% \afterenvbreak, temporarily make \parskip 0. -% -\makedispenvdef{quotation}{\quotationstart} -% -\def\quotationstart{% - \indentedblockstart % same as \indentedblock, but increase right margin too. - \ifx\nonarrowing\relax - \advance\rightskip by \lispnarrowing - \fi - \parsearg\quotationlabel -} - -% We have retained a nonzero parskip for the environment, since we're -% doing normal filling. -% -\def\Equotation{% - \par - \ifx\quotationauthor\thisisundefined\else - % indent a bit. - \leftline{\kern 2\leftskip \sl ---\quotationauthor}% - \fi - {\parskip=0pt \afterenvbreak}% -} -\def\Esmallquotation{\Equotation} - -% If we're given an argument, typeset it in bold with a colon after. -\def\quotationlabel#1{% - \def\temp{#1}% - \ifx\temp\empty \else - {\bf #1: }% - \fi -} - -% @indentedblock is like @quotation, but indents only on the left and -% has no optional argument. -% -\makedispenvdef{indentedblock}{\indentedblockstart} -% -\def\indentedblockstart{% - {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip - \parindent=0pt - % - % @cartouche defines \nonarrowing to inhibit narrowing at next level down. - \ifx\nonarrowing\relax - \advance\leftskip by \lispnarrowing - \exdentamount = \lispnarrowing - \else - \let\nonarrowing = \relax - \fi -} - -% Keep a nonzero parskip for the environment, since we're doing normal filling. -% -\def\Eindentedblock{% - \par - {\parskip=0pt \afterenvbreak}% -} -\def\Esmallindentedblock{\Eindentedblock} - - -% LaTeX-like @verbatim...@end verbatim and @verb{...} -% If we want to allow any as delimiter, -% we need the curly braces so that makeinfo sees the @verb command, eg: -% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org -% -% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. -% -% [Knuth] p.344; only we need to do the other characters Texinfo sets -% active too. Otherwise, they get lost as the first character on a -% verbatim line. -\def\dospecials{% - \do\ \do\\\do\{\do\}\do\$\do\&% - \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% - \do\<\do\>\do\|\do\@\do+\do\"% - % Don't do the quotes -- if we do, @set txicodequoteundirected and - % @set txicodequotebacktick will not have effect on @verb and - % @verbatim, and ?` and !` ligatures won't get disabled. - %\do\`\do\'% -} -% -% [Knuth] p. 380 -\def\uncatcodespecials{% - \def\do##1{\catcode`##1=\other}\dospecials} -% -% Setup for the @verb command. -% -% Eight spaces for a tab -\begingroup - \catcode`\^^I=\active - \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} -\endgroup -% -\def\setupverb{% - \tt % easiest (and conventionally used) font for verbatim - \def\par{\leavevmode\endgraf}% - \setupmarkupstyle{verb}% - \tabeightspaces - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces -} - -% Setup for the @verbatim environment -% -% Real tab expansion. -\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount -% -% We typeset each line of the verbatim in an \hbox, so we can handle -% tabs. The \global is in case the verbatim line starts with an accent, -% or some other command that starts with a begin-group. Otherwise, the -% entire \verbbox would disappear at the corresponding end-group, before -% it is typeset. Meanwhile, we can't have nested verbatim commands -% (can we?), so the \global won't be overwriting itself. -\newbox\verbbox -\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} -% -\begingroup - \catcode`\^^I=\active - \gdef\tabexpand{% - \catcode`\^^I=\active - \def^^I{\leavevmode\egroup - \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab - \divide\dimen\verbbox by\tabw - \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw - \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw - \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox - }% - } -\endgroup - -% start the verbatim environment. -\def\setupverbatim{% - \let\nonarrowing = t% - \nonfillstart - \tt % easiest (and conventionally used) font for verbatim - % The \leavevmode here is for blank lines. Otherwise, we would - % never \starttabox and the \egroup would end verbatim mode. - \def\par{\leavevmode\egroup\box\verbbox\endgraf}% - \tabexpand - \setupmarkupstyle{verbatim}% - % Respect line breaks, - % print special symbols as themselves, and - % make each space count. - % Must do in this order: - \obeylines \uncatcodespecials \sepspaces - \everypar{\starttabbox}% -} - -% Do the @verb magic: verbatim text is quoted by unique -% delimiter characters. Before first delimiter expect a -% right brace, after last delimiter expect closing brace: -% -% \def\doverb'{'#1'}'{#1} -% -% [Knuth] p. 382; only eat outer {} -\begingroup - \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other - \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] -\endgroup -% -\def\verb{\begingroup\setupverb\doverb} -% -% -% Do the @verbatim magic: define the macro \doverbatim so that -% the (first) argument ends when '@end verbatim' is reached, ie: -% -% \def\doverbatim#1@end verbatim{#1} -% -% For Texinfo it's a lot easier than for LaTeX, -% because texinfo's \verbatim doesn't stop at '\end{verbatim}': -% we need not redefine '\', '{' and '}'. -% -% Inspired by LaTeX's verbatim command set [latex.ltx] -% -\begingroup - \catcode`\ =\active - \obeylines % - % ignore everything up to the first ^^M, that's the newline at the end - % of the @verbatim input line itself. Otherwise we get an extra blank - % line in the output. - \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% - % We really want {...\end verbatim} in the body of the macro, but - % without the active space; thus we have to use \xdef and \gobble. -\endgroup -% -\envdef\verbatim{% - \setupverbatim\doverbatim -} -\let\Everbatim = \afterenvbreak - - -% @verbatiminclude FILE - insert text of file in verbatim environment. -% -\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} -% -\def\doverbatiminclude#1{% - {% - \makevalueexpandable - \setupverbatim - \indexnofonts % Allow `@@' and other weird things in file names. - \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% - \input #1 - \afterenvbreak - }% -} - -% @copying ... @end copying. -% Save the text away for @insertcopying later. -% -% We save the uninterpreted tokens, rather than creating a box. -% Saving the text in a box would be much easier, but then all the -% typesetting commands (@smallbook, font changes, etc.) have to be done -% beforehand -- and a) we want @copying to be done first in the source -% file; b) letting users define the frontmatter in as flexible order as -% possible is very desirable. -% -\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} -\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} -% -\def\insertcopying{% - \begingroup - \parindent = 0pt % paragraph indentation looks wrong on title page - \scanexp\copyingtext - \endgroup -} - - -\message{defuns,} -% @defun etc. - -\newskip\defbodyindent \defbodyindent=.4in -\newskip\defargsindent \defargsindent=50pt -\newskip\deflastargmargin \deflastargmargin=18pt -\newcount\defunpenalty - -% Start the processing of @deffn: -\def\startdefun{% - \ifnum\lastpenalty<10000 - \medbreak - \defunpenalty=10003 % Will keep this @deffn together with the - % following @def command, see below. - \else - % If there are two @def commands in a row, we'll have a \nobreak, - % which is there to keep the function description together with its - % header. But if there's nothing but headers, we need to allow a - % break somewhere. Check specifically for penalty 10002, inserted - % by \printdefunline, instead of 10000, since the sectioning - % commands also insert a nobreak penalty, and we don't want to allow - % a break between a section heading and a defun. - % - % As a further refinement, we avoid "club" headers by signalling - % with penalty of 10003 after the very first @deffn in the - % sequence (see above), and penalty of 10002 after any following - % @def command. - \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi - % - % Similarly, after a section heading, do not allow a break. - % But do insert the glue. - \medskip % preceded by discardable penalty, so not a breakpoint - \fi - % - \parindent=0in - \advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent -} - -\def\dodefunx#1{% - % First, check whether we are in the right environment: - \checkenv#1% - % - % As above, allow line break if we have multiple x headers in a row. - % It's not a great place, though. - \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi - % - % And now, it's time to reuse the body of the original defun: - \expandafter\gobbledefun#1% -} -\def\gobbledefun#1\startdefun{} - -% \printdefunline \deffnheader{text} -% -\def\printdefunline#1#2{% - \begingroup - % call \deffnheader: - #1#2 \endheader - % common ending: - \interlinepenalty = 10000 - \advance\rightskip by 0pt plus 1fil\relax - \endgraf - \nobreak\vskip -\parskip - \penalty\defunpenalty % signal to \startdefun and \dodefunx - % Some of the @defun-type tags do not enable magic parentheses, - % rendering the following check redundant. But we don't optimize. - \checkparencounts - \endgroup -} - -\def\Edefun{\endgraf\medbreak} - -% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; -% the only thing remaining is to define \deffnheader. -% -\def\makedefun#1{% - \expandafter\let\csname E#1\endcsname = \Edefun - \edef\temp{\noexpand\domakedefun - \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% - \temp -} - -% \domakedefun \deffn \deffnx \deffnheader -% -% Define \deffn and \deffnx, without parameters. -% \deffnheader has to be defined explicitly. -% -\def\domakedefun#1#2#3{% - \envdef#1{% - \startdefun - \doingtypefnfalse % distinguish typed functions from all else - \parseargusing\activeparens{\printdefunline#3}% - }% - \def#2{\dodefunx#1}% - \def#3% -} - -\newif\ifdoingtypefn % doing typed function? -\newif\ifrettypeownline % typeset return type on its own line? - -% @deftypefnnewline on|off says whether the return type of typed functions -% are printed on their own line. This affects @deftypefn, @deftypefun, -% @deftypeop, and @deftypemethod. -% -\parseargdef\deftypefnnewline{% - \def\temp{#1}% - \ifx\temp\onword - \expandafter\let\csname SETtxideftypefnnl\endcsname - = \empty - \else\ifx\temp\offword - \expandafter\let\csname SETtxideftypefnnl\endcsname - = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @txideftypefnnl value `\temp', - must be on|off}% - \fi\fi -} - -% Untyped functions: - -% @deffn category name args -\makedefun{deffn}{\deffngeneral{}} - -% @deffn category class name args -\makedefun{defop}#1 {\defopon{#1\ \putwordon}} - -% \defopon {category on}class name args -\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } - -% \deffngeneral {subind}category name args -% -\def\deffngeneral#1#2 #3 #4\endheader{% - % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. - \dosubind{fn}{\code{#3}}{#1}% - \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% -} - -% Typed functions: - -% @deftypefn category type name args -\makedefun{deftypefn}{\deftypefngeneral{}} - -% @deftypeop category class type name args -\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} - -% \deftypeopon {category on}class type name args -\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } - -% \deftypefngeneral {subind}category type name args -% -\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% - \dosubind{fn}{\code{#4}}{#1}% - \doingtypefntrue - \defname{#2}{#3}{#4}\defunargs{#5\unskip}% -} - -% Typed variables: - -% @deftypevr category type var args -\makedefun{deftypevr}{\deftypecvgeneral{}} - -% @deftypecv category class type var args -\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} - -% \deftypecvof {category of}class type var args -\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } - -% \deftypecvgeneral {subind}category type var args -% -\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% - \dosubind{vr}{\code{#4}}{#1}% - \defname{#2}{#3}{#4}\defunargs{#5\unskip}% -} - -% Untyped variables: - -% @defvr category var args -\makedefun{defvr}#1 {\deftypevrheader{#1} {} } - -% @defcv category class var args -\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} - -% \defcvof {category of}class var args -\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } - -% Types: - -% @deftp category name args -\makedefun{deftp}#1 #2 #3\endheader{% - \doind{tp}{\code{#2}}% - \defname{#1}{}{#2}\defunargs{#3\unskip}% -} - -% Remaining @defun-like shortcuts: -\makedefun{defun}{\deffnheader{\putwordDeffunc} } -\makedefun{defmac}{\deffnheader{\putwordDefmac} } -\makedefun{defspec}{\deffnheader{\putwordDefspec} } -\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } -\makedefun{defvar}{\defvrheader{\putwordDefvar} } -\makedefun{defopt}{\defvrheader{\putwordDefopt} } -\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } -\makedefun{defmethod}{\defopon\putwordMethodon} -\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} -\makedefun{defivar}{\defcvof\putwordInstanceVariableof} -\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} - -% \defname, which formats the name of the @def (not the args). -% #1 is the category, such as "Function". -% #2 is the return type, if any. -% #3 is the function name. -% -% We are followed by (but not passed) the arguments, if any. -% -\def\defname#1#2#3{% - \par - % Get the values of \leftskip and \rightskip as they were outside the @def... - \advance\leftskip by -\defbodyindent - % - % Determine if we are typesetting the return type of a typed function - % on a line by itself. - \rettypeownlinefalse - \ifdoingtypefn % doing a typed function specifically? - % then check user option for putting return type on its own line: - \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else - \rettypeownlinetrue - \fi - \fi - % - % How we'll format the category name. Putting it in brackets helps - % distinguish it from the body text that may end up on the next line - % just below it. - \def\temp{#1}% - \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} - % - % Figure out line sizes for the paragraph shape. We'll always have at - % least two. - \tempnum = 2 - % - % The first line needs space for \box0; but if \rightskip is nonzero, - % we need only space for the part of \box0 which exceeds it: - \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip - % - % If doing a return type on its own line, we'll have another line. - \ifrettypeownline - \advance\tempnum by 1 - \def\maybeshapeline{0in \hsize}% - \else - \def\maybeshapeline{}% - \fi - % - % The continuations: - \dimen2=\hsize \advance\dimen2 by -\defargsindent - % - % The final paragraph shape: - \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 - % - % Put the category name at the right margin. - \noindent - \hbox to 0pt{% - \hfil\box0 \kern-\hsize - % \hsize has to be shortened this way: - \kern\leftskip - % Intentionally do not respect \rightskip, since we need the space. - }% - % - % Allow all lines to be underfull without complaint: - \tolerance=10000 \hbadness=10000 - \exdentamount=\defbodyindent - {% - % defun fonts. We use typewriter by default (used to be bold) because: - % . we're printing identifiers, they should be in tt in principle. - % . in languages with many accents, such as Czech or French, it's - % common to leave accents off identifiers. The result looks ok in - % tt, but exceedingly strange in rm. - % . we don't want -- and --- to be treated as ligatures. - % . this still does not fix the ?` and !` ligatures, but so far no - % one has made identifiers using them :). - \df \tt - \def\temp{#2}% text of the return type - \ifx\temp\empty\else - \tclose{\temp}% typeset the return type - \ifrettypeownline - % put return type on its own line; prohibit line break following: - \hfil\vadjust{\nobreak}\break - \else - \space % type on same line, so just followed by a space - \fi - \fi % no return type - #3% output function name - }% - {\rm\enskip}% hskip 0.5 em of \tenrm - % - \boldbrax - % arguments will be output next, if any. -} - -% Print arguments in slanted roman (not ttsl), inconsistently with using -% tt for the name. This is because literal text is sometimes needed in -% the argument list (groff manual), and ttsl and tt are not very -% distinguishable. Prevent hyphenation at `-' chars. -% -\def\defunargs#1{% - % use sl by default (not ttsl), - % tt for the names. - \df \sl \hyphenchar\font=0 - % - % On the other hand, if an argument has two dashes (for instance), we - % want a way to get ttsl. We used to recommend @var for that, so - % leave the code in, but it's strange for @var to lead to typewriter. - % Nowadays we recommend @code, since the difference between a ttsl hyphen - % and a tt hyphen is pretty tiny. @code also disables ?` !`. - \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% - #1% - \sl\hyphenchar\font=45 -} - -% We want ()&[] to print specially on the defun line. -% -\def\activeparens{% - \catcode`\(=\active \catcode`\)=\active - \catcode`\[=\active \catcode`\]=\active - \catcode`\&=\active -} - -% Make control sequences which act like normal parenthesis chars. -\let\lparen = ( \let\rparen = ) - -% Be sure that we always have a definition for `(', etc. For example, -% if the fn name has parens in it, \boldbrax will not be in effect yet, -% so TeX would otherwise complain about undefined control sequence. -{ - \activeparens - \global\let(=\lparen \global\let)=\rparen - \global\let[=\lbrack \global\let]=\rbrack - \global\let& = \& - - \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} - \gdef\magicamp{\let&=\amprm} -} - -\newcount\parencount - -% If we encounter &foo, then turn on ()-hacking afterwards -\newif\ifampseen -\def\amprm#1 {\ampseentrue{\bf\ }} - -\def\parenfont{% - \ifampseen - % At the first level, print parens in roman, - % otherwise use the default font. - \ifnum \parencount=1 \rm \fi - \else - % The \sf parens (in \boldbrax) actually are a little bolder than - % the contained text. This is especially needed for [ and ] . - \sf - \fi -} -\def\infirstlevel#1{% - \ifampseen - \ifnum\parencount=1 - #1% - \fi - \fi -} -\def\bfafterword#1 {#1 \bf} - -\def\opnr{% - \global\advance\parencount by 1 - {\parenfont(}% - \infirstlevel \bfafterword -} -\def\clnr{% - {\parenfont)}% - \infirstlevel \sl - \global\advance\parencount by -1 -} - -\newcount\brackcount -\def\lbrb{% - \global\advance\brackcount by 1 - {\bf[}% -} -\def\rbrb{% - {\bf]}% - \global\advance\brackcount by -1 -} - -\def\checkparencounts{% - \ifnum\parencount=0 \else \badparencount \fi - \ifnum\brackcount=0 \else \badbrackcount \fi -} -% these should not use \errmessage; the glibc manual, at least, actually -% has such constructs (when documenting function pointers). -\def\badparencount{% - \message{Warning: unbalanced parentheses in @def...}% - \global\parencount=0 -} -\def\badbrackcount{% - \message{Warning: unbalanced square brackets in @def...}% - \global\brackcount=0 -} - - -\message{macros,} -% @macro. - -% To do this right we need a feature of e-TeX, \scantokens, -% which we arrange to emulate with a temporary file in ordinary TeX. -\ifx\eTeXversion\thisisundefined - \newwrite\macscribble - \def\scantokens#1{% - \toks0={#1}% - \immediate\openout\macscribble=\jobname.tmp - \immediate\write\macscribble{\the\toks0}% - \immediate\closeout\macscribble - \input \jobname.tmp - } -\fi - -\def\scanmacro#1{\begingroup - \newlinechar`\^^M - \let\xeatspaces\eatspaces - % - % Undo catcode changes of \startcontents and \doprintindex - % When called from @insertcopying or (short)caption, we need active - % backslash to get it printed correctly. Previously, we had - % \catcode`\\=\other instead. We'll see whether a problem appears - % with macro expansion. --kasal, 19aug04 - \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ - % - % ... and for \example: - \spaceisspace - % - % The \empty here causes a following catcode 5 newline to be eaten as - % part of reading whitespace after a control sequence. It does not - % eat a catcode 13 newline. There's no good way to handle the two - % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX - % would then have different behavior). See the Macro Details node in - % the manual for the workaround we recommend for macros and - % line-oriented commands. - % - \scantokens{#1\empty}% -\endgroup} - -\def\scanexp#1{% - \edef\temp{\noexpand\scanmacro{#1}}% - \temp -} - -\newcount\paramno % Count of parameters -\newtoks\macname % Macro name -\newif\ifrecursive % Is it recursive? - -% List of all defined macros in the form -% \definedummyword\macro1\definedummyword\macro2... -% Currently is also contains all @aliases; the list can be split -% if there is a need. -\def\macrolist{} - -% Add the macro to \macrolist -\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} -\def\addtomacrolistxxx#1{% - \toks0 = \expandafter{\macrolist\definedummyword#1}% - \xdef\macrolist{\the\toks0}% -} - -% Utility routines. -% This does \let #1 = #2, with \csnames; that is, -% \let \csname#1\endcsname = \csname#2\endcsname -% (except of course we have to play expansion games). -% -\def\cslet#1#2{% - \expandafter\let - \csname#1\expandafter\endcsname - \csname#2\endcsname -} - -% Trim leading and trailing spaces off a string. -% Concepts from aro-bend problem 15 (see CTAN). -{\catcode`\@=11 -\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} -\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} -\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} -\def\unbrace#1{#1} -\unbrace{\gdef\trim@@@ #1 } #2@{#1} -} - -% Trim a single trailing ^^M off a string. -{\catcode`\^^M=\other \catcode`\Q=3% -\gdef\eatcr #1{\eatcra #1Q^^MQ}% -\gdef\eatcra#1^^MQ{\eatcrb#1Q}% -\gdef\eatcrb#1Q#2Q{#1}% -} - -% Macro bodies are absorbed as an argument in a context where -% all characters are catcode 10, 11 or 12, except \ which is active -% (as in normal texinfo). It is necessary to change the definition of \ -% to recognize macro arguments; this is the job of \mbodybackslash. -% -% Non-ASCII encodings make 8-bit characters active, so un-activate -% them to avoid their expansion. Must do this non-globally, to -% confine the change to the current group. -% -% It's necessary to have hard CRs when the macro is executed. This is -% done by making ^^M (\endlinechar) catcode 12 when reading the macro -% body, and then making it the \newlinechar in \scanmacro. -% -\def\scanctxt{% used as subroutine - \catcode`\"=\other - \catcode`\+=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\@=\other - \catcode`\^=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\~=\other - \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi -} - -\def\scanargctxt{% used for copying and captions, not macros. - \scanctxt - \catcode`\\=\other - \catcode`\^^M=\other -} - -\def\macrobodyctxt{% used for @macro definitions - \scanctxt - \catcode`\{=\other - \catcode`\}=\other - \catcode`\^^M=\other - \usembodybackslash -} - -\def\macroargctxt{% used when scanning invocations - \scanctxt - \catcode`\\=0 -} -% why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" -% for the single characters \ { }. Thus, we end up with the "commands" -% that would be written @\ @{ @} in a Texinfo document. -% -% We already have @{ and @}. For @\, we define it here, and only for -% this purpose, to produce a typewriter backslash (so, the @\ that we -% define for @math can't be used with @macro calls): -% -\def\\{\normalbackslash}% -% -% We would like to do this for \, too, since that is what makeinfo does. -% But it is not possible, because Texinfo already has a command @, for a -% cedilla accent. Documents must use @comma{} instead. -% -% \anythingelse will almost certainly be an error of some kind. - - -% \mbodybackslash is the definition of \ in @macro bodies. -% It maps \foo\ => \csname macarg.foo\endcsname => #N -% where N is the macro parameter number. -% We define \csname macarg.\endcsname to be \realbackslash, so -% \\ in macro replacement text gets you a backslash. -% -{\catcode`@=0 @catcode`@\=@active - @gdef@usembodybackslash{@let\=@mbodybackslash} - @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} -} -\expandafter\def\csname macarg.\endcsname{\realbackslash} - -\def\margbackslash#1{\char`\#1 } - -\def\macro{\recursivefalse\parsearg\macroxxx} -\def\rmacro{\recursivetrue\parsearg\macroxxx} - -\def\macroxxx#1{% - \getargs{#1}% now \macname is the macname and \argl the arglist - \ifx\argl\empty % no arguments - \paramno=0\relax - \else - \expandafter\parsemargdef \argl;% - \if\paramno>256\relax - \ifx\eTeXversion\thisisundefined - \errhelp = \EMsimple - \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} - \fi - \fi - \fi - \if1\csname ismacro.\the\macname\endcsname - \message{Warning: redefining \the\macname}% - \else - \expandafter\ifx\csname \the\macname\endcsname \relax - \else \errmessage{Macro name \the\macname\space already defined}\fi - \global\cslet{macsave.\the\macname}{\the\macname}% - \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% - \addtomacrolist{\the\macname}% - \fi - \begingroup \macrobodyctxt - \ifrecursive \expandafter\parsermacbody - \else \expandafter\parsemacbody - \fi} - -\parseargdef\unmacro{% - \if1\csname ismacro.#1\endcsname - \global\cslet{#1}{macsave.#1}% - \global\expandafter\let \csname ismacro.#1\endcsname=0% - % Remove the macro name from \macrolist: - \begingroup - \expandafter\let\csname#1\endcsname \relax - \let\definedummyword\unmacrodo - \xdef\macrolist{\macrolist}% - \endgroup - \else - \errmessage{Macro #1 not defined}% - \fi -} - -% Called by \do from \dounmacro on each macro. The idea is to omit any -% macro definitions that have been changed to \relax. -% -\def\unmacrodo#1{% - \ifx #1\relax - % remove this - \else - \noexpand\definedummyword \noexpand#1% - \fi -} - -% This makes use of the obscure feature that if the last token of a -% is #, then the preceding argument is delimited by -% an opening brace, and that opening brace is not consumed. -\def\getargs#1{\getargsxxx#1{}} -\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} -\def\getmacname#1 #2\relax{\macname={#1}} -\def\getmacargs#1{\def\argl{#1}} - -% For macro processing make @ a letter so that we can make Texinfo private macro names. -\edef\texiatcatcode{\the\catcode`\@} -\catcode `@=11\relax - -% Parse the optional {params} list. Set up \paramno and \paramlist -% so \defmacro knows what to do. Define \macarg.BLAH for each BLAH -% in the params list to some hook where the argument si to be expanded. If -% there are less than 10 arguments that hook is to be replaced by ##N where N -% is the position in that list, that is to say the macro arguments are to be -% defined `a la TeX in the macro body. -% -% That gets used by \mbodybackslash (above). -% -% We need to get `macro parameter char #' into several definitions. -% The technique used is stolen from LaTeX: let \hash be something -% unexpandable, insert that wherever you need a #, and then redefine -% it to # just before using the token list produced. -% -% The same technique is used to protect \eatspaces till just before -% the macro is used. -% -% If there are 10 or more arguments, a different technique is used, where the -% hook remains in the body, and when macro is to be expanded the body is -% processed again to replace the arguments. -% -% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the -% argument N value and then \edef the body (nothing else will expand because of -% the catcode regime underwhich the body was input). -% -% If you compile with TeX (not eTeX), and you have macros with 10 or more -% arguments, you need that no macro has more than 256 arguments, otherwise an -% error is produced. -\def\parsemargdef#1;{% - \paramno=0\def\paramlist{}% - \let\hash\relax - \let\xeatspaces\relax - \parsemargdefxxx#1,;,% - % In case that there are 10 or more arguments we parse again the arguments - % list to set new definitions for the \macarg.BLAH macros corresponding to - % each BLAH argument. It was anyhow needed to parse already once this list - % in order to count the arguments, and as macros with at most 9 arguments - % are by far more frequent than macro with 10 or more arguments, defining - % twice the \macarg.BLAH macros does not cost too much processing power. - \ifnum\paramno<10\relax\else - \paramno0\relax - \parsemmanyargdef@@#1,;,% 10 or more arguments - \fi -} -\def\parsemargdefxxx#1,{% - \if#1;\let\next=\relax - \else \let\next=\parsemargdefxxx - \advance\paramno by 1 - \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname - {\xeatspaces{\hash\the\paramno}}% - \edef\paramlist{\paramlist\hash\the\paramno,}% - \fi\next} - -\def\parsemmanyargdef@@#1,{% - \if#1;\let\next=\relax - \else - \let\next=\parsemmanyargdef@@ - \edef\tempb{\eatspaces{#1}}% - \expandafter\def\expandafter\tempa - \expandafter{\csname macarg.\tempb\endcsname}% - % Note that we need some extra \noexpand\noexpand, this is because we - % don't want \the to be expanded in the \parsermacbody as it uses an - % \xdef . - \expandafter\edef\tempa - {\noexpand\noexpand\noexpand\the\toks\the\paramno}% - \advance\paramno by 1\relax - \fi\next} - -% These two commands read recursive and nonrecursive macro bodies. -% (They're different since rec and nonrec macros end differently.) -% - -\catcode `\@\texiatcatcode -\long\def\parsemacbody#1@end macro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -\long\def\parsermacbody#1@end rmacro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -\catcode `\@=11\relax - -\let\endargs@\relax -\let\nil@\relax -\def\nilm@{\nil@}% -\long\def\nillm@{\nil@}% - -% This macro is expanded during the Texinfo macro expansion, not during its -% definition. It gets all the arguments values and assigns them to macros -% macarg.ARGNAME -% -% #1 is the macro name -% #2 is the list of argument names -% #3 is the list of argument values -\def\getargvals@#1#2#3{% - \def\macargdeflist@{}% - \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. - \def\paramlist{#2,\nil@}% - \def\macroname{#1}% - \begingroup - \macroargctxt - \def\argvaluelist{#3,\nil@}% - \def\@tempa{#3}% - \ifx\@tempa\empty - \setemptyargvalues@ - \else - \getargvals@@ - \fi -} - -% -\def\getargvals@@{% - \ifx\paramlist\nilm@ - % Some sanity check needed here that \argvaluelist is also empty. - \ifx\argvaluelist\nillm@ - \else - \errhelp = \EMsimple - \errmessage{Too many arguments in macro `\macroname'!}% - \fi - \let\next\macargexpandinbody@ - \else - \ifx\argvaluelist\nillm@ - % No more arguments values passed to macro. Set remaining named-arg - % macros to empty. - \let\next\setemptyargvalues@ - \else - % pop current arg name into \@tempb - \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% - \expandafter\@tempa\expandafter{\paramlist}% - % pop current argument value into \@tempc - \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% - \expandafter\@tempa\expandafter{\argvaluelist}% - % Here \@tempb is the current arg name and \@tempc is the current arg value. - % First place the new argument macro definition into \@tempd - \expandafter\macname\expandafter{\@tempc}% - \expandafter\let\csname macarg.\@tempb\endcsname\relax - \expandafter\def\expandafter\@tempe\expandafter{% - \csname macarg.\@tempb\endcsname}% - \edef\@tempd{\long\def\@tempe{\the\macname}}% - \push@\@tempd\macargdeflist@ - \let\next\getargvals@@ - \fi - \fi - \next -} - -\def\push@#1#2{% - \expandafter\expandafter\expandafter\def - \expandafter\expandafter\expandafter#2% - \expandafter\expandafter\expandafter{% - \expandafter#1#2}% -} - -% Replace arguments by their values in the macro body, and place the result -% in macro \@tempa -\def\macvalstoargs@{% - % To do this we use the property that token registers that are \the'ed - % within an \edef expand only once. So we are going to place all argument - % values into respective token registers. - % - % First we save the token context, and initialize argument numbering. - \begingroup - \paramno0\relax - % Then, for each argument number #N, we place the corresponding argument - % value into a new token list register \toks#N - \expandafter\putargsintokens@\saveparamlist@,;,% - % Then, we expand the body so that argument are replaced by their - % values. The trick for values not to be expanded themselves is that they - % are within tokens and that tokens expand only once in an \edef . - \edef\@tempc{\csname mac.\macroname .body\endcsname}% - % Now we restore the token stack pointer to free the token list registers - % which we have used, but we make sure that expanded body is saved after - % group. - \expandafter - \endgroup - \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% - } - -\def\macargexpandinbody@{% - %% Define the named-macro outside of this group and then close this group. - \expandafter - \endgroup - \macargdeflist@ - % First the replace in body the macro arguments by their values, the result - % is in \@tempa . - \macvalstoargs@ - % Then we point at the \norecurse or \gobble (for recursive) macro value - % with \@tempb . - \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname - % Depending on whether it is recursive or not, we need some tailing - % \egroup . - \ifx\@tempb\gobble - \let\@tempc\relax - \else - \let\@tempc\egroup - \fi - % And now we do the real job: - \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% - \@tempd -} - -\def\putargsintokens@#1,{% - \if#1;\let\next\relax - \else - \let\next\putargsintokens@ - % First we allocate the new token list register, and give it a temporary - % alias \@tempb . - \toksdef\@tempb\the\paramno - % Then we place the argument value into that token list register. - \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname - \expandafter\@tempb\expandafter{\@tempa}% - \advance\paramno by 1\relax - \fi - \next -} - -% Save the token stack pointer into macro #1 -\def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} -% Restore the token stack pointer from number in macro #1 -\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} -% newtoks that can be used non \outer . -\def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} - -% Tailing missing arguments are set to empty -\def\setemptyargvalues@{% - \ifx\paramlist\nilm@ - \let\next\macargexpandinbody@ - \else - \expandafter\setemptyargvaluesparser@\paramlist\endargs@ - \let\next\setemptyargvalues@ - \fi - \next -} - -\def\setemptyargvaluesparser@#1,#2\endargs@{% - \expandafter\def\expandafter\@tempa\expandafter{% - \expandafter\def\csname macarg.#1\endcsname{}}% - \push@\@tempa\macargdeflist@ - \def\paramlist{#2}% -} - -% #1 is the element target macro -% #2 is the list macro -% #3,#4\endargs@ is the list value -\def\pop@#1#2#3,#4\endargs@{% - \def#1{#3}% - \def#2{#4}% -} -\long\def\longpop@#1#2#3,#4\endargs@{% - \long\def#1{#3}% - \long\def#2{#4}% -} - -% This defines a Texinfo @macro. There are eight cases: recursive and -% nonrecursive macros of zero, one, up to nine, and many arguments. -% Much magic with \expandafter here. -% \xdef is used so that macro definitions will survive the file -% they're defined in; @include reads the file inside a group. -% -\def\defmacro{% - \let\hash=##% convert placeholders to macro parameter chars - \ifrecursive - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\scanmacro{\temp}}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup\noexpand\scanmacro{\temp}}% - \else - \ifnum\paramno<10\relax % at most 9 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{\egroup\noexpand\scanmacro{\temp}}% - \else % 10 or more - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\getargvals@{\the\macname}{\argl}% - }% - \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp - \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble - \fi - \fi - \else - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \else % at most 9 - \ifnum\paramno<10\relax - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \expandafter\noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \else % 10 or more: - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\getargvals@{\the\macname}{\argl}% - }% - \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp - \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse - \fi - \fi - \fi} - -\catcode `\@\texiatcatcode\relax - -\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} - -% \braceorline decides whether the next nonwhitespace character is a -% {. If so it reads up to the closing }, if not, it reads the whole -% line. Whatever was read is then fed to the next control sequence -% as an argument (by \parsebrace or \parsearg). -% -\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} -\def\braceorlinexxx{% - \ifx\nchar\bgroup\else - \expandafter\parsearg - \fi \macnamexxx} - - -% @alias. -% We need some trickery to remove the optional spaces around the equal -% sign. Make them active and then expand them all to nothing. -% -\def\alias{\parseargusing\obeyspaces\aliasxxx} -\def\aliasxxx #1{\aliasyyy#1\relax} -\def\aliasyyy #1=#2\relax{% - {% - \expandafter\let\obeyedspace=\empty - \addtomacrolist{#1}% - \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% - }% - \next -} - - -\message{cross references,} - -\newwrite\auxfile -\newif\ifhavexrefs % True if xref values are known. -\newif\ifwarnedxrefs % True if we warned once that they aren't known. - -% @inforef is relatively simple. -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{% - \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -% @node's only job in TeX is to define \lastnode, which is used in -% cross-references. The @node line might or might not have commas, and -% might or might not have spaces before the first comma, like: -% @node foo , bar , ... -% We don't want such trailing spaces in the node name. -% -\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} -% -% also remove a trailing comma, in case of something like this: -% @node Help-Cross, , , Cross-refs -\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} -\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} - -\let\nwnode=\node -\let\lastnode=\empty - -% Write a cross-reference definition for the current node. #1 is the -% type (Ynumbered, Yappendix, Ynothing). -% -\def\donoderef#1{% - \ifx\lastnode\empty\else - \setref{\lastnode}{#1}% - \global\let\lastnode=\empty - \fi -} - -% @anchor{NAME} -- define xref target at arbitrary point. -% -\newcount\savesfregister -% -\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} -\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} -\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} - -% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an -% anchor), which consists of three parts: -% 1) NAME-title - the current sectioning name taken from \lastsection, -% or the anchor name. -% 2) NAME-snt - section number and type, passed as the SNT arg, or -% empty for anchors. -% 3) NAME-pg - the page number. -% -% This is called from \donoderef, \anchor, and \dofloat. In the case of -% floats, there is an additional part, which is not written here: -% 4) NAME-lof - the text as it should appear in a @listoffloats. -% -\def\setref#1#2{% - \pdfmkdest{#1}% - \iflinks - {% - \atdummies % preserve commands, but don't expand them - \edef\writexrdef##1##2{% - \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef - ##1}{##2}}% these are parameters of \writexrdef - }% - \toks0 = \expandafter{\lastsection}% - \immediate \writexrdef{title}{\the\toks0 }% - \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. - \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout - }% - \fi -} - -% @xrefautosectiontitle on|off says whether @section(ing) names are used -% automatically in xrefs, if the third arg is not explicitly specified. -% This was provided as a "secret" @set xref-automatic-section-title -% variable, now it's official. -% -\parseargdef\xrefautomaticsectiontitle{% - \def\temp{#1}% - \ifx\temp\onword - \expandafter\let\csname SETxref-automatic-section-title\endcsname - = \empty - \else\ifx\temp\offword - \expandafter\let\csname SETxref-automatic-section-title\endcsname - = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', - must be on|off}% - \fi\fi -} - -% -% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is -% the node name, #2 the name of the Info cross-reference, #3 the printed -% node name, #4 the name of the Info file, #5 the name of the printed -% manual. All but the node name can be omitted. -% -\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} -\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} -\def\ref#1{\xrefX[#1,,,,,,,]} -% -\newbox\toprefbox -\newbox\printedrefnamebox -\newbox\infofilenamebox -\newbox\printedmanualbox -% -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup - \unsepspaces - % - % Get args without leading/trailing spaces. - \def\printedrefname{\ignorespaces #3}% - \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% - % - \def\infofilename{\ignorespaces #4}% - \setbox\infofilenamebox = \hbox{\infofilename\unskip}% - % - \def\printedmanual{\ignorespaces #5}% - \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% - % - % If the printed reference name (arg #3) was not explicitly given in - % the @xref, figure out what we want to use. - \ifdim \wd\printedrefnamebox = 0pt - % No printed node name was explicitly given. - \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax - % Not auto section-title: use node name inside the square brackets. - \def\printedrefname{\ignorespaces #1}% - \else - % Auto section-title: use chapter/section title inside - % the square brackets if we have it. - \ifdim \wd\printedmanualbox > 0pt - % It is in another manual, so we don't have it; use node name. - \def\printedrefname{\ignorespaces #1}% - \else - \ifhavexrefs - % We (should) know the real title if we have the xref values. - \def\printedrefname{\refx{#1-title}{}}% - \else - % Otherwise just copy the Info node name. - \def\printedrefname{\ignorespaces #1}% - \fi% - \fi - \fi - \fi - % - % Make link in pdf output. - \ifpdf - {\indexnofonts - \turnoffactive - \makevalueexpandable - % This expands tokens, so do it after making catcode changes, so _ - % etc. don't get their TeX definitions. This ignores all spaces in - % #4, including (wrongly) those in the middle of the filename. - \getfilename{#4}% - % - % This (wrongly) does not take account of leading or trailing - % spaces in #1, which should be ignored. - \edef\pdfxrefdest{#1}% - \ifx\pdfxrefdest\empty - \def\pdfxrefdest{Top}% no empty targets - \else - \txiescapepdf\pdfxrefdest % escape PDF special chars - \fi - % - \leavevmode - \startlink attr{/Border [0 0 0]}% - \ifnum\filenamelength>0 - goto file{\the\filename.pdf} name{\pdfxrefdest}% - \else - goto name{\pdfmkpgn{\pdfxrefdest}}% - \fi - }% - \setcolor{\linkcolor}% - \fi - % - % Float references are printed completely differently: "Figure 1.2" - % instead of "[somenode], p.3". We distinguish them by the - % LABEL-title being set to a magic string. - {% - % Have to otherify everything special to allow the \csname to - % include an _ in the xref name, etc. - \indexnofonts - \turnoffactive - \expandafter\global\expandafter\let\expandafter\Xthisreftitle - \csname XR#1-title\endcsname - }% - \iffloat\Xthisreftitle - % If the user specified the print name (third arg) to the ref, - % print it instead of our usual "Figure 1.2". - \ifdim\wd\printedrefnamebox = 0pt - \refx{#1-snt}{}% - \else - \printedrefname - \fi - % - % If the user also gave the printed manual name (fifth arg), append - % "in MANUALNAME". - \ifdim \wd\printedmanualbox > 0pt - \space \putwordin{} \cite{\printedmanual}% - \fi - \else - % node/anchor (non-float) references. - % - % If we use \unhbox to print the node names, TeX does not insert - % empty discretionaries after hyphens, which means that it will not - % find a line break at a hyphen in a node names. Since some manuals - % are best written with fairly long node names, containing hyphens, - % this is a loss. Therefore, we give the text of the node name - % again, so it is as if TeX is seeing it for the first time. - % - \ifdim \wd\printedmanualbox > 0pt - % Cross-manual reference with a printed manual name. - % - \crossmanualxref{\cite{\printedmanual\unskip}}% - % - \else\ifdim \wd\infofilenamebox > 0pt - % Cross-manual reference with only an info filename (arg 4), no - % printed manual name (arg 5). This is essentially the same as - % the case above; we output the filename, since we have nothing else. - % - \crossmanualxref{\code{\infofilename\unskip}}% - % - \else - % Reference within this manual. - % - % _ (for example) has to be the character _ for the purposes of the - % control sequence corresponding to the node, but it has to expand - % into the usual \leavevmode...\vrule stuff for purposes of - % printing. So we \turnoffactive for the \refx-snt, back on for the - % printing, back off for the \refx-pg. - {\turnoffactive - % Only output a following space if the -snt ref is nonempty; for - % @unnumbered and @anchor, it won't be. - \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% - \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi - }% - % output the `[mynode]' via the macro below so it can be overridden. - \xrefprintnodename\printedrefname - % - % But we always want a comma and a space: - ,\space - % - % output the `page 3'. - \turnoffactive \putwordpage\tie\refx{#1-pg}{}% - \fi\fi - \fi - \endlink -\endgroup} - -% Output a cross-manual xref to #1. Used just above (twice). -% -% Only include the text "Section ``foo'' in" if the foo is neither -% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply -% "see The Foo Manual", the idea being to refer to the whole manual. -% -% But, this being TeX, we can't easily compare our node name against the -% string "Top" while ignoring the possible spaces before and after in -% the input. By adding the arbitrary 7sp below, we make it much less -% likely that a real node name would have the same width as "Top" (e.g., -% in a monospaced font). Hopefully it will never happen in practice. -% -% For the same basic reason, we retypeset the "Top" at every -% reference, since the current font is indeterminate. -% -\def\crossmanualxref#1{% - \setbox\toprefbox = \hbox{Top\kern7sp}% - \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% - \ifdim \wd2 > 7sp % nonempty? - \ifdim \wd2 = \wd\toprefbox \else % same as Top? - \putwordSection{} ``\printedrefname'' \putwordin{}\space - \fi - \fi - #1% -} - -% This macro is called from \xrefX for the `[nodename]' part of xref -% output. It's a separate macro only so it can be changed more easily, -% since square brackets don't work well in some documents. Particularly -% one that Bob is working on :). -% -\def\xrefprintnodename#1{[#1]} - -% Things referred to by \setref. -% -\def\Ynothing{} -\def\Yomitfromtoc{} -\def\Ynumbered{% - \ifnum\secno=0 - \putwordChapter@tie \the\chapno - \else \ifnum\subsecno=0 - \putwordSection@tie \the\chapno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno - \else - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} -\def\Yappendix{% - \ifnum\secno=0 - \putwordAppendix@tie @char\the\appendixno{}% - \else \ifnum\subsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno - \else - \putwordSection@tie - @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} - -% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. -% If its value is nonempty, SUFFIX is output afterward. -% -\def\refx#1#2{% - {% - \indexnofonts - \otherbackslash - \expandafter\global\expandafter\let\expandafter\thisrefX - \csname XR#1\endcsname - }% - \ifx\thisrefX\relax - % If not defined, say something at least. - \angleleft un\-de\-fined\angleright - \iflinks - \ifhavexrefs - {\toks0 = {#1}% avoid expansion of possibly-complex value - \message{\linenumber Undefined cross reference `\the\toks0'.}}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% - \fi - \fi - \fi - \else - % It's defined, so just use it. - \thisrefX - \fi - #2% Output the suffix in any case. -} - -% This is the macro invoked by entries in the aux file. Usually it's -% just a \def (we prepend XR to the control sequence name to avoid -% collisions). But if this is a float type, we have more work to do. -% -\def\xrdef#1#2{% - {% The node name might contain 8-bit characters, which in our current - % implementation are changed to commands like @'e. Don't let these - % mess up the control sequence name. - \indexnofonts - \turnoffactive - \xdef\safexrefname{#1}% - }% - % - \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref - % - % Was that xref control sequence that we just defined for a float? - \expandafter\iffloat\csname XR\safexrefname\endcsname - % it was a float, and we have the (safe) float type in \iffloattype. - \expandafter\let\expandafter\floatlist - \csname floatlist\iffloattype\endcsname - % - % Is this the first time we've seen this float type? - \expandafter\ifx\floatlist\relax - \toks0 = {\do}% yes, so just \do - \else - % had it before, so preserve previous elements in list. - \toks0 = \expandafter{\floatlist\do}% - \fi - % - % Remember this xref in the control sequence \floatlistFLOATTYPE, - % for later use in \listoffloats. - \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 - {\safexrefname}}% - \fi -} - -% Read the last existing aux file, if any. No error if none exists. -% -\def\tryauxfile{% - \openin 1 \jobname.aux - \ifeof 1 \else - \readdatafile{aux}% - \global\havexrefstrue - \fi - \closein 1 -} - -\def\setupdatafile{% - \catcode`\^^@=\other - \catcode`\^^A=\other - \catcode`\^^B=\other - \catcode`\^^C=\other - \catcode`\^^D=\other - \catcode`\^^E=\other - \catcode`\^^F=\other - \catcode`\^^G=\other - \catcode`\^^H=\other - \catcode`\^^K=\other - \catcode`\^^L=\other - \catcode`\^^N=\other - \catcode`\^^P=\other - \catcode`\^^Q=\other - \catcode`\^^R=\other - \catcode`\^^S=\other - \catcode`\^^T=\other - \catcode`\^^U=\other - \catcode`\^^V=\other - \catcode`\^^W=\other - \catcode`\^^X=\other - \catcode`\^^Z=\other - \catcode`\^^[=\other - \catcode`\^^\=\other - \catcode`\^^]=\other - \catcode`\^^^=\other - \catcode`\^^_=\other - % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. - % in xref tags, i.e., node names. But since ^^e4 notation isn't - % supported in the main text, it doesn't seem desirable. Furthermore, - % that is not enough: for node names that actually contain a ^ - % character, we would end up writing a line like this: 'xrdef {'hat - % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first - % argument, and \hat is not an expandable control sequence. It could - % all be worked out, but why? Either we support ^^ or we don't. - % - % The other change necessary for this was to define \auxhat: - % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter - % and then to call \auxhat in \setq. - % - \catcode`\^=\other - % - % Special characters. Should be turned off anyway, but... - \catcode`\~=\other - \catcode`\[=\other - \catcode`\]=\other - \catcode`\"=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\$=\other - \catcode`\#=\other - \catcode`\&=\other - \catcode`\%=\other - \catcode`+=\other % avoid \+ for paranoia even though we've turned it off - % - % This is to support \ in node names and titles, since the \ - % characters end up in a \csname. It's easier than - % leaving it active and making its active definition an actual \ - % character. What I don't understand is why it works in the *value* - % of the xrdef. Seems like it should be a catcode12 \, and that - % should not typeset properly. But it works, so I'm moving on for - % now. --karl, 15jan04. - \catcode`\\=\other - % - % Make the characters 128-255 be printing characters. - {% - \count1=128 - \def\loop{% - \catcode\count1=\other - \advance\count1 by 1 - \ifnum \count1<256 \loop \fi - }% - }% - % - % @ is our escape character in .aux files, and we need braces. - \catcode`\{=1 - \catcode`\}=2 - \catcode`\@=0 -} - -\def\readdatafile#1{% -\begingroup - \setupdatafile - \input\jobname.#1 -\endgroup} - - -\message{insertions,} -% including footnotes. - -\newcount \footnoteno - -% The trailing space in the following definition for supereject is -% vital for proper filling; pages come out unaligned when you do a -% pagealignmacro call if that space before the closing brace is -% removed. (Generally, numeric constants should always be followed by a -% space to prevent strange expansion errors.) -\def\supereject{\par\penalty -20000\footnoteno =0 } - -% @footnotestyle is meaningful for Info output only. -\let\footnotestyle=\comment - -{\catcode `\@=11 -% -% Auto-number footnotes. Otherwise like plain. -\gdef\footnote{% - \let\indent=\ptexindent - \let\noindent=\ptexnoindent - \global\advance\footnoteno by \@ne - \edef\thisfootno{$^{\the\footnoteno}$}% - % - % In case the footnote comes at the end of a sentence, preserve the - % extra spacing after we do the footnote number. - \let\@sf\empty - \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi - % - % Remove inadvertent blank space before typesetting the footnote number. - \unskip - \thisfootno\@sf - \dofootnote -}% - -% Don't bother with the trickery in plain.tex to not require the -% footnote text as a parameter. Our footnotes don't need to be so general. -% -% Oh yes, they do; otherwise, @ifset (and anything else that uses -% \parseargline) fails inside footnotes because the tokens are fixed when -% the footnote is read. --karl, 16nov96. -% -\gdef\dofootnote{% - \insert\footins\bgroup - % We want to typeset this text as a normal paragraph, even if the - % footnote reference occurs in (for example) a display environment. - % So reset some parameters. - \hsize=\pagewidth - \interlinepenalty\interfootnotelinepenalty - \splittopskip\ht\strutbox % top baseline for broken footnotes - \splitmaxdepth\dp\strutbox - \floatingpenalty\@MM - \leftskip\z@skip - \rightskip\z@skip - \spaceskip\z@skip - \xspaceskip\z@skip - \parindent\defaultparindent - % - \smallfonts \rm - % - % Because we use hanging indentation in footnotes, a @noindent appears - % to exdent this text, so make it be a no-op. makeinfo does not use - % hanging indentation so @noindent can still be needed within footnote - % text after an @example or the like (not that this is good style). - \let\noindent = \relax - % - % Hang the footnote text off the number. Use \everypar in case the - % footnote extends for more than one paragraph. - \everypar = {\hang}% - \textindent{\thisfootno}% - % - % Don't crash into the line above the footnote text. Since this - % expands into a box, it must come within the paragraph, lest it - % provide a place where TeX can split the footnote. - \footstrut - % - % Invoke rest of plain TeX footnote routine. - \futurelet\next\fo@t -} -}%end \catcode `\@=11 - -% In case a @footnote appears in a vbox, save the footnote text and create -% the real \insert just after the vbox finished. Otherwise, the insertion -% would be lost. -% Similarly, if a @footnote appears inside an alignment, save the footnote -% text to a box and make the \insert when a row of the table is finished. -% And the same can be done for other insert classes. --kasal, 16nov03. - -% Replace the \insert primitive by a cheating macro. -% Deeper inside, just make sure that the saved insertions are not spilled -% out prematurely. -% -\def\startsavinginserts{% - \ifx \insert\ptexinsert - \let\insert\saveinsert - \else - \let\checkinserts\relax - \fi -} - -% This \insert replacement works for both \insert\footins{foo} and -% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. -% -\def\saveinsert#1{% - \edef\next{\noexpand\savetobox \makeSAVEname#1}% - \afterassignment\next - % swallow the left brace - \let\temp = -} -\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} -\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} - -\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} - -\def\placesaveins#1{% - \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname - {\box#1}% -} - -% eat @SAVE -- beware, all of them have catcode \other: -{ - \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) - \gdef\gobblesave @SAVE{} -} - -% initialization: -\def\newsaveins #1{% - \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% - \next -} -\def\newsaveinsX #1{% - \csname newbox\endcsname #1% - \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts - \checksaveins #1}% -} - -% initialize: -\let\checkinserts\empty -\newsaveins\footins -\newsaveins\margin - - -% @image. We use the macros from epsf.tex to support this. -% If epsf.tex is not installed and @image is used, we complain. -% -% Check for and read epsf.tex up front. If we read it only at @image -% time, we might be inside a group, and then its definitions would get -% undone and the next image would fail. -\openin 1 = epsf.tex -\ifeof 1 \else - % Do not bother showing banner with epsf.tex v2.7k (available in - % doc/epsf.tex and on ctan). - \def\epsfannounce{\toks0 = }% - \input epsf.tex -\fi -\closein 1 -% -% We will only complain once about lack of epsf.tex. -\newif\ifwarnednoepsf -\newhelp\noepsfhelp{epsf.tex must be installed for images to - work. It is also included in the Texinfo distribution, or you can get - it from ftp://tug.org/tex/epsf.tex.} -% -\def\image#1{% - \ifx\epsfbox\thisisundefined - \ifwarnednoepsf \else - \errhelp = \noepsfhelp - \errmessage{epsf.tex not found, images will be ignored}% - \global\warnednoepsftrue - \fi - \else - \imagexxx #1,,,,,\finish - \fi -} -% -% Arguments to @image: -% #1 is (mandatory) image filename; we tack on .eps extension. -% #2 is (optional) width, #3 is (optional) height. -% #4 is (ignored optional) html alt text. -% #5 is (ignored optional) extension. -% #6 is just the usual extra ignored arg for parsing stuff. -\newif\ifimagevmode -\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup - \catcode`\^^M = 5 % in case we're inside an example - \normalturnoffactive % allow _ et al. in names - % If the image is by itself, center it. - \ifvmode - \imagevmodetrue - \else \ifx\centersub\centerV - % for @center @image, we need a vbox so we can have our vertical space - \imagevmodetrue - \vbox\bgroup % vbox has better behavior than vtop herev - \fi\fi - % - \ifimagevmode - \nobreak\medskip - % Usually we'll have text after the image which will insert - % \parskip glue, so insert it here too to equalize the space - % above and below. - \nobreak\vskip\parskip - \nobreak - \fi - % - % Leave vertical mode so that indentation from an enclosing - % environment such as @quotation is respected. - % However, if we're at the top level, we don't want the - % normal paragraph indentation. - % On the other hand, if we are in the case of @center @image, we don't - % want to start a paragraph, which will create a hsize-width box and - % eradicate the centering. - \ifx\centersub\centerV\else \noindent \fi - % - % Output the image. - \ifpdf - \dopdfimage{#1}{#2}{#3}% - \else - % \epsfbox itself resets \epsf?size at each figure. - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi - \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi - \epsfbox{#1.eps}% - \fi - % - \ifimagevmode - \medskip % space after a standalone image - \fi - \ifx\centersub\centerV \egroup \fi -\endgroup} - - -% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, -% etc. We don't actually implement floating yet, we always include the -% float "here". But it seemed the best name for the future. -% -\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} - -% There may be a space before second and/or third parameter; delete it. -\def\eatcommaspace#1, {#1,} - -% #1 is the optional FLOATTYPE, the text label for this float, typically -% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, -% this float will not be numbered and cannot be referred to. -% -% #2 is the optional xref label. Also must be present for the float to -% be referable. -% -% #3 is the optional positioning argument; for now, it is ignored. It -% will somehow specify the positions allowed to float to (here, top, bottom). -% -% We keep a separate counter for each FLOATTYPE, which we reset at each -% chapter-level command. -\let\resetallfloatnos=\empty -% -\def\dofloat#1,#2,#3,#4\finish{% - \let\thiscaption=\empty - \let\thisshortcaption=\empty - % - % don't lose footnotes inside @float. - % - % BEWARE: when the floats start float, we have to issue warning whenever an - % insert appears inside a float which could possibly float. --kasal, 26may04 - % - \startsavinginserts - % - % We can't be used inside a paragraph. - \par - % - \vtop\bgroup - \def\floattype{#1}% - \def\floatlabel{#2}% - \def\floatloc{#3}% we do nothing with this yet. - % - \ifx\floattype\empty - \let\safefloattype=\empty - \else - {% - % the floattype might have accents or other special characters, - % but we need to use it in a control sequence name. - \indexnofonts - \turnoffactive - \xdef\safefloattype{\floattype}% - }% - \fi - % - % If label is given but no type, we handle that as the empty type. - \ifx\floatlabel\empty \else - % We want each FLOATTYPE to be numbered separately (Figure 1, - % Table 1, Figure 2, ...). (And if no label, no number.) - % - \expandafter\getfloatno\csname\safefloattype floatno\endcsname - \global\advance\floatno by 1 - % - {% - % This magic value for \lastsection is output by \setref as the - % XREFLABEL-title value. \xrefX uses it to distinguish float - % labels (which have a completely different output format) from - % node and anchor labels. And \xrdef uses it to construct the - % lists of floats. - % - \edef\lastsection{\floatmagic=\safefloattype}% - \setref{\floatlabel}{Yfloat}% - }% - \fi - % - % start with \parskip glue, I guess. - \vskip\parskip - % - % Don't suppress indentation if a float happens to start a section. - \restorefirstparagraphindent -} - -% we have these possibilities: -% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap -% @float Foo,lbl & no caption: Foo 1.1 -% @float Foo & @caption{Cap}: Foo: Cap -% @float Foo & no caption: Foo -% @float ,lbl & Caption{Cap}: 1.1: Cap -% @float ,lbl & no caption: 1.1 -% @float & @caption{Cap}: Cap -% @float & no caption: -% -\def\Efloat{% - \let\floatident = \empty - % - % In all cases, if we have a float type, it comes first. - \ifx\floattype\empty \else \def\floatident{\floattype}\fi - % - % If we have an xref label, the number comes next. - \ifx\floatlabel\empty \else - \ifx\floattype\empty \else % if also had float type, need tie first. - \appendtomacro\floatident{\tie}% - \fi - % the number. - \appendtomacro\floatident{\chaplevelprefix\the\floatno}% - \fi - % - % Start the printed caption with what we've constructed in - % \floatident, but keep it separate; we need \floatident again. - \let\captionline = \floatident - % - \ifx\thiscaption\empty \else - \ifx\floatident\empty \else - \appendtomacro\captionline{: }% had ident, so need a colon between - \fi - % - % caption text. - \appendtomacro\captionline{\scanexp\thiscaption}% - \fi - % - % If we have anything to print, print it, with space before. - % Eventually this needs to become an \insert. - \ifx\captionline\empty \else - \vskip.5\parskip - \captionline - % - % Space below caption. - \vskip\parskip - \fi - % - % If have an xref label, write the list of floats info. Do this - % after the caption, to avoid chance of it being a breakpoint. - \ifx\floatlabel\empty \else - % Write the text that goes in the lof to the aux file as - % \floatlabel-lof. Besides \floatident, we include the short - % caption if specified, else the full caption if specified, else nothing. - {% - \atdummies - % - % since we read the caption text in the macro world, where ^^M - % is turned into a normal character, we have to scan it back, so - % we don't write the literal three characters "^^M" into the aux file. - \scanexp{% - \xdef\noexpand\gtemp{% - \ifx\thisshortcaption\empty - \thiscaption - \else - \thisshortcaption - \fi - }% - }% - \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident - \ifx\gtemp\empty \else : \gtemp \fi}}% - }% - \fi - \egroup % end of \vtop - % - % place the captured inserts - % - % BEWARE: when the floats start floating, we have to issue warning - % whenever an insert appears inside a float which could possibly - % float. --kasal, 26may04 - % - \checkinserts -} - -% Append the tokens #2 to the definition of macro #1, not expanding either. -% -\def\appendtomacro#1#2{% - \expandafter\def\expandafter#1\expandafter{#1#2}% -} - -% @caption, @shortcaption -% -\def\caption{\docaption\thiscaption} -\def\shortcaption{\docaption\thisshortcaption} -\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} -\def\defcaption#1#2{\egroup \def#1{#2}} - -% The parameter is the control sequence identifying the counter we are -% going to use. Create it if it doesn't exist and assign it to \floatno. -\def\getfloatno#1{% - \ifx#1\relax - % Haven't seen this figure type before. - \csname newcount\endcsname #1% - % - % Remember to reset this floatno at the next chap. - \expandafter\gdef\expandafter\resetallfloatnos - \expandafter{\resetallfloatnos #1=0 }% - \fi - \let\floatno#1% -} - -% \setref calls this to get the XREFLABEL-snt value. We want an @xref -% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we -% first read the @float command. -% -\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% - -% Magic string used for the XREFLABEL-title value, so \xrefX can -% distinguish floats from other xref types. -\def\floatmagic{!!float!!} - -% #1 is the control sequence we are passed; we expand into a conditional -% which is true if #1 represents a float ref. That is, the magic -% \lastsection value which we \setref above. -% -\def\iffloat#1{\expandafter\doiffloat#1==\finish} -% -% #1 is (maybe) the \floatmagic string. If so, #2 will be the -% (safe) float type for this float. We set \iffloattype to #2. -% -\def\doiffloat#1=#2=#3\finish{% - \def\temp{#1}% - \def\iffloattype{#2}% - \ifx\temp\floatmagic -} - -% @listoffloats FLOATTYPE - print a list of floats like a table of contents. -% -\parseargdef\listoffloats{% - \def\floattype{#1}% floattype - {% - % the floattype might have accents or other special characters, - % but we need to use it in a control sequence name. - \indexnofonts - \turnoffactive - \xdef\safefloattype{\floattype}% - }% - % - % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. - \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax - \ifhavexrefs - % if the user said @listoffloats foo but never @float foo. - \message{\linenumber No `\safefloattype' floats to list.}% - \fi - \else - \begingroup - \leftskip=\tocindent % indent these entries like a toc - \let\do=\listoffloatsdo - \csname floatlist\safefloattype\endcsname - \endgroup - \fi -} - -% This is called on each entry in a list of floats. We're passed the -% xref label, in the form LABEL-title, which is how we save it in the -% aux file. We strip off the -title and look up \XRLABEL-lof, which -% has the text we're supposed to typeset here. -% -% Figures without xref labels will not be included in the list (since -% they won't appear in the aux file). -% -\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} -\def\listoffloatsdoentry#1-title\finish{{% - % Can't fully expand XR#1-lof because it can contain anything. Just - % pass the control sequence. On the other hand, XR#1-pg is just the - % page number, and we want to fully expand that so we can get a link - % in pdf output. - \toksA = \expandafter{\csname XR#1-lof\endcsname}% - % - % use the same \entry macro we use to generate the TOC and index. - \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% - \writeentry -}} - - -\message{localization,} - -% For single-language documents, @documentlanguage is usually given very -% early, just after @documentencoding. Single argument is the language -% (de) or locale (de_DE) abbreviation. -% -{ - \catcode`\_ = \active - \globaldefs=1 -\parseargdef\documentlanguage{\begingroup - \let_=\normalunderscore % normal _ character for filenames - \tex % read txi-??.tex file in plain TeX. - % Read the file by the name they passed if it exists. - \openin 1 txi-#1.tex - \ifeof 1 - \documentlanguagetrywithoutunderscore{#1_\finish}% - \else - \globaldefs = 1 % everything in the txi-LL files needs to persist - \input txi-#1.tex - \fi - \closein 1 - \endgroup % end raw TeX -\endgroup} -% -% If they passed de_DE, and txi-de_DE.tex doesn't exist, -% try txi-de.tex. -% -\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% - \openin 1 txi-#1.tex - \ifeof 1 - \errhelp = \nolanghelp - \errmessage{Cannot read language file txi-#1.tex}% - \else - \globaldefs = 1 % everything in the txi-LL files needs to persist - \input txi-#1.tex - \fi - \closein 1 -} -}% end of special _ catcode -% -\newhelp\nolanghelp{The given language definition file cannot be found or -is empty. Maybe you need to install it? Putting it in the current -directory should work if nowhere else does.} - -% This macro is called from txi-??.tex files; the first argument is the -% \language name to set (without the "\lang@" prefix), the second and -% third args are \{left,right}hyphenmin. -% -% The language names to pass are determined when the format is built. -% See the etex.log file created at that time, e.g., -% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. -% -% With TeX Live 2008, etex now includes hyphenation patterns for all -% available languages. This means we can support hyphenation in -% Texinfo, at least to some extent. (This still doesn't solve the -% accented characters problem.) -% -\catcode`@=11 -\def\txisetlanguage#1#2#3{% - % do not set the language if the name is undefined in the current TeX. - \expandafter\ifx\csname lang@#1\endcsname \relax - \message{no patterns for #1}% - \else - \global\language = \csname lang@#1\endcsname - \fi - % but there is no harm in adjusting the hyphenmin values regardless. - \global\lefthyphenmin = #2\relax - \global\righthyphenmin = #3\relax -} - -% Helpers for encodings. -% Set the catcode of characters 128 through 255 to the specified number. -% -\def\setnonasciicharscatcode#1{% - \count255=128 - \loop\ifnum\count255<256 - \global\catcode\count255=#1\relax - \advance\count255 by 1 - \repeat -} - -\def\setnonasciicharscatcodenonglobal#1{% - \count255=128 - \loop\ifnum\count255<256 - \catcode\count255=#1\relax - \advance\count255 by 1 - \repeat -} - -% @documentencoding sets the definition of non-ASCII characters -% according to the specified encoding. -% -\parseargdef\documentencoding{% - % Encoding being declared for the document. - \def\declaredencoding{\csname #1.enc\endcsname}% - % - % Supported encodings: names converted to tokens in order to be able - % to compare them with \ifx. - \def\ascii{\csname US-ASCII.enc\endcsname}% - \def\latnine{\csname ISO-8859-15.enc\endcsname}% - \def\latone{\csname ISO-8859-1.enc\endcsname}% - \def\lattwo{\csname ISO-8859-2.enc\endcsname}% - \def\utfeight{\csname UTF-8.enc\endcsname}% - % - \ifx \declaredencoding \ascii - \asciichardefs - % - \else \ifx \declaredencoding \lattwo - \setnonasciicharscatcode\active - \lattwochardefs - % - \else \ifx \declaredencoding \latone - \setnonasciicharscatcode\active - \latonechardefs - % - \else \ifx \declaredencoding \latnine - \setnonasciicharscatcode\active - \latninechardefs - % - \else \ifx \declaredencoding \utfeight - \setnonasciicharscatcode\active - \utfeightchardefs - % - \else - \message{Unknown document encoding #1, ignoring.}% - % - \fi % utfeight - \fi % latnine - \fi % latone - \fi % lattwo - \fi % ascii -} - -% A message to be logged when using a character that isn't available -% the default font encoding (OT1). -% -\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} - -% Take account of \c (plain) vs. \, (Texinfo) difference. -\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} - -% First, make active non-ASCII characters in order for them to be -% correctly categorized when TeX reads the replacement text of -% macros containing the character definitions. -\setnonasciicharscatcode\active -% -% Latin1 (ISO-8859-1) character definitions. -\def\latonechardefs{% - \gdef^^a0{\tie} - \gdef^^a1{\exclamdown} - \gdef^^a2{\missingcharmsg{CENT SIGN}} - \gdef^^a3{{\pounds}} - \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} - \gdef^^a5{\missingcharmsg{YEN SIGN}} - \gdef^^a6{\missingcharmsg{BROKEN BAR}} - \gdef^^a7{\S} - \gdef^^a8{\"{}} - \gdef^^a9{\copyright} - \gdef^^aa{\ordf} - \gdef^^ab{\guillemetleft} - \gdef^^ac{$\lnot$} - \gdef^^ad{\-} - \gdef^^ae{\registeredsymbol} - \gdef^^af{\={}} - % - \gdef^^b0{\textdegree} - \gdef^^b1{$\pm$} - \gdef^^b2{$^2$} - \gdef^^b3{$^3$} - \gdef^^b4{\'{}} - \gdef^^b5{$\mu$} - \gdef^^b6{\P} - % - \gdef^^b7{$^.$} - \gdef^^b8{\cedilla\ } - \gdef^^b9{$^1$} - \gdef^^ba{\ordm} - % - \gdef^^bb{\guillemetright} - \gdef^^bc{$1\over4$} - \gdef^^bd{$1\over2$} - \gdef^^be{$3\over4$} - \gdef^^bf{\questiondown} - % - \gdef^^c0{\`A} - \gdef^^c1{\'A} - \gdef^^c2{\^A} - \gdef^^c3{\~A} - \gdef^^c4{\"A} - \gdef^^c5{\ringaccent A} - \gdef^^c6{\AE} - \gdef^^c7{\cedilla C} - \gdef^^c8{\`E} - \gdef^^c9{\'E} - \gdef^^ca{\^E} - \gdef^^cb{\"E} - \gdef^^cc{\`I} - \gdef^^cd{\'I} - \gdef^^ce{\^I} - \gdef^^cf{\"I} - % - \gdef^^d0{\DH} - \gdef^^d1{\~N} - \gdef^^d2{\`O} - \gdef^^d3{\'O} - \gdef^^d4{\^O} - \gdef^^d5{\~O} - \gdef^^d6{\"O} - \gdef^^d7{$\times$} - \gdef^^d8{\O} - \gdef^^d9{\`U} - \gdef^^da{\'U} - \gdef^^db{\^U} - \gdef^^dc{\"U} - \gdef^^dd{\'Y} - \gdef^^de{\TH} - \gdef^^df{\ss} - % - \gdef^^e0{\`a} - \gdef^^e1{\'a} - \gdef^^e2{\^a} - \gdef^^e3{\~a} - \gdef^^e4{\"a} - \gdef^^e5{\ringaccent a} - \gdef^^e6{\ae} - \gdef^^e7{\cedilla c} - \gdef^^e8{\`e} - \gdef^^e9{\'e} - \gdef^^ea{\^e} - \gdef^^eb{\"e} - \gdef^^ec{\`{\dotless i}} - \gdef^^ed{\'{\dotless i}} - \gdef^^ee{\^{\dotless i}} - \gdef^^ef{\"{\dotless i}} - % - \gdef^^f0{\dh} - \gdef^^f1{\~n} - \gdef^^f2{\`o} - \gdef^^f3{\'o} - \gdef^^f4{\^o} - \gdef^^f5{\~o} - \gdef^^f6{\"o} - \gdef^^f7{$\div$} - \gdef^^f8{\o} - \gdef^^f9{\`u} - \gdef^^fa{\'u} - \gdef^^fb{\^u} - \gdef^^fc{\"u} - \gdef^^fd{\'y} - \gdef^^fe{\th} - \gdef^^ff{\"y} -} - -% Latin9 (ISO-8859-15) encoding character definitions. -\def\latninechardefs{% - % Encoding is almost identical to Latin1. - \latonechardefs - % - \gdef^^a4{\euro} - \gdef^^a6{\v S} - \gdef^^a8{\v s} - \gdef^^b4{\v Z} - \gdef^^b8{\v z} - \gdef^^bc{\OE} - \gdef^^bd{\oe} - \gdef^^be{\"Y} -} - -% Latin2 (ISO-8859-2) character definitions. -\def\lattwochardefs{% - \gdef^^a0{\tie} - \gdef^^a1{\ogonek{A}} - \gdef^^a2{\u{}} - \gdef^^a3{\L} - \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} - \gdef^^a5{\v L} - \gdef^^a6{\'S} - \gdef^^a7{\S} - \gdef^^a8{\"{}} - \gdef^^a9{\v S} - \gdef^^aa{\cedilla S} - \gdef^^ab{\v T} - \gdef^^ac{\'Z} - \gdef^^ad{\-} - \gdef^^ae{\v Z} - \gdef^^af{\dotaccent Z} - % - \gdef^^b0{\textdegree} - \gdef^^b1{\ogonek{a}} - \gdef^^b2{\ogonek{ }} - \gdef^^b3{\l} - \gdef^^b4{\'{}} - \gdef^^b5{\v l} - \gdef^^b6{\'s} - \gdef^^b7{\v{}} - \gdef^^b8{\cedilla\ } - \gdef^^b9{\v s} - \gdef^^ba{\cedilla s} - \gdef^^bb{\v t} - \gdef^^bc{\'z} - \gdef^^bd{\H{}} - \gdef^^be{\v z} - \gdef^^bf{\dotaccent z} - % - \gdef^^c0{\'R} - \gdef^^c1{\'A} - \gdef^^c2{\^A} - \gdef^^c3{\u A} - \gdef^^c4{\"A} - \gdef^^c5{\'L} - \gdef^^c6{\'C} - \gdef^^c7{\cedilla C} - \gdef^^c8{\v C} - \gdef^^c9{\'E} - \gdef^^ca{\ogonek{E}} - \gdef^^cb{\"E} - \gdef^^cc{\v E} - \gdef^^cd{\'I} - \gdef^^ce{\^I} - \gdef^^cf{\v D} - % - \gdef^^d0{\DH} - \gdef^^d1{\'N} - \gdef^^d2{\v N} - \gdef^^d3{\'O} - \gdef^^d4{\^O} - \gdef^^d5{\H O} - \gdef^^d6{\"O} - \gdef^^d7{$\times$} - \gdef^^d8{\v R} - \gdef^^d9{\ringaccent U} - \gdef^^da{\'U} - \gdef^^db{\H U} - \gdef^^dc{\"U} - \gdef^^dd{\'Y} - \gdef^^de{\cedilla T} - \gdef^^df{\ss} - % - \gdef^^e0{\'r} - \gdef^^e1{\'a} - \gdef^^e2{\^a} - \gdef^^e3{\u a} - \gdef^^e4{\"a} - \gdef^^e5{\'l} - \gdef^^e6{\'c} - \gdef^^e7{\cedilla c} - \gdef^^e8{\v c} - \gdef^^e9{\'e} - \gdef^^ea{\ogonek{e}} - \gdef^^eb{\"e} - \gdef^^ec{\v e} - \gdef^^ed{\'{\dotless{i}}} - \gdef^^ee{\^{\dotless{i}}} - \gdef^^ef{\v d} - % - \gdef^^f0{\dh} - \gdef^^f1{\'n} - \gdef^^f2{\v n} - \gdef^^f3{\'o} - \gdef^^f4{\^o} - \gdef^^f5{\H o} - \gdef^^f6{\"o} - \gdef^^f7{$\div$} - \gdef^^f8{\v r} - \gdef^^f9{\ringaccent u} - \gdef^^fa{\'u} - \gdef^^fb{\H u} - \gdef^^fc{\"u} - \gdef^^fd{\'y} - \gdef^^fe{\cedilla t} - \gdef^^ff{\dotaccent{}} -} - -% UTF-8 character definitions. -% -% This code to support UTF-8 is based on LaTeX's utf8.def, with some -% changes for Texinfo conventions. It is included here under the GPL by -% permission from Frank Mittelbach and the LaTeX team. -% -\newcount\countUTFx -\newcount\countUTFy -\newcount\countUTFz - -\gdef\UTFviiiTwoOctets#1#2{\expandafter - \UTFviiiDefined\csname u8:#1\string #2\endcsname} -% -\gdef\UTFviiiThreeOctets#1#2#3{\expandafter - \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} -% -\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter - \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} - -\gdef\UTFviiiDefined#1{% - \ifx #1\relax - \message{\linenumber Unicode char \string #1 not defined for Texinfo}% - \else - \expandafter #1% - \fi -} - -\begingroup - \catcode`\~13 - \catcode`\"12 - - \def\UTFviiiLoop{% - \global\catcode\countUTFx\active - \uccode`\~\countUTFx - \uppercase\expandafter{\UTFviiiTmp}% - \advance\countUTFx by 1 - \ifnum\countUTFx < \countUTFy - \expandafter\UTFviiiLoop - \fi} - - \countUTFx = "C2 - \countUTFy = "E0 - \def\UTFviiiTmp{% - \xdef~{\noexpand\UTFviiiTwoOctets\string~}} - \UTFviiiLoop - - \countUTFx = "E0 - \countUTFy = "F0 - \def\UTFviiiTmp{% - \xdef~{\noexpand\UTFviiiThreeOctets\string~}} - \UTFviiiLoop - - \countUTFx = "F0 - \countUTFy = "F4 - \def\UTFviiiTmp{% - \xdef~{\noexpand\UTFviiiFourOctets\string~}} - \UTFviiiLoop -\endgroup - -\begingroup - \catcode`\"=12 - \catcode`\<=12 - \catcode`\.=12 - \catcode`\,=12 - \catcode`\;=12 - \catcode`\!=12 - \catcode`\~=13 - - \gdef\DeclareUnicodeCharacter#1#2{% - \countUTFz = "#1\relax - %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% - \begingroup - \parseXMLCharref - \def\UTFviiiTwoOctets##1##2{% - \csname u8:##1\string ##2\endcsname}% - \def\UTFviiiThreeOctets##1##2##3{% - \csname u8:##1\string ##2\string ##3\endcsname}% - \def\UTFviiiFourOctets##1##2##3##4{% - \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% - \expandafter\expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter - \gdef\UTFviiiTmp{#2}% - \endgroup} - - \gdef\parseXMLCharref{% - \ifnum\countUTFz < "A0\relax - \errhelp = \EMsimple - \errmessage{Cannot define Unicode char value < 00A0}% - \else\ifnum\countUTFz < "800\relax - \parseUTFviiiA,% - \parseUTFviiiB C\UTFviiiTwoOctets.,% - \else\ifnum\countUTFz < "10000\relax - \parseUTFviiiA;% - \parseUTFviiiA,% - \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% - \else - \parseUTFviiiA;% - \parseUTFviiiA,% - \parseUTFviiiA!% - \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% - \fi\fi\fi - } - - \gdef\parseUTFviiiA#1{% - \countUTFx = \countUTFz - \divide\countUTFz by 64 - \countUTFy = \countUTFz - \multiply\countUTFz by 64 - \advance\countUTFx by -\countUTFz - \advance\countUTFx by 128 - \uccode `#1\countUTFx - \countUTFz = \countUTFy} - - \gdef\parseUTFviiiB#1#2#3#4{% - \advance\countUTFz by "#10\relax - \uccode `#3\countUTFz - \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} -\endgroup - -\def\utfeightchardefs{% - \DeclareUnicodeCharacter{00A0}{\tie} - \DeclareUnicodeCharacter{00A1}{\exclamdown} - \DeclareUnicodeCharacter{00A3}{\pounds} - \DeclareUnicodeCharacter{00A8}{\"{ }} - \DeclareUnicodeCharacter{00A9}{\copyright} - \DeclareUnicodeCharacter{00AA}{\ordf} - \DeclareUnicodeCharacter{00AB}{\guillemetleft} - \DeclareUnicodeCharacter{00AD}{\-} - \DeclareUnicodeCharacter{00AE}{\registeredsymbol} - \DeclareUnicodeCharacter{00AF}{\={ }} - - \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} - \DeclareUnicodeCharacter{00B4}{\'{ }} - \DeclareUnicodeCharacter{00B8}{\cedilla{ }} - \DeclareUnicodeCharacter{00BA}{\ordm} - \DeclareUnicodeCharacter{00BB}{\guillemetright} - \DeclareUnicodeCharacter{00BF}{\questiondown} - - \DeclareUnicodeCharacter{00C0}{\`A} - \DeclareUnicodeCharacter{00C1}{\'A} - \DeclareUnicodeCharacter{00C2}{\^A} - \DeclareUnicodeCharacter{00C3}{\~A} - \DeclareUnicodeCharacter{00C4}{\"A} - \DeclareUnicodeCharacter{00C5}{\AA} - \DeclareUnicodeCharacter{00C6}{\AE} - \DeclareUnicodeCharacter{00C7}{\cedilla{C}} - \DeclareUnicodeCharacter{00C8}{\`E} - \DeclareUnicodeCharacter{00C9}{\'E} - \DeclareUnicodeCharacter{00CA}{\^E} - \DeclareUnicodeCharacter{00CB}{\"E} - \DeclareUnicodeCharacter{00CC}{\`I} - \DeclareUnicodeCharacter{00CD}{\'I} - \DeclareUnicodeCharacter{00CE}{\^I} - \DeclareUnicodeCharacter{00CF}{\"I} - - \DeclareUnicodeCharacter{00D0}{\DH} - \DeclareUnicodeCharacter{00D1}{\~N} - \DeclareUnicodeCharacter{00D2}{\`O} - \DeclareUnicodeCharacter{00D3}{\'O} - \DeclareUnicodeCharacter{00D4}{\^O} - \DeclareUnicodeCharacter{00D5}{\~O} - \DeclareUnicodeCharacter{00D6}{\"O} - \DeclareUnicodeCharacter{00D8}{\O} - \DeclareUnicodeCharacter{00D9}{\`U} - \DeclareUnicodeCharacter{00DA}{\'U} - \DeclareUnicodeCharacter{00DB}{\^U} - \DeclareUnicodeCharacter{00DC}{\"U} - \DeclareUnicodeCharacter{00DD}{\'Y} - \DeclareUnicodeCharacter{00DE}{\TH} - \DeclareUnicodeCharacter{00DF}{\ss} - - \DeclareUnicodeCharacter{00E0}{\`a} - \DeclareUnicodeCharacter{00E1}{\'a} - \DeclareUnicodeCharacter{00E2}{\^a} - \DeclareUnicodeCharacter{00E3}{\~a} - \DeclareUnicodeCharacter{00E4}{\"a} - \DeclareUnicodeCharacter{00E5}{\aa} - \DeclareUnicodeCharacter{00E6}{\ae} - \DeclareUnicodeCharacter{00E7}{\cedilla{c}} - \DeclareUnicodeCharacter{00E8}{\`e} - \DeclareUnicodeCharacter{00E9}{\'e} - \DeclareUnicodeCharacter{00EA}{\^e} - \DeclareUnicodeCharacter{00EB}{\"e} - \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} - \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} - \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} - \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} - - \DeclareUnicodeCharacter{00F0}{\dh} - \DeclareUnicodeCharacter{00F1}{\~n} - \DeclareUnicodeCharacter{00F2}{\`o} - \DeclareUnicodeCharacter{00F3}{\'o} - \DeclareUnicodeCharacter{00F4}{\^o} - \DeclareUnicodeCharacter{00F5}{\~o} - \DeclareUnicodeCharacter{00F6}{\"o} - \DeclareUnicodeCharacter{00F8}{\o} - \DeclareUnicodeCharacter{00F9}{\`u} - \DeclareUnicodeCharacter{00FA}{\'u} - \DeclareUnicodeCharacter{00FB}{\^u} - \DeclareUnicodeCharacter{00FC}{\"u} - \DeclareUnicodeCharacter{00FD}{\'y} - \DeclareUnicodeCharacter{00FE}{\th} - \DeclareUnicodeCharacter{00FF}{\"y} - - \DeclareUnicodeCharacter{0100}{\=A} - \DeclareUnicodeCharacter{0101}{\=a} - \DeclareUnicodeCharacter{0102}{\u{A}} - \DeclareUnicodeCharacter{0103}{\u{a}} - \DeclareUnicodeCharacter{0104}{\ogonek{A}} - \DeclareUnicodeCharacter{0105}{\ogonek{a}} - \DeclareUnicodeCharacter{0106}{\'C} - \DeclareUnicodeCharacter{0107}{\'c} - \DeclareUnicodeCharacter{0108}{\^C} - \DeclareUnicodeCharacter{0109}{\^c} - \DeclareUnicodeCharacter{0118}{\ogonek{E}} - \DeclareUnicodeCharacter{0119}{\ogonek{e}} - \DeclareUnicodeCharacter{010A}{\dotaccent{C}} - \DeclareUnicodeCharacter{010B}{\dotaccent{c}} - \DeclareUnicodeCharacter{010C}{\v{C}} - \DeclareUnicodeCharacter{010D}{\v{c}} - \DeclareUnicodeCharacter{010E}{\v{D}} - - \DeclareUnicodeCharacter{0112}{\=E} - \DeclareUnicodeCharacter{0113}{\=e} - \DeclareUnicodeCharacter{0114}{\u{E}} - \DeclareUnicodeCharacter{0115}{\u{e}} - \DeclareUnicodeCharacter{0116}{\dotaccent{E}} - \DeclareUnicodeCharacter{0117}{\dotaccent{e}} - \DeclareUnicodeCharacter{011A}{\v{E}} - \DeclareUnicodeCharacter{011B}{\v{e}} - \DeclareUnicodeCharacter{011C}{\^G} - \DeclareUnicodeCharacter{011D}{\^g} - \DeclareUnicodeCharacter{011E}{\u{G}} - \DeclareUnicodeCharacter{011F}{\u{g}} - - \DeclareUnicodeCharacter{0120}{\dotaccent{G}} - \DeclareUnicodeCharacter{0121}{\dotaccent{g}} - \DeclareUnicodeCharacter{0124}{\^H} - \DeclareUnicodeCharacter{0125}{\^h} - \DeclareUnicodeCharacter{0128}{\~I} - \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} - \DeclareUnicodeCharacter{012A}{\=I} - \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} - \DeclareUnicodeCharacter{012C}{\u{I}} - \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} - - \DeclareUnicodeCharacter{0130}{\dotaccent{I}} - \DeclareUnicodeCharacter{0131}{\dotless{i}} - \DeclareUnicodeCharacter{0132}{IJ} - \DeclareUnicodeCharacter{0133}{ij} - \DeclareUnicodeCharacter{0134}{\^J} - \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} - \DeclareUnicodeCharacter{0139}{\'L} - \DeclareUnicodeCharacter{013A}{\'l} - - \DeclareUnicodeCharacter{0141}{\L} - \DeclareUnicodeCharacter{0142}{\l} - \DeclareUnicodeCharacter{0143}{\'N} - \DeclareUnicodeCharacter{0144}{\'n} - \DeclareUnicodeCharacter{0147}{\v{N}} - \DeclareUnicodeCharacter{0148}{\v{n}} - \DeclareUnicodeCharacter{014C}{\=O} - \DeclareUnicodeCharacter{014D}{\=o} - \DeclareUnicodeCharacter{014E}{\u{O}} - \DeclareUnicodeCharacter{014F}{\u{o}} - - \DeclareUnicodeCharacter{0150}{\H{O}} - \DeclareUnicodeCharacter{0151}{\H{o}} - \DeclareUnicodeCharacter{0152}{\OE} - \DeclareUnicodeCharacter{0153}{\oe} - \DeclareUnicodeCharacter{0154}{\'R} - \DeclareUnicodeCharacter{0155}{\'r} - \DeclareUnicodeCharacter{0158}{\v{R}} - \DeclareUnicodeCharacter{0159}{\v{r}} - \DeclareUnicodeCharacter{015A}{\'S} - \DeclareUnicodeCharacter{015B}{\'s} - \DeclareUnicodeCharacter{015C}{\^S} - \DeclareUnicodeCharacter{015D}{\^s} - \DeclareUnicodeCharacter{015E}{\cedilla{S}} - \DeclareUnicodeCharacter{015F}{\cedilla{s}} - - \DeclareUnicodeCharacter{0160}{\v{S}} - \DeclareUnicodeCharacter{0161}{\v{s}} - \DeclareUnicodeCharacter{0162}{\cedilla{t}} - \DeclareUnicodeCharacter{0163}{\cedilla{T}} - \DeclareUnicodeCharacter{0164}{\v{T}} - - \DeclareUnicodeCharacter{0168}{\~U} - \DeclareUnicodeCharacter{0169}{\~u} - \DeclareUnicodeCharacter{016A}{\=U} - \DeclareUnicodeCharacter{016B}{\=u} - \DeclareUnicodeCharacter{016C}{\u{U}} - \DeclareUnicodeCharacter{016D}{\u{u}} - \DeclareUnicodeCharacter{016E}{\ringaccent{U}} - \DeclareUnicodeCharacter{016F}{\ringaccent{u}} - - \DeclareUnicodeCharacter{0170}{\H{U}} - \DeclareUnicodeCharacter{0171}{\H{u}} - \DeclareUnicodeCharacter{0174}{\^W} - \DeclareUnicodeCharacter{0175}{\^w} - \DeclareUnicodeCharacter{0176}{\^Y} - \DeclareUnicodeCharacter{0177}{\^y} - \DeclareUnicodeCharacter{0178}{\"Y} - \DeclareUnicodeCharacter{0179}{\'Z} - \DeclareUnicodeCharacter{017A}{\'z} - \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} - \DeclareUnicodeCharacter{017C}{\dotaccent{z}} - \DeclareUnicodeCharacter{017D}{\v{Z}} - \DeclareUnicodeCharacter{017E}{\v{z}} - - \DeclareUnicodeCharacter{01C4}{D\v{Z}} - \DeclareUnicodeCharacter{01C5}{D\v{z}} - \DeclareUnicodeCharacter{01C6}{d\v{z}} - \DeclareUnicodeCharacter{01C7}{LJ} - \DeclareUnicodeCharacter{01C8}{Lj} - \DeclareUnicodeCharacter{01C9}{lj} - \DeclareUnicodeCharacter{01CA}{NJ} - \DeclareUnicodeCharacter{01CB}{Nj} - \DeclareUnicodeCharacter{01CC}{nj} - \DeclareUnicodeCharacter{01CD}{\v{A}} - \DeclareUnicodeCharacter{01CE}{\v{a}} - \DeclareUnicodeCharacter{01CF}{\v{I}} - - \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} - \DeclareUnicodeCharacter{01D1}{\v{O}} - \DeclareUnicodeCharacter{01D2}{\v{o}} - \DeclareUnicodeCharacter{01D3}{\v{U}} - \DeclareUnicodeCharacter{01D4}{\v{u}} - - \DeclareUnicodeCharacter{01E2}{\={\AE}} - \DeclareUnicodeCharacter{01E3}{\={\ae}} - \DeclareUnicodeCharacter{01E6}{\v{G}} - \DeclareUnicodeCharacter{01E7}{\v{g}} - \DeclareUnicodeCharacter{01E8}{\v{K}} - \DeclareUnicodeCharacter{01E9}{\v{k}} - - \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} - \DeclareUnicodeCharacter{01F1}{DZ} - \DeclareUnicodeCharacter{01F2}{Dz} - \DeclareUnicodeCharacter{01F3}{dz} - \DeclareUnicodeCharacter{01F4}{\'G} - \DeclareUnicodeCharacter{01F5}{\'g} - \DeclareUnicodeCharacter{01F8}{\`N} - \DeclareUnicodeCharacter{01F9}{\`n} - \DeclareUnicodeCharacter{01FC}{\'{\AE}} - \DeclareUnicodeCharacter{01FD}{\'{\ae}} - \DeclareUnicodeCharacter{01FE}{\'{\O}} - \DeclareUnicodeCharacter{01FF}{\'{\o}} - - \DeclareUnicodeCharacter{021E}{\v{H}} - \DeclareUnicodeCharacter{021F}{\v{h}} - - \DeclareUnicodeCharacter{0226}{\dotaccent{A}} - \DeclareUnicodeCharacter{0227}{\dotaccent{a}} - \DeclareUnicodeCharacter{0228}{\cedilla{E}} - \DeclareUnicodeCharacter{0229}{\cedilla{e}} - \DeclareUnicodeCharacter{022E}{\dotaccent{O}} - \DeclareUnicodeCharacter{022F}{\dotaccent{o}} - - \DeclareUnicodeCharacter{0232}{\=Y} - \DeclareUnicodeCharacter{0233}{\=y} - \DeclareUnicodeCharacter{0237}{\dotless{j}} - - \DeclareUnicodeCharacter{02DB}{\ogonek{ }} - - \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} - \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} - \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} - \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} - \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} - \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} - \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} - \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} - \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} - \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} - \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} - \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} - - \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} - \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} - - \DeclareUnicodeCharacter{1E20}{\=G} - \DeclareUnicodeCharacter{1E21}{\=g} - \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} - \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} - \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} - \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} - \DeclareUnicodeCharacter{1E26}{\"H} - \DeclareUnicodeCharacter{1E27}{\"h} - - \DeclareUnicodeCharacter{1E30}{\'K} - \DeclareUnicodeCharacter{1E31}{\'k} - \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} - \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} - \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} - \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} - \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} - \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} - \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} - \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} - \DeclareUnicodeCharacter{1E3E}{\'M} - \DeclareUnicodeCharacter{1E3F}{\'m} - - \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} - \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} - \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} - \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} - \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} - \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} - \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} - \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} - \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} - \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} - - \DeclareUnicodeCharacter{1E54}{\'P} - \DeclareUnicodeCharacter{1E55}{\'p} - \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} - \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} - \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} - \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} - \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} - \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} - \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} - \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} - - \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} - \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} - \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} - \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} - \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} - \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} - \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} - \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} - \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} - \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} - - \DeclareUnicodeCharacter{1E7C}{\~V} - \DeclareUnicodeCharacter{1E7D}{\~v} - \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} - \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} - - \DeclareUnicodeCharacter{1E80}{\`W} - \DeclareUnicodeCharacter{1E81}{\`w} - \DeclareUnicodeCharacter{1E82}{\'W} - \DeclareUnicodeCharacter{1E83}{\'w} - \DeclareUnicodeCharacter{1E84}{\"W} - \DeclareUnicodeCharacter{1E85}{\"w} - \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} - \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} - \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} - \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} - \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} - \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} - \DeclareUnicodeCharacter{1E8C}{\"X} - \DeclareUnicodeCharacter{1E8D}{\"x} - \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} - \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} - - \DeclareUnicodeCharacter{1E90}{\^Z} - \DeclareUnicodeCharacter{1E91}{\^z} - \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} - \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} - \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} - \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} - \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} - \DeclareUnicodeCharacter{1E97}{\"t} - \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} - \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} - - \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} - \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} - - \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} - \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} - \DeclareUnicodeCharacter{1EBC}{\~E} - \DeclareUnicodeCharacter{1EBD}{\~e} - - \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} - \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} - \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} - \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} - - \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} - \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} - - \DeclareUnicodeCharacter{1EF2}{\`Y} - \DeclareUnicodeCharacter{1EF3}{\`y} - \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} - - \DeclareUnicodeCharacter{1EF8}{\~Y} - \DeclareUnicodeCharacter{1EF9}{\~y} - - \DeclareUnicodeCharacter{2013}{--} - \DeclareUnicodeCharacter{2014}{---} - \DeclareUnicodeCharacter{2018}{\quoteleft} - \DeclareUnicodeCharacter{2019}{\quoteright} - \DeclareUnicodeCharacter{201A}{\quotesinglbase} - \DeclareUnicodeCharacter{201C}{\quotedblleft} - \DeclareUnicodeCharacter{201D}{\quotedblright} - \DeclareUnicodeCharacter{201E}{\quotedblbase} - \DeclareUnicodeCharacter{2022}{\bullet} - \DeclareUnicodeCharacter{2026}{\dots} - \DeclareUnicodeCharacter{2039}{\guilsinglleft} - \DeclareUnicodeCharacter{203A}{\guilsinglright} - \DeclareUnicodeCharacter{20AC}{\euro} - - \DeclareUnicodeCharacter{2192}{\expansion} - \DeclareUnicodeCharacter{21D2}{\result} - - \DeclareUnicodeCharacter{2212}{\minus} - \DeclareUnicodeCharacter{2217}{\point} - \DeclareUnicodeCharacter{2261}{\equiv} -}% end of \utfeightchardefs - - -% US-ASCII character definitions. -\def\asciichardefs{% nothing need be done - \relax -} - -% Make non-ASCII characters printable again for compatibility with -% existing Texinfo documents that may use them, even without declaring a -% document encoding. -% -\setnonasciicharscatcode \other - - -\message{formatting,} - -\newdimen\defaultparindent \defaultparindent = 15pt - -\chapheadingskip = 15pt plus 4pt minus 2pt -\secheadingskip = 12pt plus 3pt minus 2pt -\subsecheadingskip = 9pt plus 2pt minus 2pt - -% Prevent underfull vbox error messages. -\vbadness = 10000 - -% Don't be very finicky about underfull hboxes, either. -\hbadness = 6666 - -% Following George Bush, get rid of widows and orphans. -\widowpenalty=10000 -\clubpenalty=10000 - -% Use TeX 3.0's \emergencystretch to help line breaking, but if we're -% using an old version of TeX, don't do anything. We want the amount of -% stretch added to depend on the line length, hence the dependence on -% \hsize. We call this whenever the paper size is set. -% -\def\setemergencystretch{% - \ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% - \else - \emergencystretch = .15\hsize - \fi -} - -% Parameters in order: 1) textheight; 2) textwidth; -% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; -% 7) physical page height; 8) physical page width. -% -% We also call \setleading{\textleading}, so the caller should define -% \textleading. The caller should also set \parskip. -% -\def\internalpagesizes#1#2#3#4#5#6#7#8{% - \voffset = #3\relax - \topskip = #6\relax - \splittopskip = \topskip - % - \vsize = #1\relax - \advance\vsize by \topskip - \outervsize = \vsize - \advance\outervsize by 2\topandbottommargin - \pageheight = \vsize - % - \hsize = #2\relax - \outerhsize = \hsize - \advance\outerhsize by 0.5in - \pagewidth = \hsize - % - \normaloffset = #4\relax - \bindingoffset = #5\relax - % - \ifpdf - \pdfpageheight #7\relax - \pdfpagewidth #8\relax - % if we don't reset these, they will remain at "1 true in" of - % whatever layout pdftex was dumped with. - \pdfhorigin = 1 true in - \pdfvorigin = 1 true in - \fi - % - \setleading{\textleading} - % - \parindent = \defaultparindent - \setemergencystretch -} - -% @letterpaper (the default). -\def\letterpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % If page is nothing but text, make it come out even. - \internalpagesizes{607.2pt}{6in}% that's 46 lines - {\voffset}{.25in}% - {\bindingoffset}{36pt}% - {11in}{8.5in}% -}} - -% Use @smallbook to reset parameters for 7x9.25 trim size. -\def\smallbook{{\globaldefs = 1 - \parskip = 2pt plus 1pt - \textleading = 12pt - % - \internalpagesizes{7.5in}{5in}% - {-.2in}{0in}% - {\bindingoffset}{16pt}% - {9.25in}{7in}% - % - \lispnarrowing = 0.3in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = .5cm -}} - -% Use @smallerbook to reset parameters for 6x9 trim size. -% (Just testing, parameters still in flux.) -\def\smallerbook{{\globaldefs = 1 - \parskip = 1.5pt plus 1pt - \textleading = 12pt - % - \internalpagesizes{7.4in}{4.8in}% - {-.2in}{-.4in}% - {0pt}{14pt}% - {9in}{6in}% - % - \lispnarrowing = 0.25in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = .4cm -}} - -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % Double-side printing via postscript on Laserjet 4050 - % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. - % To change the settings for a different printer or situation, adjust - % \normaloffset until the front-side and back-side texts align. Then - % do the same for \bindingoffset. You can set these for testing in - % your texinfo source file like this: - % @tex - % \global\normaloffset = -6mm - % \global\bindingoffset = 10mm - % @end tex - \internalpagesizes{673.2pt}{160mm}% that's 51 lines - {\voffset}{\hoffset}% - {\bindingoffset}{44pt}% - {297mm}{210mm}% - % - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = 5mm -}} - -% Use @afivepaper to print on European A5 paper. -% From romildo@urano.iceb.ufop.br, 2 July 2000. -% He also recommends making @example and @lisp be small. -\def\afivepaper{{\globaldefs = 1 - \parskip = 2pt plus 1pt minus 0.1pt - \textleading = 12.5pt - % - \internalpagesizes{160mm}{120mm}% - {\voffset}{\hoffset}% - {\bindingoffset}{8pt}% - {210mm}{148mm}% - % - \lispnarrowing = 0.2in - \tolerance = 800 - \hfuzz = 1.2pt - \contentsrightmargin = 0pt - \defbodyindent = 2mm - \tableindent = 12mm -}} - -% A specific text layout, 24x15cm overall, intended for A4 paper. -\def\afourlatex{{\globaldefs = 1 - \afourpaper - \internalpagesizes{237mm}{150mm}% - {\voffset}{4.6mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - % - % Must explicitly reset to 0 because we call \afourpaper. - \globaldefs = 0 -}} - -% Use @afourwide to print on A4 paper in landscape format. -\def\afourwide{{\globaldefs = 1 - \afourpaper - \internalpagesizes{241mm}{165mm}% - {\voffset}{-2.95mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - \globaldefs = 0 -}} - -% @pagesizes TEXTHEIGHT[,TEXTWIDTH] -% Perhaps we should allow setting the margins, \topskip, \parskip, -% and/or leading, also. Or perhaps we should compute them somehow. -% -\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} -\def\pagesizesyyy#1,#2,#3\finish{{% - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi - \globaldefs = 1 - % - \parskip = 3pt plus 2pt minus 1pt - \setleading{\textleading}% - % - \dimen0 = #1\relax - \advance\dimen0 by \voffset - % - \dimen2 = \hsize - \advance\dimen2 by \normaloffset - % - \internalpagesizes{#1}{\hsize}% - {\voffset}{\normaloffset}% - {\bindingoffset}{44pt}% - {\dimen0}{\dimen2}% -}} - -% Set default to letter. -% -\letterpaper - - -\message{and turning on texinfo input format.} - -\def^^L{\par} % remove \outer, so ^L can appear in an @comment - -% DEL is a comment character, in case @c does not suffice. -\catcode`\^^? = 14 - -% Define macros to output various characters with catcode for normal text. -\catcode`\"=\other \def\normaldoublequote{"} -\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix -\catcode`\+=\other \def\normalplus{+} -\catcode`\<=\other \def\normalless{<} -\catcode`\>=\other \def\normalgreater{>} -\catcode`\^=\other \def\normalcaret{^} -\catcode`\_=\other \def\normalunderscore{_} -\catcode`\|=\other \def\normalverticalbar{|} -\catcode`\~=\other \def\normaltilde{~} - -% This macro is used to make a character print one way in \tt -% (where it can probably be output as-is), and another way in other fonts, -% where something hairier probably needs to be done. -% -% #1 is what to print if we are indeed using \tt; #2 is what to print -% otherwise. Since all the Computer Modern typewriter fonts have zero -% interword stretch (and shrink), and it is reasonable to expect all -% typewriter fonts to have this, we can check that font parameter. -% -\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} - -% Same as above, but check for italic font. Actually this also catches -% non-italic slanted fonts since it is impossible to distinguish them from -% italic fonts. But since this is only used by $ and it uses \sl anyway -% this is not a problem. -\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} - -% Turn off all special characters except @ -% (and those which the user can use as if they were ordinary). -% Most of these we simply print from the \tt font, but for some, we can -% use math or other variants that look better in normal text. - -\catcode`\"=\active -\def\activedoublequote{{\tt\char34}} -\let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt\char126}} -\chardef\hat=`\^ -\catcode`\^=\active -\def^{{\tt \hat}} - -\catcode`\_=\active -\def_{\ifusingtt\normalunderscore\_} -\let\realunder=_ -% Subroutine for the previous macro. -\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } - -\catcode`\|=\active -\def|{{\tt\char124}} -\chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} -\chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -\catcode`\$=\active -\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix - -% If a .fmt file is being used, characters that might appear in a file -% name cannot be active until we have parsed the command line. -% So turn them off again, and have \everyjob (or @setfilename) turn them on. -% \otherifyactive is called near the end of this file. -\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} - -% Used sometimes to turn off (effectively) the active characters even after -% parsing them. -\def\turnoffactive{% - \normalturnoffactive - \otherbackslash -} - -\catcode`\@=0 - -% \backslashcurfont outputs one backslash character in current font, -% as in \char`\\. -\global\chardef\backslashcurfont=`\\ -\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work - -% \realbackslash is an actual character `\' with catcode other, and -% \doublebackslash is two of them (for the pdf outlines). -{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} - -% In texinfo, backslash is an active character; it prints the backslash -% in fixed width font. -\catcode`\\=\active % @ for escape char from now on. - -% The story here is that in math mode, the \char of \backslashcurfont -% ends up printing the roman \ from the math symbol font (because \char -% in math mode uses the \mathcode, and plain.tex sets -% \mathcode`\\="026E). It seems better for @backslashchar{} to always -% print a typewriter backslash, hence we use an explicit \mathchar, -% which is the decimal equivalent of "715c (class 7, e.g., use \fam; -% ignored family value; char position "5C). We can't use " for the -% usual hex value because it has already been made active. -@def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} -@let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. - -% On startup, @fixbackslash assigns: -% @let \ = @normalbackslash -% \rawbackslash defines an active \ to do \backslashcurfont. -% \otherbackslash defines an active \ to be a literal `\' character with -% catcode other. We switch back and forth between these. -@gdef@rawbackslash{@let\=@backslashcurfont} -@gdef@otherbackslash{@let\=@realbackslash} - -% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of -% the literal character `\'. Also revert - to its normal character, in -% case the active - from code has slipped in. -% -{@catcode`- = @active - @gdef@normalturnoffactive{% - @let-=@normaldash - @let"=@normaldoublequote - @let$=@normaldollar %$ font-lock fix - @let+=@normalplus - @let<=@normalless - @let>=@normalgreater - @let\=@normalbackslash - @let^=@normalcaret - @let_=@normalunderscore - @let|=@normalverticalbar - @let~=@normaltilde - @markupsetuplqdefault - @markupsetuprqdefault - @unsepspaces - } -} - -% Make _ and + \other characters, temporarily. -% This is canceled by @fixbackslash. -@otherifyactive - -% If a .fmt file is being used, we don't want the `\input texinfo' to show up. -% That is what \eatinput is for; after that, the `\' should revert to printing -% a backslash. -% -@gdef@eatinput input texinfo{@fixbackslash} -@global@let\ = @eatinput - -% On the other hand, perhaps the file did not have a `\input texinfo'. Then -% the first `\' in the file would cause an error. This macro tries to fix -% that, assuming it is called before the first `\' could plausibly occur. -% Also turn back on active characters that might appear in the input -% file name, in case not using a pre-dumped format. -% -@gdef@fixbackslash{% - @ifx\@eatinput @let\ = @normalbackslash @fi - @catcode`+=@active - @catcode`@_=@active -} - -% Say @foo, not \foo, in error messages. -@escapechar = `@@ - -% These (along with & and #) are made active for url-breaking, so need -% active definitions as the normal characters. -@def@normaldot{.} -@def@normalquest{?} -@def@normalslash{/} - -% These look ok in all fonts, so just make them not special. -% @hashchar{} gets its own user-level command, because of #line. -@catcode`@& = @other @def@normalamp{&} -@catcode`@# = @other @def@normalhash{#} -@catcode`@% = @other @def@normalpercent{%} - -@let @hashchar = @normalhash - -@c Finally, make ` and ' active, so that txicodequoteundirected and -@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we -@c don't make ` and ' active, @code will not get them as active chars. -@c Do this last of all since we use ` in the previous @catcode assignments. -@catcode`@'=@active -@catcode`@`=@active -@markupsetuplqdefault -@markupsetuprqdefault - -@c Local variables: -@c eval: (add-hook 'write-file-hooks 'time-stamp) -@c page-delimiter: "^\\\\message" -@c time-stamp-start: "def\\\\texinfoversion{" -@c time-stamp-format: "%:y-%02m-%02d.%02H" -@c time-stamp-end: "}" -@c End: - -@c vim:sw=2: - -@ignore - arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 -@end ignore diff --git a/ruby/ext/fiddle/memory_view.c b/ruby/ext/fiddle/memory_view.c new file mode 100644 index 000000000..fa66fc2c7 --- /dev/null +++ b/ruby/ext/fiddle/memory_view.c @@ -0,0 +1,321 @@ +#include + +#ifdef HAVE_RUBY_MEMORY_VIEW_H + +#include +#include +#include +#include + +#if SIZEOF_INTPTR_T == SIZEOF_LONG_LONG +# define INTPTR2NUM LL2NUM +# define UINTPTR2NUM ULL2NUM +#elif SIZEOF_INTPTR_T == SIZEOF_LONG +# define INTPTR2NUM LONG2NUM +# define UINTPTR2NUM ULONG2NUM +#else +# define INTPTR2NUM INT2NUM +# define UINTPTR2NUM UINT2NUM +#endif + +VALUE rb_cMemoryView = Qnil; + +struct memview_data { + rb_memory_view_t view; + rb_memory_view_item_component_t *members; + size_t n_members; +}; + +static void +fiddle_memview_mark(void *ptr) +{ + const struct memview_data *data = ptr; + rb_gc_mark(data->view.obj); +} + +static void +fiddle_memview_release(struct memview_data *data) +{ + if (NIL_P(data->view.obj)) return; + + rb_memory_view_release(&data->view); + data->view.obj = Qnil; + data->view.byte_size = 0; + if (data->members) { + xfree(data->members); + data->members = NULL; + data->n_members = 0; + } +} + +static void +fiddle_memview_free(void *ptr) +{ + struct memview_data *data = ptr; + fiddle_memview_release(data); + xfree(ptr); +} + +static size_t +fiddle_memview_memsize(const void *ptr) +{ + const struct memview_data *data = ptr; + return sizeof(*data) + sizeof(rb_memory_view_item_component_t)*data->n_members + (size_t)data->view.byte_size; +} + +static const rb_data_type_t fiddle_memview_data_type = { + "fiddle/memory_view", + {fiddle_memview_mark, fiddle_memview_free, fiddle_memview_memsize,}, +}; + +static VALUE +rb_fiddle_memview_s_allocate(VALUE klass) +{ + struct memview_data *data; + VALUE obj = TypedData_Make_Struct(klass, struct memview_data, &fiddle_memview_data_type, data); + data->view.obj = Qnil; + data->view.byte_size = 0; + data->members = NULL; + data->n_members = 0; + return obj; +} + +static VALUE +rb_fiddle_memview_release(VALUE obj) +{ + struct memview_data *data; + TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data); + + if (NIL_P(data->view.obj)) return Qnil; + fiddle_memview_release(data); + return Qnil; +} + +static VALUE +rb_fiddle_memview_s_export(VALUE klass, VALUE target) +{ + ID id_new; + CONST_ID(id_new, "new"); + VALUE memview = rb_funcall(klass, id_new, 1, target); + return rb_ensure(rb_yield, memview, rb_fiddle_memview_release, memview); +} + +static VALUE +rb_fiddle_memview_initialize(VALUE obj, VALUE target) +{ + struct memview_data *data; + TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data); + + if (!rb_memory_view_get(target, &data->view, 0)) { + data->view.obj = Qnil; + rb_raise(rb_eArgError, "Unable to get a memory view from %+"PRIsVALUE, target); + } + + return Qnil; +} + +static VALUE +rb_fiddle_memview_get_obj(VALUE obj) +{ + struct memview_data *data; + TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data); + + return data->view.obj; +} + +static VALUE +rb_fiddle_memview_get_byte_size(VALUE obj) +{ + struct memview_data *data; + TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data); + + if (NIL_P(data->view.obj)) return Qnil; + return SSIZET2NUM(data->view.byte_size); +} + +static VALUE +rb_fiddle_memview_get_readonly(VALUE obj) +{ + struct memview_data *data; + TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data); + + if (NIL_P(data->view.obj)) return Qnil; + return data->view.readonly ? Qtrue : Qfalse; +} + +static VALUE +rb_fiddle_memview_get_format(VALUE obj) +{ + struct memview_data *data; + TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data); + + if (NIL_P(data->view.obj)) return Qnil; + return data->view.format == NULL ? Qnil : rb_str_new_cstr(data->view.format); +} + +static VALUE +rb_fiddle_memview_get_item_size(VALUE obj) +{ + struct memview_data *data; + TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data); + + if (NIL_P(data->view.obj)) return Qnil; + return SSIZET2NUM(data->view.item_size); +} + +static VALUE +rb_fiddle_memview_get_ndim(VALUE obj) +{ + struct memview_data *data; + TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data); + + if (NIL_P(data->view.obj)) return Qnil; + return SSIZET2NUM(data->view.ndim); +} + +static VALUE +rb_fiddle_memview_get_shape(VALUE obj) +{ + struct memview_data *data; + TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data); + + if (NIL_P(data->view.obj)) return Qnil; + if (data->view.shape == NULL) return Qnil; + + const ssize_t ndim = data->view.ndim; + VALUE shape = rb_ary_new_capa(ndim); + ssize_t i; + for (i = 0; i < ndim; ++i) { + rb_ary_push(shape, SSIZET2NUM(data->view.shape[i])); + } + return shape; +} + +static VALUE +rb_fiddle_memview_get_strides(VALUE obj) +{ + struct memview_data *data; + TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data); + + if (NIL_P(data->view.obj)) return Qnil; + if (data->view.strides == NULL) return Qnil; + + const ssize_t ndim = data->view.ndim; + VALUE strides = rb_ary_new_capa(ndim); + ssize_t i; + for (i = 0; i < ndim; ++i) { + rb_ary_push(strides, SSIZET2NUM(data->view.strides[i])); + } + return strides; +} + +static VALUE +rb_fiddle_memview_get_sub_offsets(VALUE obj) +{ + struct memview_data *data; + TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data); + + if (NIL_P(data->view.obj)) return Qnil; + if (data->view.sub_offsets == NULL) return Qnil; + + const ssize_t ndim = data->view.ndim; + VALUE sub_offsets = rb_ary_new_capa(ndim); + ssize_t i; + for (i = 0; i < ndim; ++i) { + rb_ary_push(sub_offsets, SSIZET2NUM(data->view.sub_offsets[i])); + } + return sub_offsets; +} + +static VALUE +rb_fiddle_memview_aref(int argc, VALUE *argv, VALUE obj) +{ + struct memview_data *data; + TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data); + + if (NIL_P(data->view.obj)) return Qnil; + + const ssize_t ndim = data->view.ndim; + if (argc != ndim) { + rb_raise(rb_eIndexError, "wrong number of index (%d for %"PRIdSIZE")", argc, ndim); + } + + VALUE indices_v = 0; + ssize_t *indices = ALLOCV_N(ssize_t, indices_v, ndim); + + ssize_t i; + for (i = 0; i < ndim; ++i) { + ssize_t x = NUM2SSIZET(argv[i]); + indices[i] = x; + } + + uint8_t *ptr = rb_memory_view_get_item_pointer(&data->view, indices); + ALLOCV_END(indices_v); + + if (data->view.format == NULL) { + return INT2FIX(*ptr); + } + + if (!data->members) { + const char *err; + if (rb_memory_view_parse_item_format(data->view.format, &data->members, &data->n_members, &err) < 0) { + rb_raise(rb_eRuntimeError, "Unable to recognize item format at %"PRIdSIZE" in \"%s\"", + err - data->view.format, data->view.format); + } + } + + return rb_memory_view_extract_item_members(ptr, data->members, data->n_members); +} + +static VALUE +rb_fiddle_memview_to_s(VALUE self) +{ + struct memview_data *data; + const char *raw_data; + long byte_size; + VALUE string; + + TypedData_Get_Struct(self, + struct memview_data, + &fiddle_memview_data_type, + data); + + if (NIL_P(data->view.obj)) { + raw_data = NULL; + byte_size = 0; + } else { + raw_data = data->view.data; + byte_size = data->view.byte_size; + } + + string = rb_enc_str_new_static(raw_data, byte_size, rb_ascii8bit_encoding()); + { + ID id_memory_view; + CONST_ID(id_memory_view, "memory_view"); + rb_ivar_set(string, id_memory_view, self); + } + return rb_obj_freeze(string); +} + +void +Init_fiddle_memory_view(void) +{ + rb_cMemoryView = rb_define_class_under(mFiddle, "MemoryView", rb_cObject); + rb_define_alloc_func(rb_cMemoryView, rb_fiddle_memview_s_allocate); + rb_define_singleton_method(rb_cMemoryView, "export", rb_fiddle_memview_s_export, 1); + rb_define_method(rb_cMemoryView, "initialize", rb_fiddle_memview_initialize, 1); + rb_define_method(rb_cMemoryView, "release", rb_fiddle_memview_release, 0); + rb_define_method(rb_cMemoryView, "obj", rb_fiddle_memview_get_obj, 0); + rb_define_method(rb_cMemoryView, "byte_size", rb_fiddle_memview_get_byte_size, 0); + rb_define_method(rb_cMemoryView, "readonly?", rb_fiddle_memview_get_readonly, 0); + rb_define_method(rb_cMemoryView, "format", rb_fiddle_memview_get_format, 0); + rb_define_method(rb_cMemoryView, "item_size", rb_fiddle_memview_get_item_size, 0); + rb_define_method(rb_cMemoryView, "ndim", rb_fiddle_memview_get_ndim, 0); + rb_define_method(rb_cMemoryView, "shape", rb_fiddle_memview_get_shape, 0); + rb_define_method(rb_cMemoryView, "strides", rb_fiddle_memview_get_strides, 0); + rb_define_method(rb_cMemoryView, "sub_offsets", rb_fiddle_memview_get_sub_offsets, 0); + rb_define_method(rb_cMemoryView, "[]", rb_fiddle_memview_aref, -1); + rb_define_method(rb_cMemoryView, "to_s", rb_fiddle_memview_to_s, 0); +} + +#endif /* HAVE_RUBY_MEMORY_VIEW_H */ diff --git a/ruby/ext/fiddle/pinned.c b/ruby/ext/fiddle/pinned.c new file mode 100644 index 000000000..019a3020e --- /dev/null +++ b/ruby/ext/fiddle/pinned.c @@ -0,0 +1,123 @@ +#include + +VALUE rb_cPinned; +VALUE rb_eFiddleClearedReferenceError; + +struct pinned_data { + VALUE ptr; +}; + +static void +pinned_mark(void *ptr) +{ + struct pinned_data *data = (struct pinned_data*)ptr; + /* Ensure reference is pinned */ + if (data->ptr) { + rb_gc_mark(data->ptr); + } +} + +static size_t +pinned_memsize(const void *ptr) +{ + return sizeof(struct pinned_data); +} + +static const rb_data_type_t pinned_data_type = { + "fiddle/pinned", + {pinned_mark, xfree, pinned_memsize, }, + 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED +}; + +static VALUE +allocate(VALUE klass) +{ + struct pinned_data *data; + VALUE obj = TypedData_Make_Struct(klass, struct pinned_data, &pinned_data_type, data); + data->ptr = 0; + return obj; +} + +/* + * call-seq: + * Fiddle::Pinned.new(object) => pinned_object + * + * Create a new pinned object reference. The Fiddle::Pinned instance will + * prevent the GC from moving +object+. + */ +static VALUE +initialize(VALUE self, VALUE ref) +{ + struct pinned_data *data; + TypedData_Get_Struct(self, struct pinned_data, &pinned_data_type, data); + RB_OBJ_WRITE(self, &data->ptr, ref); + return self; +} + +/* + * call-seq: ref + * + * Return the object that this pinned instance references. + */ +static VALUE +ref(VALUE self) +{ + struct pinned_data *data; + TypedData_Get_Struct(self, struct pinned_data, &pinned_data_type, data); + if (data->ptr) { + return data->ptr; + } else { + rb_raise(rb_eFiddleClearedReferenceError, "`ref` called on a cleared object"); + } +} + +/* + * call-seq: clear + * + * Clear the reference to the object this is pinning. + */ +static VALUE +clear(VALUE self) +{ + struct pinned_data *data; + TypedData_Get_Struct(self, struct pinned_data, &pinned_data_type, data); + data->ptr = 0; + return self; +} + +/* + * call-seq: cleared? + * + * Returns true if the reference has been cleared, otherwise returns false. + */ +static VALUE +cleared_p(VALUE self) +{ + struct pinned_data *data; + TypedData_Get_Struct(self, struct pinned_data, &pinned_data_type, data); + if (data->ptr) { + return Qfalse; + } else { + return Qtrue; + } +} + +extern VALUE rb_eFiddleError; + +void +Init_fiddle_pinned(void) +{ + rb_cPinned = rb_define_class_under(mFiddle, "Pinned", rb_cObject); + rb_define_alloc_func(rb_cPinned, allocate); + rb_define_method(rb_cPinned, "initialize", initialize, 1); + rb_define_method(rb_cPinned, "ref", ref, 0); + rb_define_method(rb_cPinned, "clear", clear, 0); + rb_define_method(rb_cPinned, "cleared?", cleared_p, 0); + + /* + * Document-class: Fiddle::ClearedReferenceError + * + * Cleared reference exception + */ + rb_eFiddleClearedReferenceError = rb_define_class_under(mFiddle, "ClearedReferenceError", rb_eFiddleError); +} diff --git a/ruby/ext/fiddle/pointer.c b/ruby/ext/fiddle/pointer.c index 117cc9b82..15107e386 100644 --- a/ruby/ext/fiddle/pointer.c +++ b/ruby/ext/fiddle/pointer.c @@ -2,11 +2,17 @@ * $Id$ */ +#include #include #include + #include #include +#ifdef HAVE_RUBY_MEMORY_VIEW_H +# include +#endif + #ifdef PRIsVALUE # define RB_OBJ_CLASSNAME(obj) rb_obj_class(obj) # define RB_OBJ_STRING(obj) (obj) @@ -18,12 +24,13 @@ VALUE rb_cPointer; -typedef void (*freefunc_t)(void*); +typedef rb_fiddle_freefunc_t freefunc_t; struct ptr_data { void *ptr; long size; freefunc_t free; + bool freed; VALUE wrap[2]; }; @@ -57,14 +64,19 @@ fiddle_ptr_mark(void *ptr) } static void -fiddle_ptr_free(void *ptr) +fiddle_ptr_free_ptr(void *ptr) { struct ptr_data *data = ptr; - if (data->ptr) { - if (data->free) { - (*(data->free))(data->ptr); - } + if (data->ptr && data->free && !data->freed) { + data->freed = true; + (*(data->free))(data->ptr); } +} + +static void +fiddle_ptr_free(void *ptr) +{ + fiddle_ptr_free_ptr(ptr); xfree(ptr); } @@ -80,8 +92,40 @@ static const rb_data_type_t fiddle_ptr_data_type = { {fiddle_ptr_mark, fiddle_ptr_free, fiddle_ptr_memsize,}, }; +#ifdef HAVE_RUBY_MEMORY_VIEW_H +static struct ptr_data * +fiddle_ptr_check_memory_view(VALUE obj) +{ + struct ptr_data *data; + TypedData_Get_Struct(obj, struct ptr_data, &fiddle_ptr_data_type, data); + if (data->ptr == NULL || data->size == 0) return NULL; + return data; +} + +static bool +fiddle_ptr_memory_view_available_p(VALUE obj) +{ + return fiddle_ptr_check_memory_view(obj) != NULL; +} + +static bool +fiddle_ptr_get_memory_view(VALUE obj, rb_memory_view_t *view, int flags) +{ + struct ptr_data *data = fiddle_ptr_check_memory_view(obj); + rb_memory_view_init_as_byte_array(view, obj, data->ptr, data->size, true); + + return true; +} + +static const rb_memory_view_entry_t fiddle_ptr_memory_view_entry = { + fiddle_ptr_get_memory_view, + NULL, + fiddle_ptr_memory_view_available_p +}; +#endif + static VALUE -rb_fiddle_ptr_new2(VALUE klass, void *ptr, long size, freefunc_t func) +rb_fiddle_ptr_new2(VALUE klass, void *ptr, long size, freefunc_t func, VALUE wrap0, VALUE wrap1) { struct ptr_data *data; VALUE val; @@ -89,25 +133,34 @@ rb_fiddle_ptr_new2(VALUE klass, void *ptr, long size, freefunc_t func) val = TypedData_Make_Struct(klass, struct ptr_data, &fiddle_ptr_data_type, data); data->ptr = ptr; data->free = func; + data->freed = false; data->size = size; + data->wrap[0] = wrap0; + data->wrap[1] = wrap1; return val; } +VALUE +rb_fiddle_ptr_new_wrap(void *ptr, long size, freefunc_t func, VALUE wrap0, VALUE wrap1) +{ + return rb_fiddle_ptr_new2(rb_cPointer, ptr, size, func, wrap0, wrap1); +} + static VALUE rb_fiddle_ptr_new(void *ptr, long size, freefunc_t func) { - return rb_fiddle_ptr_new2(rb_cPointer, ptr, size, func); + return rb_fiddle_ptr_new2(rb_cPointer, ptr, size, func, 0, 0); } static VALUE -rb_fiddle_ptr_malloc(long size, freefunc_t func) +rb_fiddle_ptr_malloc(VALUE klass, long size, freefunc_t func) { void *ptr; ptr = ruby_xmalloc((size_t)size); memset(ptr,0,(size_t)size); - return rb_fiddle_ptr_new(ptr, size, func); + return rb_fiddle_ptr_new2(klass, ptr, size, func, 0, 0); } static void * @@ -140,6 +193,7 @@ rb_fiddle_ptr_s_allocate(VALUE klass) data->ptr = 0; data->size = 0; data->free = 0; + data->freed = false; return obj; } @@ -191,16 +245,53 @@ rb_fiddle_ptr_initialize(int argc, VALUE argv[], VALUE self) return Qnil; } +static VALUE +rb_fiddle_ptr_call_free(VALUE self); + /* * call-seq: - * * Fiddle::Pointer.malloc(size, freefunc = nil) => fiddle pointer instance + * Fiddle::Pointer.malloc(size, freefunc) { |pointer| ... } => ... + * + * == Examples + * + * # Automatically freeing the pointer when the block is exited - recommended + * Fiddle::Pointer.malloc(size, Fiddle::RUBY_FREE) do |pointer| + * ... + * end + * + * # Manually freeing but relying on the garbage collector otherwise + * pointer = Fiddle::Pointer.malloc(size, Fiddle::RUBY_FREE) + * ... + * pointer.call_free + * + * # Relying on the garbage collector - may lead to unlimited memory allocated before freeing any, but safe + * pointer = Fiddle::Pointer.malloc(size, Fiddle::RUBY_FREE) + * ... + * + * # Only manually freeing + * pointer = Fiddle::Pointer.malloc(size) + * begin + * ... + * ensure + * Fiddle.free pointer + * end + * + * # No free function and no call to free - the native memory will leak if the pointer is garbage collected + * pointer = Fiddle::Pointer.malloc(size) + * ... * * Allocate +size+ bytes of memory and associate it with an optional - * +freefunc+ that will be called when the pointer is garbage collected. + * +freefunc+. * - * +freefunc+ must be an address pointing to a function or an instance of - * Fiddle::Function + * If a block is supplied, the pointer will be yielded to the block instead of + * being returned, and the return value of the block will be returned. A + * +freefunc+ must be supplied if a block is. + * + * If a +freefunc+ is supplied it will be called once, when the pointer is + * garbage collected or when the block is left if a block is supplied or + * when the user calls +call_free+, whichever happens first. +freefunc+ must be + * an address pointing to a function or an instance of +Fiddle::Function+. */ static VALUE rb_fiddle_ptr_s_malloc(int argc, VALUE argv[], VALUE klass) @@ -222,10 +313,17 @@ rb_fiddle_ptr_s_malloc(int argc, VALUE argv[], VALUE klass) rb_bug("rb_fiddle_ptr_s_malloc"); } - obj = rb_fiddle_ptr_malloc(s,f); + obj = rb_fiddle_ptr_malloc(klass, s,f); if (wrap) RPTR_DATA(obj)->wrap[1] = wrap; - return obj; + if (rb_block_given_p()) { + if (!f) { + rb_raise(rb_eArgError, "a free function must be supplied to Fiddle::Pointer.malloc when it is called with a block"); + } + return rb_ensure(rb_yield, obj, rb_fiddle_ptr_call_free, obj); + } else { + return obj; + } } /* @@ -350,6 +448,34 @@ rb_fiddle_ptr_free_get(VALUE self) return rb_fiddle_new_function(address, arg_types, ret_type); } +/* + * call-seq: call_free => nil + * + * Call the free function for this pointer. Calling more than once will do + * nothing. Does nothing if there is no free function attached. + */ +static VALUE +rb_fiddle_ptr_call_free(VALUE self) +{ + struct ptr_data *pdata; + TypedData_Get_Struct(self, struct ptr_data, &fiddle_ptr_data_type, pdata); + fiddle_ptr_free_ptr(pdata); + return Qnil; +} + +/* + * call-seq: freed? => bool + * + * Returns if the free function for this pointer has been called. + */ +static VALUE +rb_fiddle_ptr_freed_p(VALUE self) +{ + struct ptr_data *pdata; + TypedData_Get_Struct(self, struct ptr_data, &fiddle_ptr_data_type, pdata); + return pdata->freed ? Qtrue : Qfalse; +} + /* * call-seq: * @@ -541,7 +667,7 @@ rb_fiddle_ptr_aref(int argc, VALUE argv[], VALUE self) struct ptr_data *data; TypedData_Get_Struct(self, struct ptr_data, &fiddle_ptr_data_type, data); - if (!data->ptr) rb_raise(rb_eFiddleError, "NULL pointer dereference"); + if (!data->ptr) rb_raise(rb_eFiddleDLError, "NULL pointer dereference"); switch( rb_scan_args(argc, argv, "11", &arg0, &arg1) ){ case 1: offset = NUM2ULONG(arg0); @@ -579,7 +705,7 @@ rb_fiddle_ptr_aset(int argc, VALUE argv[], VALUE self) struct ptr_data *data; TypedData_Get_Struct(self, struct ptr_data, &fiddle_ptr_data_type, data); - if (!data->ptr) rb_raise(rb_eFiddleError, "NULL pointer dereference"); + if (!data->ptr) rb_raise(rb_eFiddleDLError, "NULL pointer dereference"); switch( rb_scan_args(argc, argv, "21", &arg0, &arg1, &arg2) ){ case 2: offset = NUM2ULONG(arg0); @@ -652,6 +778,7 @@ rb_fiddle_ptr_s_to_ptr(VALUE self, VALUE val) } else if (RTEST(rb_obj_is_kind_of(val, rb_cString))){ char *str = StringValuePtr(val); + wrap = val; ptr = rb_fiddle_ptr_new(str, RSTRING_LEN(val), NULL); } else if ((vptr = rb_check_funcall(val, id_to_ptr, 0, 0)) != Qundef){ @@ -660,7 +787,7 @@ rb_fiddle_ptr_s_to_ptr(VALUE self, VALUE val) wrap = 0; } else{ - rb_raise(rb_eFiddleError, "to_ptr should return a Fiddle::Pointer object"); + rb_raise(rb_eFiddleDLError, "to_ptr should return a Fiddle::Pointer object"); } } else{ @@ -691,6 +818,8 @@ Init_fiddle_pointer(void) rb_define_method(rb_cPointer, "initialize", rb_fiddle_ptr_initialize, -1); rb_define_method(rb_cPointer, "free=", rb_fiddle_ptr_free_set, 1); rb_define_method(rb_cPointer, "free", rb_fiddle_ptr_free_get, 0); + rb_define_method(rb_cPointer, "call_free", rb_fiddle_ptr_call_free, 0); + rb_define_method(rb_cPointer, "freed?", rb_fiddle_ptr_freed_p, 0); rb_define_method(rb_cPointer, "to_i", rb_fiddle_ptr_to_i, 0); rb_define_method(rb_cPointer, "to_int", rb_fiddle_ptr_to_i, 0); rb_define_method(rb_cPointer, "to_value", rb_fiddle_ptr_to_value, 0); @@ -712,6 +841,10 @@ Init_fiddle_pointer(void) rb_define_method(rb_cPointer, "size", rb_fiddle_ptr_size_get, 0); rb_define_method(rb_cPointer, "size=", rb_fiddle_ptr_size_set, 1); +#ifdef HAVE_RUBY_MEMORY_VIEW_H + rb_memory_view_register(rb_cPointer, &fiddle_ptr_memory_view_entry); +#endif + /* Document-const: NULL * * A NULL pointer diff --git a/ruby/ext/fiddle/win32/fficonfig.h b/ruby/ext/fiddle/win32/fficonfig.h old mode 100755 new mode 100644 diff --git a/ruby/ext/fiddle/win32/libffi-config.rb b/ruby/ext/fiddle/win32/libffi-config.rb index 6abc9b2c0..985fc29d3 100755 --- a/ruby/ext/fiddle/win32/libffi-config.rb +++ b/ruby/ext/fiddle/win32/libffi-config.rb @@ -32,7 +32,7 @@ end end -builddir = srcdir == "." ? enable['builddir'] : "." +builddir = srcdir == "." ? (enable['builddir'] || ".") : "." conf['TARGET'] = /^x64/ =~ host ? "X86_WIN64" : "X86_WIN32" FileUtils.mkdir_p([builddir, "#{builddir}/include", "#{builddir}/src/x86"]) diff --git a/ruby/ext/fiddle/win32/libffi.mk.tmpl b/ruby/ext/fiddle/win32/libffi.mk.tmpl old mode 100755 new mode 100644 diff --git a/ruby/ext/gdbm/README b/ruby/ext/gdbm/README deleted file mode 100644 index df7a261c6..000000000 --- a/ruby/ext/gdbm/README +++ /dev/null @@ -1 +0,0 @@ -gdbm ext-library for Ruby 1.3 or later diff --git a/ruby/ext/gdbm/depend b/ruby/ext/gdbm/depend deleted file mode 100644 index 33635bc09..000000000 --- a/ruby/ext/gdbm/depend +++ /dev/null @@ -1,14 +0,0 @@ -# AUTOGENERATED DEPENDENCIES START -gdbm.o: $(RUBY_EXTCONF_H) -gdbm.o: $(arch_hdrdir)/ruby/config.h -gdbm.o: $(hdrdir)/ruby.h -gdbm.o: $(hdrdir)/ruby/assert.h -gdbm.o: $(hdrdir)/ruby/backward.h -gdbm.o: $(hdrdir)/ruby/defines.h -gdbm.o: $(hdrdir)/ruby/intern.h -gdbm.o: $(hdrdir)/ruby/missing.h -gdbm.o: $(hdrdir)/ruby/ruby.h -gdbm.o: $(hdrdir)/ruby/st.h -gdbm.o: $(hdrdir)/ruby/subst.h -gdbm.o: gdbm.c -# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/gdbm/extconf.rb b/ruby/ext/gdbm/extconf.rb deleted file mode 100644 index d1908ffa5..000000000 --- a/ruby/ext/gdbm/extconf.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: false -require 'mkmf' - -dir_config("gdbm") -if have_library("gdbm", "gdbm_open") and - have_header("gdbm.h") - checking_for("sizeof(DBM) is available") { - if try_compile(< - -const int sizeof_DBM = (int)sizeof(DBM); -SRC - $defs << '-DDBM_SIZEOF_DBM=sizeof(DBM)' - else - $defs << '-DDBM_SIZEOF_DBM=0' - end - } - create_makefile("gdbm") -end diff --git a/ruby/ext/gdbm/gdbm.c b/ruby/ext/gdbm/gdbm.c deleted file mode 100644 index 4a6377b68..000000000 --- a/ruby/ext/gdbm/gdbm.c +++ /dev/null @@ -1,1306 +0,0 @@ -/************************************************ - - gdbm.c - - - $Author$ - modified at: Mon Jan 24 15:59:52 JST 1994 - - Documentation by Peter Adolphs < futzilogik at users dot sourceforge dot net > - -************************************************/ - -#include "ruby.h" - -#include -#include -#include - -/* - * Document-class: GDBM - * - * == Summary - * - * Ruby extension for GNU dbm (gdbm) -- a simple database engine for storing - * key-value pairs on disk. - * - * == Description - * - * GNU dbm is a library for simple databases. A database is a file that stores - * key-value pairs. Gdbm allows the user to store, retrieve, and delete data by - * key. It furthermore allows a non-sorted traversal of all key-value pairs. - * A gdbm database thus provides the same functionality as a hash. As - * with objects of the Hash class, elements can be accessed with []. - * Furthermore, GDBM mixes in the Enumerable module, thus providing convenient - * methods such as #find, #collect, #map, etc. - * - * A process is allowed to open several different databases at the same time. - * A process can open a database as a "reader" or a "writer". Whereas a reader - * has only read-access to the database, a writer has read- and write-access. - * A database can be accessed either by any number of readers or by exactly one - * writer at the same time. - * - * == Examples - * - * 1. Opening/creating a database, and filling it with some entries: - * - * require 'gdbm' - * - * gdbm = GDBM.new("fruitstore.db") - * gdbm["ananas"] = "3" - * gdbm["banana"] = "8" - * gdbm["cranberry"] = "4909" - * gdbm.close - * - * 2. Reading out a database: - * - * require 'gdbm' - * - * gdbm = GDBM.new("fruitstore.db") - * gdbm.each_pair do |key, value| - * print "#{key}: #{value}\n" - * end - * gdbm.close - * - * produces - * - * banana: 8 - * ananas: 3 - * cranberry: 4909 - * - * == Links - * - * * http://www.gnu.org/software/gdbm/ - */ -static VALUE rb_cGDBM, rb_eGDBMError, rb_eGDBMFatalError; - -#if SIZEOF_LONG > SIZEOF_INT -#define TOO_LONG(n) ((long)(+(int)(n)) != (long)(n)) -#else -#define TOO_LONG(n) 0 -#endif - -#define RUBY_GDBM_RW_BIT 0x20000000 - -#define MY_BLOCK_SIZE (2048) -#define MY_FATAL_FUNC rb_gdbm_fatal - -NORETURN(static void rb_gdbm_fatal(const char *msg)); -NORETURN(static void closed_dbm(void)); - -static void -rb_gdbm_fatal(const char *msg) -{ - rb_raise(rb_eGDBMFatalError, "%s", msg); -} - -struct dbmdata { - int di_size; - GDBM_FILE di_dbm; -}; - -static void -closed_dbm(void) -{ - rb_raise(rb_eRuntimeError, "closed GDBM file"); -} - -#define GetDBM(obj, dbmp) do {\ - TypedData_Get_Struct((obj), struct dbmdata, &dbm_type, (dbmp));\ - if ((dbmp)->di_dbm == 0) closed_dbm();\ -} while (0) - -#define GetDBM2(obj, dbmp, dbm) do {\ - GetDBM((obj), (dbmp));\ - (dbm) = (dbmp)->di_dbm;\ -} while (0) - -static void -free_dbm(void *ptr) -{ - struct dbmdata *dbmp = ptr; - if (dbmp->di_dbm) - gdbm_close(dbmp->di_dbm); - xfree(dbmp); -} - -static size_t -memsize_dbm(const void *ptr) -{ - const struct dbmdata *dbmp = ptr; - size_t size = sizeof(*dbmp); - if (dbmp->di_dbm) - size += DBM_SIZEOF_DBM; - return size; -} - -static const rb_data_type_t dbm_type = { - "gdbm", - {0, free_dbm, memsize_dbm,}, - 0, 0, - RUBY_TYPED_FREE_IMMEDIATELY, -}; - -/* - * call-seq: - * gdbm.close -> nil - * - * Closes the associated database file. - */ -static VALUE -fgdbm_close(VALUE obj) -{ - struct dbmdata *dbmp; - - GetDBM(obj, dbmp); - gdbm_close(dbmp->di_dbm); - dbmp->di_dbm = 0; - - return Qnil; -} - -/* - * call-seq: - * gdbm.closed? -> true or false - * - * Returns true if the associated database file has been closed. - */ -static VALUE -fgdbm_closed(VALUE obj) -{ - struct dbmdata *dbmp; - - TypedData_Get_Struct(obj, struct dbmdata, &dbm_type, dbmp); - if (dbmp->di_dbm == 0) - return Qtrue; - - return Qfalse; -} - -static VALUE -fgdbm_s_alloc(VALUE klass) -{ - struct dbmdata *dbmp; - - return TypedData_Make_Struct(klass, struct dbmdata, &dbm_type, dbmp); -} - -/* - * call-seq: - * GDBM.new(filename, mode = 0666, flags = nil) - * - * Creates a new GDBM instance by opening a gdbm file named _filename_. - * If the file does not exist, a new file with file mode _mode_ will be - * created. _flags_ may be one of the following: - * * *READER* - open as a reader - * * *WRITER* - open as a writer - * * *WRCREAT* - open as a writer; if the database does not exist, create a new one - * * *NEWDB* - open as a writer; overwrite any existing databases - * - * The values *WRITER*, *WRCREAT* and *NEWDB* may be combined with the following - * values by bitwise or: - * * *SYNC* - cause all database operations to be synchronized to the disk - * * *NOLOCK* - do not lock the database file - * - * If no _flags_ are specified, the GDBM object will try to open the database - * file as a writer and will create it if it does not already exist - * (cf. flag WRCREAT). If this fails (for instance, if another process - * has already opened the database as a reader), it will try to open the - * database file as a reader (cf. flag READER). - */ -static VALUE -fgdbm_initialize(int argc, VALUE *argv, VALUE obj) -{ - VALUE file, vmode, vflags; - GDBM_FILE dbm; - struct dbmdata *dbmp; - int mode, flags = 0; - - TypedData_Get_Struct(obj, struct dbmdata, &dbm_type, dbmp); - if (rb_scan_args(argc, argv, "12", &file, &vmode, &vflags) == 1) { - mode = 0666; /* default value */ - } - else if (NIL_P(vmode)) { - mode = -1; /* return nil if DB does not exist */ - } - else { - mode = NUM2INT(vmode); - } - - if (!NIL_P(vflags)) - flags = NUM2INT(vflags); - - FilePathValue(file); - -#ifdef GDBM_CLOEXEC - /* GDBM_CLOEXEC is available since gdbm 1.10. */ - flags |= GDBM_CLOEXEC; -#endif - - if (flags & RUBY_GDBM_RW_BIT) { - flags &= ~RUBY_GDBM_RW_BIT; - dbm = gdbm_open(RSTRING_PTR(file), MY_BLOCK_SIZE, - flags, mode, MY_FATAL_FUNC); - } - else { - dbm = 0; - if (mode >= 0) - dbm = gdbm_open(RSTRING_PTR(file), MY_BLOCK_SIZE, - GDBM_WRCREAT|flags, mode, MY_FATAL_FUNC); - if (!dbm) - dbm = gdbm_open(RSTRING_PTR(file), MY_BLOCK_SIZE, - GDBM_WRITER|flags, 0, MY_FATAL_FUNC); - if (!dbm) - dbm = gdbm_open(RSTRING_PTR(file), MY_BLOCK_SIZE, - GDBM_READER|flags, 0, MY_FATAL_FUNC); - } - - if (dbm) { - rb_fd_fix_cloexec(gdbm_fdesc(dbm)); - } - - if (!dbm) { - if (mode == -1) return Qnil; - - if (gdbm_errno == GDBM_FILE_OPEN_ERROR || - gdbm_errno == GDBM_CANT_BE_READER || - gdbm_errno == GDBM_CANT_BE_WRITER) - rb_sys_fail_str(file); - else - rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno)); - } - - if (dbmp->di_dbm) - gdbm_close(dbmp->di_dbm); - dbmp->di_dbm = dbm; - dbmp->di_size = -1; - - return obj; -} - -/* - * call-seq: - * GDBM.open(filename, mode = 0666, flags = nil) - * GDBM.open(filename, mode = 0666, flags = nil) { |gdbm| ... } - * - * If called without a block, this is synonymous to GDBM::new. - * If a block is given, the new GDBM instance will be passed to the block - * as a parameter, and the corresponding database file will be closed - * after the execution of the block code has been finished. - * - * Example for an open call with a block: - * - * require 'gdbm' - * GDBM.open("fruitstore.db") do |gdbm| - * gdbm.each_pair do |key, value| - * print "#{key}: #{value}\n" - * end - * end - */ -static VALUE -fgdbm_s_open(int argc, VALUE *argv, VALUE klass) -{ - VALUE obj = fgdbm_s_alloc(klass); - - if (NIL_P(fgdbm_initialize(argc, argv, obj))) { - return Qnil; - } - - if (rb_block_given_p()) { - return rb_ensure(rb_yield, obj, fgdbm_close, obj); - } - - return obj; -} - -static VALUE -rb_gdbm_fetch(GDBM_FILE dbm, datum key) -{ - datum val; - VALUE str; - - val = gdbm_fetch(dbm, key); - if (val.dptr == 0) - return Qnil; - - str = rb_str_new(val.dptr, val.dsize); - free(val.dptr); - return str; -} - -static VALUE -rb_gdbm_fetch2(GDBM_FILE dbm, VALUE keystr) -{ - datum key; - long len; - - ExportStringValue(keystr); - len = RSTRING_LEN(keystr); - if (TOO_LONG(len)) return Qnil; - key.dptr = RSTRING_PTR(keystr); - key.dsize = (int)len; - - return rb_gdbm_fetch(dbm, key); -} - -static VALUE -rb_gdbm_fetch3(VALUE obj, VALUE keystr) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - - GetDBM2(obj, dbmp, dbm); - return rb_gdbm_fetch2(dbm, keystr); -} - -static VALUE -rb_gdbm_firstkey(GDBM_FILE dbm) -{ - datum key; - VALUE str; - - key = gdbm_firstkey(dbm); - if (key.dptr == 0) - return Qnil; - - str = rb_str_new(key.dptr, key.dsize); - free(key.dptr); - return str; -} - -static VALUE -rb_gdbm_nextkey(GDBM_FILE dbm, VALUE keystr) -{ - datum key, key2; - VALUE str; - long len; - - len = RSTRING_LEN(keystr); - if (TOO_LONG(len)) return Qnil; - key.dptr = RSTRING_PTR(keystr); - key.dsize = (int)len; - key2 = gdbm_nextkey(dbm, key); - if (key2.dptr == 0) - return Qnil; - - str = rb_str_new(key2.dptr, key2.dsize); - free(key2.dptr); - return str; -} - -static VALUE -fgdbm_fetch(VALUE obj, VALUE keystr, VALUE ifnone) -{ - VALUE valstr; - - valstr = rb_gdbm_fetch3(obj, keystr); - if (NIL_P(valstr)) { - if (ifnone == Qnil && rb_block_given_p()) - return rb_yield(keystr); - return ifnone; - } - return valstr; -} - -/* - * call-seq: - * gdbm[key] -> value - * - * Retrieves the _value_ corresponding to _key_. - */ -static VALUE -fgdbm_aref(VALUE obj, VALUE keystr) -{ - return rb_gdbm_fetch3(obj, keystr); -} - -/* - * call-seq: - * gdbm.fetch(key [, default]) -> value - * - * Retrieves the _value_ corresponding to _key_. If there is no value - * associated with _key_, _default_ will be returned instead. - */ -static VALUE -fgdbm_fetch_m(int argc, VALUE *argv, VALUE obj) -{ - VALUE keystr, valstr, ifnone; - - rb_scan_args(argc, argv, "11", &keystr, &ifnone); - valstr = fgdbm_fetch(obj, keystr, ifnone); - if (argc == 1 && !rb_block_given_p() && NIL_P(valstr)) - rb_raise(rb_eIndexError, "key not found"); - - return valstr; -} - -/* - * call-seq: - * gdbm.key(value) -> key - * - * Returns the _key_ for a given _value_. If several keys may map to the - * same value, the key that is found first will be returned. - */ -static VALUE -fgdbm_key(VALUE obj, VALUE valstr) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - VALUE keystr, valstr2; - - ExportStringValue(valstr); - GetDBM2(obj, dbmp, dbm); - for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr); - keystr = rb_gdbm_nextkey(dbm, keystr)) { - - valstr2 = rb_gdbm_fetch2(dbm, keystr); - if (!NIL_P(valstr2) && - (int)RSTRING_LEN(valstr) == (int)RSTRING_LEN(valstr2) && - memcmp(RSTRING_PTR(valstr), RSTRING_PTR(valstr2), - (int)RSTRING_LEN(valstr)) == 0) { - return keystr; - } - } - return Qnil; -} - -/* :nodoc: */ -static VALUE -fgdbm_index(VALUE obj, VALUE value) -{ - rb_warn("GDBM#index is deprecated; use GDBM#key"); - return fgdbm_key(obj, value); -} - -/* - * call-seq: - * gdbm.select { |key, value| block } -> array - * - * Returns a new array of all key-value pairs of the database for which _block_ - * evaluates to true. - */ -static VALUE -fgdbm_select(VALUE obj) -{ - VALUE new = rb_ary_new(); - GDBM_FILE dbm; - struct dbmdata *dbmp; - VALUE keystr; - - GetDBM2(obj, dbmp, dbm); - for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr); - keystr = rb_gdbm_nextkey(dbm, keystr)) { - VALUE assoc = rb_assoc_new(keystr, rb_gdbm_fetch2(dbm, keystr)); - VALUE v = rb_yield(assoc); - - if (RTEST(v)) { - rb_ary_push(new, assoc); - } - GetDBM2(obj, dbmp, dbm); - } - - return new; -} - -/* - * call-seq: - * gdbm.values_at(key, ...) -> array - * - * Returns an array of the values associated with each specified _key_. - */ -static VALUE -fgdbm_values_at(int argc, VALUE *argv, VALUE obj) -{ - VALUE new = rb_ary_new2(argc); - int i; - - for (i=0; idi_size = -1; - rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno)); - } - else if (dbmp->di_size >= 0) { - dbmp->di_size--; - } - return obj; -} - -/* - * call-seq: - * gdbm.delete(key) -> value or nil - * - * Removes the key-value-pair with the specified _key_ from this database and - * returns the corresponding _value_. Returns nil if the database is empty. - */ -static VALUE -fgdbm_delete(VALUE obj, VALUE keystr) -{ - VALUE valstr; - - valstr = fgdbm_fetch(obj, keystr, Qnil); - rb_gdbm_delete(obj, keystr); - return valstr; -} - -/* - * call-seq: - * gdbm.shift -> (key, value) or nil - * - * Removes a key-value-pair from this database and returns it as a - * two-item array [ _key_, _value_ ]. Returns nil if the database is empty. - */ -static VALUE -fgdbm_shift(VALUE obj) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - VALUE keystr, valstr; - - rb_gdbm_modify(obj); - GetDBM2(obj, dbmp, dbm); - keystr = rb_gdbm_firstkey(dbm); - if (NIL_P(keystr)) return Qnil; - valstr = rb_gdbm_fetch2(dbm, keystr); - rb_gdbm_delete(obj, keystr); - - return rb_assoc_new(keystr, valstr); -} - -/* - * call-seq: - * gdbm.delete_if { |key, value| block } -> gdbm - * gdbm.reject! { |key, value| block } -> gdbm - * - * Deletes every key-value pair from _gdbm_ for which _block_ evaluates to true. - */ -static VALUE -fgdbm_delete_if(VALUE obj) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - VALUE keystr, valstr; - VALUE ret, ary = rb_ary_tmp_new(0); - long i; - int status = 0, n; - - rb_gdbm_modify(obj); - GetDBM2(obj, dbmp, dbm); - n = dbmp->di_size; - dbmp->di_size = -1; - - for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr); - keystr = rb_gdbm_nextkey(dbm, keystr)) { - - OBJ_FREEZE(keystr); - valstr = rb_gdbm_fetch2(dbm, keystr); - ret = rb_protect(rb_yield, rb_assoc_new(rb_str_dup(keystr), valstr), &status); - if (status != 0) break; - if (RTEST(ret)) rb_ary_push(ary, keystr); - GetDBM2(obj, dbmp, dbm); - } - - for (i = 0; i < RARRAY_LEN(ary); i++) - rb_gdbm_delete(obj, RARRAY_AREF(ary, i)); - if (status) rb_jump_tag(status); - if (n > 0) dbmp->di_size = n - (int)RARRAY_LEN(ary); - rb_ary_clear(ary); - - return obj; -} - -/* - * call-seq: - * gdbm.clear -> gdbm - * - * Removes all the key-value pairs within _gdbm_. - */ -static VALUE -fgdbm_clear(VALUE obj) -{ - datum key, nextkey; - struct dbmdata *dbmp; - GDBM_FILE dbm; - - rb_gdbm_modify(obj); - GetDBM2(obj, dbmp, dbm); - dbmp->di_size = -1; - -#if 0 - while (key = gdbm_firstkey(dbm), key.dptr) { - if (gdbm_delete(dbm, key)) { - free(key.dptr); - rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno)); - } - free(key.dptr); - } -#else - while (key = gdbm_firstkey(dbm), key.dptr) { - for (; key.dptr; key = nextkey) { - nextkey = gdbm_nextkey(dbm, key); - if (gdbm_delete(dbm, key)) { - free(key.dptr); - if (nextkey.dptr) free(nextkey.dptr); - rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno)); - } - free(key.dptr); - } - } -#endif - dbmp->di_size = 0; - - return obj; -} - -/* - * call-seq: - * gdbm.invert -> hash - * - * Returns a hash created by using _gdbm_'s values as keys, and the keys - * as values. - */ -static VALUE -fgdbm_invert(VALUE obj) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - VALUE keystr, valstr; - VALUE hash = rb_hash_new(); - - GetDBM2(obj, dbmp, dbm); - for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr); - keystr = rb_gdbm_nextkey(dbm, keystr)) { - valstr = rb_gdbm_fetch2(dbm, keystr); - - rb_hash_aset(hash, valstr, keystr); - } - return hash; -} - -/* - * call-seq: - * gdbm[key]= value -> value - * gdbm.store(key, value) -> value - * - * Associates the value _value_ with the specified _key_. - */ -static VALUE -fgdbm_store(VALUE obj, VALUE keystr, VALUE valstr) -{ - datum key, val; - struct dbmdata *dbmp; - GDBM_FILE dbm; - - rb_gdbm_modify(obj); - ExportStringValue(keystr); - ExportStringValue(valstr); - - key.dptr = RSTRING_PTR(keystr); - key.dsize = RSTRING_LENINT(keystr); - - val.dptr = RSTRING_PTR(valstr); - val.dsize = RSTRING_LENINT(valstr); - - GetDBM2(obj, dbmp, dbm); - dbmp->di_size = -1; - if (gdbm_store(dbm, key, val, GDBM_REPLACE)) { - if (errno == EPERM) rb_sys_fail(0); - rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno)); - } - - return valstr; -} - -static VALUE -update_i(RB_BLOCK_CALL_FUNC_ARGLIST(pair, dbm)) -{ - const VALUE *ptr; - Check_Type(pair, T_ARRAY); - if (RARRAY_LEN(pair) < 2) { - rb_raise(rb_eArgError, "pair must be [key, value]"); - } - ptr = RARRAY_CONST_PTR(pair); - fgdbm_store(dbm, ptr[0], ptr[1]); - return Qnil; -} - -/* - * call-seq: - * gdbm.update(other) -> gdbm - * - * Adds the key-value pairs of _other_ to _gdbm_, overwriting entries with - * duplicate keys with those from _other_. _other_ must have an each_pair - * method. - */ -static VALUE -fgdbm_update(VALUE obj, VALUE other) -{ - rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); - return obj; -} - -/* - * call-seq: - * gdbm.replace(other) -> gdbm - * - * Replaces the content of _gdbm_ with the key-value pairs of _other_. - * _other_ must have an each_pair method. - */ -static VALUE -fgdbm_replace(VALUE obj, VALUE other) -{ - fgdbm_clear(obj); - rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); - return obj; -} - -/* - * call-seq: - * gdbm.length -> fixnum - * gdbm.size -> fixnum - * - * Returns the number of key-value pairs in this database. - */ -static VALUE -fgdbm_length(VALUE obj) -{ - datum key, nextkey; - struct dbmdata *dbmp; - GDBM_FILE dbm; - int i = 0; - - GetDBM2(obj, dbmp, dbm); - if (dbmp->di_size > 0) return INT2FIX(dbmp->di_size); - - for (key = gdbm_firstkey(dbm); key.dptr; key = nextkey) { - nextkey = gdbm_nextkey(dbm, key); - free(key.dptr); - i++; - } - dbmp->di_size = i; - - return INT2FIX(i); -} - -/* - * call-seq: - * gdbm.empty? -> true or false - * - * Returns true if the database is empty. - */ -static VALUE -fgdbm_empty_p(VALUE obj) -{ - datum key; - struct dbmdata *dbmp; - GDBM_FILE dbm; - - GetDBM(obj, dbmp); - if (dbmp->di_size < 0) { - dbm = dbmp->di_dbm; - - key = gdbm_firstkey(dbm); - if (key.dptr) { - free(key.dptr); - return Qfalse; - } - return Qtrue; - } - - if (dbmp->di_size == 0) return Qtrue; - return Qfalse; -} - -/* - * call-seq: - * gdbm.each_value { |value| block } -> gdbm - * - * Executes _block_ for each key in the database, passing the corresponding - * _value_ as a parameter. - */ -static VALUE -fgdbm_each_value(VALUE obj) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - VALUE keystr; - - RETURN_ENUMERATOR(obj, 0, 0); - - GetDBM2(obj, dbmp, dbm); - for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr); - keystr = rb_gdbm_nextkey(dbm, keystr)) { - - rb_yield(rb_gdbm_fetch2(dbm, keystr)); - GetDBM2(obj, dbmp, dbm); - } - return obj; -} - -/* - * call-seq: - * gdbm.each_key { |key| block } -> gdbm - * - * Executes _block_ for each key in the database, passing the - * _key_ as a parameter. - */ -static VALUE -fgdbm_each_key(VALUE obj) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - VALUE keystr; - - RETURN_ENUMERATOR(obj, 0, 0); - - GetDBM2(obj, dbmp, dbm); - for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr); - keystr = rb_gdbm_nextkey(dbm, keystr)) { - - rb_yield(keystr); - GetDBM2(obj, dbmp, dbm); - } - return obj; -} - -/* - * call-seq: - * gdbm.each_pair { |key, value| block } -> gdbm - * - * Executes _block_ for each key in the database, passing the _key_ and the - * corresponding _value_ as a parameter. - */ -static VALUE -fgdbm_each_pair(VALUE obj) -{ - GDBM_FILE dbm; - struct dbmdata *dbmp; - VALUE keystr; - - RETURN_ENUMERATOR(obj, 0, 0); - - GetDBM2(obj, dbmp, dbm); - for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr); - keystr = rb_gdbm_nextkey(dbm, keystr)) { - - rb_yield(rb_assoc_new(keystr, rb_gdbm_fetch2(dbm, keystr))); - GetDBM2(obj, dbmp, dbm); - } - - return obj; -} - -/* - * call-seq: - * gdbm.keys -> array - * - * Returns an array of all keys of this database. - */ -static VALUE -fgdbm_keys(VALUE obj) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - VALUE keystr, ary; - - GetDBM2(obj, dbmp, dbm); - ary = rb_ary_new(); - for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr); - keystr = rb_gdbm_nextkey(dbm, keystr)) { - - rb_ary_push(ary, keystr); - } - - return ary; -} - -/* - * call-seq: - * gdbm.values -> array - * - * Returns an array of all values of this database. - */ -static VALUE -fgdbm_values(VALUE obj) -{ - datum key, nextkey; - struct dbmdata *dbmp; - GDBM_FILE dbm; - VALUE valstr, ary; - - GetDBM2(obj, dbmp, dbm); - ary = rb_ary_new(); - for (key = gdbm_firstkey(dbm); key.dptr; key = nextkey) { - nextkey = gdbm_nextkey(dbm, key); - valstr = rb_gdbm_fetch(dbm, key); - free(key.dptr); - rb_ary_push(ary, valstr); - } - - return ary; -} - -/* - * call-seq: - * gdbm.include?(k) -> true or false - * gdbm.has_key?(k) -> true or false - * gdbm.member?(k) -> true or false - * gdbm.key?(k) -> true or false - * - * Returns true if the given key _k_ exists within the database. - * Returns false otherwise. - */ -static VALUE -fgdbm_has_key(VALUE obj, VALUE keystr) -{ - datum key; - struct dbmdata *dbmp; - GDBM_FILE dbm; - long len; - - ExportStringValue(keystr); - len = RSTRING_LENINT(keystr); - if (TOO_LONG(len)) return Qfalse; - key.dptr = RSTRING_PTR(keystr); - key.dsize = (int)len; - - GetDBM2(obj, dbmp, dbm); - if (gdbm_exists(dbm, key)) - return Qtrue; - return Qfalse; -} - -/* - * call-seq: - * gdbm.has_value?(v) -> true or false - * gdbm.value?(v) -> true or false - * - * Returns true if the given value _v_ exists within the database. - * Returns false otherwise. - */ -static VALUE -fgdbm_has_value(VALUE obj, VALUE valstr) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - VALUE keystr, valstr2; - - ExportStringValue(valstr); - GetDBM2(obj, dbmp, dbm); - for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr); - keystr = rb_gdbm_nextkey(dbm, keystr)) { - - valstr2 = rb_gdbm_fetch2(dbm, keystr); - - if (!NIL_P(valstr2) && - (int)RSTRING_LEN(valstr) == (int)RSTRING_LEN(valstr2) && - memcmp(RSTRING_PTR(valstr), RSTRING_PTR(valstr2), - (int)RSTRING_LEN(valstr)) == 0) { - return Qtrue; - } - } - return Qfalse; -} - -/* - * call-seq: - * gdbm.to_a -> array - * - * Returns an array of all key-value pairs contained in the database. - */ -static VALUE -fgdbm_to_a(VALUE obj) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - VALUE keystr, ary; - - GetDBM2(obj, dbmp, dbm); - ary = rb_ary_new(); - for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr); - keystr = rb_gdbm_nextkey(dbm, keystr)) { - - rb_ary_push(ary, rb_assoc_new(keystr, rb_gdbm_fetch2(dbm, keystr))); - } - - return ary; -} - -/* - * call-seq: - * gdbm.reorganize -> gdbm - * - * Reorganizes the database file. This operation removes reserved space of - * elements that have already been deleted. It is only useful after a lot of - * deletions in the database. - */ -static VALUE -fgdbm_reorganize(VALUE obj) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - - rb_gdbm_modify(obj); - GetDBM2(obj, dbmp, dbm); - gdbm_reorganize(dbm); - rb_fd_fix_cloexec(gdbm_fdesc(dbm)); - return obj; -} - -/* - * call-seq: - * gdbm.sync -> gdbm - * - * Unless the _gdbm_ object has been opened with the *SYNC* flag, it is not - * guaranteed that database modification operations are immediately applied to - * the database file. This method ensures that all recent modifications - * to the database are written to the file. Blocks until all writing operations - * to the disk have been finished. - */ -static VALUE -fgdbm_sync(VALUE obj) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - - rb_gdbm_modify(obj); - GetDBM2(obj, dbmp, dbm); - gdbm_sync(dbm); - return obj; -} - -/* - * call-seq: - * gdbm.cachesize = size -> size - * - * Sets the size of the internal bucket cache to _size_. - */ -static VALUE -fgdbm_set_cachesize(VALUE obj, VALUE val) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - int optval; - - GetDBM2(obj, dbmp, dbm); - optval = FIX2INT(val); - if (gdbm_setopt(dbm, GDBM_CACHESIZE, &optval, sizeof(optval)) == -1) { - rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno)); - } - return val; -} - -/* - * call-seq: - * gdbm.fastmode = boolean -> boolean - * - * Turns the database's fast mode on or off. If fast mode is turned on, gdbm - * does not wait for writes to be flushed to the disk before continuing. - * - * This option is obsolete for gdbm >= 1.8 since fast mode is turned on by - * default. See also: #syncmode= - */ -static VALUE -fgdbm_set_fastmode(VALUE obj, VALUE val) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - int optval; - - GetDBM2(obj, dbmp, dbm); - optval = 0; - if (RTEST(val)) - optval = 1; - - if (gdbm_setopt(dbm, GDBM_FASTMODE, &optval, sizeof(optval)) == -1) { - rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno)); - } - return val; -} - -/* - * call-seq: - * gdbm.syncmode = boolean -> boolean - * - * Turns the database's synchronization mode on or off. If the synchronization - * mode is turned on, the database's in-memory state will be synchronized to - * disk after every database modification operation. If the synchronization - * mode is turned off, GDBM does not wait for writes to be flushed to the disk - * before continuing. - * - * This option is only available for gdbm >= 1.8 where syncmode is turned off - * by default. See also: #fastmode= - */ -static VALUE -fgdbm_set_syncmode(VALUE obj, VALUE val) -{ -#if !defined(GDBM_SYNCMODE) - fgdbm_set_fastmode(obj, RTEST(val) ? Qfalse : Qtrue); - return val; -#else - struct dbmdata *dbmp; - GDBM_FILE dbm; - int optval; - - GetDBM2(obj, dbmp, dbm); - optval = 0; - if (RTEST(val)) - optval = 1; - - if (gdbm_setopt(dbm, GDBM_FASTMODE, &optval, sizeof(optval)) == -1) { - rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno)); - } - return val; -#endif -} - -/* - * call-seq: - * gdbm.to_hash -> hash - * - * Returns a hash of all key-value pairs contained in the database. - */ -static VALUE -fgdbm_to_hash(VALUE obj) -{ - struct dbmdata *dbmp; - GDBM_FILE dbm; - VALUE keystr, hash; - - GetDBM2(obj, dbmp, dbm); - hash = rb_hash_new(); - for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr); - keystr = rb_gdbm_nextkey(dbm, keystr)) { - - rb_hash_aset(hash, keystr, rb_gdbm_fetch2(dbm, keystr)); - } - - return hash; -} - -/* - * call-seq: - * gdbm.reject { |key, value| block } -> hash - * - * Returns a hash copy of _gdbm_ where all key-value pairs from _gdbm_ for - * which _block_ evaluates to true are removed. See also: #delete_if - */ -static VALUE -fgdbm_reject(VALUE obj) -{ - return rb_hash_delete_if(fgdbm_to_hash(obj)); -} - -void -Init_gdbm(void) -{ - rb_cGDBM = rb_define_class("GDBM", rb_cObject); - rb_eGDBMError = rb_define_class("GDBMError", rb_eStandardError); - rb_eGDBMFatalError = rb_define_class("GDBMFatalError", rb_eException); - rb_include_module(rb_cGDBM, rb_mEnumerable); - - rb_define_alloc_func(rb_cGDBM, fgdbm_s_alloc); - rb_define_singleton_method(rb_cGDBM, "open", fgdbm_s_open, -1); - - rb_define_method(rb_cGDBM, "initialize", fgdbm_initialize, -1); - rb_define_method(rb_cGDBM, "close", fgdbm_close, 0); - rb_define_method(rb_cGDBM, "closed?", fgdbm_closed, 0); - rb_define_method(rb_cGDBM, "[]", fgdbm_aref, 1); - rb_define_method(rb_cGDBM, "fetch", fgdbm_fetch_m, -1); - rb_define_method(rb_cGDBM, "[]=", fgdbm_store, 2); - rb_define_method(rb_cGDBM, "store", fgdbm_store, 2); - rb_define_method(rb_cGDBM, "index", fgdbm_index, 1); - rb_define_method(rb_cGDBM, "key", fgdbm_key, 1); - rb_define_method(rb_cGDBM, "select", fgdbm_select, 0); - rb_define_method(rb_cGDBM, "values_at", fgdbm_values_at, -1); - rb_define_method(rb_cGDBM, "length", fgdbm_length, 0); - rb_define_method(rb_cGDBM, "size", fgdbm_length, 0); - rb_define_method(rb_cGDBM, "empty?", fgdbm_empty_p, 0); - rb_define_method(rb_cGDBM, "each", fgdbm_each_pair, 0); - rb_define_method(rb_cGDBM, "each_value", fgdbm_each_value, 0); - rb_define_method(rb_cGDBM, "each_key", fgdbm_each_key, 0); - rb_define_method(rb_cGDBM, "each_pair", fgdbm_each_pair, 0); - rb_define_method(rb_cGDBM, "keys", fgdbm_keys, 0); - rb_define_method(rb_cGDBM, "values", fgdbm_values, 0); - rb_define_method(rb_cGDBM, "shift", fgdbm_shift, 0); - rb_define_method(rb_cGDBM, "delete", fgdbm_delete, 1); - rb_define_method(rb_cGDBM, "delete_if", fgdbm_delete_if, 0); - rb_define_method(rb_cGDBM, "reject!", fgdbm_delete_if, 0); - rb_define_method(rb_cGDBM, "reject", fgdbm_reject, 0); - rb_define_method(rb_cGDBM, "clear", fgdbm_clear, 0); - rb_define_method(rb_cGDBM, "invert", fgdbm_invert, 0); - rb_define_method(rb_cGDBM, "update", fgdbm_update, 1); - rb_define_method(rb_cGDBM, "replace", fgdbm_replace, 1); - rb_define_method(rb_cGDBM, "reorganize", fgdbm_reorganize, 0); - rb_define_method(rb_cGDBM, "sync", fgdbm_sync, 0); - /* rb_define_method(rb_cGDBM, "setopt", fgdbm_setopt, 2); */ - rb_define_method(rb_cGDBM, "cachesize=", fgdbm_set_cachesize, 1); - rb_define_method(rb_cGDBM, "fastmode=", fgdbm_set_fastmode, 1); - rb_define_method(rb_cGDBM, "syncmode=", fgdbm_set_syncmode, 1); - - rb_define_method(rb_cGDBM, "include?", fgdbm_has_key, 1); - rb_define_method(rb_cGDBM, "has_key?", fgdbm_has_key, 1); - rb_define_method(rb_cGDBM, "member?", fgdbm_has_key, 1); - rb_define_method(rb_cGDBM, "has_value?", fgdbm_has_value, 1); - rb_define_method(rb_cGDBM, "key?", fgdbm_has_key, 1); - rb_define_method(rb_cGDBM, "value?", fgdbm_has_value, 1); - - rb_define_method(rb_cGDBM, "to_a", fgdbm_to_a, 0); - rb_define_method(rb_cGDBM, "to_hash", fgdbm_to_hash, 0); - - /* flag for #new and #open: open database as a reader */ - rb_define_const(rb_cGDBM, "READER", INT2FIX(GDBM_READER|RUBY_GDBM_RW_BIT)); - /* flag for #new and #open: open database as a writer */ - rb_define_const(rb_cGDBM, "WRITER", INT2FIX(GDBM_WRITER|RUBY_GDBM_RW_BIT)); - /* flag for #new and #open: open database as a writer; if the database does not exist, create a new one */ - rb_define_const(rb_cGDBM, "WRCREAT", INT2FIX(GDBM_WRCREAT|RUBY_GDBM_RW_BIT)); - /* flag for #new and #open: open database as a writer; overwrite any existing databases */ - rb_define_const(rb_cGDBM, "NEWDB", INT2FIX(GDBM_NEWDB|RUBY_GDBM_RW_BIT)); - - /* flag for #new and #open. this flag is obsolete for gdbm >= 1.8 */ - rb_define_const(rb_cGDBM, "FAST", INT2FIX(GDBM_FAST)); - /* this flag is obsolete in gdbm 1.8. - On gdbm 1.8, fast mode is default behavior. */ - - /* gdbm version 1.8 specific */ -#if defined(GDBM_SYNC) - /* flag for #new and #open. only for gdbm >= 1.8 */ - rb_define_const(rb_cGDBM, "SYNC", INT2FIX(GDBM_SYNC)); -#endif -#if defined(GDBM_NOLOCK) - /* flag for #new and #open */ - rb_define_const(rb_cGDBM, "NOLOCK", INT2FIX(GDBM_NOLOCK)); -#endif - /* version of the gdbm library*/ - rb_define_const(rb_cGDBM, "VERSION", rb_str_new2(gdbm_version)); -} diff --git a/ruby/ext/gdbm/gdbm.gemspec b/ruby/ext/gdbm/gdbm.gemspec deleted file mode 100644 index da074b018..000000000 --- a/ruby/ext/gdbm/gdbm.gemspec +++ /dev/null @@ -1,21 +0,0 @@ -# coding: utf-8 -# frozen_string_literal: true - -Gem::Specification.new do |spec| - spec.name = "gdbm" - spec.version = "2.1.0" - spec.authors = ["Yukihiro Matsumoto"] - spec.email = ["matz@ruby-lang.org"] - - spec.summary = "Ruby extension for GNU dbm." - spec.description = "Ruby extension for GNU dbm." - spec.homepage = "https://github.com/ruby/gdbm" - spec.license = "BSD-2-Clause" - - spec.files = ["ext/gdbm/extconf.rb", "ext/gdbm/gdbm.c"] - spec.bindir = "exe" - spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } - spec.require_paths = ["lib"] - spec.extensions = ["ext/gdbm/extconf.rb"] - spec.required_ruby_version = ">= 2.3.0" -end diff --git a/ruby/ext/io/console/console.c b/ruby/ext/io/console/console.c index 9baad2bf1..4ec24178c 100644 --- a/ruby/ext/io/console/console.c +++ b/ruby/ext/io/console/console.c @@ -1,4 +1,4 @@ -/* -*- c-file-style: "ruby" -*- */ +/* -*- c-file-style: "ruby"; indent-tabs-mode: t -*- */ /* * console IO module */ @@ -77,10 +77,23 @@ getattr(int fd, conmode *t) static ID id_getc, id_console, id_close, id_min, id_time, id_intr; #if ENABLE_IO_GETPASS -static ID id_gets; +static ID id_gets, id_chomp_bang; #endif +#if defined HAVE_RUBY_FIBER_SCHEDULER_H +# include "ruby/fiber/scheduler.h" +#elif defined HAVE_RB_SCHEDULER_TIMEOUT +extern VALUE rb_scheduler_timeout(struct timeval *timeout); +# define rb_fiber_scheduler_make_timeout rb_scheduler_timeout +#endif + +#define sys_fail_fptr(fptr) rb_sys_fail_str((fptr)->pathv) + #ifndef HAVE_RB_F_SEND +#ifndef RB_PASS_CALLED_KEYWORDS +# define rb_funcallv_kw(recv, mid, arg, argv, kw_splat) rb_funcallv(recv, mid, arg, argv) +#endif + static ID id___send__; static VALUE @@ -95,7 +108,7 @@ rb_f_send(int argc, VALUE *argv, VALUE recv) else { vid = id___send__; } - return rb_funcallv(recv, vid, argc, argv); + return rb_funcallv_kw(recv, vid, argc, argv, RB_PASS_CALLED_KEYWORDS); } #endif @@ -410,9 +423,9 @@ console_set_raw(int argc, VALUE *argv, VALUE io) GetOpenFile(io, fptr); fd = GetReadFD(fptr); - if (!getattr(fd, &t)) rb_sys_fail(0); + if (!getattr(fd, &t)) sys_fail_fptr(fptr); set_rawmode(&t, optp); - if (!setattr(fd, &t)) rb_sys_fail(0); + if (!setattr(fd, &t)) sys_fail_fptr(fptr); return io; } @@ -453,9 +466,9 @@ console_set_cooked(VALUE io) GetOpenFile(io, fptr); fd = GetReadFD(fptr); - if (!getattr(fd, &t)) rb_sys_fail(0); + if (!getattr(fd, &t)) sys_fail_fptr(fptr); set_cookedmode(&t, NULL); - if (!setattr(fd, &t)) rb_sys_fail(0); + if (!setattr(fd, &t)) sys_fail_fptr(fptr); return io; } @@ -508,28 +521,50 @@ console_getch(int argc, VALUE *argv, VALUE io) rb_io_t *fptr; VALUE str; wint_t c; - int w, len; + int len; char buf[8]; wint_t wbuf[2]; +# ifndef HAVE_RB_IO_WAIT struct timeval *to = NULL, tv; +# else + VALUE timeout = Qnil; +# endif GetOpenFile(io, fptr); if (optp) { if (optp->vtime) { +# ifndef HAVE_RB_IO_WAIT to = &tv; +# else + struct timeval tv; +# endif tv.tv_sec = optp->vtime / 10; tv.tv_usec = (optp->vtime % 10) * 100000; +# ifdef HAVE_RB_IO_WAIT + timeout = rb_fiber_scheduler_make_timeout(&tv); +# endif } - if (optp->vmin != 1) { - rb_warning("min option ignored"); + switch (optp->vmin) { + case 1: /* default */ + break; + case 0: /* return nil when timed out */ + if (optp->vtime) break; + /* fallthru */ + default: + rb_warning("min option larger than 1 ignored"); } if (optp->intr) { - w = rb_wait_for_single_fd(fptr->fd, RB_WAITFD_IN, to); +# ifndef HAVE_RB_IO_WAIT + int w = rb_wait_for_single_fd(fptr->fd, RB_WAITFD_IN, to); if (w < 0) rb_eof_error(); if (!(w & RB_WAITFD_IN)) return Qnil; +# else + VALUE result = rb_io_wait(io, RB_INT2NUM(RUBY_IO_READABLE), timeout); + if (!RTEST(result)) return Qnil; +# endif } - else { - rb_warning("vtime option ignored if intr flag is unset"); + else if (optp->vtime) { + rb_warning("Non-zero vtime option ignored if intr flag is unset"); } } len = (int)(VALUE)rb_thread_call_without_gvl(nogvl_getch, wbuf, RUBY_UBF_IO, 0); @@ -590,12 +625,12 @@ console_set_echo(VALUE io, VALUE f) GetOpenFile(io, fptr); fd = GetReadFD(fptr); - if (!getattr(fd, &t)) rb_sys_fail(0); + if (!getattr(fd, &t)) sys_fail_fptr(fptr); if (RTEST(f)) set_echo(&t, NULL); else set_noecho(&t, NULL); - if (!setattr(fd, &t)) rb_sys_fail(0); + if (!setattr(fd, &t)) sys_fail_fptr(fptr); return io; } @@ -616,7 +651,7 @@ console_echo_p(VALUE io) GetOpenFile(io, fptr); fd = GetReadFD(fptr); - if (!getattr(fd, &t)) rb_sys_fail(0); + if (!getattr(fd, &t)) sys_fail_fptr(fptr); return echo_p(&t) ? Qtrue : Qfalse; } @@ -700,7 +735,7 @@ console_conmode_get(VALUE io) GetOpenFile(io, fptr); fd = GetReadFD(fptr); - if (!getattr(fd, &t)) rb_sys_fail(0); + if (!getattr(fd, &t)) sys_fail_fptr(fptr); return conmode_new(cConmode, &t); } @@ -724,7 +759,7 @@ console_conmode_set(VALUE io, VALUE mode) r = *t; GetOpenFile(io, fptr); fd = GetReadFD(fptr); - if (!setattr(fd, &r)) rb_sys_fail(0); + if (!setattr(fd, &r)) sys_fail_fptr(fptr); return mode; } @@ -766,7 +801,7 @@ console_winsize(VALUE io) GetOpenFile(io, fptr); fd = GetWriteFD(fptr); - if (!getwinsize(fd, &ws)) rb_sys_fail(0); + if (!getwinsize(fd, &ws)) sys_fail_fptr(fptr); return rb_assoc_new(INT2NUM(winsize_row(&ws)), INT2NUM(winsize_col(&ws))); } @@ -813,7 +848,7 @@ console_set_winsize(VALUE io, VALUE size) SET(xpixel); SET(ypixel); #undef SET - if (!setwinsize(fd, &ws)) rb_sys_fail(0); + if (!setwinsize(fd, &ws)) sys_fail_fptr(fptr); #elif defined _WIN32 wh = (HANDLE)rb_w32_get_osfhandle(fd); #define SET(m) new##m = NIL_P(m) ? 0 : (unsigned short)NUM2UINT(m) @@ -888,7 +923,7 @@ console_iflush(VALUE io) GetOpenFile(io, fptr); fd = GetReadFD(fptr); #if defined HAVE_TERMIOS_H || defined HAVE_TERMIO_H - if (tcflush(fd, TCIFLUSH)) rb_sys_fail(0); + if (tcflush(fd, TCIFLUSH)) sys_fail_fptr(fptr); #endif (void)fd; return io; @@ -911,7 +946,7 @@ console_oflush(VALUE io) GetOpenFile(io, fptr); fd = GetWriteFD(fptr); #if defined HAVE_TERMIOS_H || defined HAVE_TERMIO_H - if (tcflush(fd, TCOFLUSH)) rb_sys_fail(0); + if (tcflush(fd, TCOFLUSH)) sys_fail_fptr(fptr); #endif (void)fd; return io; @@ -938,11 +973,11 @@ console_ioflush(VALUE io) fd1 = GetReadFD(fptr); fd2 = GetWriteFD(fptr); if (fd2 != -1 && fd1 != fd2) { - if (tcflush(fd1, TCIFLUSH)) rb_sys_fail(0); - if (tcflush(fd2, TCOFLUSH)) rb_sys_fail(0); + if (tcflush(fd1, TCIFLUSH)) sys_fail_fptr(fptr); + if (tcflush(fd2, TCOFLUSH)) sys_fail_fptr(fptr); } else { - if (tcflush(fd1, TCIOFLUSH)) rb_sys_fail(0); + if (tcflush(fd1, TCIOFLUSH)) sys_fail_fptr(fptr); } #endif return io; @@ -961,7 +996,7 @@ console_beep(VALUE io) MessageBeep(0); #else if (write(fd, "\a", 1) < 0) - rb_sys_fail(0); + sys_fail_fptr(fptr); #endif return io; } @@ -1195,8 +1230,8 @@ console_key_pressed_p(VALUE io, VALUE k) } #else struct query_args { - const char *qstr; - int opt; + char qstr[6]; + unsigned char opt; }; static int @@ -1534,7 +1569,7 @@ static VALUE str_chomp(VALUE str) { if (!NIL_P(str)) { - str = rb_funcallv(str, rb_intern("chomp!"), 0, 0); + rb_funcallv(str, id_chomp_bang, 0, 0); } return str; } @@ -1546,6 +1581,10 @@ str_chomp(VALUE str) * Reads and returns a line without echo back. * Prints +prompt+ unless it is +nil+. * + * The newline character that terminates the + * read line is removed from the returned string, + * see String#chomp!. + * * You must require 'io/console' to use this method. */ static VALUE @@ -1590,6 +1629,7 @@ Init_console(void) id_getc = rb_intern("getc"); #if ENABLE_IO_GETPASS id_gets = rb_intern("gets"); + id_chomp_bang = rb_intern("chomp!"); #endif id_console = rb_intern("console"); id_close = rb_intern("close"); diff --git a/ruby/ext/io/console/depend b/ruby/ext/io/console/depend index 9c8f9cd22..e6014dcc5 100644 --- a/ruby/ext/io/console/depend +++ b/ruby/ext/io/console/depend @@ -4,9 +4,166 @@ console.o: $(arch_hdrdir)/ruby/config.h console.o: $(hdrdir)/ruby.h console.o: $(hdrdir)/ruby/assert.h console.o: $(hdrdir)/ruby/backward.h +console.o: $(hdrdir)/ruby/backward/2/assume.h +console.o: $(hdrdir)/ruby/backward/2/attributes.h +console.o: $(hdrdir)/ruby/backward/2/bool.h +console.o: $(hdrdir)/ruby/backward/2/inttypes.h +console.o: $(hdrdir)/ruby/backward/2/limits.h +console.o: $(hdrdir)/ruby/backward/2/long_long.h +console.o: $(hdrdir)/ruby/backward/2/stdalign.h +console.o: $(hdrdir)/ruby/backward/2/stdarg.h console.o: $(hdrdir)/ruby/defines.h console.o: $(hdrdir)/ruby/encoding.h +console.o: $(hdrdir)/ruby/fiber/scheduler.h console.o: $(hdrdir)/ruby/intern.h +console.o: $(hdrdir)/ruby/internal/anyargs.h +console.o: $(hdrdir)/ruby/internal/arithmetic.h +console.o: $(hdrdir)/ruby/internal/arithmetic/char.h +console.o: $(hdrdir)/ruby/internal/arithmetic/double.h +console.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +console.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +console.o: $(hdrdir)/ruby/internal/arithmetic/int.h +console.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +console.o: $(hdrdir)/ruby/internal/arithmetic/long.h +console.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +console.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +console.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +console.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +console.o: $(hdrdir)/ruby/internal/arithmetic/short.h +console.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +console.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +console.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +console.o: $(hdrdir)/ruby/internal/assume.h +console.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +console.o: $(hdrdir)/ruby/internal/attr/artificial.h +console.o: $(hdrdir)/ruby/internal/attr/cold.h +console.o: $(hdrdir)/ruby/internal/attr/const.h +console.o: $(hdrdir)/ruby/internal/attr/constexpr.h +console.o: $(hdrdir)/ruby/internal/attr/deprecated.h +console.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +console.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +console.o: $(hdrdir)/ruby/internal/attr/error.h +console.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +console.o: $(hdrdir)/ruby/internal/attr/forceinline.h +console.o: $(hdrdir)/ruby/internal/attr/format.h +console.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +console.o: $(hdrdir)/ruby/internal/attr/noalias.h +console.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +console.o: $(hdrdir)/ruby/internal/attr/noexcept.h +console.o: $(hdrdir)/ruby/internal/attr/noinline.h +console.o: $(hdrdir)/ruby/internal/attr/nonnull.h +console.o: $(hdrdir)/ruby/internal/attr/noreturn.h +console.o: $(hdrdir)/ruby/internal/attr/pure.h +console.o: $(hdrdir)/ruby/internal/attr/restrict.h +console.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +console.o: $(hdrdir)/ruby/internal/attr/warning.h +console.o: $(hdrdir)/ruby/internal/attr/weakref.h +console.o: $(hdrdir)/ruby/internal/cast.h +console.o: $(hdrdir)/ruby/internal/compiler_is.h +console.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +console.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +console.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +console.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +console.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +console.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +console.o: $(hdrdir)/ruby/internal/compiler_since.h +console.o: $(hdrdir)/ruby/internal/config.h +console.o: $(hdrdir)/ruby/internal/constant_p.h +console.o: $(hdrdir)/ruby/internal/core.h +console.o: $(hdrdir)/ruby/internal/core/rarray.h +console.o: $(hdrdir)/ruby/internal/core/rbasic.h +console.o: $(hdrdir)/ruby/internal/core/rbignum.h +console.o: $(hdrdir)/ruby/internal/core/rclass.h +console.o: $(hdrdir)/ruby/internal/core/rdata.h +console.o: $(hdrdir)/ruby/internal/core/rfile.h +console.o: $(hdrdir)/ruby/internal/core/rhash.h +console.o: $(hdrdir)/ruby/internal/core/robject.h +console.o: $(hdrdir)/ruby/internal/core/rregexp.h +console.o: $(hdrdir)/ruby/internal/core/rstring.h +console.o: $(hdrdir)/ruby/internal/core/rstruct.h +console.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +console.o: $(hdrdir)/ruby/internal/ctype.h +console.o: $(hdrdir)/ruby/internal/dllexport.h +console.o: $(hdrdir)/ruby/internal/dosish.h +console.o: $(hdrdir)/ruby/internal/encoding/coderange.h +console.o: $(hdrdir)/ruby/internal/encoding/ctype.h +console.o: $(hdrdir)/ruby/internal/encoding/encoding.h +console.o: $(hdrdir)/ruby/internal/encoding/pathname.h +console.o: $(hdrdir)/ruby/internal/encoding/re.h +console.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +console.o: $(hdrdir)/ruby/internal/encoding/string.h +console.o: $(hdrdir)/ruby/internal/encoding/symbol.h +console.o: $(hdrdir)/ruby/internal/encoding/transcode.h +console.o: $(hdrdir)/ruby/internal/error.h +console.o: $(hdrdir)/ruby/internal/eval.h +console.o: $(hdrdir)/ruby/internal/event.h +console.o: $(hdrdir)/ruby/internal/fl_type.h +console.o: $(hdrdir)/ruby/internal/gc.h +console.o: $(hdrdir)/ruby/internal/glob.h +console.o: $(hdrdir)/ruby/internal/globals.h +console.o: $(hdrdir)/ruby/internal/has/attribute.h +console.o: $(hdrdir)/ruby/internal/has/builtin.h +console.o: $(hdrdir)/ruby/internal/has/c_attribute.h +console.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +console.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +console.o: $(hdrdir)/ruby/internal/has/extension.h +console.o: $(hdrdir)/ruby/internal/has/feature.h +console.o: $(hdrdir)/ruby/internal/has/warning.h +console.o: $(hdrdir)/ruby/internal/intern/array.h +console.o: $(hdrdir)/ruby/internal/intern/bignum.h +console.o: $(hdrdir)/ruby/internal/intern/class.h +console.o: $(hdrdir)/ruby/internal/intern/compar.h +console.o: $(hdrdir)/ruby/internal/intern/complex.h +console.o: $(hdrdir)/ruby/internal/intern/cont.h +console.o: $(hdrdir)/ruby/internal/intern/dir.h +console.o: $(hdrdir)/ruby/internal/intern/enum.h +console.o: $(hdrdir)/ruby/internal/intern/enumerator.h +console.o: $(hdrdir)/ruby/internal/intern/error.h +console.o: $(hdrdir)/ruby/internal/intern/eval.h +console.o: $(hdrdir)/ruby/internal/intern/file.h +console.o: $(hdrdir)/ruby/internal/intern/gc.h +console.o: $(hdrdir)/ruby/internal/intern/hash.h +console.o: $(hdrdir)/ruby/internal/intern/io.h +console.o: $(hdrdir)/ruby/internal/intern/load.h +console.o: $(hdrdir)/ruby/internal/intern/marshal.h +console.o: $(hdrdir)/ruby/internal/intern/numeric.h +console.o: $(hdrdir)/ruby/internal/intern/object.h +console.o: $(hdrdir)/ruby/internal/intern/parse.h +console.o: $(hdrdir)/ruby/internal/intern/proc.h +console.o: $(hdrdir)/ruby/internal/intern/process.h +console.o: $(hdrdir)/ruby/internal/intern/random.h +console.o: $(hdrdir)/ruby/internal/intern/range.h +console.o: $(hdrdir)/ruby/internal/intern/rational.h +console.o: $(hdrdir)/ruby/internal/intern/re.h +console.o: $(hdrdir)/ruby/internal/intern/ruby.h +console.o: $(hdrdir)/ruby/internal/intern/select.h +console.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +console.o: $(hdrdir)/ruby/internal/intern/signal.h +console.o: $(hdrdir)/ruby/internal/intern/sprintf.h +console.o: $(hdrdir)/ruby/internal/intern/string.h +console.o: $(hdrdir)/ruby/internal/intern/struct.h +console.o: $(hdrdir)/ruby/internal/intern/thread.h +console.o: $(hdrdir)/ruby/internal/intern/time.h +console.o: $(hdrdir)/ruby/internal/intern/variable.h +console.o: $(hdrdir)/ruby/internal/intern/vm.h +console.o: $(hdrdir)/ruby/internal/interpreter.h +console.o: $(hdrdir)/ruby/internal/iterator.h +console.o: $(hdrdir)/ruby/internal/memory.h +console.o: $(hdrdir)/ruby/internal/method.h +console.o: $(hdrdir)/ruby/internal/module.h +console.o: $(hdrdir)/ruby/internal/newobj.h +console.o: $(hdrdir)/ruby/internal/rgengc.h +console.o: $(hdrdir)/ruby/internal/scan_args.h +console.o: $(hdrdir)/ruby/internal/special_consts.h +console.o: $(hdrdir)/ruby/internal/static_assert.h +console.o: $(hdrdir)/ruby/internal/stdalign.h +console.o: $(hdrdir)/ruby/internal/stdbool.h +console.o: $(hdrdir)/ruby/internal/symbol.h +console.o: $(hdrdir)/ruby/internal/value.h +console.o: $(hdrdir)/ruby/internal/value_type.h +console.o: $(hdrdir)/ruby/internal/variable.h +console.o: $(hdrdir)/ruby/internal/warning_push.h +console.o: $(hdrdir)/ruby/internal/xmalloc.h console.o: $(hdrdir)/ruby/io.h console.o: $(hdrdir)/ruby/missing.h console.o: $(hdrdir)/ruby/onigmo.h diff --git a/ruby/ext/io/console/extconf.rb b/ruby/ext/io/console/extconf.rb index 3d7e75e2a..e8c5923b1 100644 --- a/ruby/ext/io/console/extconf.rb +++ b/ruby/ext/io/console/extconf.rb @@ -1,7 +1,7 @@ # frozen_string_literal: false require 'mkmf' -ok = true if RUBY_ENGINE == "ruby" +ok = true if RUBY_ENGINE == "ruby" || RUBY_ENGINE == "truffleruby" hdr = nil case when macro_defined?("_WIN32", "") @@ -24,6 +24,11 @@ # rb_funcallv: 2.1.0 # RARRAY_CONST_PTR: 2.1.0 # rb_sym2str: 2.2.0 + if have_macro("HAVE_RUBY_FIBER_SCHEDULER_H") + $defs << "-D""HAVE_RB_IO_WAIT=1" + elsif have_func("rb_scheduler_timeout") # 3.0 + have_func("rb_io_wait") + end $defs << "-D""ENABLE_IO_GETPASS=1" create_makefile("io/console") {|conf| conf << "\n""VK_HEADER = #{vk_header}\n" diff --git a/ruby/ext/io/console/io-console.gemspec b/ruby/ext/io/console/io-console.gemspec index 814bd4ef7..aa57f8ac5 100644 --- a/ruby/ext/io/console/io-console.gemspec +++ b/ruby/ext/io/console/io-console.gemspec @@ -1,15 +1,13 @@ # -*- ruby -*- -_VERSION = "0.5.6" -date = %w$Date:: $[1] +_VERSION = "0.5.11" Gem::Specification.new do |s| s.name = "io-console" s.version = _VERSION - s.date = date s.summary = "Console interface" s.email = "nobu@ruby-lang.org" s.description = "add console capabilities to IO instances." - s.required_ruby_version = ">= 2.4.0" + s.required_ruby_version = ">= 2.6.0" s.homepage = "https://github.com/ruby/io-console" s.metadata["source_code_url"] = s.homepage s.authors = ["Nobu Nakada"] @@ -23,5 +21,21 @@ Gem::Specification.new do |s| lib/io/console/size.rb ] s.extensions = %w[ext/io/console/extconf.rb] - s.license = "BSD-2-Clause" + + if Gem::Platform === s.platform and s.platform =~ 'java' + s.files.delete_if {|f| f.start_with?("ext/")} + s.extensions.clear + s.files.concat(%w[ + lib/io/console.rb + lib/io/console/ffi/bsd_console.rb + lib/io/console/ffi/common.rb + lib/io/console/ffi/console.rb + lib/io/console/ffi/linux_console.rb + lib/io/console/ffi/native_console.rb + lib/io/console/ffi/stty_console.rb + lib/io/console/ffi/stub_console.rb + ]) + end + + s.licenses = ["Ruby", "BSD-2-Clause"] end diff --git a/ruby/ext/io/nonblock/depend b/ruby/ext/io/nonblock/depend index bea4a15e2..664c262e3 100644 --- a/ruby/ext/io/nonblock/depend +++ b/ruby/ext/io/nonblock/depend @@ -4,9 +4,165 @@ nonblock.o: $(arch_hdrdir)/ruby/config.h nonblock.o: $(hdrdir)/ruby.h nonblock.o: $(hdrdir)/ruby/assert.h nonblock.o: $(hdrdir)/ruby/backward.h +nonblock.o: $(hdrdir)/ruby/backward/2/assume.h +nonblock.o: $(hdrdir)/ruby/backward/2/attributes.h +nonblock.o: $(hdrdir)/ruby/backward/2/bool.h +nonblock.o: $(hdrdir)/ruby/backward/2/inttypes.h +nonblock.o: $(hdrdir)/ruby/backward/2/limits.h +nonblock.o: $(hdrdir)/ruby/backward/2/long_long.h +nonblock.o: $(hdrdir)/ruby/backward/2/stdalign.h +nonblock.o: $(hdrdir)/ruby/backward/2/stdarg.h nonblock.o: $(hdrdir)/ruby/defines.h nonblock.o: $(hdrdir)/ruby/encoding.h nonblock.o: $(hdrdir)/ruby/intern.h +nonblock.o: $(hdrdir)/ruby/internal/anyargs.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/char.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/double.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/int.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/long.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/short.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +nonblock.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +nonblock.o: $(hdrdir)/ruby/internal/assume.h +nonblock.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +nonblock.o: $(hdrdir)/ruby/internal/attr/artificial.h +nonblock.o: $(hdrdir)/ruby/internal/attr/cold.h +nonblock.o: $(hdrdir)/ruby/internal/attr/const.h +nonblock.o: $(hdrdir)/ruby/internal/attr/constexpr.h +nonblock.o: $(hdrdir)/ruby/internal/attr/deprecated.h +nonblock.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +nonblock.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +nonblock.o: $(hdrdir)/ruby/internal/attr/error.h +nonblock.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +nonblock.o: $(hdrdir)/ruby/internal/attr/forceinline.h +nonblock.o: $(hdrdir)/ruby/internal/attr/format.h +nonblock.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +nonblock.o: $(hdrdir)/ruby/internal/attr/noalias.h +nonblock.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +nonblock.o: $(hdrdir)/ruby/internal/attr/noexcept.h +nonblock.o: $(hdrdir)/ruby/internal/attr/noinline.h +nonblock.o: $(hdrdir)/ruby/internal/attr/nonnull.h +nonblock.o: $(hdrdir)/ruby/internal/attr/noreturn.h +nonblock.o: $(hdrdir)/ruby/internal/attr/pure.h +nonblock.o: $(hdrdir)/ruby/internal/attr/restrict.h +nonblock.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +nonblock.o: $(hdrdir)/ruby/internal/attr/warning.h +nonblock.o: $(hdrdir)/ruby/internal/attr/weakref.h +nonblock.o: $(hdrdir)/ruby/internal/cast.h +nonblock.o: $(hdrdir)/ruby/internal/compiler_is.h +nonblock.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +nonblock.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +nonblock.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +nonblock.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +nonblock.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +nonblock.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +nonblock.o: $(hdrdir)/ruby/internal/compiler_since.h +nonblock.o: $(hdrdir)/ruby/internal/config.h +nonblock.o: $(hdrdir)/ruby/internal/constant_p.h +nonblock.o: $(hdrdir)/ruby/internal/core.h +nonblock.o: $(hdrdir)/ruby/internal/core/rarray.h +nonblock.o: $(hdrdir)/ruby/internal/core/rbasic.h +nonblock.o: $(hdrdir)/ruby/internal/core/rbignum.h +nonblock.o: $(hdrdir)/ruby/internal/core/rclass.h +nonblock.o: $(hdrdir)/ruby/internal/core/rdata.h +nonblock.o: $(hdrdir)/ruby/internal/core/rfile.h +nonblock.o: $(hdrdir)/ruby/internal/core/rhash.h +nonblock.o: $(hdrdir)/ruby/internal/core/robject.h +nonblock.o: $(hdrdir)/ruby/internal/core/rregexp.h +nonblock.o: $(hdrdir)/ruby/internal/core/rstring.h +nonblock.o: $(hdrdir)/ruby/internal/core/rstruct.h +nonblock.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +nonblock.o: $(hdrdir)/ruby/internal/ctype.h +nonblock.o: $(hdrdir)/ruby/internal/dllexport.h +nonblock.o: $(hdrdir)/ruby/internal/dosish.h +nonblock.o: $(hdrdir)/ruby/internal/encoding/coderange.h +nonblock.o: $(hdrdir)/ruby/internal/encoding/ctype.h +nonblock.o: $(hdrdir)/ruby/internal/encoding/encoding.h +nonblock.o: $(hdrdir)/ruby/internal/encoding/pathname.h +nonblock.o: $(hdrdir)/ruby/internal/encoding/re.h +nonblock.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +nonblock.o: $(hdrdir)/ruby/internal/encoding/string.h +nonblock.o: $(hdrdir)/ruby/internal/encoding/symbol.h +nonblock.o: $(hdrdir)/ruby/internal/encoding/transcode.h +nonblock.o: $(hdrdir)/ruby/internal/error.h +nonblock.o: $(hdrdir)/ruby/internal/eval.h +nonblock.o: $(hdrdir)/ruby/internal/event.h +nonblock.o: $(hdrdir)/ruby/internal/fl_type.h +nonblock.o: $(hdrdir)/ruby/internal/gc.h +nonblock.o: $(hdrdir)/ruby/internal/glob.h +nonblock.o: $(hdrdir)/ruby/internal/globals.h +nonblock.o: $(hdrdir)/ruby/internal/has/attribute.h +nonblock.o: $(hdrdir)/ruby/internal/has/builtin.h +nonblock.o: $(hdrdir)/ruby/internal/has/c_attribute.h +nonblock.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +nonblock.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +nonblock.o: $(hdrdir)/ruby/internal/has/extension.h +nonblock.o: $(hdrdir)/ruby/internal/has/feature.h +nonblock.o: $(hdrdir)/ruby/internal/has/warning.h +nonblock.o: $(hdrdir)/ruby/internal/intern/array.h +nonblock.o: $(hdrdir)/ruby/internal/intern/bignum.h +nonblock.o: $(hdrdir)/ruby/internal/intern/class.h +nonblock.o: $(hdrdir)/ruby/internal/intern/compar.h +nonblock.o: $(hdrdir)/ruby/internal/intern/complex.h +nonblock.o: $(hdrdir)/ruby/internal/intern/cont.h +nonblock.o: $(hdrdir)/ruby/internal/intern/dir.h +nonblock.o: $(hdrdir)/ruby/internal/intern/enum.h +nonblock.o: $(hdrdir)/ruby/internal/intern/enumerator.h +nonblock.o: $(hdrdir)/ruby/internal/intern/error.h +nonblock.o: $(hdrdir)/ruby/internal/intern/eval.h +nonblock.o: $(hdrdir)/ruby/internal/intern/file.h +nonblock.o: $(hdrdir)/ruby/internal/intern/gc.h +nonblock.o: $(hdrdir)/ruby/internal/intern/hash.h +nonblock.o: $(hdrdir)/ruby/internal/intern/io.h +nonblock.o: $(hdrdir)/ruby/internal/intern/load.h +nonblock.o: $(hdrdir)/ruby/internal/intern/marshal.h +nonblock.o: $(hdrdir)/ruby/internal/intern/numeric.h +nonblock.o: $(hdrdir)/ruby/internal/intern/object.h +nonblock.o: $(hdrdir)/ruby/internal/intern/parse.h +nonblock.o: $(hdrdir)/ruby/internal/intern/proc.h +nonblock.o: $(hdrdir)/ruby/internal/intern/process.h +nonblock.o: $(hdrdir)/ruby/internal/intern/random.h +nonblock.o: $(hdrdir)/ruby/internal/intern/range.h +nonblock.o: $(hdrdir)/ruby/internal/intern/rational.h +nonblock.o: $(hdrdir)/ruby/internal/intern/re.h +nonblock.o: $(hdrdir)/ruby/internal/intern/ruby.h +nonblock.o: $(hdrdir)/ruby/internal/intern/select.h +nonblock.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +nonblock.o: $(hdrdir)/ruby/internal/intern/signal.h +nonblock.o: $(hdrdir)/ruby/internal/intern/sprintf.h +nonblock.o: $(hdrdir)/ruby/internal/intern/string.h +nonblock.o: $(hdrdir)/ruby/internal/intern/struct.h +nonblock.o: $(hdrdir)/ruby/internal/intern/thread.h +nonblock.o: $(hdrdir)/ruby/internal/intern/time.h +nonblock.o: $(hdrdir)/ruby/internal/intern/variable.h +nonblock.o: $(hdrdir)/ruby/internal/intern/vm.h +nonblock.o: $(hdrdir)/ruby/internal/interpreter.h +nonblock.o: $(hdrdir)/ruby/internal/iterator.h +nonblock.o: $(hdrdir)/ruby/internal/memory.h +nonblock.o: $(hdrdir)/ruby/internal/method.h +nonblock.o: $(hdrdir)/ruby/internal/module.h +nonblock.o: $(hdrdir)/ruby/internal/newobj.h +nonblock.o: $(hdrdir)/ruby/internal/rgengc.h +nonblock.o: $(hdrdir)/ruby/internal/scan_args.h +nonblock.o: $(hdrdir)/ruby/internal/special_consts.h +nonblock.o: $(hdrdir)/ruby/internal/static_assert.h +nonblock.o: $(hdrdir)/ruby/internal/stdalign.h +nonblock.o: $(hdrdir)/ruby/internal/stdbool.h +nonblock.o: $(hdrdir)/ruby/internal/symbol.h +nonblock.o: $(hdrdir)/ruby/internal/value.h +nonblock.o: $(hdrdir)/ruby/internal/value_type.h +nonblock.o: $(hdrdir)/ruby/internal/variable.h +nonblock.o: $(hdrdir)/ruby/internal/warning_push.h +nonblock.o: $(hdrdir)/ruby/internal/xmalloc.h nonblock.o: $(hdrdir)/ruby/io.h nonblock.o: $(hdrdir)/ruby/missing.h nonblock.o: $(hdrdir)/ruby/onigmo.h diff --git a/ruby/ext/io/nonblock/io-nonblock.gemspec b/ruby/ext/io/nonblock/io-nonblock.gemspec new file mode 100644 index 000000000..34d736650 --- /dev/null +++ b/ruby/ext/io/nonblock/io-nonblock.gemspec @@ -0,0 +1,25 @@ +Gem::Specification.new do |spec| + spec.name = "io-nonblock" + spec.version = "0.1.0" + spec.authors = ["Nobu Nakada"] + spec.email = ["nobu@ruby-lang.org"] + + spec.summary = %q{Enables non-blocking mode with IO class} + spec.description = %q{Enables non-blocking mode with IO class} + spec.homepage = "https://github.com/ruby/io-nonblock" + spec.licenses = ["Ruby", "BSD-2-Clause"] + spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0") + + spec.metadata["homepage_uri"] = spec.homepage + spec.metadata["source_code_uri"] = spec.homepage + + spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do + %x[git ls-files -z].split("\x0").reject do |f| + f.match(%r{\A(?:test|spec|features)/|\A\.(?:git|travis)}) + end + end + spec.extensions = %w[ext/io/nonblock/extconf.rb] + spec.bindir = "exe" + spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.require_paths = ["lib"] +end diff --git a/ruby/ext/io/wait/depend b/ruby/ext/io/wait/depend index bbf1266ab..0426a6a1e 100644 --- a/ruby/ext/io/wait/depend +++ b/ruby/ext/io/wait/depend @@ -1,12 +1,169 @@ # AUTOGENERATED DEPENDENCIES START +# wait.o: $(hdrdir)/ruby/assert.h # not in 2.6 wait.o: $(RUBY_EXTCONF_H) wait.o: $(arch_hdrdir)/ruby/config.h wait.o: $(hdrdir)/ruby.h wait.o: $(hdrdir)/ruby/assert.h wait.o: $(hdrdir)/ruby/backward.h +wait.o: $(hdrdir)/ruby/backward/2/assume.h +wait.o: $(hdrdir)/ruby/backward/2/attributes.h +wait.o: $(hdrdir)/ruby/backward/2/bool.h +wait.o: $(hdrdir)/ruby/backward/2/inttypes.h +wait.o: $(hdrdir)/ruby/backward/2/limits.h +wait.o: $(hdrdir)/ruby/backward/2/long_long.h +wait.o: $(hdrdir)/ruby/backward/2/stdalign.h +wait.o: $(hdrdir)/ruby/backward/2/stdarg.h wait.o: $(hdrdir)/ruby/defines.h wait.o: $(hdrdir)/ruby/encoding.h wait.o: $(hdrdir)/ruby/intern.h +wait.o: $(hdrdir)/ruby/internal/anyargs.h +wait.o: $(hdrdir)/ruby/internal/arithmetic.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/char.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/double.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/int.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/long.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/short.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +wait.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +wait.o: $(hdrdir)/ruby/internal/assume.h +wait.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +wait.o: $(hdrdir)/ruby/internal/attr/artificial.h +wait.o: $(hdrdir)/ruby/internal/attr/cold.h +wait.o: $(hdrdir)/ruby/internal/attr/const.h +wait.o: $(hdrdir)/ruby/internal/attr/constexpr.h +wait.o: $(hdrdir)/ruby/internal/attr/deprecated.h +wait.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +wait.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +wait.o: $(hdrdir)/ruby/internal/attr/error.h +wait.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +wait.o: $(hdrdir)/ruby/internal/attr/forceinline.h +wait.o: $(hdrdir)/ruby/internal/attr/format.h +wait.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +wait.o: $(hdrdir)/ruby/internal/attr/noalias.h +wait.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +wait.o: $(hdrdir)/ruby/internal/attr/noexcept.h +wait.o: $(hdrdir)/ruby/internal/attr/noinline.h +wait.o: $(hdrdir)/ruby/internal/attr/nonnull.h +wait.o: $(hdrdir)/ruby/internal/attr/noreturn.h +wait.o: $(hdrdir)/ruby/internal/attr/pure.h +wait.o: $(hdrdir)/ruby/internal/attr/restrict.h +wait.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +wait.o: $(hdrdir)/ruby/internal/attr/warning.h +wait.o: $(hdrdir)/ruby/internal/attr/weakref.h +wait.o: $(hdrdir)/ruby/internal/cast.h +wait.o: $(hdrdir)/ruby/internal/compiler_is.h +wait.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +wait.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +wait.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +wait.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +wait.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +wait.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +wait.o: $(hdrdir)/ruby/internal/compiler_since.h +wait.o: $(hdrdir)/ruby/internal/config.h +wait.o: $(hdrdir)/ruby/internal/constant_p.h +wait.o: $(hdrdir)/ruby/internal/core.h +wait.o: $(hdrdir)/ruby/internal/core/rarray.h +wait.o: $(hdrdir)/ruby/internal/core/rbasic.h +wait.o: $(hdrdir)/ruby/internal/core/rbignum.h +wait.o: $(hdrdir)/ruby/internal/core/rclass.h +wait.o: $(hdrdir)/ruby/internal/core/rdata.h +wait.o: $(hdrdir)/ruby/internal/core/rfile.h +wait.o: $(hdrdir)/ruby/internal/core/rhash.h +wait.o: $(hdrdir)/ruby/internal/core/robject.h +wait.o: $(hdrdir)/ruby/internal/core/rregexp.h +wait.o: $(hdrdir)/ruby/internal/core/rstring.h +wait.o: $(hdrdir)/ruby/internal/core/rstruct.h +wait.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +wait.o: $(hdrdir)/ruby/internal/ctype.h +wait.o: $(hdrdir)/ruby/internal/dllexport.h +wait.o: $(hdrdir)/ruby/internal/dosish.h +wait.o: $(hdrdir)/ruby/internal/encoding/coderange.h +wait.o: $(hdrdir)/ruby/internal/encoding/ctype.h +wait.o: $(hdrdir)/ruby/internal/encoding/encoding.h +wait.o: $(hdrdir)/ruby/internal/encoding/pathname.h +wait.o: $(hdrdir)/ruby/internal/encoding/re.h +wait.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +wait.o: $(hdrdir)/ruby/internal/encoding/string.h +wait.o: $(hdrdir)/ruby/internal/encoding/symbol.h +wait.o: $(hdrdir)/ruby/internal/encoding/transcode.h +wait.o: $(hdrdir)/ruby/internal/error.h +wait.o: $(hdrdir)/ruby/internal/eval.h +wait.o: $(hdrdir)/ruby/internal/event.h +wait.o: $(hdrdir)/ruby/internal/fl_type.h +wait.o: $(hdrdir)/ruby/internal/gc.h +wait.o: $(hdrdir)/ruby/internal/glob.h +wait.o: $(hdrdir)/ruby/internal/globals.h +wait.o: $(hdrdir)/ruby/internal/has/attribute.h +wait.o: $(hdrdir)/ruby/internal/has/builtin.h +wait.o: $(hdrdir)/ruby/internal/has/c_attribute.h +wait.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +wait.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +wait.o: $(hdrdir)/ruby/internal/has/extension.h +wait.o: $(hdrdir)/ruby/internal/has/feature.h +wait.o: $(hdrdir)/ruby/internal/has/warning.h +wait.o: $(hdrdir)/ruby/internal/intern/array.h +wait.o: $(hdrdir)/ruby/internal/intern/bignum.h +wait.o: $(hdrdir)/ruby/internal/intern/class.h +wait.o: $(hdrdir)/ruby/internal/intern/compar.h +wait.o: $(hdrdir)/ruby/internal/intern/complex.h +wait.o: $(hdrdir)/ruby/internal/intern/cont.h +wait.o: $(hdrdir)/ruby/internal/intern/dir.h +wait.o: $(hdrdir)/ruby/internal/intern/enum.h +wait.o: $(hdrdir)/ruby/internal/intern/enumerator.h +wait.o: $(hdrdir)/ruby/internal/intern/error.h +wait.o: $(hdrdir)/ruby/internal/intern/eval.h +wait.o: $(hdrdir)/ruby/internal/intern/file.h +wait.o: $(hdrdir)/ruby/internal/intern/gc.h +wait.o: $(hdrdir)/ruby/internal/intern/hash.h +wait.o: $(hdrdir)/ruby/internal/intern/io.h +wait.o: $(hdrdir)/ruby/internal/intern/load.h +wait.o: $(hdrdir)/ruby/internal/intern/marshal.h +wait.o: $(hdrdir)/ruby/internal/intern/numeric.h +wait.o: $(hdrdir)/ruby/internal/intern/object.h +wait.o: $(hdrdir)/ruby/internal/intern/parse.h +wait.o: $(hdrdir)/ruby/internal/intern/proc.h +wait.o: $(hdrdir)/ruby/internal/intern/process.h +wait.o: $(hdrdir)/ruby/internal/intern/random.h +wait.o: $(hdrdir)/ruby/internal/intern/range.h +wait.o: $(hdrdir)/ruby/internal/intern/rational.h +wait.o: $(hdrdir)/ruby/internal/intern/re.h +wait.o: $(hdrdir)/ruby/internal/intern/ruby.h +wait.o: $(hdrdir)/ruby/internal/intern/select.h +wait.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +wait.o: $(hdrdir)/ruby/internal/intern/signal.h +wait.o: $(hdrdir)/ruby/internal/intern/sprintf.h +wait.o: $(hdrdir)/ruby/internal/intern/string.h +wait.o: $(hdrdir)/ruby/internal/intern/struct.h +wait.o: $(hdrdir)/ruby/internal/intern/thread.h +wait.o: $(hdrdir)/ruby/internal/intern/time.h +wait.o: $(hdrdir)/ruby/internal/intern/variable.h +wait.o: $(hdrdir)/ruby/internal/intern/vm.h +wait.o: $(hdrdir)/ruby/internal/interpreter.h +wait.o: $(hdrdir)/ruby/internal/iterator.h +wait.o: $(hdrdir)/ruby/internal/memory.h +wait.o: $(hdrdir)/ruby/internal/method.h +wait.o: $(hdrdir)/ruby/internal/module.h +wait.o: $(hdrdir)/ruby/internal/newobj.h +wait.o: $(hdrdir)/ruby/internal/rgengc.h +wait.o: $(hdrdir)/ruby/internal/scan_args.h +wait.o: $(hdrdir)/ruby/internal/special_consts.h +wait.o: $(hdrdir)/ruby/internal/static_assert.h +wait.o: $(hdrdir)/ruby/internal/stdalign.h +wait.o: $(hdrdir)/ruby/internal/stdbool.h +wait.o: $(hdrdir)/ruby/internal/symbol.h +wait.o: $(hdrdir)/ruby/internal/value.h +wait.o: $(hdrdir)/ruby/internal/value_type.h +wait.o: $(hdrdir)/ruby/internal/variable.h +wait.o: $(hdrdir)/ruby/internal/warning_push.h +wait.o: $(hdrdir)/ruby/internal/xmalloc.h wait.o: $(hdrdir)/ruby/io.h wait.o: $(hdrdir)/ruby/missing.h wait.o: $(hdrdir)/ruby/onigmo.h diff --git a/ruby/ext/io/wait/extconf.rb b/ruby/ext/io/wait/extconf.rb index b5d36c3fe..d20ff4553 100644 --- a/ruby/ext/io/wait/extconf.rb +++ b/ruby/ext/io/wait/extconf.rb @@ -2,6 +2,7 @@ require 'mkmf' target = "io/wait" +have_func("rb_io_wait") unless macro_defined?("DOSISH", "#include ") have_header(ioctl_h = "sys/ioctl.h") or ioctl_h = nil fionread = %w[sys/ioctl.h sys/filio.h sys/socket.h].find do |h| diff --git a/ruby/ext/io/wait/io-wait.gemspec b/ruby/ext/io/wait/io-wait.gemspec new file mode 100644 index 000000000..ec7c05dd8 --- /dev/null +++ b/ruby/ext/io/wait/io-wait.gemspec @@ -0,0 +1,27 @@ +_VERSION = "0.2.1" + +Gem::Specification.new do |spec| + spec.name = "io-wait" + spec.version = _VERSION + spec.authors = ["Nobu Nakada"] + spec.email = ["nobu@ruby-lang.org"] + + spec.summary = %q{Waits until IO is readable or writable without blocking.} + spec.description = %q{Waits until IO is readable or writable without blocking.} + spec.homepage = "https://github.com/ruby/io-wait" + spec.licenses = ["Ruby", "BSD-2-Clause"] + spec.required_ruby_version = Gem::Requirement.new(">= 2.6.0") + + spec.metadata["homepage_uri"] = spec.homepage + spec.metadata["source_code_uri"] = spec.homepage + + spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do + `git ls-files -z`.split("\x0").reject do |f| + f.match(%r{\A(?:test|spec|features)/|\A\.(?:git|travis)}) + end + end + spec.extensions = %w[ext/io/wait/extconf.rb] + spec.bindir = "exe" + spec.executables = [] + spec.require_paths = ["lib"] +end diff --git a/ruby/ext/io/wait/wait.c b/ruby/ext/io/wait/wait.c index d846bba49..8f0d16e16 100644 --- a/ruby/ext/io/wait/wait.c +++ b/ruby/ext/io/wait/wait.c @@ -1,3 +1,4 @@ +/* -*- c-file-style: "ruby"; indent-tabs-mode: t -*- */ /********************************************************************** io/wait.c - @@ -39,6 +40,7 @@ #define FIONREAD_POSSIBLE_P(fd) ((void)(fd),Qtrue) #endif +#ifndef HAVE_RB_IO_WAIT static VALUE io_ready_p _((VALUE io)); static VALUE io_wait_readable _((int argc, VALUE *argv, VALUE io)); static VALUE io_wait_writable _((int argc, VALUE *argv, VALUE io)); @@ -67,6 +69,7 @@ wait_for_single_fd(rb_io_t *fptr, int events, struct timeval *tv) rb_io_check_closed(fptr); return (i & events); } +#endif /* * call-seq: @@ -93,34 +96,63 @@ io_nread(VALUE io) return INT2FIX(0); } +#ifdef HAVE_RB_IO_WAIT +static VALUE +io_wait_event(VALUE io, int event, VALUE timeout) +{ + VALUE result = rb_io_wait(io, RB_INT2NUM(event), timeout); + + if (!RB_TEST(result)) { + return Qnil; + } + + int mask = RB_NUM2INT(result); + + if (mask & event) { + return io; + } + else { + return Qfalse; + } +} +#endif + /* * call-seq: * io.ready? -> true or false * - * Returns true if input available without blocking, or false. + * Returns +true+ if input available without blocking, or +false+. */ static VALUE io_ready_p(VALUE io) { rb_io_t *fptr; +#ifndef HAVE_RB_IO_WAIT struct timeval tv = {0, 0}; +#endif GetOpenFile(io, fptr); rb_io_check_readable(fptr); if (rb_io_read_pending(fptr)) return Qtrue; + +#ifndef HAVE_RB_IO_WAIT if (wait_for_single_fd(fptr, RB_WAITFD_IN, &tv)) return Qtrue; +#else + if (RTEST(io_wait_event(io, RUBY_IO_READABLE, RB_INT2NUM(0)))) + return Qtrue; +#endif return Qfalse; } /* * call-seq: - * io.wait_readable -> IO, true or nil - * io.wait_readable(timeout) -> IO, true or nil + * io.wait_readable -> true or false + * io.wait_readable(timeout) -> true or false * - * Waits until IO is readable without blocking and returns +self+, or - * +nil+ when times out. + * Waits until IO is readable and returns +true+, or + * +false+ when times out. * Returns +true+ immediately when buffered data is available. */ @@ -128,42 +160,91 @@ static VALUE io_wait_readable(int argc, VALUE *argv, VALUE io) { rb_io_t *fptr; +#ifndef HAVE_RB_IO_WAIT struct timeval timerec; struct timeval *tv; +#endif GetOpenFile(io, fptr); rb_io_check_readable(fptr); + +#ifndef HAVE_RB_IO_WAIT tv = get_timeout(argc, argv, &timerec); +#endif if (rb_io_read_pending(fptr)) return Qtrue; + +#ifndef HAVE_RB_IO_WAIT if (wait_for_single_fd(fptr, RB_WAITFD_IN, tv)) { return io; } return Qnil; +#else + rb_check_arity(argc, 0, 1); + VALUE timeout = (argc == 1 ? argv[0] : Qnil); + + return io_wait_event(io, RUBY_IO_READABLE, timeout); +#endif } /* * call-seq: - * io.wait_writable -> IO - * io.wait_writable(timeout) -> IO or nil + * io.wait_writable -> true or false + * io.wait_writable(timeout) -> true or false * - * Waits until IO is writable without blocking and returns +self+ or - * +nil+ when times out. + * Waits until IO is writable and returns +true+ or + * +false+ when times out. */ static VALUE io_wait_writable(int argc, VALUE *argv, VALUE io) { rb_io_t *fptr; +#ifndef HAVE_RB_IO_WAIT struct timeval timerec; struct timeval *tv; +#endif GetOpenFile(io, fptr); rb_io_check_writable(fptr); + +#ifndef HAVE_RB_IO_WAIT tv = get_timeout(argc, argv, &timerec); if (wait_for_single_fd(fptr, RB_WAITFD_OUT, tv)) { return io; } return Qnil; +#else + rb_check_arity(argc, 0, 1); + VALUE timeout = (argc == 1 ? argv[0] : Qnil); + + return io_wait_event(io, RUBY_IO_WRITABLE, timeout); +#endif +} + +#ifdef HAVE_RB_IO_WAIT +/* + * call-seq: + * io.wait_priority -> true or false + * io.wait_priority(timeout) -> true or false + * + * Waits until IO is priority and returns +true+ or + * +false+ when times out. + */ +static VALUE +io_wait_priority(int argc, VALUE *argv, VALUE io) +{ + rb_io_t *fptr = NULL; + + RB_IO_POINTER(io, fptr); + rb_io_check_readable(fptr); + + if (rb_io_read_pending(fptr)) return Qtrue; + + rb_check_arity(argc, 0, 1); + VALUE timeout = argc == 1 ? argv[0] : Qnil; + + return io_wait_event(io, RUBY_IO_PRIORITY, timeout); } +#endif static int wait_mode_sym(VALUE mode) @@ -201,18 +282,25 @@ wait_mode_sym(VALUE mode) /* * call-seq: - * io.wait(timeout = nil, mode = :read) -> IO, true or nil + * io.wait(events, timeout) -> event mask or false. + * io.wait(timeout = nil, mode = :read) -> event mask or false. + * + * Waits until the IO becomes ready for the specified events and returns the + * subset of events that become ready, or +false+ when times out. + * + * The events can be a bit mask of +IO::READABLE+, +IO::WRITABLE+ or + * +IO::PRIORITY+. * - * Waits until IO is readable or writable without blocking and returns - * +self+, or +nil+ when times out. * Returns +true+ immediately when buffered data is available. + * * Optional parameter +mode+ is one of +:read+, +:write+, or * +:read_write+. */ static VALUE -io_wait_readwrite(int argc, VALUE *argv, VALUE io) +io_wait(int argc, VALUE *argv, VALUE io) { +#ifndef HAVE_RB_IO_WAIT rb_io_t *fptr; struct timeval timerec; struct timeval *tv = NULL; @@ -236,6 +324,44 @@ io_wait_readwrite(int argc, VALUE *argv, VALUE io) if (wait_for_single_fd(fptr, event, tv)) return io; return Qnil; +#else + VALUE timeout = Qundef; + rb_io_event_t events = 0; + + if (argc != 2 || (RB_SYMBOL_P(argv[0]) || RB_SYMBOL_P(argv[1]))) { + for (int i = 0; i < argc; i += 1) { + if (RB_SYMBOL_P(argv[i])) { + events |= wait_mode_sym(argv[i]); + } + else if (timeout == Qundef) { + rb_time_interval(timeout = argv[i]); + } + else { + rb_raise(rb_eArgError, "timeout given more than once"); + } + } + if (timeout == Qundef) timeout = Qnil; + } + else /* argc == 2 */ { + events = RB_NUM2UINT(argv[0]); + timeout = argv[1]; + } + + if (events == 0) { + events = RUBY_IO_READABLE; + } + + if (events & RUBY_IO_READABLE) { + rb_io_t *fptr = NULL; + RB_IO_POINTER(io, fptr); + + if (rb_io_read_pending(fptr)) { + return Qtrue; + } + } + + return io_wait_event(io, events, timeout); +#endif } /* @@ -245,9 +371,18 @@ io_wait_readwrite(int argc, VALUE *argv, VALUE io) void Init_wait(void) { +#ifdef HAVE_RB_EXT_RACTOR_SAFE + RB_EXT_RACTOR_SAFE(true); +#endif + rb_define_method(rb_cIO, "nread", io_nread, 0); rb_define_method(rb_cIO, "ready?", io_ready_p, 0); - rb_define_method(rb_cIO, "wait", io_wait_readwrite, -1); + + rb_define_method(rb_cIO, "wait", io_wait, -1); + rb_define_method(rb_cIO, "wait_readable", io_wait_readable, -1); rb_define_method(rb_cIO, "wait_writable", io_wait_writable, -1); +#ifdef HAVE_RB_IO_WAIT + rb_define_method(rb_cIO, "wait_priority", io_wait_priority, -1); +#endif } diff --git a/ruby/ext/json/VERSION b/ruby/ext/json/VERSION new file mode 100644 index 000000000..6a6a3d8e3 --- /dev/null +++ b/ruby/ext/json/VERSION @@ -0,0 +1 @@ +2.6.1 diff --git a/ruby/ext/json/extconf.rb b/ruby/ext/json/extconf.rb index 7595d58a9..8a99b6a5c 100644 --- a/ruby/ext/json/extconf.rb +++ b/ruby/ext/json/extconf.rb @@ -1,2 +1,3 @@ require 'mkmf' + create_makefile('json') diff --git a/ruby/ext/json/generator/depend b/ruby/ext/json/generator/depend index 3f04c0d62..1de5fb0b9 100644 --- a/ruby/ext/json/generator/depend +++ b/ruby/ext/json/generator/depend @@ -7,9 +7,166 @@ generator.o: $(arch_hdrdir)/ruby/config.h generator.o: $(hdrdir)/ruby.h generator.o: $(hdrdir)/ruby/assert.h generator.o: $(hdrdir)/ruby/backward.h +generator.o: $(hdrdir)/ruby/backward/2/assume.h +generator.o: $(hdrdir)/ruby/backward/2/attributes.h +generator.o: $(hdrdir)/ruby/backward/2/bool.h +generator.o: $(hdrdir)/ruby/backward/2/inttypes.h +generator.o: $(hdrdir)/ruby/backward/2/limits.h +generator.o: $(hdrdir)/ruby/backward/2/long_long.h +generator.o: $(hdrdir)/ruby/backward/2/stdalign.h +generator.o: $(hdrdir)/ruby/backward/2/stdarg.h generator.o: $(hdrdir)/ruby/defines.h generator.o: $(hdrdir)/ruby/encoding.h generator.o: $(hdrdir)/ruby/intern.h +generator.o: $(hdrdir)/ruby/internal/anyargs.h +generator.o: $(hdrdir)/ruby/internal/arithmetic.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/char.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/double.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/int.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/long.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/short.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +generator.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +generator.o: $(hdrdir)/ruby/internal/assume.h +generator.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +generator.o: $(hdrdir)/ruby/internal/attr/artificial.h +generator.o: $(hdrdir)/ruby/internal/attr/cold.h +generator.o: $(hdrdir)/ruby/internal/attr/const.h +generator.o: $(hdrdir)/ruby/internal/attr/constexpr.h +generator.o: $(hdrdir)/ruby/internal/attr/deprecated.h +generator.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +generator.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +generator.o: $(hdrdir)/ruby/internal/attr/error.h +generator.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +generator.o: $(hdrdir)/ruby/internal/attr/forceinline.h +generator.o: $(hdrdir)/ruby/internal/attr/format.h +generator.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +generator.o: $(hdrdir)/ruby/internal/attr/noalias.h +generator.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +generator.o: $(hdrdir)/ruby/internal/attr/noexcept.h +generator.o: $(hdrdir)/ruby/internal/attr/noinline.h +generator.o: $(hdrdir)/ruby/internal/attr/nonnull.h +generator.o: $(hdrdir)/ruby/internal/attr/noreturn.h +generator.o: $(hdrdir)/ruby/internal/attr/pure.h +generator.o: $(hdrdir)/ruby/internal/attr/restrict.h +generator.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +generator.o: $(hdrdir)/ruby/internal/attr/warning.h +generator.o: $(hdrdir)/ruby/internal/attr/weakref.h +generator.o: $(hdrdir)/ruby/internal/cast.h +generator.o: $(hdrdir)/ruby/internal/compiler_is.h +generator.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +generator.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +generator.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +generator.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +generator.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +generator.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +generator.o: $(hdrdir)/ruby/internal/compiler_since.h +generator.o: $(hdrdir)/ruby/internal/config.h +generator.o: $(hdrdir)/ruby/internal/constant_p.h +generator.o: $(hdrdir)/ruby/internal/core.h +generator.o: $(hdrdir)/ruby/internal/core/rarray.h +generator.o: $(hdrdir)/ruby/internal/core/rbasic.h +generator.o: $(hdrdir)/ruby/internal/core/rbignum.h +generator.o: $(hdrdir)/ruby/internal/core/rclass.h +generator.o: $(hdrdir)/ruby/internal/core/rdata.h +generator.o: $(hdrdir)/ruby/internal/core/rfile.h +generator.o: $(hdrdir)/ruby/internal/core/rhash.h +generator.o: $(hdrdir)/ruby/internal/core/rmatch.h +generator.o: $(hdrdir)/ruby/internal/core/robject.h +generator.o: $(hdrdir)/ruby/internal/core/rregexp.h +generator.o: $(hdrdir)/ruby/internal/core/rstring.h +generator.o: $(hdrdir)/ruby/internal/core/rstruct.h +generator.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +generator.o: $(hdrdir)/ruby/internal/ctype.h +generator.o: $(hdrdir)/ruby/internal/dllexport.h +generator.o: $(hdrdir)/ruby/internal/dosish.h +generator.o: $(hdrdir)/ruby/internal/encoding/coderange.h +generator.o: $(hdrdir)/ruby/internal/encoding/ctype.h +generator.o: $(hdrdir)/ruby/internal/encoding/encoding.h +generator.o: $(hdrdir)/ruby/internal/encoding/pathname.h +generator.o: $(hdrdir)/ruby/internal/encoding/re.h +generator.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +generator.o: $(hdrdir)/ruby/internal/encoding/string.h +generator.o: $(hdrdir)/ruby/internal/encoding/symbol.h +generator.o: $(hdrdir)/ruby/internal/encoding/transcode.h +generator.o: $(hdrdir)/ruby/internal/error.h +generator.o: $(hdrdir)/ruby/internal/eval.h +generator.o: $(hdrdir)/ruby/internal/event.h +generator.o: $(hdrdir)/ruby/internal/fl_type.h +generator.o: $(hdrdir)/ruby/internal/gc.h +generator.o: $(hdrdir)/ruby/internal/glob.h +generator.o: $(hdrdir)/ruby/internal/globals.h +generator.o: $(hdrdir)/ruby/internal/has/attribute.h +generator.o: $(hdrdir)/ruby/internal/has/builtin.h +generator.o: $(hdrdir)/ruby/internal/has/c_attribute.h +generator.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +generator.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +generator.o: $(hdrdir)/ruby/internal/has/extension.h +generator.o: $(hdrdir)/ruby/internal/has/feature.h +generator.o: $(hdrdir)/ruby/internal/has/warning.h +generator.o: $(hdrdir)/ruby/internal/intern/array.h +generator.o: $(hdrdir)/ruby/internal/intern/bignum.h +generator.o: $(hdrdir)/ruby/internal/intern/class.h +generator.o: $(hdrdir)/ruby/internal/intern/compar.h +generator.o: $(hdrdir)/ruby/internal/intern/complex.h +generator.o: $(hdrdir)/ruby/internal/intern/cont.h +generator.o: $(hdrdir)/ruby/internal/intern/dir.h +generator.o: $(hdrdir)/ruby/internal/intern/enum.h +generator.o: $(hdrdir)/ruby/internal/intern/enumerator.h +generator.o: $(hdrdir)/ruby/internal/intern/error.h +generator.o: $(hdrdir)/ruby/internal/intern/eval.h +generator.o: $(hdrdir)/ruby/internal/intern/file.h +generator.o: $(hdrdir)/ruby/internal/intern/gc.h +generator.o: $(hdrdir)/ruby/internal/intern/hash.h +generator.o: $(hdrdir)/ruby/internal/intern/io.h +generator.o: $(hdrdir)/ruby/internal/intern/load.h +generator.o: $(hdrdir)/ruby/internal/intern/marshal.h +generator.o: $(hdrdir)/ruby/internal/intern/numeric.h +generator.o: $(hdrdir)/ruby/internal/intern/object.h +generator.o: $(hdrdir)/ruby/internal/intern/parse.h +generator.o: $(hdrdir)/ruby/internal/intern/proc.h +generator.o: $(hdrdir)/ruby/internal/intern/process.h +generator.o: $(hdrdir)/ruby/internal/intern/random.h +generator.o: $(hdrdir)/ruby/internal/intern/range.h +generator.o: $(hdrdir)/ruby/internal/intern/rational.h +generator.o: $(hdrdir)/ruby/internal/intern/re.h +generator.o: $(hdrdir)/ruby/internal/intern/ruby.h +generator.o: $(hdrdir)/ruby/internal/intern/select.h +generator.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +generator.o: $(hdrdir)/ruby/internal/intern/signal.h +generator.o: $(hdrdir)/ruby/internal/intern/sprintf.h +generator.o: $(hdrdir)/ruby/internal/intern/string.h +generator.o: $(hdrdir)/ruby/internal/intern/struct.h +generator.o: $(hdrdir)/ruby/internal/intern/thread.h +generator.o: $(hdrdir)/ruby/internal/intern/time.h +generator.o: $(hdrdir)/ruby/internal/intern/variable.h +generator.o: $(hdrdir)/ruby/internal/intern/vm.h +generator.o: $(hdrdir)/ruby/internal/interpreter.h +generator.o: $(hdrdir)/ruby/internal/iterator.h +generator.o: $(hdrdir)/ruby/internal/memory.h +generator.o: $(hdrdir)/ruby/internal/method.h +generator.o: $(hdrdir)/ruby/internal/module.h +generator.o: $(hdrdir)/ruby/internal/newobj.h +generator.o: $(hdrdir)/ruby/internal/rgengc.h +generator.o: $(hdrdir)/ruby/internal/scan_args.h +generator.o: $(hdrdir)/ruby/internal/special_consts.h +generator.o: $(hdrdir)/ruby/internal/static_assert.h +generator.o: $(hdrdir)/ruby/internal/stdalign.h +generator.o: $(hdrdir)/ruby/internal/stdbool.h +generator.o: $(hdrdir)/ruby/internal/symbol.h +generator.o: $(hdrdir)/ruby/internal/value.h +generator.o: $(hdrdir)/ruby/internal/value_type.h +generator.o: $(hdrdir)/ruby/internal/variable.h +generator.o: $(hdrdir)/ruby/internal/warning_push.h +generator.o: $(hdrdir)/ruby/internal/xmalloc.h generator.o: $(hdrdir)/ruby/missing.h generator.o: $(hdrdir)/ruby/onigmo.h generator.o: $(hdrdir)/ruby/oniguruma.h diff --git a/ruby/ext/json/generator/generator.c b/ruby/ext/json/generator/generator.c index 881435e3d..e3a83472e 100644 --- a/ruby/ext/json/generator/generator.c +++ b/ruby/ext/json/generator/generator.c @@ -1,11 +1,6 @@ #include "../fbuffer/fbuffer.h" #include "generator.h" -#ifdef HAVE_RUBY_ENCODING_H -static VALUE CEncoding_UTF_8; -static ID i_encoding, i_encode; -#endif - static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject, mHash, mArray, #ifdef RUBY_INTEGER_UNIFICATION @@ -15,14 +10,13 @@ static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject, #endif mFloat, mString, mString_Extend, mTrueClass, mFalseClass, mNilClass, eGeneratorError, - eNestingError, - i_SAFE_STATE_PROTOTYPE; + eNestingError; static ID i_to_s, i_to_json, i_new, i_indent, i_space, i_space_before, i_object_nl, i_array_nl, i_max_nesting, i_allow_nan, i_ascii_only, i_pack, i_unpack, i_create_id, i_extend, i_key_p, i_aref, i_send, i_respond_to_p, i_match, i_keys, i_depth, - i_buffer_initial_length, i_dup; + i_buffer_initial_length, i_dup, i_escape_slash; /* * Copyright 2001-2004 Unicode, Inc. @@ -130,7 +124,7 @@ static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16 /* Converts string to a JSON string in FBuffer buffer, where all but the ASCII * and control characters are JSON escaped. */ -static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string) +static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string, char escape_slash) { const UTF8 *source = (UTF8 *) RSTRING_PTR(string); const UTF8 *sourceEnd = source + RSTRING_LEN(string); @@ -180,6 +174,11 @@ static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string) case '"': fbuffer_append(buffer, "\\\"", 2); break; + case '/': + if(escape_slash) { + fbuffer_append(buffer, "\\/", 2); + break; + } default: fbuffer_append_char(buffer, (char)ch); break; @@ -229,7 +228,7 @@ static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string) * characters required by the JSON standard are JSON escaped. The remaining * characters (should be UTF8) are just passed through and appended to the * result. */ -static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string) +static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string, char escape_slash) { const char *ptr = RSTRING_PTR(string), *p; unsigned long len = RSTRING_LEN(string), start = 0, end = 0; @@ -280,6 +279,12 @@ static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string) escape = "\\\""; escape_len = 2; break; + case '/': + if(escape_slash) { + escape = "\\/"; + escape_len = 2; + break; + } default: { unsigned short clen = 1; @@ -328,6 +333,76 @@ static char *fstrndup(const char *ptr, unsigned long len) { * */ +/* Explanation of the following: that's the only way to not pollute + * standard library's docs with GeneratorMethods:: which + * are uninformative and take a large place in a list of classes + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Array + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Bignum + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::FalseClass + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Fixnum + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Float + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Hash + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Integer + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::NilClass + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Object + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::String + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::String::Extend + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::TrueClass + * :nodoc: + */ + /* * call-seq: to_json(state = nil) * @@ -539,13 +614,18 @@ static size_t State_memsize(const void *ptr) return size; } +#ifndef HAVE_RB_EXT_RACTOR_SAFE +# undef RUBY_TYPED_FROZEN_SHAREABLE +# define RUBY_TYPED_FROZEN_SHAREABLE 0 +#endif + #ifdef NEW_TYPEDDATA_WRAPPER static const rb_data_type_t JSON_Generator_State_type = { "JSON/Generator/State", {NULL, State_free, State_memsize,}, #ifdef RUBY_TYPED_FREE_IMMEDIATELY 0, 0, - RUBY_TYPED_FREE_IMMEDIATELY, + RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE, #endif }; #endif @@ -646,6 +726,8 @@ static VALUE cState_configure(VALUE self, VALUE opts) state->allow_nan = RTEST(tmp); tmp = rb_hash_aref(opts, ID2SYM(i_ascii_only)); state->ascii_only = RTEST(tmp); + tmp = rb_hash_aref(opts, ID2SYM(i_escape_slash)); + state->escape_slash = RTEST(tmp); return self; } @@ -680,6 +762,7 @@ static VALUE cState_to_h(VALUE self) rb_hash_aset(result, ID2SYM(i_allow_nan), state->allow_nan ? Qtrue : Qfalse); rb_hash_aset(result, ID2SYM(i_ascii_only), state->ascii_only ? Qtrue : Qfalse); rb_hash_aset(result, ID2SYM(i_max_nesting), LONG2FIX(state->max_nesting)); + rb_hash_aset(result, ID2SYM(i_escape_slash), state->escape_slash ? Qtrue : Qfalse); rb_hash_aset(result, ID2SYM(i_depth), LONG2FIX(state->depth)); rb_hash_aset(result, ID2SYM(i_buffer_initial_length), LONG2FIX(state->buffer_initial_length)); return result; @@ -860,13 +943,13 @@ static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_S fbuffer_append_char(buffer, '"'); #ifdef HAVE_RUBY_ENCODING_H if (!enc_utf8_compatible_p(rb_enc_get(obj))) { - obj = rb_str_encode(obj, CEncoding_UTF_8, 0, Qnil); + obj = rb_str_export_to_enc(obj, rb_utf8_encoding()); } #endif if (state->ascii_only) { - convert_UTF8_to_JSON_ASCII(buffer, obj); + convert_UTF8_to_JSON_ASCII(buffer, obj, state->escape_slash); } else { - convert_UTF8_to_JSON(buffer, obj); + convert_UTF8_to_JSON(buffer, obj, state->escape_slash); } fbuffer_append_char(buffer, '"'); } @@ -1026,7 +1109,7 @@ static VALUE cState_generate(VALUE self, VALUE obj) * generated, otherwise an exception is thrown, if these values are * encountered. This options defaults to false. * * *ascii_only*: true if only ASCII characters should be generated. This - * ontions defaults to false. + * option defaults to false. * * *buffer_initial_length*: sets the initial length of the generator's * internal buffer. */ @@ -1082,8 +1165,7 @@ static VALUE cState_from_state_s(VALUE self, VALUE opts) } else if (rb_obj_is_kind_of(opts, rb_cHash)) { return rb_funcall(self, i_new, 1, opts); } else { - VALUE prototype = rb_const_get(mJSON, i_SAFE_STATE_PROTOTYPE); - return rb_funcall(prototype, i_dup, 0); + return rb_class_new_instance(0, NULL, cState); } } @@ -1307,6 +1389,31 @@ static VALUE cState_max_nesting_set(VALUE self, VALUE depth) return state->max_nesting = FIX2LONG(depth); } +/* + * call-seq: escape_slash + * + * If this boolean is true, the forward slashes will be escaped in + * the json output. + */ +static VALUE cState_escape_slash(VALUE self) +{ + GET_STATE(self); + return state->escape_slash ? Qtrue : Qfalse; +} + +/* + * call-seq: escape_slash=(depth) + * + * This sets whether or not the forward slashes will be escaped in + * the json output. + */ +static VALUE cState_escape_slash_set(VALUE self, VALUE enable) +{ + GET_STATE(self); + state->escape_slash = RTEST(enable); + return Qnil; +} + /* * call-seq: allow_nan? * @@ -1390,6 +1497,10 @@ static VALUE cState_buffer_initial_length_set(VALUE self, VALUE buffer_initial_l */ void Init_generator(void) { +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + #undef rb_intern rb_require("json/common"); @@ -1419,6 +1530,9 @@ void Init_generator(void) rb_define_method(cState, "array_nl=", cState_array_nl_set, 1); rb_define_method(cState, "max_nesting", cState_max_nesting, 0); rb_define_method(cState, "max_nesting=", cState_max_nesting_set, 1); + rb_define_method(cState, "escape_slash", cState_escape_slash, 0); + rb_define_method(cState, "escape_slash?", cState_escape_slash, 0); + rb_define_method(cState, "escape_slash=", cState_escape_slash_set, 1); rb_define_method(cState, "check_circular?", cState_check_circular_p, 0); rb_define_method(cState, "allow_nan?", cState_allow_nan_p, 0); rb_define_method(cState, "ascii_only?", cState_ascii_only_p, 0); @@ -1475,6 +1589,7 @@ void Init_generator(void) i_object_nl = rb_intern("object_nl"); i_array_nl = rb_intern("array_nl"); i_max_nesting = rb_intern("max_nesting"); + i_escape_slash = rb_intern("escape_slash"); i_allow_nan = rb_intern("allow_nan"); i_ascii_only = rb_intern("ascii_only"); i_depth = rb_intern("depth"); @@ -1490,10 +1605,4 @@ void Init_generator(void) i_match = rb_intern("match"); i_keys = rb_intern("keys"); i_dup = rb_intern("dup"); -#ifdef HAVE_RUBY_ENCODING_H - CEncoding_UTF_8 = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-8")); - i_encoding = rb_intern("encoding"); - i_encode = rb_intern("encode"); -#endif - i_SAFE_STATE_PROTOTYPE = rb_intern("SAFE_STATE_PROTOTYPE"); } diff --git a/ruby/ext/json/generator/generator.h b/ruby/ext/json/generator/generator.h index c367a6209..3ebd62255 100644 --- a/ruby/ext/json/generator/generator.h +++ b/ruby/ext/json/generator/generator.h @@ -49,8 +49,8 @@ static const UTF32 halfMask = 0x3FFUL; static unsigned char isLegalUTF8(const UTF8 *source, unsigned long length); static void unicode_escape(char *buf, UTF16 character); static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16 character); -static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string); -static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string); +static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string, char escape_slash); +static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string, char escape_slash); static char *fstrndup(const char *ptr, unsigned long len); /* ruby api and some helpers */ @@ -72,6 +72,7 @@ typedef struct JSON_Generator_StateStruct { long max_nesting; char allow_nan; char ascii_only; + char escape_slash; long depth; long buffer_initial_length; } JSON_Generator_State; @@ -150,6 +151,8 @@ static VALUE cState_allow_nan_p(VALUE self); static VALUE cState_ascii_only_p(VALUE self); static VALUE cState_depth(VALUE self); static VALUE cState_depth_set(VALUE self, VALUE depth); +static VALUE cState_escape_slash(VALUE self); +static VALUE cState_escape_slash_set(VALUE self, VALUE depth); static FBuffer *cState_prepare_buffer(VALUE self); #ifndef ZALLOC #define ZALLOC(type) ((type *)ruby_zalloc(sizeof(type))) diff --git a/ruby/ext/json/json.gemspec b/ruby/ext/json/json.gemspec index d8be2e52c..948e92c50 100644 --- a/ruby/ext/json/json.gemspec +++ b/ruby/ext/json/json.gemspec @@ -2,26 +2,22 @@ Gem::Specification.new do |s| s.name = "json" - s.version = "2.3.0" + s.version = File.read(File.expand_path('../VERSION', __FILE__)).chomp - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Florian Frank"] - s.date = "2019-12-11" + s.summary = "JSON Implementation for Ruby" s.description = "This is a JSON implementation as a Ruby extension in C." + s.licenses = ["Ruby"] + s.authors = ["Florian Frank"] s.email = "flori@ping.de" + s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb", "ext/json/extconf.rb"] s.extra_rdoc_files = ["README.md"] + s.rdoc_options = ["--title", "JSON implementation for Ruby", "--main", "README.md"] s.files = [ - ".gitignore", - ".travis.yml", "CHANGES.md", - "Gemfile", - "README-json-jruby.md", + "LICENSE", "README.md", - "Rakefile", "VERSION", - "diagrams/.keep", "ext/json/ext/fbuffer/fbuffer.h", "ext/json/ext/generator/depend", "ext/json/ext/generator/extconf.rb", @@ -33,23 +29,7 @@ Gem::Specification.new do |s| "ext/json/ext/parser/parser.h", "ext/json/ext/parser/parser.rl", "ext/json/extconf.rb", - "install.rb", - "java/src/json/ext/ByteListTranscoder.java", - "java/src/json/ext/Generator.java", - "java/src/json/ext/GeneratorMethods.java", - "java/src/json/ext/GeneratorService.java", - "java/src/json/ext/GeneratorState.java", - "java/src/json/ext/OptionsReader.java", - "java/src/json/ext/Parser.java", - "java/src/json/ext/Parser.rl", - "java/src/json/ext/ParserService.java", - "java/src/json/ext/RuntimeInfo.java", - "java/src/json/ext/StringDecoder.java", - "java/src/json/ext/StringEncoder.java", - "java/src/json/ext/Utils.java", - "json-java.gemspec", "json.gemspec", - "json_pure.gemspec", "lib/json.rb", "lib/json/add/bigdecimal.rb", "lib/json/add/complex.rb", @@ -67,67 +47,21 @@ Gem::Specification.new do |s| "lib/json/add/time.rb", "lib/json/common.rb", "lib/json/ext.rb", - "lib/json/ext/.keep", "lib/json/generic_object.rb", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", - "references/rfc7159.txt", - "tests/fixtures/fail10.json", - "tests/fixtures/fail11.json", - "tests/fixtures/fail12.json", - "tests/fixtures/fail13.json", - "tests/fixtures/fail14.json", - "tests/fixtures/fail18.json", - "tests/fixtures/fail19.json", - "tests/fixtures/fail2.json", - "tests/fixtures/fail20.json", - "tests/fixtures/fail21.json", - "tests/fixtures/fail22.json", - "tests/fixtures/fail23.json", - "tests/fixtures/fail24.json", - "tests/fixtures/fail25.json", - "tests/fixtures/fail27.json", - "tests/fixtures/fail28.json", - "tests/fixtures/fail3.json", - "tests/fixtures/fail4.json", - "tests/fixtures/fail5.json", - "tests/fixtures/fail6.json", - "tests/fixtures/fail7.json", - "tests/fixtures/fail8.json", - "tests/fixtures/fail9.json", - "tests/fixtures/obsolete_fail1.json", - "tests/fixtures/pass1.json", - "tests/fixtures/pass15.json", - "tests/fixtures/pass16.json", - "tests/fixtures/pass17.json", - "tests/fixtures/pass2.json", - "tests/fixtures/pass26.json", - "tests/fixtures/pass3.json", - "tests/json_addition_test.rb", - "tests/json_common_interface_test.rb", - "tests/json_encoding_test.rb", - "tests/json_ext_parser_test.rb", - "tests/json_fixtures_test.rb", - "tests/json_generator_test.rb", - "tests/json_generic_object_test.rb", - "tests/json_parser_test.rb", - "tests/json_string_matching_test.rb", - "tests/test_helper.rb", - "tests/test_helper.rb", - "tools/diff.sh", - "tools/fuzz.rb", - "tools/server.rb", ] s.homepage = "http://flori.github.com/json" - s.licenses = ["Ruby"] - s.rdoc_options = ["--title", "JSON implemention for Ruby", "--main", "README.md"] - s.required_ruby_version = Gem::Requirement.new(">= 1.9") - s.rubygems_version = "3.0.3" - s.summary = "JSON Implementation for Ruby" - s.test_files = ["tests/test_helper.rb"] + s.metadata = { + 'bug_tracker_uri' => 'https://github.com/flori/json/issues', + 'changelog_uri' => 'https://github.com/flori/json/blob/master/CHANGES.md', + 'documentation_uri' => 'http://flori.github.io/json/doc/index.html', + 'homepage_uri' => 'http://flori.github.io/json/', + 'source_code_uri' => 'https://github.com/flori/json', + 'wiki_uri' => 'https://github.com/flori/json/wiki' + } - s.add_development_dependency("rake", [">= 0"]) - s.add_development_dependency("test-unit", ["~> 2.0"]) + s.required_ruby_version = Gem::Requirement.new(">= 2.3") end diff --git a/ruby/ext/json/lib/json.rb b/ruby/ext/json/lib/json.rb index b5a691241..1e64bfcb1 100644 --- a/ruby/ext/json/lib/json.rb +++ b/ruby/ext/json/lib/json.rb @@ -2,55 +2,575 @@ require 'json/common' ## -# = JavaScript Object Notation (JSON) +# = JavaScript \Object Notation (\JSON) # -# JSON is a lightweight data-interchange format. It is easy for us -# humans to read and write. Plus, equally simple for machines to generate or parse. -# JSON is completely language agnostic, making it the ideal interchange format. +# \JSON is a lightweight data-interchange format. # -# Built on two universally available structures: -# 1. A collection of name/value pairs. Often referred to as an _object_, hash table, record, struct, keyed list, or associative array. -# 2. An ordered list of values. More commonly called an _array_, vector, sequence or list. +# A \JSON value is one of the following: +# - Double-quoted text: "foo". +# - Number: +1+, +1.0+, +2.0e2+. +# - Boolean: +true+, +false+. +# - Null: +null+. +# - \Array: an ordered list of values, enclosed by square brackets: +# ["foo", 1, 1.0, 2.0e2, true, false, null] # -# To read more about JSON visit: http://json.org +# - \Object: a collection of name/value pairs, enclosed by curly braces; +# each name is double-quoted text; +# the values may be any \JSON values: +# {"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null} # -# == Parsing JSON +# A \JSON array or object may contain nested arrays, objects, and scalars +# to any depth: +# {"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]} +# [{"foo": 0, "bar": 1}, ["baz", 2]] # -# To parse a JSON string received by another application or generated within -# your existing application: +# == Using \Module \JSON # +# To make module \JSON available in your code, begin with: # require 'json' # -# my_hash = JSON.parse('{"hello": "goodbye"}') -# puts my_hash["hello"] => "goodbye" +# All examples here assume that this has been done. # -# Notice the extra quotes '' around the hash notation. Ruby expects -# the argument to be a string and can't convert objects like a hash or array. +# === Parsing \JSON # -# Ruby converts your string into a hash +# You can parse a \String containing \JSON data using +# either of two methods: +# - JSON.parse(source, opts) +# - JSON.parse!(source, opts) # -# == Generating JSON +# where +# - +source+ is a Ruby object. +# - +opts+ is a \Hash object containing options +# that control both input allowed and output formatting. # -# Creating a JSON string for communication or serialization is -# just as simple. +# The difference between the two methods +# is that JSON.parse! omits some checks +# and may not be safe for some +source+ data; +# use it only for data from trusted sources. +# Use the safer method JSON.parse for less trusted sources. # -# require 'json' +# ==== Parsing \JSON Arrays # -# my_hash = {:hello => "goodbye"} -# puts JSON.generate(my_hash) => "{\"hello\":\"goodbye\"}" +# When +source+ is a \JSON array, JSON.parse by default returns a Ruby \Array: +# json = '["foo", 1, 1.0, 2.0e2, true, false, null]' +# ruby = JSON.parse(json) +# ruby # => ["foo", 1, 1.0, 200.0, true, false, nil] +# ruby.class # => Array # -# Or an alternative way: +# The \JSON array may contain nested arrays, objects, and scalars +# to any depth: +# json = '[{"foo": 0, "bar": 1}, ["baz", 2]]' +# JSON.parse(json) # => [{"foo"=>0, "bar"=>1}, ["baz", 2]] # -# require 'json' -# puts {:hello => "goodbye"}.to_json => "{\"hello\":\"goodbye\"}" +# ==== Parsing \JSON \Objects +# +# When the source is a \JSON object, JSON.parse by default returns a Ruby \Hash: +# json = '{"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null}' +# ruby = JSON.parse(json) +# ruby # => {"a"=>"foo", "b"=>1, "c"=>1.0, "d"=>200.0, "e"=>true, "f"=>false, "g"=>nil} +# ruby.class # => Hash +# +# The \JSON object may contain nested arrays, objects, and scalars +# to any depth: +# json = '{"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]}' +# JSON.parse(json) # => {"foo"=>{"bar"=>1, "baz"=>2}, "bat"=>[0, 1, 2]} +# +# ==== Parsing \JSON Scalars +# +# When the source is a \JSON scalar (not an array or object), +# JSON.parse returns a Ruby scalar. +# +# \String: +# ruby = JSON.parse('"foo"') +# ruby # => 'foo' +# ruby.class # => String +# \Integer: +# ruby = JSON.parse('1') +# ruby # => 1 +# ruby.class # => Integer +# \Float: +# ruby = JSON.parse('1.0') +# ruby # => 1.0 +# ruby.class # => Float +# ruby = JSON.parse('2.0e2') +# ruby # => 200 +# ruby.class # => Float +# Boolean: +# ruby = JSON.parse('true') +# ruby # => true +# ruby.class # => TrueClass +# ruby = JSON.parse('false') +# ruby # => false +# ruby.class # => FalseClass +# Null: +# ruby = JSON.parse('null') +# ruby # => nil +# ruby.class # => NilClass +# +# ==== Parsing Options +# +# ====== Input Options +# +# Option +max_nesting+ (\Integer) specifies the maximum nesting depth allowed; +# defaults to +100+; specify +false+ to disable depth checking. +# +# With the default, +false+: +# source = '[0, [1, [2, [3]]]]' +# ruby = JSON.parse(source) +# ruby # => [0, [1, [2, [3]]]] +# Too deep: +# # Raises JSON::NestingError (nesting of 2 is too deep): +# JSON.parse(source, {max_nesting: 1}) +# Bad value: +# # Raises TypeError (wrong argument type Symbol (expected Fixnum)): +# JSON.parse(source, {max_nesting: :foo}) +# +# --- +# +# Option +allow_nan+ (boolean) specifies whether to allow +# NaN, Infinity, and MinusInfinity in +source+; +# defaults to +false+. +# +# With the default, +false+: +# # Raises JSON::ParserError (225: unexpected token at '[NaN]'): +# JSON.parse('[NaN]') +# # Raises JSON::ParserError (232: unexpected token at '[Infinity]'): +# JSON.parse('[Infinity]') +# # Raises JSON::ParserError (248: unexpected token at '[-Infinity]'): +# JSON.parse('[-Infinity]') +# Allow: +# source = '[NaN, Infinity, -Infinity]' +# ruby = JSON.parse(source, {allow_nan: true}) +# ruby # => [NaN, Infinity, -Infinity] +# +# ====== Output Options +# +# Option +symbolize_names+ (boolean) specifies whether returned \Hash keys +# should be Symbols; +# defaults to +false+ (use Strings). +# +# With the default, +false+: +# source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}' +# ruby = JSON.parse(source) +# ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil} +# Use Symbols: +# ruby = JSON.parse(source, {symbolize_names: true}) +# ruby # => {:a=>"foo", :b=>1.0, :c=>true, :d=>false, :e=>nil} +# +# --- +# +# Option +object_class+ (\Class) specifies the Ruby class to be used +# for each \JSON object; +# defaults to \Hash. +# +# With the default, \Hash: +# source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}' +# ruby = JSON.parse(source) +# ruby.class # => Hash +# Use class \OpenStruct: +# ruby = JSON.parse(source, {object_class: OpenStruct}) +# ruby # => # +# +# --- +# +# Option +array_class+ (\Class) specifies the Ruby class to be used +# for each \JSON array; +# defaults to \Array. +# +# With the default, \Array: +# source = '["foo", 1.0, true, false, null]' +# ruby = JSON.parse(source) +# ruby.class # => Array +# Use class \Set: +# ruby = JSON.parse(source, {array_class: Set}) +# ruby # => # +# +# --- +# +# Option +create_additions+ (boolean) specifies whether to use \JSON additions in parsing. +# See {\JSON Additions}[#module-JSON-label-JSON+Additions]. +# +# === Generating \JSON +# +# To generate a Ruby \String containing \JSON data, +# use method JSON.generate(source, opts), where +# - +source+ is a Ruby object. +# - +opts+ is a \Hash object containing options +# that control both input allowed and output formatting. +# +# ==== Generating \JSON from Arrays +# +# When the source is a Ruby \Array, JSON.generate returns +# a \String containing a \JSON array: +# ruby = [0, 's', :foo] +# json = JSON.generate(ruby) +# json # => '[0,"s","foo"]' +# +# The Ruby \Array array may contain nested arrays, hashes, and scalars +# to any depth: +# ruby = [0, [1, 2], {foo: 3, bar: 4}] +# json = JSON.generate(ruby) +# json # => '[0,[1,2],{"foo":3,"bar":4}]' +# +# ==== Generating \JSON from Hashes +# +# When the source is a Ruby \Hash, JSON.generate returns +# a \String containing a \JSON object: +# ruby = {foo: 0, bar: 's', baz: :bat} +# json = JSON.generate(ruby) +# json # => '{"foo":0,"bar":"s","baz":"bat"}' +# +# The Ruby \Hash array may contain nested arrays, hashes, and scalars +# to any depth: +# ruby = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad} +# json = JSON.generate(ruby) +# json # => '{"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"}' +# +# ==== Generating \JSON from Other Objects +# +# When the source is neither an \Array nor a \Hash, +# the generated \JSON data depends on the class of the source. +# +# When the source is a Ruby \Integer or \Float, JSON.generate returns +# a \String containing a \JSON number: +# JSON.generate(42) # => '42' +# JSON.generate(0.42) # => '0.42' +# +# When the source is a Ruby \String, JSON.generate returns +# a \String containing a \JSON string (with double-quotes): +# JSON.generate('A string') # => '"A string"' +# +# When the source is +true+, +false+ or +nil+, JSON.generate returns +# a \String containing the corresponding \JSON token: +# JSON.generate(true) # => 'true' +# JSON.generate(false) # => 'false' +# JSON.generate(nil) # => 'null' +# +# When the source is none of the above, JSON.generate returns +# a \String containing a \JSON string representation of the source: +# JSON.generate(:foo) # => '"foo"' +# JSON.generate(Complex(0, 0)) # => '"0+0i"' +# JSON.generate(Dir.new('.')) # => '"#"' +# +# ==== Generating Options +# +# ====== Input Options # -# JSON.generate only allows objects or arrays to be converted -# to JSON syntax. to_json, however, accepts many Ruby classes -# even though it acts only as a method for serialization: +# Option +allow_nan+ (boolean) specifies whether +# +NaN+, +Infinity+, and -Infinity may be generated; +# defaults to +false+. # +# With the default, +false+: +# # Raises JSON::GeneratorError (920: NaN not allowed in JSON): +# JSON.generate(JSON::NaN) +# # Raises JSON::GeneratorError (917: Infinity not allowed in JSON): +# JSON.generate(JSON::Infinity) +# # Raises JSON::GeneratorError (917: -Infinity not allowed in JSON): +# JSON.generate(JSON::MinusInfinity) +# +# Allow: +# ruby = [Float::NaN, Float::Infinity, Float::MinusInfinity] +# JSON.generate(ruby, allow_nan: true) # => '[NaN,Infinity,-Infinity]' +# +# --- +# +# Option +max_nesting+ (\Integer) specifies the maximum nesting depth +# in +obj+; defaults to +100+. +# +# With the default, +100+: +# obj = [[[[[[0]]]]]] +# JSON.generate(obj) # => '[[[[[[0]]]]]]' +# +# Too deep: +# # Raises JSON::NestingError (nesting of 2 is too deep): +# JSON.generate(obj, max_nesting: 2) +# +# ====== Output Options +# +# The default formatting options generate the most compact +# \JSON data, all on one line and with no whitespace. +# +# You can use these formatting options to generate +# \JSON data in a more open format, using whitespace. +# See also JSON.pretty_generate. +# +# - Option +array_nl+ (\String) specifies a string (usually a newline) +# to be inserted after each \JSON array; defaults to the empty \String, ''. +# - Option +object_nl+ (\String) specifies a string (usually a newline) +# to be inserted after each \JSON object; defaults to the empty \String, ''. +# - Option +indent+ (\String) specifies the string (usually spaces) to be +# used for indentation; defaults to the empty \String, ''; +# defaults to the empty \String, ''; +# has no effect unless options +array_nl+ or +object_nl+ specify newlines. +# - Option +space+ (\String) specifies a string (usually a space) to be +# inserted after the colon in each \JSON object's pair; +# defaults to the empty \String, ''. +# - Option +space_before+ (\String) specifies a string (usually a space) to be +# inserted before the colon in each \JSON object's pair; +# defaults to the empty \String, ''. +# +# In this example, +obj+ is used first to generate the shortest +# \JSON data (no whitespace), then again with all formatting options +# specified: +# +# obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}} +# json = JSON.generate(obj) +# puts 'Compact:', json +# opts = { +# array_nl: "\n", +# object_nl: "\n", +# indent: ' ', +# space_before: ' ', +# space: ' ' +# } +# puts 'Open:', JSON.generate(obj, opts) +# +# Output: +# Compact: +# {"foo":["bar","baz"],"bat":{"bam":0,"bad":1}} +# Open: +# { +# "foo" : [ +# "bar", +# "baz" +# ], +# "bat" : { +# "bam" : 0, +# "bad" : 1 +# } +# } +# +# == \JSON Additions +# +# When you "round trip" a non-\String object from Ruby to \JSON and back, +# you have a new \String, instead of the object you began with: +# ruby0 = Range.new(0, 2) +# json = JSON.generate(ruby0) +# json # => '0..2"' +# ruby1 = JSON.parse(json) +# ruby1 # => '0..2' +# ruby1.class # => String +# +# You can use \JSON _additions_ to preserve the original object. +# The addition is an extension of a ruby class, so that: +# - \JSON.generate stores more information in the \JSON string. +# - \JSON.parse, called with option +create_additions+, +# uses that information to create a proper Ruby object. +# +# This example shows a \Range being generated into \JSON +# and parsed back into Ruby, both without and with +# the addition for \Range: +# ruby = Range.new(0, 2) +# # This passage does not use the addition for Range. +# json0 = JSON.generate(ruby) +# ruby0 = JSON.parse(json0) +# # This passage uses the addition for Range. +# require 'json/add/range' +# json1 = JSON.generate(ruby) +# ruby1 = JSON.parse(json1, create_additions: true) +# # Make a nice display. +# display = <require 'json/add/bigdecimal' +# - Complex: require 'json/add/complex' +# - Date: require 'json/add/date' +# - DateTime: require 'json/add/date_time' +# - Exception: require 'json/add/exception' +# - OpenStruct: require 'json/add/ostruct' +# - Range: require 'json/add/range' +# - Rational: require 'json/add/rational' +# - Regexp: require 'json/add/regexp' +# - Set: require 'json/add/set' +# - Struct: require 'json/add/struct' +# - Symbol: require 'json/add/symbol' +# - Time: require 'json/add/time' +# +# To reduce punctuation clutter, the examples below +# show the generated \JSON via +puts+, rather than the usual +inspect+, +# +# \BigDecimal: +# require 'json/add/bigdecimal' +# ruby0 = BigDecimal(0) # 0.0 +# json = JSON.generate(ruby0) # {"json_class":"BigDecimal","b":"27:0.0"} +# ruby1 = JSON.parse(json, create_additions: true) # 0.0 +# ruby1.class # => BigDecimal +# +# \Complex: +# require 'json/add/complex' +# ruby0 = Complex(1+0i) # 1+0i +# json = JSON.generate(ruby0) # {"json_class":"Complex","r":1,"i":0} +# ruby1 = JSON.parse(json, create_additions: true) # 1+0i +# ruby1.class # Complex +# +# \Date: +# require 'json/add/date' +# ruby0 = Date.today # 2020-05-02 +# json = JSON.generate(ruby0) # {"json_class":"Date","y":2020,"m":5,"d":2,"sg":2299161.0} +# ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02 +# ruby1.class # Date +# +# \DateTime: +# require 'json/add/date_time' +# ruby0 = DateTime.now # 2020-05-02T10:38:13-05:00 +# json = JSON.generate(ruby0) # {"json_class":"DateTime","y":2020,"m":5,"d":2,"H":10,"M":38,"S":13,"of":"-5/24","sg":2299161.0} +# ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02T10:38:13-05:00 +# ruby1.class # DateTime +# +# \Exception (and its subclasses including \RuntimeError): +# require 'json/add/exception' +# ruby0 = Exception.new('A message') # A message +# json = JSON.generate(ruby0) # {"json_class":"Exception","m":"A message","b":null} +# ruby1 = JSON.parse(json, create_additions: true) # A message +# ruby1.class # Exception +# ruby0 = RuntimeError.new('Another message') # Another message +# json = JSON.generate(ruby0) # {"json_class":"RuntimeError","m":"Another message","b":null} +# ruby1 = JSON.parse(json, create_additions: true) # Another message +# ruby1.class # RuntimeError +# +# \OpenStruct: +# require 'json/add/ostruct' +# ruby0 = OpenStruct.new(name: 'Matz', language: 'Ruby') # # +# json = JSON.generate(ruby0) # {"json_class":"OpenStruct","t":{"name":"Matz","language":"Ruby"}} +# ruby1 = JSON.parse(json, create_additions: true) # # +# ruby1.class # OpenStruct +# +# \Range: +# require 'json/add/range' +# ruby0 = Range.new(0, 2) # 0..2 +# json = JSON.generate(ruby0) # {"json_class":"Range","a":[0,2,false]} +# ruby1 = JSON.parse(json, create_additions: true) # 0..2 +# ruby1.class # Range +# +# \Rational: +# require 'json/add/rational' +# ruby0 = Rational(1, 3) # 1/3 +# json = JSON.generate(ruby0) # {"json_class":"Rational","n":1,"d":3} +# ruby1 = JSON.parse(json, create_additions: true) # 1/3 +# ruby1.class # Rational +# +# \Regexp: +# require 'json/add/regexp' +# ruby0 = Regexp.new('foo') # (?-mix:foo) +# json = JSON.generate(ruby0) # {"json_class":"Regexp","o":0,"s":"foo"} +# ruby1 = JSON.parse(json, create_additions: true) # (?-mix:foo) +# ruby1.class # Regexp +# +# \Set: +# require 'json/add/set' +# ruby0 = Set.new([0, 1, 2]) # # +# json = JSON.generate(ruby0) # {"json_class":"Set","a":[0,1,2]} +# ruby1 = JSON.parse(json, create_additions: true) # # +# ruby1.class # Set +# +# \Struct: +# require 'json/add/struct' +# Customer = Struct.new(:name, :address) # Customer +# ruby0 = Customer.new("Dave", "123 Main") # # +# json = JSON.generate(ruby0) # {"json_class":"Customer","v":["Dave","123 Main"]} +# ruby1 = JSON.parse(json, create_additions: true) # # +# ruby1.class # Customer +# +# \Symbol: +# require 'json/add/symbol' +# ruby0 = :foo # foo +# json = JSON.generate(ruby0) # {"json_class":"Symbol","s":"foo"} +# ruby1 = JSON.parse(json, create_additions: true) # foo +# ruby1.class # Symbol +# +# \Time: +# require 'json/add/time' +# ruby0 = Time.now # 2020-05-02 11:28:26 -0500 +# json = JSON.generate(ruby0) # {"json_class":"Time","s":1588436906,"n":840560000} +# ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02 11:28:26 -0500 +# ruby1.class # Time +# +# +# === Custom \JSON Additions +# +# In addition to the \JSON additions provided, +# you can craft \JSON additions of your own, +# either for Ruby built-in classes or for user-defined classes. +# +# Here's a user-defined class +Foo+: +# class Foo +# attr_accessor :bar, :baz +# def initialize(bar, baz) +# self.bar = bar +# self.baz = baz +# end +# end +# +# Here's the \JSON addition for it: +# # Extend class Foo with JSON addition. +# class Foo +# # Serialize Foo object with its class name and arguments +# def to_json(*args) +# { +# JSON.create_id => self.class.name, +# 'a' => [ bar, baz ] +# }.to_json(*args) +# end +# # Deserialize JSON string by constructing new Foo object with arguments. +# def self.json_create(object) +# new(*object['a']) +# end +# end +# +# Demonstration: # require 'json' +# # This Foo object has no custom addition. +# foo0 = Foo.new(0, 1) +# json0 = JSON.generate(foo0) +# obj0 = JSON.parse(json0) +# # Lood the custom addition. +# require_relative 'foo_addition' +# # This foo has the custom addition. +# foo1 = Foo.new(0, 1) +# json1 = JSON.generate(foo1) +# obj1 = JSON.parse(json1, create_additions: true) +# # Make a nice display. +# display = < "1" +# Generated JSON: +# Without custom addition: "#" (String) +# With custom addition: {"json_class":"Foo","a":[0,1]} (String) +# Parsed JSON: +# Without custom addition: "#" (String) +# With custom addition: # (Foo) # module JSON require 'json/version' diff --git a/ruby/ext/json/lib/json/add/complex.rb b/ruby/ext/json/lib/json/add/complex.rb index 4d977e758..e63e29fd2 100644 --- a/ruby/ext/json/lib/json/add/complex.rb +++ b/ruby/ext/json/lib/json/add/complex.rb @@ -2,7 +2,6 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end -defined?(::Complex) or require 'complex' class Complex diff --git a/ruby/ext/json/lib/json/add/rational.rb b/ruby/ext/json/lib/json/add/rational.rb index 6be403458..f77622604 100644 --- a/ruby/ext/json/lib/json/add/rational.rb +++ b/ruby/ext/json/lib/json/add/rational.rb @@ -2,7 +2,6 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end -defined?(::Rational) or require 'rational' class Rational # Deserializes JSON string by converting numerator value n, diff --git a/ruby/ext/json/lib/json/common.rb b/ruby/ext/json/lib/json/common.rb index 3be9fd8dc..ea46896fc 100644 --- a/ruby/ext/json/lib/json/common.rb +++ b/ruby/ext/json/lib/json/common.rb @@ -4,12 +4,17 @@ module JSON class << self - # If _object_ is string-like, parse the string and return the parsed - # result as a Ruby data structure. Otherwise generate a JSON text from the - # Ruby data structure object and return it. + # :call-seq: + # JSON[object] -> new_array or new_string # - # The _opts_ argument is passed through to generate/parse respectively. - # See generate and parse for their documentation. + # If +object+ is a \String, + # calls JSON.parse with +object+ and +opts+ (see method #parse): + # json = '[0, 1, null]' + # JSON[json]# => [0, 1, nil] + # + # Otherwise, calls JSON.generate with +object+ and +opts+ (see method #generate): + # ruby = [0, 1, nil] + # JSON[ruby] # => '[0,1,null]' def [](object, opts = {}) if object.respond_to? :to_str JSON.parse(object.to_str, opts) @@ -19,7 +24,8 @@ def [](object, opts = {}) end # Returns the JSON parser class that is used by JSON. This is either - # JSON::Ext::Parser or JSON::Pure::Parser. + # JSON::Ext::Parser or JSON::Pure::Parser: + # JSON.parser # => JSON::Ext::Parser attr_reader :parser # Set the JSON parser class _parser_ to be used by JSON. @@ -65,37 +71,61 @@ def generator=(generator) # :nodoc: end self.state = generator::State const_set :State, self.state - const_set :SAFE_STATE_PROTOTYPE, State.new - const_set :FAST_STATE_PROTOTYPE, State.new( + const_set :SAFE_STATE_PROTOTYPE, State.new # for JRuby + const_set :FAST_STATE_PROTOTYPE, create_fast_state + const_set :PRETTY_STATE_PROTOTYPE, create_pretty_state + ensure + $VERBOSE = old + end + + def create_fast_state + State.new( :indent => '', :space => '', :object_nl => "", :array_nl => "", :max_nesting => false ) - const_set :PRETTY_STATE_PROTOTYPE, State.new( + end + + def create_pretty_state + State.new( :indent => ' ', :space => ' ', :object_nl => "\n", :array_nl => "\n" ) - ensure - $VERBOSE = old end # Returns the JSON generator module that is used by JSON. This is - # either JSON::Ext::Generator or JSON::Pure::Generator. + # either JSON::Ext::Generator or JSON::Pure::Generator: + # JSON.generator # => JSON::Ext::Generator attr_reader :generator - # Returns the JSON generator state class that is used by JSON. This is - # either JSON::Ext::Generator::State or JSON::Pure::Generator::State. + # Sets or Returns the JSON generator state class that is used by JSON. This is + # either JSON::Ext::Generator::State or JSON::Pure::Generator::State: + # JSON.state # => JSON::Ext::Generator::State attr_accessor :state + end + + DEFAULT_CREATE_ID = 'json_class'.freeze + private_constant :DEFAULT_CREATE_ID + + CREATE_ID_TLS_KEY = "JSON.create_id".freeze + private_constant :CREATE_ID_TLS_KEY + + # Sets create identifier, which is used to decide if the _json_create_ + # hook of a class should be called; initial value is +json_class+: + # JSON.create_id # => 'json_class' + def self.create_id=(new_value) + Thread.current[CREATE_ID_TLS_KEY] = new_value.dup.freeze + end - # This is create identifier, which is used to decide if the _json_create_ - # hook of a class should be called. It defaults to 'json_class'. - attr_accessor :create_id + # Returns the current create identifier. + # See also JSON.create_id=. + def self.create_id + Thread.current[CREATE_ID_TLS_KEY] || DEFAULT_CREATE_ID end - self.create_id = 'json_class' NaN = 0.0/0 @@ -126,7 +156,7 @@ class CircularDatastructure < NestingError; end # This exception is raised if a generator or unparser error occurs. class GeneratorError < JSONError; end # For backwards compatibility - UnparserError = GeneratorError + UnparserError = GeneratorError # :nodoc: # This exception is raised if the required unicode support is missing on the # system. Usually this means that the iconv library is not installed. @@ -134,43 +164,69 @@ class MissingUnicodeSupport < JSONError; end module_function - # Parse the JSON document _source_ into a Ruby data structure and return it. - # - # _opts_ can have the following - # keys: - # * *max_nesting*: The maximum depth of nesting allowed in the parsed data - # structures. Disable depth checking with :max_nesting => false. It - # defaults to 100. - # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in - # defiance of RFC 7159 to be parsed by the Parser. This option defaults - # to false. - # * *symbolize_names*: If set to true, returns symbols for the names - # (keys) in a JSON object. Otherwise strings are returned. Strings are - # the default. - # * *create_additions*: If set to false, the Parser doesn't create - # additions even if a matching class and create_id was found. This option - # defaults to false. - # * *object_class*: Defaults to Hash - # * *array_class*: Defaults to Array + # :call-seq: + # JSON.parse(source, opts) -> object + # + # Returns the Ruby objects created by parsing the given +source+. + # + # Argument +source+ contains the \String to be parsed. + # + # Argument +opts+, if given, contains a \Hash of options for the parsing. + # See {Parsing Options}[#module-JSON-label-Parsing+Options]. + # + # --- + # + # When +source+ is a \JSON array, returns a Ruby \Array: + # source = '["foo", 1.0, true, false, null]' + # ruby = JSON.parse(source) + # ruby # => ["foo", 1.0, true, false, nil] + # ruby.class # => Array + # + # When +source+ is a \JSON object, returns a Ruby \Hash: + # source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}' + # ruby = JSON.parse(source) + # ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil} + # ruby.class # => Hash + # + # For examples of parsing for all \JSON data types, see + # {Parsing \JSON}[#module-JSON-label-Parsing+JSON]. + # + # Parses nested JSON objects: + # source = <<-EOT + # { + # "name": "Dave", + # "age" :40, + # "hats": [ + # "Cattleman's", + # "Panama", + # "Tophat" + # ] + # } + # EOT + # ruby = JSON.parse(source) + # ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} + # + # --- + # + # Raises an exception if +source+ is not valid JSON: + # # Raises JSON::ParserError (783: unexpected token at ''): + # JSON.parse('') + # def parse(source, opts = {}) Parser.new(source, **(opts||{})).parse end - # Parse the JSON document _source_ into a Ruby data structure and return it. - # The bang version of the parse method defaults to the more dangerous values - # for the _opts_ hash, so be sure only to parse trusted _source_ documents. - # - # _opts_ can have the following keys: - # * *max_nesting*: The maximum depth of nesting allowed in the parsed data - # structures. Enable depth checking with :max_nesting => anInteger. The - # parse! methods defaults to not doing max depth checking: This can be - # dangerous if someone wants to fill up your stack. - # * *allow_nan*: If set to true, allow NaN, Infinity, and -Infinity in - # defiance of RFC 7159 to be parsed by the Parser. This option defaults - # to true. - # * *create_additions*: If set to false, the Parser doesn't create - # additions even if a matching class and create_id was found. This option - # defaults to false. + # :call-seq: + # JSON.parse!(source, opts) -> object + # + # Calls + # parse(source, opts) + # with +source+ and possibly modified +opts+. + # + # Differences from JSON.parse: + # - Option +max_nesting+, if not provided, defaults to +false+, + # which disables checking for nesting depth. + # - Option +allow_nan+, if not provided, defaults to +true+. def parse!(source, opts = {}) opts = { :max_nesting => false, @@ -179,37 +235,69 @@ def parse!(source, opts = {}) Parser.new(source, **(opts||{})).parse end - # Generate a JSON document from the Ruby data structure _obj_ and return - # it. _state_ is * a JSON::State object, - # * or a Hash like object (responding to to_hash), - # * an object convertible into a hash by a to_h method, - # that is used as or to configure a State object. - # - # It defaults to a state object, that creates the shortest possible JSON text - # in one line, checks for circular data structures and doesn't allow NaN, - # Infinity, and -Infinity. - # - # A _state_ hash can have the following keys: - # * *indent*: a string used to indent levels (default: ''), - # * *space*: a string that is put after, a : or , delimiter (default: ''), - # * *space_before*: a string that is put before a : pair delimiter (default: ''), - # * *object_nl*: a string that is put at the end of a JSON object (default: ''), - # * *array_nl*: a string that is put at the end of a JSON array (default: ''), - # * *allow_nan*: true if NaN, Infinity, and -Infinity should be - # generated, otherwise an exception is thrown if these values are - # encountered. This options defaults to false. - # * *max_nesting*: The maximum depth of nesting allowed in the data - # structures from which JSON is to be generated. Disable depth checking - # with :max_nesting => false, it defaults to 100. - # - # See also the fast_generate for the fastest creation method with the least - # amount of sanity checks, and the pretty_generate method for some - # defaults for pretty output. + # :call-seq: + # JSON.load_file(path, opts={}) -> object + # + # Calls: + # parse(File.read(path), opts) + # + # See method #parse. + def load_file(filespec, opts = {}) + parse(File.read(filespec), opts) + end + + # :call-seq: + # JSON.load_file!(path, opts = {}) + # + # Calls: + # JSON.parse!(File.read(path, opts)) + # + # See method #parse! + def load_file!(filespec, opts = {}) + parse!(File.read(filespec), opts) + end + + # :call-seq: + # JSON.generate(obj, opts = nil) -> new_string + # + # Returns a \String containing the generated \JSON data. + # + # See also JSON.fast_generate, JSON.pretty_generate. + # + # Argument +obj+ is the Ruby object to be converted to \JSON. + # + # Argument +opts+, if given, contains a \Hash of options for the generation. + # See {Generating Options}[#module-JSON-label-Generating+Options]. + # + # --- + # + # When +obj+ is an \Array, returns a \String containing a \JSON array: + # obj = ["foo", 1.0, true, false, nil] + # json = JSON.generate(obj) + # json # => '["foo",1.0,true,false,null]' + # + # When +obj+ is a \Hash, returns a \String containing a \JSON object: + # obj = {foo: 0, bar: 's', baz: :bat} + # json = JSON.generate(obj) + # json # => '{"foo":0,"bar":"s","baz":"bat"}' + # + # For examples of generating from other Ruby objects, see + # {Generating \JSON from Other Objects}[#module-JSON-label-Generating+JSON+from+Other+Objects]. + # + # --- + # + # Raises an exception if any formatting option is not a \String. + # + # Raises an exception if +obj+ contains circular references: + # a = []; b = []; a.push(b); b.push(a) + # # Raises JSON::NestingError (nesting of 100 is too deep): + # JSON.generate(a) + # def generate(obj, opts = nil) if State === opts state, opts = opts, nil else - state = SAFE_STATE_PROTOTYPE.dup + state = State.new end if opts if opts.respond_to? :to_hash @@ -231,16 +319,24 @@ def generate(obj, opts = nil) module_function :unparse # :startdoc: - # Generate a JSON document from the Ruby data structure _obj_ and return it. - # This method disables the checks for circles in Ruby objects. + # :call-seq: + # JSON.fast_generate(obj, opts) -> new_string + # + # Arguments +obj+ and +opts+ here are the same as + # arguments +obj+ and +opts+ in JSON.generate. + # + # By default, generates \JSON data without checking + # for circular references in +obj+ (option +max_nesting+ set to +false+, disabled). # - # *WARNING*: Be careful not to pass any Ruby data structures with circles as - # _obj_ argument because this will cause JSON to go into an infinite loop. + # Raises an exception if +obj+ contains circular references: + # a = []; b = []; a.push(b); b.push(a) + # # Raises SystemStackError (stack level too deep): + # JSON.fast_generate(a) def fast_generate(obj, opts = nil) if State === opts state, opts = opts, nil else - state = FAST_STATE_PROTOTYPE.dup + state = JSON.create_fast_state end if opts if opts.respond_to? :to_hash @@ -261,17 +357,41 @@ def fast_generate(obj, opts = nil) module_function :fast_unparse # :startdoc: - # Generate a JSON document from the Ruby data structure _obj_ and return it. - # The returned document is a prettier form of the document returned by - # #unparse. + # :call-seq: + # JSON.pretty_generate(obj, opts = nil) -> new_string + # + # Arguments +obj+ and +opts+ here are the same as + # arguments +obj+ and +opts+ in JSON.generate. + # + # Default options are: + # { + # indent: ' ', # Two spaces + # space: ' ', # One space + # array_nl: "\n", # Newline + # object_nl: "\n" # Newline + # } + # + # Example: + # obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}} + # json = JSON.pretty_generate(obj) + # puts json + # Output: + # { + # "foo": [ + # "bar", + # "baz" + # ], + # "bat": { + # "bam": 0, + # "bad": 1 + # } + # } # - # The _opts_ argument can be used to configure the generator. See the - # generate method for a more detailed explanation. def pretty_generate(obj, opts = nil) if State === opts state, opts = opts, nil else - state = PRETTY_STATE_PROTOTYPE.dup + state = JSON.create_pretty_state end if opts if opts.respond_to? :to_hash @@ -293,10 +413,10 @@ def pretty_generate(obj, opts = nil) # :startdoc: class << self - # The global default options for the JSON.load method: - # :max_nesting: false - # :allow_nan: true - # :allow_blank: true + # Sets or returns default options for the JSON.load method. + # Initially: + # opts = JSON.load_default_options + # opts # => {:max_nesting=>false, :allow_nan=>true, :allow_blank=>true, :create_additions=>true} attr_accessor :load_default_options end self.load_default_options = { @@ -306,20 +426,134 @@ class << self :create_additions => true, } - # Load a ruby data structure from a JSON _source_ and return it. A source can - # either be a string-like object, an IO-like object, or an object responding - # to the read method. If _proc_ was given, it will be called with any nested - # Ruby object as an argument recursively in depth first order. To modify the - # default options pass in the optional _options_ argument as well. + # :call-seq: + # JSON.load(source, proc = nil, options = {}) -> object + # + # Returns the Ruby objects created by parsing the given +source+. + # + # - Argument +source+ must be, or be convertible to, a \String: + # - If +source+ responds to instance method +to_str+, + # source.to_str becomes the source. + # - If +source+ responds to instance method +to_io+, + # source.to_io.read becomes the source. + # - If +source+ responds to instance method +read+, + # source.read becomes the source. + # - If both of the following are true, source becomes the \String 'null': + # - Option +allow_blank+ specifies a truthy value. + # - The source, as defined above, is +nil+ or the empty \String ''. + # - Otherwise, +source+ remains the source. + # - Argument +proc+, if given, must be a \Proc that accepts one argument. + # It will be called recursively with each result (depth-first order). + # See details below. + # BEWARE: This method is meant to serialise data from trusted user input, + # like from your own database server or clients under your control, it could + # be dangerous to allow untrusted users to pass JSON sources into it. + # - Argument +opts+, if given, contains a \Hash of options for the parsing. + # See {Parsing Options}[#module-JSON-label-Parsing+Options]. + # The default options can be changed via method JSON.load_default_options=. + # + # --- + # + # When no +proc+ is given, modifies +source+ as above and returns the result of + # parse(source, opts); see #parse. + # + # Source for following examples: + # source = <<-EOT + # { + # "name": "Dave", + # "age" :40, + # "hats": [ + # "Cattleman's", + # "Panama", + # "Tophat" + # ] + # } + # EOT # - # BEWARE: This method is meant to serialise data from trusted user input, - # like from your own database server or clients under your control, it could - # be dangerous to allow untrusted users to pass JSON sources into it. The - # default options for the parser can be changed via the load_default_options - # method. + # Load a \String: + # ruby = JSON.load(source) + # ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} + # + # Load an \IO object: + # require 'stringio' + # object = JSON.load(StringIO.new(source)) + # object # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} + # + # Load a \File object: + # path = 't.json' + # File.write(path, source) + # File.open(path) do |file| + # JSON.load(file) + # end # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} + # + # --- + # + # When +proc+ is given: + # - Modifies +source+ as above. + # - Gets the +result+ from calling parse(source, opts). + # - Recursively calls proc(result). + # - Returns the final result. + # + # Example: + # require 'json' + # + # # Some classes for the example. + # class Base + # def initialize(attributes) + # @attributes = attributes + # end + # end + # class User < Base; end + # class Account < Base; end + # class Admin < Base; end + # # The JSON source. + # json = <<-EOF + # { + # "users": [ + # {"type": "User", "username": "jane", "email": "jane@example.com"}, + # {"type": "User", "username": "john", "email": "john@example.com"} + # ], + # "accounts": [ + # {"account": {"type": "Account", "paid": true, "account_id": "1234"}}, + # {"account": {"type": "Account", "paid": false, "account_id": "1235"}} + # ], + # "admins": {"type": "Admin", "password": "0wn3d"} + # } + # EOF + # # Deserializer method. + # def deserialize_obj(obj, safe_types = %w(User Account Admin)) + # type = obj.is_a?(Hash) && obj["type"] + # safe_types.include?(type) ? Object.const_get(type).new(obj) : obj + # end + # # Call to JSON.load + # ruby = JSON.load(json, proc {|obj| + # case obj + # when Hash + # obj.each {|k, v| obj[k] = deserialize_obj v } + # when Array + # obj.map! {|v| deserialize_obj v } + # end + # }) + # pp ruby + # Output: + # {"users"=> + # [#"User", "username"=>"jane", "email"=>"jane@example.com"}>, + # #"User", "username"=>"john", "email"=>"john@example.com"}>], + # "accounts"=> + # [{"account"=> + # #"Account", "paid"=>true, "account_id"=>"1234"}>}, + # {"account"=> + # #"Account", "paid"=>false, "account_id"=>"1235"}>}], + # "admins"=> + # #"Admin", "password"=>"0wn3d"}>} # - # This method is part of the implementation of the load/dump interface of - # Marshal and YAML. def load(source, proc = nil, options = {}) opts = load_default_options.merge options if source.respond_to? :to_str @@ -338,7 +572,7 @@ def load(source, proc = nil, options = {}) end # Recursively calls passed _Proc_ if the parsed data structure is an _Array_ or _Hash_ - def recurse_proc(result, &proc) + def recurse_proc(result, &proc) # :nodoc: case result when Array result.each { |x| recurse_proc x, &proc } @@ -355,32 +589,45 @@ def recurse_proc(result, &proc) module_function :restore class << self - # The global default options for the JSON.dump method: - # :max_nesting: false - # :allow_nan: true - # :allow_blank: true + # Sets or returns the default options for the JSON.dump method. + # Initially: + # opts = JSON.dump_default_options + # opts # => {:max_nesting=>false, :allow_nan=>true, :escape_slash=>false} attr_accessor :dump_default_options end self.dump_default_options = { :max_nesting => false, :allow_nan => true, + :escape_slash => false, } - # Dumps _obj_ as a JSON string, i.e. calls generate on the object and returns - # the result. + # :call-seq: + # JSON.dump(obj, io = nil, limit = nil) + # + # Dumps +obj+ as a \JSON string, i.e. calls generate on the object and returns the result. + # + # The default options can be changed via method JSON.dump_default_options. # - # If anIO (an IO-like object or an object that responds to the write method) - # was given, the resulting JSON is written to it. + # - Argument +io+, if given, should respond to method +write+; + # the \JSON \String is written to +io+, and +io+ is returned. + # If +io+ is not given, the \JSON \String is returned. + # - Argument +limit+, if given, is passed to JSON.generate as option +max_nesting+. # - # If the number of nested arrays or objects exceeds _limit_, an ArgumentError - # exception is raised. This argument is similar (but not exactly the - # same!) to the _limit_ argument in Marshal.dump. + # --- # - # The default options for the generator can be changed via the - # dump_default_options method. + # When argument +io+ is not given, returns the \JSON \String generated from +obj+: + # obj = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad} + # json = JSON.dump(obj) + # json # => "{\"foo\":[0,1],\"bar\":{\"baz\":2,\"bat\":3},\"bam\":\"bad\"}" # - # This method is part of the implementation of the load/dump interface of - # Marshal and YAML. + # When argument +io+ is given, writes the \JSON \String to +io+ and returns +io+: + # path = 't.json' + # File.open(path, 'w') do |file| + # JSON.dump(obj, file) + # end # => # + # puts File.read(path) + # Output: + # {"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"} def dump(obj, anIO = nil, limit = nil) if anIO and limit.nil? anIO = anIO.to_io if anIO.respond_to?(:to_io) @@ -402,7 +649,7 @@ def dump(obj, anIO = nil, limit = nil) raise ArgumentError, "exceed depth limit" end - # Encodes string using Ruby's _String.encode_ + # Encodes string using String.encode. def self.iconv(to, from, string) string.encode(to, from) end diff --git a/ruby/ext/json/lib/json/version.rb b/ruby/ext/json/lib/json/version.rb index 9d781df87..35e8dd325 100644 --- a/ruby/ext/json/lib/json/version.rb +++ b/ruby/ext/json/lib/json/version.rb @@ -1,7 +1,7 @@ # frozen_string_literal: false module JSON # JSON version - VERSION = '2.3.0' + VERSION = '2.6.1' VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc: VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc: VERSION_MINOR = VERSION_ARRAY[1] # :nodoc: diff --git a/ruby/ext/json/parser/depend b/ruby/ext/json/parser/depend index d0c9c2d2a..df261fdfb 100644 --- a/ruby/ext/json/parser/depend +++ b/ruby/ext/json/parser/depend @@ -7,9 +7,165 @@ parser.o: $(arch_hdrdir)/ruby/config.h parser.o: $(hdrdir)/ruby.h parser.o: $(hdrdir)/ruby/assert.h parser.o: $(hdrdir)/ruby/backward.h +parser.o: $(hdrdir)/ruby/backward/2/assume.h +parser.o: $(hdrdir)/ruby/backward/2/attributes.h +parser.o: $(hdrdir)/ruby/backward/2/bool.h +parser.o: $(hdrdir)/ruby/backward/2/inttypes.h +parser.o: $(hdrdir)/ruby/backward/2/limits.h +parser.o: $(hdrdir)/ruby/backward/2/long_long.h +parser.o: $(hdrdir)/ruby/backward/2/stdalign.h +parser.o: $(hdrdir)/ruby/backward/2/stdarg.h parser.o: $(hdrdir)/ruby/defines.h parser.o: $(hdrdir)/ruby/encoding.h parser.o: $(hdrdir)/ruby/intern.h +parser.o: $(hdrdir)/ruby/internal/anyargs.h +parser.o: $(hdrdir)/ruby/internal/arithmetic.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/char.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/double.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/int.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/long.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/short.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +parser.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +parser.o: $(hdrdir)/ruby/internal/assume.h +parser.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +parser.o: $(hdrdir)/ruby/internal/attr/artificial.h +parser.o: $(hdrdir)/ruby/internal/attr/cold.h +parser.o: $(hdrdir)/ruby/internal/attr/const.h +parser.o: $(hdrdir)/ruby/internal/attr/constexpr.h +parser.o: $(hdrdir)/ruby/internal/attr/deprecated.h +parser.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +parser.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +parser.o: $(hdrdir)/ruby/internal/attr/error.h +parser.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +parser.o: $(hdrdir)/ruby/internal/attr/forceinline.h +parser.o: $(hdrdir)/ruby/internal/attr/format.h +parser.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +parser.o: $(hdrdir)/ruby/internal/attr/noalias.h +parser.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +parser.o: $(hdrdir)/ruby/internal/attr/noexcept.h +parser.o: $(hdrdir)/ruby/internal/attr/noinline.h +parser.o: $(hdrdir)/ruby/internal/attr/nonnull.h +parser.o: $(hdrdir)/ruby/internal/attr/noreturn.h +parser.o: $(hdrdir)/ruby/internal/attr/pure.h +parser.o: $(hdrdir)/ruby/internal/attr/restrict.h +parser.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +parser.o: $(hdrdir)/ruby/internal/attr/warning.h +parser.o: $(hdrdir)/ruby/internal/attr/weakref.h +parser.o: $(hdrdir)/ruby/internal/cast.h +parser.o: $(hdrdir)/ruby/internal/compiler_is.h +parser.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +parser.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +parser.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +parser.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +parser.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +parser.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +parser.o: $(hdrdir)/ruby/internal/compiler_since.h +parser.o: $(hdrdir)/ruby/internal/config.h +parser.o: $(hdrdir)/ruby/internal/constant_p.h +parser.o: $(hdrdir)/ruby/internal/core.h +parser.o: $(hdrdir)/ruby/internal/core/rarray.h +parser.o: $(hdrdir)/ruby/internal/core/rbasic.h +parser.o: $(hdrdir)/ruby/internal/core/rbignum.h +parser.o: $(hdrdir)/ruby/internal/core/rclass.h +parser.o: $(hdrdir)/ruby/internal/core/rdata.h +parser.o: $(hdrdir)/ruby/internal/core/rfile.h +parser.o: $(hdrdir)/ruby/internal/core/rhash.h +parser.o: $(hdrdir)/ruby/internal/core/robject.h +parser.o: $(hdrdir)/ruby/internal/core/rregexp.h +parser.o: $(hdrdir)/ruby/internal/core/rstring.h +parser.o: $(hdrdir)/ruby/internal/core/rstruct.h +parser.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +parser.o: $(hdrdir)/ruby/internal/ctype.h +parser.o: $(hdrdir)/ruby/internal/dllexport.h +parser.o: $(hdrdir)/ruby/internal/dosish.h +parser.o: $(hdrdir)/ruby/internal/encoding/coderange.h +parser.o: $(hdrdir)/ruby/internal/encoding/ctype.h +parser.o: $(hdrdir)/ruby/internal/encoding/encoding.h +parser.o: $(hdrdir)/ruby/internal/encoding/pathname.h +parser.o: $(hdrdir)/ruby/internal/encoding/re.h +parser.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +parser.o: $(hdrdir)/ruby/internal/encoding/string.h +parser.o: $(hdrdir)/ruby/internal/encoding/symbol.h +parser.o: $(hdrdir)/ruby/internal/encoding/transcode.h +parser.o: $(hdrdir)/ruby/internal/error.h +parser.o: $(hdrdir)/ruby/internal/eval.h +parser.o: $(hdrdir)/ruby/internal/event.h +parser.o: $(hdrdir)/ruby/internal/fl_type.h +parser.o: $(hdrdir)/ruby/internal/gc.h +parser.o: $(hdrdir)/ruby/internal/glob.h +parser.o: $(hdrdir)/ruby/internal/globals.h +parser.o: $(hdrdir)/ruby/internal/has/attribute.h +parser.o: $(hdrdir)/ruby/internal/has/builtin.h +parser.o: $(hdrdir)/ruby/internal/has/c_attribute.h +parser.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +parser.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +parser.o: $(hdrdir)/ruby/internal/has/extension.h +parser.o: $(hdrdir)/ruby/internal/has/feature.h +parser.o: $(hdrdir)/ruby/internal/has/warning.h +parser.o: $(hdrdir)/ruby/internal/intern/array.h +parser.o: $(hdrdir)/ruby/internal/intern/bignum.h +parser.o: $(hdrdir)/ruby/internal/intern/class.h +parser.o: $(hdrdir)/ruby/internal/intern/compar.h +parser.o: $(hdrdir)/ruby/internal/intern/complex.h +parser.o: $(hdrdir)/ruby/internal/intern/cont.h +parser.o: $(hdrdir)/ruby/internal/intern/dir.h +parser.o: $(hdrdir)/ruby/internal/intern/enum.h +parser.o: $(hdrdir)/ruby/internal/intern/enumerator.h +parser.o: $(hdrdir)/ruby/internal/intern/error.h +parser.o: $(hdrdir)/ruby/internal/intern/eval.h +parser.o: $(hdrdir)/ruby/internal/intern/file.h +parser.o: $(hdrdir)/ruby/internal/intern/gc.h +parser.o: $(hdrdir)/ruby/internal/intern/hash.h +parser.o: $(hdrdir)/ruby/internal/intern/io.h +parser.o: $(hdrdir)/ruby/internal/intern/load.h +parser.o: $(hdrdir)/ruby/internal/intern/marshal.h +parser.o: $(hdrdir)/ruby/internal/intern/numeric.h +parser.o: $(hdrdir)/ruby/internal/intern/object.h +parser.o: $(hdrdir)/ruby/internal/intern/parse.h +parser.o: $(hdrdir)/ruby/internal/intern/proc.h +parser.o: $(hdrdir)/ruby/internal/intern/process.h +parser.o: $(hdrdir)/ruby/internal/intern/random.h +parser.o: $(hdrdir)/ruby/internal/intern/range.h +parser.o: $(hdrdir)/ruby/internal/intern/rational.h +parser.o: $(hdrdir)/ruby/internal/intern/re.h +parser.o: $(hdrdir)/ruby/internal/intern/ruby.h +parser.o: $(hdrdir)/ruby/internal/intern/select.h +parser.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +parser.o: $(hdrdir)/ruby/internal/intern/signal.h +parser.o: $(hdrdir)/ruby/internal/intern/sprintf.h +parser.o: $(hdrdir)/ruby/internal/intern/string.h +parser.o: $(hdrdir)/ruby/internal/intern/struct.h +parser.o: $(hdrdir)/ruby/internal/intern/thread.h +parser.o: $(hdrdir)/ruby/internal/intern/time.h +parser.o: $(hdrdir)/ruby/internal/intern/variable.h +parser.o: $(hdrdir)/ruby/internal/intern/vm.h +parser.o: $(hdrdir)/ruby/internal/interpreter.h +parser.o: $(hdrdir)/ruby/internal/iterator.h +parser.o: $(hdrdir)/ruby/internal/memory.h +parser.o: $(hdrdir)/ruby/internal/method.h +parser.o: $(hdrdir)/ruby/internal/module.h +parser.o: $(hdrdir)/ruby/internal/newobj.h +parser.o: $(hdrdir)/ruby/internal/rgengc.h +parser.o: $(hdrdir)/ruby/internal/scan_args.h +parser.o: $(hdrdir)/ruby/internal/special_consts.h +parser.o: $(hdrdir)/ruby/internal/static_assert.h +parser.o: $(hdrdir)/ruby/internal/stdalign.h +parser.o: $(hdrdir)/ruby/internal/stdbool.h +parser.o: $(hdrdir)/ruby/internal/symbol.h +parser.o: $(hdrdir)/ruby/internal/value.h +parser.o: $(hdrdir)/ruby/internal/value_type.h +parser.o: $(hdrdir)/ruby/internal/variable.h +parser.o: $(hdrdir)/ruby/internal/warning_push.h +parser.o: $(hdrdir)/ruby/internal/xmalloc.h parser.o: $(hdrdir)/ruby/missing.h parser.o: $(hdrdir)/ruby/onigmo.h parser.o: $(hdrdir)/ruby/oniguruma.h diff --git a/ruby/ext/json/parser/extconf.rb b/ruby/ext/json/parser/extconf.rb index f7360d46b..feb586e1b 100644 --- a/ruby/ext/json/parser/extconf.rb +++ b/ruby/ext/json/parser/extconf.rb @@ -2,5 +2,31 @@ require 'mkmf' have_func("rb_enc_raise", "ruby.h") +have_func("rb_enc_interned_str", "ruby.h") + +# checking if String#-@ (str_uminus) dedupes... ' +begin + a = -(%w(t e s t).join) + b = -(%w(t e s t).join) + if a.equal?(b) + $CFLAGS << ' -DSTR_UMINUS_DEDUPE=1 ' + else + $CFLAGS << ' -DSTR_UMINUS_DEDUPE=0 ' + end +rescue NoMethodError + $CFLAGS << ' -DSTR_UMINUS_DEDUPE=0 ' +end + +# checking if String#-@ (str_uminus) directly interns frozen strings... ' +begin + s = rand.to_s.freeze + if (-s).equal?(s) && (-s.dup).equal?(s) + $CFLAGS << ' -DSTR_UMINUS_DEDUPE_FROZEN=1 ' + else + $CFLAGS << ' -DSTR_UMINUS_DEDUPE_FROZEN=0 ' + end +rescue NoMethodError + $CFLAGS << ' -DSTR_UMINUS_DEDUPE_FROZEN=0 ' +end create_makefile 'json/ext/parser' diff --git a/ruby/ext/json/parser/parser.c b/ruby/ext/json/parser/parser.c index 0f98cf982..b1dc8810c 100644 --- a/ruby/ext/json/parser/parser.c +++ b/ruby/ext/json/parser/parser.c @@ -9,14 +9,14 @@ static void enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...) { - va_list args; - VALUE mesg; + va_list args; + VALUE mesg; - va_start(args, fmt); - mesg = rb_enc_vsprintf(enc, fmt, args); - va_end(args); + va_start(args, fmt); + mesg = rb_enc_vsprintf(enc, fmt, args); + va_end(args); - rb_exc_raise(rb_exc_new3(exc, mesg)); + rb_exc_raise(rb_exc_new3(exc, mesg)); } # define rb_enc_raise enc_raise # endif @@ -28,2109 +28,3311 @@ enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...) /* unicode */ static const signed char digit_values[256] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, - -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, + -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1 }; static UTF32 unescape_unicode(const unsigned char *p) { - signed char b; - UTF32 result = 0; - b = digit_values[p[0]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; - result = (result << 4) | (unsigned char)b; - b = digit_values[p[1]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; - result = (result << 4) | (unsigned char)b; - b = digit_values[p[2]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; - result = (result << 4) | (unsigned char)b; - b = digit_values[p[3]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; - result = (result << 4) | (unsigned char)b; - return result; + signed char b; + UTF32 result = 0; + b = digit_values[p[0]]; + if (b < 0) return UNI_REPLACEMENT_CHAR; + result = (result << 4) | (unsigned char)b; + b = digit_values[p[1]]; + if (b < 0) return UNI_REPLACEMENT_CHAR; + result = (result << 4) | (unsigned char)b; + b = digit_values[p[2]]; + if (b < 0) return UNI_REPLACEMENT_CHAR; + result = (result << 4) | (unsigned char)b; + b = digit_values[p[3]]; + if (b < 0) return UNI_REPLACEMENT_CHAR; + result = (result << 4) | (unsigned char)b; + return result; } static int convert_UTF32_to_UTF8(char *buf, UTF32 ch) { - int len = 1; - if (ch <= 0x7F) { - buf[0] = (char) ch; - } else if (ch <= 0x07FF) { - buf[0] = (char) ((ch >> 6) | 0xC0); - buf[1] = (char) ((ch & 0x3F) | 0x80); - len++; - } else if (ch <= 0xFFFF) { - buf[0] = (char) ((ch >> 12) | 0xE0); - buf[1] = (char) (((ch >> 6) & 0x3F) | 0x80); - buf[2] = (char) ((ch & 0x3F) | 0x80); - len += 2; - } else if (ch <= 0x1fffff) { - buf[0] =(char) ((ch >> 18) | 0xF0); - buf[1] =(char) (((ch >> 12) & 0x3F) | 0x80); - buf[2] =(char) (((ch >> 6) & 0x3F) | 0x80); - buf[3] =(char) ((ch & 0x3F) | 0x80); - len += 3; - } else { - buf[0] = '?'; - } - return len; + int len = 1; + if (ch <= 0x7F) { + buf[0] = (char) ch; + } else if (ch <= 0x07FF) { + buf[0] = (char) ((ch >> 6) | 0xC0); + buf[1] = (char) ((ch & 0x3F) | 0x80); + len++; + } else if (ch <= 0xFFFF) { + buf[0] = (char) ((ch >> 12) | 0xE0); + buf[1] = (char) (((ch >> 6) & 0x3F) | 0x80); + buf[2] = (char) ((ch & 0x3F) | 0x80); + len += 2; + } else if (ch <= 0x1fffff) { + buf[0] =(char) ((ch >> 18) | 0xF0); + buf[1] =(char) (((ch >> 12) & 0x3F) | 0x80); + buf[2] =(char) (((ch >> 6) & 0x3F) | 0x80); + buf[3] =(char) ((ch & 0x3F) | 0x80); + len += 3; + } else { + buf[0] = '?'; + } + return len; } static VALUE mJSON, mExt, cParser, eParserError, eNestingError; static VALUE CNaN, CInfinity, CMinusInfinity; -static VALUE cBigDecimal = Qundef; static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions, - i_chr, i_max_nesting, i_allow_nan, i_symbolize_names, - i_object_class, i_array_class, i_decimal_class, i_key_p, - i_deep_const_get, i_match, i_match_string, i_aset, i_aref, - i_leftshift, i_new, i_BigDecimal; +i_chr, i_max_nesting, i_allow_nan, i_symbolize_names, +i_object_class, i_array_class, i_decimal_class, i_key_p, +i_deep_const_get, i_match, i_match_string, i_aset, i_aref, +i_leftshift, i_new, i_try_convert, i_freeze, i_uminus; -#line 126 "parser.rl" +#line 125 "parser.rl" -#line 108 "parser.c" enum {JSON_object_start = 1}; enum {JSON_object_first_final = 27}; enum {JSON_object_error = 0}; enum {JSON_object_en_main = 1}; +static const char MAYBE_UNUSED(_JSON_object_nfa_targs)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_object_nfa_offsets)[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_object_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_object_nfa_pop_trans)[] = { + 0, 0 +}; + #line 167 "parser.rl" static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) { - int cs = EVIL; - VALUE last_name = Qnil; - VALUE object_class = json->object_class; + int cs = EVIL; + VALUE last_name = Qnil; + VALUE object_class = json->object_class; - if (json->max_nesting && current_nesting > json->max_nesting) { - rb_raise(eNestingError, "nesting of %d is too deep", current_nesting); - } + if (json->max_nesting && current_nesting > json->max_nesting) { + rb_raise(eNestingError, "nesting of %d is too deep", current_nesting); + } - *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class); + *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class); -#line 132 "parser.c" { - cs = JSON_object_start; + cs = (int)JSON_object_start; } -#line 182 "parser.rl" + #line 182 "parser.rl" + -#line 139 "parser.c" { - if ( p == pe ) + if ( p == pe ) goto _test_eof; - switch ( cs ) - { -case 1: - if ( (*p) == 123 ) - goto st2; - goto st0; -st0: -cs = 0; - goto _out; -st2: - if ( ++p == pe ) + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + case 8: + goto st_case_8; + case 9: + goto st_case_9; + case 10: + goto st_case_10; + case 11: + goto st_case_11; + case 12: + goto st_case_12; + case 13: + goto st_case_13; + case 14: + goto st_case_14; + case 15: + goto st_case_15; + case 16: + goto st_case_16; + case 17: + goto st_case_17; + case 18: + goto st_case_18; + case 27: + goto st_case_27; + case 19: + goto st_case_19; + case 20: + goto st_case_20; + case 21: + goto st_case_21; + case 22: + goto st_case_22; + case 23: + goto st_case_23; + case 24: + goto st_case_24; + case 25: + goto st_case_25; + case 26: + goto st_case_26; + } + goto st_out; + st_case_1: + if ( ( (*( p))) == 123 ) { + goto st2; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + st2: + p+= 1; + if ( p == pe ) goto _test_eof2; -case 2: - switch( (*p) ) { - case 13: goto st2; - case 32: goto st2; - case 34: goto tr2; - case 47: goto st23; - case 125: goto tr4; - } - if ( 9 <= (*p) && (*p) <= 10 ) - goto st2; - goto st0; -tr2: -#line 149 "parser.rl" - { - char *np; - json->parsing_name = 1; - np = JSON_parse_string(json, p, pe, &last_name); - json->parsing_name = 0; - if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;} - } - goto st3; -st3: - if ( ++p == pe ) - goto _test_eof3; -case 3: -#line 180 "parser.c" - switch( (*p) ) { - case 13: goto st3; - case 32: goto st3; - case 47: goto st4; - case 58: goto st8; - } - if ( 9 <= (*p) && (*p) <= 10 ) + st_case_2: + switch( ( (*( p))) ) { + case 13: { + goto st2; + } + case 32: { + goto st2; + } + case 34: { + goto ctr2; + } + case 47: { + goto st23; + } + case 125: { + goto ctr4; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st2; + } + { + goto st0; + } + ctr2: + { + #line 149 "parser.rl" + + char *np; + json->parsing_name = 1; + np = JSON_parse_string(json, p, pe, &last_name); + json->parsing_name = 0; + if (np == NULL) { {p = p - 1; } {p+= 1; cs = 3; goto _out;} } else {p = (( np))-1;} + + } + goto st3; - goto st0; -st4: - if ( ++p == pe ) + st3: + p+= 1; + if ( p == pe ) + goto _test_eof3; + st_case_3: + switch( ( (*( p))) ) { + case 13: { + goto st3; + } + case 32: { + goto st3; + } + case 47: { + goto st4; + } + case 58: { + goto st8; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st3; + } + { + goto st0; + } + st4: + p+= 1; + if ( p == pe ) goto _test_eof4; -case 4: - switch( (*p) ) { - case 42: goto st5; - case 47: goto st7; - } - goto st0; -st5: - if ( ++p == pe ) + st_case_4: + switch( ( (*( p))) ) { + case 42: { + goto st5; + } + case 47: { + goto st7; + } + } + { + goto st0; + } + st5: + p+= 1; + if ( p == pe ) goto _test_eof5; -case 5: - if ( (*p) == 42 ) - goto st6; - goto st5; -st6: - if ( ++p == pe ) + st_case_5: + if ( ( (*( p))) == 42 ) { + goto st6; + } + { + goto st5; + } + st6: + p+= 1; + if ( p == pe ) goto _test_eof6; -case 6: - switch( (*p) ) { - case 42: goto st6; - case 47: goto st3; - } - goto st5; -st7: - if ( ++p == pe ) + st_case_6: + switch( ( (*( p))) ) { + case 42: { + goto st6; + } + case 47: { + goto st3; + } + } + { + goto st5; + } + st7: + p+= 1; + if ( p == pe ) goto _test_eof7; -case 7: - if ( (*p) == 10 ) - goto st3; - goto st7; -st8: - if ( ++p == pe ) + st_case_7: + if ( ( (*( p))) == 10 ) { + goto st3; + } + { + goto st7; + } + st8: + p+= 1; + if ( p == pe ) goto _test_eof8; -case 8: - switch( (*p) ) { - case 13: goto st8; - case 32: goto st8; - case 34: goto tr11; - case 45: goto tr11; - case 47: goto st19; - case 73: goto tr11; - case 78: goto tr11; - case 91: goto tr11; - case 102: goto tr11; - case 110: goto tr11; - case 116: goto tr11; - case 123: goto tr11; - } - if ( (*p) > 10 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr11; - } else if ( (*p) >= 9 ) - goto st8; - goto st0; -tr11: -#line 134 "parser.rl" - { - VALUE v = Qnil; - char *np = JSON_parse_value(json, p, pe, &v, current_nesting); - if (np == NULL) { - p--; {p++; cs = 9; goto _out;} - } else { - if (NIL_P(json->object_class)) { - rb_hash_aset(*result, last_name, v); - } else { - rb_funcall(*result, i_aset, 2, last_name, v); - } - {p = (( np))-1;} - } - } - goto st9; -st9: - if ( ++p == pe ) - goto _test_eof9; -case 9: -#line 267 "parser.c" - switch( (*p) ) { - case 13: goto st9; - case 32: goto st9; - case 44: goto st10; - case 47: goto st15; - case 125: goto tr4; - } - if ( 9 <= (*p) && (*p) <= 10 ) + st_case_8: + switch( ( (*( p))) ) { + case 13: { + goto st8; + } + case 32: { + goto st8; + } + case 34: { + goto ctr11; + } + case 45: { + goto ctr11; + } + case 47: { + goto st19; + } + case 73: { + goto ctr11; + } + case 78: { + goto ctr11; + } + case 91: { + goto ctr11; + } + case 102: { + goto ctr11; + } + case 110: { + goto ctr11; + } + case 116: { + goto ctr11; + } + case 123: { + goto ctr11; + } + } + if ( ( (*( p))) > 10 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto ctr11; + } + } else if ( ( (*( p))) >= 9 ) { + goto st8; + } + { + goto st0; + } + ctr11: + { + #line 133 "parser.rl" + + VALUE v = Qnil; + char *np = JSON_parse_value(json, p, pe, &v, current_nesting); + if (np == NULL) { + {p = p - 1; } {p+= 1; cs = 9; goto _out;} + } else { + if (NIL_P(json->object_class)) { + OBJ_FREEZE(last_name); + rb_hash_aset(*result, last_name, v); + } else { + rb_funcall(*result, i_aset, 2, last_name, v); + } + {p = (( np))-1;} + + } + } + goto st9; - goto st0; -st10: - if ( ++p == pe ) + st9: + p+= 1; + if ( p == pe ) + goto _test_eof9; + st_case_9: + switch( ( (*( p))) ) { + case 13: { + goto st9; + } + case 32: { + goto st9; + } + case 44: { + goto st10; + } + case 47: { + goto st15; + } + case 125: { + goto ctr4; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st9; + } + { + goto st0; + } + st10: + p+= 1; + if ( p == pe ) goto _test_eof10; -case 10: - switch( (*p) ) { - case 13: goto st10; - case 32: goto st10; - case 34: goto tr2; - case 47: goto st11; - } - if ( 9 <= (*p) && (*p) <= 10 ) - goto st10; - goto st0; -st11: - if ( ++p == pe ) + st_case_10: + switch( ( (*( p))) ) { + case 13: { + goto st10; + } + case 32: { + goto st10; + } + case 34: { + goto ctr2; + } + case 47: { + goto st11; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st10; + } + { + goto st0; + } + st11: + p+= 1; + if ( p == pe ) goto _test_eof11; -case 11: - switch( (*p) ) { - case 42: goto st12; - case 47: goto st14; - } - goto st0; -st12: - if ( ++p == pe ) + st_case_11: + switch( ( (*( p))) ) { + case 42: { + goto st12; + } + case 47: { + goto st14; + } + } + { + goto st0; + } + st12: + p+= 1; + if ( p == pe ) goto _test_eof12; -case 12: - if ( (*p) == 42 ) - goto st13; - goto st12; -st13: - if ( ++p == pe ) + st_case_12: + if ( ( (*( p))) == 42 ) { + goto st13; + } + { + goto st12; + } + st13: + p+= 1; + if ( p == pe ) goto _test_eof13; -case 13: - switch( (*p) ) { - case 42: goto st13; - case 47: goto st10; - } - goto st12; -st14: - if ( ++p == pe ) + st_case_13: + switch( ( (*( p))) ) { + case 42: { + goto st13; + } + case 47: { + goto st10; + } + } + { + goto st12; + } + st14: + p+= 1; + if ( p == pe ) goto _test_eof14; -case 14: - if ( (*p) == 10 ) - goto st10; - goto st14; -st15: - if ( ++p == pe ) + st_case_14: + if ( ( (*( p))) == 10 ) { + goto st10; + } + { + goto st14; + } + st15: + p+= 1; + if ( p == pe ) goto _test_eof15; -case 15: - switch( (*p) ) { - case 42: goto st16; - case 47: goto st18; - } - goto st0; -st16: - if ( ++p == pe ) + st_case_15: + switch( ( (*( p))) ) { + case 42: { + goto st16; + } + case 47: { + goto st18; + } + } + { + goto st0; + } + st16: + p+= 1; + if ( p == pe ) goto _test_eof16; -case 16: - if ( (*p) == 42 ) - goto st17; - goto st16; -st17: - if ( ++p == pe ) + st_case_16: + if ( ( (*( p))) == 42 ) { + goto st17; + } + { + goto st16; + } + st17: + p+= 1; + if ( p == pe ) goto _test_eof17; -case 17: - switch( (*p) ) { - case 42: goto st17; - case 47: goto st9; - } - goto st16; -st18: - if ( ++p == pe ) + st_case_17: + switch( ( (*( p))) ) { + case 42: { + goto st17; + } + case 47: { + goto st9; + } + } + { + goto st16; + } + st18: + p+= 1; + if ( p == pe ) goto _test_eof18; -case 18: - if ( (*p) == 10 ) - goto st9; - goto st18; -tr4: -#line 157 "parser.rl" - { p--; {p++; cs = 27; goto _out;} } - goto st27; -st27: - if ( ++p == pe ) + st_case_18: + if ( ( (*( p))) == 10 ) { + goto st9; + } + { + goto st18; + } + ctr4: + { + #line 157 "parser.rl" + {p = p - 1; } {p+= 1; cs = 27; goto _out;} } + + goto st27; + st27: + p+= 1; + if ( p == pe ) goto _test_eof27; -case 27: -#line 363 "parser.c" - goto st0; -st19: - if ( ++p == pe ) + st_case_27: + { + goto st0; + } + st19: + p+= 1; + if ( p == pe ) goto _test_eof19; -case 19: - switch( (*p) ) { - case 42: goto st20; - case 47: goto st22; - } - goto st0; -st20: - if ( ++p == pe ) + st_case_19: + switch( ( (*( p))) ) { + case 42: { + goto st20; + } + case 47: { + goto st22; + } + } + { + goto st0; + } + st20: + p+= 1; + if ( p == pe ) goto _test_eof20; -case 20: - if ( (*p) == 42 ) - goto st21; - goto st20; -st21: - if ( ++p == pe ) + st_case_20: + if ( ( (*( p))) == 42 ) { + goto st21; + } + { + goto st20; + } + st21: + p+= 1; + if ( p == pe ) goto _test_eof21; -case 21: - switch( (*p) ) { - case 42: goto st21; - case 47: goto st8; - } - goto st20; -st22: - if ( ++p == pe ) + st_case_21: + switch( ( (*( p))) ) { + case 42: { + goto st21; + } + case 47: { + goto st8; + } + } + { + goto st20; + } + st22: + p+= 1; + if ( p == pe ) goto _test_eof22; -case 22: - if ( (*p) == 10 ) - goto st8; - goto st22; -st23: - if ( ++p == pe ) + st_case_22: + if ( ( (*( p))) == 10 ) { + goto st8; + } + { + goto st22; + } + st23: + p+= 1; + if ( p == pe ) goto _test_eof23; -case 23: - switch( (*p) ) { - case 42: goto st24; - case 47: goto st26; - } - goto st0; -st24: - if ( ++p == pe ) + st_case_23: + switch( ( (*( p))) ) { + case 42: { + goto st24; + } + case 47: { + goto st26; + } + } + { + goto st0; + } + st24: + p+= 1; + if ( p == pe ) goto _test_eof24; -case 24: - if ( (*p) == 42 ) - goto st25; - goto st24; -st25: - if ( ++p == pe ) + st_case_24: + if ( ( (*( p))) == 42 ) { + goto st25; + } + { + goto st24; + } + st25: + p+= 1; + if ( p == pe ) goto _test_eof25; -case 25: - switch( (*p) ) { - case 42: goto st25; - case 47: goto st2; - } - goto st24; -st26: - if ( ++p == pe ) + st_case_25: + switch( ( (*( p))) ) { + case 42: { + goto st25; + } + case 47: { + goto st2; + } + } + { + goto st24; + } + st26: + p+= 1; + if ( p == pe ) goto _test_eof26; -case 26: - if ( (*p) == 10 ) - goto st2; - goto st26; - } - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof9: cs = 9; goto _test_eof; - _test_eof10: cs = 10; goto _test_eof; - _test_eof11: cs = 11; goto _test_eof; - _test_eof12: cs = 12; goto _test_eof; - _test_eof13: cs = 13; goto _test_eof; - _test_eof14: cs = 14; goto _test_eof; - _test_eof15: cs = 15; goto _test_eof; - _test_eof16: cs = 16; goto _test_eof; - _test_eof17: cs = 17; goto _test_eof; - _test_eof18: cs = 18; goto _test_eof; - _test_eof27: cs = 27; goto _test_eof; - _test_eof19: cs = 19; goto _test_eof; - _test_eof20: cs = 20; goto _test_eof; - _test_eof21: cs = 21; goto _test_eof; - _test_eof22: cs = 22; goto _test_eof; - _test_eof23: cs = 23; goto _test_eof; - _test_eof24: cs = 24; goto _test_eof; - _test_eof25: cs = 25; goto _test_eof; - _test_eof26: cs = 26; goto _test_eof; - - _test_eof: {} - _out: {} + st_case_26: + if ( ( (*( p))) == 10 ) { + goto st2; + } + { + goto st26; + } + st_out: + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof11: cs = 11; goto _test_eof; + _test_eof12: cs = 12; goto _test_eof; + _test_eof13: cs = 13; goto _test_eof; + _test_eof14: cs = 14; goto _test_eof; + _test_eof15: cs = 15; goto _test_eof; + _test_eof16: cs = 16; goto _test_eof; + _test_eof17: cs = 17; goto _test_eof; + _test_eof18: cs = 18; goto _test_eof; + _test_eof27: cs = 27; goto _test_eof; + _test_eof19: cs = 19; goto _test_eof; + _test_eof20: cs = 20; goto _test_eof; + _test_eof21: cs = 21; goto _test_eof; + _test_eof22: cs = 22; goto _test_eof; + _test_eof23: cs = 23; goto _test_eof; + _test_eof24: cs = 24; goto _test_eof; + _test_eof25: cs = 25; goto _test_eof; + _test_eof26: cs = 26; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 183 "parser.rl" + + + if (cs >= JSON_object_first_final) { + if (json->create_additions) { + VALUE klassname; + if (NIL_P(json->object_class)) { + klassname = rb_hash_aref(*result, json->create_id); + } else { + klassname = rb_funcall(*result, i_aref, 1, json->create_id); + } + if (!NIL_P(klassname)) { + VALUE klass = rb_funcall(mJSON, i_deep_const_get, 1, klassname); + if (RTEST(rb_funcall(klass, i_json_creatable_p, 0))) { + *result = rb_funcall(klass, i_json_create, 1, *result); + } + } + } + return p + 1; + } else { + return NULL; } - -#line 183 "parser.rl" - - if (cs >= JSON_object_first_final) { - if (json->create_additions) { - VALUE klassname; - if (NIL_P(json->object_class)) { - klassname = rb_hash_aref(*result, json->create_id); - } else { - klassname = rb_funcall(*result, i_aref, 1, json->create_id); - } - if (!NIL_P(klassname)) { - VALUE klass = rb_funcall(mJSON, i_deep_const_get, 1, klassname); - if (RTEST(rb_funcall(klass, i_json_creatable_p, 0))) { - *result = rb_funcall(klass, i_json_create, 1, *result); - } - } - } - return p + 1; - } else { - return NULL; - } } -#line 486 "parser.c" enum {JSON_value_start = 1}; enum {JSON_value_first_final = 29}; enum {JSON_value_error = 0}; enum {JSON_value_en_main = 1}; +static const char MAYBE_UNUSED(_JSON_value_nfa_targs)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_value_nfa_offsets)[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_value_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_value_nfa_pop_trans)[] = { + 0, 0 +}; + #line 283 "parser.rl" static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) { - int cs = EVIL; + int cs = EVIL; -#line 502 "parser.c" { - cs = JSON_value_start; + cs = (int)JSON_value_start; } -#line 290 "parser.rl" + #line 290 "parser.rl" + -#line 509 "parser.c" { - if ( p == pe ) + if ( p == pe ) goto _test_eof; - switch ( cs ) - { -st1: - if ( ++p == pe ) + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 29: + goto st_case_29; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + case 8: + goto st_case_8; + case 9: + goto st_case_9; + case 10: + goto st_case_10; + case 11: + goto st_case_11; + case 12: + goto st_case_12; + case 13: + goto st_case_13; + case 14: + goto st_case_14; + case 15: + goto st_case_15; + case 16: + goto st_case_16; + case 17: + goto st_case_17; + case 18: + goto st_case_18; + case 19: + goto st_case_19; + case 20: + goto st_case_20; + case 21: + goto st_case_21; + case 22: + goto st_case_22; + case 23: + goto st_case_23; + case 24: + goto st_case_24; + case 25: + goto st_case_25; + case 26: + goto st_case_26; + case 27: + goto st_case_27; + case 28: + goto st_case_28; + } + goto st_out; + st1: + p+= 1; + if ( p == pe ) goto _test_eof1; -case 1: - switch( (*p) ) { - case 13: goto st1; - case 32: goto st1; - case 34: goto tr2; - case 45: goto tr3; - case 47: goto st6; - case 73: goto st10; - case 78: goto st17; - case 91: goto tr7; - case 102: goto st19; - case 110: goto st23; - case 116: goto st26; - case 123: goto tr11; - } - if ( (*p) > 10 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3; - } else if ( (*p) >= 9 ) - goto st1; - goto st0; -st0: -cs = 0; - goto _out; -tr2: -#line 235 "parser.rl" - { - char *np = JSON_parse_string(json, p, pe, result); - if (np == NULL) { p--; {p++; cs = 29; goto _out;} } else {p = (( np))-1;} - } - goto st29; -tr3: -#line 240 "parser.rl" - { - char *np; - if(pe > p + 8 && !strncmp(MinusInfinity, p, 9)) { - if (json->allow_nan) { - *result = CMinusInfinity; - {p = (( p + 10))-1;} - p--; {p++; cs = 29; goto _out;} - } else { - rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p); - } - } - np = JSON_parse_float(json, p, pe, result); - if (np != NULL) {p = (( np))-1;} - np = JSON_parse_integer(json, p, pe, result); - if (np != NULL) {p = (( np))-1;} - p--; {p++; cs = 29; goto _out;} - } - goto st29; -tr7: -#line 258 "parser.rl" - { - char *np; - np = JSON_parse_array(json, p, pe, result, current_nesting + 1); - if (np == NULL) { p--; {p++; cs = 29; goto _out;} } else {p = (( np))-1;} - } - goto st29; -tr11: -#line 264 "parser.rl" - { - char *np; - np = JSON_parse_object(json, p, pe, result, current_nesting + 1); - if (np == NULL) { p--; {p++; cs = 29; goto _out;} } else {p = (( np))-1;} - } - goto st29; -tr25: -#line 228 "parser.rl" - { - if (json->allow_nan) { - *result = CInfinity; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8); - } - } - goto st29; -tr27: -#line 221 "parser.rl" - { - if (json->allow_nan) { - *result = CNaN; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2); - } - } - goto st29; -tr31: -#line 215 "parser.rl" - { - *result = Qfalse; - } - goto st29; -tr34: -#line 212 "parser.rl" - { - *result = Qnil; - } - goto st29; -tr37: -#line 218 "parser.rl" - { - *result = Qtrue; - } - goto st29; -st29: - if ( ++p == pe ) - goto _test_eof29; -case 29: -#line 270 "parser.rl" - { p--; {p++; cs = 29; goto _out;} } -#line 629 "parser.c" - switch( (*p) ) { - case 13: goto st29; - case 32: goto st29; - case 47: goto st2; - } - if ( 9 <= (*p) && (*p) <= 10 ) + st_case_1: + switch( ( (*( p))) ) { + case 13: { + goto st1; + } + case 32: { + goto st1; + } + case 34: { + goto ctr2; + } + case 45: { + goto ctr3; + } + case 47: { + goto st6; + } + case 73: { + goto st10; + } + case 78: { + goto st17; + } + case 91: { + goto ctr7; + } + case 102: { + goto st19; + } + case 110: { + goto st23; + } + case 116: { + goto st26; + } + case 123: { + goto ctr11; + } + } + if ( ( (*( p))) > 10 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto ctr3; + } + } else if ( ( (*( p))) >= 9 ) { + goto st1; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + ctr2: + { + #line 235 "parser.rl" + + char *np = JSON_parse_string(json, p, pe, result); + if (np == NULL) { {p = p - 1; } {p+= 1; cs = 29; goto _out;} } else {p = (( np))-1;} + + } + goto st29; - goto st0; -st2: - if ( ++p == pe ) + ctr3: + { + #line 240 "parser.rl" + + char *np; + if(pe > p + 8 && !strncmp(MinusInfinity, p, 9)) { + if (json->allow_nan) { + *result = CMinusInfinity; + {p = (( p + 10))-1;} + + {p = p - 1; } {p+= 1; cs = 29; goto _out;} + } else { + rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p); + } + } + np = JSON_parse_float(json, p, pe, result); + if (np != NULL) {p = (( np))-1;} + + np = JSON_parse_integer(json, p, pe, result); + if (np != NULL) {p = (( np))-1;} + + {p = p - 1; } {p+= 1; cs = 29; goto _out;} + } + + goto st29; + ctr7: + { + #line 258 "parser.rl" + + char *np; + np = JSON_parse_array(json, p, pe, result, current_nesting + 1); + if (np == NULL) { {p = p - 1; } {p+= 1; cs = 29; goto _out;} } else {p = (( np))-1;} + + } + + goto st29; + ctr11: + { + #line 264 "parser.rl" + + char *np; + np = JSON_parse_object(json, p, pe, result, current_nesting + 1); + if (np == NULL) { {p = p - 1; } {p+= 1; cs = 29; goto _out;} } else {p = (( np))-1;} + + } + + goto st29; + ctr25: + { + #line 228 "parser.rl" + + if (json->allow_nan) { + *result = CInfinity; + } else { + rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8); + } + } + + goto st29; + ctr27: + { + #line 221 "parser.rl" + + if (json->allow_nan) { + *result = CNaN; + } else { + rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2); + } + } + + goto st29; + ctr31: + { + #line 215 "parser.rl" + + *result = Qfalse; + } + + goto st29; + ctr34: + { + #line 212 "parser.rl" + + *result = Qnil; + } + + goto st29; + ctr37: + { + #line 218 "parser.rl" + + *result = Qtrue; + } + + goto st29; + st29: + p+= 1; + if ( p == pe ) + goto _test_eof29; + st_case_29: + { + #line 270 "parser.rl" + {p = p - 1; } {p+= 1; cs = 29; goto _out;} } + switch( ( (*( p))) ) { + case 13: { + goto st29; + } + case 32: { + goto st29; + } + case 47: { + goto st2; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st29; + } + { + goto st0; + } + st2: + p+= 1; + if ( p == pe ) goto _test_eof2; -case 2: - switch( (*p) ) { - case 42: goto st3; - case 47: goto st5; - } - goto st0; -st3: - if ( ++p == pe ) + st_case_2: + switch( ( (*( p))) ) { + case 42: { + goto st3; + } + case 47: { + goto st5; + } + } + { + goto st0; + } + st3: + p+= 1; + if ( p == pe ) goto _test_eof3; -case 3: - if ( (*p) == 42 ) - goto st4; - goto st3; -st4: - if ( ++p == pe ) + st_case_3: + if ( ( (*( p))) == 42 ) { + goto st4; + } + { + goto st3; + } + st4: + p+= 1; + if ( p == pe ) goto _test_eof4; -case 4: - switch( (*p) ) { - case 42: goto st4; - case 47: goto st29; - } - goto st3; -st5: - if ( ++p == pe ) + st_case_4: + switch( ( (*( p))) ) { + case 42: { + goto st4; + } + case 47: { + goto st29; + } + } + { + goto st3; + } + st5: + p+= 1; + if ( p == pe ) goto _test_eof5; -case 5: - if ( (*p) == 10 ) - goto st29; - goto st5; -st6: - if ( ++p == pe ) + st_case_5: + if ( ( (*( p))) == 10 ) { + goto st29; + } + { + goto st5; + } + st6: + p+= 1; + if ( p == pe ) goto _test_eof6; -case 6: - switch( (*p) ) { - case 42: goto st7; - case 47: goto st9; - } - goto st0; -st7: - if ( ++p == pe ) + st_case_6: + switch( ( (*( p))) ) { + case 42: { + goto st7; + } + case 47: { + goto st9; + } + } + { + goto st0; + } + st7: + p+= 1; + if ( p == pe ) goto _test_eof7; -case 7: - if ( (*p) == 42 ) - goto st8; - goto st7; -st8: - if ( ++p == pe ) + st_case_7: + if ( ( (*( p))) == 42 ) { + goto st8; + } + { + goto st7; + } + st8: + p+= 1; + if ( p == pe ) goto _test_eof8; -case 8: - switch( (*p) ) { - case 42: goto st8; - case 47: goto st1; - } - goto st7; -st9: - if ( ++p == pe ) + st_case_8: + switch( ( (*( p))) ) { + case 42: { + goto st8; + } + case 47: { + goto st1; + } + } + { + goto st7; + } + st9: + p+= 1; + if ( p == pe ) goto _test_eof9; -case 9: - if ( (*p) == 10 ) - goto st1; - goto st9; -st10: - if ( ++p == pe ) + st_case_9: + if ( ( (*( p))) == 10 ) { + goto st1; + } + { + goto st9; + } + st10: + p+= 1; + if ( p == pe ) goto _test_eof10; -case 10: - if ( (*p) == 110 ) - goto st11; - goto st0; -st11: - if ( ++p == pe ) + st_case_10: + if ( ( (*( p))) == 110 ) { + goto st11; + } + { + goto st0; + } + st11: + p+= 1; + if ( p == pe ) goto _test_eof11; -case 11: - if ( (*p) == 102 ) - goto st12; - goto st0; -st12: - if ( ++p == pe ) + st_case_11: + if ( ( (*( p))) == 102 ) { + goto st12; + } + { + goto st0; + } + st12: + p+= 1; + if ( p == pe ) goto _test_eof12; -case 12: - if ( (*p) == 105 ) - goto st13; - goto st0; -st13: - if ( ++p == pe ) + st_case_12: + if ( ( (*( p))) == 105 ) { + goto st13; + } + { + goto st0; + } + st13: + p+= 1; + if ( p == pe ) goto _test_eof13; -case 13: - if ( (*p) == 110 ) - goto st14; - goto st0; -st14: - if ( ++p == pe ) + st_case_13: + if ( ( (*( p))) == 110 ) { + goto st14; + } + { + goto st0; + } + st14: + p+= 1; + if ( p == pe ) goto _test_eof14; -case 14: - if ( (*p) == 105 ) - goto st15; - goto st0; -st15: - if ( ++p == pe ) + st_case_14: + if ( ( (*( p))) == 105 ) { + goto st15; + } + { + goto st0; + } + st15: + p+= 1; + if ( p == pe ) goto _test_eof15; -case 15: - if ( (*p) == 116 ) - goto st16; - goto st0; -st16: - if ( ++p == pe ) + st_case_15: + if ( ( (*( p))) == 116 ) { + goto st16; + } + { + goto st0; + } + st16: + p+= 1; + if ( p == pe ) goto _test_eof16; -case 16: - if ( (*p) == 121 ) - goto tr25; - goto st0; -st17: - if ( ++p == pe ) + st_case_16: + if ( ( (*( p))) == 121 ) { + goto ctr25; + } + { + goto st0; + } + st17: + p+= 1; + if ( p == pe ) goto _test_eof17; -case 17: - if ( (*p) == 97 ) - goto st18; - goto st0; -st18: - if ( ++p == pe ) + st_case_17: + if ( ( (*( p))) == 97 ) { + goto st18; + } + { + goto st0; + } + st18: + p+= 1; + if ( p == pe ) goto _test_eof18; -case 18: - if ( (*p) == 78 ) - goto tr27; - goto st0; -st19: - if ( ++p == pe ) + st_case_18: + if ( ( (*( p))) == 78 ) { + goto ctr27; + } + { + goto st0; + } + st19: + p+= 1; + if ( p == pe ) goto _test_eof19; -case 19: - if ( (*p) == 97 ) - goto st20; - goto st0; -st20: - if ( ++p == pe ) + st_case_19: + if ( ( (*( p))) == 97 ) { + goto st20; + } + { + goto st0; + } + st20: + p+= 1; + if ( p == pe ) goto _test_eof20; -case 20: - if ( (*p) == 108 ) - goto st21; - goto st0; -st21: - if ( ++p == pe ) + st_case_20: + if ( ( (*( p))) == 108 ) { + goto st21; + } + { + goto st0; + } + st21: + p+= 1; + if ( p == pe ) goto _test_eof21; -case 21: - if ( (*p) == 115 ) - goto st22; - goto st0; -st22: - if ( ++p == pe ) + st_case_21: + if ( ( (*( p))) == 115 ) { + goto st22; + } + { + goto st0; + } + st22: + p+= 1; + if ( p == pe ) goto _test_eof22; -case 22: - if ( (*p) == 101 ) - goto tr31; - goto st0; -st23: - if ( ++p == pe ) + st_case_22: + if ( ( (*( p))) == 101 ) { + goto ctr31; + } + { + goto st0; + } + st23: + p+= 1; + if ( p == pe ) goto _test_eof23; -case 23: - if ( (*p) == 117 ) - goto st24; - goto st0; -st24: - if ( ++p == pe ) + st_case_23: + if ( ( (*( p))) == 117 ) { + goto st24; + } + { + goto st0; + } + st24: + p+= 1; + if ( p == pe ) goto _test_eof24; -case 24: - if ( (*p) == 108 ) - goto st25; - goto st0; -st25: - if ( ++p == pe ) + st_case_24: + if ( ( (*( p))) == 108 ) { + goto st25; + } + { + goto st0; + } + st25: + p+= 1; + if ( p == pe ) goto _test_eof25; -case 25: - if ( (*p) == 108 ) - goto tr34; - goto st0; -st26: - if ( ++p == pe ) + st_case_25: + if ( ( (*( p))) == 108 ) { + goto ctr34; + } + { + goto st0; + } + st26: + p+= 1; + if ( p == pe ) goto _test_eof26; -case 26: - if ( (*p) == 114 ) - goto st27; - goto st0; -st27: - if ( ++p == pe ) + st_case_26: + if ( ( (*( p))) == 114 ) { + goto st27; + } + { + goto st0; + } + st27: + p+= 1; + if ( p == pe ) goto _test_eof27; -case 27: - if ( (*p) == 117 ) - goto st28; - goto st0; -st28: - if ( ++p == pe ) + st_case_27: + if ( ( (*( p))) == 117 ) { + goto st28; + } + { + goto st0; + } + st28: + p+= 1; + if ( p == pe ) goto _test_eof28; -case 28: - if ( (*p) == 101 ) - goto tr37; - goto st0; - } - _test_eof1: cs = 1; goto _test_eof; - _test_eof29: cs = 29; goto _test_eof; - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof9: cs = 9; goto _test_eof; - _test_eof10: cs = 10; goto _test_eof; - _test_eof11: cs = 11; goto _test_eof; - _test_eof12: cs = 12; goto _test_eof; - _test_eof13: cs = 13; goto _test_eof; - _test_eof14: cs = 14; goto _test_eof; - _test_eof15: cs = 15; goto _test_eof; - _test_eof16: cs = 16; goto _test_eof; - _test_eof17: cs = 17; goto _test_eof; - _test_eof18: cs = 18; goto _test_eof; - _test_eof19: cs = 19; goto _test_eof; - _test_eof20: cs = 20; goto _test_eof; - _test_eof21: cs = 21; goto _test_eof; - _test_eof22: cs = 22; goto _test_eof; - _test_eof23: cs = 23; goto _test_eof; - _test_eof24: cs = 24; goto _test_eof; - _test_eof25: cs = 25; goto _test_eof; - _test_eof26: cs = 26; goto _test_eof; - _test_eof27: cs = 27; goto _test_eof; - _test_eof28: cs = 28; goto _test_eof; - - _test_eof: {} - _out: {} + st_case_28: + if ( ( (*( p))) == 101 ) { + goto ctr37; + } + { + goto st0; + } + st_out: + _test_eof1: cs = 1; goto _test_eof; + _test_eof29: cs = 29; goto _test_eof; + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof11: cs = 11; goto _test_eof; + _test_eof12: cs = 12; goto _test_eof; + _test_eof13: cs = 13; goto _test_eof; + _test_eof14: cs = 14; goto _test_eof; + _test_eof15: cs = 15; goto _test_eof; + _test_eof16: cs = 16; goto _test_eof; + _test_eof17: cs = 17; goto _test_eof; + _test_eof18: cs = 18; goto _test_eof; + _test_eof19: cs = 19; goto _test_eof; + _test_eof20: cs = 20; goto _test_eof; + _test_eof21: cs = 21; goto _test_eof; + _test_eof22: cs = 22; goto _test_eof; + _test_eof23: cs = 23; goto _test_eof; + _test_eof24: cs = 24; goto _test_eof; + _test_eof25: cs = 25; goto _test_eof; + _test_eof26: cs = 26; goto _test_eof; + _test_eof27: cs = 27; goto _test_eof; + _test_eof28: cs = 28; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 291 "parser.rl" + + + if (json->freeze) { + OBJ_FREEZE(*result); + } + + if (cs >= JSON_value_first_final) { + return p; + } else { + return NULL; } - -#line 291 "parser.rl" - - if (cs >= JSON_value_first_final) { - return p; - } else { - return NULL; - } } -#line 880 "parser.c" enum {JSON_integer_start = 1}; enum {JSON_integer_first_final = 3}; enum {JSON_integer_error = 0}; enum {JSON_integer_en_main = 1}; +static const char MAYBE_UNUSED(_JSON_integer_nfa_targs)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_integer_nfa_offsets)[] = { + 0, 0, 0, 0, 0, 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_integer_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_integer_nfa_pop_trans)[] = { + 0, 0 +}; -#line 307 "parser.rl" + +#line 311 "parser.rl" static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result) { - int cs = EVIL; + int cs = EVIL; -#line 896 "parser.c" { - cs = JSON_integer_start; + cs = (int)JSON_integer_start; } -#line 314 "parser.rl" - json->memo = p; + #line 318 "parser.rl" + + json->memo = p; -#line 904 "parser.c" { - if ( p == pe ) + if ( p == pe ) goto _test_eof; - switch ( cs ) - { -case 1: - switch( (*p) ) { - case 45: goto st2; - case 48: goto st3; - } - if ( 49 <= (*p) && (*p) <= 57 ) - goto st5; - goto st0; -st0: -cs = 0; - goto _out; -st2: - if ( ++p == pe ) + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + } + goto st_out; + st_case_1: + switch( ( (*( p))) ) { + case 45: { + goto st2; + } + case 48: { + goto st3; + } + } + if ( 49 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st5; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + st2: + p+= 1; + if ( p == pe ) goto _test_eof2; -case 2: - if ( (*p) == 48 ) - goto st3; - if ( 49 <= (*p) && (*p) <= 57 ) - goto st5; - goto st0; -st3: - if ( ++p == pe ) + st_case_2: + if ( ( (*( p))) == 48 ) { + goto st3; + } + if ( 49 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st5; + } + { + goto st0; + } + st3: + p+= 1; + if ( p == pe ) goto _test_eof3; -case 3: - if ( 48 <= (*p) && (*p) <= 57 ) - goto st0; - goto tr4; -tr4: -#line 304 "parser.rl" - { p--; {p++; cs = 4; goto _out;} } - goto st4; -st4: - if ( ++p == pe ) + st_case_3: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st0; + } + { + goto ctr4; + } + ctr4: + { + #line 308 "parser.rl" + {p = p - 1; } {p+= 1; cs = 4; goto _out;} } + + goto st4; + st4: + p+= 1; + if ( p == pe ) goto _test_eof4; -case 4: -#line 945 "parser.c" - goto st0; -st5: - if ( ++p == pe ) + st_case_4: + { + goto st0; + } + st5: + p+= 1; + if ( p == pe ) goto _test_eof5; -case 5: - if ( 48 <= (*p) && (*p) <= 57 ) - goto st5; - goto tr4; - } - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; + st_case_5: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st5; + } + { + goto ctr4; + } + st_out: + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; - _test_eof: {} - _out: {} + _test_eof: {} + _out: {} } -#line 316 "parser.rl" - - if (cs >= JSON_integer_first_final) { - long len = p - json->memo; - fbuffer_clear(json->fbuffer); - fbuffer_append(json->fbuffer, json->memo, len); - fbuffer_append_char(json->fbuffer, '\0'); - *result = rb_cstr2inum(FBUFFER_PTR(json->fbuffer), 10); - return p + 1; - } else { - return NULL; - } + #line 320 "parser.rl" + + + if (cs >= JSON_integer_first_final) { + long len = p - json->memo; + fbuffer_clear(json->fbuffer); + fbuffer_append(json->fbuffer, json->memo, len); + fbuffer_append_char(json->fbuffer, '\0'); + *result = rb_cstr2inum(FBUFFER_PTR(json->fbuffer), 10); + return p + 1; + } else { + return NULL; + } } -#line 979 "parser.c" enum {JSON_float_start = 1}; enum {JSON_float_first_final = 8}; enum {JSON_float_error = 0}; enum {JSON_float_en_main = 1}; +static const char MAYBE_UNUSED(_JSON_float_nfa_targs)[] = { + 0, 0 +}; -#line 341 "parser.rl" +static const char MAYBE_UNUSED(_JSON_float_nfa_offsets)[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 +}; +static const char MAYBE_UNUSED(_JSON_float_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_float_nfa_pop_trans)[] = { + 0, 0 +}; + + +#line 345 "parser.rl" -static int is_bigdecimal_class(VALUE obj) -{ - if (cBigDecimal == Qundef) { - if (rb_const_defined(rb_cObject, i_BigDecimal)) { - cBigDecimal = rb_const_get_at(rb_cObject, i_BigDecimal); - } - else { - return 0; - } - } - return obj == cBigDecimal; -} static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result) { - int cs = EVIL; + int cs = EVIL; -#line 1008 "parser.c" { - cs = JSON_float_start; + cs = (int)JSON_float_start; } -#line 361 "parser.rl" - json->memo = p; + #line 352 "parser.rl" + + json->memo = p; -#line 1016 "parser.c" { - if ( p == pe ) + if ( p == pe ) goto _test_eof; - switch ( cs ) - { -case 1: - switch( (*p) ) { - case 45: goto st2; - case 48: goto st3; - } - if ( 49 <= (*p) && (*p) <= 57 ) - goto st7; - goto st0; -st0: -cs = 0; - goto _out; -st2: - if ( ++p == pe ) + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 8: + goto st_case_8; + case 9: + goto st_case_9; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 10: + goto st_case_10; + case 7: + goto st_case_7; + } + goto st_out; + st_case_1: + switch( ( (*( p))) ) { + case 45: { + goto st2; + } + case 48: { + goto st3; + } + } + if ( 49 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st7; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + st2: + p+= 1; + if ( p == pe ) goto _test_eof2; -case 2: - if ( (*p) == 48 ) - goto st3; - if ( 49 <= (*p) && (*p) <= 57 ) - goto st7; - goto st0; -st3: - if ( ++p == pe ) + st_case_2: + if ( ( (*( p))) == 48 ) { + goto st3; + } + if ( 49 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st7; + } + { + goto st0; + } + st3: + p+= 1; + if ( p == pe ) goto _test_eof3; -case 3: - switch( (*p) ) { - case 46: goto st4; - case 69: goto st5; - case 101: goto st5; - } - goto st0; -st4: - if ( ++p == pe ) + st_case_3: + switch( ( (*( p))) ) { + case 46: { + goto st4; + } + case 69: { + goto st5; + } + case 101: { + goto st5; + } + } + { + goto st0; + } + st4: + p+= 1; + if ( p == pe ) goto _test_eof4; -case 4: - if ( 48 <= (*p) && (*p) <= 57 ) - goto st8; - goto st0; -st8: - if ( ++p == pe ) - goto _test_eof8; -case 8: - switch( (*p) ) { - case 69: goto st5; - case 101: goto st5; - } - if ( (*p) > 46 ) { - if ( 48 <= (*p) && (*p) <= 57 ) + st_case_4: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { goto st8; - } else if ( (*p) >= 45 ) - goto st0; - goto tr9; -tr9: -#line 335 "parser.rl" - { p--; {p++; cs = 9; goto _out;} } - goto st9; -st9: - if ( ++p == pe ) + } + { + goto st0; + } + st8: + p+= 1; + if ( p == pe ) + goto _test_eof8; + st_case_8: + switch( ( (*( p))) ) { + case 69: { + goto st5; + } + case 101: { + goto st5; + } + } + if ( ( (*( p))) > 46 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st8; + } + } else if ( ( (*( p))) >= 45 ) { + goto st0; + } + { + goto ctr9; + } + ctr9: + { + #line 339 "parser.rl" + {p = p - 1; } {p+= 1; cs = 9; goto _out;} } + + goto st9; + st9: + p+= 1; + if ( p == pe ) goto _test_eof9; -case 9: -#line 1081 "parser.c" - goto st0; -st5: - if ( ++p == pe ) + st_case_9: + { + goto st0; + } + st5: + p+= 1; + if ( p == pe ) goto _test_eof5; -case 5: - switch( (*p) ) { - case 43: goto st6; - case 45: goto st6; - } - if ( 48 <= (*p) && (*p) <= 57 ) - goto st10; - goto st0; -st6: - if ( ++p == pe ) + st_case_5: + switch( ( (*( p))) ) { + case 43: { + goto st6; + } + case 45: { + goto st6; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st10; + } + { + goto st0; + } + st6: + p+= 1; + if ( p == pe ) goto _test_eof6; -case 6: - if ( 48 <= (*p) && (*p) <= 57 ) - goto st10; - goto st0; -st10: - if ( ++p == pe ) - goto _test_eof10; -case 10: - switch( (*p) ) { - case 69: goto st0; - case 101: goto st0; - } - if ( (*p) > 46 ) { - if ( 48 <= (*p) && (*p) <= 57 ) + st_case_6: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { goto st10; - } else if ( (*p) >= 45 ) - goto st0; - goto tr9; -st7: - if ( ++p == pe ) + } + { + goto st0; + } + st10: + p+= 1; + if ( p == pe ) + goto _test_eof10; + st_case_10: + switch( ( (*( p))) ) { + case 69: { + goto st0; + } + case 101: { + goto st0; + } + } + if ( ( (*( p))) > 46 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st10; + } + } else if ( ( (*( p))) >= 45 ) { + goto st0; + } + { + goto ctr9; + } + st7: + p+= 1; + if ( p == pe ) goto _test_eof7; -case 7: - switch( (*p) ) { - case 46: goto st4; - case 69: goto st5; - case 101: goto st5; - } - if ( 48 <= (*p) && (*p) <= 57 ) - goto st7; - goto st0; - } - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof9: cs = 9; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof10: cs = 10; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - - _test_eof: {} - _out: {} + st_case_7: + switch( ( (*( p))) ) { + case 46: { + goto st4; + } + case 69: { + goto st5; + } + case 101: { + goto st5; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st7; + } + { + goto st0; + } + st_out: + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 354 "parser.rl" + + + if (cs >= JSON_float_first_final) { + VALUE mod = Qnil; + ID method_id = 0; + if (rb_respond_to(json->decimal_class, i_try_convert)) { + mod = json->decimal_class; + method_id = i_try_convert; + } else if (rb_respond_to(json->decimal_class, i_new)) { + mod = json->decimal_class; + method_id = i_new; + } else if (RB_TYPE_P(json->decimal_class, T_CLASS)) { + VALUE name = rb_class_name(json->decimal_class); + const char *name_cstr = RSTRING_PTR(name); + const char *last_colon = strrchr(name_cstr, ':'); + if (last_colon) { + const char *mod_path_end = last_colon - 1; + VALUE mod_path = rb_str_substr(name, 0, mod_path_end - name_cstr); + mod = rb_path_to_class(mod_path); + + const char *method_name_beg = last_colon + 1; + long before_len = method_name_beg - name_cstr; + long len = RSTRING_LEN(name) - before_len; + VALUE method_name = rb_str_substr(name, before_len, len); + method_id = SYM2ID(rb_str_intern(method_name)); + } else { + mod = rb_mKernel; + method_id = SYM2ID(rb_str_intern(name)); + } + } + + long len = p - json->memo; + fbuffer_clear(json->fbuffer); + fbuffer_append(json->fbuffer, json->memo, len); + fbuffer_append_char(json->fbuffer, '\0'); + + if (method_id) { + VALUE text = rb_str_new2(FBUFFER_PTR(json->fbuffer)); + *result = rb_funcallv(mod, method_id, 1, &text); + } else { + *result = DBL2NUM(rb_cstr_to_dbl(FBUFFER_PTR(json->fbuffer), 1)); + } + + return p + 1; + } else { + return NULL; } - -#line 363 "parser.rl" - - if (cs >= JSON_float_first_final) { - long len = p - json->memo; - fbuffer_clear(json->fbuffer); - fbuffer_append(json->fbuffer, json->memo, len); - fbuffer_append_char(json->fbuffer, '\0'); - if (NIL_P(json->decimal_class)) { - *result = rb_float_new(rb_cstr_to_dbl(FBUFFER_PTR(json->fbuffer), 1)); - } else { - VALUE text; - text = rb_str_new2(FBUFFER_PTR(json->fbuffer)); - if (is_bigdecimal_class(json->decimal_class)) { - *result = rb_funcall(Qnil, i_BigDecimal, 1, text); - } else { - *result = rb_funcall(json->decimal_class, i_new, 1, text); - } - } - return p + 1; - } else { - return NULL; - } } -#line 1168 "parser.c" enum {JSON_array_start = 1}; enum {JSON_array_first_final = 17}; enum {JSON_array_error = 0}; enum {JSON_array_en_main = 1}; +static const char MAYBE_UNUSED(_JSON_array_nfa_targs)[] = { + 0, 0 +}; -#line 416 "parser.rl" +static const char MAYBE_UNUSED(_JSON_array_nfa_offsets)[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_array_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_array_nfa_pop_trans)[] = { + 0, 0 +}; + + +#line 432 "parser.rl" static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) { - int cs = EVIL; - VALUE array_class = json->array_class; + int cs = EVIL; + VALUE array_class = json->array_class; - if (json->max_nesting && current_nesting > json->max_nesting) { - rb_raise(eNestingError, "nesting of %d is too deep", current_nesting); - } - *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class); + if (json->max_nesting && current_nesting > json->max_nesting) { + rb_raise(eNestingError, "nesting of %d is too deep", current_nesting); + } + *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class); -#line 1190 "parser.c" { - cs = JSON_array_start; + cs = (int)JSON_array_start; } -#line 429 "parser.rl" + #line 445 "parser.rl" + -#line 1197 "parser.c" { - if ( p == pe ) + if ( p == pe ) goto _test_eof; - switch ( cs ) - { -case 1: - if ( (*p) == 91 ) - goto st2; - goto st0; -st0: -cs = 0; - goto _out; -st2: - if ( ++p == pe ) + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + case 8: + goto st_case_8; + case 9: + goto st_case_9; + case 10: + goto st_case_10; + case 11: + goto st_case_11; + case 12: + goto st_case_12; + case 17: + goto st_case_17; + case 13: + goto st_case_13; + case 14: + goto st_case_14; + case 15: + goto st_case_15; + case 16: + goto st_case_16; + } + goto st_out; + st_case_1: + if ( ( (*( p))) == 91 ) { + goto st2; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + st2: + p+= 1; + if ( p == pe ) goto _test_eof2; -case 2: - switch( (*p) ) { - case 13: goto st2; - case 32: goto st2; - case 34: goto tr2; - case 45: goto tr2; - case 47: goto st13; - case 73: goto tr2; - case 78: goto tr2; - case 91: goto tr2; - case 93: goto tr4; - case 102: goto tr2; - case 110: goto tr2; - case 116: goto tr2; - case 123: goto tr2; - } - if ( (*p) > 10 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2; - } else if ( (*p) >= 9 ) - goto st2; - goto st0; -tr2: -#line 393 "parser.rl" - { - VALUE v = Qnil; - char *np = JSON_parse_value(json, p, pe, &v, current_nesting); - if (np == NULL) { - p--; {p++; cs = 3; goto _out;} - } else { - if (NIL_P(json->array_class)) { - rb_ary_push(*result, v); - } else { - rb_funcall(*result, i_leftshift, 1, v); - } - {p = (( np))-1;} - } - } - goto st3; -st3: - if ( ++p == pe ) - goto _test_eof3; -case 3: -#line 1256 "parser.c" - switch( (*p) ) { - case 13: goto st3; - case 32: goto st3; - case 44: goto st4; - case 47: goto st9; - case 93: goto tr4; - } - if ( 9 <= (*p) && (*p) <= 10 ) + st_case_2: + switch( ( (*( p))) ) { + case 13: { + goto st2; + } + case 32: { + goto st2; + } + case 34: { + goto ctr2; + } + case 45: { + goto ctr2; + } + case 47: { + goto st13; + } + case 73: { + goto ctr2; + } + case 78: { + goto ctr2; + } + case 91: { + goto ctr2; + } + case 93: { + goto ctr4; + } + case 102: { + goto ctr2; + } + case 110: { + goto ctr2; + } + case 116: { + goto ctr2; + } + case 123: { + goto ctr2; + } + } + if ( ( (*( p))) > 10 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto ctr2; + } + } else if ( ( (*( p))) >= 9 ) { + goto st2; + } + { + goto st0; + } + ctr2: + { + #line 409 "parser.rl" + + VALUE v = Qnil; + char *np = JSON_parse_value(json, p, pe, &v, current_nesting); + if (np == NULL) { + {p = p - 1; } {p+= 1; cs = 3; goto _out;} + } else { + if (NIL_P(json->array_class)) { + rb_ary_push(*result, v); + } else { + rb_funcall(*result, i_leftshift, 1, v); + } + {p = (( np))-1;} + + } + } + goto st3; - goto st0; -st4: - if ( ++p == pe ) + st3: + p+= 1; + if ( p == pe ) + goto _test_eof3; + st_case_3: + switch( ( (*( p))) ) { + case 13: { + goto st3; + } + case 32: { + goto st3; + } + case 44: { + goto st4; + } + case 47: { + goto st9; + } + case 93: { + goto ctr4; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st3; + } + { + goto st0; + } + st4: + p+= 1; + if ( p == pe ) goto _test_eof4; -case 4: - switch( (*p) ) { - case 13: goto st4; - case 32: goto st4; - case 34: goto tr2; - case 45: goto tr2; - case 47: goto st5; - case 73: goto tr2; - case 78: goto tr2; - case 91: goto tr2; - case 102: goto tr2; - case 110: goto tr2; - case 116: goto tr2; - case 123: goto tr2; - } - if ( (*p) > 10 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2; - } else if ( (*p) >= 9 ) - goto st4; - goto st0; -st5: - if ( ++p == pe ) + st_case_4: + switch( ( (*( p))) ) { + case 13: { + goto st4; + } + case 32: { + goto st4; + } + case 34: { + goto ctr2; + } + case 45: { + goto ctr2; + } + case 47: { + goto st5; + } + case 73: { + goto ctr2; + } + case 78: { + goto ctr2; + } + case 91: { + goto ctr2; + } + case 102: { + goto ctr2; + } + case 110: { + goto ctr2; + } + case 116: { + goto ctr2; + } + case 123: { + goto ctr2; + } + } + if ( ( (*( p))) > 10 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto ctr2; + } + } else if ( ( (*( p))) >= 9 ) { + goto st4; + } + { + goto st0; + } + st5: + p+= 1; + if ( p == pe ) goto _test_eof5; -case 5: - switch( (*p) ) { - case 42: goto st6; - case 47: goto st8; - } - goto st0; -st6: - if ( ++p == pe ) + st_case_5: + switch( ( (*( p))) ) { + case 42: { + goto st6; + } + case 47: { + goto st8; + } + } + { + goto st0; + } + st6: + p+= 1; + if ( p == pe ) goto _test_eof6; -case 6: - if ( (*p) == 42 ) - goto st7; - goto st6; -st7: - if ( ++p == pe ) + st_case_6: + if ( ( (*( p))) == 42 ) { + goto st7; + } + { + goto st6; + } + st7: + p+= 1; + if ( p == pe ) goto _test_eof7; -case 7: - switch( (*p) ) { - case 42: goto st7; - case 47: goto st4; - } - goto st6; -st8: - if ( ++p == pe ) + st_case_7: + switch( ( (*( p))) ) { + case 42: { + goto st7; + } + case 47: { + goto st4; + } + } + { + goto st6; + } + st8: + p+= 1; + if ( p == pe ) goto _test_eof8; -case 8: - if ( (*p) == 10 ) - goto st4; - goto st8; -st9: - if ( ++p == pe ) + st_case_8: + if ( ( (*( p))) == 10 ) { + goto st4; + } + { + goto st8; + } + st9: + p+= 1; + if ( p == pe ) goto _test_eof9; -case 9: - switch( (*p) ) { - case 42: goto st10; - case 47: goto st12; - } - goto st0; -st10: - if ( ++p == pe ) + st_case_9: + switch( ( (*( p))) ) { + case 42: { + goto st10; + } + case 47: { + goto st12; + } + } + { + goto st0; + } + st10: + p+= 1; + if ( p == pe ) goto _test_eof10; -case 10: - if ( (*p) == 42 ) - goto st11; - goto st10; -st11: - if ( ++p == pe ) + st_case_10: + if ( ( (*( p))) == 42 ) { + goto st11; + } + { + goto st10; + } + st11: + p+= 1; + if ( p == pe ) goto _test_eof11; -case 11: - switch( (*p) ) { - case 42: goto st11; - case 47: goto st3; - } - goto st10; -st12: - if ( ++p == pe ) + st_case_11: + switch( ( (*( p))) ) { + case 42: { + goto st11; + } + case 47: { + goto st3; + } + } + { + goto st10; + } + st12: + p+= 1; + if ( p == pe ) goto _test_eof12; -case 12: - if ( (*p) == 10 ) - goto st3; - goto st12; -tr4: -#line 408 "parser.rl" - { p--; {p++; cs = 17; goto _out;} } - goto st17; -st17: - if ( ++p == pe ) + st_case_12: + if ( ( (*( p))) == 10 ) { + goto st3; + } + { + goto st12; + } + ctr4: + { + #line 424 "parser.rl" + {p = p - 1; } {p+= 1; cs = 17; goto _out;} } + + goto st17; + st17: + p+= 1; + if ( p == pe ) goto _test_eof17; -case 17: -#line 1363 "parser.c" - goto st0; -st13: - if ( ++p == pe ) + st_case_17: + { + goto st0; + } + st13: + p+= 1; + if ( p == pe ) goto _test_eof13; -case 13: - switch( (*p) ) { - case 42: goto st14; - case 47: goto st16; - } - goto st0; -st14: - if ( ++p == pe ) + st_case_13: + switch( ( (*( p))) ) { + case 42: { + goto st14; + } + case 47: { + goto st16; + } + } + { + goto st0; + } + st14: + p+= 1; + if ( p == pe ) goto _test_eof14; -case 14: - if ( (*p) == 42 ) - goto st15; - goto st14; -st15: - if ( ++p == pe ) + st_case_14: + if ( ( (*( p))) == 42 ) { + goto st15; + } + { + goto st14; + } + st15: + p+= 1; + if ( p == pe ) goto _test_eof15; -case 15: - switch( (*p) ) { - case 42: goto st15; - case 47: goto st2; - } - goto st14; -st16: - if ( ++p == pe ) + st_case_15: + switch( ( (*( p))) ) { + case 42: { + goto st15; + } + case 47: { + goto st2; + } + } + { + goto st14; + } + st16: + p+= 1; + if ( p == pe ) goto _test_eof16; -case 16: - if ( (*p) == 10 ) - goto st2; - goto st16; - } - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof9: cs = 9; goto _test_eof; - _test_eof10: cs = 10; goto _test_eof; - _test_eof11: cs = 11; goto _test_eof; - _test_eof12: cs = 12; goto _test_eof; - _test_eof17: cs = 17; goto _test_eof; - _test_eof13: cs = 13; goto _test_eof; - _test_eof14: cs = 14; goto _test_eof; - _test_eof15: cs = 15; goto _test_eof; - _test_eof16: cs = 16; goto _test_eof; - - _test_eof: {} - _out: {} + st_case_16: + if ( ( (*( p))) == 10 ) { + goto st2; + } + { + goto st16; + } + st_out: + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof11: cs = 11; goto _test_eof; + _test_eof12: cs = 12; goto _test_eof; + _test_eof17: cs = 17; goto _test_eof; + _test_eof13: cs = 13; goto _test_eof; + _test_eof14: cs = 14; goto _test_eof; + _test_eof15: cs = 15; goto _test_eof; + _test_eof16: cs = 16; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 446 "parser.rl" + + + if(cs >= JSON_array_first_final) { + return p + 1; + } else { + rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p); + return NULL; } - -#line 430 "parser.rl" - - if(cs >= JSON_array_first_final) { - return p + 1; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p); - return NULL; - } } -static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd) +static const size_t MAX_STACK_BUFFER_SIZE = 128; +static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize) { - char *p = string, *pe = string, *unescape; - int unescape_len; - char buf[4]; - - while (pe < stringEnd) { - if (*pe == '\\') { - unescape = (char *) "?"; - unescape_len = 1; - if (pe > p) rb_str_buf_cat(result, p, pe - p); - switch (*++pe) { - case 'n': - unescape = (char *) "\n"; - break; - case 'r': - unescape = (char *) "\r"; - break; - case 't': - unescape = (char *) "\t"; - break; - case '"': - unescape = (char *) "\""; - break; - case '\\': - unescape = (char *) "\\"; - break; - case 'b': - unescape = (char *) "\b"; - break; - case 'f': - unescape = (char *) "\f"; - break; - case 'u': - if (pe > stringEnd - 4) { - rb_enc_raise( - EXC_ENCODING eParserError, - "%u: incomplete unicode character escape sequence at '%s'", __LINE__, p - ); - } else { - UTF32 ch = unescape_unicode((unsigned char *) ++pe); - pe += 3; - if (UNI_SUR_HIGH_START == (ch & 0xFC00)) { - pe++; - if (pe > stringEnd - 6) { - rb_enc_raise( - EXC_ENCODING eParserError, - "%u: incomplete surrogate pair at '%s'", __LINE__, p - ); - } - if (pe[0] == '\\' && pe[1] == 'u') { - UTF32 sur = unescape_unicode((unsigned char *) pe + 2); - ch = (((ch & 0x3F) << 10) | ((((ch >> 6) & 0xF) + 1) << 16) - | (sur & 0x3FF)); - pe += 5; - } else { - unescape = (char *) "?"; - break; - } - } - unescape_len = convert_UTF32_to_UTF8(buf, ch); - unescape = buf; - } - break; - default: - p = pe; - continue; - } - rb_str_buf_cat(result, unescape, unescape_len); - p = ++pe; - } else { - pe++; - } - } - rb_str_buf_cat(result, p, pe - p); - return result; + VALUE result = Qnil; + size_t bufferSize = stringEnd - string; + char *p = string, *pe = string, *unescape, *bufferStart, *buffer; + int unescape_len; + char buf[4]; + + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + bufferStart = buffer = ALLOC_N(char, bufferSize); + } else { + bufferStart = buffer = ALLOCA_N(char, bufferSize); + } + + while (pe < stringEnd) { + if (*pe == '\\') { + unescape = (char *) "?"; + unescape_len = 1; + if (pe > p) { + MEMCPY(buffer, p, char, pe - p); + buffer += pe - p; + } + switch (*++pe) { + case 'n': + unescape = (char *) "\n"; + break; + case 'r': + unescape = (char *) "\r"; + break; + case 't': + unescape = (char *) "\t"; + break; + case '"': + unescape = (char *) "\""; + break; + case '\\': + unescape = (char *) "\\"; + break; + case 'b': + unescape = (char *) "\b"; + break; + case 'f': + unescape = (char *) "\f"; + break; + case 'u': + if (pe > stringEnd - 4) { + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } + rb_enc_raise( + EXC_ENCODING eParserError, + "%u: incomplete unicode character escape sequence at '%s'", __LINE__, p + ); + } else { + UTF32 ch = unescape_unicode((unsigned char *) ++pe); + pe += 3; + if (UNI_SUR_HIGH_START == (ch & 0xFC00)) { + pe++; + if (pe > stringEnd - 6) { + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } + rb_enc_raise( + EXC_ENCODING eParserError, + "%u: incomplete surrogate pair at '%s'", __LINE__, p + ); + } + if (pe[0] == '\\' && pe[1] == 'u') { + UTF32 sur = unescape_unicode((unsigned char *) pe + 2); + ch = (((ch & 0x3F) << 10) | ((((ch >> 6) & 0xF) + 1) << 16) + | (sur & 0x3FF)); + pe += 5; + } else { + unescape = (char *) "?"; + break; + } + } + unescape_len = convert_UTF32_to_UTF8(buf, ch); + unescape = buf; + } + break; + default: + p = pe; + continue; + } + MEMCPY(buffer, unescape, char, unescape_len); + buffer += unescape_len; + p = ++pe; + } else { + pe++; + } + } + + if (pe > p) { + MEMCPY(buffer, p, char, pe - p); + buffer += pe - p; + } + + # ifdef HAVE_RB_ENC_INTERNED_STR + if (intern) { + result = rb_enc_interned_str(bufferStart, (long)(buffer - bufferStart), rb_utf8_encoding()); + } else { + result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart)); + } + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } + # else + result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart)); + + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } + + if (intern) { + # if STR_UMINUS_DEDUPE_FROZEN + // Starting from MRI 2.8 it is preferable to freeze the string + // before deduplication so that it can be interned directly + // otherwise it would be duplicated first which is wasteful. + result = rb_funcall(rb_str_freeze(result), i_uminus, 0); + # elif STR_UMINUS_DEDUPE + // MRI 2.5 and older do not deduplicate strings that are already + // frozen. + result = rb_funcall(result, i_uminus, 0); + # else + result = rb_str_freeze(result); + # endif + } + # endif + + if (symbolize) { + result = rb_str_intern(result); + } + + return result; } -#line 1508 "parser.c" enum {JSON_string_start = 1}; enum {JSON_string_first_final = 8}; enum {JSON_string_error = 0}; enum {JSON_string_en_main = 1}; +static const char MAYBE_UNUSED(_JSON_string_nfa_targs)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_string_nfa_offsets)[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_string_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_string_nfa_pop_trans)[] = { + 0, 0 +}; + -#line 537 "parser.rl" +#line 612 "parser.rl" static int match_i(VALUE regexp, VALUE klass, VALUE memo) { - if (regexp == Qundef) return ST_STOP; - if (RTEST(rb_funcall(klass, i_json_creatable_p, 0)) && - RTEST(rb_funcall(regexp, i_match, 1, rb_ary_entry(memo, 0)))) { - rb_ary_push(memo, klass); - return ST_STOP; - } - return ST_CONTINUE; + if (regexp == Qundef) return ST_STOP; + if (RTEST(rb_funcall(klass, i_json_creatable_p, 0)) && + RTEST(rb_funcall(regexp, i_match, 1, rb_ary_entry(memo, 0)))) { + rb_ary_push(memo, klass); + return ST_STOP; + } + return ST_CONTINUE; } static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result) { - int cs = EVIL; - VALUE match_string; + int cs = EVIL; + VALUE match_string; - *result = rb_str_buf_new(0); -#line 1538 "parser.c" { - cs = JSON_string_start; + cs = (int)JSON_string_start; } -#line 558 "parser.rl" - json->memo = p; + #line 632 "parser.rl" + + json->memo = p; -#line 1546 "parser.c" { - if ( p == pe ) + if ( p == pe ) goto _test_eof; - switch ( cs ) - { -case 1: - if ( (*p) == 34 ) - goto st2; - goto st0; -st0: -cs = 0; - goto _out; -st2: - if ( ++p == pe ) + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 2: + goto st_case_2; + case 8: + goto st_case_8; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + } + goto st_out; + st_case_1: + if ( ( (*( p))) == 34 ) { + goto st2; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + st2: + p+= 1; + if ( p == pe ) goto _test_eof2; -case 2: - switch( (*p) ) { - case 34: goto tr2; - case 92: goto st3; - } - if ( 0 <= (*p) && (*p) <= 31 ) - goto st0; - goto st2; -tr2: -#line 523 "parser.rl" - { - *result = json_string_unescape(*result, json->memo + 1, p); - if (NIL_P(*result)) { - p--; - {p++; cs = 8; goto _out;} - } else { - FORCE_UTF8(*result); - {p = (( p + 1))-1;} - } - } -#line 534 "parser.rl" - { p--; {p++; cs = 8; goto _out;} } - goto st8; -st8: - if ( ++p == pe ) + st_case_2: + switch( ( (*( p))) ) { + case 34: { + goto ctr2; + } + case 92: { + goto st3; + } + } + if ( 0 <= (signed char)(*(p)) && (*(p)) <= 31 ) { + goto st0; + } + { + goto st2; + } + ctr2: + { + #line 599 "parser.rl" + + *result = json_string_unescape(json->memo + 1, p, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names); + if (NIL_P(*result)) { + {p = p - 1; } + {p+= 1; cs = 8; goto _out;} + } else { + {p = (( p + 1))-1;} + + } + } + { + #line 609 "parser.rl" + {p = p - 1; } {p+= 1; cs = 8; goto _out;} } + + goto st8; + st8: + p+= 1; + if ( p == pe ) goto _test_eof8; -case 8: -#line 1589 "parser.c" - goto st0; -st3: - if ( ++p == pe ) + st_case_8: + { + goto st0; + } + st3: + p+= 1; + if ( p == pe ) goto _test_eof3; -case 3: - if ( (*p) == 117 ) - goto st4; - if ( 0 <= (*p) && (*p) <= 31 ) - goto st0; - goto st2; -st4: - if ( ++p == pe ) + st_case_3: + if ( ( (*( p))) == 117 ) { + goto st4; + } + if ( 0 <= (signed char)(*(p)) && (*(p)) <= 31 ) { + goto st0; + } + { + goto st2; + } + st4: + p+= 1; + if ( p == pe ) goto _test_eof4; -case 4: - if ( (*p) < 65 ) { - if ( 48 <= (*p) && (*p) <= 57 ) + st_case_4: + if ( ( (*( p))) < 65 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st5; + } + } else if ( ( (*( p))) > 70 ) { + if ( 97 <= ( (*( p))) && ( (*( p))) <= 102 ) { + goto st5; + } + } else { goto st5; - } else if ( (*p) > 70 ) { - if ( 97 <= (*p) && (*p) <= 102 ) - goto st5; - } else - goto st5; - goto st0; -st5: - if ( ++p == pe ) + } + { + goto st0; + } + st5: + p+= 1; + if ( p == pe ) goto _test_eof5; -case 5: - if ( (*p) < 65 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto st6; - } else if ( (*p) > 70 ) { - if ( 97 <= (*p) && (*p) <= 102 ) + st_case_5: + if ( ( (*( p))) < 65 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st6; + } + } else if ( ( (*( p))) > 70 ) { + if ( 97 <= ( (*( p))) && ( (*( p))) <= 102 ) { + goto st6; + } + } else { goto st6; - } else - goto st6; - goto st0; -st6: - if ( ++p == pe ) + } + { + goto st0; + } + st6: + p+= 1; + if ( p == pe ) goto _test_eof6; -case 6: - if ( (*p) < 65 ) { - if ( 48 <= (*p) && (*p) <= 57 ) + st_case_6: + if ( ( (*( p))) < 65 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st7; + } + } else if ( ( (*( p))) > 70 ) { + if ( 97 <= ( (*( p))) && ( (*( p))) <= 102 ) { + goto st7; + } + } else { goto st7; - } else if ( (*p) > 70 ) { - if ( 97 <= (*p) && (*p) <= 102 ) - goto st7; - } else - goto st7; - goto st0; -st7: - if ( ++p == pe ) + } + { + goto st0; + } + st7: + p+= 1; + if ( p == pe ) goto _test_eof7; -case 7: - if ( (*p) < 65 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto st2; - } else if ( (*p) > 70 ) { - if ( 97 <= (*p) && (*p) <= 102 ) + st_case_7: + if ( ( (*( p))) < 65 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st2; + } + } else if ( ( (*( p))) > 70 ) { + if ( 97 <= ( (*( p))) && ( (*( p))) <= 102 ) { + goto st2; + } + } else { goto st2; - } else - goto st2; - goto st0; + } + { + goto st0; + } + st_out: + _test_eof2: cs = 2; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 634 "parser.rl" + + + if (json->create_additions && RTEST(match_string = json->match_string)) { + VALUE klass; + VALUE memo = rb_ary_new2(2); + rb_ary_push(memo, *result); + rb_hash_foreach(match_string, match_i, memo); + klass = rb_ary_entry(memo, 1); + if (RTEST(klass)) { + *result = rb_funcall(klass, i_json_create, 1, *result); + } + } + + if (cs >= JSON_string_first_final) { + return p + 1; + } else { + return NULL; } - _test_eof2: cs = 2; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - - _test_eof: {} - _out: {} - } - -#line 560 "parser.rl" - - if (json->create_additions && RTEST(match_string = json->match_string)) { - VALUE klass; - VALUE memo = rb_ary_new2(2); - rb_ary_push(memo, *result); - rb_hash_foreach(match_string, match_i, memo); - klass = rb_ary_entry(memo, 1); - if (RTEST(klass)) { - *result = rb_funcall(klass, i_json_create, 1, *result); - } - } - - if (json->symbolize_names && json->parsing_name) { - *result = rb_str_intern(*result); - } else if (RB_TYPE_P(*result, T_STRING)) { - rb_str_resize(*result, RSTRING_LEN(*result)); - } - if (cs >= JSON_string_first_final) { - return p + 1; - } else { - return NULL; - } } /* - * Document-class: JSON::Ext::Parser - * - * This is the JSON parser implemented as a C extension. It can be configured - * to be used by setting - * - * JSON.parser = JSON::Ext::Parser - * - * with the method parser= in JSON. - * - */ +* Document-class: JSON::Ext::Parser +* +* This is the JSON parser implemented as a C extension. It can be configured +* to be used by setting +* +* JSON.parser = JSON::Ext::Parser +* +* with the method parser= in JSON. +* +*/ static VALUE convert_encoding(VALUE source) { -#ifdef HAVE_RUBY_ENCODING_H - rb_encoding *enc = rb_enc_get(source); - if (enc == rb_ascii8bit_encoding()) { - if (OBJ_FROZEN(source)) { - source = rb_str_dup(source); - } - FORCE_UTF8(source); - } else { - source = rb_str_conv_enc(source, rb_enc_get(source), rb_utf8_encoding()); - } -#endif - return source; + #ifdef HAVE_RUBY_ENCODING_H + rb_encoding *enc = rb_enc_get(source); + if (enc == rb_ascii8bit_encoding()) { + if (OBJ_FROZEN(source)) { + source = rb_str_dup(source); + } + FORCE_UTF8(source); + } else { + source = rb_str_conv_enc(source, rb_enc_get(source), rb_utf8_encoding()); + } + #endif + return source; } /* - * call-seq: new(source, opts => {}) - * - * Creates a new JSON::Ext::Parser instance for the string _source_. - * - * Creates a new JSON::Ext::Parser instance for the string _source_. - * - * It will be configured by the _opts_ hash. _opts_ can have the following - * keys: - * - * _opts_ can have the following keys: - * * *max_nesting*: The maximum depth of nesting allowed in the parsed data - * structures. Disable depth checking with :max_nesting => false|nil|0, it - * defaults to 100. - * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in - * defiance of RFC 4627 to be parsed by the Parser. This option defaults to - * false. - * * *symbolize_names*: If set to true, returns symbols for the names - * (keys) in a JSON object. Otherwise strings are returned, which is - * also the default. It's not possible to use this option in - * conjunction with the *create_additions* option. - * * *create_additions*: If set to false, the Parser doesn't create - * additions even if a matching class and create_id was found. This option - * defaults to false. - * * *object_class*: Defaults to Hash - * * *array_class*: Defaults to Array - */ +* call-seq: new(source, opts => {}) +* +* Creates a new JSON::Ext::Parser instance for the string _source_. +* +* Creates a new JSON::Ext::Parser instance for the string _source_. +* +* It will be configured by the _opts_ hash. _opts_ can have the following +* keys: +* +* _opts_ can have the following keys: +* * *max_nesting*: The maximum depth of nesting allowed in the parsed data +* structures. Disable depth checking with :max_nesting => false|nil|0, it +* defaults to 100. +* * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in +* defiance of RFC 4627 to be parsed by the Parser. This option defaults to +* false. +* * *symbolize_names*: If set to true, returns symbols for the names +* (keys) in a JSON object. Otherwise strings are returned, which is +* also the default. It's not possible to use this option in +* conjunction with the *create_additions* option. +* * *create_additions*: If set to false, the Parser doesn't create +* additions even if a matching class and create_id was found. This option +* defaults to false. +* * *object_class*: Defaults to Hash +* * *array_class*: Defaults to Array +*/ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self) { - VALUE source, opts; - GET_PARSER_INIT; - - if (json->Vsource) { - rb_raise(rb_eTypeError, "already initialized instance"); - } -#ifdef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH - rb_scan_args(argc, argv, "1:", &source, &opts); -#else - rb_scan_args(argc, argv, "11", &source, &opts); -#endif - if (!NIL_P(opts)) { -#ifndef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH - opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash"); - if (NIL_P(opts)) { - rb_raise(rb_eArgError, "opts needs to be like a hash"); - } else { -#endif - VALUE tmp = ID2SYM(i_max_nesting); - if (option_given_p(opts, tmp)) { - VALUE max_nesting = rb_hash_aref(opts, tmp); - if (RTEST(max_nesting)) { - Check_Type(max_nesting, T_FIXNUM); - json->max_nesting = FIX2INT(max_nesting); - } else { - json->max_nesting = 0; - } - } else { - json->max_nesting = 100; - } - tmp = ID2SYM(i_allow_nan); - if (option_given_p(opts, tmp)) { - json->allow_nan = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; - } else { - json->allow_nan = 0; - } - tmp = ID2SYM(i_symbolize_names); - if (option_given_p(opts, tmp)) { - json->symbolize_names = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; - } else { - json->symbolize_names = 0; - } - tmp = ID2SYM(i_create_additions); - if (option_given_p(opts, tmp)) { - json->create_additions = RTEST(rb_hash_aref(opts, tmp)); - } else { - json->create_additions = 0; - } - if (json->symbolize_names && json->create_additions) { - rb_raise(rb_eArgError, - "options :symbolize_names and :create_additions cannot be " - " used in conjunction"); - } - tmp = ID2SYM(i_create_id); - if (option_given_p(opts, tmp)) { - json->create_id = rb_hash_aref(opts, tmp); - } else { - json->create_id = rb_funcall(mJSON, i_create_id, 0); - } - tmp = ID2SYM(i_object_class); - if (option_given_p(opts, tmp)) { - json->object_class = rb_hash_aref(opts, tmp); - } else { - json->object_class = Qnil; - } - tmp = ID2SYM(i_array_class); - if (option_given_p(opts, tmp)) { - json->array_class = rb_hash_aref(opts, tmp); - } else { - json->array_class = Qnil; - } - tmp = ID2SYM(i_decimal_class); - if (option_given_p(opts, tmp)) { - json->decimal_class = rb_hash_aref(opts, tmp); - } else { - json->decimal_class = Qnil; - } - tmp = ID2SYM(i_match_string); - if (option_given_p(opts, tmp)) { - VALUE match_string = rb_hash_aref(opts, tmp); - json->match_string = RTEST(match_string) ? match_string : Qnil; - } else { - json->match_string = Qnil; - } -#ifndef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH - } -#endif - } else { - json->max_nesting = 100; - json->allow_nan = 0; - json->create_additions = 0; - json->create_id = rb_funcall(mJSON, i_create_id, 0); - json->object_class = Qnil; - json->array_class = Qnil; - json->decimal_class = Qnil; - } - source = convert_encoding(StringValue(source)); - StringValue(source); - json->len = RSTRING_LEN(source); - json->source = RSTRING_PTR(source);; - json->Vsource = source; - return self; + VALUE source, opts; + GET_PARSER_INIT; + + if (json->Vsource) { + rb_raise(rb_eTypeError, "already initialized instance"); + } + #ifdef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH + rb_scan_args(argc, argv, "1:", &source, &opts); + #else + rb_scan_args(argc, argv, "11", &source, &opts); + #endif + if (!NIL_P(opts)) { + #ifndef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH + opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash"); + if (NIL_P(opts)) { + rb_raise(rb_eArgError, "opts needs to be like a hash"); + } else { + #endif + VALUE tmp = ID2SYM(i_max_nesting); + if (option_given_p(opts, tmp)) { + VALUE max_nesting = rb_hash_aref(opts, tmp); + if (RTEST(max_nesting)) { + Check_Type(max_nesting, T_FIXNUM); + json->max_nesting = FIX2INT(max_nesting); + } else { + json->max_nesting = 0; + } + } else { + json->max_nesting = 100; + } + tmp = ID2SYM(i_allow_nan); + if (option_given_p(opts, tmp)) { + json->allow_nan = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; + } else { + json->allow_nan = 0; + } + tmp = ID2SYM(i_symbolize_names); + if (option_given_p(opts, tmp)) { + json->symbolize_names = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; + } else { + json->symbolize_names = 0; + } + tmp = ID2SYM(i_freeze); + if (option_given_p(opts, tmp)) { + json->freeze = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; + } else { + json->freeze = 0; + } + tmp = ID2SYM(i_create_additions); + if (option_given_p(opts, tmp)) { + json->create_additions = RTEST(rb_hash_aref(opts, tmp)); + } else { + json->create_additions = 0; + } + if (json->symbolize_names && json->create_additions) { + rb_raise(rb_eArgError, + "options :symbolize_names and :create_additions cannot be " + " used in conjunction"); + } + tmp = ID2SYM(i_create_id); + if (option_given_p(opts, tmp)) { + json->create_id = rb_hash_aref(opts, tmp); + } else { + json->create_id = rb_funcall(mJSON, i_create_id, 0); + } + tmp = ID2SYM(i_object_class); + if (option_given_p(opts, tmp)) { + json->object_class = rb_hash_aref(opts, tmp); + } else { + json->object_class = Qnil; + } + tmp = ID2SYM(i_array_class); + if (option_given_p(opts, tmp)) { + json->array_class = rb_hash_aref(opts, tmp); + } else { + json->array_class = Qnil; + } + tmp = ID2SYM(i_decimal_class); + if (option_given_p(opts, tmp)) { + json->decimal_class = rb_hash_aref(opts, tmp); + } else { + json->decimal_class = Qnil; + } + tmp = ID2SYM(i_match_string); + if (option_given_p(opts, tmp)) { + VALUE match_string = rb_hash_aref(opts, tmp); + json->match_string = RTEST(match_string) ? match_string : Qnil; + } else { + json->match_string = Qnil; + } + #ifndef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH + } + #endif + } else { + json->max_nesting = 100; + json->allow_nan = 0; + json->create_additions = 0; + json->create_id = rb_funcall(mJSON, i_create_id, 0); + json->object_class = Qnil; + json->array_class = Qnil; + json->decimal_class = Qnil; + } + source = convert_encoding(StringValue(source)); + StringValue(source); + json->len = RSTRING_LEN(source); + json->source = RSTRING_PTR(source);; + json->Vsource = source; + return self; } -#line 1852 "parser.c" enum {JSON_start = 1}; enum {JSON_first_final = 10}; enum {JSON_error = 0}; enum {JSON_en_main = 1}; +static const char MAYBE_UNUSED(_JSON_nfa_targs)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_nfa_offsets)[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_nfa_pop_trans)[] = { + 0, 0 +}; + -#line 760 "parser.rl" +#line 835 "parser.rl" /* - * call-seq: parse() - * - * Parses the current JSON text _source_ and returns the complete data - * structure as a result. - */ +* call-seq: parse() +* +* Parses the current JSON text _source_ and returns the complete data +* structure as a result. +*/ static VALUE cParser_parse(VALUE self) { - char *p, *pe; - int cs = EVIL; - VALUE result = Qnil; - GET_PARSER; + char *p, *pe; + int cs = EVIL; + VALUE result = Qnil; + GET_PARSER; -#line 1877 "parser.c" { - cs = JSON_start; + cs = (int)JSON_start; } -#line 776 "parser.rl" - p = json->source; - pe = p + json->len; + #line 851 "parser.rl" + + p = json->source; + pe = p + json->len; -#line 1886 "parser.c" { - if ( p == pe ) + if ( p == pe ) goto _test_eof; - switch ( cs ) - { -st1: - if ( ++p == pe ) + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 10: + goto st_case_10; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + case 8: + goto st_case_8; + case 9: + goto st_case_9; + } + goto st_out; + st1: + p+= 1; + if ( p == pe ) goto _test_eof1; -case 1: - switch( (*p) ) { - case 13: goto st1; - case 32: goto st1; - case 34: goto tr2; - case 45: goto tr2; - case 47: goto st6; - case 73: goto tr2; - case 78: goto tr2; - case 91: goto tr2; - case 102: goto tr2; - case 110: goto tr2; - case 116: goto tr2; - case 123: goto tr2; - } - if ( (*p) > 10 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2; - } else if ( (*p) >= 9 ) - goto st1; - goto st0; -st0: -cs = 0; - goto _out; -tr2: -#line 752 "parser.rl" - { - char *np = JSON_parse_value(json, p, pe, &result, 0); - if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;} - } - goto st10; -st10: - if ( ++p == pe ) - goto _test_eof10; -case 10: -#line 1930 "parser.c" - switch( (*p) ) { - case 13: goto st10; - case 32: goto st10; - case 47: goto st2; - } - if ( 9 <= (*p) && (*p) <= 10 ) + st_case_1: + switch( ( (*( p))) ) { + case 13: { + goto st1; + } + case 32: { + goto st1; + } + case 34: { + goto ctr2; + } + case 45: { + goto ctr2; + } + case 47: { + goto st6; + } + case 73: { + goto ctr2; + } + case 78: { + goto ctr2; + } + case 91: { + goto ctr2; + } + case 102: { + goto ctr2; + } + case 110: { + goto ctr2; + } + case 116: { + goto ctr2; + } + case 123: { + goto ctr2; + } + } + if ( ( (*( p))) > 10 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto ctr2; + } + } else if ( ( (*( p))) >= 9 ) { + goto st1; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + ctr2: + { + #line 827 "parser.rl" + + char *np = JSON_parse_value(json, p, pe, &result, 0); + if (np == NULL) { {p = p - 1; } {p+= 1; cs = 10; goto _out;} } else {p = (( np))-1;} + + } + goto st10; - goto st0; -st2: - if ( ++p == pe ) + st10: + p+= 1; + if ( p == pe ) + goto _test_eof10; + st_case_10: + switch( ( (*( p))) ) { + case 13: { + goto st10; + } + case 32: { + goto st10; + } + case 47: { + goto st2; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st10; + } + { + goto st0; + } + st2: + p+= 1; + if ( p == pe ) goto _test_eof2; -case 2: - switch( (*p) ) { - case 42: goto st3; - case 47: goto st5; - } - goto st0; -st3: - if ( ++p == pe ) + st_case_2: + switch( ( (*( p))) ) { + case 42: { + goto st3; + } + case 47: { + goto st5; + } + } + { + goto st0; + } + st3: + p+= 1; + if ( p == pe ) goto _test_eof3; -case 3: - if ( (*p) == 42 ) - goto st4; - goto st3; -st4: - if ( ++p == pe ) + st_case_3: + if ( ( (*( p))) == 42 ) { + goto st4; + } + { + goto st3; + } + st4: + p+= 1; + if ( p == pe ) goto _test_eof4; -case 4: - switch( (*p) ) { - case 42: goto st4; - case 47: goto st10; - } - goto st3; -st5: - if ( ++p == pe ) + st_case_4: + switch( ( (*( p))) ) { + case 42: { + goto st4; + } + case 47: { + goto st10; + } + } + { + goto st3; + } + st5: + p+= 1; + if ( p == pe ) goto _test_eof5; -case 5: - if ( (*p) == 10 ) - goto st10; - goto st5; -st6: - if ( ++p == pe ) + st_case_5: + if ( ( (*( p))) == 10 ) { + goto st10; + } + { + goto st5; + } + st6: + p+= 1; + if ( p == pe ) goto _test_eof6; -case 6: - switch( (*p) ) { - case 42: goto st7; - case 47: goto st9; - } - goto st0; -st7: - if ( ++p == pe ) + st_case_6: + switch( ( (*( p))) ) { + case 42: { + goto st7; + } + case 47: { + goto st9; + } + } + { + goto st0; + } + st7: + p+= 1; + if ( p == pe ) goto _test_eof7; -case 7: - if ( (*p) == 42 ) - goto st8; - goto st7; -st8: - if ( ++p == pe ) + st_case_7: + if ( ( (*( p))) == 42 ) { + goto st8; + } + { + goto st7; + } + st8: + p+= 1; + if ( p == pe ) goto _test_eof8; -case 8: - switch( (*p) ) { - case 42: goto st8; - case 47: goto st1; - } - goto st7; -st9: - if ( ++p == pe ) + st_case_8: + switch( ( (*( p))) ) { + case 42: { + goto st8; + } + case 47: { + goto st1; + } + } + { + goto st7; + } + st9: + p+= 1; + if ( p == pe ) goto _test_eof9; -case 9: - if ( (*p) == 10 ) - goto st1; - goto st9; + st_case_9: + if ( ( (*( p))) == 10 ) { + goto st1; + } + { + goto st9; + } + st_out: + _test_eof1: cs = 1; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 854 "parser.rl" + + + if (cs >= JSON_first_final && p == pe) { + return result; + } else { + rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p); + return Qnil; } - _test_eof1: cs = 1; goto _test_eof; - _test_eof10: cs = 10; goto _test_eof; - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof9: cs = 9; goto _test_eof; - - _test_eof: {} - _out: {} - } - -#line 779 "parser.rl" - - if (cs >= JSON_first_final && p == pe) { - return result; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p); - return Qnil; - } } static void JSON_mark(void *ptr) { - JSON_Parser *json = ptr; - rb_gc_mark_maybe(json->Vsource); - rb_gc_mark_maybe(json->create_id); - rb_gc_mark_maybe(json->object_class); - rb_gc_mark_maybe(json->array_class); - rb_gc_mark_maybe(json->decimal_class); - rb_gc_mark_maybe(json->match_string); + JSON_Parser *json = ptr; + rb_gc_mark_maybe(json->Vsource); + rb_gc_mark_maybe(json->create_id); + rb_gc_mark_maybe(json->object_class); + rb_gc_mark_maybe(json->array_class); + rb_gc_mark_maybe(json->decimal_class); + rb_gc_mark_maybe(json->match_string); } static void JSON_free(void *ptr) { - JSON_Parser *json = ptr; - fbuffer_free(json->fbuffer); - ruby_xfree(json); + JSON_Parser *json = ptr; + fbuffer_free(json->fbuffer); + ruby_xfree(json); } static size_t JSON_memsize(const void *ptr) { - const JSON_Parser *json = ptr; - return sizeof(*json) + FBUFFER_CAPA(json->fbuffer); + const JSON_Parser *json = ptr; + return sizeof(*json) + FBUFFER_CAPA(json->fbuffer); } #ifdef NEW_TYPEDDATA_WRAPPER static const rb_data_type_t JSON_Parser_type = { - "JSON/Parser", - {JSON_mark, JSON_free, JSON_memsize,}, -#ifdef RUBY_TYPED_FREE_IMMEDIATELY - 0, 0, - RUBY_TYPED_FREE_IMMEDIATELY, -#endif + "JSON/Parser", + {JSON_mark, JSON_free, JSON_memsize,}, + #ifdef RUBY_TYPED_FREE_IMMEDIATELY + 0, 0, + RUBY_TYPED_FREE_IMMEDIATELY, + #endif }; #endif static VALUE cJSON_parser_s_allocate(VALUE klass) { - JSON_Parser *json; - VALUE obj = TypedData_Make_Struct(klass, JSON_Parser, &JSON_Parser_type, json); - json->fbuffer = fbuffer_alloc(0); - return obj; + JSON_Parser *json; + VALUE obj = TypedData_Make_Struct(klass, JSON_Parser, &JSON_Parser_type, json); + json->fbuffer = fbuffer_alloc(0); + return obj; } /* - * call-seq: source() - * - * Returns a copy of the current _source_ string, that was used to construct - * this Parser. - */ +* call-seq: source() +* +* Returns a copy of the current _source_ string, that was used to construct +* this Parser. +*/ static VALUE cParser_source(VALUE self) { - GET_PARSER; - return rb_str_dup(json->Vsource); + GET_PARSER; + return rb_str_dup(json->Vsource); } void Init_parser(void) { -#undef rb_intern - rb_require("json/common"); - mJSON = rb_define_module("JSON"); - mExt = rb_define_module_under(mJSON, "Ext"); - cParser = rb_define_class_under(mExt, "Parser", rb_cObject); - eParserError = rb_path2class("JSON::ParserError"); - eNestingError = rb_path2class("JSON::NestingError"); - rb_gc_register_mark_object(eParserError); - rb_gc_register_mark_object(eNestingError); - rb_define_alloc_func(cParser, cJSON_parser_s_allocate); - rb_define_method(cParser, "initialize", cParser_initialize, -1); - rb_define_method(cParser, "parse", cParser_parse, 0); - rb_define_method(cParser, "source", cParser_source, 0); - - CNaN = rb_const_get(mJSON, rb_intern("NaN")); - rb_gc_register_mark_object(CNaN); - - CInfinity = rb_const_get(mJSON, rb_intern("Infinity")); - rb_gc_register_mark_object(CInfinity); - - CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity")); - rb_gc_register_mark_object(CMinusInfinity); - - i_json_creatable_p = rb_intern("json_creatable?"); - i_json_create = rb_intern("json_create"); - i_create_id = rb_intern("create_id"); - i_create_additions = rb_intern("create_additions"); - i_chr = rb_intern("chr"); - i_max_nesting = rb_intern("max_nesting"); - i_allow_nan = rb_intern("allow_nan"); - i_symbolize_names = rb_intern("symbolize_names"); - i_object_class = rb_intern("object_class"); - i_array_class = rb_intern("array_class"); - i_decimal_class = rb_intern("decimal_class"); - i_match = rb_intern("match"); - i_match_string = rb_intern("match_string"); - i_key_p = rb_intern("key?"); - i_deep_const_get = rb_intern("deep_const_get"); - i_aset = rb_intern("[]="); - i_aref = rb_intern("[]"); - i_leftshift = rb_intern("<<"); - i_new = rb_intern("new"); - i_BigDecimal = rb_intern("BigDecimal"); + #ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); + #endif + + #undef rb_intern + rb_require("json/common"); + mJSON = rb_define_module("JSON"); + mExt = rb_define_module_under(mJSON, "Ext"); + cParser = rb_define_class_under(mExt, "Parser", rb_cObject); + eParserError = rb_path2class("JSON::ParserError"); + eNestingError = rb_path2class("JSON::NestingError"); + rb_gc_register_mark_object(eParserError); + rb_gc_register_mark_object(eNestingError); + rb_define_alloc_func(cParser, cJSON_parser_s_allocate); + rb_define_method(cParser, "initialize", cParser_initialize, -1); + rb_define_method(cParser, "parse", cParser_parse, 0); + rb_define_method(cParser, "source", cParser_source, 0); + + CNaN = rb_const_get(mJSON, rb_intern("NaN")); + rb_gc_register_mark_object(CNaN); + + CInfinity = rb_const_get(mJSON, rb_intern("Infinity")); + rb_gc_register_mark_object(CInfinity); + + CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity")); + rb_gc_register_mark_object(CMinusInfinity); + + i_json_creatable_p = rb_intern("json_creatable?"); + i_json_create = rb_intern("json_create"); + i_create_id = rb_intern("create_id"); + i_create_additions = rb_intern("create_additions"); + i_chr = rb_intern("chr"); + i_max_nesting = rb_intern("max_nesting"); + i_allow_nan = rb_intern("allow_nan"); + i_symbolize_names = rb_intern("symbolize_names"); + i_object_class = rb_intern("object_class"); + i_array_class = rb_intern("array_class"); + i_decimal_class = rb_intern("decimal_class"); + i_match = rb_intern("match"); + i_match_string = rb_intern("match_string"); + i_key_p = rb_intern("key?"); + i_deep_const_get = rb_intern("deep_const_get"); + i_aset = rb_intern("[]="); + i_aref = rb_intern("[]"); + i_leftshift = rb_intern("<<"); + i_new = rb_intern("new"); + i_try_convert = rb_intern("try_convert"); + i_freeze = rb_intern("freeze"); + i_uminus = rb_intern("-@"); } /* - * Local variables: - * mode: c - * c-file-style: ruby - * indent-tabs-mode: nil - * End: - */ +* Local variables: +* mode: c +* c-file-style: ruby +* indent-tabs-mode: nil +* End: +*/ diff --git a/ruby/ext/json/parser/parser.h b/ruby/ext/json/parser/parser.h index e6cf77902..92ed3fdc5 100644 --- a/ruby/ext/json/parser/parser.h +++ b/ruby/ext/json/parser/parser.h @@ -13,6 +13,10 @@ #include "st.h" #endif +#ifndef MAYBE_UNUSED +# define MAYBE_UNUSED(x) x +#endif + #define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key)) /* unicode */ @@ -37,6 +41,7 @@ typedef struct JSON_ParserStruct { int allow_nan; int parsing_name; int symbolize_names; + int freeze; VALUE object_class; VALUE array_class; VALUE decimal_class; @@ -62,7 +67,7 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result); static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result); static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting); -static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd); +static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize); static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result); static VALUE convert_encoding(VALUE source); static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self); diff --git a/ruby/ext/json/parser/parser.rl b/ruby/ext/json/parser/parser.rl index 6b38bb283..f7be1a5ac 100644 --- a/ruby/ext/json/parser/parser.rl +++ b/ruby/ext/json/parser/parser.rl @@ -89,13 +89,12 @@ static int convert_UTF32_to_UTF8(char *buf, UTF32 ch) static VALUE mJSON, mExt, cParser, eParserError, eNestingError; static VALUE CNaN, CInfinity, CMinusInfinity; -static VALUE cBigDecimal = Qundef; static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions, i_chr, i_max_nesting, i_allow_nan, i_symbolize_names, i_object_class, i_array_class, i_decimal_class, i_key_p, i_deep_const_get, i_match, i_match_string, i_aset, i_aref, - i_leftshift, i_new, i_BigDecimal; + i_leftshift, i_new, i_try_convert, i_freeze, i_uminus; %%{ machine JSON_common; @@ -138,6 +137,7 @@ static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions, fhold; fbreak; } else { if (NIL_P(json->object_class)) { + OBJ_FREEZE(last_name); rb_hash_aset(*result, last_name, v); } else { rb_funcall(*result, i_aset, 2, last_name, v); @@ -289,6 +289,10 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul %% write init; %% write exec; + if (json->freeze) { + OBJ_FREEZE(*result); + } + if (cs >= JSON_value_first_final) { return p; } else { @@ -340,19 +344,6 @@ static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *res ) (^[0-9Ee.\-]? @exit ); }%% -static int is_bigdecimal_class(VALUE obj) -{ - if (cBigDecimal == Qundef) { - if (rb_const_defined(rb_cObject, i_BigDecimal)) { - cBigDecimal = rb_const_get_at(rb_cObject, i_BigDecimal); - } - else { - return 0; - } - } - return obj == cBigDecimal; -} - static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result) { int cs = EVIL; @@ -362,21 +353,46 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul %% write exec; if (cs >= JSON_float_first_final) { + VALUE mod = Qnil; + ID method_id = 0; + if (rb_respond_to(json->decimal_class, i_try_convert)) { + mod = json->decimal_class; + method_id = i_try_convert; + } else if (rb_respond_to(json->decimal_class, i_new)) { + mod = json->decimal_class; + method_id = i_new; + } else if (RB_TYPE_P(json->decimal_class, T_CLASS)) { + VALUE name = rb_class_name(json->decimal_class); + const char *name_cstr = RSTRING_PTR(name); + const char *last_colon = strrchr(name_cstr, ':'); + if (last_colon) { + const char *mod_path_end = last_colon - 1; + VALUE mod_path = rb_str_substr(name, 0, mod_path_end - name_cstr); + mod = rb_path_to_class(mod_path); + + const char *method_name_beg = last_colon + 1; + long before_len = method_name_beg - name_cstr; + long len = RSTRING_LEN(name) - before_len; + VALUE method_name = rb_str_substr(name, before_len, len); + method_id = SYM2ID(rb_str_intern(method_name)); + } else { + mod = rb_mKernel; + method_id = SYM2ID(rb_str_intern(name)); + } + } + long len = p - json->memo; fbuffer_clear(json->fbuffer); fbuffer_append(json->fbuffer, json->memo, len); fbuffer_append_char(json->fbuffer, '\0'); - if (NIL_P(json->decimal_class)) { - *result = rb_float_new(rb_cstr_to_dbl(FBUFFER_PTR(json->fbuffer), 1)); + + if (method_id) { + VALUE text = rb_str_new2(FBUFFER_PTR(json->fbuffer)); + *result = rb_funcallv(mod, method_id, 1, &text); } else { - VALUE text; - text = rb_str_new2(FBUFFER_PTR(json->fbuffer)); - if (is_bigdecimal_class(json->decimal_class)) { - *result = rb_funcall(Qnil, i_BigDecimal, 1, text); - } else { - *result = rb_funcall(json->decimal_class, i_new, 1, text); - } + *result = DBL2NUM(rb_cstr_to_dbl(FBUFFER_PTR(json->fbuffer), 1)); } + return p + 1; } else { return NULL; @@ -436,17 +452,29 @@ static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *resul } } -static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd) +static const size_t MAX_STACK_BUFFER_SIZE = 128; +static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize) { - char *p = string, *pe = string, *unescape; + VALUE result = Qnil; + size_t bufferSize = stringEnd - string; + char *p = string, *pe = string, *unescape, *bufferStart, *buffer; int unescape_len; char buf[4]; + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + bufferStart = buffer = ALLOC_N(char, bufferSize); + } else { + bufferStart = buffer = ALLOCA_N(char, bufferSize); + } + while (pe < stringEnd) { if (*pe == '\\') { unescape = (char *) "?"; unescape_len = 1; - if (pe > p) rb_str_buf_cat(result, p, pe - p); + if (pe > p) { + MEMCPY(buffer, p, char, pe - p); + buffer += pe - p; + } switch (*++pe) { case 'n': unescape = (char *) "\n"; @@ -471,6 +499,9 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd) break; case 'u': if (pe > stringEnd - 4) { + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } rb_enc_raise( EXC_ENCODING eParserError, "%u: incomplete unicode character escape sequence at '%s'", __LINE__, p @@ -481,6 +512,9 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd) if (UNI_SUR_HIGH_START == (ch & 0xFC00)) { pe++; if (pe > stringEnd - 6) { + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } rb_enc_raise( EXC_ENCODING eParserError, "%u: incomplete surrogate pair at '%s'", __LINE__, p @@ -504,13 +538,55 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd) p = pe; continue; } - rb_str_buf_cat(result, unescape, unescape_len); + MEMCPY(buffer, unescape, char, unescape_len); + buffer += unescape_len; p = ++pe; } else { pe++; } } - rb_str_buf_cat(result, p, pe - p); + + if (pe > p) { + MEMCPY(buffer, p, char, pe - p); + buffer += pe - p; + } + +# ifdef HAVE_RB_ENC_INTERNED_STR + if (intern) { + result = rb_enc_interned_str(bufferStart, (long)(buffer - bufferStart), rb_utf8_encoding()); + } else { + result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart)); + } + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } +# else + result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart)); + + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } + + if (intern) { + # if STR_UMINUS_DEDUPE_FROZEN + // Starting from MRI 2.8 it is preferable to freeze the string + // before deduplication so that it can be interned directly + // otherwise it would be duplicated first which is wasteful. + result = rb_funcall(rb_str_freeze(result), i_uminus, 0); + # elif STR_UMINUS_DEDUPE + // MRI 2.5 and older do not deduplicate strings that are already + // frozen. + result = rb_funcall(result, i_uminus, 0); + # else + result = rb_str_freeze(result); + # endif + } +# endif + + if (symbolize) { + result = rb_str_intern(result); + } + return result; } @@ -521,12 +597,11 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd) write data; action parse_string { - *result = json_string_unescape(*result, json->memo + 1, p); + *result = json_string_unescape(json->memo + 1, p, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names); if (NIL_P(*result)) { fhold; fbreak; } else { - FORCE_UTF8(*result); fexec p + 1; } } @@ -553,7 +628,6 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu int cs = EVIL; VALUE match_string; - *result = rb_str_buf_new(0); %% write init; json->memo = p; %% write exec; @@ -569,11 +643,6 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu } } - if (json->symbolize_names && json->parsing_name) { - *result = rb_str_intern(*result); - } else if (RB_TYPE_P(*result, T_STRING)) { - rb_str_resize(*result, RSTRING_LEN(*result)); - } if (cs >= JSON_string_first_final) { return p + 1; } else { @@ -680,6 +749,12 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self) } else { json->symbolize_names = 0; } + tmp = ID2SYM(i_freeze); + if (option_given_p(opts, tmp)) { + json->freeze = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; + } else { + json->freeze = 0; + } tmp = ID2SYM(i_create_additions); if (option_given_p(opts, tmp)) { json->create_additions = RTEST(rb_hash_aref(opts, tmp)); @@ -842,6 +917,10 @@ static VALUE cParser_source(VALUE self) void Init_parser(void) { +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + #undef rb_intern rb_require("json/common"); mJSON = rb_define_module("JSON"); @@ -884,7 +963,9 @@ void Init_parser(void) i_aref = rb_intern("[]"); i_leftshift = rb_intern("<<"); i_new = rb_intern("new"); - i_BigDecimal = rb_intern("BigDecimal"); + i_try_convert = rb_intern("try_convert"); + i_freeze = rb_intern("freeze"); + i_uminus = rb_intern("-@"); } /* diff --git a/ruby/ext/json/parser/prereq.mk b/ruby/ext/json/parser/prereq.mk index 37bacc338..fc5916905 100644 --- a/ruby/ext/json/parser/prereq.mk +++ b/ruby/ext/json/parser/prereq.mk @@ -6,6 +6,8 @@ RAGEL = ragel $(RAGEL) -G2 $< $(BASERUBY) -pli -e '$$_.sub!(/[ \t]+$$/, "")' \ -e '$$_.sub!(/^static const int (JSON_.*=.*);$$/, "enum {\\1};")' \ - -e '$$_ = "/* This file is automatically generated from parser.rl by using ragel */" + $$_ if $$. == 1' $@ + -e '$$_.sub!(/^(static const char) (_JSON(?:_\w+)?_nfa_\w+)(?=\[\] =)/, "\\1 MAYBE_UNUSED(\\2)")' \ + -e '$$_.sub!(/0 <= ([\( ]+\*[\( ]*p\)+) && \1 <= 31/, "0 <= (signed char)(*(p)) && (*(p)) <= 31")' \ + -e '$$_ = "/* This file is automatically generated from parser.rl by using ragel */\n" + $$_ if $$. == 1' $@ parser.c: diff --git a/ruby/ext/monitor/depend b/ruby/ext/monitor/depend index 89efe1766..a8fca7f0b 100644 --- a/ruby/ext/monitor/depend +++ b/ruby/ext/monitor/depend @@ -3,8 +3,155 @@ monitor.o: $(RUBY_EXTCONF_H) monitor.o: $(arch_hdrdir)/ruby/config.h monitor.o: $(hdrdir)/ruby/assert.h monitor.o: $(hdrdir)/ruby/backward.h +monitor.o: $(hdrdir)/ruby/backward/2/assume.h +monitor.o: $(hdrdir)/ruby/backward/2/attributes.h +monitor.o: $(hdrdir)/ruby/backward/2/bool.h +monitor.o: $(hdrdir)/ruby/backward/2/inttypes.h +monitor.o: $(hdrdir)/ruby/backward/2/limits.h +monitor.o: $(hdrdir)/ruby/backward/2/long_long.h +monitor.o: $(hdrdir)/ruby/backward/2/stdalign.h +monitor.o: $(hdrdir)/ruby/backward/2/stdarg.h monitor.o: $(hdrdir)/ruby/defines.h monitor.o: $(hdrdir)/ruby/intern.h +monitor.o: $(hdrdir)/ruby/internal/anyargs.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/char.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/double.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/int.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/long.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/short.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +monitor.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +monitor.o: $(hdrdir)/ruby/internal/assume.h +monitor.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +monitor.o: $(hdrdir)/ruby/internal/attr/artificial.h +monitor.o: $(hdrdir)/ruby/internal/attr/cold.h +monitor.o: $(hdrdir)/ruby/internal/attr/const.h +monitor.o: $(hdrdir)/ruby/internal/attr/constexpr.h +monitor.o: $(hdrdir)/ruby/internal/attr/deprecated.h +monitor.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +monitor.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +monitor.o: $(hdrdir)/ruby/internal/attr/error.h +monitor.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +monitor.o: $(hdrdir)/ruby/internal/attr/forceinline.h +monitor.o: $(hdrdir)/ruby/internal/attr/format.h +monitor.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +monitor.o: $(hdrdir)/ruby/internal/attr/noalias.h +monitor.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +monitor.o: $(hdrdir)/ruby/internal/attr/noexcept.h +monitor.o: $(hdrdir)/ruby/internal/attr/noinline.h +monitor.o: $(hdrdir)/ruby/internal/attr/nonnull.h +monitor.o: $(hdrdir)/ruby/internal/attr/noreturn.h +monitor.o: $(hdrdir)/ruby/internal/attr/pure.h +monitor.o: $(hdrdir)/ruby/internal/attr/restrict.h +monitor.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +monitor.o: $(hdrdir)/ruby/internal/attr/warning.h +monitor.o: $(hdrdir)/ruby/internal/attr/weakref.h +monitor.o: $(hdrdir)/ruby/internal/cast.h +monitor.o: $(hdrdir)/ruby/internal/compiler_is.h +monitor.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +monitor.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +monitor.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +monitor.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +monitor.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +monitor.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +monitor.o: $(hdrdir)/ruby/internal/compiler_since.h +monitor.o: $(hdrdir)/ruby/internal/config.h +monitor.o: $(hdrdir)/ruby/internal/constant_p.h +monitor.o: $(hdrdir)/ruby/internal/core.h +monitor.o: $(hdrdir)/ruby/internal/core/rarray.h +monitor.o: $(hdrdir)/ruby/internal/core/rbasic.h +monitor.o: $(hdrdir)/ruby/internal/core/rbignum.h +monitor.o: $(hdrdir)/ruby/internal/core/rclass.h +monitor.o: $(hdrdir)/ruby/internal/core/rdata.h +monitor.o: $(hdrdir)/ruby/internal/core/rfile.h +monitor.o: $(hdrdir)/ruby/internal/core/rhash.h +monitor.o: $(hdrdir)/ruby/internal/core/robject.h +monitor.o: $(hdrdir)/ruby/internal/core/rregexp.h +monitor.o: $(hdrdir)/ruby/internal/core/rstring.h +monitor.o: $(hdrdir)/ruby/internal/core/rstruct.h +monitor.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +monitor.o: $(hdrdir)/ruby/internal/ctype.h +monitor.o: $(hdrdir)/ruby/internal/dllexport.h +monitor.o: $(hdrdir)/ruby/internal/dosish.h +monitor.o: $(hdrdir)/ruby/internal/error.h +monitor.o: $(hdrdir)/ruby/internal/eval.h +monitor.o: $(hdrdir)/ruby/internal/event.h +monitor.o: $(hdrdir)/ruby/internal/fl_type.h +monitor.o: $(hdrdir)/ruby/internal/gc.h +monitor.o: $(hdrdir)/ruby/internal/glob.h +monitor.o: $(hdrdir)/ruby/internal/globals.h +monitor.o: $(hdrdir)/ruby/internal/has/attribute.h +monitor.o: $(hdrdir)/ruby/internal/has/builtin.h +monitor.o: $(hdrdir)/ruby/internal/has/c_attribute.h +monitor.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +monitor.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +monitor.o: $(hdrdir)/ruby/internal/has/extension.h +monitor.o: $(hdrdir)/ruby/internal/has/feature.h +monitor.o: $(hdrdir)/ruby/internal/has/warning.h +monitor.o: $(hdrdir)/ruby/internal/intern/array.h +monitor.o: $(hdrdir)/ruby/internal/intern/bignum.h +monitor.o: $(hdrdir)/ruby/internal/intern/class.h +monitor.o: $(hdrdir)/ruby/internal/intern/compar.h +monitor.o: $(hdrdir)/ruby/internal/intern/complex.h +monitor.o: $(hdrdir)/ruby/internal/intern/cont.h +monitor.o: $(hdrdir)/ruby/internal/intern/dir.h +monitor.o: $(hdrdir)/ruby/internal/intern/enum.h +monitor.o: $(hdrdir)/ruby/internal/intern/enumerator.h +monitor.o: $(hdrdir)/ruby/internal/intern/error.h +monitor.o: $(hdrdir)/ruby/internal/intern/eval.h +monitor.o: $(hdrdir)/ruby/internal/intern/file.h +monitor.o: $(hdrdir)/ruby/internal/intern/gc.h +monitor.o: $(hdrdir)/ruby/internal/intern/hash.h +monitor.o: $(hdrdir)/ruby/internal/intern/io.h +monitor.o: $(hdrdir)/ruby/internal/intern/load.h +monitor.o: $(hdrdir)/ruby/internal/intern/marshal.h +monitor.o: $(hdrdir)/ruby/internal/intern/numeric.h +monitor.o: $(hdrdir)/ruby/internal/intern/object.h +monitor.o: $(hdrdir)/ruby/internal/intern/parse.h +monitor.o: $(hdrdir)/ruby/internal/intern/proc.h +monitor.o: $(hdrdir)/ruby/internal/intern/process.h +monitor.o: $(hdrdir)/ruby/internal/intern/random.h +monitor.o: $(hdrdir)/ruby/internal/intern/range.h +monitor.o: $(hdrdir)/ruby/internal/intern/rational.h +monitor.o: $(hdrdir)/ruby/internal/intern/re.h +monitor.o: $(hdrdir)/ruby/internal/intern/ruby.h +monitor.o: $(hdrdir)/ruby/internal/intern/select.h +monitor.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +monitor.o: $(hdrdir)/ruby/internal/intern/signal.h +monitor.o: $(hdrdir)/ruby/internal/intern/sprintf.h +monitor.o: $(hdrdir)/ruby/internal/intern/string.h +monitor.o: $(hdrdir)/ruby/internal/intern/struct.h +monitor.o: $(hdrdir)/ruby/internal/intern/thread.h +monitor.o: $(hdrdir)/ruby/internal/intern/time.h +monitor.o: $(hdrdir)/ruby/internal/intern/variable.h +monitor.o: $(hdrdir)/ruby/internal/intern/vm.h +monitor.o: $(hdrdir)/ruby/internal/interpreter.h +monitor.o: $(hdrdir)/ruby/internal/iterator.h +monitor.o: $(hdrdir)/ruby/internal/memory.h +monitor.o: $(hdrdir)/ruby/internal/method.h +monitor.o: $(hdrdir)/ruby/internal/module.h +monitor.o: $(hdrdir)/ruby/internal/newobj.h +monitor.o: $(hdrdir)/ruby/internal/rgengc.h +monitor.o: $(hdrdir)/ruby/internal/scan_args.h +monitor.o: $(hdrdir)/ruby/internal/special_consts.h +monitor.o: $(hdrdir)/ruby/internal/static_assert.h +monitor.o: $(hdrdir)/ruby/internal/stdalign.h +monitor.o: $(hdrdir)/ruby/internal/stdbool.h +monitor.o: $(hdrdir)/ruby/internal/symbol.h +monitor.o: $(hdrdir)/ruby/internal/value.h +monitor.o: $(hdrdir)/ruby/internal/value_type.h +monitor.o: $(hdrdir)/ruby/internal/variable.h +monitor.o: $(hdrdir)/ruby/internal/warning_push.h +monitor.o: $(hdrdir)/ruby/internal/xmalloc.h monitor.o: $(hdrdir)/ruby/missing.h monitor.o: $(hdrdir)/ruby/ruby.h monitor.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/monitor/lib/monitor.rb b/ruby/ext/monitor/lib/monitor.rb index 1883cb72f..11c5ac17d 100644 --- a/ruby/ext/monitor/lib/monitor.rb +++ b/ruby/ext/monitor/lib/monitor.rb @@ -17,7 +17,7 @@ # structure. # # You can read more about the general principles on the Wikipedia page for -# Monitors[http://en.wikipedia.org/wiki/Monitor_%28synchronization%29] +# Monitors[https://en.wikipedia.org/wiki/Monitor_%28synchronization%29] # # == Examples # @@ -220,7 +220,7 @@ def new_cond # Use extend MonitorMixin or include MonitorMixin instead # of this constructor. Have look at the examples above to understand how to # use this module. - def initialize(*args) + def initialize(...) super mon_initialize end @@ -230,7 +230,7 @@ def initialize(*args) def mon_initialize if defined?(@mon_data) if defined?(@mon_initialized_by_new_cond) - return # already initalized. + return # already initialized. elsif @mon_data_owner_object_id == self.object_id raise ThreadError, "already initialized" end diff --git a/ruby/ext/monitor/monitor.c b/ruby/ext/monitor/monitor.c index 256fc4d7d..10209cf2a 100644 --- a/ruby/ext/monitor/monitor.c +++ b/ruby/ext/monitor/monitor.c @@ -53,7 +53,7 @@ monitor_ptr(VALUE monitor) static int mc_owner_p(struct rb_monitor *mc) { - return mc->owner == rb_thread_current(); + return mc->owner == rb_fiber_current(); } static VALUE @@ -65,7 +65,7 @@ monitor_try_enter(VALUE monitor) if (!rb_mutex_trylock(mc->mutex)) { return Qfalse; } - RB_OBJ_WRITE(monitor, &mc->owner, rb_thread_current()); + RB_OBJ_WRITE(monitor, &mc->owner, rb_fiber_current()); mc->count = 0; } mc->count += 1; @@ -78,7 +78,7 @@ monitor_enter(VALUE monitor) struct rb_monitor *mc = monitor_ptr(monitor); if (!mc_owner_p(mc)) { rb_mutex_lock(mc->mutex); - RB_OBJ_WRITE(monitor, &mc->owner, rb_thread_current()); + RB_OBJ_WRITE(monitor, &mc->owner, rb_fiber_current()); mc->count = 0; } mc->count++; @@ -90,7 +90,7 @@ monitor_check_owner(VALUE monitor) { struct rb_monitor *mc = monitor_ptr(monitor); if (!mc_owner_p(mc)) { - rb_raise(rb_eThreadError, "current thread not owner"); + rb_raise(rb_eThreadError, "current fiber not owner"); } return Qnil; } @@ -149,8 +149,8 @@ monitor_wait_for_cond_body(VALUE v) struct wait_for_cond_data *data = (struct wait_for_cond_data *)v; struct rb_monitor *mc = monitor_ptr(data->monitor); // cond.wait(monitor.mutex, timeout) - rb_funcall(data->cond, rb_intern("wait"), 2, mc->mutex, data->timeout); - return Qtrue; + VALUE signaled = rb_funcall(data->cond, rb_intern("wait"), 2, mc->mutex, data->timeout); + return RTEST(signaled) ? Qtrue : Qfalse; } static VALUE @@ -161,7 +161,7 @@ monitor_enter_for_cond(VALUE v) struct wait_for_cond_data *data = (struct wait_for_cond_data *)v; struct rb_monitor *mc = monitor_ptr(data->monitor); - RB_OBJ_WRITE(data->monitor, &mc->owner, rb_thread_current()); + RB_OBJ_WRITE(data->monitor, &mc->owner, rb_fiber_current()); mc->count = NUM2LONG(data->count); return Qnil; } @@ -203,6 +203,10 @@ monitor_synchronize(VALUE monitor) void Init_monitor(void) { +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + VALUE rb_cMonitor = rb_define_class("Monitor", rb_cObject); rb_define_alloc_func(rb_cMonitor, monitor_alloc); @@ -216,6 +220,6 @@ Init_monitor(void) rb_define_method(rb_cMonitor, "mon_check_owner", monitor_check_owner, 0); rb_define_method(rb_cMonitor, "mon_owned?", monitor_owned_p, 0); - /* internal methods for MonitorMixin::ConditionalVariable */ + /* internal methods for MonitorMixin::ConditionVariable */ rb_define_method(rb_cMonitor, "wait_for_cond", monitor_wait_for_cond, 2); } diff --git a/ruby/ext/nkf/depend b/ruby/ext/nkf/depend index 82580ff7f..8951e0b3d 100644 --- a/ruby/ext/nkf/depend +++ b/ruby/ext/nkf/depend @@ -7,9 +7,165 @@ nkf.o: $(RUBY_EXTCONF_H) nkf.o: $(arch_hdrdir)/ruby/config.h nkf.o: $(hdrdir)/ruby/assert.h nkf.o: $(hdrdir)/ruby/backward.h +nkf.o: $(hdrdir)/ruby/backward/2/assume.h +nkf.o: $(hdrdir)/ruby/backward/2/attributes.h +nkf.o: $(hdrdir)/ruby/backward/2/bool.h +nkf.o: $(hdrdir)/ruby/backward/2/inttypes.h +nkf.o: $(hdrdir)/ruby/backward/2/limits.h +nkf.o: $(hdrdir)/ruby/backward/2/long_long.h +nkf.o: $(hdrdir)/ruby/backward/2/stdalign.h +nkf.o: $(hdrdir)/ruby/backward/2/stdarg.h nkf.o: $(hdrdir)/ruby/defines.h nkf.o: $(hdrdir)/ruby/encoding.h nkf.o: $(hdrdir)/ruby/intern.h +nkf.o: $(hdrdir)/ruby/internal/anyargs.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/char.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/double.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/int.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/long.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/short.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +nkf.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +nkf.o: $(hdrdir)/ruby/internal/assume.h +nkf.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +nkf.o: $(hdrdir)/ruby/internal/attr/artificial.h +nkf.o: $(hdrdir)/ruby/internal/attr/cold.h +nkf.o: $(hdrdir)/ruby/internal/attr/const.h +nkf.o: $(hdrdir)/ruby/internal/attr/constexpr.h +nkf.o: $(hdrdir)/ruby/internal/attr/deprecated.h +nkf.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +nkf.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +nkf.o: $(hdrdir)/ruby/internal/attr/error.h +nkf.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +nkf.o: $(hdrdir)/ruby/internal/attr/forceinline.h +nkf.o: $(hdrdir)/ruby/internal/attr/format.h +nkf.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +nkf.o: $(hdrdir)/ruby/internal/attr/noalias.h +nkf.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +nkf.o: $(hdrdir)/ruby/internal/attr/noexcept.h +nkf.o: $(hdrdir)/ruby/internal/attr/noinline.h +nkf.o: $(hdrdir)/ruby/internal/attr/nonnull.h +nkf.o: $(hdrdir)/ruby/internal/attr/noreturn.h +nkf.o: $(hdrdir)/ruby/internal/attr/pure.h +nkf.o: $(hdrdir)/ruby/internal/attr/restrict.h +nkf.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +nkf.o: $(hdrdir)/ruby/internal/attr/warning.h +nkf.o: $(hdrdir)/ruby/internal/attr/weakref.h +nkf.o: $(hdrdir)/ruby/internal/cast.h +nkf.o: $(hdrdir)/ruby/internal/compiler_is.h +nkf.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +nkf.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +nkf.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +nkf.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +nkf.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +nkf.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +nkf.o: $(hdrdir)/ruby/internal/compiler_since.h +nkf.o: $(hdrdir)/ruby/internal/config.h +nkf.o: $(hdrdir)/ruby/internal/constant_p.h +nkf.o: $(hdrdir)/ruby/internal/core.h +nkf.o: $(hdrdir)/ruby/internal/core/rarray.h +nkf.o: $(hdrdir)/ruby/internal/core/rbasic.h +nkf.o: $(hdrdir)/ruby/internal/core/rbignum.h +nkf.o: $(hdrdir)/ruby/internal/core/rclass.h +nkf.o: $(hdrdir)/ruby/internal/core/rdata.h +nkf.o: $(hdrdir)/ruby/internal/core/rfile.h +nkf.o: $(hdrdir)/ruby/internal/core/rhash.h +nkf.o: $(hdrdir)/ruby/internal/core/robject.h +nkf.o: $(hdrdir)/ruby/internal/core/rregexp.h +nkf.o: $(hdrdir)/ruby/internal/core/rstring.h +nkf.o: $(hdrdir)/ruby/internal/core/rstruct.h +nkf.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +nkf.o: $(hdrdir)/ruby/internal/ctype.h +nkf.o: $(hdrdir)/ruby/internal/dllexport.h +nkf.o: $(hdrdir)/ruby/internal/dosish.h +nkf.o: $(hdrdir)/ruby/internal/encoding/coderange.h +nkf.o: $(hdrdir)/ruby/internal/encoding/ctype.h +nkf.o: $(hdrdir)/ruby/internal/encoding/encoding.h +nkf.o: $(hdrdir)/ruby/internal/encoding/pathname.h +nkf.o: $(hdrdir)/ruby/internal/encoding/re.h +nkf.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +nkf.o: $(hdrdir)/ruby/internal/encoding/string.h +nkf.o: $(hdrdir)/ruby/internal/encoding/symbol.h +nkf.o: $(hdrdir)/ruby/internal/encoding/transcode.h +nkf.o: $(hdrdir)/ruby/internal/error.h +nkf.o: $(hdrdir)/ruby/internal/eval.h +nkf.o: $(hdrdir)/ruby/internal/event.h +nkf.o: $(hdrdir)/ruby/internal/fl_type.h +nkf.o: $(hdrdir)/ruby/internal/gc.h +nkf.o: $(hdrdir)/ruby/internal/glob.h +nkf.o: $(hdrdir)/ruby/internal/globals.h +nkf.o: $(hdrdir)/ruby/internal/has/attribute.h +nkf.o: $(hdrdir)/ruby/internal/has/builtin.h +nkf.o: $(hdrdir)/ruby/internal/has/c_attribute.h +nkf.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +nkf.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +nkf.o: $(hdrdir)/ruby/internal/has/extension.h +nkf.o: $(hdrdir)/ruby/internal/has/feature.h +nkf.o: $(hdrdir)/ruby/internal/has/warning.h +nkf.o: $(hdrdir)/ruby/internal/intern/array.h +nkf.o: $(hdrdir)/ruby/internal/intern/bignum.h +nkf.o: $(hdrdir)/ruby/internal/intern/class.h +nkf.o: $(hdrdir)/ruby/internal/intern/compar.h +nkf.o: $(hdrdir)/ruby/internal/intern/complex.h +nkf.o: $(hdrdir)/ruby/internal/intern/cont.h +nkf.o: $(hdrdir)/ruby/internal/intern/dir.h +nkf.o: $(hdrdir)/ruby/internal/intern/enum.h +nkf.o: $(hdrdir)/ruby/internal/intern/enumerator.h +nkf.o: $(hdrdir)/ruby/internal/intern/error.h +nkf.o: $(hdrdir)/ruby/internal/intern/eval.h +nkf.o: $(hdrdir)/ruby/internal/intern/file.h +nkf.o: $(hdrdir)/ruby/internal/intern/gc.h +nkf.o: $(hdrdir)/ruby/internal/intern/hash.h +nkf.o: $(hdrdir)/ruby/internal/intern/io.h +nkf.o: $(hdrdir)/ruby/internal/intern/load.h +nkf.o: $(hdrdir)/ruby/internal/intern/marshal.h +nkf.o: $(hdrdir)/ruby/internal/intern/numeric.h +nkf.o: $(hdrdir)/ruby/internal/intern/object.h +nkf.o: $(hdrdir)/ruby/internal/intern/parse.h +nkf.o: $(hdrdir)/ruby/internal/intern/proc.h +nkf.o: $(hdrdir)/ruby/internal/intern/process.h +nkf.o: $(hdrdir)/ruby/internal/intern/random.h +nkf.o: $(hdrdir)/ruby/internal/intern/range.h +nkf.o: $(hdrdir)/ruby/internal/intern/rational.h +nkf.o: $(hdrdir)/ruby/internal/intern/re.h +nkf.o: $(hdrdir)/ruby/internal/intern/ruby.h +nkf.o: $(hdrdir)/ruby/internal/intern/select.h +nkf.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +nkf.o: $(hdrdir)/ruby/internal/intern/signal.h +nkf.o: $(hdrdir)/ruby/internal/intern/sprintf.h +nkf.o: $(hdrdir)/ruby/internal/intern/string.h +nkf.o: $(hdrdir)/ruby/internal/intern/struct.h +nkf.o: $(hdrdir)/ruby/internal/intern/thread.h +nkf.o: $(hdrdir)/ruby/internal/intern/time.h +nkf.o: $(hdrdir)/ruby/internal/intern/variable.h +nkf.o: $(hdrdir)/ruby/internal/intern/vm.h +nkf.o: $(hdrdir)/ruby/internal/interpreter.h +nkf.o: $(hdrdir)/ruby/internal/iterator.h +nkf.o: $(hdrdir)/ruby/internal/memory.h +nkf.o: $(hdrdir)/ruby/internal/method.h +nkf.o: $(hdrdir)/ruby/internal/module.h +nkf.o: $(hdrdir)/ruby/internal/newobj.h +nkf.o: $(hdrdir)/ruby/internal/rgengc.h +nkf.o: $(hdrdir)/ruby/internal/scan_args.h +nkf.o: $(hdrdir)/ruby/internal/special_consts.h +nkf.o: $(hdrdir)/ruby/internal/static_assert.h +nkf.o: $(hdrdir)/ruby/internal/stdalign.h +nkf.o: $(hdrdir)/ruby/internal/stdbool.h +nkf.o: $(hdrdir)/ruby/internal/symbol.h +nkf.o: $(hdrdir)/ruby/internal/value.h +nkf.o: $(hdrdir)/ruby/internal/value_type.h +nkf.o: $(hdrdir)/ruby/internal/variable.h +nkf.o: $(hdrdir)/ruby/internal/warning_push.h +nkf.o: $(hdrdir)/ruby/internal/xmalloc.h nkf.o: $(hdrdir)/ruby/missing.h nkf.o: $(hdrdir)/ruby/onigmo.h nkf.o: $(hdrdir)/ruby/oniguruma.h diff --git a/ruby/ext/nkf/nkf-utf8/config.h b/ruby/ext/nkf/nkf-utf8/config.h index 51dc2a515..36898c0b4 100644 --- a/ruby/ext/nkf/nkf-utf8/config.h +++ b/ruby/ext/nkf/nkf-utf8/config.h @@ -30,7 +30,7 @@ /* --exec-in, --exec-out option * require pipe, fork, execvp and so on. * please undef this on MS-DOS, MinGW - * this is still buggy arround child process + * this is still buggy around child process */ /* #define EXEC_IO */ diff --git a/ruby/ext/nkf/nkf-utf8/nkf.c b/ruby/ext/nkf/nkf-utf8/nkf.c index cc438a50d..08b372ffa 100644 --- a/ruby/ext/nkf/nkf-utf8/nkf.c +++ b/ruby/ext/nkf/nkf-utf8/nkf.c @@ -581,7 +581,7 @@ static const unsigned char cv[]= { 0x00,0x00}; -/* X0201 kana conversion table for daguten */ +/* X0201 kana conversion table for dakuten */ /* 90-9F A0-DF */ static const unsigned char dv[]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, @@ -602,7 +602,7 @@ static const unsigned char dv[]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00}; -/* X0201 kana conversion table for han-daguten */ +/* X0201 kana conversion table for han-dakuten */ /* 90-9F A0-DF */ static const unsigned char ev[]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, @@ -623,7 +623,7 @@ static const unsigned char ev[]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00}; -/* X0201 kana to X0213 conversion table for han-daguten */ +/* X0201 kana to X0213 conversion table for han-dakuten */ /* 90-9F A0-DF */ static const unsigned char ev_x0213[]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, @@ -3817,7 +3817,7 @@ oconv_newline(void (*func)(nkf_char, nkf_char)) LF new line SP space - This fold algorthm does not preserve heading space in a line. + This fold algorithm does not preserve heading space in a line. This is the main difference from fmt. */ @@ -6787,7 +6787,7 @@ options(unsigned char *cp) case 'S': /* Shift_JIS input */ input_encoding = nkf_enc_from_index(SHIFT_JIS); continue; - case 'Z': /* Convert X0208 alphabet to asii */ + case 'Z': /* Convert X0208 alphabet to ascii */ /* alpha_f bit:0 Convert JIS X 0208 Alphabet to ASCII bit:1 Convert Kankaku to one space diff --git a/ruby/ext/nkf/nkf-utf8/nkf.h b/ruby/ext/nkf/nkf-utf8/nkf.h index cd3037601..b3a520da5 100644 --- a/ruby/ext/nkf/nkf-utf8/nkf.h +++ b/ruby/ext/nkf/nkf-utf8/nkf.h @@ -16,8 +16,8 @@ #define X0201_DEFAULT TRUE #endif -#if DEFAULT_NEWLINE == 0x0D0A -#elif DEFAULT_NEWLINE == 0x0D +#if defined(DEFAULT_NEWLINE) && DEFAULT_NEWLINE == 0x0D0A +#elif defined(DEFAULT_NEWLINE) && DEFAULT_NEWLINE == 0x0D #else #define DEFAULT_NEWLINE 0x0A #endif diff --git a/ruby/ext/nkf/nkf.c b/ruby/ext/nkf/nkf.c index 37717e479..533f9b782 100644 --- a/ruby/ext/nkf/nkf.c +++ b/ruby/ext/nkf/nkf.c @@ -358,7 +358,7 @@ rb_nkf_guess(VALUE obj, VALUE src) * * [-MB] MIME encode Base64 stream. * - * [-MQ] Perfome quoted encoding. + * [-MQ] Perform quoted encoding. * * === -l * @@ -458,7 +458,7 @@ rb_nkf_guess(VALUE obj, VALUE src) * with this and -x option, nkf can be used as UTF converter. * (In other words, without this and -x option, nkf doesn't save some characters) * - * When nkf convert string which related to path, you should use this opion. + * When nkf convert string which related to path, you should use this option. * * === --cap-input * diff --git a/ruby/ext/nkf/nkf.gemspec b/ruby/ext/nkf/nkf.gemspec new file mode 100644 index 000000000..2d77c71ff --- /dev/null +++ b/ruby/ext/nkf/nkf.gemspec @@ -0,0 +1,24 @@ +Gem::Specification.new do |spec| + spec.name = "nkf" + spec.version = "0.1.1" + spec.authors = ["NARUSE Yui"] + spec.email = ["naruse@airemix.jp"] + + spec.summary = %q{Ruby extension for Network Kanji Filter} + spec.description = %q{Ruby extension for Network Kanji Filter} + spec.homepage = "https://github.com/ruby/nkf" + spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0") + spec.licenses = ["Ruby", "BSD-2-Clause"] + + spec.metadata["homepage_uri"] = spec.homepage + spec.metadata["source_code_uri"] = spec.homepage + + # Specify which files should be added to the gem when it is released. + # The `git ls-files -z` loads the files in the RubyGem that have been added into git. + spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do + `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } + end + spec.bindir = "exe" + spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.require_paths = ["lib"] +end diff --git a/ruby/ext/objspace/depend b/ruby/ext/objspace/depend index 18be4fe8a..bea8ba231 100644 --- a/ruby/ext/objspace/depend +++ b/ruby/ext/objspace/depend @@ -1,12 +1,158 @@ # AUTOGENERATED DEPENDENCIES START object_tracing.o: $(RUBY_EXTCONF_H) object_tracing.o: $(arch_hdrdir)/ruby/config.h -object_tracing.o: $(hdrdir)/ruby.h object_tracing.o: $(hdrdir)/ruby/assert.h object_tracing.o: $(hdrdir)/ruby/backward.h +object_tracing.o: $(hdrdir)/ruby/backward/2/assume.h +object_tracing.o: $(hdrdir)/ruby/backward/2/attributes.h +object_tracing.o: $(hdrdir)/ruby/backward/2/bool.h +object_tracing.o: $(hdrdir)/ruby/backward/2/inttypes.h +object_tracing.o: $(hdrdir)/ruby/backward/2/limits.h +object_tracing.o: $(hdrdir)/ruby/backward/2/long_long.h +object_tracing.o: $(hdrdir)/ruby/backward/2/stdalign.h +object_tracing.o: $(hdrdir)/ruby/backward/2/stdarg.h object_tracing.o: $(hdrdir)/ruby/debug.h object_tracing.o: $(hdrdir)/ruby/defines.h object_tracing.o: $(hdrdir)/ruby/intern.h +object_tracing.o: $(hdrdir)/ruby/internal/anyargs.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/char.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/double.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/int.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/long.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/short.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +object_tracing.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +object_tracing.o: $(hdrdir)/ruby/internal/assume.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/artificial.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/cold.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/const.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/constexpr.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/deprecated.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/error.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/forceinline.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/format.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/noalias.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/noexcept.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/noinline.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/nonnull.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/noreturn.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/pure.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/restrict.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/warning.h +object_tracing.o: $(hdrdir)/ruby/internal/attr/weakref.h +object_tracing.o: $(hdrdir)/ruby/internal/cast.h +object_tracing.o: $(hdrdir)/ruby/internal/compiler_is.h +object_tracing.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +object_tracing.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +object_tracing.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +object_tracing.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +object_tracing.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +object_tracing.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +object_tracing.o: $(hdrdir)/ruby/internal/compiler_since.h +object_tracing.o: $(hdrdir)/ruby/internal/config.h +object_tracing.o: $(hdrdir)/ruby/internal/constant_p.h +object_tracing.o: $(hdrdir)/ruby/internal/core.h +object_tracing.o: $(hdrdir)/ruby/internal/core/rarray.h +object_tracing.o: $(hdrdir)/ruby/internal/core/rbasic.h +object_tracing.o: $(hdrdir)/ruby/internal/core/rbignum.h +object_tracing.o: $(hdrdir)/ruby/internal/core/rclass.h +object_tracing.o: $(hdrdir)/ruby/internal/core/rdata.h +object_tracing.o: $(hdrdir)/ruby/internal/core/rfile.h +object_tracing.o: $(hdrdir)/ruby/internal/core/rhash.h +object_tracing.o: $(hdrdir)/ruby/internal/core/robject.h +object_tracing.o: $(hdrdir)/ruby/internal/core/rregexp.h +object_tracing.o: $(hdrdir)/ruby/internal/core/rstring.h +object_tracing.o: $(hdrdir)/ruby/internal/core/rstruct.h +object_tracing.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +object_tracing.o: $(hdrdir)/ruby/internal/ctype.h +object_tracing.o: $(hdrdir)/ruby/internal/dllexport.h +object_tracing.o: $(hdrdir)/ruby/internal/dosish.h +object_tracing.o: $(hdrdir)/ruby/internal/error.h +object_tracing.o: $(hdrdir)/ruby/internal/eval.h +object_tracing.o: $(hdrdir)/ruby/internal/event.h +object_tracing.o: $(hdrdir)/ruby/internal/fl_type.h +object_tracing.o: $(hdrdir)/ruby/internal/gc.h +object_tracing.o: $(hdrdir)/ruby/internal/glob.h +object_tracing.o: $(hdrdir)/ruby/internal/globals.h +object_tracing.o: $(hdrdir)/ruby/internal/has/attribute.h +object_tracing.o: $(hdrdir)/ruby/internal/has/builtin.h +object_tracing.o: $(hdrdir)/ruby/internal/has/c_attribute.h +object_tracing.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +object_tracing.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +object_tracing.o: $(hdrdir)/ruby/internal/has/extension.h +object_tracing.o: $(hdrdir)/ruby/internal/has/feature.h +object_tracing.o: $(hdrdir)/ruby/internal/has/warning.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/array.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/bignum.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/class.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/compar.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/complex.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/cont.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/dir.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/enum.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/enumerator.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/error.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/eval.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/file.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/gc.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/hash.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/io.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/load.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/marshal.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/numeric.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/object.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/parse.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/proc.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/process.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/random.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/range.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/rational.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/re.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/ruby.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/select.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/signal.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/sprintf.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/string.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/struct.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/thread.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/time.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/variable.h +object_tracing.o: $(hdrdir)/ruby/internal/intern/vm.h +object_tracing.o: $(hdrdir)/ruby/internal/interpreter.h +object_tracing.o: $(hdrdir)/ruby/internal/iterator.h +object_tracing.o: $(hdrdir)/ruby/internal/memory.h +object_tracing.o: $(hdrdir)/ruby/internal/method.h +object_tracing.o: $(hdrdir)/ruby/internal/module.h +object_tracing.o: $(hdrdir)/ruby/internal/newobj.h +object_tracing.o: $(hdrdir)/ruby/internal/rgengc.h +object_tracing.o: $(hdrdir)/ruby/internal/scan_args.h +object_tracing.o: $(hdrdir)/ruby/internal/special_consts.h +object_tracing.o: $(hdrdir)/ruby/internal/static_assert.h +object_tracing.o: $(hdrdir)/ruby/internal/stdalign.h +object_tracing.o: $(hdrdir)/ruby/internal/stdbool.h +object_tracing.o: $(hdrdir)/ruby/internal/symbol.h +object_tracing.o: $(hdrdir)/ruby/internal/value.h +object_tracing.o: $(hdrdir)/ruby/internal/value_type.h +object_tracing.o: $(hdrdir)/ruby/internal/variable.h +object_tracing.o: $(hdrdir)/ruby/internal/warning_push.h +object_tracing.o: $(hdrdir)/ruby/internal/xmalloc.h object_tracing.o: $(hdrdir)/ruby/missing.h object_tracing.o: $(hdrdir)/ruby/ruby.h object_tracing.o: $(hdrdir)/ruby/st.h @@ -16,12 +162,169 @@ object_tracing.o: object_tracing.c object_tracing.o: objspace.h objspace.o: $(RUBY_EXTCONF_H) objspace.o: $(arch_hdrdir)/ruby/config.h -objspace.o: $(hdrdir)/ruby.h objspace.o: $(hdrdir)/ruby/assert.h objspace.o: $(hdrdir)/ruby/backward.h +objspace.o: $(hdrdir)/ruby/backward/2/assume.h +objspace.o: $(hdrdir)/ruby/backward/2/attributes.h +objspace.o: $(hdrdir)/ruby/backward/2/bool.h +objspace.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +objspace.o: $(hdrdir)/ruby/backward/2/inttypes.h +objspace.o: $(hdrdir)/ruby/backward/2/limits.h +objspace.o: $(hdrdir)/ruby/backward/2/long_long.h +objspace.o: $(hdrdir)/ruby/backward/2/stdalign.h +objspace.o: $(hdrdir)/ruby/backward/2/stdarg.h objspace.o: $(hdrdir)/ruby/defines.h objspace.o: $(hdrdir)/ruby/encoding.h objspace.o: $(hdrdir)/ruby/intern.h +objspace.o: $(hdrdir)/ruby/internal/anyargs.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/char.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/double.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/int.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/long.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/short.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +objspace.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +objspace.o: $(hdrdir)/ruby/internal/assume.h +objspace.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +objspace.o: $(hdrdir)/ruby/internal/attr/artificial.h +objspace.o: $(hdrdir)/ruby/internal/attr/cold.h +objspace.o: $(hdrdir)/ruby/internal/attr/const.h +objspace.o: $(hdrdir)/ruby/internal/attr/constexpr.h +objspace.o: $(hdrdir)/ruby/internal/attr/deprecated.h +objspace.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +objspace.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +objspace.o: $(hdrdir)/ruby/internal/attr/error.h +objspace.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +objspace.o: $(hdrdir)/ruby/internal/attr/forceinline.h +objspace.o: $(hdrdir)/ruby/internal/attr/format.h +objspace.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +objspace.o: $(hdrdir)/ruby/internal/attr/noalias.h +objspace.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +objspace.o: $(hdrdir)/ruby/internal/attr/noexcept.h +objspace.o: $(hdrdir)/ruby/internal/attr/noinline.h +objspace.o: $(hdrdir)/ruby/internal/attr/nonnull.h +objspace.o: $(hdrdir)/ruby/internal/attr/noreturn.h +objspace.o: $(hdrdir)/ruby/internal/attr/pure.h +objspace.o: $(hdrdir)/ruby/internal/attr/restrict.h +objspace.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +objspace.o: $(hdrdir)/ruby/internal/attr/warning.h +objspace.o: $(hdrdir)/ruby/internal/attr/weakref.h +objspace.o: $(hdrdir)/ruby/internal/cast.h +objspace.o: $(hdrdir)/ruby/internal/compiler_is.h +objspace.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +objspace.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +objspace.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +objspace.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +objspace.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +objspace.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +objspace.o: $(hdrdir)/ruby/internal/compiler_since.h +objspace.o: $(hdrdir)/ruby/internal/config.h +objspace.o: $(hdrdir)/ruby/internal/constant_p.h +objspace.o: $(hdrdir)/ruby/internal/core.h +objspace.o: $(hdrdir)/ruby/internal/core/rarray.h +objspace.o: $(hdrdir)/ruby/internal/core/rbasic.h +objspace.o: $(hdrdir)/ruby/internal/core/rbignum.h +objspace.o: $(hdrdir)/ruby/internal/core/rclass.h +objspace.o: $(hdrdir)/ruby/internal/core/rdata.h +objspace.o: $(hdrdir)/ruby/internal/core/rfile.h +objspace.o: $(hdrdir)/ruby/internal/core/rhash.h +objspace.o: $(hdrdir)/ruby/internal/core/rmatch.h +objspace.o: $(hdrdir)/ruby/internal/core/robject.h +objspace.o: $(hdrdir)/ruby/internal/core/rregexp.h +objspace.o: $(hdrdir)/ruby/internal/core/rstring.h +objspace.o: $(hdrdir)/ruby/internal/core/rstruct.h +objspace.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +objspace.o: $(hdrdir)/ruby/internal/ctype.h +objspace.o: $(hdrdir)/ruby/internal/dllexport.h +objspace.o: $(hdrdir)/ruby/internal/dosish.h +objspace.o: $(hdrdir)/ruby/internal/encoding/coderange.h +objspace.o: $(hdrdir)/ruby/internal/encoding/ctype.h +objspace.o: $(hdrdir)/ruby/internal/encoding/encoding.h +objspace.o: $(hdrdir)/ruby/internal/encoding/pathname.h +objspace.o: $(hdrdir)/ruby/internal/encoding/re.h +objspace.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +objspace.o: $(hdrdir)/ruby/internal/encoding/string.h +objspace.o: $(hdrdir)/ruby/internal/encoding/symbol.h +objspace.o: $(hdrdir)/ruby/internal/encoding/transcode.h +objspace.o: $(hdrdir)/ruby/internal/error.h +objspace.o: $(hdrdir)/ruby/internal/eval.h +objspace.o: $(hdrdir)/ruby/internal/event.h +objspace.o: $(hdrdir)/ruby/internal/fl_type.h +objspace.o: $(hdrdir)/ruby/internal/gc.h +objspace.o: $(hdrdir)/ruby/internal/glob.h +objspace.o: $(hdrdir)/ruby/internal/globals.h +objspace.o: $(hdrdir)/ruby/internal/has/attribute.h +objspace.o: $(hdrdir)/ruby/internal/has/builtin.h +objspace.o: $(hdrdir)/ruby/internal/has/c_attribute.h +objspace.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +objspace.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +objspace.o: $(hdrdir)/ruby/internal/has/extension.h +objspace.o: $(hdrdir)/ruby/internal/has/feature.h +objspace.o: $(hdrdir)/ruby/internal/has/warning.h +objspace.o: $(hdrdir)/ruby/internal/intern/array.h +objspace.o: $(hdrdir)/ruby/internal/intern/bignum.h +objspace.o: $(hdrdir)/ruby/internal/intern/class.h +objspace.o: $(hdrdir)/ruby/internal/intern/compar.h +objspace.o: $(hdrdir)/ruby/internal/intern/complex.h +objspace.o: $(hdrdir)/ruby/internal/intern/cont.h +objspace.o: $(hdrdir)/ruby/internal/intern/dir.h +objspace.o: $(hdrdir)/ruby/internal/intern/enum.h +objspace.o: $(hdrdir)/ruby/internal/intern/enumerator.h +objspace.o: $(hdrdir)/ruby/internal/intern/error.h +objspace.o: $(hdrdir)/ruby/internal/intern/eval.h +objspace.o: $(hdrdir)/ruby/internal/intern/file.h +objspace.o: $(hdrdir)/ruby/internal/intern/gc.h +objspace.o: $(hdrdir)/ruby/internal/intern/hash.h +objspace.o: $(hdrdir)/ruby/internal/intern/io.h +objspace.o: $(hdrdir)/ruby/internal/intern/load.h +objspace.o: $(hdrdir)/ruby/internal/intern/marshal.h +objspace.o: $(hdrdir)/ruby/internal/intern/numeric.h +objspace.o: $(hdrdir)/ruby/internal/intern/object.h +objspace.o: $(hdrdir)/ruby/internal/intern/parse.h +objspace.o: $(hdrdir)/ruby/internal/intern/proc.h +objspace.o: $(hdrdir)/ruby/internal/intern/process.h +objspace.o: $(hdrdir)/ruby/internal/intern/random.h +objspace.o: $(hdrdir)/ruby/internal/intern/range.h +objspace.o: $(hdrdir)/ruby/internal/intern/rational.h +objspace.o: $(hdrdir)/ruby/internal/intern/re.h +objspace.o: $(hdrdir)/ruby/internal/intern/ruby.h +objspace.o: $(hdrdir)/ruby/internal/intern/select.h +objspace.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +objspace.o: $(hdrdir)/ruby/internal/intern/signal.h +objspace.o: $(hdrdir)/ruby/internal/intern/sprintf.h +objspace.o: $(hdrdir)/ruby/internal/intern/string.h +objspace.o: $(hdrdir)/ruby/internal/intern/struct.h +objspace.o: $(hdrdir)/ruby/internal/intern/thread.h +objspace.o: $(hdrdir)/ruby/internal/intern/time.h +objspace.o: $(hdrdir)/ruby/internal/intern/variable.h +objspace.o: $(hdrdir)/ruby/internal/intern/vm.h +objspace.o: $(hdrdir)/ruby/internal/interpreter.h +objspace.o: $(hdrdir)/ruby/internal/iterator.h +objspace.o: $(hdrdir)/ruby/internal/memory.h +objspace.o: $(hdrdir)/ruby/internal/method.h +objspace.o: $(hdrdir)/ruby/internal/module.h +objspace.o: $(hdrdir)/ruby/internal/newobj.h +objspace.o: $(hdrdir)/ruby/internal/rgengc.h +objspace.o: $(hdrdir)/ruby/internal/scan_args.h +objspace.o: $(hdrdir)/ruby/internal/special_consts.h +objspace.o: $(hdrdir)/ruby/internal/static_assert.h +objspace.o: $(hdrdir)/ruby/internal/stdalign.h +objspace.o: $(hdrdir)/ruby/internal/stdbool.h +objspace.o: $(hdrdir)/ruby/internal/symbol.h +objspace.o: $(hdrdir)/ruby/internal/value.h +objspace.o: $(hdrdir)/ruby/internal/value_type.h +objspace.o: $(hdrdir)/ruby/internal/variable.h +objspace.o: $(hdrdir)/ruby/internal/warning_push.h +objspace.o: $(hdrdir)/ruby/internal/xmalloc.h objspace.o: $(hdrdir)/ruby/io.h objspace.o: $(hdrdir)/ruby/missing.h objspace.o: $(hdrdir)/ruby/onigmo.h @@ -32,20 +335,188 @@ objspace.o: $(hdrdir)/ruby/ruby.h objspace.o: $(hdrdir)/ruby/st.h objspace.o: $(hdrdir)/ruby/subst.h objspace.o: $(top_srcdir)/gc.h +objspace.o: $(top_srcdir)/id_table.h objspace.o: $(top_srcdir)/internal.h +objspace.o: $(top_srcdir)/internal/array.h +objspace.o: $(top_srcdir)/internal/class.h +objspace.o: $(top_srcdir)/internal/compilers.h +objspace.o: $(top_srcdir)/internal/gc.h +objspace.o: $(top_srcdir)/internal/hash.h +objspace.o: $(top_srcdir)/internal/imemo.h +objspace.o: $(top_srcdir)/internal/sanitizers.h +objspace.o: $(top_srcdir)/internal/serial.h +objspace.o: $(top_srcdir)/internal/static_assert.h +objspace.o: $(top_srcdir)/internal/warnings.h objspace.o: $(top_srcdir)/node.h objspace.o: $(top_srcdir)/symbol.h objspace.o: objspace.c objspace.o: {$(VPATH)}id.h objspace_dump.o: $(RUBY_EXTCONF_H) objspace_dump.o: $(arch_hdrdir)/ruby/config.h -objspace_dump.o: $(hdrdir)/ruby.h objspace_dump.o: $(hdrdir)/ruby/assert.h +objspace_dump.o: $(hdrdir)/ruby/atomic.h objspace_dump.o: $(hdrdir)/ruby/backward.h +objspace_dump.o: $(hdrdir)/ruby/backward/2/assume.h +objspace_dump.o: $(hdrdir)/ruby/backward/2/attributes.h +objspace_dump.o: $(hdrdir)/ruby/backward/2/bool.h +objspace_dump.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +objspace_dump.o: $(hdrdir)/ruby/backward/2/inttypes.h +objspace_dump.o: $(hdrdir)/ruby/backward/2/limits.h +objspace_dump.o: $(hdrdir)/ruby/backward/2/long_long.h +objspace_dump.o: $(hdrdir)/ruby/backward/2/stdalign.h +objspace_dump.o: $(hdrdir)/ruby/backward/2/stdarg.h objspace_dump.o: $(hdrdir)/ruby/debug.h objspace_dump.o: $(hdrdir)/ruby/defines.h objspace_dump.o: $(hdrdir)/ruby/encoding.h objspace_dump.o: $(hdrdir)/ruby/intern.h +objspace_dump.o: $(hdrdir)/ruby/internal/anyargs.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/char.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/double.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/int.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/long.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/short.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +objspace_dump.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +objspace_dump.o: $(hdrdir)/ruby/internal/assume.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/artificial.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/cold.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/const.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/constexpr.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/deprecated.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/error.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/forceinline.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/format.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/noalias.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/noexcept.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/noinline.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/nonnull.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/noreturn.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/pure.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/restrict.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/warning.h +objspace_dump.o: $(hdrdir)/ruby/internal/attr/weakref.h +objspace_dump.o: $(hdrdir)/ruby/internal/cast.h +objspace_dump.o: $(hdrdir)/ruby/internal/compiler_is.h +objspace_dump.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +objspace_dump.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +objspace_dump.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +objspace_dump.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +objspace_dump.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +objspace_dump.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +objspace_dump.o: $(hdrdir)/ruby/internal/compiler_since.h +objspace_dump.o: $(hdrdir)/ruby/internal/config.h +objspace_dump.o: $(hdrdir)/ruby/internal/constant_p.h +objspace_dump.o: $(hdrdir)/ruby/internal/core.h +objspace_dump.o: $(hdrdir)/ruby/internal/core/rarray.h +objspace_dump.o: $(hdrdir)/ruby/internal/core/rbasic.h +objspace_dump.o: $(hdrdir)/ruby/internal/core/rbignum.h +objspace_dump.o: $(hdrdir)/ruby/internal/core/rclass.h +objspace_dump.o: $(hdrdir)/ruby/internal/core/rdata.h +objspace_dump.o: $(hdrdir)/ruby/internal/core/rfile.h +objspace_dump.o: $(hdrdir)/ruby/internal/core/rhash.h +objspace_dump.o: $(hdrdir)/ruby/internal/core/robject.h +objspace_dump.o: $(hdrdir)/ruby/internal/core/rregexp.h +objspace_dump.o: $(hdrdir)/ruby/internal/core/rstring.h +objspace_dump.o: $(hdrdir)/ruby/internal/core/rstruct.h +objspace_dump.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +objspace_dump.o: $(hdrdir)/ruby/internal/ctype.h +objspace_dump.o: $(hdrdir)/ruby/internal/dllexport.h +objspace_dump.o: $(hdrdir)/ruby/internal/dosish.h +objspace_dump.o: $(hdrdir)/ruby/internal/encoding/coderange.h +objspace_dump.o: $(hdrdir)/ruby/internal/encoding/ctype.h +objspace_dump.o: $(hdrdir)/ruby/internal/encoding/encoding.h +objspace_dump.o: $(hdrdir)/ruby/internal/encoding/pathname.h +objspace_dump.o: $(hdrdir)/ruby/internal/encoding/re.h +objspace_dump.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +objspace_dump.o: $(hdrdir)/ruby/internal/encoding/string.h +objspace_dump.o: $(hdrdir)/ruby/internal/encoding/symbol.h +objspace_dump.o: $(hdrdir)/ruby/internal/encoding/transcode.h +objspace_dump.o: $(hdrdir)/ruby/internal/error.h +objspace_dump.o: $(hdrdir)/ruby/internal/eval.h +objspace_dump.o: $(hdrdir)/ruby/internal/event.h +objspace_dump.o: $(hdrdir)/ruby/internal/fl_type.h +objspace_dump.o: $(hdrdir)/ruby/internal/gc.h +objspace_dump.o: $(hdrdir)/ruby/internal/glob.h +objspace_dump.o: $(hdrdir)/ruby/internal/globals.h +objspace_dump.o: $(hdrdir)/ruby/internal/has/attribute.h +objspace_dump.o: $(hdrdir)/ruby/internal/has/builtin.h +objspace_dump.o: $(hdrdir)/ruby/internal/has/c_attribute.h +objspace_dump.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +objspace_dump.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +objspace_dump.o: $(hdrdir)/ruby/internal/has/extension.h +objspace_dump.o: $(hdrdir)/ruby/internal/has/feature.h +objspace_dump.o: $(hdrdir)/ruby/internal/has/warning.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/array.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/bignum.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/class.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/compar.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/complex.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/cont.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/dir.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/enum.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/enumerator.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/error.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/eval.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/file.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/gc.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/hash.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/io.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/load.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/marshal.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/numeric.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/object.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/parse.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/proc.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/process.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/random.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/range.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/rational.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/re.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/ruby.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/select.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/signal.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/sprintf.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/string.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/struct.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/thread.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/time.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/variable.h +objspace_dump.o: $(hdrdir)/ruby/internal/intern/vm.h +objspace_dump.o: $(hdrdir)/ruby/internal/interpreter.h +objspace_dump.o: $(hdrdir)/ruby/internal/iterator.h +objspace_dump.o: $(hdrdir)/ruby/internal/memory.h +objspace_dump.o: $(hdrdir)/ruby/internal/method.h +objspace_dump.o: $(hdrdir)/ruby/internal/module.h +objspace_dump.o: $(hdrdir)/ruby/internal/newobj.h +objspace_dump.o: $(hdrdir)/ruby/internal/rgengc.h +objspace_dump.o: $(hdrdir)/ruby/internal/scan_args.h +objspace_dump.o: $(hdrdir)/ruby/internal/special_consts.h +objspace_dump.o: $(hdrdir)/ruby/internal/static_assert.h +objspace_dump.o: $(hdrdir)/ruby/internal/stdalign.h +objspace_dump.o: $(hdrdir)/ruby/internal/stdbool.h +objspace_dump.o: $(hdrdir)/ruby/internal/symbol.h +objspace_dump.o: $(hdrdir)/ruby/internal/value.h +objspace_dump.o: $(hdrdir)/ruby/internal/value_type.h +objspace_dump.o: $(hdrdir)/ruby/internal/variable.h +objspace_dump.o: $(hdrdir)/ruby/internal/warning_push.h +objspace_dump.o: $(hdrdir)/ruby/internal/xmalloc.h objspace_dump.o: $(hdrdir)/ruby/io.h objspace_dump.o: $(hdrdir)/ruby/missing.h objspace_dump.o: $(hdrdir)/ruby/onigmo.h @@ -54,12 +525,25 @@ objspace_dump.o: $(hdrdir)/ruby/ruby.h objspace_dump.o: $(hdrdir)/ruby/st.h objspace_dump.o: $(hdrdir)/ruby/subst.h objspace_dump.o: $(hdrdir)/ruby/thread_native.h +objspace_dump.o: $(hdrdir)/ruby/util.h objspace_dump.o: $(top_srcdir)/ccan/check_type/check_type.h objspace_dump.o: $(top_srcdir)/ccan/container_of/container_of.h objspace_dump.o: $(top_srcdir)/ccan/list/list.h objspace_dump.o: $(top_srcdir)/ccan/str/str.h +objspace_dump.o: $(top_srcdir)/darray.h objspace_dump.o: $(top_srcdir)/gc.h objspace_dump.o: $(top_srcdir)/internal.h +objspace_dump.o: $(top_srcdir)/internal/array.h +objspace_dump.o: $(top_srcdir)/internal/compilers.h +objspace_dump.o: $(top_srcdir)/internal/gc.h +objspace_dump.o: $(top_srcdir)/internal/hash.h +objspace_dump.o: $(top_srcdir)/internal/imemo.h +objspace_dump.o: $(top_srcdir)/internal/sanitizers.h +objspace_dump.o: $(top_srcdir)/internal/serial.h +objspace_dump.o: $(top_srcdir)/internal/static_assert.h +objspace_dump.o: $(top_srcdir)/internal/string.h +objspace_dump.o: $(top_srcdir)/internal/vm.h +objspace_dump.o: $(top_srcdir)/internal/warnings.h objspace_dump.o: $(top_srcdir)/method.h objspace_dump.o: $(top_srcdir)/node.h objspace_dump.o: $(top_srcdir)/ruby_assert.h diff --git a/ruby/ext/objspace/lib/objspace.rb b/ruby/ext/objspace/lib/objspace.rb new file mode 100644 index 000000000..0298b0646 --- /dev/null +++ b/ruby/ext/objspace/lib/objspace.rb @@ -0,0 +1,91 @@ +# frozen_string_literal: true + +require 'objspace.so' + +module ObjectSpace + class << self + private :_dump + private :_dump_all + end + + module_function + + # call-seq: + # ObjectSpace.dump(obj[, output: :string]) # => "{ ... }" + # ObjectSpace.dump(obj, output: :file) # => # + # ObjectSpace.dump(obj, output: :stdout) # => nil + # + # Dump the contents of a ruby object as JSON. + # + # This method is only expected to work with C Ruby. + # This is an experimental method and is subject to change. + # In particular, the function signature and output format are + # not guaranteed to be compatible in future versions of ruby. + def dump(obj, output: :string) + out = case output + when :file, nil + require 'tempfile' + Tempfile.create(%w(rubyobj .json)) + when :stdout + STDOUT + when :string + +'' + when IO + output + else + raise ArgumentError, "wrong output option: #{output.inspect}" + end + + ret = _dump(obj, out) + return nil if output == :stdout + ret + end + + + # call-seq: + # ObjectSpace.dump_all([output: :file]) # => # + # ObjectSpace.dump_all(output: :stdout) # => nil + # ObjectSpace.dump_all(output: :string) # => "{...}\n{...}\n..." + # ObjectSpace.dump_all(output: + # File.open('heap.json','w')) # => # + # ObjectSpace.dump_all(output: :string, + # since: 42) # => "{...}\n{...}\n..." + # + # Dump the contents of the ruby heap as JSON. + # + # _since_ must be a non-negative integer or +nil+. + # + # If _since_ is a positive integer, only objects of that generation and + # newer generations are dumped. The current generation can be accessed using + # GC::count. + # + # Objects that were allocated without object allocation tracing enabled + # are ignored. See ::trace_object_allocations for more information and + # examples. + # + # If _since_ is omitted or is +nil+, all objects are dumped. + # + # This method is only expected to work with C Ruby. + # This is an experimental method and is subject to change. + # In particular, the function signature and output format are + # not guaranteed to be compatible in future versions of ruby. + def dump_all(output: :file, full: false, since: nil) + out = case output + when :file, nil + require 'tempfile' + Tempfile.create(%w(rubyheap .json)) + when :stdout + STDOUT + when :string + +'' + when IO + output + else + raise ArgumentError, "wrong output option: #{output.inspect}" + end + + ret = _dump_all(out, full, since) + return nil if output == :stdout + ret + end +end diff --git a/ruby/ext/objspace/lib/objspace/trace.rb b/ruby/ext/objspace/lib/objspace/trace.rb new file mode 100644 index 000000000..c23f5a9d5 --- /dev/null +++ b/ruby/ext/objspace/lib/objspace/trace.rb @@ -0,0 +1,45 @@ +# This is a simple tool to enable the object allocation tracer. +# When you have an object of unknown provenance, you can use this +# to investigate where the object in question is created. +# +# = Important notice +# +# This is only for debugging purpose. Do not use this in production. +# Require'ing this file immediately starts tracing the object allocation, +# which brings a large performance overhead. +# +# = Usage +# +# 1. Add `require "objspace/trace"` into your code (or add `-robjspace/trace` into the command line) +# 2. `p obj` will show the allocation site of `obj` +# +# Note: This redefines `Kernel#p` method, but not `Object#inspect`. +# +# = Examples +# +# 1: require "objspace/trace" +# 2: +# 3: obj = "str" +# 4: +# 5: p obj #=> "str" @ test.rb:3 + +require 'objspace.so' + +module Kernel + remove_method :p + define_method(:p) do |*objs| + objs.each do |obj| + file = ObjectSpace.allocation_sourcefile(obj) + line = ObjectSpace.allocation_sourceline(obj) + if file + puts "#{ obj.inspect } @ #{ file }:#{ line }" + else + puts obj.inspect + end + end + end +end + +ObjectSpace.trace_object_allocations_start + +warn "objspace/trace is enabled" diff --git a/ruby/ext/objspace/object_tracing.c b/ruby/ext/objspace/object_tracing.c index a057ac2a9..66d6baa49 100644 --- a/ruby/ext/objspace/object_tracing.c +++ b/ruby/ext/objspace/object_tracing.c @@ -151,6 +151,81 @@ free_values_i(st_data_t key, st_data_t value, st_data_t data) return ST_CONTINUE; } +static void +allocation_info_tracer_mark(void *ptr) +{ + struct traceobj_arg *trace_arg = (struct traceobj_arg *)ptr; + rb_gc_mark(trace_arg->newobj_trace); + rb_gc_mark(trace_arg->freeobj_trace); +} + +static void +allocation_info_tracer_free(void *ptr) +{ + struct traceobj_arg *arg = (struct traceobj_arg *)ptr; + /* clear tables */ + st_foreach(arg->object_table, free_values_i, 0); + st_free_table(arg->object_table); + st_foreach(arg->str_table, free_keys_i, 0); + st_free_table(arg->str_table); + xfree(arg); +} + +static size_t +allocation_info_tracer_memsize(const void *ptr) +{ + size_t size; + struct traceobj_arg *trace_arg = (struct traceobj_arg *)ptr; + size = sizeof(*trace_arg); + size += st_memsize(trace_arg->object_table); + size += st_memsize(trace_arg->str_table); + return size; +} + +static int +hash_foreach_should_replace_key(st_data_t key, st_data_t value, st_data_t argp, int error) +{ + VALUE allocated_object; + + allocated_object = (VALUE)value; + if (allocated_object != rb_gc_location(allocated_object)) { + return ST_REPLACE; + } + + return ST_CONTINUE; +} + +static int +hash_replace_key(st_data_t *key, st_data_t *value, st_data_t argp, int existing) +{ + *key = rb_gc_location((VALUE)*key); + + return ST_CONTINUE; +} + +static void +allocation_info_tracer_compact(void *ptr) +{ + struct traceobj_arg *trace_arg = (struct traceobj_arg *)ptr; + + if (trace_arg->object_table && + st_foreach_with_replace(trace_arg->object_table, hash_foreach_should_replace_key, hash_replace_key, 0)) { + rb_raise(rb_eRuntimeError, "hash modified during iteration"); + } +} + +static const rb_data_type_t allocation_info_tracer_type = { + "ObjectTracing/allocation_info_tracer", + { + allocation_info_tracer_mark, + allocation_info_tracer_free, /* Never called because global */ + allocation_info_tracer_memsize, + allocation_info_tracer_compact, + }, + 0, 0, RUBY_TYPED_FREE_IMMEDIATELY +}; + +static VALUE traceobj_arg; static struct traceobj_arg *tmp_trace_arg; /* TODO: Do not use global variables */ static int tmp_keep_remains; /* TODO: Do not use global variables */ @@ -158,7 +233,9 @@ static struct traceobj_arg * get_traceobj_arg(void) { if (tmp_trace_arg == 0) { - tmp_trace_arg = ALLOC_N(struct traceobj_arg, 1); + VALUE obj = TypedData_Make_Struct(rb_cObject, struct traceobj_arg, &allocation_info_tracer_type, tmp_trace_arg); + traceobj_arg = obj; + rb_gc_register_mark_object(traceobj_arg); tmp_trace_arg->running = 0; tmp_trace_arg->keep_remains = tmp_keep_remains; tmp_trace_arg->newobj_trace = 0; @@ -186,9 +263,7 @@ trace_object_allocations_start(VALUE self) else { if (arg->newobj_trace == 0) { arg->newobj_trace = rb_tracepoint_new(0, RUBY_INTERNAL_EVENT_NEWOBJ, newobj_i, arg); - rb_gc_register_mark_object(arg->newobj_trace); arg->freeobj_trace = rb_tracepoint_new(0, RUBY_INTERNAL_EVENT_FREEOBJ, freeobj_i, arg); - rb_gc_register_mark_object(arg->freeobj_trace); } rb_tracepoint_enable(arg->newobj_trace); rb_tracepoint_enable(arg->freeobj_trace); @@ -216,8 +291,12 @@ trace_object_allocations_stop(VALUE self) } if (arg->running == 0) { - rb_tracepoint_disable(arg->newobj_trace); - rb_tracepoint_disable(arg->freeobj_trace); + if (arg->newobj_trace != 0) { + rb_tracepoint_disable(arg->newobj_trace); + } + if (arg->freeobj_trace != 0) { + rb_tracepoint_disable(arg->freeobj_trace); + } } return Qnil; diff --git a/ruby/ext/objspace/objspace.c b/ruby/ext/objspace/objspace.c index 311e68720..ad5bbe7d0 100644 --- a/ruby/ext/objspace/objspace.c +++ b/ruby/ext/objspace/objspace.c @@ -12,19 +12,28 @@ **********************************************************************/ -#include +#include "gc.h" #include "internal.h" -#include -#include +#include "internal/class.h" +#include "internal/compilers.h" +#include "internal/hash.h" +#include "internal/imemo.h" +#include "internal/sanitizers.h" #include "node.h" -#include "gc.h" +#include "ruby/io.h" +#include "ruby/re.h" +#include "ruby/st.h" #include "symbol.h" +#undef rb_funcall + +#include "ruby/ruby.h" + /* * call-seq: * ObjectSpace.memsize_of(obj) -> Integer * - * Return consuming memory size of obj. + * Return consuming memory size of obj in bytes. * * Note that the return size is incomplete. You need to deal with this * information as only a *HINT*. Especially, the size of +T_DATA+ may not be @@ -47,37 +56,68 @@ struct total_data { VALUE klass; }; +static void +total_i(VALUE v, void *ptr) +{ + struct total_data *data = (struct total_data *)ptr; + + switch (BUILTIN_TYPE(v)) { + case T_NONE: + case T_IMEMO: + case T_ICLASS: + case T_NODE: + case T_ZOMBIE: + return; + default: + if (data->klass == 0 || rb_obj_is_kind_of(v, data->klass)) { + data->total += rb_obj_memsize_of(v); + } + } +} + +typedef void (*each_obj_with_flags)(VALUE, void*); + +struct obj_itr { + each_obj_with_flags cb; + void *data; +}; + static int -total_i(void *vstart, void *vend, size_t stride, void *ptr) +heap_iter(void *vstart, void *vend, size_t stride, void *ptr) { + struct obj_itr * ctx = (struct obj_itr *)ptr; VALUE v; - struct total_data *data = (struct total_data *)ptr; for (v = (VALUE)vstart; v != (VALUE)vend; v += stride) { - if (RBASIC(v)->flags) { - switch (BUILTIN_TYPE(v)) { - case T_NONE: - case T_IMEMO: - case T_ICLASS: - case T_NODE: - case T_ZOMBIE: - continue; - default: - if (data->klass == 0 || rb_obj_is_kind_of(v, data->klass)) { - data->total += rb_obj_memsize_of(v); - } - } - } + void *poisoned = asan_poisoned_object_p(v); + asan_unpoison_object(v, false); + + if (RBASIC(v)->flags) { + (*ctx->cb)(v, ctx->data); + } + + if (poisoned) { + asan_poison_object(v); + } } return 0; } +static void +each_object_with_flags(each_obj_with_flags cb, void *ctx) +{ + struct obj_itr data; + data.cb = cb; + data.data = ctx; + rb_objspace_each_objects(heap_iter, &data); +} + /* * call-seq: * ObjectSpace.memsize_of_all([klass]) -> Integer * - * Return consuming memory size of all living objects. + * Return consuming memory size of all living objects in bytes. * * If +klass+ (should be Class object) is given, return the total memory size * of instances of the given class. @@ -110,7 +150,7 @@ memsize_of_all_m(int argc, VALUE *argv, VALUE self) rb_scan_args(argc, argv, "01", &data.klass); } - rb_objspace_each_objects(total_i, &data); + each_object_with_flags(total_i, &data); return SIZET2NUM(data.total); } @@ -137,24 +177,18 @@ setup_hash(int argc, VALUE *argv) hash = rb_hash_new(); } else if (!RHASH_EMPTY_P(hash)) { - st_foreach(RHASH_TBL(hash), set_zero_i, hash); + /* WB: no new reference */ + st_foreach(RHASH_TBL_RAW(hash), set_zero_i, hash); } return hash; } -static int -cos_i(void *vstart, void *vend, size_t stride, void *data) +static void +cos_i(VALUE v, void *data) { size_t *counts = (size_t *)data; - VALUE v = (VALUE)vstart; - - for (;v != (VALUE)vend; v += stride) { - if (RBASIC(v)->flags) { - counts[BUILTIN_TYPE(v)] += rb_obj_memsize_of(v); - } - } - return 0; + counts[BUILTIN_TYPE(v)] += rb_obj_memsize_of(v); } static VALUE @@ -231,7 +265,7 @@ count_objects_size(int argc, VALUE *argv, VALUE os) counts[i] = 0; } - rb_objspace_each_objects(cos_i, &counts[0]); + each_object_with_flags(cos_i, &counts[0]); for (i = 0; i <= T_MASK; i++) { if (counts[i]) { @@ -249,25 +283,20 @@ struct dynamic_symbol_counts { size_t immortal; }; -static int -cs_i(void *vstart, void *vend, size_t stride, void *n) +static void +cs_i(VALUE v, void *n) { struct dynamic_symbol_counts *counts = (struct dynamic_symbol_counts *)n; - VALUE v = (VALUE)vstart; - for (; v != (VALUE)vend; v += stride) { - if (RBASIC(v)->flags && BUILTIN_TYPE(v) == T_SYMBOL) { - ID id = RSYMBOL(v)->id; - if ((id & ~ID_SCOPE_MASK) == 0) { - counts->mortal++; - } - else { - counts->immortal++; - } - } + if (BUILTIN_TYPE(v) == T_SYMBOL) { + ID id = RSYMBOL(v)->id; + if ((id & ~ID_SCOPE_MASK) == 0) { + counts->mortal++; + } + else { + counts->immortal++; + } } - - return 0; } size_t rb_sym_immortal_count(void); @@ -305,7 +334,7 @@ count_symbols(int argc, VALUE *argv, VALUE os) VALUE hash = setup_hash(argc, argv); size_t immortal_symbols = rb_sym_immortal_count(); - rb_objspace_each_objects(cs_i, &dynamic_counts); + each_object_with_flags(cs_i, &dynamic_counts); rb_hash_aset(hash, ID2SYM(rb_intern("mortal_dynamic_symbol")), SIZET2NUM(dynamic_counts.mortal)); rb_hash_aset(hash, ID2SYM(rb_intern("immortal_dynamic_symbol")), SIZET2NUM(dynamic_counts.immortal)); @@ -315,20 +344,15 @@ count_symbols(int argc, VALUE *argv, VALUE os) return hash; } -static int -cn_i(void *vstart, void *vend, size_t stride, void *n) +static void +cn_i(VALUE v, void *n) { size_t *nodes = (size_t *)n; - VALUE v = (VALUE)vstart; - for (; v != (VALUE)vend; v += stride) { - if (RBASIC(v)->flags && BUILTIN_TYPE(v) == T_NODE) { - size_t s = nd_type((NODE *)v); - nodes[s]++; - } + if (BUILTIN_TYPE(v) == T_NODE) { + size_t s = nd_type((NODE *)v); + nodes[s]++; } - - return 0; } /* @@ -365,7 +389,7 @@ count_nodes(int argc, VALUE *argv, VALUE os) nodes[i] = 0; } - rb_objspace_each_objects(cn_i, &nodes[0]); + each_object_with_flags(cn_i, &nodes[0]); for (i=0; iflags && BUILTIN_TYPE(v) == T_DATA) { - VALUE counter; - VALUE key = RBASIC(v)->klass; - - if (key == 0) { - const char *name = rb_objspace_data_type_name(v); - if (name == 0) name = "unknown"; - key = ID2SYM(rb_intern(name)); - } - counter = rb_hash_aref(hash, key); - if (NIL_P(counter)) { - counter = INT2FIX(1); - } - else { - counter = INT2FIX(FIX2INT(counter) + 1); - } - - rb_hash_aset(hash, key, counter); - } + if (BUILTIN_TYPE(v) == T_DATA) { + VALUE counter; + VALUE key = RBASIC(v)->klass; + + if (key == 0) { + const char *name = rb_objspace_data_type_name(v); + if (name == 0) name = "unknown"; + key = ID2SYM(rb_intern(name)); + } + + counter = rb_hash_aref(hash, key); + if (NIL_P(counter)) { + counter = INT2FIX(1); + } + else { + counter = INT2FIX(FIX2INT(counter) + 1); + } + + rb_hash_aset(hash, key, counter); } - - return 0; } /* @@ -555,37 +574,32 @@ static VALUE count_tdata_objects(int argc, VALUE *argv, VALUE self) { VALUE hash = setup_hash(argc, argv); - rb_objspace_each_objects(cto_i, (void *)hash); + each_object_with_flags(cto_i, (void *)hash); return hash; } static ID imemo_type_ids[IMEMO_MASK+1]; -static int -count_imemo_objects_i(void *vstart, void *vend, size_t stride, void *data) +static void +count_imemo_objects_i(VALUE v, void *data) { VALUE hash = (VALUE)data; - VALUE v = (VALUE)vstart; - for (; v != (VALUE)vend; v += stride) { - if (RBASIC(v)->flags && BUILTIN_TYPE(v) == T_IMEMO) { - VALUE counter; - VALUE key = ID2SYM(imemo_type_ids[imemo_type(v)]); + if (BUILTIN_TYPE(v) == T_IMEMO) { + VALUE counter; + VALUE key = ID2SYM(imemo_type_ids[imemo_type(v)]); - counter = rb_hash_aref(hash, key); + counter = rb_hash_aref(hash, key); - if (NIL_P(counter)) { - counter = INT2FIX(1); - } - else { - counter = INT2FIX(FIX2INT(counter) + 1); - } + if (NIL_P(counter)) { + counter = INT2FIX(1); + } + else { + counter = INT2FIX(FIX2INT(counter) + 1); + } - rb_hash_aset(hash, key, counter); - } + rb_hash_aset(hash, key, counter); } - - return 0; } /* @@ -633,9 +647,12 @@ count_imemo_objects(int argc, VALUE *argv, VALUE self) imemo_type_ids[8] = rb_intern("imemo_tmpbuf"); imemo_type_ids[9] = rb_intern("imemo_ast"); imemo_type_ids[10] = rb_intern("imemo_parser_strterm"); + imemo_type_ids[11] = rb_intern("imemo_callinfo"); + imemo_type_ids[12] = rb_intern("imemo_callcache"); + imemo_type_ids[13] = rb_intern("imemo_constcache"); } - rb_objspace_each_objects(count_imemo_objects_i, (void *)hash); + each_object_with_flags(count_imemo_objects_i, (void *)hash); return hash; } @@ -659,12 +676,12 @@ static const rb_data_type_t iow_data_type = { 0, 0, RUBY_TYPED_FREE_IMMEDIATELY }; -static VALUE rb_mInternalObjectWrapper; +static VALUE rb_cInternalObjectWrapper; static VALUE iow_newobj(VALUE obj) { - return TypedData_Wrap_Struct(rb_mInternalObjectWrapper, &iow_data_type, (void *)obj); + return TypedData_Wrap_Struct(rb_cInternalObjectWrapper, &iow_data_type, (void *)obj); } /* Returns the type of the internal object. */ @@ -694,7 +711,7 @@ iow_internal_object_id(VALUE self) } struct rof_data { - st_table *refs; + VALUE refs; VALUE internals; }; @@ -710,7 +727,7 @@ reachable_object_from_i(VALUE obj, void *data_ptr) val = iow_newobj(obj); rb_ary_push(data->internals, val); } - st_insert(data->refs, key, val); + rb_hash_aset(data->refs, key, val); } } @@ -768,20 +785,18 @@ static VALUE reachable_objects_from(VALUE self, VALUE obj) { if (rb_objspace_markable_object_p(obj)) { - VALUE ret = rb_ary_new(); struct rof_data data; if (rb_typeddata_is_kind_of(obj, &iow_data_type)) { obj = (VALUE)DATA_PTR(obj); } - data.refs = st_init_numtable(); + data.refs = rb_ident_hash_new(); data.internals = rb_ary_new(); rb_objspace_reachable_objects_from(obj, reachable_object_from_i, &data); - st_foreach(data.refs, collect_values, (st_data_t)ret); - return ret; + return rb_funcall(data.refs, rb_intern("values"), 0); } else { return Qnil; @@ -860,7 +875,8 @@ wrap_klass_iow(VALUE klass) if (!RTEST(klass)) { return Qnil; } - else if (RB_TYPE_P(klass, T_ICLASS)) { + else if (RB_TYPE_P(klass, T_ICLASS) || + CLASS_OF(klass) == Qfalse /* hidden object */) { return iow_newobj(klass); } else { @@ -886,8 +902,13 @@ objspace_internal_class_of(VALUE self, VALUE obj) obj = (VALUE)DATA_PTR(obj); } - klass = CLASS_OF(obj); - return wrap_klass_iow(klass); + if (RB_TYPE_P(obj, T_IMEMO)) { + return Qnil; + } + else { + klass = CLASS_OF(obj); + return wrap_klass_iow(klass); + } } /* @@ -973,10 +994,11 @@ Init_objspace(void) * * You can use the #type method to check the type of the internal object. */ - rb_mInternalObjectWrapper = rb_define_class_under(rb_mObjSpace, "InternalObjectWrapper", rb_cObject); - rb_define_method(rb_mInternalObjectWrapper, "type", iow_type, 0); - rb_define_method(rb_mInternalObjectWrapper, "inspect", iow_inspect, 0); - rb_define_method(rb_mInternalObjectWrapper, "internal_object_id", iow_internal_object_id, 0); + rb_cInternalObjectWrapper = rb_define_class_under(rb_mObjSpace, "InternalObjectWrapper", rb_cObject); + rb_undef_alloc_func(rb_cInternalObjectWrapper); + rb_define_method(rb_cInternalObjectWrapper, "type", iow_type, 0); + rb_define_method(rb_cInternalObjectWrapper, "inspect", iow_inspect, 0); + rb_define_method(rb_cInternalObjectWrapper, "internal_object_id", iow_internal_object_id, 0); Init_object_tracing(rb_mObjSpace); Init_objspace_dump(rb_mObjSpace); diff --git a/ruby/ext/objspace/objspace_dump.c b/ruby/ext/objspace/objspace_dump.c index 5fa9d98e3..cf7acb5c6 100644 --- a/ruby/ext/objspace/objspace_dump.c +++ b/ruby/ext/objspace/objspace_dump.c @@ -12,20 +12,25 @@ **********************************************************************/ -#include "ruby/io.h" -#include "internal.h" -#include "ruby/debug.h" #include "gc.h" +#include "internal.h" +#include "internal/hash.h" +#include "internal/string.h" +#include "internal/sanitizers.h" #include "node.h" -#include "vm_core.h" #include "objspace.h" +#include "ruby/debug.h" +#include "ruby/util.h" +#include "ruby/io.h" +#include "vm_core.h" + +RUBY_EXTERN const char ruby_hexdigits[]; -static VALUE sym_output, sym_stdout, sym_string, sym_file; -static VALUE sym_full; +#define BUFFER_CAPACITY 4096 struct dump_config { VALUE type; - FILE *stream; + VALUE stream; VALUE string; const char *root_category; VALUE cur_obj; @@ -33,22 +38,143 @@ struct dump_config { size_t cur_obj_references; unsigned int roots: 1; unsigned int full_heap: 1; + unsigned int partial_dump; + size_t since; + unsigned long buffer_len; + char buffer[BUFFER_CAPACITY]; }; -PRINTF_ARGS(static void dump_append(struct dump_config *, const char *, ...), 2, 3); static void -dump_append(struct dump_config *dc, const char *format, ...) +dump_flush(struct dump_config *dc) +{ + if (dc->buffer_len) { + if (dc->stream) { + size_t written = rb_io_bufwrite(dc->stream, dc->buffer, dc->buffer_len); + if (written < dc->buffer_len) { + MEMMOVE(dc->buffer, dc->buffer + written, char, dc->buffer_len - written); + dc->buffer_len -= written; + return; + } + } + else if (dc->string) { + rb_str_cat(dc->string, dc->buffer, dc->buffer_len); + } + dc->buffer_len = 0; + } +} + +static inline void +buffer_ensure_capa(struct dump_config *dc, unsigned long requested) +{ + RUBY_ASSERT(requested <= BUFFER_CAPACITY); + if (requested + dc->buffer_len >= BUFFER_CAPACITY) { + dump_flush(dc); + if (requested + dc->buffer_len >= BUFFER_CAPACITY) { + rb_raise(rb_eIOError, "full buffer"); + } + } +} + +static void buffer_append(struct dump_config *dc, const char *cstr, unsigned long len) +{ + if (LIKELY(len > 0)) { + buffer_ensure_capa(dc, len); + MEMCPY(dc->buffer + dc->buffer_len, cstr, char, len); + dc->buffer_len += len; + } +} + +# define dump_append(dc, str) buffer_append(dc, (str), (long)strlen(str)) + +static void +dump_append_ld(struct dump_config *dc, const long number) +{ + const unsigned int width = DECIMAL_SIZE_OF_BITS(sizeof(number) * CHAR_BIT - 1) + 2; + buffer_ensure_capa(dc, width); + unsigned long required = snprintf(dc->buffer + dc->buffer_len, width, "%ld", number); + RUBY_ASSERT(required <= width); + dc->buffer_len += required; +} + +static void +dump_append_lu(struct dump_config *dc, const unsigned long number) +{ + const unsigned int width = DECIMAL_SIZE_OF_BITS(sizeof(number) * CHAR_BIT) + 1; + buffer_ensure_capa(dc, width); + unsigned long required = snprintf(dc->buffer + dc->buffer_len, width, "%lu", number); + RUBY_ASSERT(required <= width); + dc->buffer_len += required; +} + +static void +dump_append_g(struct dump_config *dc, const double number) +{ + unsigned long capa_left = BUFFER_CAPACITY - dc->buffer_len; + unsigned long required = snprintf(dc->buffer + dc->buffer_len, capa_left, "%#g", number); + + if (required >= capa_left) { + buffer_ensure_capa(dc, required); + capa_left = BUFFER_CAPACITY - dc->buffer_len; + snprintf(dc->buffer + dc->buffer_len, capa_left, "%#g", number); + } + dc->buffer_len += required; +} + +static void +dump_append_d(struct dump_config *dc, const int number) +{ + const unsigned int width = DECIMAL_SIZE_OF_BITS(sizeof(number) * CHAR_BIT - 1) + 2; + buffer_ensure_capa(dc, width); + unsigned long required = snprintf(dc->buffer + dc->buffer_len, width, "%d", number); + RUBY_ASSERT(required <= width); + dc->buffer_len += required; +} + +static void +dump_append_sizet(struct dump_config *dc, const size_t number) { - va_list vl; - va_start(vl, format); + const unsigned int width = DECIMAL_SIZE_OF_BITS(sizeof(number) * CHAR_BIT) + 1; + buffer_ensure_capa(dc, width); + unsigned long required = snprintf(dc->buffer + dc->buffer_len, width, "%"PRIuSIZE, number); + RUBY_ASSERT(required <= width); + dc->buffer_len += required; +} - if (dc->stream) { - vfprintf(dc->stream, format, vl); +static void +dump_append_c(struct dump_config *dc, char c) +{ + if (c <= 0x1f) { + const unsigned int width = (sizeof(c) * CHAR_BIT / 4) + 5; + buffer_ensure_capa(dc, width); + unsigned long required = snprintf(dc->buffer + dc->buffer_len, width, "\\u00%02x", c); + RUBY_ASSERT(required <= width); + dc->buffer_len += required; + } + else { + buffer_ensure_capa(dc, 1); + dc->buffer[dc->buffer_len] = c; + dc->buffer_len++; } - else if (dc->string) - rb_str_vcatf(dc->string, format, vl); +} + +static void +dump_append_ref(struct dump_config *dc, VALUE ref) +{ + RUBY_ASSERT(ref > 0); + + char buffer[((sizeof(VALUE) * CHAR_BIT + 3) / 4) + 4]; + char *buffer_start, *buffer_end; - va_end(vl); + buffer_start = buffer_end = &buffer[sizeof(buffer)]; + *--buffer_start = '"'; + while (ref) { + *--buffer_start = ruby_hexdigits[ref & 0xF]; + ref >>= 4; + } + *--buffer_start = 'x'; + *--buffer_start = '0'; + *--buffer_start = '"'; + buffer_append(dc, buffer_start, buffer_end - buffer_start); } static void @@ -60,35 +186,37 @@ dump_append_string_value(struct dump_config *dc, VALUE obj) dump_append(dc, "\""); for (i = 0, value = RSTRING_PTR(obj); i < RSTRING_LEN(obj); i++) { - switch ((c = value[i])) { - case '\\': - case '"': - dump_append(dc, "\\%c", c); - break; - case '\0': - dump_append(dc, "\\u0000"); - break; - case '\b': - dump_append(dc, "\\b"); - break; - case '\t': - dump_append(dc, "\\t"); - break; - case '\f': - dump_append(dc, "\\f"); - break; - case '\n': - dump_append(dc, "\\n"); - break; - case '\r': - dump_append(dc, "\\r"); - break; - default: - if (c <= 0x1f) - dump_append(dc, "\\u%04d", c); - else - dump_append(dc, "%c", c); - } + switch ((c = value[i])) { + case '\\': + dump_append(dc, "\\\\"); + break; + case '"': + dump_append(dc, "\\\""); + break; + case '\0': + dump_append(dc, "\\u0000"); + break; + case '\b': + dump_append(dc, "\\b"); + break; + case '\t': + dump_append(dc, "\\t"); + break; + case '\f': + dump_append(dc, "\\f"); + break; + case '\n': + dump_append(dc, "\\n"); + break; + case '\r': + dump_append(dc, "\\r"); + break; + case '\177': + dump_append(dc, "\\u007f"); + break; + default: + dump_append_c(dc, c); + } } dump_append(dc, "\""); } @@ -133,6 +261,7 @@ obj_type(VALUE obj) CASE_TYPE(NODE); CASE_TYPE(ZOMBIE); #undef CASE_TYPE + default: break; } return "UNKNOWN"; } @@ -141,25 +270,25 @@ static void dump_append_special_const(struct dump_config *dc, VALUE value) { if (value == Qtrue) { - dump_append(dc, "true"); + dump_append(dc, "true"); } else if (value == Qfalse) { - dump_append(dc, "false"); + dump_append(dc, "false"); } else if (value == Qnil) { - dump_append(dc, "null"); + dump_append(dc, "null"); } else if (FIXNUM_P(value)) { - dump_append(dc, "%ld", FIX2LONG(value)); + dump_append_ld(dc, FIX2LONG(value)); } else if (FLONUM_P(value)) { - dump_append(dc, "%#g", RFLOAT_VALUE(value)); + dump_append_g(dc, RFLOAT_VALUE(value)); } else if (SYMBOL_P(value)) { - dump_append_symbol_value(dc, value); + dump_append_symbol_value(dc, value); } else { - dump_append(dc, "{}"); + dump_append(dc, "{}"); } } @@ -169,12 +298,16 @@ reachable_object_i(VALUE ref, void *data) struct dump_config *dc = (struct dump_config *)data; if (dc->cur_obj_klass == ref) - return; + return; - if (dc->cur_obj_references == 0) - dump_append(dc, ", \"references\":[\"%#"PRIxVALUE"\"", ref); - else - dump_append(dc, ", \"%#"PRIxVALUE"\"", ref); + if (dc->cur_obj_references == 0) { + dump_append(dc, ", \"references\":["); + dump_append_ref(dc, ref); + } + else { + dump_append(dc, ", "); + dump_append_ref(dc, ref); + } dc->cur_obj_references++; } @@ -182,35 +315,16 @@ reachable_object_i(VALUE ref, void *data) static void dump_append_string_content(struct dump_config *dc, VALUE obj) { - dump_append(dc, ", \"bytesize\":%ld", RSTRING_LEN(obj)); - if (!STR_EMBED_P(obj) && !STR_SHARED_P(obj) && (long)rb_str_capacity(obj) != RSTRING_LEN(obj)) - dump_append(dc, ", \"capacity\":%"PRIuSIZE, rb_str_capacity(obj)); - - if (is_ascii_string(obj)) { - dump_append(dc, ", \"value\":"); - dump_append_string_value(dc, obj); + dump_append(dc, ", \"bytesize\":"); + dump_append_ld(dc, RSTRING_LEN(obj)); + if (!STR_EMBED_P(obj) && !STR_SHARED_P(obj) && (long)rb_str_capacity(obj) != RSTRING_LEN(obj)) { + dump_append(dc, ", \"capacity\":"); + dump_append_sizet(dc, rb_str_capacity(obj)); } -} -static const char * -imemo_name(int imemo) -{ - switch(imemo) { -#define TYPE_STR(t) case(imemo_##t): return #t - TYPE_STR(env); - TYPE_STR(cref); - TYPE_STR(svar); - TYPE_STR(throw_data); - TYPE_STR(ifunc); - TYPE_STR(memo); - TYPE_STR(ment); - TYPE_STR(iseq); - TYPE_STR(tmpbuf); - TYPE_STR(ast); - TYPE_STR(parser_strterm); - default: - return "unknown"; -#undef TYPE_STR + if (is_ascii_string(obj)) { + dump_append(dc, ", \"value\":"); + dump_append_string_value(dc, obj); } } @@ -218,126 +332,200 @@ static void dump_object(VALUE obj, struct dump_config *dc) { size_t memsize; - struct allocation_info *ainfo; + struct allocation_info *ainfo = objspace_lookup_allocation_info(obj); rb_io_t *fptr; ID flags[RB_OBJ_GC_FLAGS_MAX]; size_t n, i; if (SPECIAL_CONST_P(obj)) { - dump_append_special_const(dc, obj); - return; + dump_append_special_const(dc, obj); + return; } dc->cur_obj = obj; dc->cur_obj_references = 0; dc->cur_obj_klass = BUILTIN_TYPE(obj) == T_NODE ? 0 : RBASIC_CLASS(obj); + if (dc->partial_dump && (!ainfo || ainfo->generation < dc->since)) { + return; + } + if (dc->cur_obj == dc->string) - return; + return; - dump_append(dc, "{\"address\":\"%#"PRIxVALUE"\", \"type\":\"%s\"", obj, obj_type(obj)); + dump_append(dc, "{\"address\":"); + dump_append_ref(dc, obj); - if (dc->cur_obj_klass) - dump_append(dc, ", \"class\":\"%#"PRIxVALUE"\"", dc->cur_obj_klass); + dump_append(dc, ", \"type\":\""); + dump_append(dc, obj_type(obj)); + dump_append(dc, "\""); + + if (dc->cur_obj_klass) { + dump_append(dc, ", \"class\":"); + dump_append_ref(dc, dc->cur_obj_klass); + } if (rb_obj_frozen_p(obj)) - dump_append(dc, ", \"frozen\":true"); + dump_append(dc, ", \"frozen\":true"); switch (BUILTIN_TYPE(obj)) { case T_NONE: - dump_append(dc, "}\n"); - return; + dump_append(dc, "}\n"); + return; case T_IMEMO: - dump_append(dc, ", \"imemo_type\":\"%s\"", imemo_name(imemo_type(obj))); - break; + dump_append(dc, ", \"imemo_type\":\""); + dump_append(dc, rb_imemo_name(imemo_type(obj))); + dump_append(dc, "\""); + break; case T_SYMBOL: - dump_append_string_content(dc, rb_sym2str(obj)); - break; + dump_append_string_content(dc, rb_sym2str(obj)); + break; case T_STRING: - if (STR_EMBED_P(obj)) - dump_append(dc, ", \"embedded\":true"); - if (is_broken_string(obj)) - dump_append(dc, ", \"broken\":true"); - if (FL_TEST(obj, RSTRING_FSTR)) - dump_append(dc, ", \"fstring\":true"); - if (STR_SHARED_P(obj)) - dump_append(dc, ", \"shared\":true"); - else - dump_append_string_content(dc, obj); - - if (!ENCODING_IS_ASCII8BIT(obj)) - dump_append(dc, ", \"encoding\":\"%s\"", rb_enc_name(rb_enc_from_index(ENCODING_GET(obj)))); - break; + if (STR_EMBED_P(obj)) + dump_append(dc, ", \"embedded\":true"); + if (is_broken_string(obj)) + dump_append(dc, ", \"broken\":true"); + if (FL_TEST(obj, RSTRING_FSTR)) + dump_append(dc, ", \"fstring\":true"); + if (STR_SHARED_P(obj)) + dump_append(dc, ", \"shared\":true"); + else + dump_append_string_content(dc, obj); + + if (!ENCODING_IS_ASCII8BIT(obj)) { + dump_append(dc, ", \"encoding\":\""); + dump_append(dc, rb_enc_name(rb_enc_from_index(ENCODING_GET(obj)))); + dump_append(dc, "\""); + } + break; case T_HASH: - dump_append(dc, ", \"size\":%"PRIuSIZE, (size_t)RHASH_SIZE(obj)); - if (FL_TEST(obj, RHASH_PROC_DEFAULT)) - dump_append(dc, ", \"default\":\"%#"PRIxVALUE"\"", RHASH_IFNONE(obj)); - break; + dump_append(dc, ", \"size\":"); + dump_append_sizet(dc, (size_t)RHASH_SIZE(obj)); + if (FL_TEST(obj, RHASH_PROC_DEFAULT)) { + dump_append(dc, ", \"default\":"); + dump_append_ref(dc, RHASH_IFNONE(obj)); + } + break; case T_ARRAY: - dump_append(dc, ", \"length\":%ld", RARRAY_LEN(obj)); - if (RARRAY_LEN(obj) > 0 && FL_TEST(obj, ELTS_SHARED)) - dump_append(dc, ", \"shared\":true"); - if (RARRAY_LEN(obj) > 0 && FL_TEST(obj, RARRAY_EMBED_FLAG)) - dump_append(dc, ", \"embedded\":true"); - break; + dump_append(dc, ", \"length\":"); + dump_append_ld(dc, RARRAY_LEN(obj)); + if (RARRAY_LEN(obj) > 0 && FL_TEST(obj, ELTS_SHARED)) + dump_append(dc, ", \"shared\":true"); + if (RARRAY_LEN(obj) > 0 && FL_TEST(obj, RARRAY_EMBED_FLAG)) + dump_append(dc, ", \"embedded\":true"); + break; + + case T_ICLASS: + if (rb_class_get_superclass(obj)) { + dump_append(dc, ", \"superclass\":"); + dump_append_ref(dc, rb_class_get_superclass(obj)); + } + break; case T_CLASS: case T_MODULE: - if (dc->cur_obj_klass) - dump_append(dc, ", \"name\":\"%s\"", rb_class2name(obj)); - break; + if (rb_class_get_superclass(obj)) { + dump_append(dc, ", \"superclass\":"); + dump_append_ref(dc, rb_class_get_superclass(obj)); + } + + if (dc->cur_obj_klass) { + VALUE mod_name = rb_mod_name(obj); + if (!NIL_P(mod_name)) { + dump_append(dc, ", \"name\":\""); + dump_append(dc, RSTRING_PTR(mod_name)); + dump_append(dc, "\""); + } else { + VALUE real_mod_name = rb_mod_name(rb_class_real(obj)); + if (RTEST(real_mod_name)) { + dump_append(dc, ", \"real_class_name\":\""); + dump_append(dc, RSTRING_PTR(real_mod_name)); + dump_append(dc, "\""); + } + } + + if (FL_TEST(obj, FL_SINGLETON)) { + dump_append(dc, ", \"singleton\":true"); + } + } + break; case T_DATA: - if (RTYPEDDATA_P(obj)) - dump_append(dc, ", \"struct\":\"%s\"", RTYPEDDATA_TYPE(obj)->wrap_struct_name); - break; + if (RTYPEDDATA_P(obj)) { + dump_append(dc, ", \"struct\":\""); + dump_append(dc, RTYPEDDATA_TYPE(obj)->wrap_struct_name); + dump_append(dc, "\""); + } + break; case T_FLOAT: - dump_append(dc, ", \"value\":\"%g\"", RFLOAT_VALUE(obj)); - break; + dump_append(dc, ", \"value\":\""); + dump_append_g(dc, RFLOAT_VALUE(obj)); + dump_append(dc, "\""); + break; case T_OBJECT: - dump_append(dc, ", \"ivars\":%u", ROBJECT_NUMIV(obj)); - break; + dump_append(dc, ", \"ivars\":"); + dump_append_lu(dc, ROBJECT_NUMIV(obj)); + break; case T_FILE: - fptr = RFILE(obj)->fptr; - if (fptr) - dump_append(dc, ", \"fd\":%d", fptr->fd); - break; + fptr = RFILE(obj)->fptr; + if (fptr) { + dump_append(dc, ", \"fd\":"); + dump_append_d(dc, fptr->fd); + } + break; case T_ZOMBIE: - dump_append(dc, "}\n"); - return; + dump_append(dc, "}\n"); + return; + + default: + break; } rb_objspace_reachable_objects_from(obj, reachable_object_i, dc); if (dc->cur_obj_references > 0) - dump_append(dc, "]"); - - if ((ainfo = objspace_lookup_allocation_info(obj))) { - dump_append(dc, ", \"file\":\"%s\", \"line\":%lu", ainfo->path, ainfo->line); - if (RTEST(ainfo->mid)) { - VALUE m = rb_sym2str(ainfo->mid); - dump_append(dc, ", \"method\":\"%s\"", RSTRING_PTR(m)); - } - dump_append(dc, ", \"generation\":%"PRIuSIZE, ainfo->generation); + dump_append(dc, "]"); + + if (ainfo) { + if (ainfo->path) { + dump_append(dc, ", \"file\":\""); + dump_append(dc, ainfo->path); + dump_append(dc, "\""); + } + if (ainfo->line) { + dump_append(dc, ", \"line\":"); + dump_append_lu(dc, ainfo->line); + } + if (RTEST(ainfo->mid)) { + VALUE m = rb_sym2str(ainfo->mid); + dump_append(dc, ", \"method\":"); + dump_append_string_value(dc, m); + } + dump_append(dc, ", \"generation\":"); + dump_append_sizet(dc, ainfo->generation); } - if ((memsize = rb_obj_memsize_of(obj)) > 0) - dump_append(dc, ", \"memsize\":%"PRIuSIZE, memsize); + if ((memsize = rb_obj_memsize_of(obj)) > 0) { + dump_append(dc, ", \"memsize\":"); + dump_append_sizet(dc, memsize); + } if ((n = rb_obj_gc_flags(obj, flags, sizeof(flags))) > 0) { - dump_append(dc, ", \"flags\":{"); - for (i=0; ifull_heap || RBASIC(v)->flags) dump_object(v, dc); + + if (ptr) { + asan_poison_object(v); + } } return 0; } @@ -361,138 +556,89 @@ root_obj_i(const char *category, VALUE obj, void *data) struct dump_config *dc = (struct dump_config *)data; if (dc->root_category != NULL && category != dc->root_category) - dump_append(dc, "]}\n"); - if (dc->root_category == NULL || category != dc->root_category) - dump_append(dc, "{\"type\":\"ROOT\", \"root\":\"%s\", \"references\":[\"%#"PRIxVALUE"\"", category, obj); - else - dump_append(dc, ", \"%#"PRIxVALUE"\"", obj); + dump_append(dc, "]}\n"); + if (dc->root_category == NULL || category != dc->root_category) { + dump_append(dc, "{\"type\":\"ROOT\", \"root\":\""); + dump_append(dc, category); + dump_append(dc, "\", \"references\":["); + dump_append_ref(dc, obj); + } + else { + dump_append(dc, ", "); + dump_append_ref(dc, obj); + } dc->root_category = category; dc->roots = 1; } -static VALUE -dump_output(struct dump_config *dc, VALUE opts, VALUE output, const char *filename) +static void +dump_output(struct dump_config *dc, VALUE output, VALUE full, VALUE since) { - VALUE tmp; dc->full_heap = 0; - - if (RTEST(opts)) { - output = rb_hash_aref(opts, sym_output); - - if (Qtrue == rb_hash_lookup2(opts, sym_full, Qfalse)) - dc->full_heap = 1; + dc->buffer_len = 0; + + if (TYPE(output) == T_STRING) { + dc->stream = Qfalse; + dc->string = output; + } else { + dc->stream = output; + dc->string = Qfalse; } - if (output == sym_stdout) { - dc->stream = stdout; - dc->string = Qnil; - } - else if (output == sym_file) { - rb_io_t *fptr; - rb_require("tempfile"); - tmp = rb_assoc_new(rb_str_new_cstr(filename), rb_str_new_cstr(".json")); - tmp = rb_funcallv(rb_path2class("Tempfile"), rb_intern("create"), 1, &tmp); - io: - dc->string = rb_io_get_write_io(tmp); - rb_io_flush(dc->string); - GetOpenFile(dc->string, fptr); - dc->stream = rb_io_stdio_file(fptr); - } - else if (output == sym_string) { - dc->string = rb_str_new_cstr(""); + if (full == Qtrue) { + dc->full_heap = 1; } - else if (!NIL_P(tmp = rb_io_check_io(output))) { - output = sym_file; - goto io; - } - else { - rb_raise(rb_eArgError, "wrong output option: %"PRIsVALUE, output); + + if (RTEST(since)) { + dc->partial_dump = 1; + dc->since = NUM2SIZET(since); + } else { + dc->partial_dump = 0; } - return output; } static VALUE -dump_result(struct dump_config *dc, VALUE output) +dump_result(struct dump_config *dc) { - if (output == sym_string) { - return rb_str_resurrect(dc->string); - } - else if (output == sym_file) { - rb_io_flush(dc->string); - return dc->string; - } - else { - return Qnil; + dump_flush(dc); + + if (dc->string) { + return dc->string; + } else { + rb_io_flush(dc->stream); + return dc->stream; } } -/* - * call-seq: - * ObjectSpace.dump(obj[, output: :string]) # => "{ ... }" - * ObjectSpace.dump(obj, output: :file) # => # - * ObjectSpace.dump(obj, output: :stdout) # => nil - * - * Dump the contents of a ruby object as JSON. - * - * This method is only expected to work with C Ruby. - * This is an experimental method and is subject to change. - * In particular, the function signature and output format are - * not guaranteed to be compatible in future versions of ruby. - */ - static VALUE -objspace_dump(int argc, VALUE *argv, VALUE os) +objspace_dump(VALUE os, VALUE obj, VALUE output) { - static const char filename[] = "rubyobj"; - VALUE obj = Qnil, opts = Qnil, output; struct dump_config dc = {0,}; - - rb_scan_args(argc, argv, "1:", &obj, &opts); - - output = dump_output(&dc, opts, sym_string, filename); + dump_output(&dc, output, Qnil, Qnil); dump_object(obj, &dc); - return dump_result(&dc, output); + return dump_result(&dc); } -/* - * call-seq: - * ObjectSpace.dump_all([output: :file]) # => # - * ObjectSpace.dump_all(output: :stdout) # => nil - * ObjectSpace.dump_all(output: :string) # => "{...}\n{...}\n..." - * ObjectSpace.dump_all(output: - * File.open('heap.json','w')) # => # - * - * Dump the contents of the ruby heap as JSON. - * - * This method is only expected to work with C Ruby. - * This is an experimental method and is subject to change. - * In particular, the function signature and output format are - * not guaranteed to be compatible in future versions of ruby. - */ - static VALUE -objspace_dump_all(int argc, VALUE *argv, VALUE os) +objspace_dump_all(VALUE os, VALUE output, VALUE full, VALUE since) { - static const char filename[] = "rubyheap"; - VALUE opts = Qnil, output; struct dump_config dc = {0,}; + dump_output(&dc, output, full, since); - rb_scan_args(argc, argv, "0:", &opts); - - output = dump_output(&dc, opts, sym_file, filename); - - /* dump roots */ - rb_objspace_reachable_objects_from_root(root_obj_i, &dc); - if (dc.roots) dump_append(&dc, "]}\n"); + if (!dc.partial_dump || dc.since == 0) { + /* dump roots */ + rb_objspace_reachable_objects_from_root(root_obj_i, &dc); + if (dc.roots) dump_append(&dc, "]}\n"); + } /* dump all objects */ rb_objspace_each_objects(heap_i, &dc); - return dump_result(&dc, output); + return dump_result(&dc); } void @@ -503,14 +649,8 @@ Init_objspace_dump(VALUE rb_mObjSpace) rb_mObjSpace = rb_define_module("ObjectSpace"); /* let rdoc know */ #endif - rb_define_module_function(rb_mObjSpace, "dump", objspace_dump, -1); - rb_define_module_function(rb_mObjSpace, "dump_all", objspace_dump_all, -1); - - sym_output = ID2SYM(rb_intern("output")); - sym_stdout = ID2SYM(rb_intern("stdout")); - sym_string = ID2SYM(rb_intern("string")); - sym_file = ID2SYM(rb_intern("file")); - sym_full = ID2SYM(rb_intern("full")); + rb_define_module_function(rb_mObjSpace, "_dump", objspace_dump, 2); + rb_define_module_function(rb_mObjSpace, "_dump_all", objspace_dump_all, 3); /* force create static IDs */ rb_obj_gc_flags(rb_mObjSpace, 0, 0); diff --git a/ruby/ext/openssl/History.md b/ruby/ext/openssl/History.md index db5050014..479ec3b4a 100644 --- a/ruby/ext/openssl/History.md +++ b/ruby/ext/openssl/History.md @@ -1,3 +1,235 @@ +Version 3.0.0 +============= + +Compatibility notes +------------------- + +* OpenSSL 1.0.1 and Ruby 2.3-2.5 are no longer supported. + [[GitHub #396]](https://github.com/ruby/openssl/pull/396) + [[GitHub #466]](https://github.com/ruby/openssl/pull/466) + +* OpenSSL 3.0 support is added. It is the first major version bump from OpenSSL + 1.1 and contains incompatible changes that affect Ruby/OpenSSL. + Note that OpenSSL 3.0 support is preliminary and not all features are + currently available: + [[GitHub #369]](https://github.com/ruby/openssl/issues/369) + + - Deprecate the ability to modify `OpenSSL::PKey::PKey` instances. OpenSSL 3.0 + made EVP_PKEY structure immutable, and hence the following methods are not + available when Ruby/OpenSSL is linked against OpenSSL 3.0. + [[GitHub #480]](https://github.com/ruby/openssl/pull/480) + + - `OpenSSL::PKey::RSA#set_key`, `#set_factors`, `#set_crt_params` + - `OpenSSL::PKey::DSA#set_pqg`, `#set_key` + - `OpenSSL::PKey::DH#set_pqg`, `#set_key`, `#generate_key!` + - `OpenSSL::PKey::EC#private_key=`, `#public_key=`, `#group=`, `#generate_key!` + + - Deprecate `OpenSSL::Engine`. The ENGINE API has been deprecated in OpenSSL 3.0 + in favor of the new "provider" concept and will be removed in a future + version. + [[GitHub #481]](https://github.com/ruby/openssl/pull/481) + +* `OpenSSL::SSL::SSLContext#tmp_ecdh_callback` has been removed. It has been + deprecated since v2.0.0 because it is incompatible with modern OpenSSL + versions. + [[GitHub #394]](https://github.com/ruby/openssl/pull/394) + +* `OpenSSL::SSL::SSLSocket#read` and `#write` now raise `OpenSSL::SSL::SSLError` + if called before a TLS connection is established. Historically, they + read/wrote unencrypted data to the underlying socket directly in that case. + [[GitHub #9]](https://github.com/ruby/openssl/issues/9) + [[GitHub #469]](https://github.com/ruby/openssl/pull/469) + + +Notable changes +--------------- + +* Enhance OpenSSL::PKey's common interface. + [[GitHub #370]](https://github.com/ruby/openssl/issues/370) + + - Key deserialization: Enhance `OpenSSL::PKey.read` to handle PEM encoding of + DH parameters, which used to be only deserialized by `OpenSSL::PKey::DH.new`. + [[GitHub #328]](https://github.com/ruby/openssl/issues/328) + - Key generation: Add `OpenSSL::PKey.generate_parameters` and + `OpenSSL::PKey.generate_key`. + [[GitHub #329]](https://github.com/ruby/openssl/issues/329) + - Public key signing: Enhance `OpenSSL::PKey::PKey#sign` and `#verify` to use + the new EVP_DigestSign() family to enable PureEdDSA support on OpenSSL 1.1.1 + or later. They also now take optional algorithm-specific parameters for more + control. + [[GitHub #329]](https://github.com/ruby/openssl/issues/329) + - Low-level public key signing and verification: Add + `OpenSSL::PKey::PKey#sign_raw`, `#verify_raw`, and `#verify_recover`. + [[GitHub #382]](https://github.com/ruby/openssl/issues/382) + - Public key encryption: Add `OpenSSL::PKey::PKey#encrypt` and `#decrypt`. + [[GitHub #382]](https://github.com/ruby/openssl/issues/382) + - Key agreement: Add `OpenSSL::PKey::PKey#derive`. + [[GitHub #329]](https://github.com/ruby/openssl/issues/329) + - Key comparison: Add `OpenSSL::PKey::PKey#compare?` to conveniently check + that two keys have common parameters and a public key. + [[GitHub #383]](https://github.com/ruby/openssl/issues/383) + +* Add `OpenSSL::BN#set_flags` and `#get_flags`. This can be used in combination + with `OpenSSL::BN::CONSTTIME` to force constant-time computation. + [[GitHub #417]](https://github.com/ruby/openssl/issues/417) + +* Add `OpenSSL::BN#abs` to get the absolute value of the BIGNUM. + [[GitHub #430]](https://github.com/ruby/openssl/issues/430) + +* Add `OpenSSL::SSL::SSLSocket#getbyte`. + [[GitHub #438]](https://github.com/ruby/openssl/issues/438) + +* Add `OpenSSL::SSL::SSLContext#tmp_dh=`. + [[GitHub #459]](https://github.com/ruby/openssl/pull/459) + +* Add `OpenSSL::X509::Certificate.load` to load a PEM-encoded and concatenated + list of X.509 certificates at once. + [[GitHub #441]](https://github.com/ruby/openssl/pull/441) + +* Change `OpenSSL::X509::Certificate.new` to attempt to deserialize the given + string first as DER encoding first and then as PEM encoding to ensure the + round-trip consistency. + [[GitHub #442]](https://github.com/ruby/openssl/pull/442) + +* Update various part of the code base to use the modern API. No breaking + changes are intended with this. This includes: + + - `OpenSSL::HMAC` uses the EVP API. + [[GitHub #371]](https://github.com/ruby/openssl/issues/371) + - `OpenSSL::Config` uses native OpenSSL API to parse config files. + [[GitHub #342]](https://github.com/ruby/openssl/issues/342) + + +Version 2.2.1 +============= + +Merged changes in 2.1.3. Additionally, the following issues are fixed by this +release. + +Bug fixes +--------- + +* Fix crash in `OpenSSL::Timestamp::{Request,Response,TokenInfo}.new` when + invalid arguments are given. + [[GitHub #407]](https://github.com/ruby/openssl/pull/407) +* Fix `OpenSSL::Timestamp::Factory#create_timestamp` with LibreSSL on platforms + where `time_t` has a different size from `long`. + [[GitHub #454]](https://github.com/ruby/openssl/pull/454) + + +Version 2.2.0 +============= + +Compatibility notes +------------------- + +* Remove unsupported MDC2, DSS, DSS1, and SHA algorithms. +* Remove `OpenSSL::PKCS7::SignerInfo#name` alias for `#issuer`. + [[GitHub #266]](https://github.com/ruby/openssl/pull/266) +* Deprecate `OpenSSL::Config#add_value` and `#[]=` for future removal. + [[GitHub #322]](https://github.com/ruby/openssl/pull/322) + + +Notable changes +--------------- + +* Change default `OpenSSL::SSL::SSLServer#listen` backlog argument from + 5 to `Socket::SOMAXCONN`. + [[GitHub #286]](https://github.com/ruby/openssl/issues/286) +* Make `OpenSSL::HMAC#==` use a timing safe string comparison. + [[GitHub #284]](https://github.com/ruby/openssl/pull/284) +* Add support for SHA3 and BLAKE digests. + [[GitHub #282]](https://github.com/ruby/openssl/pull/282) +* Add `OpenSSL::SSL::SSLSocket.open` for opening a `TCPSocket` and + returning an `OpenSSL::SSL::SSLSocket` for it. + [[GitHub #225]](https://github.com/ruby/openssl/issues/225) +* Support marshalling of `OpenSSL::X509` and `OpenSSL::PKey` objects. + [[GitHub #281]](https://github.com/ruby/openssl/pull/281) + [[GitHub #363]](https://github.com/ruby/openssl/pull/363) +* Add `OpenSSL.secure_compare` for timing safe string comparison for + strings of possibly unequal length. + [[GitHub #280]](https://github.com/ruby/openssl/pull/280) +* Add `OpenSSL.fixed_length_secure_compare` for timing safe string + comparison for strings of equal length. + [[GitHub #269]](https://github.com/ruby/openssl/pull/269) +* Add `OpenSSL::SSL::SSLSocket#{finished_message,peer_finished_message}` + for last finished message sent and received. + [[GitHub #250]](https://github.com/ruby/openssl/pull/250) +* Add `OpenSSL::Timestamp` module for handing timestamp requests and + responses. + [[GitHub #204]](https://github.com/ruby/openssl/pull/204) +* Add helper methods for `OpenSSL::X509::Certificate`: + `find_extension`, `subject_key_identifier`, + `authority_key_identifier`, `crl_uris`, `ca_issuer_uris` and + `ocsp_uris`, and for `OpenSSL::X509::CRL`: + `find_extension` and `subject_key_identifier`. + [[GitHub #260]](https://github.com/ruby/openssl/pull/260) + [[GitHub #275]](https://github.com/ruby/openssl/pull/275) + [[GitHub #293]](https://github.com/ruby/openssl/pull/293) +* Add `OpenSSL::ECPoint#add` for performing elliptic curve point addition. + [[GitHub #261]](https://github.com/ruby/openssl/pull/261) +* Make `OpenSSL::PKey::RSA#{export,to_der}` check `key`, `factors`, and + `crt_params` to do proper private key serialization. + [[GitHub #258]](https://github.com/ruby/openssl/pull/258) +* Add `OpenSSL::SSL::{SSLSocket,SSLServer}#fileno`, returning the + underlying socket file descriptor number. + [[GitHub #247]](https://github.com/ruby/openssl/pull/247) +* Support client certificates with TLS 1.3, and support post-handshake + authentication with OpenSSL 1.1.1+. + [[GitHub #239]](https://github.com/ruby/openssl/pull/239) +* Add `OpenSSL::ASN1::ObjectId#==` for equality testing. +* Add `OpenSSL::X509::Extension#value_der` for the raw value of + the extension. + [[GitHub #234]](https://github.com/ruby/openssl/pull/234) +* Significantly reduce allocated memory in `OpenSSL::Buffering#do_write`. + [[GitHub #212]](https://github.com/ruby/openssl/pull/212) +* Ensure all valid IPv6 addresses are considered valid as elements + of subjectAlternativeName in certificates. + [[GitHub #185]](https://github.com/ruby/openssl/pull/185) +* Allow recipient's certificate to be omitted in PCKS7#decrypt. + [[GitHub #183]](https://github.com/ruby/openssl/pull/183) +* Add support for reading keys in PKCS #8 format and export via instance methods + added to `OpenSSL::PKey` classes: `private_to_der`, `private_to_pem`, + `public_to_der` and `public_to_pem`. + [[GitHub #297]](https://github.com/ruby/openssl/pull/297) + + +Version 2.1.3 +============= + +Bug fixes +--------- + +* Fix deprecation warnings on Ruby 3.0. +* Add ".include" directive support in `OpenSSL::Config`. + [[GitHub #216]](https://github.com/ruby/openssl/pull/216) +* Fix handling of IPv6 address SANs. + [[GitHub #185]](https://github.com/ruby/openssl/pull/185) +* Hostname verification failure with `OpenSSL::SSL::SSLContext#verify_hostname=` + sets a proper error code. + [[GitHub #350]](https://github.com/ruby/openssl/pull/350) +* Fix crash with `OpenSSL::BN.new(nil, 2)`. + [[Bug #15760]](https://bugs.ruby-lang.org/issues/15760) +* `OpenSSL::SSL::SSLSocket#sys{read,write}` prevent internal string buffers from + being modified by another thread. + [[GitHub #453]](https://github.com/ruby/openssl/pull/453) +* Fix misuse of input record separator in `OpenSSL::Buffering` where it was + for output. +* Fix wrong integer casting in `OpenSSL::PKey::EC#dsa_verify_asn1`. + [[GitHub #460]](https://github.com/ruby/openssl/pull/460) +* `extconf.rb` explicitly checks that OpenSSL's version number is 1.0.1 or + newer but also less than 3.0. Ruby/OpenSSL v2.1.x and v2.2.x will not support + OpenSSL 3.0 API. + [[GitHub #458]](https://github.com/ruby/openssl/pull/458) +* Activate `digest` gem correctly. `digest` library could go into an + inconsistent state if there are multiple versions of `digest` is installed + and `openssl` is `require`d before `digest`. + [[GitHub #463]](https://github.com/ruby/openssl/pull/463) +* Fix GC.compact compatibility. + [[GitHub #464]](https://github.com/ruby/openssl/issues/464) + [[GitHub #465]](https://github.com/ruby/openssl/pull/465) + + Version 2.1.2 ============= diff --git a/ruby/ext/openssl/depend b/ruby/ext/openssl/depend index 68cf35729..742c8bbd1 100644 --- a/ruby/ext/openssl/depend +++ b/ruby/ext/openssl/depend @@ -8,9 +8,165 @@ ossl.o: $(arch_hdrdir)/ruby/config.h ossl.o: $(hdrdir)/ruby.h ossl.o: $(hdrdir)/ruby/assert.h ossl.o: $(hdrdir)/ruby/backward.h +ossl.o: $(hdrdir)/ruby/backward/2/assume.h +ossl.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl.o: $(hdrdir)/ruby/backward/2/bool.h +ossl.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl.o: $(hdrdir)/ruby/backward/2/limits.h +ossl.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl.o: $(hdrdir)/ruby/defines.h ossl.o: $(hdrdir)/ruby/encoding.h ossl.o: $(hdrdir)/ruby/intern.h +ossl.o: $(hdrdir)/ruby/internal/anyargs.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl.o: $(hdrdir)/ruby/internal/assume.h +ossl.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl.o: $(hdrdir)/ruby/internal/attr/const.h +ossl.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl.o: $(hdrdir)/ruby/internal/attr/error.h +ossl.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl.o: $(hdrdir)/ruby/internal/attr/format.h +ossl.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl.o: $(hdrdir)/ruby/internal/cast.h +ossl.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl.o: $(hdrdir)/ruby/internal/config.h +ossl.o: $(hdrdir)/ruby/internal/constant_p.h +ossl.o: $(hdrdir)/ruby/internal/core.h +ossl.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl.o: $(hdrdir)/ruby/internal/core/robject.h +ossl.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl.o: $(hdrdir)/ruby/internal/ctype.h +ossl.o: $(hdrdir)/ruby/internal/dllexport.h +ossl.o: $(hdrdir)/ruby/internal/dosish.h +ossl.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl.o: $(hdrdir)/ruby/internal/error.h +ossl.o: $(hdrdir)/ruby/internal/eval.h +ossl.o: $(hdrdir)/ruby/internal/event.h +ossl.o: $(hdrdir)/ruby/internal/fl_type.h +ossl.o: $(hdrdir)/ruby/internal/gc.h +ossl.o: $(hdrdir)/ruby/internal/glob.h +ossl.o: $(hdrdir)/ruby/internal/globals.h +ossl.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl.o: $(hdrdir)/ruby/internal/has/extension.h +ossl.o: $(hdrdir)/ruby/internal/has/feature.h +ossl.o: $(hdrdir)/ruby/internal/has/warning.h +ossl.o: $(hdrdir)/ruby/internal/intern/array.h +ossl.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl.o: $(hdrdir)/ruby/internal/intern/class.h +ossl.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl.o: $(hdrdir)/ruby/internal/intern/error.h +ossl.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl.o: $(hdrdir)/ruby/internal/intern/file.h +ossl.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl.o: $(hdrdir)/ruby/internal/intern/io.h +ossl.o: $(hdrdir)/ruby/internal/intern/load.h +ossl.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl.o: $(hdrdir)/ruby/internal/intern/object.h +ossl.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl.o: $(hdrdir)/ruby/internal/intern/process.h +ossl.o: $(hdrdir)/ruby/internal/intern/random.h +ossl.o: $(hdrdir)/ruby/internal/intern/range.h +ossl.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl.o: $(hdrdir)/ruby/internal/intern/re.h +ossl.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl.o: $(hdrdir)/ruby/internal/intern/select.h +ossl.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl.o: $(hdrdir)/ruby/internal/intern/string.h +ossl.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl.o: $(hdrdir)/ruby/internal/intern/time.h +ossl.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl.o: $(hdrdir)/ruby/internal/interpreter.h +ossl.o: $(hdrdir)/ruby/internal/iterator.h +ossl.o: $(hdrdir)/ruby/internal/memory.h +ossl.o: $(hdrdir)/ruby/internal/method.h +ossl.o: $(hdrdir)/ruby/internal/module.h +ossl.o: $(hdrdir)/ruby/internal/newobj.h +ossl.o: $(hdrdir)/ruby/internal/rgengc.h +ossl.o: $(hdrdir)/ruby/internal/scan_args.h +ossl.o: $(hdrdir)/ruby/internal/special_consts.h +ossl.o: $(hdrdir)/ruby/internal/static_assert.h +ossl.o: $(hdrdir)/ruby/internal/stdalign.h +ossl.o: $(hdrdir)/ruby/internal/stdbool.h +ossl.o: $(hdrdir)/ruby/internal/symbol.h +ossl.o: $(hdrdir)/ruby/internal/value.h +ossl.o: $(hdrdir)/ruby/internal/value_type.h +ossl.o: $(hdrdir)/ruby/internal/variable.h +ossl.o: $(hdrdir)/ruby/internal/warning_push.h +ossl.o: $(hdrdir)/ruby/internal/xmalloc.h ossl.o: $(hdrdir)/ruby/io.h ossl.o: $(hdrdir)/ruby/missing.h ossl.o: $(hdrdir)/ruby/onigmo.h @@ -19,7 +175,6 @@ ossl.o: $(hdrdir)/ruby/ruby.h ossl.o: $(hdrdir)/ruby/st.h ossl.o: $(hdrdir)/ruby/subst.h ossl.o: $(hdrdir)/ruby/thread.h -ossl.o: $(hdrdir)/ruby/thread_native.h ossl.o: openssl_missing.h ossl.o: ossl.c ossl.o: ossl.h @@ -39,17 +194,172 @@ ossl.o: ossl_pkcs7.h ossl.o: ossl_pkey.h ossl.o: ossl_rand.h ossl.o: ossl_ssl.h -ossl.o: ossl_version.h +ossl.o: ossl_ts.h ossl.o: ossl_x509.h -ossl.o: ruby_missing.h ossl_asn1.o: $(RUBY_EXTCONF_H) ossl_asn1.o: $(arch_hdrdir)/ruby/config.h ossl_asn1.o: $(hdrdir)/ruby.h ossl_asn1.o: $(hdrdir)/ruby/assert.h ossl_asn1.o: $(hdrdir)/ruby/backward.h +ossl_asn1.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_asn1.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_asn1.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_asn1.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_asn1.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_asn1.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_asn1.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_asn1.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_asn1.o: $(hdrdir)/ruby/defines.h ossl_asn1.o: $(hdrdir)/ruby/encoding.h ossl_asn1.o: $(hdrdir)/ruby/intern.h +ossl_asn1.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_asn1.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_asn1.o: $(hdrdir)/ruby/internal/assume.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_asn1.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_asn1.o: $(hdrdir)/ruby/internal/cast.h +ossl_asn1.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_asn1.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_asn1.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_asn1.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_asn1.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_asn1.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_asn1.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_asn1.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_asn1.o: $(hdrdir)/ruby/internal/config.h +ossl_asn1.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_asn1.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_asn1.o: $(hdrdir)/ruby/internal/ctype.h +ossl_asn1.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_asn1.o: $(hdrdir)/ruby/internal/dosish.h +ossl_asn1.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_asn1.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_asn1.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_asn1.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_asn1.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_asn1.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_asn1.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_asn1.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_asn1.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_asn1.o: $(hdrdir)/ruby/internal/error.h +ossl_asn1.o: $(hdrdir)/ruby/internal/eval.h +ossl_asn1.o: $(hdrdir)/ruby/internal/event.h +ossl_asn1.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_asn1.o: $(hdrdir)/ruby/internal/gc.h +ossl_asn1.o: $(hdrdir)/ruby/internal/glob.h +ossl_asn1.o: $(hdrdir)/ruby/internal/globals.h +ossl_asn1.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_asn1.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_asn1.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_asn1.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_asn1.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_asn1.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_asn1.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_asn1.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_asn1.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_asn1.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_asn1.o: $(hdrdir)/ruby/internal/iterator.h +ossl_asn1.o: $(hdrdir)/ruby/internal/memory.h +ossl_asn1.o: $(hdrdir)/ruby/internal/method.h +ossl_asn1.o: $(hdrdir)/ruby/internal/module.h +ossl_asn1.o: $(hdrdir)/ruby/internal/newobj.h +ossl_asn1.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_asn1.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_asn1.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_asn1.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_asn1.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_asn1.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_asn1.o: $(hdrdir)/ruby/internal/symbol.h +ossl_asn1.o: $(hdrdir)/ruby/internal/value.h +ossl_asn1.o: $(hdrdir)/ruby/internal/value_type.h +ossl_asn1.o: $(hdrdir)/ruby/internal/variable.h +ossl_asn1.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_asn1.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_asn1.o: $(hdrdir)/ruby/io.h ossl_asn1.o: $(hdrdir)/ruby/missing.h ossl_asn1.o: $(hdrdir)/ruby/onigmo.h @@ -77,17 +387,172 @@ ossl_asn1.o: ossl_pkcs7.h ossl_asn1.o: ossl_pkey.h ossl_asn1.o: ossl_rand.h ossl_asn1.o: ossl_ssl.h -ossl_asn1.o: ossl_version.h +ossl_asn1.o: ossl_ts.h ossl_asn1.o: ossl_x509.h -ossl_asn1.o: ruby_missing.h ossl_bio.o: $(RUBY_EXTCONF_H) ossl_bio.o: $(arch_hdrdir)/ruby/config.h ossl_bio.o: $(hdrdir)/ruby.h ossl_bio.o: $(hdrdir)/ruby/assert.h ossl_bio.o: $(hdrdir)/ruby/backward.h +ossl_bio.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_bio.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_bio.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_bio.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_bio.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_bio.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_bio.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_bio.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_bio.o: $(hdrdir)/ruby/defines.h ossl_bio.o: $(hdrdir)/ruby/encoding.h ossl_bio.o: $(hdrdir)/ruby/intern.h +ossl_bio.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_bio.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_bio.o: $(hdrdir)/ruby/internal/assume.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_bio.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_bio.o: $(hdrdir)/ruby/internal/cast.h +ossl_bio.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_bio.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_bio.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_bio.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_bio.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_bio.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_bio.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_bio.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_bio.o: $(hdrdir)/ruby/internal/config.h +ossl_bio.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_bio.o: $(hdrdir)/ruby/internal/core.h +ossl_bio.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_bio.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_bio.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_bio.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_bio.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_bio.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_bio.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_bio.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_bio.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_bio.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_bio.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_bio.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_bio.o: $(hdrdir)/ruby/internal/ctype.h +ossl_bio.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_bio.o: $(hdrdir)/ruby/internal/dosish.h +ossl_bio.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_bio.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_bio.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_bio.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_bio.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_bio.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_bio.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_bio.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_bio.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_bio.o: $(hdrdir)/ruby/internal/error.h +ossl_bio.o: $(hdrdir)/ruby/internal/eval.h +ossl_bio.o: $(hdrdir)/ruby/internal/event.h +ossl_bio.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_bio.o: $(hdrdir)/ruby/internal/gc.h +ossl_bio.o: $(hdrdir)/ruby/internal/glob.h +ossl_bio.o: $(hdrdir)/ruby/internal/globals.h +ossl_bio.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_bio.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_bio.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_bio.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_bio.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_bio.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_bio.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_bio.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_bio.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_bio.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_bio.o: $(hdrdir)/ruby/internal/iterator.h +ossl_bio.o: $(hdrdir)/ruby/internal/memory.h +ossl_bio.o: $(hdrdir)/ruby/internal/method.h +ossl_bio.o: $(hdrdir)/ruby/internal/module.h +ossl_bio.o: $(hdrdir)/ruby/internal/newobj.h +ossl_bio.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_bio.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_bio.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_bio.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_bio.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_bio.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_bio.o: $(hdrdir)/ruby/internal/symbol.h +ossl_bio.o: $(hdrdir)/ruby/internal/value.h +ossl_bio.o: $(hdrdir)/ruby/internal/value_type.h +ossl_bio.o: $(hdrdir)/ruby/internal/variable.h +ossl_bio.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_bio.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_bio.o: $(hdrdir)/ruby/io.h ossl_bio.o: $(hdrdir)/ruby/missing.h ossl_bio.o: $(hdrdir)/ruby/onigmo.h @@ -115,21 +580,177 @@ ossl_bio.o: ossl_pkcs7.h ossl_bio.o: ossl_pkey.h ossl_bio.o: ossl_rand.h ossl_bio.o: ossl_ssl.h -ossl_bio.o: ossl_version.h +ossl_bio.o: ossl_ts.h ossl_bio.o: ossl_x509.h -ossl_bio.o: ruby_missing.h ossl_bn.o: $(RUBY_EXTCONF_H) ossl_bn.o: $(arch_hdrdir)/ruby/config.h ossl_bn.o: $(hdrdir)/ruby.h ossl_bn.o: $(hdrdir)/ruby/assert.h ossl_bn.o: $(hdrdir)/ruby/backward.h +ossl_bn.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_bn.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_bn.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_bn.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_bn.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_bn.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_bn.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_bn.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_bn.o: $(hdrdir)/ruby/defines.h ossl_bn.o: $(hdrdir)/ruby/encoding.h ossl_bn.o: $(hdrdir)/ruby/intern.h +ossl_bn.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_bn.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_bn.o: $(hdrdir)/ruby/internal/assume.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_bn.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_bn.o: $(hdrdir)/ruby/internal/cast.h +ossl_bn.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_bn.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_bn.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_bn.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_bn.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_bn.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_bn.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_bn.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_bn.o: $(hdrdir)/ruby/internal/config.h +ossl_bn.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_bn.o: $(hdrdir)/ruby/internal/core.h +ossl_bn.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_bn.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_bn.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_bn.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_bn.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_bn.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_bn.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_bn.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_bn.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_bn.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_bn.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_bn.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_bn.o: $(hdrdir)/ruby/internal/ctype.h +ossl_bn.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_bn.o: $(hdrdir)/ruby/internal/dosish.h +ossl_bn.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_bn.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_bn.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_bn.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_bn.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_bn.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_bn.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_bn.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_bn.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_bn.o: $(hdrdir)/ruby/internal/error.h +ossl_bn.o: $(hdrdir)/ruby/internal/eval.h +ossl_bn.o: $(hdrdir)/ruby/internal/event.h +ossl_bn.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_bn.o: $(hdrdir)/ruby/internal/gc.h +ossl_bn.o: $(hdrdir)/ruby/internal/glob.h +ossl_bn.o: $(hdrdir)/ruby/internal/globals.h +ossl_bn.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_bn.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_bn.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_bn.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_bn.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_bn.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_bn.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_bn.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_bn.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_bn.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_bn.o: $(hdrdir)/ruby/internal/iterator.h +ossl_bn.o: $(hdrdir)/ruby/internal/memory.h +ossl_bn.o: $(hdrdir)/ruby/internal/method.h +ossl_bn.o: $(hdrdir)/ruby/internal/module.h +ossl_bn.o: $(hdrdir)/ruby/internal/newobj.h +ossl_bn.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_bn.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_bn.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_bn.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_bn.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_bn.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_bn.o: $(hdrdir)/ruby/internal/symbol.h +ossl_bn.o: $(hdrdir)/ruby/internal/value.h +ossl_bn.o: $(hdrdir)/ruby/internal/value_type.h +ossl_bn.o: $(hdrdir)/ruby/internal/variable.h +ossl_bn.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_bn.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_bn.o: $(hdrdir)/ruby/io.h ossl_bn.o: $(hdrdir)/ruby/missing.h ossl_bn.o: $(hdrdir)/ruby/onigmo.h ossl_bn.o: $(hdrdir)/ruby/oniguruma.h +ossl_bn.o: $(hdrdir)/ruby/ractor.h ossl_bn.o: $(hdrdir)/ruby/ruby.h ossl_bn.o: $(hdrdir)/ruby/st.h ossl_bn.o: $(hdrdir)/ruby/subst.h @@ -153,17 +774,172 @@ ossl_bn.o: ossl_pkcs7.h ossl_bn.o: ossl_pkey.h ossl_bn.o: ossl_rand.h ossl_bn.o: ossl_ssl.h -ossl_bn.o: ossl_version.h +ossl_bn.o: ossl_ts.h ossl_bn.o: ossl_x509.h -ossl_bn.o: ruby_missing.h ossl_cipher.o: $(RUBY_EXTCONF_H) ossl_cipher.o: $(arch_hdrdir)/ruby/config.h ossl_cipher.o: $(hdrdir)/ruby.h ossl_cipher.o: $(hdrdir)/ruby/assert.h ossl_cipher.o: $(hdrdir)/ruby/backward.h +ossl_cipher.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_cipher.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_cipher.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_cipher.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_cipher.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_cipher.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_cipher.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_cipher.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_cipher.o: $(hdrdir)/ruby/defines.h ossl_cipher.o: $(hdrdir)/ruby/encoding.h ossl_cipher.o: $(hdrdir)/ruby/intern.h +ossl_cipher.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_cipher.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_cipher.o: $(hdrdir)/ruby/internal/assume.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_cipher.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_cipher.o: $(hdrdir)/ruby/internal/cast.h +ossl_cipher.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_cipher.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_cipher.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_cipher.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_cipher.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_cipher.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_cipher.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_cipher.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_cipher.o: $(hdrdir)/ruby/internal/config.h +ossl_cipher.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_cipher.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_cipher.o: $(hdrdir)/ruby/internal/ctype.h +ossl_cipher.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_cipher.o: $(hdrdir)/ruby/internal/dosish.h +ossl_cipher.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_cipher.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_cipher.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_cipher.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_cipher.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_cipher.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_cipher.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_cipher.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_cipher.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_cipher.o: $(hdrdir)/ruby/internal/error.h +ossl_cipher.o: $(hdrdir)/ruby/internal/eval.h +ossl_cipher.o: $(hdrdir)/ruby/internal/event.h +ossl_cipher.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_cipher.o: $(hdrdir)/ruby/internal/gc.h +ossl_cipher.o: $(hdrdir)/ruby/internal/glob.h +ossl_cipher.o: $(hdrdir)/ruby/internal/globals.h +ossl_cipher.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_cipher.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_cipher.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_cipher.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_cipher.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_cipher.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_cipher.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_cipher.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_cipher.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_cipher.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_cipher.o: $(hdrdir)/ruby/internal/iterator.h +ossl_cipher.o: $(hdrdir)/ruby/internal/memory.h +ossl_cipher.o: $(hdrdir)/ruby/internal/method.h +ossl_cipher.o: $(hdrdir)/ruby/internal/module.h +ossl_cipher.o: $(hdrdir)/ruby/internal/newobj.h +ossl_cipher.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_cipher.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_cipher.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_cipher.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_cipher.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_cipher.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_cipher.o: $(hdrdir)/ruby/internal/symbol.h +ossl_cipher.o: $(hdrdir)/ruby/internal/value.h +ossl_cipher.o: $(hdrdir)/ruby/internal/value_type.h +ossl_cipher.o: $(hdrdir)/ruby/internal/variable.h +ossl_cipher.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_cipher.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_cipher.o: $(hdrdir)/ruby/io.h ossl_cipher.o: $(hdrdir)/ruby/missing.h ossl_cipher.o: $(hdrdir)/ruby/onigmo.h @@ -191,17 +967,172 @@ ossl_cipher.o: ossl_pkcs7.h ossl_cipher.o: ossl_pkey.h ossl_cipher.o: ossl_rand.h ossl_cipher.o: ossl_ssl.h -ossl_cipher.o: ossl_version.h +ossl_cipher.o: ossl_ts.h ossl_cipher.o: ossl_x509.h -ossl_cipher.o: ruby_missing.h ossl_config.o: $(RUBY_EXTCONF_H) ossl_config.o: $(arch_hdrdir)/ruby/config.h ossl_config.o: $(hdrdir)/ruby.h ossl_config.o: $(hdrdir)/ruby/assert.h ossl_config.o: $(hdrdir)/ruby/backward.h +ossl_config.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_config.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_config.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_config.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_config.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_config.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_config.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_config.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_config.o: $(hdrdir)/ruby/defines.h ossl_config.o: $(hdrdir)/ruby/encoding.h ossl_config.o: $(hdrdir)/ruby/intern.h +ossl_config.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_config.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_config.o: $(hdrdir)/ruby/internal/assume.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_config.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_config.o: $(hdrdir)/ruby/internal/cast.h +ossl_config.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_config.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_config.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_config.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_config.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_config.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_config.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_config.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_config.o: $(hdrdir)/ruby/internal/config.h +ossl_config.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_config.o: $(hdrdir)/ruby/internal/core.h +ossl_config.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_config.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_config.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_config.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_config.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_config.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_config.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_config.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_config.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_config.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_config.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_config.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_config.o: $(hdrdir)/ruby/internal/ctype.h +ossl_config.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_config.o: $(hdrdir)/ruby/internal/dosish.h +ossl_config.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_config.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_config.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_config.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_config.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_config.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_config.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_config.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_config.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_config.o: $(hdrdir)/ruby/internal/error.h +ossl_config.o: $(hdrdir)/ruby/internal/eval.h +ossl_config.o: $(hdrdir)/ruby/internal/event.h +ossl_config.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_config.o: $(hdrdir)/ruby/internal/gc.h +ossl_config.o: $(hdrdir)/ruby/internal/glob.h +ossl_config.o: $(hdrdir)/ruby/internal/globals.h +ossl_config.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_config.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_config.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_config.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_config.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_config.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_config.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_config.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_config.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_config.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_config.o: $(hdrdir)/ruby/internal/iterator.h +ossl_config.o: $(hdrdir)/ruby/internal/memory.h +ossl_config.o: $(hdrdir)/ruby/internal/method.h +ossl_config.o: $(hdrdir)/ruby/internal/module.h +ossl_config.o: $(hdrdir)/ruby/internal/newobj.h +ossl_config.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_config.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_config.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_config.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_config.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_config.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_config.o: $(hdrdir)/ruby/internal/symbol.h +ossl_config.o: $(hdrdir)/ruby/internal/value.h +ossl_config.o: $(hdrdir)/ruby/internal/value_type.h +ossl_config.o: $(hdrdir)/ruby/internal/variable.h +ossl_config.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_config.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_config.o: $(hdrdir)/ruby/io.h ossl_config.o: $(hdrdir)/ruby/missing.h ossl_config.o: $(hdrdir)/ruby/onigmo.h @@ -229,17 +1160,172 @@ ossl_config.o: ossl_pkcs7.h ossl_config.o: ossl_pkey.h ossl_config.o: ossl_rand.h ossl_config.o: ossl_ssl.h -ossl_config.o: ossl_version.h +ossl_config.o: ossl_ts.h ossl_config.o: ossl_x509.h -ossl_config.o: ruby_missing.h ossl_digest.o: $(RUBY_EXTCONF_H) ossl_digest.o: $(arch_hdrdir)/ruby/config.h ossl_digest.o: $(hdrdir)/ruby.h ossl_digest.o: $(hdrdir)/ruby/assert.h ossl_digest.o: $(hdrdir)/ruby/backward.h +ossl_digest.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_digest.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_digest.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_digest.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_digest.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_digest.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_digest.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_digest.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_digest.o: $(hdrdir)/ruby/defines.h ossl_digest.o: $(hdrdir)/ruby/encoding.h ossl_digest.o: $(hdrdir)/ruby/intern.h +ossl_digest.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_digest.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_digest.o: $(hdrdir)/ruby/internal/assume.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_digest.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_digest.o: $(hdrdir)/ruby/internal/cast.h +ossl_digest.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_digest.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_digest.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_digest.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_digest.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_digest.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_digest.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_digest.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_digest.o: $(hdrdir)/ruby/internal/config.h +ossl_digest.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_digest.o: $(hdrdir)/ruby/internal/core.h +ossl_digest.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_digest.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_digest.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_digest.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_digest.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_digest.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_digest.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_digest.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_digest.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_digest.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_digest.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_digest.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_digest.o: $(hdrdir)/ruby/internal/ctype.h +ossl_digest.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_digest.o: $(hdrdir)/ruby/internal/dosish.h +ossl_digest.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_digest.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_digest.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_digest.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_digest.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_digest.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_digest.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_digest.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_digest.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_digest.o: $(hdrdir)/ruby/internal/error.h +ossl_digest.o: $(hdrdir)/ruby/internal/eval.h +ossl_digest.o: $(hdrdir)/ruby/internal/event.h +ossl_digest.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_digest.o: $(hdrdir)/ruby/internal/gc.h +ossl_digest.o: $(hdrdir)/ruby/internal/glob.h +ossl_digest.o: $(hdrdir)/ruby/internal/globals.h +ossl_digest.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_digest.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_digest.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_digest.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_digest.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_digest.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_digest.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_digest.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_digest.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_digest.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_digest.o: $(hdrdir)/ruby/internal/iterator.h +ossl_digest.o: $(hdrdir)/ruby/internal/memory.h +ossl_digest.o: $(hdrdir)/ruby/internal/method.h +ossl_digest.o: $(hdrdir)/ruby/internal/module.h +ossl_digest.o: $(hdrdir)/ruby/internal/newobj.h +ossl_digest.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_digest.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_digest.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_digest.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_digest.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_digest.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_digest.o: $(hdrdir)/ruby/internal/symbol.h +ossl_digest.o: $(hdrdir)/ruby/internal/value.h +ossl_digest.o: $(hdrdir)/ruby/internal/value_type.h +ossl_digest.o: $(hdrdir)/ruby/internal/variable.h +ossl_digest.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_digest.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_digest.o: $(hdrdir)/ruby/io.h ossl_digest.o: $(hdrdir)/ruby/missing.h ossl_digest.o: $(hdrdir)/ruby/onigmo.h @@ -267,17 +1353,172 @@ ossl_digest.o: ossl_pkcs7.h ossl_digest.o: ossl_pkey.h ossl_digest.o: ossl_rand.h ossl_digest.o: ossl_ssl.h -ossl_digest.o: ossl_version.h +ossl_digest.o: ossl_ts.h ossl_digest.o: ossl_x509.h -ossl_digest.o: ruby_missing.h ossl_engine.o: $(RUBY_EXTCONF_H) ossl_engine.o: $(arch_hdrdir)/ruby/config.h ossl_engine.o: $(hdrdir)/ruby.h ossl_engine.o: $(hdrdir)/ruby/assert.h ossl_engine.o: $(hdrdir)/ruby/backward.h +ossl_engine.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_engine.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_engine.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_engine.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_engine.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_engine.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_engine.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_engine.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_engine.o: $(hdrdir)/ruby/defines.h ossl_engine.o: $(hdrdir)/ruby/encoding.h ossl_engine.o: $(hdrdir)/ruby/intern.h +ossl_engine.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_engine.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_engine.o: $(hdrdir)/ruby/internal/assume.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_engine.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_engine.o: $(hdrdir)/ruby/internal/cast.h +ossl_engine.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_engine.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_engine.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_engine.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_engine.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_engine.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_engine.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_engine.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_engine.o: $(hdrdir)/ruby/internal/config.h +ossl_engine.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_engine.o: $(hdrdir)/ruby/internal/core.h +ossl_engine.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_engine.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_engine.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_engine.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_engine.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_engine.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_engine.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_engine.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_engine.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_engine.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_engine.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_engine.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_engine.o: $(hdrdir)/ruby/internal/ctype.h +ossl_engine.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_engine.o: $(hdrdir)/ruby/internal/dosish.h +ossl_engine.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_engine.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_engine.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_engine.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_engine.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_engine.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_engine.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_engine.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_engine.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_engine.o: $(hdrdir)/ruby/internal/error.h +ossl_engine.o: $(hdrdir)/ruby/internal/eval.h +ossl_engine.o: $(hdrdir)/ruby/internal/event.h +ossl_engine.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_engine.o: $(hdrdir)/ruby/internal/gc.h +ossl_engine.o: $(hdrdir)/ruby/internal/glob.h +ossl_engine.o: $(hdrdir)/ruby/internal/globals.h +ossl_engine.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_engine.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_engine.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_engine.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_engine.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_engine.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_engine.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_engine.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_engine.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_engine.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_engine.o: $(hdrdir)/ruby/internal/iterator.h +ossl_engine.o: $(hdrdir)/ruby/internal/memory.h +ossl_engine.o: $(hdrdir)/ruby/internal/method.h +ossl_engine.o: $(hdrdir)/ruby/internal/module.h +ossl_engine.o: $(hdrdir)/ruby/internal/newobj.h +ossl_engine.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_engine.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_engine.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_engine.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_engine.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_engine.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_engine.o: $(hdrdir)/ruby/internal/symbol.h +ossl_engine.o: $(hdrdir)/ruby/internal/value.h +ossl_engine.o: $(hdrdir)/ruby/internal/value_type.h +ossl_engine.o: $(hdrdir)/ruby/internal/variable.h +ossl_engine.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_engine.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_engine.o: $(hdrdir)/ruby/io.h ossl_engine.o: $(hdrdir)/ruby/missing.h ossl_engine.o: $(hdrdir)/ruby/onigmo.h @@ -305,17 +1546,172 @@ ossl_engine.o: ossl_pkcs7.h ossl_engine.o: ossl_pkey.h ossl_engine.o: ossl_rand.h ossl_engine.o: ossl_ssl.h -ossl_engine.o: ossl_version.h +ossl_engine.o: ossl_ts.h ossl_engine.o: ossl_x509.h -ossl_engine.o: ruby_missing.h ossl_hmac.o: $(RUBY_EXTCONF_H) ossl_hmac.o: $(arch_hdrdir)/ruby/config.h ossl_hmac.o: $(hdrdir)/ruby.h ossl_hmac.o: $(hdrdir)/ruby/assert.h ossl_hmac.o: $(hdrdir)/ruby/backward.h +ossl_hmac.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_hmac.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_hmac.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_hmac.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_hmac.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_hmac.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_hmac.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_hmac.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_hmac.o: $(hdrdir)/ruby/defines.h ossl_hmac.o: $(hdrdir)/ruby/encoding.h ossl_hmac.o: $(hdrdir)/ruby/intern.h +ossl_hmac.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_hmac.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_hmac.o: $(hdrdir)/ruby/internal/assume.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_hmac.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_hmac.o: $(hdrdir)/ruby/internal/cast.h +ossl_hmac.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_hmac.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_hmac.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_hmac.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_hmac.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_hmac.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_hmac.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_hmac.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_hmac.o: $(hdrdir)/ruby/internal/config.h +ossl_hmac.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_hmac.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_hmac.o: $(hdrdir)/ruby/internal/ctype.h +ossl_hmac.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_hmac.o: $(hdrdir)/ruby/internal/dosish.h +ossl_hmac.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_hmac.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_hmac.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_hmac.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_hmac.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_hmac.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_hmac.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_hmac.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_hmac.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_hmac.o: $(hdrdir)/ruby/internal/error.h +ossl_hmac.o: $(hdrdir)/ruby/internal/eval.h +ossl_hmac.o: $(hdrdir)/ruby/internal/event.h +ossl_hmac.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_hmac.o: $(hdrdir)/ruby/internal/gc.h +ossl_hmac.o: $(hdrdir)/ruby/internal/glob.h +ossl_hmac.o: $(hdrdir)/ruby/internal/globals.h +ossl_hmac.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_hmac.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_hmac.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_hmac.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_hmac.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_hmac.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_hmac.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_hmac.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_hmac.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_hmac.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_hmac.o: $(hdrdir)/ruby/internal/iterator.h +ossl_hmac.o: $(hdrdir)/ruby/internal/memory.h +ossl_hmac.o: $(hdrdir)/ruby/internal/method.h +ossl_hmac.o: $(hdrdir)/ruby/internal/module.h +ossl_hmac.o: $(hdrdir)/ruby/internal/newobj.h +ossl_hmac.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_hmac.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_hmac.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_hmac.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_hmac.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_hmac.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_hmac.o: $(hdrdir)/ruby/internal/symbol.h +ossl_hmac.o: $(hdrdir)/ruby/internal/value.h +ossl_hmac.o: $(hdrdir)/ruby/internal/value_type.h +ossl_hmac.o: $(hdrdir)/ruby/internal/variable.h +ossl_hmac.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_hmac.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_hmac.o: $(hdrdir)/ruby/io.h ossl_hmac.o: $(hdrdir)/ruby/missing.h ossl_hmac.o: $(hdrdir)/ruby/onigmo.h @@ -343,17 +1739,172 @@ ossl_hmac.o: ossl_pkcs7.h ossl_hmac.o: ossl_pkey.h ossl_hmac.o: ossl_rand.h ossl_hmac.o: ossl_ssl.h -ossl_hmac.o: ossl_version.h +ossl_hmac.o: ossl_ts.h ossl_hmac.o: ossl_x509.h -ossl_hmac.o: ruby_missing.h ossl_kdf.o: $(RUBY_EXTCONF_H) ossl_kdf.o: $(arch_hdrdir)/ruby/config.h ossl_kdf.o: $(hdrdir)/ruby.h ossl_kdf.o: $(hdrdir)/ruby/assert.h ossl_kdf.o: $(hdrdir)/ruby/backward.h +ossl_kdf.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_kdf.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_kdf.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_kdf.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_kdf.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_kdf.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_kdf.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_kdf.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_kdf.o: $(hdrdir)/ruby/defines.h ossl_kdf.o: $(hdrdir)/ruby/encoding.h ossl_kdf.o: $(hdrdir)/ruby/intern.h +ossl_kdf.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_kdf.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_kdf.o: $(hdrdir)/ruby/internal/assume.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_kdf.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_kdf.o: $(hdrdir)/ruby/internal/cast.h +ossl_kdf.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_kdf.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_kdf.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_kdf.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_kdf.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_kdf.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_kdf.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_kdf.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_kdf.o: $(hdrdir)/ruby/internal/config.h +ossl_kdf.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_kdf.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_kdf.o: $(hdrdir)/ruby/internal/ctype.h +ossl_kdf.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_kdf.o: $(hdrdir)/ruby/internal/dosish.h +ossl_kdf.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_kdf.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_kdf.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_kdf.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_kdf.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_kdf.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_kdf.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_kdf.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_kdf.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_kdf.o: $(hdrdir)/ruby/internal/error.h +ossl_kdf.o: $(hdrdir)/ruby/internal/eval.h +ossl_kdf.o: $(hdrdir)/ruby/internal/event.h +ossl_kdf.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_kdf.o: $(hdrdir)/ruby/internal/gc.h +ossl_kdf.o: $(hdrdir)/ruby/internal/glob.h +ossl_kdf.o: $(hdrdir)/ruby/internal/globals.h +ossl_kdf.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_kdf.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_kdf.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_kdf.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_kdf.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_kdf.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_kdf.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_kdf.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_kdf.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_kdf.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_kdf.o: $(hdrdir)/ruby/internal/iterator.h +ossl_kdf.o: $(hdrdir)/ruby/internal/memory.h +ossl_kdf.o: $(hdrdir)/ruby/internal/method.h +ossl_kdf.o: $(hdrdir)/ruby/internal/module.h +ossl_kdf.o: $(hdrdir)/ruby/internal/newobj.h +ossl_kdf.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_kdf.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_kdf.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_kdf.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_kdf.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_kdf.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_kdf.o: $(hdrdir)/ruby/internal/symbol.h +ossl_kdf.o: $(hdrdir)/ruby/internal/value.h +ossl_kdf.o: $(hdrdir)/ruby/internal/value_type.h +ossl_kdf.o: $(hdrdir)/ruby/internal/variable.h +ossl_kdf.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_kdf.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_kdf.o: $(hdrdir)/ruby/io.h ossl_kdf.o: $(hdrdir)/ruby/missing.h ossl_kdf.o: $(hdrdir)/ruby/onigmo.h @@ -381,17 +1932,172 @@ ossl_kdf.o: ossl_pkcs7.h ossl_kdf.o: ossl_pkey.h ossl_kdf.o: ossl_rand.h ossl_kdf.o: ossl_ssl.h -ossl_kdf.o: ossl_version.h +ossl_kdf.o: ossl_ts.h ossl_kdf.o: ossl_x509.h -ossl_kdf.o: ruby_missing.h ossl_ns_spki.o: $(RUBY_EXTCONF_H) ossl_ns_spki.o: $(arch_hdrdir)/ruby/config.h ossl_ns_spki.o: $(hdrdir)/ruby.h ossl_ns_spki.o: $(hdrdir)/ruby/assert.h ossl_ns_spki.o: $(hdrdir)/ruby/backward.h +ossl_ns_spki.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_ns_spki.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_ns_spki.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_ns_spki.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_ns_spki.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_ns_spki.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_ns_spki.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_ns_spki.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_ns_spki.o: $(hdrdir)/ruby/defines.h ossl_ns_spki.o: $(hdrdir)/ruby/encoding.h ossl_ns_spki.o: $(hdrdir)/ruby/intern.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/assume.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/cast.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/config.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/ctype.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/dosish.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/error.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/eval.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/event.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/gc.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/glob.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/globals.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/iterator.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/memory.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/method.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/module.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/newobj.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/symbol.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/value.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/value_type.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/variable.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_ns_spki.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_ns_spki.o: $(hdrdir)/ruby/io.h ossl_ns_spki.o: $(hdrdir)/ruby/missing.h ossl_ns_spki.o: $(hdrdir)/ruby/onigmo.h @@ -419,17 +2125,172 @@ ossl_ns_spki.o: ossl_pkcs7.h ossl_ns_spki.o: ossl_pkey.h ossl_ns_spki.o: ossl_rand.h ossl_ns_spki.o: ossl_ssl.h -ossl_ns_spki.o: ossl_version.h +ossl_ns_spki.o: ossl_ts.h ossl_ns_spki.o: ossl_x509.h -ossl_ns_spki.o: ruby_missing.h ossl_ocsp.o: $(RUBY_EXTCONF_H) ossl_ocsp.o: $(arch_hdrdir)/ruby/config.h ossl_ocsp.o: $(hdrdir)/ruby.h ossl_ocsp.o: $(hdrdir)/ruby/assert.h ossl_ocsp.o: $(hdrdir)/ruby/backward.h +ossl_ocsp.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_ocsp.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_ocsp.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_ocsp.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_ocsp.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_ocsp.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_ocsp.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_ocsp.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_ocsp.o: $(hdrdir)/ruby/defines.h ossl_ocsp.o: $(hdrdir)/ruby/encoding.h ossl_ocsp.o: $(hdrdir)/ruby/intern.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/assume.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/cast.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/config.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/ctype.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/dosish.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/error.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/eval.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/event.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/gc.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/glob.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/globals.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/iterator.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/memory.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/method.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/module.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/newobj.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/symbol.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/value.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/value_type.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/variable.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_ocsp.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_ocsp.o: $(hdrdir)/ruby/io.h ossl_ocsp.o: $(hdrdir)/ruby/missing.h ossl_ocsp.o: $(hdrdir)/ruby/onigmo.h @@ -457,17 +2318,172 @@ ossl_ocsp.o: ossl_pkcs7.h ossl_ocsp.o: ossl_pkey.h ossl_ocsp.o: ossl_rand.h ossl_ocsp.o: ossl_ssl.h -ossl_ocsp.o: ossl_version.h +ossl_ocsp.o: ossl_ts.h ossl_ocsp.o: ossl_x509.h -ossl_ocsp.o: ruby_missing.h ossl_pkcs12.o: $(RUBY_EXTCONF_H) ossl_pkcs12.o: $(arch_hdrdir)/ruby/config.h ossl_pkcs12.o: $(hdrdir)/ruby.h ossl_pkcs12.o: $(hdrdir)/ruby/assert.h ossl_pkcs12.o: $(hdrdir)/ruby/backward.h +ossl_pkcs12.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_pkcs12.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_pkcs12.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_pkcs12.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_pkcs12.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_pkcs12.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_pkcs12.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_pkcs12.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_pkcs12.o: $(hdrdir)/ruby/defines.h ossl_pkcs12.o: $(hdrdir)/ruby/encoding.h ossl_pkcs12.o: $(hdrdir)/ruby/intern.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/assume.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/cast.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/config.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/ctype.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/dosish.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/error.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/eval.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/event.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/gc.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/glob.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/globals.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/iterator.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/memory.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/method.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/module.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/newobj.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/symbol.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/value.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/value_type.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/variable.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_pkcs12.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_pkcs12.o: $(hdrdir)/ruby/io.h ossl_pkcs12.o: $(hdrdir)/ruby/missing.h ossl_pkcs12.o: $(hdrdir)/ruby/onigmo.h @@ -495,17 +2511,172 @@ ossl_pkcs12.o: ossl_pkcs7.h ossl_pkcs12.o: ossl_pkey.h ossl_pkcs12.o: ossl_rand.h ossl_pkcs12.o: ossl_ssl.h -ossl_pkcs12.o: ossl_version.h +ossl_pkcs12.o: ossl_ts.h ossl_pkcs12.o: ossl_x509.h -ossl_pkcs12.o: ruby_missing.h ossl_pkcs7.o: $(RUBY_EXTCONF_H) ossl_pkcs7.o: $(arch_hdrdir)/ruby/config.h ossl_pkcs7.o: $(hdrdir)/ruby.h ossl_pkcs7.o: $(hdrdir)/ruby/assert.h ossl_pkcs7.o: $(hdrdir)/ruby/backward.h +ossl_pkcs7.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_pkcs7.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_pkcs7.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_pkcs7.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_pkcs7.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_pkcs7.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_pkcs7.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_pkcs7.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_pkcs7.o: $(hdrdir)/ruby/defines.h ossl_pkcs7.o: $(hdrdir)/ruby/encoding.h ossl_pkcs7.o: $(hdrdir)/ruby/intern.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/assume.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/cast.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/config.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/ctype.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/dosish.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/error.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/eval.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/event.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/gc.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/glob.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/globals.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/iterator.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/memory.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/method.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/module.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/newobj.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/symbol.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/value.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/value_type.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/variable.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_pkcs7.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_pkcs7.o: $(hdrdir)/ruby/io.h ossl_pkcs7.o: $(hdrdir)/ruby/missing.h ossl_pkcs7.o: $(hdrdir)/ruby/onigmo.h @@ -533,17 +2704,172 @@ ossl_pkcs7.o: ossl_pkcs7.h ossl_pkcs7.o: ossl_pkey.h ossl_pkcs7.o: ossl_rand.h ossl_pkcs7.o: ossl_ssl.h -ossl_pkcs7.o: ossl_version.h +ossl_pkcs7.o: ossl_ts.h ossl_pkcs7.o: ossl_x509.h -ossl_pkcs7.o: ruby_missing.h ossl_pkey.o: $(RUBY_EXTCONF_H) ossl_pkey.o: $(arch_hdrdir)/ruby/config.h ossl_pkey.o: $(hdrdir)/ruby.h ossl_pkey.o: $(hdrdir)/ruby/assert.h ossl_pkey.o: $(hdrdir)/ruby/backward.h +ossl_pkey.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_pkey.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_pkey.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_pkey.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_pkey.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_pkey.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_pkey.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_pkey.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_pkey.o: $(hdrdir)/ruby/defines.h ossl_pkey.o: $(hdrdir)/ruby/encoding.h ossl_pkey.o: $(hdrdir)/ruby/intern.h +ossl_pkey.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_pkey.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_pkey.o: $(hdrdir)/ruby/internal/assume.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_pkey.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_pkey.o: $(hdrdir)/ruby/internal/cast.h +ossl_pkey.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_pkey.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_pkey.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_pkey.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_pkey.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_pkey.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_pkey.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_pkey.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_pkey.o: $(hdrdir)/ruby/internal/config.h +ossl_pkey.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_pkey.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_pkey.o: $(hdrdir)/ruby/internal/ctype.h +ossl_pkey.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_pkey.o: $(hdrdir)/ruby/internal/dosish.h +ossl_pkey.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_pkey.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_pkey.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_pkey.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_pkey.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_pkey.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_pkey.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_pkey.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_pkey.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_pkey.o: $(hdrdir)/ruby/internal/error.h +ossl_pkey.o: $(hdrdir)/ruby/internal/eval.h +ossl_pkey.o: $(hdrdir)/ruby/internal/event.h +ossl_pkey.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_pkey.o: $(hdrdir)/ruby/internal/gc.h +ossl_pkey.o: $(hdrdir)/ruby/internal/glob.h +ossl_pkey.o: $(hdrdir)/ruby/internal/globals.h +ossl_pkey.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_pkey.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_pkey.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_pkey.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_pkey.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_pkey.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_pkey.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_pkey.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_pkey.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_pkey.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_pkey.o: $(hdrdir)/ruby/internal/iterator.h +ossl_pkey.o: $(hdrdir)/ruby/internal/memory.h +ossl_pkey.o: $(hdrdir)/ruby/internal/method.h +ossl_pkey.o: $(hdrdir)/ruby/internal/module.h +ossl_pkey.o: $(hdrdir)/ruby/internal/newobj.h +ossl_pkey.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_pkey.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_pkey.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_pkey.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_pkey.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_pkey.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_pkey.o: $(hdrdir)/ruby/internal/symbol.h +ossl_pkey.o: $(hdrdir)/ruby/internal/value.h +ossl_pkey.o: $(hdrdir)/ruby/internal/value_type.h +ossl_pkey.o: $(hdrdir)/ruby/internal/variable.h +ossl_pkey.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_pkey.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_pkey.o: $(hdrdir)/ruby/io.h ossl_pkey.o: $(hdrdir)/ruby/missing.h ossl_pkey.o: $(hdrdir)/ruby/onigmo.h @@ -571,17 +2897,172 @@ ossl_pkey.o: ossl_pkey.c ossl_pkey.o: ossl_pkey.h ossl_pkey.o: ossl_rand.h ossl_pkey.o: ossl_ssl.h -ossl_pkey.o: ossl_version.h +ossl_pkey.o: ossl_ts.h ossl_pkey.o: ossl_x509.h -ossl_pkey.o: ruby_missing.h ossl_pkey_dh.o: $(RUBY_EXTCONF_H) ossl_pkey_dh.o: $(arch_hdrdir)/ruby/config.h ossl_pkey_dh.o: $(hdrdir)/ruby.h ossl_pkey_dh.o: $(hdrdir)/ruby/assert.h ossl_pkey_dh.o: $(hdrdir)/ruby/backward.h +ossl_pkey_dh.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_pkey_dh.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_pkey_dh.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_pkey_dh.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_pkey_dh.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_pkey_dh.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_pkey_dh.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_pkey_dh.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_pkey_dh.o: $(hdrdir)/ruby/defines.h ossl_pkey_dh.o: $(hdrdir)/ruby/encoding.h ossl_pkey_dh.o: $(hdrdir)/ruby/intern.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/assume.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/cast.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/config.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/ctype.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/dosish.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/error.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/eval.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/event.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/gc.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/glob.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/globals.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/iterator.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/memory.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/method.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/module.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/newobj.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/symbol.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/value.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/value_type.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/variable.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_pkey_dh.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_pkey_dh.o: $(hdrdir)/ruby/io.h ossl_pkey_dh.o: $(hdrdir)/ruby/missing.h ossl_pkey_dh.o: $(hdrdir)/ruby/onigmo.h @@ -609,17 +3090,172 @@ ossl_pkey_dh.o: ossl_pkey.h ossl_pkey_dh.o: ossl_pkey_dh.c ossl_pkey_dh.o: ossl_rand.h ossl_pkey_dh.o: ossl_ssl.h -ossl_pkey_dh.o: ossl_version.h +ossl_pkey_dh.o: ossl_ts.h ossl_pkey_dh.o: ossl_x509.h -ossl_pkey_dh.o: ruby_missing.h ossl_pkey_dsa.o: $(RUBY_EXTCONF_H) ossl_pkey_dsa.o: $(arch_hdrdir)/ruby/config.h ossl_pkey_dsa.o: $(hdrdir)/ruby.h ossl_pkey_dsa.o: $(hdrdir)/ruby/assert.h ossl_pkey_dsa.o: $(hdrdir)/ruby/backward.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_pkey_dsa.o: $(hdrdir)/ruby/defines.h ossl_pkey_dsa.o: $(hdrdir)/ruby/encoding.h ossl_pkey_dsa.o: $(hdrdir)/ruby/intern.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/assume.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/cast.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/config.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/ctype.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/dosish.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/error.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/eval.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/event.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/gc.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/glob.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/globals.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/iterator.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/memory.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/method.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/module.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/newobj.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/symbol.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/value.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/value_type.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/variable.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_pkey_dsa.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_pkey_dsa.o: $(hdrdir)/ruby/io.h ossl_pkey_dsa.o: $(hdrdir)/ruby/missing.h ossl_pkey_dsa.o: $(hdrdir)/ruby/onigmo.h @@ -647,17 +3283,172 @@ ossl_pkey_dsa.o: ossl_pkey.h ossl_pkey_dsa.o: ossl_pkey_dsa.c ossl_pkey_dsa.o: ossl_rand.h ossl_pkey_dsa.o: ossl_ssl.h -ossl_pkey_dsa.o: ossl_version.h +ossl_pkey_dsa.o: ossl_ts.h ossl_pkey_dsa.o: ossl_x509.h -ossl_pkey_dsa.o: ruby_missing.h ossl_pkey_ec.o: $(RUBY_EXTCONF_H) ossl_pkey_ec.o: $(arch_hdrdir)/ruby/config.h ossl_pkey_ec.o: $(hdrdir)/ruby.h ossl_pkey_ec.o: $(hdrdir)/ruby/assert.h ossl_pkey_ec.o: $(hdrdir)/ruby/backward.h +ossl_pkey_ec.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_pkey_ec.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_pkey_ec.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_pkey_ec.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_pkey_ec.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_pkey_ec.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_pkey_ec.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_pkey_ec.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_pkey_ec.o: $(hdrdir)/ruby/defines.h ossl_pkey_ec.o: $(hdrdir)/ruby/encoding.h ossl_pkey_ec.o: $(hdrdir)/ruby/intern.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/assume.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/cast.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/config.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/ctype.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/dosish.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/error.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/eval.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/event.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/gc.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/glob.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/globals.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/iterator.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/memory.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/method.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/module.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/newobj.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/symbol.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/value.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/value_type.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/variable.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_pkey_ec.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_pkey_ec.o: $(hdrdir)/ruby/io.h ossl_pkey_ec.o: $(hdrdir)/ruby/missing.h ossl_pkey_ec.o: $(hdrdir)/ruby/onigmo.h @@ -685,17 +3476,172 @@ ossl_pkey_ec.o: ossl_pkey.h ossl_pkey_ec.o: ossl_pkey_ec.c ossl_pkey_ec.o: ossl_rand.h ossl_pkey_ec.o: ossl_ssl.h -ossl_pkey_ec.o: ossl_version.h +ossl_pkey_ec.o: ossl_ts.h ossl_pkey_ec.o: ossl_x509.h -ossl_pkey_ec.o: ruby_missing.h ossl_pkey_rsa.o: $(RUBY_EXTCONF_H) ossl_pkey_rsa.o: $(arch_hdrdir)/ruby/config.h ossl_pkey_rsa.o: $(hdrdir)/ruby.h ossl_pkey_rsa.o: $(hdrdir)/ruby/assert.h ossl_pkey_rsa.o: $(hdrdir)/ruby/backward.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_pkey_rsa.o: $(hdrdir)/ruby/defines.h ossl_pkey_rsa.o: $(hdrdir)/ruby/encoding.h ossl_pkey_rsa.o: $(hdrdir)/ruby/intern.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/assume.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/cast.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/config.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/ctype.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/dosish.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/error.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/eval.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/event.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/gc.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/glob.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/globals.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/iterator.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/memory.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/method.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/module.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/newobj.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/symbol.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/value.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/value_type.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/variable.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_pkey_rsa.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_pkey_rsa.o: $(hdrdir)/ruby/io.h ossl_pkey_rsa.o: $(hdrdir)/ruby/missing.h ossl_pkey_rsa.o: $(hdrdir)/ruby/onigmo.h @@ -723,17 +3669,172 @@ ossl_pkey_rsa.o: ossl_pkey.h ossl_pkey_rsa.o: ossl_pkey_rsa.c ossl_pkey_rsa.o: ossl_rand.h ossl_pkey_rsa.o: ossl_ssl.h -ossl_pkey_rsa.o: ossl_version.h +ossl_pkey_rsa.o: ossl_ts.h ossl_pkey_rsa.o: ossl_x509.h -ossl_pkey_rsa.o: ruby_missing.h ossl_rand.o: $(RUBY_EXTCONF_H) ossl_rand.o: $(arch_hdrdir)/ruby/config.h ossl_rand.o: $(hdrdir)/ruby.h ossl_rand.o: $(hdrdir)/ruby/assert.h ossl_rand.o: $(hdrdir)/ruby/backward.h +ossl_rand.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_rand.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_rand.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_rand.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_rand.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_rand.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_rand.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_rand.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_rand.o: $(hdrdir)/ruby/defines.h ossl_rand.o: $(hdrdir)/ruby/encoding.h ossl_rand.o: $(hdrdir)/ruby/intern.h +ossl_rand.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_rand.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_rand.o: $(hdrdir)/ruby/internal/assume.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_rand.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_rand.o: $(hdrdir)/ruby/internal/cast.h +ossl_rand.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_rand.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_rand.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_rand.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_rand.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_rand.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_rand.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_rand.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_rand.o: $(hdrdir)/ruby/internal/config.h +ossl_rand.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_rand.o: $(hdrdir)/ruby/internal/core.h +ossl_rand.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_rand.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_rand.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_rand.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_rand.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_rand.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_rand.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_rand.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_rand.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_rand.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_rand.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_rand.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_rand.o: $(hdrdir)/ruby/internal/ctype.h +ossl_rand.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_rand.o: $(hdrdir)/ruby/internal/dosish.h +ossl_rand.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_rand.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_rand.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_rand.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_rand.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_rand.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_rand.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_rand.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_rand.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_rand.o: $(hdrdir)/ruby/internal/error.h +ossl_rand.o: $(hdrdir)/ruby/internal/eval.h +ossl_rand.o: $(hdrdir)/ruby/internal/event.h +ossl_rand.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_rand.o: $(hdrdir)/ruby/internal/gc.h +ossl_rand.o: $(hdrdir)/ruby/internal/glob.h +ossl_rand.o: $(hdrdir)/ruby/internal/globals.h +ossl_rand.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_rand.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_rand.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_rand.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_rand.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_rand.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_rand.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_rand.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_rand.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_rand.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_rand.o: $(hdrdir)/ruby/internal/iterator.h +ossl_rand.o: $(hdrdir)/ruby/internal/memory.h +ossl_rand.o: $(hdrdir)/ruby/internal/method.h +ossl_rand.o: $(hdrdir)/ruby/internal/module.h +ossl_rand.o: $(hdrdir)/ruby/internal/newobj.h +ossl_rand.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_rand.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_rand.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_rand.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_rand.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_rand.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_rand.o: $(hdrdir)/ruby/internal/symbol.h +ossl_rand.o: $(hdrdir)/ruby/internal/value.h +ossl_rand.o: $(hdrdir)/ruby/internal/value_type.h +ossl_rand.o: $(hdrdir)/ruby/internal/variable.h +ossl_rand.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_rand.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_rand.o: $(hdrdir)/ruby/io.h ossl_rand.o: $(hdrdir)/ruby/missing.h ossl_rand.o: $(hdrdir)/ruby/onigmo.h @@ -761,17 +3862,172 @@ ossl_rand.o: ossl_pkey.h ossl_rand.o: ossl_rand.c ossl_rand.o: ossl_rand.h ossl_rand.o: ossl_ssl.h -ossl_rand.o: ossl_version.h +ossl_rand.o: ossl_ts.h ossl_rand.o: ossl_x509.h -ossl_rand.o: ruby_missing.h ossl_ssl.o: $(RUBY_EXTCONF_H) ossl_ssl.o: $(arch_hdrdir)/ruby/config.h ossl_ssl.o: $(hdrdir)/ruby.h ossl_ssl.o: $(hdrdir)/ruby/assert.h ossl_ssl.o: $(hdrdir)/ruby/backward.h +ossl_ssl.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_ssl.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_ssl.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_ssl.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_ssl.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_ssl.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_ssl.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_ssl.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_ssl.o: $(hdrdir)/ruby/defines.h ossl_ssl.o: $(hdrdir)/ruby/encoding.h ossl_ssl.o: $(hdrdir)/ruby/intern.h +ossl_ssl.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_ssl.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_ssl.o: $(hdrdir)/ruby/internal/assume.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_ssl.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_ssl.o: $(hdrdir)/ruby/internal/cast.h +ossl_ssl.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_ssl.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_ssl.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_ssl.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_ssl.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_ssl.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_ssl.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_ssl.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_ssl.o: $(hdrdir)/ruby/internal/config.h +ossl_ssl.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_ssl.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_ssl.o: $(hdrdir)/ruby/internal/ctype.h +ossl_ssl.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_ssl.o: $(hdrdir)/ruby/internal/dosish.h +ossl_ssl.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_ssl.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_ssl.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_ssl.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_ssl.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_ssl.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_ssl.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_ssl.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_ssl.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_ssl.o: $(hdrdir)/ruby/internal/error.h +ossl_ssl.o: $(hdrdir)/ruby/internal/eval.h +ossl_ssl.o: $(hdrdir)/ruby/internal/event.h +ossl_ssl.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_ssl.o: $(hdrdir)/ruby/internal/gc.h +ossl_ssl.o: $(hdrdir)/ruby/internal/glob.h +ossl_ssl.o: $(hdrdir)/ruby/internal/globals.h +ossl_ssl.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_ssl.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_ssl.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_ssl.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_ssl.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_ssl.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_ssl.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_ssl.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_ssl.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_ssl.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_ssl.o: $(hdrdir)/ruby/internal/iterator.h +ossl_ssl.o: $(hdrdir)/ruby/internal/memory.h +ossl_ssl.o: $(hdrdir)/ruby/internal/method.h +ossl_ssl.o: $(hdrdir)/ruby/internal/module.h +ossl_ssl.o: $(hdrdir)/ruby/internal/newobj.h +ossl_ssl.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_ssl.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_ssl.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_ssl.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_ssl.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_ssl.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_ssl.o: $(hdrdir)/ruby/internal/symbol.h +ossl_ssl.o: $(hdrdir)/ruby/internal/value.h +ossl_ssl.o: $(hdrdir)/ruby/internal/value_type.h +ossl_ssl.o: $(hdrdir)/ruby/internal/variable.h +ossl_ssl.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_ssl.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_ssl.o: $(hdrdir)/ruby/io.h ossl_ssl.o: $(hdrdir)/ruby/missing.h ossl_ssl.o: $(hdrdir)/ruby/onigmo.h @@ -799,17 +4055,172 @@ ossl_ssl.o: ossl_pkey.h ossl_ssl.o: ossl_rand.h ossl_ssl.o: ossl_ssl.c ossl_ssl.o: ossl_ssl.h -ossl_ssl.o: ossl_version.h +ossl_ssl.o: ossl_ts.h ossl_ssl.o: ossl_x509.h -ossl_ssl.o: ruby_missing.h ossl_ssl_session.o: $(RUBY_EXTCONF_H) ossl_ssl_session.o: $(arch_hdrdir)/ruby/config.h ossl_ssl_session.o: $(hdrdir)/ruby.h ossl_ssl_session.o: $(hdrdir)/ruby/assert.h ossl_ssl_session.o: $(hdrdir)/ruby/backward.h +ossl_ssl_session.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_ssl_session.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_ssl_session.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_ssl_session.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_ssl_session.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_ssl_session.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_ssl_session.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_ssl_session.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_ssl_session.o: $(hdrdir)/ruby/defines.h ossl_ssl_session.o: $(hdrdir)/ruby/encoding.h ossl_ssl_session.o: $(hdrdir)/ruby/intern.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/assume.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/cast.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/config.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/ctype.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/dosish.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/error.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/eval.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/event.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/gc.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/glob.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/globals.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/iterator.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/memory.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/method.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/module.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/newobj.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/symbol.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/value.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/value_type.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/variable.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_ssl_session.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_ssl_session.o: $(hdrdir)/ruby/io.h ossl_ssl_session.o: $(hdrdir)/ruby/missing.h ossl_ssl_session.o: $(hdrdir)/ruby/onigmo.h @@ -837,17 +4248,365 @@ ossl_ssl_session.o: ossl_pkey.h ossl_ssl_session.o: ossl_rand.h ossl_ssl_session.o: ossl_ssl.h ossl_ssl_session.o: ossl_ssl_session.c -ossl_ssl_session.o: ossl_version.h +ossl_ssl_session.o: ossl_ts.h ossl_ssl_session.o: ossl_x509.h -ossl_ssl_session.o: ruby_missing.h +ossl_ts.o: $(RUBY_EXTCONF_H) +ossl_ts.o: $(arch_hdrdir)/ruby/config.h +ossl_ts.o: $(hdrdir)/ruby.h +ossl_ts.o: $(hdrdir)/ruby/assert.h +ossl_ts.o: $(hdrdir)/ruby/backward.h +ossl_ts.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_ts.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_ts.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_ts.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_ts.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_ts.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_ts.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_ts.o: $(hdrdir)/ruby/backward/2/stdarg.h +ossl_ts.o: $(hdrdir)/ruby/defines.h +ossl_ts.o: $(hdrdir)/ruby/encoding.h +ossl_ts.o: $(hdrdir)/ruby/intern.h +ossl_ts.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_ts.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_ts.o: $(hdrdir)/ruby/internal/assume.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_ts.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_ts.o: $(hdrdir)/ruby/internal/cast.h +ossl_ts.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_ts.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_ts.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_ts.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_ts.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_ts.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_ts.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_ts.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_ts.o: $(hdrdir)/ruby/internal/config.h +ossl_ts.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_ts.o: $(hdrdir)/ruby/internal/core.h +ossl_ts.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_ts.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_ts.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_ts.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_ts.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_ts.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_ts.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_ts.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_ts.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_ts.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_ts.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_ts.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_ts.o: $(hdrdir)/ruby/internal/ctype.h +ossl_ts.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_ts.o: $(hdrdir)/ruby/internal/dosish.h +ossl_ts.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_ts.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_ts.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_ts.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_ts.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_ts.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_ts.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_ts.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_ts.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_ts.o: $(hdrdir)/ruby/internal/error.h +ossl_ts.o: $(hdrdir)/ruby/internal/eval.h +ossl_ts.o: $(hdrdir)/ruby/internal/event.h +ossl_ts.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_ts.o: $(hdrdir)/ruby/internal/gc.h +ossl_ts.o: $(hdrdir)/ruby/internal/glob.h +ossl_ts.o: $(hdrdir)/ruby/internal/globals.h +ossl_ts.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_ts.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_ts.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_ts.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_ts.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_ts.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_ts.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_ts.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_ts.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_ts.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_ts.o: $(hdrdir)/ruby/internal/iterator.h +ossl_ts.o: $(hdrdir)/ruby/internal/memory.h +ossl_ts.o: $(hdrdir)/ruby/internal/method.h +ossl_ts.o: $(hdrdir)/ruby/internal/module.h +ossl_ts.o: $(hdrdir)/ruby/internal/newobj.h +ossl_ts.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_ts.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_ts.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_ts.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_ts.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_ts.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_ts.o: $(hdrdir)/ruby/internal/symbol.h +ossl_ts.o: $(hdrdir)/ruby/internal/value.h +ossl_ts.o: $(hdrdir)/ruby/internal/value_type.h +ossl_ts.o: $(hdrdir)/ruby/internal/variable.h +ossl_ts.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_ts.o: $(hdrdir)/ruby/internal/xmalloc.h +ossl_ts.o: $(hdrdir)/ruby/io.h +ossl_ts.o: $(hdrdir)/ruby/missing.h +ossl_ts.o: $(hdrdir)/ruby/onigmo.h +ossl_ts.o: $(hdrdir)/ruby/oniguruma.h +ossl_ts.o: $(hdrdir)/ruby/ruby.h +ossl_ts.o: $(hdrdir)/ruby/st.h +ossl_ts.o: $(hdrdir)/ruby/subst.h +ossl_ts.o: $(hdrdir)/ruby/thread.h +ossl_ts.o: openssl_missing.h +ossl_ts.o: ossl.h +ossl_ts.o: ossl_asn1.h +ossl_ts.o: ossl_bio.h +ossl_ts.o: ossl_bn.h +ossl_ts.o: ossl_cipher.h +ossl_ts.o: ossl_config.h +ossl_ts.o: ossl_digest.h +ossl_ts.o: ossl_engine.h +ossl_ts.o: ossl_hmac.h +ossl_ts.o: ossl_kdf.h +ossl_ts.o: ossl_ns_spki.h +ossl_ts.o: ossl_ocsp.h +ossl_ts.o: ossl_pkcs12.h +ossl_ts.o: ossl_pkcs7.h +ossl_ts.o: ossl_pkey.h +ossl_ts.o: ossl_rand.h +ossl_ts.o: ossl_ssl.h +ossl_ts.o: ossl_ts.c +ossl_ts.o: ossl_ts.h +ossl_ts.o: ossl_x509.h ossl_x509.o: $(RUBY_EXTCONF_H) ossl_x509.o: $(arch_hdrdir)/ruby/config.h ossl_x509.o: $(hdrdir)/ruby.h ossl_x509.o: $(hdrdir)/ruby/assert.h ossl_x509.o: $(hdrdir)/ruby/backward.h +ossl_x509.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_x509.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_x509.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_x509.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_x509.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_x509.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_x509.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_x509.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_x509.o: $(hdrdir)/ruby/defines.h ossl_x509.o: $(hdrdir)/ruby/encoding.h ossl_x509.o: $(hdrdir)/ruby/intern.h +ossl_x509.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_x509.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_x509.o: $(hdrdir)/ruby/internal/assume.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_x509.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_x509.o: $(hdrdir)/ruby/internal/cast.h +ossl_x509.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_x509.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_x509.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_x509.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_x509.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_x509.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_x509.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_x509.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_x509.o: $(hdrdir)/ruby/internal/config.h +ossl_x509.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_x509.o: $(hdrdir)/ruby/internal/core.h +ossl_x509.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_x509.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_x509.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_x509.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_x509.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_x509.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_x509.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_x509.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_x509.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_x509.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_x509.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_x509.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_x509.o: $(hdrdir)/ruby/internal/ctype.h +ossl_x509.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_x509.o: $(hdrdir)/ruby/internal/dosish.h +ossl_x509.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_x509.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_x509.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_x509.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_x509.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_x509.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_x509.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_x509.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_x509.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_x509.o: $(hdrdir)/ruby/internal/error.h +ossl_x509.o: $(hdrdir)/ruby/internal/eval.h +ossl_x509.o: $(hdrdir)/ruby/internal/event.h +ossl_x509.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_x509.o: $(hdrdir)/ruby/internal/gc.h +ossl_x509.o: $(hdrdir)/ruby/internal/glob.h +ossl_x509.o: $(hdrdir)/ruby/internal/globals.h +ossl_x509.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_x509.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_x509.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_x509.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_x509.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_x509.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_x509.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_x509.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_x509.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_x509.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_x509.o: $(hdrdir)/ruby/internal/iterator.h +ossl_x509.o: $(hdrdir)/ruby/internal/memory.h +ossl_x509.o: $(hdrdir)/ruby/internal/method.h +ossl_x509.o: $(hdrdir)/ruby/internal/module.h +ossl_x509.o: $(hdrdir)/ruby/internal/newobj.h +ossl_x509.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_x509.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_x509.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_x509.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_x509.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_x509.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_x509.o: $(hdrdir)/ruby/internal/symbol.h +ossl_x509.o: $(hdrdir)/ruby/internal/value.h +ossl_x509.o: $(hdrdir)/ruby/internal/value_type.h +ossl_x509.o: $(hdrdir)/ruby/internal/variable.h +ossl_x509.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_x509.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_x509.o: $(hdrdir)/ruby/io.h ossl_x509.o: $(hdrdir)/ruby/missing.h ossl_x509.o: $(hdrdir)/ruby/onigmo.h @@ -874,18 +4633,173 @@ ossl_x509.o: ossl_pkcs7.h ossl_x509.o: ossl_pkey.h ossl_x509.o: ossl_rand.h ossl_x509.o: ossl_ssl.h -ossl_x509.o: ossl_version.h +ossl_x509.o: ossl_ts.h ossl_x509.o: ossl_x509.c ossl_x509.o: ossl_x509.h -ossl_x509.o: ruby_missing.h ossl_x509attr.o: $(RUBY_EXTCONF_H) ossl_x509attr.o: $(arch_hdrdir)/ruby/config.h ossl_x509attr.o: $(hdrdir)/ruby.h ossl_x509attr.o: $(hdrdir)/ruby/assert.h ossl_x509attr.o: $(hdrdir)/ruby/backward.h +ossl_x509attr.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_x509attr.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_x509attr.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_x509attr.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_x509attr.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_x509attr.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_x509attr.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_x509attr.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_x509attr.o: $(hdrdir)/ruby/defines.h ossl_x509attr.o: $(hdrdir)/ruby/encoding.h ossl_x509attr.o: $(hdrdir)/ruby/intern.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/assume.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/cast.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/config.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/ctype.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/dosish.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/error.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/eval.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/event.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/gc.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/glob.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/globals.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/iterator.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/memory.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/method.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/module.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/newobj.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/symbol.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/value.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/value_type.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/variable.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_x509attr.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_x509attr.o: $(hdrdir)/ruby/io.h ossl_x509attr.o: $(hdrdir)/ruby/missing.h ossl_x509attr.o: $(hdrdir)/ruby/onigmo.h @@ -912,18 +4826,173 @@ ossl_x509attr.o: ossl_pkcs7.h ossl_x509attr.o: ossl_pkey.h ossl_x509attr.o: ossl_rand.h ossl_x509attr.o: ossl_ssl.h -ossl_x509attr.o: ossl_version.h +ossl_x509attr.o: ossl_ts.h ossl_x509attr.o: ossl_x509.h ossl_x509attr.o: ossl_x509attr.c -ossl_x509attr.o: ruby_missing.h ossl_x509cert.o: $(RUBY_EXTCONF_H) ossl_x509cert.o: $(arch_hdrdir)/ruby/config.h ossl_x509cert.o: $(hdrdir)/ruby.h ossl_x509cert.o: $(hdrdir)/ruby/assert.h ossl_x509cert.o: $(hdrdir)/ruby/backward.h +ossl_x509cert.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_x509cert.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_x509cert.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_x509cert.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_x509cert.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_x509cert.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_x509cert.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_x509cert.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_x509cert.o: $(hdrdir)/ruby/defines.h ossl_x509cert.o: $(hdrdir)/ruby/encoding.h ossl_x509cert.o: $(hdrdir)/ruby/intern.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/assume.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/cast.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/config.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/ctype.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/dosish.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/error.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/eval.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/event.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/gc.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/glob.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/globals.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/iterator.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/memory.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/method.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/module.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/newobj.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/symbol.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/value.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/value_type.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/variable.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_x509cert.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_x509cert.o: $(hdrdir)/ruby/io.h ossl_x509cert.o: $(hdrdir)/ruby/missing.h ossl_x509cert.o: $(hdrdir)/ruby/onigmo.h @@ -950,18 +5019,173 @@ ossl_x509cert.o: ossl_pkcs7.h ossl_x509cert.o: ossl_pkey.h ossl_x509cert.o: ossl_rand.h ossl_x509cert.o: ossl_ssl.h -ossl_x509cert.o: ossl_version.h +ossl_x509cert.o: ossl_ts.h ossl_x509cert.o: ossl_x509.h ossl_x509cert.o: ossl_x509cert.c -ossl_x509cert.o: ruby_missing.h ossl_x509crl.o: $(RUBY_EXTCONF_H) ossl_x509crl.o: $(arch_hdrdir)/ruby/config.h ossl_x509crl.o: $(hdrdir)/ruby.h ossl_x509crl.o: $(hdrdir)/ruby/assert.h ossl_x509crl.o: $(hdrdir)/ruby/backward.h +ossl_x509crl.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_x509crl.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_x509crl.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_x509crl.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_x509crl.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_x509crl.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_x509crl.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_x509crl.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_x509crl.o: $(hdrdir)/ruby/defines.h ossl_x509crl.o: $(hdrdir)/ruby/encoding.h ossl_x509crl.o: $(hdrdir)/ruby/intern.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/assume.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/cast.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/config.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/ctype.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/dosish.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/error.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/eval.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/event.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/gc.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/glob.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/globals.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/iterator.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/memory.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/method.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/module.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/newobj.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/symbol.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/value.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/value_type.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/variable.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_x509crl.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_x509crl.o: $(hdrdir)/ruby/io.h ossl_x509crl.o: $(hdrdir)/ruby/missing.h ossl_x509crl.o: $(hdrdir)/ruby/onigmo.h @@ -988,18 +5212,173 @@ ossl_x509crl.o: ossl_pkcs7.h ossl_x509crl.o: ossl_pkey.h ossl_x509crl.o: ossl_rand.h ossl_x509crl.o: ossl_ssl.h -ossl_x509crl.o: ossl_version.h +ossl_x509crl.o: ossl_ts.h ossl_x509crl.o: ossl_x509.h ossl_x509crl.o: ossl_x509crl.c -ossl_x509crl.o: ruby_missing.h ossl_x509ext.o: $(RUBY_EXTCONF_H) ossl_x509ext.o: $(arch_hdrdir)/ruby/config.h ossl_x509ext.o: $(hdrdir)/ruby.h ossl_x509ext.o: $(hdrdir)/ruby/assert.h ossl_x509ext.o: $(hdrdir)/ruby/backward.h +ossl_x509ext.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_x509ext.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_x509ext.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_x509ext.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_x509ext.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_x509ext.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_x509ext.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_x509ext.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_x509ext.o: $(hdrdir)/ruby/defines.h ossl_x509ext.o: $(hdrdir)/ruby/encoding.h ossl_x509ext.o: $(hdrdir)/ruby/intern.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/assume.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/cast.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/config.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/ctype.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/dosish.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/error.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/eval.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/event.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/gc.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/glob.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/globals.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/iterator.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/memory.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/method.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/module.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/newobj.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/symbol.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/value.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/value_type.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/variable.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_x509ext.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_x509ext.o: $(hdrdir)/ruby/io.h ossl_x509ext.o: $(hdrdir)/ruby/missing.h ossl_x509ext.o: $(hdrdir)/ruby/onigmo.h @@ -1026,18 +5405,173 @@ ossl_x509ext.o: ossl_pkcs7.h ossl_x509ext.o: ossl_pkey.h ossl_x509ext.o: ossl_rand.h ossl_x509ext.o: ossl_ssl.h -ossl_x509ext.o: ossl_version.h +ossl_x509ext.o: ossl_ts.h ossl_x509ext.o: ossl_x509.h ossl_x509ext.o: ossl_x509ext.c -ossl_x509ext.o: ruby_missing.h ossl_x509name.o: $(RUBY_EXTCONF_H) ossl_x509name.o: $(arch_hdrdir)/ruby/config.h ossl_x509name.o: $(hdrdir)/ruby.h ossl_x509name.o: $(hdrdir)/ruby/assert.h ossl_x509name.o: $(hdrdir)/ruby/backward.h +ossl_x509name.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_x509name.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_x509name.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_x509name.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_x509name.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_x509name.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_x509name.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_x509name.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_x509name.o: $(hdrdir)/ruby/defines.h ossl_x509name.o: $(hdrdir)/ruby/encoding.h ossl_x509name.o: $(hdrdir)/ruby/intern.h +ossl_x509name.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_x509name.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_x509name.o: $(hdrdir)/ruby/internal/assume.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_x509name.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_x509name.o: $(hdrdir)/ruby/internal/cast.h +ossl_x509name.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_x509name.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_x509name.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_x509name.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_x509name.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_x509name.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_x509name.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_x509name.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_x509name.o: $(hdrdir)/ruby/internal/config.h +ossl_x509name.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_x509name.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_x509name.o: $(hdrdir)/ruby/internal/ctype.h +ossl_x509name.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_x509name.o: $(hdrdir)/ruby/internal/dosish.h +ossl_x509name.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_x509name.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_x509name.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_x509name.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_x509name.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_x509name.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_x509name.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_x509name.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_x509name.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_x509name.o: $(hdrdir)/ruby/internal/error.h +ossl_x509name.o: $(hdrdir)/ruby/internal/eval.h +ossl_x509name.o: $(hdrdir)/ruby/internal/event.h +ossl_x509name.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_x509name.o: $(hdrdir)/ruby/internal/gc.h +ossl_x509name.o: $(hdrdir)/ruby/internal/glob.h +ossl_x509name.o: $(hdrdir)/ruby/internal/globals.h +ossl_x509name.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_x509name.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_x509name.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_x509name.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_x509name.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_x509name.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_x509name.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_x509name.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_x509name.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_x509name.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_x509name.o: $(hdrdir)/ruby/internal/iterator.h +ossl_x509name.o: $(hdrdir)/ruby/internal/memory.h +ossl_x509name.o: $(hdrdir)/ruby/internal/method.h +ossl_x509name.o: $(hdrdir)/ruby/internal/module.h +ossl_x509name.o: $(hdrdir)/ruby/internal/newobj.h +ossl_x509name.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_x509name.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_x509name.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_x509name.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_x509name.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_x509name.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_x509name.o: $(hdrdir)/ruby/internal/symbol.h +ossl_x509name.o: $(hdrdir)/ruby/internal/value.h +ossl_x509name.o: $(hdrdir)/ruby/internal/value_type.h +ossl_x509name.o: $(hdrdir)/ruby/internal/variable.h +ossl_x509name.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_x509name.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_x509name.o: $(hdrdir)/ruby/io.h ossl_x509name.o: $(hdrdir)/ruby/missing.h ossl_x509name.o: $(hdrdir)/ruby/onigmo.h @@ -1064,18 +5598,173 @@ ossl_x509name.o: ossl_pkcs7.h ossl_x509name.o: ossl_pkey.h ossl_x509name.o: ossl_rand.h ossl_x509name.o: ossl_ssl.h -ossl_x509name.o: ossl_version.h +ossl_x509name.o: ossl_ts.h ossl_x509name.o: ossl_x509.h ossl_x509name.o: ossl_x509name.c -ossl_x509name.o: ruby_missing.h ossl_x509req.o: $(RUBY_EXTCONF_H) ossl_x509req.o: $(arch_hdrdir)/ruby/config.h ossl_x509req.o: $(hdrdir)/ruby.h ossl_x509req.o: $(hdrdir)/ruby/assert.h ossl_x509req.o: $(hdrdir)/ruby/backward.h +ossl_x509req.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_x509req.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_x509req.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_x509req.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_x509req.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_x509req.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_x509req.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_x509req.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_x509req.o: $(hdrdir)/ruby/defines.h ossl_x509req.o: $(hdrdir)/ruby/encoding.h ossl_x509req.o: $(hdrdir)/ruby/intern.h +ossl_x509req.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_x509req.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_x509req.o: $(hdrdir)/ruby/internal/assume.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_x509req.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_x509req.o: $(hdrdir)/ruby/internal/cast.h +ossl_x509req.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_x509req.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_x509req.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_x509req.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_x509req.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_x509req.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_x509req.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_x509req.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_x509req.o: $(hdrdir)/ruby/internal/config.h +ossl_x509req.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_x509req.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_x509req.o: $(hdrdir)/ruby/internal/ctype.h +ossl_x509req.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_x509req.o: $(hdrdir)/ruby/internal/dosish.h +ossl_x509req.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_x509req.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_x509req.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_x509req.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_x509req.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_x509req.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_x509req.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_x509req.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_x509req.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_x509req.o: $(hdrdir)/ruby/internal/error.h +ossl_x509req.o: $(hdrdir)/ruby/internal/eval.h +ossl_x509req.o: $(hdrdir)/ruby/internal/event.h +ossl_x509req.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_x509req.o: $(hdrdir)/ruby/internal/gc.h +ossl_x509req.o: $(hdrdir)/ruby/internal/glob.h +ossl_x509req.o: $(hdrdir)/ruby/internal/globals.h +ossl_x509req.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_x509req.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_x509req.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_x509req.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_x509req.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_x509req.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_x509req.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_x509req.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_x509req.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_x509req.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_x509req.o: $(hdrdir)/ruby/internal/iterator.h +ossl_x509req.o: $(hdrdir)/ruby/internal/memory.h +ossl_x509req.o: $(hdrdir)/ruby/internal/method.h +ossl_x509req.o: $(hdrdir)/ruby/internal/module.h +ossl_x509req.o: $(hdrdir)/ruby/internal/newobj.h +ossl_x509req.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_x509req.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_x509req.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_x509req.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_x509req.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_x509req.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_x509req.o: $(hdrdir)/ruby/internal/symbol.h +ossl_x509req.o: $(hdrdir)/ruby/internal/value.h +ossl_x509req.o: $(hdrdir)/ruby/internal/value_type.h +ossl_x509req.o: $(hdrdir)/ruby/internal/variable.h +ossl_x509req.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_x509req.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_x509req.o: $(hdrdir)/ruby/io.h ossl_x509req.o: $(hdrdir)/ruby/missing.h ossl_x509req.o: $(hdrdir)/ruby/onigmo.h @@ -1102,18 +5791,173 @@ ossl_x509req.o: ossl_pkcs7.h ossl_x509req.o: ossl_pkey.h ossl_x509req.o: ossl_rand.h ossl_x509req.o: ossl_ssl.h -ossl_x509req.o: ossl_version.h +ossl_x509req.o: ossl_ts.h ossl_x509req.o: ossl_x509.h ossl_x509req.o: ossl_x509req.c -ossl_x509req.o: ruby_missing.h ossl_x509revoked.o: $(RUBY_EXTCONF_H) ossl_x509revoked.o: $(arch_hdrdir)/ruby/config.h ossl_x509revoked.o: $(hdrdir)/ruby.h ossl_x509revoked.o: $(hdrdir)/ruby/assert.h ossl_x509revoked.o: $(hdrdir)/ruby/backward.h +ossl_x509revoked.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_x509revoked.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_x509revoked.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_x509revoked.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_x509revoked.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_x509revoked.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_x509revoked.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_x509revoked.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_x509revoked.o: $(hdrdir)/ruby/defines.h ossl_x509revoked.o: $(hdrdir)/ruby/encoding.h ossl_x509revoked.o: $(hdrdir)/ruby/intern.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/assume.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/cast.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/config.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/ctype.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/dosish.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/error.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/eval.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/event.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/gc.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/glob.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/globals.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/iterator.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/memory.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/method.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/module.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/newobj.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/symbol.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/value.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/value_type.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/variable.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_x509revoked.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_x509revoked.o: $(hdrdir)/ruby/io.h ossl_x509revoked.o: $(hdrdir)/ruby/missing.h ossl_x509revoked.o: $(hdrdir)/ruby/onigmo.h @@ -1140,18 +5984,173 @@ ossl_x509revoked.o: ossl_pkcs7.h ossl_x509revoked.o: ossl_pkey.h ossl_x509revoked.o: ossl_rand.h ossl_x509revoked.o: ossl_ssl.h -ossl_x509revoked.o: ossl_version.h +ossl_x509revoked.o: ossl_ts.h ossl_x509revoked.o: ossl_x509.h ossl_x509revoked.o: ossl_x509revoked.c -ossl_x509revoked.o: ruby_missing.h ossl_x509store.o: $(RUBY_EXTCONF_H) ossl_x509store.o: $(arch_hdrdir)/ruby/config.h ossl_x509store.o: $(hdrdir)/ruby.h ossl_x509store.o: $(hdrdir)/ruby/assert.h ossl_x509store.o: $(hdrdir)/ruby/backward.h +ossl_x509store.o: $(hdrdir)/ruby/backward/2/assume.h +ossl_x509store.o: $(hdrdir)/ruby/backward/2/attributes.h +ossl_x509store.o: $(hdrdir)/ruby/backward/2/bool.h +ossl_x509store.o: $(hdrdir)/ruby/backward/2/inttypes.h +ossl_x509store.o: $(hdrdir)/ruby/backward/2/limits.h +ossl_x509store.o: $(hdrdir)/ruby/backward/2/long_long.h +ossl_x509store.o: $(hdrdir)/ruby/backward/2/stdalign.h +ossl_x509store.o: $(hdrdir)/ruby/backward/2/stdarg.h ossl_x509store.o: $(hdrdir)/ruby/defines.h ossl_x509store.o: $(hdrdir)/ruby/encoding.h ossl_x509store.o: $(hdrdir)/ruby/intern.h +ossl_x509store.o: $(hdrdir)/ruby/internal/anyargs.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ossl_x509store.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ossl_x509store.o: $(hdrdir)/ruby/internal/assume.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/artificial.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/cold.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/const.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/error.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/format.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/noalias.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/noinline.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/pure.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/restrict.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/warning.h +ossl_x509store.o: $(hdrdir)/ruby/internal/attr/weakref.h +ossl_x509store.o: $(hdrdir)/ruby/internal/cast.h +ossl_x509store.o: $(hdrdir)/ruby/internal/compiler_is.h +ossl_x509store.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ossl_x509store.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ossl_x509store.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ossl_x509store.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ossl_x509store.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ossl_x509store.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ossl_x509store.o: $(hdrdir)/ruby/internal/compiler_since.h +ossl_x509store.o: $(hdrdir)/ruby/internal/config.h +ossl_x509store.o: $(hdrdir)/ruby/internal/constant_p.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core/rarray.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core/rbasic.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core/rbignum.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core/rclass.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core/rdata.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core/rfile.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core/rhash.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core/robject.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core/rregexp.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core/rstring.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core/rstruct.h +ossl_x509store.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ossl_x509store.o: $(hdrdir)/ruby/internal/ctype.h +ossl_x509store.o: $(hdrdir)/ruby/internal/dllexport.h +ossl_x509store.o: $(hdrdir)/ruby/internal/dosish.h +ossl_x509store.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ossl_x509store.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ossl_x509store.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ossl_x509store.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ossl_x509store.o: $(hdrdir)/ruby/internal/encoding/re.h +ossl_x509store.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ossl_x509store.o: $(hdrdir)/ruby/internal/encoding/string.h +ossl_x509store.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ossl_x509store.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ossl_x509store.o: $(hdrdir)/ruby/internal/error.h +ossl_x509store.o: $(hdrdir)/ruby/internal/eval.h +ossl_x509store.o: $(hdrdir)/ruby/internal/event.h +ossl_x509store.o: $(hdrdir)/ruby/internal/fl_type.h +ossl_x509store.o: $(hdrdir)/ruby/internal/gc.h +ossl_x509store.o: $(hdrdir)/ruby/internal/glob.h +ossl_x509store.o: $(hdrdir)/ruby/internal/globals.h +ossl_x509store.o: $(hdrdir)/ruby/internal/has/attribute.h +ossl_x509store.o: $(hdrdir)/ruby/internal/has/builtin.h +ossl_x509store.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ossl_x509store.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ossl_x509store.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ossl_x509store.o: $(hdrdir)/ruby/internal/has/extension.h +ossl_x509store.o: $(hdrdir)/ruby/internal/has/feature.h +ossl_x509store.o: $(hdrdir)/ruby/internal/has/warning.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/array.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/bignum.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/class.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/compar.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/complex.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/cont.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/dir.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/enum.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/error.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/eval.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/file.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/gc.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/hash.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/io.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/load.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/marshal.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/numeric.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/object.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/parse.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/proc.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/process.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/random.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/range.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/rational.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/re.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/ruby.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/select.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/signal.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/string.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/struct.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/thread.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/time.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/variable.h +ossl_x509store.o: $(hdrdir)/ruby/internal/intern/vm.h +ossl_x509store.o: $(hdrdir)/ruby/internal/interpreter.h +ossl_x509store.o: $(hdrdir)/ruby/internal/iterator.h +ossl_x509store.o: $(hdrdir)/ruby/internal/memory.h +ossl_x509store.o: $(hdrdir)/ruby/internal/method.h +ossl_x509store.o: $(hdrdir)/ruby/internal/module.h +ossl_x509store.o: $(hdrdir)/ruby/internal/newobj.h +ossl_x509store.o: $(hdrdir)/ruby/internal/rgengc.h +ossl_x509store.o: $(hdrdir)/ruby/internal/scan_args.h +ossl_x509store.o: $(hdrdir)/ruby/internal/special_consts.h +ossl_x509store.o: $(hdrdir)/ruby/internal/static_assert.h +ossl_x509store.o: $(hdrdir)/ruby/internal/stdalign.h +ossl_x509store.o: $(hdrdir)/ruby/internal/stdbool.h +ossl_x509store.o: $(hdrdir)/ruby/internal/symbol.h +ossl_x509store.o: $(hdrdir)/ruby/internal/value.h +ossl_x509store.o: $(hdrdir)/ruby/internal/value_type.h +ossl_x509store.o: $(hdrdir)/ruby/internal/variable.h +ossl_x509store.o: $(hdrdir)/ruby/internal/warning_push.h +ossl_x509store.o: $(hdrdir)/ruby/internal/xmalloc.h ossl_x509store.o: $(hdrdir)/ruby/io.h ossl_x509store.o: $(hdrdir)/ruby/missing.h ossl_x509store.o: $(hdrdir)/ruby/onigmo.h @@ -1178,8 +6177,7 @@ ossl_x509store.o: ossl_pkcs7.h ossl_x509store.o: ossl_pkey.h ossl_x509store.o: ossl_rand.h ossl_x509store.o: ossl_ssl.h -ossl_x509store.o: ossl_version.h +ossl_x509store.o: ossl_ts.h ossl_x509store.o: ossl_x509.h ossl_x509store.o: ossl_x509store.c -ossl_x509store.o: ruby_missing.h # AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/openssl/deprecation.rb b/ruby/ext/openssl/deprecation.rb deleted file mode 100644 index afe989ead..000000000 --- a/ruby/ext/openssl/deprecation.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: false -module OpenSSL - def self.deprecated_warning_flag - unless flag = (@deprecated_warning_flag ||= nil) - if try_compile("", flag = "-Werror=deprecated-declarations") - $warnflags = "#{@warnflags = $warnflags}" #{flag}" - else - flag = "" - end - @deprecated_warning_flag = flag - end - flag - end - - def self.restore_warning_flag - $warnflags = @warnflags - end - - def self.check_func(func, header) - have_func(func, header, deprecated_warning_flag) - end - - def self.check_func_or_macro(func, header) - check_func(func, header) or - have_macro(func, header) && $defs.push("-DHAVE_#{func.upcase}") - end -end diff --git a/ruby/ext/openssl/extconf.rb b/ruby/ext/openssl/extconf.rb index 264130bb5..fedcb930f 100644 --- a/ruby/ext/openssl/extconf.rb +++ b/ruby/ext/openssl/extconf.rb @@ -1,5 +1,5 @@ # -*- coding: us-ascii -*- -# frozen_string_literal: false +# frozen_string_literal: true =begin = Info 'OpenSSL for Ruby 2' project @@ -12,16 +12,12 @@ =end require "mkmf" -require File.expand_path('../deprecation', __FILE__) dir_config("openssl") dir_config("kerberos") Logging::message "=== OpenSSL for Ruby configurator ===\n" -# Check with -Werror=deprecated-declarations if available -OpenSSL.deprecated_warning_flag - ## # Adds -DOSSL_DEBUG for compilation and some more targets when GCC is used # To turn it on, use: --with-debug or --enable-debug @@ -30,6 +26,8 @@ $defs.push("-DOSSL_DEBUG") end +have_func("rb_io_maybe_wait") # Ruby 3.1 + Logging::message "=== Checking for system dependent stuff... ===\n" have_library("nsl", "t_open") have_library("socket", "socket") @@ -37,8 +35,11 @@ have_library("ws2_32") end -Logging::message "=== Checking for required stuff... ===\n" -result = pkg_config("openssl") && have_header("openssl/ssl.h") +if $mingw + append_cflags '-D_FORTIFY_SOURCE=2' + append_ldflags '-fstack-protector' + have_library 'ssp' +end def find_openssl_library if $mswin || $mingw @@ -90,60 +91,53 @@ def find_openssl_library return false end -unless result - unless find_openssl_library - Logging::message "=== Checking for required stuff failed. ===\n" - Logging::message "Makefile wasn't created. Fix the errors above.\n" - raise "OpenSSL library could not be found. You might want to use " \ - "--with-openssl-dir= option to specify the prefix where OpenSSL " \ - "is installed." - end +Logging::message "=== Checking for required stuff... ===\n" +pkg_config_found = pkg_config("openssl") && have_header("openssl/ssl.h") + +if !pkg_config_found && !find_openssl_library + Logging::message "=== Checking for required stuff failed. ===\n" + Logging::message "Makefile wasn't created. Fix the errors above.\n" + raise "OpenSSL library could not be found. You might want to use " \ + "--with-openssl-dir= option to specify the prefix where OpenSSL " \ + "is installed." +end + +version_ok = if have_macro("LIBRESSL_VERSION_NUMBER", "openssl/opensslv.h") + is_libressl = true + checking_for("LibreSSL version >= 3.1.0") { + try_static_assert("LIBRESSL_VERSION_NUMBER >= 0x30100000L", "openssl/opensslv.h") } +else + checking_for("OpenSSL version >= 1.0.2") { + try_static_assert("OPENSSL_VERSION_NUMBER >= 0x10002000L", "openssl/opensslv.h") } +end +unless version_ok + raise "OpenSSL >= 1.0.2 or LibreSSL >= 3.1.0 is required" end -unless checking_for("OpenSSL version is 1.0.1 or later") { - try_static_assert("OPENSSL_VERSION_NUMBER >= 0x10001000L", "openssl/opensslv.h") } - raise "OpenSSL >= 1.0.1 or LibreSSL is required" +# Prevent wincrypt.h from being included, which defines conflicting macro with openssl/x509.h +if is_libressl && ($mswin || $mingw) + $defs.push("-DNOCRYPT") end Logging::message "=== Checking for OpenSSL features... ===\n" # compile options have_func("RAND_egd") -engines = %w{builtin_engines openbsd_dev_crypto dynamic 4758cca aep atalla chil - cswift nuron sureware ubsec padlock capi gmp gost cryptodev aesni} +engines = %w{dynamic 4758cca aep atalla chil + cswift nuron sureware ubsec padlock capi gmp gost cryptodev} engines.each { |name| - OpenSSL.check_func_or_macro("ENGINE_load_#{name}", "openssl/engine.h") + have_func("ENGINE_load_#{name}()", "openssl/engine.h") } -if ($mswin || $mingw) && have_macro("LIBRESSL_VERSION_NUMBER", "openssl/opensslv.h") - $defs.push("-DNOCRYPT") -end - -# added in 1.0.2 -have_func("EC_curve_nist2nid") -have_func("X509_REVOKED_dup") -have_func("X509_STORE_CTX_get0_store") -have_func("SSL_CTX_set_alpn_select_cb") -OpenSSL.check_func_or_macro("SSL_CTX_set1_curves_list", "openssl/ssl.h") -OpenSSL.check_func_or_macro("SSL_CTX_set_ecdh_auto", "openssl/ssl.h") -OpenSSL.check_func_or_macro("SSL_get_server_tmp_key", "openssl/ssl.h") -have_func("SSL_is_server") - # added in 1.1.0 -if !have_struct_member("SSL", "ctx", "openssl/ssl.h") || - try_static_assert("LIBRESSL_VERSION_NUMBER >= 0x2070000fL", "openssl/opensslv.h") +if !have_struct_member("SSL", "ctx", "openssl/ssl.h") || is_libressl $defs.push("-DHAVE_OPAQUE_OPENSSL") end -have_func("CRYPTO_lock") || $defs.push("-DHAVE_OPENSSL_110_THREADING_API") -have_func("BN_GENCB_new") -have_func("BN_GENCB_free") -have_func("BN_GENCB_get_arg") have_func("EVP_MD_CTX_new") have_func("EVP_MD_CTX_free") -have_func("HMAC_CTX_new") -have_func("HMAC_CTX_free") -OpenSSL.check_func("RAND_pseudo_bytes", "openssl/rand.h") # deprecated +have_func("EVP_MD_CTX_pkey_ctx") have_func("X509_STORE_get_ex_data") have_func("X509_STORE_set_ex_data") +have_func("X509_STORE_get_ex_new_index") have_func("X509_CRL_get0_signature") have_func("X509_REQ_get0_signature") have_func("X509_REVOKED_get0_serialNumber") @@ -159,16 +153,36 @@ def find_openssl_library have_func("X509_STORE_up_ref") have_func("SSL_SESSION_up_ref") have_func("EVP_PKEY_up_ref") -OpenSSL.check_func_or_macro("SSL_CTX_set_tmp_ecdh_callback", "openssl/ssl.h") # removed -OpenSSL.check_func_or_macro("SSL_CTX_set_min_proto_version", "openssl/ssl.h") +have_func("SSL_CTX_set_min_proto_version(NULL, 0)", "openssl/ssl.h") have_func("SSL_CTX_get_security_level") have_func("X509_get0_notBefore") have_func("SSL_SESSION_get_protocol_version") +have_func("TS_STATUS_INFO_get0_status") +have_func("TS_STATUS_INFO_get0_text") +have_func("TS_STATUS_INFO_get0_failure_info") +have_func("TS_VERIFY_CTS_set_certs(NULL, NULL)", "openssl/ts.h") +have_func("TS_VERIFY_CTX_set_store") +have_func("TS_VERIFY_CTX_add_flags") +have_func("TS_RESP_CTX_set_time_cb") have_func("EVP_PBE_scrypt") +have_func("SSL_CTX_set_post_handshake_auth") + +# added in 1.1.1 +have_func("EVP_PKEY_check") + +# added in 3.0.0 +have_func("SSL_set0_tmp_dh_pkey") +have_func("ERR_get_error_all") +have_func("TS_VERIFY_CTX_set_certs(NULL, NULL)", "openssl/ts.h") +have_func("SSL_CTX_load_verify_file") +have_func("BN_check_prime") +have_func("EVP_MD_CTX_get0_md") +have_func("EVP_MD_CTX_get_pkey_ctx") +have_func("EVP_PKEY_eq") +have_func("EVP_PKEY_dup") Logging::message "=== Checking done. ===\n" create_header -OpenSSL.restore_warning_flag create_makefile("openssl") Logging::message "Done.\n" diff --git a/ruby/ext/openssl/lib/openssl.rb b/ruby/ext/openssl/lib/openssl.rb index 091428292..8a342f15b 100644 --- a/ruby/ext/openssl/lib/openssl.rb +++ b/ruby/ext/openssl/lib/openssl.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true =begin = Info 'OpenSSL for Ruby 2' project @@ -12,11 +12,26 @@ require 'openssl.so' -require 'openssl/bn' -require 'openssl/pkey' -require 'openssl/cipher' -require 'openssl/config' -require 'openssl/digest' -require 'openssl/x509' -require 'openssl/ssl' -require 'openssl/pkcs5' +require_relative 'openssl/bn' +require_relative 'openssl/pkey' +require_relative 'openssl/cipher' +require_relative 'openssl/digest' +require_relative 'openssl/hmac' +require_relative 'openssl/x509' +require_relative 'openssl/ssl' +require_relative 'openssl/pkcs5' +require_relative 'openssl/version' + +module OpenSSL + # call-seq: + # OpenSSL.secure_compare(string, string) -> boolean + # + # Constant time memory comparison. Inputs are hashed using SHA-256 to mask + # the length of the secret. Returns +true+ if the strings are identical, + # +false+ otherwise. + def self.secure_compare(a, b) + hashed_a = OpenSSL::Digest.digest('SHA256', a) + hashed_b = OpenSSL::Digest.digest('SHA256', b) + OpenSSL.fixed_length_secure_compare(hashed_a, hashed_b) && a == b + end +end diff --git a/ruby/ext/openssl/lib/openssl/bn.rb b/ruby/ext/openssl/lib/openssl/bn.rb index 8d1ebefb6..0a5e11b4c 100644 --- a/ruby/ext/openssl/lib/openssl/bn.rb +++ b/ruby/ext/openssl/lib/openssl/bn.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true #-- # # = Ruby-space definitions that completes C-space funcs for BN diff --git a/ruby/ext/openssl/lib/openssl/buffering.rb b/ruby/ext/openssl/lib/openssl/buffering.rb index 5d1586e59..d47e1082e 100644 --- a/ruby/ext/openssl/lib/openssl/buffering.rb +++ b/ruby/ext/openssl/lib/openssl/buffering.rb @@ -1,5 +1,5 @@ # coding: binary -# frozen_string_literal: false +# frozen_string_literal: true #-- #= Info # 'OpenSSL for Ruby 2' project @@ -22,6 +22,29 @@ module OpenSSL::Buffering include Enumerable + # A buffer which will retain binary encoding. + class Buffer < String + BINARY = Encoding::BINARY + + def initialize + super + + force_encoding(BINARY) + end + + def << string + if string.encoding == BINARY + super(string) + else + super(string.b) + end + + return self + end + + alias concat << + end + ## # The "sync mode" of the SSLSocket. # @@ -40,7 +63,7 @@ module OpenSSL::Buffering def initialize(*) super @eof = false - @rbuffer = "" + @rbuffer = Buffer.new @sync = @io.sync end @@ -78,6 +101,15 @@ def consume_rbuff(size=nil) public + # call-seq: + # ssl.getbyte => 81 + # + # Get the next 8bit byte from `ssl`. Returns `nil` on EOF + def getbyte + byte = read(1) + byte && byte.unpack1("C") + end + ## # Reads _size_ bytes from the stream. If _buf_ is provided it must # reference a string which will receive the data. @@ -312,7 +344,7 @@ def eof? # buffer is flushed to the underlying socket. def do_write(s) - @wbuffer = "" unless defined? @wbuffer + @wbuffer = Buffer.new unless defined? @wbuffer @wbuffer << s @wbuffer.force_encoding(Encoding::BINARY) @sync ||= false @@ -398,7 +430,7 @@ def <<(s) # See IO#puts for full details. def puts(*args) - s = "" + s = Buffer.new if args.empty? s << "\n" end @@ -416,7 +448,7 @@ def puts(*args) # See IO#print for full details. def print(*args) - s = "" + s = Buffer.new args.each{ |arg| s << arg.to_s } do_write(s) nil diff --git a/ruby/ext/openssl/lib/openssl/cipher.rb b/ruby/ext/openssl/lib/openssl/cipher.rb index af721b3a8..8ad8c35dd 100644 --- a/ruby/ext/openssl/lib/openssl/cipher.rb +++ b/ruby/ext/openssl/lib/openssl/cipher.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true #-- # = Ruby-space predefined Cipher subclasses # diff --git a/ruby/ext/openssl/lib/openssl/config.rb b/ruby/ext/openssl/lib/openssl/config.rb deleted file mode 100644 index 48d8be006..000000000 --- a/ruby/ext/openssl/lib/openssl/config.rb +++ /dev/null @@ -1,474 +0,0 @@ -# frozen_string_literal: false -=begin -= Ruby-space definitions that completes C-space funcs for Config - -= Info - Copyright (C) 2010 Hiroshi Nakamura - -= Licence - This program is licensed under the same licence as Ruby. - (See the file 'LICENCE'.) - -=end - -require 'stringio' - -module OpenSSL - ## - # = OpenSSL::Config - # - # Configuration for the openssl library. - # - # Many system's installation of openssl library will depend on your system - # configuration. See the value of OpenSSL::Config::DEFAULT_CONFIG_FILE for - # the location of the file for your host. - # - # See also http://www.openssl.org/docs/apps/config.html - class Config - include Enumerable - - class << self - - ## - # Parses a given _string_ as a blob that contains configuration for - # OpenSSL. - # - # If the source of the IO is a file, then consider using #parse_config. - def parse(string) - c = new() - parse_config(StringIO.new(string)).each do |section, hash| - c[section] = hash - end - c - end - - ## - # load is an alias to ::new - alias load new - - ## - # Parses the configuration data read from _io_, see also #parse. - # - # Raises a ConfigError on invalid configuration data. - def parse_config(io) - begin - parse_config_lines(io) - rescue ConfigError => e - e.message.replace("error in line #{io.lineno}: " + e.message) - raise - end - end - - def get_key_string(data, section, key) # :nodoc: - if v = data[section] && data[section][key] - return v - elsif section == 'ENV' - if v = ENV[key] - return v - end - end - if v = data['default'] && data['default'][key] - return v - end - end - - private - - def parse_config_lines(io) - section = 'default' - data = {section => {}} - while definition = get_definition(io) - definition = clear_comments(definition) - next if definition.empty? - if definition[0] == ?[ - if /\[([^\]]*)\]/ =~ definition - section = $1.strip - data[section] ||= {} - else - raise ConfigError, "missing close square bracket" - end - else - if /\A([^:\s]*)(?:::([^:\s]*))?\s*=(.*)\z/ =~ definition - if $2 - section = $1 - key = $2 - else - key = $1 - end - value = unescape_value(data, section, $3) - (data[section] ||= {})[key] = value.strip - else - raise ConfigError, "missing equal sign" - end - end - end - data - end - - # escape with backslash - QUOTE_REGEXP_SQ = /\A([^'\\]*(?:\\.[^'\\]*)*)'/ - # escape with backslash and doubled dq - QUOTE_REGEXP_DQ = /\A([^"\\]*(?:""[^"\\]*|\\.[^"\\]*)*)"/ - # escaped char map - ESCAPE_MAP = { - "r" => "\r", - "n" => "\n", - "b" => "\b", - "t" => "\t", - } - - def unescape_value(data, section, value) - scanned = [] - while m = value.match(/['"\\$]/) - scanned << m.pre_match - c = m[0] - value = m.post_match - case c - when "'" - if m = value.match(QUOTE_REGEXP_SQ) - scanned << m[1].gsub(/\\(.)/, '\\1') - value = m.post_match - else - break - end - when '"' - if m = value.match(QUOTE_REGEXP_DQ) - scanned << m[1].gsub(/""/, '').gsub(/\\(.)/, '\\1') - value = m.post_match - else - break - end - when "\\" - c = value.slice!(0, 1) - scanned << (ESCAPE_MAP[c] || c) - when "$" - ref, value = extract_reference(value) - refsec = section - if ref.index('::') - refsec, ref = ref.split('::', 2) - end - if v = get_key_string(data, refsec, ref) - scanned << v - else - raise ConfigError, "variable has no value" - end - else - raise 'must not reaced' - end - end - scanned << value - scanned.join - end - - def extract_reference(value) - rest = '' - if m = value.match(/\(([^)]*)\)|\{([^}]*)\}/) - value = m[1] || m[2] - rest = m.post_match - elsif [?(, ?{].include?(value[0]) - raise ConfigError, "no close brace" - end - if m = value.match(/[a-zA-Z0-9_]*(?:::[a-zA-Z0-9_]*)?/) - return m[0], m.post_match + rest - else - raise - end - end - - def clear_comments(line) - # FCOMMENT - if m = line.match(/\A([\t\n\f ]*);.*\z/) - return m[1] - end - # COMMENT - scanned = [] - while m = line.match(/[#'"\\]/) - scanned << m.pre_match - c = m[0] - line = m.post_match - case c - when '#' - line = nil - break - when "'", '"' - regexp = (c == "'") ? QUOTE_REGEXP_SQ : QUOTE_REGEXP_DQ - scanned << c - if m = line.match(regexp) - scanned << m[0] - line = m.post_match - else - scanned << line - line = nil - break - end - when "\\" - scanned << c - scanned << line.slice!(0, 1) - else - raise 'must not reaced' - end - end - scanned << line - scanned.join - end - - def get_definition(io) - if line = get_line(io) - while /[^\\]\\\z/ =~ line - if extra = get_line(io) - line += extra - else - break - end - end - return line.strip - end - end - - def get_line(io) - if line = io.gets - line.gsub(/[\r\n]*/, '') - end - end - end - - ## - # Creates an instance of OpenSSL's configuration class. - # - # This can be used in contexts like OpenSSL::X509::ExtensionFactory.config= - # - # If the optional _filename_ parameter is provided, then it is read in and - # parsed via #parse_config. - # - # This can raise IO exceptions based on the access, or availability of the - # file. A ConfigError exception may be raised depending on the validity of - # the data being configured. - # - def initialize(filename = nil) - @data = {} - if filename - File.open(filename.to_s) do |file| - Config.parse_config(file).each do |section, hash| - self[section] = hash - end - end - end - end - - ## - # Gets the value of _key_ from the given _section_ - # - # Given the following configurating file being loaded: - # - # config = OpenSSL::Config.load('foo.cnf') - # #=> # - # puts config.to_s - # #=> [ default ] - # # foo=bar - # - # You can get a specific value from the config if you know the _section_ - # and _key_ like so: - # - # config.get_value('default','foo') - # #=> "bar" - # - def get_value(section, key) - if section.nil? - raise TypeError.new('nil not allowed') - end - section = 'default' if section.empty? - get_key_string(section, key) - end - - ## - # - # *Deprecated* - # - # Use #get_value instead - def value(arg1, arg2 = nil) # :nodoc: - warn('Config#value is deprecated; use Config#get_value') - if arg2.nil? - section, key = 'default', arg1 - else - section, key = arg1, arg2 - end - section ||= 'default' - section = 'default' if section.empty? - get_key_string(section, key) - end - - ## - # Set the target _key_ with a given _value_ under a specific _section_. - # - # Given the following configurating file being loaded: - # - # config = OpenSSL::Config.load('foo.cnf') - # #=> # - # puts config.to_s - # #=> [ default ] - # # foo=bar - # - # You can set the value of _foo_ under the _default_ section to a new - # value: - # - # config.add_value('default', 'foo', 'buzz') - # #=> "buzz" - # puts config.to_s - # #=> [ default ] - # # foo=buzz - # - def add_value(section, key, value) - check_modify - (@data[section] ||= {})[key] = value - end - - ## - # Get a specific _section_ from the current configuration - # - # Given the following configurating file being loaded: - # - # config = OpenSSL::Config.load('foo.cnf') - # #=> # - # puts config.to_s - # #=> [ default ] - # # foo=bar - # - # You can get a hash of the specific section like so: - # - # config['default'] - # #=> {"foo"=>"bar"} - # - def [](section) - @data[section] || {} - end - - ## - # Deprecated - # - # Use #[] instead - def section(name) # :nodoc: - warn('Config#section is deprecated; use Config#[]') - @data[name] || {} - end - - ## - # Sets a specific _section_ name with a Hash _pairs_. - # - # Given the following configuration being created: - # - # config = OpenSSL::Config.new - # #=> # - # config['default'] = {"foo"=>"bar","baz"=>"buz"} - # #=> {"foo"=>"bar", "baz"=>"buz"} - # puts config.to_s - # #=> [ default ] - # # foo=bar - # # baz=buz - # - # It's important to note that this will essentially merge any of the keys - # in _pairs_ with the existing _section_. For example: - # - # config['default'] - # #=> {"foo"=>"bar", "baz"=>"buz"} - # config['default'] = {"foo" => "changed"} - # #=> {"foo"=>"changed"} - # config['default'] - # #=> {"foo"=>"changed", "baz"=>"buz"} - # - def []=(section, pairs) - check_modify - @data[section] ||= {} - pairs.each do |key, value| - self.add_value(section, key, value) - end - end - - ## - # Get the names of all sections in the current configuration - def sections - @data.keys - end - - ## - # Get the parsable form of the current configuration - # - # Given the following configuration being created: - # - # config = OpenSSL::Config.new - # #=> # - # config['default'] = {"foo"=>"bar","baz"=>"buz"} - # #=> {"foo"=>"bar", "baz"=>"buz"} - # puts config.to_s - # #=> [ default ] - # # foo=bar - # # baz=buz - # - # You can parse get the serialized configuration using #to_s and then parse - # it later: - # - # serialized_config = config.to_s - # # much later... - # new_config = OpenSSL::Config.parse(serialized_config) - # #=> # - # puts new_config - # #=> [ default ] - # foo=bar - # baz=buz - # - def to_s - ary = [] - @data.keys.sort.each do |section| - ary << "[ #{section} ]\n" - @data[section].keys.each do |key| - ary << "#{key}=#{@data[section][key]}\n" - end - ary << "\n" - end - ary.join - end - - ## - # For a block. - # - # Receive the section and its pairs for the current configuration. - # - # config.each do |section, key, value| - # # ... - # end - # - def each - @data.each do |section, hash| - hash.each do |key, value| - yield [section, key, value] - end - end - end - - ## - # String representation of this configuration object, including the class - # name and its sections. - def inspect - "#<#{self.class.name} sections=#{sections.inspect}>" - end - - protected - - def data # :nodoc: - @data - end - - private - - def initialize_copy(other) - @data = other.data.dup - end - - def check_modify - raise TypeError.new("Insecure: can't modify OpenSSL config") if frozen? - end - - def get_key_string(section, key) - Config.get_key_string(@data, section, key) - end - end -end diff --git a/ruby/ext/openssl/lib/openssl/digest.rb b/ruby/ext/openssl/lib/openssl/digest.rb index b6744de6b..2ff8398e4 100644 --- a/ruby/ext/openssl/lib/openssl/digest.rb +++ b/ruby/ext/openssl/lib/openssl/digest.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true #-- # = Ruby-space predefined Digest subclasses # @@ -15,11 +15,6 @@ module OpenSSL class Digest - alg = %w(MD2 MD4 MD5 MDC2 RIPEMD160 SHA1 SHA224 SHA256 SHA384 SHA512) - if OPENSSL_VERSION_NUMBER < 0x10100000 - alg += %w(DSS DSS1 SHA) - end - # Return the hash value computed with _name_ Digest. _name_ is either the # long name or short name of a supported digest algorithm. # @@ -29,23 +24,26 @@ class Digest # # which is equivalent to: # - # OpenSSL::Digest::SHA256.digest("abc") + # OpenSSL::Digest.digest('SHA256', "abc") def self.digest(name, data) super(data, name) end - alg.each{|name| + %w(MD4 MD5 RIPEMD160 SHA1 SHA224 SHA256 SHA384 SHA512).each do |name| klass = Class.new(self) { define_method(:initialize, ->(data = nil) {super(name, data)}) } + singleton = (class << klass; self; end) + singleton.class_eval{ - define_method(:digest){|data| new.digest(data) } - define_method(:hexdigest){|data| new.hexdigest(data) } + define_method(:digest) {|data| new.digest(data)} + define_method(:hexdigest) {|data| new.hexdigest(data)} } - const_set(name, klass) - } + + const_set(name.tr('-', '_'), klass) + end # Deprecated. # diff --git a/ruby/ext/openssl/lib/openssl/hmac.rb b/ruby/ext/openssl/lib/openssl/hmac.rb new file mode 100644 index 000000000..c8c844d8d --- /dev/null +++ b/ruby/ext/openssl/lib/openssl/hmac.rb @@ -0,0 +1,78 @@ +# frozen_string_literal: true + +module OpenSSL + class HMAC + # Securely compare with another HMAC instance in constant time. + def ==(other) + return false unless HMAC === other + return false unless self.digest.bytesize == other.digest.bytesize + + OpenSSL.fixed_length_secure_compare(self.digest, other.digest) + end + + # :call-seq: + # hmac.base64digest -> string + # + # Returns the authentication code an a Base64-encoded string. + def base64digest + [digest].pack("m0") + end + + class << self + # :call-seq: + # HMAC.digest(digest, key, data) -> aString + # + # Returns the authentication code as a binary string. The _digest_ parameter + # specifies the digest algorithm to use. This may be a String representing + # the algorithm name or an instance of OpenSSL::Digest. + # + # === Example + # key = 'key' + # data = 'The quick brown fox jumps over the lazy dog' + # + # hmac = OpenSSL::HMAC.digest('SHA1', key, data) + # #=> "\xDE|\x9B\x85\xB8\xB7\x8A\xA6\xBC\x8Az6\xF7\n\x90p\x1C\x9D\xB4\xD9" + def digest(digest, key, data) + hmac = new(key, digest) + hmac << data + hmac.digest + end + + # :call-seq: + # HMAC.hexdigest(digest, key, data) -> aString + # + # Returns the authentication code as a hex-encoded string. The _digest_ + # parameter specifies the digest algorithm to use. This may be a String + # representing the algorithm name or an instance of OpenSSL::Digest. + # + # === Example + # key = 'key' + # data = 'The quick brown fox jumps over the lazy dog' + # + # hmac = OpenSSL::HMAC.hexdigest('SHA1', key, data) + # #=> "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9" + def hexdigest(digest, key, data) + hmac = new(key, digest) + hmac << data + hmac.hexdigest + end + + # :call-seq: + # HMAC.base64digest(digest, key, data) -> aString + # + # Returns the authentication code as a Base64-encoded string. The _digest_ + # parameter specifies the digest algorithm to use. This may be a String + # representing the algorithm name or an instance of OpenSSL::Digest. + # + # === Example + # key = 'key' + # data = 'The quick brown fox jumps over the lazy dog' + # + # hmac = OpenSSL::HMAC.base64digest('SHA1', key, data) + # #=> "3nybhbi3iqa8ino29wqQcBydtNk=" + def base64digest(digest, key, data) + [digest(digest, key, data)].pack("m0") + end + end + end +end diff --git a/ruby/ext/openssl/lib/openssl/marshal.rb b/ruby/ext/openssl/lib/openssl/marshal.rb new file mode 100644 index 000000000..af5647192 --- /dev/null +++ b/ruby/ext/openssl/lib/openssl/marshal.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true +#-- +# = Ruby-space definitions to add DER (de)serialization to classes +# +# = Info +# 'OpenSSL for Ruby 2' project +# Copyright (C) 2002 Michal Rokos +# All rights reserved. +# +# = Licence +# This program is licensed under the same licence as Ruby. +# (See the file 'LICENCE'.) +#++ +module OpenSSL + module Marshal + def self.included(base) + base.extend(ClassMethods) + end + + module ClassMethods + def _load(string) + new(string) + end + end + + def _dump(_level) + to_der + end + end +end diff --git a/ruby/ext/openssl/lib/openssl/pkcs5.rb b/ruby/ext/openssl/lib/openssl/pkcs5.rb index 959447df5..8dedc4bee 100644 --- a/ruby/ext/openssl/lib/openssl/pkcs5.rb +++ b/ruby/ext/openssl/lib/openssl/pkcs5.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true #-- # Ruby/OpenSSL Project # Copyright (C) 2017 Ruby/OpenSSL Project Authors diff --git a/ruby/ext/openssl/lib/openssl/pkey.rb b/ruby/ext/openssl/lib/openssl/pkey.rb index 8a547c340..c3e062909 100644 --- a/ruby/ext/openssl/lib/openssl/pkey.rb +++ b/ruby/ext/openssl/lib/openssl/pkey.rb @@ -1,11 +1,290 @@ -# frozen_string_literal: false +# frozen_string_literal: true #-- # Ruby/OpenSSL Project # Copyright (C) 2017 Ruby/OpenSSL Project Authors #++ +require_relative 'marshal' + module OpenSSL::PKey + class DH + include OpenSSL::Marshal + + # :call-seq: + # dh.public_key -> dhnew + # + # Returns a new DH instance that carries just the \DH parameters. + # + # Contrary to the method name, the returned DH object contains only + # parameters and not the public key. + # + # This method is provided for backwards compatibility. In most cases, there + # is no need to call this method. + # + # For the purpose of re-generating the key pair while keeping the + # parameters, check OpenSSL::PKey.generate_key. + # + # Example: + # # OpenSSL::PKey::DH.generate by default generates a random key pair + # dh1 = OpenSSL::PKey::DH.generate(2048) + # p dh1.priv_key #=> # + # dhcopy = dh1.public_key + # p dhcopy.priv_key #=> nil + def public_key + DH.new(to_der) + end + + # :call-seq: + # dh.compute_key(pub_bn) -> string + # + # Returns a String containing a shared secret computed from the other + # party's public value. + # + # This method is provided for backwards compatibility, and calls #derive + # internally. + # + # === Parameters + # * _pub_bn_ is a OpenSSL::BN, *not* the DH instance returned by + # DH#public_key as that contains the DH parameters only. + def compute_key(pub_bn) + # FIXME: This is constructing an X.509 SubjectPublicKeyInfo and is very + # inefficient + obj = OpenSSL::ASN1.Sequence([ + OpenSSL::ASN1.Sequence([ + OpenSSL::ASN1.ObjectId("dhKeyAgreement"), + OpenSSL::ASN1.Sequence([ + OpenSSL::ASN1.Integer(p), + OpenSSL::ASN1.Integer(g), + ]), + ]), + OpenSSL::ASN1.BitString(OpenSSL::ASN1.Integer(pub_bn).to_der), + ]) + derive(OpenSSL::PKey.read(obj.to_der)) + end + + # :call-seq: + # dh.generate_key! -> self + # + # Generates a private and public key unless a private key already exists. + # If this DH instance was generated from public \DH parameters (e.g. by + # encoding the result of DH#public_key), then this method needs to be + # called first in order to generate the per-session keys before performing + # the actual key exchange. + # + # Deprecated in version 3.0. This method is incompatible with + # OpenSSL 3.0.0 or later. + # + # See also OpenSSL::PKey.generate_key. + # + # Example: + # # DEPRECATED USAGE: This will not work on OpenSSL 3.0 or later + # dh0 = OpenSSL::PKey::DH.new(2048) + # dh = dh0.public_key # #public_key only copies the DH parameters (contrary to the name) + # dh.generate_key! + # puts dh.private? # => true + # puts dh0.pub_key == dh.pub_key #=> false + # + # # With OpenSSL::PKey.generate_key + # dh0 = OpenSSL::PKey::DH.new(2048) + # dh = OpenSSL::PKey.generate_key(dh0) + # puts dh0.pub_key == dh.pub_key #=> false + def generate_key! + if OpenSSL::OPENSSL_VERSION_NUMBER >= 0x30000000 + raise DHError, "OpenSSL::PKey::DH is immutable on OpenSSL 3.0; " \ + "use OpenSSL::PKey.generate_key instead" + end + + unless priv_key + tmp = OpenSSL::PKey.generate_key(self) + set_key(tmp.pub_key, tmp.priv_key) + end + self + end + + class << self + # :call-seq: + # DH.generate(size, generator = 2) -> dh + # + # Creates a new DH instance from scratch by generating random parameters + # and a key pair. + # + # See also OpenSSL::PKey.generate_parameters and + # OpenSSL::PKey.generate_key. + # + # +size+:: + # The desired key size in bits. + # +generator+:: + # The generator. + def generate(size, generator = 2, &blk) + dhparams = OpenSSL::PKey.generate_parameters("DH", { + "dh_paramgen_prime_len" => size, + "dh_paramgen_generator" => generator, + }, &blk) + OpenSSL::PKey.generate_key(dhparams) + end + + # Handle DH.new(size, generator) form here; new(str) and new() forms + # are handled by #initialize + def new(*args, &blk) # :nodoc: + if args[0].is_a?(Integer) + generate(*args, &blk) + else + super + end + end + end + end + + class DSA + include OpenSSL::Marshal + + # :call-seq: + # dsa.public_key -> dsanew + # + # Returns a new DSA instance that carries just the \DSA parameters and the + # public key. + # + # This method is provided for backwards compatibility. In most cases, there + # is no need to call this method. + # + # For the purpose of serializing the public key, to PEM or DER encoding of + # X.509 SubjectPublicKeyInfo format, check PKey#public_to_pem and + # PKey#public_to_der. + def public_key + OpenSSL::PKey.read(public_to_der) + end + + class << self + # :call-seq: + # DSA.generate(size) -> dsa + # + # Creates a new DSA instance by generating a private/public key pair + # from scratch. + # + # See also OpenSSL::PKey.generate_parameters and + # OpenSSL::PKey.generate_key. + # + # +size+:: + # The desired key size in bits. + def generate(size, &blk) + dsaparams = OpenSSL::PKey.generate_parameters("DSA", { + "dsa_paramgen_bits" => size, + }, &blk) + OpenSSL::PKey.generate_key(dsaparams) + end + + # Handle DSA.new(size) form here; new(str) and new() forms + # are handled by #initialize + def new(*args, &blk) # :nodoc: + if args[0].is_a?(Integer) + generate(*args, &blk) + else + super + end + end + end + + # :call-seq: + # dsa.syssign(string) -> string + # + # Computes and returns the \DSA signature of +string+, where +string+ is + # expected to be an already-computed message digest of the original input + # data. The signature is issued using the private key of this DSA instance. + # + # Deprecated in version 3.0. + # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead. + # + # +string+:: + # A message digest of the original input data to be signed. + # + # Example: + # dsa = OpenSSL::PKey::DSA.new(2048) + # doc = "Sign me" + # digest = OpenSSL::Digest.digest('SHA1', doc) + # + # # With legacy #syssign and #sysverify: + # sig = dsa.syssign(digest) + # p dsa.sysverify(digest, sig) #=> true + # + # # With #sign_raw and #verify_raw: + # sig = dsa.sign_raw(nil, digest) + # p dsa.verify_raw(nil, sig, digest) #=> true + def syssign(string) + q or raise OpenSSL::PKey::DSAError, "incomplete DSA" + private? or raise OpenSSL::PKey::DSAError, "Private DSA key needed!" + begin + sign_raw(nil, string) + rescue OpenSSL::PKey::PKeyError + raise OpenSSL::PKey::DSAError, $!.message + end + end + + # :call-seq: + # dsa.sysverify(digest, sig) -> true | false + # + # Verifies whether the signature is valid given the message digest input. + # It does so by validating +sig+ using the public key of this DSA instance. + # + # Deprecated in version 3.0. + # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead. + # + # +digest+:: + # A message digest of the original input data to be signed. + # +sig+:: + # A \DSA signature value. + def sysverify(digest, sig) + verify_raw(nil, sig, digest) + rescue OpenSSL::PKey::PKeyError + raise OpenSSL::PKey::DSAError, $!.message + end + end + if defined?(EC) + class EC + include OpenSSL::Marshal + + # :call-seq: + # key.dsa_sign_asn1(data) -> String + # + # Deprecated in version 3.0. + # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead. + def dsa_sign_asn1(data) + sign_raw(nil, data) + rescue OpenSSL::PKey::PKeyError + raise OpenSSL::PKey::ECError, $!.message + end + + # :call-seq: + # key.dsa_verify_asn1(data, sig) -> true | false + # + # Deprecated in version 3.0. + # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead. + def dsa_verify_asn1(data, sig) + verify_raw(nil, sig, data) + rescue OpenSSL::PKey::PKeyError + raise OpenSSL::PKey::ECError, $!.message + end + + # :call-seq: + # ec.dh_compute_key(pubkey) -> string + # + # Derives a shared secret by ECDH. _pubkey_ must be an instance of + # OpenSSL::PKey::EC::Point and must belong to the same group. + # + # This method is provided for backwards compatibility, and calls #derive + # internally. + def dh_compute_key(pubkey) + obj = OpenSSL::ASN1.Sequence([ + OpenSSL::ASN1.Sequence([ + OpenSSL::ASN1.ObjectId("id-ecPublicKey"), + group.to_der, + ]), + OpenSSL::ASN1.BitString(pubkey.to_octet_string(:uncompressed)), + ]) + derive(OpenSSL::PKey.read(obj.to_der)) + end + end + class EC::Point # :call-seq: # point.to_bn([conversion_form]) -> OpenSSL::BN @@ -22,4 +301,159 @@ def to_bn(conversion_form = group.point_conversion_form) end end end + + class RSA + include OpenSSL::Marshal + + # :call-seq: + # rsa.public_key -> rsanew + # + # Returns a new RSA instance that carries just the public key components. + # + # This method is provided for backwards compatibility. In most cases, there + # is no need to call this method. + # + # For the purpose of serializing the public key, to PEM or DER encoding of + # X.509 SubjectPublicKeyInfo format, check PKey#public_to_pem and + # PKey#public_to_der. + def public_key + OpenSSL::PKey.read(public_to_der) + end + + class << self + # :call-seq: + # RSA.generate(size, exponent = 65537) -> RSA + # + # Generates an \RSA keypair. + # + # See also OpenSSL::PKey.generate_key. + # + # +size+:: + # The desired key size in bits. + # +exponent+:: + # An odd Integer, normally 3, 17, or 65537. + def generate(size, exp = 0x10001, &blk) + OpenSSL::PKey.generate_key("RSA", { + "rsa_keygen_bits" => size, + "rsa_keygen_pubexp" => exp, + }, &blk) + end + + # Handle RSA.new(size, exponent) form here; new(str) and new() forms + # are handled by #initialize + def new(*args, &blk) # :nodoc: + if args[0].is_a?(Integer) + generate(*args, &blk) + else + super + end + end + end + + # :call-seq: + # rsa.private_encrypt(string) -> String + # rsa.private_encrypt(string, padding) -> String + # + # Encrypt +string+ with the private key. +padding+ defaults to + # PKCS1_PADDING. The encrypted string output can be decrypted using + # #public_decrypt. + # + # Deprecated in version 3.0. + # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw, and + # PKey::PKey#verify_recover instead. + def private_encrypt(string, padding = PKCS1_PADDING) + n or raise OpenSSL::PKey::RSAError, "incomplete RSA" + private? or raise OpenSSL::PKey::RSAError, "private key needed." + begin + sign_raw(nil, string, { + "rsa_padding_mode" => translate_padding_mode(padding), + }) + rescue OpenSSL::PKey::PKeyError + raise OpenSSL::PKey::RSAError, $!.message + end + end + + # :call-seq: + # rsa.public_decrypt(string) -> String + # rsa.public_decrypt(string, padding) -> String + # + # Decrypt +string+, which has been encrypted with the private key, with the + # public key. +padding+ defaults to PKCS1_PADDING. + # + # Deprecated in version 3.0. + # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw, and + # PKey::PKey#verify_recover instead. + def public_decrypt(string, padding = PKCS1_PADDING) + n or raise OpenSSL::PKey::RSAError, "incomplete RSA" + begin + verify_recover(nil, string, { + "rsa_padding_mode" => translate_padding_mode(padding), + }) + rescue OpenSSL::PKey::PKeyError + raise OpenSSL::PKey::RSAError, $!.message + end + end + + # :call-seq: + # rsa.public_encrypt(string) -> String + # rsa.public_encrypt(string, padding) -> String + # + # Encrypt +string+ with the public key. +padding+ defaults to + # PKCS1_PADDING. The encrypted string output can be decrypted using + # #private_decrypt. + # + # Deprecated in version 3.0. + # Consider using PKey::PKey#encrypt and PKey::PKey#decrypt instead. + def public_encrypt(data, padding = PKCS1_PADDING) + n or raise OpenSSL::PKey::RSAError, "incomplete RSA" + begin + encrypt(data, { + "rsa_padding_mode" => translate_padding_mode(padding), + }) + rescue OpenSSL::PKey::PKeyError + raise OpenSSL::PKey::RSAError, $!.message + end + end + + # :call-seq: + # rsa.private_decrypt(string) -> String + # rsa.private_decrypt(string, padding) -> String + # + # Decrypt +string+, which has been encrypted with the public key, with the + # private key. +padding+ defaults to PKCS1_PADDING. + # + # Deprecated in version 3.0. + # Consider using PKey::PKey#encrypt and PKey::PKey#decrypt instead. + def private_decrypt(data, padding = PKCS1_PADDING) + n or raise OpenSSL::PKey::RSAError, "incomplete RSA" + private? or raise OpenSSL::PKey::RSAError, "private key needed." + begin + decrypt(data, { + "rsa_padding_mode" => translate_padding_mode(padding), + }) + rescue OpenSSL::PKey::PKeyError + raise OpenSSL::PKey::RSAError, $!.message + end + end + + PKCS1_PADDING = 1 + SSLV23_PADDING = 2 + NO_PADDING = 3 + PKCS1_OAEP_PADDING = 4 + + private def translate_padding_mode(num) + case num + when PKCS1_PADDING + "pkcs1" + when SSLV23_PADDING + "sslv23" + when NO_PADDING + "none" + when PKCS1_OAEP_PADDING + "oaep" + else + raise OpenSSL::PKey::PKeyError, "unsupported padding mode" + end + end + end end diff --git a/ruby/ext/openssl/lib/openssl/ssl.rb b/ruby/ext/openssl/lib/openssl/ssl.rb index 355eb2ebb..a9103ecd2 100644 --- a/ruby/ext/openssl/lib/openssl/ssl.rb +++ b/ruby/ext/openssl/lib/openssl/ssl.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true =begin = Info 'OpenSSL for Ruby 2' project @@ -13,6 +13,7 @@ require "openssl/buffering" require "io/nonblock" require "ipaddr" +require "socket" module OpenSSL module SSL @@ -90,15 +91,17 @@ class SSLContext DEFAULT_CERT_STORE.set_default_paths DEFAULT_CERT_STORE.flags = OpenSSL::X509::V_FLAG_CRL_CHECK_ALL - # A callback invoked when DH parameters are required. + # A callback invoked when DH parameters are required for ephemeral DH key + # exchange. # - # The callback is invoked with the Session for the key exchange, an + # The callback is invoked with the SSLSocket, a # flag indicating the use of an export cipher and the keylength # required. # # The callback must return an OpenSSL::PKey::DH instance of the correct # key length. - + # + # Deprecated in version 3.0. Use #tmp_dh= instead. attr_accessor :tmp_dh_callback # A callback invoked at connect time to distinguish between multiple @@ -121,6 +124,8 @@ class SSLContext def initialize(version = nil) self.options |= OpenSSL::SSL::OP_ALL self.ssl_version = version if version + self.verify_mode = OpenSSL::SSL::VERIFY_NONE + self.verify_hostname = false end ## @@ -231,6 +236,11 @@ def ssl_version=(meth) end module SocketForwarder + # The file descriptor for the socket. + def fileno + to_io.fileno + end + def addr to_io.addr end @@ -424,10 +434,6 @@ def tmp_dh_callback @context.tmp_dh_callback || OpenSSL::SSL::SSLContext::DEFAULT_TMP_DH_CALLBACK end - def tmp_ecdh_callback - @context.tmp_ecdh_callback - end - def session_new_cb @context.session_new_cb end @@ -435,6 +441,38 @@ def session_new_cb def session_get_cb @context.session_get_cb end + + class << self + + # call-seq: + # open(remote_host, remote_port, local_host=nil, local_port=nil, context: nil) + # + # Creates a new instance of SSLSocket. + # _remote\_host_ and _remote\_port_ are used to open TCPSocket. + # If _local\_host_ and _local\_port_ are specified, + # then those parameters are used on the local end to establish the connection. + # If _context_ is provided, + # the SSL Sockets initial params will be taken from the context. + # + # === Examples + # + # sock = OpenSSL::SSL::SSLSocket.open('localhost', 443) + # sock.connect # Initiates a connection to localhost:443 + # + # with SSLContext: + # + # ctx = OpenSSL::SSL::SSLContext.new + # sock = OpenSSL::SSL::SSLSocket.open('localhost', 443, context: ctx) + # sock.connect # Initiates a connection to localhost:443 with SSLContext + def open(remote_host, remote_port, local_host=nil, local_port=nil, context: nil) + sock = ::TCPSocket.open(remote_host, remote_port, local_host, local_port) + if context.nil? + return OpenSSL::SSL::SSLSocket.new(sock) + else + return OpenSSL::SSL::SSLSocket.new(sock, context) + end + end + end end ## @@ -465,7 +503,7 @@ def to_io end # See TCPServer#listen for details. - def listen(backlog=5) + def listen(backlog=Socket::SOMAXCONN) @svr.listen(backlog) end diff --git a/ruby/ext/openssl/lib/openssl/version.rb b/ruby/ext/openssl/lib/openssl/version.rb new file mode 100644 index 000000000..5e6060435 --- /dev/null +++ b/ruby/ext/openssl/lib/openssl/version.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +module OpenSSL + VERSION = "3.0.0" +end diff --git a/ruby/ext/openssl/lib/openssl/x509.rb b/ruby/ext/openssl/lib/openssl/x509.rb index 98358f90d..f973f4f4d 100644 --- a/ruby/ext/openssl/lib/openssl/x509.rb +++ b/ruby/ext/openssl/lib/openssl/x509.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true #-- # = Ruby-space definitions that completes C-space funcs for X509 and subclasses # @@ -12,6 +12,8 @@ # (See the file 'LICENCE'.) #++ +require_relative 'marshal' + module OpenSSL module X509 class ExtensionFactory @@ -41,6 +43,8 @@ def create_ext_from_hash(hash) end class Extension + include OpenSSL::Marshal + def ==(other) return false unless Extension === other to_der == other.to_der @@ -60,9 +64,146 @@ def to_h # {"oid"=>sn|ln, "value"=>value, "critical"=>true|false} def to_a [ self.oid, self.value, self.critical? ] end + + module Helpers + def find_extension(oid) + extensions.find { |e| e.oid == oid } + end + end + + module SubjectKeyIdentifier + include Helpers + + # Get the subject's key identifier from the subjectKeyIdentifier + # exteension, as described in RFC5280 Section 4.2.1.2. + # + # Returns the binary String key identifier or nil or raises + # ASN1::ASN1Error. + def subject_key_identifier + ext = find_extension("subjectKeyIdentifier") + return nil if ext.nil? + + ski_asn1 = ASN1.decode(ext.value_der) + if ext.critical? || ski_asn1.tag_class != :UNIVERSAL || ski_asn1.tag != ASN1::OCTET_STRING + raise ASN1::ASN1Error, "invalid extension" + end + + ski_asn1.value + end + end + + module AuthorityKeyIdentifier + include Helpers + + # Get the issuing certificate's key identifier from the + # authorityKeyIdentifier extension, as described in RFC5280 + # Section 4.2.1.1 + # + # Returns the binary String keyIdentifier or nil or raises + # ASN1::ASN1Error. + def authority_key_identifier + ext = find_extension("authorityKeyIdentifier") + return nil if ext.nil? + + aki_asn1 = ASN1.decode(ext.value_der) + if ext.critical? || aki_asn1.tag_class != :UNIVERSAL || aki_asn1.tag != ASN1::SEQUENCE + raise ASN1::ASN1Error, "invalid extension" + end + + key_id = aki_asn1.value.find do |v| + v.tag_class == :CONTEXT_SPECIFIC && v.tag == 0 + end + + key_id.nil? ? nil : key_id.value + end + end + + module CRLDistributionPoints + include Helpers + + # Get the distributionPoint fullName URI from the certificate's CRL + # distribution points extension, as described in RFC5280 Section + # 4.2.1.13 + # + # Returns an array of strings or nil or raises ASN1::ASN1Error. + def crl_uris + ext = find_extension("crlDistributionPoints") + return nil if ext.nil? + + cdp_asn1 = ASN1.decode(ext.value_der) + if cdp_asn1.tag_class != :UNIVERSAL || cdp_asn1.tag != ASN1::SEQUENCE + raise ASN1::ASN1Error, "invalid extension" + end + + crl_uris = cdp_asn1.map do |crl_distribution_point| + distribution_point = crl_distribution_point.value.find do |v| + v.tag_class == :CONTEXT_SPECIFIC && v.tag == 0 + end + full_name = distribution_point&.value&.find do |v| + v.tag_class == :CONTEXT_SPECIFIC && v.tag == 0 + end + full_name&.value&.find do |v| + v.tag_class == :CONTEXT_SPECIFIC && v.tag == 6 # uniformResourceIdentifier + end + end + + crl_uris&.map(&:value) + end + end + + module AuthorityInfoAccess + include Helpers + + # Get the information and services for the issuer from the certificate's + # authority information access extension exteension, as described in RFC5280 + # Section 4.2.2.1. + # + # Returns an array of strings or nil or raises ASN1::ASN1Error. + def ca_issuer_uris + aia_asn1 = parse_aia_asn1 + return nil if aia_asn1.nil? + + ca_issuer = aia_asn1.value.select do |authority_info_access| + authority_info_access.value.first.value == "caIssuers" + end + + ca_issuer&.map(&:value)&.map(&:last)&.map(&:value) + end + + # Get the URIs for OCSP from the certificate's authority information access + # extension exteension, as described in RFC5280 Section 4.2.2.1. + # + # Returns an array of strings or nil or raises ASN1::ASN1Error. + def ocsp_uris + aia_asn1 = parse_aia_asn1 + return nil if aia_asn1.nil? + + ocsp = aia_asn1.value.select do |authority_info_access| + authority_info_access.value.first.value == "OCSP" + end + + ocsp&.map(&:value)&.map(&:last)&.map(&:value) + end + + private + + def parse_aia_asn1 + ext = find_extension("authorityInfoAccess") + return nil if ext.nil? + + aia_asn1 = ASN1.decode(ext.value_der) + if ext.critical? || aia_asn1.tag_class != :UNIVERSAL || aia_asn1.tag != ASN1::SEQUENCE + raise ASN1::ASN1Error, "invalid extension" + end + + aia_asn1 + end + end end class Name + include OpenSSL::Marshal + module RFC2253DN Special = ',=+<>#;' HexChar = /[0-9a-fA-F]/ @@ -138,11 +279,29 @@ def scan(dn) end class << self + # Parses the UTF-8 string representation of a distinguished name, + # according to RFC 2253. + # + # See also #to_utf8 for the opposite operation. def parse_rfc2253(str, template=OBJECT_TYPE_TEMPLATE) ary = OpenSSL::X509::Name::RFC2253DN.scan(str) self.new(ary, template) end + # Parses the string representation of a distinguished name. Two + # different forms are supported: + # + # - \OpenSSL format (X509_NAME_oneline()) used by + # #to_s. For example: /DC=com/DC=example/CN=nobody + # - \OpenSSL format (X509_NAME_print()) + # used by #to_s(OpenSSL::X509::Name::COMPAT). For example: + # DC=com, DC=example, CN=nobody + # + # Neither of them is standardized and has quirks and inconsistencies + # in handling of escaped characters or multi-valued RDNs. + # + # Use of this method is discouraged in new applications. See + # Name.parse_rfc2253 and #to_utf8 for the alternative. def parse_openssl(str, template=OBJECT_TYPE_TEMPLATE) if str.start_with?("/") # /A=B/C=D format @@ -166,6 +325,8 @@ def pretty_print(q) end class Attribute + include OpenSSL::Marshal + def ==(other) return false unless Attribute === other to_der == other.to_der @@ -179,6 +340,12 @@ def cleanup end class Certificate + include OpenSSL::Marshal + include Extension::SubjectKeyIdentifier + include Extension::AuthorityKeyIdentifier + include Extension::CRLDistributionPoints + include Extension::AuthorityInfoAccess + def pretty_print(q) q.object_group(self) { q.breakable @@ -189,9 +356,16 @@ def pretty_print(q) q.text 'not_after='; q.pp self.not_after } end + + def self.load_file(path) + load(File.binread(path)) + end end class CRL + include OpenSSL::Marshal + include Extension::AuthorityKeyIdentifier + def ==(other) return false unless CRL === other to_der == other.to_der @@ -206,6 +380,8 @@ def ==(other) end class Request + include OpenSSL::Marshal + def ==(other) return false unless Request === other to_der == other.to_der diff --git a/ruby/ext/openssl/openssl.gemspec b/ruby/ext/openssl/openssl.gemspec index 295379fb6..c6cd81833 100644 --- a/ruby/ext/openssl/openssl.gemspec +++ b/ruby/ext/openssl/openssl.gemspec @@ -1,29 +1,21 @@ -# -*- encoding: utf-8 -*- +Gem::Specification.new do |spec| + spec.name = "openssl" + spec.version = "3.0.0" + spec.authors = ["Martin Bosslet", "SHIBATA Hiroshi", "Zachary Scott", "Kazuki Yamaguchi"] + spec.email = ["ruby-core@ruby-lang.org"] + spec.summary = %q{OpenSSL provides SSL, TLS and general purpose cryptography.} + spec.description = %q{It wraps the OpenSSL library.} + spec.homepage = "https://github.com/ruby/openssl" + spec.license = "Ruby" -Gem::Specification.new do |s| - s.name = "openssl" - s.version = "2.1.2" + spec.files = Dir["lib/**/*.rb", "ext/**/*.{c,h,rb}", "*.md", "BSDL", "LICENSE.txt"] + spec.require_paths = ["lib"] + spec.extensions = ["ext/openssl/extconf.rb"] - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.metadata = { "msys2_mingw_dependencies" => "openssl" } if s.respond_to? :metadata= - s.require_paths = ["lib"] - s.authors = ["Martin Bosslet", "SHIBATA Hiroshi", "Zachary Scott", "Kazuki Yamaguchi"] - s.date = "2018-10-17" - s.description = "It wraps the OpenSSL library." - s.email = ["ruby-core@ruby-lang.org"] - s.extensions = ["ext/openssl/extconf.rb"] - s.extra_rdoc_files = ["README.md", "CONTRIBUTING.md", "History.md"] - s.files = ["BSDL", "CONTRIBUTING.md", "History.md", "LICENSE.txt", "README.md", "ext/openssl/deprecation.rb", "ext/openssl/extconf.rb", "ext/openssl/openssl_missing.c", "ext/openssl/openssl_missing.h", "ext/openssl/ossl.c", "ext/openssl/ossl.h", "ext/openssl/ossl_asn1.c", "ext/openssl/ossl_asn1.h", "ext/openssl/ossl_bio.c", "ext/openssl/ossl_bio.h", "ext/openssl/ossl_bn.c", "ext/openssl/ossl_bn.h", "ext/openssl/ossl_cipher.c", "ext/openssl/ossl_cipher.h", "ext/openssl/ossl_config.c", "ext/openssl/ossl_config.h", "ext/openssl/ossl_digest.c", "ext/openssl/ossl_digest.h", "ext/openssl/ossl_engine.c", "ext/openssl/ossl_engine.h", "ext/openssl/ossl_hmac.c", "ext/openssl/ossl_hmac.h", "ext/openssl/ossl_kdf.c", "ext/openssl/ossl_kdf.h", "ext/openssl/ossl_ns_spki.c", "ext/openssl/ossl_ns_spki.h", "ext/openssl/ossl_ocsp.c", "ext/openssl/ossl_ocsp.h", "ext/openssl/ossl_pkcs12.c", "ext/openssl/ossl_pkcs12.h", "ext/openssl/ossl_pkcs7.c", "ext/openssl/ossl_pkcs7.h", "ext/openssl/ossl_pkey.c", "ext/openssl/ossl_pkey.h", "ext/openssl/ossl_pkey_dh.c", "ext/openssl/ossl_pkey_dsa.c", "ext/openssl/ossl_pkey_ec.c", "ext/openssl/ossl_pkey_rsa.c", "ext/openssl/ossl_rand.c", "ext/openssl/ossl_rand.h", "ext/openssl/ossl_ssl.c", "ext/openssl/ossl_ssl.h", "ext/openssl/ossl_ssl_session.c", "ext/openssl/ossl_version.h", "ext/openssl/ossl_x509.c", "ext/openssl/ossl_x509.h", "ext/openssl/ossl_x509attr.c", "ext/openssl/ossl_x509cert.c", "ext/openssl/ossl_x509crl.c", "ext/openssl/ossl_x509ext.c", "ext/openssl/ossl_x509name.c", "ext/openssl/ossl_x509req.c", "ext/openssl/ossl_x509revoked.c", "ext/openssl/ossl_x509store.c", "ext/openssl/ruby_missing.h", "lib/openssl.rb", "lib/openssl/bn.rb", "lib/openssl/buffering.rb", "lib/openssl/cipher.rb", "lib/openssl/config.rb", "lib/openssl/digest.rb", "lib/openssl/pkcs5.rb", "lib/openssl/pkey.rb", "lib/openssl/ssl.rb", "lib/openssl/x509.rb"] - s.homepage = "https://github.com/ruby/openssl" - s.licenses = ["Ruby"] - s.rdoc_options = ["--main", "README.md"] - s.required_ruby_version = Gem::Requirement.new(">= 2.3.0") - s.rubygems_version = "3.0.0.beta1" - s.summary = "OpenSSL provides SSL, TLS and general purpose cryptography." + spec.extra_rdoc_files = Dir["*.md"] + spec.rdoc_options = ["--main", "README.md"] - s.add_runtime_dependency("ipaddr", [">= 0"]) - s.add_development_dependency("rake", [">= 0"]) - s.add_development_dependency("rake-compiler", [">= 0"]) - s.add_development_dependency("test-unit", ["~> 3.0"]) - s.add_development_dependency("rdoc", [">= 0"]) + spec.required_ruby_version = ">= 2.6.0" + + spec.metadata["msys2_mingw_dependencies"] = "openssl" end diff --git a/ruby/ext/openssl/openssl_missing.c b/ruby/ext/openssl/openssl_missing.c index b36ef0288..4415703db 100644 --- a/ruby/ext/openssl/openssl_missing.c +++ b/ruby/ext/openssl/openssl_missing.c @@ -10,77 +10,11 @@ #include RUBY_EXTCONF_H #include /* memcpy() */ -#if !defined(OPENSSL_NO_ENGINE) -# include -#endif -#if !defined(OPENSSL_NO_HMAC) -# include -#endif #include #include "openssl_missing.h" -/* added in 1.0.2 */ -#if !defined(OPENSSL_NO_EC) -#if !defined(HAVE_EC_CURVE_NIST2NID) -static struct { - const char *name; - int nid; -} nist_curves[] = { - {"B-163", NID_sect163r2}, - {"B-233", NID_sect233r1}, - {"B-283", NID_sect283r1}, - {"B-409", NID_sect409r1}, - {"B-571", NID_sect571r1}, - {"K-163", NID_sect163k1}, - {"K-233", NID_sect233k1}, - {"K-283", NID_sect283k1}, - {"K-409", NID_sect409k1}, - {"K-571", NID_sect571k1}, - {"P-192", NID_X9_62_prime192v1}, - {"P-224", NID_secp224r1}, - {"P-256", NID_X9_62_prime256v1}, - {"P-384", NID_secp384r1}, - {"P-521", NID_secp521r1} -}; - -int -ossl_EC_curve_nist2nid(const char *name) -{ - size_t i; - for (i = 0; i < (sizeof(nist_curves) / sizeof(nist_curves[0])); i++) { - if (!strcmp(nist_curves[i].name, name)) - return nist_curves[i].nid; - } - return NID_undef; -} -#endif -#endif - /*** added in 1.1.0 ***/ -#if !defined(HAVE_HMAC_CTX_NEW) -HMAC_CTX * -ossl_HMAC_CTX_new(void) -{ - HMAC_CTX *ctx = OPENSSL_malloc(sizeof(HMAC_CTX)); - if (!ctx) - return NULL; - HMAC_CTX_init(ctx); - return ctx; -} -#endif - -#if !defined(HAVE_HMAC_CTX_FREE) -void -ossl_HMAC_CTX_free(HMAC_CTX *ctx) -{ - if (ctx) { - HMAC_CTX_cleanup(ctx); - OPENSSL_free(ctx); - } -} -#endif - #if !defined(HAVE_X509_CRL_GET0_SIGNATURE) void ossl_X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, diff --git a/ruby/ext/openssl/openssl_missing.h b/ruby/ext/openssl/openssl_missing.h index 09998214e..8629bfe50 100644 --- a/ruby/ext/openssl/openssl_missing.h +++ b/ruby/ext/openssl/openssl_missing.h @@ -12,40 +12,7 @@ #include "ruby/config.h" -/* added in 1.0.2 */ -#if !defined(OPENSSL_NO_EC) -#if !defined(HAVE_EC_CURVE_NIST2NID) -int ossl_EC_curve_nist2nid(const char *); -# define EC_curve_nist2nid ossl_EC_curve_nist2nid -#endif -#endif - -#if !defined(HAVE_X509_REVOKED_DUP) -# define X509_REVOKED_dup(rev) (X509_REVOKED *)ASN1_dup((i2d_of_void *)i2d_X509_REVOKED, \ - (d2i_of_void *)d2i_X509_REVOKED, (char *)(rev)) -#endif - -#if !defined(HAVE_X509_STORE_CTX_GET0_STORE) -# define X509_STORE_CTX_get0_store(x) ((x)->ctx) -#endif - -#if !defined(HAVE_SSL_IS_SERVER) -# define SSL_is_server(s) ((s)->server) -#endif - /* added in 1.1.0 */ -#if !defined(HAVE_BN_GENCB_NEW) -# define BN_GENCB_new() ((BN_GENCB *)OPENSSL_malloc(sizeof(BN_GENCB))) -#endif - -#if !defined(HAVE_BN_GENCB_FREE) -# define BN_GENCB_free(cb) OPENSSL_free(cb) -#endif - -#if !defined(HAVE_BN_GENCB_GET_ARG) -# define BN_GENCB_get_arg(cb) (cb)->arg -#endif - #if !defined(HAVE_EVP_MD_CTX_NEW) # define EVP_MD_CTX_new EVP_MD_CTX_create #endif @@ -54,16 +21,6 @@ int ossl_EC_curve_nist2nid(const char *); # define EVP_MD_CTX_free EVP_MD_CTX_destroy #endif -#if !defined(HAVE_HMAC_CTX_NEW) -HMAC_CTX *ossl_HMAC_CTX_new(void); -# define HMAC_CTX_new ossl_HMAC_CTX_new -#endif - -#if !defined(HAVE_HMAC_CTX_FREE) -void ossl_HMAC_CTX_free(HMAC_CTX *); -# define HMAC_CTX_free ossl_HMAC_CTX_free -#endif - #if !defined(HAVE_X509_STORE_GET_EX_DATA) # define X509_STORE_get_ex_data(x, idx) \ CRYPTO_get_ex_data(&(x)->ex_data, (idx)) @@ -72,6 +29,9 @@ void ossl_HMAC_CTX_free(HMAC_CTX *); #if !defined(HAVE_X509_STORE_SET_EX_DATA) # define X509_STORE_set_ex_data(x, idx, data) \ CRYPTO_set_ex_data(&(x)->ex_data, (idx), (data)) +#endif + +#if !defined(HAVE_X509_STORE_GET_EX_NEW_INDEX) && !defined(X509_STORE_get_ex_new_index) # define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, (l), (p), \ (newf), (dupf), (freef)) @@ -219,4 +179,60 @@ IMPL_PKEY_GETTER(EC_KEY, ec) # define SSL_SESSION_get_protocol_version(s) ((s)->ssl_version) #endif +#if !defined(HAVE_TS_STATUS_INFO_GET0_STATUS) +# define TS_STATUS_INFO_get0_status(a) ((a)->status) +#endif + +#if !defined(HAVE_TS_STATUS_INFO_GET0_TEXT) +# define TS_STATUS_INFO_get0_text(a) ((a)->text) +#endif + +#if !defined(HAVE_TS_STATUS_INFO_GET0_FAILURE_INFO) +# define TS_STATUS_INFO_get0_failure_info(a) ((a)->failure_info) +#endif + +#if !defined(HAVE_TS_VERIFY_CTS_SET_CERTS) +# define TS_VERIFY_CTS_set_certs(ctx, crts) ((ctx)->certs=(crts)) +#endif + +#if !defined(HAVE_TS_VERIFY_CTX_SET_STORE) +# define TS_VERIFY_CTX_set_store(ctx, str) ((ctx)->store=(str)) +#endif + +#if !defined(HAVE_TS_VERIFY_CTX_ADD_FLAGS) +# define TS_VERIFY_CTX_add_flags(ctx, f) ((ctx)->flags |= (f)) +#endif + +#if !defined(HAVE_TS_RESP_CTX_SET_TIME_CB) +# define TS_RESP_CTX_set_time_cb(ctx, callback, dta) do { \ + (ctx)->time_cb = (callback); \ + (ctx)->time_cb_data = (dta); \ + } while (0) +#endif + +/* added in 3.0.0 */ +#if !defined(HAVE_TS_VERIFY_CTX_SET_CERTS) +# define TS_VERIFY_CTX_set_certs(ctx, crts) TS_VERIFY_CTS_set_certs(ctx, crts) +#endif + +#ifndef HAVE_EVP_MD_CTX_GET0_MD +# define EVP_MD_CTX_get0_md(ctx) EVP_MD_CTX_md(ctx) +#endif + +/* + * OpenSSL 1.1.0 added EVP_MD_CTX_pkey_ctx(), and then it was renamed to + * EVP_MD_CTX_get_pkey_ctx(x) in OpenSSL 3.0. + */ +#ifndef HAVE_EVP_MD_CTX_GET_PKEY_CTX +# ifdef HAVE_EVP_MD_CTX_PKEY_CTX +# define EVP_MD_CTX_get_pkey_ctx(x) EVP_MD_CTX_pkey_ctx(x) +# else +# define EVP_MD_CTX_get_pkey_ctx(x) (x)->pctx +# endif +#endif + +#ifndef HAVE_EVP_PKEY_EQ +# define EVP_PKEY_eq(a, b) EVP_PKEY_cmp(a, b) +#endif + #endif /* _OSSL_OPENSSL_MISSING_H_ */ diff --git a/ruby/ext/openssl/ossl.c b/ruby/ext/openssl/ossl.c index e4196f075..6c532aca9 100644 --- a/ruby/ext/openssl/ossl.c +++ b/ruby/ext/openssl/ossl.c @@ -9,13 +9,19 @@ */ #include "ossl.h" #include /* for ossl_raise */ -#include /* for OpenSSL < 1.1.0 locks */ + +/* OpenSSL >= 1.1.0 and LibreSSL >= 2.9.0 */ +#if defined(LIBRESSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER >= 0x10100000 +# define HAVE_OPENSSL_110_THREADING_API +#else +# include +#endif /* * Data Conversion */ #define OSSL_IMPL_ARY2SK(name, type, expected_class, dup) \ -STACK_OF(type) * \ +VALUE \ ossl_##name##_ary2sk0(VALUE ary) \ { \ STACK_OF(type) *sk; \ @@ -37,7 +43,7 @@ ossl_##name##_ary2sk0(VALUE ary) \ x = dup(val); /* NEED TO DUP */ \ sk_##type##_push(sk, x); \ } \ - return sk; \ + return (VALUE)sk; \ } \ \ STACK_OF(type) * \ @@ -262,15 +268,11 @@ ossl_to_der_if_possible(VALUE obj) /* * Errors */ -static VALUE -ossl_make_error(VALUE exc, const char *fmt, va_list args) +VALUE +ossl_make_error(VALUE exc, VALUE str) { - VALUE str = Qnil; unsigned long e; - if (fmt) { - str = rb_vsprintf(fmt, args); - } e = ERR_peek_last_error(); if (e) { const char *msg = ERR_reason_error_string(e); @@ -294,37 +296,48 @@ ossl_raise(VALUE exc, const char *fmt, ...) { va_list args; VALUE err; - va_start(args, fmt); - err = ossl_make_error(exc, fmt, args); - va_end(args); - rb_exc_raise(err); + + if (fmt) { + va_start(args, fmt); + err = rb_vsprintf(fmt, args); + va_end(args); + } + else { + err = Qnil; + } + + rb_exc_raise(ossl_make_error(exc, err)); } void ossl_clear_error(void) { if (dOSSL == Qtrue) { - unsigned long e; - const char *file, *data, *errstr; - int line, flags; - - while ((e = ERR_get_error_line_data(&file, &line, &data, &flags))) { - errstr = ERR_error_string(e, NULL); - if (!errstr) - errstr = "(null)"; - - if (flags & ERR_TXT_STRING) { - if (!data) - data = "(null)"; - rb_warn("error on stack: %s (%s)", errstr, data); - } - else { - rb_warn("error on stack: %s", errstr); - } - } + unsigned long e; + const char *file, *data, *func, *lib, *reason; + char append[256] = ""; + int line, flags; + +#ifdef HAVE_ERR_GET_ERROR_ALL + while ((e = ERR_get_error_all(&file, &line, &func, &data, &flags))) { +#else + while ((e = ERR_get_error_line_data(&file, &line, &data, &flags))) { + func = ERR_func_error_string(e); +#endif + lib = ERR_lib_error_string(e); + reason = ERR_reason_error_string(e); + + if (flags & ERR_TXT_STRING) { + if (!data) + data = "(null)"; + snprintf(append, sizeof(append), " (%s)", data); + } + rb_warn("error on stack: error:%08lX:%s:%s:%s%s", e, lib ? lib : "", + func ? func : "", reason ? reason : "", append); + } } else { - ERR_clear_error(); + ERR_clear_error(); } } @@ -386,7 +399,7 @@ ossl_debug_get(VALUE self) * call-seq: * OpenSSL.debug = boolean -> boolean * - * Turns on or off debug mode. With debug mode, all erros added to the OpenSSL + * Turns on or off debug mode. With debug mode, all errors added to the OpenSSL * error queue will be printed to stderr. */ static VALUE @@ -497,8 +510,11 @@ print_mem_leaks(VALUE self) int ret; #endif - BN_CTX_free(ossl_bn_ctx); - ossl_bn_ctx = NULL; +#ifndef HAVE_RB_EXT_RACTOR_SAFE + // for Ruby 2.x + void ossl_bn_ctx_free(void); // ossl_bn.c + ossl_bn_ctx_free(); +#endif #if OPENSSL_VERSION_NUMBER >= 0x10100000 ret = CRYPTO_mem_leaks_fp(stderr); @@ -604,6 +620,35 @@ static void Init_ossl_locks(void) } #endif /* !HAVE_OPENSSL_110_THREADING_API */ +/* + * call-seq: + * OpenSSL.fixed_length_secure_compare(string, string) -> boolean + * + * Constant time memory comparison for fixed length strings, such as results + * of HMAC calculations. + * + * Returns +true+ if the strings are identical, +false+ if they are of the same + * length but not identical. If the length is different, +ArgumentError+ is + * raised. + */ +static VALUE +ossl_crypto_fixed_length_secure_compare(VALUE dummy, VALUE str1, VALUE str2) +{ + const unsigned char *p1 = (const unsigned char *)StringValuePtr(str1); + const unsigned char *p2 = (const unsigned char *)StringValuePtr(str2); + long len1 = RSTRING_LEN(str1); + long len2 = RSTRING_LEN(str2); + + if (len1 != len2) { + ossl_raise(rb_eArgError, "inputs must be of equal length"); + } + + switch (CRYPTO_memcmp(p1, p2, len1)) { + case 0: return Qtrue; + default: return Qfalse; + } +} + /* * OpenSSL provides SSL, TLS and general purpose cryptography. It wraps the * OpenSSL[https://www.openssl.org/] library. @@ -635,7 +680,7 @@ static void Init_ossl_locks(void) * ahold of the key may use it unless it is encrypted. In order to securely * export a key you may export it with a pass phrase. * - * cipher = OpenSSL::Cipher.new 'AES-128-CBC' + * cipher = OpenSSL::Cipher.new 'aes-256-cbc' * pass_phrase = 'my secure pass phrase goes here' * * key_secure = key.export cipher, pass_phrase @@ -650,13 +695,13 @@ static void Init_ossl_locks(void) * * A key can also be loaded from a file. * - * key2 = OpenSSL::PKey::RSA.new File.read 'private_key.pem' + * key2 = OpenSSL::PKey.read File.read 'private_key.pem' * key2.public? # => true * key2.private? # => true * * or * - * key3 = OpenSSL::PKey::RSA.new File.read 'public_key.pem' + * key3 = OpenSSL::PKey.read File.read 'public_key.pem' * key3.public? # => true * key3.private? # => false * @@ -668,7 +713,7 @@ static void Init_ossl_locks(void) * * key4_pem = File.read 'private.secure.pem' * pass_phrase = 'my secure pass phrase goes here' - * key4 = OpenSSL::PKey::RSA.new key4_pem, pass_phrase + * key4 = OpenSSL::PKey.read key4_pem, pass_phrase * * == RSA Encryption * @@ -710,16 +755,14 @@ static void Init_ossl_locks(void) * To sign a document, a cryptographically secure hash of the document is * computed first, which is then signed using the private key. * - * digest = OpenSSL::Digest::SHA256.new - * signature = key.sign digest, document + * signature = key.sign 'SHA256', document * * To validate the signature, again a hash of the document is computed and * the signature is decrypted using the public key. The result is then * compared to the hash just computed, if they are equal the signature was * valid. * - * digest = OpenSSL::Digest::SHA256.new - * if key.verify digest, signature, document + * if key.verify 'SHA256', signature, document * puts 'Valid' * else * puts 'Invalid' @@ -745,7 +788,7 @@ static void Init_ossl_locks(void) * using PBKDF2. PKCS #5 v2.0 recommends at least 8 bytes for the salt, * the number of iterations largely depends on the hardware being used. * - * cipher = OpenSSL::Cipher.new 'AES-128-CBC' + * cipher = OpenSSL::Cipher.new 'aes-256-cbc' * cipher.encrypt * iv = cipher.random_iv * @@ -753,7 +796,7 @@ static void Init_ossl_locks(void) * salt = OpenSSL::Random.random_bytes 16 * iter = 20000 * key_len = cipher.key_len - * digest = OpenSSL::Digest::SHA256.new + * digest = OpenSSL::Digest.new('SHA256') * * key = OpenSSL::PKCS5.pbkdf2_hmac(pwd, salt, iter, key_len, digest) * cipher.key = key @@ -768,7 +811,7 @@ static void Init_ossl_locks(void) * Use the same steps as before to derive the symmetric AES key, this time * setting the Cipher up for decryption. * - * cipher = OpenSSL::Cipher.new 'AES-128-CBC' + * cipher = OpenSSL::Cipher.new 'aes-256-cbc' * cipher.decrypt * cipher.iv = iv # the one generated with #random_iv * @@ -776,7 +819,7 @@ static void Init_ossl_locks(void) * salt = ... # the one generated above * iter = 20000 * key_len = cipher.key_len - * digest = OpenSSL::Digest::SHA256.new + * digest = OpenSSL::Digest.new('SHA256') * * key = OpenSSL::PKCS5.pbkdf2_hmac(pwd, salt, iter, key_len, digest) * cipher.key = key @@ -803,7 +846,7 @@ static void Init_ossl_locks(void) * * First set up the cipher for encryption * - * encryptor = OpenSSL::Cipher.new 'AES-128-CBC' + * encryptor = OpenSSL::Cipher.new 'aes-256-cbc' * encryptor.encrypt * encryptor.pkcs5_keyivgen pass_phrase, salt * @@ -816,7 +859,7 @@ static void Init_ossl_locks(void) * * Use a new Cipher instance set up for decryption * - * decryptor = OpenSSL::Cipher.new 'AES-128-CBC' + * decryptor = OpenSSL::Cipher.new 'aes-256-cbc' * decryptor.decrypt * decryptor.pkcs5_keyivgen pass_phrase, salt * @@ -833,7 +876,7 @@ static void Init_ossl_locks(void) * signature. * * key = OpenSSL::PKey::RSA.new 2048 - * name = OpenSSL::X509::Name.parse 'CN=nobody/DC=example' + * name = OpenSSL::X509::Name.parse '/CN=nobody/DC=example' * * cert = OpenSSL::X509::Certificate.new * cert.version = 2 @@ -872,7 +915,7 @@ static void Init_ossl_locks(void) * certificate. * * cert.issuer = name - * cert.sign key, OpenSSL::Digest::SHA1.new + * cert.sign key, OpenSSL::Digest.new('SHA1') * * open 'certificate.pem', 'w' do |io| io.write cert.to_pem end * @@ -904,7 +947,7 @@ static void Init_ossl_locks(void) * ca_key = OpenSSL::PKey::RSA.new 2048 * pass_phrase = 'my secure pass phrase goes here' * - * cipher = OpenSSL::Cipher.new 'AES-128-CBC' + * cipher = OpenSSL::Cipher.new 'aes-256-cbc' * * open 'ca_key.pem', 'w', 0400 do |io| * io.write ca_key.export(cipher, pass_phrase) @@ -915,7 +958,7 @@ static void Init_ossl_locks(void) * A CA certificate is created the same way we created a certificate above, but * with different extensions. * - * ca_name = OpenSSL::X509::Name.parse 'CN=ca/DC=example' + * ca_name = OpenSSL::X509::Name.parse '/CN=ca/DC=example' * * ca_cert = OpenSSL::X509::Certificate.new * ca_cert.serial = 0 @@ -948,7 +991,7 @@ static void Init_ossl_locks(void) * * Root CA certificates are self-signed. * - * ca_cert.sign ca_key, OpenSSL::Digest::SHA1.new + * ca_cert.sign ca_key, OpenSSL::Digest.new('SHA1') * * The CA certificate is saved to disk so it may be distributed to all the * users of the keys this CA will sign. @@ -966,7 +1009,7 @@ static void Init_ossl_locks(void) * csr.version = 0 * csr.subject = name * csr.public_key = key.public_key - * csr.sign key, OpenSSL::Digest::SHA1.new + * csr.sign key, OpenSSL::Digest.new('SHA1') * * A CSR is saved to disk and sent to the CA for signing. * @@ -1010,7 +1053,7 @@ static void Init_ossl_locks(void) * csr_cert.add_extension \ * extension_factory.create_extension('subjectKeyIdentifier', 'hash') * - * csr_cert.sign ca_key, OpenSSL::Digest::SHA1.new + * csr_cert.sign ca_key, OpenSSL::Digest.new('SHA1') * * open 'csr_cert.pem', 'w' do |io| * io.write csr_cert.to_pem @@ -1042,13 +1085,13 @@ static void Init_ossl_locks(void) * loop do * ssl_connection = ssl_server.accept * - * data = connection.gets + * data = ssl_connection.gets * * response = "I got #{data.dump}" * puts response * - * connection.puts "I got #{data.dump}" - * connection.close + * ssl_connection.puts "I got #{data.dump}" + * ssl_connection.close * end * * === SSL client @@ -1099,6 +1142,10 @@ static void Init_ossl_locks(void) void Init_openssl(void) { +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + #undef rb_intern /* * Init timezone info @@ -1125,11 +1172,7 @@ Init_openssl(void) */ mOSSL = rb_define_module("OpenSSL"); rb_global_variable(&mOSSL); - - /* - * OpenSSL ruby extension version - */ - rb_define_const(mOSSL, "VERSION", rb_str_new2(OSSL_VERSION)); + rb_define_singleton_method(mOSSL, "fixed_length_secure_compare", ossl_crypto_fixed_length_secure_compare, 2); /* * Version of OpenSSL the ruby OpenSSL extension was built with @@ -1205,6 +1248,9 @@ Init_openssl(void) Init_ossl_pkey(); Init_ossl_rand(); Init_ossl_ssl(); +#ifndef OPENSSL_NO_TS + Init_ossl_ts(); +#endif Init_ossl_x509(); Init_ossl_ocsp(); Init_ossl_engine(); diff --git a/ruby/ext/openssl/ossl.h b/ruby/ext/openssl/ossl.h index 6af7ddd7d..4b5126893 100644 --- a/ruby/ext/openssl/ossl.h +++ b/ruby/ext/openssl/ossl.h @@ -18,19 +18,19 @@ #include #include #include + #include #include #include #include #include #include -#include #include #include -#include -#if !defined(OPENSSL_NO_ENGINE) -# include +#ifndef OPENSSL_NO_TS + #include #endif +#include #if !defined(OPENSSL_NO_OCSP) # include #endif @@ -40,6 +40,22 @@ #include #include +#ifndef LIBRESSL_VERSION_NUMBER +# define OSSL_IS_LIBRESSL 0 +# define OSSL_OPENSSL_PREREQ(maj, min, pat) \ + (OPENSSL_VERSION_NUMBER >= (maj << 28) | (min << 20) | (pat << 12)) +# define OSSL_LIBRESSL_PREREQ(maj, min, pat) 0 +#else +# define OSSL_IS_LIBRESSL 1 +# define OSSL_OPENSSL_PREREQ(maj, min, pat) 0 +# define OSSL_LIBRESSL_PREREQ(maj, min, pat) \ + (LIBRESSL_VERSION_NUMBER >= (maj << 28) | (min << 20) | (pat << 12)) +#endif + +#if !defined(OPENSSL_NO_ENGINE) && !OSSL_OPENSSL_PREREQ(3, 0, 0) +# define OSSL_USE_ENGINE +#endif + /* * Common Module */ @@ -85,9 +101,8 @@ VALUE ossl_buf2str(char *buf, int len); VALUE ossl_str_new(const char *, long, int *); #define ossl_str_adjust(str, p) \ do{\ - long len = RSTRING_LEN(str);\ long newlen = (long)((p) - (unsigned char*)RSTRING_PTR(str));\ - assert(newlen <= len);\ + assert(newlen <= RSTRING_LEN(str));\ rb_str_set_len((str), newlen);\ }while(0) /* @@ -119,7 +134,9 @@ int ossl_pem_passwd_cb(char *, int, int, void *); /* * ERRor messages */ -NORETURN(void ossl_raise(VALUE, const char *, ...)); +PRINTF_ARGS(NORETURN(void ossl_raise(VALUE, const char *, ...)), 2, 3); +/* Make exception instance from str and OpenSSL error reason string. */ +VALUE ossl_make_error(VALUE exc, VALUE str); /* Clear OpenSSL error queue. If dOSSL is set, rb_warn() them. */ void ossl_clear_error(void); @@ -152,7 +169,6 @@ void ossl_debug(const char *, ...); * Include all parts */ #include "openssl_missing.h" -#include "ruby_missing.h" #include "ossl_asn1.h" #include "ossl_bio.h" #include "ossl_bn.h" @@ -167,7 +183,9 @@ void ossl_debug(const char *, ...); #include "ossl_pkey.h" #include "ossl_rand.h" #include "ossl_ssl.h" -#include "ossl_version.h" +#ifndef OPENSSL_NO_TS + #include "ossl_ts.h" +#endif #include "ossl_x509.h" #include "ossl_engine.h" #include "ossl_kdf.h" diff --git a/ruby/ext/openssl/ossl_asn1.c b/ruby/ext/openssl/ossl_asn1.c index 0085d4bea..a61d3eefb 100644 --- a/ruby/ext/openssl/ossl_asn1.c +++ b/ruby/ext/openssl/ossl_asn1.c @@ -69,6 +69,12 @@ asn1time_to_time(const ASN1_TIME *time) return rb_funcall2(rb_cTime, rb_intern("utc"), 6, argv); } +static VALUE +asn1time_to_time_i(VALUE arg) +{ + return asn1time_to_time((ASN1_TIME *)arg); +} + void ossl_time_split(VALUE time, time_t *sec, int *days) { @@ -136,6 +142,12 @@ num_to_asn1integer(VALUE obj, ASN1_INTEGER *ai) return ai; } +static VALUE +asn1integer_to_num_i(VALUE arg) +{ + return asn1integer_to_num((ASN1_INTEGER *)arg); +} + /********/ /* * ASN1 module @@ -325,7 +337,7 @@ decode_int(unsigned char* der, long length) p = der; if(!(ai = d2i_ASN1_INTEGER(NULL, &p, length))) ossl_raise(eASN1Error, NULL); - ret = rb_protect((VALUE (*)(VALUE))asn1integer_to_num, + ret = rb_protect(asn1integer_to_num_i, (VALUE)ai, &status); ASN1_INTEGER_free(ai); if(status) rb_jump_tag(status); @@ -365,7 +377,7 @@ decode_enum(unsigned char* der, long length) p = der; if(!(ai = d2i_ASN1_ENUMERATED(NULL, &p, length))) ossl_raise(eASN1Error, NULL); - ret = rb_protect((VALUE (*)(VALUE))asn1integer_to_num, + ret = rb_protect(asn1integer_to_num_i, (VALUE)ai, &status); ASN1_ENUMERATED_free(ai); if(status) rb_jump_tag(status); @@ -427,7 +439,7 @@ decode_time(unsigned char* der, long length) p = der; if(!(time = d2i_ASN1_TIME(NULL, &p, length))) ossl_raise(eASN1Error, NULL); - ret = rb_protect((VALUE (*)(VALUE))asn1time_to_time, + ret = rb_protect(asn1time_to_time_i, (VALUE)time, &status); ASN1_TIME_free(time); if(status) rb_jump_tag(status); @@ -1285,6 +1297,30 @@ ossl_asn1obj_get_ln(VALUE self) return ret; } +/* + * call-seq: + * oid == other_oid => true or false + * + * Returns +true+ if _other_oid_ is the same as _oid_ + */ +static VALUE +ossl_asn1obj_eq(VALUE self, VALUE other) +{ + VALUE valSelf, valOther; + int nidSelf, nidOther; + + valSelf = ossl_asn1_get_value(self); + valOther = ossl_asn1_get_value(other); + + if ((nidSelf = OBJ_txt2nid(StringValueCStr(valSelf))) == NID_undef) + ossl_raise(eASN1Error, "OBJ_txt2nid"); + + if ((nidOther = OBJ_txt2nid(StringValueCStr(valOther))) == NID_undef) + ossl_raise(eASN1Error, "OBJ_txt2nid"); + + return nidSelf == nidOther ? Qtrue : Qfalse; +} + static VALUE asn1obj_get_oid_i(VALUE vobj) { @@ -1486,7 +1522,7 @@ Init_ossl_asn1(void) * * An Array that stores the name of a given tag number. These names are * the same as the name of the tag constant that is additionally defined, - * e.g. UNIVERSAL_TAG_NAME[2] = "INTEGER" and OpenSSL::ASN1::INTEGER = 2. + * e.g. +UNIVERSAL_TAG_NAME[2] = "INTEGER"+ and +OpenSSL::ASN1::INTEGER = 2+. * * == Example usage * @@ -1818,6 +1854,7 @@ do{\ rb_define_method(cASN1ObjectId, "oid", ossl_asn1obj_get_oid, 0); rb_define_alias(cASN1ObjectId, "short_name", "sn"); rb_define_alias(cASN1ObjectId, "long_name", "ln"); + rb_define_method(cASN1ObjectId, "==", ossl_asn1obj_eq, 1); rb_attr(cASN1BitString, rb_intern("unused_bits"), 1, 1, 0); rb_define_method(cASN1EndOfContent, "initialize", ossl_asn1eoc_initialize, 0); diff --git a/ruby/ext/openssl/ossl_bn.c b/ruby/ext/openssl/ossl_bn.c index 6f0064e96..56fa0ec30 100644 --- a/ruby/ext/openssl/ossl_bn.c +++ b/ruby/ext/openssl/ossl_bn.c @@ -10,6 +10,10 @@ /* modified by Michal Rokos */ #include "ossl.h" +#ifdef HAVE_RB_EXT_RACTOR_SAFE +#include +#endif + #define NewBN(klass) \ TypedData_Wrap_Struct((klass), &ossl_bn_type, 0) #define SetBN(obj, bn) do { \ @@ -150,12 +154,58 @@ ossl_bn_value_ptr(volatile VALUE *ptr) /* * Private */ -/* - * BN_CTX - is used in more difficult math. ops - * (Why just 1? Because Ruby itself isn't thread safe, - * we don't need to care about threads) - */ -BN_CTX *ossl_bn_ctx; + +#ifdef HAVE_RB_EXT_RACTOR_SAFE +void +ossl_bn_ctx_free(void *ptr) +{ + BN_CTX *ctx = (BN_CTX *)ptr; + BN_CTX_free(ctx); +} + +struct rb_ractor_local_storage_type ossl_bn_ctx_key_type = { + NULL, // mark + ossl_bn_ctx_free, +}; + +rb_ractor_local_key_t ossl_bn_ctx_key; + +BN_CTX * +ossl_bn_ctx_get(void) +{ + // stored in ractor local storage + + BN_CTX *ctx = rb_ractor_local_storage_ptr(ossl_bn_ctx_key); + if (!ctx) { + if (!(ctx = BN_CTX_new())) { + ossl_raise(rb_eRuntimeError, "Cannot init BN_CTX"); + } + rb_ractor_local_storage_ptr_set(ossl_bn_ctx_key, ctx); + } + return ctx; +} +#else +// for ruby 2.x +static BN_CTX *gv_ossl_bn_ctx; + +BN_CTX * +ossl_bn_ctx_get(void) +{ + if (gv_ossl_bn_ctx == NULL) { + if (!(gv_ossl_bn_ctx = BN_CTX_new())) { + ossl_raise(rb_eRuntimeError, "Cannot init BN_CTX"); + } + } + return gv_ossl_bn_ctx; +} + +void +ossl_bn_ctx_free(void) +{ + BN_CTX_free(gv_ossl_bn_ctx); + gv_ossl_bn_ctx = NULL; +} +#endif static VALUE ossl_bn_alloc(VALUE klass) @@ -173,13 +223,29 @@ ossl_bn_alloc(VALUE klass) /* * call-seq: - * OpenSSL::BN.new => aBN - * OpenSSL::BN.new(bn) => aBN - * OpenSSL::BN.new(integer) => aBN - * OpenSSL::BN.new(string) => aBN - * OpenSSL::BN.new(string, 0 | 2 | 10 | 16) => aBN + * OpenSSL::BN.new(bn) -> aBN + * OpenSSL::BN.new(integer) -> aBN + * OpenSSL::BN.new(string, base = 10) -> aBN + * + * Construct a new \OpenSSL BIGNUM object. * - * Construct a new OpenSSL BIGNUM object. + * If +bn+ is an Integer or OpenSSL::BN, a new instance of OpenSSL::BN + * representing the same value is returned. See also Integer#to_bn for the + * short-hand. + * + * If a String is given, the content will be parsed according to +base+. + * + * +string+:: + * The string to be parsed. + * +base+:: + * The format. Must be one of the following: + * - +0+ - MPI format. See the man page BN_mpi2bn(3) for details. + * - +2+ - Variable-length and big-endian binary encoding of a positive + * number. + * - +10+ - Decimal number representation, with a leading '-' for a negative + * number. + * - +16+ - Hexadeciaml number representation, with a leading '-' for a + * negative number. */ static VALUE ossl_bn_initialize(int argc, VALUE *argv, VALUE self) @@ -193,6 +259,10 @@ ossl_bn_initialize(int argc, VALUE *argv, VALUE self) base = NUM2INT(bs); } + if (NIL_P(str)) { + ossl_raise(rb_eArgError, "invalid argument"); + } + if (RB_INTEGER_TYPE_P(str)) { GetBN(self, bn); integer_to_bnptr(str, bn); @@ -243,16 +313,21 @@ ossl_bn_initialize(int argc, VALUE *argv, VALUE self) /* * call-seq: - * bn.to_s => string - * bn.to_s(base) => string + * bn.to_s(base = 10) -> string * - * === Parameters - * * _base_ - Integer - * Valid values: - * * 0 - MPI - * * 2 - binary - * * 10 - the default - * * 16 - hex + * Returns the string representation of the bignum. + * + * BN.new can parse the encoded string to convert back into an OpenSSL::BN. + * + * +base+:: + * The format. Must be one of the following: + * - +0+ - MPI format. See the man page BN_bn2mpi(3) for details. + * - +2+ - Variable-length and big-endian binary encoding. The sign of + * the bignum is ignored. + * - +10+ - Decimal number representation, with a leading '-' for a negative + * bignum. + * - +16+ - Hexadeciaml number representation, with a leading '-' for a + * negative bignum. */ static VALUE ossl_bn_to_s(int argc, VALUE *argv, VALUE self) @@ -400,7 +475,7 @@ ossl_bn_is_negative(VALUE self) if (!(result = BN_new())) { \ ossl_raise(eBNError, NULL); \ } \ - if (!BN_##func(result, bn, ossl_bn_ctx)) { \ + if (BN_##func(result, bn, ossl_bn_ctx) <= 0) { \ BN_free(result); \ ossl_raise(eBNError, NULL); \ } \ @@ -426,7 +501,7 @@ BIGNUM_1c(sqr) if (!(result = BN_new())) { \ ossl_raise(eBNError, NULL); \ } \ - if (!BN_##func(result, bn1, bn2)) { \ + if (BN_##func(result, bn1, bn2) <= 0) { \ BN_free(result); \ ossl_raise(eBNError, NULL); \ } \ @@ -459,7 +534,7 @@ BIGNUM_2(sub) if (!(result = BN_new())) { \ ossl_raise(eBNError, NULL); \ } \ - if (!BN_##func(result, bn1, bn2, ossl_bn_ctx)) { \ + if (BN_##func(result, bn1, bn2, ossl_bn_ctx) <= 0) { \ BN_free(result); \ ossl_raise(eBNError, NULL); \ } \ @@ -503,11 +578,21 @@ BIGNUM_2c(gcd) BIGNUM_2c(mod_sqr) /* - * Document-method: OpenSSL::BN#mod_inverse * call-seq: - * bn.mod_inverse(bn2) => aBN + * bn.mod_inverse(bn2) => aBN */ -BIGNUM_2c(mod_inverse) +static VALUE +ossl_bn_mod_inverse(VALUE self, VALUE other) +{ + BIGNUM *bn1, *bn2 = GetBNPtr(other), *result; + VALUE obj; + GetBN(self, bn1); + obj = NewBN(rb_obj_class(self)); + if (!(result = BN_mod_inverse(NULL, bn1, bn2, ossl_bn_ctx))) + ossl_raise(eBNError, "BN_mod_inverse"); + SetBN(obj, result); + return obj; +} /* * call-seq: @@ -556,7 +641,7 @@ ossl_bn_div(VALUE self, VALUE other) if (!(result = BN_new())) { \ ossl_raise(eBNError, NULL); \ } \ - if (!BN_##func(result, bn1, bn2, bn3, ossl_bn_ctx)) { \ + if (BN_##func(result, bn1, bn2, bn3, ossl_bn_ctx) <= 0) { \ BN_free(result); \ ossl_raise(eBNError, NULL); \ } \ @@ -598,7 +683,7 @@ BIGNUM_3c(mod_exp) { \ BIGNUM *bn; \ GetBN(self, bn); \ - if (!BN_##func(bn, NUM2INT(bit))) { \ + if (BN_##func(bn, NUM2INT(bit)) <= 0) { \ ossl_raise(eBNError, NULL); \ } \ return self; \ @@ -658,7 +743,7 @@ ossl_bn_is_bit_set(VALUE self, VALUE bit) if (!(result = BN_new())) { \ ossl_raise(eBNError, NULL); \ } \ - if (!BN_##func(result, bn, b)) { \ + if (BN_##func(result, bn, b) <= 0) { \ BN_free(result); \ ossl_raise(eBNError, NULL); \ } \ @@ -688,7 +773,7 @@ BIGNUM_SHIFT(rshift) int b; \ b = NUM2INT(bits); \ GetBN(self, bn); \ - if (!BN_##func(bn, bn, b)) \ + if (BN_##func(bn, bn, b) <= 0) \ ossl_raise(eBNError, NULL); \ return self; \ } @@ -707,78 +792,64 @@ BIGNUM_SELF_SHIFT(lshift) */ BIGNUM_SELF_SHIFT(rshift) -#define BIGNUM_RAND(func) \ - static VALUE \ - ossl_bn_s_##func(int argc, VALUE *argv, VALUE klass) \ - { \ - BIGNUM *result; \ - int bottom = 0, top = 0, b; \ - VALUE bits, fill, odd, obj; \ - \ - switch (rb_scan_args(argc, argv, "12", &bits, &fill, &odd)) { \ - case 3: \ - bottom = (odd == Qtrue) ? 1 : 0; \ - /* FALLTHROUGH */ \ - case 2: \ - top = NUM2INT(fill); \ - } \ - b = NUM2INT(bits); \ - obj = NewBN(klass); \ - if (!(result = BN_new())) { \ - ossl_raise(eBNError, NULL); \ - } \ - if (!BN_##func(result, b, top, bottom)) { \ - BN_free(result); \ - ossl_raise(eBNError, NULL); \ - } \ - SetBN(obj, result); \ - return obj; \ - } - -/* - * Document-method: OpenSSL::BN.rand - * BN.rand(bits [, fill [, odd]]) -> aBN - */ -BIGNUM_RAND(rand) - -/* - * Document-method: OpenSSL::BN.pseudo_rand - * BN.pseudo_rand(bits [, fill [, odd]]) -> aBN - */ -BIGNUM_RAND(pseudo_rand) - -#define BIGNUM_RAND_RANGE(func) \ - static VALUE \ - ossl_bn_s_##func##_range(VALUE klass, VALUE range) \ - { \ - BIGNUM *bn = GetBNPtr(range), *result; \ - VALUE obj = NewBN(klass); \ - if (!(result = BN_new())) { \ - ossl_raise(eBNError, NULL); \ - } \ - if (!BN_##func##_range(result, bn)) { \ - BN_free(result); \ - ossl_raise(eBNError, NULL); \ - } \ - SetBN(obj, result); \ - return obj; \ - } - /* - * Document-method: OpenSSL::BN.rand_range * call-seq: - * BN.rand_range(range) -> aBN + * BN.rand(bits [, fill [, odd]]) -> aBN * + * Generates a cryptographically strong pseudo-random number of +bits+. + * + * See also the man page BN_rand(3). */ -BIGNUM_RAND_RANGE(rand) +static VALUE +ossl_bn_s_rand(int argc, VALUE *argv, VALUE klass) +{ + BIGNUM *result; + int bottom = 0, top = 0, b; + VALUE bits, fill, odd, obj; + + switch (rb_scan_args(argc, argv, "12", &bits, &fill, &odd)) { + case 3: + bottom = (odd == Qtrue) ? 1 : 0; + /* FALLTHROUGH */ + case 2: + top = NUM2INT(fill); + } + b = NUM2INT(bits); + obj = NewBN(klass); + if (!(result = BN_new())) { + ossl_raise(eBNError, "BN_new"); + } + if (BN_rand(result, b, top, bottom) <= 0) { + BN_free(result); + ossl_raise(eBNError, "BN_rand"); + } + SetBN(obj, result); + return obj; +} /* - * Document-method: OpenSSL::BN.pseudo_rand_range * call-seq: - * BN.pseudo_rand_range(range) -> aBN + * BN.rand_range(range) -> aBN + * + * Generates a cryptographically strong pseudo-random number in the range + * 0...+range+. * + * See also the man page BN_rand_range(3). */ -BIGNUM_RAND_RANGE(pseudo_rand) +static VALUE +ossl_bn_s_rand_range(VALUE klass, VALUE range) +{ + BIGNUM *bn = GetBNPtr(range), *result; + VALUE obj = NewBN(klass); + if (!(result = BN_new())) + ossl_raise(eBNError, "BN_new"); + if (BN_rand_range(result, bn) <= 0) { + BN_free(result); + ossl_raise(eBNError, "BN_rand_range"); + } + SetBN(obj, result); + return obj; +} /* * call-seq: @@ -873,7 +944,17 @@ ossl_bn_copy(VALUE self, VALUE other) static VALUE ossl_bn_uplus(VALUE self) { - return self; + VALUE obj; + BIGNUM *bn1, *bn2; + + GetBN(self, bn1); + obj = NewBN(cBN); + bn2 = BN_dup(bn1); + if (!bn2) + ossl_raise(eBNError, "BN_dup"); + SetBN(obj, bn2); + + return obj; } /* @@ -897,6 +978,24 @@ ossl_bn_uminus(VALUE self) return obj; } +/* + * call-seq: + * bn.abs -> aBN + */ +static VALUE +ossl_bn_abs(VALUE self) +{ + BIGNUM *bn1; + + GetBN(self, bn1); + if (BN_is_negative(bn1)) { + return ossl_bn_uminus(self); + } + else { + return ossl_bn_uplus(self); + } +} + #define BIGNUM_CMP(func) \ static VALUE \ ossl_bn_##func(VALUE self, VALUE other) \ @@ -1005,34 +1104,29 @@ ossl_bn_hash(VALUE self) * bn.prime? => true | false * bn.prime?(checks) => true | false * - * Performs a Miller-Rabin probabilistic primality test with _checks_ - * iterations. If _checks_ is not specified, a number of iterations is used - * that yields a false positive rate of at most 2^-80 for random input. + * Performs a Miller-Rabin probabilistic primality test for +bn+. * - * === Parameters - * * _checks_ - integer + * +checks+ parameter is deprecated in version 3.0. It has no effect. */ static VALUE ossl_bn_is_prime(int argc, VALUE *argv, VALUE self) { BIGNUM *bn; - VALUE vchecks; - int checks = BN_prime_checks; + int ret; - if (rb_scan_args(argc, argv, "01", &vchecks) == 1) { - checks = NUM2INT(vchecks); - } + rb_check_arity(argc, 0, 1); GetBN(self, bn); - switch (BN_is_prime_ex(bn, checks, ossl_bn_ctx, NULL)) { - case 1: - return Qtrue; - case 0: - return Qfalse; - default: - ossl_raise(eBNError, NULL); - } - /* not reachable */ - return Qnil; + +#ifdef HAVE_BN_CHECK_PRIME + ret = BN_check_prime(bn, ossl_bn_ctx, NULL); + if (ret < 0) + ossl_raise(eBNError, "BN_check_prime"); +#else + ret = BN_is_prime_fasttest_ex(bn, BN_prime_checks, ossl_bn_ctx, 1, NULL); + if (ret < 0) + ossl_raise(eBNError, "BN_is_prime_fasttest_ex"); +#endif + return ret ? Qtrue : Qfalse; } /* @@ -1041,39 +1135,52 @@ ossl_bn_is_prime(int argc, VALUE *argv, VALUE self) * bn.prime_fasttest?(checks) => true | false * bn.prime_fasttest?(checks, trial_div) => true | false * - * Performs a Miller-Rabin primality test. This is same as #prime? except this - * first attempts trial divisions with some small primes. + * Performs a Miller-Rabin probabilistic primality test for +bn+. * - * === Parameters - * * _checks_ - integer - * * _trial_div_ - boolean + * Deprecated in version 3.0. Use #prime? instead. + * + * +checks+ and +trial_div+ parameters no longer have any effect. */ static VALUE ossl_bn_is_prime_fasttest(int argc, VALUE *argv, VALUE self) +{ + rb_check_arity(argc, 0, 2); + return ossl_bn_is_prime(0, argv, self); +} + +/* + * call-seq: + * bn.get_flags(flags) => flags + * + * Returns the flags on the BN object. + * The argument is used as a bit mask. + * + * === Parameters + * * _flags_ - integer + */ +static VALUE +ossl_bn_get_flags(VALUE self, VALUE arg) { BIGNUM *bn; - VALUE vchecks, vtrivdiv; - int checks = BN_prime_checks, do_trial_division = 1; + GetBN(self, bn); - rb_scan_args(argc, argv, "02", &vchecks, &vtrivdiv); + return INT2NUM(BN_get_flags(bn, NUM2INT(arg))); +} - if (!NIL_P(vchecks)) { - checks = NUM2INT(vchecks); - } +/* + * call-seq: + * bn.set_flags(flags) => nil + * + * Enables the flags on the BN object. + * Currently, the flags argument can contain zero of OpenSSL::BN::CONSTTIME. + */ +static VALUE +ossl_bn_set_flags(VALUE self, VALUE arg) +{ + BIGNUM *bn; GetBN(self, bn); - /* handle true/false */ - if (vtrivdiv == Qfalse) { - do_trial_division = 0; - } - switch (BN_is_prime_fasttest_ex(bn, checks, ossl_bn_ctx, do_trial_division, NULL)) { - case 1: - return Qtrue; - case 0: - return Qfalse; - default: - ossl_raise(eBNError, NULL); - } - /* not reachable */ + + BN_set_flags(bn, NUM2INT(arg)); return Qnil; } @@ -1089,9 +1196,11 @@ Init_ossl_bn(void) eOSSLError = rb_define_class_under(mOSSL, "OpenSSLError", rb_eStandardError); #endif - if (!(ossl_bn_ctx = BN_CTX_new())) { - ossl_raise(rb_eRuntimeError, "Cannot init BN_CTX"); - } +#ifdef HAVE_RB_EXT_RACTOR_SAFE + ossl_bn_ctx_key = rb_ractor_local_storage_ptr_newkey(&ossl_bn_ctx_key_type); +#else + ossl_bn_ctx_get(); +#endif eBNError = rb_define_class_under(mOSSL, "BNError", eOSSLError); @@ -1111,6 +1220,7 @@ Init_ossl_bn(void) rb_define_method(cBN, "+@", ossl_bn_uplus, 0); rb_define_method(cBN, "-@", ossl_bn_uminus, 0); + rb_define_method(cBN, "abs", ossl_bn_abs, 0); rb_define_method(cBN, "+", ossl_bn_add, 1); rb_define_method(cBN, "-", ossl_bn_sub, 1); @@ -1154,9 +1264,9 @@ Init_ossl_bn(void) * get_word */ rb_define_singleton_method(cBN, "rand", ossl_bn_s_rand, -1); - rb_define_singleton_method(cBN, "pseudo_rand", ossl_bn_s_pseudo_rand, -1); rb_define_singleton_method(cBN, "rand_range", ossl_bn_s_rand_range, 1); - rb_define_singleton_method(cBN, "pseudo_rand_range", ossl_bn_s_pseudo_rand_range, 1); + rb_define_alias(rb_singleton_class(cBN), "pseudo_rand", "rand"); + rb_define_alias(rb_singleton_class(cBN), "pseudo_rand_range", "rand_range"); rb_define_singleton_method(cBN, "generate_prime", ossl_bn_s_generate_prime, -1); rb_define_method(cBN, "prime?", ossl_bn_is_prime, -1); @@ -1173,6 +1283,23 @@ Init_ossl_bn(void) /* lshift1 - DON'T IMPL. */ /* rshift1 - DON'T IMPL. */ + rb_define_method(cBN, "get_flags", ossl_bn_get_flags, 1); + rb_define_method(cBN, "set_flags", ossl_bn_set_flags, 1); + +#ifdef BN_FLG_CONSTTIME + rb_define_const(cBN, "CONSTTIME", INT2NUM(BN_FLG_CONSTTIME)); +#endif + /* BN_FLG_MALLOCED and BN_FLG_STATIC_DATA seems for C programming. + * Allowing them leads to memory leak. + * So, for now, they are not exported +#ifdef BN_FLG_MALLOCED + rb_define_const(cBN, "MALLOCED", INT2NUM(BN_FLG_MALLOCED)); +#endif +#ifdef BN_FLG_STATIC_DATA + rb_define_const(cBN, "STATIC_DATA", INT2NUM(BN_FLG_STATIC_DATA)); +#endif + */ + /* * bn2bin * bin2bn diff --git a/ruby/ext/openssl/ossl_bn.h b/ruby/ext/openssl/ossl_bn.h index a19ba1948..1cc041fc2 100644 --- a/ruby/ext/openssl/ossl_bn.h +++ b/ruby/ext/openssl/ossl_bn.h @@ -13,7 +13,8 @@ extern VALUE cBN; extern VALUE eBNError; -extern BN_CTX *ossl_bn_ctx; +BN_CTX *ossl_bn_ctx_get(void); +#define ossl_bn_ctx ossl_bn_ctx_get() #define GetBNPtr(obj) ossl_bn_value_ptr(&(obj)) diff --git a/ruby/ext/openssl/ossl_cipher.c b/ruby/ext/openssl/ossl_cipher.c index 0840c84a7..d9c789143 100644 --- a/ruby/ext/openssl/ossl_cipher.c +++ b/ruby/ext/openssl/ossl_cipher.c @@ -104,7 +104,7 @@ ossl_cipher_alloc(VALUE klass) * call-seq: * Cipher.new(string) -> cipher * - * The string must be a valid cipher name like "AES-128-CBC" or "3DES". + * The string must contain a valid cipher name like "aes-256-cbc". * * A list of cipher names is available by calling OpenSSL::Cipher.ciphers. */ @@ -149,11 +149,11 @@ ossl_cipher_copy(VALUE self, VALUE other) return self; } -static void* -add_cipher_name_to_ary(const OBJ_NAME *name, VALUE ary) +static void +add_cipher_name_to_ary(const OBJ_NAME *name, void *arg) { + VALUE ary = (VALUE)arg; rb_ary_push(ary, rb_str_new2(name->name)); - return NULL; } /* @@ -169,7 +169,7 @@ ossl_s_ciphers(VALUE self) ary = rb_ary_new(); OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, - (void(*)(const OBJ_NAME*,void*))add_cipher_name_to_ary, + add_cipher_name_to_ary, (void*)ary); return ary; @@ -237,8 +237,7 @@ ossl_cipher_init(int argc, VALUE *argv, VALUE self, int mode) ossl_raise(eCipherError, NULL); } - if (p_key) - rb_ivar_set(self, id_key_set, Qtrue); + rb_ivar_set(self, id_key_set, p_key ? Qtrue : Qfalse); return self; } @@ -814,6 +813,31 @@ ossl_cipher_block_size(VALUE self) return INT2NUM(EVP_CIPHER_CTX_block_size(ctx)); } +/* + * call-seq: + * cipher.ccm_data_len = integer -> integer + * + * Sets the length of the plaintext / ciphertext message that will be + * processed in CCM mode. Make sure to call this method after #key= and + * #iv= have been set, and before #auth_data=. + * + * Only call this method after calling Cipher#encrypt or Cipher#decrypt. + */ +static VALUE +ossl_cipher_set_ccm_data_len(VALUE self, VALUE data_len) +{ + int in_len, out_len; + EVP_CIPHER_CTX *ctx; + + in_len = NUM2INT(data_len); + + GetCipher(self, ctx); + if (EVP_CipherUpdate(ctx, NULL, &out_len, NULL, in_len) != 1) + ossl_raise(eCipherError, NULL); + + return data_len; +} + /* * INIT */ @@ -850,23 +874,7 @@ Init_ossl_cipher(void) * individual components name, key length and mode. Either all uppercase * or all lowercase strings may be used, for example: * - * cipher = OpenSSL::Cipher.new('AES-128-CBC') - * - * For each algorithm supported, there is a class defined under the - * Cipher class that goes by the name of the cipher, e.g. to obtain an - * instance of AES, you could also use - * - * # these are equivalent - * cipher = OpenSSL::Cipher::AES.new(128, :CBC) - * cipher = OpenSSL::Cipher::AES.new(128, 'CBC') - * cipher = OpenSSL::Cipher::AES.new('128-CBC') - * - * Finally, due to its wide-spread use, there are also extra classes - * defined for the different key sizes of AES - * - * cipher = OpenSSL::Cipher::AES128.new(:CBC) - * cipher = OpenSSL::Cipher::AES192.new(:CBC) - * cipher = OpenSSL::Cipher::AES256.new(:CBC) + * cipher = OpenSSL::Cipher.new('aes-128-cbc') * * === Choosing either encryption or decryption mode * @@ -896,7 +904,7 @@ Init_ossl_cipher(void) * without processing the password further. A simple and secure way to * create a key for a particular Cipher is * - * cipher = OpenSSL::AES256.new(:CFB) + * cipher = OpenSSL::Cipher.new('aes-256-cfb') * cipher.encrypt * key = cipher.random_key # also sets the generated key on the Cipher * @@ -964,14 +972,14 @@ Init_ossl_cipher(void) * * data = "Very, very confidential data" * - * cipher = OpenSSL::Cipher::AES.new(128, :CBC) + * cipher = OpenSSL::Cipher.new('aes-128-cbc') * cipher.encrypt * key = cipher.random_key * iv = cipher.random_iv * * encrypted = cipher.update(data) + cipher.final * ... - * decipher = OpenSSL::Cipher::AES.new(128, :CBC) + * decipher = OpenSSL::Cipher.new('aes-128-cbc') * decipher.decrypt * decipher.key = key * decipher.iv = iv @@ -1007,7 +1015,7 @@ Init_ossl_cipher(void) * not to reuse the _key_ and _nonce_ pair. Reusing an nonce ruins the * security guarantees of GCM mode. * - * cipher = OpenSSL::Cipher::AES.new(128, :GCM).encrypt + * cipher = OpenSSL::Cipher.new('aes-128-gcm').encrypt * cipher.key = key * cipher.iv = nonce * cipher.auth_data = auth_data @@ -1023,7 +1031,7 @@ Init_ossl_cipher(void) * ciphertext with a probability of 1/256. * * raise "tag is truncated!" unless tag.bytesize == 16 - * decipher = OpenSSL::Cipher::AES.new(128, :GCM).decrypt + * decipher = OpenSSL::Cipher.new('aes-128-gcm').decrypt * decipher.key = key * decipher.iv = nonce * decipher.auth_tag = tag @@ -1060,6 +1068,7 @@ Init_ossl_cipher(void) rb_define_method(cCipher, "iv_len", ossl_cipher_iv_length, 0); rb_define_method(cCipher, "block_size", ossl_cipher_block_size, 0); rb_define_method(cCipher, "padding=", ossl_cipher_set_padding, 1); + rb_define_method(cCipher, "ccm_data_len=", ossl_cipher_set_ccm_data_len, 1); id_auth_tag_len = rb_intern_const("auth_tag_len"); id_key_set = rb_intern_const("key_set"); diff --git a/ruby/ext/openssl/ossl_config.c b/ruby/ext/openssl/ossl_config.c index 28392e208..0bac02748 100644 --- a/ruby/ext/openssl/ossl_config.c +++ b/ruby/ext/openssl/ossl_config.c @@ -9,81 +9,452 @@ */ #include "ossl.h" +static VALUE cConfig, eConfigError; + +static void +nconf_free(void *conf) +{ + NCONF_free(conf); +} + +static const rb_data_type_t ossl_config_type = { + "OpenSSL/CONF", + { + 0, nconf_free, + }, + 0, 0, RUBY_TYPED_FREE_IMMEDIATELY, +}; + +CONF * +GetConfig(VALUE obj) +{ + CONF *conf; + + TypedData_Get_Struct(obj, CONF, &ossl_config_type, conf); + if (!conf) + rb_raise(rb_eRuntimeError, "CONF is not initialized"); + return conf; +} + +static VALUE +config_s_alloc(VALUE klass) +{ + VALUE obj; + CONF *conf; + + obj = TypedData_Wrap_Struct(klass, &ossl_config_type, 0); + conf = NCONF_new(NULL); + if (!conf) + ossl_raise(eConfigError, "NCONF_new"); + RTYPEDDATA_DATA(obj) = conf; + return obj; +} + +static void +config_load_bio(CONF *conf, BIO *bio) +{ + long eline = -1; + + if (!NCONF_load_bio(conf, bio, &eline)) { + BIO_free(bio); + if (eline <= 0) + ossl_raise(eConfigError, "wrong config format"); + else + ossl_raise(eConfigError, "error in line %ld", eline); + } + BIO_free(bio); + + /* + * Clear the error queue even if it is parsed successfully. + * Particularly, when the .include directive refers to a non-existent file, + * it is only reported in the error queue. + */ + ossl_clear_error(); +} /* - * Classes - */ -VALUE cConfig; -/* Document-class: OpenSSL::ConfigError + * call-seq: + * Config.parse(string) -> OpenSSL::Config * - * General error for openssl library configuration files. Including formatting, - * parsing errors, etc. + * Parses a given _string_ as a blob that contains configuration for OpenSSL. */ -VALUE eConfigError; +static VALUE +config_s_parse(VALUE klass, VALUE str) +{ + VALUE obj = config_s_alloc(klass); + CONF *conf = GetConfig(obj); + BIO *bio; + + bio = ossl_obj2bio(&str); + config_load_bio(conf, bio); /* Consumes BIO */ + return obj; +} + +static VALUE config_get_sections(VALUE self); +static VALUE config_get_section(VALUE self, VALUE section); /* - * Public + * call-seq: + * Config.parse_config(io) -> hash + * + * Parses the configuration data read from _io_ and returns the whole content + * as a Hash. */ +static VALUE +config_s_parse_config(VALUE klass, VALUE io) +{ + VALUE obj, sections, ret; + long i; + + obj = config_s_parse(klass, io); + sections = config_get_sections(obj); + ret = rb_hash_new(); + for (i = 0; i < RARRAY_LEN(sections); i++) { + VALUE section = rb_ary_entry(sections, i); + rb_hash_aset(ret, section, config_get_section(obj, section)); + } + return ret; +} /* - * DupConfigPtr is a public C-level function for getting OpenSSL CONF struct - * from an OpenSSL::Config(eConfig) instance. We decided to implement - * OpenSSL::Config in Ruby level but we need to pass native CONF struct for - * some OpenSSL features such as X509V3_EXT_*. + * call-seq: + * Config.new(filename) -> OpenSSL::Config + * + * Creates an instance of OpenSSL::Config from the content of the file + * specified by _filename_. + * + * This can be used in contexts like OpenSSL::X509::ExtensionFactory.config= + * + * This can raise IO exceptions based on the access, or availability of the + * file. A ConfigError exception may be raised depending on the validity of + * the data being configured. */ -CONF * -DupConfigPtr(VALUE obj) +static VALUE +config_initialize(int argc, VALUE *argv, VALUE self) { - CONF *conf; + CONF *conf = GetConfig(self); + VALUE filename; + + /* 0-arguments call has no use-case, but is kept for compatibility */ + rb_scan_args(argc, argv, "01", &filename); + rb_check_frozen(self); + if (!NIL_P(filename)) { + BIO *bio = BIO_new_file(StringValueCStr(filename), "rb"); + if (!bio) + ossl_raise(eConfigError, "BIO_new_file"); + config_load_bio(conf, bio); /* Consumes BIO */ + } + return self; +} + +static VALUE +config_initialize_copy(VALUE self, VALUE other) +{ + CONF *conf = GetConfig(self); VALUE str; BIO *bio; - long eline = -1; - OSSL_Check_Kind(obj, cConfig); - str = rb_funcall(obj, rb_intern("to_s"), 0); + str = rb_funcall(other, rb_intern("to_s"), 0); + rb_check_frozen(self); bio = ossl_obj2bio(&str); - conf = NCONF_new(NULL); - if(!conf){ - BIO_free(bio); - ossl_raise(eConfigError, NULL); + config_load_bio(conf, bio); /* Consumes BIO */ + return self; +} + +/* + * call-seq: + * config.get_value(section, key) -> string + * + * Gets the value of _key_ from the given _section_. + * + * Given the following configurating file being loaded: + * + * config = OpenSSL::Config.load('foo.cnf') + * #=> # + * puts config.to_s + * #=> [ default ] + * # foo=bar + * + * You can get a specific value from the config if you know the _section_ + * and _key_ like so: + * + * config.get_value('default','foo') + * #=> "bar" + */ +static VALUE +config_get_value(VALUE self, VALUE section, VALUE key) +{ + CONF *conf = GetConfig(self); + const char *str, *sectionp; + + StringValueCStr(section); + StringValueCStr(key); + /* For compatibility; NULL means "default". */ + sectionp = RSTRING_LEN(section) ? RSTRING_PTR(section) : NULL; + str = NCONF_get_string(conf, sectionp, RSTRING_PTR(key)); + if (!str) { + ossl_clear_error(); + return Qnil; + } + return rb_str_new_cstr(str); +} + +/* + * call-seq: + * config[section] -> hash + * + * Gets all key-value pairs in a specific _section_ from the current + * configuration. + * + * Given the following configurating file being loaded: + * + * config = OpenSSL::Config.load('foo.cnf') + * #=> # + * puts config.to_s + * #=> [ default ] + * # foo=bar + * + * You can get a hash of the specific section like so: + * + * config['default'] + * #=> {"foo"=>"bar"} + * + */ +static VALUE +config_get_section(VALUE self, VALUE section) +{ + CONF *conf = GetConfig(self); + STACK_OF(CONF_VALUE) *sk; + int i, entries; + VALUE hash; + + hash = rb_hash_new(); + StringValueCStr(section); + if (!(sk = NCONF_get_section(conf, RSTRING_PTR(section)))) { + ossl_clear_error(); + return hash; } - if(!NCONF_load_bio(conf, bio, &eline)){ - BIO_free(bio); - NCONF_free(conf); - if (eline <= 0) - ossl_raise(eConfigError, "wrong config format"); - else - ossl_raise(eConfigError, "error in line %d", eline); + entries = sk_CONF_VALUE_num(sk); + for (i = 0; i < entries; i++) { + CONF_VALUE *entry = sk_CONF_VALUE_value(sk, i); + rb_hash_aset(hash, rb_str_new_cstr(entry->name), + rb_str_new_cstr(entry->value)); } - BIO_free(bio); + return hash; +} - return conf; +static void +get_conf_section_doall_arg(CONF_VALUE *cv, VALUE *aryp) +{ + if (cv->name) + return; + rb_ary_push(*aryp, rb_str_new_cstr(cv->section)); } -/* Document-const: DEFAULT_CONFIG_FILE +/* IMPLEMENT_LHASH_DOALL_ARG_CONST() requires >= OpenSSL 1.1.0 */ +static IMPLEMENT_LHASH_DOALL_ARG_FN(get_conf_section, CONF_VALUE, VALUE) + +/* + * call-seq: + * config.sections -> array of string * - * The default system configuration file for openssl + * Get the names of all sections in the current configuration. */ +static VALUE +config_get_sections(VALUE self) +{ + CONF *conf = GetConfig(self); + VALUE ary; + + ary = rb_ary_new(); + lh_doall_arg((_LHASH *)conf->data, LHASH_DOALL_ARG_FN(get_conf_section), + &ary); + return ary; +} + +static void +dump_conf_value_doall_arg(CONF_VALUE *cv, VALUE *strp) +{ + VALUE str = *strp; + STACK_OF(CONF_VALUE) *sk; + int i, num; + + if (cv->name) + return; + sk = (STACK_OF(CONF_VALUE) *)cv->value; + num = sk_CONF_VALUE_num(sk); + rb_str_cat_cstr(str, "[ "); + rb_str_cat_cstr(str, cv->section); + rb_str_cat_cstr(str, " ]\n"); + for (i = 0; i < num; i++){ + CONF_VALUE *v = sk_CONF_VALUE_value(sk, i); + rb_str_cat_cstr(str, v->name ? v->name : "None"); + rb_str_cat_cstr(str, "="); + rb_str_cat_cstr(str, v->value ? v->value : "None"); + rb_str_cat_cstr(str, "\n"); + } + rb_str_cat_cstr(str, "\n"); +} + +static IMPLEMENT_LHASH_DOALL_ARG_FN(dump_conf_value, CONF_VALUE, VALUE) /* - * INIT + * call-seq: + * config.to_s -> string + * + * + * Gets the parsable form of the current configuration. + * + * Given the following configuration being created: + * + * config = OpenSSL::Config.new + * #=> # + * config['default'] = {"foo"=>"bar","baz"=>"buz"} + * #=> {"foo"=>"bar", "baz"=>"buz"} + * puts config.to_s + * #=> [ default ] + * # foo=bar + * # baz=buz + * + * You can parse get the serialized configuration using #to_s and then parse + * it later: + * + * serialized_config = config.to_s + * # much later... + * new_config = OpenSSL::Config.parse(serialized_config) + * #=> # + * puts new_config + * #=> [ default ] + * foo=bar + * baz=buz */ +static VALUE +config_to_s(VALUE self) +{ + CONF *conf = GetConfig(self); + VALUE str; + + str = rb_str_new(NULL, 0); + lh_doall_arg((_LHASH *)conf->data, LHASH_DOALL_ARG_FN(dump_conf_value), + &str); + return str; +} + +static void +each_conf_value_doall_arg(CONF_VALUE *cv, void *unused) +{ + STACK_OF(CONF_VALUE) *sk; + VALUE section; + int i, num; + + if (cv->name) + return; + sk = (STACK_OF(CONF_VALUE) *)cv->value; + num = sk_CONF_VALUE_num(sk); + section = rb_str_new_cstr(cv->section); + for (i = 0; i < num; i++){ + CONF_VALUE *v = sk_CONF_VALUE_value(sk, i); + VALUE name = v->name ? rb_str_new_cstr(v->name) : Qnil; + VALUE value = v->value ? rb_str_new_cstr(v->value) : Qnil; + rb_yield(rb_ary_new3(3, section, name, value)); + } +} + +static IMPLEMENT_LHASH_DOALL_ARG_FN(each_conf_value, CONF_VALUE, void) + +/* + * call-seq: + * config.each { |section, key, value| } + * + * Retrieves the section and its pairs for the current configuration. + * + * config.each do |section, key, value| + * # ... + * end + */ +static VALUE +config_each(VALUE self) +{ + CONF *conf = GetConfig(self); + + RETURN_ENUMERATOR(self, 0, 0); + + lh_doall_arg((_LHASH *)conf->data, LHASH_DOALL_ARG_FN(each_conf_value), + NULL); + return self; +} + +/* + * call-seq: + * config.inspect -> string + * + * String representation of this configuration object, including the class + * name and its sections. + */ +static VALUE +config_inspect(VALUE self) +{ + VALUE str, ary = config_get_sections(self); + const char *cname = rb_class2name(rb_obj_class(self)); + + str = rb_str_new_cstr("#<"); + rb_str_cat_cstr(str, cname); + rb_str_cat_cstr(str, " sections="); + rb_str_append(str, rb_inspect(ary)); + rb_str_cat_cstr(str, ">"); + + return str; +} + void Init_ossl_config(void) { - char *default_config_file; + char *path; + VALUE path_str; #if 0 mOSSL = rb_define_module("OpenSSL"); eOSSLError = rb_define_class_under(mOSSL, "OpenSSLError", rb_eStandardError); #endif - eConfigError = rb_define_class_under(mOSSL, "ConfigError", eOSSLError); + /* Document-class: OpenSSL::Config + * + * Configuration for the openssl library. + * + * Many system's installation of openssl library will depend on your system + * configuration. See the value of OpenSSL::Config::DEFAULT_CONFIG_FILE for + * the location of the file for your host. + * + * See also http://www.openssl.org/docs/apps/config.html + */ cConfig = rb_define_class_under(mOSSL, "Config", rb_cObject); - default_config_file = CONF_get1_default_config_file(); - rb_define_const(cConfig, "DEFAULT_CONFIG_FILE", - rb_str_new2(default_config_file)); - OPENSSL_free(default_config_file); - /* methods are defined by openssl/config.rb */ + /* Document-class: OpenSSL::ConfigError + * + * General error for openssl library configuration files. Including formatting, + * parsing errors, etc. + */ + eConfigError = rb_define_class_under(mOSSL, "ConfigError", eOSSLError); + + rb_include_module(cConfig, rb_mEnumerable); + rb_define_singleton_method(cConfig, "parse", config_s_parse, 1); + rb_define_singleton_method(cConfig, "parse_config", config_s_parse_config, 1); + rb_define_alias(CLASS_OF(cConfig), "load", "new"); + rb_define_alloc_func(cConfig, config_s_alloc); + rb_define_method(cConfig, "initialize", config_initialize, -1); + rb_define_method(cConfig, "initialize_copy", config_initialize_copy, 1); + rb_define_method(cConfig, "get_value", config_get_value, 2); + rb_define_method(cConfig, "[]", config_get_section, 1); + rb_define_method(cConfig, "sections", config_get_sections, 0); + rb_define_method(cConfig, "to_s", config_to_s, 0); + rb_define_method(cConfig, "each", config_each, 0); + rb_define_method(cConfig, "inspect", config_inspect, 0); + + /* Document-const: DEFAULT_CONFIG_FILE + * + * The default system configuration file for OpenSSL. + */ + path = CONF_get1_default_config_file(); + path_str = ossl_buf2str(path, rb_long2int(strlen(path))); + rb_define_const(cConfig, "DEFAULT_CONFIG_FILE", path_str); } diff --git a/ruby/ext/openssl/ossl_config.h b/ruby/ext/openssl/ossl_config.h index 627d297ba..4e604f1ae 100644 --- a/ruby/ext/openssl/ossl_config.h +++ b/ruby/ext/openssl/ossl_config.h @@ -7,13 +7,10 @@ * This program is licensed under the same licence as Ruby. * (See the file 'LICENCE'.) */ -#if !defined(_OSSL_CONFIG_H_) -#define _OSSL_CONFIG_H_ +#ifndef OSSL_CONFIG_H +#define OSSL_CONFIG_H -extern VALUE cConfig; -extern VALUE eConfigError; - -CONF* DupConfigPtr(VALUE obj); +CONF *GetConfig(VALUE obj); void Init_ossl_config(void); -#endif /* _OSSL_CONFIG_H_ */ +#endif /* OSSL_CONFIG_H */ diff --git a/ruby/ext/openssl/ossl_digest.c b/ruby/ext/openssl/ossl_digest.c index 112ce3364..fc326ec14 100644 --- a/ruby/ext/openssl/ossl_digest.c +++ b/ruby/ext/openssl/ossl_digest.c @@ -63,7 +63,7 @@ ossl_evp_get_digestbyname(VALUE obj) GetDigest(obj, ctx); - md = EVP_MD_CTX_md(ctx); + md = EVP_MD_CTX_get0_md(ctx); } return md; @@ -176,7 +176,7 @@ ossl_digest_reset(VALUE self) EVP_MD_CTX *ctx; GetDigest(self, ctx); - if (EVP_DigestInit_ex(ctx, EVP_MD_CTX_md(ctx), NULL) != 1) { + if (EVP_DigestInit_ex(ctx, EVP_MD_CTX_get0_md(ctx), NULL) != 1) { ossl_raise(eDigestError, "Digest initialization failed."); } @@ -192,7 +192,7 @@ ossl_digest_reset(VALUE self) * be passed individually to the Digest instance. * * === Example - * digest = OpenSSL::Digest::SHA256.new + * digest = OpenSSL::Digest.new('SHA256') * digest.update('First input') * digest << 'Second input' # equivalent to digest.update('Second input') * result = digest.digest @@ -248,7 +248,7 @@ ossl_digest_finish(int argc, VALUE *argv, VALUE self) * Returns the sn of this Digest algorithm. * * === Example - * digest = OpenSSL::Digest::SHA512.new + * digest = OpenSSL::Digest.new('SHA512') * puts digest.name # => SHA512 * */ @@ -259,7 +259,7 @@ ossl_digest_name(VALUE self) GetDigest(self, ctx); - return rb_str_new2(EVP_MD_name(EVP_MD_CTX_md(ctx))); + return rb_str_new_cstr(EVP_MD_name(EVP_MD_CTX_get0_md(ctx))); } /* @@ -270,7 +270,7 @@ ossl_digest_name(VALUE self) * final message digest result. * * === Example - * digest = OpenSSL::Digest::SHA1.new + * digest = OpenSSL::Digest.new('SHA1') * puts digest.digest_length # => 20 * */ @@ -294,7 +294,7 @@ ossl_digest_size(VALUE self) * consecutively. * * === Example - * digest = OpenSSL::Digest::SHA1.new + * digest = OpenSSL::Digest.new('SHA1') * puts digest.block_length # => 64 */ static VALUE @@ -313,8 +313,6 @@ ossl_digest_block_length(VALUE self) void Init_ossl_digest(void) { - rb_require("digest"); - #if 0 mOSSL = rb_define_module("OpenSSL"); eOSSLError = rb_define_class_under(mOSSL, "OpenSSLError", rb_eStandardError); @@ -348,54 +346,19 @@ Init_ossl_digest(void) * the integrity of a signed document, it suffices to re-compute the hash * and verify that it is equal to that in the signature. * - * Among the supported message digest algorithms are: - * * SHA, SHA1, SHA224, SHA256, SHA384 and SHA512 - * * MD2, MD4, MDC2 and MD5 - * * RIPEMD160 - * * DSS, DSS1 (Pseudo algorithms to be used for DSA signatures. DSS is - * equal to SHA and DSS1 is equal to SHA1) + * You can get a list of all digest algorithms supported on your system by + * running this command in your terminal: * - * For each of these algorithms, there is a sub-class of Digest that - * can be instantiated as simply as e.g. + * openssl list -digest-algorithms * - * digest = OpenSSL::Digest::SHA1.new + * Among the OpenSSL 1.1.1 supported message digest algorithms are: + * * SHA224, SHA256, SHA384, SHA512, SHA512-224 and SHA512-256 + * * SHA3-224, SHA3-256, SHA3-384 and SHA3-512 + * * BLAKE2s256 and BLAKE2b512 * - * === Mapping between Digest class and sn/ln + * Each of these algorithms can be instantiated using the name: * - * The sn (short names) and ln (long names) are defined in - * and . They are textual - * representations of ASN.1 OBJECT IDENTIFIERs. Each supported digest - * algorithm has an OBJECT IDENTIFIER associated to it and those again - * have short/long names assigned to them. - * E.g. the OBJECT IDENTIFIER for SHA-1 is 1.3.14.3.2.26 and its - * sn is "SHA1" and its ln is "sha1". - * ==== MD2 - * * sn: MD2 - * * ln: md2 - * ==== MD4 - * * sn: MD4 - * * ln: md4 - * ==== MD5 - * * sn: MD5 - * * ln: md5 - * ==== SHA - * * sn: SHA - * * ln: SHA - * ==== SHA-1 - * * sn: SHA1 - * * ln: sha1 - * ==== SHA-224 - * * sn: SHA224 - * * ln: sha224 - * ==== SHA-256 - * * sn: SHA256 - * * ln: sha256 - * ==== SHA-384 - * * sn: SHA384 - * * ln: sha384 - * ==== SHA-512 - * * sn: SHA512 - * * ln: sha512 + * digest = OpenSSL::Digest.new('SHA256') * * "Breaking" a message digest algorithm means defying its one-way * function characteristics, i.e. producing a collision or finding a way @@ -407,16 +370,16 @@ Init_ossl_digest(void) * * === Hashing a file * - * data = File.read('document') - * sha256 = OpenSSL::Digest::SHA256.new + * data = File.binread('document') + * sha256 = OpenSSL::Digest.new('SHA256') * digest = sha256.digest(data) * * === Hashing several pieces of data at once * - * data1 = File.read('file1') - * data2 = File.read('file2') - * data3 = File.read('file3') - * sha256 = OpenSSL::Digest::SHA256.new + * data1 = File.binread('file1') + * data2 = File.binread('file2') + * data3 = File.binread('file3') + * sha256 = OpenSSL::Digest.new('SHA256') * sha256 << data1 * sha256 << data2 * sha256 << data3 @@ -424,15 +387,21 @@ Init_ossl_digest(void) * * === Reuse a Digest instance * - * data1 = File.read('file1') - * sha256 = OpenSSL::Digest::SHA256.new + * data1 = File.binread('file1') + * sha256 = OpenSSL::Digest.new('SHA256') * digest1 = sha256.digest(data1) * - * data2 = File.read('file2') + * data2 = File.binread('file2') * sha256.reset * digest2 = sha256.digest(data2) * */ + + /* + * Digest::Class is defined by the digest library. rb_require() cannot be + * used here because it bypasses RubyGems. + */ + rb_funcall(Qnil, rb_intern_const("require"), 1, rb_str_new_cstr("digest")); cDigest = rb_define_class_under(mOSSL, "Digest", rb_path2class("Digest::Class")); /* Document-class: OpenSSL::Digest::DigestError * diff --git a/ruby/ext/openssl/ossl_engine.c b/ruby/ext/openssl/ossl_engine.c index 5ca0d4ca3..1abde7f76 100644 --- a/ruby/ext/openssl/ossl_engine.c +++ b/ruby/ext/openssl/ossl_engine.c @@ -9,7 +9,8 @@ */ #include "ossl.h" -#if !defined(OPENSSL_NO_ENGINE) +#ifdef OSSL_USE_ENGINE +# include #define NewEngine(klass) \ TypedData_Wrap_Struct((klass), &ossl_engine_type, 0) @@ -93,9 +94,6 @@ static const rb_data_type_t ossl_engine_type = { static VALUE ossl_engine_s_load(int argc, VALUE *argv, VALUE klass) { -#if !defined(HAVE_ENGINE_LOAD_BUILTIN_ENGINES) - return Qnil; -#else VALUE name; rb_scan_args(argc, argv, "01", &name); @@ -104,60 +102,53 @@ ossl_engine_s_load(int argc, VALUE *argv, VALUE klass) return Qtrue; } StringValueCStr(name); -#ifndef OPENSSL_NO_STATIC_ENGINE -#if HAVE_ENGINE_LOAD_DYNAMIC +#ifdef HAVE_ENGINE_LOAD_DYNAMIC OSSL_ENGINE_LOAD_IF_MATCH(dynamic, DYNAMIC); #endif -#if HAVE_ENGINE_LOAD_4758CCA +#ifndef OPENSSL_NO_STATIC_ENGINE +#ifdef HAVE_ENGINE_LOAD_4758CCA OSSL_ENGINE_LOAD_IF_MATCH(4758cca, 4758CCA); #endif -#if HAVE_ENGINE_LOAD_AEP +#ifdef HAVE_ENGINE_LOAD_AEP OSSL_ENGINE_LOAD_IF_MATCH(aep, AEP); #endif -#if HAVE_ENGINE_LOAD_ATALLA +#ifdef HAVE_ENGINE_LOAD_ATALLA OSSL_ENGINE_LOAD_IF_MATCH(atalla, ATALLA); #endif -#if HAVE_ENGINE_LOAD_CHIL +#ifdef HAVE_ENGINE_LOAD_CHIL OSSL_ENGINE_LOAD_IF_MATCH(chil, CHIL); #endif -#if HAVE_ENGINE_LOAD_CSWIFT +#ifdef HAVE_ENGINE_LOAD_CSWIFT OSSL_ENGINE_LOAD_IF_MATCH(cswift, CSWIFT); #endif -#if HAVE_ENGINE_LOAD_NURON +#ifdef HAVE_ENGINE_LOAD_NURON OSSL_ENGINE_LOAD_IF_MATCH(nuron, NURON); #endif -#if HAVE_ENGINE_LOAD_SUREWARE +#ifdef HAVE_ENGINE_LOAD_SUREWARE OSSL_ENGINE_LOAD_IF_MATCH(sureware, SUREWARE); #endif -#if HAVE_ENGINE_LOAD_UBSEC +#ifdef HAVE_ENGINE_LOAD_UBSEC OSSL_ENGINE_LOAD_IF_MATCH(ubsec, UBSEC); #endif -#if HAVE_ENGINE_LOAD_PADLOCK +#ifdef HAVE_ENGINE_LOAD_PADLOCK OSSL_ENGINE_LOAD_IF_MATCH(padlock, PADLOCK); #endif -#if HAVE_ENGINE_LOAD_CAPI +#ifdef HAVE_ENGINE_LOAD_CAPI OSSL_ENGINE_LOAD_IF_MATCH(capi, CAPI); #endif -#if HAVE_ENGINE_LOAD_GMP +#ifdef HAVE_ENGINE_LOAD_GMP OSSL_ENGINE_LOAD_IF_MATCH(gmp, GMP); #endif -#if HAVE_ENGINE_LOAD_GOST +#ifdef HAVE_ENGINE_LOAD_GOST OSSL_ENGINE_LOAD_IF_MATCH(gost, GOST); #endif -#if HAVE_ENGINE_LOAD_CRYPTODEV - OSSL_ENGINE_LOAD_IF_MATCH(cryptodev, CRYPTODEV); -#endif -#if HAVE_ENGINE_LOAD_AESNI - OSSL_ENGINE_LOAD_IF_MATCH(aesni, AESNI); #endif -#endif -#ifdef HAVE_ENGINE_LOAD_OPENBSD_DEV_CRYPTO - OSSL_ENGINE_LOAD_IF_MATCH(openbsd_dev_crypto, OPENBSD_DEV_CRYPTO); +#ifdef HAVE_ENGINE_LOAD_CRYPTODEV + OSSL_ENGINE_LOAD_IF_MATCH(cryptodev, CRYPTODEV); #endif OSSL_ENGINE_LOAD_IF_MATCH(openssl, OPENSSL); rb_warning("no such builtin loader for `%"PRIsVALUE"'", name); return Qnil; -#endif /* HAVE_ENGINE_LOAD_BUILTIN_ENGINES */ } /* diff --git a/ruby/ext/openssl/ossl_hmac.c b/ruby/ext/openssl/ossl_hmac.c index 564dcab52..bfe3a74b1 100644 --- a/ruby/ext/openssl/ossl_hmac.c +++ b/ruby/ext/openssl/ossl_hmac.c @@ -7,14 +7,12 @@ * This program is licensed under the same licence as Ruby. * (See the file 'LICENCE'.) */ -#if !defined(OPENSSL_NO_HMAC) - #include "ossl.h" #define NewHMAC(klass) \ TypedData_Wrap_Struct((klass), &ossl_hmac_type, 0) #define GetHMAC(obj, ctx) do { \ - TypedData_Get_Struct((obj), HMAC_CTX, &ossl_hmac_type, (ctx)); \ + TypedData_Get_Struct((obj), EVP_MD_CTX, &ossl_hmac_type, (ctx)); \ if (!(ctx)) { \ ossl_raise(rb_eRuntimeError, "HMAC wasn't initialized"); \ } \ @@ -36,7 +34,7 @@ VALUE eHMACError; static void ossl_hmac_free(void *ctx) { - HMAC_CTX_free(ctx); + EVP_MD_CTX_free(ctx); } static const rb_data_type_t ossl_hmac_type = { @@ -51,12 +49,12 @@ static VALUE ossl_hmac_alloc(VALUE klass) { VALUE obj; - HMAC_CTX *ctx; + EVP_MD_CTX *ctx; obj = NewHMAC(klass); - ctx = HMAC_CTX_new(); + ctx = EVP_MD_CTX_new(); if (!ctx) - ossl_raise(eHMACError, NULL); + ossl_raise(eHMACError, "EVP_MD_CTX"); RTYPEDDATA_DATA(obj) = ctx; return obj; @@ -76,37 +74,41 @@ ossl_hmac_alloc(VALUE klass) * === Example * * key = 'key' - * digest = OpenSSL::Digest.new('sha1') - * instance = OpenSSL::HMAC.new(key, digest) + * instance = OpenSSL::HMAC.new(key, 'SHA1') * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f * instance.class * #=> OpenSSL::HMAC * * === A note about comparisons * - * Two instances won't be equal when they're compared, even if they have the - * same value. Use #to_s or #hexdigest to return the authentication code that - * the instance represents. For example: + * Two instances can be securely compared with #== in constant time: * - * other_instance = OpenSSL::HMAC.new('key', OpenSSL::Digest.new('sha1')) - * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f - * instance - * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f - * instance == other_instance - * #=> false - * instance.to_s == other_instance.to_s - * #=> true + * other_instance = OpenSSL::HMAC.new('key', 'SHA1') + * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f + * instance == other_instance + * #=> true * */ static VALUE ossl_hmac_initialize(VALUE self, VALUE key, VALUE digest) { - HMAC_CTX *ctx; + EVP_MD_CTX *ctx; + EVP_PKEY *pkey; - StringValue(key); GetHMAC(self, ctx); - HMAC_Init_ex(ctx, RSTRING_PTR(key), RSTRING_LENINT(key), - ossl_evp_get_digestbyname(digest), NULL); + StringValue(key); + pkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, + (unsigned char *)RSTRING_PTR(key), + RSTRING_LENINT(key)); + if (!pkey) + ossl_raise(eHMACError, "EVP_PKEY_new_mac_key"); + if (EVP_DigestSignInit(ctx, NULL, ossl_evp_get_digestbyname(digest), + NULL, pkey) != 1) { + EVP_PKEY_free(pkey); + ossl_raise(eHMACError, "EVP_DigestSignInit"); + } + /* Decrement reference counter; EVP_MD_CTX still keeps it */ + EVP_PKEY_free(pkey); return self; } @@ -114,16 +116,15 @@ ossl_hmac_initialize(VALUE self, VALUE key, VALUE digest) static VALUE ossl_hmac_copy(VALUE self, VALUE other) { - HMAC_CTX *ctx1, *ctx2; + EVP_MD_CTX *ctx1, *ctx2; rb_check_frozen(self); if (self == other) return self; GetHMAC(self, ctx1); GetHMAC(other, ctx2); - - if (!HMAC_CTX_copy(ctx1, ctx2)) - ossl_raise(eHMACError, "HMAC_CTX_copy"); + if (EVP_MD_CTX_copy(ctx1, ctx2) != 1) + ossl_raise(eHMACError, "EVP_MD_CTX_copy"); return self; } @@ -148,33 +149,16 @@ ossl_hmac_copy(VALUE self, VALUE other) static VALUE ossl_hmac_update(VALUE self, VALUE data) { - HMAC_CTX *ctx; + EVP_MD_CTX *ctx; StringValue(data); GetHMAC(self, ctx); - HMAC_Update(ctx, (unsigned char *)RSTRING_PTR(data), RSTRING_LEN(data)); + if (EVP_DigestSignUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) != 1) + ossl_raise(eHMACError, "EVP_DigestSignUpdate"); return self; } -static void -hmac_final(HMAC_CTX *ctx, unsigned char *buf, unsigned int *buf_len) -{ - HMAC_CTX *final; - - final = HMAC_CTX_new(); - if (!final) - ossl_raise(eHMACError, "HMAC_CTX_new"); - - if (!HMAC_CTX_copy(final, ctx)) { - HMAC_CTX_free(final); - ossl_raise(eHMACError, "HMAC_CTX_copy"); - } - - HMAC_Final(final, buf, buf_len); - HMAC_CTX_free(final); -} - /* * call-seq: * hmac.digest -> string @@ -182,7 +166,7 @@ hmac_final(HMAC_CTX *ctx, unsigned char *buf, unsigned int *buf_len) * Returns the authentication code an instance represents as a binary string. * * === Example - * instance = OpenSSL::HMAC.new('key', OpenSSL::Digest.new('sha1')) + * instance = OpenSSL::HMAC.new('key', 'SHA1') * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f * instance.digest * #=> "\xF4+\xB0\xEE\xB0\x18\xEB\xBDE\x97\xAEr\x13q\x1E\xC6\a`\x84?" @@ -190,15 +174,16 @@ hmac_final(HMAC_CTX *ctx, unsigned char *buf, unsigned int *buf_len) static VALUE ossl_hmac_digest(VALUE self) { - HMAC_CTX *ctx; - unsigned int buf_len; + EVP_MD_CTX *ctx; + size_t buf_len = EVP_MAX_MD_SIZE; VALUE ret; GetHMAC(self, ctx); ret = rb_str_new(NULL, EVP_MAX_MD_SIZE); - hmac_final(ctx, (unsigned char *)RSTRING_PTR(ret), &buf_len); - assert(buf_len <= EVP_MAX_MD_SIZE); - rb_str_set_len(ret, buf_len); + if (EVP_DigestSignFinal(ctx, (unsigned char *)RSTRING_PTR(ret), + &buf_len) != 1) + ossl_raise(eHMACError, "EVP_DigestSignFinal"); + rb_str_set_len(ret, (long)buf_len); return ret; } @@ -213,13 +198,14 @@ ossl_hmac_digest(VALUE self) static VALUE ossl_hmac_hexdigest(VALUE self) { - HMAC_CTX *ctx; + EVP_MD_CTX *ctx; unsigned char buf[EVP_MAX_MD_SIZE]; - unsigned int buf_len; + size_t buf_len = EVP_MAX_MD_SIZE; VALUE ret; GetHMAC(self, ctx); - hmac_final(ctx, buf, &buf_len); + if (EVP_DigestSignFinal(ctx, buf, &buf_len) != 1) + ossl_raise(eHMACError, "EVP_DigestSignFinal"); ret = rb_str_new(NULL, buf_len * 2); ossl_bin2hex(buf, RSTRING_PTR(ret), buf_len); @@ -236,7 +222,7 @@ ossl_hmac_hexdigest(VALUE self) * === Example * * data = "The quick brown fox jumps over the lazy dog" - * instance = OpenSSL::HMAC.new('key', OpenSSL::Digest.new('sha1')) + * instance = OpenSSL::HMAC.new('key', 'SHA1') * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f * * instance.update(data) @@ -248,84 +234,17 @@ ossl_hmac_hexdigest(VALUE self) static VALUE ossl_hmac_reset(VALUE self) { - HMAC_CTX *ctx; + EVP_MD_CTX *ctx; + EVP_PKEY *pkey; GetHMAC(self, ctx); - HMAC_Init_ex(ctx, NULL, 0, NULL, NULL); + pkey = EVP_PKEY_CTX_get0_pkey(EVP_MD_CTX_get_pkey_ctx(ctx)); + if (EVP_DigestSignInit(ctx, NULL, EVP_MD_CTX_get0_md(ctx), NULL, pkey) != 1) + ossl_raise(eHMACError, "EVP_DigestSignInit"); return self; } -/* - * call-seq: - * HMAC.digest(digest, key, data) -> aString - * - * Returns the authentication code as a binary string. The _digest_ parameter - * specifies the digest algorithm to use. This may be a String representing - * the algorithm name or an instance of OpenSSL::Digest. - * - * === Example - * - * key = 'key' - * data = 'The quick brown fox jumps over the lazy dog' - * - * hmac = OpenSSL::HMAC.digest('sha1', key, data) - * #=> "\xDE|\x9B\x85\xB8\xB7\x8A\xA6\xBC\x8Az6\xF7\n\x90p\x1C\x9D\xB4\xD9" - * - */ -static VALUE -ossl_hmac_s_digest(VALUE klass, VALUE digest, VALUE key, VALUE data) -{ - unsigned char *buf; - unsigned int buf_len; - - StringValue(key); - StringValue(data); - buf = HMAC(ossl_evp_get_digestbyname(digest), RSTRING_PTR(key), - RSTRING_LENINT(key), (unsigned char *)RSTRING_PTR(data), - RSTRING_LEN(data), NULL, &buf_len); - - return rb_str_new((const char *)buf, buf_len); -} - -/* - * call-seq: - * HMAC.hexdigest(digest, key, data) -> aString - * - * Returns the authentication code as a hex-encoded string. The _digest_ - * parameter specifies the digest algorithm to use. This may be a String - * representing the algorithm name or an instance of OpenSSL::Digest. - * - * === Example - * - * key = 'key' - * data = 'The quick brown fox jumps over the lazy dog' - * - * hmac = OpenSSL::HMAC.hexdigest('sha1', key, data) - * #=> "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9" - * - */ -static VALUE -ossl_hmac_s_hexdigest(VALUE klass, VALUE digest, VALUE key, VALUE data) -{ - unsigned char buf[EVP_MAX_MD_SIZE]; - unsigned int buf_len; - VALUE ret; - - StringValue(key); - StringValue(data); - - if (!HMAC(ossl_evp_get_digestbyname(digest), RSTRING_PTR(key), - RSTRING_LENINT(key), (unsigned char *)RSTRING_PTR(data), - RSTRING_LEN(data), buf, &buf_len)) - ossl_raise(eHMACError, "HMAC"); - - ret = rb_str_new(NULL, buf_len * 2); - ossl_bin2hex(buf, RSTRING_PTR(ret), buf_len); - - return ret; -} - /* * INIT */ @@ -356,11 +275,10 @@ Init_ossl_hmac(void) * * === HMAC-SHA256 using incremental interface * - * data1 = File.read("file1") - * data2 = File.read("file2") + * data1 = File.binread("file1") + * data2 = File.binread("file2") * key = "key" - * digest = OpenSSL::Digest::SHA256.new - * hmac = OpenSSL::HMAC.new(key, digest) + * hmac = OpenSSL::HMAC.new(key, 'SHA256') * hmac << data1 * hmac << data2 * mac = hmac.digest @@ -370,8 +288,6 @@ Init_ossl_hmac(void) cHMAC = rb_define_class_under(mOSSL, "HMAC", rb_cObject); rb_define_alloc_func(cHMAC, ossl_hmac_alloc); - rb_define_singleton_method(cHMAC, "digest", ossl_hmac_s_digest, 3); - rb_define_singleton_method(cHMAC, "hexdigest", ossl_hmac_s_hexdigest, 3); rb_define_method(cHMAC, "initialize", ossl_hmac_initialize, 2); rb_define_method(cHMAC, "initialize_copy", ossl_hmac_copy, 1); @@ -384,12 +300,3 @@ Init_ossl_hmac(void) rb_define_alias(cHMAC, "inspect", "hexdigest"); rb_define_alias(cHMAC, "to_s", "hexdigest"); } - -#else /* NO_HMAC */ -# warning >>> OpenSSL is compiled without HMAC support <<< -void -Init_ossl_hmac(void) -{ - rb_warning("HMAC is not available: OpenSSL is compiled without HMAC."); -} -#endif /* NO_HMAC */ diff --git a/ruby/ext/openssl/ossl_kdf.c b/ruby/ext/openssl/ossl_kdf.c index ee124718b..7fa38b865 100644 --- a/ruby/ext/openssl/ossl_kdf.c +++ b/ruby/ext/openssl/ossl_kdf.c @@ -163,6 +163,14 @@ kdf_scrypt(int argc, VALUE *argv, VALUE self) * HashLen is the length of the hash function output in octets. * _hash_:: * The hash function. + * + * === Example + * # The values from https://datatracker.ietf.org/doc/html/rfc5869#appendix-A.1 + * ikm = ["0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"].pack("H*") + * salt = ["000102030405060708090a0b0c"].pack("H*") + * info = ["f0f1f2f3f4f5f6f7f8f9"].pack("H*") + * p OpenSSL::KDF.hkdf(ikm, salt: salt, info: info, length: 42, hash: "SHA256").unpack1("H*") + * # => "3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865" */ static VALUE kdf_hkdf(int argc, VALUE *argv, VALUE self) @@ -272,7 +280,7 @@ Init_ossl_kdf(void) * # store this with the generated value * salt = OpenSSL::Random.random_bytes(16) * iter = 20_000 - * hash = OpenSSL::Digest::SHA256.new + * hash = OpenSSL::Digest.new('SHA256') * len = hash.digest_length * # the final value to be stored * value = OpenSSL::KDF.pbkdf2_hmac(pass, salt: salt, iterations: iter, @@ -284,24 +292,8 @@ Init_ossl_kdf(void) * Typically, "==" short-circuits on evaluation, and is therefore * vulnerable to timing attacks. The proper way is to use a method that * always takes the same amount of time when comparing two values, thus - * not leaking any information to potential attackers. To compare two - * values, the following could be used: - * - * def eql_time_cmp(a, b) - * unless a.length == b.length - * return false - * end - * cmp = b.bytes - * result = 0 - * a.bytes.each_with_index {|c,i| - * result |= c ^ cmp[i] - * } - * result == 0 - * end - * - * Please note that the premature return in case of differing lengths - * typically does not leak valuable information - when using PBKDF2, the - * length of the values to be compared is of fixed size. + * not leaking any information to potential attackers. To do this, use + * +OpenSSL.fixed_length_secure_compare+. */ mKDF = rb_define_module_under(mOSSL, "KDF"); /* diff --git a/ruby/ext/openssl/ossl_ns_spki.c b/ruby/ext/openssl/ossl_ns_spki.c index 6f61e61bf..9b1147367 100644 --- a/ruby/ext/openssl/ossl_ns_spki.c +++ b/ruby/ext/openssl/ossl_ns_spki.c @@ -350,7 +350,7 @@ ossl_spki_verify(VALUE self, VALUE key) * spki = OpenSSL::Netscape::SPKI.new * spki.challenge = "RandomChallenge" * spki.public_key = key.public_key - * spki.sign(key, OpenSSL::Digest::SHA256.new) + * spki.sign(key, OpenSSL::Digest.new('SHA256')) * #send a request containing this to a server generating a certificate * === Verifying an SPKI request * request = #... diff --git a/ruby/ext/openssl/ossl_ocsp.c b/ruby/ext/openssl/ossl_ocsp.c index c0237791d..1e87484af 100644 --- a/ruby/ext/openssl/ossl_ocsp.c +++ b/ruby/ext/openssl/ossl_ocsp.c @@ -157,7 +157,7 @@ ossl_ocspcertid_new(OCSP_CERTID *cid) } /* - * OCSP::Resquest + * OCSP::Request */ static VALUE ossl_ocspreq_alloc(VALUE klass) @@ -803,7 +803,7 @@ add_status_convert_time(VALUE obj) * revocation, and must be one of OpenSSL::OCSP::REVOKED_STATUS_* constants. * _revocation_time_ is the time when the certificate is revoked. * - * _this_update_ and _next_update_ indicate the time at which ths status is + * _this_update_ and _next_update_ indicate the time at which the status is * verified to be correct and the time at or before which newer information * will be available, respectively. _next_update_ is optional. * @@ -1069,55 +1069,7 @@ ossl_ocspbres_verify(int argc, VALUE *argv, VALUE self) x509st = GetX509StorePtr(store); flg = NIL_P(flags) ? 0 : NUM2INT(flags); x509s = ossl_x509_ary2sk(certs); -#if (OPENSSL_VERSION_NUMBER < 0x1000202fL) || defined(LIBRESSL_VERSION_NUMBER) - /* - * OpenSSL had a bug that it doesn't use the certificates in x509s for - * verifying the chain. This can be a problem when the response is signed by - * a certificate issued by an intermediate CA. - * - * root_ca - * | - * intermediate_ca - * |-------------| - * end_entity ocsp_signer - * - * When the certificate hierarchy is like this, and the response contains - * only ocsp_signer certificate, the following code wrongly fails. - * - * store = OpenSSL::X509::Store.new; store.add_cert(root_ca) - * basic_response.verify([intermediate_ca], store) - * - * So add the certificates in x509s to the embedded certificates list first. - * - * This is fixed in OpenSSL 0.9.8zg, 1.0.0s, 1.0.1n, 1.0.2b. But it still - * exists in LibreSSL 2.1.10, 2.2.9, 2.3.6, 2.4.1. - */ - if (!(flg & (OCSP_NOCHAIN | OCSP_NOVERIFY)) && - sk_X509_num(x509s) && sk_X509_num(bs->certs)) { - int i; - - bs = ASN1_item_dup(ASN1_ITEM_rptr(OCSP_BASICRESP), bs); - if (!bs) { - sk_X509_pop_free(x509s, X509_free); - ossl_raise(eOCSPError, "ASN1_item_dup"); - } - - for (i = 0; i < sk_X509_num(x509s); i++) { - if (!OCSP_basic_add1_cert(bs, sk_X509_value(x509s, i))) { - sk_X509_pop_free(x509s, X509_free); - OCSP_BASICRESP_free(bs); - ossl_raise(eOCSPError, "OCSP_basic_add1_cert"); - } - } - result = OCSP_basic_verify(bs, x509s, x509st, flg); - OCSP_BASICRESP_free(bs); - } - else { - result = OCSP_basic_verify(bs, x509s, x509st, flg); - } -#else result = OCSP_basic_verify(bs, x509s, x509st, flg); -#endif sk_X509_pop_free(x509s, X509_free); if (result <= 0) ossl_clear_error(); @@ -1489,13 +1441,15 @@ ossl_ocspcid_initialize_copy(VALUE self, VALUE other) * call-seq: * OpenSSL::OCSP::CertificateId.new(subject, issuer, digest = nil) -> certificate_id * OpenSSL::OCSP::CertificateId.new(der_string) -> certificate_id + * OpenSSL::OCSP::CertificateId.new(obj) -> certificate_id * * Creates a new OpenSSL::OCSP::CertificateId for the given _subject_ and * _issuer_ X509 certificates. The _digest_ is a digest algorithm that is used * to compute the hash values. This defaults to SHA-1. * * If only one argument is given, decodes it as DER representation of a - * certificate ID. + * certificate ID or generates certificate ID from the object that responds to + * the to_der method. */ static VALUE ossl_ocspcid_initialize(int argc, VALUE *argv, VALUE self) @@ -1717,7 +1671,7 @@ Init_ossl_ocsp(void) * subject certificate so the CA knows which certificate we are asking * about: * - * digest = OpenSSL::Digest::SHA1.new + * digest = OpenSSL::Digest.new('SHA1') * certificate_id = * OpenSSL::OCSP::CertificateId.new subject, issuer, digest * @@ -1734,18 +1688,11 @@ Init_ossl_ocsp(void) * To submit the request to the CA for verification we need to extract the * OCSP URI from the subject certificate: * - * authority_info_access = subject.extensions.find do |extension| - * extension.oid == 'authorityInfoAccess' - * end - * - * descriptions = authority_info_access.value.split "\n" - * ocsp = descriptions.find do |description| - * description.start_with? 'OCSP' - * end + * ocsp_uris = subject.ocsp_uris * * require 'uri' * - * ocsp_uri = URI ocsp[/URI:(.*)/, 1] + * ocsp_uri = URI ocsp_uris[0] * * To submit the request we'll POST the request to the OCSP URI (per RFC * 2560). Note that we only handle HTTP requests and don't handle any @@ -1792,7 +1739,7 @@ Init_ossl_ocsp(void) * single_response = basic_response.find_response(certificate_id) * * unless single_response - * raise 'basic_response does not have the status for the certificiate' + * raise 'basic_response does not have the status for the certificate' * end * * Then check the validity. A status issued in the future must be rejected. diff --git a/ruby/ext/openssl/ossl_ocsp.h b/ruby/ext/openssl/ossl_ocsp.h index 21e2c99a2..6d2aac865 100644 --- a/ruby/ext/openssl/ossl_ocsp.h +++ b/ruby/ext/openssl/ossl_ocsp.h @@ -13,9 +13,9 @@ #if !defined(OPENSSL_NO_OCSP) extern VALUE mOCSP; -extern VALUE cOPCSReq; -extern VALUE cOPCSRes; -extern VALUE cOPCSBasicRes; +extern VALUE cOCSPReq; +extern VALUE cOCSPRes; +extern VALUE cOCSPBasicRes; #endif void Init_ossl_ocsp(void); diff --git a/ruby/ext/openssl/ossl_pkcs12.c b/ruby/ext/openssl/ossl_pkcs12.c index 456633448..fb947df1d 100644 --- a/ruby/ext/openssl/ossl_pkcs12.c +++ b/ruby/ext/openssl/ossl_pkcs12.c @@ -149,6 +149,24 @@ ossl_pkcs12_s_create(int argc, VALUE *argv, VALUE self) return obj; } +static VALUE +ossl_pkey_new_i(VALUE arg) +{ + return ossl_pkey_new((EVP_PKEY *)arg); +} + +static VALUE +ossl_x509_new_i(VALUE arg) +{ + return ossl_x509_new((X509 *)arg); +} + +static VALUE +ossl_x509_sk2ary_i(VALUE arg) +{ + return ossl_x509_sk2ary((STACK_OF(X509) *)arg); +} + /* * call-seq: * PKCS12.new -> pkcs12 @@ -186,15 +204,15 @@ ossl_pkcs12_initialize(int argc, VALUE *argv, VALUE self) ossl_raise(ePKCS12Error, "PKCS12_parse"); ERR_pop_to_mark(); if (key) { - pkey = rb_protect((VALUE (*)(VALUE))ossl_pkey_new, (VALUE)key, &st); + pkey = rb_protect(ossl_pkey_new_i, (VALUE)key, &st); if (st) goto err; } if (x509) { - cert = rb_protect((VALUE (*)(VALUE))ossl_x509_new, (VALUE)x509, &st); + cert = rb_protect(ossl_x509_new_i, (VALUE)x509, &st); if (st) goto err; } if (x509s) { - ca = rb_protect((VALUE (*)(VALUE))ossl_x509_sk2ary, (VALUE)x509s, &st); + ca = rb_protect(ossl_x509_sk2ary_i, (VALUE)x509s, &st); if (st) goto err; } diff --git a/ruby/ext/openssl/ossl_pkcs7.c b/ruby/ext/openssl/ossl_pkcs7.c index 28010c81f..dbe534763 100644 --- a/ruby/ext/openssl/ossl_pkcs7.c +++ b/ruby/ext/openssl/ossl_pkcs7.c @@ -9,21 +9,6 @@ */ #include "ossl.h" -#define NewPKCS7(klass) \ - TypedData_Wrap_Struct((klass), &ossl_pkcs7_type, 0) -#define SetPKCS7(obj, pkcs7) do { \ - if (!(pkcs7)) { \ - ossl_raise(rb_eRuntimeError, "PKCS7 wasn't initialized."); \ - } \ - RTYPEDDATA_DATA(obj) = (pkcs7); \ -} while (0) -#define GetPKCS7(obj, pkcs7) do { \ - TypedData_Get_Struct((obj), PKCS7, &ossl_pkcs7_type, (pkcs7)); \ - if (!(pkcs7)) { \ - ossl_raise(rb_eRuntimeError, "PKCS7 wasn't initialized."); \ - } \ -} while (0) - #define NewPKCS7si(klass) \ TypedData_Wrap_Struct((klass), &ossl_pkcs7_signer_info_type, 0) #define SetPKCS7si(obj, p7si) do { \ @@ -75,7 +60,7 @@ ossl_pkcs7_free(void *ptr) PKCS7_free(ptr); } -static const rb_data_type_t ossl_pkcs7_type = { +const rb_data_type_t ossl_pkcs7_type = { "OpenSSL/PKCS7", { 0, ossl_pkcs7_free, @@ -116,19 +101,24 @@ static const rb_data_type_t ossl_pkcs7_recip_info_type = { * (MADE PRIVATE UNTIL SOMEBODY WILL NEED THEM) */ static PKCS7_SIGNER_INFO * -ossl_PKCS7_SIGNER_INFO_dup(const PKCS7_SIGNER_INFO *si) +ossl_PKCS7_SIGNER_INFO_dup(PKCS7_SIGNER_INFO *si) { - return (PKCS7_SIGNER_INFO *)ASN1_dup((i2d_of_void *)i2d_PKCS7_SIGNER_INFO, - (d2i_of_void *)d2i_PKCS7_SIGNER_INFO, - (char *)si); + PKCS7_SIGNER_INFO *si_new = ASN1_dup((i2d_of_void *)i2d_PKCS7_SIGNER_INFO, + (d2i_of_void *)d2i_PKCS7_SIGNER_INFO, + si); + if (si_new && si->pkey) { + EVP_PKEY_up_ref(si->pkey); + si_new->pkey = si->pkey; + } + return si_new; } static PKCS7_RECIP_INFO * -ossl_PKCS7_RECIP_INFO_dup(const PKCS7_RECIP_INFO *si) +ossl_PKCS7_RECIP_INFO_dup(PKCS7_RECIP_INFO *si) { - return (PKCS7_RECIP_INFO *)ASN1_dup((i2d_of_void *)i2d_PKCS7_RECIP_INFO, - (d2i_of_void *)d2i_PKCS7_RECIP_INFO, - (char *)si); + return ASN1_dup((i2d_of_void *)i2d_PKCS7_RECIP_INFO, + (d2i_of_void *)d2i_PKCS7_RECIP_INFO, + si); } static VALUE @@ -145,19 +135,6 @@ ossl_pkcs7si_new(PKCS7_SIGNER_INFO *p7si) return obj; } -static PKCS7_SIGNER_INFO * -DupPKCS7SignerPtr(VALUE obj) -{ - PKCS7_SIGNER_INFO *p7si, *pkcs7; - - GetPKCS7si(obj, p7si); - if (!(pkcs7 = ossl_PKCS7_SIGNER_INFO_dup(p7si))) { - ossl_raise(ePKCS7Error, NULL); - } - - return pkcs7; -} - static VALUE ossl_pkcs7ri_new(PKCS7_RECIP_INFO *p7ri) { @@ -172,19 +149,6 @@ ossl_pkcs7ri_new(PKCS7_RECIP_INFO *p7ri) return obj; } -static PKCS7_RECIP_INFO * -DupPKCS7RecipientPtr(VALUE obj) -{ - PKCS7_RECIP_INFO *p7ri, *pkcs7; - - GetPKCS7ri(obj, p7ri); - if (!(pkcs7 = ossl_PKCS7_RECIP_INFO_dup(p7ri))) { - ossl_raise(ePKCS7Error, NULL); - } - - return pkcs7; -} - /* * call-seq: * PKCS7.read_smime(string) => pkcs7 @@ -366,7 +330,7 @@ ossl_pkcs7_alloc(VALUE klass) static VALUE ossl_pkcs7_initialize(int argc, VALUE *argv, VALUE self) { - PKCS7 *p7, *pkcs = DATA_PTR(self); + PKCS7 *p7, *p7_orig = RTYPEDDATA_DATA(self); BIO *in; VALUE arg; @@ -374,19 +338,17 @@ ossl_pkcs7_initialize(int argc, VALUE *argv, VALUE self) return self; arg = ossl_to_der_if_possible(arg); in = ossl_obj2bio(&arg); - p7 = PEM_read_bio_PKCS7(in, &pkcs, NULL, NULL); + p7 = d2i_PKCS7_bio(in, NULL); if (!p7) { - OSSL_BIO_reset(in); - p7 = d2i_PKCS7_bio(in, &pkcs); - if (!p7) { - BIO_free(in); - PKCS7_free(pkcs); - DATA_PTR(self) = NULL; - ossl_raise(rb_eArgError, "Could not parse the PKCS7"); - } + OSSL_BIO_reset(in); + p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL); } - DATA_PTR(self) = pkcs; BIO_free(in); + if (!p7) + ossl_raise(rb_eArgError, "Could not parse the PKCS7"); + + RTYPEDDATA_DATA(self) = p7; + PKCS7_free(p7_orig); ossl_pkcs7_set_data(self, Qnil); ossl_pkcs7_set_err_string(self, Qnil); @@ -536,17 +498,18 @@ static VALUE ossl_pkcs7_add_signer(VALUE self, VALUE signer) { PKCS7 *pkcs7; - PKCS7_SIGNER_INFO *p7si; + PKCS7_SIGNER_INFO *si, *si_new; - p7si = DupPKCS7SignerPtr(signer); /* NEED TO DUP */ GetPKCS7(self, pkcs7); - if (!PKCS7_add_signer(pkcs7, p7si)) { - PKCS7_SIGNER_INFO_free(p7si); - ossl_raise(ePKCS7Error, "Could not add signer."); - } - if (PKCS7_type_is_signed(pkcs7)){ - PKCS7_add_signed_attribute(p7si, NID_pkcs9_contentType, - V_ASN1_OBJECT, OBJ_nid2obj(NID_pkcs7_data)); + GetPKCS7si(signer, si); + + si_new = ossl_PKCS7_SIGNER_INFO_dup(si); + if (!si_new) + ossl_raise(ePKCS7Error, "PKCS7_SIGNER_INFO_dup"); + + if (PKCS7_add_signer(pkcs7, si_new) != 1) { + PKCS7_SIGNER_INFO_free(si_new); + ossl_raise(ePKCS7Error, "PKCS7_add_signer"); } return self; @@ -582,13 +545,18 @@ static VALUE ossl_pkcs7_add_recipient(VALUE self, VALUE recip) { PKCS7 *pkcs7; - PKCS7_RECIP_INFO *ri; + PKCS7_RECIP_INFO *ri, *ri_new; - ri = DupPKCS7RecipientPtr(recip); /* NEED TO DUP */ GetPKCS7(self, pkcs7); - if (!PKCS7_add_recipient_info(pkcs7, ri)) { - PKCS7_RECIP_INFO_free(ri); - ossl_raise(ePKCS7Error, "Could not add recipient."); + GetPKCS7ri(recip, ri); + + ri_new = ossl_PKCS7_RECIP_INFO_dup(ri); + if (!ri_new) + ossl_raise(ePKCS7Error, "PKCS7_RECIP_INFO_dup"); + + if (PKCS7_add_recipient_info(pkcs7, ri_new) != 1) { + PKCS7_RECIP_INFO_free(ri_new); + ossl_raise(ePKCS7Error, "PKCS7_add_recipient_info"); } return self; @@ -1088,7 +1056,6 @@ Init_ossl_pkcs7(void) rb_define_alloc_func(cPKCS7Signer, ossl_pkcs7si_alloc); rb_define_method(cPKCS7Signer, "initialize", ossl_pkcs7si_initialize,3); rb_define_method(cPKCS7Signer, "issuer", ossl_pkcs7si_get_issuer, 0); - rb_define_alias(cPKCS7Signer, "name", "issuer"); rb_define_method(cPKCS7Signer, "serial", ossl_pkcs7si_get_serial,0); rb_define_method(cPKCS7Signer,"signed_time",ossl_pkcs7si_get_signed_time,0); diff --git a/ruby/ext/openssl/ossl_pkcs7.h b/ruby/ext/openssl/ossl_pkcs7.h index 139e00d64..3e1b09467 100644 --- a/ruby/ext/openssl/ossl_pkcs7.h +++ b/ruby/ext/openssl/ossl_pkcs7.h @@ -10,6 +10,22 @@ #if !defined(_OSSL_PKCS7_H_) #define _OSSL_PKCS7_H_ +#define NewPKCS7(klass) \ + TypedData_Wrap_Struct((klass), &ossl_pkcs7_type, 0) +#define SetPKCS7(obj, pkcs7) do { \ + if (!(pkcs7)) { \ + ossl_raise(rb_eRuntimeError, "PKCS7 wasn't initialized."); \ + } \ + RTYPEDDATA_DATA(obj) = (pkcs7); \ +} while (0) +#define GetPKCS7(obj, pkcs7) do { \ + TypedData_Get_Struct((obj), PKCS7, &ossl_pkcs7_type, (pkcs7)); \ + if (!(pkcs7)) { \ + ossl_raise(rb_eRuntimeError, "PKCS7 wasn't initialized."); \ + } \ +} while (0) + +extern const rb_data_type_t ossl_pkcs7_type; extern VALUE cPKCS7; extern VALUE cPKCS7Signer; extern VALUE cPKCS7Recipient; diff --git a/ruby/ext/openssl/ossl_pkey.c b/ruby/ext/openssl/ossl_pkey.c index e1fffb244..2a4835a28 100644 --- a/ruby/ext/openssl/ossl_pkey.c +++ b/ruby/ext/openssl/ossl_pkey.c @@ -9,6 +9,10 @@ */ #include "ossl.h" +#ifdef OSSL_USE_ENGINE +# include +#endif + /* * Classes */ @@ -17,64 +21,6 @@ VALUE cPKey; VALUE ePKeyError; static ID id_private_q; -/* - * callback for generating keys - */ -static VALUE -call_check_ints0(VALUE arg) -{ - rb_thread_check_ints(); - return Qnil; -} - -static void * -call_check_ints(void *arg) -{ - int state; - rb_protect(call_check_ints0, Qnil, &state); - return (void *)(VALUE)state; -} - -int -ossl_generate_cb_2(int p, int n, BN_GENCB *cb) -{ - VALUE ary; - struct ossl_generate_cb_arg *arg; - int state; - - arg = (struct ossl_generate_cb_arg *)BN_GENCB_get_arg(cb); - if (arg->yield) { - ary = rb_ary_new2(2); - rb_ary_store(ary, 0, INT2NUM(p)); - rb_ary_store(ary, 1, INT2NUM(n)); - - /* - * can be break by raising exception or 'break' - */ - rb_protect(rb_yield, ary, &state); - if (state) { - arg->state = state; - return 0; - } - } - if (arg->interrupted) { - arg->interrupted = 0; - state = (int)(VALUE)rb_thread_call_with_gvl(call_check_ints, NULL); - if (state) { - arg->state = state; - return 0; - } - } - return 1; -} - -void -ossl_generate_cb_stop(void *ptr) -{ - struct ossl_generate_cb_arg *arg = (struct ossl_generate_cb_arg *)ptr; - arg->interrupted = 1; -} - static void ossl_evp_pkey_free(void *ptr) { @@ -93,36 +39,29 @@ const rb_data_type_t ossl_evp_pkey_type = { }; static VALUE -pkey_new0(EVP_PKEY *pkey) +pkey_new0(VALUE arg) { - VALUE obj; - int type; + EVP_PKEY *pkey = (EVP_PKEY *)arg; + VALUE klass, obj; - if (!pkey || (type = EVP_PKEY_base_id(pkey)) == EVP_PKEY_NONE) - ossl_raise(rb_eRuntimeError, "pkey is empty"); - - switch (type) { + switch (EVP_PKEY_base_id(pkey)) { #if !defined(OPENSSL_NO_RSA) - case EVP_PKEY_RSA: - return ossl_rsa_new(pkey); + case EVP_PKEY_RSA: klass = cRSA; break; #endif #if !defined(OPENSSL_NO_DSA) - case EVP_PKEY_DSA: - return ossl_dsa_new(pkey); + case EVP_PKEY_DSA: klass = cDSA; break; #endif #if !defined(OPENSSL_NO_DH) - case EVP_PKEY_DH: - return ossl_dh_new(pkey); + case EVP_PKEY_DH: klass = cDH; break; #endif #if !defined(OPENSSL_NO_EC) - case EVP_PKEY_EC: - return ossl_ec_new(pkey); + case EVP_PKEY_EC: klass = cEC; break; #endif - default: - obj = NewPKey(cPKey); - SetPKey(obj, pkey); - return obj; + default: klass = cPKey; break; } + obj = rb_obj_alloc(klass); + RTYPEDDATA_DATA(obj) = pkey; + return obj; } VALUE @@ -131,7 +70,7 @@ ossl_pkey_new(EVP_PKEY *pkey) VALUE obj; int status; - obj = rb_protect((VALUE (*)(VALUE))pkey_new0, (VALUE)pkey, &status); + obj = rb_protect(pkey_new0, (VALUE)pkey, &status); if (status) { EVP_PKEY_free(pkey); rb_jump_tag(status); @@ -140,6 +79,75 @@ ossl_pkey_new(EVP_PKEY *pkey) return obj; } +#if OSSL_OPENSSL_PREREQ(3, 0, 0) +# include + +EVP_PKEY * +ossl_pkey_read_generic(BIO *bio, VALUE pass) +{ + void *ppass = (void *)pass; + OSSL_DECODER_CTX *dctx; + EVP_PKEY *pkey = NULL; + int pos = 0, pos2; + + dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, "DER", NULL, NULL, 0, NULL, NULL); + if (!dctx) + goto out; + if (OSSL_DECODER_CTX_set_pem_password_cb(dctx, ossl_pem_passwd_cb, ppass) != 1) + goto out; + + /* First check DER */ + if (OSSL_DECODER_from_bio(dctx, bio) == 1) + goto out; + + /* Then check PEM; multiple OSSL_DECODER_from_bio() calls may be needed */ + OSSL_BIO_reset(bio); + if (OSSL_DECODER_CTX_set_input_type(dctx, "PEM") != 1) + goto out; + while (OSSL_DECODER_from_bio(dctx, bio) != 1) { + if (BIO_eof(bio)) + goto out; + pos2 = BIO_tell(bio); + if (pos2 < 0 || pos2 <= pos) + goto out; + pos = pos2; + } + + out: + OSSL_DECODER_CTX_free(dctx); + return pkey; +} +#else +EVP_PKEY * +ossl_pkey_read_generic(BIO *bio, VALUE pass) +{ + void *ppass = (void *)pass; + EVP_PKEY *pkey; + + if ((pkey = d2i_PrivateKey_bio(bio, NULL))) + goto out; + OSSL_BIO_reset(bio); + if ((pkey = d2i_PKCS8PrivateKey_bio(bio, NULL, ossl_pem_passwd_cb, ppass))) + goto out; + OSSL_BIO_reset(bio); + if ((pkey = d2i_PUBKEY_bio(bio, NULL))) + goto out; + OSSL_BIO_reset(bio); + /* PEM_read_bio_PrivateKey() also parses PKCS #8 formats */ + if ((pkey = PEM_read_bio_PrivateKey(bio, NULL, ossl_pem_passwd_cb, ppass))) + goto out; + OSSL_BIO_reset(bio); + if ((pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL))) + goto out; + OSSL_BIO_reset(bio); + if ((pkey = PEM_read_bio_Parameters(bio, NULL))) + goto out; + + out: + return pkey; +} +#endif + /* * call-seq: * OpenSSL::PKey.read(string [, pwd ]) -> PKey @@ -149,7 +157,7 @@ ossl_pkey_new(EVP_PKEY *pkey) * instance of the appropriate PKey class. * * === Parameters - * * _string+ is a DER- or PEM-encoded string containing an arbitrary private + * * _string_ is a DER- or PEM-encoded string containing an arbitrary private * or public key. * * _io_ is an instance of IO containing a DER- or PEM-encoded * arbitrary private or public key. @@ -164,30 +172,282 @@ ossl_pkey_new_from_data(int argc, VALUE *argv, VALUE self) VALUE data, pass; rb_scan_args(argc, argv, "11", &data, &pass); - pass = ossl_pem_passwd_value(pass); - bio = ossl_obj2bio(&data); - if (!(pkey = d2i_PrivateKey_bio(bio, NULL))) { - OSSL_BIO_reset(bio); - if (!(pkey = PEM_read_bio_PrivateKey(bio, NULL, ossl_pem_passwd_cb, (void *)pass))) { - OSSL_BIO_reset(bio); - if (!(pkey = d2i_PUBKEY_bio(bio, NULL))) { - OSSL_BIO_reset(bio); - pkey = PEM_read_bio_PUBKEY(bio, NULL, ossl_pem_passwd_cb, (void *)pass); - } - } - } - + pkey = ossl_pkey_read_generic(bio, ossl_pem_passwd_value(pass)); BIO_free(bio); if (!pkey) ossl_raise(ePKeyError, "Could not parse PKey"); - return ossl_pkey_new(pkey); } +static VALUE +pkey_ctx_apply_options_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ctx_v)) +{ + VALUE key = rb_ary_entry(i, 0), value = rb_ary_entry(i, 1); + EVP_PKEY_CTX *ctx = (EVP_PKEY_CTX *)ctx_v; + + if (SYMBOL_P(key)) + key = rb_sym2str(key); + value = rb_String(value); + + if (EVP_PKEY_CTX_ctrl_str(ctx, StringValueCStr(key), StringValueCStr(value)) <= 0) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_ctrl_str(ctx, %+"PRIsVALUE", %+"PRIsVALUE")", + key, value); + return Qnil; +} + +static VALUE +pkey_ctx_apply_options0(VALUE args_v) +{ + VALUE *args = (VALUE *)args_v; + + rb_block_call(args[1], rb_intern("each"), 0, NULL, + pkey_ctx_apply_options_i, args[0]); + return Qnil; +} + +static void +pkey_ctx_apply_options(EVP_PKEY_CTX *ctx, VALUE options, int *state) +{ + VALUE args[2]; + args[0] = (VALUE)ctx; + args[1] = options; + + rb_protect(pkey_ctx_apply_options0, (VALUE)args, state); +} + +struct pkey_blocking_generate_arg { + EVP_PKEY_CTX *ctx; + EVP_PKEY *pkey; + int state; + int yield: 1; + int genparam: 1; + int interrupted: 1; +}; + +static VALUE +pkey_gen_cb_yield(VALUE ctx_v) +{ + EVP_PKEY_CTX *ctx = (void *)ctx_v; + int i, info_num; + VALUE *argv; + + info_num = EVP_PKEY_CTX_get_keygen_info(ctx, -1); + argv = ALLOCA_N(VALUE, info_num); + for (i = 0; i < info_num; i++) + argv[i] = INT2NUM(EVP_PKEY_CTX_get_keygen_info(ctx, i)); + + return rb_yield_values2(info_num, argv); +} + +static VALUE +call_check_ints0(VALUE arg) +{ + rb_thread_check_ints(); + return Qnil; +} + +static void * +call_check_ints(void *arg) +{ + int state; + rb_protect(call_check_ints0, Qnil, &state); + return (void *)(VALUE)state; +} + +static int +pkey_gen_cb(EVP_PKEY_CTX *ctx) +{ + struct pkey_blocking_generate_arg *arg = EVP_PKEY_CTX_get_app_data(ctx); + int state; + + if (arg->yield) { + rb_protect(pkey_gen_cb_yield, (VALUE)ctx, &state); + if (state) { + arg->state = state; + return 0; + } + } + if (arg->interrupted) { + arg->interrupted = 0; + state = (int)(VALUE)rb_thread_call_with_gvl(call_check_ints, NULL); + if (state) { + arg->state = state; + return 0; + } + } + return 1; +} + +static void +pkey_blocking_gen_stop(void *ptr) +{ + struct pkey_blocking_generate_arg *arg = ptr; + arg->interrupted = 1; +} + +static void * +pkey_blocking_gen(void *ptr) +{ + struct pkey_blocking_generate_arg *arg = ptr; + + if (arg->genparam && EVP_PKEY_paramgen(arg->ctx, &arg->pkey) <= 0) + return NULL; + if (!arg->genparam && EVP_PKEY_keygen(arg->ctx, &arg->pkey) <= 0) + return NULL; + return arg->pkey; +} + +static VALUE +pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) +{ + EVP_PKEY_CTX *ctx; + VALUE alg, options; + struct pkey_blocking_generate_arg gen_arg = { 0 }; + int state; + + rb_scan_args(argc, argv, "11", &alg, &options); + if (rb_obj_is_kind_of(alg, cPKey)) { + EVP_PKEY *base_pkey; + + GetPKey(alg, base_pkey); + ctx = EVP_PKEY_CTX_new(base_pkey, NULL/* engine */); + if (!ctx) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); + } + else { +#if OSSL_OPENSSL_PREREQ(3, 0, 0) + ctx = EVP_PKEY_CTX_new_from_name(NULL, StringValueCStr(alg), NULL); + if (!ctx) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new_from_name"); +#else + const EVP_PKEY_ASN1_METHOD *ameth; + ENGINE *tmpeng; + int pkey_id; + + StringValue(alg); + ameth = EVP_PKEY_asn1_find_str(&tmpeng, RSTRING_PTR(alg), + RSTRING_LENINT(alg)); + if (!ameth) + ossl_raise(ePKeyError, "algorithm %"PRIsVALUE" not found", alg); + EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); +#if !defined(OPENSSL_NO_ENGINE) + if (tmpeng) + ENGINE_finish(tmpeng); +#endif + + ctx = EVP_PKEY_CTX_new_id(pkey_id, NULL/* engine */); + if (!ctx) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new_id"); +#endif + } + + if (genparam && EVP_PKEY_paramgen_init(ctx) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_paramgen_init"); + } + if (!genparam && EVP_PKEY_keygen_init(ctx) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_keygen_init"); + } + + if (!NIL_P(options)) { + pkey_ctx_apply_options(ctx, options, &state); + if (state) { + EVP_PKEY_CTX_free(ctx); + rb_jump_tag(state); + } + } + + gen_arg.genparam = genparam; + gen_arg.ctx = ctx; + gen_arg.yield = rb_block_given_p(); + EVP_PKEY_CTX_set_app_data(ctx, &gen_arg); + EVP_PKEY_CTX_set_cb(ctx, pkey_gen_cb); + if (gen_arg.yield) + pkey_blocking_gen(&gen_arg); + else + rb_thread_call_without_gvl(pkey_blocking_gen, &gen_arg, + pkey_blocking_gen_stop, &gen_arg); + EVP_PKEY_CTX_free(ctx); + if (!gen_arg.pkey) { + if (gen_arg.state) { + ossl_clear_error(); + rb_jump_tag(gen_arg.state); + } + else { + ossl_raise(ePKeyError, genparam ? "EVP_PKEY_paramgen" : "EVP_PKEY_keygen"); + } + } + + return ossl_pkey_new(gen_arg.pkey); +} + +/* + * call-seq: + * OpenSSL::PKey.generate_parameters(algo_name [, options]) -> pkey + * + * Generates new parameters for the algorithm. _algo_name_ is a String that + * represents the algorithm. The optional argument _options_ is a Hash that + * specifies the options specific to the algorithm. The order of the options + * can be important. + * + * A block can be passed optionally. The meaning of the arguments passed to + * the block varies depending on the implementation of the algorithm. The block + * may be called once or multiple times, or may not even be called. + * + * For the supported options, see the documentation for the 'openssl genpkey' + * utility command. + * + * == Example + * pkey = OpenSSL::PKey.generate_parameters("DSA", "dsa_paramgen_bits" => 2048) + * p pkey.p.num_bits #=> 2048 + */ +static VALUE +ossl_pkey_s_generate_parameters(int argc, VALUE *argv, VALUE self) +{ + return pkey_generate(argc, argv, self, 1); +} + +/* + * call-seq: + * OpenSSL::PKey.generate_key(algo_name [, options]) -> pkey + * OpenSSL::PKey.generate_key(pkey [, options]) -> pkey + * + * Generates a new key (pair). + * + * If a String is given as the first argument, it generates a new random key + * for the algorithm specified by the name just as ::generate_parameters does. + * If an OpenSSL::PKey::PKey is given instead, it generates a new random key + * for the same algorithm as the key, using the parameters the key contains. + * + * See ::generate_parameters for the details of _options_ and the given block. + * + * == Example + * pkey_params = OpenSSL::PKey.generate_parameters("DSA", "dsa_paramgen_bits" => 2048) + * pkey_params.priv_key #=> nil + * pkey = OpenSSL::PKey.generate_key(pkey_params) + * pkey.priv_key #=> # string + * + * Returns the short name of the OID associated with _pkey_. + */ +static VALUE +ossl_pkey_oid(VALUE self) +{ + EVP_PKEY *pkey; + int nid; + + GetPKey(self, pkey); + nid = EVP_PKEY_id(pkey); + return rb_str_new_cstr(OBJ_nid2sn(nid)); +} + +/* + * call-seq: + * pkey.inspect -> string + * + * Returns a string describing the PKey object. + */ +static VALUE +ossl_pkey_inspect(VALUE self) +{ + EVP_PKEY *pkey; + int nid; + + GetPKey(self, pkey); + nid = EVP_PKEY_id(pkey); + return rb_sprintf("#<%"PRIsVALUE":%p oid=%s>", + rb_class_name(CLASS_OF(self)), (void *)self, + OBJ_nid2sn(nid)); +} + +/* + * call-seq: + * pkey.to_text -> string + * + * Dumps key parameters, public key, and private key components contained in + * the key into a human-readable text. + * + * This is intended for debugging purpose. + * + * See also the man page EVP_PKEY_print_private(3). + */ +static VALUE +ossl_pkey_to_text(VALUE self) +{ + EVP_PKEY *pkey; + BIO *bio; + + GetPKey(self, pkey); + if (!(bio = BIO_new(BIO_s_mem()))) + ossl_raise(ePKeyError, "BIO_new"); + + if (EVP_PKEY_print_private(bio, pkey, 0, NULL) == 1) + goto out; + OSSL_BIO_reset(bio); + if (EVP_PKEY_print_public(bio, pkey, 0, NULL) == 1) + goto out; + OSSL_BIO_reset(bio); + if (EVP_PKEY_print_params(bio, pkey, 0, NULL) == 1) + goto out; + + BIO_free(bio); + ossl_raise(ePKeyError, "EVP_PKEY_print_params"); + + out: + return ossl_membio2str(bio); +} + +VALUE +ossl_pkey_export_traditional(int argc, VALUE *argv, VALUE self, int to_der) +{ + EVP_PKEY *pkey; + VALUE cipher, pass; + const EVP_CIPHER *enc = NULL; + BIO *bio; + + GetPKey(self, pkey); + rb_scan_args(argc, argv, "02", &cipher, &pass); + if (!NIL_P(cipher)) { + enc = ossl_evp_get_cipherbyname(cipher); + pass = ossl_pem_passwd_value(pass); + } + + bio = BIO_new(BIO_s_mem()); + if (!bio) + ossl_raise(ePKeyError, "BIO_new"); + if (to_der) { + if (!i2d_PrivateKey_bio(bio, pkey)) { + BIO_free(bio); + ossl_raise(ePKeyError, "i2d_PrivateKey_bio"); + } + } + else { +#if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER) + if (!PEM_write_bio_PrivateKey_traditional(bio, pkey, enc, NULL, 0, + ossl_pem_passwd_cb, + (void *)pass)) { +#else + char pem_str[80]; + const char *aname; + + EVP_PKEY_asn1_get0_info(NULL, NULL, NULL, NULL, &aname, pkey->ameth); + snprintf(pem_str, sizeof(pem_str), "%s PRIVATE KEY", aname); + if (!PEM_ASN1_write_bio((i2d_of_void *)i2d_PrivateKey, pem_str, bio, + pkey, enc, NULL, 0, ossl_pem_passwd_cb, + (void *)pass)) { +#endif + BIO_free(bio); + ossl_raise(ePKeyError, "PEM_write_bio_PrivateKey_traditional"); + } + } + return ossl_membio2str(bio); +} + +static VALUE +do_pkcs8_export(int argc, VALUE *argv, VALUE self, int to_der) +{ + EVP_PKEY *pkey; + VALUE cipher, pass; + const EVP_CIPHER *enc = NULL; + BIO *bio; + + GetPKey(self, pkey); + rb_scan_args(argc, argv, "02", &cipher, &pass); + if (argc > 0) { + /* + * TODO: EncryptedPrivateKeyInfo actually has more options. + * Should they be exposed? + */ + enc = ossl_evp_get_cipherbyname(cipher); + pass = ossl_pem_passwd_value(pass); + } + + bio = BIO_new(BIO_s_mem()); + if (!bio) + ossl_raise(ePKeyError, "BIO_new"); + if (to_der) { + if (!i2d_PKCS8PrivateKey_bio(bio, pkey, enc, NULL, 0, + ossl_pem_passwd_cb, (void *)pass)) { + BIO_free(bio); + ossl_raise(ePKeyError, "i2d_PKCS8PrivateKey_bio"); + } + } + else { + if (!PEM_write_bio_PKCS8PrivateKey(bio, pkey, enc, NULL, 0, + ossl_pem_passwd_cb, (void *)pass)) { + BIO_free(bio); + ossl_raise(ePKeyError, "PEM_write_bio_PKCS8PrivateKey"); + } + } + return ossl_membio2str(bio); +} + +/* + * call-seq: + * pkey.private_to_der -> string + * pkey.private_to_der(cipher, password) -> string + * + * Serializes the private key to DER-encoded PKCS #8 format. If called without + * arguments, unencrypted PKCS #8 PrivateKeyInfo format is used. If called with + * a cipher name and a password, PKCS #8 EncryptedPrivateKeyInfo format with + * PBES2 encryption scheme is used. + */ +static VALUE +ossl_pkey_private_to_der(int argc, VALUE *argv, VALUE self) +{ + return do_pkcs8_export(argc, argv, self, 1); +} + +/* + * call-seq: + * pkey.private_to_pem -> string + * pkey.private_to_pem(cipher, password) -> string + * + * Serializes the private key to PEM-encoded PKCS #8 format. See #private_to_der + * for more details. + */ +static VALUE +ossl_pkey_private_to_pem(int argc, VALUE *argv, VALUE self) +{ + return do_pkcs8_export(argc, argv, self, 0); +} + +VALUE +ossl_pkey_export_spki(VALUE self, int to_der) +{ + EVP_PKEY *pkey; + BIO *bio; + + GetPKey(self, pkey); + bio = BIO_new(BIO_s_mem()); + if (!bio) + ossl_raise(ePKeyError, "BIO_new"); + if (to_der) { + if (!i2d_PUBKEY_bio(bio, pkey)) { + BIO_free(bio); + ossl_raise(ePKeyError, "i2d_PUBKEY_bio"); + } + } + else { + if (!PEM_write_bio_PUBKEY(bio, pkey)) { + BIO_free(bio); + ossl_raise(ePKeyError, "PEM_write_bio_PUBKEY"); + } + } + return ossl_membio2str(bio); +} + +/* + * call-seq: + * pkey.public_to_der -> string + * + * Serializes the public key to DER-encoded X.509 SubjectPublicKeyInfo format. + */ +static VALUE +ossl_pkey_public_to_der(VALUE self) +{ + return ossl_pkey_export_spki(self, 1); +} + +/* + * call-seq: + * pkey.public_to_pem -> string + * + * Serializes the public key to PEM-encoded X.509 SubjectPublicKeyInfo format. + */ +static VALUE +ossl_pkey_public_to_pem(VALUE self) +{ + return ossl_pkey_export_spki(self, 0); +} + /* * call-seq: - * pkey.sign(digest, data) -> String + * pkey.compare?(another_pkey) -> true | false * - * To sign the String _data_, _digest_, an instance of OpenSSL::Digest, must - * be provided. The return value is again a String containing the signature. - * A PKeyError is raised should errors occur. - * Any previous state of the Digest instance is irrelevant to the signature - * outcome, the digest instance is reset to its initial state during the - * operation. + * Used primarily to check if an OpenSSL::X509::Certificate#public_key compares to its private key. * * == Example - * data = 'Sign me!' - * digest = OpenSSL::Digest::SHA256.new - * pkey = OpenSSL::PKey::RSA.new(2048) - * signature = pkey.sign(digest, data) + * x509 = OpenSSL::X509::Certificate.new(pem_encoded_certificate) + * rsa_key = OpenSSL::PKey::RSA.new(pem_encoded_private_key) + * + * rsa_key.compare?(x509.public_key) => true | false */ static VALUE -ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) +ossl_pkey_compare(VALUE self, VALUE other) +{ + int ret; + EVP_PKEY *selfPKey; + EVP_PKEY *otherPKey; + + GetPKey(self, selfPKey); + GetPKey(other, otherPKey); + + /* Explicitly check the key type given EVP_PKEY_ASN1_METHOD(3) + * docs param_cmp could return any negative number. + */ + if (EVP_PKEY_id(selfPKey) != EVP_PKEY_id(otherPKey)) + ossl_raise(rb_eTypeError, "cannot match different PKey types"); + + ret = EVP_PKEY_eq(selfPKey, otherPKey); + + if (ret == 0) + return Qfalse; + else if (ret == 1) + return Qtrue; + else + ossl_raise(ePKeyError, "EVP_PKEY_eq"); +} + +/* + * call-seq: + * pkey.sign(digest, data [, options]) -> string + * + * Hashes and signs the +data+ using a message digest algorithm +digest+ and + * a private key +pkey+. + * + * See #verify for the verification operation. + * + * See also the man page EVP_DigestSign(3). + * + * +digest+:: + * A String that represents the message digest algorithm name, or +nil+ + * if the PKey type requires no digest algorithm. + * For backwards compatibility, this can be an instance of OpenSSL::Digest. + * Its state will not affect the signature. + * +data+:: + * A String. The data to be hashed and signed. + * +options+:: + * A Hash that contains algorithm specific control operations to \OpenSSL. + * See OpenSSL's man page EVP_PKEY_CTX_ctrl_str(3) for details. + * +options+ parameter was added in version 3.0. + * + * Example: + * data = "Sign me!" + * pkey = OpenSSL::PKey.generate_key("RSA", rsa_keygen_bits: 2048) + * signopts = { rsa_padding_mode: "pss" } + * signature = pkey.sign("SHA256", data, signopts) + * + * # Creates a copy of the RSA key pkey, but without the private components + * pub_key = pkey.public_key + * puts pub_key.verify("SHA256", signature, data, signopts) # => true + */ +static VALUE +ossl_pkey_sign(int argc, VALUE *argv, VALUE self) { EVP_PKEY *pkey; - const EVP_MD *md; + VALUE digest, data, options, sig; + const EVP_MD *md = NULL; EVP_MD_CTX *ctx; - unsigned int buf_len; - VALUE str; - int result; + EVP_PKEY_CTX *pctx; + size_t siglen; + int state; pkey = GetPrivPKeyPtr(self); - md = ossl_evp_get_digestbyname(digest); + rb_scan_args(argc, argv, "21", &digest, &data, &options); + if (!NIL_P(digest)) + md = ossl_evp_get_digestbyname(digest); StringValue(data); - str = rb_str_new(0, EVP_PKEY_size(pkey)); ctx = EVP_MD_CTX_new(); if (!ctx) - ossl_raise(ePKeyError, "EVP_MD_CTX_new"); - if (!EVP_SignInit_ex(ctx, md, NULL)) { - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_SignInit_ex"); + ossl_raise(ePKeyError, "EVP_MD_CTX_new"); + if (EVP_DigestSignInit(ctx, &pctx, md, /* engine */NULL, pkey) < 1) { + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestSignInit"); + } + if (!NIL_P(options)) { + pkey_ctx_apply_options(pctx, options, &state); + if (state) { + EVP_MD_CTX_free(ctx); + rb_jump_tag(state); + } + } +#if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER) + if (EVP_DigestSign(ctx, NULL, &siglen, (unsigned char *)RSTRING_PTR(data), + RSTRING_LEN(data)) < 1) { + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestSign"); + } + if (siglen > LONG_MAX) { + EVP_MD_CTX_free(ctx); + rb_raise(ePKeyError, "signature would be too large"); + } + sig = ossl_str_new(NULL, (long)siglen, &state); + if (state) { + EVP_MD_CTX_free(ctx); + rb_jump_tag(state); } - if (!EVP_SignUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data))) { - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_SignUpdate"); + if (EVP_DigestSign(ctx, (unsigned char *)RSTRING_PTR(sig), &siglen, + (unsigned char *)RSTRING_PTR(data), + RSTRING_LEN(data)) < 1) { + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestSign"); } - result = EVP_SignFinal(ctx, (unsigned char *)RSTRING_PTR(str), &buf_len, pkey); +#else + if (EVP_DigestSignUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) < 1) { + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestSignUpdate"); + } + if (EVP_DigestSignFinal(ctx, NULL, &siglen) < 1) { + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestSignFinal"); + } + if (siglen > LONG_MAX) { + EVP_MD_CTX_free(ctx); + rb_raise(ePKeyError, "signature would be too large"); + } + sig = ossl_str_new(NULL, (long)siglen, &state); + if (state) { + EVP_MD_CTX_free(ctx); + rb_jump_tag(state); + } + if (EVP_DigestSignFinal(ctx, (unsigned char *)RSTRING_PTR(sig), + &siglen) < 1) { + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestSignFinal"); + } +#endif EVP_MD_CTX_free(ctx); - if (!result) - ossl_raise(ePKeyError, "EVP_SignFinal"); - rb_str_set_len(str, buf_len); - - return str; + rb_str_set_len(sig, siglen); + return sig; } /* - * call-seq: - * pkey.verify(digest, signature, data) -> String + * call-seq: + * pkey.verify(digest, signature, data [, options]) -> true or false * - * To verify the String _signature_, _digest_, an instance of - * OpenSSL::Digest, must be provided to re-compute the message digest of the - * original _data_, also a String. The return value is +true+ if the - * signature is valid, +false+ otherwise. A PKeyError is raised should errors - * occur. - * Any previous state of the Digest instance is irrelevant to the validation - * outcome, the digest instance is reset to its initial state during the - * operation. + * Verifies the +signature+ for the +data+ using a message digest algorithm + * +digest+ and a public key +pkey+. * - * == Example - * data = 'Sign me!' - * digest = OpenSSL::Digest::SHA256.new - * pkey = OpenSSL::PKey::RSA.new(2048) - * signature = pkey.sign(digest, data) - * pub_key = pkey.public_key - * puts pub_key.verify(digest, signature, data) # => true + * Returns +true+ if the signature is successfully verified, +false+ otherwise. + * The caller must check the return value. + * + * See #sign for the signing operation and an example. + * + * See also the man page EVP_DigestVerify(3). + * + * +digest+:: + * See #sign. + * +signature+:: + * A String containing the signature to be verified. + * +data+:: + * See #sign. + * +options+:: + * See #sign. +options+ parameter was added in version 3.0. */ static VALUE -ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) +ossl_pkey_verify(int argc, VALUE *argv, VALUE self) { EVP_PKEY *pkey; - const EVP_MD *md; + VALUE digest, sig, data, options; + const EVP_MD *md = NULL; EVP_MD_CTX *ctx; - int siglen, result; + EVP_PKEY_CTX *pctx; + int state, ret; GetPKey(self, pkey); + rb_scan_args(argc, argv, "31", &digest, &sig, &data, &options); ossl_pkey_check_public_key(pkey); - md = ossl_evp_get_digestbyname(digest); + if (!NIL_P(digest)) + md = ossl_evp_get_digestbyname(digest); StringValue(sig); - siglen = RSTRING_LENINT(sig); StringValue(data); ctx = EVP_MD_CTX_new(); if (!ctx) - ossl_raise(ePKeyError, "EVP_MD_CTX_new"); - if (!EVP_VerifyInit_ex(ctx, md, NULL)) { - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_VerifyInit_ex"); + ossl_raise(ePKeyError, "EVP_MD_CTX_new"); + if (EVP_DigestVerifyInit(ctx, &pctx, md, /* engine */NULL, pkey) < 1) { + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestVerifyInit"); } - if (!EVP_VerifyUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data))) { - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_VerifyUpdate"); + if (!NIL_P(options)) { + pkey_ctx_apply_options(pctx, options, &state); + if (state) { + EVP_MD_CTX_free(ctx); + rb_jump_tag(state); + } } - result = EVP_VerifyFinal(ctx, (unsigned char *)RSTRING_PTR(sig), siglen, pkey); +#if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER) + ret = EVP_DigestVerify(ctx, (unsigned char *)RSTRING_PTR(sig), + RSTRING_LEN(sig), (unsigned char *)RSTRING_PTR(data), + RSTRING_LEN(data)); EVP_MD_CTX_free(ctx); - switch (result) { - case 0: - ossl_clear_error(); - return Qfalse; - case 1: - return Qtrue; - default: - ossl_raise(ePKeyError, "EVP_VerifyFinal"); + if (ret < 0) + ossl_raise(ePKeyError, "EVP_DigestVerify"); +#else + if (EVP_DigestVerifyUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) < 1) { + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestVerifyUpdate"); + } + ret = EVP_DigestVerifyFinal(ctx, (unsigned char *)RSTRING_PTR(sig), + RSTRING_LEN(sig)); + EVP_MD_CTX_free(ctx); + if (ret < 0) + ossl_raise(ePKeyError, "EVP_DigestVerifyFinal"); +#endif + if (ret) + return Qtrue; + else { + ossl_clear_error(); + return Qfalse; + } +} + +/* + * call-seq: + * pkey.sign_raw(digest, data [, options]) -> string + * + * Signs +data+ using a private key +pkey+. Unlike #sign, +data+ will not be + * hashed by +digest+ automatically. + * + * See #verify_raw for the verification operation. + * + * Added in version 3.0. See also the man page EVP_PKEY_sign(3). + * + * +digest+:: + * A String that represents the message digest algorithm name, or +nil+ + * if the PKey type requires no digest algorithm. + * Although this method will not hash +data+ with it, this parameter may still + * be required depending on the signature algorithm. + * +data+:: + * A String. The data to be signed. + * +options+:: + * A Hash that contains algorithm specific control operations to \OpenSSL. + * See OpenSSL's man page EVP_PKEY_CTX_ctrl_str(3) for details. + * + * Example: + * data = "Sign me!" + * hash = OpenSSL::Digest.digest("SHA256", data) + * pkey = OpenSSL::PKey.generate_key("RSA", rsa_keygen_bits: 2048) + * signopts = { rsa_padding_mode: "pss" } + * signature = pkey.sign_raw("SHA256", hash, signopts) + * + * # Creates a copy of the RSA key pkey, but without the private components + * pub_key = pkey.public_key + * puts pub_key.verify_raw("SHA256", signature, hash, signopts) # => true + */ +static VALUE +ossl_pkey_sign_raw(int argc, VALUE *argv, VALUE self) +{ + EVP_PKEY *pkey; + VALUE digest, data, options, sig; + const EVP_MD *md = NULL; + EVP_PKEY_CTX *ctx; + size_t outlen; + int state; + + GetPKey(self, pkey); + rb_scan_args(argc, argv, "21", &digest, &data, &options); + if (!NIL_P(digest)) + md = ossl_evp_get_digestbyname(digest); + StringValue(data); + + ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); + if (!ctx) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); + if (EVP_PKEY_sign_init(ctx) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_sign_init"); + } + if (md && EVP_PKEY_CTX_set_signature_md(ctx, md) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_CTX_set_signature_md"); + } + if (!NIL_P(options)) { + pkey_ctx_apply_options(ctx, options, &state); + if (state) { + EVP_PKEY_CTX_free(ctx); + rb_jump_tag(state); + } + } + if (EVP_PKEY_sign(ctx, NULL, &outlen, (unsigned char *)RSTRING_PTR(data), + RSTRING_LEN(data)) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_sign"); + } + if (outlen > LONG_MAX) { + EVP_PKEY_CTX_free(ctx); + rb_raise(ePKeyError, "signature would be too large"); + } + sig = ossl_str_new(NULL, (long)outlen, &state); + if (state) { + EVP_PKEY_CTX_free(ctx); + rb_jump_tag(state); + } + if (EVP_PKEY_sign(ctx, (unsigned char *)RSTRING_PTR(sig), &outlen, + (unsigned char *)RSTRING_PTR(data), + RSTRING_LEN(data)) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_sign"); + } + EVP_PKEY_CTX_free(ctx); + rb_str_set_len(sig, outlen); + return sig; +} + +/* + * call-seq: + * pkey.verify_raw(digest, signature, data [, options]) -> true or false + * + * Verifies the +signature+ for the +data+ using a public key +pkey+. Unlike + * #verify, this method will not hash +data+ with +digest+ automatically. + * + * Returns +true+ if the signature is successfully verified, +false+ otherwise. + * The caller must check the return value. + * + * See #sign_raw for the signing operation and an example code. + * + * Added in version 3.0. See also the man page EVP_PKEY_verify(3). + * + * +signature+:: + * A String containing the signature to be verified. + */ +static VALUE +ossl_pkey_verify_raw(int argc, VALUE *argv, VALUE self) +{ + EVP_PKEY *pkey; + VALUE digest, sig, data, options; + const EVP_MD *md = NULL; + EVP_PKEY_CTX *ctx; + int state, ret; + + GetPKey(self, pkey); + rb_scan_args(argc, argv, "31", &digest, &sig, &data, &options); + ossl_pkey_check_public_key(pkey); + if (!NIL_P(digest)) + md = ossl_evp_get_digestbyname(digest); + StringValue(sig); + StringValue(data); + + ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); + if (!ctx) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); + if (EVP_PKEY_verify_init(ctx) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_verify_init"); + } + if (md && EVP_PKEY_CTX_set_signature_md(ctx, md) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_CTX_set_signature_md"); + } + if (!NIL_P(options)) { + pkey_ctx_apply_options(ctx, options, &state); + if (state) { + EVP_PKEY_CTX_free(ctx); + rb_jump_tag(state); + } + } + ret = EVP_PKEY_verify(ctx, (unsigned char *)RSTRING_PTR(sig), + RSTRING_LEN(sig), + (unsigned char *)RSTRING_PTR(data), + RSTRING_LEN(data)); + EVP_PKEY_CTX_free(ctx); + if (ret < 0) + ossl_raise(ePKeyError, "EVP_PKEY_verify"); + + if (ret) + return Qtrue; + else { + ossl_clear_error(); + return Qfalse; } } +/* + * call-seq: + * pkey.verify_recover(digest, signature [, options]) -> string + * + * Recovers the signed data from +signature+ using a public key +pkey+. Not all + * signature algorithms support this operation. + * + * Added in version 3.0. See also the man page EVP_PKEY_verify_recover(3). + * + * +signature+:: + * A String containing the signature to be verified. + */ +static VALUE +ossl_pkey_verify_recover(int argc, VALUE *argv, VALUE self) +{ + EVP_PKEY *pkey; + VALUE digest, sig, options, out; + const EVP_MD *md = NULL; + EVP_PKEY_CTX *ctx; + int state; + size_t outlen; + + GetPKey(self, pkey); + rb_scan_args(argc, argv, "21", &digest, &sig, &options); + ossl_pkey_check_public_key(pkey); + if (!NIL_P(digest)) + md = ossl_evp_get_digestbyname(digest); + StringValue(sig); + + ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); + if (!ctx) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); + if (EVP_PKEY_verify_recover_init(ctx) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_verify_recover_init"); + } + if (md && EVP_PKEY_CTX_set_signature_md(ctx, md) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_CTX_set_signature_md"); + } + if (!NIL_P(options)) { + pkey_ctx_apply_options(ctx, options, &state); + if (state) { + EVP_PKEY_CTX_free(ctx); + rb_jump_tag(state); + } + } + if (EVP_PKEY_verify_recover(ctx, NULL, &outlen, + (unsigned char *)RSTRING_PTR(sig), + RSTRING_LEN(sig)) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_verify_recover"); + } + out = ossl_str_new(NULL, (long)outlen, &state); + if (state) { + EVP_PKEY_CTX_free(ctx); + rb_jump_tag(state); + } + if (EVP_PKEY_verify_recover(ctx, (unsigned char *)RSTRING_PTR(out), &outlen, + (unsigned char *)RSTRING_PTR(sig), + RSTRING_LEN(sig)) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_verify_recover"); + } + EVP_PKEY_CTX_free(ctx); + rb_str_set_len(out, outlen); + return out; +} + +/* + * call-seq: + * pkey.derive(peer_pkey) -> string + * + * Derives a shared secret from _pkey_ and _peer_pkey_. _pkey_ must contain + * the private components, _peer_pkey_ must contain the public components. + */ +static VALUE +ossl_pkey_derive(int argc, VALUE *argv, VALUE self) +{ + EVP_PKEY *pkey, *peer_pkey; + EVP_PKEY_CTX *ctx; + VALUE peer_pkey_obj, str; + size_t keylen; + int state; + + GetPKey(self, pkey); + rb_scan_args(argc, argv, "1", &peer_pkey_obj); + GetPKey(peer_pkey_obj, peer_pkey); + + ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); + if (!ctx) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); + if (EVP_PKEY_derive_init(ctx) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_derive_init"); + } + if (EVP_PKEY_derive_set_peer(ctx, peer_pkey) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_derive_set_peer"); + } + if (EVP_PKEY_derive(ctx, NULL, &keylen) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_derive"); + } + if (keylen > LONG_MAX) + rb_raise(ePKeyError, "derived key would be too large"); + str = ossl_str_new(NULL, (long)keylen, &state); + if (state) { + EVP_PKEY_CTX_free(ctx); + rb_jump_tag(state); + } + if (EVP_PKEY_derive(ctx, (unsigned char *)RSTRING_PTR(str), &keylen) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_derive"); + } + EVP_PKEY_CTX_free(ctx); + rb_str_set_len(str, keylen); + return str; +} + +/* + * call-seq: + * pkey.encrypt(data [, options]) -> string + * + * Performs a public key encryption operation using +pkey+. + * + * See #decrypt for the reverse operation. + * + * Added in version 3.0. See also the man page EVP_PKEY_encrypt(3). + * + * +data+:: + * A String to be encrypted. + * +options+:: + * A Hash that contains algorithm specific control operations to \OpenSSL. + * See OpenSSL's man page EVP_PKEY_CTX_ctrl_str(3) for details. + * + * Example: + * pkey = OpenSSL::PKey.generate_key("RSA", rsa_keygen_bits: 2048) + * data = "secret data" + * encrypted = pkey.encrypt(data, rsa_padding_mode: "oaep") + * decrypted = pkey.decrypt(data, rsa_padding_mode: "oaep") + * p decrypted #=> "secret data" + */ +static VALUE +ossl_pkey_encrypt(int argc, VALUE *argv, VALUE self) +{ + EVP_PKEY *pkey; + EVP_PKEY_CTX *ctx; + VALUE data, options, str; + size_t outlen; + int state; + + GetPKey(self, pkey); + rb_scan_args(argc, argv, "11", &data, &options); + StringValue(data); + + ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); + if (!ctx) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); + if (EVP_PKEY_encrypt_init(ctx) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_encrypt_init"); + } + if (!NIL_P(options)) { + pkey_ctx_apply_options(ctx, options, &state); + if (state) { + EVP_PKEY_CTX_free(ctx); + rb_jump_tag(state); + } + } + if (EVP_PKEY_encrypt(ctx, NULL, &outlen, + (unsigned char *)RSTRING_PTR(data), + RSTRING_LEN(data)) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_encrypt"); + } + if (outlen > LONG_MAX) { + EVP_PKEY_CTX_free(ctx); + rb_raise(ePKeyError, "encrypted data would be too large"); + } + str = ossl_str_new(NULL, (long)outlen, &state); + if (state) { + EVP_PKEY_CTX_free(ctx); + rb_jump_tag(state); + } + if (EVP_PKEY_encrypt(ctx, (unsigned char *)RSTRING_PTR(str), &outlen, + (unsigned char *)RSTRING_PTR(data), + RSTRING_LEN(data)) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_encrypt"); + } + EVP_PKEY_CTX_free(ctx); + rb_str_set_len(str, outlen); + return str; +} + +/* + * call-seq: + * pkey.decrypt(data [, options]) -> string + * + * Performs a public key decryption operation using +pkey+. + * + * See #encrypt for a description of the parameters and an example. + * + * Added in version 3.0. See also the man page EVP_PKEY_decrypt(3). + */ +static VALUE +ossl_pkey_decrypt(int argc, VALUE *argv, VALUE self) +{ + EVP_PKEY *pkey; + EVP_PKEY_CTX *ctx; + VALUE data, options, str; + size_t outlen; + int state; + + GetPKey(self, pkey); + rb_scan_args(argc, argv, "11", &data, &options); + StringValue(data); + + ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); + if (!ctx) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); + if (EVP_PKEY_decrypt_init(ctx) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_decrypt_init"); + } + if (!NIL_P(options)) { + pkey_ctx_apply_options(ctx, options, &state); + if (state) { + EVP_PKEY_CTX_free(ctx); + rb_jump_tag(state); + } + } + if (EVP_PKEY_decrypt(ctx, NULL, &outlen, + (unsigned char *)RSTRING_PTR(data), + RSTRING_LEN(data)) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_decrypt"); + } + if (outlen > LONG_MAX) { + EVP_PKEY_CTX_free(ctx); + rb_raise(ePKeyError, "decrypted data would be too large"); + } + str = ossl_str_new(NULL, (long)outlen, &state); + if (state) { + EVP_PKEY_CTX_free(ctx); + rb_jump_tag(state); + } + if (EVP_PKEY_decrypt(ctx, (unsigned char *)RSTRING_PTR(str), &outlen, + (unsigned char *)RSTRING_PTR(data), + RSTRING_LEN(data)) <= 0) { + EVP_PKEY_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_PKEY_decrypt"); + } + EVP_PKEY_CTX_free(ctx); + rb_str_set_len(str, outlen); + return str; +} + /* * INIT */ @@ -488,12 +1544,33 @@ Init_ossl_pkey(void) cPKey = rb_define_class_under(mPKey, "PKey", rb_cObject); rb_define_module_function(mPKey, "read", ossl_pkey_new_from_data, -1); + rb_define_module_function(mPKey, "generate_parameters", ossl_pkey_s_generate_parameters, -1); + rb_define_module_function(mPKey, "generate_key", ossl_pkey_s_generate_key, -1); rb_define_alloc_func(cPKey, ossl_pkey_alloc); rb_define_method(cPKey, "initialize", ossl_pkey_initialize, 0); +#ifdef HAVE_EVP_PKEY_DUP + rb_define_method(cPKey, "initialize_copy", ossl_pkey_initialize_copy, 1); +#else + rb_undef_method(cPKey, "initialize_copy"); +#endif + rb_define_method(cPKey, "oid", ossl_pkey_oid, 0); + rb_define_method(cPKey, "inspect", ossl_pkey_inspect, 0); + rb_define_method(cPKey, "to_text", ossl_pkey_to_text, 0); + rb_define_method(cPKey, "private_to_der", ossl_pkey_private_to_der, -1); + rb_define_method(cPKey, "private_to_pem", ossl_pkey_private_to_pem, -1); + rb_define_method(cPKey, "public_to_der", ossl_pkey_public_to_der, 0); + rb_define_method(cPKey, "public_to_pem", ossl_pkey_public_to_pem, 0); + rb_define_method(cPKey, "compare?", ossl_pkey_compare, 1); - rb_define_method(cPKey, "sign", ossl_pkey_sign, 2); - rb_define_method(cPKey, "verify", ossl_pkey_verify, 3); + rb_define_method(cPKey, "sign", ossl_pkey_sign, -1); + rb_define_method(cPKey, "verify", ossl_pkey_verify, -1); + rb_define_method(cPKey, "sign_raw", ossl_pkey_sign_raw, -1); + rb_define_method(cPKey, "verify_raw", ossl_pkey_verify_raw, -1); + rb_define_method(cPKey, "verify_recover", ossl_pkey_verify_recover, -1); + rb_define_method(cPKey, "derive", ossl_pkey_derive, -1); + rb_define_method(cPKey, "encrypt", ossl_pkey_encrypt, -1); + rb_define_method(cPKey, "decrypt", ossl_pkey_decrypt, -1); id_private_q = rb_intern("private?"); diff --git a/ruby/ext/openssl/ossl_pkey.h b/ruby/ext/openssl/ossl_pkey.h index 0db59305f..38fb9fad1 100644 --- a/ruby/ext/openssl/ossl_pkey.h +++ b/ruby/ext/openssl/ossl_pkey.h @@ -7,27 +7,18 @@ * This program is licensed under the same licence as Ruby. * (See the file 'LICENCE'.) */ -#if !defined(_OSSL_PKEY_H_) -#define _OSSL_PKEY_H_ +#if !defined(OSSL_PKEY_H) +#define OSSL_PKEY_H extern VALUE mPKey; extern VALUE cPKey; extern VALUE ePKeyError; extern const rb_data_type_t ossl_evp_pkey_type; -#define OSSL_PKEY_SET_PRIVATE(obj) rb_iv_set((obj), "private", Qtrue) -#define OSSL_PKEY_SET_PUBLIC(obj) rb_iv_set((obj), "private", Qfalse) -#define OSSL_PKEY_IS_PRIVATE(obj) (rb_iv_get((obj), "private") == Qtrue) +/* For ENGINE */ +#define OSSL_PKEY_SET_PRIVATE(obj) rb_ivar_set((obj), rb_intern("private"), Qtrue) +#define OSSL_PKEY_IS_PRIVATE(obj) (rb_attr_get((obj), rb_intern("private")) == Qtrue) -#define NewPKey(klass) \ - TypedData_Wrap_Struct((klass), &ossl_evp_pkey_type, 0) -#define SetPKey(obj, pkey) do { \ - if (!(pkey)) { \ - rb_raise(rb_eRuntimeError, "PKEY wasn't initialized!"); \ - } \ - RTYPEDDATA_DATA(obj) = (pkey); \ - OSSL_PKEY_SET_PUBLIC(obj); \ -} while (0) #define GetPKey(obj, pkey) do {\ TypedData_Get_Struct((obj), EVP_PKEY, &ossl_evp_pkey_type, (pkey)); \ if (!(pkey)) { \ @@ -35,19 +26,27 @@ extern const rb_data_type_t ossl_evp_pkey_type; } \ } while (0) -struct ossl_generate_cb_arg { - int yield; - int interrupted; - int state; -}; -int ossl_generate_cb_2(int p, int n, BN_GENCB *cb); -void ossl_generate_cb_stop(void *ptr); - +/* Takes ownership of the EVP_PKEY */ VALUE ossl_pkey_new(EVP_PKEY *); void ossl_pkey_check_public_key(const EVP_PKEY *); +EVP_PKEY *ossl_pkey_read_generic(BIO *, VALUE); EVP_PKEY *GetPKeyPtr(VALUE); EVP_PKEY *DupPKeyPtr(VALUE); EVP_PKEY *GetPrivPKeyPtr(VALUE); + +/* + * Serializes _self_ in X.509 SubjectPublicKeyInfo format and returns the + * resulting String. Sub-classes use this when overriding #to_der. + */ +VALUE ossl_pkey_export_spki(VALUE self, int to_der); +/* + * Serializes the private key _self_ in the traditional private key format + * and returns the resulting String. Sub-classes use this when overriding + * #to_der. + */ +VALUE ossl_pkey_export_traditional(int argc, VALUE *argv, VALUE self, + int to_der); + void Init_ossl_pkey(void); /* @@ -56,7 +55,6 @@ void Init_ossl_pkey(void); extern VALUE cRSA; extern VALUE eRSAError; -VALUE ossl_rsa_new(EVP_PKEY *); void Init_ossl_rsa(void); /* @@ -65,7 +63,6 @@ void Init_ossl_rsa(void); extern VALUE cDSA; extern VALUE eDSAError; -VALUE ossl_dsa_new(EVP_PKEY *); void Init_ossl_dsa(void); /* @@ -74,7 +71,6 @@ void Init_ossl_dsa(void); extern VALUE cDH; extern VALUE eDHError; -VALUE ossl_dh_new(EVP_PKEY *); void Init_ossl_dh(void); /* @@ -120,6 +116,7 @@ static VALUE ossl_##_keytype##_get_##_name(VALUE self) \ OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a2, \ _type##_get0_##_group(obj, NULL, &bn)) +#if !OSSL_OPENSSL_PREREQ(3, 0, 0) #define OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3) \ /* \ * call-seq: \ @@ -177,36 +174,22 @@ static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2) \ } \ return self; \ } +#else +#define OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3) \ +static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2, VALUE v3) \ +{ \ + rb_raise(ePKeyError, \ + #_keytype"#set_"#_group"= is incompatible with OpenSSL 3.0"); \ +} -#define OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, _name) \ -/* \ - * call-seq: \ - * _keytype##.##_name = bn -> bn \ - */ \ -static VALUE ossl_##_keytype##_set_##_name(VALUE self, VALUE bignum) \ +#define OSSL_PKEY_BN_DEF_SETTER2(_keytype, _type, _group, a1, a2) \ +static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2) \ { \ - _type *obj; \ - BIGNUM *bn; \ - \ - rb_warning("#"#_name"= is deprecated; use #set_"#_group); \ - Get##_type(self, obj); \ - if (NIL_P(bignum)) { \ - BN_clear_free(obj->_name); \ - obj->_name = NULL; \ - return Qnil; \ - } \ - \ - bn = GetBNPtr(bignum); \ - if (obj->_name == NULL) \ - obj->_name = BN_new(); \ - if (obj->_name == NULL) \ - ossl_raise(eBNError, NULL); \ - if (BN_copy(obj->_name, bn) == NULL) \ - ossl_raise(eBNError, NULL); \ - return bignum; \ + rb_raise(ePKeyError, \ + #_keytype"#set_"#_group"= is incompatible with OpenSSL 3.0"); \ } +#endif -#if defined(HAVE_OPAQUE_OPENSSL) /* OpenSSL 1.1.0 */ #define OSSL_PKEY_BN_DEF3(_keytype, _type, _group, a1, a2, a3) \ OSSL_PKEY_BN_DEF_GETTER3(_keytype, _type, _group, a1, a2, a3) \ OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3) @@ -218,24 +201,4 @@ static VALUE ossl_##_keytype##_set_##_name(VALUE self, VALUE bignum) \ #define DEF_OSSL_PKEY_BN(class, keytype, name) \ rb_define_method((class), #name, ossl_##keytype##_get_##name, 0) -#else -#define OSSL_PKEY_BN_DEF3(_keytype, _type, _group, a1, a2, a3) \ - OSSL_PKEY_BN_DEF_GETTER3(_keytype, _type, _group, a1, a2, a3) \ - OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3) \ - OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, a1) \ - OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, a2) \ - OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, a3) - -#define OSSL_PKEY_BN_DEF2(_keytype, _type, _group, a1, a2) \ - OSSL_PKEY_BN_DEF_GETTER2(_keytype, _type, _group, a1, a2) \ - OSSL_PKEY_BN_DEF_SETTER2(_keytype, _type, _group, a1, a2) \ - OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, a1) \ - OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, a2) - -#define DEF_OSSL_PKEY_BN(class, keytype, name) do { \ - rb_define_method((class), #name, ossl_##keytype##_get_##name, 0);\ - rb_define_method((class), #name "=", ossl_##keytype##_set_##name, 1);\ -} while (0) -#endif /* HAVE_OPAQUE_OPENSSL */ - -#endif /* _OSSL_PKEY_H_ */ +#endif /* OSSL_PKEY_H */ diff --git a/ruby/ext/openssl/ossl_pkey_dh.c b/ruby/ext/openssl/ossl_pkey_dh.c index bf4e3f932..696455dcf 100644 --- a/ruby/ext/openssl/ossl_pkey_dh.c +++ b/ruby/ext/openssl/ossl_pkey_dh.c @@ -29,217 +29,105 @@ VALUE cDH; VALUE eDHError; -/* - * Public - */ -static VALUE -dh_instance(VALUE klass, DH *dh) -{ - EVP_PKEY *pkey; - VALUE obj; - - if (!dh) { - return Qfalse; - } - obj = NewPKey(klass); - if (!(pkey = EVP_PKEY_new())) { - return Qfalse; - } - if (!EVP_PKEY_assign_DH(pkey, dh)) { - EVP_PKEY_free(pkey); - return Qfalse; - } - SetPKey(obj, pkey); - - return obj; -} - -VALUE -ossl_dh_new(EVP_PKEY *pkey) -{ - VALUE obj; - - if (!pkey) { - obj = dh_instance(cDH, DH_new()); - } else { - obj = NewPKey(cDH); - if (EVP_PKEY_base_id(pkey) != EVP_PKEY_DH) { - ossl_raise(rb_eTypeError, "Not a DH key!"); - } - SetPKey(obj, pkey); - } - if (obj == Qfalse) { - ossl_raise(eDHError, NULL); - } - - return obj; -} - /* * Private */ -struct dh_blocking_gen_arg { - DH *dh; - int size; - int gen; - BN_GENCB *cb; - int result; -}; - -static void * -dh_blocking_gen(void *arg) -{ - struct dh_blocking_gen_arg *gen = (struct dh_blocking_gen_arg *)arg; - gen->result = DH_generate_parameters_ex(gen->dh, gen->size, gen->gen, gen->cb); - return 0; -} - -static DH * -dh_generate(int size, int gen) -{ - struct ossl_generate_cb_arg cb_arg = { 0 }; - struct dh_blocking_gen_arg gen_arg; - DH *dh = DH_new(); - BN_GENCB *cb = BN_GENCB_new(); - - if (!dh || !cb) { - DH_free(dh); - BN_GENCB_free(cb); - return NULL; - } - - if (rb_block_given_p()) - cb_arg.yield = 1; - BN_GENCB_set(cb, ossl_generate_cb_2, &cb_arg); - gen_arg.dh = dh; - gen_arg.size = size; - gen_arg.gen = gen; - gen_arg.cb = cb; - if (cb_arg.yield == 1) { - /* we cannot release GVL when callback proc is supplied */ - dh_blocking_gen(&gen_arg); - } else { - /* there's a chance to unblock */ - rb_thread_call_without_gvl(dh_blocking_gen, &gen_arg, ossl_generate_cb_stop, &cb_arg); - } - - BN_GENCB_free(cb); - if (!gen_arg.result) { - DH_free(dh); - if (cb_arg.state) { - /* Clear OpenSSL error queue before re-raising. */ - ossl_clear_error(); - rb_jump_tag(cb_arg.state); - } - return NULL; - } - - if (!DH_generate_key(dh)) { - DH_free(dh); - return NULL; - } - - return dh; -} - -/* - * call-seq: - * DH.generate(size [, generator]) -> dh - * - * Creates a new DH instance from scratch by generating the private and public - * components alike. - * - * === Parameters - * * _size_ is an integer representing the desired key size. Keys smaller than 1024 bits should be considered insecure. - * * _generator_ is a small number > 1, typically 2 or 5. - * - */ -static VALUE -ossl_dh_s_generate(int argc, VALUE *argv, VALUE klass) -{ - DH *dh ; - int g = 2; - VALUE size, gen, obj; - - if (rb_scan_args(argc, argv, "11", &size, &gen) == 2) { - g = NUM2INT(gen); - } - dh = dh_generate(NUM2INT(size), g); - obj = dh_instance(klass, dh); - if (obj == Qfalse) { - DH_free(dh); - ossl_raise(eDHError, NULL); - } - - return obj; -} - /* * call-seq: * DH.new -> dh * DH.new(string) -> dh * DH.new(size [, generator]) -> dh * - * Either generates a DH instance from scratch or by reading already existing - * DH parameters from _string_. Note that when reading a DH instance from - * data that was encoded from a DH instance by using DH#to_pem or DH#to_der - * the result will *not* contain a public/private key pair yet. This needs to - * be generated using DH#generate_key! first. + * Creates a new instance of OpenSSL::PKey::DH. + * + * If called without arguments, an empty instance without any parameter or key + * components is created. Use #set_pqg to manually set the parameters afterwards + * (and optionally #set_key to set private and public key components). + * + * If a String is given, tries to parse it as a DER- or PEM- encoded parameters. + * See also OpenSSL::PKey.read which can parse keys of any kinds. + * + * The DH.new(size [, generator]) form is an alias of DH.generate. + * + * +string+:: + * A String that contains the DER or PEM encoded key. + * +size+:: + * See DH.generate. + * +generator+:: + * See DH.generate. + * + * Examples: + * # Creating an instance from scratch + * # Note that this is deprecated and will not work on OpenSSL 3.0 or later. + * dh = OpenSSL::PKey::DH.new + * dh.set_pqg(bn_p, nil, bn_g) * - * === Parameters - * * _size_ is an integer representing the desired key size. Keys smaller than 1024 bits should be considered insecure. - * * _generator_ is a small number > 1, typically 2 or 5. - * * _string_ contains the DER or PEM encoded key. + * # Generating a parameters and a key pair + * dh = OpenSSL::PKey::DH.new(2048) # An alias of OpenSSL::PKey::DH.generate(2048) * - * === Examples - * DH.new # -> dh - * DH.new(1024) # -> dh - * DH.new(1024, 5) # -> dh - * #Reading DH parameters - * dh = DH.new(File.read('parameters.pem')) # -> dh, but no public/private key yet - * dh.generate_key! # -> dh with public and private key + * # Reading DH parameters + * dh_params = OpenSSL::PKey::DH.new(File.read('parameters.pem')) # loads parameters only + * dh = OpenSSL::PKey.generate_key(dh_params) # generates a key pair */ static VALUE ossl_dh_initialize(int argc, VALUE *argv, VALUE self) { EVP_PKEY *pkey; + int type; DH *dh; - int g = 2; - BIO *in; - VALUE arg, gen; - - GetPKey(self, pkey); - if(rb_scan_args(argc, argv, "02", &arg, &gen) == 0) { - dh = DH_new(); - } - else if (RB_INTEGER_TYPE_P(arg)) { - if (!NIL_P(gen)) { - g = NUM2INT(gen); - } - if (!(dh = dh_generate(NUM2INT(arg), g))) { - ossl_raise(eDHError, NULL); - } + BIO *in = NULL; + VALUE arg; + + TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); + if (pkey) + rb_raise(rb_eTypeError, "pkey already initialized"); + + /* The DH.new(size, generator) form is handled by lib/openssl/pkey.rb */ + if (rb_scan_args(argc, argv, "01", &arg) == 0) { + dh = DH_new(); + if (!dh) + ossl_raise(eDHError, "DH_new"); + goto legacy; } - else { - arg = ossl_to_der_if_possible(arg); - in = ossl_obj2bio(&arg); - dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); - if (!dh){ - OSSL_BIO_reset(in); - dh = d2i_DHparams_bio(in, NULL); - } - BIO_free(in); - if (!dh) { - ossl_raise(eDHError, NULL); - } + + arg = ossl_to_der_if_possible(arg); + in = ossl_obj2bio(&arg); + + /* + * On OpenSSL <= 1.1.1 and current versions of LibreSSL, the generic + * routine does not support DER-encoded parameters + */ + dh = d2i_DHparams_bio(in, NULL); + if (dh) + goto legacy; + OSSL_BIO_reset(in); + + pkey = ossl_pkey_read_generic(in, Qnil); + BIO_free(in); + if (!pkey) + ossl_raise(eDHError, "could not parse pkey"); + + type = EVP_PKEY_base_id(pkey); + if (type != EVP_PKEY_DH) { + EVP_PKEY_free(pkey); + rb_raise(eDHError, "incorrect pkey type: %s", OBJ_nid2sn(type)); } - if (!EVP_PKEY_assign_DH(pkey, dh)) { - DH_free(dh); - ossl_raise(eDHError, NULL); + RTYPEDDATA_DATA(self) = pkey; + return self; + + legacy: + BIO_free(in); + pkey = EVP_PKEY_new(); + if (!pkey || EVP_PKEY_assign_DH(pkey, dh) != 1) { + EVP_PKEY_free(pkey); + DH_free(dh); + ossl_raise(eDHError, "EVP_PKEY_assign_DH"); } + RTYPEDDATA_DATA(self) = pkey; return self; } +#ifndef HAVE_EVP_PKEY_DUP static VALUE ossl_dh_initialize_copy(VALUE self, VALUE other) { @@ -247,15 +135,14 @@ ossl_dh_initialize_copy(VALUE self, VALUE other) DH *dh, *dh_other; const BIGNUM *pub, *priv; - GetPKey(self, pkey); - if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) - ossl_raise(eDHError, "DH already initialized"); + TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); + if (pkey) + rb_raise(rb_eTypeError, "pkey already initialized"); GetDH(other, dh_other); dh = DHparams_dup(dh_other); if (!dh) ossl_raise(eDHError, "DHparams_dup"); - EVP_PKEY_assign_DH(pkey, dh); DH_get0_key(dh_other, &pub, &priv); if (pub) { @@ -270,8 +157,16 @@ ossl_dh_initialize_copy(VALUE self, VALUE other) DH_set0_key(dh, pub2, priv2); } + pkey = EVP_PKEY_new(); + if (!pkey || EVP_PKEY_assign_DH(pkey, dh) != 1) { + EVP_PKEY_free(pkey); + DH_free(dh); + ossl_raise(eDHError, "EVP_PKEY_assign_DH"); + } + RTYPEDDATA_DATA(self) = pkey; return self; } +#endif /* * call-seq: @@ -403,72 +298,6 @@ ossl_dh_get_params(VALUE self) return hash; } -/* - * call-seq: - * dh.to_text -> aString - * - * Prints all parameters of key to buffer - * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!! - * Don't use :-)) (I's up to you) - */ -static VALUE -ossl_dh_to_text(VALUE self) -{ - DH *dh; - BIO *out; - VALUE str; - - GetDH(self, dh); - if (!(out = BIO_new(BIO_s_mem()))) { - ossl_raise(eDHError, NULL); - } - if (!DHparams_print(out, dh)) { - BIO_free(out); - ossl_raise(eDHError, NULL); - } - str = ossl_membio2str(out); - - return str; -} - -/* - * call-seq: - * dh.public_key -> aDH - * - * Returns a new DH instance that carries just the public information, i.e. - * the prime _p_ and the generator _g_, but no public/private key yet. Such - * a pair may be generated using DH#generate_key!. The "public key" needed - * for a key exchange with DH#compute_key is considered as per-session - * information and may be retrieved with DH#pub_key once a key pair has - * been generated. - * If the current instance already contains private information (and thus a - * valid public/private key pair), this information will no longer be present - * in the new instance generated by DH#public_key. This feature is helpful for - * publishing the Diffie-Hellman parameters without leaking any of the private - * per-session information. - * - * === Example - * dh = OpenSSL::PKey::DH.new(2048) # has public and private key set - * public_key = dh.public_key # contains only prime and generator - * parameters = public_key.to_der # it's safe to publish this - */ -static VALUE -ossl_dh_to_public_key(VALUE self) -{ - DH *orig_dh, *dh; - VALUE obj; - - GetDH(self, orig_dh); - dh = DHparams_dup(orig_dh); /* err check perfomed by dh_instance */ - obj = dh_instance(rb_obj_class(self), dh); - if (obj == Qfalse) { - DH_free(dh); - ossl_raise(eDHError, NULL); - } - - return obj; -} - /* * call-seq: * dh.params_ok? -> true | false @@ -476,80 +305,38 @@ ossl_dh_to_public_key(VALUE self) * Validates the Diffie-Hellman parameters associated with this instance. * It checks whether a safe prime and a suitable generator are used. If this * is not the case, +false+ is returned. + * + * See also the man page EVP_PKEY_param_check(3). */ static VALUE ossl_dh_check_params(VALUE self) { - DH *dh; - int codes; - - GetDH(self, dh); - if (!DH_check(dh, &codes)) { - return Qfalse; - } - - return codes == 0 ? Qtrue : Qfalse; -} + int ret; +#ifdef HAVE_EVP_PKEY_CHECK + EVP_PKEY *pkey; + EVP_PKEY_CTX *pctx; -/* - * call-seq: - * dh.generate_key! -> self - * - * Generates a private and public key unless a private key already exists. - * If this DH instance was generated from public DH parameters (e.g. by - * encoding the result of DH#public_key), then this method needs to be - * called first in order to generate the per-session keys before performing - * the actual key exchange. - * - * === Example - * dh = OpenSSL::PKey::DH.new(2048) - * public_key = dh.public_key #contains no private/public key yet - * public_key.generate_key! - * puts public_key.private? # => true - */ -static VALUE -ossl_dh_generate_key(VALUE self) -{ + GetPKey(self, pkey); + pctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); + if (!pctx) + ossl_raise(eDHError, "EVP_PKEY_CTX_new"); + ret = EVP_PKEY_param_check(pctx); + EVP_PKEY_CTX_free(pctx); +#else DH *dh; + int codes; GetDH(self, dh); - if (!DH_generate_key(dh)) - ossl_raise(eDHError, "Failed to generate key"); - return self; -} - -/* - * call-seq: - * dh.compute_key(pub_bn) -> aString - * - * Returns a String containing a shared secret computed from the other party's public value. - * See DH_compute_key() for further information. - * - * === Parameters - * * _pub_bn_ is a OpenSSL::BN, *not* the DH instance returned by - * DH#public_key as that contains the DH parameters only. - */ -static VALUE -ossl_dh_compute_key(VALUE self, VALUE pub) -{ - DH *dh; - const BIGNUM *pub_key, *dh_p; - VALUE str; - int len; + ret = DH_check(dh, &codes) == 1 && codes == 0; +#endif - GetDH(self, dh); - DH_get0_pqg(dh, &dh_p, NULL, NULL); - if (!dh_p) - ossl_raise(eDHError, "incomplete DH"); - pub_key = GetBNPtr(pub); - len = DH_size(dh); - str = rb_str_new(0, len); - if ((len = DH_compute_key((unsigned char *)RSTRING_PTR(str), pub_key, dh)) < 0) { - ossl_raise(eDHError, NULL); + if (ret == 1) + return Qtrue; + else { + /* DH_check_ex() will put error entry on failure */ + ossl_clear_error(); + return Qfalse; } - rb_str_set_len(str, len); - - return str; } /* @@ -606,30 +393,33 @@ Init_ossl_dh(void) * The per-session private key, an OpenSSL::BN. * * === Example of a key exchange - * dh1 = OpenSSL::PKey::DH.new(2048) - * der = dh1.public_key.to_der #you may send this publicly to the participating party - * dh2 = OpenSSL::PKey::DH.new(der) - * dh2.generate_key! #generate the per-session key pair - * symm_key1 = dh1.compute_key(dh2.pub_key) - * symm_key2 = dh2.compute_key(dh1.pub_key) + * # you may send the parameters (der) and own public key (pub1) publicly + * # to the participating party + * dh1 = OpenSSL::PKey::DH.new(2048) + * der = dh1.to_der + * pub1 = dh1.pub_key * - * puts symm_key1 == symm_key2 # => true + * # the other party generates its per-session key pair + * dhparams = OpenSSL::PKey::DH.new(der) + * dh2 = OpenSSL::PKey.generate_key(dhparams) + * pub2 = dh2.pub_key + * + * symm_key1 = dh1.compute_key(pub2) + * symm_key2 = dh2.compute_key(pub1) + * puts symm_key1 == symm_key2 # => true */ cDH = rb_define_class_under(mPKey, "DH", cPKey); - rb_define_singleton_method(cDH, "generate", ossl_dh_s_generate, -1); rb_define_method(cDH, "initialize", ossl_dh_initialize, -1); +#ifndef HAVE_EVP_PKEY_DUP rb_define_method(cDH, "initialize_copy", ossl_dh_initialize_copy, 1); +#endif rb_define_method(cDH, "public?", ossl_dh_is_public, 0); rb_define_method(cDH, "private?", ossl_dh_is_private, 0); - rb_define_method(cDH, "to_text", ossl_dh_to_text, 0); rb_define_method(cDH, "export", ossl_dh_export, 0); rb_define_alias(cDH, "to_pem", "export"); rb_define_alias(cDH, "to_s", "export"); rb_define_method(cDH, "to_der", ossl_dh_to_der, 0); - rb_define_method(cDH, "public_key", ossl_dh_to_public_key, 0); rb_define_method(cDH, "params_ok?", ossl_dh_check_params, 0); - rb_define_method(cDH, "generate_key!", ossl_dh_generate_key, 0); - rb_define_method(cDH, "compute_key", ossl_dh_compute_key, 1); DEF_OSSL_PKEY_BN(cDH, dh, p); DEF_OSSL_PKEY_BN(cDH, dh, q); diff --git a/ruby/ext/openssl/ossl_pkey_dsa.c b/ruby/ext/openssl/ossl_pkey_dsa.c index 56cc9dd4f..25404aa7f 100644 --- a/ruby/ext/openssl/ossl_pkey_dsa.c +++ b/ruby/ext/openssl/ossl_pkey_dsa.c @@ -43,246 +43,131 @@ DSA_PRIVATE(VALUE obj, DSA *dsa) VALUE cDSA; VALUE eDSAError; -/* - * Public - */ -static VALUE -dsa_instance(VALUE klass, DSA *dsa) -{ - EVP_PKEY *pkey; - VALUE obj; - - if (!dsa) { - return Qfalse; - } - obj = NewPKey(klass); - if (!(pkey = EVP_PKEY_new())) { - return Qfalse; - } - if (!EVP_PKEY_assign_DSA(pkey, dsa)) { - EVP_PKEY_free(pkey); - return Qfalse; - } - SetPKey(obj, pkey); - - return obj; -} - -VALUE -ossl_dsa_new(EVP_PKEY *pkey) -{ - VALUE obj; - - if (!pkey) { - obj = dsa_instance(cDSA, DSA_new()); - } else { - obj = NewPKey(cDSA); - if (EVP_PKEY_base_id(pkey) != EVP_PKEY_DSA) { - ossl_raise(rb_eTypeError, "Not a DSA key!"); - } - SetPKey(obj, pkey); - } - if (obj == Qfalse) { - ossl_raise(eDSAError, NULL); - } - - return obj; -} - /* * Private */ -struct dsa_blocking_gen_arg { - DSA *dsa; - int size; - int *counter; - unsigned long *h; - BN_GENCB *cb; - int result; -}; - -static void * -dsa_blocking_gen(void *arg) -{ - struct dsa_blocking_gen_arg *gen = (struct dsa_blocking_gen_arg *)arg; - gen->result = DSA_generate_parameters_ex(gen->dsa, gen->size, NULL, 0, - gen->counter, gen->h, gen->cb); - return 0; -} - -static DSA * -dsa_generate(int size) -{ - struct ossl_generate_cb_arg cb_arg = { 0 }; - struct dsa_blocking_gen_arg gen_arg; - DSA *dsa = DSA_new(); - BN_GENCB *cb = BN_GENCB_new(); - int counter; - unsigned long h; - - if (!dsa || !cb) { - DSA_free(dsa); - BN_GENCB_free(cb); - return NULL; - } - - if (rb_block_given_p()) - cb_arg.yield = 1; - BN_GENCB_set(cb, ossl_generate_cb_2, &cb_arg); - gen_arg.dsa = dsa; - gen_arg.size = size; - gen_arg.counter = &counter; - gen_arg.h = &h; - gen_arg.cb = cb; - if (cb_arg.yield == 1) { - /* we cannot release GVL when callback proc is supplied */ - dsa_blocking_gen(&gen_arg); - } else { - /* there's a chance to unblock */ - rb_thread_call_without_gvl(dsa_blocking_gen, &gen_arg, ossl_generate_cb_stop, &cb_arg); - } - - BN_GENCB_free(cb); - if (!gen_arg.result) { - DSA_free(dsa); - if (cb_arg.state) { - /* Clear OpenSSL error queue before re-raising. By the way, the - * documentation of DSA_generate_parameters_ex() says the error code - * can be obtained by ERR_get_error(), but the default - * implementation, dsa_builtin_paramgen() doesn't put any error... */ - ossl_clear_error(); - rb_jump_tag(cb_arg.state); - } - return NULL; - } - - if (!DSA_generate_key(dsa)) { - DSA_free(dsa); - return NULL; - } - - return dsa; -} - -/* - * call-seq: - * DSA.generate(size) -> dsa - * - * Creates a new DSA instance by generating a private/public key pair - * from scratch. - * - * === Parameters - * * _size_ is an integer representing the desired key size. - * - */ -static VALUE -ossl_dsa_s_generate(VALUE klass, VALUE size) -{ - DSA *dsa = dsa_generate(NUM2INT(size)); /* err handled by dsa_instance */ - VALUE obj = dsa_instance(klass, dsa); - - if (obj == Qfalse) { - DSA_free(dsa); - ossl_raise(eDSAError, NULL); - } - - return obj; -} - /* * call-seq: * DSA.new -> dsa - * DSA.new(size) -> dsa * DSA.new(string [, pass]) -> dsa + * DSA.new(size) -> dsa * * Creates a new DSA instance by reading an existing key from _string_. * - * === Parameters - * * _size_ is an integer representing the desired key size. - * * _string_ contains a DER or PEM encoded key. - * * _pass_ is a string that contains an optional password. + * If called without arguments, creates a new instance with no key components + * set. They can be set individually by #set_pqg and #set_key. * - * === Examples - * DSA.new -> dsa - * DSA.new(1024) -> dsa - * DSA.new(File.read('dsa.pem')) -> dsa - * DSA.new(File.read('dsa.pem'), 'mypassword') -> dsa + * If called with a String, tries to parse as DER or PEM encoding of a \DSA key. + * See also OpenSSL::PKey.read which can parse keys of any kinds. * + * If called with a number, generates random parameters and a key pair. This + * form works as an alias of DSA.generate. + * + * +string+:: + * A String that contains a DER or PEM encoded key. + * +pass+:: + * A String that contains an optional password. + * +size+:: + * See DSA.generate. + * + * Examples: + * p OpenSSL::PKey::DSA.new(1024) + * #=> # + * + * p OpenSSL::PKey::DSA.new(File.read('dsa.pem')) + * #=> # + * + * p OpenSSL::PKey::DSA.new(File.read('dsa.pem'), 'mypassword') + * #=> # */ static VALUE ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) { EVP_PKEY *pkey; DSA *dsa; - BIO *in; + BIO *in = NULL; VALUE arg, pass; + int type; + + TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); + if (pkey) + rb_raise(rb_eTypeError, "pkey already initialized"); - GetPKey(self, pkey); - if(rb_scan_args(argc, argv, "02", &arg, &pass) == 0) { + /* The DSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ + rb_scan_args(argc, argv, "02", &arg, &pass); + if (argc == 0) { dsa = DSA_new(); + if (!dsa) + ossl_raise(eDSAError, "DSA_new"); + goto legacy; } - else if (RB_INTEGER_TYPE_P(arg)) { - if (!(dsa = dsa_generate(NUM2INT(arg)))) { - ossl_raise(eDSAError, NULL); - } - } - else { - pass = ossl_pem_passwd_value(pass); - arg = ossl_to_der_if_possible(arg); - in = ossl_obj2bio(&arg); - dsa = PEM_read_bio_DSAPrivateKey(in, NULL, ossl_pem_passwd_cb, (void *)pass); - if (!dsa) { - OSSL_BIO_reset(in); - dsa = PEM_read_bio_DSA_PUBKEY(in, NULL, NULL, NULL); - } - if (!dsa) { - OSSL_BIO_reset(in); - dsa = d2i_DSAPrivateKey_bio(in, NULL); - } - if (!dsa) { - OSSL_BIO_reset(in); - dsa = d2i_DSA_PUBKEY_bio(in, NULL); - } - if (!dsa) { - OSSL_BIO_reset(in); -#define PEM_read_bio_DSAPublicKey(bp,x,cb,u) (DSA *)PEM_ASN1_read_bio( \ - (d2i_of_void *)d2i_DSAPublicKey, PEM_STRING_DSA_PUBLIC, (bp), (void **)(x), (cb), (u)) - dsa = PEM_read_bio_DSAPublicKey(in, NULL, NULL, NULL); -#undef PEM_read_bio_DSAPublicKey - } - BIO_free(in); - if (!dsa) { - ossl_clear_error(); - ossl_raise(eDSAError, "Neither PUB key nor PRIV key"); - } - } - if (!EVP_PKEY_assign_DSA(pkey, dsa)) { - DSA_free(dsa); - ossl_raise(eDSAError, NULL); + + pass = ossl_pem_passwd_value(pass); + arg = ossl_to_der_if_possible(arg); + in = ossl_obj2bio(&arg); + + /* DER-encoded DSAPublicKey format isn't supported by the generic routine */ + dsa = (DSA *)PEM_ASN1_read_bio((d2i_of_void *)d2i_DSAPublicKey, + PEM_STRING_DSA_PUBLIC, + in, NULL, NULL, NULL); + if (dsa) + goto legacy; + OSSL_BIO_reset(in); + + pkey = ossl_pkey_read_generic(in, pass); + BIO_free(in); + if (!pkey) + ossl_raise(eDSAError, "Neither PUB key nor PRIV key"); + + type = EVP_PKEY_base_id(pkey); + if (type != EVP_PKEY_DSA) { + EVP_PKEY_free(pkey); + rb_raise(eDSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); } + RTYPEDDATA_DATA(self) = pkey; + return self; + legacy: + BIO_free(in); + pkey = EVP_PKEY_new(); + if (!pkey || EVP_PKEY_assign_DSA(pkey, dsa) != 1) { + EVP_PKEY_free(pkey); + DSA_free(dsa); + ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); + } + RTYPEDDATA_DATA(self) = pkey; return self; } +#ifndef HAVE_EVP_PKEY_DUP static VALUE ossl_dsa_initialize_copy(VALUE self, VALUE other) { EVP_PKEY *pkey; DSA *dsa, *dsa_new; - GetPKey(self, pkey); - if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) - ossl_raise(eDSAError, "DSA already initialized"); + TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); + if (pkey) + rb_raise(rb_eTypeError, "pkey already initialized"); GetDSA(other, dsa); - dsa_new = ASN1_dup((i2d_of_void *)i2d_DSAPrivateKey, (d2i_of_void *)d2i_DSAPrivateKey, (char *)dsa); + dsa_new = (DSA *)ASN1_dup((i2d_of_void *)i2d_DSAPrivateKey, + (d2i_of_void *)d2i_DSAPrivateKey, + (char *)dsa); if (!dsa_new) ossl_raise(eDSAError, "ASN1_dup"); - EVP_PKEY_assign_DSA(pkey, dsa_new); + pkey = EVP_PKEY_new(); + if (!pkey || EVP_PKEY_assign_DSA(pkey, dsa_new) != 1) { + EVP_PKEY_free(pkey); + DSA_free(dsa_new); + ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); + } + RTYPEDDATA_DATA(self) = pkey; return self; } +#endif /* * call-seq: @@ -341,34 +226,12 @@ static VALUE ossl_dsa_export(int argc, VALUE *argv, VALUE self) { DSA *dsa; - BIO *out; - const EVP_CIPHER *ciph = NULL; - VALUE cipher, pass, str; GetDSA(self, dsa); - rb_scan_args(argc, argv, "02", &cipher, &pass); - if (!NIL_P(cipher)) { - ciph = ossl_evp_get_cipherbyname(cipher); - pass = ossl_pem_passwd_value(pass); - } - if (!(out = BIO_new(BIO_s_mem()))) { - ossl_raise(eDSAError, NULL); - } - if (DSA_HAS_PRIVATE(dsa)) { - if (!PEM_write_bio_DSAPrivateKey(out, dsa, ciph, NULL, 0, - ossl_pem_passwd_cb, (void *)pass)){ - BIO_free(out); - ossl_raise(eDSAError, NULL); - } - } else { - if (!PEM_write_bio_DSA_PUBKEY(out, dsa)) { - BIO_free(out); - ossl_raise(eDSAError, NULL); - } - } - str = ossl_membio2str(out); - - return str; + if (DSA_HAS_PRIVATE(dsa)) + return ossl_pkey_export_traditional(argc, argv, self, 0); + else + return ossl_pkey_export_spki(self, 0); } /* @@ -382,25 +245,12 @@ static VALUE ossl_dsa_to_der(VALUE self) { DSA *dsa; - int (*i2d_func)(DSA *, unsigned char **); - unsigned char *p; - long len; - VALUE str; GetDSA(self, dsa); - if(DSA_HAS_PRIVATE(dsa)) - i2d_func = (int (*)(DSA *,unsigned char **))i2d_DSAPrivateKey; + if (DSA_HAS_PRIVATE(dsa)) + return ossl_pkey_export_traditional(0, NULL, self, 1); else - i2d_func = i2d_DSA_PUBKEY; - if((len = i2d_func(dsa, NULL)) <= 0) - ossl_raise(eDSAError, NULL); - str = rb_str_new(0, len); - p = (unsigned char *)RSTRING_PTR(str); - if(i2d_func(dsa, &p) < 0) - ossl_raise(eDSAError, NULL); - ossl_str_adjust(str, p); - - return str; + return ossl_pkey_export_spki(self, 1); } @@ -433,158 +283,6 @@ ossl_dsa_get_params(VALUE self) return hash; } -/* - * call-seq: - * dsa.to_text -> aString - * - * Prints all parameters of key to buffer - * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!! - * Don't use :-)) (I's up to you) - */ -static VALUE -ossl_dsa_to_text(VALUE self) -{ - DSA *dsa; - BIO *out; - VALUE str; - - GetDSA(self, dsa); - if (!(out = BIO_new(BIO_s_mem()))) { - ossl_raise(eDSAError, NULL); - } - if (!DSA_print(out, dsa, 0)) { /* offset = 0 */ - BIO_free(out); - ossl_raise(eDSAError, NULL); - } - str = ossl_membio2str(out); - - return str; -} - -/* - * call-seq: - * dsa.public_key -> aDSA - * - * Returns a new DSA instance that carries just the public key information. - * If the current instance has also private key information, this will no - * longer be present in the new instance. This feature is helpful for - * publishing the public key information without leaking any of the private - * information. - * - * === Example - * dsa = OpenSSL::PKey::DSA.new(2048) # has public and private information - * pub_key = dsa.public_key # has only the public part available - * pub_key_der = pub_key.to_der # it's safe to publish this - * - * - */ -static VALUE -ossl_dsa_to_public_key(VALUE self) -{ - EVP_PKEY *pkey; - DSA *dsa; - VALUE obj; - - GetPKeyDSA(self, pkey); - /* err check performed by dsa_instance */ -#define DSAPublicKey_dup(dsa) (DSA *)ASN1_dup( \ - (i2d_of_void *)i2d_DSAPublicKey, (d2i_of_void *)d2i_DSAPublicKey, (char *)(dsa)) - dsa = DSAPublicKey_dup(EVP_PKEY_get0_DSA(pkey)); -#undef DSAPublicKey_dup - obj = dsa_instance(rb_obj_class(self), dsa); - if (obj == Qfalse) { - DSA_free(dsa); - ossl_raise(eDSAError, NULL); - } - return obj; -} - -/* - * call-seq: - * dsa.syssign(string) -> aString - * - * Computes and returns the DSA signature of _string_, where _string_ is - * expected to be an already-computed message digest of the original input - * data. The signature is issued using the private key of this DSA instance. - * - * === Parameters - * * _string_ is a message digest of the original input data to be signed. - * - * === Example - * dsa = OpenSSL::PKey::DSA.new(2048) - * doc = "Sign me" - * digest = OpenSSL::Digest::SHA1.digest(doc) - * sig = dsa.syssign(digest) - * - * - */ -static VALUE -ossl_dsa_sign(VALUE self, VALUE data) -{ - DSA *dsa; - const BIGNUM *dsa_q; - unsigned int buf_len; - VALUE str; - - GetDSA(self, dsa); - DSA_get0_pqg(dsa, NULL, &dsa_q, NULL); - if (!dsa_q) - ossl_raise(eDSAError, "incomplete DSA"); - if (!DSA_PRIVATE(self, dsa)) - ossl_raise(eDSAError, "Private DSA key needed!"); - StringValue(data); - str = rb_str_new(0, DSA_size(dsa)); - if (!DSA_sign(0, (unsigned char *)RSTRING_PTR(data), RSTRING_LENINT(data), - (unsigned char *)RSTRING_PTR(str), - &buf_len, dsa)) { /* type is ignored (0) */ - ossl_raise(eDSAError, NULL); - } - rb_str_set_len(str, buf_len); - - return str; -} - -/* - * call-seq: - * dsa.sysverify(digest, sig) -> true | false - * - * Verifies whether the signature is valid given the message digest input. It - * does so by validating _sig_ using the public key of this DSA instance. - * - * === Parameters - * * _digest_ is a message digest of the original input data to be signed - * * _sig_ is a DSA signature value - * - * === Example - * dsa = OpenSSL::PKey::DSA.new(2048) - * doc = "Sign me" - * digest = OpenSSL::Digest::SHA1.digest(doc) - * sig = dsa.syssign(digest) - * puts dsa.sysverify(digest, sig) # => true - * - */ -static VALUE -ossl_dsa_verify(VALUE self, VALUE digest, VALUE sig) -{ - DSA *dsa; - int ret; - - GetDSA(self, dsa); - StringValue(digest); - StringValue(sig); - /* type is ignored (0) */ - ret = DSA_verify(0, (unsigned char *)RSTRING_PTR(digest), RSTRING_LENINT(digest), - (unsigned char *)RSTRING_PTR(sig), RSTRING_LENINT(sig), dsa); - if (ret < 0) { - ossl_raise(eDSAError, NULL); - } - else if (ret == 1) { - return Qtrue; - } - - return Qfalse; -} - /* * Document-method: OpenSSL::PKey::DSA#set_pqg * call-seq: @@ -630,20 +328,17 @@ Init_ossl_dsa(void) */ cDSA = rb_define_class_under(mPKey, "DSA", cPKey); - rb_define_singleton_method(cDSA, "generate", ossl_dsa_s_generate, 1); rb_define_method(cDSA, "initialize", ossl_dsa_initialize, -1); +#ifndef HAVE_EVP_PKEY_DUP rb_define_method(cDSA, "initialize_copy", ossl_dsa_initialize_copy, 1); +#endif rb_define_method(cDSA, "public?", ossl_dsa_is_public, 0); rb_define_method(cDSA, "private?", ossl_dsa_is_private, 0); - rb_define_method(cDSA, "to_text", ossl_dsa_to_text, 0); rb_define_method(cDSA, "export", ossl_dsa_export, -1); rb_define_alias(cDSA, "to_pem", "export"); rb_define_alias(cDSA, "to_s", "export"); rb_define_method(cDSA, "to_der", ossl_dsa_to_der, 0); - rb_define_method(cDSA, "public_key", ossl_dsa_to_public_key, 0); - rb_define_method(cDSA, "syssign", ossl_dsa_sign, 1); - rb_define_method(cDSA, "sysverify", ossl_dsa_verify, 2); DEF_OSSL_PKEY_BN(cDSA, dsa, p); DEF_OSSL_PKEY_BN(cDSA, dsa, q); diff --git a/ruby/ext/openssl/ossl_pkey_ec.c b/ruby/ext/openssl/ossl_pkey_ec.c index 8bb611248..dee215447 100644 --- a/ruby/ext/openssl/ossl_pkey_ec.c +++ b/ruby/ext/openssl/ossl_pkey_ec.c @@ -47,12 +47,7 @@ VALUE eEC_GROUP; VALUE cEC_POINT; VALUE eEC_POINT; -static ID s_GFp; -static ID s_GFp_simple; -static ID s_GFp_mont; -static ID s_GFp_nist; -static ID s_GF2m; -static ID s_GF2m_simple; +static ID s_GFp, s_GF2m; static ID ID_uncompressed; static ID ID_compressed; @@ -63,47 +58,6 @@ static ID id_i_group; static VALUE ec_group_new(const EC_GROUP *group); static VALUE ec_point_new(const EC_POINT *point, const EC_GROUP *group); -static VALUE ec_instance(VALUE klass, EC_KEY *ec) -{ - EVP_PKEY *pkey; - VALUE obj; - - if (!ec) { - return Qfalse; - } - obj = NewPKey(klass); - if (!(pkey = EVP_PKEY_new())) { - return Qfalse; - } - if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { - EVP_PKEY_free(pkey); - return Qfalse; - } - SetPKey(obj, pkey); - - return obj; -} - -VALUE ossl_ec_new(EVP_PKEY *pkey) -{ - VALUE obj; - - if (!pkey) { - obj = ec_instance(cEC, EC_KEY_new()); - } else { - obj = NewPKey(cEC); - if (EVP_PKEY_base_id(pkey) != EVP_PKEY_EC) { - ossl_raise(rb_eTypeError, "Not a EC key!"); - } - SetPKey(obj, pkey); - } - if (obj == Qfalse) { - ossl_raise(eECError, NULL); - } - - return obj; -} - /* * Creates a new EC_KEY on the EC group obj. arg can be an EC::Group or a String * representing an OID. @@ -150,16 +104,20 @@ ec_key_new_from_group(VALUE arg) static VALUE ossl_ec_key_s_generate(VALUE klass, VALUE arg) { + EVP_PKEY *pkey; EC_KEY *ec; VALUE obj; - ec = ec_key_new_from_group(arg); + obj = rb_obj_alloc(klass); - obj = ec_instance(klass, ec); - if (obj == Qfalse) { - EC_KEY_free(ec); - ossl_raise(eECError, NULL); + ec = ec_key_new_from_group(arg); + pkey = EVP_PKEY_new(); + if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec) != 1) { + EVP_PKEY_free(pkey); + EC_KEY_free(ec); + ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); } + RTYPEDDATA_DATA(obj) = pkey; if (!EC_KEY_generate_key(ec)) ossl_raise(eECError, "EC_KEY_generate_key"); @@ -182,81 +140,82 @@ static VALUE ossl_ec_key_initialize(int argc, VALUE *argv, VALUE self) { EVP_PKEY *pkey; EC_KEY *ec; + BIO *in; VALUE arg, pass; + int type; - GetPKey(self, pkey); - if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) - ossl_raise(eECError, "EC_KEY already initialized"); + TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); + if (pkey) + rb_raise(rb_eTypeError, "pkey already initialized"); rb_scan_args(argc, argv, "02", &arg, &pass); - if (NIL_P(arg)) { if (!(ec = EC_KEY_new())) - ossl_raise(eECError, NULL); - } else if (rb_obj_is_kind_of(arg, cEC)) { - EC_KEY *other_ec = NULL; - - GetEC(arg, other_ec); - if (!(ec = EC_KEY_dup(other_ec))) - ossl_raise(eECError, NULL); - } else if (rb_obj_is_kind_of(arg, cEC_GROUP)) { - ec = ec_key_new_from_group(arg); - } else { - BIO *in; - - pass = ossl_pem_passwd_value(pass); - in = ossl_obj2bio(&arg); + ossl_raise(eECError, "EC_KEY_new"); + goto legacy; + } + else if (rb_obj_is_kind_of(arg, cEC_GROUP)) { + ec = ec_key_new_from_group(arg); + goto legacy; + } - ec = PEM_read_bio_ECPrivateKey(in, NULL, ossl_pem_passwd_cb, (void *)pass); - if (!ec) { - OSSL_BIO_reset(in); - ec = PEM_read_bio_EC_PUBKEY(in, NULL, ossl_pem_passwd_cb, (void *)pass); - } - if (!ec) { - OSSL_BIO_reset(in); - ec = d2i_ECPrivateKey_bio(in, NULL); - } - if (!ec) { - OSSL_BIO_reset(in); - ec = d2i_EC_PUBKEY_bio(in, NULL); - } - BIO_free(in); + pass = ossl_pem_passwd_value(pass); + arg = ossl_to_der_if_possible(arg); + in = ossl_obj2bio(&arg); - if (!ec) { - ossl_clear_error(); - ec = ec_key_new_from_group(arg); - } + pkey = ossl_pkey_read_generic(in, pass); + BIO_free(in); + if (!pkey) { + ossl_clear_error(); + ec = ec_key_new_from_group(arg); + goto legacy; } - if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { - EC_KEY_free(ec); - ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); + type = EVP_PKEY_base_id(pkey); + if (type != EVP_PKEY_EC) { + EVP_PKEY_free(pkey); + rb_raise(eDSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); } + RTYPEDDATA_DATA(self) = pkey; + return self; + legacy: + pkey = EVP_PKEY_new(); + if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec) != 1) { + EVP_PKEY_free(pkey); + EC_KEY_free(ec); + ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); + } + RTYPEDDATA_DATA(self) = pkey; return self; } +#ifndef HAVE_EVP_PKEY_DUP static VALUE ossl_ec_key_initialize_copy(VALUE self, VALUE other) { EVP_PKEY *pkey; EC_KEY *ec, *ec_new; - GetPKey(self, pkey); - if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) - ossl_raise(eECError, "EC already initialized"); + TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); + if (pkey) + rb_raise(rb_eTypeError, "pkey already initialized"); GetEC(other, ec); ec_new = EC_KEY_dup(ec); if (!ec_new) ossl_raise(eECError, "EC_KEY_dup"); - if (!EVP_PKEY_assign_EC_KEY(pkey, ec_new)) { - EC_KEY_free(ec_new); - ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); + + pkey = EVP_PKEY_new(); + if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec_new) != 1) { + EC_KEY_free(ec_new); + ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); } + RTYPEDDATA_DATA(self) = pkey; return self; } +#endif /* * call-seq: @@ -289,6 +248,9 @@ ossl_ec_key_get_group(VALUE self) static VALUE ossl_ec_key_set_group(VALUE self, VALUE group_v) { +#if OSSL_OPENSSL_PREREQ(3, 0, 0) + rb_raise(ePKeyError, "pkeys are immutable on OpenSSL 3.0"); +#else EC_KEY *ec; EC_GROUP *group; @@ -299,6 +261,7 @@ ossl_ec_key_set_group(VALUE self, VALUE group_v) ossl_raise(eECError, "EC_KEY_set_group"); return group_v; +#endif } /* @@ -327,6 +290,9 @@ static VALUE ossl_ec_key_get_private_key(VALUE self) */ static VALUE ossl_ec_key_set_private_key(VALUE self, VALUE private_key) { +#if OSSL_OPENSSL_PREREQ(3, 0, 0) + rb_raise(ePKeyError, "pkeys are immutable on OpenSSL 3.0"); +#else EC_KEY *ec; BIGNUM *bn = NULL; @@ -340,11 +306,13 @@ static VALUE ossl_ec_key_set_private_key(VALUE self, VALUE private_key) case 0: if (bn == NULL) break; + /* fallthrough */ default: ossl_raise(eECError, "EC_KEY_set_private_key"); } return private_key; +#endif } /* @@ -373,6 +341,9 @@ static VALUE ossl_ec_key_get_public_key(VALUE self) */ static VALUE ossl_ec_key_set_public_key(VALUE self, VALUE public_key) { +#if OSSL_OPENSSL_PREREQ(3, 0, 0) + rb_raise(ePKeyError, "pkeys are immutable on OpenSSL 3.0"); +#else EC_KEY *ec; EC_POINT *point = NULL; @@ -386,11 +357,13 @@ static VALUE ossl_ec_key_set_public_key(VALUE self, VALUE public_key) case 0: if (point == NULL) break; + /* fallthrough */ default: ossl_raise(eECError, "EC_KEY_set_public_key"); } return public_key; +#endif } /* @@ -425,66 +398,6 @@ static VALUE ossl_ec_key_is_private(VALUE self) return EC_KEY_get0_private_key(ec) ? Qtrue : Qfalse; } -static VALUE ossl_ec_key_to_string(VALUE self, VALUE ciph, VALUE pass, int format) -{ - EC_KEY *ec; - BIO *out; - int i = -1; - int private = 0; - VALUE str; - const EVP_CIPHER *cipher = NULL; - - GetEC(self, ec); - - if (EC_KEY_get0_public_key(ec) == NULL) - ossl_raise(eECError, "can't export - no public key set"); - - if (EC_KEY_check_key(ec) != 1) - ossl_raise(eECError, "can't export - EC_KEY_check_key failed"); - - if (EC_KEY_get0_private_key(ec)) - private = 1; - - if (!NIL_P(ciph)) { - cipher = ossl_evp_get_cipherbyname(ciph); - pass = ossl_pem_passwd_value(pass); - } - - if (!(out = BIO_new(BIO_s_mem()))) - ossl_raise(eECError, "BIO_new(BIO_s_mem())"); - - switch(format) { - case EXPORT_PEM: - if (private) { - i = PEM_write_bio_ECPrivateKey(out, ec, cipher, NULL, 0, ossl_pem_passwd_cb, (void *)pass); - } else { - i = PEM_write_bio_EC_PUBKEY(out, ec); - } - - break; - case EXPORT_DER: - if (private) { - i = i2d_ECPrivateKey_bio(out, ec); - } else { - i = i2d_EC_PUBKEY_bio(out, ec); - } - - break; - default: - BIO_free(out); - ossl_raise(rb_eRuntimeError, "unknown format (internal error)"); - } - - if (i != 1) { - BIO_free(out); - ossl_raise(eECError, "outlen=%d", i); - } - - str = ossl_membio2str(out); - - return str; -} - /* * call-seq: * key.export([cipher, pass_phrase]) => String @@ -495,11 +408,16 @@ static VALUE ossl_ec_key_to_string(VALUE self, VALUE ciph, VALUE pass, int forma * instance. Note that encryption will only be effective for a private key, * public keys will always be encoded in plain text. */ -static VALUE ossl_ec_key_export(int argc, VALUE *argv, VALUE self) +static VALUE +ossl_ec_key_export(int argc, VALUE *argv, VALUE self) { - VALUE cipher, passwd; - rb_scan_args(argc, argv, "02", &cipher, &passwd); - return ossl_ec_key_to_string(self, cipher, passwd, EXPORT_PEM); + EC_KEY *ec; + + GetEC(self, ec); + if (EC_KEY_get0_private_key(ec)) + return ossl_pkey_export_traditional(argc, argv, self, 0); + else + return ossl_pkey_export_spki(self, 0); } /* @@ -508,36 +426,17 @@ static VALUE ossl_ec_key_export(int argc, VALUE *argv, VALUE self) * * See the OpenSSL documentation for i2d_ECPrivateKey_bio() */ -static VALUE ossl_ec_key_to_der(VALUE self) -{ - return ossl_ec_key_to_string(self, Qnil, Qnil, EXPORT_DER); -} - -/* - * call-seq: - * key.to_text => String - * - * See the OpenSSL documentation for EC_KEY_print() - */ -static VALUE ossl_ec_key_to_text(VALUE self) +static VALUE +ossl_ec_key_to_der(VALUE self) { EC_KEY *ec; - BIO *out; - VALUE str; GetEC(self, ec); - if (!(out = BIO_new(BIO_s_mem()))) { - ossl_raise(eECError, "BIO_new(BIO_s_mem())"); - } - if (!EC_KEY_print(out, ec, 0)) { - BIO_free(out); - ossl_raise(eECError, "EC_KEY_print"); - } - str = ossl_membio2str(out); - - return str; + if (EC_KEY_get0_private_key(ec)) + return ossl_pkey_export_traditional(0, NULL, self, 1); + else + return ossl_pkey_export_spki(self, 1); } - /* * call-seq: * key.generate_key! => self @@ -554,6 +453,9 @@ static VALUE ossl_ec_key_to_text(VALUE self) */ static VALUE ossl_ec_key_generate_key(VALUE self) { +#if OSSL_OPENSSL_PREREQ(3, 0, 0) + rb_raise(ePKeyError, "pkeys are immutable on OpenSSL 3.0"); +#else EC_KEY *ec; GetEC(self, ec); @@ -561,116 +463,50 @@ static VALUE ossl_ec_key_generate_key(VALUE self) ossl_raise(eECError, "EC_KEY_generate_key"); return self; +#endif } /* - * call-seq: - * key.check_key => true + * call-seq: + * key.check_key => true * - * Raises an exception if the key is invalid. + * Raises an exception if the key is invalid. * - * See the OpenSSL documentation for EC_KEY_check_key() + * See also the man page EVP_PKEY_public_check(3). */ static VALUE ossl_ec_key_check_key(VALUE self) { +#ifdef HAVE_EVP_PKEY_CHECK + EVP_PKEY *pkey; + EVP_PKEY_CTX *pctx; + int ret; + + GetPKey(self, pkey); + pctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); + if (!pctx) + ossl_raise(eDHError, "EVP_PKEY_CTX_new"); + ret = EVP_PKEY_public_check(pctx); + EVP_PKEY_CTX_free(pctx); + if (ret != 1) + ossl_raise(eECError, "EVP_PKEY_public_check"); +#else EC_KEY *ec; GetEC(self, ec); if (EC_KEY_check_key(ec) != 1) ossl_raise(eECError, "EC_KEY_check_key"); +#endif return Qtrue; } -/* - * call-seq: - * key.dh_compute_key(pubkey) => String - * - * See the OpenSSL documentation for ECDH_compute_key() - */ -static VALUE ossl_ec_key_dh_compute_key(VALUE self, VALUE pubkey) -{ - EC_KEY *ec; - EC_POINT *point; - int buf_len; - VALUE str; - - GetEC(self, ec); - GetECPoint(pubkey, point); - -/* BUG: need a way to figure out the maximum string size */ - buf_len = 1024; - str = rb_str_new(0, buf_len); -/* BUG: take KDF as a block */ - buf_len = ECDH_compute_key(RSTRING_PTR(str), buf_len, point, ec, NULL); - if (buf_len < 0) - ossl_raise(eECError, "ECDH_compute_key"); - - rb_str_resize(str, buf_len); - - return str; -} - -/* sign_setup */ - -/* - * call-seq: - * key.dsa_sign_asn1(data) => String - * - * See the OpenSSL documentation for ECDSA_sign() - */ -static VALUE ossl_ec_key_dsa_sign_asn1(VALUE self, VALUE data) -{ - EC_KEY *ec; - unsigned int buf_len; - VALUE str; - - GetEC(self, ec); - StringValue(data); - - if (EC_KEY_get0_private_key(ec) == NULL) - ossl_raise(eECError, "Private EC key needed!"); - - str = rb_str_new(0, ECDSA_size(ec)); - if (ECDSA_sign(0, (unsigned char *) RSTRING_PTR(data), RSTRING_LENINT(data), (unsigned char *) RSTRING_PTR(str), &buf_len, ec) != 1) - ossl_raise(eECError, "ECDSA_sign"); - rb_str_set_len(str, buf_len); - - return str; -} - -/* - * call-seq: - * key.dsa_verify_asn1(data, sig) => true or false - * - * See the OpenSSL documentation for ECDSA_verify() - */ -static VALUE ossl_ec_key_dsa_verify_asn1(VALUE self, VALUE data, VALUE sig) -{ - EC_KEY *ec; - - GetEC(self, ec); - StringValue(data); - StringValue(sig); - - switch (ECDSA_verify(0, (unsigned char *) RSTRING_PTR(data), RSTRING_LENINT(data), (unsigned char *) RSTRING_PTR(sig), (int)RSTRING_LEN(sig), ec)) { - case 1: return Qtrue; - case 0: return Qfalse; - default: break; - } - - ossl_raise(eECError, "ECDSA_verify"); - - UNREACHABLE; -} - /* * OpenSSL::PKey::EC::Group */ static void ossl_ec_group_free(void *ptr) { - EC_GROUP_clear_free(ptr); + EC_GROUP_free(ptr); } static const rb_data_type_t ossl_ec_group_type = { @@ -706,20 +542,11 @@ ec_group_new(const EC_GROUP *group) * call-seq: * OpenSSL::PKey::EC::Group.new(ec_group) * OpenSSL::PKey::EC::Group.new(pem_or_der_encoded) - * OpenSSL::PKey::EC::Group.new(ec_method) * OpenSSL::PKey::EC::Group.new(:GFp, bignum_p, bignum_a, bignum_b) * OpenSSL::PKey::EC::Group.new(:GF2m, bignum_p, bignum_a, bignum_b) * * Creates a new EC::Group object. * - * _ec_method_ is a symbol that represents an EC_METHOD. Currently the following - * are supported: - * - * * :GFp_simple - * * :GFp_mont - * * :GFp_nist - * * :GF2m_simple - * * If the first argument is :GFp or :GF2m, creates a new curve with given * parameters. */ @@ -734,29 +561,7 @@ static VALUE ossl_ec_group_initialize(int argc, VALUE *argv, VALUE self) switch (rb_scan_args(argc, argv, "13", &arg1, &arg2, &arg3, &arg4)) { case 1: - if (SYMBOL_P(arg1)) { - const EC_METHOD *method = NULL; - ID id = SYM2ID(arg1); - - if (id == s_GFp_simple) { - method = EC_GFp_simple_method(); - } else if (id == s_GFp_mont) { - method = EC_GFp_mont_method(); - } else if (id == s_GFp_nist) { - method = EC_GFp_nist_method(); -#if !defined(OPENSSL_NO_EC2M) - } else if (id == s_GF2m_simple) { - method = EC_GF2m_simple_method(); -#endif - } - - if (method) { - if ((group = EC_GROUP_new(method)) == NULL) - ossl_raise(eEC_GROUP, "EC_GROUP_new"); - } else { - ossl_raise(rb_eArgError, "unknown symbol, must be :GFp_simple, :GFp_mont, :GFp_nist or :GF2m_simple"); - } - } else if (rb_obj_is_kind_of(arg1, cEC_GROUP)) { + if (rb_obj_is_kind_of(arg1, cEC_GROUP)) { const EC_GROUP *arg1_group; GetECGroup(arg1, arg1_group); @@ -820,8 +625,7 @@ static VALUE ossl_ec_group_initialize(int argc, VALUE *argv, VALUE self) ossl_raise(rb_eArgError, "wrong number of arguments"); } - if (group == NULL) - ossl_raise(eEC_GROUP, ""); + ASSUME(group); RTYPEDDATA_DATA(self) = group; return self; @@ -1475,6 +1279,8 @@ static VALUE ossl_ec_point_is_on_curve(VALUE self) /* * call-seq: * point.make_affine! => self + * + * This method is deprecated and should not be used. This is a no-op. */ static VALUE ossl_ec_point_make_affine(VALUE self) { @@ -1484,8 +1290,11 @@ static VALUE ossl_ec_point_make_affine(VALUE self) GetECPoint(self, point); GetECPointGroup(self, group); + rb_warn("OpenSSL::PKey::EC::Point#make_affine! is deprecated"); +#if !OSSL_OPENSSL_PREREQ(3, 0, 0) if (EC_POINT_make_affine(group, point, ossl_bn_ctx) != 1) ossl_raise(cEC_POINT, "EC_POINT_make_affine"); +#endif return self; } @@ -1562,6 +1371,34 @@ ossl_ec_point_to_octet_string(VALUE self, VALUE conversion_form) return str; } +/* + * call-seq: + * point.add(point) => point + * + * Performs elliptic curve point addition. + */ +static VALUE ossl_ec_point_add(VALUE self, VALUE other) +{ + EC_POINT *point_self, *point_other, *point_result; + const EC_GROUP *group; + VALUE group_v = rb_attr_get(self, id_i_group); + VALUE result; + + GetECPoint(self, point_self); + GetECPoint(other, point_other); + GetECGroup(group_v, group); + + result = rb_obj_alloc(cEC_POINT); + ossl_ec_point_initialize(1, &group_v, result); + GetECPoint(result, point_result); + + if (EC_POINT_add(group, point_result, point_self, point_other, ossl_bn_ctx) != 1) { + ossl_raise(eEC_POINT, "EC_POINT_add"); + } + + return result; +} + /* * call-seq: * point.mul(bn1 [, bn2]) => point @@ -1603,6 +1440,10 @@ static VALUE ossl_ec_point_mul(int argc, VALUE *argv, VALUE self) if (EC_POINT_mul(group, point_result, bn_g, point_self, bn, ossl_bn_ctx) != 1) ossl_raise(eEC_POINT, NULL); } else { +#if (defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3) || defined(LIBRESSL_VERSION_NUMBER) + rb_raise(rb_eNotImpError, "calling #mul with arrays is not" \ + "supported by this OpenSSL version"); +#else /* * bignums | arg1[0] | arg1[1] | arg1[2] | ... * points | self | arg2[0] | arg2[1] | ... @@ -1617,6 +1458,9 @@ static VALUE ossl_ec_point_mul(int argc, VALUE *argv, VALUE self) if (RARRAY_LEN(arg1) != RARRAY_LEN(arg2) + 1) /* arg2 must be 1 larger */ ossl_raise(rb_eArgError, "bns must be 1 longer than points; see the documentation"); + rb_warning("OpenSSL::PKey::EC::Point#mul(ary, ary) is deprecated; " \ + "use #mul(bn) form instead"); + num = RARRAY_LEN(arg1); bns_tmp = rb_ary_tmp_new(num); bignums = ALLOCV_N(const BIGNUM *, tmp_b, num); @@ -1642,6 +1486,7 @@ static VALUE ossl_ec_point_mul(int argc, VALUE *argv, VALUE self) ALLOCV_END(tmp_b); ALLOCV_END(tmp_p); +#endif } return result; @@ -1682,10 +1527,6 @@ void Init_ossl_ec(void) s_GFp = rb_intern("GFp"); s_GF2m = rb_intern("GF2m"); - s_GFp_simple = rb_intern("GFp_simple"); - s_GFp_mont = rb_intern("GFp_mont"); - s_GFp_nist = rb_intern("GFp_nist"); - s_GF2m_simple = rb_intern("GF2m_simple"); ID_uncompressed = rb_intern("uncompressed"); ID_compressed = rb_intern("compressed"); @@ -1700,8 +1541,9 @@ void Init_ossl_ec(void) rb_define_singleton_method(cEC, "generate", ossl_ec_key_s_generate, 1); rb_define_method(cEC, "initialize", ossl_ec_key_initialize, -1); +#ifndef HAVE_EVP_PKEY_DUP rb_define_method(cEC, "initialize_copy", ossl_ec_key_initialize_copy, 1); -/* copy/dup/cmp */ +#endif rb_define_method(cEC, "group", ossl_ec_key_get_group, 0); rb_define_method(cEC, "group=", ossl_ec_key_set_group, 1); @@ -1724,15 +1566,9 @@ void Init_ossl_ec(void) rb_define_alias(cEC, "generate_key", "generate_key!"); rb_define_method(cEC, "check_key", ossl_ec_key_check_key, 0); - rb_define_method(cEC, "dh_compute_key", ossl_ec_key_dh_compute_key, 1); - rb_define_method(cEC, "dsa_sign_asn1", ossl_ec_key_dsa_sign_asn1, 1); - rb_define_method(cEC, "dsa_verify_asn1", ossl_ec_key_dsa_verify_asn1, 2); -/* do_sign/do_verify */ - rb_define_method(cEC, "export", ossl_ec_key_export, -1); rb_define_alias(cEC, "to_pem", "export"); rb_define_method(cEC, "to_der", ossl_ec_key_to_der, 0); - rb_define_method(cEC, "to_text", ossl_ec_key_to_text, 0); rb_define_alloc_func(cEC_GROUP, ossl_ec_group_alloc); @@ -1786,6 +1622,7 @@ void Init_ossl_ec(void) /* all the other methods */ rb_define_method(cEC_POINT, "to_octet_string", ossl_ec_point_to_octet_string, 1); + rb_define_method(cEC_POINT, "add", ossl_ec_point_add, 1); rb_define_method(cEC_POINT, "mul", ossl_ec_point_mul, -1); id_i_group = rb_intern("@group"); diff --git a/ruby/ext/openssl/ossl_pkey_rsa.c b/ruby/ext/openssl/ossl_pkey_rsa.c index 4800fb271..4d66010f4 100644 --- a/ruby/ext/openssl/ossl_pkey_rsa.c +++ b/ruby/ext/openssl/ossl_pkey_rsa.c @@ -26,10 +26,10 @@ static inline int RSA_HAS_PRIVATE(RSA *rsa) { - const BIGNUM *p, *q; + const BIGNUM *e, *d; - RSA_get0_factors(rsa, &p, &q); - return p && q; /* d? why? */ + RSA_get0_key(rsa, NULL, &e, &d); + return e && d; } static inline int @@ -44,175 +44,31 @@ RSA_PRIVATE(VALUE obj, RSA *rsa) VALUE cRSA; VALUE eRSAError; -/* - * Public - */ -static VALUE -rsa_instance(VALUE klass, RSA *rsa) -{ - EVP_PKEY *pkey; - VALUE obj; - - if (!rsa) { - return Qfalse; - } - obj = NewPKey(klass); - if (!(pkey = EVP_PKEY_new())) { - return Qfalse; - } - if (!EVP_PKEY_assign_RSA(pkey, rsa)) { - EVP_PKEY_free(pkey); - return Qfalse; - } - SetPKey(obj, pkey); - - return obj; -} - -VALUE -ossl_rsa_new(EVP_PKEY *pkey) -{ - VALUE obj; - - if (!pkey) { - obj = rsa_instance(cRSA, RSA_new()); - } - else { - obj = NewPKey(cRSA); - if (EVP_PKEY_base_id(pkey) != EVP_PKEY_RSA) { - ossl_raise(rb_eTypeError, "Not a RSA key!"); - } - SetPKey(obj, pkey); - } - if (obj == Qfalse) { - ossl_raise(eRSAError, NULL); - } - - return obj; -} - /* * Private */ -struct rsa_blocking_gen_arg { - RSA *rsa; - BIGNUM *e; - int size; - BN_GENCB *cb; - int result; -}; - -static void * -rsa_blocking_gen(void *arg) -{ - struct rsa_blocking_gen_arg *gen = (struct rsa_blocking_gen_arg *)arg; - gen->result = RSA_generate_key_ex(gen->rsa, gen->size, gen->e, gen->cb); - return 0; -} - -static RSA * -rsa_generate(int size, unsigned long exp) -{ - int i; - struct ossl_generate_cb_arg cb_arg = { 0 }; - struct rsa_blocking_gen_arg gen_arg; - RSA *rsa = RSA_new(); - BIGNUM *e = BN_new(); - BN_GENCB *cb = BN_GENCB_new(); - - if (!rsa || !e || !cb) { - RSA_free(rsa); - BN_free(e); - BN_GENCB_free(cb); - return NULL; - } - for (i = 0; i < (int)sizeof(exp) * 8; ++i) { - if (exp & (1UL << i)) { - if (BN_set_bit(e, i) == 0) { - BN_free(e); - RSA_free(rsa); - BN_GENCB_free(cb); - return NULL; - } - } - } - - if (rb_block_given_p()) - cb_arg.yield = 1; - BN_GENCB_set(cb, ossl_generate_cb_2, &cb_arg); - gen_arg.rsa = rsa; - gen_arg.e = e; - gen_arg.size = size; - gen_arg.cb = cb; - if (cb_arg.yield == 1) { - /* we cannot release GVL when callback proc is supplied */ - rsa_blocking_gen(&gen_arg); - } else { - /* there's a chance to unblock */ - rb_thread_call_without_gvl(rsa_blocking_gen, &gen_arg, ossl_generate_cb_stop, &cb_arg); - } - - BN_GENCB_free(cb); - BN_free(e); - if (!gen_arg.result) { - RSA_free(rsa); - if (cb_arg.state) { - /* must clear OpenSSL error stack */ - ossl_clear_error(); - rb_jump_tag(cb_arg.state); - } - return NULL; - } - - return rsa; -} - /* * call-seq: - * RSA.generate(size) => RSA instance - * RSA.generate(size, exponent) => RSA instance + * RSA.new -> rsa + * RSA.new(encoded_key [, passphrase]) -> rsa + * RSA.new(encoded_key) { passphrase } -> rsa + * RSA.new(size [, exponent]) -> rsa * - * Generates an RSA keypair. _size_ is an integer representing the desired key - * size. Keys smaller than 1024 should be considered insecure. _exponent_ is - * an odd number normally 3, 17, or 65537. - */ -static VALUE -ossl_rsa_s_generate(int argc, VALUE *argv, VALUE klass) -{ -/* why does this method exist? why can't initialize take an optional exponent? */ - RSA *rsa; - VALUE size, exp; - VALUE obj; - - rb_scan_args(argc, argv, "11", &size, &exp); - - rsa = rsa_generate(NUM2INT(size), NIL_P(exp) ? RSA_F4 : NUM2ULONG(exp)); /* err handled by rsa_instance */ - obj = rsa_instance(klass, rsa); - - if (obj == Qfalse) { - RSA_free(rsa); - ossl_raise(eRSAError, NULL); - } - - return obj; -} - -/* - * call-seq: - * RSA.new(key_size) => RSA instance - * RSA.new(encoded_key) => RSA instance - * RSA.new(encoded_key, pass_phrase) => RSA instance + * Generates or loads an \RSA keypair. * - * Generates or loads an RSA keypair. If an integer _key_size_ is given it - * represents the desired key size. Keys less than 1024 bits should be - * considered insecure. + * If called without arguments, creates a new instance with no key components + * set. They can be set individually by #set_key, #set_factors, and + * #set_crt_params. * - * A key can instead be loaded from an _encoded_key_ which must be PEM or DER - * encoded. A _pass_phrase_ can be used to decrypt the key. If none is given - * OpenSSL will prompt for the pass phrase. + * If called with a String, tries to parse as DER or PEM encoding of an \RSA key. + * Note that, if _passphrase_ is not specified but the key is encrypted with a + * passphrase, \OpenSSL will prompt for it. + * See also OpenSSL::PKey.read which can parse keys of any kinds. * - * = Examples + * If called with a number, generates a new key pair. This form works as an + * alias of RSA.generate. * + * Examples: * OpenSSL::PKey::RSA.new 2048 * OpenSSL::PKey::RSA.new File.read 'rsa.pem' * OpenSSL::PKey::RSA.new File.read('rsa.pem'), 'my pass phrase' @@ -222,74 +78,91 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) { EVP_PKEY *pkey; RSA *rsa; - BIO *in; + BIO *in = NULL; VALUE arg, pass; + int type; - GetPKey(self, pkey); - if(rb_scan_args(argc, argv, "02", &arg, &pass) == 0) { + TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); + if (pkey) + rb_raise(rb_eTypeError, "pkey already initialized"); + + /* The RSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ + rb_scan_args(argc, argv, "02", &arg, &pass); + if (argc == 0) { rsa = RSA_new(); + if (!rsa) + ossl_raise(eRSAError, "RSA_new"); + goto legacy; } - else if (RB_INTEGER_TYPE_P(arg)) { - rsa = rsa_generate(NUM2INT(arg), NIL_P(pass) ? RSA_F4 : NUM2ULONG(pass)); - if (!rsa) ossl_raise(eRSAError, NULL); - } - else { - pass = ossl_pem_passwd_value(pass); - arg = ossl_to_der_if_possible(arg); - in = ossl_obj2bio(&arg); - rsa = PEM_read_bio_RSAPrivateKey(in, NULL, ossl_pem_passwd_cb, (void *)pass); - if (!rsa) { - OSSL_BIO_reset(in); - rsa = PEM_read_bio_RSA_PUBKEY(in, NULL, NULL, NULL); - } - if (!rsa) { - OSSL_BIO_reset(in); - rsa = d2i_RSAPrivateKey_bio(in, NULL); - } - if (!rsa) { - OSSL_BIO_reset(in); - rsa = d2i_RSA_PUBKEY_bio(in, NULL); - } - if (!rsa) { - OSSL_BIO_reset(in); - rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL); - } - if (!rsa) { - OSSL_BIO_reset(in); - rsa = d2i_RSAPublicKey_bio(in, NULL); - } - BIO_free(in); - if (!rsa) { - ossl_raise(eRSAError, "Neither PUB key nor PRIV key"); - } - } - if (!EVP_PKEY_assign_RSA(pkey, rsa)) { - RSA_free(rsa); - ossl_raise(eRSAError, NULL); + + pass = ossl_pem_passwd_value(pass); + arg = ossl_to_der_if_possible(arg); + in = ossl_obj2bio(&arg); + + /* First try RSAPublicKey format */ + rsa = d2i_RSAPublicKey_bio(in, NULL); + if (rsa) + goto legacy; + OSSL_BIO_reset(in); + rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL); + if (rsa) + goto legacy; + OSSL_BIO_reset(in); + + /* Use the generic routine */ + pkey = ossl_pkey_read_generic(in, pass); + BIO_free(in); + if (!pkey) + ossl_raise(eRSAError, "Neither PUB key nor PRIV key"); + + type = EVP_PKEY_base_id(pkey); + if (type != EVP_PKEY_RSA) { + EVP_PKEY_free(pkey); + rb_raise(eRSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); } + RTYPEDDATA_DATA(self) = pkey; + return self; + legacy: + BIO_free(in); + pkey = EVP_PKEY_new(); + if (!pkey || EVP_PKEY_assign_RSA(pkey, rsa) != 1) { + EVP_PKEY_free(pkey); + RSA_free(rsa); + ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); + } + RTYPEDDATA_DATA(self) = pkey; return self; } +#ifndef HAVE_EVP_PKEY_DUP static VALUE ossl_rsa_initialize_copy(VALUE self, VALUE other) { EVP_PKEY *pkey; RSA *rsa, *rsa_new; - GetPKey(self, pkey); - if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) - ossl_raise(eRSAError, "RSA already initialized"); + TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); + if (pkey) + rb_raise(rb_eTypeError, "pkey already initialized"); GetRSA(other, rsa); - rsa_new = ASN1_dup((i2d_of_void *)i2d_RSAPrivateKey, (d2i_of_void *)d2i_RSAPrivateKey, (char *)rsa); + rsa_new = (RSA *)ASN1_dup((i2d_of_void *)i2d_RSAPrivateKey, + (d2i_of_void *)d2i_RSAPrivateKey, + (char *)rsa); if (!rsa_new) ossl_raise(eRSAError, "ASN1_dup"); - EVP_PKEY_assign_RSA(pkey, rsa_new); + pkey = EVP_PKEY_new(); + if (!pkey || EVP_PKEY_assign_RSA(pkey, rsa_new) != 1) { + RSA_free(rsa_new); + ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); + } + RTYPEDDATA_DATA(self) = pkey; return self; } +#endif /* * call-seq: @@ -327,6 +200,21 @@ ossl_rsa_is_private(VALUE self) return RSA_PRIVATE(self, rsa) ? Qtrue : Qfalse; } +static int +can_export_rsaprivatekey(VALUE self) +{ + RSA *rsa; + const BIGNUM *n, *e, *d, *p, *q, *dmp1, *dmq1, *iqmp; + + GetRSA(self, rsa); + + RSA_get0_key(rsa, &n, &e, &d); + RSA_get0_factors(rsa, &p, &q); + RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp); + + return n && e && d && p && q && dmp1 && dmq1 && iqmp; +} + /* * call-seq: * rsa.export([cipher, pass_phrase]) => PEM-format String @@ -340,37 +228,10 @@ ossl_rsa_is_private(VALUE self) static VALUE ossl_rsa_export(int argc, VALUE *argv, VALUE self) { - RSA *rsa; - BIO *out; - const EVP_CIPHER *ciph = NULL; - VALUE cipher, pass, str; - - GetRSA(self, rsa); - - rb_scan_args(argc, argv, "02", &cipher, &pass); - - if (!NIL_P(cipher)) { - ciph = ossl_evp_get_cipherbyname(cipher); - pass = ossl_pem_passwd_value(pass); - } - if (!(out = BIO_new(BIO_s_mem()))) { - ossl_raise(eRSAError, NULL); - } - if (RSA_HAS_PRIVATE(rsa)) { - if (!PEM_write_bio_RSAPrivateKey(out, rsa, ciph, NULL, 0, - ossl_pem_passwd_cb, (void *)pass)) { - BIO_free(out); - ossl_raise(eRSAError, NULL); - } - } else { - if (!PEM_write_bio_RSA_PUBKEY(out, rsa)) { - BIO_free(out); - ossl_raise(eRSAError, NULL); - } - } - str = ossl_membio2str(out); - - return str; + if (can_export_rsaprivatekey(self)) + return ossl_pkey_export_traditional(argc, argv, self, 0); + else + return ossl_pkey_export_spki(self, 0); } /* @@ -382,158 +243,10 @@ ossl_rsa_export(int argc, VALUE *argv, VALUE self) static VALUE ossl_rsa_to_der(VALUE self) { - RSA *rsa; - int (*i2d_func)(const RSA *, unsigned char **); - unsigned char *p; - long len; - VALUE str; - - GetRSA(self, rsa); - if (RSA_HAS_PRIVATE(rsa)) - i2d_func = i2d_RSAPrivateKey; + if (can_export_rsaprivatekey(self)) + return ossl_pkey_export_traditional(0, NULL, self, 1); else - i2d_func = (int (*)(const RSA *, unsigned char **))i2d_RSA_PUBKEY; - if((len = i2d_func(rsa, NULL)) <= 0) - ossl_raise(eRSAError, NULL); - str = rb_str_new(0, len); - p = (unsigned char *)RSTRING_PTR(str); - if(i2d_func(rsa, &p) < 0) - ossl_raise(eRSAError, NULL); - ossl_str_adjust(str, p); - - return str; -} - -/* - * call-seq: - * rsa.public_encrypt(string) => String - * rsa.public_encrypt(string, padding) => String - * - * Encrypt _string_ with the public key. _padding_ defaults to PKCS1_PADDING. - * The encrypted string output can be decrypted using #private_decrypt. - */ -static VALUE -ossl_rsa_public_encrypt(int argc, VALUE *argv, VALUE self) -{ - RSA *rsa; - const BIGNUM *rsa_n; - int buf_len, pad; - VALUE str, buffer, padding; - - GetRSA(self, rsa); - RSA_get0_key(rsa, &rsa_n, NULL, NULL); - if (!rsa_n) - ossl_raise(eRSAError, "incomplete RSA"); - rb_scan_args(argc, argv, "11", &buffer, &padding); - pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding); - StringValue(buffer); - str = rb_str_new(0, RSA_size(rsa)); - buf_len = RSA_public_encrypt(RSTRING_LENINT(buffer), (unsigned char *)RSTRING_PTR(buffer), - (unsigned char *)RSTRING_PTR(str), rsa, pad); - if (buf_len < 0) ossl_raise(eRSAError, NULL); - rb_str_set_len(str, buf_len); - - return str; -} - -/* - * call-seq: - * rsa.public_decrypt(string) => String - * rsa.public_decrypt(string, padding) => String - * - * Decrypt _string_, which has been encrypted with the private key, with the - * public key. _padding_ defaults to PKCS1_PADDING. - */ -static VALUE -ossl_rsa_public_decrypt(int argc, VALUE *argv, VALUE self) -{ - RSA *rsa; - const BIGNUM *rsa_n; - int buf_len, pad; - VALUE str, buffer, padding; - - GetRSA(self, rsa); - RSA_get0_key(rsa, &rsa_n, NULL, NULL); - if (!rsa_n) - ossl_raise(eRSAError, "incomplete RSA"); - rb_scan_args(argc, argv, "11", &buffer, &padding); - pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding); - StringValue(buffer); - str = rb_str_new(0, RSA_size(rsa)); - buf_len = RSA_public_decrypt(RSTRING_LENINT(buffer), (unsigned char *)RSTRING_PTR(buffer), - (unsigned char *)RSTRING_PTR(str), rsa, pad); - if (buf_len < 0) ossl_raise(eRSAError, NULL); - rb_str_set_len(str, buf_len); - - return str; -} - -/* - * call-seq: - * rsa.private_encrypt(string) => String - * rsa.private_encrypt(string, padding) => String - * - * Encrypt _string_ with the private key. _padding_ defaults to PKCS1_PADDING. - * The encrypted string output can be decrypted using #public_decrypt. - */ -static VALUE -ossl_rsa_private_encrypt(int argc, VALUE *argv, VALUE self) -{ - RSA *rsa; - const BIGNUM *rsa_n; - int buf_len, pad; - VALUE str, buffer, padding; - - GetRSA(self, rsa); - RSA_get0_key(rsa, &rsa_n, NULL, NULL); - if (!rsa_n) - ossl_raise(eRSAError, "incomplete RSA"); - if (!RSA_PRIVATE(self, rsa)) - ossl_raise(eRSAError, "private key needed."); - rb_scan_args(argc, argv, "11", &buffer, &padding); - pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding); - StringValue(buffer); - str = rb_str_new(0, RSA_size(rsa)); - buf_len = RSA_private_encrypt(RSTRING_LENINT(buffer), (unsigned char *)RSTRING_PTR(buffer), - (unsigned char *)RSTRING_PTR(str), rsa, pad); - if (buf_len < 0) ossl_raise(eRSAError, NULL); - rb_str_set_len(str, buf_len); - - return str; -} - -/* - * call-seq: - * rsa.private_decrypt(string) => String - * rsa.private_decrypt(string, padding) => String - * - * Decrypt _string_, which has been encrypted with the public key, with the - * private key. _padding_ defaults to PKCS1_PADDING. - */ -static VALUE -ossl_rsa_private_decrypt(int argc, VALUE *argv, VALUE self) -{ - RSA *rsa; - const BIGNUM *rsa_n; - int buf_len, pad; - VALUE str, buffer, padding; - - GetRSA(self, rsa); - RSA_get0_key(rsa, &rsa_n, NULL, NULL); - if (!rsa_n) - ossl_raise(eRSAError, "incomplete RSA"); - if (!RSA_PRIVATE(self, rsa)) - ossl_raise(eRSAError, "private key needed."); - rb_scan_args(argc, argv, "11", &buffer, &padding); - pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding); - StringValue(buffer); - str = rb_str_new(0, RSA_size(rsa)); - buf_len = RSA_private_decrypt(RSTRING_LENINT(buffer), (unsigned char *)RSTRING_PTR(buffer), - (unsigned char *)RSTRING_PTR(str), rsa, pad); - if (buf_len < 0) ossl_raise(eRSAError, NULL); - rb_str_set_len(str, buf_len); - - return str; + return ossl_pkey_export_spki(self, 1); } /* @@ -565,7 +278,7 @@ ossl_rsa_private_decrypt(int argc, VALUE *argv, VALUE self) * data = "Sign me!" * pkey = OpenSSL::PKey::RSA.new(2048) * signature = pkey.sign_pss("SHA256", data, salt_length: :max, mgf1_hash: "SHA256") - * pub_key = pkey.public_key + * pub_key = OpenSSL::PKey.read(pkey.public_to_der) * puts pub_key.verify_pss("SHA256", signature, data, * salt_length: :auto, mgf1_hash: "SHA256") # => true */ @@ -762,88 +475,6 @@ ossl_rsa_get_params(VALUE self) return hash; } -/* - * call-seq: - * rsa.to_text => String - * - * THIS METHOD IS INSECURE, PRIVATE INFORMATION CAN LEAK OUT!!! - * - * Dumps all parameters of a keypair to a String - * - * Don't use :-)) (It's up to you) - */ -static VALUE -ossl_rsa_to_text(VALUE self) -{ - RSA *rsa; - BIO *out; - VALUE str; - - GetRSA(self, rsa); - if (!(out = BIO_new(BIO_s_mem()))) { - ossl_raise(eRSAError, NULL); - } - if (!RSA_print(out, rsa, 0)) { /* offset = 0 */ - BIO_free(out); - ossl_raise(eRSAError, NULL); - } - str = ossl_membio2str(out); - - return str; -} - -/* - * call-seq: - * rsa.public_key -> RSA - * - * Makes new RSA instance containing the public key from the private key. - */ -static VALUE -ossl_rsa_to_public_key(VALUE self) -{ - EVP_PKEY *pkey; - RSA *rsa; - VALUE obj; - - GetPKeyRSA(self, pkey); - /* err check performed by rsa_instance */ - rsa = RSAPublicKey_dup(EVP_PKEY_get0_RSA(pkey)); - obj = rsa_instance(rb_obj_class(self), rsa); - if (obj == Qfalse) { - RSA_free(rsa); - ossl_raise(eRSAError, NULL); - } - return obj; -} - -/* - * TODO: Test me - -static VALUE -ossl_rsa_blinding_on(VALUE self) -{ - RSA *rsa; - - GetRSA(self, rsa); - - if (RSA_blinding_on(rsa, ossl_bn_ctx) != 1) { - ossl_raise(eRSAError, NULL); - } - return self; -} - -static VALUE -ossl_rsa_blinding_off(VALUE self) -{ - RSA *rsa; - - GetRSA(self, rsa); - RSA_blinding_off(rsa); - - return self; -} - */ - /* * Document-method: OpenSSL::PKey::RSA#set_key * call-seq: @@ -905,22 +536,17 @@ Init_ossl_rsa(void) */ cRSA = rb_define_class_under(mPKey, "RSA", cPKey); - rb_define_singleton_method(cRSA, "generate", ossl_rsa_s_generate, -1); rb_define_method(cRSA, "initialize", ossl_rsa_initialize, -1); +#ifndef HAVE_EVP_PKEY_DUP rb_define_method(cRSA, "initialize_copy", ossl_rsa_initialize_copy, 1); +#endif rb_define_method(cRSA, "public?", ossl_rsa_is_public, 0); rb_define_method(cRSA, "private?", ossl_rsa_is_private, 0); - rb_define_method(cRSA, "to_text", ossl_rsa_to_text, 0); rb_define_method(cRSA, "export", ossl_rsa_export, -1); rb_define_alias(cRSA, "to_pem", "export"); rb_define_alias(cRSA, "to_s", "export"); rb_define_method(cRSA, "to_der", ossl_rsa_to_der, 0); - rb_define_method(cRSA, "public_key", ossl_rsa_to_public_key, 0); - rb_define_method(cRSA, "public_encrypt", ossl_rsa_public_encrypt, -1); - rb_define_method(cRSA, "public_decrypt", ossl_rsa_public_decrypt, -1); - rb_define_method(cRSA, "private_encrypt", ossl_rsa_private_encrypt, -1); - rb_define_method(cRSA, "private_decrypt", ossl_rsa_private_decrypt, -1); rb_define_method(cRSA, "sign_pss", ossl_rsa_sign_pss, -1); rb_define_method(cRSA, "verify_pss", ossl_rsa_verify_pss, -1); @@ -938,11 +564,6 @@ Init_ossl_rsa(void) rb_define_method(cRSA, "params", ossl_rsa_get_params, 0); - DefRSAConst(PKCS1_PADDING); - DefRSAConst(SSLV23_PADDING); - DefRSAConst(NO_PADDING); - DefRSAConst(PKCS1_OAEP_PADDING); - /* * TODO: Test it rb_define_method(cRSA, "blinding_on!", ossl_rsa_blinding_on, 0); diff --git a/ruby/ext/openssl/ossl_rand.c b/ruby/ext/openssl/ossl_rand.c index 4a4f9dd5b..659dc818b 100644 --- a/ruby/ext/openssl/ossl_rand.c +++ b/ruby/ext/openssl/ossl_rand.c @@ -120,36 +120,6 @@ ossl_rand_bytes(VALUE self, VALUE len) return str; } -#if defined(HAVE_RAND_PSEUDO_BYTES) -/* - * call-seq: - * pseudo_bytes(length) -> string - * - * Generates a String with _length_ number of pseudo-random bytes. - * - * Pseudo-random byte sequences generated by ::pseudo_bytes will be unique if - * they are of sufficient length, but are not necessarily unpredictable. - * - * === Example - * - * OpenSSL::Random.pseudo_bytes(12) - * #=> "..." - */ -static VALUE -ossl_rand_pseudo_bytes(VALUE self, VALUE len) -{ - VALUE str; - int n = NUM2INT(len); - - str = rb_str_new(0, n); - if (RAND_pseudo_bytes((unsigned char *)RSTRING_PTR(str), n) < 1) { - ossl_raise(eRandomError, NULL); - } - - return str; -} -#endif - #ifdef HAVE_RAND_EGD /* * call-seq: @@ -219,8 +189,8 @@ Init_ossl_rand(void) rb_define_module_function(mRandom, "load_random_file", ossl_rand_load_file, 1); rb_define_module_function(mRandom, "write_random_file", ossl_rand_write_file, 1); rb_define_module_function(mRandom, "random_bytes", ossl_rand_bytes, 1); -#if defined(HAVE_RAND_PSEUDO_BYTES) - rb_define_module_function(mRandom, "pseudo_bytes", ossl_rand_pseudo_bytes, 1); +#if OPENSSL_VERSION_NUMBER < 0x10101000 || defined(LIBRESSL_VERSION_NUMBER) + rb_define_alias(rb_singleton_class(mRandom), "pseudo_bytes", "random_bytes"); #endif #ifdef HAVE_RAND_EGD rb_define_module_function(mRandom, "egd", ossl_rand_egd, 1); diff --git a/ruby/ext/openssl/ossl_ssl.c b/ruby/ext/openssl/ossl_ssl.c index de0556f54..9a0682a7c 100644 --- a/ruby/ext/openssl/ossl_ssl.c +++ b/ruby/ext/openssl/ossl_ssl.c @@ -13,6 +13,12 @@ #define numberof(ary) (int)(sizeof(ary)/sizeof((ary)[0])) +#if !defined(TLS1_3_VERSION) && \ + defined(LIBRESSL_VERSION_NUMBER) && \ + LIBRESSL_VERSION_NUMBER >= 0x3020000fL +# define TLS1_3_VERSION 0x0304 +#endif + #ifdef _WIN32 # define TO_SOCKET(s) _get_osfhandle(s) #else @@ -32,14 +38,14 @@ VALUE cSSLSocket; static VALUE eSSLErrorWaitReadable; static VALUE eSSLErrorWaitWritable; -static ID id_call, ID_callback_state, id_tmp_dh_callback, id_tmp_ecdh_callback, - id_npn_protocols_encoded; +static ID id_call, ID_callback_state, id_tmp_dh_callback, + id_npn_protocols_encoded, id_each; static VALUE sym_exception, sym_wait_readable, sym_wait_writable; static ID id_i_cert_store, id_i_ca_file, id_i_ca_path, id_i_verify_mode, id_i_verify_depth, id_i_verify_callback, id_i_client_ca, id_i_renegotiation_cb, id_i_cert, id_i_key, id_i_extra_chain_cert, - id_i_client_cert_cb, id_i_tmp_ecdh_callback, id_i_timeout, + id_i_client_cert_cb, id_i_timeout, id_i_session_id_context, id_i_session_get_cb, id_i_session_new_cb, id_i_session_remove_cb, id_i_npn_select_cb, id_i_npn_protocols, id_i_alpn_select_cb, id_i_alpn_protocols, id_i_servername_cb, @@ -49,25 +55,24 @@ static ID id_i_io, id_i_context, id_i_hostname; static int ossl_ssl_ex_vcb_idx; static int ossl_ssl_ex_ptr_idx; static int ossl_sslctx_ex_ptr_idx; -#if !defined(HAVE_X509_STORE_UP_REF) -static int ossl_sslctx_ex_store_p; -#endif static void -ossl_sslctx_free(void *ptr) +ossl_sslctx_mark(void *ptr) { SSL_CTX *ctx = ptr; -#if !defined(HAVE_X509_STORE_UP_REF) - if (ctx && SSL_CTX_get_ex_data(ctx, ossl_sslctx_ex_store_p)) - ctx->cert_store = NULL; -#endif - SSL_CTX_free(ctx); + rb_gc_mark((VALUE)SSL_CTX_get_ex_data(ctx, ossl_sslctx_ex_ptr_idx)); +} + +static void +ossl_sslctx_free(void *ptr) +{ + SSL_CTX_free(ptr); } static const rb_data_type_t ossl_sslctx_type = { "OpenSSL/SSL/CTX", { - 0, ossl_sslctx_free, + ossl_sslctx_mark, ossl_sslctx_free, }, 0, 0, RUBY_TYPED_FREE_IMMEDIATELY, }; @@ -83,7 +88,7 @@ ossl_sslctx_s_alloc(VALUE klass) VALUE obj; obj = TypedData_Wrap_Struct(klass, &ossl_sslctx_type, 0); -#if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER) +#if OPENSSL_VERSION_NUMBER >= 0x10100000 || defined(LIBRESSL_VERSION_NUMBER) ctx = SSL_CTX_new(TLS_method()); #else ctx = SSL_CTX_new(SSLv23_method()); @@ -95,14 +100,15 @@ ossl_sslctx_s_alloc(VALUE klass) RTYPEDDATA_DATA(obj) = ctx; SSL_CTX_set_ex_data(ctx, ossl_sslctx_ex_ptr_idx, (void *)obj); -#if !defined(OPENSSL_NO_EC) && defined(HAVE_SSL_CTX_SET_ECDH_AUTO) +#if !defined(OPENSSL_NO_EC) && OPENSSL_VERSION_NUMBER < 0x10100000 && \ + !defined(LIBRESSL_VERSION_NUMBER) /* We use SSL_CTX_set1_curves_list() to specify the curve used in ECDH. It * allows to specify multiple curve names and OpenSSL will select * automatically from them. In OpenSSL 1.0.2, the automatic selection has to - * be enabled explicitly. But OpenSSL 1.1.0 removed the knob and it is - * always enabled. To uniform the behavior, we enable the automatic - * selection also in 1.0.2. Users can still disable ECDH by removing ECDH - * cipher suites by SSLContext#ciphers=. */ + * be enabled explicitly. OpenSSL 1.1.0 and LibreSSL 2.6.1 removed the knob + * and it is always enabled. To uniform the behavior, we enable the + * automatic selection also in 1.0.2. Users can still disable ECDH by + * removing ECDH cipher suites by SSLContext#ciphers=. */ if (!SSL_CTX_set_ecdh_auto(ctx, 1)) ossl_raise(eSSLError, "SSL_CTX_set_ecdh_auto"); #endif @@ -231,8 +237,7 @@ ossl_client_cert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey) return 1; } -#if !defined(OPENSSL_NO_DH) || \ - !defined(OPENSSL_NO_EC) && defined(HAVE_SSL_CTX_SET_TMP_ECDH_CALLBACK) +#if !defined(OPENSSL_NO_DH) struct tmp_dh_callback_args { VALUE ssl_obj; ID id; @@ -241,22 +246,23 @@ struct tmp_dh_callback_args { int keylength; }; -static EVP_PKEY * -ossl_call_tmp_dh_callback(struct tmp_dh_callback_args *args) +static VALUE +ossl_call_tmp_dh_callback(VALUE arg) { + struct tmp_dh_callback_args *args = (struct tmp_dh_callback_args *)arg; VALUE cb, dh; EVP_PKEY *pkey; cb = rb_funcall(args->ssl_obj, args->id, 0); if (NIL_P(cb)) - return NULL; + return (VALUE)NULL; dh = rb_funcall(cb, id_call, 3, args->ssl_obj, INT2NUM(args->is_export), INT2NUM(args->keylength)); pkey = GetPKeyPtr(dh); if (EVP_PKEY_base_id(pkey) != args->type) - return NULL; + return (VALUE)NULL; - return pkey; + return (VALUE)pkey; } #endif @@ -276,7 +282,7 @@ ossl_tmp_dh_callback(SSL *ssl, int is_export, int keylength) args.keylength = keylength; args.type = EVP_PKEY_DH; - pkey = (EVP_PKEY *)rb_protect((VALUE (*)(VALUE))ossl_call_tmp_dh_callback, + pkey = (EVP_PKEY *)rb_protect(ossl_call_tmp_dh_callback, (VALUE)&args, &state); if (state) { rb_ivar_set(rb_ssl, ID_callback_state, INT2NUM(state)); @@ -289,35 +295,6 @@ ossl_tmp_dh_callback(SSL *ssl, int is_export, int keylength) } #endif /* OPENSSL_NO_DH */ -#if !defined(OPENSSL_NO_EC) && defined(HAVE_SSL_CTX_SET_TMP_ECDH_CALLBACK) -static EC_KEY * -ossl_tmp_ecdh_callback(SSL *ssl, int is_export, int keylength) -{ - VALUE rb_ssl; - EVP_PKEY *pkey; - struct tmp_dh_callback_args args; - int state; - - rb_ssl = (VALUE)SSL_get_ex_data(ssl, ossl_ssl_ex_ptr_idx); - args.ssl_obj = rb_ssl; - args.id = id_tmp_ecdh_callback; - args.is_export = is_export; - args.keylength = keylength; - args.type = EVP_PKEY_EC; - - pkey = (EVP_PKEY *)rb_protect((VALUE (*)(VALUE))ossl_call_tmp_dh_callback, - (VALUE)&args, &state); - if (state) { - rb_ivar_set(rb_ssl, ID_callback_state, INT2NUM(state)); - return NULL; - } - if (!pkey) - return NULL; - - return EVP_PKEY_get0_EC_KEY(pkey); -} -#endif - static VALUE call_verify_certificate_identity(VALUE ctx_v) { @@ -359,7 +336,14 @@ ossl_ssl_verify_callback(int preverify_ok, X509_STORE_CTX *ctx) rb_ivar_set(ssl_obj, ID_callback_state, INT2NUM(status)); return 0; } - preverify_ok = ret == Qtrue; + if (ret != Qtrue) { + preverify_ok = 0; +#if defined(X509_V_ERR_HOSTNAME_MISMATCH) + X509_STORE_CTX_set_error(ctx, X509_V_ERR_HOSTNAME_MISMATCH); +#else + X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_REJECTED); +#endif + } } return ossl_verify_cb_call(cb, preverify_ok, ctx); @@ -380,7 +364,7 @@ ossl_call_session_get_cb(VALUE ary) } static SSL_SESSION * -#if (!defined(LIBRESSL_VERSION_NUMBER) ? OPENSSL_VERSION_NUMBER >= 0x10100000 : LIBRESSL_VERSION_NUMBER >= 0x2080000f) +#if defined(LIBRESSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER >= 0x10100000 ossl_sslctx_session_get_cb(SSL *ssl, const unsigned char *buf, int len, int *copy) #else ossl_sslctx_session_get_cb(SSL *ssl, unsigned char *buf, int len, int *copy) @@ -589,8 +573,6 @@ ssl_renegotiation_cb(const SSL *ssl) rb_funcallv(cb, id_call, 1, &ssl_obj); } -#if !defined(OPENSSL_NO_NEXTPROTONEG) || \ - defined(HAVE_SSL_CTX_SET_ALPN_SELECT_CB) static VALUE ssl_npn_encode_protocol_i(RB_BLOCK_CALL_FUNC_ARGLIST(cur, encoded)) { @@ -609,7 +591,7 @@ static VALUE ssl_encode_npn_protocols(VALUE protocols) { VALUE encoded = rb_str_new(NULL, 0); - rb_iterate(rb_each, protocols, ssl_npn_encode_protocol_i, encoded); + rb_block_call(protocols, id_each, 0, 0, ssl_npn_encode_protocol_i, encoded); return encoded; } @@ -672,14 +654,13 @@ ssl_npn_select_cb_common(SSL *ssl, VALUE cb, const unsigned char **out, return SSL_TLSEXT_ERR_OK; } -#endif #ifndef OPENSSL_NO_NEXTPROTONEG static int ssl_npn_advertise_cb(SSL *ssl, const unsigned char **out, unsigned int *outlen, void *arg) { - VALUE protocols = (VALUE)arg; + VALUE protocols = rb_attr_get((VALUE)arg, id_npn_protocols_encoded); *out = (const unsigned char *) RSTRING_PTR(protocols); *outlen = RSTRING_LENINT(protocols); @@ -701,7 +682,6 @@ ssl_npn_select_cb(SSL *ssl, unsigned char **out, unsigned char *outlen, } #endif -#ifdef HAVE_SSL_CTX_SET_ALPN_SELECT_CB static int ssl_alpn_select_cb(SSL *ssl, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg) @@ -713,7 +693,6 @@ ssl_alpn_select_cb(SSL *ssl, const unsigned char **out, unsigned char *outlen, return ssl_npn_select_cb_common(ssl, cb, out, outlen, in, inlen); } -#endif /* This function may serve as the entry point to support further callbacks. */ static void @@ -790,41 +769,15 @@ ossl_sslctx_setup(VALUE self) SSL_CTX_set_tmp_dh_callback(ctx, ossl_tmp_dh_callback); #endif -#if !defined(OPENSSL_NO_EC) - /* We added SSLContext#tmp_ecdh_callback= in Ruby 2.3.0, - * but SSL_CTX_set_tmp_ecdh_callback() was removed in OpenSSL 1.1.0. */ - if (RTEST(rb_attr_get(self, id_i_tmp_ecdh_callback))) { -# if defined(HAVE_SSL_CTX_SET_TMP_ECDH_CALLBACK) - rb_warn("#tmp_ecdh_callback= is deprecated; use #ecdh_curves= instead"); - SSL_CTX_set_tmp_ecdh_callback(ctx, ossl_tmp_ecdh_callback); -# if defined(HAVE_SSL_CTX_SET_ECDH_AUTO) - /* tmp_ecdh_callback and ecdh_auto conflict; OpenSSL ignores - * tmp_ecdh_callback. So disable ecdh_auto. */ - if (!SSL_CTX_set_ecdh_auto(ctx, 0)) - ossl_raise(eSSLError, "SSL_CTX_set_ecdh_auto"); -# endif -# else - ossl_raise(eSSLError, "OpenSSL does not support tmp_ecdh_callback; " - "use #ecdh_curves= instead"); -# endif - } -#endif /* OPENSSL_NO_EC */ +#ifdef HAVE_SSL_CTX_SET_POST_HANDSHAKE_AUTH + SSL_CTX_set_post_handshake_auth(ctx, 1); +#endif val = rb_attr_get(self, id_i_cert_store); if (!NIL_P(val)) { X509_STORE *store = GetX509StorePtr(val); /* NO NEED TO DUP */ SSL_CTX_set_cert_store(ctx, store); -#if !defined(HAVE_X509_STORE_UP_REF) - /* - * WORKAROUND: - * X509_STORE can count references, but - * X509_STORE_free() doesn't care it. - * So we won't increment it but mark it by ex_data. - */ - SSL_CTX_set_ex_data(ctx, ossl_sslctx_ex_store_p, ctx); -#else /* Fixed in OpenSSL 1.0.2; bff9ce4db38b (master), 5b4b9ce976fc (1.0.2) */ X509_STORE_up_ref(store); -#endif } val = rb_attr_get(self, id_i_extra_chain_cert); @@ -875,10 +828,17 @@ ossl_sslctx_setup(VALUE self) ca_file = NIL_P(val) ? NULL : StringValueCStr(val); val = rb_attr_get(self, id_i_ca_path); ca_path = NIL_P(val) ? NULL : StringValueCStr(val); +#ifdef HAVE_SSL_CTX_LOAD_VERIFY_FILE + if (ca_file && !SSL_CTX_load_verify_file(ctx, ca_file)) + ossl_raise(eSSLError, "SSL_CTX_load_verify_file"); + if (ca_path && !SSL_CTX_load_verify_dir(ctx, ca_path)) + ossl_raise(eSSLError, "SSL_CTX_load_verify_dir"); +#else if(ca_file || ca_path){ if (!SSL_CTX_load_verify_locations(ctx, ca_file, ca_path)) rb_warning("can't set verify locations"); } +#endif val = rb_attr_get(self, id_i_verify_mode); verify_mode = NIL_P(val) ? SSL_VERIFY_NONE : NUM2INT(val); @@ -897,7 +857,7 @@ ossl_sslctx_setup(VALUE self) if (!NIL_P(val)) { VALUE encoded = ssl_encode_npn_protocols(val); rb_ivar_set(self, id_npn_protocols_encoded, encoded); - SSL_CTX_set_next_protos_advertised_cb(ctx, ssl_npn_advertise_cb, (void *)encoded); + SSL_CTX_set_next_protos_advertised_cb(ctx, ssl_npn_advertise_cb, (void *)self); OSSL_Debug("SSL NPN advertise callback added"); } if (RTEST(rb_attr_get(self, id_i_npn_select_cb))) { @@ -906,7 +866,6 @@ ossl_sslctx_setup(VALUE self) } #endif -#ifdef HAVE_SSL_CTX_SET_ALPN_SELECT_CB val = rb_attr_get(self, id_i_alpn_protocols); if (!NIL_P(val)) { VALUE rprotos = ssl_encode_npn_protocols(val); @@ -921,7 +880,6 @@ ossl_sslctx_setup(VALUE self) SSL_CTX_set_alpn_select_cb(ctx, ssl_alpn_select_cb, (void *) self); OSSL_Debug("SSL ALPN select callback added"); } -#endif rb_obj_freeze(self); @@ -1043,6 +1001,52 @@ ossl_sslctx_set_ciphers(VALUE self, VALUE v) return v; } +#ifndef OPENSSL_NO_DH +/* + * call-seq: + * ctx.tmp_dh = pkey + * + * Sets DH parameters used for ephemeral DH key exchange. This is relevant for + * servers only. + * + * +pkey+ is an instance of OpenSSL::PKey::DH. Note that key components + * contained in the key object, if any, are ignored. The server will always + * generate a new key pair for each handshake. + * + * Added in version 3.0. See also the man page SSL_set0_tmp_dh_pkey(3). + * + * Example: + * ctx = OpenSSL::SSL::SSLContext.new + * ctx.tmp_dh = OpenSSL::DH.generate(2048) + * svr = OpenSSL::SSL::SSLServer.new(tcp_svr, ctx) + * Thread.new { svr.accept } + */ +static VALUE +ossl_sslctx_set_tmp_dh(VALUE self, VALUE arg) +{ + SSL_CTX *ctx; + EVP_PKEY *pkey; + + rb_check_frozen(self); + GetSSLCTX(self, ctx); + pkey = GetPKeyPtr(arg); + + if (EVP_PKEY_base_id(pkey) != EVP_PKEY_DH) + rb_raise(eSSLError, "invalid pkey type %s (expected DH)", + OBJ_nid2sn(EVP_PKEY_base_id(pkey))); +#ifdef HAVE_SSL_SET0_TMP_DH_PKEY + if (!SSL_CTX_set0_tmp_dh_pkey(ctx, pkey)) + ossl_raise(eSSLError, "SSL_CTX_set0_tmp_dh_pkey"); + EVP_PKEY_up_ref(pkey); +#else + if (!SSL_CTX_set_tmp_dh(ctx, EVP_PKEY_get0_DH(pkey))) + ossl_raise(eSSLError, "SSL_CTX_set_tmp_dh"); +#endif + + return arg; +} +#endif + #if !defined(OPENSSL_NO_EC) /* * call-seq: @@ -1054,9 +1058,6 @@ ossl_sslctx_set_ciphers(VALUE self, VALUE v) * Extension. For a server, the list is used by OpenSSL to determine the set of * shared curves. OpenSSL will pick the most appropriate one from it. * - * Note that this works differently with old OpenSSL (<= 1.0.1). Only one curve - * can be set, and this has no effect for TLS clients. - * * === Example * ctx1 = OpenSSL::SSL::SSLContext.new * ctx1.ecdh_curves = "X25519:P-256:P-224" @@ -1080,48 +1081,8 @@ ossl_sslctx_set_ecdh_curves(VALUE self, VALUE arg) GetSSLCTX(self, ctx); StringValueCStr(arg); -#if defined(HAVE_SSL_CTX_SET1_CURVES_LIST) if (!SSL_CTX_set1_curves_list(ctx, RSTRING_PTR(arg))) ossl_raise(eSSLError, NULL); -#else - /* OpenSSL does not have SSL_CTX_set1_curves_list()... Fallback to - * SSL_CTX_set_tmp_ecdh(). So only the first curve is used. */ - { - VALUE curve, splitted; - EC_KEY *ec; - int nid; - - splitted = rb_str_split(arg, ":"); - if (!RARRAY_LEN(splitted)) - ossl_raise(eSSLError, "invalid input format"); - curve = RARRAY_AREF(splitted, 0); - StringValueCStr(curve); - - /* SSL_CTX_set1_curves_list() accepts NIST names */ - nid = EC_curve_nist2nid(RSTRING_PTR(curve)); - if (nid == NID_undef) - nid = OBJ_txt2nid(RSTRING_PTR(curve)); - if (nid == NID_undef) - ossl_raise(eSSLError, "unknown curve name"); - - ec = EC_KEY_new_by_curve_name(nid); - if (!ec) - ossl_raise(eSSLError, NULL); - EC_KEY_set_asn1_flag(ec, OPENSSL_EC_NAMED_CURVE); - if (!SSL_CTX_set_tmp_ecdh(ctx, ec)) { - EC_KEY_free(ec); - ossl_raise(eSSLError, "SSL_CTX_set_tmp_ecdh"); - } - EC_KEY_free(ec); -# if defined(HAVE_SSL_CTX_SET_ECDH_AUTO) - /* tmp_ecdh and ecdh_auto conflict. tmp_ecdh is ignored when ecdh_auto - * is enabled. So disable ecdh_auto. */ - if (!SSL_CTX_set_ecdh_auto(ctx, 0)) - ossl_raise(eSSLError, "SSL_CTX_set_ecdh_auto"); -# endif - } -#endif - return arg; } #else @@ -1212,7 +1173,7 @@ ossl_sslctx_enable_fallback_scsv(VALUE self) /* * call-seq: - * ctx.add_certificate(certiticate, pkey [, extra_certs]) -> self + * ctx.add_certificate(certificate, pkey [, extra_certs]) -> self * * Adds a certificate to the context. _pkey_ must be a corresponding private * key with _certificate_. @@ -1244,10 +1205,6 @@ ossl_sslctx_enable_fallback_scsv(VALUE self) * ecdsa_pkey = ... * another_ca_cert = ... * ctx.add_certificate(ecdsa_cert, ecdsa_pkey, [another_ca_cert]) - * - * === Note - * OpenSSL before the version 1.0.2 could handle only one extra chain across - * all key types. Calling this method discards the chain set previously. */ static VALUE ossl_sslctx_add_certificate(int argc, VALUE *argv, VALUE self) @@ -1272,7 +1229,7 @@ ossl_sslctx_add_certificate(int argc, VALUE *argv, VALUE self) EVP_PKEY_free(pub_pkey); if (!pub_pkey) rb_raise(rb_eArgError, "certificate does not contain public key"); - if (EVP_PKEY_cmp(pub_pkey, pkey) != 1) + if (EVP_PKEY_eq(pub_pkey, pkey) != 1) rb_raise(rb_eArgError, "public key mismatch"); if (argc >= 3) @@ -1286,34 +1243,9 @@ ossl_sslctx_add_certificate(int argc, VALUE *argv, VALUE self) sk_X509_pop_free(extra_chain, X509_free); ossl_raise(eSSLError, "SSL_CTX_use_PrivateKey"); } - - if (extra_chain) { -#if OPENSSL_VERSION_NUMBER >= 0x10002000 && !defined(LIBRESSL_VERSION_NUMBER) - if (!SSL_CTX_set0_chain(ctx, extra_chain)) { - sk_X509_pop_free(extra_chain, X509_free); - ossl_raise(eSSLError, "SSL_CTX_set0_chain"); - } -#else - STACK_OF(X509) *orig_extra_chain; - X509 *x509_tmp; - - /* First, clear the existing chain */ - SSL_CTX_get_extra_chain_certs(ctx, &orig_extra_chain); - if (orig_extra_chain && sk_X509_num(orig_extra_chain)) { - rb_warning("SSL_CTX_set0_chain() is not available; " \ - "clearing previously set certificate chain"); - SSL_CTX_clear_extra_chain_certs(ctx); - } - while ((x509_tmp = sk_X509_shift(extra_chain))) { - /* Transfers ownership */ - if (!SSL_CTX_add_extra_chain_cert(ctx, x509_tmp)) { - X509_free(x509_tmp); - sk_X509_pop_free(extra_chain, X509_free); - ossl_raise(eSSLError, "SSL_CTX_add_extra_chain_cert"); - } - } - sk_X509_free(extra_chain); -#endif + if (extra_chain && !SSL_CTX_set0_chain(ctx, extra_chain)) { + sk_X509_pop_free(extra_chain, X509_free); + ossl_raise(eSSLError, "SSL_CTX_set0_chain"); } return self; } @@ -1511,8 +1443,16 @@ ossl_sslctx_flush_sessions(int argc, VALUE *argv, VALUE self) static inline int ssl_started(SSL *ssl) { - /* the FD is set in ossl_ssl_setup(), called by #connect or #accept */ - return SSL_get_fd(ssl) >= 0; + /* BIO is created through ossl_ssl_setup(), called by #connect or #accept */ + return SSL_get_rbio(ssl) != NULL; +} + +static void +ossl_ssl_mark(void *ptr) +{ + SSL *ssl = ptr; + rb_gc_mark((VALUE)SSL_get_ex_data(ssl, ossl_ssl_ex_ptr_idx)); + rb_gc_mark((VALUE)SSL_get_ex_data(ssl, ossl_ssl_ex_vcb_idx)); } static void @@ -1524,7 +1464,7 @@ ossl_ssl_free(void *ssl) const rb_data_type_t ossl_ssl_type = { "OpenSSL/SSL", { - 0, ossl_ssl_free, + ossl_ssl_mark, ossl_ssl_free, }, 0, 0, RUBY_TYPED_FREE_IMMEDIATELY, }; @@ -1535,6 +1475,29 @@ ossl_ssl_s_alloc(VALUE klass) return TypedData_Wrap_Struct(klass, &ossl_ssl_type, NULL); } +static VALUE +peer_ip_address(VALUE self) +{ + VALUE remote_address = rb_funcall(rb_attr_get(self, id_i_io), rb_intern("remote_address"), 0); + + return rb_funcall(remote_address, rb_intern("inspect_sockaddr"), 0); +} + +static VALUE +fallback_peer_ip_address(VALUE self, VALUE args) +{ + return rb_str_new_cstr("(null)"); +} + +static VALUE +peeraddr_ip_str(VALUE self) +{ + VALUE rb_mErrno = rb_const_get(rb_cObject, rb_intern("Errno")); + VALUE rb_eSystemCallError = rb_const_get(rb_mErrno, rb_intern("SystemCallError")); + + return rb_rescue2(peer_ip_address, self, fallback_peer_ip_address, (VALUE)0, rb_eSystemCallError, NULL); +} + /* * call-seq: * SSLSocket.new(io) => aSSLSocket @@ -1571,6 +1534,7 @@ ossl_ssl_initialize(int argc, VALUE *argv, VALUE self) if (rb_respond_to(io, rb_intern("nonblock="))) rb_funcall(io, rb_intern("nonblock="), 1, Qtrue); + Check_Type(io, T_FILE); rb_ivar_set(self, id_i_io, io); ssl = SSL_new(ctx); @@ -1638,6 +1602,26 @@ no_exception_p(VALUE opts) return 0; } +static void +io_wait_writable(rb_io_t *fptr) +{ +#ifdef HAVE_RB_IO_MAYBE_WAIT + rb_io_maybe_wait_writable(errno, fptr->self, Qnil); +#else + rb_io_wait_writable(fptr->fd); +#endif +} + +static void +io_wait_readable(rb_io_t *fptr) +{ +#ifdef HAVE_RB_IO_MAYBE_WAIT + rb_io_maybe_wait_readable(errno, fptr->self, Qnil); +#else + rb_io_wait_readable(fptr->fd); +#endif +} + static VALUE ossl_start_ssl(VALUE self, int (*func)(), const char *funcname, VALUE opts) { @@ -1672,16 +1656,23 @@ ossl_start_ssl(VALUE self, int (*func)(), const char *funcname, VALUE opts) case SSL_ERROR_WANT_WRITE: if (no_exception_p(opts)) { return sym_wait_writable; } write_would_block(nonblock); - rb_io_wait_writable(fptr->fd); + io_wait_writable(fptr); continue; case SSL_ERROR_WANT_READ: if (no_exception_p(opts)) { return sym_wait_readable; } read_would_block(nonblock); - rb_io_wait_readable(fptr->fd); + io_wait_readable(fptr); continue; case SSL_ERROR_SYSCALL: +#ifdef __APPLE__ + /* See ossl_ssl_write_internal() */ + if (errno == EPROTOTYPE) + continue; +#endif if (errno) rb_sys_fail(funcname); - ossl_raise(eSSLError, "%s SYSCALL returned=%d errno=%d state=%s", funcname, ret2, errno, SSL_state_string_long(ssl)); + ossl_raise(eSSLError, "%s SYSCALL returned=%d errno=%d peeraddr=%"PRIsVALUE" state=%s", + funcname, ret2, errno, peeraddr_ip_str(self), SSL_state_string_long(ssl)); + #if defined(SSL_R_CERTIFICATE_VERIFY_FAILED) case SSL_ERROR_SSL: err = ERR_peek_last_error(); @@ -1694,13 +1685,15 @@ ossl_start_ssl(VALUE self, int (*func)(), const char *funcname, VALUE opts) if (!verify_msg) verify_msg = "(null)"; ossl_clear_error(); /* let ossl_raise() not append message */ - ossl_raise(eSSLError, "%s returned=%d errno=%d state=%s: %s (%s)", - funcname, ret2, errno, SSL_state_string_long(ssl), + ossl_raise(eSSLError, "%s returned=%d errno=%d peeraddr=%"PRIsVALUE" state=%s: %s (%s)", + funcname, ret2, errno, peeraddr_ip_str(self), SSL_state_string_long(ssl), err_msg, verify_msg); } #endif + /* fallthrough */ default: - ossl_raise(eSSLError, "%s returned=%d errno=%d state=%s", funcname, ret2, errno, SSL_state_string_long(ssl)); + ossl_raise(eSSLError, "%s returned=%d errno=%d peeraddr=%"PRIsVALUE" state=%s", + funcname, ret2, errno, peeraddr_ip_str(self), SSL_state_string_long(ssl)); } } @@ -1711,8 +1704,7 @@ ossl_start_ssl(VALUE self, int (*func)(), const char *funcname, VALUE opts) * call-seq: * ssl.connect => self * - * Initiates an SSL/TLS handshake with a server. The handshake may be started - * after unencrypted data has been sent over the socket. + * Initiates an SSL/TLS handshake with a server. */ static VALUE ossl_ssl_connect(VALUE self) @@ -1759,8 +1751,7 @@ ossl_ssl_connect_nonblock(int argc, VALUE *argv, VALUE self) * call-seq: * ssl.accept => self * - * Waits for a SSL/TLS client to initiate a handshake. The handshake may be - * started after unencrypted data has been sent over the socket. + * Waits for a SSL/TLS client to initiate a handshake. */ static VALUE ossl_ssl_accept(VALUE self) @@ -1807,7 +1798,7 @@ static VALUE ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock) { SSL *ssl; - int ilen, nread = 0; + int ilen; VALUE len, str; rb_io_t *fptr; VALUE io, opts = Qnil; @@ -1817,6 +1808,9 @@ ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock) } else { rb_scan_args(argc, argv, "11", &len, &str); } + GetSSL(self, ssl); + if (!ssl_started(ssl)) + rb_raise(eSSLError, "SSL session is not started yet"); ilen = NUM2INT(len); if (NIL_P(str)) @@ -1832,68 +1826,60 @@ ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock) if (ilen == 0) return str; - GetSSL(self, ssl); io = rb_attr_get(self, id_i_io); GetOpenFile(io, fptr); - if (ssl_started(ssl)) { - for (;;){ - nread = SSL_read(ssl, RSTRING_PTR(str), ilen); - switch(ssl_get_error(ssl, nread)){ - case SSL_ERROR_NONE: - goto end; - case SSL_ERROR_ZERO_RETURN: - if (no_exception_p(opts)) { return Qnil; } - rb_eof_error(); - case SSL_ERROR_WANT_WRITE: - if (no_exception_p(opts)) { return sym_wait_writable; } + + rb_str_locktmp(str); + for (;;) { + int nread = SSL_read(ssl, RSTRING_PTR(str), ilen); + switch (ssl_get_error(ssl, nread)) { + case SSL_ERROR_NONE: + rb_str_unlocktmp(str); + rb_str_set_len(str, nread); + return str; + case SSL_ERROR_ZERO_RETURN: + rb_str_unlocktmp(str); + if (no_exception_p(opts)) { return Qnil; } + rb_eof_error(); + case SSL_ERROR_WANT_WRITE: + if (nonblock) { + rb_str_unlocktmp(str); + if (no_exception_p(opts)) { return sym_wait_writable; } write_would_block(nonblock); - rb_io_wait_writable(fptr->fd); - continue; - case SSL_ERROR_WANT_READ: - if (no_exception_p(opts)) { return sym_wait_readable; } + } + io_wait_writable(fptr); + continue; + case SSL_ERROR_WANT_READ: + if (nonblock) { + rb_str_unlocktmp(str); + if (no_exception_p(opts)) { return sym_wait_readable; } read_would_block(nonblock); - rb_io_wait_readable(fptr->fd); - continue; - case SSL_ERROR_SYSCALL: - if (!ERR_peek_error()) { - if (errno) - rb_sys_fail(0); - else { - /* - * The underlying BIO returned 0. This is actually a - * protocol error. But unfortunately, not all - * implementations cleanly shutdown the TLS connection - * but just shutdown/close the TCP connection. So report - * EOF for now... - */ - if (no_exception_p(opts)) { return Qnil; } - rb_eof_error(); - } - } - /* fall through */ - default: - ossl_raise(eSSLError, "SSL_read"); - } - } - } - else { - ID meth = nonblock ? rb_intern("read_nonblock") : rb_intern("sysread"); - - rb_warning("SSL session is not started yet."); - if (nonblock) { - VALUE argv[3]; - argv[0] = len; - argv[1] = str; - argv[2] = opts; - return rb_funcallv_kw(io, meth, 3, argv, RB_PASS_KEYWORDS); + } + io_wait_readable(fptr); + continue; + case SSL_ERROR_SYSCALL: + if (!ERR_peek_error()) { + rb_str_unlocktmp(str); + if (errno) + rb_sys_fail(0); + else { + /* + * The underlying BIO returned 0. This is actually a + * protocol error. But unfortunately, not all + * implementations cleanly shutdown the TLS connection + * but just shutdown/close the TCP connection. So report + * EOF for now... + */ + if (no_exception_p(opts)) { return Qnil; } + rb_eof_error(); + } + } + /* fall through */ + default: + rb_str_unlocktmp(str); + ossl_raise(eSSLError, "SSL_read"); } - else - return rb_funcall(io, meth, 2, len, str); } - - end: - rb_str_set_len(str, nread); - return str; } /* @@ -1933,61 +1919,55 @@ static VALUE ossl_ssl_write_internal(VALUE self, VALUE str, VALUE opts) { SSL *ssl; - int nwrite = 0; rb_io_t *fptr; - int nonblock = opts != Qfalse; - VALUE io; + int num, nonblock = opts != Qfalse; + VALUE tmp, io; - StringValue(str); GetSSL(self, ssl); + if (!ssl_started(ssl)) + rb_raise(eSSLError, "SSL session is not started yet"); + + tmp = rb_str_new_frozen(StringValue(str)); io = rb_attr_get(self, id_i_io); GetOpenFile(io, fptr); - if (ssl_started(ssl)) { - for (;;){ - int num = RSTRING_LENINT(str); - - /* SSL_write(3ssl) manpage states num == 0 is undefined */ - if (num == 0) - goto end; - - nwrite = SSL_write(ssl, RSTRING_PTR(str), num); - switch(ssl_get_error(ssl, nwrite)){ - case SSL_ERROR_NONE: - goto end; - case SSL_ERROR_WANT_WRITE: - if (no_exception_p(opts)) { return sym_wait_writable; } - write_would_block(nonblock); - rb_io_wait_writable(fptr->fd); - continue; - case SSL_ERROR_WANT_READ: - if (no_exception_p(opts)) { return sym_wait_readable; } - read_would_block(nonblock); - rb_io_wait_readable(fptr->fd); + + /* SSL_write(3ssl) manpage states num == 0 is undefined */ + num = RSTRING_LENINT(tmp); + if (num == 0) + return INT2FIX(0); + + for (;;) { + int nwritten = SSL_write(ssl, RSTRING_PTR(tmp), num); + switch (ssl_get_error(ssl, nwritten)) { + case SSL_ERROR_NONE: + return INT2NUM(nwritten); + case SSL_ERROR_WANT_WRITE: + if (no_exception_p(opts)) { return sym_wait_writable; } + write_would_block(nonblock); + io_wait_writable(fptr); + continue; + case SSL_ERROR_WANT_READ: + if (no_exception_p(opts)) { return sym_wait_readable; } + read_would_block(nonblock); + io_wait_readable(fptr); + continue; + case SSL_ERROR_SYSCALL: +#ifdef __APPLE__ + /* + * It appears that send syscall can return EPROTOTYPE if the + * socket is being torn down. Retry to get a proper errno to + * make the error handling in line with the socket library. + * [Bug #14713] https://bugs.ruby-lang.org/issues/14713 + */ + if (errno == EPROTOTYPE) continue; - case SSL_ERROR_SYSCALL: - if (errno) rb_sys_fail(0); - default: - ossl_raise(eSSLError, "SSL_write"); - } +#endif + if (errno) rb_sys_fail(0); + /* fallthrough */ + default: + ossl_raise(eSSLError, "SSL_write"); } } - else { - ID meth = nonblock ? - rb_intern("write_nonblock") : rb_intern("syswrite"); - - rb_warning("SSL session is not started yet."); - if (nonblock) { - VALUE argv[2]; - argv[0] = str; - argv[1] = opts; - return rb_funcallv_kw(io, meth, 2, argv, RB_PASS_KEYWORDS); - } - else - return rb_funcall(io, meth, 1, str); - } - - end: - return INT2NUM(nwrite); } /* @@ -2286,7 +2266,57 @@ ossl_ssl_get_verify_result(VALUE self) GetSSL(self, ssl); - return INT2NUM(SSL_get_verify_result(ssl)); + return LONG2NUM(SSL_get_verify_result(ssl)); +} + +/* + * call-seq: + * ssl.finished_message => "finished message" + * + * Returns the last *Finished* message sent + * + */ +static VALUE +ossl_ssl_get_finished(VALUE self) +{ + SSL *ssl; + char sizer[1], *buf; + size_t len; + + GetSSL(self, ssl); + + len = SSL_get_finished(ssl, sizer, 0); + if (len == 0) + return Qnil; + + buf = ALLOCA_N(char, len); + SSL_get_finished(ssl, buf, len); + return rb_str_new(buf, len); +} + +/* + * call-seq: + * ssl.peer_finished_message => "peer finished message" + * + * Returns the last *Finished* message received + * + */ +static VALUE +ossl_ssl_get_peer_finished(VALUE self) +{ + SSL *ssl; + char sizer[1], *buf; + size_t len; + + GetSSL(self, ssl); + + len = SSL_get_peer_finished(ssl, sizer, 0); + if (len == 0) + return Qnil; + + buf = ALLOCA_N(char, len); + SSL_get_peer_finished(ssl, buf, len); + return rb_str_new(buf, len); } /* @@ -2337,7 +2367,6 @@ ossl_ssl_npn_protocol(VALUE self) } # endif -# ifdef HAVE_SSL_CTX_SET_ALPN_SELECT_CB /* * call-seq: * ssl.alpn_protocol => String | nil @@ -2360,9 +2389,7 @@ ossl_ssl_alpn_protocol(VALUE self) else return rb_str_new((const char *) out, outlen); } -# endif -# ifdef HAVE_SSL_GET_SERVER_TMP_KEY /* * call-seq: * ssl.tmp_key => PKey or nil @@ -2380,11 +2407,8 @@ ossl_ssl_tmp_key(VALUE self) return Qnil; return ossl_pkey_new(key); } -# endif /* defined(HAVE_SSL_GET_SERVER_TMP_KEY) */ #endif /* !defined(OPENSSL_NO_SOCK) */ -#undef rb_intern -#define rb_intern(s) rb_intern_const(s) void Init_ossl_ssl(void) { @@ -2395,8 +2419,8 @@ Init_ossl_ssl(void) rb_mWaitWritable = rb_define_module_under(rb_cIO, "WaitWritable"); #endif - id_call = rb_intern("call"); - ID_callback_state = rb_intern("callback_state"); + id_call = rb_intern_const("call"); + ID_callback_state = rb_intern_const("callback_state"); ossl_ssl_ex_vcb_idx = SSL_get_ex_new_index(0, (void *)"ossl_ssl_ex_vcb_idx", 0, 0, 0); if (ossl_ssl_ex_vcb_idx < 0) @@ -2407,11 +2431,6 @@ Init_ossl_ssl(void) ossl_sslctx_ex_ptr_idx = SSL_CTX_get_ex_new_index(0, (void *)"ossl_sslctx_ex_ptr_idx", 0, 0, 0); if (ossl_sslctx_ex_ptr_idx < 0) ossl_raise(rb_eRuntimeError, "SSL_CTX_get_ex_new_index"); -#if !defined(HAVE_X509_STORE_UP_REF) - ossl_sslctx_ex_store_p = SSL_CTX_get_ex_new_index(0, (void *)"ossl_sslctx_ex_store_p", 0, 0, 0); - if (ossl_sslctx_ex_store_p < 0) - ossl_raise(rb_eRuntimeError, "SSL_CTX_get_ex_new_index"); -#endif /* Document-module: OpenSSL::SSL * @@ -2463,7 +2482,7 @@ Init_ossl_ssl(void) * The _cert_, _key_, and _extra_chain_cert_ attributes are deprecated. * It is recommended to use #add_certificate instead. */ - rb_attr(cSSLContext, rb_intern("cert"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("cert"), 1, 1, Qfalse); /* * Context private key @@ -2471,29 +2490,29 @@ Init_ossl_ssl(void) * The _cert_, _key_, and _extra_chain_cert_ attributes are deprecated. * It is recommended to use #add_certificate instead. */ - rb_attr(cSSLContext, rb_intern("key"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("key"), 1, 1, Qfalse); /* * A certificate or Array of certificates that will be sent to the client. */ - rb_attr(cSSLContext, rb_intern("client_ca"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("client_ca"), 1, 1, Qfalse); /* * The path to a file containing a PEM-format CA certificate */ - rb_attr(cSSLContext, rb_intern("ca_file"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("ca_file"), 1, 1, Qfalse); /* * The path to a directory containing CA certificates in PEM format. * * Files are looked up by subject's X509 name's hash value. */ - rb_attr(cSSLContext, rb_intern("ca_path"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("ca_path"), 1, 1, Qfalse); /* * Maximum session lifetime in seconds. */ - rb_attr(cSSLContext, rb_intern("timeout"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("timeout"), 1, 1, Qfalse); /* * Session verification mode. @@ -2506,12 +2525,12 @@ Init_ossl_ssl(void) * * See SSL_CTX_set_verify(3) for details. */ - rb_attr(cSSLContext, rb_intern("verify_mode"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("verify_mode"), 1, 1, Qfalse); /* * Number of CA certificates to walk when verifying a certificate chain. */ - rb_attr(cSSLContext, rb_intern("verify_depth"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("verify_depth"), 1, 1, Qfalse); /* * A callback for additional certificate verification. The callback is @@ -2525,7 +2544,7 @@ Init_ossl_ssl(void) * If the callback returns +false+, the chain verification is immediately * stopped and a bad_certificate alert is then sent. */ - rb_attr(cSSLContext, rb_intern("verify_callback"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("verify_callback"), 1, 1, Qfalse); /* * Whether to check the server certificate is valid for the hostname. @@ -2533,12 +2552,12 @@ Init_ossl_ssl(void) * In order to make this work, verify_mode must be set to VERIFY_PEER and * the server hostname must be given by OpenSSL::SSL::SSLSocket#hostname=. */ - rb_attr(cSSLContext, rb_intern("verify_hostname"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("verify_hostname"), 1, 1, Qfalse); /* * An OpenSSL::X509::Store used for certificate verification. */ - rb_attr(cSSLContext, rb_intern("cert_store"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("cert_store"), 1, 1, Qfalse); /* * An Array of extra X509 certificates to be added to the certificate @@ -2547,7 +2566,7 @@ Init_ossl_ssl(void) * The _cert_, _key_, and _extra_chain_cert_ attributes are deprecated. * It is recommended to use #add_certificate instead. */ - rb_attr(cSSLContext, rb_intern("extra_chain_cert"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("extra_chain_cert"), 1, 1, Qfalse); /* * A callback invoked when a client certificate is requested by a server @@ -2557,28 +2576,14 @@ Init_ossl_ssl(void) * containing an OpenSSL::X509::Certificate and an OpenSSL::PKey. If any * other value is returned the handshake is suspended. */ - rb_attr(cSSLContext, rb_intern("client_cert_cb"), 1, 1, Qfalse); - -#if !defined(OPENSSL_NO_EC) && defined(HAVE_SSL_CTX_SET_TMP_ECDH_CALLBACK) - /* - * A callback invoked when ECDH parameters are required. - * - * The callback is invoked with the Session for the key exchange, an - * flag indicating the use of an export cipher and the keylength - * required. - * - * The callback is deprecated. This does not work with recent versions of - * OpenSSL. Use OpenSSL::SSL::SSLContext#ecdh_curves= instead. - */ - rb_attr(cSSLContext, rb_intern("tmp_ecdh_callback"), 1, 1, Qfalse); -#endif + rb_attr(cSSLContext, rb_intern_const("client_cert_cb"), 1, 1, Qfalse); /* * Sets the context in which a session can be reused. This allows * sessions for multiple applications to be distinguished, for example, by * name. */ - rb_attr(cSSLContext, rb_intern("session_id_context"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("session_id_context"), 1, 1, Qfalse); /* * A callback invoked on a server when a session is proposed by the client @@ -2587,7 +2592,7 @@ Init_ossl_ssl(void) * The callback is invoked with the SSLSocket and session id. The * callback may return a Session from an external cache. */ - rb_attr(cSSLContext, rb_intern("session_get_cb"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("session_get_cb"), 1, 1, Qfalse); /* * A callback invoked when a new session was negotiated. @@ -2595,7 +2600,7 @@ Init_ossl_ssl(void) * The callback is invoked with an SSLSocket. If +false+ is returned the * session will be removed from the internal cache. */ - rb_attr(cSSLContext, rb_intern("session_new_cb"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("session_new_cb"), 1, 1, Qfalse); /* * A callback invoked when a session is removed from the internal cache. @@ -2606,18 +2611,18 @@ Init_ossl_ssl(void) * multi-threaded application. The callback is called inside a global lock * and it can randomly cause deadlock on Ruby thread switching. */ - rb_attr(cSSLContext, rb_intern("session_remove_cb"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("session_remove_cb"), 1, 1, Qfalse); rb_define_const(mSSLExtConfig, "HAVE_TLSEXT_HOST_NAME", Qtrue); /* - * A callback invoked whenever a new handshake is initiated. May be used - * to disable renegotiation entirely. + * A callback invoked whenever a new handshake is initiated on an + * established connection. May be used to disable renegotiation entirely. * * The callback is invoked with the active SSLSocket. The callback's - * return value is irrelevant, normal return indicates "approval" of the + * return value is ignored. A normal return indicates "approval" of the * renegotiation and will continue the process. To forbid renegotiation - * and to cancel the process, an Error may be raised within the callback. + * and to cancel the process, raise an exception within the callback. * * === Disable client renegotiation * @@ -2625,13 +2630,11 @@ Init_ossl_ssl(void) * renegotiation entirely. You may use a callback as follows to implement * this feature: * - * num_handshakes = 0 * ctx.renegotiation_cb = lambda do |ssl| - * num_handshakes += 1 - * raise RuntimeError.new("Client renegotiation disabled") if num_handshakes > 1 + * raise RuntimeError, "Client renegotiation disabled" * end */ - rb_attr(cSSLContext, rb_intern("renegotiation_cb"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("renegotiation_cb"), 1, 1, Qfalse); #ifndef OPENSSL_NO_NEXTPROTONEG /* * An Enumerable of Strings. Each String represents a protocol to be @@ -2644,7 +2647,7 @@ Init_ossl_ssl(void) * * ctx.npn_protocols = ["http/1.1", "spdy/2"] */ - rb_attr(cSSLContext, rb_intern("npn_protocols"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("npn_protocols"), 1, 1, Qfalse); /* * A callback invoked on the client side when the client needs to select * a protocol from the list sent by the server. Supported in OpenSSL 1.0.1 @@ -2661,10 +2664,9 @@ Init_ossl_ssl(void) * protocols.first * end */ - rb_attr(cSSLContext, rb_intern("npn_select_cb"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("npn_select_cb"), 1, 1, Qfalse); #endif -#ifdef HAVE_SSL_CTX_SET_ALPN_SELECT_CB /* * An Enumerable of Strings. Each String represents a protocol to be * advertised as the list of supported protocols for Application-Layer @@ -2676,7 +2678,7 @@ Init_ossl_ssl(void) * * ctx.alpn_protocols = ["http/1.1", "spdy/2", "h2"] */ - rb_attr(cSSLContext, rb_intern("alpn_protocols"), 1, 1, Qfalse); + rb_attr(cSSLContext, rb_intern_const("alpn_protocols"), 1, 1, Qfalse); /* * A callback invoked on the server side when the server needs to select * a protocol from the list sent by the client. Supported in OpenSSL 1.0.2 @@ -2693,8 +2695,7 @@ Init_ossl_ssl(void) * protocols.first * end */ - rb_attr(cSSLContext, rb_intern("alpn_select_cb"), 1, 1, Qfalse); -#endif + rb_attr(cSSLContext, rb_intern_const("alpn_select_cb"), 1, 1, Qfalse); rb_define_alias(cSSLContext, "ssl_timeout", "timeout"); rb_define_alias(cSSLContext, "ssl_timeout=", "timeout="); @@ -2702,6 +2703,9 @@ Init_ossl_ssl(void) ossl_sslctx_set_minmax_proto_version, 2); rb_define_method(cSSLContext, "ciphers", ossl_sslctx_get_ciphers, 0); rb_define_method(cSSLContext, "ciphers=", ossl_sslctx_set_ciphers, 1); +#ifndef OPENSSL_NO_DH + rb_define_method(cSSLContext, "tmp_dh=", ossl_sslctx_set_tmp_dh, 1); +#endif rb_define_method(cSSLContext, "ecdh_curves=", ossl_sslctx_set_ecdh_curves, 1); rb_define_method(cSSLContext, "security_level", ossl_sslctx_get_security_level, 0); rb_define_method(cSSLContext, "security_level=", ossl_sslctx_set_security_level, 1); @@ -2806,12 +2810,10 @@ Init_ossl_ssl(void) rb_define_method(cSSLSocket, "client_ca", ossl_ssl_get_client_ca_list, 0); /* #hostname is defined in lib/openssl/ssl.rb */ rb_define_method(cSSLSocket, "hostname=", ossl_ssl_set_hostname, 1); -# ifdef HAVE_SSL_GET_SERVER_TMP_KEY + rb_define_method(cSSLSocket, "finished_message", ossl_ssl_get_finished, 0); + rb_define_method(cSSLSocket, "peer_finished_message", ossl_ssl_get_peer_finished, 0); rb_define_method(cSSLSocket, "tmp_key", ossl_ssl_tmp_key, 0); -# endif -# ifdef HAVE_SSL_CTX_SET_ALPN_SELECT_CB rb_define_method(cSSLSocket, "alpn_protocol", ossl_ssl_alpn_protocol, 0); -# endif # ifndef OPENSSL_NO_NEXTPROTONEG rb_define_method(cSSLSocket, "npn_protocol", ossl_ssl_npn_protocol, 0); # endif @@ -2823,12 +2825,23 @@ Init_ossl_ssl(void) rb_define_const(mSSL, "VERIFY_CLIENT_ONCE", INT2NUM(SSL_VERIFY_CLIENT_ONCE)); rb_define_const(mSSL, "OP_ALL", ULONG2NUM(SSL_OP_ALL)); +#ifdef SSL_OP_CLEANSE_PLAINTEXT /* OpenSSL 3.0 */ + rb_define_const(mSSL, "OP_CLEANSE_PLAINTEXT", ULONG2NUM(SSL_OP_CLEANSE_PLAINTEXT)); +#endif rb_define_const(mSSL, "OP_LEGACY_SERVER_CONNECT", ULONG2NUM(SSL_OP_LEGACY_SERVER_CONNECT)); -#ifdef SSL_OP_TLSEXT_PADDING /* OpenSSL 1.0.1h and OpenSSL 1.0.2 */ - rb_define_const(mSSL, "OP_TLSEXT_PADDING", ULONG2NUM(SSL_OP_TLSEXT_PADDING)); +#ifdef SSL_OP_ENABLE_KTLS /* OpenSSL 3.0 */ + rb_define_const(mSSL, "OP_ENABLE_KTLS", ULONG2NUM(SSL_OP_ENABLE_KTLS)); #endif -#ifdef SSL_OP_SAFARI_ECDHE_ECDSA_BUG /* OpenSSL 1.0.1f and OpenSSL 1.0.2 */ + rb_define_const(mSSL, "OP_TLSEXT_PADDING", ULONG2NUM(SSL_OP_TLSEXT_PADDING)); rb_define_const(mSSL, "OP_SAFARI_ECDHE_ECDSA_BUG", ULONG2NUM(SSL_OP_SAFARI_ECDHE_ECDSA_BUG)); +#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF /* OpenSSL 3.0 */ + rb_define_const(mSSL, "OP_IGNORE_UNEXPECTED_EOF", ULONG2NUM(SSL_OP_IGNORE_UNEXPECTED_EOF)); +#endif +#ifdef SSL_OP_ALLOW_CLIENT_RENEGOTIATION /* OpenSSL 3.0 */ + rb_define_const(mSSL, "OP_ALLOW_CLIENT_RENEGOTIATION", ULONG2NUM(SSL_OP_ALLOW_CLIENT_RENEGOTIATION)); +#endif +#ifdef SSL_OP_DISABLE_TLSEXT_CA_NAMES /* OpenSSL 3.0 */ + rb_define_const(mSSL, "OP_DISABLE_TLSEXT_CA_NAMES", ULONG2NUM(SSL_OP_DISABLE_TLSEXT_CA_NAMES)); #endif #ifdef SSL_OP_ALLOW_NO_DHE_KEX /* OpenSSL 1.1.1 */ rb_define_const(mSSL, "OP_ALLOW_NO_DHE_KEX", ULONG2NUM(SSL_OP_ALLOW_NO_DHE_KEX)); @@ -2841,13 +2854,15 @@ Init_ossl_ssl(void) #ifdef SSL_OP_NO_ENCRYPT_THEN_MAC /* OpenSSL 1.1.1 */ rb_define_const(mSSL, "OP_NO_ENCRYPT_THEN_MAC", ULONG2NUM(SSL_OP_NO_ENCRYPT_THEN_MAC)); #endif - rb_define_const(mSSL, "OP_CIPHER_SERVER_PREFERENCE", ULONG2NUM(SSL_OP_CIPHER_SERVER_PREFERENCE)); - rb_define_const(mSSL, "OP_TLS_ROLLBACK_BUG", ULONG2NUM(SSL_OP_TLS_ROLLBACK_BUG)); -#ifdef SSL_OP_NO_RENEGOTIATION /* OpenSSL 1.1.1 */ - rb_define_const(mSSL, "OP_NO_RENEGOTIATION", ULONG2NUM(SSL_OP_NO_RENEGOTIATION)); +#ifdef SSL_OP_ENABLE_MIDDLEBOX_COMPAT /* OpenSSL 1.1.1 */ + rb_define_const(mSSL, "OP_ENABLE_MIDDLEBOX_COMPAT", ULONG2NUM(SSL_OP_ENABLE_MIDDLEBOX_COMPAT)); +#endif +#ifdef SSL_OP_PRIORITIZE_CHACHA /* OpenSSL 1.1.1 */ + rb_define_const(mSSL, "OP_PRIORITIZE_CHACHA", ULONG2NUM(SSL_OP_PRIORITIZE_CHACHA)); +#endif +#ifdef SSL_OP_NO_ANTI_REPLAY /* OpenSSL 1.1.1 */ + rb_define_const(mSSL, "OP_NO_ANTI_REPLAY", ULONG2NUM(SSL_OP_NO_ANTI_REPLAY)); #endif - rb_define_const(mSSL, "OP_CRYPTOPRO_TLSEXT_BUG", ULONG2NUM(SSL_OP_CRYPTOPRO_TLSEXT_BUG)); - rb_define_const(mSSL, "OP_NO_SSLv3", ULONG2NUM(SSL_OP_NO_SSLv3)); rb_define_const(mSSL, "OP_NO_TLSv1", ULONG2NUM(SSL_OP_NO_TLSv1)); rb_define_const(mSSL, "OP_NO_TLSv1_1", ULONG2NUM(SSL_OP_NO_TLSv1_1)); @@ -2855,6 +2870,12 @@ Init_ossl_ssl(void) #ifdef SSL_OP_NO_TLSv1_3 /* OpenSSL 1.1.1 */ rb_define_const(mSSL, "OP_NO_TLSv1_3", ULONG2NUM(SSL_OP_NO_TLSv1_3)); #endif + rb_define_const(mSSL, "OP_CIPHER_SERVER_PREFERENCE", ULONG2NUM(SSL_OP_CIPHER_SERVER_PREFERENCE)); + rb_define_const(mSSL, "OP_TLS_ROLLBACK_BUG", ULONG2NUM(SSL_OP_TLS_ROLLBACK_BUG)); +#ifdef SSL_OP_NO_RENEGOTIATION /* OpenSSL 1.1.1 */ + rb_define_const(mSSL, "OP_NO_RENEGOTIATION", ULONG2NUM(SSL_OP_NO_RENEGOTIATION)); +#endif + rb_define_const(mSSL, "OP_CRYPTOPRO_TLSEXT_BUG", ULONG2NUM(SSL_OP_CRYPTOPRO_TLSEXT_BUG)); /* SSL_OP_* flags for DTLS */ #if 0 @@ -2919,16 +2940,16 @@ Init_ossl_ssl(void) #endif - sym_exception = ID2SYM(rb_intern("exception")); - sym_wait_readable = ID2SYM(rb_intern("wait_readable")); - sym_wait_writable = ID2SYM(rb_intern("wait_writable")); + sym_exception = ID2SYM(rb_intern_const("exception")); + sym_wait_readable = ID2SYM(rb_intern_const("wait_readable")); + sym_wait_writable = ID2SYM(rb_intern_const("wait_writable")); - id_tmp_dh_callback = rb_intern("tmp_dh_callback"); - id_tmp_ecdh_callback = rb_intern("tmp_ecdh_callback"); - id_npn_protocols_encoded = rb_intern("npn_protocols_encoded"); + id_tmp_dh_callback = rb_intern_const("tmp_dh_callback"); + id_npn_protocols_encoded = rb_intern_const("npn_protocols_encoded"); + id_each = rb_intern_const("each"); #define DefIVarID(name) do \ - id_i_##name = rb_intern("@"#name); while (0) + id_i_##name = rb_intern_const("@"#name); while (0) DefIVarID(cert_store); DefIVarID(ca_file); @@ -2942,7 +2963,6 @@ Init_ossl_ssl(void) DefIVarID(key); DefIVarID(extra_chain_cert); DefIVarID(client_cert_cb); - DefIVarID(tmp_ecdh_callback); DefIVarID(timeout); DefIVarID(session_id_context); DefIVarID(session_get_cb); diff --git a/ruby/ext/openssl/ossl_ssl_session.c b/ruby/ext/openssl/ossl_ssl_session.c index 551408738..92eb1365f 100644 --- a/ruby/ext/openssl/ossl_ssl_session.c +++ b/ruby/ext/openssl/ossl_ssl_session.c @@ -34,43 +34,38 @@ static VALUE ossl_ssl_session_alloc(VALUE klass) * Creates a new Session object from an instance of SSLSocket or DER/PEM encoded * String. */ -static VALUE ossl_ssl_session_initialize(VALUE self, VALUE arg1) +static VALUE +ossl_ssl_session_initialize(VALUE self, VALUE arg1) { - SSL_SESSION *ctx = NULL; - - if (RDATA(self)->data) - ossl_raise(eSSLSession, "SSL Session already initialized"); - - if (rb_obj_is_instance_of(arg1, cSSLSocket)) { - SSL *ssl; - - GetSSL(arg1, ssl); - - if ((ctx = SSL_get1_session(ssl)) == NULL) - ossl_raise(eSSLSession, "no session available"); - } else { - BIO *in = ossl_obj2bio(&arg1); + SSL_SESSION *ctx; - ctx = PEM_read_bio_SSL_SESSION(in, NULL, NULL, NULL); + if (RTYPEDDATA_DATA(self)) + ossl_raise(eSSLSession, "SSL Session already initialized"); - if (!ctx) { - OSSL_BIO_reset(in); - ctx = d2i_SSL_SESSION_bio(in, NULL); - } + if (rb_obj_is_instance_of(arg1, cSSLSocket)) { + SSL *ssl; - BIO_free(in); + GetSSL(arg1, ssl); - if (!ctx) - ossl_raise(rb_eArgError, "unknown type"); - } + if ((ctx = SSL_get1_session(ssl)) == NULL) + ossl_raise(eSSLSession, "no session available"); + } + else { + BIO *in = ossl_obj2bio(&arg1); - /* should not happen */ - if (ctx == NULL) - ossl_raise(eSSLSession, "ctx not set - internal error"); + ctx = d2i_SSL_SESSION_bio(in, NULL); + if (!ctx) { + OSSL_BIO_reset(in); + ctx = PEM_read_bio_SSL_SESSION(in, NULL, NULL, NULL); + } + BIO_free(in); + if (!ctx) + ossl_raise(rb_eArgError, "unknown type"); + } - RDATA(self)->data = ctx; + RTYPEDDATA_DATA(self) = ctx; - return self; + return self; } static VALUE diff --git a/ruby/ext/openssl/ossl_ts.c b/ruby/ext/openssl/ossl_ts.c new file mode 100644 index 000000000..b33ff10c1 --- /dev/null +++ b/ruby/ext/openssl/ossl_ts.c @@ -0,0 +1,1539 @@ +/* + * + * Copyright (C) 2010 Martin Bosslet + * All rights reserved. + */ +/* + * This program is licenced under the same licence as Ruby. + * (See the file 'LICENCE'.) + */ +#include "ossl.h" + +#ifndef OPENSSL_NO_TS + +#define NewTSRequest(klass) \ + TypedData_Wrap_Struct((klass), &ossl_ts_req_type, 0) +#define SetTSRequest(obj, req) do { \ + if (!(req)) { \ + ossl_raise(rb_eRuntimeError, "TS_REQ wasn't initialized."); \ + } \ + RTYPEDDATA_DATA(obj) = (req); \ +} while (0) +#define GetTSRequest(obj, req) do { \ + TypedData_Get_Struct((obj), TS_REQ, &ossl_ts_req_type, (req)); \ + if (!(req)) { \ + ossl_raise(rb_eRuntimeError, "TS_REQ wasn't initialized."); \ + } \ +} while (0) + +#define NewTSResponse(klass) \ + TypedData_Wrap_Struct((klass), &ossl_ts_resp_type, 0) +#define SetTSResponse(obj, resp) do { \ + if (!(resp)) { \ + ossl_raise(rb_eRuntimeError, "TS_RESP wasn't initialized."); \ + } \ + RTYPEDDATA_DATA(obj) = (resp); \ +} while (0) +#define GetTSResponse(obj, resp) do { \ + TypedData_Get_Struct((obj), TS_RESP, &ossl_ts_resp_type, (resp)); \ + if (!(resp)) { \ + ossl_raise(rb_eRuntimeError, "TS_RESP wasn't initialized."); \ + } \ +} while (0) + +#define NewTSTokenInfo(klass) \ + TypedData_Wrap_Struct((klass), &ossl_ts_token_info_type, 0) +#define SetTSTokenInfo(obj, info) do { \ + if (!(info)) { \ + ossl_raise(rb_eRuntimeError, "TS_TST_INFO wasn't initialized."); \ + } \ + RTYPEDDATA_DATA(obj) = (info); \ +} while (0) +#define GetTSTokenInfo(obj, info) do { \ + TypedData_Get_Struct((obj), TS_TST_INFO, &ossl_ts_token_info_type, (info)); \ + if (!(info)) { \ + ossl_raise(rb_eRuntimeError, "TS_TST_INFO wasn't initialized."); \ + } \ +} while (0) + +#define ossl_tsfac_get_default_policy_id(o) rb_attr_get((o),rb_intern("@default_policy_id")) +#define ossl_tsfac_get_serial_number(o) rb_attr_get((o),rb_intern("@serial_number")) +#define ossl_tsfac_get_gen_time(o) rb_attr_get((o),rb_intern("@gen_time")) +#define ossl_tsfac_get_additional_certs(o) rb_attr_get((o),rb_intern("@additional_certs")) +#define ossl_tsfac_get_allowed_digests(o) rb_attr_get((o),rb_intern("@allowed_digests")) + +static VALUE mTimestamp; +static VALUE eTimestampError; +static VALUE cTimestampRequest; +static VALUE cTimestampResponse; +static VALUE cTimestampTokenInfo; +static VALUE cTimestampFactory; +static VALUE sBAD_ALG, sBAD_REQUEST, sBAD_DATA_FORMAT, sTIME_NOT_AVAILABLE; +static VALUE sUNACCEPTED_POLICY, sUNACCEPTED_EXTENSION, sADD_INFO_NOT_AVAILABLE; +static VALUE sSYSTEM_FAILURE; + +static void +ossl_ts_req_free(void *ptr) +{ + TS_REQ_free(ptr); +} + +static const rb_data_type_t ossl_ts_req_type = { + "OpenSSL/Timestamp/Request", + { + 0, ossl_ts_req_free, + }, + 0, 0, RUBY_TYPED_FREE_IMMEDIATELY, +}; + +static void +ossl_ts_resp_free(void *ptr) +{ + TS_RESP_free(ptr); +} + +static const rb_data_type_t ossl_ts_resp_type = { + "OpenSSL/Timestamp/Response", + { + 0, ossl_ts_resp_free, + }, + 0, 0, RUBY_TYPED_FREE_IMMEDIATELY, +}; + +static void +ossl_ts_token_info_free(void *ptr) +{ + TS_TST_INFO_free(ptr); +} + +static const rb_data_type_t ossl_ts_token_info_type = { + "OpenSSL/Timestamp/TokenInfo", + { + 0, ossl_ts_token_info_free, + }, + 0, 0, RUBY_TYPED_FREE_IMMEDIATELY, +}; + +static VALUE +asn1_to_der(void *template, int (*i2d)(void *template, unsigned char **pp)) +{ + VALUE str; + int len; + unsigned char *p; + + if((len = i2d(template, NULL)) <= 0) + ossl_raise(eTimestampError, "Error when encoding to DER"); + str = rb_str_new(0, len); + p = (unsigned char *)RSTRING_PTR(str); + if(i2d(template, &p) <= 0) + ossl_raise(eTimestampError, "Error when encoding to DER"); + rb_str_set_len(str, p - (unsigned char*)RSTRING_PTR(str)); + + return str; +} + +static ASN1_OBJECT* +obj_to_asn1obj(VALUE obj) +{ + ASN1_OBJECT *a1obj; + + StringValue(obj); + a1obj = OBJ_txt2obj(RSTRING_PTR(obj), 0); + if(!a1obj) a1obj = OBJ_txt2obj(RSTRING_PTR(obj), 1); + if(!a1obj) ossl_raise(eASN1Error, "invalid OBJECT ID"); + + return a1obj; +} + +static VALUE +obj_to_asn1obj_i(VALUE obj) +{ + return (VALUE)obj_to_asn1obj(obj); +} + +static VALUE +get_asn1obj(ASN1_OBJECT *obj) +{ + BIO *out; + VALUE ret; + int nid; + if ((nid = OBJ_obj2nid(obj)) != NID_undef) + ret = rb_str_new2(OBJ_nid2sn(nid)); + else{ + if (!(out = BIO_new(BIO_s_mem()))) + ossl_raise(eX509AttrError, NULL); + i2a_ASN1_OBJECT(out, obj); + ret = ossl_membio2str(out); + } + + return ret; +} + +static VALUE +ossl_ts_req_alloc(VALUE klass) +{ + TS_REQ *req; + VALUE obj; + + obj = NewTSRequest(klass); + if (!(req = TS_REQ_new())) + ossl_raise(eTimestampError, NULL); + SetTSRequest(obj, req); + + /* Defaults */ + TS_REQ_set_version(req, 1); + TS_REQ_set_cert_req(req, 1); + + return obj; +} + +/* + * When creating a Request with the +File+ or +string+ parameter, the + * corresponding +File+ or +string+ must be DER-encoded. + * + * call-seq: + * OpenSSL::Timestamp::Request.new(file) -> request + * OpenSSL::Timestamp::Request.new(string) -> request + * OpenSSL::Timestamp::Request.new -> empty request + */ +static VALUE +ossl_ts_req_initialize(int argc, VALUE *argv, VALUE self) +{ + TS_REQ *ts_req = DATA_PTR(self); + BIO *in; + VALUE arg; + + if(rb_scan_args(argc, argv, "01", &arg) == 0) { + return self; + } + + arg = ossl_to_der_if_possible(arg); + in = ossl_obj2bio(&arg); + ts_req = d2i_TS_REQ_bio(in, &ts_req); + BIO_free(in); + if (!ts_req) { + DATA_PTR(self) = NULL; + ossl_raise(eTimestampError, "Error when decoding the timestamp request"); + } + DATA_PTR(self) = ts_req; + + return self; +} + +/* + * Returns the 'short name' of the object identifier that represents the + * algorithm that was used to create the message imprint digest. + * + * call-seq: + * request.algorithm -> string + */ +static VALUE +ossl_ts_req_get_algorithm(VALUE self) +{ + TS_REQ *req; + TS_MSG_IMPRINT *mi; + X509_ALGOR *algor; + + GetTSRequest(self, req); + mi = TS_REQ_get_msg_imprint(req); + algor = TS_MSG_IMPRINT_get_algo(mi); + return get_asn1obj(algor->algorithm); +} + +/* + * Allows to set the object identifier or the 'short name' of the + * algorithm that was used to create the message imprint digest. + * + * ===Example: + * request.algorithm = "SHA1" + * + * call-seq: + * request.algorithm = "string" -> string + */ +static VALUE +ossl_ts_req_set_algorithm(VALUE self, VALUE algo) +{ + TS_REQ *req; + TS_MSG_IMPRINT *mi; + ASN1_OBJECT *obj; + X509_ALGOR *algor; + + GetTSRequest(self, req); + obj = obj_to_asn1obj(algo); + mi = TS_REQ_get_msg_imprint(req); + algor = TS_MSG_IMPRINT_get_algo(mi); + if (!X509_ALGOR_set0(algor, obj, V_ASN1_NULL, NULL)) { + ASN1_OBJECT_free(obj); + ossl_raise(eTimestampError, "X509_ALGOR_set0"); + } + + return algo; +} + +/* + * Returns the message imprint (digest) of the data to be timestamped. + * + * call-seq: + * request.message_imprint -> string or nil + */ +static VALUE +ossl_ts_req_get_msg_imprint(VALUE self) +{ + TS_REQ *req; + TS_MSG_IMPRINT *mi; + ASN1_OCTET_STRING *hashed_msg; + VALUE ret; + + GetTSRequest(self, req); + mi = TS_REQ_get_msg_imprint(req); + hashed_msg = TS_MSG_IMPRINT_get_msg(mi); + + ret = rb_str_new((const char *)hashed_msg->data, hashed_msg->length); + + return ret; +} + +/* + * Set the message imprint digest. + * + * call-seq: + * request.message_imprint = "string" -> string + */ +static VALUE +ossl_ts_req_set_msg_imprint(VALUE self, VALUE hash) +{ + TS_REQ *req; + TS_MSG_IMPRINT *mi; + StringValue(hash); + + GetTSRequest(self, req); + mi = TS_REQ_get_msg_imprint(req); + if (!TS_MSG_IMPRINT_set_msg(mi, (unsigned char *)RSTRING_PTR(hash), RSTRING_LENINT(hash))) + ossl_raise(eTimestampError, "TS_MSG_IMPRINT_set_msg"); + + return hash; +} + +/* + * Returns the version of this request. +1+ is the default value. + * + * call-seq: + * request.version -> Integer + */ +static VALUE +ossl_ts_req_get_version(VALUE self) +{ + TS_REQ *req; + + GetTSRequest(self, req); + return LONG2NUM(TS_REQ_get_version(req)); +} + +/* + * Sets the version number for this Request. This should be +1+ for compliant + * servers. + * + * call-seq: + * request.version = number -> Integer + */ +static VALUE +ossl_ts_req_set_version(VALUE self, VALUE version) +{ + TS_REQ *req; + long ver; + + if ((ver = NUM2LONG(version)) < 0) + ossl_raise(eTimestampError, "version must be >= 0!"); + GetTSRequest(self, req); + if (!TS_REQ_set_version(req, ver)) + ossl_raise(eTimestampError, "TS_REQ_set_version"); + + return version; +} + +/* + * Returns the 'short name' of the object identifier that represents the + * timestamp policy under which the server shall create the timestamp. + * + * call-seq: + * request.policy_id -> string or nil + */ +static VALUE +ossl_ts_req_get_policy_id(VALUE self) +{ + TS_REQ *req; + + GetTSRequest(self, req); + if (!TS_REQ_get_policy_id(req)) + return Qnil; + return get_asn1obj(TS_REQ_get_policy_id(req)); +} + +/* + * Allows to set the object identifier that represents the + * timestamp policy under which the server shall create the timestamp. This + * may be left +nil+, implying that the timestamp server will issue the + * timestamp using some default policy. + * + * ===Example: + * request.policy_id = "1.2.3.4.5" + * + * call-seq: + * request.policy_id = "string" -> string + */ +static VALUE +ossl_ts_req_set_policy_id(VALUE self, VALUE oid) +{ + TS_REQ *req; + ASN1_OBJECT *obj; + int ok; + + GetTSRequest(self, req); + obj = obj_to_asn1obj(oid); + ok = TS_REQ_set_policy_id(req, obj); + ASN1_OBJECT_free(obj); + if (!ok) + ossl_raise(eTimestampError, "TS_REQ_set_policy_id"); + + return oid; +} + +/* + * Returns the nonce (number used once) that the server shall include in its + * response. + * + * call-seq: + * request.nonce -> BN or nil + */ +static VALUE +ossl_ts_req_get_nonce(VALUE self) +{ + TS_REQ *req; + const ASN1_INTEGER * nonce; + + GetTSRequest(self, req); + if (!(nonce = TS_REQ_get_nonce(req))) + return Qnil; + return asn1integer_to_num(nonce); +} + +/* + * Sets the nonce (number used once) that the server shall include in its + * response. If the nonce is set, the server must return the same nonce value in + * a valid Response. + * + * call-seq: + * request.nonce = number -> BN + */ +static VALUE +ossl_ts_req_set_nonce(VALUE self, VALUE num) +{ + TS_REQ *req; + ASN1_INTEGER *nonce; + int ok; + + GetTSRequest(self, req); + nonce = num_to_asn1integer(num, NULL); + ok = TS_REQ_set_nonce(req, nonce); + ASN1_INTEGER_free(nonce); + if (!ok) + ossl_raise(eTimestampError, NULL); + return num; +} + +/* + * Indicates whether the response shall contain the timestamp authority's + * certificate or not. + * + * call-seq: + * request.cert_requested? -> true or false + */ +static VALUE +ossl_ts_req_get_cert_requested(VALUE self) +{ + TS_REQ *req; + + GetTSRequest(self, req); + return TS_REQ_get_cert_req(req) ? Qtrue: Qfalse; +} + +/* + * Specify whether the response shall contain the timestamp authority's + * certificate or not. The default value is +true+. + * + * call-seq: + * request.cert_requested = boolean -> true or false + */ +static VALUE +ossl_ts_req_set_cert_requested(VALUE self, VALUE requested) +{ + TS_REQ *req; + + GetTSRequest(self, req); + TS_REQ_set_cert_req(req, RTEST(requested)); + + return requested; +} + +/* + * DER-encodes this Request. + * + * call-seq: + * request.to_der -> DER-encoded string + */ +static VALUE +ossl_ts_req_to_der(VALUE self) +{ + TS_REQ *req; + TS_MSG_IMPRINT *mi; + X509_ALGOR *algo; + ASN1_OCTET_STRING *hashed_msg; + + GetTSRequest(self, req); + mi = TS_REQ_get_msg_imprint(req); + + algo = TS_MSG_IMPRINT_get_algo(mi); + if (OBJ_obj2nid(algo->algorithm) == NID_undef) + ossl_raise(eTimestampError, "Message imprint missing algorithm"); + + hashed_msg = TS_MSG_IMPRINT_get_msg(mi); + if (!hashed_msg->length) + ossl_raise(eTimestampError, "Message imprint missing hashed message"); + + return asn1_to_der((void *)req, (int (*)(void *, unsigned char **))i2d_TS_REQ); +} + +static VALUE +ossl_ts_resp_alloc(VALUE klass) +{ + TS_RESP *resp; + VALUE obj; + + obj = NewTSResponse(klass); + if (!(resp = TS_RESP_new())) + ossl_raise(eTimestampError, NULL); + SetTSResponse(obj, resp); + + return obj; +} + +/* + * Creates a Response from a +File+ or +string+ parameter, the + * corresponding +File+ or +string+ must be DER-encoded. Please note + * that Response is an immutable read-only class. If you'd like to create + * timestamps please refer to Factory instead. + * + * call-seq: + * OpenSSL::Timestamp::Response.new(file) -> response + * OpenSSL::Timestamp::Response.new(string) -> response + */ +static VALUE +ossl_ts_resp_initialize(VALUE self, VALUE der) +{ + TS_RESP *ts_resp = DATA_PTR(self); + BIO *in; + + der = ossl_to_der_if_possible(der); + in = ossl_obj2bio(&der); + ts_resp = d2i_TS_RESP_bio(in, &ts_resp); + BIO_free(in); + if (!ts_resp) { + DATA_PTR(self) = NULL; + ossl_raise(eTimestampError, "Error when decoding the timestamp response"); + } + DATA_PTR(self) = ts_resp; + + return self; +} + +/* + * Returns one of GRANTED, GRANTED_WITH_MODS, REJECTION, WAITING, + * REVOCATION_WARNING or REVOCATION_NOTIFICATION. A timestamp token has + * been created only in case +status+ is equal to GRANTED or GRANTED_WITH_MODS. + * + * call-seq: + * response.status -> BN (never nil) + */ +static VALUE +ossl_ts_resp_get_status(VALUE self) +{ + TS_RESP *resp; + TS_STATUS_INFO *si; + const ASN1_INTEGER *st; + + GetTSResponse(self, resp); + si = TS_RESP_get_status_info(resp); + st = TS_STATUS_INFO_get0_status(si); + + return asn1integer_to_num(st); +} + +/* + * In cases no timestamp token has been created, this field contains further + * info about the reason why response creation failed. The method returns either + * nil (the request was successful and a timestamp token was created) or one of + * the following: + * * :BAD_ALG - Indicates that the timestamp server rejects the message + * imprint algorithm used in the Request + * * :BAD_REQUEST - Indicates that the timestamp server was not able to process + * the Request properly + * * :BAD_DATA_FORMAT - Indicates that the timestamp server was not able to + * parse certain data in the Request + * * :TIME_NOT_AVAILABLE - Indicates that the server could not access its time + * source + * * :UNACCEPTED_POLICY - Indicates that the requested policy identifier is not + * recognized or supported by the timestamp server + * * :UNACCEPTED_EXTENSIION - Indicates that an extension in the Request is + * not supported by the timestamp server + * * :ADD_INFO_NOT_AVAILABLE -Indicates that additional information requested + * is either not understood or currently not available + * * :SYSTEM_FAILURE - Timestamp creation failed due to an internal error that + * occurred on the timestamp server + * + * call-seq: + * response.failure_info -> nil or symbol + */ +static VALUE +ossl_ts_resp_get_failure_info(VALUE self) +{ + TS_RESP *resp; + TS_STATUS_INFO *si; + + /* The ASN1_BIT_STRING_get_bit changed from 1.0.0. to 1.1.0, making this + * const. */ + #if defined(HAVE_TS_STATUS_INFO_GET0_FAILURE_INFO) + const ASN1_BIT_STRING *fi; + #else + ASN1_BIT_STRING *fi; + #endif + + GetTSResponse(self, resp); + si = TS_RESP_get_status_info(resp); + fi = TS_STATUS_INFO_get0_failure_info(si); + if (!fi) + return Qnil; + if (ASN1_BIT_STRING_get_bit(fi, TS_INFO_BAD_ALG)) + return sBAD_ALG; + if (ASN1_BIT_STRING_get_bit(fi, TS_INFO_BAD_REQUEST)) + return sBAD_REQUEST; + if (ASN1_BIT_STRING_get_bit(fi, TS_INFO_BAD_DATA_FORMAT)) + return sBAD_DATA_FORMAT; + if (ASN1_BIT_STRING_get_bit(fi, TS_INFO_TIME_NOT_AVAILABLE)) + return sTIME_NOT_AVAILABLE; + if (ASN1_BIT_STRING_get_bit(fi, TS_INFO_UNACCEPTED_POLICY)) + return sUNACCEPTED_POLICY; + if (ASN1_BIT_STRING_get_bit(fi, TS_INFO_UNACCEPTED_EXTENSION)) + return sUNACCEPTED_EXTENSION; + if (ASN1_BIT_STRING_get_bit(fi, TS_INFO_ADD_INFO_NOT_AVAILABLE)) + return sADD_INFO_NOT_AVAILABLE; + if (ASN1_BIT_STRING_get_bit(fi, TS_INFO_SYSTEM_FAILURE)) + return sSYSTEM_FAILURE; + + ossl_raise(eTimestampError, "Unrecognized failure info."); +} + +/* + * In cases of failure this field may contain an array of strings further + * describing the origin of the failure. + * + * call-seq: + * response.status_text -> Array of strings or nil + */ +static VALUE +ossl_ts_resp_get_status_text(VALUE self) +{ + TS_RESP *resp; + TS_STATUS_INFO *si; + const STACK_OF(ASN1_UTF8STRING) *text; + ASN1_UTF8STRING *current; + int i; + VALUE ret = rb_ary_new(); + + GetTSResponse(self, resp); + si = TS_RESP_get_status_info(resp); + if ((text = TS_STATUS_INFO_get0_text(si))) { + for (i = 0; i < sk_ASN1_UTF8STRING_num(text); i++) { + current = sk_ASN1_UTF8STRING_value(text, i); + rb_ary_push(ret, asn1str_to_str(current)); + } + } + + return ret; +} + +/* + * If a timestamp token is present, this returns it in the form of a + * OpenSSL::PKCS7. + * + * call-seq: + * response.token -> nil or OpenSSL::PKCS7 + */ +static VALUE +ossl_ts_resp_get_token(VALUE self) +{ + TS_RESP *resp; + PKCS7 *p7, *copy; + VALUE obj; + + GetTSResponse(self, resp); + if (!(p7 = TS_RESP_get_token(resp))) + return Qnil; + + obj = NewPKCS7(cPKCS7); + + if (!(copy = PKCS7_dup(p7))) + ossl_raise(eTimestampError, NULL); + + SetPKCS7(obj, copy); + + return obj; +} + +/* + * Get the response's token info if present. + * + * call-seq: + * response.token_info -> nil or OpenSSL::Timestamp::TokenInfo + */ +static VALUE +ossl_ts_resp_get_token_info(VALUE self) +{ + TS_RESP *resp; + TS_TST_INFO *info, *copy; + VALUE obj; + + GetTSResponse(self, resp); + if (!(info = TS_RESP_get_tst_info(resp))) + return Qnil; + + obj = NewTSTokenInfo(cTimestampTokenInfo); + + if (!(copy = TS_TST_INFO_dup(info))) + ossl_raise(eTimestampError, NULL); + + SetTSTokenInfo(obj, copy); + + return obj; +} + +/* + * If the Request specified to request the TSA certificate + * (Request#cert_requested = true), then this field contains the + * certificate of the timestamp authority. + * + * call-seq: + * response.tsa_certificate -> OpenSSL::X509::Certificate or nil + */ +static VALUE +ossl_ts_resp_get_tsa_certificate(VALUE self) +{ + TS_RESP *resp; + PKCS7 *p7; + PKCS7_SIGNER_INFO *ts_info; + X509 *cert; + + GetTSResponse(self, resp); + if (!(p7 = TS_RESP_get_token(resp))) + return Qnil; + ts_info = sk_PKCS7_SIGNER_INFO_value(p7->d.sign->signer_info, 0); + cert = PKCS7_cert_from_signer_info(p7, ts_info); + if (!cert) + return Qnil; + return ossl_x509_new(cert); +} + +/* + * Returns the Response in DER-encoded form. + * + * call-seq: + * response.to_der -> string + */ +static VALUE +ossl_ts_resp_to_der(VALUE self) +{ + TS_RESP *resp; + + GetTSResponse(self, resp); + return asn1_to_der((void *)resp, (int (*)(void *, unsigned char **))i2d_TS_RESP); +} + +/* + * Verifies a timestamp token by checking the signature, validating the + * certificate chain implied by tsa_certificate and by checking conformance to + * a given Request. Mandatory parameters are the Request associated to this + * Response, and an OpenSSL::X509::Store of trusted roots. + * + * Intermediate certificates can optionally be supplied for creating the + * certificate chain. These intermediate certificates must all be + * instances of OpenSSL::X509::Certificate. + * + * If validation fails, several kinds of exceptions can be raised: + * * TypeError if types don't fit + * * TimestampError if something is wrong with the timestamp token itself, if + * it is not conformant to the Request, or if validation of the timestamp + * certificate chain fails. + * + * call-seq: + * response.verify(Request, root_store) -> Response + * response.verify(Request, root_store, [intermediate_cert]) -> Response + */ +static VALUE +ossl_ts_resp_verify(int argc, VALUE *argv, VALUE self) +{ + VALUE ts_req, store, intermediates; + TS_RESP *resp; + TS_REQ *req; + X509_STORE *x509st; + TS_VERIFY_CTX *ctx; + STACK_OF(X509) *x509inter = NULL; + PKCS7* p7; + X509 *cert; + int status, i, ok; + + rb_scan_args(argc, argv, "21", &ts_req, &store, &intermediates); + + GetTSResponse(self, resp); + GetTSRequest(ts_req, req); + x509st = GetX509StorePtr(store); + + if (!(ctx = TS_REQ_to_TS_VERIFY_CTX(req, NULL))) { + ossl_raise(eTimestampError, "Error when creating the verification context."); + } + + if (!NIL_P(intermediates)) { + x509inter = ossl_protect_x509_ary2sk(intermediates, &status); + if (status) { + TS_VERIFY_CTX_free(ctx); + rb_jump_tag(status); + } + } else if (!(x509inter = sk_X509_new_null())) { + TS_VERIFY_CTX_free(ctx); + ossl_raise(eTimestampError, "sk_X509_new_null"); + } + + if (!(p7 = TS_RESP_get_token(resp))) { + TS_VERIFY_CTX_free(ctx); + sk_X509_pop_free(x509inter, X509_free); + ossl_raise(eTimestampError, "TS_RESP_get_token"); + } + for (i=0; i < sk_X509_num(p7->d.sign->cert); i++) { + cert = sk_X509_value(p7->d.sign->cert, i); + if (!sk_X509_push(x509inter, cert)) { + sk_X509_pop_free(x509inter, X509_free); + TS_VERIFY_CTX_free(ctx); + ossl_raise(eTimestampError, "sk_X509_push"); + } + X509_up_ref(cert); + } + + TS_VERIFY_CTX_set_certs(ctx, x509inter); + TS_VERIFY_CTX_add_flags(ctx, TS_VFY_SIGNATURE); + TS_VERIFY_CTX_set_store(ctx, x509st); + + ok = TS_RESP_verify_response(ctx, resp); + /* + * TS_VERIFY_CTX_set_store() call above does not increment the reference + * counter, so it must be unset before TS_VERIFY_CTX_free() is called. + */ + TS_VERIFY_CTX_set_store(ctx, NULL); + TS_VERIFY_CTX_free(ctx); + + if (!ok) + ossl_raise(eTimestampError, "TS_RESP_verify_response"); + + return self; +} + +static VALUE +ossl_ts_token_info_alloc(VALUE klass) +{ + TS_TST_INFO *info; + VALUE obj; + + obj = NewTSTokenInfo(klass); + if (!(info = TS_TST_INFO_new())) + ossl_raise(eTimestampError, NULL); + SetTSTokenInfo(obj, info); + + return obj; +} + +/* + * Creates a TokenInfo from a +File+ or +string+ parameter, the + * corresponding +File+ or +string+ must be DER-encoded. Please note + * that TokenInfo is an immutable read-only class. If you'd like to create + * timestamps please refer to Factory instead. + * + * call-seq: + * OpenSSL::Timestamp::TokenInfo.new(file) -> token-info + * OpenSSL::Timestamp::TokenInfo.new(string) -> token-info + */ +static VALUE +ossl_ts_token_info_initialize(VALUE self, VALUE der) +{ + TS_TST_INFO *info = DATA_PTR(self); + BIO *in; + + der = ossl_to_der_if_possible(der); + in = ossl_obj2bio(&der); + info = d2i_TS_TST_INFO_bio(in, &info); + BIO_free(in); + if (!info) { + DATA_PTR(self) = NULL; + ossl_raise(eTimestampError, "Error when decoding the timestamp token info"); + } + DATA_PTR(self) = info; + + return self; +} + +/* + * Returns the version number of the token info. With compliant servers, + * this value should be +1+ if present. If status is GRANTED or + * GRANTED_WITH_MODS. + * + * call-seq: + * token_info.version -> Integer or nil + */ +static VALUE +ossl_ts_token_info_get_version(VALUE self) +{ + TS_TST_INFO *info; + + GetTSTokenInfo(self, info); + return LONG2NUM(TS_TST_INFO_get_version(info)); +} + +/* + * Returns the timestamp policy object identifier of the policy this timestamp + * was created under. If status is GRANTED or GRANTED_WITH_MODS, this is never + * +nil+. + * + * ===Example: + * id = token_info.policy_id + * puts id -> "1.2.3.4.5" + * + * call-seq: + * token_info.policy_id -> string or nil + */ +static VALUE +ossl_ts_token_info_get_policy_id(VALUE self) +{ + TS_TST_INFO *info; + + GetTSTokenInfo(self, info); + return get_asn1obj(TS_TST_INFO_get_policy_id(info)); +} + +/* + * Returns the 'short name' of the object identifier representing the algorithm + * that was used to derive the message imprint digest. For valid timestamps, + * this is the same value that was already given in the Request. If status is + * GRANTED or GRANTED_WITH_MODS, this is never +nil+. + * + * ===Example: + * algo = token_info.algorithm + * puts algo -> "SHA1" + * + * call-seq: + * token_info.algorithm -> string or nil + */ +static VALUE +ossl_ts_token_info_get_algorithm(VALUE self) +{ + TS_TST_INFO *info; + TS_MSG_IMPRINT *mi; + X509_ALGOR *algo; + + GetTSTokenInfo(self, info); + mi = TS_TST_INFO_get_msg_imprint(info); + algo = TS_MSG_IMPRINT_get_algo(mi); + return get_asn1obj(algo->algorithm); +} + +/* + * Returns the message imprint digest. For valid timestamps, + * this is the same value that was already given in the Request. + * If status is GRANTED or GRANTED_WITH_MODS, this is never +nil+. + * + * ===Example: + * mi = token_info.msg_imprint + * puts mi -> "DEADBEEF" + * + * call-seq: + * token_info.msg_imprint -> string. + */ +static VALUE +ossl_ts_token_info_get_msg_imprint(VALUE self) +{ + TS_TST_INFO *info; + TS_MSG_IMPRINT *mi; + ASN1_OCTET_STRING *hashed_msg; + VALUE ret; + + GetTSTokenInfo(self, info); + mi = TS_TST_INFO_get_msg_imprint(info); + hashed_msg = TS_MSG_IMPRINT_get_msg(mi); + ret = rb_str_new((const char *)hashed_msg->data, hashed_msg->length); + + return ret; +} + +/* + * Returns serial number of the timestamp token. This value shall never be the + * same for two timestamp tokens issued by a dedicated timestamp authority. + * If status is GRANTED or GRANTED_WITH_MODS, this is never +nil+. + * + * call-seq: + * token_info.serial_number -> BN or nil + */ +static VALUE +ossl_ts_token_info_get_serial_number(VALUE self) +{ + TS_TST_INFO *info; + + GetTSTokenInfo(self, info); + return asn1integer_to_num(TS_TST_INFO_get_serial(info)); +} + +/* + * Returns time when this timestamp token was created. If status is GRANTED or + * GRANTED_WITH_MODS, this is never +nil+. + * + * call-seq: + * token_info.gen_time -> Time + */ +static VALUE +ossl_ts_token_info_get_gen_time(VALUE self) +{ + TS_TST_INFO *info; + + GetTSTokenInfo(self, info); + return asn1time_to_time(TS_TST_INFO_get_time(info)); +} + +/* + * If the ordering field is missing, or if the ordering field is present + * and set to false, then the genTime field only indicates the time at + * which the time-stamp token has been created by the TSA. In such a + * case, the ordering of time-stamp tokens issued by the same TSA or + * different TSAs is only possible when the difference between the + * genTime of the first time-stamp token and the genTime of the second + * time-stamp token is greater than the sum of the accuracies of the + * genTime for each time-stamp token. + * + * If the ordering field is present and set to true, every time-stamp + * token from the same TSA can always be ordered based on the genTime + * field, regardless of the genTime accuracy. + * + * call-seq: + * token_info.ordering -> true, falses or nil + */ +static VALUE +ossl_ts_token_info_get_ordering(VALUE self) +{ + TS_TST_INFO *info; + + GetTSTokenInfo(self, info); + return TS_TST_INFO_get_ordering(info) ? Qtrue : Qfalse; +} + +/* + * If the timestamp token is valid then this field contains the same nonce that + * was passed to the timestamp server in the initial Request. + * + * call-seq: + * token_info.nonce -> BN or nil + */ +static VALUE +ossl_ts_token_info_get_nonce(VALUE self) +{ + TS_TST_INFO *info; + const ASN1_INTEGER *nonce; + + GetTSTokenInfo(self, info); + if (!(nonce = TS_TST_INFO_get_nonce(info))) + return Qnil; + + return asn1integer_to_num(nonce); +} + +/* + * Returns the TokenInfo in DER-encoded form. + * + * call-seq: + * token_info.to_der -> string + */ +static VALUE +ossl_ts_token_info_to_der(VALUE self) +{ + TS_TST_INFO *info; + + GetTSTokenInfo(self, info); + return asn1_to_der((void *)info, (int (*)(void *, unsigned char **))i2d_TS_TST_INFO); +} + +static ASN1_INTEGER * +ossl_tsfac_serial_cb(struct TS_resp_ctx *ctx, void *data) +{ + ASN1_INTEGER **snptr = (ASN1_INTEGER **)data; + ASN1_INTEGER *sn = *snptr; + *snptr = NULL; + return sn; +} + +static int +#if !defined(LIBRESSL_VERSION_NUMBER) +ossl_tsfac_time_cb(struct TS_resp_ctx *ctx, void *data, long *sec, long *usec) +#else +ossl_tsfac_time_cb(struct TS_resp_ctx *ctx, void *data, time_t *sec, long *usec) +#endif +{ + *sec = *((long *)data); + *usec = 0; + return 1; +} + +static VALUE +ossl_evp_get_digestbyname_i(VALUE arg) +{ + return (VALUE)ossl_evp_get_digestbyname(arg); +} + +static VALUE +ossl_obj2bio_i(VALUE arg) +{ + return (VALUE)ossl_obj2bio((VALUE *)arg); +} + +/* + * Creates a Response with the help of an OpenSSL::PKey, an + * OpenSSL::X509::Certificate and a Request. + * + * Mandatory parameters for timestamp creation that need to be set in the + * Request: + * + * * Request#algorithm + * * Request#message_imprint + * + * Mandatory parameters that need to be set in the Factory: + * * Factory#serial_number + * * Factory#gen_time + * * Factory#allowed_digests + * + * In addition one of either Request#policy_id or Factory#default_policy_id + * must be set. + * + * Raises a TimestampError if creation fails, though successfully created error + * responses may be returned. + * + * call-seq: + * factory.create_timestamp(key, certificate, request) -> Response + */ +static VALUE +ossl_tsfac_create_ts(VALUE self, VALUE key, VALUE certificate, VALUE request) +{ + VALUE serial_number, def_policy_id, gen_time, additional_certs, allowed_digests; + VALUE str; + STACK_OF(X509) *inter_certs; + VALUE tsresp, ret = Qnil; + EVP_PKEY *sign_key; + X509 *tsa_cert; + TS_REQ *req; + TS_RESP *response = NULL; + TS_RESP_CTX *ctx = NULL; + BIO *req_bio; + ASN1_INTEGER *asn1_serial = NULL; + ASN1_OBJECT *def_policy_id_obj = NULL; + long lgen_time; + const char * err_msg = NULL; + int status = 0; + + tsresp = NewTSResponse(cTimestampResponse); + tsa_cert = GetX509CertPtr(certificate); + sign_key = GetPrivPKeyPtr(key); + GetTSRequest(request, req); + + gen_time = ossl_tsfac_get_gen_time(self); + if (!rb_obj_is_instance_of(gen_time, rb_cTime)) { + err_msg = "@gen_time must be a Time."; + goto end; + } + lgen_time = NUM2LONG(rb_funcall(gen_time, rb_intern("to_i"), 0)); + + serial_number = ossl_tsfac_get_serial_number(self); + if (NIL_P(serial_number)) { + err_msg = "@serial_number must be set."; + goto end; + } + asn1_serial = num_to_asn1integer(serial_number, NULL); + + def_policy_id = ossl_tsfac_get_default_policy_id(self); + if (NIL_P(def_policy_id) && !TS_REQ_get_policy_id(req)) { + err_msg = "No policy id in the request and no default policy set"; + goto end; + } + if (!NIL_P(def_policy_id) && !TS_REQ_get_policy_id(req)) { + def_policy_id_obj = (ASN1_OBJECT*)rb_protect(obj_to_asn1obj_i, (VALUE)def_policy_id, &status); + if (status) + goto end; + } + + if (!(ctx = TS_RESP_CTX_new())) { + err_msg = "Memory allocation failed."; + goto end; + } + + TS_RESP_CTX_set_serial_cb(ctx, ossl_tsfac_serial_cb, &asn1_serial); + if (!TS_RESP_CTX_set_signer_cert(ctx, tsa_cert)) { + err_msg = "Certificate does not contain the timestamping extension"; + goto end; + } + + additional_certs = ossl_tsfac_get_additional_certs(self); + if (rb_obj_is_kind_of(additional_certs, rb_cArray)) { + inter_certs = ossl_protect_x509_ary2sk(additional_certs, &status); + if (status) + goto end; + + /* this dups the sk_X509 and ups each cert's ref count */ + TS_RESP_CTX_set_certs(ctx, inter_certs); + sk_X509_pop_free(inter_certs, X509_free); + } + + TS_RESP_CTX_set_signer_key(ctx, sign_key); + if (!NIL_P(def_policy_id) && !TS_REQ_get_policy_id(req)) + TS_RESP_CTX_set_def_policy(ctx, def_policy_id_obj); + if (TS_REQ_get_policy_id(req)) + TS_RESP_CTX_set_def_policy(ctx, TS_REQ_get_policy_id(req)); + TS_RESP_CTX_set_time_cb(ctx, ossl_tsfac_time_cb, &lgen_time); + + allowed_digests = ossl_tsfac_get_allowed_digests(self); + if (rb_obj_is_kind_of(allowed_digests, rb_cArray)) { + int i; + VALUE rbmd; + const EVP_MD *md; + + for (i = 0; i < RARRAY_LEN(allowed_digests); i++) { + rbmd = rb_ary_entry(allowed_digests, i); + md = (const EVP_MD *)rb_protect(ossl_evp_get_digestbyname_i, rbmd, &status); + if (status) + goto end; + TS_RESP_CTX_add_md(ctx, md); + } + } + + str = rb_protect(ossl_to_der, request, &status); + if (status) + goto end; + + req_bio = (BIO*)rb_protect(ossl_obj2bio_i, (VALUE)&str, &status); + if (status) + goto end; + + response = TS_RESP_create_response(ctx, req_bio); + BIO_free(req_bio); + + if (!response) { + err_msg = "Error during response generation"; + goto end; + } + + /* bad responses aren't exceptional, but openssl still sets error + * information. */ + ossl_clear_error(); + + SetTSResponse(tsresp, response); + ret = tsresp; + +end: + ASN1_INTEGER_free(asn1_serial); + ASN1_OBJECT_free(def_policy_id_obj); + TS_RESP_CTX_free(ctx); + if (err_msg) + rb_exc_raise(ossl_make_error(eTimestampError, rb_str_new_cstr(err_msg))); + if (status) + rb_jump_tag(status); + return ret; +} + +/* + * INIT + */ +void +Init_ossl_ts(void) +{ + #if 0 + mOSSL = rb_define_module("OpenSSL"); /* let rdoc know about mOSSL */ + #endif + + /* + * Possible return value for +Response#failure_info+. Indicates that the + * timestamp server rejects the message imprint algorithm used in the + * +Request+ + */ + sBAD_ALG = ID2SYM(rb_intern_const("BAD_ALG")); + + /* + * Possible return value for +Response#failure_info+. Indicates that the + * timestamp server was not able to process the +Request+ properly. + */ + sBAD_REQUEST = ID2SYM(rb_intern_const("BAD_REQUEST")); + /* + * Possible return value for +Response#failure_info+. Indicates that the + * timestamp server was not able to parse certain data in the +Request+. + */ + sBAD_DATA_FORMAT = ID2SYM(rb_intern_const("BAD_DATA_FORMAT")); + + sTIME_NOT_AVAILABLE = ID2SYM(rb_intern_const("TIME_NOT_AVAILABLE")); + sUNACCEPTED_POLICY = ID2SYM(rb_intern_const("UNACCEPTED_POLICY")); + sUNACCEPTED_EXTENSION = ID2SYM(rb_intern_const("UNACCEPTED_EXTENSION")); + sADD_INFO_NOT_AVAILABLE = ID2SYM(rb_intern_const("ADD_INFO_NOT_AVAILABLE")); + sSYSTEM_FAILURE = ID2SYM(rb_intern_const("SYSTEM_FAILURE")); + + /* Document-class: OpenSSL::Timestamp + * Provides classes and methods to request, create and validate + * {RFC3161-compliant}[http://www.ietf.org/rfc/rfc3161.txt] timestamps. + * Request may be used to either create requests from scratch or to parse + * existing requests that again can be used to request timestamps from a + * timestamp server, e.g. via the net/http. The resulting timestamp + * response may be parsed using Response. + * + * Please note that Response is read-only and immutable. To create a + * Response, an instance of Factory as well as a valid Request are needed. + * + * ===Create a Response: + * #Assumes ts.p12 is a PKCS#12-compatible file with a private key + * #and a certificate that has an extended key usage of 'timeStamping' + * p12 = OpenSSL::PKCS12.new(File.binread('ts.p12'), 'pwd') + * md = OpenSSL::Digest.new('SHA1') + * hash = md.digest(data) #some binary data to be timestamped + * req = OpenSSL::Timestamp::Request.new + * req.algorithm = 'SHA1' + * req.message_imprint = hash + * req.policy_id = "1.2.3.4.5" + * req.nonce = 42 + * fac = OpenSSL::Timestamp::Factory.new + * fac.gen_time = Time.now + * fac.serial_number = 1 + * timestamp = fac.create_timestamp(p12.key, p12.certificate, req) + * + * ===Verify a timestamp response: + * #Assume we have a timestamp token in a file called ts.der + * ts = OpenSSL::Timestamp::Response.new(File.binread('ts.der')) + * #Assume we have the Request for this token in a file called req.der + * req = OpenSSL::Timestamp::Request.new(File.binread('req.der')) + * # Assume the associated root CA certificate is contained in a + * # DER-encoded file named root.cer + * root = OpenSSL::X509::Certificate.new(File.binread('root.cer')) + * # get the necessary intermediate certificates, available in + * # DER-encoded form in inter1.cer and inter2.cer + * inter1 = OpenSSL::X509::Certificate.new(File.binread('inter1.cer')) + * inter2 = OpenSSL::X509::Certificate.new(File.binread('inter2.cer')) + * ts.verify(req, root, inter1, inter2) -> ts or raises an exception if validation fails + * + */ + mTimestamp = rb_define_module_under(mOSSL, "Timestamp"); + + /* Document-class: OpenSSL::Timestamp::TimestampError + * Generic exception class of the Timestamp module. + */ + eTimestampError = rb_define_class_under(mTimestamp, "TimestampError", eOSSLError); + + /* Document-class: OpenSSL::Timestamp::Response + * Immutable and read-only representation of a timestamp response returned + * from a timestamp server after receiving an associated Request. Allows + * access to specific information about the response but also allows to + * verify the Response. + */ + cTimestampResponse = rb_define_class_under(mTimestamp, "Response", rb_cObject); + rb_define_alloc_func(cTimestampResponse, ossl_ts_resp_alloc); + rb_define_method(cTimestampResponse, "initialize", ossl_ts_resp_initialize, 1); + rb_define_method(cTimestampResponse, "status", ossl_ts_resp_get_status, 0); + rb_define_method(cTimestampResponse, "failure_info", ossl_ts_resp_get_failure_info, 0); + rb_define_method(cTimestampResponse, "status_text", ossl_ts_resp_get_status_text, 0); + rb_define_method(cTimestampResponse, "token", ossl_ts_resp_get_token, 0); + rb_define_method(cTimestampResponse, "token_info", ossl_ts_resp_get_token_info, 0); + rb_define_method(cTimestampResponse, "tsa_certificate", ossl_ts_resp_get_tsa_certificate, 0); + rb_define_method(cTimestampResponse, "to_der", ossl_ts_resp_to_der, 0); + rb_define_method(cTimestampResponse, "verify", ossl_ts_resp_verify, -1); + + /* Document-class: OpenSSL::Timestamp::TokenInfo + * Immutable and read-only representation of a timestamp token info from a + * Response. + */ + cTimestampTokenInfo = rb_define_class_under(mTimestamp, "TokenInfo", rb_cObject); + rb_define_alloc_func(cTimestampTokenInfo, ossl_ts_token_info_alloc); + rb_define_method(cTimestampTokenInfo, "initialize", ossl_ts_token_info_initialize, 1); + rb_define_method(cTimestampTokenInfo, "version", ossl_ts_token_info_get_version, 0); + rb_define_method(cTimestampTokenInfo, "policy_id", ossl_ts_token_info_get_policy_id, 0); + rb_define_method(cTimestampTokenInfo, "algorithm", ossl_ts_token_info_get_algorithm, 0); + rb_define_method(cTimestampTokenInfo, "message_imprint", ossl_ts_token_info_get_msg_imprint, 0); + rb_define_method(cTimestampTokenInfo, "serial_number", ossl_ts_token_info_get_serial_number, 0); + rb_define_method(cTimestampTokenInfo, "gen_time", ossl_ts_token_info_get_gen_time, 0); + rb_define_method(cTimestampTokenInfo, "ordering", ossl_ts_token_info_get_ordering, 0); + rb_define_method(cTimestampTokenInfo, "nonce", ossl_ts_token_info_get_nonce, 0); + rb_define_method(cTimestampTokenInfo, "to_der", ossl_ts_token_info_to_der, 0); + + /* Document-class: OpenSSL::Timestamp::Request + * Allows to create timestamp requests or parse existing ones. A Request is + * also needed for creating timestamps from scratch with Factory. When + * created from scratch, some default values are set: + * * version is set to +1+ + * * cert_requested is set to +true+ + * * algorithm, message_imprint, policy_id, and nonce are set to +false+ + */ + cTimestampRequest = rb_define_class_under(mTimestamp, "Request", rb_cObject); + rb_define_alloc_func(cTimestampRequest, ossl_ts_req_alloc); + rb_define_method(cTimestampRequest, "initialize", ossl_ts_req_initialize, -1); + rb_define_method(cTimestampRequest, "version=", ossl_ts_req_set_version, 1); + rb_define_method(cTimestampRequest, "version", ossl_ts_req_get_version, 0); + rb_define_method(cTimestampRequest, "algorithm=", ossl_ts_req_set_algorithm, 1); + rb_define_method(cTimestampRequest, "algorithm", ossl_ts_req_get_algorithm, 0); + rb_define_method(cTimestampRequest, "message_imprint=", ossl_ts_req_set_msg_imprint, 1); + rb_define_method(cTimestampRequest, "message_imprint", ossl_ts_req_get_msg_imprint, 0); + rb_define_method(cTimestampRequest, "policy_id=", ossl_ts_req_set_policy_id, 1); + rb_define_method(cTimestampRequest, "policy_id", ossl_ts_req_get_policy_id, 0); + rb_define_method(cTimestampRequest, "nonce=", ossl_ts_req_set_nonce, 1); + rb_define_method(cTimestampRequest, "nonce", ossl_ts_req_get_nonce, 0); + rb_define_method(cTimestampRequest, "cert_requested=", ossl_ts_req_set_cert_requested, 1); + rb_define_method(cTimestampRequest, "cert_requested?", ossl_ts_req_get_cert_requested, 0); + rb_define_method(cTimestampRequest, "to_der", ossl_ts_req_to_der, 0); + + /* + * Indicates a successful response. Equal to +0+. + */ + rb_define_const(cTimestampResponse, "GRANTED", INT2NUM(TS_STATUS_GRANTED)); + /* + * Indicates a successful response that probably contains modifications + * from the initial request. Equal to +1+. + */ + rb_define_const(cTimestampResponse, "GRANTED_WITH_MODS", INT2NUM(TS_STATUS_GRANTED_WITH_MODS)); + /* + * Indicates a failure. No timestamp token was created. Equal to +2+. + */ + rb_define_const(cTimestampResponse, "REJECTION", INT2NUM(TS_STATUS_REJECTION)); + /* + * Indicates a failure. No timestamp token was created. Equal to +3+. + */ + rb_define_const(cTimestampResponse, "WAITING", INT2NUM(TS_STATUS_WAITING)); + /* + * Indicates a failure. No timestamp token was created. Revocation of a + * certificate is imminent. Equal to +4+. + */ + rb_define_const(cTimestampResponse, "REVOCATION_WARNING", INT2NUM(TS_STATUS_REVOCATION_WARNING)); + /* + * Indicates a failure. No timestamp token was created. A certificate + * has been revoked. Equal to +5+. + */ + rb_define_const(cTimestampResponse, "REVOCATION_NOTIFICATION", INT2NUM(TS_STATUS_REVOCATION_NOTIFICATION)); + + /* Document-class: OpenSSL::Timestamp::Factory + * + * Used to generate a Response from scratch. + * + * Please bear in mind that the implementation will always apply and prefer + * the policy object identifier given in the request over the default policy + * id specified in the Factory. As a consequence, +default_policy_id+ will + * only be applied if no Request#policy_id was given. But this also means + * that one needs to check the policy identifier in the request manually + * before creating the Response, e.g. to check whether it complies to a + * specific set of acceptable policies. + * + * There exists also the possibility to add certificates (instances of + * OpenSSL::X509::Certificate) besides the timestamping certificate + * that will be included in the resulting timestamp token if + * Request#cert_requested? is +true+. Ideally, one would also include any + * intermediate certificates (the root certificate can be left out - in + * order to trust it any verifying party will have to be in its possession + * anyway). This simplifies validation of the timestamp since these + * intermediate certificates are "already there" and need not be passed as + * external parameters to Response#verify anymore, thus minimizing external + * resources needed for verification. + * + * ===Example: Inclusion of (untrusted) intermediate certificates + * + * Assume we received a timestamp request that has set Request#policy_id to + * +nil+ and Request#cert_requested? to true. The raw request bytes are + * stored in a variable called +req_raw+. We'd still like to integrate + * the necessary intermediate certificates (in +inter1.cer+ and + * +inter2.cer+) to simplify validation of the resulting Response. +ts.p12+ + * is a PKCS#12-compatible file including the private key and the + * timestamping certificate. + * + * req = OpenSSL::Timestamp::Request.new(raw_bytes) + * p12 = OpenSSL::PKCS12.new(File.binread('ts.p12'), 'pwd') + * inter1 = OpenSSL::X509::Certificate.new(File.binread('inter1.cer')) + * inter2 = OpenSSL::X509::Certificate.new(File.binread('inter2.cer')) + * fac = OpenSSL::Timestamp::Factory.new + * fac.gen_time = Time.now + * fac.serial_number = 1 + * fac.allowed_digests = ["sha256", "sha384", "sha512"] + * #needed because the Request contained no policy identifier + * fac.default_policy_id = '1.2.3.4.5' + * fac.additional_certificates = [ inter1, inter2 ] + * timestamp = fac.create_timestamp(p12.key, p12.certificate, req) + * + * ==Attributes + * + * ===default_policy_id + * + * Request#policy_id will always be preferred over this if present in the + * Request, only if Request#policy_id is nil default_policy will be used. + * If none of both is present, a TimestampError will be raised when trying + * to create a Response. + * + * call-seq: + * factory.default_policy_id = "string" -> string + * factory.default_policy_id -> string or nil + * + * ===serial_number + * + * Sets or retrieves the serial number to be used for timestamp creation. + * Must be present for timestamp creation. + * + * call-seq: + * factory.serial_number = number -> number + * factory.serial_number -> number or nil + * + * ===gen_time + * + * Sets or retrieves the Time value to be used in the Response. Must be + * present for timestamp creation. + * + * call-seq: + * factory.gen_time = Time -> Time + * factory.gen_time -> Time or nil + * + * ===additional_certs + * + * Sets or retrieves additional certificates apart from the timestamp + * certificate (e.g. intermediate certificates) to be added to the Response. + * Must be an Array of OpenSSL::X509::Certificate. + * + * call-seq: + * factory.additional_certs = [cert1, cert2] -> [ cert1, cert2 ] + * factory.additional_certs -> array or nil + * + * ===allowed_digests + * + * Sets or retrieves the digest algorithms that the factory is allowed + * create timestamps for. Known vulnerable or weak algorithms should not be + * allowed where possible. + * Must be an Array of String or OpenSSL::Digest subclass instances. + * + * call-seq: + * factory.allowed_digests = ["sha1", OpenSSL::Digest.new('SHA256').new] -> [ "sha1", OpenSSL::Digest) ] + * factory.allowed_digests -> array or nil + * + */ + cTimestampFactory = rb_define_class_under(mTimestamp, "Factory", rb_cObject); + rb_attr(cTimestampFactory, rb_intern_const("allowed_digests"), 1, 1, 0); + rb_attr(cTimestampFactory, rb_intern_const("default_policy_id"), 1, 1, 0); + rb_attr(cTimestampFactory, rb_intern_const("serial_number"), 1, 1, 0); + rb_attr(cTimestampFactory, rb_intern_const("gen_time"), 1, 1, 0); + rb_attr(cTimestampFactory, rb_intern_const("additional_certs"), 1, 1, 0); + rb_define_method(cTimestampFactory, "create_timestamp", ossl_tsfac_create_ts, 3); +} + +#endif diff --git a/ruby/ext/openssl/ossl_ts.h b/ruby/ext/openssl/ossl_ts.h new file mode 100644 index 000000000..25fb0e1d6 --- /dev/null +++ b/ruby/ext/openssl/ossl_ts.h @@ -0,0 +1,16 @@ +/* + * + * Copyright (C) 2010 Martin Bosslet + * All rights reserved. + */ +/* + * This program is licenced under the same licence as Ruby. + * (See the file 'LICENCE'.) + */ + +#if !defined(_OSSL_TS_H_) +#define _OSSL_TS_H_ + +void Init_ossl_ts(void); + +#endif diff --git a/ruby/ext/openssl/ossl_version.h b/ruby/ext/openssl/ossl_version.h deleted file mode 100644 index c162f8c2a..000000000 --- a/ruby/ext/openssl/ossl_version.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * 'OpenSSL for Ruby' project - * Copyright (C) 2001-2002 Michal Rokos - * All rights reserved. - */ -/* - * This program is licensed under the same licence as Ruby. - * (See the file 'LICENCE'.) - */ -#if !defined(_OSSL_VERSION_H_) -#define _OSSL_VERSION_H_ - -#define OSSL_VERSION "2.1.2" - -#endif /* _OSSL_VERSION_H_ */ diff --git a/ruby/ext/openssl/ossl_x509.c b/ruby/ext/openssl/ossl_x509.c index 8a061b068..f8470703f 100644 --- a/ruby/ext/openssl/ossl_x509.c +++ b/ruby/ext/openssl/ossl_x509.c @@ -44,7 +44,13 @@ Init_ossl_x509(void) Init_ossl_x509revoked(); Init_ossl_x509store(); + /* Constants are up-to-date with 1.1.1. */ + + /* Certificate verification error code */ DefX509Const(V_OK); +#if defined(X509_V_ERR_UNSPECIFIED) /* 1.0.1r, 1.0.2f, 1.1.0 */ + DefX509Const(V_ERR_UNSPECIFIED); +#endif DefX509Const(V_ERR_UNABLE_TO_GET_ISSUER_CERT); DefX509Const(V_ERR_UNABLE_TO_GET_CRL); DefX509Const(V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE); @@ -76,8 +82,71 @@ Init_ossl_x509(void) DefX509Const(V_ERR_AKID_SKID_MISMATCH); DefX509Const(V_ERR_AKID_ISSUER_SERIAL_MISMATCH); DefX509Const(V_ERR_KEYUSAGE_NO_CERTSIGN); + DefX509Const(V_ERR_UNABLE_TO_GET_CRL_ISSUER); + DefX509Const(V_ERR_UNHANDLED_CRITICAL_EXTENSION); + DefX509Const(V_ERR_KEYUSAGE_NO_CRL_SIGN); + DefX509Const(V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION); + DefX509Const(V_ERR_INVALID_NON_CA); + DefX509Const(V_ERR_PROXY_PATH_LENGTH_EXCEEDED); + DefX509Const(V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE); + DefX509Const(V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED); + DefX509Const(V_ERR_INVALID_EXTENSION); + DefX509Const(V_ERR_INVALID_POLICY_EXTENSION); + DefX509Const(V_ERR_NO_EXPLICIT_POLICY); + DefX509Const(V_ERR_DIFFERENT_CRL_SCOPE); + DefX509Const(V_ERR_UNSUPPORTED_EXTENSION_FEATURE); + DefX509Const(V_ERR_UNNESTED_RESOURCE); + DefX509Const(V_ERR_PERMITTED_VIOLATION); + DefX509Const(V_ERR_EXCLUDED_VIOLATION); + DefX509Const(V_ERR_SUBTREE_MINMAX); DefX509Const(V_ERR_APPLICATION_VERIFICATION); + DefX509Const(V_ERR_UNSUPPORTED_CONSTRAINT_TYPE); + DefX509Const(V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX); + DefX509Const(V_ERR_UNSUPPORTED_NAME_SYNTAX); + DefX509Const(V_ERR_CRL_PATH_VALIDATION_ERROR); +#if defined(X509_V_ERR_PATH_LOOP) + DefX509Const(V_ERR_PATH_LOOP); +#endif +#if defined(X509_V_ERR_SUITE_B_INVALID_VERSION) + DefX509Const(V_ERR_SUITE_B_INVALID_VERSION); + DefX509Const(V_ERR_SUITE_B_INVALID_ALGORITHM); + DefX509Const(V_ERR_SUITE_B_INVALID_CURVE); + DefX509Const(V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM); + DefX509Const(V_ERR_SUITE_B_LOS_NOT_ALLOWED); + DefX509Const(V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256); +#endif + DefX509Const(V_ERR_HOSTNAME_MISMATCH); + DefX509Const(V_ERR_EMAIL_MISMATCH); + DefX509Const(V_ERR_IP_ADDRESS_MISMATCH); +#if defined(X509_V_ERR_DANE_NO_MATCH) + DefX509Const(V_ERR_DANE_NO_MATCH); +#endif +#if defined(X509_V_ERR_EE_KEY_TOO_SMALL) + DefX509Const(V_ERR_EE_KEY_TOO_SMALL); + DefX509Const(V_ERR_CA_KEY_TOO_SMALL); + DefX509Const(V_ERR_CA_MD_TOO_WEAK); +#endif +#if defined(X509_V_ERR_INVALID_CALL) + DefX509Const(V_ERR_INVALID_CALL); +#endif +#if defined(X509_V_ERR_STORE_LOOKUP) + DefX509Const(V_ERR_STORE_LOOKUP); +#endif +#if defined(X509_V_ERR_NO_VALID_SCTS) + DefX509Const(V_ERR_NO_VALID_SCTS); +#endif +#if defined(X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION) + DefX509Const(V_ERR_PROXY_SUBJECT_NAME_VIOLATION); +#endif +#if defined(X509_V_ERR_OCSP_VERIFY_NEEDED) + DefX509Const(V_ERR_OCSP_VERIFY_NEEDED); + DefX509Const(V_ERR_OCSP_VERIFY_FAILED); + DefX509Const(V_ERR_OCSP_CERT_UNKNOWN); +#endif + /* Certificate verify flags */ + /* Set by Store#flags= and StoreContext#flags=. */ + DefX509Const(V_FLAG_USE_CHECK_TIME); /* Set by Store#flags= and StoreContext#flags=. Enables CRL checking for the * certificate chain leaf. */ DefX509Const(V_FLAG_CRL_CHECK); @@ -116,12 +185,28 @@ Init_ossl_x509(void) /* Set by Store#flags= and StoreContext#flags=. Enables checking of the * signature of the root self-signed CA. */ DefX509Const(V_FLAG_CHECK_SS_SIGNATURE); -#if defined(X509_V_FLAG_TRUSTED_FIRST) /* Set by Store#flags= and StoreContext#flags=. When constructing a * certificate chain, search the Store first for the issuer certificate. * Enabled by default in OpenSSL >= 1.1.0. */ DefX509Const(V_FLAG_TRUSTED_FIRST); +#if defined(X509_V_FLAG_SUITEB_128_LOS_ONLY) + /* Set by Store#flags= and StoreContext#flags=. + * Enables Suite B 128 bit only mode. */ + DefX509Const(V_FLAG_SUITEB_128_LOS_ONLY); #endif +#if defined(X509_V_FLAG_SUITEB_192_LOS) + /* Set by Store#flags= and StoreContext#flags=. + * Enables Suite B 192 bit only mode. */ + DefX509Const(V_FLAG_SUITEB_192_LOS); +#endif +#if defined(X509_V_FLAG_SUITEB_128_LOS) + /* Set by Store#flags= and StoreContext#flags=. + * Enables Suite B 128 bit mode allowing 192 bit algorithms. */ + DefX509Const(V_FLAG_SUITEB_128_LOS); +#endif + /* Set by Store#flags= and StoreContext#flags=. + * Allows partial chains if at least one certificate is in trusted store. */ + DefX509Const(V_FLAG_PARTIAL_CHAIN); #if defined(X509_V_FLAG_NO_ALT_CHAINS) /* Set by Store#flags= and StoreContext#flags=. Suppresses searching for * a alternative chain. No effect in OpenSSL >= 1.1.0. */ diff --git a/ruby/ext/openssl/ossl_x509cert.c b/ruby/ext/openssl/ossl_x509cert.c index 40542c4a7..996f18417 100644 --- a/ruby/ext/openssl/ossl_x509cert.c +++ b/ruby/ext/openssl/ossl_x509cert.c @@ -115,24 +115,27 @@ static VALUE ossl_x509_initialize(int argc, VALUE *argv, VALUE self) { BIO *in; - X509 *x509, *x = DATA_PTR(self); + X509 *x509, *x509_orig = RTYPEDDATA_DATA(self); VALUE arg; + rb_check_frozen(self); if (rb_scan_args(argc, argv, "01", &arg) == 0) { /* create just empty X509Cert */ return self; } arg = ossl_to_der_if_possible(arg); in = ossl_obj2bio(&arg); - x509 = PEM_read_bio_X509(in, &x, NULL, NULL); - DATA_PTR(self) = x; + x509 = d2i_X509_bio(in, NULL); if (!x509) { - OSSL_BIO_reset(in); - x509 = d2i_X509_bio(in, &x); - DATA_PTR(self) = x; + OSSL_BIO_reset(in); + x509 = PEM_read_bio_X509(in, NULL, NULL, NULL); } BIO_free(in); - if (!x509) ossl_raise(eX509CertError, NULL); + if (!x509) + ossl_raise(eX509CertError, "PEM_read_bio_X509"); + + RTYPEDDATA_DATA(self) = x509; + X509_free(x509_orig); return self; } @@ -704,6 +707,157 @@ ossl_x509_eq(VALUE self, VALUE other) return !X509_cmp(a, b) ? Qtrue : Qfalse; } +struct load_chained_certificates_arguments { + VALUE certificates; + X509 *certificate; +}; + +static VALUE +load_chained_certificates_append_push(VALUE _arguments) { + struct load_chained_certificates_arguments *arguments = (struct load_chained_certificates_arguments*)_arguments; + + if (arguments->certificates == Qnil) { + arguments->certificates = rb_ary_new(); + } + + rb_ary_push(arguments->certificates, ossl_x509_new(arguments->certificate)); + + return Qnil; +} + +static VALUE +load_chained_certificate_append_ensure(VALUE _arguments) { + struct load_chained_certificates_arguments *arguments = (struct load_chained_certificates_arguments*)_arguments; + + X509_free(arguments->certificate); + + return Qnil; +} + +inline static VALUE +load_chained_certificates_append(VALUE certificates, X509 *certificate) { + struct load_chained_certificates_arguments arguments; + arguments.certificates = certificates; + arguments.certificate = certificate; + + rb_ensure(load_chained_certificates_append_push, (VALUE)&arguments, load_chained_certificate_append_ensure, (VALUE)&arguments); + + return arguments.certificates; +} + +static VALUE +load_chained_certificates_PEM(BIO *in) { + VALUE certificates = Qnil; + X509 *certificate = PEM_read_bio_X509(in, NULL, NULL, NULL); + + /* If we cannot read even one certificate: */ + if (certificate == NULL) { + /* If we cannot read one certificate because we could not read the PEM encoding: */ + if (ERR_GET_REASON(ERR_peek_last_error()) == PEM_R_NO_START_LINE) { + ossl_clear_error(); + } + + if (ERR_peek_last_error()) + ossl_raise(eX509CertError, NULL); + else + return Qnil; + } + + certificates = load_chained_certificates_append(Qnil, certificate); + + while ((certificate = PEM_read_bio_X509(in, NULL, NULL, NULL))) { + load_chained_certificates_append(certificates, certificate); + } + + /* We tried to read one more certificate but could not read start line: */ + if (ERR_GET_REASON(ERR_peek_last_error()) == PEM_R_NO_START_LINE) { + /* This is not an error, it means we are finished: */ + ossl_clear_error(); + + return certificates; + } + + /* Alternatively, if we reached the end of the file and there was no error: */ + if (BIO_eof(in) && !ERR_peek_last_error()) { + return certificates; + } else { + /* Otherwise, we tried to read a certificate but failed somewhere: */ + ossl_raise(eX509CertError, NULL); + } +} + +static VALUE +load_chained_certificates_DER(BIO *in) { + X509 *certificate = d2i_X509_bio(in, NULL); + + /* If we cannot read one certificate: */ + if (certificate == NULL) { + /* Ignore error. We could not load. */ + ossl_clear_error(); + + return Qnil; + } + + return load_chained_certificates_append(Qnil, certificate); +} + +static VALUE +load_chained_certificates(VALUE _io) { + BIO *in = (BIO*)_io; + VALUE certificates = Qnil; + + /* + DER is a binary format and it may contain octets within it that look like + PEM encoded certificates. So we need to check DER first. + */ + certificates = load_chained_certificates_DER(in); + + if (certificates != Qnil) + return certificates; + + OSSL_BIO_reset(in); + + certificates = load_chained_certificates_PEM(in); + + if (certificates != Qnil) + return certificates; + + /* Otherwise we couldn't read the output correctly so fail: */ + ossl_raise(eX509CertError, "Could not detect format of certificate data!"); +} + +static VALUE +load_chained_certificates_ensure(VALUE _io) { + BIO *in = (BIO*)_io; + + BIO_free(in); + + return Qnil; +} + +/* + * call-seq: + * OpenSSL::X509::Certificate.load(string) -> [certs...] + * OpenSSL::X509::Certificate.load(file) -> [certs...] + * + * Read the chained certificates from the given input. Supports both PEM + * and DER encoded certificates. + * + * PEM is a text format and supports more than one certificate. + * + * DER is a binary format and only supports one certificate. + * + * If the file is empty, or contains only unrelated data, an + * +OpenSSL::X509::CertificateError+ exception will be raised. + */ +static VALUE +ossl_x509_load(VALUE klass, VALUE buffer) +{ + BIO *in = ossl_obj2bio(&buffer); + + return rb_ensure(load_chained_certificates, (VALUE)in, load_chained_certificates_ensure, (VALUE)in); +} + /* * INIT */ @@ -730,7 +884,7 @@ Init_ossl_x509cert(void) * Certificate is capable of handling DER-encoded certificates and * certificates encoded in OpenSSL's PEM format. * - * raw = File.read "cert.cer" # DER- or PEM-encoded + * raw = File.binread "cert.cer" # DER- or PEM-encoded * certificate = OpenSSL::X509::Certificate.new raw * * === Saving a certificate to a file @@ -788,7 +942,7 @@ Init_ossl_x509cert(void) * root_ca.add_extension(ef.create_extension("keyUsage","keyCertSign, cRLSign", true)) * root_ca.add_extension(ef.create_extension("subjectKeyIdentifier","hash",false)) * root_ca.add_extension(ef.create_extension("authorityKeyIdentifier","keyid:always",false)) - * root_ca.sign(root_key, OpenSSL::Digest::SHA256.new) + * root_ca.sign(root_key, OpenSSL::Digest.new('SHA256')) * * The next step is to create the end-entity certificate using the root CA * certificate. @@ -807,11 +961,13 @@ Init_ossl_x509cert(void) * ef.issuer_certificate = root_ca * cert.add_extension(ef.create_extension("keyUsage","digitalSignature", true)) * cert.add_extension(ef.create_extension("subjectKeyIdentifier","hash",false)) - * cert.sign(root_key, OpenSSL::Digest::SHA256.new) + * cert.sign(root_key, OpenSSL::Digest.new('SHA256')) * */ cX509Cert = rb_define_class_under(mX509, "Certificate", rb_cObject); + rb_define_singleton_method(cX509Cert, "load", ossl_x509_load, 1); + rb_define_alloc_func(cX509Cert, ossl_x509_alloc); rb_define_method(cX509Cert, "initialize", ossl_x509_initialize, -1); rb_define_method(cX509Cert, "initialize_copy", ossl_x509_copy, 1); diff --git a/ruby/ext/openssl/ossl_x509crl.c b/ruby/ext/openssl/ossl_x509crl.c index b0badf45c..863f0286c 100644 --- a/ruby/ext/openssl/ossl_x509crl.c +++ b/ruby/ext/openssl/ossl_x509crl.c @@ -93,23 +93,26 @@ static VALUE ossl_x509crl_initialize(int argc, VALUE *argv, VALUE self) { BIO *in; - X509_CRL *crl, *x = DATA_PTR(self); + X509_CRL *crl, *crl_orig = RTYPEDDATA_DATA(self); VALUE arg; + rb_check_frozen(self); if (rb_scan_args(argc, argv, "01", &arg) == 0) { return self; } arg = ossl_to_der_if_possible(arg); in = ossl_obj2bio(&arg); - crl = PEM_read_bio_X509_CRL(in, &x, NULL, NULL); - DATA_PTR(self) = x; + crl = d2i_X509_CRL_bio(in, NULL); if (!crl) { - OSSL_BIO_reset(in); - crl = d2i_X509_CRL_bio(in, &x); - DATA_PTR(self) = x; + OSSL_BIO_reset(in); + crl = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL); } BIO_free(in); - if (!crl) ossl_raise(eX509CRLError, NULL); + if (!crl) + ossl_raise(eX509CRLError, "PEM_read_bio_X509_CRL"); + + RTYPEDDATA_DATA(self) = crl; + X509_CRL_free(crl_orig); return self; } diff --git a/ruby/ext/openssl/ossl_x509ext.c b/ruby/ext/openssl/ossl_x509ext.c index 30ec09d7a..e54102c77 100644 --- a/ruby/ext/openssl/ossl_x509ext.c +++ b/ruby/ext/openssl/ossl_x509ext.c @@ -226,11 +226,10 @@ ossl_x509extfactory_create_ext(int argc, VALUE *argv, VALUE self) GetX509ExtFactory(self, ctx); obj = NewX509Ext(cX509Ext); rconf = rb_iv_get(self, "@config"); - conf = NIL_P(rconf) ? NULL : DupConfigPtr(rconf); + conf = NIL_P(rconf) ? NULL : GetConfig(rconf); X509V3_set_nconf(ctx, conf); ext = X509V3_EXT_nconf_nid(conf, ctx, nid, RSTRING_PTR(valstr)); X509V3_set_ctx_nodb(ctx); - NCONF_free(conf); if (!ext){ ossl_raise(eX509ExtError, "%"PRIsVALUE" = %"PRIsVALUE, oid, valstr); } @@ -402,6 +401,19 @@ ossl_x509ext_get_value(VALUE obj) return ret; } +static VALUE +ossl_x509ext_get_value_der(VALUE obj) +{ + X509_EXTENSION *ext; + ASN1_OCTET_STRING *value; + + GetX509Ext(obj, ext); + if ((value = X509_EXTENSION_get_data(ext)) == NULL) + ossl_raise(eX509ExtError, NULL); + + return rb_str_new((const char *)value->data, value->length); +} + static VALUE ossl_x509ext_get_critical(VALUE obj) { @@ -472,6 +484,7 @@ Init_ossl_x509ext(void) rb_define_method(cX509Ext, "critical=", ossl_x509ext_set_critical, 1); rb_define_method(cX509Ext, "oid", ossl_x509ext_get_oid, 0); rb_define_method(cX509Ext, "value", ossl_x509ext_get_value, 0); + rb_define_method(cX509Ext, "value_der", ossl_x509ext_get_value_der, 0); rb_define_method(cX509Ext, "critical?", ossl_x509ext_get_critical, 0); rb_define_method(cX509Ext, "to_der", ossl_x509ext_to_der, 0); } diff --git a/ruby/ext/openssl/ossl_x509name.c b/ruby/ext/openssl/ossl_x509name.c index 1ea8400db..13a2b2c03 100644 --- a/ruby/ext/openssl/ossl_x509name.c +++ b/ruby/ext/openssl/ossl_x509name.c @@ -291,7 +291,14 @@ x509name_print(VALUE self, unsigned long iflag) * * OpenSSL::X509::Name::MULTILINE * * If _format_ is omitted, the largely broken and traditional OpenSSL format - * is used. + * (X509_NAME_oneline() format) is chosen. + * + * Use of this method is discouraged. None of the formats other than + * OpenSSL::X509::Name::RFC2253 is standardized and may show an inconsistent + * behavior through \OpenSSL versions. + * + * It is recommended to use #to_utf8 instead, which is equivalent to calling + * name.to_s(OpenSSL::X509::Name::RFC2253).force_encoding("UTF-8"). */ static VALUE ossl_x509name_to_s(int argc, VALUE *argv, VALUE self) @@ -387,17 +394,21 @@ ossl_x509name_cmp0(VALUE self, VALUE other) /* * call-seq: - * name.cmp(other) -> -1 | 0 | 1 - * name <=> other -> -1 | 0 | 1 + * name.cmp(other) -> -1 | 0 | 1 | nil + * name <=> other -> -1 | 0 | 1 | nil * * Compares this Name with _other_ and returns +0+ if they are the same and +-1+ * or ++1+ if they are greater or less than each other respectively. + * Returns +nil+ if they are not comparable (i.e. different types). */ static VALUE ossl_x509name_cmp(VALUE self, VALUE other) { int result; + if (!rb_obj_is_kind_of(other, cX509Name)) + return Qnil; + result = ossl_x509name_cmp0(self, other); if (result < 0) return INT2FIX(-1); if (result > 0) return INT2FIX(1); @@ -494,7 +505,7 @@ ossl_x509name_to_der(VALUE self) * You can create a Name by parsing a distinguished name String or by * supplying the distinguished name as an Array. * - * name = OpenSSL::X509::Name.parse 'CN=nobody/DC=example' + * name = OpenSSL::X509::Name.parse_rfc2253 'DC=example,CN=nobody' * * name = OpenSSL::X509::Name.new [['CN', 'nobody'], ['DC', 'example']] */ diff --git a/ruby/ext/openssl/ossl_x509req.c b/ruby/ext/openssl/ossl_x509req.c index 2c20042a9..6eb91e9c2 100644 --- a/ruby/ext/openssl/ossl_x509req.c +++ b/ruby/ext/openssl/ossl_x509req.c @@ -79,23 +79,26 @@ static VALUE ossl_x509req_initialize(int argc, VALUE *argv, VALUE self) { BIO *in; - X509_REQ *req, *x = DATA_PTR(self); + X509_REQ *req, *req_orig = RTYPEDDATA_DATA(self); VALUE arg; + rb_check_frozen(self); if (rb_scan_args(argc, argv, "01", &arg) == 0) { return self; } arg = ossl_to_der_if_possible(arg); in = ossl_obj2bio(&arg); - req = PEM_read_bio_X509_REQ(in, &x, NULL, NULL); - DATA_PTR(self) = x; + req = d2i_X509_REQ_bio(in, NULL); if (!req) { - OSSL_BIO_reset(in); - req = d2i_X509_REQ_bio(in, &x); - DATA_PTR(self) = x; + OSSL_BIO_reset(in); + req = PEM_read_bio_X509_REQ(in, NULL, NULL, NULL); } BIO_free(in); - if (!req) ossl_raise(eX509ReqError, NULL); + if (!req) + ossl_raise(eX509ReqError, "PEM_read_bio_X509_REQ"); + + RTYPEDDATA_DATA(self) = req; + X509_REQ_free(req_orig); return self; } diff --git a/ruby/ext/openssl/ossl_x509store.c b/ruby/ext/openssl/ossl_x509store.c index 74bc7763a..7c546187c 100644 --- a/ruby/ext/openssl/ossl_x509store.c +++ b/ruby/ext/openssl/ossl_x509store.c @@ -52,8 +52,15 @@ struct ossl_verify_cb_args { }; static VALUE -call_verify_cb_proc(struct ossl_verify_cb_args *args) +ossl_x509stctx_new_i(VALUE arg) { + return ossl_x509stctx_new((X509_STORE_CTX *)arg); +} + +static VALUE +call_verify_cb_proc(VALUE arg) +{ + struct ossl_verify_cb_args *args = (struct ossl_verify_cb_args *)arg; return rb_funcall(args->proc, rb_intern("call"), 2, args->preverify_ok, args->store_ctx); } @@ -69,7 +76,7 @@ ossl_verify_cb_call(VALUE proc, int ok, X509_STORE_CTX *ctx) return ok; ret = Qfalse; - rctx = rb_protect((VALUE(*)(VALUE))ossl_x509stctx_new, (VALUE)ctx, &state); + rctx = rb_protect(ossl_x509stctx_new_i, (VALUE)ctx, &state); if (state) { rb_set_errinfo(Qnil); rb_warn("StoreContext initialization failure"); @@ -78,7 +85,7 @@ ossl_verify_cb_call(VALUE proc, int ok, X509_STORE_CTX *ctx) args.proc = proc; args.preverify_ok = ok ? Qtrue : Qfalse; args.store_ctx = rctx; - ret = rb_protect((VALUE(*)(VALUE))call_verify_cb_proc, (VALUE)&args, &state); + ret = rb_protect(call_verify_cb_proc, (VALUE)&args, &state); if (state) { rb_set_errinfo(Qnil); rb_warn("exception in verify_callback is ignored"); @@ -105,6 +112,13 @@ VALUE cX509Store; VALUE cX509StoreContext; VALUE eX509StoreError; +static void +ossl_x509store_mark(void *ptr) +{ + X509_STORE *store = ptr; + rb_gc_mark((VALUE)X509_STORE_get_ex_data(store, store_ex_verify_cb_idx)); +} + static void ossl_x509store_free(void *ptr) { @@ -114,7 +128,7 @@ ossl_x509store_free(void *ptr) static const rb_data_type_t ossl_x509store_type = { "OpenSSL/X509/STORE", { - 0, ossl_x509store_free, + ossl_x509store_mark, ossl_x509store_free, }, 0, 0, RUBY_TYPED_FREE_IMMEDIATELY, }; @@ -157,9 +171,8 @@ ossl_x509store_alloc(VALUE klass) VALUE obj; obj = NewX509Store(klass); - if((store = X509_STORE_new()) == NULL){ - ossl_raise(eX509StoreError, NULL); - } + if ((store = X509_STORE_new()) == NULL) + ossl_raise(eX509StoreError, "X509_STORE_new"); SetX509Store(obj, store); return obj; @@ -192,8 +205,9 @@ ossl_x509store_initialize(int argc, VALUE *argv, VALUE self) { X509_STORE *store; -/* BUG: This method takes any number of arguments but appears to ignore them. */ GetX509Store(self, store); + if (argc != 0) + rb_warn("OpenSSL::X509::Store.new does not take any arguments"); #if !defined(HAVE_OPAQUE_OPENSSL) /* [Bug #405] [Bug #1678] [Bug #3000]; already fixed? */ store->ex_data.sk = NULL; @@ -214,8 +228,16 @@ ossl_x509store_initialize(int argc, VALUE *argv, VALUE self) * call-seq: * store.flags = flags * - * Sets _flags_ to the Store. _flags_ consists of zero or more of the constants - * defined in with name V_FLAG_* or'ed together. + * Sets the default flags used by certificate chain verification performed with + * the Store. + * + * _flags_ consists of zero or more of the constants defined in OpenSSL::X509 + * with name V_FLAG_* or'ed together. + * + * OpenSSL::X509::StoreContext#flags= can be used to change the flags for a + * single verification operation. + * + * See also the man page X509_VERIFY_PARAM_set_flags(3). */ static VALUE ossl_x509store_set_flags(VALUE self, VALUE flags) @@ -233,9 +255,9 @@ ossl_x509store_set_flags(VALUE self, VALUE flags) * call-seq: * store.purpose = purpose * - * Sets the store's purpose to _purpose_. If specified, the verifications on - * the store will check every untrusted certificate's extensions are consistent - * with the purpose. The purpose is specified by constants: + * Sets the store's default verification purpose. If specified, + * the verifications on the store will check every certificate's extensions are + * consistent with the purpose. The purpose is specified by constants: * * * X509::PURPOSE_SSL_CLIENT * * X509::PURPOSE_SSL_SERVER @@ -246,6 +268,11 @@ ossl_x509store_set_flags(VALUE self, VALUE flags) * * X509::PURPOSE_ANY * * X509::PURPOSE_OCSP_HELPER * * X509::PURPOSE_TIMESTAMP_SIGN + * + * OpenSSL::X509::StoreContext#purpose= can be used to change the value for a + * single verification operation. + * + * See also the man page X509_VERIFY_PARAM_set_purpose(3). */ static VALUE ossl_x509store_set_purpose(VALUE self, VALUE purpose) @@ -262,6 +289,14 @@ ossl_x509store_set_purpose(VALUE self, VALUE purpose) /* * call-seq: * store.trust = trust + * + * Sets the default trust settings used by the certificate verification with + * the store. + * + * OpenSSL::X509::StoreContext#trust= can be used to change the value for a + * single verification operation. + * + * See also the man page X509_VERIFY_PARAM_set_trust(3). */ static VALUE ossl_x509store_set_trust(VALUE self, VALUE trust) @@ -279,7 +314,13 @@ ossl_x509store_set_trust(VALUE self, VALUE trust) * call-seq: * store.time = time * - * Sets the time to be used in verifications. + * Sets the time to be used in the certificate verifications with the store. + * By default, if not specified, the current system time is used. + * + * OpenSSL::X509::StoreContext#time= can be used to change the value for a + * single verification operation. + * + * See also the man page X509_VERIFY_PARAM_set_time(3). */ static VALUE ossl_x509store_set_time(VALUE self, VALUE time) @@ -295,23 +336,23 @@ ossl_x509store_set_time(VALUE self, VALUE time) * Adds the certificates in _file_ to the certificate store. _file_ is the path * to the file, and the file contains one or more certificates in PEM format * concatenated together. + * + * See also the man page X509_LOOKUP_file(3). */ static VALUE ossl_x509store_add_file(VALUE self, VALUE file) { X509_STORE *store; X509_LOOKUP *lookup; - char *path = NULL; + const char *path; - if(file != Qnil){ - path = StringValueCStr(file); - } GetX509Store(self, store); + path = StringValueCStr(file); lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()); - if(lookup == NULL) ossl_raise(eX509StoreError, NULL); - if(X509_LOOKUP_load_file(lookup, path, X509_FILETYPE_PEM) != 1){ - ossl_raise(eX509StoreError, NULL); - } + if (!lookup) + ossl_raise(eX509StoreError, "X509_STORE_add_lookup"); + if (X509_LOOKUP_load_file(lookup, path, X509_FILETYPE_PEM) != 1) + ossl_raise(eX509StoreError, "X509_LOOKUP_load_file"); #if OPENSSL_VERSION_NUMBER < 0x10101000 || defined(LIBRESSL_VERSION_NUMBER) /* * X509_load_cert_crl_file() which is called from X509_LOOKUP_load_file() @@ -330,32 +371,23 @@ ossl_x509store_add_file(VALUE self, VALUE file) * store.add_path(path) -> self * * Adds _path_ as the hash dir to be looked up by the store. + * + * See also the man page X509_LOOKUP_hash_dir(3). */ -// --------- [Enclose.IO Hack start] --------- -#include "enclose_io_prelude.h" -#include "enclose_io_common.h" -// --------- [Enclose.IO Hack end] --------- static VALUE ossl_x509store_add_path(VALUE self, VALUE dir) { X509_STORE *store; X509_LOOKUP *lookup; - char *path = NULL; + const char *path; - if(dir != Qnil){ - path = StringValueCStr(dir); - } GetX509Store(self, store); + path = StringValueCStr(dir); lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir()); - if(lookup == NULL) ossl_raise(eX509StoreError, NULL); - // --------- [Enclose.IO Hack start] --------- - #ifdef ENCLOSE_IO_RUBYC_2ND_PASS - path = enclose_io_ifextract(path, NULL); - #endif - // --------- [Enclose.IO Hack end] --------- - if(X509_LOOKUP_add_dir(lookup, path, X509_FILETYPE_PEM) != 1){ - ossl_raise(eX509StoreError, NULL); - } + if (!lookup) + ossl_raise(eX509StoreError, "X509_STORE_add_lookup"); + if (X509_LOOKUP_add_dir(lookup, path, X509_FILETYPE_PEM) != 1) + ossl_raise(eX509StoreError, "X509_LOOKUP_add_dir"); return self; } @@ -370,6 +402,8 @@ ossl_x509store_add_path(VALUE self, VALUE dir) * * * OpenSSL::X509::DEFAULT_CERT_FILE * * OpenSSL::X509::DEFAULT_CERT_DIR + * + * See also the man page X509_STORE_set_default_paths(3). */ static VALUE ossl_x509store_set_default_paths(VALUE self) @@ -377,18 +411,19 @@ ossl_x509store_set_default_paths(VALUE self) X509_STORE *store; GetX509Store(self, store); - if (X509_STORE_set_default_paths(store) != 1){ - ossl_raise(eX509StoreError, NULL); - } + if (X509_STORE_set_default_paths(store) != 1) + ossl_raise(eX509StoreError, "X509_STORE_set_default_paths"); return Qnil; } /* * call-seq: - * store.add_cert(cert) + * store.add_cert(cert) -> self * * Adds the OpenSSL::X509::Certificate _cert_ to the certificate store. + * + * See also the man page X509_STORE_add_cert(3). */ static VALUE ossl_x509store_add_cert(VALUE self, VALUE arg) @@ -398,9 +433,8 @@ ossl_x509store_add_cert(VALUE self, VALUE arg) cert = GetX509CertPtr(arg); /* NO NEED TO DUP */ GetX509Store(self, store); - if (X509_STORE_add_cert(store, cert) != 1){ - ossl_raise(eX509StoreError, NULL); - } + if (X509_STORE_add_cert(store, cert) != 1) + ossl_raise(eX509StoreError, "X509_STORE_add_cert"); return self; } @@ -410,6 +444,8 @@ ossl_x509store_add_cert(VALUE self, VALUE arg) * store.add_crl(crl) -> self * * Adds the OpenSSL::X509::CRL _crl_ to the store. + * + * See also the man page X509_STORE_add_crl(3). */ static VALUE ossl_x509store_add_crl(VALUE self, VALUE arg) @@ -419,9 +455,8 @@ ossl_x509store_add_crl(VALUE self, VALUE arg) crl = GetX509CRLPtr(arg); /* NO NEED TO DUP */ GetX509Store(self, store); - if (X509_STORE_add_crl(store, crl) != 1){ - ossl_raise(eX509StoreError, NULL); - } + if (X509_STORE_add_crl(store, crl) != 1) + ossl_raise(eX509StoreError, "X509_STORE_add_crl"); return self; } @@ -465,23 +500,16 @@ ossl_x509store_verify(int argc, VALUE *argv, VALUE self) return result; } -/* - * Public Functions - */ -static void ossl_x509stctx_free(void*); - - -static const rb_data_type_t ossl_x509stctx_type = { - "OpenSSL/X509/STORE_CTX", - { - 0, ossl_x509stctx_free, - }, - 0, 0, RUBY_TYPED_FREE_IMMEDIATELY, -}; - /* * Private functions */ +static void +ossl_x509stctx_mark(void *ptr) +{ + X509_STORE_CTX *ctx = ptr; + rb_gc_mark((VALUE)X509_STORE_CTX_get_ex_data(ctx, stctx_ex_verify_cb_idx)); +} + static void ossl_x509stctx_free(void *ptr) { @@ -493,6 +521,14 @@ ossl_x509stctx_free(void *ptr) X509_STORE_CTX_free(ctx); } +static const rb_data_type_t ossl_x509stctx_type = { + "OpenSSL/X509/STORE_CTX", + { + ossl_x509stctx_mark, ossl_x509stctx_free, + }, + 0, 0, RUBY_TYPED_FREE_IMMEDIATELY, +}; + static VALUE ossl_x509stctx_alloc(VALUE klass) { @@ -500,9 +536,8 @@ ossl_x509stctx_alloc(VALUE klass) VALUE obj; obj = NewX509StCtx(klass); - if((ctx = X509_STORE_CTX_new()) == NULL){ - ossl_raise(eX509StoreError, NULL); - } + if ((ctx = X509_STORE_CTX_new()) == NULL) + ossl_raise(eX509StoreError, "X509_STORE_CTX_new"); SetX509StCtx(obj, ctx); return obj; @@ -526,7 +561,9 @@ static VALUE ossl_x509stctx_set_time(VALUE, VALUE); /* * call-seq: - * StoreContext.new(store, cert = nil, chain = nil) + * StoreContext.new(store, cert = nil, untrusted = nil) + * + * Sets up a StoreContext for a verification of the X.509 certificate _cert_. */ static VALUE ossl_x509stctx_initialize(int argc, VALUE *argv, VALUE self) @@ -536,15 +573,24 @@ ossl_x509stctx_initialize(int argc, VALUE *argv, VALUE self) X509_STORE *x509st; X509 *x509 = NULL; STACK_OF(X509) *x509s = NULL; + int state; rb_scan_args(argc, argv, "12", &store, &cert, &chain); GetX509StCtx(self, ctx); GetX509Store(store, x509st); - if(!NIL_P(cert)) x509 = DupX509CertPtr(cert); /* NEED TO DUP */ - if(!NIL_P(chain)) x509s = ossl_x509_ary2sk(chain); - if(X509_STORE_CTX_init(ctx, x509st, x509, x509s) != 1){ + if (!NIL_P(cert)) + x509 = DupX509CertPtr(cert); /* NEED TO DUP */ + if (!NIL_P(chain)) { + x509s = ossl_protect_x509_ary2sk(chain, &state); + if (state) { + X509_free(x509); + rb_jump_tag(state); + } + } + if (X509_STORE_CTX_init(ctx, x509st, x509, x509s) != 1){ + X509_free(x509); sk_X509_pop_free(x509s, X509_free); - ossl_raise(eX509StoreError, NULL); + ossl_raise(eX509StoreError, "X509_STORE_CTX_init"); } if (!NIL_P(t = rb_iv_get(store, "@time"))) ossl_x509stctx_set_time(self, t); @@ -557,6 +603,10 @@ ossl_x509stctx_initialize(int argc, VALUE *argv, VALUE self) /* * call-seq: * stctx.verify -> true | false + * + * Performs the certificate verification using the parameters set to _stctx_. + * + * See also the man page X509_verify_cert(3). */ static VALUE ossl_x509stctx_verify(VALUE self) @@ -569,48 +619,45 @@ ossl_x509stctx_verify(VALUE self) switch (X509_verify_cert(ctx)) { case 1: - return Qtrue; + return Qtrue; case 0: - ossl_clear_error(); - return Qfalse; + ossl_clear_error(); + return Qfalse; default: - ossl_raise(eX509CertError, NULL); + ossl_raise(eX509CertError, "X509_verify_cert"); } } /* * call-seq: - * stctx.chain -> Array of X509::Certificate + * stctx.chain -> nil | Array of X509::Certificate + * + * Returns the verified chain. + * + * See also the man page X509_STORE_CTX_set0_verified_chain(3). */ static VALUE ossl_x509stctx_get_chain(VALUE self) { X509_STORE_CTX *ctx; - STACK_OF(X509) *chain; - X509 *x509; - int i, num; - VALUE ary; + const STACK_OF(X509) *chain; GetX509StCtx(self, ctx); - if((chain = X509_STORE_CTX_get0_chain(ctx)) == NULL){ - return Qnil; - } - if((num = sk_X509_num(chain)) < 0){ - OSSL_Debug("certs in chain < 0???"); - return rb_ary_new(); - } - ary = rb_ary_new2(num); - for(i = 0; i < num; i++) { - x509 = sk_X509_value(chain, i); - rb_ary_push(ary, ossl_x509_new(x509)); - } - - return ary; + chain = X509_STORE_CTX_get0_chain(ctx); + if (!chain) + return Qnil; /* Could be an empty array instead? */ + return ossl_x509_sk2ary(chain); } /* * call-seq: * stctx.error -> Integer + * + * Returns the error code of _stctx_. This is typically called after #verify + * is done, or from the verification callback set to + * OpenSSL::X509::Store#verify_callback=. + * + * See also the man page X509_STORE_CTX_get_error(3). */ static VALUE ossl_x509stctx_get_err(VALUE self) @@ -625,6 +672,11 @@ ossl_x509stctx_get_err(VALUE self) /* * call-seq: * stctx.error = error_code + * + * Sets the error code of _stctx_. This is used by the verification callback + * set to OpenSSL::X509::Store#verify_callback=. + * + * See also the man page X509_STORE_CTX_set_error(3). */ static VALUE ossl_x509stctx_set_error(VALUE self, VALUE err) @@ -641,7 +693,10 @@ ossl_x509stctx_set_error(VALUE self, VALUE err) * call-seq: * stctx.error_string -> String * - * Returns the error string corresponding to the error code retrieved by #error. + * Returns the human readable error string corresponding to the error code + * retrieved by #error. + * + * See also the man page X509_verify_cert_error_string(3). */ static VALUE ossl_x509stctx_get_err_string(VALUE self) @@ -658,6 +713,10 @@ ossl_x509stctx_get_err_string(VALUE self) /* * call-seq: * stctx.error_depth -> Integer + * + * Returns the depth of the chain. This is used in combination with #error. + * + * See also the man page X509_STORE_CTX_get_error_depth(3). */ static VALUE ossl_x509stctx_get_err_depth(VALUE self) @@ -672,6 +731,10 @@ ossl_x509stctx_get_err_depth(VALUE self) /* * call-seq: * stctx.current_cert -> X509::Certificate + * + * Returns the certificate which caused the error. + * + * See also the man page X509_STORE_CTX_get_current_cert(3). */ static VALUE ossl_x509stctx_get_curr_cert(VALUE self) @@ -686,6 +749,10 @@ ossl_x509stctx_get_curr_cert(VALUE self) /* * call-seq: * stctx.current_crl -> X509::CRL + * + * Returns the CRL which caused the error. + * + * See also the man page X509_STORE_CTX_get_current_crl(3). */ static VALUE ossl_x509stctx_get_curr_crl(VALUE self) @@ -705,7 +772,10 @@ ossl_x509stctx_get_curr_crl(VALUE self) * call-seq: * stctx.flags = flags * - * Sets the verification flags to the context. See Store#flags=. + * Sets the verification flags to the context. This overrides the default value + * set by Store#flags=. + * + * See also the man page X509_VERIFY_PARAM_set_flags(3). */ static VALUE ossl_x509stctx_set_flags(VALUE self, VALUE flags) @@ -723,7 +793,10 @@ ossl_x509stctx_set_flags(VALUE self, VALUE flags) * call-seq: * stctx.purpose = purpose * - * Sets the purpose of the context. See Store#purpose=. + * Sets the purpose of the context. This overrides the default value set by + * Store#purpose=. + * + * See also the man page X509_VERIFY_PARAM_set_purpose(3). */ static VALUE ossl_x509stctx_set_purpose(VALUE self, VALUE purpose) @@ -740,6 +813,11 @@ ossl_x509stctx_set_purpose(VALUE self, VALUE purpose) /* * call-seq: * stctx.trust = trust + * + * Sets the trust settings of the context. This overrides the default value set + * by Store#trust=. + * + * See also the man page X509_VERIFY_PARAM_set_trust(3). */ static VALUE ossl_x509stctx_set_trust(VALUE self, VALUE trust) @@ -758,6 +836,8 @@ ossl_x509stctx_set_trust(VALUE self, VALUE trust) * stctx.time = time * * Sets the time used in the verification. If not set, the current time is used. + * + * See also the man page X509_VERIFY_PARAM_set_time(3). */ static VALUE ossl_x509stctx_set_time(VALUE self, VALUE time) @@ -833,23 +913,37 @@ Init_ossl_x509store(void) cX509Store = rb_define_class_under(mX509, "Store", rb_cObject); /* * The callback for additional certificate verification. It is invoked for - * each untrusted certificate in the chain. + * each certificate in the chain and can be used to implement custom + * certificate verification conditions. * * The callback is invoked with two values, a boolean that indicates if the * pre-verification by OpenSSL has succeeded or not, and the StoreContext in - * use. The callback must return either true or false. + * use. + * + * The callback can use StoreContext#error= to change the error code as + * needed. The callback must return either true or false. + * + * NOTE: any exception raised within the callback will be ignored. + * + * See also the man page X509_STORE_CTX_set_verify_cb(3). */ rb_attr(cX509Store, rb_intern("verify_callback"), 1, 0, Qfalse); /* * The error code set by the last call of #verify. + * + * See also StoreContext#error. */ rb_attr(cX509Store, rb_intern("error"), 1, 0, Qfalse); /* * The description for the error code set by the last call of #verify. + * + * See also StoreContext#error_string. */ rb_attr(cX509Store, rb_intern("error_string"), 1, 0, Qfalse); /* * The certificate chain constructed by the last call of #verify. + * + * See also StoreContext#chain. */ rb_attr(cX509Store, rb_intern("chain"), 1, 0, Qfalse); rb_define_alloc_func(cX509Store, ossl_x509store_alloc); diff --git a/ruby/ext/openssl/ruby_missing.h b/ruby/ext/openssl/ruby_missing.h deleted file mode 100644 index 069acc8b1..000000000 --- a/ruby/ext/openssl/ruby_missing.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 'OpenSSL for Ruby' project - * Copyright (C) 2001-2003 Michal Rokos - * All rights reserved. - */ -/* - * This program is licensed under the same licence as Ruby. - * (See the file 'LICENCE'.) - */ -#if !defined(_OSSL_RUBY_MISSING_H_) -#define _OSSL_RUBY_MISSING_H_ - -/* Ruby 2.4 */ -#ifndef RB_INTEGER_TYPE_P -# define RB_INTEGER_TYPE_P(obj) (RB_FIXNUM_P(obj) || RB_TYPE_P(obj, T_BIGNUM)) -#endif - -/* Ruby 2.5 */ -#ifndef ST2FIX -# define RB_ST2FIX(h) LONG2FIX((long)(h)) -# define ST2FIX(h) RB_ST2FIX(h) -#endif - -#endif /* _OSSL_RUBY_MISSING_H_ */ diff --git a/ruby/ext/pathname/depend b/ruby/ext/pathname/depend index 1e13dd5f3..53041d2ef 100644 --- a/ruby/ext/pathname/depend +++ b/ruby/ext/pathname/depend @@ -4,9 +4,165 @@ pathname.o: $(arch_hdrdir)/ruby/config.h pathname.o: $(hdrdir)/ruby.h pathname.o: $(hdrdir)/ruby/assert.h pathname.o: $(hdrdir)/ruby/backward.h +pathname.o: $(hdrdir)/ruby/backward/2/assume.h +pathname.o: $(hdrdir)/ruby/backward/2/attributes.h +pathname.o: $(hdrdir)/ruby/backward/2/bool.h +pathname.o: $(hdrdir)/ruby/backward/2/inttypes.h +pathname.o: $(hdrdir)/ruby/backward/2/limits.h +pathname.o: $(hdrdir)/ruby/backward/2/long_long.h +pathname.o: $(hdrdir)/ruby/backward/2/stdalign.h +pathname.o: $(hdrdir)/ruby/backward/2/stdarg.h pathname.o: $(hdrdir)/ruby/defines.h pathname.o: $(hdrdir)/ruby/encoding.h pathname.o: $(hdrdir)/ruby/intern.h +pathname.o: $(hdrdir)/ruby/internal/anyargs.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/char.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/double.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/int.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/long.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/short.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +pathname.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +pathname.o: $(hdrdir)/ruby/internal/assume.h +pathname.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +pathname.o: $(hdrdir)/ruby/internal/attr/artificial.h +pathname.o: $(hdrdir)/ruby/internal/attr/cold.h +pathname.o: $(hdrdir)/ruby/internal/attr/const.h +pathname.o: $(hdrdir)/ruby/internal/attr/constexpr.h +pathname.o: $(hdrdir)/ruby/internal/attr/deprecated.h +pathname.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +pathname.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +pathname.o: $(hdrdir)/ruby/internal/attr/error.h +pathname.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +pathname.o: $(hdrdir)/ruby/internal/attr/forceinline.h +pathname.o: $(hdrdir)/ruby/internal/attr/format.h +pathname.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +pathname.o: $(hdrdir)/ruby/internal/attr/noalias.h +pathname.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +pathname.o: $(hdrdir)/ruby/internal/attr/noexcept.h +pathname.o: $(hdrdir)/ruby/internal/attr/noinline.h +pathname.o: $(hdrdir)/ruby/internal/attr/nonnull.h +pathname.o: $(hdrdir)/ruby/internal/attr/noreturn.h +pathname.o: $(hdrdir)/ruby/internal/attr/pure.h +pathname.o: $(hdrdir)/ruby/internal/attr/restrict.h +pathname.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +pathname.o: $(hdrdir)/ruby/internal/attr/warning.h +pathname.o: $(hdrdir)/ruby/internal/attr/weakref.h +pathname.o: $(hdrdir)/ruby/internal/cast.h +pathname.o: $(hdrdir)/ruby/internal/compiler_is.h +pathname.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +pathname.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +pathname.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +pathname.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +pathname.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +pathname.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +pathname.o: $(hdrdir)/ruby/internal/compiler_since.h +pathname.o: $(hdrdir)/ruby/internal/config.h +pathname.o: $(hdrdir)/ruby/internal/constant_p.h +pathname.o: $(hdrdir)/ruby/internal/core.h +pathname.o: $(hdrdir)/ruby/internal/core/rarray.h +pathname.o: $(hdrdir)/ruby/internal/core/rbasic.h +pathname.o: $(hdrdir)/ruby/internal/core/rbignum.h +pathname.o: $(hdrdir)/ruby/internal/core/rclass.h +pathname.o: $(hdrdir)/ruby/internal/core/rdata.h +pathname.o: $(hdrdir)/ruby/internal/core/rfile.h +pathname.o: $(hdrdir)/ruby/internal/core/rhash.h +pathname.o: $(hdrdir)/ruby/internal/core/robject.h +pathname.o: $(hdrdir)/ruby/internal/core/rregexp.h +pathname.o: $(hdrdir)/ruby/internal/core/rstring.h +pathname.o: $(hdrdir)/ruby/internal/core/rstruct.h +pathname.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +pathname.o: $(hdrdir)/ruby/internal/ctype.h +pathname.o: $(hdrdir)/ruby/internal/dllexport.h +pathname.o: $(hdrdir)/ruby/internal/dosish.h +pathname.o: $(hdrdir)/ruby/internal/encoding/coderange.h +pathname.o: $(hdrdir)/ruby/internal/encoding/ctype.h +pathname.o: $(hdrdir)/ruby/internal/encoding/encoding.h +pathname.o: $(hdrdir)/ruby/internal/encoding/pathname.h +pathname.o: $(hdrdir)/ruby/internal/encoding/re.h +pathname.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +pathname.o: $(hdrdir)/ruby/internal/encoding/string.h +pathname.o: $(hdrdir)/ruby/internal/encoding/symbol.h +pathname.o: $(hdrdir)/ruby/internal/encoding/transcode.h +pathname.o: $(hdrdir)/ruby/internal/error.h +pathname.o: $(hdrdir)/ruby/internal/eval.h +pathname.o: $(hdrdir)/ruby/internal/event.h +pathname.o: $(hdrdir)/ruby/internal/fl_type.h +pathname.o: $(hdrdir)/ruby/internal/gc.h +pathname.o: $(hdrdir)/ruby/internal/glob.h +pathname.o: $(hdrdir)/ruby/internal/globals.h +pathname.o: $(hdrdir)/ruby/internal/has/attribute.h +pathname.o: $(hdrdir)/ruby/internal/has/builtin.h +pathname.o: $(hdrdir)/ruby/internal/has/c_attribute.h +pathname.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +pathname.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +pathname.o: $(hdrdir)/ruby/internal/has/extension.h +pathname.o: $(hdrdir)/ruby/internal/has/feature.h +pathname.o: $(hdrdir)/ruby/internal/has/warning.h +pathname.o: $(hdrdir)/ruby/internal/intern/array.h +pathname.o: $(hdrdir)/ruby/internal/intern/bignum.h +pathname.o: $(hdrdir)/ruby/internal/intern/class.h +pathname.o: $(hdrdir)/ruby/internal/intern/compar.h +pathname.o: $(hdrdir)/ruby/internal/intern/complex.h +pathname.o: $(hdrdir)/ruby/internal/intern/cont.h +pathname.o: $(hdrdir)/ruby/internal/intern/dir.h +pathname.o: $(hdrdir)/ruby/internal/intern/enum.h +pathname.o: $(hdrdir)/ruby/internal/intern/enumerator.h +pathname.o: $(hdrdir)/ruby/internal/intern/error.h +pathname.o: $(hdrdir)/ruby/internal/intern/eval.h +pathname.o: $(hdrdir)/ruby/internal/intern/file.h +pathname.o: $(hdrdir)/ruby/internal/intern/gc.h +pathname.o: $(hdrdir)/ruby/internal/intern/hash.h +pathname.o: $(hdrdir)/ruby/internal/intern/io.h +pathname.o: $(hdrdir)/ruby/internal/intern/load.h +pathname.o: $(hdrdir)/ruby/internal/intern/marshal.h +pathname.o: $(hdrdir)/ruby/internal/intern/numeric.h +pathname.o: $(hdrdir)/ruby/internal/intern/object.h +pathname.o: $(hdrdir)/ruby/internal/intern/parse.h +pathname.o: $(hdrdir)/ruby/internal/intern/proc.h +pathname.o: $(hdrdir)/ruby/internal/intern/process.h +pathname.o: $(hdrdir)/ruby/internal/intern/random.h +pathname.o: $(hdrdir)/ruby/internal/intern/range.h +pathname.o: $(hdrdir)/ruby/internal/intern/rational.h +pathname.o: $(hdrdir)/ruby/internal/intern/re.h +pathname.o: $(hdrdir)/ruby/internal/intern/ruby.h +pathname.o: $(hdrdir)/ruby/internal/intern/select.h +pathname.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +pathname.o: $(hdrdir)/ruby/internal/intern/signal.h +pathname.o: $(hdrdir)/ruby/internal/intern/sprintf.h +pathname.o: $(hdrdir)/ruby/internal/intern/string.h +pathname.o: $(hdrdir)/ruby/internal/intern/struct.h +pathname.o: $(hdrdir)/ruby/internal/intern/thread.h +pathname.o: $(hdrdir)/ruby/internal/intern/time.h +pathname.o: $(hdrdir)/ruby/internal/intern/variable.h +pathname.o: $(hdrdir)/ruby/internal/intern/vm.h +pathname.o: $(hdrdir)/ruby/internal/interpreter.h +pathname.o: $(hdrdir)/ruby/internal/iterator.h +pathname.o: $(hdrdir)/ruby/internal/memory.h +pathname.o: $(hdrdir)/ruby/internal/method.h +pathname.o: $(hdrdir)/ruby/internal/module.h +pathname.o: $(hdrdir)/ruby/internal/newobj.h +pathname.o: $(hdrdir)/ruby/internal/rgengc.h +pathname.o: $(hdrdir)/ruby/internal/scan_args.h +pathname.o: $(hdrdir)/ruby/internal/special_consts.h +pathname.o: $(hdrdir)/ruby/internal/static_assert.h +pathname.o: $(hdrdir)/ruby/internal/stdalign.h +pathname.o: $(hdrdir)/ruby/internal/stdbool.h +pathname.o: $(hdrdir)/ruby/internal/symbol.h +pathname.o: $(hdrdir)/ruby/internal/value.h +pathname.o: $(hdrdir)/ruby/internal/value_type.h +pathname.o: $(hdrdir)/ruby/internal/variable.h +pathname.o: $(hdrdir)/ruby/internal/warning_push.h +pathname.o: $(hdrdir)/ruby/internal/xmalloc.h pathname.o: $(hdrdir)/ruby/missing.h pathname.o: $(hdrdir)/ruby/onigmo.h pathname.o: $(hdrdir)/ruby/oniguruma.h diff --git a/ruby/ext/pathname/lib/pathname.rb b/ruby/ext/pathname/lib/pathname.rb index dc4a7c022..3799d589d 100644 --- a/ruby/ext/pathname/lib/pathname.rb +++ b/ruby/ext/pathname/lib/pathname.rb @@ -35,6 +35,13 @@ class Pathname SEPARATOR_PAT = /#{Regexp.quote File::SEPARATOR}/ end + if File.dirname('A:') == 'A:.' # DOSish drive letter + ABSOLUTE_PATH = /\A(?:[A-Za-z]:|#{SEPARATOR_PAT})/o + else + ABSOLUTE_PATH = /\A#{SEPARATOR_PAT}/o + end + private_constant :ABSOLUTE_PATH + # :startdoc: # chop_basename(path) -> [pre-basename, basename] or nil @@ -222,7 +229,7 @@ def root? # p.absolute? # #=> false def absolute? - !relative? + ABSOLUTE_PATH.match? @path end # The opposite of Pathname#absolute? @@ -237,11 +244,7 @@ def absolute? # p.relative? # #=> true def relative? - path = @path - while r = chop_basename(path) - path, = r - end - path == '' + !absolute? end # @@ -502,6 +505,9 @@ def each_child(with_directory=true, &b) # # ArgumentError is raised when it cannot find a relative path. # + # Note that this method does not handle situations where the case sensitivity + # of the filesystem in use differs from the operating system default. + # def relative_path_from(base_directory) base_directory = Pathname.new(base_directory) unless base_directory.is_a? Pathname dest_directory = self.cleanpath.to_s @@ -569,13 +575,14 @@ def find(ignore_error: true) # :yield: pathname class Pathname # * FileUtils * + autoload(:FileUtils, 'fileutils') + # Creates a full path, including any intermediate directories that don't yet # exist. # # See FileUtils.mkpath and FileUtils.mkdir_p - def mkpath - require 'fileutils' - FileUtils.mkpath(@path) + def mkpath(mode: nil) + FileUtils.mkpath(@path, mode: mode) nil end @@ -585,7 +592,6 @@ def mkpath def rmtree # The name "rmtree" is borrowed from File::Path of Perl. # File::Path provides "mkpath" and "rmtree". - require 'fileutils' FileUtils.rm_r(@path) nil end diff --git a/ruby/ext/pathname/pathname.c b/ruby/ext/pathname/pathname.c index 15f80d487..1d4ed2814 100644 --- a/ruby/ext/pathname/pathname.c +++ b/ruby/ext/pathname/pathname.c @@ -138,7 +138,7 @@ path_freeze(VALUE self) static VALUE path_taint(VALUE self) { - rb_warning("Pathname#taint is deprecated and will be removed in Ruby 3.2."); + rb_warn("Pathname#taint is deprecated and will be removed in Ruby 3.2."); return self; } @@ -151,7 +151,7 @@ path_taint(VALUE self) static VALUE path_untaint(VALUE self) { - rb_warning("Pathname#untaint is deprecated and will be removed in Ruby 3.2."); + rb_warn("Pathname#untaint is deprecated and will be removed in Ruby 3.2."); return self; } @@ -360,10 +360,10 @@ path_each_line(int argc, VALUE *argv, VALUE self) args[0] = get_strpath(self); n = rb_scan_args(argc, argv, "03", &args[1], &args[2], &args[3]); if (rb_block_given_p()) { - return rb_block_call(rb_cFile, id_foreach, 1+n, args, 0, 0); + return rb_block_call_kw(rb_cFile, id_foreach, 1+n, args, 0, 0, RB_PASS_CALLED_KEYWORDS); } else { - return rb_funcallv(rb_cFile, id_foreach, 1+n, args); + return rb_funcallv_kw(rb_cFile, id_foreach, 1+n, args, RB_PASS_CALLED_KEYWORDS); } } @@ -554,7 +554,7 @@ path_mtime(VALUE self) /* * call-seq: - * pathname.chmod -> integer + * pathname.chmod(mode_int) -> integer * * Changes file permissions. * @@ -568,7 +568,7 @@ path_chmod(VALUE self, VALUE mode) /* * call-seq: - * pathname.lchmod -> integer + * pathname.lchmod(mode_int) -> integer * * Same as Pathname.chmod, but does not follow symbolic links. * @@ -582,7 +582,7 @@ path_lchmod(VALUE self, VALUE mode) /* * call-seq: - * pathname.chown -> integer + * pathname.chown(owner_int, group_int) -> integer * * Change owner and group of the file. * @@ -596,7 +596,7 @@ path_chown(VALUE self, VALUE owner, VALUE group) /* * call-seq: - * pathname.lchown -> integer + * pathname.lchown(owner_int, group_int) -> integer * * Same as Pathname.chown, but does not follow symbolic links. * @@ -610,8 +610,8 @@ path_lchown(VALUE self, VALUE owner, VALUE group) /* * call-seq: - * pathname.fnmatch(pattern, [flags]) -> string - * pathname.fnmatch?(pattern, [flags]) -> string + * pathname.fnmatch(pattern, [flags]) -> true or false + * pathname.fnmatch?(pattern, [flags]) -> true or false * * Return +true+ if the receiver matches the given pattern. * @@ -657,6 +657,13 @@ path_make_link(VALUE self, VALUE old) } /* + * call-seq: + * pathname.open() + * pathname.open(mode="r" [, opt]) -> file + * pathname.open([mode [, perm]] [, opt]) -> file + * pathname.open(mode="r" [, opt]) {|file| block } -> obj + * pathname.open([mode [, perm]] [, opt]) {|file| block } -> obj + * * Opens the file for reading or writing. * * See File.open. @@ -827,7 +834,7 @@ path_split(VALUE self) VALUE str = get_strpath(self); VALUE ary, dirname, basename; ary = rb_funcall(rb_cFile, id_split, 1, str); - ary = rb_check_array_type(ary); + Check_Type(ary, T_ARRAY); dirname = rb_ary_entry(ary, 0); basename = rb_ary_entry(ary, 1); dirname = rb_class_new_instance(1, &dirname, rb_obj_class(self)); @@ -1482,6 +1489,8 @@ path_f_pathname(VALUE self, VALUE str) * - #binread(*args) * - #readlines(*args) * - #sysopen(*args) + * - #write(*args) + * - #binwrite(*args) * * === Utilities * @@ -1503,6 +1512,10 @@ path_f_pathname(VALUE self, VALUE str) void Init_pathname(void) { +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + InitVM(pathname); rb_cPathname = rb_define_class("Pathname", rb_cObject); diff --git a/ruby/ext/pathname/pathname.gemspec b/ruby/ext/pathname/pathname.gemspec new file mode 100644 index 000000000..5aaa8f8dd --- /dev/null +++ b/ruby/ext/pathname/pathname.gemspec @@ -0,0 +1,25 @@ +Gem::Specification.new do |spec| + spec.name = "pathname" + spec.version = "0.2.0" + spec.authors = ["Tanaka Akira"] + spec.email = ["akr@fsij.org"] + + spec.summary = %q{Representation of the name of a file or directory on the filesystem} + spec.description = %q{Representation of the name of a file or directory on the filesystem} + spec.homepage = "https://github.com/ruby/pathname" + spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0") + spec.licenses = ["Ruby", "BSD-2-Clause"] + + spec.metadata["homepage_uri"] = spec.homepage + spec.metadata["source_code_uri"] = spec.homepage + + # Specify which files should be added to the gem when it is released. + # The `git ls-files -z` loads the files in the RubyGem that have been added into git. + spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do + `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } + end + spec.bindir = "exe" + spec.executables = [] + spec.require_paths = ["lib"] + spec.extensions = %w[ext/pathname/extconf.rb] +end diff --git a/ruby/ext/psych/depend b/ruby/ext/psych/depend index dc358eaed..444866353 100644 --- a/ruby/ext/psych/depend +++ b/ruby/ext/psych/depend @@ -6,9 +6,165 @@ psych.o: $(arch_hdrdir)/ruby/config.h psych.o: $(hdrdir)/ruby.h psych.o: $(hdrdir)/ruby/assert.h psych.o: $(hdrdir)/ruby/backward.h +psych.o: $(hdrdir)/ruby/backward/2/assume.h +psych.o: $(hdrdir)/ruby/backward/2/attributes.h +psych.o: $(hdrdir)/ruby/backward/2/bool.h +psych.o: $(hdrdir)/ruby/backward/2/inttypes.h +psych.o: $(hdrdir)/ruby/backward/2/limits.h +psych.o: $(hdrdir)/ruby/backward/2/long_long.h +psych.o: $(hdrdir)/ruby/backward/2/stdalign.h +psych.o: $(hdrdir)/ruby/backward/2/stdarg.h psych.o: $(hdrdir)/ruby/defines.h psych.o: $(hdrdir)/ruby/encoding.h psych.o: $(hdrdir)/ruby/intern.h +psych.o: $(hdrdir)/ruby/internal/anyargs.h +psych.o: $(hdrdir)/ruby/internal/arithmetic.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/char.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/double.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/int.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/long.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/short.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +psych.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +psych.o: $(hdrdir)/ruby/internal/assume.h +psych.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +psych.o: $(hdrdir)/ruby/internal/attr/artificial.h +psych.o: $(hdrdir)/ruby/internal/attr/cold.h +psych.o: $(hdrdir)/ruby/internal/attr/const.h +psych.o: $(hdrdir)/ruby/internal/attr/constexpr.h +psych.o: $(hdrdir)/ruby/internal/attr/deprecated.h +psych.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +psych.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +psych.o: $(hdrdir)/ruby/internal/attr/error.h +psych.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +psych.o: $(hdrdir)/ruby/internal/attr/forceinline.h +psych.o: $(hdrdir)/ruby/internal/attr/format.h +psych.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +psych.o: $(hdrdir)/ruby/internal/attr/noalias.h +psych.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +psych.o: $(hdrdir)/ruby/internal/attr/noexcept.h +psych.o: $(hdrdir)/ruby/internal/attr/noinline.h +psych.o: $(hdrdir)/ruby/internal/attr/nonnull.h +psych.o: $(hdrdir)/ruby/internal/attr/noreturn.h +psych.o: $(hdrdir)/ruby/internal/attr/pure.h +psych.o: $(hdrdir)/ruby/internal/attr/restrict.h +psych.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +psych.o: $(hdrdir)/ruby/internal/attr/warning.h +psych.o: $(hdrdir)/ruby/internal/attr/weakref.h +psych.o: $(hdrdir)/ruby/internal/cast.h +psych.o: $(hdrdir)/ruby/internal/compiler_is.h +psych.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +psych.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +psych.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +psych.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +psych.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +psych.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +psych.o: $(hdrdir)/ruby/internal/compiler_since.h +psych.o: $(hdrdir)/ruby/internal/config.h +psych.o: $(hdrdir)/ruby/internal/constant_p.h +psych.o: $(hdrdir)/ruby/internal/core.h +psych.o: $(hdrdir)/ruby/internal/core/rarray.h +psych.o: $(hdrdir)/ruby/internal/core/rbasic.h +psych.o: $(hdrdir)/ruby/internal/core/rbignum.h +psych.o: $(hdrdir)/ruby/internal/core/rclass.h +psych.o: $(hdrdir)/ruby/internal/core/rdata.h +psych.o: $(hdrdir)/ruby/internal/core/rfile.h +psych.o: $(hdrdir)/ruby/internal/core/rhash.h +psych.o: $(hdrdir)/ruby/internal/core/robject.h +psych.o: $(hdrdir)/ruby/internal/core/rregexp.h +psych.o: $(hdrdir)/ruby/internal/core/rstring.h +psych.o: $(hdrdir)/ruby/internal/core/rstruct.h +psych.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +psych.o: $(hdrdir)/ruby/internal/ctype.h +psych.o: $(hdrdir)/ruby/internal/dllexport.h +psych.o: $(hdrdir)/ruby/internal/dosish.h +psych.o: $(hdrdir)/ruby/internal/encoding/coderange.h +psych.o: $(hdrdir)/ruby/internal/encoding/ctype.h +psych.o: $(hdrdir)/ruby/internal/encoding/encoding.h +psych.o: $(hdrdir)/ruby/internal/encoding/pathname.h +psych.o: $(hdrdir)/ruby/internal/encoding/re.h +psych.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +psych.o: $(hdrdir)/ruby/internal/encoding/string.h +psych.o: $(hdrdir)/ruby/internal/encoding/symbol.h +psych.o: $(hdrdir)/ruby/internal/encoding/transcode.h +psych.o: $(hdrdir)/ruby/internal/error.h +psych.o: $(hdrdir)/ruby/internal/eval.h +psych.o: $(hdrdir)/ruby/internal/event.h +psych.o: $(hdrdir)/ruby/internal/fl_type.h +psych.o: $(hdrdir)/ruby/internal/gc.h +psych.o: $(hdrdir)/ruby/internal/glob.h +psych.o: $(hdrdir)/ruby/internal/globals.h +psych.o: $(hdrdir)/ruby/internal/has/attribute.h +psych.o: $(hdrdir)/ruby/internal/has/builtin.h +psych.o: $(hdrdir)/ruby/internal/has/c_attribute.h +psych.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +psych.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +psych.o: $(hdrdir)/ruby/internal/has/extension.h +psych.o: $(hdrdir)/ruby/internal/has/feature.h +psych.o: $(hdrdir)/ruby/internal/has/warning.h +psych.o: $(hdrdir)/ruby/internal/intern/array.h +psych.o: $(hdrdir)/ruby/internal/intern/bignum.h +psych.o: $(hdrdir)/ruby/internal/intern/class.h +psych.o: $(hdrdir)/ruby/internal/intern/compar.h +psych.o: $(hdrdir)/ruby/internal/intern/complex.h +psych.o: $(hdrdir)/ruby/internal/intern/cont.h +psych.o: $(hdrdir)/ruby/internal/intern/dir.h +psych.o: $(hdrdir)/ruby/internal/intern/enum.h +psych.o: $(hdrdir)/ruby/internal/intern/enumerator.h +psych.o: $(hdrdir)/ruby/internal/intern/error.h +psych.o: $(hdrdir)/ruby/internal/intern/eval.h +psych.o: $(hdrdir)/ruby/internal/intern/file.h +psych.o: $(hdrdir)/ruby/internal/intern/gc.h +psych.o: $(hdrdir)/ruby/internal/intern/hash.h +psych.o: $(hdrdir)/ruby/internal/intern/io.h +psych.o: $(hdrdir)/ruby/internal/intern/load.h +psych.o: $(hdrdir)/ruby/internal/intern/marshal.h +psych.o: $(hdrdir)/ruby/internal/intern/numeric.h +psych.o: $(hdrdir)/ruby/internal/intern/object.h +psych.o: $(hdrdir)/ruby/internal/intern/parse.h +psych.o: $(hdrdir)/ruby/internal/intern/proc.h +psych.o: $(hdrdir)/ruby/internal/intern/process.h +psych.o: $(hdrdir)/ruby/internal/intern/random.h +psych.o: $(hdrdir)/ruby/internal/intern/range.h +psych.o: $(hdrdir)/ruby/internal/intern/rational.h +psych.o: $(hdrdir)/ruby/internal/intern/re.h +psych.o: $(hdrdir)/ruby/internal/intern/ruby.h +psych.o: $(hdrdir)/ruby/internal/intern/select.h +psych.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +psych.o: $(hdrdir)/ruby/internal/intern/signal.h +psych.o: $(hdrdir)/ruby/internal/intern/sprintf.h +psych.o: $(hdrdir)/ruby/internal/intern/string.h +psych.o: $(hdrdir)/ruby/internal/intern/struct.h +psych.o: $(hdrdir)/ruby/internal/intern/thread.h +psych.o: $(hdrdir)/ruby/internal/intern/time.h +psych.o: $(hdrdir)/ruby/internal/intern/variable.h +psych.o: $(hdrdir)/ruby/internal/intern/vm.h +psych.o: $(hdrdir)/ruby/internal/interpreter.h +psych.o: $(hdrdir)/ruby/internal/iterator.h +psych.o: $(hdrdir)/ruby/internal/memory.h +psych.o: $(hdrdir)/ruby/internal/method.h +psych.o: $(hdrdir)/ruby/internal/module.h +psych.o: $(hdrdir)/ruby/internal/newobj.h +psych.o: $(hdrdir)/ruby/internal/rgengc.h +psych.o: $(hdrdir)/ruby/internal/scan_args.h +psych.o: $(hdrdir)/ruby/internal/special_consts.h +psych.o: $(hdrdir)/ruby/internal/static_assert.h +psych.o: $(hdrdir)/ruby/internal/stdalign.h +psych.o: $(hdrdir)/ruby/internal/stdbool.h +psych.o: $(hdrdir)/ruby/internal/symbol.h +psych.o: $(hdrdir)/ruby/internal/value.h +psych.o: $(hdrdir)/ruby/internal/value_type.h +psych.o: $(hdrdir)/ruby/internal/variable.h +psych.o: $(hdrdir)/ruby/internal/warning_push.h +psych.o: $(hdrdir)/ruby/internal/xmalloc.h psych.o: $(hdrdir)/ruby/missing.h psych.o: $(hdrdir)/ruby/onigmo.h psych.o: $(hdrdir)/ruby/oniguruma.h @@ -26,9 +182,165 @@ psych_emitter.o: $(arch_hdrdir)/ruby/config.h psych_emitter.o: $(hdrdir)/ruby.h psych_emitter.o: $(hdrdir)/ruby/assert.h psych_emitter.o: $(hdrdir)/ruby/backward.h +psych_emitter.o: $(hdrdir)/ruby/backward/2/assume.h +psych_emitter.o: $(hdrdir)/ruby/backward/2/attributes.h +psych_emitter.o: $(hdrdir)/ruby/backward/2/bool.h +psych_emitter.o: $(hdrdir)/ruby/backward/2/inttypes.h +psych_emitter.o: $(hdrdir)/ruby/backward/2/limits.h +psych_emitter.o: $(hdrdir)/ruby/backward/2/long_long.h +psych_emitter.o: $(hdrdir)/ruby/backward/2/stdalign.h +psych_emitter.o: $(hdrdir)/ruby/backward/2/stdarg.h psych_emitter.o: $(hdrdir)/ruby/defines.h psych_emitter.o: $(hdrdir)/ruby/encoding.h psych_emitter.o: $(hdrdir)/ruby/intern.h +psych_emitter.o: $(hdrdir)/ruby/internal/anyargs.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/char.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/double.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/int.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/long.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/short.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +psych_emitter.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +psych_emitter.o: $(hdrdir)/ruby/internal/assume.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/artificial.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/cold.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/const.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/constexpr.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/deprecated.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/error.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/forceinline.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/format.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/noalias.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/noexcept.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/noinline.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/nonnull.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/noreturn.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/pure.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/restrict.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/warning.h +psych_emitter.o: $(hdrdir)/ruby/internal/attr/weakref.h +psych_emitter.o: $(hdrdir)/ruby/internal/cast.h +psych_emitter.o: $(hdrdir)/ruby/internal/compiler_is.h +psych_emitter.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +psych_emitter.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +psych_emitter.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +psych_emitter.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +psych_emitter.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +psych_emitter.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +psych_emitter.o: $(hdrdir)/ruby/internal/compiler_since.h +psych_emitter.o: $(hdrdir)/ruby/internal/config.h +psych_emitter.o: $(hdrdir)/ruby/internal/constant_p.h +psych_emitter.o: $(hdrdir)/ruby/internal/core.h +psych_emitter.o: $(hdrdir)/ruby/internal/core/rarray.h +psych_emitter.o: $(hdrdir)/ruby/internal/core/rbasic.h +psych_emitter.o: $(hdrdir)/ruby/internal/core/rbignum.h +psych_emitter.o: $(hdrdir)/ruby/internal/core/rclass.h +psych_emitter.o: $(hdrdir)/ruby/internal/core/rdata.h +psych_emitter.o: $(hdrdir)/ruby/internal/core/rfile.h +psych_emitter.o: $(hdrdir)/ruby/internal/core/rhash.h +psych_emitter.o: $(hdrdir)/ruby/internal/core/robject.h +psych_emitter.o: $(hdrdir)/ruby/internal/core/rregexp.h +psych_emitter.o: $(hdrdir)/ruby/internal/core/rstring.h +psych_emitter.o: $(hdrdir)/ruby/internal/core/rstruct.h +psych_emitter.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +psych_emitter.o: $(hdrdir)/ruby/internal/ctype.h +psych_emitter.o: $(hdrdir)/ruby/internal/dllexport.h +psych_emitter.o: $(hdrdir)/ruby/internal/dosish.h +psych_emitter.o: $(hdrdir)/ruby/internal/encoding/coderange.h +psych_emitter.o: $(hdrdir)/ruby/internal/encoding/ctype.h +psych_emitter.o: $(hdrdir)/ruby/internal/encoding/encoding.h +psych_emitter.o: $(hdrdir)/ruby/internal/encoding/pathname.h +psych_emitter.o: $(hdrdir)/ruby/internal/encoding/re.h +psych_emitter.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +psych_emitter.o: $(hdrdir)/ruby/internal/encoding/string.h +psych_emitter.o: $(hdrdir)/ruby/internal/encoding/symbol.h +psych_emitter.o: $(hdrdir)/ruby/internal/encoding/transcode.h +psych_emitter.o: $(hdrdir)/ruby/internal/error.h +psych_emitter.o: $(hdrdir)/ruby/internal/eval.h +psych_emitter.o: $(hdrdir)/ruby/internal/event.h +psych_emitter.o: $(hdrdir)/ruby/internal/fl_type.h +psych_emitter.o: $(hdrdir)/ruby/internal/gc.h +psych_emitter.o: $(hdrdir)/ruby/internal/glob.h +psych_emitter.o: $(hdrdir)/ruby/internal/globals.h +psych_emitter.o: $(hdrdir)/ruby/internal/has/attribute.h +psych_emitter.o: $(hdrdir)/ruby/internal/has/builtin.h +psych_emitter.o: $(hdrdir)/ruby/internal/has/c_attribute.h +psych_emitter.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +psych_emitter.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +psych_emitter.o: $(hdrdir)/ruby/internal/has/extension.h +psych_emitter.o: $(hdrdir)/ruby/internal/has/feature.h +psych_emitter.o: $(hdrdir)/ruby/internal/has/warning.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/array.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/bignum.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/class.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/compar.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/complex.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/cont.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/dir.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/enum.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/enumerator.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/error.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/eval.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/file.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/gc.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/hash.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/io.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/load.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/marshal.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/numeric.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/object.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/parse.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/proc.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/process.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/random.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/range.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/rational.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/re.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/ruby.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/select.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/signal.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/sprintf.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/string.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/struct.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/thread.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/time.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/variable.h +psych_emitter.o: $(hdrdir)/ruby/internal/intern/vm.h +psych_emitter.o: $(hdrdir)/ruby/internal/interpreter.h +psych_emitter.o: $(hdrdir)/ruby/internal/iterator.h +psych_emitter.o: $(hdrdir)/ruby/internal/memory.h +psych_emitter.o: $(hdrdir)/ruby/internal/method.h +psych_emitter.o: $(hdrdir)/ruby/internal/module.h +psych_emitter.o: $(hdrdir)/ruby/internal/newobj.h +psych_emitter.o: $(hdrdir)/ruby/internal/rgengc.h +psych_emitter.o: $(hdrdir)/ruby/internal/scan_args.h +psych_emitter.o: $(hdrdir)/ruby/internal/special_consts.h +psych_emitter.o: $(hdrdir)/ruby/internal/static_assert.h +psych_emitter.o: $(hdrdir)/ruby/internal/stdalign.h +psych_emitter.o: $(hdrdir)/ruby/internal/stdbool.h +psych_emitter.o: $(hdrdir)/ruby/internal/symbol.h +psych_emitter.o: $(hdrdir)/ruby/internal/value.h +psych_emitter.o: $(hdrdir)/ruby/internal/value_type.h +psych_emitter.o: $(hdrdir)/ruby/internal/variable.h +psych_emitter.o: $(hdrdir)/ruby/internal/warning_push.h +psych_emitter.o: $(hdrdir)/ruby/internal/xmalloc.h psych_emitter.o: $(hdrdir)/ruby/missing.h psych_emitter.o: $(hdrdir)/ruby/onigmo.h psych_emitter.o: $(hdrdir)/ruby/oniguruma.h @@ -46,9 +358,165 @@ psych_parser.o: $(arch_hdrdir)/ruby/config.h psych_parser.o: $(hdrdir)/ruby.h psych_parser.o: $(hdrdir)/ruby/assert.h psych_parser.o: $(hdrdir)/ruby/backward.h +psych_parser.o: $(hdrdir)/ruby/backward/2/assume.h +psych_parser.o: $(hdrdir)/ruby/backward/2/attributes.h +psych_parser.o: $(hdrdir)/ruby/backward/2/bool.h +psych_parser.o: $(hdrdir)/ruby/backward/2/inttypes.h +psych_parser.o: $(hdrdir)/ruby/backward/2/limits.h +psych_parser.o: $(hdrdir)/ruby/backward/2/long_long.h +psych_parser.o: $(hdrdir)/ruby/backward/2/stdalign.h +psych_parser.o: $(hdrdir)/ruby/backward/2/stdarg.h psych_parser.o: $(hdrdir)/ruby/defines.h psych_parser.o: $(hdrdir)/ruby/encoding.h psych_parser.o: $(hdrdir)/ruby/intern.h +psych_parser.o: $(hdrdir)/ruby/internal/anyargs.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/char.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/double.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/int.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/long.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/short.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +psych_parser.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +psych_parser.o: $(hdrdir)/ruby/internal/assume.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/artificial.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/cold.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/const.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/constexpr.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/deprecated.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/error.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/forceinline.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/format.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/noalias.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/noexcept.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/noinline.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/nonnull.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/noreturn.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/pure.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/restrict.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/warning.h +psych_parser.o: $(hdrdir)/ruby/internal/attr/weakref.h +psych_parser.o: $(hdrdir)/ruby/internal/cast.h +psych_parser.o: $(hdrdir)/ruby/internal/compiler_is.h +psych_parser.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +psych_parser.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +psych_parser.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +psych_parser.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +psych_parser.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +psych_parser.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +psych_parser.o: $(hdrdir)/ruby/internal/compiler_since.h +psych_parser.o: $(hdrdir)/ruby/internal/config.h +psych_parser.o: $(hdrdir)/ruby/internal/constant_p.h +psych_parser.o: $(hdrdir)/ruby/internal/core.h +psych_parser.o: $(hdrdir)/ruby/internal/core/rarray.h +psych_parser.o: $(hdrdir)/ruby/internal/core/rbasic.h +psych_parser.o: $(hdrdir)/ruby/internal/core/rbignum.h +psych_parser.o: $(hdrdir)/ruby/internal/core/rclass.h +psych_parser.o: $(hdrdir)/ruby/internal/core/rdata.h +psych_parser.o: $(hdrdir)/ruby/internal/core/rfile.h +psych_parser.o: $(hdrdir)/ruby/internal/core/rhash.h +psych_parser.o: $(hdrdir)/ruby/internal/core/robject.h +psych_parser.o: $(hdrdir)/ruby/internal/core/rregexp.h +psych_parser.o: $(hdrdir)/ruby/internal/core/rstring.h +psych_parser.o: $(hdrdir)/ruby/internal/core/rstruct.h +psych_parser.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +psych_parser.o: $(hdrdir)/ruby/internal/ctype.h +psych_parser.o: $(hdrdir)/ruby/internal/dllexport.h +psych_parser.o: $(hdrdir)/ruby/internal/dosish.h +psych_parser.o: $(hdrdir)/ruby/internal/encoding/coderange.h +psych_parser.o: $(hdrdir)/ruby/internal/encoding/ctype.h +psych_parser.o: $(hdrdir)/ruby/internal/encoding/encoding.h +psych_parser.o: $(hdrdir)/ruby/internal/encoding/pathname.h +psych_parser.o: $(hdrdir)/ruby/internal/encoding/re.h +psych_parser.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +psych_parser.o: $(hdrdir)/ruby/internal/encoding/string.h +psych_parser.o: $(hdrdir)/ruby/internal/encoding/symbol.h +psych_parser.o: $(hdrdir)/ruby/internal/encoding/transcode.h +psych_parser.o: $(hdrdir)/ruby/internal/error.h +psych_parser.o: $(hdrdir)/ruby/internal/eval.h +psych_parser.o: $(hdrdir)/ruby/internal/event.h +psych_parser.o: $(hdrdir)/ruby/internal/fl_type.h +psych_parser.o: $(hdrdir)/ruby/internal/gc.h +psych_parser.o: $(hdrdir)/ruby/internal/glob.h +psych_parser.o: $(hdrdir)/ruby/internal/globals.h +psych_parser.o: $(hdrdir)/ruby/internal/has/attribute.h +psych_parser.o: $(hdrdir)/ruby/internal/has/builtin.h +psych_parser.o: $(hdrdir)/ruby/internal/has/c_attribute.h +psych_parser.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +psych_parser.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +psych_parser.o: $(hdrdir)/ruby/internal/has/extension.h +psych_parser.o: $(hdrdir)/ruby/internal/has/feature.h +psych_parser.o: $(hdrdir)/ruby/internal/has/warning.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/array.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/bignum.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/class.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/compar.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/complex.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/cont.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/dir.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/enum.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/enumerator.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/error.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/eval.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/file.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/gc.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/hash.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/io.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/load.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/marshal.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/numeric.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/object.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/parse.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/proc.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/process.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/random.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/range.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/rational.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/re.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/ruby.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/select.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/signal.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/sprintf.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/string.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/struct.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/thread.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/time.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/variable.h +psych_parser.o: $(hdrdir)/ruby/internal/intern/vm.h +psych_parser.o: $(hdrdir)/ruby/internal/interpreter.h +psych_parser.o: $(hdrdir)/ruby/internal/iterator.h +psych_parser.o: $(hdrdir)/ruby/internal/memory.h +psych_parser.o: $(hdrdir)/ruby/internal/method.h +psych_parser.o: $(hdrdir)/ruby/internal/module.h +psych_parser.o: $(hdrdir)/ruby/internal/newobj.h +psych_parser.o: $(hdrdir)/ruby/internal/rgengc.h +psych_parser.o: $(hdrdir)/ruby/internal/scan_args.h +psych_parser.o: $(hdrdir)/ruby/internal/special_consts.h +psych_parser.o: $(hdrdir)/ruby/internal/static_assert.h +psych_parser.o: $(hdrdir)/ruby/internal/stdalign.h +psych_parser.o: $(hdrdir)/ruby/internal/stdbool.h +psych_parser.o: $(hdrdir)/ruby/internal/symbol.h +psych_parser.o: $(hdrdir)/ruby/internal/value.h +psych_parser.o: $(hdrdir)/ruby/internal/value_type.h +psych_parser.o: $(hdrdir)/ruby/internal/variable.h +psych_parser.o: $(hdrdir)/ruby/internal/warning_push.h +psych_parser.o: $(hdrdir)/ruby/internal/xmalloc.h psych_parser.o: $(hdrdir)/ruby/missing.h psych_parser.o: $(hdrdir)/ruby/onigmo.h psych_parser.o: $(hdrdir)/ruby/oniguruma.h @@ -66,9 +534,165 @@ psych_to_ruby.o: $(arch_hdrdir)/ruby/config.h psych_to_ruby.o: $(hdrdir)/ruby.h psych_to_ruby.o: $(hdrdir)/ruby/assert.h psych_to_ruby.o: $(hdrdir)/ruby/backward.h +psych_to_ruby.o: $(hdrdir)/ruby/backward/2/assume.h +psych_to_ruby.o: $(hdrdir)/ruby/backward/2/attributes.h +psych_to_ruby.o: $(hdrdir)/ruby/backward/2/bool.h +psych_to_ruby.o: $(hdrdir)/ruby/backward/2/inttypes.h +psych_to_ruby.o: $(hdrdir)/ruby/backward/2/limits.h +psych_to_ruby.o: $(hdrdir)/ruby/backward/2/long_long.h +psych_to_ruby.o: $(hdrdir)/ruby/backward/2/stdalign.h +psych_to_ruby.o: $(hdrdir)/ruby/backward/2/stdarg.h psych_to_ruby.o: $(hdrdir)/ruby/defines.h psych_to_ruby.o: $(hdrdir)/ruby/encoding.h psych_to_ruby.o: $(hdrdir)/ruby/intern.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/anyargs.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/char.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/double.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/int.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/long.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/short.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/assume.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/artificial.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/cold.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/const.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/constexpr.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/deprecated.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/error.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/forceinline.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/format.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/noalias.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/noexcept.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/noinline.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/nonnull.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/noreturn.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/pure.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/restrict.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/warning.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/attr/weakref.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/cast.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/compiler_is.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/compiler_since.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/config.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/constant_p.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core/rarray.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core/rbasic.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core/rbignum.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core/rclass.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core/rdata.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core/rfile.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core/rhash.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core/robject.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core/rregexp.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core/rstring.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core/rstruct.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/ctype.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/dllexport.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/dosish.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/encoding/coderange.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/encoding/ctype.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/encoding/encoding.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/encoding/pathname.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/encoding/re.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/encoding/string.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/encoding/symbol.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/encoding/transcode.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/error.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/eval.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/event.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/fl_type.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/gc.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/glob.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/globals.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/has/attribute.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/has/builtin.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/has/c_attribute.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/has/extension.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/has/feature.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/has/warning.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/array.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/bignum.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/class.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/compar.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/complex.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/cont.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/dir.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/enum.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/enumerator.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/error.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/eval.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/file.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/gc.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/hash.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/io.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/load.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/marshal.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/numeric.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/object.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/parse.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/proc.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/process.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/random.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/range.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/rational.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/re.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/ruby.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/select.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/signal.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/sprintf.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/string.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/struct.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/thread.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/time.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/variable.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/intern/vm.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/interpreter.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/iterator.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/memory.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/method.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/module.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/newobj.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/rgengc.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/scan_args.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/special_consts.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/static_assert.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/stdalign.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/stdbool.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/symbol.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/value.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/value_type.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/variable.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/warning_push.h +psych_to_ruby.o: $(hdrdir)/ruby/internal/xmalloc.h psych_to_ruby.o: $(hdrdir)/ruby/missing.h psych_to_ruby.o: $(hdrdir)/ruby/onigmo.h psych_to_ruby.o: $(hdrdir)/ruby/oniguruma.h @@ -86,9 +710,165 @@ psych_yaml_tree.o: $(arch_hdrdir)/ruby/config.h psych_yaml_tree.o: $(hdrdir)/ruby.h psych_yaml_tree.o: $(hdrdir)/ruby/assert.h psych_yaml_tree.o: $(hdrdir)/ruby/backward.h +psych_yaml_tree.o: $(hdrdir)/ruby/backward/2/assume.h +psych_yaml_tree.o: $(hdrdir)/ruby/backward/2/attributes.h +psych_yaml_tree.o: $(hdrdir)/ruby/backward/2/bool.h +psych_yaml_tree.o: $(hdrdir)/ruby/backward/2/inttypes.h +psych_yaml_tree.o: $(hdrdir)/ruby/backward/2/limits.h +psych_yaml_tree.o: $(hdrdir)/ruby/backward/2/long_long.h +psych_yaml_tree.o: $(hdrdir)/ruby/backward/2/stdalign.h +psych_yaml_tree.o: $(hdrdir)/ruby/backward/2/stdarg.h psych_yaml_tree.o: $(hdrdir)/ruby/defines.h psych_yaml_tree.o: $(hdrdir)/ruby/encoding.h psych_yaml_tree.o: $(hdrdir)/ruby/intern.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/anyargs.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/char.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/double.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/int.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/long.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/short.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/assume.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/artificial.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/cold.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/const.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/constexpr.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/deprecated.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/error.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/forceinline.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/format.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/noalias.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/noexcept.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/noinline.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/nonnull.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/noreturn.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/pure.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/restrict.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/warning.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/attr/weakref.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/cast.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/compiler_is.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/compiler_since.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/config.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/constant_p.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core/rarray.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core/rbasic.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core/rbignum.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core/rclass.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core/rdata.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core/rfile.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core/rhash.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core/robject.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core/rregexp.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core/rstring.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core/rstruct.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/ctype.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/dllexport.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/dosish.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/encoding/coderange.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/encoding/ctype.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/encoding/encoding.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/encoding/pathname.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/encoding/re.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/encoding/string.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/encoding/symbol.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/encoding/transcode.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/error.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/eval.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/event.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/fl_type.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/gc.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/glob.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/globals.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/has/attribute.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/has/builtin.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/has/c_attribute.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/has/extension.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/has/feature.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/has/warning.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/array.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/bignum.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/class.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/compar.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/complex.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/cont.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/dir.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/enum.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/enumerator.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/error.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/eval.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/file.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/gc.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/hash.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/io.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/load.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/marshal.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/numeric.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/object.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/parse.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/proc.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/process.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/random.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/range.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/rational.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/re.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/ruby.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/select.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/signal.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/sprintf.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/string.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/struct.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/thread.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/time.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/variable.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/intern/vm.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/interpreter.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/iterator.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/memory.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/method.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/module.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/newobj.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/rgengc.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/scan_args.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/special_consts.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/static_assert.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/stdalign.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/stdbool.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/symbol.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/value.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/value_type.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/variable.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/warning_push.h +psych_yaml_tree.o: $(hdrdir)/ruby/internal/xmalloc.h psych_yaml_tree.o: $(hdrdir)/ruby/missing.h psych_yaml_tree.o: $(hdrdir)/ruby/onigmo.h psych_yaml_tree.o: $(hdrdir)/ruby/oniguruma.h diff --git a/ruby/ext/psych/lib/psych.rb b/ruby/ext/psych/lib/psych.rb index c719b036d..383078788 100644 --- a/ruby/ext/psych/lib/psych.rb +++ b/ruby/ext/psych/lib/psych.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'psych/versions' +require_relative 'psych/versions' case RUBY_ENGINE when 'jruby' - require 'psych_jars' + require_relative 'psych_jars' if JRuby::Util.respond_to?(:load_ext) JRuby::Util.load_ext('org.jruby.ext.psych.PsychLibrary') else @@ -12,28 +12,28 @@ else require 'psych.so' end -require 'psych/nodes' -require 'psych/streaming' -require 'psych/visitors' -require 'psych/handler' -require 'psych/tree_builder' -require 'psych/parser' -require 'psych/omap' -require 'psych/set' -require 'psych/coder' -require 'psych/core_ext' -require 'psych/stream' -require 'psych/json/tree_builder' -require 'psych/json/stream' -require 'psych/handlers/document_stream' -require 'psych/class_loader' +require_relative 'psych/nodes' +require_relative 'psych/streaming' +require_relative 'psych/visitors' +require_relative 'psych/handler' +require_relative 'psych/tree_builder' +require_relative 'psych/parser' +require_relative 'psych/omap' +require_relative 'psych/set' +require_relative 'psych/coder' +require_relative 'psych/core_ext' +require_relative 'psych/stream' +require_relative 'psych/json/tree_builder' +require_relative 'psych/json/stream' +require_relative 'psych/handlers/document_stream' +require_relative 'psych/class_loader' ### # = Overview # # Psych is a YAML parser and emitter. # Psych leverages libyaml [Home page: https://pyyaml.org/wiki/LibYAML] -# or [HG repo: https://bitbucket.org/xi/libyaml] for its YAML parsing +# or [git repo: https://github.com/yaml/libyaml] for its YAML parsing # and emitting capabilities. In addition to wrapping libyaml, Psych also # knows how to serialize and de-serialize most Ruby objects to and from # the YAML format. @@ -74,12 +74,15 @@ # # ==== Reading from a string # -# Psych.load("--- a") # => 'a' -# Psych.load("---\n - a\n - b") # => ['a', 'b'] +# Psych.safe_load("--- a") # => 'a' +# Psych.safe_load("---\n - a\n - b") # => ['a', 'b'] +# # From a trusted string: +# Psych.load("--- !ruby/range\nbegin: 0\nend: 42\nexcl: false\n") # => 0..42 # # ==== Reading from a file # -# Psych.load_file("database.yml") +# Psych.safe_load_file("data.yml", permitted_classes: [Date]) +# Psych.load_file("trusted_database.yml") # # ==== Exception handling # @@ -230,10 +233,7 @@ module Psych # The version of libyaml Psych is using - LIBYAML_VERSION = Psych.libyaml_version.join '.' - # Deprecation guard - NOT_GIVEN = Object.new - private_constant :NOT_GIVEN + LIBYAML_VERSION = Psych.libyaml_version.join('.').freeze ### # Load +yaml+ in to a Ruby data structure. If multiple documents are @@ -246,11 +246,11 @@ module Psych # # Example: # - # Psych.load("--- a") # => 'a' - # Psych.load("---\n - a\n - b") # => ['a', 'b'] + # Psych.unsafe_load("--- a") # => 'a' + # Psych.unsafe_load("---\n - a\n - b") # => ['a', 'b'] # # begin - # Psych.load("--- `", filename: "file.txt") + # Psych.unsafe_load("--- `", filename: "file.txt") # rescue Psych::SyntaxError => ex # ex.file # => 'file.txt' # ex.message # => "(file.txt): found character that cannot start any token" @@ -259,27 +259,21 @@ module Psych # When the optional +symbolize_names+ keyword argument is set to a # true value, returns symbols for keys in Hash objects (default: strings). # - # Psych.load("---\n foo: bar") # => {"foo"=>"bar"} - # Psych.load("---\n foo: bar", symbolize_names: true) # => {:foo=>"bar"} + # Psych.unsafe_load("---\n foo: bar") # => {"foo"=>"bar"} + # Psych.unsafe_load("---\n foo: bar", symbolize_names: true) # => {:foo=>"bar"} # # Raises a TypeError when `yaml` parameter is NilClass # # NOTE: This method *should not* be used to parse untrusted documents, such as # YAML documents that are supplied via user input. Instead, please use the - # safe_load method. + # load method or the safe_load method. # - def self.load yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback: false, symbolize_names: false - if legacy_filename != NOT_GIVEN - warn_with_uplevel 'Passing filename with the 2nd argument of Psych.load is deprecated. Use keyword argument like Psych.load(yaml, filename: ...) instead.', uplevel: 1 if $VERBOSE - filename = legacy_filename - end - + def self.unsafe_load yaml, filename: nil, fallback: false, symbolize_names: false, freeze: false result = parse(yaml, filename: filename) return fallback unless result - result = result.to_ruby if result - symbolize_names!(result) if symbolize_names - result + result.to_ruby(symbolize_names: symbolize_names, freeze: freeze) end + class << self; alias :load :unsafe_load; end ### # Safely load the yaml string in +yaml+. By default, only the following @@ -288,7 +282,8 @@ def self.load yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback: false, # * TrueClass # * FalseClass # * NilClass - # * Numeric + # * Integer + # * Float # * String # * Array # * Hash @@ -325,27 +320,7 @@ def self.load yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback: false, # Psych.safe_load("---\n foo: bar") # => {"foo"=>"bar"} # Psych.safe_load("---\n foo: bar", symbolize_names: true) # => {:foo=>"bar"} # - def self.safe_load yaml, legacy_permitted_classes = NOT_GIVEN, legacy_permitted_symbols = NOT_GIVEN, legacy_aliases = NOT_GIVEN, legacy_filename = NOT_GIVEN, permitted_classes: [], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false - if legacy_permitted_classes != NOT_GIVEN - warn_with_uplevel 'Passing permitted_classes with the 2nd argument of Psych.safe_load is deprecated. Use keyword argument like Psych.safe_load(yaml, permitted_classes: ...) instead.', uplevel: 1 if $VERBOSE - permitted_classes = legacy_permitted_classes - end - - if legacy_permitted_symbols != NOT_GIVEN - warn_with_uplevel 'Passing permitted_symbols with the 3rd argument of Psych.safe_load is deprecated. Use keyword argument like Psych.safe_load(yaml, permitted_symbols: ...) instead.', uplevel: 1 if $VERBOSE - permitted_symbols = legacy_permitted_symbols - end - - if legacy_aliases != NOT_GIVEN - warn_with_uplevel 'Passing aliases with the 4th argument of Psych.safe_load is deprecated. Use keyword argument like Psych.safe_load(yaml, aliases: ...) instead.', uplevel: 1 if $VERBOSE - aliases = legacy_aliases - end - - if legacy_filename != NOT_GIVEN - warn_with_uplevel 'Passing filename with the 5th argument of Psych.safe_load is deprecated. Use keyword argument like Psych.safe_load(yaml, filename: ...) instead.', uplevel: 1 if $VERBOSE - filename = legacy_filename - end - + def self.safe_load yaml, permitted_classes: [], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false result = parse(yaml, filename: filename) return fallback unless result @@ -353,15 +328,54 @@ def self.safe_load yaml, legacy_permitted_classes = NOT_GIVEN, legacy_permitted_ permitted_symbols.map(&:to_s)) scanner = ScalarScanner.new class_loader visitor = if aliases - Visitors::ToRuby.new scanner, class_loader + Visitors::ToRuby.new scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze else - Visitors::NoAliasRuby.new scanner, class_loader + Visitors::NoAliasRuby.new scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze end result = visitor.accept result - symbolize_names!(result) if symbolize_names result end + ### + # Load +yaml+ in to a Ruby data structure. If multiple documents are + # provided, the object contained in the first document will be returned. + # +filename+ will be used in the exception message if any exception + # is raised while parsing. If +yaml+ is empty, it returns + # the specified +fallback+ return value, which defaults to +false+. + # + # Raises a Psych::SyntaxError when a YAML syntax error is detected. + # + # Example: + # + # Psych.load("--- a") # => 'a' + # Psych.load("---\n - a\n - b") # => ['a', 'b'] + # + # begin + # Psych.load("--- `", filename: "file.txt") + # rescue Psych::SyntaxError => ex + # ex.file # => 'file.txt' + # ex.message # => "(file.txt): found character that cannot start any token" + # end + # + # When the optional +symbolize_names+ keyword argument is set to a + # true value, returns symbols for keys in Hash objects (default: strings). + # + # Psych.load("---\n foo: bar") # => {"foo"=>"bar"} + # Psych.load("---\n foo: bar", symbolize_names: true) # => {:foo=>"bar"} + # + # Raises a TypeError when `yaml` parameter is NilClass. This method is + # similar to `safe_load` except that `Symbol` objects are allowed by default. + # + def self.load yaml, permitted_classes: [Symbol], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false + safe_load yaml, permitted_classes: permitted_classes, + permitted_symbols: permitted_symbols, + aliases: aliases, + filename: filename, + fallback: fallback, + symbolize_names: symbolize_names, + freeze: freeze + end + ### # Parse a YAML string in +yaml+. Returns the Psych::Nodes::Document. # +filename+ is used in the exception message if a Psych::SyntaxError is @@ -381,22 +395,12 @@ def self.safe_load yaml, legacy_permitted_classes = NOT_GIVEN, legacy_permitted_ # end # # See Psych::Nodes for more information about YAML AST. - def self.parse yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback: NOT_GIVEN - if legacy_filename != NOT_GIVEN - warn_with_uplevel 'Passing filename with the 2nd argument of Psych.parse is deprecated. Use keyword argument like Psych.parse(yaml, filename: ...) instead.', uplevel: 1 if $VERBOSE - filename = legacy_filename - end - + def self.parse yaml, filename: nil parse_stream(yaml, filename: filename) do |node| return node end - if fallback != NOT_GIVEN - warn_with_uplevel 'Passing the `fallback` keyword argument of Psych.parse is deprecated.', uplevel: 1 if $VERBOSE - fallback - else - false - end + false end ### @@ -445,12 +449,7 @@ def self.parser # Raises a TypeError when NilClass is passed. # # See Psych::Nodes for more information about YAML AST. - def self.parse_stream yaml, legacy_filename = NOT_GIVEN, filename: nil, &block - if legacy_filename != NOT_GIVEN - warn_with_uplevel 'Passing filename with the 2nd argument of Psych.parse_stream is deprecated. Use keyword argument like Psych.parse_stream(yaml, filename: ...) instead.', uplevel: 1 if $VERBOSE - filename = legacy_filename - end - + def self.parse_stream yaml, filename: nil, &block if block_given? parser = Psych::Parser.new(Handlers::DocumentStream.new(&block)) parser.parse yaml, filename @@ -514,6 +513,79 @@ def self.dump o, io = nil, options = {} visitor.tree.yaml io, options end + ### + # call-seq: + # Psych.safe_dump(o) -> string of yaml + # Psych.safe_dump(o, options) -> string of yaml + # Psych.safe_dump(o, io) -> io object passed in + # Psych.safe_dump(o, io, options) -> io object passed in + # + # Safely dump Ruby object +o+ to a YAML string. Optional +options+ may be passed in + # to control the output format. If an IO object is passed in, the YAML will + # be dumped to that IO object. By default, only the following + # classes are allowed to be serialized: + # + # * TrueClass + # * FalseClass + # * NilClass + # * Integer + # * Float + # * String + # * Array + # * Hash + # + # Arbitrary classes can be allowed by adding those classes to the +permitted_classes+ + # keyword argument. They are additive. For example, to allow Date serialization: + # + # Psych.safe_dump(yaml, permitted_classes: [Date]) + # + # Now the Date class can be dumped in addition to the classes listed above. + # + # A Psych::DisallowedClass exception will be raised if the object contains a + # class that isn't in the +permitted_classes+ list. + # + # Currently supported options are: + # + # [:indentation] Number of space characters used to indent. + # Acceptable value should be in 0..9 range, + # otherwise option is ignored. + # + # Default: 2. + # [:line_width] Max character to wrap line at. + # + # Default: 0 (meaning "wrap at 81"). + # [:canonical] Write "canonical" YAML form (very verbose, yet + # strictly formal). + # + # Default: false. + # [:header] Write %YAML [version] at the beginning of document. + # + # Default: false. + # + # Example: + # + # # Dump an array, get back a YAML string + # Psych.safe_dump(['a', 'b']) # => "---\n- a\n- b\n" + # + # # Dump an array to an IO object + # Psych.safe_dump(['a', 'b'], StringIO.new) # => # + # + # # Dump an array with indentation set + # Psych.safe_dump(['a', ['b']], indentation: 3) # => "---\n- a\n- - b\n" + # + # # Dump an array to an IO with indentation set + # Psych.safe_dump(['a', ['b']], StringIO.new, indentation: 3) + def self.safe_dump o, io = nil, options = {} + if Hash === io + options = io + io = nil + end + + visitor = Psych::Visitors::RestrictedYAMLTree.create options + visitor << o + visitor.tree.yaml io, options + end + ### # Dump a list of objects as separate documents to a document stream. # @@ -551,18 +623,13 @@ def self.to_json object # end # list # => ['foo', 'bar'] # - def self.load_stream yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback: [] - if legacy_filename != NOT_GIVEN - warn_with_uplevel 'Passing filename with the 2nd argument of Psych.load_stream is deprecated. Use keyword argument like Psych.load_stream(yaml, filename: ...) instead.', uplevel: 1 if $VERBOSE - filename = legacy_filename - end - + def self.load_stream yaml, filename: nil, fallback: [], **kwargs result = if block_given? parse_stream(yaml, filename: filename) do |node| - yield node.to_ruby + yield node.to_ruby(**kwargs) end else - parse_stream(yaml, filename: filename).children.map(&:to_ruby) + parse_stream(yaml, filename: filename).children.map { |node| node.to_ruby(**kwargs) } end return fallback if result.is_a?(Array) && result.empty? @@ -573,49 +640,59 @@ def self.load_stream yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback: # Load the document contained in +filename+. Returns the yaml contained in # +filename+ as a Ruby object, or if the file is empty, it returns # the specified +fallback+ return value, which defaults to +false+. - def self.load_file filename, fallback: false + # + # NOTE: This method *should not* be used to parse untrusted documents, such as + # YAML documents that are supplied via user input. Instead, please use the + # safe_load_file method. + def self.unsafe_load_file filename, **kwargs File.open(filename, 'r:bom|utf-8') { |f| - self.load f, filename: filename, fallback: fallback + self.unsafe_load f, filename: filename, **kwargs + } + end + + ### + # Safely loads the document contained in +filename+. Returns the yaml contained in + # +filename+ as a Ruby object, or if the file is empty, it returns + # the specified +fallback+ return value, which defaults to +false+. + # See safe_load for options. + def self.safe_load_file filename, **kwargs + File.open(filename, 'r:bom|utf-8') { |f| + self.safe_load f, filename: filename, **kwargs + } + end + + ### + # Loads the document contained in +filename+. Returns the yaml contained in + # +filename+ as a Ruby object, or if the file is empty, it returns + # the specified +fallback+ return value, which defaults to +false+. + # See load for options. + def self.load_file filename, **kwargs + File.open(filename, 'r:bom|utf-8') { |f| + self.load f, filename: filename, **kwargs } end # :stopdoc: - @domain_types = {} def self.add_domain_type domain, type_tag, &block key = ['tag', domain, type_tag].join ':' - @domain_types[key] = [key, block] - @domain_types["tag:#{type_tag}"] = [key, block] + domain_types[key] = [key, block] + domain_types["tag:#{type_tag}"] = [key, block] end def self.add_builtin_type type_tag, &block domain = 'yaml.org,2002' key = ['tag', domain, type_tag].join ':' - @domain_types[key] = [key, block] + domain_types[key] = [key, block] end def self.remove_type type_tag - @domain_types.delete type_tag + domain_types.delete type_tag end - @load_tags = {} - @dump_tags = {} def self.add_tag tag, klass - @load_tags[tag] = klass.name - @dump_tags[klass] = tag - end - - def self.symbolize_names!(result) - case result - when Hash - result.keys.each do |key| - result[key.to_sym] = symbolize_names!(result.delete(key)) - end - when Array - result.map! { |r| symbolize_names!(r) } - end - result + load_tags[tag] = klass.name + dump_tags[klass] = tag end - private_class_method :symbolize_names! # Workaround for emulating `warn '...', uplevel: 1` in Ruby 2.4 or lower. def self.warn_with_uplevel(message, uplevel: 1) @@ -633,9 +710,32 @@ def self.parse_caller(at) private_class_method :warn_with_uplevel, :parse_caller class << self - attr_accessor :load_tags - attr_accessor :dump_tags - attr_accessor :domain_types + if defined?(Ractor) + require 'forwardable' + extend Forwardable + + class Config + attr_accessor :load_tags, :dump_tags, :domain_types + def initialize + @load_tags = {} + @dump_tags = {} + @domain_types = {} + end + end + + def config + Ractor.current[:PsychConfig] ||= Config.new + end + + def_delegators :config, :load_tags, :dump_tags, :domain_types, :load_tags=, :dump_tags=, :domain_types= + else + attr_accessor :load_tags + attr_accessor :dump_tags + attr_accessor :domain_types + end end + self.load_tags = {} + self.dump_tags = {} + self.domain_types = {} # :startdoc: end diff --git a/ruby/ext/psych/lib/psych/class_loader.rb b/ruby/ext/psych/lib/psych/class_loader.rb index cfca86845..c2e4ea4c9 100644 --- a/ruby/ext/psych/lib/psych/class_loader.rb +++ b/ruby/ext/psych/lib/psych/class_loader.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'psych/omap' -require 'psych/set' +require_relative 'omap' +require_relative 'set' module Psych class ClassLoader # :nodoc: @@ -35,9 +35,11 @@ def symbolize sym constants.each do |const| konst = const_get const - define_method(const.to_s.downcase) do - load konst - end + class_eval <<~RUBY + def #{const.to_s.downcase} + load #{konst.inspect} + end + RUBY end private @@ -69,7 +71,7 @@ def resolve klassname rescue nil end - }.compact] + }.compact].freeze class Restricted < ClassLoader def initialize classes, symbols @@ -84,7 +86,7 @@ def symbolize sym if @symbols.include? sym super else - raise DisallowedClass, 'Symbol' + raise DisallowedClass.new('load', 'Symbol') end end @@ -94,7 +96,7 @@ def find klassname if @classes.include? klassname super else - raise DisallowedClass, klassname + raise DisallowedClass.new('load', klassname) end end end diff --git a/ruby/ext/psych/lib/psych/core_ext.rb b/ruby/ext/psych/lib/psych/core_ext.rb index 81055cc50..0721a133c 100644 --- a/ruby/ext/psych/lib/psych/core_ext.rb +++ b/ruby/ext/psych/lib/psych/core_ext.rb @@ -15,5 +15,5 @@ def to_yaml options = {} end if defined?(::IRB) - require 'psych/y' + require_relative 'y' end diff --git a/ruby/ext/psych/lib/psych/exception.rb b/ruby/ext/psych/lib/psych/exception.rb index fac0c42b9..f473b95a3 100644 --- a/ruby/ext/psych/lib/psych/exception.rb +++ b/ruby/ext/psych/lib/psych/exception.rb @@ -7,8 +7,8 @@ class BadAlias < Exception end class DisallowedClass < Exception - def initialize klass_name - super "Tried to load unspecified class: #{klass_name}" + def initialize action, klass_name + super "Tried to #{action} unspecified class: #{klass_name}" end end end diff --git a/ruby/ext/psych/lib/psych/handler.rb b/ruby/ext/psych/lib/psych/handler.rb index 8f23e366f..ad7249ff7 100644 --- a/ruby/ext/psych/lib/psych/handler.rb +++ b/ruby/ext/psych/lib/psych/handler.rb @@ -119,7 +119,7 @@ def alias anchor # +tag+ is an associated tag or nil # +plain+ is a boolean value # +quoted+ is a boolean value - # +style+ is an integer idicating the string style + # +style+ is an integer indicating the string style # # See the constants in Psych::Nodes::Scalar for the possible values of # +style+ diff --git a/ruby/ext/psych/lib/psych/handlers/document_stream.rb b/ruby/ext/psych/lib/psych/handlers/document_stream.rb index 67da79409..b77115d07 100644 --- a/ruby/ext/psych/lib/psych/handlers/document_stream.rb +++ b/ruby/ext/psych/lib/psych/handlers/document_stream.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'psych/tree_builder' +require_relative '../tree_builder' module Psych module Handlers diff --git a/ruby/ext/psych/lib/psych/handlers/recorder.rb b/ruby/ext/psych/lib/psych/handlers/recorder.rb index a8fc7b114..c98724cb7 100644 --- a/ruby/ext/psych/lib/psych/handlers/recorder.rb +++ b/ruby/ext/psych/lib/psych/handlers/recorder.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'psych/handler' +require_relative '../handler' module Psych module Handlers diff --git a/ruby/ext/psych/lib/psych/json/stream.rb b/ruby/ext/psych/lib/psych/json/stream.rb index 2ebd3d7a6..24dd4b9ba 100644 --- a/ruby/ext/psych/lib/psych/json/stream.rb +++ b/ruby/ext/psych/lib/psych/json/stream.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'psych/json/ruby_events' -require 'psych/json/yaml_events' +require_relative 'ruby_events' +require_relative 'yaml_events' module Psych module JSON diff --git a/ruby/ext/psych/lib/psych/json/tree_builder.rb b/ruby/ext/psych/lib/psych/json/tree_builder.rb index 5c2ee8ca2..9a45f6b94 100644 --- a/ruby/ext/psych/lib/psych/json/tree_builder.rb +++ b/ruby/ext/psych/lib/psych/json/tree_builder.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'psych/json/yaml_events' +require_relative 'yaml_events' module Psych module JSON diff --git a/ruby/ext/psych/lib/psych/nodes.rb b/ruby/ext/psych/lib/psych/nodes.rb index 5842c2e3e..2fa52e005 100644 --- a/ruby/ext/psych/lib/psych/nodes.rb +++ b/ruby/ext/psych/lib/psych/nodes.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'psych/nodes/node' -require 'psych/nodes/stream' -require 'psych/nodes/document' -require 'psych/nodes/sequence' -require 'psych/nodes/scalar' -require 'psych/nodes/mapping' -require 'psych/nodes/alias' +require_relative 'nodes/node' +require_relative 'nodes/stream' +require_relative 'nodes/document' +require_relative 'nodes/sequence' +require_relative 'nodes/scalar' +require_relative 'nodes/mapping' +require_relative 'nodes/alias' module Psych ### diff --git a/ruby/ext/psych/lib/psych/nodes/node.rb b/ruby/ext/psych/lib/psych/nodes/node.rb index f59fb8916..1f841625c 100644 --- a/ruby/ext/psych/lib/psych/nodes/node.rb +++ b/ruby/ext/psych/lib/psych/nodes/node.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'stringio' -require 'psych/class_loader' -require 'psych/scalar_scanner' +require_relative '../class_loader' +require_relative '../scalar_scanner' module Psych module Nodes @@ -46,8 +46,8 @@ def each &block # Convert this node to Ruby. # # See also Psych::Visitors::ToRuby - def to_ruby - Visitors::ToRuby.create.accept(self) + def to_ruby(symbolize_names: false, freeze: false) + Visitors::ToRuby.create(symbolize_names: symbolize_names, freeze: freeze).accept(self) end alias :transform :to_ruby diff --git a/ruby/ext/psych/lib/psych/nodes/scalar.rb b/ruby/ext/psych/lib/psych/nodes/scalar.rb index e2616b6a8..5550b616a 100644 --- a/ruby/ext/psych/lib/psych/nodes/scalar.rb +++ b/ruby/ext/psych/lib/psych/nodes/scalar.rb @@ -50,7 +50,7 @@ class Scalar < Psych::Nodes::Node # +tag+ is an associated tag or nil # +plain+ is a boolean value # +quoted+ is a boolean value - # +style+ is an integer idicating the string style + # +style+ is an integer indicating the string style # # == See Also # diff --git a/ruby/ext/psych/lib/psych/scalar_scanner.rb b/ruby/ext/psych/lib/psych/scalar_scanner.rb index cea2a453d..b66ff9938 100644 --- a/ruby/ext/psych/lib/psych/scalar_scanner.rb +++ b/ruby/ext/psych/lib/psych/scalar_scanner.rb @@ -9,15 +9,14 @@ class ScalarScanner TIME = /^-?\d{4}-\d{1,2}-\d{1,2}(?:[Tt]|\s+)\d{1,2}:\d\d:\d\d(?:\.\d*)?(?:\s*(?:Z|[-+]\d{1,2}:?(?:\d\d)?))?$/ # Taken from http://yaml.org/type/float.html - FLOAT = /^(?:[-+]?([0-9][0-9_,]*)?\.[0-9]*([eE][-+][0-9]+)?(?# base 10) - |[-+]?\.(inf|Inf|INF)(?# infinity) - |\.(nan|NaN|NAN)(?# not a number))$/x + # Base 60, [-+]inf and NaN are handled separately + FLOAT = /^(?:[-+]?([0-9][0-9_,]*)?\.[0-9]*([eE][-+][0-9]+)?(?# base 10))$/x # Taken from http://yaml.org/type/int.html - INTEGER = /^(?:[-+]?0b[0-1_,]+ (?# base 2) - |[-+]?0[0-7_,]+ (?# base 8) - |[-+]?(?:0|[1-9][0-9_,]*) (?# base 10) - |[-+]?0x[0-9a-fA-F_,]+ (?# base 16))$/x + INTEGER = /^(?:[-+]?0b[0-1_,]+ (?# base 2) + |[-+]?0[0-7_,]+ (?# base 8) + |[-+]?(?:0|[1-9](?:[0-9]|,[0-9]|_[0-9])*) (?# base 10) + |[-+]?0x[0-9a-fA-F_,]+ (?# base 16))$/x attr_reader :class_loader @@ -34,7 +33,7 @@ def tokenize string # Check for a String type, being careful not to get caught by hash keys, hex values, and # special floats (e.g., -.inf). - if string.match?(/^[^\d\.:-]?[A-Za-z_\s!@#\$%\^&\*\(\)\{\}\<\>\|\/\\~;=]+/) || string.match?(/\n/) + if string.match?(%r{^[^\d.:-]?[[:alpha:]_\s!@#$%\^&*(){}<>|/\\~;=]+}) || string.match?(/\n/) return string if string.length > 5 if string.match?(/^[^ytonf~]/i) @@ -61,7 +60,7 @@ def tokenize string rescue ArgumentError string end - elsif string.match?(/^\.inf$/i) + elsif string.match?(/^\+?\.inf$/i) Float::INFINITY elsif string.match?(/^-\.inf$/i) -Float::INFINITY @@ -101,7 +100,7 @@ def tokenize string ### # Parse and return an int from +string+ def parse_int string - Integer(string.gsub(/[,]/, '')) + Integer(string.gsub(/[,_]/, '')) end ### diff --git a/ruby/ext/psych/lib/psych/syntax_error.rb b/ruby/ext/psych/lib/psych/syntax_error.rb index 1598e6ff3..a4c9c4a37 100644 --- a/ruby/ext/psych/lib/psych/syntax_error.rb +++ b/ruby/ext/psych/lib/psych/syntax_error.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'psych/exception' +require_relative 'exception' module Psych class SyntaxError < Psych::Exception diff --git a/ruby/ext/psych/lib/psych/tree_builder.rb b/ruby/ext/psych/lib/psych/tree_builder.rb index 47a169564..414ca02bf 100644 --- a/ruby/ext/psych/lib/psych/tree_builder.rb +++ b/ruby/ext/psych/lib/psych/tree_builder.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'psych/handler' +require_relative 'handler' module Psych ### diff --git a/ruby/ext/psych/lib/psych/versions.rb b/ruby/ext/psych/lib/psych/versions.rb index 731ba9545..3cfd59e75 100644 --- a/ruby/ext/psych/lib/psych/versions.rb +++ b/ruby/ext/psych/lib/psych/versions.rb @@ -1,10 +1,10 @@ - # frozen_string_literal: true + module Psych # The version of Psych you are using - VERSION = '3.1.0' unless defined?(::Psych::VERSION) + VERSION = '4.0.3' if RUBY_ENGINE == 'jruby' - DEFAULT_SNAKEYAML_VERSION = '1.23'.freeze + DEFAULT_SNAKEYAML_VERSION = '1.28'.freeze end end diff --git a/ruby/ext/psych/lib/psych/visitors.rb b/ruby/ext/psych/lib/psych/visitors.rb index e2b084dae..508290d86 100644 --- a/ruby/ext/psych/lib/psych/visitors.rb +++ b/ruby/ext/psych/lib/psych/visitors.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'psych/visitors/visitor' -require 'psych/visitors/to_ruby' -require 'psych/visitors/emitter' -require 'psych/visitors/yaml_tree' -require 'psych/visitors/json_tree' -require 'psych/visitors/depth_first' +require_relative 'visitors/visitor' +require_relative 'visitors/to_ruby' +require_relative 'visitors/emitter' +require_relative 'visitors/yaml_tree' +require_relative 'visitors/json_tree' +require_relative 'visitors/depth_first' diff --git a/ruby/ext/psych/lib/psych/visitors/json_tree.rb b/ruby/ext/psych/lib/psych/visitors/json_tree.rb index 9912cb136..979fc100b 100644 --- a/ruby/ext/psych/lib/psych/visitors/json_tree.rb +++ b/ruby/ext/psych/lib/psych/visitors/json_tree.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'psych/json/ruby_events' +require_relative '../json/ruby_events' module Psych module Visitors diff --git a/ruby/ext/psych/lib/psych/visitors/to_ruby.rb b/ruby/ext/psych/lib/psych/visitors/to_ruby.rb index b72fb4a1d..4c1f56107 100644 --- a/ruby/ext/psych/lib/psych/visitors/to_ruby.rb +++ b/ruby/ext/psych/lib/psych/visitors/to_ruby.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'psych/scalar_scanner' -require 'psych/class_loader' -require 'psych/exception' +require_relative '../scalar_scanner' +require_relative '../class_loader' +require_relative '../exception' unless defined?(Regexp::NOENCODING) Regexp::NOENCODING = 32 @@ -12,39 +12,44 @@ module Visitors ### # This class walks a YAML AST, converting each node to Ruby class ToRuby < Psych::Visitors::Visitor - def self.create + def self.create(symbolize_names: false, freeze: false) class_loader = ClassLoader.new scanner = ScalarScanner.new class_loader - new(scanner, class_loader) + new(scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze) end attr_reader :class_loader - def initialize ss, class_loader + def initialize ss, class_loader, symbolize_names: false, freeze: false super() @st = {} @ss = ss + @load_tags = Psych.load_tags @domain_types = Psych.domain_types @class_loader = class_loader + @symbolize_names = symbolize_names + @freeze = freeze end def accept target result = super - return result if @domain_types.empty? || !target.tag - key = target.tag.sub(/^[!\/]*/, '').sub(/(,\d+)\//, '\1:') - key = "tag:#{key}" unless key =~ /^(?:tag:|x-private)/ + unless @domain_types.empty? || !target.tag + key = target.tag.sub(/^[!\/]*/, '').sub(/(,\d+)\//, '\1:') + key = "tag:#{key}" unless key =~ /^(?:tag:|x-private)/ - if @domain_types.key? key - value, block = @domain_types[key] - return block.call value, result + if @domain_types.key? key + value, block = @domain_types[key] + result = block.call value, result + end end + result = deduplicate(result).freeze if @freeze result end def deserialize o - if klass = resolve_class(Psych.load_tags[o.tag]) + if klass = resolve_class(@load_tags[o.tag]) instance = klass.allocate if instance.respond_to?(:init_with) @@ -124,7 +129,7 @@ def visit_Psych_Nodes_Scalar o end def visit_Psych_Nodes_Sequence o - if klass = resolve_class(Psych.load_tags[o.tag]) + if klass = resolve_class(@load_tags[o.tag]) instance = klass.allocate if instance.respond_to?(:init_with) @@ -156,8 +161,8 @@ def visit_Psych_Nodes_Sequence o end def visit_Psych_Nodes_Mapping o - if Psych.load_tags[o.tag] - return revive(resolve_class(Psych.load_tags[o.tag]), o) + if @load_tags[o.tag] + return revive(resolve_class(@load_tags[o.tag]), o) end return revive_hash(register(o, {}), o) unless o.tag @@ -322,6 +327,7 @@ def visit_Psych_Nodes_Alias o end private + def register node, object @st[node.anchor] = object if node.anchor object @@ -333,13 +339,12 @@ def register_empty object list end - SHOVEL = '<<' - def revive_hash hash, o + def revive_hash hash, o, tagged= false o.children.each_slice(2) { |k,v| - key = deduplicate(accept(k)) + key = accept(k) val = accept(v) - if key == SHOVEL && k.tag != "tag:yaml.org,2002:str" + if key == '<<' && k.tag != "tag:yaml.org,2002:str" case v when Nodes::Alias, Nodes::Mapping begin @@ -361,6 +366,12 @@ def revive_hash hash, o hash[key] = val end else + if !tagged && @symbolize_names && key.is_a?(String) + key = key.to_sym + elsif !@freeze + key = deduplicate(key) + end + hash[key] = val end @@ -371,6 +382,8 @@ def revive_hash hash, o if RUBY_VERSION < '2.7' def deduplicate key if key.is_a?(String) + # It is important to untaint the string, otherwise it won't + # be deduplicated into an fstring, but simply frozen. -(key.untaint) else key @@ -391,7 +404,7 @@ def merge_key hash, key, val def revive klass, node s = register(node, klass.allocate) - init_with(s, revive_hash({}, node), node) + init_with(s, revive_hash({}, node, true), node) end def init_with o, h, node diff --git a/ruby/ext/psych/lib/psych/visitors/visitor.rb b/ruby/ext/psych/lib/psych/visitors/visitor.rb index 3f4ba64e5..21052aa66 100644 --- a/ruby/ext/psych/lib/psych/visitors/visitor.rb +++ b/ruby/ext/psych/lib/psych/visitors/visitor.rb @@ -8,12 +8,26 @@ def accept target private - DISPATCH = Hash.new do |hash, klass| - hash[klass] = "visit_#{klass.name.gsub('::', '_')}" + # @api private + def self.dispatch_cache + Hash.new do |hash, klass| + hash[klass] = :"visit_#{klass.name.gsub('::', '_')}" + end.compare_by_identity + end + + if defined?(Ractor) + def dispatch + @dispatch_cache ||= (Ractor.current[:Psych_Visitors_Visitor] ||= Visitor.dispatch_cache) + end + else + DISPATCH = dispatch_cache + def dispatch + DISPATCH + end end def visit target - send DISPATCH[target.class], target + send dispatch[target.class], target end end end diff --git a/ruby/ext/psych/lib/psych/visitors/yaml_tree.rb b/ruby/ext/psych/lib/psych/visitors/yaml_tree.rb index 79ca129b8..316a3a949 100644 --- a/ruby/ext/psych/lib/psych/visitors/yaml_tree.rb +++ b/ruby/ext/psych/lib/psych/visitors/yaml_tree.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'psych/tree_builder' -require 'psych/scalar_scanner' -require 'psych/class_loader' +require_relative '../tree_builder' +require_relative '../scalar_scanner' +require_relative '../class_loader' module Psych module Visitors @@ -80,7 +80,7 @@ def initialize emitter, ss, options raise(TypeError, "Can't dump #{target.class}") unless method h[klass] = method - end + end.compare_by_identity end def start encoding = Nodes::Stream::UTF8 @@ -181,7 +181,7 @@ def visit_Struct o end def visit_Exception o - dump_exception o, private_iv_get(o, 'mesg') + dump_exception o, o.message.to_s end def visit_NameError o @@ -272,6 +272,8 @@ def visit_String o tag = 'tag:yaml.org,2002:str' plain = false quote = false + elsif o == 'y' || o == 'n' + style = Nodes::Scalar::DOUBLE_QUOTED elsif @line_width && o.length > @line_width style = Nodes::Scalar::FOLDED elsif o =~ /^[^[:word:]][^"]*$/ @@ -509,9 +511,9 @@ def dump_coder o def emit_coder c, o case c.type when :scalar - @emitter.scalar c.scalar, nil, c.tag, c.tag.nil?, false, Nodes::Scalar::ANY + @emitter.scalar c.scalar, nil, c.tag, c.tag.nil?, false, c.style when :seq - @emitter.start_sequence nil, c.tag, c.tag.nil?, Nodes::Sequence::BLOCK + @emitter.start_sequence nil, c.tag, c.tag.nil?, c.style c.seq.each do |thing| accept thing end @@ -535,5 +537,51 @@ def dump_ivars target end end end + + class RestrictedYAMLTree < YAMLTree + DEFAULT_PERMITTED_CLASSES = { + TrueClass => true, + FalseClass => true, + NilClass => true, + Integer => true, + Float => true, + String => true, + Array => true, + Hash => true, + }.compare_by_identity.freeze + + def initialize emitter, ss, options + super + @permitted_classes = DEFAULT_PERMITTED_CLASSES.dup + Array(options[:permitted_classes]).each do |klass| + @permitted_classes[klass] = true + end + @permitted_symbols = {}.compare_by_identity + Array(options[:permitted_symbols]).each do |symbol| + @permitted_symbols[symbol] = true + end + @aliases = options.fetch(:aliases, false) + end + + def accept target + if !@aliases && @st.key?(target) + raise BadAlias, "Tried to dump an aliased object" + end + + unless @permitted_classes[target.class] + raise DisallowedClass.new('dump', target.class.name || target.class.inspect) + end + + super + end + + def visit_Symbol sym + unless @permitted_symbols[sym] + raise DisallowedClass.new('dump', "Symbol(#{sym.inspect})") + end + + super + end + end end end diff --git a/ruby/ext/psych/psych.c b/ruby/ext/psych/psych.c index 3bb59bfc1..8af0bb6a5 100644 --- a/ruby/ext/psych/psych.c +++ b/ruby/ext/psych/psych.c @@ -11,9 +11,9 @@ static VALUE libyaml_version(VALUE module) yaml_get_version(&major, &minor, &patch); - list[0] = INT2NUM((long)major); - list[1] = INT2NUM((long)minor); - list[2] = INT2NUM((long)patch); + list[0] = INT2NUM(major); + list[1] = INT2NUM(minor); + list[2] = INT2NUM(patch); return rb_ary_new4((long)3, list); } @@ -22,6 +22,9 @@ VALUE mPsych; void Init_psych(void) { + #ifdef HAVE_RB_EXT_RACTOR_SAFE + RB_EXT_RACTOR_SAFE(true); + #endif mPsych = rb_define_module("Psych"); rb_define_singleton_method(mPsych, "libyaml_version", libyaml_version, 0); diff --git a/ruby/ext/psych/psych.gemspec b/ruby/ext/psych/psych.gemspec index e0168af7d..65dd7156c 100644 --- a/ruby/ext/psych/psych.gemspec +++ b/ruby/ext/psych/psych.gemspec @@ -1,16 +1,14 @@ # -*- encoding: utf-8 -*- # frozen_string_literal: true -begin - require_relative 'lib/psych/versions' -rescue LoadError - # for Ruby core repository - require_relative 'versions' +version_module = Module.new do + version_rb = File.join(__dir__, "lib/psych/versions.rb") + module_eval(File.read(version_rb), version_rb) end Gem::Specification.new do |s| s.name = "psych" - s.version = Psych::VERSION + s.version = version_module::Psych::VERSION s.authors = ["Aaron Patterson", "SHIBATA Hiroshi", "Charles Oliver Nutter"] s.email = ["aaron@tenderlovemaking.com", "hsbt@ruby-lang.org", "headius@headius.com"] s.summary = "Psych is a YAML parser and emitter" @@ -25,7 +23,7 @@ DESCRIPTION # for ruby core repository. It was generated by `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } s.files = [ - ".gitignore", ".travis.yml", "Gemfile", "Mavenfile", "README.md", "Rakefile", "bin/console", + ".gitignore", "Gemfile", "LICENSE", "Mavenfile", "README.md", "Rakefile", "bin/console", "bin/setup", "ext/psych/depend", "ext/psych/extconf.rb", "ext/psych/psych.c", "ext/psych/psych.h", "ext/psych/psych_emitter.c", "ext/psych/psych_emitter.h", "ext/psych/psych_parser.c", "ext/psych/psych_parser.h", "ext/psych/psych_to_ruby.c", "ext/psych/psych_to_ruby.h", "ext/psych/psych_yaml_tree.c", "ext/psych/psych_yaml_tree.h", @@ -48,7 +46,6 @@ DESCRIPTION s.extra_rdoc_files = ["README.md"] s.required_ruby_version = Gem::Requirement.new(">= 2.4.0") - s.rubygems_version = "2.5.1" s.required_rubygems_version = Gem::Requirement.new(">= 0") if RUBY_ENGINE == 'jruby' @@ -62,9 +59,11 @@ DESCRIPTION "lib/psych_jars.rb", "lib/psych.jar" ] - s.requirements = "jar org.yaml:snakeyaml, #{Psych::DEFAULT_SNAKEYAML_VERSION}" + s.requirements = "jar org.yaml:snakeyaml, #{version_module::Psych::DEFAULT_SNAKEYAML_VERSION}" s.add_dependency 'jar-dependencies', '>= 0.1.7' else s.extensions = ["ext/psych/extconf.rb"] + s.add_dependency 'stringio' end + end diff --git a/ruby/ext/psych/psych_parser.c b/ruby/ext/psych/psych_parser.c index fb1a917bb..fd550b671 100644 --- a/ruby/ext/psych/psych_parser.c +++ b/ruby/ext/psych/psych_parser.c @@ -27,7 +27,7 @@ static ID id_event_location; static int io_reader(void * data, unsigned char *buf, size_t size, size_t *read) { VALUE io = (VALUE)data; - VALUE string = rb_funcall(io, id_read, 1, INT2NUM(size)); + VALUE string = rb_funcall(io, id_read, 1, SIZET2NUM(size)); *read = 0; @@ -89,9 +89,9 @@ static VALUE make_exception(yaml_parser_t * parser, VALUE path) return rb_funcall(ePsychSyntaxError, rb_intern("new"), 6, path, - INT2NUM(line), - INT2NUM(column), - INT2NUM(parser->problem_offset), + SIZET2NUM(line), + SIZET2NUM(column), + SIZET2NUM(parser->problem_offset), parser->problem ? rb_usascii_str_new2(parser->problem) : Qnil, parser->context ? rb_usascii_str_new2(parser->context) : Qnil); } @@ -303,10 +303,10 @@ static VALUE parse(int argc, VALUE *argv, VALUE self) rb_exc_raise(exception); } - start_line = INT2NUM((long)event.start_mark.line); - start_column = INT2NUM((long)event.start_mark.column); - end_line = INT2NUM((long)event.end_mark.line); - end_column = INT2NUM((long)event.end_mark.column); + start_line = SIZET2NUM(event.start_mark.line); + start_column = SIZET2NUM(event.start_mark.column); + end_line = SIZET2NUM(event.end_mark.line); + end_column = SIZET2NUM(event.end_mark.column); event_args[0] = handler; event_args[1] = start_line; @@ -321,7 +321,7 @@ static VALUE parse(int argc, VALUE *argv, VALUE self) VALUE args[2]; args[0] = handler; - args[1] = INT2NUM((long)event.data.stream_start.encoding); + args[1] = INT2NUM(event.data.stream_start.encoding); rb_protect(protected_start_stream, (VALUE)args, &state); } break; @@ -334,8 +334,8 @@ static VALUE parse(int argc, VALUE *argv, VALUE self) VALUE version = event.data.document_start.version_directive ? rb_ary_new3( (long)2, - INT2NUM((long)event.data.document_start.version_directive->major), - INT2NUM((long)event.data.document_start.version_directive->minor) + INT2NUM(event.data.document_start.version_directive->major), + INT2NUM(event.data.document_start.version_directive->minor) ) : rb_ary_new(); if(event.data.document_start.tag_directives.start) { @@ -418,7 +418,7 @@ static VALUE parse(int argc, VALUE *argv, VALUE self) quoted_implicit = event.data.scalar.quoted_implicit == 0 ? Qfalse : Qtrue; - style = INT2NUM((long)event.data.scalar.style); + style = INT2NUM(event.data.scalar.style); args[0] = handler; args[1] = val; @@ -450,7 +450,7 @@ static VALUE parse(int argc, VALUE *argv, VALUE self) implicit = event.data.sequence_start.implicit == 0 ? Qfalse : Qtrue; - style = INT2NUM((long)event.data.sequence_start.style); + style = INT2NUM(event.data.sequence_start.style); args[0] = handler; args[1] = anchor; @@ -483,7 +483,7 @@ static VALUE parse(int argc, VALUE *argv, VALUE self) implicit = event.data.mapping_start.implicit == 0 ? Qfalse : Qtrue; - style = INT2NUM((long)event.data.mapping_start.style); + style = INT2NUM(event.data.mapping_start.style); args[0] = handler; args[1] = anchor; @@ -527,9 +527,9 @@ static VALUE mark(VALUE self) TypedData_Get_Struct(self, yaml_parser_t, &psych_parser_type, parser); mark_klass = rb_const_get_at(cPsychParser, rb_intern("Mark")); - args[0] = INT2NUM(parser->mark.index); - args[1] = INT2NUM(parser->mark.line); - args[2] = INT2NUM(parser->mark.column); + args[0] = SIZET2NUM(parser->mark.index); + args[1] = SIZET2NUM(parser->mark.line); + args[2] = SIZET2NUM(parser->mark.column); return rb_class_new_instance(3, args, mark_klass); } diff --git a/ruby/ext/psych/psych_yaml_tree.c b/ruby/ext/psych/psych_yaml_tree.c index 7aca9114c..225655d12 100644 --- a/ruby/ext/psych/psych_yaml_tree.c +++ b/ruby/ext/psych/psych_yaml_tree.c @@ -2,23 +2,11 @@ VALUE cPsychVisitorsYamlTree; -/* - * call-seq: private_iv_get(target, prop) - * - * Get the private instance variable +prop+ from +target+ - */ -static VALUE private_iv_get(VALUE self, VALUE target, VALUE prop) -{ - return rb_attr_get(target, rb_intern(StringValueCStr(prop))); -} - void Init_psych_yaml_tree(void) { VALUE psych = rb_define_module("Psych"); VALUE visitors = rb_define_module_under(psych, "Visitors"); VALUE visitor = rb_define_class_under(visitors, "Visitor", rb_cObject); cPsychVisitorsYamlTree = rb_define_class_under(visitors, "YAMLTree", visitor); - - rb_define_private_method(cPsychVisitorsYamlTree, "private_iv_get", private_iv_get, 2); } /* vim: set noet sws=4 sw=4: */ diff --git a/ruby/ext/psych/yaml/api.c b/ruby/ext/psych/yaml/api.c index 95dc6b4de..6add8b266 100644 --- a/ruby/ext/psych/yaml/api.c +++ b/ruby/ext/psych/yaml/api.c @@ -118,7 +118,12 @@ yaml_string_join( YAML_DECLARE(int) yaml_stack_extend(void **start, void **top, void **end) { - void *new_start = yaml_realloc(*start, ((char *)*end - (char *)*start)*2); + void *new_start; + + if ((char *)*end - (char *)*start >= INT_MAX / 2) + return 0; + + new_start = yaml_realloc(*start, ((char *)*end - (char *)*start)*2); if (!new_start) return 0; @@ -618,10 +623,10 @@ yaml_token_delete(yaml_token_t *token) */ static int -yaml_check_utf8(yaml_char_t *start, size_t length) +yaml_check_utf8(const yaml_char_t *start, size_t length) { - yaml_char_t *end = start+length; - yaml_char_t *pointer = start; + const yaml_char_t *end = start+length; + const yaml_char_t *pointer = start; while (pointer < end) { unsigned char octet; @@ -789,7 +794,7 @@ yaml_document_end_event_initialize(yaml_event_t *event, int implicit) */ YAML_DECLARE(int) -yaml_alias_event_initialize(yaml_event_t *event, yaml_char_t *anchor) +yaml_alias_event_initialize(yaml_event_t *event, const yaml_char_t *anchor) { yaml_mark_t mark = { 0, 0, 0 }; yaml_char_t *anchor_copy = NULL; @@ -814,8 +819,8 @@ yaml_alias_event_initialize(yaml_event_t *event, yaml_char_t *anchor) YAML_DECLARE(int) yaml_scalar_event_initialize(yaml_event_t *event, - yaml_char_t *anchor, yaml_char_t *tag, - yaml_char_t *value, int length, + const yaml_char_t *anchor, const yaml_char_t *tag, + const yaml_char_t *value, int length, int plain_implicit, int quoted_implicit, yaml_scalar_style_t style) { @@ -868,7 +873,7 @@ yaml_scalar_event_initialize(yaml_event_t *event, YAML_DECLARE(int) yaml_sequence_start_event_initialize(yaml_event_t *event, - yaml_char_t *anchor, yaml_char_t *tag, int implicit, + const yaml_char_t *anchor, const yaml_char_t *tag, int implicit, yaml_sequence_style_t style) { yaml_mark_t mark = { 0, 0, 0 }; @@ -923,7 +928,7 @@ yaml_sequence_end_event_initialize(yaml_event_t *event) YAML_DECLARE(int) yaml_mapping_start_event_initialize(yaml_event_t *event, - yaml_char_t *anchor, yaml_char_t *tag, int implicit, + const yaml_char_t *anchor, const yaml_char_t *tag, int implicit, yaml_mapping_style_t style) { yaml_mark_t mark = { 0, 0, 0 }; @@ -1117,15 +1122,8 @@ yaml_document_initialize(yaml_document_t *document, YAML_DECLARE(void) yaml_document_delete(yaml_document_t *document) { - struct { - yaml_error_type_t error; - } context; yaml_tag_directive_t *tag_directive; - /* Eliminate a compliler warning. */ - context.error = YAML_NO_ERROR; - (void)context.error; - assert(document); /* Non-NULL document object is expected. */ while (!STACK_EMPTY(&context, document->nodes)) { @@ -1195,7 +1193,7 @@ yaml_document_get_root_node(yaml_document_t *document) YAML_DECLARE(int) yaml_document_add_scalar(yaml_document_t *document, - yaml_char_t *tag, yaml_char_t *value, int length, + const yaml_char_t *tag, const yaml_char_t *value, int length, yaml_scalar_style_t style) { struct { @@ -1245,7 +1243,7 @@ yaml_document_add_scalar(yaml_document_t *document, YAML_DECLARE(int) yaml_document_add_sequence(yaml_document_t *document, - yaml_char_t *tag, yaml_sequence_style_t style) + const yaml_char_t *tag, yaml_sequence_style_t style) { struct { yaml_error_type_t error; @@ -1290,7 +1288,7 @@ yaml_document_add_sequence(yaml_document_t *document, YAML_DECLARE(int) yaml_document_add_mapping(yaml_document_t *document, - yaml_char_t *tag, yaml_mapping_style_t style) + const yaml_char_t *tag, yaml_mapping_style_t style) { struct { yaml_error_type_t error; diff --git a/ruby/ext/psych/yaml/config.h b/ruby/ext/psych/yaml/config.h index da905133f..4b1150f5e 100644 --- a/ruby/ext/psych/yaml/config.h +++ b/ruby/ext/psych/yaml/config.h @@ -1,10 +1,80 @@ +/* include/config.h. Generated from config.h.in by configure. */ +/* include/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "yaml" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "https://github.com/yaml/libyaml/issues/new" + +/* Define to the full name of this package. */ #define PACKAGE_NAME "yaml" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "yaml 0.2.5" + +/* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "yaml" -#define PACKAGE_VERSION "0.2.1" -#define PACKAGE_STRING "yaml 0.2.1" -#define PACKAGE_BUGREPORT "https://github.com/yaml/libyaml/issues" -#define PACKAGE_URL "https://github.com/yaml/libyaml" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "0.2.5" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "0.2.5" + +/* Define the major version number. */ #define YAML_VERSION_MAJOR 0 + +/* Define the minor version number. */ #define YAML_VERSION_MINOR 2 -#define YAML_VERSION_PATCH 1 -#define YAML_VERSION_STRING "0.2.1" + +/* Define the patch version number. */ +#define YAML_VERSION_PATCH 5 + +/* Define the version string. */ +#define YAML_VERSION_STRING "0.2.5" + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ diff --git a/ruby/ext/psych/yaml/dumper.c b/ruby/ext/psych/yaml/dumper.c index 29fb9c078..1fe940b67 100644 --- a/ruby/ext/psych/yaml/dumper.c +++ b/ruby/ext/psych/yaml/dumper.c @@ -131,7 +131,7 @@ yaml_emitter_dump(yaml_emitter_t *emitter, yaml_document_t *document) assert(emitter->opened); /* Emitter should be opened. */ - emitter->anchors = yaml_malloc(sizeof(*(emitter->anchors)) + emitter->anchors = (yaml_anchors_t*)yaml_malloc(sizeof(*(emitter->anchors)) * (document->nodes.top - document->nodes.start)); if (!emitter->anchors) goto error; memset(emitter->anchors, 0, sizeof(*(emitter->anchors)) diff --git a/ruby/ext/psych/yaml/emitter.c b/ruby/ext/psych/yaml/emitter.c index 92e21cdb7..796294ccd 100644 --- a/ruby/ext/psych/yaml/emitter.c +++ b/ruby/ext/psych/yaml/emitter.c @@ -16,7 +16,7 @@ #define PUT(emitter,value) \ (FLUSH(emitter) \ && (*(emitter->buffer.pointer++) = (yaml_char_t)(value), \ - emitter->column ++, \ + emitter->column++, \ 1)) /* @@ -495,6 +495,7 @@ static int yaml_emitter_emit_stream_start(yaml_emitter_t *emitter, yaml_event_t *event) { + emitter->open_ended = 0; if (event->type == YAML_STREAM_START_EVENT) { if (!emitter->encoding) { @@ -597,13 +598,20 @@ yaml_emitter_emit_document_start(yaml_emitter_t *emitter, if (!yaml_emitter_write_indent(emitter)) return 0; } + emitter->open_ended = 0; if (event->data.document_start.version_directive) { implicit = 0; if (!yaml_emitter_write_indicator(emitter, "%YAML", 1, 0, 0)) return 0; - if (!yaml_emitter_write_indicator(emitter, "1.1", 1, 0, 0)) - return 0; + if (event->data.document_start.version_directive->minor == 1) { + if (!yaml_emitter_write_indicator(emitter, "1.1", 1, 0, 0)) + return 0; + } + else { + if (!yaml_emitter_write_indicator(emitter, "1.2", 1, 0, 0)) + return 0; + } if (!yaml_emitter_write_indent(emitter)) return 0; } @@ -644,19 +652,25 @@ yaml_emitter_emit_document_start(yaml_emitter_t *emitter, emitter->state = YAML_EMIT_DOCUMENT_CONTENT_STATE; + emitter->open_ended = 0; return 1; } else if (event->type == YAML_STREAM_END_EVENT) { - if (emitter->open_ended) + + /** + * This can happen if a block scalar with trailing empty lines + * is at the end of the stream + */ + if (emitter->open_ended == 2) { if (!yaml_emitter_write_indicator(emitter, "...", 1, 0, 0)) return 0; + emitter->open_ended = 0; if (!yaml_emitter_write_indent(emitter)) return 0; } - if (!yaml_emitter_flush(emitter)) return 0; @@ -698,9 +712,12 @@ yaml_emitter_emit_document_end(yaml_emitter_t *emitter, if (!event->data.document_end.implicit) { if (!yaml_emitter_write_indicator(emitter, "...", 1, 0, 0)) return 0; + emitter->open_ended = 0; if (!yaml_emitter_write_indent(emitter)) return 0; } + else if (!emitter->open_ended) + emitter->open_ended = 1; if (!yaml_emitter_flush(emitter)) return 0; @@ -1006,6 +1023,8 @@ yaml_emitter_emit_alias(yaml_emitter_t *emitter, SHIM(yaml_event_t *event)) { if (!yaml_emitter_process_anchor(emitter)) return 0; + if (emitter->simple_key_context) + if (!PUT(emitter, ' ')) return 0; emitter->state = POP(emitter, emitter->states); return 1; @@ -1333,7 +1352,10 @@ static int yaml_emitter_analyze_version_directive(yaml_emitter_t *emitter, yaml_version_directive_t version_directive) { - if (version_directive.major != 1 || version_directive.minor != 1) { + if (version_directive.major != 1 || ( + version_directive.minor != 1 + && version_directive.minor != 2 + )) { return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive"); } @@ -1803,7 +1825,6 @@ yaml_emitter_write_indicator(yaml_emitter_t *emitter, emitter->whitespace = is_whitespace; emitter->indention = (emitter->indention && is_indention); - emitter->open_ended = 0; return 1; } @@ -1904,7 +1925,17 @@ yaml_emitter_write_plain_scalar(yaml_emitter_t *emitter, STRING_ASSIGN(string, value, length); - if (!emitter->whitespace) { + /** + * Avoid trailing spaces for empty values in block mode. + * In flow mode, we still want the space to prevent ambiguous things + * like {a:}. + * Currently, the emitter forbids any plain empty scalar in flow mode + * (e.g. it outputs {a: ''} instead), so emitter->flow_level will + * never be true here. + * But if the emitter is ever changed to allow emitting empty values, + * the check for flow_level is already here. + */ + if (!emitter->whitespace && (length || emitter->flow_level)) { if (!PUT(emitter, ' ')) return 0; } @@ -2004,6 +2035,9 @@ yaml_emitter_write_single_quoted_scalar(yaml_emitter_t *emitter, } } + if (breaks) + if (!yaml_emitter_write_indent(emitter)) return 0; + if (!yaml_emitter_write_indicator(emitter, "'", 0, 0, 0)) return 0; @@ -2203,7 +2237,7 @@ yaml_emitter_write_block_scalar_hints(yaml_emitter_t *emitter, else if (string.start == string.pointer) { chomp_hint = "+"; - emitter->open_ended = 1; + emitter->open_ended = 2; } else { @@ -2213,7 +2247,7 @@ yaml_emitter_write_block_scalar_hints(yaml_emitter_t *emitter, if (IS_BREAK(string)) { chomp_hint = "+"; - emitter->open_ended = 1; + emitter->open_ended = 2; } } } diff --git a/ruby/ext/psych/yaml/loader.c b/ruby/ext/psych/yaml/loader.c index e5d90be9b..bcf3aee8c 100644 --- a/ruby/ext/psych/yaml/loader.c +++ b/ruby/ext/psych/yaml/loader.c @@ -37,27 +37,47 @@ yaml_parser_register_anchor(yaml_parser_t *parser, static void yaml_parser_delete_aliases(yaml_parser_t *parser); +/* + * Document loading context. + */ +struct loader_ctx { + int *start; + int *end; + int *top; +}; + /* * Composer functions. */ +static int +yaml_parser_load_nodes(yaml_parser_t *parser, struct loader_ctx *ctx); + +static int +yaml_parser_load_document(yaml_parser_t *parser, yaml_event_t *event); static int -yaml_parser_load_document(yaml_parser_t *parser, yaml_event_t *first_event); +yaml_parser_load_alias(yaml_parser_t *parser, yaml_event_t *event, + struct loader_ctx *ctx); static int -yaml_parser_load_node(yaml_parser_t *parser, yaml_event_t *first_event); +yaml_parser_load_scalar(yaml_parser_t *parser, yaml_event_t *event, + struct loader_ctx *ctx); static int -yaml_parser_load_alias(yaml_parser_t *parser, yaml_event_t *first_event); +yaml_parser_load_sequence(yaml_parser_t *parser, yaml_event_t *event, + struct loader_ctx *ctx); static int -yaml_parser_load_scalar(yaml_parser_t *parser, yaml_event_t *first_event); +yaml_parser_load_mapping(yaml_parser_t *parser, yaml_event_t *event, + struct loader_ctx *ctx); static int -yaml_parser_load_sequence(yaml_parser_t *parser, yaml_event_t *first_event); +yaml_parser_load_sequence_end(yaml_parser_t *parser, yaml_event_t *event, + struct loader_ctx *ctx); static int -yaml_parser_load_mapping(yaml_parser_t *parser, yaml_event_t *first_event); +yaml_parser_load_mapping_end(yaml_parser_t *parser, yaml_event_t *event, + struct loader_ctx *ctx); /* * Load the next document of the stream. @@ -162,59 +182,78 @@ yaml_parser_delete_aliases(yaml_parser_t *parser) */ static int -yaml_parser_load_document(yaml_parser_t *parser, yaml_event_t *first_event) +yaml_parser_load_document(yaml_parser_t *parser, yaml_event_t *event) { - yaml_event_t event; + struct loader_ctx ctx = { NULL, NULL, NULL }; - assert(first_event->type == YAML_DOCUMENT_START_EVENT); + assert(event->type == YAML_DOCUMENT_START_EVENT); /* DOCUMENT-START is expected. */ parser->document->version_directive - = first_event->data.document_start.version_directive; + = event->data.document_start.version_directive; parser->document->tag_directives.start - = first_event->data.document_start.tag_directives.start; + = event->data.document_start.tag_directives.start; parser->document->tag_directives.end - = first_event->data.document_start.tag_directives.end; + = event->data.document_start.tag_directives.end; parser->document->start_implicit - = first_event->data.document_start.implicit; - parser->document->start_mark = first_event->start_mark; - - if (!yaml_parser_parse(parser, &event)) return 0; - - if (!yaml_parser_load_node(parser, &event)) return 0; - - if (!yaml_parser_parse(parser, &event)) return 0; - assert(event.type == YAML_DOCUMENT_END_EVENT); - /* DOCUMENT-END is expected. */ + = event->data.document_start.implicit; + parser->document->start_mark = event->start_mark; - parser->document->end_implicit = event.data.document_end.implicit; - parser->document->end_mark = event.end_mark; + if (!STACK_INIT(parser, ctx, int*)) return 0; + if (!yaml_parser_load_nodes(parser, &ctx)) { + STACK_DEL(parser, ctx); + return 0; + } + STACK_DEL(parser, ctx); return 1; } /* - * Compose a node. + * Compose a node tree. */ static int -yaml_parser_load_node(yaml_parser_t *parser, yaml_event_t *first_event) +yaml_parser_load_nodes(yaml_parser_t *parser, struct loader_ctx *ctx) { - switch (first_event->type) { - case YAML_ALIAS_EVENT: - return yaml_parser_load_alias(parser, first_event); - case YAML_SCALAR_EVENT: - return yaml_parser_load_scalar(parser, first_event); - case YAML_SEQUENCE_START_EVENT: - return yaml_parser_load_sequence(parser, first_event); - case YAML_MAPPING_START_EVENT: - return yaml_parser_load_mapping(parser, first_event); - default: - assert(0); /* Could not happen. */ - return 0; - } + yaml_event_t event; - return 0; + do { + if (!yaml_parser_parse(parser, &event)) return 0; + + switch (event.type) { + case YAML_ALIAS_EVENT: + if (!yaml_parser_load_alias(parser, &event, ctx)) return 0; + break; + case YAML_SCALAR_EVENT: + if (!yaml_parser_load_scalar(parser, &event, ctx)) return 0; + break; + case YAML_SEQUENCE_START_EVENT: + if (!yaml_parser_load_sequence(parser, &event, ctx)) return 0; + break; + case YAML_SEQUENCE_END_EVENT: + if (!yaml_parser_load_sequence_end(parser, &event, ctx)) + return 0; + break; + case YAML_MAPPING_START_EVENT: + if (!yaml_parser_load_mapping(parser, &event, ctx)) return 0; + break; + case YAML_MAPPING_END_EVENT: + if (!yaml_parser_load_mapping_end(parser, &event, ctx)) + return 0; + break; + default: + assert(0); /* Could not happen. */ + return 0; + case YAML_DOCUMENT_END_EVENT: + break; + } + } while (event.type != YAML_DOCUMENT_END_EVENT); + + parser->document->end_implicit = event.data.document_end.implicit; + parser->document->end_mark = event.end_mark; + + return 1; } /* @@ -252,27 +291,80 @@ yaml_parser_register_anchor(yaml_parser_t *parser, return 1; } +/* + * Compose node into its parent in the stree. + */ + +static int +yaml_parser_load_node_add(yaml_parser_t *parser, struct loader_ctx *ctx, + int index) +{ + struct yaml_node_s *parent; + int parent_index; + + if (STACK_EMPTY(parser, *ctx)) { + /* This is the root node, there's no tree to add it to. */ + return 1; + } + + parent_index = *((*ctx).top - 1); + parent = &parser->document->nodes.start[parent_index-1]; + + switch (parent->type) { + case YAML_SEQUENCE_NODE: + if (!STACK_LIMIT(parser, parent->data.sequence.items, INT_MAX-1)) + return 0; + if (!PUSH(parser, parent->data.sequence.items, index)) + return 0; + break; + case YAML_MAPPING_NODE: { + yaml_node_pair_t pair; + if (!STACK_EMPTY(parser, parent->data.mapping.pairs)) { + yaml_node_pair_t *p = parent->data.mapping.pairs.top - 1; + if (p->key != 0 && p->value == 0) { + p->value = index; + break; + } + } + + pair.key = index; + pair.value = 0; + if (!STACK_LIMIT(parser, parent->data.mapping.pairs, INT_MAX-1)) + return 0; + if (!PUSH(parser, parent->data.mapping.pairs, pair)) + return 0; + + break; + } + default: + assert(0); /* Could not happen. */ + return 0; + } + return 1; +} + /* * Compose a node corresponding to an alias. */ static int -yaml_parser_load_alias(yaml_parser_t *parser, yaml_event_t *first_event) +yaml_parser_load_alias(yaml_parser_t *parser, yaml_event_t *event, + struct loader_ctx *ctx) { - yaml_char_t *anchor = first_event->data.alias.anchor; + yaml_char_t *anchor = event->data.alias.anchor; yaml_alias_data_t *alias_data; for (alias_data = parser->aliases.start; alias_data != parser->aliases.top; alias_data ++) { if (strcmp((char *)alias_data->anchor, (char *)anchor) == 0) { yaml_free(anchor); - return alias_data->index; + return yaml_parser_load_node_add(parser, ctx, alias_data->index); } } yaml_free(anchor); return yaml_parser_set_composer_error(parser, "found undefined alias", - first_event->start_mark); + event->start_mark); } /* @@ -280,11 +372,12 @@ yaml_parser_load_alias(yaml_parser_t *parser, yaml_event_t *first_event) */ static int -yaml_parser_load_scalar(yaml_parser_t *parser, yaml_event_t *first_event) +yaml_parser_load_scalar(yaml_parser_t *parser, yaml_event_t *event, + struct loader_ctx *ctx) { yaml_node_t node; int index; - yaml_char_t *tag = first_event->data.scalar.tag; + yaml_char_t *tag = event->data.scalar.tag; if (!STACK_LIMIT(parser, parser->document->nodes, INT_MAX-1)) goto error; @@ -294,23 +387,23 @@ yaml_parser_load_scalar(yaml_parser_t *parser, yaml_event_t *first_event) if (!tag) goto error; } - SCALAR_NODE_INIT(node, tag, first_event->data.scalar.value, - first_event->data.scalar.length, first_event->data.scalar.style, - first_event->start_mark, first_event->end_mark); + SCALAR_NODE_INIT(node, tag, event->data.scalar.value, + event->data.scalar.length, event->data.scalar.style, + event->start_mark, event->end_mark); if (!PUSH(parser, parser->document->nodes, node)) goto error; index = (int)(parser->document->nodes.top - parser->document->nodes.start); if (!yaml_parser_register_anchor(parser, index, - first_event->data.scalar.anchor)) return 0; + event->data.scalar.anchor)) return 0; - return index; + return yaml_parser_load_node_add(parser, ctx, index); error: yaml_free(tag); - yaml_free(first_event->data.scalar.anchor); - yaml_free(first_event->data.scalar.value); + yaml_free(event->data.scalar.anchor); + yaml_free(event->data.scalar.value); return 0; } @@ -319,17 +412,17 @@ yaml_parser_load_scalar(yaml_parser_t *parser, yaml_event_t *first_event) */ static int -yaml_parser_load_sequence(yaml_parser_t *parser, yaml_event_t *first_event) +yaml_parser_load_sequence(yaml_parser_t *parser, yaml_event_t *event, + struct loader_ctx *ctx) { - yaml_event_t event; yaml_node_t node; struct { yaml_node_item_t *start; yaml_node_item_t *end; yaml_node_item_t *top; } items = { NULL, NULL, NULL }; - int index, item_index; - yaml_char_t *tag = first_event->data.sequence_start.tag; + int index; + yaml_char_t *tag = event->data.sequence_start.tag; if (!STACK_LIMIT(parser, parser->document->nodes, INT_MAX-1)) goto error; @@ -342,48 +435,54 @@ yaml_parser_load_sequence(yaml_parser_t *parser, yaml_event_t *first_event) if (!STACK_INIT(parser, items, yaml_node_item_t*)) goto error; SEQUENCE_NODE_INIT(node, tag, items.start, items.end, - first_event->data.sequence_start.style, - first_event->start_mark, first_event->end_mark); + event->data.sequence_start.style, + event->start_mark, event->end_mark); if (!PUSH(parser, parser->document->nodes, node)) goto error; index = (int)(parser->document->nodes.top - parser->document->nodes.start); if (!yaml_parser_register_anchor(parser, index, - first_event->data.sequence_start.anchor)) return 0; - - if (!yaml_parser_parse(parser, &event)) return 0; - - while (event.type != YAML_SEQUENCE_END_EVENT) { - if (!STACK_LIMIT(parser, - parser->document->nodes.start[index-1].data.sequence.items, - INT_MAX-1)) return 0; - item_index = yaml_parser_load_node(parser, &event); - if (!item_index) return 0; - if (!PUSH(parser, - parser->document->nodes.start[index-1].data.sequence.items, - item_index)) return 0; - if (!yaml_parser_parse(parser, &event)) return 0; - } + event->data.sequence_start.anchor)) return 0; - parser->document->nodes.start[index-1].end_mark = event.end_mark; + if (!yaml_parser_load_node_add(parser, ctx, index)) return 0; - return index; + if (!STACK_LIMIT(parser, *ctx, INT_MAX-1)) return 0; + if (!PUSH(parser, *ctx, index)) return 0; + + return 1; error: yaml_free(tag); - yaml_free(first_event->data.sequence_start.anchor); + yaml_free(event->data.sequence_start.anchor); return 0; } +static int +yaml_parser_load_sequence_end(yaml_parser_t *parser, yaml_event_t *event, + struct loader_ctx *ctx) +{ + int index; + + assert(((*ctx).top - (*ctx).start) > 0); + + index = *((*ctx).top - 1); + assert(parser->document->nodes.start[index-1].type == YAML_SEQUENCE_NODE); + parser->document->nodes.start[index-1].end_mark = event->end_mark; + + (void)POP(parser, *ctx); + + return 1; +} + /* * Compose a mapping node. */ static int -yaml_parser_load_mapping(yaml_parser_t *parser, yaml_event_t *first_event) +yaml_parser_load_mapping(yaml_parser_t *parser, yaml_event_t *event, + struct loader_ctx *ctx) { - yaml_event_t event; yaml_node_t node; struct { yaml_node_pair_t *start; @@ -391,8 +490,7 @@ yaml_parser_load_mapping(yaml_parser_t *parser, yaml_event_t *first_event) yaml_node_pair_t *top; } pairs = { NULL, NULL, NULL }; int index; - yaml_node_pair_t pair; - yaml_char_t *tag = first_event->data.mapping_start.tag; + yaml_char_t *tag = event->data.mapping_start.tag; if (!STACK_LIMIT(parser, parser->document->nodes, INT_MAX-1)) goto error; @@ -405,40 +503,42 @@ yaml_parser_load_mapping(yaml_parser_t *parser, yaml_event_t *first_event) if (!STACK_INIT(parser, pairs, yaml_node_pair_t*)) goto error; MAPPING_NODE_INIT(node, tag, pairs.start, pairs.end, - first_event->data.mapping_start.style, - first_event->start_mark, first_event->end_mark); + event->data.mapping_start.style, + event->start_mark, event->end_mark); if (!PUSH(parser, parser->document->nodes, node)) goto error; index = (int)(parser->document->nodes.top - parser->document->nodes.start); if (!yaml_parser_register_anchor(parser, index, - first_event->data.mapping_start.anchor)) return 0; + event->data.mapping_start.anchor)) return 0; - if (!yaml_parser_parse(parser, &event)) return 0; + if (!yaml_parser_load_node_add(parser, ctx, index)) return 0; - while (event.type != YAML_MAPPING_END_EVENT) { - if (!STACK_LIMIT(parser, - parser->document->nodes.start[index-1].data.mapping.pairs, - INT_MAX-1)) return 0; - pair.key = yaml_parser_load_node(parser, &event); - if (!pair.key) return 0; - if (!yaml_parser_parse(parser, &event)) return 0; - pair.value = yaml_parser_load_node(parser, &event); - if (!pair.value) return 0; - if (!PUSH(parser, - parser->document->nodes.start[index-1].data.mapping.pairs, - pair)) return 0; - if (!yaml_parser_parse(parser, &event)) return 0; - } + if (!STACK_LIMIT(parser, *ctx, INT_MAX-1)) return 0; + if (!PUSH(parser, *ctx, index)) return 0; - parser->document->nodes.start[index-1].end_mark = event.end_mark; - - return index; + return 1; error: yaml_free(tag); - yaml_free(first_event->data.mapping_start.anchor); + yaml_free(event->data.mapping_start.anchor); return 0; } +static int +yaml_parser_load_mapping_end(yaml_parser_t *parser, yaml_event_t *event, + struct loader_ctx *ctx) +{ + int index; + + assert(((*ctx).top - (*ctx).start) > 0); + + index = *((*ctx).top - 1); + assert(parser->document->nodes.start[index-1].type == YAML_MAPPING_NODE); + parser->document->nodes.start[index-1].end_mark = event->end_mark; + + (void)POP(parser, *ctx); + + return 1; +} diff --git a/ruby/ext/psych/yaml/parser.c b/ruby/ext/psych/yaml/parser.c index 621f676bf..ec2f8d3e0 100644 --- a/ruby/ext/psych/yaml/parser.c +++ b/ruby/ext/psych/yaml/parser.c @@ -1261,7 +1261,10 @@ yaml_parser_process_directives(yaml_parser_t *parser, goto error; } if (token->data.version_directive.major != 1 - || token->data.version_directive.minor != 1) { + || ( + token->data.version_directive.minor != 1 + && token->data.version_directive.minor != 2 + )) { yaml_parser_set_parser_error(parser, "found incompatible YAML document", token->start_mark); goto error; @@ -1316,6 +1319,8 @@ yaml_parser_process_directives(yaml_parser_t *parser, STACK_DEL(parser, tag_directives); } + if (!version_directive_ref) + yaml_free(version_directive); return 1; error: diff --git a/ruby/ext/psych/yaml/scanner.c b/ruby/ext/psych/yaml/scanner.c index 204593d91..bb5d20127 100644 --- a/ruby/ext/psych/yaml/scanner.c +++ b/ruby/ext/psych/yaml/scanner.c @@ -38,8 +38,8 @@ * BLOCK-END # Indentation decrease. * FLOW-SEQUENCE-START # '[' * FLOW-SEQUENCE-END # ']' - * BLOCK-SEQUENCE-START # '{' - * BLOCK-SEQUENCE-END # '}' + * FLOW-MAPPING-START # '{' + * FLOW-MAPPING-END # '}' * BLOCK-ENTRY # '-' * FLOW-ENTRY # ',' * KEY # '?' or nothing (simple keys). @@ -273,7 +273,7 @@ * The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation * increase that precedes a block collection (cf. the INDENT token in Python). * The token BLOCK-END denote indentation decrease that ends a block collection - * (cf. the DEDENT token in Python). However YAML has some syntax pecularities + * (cf. the DEDENT token in Python). However YAML has some syntax peculiarities * that makes detections of these tokens more complex. * * The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators @@ -348,6 +348,7 @@ * SCALAR("another value",plain) * KEY * SCALAR("a mapping",plain) + * VALUE * BLOCK-MAPPING-START * KEY * SCALAR("key 1",plain) @@ -711,7 +712,7 @@ yaml_parser_scan_tag_handle(yaml_parser_t *parser, int directive, yaml_mark_t start_mark, yaml_char_t **handle); static int -yaml_parser_scan_tag_uri(yaml_parser_t *parser, int directive, +yaml_parser_scan_tag_uri(yaml_parser_t *parser, int uri_char, int directive, yaml_char_t *head, yaml_mark_t start_mark, yaml_char_t **uri); static int @@ -2292,7 +2293,7 @@ yaml_parser_scan_tag_directive_value(yaml_parser_t *parser, /* Scan a prefix. */ - if (!yaml_parser_scan_tag_uri(parser, 1, NULL, start_mark, &prefix_value)) + if (!yaml_parser_scan_tag_uri(parser, 1, 1, NULL, start_mark, &prefix_value)) goto error; /* Expect a whitespace or line break. */ @@ -2410,7 +2411,7 @@ yaml_parser_scan_tag(yaml_parser_t *parser, yaml_token_t *token) /* Consume the tag value. */ - if (!yaml_parser_scan_tag_uri(parser, 0, NULL, start_mark, &suffix)) + if (!yaml_parser_scan_tag_uri(parser, 1, 0, NULL, start_mark, &suffix)) goto error; /* Check for '>' and eat it. */ @@ -2438,14 +2439,14 @@ yaml_parser_scan_tag(yaml_parser_t *parser, yaml_token_t *token) { /* Scan the suffix now. */ - if (!yaml_parser_scan_tag_uri(parser, 0, NULL, start_mark, &suffix)) + if (!yaml_parser_scan_tag_uri(parser, 0, 0, NULL, start_mark, &suffix)) goto error; } else { /* It wasn't a handle after all. Scan the rest of the tag. */ - if (!yaml_parser_scan_tag_uri(parser, 0, handle, start_mark, &suffix)) + if (!yaml_parser_scan_tag_uri(parser, 0, 0, handle, start_mark, &suffix)) goto error; /* Set the handle to '!'. */ @@ -2474,9 +2475,11 @@ yaml_parser_scan_tag(yaml_parser_t *parser, yaml_token_t *token) if (!CACHE(parser, 1)) goto error; if (!IS_BLANKZ(parser->buffer)) { - yaml_parser_set_scanner_error(parser, "while scanning a tag", - start_mark, "did not find expected whitespace or line break"); - goto error; + if (!parser->flow_level || !CHECK(parser->buffer, ',') ) { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find expected whitespace or line break"); + goto error; + } } end_mark = parser->mark; @@ -2565,7 +2568,7 @@ yaml_parser_scan_tag_handle(yaml_parser_t *parser, int directive, */ static int -yaml_parser_scan_tag_uri(yaml_parser_t *parser, int directive, +yaml_parser_scan_tag_uri(yaml_parser_t *parser, int uri_char, int directive, yaml_char_t *head, yaml_mark_t start_mark, yaml_char_t **uri) { size_t length = head ? strlen((char *)head) : 0; @@ -2601,8 +2604,11 @@ yaml_parser_scan_tag_uri(yaml_parser_t *parser, int directive, * The set of characters that may appear in URI is as follows: * * '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&', - * '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']', - * '%'. + * '=', '+', '$', '.', '!', '~', '*', '\'', '(', ')', '%'. + * + * If we are inside a verbatim tag <...> (parameter uri_char is true) + * then also the following flow indicators are allowed: + * ',', '[', ']' */ while (IS_ALPHA(parser->buffer) || CHECK(parser->buffer, ';') @@ -2610,12 +2616,15 @@ yaml_parser_scan_tag_uri(yaml_parser_t *parser, int directive, || CHECK(parser->buffer, ':') || CHECK(parser->buffer, '@') || CHECK(parser->buffer, '&') || CHECK(parser->buffer, '=') || CHECK(parser->buffer, '+') || CHECK(parser->buffer, '$') - || CHECK(parser->buffer, ',') || CHECK(parser->buffer, '.') + || CHECK(parser->buffer, '.') || CHECK(parser->buffer, '%') || CHECK(parser->buffer, '!') || CHECK(parser->buffer, '~') || CHECK(parser->buffer, '*') || CHECK(parser->buffer, '\'') || CHECK(parser->buffer, '(') || CHECK(parser->buffer, ')') - || CHECK(parser->buffer, '[') || CHECK(parser->buffer, ']') - || CHECK(parser->buffer, '%')) + || (uri_char && ( + CHECK(parser->buffer, ',') + || CHECK(parser->buffer, '[') || CHECK(parser->buffer, ']') + ) + )) { /* Check if it is a URI-escape sequence. */ @@ -2860,7 +2869,7 @@ yaml_parser_scan_block_scalar(yaml_parser_t *parser, yaml_token_t *token, if (!CACHE(parser, 1)) goto error; - while ((int)parser->mark.column == indent && !IS_Z(parser->buffer)) + while ((int)parser->mark.column == indent && !(IS_Z(parser->buffer))) { /* * We are at the beginning of a non-empty line. @@ -3278,7 +3287,7 @@ yaml_parser_scan_flow_scalar(yaml_parser_t *parser, yaml_token_t *token, /* Check if we are at the end of the scalar. */ - /* Fix for crash unitialized value crash + /* Fix for crash uninitialized value crash * Credit for the bug and input is to OSS Fuzz * Credit for the fix to Alex Gaynor */ @@ -3430,11 +3439,22 @@ yaml_parser_scan_plain_scalar(yaml_parser_t *parser, yaml_token_t *token) while (!IS_BLANKZ(parser->buffer)) { - /* Check for 'x:x' in the flow context. TODO: Fix the test "spec-08-13". */ + /* Check for "x:" + one of ',?[]{}' in the flow context. TODO: Fix the test "spec-08-13". + * This is not completely according to the spec + * See http://yaml.org/spec/1.1/#id907281 9.1.3. Plain + */ if (parser->flow_level && CHECK(parser->buffer, ':') - && !IS_BLANKZ_AT(parser->buffer, 1)) { + && ( + CHECK_AT(parser->buffer, ',', 1) + || CHECK_AT(parser->buffer, '?', 1) + || CHECK_AT(parser->buffer, '[', 1) + || CHECK_AT(parser->buffer, ']', 1) + || CHECK_AT(parser->buffer, '{', 1) + || CHECK_AT(parser->buffer, '}', 1) + ) + ) { yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", start_mark, "found unexpected ':'"); goto error; @@ -3444,8 +3464,8 @@ yaml_parser_scan_plain_scalar(yaml_parser_t *parser, yaml_token_t *token) if ((CHECK(parser->buffer, ':') && IS_BLANKZ_AT(parser->buffer, 1)) || (parser->flow_level && - (CHECK(parser->buffer, ',') || CHECK(parser->buffer, ':') - || CHECK(parser->buffer, '?') || CHECK(parser->buffer, '[') + (CHECK(parser->buffer, ',') + || CHECK(parser->buffer, '[') || CHECK(parser->buffer, ']') || CHECK(parser->buffer, '{') || CHECK(parser->buffer, '}')))) break; @@ -3512,7 +3532,7 @@ yaml_parser_scan_plain_scalar(yaml_parser_t *parser, yaml_token_t *token) if (leading_blanks && (int)parser->mark.column < indent && IS_TAB(parser->buffer)) { yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", - start_mark, "found a tab character that violate indentation"); + start_mark, "found a tab character that violates indentation"); goto error; } diff --git a/ruby/ext/psych/yaml/yaml.h b/ruby/ext/psych/yaml/yaml.h index f33a15259..f1b7bfde2 100644 --- a/ruby/ext/psych/yaml/yaml.h +++ b/ruby/ext/psych/yaml/yaml.h @@ -26,7 +26,9 @@ extern "C" { /** The public API declaration. */ -#ifdef _WIN32 +#if defined(__MINGW32__) +# define YAML_DECLARE(type) type +#elif defined(_WIN32) # if defined(YAML_DECLARE_STATIC) # define YAML_DECLARE(type) type # elif defined(YAML_DECLARE_EXPORT) @@ -230,7 +232,7 @@ typedef enum yaml_token_type_e { /** A BLOCK-SEQUENCE-START token. */ YAML_BLOCK_SEQUENCE_START_TOKEN, - /** A BLOCK-SEQUENCE-END token. */ + /** A BLOCK-MAPPING-START token. */ YAML_BLOCK_MAPPING_START_TOKEN, /** A BLOCK-END token. */ YAML_BLOCK_END_TOKEN, @@ -550,7 +552,7 @@ yaml_document_end_event_initialize(yaml_event_t *event, int implicit); */ YAML_DECLARE(int) -yaml_alias_event_initialize(yaml_event_t *event, yaml_char_t *anchor); +yaml_alias_event_initialize(yaml_event_t *event, const yaml_char_t *anchor); /** * Create a SCALAR event. @@ -576,8 +578,8 @@ yaml_alias_event_initialize(yaml_event_t *event, yaml_char_t *anchor); YAML_DECLARE(int) yaml_scalar_event_initialize(yaml_event_t *event, - yaml_char_t *anchor, yaml_char_t *tag, - yaml_char_t *value, int length, + const yaml_char_t *anchor, const yaml_char_t *tag, + const yaml_char_t *value, int length, int plain_implicit, int quoted_implicit, yaml_scalar_style_t style); @@ -599,7 +601,7 @@ yaml_scalar_event_initialize(yaml_event_t *event, YAML_DECLARE(int) yaml_sequence_start_event_initialize(yaml_event_t *event, - yaml_char_t *anchor, yaml_char_t *tag, int implicit, + const yaml_char_t *anchor, const yaml_char_t *tag, int implicit, yaml_sequence_style_t style); /** @@ -631,7 +633,7 @@ yaml_sequence_end_event_initialize(yaml_event_t *event); YAML_DECLARE(int) yaml_mapping_start_event_initialize(yaml_event_t *event, - yaml_char_t *anchor, yaml_char_t *tag, int implicit, + const yaml_char_t *anchor, const yaml_char_t *tag, int implicit, yaml_mapping_style_t style); /** @@ -663,7 +665,7 @@ yaml_event_delete(yaml_event_t *event); /** The tag @c !!null with the only possible value: @c null. */ #define YAML_NULL_TAG "tag:yaml.org,2002:null" -/** The tag @c !!bool with the values: @c true and @c falce. */ +/** The tag @c !!bool with the values: @c true and @c false. */ #define YAML_BOOL_TAG "tag:yaml.org,2002:bool" /** The tag @c !!str for string values. */ #define YAML_STR_TAG "tag:yaml.org,2002:str" @@ -894,7 +896,7 @@ yaml_document_get_root_node(yaml_document_t *document); YAML_DECLARE(int) yaml_document_add_scalar(yaml_document_t *document, - yaml_char_t *tag, yaml_char_t *value, int length, + const yaml_char_t *tag, const yaml_char_t *value, int length, yaml_scalar_style_t style); /** @@ -911,7 +913,7 @@ yaml_document_add_scalar(yaml_document_t *document, YAML_DECLARE(int) yaml_document_add_sequence(yaml_document_t *document, - yaml_char_t *tag, yaml_sequence_style_t style); + const yaml_char_t *tag, yaml_sequence_style_t style); /** * Create a MAPPING node and attach it to the document. @@ -927,7 +929,7 @@ yaml_document_add_sequence(yaml_document_t *document, YAML_DECLARE(int) yaml_document_add_mapping(yaml_document_t *document, - yaml_char_t *tag, yaml_mapping_style_t style); + const yaml_char_t *tag, yaml_mapping_style_t style); /** * Add an item to a SEQUENCE node. @@ -935,7 +937,7 @@ yaml_document_add_mapping(yaml_document_t *document, * @param[in,out] document A document object. * @param[in] sequence The sequence node id. * @param[in] item The item node id. -* + * * @returns @c 1 if the function succeeded, @c 0 on error. */ @@ -950,7 +952,7 @@ yaml_document_append_sequence_item(yaml_document_t *document, * @param[in] mapping The mapping node id. * @param[in] key The key node id. * @param[in] value The value node id. -* + * * @returns @c 1 if the function succeeded, @c 0 on error. */ @@ -1018,6 +1020,7 @@ typedef enum yaml_parser_state_e { YAML_PARSE_DOCUMENT_CONTENT_STATE, /** Expect DOCUMENT-END. */ YAML_PARSE_DOCUMENT_END_STATE, + /** Expect a block node. */ YAML_PARSE_BLOCK_NODE_STATE, /** Expect a block node or indentless sequence. */ @@ -1028,6 +1031,7 @@ typedef enum yaml_parser_state_e { YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE, /** Expect an entry of a block sequence. */ YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE, + /** Expect an entry of an indentless sequence. */ YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE, /** Expect the first key of a block mapping. */ @@ -1038,6 +1042,7 @@ typedef enum yaml_parser_state_e { YAML_PARSE_BLOCK_MAPPING_VALUE_STATE, /** Expect the first entry of a flow sequence. */ YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE, + /** Expect an entry of a flow sequence. */ YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE, /** Expect a key of an ordered mapping. */ @@ -1049,6 +1054,7 @@ typedef enum yaml_parser_state_e { /** Expect the first key of a flow mapping. */ YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE, /** Expect a key of a flow mapping. */ + YAML_PARSE_FLOW_MAPPING_KEY_STATE, /** Expect a value of a flow mapping. */ YAML_PARSE_FLOW_MAPPING_VALUE_STATE, @@ -1203,7 +1209,7 @@ typedef struct yaml_parser_s { /** The number of tokens fetched from the queue. */ size_t tokens_parsed; - /* Does the tokens queue contain a token ready for dequeueing. */ + /** Does the tokens queue contain a token ready for dequeueing. */ int token_available; /** The indentation levels stack. */ @@ -1329,7 +1335,7 @@ yaml_parser_delete(yaml_parser_t *parser); * Set a string input. * * Note that the @a input pointer must be valid while the @a parser object - * exists. The application is responsible for destroing @a input after + * exists. The application is responsible for destroying @a input after * destroying the @a parser. * * @param[in,out] parser A parser object. @@ -1444,7 +1450,7 @@ yaml_parser_parse(yaml_parser_t *parser, yaml_event_t *event); * @param[in,out] parser A parser object. * @param[out] document An empty document object. * - * @return @c 1 if the function succeeded, @c 0 on error. + * @returns @c 1 if the function succeeded, @c 0 on error. */ YAML_DECLARE(int) @@ -1487,6 +1493,7 @@ typedef enum yaml_emitter_state_e { YAML_EMIT_DOCUMENT_CONTENT_STATE, /** Expect DOCUMENT-END. */ YAML_EMIT_DOCUMENT_END_STATE, + /** Expect the first item of a flow sequence. */ YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE, /** Expect an item of a flow sequence. */ @@ -1497,6 +1504,7 @@ typedef enum yaml_emitter_state_e { YAML_EMIT_FLOW_MAPPING_KEY_STATE, /** Expect a value for a simple key of a flow mapping. */ YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE, + /** Expect a value of a flow mapping. */ YAML_EMIT_FLOW_MAPPING_VALUE_STATE, /** Expect the first item of a block sequence. */ @@ -1507,6 +1515,7 @@ typedef enum yaml_emitter_state_e { YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE, /** Expect the key of a block mapping. */ YAML_EMIT_BLOCK_MAPPING_KEY_STATE, + /** Expect a value for a simple key of a block mapping. */ YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE, /** Expect a value of a block mapping. */ @@ -1515,6 +1524,18 @@ typedef enum yaml_emitter_state_e { YAML_EMIT_END_STATE } yaml_emitter_state_t; + +/* This is needed for C++ */ + +typedef struct yaml_anchors_s { + /** The number of references. */ + int references; + /** The anchor id. */ + int anchor; + /** If the node has been emitted? */ + int serialized; +} yaml_anchors_t; + /** * The emitter structure. * @@ -1546,7 +1567,7 @@ typedef struct yaml_emitter_s { /** Write handler. */ yaml_write_handler_t *write_handler; - /** A pointer for passing to the white handler. */ + /** A pointer for passing to the write handler. */ void *write_handler_data; /** Standard (string or file) output data. */ @@ -1713,7 +1734,7 @@ typedef struct yaml_emitter_s { size_t length; /** Does the scalar contain line breaks? */ int multiline; - /** Can the scalar be expessed in the flow plain style? */ + /** Can the scalar be expressed in the flow plain style? */ int flow_plain_allowed; /** Can the scalar be expressed in the block plain style? */ int block_plain_allowed; @@ -1740,14 +1761,7 @@ typedef struct yaml_emitter_s { int closed; /** The information associated with the document nodes. */ - struct { - /** The number of references. */ - int references; - /** The anchor id. */ - int anchor; - /** If the node has been emitted? */ - int serialized; - } *anchors; + yaml_anchors_t *anchors; /** The last assigned anchor id. */ int last_anchor_id; @@ -1936,10 +1950,10 @@ yaml_emitter_close(yaml_emitter_t *emitter); /** * Emit a YAML document. * - * The documen object may be generated using the yaml_parser_load() function + * The document object may be generated using the yaml_parser_load() function * or the yaml_document_initialize() function. The emitter takes the - * responsibility for the document object and destoys its content after - * it is emitted. The document object is destroyedeven if the function fails. + * responsibility for the document object and destroys its content after + * it is emitted. The document object is destroyed even if the function fails. * * @param[in,out] emitter An emitter object. * @param[in,out] document A document object. diff --git a/ruby/ext/psych/yaml/yaml_private.h b/ruby/ext/psych/yaml/yaml_private.h index f4f244cbc..266a6bd3a 100644 --- a/ruby/ext/psych/yaml/yaml_private.h +++ b/ruby/ext/psych/yaml/yaml_private.h @@ -2,8 +2,8 @@ #include RUBY_EXTCONF_H #endif -#if HAVE_CONFIG_H -#include +#ifdef HAVE_CONFIG_H +#include "config.h" #endif #include @@ -175,14 +175,14 @@ yaml_string_join( * Check the octet at the specified position. */ -#define CHECK_AT(string,octet,offset) \ +#define CHECK_AT(string,octet,offset) \ ((string).pointer[offset] == (yaml_char_t)(octet)) /* * Check the current octet in the buffer. */ -#define CHECK(string,octet) CHECK_AT((string),(octet),0) +#define CHECK(string,octet) (CHECK_AT((string),(octet),0)) /* * Check if the character at the specified position is an alphabetical diff --git a/ruby/ext/pty/depend b/ruby/ext/pty/depend index 1e89dc824..7baded100 100644 --- a/ruby/ext/pty/depend +++ b/ruby/ext/pty/depend @@ -1,12 +1,168 @@ # AUTOGENERATED DEPENDENCIES START pty.o: $(RUBY_EXTCONF_H) pty.o: $(arch_hdrdir)/ruby/config.h -pty.o: $(hdrdir)/ruby.h pty.o: $(hdrdir)/ruby/assert.h pty.o: $(hdrdir)/ruby/backward.h +pty.o: $(hdrdir)/ruby/backward/2/assume.h +pty.o: $(hdrdir)/ruby/backward/2/attributes.h +pty.o: $(hdrdir)/ruby/backward/2/bool.h +pty.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +pty.o: $(hdrdir)/ruby/backward/2/inttypes.h +pty.o: $(hdrdir)/ruby/backward/2/limits.h +pty.o: $(hdrdir)/ruby/backward/2/long_long.h +pty.o: $(hdrdir)/ruby/backward/2/stdalign.h +pty.o: $(hdrdir)/ruby/backward/2/stdarg.h pty.o: $(hdrdir)/ruby/defines.h pty.o: $(hdrdir)/ruby/encoding.h pty.o: $(hdrdir)/ruby/intern.h +pty.o: $(hdrdir)/ruby/internal/anyargs.h +pty.o: $(hdrdir)/ruby/internal/arithmetic.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/char.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/double.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/int.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/long.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/short.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +pty.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +pty.o: $(hdrdir)/ruby/internal/assume.h +pty.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +pty.o: $(hdrdir)/ruby/internal/attr/artificial.h +pty.o: $(hdrdir)/ruby/internal/attr/cold.h +pty.o: $(hdrdir)/ruby/internal/attr/const.h +pty.o: $(hdrdir)/ruby/internal/attr/constexpr.h +pty.o: $(hdrdir)/ruby/internal/attr/deprecated.h +pty.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +pty.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +pty.o: $(hdrdir)/ruby/internal/attr/error.h +pty.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +pty.o: $(hdrdir)/ruby/internal/attr/forceinline.h +pty.o: $(hdrdir)/ruby/internal/attr/format.h +pty.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +pty.o: $(hdrdir)/ruby/internal/attr/noalias.h +pty.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +pty.o: $(hdrdir)/ruby/internal/attr/noexcept.h +pty.o: $(hdrdir)/ruby/internal/attr/noinline.h +pty.o: $(hdrdir)/ruby/internal/attr/nonnull.h +pty.o: $(hdrdir)/ruby/internal/attr/noreturn.h +pty.o: $(hdrdir)/ruby/internal/attr/pure.h +pty.o: $(hdrdir)/ruby/internal/attr/restrict.h +pty.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +pty.o: $(hdrdir)/ruby/internal/attr/warning.h +pty.o: $(hdrdir)/ruby/internal/attr/weakref.h +pty.o: $(hdrdir)/ruby/internal/cast.h +pty.o: $(hdrdir)/ruby/internal/compiler_is.h +pty.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +pty.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +pty.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +pty.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +pty.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +pty.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +pty.o: $(hdrdir)/ruby/internal/compiler_since.h +pty.o: $(hdrdir)/ruby/internal/config.h +pty.o: $(hdrdir)/ruby/internal/constant_p.h +pty.o: $(hdrdir)/ruby/internal/core.h +pty.o: $(hdrdir)/ruby/internal/core/rarray.h +pty.o: $(hdrdir)/ruby/internal/core/rbasic.h +pty.o: $(hdrdir)/ruby/internal/core/rbignum.h +pty.o: $(hdrdir)/ruby/internal/core/rclass.h +pty.o: $(hdrdir)/ruby/internal/core/rdata.h +pty.o: $(hdrdir)/ruby/internal/core/rfile.h +pty.o: $(hdrdir)/ruby/internal/core/rhash.h +pty.o: $(hdrdir)/ruby/internal/core/robject.h +pty.o: $(hdrdir)/ruby/internal/core/rregexp.h +pty.o: $(hdrdir)/ruby/internal/core/rstring.h +pty.o: $(hdrdir)/ruby/internal/core/rstruct.h +pty.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +pty.o: $(hdrdir)/ruby/internal/ctype.h +pty.o: $(hdrdir)/ruby/internal/dllexport.h +pty.o: $(hdrdir)/ruby/internal/dosish.h +pty.o: $(hdrdir)/ruby/internal/encoding/coderange.h +pty.o: $(hdrdir)/ruby/internal/encoding/ctype.h +pty.o: $(hdrdir)/ruby/internal/encoding/encoding.h +pty.o: $(hdrdir)/ruby/internal/encoding/pathname.h +pty.o: $(hdrdir)/ruby/internal/encoding/re.h +pty.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +pty.o: $(hdrdir)/ruby/internal/encoding/string.h +pty.o: $(hdrdir)/ruby/internal/encoding/symbol.h +pty.o: $(hdrdir)/ruby/internal/encoding/transcode.h +pty.o: $(hdrdir)/ruby/internal/error.h +pty.o: $(hdrdir)/ruby/internal/eval.h +pty.o: $(hdrdir)/ruby/internal/event.h +pty.o: $(hdrdir)/ruby/internal/fl_type.h +pty.o: $(hdrdir)/ruby/internal/gc.h +pty.o: $(hdrdir)/ruby/internal/glob.h +pty.o: $(hdrdir)/ruby/internal/globals.h +pty.o: $(hdrdir)/ruby/internal/has/attribute.h +pty.o: $(hdrdir)/ruby/internal/has/builtin.h +pty.o: $(hdrdir)/ruby/internal/has/c_attribute.h +pty.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +pty.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +pty.o: $(hdrdir)/ruby/internal/has/extension.h +pty.o: $(hdrdir)/ruby/internal/has/feature.h +pty.o: $(hdrdir)/ruby/internal/has/warning.h +pty.o: $(hdrdir)/ruby/internal/intern/array.h +pty.o: $(hdrdir)/ruby/internal/intern/bignum.h +pty.o: $(hdrdir)/ruby/internal/intern/class.h +pty.o: $(hdrdir)/ruby/internal/intern/compar.h +pty.o: $(hdrdir)/ruby/internal/intern/complex.h +pty.o: $(hdrdir)/ruby/internal/intern/cont.h +pty.o: $(hdrdir)/ruby/internal/intern/dir.h +pty.o: $(hdrdir)/ruby/internal/intern/enum.h +pty.o: $(hdrdir)/ruby/internal/intern/enumerator.h +pty.o: $(hdrdir)/ruby/internal/intern/error.h +pty.o: $(hdrdir)/ruby/internal/intern/eval.h +pty.o: $(hdrdir)/ruby/internal/intern/file.h +pty.o: $(hdrdir)/ruby/internal/intern/gc.h +pty.o: $(hdrdir)/ruby/internal/intern/hash.h +pty.o: $(hdrdir)/ruby/internal/intern/io.h +pty.o: $(hdrdir)/ruby/internal/intern/load.h +pty.o: $(hdrdir)/ruby/internal/intern/marshal.h +pty.o: $(hdrdir)/ruby/internal/intern/numeric.h +pty.o: $(hdrdir)/ruby/internal/intern/object.h +pty.o: $(hdrdir)/ruby/internal/intern/parse.h +pty.o: $(hdrdir)/ruby/internal/intern/proc.h +pty.o: $(hdrdir)/ruby/internal/intern/process.h +pty.o: $(hdrdir)/ruby/internal/intern/random.h +pty.o: $(hdrdir)/ruby/internal/intern/range.h +pty.o: $(hdrdir)/ruby/internal/intern/rational.h +pty.o: $(hdrdir)/ruby/internal/intern/re.h +pty.o: $(hdrdir)/ruby/internal/intern/ruby.h +pty.o: $(hdrdir)/ruby/internal/intern/select.h +pty.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +pty.o: $(hdrdir)/ruby/internal/intern/signal.h +pty.o: $(hdrdir)/ruby/internal/intern/sprintf.h +pty.o: $(hdrdir)/ruby/internal/intern/string.h +pty.o: $(hdrdir)/ruby/internal/intern/struct.h +pty.o: $(hdrdir)/ruby/internal/intern/thread.h +pty.o: $(hdrdir)/ruby/internal/intern/time.h +pty.o: $(hdrdir)/ruby/internal/intern/variable.h +pty.o: $(hdrdir)/ruby/internal/intern/vm.h +pty.o: $(hdrdir)/ruby/internal/interpreter.h +pty.o: $(hdrdir)/ruby/internal/iterator.h +pty.o: $(hdrdir)/ruby/internal/memory.h +pty.o: $(hdrdir)/ruby/internal/method.h +pty.o: $(hdrdir)/ruby/internal/module.h +pty.o: $(hdrdir)/ruby/internal/newobj.h +pty.o: $(hdrdir)/ruby/internal/rgengc.h +pty.o: $(hdrdir)/ruby/internal/scan_args.h +pty.o: $(hdrdir)/ruby/internal/special_consts.h +pty.o: $(hdrdir)/ruby/internal/static_assert.h +pty.o: $(hdrdir)/ruby/internal/stdalign.h +pty.o: $(hdrdir)/ruby/internal/stdbool.h +pty.o: $(hdrdir)/ruby/internal/symbol.h +pty.o: $(hdrdir)/ruby/internal/value.h +pty.o: $(hdrdir)/ruby/internal/value_type.h +pty.o: $(hdrdir)/ruby/internal/variable.h +pty.o: $(hdrdir)/ruby/internal/warning_push.h +pty.o: $(hdrdir)/ruby/internal/xmalloc.h pty.o: $(hdrdir)/ruby/io.h pty.o: $(hdrdir)/ruby/missing.h pty.o: $(hdrdir)/ruby/onigmo.h @@ -16,5 +172,13 @@ pty.o: $(hdrdir)/ruby/st.h pty.o: $(hdrdir)/ruby/subst.h pty.o: $(hdrdir)/ruby/util.h pty.o: $(top_srcdir)/internal.h +pty.o: $(top_srcdir)/internal/array.h +pty.o: $(top_srcdir)/internal/compilers.h +pty.o: $(top_srcdir)/internal/gc.h +pty.o: $(top_srcdir)/internal/imemo.h +pty.o: $(top_srcdir)/internal/process.h +pty.o: $(top_srcdir)/internal/signal.h +pty.o: $(top_srcdir)/internal/static_assert.h +pty.o: $(top_srcdir)/internal/warnings.h pty.o: pty.c # AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/pty/extconf.rb b/ruby/ext/pty/extconf.rb index 7721a744c..038bdf4d2 100644 --- a/ruby/ext/pty/extconf.rb +++ b/ruby/ext/pty/extconf.rb @@ -10,9 +10,9 @@ have_header("util.h") # OpenBSD openpty have_header("pty.h") have_header("pwd.h") - have_library("util", "openpty") + util = have_library("util", "openpty") if have_func("posix_openpt") or - have_func("openpty") or + (util or have_func("openpty")) or have_func("_getpty") or have_func("ptsname") or have_func("ioctl") diff --git a/ruby/ext/pty/pty.c b/ruby/ext/pty/pty.c index 4c6ae2612..72074f742 100644 --- a/ruby/ext/pty/pty.c +++ b/ruby/ext/pty/pty.c @@ -1,45 +1,51 @@ -#include "ruby/config.h" +#include "ruby/config.h" + #ifdef RUBY_EXTCONF_H -#include RUBY_EXTCONF_H +# include RUBY_EXTCONF_H #endif -#include -#include -#include -#include -#include -#include -#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + #ifdef HAVE_PWD_H -#include +# include #endif + #ifdef HAVE_SYS_IOCTL_H -#include +# include #endif + #ifdef HAVE_LIBUTIL_H -#include +# include #endif + #ifdef HAVE_UTIL_H -#include +# include #endif + #ifdef HAVE_PTY_H -#include +# include #endif + #if defined(HAVE_SYS_PARAM_H) - /* for __FreeBSD_version */ + /* for __FreeBSD_version */ # include #endif + #ifdef HAVE_SYS_WAIT_H -#include +# include #else -#define WIFSTOPPED(status) (((status) & 0xff) == 0x7f) +# define WIFSTOPPED(status) (((status) & 0xff) == 0x7f) #endif -#include - -#include "ruby/io.h" -#include "internal.h" -#include "ruby/util.h" -#include #ifdef HAVE_SYS_STROPTS_H #include #endif @@ -48,6 +54,12 @@ #include #endif +#include "internal.h" +#include "internal/process.h" +#include "internal/signal.h" +#include "ruby/io.h" +#include "ruby/util.h" + #define DEVICELEN 16 #ifndef HAVE_SETEUID @@ -259,7 +271,7 @@ get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg, int flags = O_RDWR|O_NOCTTY; # if defined(O_CLOEXEC) /* glibc posix_openpt() in GNU/Linux calls open("/dev/ptmx", flags) internally. - * So version dependency on GNU/Linux is same as O_CLOEXEC with open(). + * So version dependency on GNU/Linux is the same as O_CLOEXEC with open(). * O_CLOEXEC is available since Linux 2.6.23. Linux 2.6.18 silently ignore it. */ flags |= O_CLOEXEC; # endif @@ -452,11 +464,11 @@ pty_close_pty(VALUE assoc) /* * call-seq: * PTY.open => [master_io, slave_file] - * PTY.open {|master_io, slave_file| ... } => block value + * PTY.open {|(master_io, slave_file)| ... } => block value * * Allocates a pty (pseudo-terminal). * - * In the block form, yields two arguments master_io, slave_file + * In the block form, yields an array of two elements (master_io, slave_file) * and the value of the block is returned from +open+. * * The IO and File are both closed after the block completes if they haven't @@ -485,7 +497,7 @@ pty_close_pty(VALUE assoc) * require 'io/console' * PTY.open {|m, s| * s.raw! - * ... + * # ... * } * */ @@ -682,7 +694,7 @@ static VALUE cPTY; * Document-class: PTY * * Creates and manages pseudo terminals (PTYs). See also - * http://en.wikipedia.org/wiki/Pseudo_terminal + * https://en.wikipedia.org/wiki/Pseudo_terminal * * PTY allows you to allocate new terminals using ::open or ::spawn a new * terminal with a specific command. @@ -725,16 +737,16 @@ static VALUE cPTY; * * == License * - * C) Copyright 1998 by Akinori Ito. + * (c) Copyright 1998 by Akinori Ito. * - * 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 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. + * 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. */ void diff --git a/ruby/ext/racc/cparse/cparse.c b/ruby/ext/racc/cparse/cparse.c index ca74b8000..f71ed2bba 100644 --- a/ruby/ext/racc/cparse/cparse.c +++ b/ruby/ext/racc/cparse/cparse.c @@ -605,7 +605,7 @@ parse_main(struct cparse_params *v, VALUE tok, VALUE val, int resume) user_yyerror: if (v->errstatus == 3) { if (v->t == vFINAL_TOKEN) { - v->retval = Qfalse; + v->retval = Qnil; v->fin = CP_FIN_EOT; return; } @@ -819,14 +819,16 @@ reduce0(RB_BLOCK_CALL_FUNC_ARGLIST(_, data)) void Init_cparse(void) { -#undef rb_intern -#define rb_intern(str) rb_intern_const(str) +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + VALUE Racc, Parser; - ID id_racc = rb_intern("Racc"); + ID id_racc = rb_intern_const("Racc"); if (rb_const_defined(rb_cObject, id_racc)) { Racc = rb_const_get(rb_cObject, id_racc); - Parser = rb_const_get_at(Racc, rb_intern("Parser")); + Parser = rb_const_get_at(Racc, rb_intern_const("Parser")); } else { Racc = rb_define_module("Racc"); @@ -846,16 +848,16 @@ Init_cparse(void) RaccBug = rb_eRuntimeError; - id_yydebug = rb_intern("@yydebug"); - id_nexttoken = rb_intern("next_token"); - id_onerror = rb_intern("on_error"); - id_noreduce = rb_intern("_reduce_none"); - id_errstatus = rb_intern("@racc_error_status"); - - id_d_shift = rb_intern("racc_shift"); - id_d_reduce = rb_intern("racc_reduce"); - id_d_accept = rb_intern("racc_accept"); - id_d_read_token = rb_intern("racc_read_token"); - id_d_next_state = rb_intern("racc_next_state"); - id_d_e_pop = rb_intern("racc_e_pop"); + id_yydebug = rb_intern_const("@yydebug"); + id_nexttoken = rb_intern_const("next_token"); + id_onerror = rb_intern_const("on_error"); + id_noreduce = rb_intern_const("_reduce_none"); + id_errstatus = rb_intern_const("@racc_error_status"); + + id_d_shift = rb_intern_const("racc_shift"); + id_d_reduce = rb_intern_const("racc_reduce"); + id_d_accept = rb_intern_const("racc_accept"); + id_d_read_token = rb_intern_const("racc_read_token"); + id_d_next_state = rb_intern_const("racc_next_state"); + id_d_e_pop = rb_intern_const("racc_e_pop"); } diff --git a/ruby/ext/racc/cparse/depend b/ruby/ext/racc/cparse/depend index a156b3234..cb2a1b6bd 100644 --- a/ruby/ext/racc/cparse/depend +++ b/ruby/ext/racc/cparse/depend @@ -4,8 +4,155 @@ cparse.o: $(arch_hdrdir)/ruby/config.h cparse.o: $(hdrdir)/ruby.h cparse.o: $(hdrdir)/ruby/assert.h cparse.o: $(hdrdir)/ruby/backward.h +cparse.o: $(hdrdir)/ruby/backward/2/assume.h +cparse.o: $(hdrdir)/ruby/backward/2/attributes.h +cparse.o: $(hdrdir)/ruby/backward/2/bool.h +cparse.o: $(hdrdir)/ruby/backward/2/inttypes.h +cparse.o: $(hdrdir)/ruby/backward/2/limits.h +cparse.o: $(hdrdir)/ruby/backward/2/long_long.h +cparse.o: $(hdrdir)/ruby/backward/2/stdalign.h +cparse.o: $(hdrdir)/ruby/backward/2/stdarg.h cparse.o: $(hdrdir)/ruby/defines.h cparse.o: $(hdrdir)/ruby/intern.h +cparse.o: $(hdrdir)/ruby/internal/anyargs.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/char.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/double.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/int.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/long.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/short.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +cparse.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +cparse.o: $(hdrdir)/ruby/internal/assume.h +cparse.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +cparse.o: $(hdrdir)/ruby/internal/attr/artificial.h +cparse.o: $(hdrdir)/ruby/internal/attr/cold.h +cparse.o: $(hdrdir)/ruby/internal/attr/const.h +cparse.o: $(hdrdir)/ruby/internal/attr/constexpr.h +cparse.o: $(hdrdir)/ruby/internal/attr/deprecated.h +cparse.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +cparse.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +cparse.o: $(hdrdir)/ruby/internal/attr/error.h +cparse.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +cparse.o: $(hdrdir)/ruby/internal/attr/forceinline.h +cparse.o: $(hdrdir)/ruby/internal/attr/format.h +cparse.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +cparse.o: $(hdrdir)/ruby/internal/attr/noalias.h +cparse.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +cparse.o: $(hdrdir)/ruby/internal/attr/noexcept.h +cparse.o: $(hdrdir)/ruby/internal/attr/noinline.h +cparse.o: $(hdrdir)/ruby/internal/attr/nonnull.h +cparse.o: $(hdrdir)/ruby/internal/attr/noreturn.h +cparse.o: $(hdrdir)/ruby/internal/attr/pure.h +cparse.o: $(hdrdir)/ruby/internal/attr/restrict.h +cparse.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +cparse.o: $(hdrdir)/ruby/internal/attr/warning.h +cparse.o: $(hdrdir)/ruby/internal/attr/weakref.h +cparse.o: $(hdrdir)/ruby/internal/cast.h +cparse.o: $(hdrdir)/ruby/internal/compiler_is.h +cparse.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +cparse.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +cparse.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +cparse.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +cparse.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +cparse.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +cparse.o: $(hdrdir)/ruby/internal/compiler_since.h +cparse.o: $(hdrdir)/ruby/internal/config.h +cparse.o: $(hdrdir)/ruby/internal/constant_p.h +cparse.o: $(hdrdir)/ruby/internal/core.h +cparse.o: $(hdrdir)/ruby/internal/core/rarray.h +cparse.o: $(hdrdir)/ruby/internal/core/rbasic.h +cparse.o: $(hdrdir)/ruby/internal/core/rbignum.h +cparse.o: $(hdrdir)/ruby/internal/core/rclass.h +cparse.o: $(hdrdir)/ruby/internal/core/rdata.h +cparse.o: $(hdrdir)/ruby/internal/core/rfile.h +cparse.o: $(hdrdir)/ruby/internal/core/rhash.h +cparse.o: $(hdrdir)/ruby/internal/core/robject.h +cparse.o: $(hdrdir)/ruby/internal/core/rregexp.h +cparse.o: $(hdrdir)/ruby/internal/core/rstring.h +cparse.o: $(hdrdir)/ruby/internal/core/rstruct.h +cparse.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +cparse.o: $(hdrdir)/ruby/internal/ctype.h +cparse.o: $(hdrdir)/ruby/internal/dllexport.h +cparse.o: $(hdrdir)/ruby/internal/dosish.h +cparse.o: $(hdrdir)/ruby/internal/error.h +cparse.o: $(hdrdir)/ruby/internal/eval.h +cparse.o: $(hdrdir)/ruby/internal/event.h +cparse.o: $(hdrdir)/ruby/internal/fl_type.h +cparse.o: $(hdrdir)/ruby/internal/gc.h +cparse.o: $(hdrdir)/ruby/internal/glob.h +cparse.o: $(hdrdir)/ruby/internal/globals.h +cparse.o: $(hdrdir)/ruby/internal/has/attribute.h +cparse.o: $(hdrdir)/ruby/internal/has/builtin.h +cparse.o: $(hdrdir)/ruby/internal/has/c_attribute.h +cparse.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +cparse.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +cparse.o: $(hdrdir)/ruby/internal/has/extension.h +cparse.o: $(hdrdir)/ruby/internal/has/feature.h +cparse.o: $(hdrdir)/ruby/internal/has/warning.h +cparse.o: $(hdrdir)/ruby/internal/intern/array.h +cparse.o: $(hdrdir)/ruby/internal/intern/bignum.h +cparse.o: $(hdrdir)/ruby/internal/intern/class.h +cparse.o: $(hdrdir)/ruby/internal/intern/compar.h +cparse.o: $(hdrdir)/ruby/internal/intern/complex.h +cparse.o: $(hdrdir)/ruby/internal/intern/cont.h +cparse.o: $(hdrdir)/ruby/internal/intern/dir.h +cparse.o: $(hdrdir)/ruby/internal/intern/enum.h +cparse.o: $(hdrdir)/ruby/internal/intern/enumerator.h +cparse.o: $(hdrdir)/ruby/internal/intern/error.h +cparse.o: $(hdrdir)/ruby/internal/intern/eval.h +cparse.o: $(hdrdir)/ruby/internal/intern/file.h +cparse.o: $(hdrdir)/ruby/internal/intern/gc.h +cparse.o: $(hdrdir)/ruby/internal/intern/hash.h +cparse.o: $(hdrdir)/ruby/internal/intern/io.h +cparse.o: $(hdrdir)/ruby/internal/intern/load.h +cparse.o: $(hdrdir)/ruby/internal/intern/marshal.h +cparse.o: $(hdrdir)/ruby/internal/intern/numeric.h +cparse.o: $(hdrdir)/ruby/internal/intern/object.h +cparse.o: $(hdrdir)/ruby/internal/intern/parse.h +cparse.o: $(hdrdir)/ruby/internal/intern/proc.h +cparse.o: $(hdrdir)/ruby/internal/intern/process.h +cparse.o: $(hdrdir)/ruby/internal/intern/random.h +cparse.o: $(hdrdir)/ruby/internal/intern/range.h +cparse.o: $(hdrdir)/ruby/internal/intern/rational.h +cparse.o: $(hdrdir)/ruby/internal/intern/re.h +cparse.o: $(hdrdir)/ruby/internal/intern/ruby.h +cparse.o: $(hdrdir)/ruby/internal/intern/select.h +cparse.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +cparse.o: $(hdrdir)/ruby/internal/intern/signal.h +cparse.o: $(hdrdir)/ruby/internal/intern/sprintf.h +cparse.o: $(hdrdir)/ruby/internal/intern/string.h +cparse.o: $(hdrdir)/ruby/internal/intern/struct.h +cparse.o: $(hdrdir)/ruby/internal/intern/thread.h +cparse.o: $(hdrdir)/ruby/internal/intern/time.h +cparse.o: $(hdrdir)/ruby/internal/intern/variable.h +cparse.o: $(hdrdir)/ruby/internal/intern/vm.h +cparse.o: $(hdrdir)/ruby/internal/interpreter.h +cparse.o: $(hdrdir)/ruby/internal/iterator.h +cparse.o: $(hdrdir)/ruby/internal/memory.h +cparse.o: $(hdrdir)/ruby/internal/method.h +cparse.o: $(hdrdir)/ruby/internal/module.h +cparse.o: $(hdrdir)/ruby/internal/newobj.h +cparse.o: $(hdrdir)/ruby/internal/rgengc.h +cparse.o: $(hdrdir)/ruby/internal/scan_args.h +cparse.o: $(hdrdir)/ruby/internal/special_consts.h +cparse.o: $(hdrdir)/ruby/internal/static_assert.h +cparse.o: $(hdrdir)/ruby/internal/stdalign.h +cparse.o: $(hdrdir)/ruby/internal/stdbool.h +cparse.o: $(hdrdir)/ruby/internal/symbol.h +cparse.o: $(hdrdir)/ruby/internal/value.h +cparse.o: $(hdrdir)/ruby/internal/value_type.h +cparse.o: $(hdrdir)/ruby/internal/variable.h +cparse.o: $(hdrdir)/ruby/internal/warning_push.h +cparse.o: $(hdrdir)/ruby/internal/xmalloc.h cparse.o: $(hdrdir)/ruby/missing.h cparse.o: $(hdrdir)/ruby/ruby.h cparse.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/racc/cparse/extconf.rb b/ruby/ext/racc/cparse/extconf.rb index 47b455d99..18c5689ad 100644 --- a/ruby/ext/racc/cparse/extconf.rb +++ b/ruby/ext/racc/cparse/extconf.rb @@ -1,8 +1,9 @@ # frozen_string_literal: false -# $Id: a9187b5bc40e6adf05e7b6ee5b370b39a3429ecd $ +# require 'mkmf' +have_func('rb_block_call') have_func('rb_ary_subseq') create_makefile 'racc/cparse' diff --git a/ruby/ext/rbconfig/sizeof/depend b/ruby/ext/rbconfig/sizeof/depend index 9433dd415..c4100266f 100644 --- a/ruby/ext/rbconfig/sizeof/depend +++ b/ruby/ext/rbconfig/sizeof/depend @@ -18,8 +18,155 @@ limits.o: $(RUBY_EXTCONF_H) limits.o: $(arch_hdrdir)/ruby/config.h limits.o: $(hdrdir)/ruby/assert.h limits.o: $(hdrdir)/ruby/backward.h +limits.o: $(hdrdir)/ruby/backward/2/assume.h +limits.o: $(hdrdir)/ruby/backward/2/attributes.h +limits.o: $(hdrdir)/ruby/backward/2/bool.h +limits.o: $(hdrdir)/ruby/backward/2/inttypes.h +limits.o: $(hdrdir)/ruby/backward/2/limits.h +limits.o: $(hdrdir)/ruby/backward/2/long_long.h +limits.o: $(hdrdir)/ruby/backward/2/stdalign.h +limits.o: $(hdrdir)/ruby/backward/2/stdarg.h limits.o: $(hdrdir)/ruby/defines.h limits.o: $(hdrdir)/ruby/intern.h +limits.o: $(hdrdir)/ruby/internal/anyargs.h +limits.o: $(hdrdir)/ruby/internal/arithmetic.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/char.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/double.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/int.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/long.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/short.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +limits.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +limits.o: $(hdrdir)/ruby/internal/assume.h +limits.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +limits.o: $(hdrdir)/ruby/internal/attr/artificial.h +limits.o: $(hdrdir)/ruby/internal/attr/cold.h +limits.o: $(hdrdir)/ruby/internal/attr/const.h +limits.o: $(hdrdir)/ruby/internal/attr/constexpr.h +limits.o: $(hdrdir)/ruby/internal/attr/deprecated.h +limits.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +limits.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +limits.o: $(hdrdir)/ruby/internal/attr/error.h +limits.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +limits.o: $(hdrdir)/ruby/internal/attr/forceinline.h +limits.o: $(hdrdir)/ruby/internal/attr/format.h +limits.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +limits.o: $(hdrdir)/ruby/internal/attr/noalias.h +limits.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +limits.o: $(hdrdir)/ruby/internal/attr/noexcept.h +limits.o: $(hdrdir)/ruby/internal/attr/noinline.h +limits.o: $(hdrdir)/ruby/internal/attr/nonnull.h +limits.o: $(hdrdir)/ruby/internal/attr/noreturn.h +limits.o: $(hdrdir)/ruby/internal/attr/pure.h +limits.o: $(hdrdir)/ruby/internal/attr/restrict.h +limits.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +limits.o: $(hdrdir)/ruby/internal/attr/warning.h +limits.o: $(hdrdir)/ruby/internal/attr/weakref.h +limits.o: $(hdrdir)/ruby/internal/cast.h +limits.o: $(hdrdir)/ruby/internal/compiler_is.h +limits.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +limits.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +limits.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +limits.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +limits.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +limits.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +limits.o: $(hdrdir)/ruby/internal/compiler_since.h +limits.o: $(hdrdir)/ruby/internal/config.h +limits.o: $(hdrdir)/ruby/internal/constant_p.h +limits.o: $(hdrdir)/ruby/internal/core.h +limits.o: $(hdrdir)/ruby/internal/core/rarray.h +limits.o: $(hdrdir)/ruby/internal/core/rbasic.h +limits.o: $(hdrdir)/ruby/internal/core/rbignum.h +limits.o: $(hdrdir)/ruby/internal/core/rclass.h +limits.o: $(hdrdir)/ruby/internal/core/rdata.h +limits.o: $(hdrdir)/ruby/internal/core/rfile.h +limits.o: $(hdrdir)/ruby/internal/core/rhash.h +limits.o: $(hdrdir)/ruby/internal/core/robject.h +limits.o: $(hdrdir)/ruby/internal/core/rregexp.h +limits.o: $(hdrdir)/ruby/internal/core/rstring.h +limits.o: $(hdrdir)/ruby/internal/core/rstruct.h +limits.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +limits.o: $(hdrdir)/ruby/internal/ctype.h +limits.o: $(hdrdir)/ruby/internal/dllexport.h +limits.o: $(hdrdir)/ruby/internal/dosish.h +limits.o: $(hdrdir)/ruby/internal/error.h +limits.o: $(hdrdir)/ruby/internal/eval.h +limits.o: $(hdrdir)/ruby/internal/event.h +limits.o: $(hdrdir)/ruby/internal/fl_type.h +limits.o: $(hdrdir)/ruby/internal/gc.h +limits.o: $(hdrdir)/ruby/internal/glob.h +limits.o: $(hdrdir)/ruby/internal/globals.h +limits.o: $(hdrdir)/ruby/internal/has/attribute.h +limits.o: $(hdrdir)/ruby/internal/has/builtin.h +limits.o: $(hdrdir)/ruby/internal/has/c_attribute.h +limits.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +limits.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +limits.o: $(hdrdir)/ruby/internal/has/extension.h +limits.o: $(hdrdir)/ruby/internal/has/feature.h +limits.o: $(hdrdir)/ruby/internal/has/warning.h +limits.o: $(hdrdir)/ruby/internal/intern/array.h +limits.o: $(hdrdir)/ruby/internal/intern/bignum.h +limits.o: $(hdrdir)/ruby/internal/intern/class.h +limits.o: $(hdrdir)/ruby/internal/intern/compar.h +limits.o: $(hdrdir)/ruby/internal/intern/complex.h +limits.o: $(hdrdir)/ruby/internal/intern/cont.h +limits.o: $(hdrdir)/ruby/internal/intern/dir.h +limits.o: $(hdrdir)/ruby/internal/intern/enum.h +limits.o: $(hdrdir)/ruby/internal/intern/enumerator.h +limits.o: $(hdrdir)/ruby/internal/intern/error.h +limits.o: $(hdrdir)/ruby/internal/intern/eval.h +limits.o: $(hdrdir)/ruby/internal/intern/file.h +limits.o: $(hdrdir)/ruby/internal/intern/gc.h +limits.o: $(hdrdir)/ruby/internal/intern/hash.h +limits.o: $(hdrdir)/ruby/internal/intern/io.h +limits.o: $(hdrdir)/ruby/internal/intern/load.h +limits.o: $(hdrdir)/ruby/internal/intern/marshal.h +limits.o: $(hdrdir)/ruby/internal/intern/numeric.h +limits.o: $(hdrdir)/ruby/internal/intern/object.h +limits.o: $(hdrdir)/ruby/internal/intern/parse.h +limits.o: $(hdrdir)/ruby/internal/intern/proc.h +limits.o: $(hdrdir)/ruby/internal/intern/process.h +limits.o: $(hdrdir)/ruby/internal/intern/random.h +limits.o: $(hdrdir)/ruby/internal/intern/range.h +limits.o: $(hdrdir)/ruby/internal/intern/rational.h +limits.o: $(hdrdir)/ruby/internal/intern/re.h +limits.o: $(hdrdir)/ruby/internal/intern/ruby.h +limits.o: $(hdrdir)/ruby/internal/intern/select.h +limits.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +limits.o: $(hdrdir)/ruby/internal/intern/signal.h +limits.o: $(hdrdir)/ruby/internal/intern/sprintf.h +limits.o: $(hdrdir)/ruby/internal/intern/string.h +limits.o: $(hdrdir)/ruby/internal/intern/struct.h +limits.o: $(hdrdir)/ruby/internal/intern/thread.h +limits.o: $(hdrdir)/ruby/internal/intern/time.h +limits.o: $(hdrdir)/ruby/internal/intern/variable.h +limits.o: $(hdrdir)/ruby/internal/intern/vm.h +limits.o: $(hdrdir)/ruby/internal/interpreter.h +limits.o: $(hdrdir)/ruby/internal/iterator.h +limits.o: $(hdrdir)/ruby/internal/memory.h +limits.o: $(hdrdir)/ruby/internal/method.h +limits.o: $(hdrdir)/ruby/internal/module.h +limits.o: $(hdrdir)/ruby/internal/newobj.h +limits.o: $(hdrdir)/ruby/internal/rgengc.h +limits.o: $(hdrdir)/ruby/internal/scan_args.h +limits.o: $(hdrdir)/ruby/internal/special_consts.h +limits.o: $(hdrdir)/ruby/internal/static_assert.h +limits.o: $(hdrdir)/ruby/internal/stdalign.h +limits.o: $(hdrdir)/ruby/internal/stdbool.h +limits.o: $(hdrdir)/ruby/internal/symbol.h +limits.o: $(hdrdir)/ruby/internal/value.h +limits.o: $(hdrdir)/ruby/internal/value_type.h +limits.o: $(hdrdir)/ruby/internal/variable.h +limits.o: $(hdrdir)/ruby/internal/warning_push.h +limits.o: $(hdrdir)/ruby/internal/xmalloc.h limits.o: $(hdrdir)/ruby/missing.h limits.o: $(hdrdir)/ruby/ruby.h limits.o: $(hdrdir)/ruby/st.h @@ -29,8 +176,155 @@ sizes.o: $(RUBY_EXTCONF_H) sizes.o: $(arch_hdrdir)/ruby/config.h sizes.o: $(hdrdir)/ruby/assert.h sizes.o: $(hdrdir)/ruby/backward.h +sizes.o: $(hdrdir)/ruby/backward/2/assume.h +sizes.o: $(hdrdir)/ruby/backward/2/attributes.h +sizes.o: $(hdrdir)/ruby/backward/2/bool.h +sizes.o: $(hdrdir)/ruby/backward/2/inttypes.h +sizes.o: $(hdrdir)/ruby/backward/2/limits.h +sizes.o: $(hdrdir)/ruby/backward/2/long_long.h +sizes.o: $(hdrdir)/ruby/backward/2/stdalign.h +sizes.o: $(hdrdir)/ruby/backward/2/stdarg.h sizes.o: $(hdrdir)/ruby/defines.h sizes.o: $(hdrdir)/ruby/intern.h +sizes.o: $(hdrdir)/ruby/internal/anyargs.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/char.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/double.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/int.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/long.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/short.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +sizes.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +sizes.o: $(hdrdir)/ruby/internal/assume.h +sizes.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +sizes.o: $(hdrdir)/ruby/internal/attr/artificial.h +sizes.o: $(hdrdir)/ruby/internal/attr/cold.h +sizes.o: $(hdrdir)/ruby/internal/attr/const.h +sizes.o: $(hdrdir)/ruby/internal/attr/constexpr.h +sizes.o: $(hdrdir)/ruby/internal/attr/deprecated.h +sizes.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +sizes.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +sizes.o: $(hdrdir)/ruby/internal/attr/error.h +sizes.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +sizes.o: $(hdrdir)/ruby/internal/attr/forceinline.h +sizes.o: $(hdrdir)/ruby/internal/attr/format.h +sizes.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +sizes.o: $(hdrdir)/ruby/internal/attr/noalias.h +sizes.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +sizes.o: $(hdrdir)/ruby/internal/attr/noexcept.h +sizes.o: $(hdrdir)/ruby/internal/attr/noinline.h +sizes.o: $(hdrdir)/ruby/internal/attr/nonnull.h +sizes.o: $(hdrdir)/ruby/internal/attr/noreturn.h +sizes.o: $(hdrdir)/ruby/internal/attr/pure.h +sizes.o: $(hdrdir)/ruby/internal/attr/restrict.h +sizes.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +sizes.o: $(hdrdir)/ruby/internal/attr/warning.h +sizes.o: $(hdrdir)/ruby/internal/attr/weakref.h +sizes.o: $(hdrdir)/ruby/internal/cast.h +sizes.o: $(hdrdir)/ruby/internal/compiler_is.h +sizes.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +sizes.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +sizes.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +sizes.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +sizes.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +sizes.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +sizes.o: $(hdrdir)/ruby/internal/compiler_since.h +sizes.o: $(hdrdir)/ruby/internal/config.h +sizes.o: $(hdrdir)/ruby/internal/constant_p.h +sizes.o: $(hdrdir)/ruby/internal/core.h +sizes.o: $(hdrdir)/ruby/internal/core/rarray.h +sizes.o: $(hdrdir)/ruby/internal/core/rbasic.h +sizes.o: $(hdrdir)/ruby/internal/core/rbignum.h +sizes.o: $(hdrdir)/ruby/internal/core/rclass.h +sizes.o: $(hdrdir)/ruby/internal/core/rdata.h +sizes.o: $(hdrdir)/ruby/internal/core/rfile.h +sizes.o: $(hdrdir)/ruby/internal/core/rhash.h +sizes.o: $(hdrdir)/ruby/internal/core/robject.h +sizes.o: $(hdrdir)/ruby/internal/core/rregexp.h +sizes.o: $(hdrdir)/ruby/internal/core/rstring.h +sizes.o: $(hdrdir)/ruby/internal/core/rstruct.h +sizes.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +sizes.o: $(hdrdir)/ruby/internal/ctype.h +sizes.o: $(hdrdir)/ruby/internal/dllexport.h +sizes.o: $(hdrdir)/ruby/internal/dosish.h +sizes.o: $(hdrdir)/ruby/internal/error.h +sizes.o: $(hdrdir)/ruby/internal/eval.h +sizes.o: $(hdrdir)/ruby/internal/event.h +sizes.o: $(hdrdir)/ruby/internal/fl_type.h +sizes.o: $(hdrdir)/ruby/internal/gc.h +sizes.o: $(hdrdir)/ruby/internal/glob.h +sizes.o: $(hdrdir)/ruby/internal/globals.h +sizes.o: $(hdrdir)/ruby/internal/has/attribute.h +sizes.o: $(hdrdir)/ruby/internal/has/builtin.h +sizes.o: $(hdrdir)/ruby/internal/has/c_attribute.h +sizes.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +sizes.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +sizes.o: $(hdrdir)/ruby/internal/has/extension.h +sizes.o: $(hdrdir)/ruby/internal/has/feature.h +sizes.o: $(hdrdir)/ruby/internal/has/warning.h +sizes.o: $(hdrdir)/ruby/internal/intern/array.h +sizes.o: $(hdrdir)/ruby/internal/intern/bignum.h +sizes.o: $(hdrdir)/ruby/internal/intern/class.h +sizes.o: $(hdrdir)/ruby/internal/intern/compar.h +sizes.o: $(hdrdir)/ruby/internal/intern/complex.h +sizes.o: $(hdrdir)/ruby/internal/intern/cont.h +sizes.o: $(hdrdir)/ruby/internal/intern/dir.h +sizes.o: $(hdrdir)/ruby/internal/intern/enum.h +sizes.o: $(hdrdir)/ruby/internal/intern/enumerator.h +sizes.o: $(hdrdir)/ruby/internal/intern/error.h +sizes.o: $(hdrdir)/ruby/internal/intern/eval.h +sizes.o: $(hdrdir)/ruby/internal/intern/file.h +sizes.o: $(hdrdir)/ruby/internal/intern/gc.h +sizes.o: $(hdrdir)/ruby/internal/intern/hash.h +sizes.o: $(hdrdir)/ruby/internal/intern/io.h +sizes.o: $(hdrdir)/ruby/internal/intern/load.h +sizes.o: $(hdrdir)/ruby/internal/intern/marshal.h +sizes.o: $(hdrdir)/ruby/internal/intern/numeric.h +sizes.o: $(hdrdir)/ruby/internal/intern/object.h +sizes.o: $(hdrdir)/ruby/internal/intern/parse.h +sizes.o: $(hdrdir)/ruby/internal/intern/proc.h +sizes.o: $(hdrdir)/ruby/internal/intern/process.h +sizes.o: $(hdrdir)/ruby/internal/intern/random.h +sizes.o: $(hdrdir)/ruby/internal/intern/range.h +sizes.o: $(hdrdir)/ruby/internal/intern/rational.h +sizes.o: $(hdrdir)/ruby/internal/intern/re.h +sizes.o: $(hdrdir)/ruby/internal/intern/ruby.h +sizes.o: $(hdrdir)/ruby/internal/intern/select.h +sizes.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +sizes.o: $(hdrdir)/ruby/internal/intern/signal.h +sizes.o: $(hdrdir)/ruby/internal/intern/sprintf.h +sizes.o: $(hdrdir)/ruby/internal/intern/string.h +sizes.o: $(hdrdir)/ruby/internal/intern/struct.h +sizes.o: $(hdrdir)/ruby/internal/intern/thread.h +sizes.o: $(hdrdir)/ruby/internal/intern/time.h +sizes.o: $(hdrdir)/ruby/internal/intern/variable.h +sizes.o: $(hdrdir)/ruby/internal/intern/vm.h +sizes.o: $(hdrdir)/ruby/internal/interpreter.h +sizes.o: $(hdrdir)/ruby/internal/iterator.h +sizes.o: $(hdrdir)/ruby/internal/memory.h +sizes.o: $(hdrdir)/ruby/internal/method.h +sizes.o: $(hdrdir)/ruby/internal/module.h +sizes.o: $(hdrdir)/ruby/internal/newobj.h +sizes.o: $(hdrdir)/ruby/internal/rgengc.h +sizes.o: $(hdrdir)/ruby/internal/scan_args.h +sizes.o: $(hdrdir)/ruby/internal/special_consts.h +sizes.o: $(hdrdir)/ruby/internal/static_assert.h +sizes.o: $(hdrdir)/ruby/internal/stdalign.h +sizes.o: $(hdrdir)/ruby/internal/stdbool.h +sizes.o: $(hdrdir)/ruby/internal/symbol.h +sizes.o: $(hdrdir)/ruby/internal/value.h +sizes.o: $(hdrdir)/ruby/internal/value_type.h +sizes.o: $(hdrdir)/ruby/internal/variable.h +sizes.o: $(hdrdir)/ruby/internal/warning_push.h +sizes.o: $(hdrdir)/ruby/internal/xmalloc.h sizes.o: $(hdrdir)/ruby/missing.h sizes.o: $(hdrdir)/ruby/ruby.h sizes.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/readline/depend b/ruby/ext/readline/depend index 2dde7fca5..818770b80 100644 --- a/ruby/ext/readline/depend +++ b/ruby/ext/readline/depend @@ -3,9 +3,165 @@ readline.o: $(RUBY_EXTCONF_H) readline.o: $(arch_hdrdir)/ruby/config.h readline.o: $(hdrdir)/ruby/assert.h readline.o: $(hdrdir)/ruby/backward.h +readline.o: $(hdrdir)/ruby/backward/2/assume.h +readline.o: $(hdrdir)/ruby/backward/2/attributes.h +readline.o: $(hdrdir)/ruby/backward/2/bool.h +readline.o: $(hdrdir)/ruby/backward/2/inttypes.h +readline.o: $(hdrdir)/ruby/backward/2/limits.h +readline.o: $(hdrdir)/ruby/backward/2/long_long.h +readline.o: $(hdrdir)/ruby/backward/2/stdalign.h +readline.o: $(hdrdir)/ruby/backward/2/stdarg.h readline.o: $(hdrdir)/ruby/defines.h readline.o: $(hdrdir)/ruby/encoding.h readline.o: $(hdrdir)/ruby/intern.h +readline.o: $(hdrdir)/ruby/internal/anyargs.h +readline.o: $(hdrdir)/ruby/internal/arithmetic.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/char.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/double.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/int.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/long.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/short.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +readline.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +readline.o: $(hdrdir)/ruby/internal/assume.h +readline.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +readline.o: $(hdrdir)/ruby/internal/attr/artificial.h +readline.o: $(hdrdir)/ruby/internal/attr/cold.h +readline.o: $(hdrdir)/ruby/internal/attr/const.h +readline.o: $(hdrdir)/ruby/internal/attr/constexpr.h +readline.o: $(hdrdir)/ruby/internal/attr/deprecated.h +readline.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +readline.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +readline.o: $(hdrdir)/ruby/internal/attr/error.h +readline.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +readline.o: $(hdrdir)/ruby/internal/attr/forceinline.h +readline.o: $(hdrdir)/ruby/internal/attr/format.h +readline.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +readline.o: $(hdrdir)/ruby/internal/attr/noalias.h +readline.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +readline.o: $(hdrdir)/ruby/internal/attr/noexcept.h +readline.o: $(hdrdir)/ruby/internal/attr/noinline.h +readline.o: $(hdrdir)/ruby/internal/attr/nonnull.h +readline.o: $(hdrdir)/ruby/internal/attr/noreturn.h +readline.o: $(hdrdir)/ruby/internal/attr/pure.h +readline.o: $(hdrdir)/ruby/internal/attr/restrict.h +readline.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +readline.o: $(hdrdir)/ruby/internal/attr/warning.h +readline.o: $(hdrdir)/ruby/internal/attr/weakref.h +readline.o: $(hdrdir)/ruby/internal/cast.h +readline.o: $(hdrdir)/ruby/internal/compiler_is.h +readline.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +readline.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +readline.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +readline.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +readline.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +readline.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +readline.o: $(hdrdir)/ruby/internal/compiler_since.h +readline.o: $(hdrdir)/ruby/internal/config.h +readline.o: $(hdrdir)/ruby/internal/constant_p.h +readline.o: $(hdrdir)/ruby/internal/core.h +readline.o: $(hdrdir)/ruby/internal/core/rarray.h +readline.o: $(hdrdir)/ruby/internal/core/rbasic.h +readline.o: $(hdrdir)/ruby/internal/core/rbignum.h +readline.o: $(hdrdir)/ruby/internal/core/rclass.h +readline.o: $(hdrdir)/ruby/internal/core/rdata.h +readline.o: $(hdrdir)/ruby/internal/core/rfile.h +readline.o: $(hdrdir)/ruby/internal/core/rhash.h +readline.o: $(hdrdir)/ruby/internal/core/robject.h +readline.o: $(hdrdir)/ruby/internal/core/rregexp.h +readline.o: $(hdrdir)/ruby/internal/core/rstring.h +readline.o: $(hdrdir)/ruby/internal/core/rstruct.h +readline.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +readline.o: $(hdrdir)/ruby/internal/ctype.h +readline.o: $(hdrdir)/ruby/internal/dllexport.h +readline.o: $(hdrdir)/ruby/internal/dosish.h +readline.o: $(hdrdir)/ruby/internal/encoding/coderange.h +readline.o: $(hdrdir)/ruby/internal/encoding/ctype.h +readline.o: $(hdrdir)/ruby/internal/encoding/encoding.h +readline.o: $(hdrdir)/ruby/internal/encoding/pathname.h +readline.o: $(hdrdir)/ruby/internal/encoding/re.h +readline.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +readline.o: $(hdrdir)/ruby/internal/encoding/string.h +readline.o: $(hdrdir)/ruby/internal/encoding/symbol.h +readline.o: $(hdrdir)/ruby/internal/encoding/transcode.h +readline.o: $(hdrdir)/ruby/internal/error.h +readline.o: $(hdrdir)/ruby/internal/eval.h +readline.o: $(hdrdir)/ruby/internal/event.h +readline.o: $(hdrdir)/ruby/internal/fl_type.h +readline.o: $(hdrdir)/ruby/internal/gc.h +readline.o: $(hdrdir)/ruby/internal/glob.h +readline.o: $(hdrdir)/ruby/internal/globals.h +readline.o: $(hdrdir)/ruby/internal/has/attribute.h +readline.o: $(hdrdir)/ruby/internal/has/builtin.h +readline.o: $(hdrdir)/ruby/internal/has/c_attribute.h +readline.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +readline.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +readline.o: $(hdrdir)/ruby/internal/has/extension.h +readline.o: $(hdrdir)/ruby/internal/has/feature.h +readline.o: $(hdrdir)/ruby/internal/has/warning.h +readline.o: $(hdrdir)/ruby/internal/intern/array.h +readline.o: $(hdrdir)/ruby/internal/intern/bignum.h +readline.o: $(hdrdir)/ruby/internal/intern/class.h +readline.o: $(hdrdir)/ruby/internal/intern/compar.h +readline.o: $(hdrdir)/ruby/internal/intern/complex.h +readline.o: $(hdrdir)/ruby/internal/intern/cont.h +readline.o: $(hdrdir)/ruby/internal/intern/dir.h +readline.o: $(hdrdir)/ruby/internal/intern/enum.h +readline.o: $(hdrdir)/ruby/internal/intern/enumerator.h +readline.o: $(hdrdir)/ruby/internal/intern/error.h +readline.o: $(hdrdir)/ruby/internal/intern/eval.h +readline.o: $(hdrdir)/ruby/internal/intern/file.h +readline.o: $(hdrdir)/ruby/internal/intern/gc.h +readline.o: $(hdrdir)/ruby/internal/intern/hash.h +readline.o: $(hdrdir)/ruby/internal/intern/io.h +readline.o: $(hdrdir)/ruby/internal/intern/load.h +readline.o: $(hdrdir)/ruby/internal/intern/marshal.h +readline.o: $(hdrdir)/ruby/internal/intern/numeric.h +readline.o: $(hdrdir)/ruby/internal/intern/object.h +readline.o: $(hdrdir)/ruby/internal/intern/parse.h +readline.o: $(hdrdir)/ruby/internal/intern/proc.h +readline.o: $(hdrdir)/ruby/internal/intern/process.h +readline.o: $(hdrdir)/ruby/internal/intern/random.h +readline.o: $(hdrdir)/ruby/internal/intern/range.h +readline.o: $(hdrdir)/ruby/internal/intern/rational.h +readline.o: $(hdrdir)/ruby/internal/intern/re.h +readline.o: $(hdrdir)/ruby/internal/intern/ruby.h +readline.o: $(hdrdir)/ruby/internal/intern/select.h +readline.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +readline.o: $(hdrdir)/ruby/internal/intern/signal.h +readline.o: $(hdrdir)/ruby/internal/intern/sprintf.h +readline.o: $(hdrdir)/ruby/internal/intern/string.h +readline.o: $(hdrdir)/ruby/internal/intern/struct.h +readline.o: $(hdrdir)/ruby/internal/intern/thread.h +readline.o: $(hdrdir)/ruby/internal/intern/time.h +readline.o: $(hdrdir)/ruby/internal/intern/variable.h +readline.o: $(hdrdir)/ruby/internal/intern/vm.h +readline.o: $(hdrdir)/ruby/internal/interpreter.h +readline.o: $(hdrdir)/ruby/internal/iterator.h +readline.o: $(hdrdir)/ruby/internal/memory.h +readline.o: $(hdrdir)/ruby/internal/method.h +readline.o: $(hdrdir)/ruby/internal/module.h +readline.o: $(hdrdir)/ruby/internal/newobj.h +readline.o: $(hdrdir)/ruby/internal/rgengc.h +readline.o: $(hdrdir)/ruby/internal/scan_args.h +readline.o: $(hdrdir)/ruby/internal/special_consts.h +readline.o: $(hdrdir)/ruby/internal/static_assert.h +readline.o: $(hdrdir)/ruby/internal/stdalign.h +readline.o: $(hdrdir)/ruby/internal/stdbool.h +readline.o: $(hdrdir)/ruby/internal/symbol.h +readline.o: $(hdrdir)/ruby/internal/value.h +readline.o: $(hdrdir)/ruby/internal/value_type.h +readline.o: $(hdrdir)/ruby/internal/variable.h +readline.o: $(hdrdir)/ruby/internal/warning_push.h +readline.o: $(hdrdir)/ruby/internal/xmalloc.h readline.o: $(hdrdir)/ruby/io.h readline.o: $(hdrdir)/ruby/missing.h readline.o: $(hdrdir)/ruby/onigmo.h diff --git a/ruby/ext/readline/depend-gem b/ruby/ext/readline/depend-gem new file mode 100644 index 000000000..df01bd2a8 --- /dev/null +++ b/ruby/ext/readline/depend-gem @@ -0,0 +1,4 @@ +# AUTOGENERATED DEPENDENCIES START +readline.o: $(RUBY_EXTCONF_H) +readline.o: readline.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/readline/readline-ext.gemspec b/ruby/ext/readline/readline-ext.gemspec index b85e07dd9..177ee2152 100644 --- a/ruby/ext/readline/readline-ext.gemspec +++ b/ruby/ext/readline/readline-ext.gemspec @@ -1,13 +1,13 @@ Gem::Specification.new do |spec| spec.name = "readline-ext" - spec.version = "0.1.0" + spec.version = "0.1.4" spec.authors = ["Yukihiro Matsumoto"] spec.email = ["matz@ruby-lang.org"] spec.summary = %q{Provides an interface for GNU Readline and Edit Line (libedit).} spec.description = %q{Provides an interface for GNU Readline and Edit Line (libedit).} spec.homepage = "https://github.com/ruby/readline-ext" - spec.license = "BSD-2-Clause" + spec.licenses = ["Ruby", "BSD-2-Clause"] spec.extensions = %w[ext/readline/extconf.rb] spec.metadata["homepage_uri"] = spec.homepage diff --git a/ruby/ext/readline/readline.c b/ruby/ext/readline/readline.c index 646be2b19..5ae037dd4 100644 --- a/ruby/ext/readline/readline.c +++ b/ruby/ext/readline/readline.c @@ -78,7 +78,7 @@ static ID id_special_prefixes; #ifndef HAVE_RL_USERNAME_COMPLETION_FUNCTION # define rl_username_completion_function username_completion_function #else -char *rl_username_completion_function(const char *, int); +RUBY_EXTERN char *rl_username_completion_function(const char *, int); #endif #ifndef HAVE_RL_COMPLETION_MATCHES # define rl_completion_matches completion_matches @@ -689,14 +689,13 @@ readline_s_insert_text(VALUE self, VALUE str) #endif #if defined(HAVE_RL_DELETE_TEXT) -int rl_delete_text(int, int); +RUBY_EXTERN int rl_delete_text(int, int); static const char * str_subpos(const char *ptr, const char *end, long beg, long *sublen, rb_encoding *enc) { VALUE str = rb_enc_str_new_static(ptr, end-ptr, enc); OBJ_FREEZE(str); ptr = rb_str_subpos(str, beg, sublen); - rb_gc_force_recycle(str); return ptr; } @@ -1148,7 +1147,7 @@ readline_s_get_screen_size(VALUE self) #endif #ifdef HAVE_RL_VI_EDITING_MODE -int rl_vi_editing_mode(int, int); +RUBY_EXTERN int rl_vi_editing_mode(int, int); /* * call-seq: * Readline.vi_editing_mode -> nil @@ -1187,7 +1186,7 @@ readline_s_vi_editing_mode_p(VALUE self) #endif #ifdef HAVE_RL_EMACS_EDITING_MODE -int rl_emacs_editing_mode(int, int); +RUBY_EXTERN int rl_emacs_editing_mode(int, int); /* * call-seq: * Readline.emacs_editing_mode -> nil @@ -1672,7 +1671,7 @@ readline_s_get_filename_quote_characters(VALUE self) #endif #ifdef HAVE_RL_REFRESH_LINE -int rl_refresh_line(int, int); +RUBY_EXTERN int rl_refresh_line(int, int); /* * call-seq: * Readline.refresh_line -> nil @@ -1918,8 +1917,11 @@ username_completion_proc_call(VALUE self, VALUE str) return result; } +#ifdef HAVE_RL_CATCH_SIGNALS +RUBY_EXTERN int rl_catch_signals; +#endif #ifdef HAVE_RL_CLEAR_SIGNALS -int rl_clear_signals(void); +RUBY_EXTERN int rl_clear_signals(void); #endif #undef rb_intern @@ -2060,7 +2062,7 @@ Init_readline(void) * The history buffer. It extends Enumerable module, so it behaves * just like an array. * For example, gets the fifth content that the user input by - * HISTORY[4]. + * HISTORY[4]. */ rb_define_const(mReadline, "HISTORY", history); @@ -2088,6 +2090,7 @@ Init_readline(void) #if defined HAVE_CLEAR_HISTORY || defined HAVE_REMOVE_HISTORY if (strncmp(rl_library_version, EDIT_LINE_LIBRARY_VERSION, strlen(EDIT_LINE_LIBRARY_VERSION)) == 0) { + prepare_readline(); add_history("1"); if (history_get(history_get_offset_func(0)) == NULL) { history_get_offset_func = history_get_offset_0; diff --git a/ruby/ext/ripper/depend b/ruby/ext/ripper/depend index 69759ec71..9f4b1b53b 100644 --- a/ruby/ext/ripper/depend +++ b/ruby/ext/ripper/depend @@ -22,6 +22,7 @@ ripper.y: $(srcdir)/tools/preproc.rb $(srcdir)/tools/dsl.rb $(top_srcdir)/parse. $(Q) $(RUBY) $(top_srcdir)/tool/id2token.rb --path-separator=.$(PATH_SEPARATOR)./ \ --vpath=$(VPATH)$(PATH_SEPARATOR)$(top_srcdir) id.h $(top_srcdir)/parse.y > ripper.tmp.y $(Q) $(RUBY) $(top_srcdir)/tool/pure_parser.rb ripper.tmp.y $(BISON) + $(Q) $(RM) ripper.tmp.y.bak $(Q) $(RUBY) $(srcdir)/tools/preproc.rb ripper.tmp.y --output=$@ $(Q) $(RM) ripper.tmp.y @@ -50,23 +51,208 @@ ripper.E: ripper.c # AUTOGENERATED DEPENDENCIES START ripper.o: $(RUBY_EXTCONF_H) ripper.o: $(arch_hdrdir)/ruby/config.h -ripper.o: $(hdrdir)/ruby.h ripper.o: $(hdrdir)/ruby/assert.h ripper.o: $(hdrdir)/ruby/backward.h +ripper.o: $(hdrdir)/ruby/backward/2/assume.h +ripper.o: $(hdrdir)/ruby/backward/2/attributes.h +ripper.o: $(hdrdir)/ruby/backward/2/bool.h +ripper.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +ripper.o: $(hdrdir)/ruby/backward/2/inttypes.h +ripper.o: $(hdrdir)/ruby/backward/2/limits.h +ripper.o: $(hdrdir)/ruby/backward/2/long_long.h +ripper.o: $(hdrdir)/ruby/backward/2/stdalign.h +ripper.o: $(hdrdir)/ruby/backward/2/stdarg.h ripper.o: $(hdrdir)/ruby/defines.h ripper.o: $(hdrdir)/ruby/encoding.h ripper.o: $(hdrdir)/ruby/intern.h +ripper.o: $(hdrdir)/ruby/internal/anyargs.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ripper.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ripper.o: $(hdrdir)/ruby/internal/assume.h +ripper.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ripper.o: $(hdrdir)/ruby/internal/attr/artificial.h +ripper.o: $(hdrdir)/ruby/internal/attr/cold.h +ripper.o: $(hdrdir)/ruby/internal/attr/const.h +ripper.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ripper.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ripper.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ripper.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ripper.o: $(hdrdir)/ruby/internal/attr/error.h +ripper.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ripper.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ripper.o: $(hdrdir)/ruby/internal/attr/format.h +ripper.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ripper.o: $(hdrdir)/ruby/internal/attr/noalias.h +ripper.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ripper.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ripper.o: $(hdrdir)/ruby/internal/attr/noinline.h +ripper.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ripper.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ripper.o: $(hdrdir)/ruby/internal/attr/pure.h +ripper.o: $(hdrdir)/ruby/internal/attr/restrict.h +ripper.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ripper.o: $(hdrdir)/ruby/internal/attr/warning.h +ripper.o: $(hdrdir)/ruby/internal/attr/weakref.h +ripper.o: $(hdrdir)/ruby/internal/cast.h +ripper.o: $(hdrdir)/ruby/internal/compiler_is.h +ripper.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ripper.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ripper.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ripper.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ripper.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ripper.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ripper.o: $(hdrdir)/ruby/internal/compiler_since.h +ripper.o: $(hdrdir)/ruby/internal/config.h +ripper.o: $(hdrdir)/ruby/internal/constant_p.h +ripper.o: $(hdrdir)/ruby/internal/core.h +ripper.o: $(hdrdir)/ruby/internal/core/rarray.h +ripper.o: $(hdrdir)/ruby/internal/core/rbasic.h +ripper.o: $(hdrdir)/ruby/internal/core/rbignum.h +ripper.o: $(hdrdir)/ruby/internal/core/rclass.h +ripper.o: $(hdrdir)/ruby/internal/core/rdata.h +ripper.o: $(hdrdir)/ruby/internal/core/rfile.h +ripper.o: $(hdrdir)/ruby/internal/core/rhash.h +ripper.o: $(hdrdir)/ruby/internal/core/robject.h +ripper.o: $(hdrdir)/ruby/internal/core/rregexp.h +ripper.o: $(hdrdir)/ruby/internal/core/rstring.h +ripper.o: $(hdrdir)/ruby/internal/core/rstruct.h +ripper.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ripper.o: $(hdrdir)/ruby/internal/ctype.h +ripper.o: $(hdrdir)/ruby/internal/dllexport.h +ripper.o: $(hdrdir)/ruby/internal/dosish.h +ripper.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ripper.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ripper.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ripper.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ripper.o: $(hdrdir)/ruby/internal/encoding/re.h +ripper.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ripper.o: $(hdrdir)/ruby/internal/encoding/string.h +ripper.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ripper.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ripper.o: $(hdrdir)/ruby/internal/error.h +ripper.o: $(hdrdir)/ruby/internal/eval.h +ripper.o: $(hdrdir)/ruby/internal/event.h +ripper.o: $(hdrdir)/ruby/internal/fl_type.h +ripper.o: $(hdrdir)/ruby/internal/gc.h +ripper.o: $(hdrdir)/ruby/internal/glob.h +ripper.o: $(hdrdir)/ruby/internal/globals.h +ripper.o: $(hdrdir)/ruby/internal/has/attribute.h +ripper.o: $(hdrdir)/ruby/internal/has/builtin.h +ripper.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ripper.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ripper.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ripper.o: $(hdrdir)/ruby/internal/has/extension.h +ripper.o: $(hdrdir)/ruby/internal/has/feature.h +ripper.o: $(hdrdir)/ruby/internal/has/warning.h +ripper.o: $(hdrdir)/ruby/internal/intern/array.h +ripper.o: $(hdrdir)/ruby/internal/intern/bignum.h +ripper.o: $(hdrdir)/ruby/internal/intern/class.h +ripper.o: $(hdrdir)/ruby/internal/intern/compar.h +ripper.o: $(hdrdir)/ruby/internal/intern/complex.h +ripper.o: $(hdrdir)/ruby/internal/intern/cont.h +ripper.o: $(hdrdir)/ruby/internal/intern/dir.h +ripper.o: $(hdrdir)/ruby/internal/intern/enum.h +ripper.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ripper.o: $(hdrdir)/ruby/internal/intern/error.h +ripper.o: $(hdrdir)/ruby/internal/intern/eval.h +ripper.o: $(hdrdir)/ruby/internal/intern/file.h +ripper.o: $(hdrdir)/ruby/internal/intern/gc.h +ripper.o: $(hdrdir)/ruby/internal/intern/hash.h +ripper.o: $(hdrdir)/ruby/internal/intern/io.h +ripper.o: $(hdrdir)/ruby/internal/intern/load.h +ripper.o: $(hdrdir)/ruby/internal/intern/marshal.h +ripper.o: $(hdrdir)/ruby/internal/intern/numeric.h +ripper.o: $(hdrdir)/ruby/internal/intern/object.h +ripper.o: $(hdrdir)/ruby/internal/intern/parse.h +ripper.o: $(hdrdir)/ruby/internal/intern/proc.h +ripper.o: $(hdrdir)/ruby/internal/intern/process.h +ripper.o: $(hdrdir)/ruby/internal/intern/random.h +ripper.o: $(hdrdir)/ruby/internal/intern/range.h +ripper.o: $(hdrdir)/ruby/internal/intern/rational.h +ripper.o: $(hdrdir)/ruby/internal/intern/re.h +ripper.o: $(hdrdir)/ruby/internal/intern/ruby.h +ripper.o: $(hdrdir)/ruby/internal/intern/select.h +ripper.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ripper.o: $(hdrdir)/ruby/internal/intern/signal.h +ripper.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ripper.o: $(hdrdir)/ruby/internal/intern/string.h +ripper.o: $(hdrdir)/ruby/internal/intern/struct.h +ripper.o: $(hdrdir)/ruby/internal/intern/thread.h +ripper.o: $(hdrdir)/ruby/internal/intern/time.h +ripper.o: $(hdrdir)/ruby/internal/intern/variable.h +ripper.o: $(hdrdir)/ruby/internal/intern/vm.h +ripper.o: $(hdrdir)/ruby/internal/interpreter.h +ripper.o: $(hdrdir)/ruby/internal/iterator.h +ripper.o: $(hdrdir)/ruby/internal/memory.h +ripper.o: $(hdrdir)/ruby/internal/method.h +ripper.o: $(hdrdir)/ruby/internal/module.h +ripper.o: $(hdrdir)/ruby/internal/newobj.h +ripper.o: $(hdrdir)/ruby/internal/rgengc.h +ripper.o: $(hdrdir)/ruby/internal/scan_args.h +ripper.o: $(hdrdir)/ruby/internal/special_consts.h +ripper.o: $(hdrdir)/ruby/internal/static_assert.h +ripper.o: $(hdrdir)/ruby/internal/stdalign.h +ripper.o: $(hdrdir)/ruby/internal/stdbool.h +ripper.o: $(hdrdir)/ruby/internal/symbol.h +ripper.o: $(hdrdir)/ruby/internal/value.h +ripper.o: $(hdrdir)/ruby/internal/value_type.h +ripper.o: $(hdrdir)/ruby/internal/variable.h +ripper.o: $(hdrdir)/ruby/internal/warning_push.h +ripper.o: $(hdrdir)/ruby/internal/xmalloc.h +ripper.o: $(hdrdir)/ruby/io.h ripper.o: $(hdrdir)/ruby/missing.h ripper.o: $(hdrdir)/ruby/onigmo.h ripper.o: $(hdrdir)/ruby/oniguruma.h +ripper.o: $(hdrdir)/ruby/ractor.h ripper.o: $(hdrdir)/ruby/regex.h ripper.o: $(hdrdir)/ruby/ruby.h ripper.o: $(hdrdir)/ruby/st.h ripper.o: $(hdrdir)/ruby/subst.h ripper.o: $(hdrdir)/ruby/util.h +ripper.o: $(top_srcdir)/constant.h +ripper.o: $(top_srcdir)/id_table.h ripper.o: $(top_srcdir)/internal.h +ripper.o: $(top_srcdir)/internal/array.h +ripper.o: $(top_srcdir)/internal/bignum.h +ripper.o: $(top_srcdir)/internal/bits.h +ripper.o: $(top_srcdir)/internal/compile.h +ripper.o: $(top_srcdir)/internal/compilers.h +ripper.o: $(top_srcdir)/internal/complex.h +ripper.o: $(top_srcdir)/internal/error.h +ripper.o: $(top_srcdir)/internal/fixnum.h +ripper.o: $(top_srcdir)/internal/gc.h +ripper.o: $(top_srcdir)/internal/hash.h +ripper.o: $(top_srcdir)/internal/imemo.h +ripper.o: $(top_srcdir)/internal/io.h +ripper.o: $(top_srcdir)/internal/numeric.h +ripper.o: $(top_srcdir)/internal/parse.h +ripper.o: $(top_srcdir)/internal/rational.h +ripper.o: $(top_srcdir)/internal/re.h +ripper.o: $(top_srcdir)/internal/serial.h +ripper.o: $(top_srcdir)/internal/static_assert.h +ripper.o: $(top_srcdir)/internal/string.h +ripper.o: $(top_srcdir)/internal/symbol.h +ripper.o: $(top_srcdir)/internal/thread.h +ripper.o: $(top_srcdir)/internal/variable.h +ripper.o: $(top_srcdir)/internal/vm.h +ripper.o: $(top_srcdir)/internal/warnings.h ripper.o: $(top_srcdir)/node.h ripper.o: $(top_srcdir)/regenc.h +ripper.o: $(top_srcdir)/ruby_assert.h ripper.o: $(top_srcdir)/symbol.h ripper.o: ../../probes.h ripper.o: eventids2.c diff --git a/ruby/ext/ripper/eventids2.c b/ruby/ext/ripper/eventids2.c index cdac2081e..ac38663f2 100644 --- a/ruby/ext/ripper/eventids2.c +++ b/ruby/ext/ripper/eventids2.c @@ -1,12 +1,20 @@ enum { tIGNORED_NL = tLAST_TOKEN + 1, +# define tIGNORED_NL ((enum yytokentype)tIGNORED_NL) tCOMMENT, +# define tCOMMENT ((enum yytokentype)tCOMMENT) tEMBDOC_BEG, +# define tEMBDOC_BEG ((enum yytokentype)tEMBDOC_BEG) tEMBDOC, +# define tEMBDOC ((enum yytokentype)tEMBDOC) tEMBDOC_END, +# define tEMBDOC_END ((enum yytokentype)tEMBDOC_END) tHEREDOC_BEG, +# define tHEREDOC_BEG ((enum yytokentype)tHEREDOC_BEG) tHEREDOC_END, - k__END__ +# define tHEREDOC_END ((enum yytokentype)tHEREDOC_END) + k__END__, +# define k__END__ ((enum yytokentype)k__END__) }; typedef struct { diff --git a/ruby/ext/ripper/extconf.rb b/ruby/ext/ripper/extconf.rb index 2dde565bd..65cb5030d 100644 --- a/ruby/ext/ripper/extconf.rb +++ b/ruby/ext/ripper/extconf.rb @@ -13,7 +13,8 @@ def main end end $objs = %w(ripper.o) - $cleanfiles.concat %w(ripper.y ripper.c ripper.E ripper.output y.output eventids1.c eventids2table.c .eventids2-check) + $distcleanfiles.concat %w(ripper.y ripper.c eventids1.c eventids2table.c) + $cleanfiles.concat %w(ripper.E ripper.output y.output .eventids2-check) $defs << '-DRIPPER' $defs << '-DRIPPER_DEBUG' if $debug $VPATH << '$(topdir)' << '$(top_srcdir)' diff --git a/ruby/ext/ripper/lib/ripper/lexer.rb b/ruby/ext/ripper/lib/ripper/lexer.rb index 9f613c347..19c59e2cc 100644 --- a/ruby/ext/ripper/lib/ripper/lexer.rb +++ b/ruby/ext/ripper/lib/ripper/lexer.rb @@ -14,17 +14,24 @@ class Ripper # Tokenizes the Ruby program and returns an array of strings. + # The +filename+ and +lineno+ arguments are mostly ignored, since the + # return value is just the tokenized input. + # By default, this method does not handle syntax errors in +src+, + # use the +raise_errors+ keyword to raise a SyntaxError for an error in +src+. # # p Ripper.tokenize("def m(a) nil end") # # => ["def", " ", "m", "(", "a", ")", " ", "nil", " ", "end"] # - def Ripper.tokenize(src, filename = '-', lineno = 1) - Lexer.new(src, filename, lineno).tokenize + def Ripper.tokenize(src, filename = '-', lineno = 1, **kw) + Lexer.new(src, filename, lineno).tokenize(**kw) end # Tokenizes the Ruby program and returns an array of an array, # which is formatted like # [[lineno, column], type, token, state]. + # The +filename+ argument is mostly ignored. + # By default, this method does not handle syntax errors in +src+, + # use the +raise_errors+ keyword to raise a SyntaxError for an error in +src+. # # require 'ripper' # require 'pp' @@ -41,15 +48,32 @@ def Ripper.tokenize(src, filename = '-', lineno = 1) # [[1, 12], :on_sp, " ", END ], # [[1, 13], :on_kw, "end", END ]] # - def Ripper.lex(src, filename = '-', lineno = 1) - Lexer.new(src, filename, lineno).lex + def Ripper.lex(src, filename = '-', lineno = 1, **kw) + Lexer.new(src, filename, lineno).lex(**kw) end class Lexer < ::Ripper #:nodoc: internal use only - State = Struct.new(:to_int, :to_s) do + class State + attr_reader :to_int, :to_s + + def initialize(i) + @to_int = i + @to_s = Ripper.lex_state_name(i) + freeze + end + + def [](index) + case index + when 0, :to_int + @to_int + when 1, :to_s + @event + else + nil + end + end + alias to_i to_int - def initialize(i) super(i, Ripper.lex_state_name(i)).freeze end - # def inspect; "#<#{self.class}: #{self}>" end alias inspect to_s def pretty_print(q) q.text(to_s) end def ==(i) super or to_int == i end @@ -60,21 +84,46 @@ def anybits?(i) to_int.anybits?(i) end def nobits?(i) to_int.nobits?(i) end end - Elem = Struct.new(:pos, :event, :tok, :state, :message) do + class Elem + attr_accessor :pos, :event, :tok, :state, :message + def initialize(pos, event, tok, state, message = nil) - super(pos, event, tok, State.new(state), message) + @pos = pos + @event = event + @tok = tok + @state = State.new(state) + @message = message + end + + def [](index) + case index + when 0, :pos + @pos + when 1, :event + @event + when 2, :tok + @tok + when 3, :state + @state + when 4, :message + @message + else + nil + end end def inspect "#<#{self.class}: #{event}@#{pos[0]}:#{pos[1]}:#{state}: #{tok.inspect}#{": " if message}#{message}>" end + alias to_s inspect + def pretty_print(q) q.group(2, "#<#{self.class}:", ">") { q.breakable q.text("#{event}@#{pos[0]}:#{pos[1]}") q.breakable - q.text(state) + state.pretty_print(q) q.breakable q.text("token: ") tok.pretty_print(q) @@ -87,25 +136,27 @@ def pretty_print(q) end def to_a - a = super - a.pop unless a.last - a + if @message + [@pos, @event, @tok, @state, @message] + else + [@pos, @event, @tok, @state] + end end end attr_reader :errors - def tokenize - parse().sort_by(&:pos).map(&:tok) + def tokenize(**kw) + parse(**kw).sort_by(&:pos).map(&:tok) end - def lex - parse().sort_by(&:pos).map(&:to_a) + def lex(**kw) + parse(**kw).sort_by(&:pos).map(&:to_a) end # parse the code and returns elements including errors. - def scan - result = (parse() + errors + @stack.flatten).uniq.sort_by {|e| [*e.pos, (e.message ? -1 : 0)]} + def scan(**kw) + result = (parse(**kw) + errors + @stack.flatten).uniq.sort_by {|e| [*e.pos, (e.message ? -1 : 0)]} result.each_with_index do |e, i| if e.event == :on_parse_error and e.tok.empty? and (pre = result[i-1]) and pre.pos[0] == e.pos[0] and (pre.pos[1] + pre.tok.size) == e.pos[1] @@ -118,13 +169,20 @@ def scan result end - def parse + def parse(raise_errors: false) @errors = [] @buf = [] @stack = [] - super + super() + @buf = @stack.pop unless @stack.empty? + if raise_errors and !@errors.empty? + raise SyntaxError, @errors.map(&:message).join(' ;') + end @buf.flatten! - @buf + unless (result = @buf).empty? + result.concat(@buf) until (@buf = []; super(); @buf.flatten!; @buf.empty?) + end + result end private @@ -138,17 +196,19 @@ def parse def on_heredoc_dedent(v, w) ignored_sp = [] heredoc = @buf.last - heredoc.each_with_index do |e, i| - if Elem === e and e.event == :on_tstring_content and e.pos[1].zero? - tok = e.tok.dup if w > 0 and /\A\s/ =~ e.tok - if (n = dedent_string(e.tok, w)) > 0 - if e.tok.empty? - e.tok = tok[0, n] - e.event = :on_ignored_sp - next + if Array === heredoc + heredoc.each_with_index do |e, i| + if Elem === e and e.event == :on_tstring_content and e.pos[1].zero? + tok = e.tok.dup if w > 0 and /\A\s/ =~ e.tok + if (n = dedent_string(e.tok, w)) > 0 + if e.tok.empty? + e.tok = tok[0, n] + e.event = :on_ignored_sp + next + end + ignored_sp << [i, Elem.new(e.pos.dup, :on_ignored_sp, tok[0, n], e.state)] + e.pos[1] += n end - ignored_sp << [i, Elem.new(e.pos.dup, :on_ignored_sp, tok[0, n], e.state)] - e.pos[1] += n end end end @@ -172,14 +232,23 @@ def on_heredoc_end(tok) end def _push_token(tok) - @buf.push Elem.new([lineno(), column()], __callee__, tok, state()) + e = Elem.new([lineno(), column()], __callee__, tok, state()) + @buf.push(e) + e end - def on_error(mesg) + def on_error1(mesg) @errors.push Elem.new([lineno(), column()], __callee__, token(), state(), mesg) end - alias on_parse_error on_error - alias compile_error on_error + + def on_error2(mesg, elem) + @errors.push Elem.new(elem.pos, __callee__, elem.tok, elem.state, mesg) + end + PARSER_EVENTS.grep(/_error\z/) do |e| + arity = PARSER_EVENT_TABLE.fetch(e) + alias_method "on_#{e}", "on_error#{arity}" + end + alias compile_error on_error1 (SCANNER_EVENTS.map {|event|:"on_#{event}"} - private_instance_methods(false)).each do |event| alias_method event, :_push_token diff --git a/ruby/ext/ripper/lib/ripper/sexp.rb b/ruby/ext/ripper/lib/ripper/sexp.rb index e71d52cd4..b1d553b1d 100644 --- a/ruby/ext/ripper/lib/ripper/sexp.rb +++ b/ruby/ext/ripper/lib/ripper/sexp.rb @@ -17,6 +17,10 @@ class Ripper # Parses +src+ and create S-exp tree. # Returns more readable tree rather than Ripper.sexp_raw. # This method is mainly for developer use. + # The +filename+ argument is mostly ignored. + # By default, this method does not handle syntax errors in +src+, + # returning +nil+ in such cases. Use the +raise_errors+ keyword + # to raise a SyntaxError for an error in +src+. # # require 'ripper' # require 'pp' @@ -28,15 +32,25 @@ class Ripper # [:paren, [:params, [[:@ident, "a", [1, 6]]], nil, nil, nil, nil, nil, nil]], # [:bodystmt, [[:var_ref, [:@kw, "nil", [1, 9]]]], nil, nil, nil]]]] # - def Ripper.sexp(src, filename = '-', lineno = 1) + def Ripper.sexp(src, filename = '-', lineno = 1, raise_errors: false) builder = SexpBuilderPP.new(src, filename, lineno) sexp = builder.parse - sexp unless builder.error? + if builder.error? + if raise_errors + raise SyntaxError, builder.error + end + else + sexp + end end # [EXPERIMENTAL] # Parses +src+ and create S-exp tree. # This method is mainly for developer use. + # The +filename+ argument is mostly ignored. + # By default, this method does not handle syntax errors in +src+, + # returning +nil+ in such cases. Use the +raise_errors+ keyword + # to raise a SyntaxError for an error in +src+. # # require 'ripper' # require 'pp' @@ -54,13 +68,21 @@ def Ripper.sexp(src, filename = '-', lineno = 1) # nil, # nil]]]] # - def Ripper.sexp_raw(src, filename = '-', lineno = 1) + def Ripper.sexp_raw(src, filename = '-', lineno = 1, raise_errors: false) builder = SexpBuilder.new(src, filename, lineno) sexp = builder.parse - sexp unless builder.error? + if builder.error? + if raise_errors + raise SyntaxError, builder.error + end + else + sexp + end end class SexpBuilder < ::Ripper #:nodoc: + attr_reader :error + private def dedent_element(e, width) @@ -107,6 +129,13 @@ def on_#{event}(tok) end End end + + def on_error(mesg) + @error = mesg + end + remove_method :on_parse_error + alias on_parse_error on_error + alias compile_error on_error end class SexpBuilderPP < SexpBuilder #:nodoc: diff --git a/ruby/ext/ripper/ripper.c b/ruby/ext/ripper/ripper.c index d10b1396f..0d6230a5f 100644 --- a/ruby/ext/ripper/ripper.c +++ b/ruby/ext/ripper/ripper.c @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.5. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 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 @@ -40,11 +41,14 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "3.5" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -61,8 +65,8 @@ -/* Copy the first part of user declarations. */ -#line 12 "ripper.y" /* yacc.c:339 */ +/* First part of user prologue. */ +#line 12 "ripper.y" #if !YYPURE @@ -74,18 +78,37 @@ #define YYLTYPE rb_code_location_t #define YYLTYPE_IS_DECLARED 1 -#include "ruby/ruby.h" -#include "ruby/st.h" -#include "ruby/encoding.h" +#include "ruby/config.h" + +#include +#include +#include + #include "internal.h" +#include "internal/compile.h" +#include "internal/complex.h" +#include "internal/error.h" +#include "internal/hash.h" +#include "internal/imemo.h" +#include "internal/io.h" +#include "internal/numeric.h" +#include "internal/parse.h" +#include "internal/rational.h" +#include "internal/re.h" +#include "internal/symbol.h" +#include "internal/thread.h" +#include "internal/util.h" +#include "internal/variable.h" #include "node.h" #include "parse.h" -#include "symbol.h" -#include "regenc.h" -#include -#include -#include #include "probes.h" +#include "regenc.h" +#include "ruby/encoding.h" +#include "ruby/regex.h" +#include "ruby/ruby.h" +#include "ruby/st.h" +#include "ruby/util.h" +#include "symbol.h" #ifndef WARN_PAST_SCOPE # define WARN_PAST_SCOPE 0 @@ -350,7 +373,6 @@ struct parser_params { unsigned int do_loop: 1; unsigned int do_chomp: 1; unsigned int do_split: 1; - unsigned int warn_location: 1; NODE *eval_tree_begin; NODE *eval_tree; @@ -1019,13 +1041,26 @@ static void token_info_warn(struct parser_params *p, const char *token, token_in (void)0) static int looking_at_eol_p(struct parser_params *p); -#line 1023 "ripper.c" /* yacc.c:339 */ +#line 1045 "ripper.c" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTR nullptr +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif # else -# define YY_NULLPTR 0 +# define YY_NULLPTR ((void*)0) # endif # endif @@ -1178,10 +1213,9 @@ extern int yydebug; /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 978 "ripper.y" /* yacc.c:355 */ +#line 996 "ripper.y" VALUE val; NODE *node; @@ -1191,9 +1225,9 @@ union YYSTYPE const struct vtable *vars; struct rb_strterm_struct *strterm; -#line 1193 "ripper.c" /* yacc.c:355 */ -}; +#line 1227 "ripper.c" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -1219,36 +1253,81 @@ int yyparse (struct parser_params *p); -/* Copy the second part of user declarations. */ -#line 1223 "ripper.c" /* yacc.c:358 */ #ifdef short # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + and (if available) are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; #else -typedef unsigned short int yytype_uint16; +typedef short yytype_uint8; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; #else -typedef short int yytype_int16; +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif #endif #ifndef YYSIZE_T @@ -1256,15 +1335,27 @@ typedef short int yytype_int16; # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + +/* Stored state numbers (used for stacks). */ +typedef yytype_int16 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -1278,30 +1369,19 @@ typedef short int yytype_int16; # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# define YY_ATTRIBUTE_UNUSED # endif #endif @@ -1312,13 +1392,13 @@ typedef short int yytype_int16; # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -1331,6 +1411,20 @@ typedef short int yytype_int16; # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -1408,18 +1502,19 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; YYLTYPE yyls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \ + + YYSIZEOF (YYLTYPE)) \ + 2 * YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -1432,11 +1527,11 @@ union yyalloc # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -1448,12 +1543,12 @@ union yyalloc # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -1465,27 +1560,28 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 13766 +#define YYLAST 13832 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 154 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 266 +#define YYNNTS 265 /* YYNRULES -- Number of rules. */ -#define YYNRULES 759 +#define YYNRULES 757 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 1243 +#define YYNSTATES 1241 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 353 + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ + as returned by yylex. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 71, @@ -1528,84 +1624,84 @@ static const yytype_uint8 yytranslate[] = #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = -{ - 0, 1176, 1176, 1176, 1202, 1208, 1215, 1222, 1229, 1235, - 1236, 1242, 1255, 1253, 1264, 1275, 1281, 1288, 1295, 1302, - 1308, 1313, 1312, 1322, 1322, 1329, 1336, 1346, 1354, 1361, - 1369, 1377, 1389, 1401, 1411, 1425, 1426, 1434, 1442, 1451, - 1458, 1461, 1468, 1475, 1483, 1490, 1497, 1505, 1512, 1522, - 1527, 1536, 1539, 1540, 1544, 1548, 1552, 1557, 1564, 1566, - 1556, 1574, 1577, 1584, 1584, 1584, 1590, 1591, 1594, 1595, - 1604, 1614, 1624, 1633, 1644, 1651, 1658, 1665, 1672, 1680, - 1688, 1695, 1702, 1711, 1712, 1721, 1722, 1731, 1738, 1745, - 1752, 1759, 1766, 1773, 1780, 1787, 1794, 1803, 1804, 1813, - 1820, 1829, 1836, 1845, 1852, 1859, 1866, 1876, 1883, 1893, - 1900, 1907, 1917, 1924, 1931, 1938, 1945, 1952, 1959, 1966, - 1973, 1983, 1990, 1993, 2000, 2007, 2016, 2017, 2018, 2019, - 2024, 2031, 2038, 2041, 2048, 2048, 2058, 2059, 2060, 2061, - 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, - 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, - 2082, 2083, 2084, 2085, 2086, 2087, 2090, 2090, 2090, 2091, - 2091, 2092, 2092, 2092, 2093, 2093, 2093, 2093, 2094, 2094, - 2094, 2094, 2095, 2095, 2095, 2096, 2096, 2096, 2096, 2097, - 2097, 2097, 2097, 2098, 2098, 2098, 2098, 2099, 2099, 2099, - 2099, 2100, 2100, 2100, 2100, 2101, 2101, 2104, 2111, 2118, - 2126, 2134, 2142, 2150, 2158, 2165, 2173, 2182, 2191, 2203, - 2215, 2227, 2239, 2243, 2247, 2251, 2255, 2259, 2263, 2267, - 2271, 2275, 2279, 2283, 2287, 2291, 2292, 2296, 2300, 2304, - 2308, 2312, 2316, 2320, 2324, 2328, 2332, 2336, 2336, 2341, - 2350, 2356, 2357, 2358, 2359, 2362, 2366, 2373, 2380, 2381, - 2385, 2392, 2401, 2406, 2417, 2424, 2453, 2454, 2457, 2458, - 2459, 2463, 2470, 2479, 2487, 2494, 2502, 2510, 2514, 2514, - 2551, 2560, 2564, 2570, 2577, 2584, 2591, 2600, 2601, 2604, - 2611, 2618, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, - 2635, 2636, 2637, 2645, 2644, 2659, 2659, 2666, 2666, 2674, - 2682, 2689, 2696, 2703, 2711, 2718, 2725, 2732, 2739, 2739, - 2744, 2748, 2752, 2759, 2760, 2769, 2768, 2779, 2790, 2801, - 2811, 2822, 2821, 2838, 2837, 2852, 2861, 2909, 2908, 2932, - 2931, 2954, 2953, 2977, 2983, 2976, 3003, 3004, 3003, 3029, - 3036, 3043, 3050, 3059, 3066, 3072, 3089, 3095, 3101, 3107, - 3113, 3119, 3125, 3131, 3137, 3143, 3149, 3155, 3161, 3167, - 3182, 3189, 3195, 3202, 3203, 3204, 3207, 3208, 3211, 3212, - 3224, 3225, 3234, 3235, 3238, 3246, 3255, 3262, 3271, 3278, - 3285, 3292, 3299, 3308, 3316, 3325, 3329, 3333, 3337, 3341, - 3347, 3352, 3357, 3361, 3365, 3369, 3373, 3377, 3385, 3389, - 3393, 3397, 3401, 3405, 3409, 3413, 3417, 3423, 3424, 3430, - 3439, 3451, 3455, 3464, 3466, 3470, 3475, 3481, 3484, 3488, - 3492, 3496, 3481, 3520, 3528, 3538, 3543, 3549, 3559, 3573, - 3580, 3587, 3596, 3605, 3613, 3621, 3628, 3636, 3644, 3651, - 3658, 3671, 3679, 3689, 3690, 3694, 3689, 3711, 3712, 3716, - 3711, 3735, 3743, 3750, 3758, 3767, 3779, 3780, 3784, 3790, - 3791, 3793, 3794, 3795, 3783, 3808, 3809, 3812, 3813, 3821, - 3831, 3832, 3837, 3845, 3849, 3855, 3858, 3867, 3870, 3877, - 3880, 3881, 3883, 3884, 3893, 3902, 3907, 3916, 3925, 3930, - 3930, 3935, 3941, 3940, 3952, 3957, 3957, 3964, 3973, 3977, - 3986, 3990, 3994, 3998, 4002, 4005, 4009, 4018, 4022, 4026, - 4030, 4036, 4037, 4046, 4055, 4059, 4063, 4067, 4071, 4075, - 4081, 4083, 4092, 4100, 4114, 4115, 4138, 4142, 4148, 4154, - 4155, 4164, 4173, 4185, 4197, 4198, 4199, 4200, 4212, 4226, - 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4242, 4241, - 4254, 4264, 4277, 4284, 4291, 4300, 4312, 4315, 4322, 4329, - 4332, 4336, 4339, 4346, 4349, 4350, 4353, 4370, 4371, 4372, - 4381, 4391, 4400, 4406, 4416, 4422, 4431, 4433, 4442, 4452, - 4458, 4467, 4476, 4486, 4492, 4502, 4508, 4518, 4528, 4547, - 4553, 4563, 4573, 4614, 4617, 4616, 4633, 4637, 4642, 4646, - 4650, 4632, 4671, 4678, 4685, 4692, 4695, 4696, 4699, 4709, - 4710, 4711, 4712, 4715, 4725, 4726, 4736, 4737, 4738, 4739, - 4742, 4743, 4744, 4745, 4746, 4749, 4750, 4751, 4752, 4753, - 4754, 4755, 4758, 4771, 4780, 4787, 4796, 4797, 4801, 4800, - 4810, 4818, 4827, 4842, 4842, 4856, 4860, 4864, 4868, 4872, - 4878, 4883, 4888, 4892, 4896, 4900, 4904, 4908, 4912, 4916, - 4920, 4924, 4928, 4932, 4936, 4940, 4945, 4951, 4960, 4968, - 4976, 4984, 4994, 4995, 5003, 5012, 5020, 5041, 5043, 5056, - 5066, 5074, 5084, 5091, 5100, 5107, 5117, 5124, 5133, 5134, - 5137, 5145, 5153, 5163, 5173, 5183, 5190, 5199, 5206, 5215, - 5216, 5219, 5227, 5237, 5238, 5241, 5251, 5255, 5261, 5266, - 5266, 5290, 5291, 5300, 5302, 5325, 5336, 5343, 5351, 5370, - 5371, 5372, 5375, 5376, 5377, 5378, 5381, 5382, 5383, 5386, - 5387, 5390, 5391, 5394, 5395, 5398, 5399, 5402, 5403, 5406, - 5409, 5412, 5415, 5416, 5417, 5420, 5421, 5424, 5425, 5429 +static const yytype_int16 yyrline[] = +{ + 0, 1194, 1194, 1194, 1220, 1226, 1233, 1240, 1247, 1253, + 1254, 1260, 1273, 1271, 1282, 1293, 1299, 1306, 1313, 1320, + 1326, 1331, 1330, 1340, 1340, 1347, 1354, 1364, 1372, 1379, + 1387, 1395, 1407, 1419, 1429, 1443, 1444, 1452, 1460, 1469, + 1476, 1479, 1487, 1495, 1504, 1512, 1520, 1528, 1536, 1546, + 1551, 1560, 1563, 1564, 1568, 1572, 1576, 1581, 1588, 1590, + 1580, 1598, 1601, 1608, 1608, 1608, 1614, 1615, 1618, 1619, + 1628, 1638, 1648, 1657, 1668, 1675, 1682, 1689, 1696, 1704, + 1712, 1719, 1726, 1735, 1736, 1745, 1746, 1755, 1762, 1769, + 1776, 1783, 1790, 1797, 1804, 1811, 1818, 1827, 1828, 1837, + 1844, 1853, 1860, 1869, 1876, 1883, 1890, 1900, 1907, 1917, + 1924, 1931, 1941, 1948, 1955, 1962, 1969, 1976, 1983, 1990, + 1997, 2007, 2014, 2017, 2024, 2031, 2040, 2041, 2042, 2043, + 2048, 2055, 2062, 2065, 2072, 2072, 2082, 2083, 2084, 2085, + 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, + 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, + 2106, 2107, 2108, 2109, 2110, 2111, 2114, 2114, 2114, 2115, + 2115, 2116, 2116, 2116, 2117, 2117, 2117, 2117, 2118, 2118, + 2118, 2118, 2119, 2119, 2119, 2120, 2120, 2120, 2120, 2121, + 2121, 2121, 2121, 2122, 2122, 2122, 2122, 2123, 2123, 2123, + 2123, 2124, 2124, 2124, 2124, 2125, 2125, 2128, 2135, 2142, + 2150, 2158, 2166, 2174, 2182, 2189, 2197, 2206, 2215, 2227, + 2239, 2251, 2263, 2267, 2271, 2275, 2279, 2283, 2287, 2291, + 2295, 2299, 2303, 2307, 2311, 2315, 2316, 2320, 2324, 2328, + 2332, 2336, 2340, 2344, 2348, 2352, 2356, 2360, 2360, 2365, + 2374, 2380, 2381, 2382, 2383, 2386, 2390, 2397, 2404, 2405, + 2409, 2416, 2425, 2430, 2441, 2448, 2477, 2478, 2481, 2482, + 2483, 2487, 2494, 2503, 2511, 2518, 2526, 2534, 2538, 2538, + 2575, 2584, 2588, 2594, 2601, 2608, 2615, 2624, 2625, 2628, + 2635, 2642, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, + 2659, 2660, 2661, 2669, 2668, 2683, 2683, 2690, 2690, 2698, + 2706, 2713, 2720, 2727, 2735, 2742, 2749, 2756, 2763, 2763, + 2768, 2772, 2776, 2783, 2784, 2793, 2792, 2803, 2814, 2825, + 2835, 2846, 2845, 2862, 2861, 2876, 2885, 2933, 2932, 2956, + 2955, 2978, 2977, 3001, 3007, 3000, 3027, 3028, 3027, 3053, + 3060, 3067, 3074, 3083, 3090, 3096, 3113, 3119, 3125, 3131, + 3137, 3143, 3149, 3155, 3161, 3167, 3173, 3179, 3185, 3191, + 3206, 3213, 3219, 3226, 3227, 3228, 3231, 3232, 3235, 3236, + 3248, 3249, 3258, 3259, 3262, 3270, 3279, 3286, 3295, 3302, + 3309, 3316, 3323, 3332, 3340, 3349, 3353, 3357, 3361, 3365, + 3371, 3376, 3381, 3385, 3389, 3393, 3397, 3401, 3409, 3413, + 3417, 3421, 3425, 3429, 3433, 3437, 3441, 3447, 3448, 3454, + 3463, 3475, 3479, 3488, 3490, 3494, 3499, 3505, 3508, 3512, + 3516, 3520, 3505, 3544, 3552, 3562, 3567, 3573, 3583, 3597, + 3604, 3611, 3620, 3629, 3637, 3645, 3652, 3660, 3668, 3675, + 3682, 3695, 3703, 3713, 3714, 3718, 3713, 3735, 3736, 3740, + 3735, 3759, 3767, 3774, 3782, 3791, 3803, 3804, 3808, 3814, + 3815, 3817, 3818, 3819, 3807, 3832, 3833, 3836, 3837, 3845, + 3855, 3856, 3861, 3869, 3873, 3879, 3882, 3891, 3894, 3901, + 3904, 3905, 3907, 3908, 3917, 3926, 3931, 3940, 3949, 3954, + 3954, 3959, 3964, 3964, 3969, 3974, 3974, 3981, 3990, 3994, + 4003, 4007, 4011, 4015, 4019, 4022, 4026, 4035, 4039, 4043, + 4047, 4053, 4054, 4063, 4072, 4076, 4080, 4084, 4088, 4094, + 4096, 4105, 4113, 4127, 4128, 4151, 4155, 4161, 4167, 4168, + 4177, 4186, 4198, 4210, 4211, 4212, 4213, 4225, 4239, 4240, + 4241, 4242, 4243, 4244, 4245, 4246, 4247, 4255, 4254, 4267, + 4277, 4290, 4297, 4304, 4313, 4325, 4328, 4335, 4342, 4345, + 4349, 4352, 4359, 4362, 4363, 4366, 4383, 4384, 4385, 4394, + 4404, 4413, 4419, 4429, 4435, 4444, 4446, 4455, 4465, 4471, + 4480, 4489, 4499, 4505, 4515, 4521, 4531, 4541, 4560, 4566, + 4576, 4586, 4627, 4630, 4629, 4646, 4650, 4655, 4659, 4663, + 4645, 4684, 4691, 4698, 4705, 4708, 4709, 4712, 4722, 4723, + 4724, 4725, 4728, 4738, 4739, 4749, 4750, 4751, 4752, 4755, + 4756, 4757, 4758, 4759, 4762, 4763, 4764, 4765, 4766, 4767, + 4768, 4771, 4784, 4793, 4800, 4809, 4810, 4814, 4813, 4823, + 4831, 4840, 4855, 4855, 4869, 4873, 4877, 4881, 4885, 4891, + 4896, 4901, 4905, 4909, 4913, 4917, 4921, 4925, 4929, 4933, + 4937, 4941, 4945, 4949, 4953, 4958, 4964, 4973, 4981, 4989, + 4997, 5007, 5008, 5016, 5025, 5033, 5054, 5056, 5069, 5079, + 5087, 5097, 5104, 5113, 5120, 5130, 5137, 5146, 5147, 5150, + 5158, 5166, 5176, 5186, 5196, 5203, 5212, 5219, 5228, 5229, + 5232, 5240, 5250, 5251, 5254, 5264, 5268, 5274, 5279, 5279, + 5303, 5304, 5313, 5315, 5338, 5349, 5356, 5364, 5383, 5384, + 5385, 5388, 5389, 5390, 5391, 5394, 5395, 5396, 5399, 5400, + 5403, 5404, 5407, 5408, 5411, 5412, 5415, 5416, 5419, 5422, + 5425, 5426, 5427, 5430, 5431, 5434, 5435, 5439 }; #endif @@ -1692,14 +1788,14 @@ static const char *const yytname[] = "blkarg_mark", "f_block_arg", "opt_f_block_arg", "singleton", "$@56", "assoc_list", "assocs", "assoc", "operation", "operation2", "operation3", "dot_or_colon", "call_op", "call_op2", "opt_terms", "opt_nl", "rparen", - "rbracket", "rbrace", "trailer", "term", "terms", "none", YY_NULLPTR + "rbracket", "trailer", "term", "terms", "none", YY_NULLPTR }; #endif # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -1720,164 +1816,164 @@ static const yytype_uint16 yytoknum[] = }; # endif -#define YYPACT_NINF -1028 +#define YYPACT_NINF (-1056) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-1028))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -760 +#define YYTABLE_NINF (-758) -#define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-760))) +#define yytable_value_is_error(Yyn) \ + ((Yyn) == YYTABLE_NINF) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - -1028, 133, 3772, -1028, 9176, -1028, -1028, -1028, 8634, -1028, - -1028, -1028, -1028, -1028, -1028, -1028, 9302, 9302, -1028, -1028, - -1028, 5241, 4800, -1028, -1028, -1028, -1028, 533, 8489, 1, - 100, 124, -1028, -1028, -1028, 4065, 4947, -1028, -1028, 4212, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, 10940, 10940, - 10940, 10940, 200, 6689, 9428, 9806, 10184, 8918, -1028, 8344, - -1028, -1028, -1028, 155, 181, 247, 265, 1275, 11066, 10940, - -1028, 232, -1028, 1140, -1028, 319, -1028, -1028, 14, 411, - 330, -1028, 332, 11318, -1028, 380, 2654, 644, 46, 425, - -1028, 11192, 11192, -1028, -1028, 7671, 11440, 11562, 11684, 8198, - 9302, 819, 108, -1028, -1028, 456, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, 717, 729, - -1028, 420, 783, -1028, -1028, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, 432, -1028, -1028, -1028, 479, 10940, 524, 6840, - 10940, 10940, 10940, -1028, 10940, -1028, 503, 4337, 542, -1028, - -1028, 513, 515, 267, 365, 614, 366, 545, -1028, -1028, - 7545, -1028, 9302, 9554, -1028, -1028, 7797, -1028, 11192, 858, - -1028, 574, 6991, -1028, 7142, -1028, -1028, 598, 605, 14, - -1028, 522, -1028, 718, 3380, 3380, 791, 9428, -1028, 6689, - 657, 232, -1028, 1140, 1, 682, -1028, 1140, 1, 665, - 371, 519, -1028, 542, 673, 519, -1028, 1, 763, 1275, - 11806, 677, -1028, 690, 708, 716, 724, -1028, -1028, -1028, - -1028, -1028, 481, -1028, 580, 678, 953, -1028, -1028, -1028, - -1028, 748, -1028, -1028, -1028, -1028, -1028, -1028, -1028, 7923, - 11192, 11192, 11192, 11192, 9428, 11192, 11192, -1028, -1028, -1028, - 721, -1028, -1028, -1028, -1028, -1028, 10310, -1028, 6689, 9047, - 684, 10310, -1028, 10940, 10940, 10940, 10940, 10940, -1028, -1028, - 10940, 10940, 10940, 10940, 10940, 10940, 10940, 10940, 10940, -1028, - -1028, 10940, 10940, 10940, 10940, 10940, 10940, 10940, 10940, 10940, - 10940, -1028, -1028, 12269, 9302, 12359, 5833, 319, 86, 86, - 7293, 11192, 7293, 232, -1028, 691, 777, -1028, -1028, 741, - 822, 53, 68, 69, 681, 956, 11192, 733, -1028, 714, - 891, -1028, -1028, -1028, -1028, 130, 291, 527, 572, 582, - 586, 608, 653, 663, -1028, -1028, -1028, 666, -1028, -1028, - -1028, 13619, -1028, -1028, 11066, 11066, -1028, -1028, 374, -1028, - -1028, -1028, 618, 10940, 10940, 9680, -1028, -1028, 12449, 9302, - 12539, 10940, 10940, 9932, -1028, 1, 710, -1028, -1028, 10940, - 1, -1028, 711, 1, 722, -1028, 107, -1028, -1028, -1028, - -1028, -1028, 8634, -1028, 10940, 726, 728, 12449, 12539, 10940, - 1140, 100, 1, -1028, -1028, 8049, 732, 1, -1028, -1028, - 10058, -1028, -1028, 10184, -1028, -1028, -1028, 574, 893, -1028, - -1028, 734, 11806, 12629, 9302, 12719, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, 786, 101, - 988, 102, 10940, -1028, -1028, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, 757, -1028, -1028, -1028, 882, -1028, 882, 10940, - -1028, 760, 767, 874, -1028, 1, 11806, 774, -1028, -1028, - -1028, 880, 806, 4043, -1028, -1028, -1028, 963, 400, -1028, - 718, 3896, 3896, 3896, 3896, 4484, 3134, 3896, 3896, 3380, - 3380, 759, 759, 3267, 1222, 1222, 1464, 406, 406, 718, - 718, 718, 1115, 1115, 3482, 4359, 5535, 4506, -1028, 605, - -1028, 1, 850, -1028, 1016, -1028, -1028, 5094, 882, 925, - -1028, 5984, 922, 6437, 882, 60, 882, 914, 927, 76, - 12809, 9302, 12899, -1028, 319, -1028, 893, -1028, -1028, -1028, - 12989, 9302, 13079, 5833, 11192, -1028, -1028, -1028, -1028, -1028, - -1028, 2683, -1028, 4190, -1028, -1028, -1028, 8634, 10940, -1028, - 10940, 542, -1028, 545, 3918, 4653, 1, 453, 458, -1028, - -1028, -1028, -1028, 9680, -1028, 9932, -1028, -1028, 11192, 4337, - -1028, -1028, 605, 605, -1028, -1028, -9, -1028, -1028, 519, - 11806, 734, 381, 686, 1, 362, 407, -1028, -1028, 1249, - -1028, 566, -1028, 794, -1028, -1028, 568, 795, -1028, 718, - -1028, -1028, 804, -1028, -1028, -1028, -1028, 812, 10436, 9428, - -1028, 734, 11806, 9428, 11066, 10940, 13169, 9302, 13259, 12202, - 832, 11066, 11066, -1028, 721, 816, 1020, 11066, 11066, -1028, - -1028, 721, -1028, -1028, -1028, 10562, 755, -1028, 825, -1028, - 950, -1028, -1028, -1028, -1028, -1028, -1028, 927, 882, -1028, - 10688, 882, 33, 278, 1, 77, 83, 7293, 232, 11192, - 5833, 995, 686, -1028, 1, 882, 107, 820, 8779, 108, - 411, -1028, -1028, -1028, -1028, 10940, 10940, 462, 10940, 10940, - 824, 107, -1028, -1028, 626, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, 843, -1028, 843, - 10940, 833, -1028, 734, -1028, 4337, 5388, 5682, 1, 466, - 470, -1028, -1028, 3091, 3091, 751, -1028, 616, 345, -1028, - 940, 899, -1028, 871, -1028, -1028, 815, -1028, -1028, 336, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, 10940, - -1028, -1028, -1028, -1028, -1028, -1028, 11066, -1028, -1028, -1028, - -1028, -1028, 760, -1028, 904, -1028, -1028, -1028, 7293, -1028, - -1028, -1028, -1028, 7293, 11192, 882, -1028, -1028, 882, -1028, - -1028, 882, -1028, 10940, -1028, 54, -1028, 113, 882, 5833, - 232, 882, -1028, -1028, -1028, 1877, 5833, 1686, -1028, -1028, - -1028, 10940, 9932, -1028, 1519, -1028, 1385, 7142, -1028, -1028, - 5833, 862, 538, -1028, -1028, -1028, -1028, 12202, 12083, -1028, - 257, 866, -1028, -1028, -1028, 964, -1028, 12202, 3091, 3091, - 751, 616, 547, 3621, 3621, 4337, -1028, -1028, 11928, 86, - -1028, -1028, 6563, -1028, 86, -1028, -1028, -1028, -1028, -1028, - 10814, 6135, -1028, 882, -1028, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, 1537, -1028, -1028, -1028, -1028, -1028, - -1028, 1, 1, -1028, -1028, 896, -1028, 877, 10940, -1028, - 883, 106, 887, 887, -1028, 894, 980, 895, 987, -1028, - 882, 232, 820, 1686, -1028, -1028, -1028, -1028, 1, 912, - 920, 901, 12050, -1028, 911, 887, 887, -1028, 916, 918, - -1028, 929, -1028, -1028, 276, 27, 3, 1, 12169, -1028, - 919, -1028, -1028, 1, 932, -1028, 12202, -1028, -1028, 348, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, - 1, 1, 1, 1, 994, -1028, 1025, 118, 135, 179, - 5833, 1078, 5984, 3621, 10940, -1028, 92, -1028, 1537, 1208, - -1028, 949, 1, 954, -1028, -1028, -1028, 10940, 1686, -1028, - -1028, 1060, -1028, -1028, -1028, -1028, 216, -1028, -1028, 1686, - -1028, -1028, 1096, -1028, -1028, -1028, -1028, 5833, 1, 63, - 7419, 972, -1028, 12050, 1686, -1028, 1049, 1030, 1060, -1028, - -1028, -1028, 1686, -1028, 1096, -1028, 1424, -1028, 978, 12202, - -1028, 43, 899, 982, -1028, 288, -1028, 257, 899, -1028, - -1028, 1079, -1028, -1028, -1028, -1028, 222, 13349, 9302, 13439, - 925, -1028, 825, 86, 886, 255, -1028, -1028, -1028, -1028, - -1028, -1028, 1, -1028, 1537, -1028, 1560, -1028, -1028, -1028, - 983, 986, -1028, 1082, 887, -1028, 989, -1028, 990, -1028, - 989, 882, 992, 5833, 7142, -1028, 1019, -1028, 1030, -1028, - 998, 1001, -1028, 13529, -1028, 887, 1003, -1028, 1011, 1003, - -1028, 592, -1028, -1028, 12202, 1012, -1028, 1015, 12202, -1028, - -1028, -1028, -1028, -1028, 134, 158, 1, 315, 318, -1028, - -1028, -1028, 11192, 11192, 12083, -1028, -1028, 1017, 1021, 1686, - -1028, 1096, -1028, -1028, 1096, -1028, 1096, -1028, -1028, -1028, - -1028, 882, 1027, -1028, 1686, -1028, 1096, -1028, 1024, 1029, - -1028, 1096, -1028, 1096, -1028, -1028, 1424, -1028, 1012, 12202, - 12202, 1012, 457, -1028, -1028, -1028, -1028, 1560, 1560, 989, - 1041, 989, 989, -1028, -1028, 1003, 1043, 1003, 1003, -1028, - -1028, 1012, -1028, 1021, -1028, 1096, -1028, -1028, -1028, -1028, - 1096, -1028, -1028, -1028, 6286, 989, 1003, 150, -1028, -1028, - -1028, -1028, -1028 + -1056, 97, 3943, -1056, 9202, -1056, -1056, -1056, 8660, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, 9328, 9328, -1056, -1056, + -1056, 5267, 4826, -1056, -1056, -1056, -1056, -41, 8515, 18, + -33, 124, -1056, -1056, -1056, 3778, 4973, -1056, -1056, 4238, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, 10966, 10966, + 10966, 10966, 90, 6715, 9454, 9832, 10210, 8944, -1056, 8370, + -1056, -1056, -1056, 72, 143, 146, 197, 1315, 11092, 10966, + -1056, 6, -1056, 1265, -1056, 411, -1056, -1056, 249, 152, + 253, -1056, 239, 11344, -1056, 279, 1752, 377, 542, 624, + -1056, 11218, 11218, -1056, -1056, 7697, 11466, 11588, 11710, 8224, + 9328, 48, 21, -1056, -1056, 281, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, 394, 461, + -1056, 355, 498, -1056, -1056, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, 343, -1056, -1056, -1056, 346, 10966, 453, 6866, + 10966, 10966, 10966, -1056, 10966, -1056, 399, 4510, 448, -1056, + -1056, 357, 723, 9, 300, 438, 547, 423, -1056, -1056, + 7571, -1056, 9328, 9580, -1056, -1056, 7823, -1056, 11218, 336, + -1056, 430, 7017, -1056, 7168, -1056, -1056, 464, 483, 249, + -1056, 740, -1056, 565, 3504, 3504, 581, 9454, -1056, 6715, + 549, 6, -1056, 1265, 18, 586, -1056, 1265, 18, 568, + 588, 640, -1056, 448, 578, 640, -1056, 18, 690, 1315, + 11832, 617, -1056, 790, 858, 885, 923, -1056, -1056, -1056, + -1056, -1056, 362, -1056, 446, 562, 683, -1056, -1056, -1056, + -1056, 694, -1056, -1056, -1056, -1056, -1056, -1056, -1056, 7949, + 11218, 11218, 11218, 11218, 9454, 11218, 11218, -1056, -1056, -1056, + 668, -1056, -1056, -1056, -1056, -1056, 10336, -1056, 6715, 9073, + 663, 10336, -1056, 10966, 10966, 10966, 10966, 10966, -1056, -1056, + 10966, 10966, 10966, 10966, 10966, 10966, 10966, 10966, 10966, -1056, + -1056, 10966, 10966, 10966, 10966, 10966, 10966, 10966, 10966, 10966, + 10966, -1056, -1056, 12335, 9328, 12425, 5859, 411, 108, 108, + 7319, 11218, 7319, 6, -1056, 674, 758, -1056, -1056, 936, + 819, 53, 77, 126, 732, 827, 11218, 274, -1056, 727, + 940, -1056, -1056, -1056, -1056, 403, 437, 475, 517, 533, + 540, 543, 554, 558, -1056, -1056, -1056, 566, -1056, -1056, + -1056, 13685, -1056, -1056, 11092, 11092, -1056, -1056, 629, -1056, + -1056, -1056, 407, 10966, 10966, 9706, -1056, -1056, 12515, 9328, + 12605, 10966, 10966, 9958, -1056, 18, 718, -1056, -1056, 10966, + 18, -1056, 750, 18, 752, -1056, 96, -1056, -1056, -1056, + -1056, -1056, 8660, -1056, 10966, 729, 757, 12515, 12605, 10966, + 1265, -33, 18, -1056, -1056, 8075, 754, 18, -1056, -1056, + 10084, -1056, -1056, 10210, -1056, -1056, -1056, 430, 963, -1056, + -1056, 771, 11832, 12695, 9328, 12785, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, 824, 101, + 992, 141, 10966, -1056, -1056, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, 759, -1056, -1056, -1056, 866, -1056, 866, 10966, + -1056, 773, 779, 860, -1056, 18, 11832, 781, -1056, -1056, + -1056, 884, 806, 4216, -1056, -1056, -1056, 1006, 644, -1056, + 565, 2696, 2696, 2696, 2696, 4071, 2908, 2696, 2696, 3504, + 3504, 814, 814, 3389, 1310, 1310, 1335, 24, 24, 565, + 565, 565, 1921, 1921, 3606, 4385, 5561, 4532, -1056, 483, + -1056, 18, 832, -1056, 870, -1056, -1056, 5120, 866, 922, + -1056, 6010, 921, 6463, 866, 37, 866, 935, 947, 153, + 12875, 9328, 12965, -1056, 411, -1056, 963, -1056, -1056, -1056, + 13055, 9328, 13145, 5859, 11218, -1056, -1056, -1056, -1056, -1056, + -1056, 3199, -1056, 4363, -1056, -1056, -1056, 8660, 10966, -1056, + 10966, 448, -1056, 423, 4091, 4679, 18, 655, 707, -1056, + -1056, -1056, -1056, 9706, -1056, 9958, -1056, -1056, 11218, 4510, + -1056, -1056, 483, 483, -1056, -1056, -6, -1056, -1056, 640, + 11832, 771, 57, 749, 18, 447, 519, -1056, -1056, 1173, + -1056, 538, -1056, 831, -1056, -1056, 553, 843, -1056, 565, + -1056, -1056, 822, -1056, -1056, -1056, -1056, 830, 10462, 9454, + -1056, 771, 11832, 9454, 11092, 10966, 13235, 9328, 13325, 12268, + 856, 11092, 11092, -1056, 668, 848, 875, 11092, 11092, -1056, + -1056, 668, -1056, -1056, -1056, 10588, 167, -1056, 817, -1056, + 991, -1056, -1056, -1056, -1056, -1056, -1056, 947, 866, -1056, + 10714, 866, 81, 177, 18, 288, 307, 7319, 6, 11218, + 5859, 1030, 749, -1056, 18, 866, 96, 862, 8805, 21, + 152, -1056, -1056, -1056, -1056, 10966, 10966, 714, 10966, 10966, + 868, 96, -1056, -1056, 607, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, 887, -1056, 887, + 10966, 876, -1056, 771, -1056, 4510, 5414, 5708, 18, 744, + 748, -1056, -1056, 2641, 2641, 534, -1056, 400, 881, -1056, + 975, 934, -1056, 904, -1056, -1056, 804, -1056, -1056, 267, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, 10966, + -1056, -1056, -1056, -1056, -1056, -1056, 11092, -1056, -1056, -1056, + -1056, -1056, 773, -1056, 938, -1056, -1056, -1056, 7319, -1056, + -1056, -1056, -1056, 7319, 11218, 866, -1056, -1056, 866, -1056, + -1056, 866, -1056, 10966, -1056, 63, -1056, 330, 866, 5859, + 6, 866, -1056, -1056, -1056, 1233, 5859, 1709, -1056, -1056, + -1056, 10966, 9958, -1056, 1648, -1056, 1383, 7168, -1056, -1056, + 5859, 895, 756, -1056, -1056, -1056, -1056, 12268, 2069, -1056, + -1056, 687, -1056, -1056, 1000, -1056, 12268, 2641, 2641, 534, + 400, 501, 12149, 12149, 4510, -1056, -1056, 11954, 108, -1056, + -1056, 6589, -1056, 108, -1056, -1056, -1056, -1056, -1056, 10840, + 6161, -1056, 866, -1056, -1056, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, 1218, -1056, -1056, -1056, -1056, -1056, -1056, + 18, 18, -1056, -1056, 917, -1056, 907, 10966, -1056, 911, + 595, 916, 916, -1056, 919, 1015, 924, 1020, -1056, 866, + 6, 862, 1709, -1056, -1056, -1056, -1056, 18, 942, 949, + 932, 12076, -1056, 933, 916, 916, -1056, 943, 945, -1056, + 931, -1056, -1056, 206, 38, 117, 18, 12235, -1056, 948, + -1056, -1056, 952, 954, -1056, 12268, -1056, -1056, 679, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, 18, 18, + 18, 18, 1060, -1056, 1049, 183, 292, 324, 5859, 1110, + 6010, 12149, 10966, -1056, 649, -1056, 1218, 1276, -1056, 974, + 18, 976, -1056, -1056, -1056, 10966, 1709, -1056, -1056, 1099, + -1056, -1056, -1056, -1056, 359, -1056, -1056, 1709, -1056, -1056, + 1860, -1056, -1056, -1056, -1056, 5859, 18, 123, 7445, 994, + -1056, 12076, 1709, -1056, 1074, 1070, 1099, -1056, -1056, -1056, + 1709, -1056, 1860, -1056, 1293, -1056, 988, 12268, -1056, 163, + 934, 990, -1056, 717, -1056, 687, 934, -1056, -1056, 730, + -1056, -1056, -1056, -1056, 360, 13415, 9328, 13505, 922, -1056, + 817, 108, 838, 295, -1056, -1056, -1056, -1056, -1056, -1056, + 18, -1056, 1218, -1056, 855, -1056, -1056, -1056, 993, 996, + -1056, 1091, 916, -1056, 998, -1056, 1001, -1056, 998, 866, + 999, 5859, 7168, -1056, 1032, -1056, 1070, -1056, 1009, 1014, + -1056, 13595, -1056, 916, 1017, -1056, 1019, 1017, -1056, 710, + -1056, -1056, 12268, 1023, -1056, 1026, 12268, -1056, -1056, -1056, + -1056, -1056, 105, 187, 18, 371, 396, -1056, -1056, -1056, + 11218, 11218, 2069, -1056, -1056, 1037, 1038, 1709, -1056, 1860, + -1056, -1056, 1860, -1056, 1860, -1056, -1056, -1056, -1056, 866, + 1042, -1056, 1709, -1056, 1860, -1056, 1013, 1040, -1056, 1860, + -1056, 1860, -1056, -1056, 1293, -1056, 1023, 12268, 12268, 1023, + 406, -1056, -1056, -1056, -1056, 855, 855, 998, 1052, 998, + 998, -1056, -1056, 1017, 1053, 1017, 1017, -1056, -1056, 1023, + -1056, 1038, -1056, 1860, -1056, -1056, -1056, -1056, 1860, -1056, + -1056, -1056, 6312, 998, 1017, 80, -1056, -1056, -1056, -1056, + -1056 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint16 yydefact[] = +static const yytype_int16 yydefact[] = { 2, 0, 0, 1, 0, 361, 362, 363, 0, 354, 355, 356, 359, 357, 358, 360, 349, 350, 351, 352, - 372, 278, 278, 636, 635, 637, 638, 747, 0, 747, - 0, 0, 640, 639, 641, 729, 731, 632, 631, 730, - 634, 626, 627, 628, 629, 577, 646, 647, 0, 0, - 0, 0, 0, 0, 305, 759, 759, 95, 325, 597, - 597, 599, 601, 0, 0, 0, 0, 0, 0, 0, - 3, 745, 6, 9, 35, 40, 52, 67, 278, 66, + 372, 278, 278, 635, 634, 636, 637, 746, 0, 746, + 0, 0, 639, 638, 640, 728, 730, 631, 630, 729, + 633, 625, 626, 627, 628, 576, 645, 646, 0, 0, + 0, 0, 0, 0, 305, 757, 757, 95, 325, 596, + 596, 598, 600, 0, 0, 0, 0, 0, 0, 0, + 3, 744, 6, 9, 35, 40, 52, 67, 278, 66, 0, 83, 0, 87, 97, 0, 61, 235, 250, 0, - 303, 0, 0, 63, 63, 745, 0, 0, 0, 0, - 314, 68, 323, 292, 293, 576, 578, 294, 295, 296, - 298, 297, 299, 575, 616, 617, 574, 624, 642, 643, + 303, 0, 0, 63, 63, 744, 0, 0, 0, 0, + 314, 68, 323, 292, 293, 575, 577, 294, 295, 296, + 298, 297, 299, 574, 615, 616, 573, 623, 641, 642, 300, 0, 301, 71, 5, 8, 176, 187, 177, 200, 173, 193, 183, 182, 203, 204, 198, 181, 180, 175, 201, 205, 206, 185, 174, 188, 192, 194, 186, 179, @@ -1887,174 +1983,174 @@ static const yytype_uint16 yydefact[] = 143, 163, 164, 149, 150, 154, 158, 144, 146, 136, 137, 138, 151, 152, 153, 155, 156, 159, 160, 165, 131, 133, 28, 129, 130, 132, 0, 0, 0, 0, - 0, 0, 0, 597, 0, 273, 0, 257, 283, 81, - 277, 759, 0, 642, 643, 0, 301, 759, 723, 82, - 747, 79, 0, 759, 448, 78, 747, 748, 0, 0, + 0, 0, 0, 596, 0, 273, 0, 257, 283, 81, + 277, 757, 0, 641, 642, 0, 301, 757, 722, 82, + 746, 79, 0, 757, 448, 78, 746, 747, 0, 0, 23, 247, 0, 10, 0, 349, 350, 317, 449, 0, 229, 0, 314, 230, 220, 221, 311, 0, 21, 0, - 0, 745, 17, 20, 747, 85, 16, 307, 747, 0, - 752, 752, 258, 0, 0, 752, 721, 747, 0, 0, - 0, 93, 353, 0, 103, 104, 111, 427, 621, 620, - 622, 619, 0, 618, 0, 0, 0, 584, 593, 589, - 595, 625, 56, 241, 242, 755, 756, 4, 757, 746, + 0, 744, 17, 20, 746, 85, 16, 307, 746, 0, + 750, 750, 258, 0, 0, 750, 720, 746, 0, 0, + 0, 93, 353, 0, 103, 104, 111, 427, 620, 619, + 621, 618, 0, 617, 0, 0, 0, 583, 592, 588, + 594, 624, 56, 241, 242, 753, 754, 4, 755, 745, 0, 0, 0, 0, 0, 0, 0, 364, 453, 442, 72, 457, 322, 365, 457, 438, 0, 99, 0, 91, 88, 0, 57, 0, 0, 0, 0, 0, 253, 254, 0, 0, 0, 0, 218, 219, 0, 0, 0, 251, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 741, 742, 0, 759, 0, 0, 62, 0, 0, - 0, 0, 0, 745, 333, 746, 0, 383, 382, 0, - 0, 642, 643, 301, 121, 122, 0, 0, 124, 650, - 0, 642, 643, 301, 341, 196, 189, 199, 184, 166, - 167, 168, 126, 127, 719, 343, 718, 0, 80, 744, - 743, 0, 324, 579, 0, 0, 134, 726, 311, 284, - 728, 280, 0, 0, 0, 0, 274, 282, 0, 759, - 0, 0, 0, 0, 275, 747, 0, 316, 279, 677, - 747, 269, 759, 747, 759, 268, 747, 321, 55, 25, + 0, 740, 741, 0, 757, 0, 0, 62, 0, 0, + 0, 0, 0, 744, 333, 745, 0, 383, 382, 0, + 0, 641, 642, 301, 121, 122, 0, 0, 124, 649, + 0, 641, 642, 301, 341, 196, 189, 199, 184, 166, + 167, 168, 126, 127, 718, 343, 717, 0, 80, 743, + 742, 0, 324, 578, 0, 0, 134, 725, 311, 284, + 727, 280, 0, 0, 0, 0, 274, 282, 0, 757, + 0, 0, 0, 0, 275, 746, 0, 316, 279, 676, + 746, 269, 757, 746, 757, 268, 746, 321, 55, 25, 27, 26, 0, 318, 0, 0, 0, 0, 0, 0, - 19, 0, 747, 309, 15, 746, 84, 747, 306, 312, - 754, 753, 259, 754, 261, 313, 722, 0, 110, 625, - 101, 96, 0, 0, 759, 0, 326, 428, 603, 623, - 606, 604, 598, 580, 581, 600, 582, 602, 0, 0, - 0, 0, 0, 758, 7, 29, 30, 31, 32, 33, + 19, 0, 746, 309, 15, 745, 84, 746, 306, 312, + 752, 751, 259, 752, 261, 313, 721, 0, 110, 624, + 101, 96, 0, 0, 757, 0, 326, 428, 602, 622, + 605, 603, 597, 579, 580, 599, 581, 601, 0, 0, + 0, 0, 0, 756, 7, 29, 30, 31, 32, 33, 53, 54, 0, 454, 453, 73, 0, 458, 0, 0, - 36, 288, 0, 39, 287, 747, 0, 89, 100, 51, + 36, 288, 0, 39, 287, 746, 0, 89, 100, 51, 41, 49, 0, 262, 283, 207, 37, 0, 301, 58, 227, 234, 236, 237, 238, 245, 246, 239, 240, 216, - 217, 243, 244, 747, 231, 232, 233, 222, 223, 224, - 225, 226, 255, 256, 732, 734, 733, 735, 447, 278, - 445, 747, 732, 734, 733, 735, 446, 278, 0, 759, + 217, 243, 244, 746, 231, 232, 233, 222, 223, 224, + 225, 226, 255, 256, 731, 733, 732, 734, 447, 278, + 445, 746, 731, 733, 732, 734, 446, 278, 0, 757, 374, 0, 373, 0, 0, 0, 0, 331, 0, 311, - 0, 759, 0, 63, 339, 121, 122, 123, 648, 337, - 0, 759, 0, 0, 0, 344, 739, 740, 346, 732, - 733, 278, 42, 262, 208, 48, 215, 0, 0, 725, - 0, 285, 281, 759, 732, 733, 747, 732, 733, 724, - 315, 749, 264, 270, 265, 272, 320, 24, 0, 248, - 11, 34, 0, 759, 214, 22, 86, 18, 308, 752, - 0, 94, 736, 109, 747, 732, 733, 429, 607, 0, - 583, 0, 586, 0, 591, 588, 0, 0, 592, 228, + 0, 757, 0, 63, 339, 121, 122, 123, 647, 337, + 0, 757, 0, 0, 0, 344, 738, 739, 346, 731, + 732, 278, 42, 262, 208, 48, 215, 0, 0, 724, + 0, 285, 281, 757, 731, 732, 746, 731, 732, 723, + 315, 748, 264, 270, 265, 272, 320, 24, 0, 248, + 11, 34, 0, 757, 214, 22, 86, 18, 308, 750, + 0, 94, 735, 109, 746, 731, 732, 429, 606, 0, + 582, 0, 585, 0, 590, 587, 0, 0, 591, 228, 451, 455, 0, 371, 452, 459, 437, 291, 0, 0, - 98, 92, 0, 0, 0, 0, 0, 759, 0, 0, + 98, 92, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 444, 76, 0, 450, 0, 0, 267, - 443, 74, 266, 304, 366, 759, 759, 566, 759, 375, - 759, 329, 377, 64, 376, 330, 468, 0, 0, 368, - 0, 0, 736, 310, 747, 732, 733, 0, 0, 0, - 0, 121, 122, 125, 747, 0, 747, 653, 0, 439, - 69, 135, 727, 286, 276, 0, 0, 450, 0, 0, - 759, 747, 260, 102, 450, 430, 608, 612, 613, 614, - 605, 615, 585, 587, 594, 590, 596, 759, 70, 759, - 0, 289, 38, 90, 50, 263, 732, 733, 747, 732, - 733, 560, 564, 0, 0, 0, 505, 499, 502, 558, - 0, 59, 485, 487, 489, 492, 539, 544, 545, 546, - 549, 550, 551, 552, 553, 555, 554, 556, 557, 0, - 47, 212, 46, 213, 77, 750, 0, 44, 210, 45, - 211, 75, 567, 568, 759, 569, 367, 369, 0, 12, - 14, 573, 370, 0, 0, 0, 378, 380, 0, 65, + 443, 74, 266, 304, 366, 757, 757, 565, 757, 375, + 757, 329, 377, 64, 376, 330, 468, 0, 0, 368, + 0, 0, 735, 310, 746, 731, 732, 0, 0, 0, + 0, 121, 122, 125, 746, 0, 746, 652, 0, 439, + 69, 135, 726, 286, 276, 0, 0, 450, 0, 0, + 757, 746, 260, 102, 450, 430, 607, 611, 612, 613, + 604, 614, 584, 586, 593, 589, 595, 757, 70, 757, + 0, 289, 38, 90, 50, 263, 731, 732, 746, 731, + 732, 559, 563, 0, 0, 0, 505, 499, 502, 557, + 0, 59, 485, 487, 489, 492, 538, 543, 544, 545, + 548, 549, 550, 551, 552, 554, 553, 555, 556, 0, + 47, 212, 46, 213, 77, 749, 0, 44, 210, 45, + 211, 75, 566, 567, 757, 568, 367, 369, 0, 12, + 14, 572, 370, 0, 0, 0, 378, 380, 0, 65, 469, 0, 335, 0, 461, 0, 334, 450, 0, 0, - 0, 0, 450, 342, 720, 676, 0, 676, 347, 440, - 441, 0, 271, 319, 676, 609, 747, 0, 418, 417, - 0, 290, 450, 547, 548, 122, 562, 0, 0, 501, - 0, 0, 504, 427, 561, 0, 60, 0, 542, 543, - 0, 491, 490, 0, 0, 249, 43, 209, 0, 0, - 571, 572, 0, 381, 0, 327, 328, 470, 332, 462, - 0, 0, 336, 0, 649, 338, 683, 680, 679, 678, - 681, 689, 698, 677, 0, 710, 699, 714, 713, 709, - 675, 747, 747, 682, 684, 685, 687, 661, 691, 696, - 759, 702, 759, 759, 707, 661, 712, 661, 0, 659, - 0, 0, 653, 676, 431, 434, 610, 416, 747, 0, - 685, 401, 693, 694, 759, 759, 759, 705, 401, 401, - 399, 421, 456, 460, 747, 519, 507, 747, 508, 514, - 0, 534, 597, 747, 525, 530, 533, 527, 529, 537, - 751, 559, 486, 488, 540, 541, 563, 498, 495, 597, - 747, 747, 747, 747, 0, 570, 0, 642, 643, 301, - 0, 759, 0, 0, 0, 463, 759, 340, 0, 394, - 386, 388, 747, 391, 384, 651, 652, 0, 0, 668, - 690, 0, 656, 717, 700, 701, 0, 658, 657, 0, - 671, 711, 0, 673, 715, 345, 654, 0, 747, 0, - 0, 0, 419, 0, 407, 409, 0, 692, 0, 396, - 398, 397, 0, 412, 0, 414, 0, 506, 517, 0, - 500, 512, 523, 509, 515, 0, 503, 526, 532, 538, - 536, 0, 493, 494, 496, 497, 311, 0, 759, 0, - 759, 13, 759, 0, 477, 480, 483, 484, 464, 466, - 467, 465, 747, 393, 0, 686, 0, 703, 660, 688, - 661, 661, 697, 702, 759, 716, 661, 708, 661, 685, - 661, 0, 0, 0, 0, 432, 0, 420, 704, 400, - 401, 401, 311, 0, 695, 759, 401, 706, 401, 401, - 425, 747, 423, 426, 0, 520, 521, 510, 0, 516, - 535, 531, 524, 528, 736, 310, 747, 732, 733, 565, - 379, 471, 0, 0, 481, 385, 387, 389, 392, 0, - 664, 0, 666, 655, 0, 672, 0, 669, 674, 348, - 433, 0, 0, 611, 0, 404, 0, 406, 736, 310, - 395, 0, 413, 0, 410, 415, 0, 422, 518, 0, - 0, 513, 450, 472, 478, 479, 482, 0, 0, 661, - 661, 661, 661, 436, 435, 401, 401, 401, 401, 424, - 522, 511, 473, 390, 665, 0, 662, 667, 670, 405, - 0, 402, 408, 411, 0, 661, 401, 759, 663, 403, - 475, 476, 474 + 0, 0, 450, 342, 719, 675, 0, 675, 347, 440, + 441, 0, 271, 319, 675, 608, 746, 0, 418, 417, + 0, 290, 450, 546, 547, 122, 561, 0, 0, 501, + 504, 0, 427, 560, 0, 60, 0, 541, 542, 0, + 491, 490, 0, 0, 249, 43, 209, 0, 0, 570, + 571, 0, 381, 0, 327, 328, 470, 332, 462, 0, + 0, 336, 0, 648, 338, 682, 679, 678, 677, 680, + 688, 697, 676, 0, 709, 698, 713, 712, 708, 674, + 746, 746, 681, 683, 684, 686, 660, 690, 695, 757, + 701, 757, 757, 706, 660, 711, 660, 0, 658, 0, + 0, 652, 675, 431, 434, 609, 416, 746, 0, 684, + 401, 692, 693, 757, 757, 757, 704, 401, 401, 399, + 421, 456, 460, 746, 519, 507, 746, 508, 514, 0, + 533, 596, 0, 525, 529, 532, 526, 528, 536, 558, + 486, 488, 539, 540, 562, 498, 495, 596, 746, 746, + 746, 746, 0, 569, 0, 641, 642, 301, 0, 757, + 0, 0, 0, 463, 757, 340, 0, 394, 386, 388, + 746, 391, 384, 650, 651, 0, 0, 667, 689, 0, + 655, 716, 699, 700, 0, 657, 656, 0, 670, 710, + 0, 672, 714, 345, 653, 0, 746, 0, 0, 0, + 419, 0, 407, 409, 0, 691, 0, 396, 398, 397, + 0, 412, 0, 414, 0, 506, 517, 0, 500, 512, + 523, 509, 515, 0, 503, 0, 531, 537, 535, 0, + 493, 494, 496, 497, 311, 0, 757, 0, 757, 13, + 757, 0, 477, 480, 483, 484, 464, 466, 467, 465, + 746, 393, 0, 685, 0, 702, 659, 687, 660, 660, + 696, 701, 757, 715, 660, 707, 660, 684, 660, 0, + 0, 0, 0, 432, 0, 420, 703, 400, 401, 401, + 311, 0, 694, 757, 401, 705, 401, 401, 425, 746, + 423, 426, 0, 520, 521, 510, 0, 516, 534, 530, + 524, 527, 735, 310, 746, 731, 732, 564, 379, 471, + 0, 0, 481, 385, 387, 389, 392, 0, 663, 0, + 665, 654, 0, 671, 0, 668, 673, 348, 433, 0, + 0, 610, 0, 404, 0, 406, 735, 310, 395, 0, + 413, 0, 410, 415, 0, 422, 518, 0, 0, 513, + 450, 472, 478, 479, 482, 0, 0, 660, 660, 660, + 660, 436, 435, 401, 401, 401, 401, 424, 522, 511, + 473, 390, 664, 0, 661, 666, 669, 405, 0, 402, + 408, 411, 0, 660, 401, 757, 662, 403, 475, 476, + 474 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -1028, -1028, -1028, 923, -1028, 62, 730, -552, -1028, -35, - -1028, 731, -1028, 72, -1028, -212, -254, -66, -1028, -1028, - -1028, -32, -88, -1028, -1028, -36, -1028, -260, 641, 25, - 1106, -141, -6, -68, -1028, -410, -19, 2212, -370, 1108, - -40, -24, -1028, -1028, 5, -1028, 2954, -1028, 1121, -1028, - 1541, -1028, 652, 426, 601, -307, 94, -10, -1028, -360, - -218, 66, -1028, -310, -52, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, 32, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, 509, -1028, 210, 981, -368, - -1028, 126, -700, -1028, -1024, -1001, 198, 116, 355, 317, - -1028, 461, -1028, -860, -1028, 30, 350, -1028, -1028, -1028, - -1028, -1028, -1028, -1028, 494, -1028, -1028, -95, 723, -1028, - -1028, -1028, 915, -1028, -1028, -1028, -1028, -680, -1028, -1, - -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -1028, -526, - -1028, -1028, -1028, -1028, 354, -1028, -1028, -1028, -824, -1028, - 230, -609, -594, -781, -1028, 177, -1028, 178, 190, -1028, - -376, -1028, 373, -1028, -1028, 166, -1028, -1028, 263, 485, - 499, -1028, 1171, 747, 1110, 1394, -1028, 780, 1448, -1028, - 1612, 1744, -1028, -1028, -57, -1028, -1028, -199, -1028, -1028, - -1028, -1028, -1028, -1028, -1028, 0, -1028, -1028, -1028, -1028, - -37, 2020, 1174, 1178, 2236, 1512, -1028, -1028, 329, -1028, - -705, 314, -773, 429, -1027, -785, -603, -908, 236, -200, - 258, 243, -1028, -1028, -503, -690, -213, -984, -987, 234, - 274, -1028, -846, -1028, -513, -379, -1028, -1028, -1028, 6, - -417, -1028, -275, -1028, -1028, -87, -1028, -71, 23, 185, - -583, 322, -194, -60, -44, -2 + -1056, -1056, -1056, 953, -1056, 22, 743, -541, -1056, -51, + -1056, 736, -1056, 115, -1056, -228, -321, -68, -1056, -1056, + -1056, -32, -72, -1056, -1056, 2, -1056, -5, 735, 4, + 1113, -175, 26, -76, -1056, -452, -19, 2254, -362, 1108, + -43, -14, -1056, -1056, 0, -1056, 3078, -1056, 1123, -1056, + 778, -1056, 709, 133, 601, -307, 121, -13, -1056, -283, + -209, -4, -1056, -314, -25, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, 32, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, 507, -1056, -296, 1267, -365, + -1056, 127, -700, -1056, -1027, -1024, 200, 119, 363, 165, + -1056, 454, -1056, -874, -1056, 40, 349, -1056, -1056, -1056, + -1056, -1056, -1056, -1056, 495, -1056, -1056, -96, 722, -1056, + -1056, -1056, 915, -1056, -1056, -1056, -1056, -698, -1056, 5, + -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -1056, -591, + -1056, -1056, -1056, -1056, 361, -1056, -1056, -1056, -851, -1056, + 230, -1055, -711, -779, -1056, 168, -1056, 170, 171, -1056, + -409, -1056, 366, -1056, -1056, 166, -1056, -1056, 246, 28, + 375, -1056, 1151, 666, 777, 842, -1056, 760, 1516, -1056, + 2119, 2191, -1056, -1056, -59, -1056, -1056, -229, -1056, -1056, + -1056, -1056, -1056, -1056, -1056, 3, -1056, -1056, -1056, -1056, + -27, 2015, 1563, 1159, 2490, 1953, -1056, -1056, 314, -1056, + -390, 71, -701, 421, -1019, -433, 145, -971, 75, -404, + 248, 226, -1056, -1056, -214, -674, -320, -969, -991, 234, + 266, -1056, -616, -1056, 162, -816, -1056, -1056, -1056, 157, + -396, -1056, -319, -1056, -1056, -86, -1056, -7, 23, 56, + -593, -236, -66, -28, -2 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 2, 70, 71, 72, 243, 578, 902, 579, + -1, 1, 2, 70, 71, 72, 243, 578, 901, 579, 261, 262, 461, 263, 452, 74, 530, 75, 539, 689, - 886, 368, 370, 371, 839, 76, 77, 515, 249, 79, + 885, 368, 370, 371, 839, 76, 77, 515, 249, 79, 80, 264, 81, 82, 83, 481, 84, 216, 388, 389, 200, 201, 202, 617, 567, 204, 86, 454, 359, 87, 218, 269, 535, 568, 700, 440, 441, 231, 232, 220, 426, 442, 523, 524, 88, 366, 268, 467, 638, 287, - 717, 588, 730, 728, 603, 605, 737, 738, 952, 251, + 717, 588, 730, 728, 603, 605, 737, 738, 951, 251, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 321, 324, 705, 828, 720, 833, 834, 674, 252, 581, - 713, 835, 836, 380, 1020, 1021, 1022, 1023, 1129, 1055, - 958, 867, 868, 959, 1141, 1142, 486, 487, 657, 755, - 864, 1049, 954, 1125, 325, 101, 102, 322, 512, 513, - 671, 767, 516, 517, 675, 769, 845, 721, 1101, 718, - 840, 907, 1013, 1203, 1222, 1234, 1242, 1093, 1094, 1072, - 792, 793, 893, 894, 794, 878, 880, 877, 977, 978, - 979, 1145, 980, 983, 984, 985, 986, 987, 988, 795, - 796, 883, 797, 798, 799, 706, 824, 899, 830, 103, + 713, 835, 836, 380, 1018, 1019, 1020, 1021, 1127, 1053, + 957, 867, 868, 958, 1139, 1140, 486, 487, 657, 755, + 864, 1047, 953, 1123, 325, 101, 102, 322, 512, 513, + 671, 767, 516, 517, 675, 769, 845, 721, 1099, 718, + 840, 906, 1011, 1201, 1220, 1232, 1240, 1091, 1092, 1070, + 792, 793, 892, 893, 794, 878, 881, 877, 976, 977, + 978, 1143, 979, 982, 983, 984, 985, 986, 987, 795, + 796, 882, 797, 798, 799, 706, 824, 898, 830, 103, 104, 105, 106, 107, 108, 109, 498, 661, 110, 500, 111, 112, 499, 501, 292, 295, 296, 492, 659, 658, - 756, 865, 956, 1050, 760, 113, 114, 293, 115, 116, + 756, 865, 955, 1048, 760, 113, 114, 293, 115, 116, 117, 223, 224, 120, 225, 226, 599, 729, 856, 857, - 1108, 1029, 931, 443, 933, 934, 1119, 936, 937, 938, - 939, 963, 964, 940, 941, 942, 943, 944, 967, 968, - 945, 946, 947, 948, 949, 1032, 407, 604, 274, 444, + 1106, 1027, 930, 443, 932, 933, 1117, 935, 936, 937, + 938, 962, 963, 939, 940, 941, 942, 943, 966, 967, + 944, 945, 946, 947, 948, 1030, 407, 604, 274, 444, 228, 123, 642, 570, 608, 602, 411, 307, 436, 437, - 696, 882, 472, 582, 375, 266 + 696, 472, 582, 375, 266 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -2062,678 +2158,595 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 124, 583, 365, 294, 240, 282, 372, 412, 205, 434, - 838, 308, 235, 203, 410, 330, 629, 597, 260, 291, - 969, 536, 227, 227, 374, 367, 367, 309, 205, 367, - 301, 282, 302, 203, 89, 308, 89, 841, 281, 1143, - 317, 215, 215, 747, 282, 282, 282, 265, 222, 222, - 238, 735, 241, 272, 276, 1117, 629, 571, -116, 405, - 369, 271, 275, 373, 203, 622, 125, 580, 320, 1000, - 1002, 754, 651, 622, 73, 1137, 73, 474, -112, 1068, - 1166, 476, 221, 221, 951, 89, 89, 712, 569, 283, - 577, 955, 1123, -113, -120, 1147, 495, 497, 1051, 580, - 222, -119, -115, 885, 203, 1168, 227, 827, -117, 719, - 219, 229, 1001, 1003, -353, 283, 681, -84, 462, 529, - 1109, 270, 626, 222, 222, 215, 267, 222, 379, 390, - 390, -112, 222, 3, 317, 430, 611, -98, -114, 1024, - 1034, 847, -353, -353, 315, 316, 1109, -116, -113, -523, - 930, 852, 930, 569, 237, 577, 422, 318, 1035, 930, - 612, 615, 233, 791, 458, 827, 221, 663, 667, 1143, - 446, -118, 448, 1069, 260, 716, 965, 654, 851, -107, - 1048, -732, 1111, 643, 1166, 1117, 1124, 525, 1122, 1148, - 464, -353, -120, 1118, 408, 872, 485, 1137, -636, -103, - 910, 308, 529, 529, 879, 305, 1223, 306, 1131, 456, - 643, 305, 480, 306, -104, -111, 1138, 465, 629, 427, - 664, 668, -110, -106, 260, 427, 434, -636, 282, -108, - 733, 445, 1097, 1024, 1103, -119, 227, 305, 227, 306, - 124, 89, 479, 242, 367, 367, 367, 367, 930, 510, - 511, 318, 935, 265, 935, 215, 256, 215, 215, -105, - 237, 935, 222, 960, 222, 222, 1109, 244, 222, -112, - 222, -112, 773, 622, 89, 622, 89, 282, 505, 506, - 507, 508, -732, 1109, 724, -116, -113, -116, -113, 89, - 520, 89, 592, 260, 734, 531, 221, 913, 221, 662, - 477, 662, 587, -118, 950, 367, -733, 297, 997, -118, - 527, -118, 283, 308, 73, 981, 1099, 643, 973, 1024, - 594, 1024, 265, 1210, 435, 927, 438, 643, -115, 460, - -120, -117, -120, 298, 922, 584, 1100, 586, 1216, 585, - 1206, 89, 222, 222, 222, 222, 89, 222, 222, 928, - 935, 974, 976, 970, 488, 885, 315, 316, 222, -635, - 89, 283, 445, 537, 965, 926, -644, 976, 976, 982, - 575, 504, 965, -119, 965, -119, 885, 989, 531, 531, - 778, 73, 1079, 305, 1073, 306, 509, -106, -635, 215, - 989, 989, 522, -112, 1070, 823, 222, 522, 89, 299, - 1080, 1164, 89, 222, 89, 744, -107, 873, 874, 490, - 491, 569, 1150, 577, 480, 876, 575, 300, 222, 1084, - 1085, 447, 1024, 1024, -109, 935, -733, 445, 637, 237, - 282, 623, -108, 890, 814, 575, 935, 810, 812, 323, - 427, 821, 427, 817, 819, 629, 537, 537, 234, 466, - 688, 960, 205, 468, 215, 752, 326, 203, 480, 960, - 1078, 222, 763, 575, -645, 432, -115, 763, -115, -117, - -114, -117, 529, 459, 282, 1146, 649, 911, 327, 529, - 529, 891, 445, 333, 892, 529, 529, 1095, -106, -747, - 575, -113, -120, 361, 965, 1121, 965, 89, 237, 415, - -119, 965, 622, 965, 319, 727, 331, -107, -106, 215, - 989, -106, 994, 995, 283, -106, 222, 470, 1115, 414, - 996, 362, 363, 1115, 471, 714, -120, -107, 1113, -732, - -107, 1010, 744, -108, -107, 1198, 1012, 1240, 736, 1201, - 965, 970, 356, 357, 358, 1115, 708, 488, 710, 970, - 1146, 970, 748, -108, 1146, 1113, -108, 749, 283, 694, - -108, 861, 896, 1037, 1038, 697, 935, 701, 60, 698, - 364, 1181, 751, 1202, 989, 702, 690, 707, 416, -115, - 418, 960, 753, 361, -117, 1059, 1060, 1061, -114, 445, - 361, 1221, -115, 741, 695, -637, -117, 575, 282, 445, - 489, 740, 490, 491, 529, 1220, 1146, 575, -114, 702, - -114, 362, 428, 89, 480, 89, 215, 205, 362, 457, - 630, 427, 203, 222, -637, 632, 215, 236, 634, 423, - 282, 636, 488, 222, 488, 89, 222, 816, 976, 750, - -638, 702, 424, 78, 859, 78, 488, 646, 531, 695, - -640, -105, 648, 966, -639, 531, 531, 78, 78, 425, - 429, 531, 531, 367, -114, 473, 962, 429, 849, -638, - 222, 970, 471, 970, 234, 319, -641, 695, 970, -640, - 970, 236, 283, -639, 488, 445, 237, 490, 491, 490, - 491, 433, 848, 575, 78, 78, -747, 850, 858, 493, - 237, 490, 491, 825, 831, -641, 837, -729, 837, 78, - 680, 89, 215, 431, 283, 89, 537, 970, 762, 222, - 765, -630, 453, 537, 537, 1161, 338, 339, 676, 537, - 537, -633, 78, 78, 606, 1173, 78, 493, 1196, 490, - 491, 78, 618, 203, 488, 237, 230, 695, 427, -630, - -630, 772, -105, 233, -310, 774, 1190, 695, 361, 89, - -633, 222, 89, 607, 826, 869, -747, 869, 367, 237, - 827, 522, -105, 349, 350, -105, -642, -630, -630, -105, - 531, 1156, -310, -310, -643, 595, 362, 483, 703, 596, - 914, 576, -301, 901, 711, 333, 715, 494, 903, 490, - 491, 695, 904, 595, -642, -642, 463, 875, -83, 361, - 695, 881, -643, -643, 643, 469, -644, 475, 1114, 478, - -301, -301, 900, 482, -729, 502, -630, 514, -645, -729, - 528, -310, 972, 589, -733, 484, 333, 362, 590, 832, - 827, 966, 503, -112, 598, 1135, 282, 593, 537, 966, - 78, 966, 488, -642, 962, -113, 576, 633, 962, 631, - 89, -643, 962, -103, 962, 89, 222, 1011, 635, -301, - 640, 78, 641, 78, 78, -104, 1016, 78, -98, 78, - 650, 89, 415, 78, 576, 78, 591, 361, 89, 971, - 459, 1046, 673, 354, 355, 356, 357, 358, 78, 89, - 78, 670, 89, 888, 889, 660, -283, 490, 491, -120, - 282, 576, 449, 678, 695, 362, 409, -119, 679, 1089, - 682, 854, 450, 451, 683, 1075, 1162, 1163, 842, -111, - 1006, 846, 684, 704, 89, 709, 863, -110, 1033, 716, - 1033, 1033, 1081, 89, 719, 853, 764, 766, 768, 697, - 78, 78, 78, 78, 78, 78, 78, 78, -284, 361, - 809, -311, 1033, 1033, 1033, 827, 815, 78, 855, 78, - 862, 966, 78, 966, 866, 1090, -115, 1092, 966, -285, - 966, 971, -730, 100, 962, 100, 962, 362, 600, -311, - -311, 962, 884, 962, 1057, 693, -106, 100, 100, 885, - 695, 282, 887, 699, 898, 78, 881, 78, -286, 831, - 990, 78, 78, 78, 837, 1126, 781, 966, 576, 488, - 496, -736, 1027, 1028, -633, 695, 695, 78, 576, 1031, - 962, 361, 1041, 1036, 100, 100, 601, 699, -311, 1044, - 1039, 1042, 89, 1052, 89, 905, 1053, 1054, 906, 100, - 1086, 908, -633, -633, 488, 78, 78, 1058, 912, 362, - 686, 915, 1062, -736, 1064, 1074, 614, 616, 693, 699, - 78, 971, 100, 100, 490, 491, 100, 998, 1077, 89, - 1066, 100, 89, 614, 616, 1128, 445, 826, 707, 1182, - 837, -736, -736, 361, 575, 1104, 367, 367, 361, -730, - 1106, -633, 961, 1127, -730, 1132, 78, 665, 687, 490, - 491, 644, 1033, 215, 576, 698, 1025, 1026, 921, 816, - 222, 362, 1087, 1017, 1144, 78, 362, 1133, 1149, 1169, - 1204, 1205, 1171, 1033, 1035, 1174, 1176, 922, -736, 1183, - -736, 1180, -117, -732, 1184, 488, -114, 1186, 916, 1191, - 917, 918, 919, 920, 921, 89, 89, 1193, 1199, 1067, - 1045, 1200, -108, 1207, 1197, 455, -105, 1208, 926, 927, - 1088, 1214, -732, 922, 800, 601, 119, -733, 119, 695, - 310, 311, 312, 313, 314, 1082, 1083, 1225, 801, 1230, - 100, 645, 333, 928, 222, 222, 647, 924, 493, 1237, - 490, 491, 377, 1150, 926, 927, 394, 1105, 360, 346, - 347, 100, 739, 100, 100, 829, 1102, 100, 1160, 100, - 1167, 957, 78, 100, 78, 100, 1219, 119, 119, 928, - 870, 285, 78, 991, 860, 837, 1241, 672, 100, 518, - 100, 993, 78, 1096, 78, 78, 351, 352, 353, 354, - 355, 356, 357, 358, 1151, 1152, 1159, 285, 992, 1040, - 916, 1043, 917, 918, 919, 920, 89, 1153, 800, 800, - 382, 392, 392, 392, 1091, 1116, 413, 406, 1120, 78, - 666, 1047, 801, 801, 932, 1063, 1065, 1165, 1130, 1112, - 100, 100, 100, 100, 100, 100, 100, 100, 1136, 333, - 1139, 1134, 1110, 757, 758, 1076, 759, 100, 0, 100, - 0, 0, 100, 46, 47, 0, 346, 347, 0, 0, - 78, 0, 0, 0, 78, 78, 0, 0, 78, 0, - 0, 1179, 78, 78, 41, 42, 43, 44, 78, 78, - 0, 0, 0, 811, 813, 100, 0, 100, 0, 818, - 820, 100, 100, 100, 0, 353, 354, 355, 356, 357, - 358, 0, 800, 800, 0, 0, 0, 100, 78, 0, - 78, 78, 800, 800, 800, 0, 801, 801, 800, 800, - 0, 0, 0, 119, 0, 0, 801, 801, 801, 0, - 0, 1213, 801, 801, 0, 100, 100, 811, 813, 0, - 818, 820, 0, 0, 0, 1209, 0, 1211, 0, 0, - 100, 0, 1212, 0, 0, 0, 119, 0, 119, 0, - 1215, 0, 1217, 0, 1170, 1172, 0, 0, 0, 1218, - 1175, 119, 1177, 119, 1178, 0, 802, 916, 0, 917, - 918, 919, 920, 921, 0, 0, 100, 1185, 1187, 0, - 0, 0, 0, 1192, 285, 1194, 1195, 78, 0, 0, - 0, 1235, 922, 800, 0, 100, 1236, 0, 897, 78, - 0, 800, 0, 0, 78, 78, 1140, 801, 917, 918, - 919, 920, 0, 119, 0, 801, 924, 0, 119, 0, - 78, 0, 925, 926, 927, 0, 0, 78, 800, 0, - 0, 0, 119, 285, 0, 0, 0, 0, 78, 0, - 0, 78, 801, 897, 122, 576, 122, 0, 928, 0, - 0, 929, 0, 1224, 1226, 1227, 1228, 0, 0, 0, - 802, 802, 1229, 1231, 1232, 1233, 0, 0, 237, 0, - 119, 333, 0, 78, 119, 0, 119, 0, 0, 1238, - 0, 0, 78, 1239, 800, 0, 0, 0, 346, 347, - 0, 0, 100, 0, 100, 122, 122, 0, 801, 286, - 0, 916, 100, 917, 918, 919, 920, 921, 0, 0, - 0, 0, 100, 0, 100, 100, 0, 0, 0, 916, - 0, 917, 918, 919, 920, 286, 922, 273, 354, 355, - 356, 357, 358, 0, 0, 0, 0, 0, 383, 393, - 393, 0, 916, 0, 917, 918, 919, 920, 0, 100, - 924, 0, 0, 0, 802, 802, 925, 926, 927, 800, - 0, 0, 0, 800, 802, 802, 802, 0, 1018, 119, - 802, 802, 0, 801, 1019, 0, 0, 801, 0, 800, - 0, 78, 928, 78, 0, 929, 285, 0, 0, 0, - 100, 1018, 0, 801, 100, 100, 0, 953, 100, 0, - 0, 0, 100, 100, 0, 0, 0, 0, 100, 100, - 0, 0, 0, 0, 800, 800, 0, 0, 78, 0, - 0, 78, 0, 0, 0, 0, 0, 0, 801, 801, - 285, 0, 0, 0, 0, 0, 0, 0, 100, 0, - 100, 100, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 122, 0, 0, 0, 802, 0, 0, 0, 78, - 0, 0, 0, 802, 0, 0, 0, 0, 916, 0, - 917, 918, 919, 920, 921, 0, 0, 0, 417, 0, - 0, 419, 420, 421, 122, 119, 122, 119, 0, 0, - 802, 0, 0, 922, 78, 78, 0, 0, 0, 122, - 0, 122, 0, 0, 0, 0, 0, 119, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 924, 0, 0, - 0, 0, 286, 925, 926, 927, 0, 100, 0, 803, - 0, 0, 0, 78, 78, 0, 0, 0, 0, 100, - 0, 0, 0, 0, 100, 100, 802, 0, 0, 928, - 0, 122, 929, 0, 285, 0, 122, 0, 0, 0, - 100, 0, 0, 0, 0, 0, 0, 100, 0, 0, - 122, 286, 0, 538, 0, 0, 0, 0, 100, 0, - 0, 100, 0, 119, 0, 0, 285, 119, 0, 0, - 0, 0, 0, 808, 0, 0, 0, 521, 0, 0, - 0, 0, 534, 0, 0, 78, 0, 0, 122, 0, - 0, 0, 122, 100, 122, 0, 0, 0, 0, 0, - 0, 802, 100, 803, 803, 802, 0, 0, 0, 0, - 0, 119, 0, 0, 119, 0, 0, 0, 0, 0, - 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 538, 538, 0, 916, - 0, 917, 918, 919, 920, 921, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 802, 802, 0, 0, - 0, 0, 0, 0, 922, 0, 0, 808, 808, 0, - 0, 0, 0, 0, 0, 619, 621, 0, 923, 0, - 0, 0, 0, 0, 273, 0, 0, 122, 924, 0, - 0, 0, 0, 0, 925, 926, 927, 803, 803, 0, - 0, 100, 0, 100, 286, 0, 0, 803, 803, 803, - 0, 0, 119, 803, 803, 0, 0, 119, 0, 0, - 928, 621, 0, 929, 273, 0, 0, 0, 0, 0, - 0, 0, 118, 119, 118, 0, 0, 0, 100, 0, - 119, 100, 0, 0, 0, 0, 0, 0, 286, 0, - 0, 119, 0, 0, 119, 0, 0, 0, 0, 0, - 0, 808, 808, 0, 0, 0, 0, 0, 0, 0, - 677, 808, 808, 808, 0, 0, 0, 808, 808, 100, - 0, 0, 1008, 118, 118, 0, 119, 284, 0, 0, - 0, 0, 0, 804, 0, 119, 0, 0, 803, 0, - 0, 0, 0, 122, 0, 122, 803, 0, 0, 0, - 0, 0, 0, 284, 100, 100, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 122, 381, 391, 391, 391, - 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 392, 805, 0, 0, - 0, 0, 0, 100, 100, 0, 0, 0, 0, 0, - 0, 0, 808, 0, 0, 0, 0, 0, 0, 742, - 808, 743, 286, 0, 0, 0, 0, 0, 0, 0, - 0, 761, 0, 0, 621, 0, 273, 804, 804, 803, - 0, 0, 0, 0, 119, 0, 119, 808, 0, 0, - 0, 122, 0, 0, 286, 122, 538, 0, 0, 0, - 0, 0, 0, 538, 538, 0, 0, 0, 0, 538, - 538, 0, 0, 0, 85, 100, 85, 0, 0, 771, - 0, 119, 0, 0, 119, 0, 0, 392, 0, 118, - 0, 805, 805, 0, 0, 0, 0, 0, 121, 122, - 121, 0, 122, 808, 0, 0, 822, 0, 0, 0, - 0, 0, 0, 0, 803, 0, 0, 0, 803, 0, - 0, 844, 118, 0, 118, 85, 85, 0, 0, 0, - 0, 804, 804, 0, 803, 0, 0, 118, 0, 118, - 0, 804, 804, 804, 0, 0, 0, 804, 804, 121, - 121, 0, 0, 0, 0, 0, 0, 119, 119, 0, - 284, 806, 0, 0, 0, 0, 0, 0, 378, 803, - 803, 871, 0, 0, 0, 0, 0, 0, 808, 0, - 0, 0, 808, 0, 0, 805, 805, 0, 538, 118, - 0, 0, 0, 0, 118, 805, 805, 805, 808, 0, - 122, 805, 805, 0, 0, 122, 0, 0, 118, 284, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 122, 0, 0, 0, 0, 0, 0, 122, 0, - 0, 0, 804, 808, 808, 0, 0, 0, 0, 122, - 804, 0, 122, 0, 909, 0, 118, 0, 0, 0, - 118, 0, 118, 0, 0, 806, 806, 0, 0, 0, - 0, 0, 0, 273, 0, 0, 0, 804, 119, 0, - 1009, 0, 0, 0, 122, 0, 0, 0, 0, 0, - 0, 85, 0, 122, 0, 0, 805, 0, 0, 0, - 0, 0, 0, 807, 805, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, - 0, 1015, 0, 0, 85, 0, 85, 0, 0, 0, - 0, 805, 0, 804, 0, 0, 0, 0, 0, 85, - 0, 85, 0, 0, 393, 0, 0, 0, 121, 1030, - 121, 0, 0, 0, 0, 118, 0, 0, 0, 806, - 806, 0, 0, 121, 0, 121, 0, 0, 0, 806, - 806, 806, 284, 0, 0, 806, 806, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, - 0, 85, 122, 0, 122, 0, 85, 807, 807, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 804, 0, - 85, 0, 804, 532, 0, 121, 284, 0, 0, 0, - 121, 0, 0, 0, 0, 1098, 0, 0, 804, 122, - 0, 0, 122, 0, 121, 393, 0, 121, 1107, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, - 0, 0, 85, 0, 85, 0, 0, 0, 0, 0, - 806, 0, 805, 804, 804, 0, 805, 0, 806, 0, - 0, 118, 121, 118, 0, 0, 121, 0, 121, 0, - 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, - 0, 807, 807, 118, 0, 806, 532, 532, 0, 0, - 0, 807, 807, 807, 0, 122, 122, 807, 807, 0, - 0, 0, 0, 0, 0, 0, 0, 805, 805, 0, - 121, 121, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 284, 0, 0, 0, 0, 0, 0, 85, 0, 332, - 0, 806, 0, -759, 0, 0, 0, 0, 0, 0, - 0, -759, -759, -759, 0, 0, -759, -759, -759, 118, - -759, 121, 284, 118, 0, 0, 0, 0, -759, -759, - -759, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -759, -759, 807, -759, -759, -759, -759, -759, 0, 0, - 807, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 345, 0, 0, 122, 118, 346, 347, - 118, -759, 0, 0, 0, 0, 806, 807, 0, 0, - 806, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 806, 0, 0, -759, - -759, 348, 0, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 85, 0, 85, 0, 0, 0, 0, - 0, 0, 0, -759, 0, 0, 0, 0, 0, 0, - 0, 806, 806, 807, 0, 85, 0, 121, 0, 121, - 0, 0, 0, 0, 0, 0, -759, -759, 0, 0, - 0, 233, -759, 0, -759, 0, -759, 0, 0, 121, - 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, - 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, - 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 118, 807, 0, - 118, 85, 807, 0, 0, 85, 532, 0, 0, 0, - 0, 0, 0, 532, 532, 0, 0, 0, 807, 532, - 532, 0, 0, 0, 0, 121, 0, 0, 1007, 121, - 121, 0, 118, 0, 0, 0, 0, 121, 121, 0, - 0, 118, 0, 121, 121, 0, 0, 0, 0, 85, - 0, 0, 85, 807, 807, 0, 0, 0, 0, 0, + 124, 294, 260, 365, 583, 308, 412, 330, 203, 235, + 838, 205, 221, 221, 240, 410, 291, 536, 434, 841, + 215, 215, 372, 367, 367, 597, 125, 367, 203, 308, + 651, 205, 282, 747, 89, 474, 89, 629, 281, 476, + 301, 998, 1000, 309, 569, 1141, 577, 317, 222, 222, + 238, 270, 241, 272, 276, 1107, 405, 571, 282, 203, + 369, 754, 735, 373, 712, 320, 495, 497, 1115, 1135, + 302, 282, 282, 282, 681, 1164, 580, 629, -112, 265, + 1166, 1107, -107, 1049, 462, 89, 89, 1196, 374, 283, + 1066, 1199, 611, 612, 615, 827, 221, 3, 791, 203, + 222, 333, -113, 529, 215, 716, -116, 236, -643, 569, + 242, 577, 237, 999, 1001, 283, 361, 73, -116, 73, + -84, 580, 626, 222, 222, 1035, 1036, 222, 379, 390, + 390, 847, 222, 315, 316, -112, 430, 219, 229, 643, + -98, 852, 622, 1219, 362, 409, 256, 1057, 1058, 1059, + 622, -120, 1121, 525, 422, 234, 950, 305, 260, 306, + 356, 357, 358, 954, 318, 458, 643, 663, 446, 267, + 448, 237, 1120, 227, 227, 1141, 826, 654, -119, 1164, + 323, 1221, 827, -107, 1067, 872, 529, 529, 305, 851, + 306, 1135, 964, 456, 879, 308, -112, 485, 1115, -103, + -118, 1107, -118, -107, 480, -731, -107, 667, 260, 909, + -107, 319, 271, 275, 305, 1145, 306, 884, 1107, 427, + 664, 408, 676, -104, 297, 427, 221, -107, 221, -731, + 773, 445, 1095, 465, 215, 434, 215, 215, 733, 629, + 124, 89, 367, 367, 367, 367, 1122, 510, 511, 237, + 968, 1046, 479, -731, 464, 282, -116, 227, -116, 305, + 668, 306, 222, -523, 222, 222, 1071, 244, 222, 662, + 222, 662, -111, 643, 89, 317, 89, 260, 505, 506, + 507, 508, 703, 643, 724, 265, 973, 975, 711, 89, + 715, 89, 447, 592, 734, 298, 1171, 995, 299, -110, + 477, 975, 975, 367, 282, -113, 884, 308, 912, 1146, + 527, 1204, 283, -115, 1097, 949, 1098, 1188, 594, 584, + 466, 586, 522, -109, 468, -732, 595, 522, 520, 972, + 596, 504, -117, 531, -112, -732, -112, -120, -118, 585, + -118, 89, 222, 222, 222, 222, 89, 222, 222, 300, + 622, 435, 622, 438, 265, -114, 1144, 73, 222, 237, + 89, 283, 445, 537, 889, 575, 587, 569, 215, 577, + 810, 812, 460, -119, 873, 874, 817, 819, 964, 326, + 778, 234, 319, 1068, -115, 327, 964, 227, 964, 227, + 449, 823, 318, 60, 1076, 884, 222, 233, 89, -644, + 450, 451, 89, 222, 89, 331, 480, 1082, 1083, -117, + 1109, 575, 890, 752, 744, 891, 531, 531, 222, -114, + 1093, 1116, 842, 876, 73, 846, -113, 445, 488, 509, + 575, 1144, 763, 215, -106, 1144, 1129, 763, 637, 853, + 427, 1162, 427, -113, 1136, -113, 537, 537, 315, 316, + 480, 688, 203, -108, 414, 205, 529, 282, 575, 338, + 339, 222, 961, 529, 529, 929, 629, 929, 926, 529, + 529, -635, -106, 488, 929, -120, -105, -120, 992, 993, + 910, 489, 445, 490, 491, 575, 1218, 1144, 215, 416, + 1022, 630, 927, -643, 236, 895, 632, 89, 576, 634, + -635, 282, 636, 425, 1119, -634, 349, 350, 964, 418, + 964, -119, 488, -119, 283, 964, 222, 964, 646, 714, + -112, 727, -115, 648, -115, 423, 493, 994, 490, 491, + 708, 618, 710, 1008, -634, 1238, 736, 431, 1010, 904, + -103, 744, 905, -636, -108, 907, 965, -117, 424, -117, + -746, 1208, 911, 237, 964, 914, 694, -114, 283, -114, + -644, 1200, 929, 576, 701, 493, 1214, 490, 491, 433, + 751, 975, -636, -106, 753, 702, 690, 707, 453, 622, + 1179, 680, 623, 1022, 1101, -637, 595, -113, 529, 445, + 875, 576, 575, -106, 695, 215, -106, 415, 740, 445, + -106, -639, 575, 741, 488, 215, 480, -104, -638, 702, + -353, -640, 230, 89, -637, 89, 1015, 203, 576, 488, + 205, 427, -629, 222, -120, 282, -632, 649, 488, 1032, + -639, 233, -105, 222, 606, 89, 222, -638, -353, -353, + -640, 702, 333, 859, -111, -108, 432, 1033, 961, 695, + -746, -629, 961, 1043, 237, -632, 961, 282, 961, 490, + 491, 367, 849, 607, 827, -108, 719, 988, -108, 1022, + 222, 1022, -108, -120, 490, 491, 848, 695, 988, 988, + 459, 494, 283, 490, 491, 445, 531, -353, 575, 814, + 762, 215, 361, 531, 531, 858, 821, 850, 463, 531, + 531, 522, 693, 825, 831, 765, 837, -119, 837, 1112, + 699, 89, -83, 1077, 283, 89, 537, 800, 469, 222, + 362, 363, 475, 537, 537, 576, 1159, -110, 459, 537, + 537, 1078, 965, -105, 470, 576, 1133, 78, 203, 78, + 965, 471, 965, 415, 699, 980, 478, 695, 427, 488, + 496, 78, 78, -105, 748, -119, -105, 695, -728, 89, + -105, 222, 89, 482, 921, 869, 367, 869, 643, 364, + -120, 502, 1022, 1022, 514, 693, 699, 900, 961, 1154, + 961, -115, 902, 488, 913, 961, 473, 961, 78, 78, + 750, 361, 854, 471, 772, 925, 488, 988, 774, 981, + -629, 695, 903, 78, 490, 491, 749, 863, 361, 528, + 695, 800, 800, 861, 589, 1111, 971, -310, 531, 362, + 428, 576, 899, 1177, 961, 503, 78, 78, -629, -629, + 78, 832, 827, -117, 273, 78, 362, 457, 490, 491, + -114, 1148, 1111, 697, 593, -310, -310, 698, 537, 493, + 1009, 490, 491, -729, 1148, 816, 1194, 598, 361, 1014, + 89, 988, 965, 237, 965, 89, 222, 631, 429, 965, + -115, 965, 282, 640, -117, -728, 673, -629, 1160, 1161, + -728, 89, -114, 1211, 1044, 429, 362, 483, 89, 970, + 488, 333, 887, 888, -310, -632, 633, -732, 635, 89, + -98, 641, 89, 670, 679, 800, 800, 915, 965, 916, + 917, 918, 919, 695, 800, 800, 800, 650, 1087, -283, + 800, 800, 1073, -632, -632, 678, -641, 682, 683, 1004, + 704, 697, 684, 89, 709, 484, 282, 1031, 1079, 1031, + 1031, 960, 89, 660, 78, 490, 491, 996, 354, 355, + 356, 357, 358, -642, -641, -641, 1016, 1088, -115, 1090, + 716, 1031, 1031, 1031, 719, 78, 768, 78, 78, 698, + -729, 78, -632, 78, 816, -729, -284, 78, -106, 78, + 970, -642, -642, 764, 809, 417, 1023, 1024, 419, 420, + 421, -301, 78, 1055, 78, 766, -117, 1124, 815, 695, + 934, -114, 934, -641, 361, 800, 827, 831, 361, 934, + 855, 959, 837, 800, 862, 1038, -108, 1041, 866, -301, + -301, -105, -285, 695, 695, 880, 282, 883, 969, 1065, + -642, -311, 362, 590, 884, 886, 362, 600, 897, 800, + 89, -286, 89, 1025, 78, 78, 78, 78, 78, 78, + 78, 78, 781, 1026, 1080, 1081, -735, 1029, 488, -311, + -311, 78, 1034, 78, 801, 1037, 78, 1039, -301, 970, + 1040, 1180, 1042, 1050, 361, 1051, 1103, 89, 1052, 1056, + 89, 591, 1064, 1126, 445, 601, 707, 575, 837, 1060, + 215, 1062, 367, 367, 1072, 800, 1074, 934, -735, 78, + 1075, 78, 362, 686, 521, 78, 78, 78, -311, 534, + 1031, 665, 1114, 490, 491, 1118, 1084, 361, 222, 826, + 1102, 78, 1104, 614, 616, 1125, -735, -735, 1202, 1203, + 1130, 1031, 1061, 1063, 1142, 1134, 1147, 1137, 361, 1167, + 614, 616, 1169, 1033, 1172, 362, 1085, 1174, 1178, 78, + 78, 687, 1181, 89, 89, 1182, 1163, 920, 801, 801, + 1184, -731, 1195, 1189, 78, 1191, 362, 1131, 644, 1197, + 800, 934, 1198, -735, 800, -735, 921, 695, -731, 1168, + 1170, 1235, 934, 1205, 1206, 1173, 1212, 1175, -732, 1176, + 800, 1113, 222, 222, 1086, 455, 1113, 959, 1223, 1228, + 78, 647, 619, 621, 645, 959, 394, 925, 926, 377, + 360, 273, 739, 829, 969, 601, 1100, 1158, 1113, 78, + 576, 1165, 969, 870, 969, 800, 800, 757, 758, 956, + 759, 989, 927, 837, 1217, 860, 672, 46, 47, 518, + 1239, 1094, 1207, 1149, 1209, 1150, 1151, 991, 621, 1210, + 990, 273, 801, 801, 1157, 1089, 413, 1213, 406, 1215, + 666, 801, 801, 801, 89, 1045, 1216, 801, 801, 100, + 915, 100, 916, 917, 918, 919, 931, 1110, 1222, 1224, + 1225, 1226, 1132, 100, 100, 915, 1128, 916, 917, 918, + 919, 920, 1108, 1183, 1185, 0, 0, 677, 1233, 1190, + 0, 1192, 1193, 1234, 1236, 310, 311, 312, 313, 314, + 921, 0, 934, 0, 0, 0, 78, 0, 78, 1016, + 100, 100, 0, 0, 922, 1017, 78, 959, 915, 0, + 916, 917, 918, 919, 923, 100, 78, 0, 78, 78, + 924, 925, 926, 0, 969, 1138, 969, 916, 917, 918, + 919, 969, 801, 969, 0, 802, 0, 0, 100, 100, + 801, 0, 100, 0, 0, 0, 927, 100, 0, 928, + 0, 0, 0, 78, 41, 42, 43, 44, 1227, 1229, + 1230, 1231, 0, 0, 0, 0, 801, 333, 0, 0, + 969, 0, 0, 0, 0, 0, 742, 0, 743, 1237, + 811, 813, 0, 0, 346, 347, 818, 820, 0, 0, + 0, 621, 333, 273, 78, 0, 0, 0, 78, 78, + 0, 0, 78, 0, 0, 0, 78, 78, 0, 346, + 347, 0, 78, 78, 0, 915, 0, 916, 917, 918, + 919, 920, 801, 353, 354, 355, 356, 357, 358, 802, + 802, 0, 0, 0, 811, 813, 771, 818, 820, 0, + 921, 0, 78, 0, 78, 78, 803, 0, 0, 354, + 355, 356, 357, 358, 0, 0, 100, 0, 0, 0, + 0, 0, 0, 822, 923, 0, 0, 0, 0, 0, + 924, 925, 926, 0, 0, 0, 0, 100, 844, 100, + 100, 0, 0, 100, 0, 100, 0, 0, 0, 100, + 0, 100, 0, 0, 0, 0, 927, 801, 0, 928, + 0, 801, 0, 0, 100, 896, 100, 0, 0, 0, + 0, 804, 0, 0, 0, 0, 237, 801, 0, 0, + 0, 0, 0, 802, 802, 0, 0, 0, 871, 0, + 0, 78, 802, 802, 802, 0, 0, 0, 802, 802, + 803, 803, 0, 78, 0, 119, 0, 119, 78, 78, + 896, 0, 801, 801, 0, 0, 100, 100, 100, 100, + 100, 100, 100, 100, 78, 0, 0, 0, 0, 0, + 0, 78, 0, 100, 0, 100, 0, 0, 100, 0, + 0, 0, 78, 0, 0, 78, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 119, 119, 0, 0, + 285, 908, 0, 0, 0, 804, 804, 0, 0, 0, + 0, 100, 0, 100, 0, 0, 78, 100, 100, 100, + 273, 0, 0, 802, 0, 78, 285, 0, 0, 0, + 0, 802, 0, 100, 803, 803, 0, 0, 0, 382, + 392, 392, 392, 803, 803, 803, 0, 0, 0, 803, + 803, 0, 0, 0, 0, 0, 0, 802, 0, 0, + 0, 100, 100, 0, 0, 0, 0, 1013, 0, 0, + 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, + 915, 0, 916, 917, 918, 919, 920, 0, 0, 0, + 0, 0, 0, 0, 0, 1028, 0, 0, 0, 804, + 804, 0, 0, 0, 0, 921, 0, 0, 804, 804, + 804, 0, 100, 802, 804, 804, 0, 0, 0, 0, + 0, 0, 0, 78, 0, 78, 0, 0, 0, 923, + 0, 100, 0, 0, 803, 924, 925, 926, 0, 0, + 0, 915, 803, 916, 917, 918, 919, 920, 0, 0, + 0, 0, 119, 0, 0, 0, 0, 332, 0, 0, + 78, 927, 0, 78, 928, 0, 921, 0, 803, 0, + 1096, 0, 0, 0, 0, 0, 952, 0, 0, 0, + 0, 0, 0, 1105, 0, 119, 0, 119, 802, 0, + 923, 0, 802, 0, 0, 0, 924, 925, 926, 804, + 119, 78, 119, 0, 0, 0, 0, 804, 802, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 927, 285, 803, 928, 346, 347, 100, 0, + 100, 0, 0, 804, 0, 0, 78, 78, 100, 0, + 0, 0, 0, 802, 802, 0, 0, 0, 100, 0, + 100, 100, 119, 0, 0, 0, 0, 119, 0, 348, + 0, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 119, 285, 0, 0, 78, 78, 0, 0, 0, + 0, 0, 0, 0, 0, 100, 0, 0, 0, 804, + 0, 0, 915, 0, 916, 917, 918, 919, 920, 803, + 0, 0, 0, 803, 0, 0, 0, 0, 0, 119, + 0, 0, 0, 119, 0, 119, 0, 921, 0, 803, + 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, + 100, 100, 0, 0, 100, 122, 0, 122, 100, 100, + 0, 923, 0, 0, 100, 100, 0, 78, 925, 926, + 0, 0, 0, 0, 803, 803, 0, 0, 0, 0, + 0, 0, 0, 0, 804, 0, 0, 0, 804, 0, + 0, 0, 0, 927, 100, 0, 100, 100, 333, 0, + 0, 0, 0, 0, 804, 0, 122, 122, 0, 0, + 286, 0, 0, 0, 0, 346, 347, 118, 0, 118, + 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, + 0, 0, 0, 0, 0, 0, 286, 0, 0, 804, + 804, 0, 0, 0, 0, 285, 0, 0, 0, 383, + 393, 393, 351, 352, 353, 354, 355, 356, 357, 358, + 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, + 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 0, 100, 0, 0, 284, 0, + 100, 100, 23, 24, 25, 26, 0, 0, 0, 0, + 0, 381, 391, 391, 391, 0, 100, 0, 32, 33, + 34, 781, 0, 100, 0, 782, 0, 0, 41, 42, + 43, 44, 45, 0, 100, 0, 0, 100, 0, 0, + 0, 0, 0, 0, 119, 0, 119, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, + 784, 0, 122, 0, 0, 0, 119, 785, 100, 0, + 786, 0, 0, 787, 788, 0, 974, 100, 0, 789, + 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, + 0, 0, 0, 0, 0, 122, 0, 122, 0, 0, + 0, 790, 0, 0, 0, 805, 0, 0, 279, 0, + 122, 0, 122, 285, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, + 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, + 0, 0, 119, 0, 0, 285, 119, 0, 0, 0, + 0, 0, 808, 0, 0, 0, 85, 118, 85, 118, + 0, 0, 122, 0, 0, 0, 0, 122, 0, 0, + 0, 0, 118, 0, 118, 100, 0, 100, 0, 0, + 0, 122, 286, 0, 538, 0, 0, 0, 0, 0, + 119, 0, 0, 119, 0, 284, 0, 0, 0, 805, + 805, 0, 0, 0, 0, 0, 0, 85, 85, 0, + 0, 0, 100, 0, 0, 100, 0, 0, 0, 122, + 0, 0, 0, 122, 118, 122, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 121, 0, 0, 121, 0, 0, 0, - 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 118, 284, 0, 808, 808, 0, 0, + 378, 0, 0, 100, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 538, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 250, 253, 254, 255, 0, 0, 0, 217, - 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 303, 304, 0, 0, 0, 0, 532, 0, - 118, 0, 118, 0, 0, 0, 0, 0, 0, 0, - 85, 0, 0, 0, 0, 85, 0, 0, 0, 0, - 0, 0, 121, 0, 217, 0, 0, 0, 0, 0, - 0, 85, 0, 0, 121, 0, 0, 118, 85, 121, - 118, 0, 0, 391, 0, 0, 0, 0, 0, 85, - 0, 0, 85, 0, 0, 121, 0, 0, 0, 0, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 121, 0, 0, 121, 0, 0, 0, - 1005, 0, 0, 0, 85, 0, 0, 0, 0, 0, - 0, 0, 0, 85, 23, 24, 25, 26, 0, 0, + 0, 118, 0, 0, 0, 118, 0, 118, 100, 100, + 0, 119, 0, 805, 805, 0, 119, 0, 0, 0, + 0, 0, 805, 805, 805, 0, 0, 0, 805, 805, + 0, 0, 119, 0, 0, 0, 0, 0, 122, 119, + 0, 0, 0, 0, 0, 0, 0, 100, 100, 0, + 119, 0, 0, 119, 0, 286, 0, 0, 0, 0, + 808, 808, 0, 0, 0, 0, 0, 0, 0, 808, + 808, 808, 0, 0, 0, 808, 808, 0, 0, 0, + 1006, 0, 0, 85, 119, 0, 0, 0, 0, 0, + 0, 0, 0, 119, 0, 0, 0, 0, 0, 286, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 121, 805, 121, 0, 85, 284, 85, 100, + 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 85, 0, 85, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 392, 0, 0, 805, 0, 0, + 0, 0, 0, 0, 122, 0, 122, 0, 0, 0, + 808, 284, 0, 121, 121, 0, 0, 0, 808, 0, + 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, + 0, 0, 0, 85, 0, 0, 0, 0, 85, 0, + 0, 119, 0, 119, 808, 0, 0, 0, 0, 0, + 0, 0, 85, 805, 0, 532, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 118, 0, 118, 0, + 0, 0, 0, 286, 0, 0, 0, 0, 119, 0, + 0, 119, 761, 0, 392, 0, 0, 0, 118, 0, + 85, 0, 0, 0, 85, 0, 85, 0, 0, 0, + 808, 0, 122, 0, 0, 286, 122, 538, 0, 0, + 0, 0, 0, 0, 538, 538, 0, 0, 0, 0, + 538, 538, 0, 0, 0, 0, 0, 0, 805, 0, + 0, 0, 805, 0, 0, 284, 0, 0, 532, 532, + 0, 0, 0, 0, 23, 24, 25, 26, 805, 0, + 122, 0, 0, 122, 119, 119, 0, 0, 0, 0, + 32, 33, 34, 0, 118, 0, 0, 284, 118, 121, + 41, 42, 43, 44, 45, 808, 0, 0, 0, 808, + 0, 0, 0, 805, 805, 0, 0, 0, 0, 85, + 0, 0, 0, 0, 0, 808, 0, 0, 0, 0, + 0, 0, 121, 0, 121, 0, 0, 0, 0, 0, + 0, 0, 118, 0, 0, 118, 0, 121, 0, 121, + 0, 789, 59, 60, 61, 62, 63, 64, 65, 66, + 808, 808, 0, 0, 0, 0, 0, 0, 0, 538, + 0, 0, 0, 333, -758, -758, -758, -758, 338, 339, + 279, 122, -758, -758, 0, 0, 122, 0, 0, 0, + 346, 347, 0, 0, 0, 119, 0, 0, 0, 121, + 0, 0, 122, 0, 121, 0, 0, 0, 806, 122, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, - 32, 33, 34, 118, 118, 0, 0, 121, 0, 0, - 41, 42, 43, 44, 45, 0, 0, 0, 0, 0, - 0, 217, 0, 0, 217, 217, 217, 0, 303, 0, + 122, 121, 0, 122, 0, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 85, 0, 85, 0, 0, + 0, 0, 0, 118, 0, 0, 0, 0, 118, 0, + 1007, 0, 0, 0, 122, 0, 121, 85, 0, 0, + 121, 0, 121, 122, 118, 0, 0, 0, 0, 0, + 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 807, 0, 118, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 217, 0, 217, 217, 0, 0, + 0, 0, 806, 806, 121, 121, 0, 0, 0, 0, + 0, 0, 1005, 0, 393, 0, 118, 0, 0, 0, + 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, + 0, 0, 0, 85, 0, 0, 0, 85, 532, 0, + 0, 0, 0, 0, 0, 532, 532, 0, 0, 0, + 0, 532, 532, 0, 0, 121, 0, 0, 0, 0, + 0, 122, 0, 122, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 807, 807, 391, 0, 0, 0, + 0, 85, 0, 0, 85, 333, 334, 335, 336, 337, + 338, 339, 340, 0, 342, 343, 806, 806, 122, 0, + 0, 122, 346, 347, 393, 806, 806, 806, 0, 0, + 0, 806, 806, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 118, 0, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 789, 59, 60, 61, 62, 63, 64, 65, 66, - 0, 333, 334, 335, 336, 337, 338, 339, 340, 0, - 342, 343, 85, 0, 85, 0, 0, 0, 346, 347, - 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 121, 0, 121, 0, - 0, 0, 0, 0, 118, 0, 0, 0, 0, 85, - 0, 0, 85, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 0, 0, 0, 0, 0, 0, 0, - 217, 0, 0, 121, 0, 533, 121, 540, 541, 542, - 543, 544, 0, 0, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 0, 0, 554, 555, 556, 557, 558, - 559, 560, 561, 562, 563, 0, 0, 0, 217, 0, + 118, 0, 0, 118, 0, 0, 391, 0, 807, 807, + 532, 121, 0, 121, 122, 122, 0, 807, 807, 807, + 0, 0, 85, 807, 807, 0, 0, 85, 0, 0, + 0, 0, 0, 121, 217, 217, 806, 0, 0, 0, + 0, 0, 0, 85, 806, 0, 0, 0, 0, 0, + 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 85, 0, 0, 85, 0, 250, 253, 254, 255, + 806, 0, 0, 217, 217, 0, 118, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 303, 304, 0, 0, + 0, 1003, 0, 0, 0, 85, 0, 0, 0, 0, + 0, 0, 0, 0, 85, 0, 0, 0, 807, 121, + 0, 0, 0, 121, 121, 0, 807, 0, 217, 0, + 0, 121, 121, 0, 0, 122, 806, 121, 121, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -757, + 0, 0, 807, 0, 0, 0, 0, -757, -757, -757, + 0, 0, -757, -757, -757, 0, -757, 121, 0, 0, + 121, 0, 0, 0, -757, -757, -757, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -757, -757, 0, -757, + -757, -757, -757, -757, 0, 0, 0, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 807, 0, + 0, 806, 85, 0, 85, 806, 0, -757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 806, 0, 0, 0, 217, 0, 0, 217, 217, + 217, 0, 303, 0, 0, -757, -757, 0, 0, 85, + 0, 0, 85, 0, 0, 0, 121, 0, 217, 0, + 217, 217, 0, 0, 0, 0, 806, 806, 121, -757, + 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 807, 0, 0, 0, 807, 0, 121, + 0, 0, -757, -757, 0, 0, 121, 233, -757, 0, + -757, 0, -757, 807, 0, 0, 0, 121, 0, 0, + 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 0, 0, 0, - 0, 0, 0, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 0, 0, 121, - 121, 346, 347, 0, 0, 0, 0, 0, 613, 613, - 0, 0, 0, 0, 0, 0, 0, 613, 217, 217, - 0, 0, 0, 217, 0, 613, 613, 217, 0, 0, - 0, 0, 0, 255, 348, 0, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 0, 0, 639, 0, - 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, - 237, 0, 0, 0, 217, 0, 0, 217, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, - 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 669, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 343, -760, -760, - 121, 0, 0, 217, 346, 347, 0, 0, 0, 0, - 0, 0, -736, 0, 0, 0, 0, 0, 0, 0, - -736, -736, -736, 0, 0, 0, -736, -736, 0, -736, - 0, 0, 0, 0, 0, 0, 0, -736, -736, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, -736, - -736, 0, -736, -736, -736, -736, -736, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, - -736, 0, 0, 0, 0, 217, 0, 0, 0, -736, - -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, - -736, -736, 217, 0, 217, 0, -736, -736, -736, -736, - 0, 691, 0, 0, 0, 0, 0, 217, 0, 217, + 0, 0, 0, 0, 0, 0, 0, 0, 807, 807, + 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, + 121, 0, 0, 0, 217, 0, 0, 0, 0, 533, + 0, 540, 541, 542, 543, 544, 0, 0, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 0, 0, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 0, + 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -736, 0, 0, 0, 0, 0, -116, -736, - 0, -736, -736, -736, -736, -736, -736, -736, -736, -736, - -736, 0, 0, 0, 0, -736, -736, -736, -107, 0, - 0, -736, 217, -736, 0, -736, 0, 0, 613, 775, - 0, 217, 0, 0, 0, 613, 613, 0, 0, 0, - 0, 613, 613, 0, 23, 24, 25, 26, 0, 217, + 0, 0, 0, 0, 0, 0, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 0, + 0, 0, 0, 346, 347, 0, 85, 0, 0, 0, + 0, 0, 613, 613, 0, 0, 0, 0, 121, 0, + 121, 613, 217, 217, 0, 0, 0, 217, 0, 613, + 613, 217, 0, 0, 0, 0, 348, 255, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 0, 0, + 0, 0, 639, 0, 0, 121, 0, 613, 121, 0, + 0, 0, 237, 0, 0, 0, 0, 0, 217, 0, + 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 33, 34, 781, 217, 0, 0, 782, 0, 981, - 41, 42, 43, 44, 45, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 922, 613, - 613, 0, 613, 613, 0, 0, 0, 0, 0, 0, - 0, 783, 784, 0, 0, 0, 0, 0, 0, 785, - 0, 0, 786, 0, 217, 787, 788, 0, 975, 926, - 0, 789, 59, 999, 61, 62, 63, 64, 65, 66, + 669, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, -758, -758, 0, 0, 0, 217, 346, 347, + 0, 0, 0, 0, 0, 0, -735, 0, 0, 0, + 0, 121, 121, 0, -735, -735, -735, 0, 0, 0, + -735, -735, 0, -735, 0, 0, 0, 0, 0, 0, + 0, -735, -735, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, -735, -735, 0, -735, -735, -735, -735, + -735, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, + 0, 0, 0, 0, -735, 0, 0, 0, 0, 217, + 0, 0, 0, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, 217, 0, 217, 0, + -735, -735, -735, -735, 0, 691, 0, 0, 0, 0, + 0, 217, 0, 217, 0, 0, 0, 0, 0, 0, + 0, 0, 121, 0, 0, 0, -735, 0, 0, 0, + 0, 0, -116, -735, 0, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, 0, 0, 0, 0, -735, + -735, -735, -107, 0, 0, -735, 217, -735, 0, -735, + 0, 0, 613, 775, 0, 217, 0, 0, 0, 613, + 613, 0, 0, 0, 0, 613, 613, 0, -629, 0, + 0, 0, 0, 217, 0, 0, -629, -629, -629, 0, + 0, -629, -629, -629, 0, -629, 0, 0, 217, 0, + 0, 0, 0, -629, 0, -629, -629, -629, 0, 0, + 0, 0, 0, 0, 0, -629, -629, 0, -629, -629, + -629, -629, -629, 613, 613, 0, 613, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 790, 0, 0, 0, 0, 0, 0, - 279, 0, 0, 895, 0, 0, 0, 0, 0, 0, - 613, 0, -759, 4, 0, 5, 6, 7, 8, 9, - 0, 0, 0, 10, 11, 0, 0, 0, 12, 0, - 13, 14, 15, 16, 17, 18, 19, 217, 0, 0, - 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, - 0, 27, 0, 0, 0, 613, 217, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, + 0, 0, 0, 0, 0, 0, -629, 0, 217, 0, + 0, 0, 0, 0, 0, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, 0, 0, + 0, 0, -629, -629, -629, -629, 0, -629, -629, 0, + 0, 0, 0, 0, -629, 0, 0, 894, 0, 0, + 0, 0, 0, 0, 613, 0, 0, 0, -629, 0, + 0, -629, 0, 0, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, 0, 0, 0, + 0, 217, -629, -629, -629, 0, 0, -629, -629, -629, + 0, -629, 0, 0, 0, 0, 0, 0, 0, 613, + 217, 0, 0, -757, 4, 0, 5, 6, 7, 8, + 9, 0, 0, 0, 10, 11, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 19, 0, 0, + 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, + 0, 0, 27, 0, 0, 0, 0, 217, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, + 0, 0, 0, 0, 0, 217, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 50, 51, 217, 0, 0, 0, 0, 0, - 52, 0, 0, 53, 54, 0, 55, 56, 0, 57, - 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 0, 217, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, + 0, 52, 0, 0, 53, 54, 0, 55, 56, 0, + 57, 0, 0, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 67, 68, 69, 0, 0, 0, 0, -736, 0, - 0, 0, 0, -759, 0, -759, -736, -736, -736, 0, - 0, -736, -736, -736, 0, -736, 0, 0, 0, 0, - 0, 0, 0, -736, -736, -736, -736, -736, 0, 0, - 0, 0, 0, 0, 0, -736, -736, 0, -736, -736, - -736, -736, -736, 0, 0, 0, 0, 0, 217, 0, - 0, 0, 0, 333, -760, -760, -760, -760, 338, 339, - 0, 217, -760, -760, 0, 0, -736, 0, 0, 0, - 346, 347, 0, 0, 0, -736, -736, -736, -736, -736, - -736, -736, -736, -736, -736, -736, -736, -736, 0, 0, - 0, 0, -736, -736, -736, -736, 0, 745, -736, 0, - 0, 0, 0, 0, -736, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 0, 0, 0, -736, 0, - 0, -736, 217, 0, -116, -736, -736, -736, -736, -736, - -736, -736, -736, -736, -736, -736, -736, 0, 0, 0, - 0, -736, -736, -736, -736, -630, 0, -736, -736, -736, - 0, -736, 0, -630, -630, -630, 0, 0, -630, -630, - -630, 0, -630, 0, 0, 0, 0, 685, 0, 0, - -630, 0, -630, -630, -630, 0, 0, 0, 0, 0, - 0, 0, -630, -630, 0, -630, -630, -630, -630, -630, + 0, 0, 67, 68, 69, 0, 0, 0, 0, 0, + 217, -735, 0, 0, -757, 0, -757, 0, 0, -735, + -735, -735, 0, 217, -735, -735, -735, 0, -735, 0, + 0, 0, 0, 0, 0, 0, -735, -735, -735, -735, + -735, 0, 0, 0, 0, 0, 0, 0, -735, -735, + 0, -735, -735, -735, -735, -735, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, + 335, 336, 337, 338, 339, 0, 0, 342, 343, -735, + 0, 0, 0, 0, 217, 346, 347, 0, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, 0, 0, 0, 0, -735, -735, -735, -735, 0, + 745, -735, 0, 0, 0, 0, 0, -735, 0, 0, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 0, -735, 0, 0, -735, 0, 0, -116, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + 0, 0, 0, 0, -735, -735, -735, -735, -632, 0, + -735, -735, -735, 0, -735, 0, -632, -632, -632, 0, + 0, -632, -632, -632, 0, -632, 0, 0, 0, 0, + 685, 0, 0, -632, 0, -632, -632, -632, 0, 0, + 0, 0, 0, 0, 0, -632, -632, 0, -632, -632, + -632, -632, -632, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -632, 0, 0, 0, + 346, 347, 0, 0, 0, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, 0, 0, + 0, 0, -632, -632, -632, -632, 0, -632, -632, 0, + 0, 0, 0, 348, -632, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 0, 0, 0, -632, 0, + 0, -632, -257, 0, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, 0, 0, 0, + 0, 0, -632, -632, -632, -736, 0, -632, -632, -632, + 0, -632, 0, -736, -736, -736, 0, 0, -736, -736, + -736, 0, -736, 0, 0, 0, 0, 685, 0, 0, + -736, -736, -736, -736, -736, 0, 0, 0, 0, 0, + 0, 0, -736, -736, 0, -736, -736, -736, -736, -736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, -630, 0, 0, 0, 346, 347, 0, - 0, 0, -630, -630, -630, -630, -630, -630, -630, -630, - -630, -630, -630, -630, -630, 0, 0, 0, 0, -630, - -630, -630, -630, 0, -630, -630, 0, 0, 0, 0, - 348, -630, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 0, 0, 0, -630, 0, 0, -630, -257, - 0, -630, -630, -630, -630, -630, -630, -630, -630, -630, - -630, -630, -630, -630, 0, 0, 0, 0, 0, -630, - -630, -630, -633, 0, -630, -630, -630, 0, -630, 0, - -633, -633, -633, 0, 0, -633, -633, -633, 0, -633, - 0, 0, 0, 0, 685, 0, 0, -633, 0, -633, - -633, -633, 0, 0, 0, 0, 0, 0, 0, -633, - -633, 0, -633, -633, -633, -633, -633, 0, 0, 0, + 343, 344, 345, -736, 0, 0, 0, 346, 347, 0, + 0, 0, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, 0, 0, 0, 0, -736, + -736, -736, -736, 0, 0, -736, 0, 0, 0, 0, + 348, -736, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 0, 0, 0, -736, 0, 0, -736, 0, + 0, 0, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, 0, 0, 0, 0, -736, -736, + -736, -736, -737, 0, -736, -736, -736, 0, -736, 0, + -737, -737, -737, 0, 0, -737, -737, -737, 0, -737, + 0, 0, 0, 0, 0, 0, 0, -737, -737, -737, + -737, -737, 0, 0, 0, 0, 0, 0, 0, -737, + -737, 0, -737, -737, -737, -737, -737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, - -633, 0, 0, 0, 346, 347, 0, 0, 0, -633, - -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, - -633, -633, 0, 0, 0, 0, -633, -633, -633, -633, - 0, -633, -633, 0, 0, 0, 0, 348, -633, 349, + -737, 0, 0, 0, 346, 347, 0, 0, 0, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, 0, 0, 0, 0, -737, -737, -737, -737, + 0, 0, -737, 0, 0, 0, 0, 348, -737, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 0, - 0, 0, -633, 0, 0, -633, 0, 0, -633, -633, - -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, - -633, 0, 0, 0, 0, 0, -633, -633, -633, -737, - 0, -633, -633, -633, 0, -633, 0, -737, -737, -737, - 0, 0, -737, -737, -737, 0, -737, 0, 0, 0, - 0, 0, 0, 0, -737, -737, -737, -737, -737, 0, - 0, 0, 0, 0, 0, 0, -737, -737, 0, -737, - -737, -737, -737, -737, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, -737, 0, 0, - 0, 346, 347, 0, 0, 0, -737, -737, -737, -737, - -737, -737, -737, -737, -737, -737, -737, -737, -737, 0, - 0, 0, 0, -737, -737, -737, -737, 0, 0, -737, - 0, 0, 0, 0, 348, -737, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 0, 0, 0, -737, - 0, 0, -737, 0, 0, 0, -737, -737, -737, -737, - -737, -737, -737, -737, -737, -737, -737, -737, 0, 0, - 0, 0, -737, -737, -737, -737, -738, 0, -737, -737, - -737, 0, -737, 0, -738, -738, -738, 0, 0, -738, - -738, -738, 0, -738, 0, 0, 0, 0, 0, 0, - 0, -738, -738, -738, -738, -738, 0, 0, 0, 0, - 0, 0, 0, -738, -738, 0, -738, -738, -738, -738, - -738, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 333, 334, 335, 336, 337, 338, 339, 0, 0, - 342, 343, 0, 0, -738, 0, 0, 0, 346, 347, - 0, 0, 0, -738, -738, -738, -738, -738, -738, -738, - -738, -738, -738, -738, -738, -738, 0, 0, 0, 0, - -738, -738, -738, -738, 0, 0, -738, 0, 0, 0, - 0, 0, -738, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 0, 0, 0, -738, 0, 0, -738, - 0, 0, 0, -738, -738, -738, -738, -738, -738, -738, - -738, -738, -738, -738, -738, 0, 0, 0, 0, -738, - -738, -738, -738, -310, 0, -738, -738, -738, 0, -738, - 0, -310, -310, -310, 0, 0, -310, -310, -310, 0, - -310, 0, 0, 0, 0, 0, 0, 0, -310, 0, - -310, -310, -310, 0, 0, 0, 0, 0, 0, 0, - -310, -310, 0, -310, -310, -310, -310, -310, 0, 0, + 0, 0, -737, 0, 0, -737, 0, 0, 0, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, 0, 0, 0, 0, -737, -737, -737, -737, -310, + 0, -737, -737, -737, 0, -737, 0, -310, -310, -310, + 0, 0, -310, -310, -310, 0, -310, 0, 0, 0, + 0, 0, 0, 0, -310, 0, -310, -310, -310, 0, + 0, 0, 0, 0, 0, 0, -310, -310, 0, -310, + -310, -310, -310, -310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -310, 0, 0, + 0, 0, 0, 0, 0, 0, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, 0, + 0, 0, 0, -310, -310, -310, -310, 0, 746, -310, + 0, 0, 0, 0, 0, -310, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -310, + 0, 0, -310, 0, 0, -118, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, 0, 0, + 0, 0, 0, -310, -310, -310, -449, 0, -310, -310, + -310, 0, -310, 0, -449, -449, -449, 0, 0, -449, + -449, -449, 0, -449, 0, 0, 0, 0, 0, 0, + 0, -449, -449, -449, -449, 0, 0, 0, 0, 0, + 0, 0, 0, -449, -449, 0, -449, -449, -449, -449, + -449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -310, 0, 0, 0, 0, 0, 0, 0, 0, - -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, - -310, -310, -310, 0, 0, 0, 0, -310, -310, -310, - -310, 0, 746, -310, 0, 0, 0, 0, 0, -310, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -310, 0, 0, -310, 0, 0, -118, - -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, - -310, -310, 0, 0, 0, 0, 0, -310, -310, -310, - -449, 0, -310, -310, -310, 0, -310, 0, -449, -449, - -449, 0, 0, -449, -449, -449, 0, -449, 0, 0, - 0, 0, 0, 0, 0, -449, -449, -449, -449, 0, - 0, 0, 0, 0, 0, 0, 0, -449, -449, 0, - -449, -449, -449, -449, -449, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -449, 0, - 0, 0, 0, 0, 0, 0, 0, -449, -449, -449, - -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, - 0, 0, 0, 0, -449, -449, -449, -449, 0, 0, - -449, 0, 0, 0, 0, 0, -449, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -449, 0, 0, 0, 0, 0, 0, -449, 0, -449, - -449, -449, -449, -449, -449, -449, -449, -449, -449, 0, - 0, 0, 0, -449, -449, -449, -449, -302, 233, -449, - -449, -449, 0, -449, 0, -302, -302, -302, 0, 0, - -302, -302, -302, 0, -302, 0, 0, 0, 0, 0, - 0, 0, -302, 0, -302, -302, -302, 0, 0, 0, - 0, 0, 0, 0, -302, -302, 0, -302, -302, -302, - -302, -302, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -449, 0, 0, 0, 0, 0, + 0, 0, 0, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, 0, 0, 0, 0, + -449, -449, -449, -449, 0, 0, -449, 0, 0, 0, + 0, 0, -449, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -449, 0, 0, 0, + 0, 0, 0, -449, 0, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, 0, 0, 0, 0, -449, + -449, -449, -449, -302, 233, -449, -449, -449, 0, -449, + 0, -302, -302, -302, 0, 0, -302, -302, -302, 0, + -302, 0, 0, 0, 0, 0, 0, 0, -302, 0, + -302, -302, -302, 0, 0, 0, 0, 0, 0, 0, + -302, -302, 0, -302, -302, -302, -302, -302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -302, 0, 0, 0, 0, - 0, 0, 0, 0, -302, -302, -302, -302, -302, -302, - -302, -302, -302, -302, -302, -302, -302, 0, 0, 0, - 0, -302, -302, -302, -302, 0, 0, -302, 0, 0, - 0, 0, 0, -302, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -302, 0, 0, - -302, 0, 0, 0, -302, -302, -302, -302, -302, -302, - -302, -302, -302, -302, -302, -302, 0, 0, 0, 0, - 0, -302, -302, -302, -759, 0, -302, -302, -302, 0, - -302, 0, -759, -759, -759, 0, 0, -759, -759, -759, - 0, -759, 0, 0, 0, 0, 0, 0, 0, -759, - -759, -759, -759, 0, 0, 0, 0, 0, 0, 0, - 0, -759, -759, 0, -759, -759, -759, -759, -759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -302, 0, 0, 0, 0, 0, 0, 0, 0, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, 0, 0, 0, 0, -302, -302, -302, + -302, 0, 0, -302, 0, 0, 0, 0, 0, -302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -759, 0, 0, 0, 0, 0, 0, 0, - 0, -759, -759, -759, -759, -759, -759, -759, -759, -759, - -759, -759, -759, -759, 0, 0, 0, 0, -759, -759, - -759, -759, 0, 0, -759, 0, 0, 0, 0, 0, - -759, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -759, 0, 0, 0, 0, 0, - 0, -759, 0, -759, -759, -759, -759, -759, -759, -759, - -759, -759, -759, 0, 0, 0, 0, -759, -759, -759, - -759, -317, 233, -759, -759, -759, 0, -759, 0, -317, - -317, -317, 0, 0, -317, -317, -317, 0, -317, 0, - 0, 0, 0, 0, 0, 0, -317, 0, -317, -317, - 0, 0, 0, 0, 0, 0, 0, 0, -317, -317, - 0, -317, -317, -317, -317, -317, 0, 0, 0, 0, + 0, 0, 0, -302, 0, 0, -302, 0, 0, 0, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, 0, 0, 0, 0, 0, -302, -302, -302, + -757, 0, -302, -302, -302, 0, -302, 0, -757, -757, + -757, 0, 0, -757, -757, -757, 0, -757, 0, 0, + 0, 0, 0, 0, 0, -757, -757, -757, -757, 0, + 0, 0, 0, 0, 0, 0, 0, -757, -757, 0, + -757, -757, -757, -757, -757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -317, - 0, 0, 0, 0, 0, 0, 0, 0, -317, -317, - -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, - -317, 0, 0, 0, 0, -317, -317, -317, -317, 0, - 0, -317, 0, 0, 0, 0, 0, -317, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -757, 0, + 0, 0, 0, 0, 0, 0, 0, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + 0, 0, 0, 0, -757, -757, -757, -757, 0, 0, + -757, 0, 0, 0, 0, 0, -757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -317, 0, 0, 0, 0, 0, 0, -317, 0, - -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, - 0, 0, 0, 0, 0, -317, -317, -317, -736, 230, - -317, -317, -317, 0, -317, 0, -736, -736, -736, 0, - 0, 0, -736, -736, 0, -736, 0, 0, 0, 0, - 0, 0, 0, -736, -736, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -736, -736, 0, -736, -736, - -736, -736, -736, 0, 0, 0, 0, 0, 0, 0, + -757, 0, 0, 0, 0, 0, 0, -757, 0, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, 0, + 0, 0, 0, -757, -757, -757, -757, -317, 233, -757, + -757, -757, 0, -757, 0, -317, -317, -317, 0, 0, + -317, -317, -317, 0, -317, 0, 0, 0, 0, 0, + 0, 0, -317, 0, -317, -317, 0, 0, 0, 0, + 0, 0, 0, 0, -317, -317, 0, -317, -317, -317, + -317, -317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -736, 0, 0, 0, - 0, 0, 0, 0, 0, -736, -736, -736, -736, -736, - -736, -736, -736, -736, -736, -736, -736, -736, 0, 0, - 0, 0, -736, -736, -736, -736, 0, 691, 0, 0, + 0, 0, 0, 0, 0, -317, 0, 0, 0, 0, + 0, 0, 0, 0, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, 0, 0, 0, + 0, -317, -317, -317, -317, 0, 0, -317, 0, 0, + 0, 0, 0, -317, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -317, 0, 0, + 0, 0, 0, 0, -317, 0, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, 0, 0, 0, 0, + 0, -317, -317, -317, -735, 230, -317, -317, -317, 0, + -317, 0, -735, -735, -735, 0, 0, 0, -735, -735, + 0, -735, 0, 0, 0, 0, 0, 0, 0, -735, + -735, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -735, -735, 0, -735, -735, -735, -735, -735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -736, 0, - 0, 0, 0, 0, -116, -736, 0, -736, -736, -736, - -736, -736, -736, -736, -736, -736, -736, 0, 0, 0, - 0, -736, -736, -736, -736, -310, 0, -736, 0, -736, - 0, -736, 0, -310, -310, -310, 0, 0, 0, -310, - -310, 0, -310, 0, 0, 0, 0, 0, 0, 0, - -310, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -310, -310, 0, -310, -310, -310, -310, -310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -735, 0, 0, 0, 0, 0, 0, 0, + 0, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, 0, 0, 0, 0, -735, -735, + -735, -735, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -310, 0, 0, 0, 0, 0, 0, - 0, 0, -310, -310, -310, -310, -310, -310, -310, -310, - -310, -310, -310, -310, -310, 0, 0, 0, 0, -310, - -310, -310, -310, 0, 692, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -735, 0, 0, 0, 0, 0, + -116, -735, 0, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, 0, 0, 0, 0, -735, -735, -735, + -735, -310, 0, -735, 0, -735, 0, -735, 0, -310, + -310, -310, 0, 0, 0, -310, -310, 0, -310, 0, + 0, 0, 0, 0, 0, 0, -310, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -310, -310, + 0, -310, -310, -310, -310, -310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -310, 0, 0, 0, 0, - 0, -118, -310, 0, -310, -310, -310, -310, -310, -310, - -310, -310, -310, -310, 0, 0, 0, 0, 0, -310, - -310, -109, -310, 0, -310, 0, -310, 0, -310, 0, - -310, -310, -310, 0, 0, 0, -310, -310, 0, -310, - 0, 0, 0, 0, 0, 0, 0, -310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -310, - -310, 0, -310, -310, -310, -310, -310, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -310, 0, 0, 0, 0, 0, 0, 0, 0, -310, + 0, 0, 0, 0, 0, 0, 0, 0, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, - -310, -310, 0, 0, 0, 0, -310, -310, -310, -310, - 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -310, 0, 0, 0, 0, 0, -118, -310, - 0, -310, -310, -310, -310, -310, -310, -310, -310, -310, - -310, 0, 0, 0, 0, 0, -310, -310, -310, 0, - 0, -310, 0, -310, 257, -310, 5, 6, 7, 8, - 9, -759, -759, -759, 10, 11, 0, 0, -759, 12, - 0, 13, 14, 15, 16, 17, 18, 19, 0, 0, - 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, - 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, - 258, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, - 0, 52, 0, 0, 53, 54, 0, 55, 56, 0, - 57, 0, 0, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 67, 68, 69, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -759, 257, -759, 5, 6, 7, - 8, 9, 0, 0, -759, 10, 11, 0, -759, -759, - 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, - 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, - 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, - 29, 258, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, - 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, - 0, 0, 52, 0, 0, 53, 54, 0, 55, 56, - 0, 57, 0, 0, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 67, 68, 69, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -759, 257, -759, 5, 6, - 7, 8, 9, 0, 0, -759, 10, 11, 0, 0, - -759, 12, -759, 13, 14, 15, 16, 17, 18, 19, - 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, - 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, - 28, 29, 258, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 0, 41, 42, 43, 44, 45, 46, - 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, - 0, 0, 0, 52, 0, 0, 53, 54, 0, 55, - 56, 0, 57, 0, 0, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, + -310, 0, 0, 0, 0, -310, -310, -310, -310, 0, + 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 68, 69, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -759, 257, -759, 5, - 6, 7, 8, 9, 0, 0, -759, 10, 11, 0, - 0, -759, 12, 0, 13, 14, 15, 16, 17, 18, - 19, -759, 0, 0, 0, 0, 20, 21, 22, 23, - 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, - 0, 28, 29, 258, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, - 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, - 0, 0, 0, 0, 52, 0, 0, 53, 54, 0, - 55, 56, 0, 57, 0, 0, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, + 0, -310, 0, 0, 0, 0, 0, -118, -310, 0, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + 0, 0, 0, 0, 0, -310, -310, -109, -310, 0, + -310, 0, -310, 0, -310, 0, -310, -310, -310, 0, + 0, 0, -310, -310, 0, -310, 0, 0, 0, 0, + 0, 0, 0, -310, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -310, -310, 0, -310, -310, + -310, -310, -310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 67, 68, 69, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -759, 257, -759, - 5, 6, 7, 8, 9, 0, 0, -759, 10, 11, - 0, 0, -759, 12, 0, 13, 14, 15, 16, 17, - 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, - 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, - 0, 0, 28, 29, 258, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, - 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, - 0, 0, 0, 0, 0, 52, 0, 0, 53, 54, - 0, 55, 56, 0, 57, 0, 0, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, - 0, 0, 0, 0, 257, 0, 5, 6, 7, 8, - 9, 0, -759, -759, 10, 11, 67, 68, 69, 12, - 0, 13, 14, 15, 16, 17, 18, 19, -759, 0, - -759, 0, 0, 20, 21, 22, 23, 24, 25, 26, - 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, - 258, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, + 0, 0, 0, 0, 0, 0, -310, 0, 0, 0, + 0, 0, 0, 0, 0, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, 0, 0, + 0, 0, -310, -310, -310, -310, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, - 0, 52, 0, 0, 53, 54, 0, 55, 56, 0, - 57, 0, 0, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 257, 0, 5, 6, 7, 8, 9, 0, 0, 0, - 10, 11, 67, 68, 69, 12, 0, 13, 14, 15, - 16, 17, 18, 19, -759, 0, -759, 0, 0, 20, + 0, 0, 0, 0, 0, 0, 0, 0, -310, 0, + 0, 0, 0, 0, -118, -310, 0, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, 0, 0, 0, + 0, 0, -310, -310, -310, 0, 0, -310, 0, -310, + 257, -310, 5, 6, 7, 8, 9, -757, -757, -757, + 10, 11, 0, 0, -757, 12, 0, 13, 14, 15, + 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, 258, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, @@ -2741,13 +2754,13 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 52, 0, 0, - 259, 54, 0, 55, 56, 0, 57, 0, 0, 58, + 53, 54, 0, 55, 56, 0, 57, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 68, - 69, 0, 0, 0, 0, 0, 0, 0, -759, 0, - -759, 257, -759, 5, 6, 7, 8, 9, 0, 0, - 0, 10, 11, 0, 0, 0, 12, 0, 13, 14, + 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -757, 257, -757, 5, 6, 7, 8, 9, 0, 0, + -757, 10, 11, 0, -757, -757, 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, 258, 31, 32, @@ -2760,12 +2773,12 @@ static const yytype_int16 yytable[] = 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, - 68, 69, 0, 0, 0, 0, 0, 0, 0, -759, - 0, -759, 4, -759, 5, 6, 7, 8, 9, 0, - 0, 0, 10, 11, 0, 0, 0, 12, 0, 13, + 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -757, 257, -757, 5, 6, 7, 8, 9, 0, + 0, -757, 10, 11, 0, 0, -757, 12, -757, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, - 27, 0, 0, 0, 0, 0, 28, 29, 30, 31, + 27, 0, 0, 0, 0, 0, 28, 29, 258, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, @@ -2775,10 +2788,10 @@ static const yytype_int16 yytable[] = 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67, 68, 69, 0, 0, -759, 0, 0, 0, 0, - 0, 0, -759, 257, -759, 5, 6, 7, 8, 9, - 0, 0, 0, 10, 11, 0, 0, 0, 12, 0, - 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, + 67, 68, 69, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -757, 257, -757, 5, 6, 7, 8, 9, + 0, 0, -757, 10, 11, 0, 0, -757, 12, 0, + 13, 14, 15, 16, 17, 18, 19, -757, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, 258, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, @@ -2790,9 +2803,9 @@ static const yytype_int16 yytable[] = 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 67, 68, 69, 0, 0, -759, 0, 0, 0, - 0, 0, 0, -759, 257, -759, 5, 6, 7, 8, - 9, 0, 0, -759, 10, 11, 0, 0, 0, 12, + 0, 67, 68, 69, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -757, 257, -757, 5, 6, 7, 8, + 9, 0, 0, -757, 10, 11, 0, 0, -757, 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, @@ -2804,9 +2817,9 @@ static const yytype_int16 yytable[] = 0, 52, 0, 0, 53, 54, 0, 55, 56, 0, 57, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 257, 0, 5, 6, 7, 8, 9, 0, 0, 0, + 257, 0, 5, 6, 7, 8, 9, 0, -757, -757, 10, 11, 67, 68, 69, 12, 0, 13, 14, 15, - 16, 17, 18, 19, -759, 0, -759, 0, 0, 20, + 16, 17, 18, 19, -757, 0, -757, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, 258, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, @@ -2815,36 +2828,109 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 52, 0, 0, 53, 54, 0, 55, 56, 0, 57, 0, 0, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 0, -759, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, - 7, 0, 9, 0, 0, 0, 10, 11, 67, 68, + 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, + 0, 0, 0, 0, 0, 0, 257, 0, 5, 6, + 7, 8, 9, 0, 0, 0, 10, 11, 67, 68, 69, 12, 0, 13, 14, 15, 16, 17, 18, 19, - -759, 0, -759, 0, 0, 20, 21, 22, 23, 24, - 25, 26, 0, 0, 206, 0, 0, 0, 0, 0, - 0, 29, 0, 0, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 207, 41, 42, 43, 44, 45, 46, + -757, 0, -757, 0, 0, 20, 21, 22, 23, 24, + 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, + 28, 29, 258, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, - 0, 0, 0, 208, 0, 0, 209, 54, 0, 55, - 56, 0, 210, 211, 212, 58, 59, 213, 61, 62, + 0, 0, 0, 52, 0, 0, 259, 54, 0, 55, + 56, 0, 57, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 67, 68, 69, 0, 0, 0, + 0, 0, 0, 0, -757, 0, -757, 257, -757, 5, + 6, 7, 8, 9, 0, 0, 0, 10, 11, 0, + 0, 0, 12, 0, 13, 14, 15, 16, 17, 18, + 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, + 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, + 0, 28, 29, 258, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, + 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, + 0, 0, 0, 0, 52, 0, 0, 53, 54, 0, + 55, 56, 0, 57, 0, 0, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 67, 68, 69, 0, 0, + 0, 0, 0, 0, 0, -757, 0, -757, 4, -757, + 5, 6, 7, 8, 9, 0, 0, 0, 10, 11, + 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, + 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, + 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, + 0, 0, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, + 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, + 0, 0, 0, 0, 0, 52, 0, 0, 53, 54, + 0, 55, 56, 0, 57, 0, 0, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 67, 68, 69, 0, + 0, -757, 0, 0, 0, 0, 0, 0, -757, 257, + -757, 5, 6, 7, 8, 9, 0, 0, 0, 10, + 11, 0, 0, 0, 12, 0, 13, 14, 15, 16, + 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, + 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, + 0, 0, 0, 28, 29, 258, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, + 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, + 0, 0, 0, 0, 0, 0, 52, 0, 0, 53, + 54, 0, 55, 56, 0, 57, 0, 0, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 67, 68, 69, + 0, 0, -757, 0, 0, 0, 0, 0, 0, -757, + 257, -757, 5, 6, 7, 8, 9, 0, 0, -757, + 10, 11, 0, 0, 0, 12, 0, 13, 14, 15, + 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, + 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, + 0, 0, 0, 0, 28, 29, 258, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, + 51, 0, 0, 0, 0, 0, 0, 52, 0, 0, + 53, 54, 0, 55, 56, 0, 57, 0, 0, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, + 0, 0, 0, 0, 0, 0, 257, 0, 5, 6, + 7, 8, 9, 0, 0, 0, 10, 11, 67, 68, + 69, 12, 0, 13, 14, 15, 16, 17, 18, 19, + -757, 0, -757, 0, 0, 20, 21, 22, 23, 24, + 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, + 28, 29, 258, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 0, 41, 42, 43, 44, 45, 46, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, + 0, 0, 0, 52, 0, 0, 53, 54, 0, 55, + 56, 0, 57, 0, 0, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 0, -757, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, - 0, 0, 10, 11, 67, 214, 69, 12, 0, 13, - 14, 15, 16, 17, 18, 19, 0, 0, 237, 0, + 0, 0, 10, 11, 67, 68, 69, 12, 0, 13, + 14, 15, 16, 17, 18, 19, -757, 0, -757, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, - 27, 0, 0, 0, 0, 0, 0, 29, 0, 0, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, + 206, 0, 0, 0, 0, 0, 0, 29, 0, 0, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 207, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 208, - 0, 0, 209, 54, 0, 55, 56, 0, 0, 0, - 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 0, 0, 209, 54, 0, 55, 56, 0, 210, 211, + 212, 58, 59, 213, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, - 67, 68, 69, 12, 0, 13, 14, 15, 16, 17, - 18, 19, 305, 0, 306, 0, 0, 20, 21, 22, + 67, 214, 69, 12, 0, 13, 14, 15, 16, 17, + 18, 19, 0, 0, 237, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, @@ -2854,24 +2940,24 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 208, 0, 0, 209, 54, 0, 55, 56, 0, 0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, + 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 67, 68, 69, 12, - 0, 13, 14, 15, 16, 17, 18, 19, 0, 0, - 237, 0, 0, 20, 21, 22, 23, 24, 25, 26, - 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 0, 13, 14, 15, 16, 17, 18, 19, 305, 0, + 306, 0, 0, 20, 21, 22, 23, 24, 25, 26, + 0, 0, 27, 0, 0, 0, 0, 0, 0, 29, + 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, - 0, 52, 0, 0, 53, 54, 0, 55, 56, 0, - 57, 0, 0, 58, 59, 60, 61, 62, 63, 64, + 0, 208, 0, 0, 209, 54, 0, 55, 56, 0, + 0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 0, 0, 0, 10, 11, 67, 68, 69, 12, 0, 13, 14, 15, - 16, 17, 18, 19, 503, 0, 0, 0, 0, 20, + 16, 17, 18, 19, 0, 0, 237, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, - 0, 0, 0, 0, 28, 29, 258, 31, 32, 33, + 0, 0, 0, 0, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, @@ -2879,30 +2965,28 @@ static const yytype_int16 yytable[] = 51, 0, 0, 0, 0, 0, 0, 52, 0, 0, 53, 54, 0, 55, 56, 0, 57, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, + 7, 8, 9, 0, 0, 0, 10, 11, 67, 68, + 69, 12, 0, 13, 14, 15, 16, 17, 18, 19, + 503, 0, 0, 0, 0, 20, 21, 22, 23, 24, + 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, + 28, 29, 258, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 0, 41, 42, 43, 44, 45, 46, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, + 0, 0, 0, 52, 0, 0, 53, 54, 0, 55, + 56, 0, 57, 0, 0, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67, 68, - 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 503, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 0, 0, 0, 150, 151, - 152, 395, 396, 397, 398, 157, 158, 159, 0, 0, - 0, 0, 0, 160, 161, 162, 163, 399, 400, 401, - 402, 168, 37, 38, 403, 40, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 0, 0, 179, 180, 0, 0, 0, 0, - 181, 182, 183, 184, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 186, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 0, 197, 198, - 0, 0, 0, 0, 0, 199, 404, 126, 127, 128, + 0, 0, 0, 0, 67, 68, 69, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 503, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 0, 0, 0, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 0, 0, 0, 0, 0, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 288, 289, - 169, 290, 0, 0, 0, 0, 0, 0, 0, 0, + 149, 0, 0, 0, 150, 151, 152, 395, 396, 397, + 398, 157, 158, 159, 0, 0, 0, 0, 0, 160, + 161, 162, 163, 399, 400, 401, 402, 168, 37, 38, + 403, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, 184, @@ -2911,136 +2995,138 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, 198, 0, 0, 0, 0, - 0, 199, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 0, 0, 0, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 0, - 0, 0, 0, 0, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 239, 0, 169, 0, 0, 0, 0, + 0, 199, 404, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 0, 0, 0, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 0, 0, 0, 0, 0, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 288, 289, 169, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, - 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 0, 0, 0, 0, 0, 199, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 0, 0, 0, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 0, 0, 0, 0, 0, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 0, 0, - 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 0, 0, - 179, 180, 0, 0, 0, 0, 181, 182, 183, 184, + 0, 0, 0, 0, 0, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 0, 0, 179, 180, 0, 0, + 0, 0, 181, 182, 183, 184, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 185, 186, 0, 0, 59, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 0, + 197, 198, 0, 0, 0, 0, 0, 199, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 0, 0, 0, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 0, 0, 0, 0, 0, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 239, + 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 0, 197, 198, 0, 0, 0, 0, - 0, 199, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 0, 0, 0, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 0, - 0, 0, 0, 0, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 0, 0, 169, 0, 0, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 0, 0, 0, + 0, 0, 199, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 0, 0, 0, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 0, 0, 0, 0, 0, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 5, 6, 7, 0, 9, 199, 0, 0, 10, - 11, 0, 0, 0, 12, 0, 13, 14, 15, 245, - 246, 18, 19, 0, 0, 0, 0, 0, 20, 247, - 248, 23, 24, 25, 26, 0, 0, 206, 0, 0, - 0, 0, 0, 0, 277, 0, 0, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, - 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 0, 0, 179, 180, 0, 0, + 0, 0, 181, 182, 183, 184, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 185, 186, 0, + 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 0, + 197, 198, 0, 0, 0, 0, 0, 199, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 0, 0, 0, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 0, 0, 0, 0, 0, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 0, + 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 278, 0, 0, 209, - 54, 0, 55, 56, 0, 0, 0, 0, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 5, 6, 7, + 0, 9, 199, 0, 0, 10, 11, 0, 0, 0, + 12, 0, 13, 14, 15, 245, 246, 18, 19, 0, + 0, 0, 0, 0, 20, 247, 248, 23, 24, 25, + 26, 0, 0, 206, 0, 0, 0, 0, 0, 0, + 277, 0, 0, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 6, 7, 0, 9, 0, 0, 279, 10, 11, - 0, 0, 0, 12, 280, 13, 14, 15, 245, 246, - 18, 19, 0, 0, 0, 0, 0, 20, 247, 248, - 23, 24, 25, 26, 0, 0, 206, 0, 0, 0, - 0, 0, 0, 277, 0, 0, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, - 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 278, 0, 0, 209, 54, - 0, 55, 56, 0, 0, 0, 0, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 6, 7, 8, 9, 0, 0, 279, 10, 11, 0, - 0, 0, 12, 526, 13, 14, 15, 16, 17, 18, - 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, - 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, - 0, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, - 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, - 0, 0, 0, 0, 52, 0, 0, 53, 54, 0, - 55, 56, 0, 57, 0, 0, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, - 0, 0, 0, 10, 11, 67, 68, 69, 12, 0, + 0, 0, 278, 0, 0, 209, 54, 0, 55, 56, + 0, 0, 0, 0, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, + 9, 0, 0, 279, 10, 11, 0, 0, 0, 12, + 280, 13, 14, 15, 245, 246, 18, 19, 0, 0, + 0, 0, 0, 20, 247, 248, 23, 24, 25, 26, + 0, 0, 206, 0, 0, 0, 0, 0, 0, 277, + 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 278, 0, 0, 209, 54, 0, 55, 56, 0, + 0, 0, 0, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, + 0, 0, 279, 10, 11, 0, 0, 0, 12, 526, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, - 0, 206, 0, 0, 0, 0, 0, 0, 29, 0, - 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 207, 41, 42, 43, 44, 45, 46, 47, 0, 0, + 0, 27, 0, 0, 0, 0, 0, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, - 208, 0, 0, 209, 54, 0, 55, 56, 0, 210, - 211, 212, 58, 59, 213, 61, 62, 63, 64, 65, + 52, 0, 0, 53, 54, 0, 55, 56, 0, 57, + 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 6, 7, 8, 9, 0, 0, 0, 10, - 11, 67, 214, 69, 12, 0, 13, 14, 15, 16, + 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, + 11, 67, 68, 69, 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, - 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, - 0, 0, 0, 28, 29, 0, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, + 22, 23, 24, 25, 26, 0, 0, 206, 0, 0, + 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 207, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, - 0, 0, 0, 0, 0, 0, 52, 0, 0, 53, - 54, 0, 55, 56, 0, 57, 0, 0, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 208, 0, 0, 209, + 54, 0, 55, 56, 0, 210, 211, 212, 58, 59, + 213, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, - 0, 9, 0, 0, 0, 10, 11, 67, 68, 69, + 8, 9, 0, 0, 0, 10, 11, 67, 214, 69, 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, - 26, 0, 0, 206, 0, 0, 0, 0, 0, 0, - 29, 0, 0, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 207, 41, 42, 43, 44, 45, 46, 47, + 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, + 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 439, 0, 0, 0, 0, - 0, 0, 208, 0, 0, 209, 54, 0, 55, 56, - 0, 210, 211, 212, 58, 59, 213, 61, 62, 63, + 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, + 0, 0, 52, 0, 0, 53, 54, 0, 55, 56, + 0, 57, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, - 0, 10, 11, 67, 214, 69, 12, 0, 13, 14, - 15, 245, 246, 18, 19, 0, 0, 0, 0, 0, - 20, 247, 248, 23, 24, 25, 26, 0, 0, 206, + 0, 10, 11, 67, 68, 69, 12, 0, 13, 14, + 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, + 20, 21, 22, 23, 24, 25, 26, 0, 0, 206, 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 207, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 50, 51, 0, 0, 0, 0, 0, 0, 208, 0, - 0, 209, 54, 0, 55, 56, 0, 620, 211, 212, + 50, 439, 0, 0, 0, 0, 0, 0, 208, 0, + 0, 209, 54, 0, 55, 56, 0, 210, 211, 212, 58, 59, 213, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 67, @@ -3053,7 +3139,7 @@ static const yytype_int16 yytable[] = 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 208, 0, 0, 209, 54, 0, - 55, 56, 0, 210, 211, 0, 58, 59, 213, 61, + 55, 56, 0, 620, 211, 212, 58, 59, 213, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 67, 214, 69, 12, 0, @@ -3065,8 +3151,8 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, - 208, 0, 0, 209, 54, 0, 55, 56, 0, 0, - 211, 212, 58, 59, 213, 61, 62, 63, 64, 65, + 208, 0, 0, 209, 54, 0, 55, 56, 0, 210, + 211, 0, 58, 59, 213, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 67, 214, 69, 12, 0, 13, 14, 15, 245, @@ -3078,7 +3164,7 @@ static const yytype_int16 yytable[] = 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 208, 0, 0, 209, - 54, 0, 55, 56, 0, 620, 211, 0, 58, 59, + 54, 0, 55, 56, 0, 0, 211, 212, 58, 59, 213, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 67, 214, 69, @@ -3091,24 +3177,24 @@ static const yytype_int16 yytable[] = 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 208, 0, 0, 209, 54, 0, 55, 56, - 0, 0, 211, 0, 58, 59, 213, 61, 62, 63, + 0, 620, 211, 0, 58, 59, 213, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 67, 214, 69, 12, 0, 13, 14, - 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, - 20, 21, 22, 23, 24, 25, 26, 0, 0, 206, + 15, 245, 246, 18, 19, 0, 0, 0, 0, 0, + 20, 247, 248, 23, 24, 25, 26, 0, 0, 206, 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, + 33, 34, 35, 36, 37, 38, 39, 40, 207, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 208, 0, - 0, 209, 54, 0, 55, 56, 0, 519, 0, 0, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, + 0, 209, 54, 0, 55, 56, 0, 0, 211, 0, + 58, 59, 213, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 67, - 214, 69, 12, 0, 13, 14, 15, 245, 246, 18, - 19, 0, 0, 0, 0, 0, 20, 247, 248, 23, + 214, 69, 12, 0, 13, 14, 15, 16, 17, 18, + 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 206, 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, @@ -3116,7 +3202,7 @@ static const yytype_int16 yytable[] = 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 208, 0, 0, 209, 54, 0, - 55, 56, 0, 770, 0, 0, 58, 59, 60, 61, + 55, 56, 0, 519, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 67, 214, 69, 12, 0, @@ -3128,7 +3214,7 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, - 208, 0, 0, 209, 54, 0, 55, 56, 0, 519, + 208, 0, 0, 209, 54, 0, 55, 56, 0, 770, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, @@ -3141,7 +3227,7 @@ static const yytype_int16 yytable[] = 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 208, 0, 0, 209, - 54, 0, 55, 56, 0, 843, 0, 0, 58, 59, + 54, 0, 55, 56, 0, 519, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 67, 214, 69, @@ -3154,7 +3240,7 @@ static const yytype_int16 yytable[] = 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 208, 0, 0, 209, 54, 0, 55, 56, - 0, 1014, 0, 0, 58, 59, 60, 61, 62, 63, + 0, 843, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 67, 214, 69, 12, 0, 13, 14, @@ -3166,12 +3252,12 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 208, 0, - 0, 209, 54, 0, 55, 56, 0, 0, 0, 0, + 0, 209, 54, 0, 55, 56, 0, 1012, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 67, - 214, 69, 12, 0, 13, 14, 15, 16, 17, 18, - 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, + 214, 69, 12, 0, 13, 14, 15, 245, 246, 18, + 19, 0, 0, 0, 0, 0, 20, 247, 248, 23, 24, 25, 26, 0, 0, 206, 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, @@ -3185,7 +3271,7 @@ static const yytype_int16 yytable[] = 0, 0, 0, 10, 11, 67, 214, 69, 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, - 0, 27, 0, 0, 0, 0, 0, 0, 29, 0, + 0, 206, 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, @@ -3195,52 +3281,89 @@ static const yytype_int16 yytable[] = 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, - 11, 67, 68, 69, 12, 0, 13, 14, 15, 245, + 11, 67, 214, 69, 12, 0, 13, 14, 15, 16, + 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, + 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, + 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, + 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, + 0, 0, 0, 0, 0, 0, 208, 0, 0, 209, + 54, 0, 55, 56, 0, 0, 0, 0, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, + 0, 9, 0, 0, 0, 10, 11, 67, 68, 69, + 12, 0, 13, 14, 15, 245, 246, 18, 19, 0, + 0, 0, 0, 0, 20, 247, 248, 23, 24, 25, + 26, 0, 0, 206, 0, 0, 0, 0, 0, 0, + 277, 0, 0, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 278, 0, 0, 328, 54, 0, 55, 56, + 0, 329, 0, 0, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 0, 0, 0, 0, 0, 0, 5, + 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, + 0, 0, 12, 279, 13, 14, 15, 245, 246, 18, + 19, 0, 0, 0, 0, 0, 20, 247, 248, 23, + 24, 25, 26, 0, 0, 206, 0, 0, 0, 0, + 0, 0, 277, 0, 0, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, + 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 376, 0, 0, 53, 54, 0, + 55, 56, 0, 57, 0, 0, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, + 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, + 11, 0, 0, 0, 12, 279, 13, 14, 15, 245, 246, 18, 19, 0, 0, 0, 0, 0, 20, 247, 248, 23, 24, 25, 26, 0, 0, 206, 0, 0, 0, 0, 0, 0, 277, 0, 0, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, + 384, 36, 37, 38, 385, 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 278, 0, 0, 328, - 54, 0, 55, 56, 0, 329, 0, 0, 58, 59, + 0, 0, 386, 0, 0, 0, 387, 0, 0, 209, + 54, 0, 55, 56, 0, 0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, 0, 0, 12, 279, 13, 14, 15, 245, 246, 18, 19, 0, 0, 0, 0, 0, 20, 247, 248, 23, 24, 25, 26, 0, 0, 206, 0, 0, 0, 0, 0, 0, 277, 0, 0, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, + 33, 34, 384, 36, 37, 38, 385, 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, - 0, 53, 54, 0, 55, 56, 0, 57, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, + 0, 209, 54, 0, 55, 56, 0, 0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, 0, 0, 12, 279, 13, 14, 15, 245, 246, 18, 19, 0, 0, 0, 0, 0, 20, 247, 248, 23, 24, 25, 26, 0, 0, 206, 0, 0, 0, 0, 0, 0, 277, 0, - 0, 32, 33, 34, 384, 36, 37, 38, 385, 40, + 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, - 387, 0, 0, 209, 54, 0, 55, 56, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 278, 0, 0, 328, 54, 0, 55, 56, 0, 0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, 0, 0, 12, 279, 13, 14, 15, 245, 246, 18, 19, 0, 0, 0, 0, 0, 20, 247, 248, 23, 24, 25, 26, 0, 0, 206, 0, 0, 0, 0, 0, 0, - 277, 0, 0, 32, 33, 34, 384, 36, 37, 38, - 385, 40, 0, 41, 42, 43, 44, 45, 46, 47, + 277, 0, 0, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 387, 0, 0, 209, 54, 0, 55, 56, + 0, 0, 1002, 0, 0, 209, 54, 0, 55, 56, 0, 0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, @@ -3252,621 +3375,633 @@ static const yytype_int16 yytable[] = 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 278, 0, 0, 328, 54, 0, - 55, 56, 0, 0, 0, 0, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 0, 0, 0, 0, 0, - 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, - 11, 0, 0, 0, 12, 279, 13, 14, 15, 245, - 246, 18, 19, 0, 0, 0, 0, 0, 20, 247, - 248, 23, 24, 25, 26, 0, 0, 206, 0, 0, - 0, 0, 0, 0, 277, 0, 0, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, - 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1004, 0, 0, 209, - 54, 0, 55, 56, 0, 0, 0, 0, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, - 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, - 0, 10, 11, 0, 0, 0, 12, 279, 13, 14, - 15, 245, 246, 18, 19, 0, 0, 0, 0, 0, - 20, 247, 248, 23, 24, 25, 26, 0, 0, 206, - 0, 0, 0, 0, 0, 0, 277, 0, 0, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, - 42, 43, 44, 45, 46, 47, 23, 24, 25, 26, + 0, 0, 0, 0, 1054, 0, 0, 209, 54, 0, + 55, 56, 23, 24, 25, 26, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 0, 0, 0, 32, 33, + 34, 781, 0, 0, 0, 782, 0, 980, 41, 42, + 43, 44, 45, 0, 0, 279, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 921, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, + 784, 0, 0, 0, 0, 0, 0, 785, 0, 0, + 786, 0, 0, 787, 788, 0, 974, 925, 0, 789, + 59, 997, 61, 62, 63, 64, 65, 66, 23, 24, + 25, 26, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 790, 0, 0, 32, 33, 34, 781, 279, 0, + 0, 782, 0, 0, 41, 42, 43, 44, 45, 0, + 0, 23, 24, 25, 26, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 32, 33, 34, + 781, 0, 0, 0, 782, 783, 784, 41, 42, 43, + 44, 45, 0, 785, 0, 0, 786, 0, 0, 787, + 788, 0, 1069, 0, 0, 789, 59, 60, 61, 62, + 63, 64, 65, 66, 0, 0, 0, 0, 783, 784, + 0, 0, 0, 0, 0, 0, 785, 790, 0, 786, + 0, 0, 787, 788, 279, 0, 0, 0, 789, 59, + 60, 61, 62, 63, 64, 65, 66, 564, 565, 0, + 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, + 790, 0, 0, 0, 0, 0, 0, 279, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 33, 34, 781, 0, 0, 0, 782, - 0, 0, 41, 42, 43, 44, 45, 0, 1056, 0, - 0, 209, 54, 0, 55, 56, 0, 0, 0, 0, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, - 0, 0, 0, 783, 784, 0, 0, 0, 0, 0, - 0, 785, 0, 0, 786, 0, 0, 787, 788, 279, - 975, 0, 0, 789, 59, 60, 61, 62, 63, 64, - 65, 66, 23, 24, 25, 26, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 790, 0, 0, 32, 33, - 34, 781, 279, 0, 0, 782, 0, 0, 41, 42, - 43, 44, 45, 0, 0, 23, 24, 25, 26, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32, 33, 34, 781, 0, 0, 0, 782, 783, - 784, 41, 42, 43, 44, 45, 0, 785, 0, 0, - 786, 0, 0, 787, 788, 0, 1071, 0, 0, 789, - 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, - 0, 0, 783, 784, 0, 0, 0, 0, 0, 0, - 785, 790, 0, 786, 0, 0, 787, 788, 279, 0, - 0, 0, 789, 59, 60, 61, 62, 63, 64, 65, - 66, 564, 565, 0, 0, 566, 0, 0, 0, 0, - 0, 0, 0, 0, 790, 0, 0, 0, 0, 0, - 0, 279, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 572, 573, 0, + 0, 574, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 572, 573, 0, 0, 574, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 624, 565, 0, + 0, 625, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 624, 565, 0, 0, 625, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 627, 573, 0, + 0, 628, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 627, 573, 0, 0, 628, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 652, 565, 0, + 0, 653, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 652, 565, 0, 0, 653, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 655, 573, 0, + 0, 656, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 655, 573, 0, 0, 656, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 722, 565, 0, + 0, 723, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 722, 565, 0, 0, 723, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 725, 573, 0, + 0, 726, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 725, 573, 0, 0, 726, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 731, 565, 0, + 0, 732, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 731, 565, 0, 0, 732, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 609, 573, 0, + 0, 610, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 609, 573, 0, 0, 610, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 776, 565, 0, + 0, 777, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 776, 565, 0, 0, 777, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 779, 573, 0, + 0, 780, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 779, 573, 0, 0, 780, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 1152, 565, 0, + 0, 1153, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 1154, 565, 0, 0, 1155, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 1155, 573, 0, + 0, 1156, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 1157, 573, 0, 0, 1158, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 1186, 565, 0, + 0, 1187, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 1188, 565, 0, 0, 1189, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 609, 573, 0, + 0, 610, 199, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 609, 573, 0, 0, 610, 199, 233, 0, 0, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 0, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 0, 0, 179, 180, 0, 0, 0, - 0, 181, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 0, 197, - 198, 0, 0, 0, 0, 0, 199 + 0, 0, 0, 0, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 0, 197, 198, 0, 0, 0, + 0, 0, 199 }; static const yytype_int16 yycheck[] = { - 2, 369, 89, 60, 28, 57, 94, 102, 8, 227, - 710, 71, 22, 8, 101, 83, 433, 387, 53, 59, - 866, 331, 16, 17, 95, 91, 92, 71, 28, 95, - 67, 83, 68, 28, 2, 95, 4, 717, 57, 1066, - 26, 16, 17, 626, 96, 97, 98, 53, 16, 17, - 27, 603, 29, 55, 56, 1039, 473, 364, 25, 99, - 92, 55, 56, 95, 59, 425, 4, 13, 78, 893, - 894, 654, 482, 433, 2, 1062, 4, 271, 25, 52, - 1104, 275, 16, 17, 857, 53, 54, 27, 363, 57, - 365, 864, 29, 25, 25, 52, 295, 296, 958, 13, - 68, 25, 25, 100, 99, 1106, 100, 15, 25, 17, - 16, 17, 893, 894, 68, 83, 526, 126, 259, 331, - 1028, 55, 429, 91, 92, 100, 54, 95, 96, 97, - 98, 13, 100, 0, 26, 222, 411, 146, 25, 924, - 34, 724, 96, 97, 37, 38, 1054, 13, 13, 146, - 855, 734, 857, 428, 153, 430, 213, 143, 52, 864, - 414, 415, 148, 689, 251, 15, 100, 66, 66, 1196, - 236, 13, 238, 146, 209, 25, 866, 484, 730, 146, - 953, 148, 1028, 458, 1208, 1169, 123, 328, 1048, 146, - 261, 145, 13, 1039, 100, 778, 283, 1184, 68, 146, - 146, 261, 414, 415, 787, 151, 1207, 153, 1054, 244, - 485, 151, 280, 153, 146, 146, 1062, 261, 635, 221, - 119, 119, 146, 146, 259, 227, 444, 97, 280, 146, - 600, 233, 1013, 1018, 1019, 13, 230, 151, 232, 153, - 242, 209, 279, 143, 310, 311, 312, 313, 953, 315, - 316, 143, 855, 259, 857, 230, 56, 232, 233, 146, - 153, 864, 230, 866, 232, 233, 1174, 143, 236, 151, - 238, 153, 682, 633, 242, 635, 244, 329, 310, 311, - 312, 313, 148, 1191, 591, 151, 151, 153, 153, 257, - 326, 259, 379, 328, 601, 331, 230, 849, 232, 498, - 277, 500, 373, 25, 856, 371, 148, 152, 891, 151, - 329, 153, 280, 373, 242, 58, 1016, 592, 870, 1104, - 386, 1106, 328, 1169, 230, 109, 232, 602, 13, 257, - 151, 13, 153, 152, 77, 370, 1016, 372, 1184, 371, - 1164, 309, 310, 311, 312, 313, 314, 315, 316, 133, - 953, 877, 878, 866, 66, 100, 37, 38, 326, 68, - 328, 329, 364, 331, 1054, 108, 99, 893, 894, 112, - 365, 309, 1062, 151, 1064, 153, 100, 880, 414, 415, - 687, 309, 34, 151, 978, 153, 314, 25, 97, 364, - 893, 894, 326, 126, 977, 705, 364, 331, 366, 152, - 52, 146, 370, 371, 372, 623, 25, 783, 784, 121, - 122, 686, 124, 688, 482, 785, 411, 152, 386, 1002, - 1003, 236, 1207, 1208, 146, 1028, 148, 429, 452, 153, - 482, 425, 25, 97, 694, 430, 1039, 691, 692, 28, - 442, 701, 444, 697, 698, 862, 414, 415, 22, 264, - 537, 1054, 452, 268, 429, 649, 126, 452, 526, 1062, - 986, 429, 661, 458, 99, 99, 151, 666, 153, 151, - 13, 153, 684, 99, 526, 1069, 470, 845, 146, 691, - 692, 145, 484, 77, 148, 697, 698, 1013, 126, 144, - 485, 126, 126, 68, 1184, 1047, 1186, 465, 153, 99, - 126, 1191, 862, 1193, 78, 593, 126, 126, 146, 484, - 1013, 149, 888, 889, 482, 153, 484, 146, 1031, 99, - 890, 96, 97, 1036, 153, 585, 126, 146, 1031, 148, - 149, 899, 750, 126, 153, 1144, 904, 1237, 604, 1148, - 1230, 1054, 136, 137, 138, 1058, 581, 66, 583, 1062, - 1144, 1064, 99, 146, 1148, 1058, 149, 99, 526, 569, - 153, 99, 816, 942, 943, 99, 1169, 577, 112, 99, - 145, 1123, 638, 1156, 1077, 577, 553, 579, 146, 126, - 56, 1184, 650, 68, 126, 964, 965, 966, 126, 591, - 68, 1200, 126, 617, 571, 68, 126, 592, 650, 601, - 119, 611, 121, 122, 816, 1199, 1200, 602, 151, 611, - 153, 96, 97, 581, 682, 583, 591, 617, 96, 97, - 435, 623, 617, 591, 97, 440, 601, 148, 443, 126, - 682, 446, 66, 601, 66, 603, 604, 99, 1164, 633, - 68, 643, 100, 2, 739, 4, 66, 462, 684, 626, - 68, 25, 467, 866, 68, 691, 692, 16, 17, 146, - 145, 697, 698, 729, 126, 146, 866, 145, 728, 97, - 638, 1184, 153, 1186, 248, 249, 68, 654, 1191, 97, - 1193, 148, 650, 97, 66, 687, 153, 121, 122, 121, - 122, 146, 727, 688, 53, 54, 149, 729, 738, 119, - 153, 121, 122, 705, 706, 97, 708, 26, 710, 68, - 525, 679, 687, 99, 682, 683, 684, 1230, 152, 687, - 152, 68, 148, 691, 692, 1093, 82, 83, 518, 697, - 698, 68, 91, 92, 68, 1114, 95, 119, 146, 121, - 122, 100, 124, 738, 66, 153, 148, 724, 750, 68, - 97, 679, 126, 148, 68, 683, 1135, 734, 68, 727, - 97, 729, 730, 97, 9, 767, 150, 769, 834, 153, - 15, 705, 146, 129, 130, 149, 68, 96, 97, 153, - 816, 1088, 96, 97, 68, 52, 96, 97, 578, 56, - 850, 365, 68, 828, 584, 77, 586, 119, 833, 121, - 122, 778, 834, 52, 96, 97, 149, 56, 126, 68, - 787, 788, 96, 97, 1089, 150, 99, 144, 1031, 56, - 96, 97, 824, 146, 143, 77, 145, 106, 99, 148, - 146, 145, 867, 56, 148, 145, 77, 96, 97, 14, - 15, 1054, 151, 126, 130, 1058, 898, 25, 816, 1062, - 209, 1064, 66, 145, 1054, 126, 430, 146, 1058, 149, - 828, 145, 1062, 146, 1064, 833, 834, 902, 146, 145, - 144, 230, 144, 232, 233, 146, 911, 236, 146, 238, - 146, 849, 99, 242, 458, 244, 145, 68, 856, 866, - 99, 951, 10, 134, 135, 136, 137, 138, 257, 867, - 259, 144, 870, 88, 89, 119, 146, 121, 122, 126, - 962, 485, 54, 146, 891, 96, 97, 126, 44, 1006, - 146, 736, 64, 65, 44, 982, 40, 41, 718, 146, - 898, 721, 126, 8, 902, 13, 751, 146, 940, 25, - 942, 943, 999, 911, 17, 735, 152, 152, 144, 99, - 309, 310, 311, 312, 313, 314, 315, 316, 146, 68, - 128, 68, 964, 965, 966, 15, 150, 326, 148, 328, - 146, 1184, 331, 1186, 131, 1010, 126, 1012, 1191, 146, - 1193, 958, 26, 2, 1184, 4, 1186, 96, 97, 96, - 97, 1191, 52, 1193, 962, 569, 146, 16, 17, 100, - 977, 1053, 131, 577, 100, 364, 983, 366, 146, 1011, - 144, 370, 371, 372, 1016, 1050, 52, 1230, 592, 66, - 67, 26, 126, 146, 68, 1002, 1003, 386, 602, 146, - 1230, 68, 52, 146, 53, 54, 145, 611, 145, 52, - 146, 146, 1010, 131, 1012, 835, 126, 146, 838, 68, - 56, 841, 96, 97, 66, 414, 415, 146, 848, 96, - 97, 851, 146, 68, 146, 146, 414, 415, 642, 643, - 429, 1048, 91, 92, 121, 122, 95, 892, 146, 1047, - 151, 100, 1050, 431, 432, 1053, 1088, 9, 1090, 1124, - 1092, 96, 97, 68, 1089, 146, 1162, 1163, 68, 143, - 146, 145, 866, 131, 148, 56, 465, 119, 145, 121, - 122, 459, 1114, 1088, 688, 99, 931, 932, 58, 99, - 1088, 96, 97, 913, 146, 484, 96, 97, 146, 146, - 1162, 1163, 146, 1135, 52, 146, 146, 77, 143, 120, - 145, 149, 126, 148, 146, 66, 126, 146, 52, 146, - 54, 55, 56, 57, 58, 1123, 1124, 146, 146, 974, - 950, 146, 146, 146, 1141, 242, 146, 146, 108, 109, - 145, 144, 148, 77, 689, 145, 2, 148, 4, 1156, - 40, 41, 42, 43, 44, 1000, 1001, 146, 689, 146, - 209, 461, 77, 133, 1162, 1163, 465, 101, 119, 1234, - 121, 122, 96, 124, 108, 109, 98, 1022, 87, 94, - 95, 230, 611, 232, 233, 706, 1018, 236, 1092, 238, - 1104, 866, 581, 242, 583, 244, 1196, 53, 54, 133, - 769, 57, 591, 883, 740, 1237, 1237, 514, 257, 324, - 259, 887, 601, 1013, 603, 604, 131, 132, 133, 134, - 135, 136, 137, 138, 1077, 1077, 1090, 83, 885, 945, - 52, 947, 54, 55, 56, 57, 1234, 1077, 783, 784, - 96, 97, 98, 99, 1011, 1039, 105, 99, 1042, 638, - 500, 952, 783, 784, 855, 968, 969, 1102, 1054, 1031, - 309, 310, 311, 312, 313, 314, 315, 316, 1062, 77, - 1064, 1058, 1028, 54, 55, 983, 57, 326, -1, 328, - -1, -1, 331, 64, 65, -1, 94, 95, -1, -1, - 679, -1, -1, -1, 683, 684, -1, -1, 687, -1, - -1, 1121, 691, 692, 59, 60, 61, 62, 697, 698, - -1, -1, -1, 691, 692, 364, -1, 366, -1, 697, - 698, 370, 371, 372, -1, 133, 134, 135, 136, 137, - 138, -1, 877, 878, -1, -1, -1, 386, 727, -1, - 729, 730, 887, 888, 889, -1, 877, 878, 893, 894, - -1, -1, -1, 209, -1, -1, 887, 888, 889, -1, - -1, 1181, 893, 894, -1, 414, 415, 745, 746, -1, - 748, 749, -1, -1, -1, 1169, -1, 1171, -1, -1, - 429, -1, 1176, -1, -1, -1, 242, -1, 244, -1, - 1184, -1, 1186, -1, 1110, 1111, -1, -1, -1, 1193, - 1116, 257, 1118, 259, 1120, -1, 689, 52, -1, 54, - 55, 56, 57, 58, -1, -1, 465, 1130, 1131, -1, - -1, -1, -1, 1136, 280, 1138, 1139, 816, -1, -1, - -1, 1225, 77, 978, -1, 484, 1230, -1, 816, 828, - -1, 986, -1, -1, 833, 834, 52, 978, 54, 55, - 56, 57, -1, 309, -1, 986, 101, -1, 314, -1, - 849, -1, 107, 108, 109, -1, -1, 856, 1013, -1, - -1, -1, 328, 329, -1, -1, -1, -1, 867, -1, - -1, 870, 1013, 861, 2, 1089, 4, -1, 133, -1, - -1, 136, -1, 1209, 1210, 1211, 1212, -1, -1, -1, - 783, 784, 1215, 1216, 1217, 1218, -1, -1, 153, -1, - 366, 77, -1, 902, 370, -1, 372, -1, -1, 1235, - -1, -1, 911, 1236, 1069, -1, -1, -1, 94, 95, - -1, -1, 581, -1, 583, 53, 54, -1, 1069, 57, - -1, 52, 591, 54, 55, 56, 57, 58, -1, -1, - -1, -1, 601, -1, 603, 604, -1, -1, -1, 52, - -1, 54, 55, 56, 57, 83, 77, 56, 134, 135, - 136, 137, 138, -1, -1, -1, -1, -1, 96, 97, - 98, -1, 52, -1, 54, 55, 56, 57, -1, 638, - 101, -1, -1, -1, 877, 878, 107, 108, 109, 1144, - -1, -1, -1, 1148, 887, 888, 889, -1, 101, 465, - 893, 894, -1, 1144, 107, -1, -1, 1148, -1, 1164, - -1, 1010, 133, 1012, -1, 136, 482, -1, -1, -1, - 679, 101, -1, 1164, 683, 684, -1, 148, 687, -1, - -1, -1, 691, 692, -1, -1, -1, -1, 697, 698, - -1, -1, -1, -1, 1199, 1200, -1, -1, 1047, -1, - -1, 1050, -1, -1, -1, -1, -1, -1, 1199, 1200, - 526, -1, -1, -1, -1, -1, -1, -1, 727, -1, - 729, 730, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 209, -1, -1, -1, 978, -1, -1, -1, 1088, - -1, -1, -1, 986, -1, -1, -1, -1, 52, -1, - 54, 55, 56, 57, 58, -1, -1, -1, 207, -1, - -1, 210, 211, 212, 242, 581, 244, 583, -1, -1, - 1013, -1, -1, 77, 1123, 1124, -1, -1, -1, 257, - -1, 259, -1, -1, -1, -1, -1, 603, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, - -1, -1, 280, 107, 108, 109, -1, 816, -1, 689, - -1, -1, -1, 1162, 1163, -1, -1, -1, -1, 828, - -1, -1, -1, -1, 833, 834, 1069, -1, -1, 133, - -1, 309, 136, -1, 650, -1, 314, -1, -1, -1, - 849, -1, -1, -1, -1, -1, -1, 856, -1, -1, - 328, 329, -1, 331, -1, -1, -1, -1, 867, -1, - -1, 870, -1, 679, -1, -1, 682, 683, -1, -1, - -1, -1, -1, 689, -1, -1, -1, 326, -1, -1, - -1, -1, 331, -1, -1, 1234, -1, -1, 366, -1, - -1, -1, 370, 902, 372, -1, -1, -1, -1, -1, - -1, 1144, 911, 783, 784, 1148, -1, -1, -1, -1, - -1, 727, -1, -1, 730, -1, -1, -1, -1, -1, - -1, 1164, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 414, 415, -1, 52, - -1, 54, 55, 56, 57, 58, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1199, 1200, -1, -1, - -1, -1, -1, -1, 77, -1, -1, 783, 784, -1, - -1, -1, -1, -1, -1, 424, 425, -1, 91, -1, - -1, -1, -1, -1, 433, -1, -1, 465, 101, -1, - -1, -1, -1, -1, 107, 108, 109, 877, 878, -1, - -1, 1010, -1, 1012, 482, -1, -1, 887, 888, 889, - -1, -1, 828, 893, 894, -1, -1, 833, -1, -1, - 133, 470, -1, 136, 473, -1, -1, -1, -1, -1, - -1, -1, 2, 849, 4, -1, -1, -1, 1047, -1, - 856, 1050, -1, -1, -1, -1, -1, -1, 526, -1, - -1, 867, -1, -1, 870, -1, -1, -1, -1, -1, - -1, 877, 878, -1, -1, -1, -1, -1, -1, -1, - 519, 887, 888, 889, -1, -1, -1, 893, 894, 1088, - -1, -1, 898, 53, 54, -1, 902, 57, -1, -1, - -1, -1, -1, 689, -1, 911, -1, -1, 978, -1, - -1, -1, -1, 581, -1, 583, 986, -1, -1, -1, - -1, -1, -1, 83, 1123, 1124, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 603, 96, 97, 98, 99, - -1, -1, -1, 1013, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 962, 689, -1, -1, - -1, -1, -1, 1162, 1163, -1, -1, -1, -1, -1, - -1, -1, 978, -1, -1, -1, -1, -1, -1, 618, - 986, 620, 650, -1, -1, -1, -1, -1, -1, -1, - -1, 659, -1, -1, 633, -1, 635, 783, 784, 1069, - -1, -1, -1, -1, 1010, -1, 1012, 1013, -1, -1, - -1, 679, -1, -1, 682, 683, 684, -1, -1, -1, - -1, -1, -1, 691, 692, -1, -1, -1, -1, 697, - 698, -1, -1, -1, 2, 1234, 4, -1, -1, 678, - -1, 1047, -1, -1, 1050, -1, -1, 1053, -1, 209, - -1, 783, 784, -1, -1, -1, -1, -1, 2, 727, - 4, -1, 730, 1069, -1, -1, 705, -1, -1, -1, - -1, -1, -1, -1, 1144, -1, -1, -1, 1148, -1, - -1, 720, 242, -1, 244, 53, 54, -1, -1, -1, - -1, 877, 878, -1, 1164, -1, -1, 257, -1, 259, - -1, 887, 888, 889, -1, -1, -1, 893, 894, 53, - 54, -1, -1, -1, -1, -1, -1, 1123, 1124, -1, - 280, 689, -1, -1, -1, -1, -1, -1, 96, 1199, - 1200, 770, -1, -1, -1, -1, -1, -1, 1144, -1, - -1, -1, 1148, -1, -1, 877, 878, -1, 816, 309, - -1, -1, -1, -1, 314, 887, 888, 889, 1164, -1, - 828, 893, 894, -1, -1, 833, -1, -1, 328, 329, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 849, -1, -1, -1, -1, -1, -1, 856, -1, - -1, -1, 978, 1199, 1200, -1, -1, -1, -1, 867, - 986, -1, 870, -1, 843, -1, 366, -1, -1, -1, - 370, -1, 372, -1, -1, 783, 784, -1, -1, -1, - -1, -1, -1, 862, -1, -1, -1, 1013, 1234, -1, - 898, -1, -1, -1, 902, -1, -1, -1, -1, -1, - -1, 209, -1, 911, -1, -1, 978, -1, -1, -1, - -1, -1, -1, 689, 986, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 209, -1, -1, -1, -1, - -1, 910, -1, -1, 242, -1, 244, -1, -1, -1, - -1, 1013, -1, 1069, -1, -1, -1, -1, -1, 257, - -1, 259, -1, -1, 962, -1, -1, -1, 242, 938, - 244, -1, -1, -1, -1, 465, -1, -1, -1, 877, - 878, -1, -1, 257, -1, 259, -1, -1, -1, 887, - 888, 889, 482, -1, -1, 893, 894, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1069, -1, -1, - -1, 309, 1010, -1, 1012, -1, 314, 783, 784, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1144, -1, - 328, -1, 1148, 331, -1, 309, 526, -1, -1, -1, - 314, -1, -1, -1, -1, 1014, -1, -1, 1164, 1047, - -1, -1, 1050, -1, 328, 1053, -1, 331, 1027, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 366, -1, - -1, -1, 370, -1, 372, -1, -1, -1, -1, -1, - 978, -1, 1144, 1199, 1200, -1, 1148, -1, 986, -1, - -1, 581, 366, 583, -1, -1, 370, -1, 372, -1, - -1, -1, 1164, -1, -1, -1, -1, -1, -1, -1, - -1, 877, 878, 603, -1, 1013, 414, 415, -1, -1, - -1, 887, 888, 889, -1, 1123, 1124, 893, 894, -1, - -1, -1, -1, -1, -1, -1, -1, 1199, 1200, -1, - 414, 415, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 650, -1, -1, -1, -1, -1, -1, 465, -1, 25, - -1, 1069, -1, 0, -1, -1, -1, -1, -1, -1, - -1, 8, 9, 10, -1, -1, 13, 14, 15, 679, - 17, 465, 682, 683, -1, -1, -1, -1, 25, 26, - 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 37, 38, 978, 40, 41, 42, 43, 44, -1, -1, - 986, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, -1, -1, 1234, 727, 94, 95, - 730, 68, -1, -1, -1, -1, 1144, 1013, -1, -1, - 1148, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1164, -1, -1, 96, - 97, 127, -1, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 581, -1, 583, -1, -1, -1, -1, - -1, -1, -1, 120, -1, -1, -1, -1, -1, -1, - -1, 1199, 1200, 1069, -1, 603, -1, 581, -1, 583, - -1, -1, -1, -1, -1, -1, 143, 144, -1, -1, - -1, 148, 149, -1, 151, -1, 153, -1, -1, 603, - -1, -1, -1, -1, -1, -1, -1, -1, 828, -1, - -1, -1, -1, 833, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 849, - -1, -1, -1, -1, -1, -1, 856, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 867, 1144, -1, - 870, 679, 1148, -1, -1, 683, 684, -1, -1, -1, - -1, -1, -1, 691, 692, -1, -1, -1, 1164, 697, - 698, -1, -1, -1, -1, 679, -1, -1, 898, 683, - 684, -1, 902, -1, -1, -1, -1, 691, 692, -1, - -1, 911, -1, 697, 698, -1, -1, -1, -1, 727, - -1, -1, 730, 1199, 1200, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 727, -1, -1, 730, -1, -1, -1, - 16, 17, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 962, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 48, 49, 50, 51, -1, -1, -1, 55, - 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 68, 69, -1, -1, -1, -1, 816, -1, - 1010, -1, 1012, -1, -1, -1, -1, -1, -1, -1, - 828, -1, -1, -1, -1, 833, -1, -1, -1, -1, - -1, -1, 816, -1, 100, -1, -1, -1, -1, -1, - -1, 849, -1, -1, 828, -1, -1, 1047, 856, 833, - 1050, -1, -1, 1053, -1, -1, -1, -1, -1, 867, - -1, -1, 870, -1, -1, 849, -1, -1, -1, -1, - -1, -1, 856, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 867, -1, -1, 870, -1, -1, -1, - 898, -1, -1, -1, 902, -1, -1, -1, -1, -1, - -1, -1, -1, 911, 33, 34, 35, 36, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 902, -1, - 49, 50, 51, 1123, 1124, -1, -1, 911, -1, -1, - 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, - -1, 207, -1, -1, 210, 211, 212, -1, 214, -1, + 2, 60, 53, 89, 369, 71, 102, 83, 8, 22, + 710, 8, 16, 17, 28, 101, 59, 331, 227, 717, + 16, 17, 94, 91, 92, 387, 4, 95, 28, 95, + 482, 28, 57, 626, 2, 271, 4, 433, 57, 275, + 67, 892, 893, 71, 363, 1064, 365, 26, 16, 17, + 27, 55, 29, 55, 56, 1026, 99, 364, 83, 59, + 92, 654, 603, 95, 27, 78, 295, 296, 1037, 1060, + 68, 96, 97, 98, 526, 1102, 13, 473, 25, 53, + 1104, 1052, 25, 957, 259, 53, 54, 1142, 95, 57, + 52, 1146, 411, 414, 415, 15, 100, 0, 689, 99, + 68, 77, 25, 331, 100, 25, 25, 148, 99, 428, + 143, 430, 153, 892, 893, 83, 68, 2, 13, 4, + 126, 13, 429, 91, 92, 941, 942, 95, 96, 97, + 98, 724, 100, 37, 38, 126, 222, 16, 17, 458, + 146, 734, 425, 1198, 96, 97, 56, 963, 964, 965, + 433, 25, 29, 328, 213, 22, 857, 151, 209, 153, + 136, 137, 138, 864, 143, 251, 485, 66, 236, 54, + 238, 153, 1046, 16, 17, 1194, 9, 484, 25, 1206, + 28, 1205, 15, 126, 146, 778, 414, 415, 151, 730, + 153, 1182, 866, 244, 787, 261, 13, 283, 1167, 146, + 13, 1172, 25, 146, 280, 148, 149, 66, 259, 146, + 153, 78, 55, 56, 151, 52, 153, 100, 1189, 221, + 119, 100, 518, 146, 152, 227, 230, 146, 232, 148, + 682, 233, 1011, 261, 230, 444, 232, 233, 600, 635, + 242, 209, 310, 311, 312, 313, 123, 315, 316, 153, + 866, 952, 279, 148, 261, 280, 151, 100, 153, 151, + 119, 153, 230, 146, 232, 233, 977, 143, 236, 498, + 238, 500, 146, 592, 242, 26, 244, 328, 310, 311, + 312, 313, 578, 602, 591, 259, 877, 878, 584, 257, + 586, 259, 236, 379, 601, 152, 1112, 890, 152, 146, + 277, 892, 893, 371, 329, 13, 100, 373, 849, 146, + 329, 1162, 280, 25, 1014, 856, 1014, 1133, 386, 370, + 264, 372, 326, 146, 268, 148, 52, 331, 326, 870, + 56, 309, 25, 331, 151, 148, 153, 13, 151, 371, + 153, 309, 310, 311, 312, 313, 314, 315, 316, 152, + 633, 230, 635, 232, 328, 25, 1067, 242, 326, 153, + 328, 329, 364, 331, 97, 365, 373, 686, 364, 688, + 691, 692, 257, 13, 783, 784, 697, 698, 1052, 126, + 687, 248, 249, 976, 13, 146, 1060, 230, 1062, 232, + 54, 705, 143, 112, 985, 100, 364, 148, 366, 99, + 64, 65, 370, 371, 372, 126, 482, 1000, 1001, 13, + 1026, 411, 145, 649, 623, 148, 414, 415, 386, 13, + 1011, 1037, 718, 785, 309, 721, 126, 429, 66, 314, + 430, 1142, 661, 429, 146, 1146, 1052, 666, 452, 735, + 442, 146, 444, 151, 1060, 153, 414, 415, 37, 38, + 526, 537, 452, 146, 99, 452, 684, 482, 458, 82, + 83, 429, 866, 691, 692, 855, 862, 857, 109, 697, + 698, 68, 25, 66, 864, 151, 146, 153, 887, 888, + 845, 119, 484, 121, 122, 485, 1197, 1198, 484, 146, + 923, 435, 133, 99, 148, 816, 440, 465, 365, 443, + 97, 526, 446, 146, 1045, 68, 129, 130, 1182, 56, + 1184, 151, 66, 153, 482, 1189, 484, 1191, 462, 585, + 126, 593, 151, 467, 153, 126, 119, 889, 121, 122, + 581, 124, 583, 898, 97, 1235, 604, 99, 903, 835, + 146, 750, 838, 68, 25, 841, 866, 151, 100, 153, + 150, 1167, 848, 153, 1228, 851, 569, 151, 526, 153, + 99, 1154, 952, 430, 577, 119, 1182, 121, 122, 146, + 638, 1162, 97, 126, 650, 577, 553, 579, 148, 862, + 1121, 525, 425, 1016, 1017, 68, 52, 126, 816, 591, + 56, 458, 592, 146, 571, 591, 149, 99, 611, 601, + 153, 68, 602, 617, 66, 601, 682, 146, 68, 611, + 68, 68, 148, 581, 97, 583, 912, 617, 485, 66, + 617, 623, 68, 591, 126, 650, 68, 470, 66, 34, + 97, 148, 25, 601, 68, 603, 604, 97, 96, 97, + 97, 643, 77, 739, 146, 126, 99, 52, 1052, 626, + 149, 97, 1056, 949, 153, 97, 1060, 682, 1062, 121, + 122, 729, 728, 97, 15, 146, 17, 881, 149, 1102, + 638, 1104, 153, 126, 121, 122, 727, 654, 892, 893, + 99, 119, 650, 121, 122, 687, 684, 145, 688, 694, + 152, 687, 68, 691, 692, 738, 701, 729, 149, 697, + 698, 705, 569, 705, 706, 152, 708, 126, 710, 1029, + 577, 679, 126, 34, 682, 683, 684, 689, 150, 687, + 96, 97, 144, 691, 692, 592, 1091, 146, 99, 697, + 698, 52, 1052, 126, 146, 602, 1056, 2, 738, 4, + 1060, 153, 1062, 99, 611, 58, 56, 724, 750, 66, + 67, 16, 17, 146, 99, 126, 149, 734, 26, 727, + 153, 729, 730, 146, 77, 767, 834, 769, 1087, 145, + 126, 77, 1205, 1206, 106, 642, 643, 828, 1182, 1086, + 1184, 126, 833, 66, 850, 1189, 146, 1191, 53, 54, + 633, 68, 736, 153, 679, 108, 66, 1011, 683, 112, + 68, 778, 834, 68, 121, 122, 99, 751, 68, 146, + 787, 783, 784, 99, 56, 1029, 867, 68, 816, 96, + 97, 688, 824, 1119, 1228, 151, 91, 92, 96, 97, + 95, 14, 15, 126, 56, 100, 96, 97, 121, 122, + 126, 124, 1056, 99, 25, 96, 97, 99, 816, 119, + 901, 121, 122, 26, 124, 99, 146, 130, 68, 910, + 828, 1075, 1182, 153, 1184, 833, 834, 149, 145, 1189, + 126, 1191, 897, 144, 126, 143, 10, 145, 40, 41, + 148, 849, 126, 1179, 950, 145, 96, 97, 856, 866, + 66, 77, 88, 89, 145, 68, 146, 148, 146, 867, + 146, 144, 870, 144, 44, 877, 878, 52, 1228, 54, + 55, 56, 57, 890, 886, 887, 888, 146, 1004, 146, + 892, 893, 981, 96, 97, 146, 68, 146, 44, 897, + 8, 99, 126, 901, 13, 145, 961, 939, 997, 941, + 942, 866, 910, 119, 209, 121, 122, 891, 134, 135, + 136, 137, 138, 68, 96, 97, 101, 1008, 126, 1010, + 25, 963, 964, 965, 17, 230, 144, 232, 233, 99, + 143, 236, 145, 238, 99, 148, 146, 242, 146, 244, + 957, 96, 97, 152, 128, 207, 930, 931, 210, 211, + 212, 68, 257, 961, 259, 152, 126, 1048, 150, 976, + 855, 126, 857, 145, 68, 977, 15, 1009, 68, 864, + 148, 866, 1014, 985, 146, 944, 146, 946, 131, 96, + 97, 146, 146, 1000, 1001, 144, 1051, 52, 866, 973, + 145, 68, 96, 97, 100, 131, 96, 97, 100, 1011, + 1008, 146, 1010, 126, 309, 310, 311, 312, 313, 314, + 315, 316, 52, 146, 998, 999, 26, 146, 66, 96, + 97, 326, 146, 328, 689, 146, 331, 52, 145, 1046, + 146, 1122, 52, 131, 68, 126, 1020, 1045, 146, 146, + 1048, 145, 151, 1051, 1086, 145, 1088, 1087, 1090, 146, + 1086, 146, 1160, 1161, 146, 1067, 144, 952, 68, 364, + 146, 366, 96, 97, 326, 370, 371, 372, 145, 331, + 1112, 119, 1037, 121, 122, 1040, 56, 68, 1086, 9, + 146, 386, 146, 414, 415, 131, 96, 97, 1160, 1161, + 56, 1133, 967, 968, 146, 1060, 146, 1062, 68, 146, + 431, 432, 146, 52, 146, 96, 97, 146, 149, 414, + 415, 145, 120, 1121, 1122, 146, 1100, 58, 783, 784, + 146, 148, 1139, 146, 429, 146, 96, 97, 459, 146, + 1142, 1026, 146, 143, 1146, 145, 77, 1154, 148, 1108, + 1109, 1232, 1037, 146, 146, 1114, 144, 1116, 148, 1118, + 1162, 1029, 1160, 1161, 145, 242, 1034, 1052, 146, 146, + 465, 465, 424, 425, 461, 1060, 98, 108, 109, 96, + 87, 433, 611, 706, 1052, 145, 1016, 1090, 1056, 484, + 1087, 1102, 1060, 769, 1062, 1197, 1198, 54, 55, 866, + 57, 882, 133, 1235, 1194, 740, 514, 64, 65, 324, + 1235, 1011, 1167, 1075, 1169, 1075, 1075, 886, 470, 1174, + 884, 473, 877, 878, 1088, 1009, 105, 1182, 99, 1184, + 500, 886, 887, 888, 1232, 951, 1191, 892, 893, 2, + 52, 4, 54, 55, 56, 57, 855, 1029, 1207, 1208, + 1209, 1210, 1056, 16, 17, 52, 1052, 54, 55, 56, + 57, 58, 1026, 1128, 1129, -1, -1, 519, 1223, 1134, + -1, 1136, 1137, 1228, 1233, 40, 41, 42, 43, 44, + 77, -1, 1167, -1, -1, -1, 581, -1, 583, 101, + 53, 54, -1, -1, 91, 107, 591, 1182, 52, -1, + 54, 55, 56, 57, 101, 68, 601, -1, 603, 604, + 107, 108, 109, -1, 1182, 52, 1184, 54, 55, 56, + 57, 1189, 977, 1191, -1, 689, -1, -1, 91, 92, + 985, -1, 95, -1, -1, -1, 133, 100, -1, 136, + -1, -1, -1, 638, 59, 60, 61, 62, 1213, 1214, + 1215, 1216, -1, -1, -1, -1, 1011, 77, -1, -1, + 1228, -1, -1, -1, -1, -1, 618, -1, 620, 1234, + 691, 692, -1, -1, 94, 95, 697, 698, -1, -1, + -1, 633, 77, 635, 679, -1, -1, -1, 683, 684, + -1, -1, 687, -1, -1, -1, 691, 692, -1, 94, + 95, -1, 697, 698, -1, 52, -1, 54, 55, 56, + 57, 58, 1067, 133, 134, 135, 136, 137, 138, 783, + 784, -1, -1, -1, 745, 746, 678, 748, 749, -1, + 77, -1, 727, -1, 729, 730, 689, -1, -1, 134, + 135, 136, 137, 138, -1, -1, 209, -1, -1, -1, + -1, -1, -1, 705, 101, -1, -1, -1, -1, -1, + 107, 108, 109, -1, -1, -1, -1, 230, 720, 232, + 233, -1, -1, 236, -1, 238, -1, -1, -1, 242, + -1, 244, -1, -1, -1, -1, 133, 1142, -1, 136, + -1, 1146, -1, -1, 257, 816, 259, -1, -1, -1, + -1, 689, -1, -1, -1, -1, 153, 1162, -1, -1, + -1, -1, -1, 877, 878, -1, -1, -1, 770, -1, + -1, 816, 886, 887, 888, -1, -1, -1, 892, 893, + 783, 784, -1, 828, -1, 2, -1, 4, 833, 834, + 861, -1, 1197, 1198, -1, -1, 309, 310, 311, 312, + 313, 314, 315, 316, 849, -1, -1, -1, -1, -1, + -1, 856, -1, 326, -1, 328, -1, -1, 331, -1, + -1, -1, 867, -1, -1, 870, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 53, 54, -1, -1, + 57, 843, -1, -1, -1, 783, 784, -1, -1, -1, + -1, 364, -1, 366, -1, -1, 901, 370, 371, 372, + 862, -1, -1, 977, -1, 910, 83, -1, -1, -1, + -1, 985, -1, 386, 877, 878, -1, -1, -1, 96, + 97, 98, 99, 886, 887, 888, -1, -1, -1, 892, + 893, -1, -1, -1, -1, -1, -1, 1011, -1, -1, + -1, 414, 415, -1, -1, -1, -1, 909, -1, -1, + -1, -1, -1, -1, -1, -1, 429, -1, -1, -1, + 52, -1, 54, 55, 56, 57, 58, -1, -1, -1, + -1, -1, -1, -1, -1, 937, -1, -1, -1, 877, + 878, -1, -1, -1, -1, 77, -1, -1, 886, 887, + 888, -1, 465, 1067, 892, 893, -1, -1, -1, -1, + -1, -1, -1, 1008, -1, 1010, -1, -1, -1, 101, + -1, 484, -1, -1, 977, 107, 108, 109, -1, -1, + -1, 52, 985, 54, 55, 56, 57, 58, -1, -1, + -1, -1, 209, -1, -1, -1, -1, 25, -1, -1, + 1045, 133, -1, 1048, 136, -1, 77, -1, 1011, -1, + 1012, -1, -1, -1, -1, -1, 148, -1, -1, -1, + -1, -1, -1, 1025, -1, 242, -1, 244, 1142, -1, + 101, -1, 1146, -1, -1, -1, 107, 108, 109, 977, + 257, 1086, 259, -1, -1, -1, -1, 985, 1162, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 133, 280, 1067, 136, 94, 95, 581, -1, + 583, -1, -1, 1011, -1, -1, 1121, 1122, 591, -1, + -1, -1, -1, 1197, 1198, -1, -1, -1, 601, -1, + 603, 604, 309, -1, -1, -1, -1, 314, -1, 127, + -1, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 328, 329, -1, -1, 1160, 1161, -1, -1, -1, + -1, -1, -1, -1, -1, 638, -1, -1, -1, 1067, + -1, -1, 52, -1, 54, 55, 56, 57, 58, 1142, + -1, -1, -1, 1146, -1, -1, -1, -1, -1, 366, + -1, -1, -1, 370, -1, 372, -1, 77, -1, 1162, + -1, -1, -1, -1, -1, -1, 679, -1, -1, -1, + 683, 684, -1, -1, 687, 2, -1, 4, 691, 692, + -1, 101, -1, -1, 697, 698, -1, 1232, 108, 109, + -1, -1, -1, -1, 1197, 1198, -1, -1, -1, -1, + -1, -1, -1, -1, 1142, -1, -1, -1, 1146, -1, + -1, -1, -1, 133, 727, -1, 729, 730, 77, -1, + -1, -1, -1, -1, 1162, -1, 53, 54, -1, -1, + 57, -1, -1, -1, -1, 94, 95, 2, -1, 4, + -1, -1, -1, -1, -1, -1, -1, -1, 465, -1, + -1, -1, -1, -1, -1, -1, 83, -1, -1, 1197, + 1198, -1, -1, -1, -1, 482, -1, -1, -1, 96, + 97, 98, 131, 132, 133, 134, 135, 136, 137, 138, + -1, -1, -1, -1, -1, -1, -1, -1, 53, 54, + -1, -1, 57, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 816, -1, -1, -1, -1, -1, 526, + -1, -1, -1, -1, -1, 828, -1, -1, 83, -1, + 833, 834, 33, 34, 35, 36, -1, -1, -1, -1, + -1, 96, 97, 98, 99, -1, 849, -1, 49, 50, + 51, 52, -1, 856, -1, 56, -1, -1, 59, 60, + 61, 62, 63, -1, 867, -1, -1, 870, -1, -1, + -1, -1, -1, -1, 581, -1, 583, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + 91, -1, 209, -1, -1, -1, 603, 98, 901, -1, + 101, -1, -1, 104, 105, -1, 107, 910, -1, 110, + 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, + -1, -1, -1, -1, -1, 242, -1, 244, -1, -1, + -1, 132, -1, -1, -1, 689, -1, -1, 139, -1, + 257, -1, 259, 650, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 209, -1, -1, -1, -1, -1, + -1, -1, -1, 280, -1, -1, -1, -1, -1, -1, + -1, -1, 679, -1, -1, 682, 683, -1, -1, -1, + -1, -1, 689, -1, -1, -1, 2, 242, 4, 244, + -1, -1, 309, -1, -1, -1, -1, 314, -1, -1, + -1, -1, 257, -1, 259, 1008, -1, 1010, -1, -1, + -1, 328, 329, -1, 331, -1, -1, -1, -1, -1, + 727, -1, -1, 730, -1, 280, -1, -1, -1, 783, + 784, -1, -1, -1, -1, -1, -1, 53, 54, -1, + -1, -1, 1045, -1, -1, 1048, -1, -1, -1, 366, + -1, -1, -1, 370, 309, 372, -1, -1, -1, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 230, -1, 232, 233, -1, -1, + -1, -1, -1, 328, 329, -1, 783, 784, -1, -1, + 96, -1, -1, 1086, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 414, 415, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 366, -1, -1, -1, 370, -1, 372, 1121, 1122, + -1, 828, -1, 877, 878, -1, 833, -1, -1, -1, + -1, -1, 886, 887, 888, -1, -1, -1, 892, 893, + -1, -1, 849, -1, -1, -1, -1, -1, 465, 856, + -1, -1, -1, -1, -1, -1, -1, 1160, 1161, -1, + 867, -1, -1, 870, -1, 482, -1, -1, -1, -1, + 877, 878, -1, -1, -1, -1, -1, -1, -1, 886, + 887, 888, -1, -1, -1, 892, 893, -1, -1, -1, + 897, -1, -1, 209, 901, -1, -1, -1, -1, -1, + -1, -1, -1, 910, -1, -1, -1, -1, -1, 526, + 465, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2, 977, 4, -1, 242, 482, 244, 1232, + -1, 985, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 257, -1, 259, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 961, -1, -1, 1011, -1, -1, + -1, -1, -1, -1, 581, -1, 583, -1, -1, -1, + 977, 526, -1, 53, 54, -1, -1, -1, 985, -1, + -1, -1, -1, -1, -1, -1, 603, -1, -1, -1, + -1, -1, -1, 309, -1, -1, -1, -1, 314, -1, + -1, 1008, -1, 1010, 1011, -1, -1, -1, -1, -1, + -1, -1, 328, 1067, -1, 331, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 581, -1, 583, -1, + -1, -1, -1, 650, -1, -1, -1, -1, 1045, -1, + -1, 1048, 659, -1, 1051, -1, -1, -1, 603, -1, + 366, -1, -1, -1, 370, -1, 372, -1, -1, -1, + 1067, -1, 679, -1, -1, 682, 683, 684, -1, -1, + -1, -1, -1, -1, 691, 692, -1, -1, -1, -1, + 697, 698, -1, -1, -1, -1, -1, -1, 1142, -1, + -1, -1, 1146, -1, -1, 650, -1, -1, 414, 415, + -1, -1, -1, -1, 33, 34, 35, 36, 1162, -1, + 727, -1, -1, 730, 1121, 1122, -1, -1, -1, -1, + 49, 50, 51, -1, 679, -1, -1, 682, 683, 209, + 59, 60, 61, 62, 63, 1142, -1, -1, -1, 1146, + -1, -1, -1, 1197, 1198, -1, -1, -1, -1, 465, + -1, -1, -1, -1, -1, 1162, -1, -1, -1, -1, + -1, -1, 242, -1, 244, -1, -1, -1, -1, -1, + -1, -1, 727, -1, -1, 730, -1, 257, -1, 259, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, - -1, 77, 78, 79, 80, 81, 82, 83, 84, -1, - 86, 87, 1010, -1, 1012, -1, -1, -1, 94, 95, - 139, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1010, -1, 1012, -1, - -1, -1, -1, -1, 1234, -1, -1, -1, -1, 1047, - -1, -1, 1050, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, -1, -1, -1, -1, -1, -1, -1, - 326, -1, -1, 1047, -1, 331, 1050, 333, 334, 335, - 336, 337, -1, -1, 340, 341, 342, 343, 344, 345, - 346, 347, 348, -1, -1, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, -1, -1, -1, 364, -1, + 1197, 1198, -1, -1, -1, -1, -1, -1, -1, 816, + -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 139, 828, 86, 87, -1, -1, 833, -1, -1, -1, + 94, 95, -1, -1, -1, 1232, -1, -1, -1, 309, + -1, -1, 849, -1, 314, -1, -1, -1, 689, 856, + -1, -1, -1, -1, -1, -1, -1, -1, 328, -1, + 867, 331, -1, 870, -1, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 581, -1, 583, -1, -1, + -1, -1, -1, 828, -1, -1, -1, -1, 833, -1, + 897, -1, -1, -1, 901, -1, 366, 603, -1, -1, + 370, -1, 372, 910, 849, -1, -1, -1, -1, -1, + -1, 856, -1, -1, -1, -1, -1, -1, -1, -1, + 689, -1, 867, -1, -1, 870, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1123, 1124, -1, -1, -1, - -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, -1, -1, 1123, - 1124, 94, 95, -1, -1, -1, -1, -1, 414, 415, - -1, -1, -1, -1, -1, -1, -1, 423, 424, 425, - -1, -1, -1, 429, -1, 431, 432, 433, -1, -1, - -1, -1, -1, 439, 127, -1, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, -1, -1, 454, -1, - -1, -1, -1, 459, -1, -1, -1, -1, -1, -1, - 153, -1, -1, -1, 470, -1, -1, 473, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 484, -1, - -1, -1, -1, -1, -1, -1, 1234, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 502, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 1234, -1, -1, 519, 94, 95, -1, -1, -1, -1, - -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, - 8, 9, 10, -1, -1, -1, 14, 15, -1, 17, - -1, -1, -1, -1, -1, -1, -1, 25, 26, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 37, - 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, + -1, -1, 783, 784, 414, 415, -1, -1, -1, -1, + -1, -1, 897, -1, 961, -1, 901, -1, -1, -1, + -1, -1, -1, -1, -1, 910, -1, -1, -1, -1, + -1, -1, -1, 679, -1, -1, -1, 683, 684, -1, + -1, -1, -1, -1, -1, 691, 692, -1, -1, -1, + -1, 697, 698, -1, -1, 465, -1, -1, -1, -1, + -1, 1008, -1, 1010, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 783, 784, 961, -1, -1, -1, + -1, 727, -1, -1, 730, 77, 78, 79, 80, 81, + 82, 83, 84, -1, 86, 87, 877, 878, 1045, -1, + -1, 1048, 94, 95, 1051, 886, 887, 888, -1, -1, + -1, 892, 893, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1008, -1, 1010, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 591, -1, -1, -1, -1, - 68, -1, -1, -1, -1, 601, -1, -1, -1, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 618, -1, 620, -1, 94, 95, 96, 97, - -1, 99, -1, -1, -1, -1, -1, 633, -1, 635, + 1045, -1, -1, 1048, -1, -1, 1051, -1, 877, 878, + 816, 581, -1, 583, 1121, 1122, -1, 886, 887, 888, + -1, -1, 828, 892, 893, -1, -1, 833, -1, -1, + -1, -1, -1, 603, 16, 17, 977, -1, -1, -1, + -1, -1, -1, 849, 985, -1, -1, -1, -1, -1, + 856, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 867, -1, -1, 870, -1, 48, 49, 50, 51, + 1011, -1, -1, 55, 56, -1, 1121, 1122, -1, -1, + -1, -1, -1, -1, -1, -1, 68, 69, -1, -1, + -1, 897, -1, -1, -1, 901, -1, -1, -1, -1, + -1, -1, -1, -1, 910, -1, -1, -1, 977, 679, + -1, -1, -1, 683, 684, -1, 985, -1, 100, -1, + -1, 691, 692, -1, -1, 1232, 1067, 697, 698, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, + -1, -1, 1011, -1, -1, -1, -1, 8, 9, 10, + -1, -1, 13, 14, 15, -1, 17, 727, -1, -1, + 730, -1, -1, -1, 25, 26, 27, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, + 41, 42, 43, 44, -1, -1, -1, 1232, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1067, -1, + -1, 1142, 1008, -1, 1010, 1146, -1, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 120, -1, -1, -1, -1, -1, 126, 127, - -1, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, -1, -1, -1, -1, 143, 144, 145, 146, -1, - -1, 149, 678, 151, -1, 153, -1, -1, 684, 685, - -1, 687, -1, -1, -1, 691, 692, -1, -1, -1, - -1, 697, 698, -1, 33, 34, 35, 36, -1, 705, + -1, 1162, -1, -1, -1, 207, -1, -1, 210, 211, + 212, -1, 214, -1, -1, 96, 97, -1, -1, 1045, + -1, -1, 1048, -1, -1, -1, 816, -1, 230, -1, + 232, 233, -1, -1, -1, -1, 1197, 1198, 828, 120, + -1, -1, -1, 833, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1142, -1, -1, -1, 1146, -1, 849, + -1, -1, 143, 144, -1, -1, 856, 148, 149, -1, + 151, -1, 153, 1162, -1, -1, -1, 867, -1, -1, + 870, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1121, 1122, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1197, 1198, + -1, 901, -1, -1, -1, -1, -1, -1, -1, -1, + 910, -1, -1, -1, 326, -1, -1, -1, -1, 331, + -1, 333, 334, 335, 336, 337, -1, -1, 340, 341, + 342, 343, 344, 345, 346, 347, 348, -1, -1, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, -1, + -1, -1, 364, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 49, 50, 51, 52, 720, -1, -1, 56, -1, 58, - 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 77, 745, - 746, -1, 748, 749, -1, -1, -1, -1, -1, -1, - -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, - -1, -1, 101, -1, 770, 104, 105, -1, 107, 108, - -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, + -1, -1, -1, -1, -1, -1, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, + -1, -1, -1, 94, 95, -1, 1232, -1, -1, -1, + -1, -1, 414, 415, -1, -1, -1, -1, 1008, -1, + 1010, 423, 424, 425, -1, -1, -1, 429, -1, 431, + 432, 433, -1, -1, -1, -1, 127, 439, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, -1, -1, + -1, -1, 454, -1, -1, 1045, -1, 459, 1048, -1, + -1, -1, 153, -1, -1, -1, -1, -1, 470, -1, + -1, 473, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 484, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 132, -1, -1, -1, -1, -1, -1, - 139, -1, -1, 809, -1, -1, -1, -1, -1, -1, - 816, -1, 0, 1, -1, 3, 4, 5, 6, 7, - -1, -1, -1, 11, 12, -1, -1, -1, 16, -1, - 18, 19, 20, 21, 22, 23, 24, 843, -1, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, - -1, 39, -1, -1, -1, 861, 862, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 75, 76, -1, + 502, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, -1, -1, -1, 519, 94, 95, + -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, 1121, 1122, -1, 8, 9, 10, -1, -1, -1, + 14, 15, -1, 17, -1, -1, -1, -1, -1, -1, + -1, 25, 26, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 37, 38, -1, 40, 41, 42, 43, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 591, + -1, -1, -1, -1, 68, -1, -1, -1, -1, 601, + -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 618, -1, 620, -1, + 94, 95, 96, 97, -1, 99, -1, -1, -1, -1, + -1, 633, -1, 635, -1, -1, -1, -1, -1, -1, + -1, -1, 1232, -1, -1, -1, 120, -1, -1, -1, + -1, -1, 126, 127, -1, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, -1, -1, -1, -1, 143, + 144, 145, 146, -1, -1, 149, 678, 151, -1, 153, + -1, -1, 684, 685, -1, 687, -1, -1, -1, 691, + 692, -1, -1, -1, -1, 697, 698, -1, 0, -1, + -1, -1, -1, 705, -1, -1, 8, 9, 10, -1, + -1, 13, 14, 15, -1, 17, -1, -1, 720, -1, + -1, -1, -1, 25, -1, 27, 28, 29, -1, -1, + -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, + 42, 43, 44, 745, 746, -1, 748, 749, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 90, 91, 910, -1, -1, -1, -1, -1, - 98, -1, -1, 101, 102, -1, 104, 105, -1, 107, - -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, - 118, -1, 938, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 68, -1, 770, -1, + -1, -1, -1, -1, -1, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, -1, -1, + -1, -1, 94, 95, 96, 97, -1, 99, 100, -1, + -1, -1, -1, -1, 106, -1, -1, 809, -1, -1, + -1, -1, -1, -1, 816, -1, -1, -1, 120, -1, + -1, 123, -1, -1, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, -1, -1, -1, + -1, 843, 144, 145, 146, -1, -1, 149, 150, 151, + -1, 153, -1, -1, -1, -1, -1, -1, -1, 861, + 862, -1, -1, 0, 1, -1, 3, 4, 5, 6, + 7, -1, -1, -1, 11, 12, -1, -1, -1, 16, + -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, + -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, + -1, -1, 39, -1, -1, -1, -1, 909, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, + -1, -1, -1, -1, -1, 937, -1, -1, 75, 76, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, + -1, 98, -1, -1, 101, 102, -1, 104, 105, -1, + 107, -1, -1, 110, 111, 112, 113, 114, 115, 116, + 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 139, 140, 141, -1, -1, -1, -1, 0, -1, - -1, -1, -1, 151, -1, 153, 8, 9, 10, -1, + -1, -1, 139, 140, 141, -1, -1, -1, -1, -1, + 1012, 0, -1, -1, 151, -1, 153, -1, -1, 8, + 9, 10, -1, 1025, 13, 14, 15, -1, 17, -1, + -1, -1, -1, -1, -1, -1, 25, 26, 27, 28, + 29, -1, -1, -1, -1, -1, -1, -1, 37, 38, + -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, + 79, 80, 81, 82, 83, -1, -1, 86, 87, 68, + -1, -1, -1, -1, 1086, 94, 95, -1, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, -1, -1, -1, -1, 94, 95, 96, 97, -1, + 99, 100, -1, -1, -1, -1, -1, 106, -1, -1, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + -1, 120, -1, -1, 123, -1, -1, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + -1, -1, -1, -1, 143, 144, 145, 146, 0, -1, + 149, 150, 151, -1, 153, -1, 8, 9, 10, -1, -1, 13, 14, 15, -1, 17, -1, -1, -1, -1, - -1, -1, -1, 25, 26, 27, 28, 29, -1, -1, + 44, -1, -1, 25, -1, 27, 28, 29, -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, - 42, 43, 44, -1, -1, -1, -1, -1, 1014, -1, + 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, - -1, 1027, 86, 87, -1, -1, 68, -1, -1, -1, + 84, 85, 86, 87, 88, 89, 68, -1, -1, -1, 94, 95, -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, -1, -1, -1, 94, 95, 96, 97, -1, 99, 100, -1, - -1, -1, -1, -1, 106, 129, 130, 131, 132, 133, + -1, -1, -1, 127, 106, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, -1, -1, -1, 120, -1, - -1, 123, 1088, -1, 126, 127, 128, 129, 130, 131, + -1, 123, 146, -1, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, -1, -1, -1, - -1, 143, 144, 145, 146, 0, -1, 149, 150, 151, + -1, -1, 144, 145, 146, 0, -1, 149, 150, 151, -1, 153, -1, 8, 9, 10, -1, -1, 13, 14, 15, -1, 17, -1, -1, -1, -1, 44, -1, -1, - 25, -1, 27, 28, 29, -1, -1, -1, -1, -1, + 25, 26, 27, 28, 29, -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 68, -1, -1, -1, 94, 95, -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, -1, -1, -1, 94, - 95, 96, 97, -1, 99, 100, -1, -1, -1, -1, + 95, 96, 97, -1, -1, 100, -1, -1, -1, -1, 127, 106, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, -1, -1, -1, 120, -1, -1, 123, 146, - -1, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, -1, -1, -1, -1, -1, 144, + 137, 138, -1, -1, -1, 120, -1, -1, 123, -1, + -1, -1, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, -1, -1, -1, 143, 144, 145, 146, 0, -1, 149, 150, 151, -1, 153, -1, 8, 9, 10, -1, -1, 13, 14, 15, -1, 17, - -1, -1, -1, -1, 44, -1, -1, 25, -1, 27, + -1, -1, -1, -1, -1, -1, -1, 25, 26, 27, 28, 29, -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, @@ -3874,41 +4009,41 @@ static const yytype_int16 yycheck[] = 68, -1, -1, -1, 94, 95, -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, -1, -1, -1, 94, 95, 96, 97, - -1, 99, 100, -1, -1, -1, -1, 127, 106, 129, + -1, -1, 100, -1, -1, -1, -1, 127, 106, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, -1, - -1, -1, 120, -1, -1, 123, -1, -1, 126, 127, + -1, -1, 120, -1, -1, 123, -1, -1, -1, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, -1, -1, -1, -1, -1, 144, 145, 146, 0, + 138, -1, -1, -1, -1, 143, 144, 145, 146, 0, -1, 149, 150, 151, -1, 153, -1, 8, 9, 10, -1, -1, 13, 14, 15, -1, 17, -1, -1, -1, - -1, -1, -1, -1, 25, 26, 27, 28, 29, -1, + -1, -1, -1, -1, 25, -1, 27, 28, 29, -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 68, -1, -1, - -1, 94, 95, -1, -1, -1, 77, 78, 79, 80, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 68, -1, -1, + -1, -1, -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, - -1, -1, -1, 94, 95, 96, 97, -1, -1, 100, - -1, -1, -1, -1, 127, 106, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, -1, -1, -1, 120, - -1, -1, 123, -1, -1, -1, 127, 128, 129, 130, + -1, -1, -1, 94, 95, 96, 97, -1, 99, 100, + -1, -1, -1, -1, -1, 106, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 120, + -1, -1, 123, -1, -1, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, -1, -1, - -1, -1, 143, 144, 145, 146, 0, -1, 149, 150, + -1, -1, -1, 144, 145, 146, 0, -1, 149, 150, 151, -1, 153, -1, 8, 9, 10, -1, -1, 13, 14, 15, -1, 17, -1, -1, -1, -1, -1, -1, - -1, 25, 26, 27, 28, 29, -1, -1, -1, -1, + -1, 25, 26, 27, 28, -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 77, 78, 79, 80, 81, 82, 83, -1, -1, - 86, 87, -1, -1, 68, -1, -1, -1, 94, 95, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 68, -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, -1, -1, -1, 94, 95, 96, 97, -1, -1, 100, -1, -1, -1, - -1, -1, 106, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, -1, -1, -1, 120, -1, -1, 123, - -1, -1, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 106, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 120, -1, -1, -1, + -1, -1, -1, 127, -1, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, -1, -1, -1, -1, 143, - 144, 145, 146, 0, -1, 149, 150, 151, -1, 153, + 144, 145, 146, 0, 148, 149, 150, 151, -1, 153, -1, 8, 9, 10, -1, -1, 13, 14, 15, -1, 17, -1, -1, -1, -1, -1, -1, -1, 25, -1, 27, 28, 29, -1, -1, -1, -1, -1, -1, -1, @@ -3918,9 +4053,9 @@ static const yytype_int16 yycheck[] = -1, 68, -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, -1, -1, -1, 94, 95, 96, - 97, -1, 99, 100, -1, -1, -1, -1, -1, 106, + 97, -1, -1, 100, -1, -1, -1, -1, -1, 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 120, -1, -1, 123, -1, -1, 126, + -1, -1, -1, 120, -1, -1, 123, -1, -1, -1, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, -1, -1, -1, -1, -1, 144, 145, 146, 0, -1, 149, 150, 151, -1, 153, -1, 8, 9, @@ -3940,7 +4075,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, 143, 144, 145, 146, 0, 148, 149, 150, 151, -1, 153, -1, 8, 9, 10, -1, -1, 13, 14, 15, -1, 17, -1, -1, -1, -1, -1, - -1, -1, 25, -1, 27, 28, 29, -1, -1, -1, + -1, -1, 25, -1, 27, 28, -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3950,26 +4085,26 @@ static const yytype_int16 yycheck[] = -1, 94, 95, 96, 97, -1, -1, 100, -1, -1, -1, -1, -1, 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 120, -1, -1, - 123, -1, -1, -1, 127, 128, 129, 130, 131, 132, + -1, -1, -1, -1, 127, -1, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, -1, -1, -1, -1, - -1, 144, 145, 146, 0, -1, 149, 150, 151, -1, - 153, -1, 8, 9, 10, -1, -1, 13, 14, 15, + -1, 144, 145, 146, 0, 148, 149, 150, 151, -1, + 153, -1, 8, 9, 10, -1, -1, -1, 14, 15, -1, 17, -1, -1, -1, -1, -1, -1, -1, 25, - 26, 27, 28, -1, -1, -1, -1, -1, -1, -1, + 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 68, -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, -1, -1, -1, 94, 95, - 96, 97, -1, -1, 100, -1, -1, -1, -1, -1, - 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 96, 97, -1, 99, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 120, -1, -1, -1, -1, -1, - -1, 127, -1, 129, 130, 131, 132, 133, 134, 135, + 126, 127, -1, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, -1, -1, -1, -1, 143, 144, 145, - 146, 0, 148, 149, 150, 151, -1, 153, -1, 8, - 9, 10, -1, -1, 13, 14, 15, -1, 17, -1, - -1, -1, -1, -1, -1, -1, 25, -1, 27, 28, + 146, 0, -1, 149, -1, 151, -1, 153, -1, 8, + 9, 10, -1, -1, -1, 14, 15, -1, 17, -1, + -1, -1, -1, -1, -1, -1, 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3977,14 +4112,14 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, -1, -1, -1, 94, 95, 96, 97, -1, - -1, 100, -1, -1, -1, -1, -1, 106, -1, -1, + 99, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 120, -1, -1, -1, -1, -1, -1, 127, -1, + -1, 120, -1, -1, -1, -1, -1, 126, 127, -1, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - -1, -1, -1, -1, -1, 144, 145, 146, 0, 148, - 149, 150, 151, -1, 153, -1, 8, 9, 10, -1, + -1, -1, -1, -1, -1, 144, 145, 146, 0, -1, + 149, -1, 151, -1, 153, -1, 8, 9, 10, -1, -1, -1, 14, 15, -1, 17, -1, -1, -1, -1, - -1, -1, -1, 25, 26, -1, -1, -1, -1, -1, + -1, -1, -1, 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3996,125 +4131,10 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, 120, -1, -1, -1, -1, -1, 126, 127, -1, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, -1, -1, -1, - -1, 143, 144, 145, 146, 0, -1, 149, -1, 151, - -1, 153, -1, 8, 9, 10, -1, -1, -1, 14, - 15, -1, 17, -1, -1, -1, -1, -1, -1, -1, - 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 68, -1, -1, -1, -1, -1, -1, - -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, -1, -1, -1, -1, 94, - 95, 96, 97, -1, 99, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 120, -1, -1, -1, -1, - -1, 126, 127, -1, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, -1, -1, -1, -1, -1, 144, - 145, 146, 0, -1, 149, -1, 151, -1, 153, -1, - 8, 9, 10, -1, -1, -1, 14, 15, -1, 17, - -1, -1, -1, -1, -1, -1, -1, 25, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, - 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 68, -1, -1, -1, -1, -1, -1, -1, -1, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, -1, -1, -1, -1, 94, 95, 96, 97, - -1, 99, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 120, -1, -1, -1, -1, -1, 126, 127, - -1, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, -1, -1, -1, -1, -1, 144, 145, 146, -1, - -1, 149, -1, 151, 1, 153, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, -1, -1, 15, 16, - -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, - -1, 98, -1, -1, 101, 102, -1, 104, 105, -1, - 107, -1, -1, 110, 111, 112, 113, 114, 115, 116, - 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 139, 140, 141, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 151, 1, 153, 3, 4, 5, - 6, 7, -1, -1, 10, 11, 12, -1, 14, 15, - 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, - -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, - 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, - 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, - -1, -1, 98, -1, -1, 101, 102, -1, 104, 105, - -1, 107, -1, -1, 110, 111, 112, 113, 114, 115, - 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 139, 140, 141, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 151, 1, 153, 3, 4, - 5, 6, 7, -1, -1, 10, 11, 12, -1, -1, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, - -1, -1, -1, 98, -1, -1, 101, 102, -1, 104, - 105, -1, 107, -1, -1, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 139, 140, 141, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 151, 1, 153, 3, - 4, 5, 6, 7, -1, -1, 10, 11, 12, -1, - -1, 15, 16, -1, 18, 19, 20, 21, 22, 23, - 24, 25, -1, -1, -1, -1, 30, 31, 32, 33, - 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, - -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, - 104, 105, -1, 107, -1, -1, 110, 111, 112, 113, - 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 139, 140, 141, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 151, 1, 153, - 3, 4, 5, 6, 7, -1, -1, 10, 11, 12, - -1, -1, 15, 16, -1, 18, 19, 20, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 75, 76, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, - -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, - -1, 104, 105, -1, 107, -1, -1, 110, 111, 112, - 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, 3, 4, 5, 6, - 7, -1, 9, 10, 11, 12, 139, 140, 141, 16, - -1, 18, 19, 20, 21, 22, 23, 24, 151, -1, - 153, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, - -1, 98, -1, -1, 101, 102, -1, 104, 105, -1, - 107, -1, -1, 110, 111, 112, 113, 114, 115, 116, - 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, - 1, -1, 3, 4, 5, 6, 7, -1, -1, -1, - 11, 12, 139, 140, 141, 16, -1, 18, 19, 20, - 21, 22, 23, 24, 151, -1, 153, -1, -1, 30, + -1, -1, 144, 145, 146, -1, -1, 149, -1, 151, + 1, 153, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, -1, -1, 15, 16, -1, 18, 19, 20, + 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, @@ -4126,9 +4146,9 @@ static const yytype_int16 yycheck[] = 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 139, 140, - 141, -1, -1, -1, -1, -1, -1, -1, 149, -1, + 141, -1, -1, -1, -1, -1, -1, -1, -1, -1, 151, 1, 153, 3, 4, 5, 6, 7, -1, -1, - -1, 11, 12, -1, -1, -1, 16, -1, 18, 19, + 10, 11, 12, -1, 14, 15, 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, @@ -4141,9 +4161,9 @@ static const yytype_int16 yycheck[] = 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 139, - 140, 141, -1, -1, -1, -1, -1, -1, -1, 149, + 140, 141, -1, -1, -1, -1, -1, -1, -1, -1, -1, 151, 1, 153, 3, 4, 5, 6, 7, -1, - -1, -1, 11, 12, -1, -1, -1, 16, -1, 18, + -1, 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, @@ -4156,10 +4176,10 @@ static const yytype_int16 yycheck[] = -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 139, 140, 141, -1, -1, 144, -1, -1, -1, -1, + 139, 140, 141, -1, -1, -1, -1, -1, -1, -1, -1, -1, 151, 1, 153, 3, 4, 5, 6, 7, - -1, -1, -1, 11, 12, -1, -1, -1, 16, -1, - 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 10, 11, 12, -1, -1, 15, 16, -1, + 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, @@ -4171,9 +4191,9 @@ static const yytype_int16 yycheck[] = -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 139, 140, 141, -1, -1, 144, -1, -1, -1, + -1, 139, 140, 141, -1, -1, -1, -1, -1, -1, -1, -1, -1, 151, 1, 153, 3, 4, 5, 6, - 7, -1, -1, 10, 11, 12, -1, -1, -1, 16, + 7, -1, -1, 10, 11, 12, -1, -1, 15, 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, @@ -4185,7 +4205,7 @@ static const yytype_int16 yycheck[] = -1, 98, -1, -1, 101, 102, -1, 104, 105, -1, 107, -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, - 1, -1, 3, 4, 5, 6, 7, -1, -1, -1, + 1, -1, 3, 4, 5, 6, 7, -1, 9, 10, 11, 12, 139, 140, 141, 16, -1, 18, 19, 20, 21, 22, 23, 24, 151, -1, 153, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, @@ -4196,36 +4216,109 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, 104, 105, -1, 107, -1, -1, 110, - 111, 112, 113, 114, 115, 116, 117, 118, -1, 120, - -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, - 5, -1, 7, -1, -1, -1, 11, 12, 139, 140, + 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, + -1, -1, -1, -1, -1, -1, 1, -1, 3, 4, + 5, 6, 7, -1, -1, -1, 11, 12, 139, 140, 141, 16, -1, 18, 19, 20, 21, 22, 23, 24, 151, -1, 153, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - -1, 46, -1, -1, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, + 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, + -1, -1, -1, 98, -1, -1, 101, 102, -1, 104, + 105, -1, 107, -1, -1, 110, 111, 112, 113, 114, + 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 139, 140, 141, -1, -1, -1, + -1, -1, -1, -1, 149, -1, 151, 1, 153, 3, + 4, 5, 6, 7, -1, -1, -1, 11, 12, -1, + -1, -1, 16, -1, 18, 19, 20, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, + 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, + -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, + 104, 105, -1, 107, -1, -1, 110, 111, 112, 113, + 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 139, 140, 141, -1, -1, + -1, -1, -1, -1, -1, 149, -1, 151, 1, 153, + 3, 4, 5, 6, 7, -1, -1, -1, 11, 12, + -1, -1, -1, 16, -1, 18, 19, 20, 21, 22, + 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, + -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, + 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 75, 76, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, + -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, + -1, 104, 105, -1, 107, -1, -1, 110, 111, 112, + 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 139, 140, 141, -1, + -1, 144, -1, -1, -1, -1, -1, -1, 151, 1, + 153, 3, 4, 5, 6, 7, -1, -1, -1, 11, + 12, -1, -1, -1, 16, -1, 18, 19, 20, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, + 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 75, 76, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, + 102, -1, 104, 105, -1, 107, -1, -1, 110, 111, + 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 139, 140, 141, + -1, -1, 144, -1, -1, -1, -1, -1, -1, 151, + 1, 153, 3, 4, 5, 6, 7, -1, -1, 10, + 11, 12, -1, -1, -1, 16, -1, 18, 19, 20, + 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, + 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, + -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, + 61, 62, 63, 64, 65, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 75, 76, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, + 101, 102, -1, 104, 105, -1, 107, -1, -1, 110, + 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, + -1, -1, -1, -1, -1, -1, 1, -1, 3, 4, + 5, 6, 7, -1, -1, -1, 11, 12, 139, 140, + 141, 16, -1, 18, 19, 20, 21, 22, 23, 24, + 151, -1, 153, -1, -1, 30, 31, 32, 33, 34, + 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, 104, - 105, -1, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, + 105, -1, 107, -1, -1, 110, 111, 112, 113, 114, + 115, 116, 117, 118, -1, 120, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 139, 140, 141, 16, -1, 18, - 19, 20, 21, 22, 23, 24, -1, -1, 153, -1, + 19, 20, 21, 22, 23, 24, 151, -1, 153, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, - 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, - -1, -1, 101, 102, -1, 104, 105, -1, -1, -1, - -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, + -1, -1, 101, 102, -1, 104, 105, -1, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 139, 140, 141, 16, -1, 18, 19, 20, 21, 22, - 23, 24, 151, -1, 153, -1, -1, 30, 31, 32, + 23, 24, -1, -1, 153, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, @@ -4235,22 +4328,22 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, 104, 105, -1, -1, -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, + -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 139, 140, 141, 16, - -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, + -1, 18, 19, 20, 21, 22, 23, 24, 151, -1, 153, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, + -1, -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, 104, 105, -1, - 107, -1, -1, 110, 111, 112, 113, 114, 115, 116, + -1, -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, -1, -1, -1, 11, 12, 139, 140, 141, 16, -1, 18, 19, 20, - 21, 22, 23, 24, 151, -1, -1, -1, -1, 30, + 21, 22, 23, 24, -1, -1, 153, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, @@ -4260,24 +4353,22 @@ static const yytype_int16 yycheck[] = 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, 104, 105, -1, 107, -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, + 5, 6, 7, -1, -1, -1, 11, 12, 139, 140, + 141, 16, -1, 18, 19, 20, 21, 22, 23, 24, + 151, -1, -1, -1, -1, 30, 31, 32, 33, 34, + 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, + 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, + -1, -1, -1, 98, -1, -1, 101, 102, -1, 104, + 105, -1, 107, -1, -1, 110, 111, 112, 113, 114, + 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 139, 140, - 141, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 151, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, - -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 75, 76, 77, 78, 79, 80, 81, - 82, 83, -1, -1, 86, 87, -1, -1, -1, -1, - 92, 93, 94, 95, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 107, 108, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, -1, 140, 141, - -1, -1, -1, -1, -1, 147, 148, 3, 4, 5, + -1, -1, -1, -1, 139, 140, 141, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 151, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, 30, 31, 32, 33, 34, 35, @@ -4292,124 +4383,126 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, 141, -1, -1, -1, -1, - -1, 147, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, -1, - -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, -1, 56, -1, -1, -1, -1, + -1, 147, 148, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, - 111, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, -1, -1, -1, -1, -1, 147, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, -1, -1, -1, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, - 46, 47, 48, 49, 50, 51, 52, 53, -1, -1, - 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, - 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, - 86, 87, -1, -1, -1, -1, 92, 93, 94, 95, + -1, -1, -1, -1, -1, 75, 76, 77, 78, 79, + 80, 81, 82, 83, -1, -1, 86, 87, -1, -1, + -1, -1, 92, 93, 94, 95, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 107, 108, -1, -1, 111, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, -1, + 140, 141, -1, -1, -1, -1, -1, 147, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, -1, -1, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, -1, -1, -1, -1, -1, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, -1, 140, 141, -1, -1, -1, -1, - -1, 147, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, -1, - -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, - 51, 52, 53, -1, -1, 56, -1, -1, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, 111, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, -1, -1, -1, + -1, -1, 147, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, + 50, 51, 52, 53, -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 3, 4, 5, -1, 7, 147, -1, -1, 11, - 12, -1, -1, -1, 16, -1, 18, 19, 20, 21, - 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, - -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 75, 76, 77, 78, 79, + 80, 81, 82, 83, -1, -1, 86, 87, -1, -1, + -1, -1, 92, 93, 94, 95, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 107, 108, -1, + -1, 111, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, -1, + 140, 141, -1, -1, -1, -1, -1, 147, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, -1, -1, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, -1, -1, -1, -1, -1, + 45, 46, 47, 48, 49, 50, 51, 52, 53, -1, + -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, - 102, -1, 104, 105, -1, -1, -1, -1, 110, 111, - 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 3, 4, 5, + -1, 7, 147, -1, -1, 11, 12, -1, -1, -1, + 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, + 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3, 4, 5, -1, 7, -1, -1, 139, 11, 12, - -1, -1, -1, 16, 146, 18, 19, 20, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, - 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, - -1, 104, 105, -1, -1, -1, -1, 110, 111, 112, - 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, - 4, 5, 6, 7, -1, -1, 139, 11, 12, -1, - -1, -1, 16, 146, 18, 19, 20, 21, 22, 23, - 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, - 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, - -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, - 104, 105, -1, 107, -1, -1, 110, 111, 112, 113, - 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, - -1, -1, -1, 11, 12, 139, 140, 141, 16, -1, + -1, -1, 98, -1, -1, 101, 102, -1, 104, 105, + -1, -1, -1, -1, 110, 111, 112, 113, 114, 115, + 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, + 7, -1, -1, 139, 11, 12, -1, -1, -1, 16, + 146, 18, 19, 20, 21, 22, 23, 24, -1, -1, + -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, + -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, + -1, -1, 49, 50, 51, 52, 53, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 98, -1, -1, 101, 102, -1, 104, 105, -1, + -1, -1, -1, 110, 111, 112, 113, 114, 115, 116, + 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, + -1, -1, 139, 11, 12, -1, -1, -1, 16, 146, 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, - -1, 39, -1, -1, -1, -1, -1, -1, 46, -1, - -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, -1, -1, + -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, 104, 105, -1, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 3, 4, 5, 6, 7, -1, -1, -1, 11, + -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 139, 140, 141, 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, - -1, -1, -1, 45, 46, -1, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, + -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, - 102, -1, 104, 105, -1, 107, -1, -1, 110, 111, + 102, -1, 104, 105, -1, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, - -1, 7, -1, -1, -1, 11, 12, 139, 140, 141, + 6, 7, -1, -1, -1, 11, 12, 139, 140, 141, 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, - 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, - 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, + 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, 104, 105, - -1, 107, 108, 109, 110, 111, 112, 113, 114, 115, + -1, 107, -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 139, 140, 141, 16, -1, 18, 19, @@ -4434,7 +4527,7 @@ static const yytype_int16 yycheck[] = -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, - 104, 105, -1, 107, 108, -1, 110, 111, 112, 113, + 104, 105, -1, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 139, 140, 141, 16, -1, @@ -4446,8 +4539,8 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, - 98, -1, -1, 101, 102, -1, 104, 105, -1, -1, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 98, -1, -1, 101, 102, -1, 104, 105, -1, 107, + 108, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 139, 140, 141, 16, -1, 18, 19, 20, 21, @@ -4459,7 +4552,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, - 102, -1, 104, 105, -1, 107, 108, -1, 110, 111, + 102, -1, 104, 105, -1, -1, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 139, 140, 141, @@ -4472,19 +4565,19 @@ static const yytype_int16 yycheck[] = 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, 104, 105, - -1, -1, 108, -1, 110, 111, 112, 113, 114, 115, + -1, 107, 108, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 139, 140, 141, 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, - 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, -1, - -1, 101, 102, -1, 104, 105, -1, 107, -1, -1, + -1, 101, 102, -1, 104, 105, -1, -1, 108, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 139, @@ -4547,7 +4640,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, 98, -1, - -1, 101, 102, -1, 104, 105, -1, -1, -1, -1, + -1, 101, 102, -1, 104, 105, -1, 107, -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 139, @@ -4582,10 +4675,47 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 75, 76, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, + 102, -1, 104, 105, -1, -1, -1, -1, 110, 111, + 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, + -1, 7, -1, -1, -1, 11, 12, 139, 140, 141, + 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, + 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 98, -1, -1, 101, 102, -1, 104, 105, + -1, 107, -1, -1, 110, 111, 112, 113, 114, 115, + 116, 117, 118, -1, -1, -1, -1, -1, -1, 3, + 4, 5, -1, 7, -1, -1, -1, 11, 12, -1, + -1, -1, 16, 139, 18, 19, 20, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, + 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, + 104, 105, -1, 107, -1, -1, 110, 111, 112, 113, + 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, + -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, + 12, -1, -1, -1, 16, 139, 18, 19, 20, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, + 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, + 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, - 102, -1, 104, 105, -1, 107, -1, -1, 110, 111, + -1, -1, 94, -1, -1, -1, 98, -1, -1, 101, + 102, -1, 104, 105, -1, -1, -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, -1, -1, -1, 16, 139, 18, 19, @@ -4597,7 +4727,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 98, -1, - -1, 101, 102, -1, 104, 105, -1, 107, -1, -1, + -1, 101, 102, -1, 104, 105, -1, -1, -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, -1, -1, -1, 16, 139, @@ -4608,7 +4738,7 @@ static const yytype_int16 yycheck[] = -1, 59, 60, 61, 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, 104, 105, -1, -1, -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, -1, 3, 4, 5, @@ -4634,197 +4764,177 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, 102, -1, - 104, 105, -1, -1, -1, -1, 110, 111, 112, 113, - 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, - -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, - 12, -1, -1, -1, 16, 139, 18, 19, 20, 21, - 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, - -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 98, -1, -1, 101, - 102, -1, 104, 105, -1, -1, -1, -1, 110, 111, - 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, - -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, - -1, 11, 12, -1, -1, -1, 16, 139, 18, 19, - 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, - -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, - 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, 33, 34, 35, 36, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 49, 50, 51, 52, -1, -1, -1, 56, - -1, -1, 59, 60, 61, 62, 63, -1, 98, -1, - -1, 101, 102, -1, 104, 105, -1, -1, -1, -1, - 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, - -1, -1, -1, 90, 91, -1, -1, -1, -1, -1, - -1, 98, -1, -1, 101, -1, -1, 104, 105, 139, - 107, -1, -1, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 33, 34, 35, 36, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 132, -1, -1, 49, 50, - 51, 52, 139, -1, -1, 56, -1, -1, 59, 60, - 61, 62, 63, -1, -1, 33, 34, 35, 36, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 49, 50, 51, 52, -1, -1, -1, 56, 90, - 91, 59, 60, 61, 62, 63, -1, 98, -1, -1, - 101, -1, -1, 104, 105, -1, 107, -1, -1, 110, - 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, - -1, -1, 90, 91, -1, -1, -1, -1, -1, -1, - 98, 132, -1, 101, -1, -1, 104, 105, 139, -1, - -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 52, 53, -1, -1, 56, -1, -1, -1, -1, - -1, -1, -1, -1, 132, -1, -1, -1, -1, -1, - -1, 139, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 104, 105, 33, 34, 35, 36, 110, 111, 112, 113, + 114, 115, 116, 117, 118, -1, -1, -1, 49, 50, + 51, 52, -1, -1, -1, 56, -1, 58, 59, 60, + 61, 62, 63, -1, -1, 139, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 77, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, + 101, -1, -1, 104, 105, -1, 107, 108, -1, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 33, 34, + 35, 36, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 132, -1, -1, 49, 50, 51, 52, 139, -1, + -1, 56, -1, -1, 59, 60, 61, 62, 63, -1, + -1, 33, 34, 35, 36, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 49, 50, 51, + 52, -1, -1, -1, 56, 90, 91, 59, 60, 61, + 62, 63, -1, 98, -1, -1, 101, -1, -1, 104, + 105, -1, 107, -1, -1, 110, 111, 112, 113, 114, + 115, 116, 117, 118, -1, -1, -1, -1, 90, 91, + -1, -1, -1, -1, -1, -1, 98, 132, -1, 101, + -1, -1, 104, 105, 139, -1, -1, -1, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 52, 53, -1, + -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, + 132, -1, -1, -1, -1, -1, -1, 139, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, 52, 53, -1, -1, 56, 147, 148, -1, -1, + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, 52, 53, -1, + -1, 56, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, 86, 87, -1, -1, -1, - -1, 92, 93, 94, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, 86, 87, -1, -1, -1, -1, 92, 93, 94, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, -1, 140, - 141, -1, -1, -1, -1, -1, 147 + -1, -1, -1, -1, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, -1, 140, 141, -1, -1, -1, + -1, -1, 147 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint16 yystos[] = +static const yytype_int16 yystos[] = { 0, 155, 156, 0, 1, 3, 4, 5, 6, 7, 11, 12, 16, 18, 19, 20, 21, 22, 23, 24, @@ -4838,7 +4948,7 @@ static const yytype_uint16 yystos[] = 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 252, 279, 280, 333, 334, 335, 336, 337, 338, 339, 342, 344, 345, 359, 360, 362, 363, 364, 365, 366, - 367, 368, 369, 405, 419, 159, 3, 4, 5, 6, + 367, 368, 369, 405, 418, 159, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -4852,28 +4962,28 @@ static const yytype_uint16 yystos[] = 148, 211, 212, 148, 207, 211, 148, 153, 412, 54, 195, 412, 143, 160, 143, 21, 22, 31, 32, 182, 200, 233, 252, 200, 200, 200, 56, 1, 47, 101, - 163, 164, 165, 167, 185, 186, 419, 167, 220, 205, - 215, 403, 419, 204, 402, 403, 419, 46, 98, 139, + 163, 164, 165, 167, 185, 186, 418, 167, 220, 205, + 215, 403, 418, 204, 402, 403, 418, 46, 98, 139, 146, 190, 218, 233, 365, 366, 369, 223, 54, 55, 57, 194, 348, 361, 348, 349, 350, 152, 152, 152, - 152, 364, 179, 200, 200, 151, 153, 411, 417, 418, + 152, 364, 179, 200, 200, 151, 153, 411, 416, 417, 40, 41, 42, 43, 44, 37, 38, 26, 143, 207, 211, 244, 281, 28, 245, 278, 126, 146, 101, 107, 187, 126, 25, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 94, 95, 127, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 202, 202, 68, 96, 97, 145, 409, 219, 171, 175, 175, - 176, 177, 176, 175, 411, 418, 98, 184, 191, 233, + 176, 177, 176, 175, 411, 417, 98, 184, 191, 233, 257, 365, 366, 369, 52, 56, 94, 98, 192, 193, 233, 365, 366, 369, 193, 33, 34, 35, 36, 49, 50, 51, 52, 56, 148, 194, 367, 400, 210, 97, 409, 410, 281, 336, 99, 99, 146, 204, 56, 204, - 204, 204, 348, 126, 100, 146, 214, 419, 97, 145, + 204, 204, 348, 126, 100, 146, 214, 418, 97, 145, 409, 99, 99, 146, 214, 210, 412, 413, 210, 91, - 209, 210, 215, 377, 403, 419, 171, 413, 171, 54, + 209, 210, 215, 377, 403, 418, 171, 413, 171, 54, 64, 65, 168, 148, 201, 157, 163, 97, 409, 99, - 167, 166, 185, 149, 411, 418, 413, 221, 413, 150, - 146, 153, 416, 146, 416, 144, 416, 412, 56, 364, + 167, 166, 185, 149, 411, 417, 413, 221, 413, 150, + 146, 153, 415, 146, 415, 144, 415, 412, 56, 364, 187, 189, 146, 97, 145, 409, 270, 271, 66, 119, 121, 122, 351, 119, 119, 351, 67, 351, 340, 346, 343, 347, 77, 151, 159, 175, 175, 175, 175, 167, @@ -4884,7 +4994,7 @@ static const yytype_uint16 yystos[] = 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 52, 53, 56, 198, 207, 406, 407, 209, 52, 53, 56, 198, 207, 406, 161, 163, - 13, 253, 417, 253, 163, 175, 163, 411, 225, 56, + 13, 253, 416, 253, 163, 175, 163, 411, 225, 56, 97, 145, 409, 25, 171, 52, 56, 192, 130, 370, 97, 145, 409, 228, 401, 229, 68, 97, 408, 52, 56, 406, 170, 200, 206, 170, 206, 197, 124, 204, @@ -4896,65 +5006,65 @@ static const yytype_uint16 yystos[] = 144, 284, 282, 10, 251, 288, 251, 204, 146, 44, 413, 189, 146, 44, 126, 44, 97, 145, 409, 173, 412, 99, 99, 207, 211, 412, 414, 99, 99, 207, - 208, 211, 419, 251, 8, 246, 329, 419, 163, 13, - 163, 251, 27, 254, 417, 251, 25, 224, 293, 17, + 208, 211, 418, 251, 8, 246, 329, 418, 163, 13, + 163, 251, 27, 254, 416, 251, 25, 224, 293, 17, 248, 291, 52, 56, 209, 52, 56, 176, 227, 371, 226, 52, 56, 192, 209, 161, 171, 230, 231, 208, 211, 195, 204, 204, 214, 99, 99, 414, 99, 99, - 403, 171, 416, 187, 414, 273, 354, 54, 55, 57, + 403, 171, 415, 187, 414, 273, 354, 54, 55, 57, 358, 369, 152, 351, 152, 152, 152, 285, 144, 289, 107, 204, 167, 189, 167, 200, 52, 56, 209, 52, 56, 52, 56, 90, 91, 98, 101, 104, 105, 110, 132, 303, 304, 305, 308, 323, 324, 326, 327, 328, 333, 334, 337, 338, 339, 342, 344, 345, 366, 128, 170, 206, 170, 206, 181, 150, 99, 170, 206, 170, - 206, 181, 204, 217, 330, 419, 9, 15, 247, 249, - 332, 419, 14, 249, 250, 255, 256, 419, 256, 178, - 294, 291, 251, 107, 204, 290, 251, 414, 163, 417, + 206, 181, 204, 217, 330, 418, 9, 15, 247, 249, + 332, 418, 14, 249, 250, 255, 256, 418, 256, 178, + 294, 291, 251, 107, 204, 290, 251, 414, 163, 416, 175, 161, 414, 251, 413, 148, 372, 373, 194, 281, - 278, 99, 146, 413, 274, 355, 131, 265, 266, 419, + 278, 99, 146, 413, 274, 355, 131, 265, 266, 418, 265, 204, 414, 324, 324, 56, 192, 311, 309, 414, - 310, 412, 415, 325, 52, 100, 174, 131, 88, 89, - 97, 145, 148, 306, 307, 200, 170, 206, 100, 331, - 419, 163, 162, 163, 175, 251, 251, 295, 251, 204, - 146, 253, 251, 161, 417, 251, 52, 54, 55, 56, - 57, 58, 77, 91, 101, 107, 108, 109, 133, 136, - 374, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 387, 388, 389, 390, 391, 394, 395, 396, 397, 398, - 161, 376, 232, 148, 276, 376, 356, 262, 264, 267, - 380, 382, 383, 385, 386, 389, 390, 392, 393, 396, - 398, 412, 163, 161, 303, 107, 303, 312, 313, 314, - 316, 58, 112, 317, 318, 319, 320, 321, 322, 388, - 144, 270, 326, 308, 324, 324, 192, 414, 413, 112, - 312, 317, 312, 317, 98, 191, 233, 365, 366, 369, - 253, 163, 253, 296, 107, 204, 163, 251, 101, 107, - 258, 259, 260, 261, 379, 413, 413, 126, 146, 375, - 204, 146, 399, 419, 34, 52, 146, 399, 399, 146, - 375, 52, 146, 375, 52, 251, 417, 372, 376, 275, - 357, 267, 131, 126, 146, 263, 98, 233, 146, 399, - 399, 399, 146, 263, 146, 263, 151, 413, 52, 146, - 414, 107, 303, 316, 146, 348, 415, 146, 303, 34, - 52, 348, 413, 413, 414, 414, 56, 97, 145, 409, - 163, 332, 163, 301, 302, 303, 314, 317, 204, 256, - 291, 292, 260, 379, 146, 413, 146, 204, 374, 381, - 394, 396, 384, 388, 390, 398, 382, 391, 396, 380, - 382, 161, 267, 29, 123, 277, 163, 131, 233, 262, - 393, 396, 56, 97, 385, 390, 382, 392, 396, 382, - 52, 268, 269, 378, 146, 315, 316, 52, 146, 146, - 124, 319, 321, 322, 52, 56, 209, 52, 56, 329, - 255, 253, 40, 41, 146, 413, 258, 261, 259, 146, - 375, 146, 375, 399, 146, 375, 146, 375, 375, 251, - 149, 161, 163, 120, 146, 263, 146, 263, 52, 56, - 399, 146, 263, 146, 263, 263, 146, 412, 315, 146, - 146, 315, 414, 297, 175, 175, 312, 146, 146, 382, - 396, 382, 382, 251, 144, 382, 396, 382, 382, 269, - 316, 315, 298, 259, 375, 146, 375, 375, 375, 263, - 146, 263, 263, 263, 299, 382, 382, 163, 375, 263, - 256, 293, 300 + 144, 310, 325, 52, 100, 174, 131, 88, 89, 97, + 145, 148, 306, 307, 200, 170, 206, 100, 331, 418, + 163, 162, 163, 175, 251, 251, 295, 251, 204, 146, + 253, 251, 161, 416, 251, 52, 54, 55, 56, 57, + 58, 77, 91, 101, 107, 108, 109, 133, 136, 374, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 387, + 388, 389, 390, 391, 394, 395, 396, 397, 398, 161, + 376, 232, 148, 276, 376, 356, 262, 264, 267, 380, + 382, 383, 385, 386, 389, 390, 392, 393, 396, 398, + 412, 163, 161, 303, 107, 303, 312, 313, 314, 316, + 58, 112, 317, 318, 319, 320, 321, 322, 388, 270, + 326, 308, 324, 324, 192, 414, 413, 112, 312, 317, + 312, 317, 98, 191, 233, 365, 366, 369, 253, 163, + 253, 296, 107, 204, 163, 251, 101, 107, 258, 259, + 260, 261, 379, 413, 413, 126, 146, 375, 204, 146, + 399, 418, 34, 52, 146, 399, 399, 146, 375, 52, + 146, 375, 52, 251, 416, 372, 376, 275, 357, 267, + 131, 126, 146, 263, 98, 233, 146, 399, 399, 399, + 146, 263, 146, 263, 151, 413, 52, 146, 414, 107, + 303, 316, 146, 348, 144, 146, 303, 34, 52, 348, + 413, 413, 414, 414, 56, 97, 145, 409, 163, 332, + 163, 301, 302, 303, 314, 317, 204, 256, 291, 292, + 260, 379, 146, 413, 146, 204, 374, 381, 394, 396, + 384, 388, 390, 398, 382, 391, 396, 380, 382, 161, + 267, 29, 123, 277, 163, 131, 233, 262, 393, 396, + 56, 97, 385, 390, 382, 392, 396, 382, 52, 268, + 269, 378, 146, 315, 316, 52, 146, 146, 124, 319, + 321, 322, 52, 56, 209, 52, 56, 329, 255, 253, + 40, 41, 146, 413, 258, 261, 259, 146, 375, 146, + 375, 399, 146, 375, 146, 375, 375, 251, 149, 161, + 163, 120, 146, 263, 146, 263, 52, 56, 399, 146, + 263, 146, 263, 263, 146, 412, 315, 146, 146, 315, + 414, 297, 175, 175, 312, 146, 146, 382, 396, 382, + 382, 251, 144, 382, 396, 382, 382, 269, 316, 315, + 298, 259, 375, 146, 375, 375, 375, 263, 146, 263, + 263, 263, 299, 382, 382, 163, 375, 263, 256, 293, + 300 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint16 yyr1[] = +static const yytype_int16 yyr1[] = { 0, 154, 156, 155, 157, 158, 158, 158, 158, 159, 159, 160, 162, 161, 161, 163, 164, 164, 164, 164, @@ -5008,34 +5118,34 @@ static const yytype_uint16 yyr1[] = 306, 307, 308, 308, 308, 308, 308, 308, 308, 309, 308, 308, 310, 308, 308, 311, 308, 312, 312, 312, 312, 312, 312, 312, 312, 313, 313, 314, 314, 314, - 314, 315, 315, 316, 317, 317, 317, 317, 317, 317, - 318, 318, 319, 319, 320, 320, 321, 321, 322, 323, - 323, 323, 323, 323, 323, 323, 323, 323, 323, 324, - 324, 324, 324, 324, 324, 324, 324, 324, 325, 324, - 326, 327, 328, 328, 328, 329, 329, 330, 330, 330, - 331, 331, 332, 332, 333, 333, 334, 335, 335, 335, - 336, 337, 338, 339, 340, 340, 341, 341, 342, 343, - 343, 344, 345, 346, 346, 347, 347, 348, 348, 349, - 349, 350, 350, 351, 352, 351, 353, 354, 355, 356, - 357, 351, 358, 358, 358, 358, 359, 359, 360, 361, - 361, 361, 361, 362, 363, 363, 364, 364, 364, 364, - 365, 365, 365, 365, 365, 366, 366, 366, 366, 366, - 366, 366, 367, 367, 368, 368, 369, 369, 371, 370, - 370, 372, 372, 373, 372, 374, 374, 374, 374, 374, - 375, 375, 376, 376, 376, 376, 376, 376, 376, 376, - 376, 376, 376, 376, 376, 376, 376, 377, 378, 378, - 378, 378, 379, 379, 380, 381, 381, 382, 382, 383, - 384, 384, 385, 385, 386, 386, 387, 387, 388, 388, - 389, 390, 390, 391, 392, 393, 393, 394, 394, 395, - 395, 396, 396, 397, 397, 398, 399, 399, 400, 401, - 400, 402, 402, 403, 403, 404, 404, 404, 404, 405, - 405, 405, 406, 406, 406, 406, 407, 407, 407, 408, - 408, 409, 409, 410, 410, 411, 411, 412, 412, 413, - 414, 415, 416, 416, 416, 417, 417, 418, 418, 419 + 314, 315, 315, 316, 317, 317, 317, 317, 317, 318, + 318, 319, 319, 320, 320, 321, 321, 322, 323, 323, + 323, 323, 323, 323, 323, 323, 323, 323, 324, 324, + 324, 324, 324, 324, 324, 324, 324, 325, 324, 326, + 327, 328, 328, 328, 329, 329, 330, 330, 330, 331, + 331, 332, 332, 333, 333, 334, 335, 335, 335, 336, + 337, 338, 339, 340, 340, 341, 341, 342, 343, 343, + 344, 345, 346, 346, 347, 347, 348, 348, 349, 349, + 350, 350, 351, 352, 351, 353, 354, 355, 356, 357, + 351, 358, 358, 358, 358, 359, 359, 360, 361, 361, + 361, 361, 362, 363, 363, 364, 364, 364, 364, 365, + 365, 365, 365, 365, 366, 366, 366, 366, 366, 366, + 366, 367, 367, 368, 368, 369, 369, 371, 370, 370, + 372, 372, 373, 372, 374, 374, 374, 374, 374, 375, + 375, 376, 376, 376, 376, 376, 376, 376, 376, 376, + 376, 376, 376, 376, 376, 376, 377, 378, 378, 378, + 378, 379, 379, 380, 381, 381, 382, 382, 383, 384, + 384, 385, 385, 386, 386, 387, 387, 388, 388, 389, + 390, 390, 391, 392, 393, 393, 394, 394, 395, 395, + 396, 396, 397, 397, 398, 399, 399, 400, 401, 400, + 402, 402, 403, 403, 404, 404, 404, 404, 405, 405, + 405, 406, 406, 406, 406, 407, 407, 407, 408, 408, + 409, 409, 410, 410, 411, 411, 412, 412, 413, 414, + 415, 415, 415, 416, 416, 417, 417, 418 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 0, 2, 2, 1, 1, 3, 2, 1, 2, 3, 0, 6, 3, 2, 1, 1, 3, 2, @@ -5089,30 +5199,30 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 4, 4, 3, 4, 4, 3, 0, 4, 2, 0, 4, 2, 0, 4, 1, 1, 2, 3, 5, 2, 4, 1, 2, 3, 2, 4, 1, - 3, 1, 3, 1, 3, 1, 2, 1, 3, 1, - 1, 3, 2, 1, 1, 3, 2, 1, 2, 1, - 3, 3, 2, 2, 1, 1, 1, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, - 1, 2, 2, 3, 1, 6, 1, 1, 1, 1, - 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, - 3, 3, 3, 4, 0, 3, 1, 2, 4, 0, - 3, 4, 4, 0, 3, 0, 3, 0, 2, 0, - 2, 0, 2, 1, 0, 3, 0, 0, 0, 0, - 0, 8, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 3, 1, 2, 1, 1, 1, 1, + 3, 1, 3, 1, 3, 1, 1, 3, 1, 1, + 3, 2, 1, 1, 3, 2, 1, 2, 1, 3, + 3, 2, 2, 1, 1, 1, 2, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 3, 1, + 2, 2, 3, 1, 6, 1, 1, 1, 1, 2, + 1, 2, 1, 1, 1, 1, 1, 1, 2, 3, + 3, 3, 4, 0, 3, 1, 2, 4, 0, 3, + 4, 4, 0, 3, 0, 3, 0, 2, 0, 2, + 0, 2, 1, 0, 3, 0, 0, 0, 0, 0, + 8, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, - 0, 3, 3, 0, 3, 4, 2, 2, 2, 1, - 2, 0, 6, 8, 4, 6, 4, 6, 2, 4, - 6, 2, 4, 2, 4, 1, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, - 2, 1, 2, 1, 1, 3, 1, 3, 1, 1, - 2, 2, 1, 3, 3, 1, 3, 1, 3, 1, - 1, 2, 1, 1, 1, 2, 2, 1, 1, 0, - 4, 1, 2, 1, 3, 3, 2, 4, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 4, 0, + 3, 3, 0, 3, 4, 2, 2, 2, 1, 2, + 0, 6, 8, 4, 6, 4, 6, 2, 4, 6, + 2, 4, 2, 4, 1, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 1, 3, 1, 2, + 1, 2, 1, 1, 3, 1, 3, 1, 1, 2, + 2, 1, 3, 3, 1, 3, 1, 3, 1, 1, + 2, 1, 1, 1, 2, 2, 1, 1, 0, 4, + 1, 2, 1, 3, 3, 2, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 1, 0, 1, 2, - 2, 2, 0, 1, 1, 1, 1, 1, 2, 0 + 1, 1, 1, 1, 0, 1, 0, 1, 2, 2, + 0, 1, 1, 1, 1, 1, 2, 0 }; @@ -5128,22 +5238,22 @@ static const yytype_uint8 yyr2[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (&yylloc, p, YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (&yylloc, p, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) /* Error token number */ #define YYTERROR 1 @@ -5202,10 +5312,10 @@ do { \ /* Print *YYLOCP on YYO. Private, do not rely on its existence. */ YY_ATTRIBUTE_UNUSED -static unsigned +static int yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) { - unsigned res = 0; + int res = 0; int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; if (0 <= yylocp->first_line) { @@ -5248,40 +5358,42 @@ do { \ } while (0) -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct parser_params *p) +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct parser_params *p) { - FILE *yyo = yyoutput; - YYUSE (yyo); + FILE *yyoutput = yyo; + YYUSE (yyoutput); YYUSE (yylocationp); YYUSE (p); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct parser_params *p) +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct parser_params *p) { YYFPRINTF (p, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - YY_LOCATION_PRINT (yyoutput, *yylocationp); + YY_LOCATION_PRINT (yyo, *yylocationp); YYFPRINTF (p, ": "); - yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, p); + yy_symbol_value_print (yyo, yytype, yyvaluep, yylocationp, p); YYFPRINTF (p, ")"); } @@ -5291,7 +5403,7 @@ yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYL `------------------------------------------------------------------*/ static void -ruby_parser_yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop, struct parser_params *p) +ruby_parser_yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop, struct parser_params *p) #define yy_stack_print(b, t) ruby_parser_yy_stack_print(b, t, p) { YYFPRINTF (p, "Stack now"); @@ -5315,12 +5427,12 @@ do { \ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, struct parser_params *p) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, struct parser_params *p) { - unsigned long int yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (p, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (p, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) @@ -5328,7 +5440,7 @@ yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule YYFPRINTF (p, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) + &yyvsp[(yyi + 1) - (yynrhs)] , &(yylsp[(yyi + 1) - (yynrhs)]) , p); YYFPRINTF (p, "\n"); } @@ -5374,13 +5486,13 @@ int yydebug; # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ -static YYSIZE_T +static YYPTRDIFF_T yystrlen (const char *yystr) { - YYSIZE_T yylen; + YYPTRDIFF_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; @@ -5416,12 +5528,12 @@ yystpcpy (char *yydest, const char *yysrc) backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ -static YYSIZE_T +static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { - YYSIZE_T yyn = 0; + YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) @@ -5434,7 +5546,10 @@ yytnamerr (char *yyres, const char *yystr) case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -5449,10 +5564,10 @@ yytnamerr (char *yyres, const char *yystr) do_not_strip_quotes: ; } - if (! yyres) + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; } # endif @@ -5465,19 +5580,19 @@ yytnamerr (char *yyres, const char *yystr) *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int -yysyntax_error (struct parser_params *p, YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +yysyntax_error (struct parser_params *p, YYPTRDIFF_T *yymsg_alloc, char **yymsg, + yy_state_t *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; - /* Arguments of yyformat. */ + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ + /* Actual size of YYARG. */ int yycount = 0; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then @@ -5505,6 +5620,8 @@ yysyntax_error (struct parser_params *p, YYSIZE_T *yymsg_alloc, char **yymsg, if (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; + YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); + yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { @@ -5529,11 +5646,12 @@ yysyntax_error (struct parser_params *p, YYSIZE_T *yymsg_alloc, char **yymsg, } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } } } @@ -5545,6 +5663,7 @@ yysyntax_error (struct parser_params *p, YYSIZE_T *yymsg_alloc, char **yymsg, case N: \ yyformat = S; \ break + default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -5555,10 +5674,13 @@ yysyntax_error (struct parser_params *p, YYSIZE_T *yymsg_alloc, char **yymsg, } { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + /* Don't count the "%s"s in the final size, but reserve room for + the terminator. */ + YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -5584,8 +5706,8 @@ yysyntax_error (struct parser_params *p, YYSIZE_T *yymsg_alloc, char **yymsg, } else { - yyp++; - yyformat++; + ++yyp; + ++yyformat; } } return 0; @@ -5642,7 +5764,7 @@ YYLTYPE yylloc = yyloc_default; /* Number of syntax errors so far. */ int yynerrs; - int yystate; + yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; @@ -5655,9 +5777,9 @@ YYLTYPE yylloc = yyloc_default; to reallocate them elsewhere. */ /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss; + yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; @@ -5672,7 +5794,7 @@ YYLTYPE yylloc = yyloc_default; /* The locations where the error started and ended. */ YYLTYPE yyerror_range[3]; - YYSIZE_T yystacksize; + YYPTRDIFF_T yystacksize; int yyn; int yyresult; @@ -5687,7 +5809,7 @@ YYLTYPE yylloc = yyloc_default; /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) @@ -5709,38 +5831,51 @@ YYLTYPE yylloc = yyloc_default; yychar = YYEMPTY; /* Cause a token to be read. */ /* User initialization code. */ -#line 974 "ripper.y" /* yacc.c:1429 */ +#line 992 "ripper.y" { RUBY_SET_YYLLOC_OF_NONE(yylloc); } -#line 5713 "ripper.c" /* yacc.c:1429 */ +#line 5835 "ripper.c" + yylsp[0] = yylloc; goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((p, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYPTRDIFF_T yysize = yyssp - yyss + 1; -#ifdef yyoverflow +# if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; YYLTYPE *yyls1 = yyls; /* Each stack pointer address is followed by the size of the @@ -5748,19 +5883,15 @@ YYLTYPE yylloc = yyloc_default; conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yyls1, yysize * sizeof (*yylsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), + &yyls1, yysize * YYSIZEOF (*yylsp), &yystacksize); - - yyls = yyls1; yyss = yyss1; yyvs = yyvs1; + yyls = yyls1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -5769,44 +5900,45 @@ YYLTYPE yylloc = yyloc_default; yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); YYSTACK_RELOCATE (yyls_alloc, yyls); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; yylsp = yyls + yysize - 1; - YYDPRINTF ((p, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((p, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } - - YYDPRINTF ((p, "Entering state %d\n", yystate)); +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -5856,15 +5988,14 @@ YYLTYPE yylloc = yyloc_default; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END *++yylsp = yylloc; + + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -5879,7 +6010,7 @@ YYLTYPE yylloc = yyloc_default; /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -5895,23 +6026,24 @@ YYLTYPE yylloc = yyloc_default; GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; - /* Default location. */ + /* Default location. */ YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); + yyerror_range[1] = yyloc; YY_REDUCE_PRINT (yyn); switch (yyn) { - case 2: -#line 1176 "ripper.y" /* yacc.c:1646 */ - { + case 2: +#line 1194 "ripper.y" + { SET_LEX_STATE(EXPR_BEG); local_push(p, ifndef_ripper(1)+0); } -#line 5905 "ripper.c" /* yacc.c:1646 */ +#line 6037 "ripper.c" break; case 3: -#line 1181 "ripper.y" /* yacc.c:1646 */ - { +#line 1199 "ripper.y" + { #if 0 if ((yyvsp[0].val) && !compile_for_eval) { NODE *node = (yyvsp[0].val); @@ -5930,69 +6062,69 @@ YYLTYPE yylloc = yyloc_default; {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(program,v1);p->result=v2;} local_pop(p); } -#line 5929 "ripper.c" /* yacc.c:1646 */ +#line 6061 "ripper.c" break; case 4: -#line 1203 "ripper.y" /* yacc.c:1646 */ - { +#line 1221 "ripper.y" + { (yyval.val) = void_stmts(p, (yyvsp[-1].val)); } -#line 5937 "ripper.c" /* yacc.c:1646 */ +#line 6069 "ripper.c" break; case 5: -#line 1209 "ripper.y" /* yacc.c:1646 */ - { +#line 1227 "ripper.y" + { #if 0 (yyval.val) = NEW_BEGIN(0, &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5;v1=dispatch0(stmts_new);v2=dispatch0(void_stmt);v3=v1;v4=v2;v5=dispatch2(stmts_add,v3,v4);(yyval.val)=v5;} } -#line 5948 "ripper.c" /* yacc.c:1646 */ +#line 6080 "ripper.c" break; case 6: -#line 1216 "ripper.y" /* yacc.c:1646 */ - { +#line 1234 "ripper.y" + { #if 0 (yyval.val) = newline_node((yyvsp[0].val)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(stmts_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(stmts_add,v2,v3);(yyval.val)=v4;} } -#line 5959 "ripper.c" /* yacc.c:1646 */ +#line 6091 "ripper.c" break; case 7: -#line 1223 "ripper.y" /* yacc.c:1646 */ - { +#line 1241 "ripper.y" + { #if 0 (yyval.val) = block_append(p, (yyvsp[-2].val), newline_node((yyvsp[0].val))); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(stmts_add,v1,v2);(yyval.val)=v3;} } -#line 5970 "ripper.c" /* yacc.c:1646 */ +#line 6102 "ripper.c" break; case 8: -#line 1230 "ripper.y" /* yacc.c:1646 */ - { +#line 1248 "ripper.y" + { (yyval.val) = remove_begin((yyvsp[0].val)); } -#line 5978 "ripper.c" /* yacc.c:1646 */ +#line 6110 "ripper.c" break; case 10: -#line 1237 "ripper.y" /* yacc.c:1646 */ - { +#line 1255 "ripper.y" + { (yyval.val) = (yyvsp[0].val); } -#line 5986 "ripper.c" /* yacc.c:1646 */ +#line 6118 "ripper.c" break; case 11: -#line 1243 "ripper.y" /* yacc.c:1646 */ - { +#line 1261 "ripper.y" + { #if 0 p->eval_tree_begin = block_append(p, p->eval_tree_begin, NEW_BEGIN((yyvsp[-1].val), &(yyloc))); @@ -6000,141 +6132,141 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(BEGIN,v1);(yyval.val)=v2;} } -#line 5999 "ripper.c" /* yacc.c:1646 */ +#line 6131 "ripper.c" break; case 12: -#line 1255 "ripper.y" /* yacc.c:1646 */ - {if (!(yyvsp[-1].val)) {yyerror1(&(yylsp[0]), "else without rescue is useless");}} -#line 6005 "ripper.c" /* yacc.c:1646 */ +#line 1273 "ripper.y" + {if (!(yyvsp[-1].val)) {yyerror1(&(yylsp[0]), "else without rescue is useless");}} +#line 6137 "ripper.c" break; case 13: -#line 1258 "ripper.y" /* yacc.c:1646 */ - { +#line 1276 "ripper.y" + { #if 0 (yyval.val) = new_bodystmt(p, (yyvsp[-5].val), (yyvsp[-4].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5;v1=escape_Qundef((yyvsp[-5].val));v2=escape_Qundef((yyvsp[-4].val));v3=escape_Qundef((yyvsp[-1].val));v4=escape_Qundef((yyvsp[0].val));v5=dispatch4(bodystmt,v1,v2,v3,v4);(yyval.val)=v5;} } -#line 6016 "ripper.c" /* yacc.c:1646 */ +#line 6148 "ripper.c" break; case 14: -#line 1267 "ripper.y" /* yacc.c:1646 */ - { +#line 1285 "ripper.y" + { #if 0 (yyval.val) = new_bodystmt(p, (yyvsp[-2].val), (yyvsp[-1].val), 0, (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5;v1=escape_Qundef((yyvsp[-2].val));v2=escape_Qundef((yyvsp[-1].val));v3=Qnil;v4=escape_Qundef((yyvsp[0].val));v5=dispatch4(bodystmt,v1,v2,v3,v4);(yyval.val)=v5;} } -#line 6027 "ripper.c" /* yacc.c:1646 */ +#line 6159 "ripper.c" break; case 15: -#line 1276 "ripper.y" /* yacc.c:1646 */ - { +#line 1294 "ripper.y" + { (yyval.val) = void_stmts(p, (yyvsp[-1].val)); } -#line 6035 "ripper.c" /* yacc.c:1646 */ +#line 6167 "ripper.c" break; case 16: -#line 1282 "ripper.y" /* yacc.c:1646 */ - { +#line 1300 "ripper.y" + { #if 0 (yyval.val) = NEW_BEGIN(0, &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5;v1=dispatch0(stmts_new);v2=dispatch0(void_stmt);v3=v1;v4=v2;v5=dispatch2(stmts_add,v3,v4);(yyval.val)=v5;} } -#line 6046 "ripper.c" /* yacc.c:1646 */ +#line 6178 "ripper.c" break; case 17: -#line 1289 "ripper.y" /* yacc.c:1646 */ - { +#line 1307 "ripper.y" + { #if 0 (yyval.val) = newline_node((yyvsp[0].val)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(stmts_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(stmts_add,v2,v3);(yyval.val)=v4;} } -#line 6057 "ripper.c" /* yacc.c:1646 */ +#line 6189 "ripper.c" break; case 18: -#line 1296 "ripper.y" /* yacc.c:1646 */ - { +#line 1314 "ripper.y" + { #if 0 (yyval.val) = block_append(p, (yyvsp[-2].val), newline_node((yyvsp[0].val))); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(stmts_add,v1,v2);(yyval.val)=v3;} } -#line 6068 "ripper.c" /* yacc.c:1646 */ +#line 6200 "ripper.c" break; case 19: -#line 1303 "ripper.y" /* yacc.c:1646 */ - { +#line 1321 "ripper.y" + { (yyval.val) = remove_begin((yyvsp[0].val)); } -#line 6076 "ripper.c" /* yacc.c:1646 */ +#line 6208 "ripper.c" break; case 20: -#line 1309 "ripper.y" /* yacc.c:1646 */ - { +#line 1327 "ripper.y" + { (yyval.val) = (yyvsp[0].val); } -#line 6084 "ripper.c" /* yacc.c:1646 */ +#line 6216 "ripper.c" break; case 21: -#line 1313 "ripper.y" /* yacc.c:1646 */ - { +#line 1331 "ripper.y" + { yyerror1(&(yylsp[0]), "BEGIN is permitted only at toplevel"); } -#line 6092 "ripper.c" /* yacc.c:1646 */ +#line 6224 "ripper.c" break; case 22: -#line 1317 "ripper.y" /* yacc.c:1646 */ - { +#line 1335 "ripper.y" + { (yyval.val) = (yyvsp[0].val); } -#line 6100 "ripper.c" /* yacc.c:1646 */ +#line 6232 "ripper.c" break; case 23: -#line 1322 "ripper.y" /* yacc.c:1646 */ - {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} -#line 6106 "ripper.c" /* yacc.c:1646 */ +#line 1340 "ripper.y" + {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} +#line 6238 "ripper.c" break; case 24: -#line 1323 "ripper.y" /* yacc.c:1646 */ - { +#line 1341 "ripper.y" + { #if 0 (yyval.val) = NEW_ALIAS((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(alias,v1,v2);(yyval.val)=v3;} } -#line 6117 "ripper.c" /* yacc.c:1646 */ +#line 6249 "ripper.c" break; case 25: -#line 1330 "ripper.y" /* yacc.c:1646 */ - { +#line 1348 "ripper.y" + { #if 0 (yyval.val) = NEW_VALIAS((yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(var_alias,v1,v2);(yyval.val)=v3;} } -#line 6128 "ripper.c" /* yacc.c:1646 */ +#line 6260 "ripper.c" break; case 26: -#line 1337 "ripper.y" /* yacc.c:1646 */ - { +#line 1355 "ripper.y" + { #if 0 char buf[2]; buf[0] = '$'; @@ -6143,59 +6275,59 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(var_alias,v1,v2);(yyval.val)=v3;} } -#line 6142 "ripper.c" /* yacc.c:1646 */ +#line 6274 "ripper.c" break; case 27: -#line 1347 "ripper.y" /* yacc.c:1646 */ - { +#line 1365 "ripper.y" + { #if 0 yyerror1(&(yylsp[0]), "can't make alias for the number variables"); (yyval.val) = NEW_BEGIN(0, &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(var_alias,v1,v2);v4=v3;v5=dispatch1(alias_error,v4);(yyval.val)=v5;}ripper_error(p); } -#line 6154 "ripper.c" /* yacc.c:1646 */ +#line 6286 "ripper.c" break; case 28: -#line 1355 "ripper.y" /* yacc.c:1646 */ - { +#line 1373 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[0].val); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(undef,v1);(yyval.val)=v2;} } -#line 6165 "ripper.c" /* yacc.c:1646 */ +#line 6297 "ripper.c" break; case 29: -#line 1362 "ripper.y" /* yacc.c:1646 */ - { +#line 1380 "ripper.y" + { #if 0 (yyval.val) = new_if(p, (yyvsp[0].val), remove_begin((yyvsp[-2].val)), 0, &(yyloc)); fixpos((yyval.val), (yyvsp[0].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[0].val);v2=(yyvsp[-2].val);v3=dispatch2(if_mod,v1,v2);(yyval.val)=v3;} } -#line 6177 "ripper.c" /* yacc.c:1646 */ +#line 6309 "ripper.c" break; case 30: -#line 1370 "ripper.y" /* yacc.c:1646 */ - { +#line 1388 "ripper.y" + { #if 0 (yyval.val) = new_unless(p, (yyvsp[0].val), remove_begin((yyvsp[-2].val)), 0, &(yyloc)); fixpos((yyval.val), (yyvsp[0].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[0].val);v2=(yyvsp[-2].val);v3=dispatch2(unless_mod,v1,v2);(yyval.val)=v3;} } -#line 6189 "ripper.c" /* yacc.c:1646 */ +#line 6321 "ripper.c" break; case 31: -#line 1378 "ripper.y" /* yacc.c:1646 */ - { +#line 1396 "ripper.y" + { #if 0 if ((yyvsp[-2].val) && nd_type((yyvsp[-2].val)) == NODE_BEGIN) { (yyval.val) = NEW_WHILE(cond(p, (yyvsp[0].val), &(yylsp[0])), (yyvsp[-2].val)->nd_body, 0, &(yyloc)); @@ -6206,12 +6338,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[0].val);v2=(yyvsp[-2].val);v3=dispatch2(while_mod,v1,v2);(yyval.val)=v3;} } -#line 6205 "ripper.c" /* yacc.c:1646 */ +#line 6337 "ripper.c" break; case 32: -#line 1390 "ripper.y" /* yacc.c:1646 */ - { +#line 1408 "ripper.y" + { #if 0 if ((yyvsp[-2].val) && nd_type((yyvsp[-2].val)) == NODE_BEGIN) { (yyval.val) = NEW_UNTIL(cond(p, (yyvsp[0].val), &(yylsp[0])), (yyvsp[-2].val)->nd_body, 0, &(yyloc)); @@ -6222,12 +6354,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[0].val);v2=(yyvsp[-2].val);v3=dispatch2(until_mod,v1,v2);(yyval.val)=v3;} } -#line 6221 "ripper.c" /* yacc.c:1646 */ +#line 6353 "ripper.c" break; case 33: -#line 1402 "ripper.y" /* yacc.c:1646 */ - { +#line 1420 "ripper.y" + { #if 0 NODE *resq; YYLTYPE loc = code_loc_gen(&(yylsp[-1]), &(yylsp[0])); @@ -6236,12 +6368,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(rescue_mod,v1,v2);(yyval.val)=v3;} } -#line 6235 "ripper.c" /* yacc.c:1646 */ +#line 6367 "ripper.c" break; case 34: -#line 1412 "ripper.y" /* yacc.c:1646 */ - { +#line 1430 "ripper.y" + { if (p->in_def) { rb_warn0("END in method; use at_exit"); } @@ -6254,36 +6386,36 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(END,v1);(yyval.val)=v2;} } -#line 6253 "ripper.c" /* yacc.c:1646 */ +#line 6385 "ripper.c" break; case 36: -#line 1427 "ripper.y" /* yacc.c:1646 */ - { +#line 1445 "ripper.y" + { #if 0 value_expr((yyvsp[0].val)); (yyval.val) = node_assign(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(massign,v1,v2);(yyval.val)=v3;} } -#line 6265 "ripper.c" /* yacc.c:1646 */ +#line 6397 "ripper.c" break; case 37: -#line 1435 "ripper.y" /* yacc.c:1646 */ - { +#line 1453 "ripper.y" + { #if 0 value_expr((yyvsp[0].val)); (yyval.val) = node_assign(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(assign,v1,v2);(yyval.val)=v3;} } -#line 6277 "ripper.c" /* yacc.c:1646 */ +#line 6409 "ripper.c" break; case 38: -#line 1443 "ripper.y" /* yacc.c:1646 */ - { +#line 1461 "ripper.y" + { #if 0 YYLTYPE loc = code_loc_gen(&(yylsp[-1]), &(yylsp[0])); value_expr((yyvsp[-2].val)); @@ -6291,123 +6423,129 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(rescue_mod,v1,v2);v4=(yyvsp[-4].val);v5=v3;v6=dispatch2(massign,v4,v5);(yyval.val)=v6;} } -#line 6290 "ripper.c" /* yacc.c:1646 */ +#line 6422 "ripper.c" break; case 39: -#line 1452 "ripper.y" /* yacc.c:1646 */ - { +#line 1470 "ripper.y" + { #if 0 (yyval.val) = node_assign(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(massign,v1,v2);(yyval.val)=v3;} } -#line 6301 "ripper.c" /* yacc.c:1646 */ +#line 6433 "ripper.c" break; case 41: -#line 1462 "ripper.y" /* yacc.c:1646 */ - { +#line 1480 "ripper.y" + { #if 0 + value_expr((yyvsp[0].val)); (yyval.val) = node_assign(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(assign,v1,v2);(yyval.val)=v3;} } -#line 6312 "ripper.c" /* yacc.c:1646 */ +#line 6445 "ripper.c" break; case 42: -#line 1469 "ripper.y" /* yacc.c:1646 */ - { +#line 1488 "ripper.y" + { #if 0 + value_expr((yyvsp[0].val)); (yyval.val) = new_op_assign(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(opassign,v1,v2,v3);(yyval.val)=v4;} } -#line 6323 "ripper.c" /* yacc.c:1646 */ +#line 6457 "ripper.c" break; case 43: -#line 1476 "ripper.y" /* yacc.c:1646 */ - { +#line 1496 "ripper.y" + { #if 0 + value_expr((yyvsp[0].val)); (yyval.val) = new_ary_op_assign(p, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-3]), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-5].val);v2=escape_Qundef((yyvsp[-3].val));v3=dispatch2(aref_field,v1,v2);v4=v3;v5=(yyvsp[-1].val);v6=(yyvsp[0].val);v7=dispatch3(opassign,v4,v5,v6);(yyval.val)=v7;} } -#line 6335 "ripper.c" /* yacc.c:1646 */ +#line 6470 "ripper.c" break; case 44: -#line 1484 "ripper.y" /* yacc.c:1646 */ - { +#line 1505 "ripper.y" + { #if 0 + value_expr((yyvsp[0].val)); (yyval.val) = new_attr_op_assign(p, (yyvsp[-4].val), (yyvsp[-3].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=dispatch3(field,v1,v2,v3);v5=v4;v6=(yyvsp[-1].val);v7=(yyvsp[0].val);v8=dispatch3(opassign,v5,v6,v7);(yyval.val)=v8;} } -#line 6346 "ripper.c" /* yacc.c:1646 */ +#line 6482 "ripper.c" break; case 45: -#line 1491 "ripper.y" /* yacc.c:1646 */ - { +#line 1513 "ripper.y" + { #if 0 + value_expr((yyvsp[0].val)); (yyval.val) = new_attr_op_assign(p, (yyvsp[-4].val), (yyvsp[-3].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=dispatch3(field,v1,v2,v3);v5=v4;v6=(yyvsp[-1].val);v7=(yyvsp[0].val);v8=dispatch3(opassign,v5,v6,v7);(yyval.val)=v8;} } -#line 6357 "ripper.c" /* yacc.c:1646 */ +#line 6494 "ripper.c" break; case 46: -#line 1498 "ripper.y" /* yacc.c:1646 */ - { +#line 1521 "ripper.y" + { #if 0 YYLTYPE loc = code_loc_gen(&(yylsp[-4]), &(yylsp[-2])); (yyval.val) = new_const_op_assign(p, NEW_COLON2((yyvsp[-4].val), (yyvsp[-2].val), &loc), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=dispatch2(const_path_field,v1,v2);v4=v3;v5=(yyvsp[-1].val);v6=(yyvsp[0].val);v7=dispatch3(opassign,v4,v5,v6);(yyval.val)=v7;} } -#line 6369 "ripper.c" /* yacc.c:1646 */ +#line 6506 "ripper.c" break; case 47: -#line 1506 "ripper.y" /* yacc.c:1646 */ - { +#line 1529 "ripper.y" + { #if 0 + value_expr((yyvsp[0].val)); (yyval.val) = new_attr_op_assign(p, (yyvsp[-4].val), ID2VAL(idCOLON2), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[-2].val);v4=dispatch3(field,v1,v2,v3);v5=v4;v6=(yyvsp[-1].val);v7=(yyvsp[0].val);v8=dispatch3(opassign,v5,v6,v7);(yyval.val)=v8;} } -#line 6380 "ripper.c" /* yacc.c:1646 */ +#line 6518 "ripper.c" break; case 48: -#line 1513 "ripper.y" /* yacc.c:1646 */ - { +#line 1537 "ripper.y" + { #if 0 rb_backref_error(p, (yyvsp[-2].val)); (yyval.val) = NEW_BEGIN(0, &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5;v1=var_field(p, (yyvsp[-2].val));v2=(yyvsp[0].val);v3=dispatch2(assign,v1,v2);v4=v3;v5=dispatch1(assign_error,v4);(yyval.val)=v5;}ripper_error(p); } -#line 6392 "ripper.c" /* yacc.c:1646 */ +#line 6530 "ripper.c" break; case 49: -#line 1523 "ripper.y" /* yacc.c:1646 */ - { +#line 1547 "ripper.y" + { value_expr((yyvsp[0].val)); (yyval.val) = (yyvsp[0].val); } -#line 6401 "ripper.c" /* yacc.c:1646 */ +#line 6539 "ripper.c" break; case 50: -#line 1528 "ripper.y" /* yacc.c:1646 */ - { +#line 1552 "ripper.y" + { #if 0 YYLTYPE loc = code_loc_gen(&(yylsp[-1]), &(yylsp[0])); value_expr((yyvsp[-2].val)); @@ -6415,144 +6553,144 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(rescue_mod,v1,v2);(yyval.val)=v3;} } -#line 6414 "ripper.c" /* yacc.c:1646 */ +#line 6552 "ripper.c" break; case 53: -#line 1541 "ripper.y" /* yacc.c:1646 */ - { +#line 1565 "ripper.y" + { (yyval.val) = logop(p, idAND, (yyvsp[-2].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 6422 "ripper.c" /* yacc.c:1646 */ +#line 6560 "ripper.c" break; case 54: -#line 1545 "ripper.y" /* yacc.c:1646 */ - { +#line 1569 "ripper.y" + { (yyval.val) = logop(p, idOR, (yyvsp[-2].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 6430 "ripper.c" /* yacc.c:1646 */ +#line 6568 "ripper.c" break; case 55: -#line 1549 "ripper.y" /* yacc.c:1646 */ - { +#line 1573 "ripper.y" + { (yyval.val) = call_uni_op(p, method_cond(p, (yyvsp[0].val), &(yylsp[0])), METHOD_NOT, &(yylsp[-2]), &(yyloc)); } -#line 6438 "ripper.c" /* yacc.c:1646 */ +#line 6576 "ripper.c" break; case 56: -#line 1553 "ripper.y" /* yacc.c:1646 */ - { +#line 1577 "ripper.y" + { (yyval.val) = call_uni_op(p, method_cond(p, (yyvsp[0].val), &(yylsp[0])), '!', &(yylsp[-1]), &(yyloc)); } -#line 6446 "ripper.c" /* yacc.c:1646 */ +#line 6584 "ripper.c" break; case 57: -#line 1557 "ripper.y" /* yacc.c:1646 */ - { +#line 1581 "ripper.y" + { value_expr((yyvsp[-1].val)); SET_LEX_STATE(EXPR_BEG|EXPR_LABEL); p->command_start = FALSE; (yyval.num) = p->in_kwarg; p->in_kwarg = 1; } -#line 6458 "ripper.c" /* yacc.c:1646 */ +#line 6596 "ripper.c" break; case 58: -#line 1564 "ripper.y" /* yacc.c:1646 */ - {(yyval.tbl) = push_pvtbl(p);} -#line 6464 "ripper.c" /* yacc.c:1646 */ +#line 1588 "ripper.y" + {(yyval.tbl) = push_pvtbl(p);} +#line 6602 "ripper.c" break; case 59: -#line 1566 "ripper.y" /* yacc.c:1646 */ - {pop_pvtbl(p, (yyvsp[-1].tbl));} -#line 6470 "ripper.c" /* yacc.c:1646 */ +#line 1590 "ripper.y" + {pop_pvtbl(p, (yyvsp[-1].tbl));} +#line 6608 "ripper.c" break; case 60: -#line 1567 "ripper.y" /* yacc.c:1646 */ - { +#line 1591 "ripper.y" + { p->in_kwarg = !!(yyvsp[-3].num); #if 0 (yyval.val) = new_case3(p, (yyvsp[-5].val), NEW_IN((yyvsp[-1].val), 0, 0, &(yylsp[-1])), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-1].val);v2=Qnil;v3=Qnil;v4=dispatch3(in,v1,v2,v3);v5=(yyvsp[-5].val);v6=v4;v7=dispatch2(case,v5,v6);(yyval.val)=v7;} } -#line 6482 "ripper.c" /* yacc.c:1646 */ +#line 6620 "ripper.c" break; case 62: -#line 1578 "ripper.y" /* yacc.c:1646 */ - { +#line 1602 "ripper.y" + { value_expr((yyvsp[0].val)); (yyval.val) = (yyvsp[0].val); } -#line 6491 "ripper.c" /* yacc.c:1646 */ +#line 6629 "ripper.c" break; case 63: -#line 1584 "ripper.y" /* yacc.c:1646 */ - {COND_PUSH(1);} -#line 6497 "ripper.c" /* yacc.c:1646 */ +#line 1608 "ripper.y" + {COND_PUSH(1);} +#line 6635 "ripper.c" break; case 64: -#line 1584 "ripper.y" /* yacc.c:1646 */ - {COND_POP();} -#line 6503 "ripper.c" /* yacc.c:1646 */ +#line 1608 "ripper.y" + {COND_POP();} +#line 6641 "ripper.c" break; case 65: -#line 1585 "ripper.y" /* yacc.c:1646 */ - { +#line 1609 "ripper.y" + { (yyval.val) = (yyvsp[-2].val); } -#line 6511 "ripper.c" /* yacc.c:1646 */ +#line 6649 "ripper.c" break; case 69: -#line 1596 "ripper.y" /* yacc.c:1646 */ - { +#line 1620 "ripper.y" + { #if 0 (yyval.val) = new_qcall(p, (yyvsp[-2].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-3].val);v2=(yyvsp[-2].val);v3=(yyvsp[-1].val);v4=dispatch3(call,v1,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(method_add_arg,v5,v6);(yyval.val)=v7;} } -#line 6522 "ripper.c" /* yacc.c:1646 */ +#line 6660 "ripper.c" break; case 70: -#line 1605 "ripper.y" /* yacc.c:1646 */ - { +#line 1629 "ripper.y" + { (yyval.val) = (yyvsp[-1].val); #if 0 (yyval.val)->nd_body->nd_loc = code_loc_gen(&(yylsp[-2]), &(yylsp[0])); nd_set_line((yyval.val), (yylsp[-2]).end_pos.lineno); #endif } -#line 6534 "ripper.c" /* yacc.c:1646 */ +#line 6672 "ripper.c" break; case 71: -#line 1615 "ripper.y" /* yacc.c:1646 */ - { +#line 1639 "ripper.y" + { #if 0 (yyval.val) = NEW_FCALL((yyvsp[0].val), 0, &(yyloc)); nd_set_line((yyval.val), p->tokline); #endif (yyval.val)=(yyvsp[0].val); } -#line 6546 "ripper.c" /* yacc.c:1646 */ +#line 6684 "ripper.c" break; case 72: -#line 1625 "ripper.y" /* yacc.c:1646 */ - { +#line 1649 "ripper.y" + { #if 0 (yyvsp[-1].val)->nd_args = (yyvsp[0].val); nd_set_last_loc((yyvsp[-1].val), (yylsp[0]).end_pos); @@ -6560,12 +6698,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(command,v1,v2);(yyval.val)=v3;} } -#line 6559 "ripper.c" /* yacc.c:1646 */ +#line 6697 "ripper.c" break; case 73: -#line 1634 "ripper.y" /* yacc.c:1646 */ - { +#line 1658 "ripper.y" + { #if 0 block_dup_check(p, (yyvsp[-1].val), (yyvsp[0].val)); (yyvsp[-2].val)->nd_args = (yyvsp[-1].val); @@ -6575,333 +6713,333 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(command,v1,v2);v4=v3;v5=(yyvsp[0].val);v6=dispatch2(method_add_block,v4,v5);(yyval.val)=v6;} } -#line 6574 "ripper.c" /* yacc.c:1646 */ +#line 6712 "ripper.c" break; case 74: -#line 1645 "ripper.y" /* yacc.c:1646 */ - { +#line 1669 "ripper.y" + { #if 0 (yyval.val) = new_command_qcall(p, (yyvsp[-2].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), Qnull, &(yylsp[-1]), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-3].val);v2=(yyvsp[-2].val);v3=(yyvsp[-1].val);v4=(yyvsp[0].val);v5=dispatch4(command_call,v1,v2,v3,v4);(yyval.val)=v5;} } -#line 6585 "ripper.c" /* yacc.c:1646 */ +#line 6723 "ripper.c" break; case 75: -#line 1652 "ripper.y" /* yacc.c:1646 */ - { +#line 1676 "ripper.y" + { #if 0 (yyval.val) = new_command_qcall(p, (yyvsp[-3].val), (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-2]), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=(yyvsp[-1].val);v5=dispatch4(command_call,v1,v2,v3,v4);v6=v5;v7=(yyvsp[0].val);v8=dispatch2(method_add_block,v6,v7);(yyval.val)=v8;} } -#line 6596 "ripper.c" /* yacc.c:1646 */ +#line 6734 "ripper.c" break; case 76: -#line 1659 "ripper.y" /* yacc.c:1646 */ - { +#line 1683 "ripper.y" + { #if 0 (yyval.val) = new_command_qcall(p, ID2VAL(idCOLON2), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), Qnull, &(yylsp[-1]), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-3].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[-1].val);v4=(yyvsp[0].val);v5=dispatch4(command_call,v1,v2,v3,v4);(yyval.val)=v5;} } -#line 6607 "ripper.c" /* yacc.c:1646 */ +#line 6745 "ripper.c" break; case 77: -#line 1666 "ripper.y" /* yacc.c:1646 */ - { +#line 1690 "ripper.y" + { #if 0 (yyval.val) = new_command_qcall(p, ID2VAL(idCOLON2), (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-2]), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[-2].val);v4=(yyvsp[-1].val);v5=dispatch4(command_call,v1,v2,v3,v4);v6=v5;v7=(yyvsp[0].val);v8=dispatch2(method_add_block,v6,v7);(yyval.val)=v8;} } -#line 6618 "ripper.c" /* yacc.c:1646 */ +#line 6756 "ripper.c" break; case 78: -#line 1673 "ripper.y" /* yacc.c:1646 */ - { +#line 1697 "ripper.y" + { #if 0 (yyval.val) = NEW_SUPER((yyvsp[0].val), &(yyloc)); fixpos((yyval.val), (yyvsp[0].val)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(super,v1);(yyval.val)=v2;} } -#line 6630 "ripper.c" /* yacc.c:1646 */ +#line 6768 "ripper.c" break; case 79: -#line 1681 "ripper.y" /* yacc.c:1646 */ - { +#line 1705 "ripper.y" + { #if 0 (yyval.val) = new_yield(p, (yyvsp[0].val), &(yyloc)); fixpos((yyval.val), (yyvsp[0].val)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(yield,v1);(yyval.val)=v2;} } -#line 6642 "ripper.c" /* yacc.c:1646 */ +#line 6780 "ripper.c" break; case 80: -#line 1689 "ripper.y" /* yacc.c:1646 */ - { +#line 1713 "ripper.y" + { #if 0 (yyval.val) = NEW_RETURN(ret_args(p, (yyvsp[0].val)), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(return,v1);(yyval.val)=v2;} } -#line 6653 "ripper.c" /* yacc.c:1646 */ +#line 6791 "ripper.c" break; case 81: -#line 1696 "ripper.y" /* yacc.c:1646 */ - { +#line 1720 "ripper.y" + { #if 0 (yyval.val) = NEW_BREAK(ret_args(p, (yyvsp[0].val)), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(break,v1);(yyval.val)=v2;} } -#line 6664 "ripper.c" /* yacc.c:1646 */ +#line 6802 "ripper.c" break; case 82: -#line 1703 "ripper.y" /* yacc.c:1646 */ - { +#line 1727 "ripper.y" + { #if 0 (yyval.val) = NEW_NEXT(ret_args(p, (yyvsp[0].val)), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(next,v1);(yyval.val)=v2;} } -#line 6675 "ripper.c" /* yacc.c:1646 */ +#line 6813 "ripper.c" break; case 84: -#line 1713 "ripper.y" /* yacc.c:1646 */ - { +#line 1737 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val); #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(mlhs_paren,v1);(yyval.val)=v2;} } -#line 6686 "ripper.c" /* yacc.c:1646 */ +#line 6824 "ripper.c" break; case 86: -#line 1723 "ripper.y" /* yacc.c:1646 */ - { +#line 1747 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN(NEW_LIST((yyvsp[-1].val), &(yyloc)), 0, &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(mlhs_paren,v1);(yyval.val)=v2;} } -#line 6697 "ripper.c" /* yacc.c:1646 */ +#line 6835 "ripper.c" break; case 87: -#line 1732 "ripper.y" /* yacc.c:1646 */ - { +#line 1756 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN((yyvsp[0].val), 0, &(yyloc)); #endif (yyval.val)=(yyvsp[0].val); } -#line 6708 "ripper.c" /* yacc.c:1646 */ +#line 6846 "ripper.c" break; case 88: -#line 1739 "ripper.y" /* yacc.c:1646 */ - { +#line 1763 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN(list_append(p, (yyvsp[-1].val),(yyvsp[0].val)), 0, &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(mlhs_add,v1,v2);(yyval.val)=v3;} } -#line 6719 "ripper.c" /* yacc.c:1646 */ +#line 6857 "ripper.c" break; case 89: -#line 1746 "ripper.y" /* yacc.c:1646 */ - { +#line 1770 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(mlhs_add_star,v1,v2);(yyval.val)=v3;} } -#line 6730 "ripper.c" /* yacc.c:1646 */ +#line 6868 "ripper.c" break; case 90: -#line 1753 "ripper.y" /* yacc.c:1646 */ - { +#line 1777 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN((yyvsp[-4].val), NEW_POSTARG((yyvsp[-2].val),(yyvsp[0].val),&(yyloc)), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=dispatch2(mlhs_add_star,v1,v2);v4=v3;v5=(yyvsp[0].val);v6=dispatch2(mlhs_add_post,v4,v5);(yyval.val)=v6;} } -#line 6741 "ripper.c" /* yacc.c:1646 */ +#line 6879 "ripper.c" break; case 91: -#line 1760 "ripper.y" /* yacc.c:1646 */ - { +#line 1784 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN((yyvsp[-1].val), NODE_SPECIAL_NO_NAME_REST, &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=Qnil;v3=dispatch2(mlhs_add_star,v1,v2);(yyval.val)=v3;} } -#line 6752 "ripper.c" /* yacc.c:1646 */ +#line 6890 "ripper.c" break; case 92: -#line 1767 "ripper.y" /* yacc.c:1646 */ - { +#line 1791 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN((yyvsp[-3].val), NEW_POSTARG(NODE_SPECIAL_NO_NAME_REST, (yyvsp[0].val), &(yyloc)), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-3].val);v2=Qnil;v3=dispatch2(mlhs_add_star,v1,v2);v4=v3;v5=(yyvsp[0].val);v6=dispatch2(mlhs_add_post,v4,v5);(yyval.val)=v6;} } -#line 6763 "ripper.c" /* yacc.c:1646 */ +#line 6901 "ripper.c" break; case 93: -#line 1774 "ripper.y" /* yacc.c:1646 */ - { +#line 1798 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN(0, (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(mlhs_add_star,v2,v3);(yyval.val)=v4;} } -#line 6774 "ripper.c" /* yacc.c:1646 */ +#line 6912 "ripper.c" break; case 94: -#line 1781 "ripper.y" /* yacc.c:1646 */ - { +#line 1805 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyvsp[-2].val),(yyvsp[0].val),&(yyloc)), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[-2].val);v4=dispatch2(mlhs_add_star,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(mlhs_add_post,v5,v6);(yyval.val)=v7;} } -#line 6785 "ripper.c" /* yacc.c:1646 */ +#line 6923 "ripper.c" break; case 95: -#line 1788 "ripper.y" /* yacc.c:1646 */ - { +#line 1812 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN(0, NODE_SPECIAL_NO_NAME_REST, &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(mlhs_new);v2=v1;v3=Qnil;v4=dispatch2(mlhs_add_star,v2,v3);(yyval.val)=v4;} } -#line 6796 "ripper.c" /* yacc.c:1646 */ +#line 6934 "ripper.c" break; case 96: -#line 1795 "ripper.y" /* yacc.c:1646 */ - { +#line 1819 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN(0, NEW_POSTARG(NODE_SPECIAL_NO_NAME_REST, (yyvsp[0].val), &(yyloc)), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=dispatch0(mlhs_new);v2=v1;v3=Qnil;v4=dispatch2(mlhs_add_star,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(mlhs_add_post,v5,v6);(yyval.val)=v7;} } -#line 6807 "ripper.c" /* yacc.c:1646 */ +#line 6945 "ripper.c" break; case 98: -#line 1805 "ripper.y" /* yacc.c:1646 */ - { +#line 1829 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val); #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(mlhs_paren,v1);(yyval.val)=v2;} } -#line 6818 "ripper.c" /* yacc.c:1646 */ +#line 6956 "ripper.c" break; case 99: -#line 1814 "ripper.y" /* yacc.c:1646 */ - { +#line 1838 "ripper.y" + { #if 0 (yyval.val) = NEW_LIST((yyvsp[-1].val), &(yylsp[-1])); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[-1].val);v4=dispatch2(mlhs_add,v2,v3);(yyval.val)=v4;} } -#line 6829 "ripper.c" /* yacc.c:1646 */ +#line 6967 "ripper.c" break; case 100: -#line 1821 "ripper.y" /* yacc.c:1646 */ - { +#line 1845 "ripper.y" + { #if 0 (yyval.val) = list_append(p, (yyvsp[-2].val), (yyvsp[-1].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(mlhs_add,v1,v2);(yyval.val)=v3;} } -#line 6840 "ripper.c" /* yacc.c:1646 */ +#line 6978 "ripper.c" break; case 101: -#line 1830 "ripper.y" /* yacc.c:1646 */ - { +#line 1854 "ripper.y" + { #if 0 (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(mlhs_add,v2,v3);(yyval.val)=v4;} } -#line 6851 "ripper.c" /* yacc.c:1646 */ +#line 6989 "ripper.c" break; case 102: -#line 1837 "ripper.y" /* yacc.c:1646 */ - { +#line 1861 "ripper.y" + { #if 0 (yyval.val) = list_append(p, (yyvsp[-2].val), (yyvsp[0].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(mlhs_add,v1,v2);(yyval.val)=v3;} } -#line 6862 "ripper.c" /* yacc.c:1646 */ +#line 7000 "ripper.c" break; case 103: -#line 1846 "ripper.y" /* yacc.c:1646 */ - { +#line 1870 "ripper.y" + { #if 0 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc)); #endif (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val))); } -#line 6873 "ripper.c" /* yacc.c:1646 */ +#line 7011 "ripper.c" break; case 104: -#line 1853 "ripper.y" /* yacc.c:1646 */ - { +#line 1877 "ripper.y" + { #if 0 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc)); #endif (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val))); } -#line 6884 "ripper.c" /* yacc.c:1646 */ +#line 7022 "ripper.c" break; case 105: -#line 1860 "ripper.y" /* yacc.c:1646 */ - { +#line 1884 "ripper.y" + { #if 0 (yyval.val) = aryset(p, (yyvsp[-3].val), (yyvsp[-1].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=escape_Qundef((yyvsp[-1].val));v3=dispatch2(aref_field,v1,v2);(yyval.val)=v3;} } -#line 6895 "ripper.c" /* yacc.c:1646 */ +#line 7033 "ripper.c" break; case 106: -#line 1867 "ripper.y" /* yacc.c:1646 */ - { +#line 1891 "ripper.y" + { if ((yyvsp[-1].val) == tANDDOT) { yyerror1(&(yylsp[-1]), "&. inside multiple assignment destination"); } @@ -6910,23 +7048,23 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(field,v1,v2,v3);(yyval.val)=v4;} } -#line 6909 "ripper.c" /* yacc.c:1646 */ +#line 7047 "ripper.c" break; case 107: -#line 1877 "ripper.y" /* yacc.c:1646 */ - { +#line 1901 "ripper.y" + { #if 0 (yyval.val) = attrset(p, (yyvsp[-2].val), idCOLON2, (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(const_path_field,v1,v2);(yyval.val)=v3;} } -#line 6920 "ripper.c" /* yacc.c:1646 */ +#line 7058 "ripper.c" break; case 108: -#line 1884 "ripper.y" /* yacc.c:1646 */ - { +#line 1908 "ripper.y" + { if ((yyvsp[-1].val) == tANDDOT) { yyerror1(&(yylsp[-1]), "&. inside multiple assignment destination"); } @@ -6935,533 +7073,533 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(field,v1,v2,v3);(yyval.val)=v4;} } -#line 6934 "ripper.c" /* yacc.c:1646 */ +#line 7072 "ripper.c" break; case 109: -#line 1894 "ripper.y" /* yacc.c:1646 */ - { +#line 1918 "ripper.y" + { #if 0 (yyval.val) = const_decl(p, NEW_COLON2((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(const_path_field,v1,v2);(yyval.val)=const_decl(p, v3);} } -#line 6945 "ripper.c" /* yacc.c:1646 */ +#line 7083 "ripper.c" break; case 110: -#line 1901 "ripper.y" /* yacc.c:1646 */ - { +#line 1925 "ripper.y" + { #if 0 (yyval.val) = const_decl(p, NEW_COLON3((yyvsp[0].val), &(yyloc)), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(top_const_field,v1);(yyval.val)=const_decl(p, v2);} } -#line 6956 "ripper.c" /* yacc.c:1646 */ +#line 7094 "ripper.c" break; case 111: -#line 1908 "ripper.y" /* yacc.c:1646 */ - { +#line 1932 "ripper.y" + { #if 0 rb_backref_error(p, (yyvsp[0].val)); (yyval.val) = NEW_BEGIN(0, &(yyloc)); #endif {VALUE v1,v2;v1=var_field(p, (yyvsp[0].val));v2=dispatch1(assign_error,v1);(yyval.val)=v2;}ripper_error(p); } -#line 6968 "ripper.c" /* yacc.c:1646 */ +#line 7106 "ripper.c" break; case 112: -#line 1918 "ripper.y" /* yacc.c:1646 */ - { +#line 1942 "ripper.y" + { #if 0 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc)); #endif (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val))); } -#line 6979 "ripper.c" /* yacc.c:1646 */ +#line 7117 "ripper.c" break; case 113: -#line 1925 "ripper.y" /* yacc.c:1646 */ - { +#line 1949 "ripper.y" + { #if 0 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc)); #endif (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val))); } -#line 6990 "ripper.c" /* yacc.c:1646 */ +#line 7128 "ripper.c" break; case 114: -#line 1932 "ripper.y" /* yacc.c:1646 */ - { +#line 1956 "ripper.y" + { #if 0 (yyval.val) = aryset(p, (yyvsp[-3].val), (yyvsp[-1].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=escape_Qundef((yyvsp[-1].val));v3=dispatch2(aref_field,v1,v2);(yyval.val)=v3;} } -#line 7001 "ripper.c" /* yacc.c:1646 */ +#line 7139 "ripper.c" break; case 115: -#line 1939 "ripper.y" /* yacc.c:1646 */ - { +#line 1963 "ripper.y" + { #if 0 (yyval.val) = attrset(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(field,v1,v2,v3);(yyval.val)=v4;} } -#line 7012 "ripper.c" /* yacc.c:1646 */ +#line 7150 "ripper.c" break; case 116: -#line 1946 "ripper.y" /* yacc.c:1646 */ - { +#line 1970 "ripper.y" + { #if 0 (yyval.val) = attrset(p, (yyvsp[-2].val), idCOLON2, (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[0].val);v4=dispatch3(field,v1,v2,v3);(yyval.val)=v4;} } -#line 7023 "ripper.c" /* yacc.c:1646 */ +#line 7161 "ripper.c" break; case 117: -#line 1953 "ripper.y" /* yacc.c:1646 */ - { +#line 1977 "ripper.y" + { #if 0 (yyval.val) = attrset(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(field,v1,v2,v3);(yyval.val)=v4;} } -#line 7034 "ripper.c" /* yacc.c:1646 */ +#line 7172 "ripper.c" break; case 118: -#line 1960 "ripper.y" /* yacc.c:1646 */ - { +#line 1984 "ripper.y" + { #if 0 (yyval.val) = const_decl(p, NEW_COLON2((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(const_path_field,v1,v2);(yyval.val)=const_decl(p, v3);} } -#line 7045 "ripper.c" /* yacc.c:1646 */ +#line 7183 "ripper.c" break; case 119: -#line 1967 "ripper.y" /* yacc.c:1646 */ - { +#line 1991 "ripper.y" + { #if 0 (yyval.val) = const_decl(p, NEW_COLON3((yyvsp[0].val), &(yyloc)), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(top_const_field,v1);(yyval.val)=const_decl(p, v2);} } -#line 7056 "ripper.c" /* yacc.c:1646 */ +#line 7194 "ripper.c" break; case 120: -#line 1974 "ripper.y" /* yacc.c:1646 */ - { +#line 1998 "ripper.y" + { #if 0 rb_backref_error(p, (yyvsp[0].val)); (yyval.val) = NEW_BEGIN(0, &(yyloc)); #endif {VALUE v1,v2;v1=var_field(p, (yyvsp[0].val));v2=dispatch1(assign_error,v1);(yyval.val)=v2;}ripper_error(p); } -#line 7068 "ripper.c" /* yacc.c:1646 */ +#line 7206 "ripper.c" break; case 121: -#line 1984 "ripper.y" /* yacc.c:1646 */ - { +#line 2008 "ripper.y" + { #if 0 yyerror1(&(yylsp[0]), "class/module name must be CONSTANT"); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(class_name_error,v1);(yyval.val)=v2;}ripper_error(p); } -#line 7079 "ripper.c" /* yacc.c:1646 */ +#line 7217 "ripper.c" break; case 123: -#line 1994 "ripper.y" /* yacc.c:1646 */ - { +#line 2018 "ripper.y" + { #if 0 (yyval.val) = NEW_COLON3((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(top_const_ref,v1);(yyval.val)=v2;} } -#line 7090 "ripper.c" /* yacc.c:1646 */ +#line 7228 "ripper.c" break; case 124: -#line 2001 "ripper.y" /* yacc.c:1646 */ - { +#line 2025 "ripper.y" + { #if 0 (yyval.val) = NEW_COLON2(0, (yyval.val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(const_ref,v1);(yyval.val)=v2;} } -#line 7101 "ripper.c" /* yacc.c:1646 */ +#line 7239 "ripper.c" break; case 125: -#line 2008 "ripper.y" /* yacc.c:1646 */ - { +#line 2032 "ripper.y" + { #if 0 (yyval.val) = NEW_COLON2((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(const_path_ref,v1,v2);(yyval.val)=v3;} } -#line 7112 "ripper.c" /* yacc.c:1646 */ +#line 7250 "ripper.c" break; case 129: -#line 2020 "ripper.y" /* yacc.c:1646 */ - { +#line 2044 "ripper.y" + { SET_LEX_STATE(EXPR_ENDFN); (yyval.val) = (yyvsp[0].val); } -#line 7121 "ripper.c" /* yacc.c:1646 */ +#line 7259 "ripper.c" break; case 130: -#line 2025 "ripper.y" /* yacc.c:1646 */ - { +#line 2049 "ripper.y" + { SET_LEX_STATE(EXPR_ENDFN); (yyval.val) = (yyvsp[0].val); } -#line 7130 "ripper.c" /* yacc.c:1646 */ +#line 7268 "ripper.c" break; case 131: -#line 2032 "ripper.y" /* yacc.c:1646 */ - { +#line 2056 "ripper.y" + { #if 0 (yyval.val) = NEW_LIT(ID2SYM((yyvsp[0].val)), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(symbol_literal,v1);(yyval.val)=v2;} } -#line 7141 "ripper.c" /* yacc.c:1646 */ +#line 7279 "ripper.c" break; case 133: -#line 2042 "ripper.y" /* yacc.c:1646 */ - { +#line 2066 "ripper.y" + { #if 0 (yyval.val) = NEW_UNDEF((yyvsp[0].val), &(yyloc)); #endif (yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val))); } -#line 7152 "ripper.c" /* yacc.c:1646 */ +#line 7290 "ripper.c" break; case 134: -#line 2048 "ripper.y" /* yacc.c:1646 */ - {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} -#line 7158 "ripper.c" /* yacc.c:1646 */ +#line 2072 "ripper.y" + {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} +#line 7296 "ripper.c" break; case 135: -#line 2049 "ripper.y" /* yacc.c:1646 */ - { +#line 2073 "ripper.y" + { #if 0 NODE *undef = NEW_UNDEF((yyvsp[0].val), &(yylsp[0])); (yyval.val) = block_append(p, (yyvsp[-3].val), undef); #endif (yyval.val)=rb_ary_push((yyvsp[-3].val), get_value((yyvsp[0].val))); } -#line 7170 "ripper.c" /* yacc.c:1646 */ +#line 7308 "ripper.c" break; case 136: -#line 2058 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '|'); } -#line 7176 "ripper.c" /* yacc.c:1646 */ +#line 2082 "ripper.y" + { ifndef_ripper((yyval.val) = '|'); } +#line 7314 "ripper.c" break; case 137: -#line 2059 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '^'); } -#line 7182 "ripper.c" /* yacc.c:1646 */ +#line 2083 "ripper.y" + { ifndef_ripper((yyval.val) = '^'); } +#line 7320 "ripper.c" break; case 138: -#line 2060 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '&'); } -#line 7188 "ripper.c" /* yacc.c:1646 */ +#line 2084 "ripper.y" + { ifndef_ripper((yyval.val) = '&'); } +#line 7326 "ripper.c" break; case 139: -#line 2061 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tCMP); } -#line 7194 "ripper.c" /* yacc.c:1646 */ +#line 2085 "ripper.y" + { ifndef_ripper((yyval.val) = tCMP); } +#line 7332 "ripper.c" break; case 140: -#line 2062 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tEQ); } -#line 7200 "ripper.c" /* yacc.c:1646 */ +#line 2086 "ripper.y" + { ifndef_ripper((yyval.val) = tEQ); } +#line 7338 "ripper.c" break; case 141: -#line 2063 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tEQQ); } -#line 7206 "ripper.c" /* yacc.c:1646 */ +#line 2087 "ripper.y" + { ifndef_ripper((yyval.val) = tEQQ); } +#line 7344 "ripper.c" break; case 142: -#line 2064 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tMATCH); } -#line 7212 "ripper.c" /* yacc.c:1646 */ +#line 2088 "ripper.y" + { ifndef_ripper((yyval.val) = tMATCH); } +#line 7350 "ripper.c" break; case 143: -#line 2065 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tNMATCH); } -#line 7218 "ripper.c" /* yacc.c:1646 */ +#line 2089 "ripper.y" + { ifndef_ripper((yyval.val) = tNMATCH); } +#line 7356 "ripper.c" break; case 144: -#line 2066 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '>'); } -#line 7224 "ripper.c" /* yacc.c:1646 */ +#line 2090 "ripper.y" + { ifndef_ripper((yyval.val) = '>'); } +#line 7362 "ripper.c" break; case 145: -#line 2067 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tGEQ); } -#line 7230 "ripper.c" /* yacc.c:1646 */ +#line 2091 "ripper.y" + { ifndef_ripper((yyval.val) = tGEQ); } +#line 7368 "ripper.c" break; case 146: -#line 2068 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '<'); } -#line 7236 "ripper.c" /* yacc.c:1646 */ +#line 2092 "ripper.y" + { ifndef_ripper((yyval.val) = '<'); } +#line 7374 "ripper.c" break; case 147: -#line 2069 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tLEQ); } -#line 7242 "ripper.c" /* yacc.c:1646 */ +#line 2093 "ripper.y" + { ifndef_ripper((yyval.val) = tLEQ); } +#line 7380 "ripper.c" break; case 148: -#line 2070 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tNEQ); } -#line 7248 "ripper.c" /* yacc.c:1646 */ +#line 2094 "ripper.y" + { ifndef_ripper((yyval.val) = tNEQ); } +#line 7386 "ripper.c" break; case 149: -#line 2071 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tLSHFT); } -#line 7254 "ripper.c" /* yacc.c:1646 */ +#line 2095 "ripper.y" + { ifndef_ripper((yyval.val) = tLSHFT); } +#line 7392 "ripper.c" break; case 150: -#line 2072 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tRSHFT); } -#line 7260 "ripper.c" /* yacc.c:1646 */ +#line 2096 "ripper.y" + { ifndef_ripper((yyval.val) = tRSHFT); } +#line 7398 "ripper.c" break; case 151: -#line 2073 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '+'); } -#line 7266 "ripper.c" /* yacc.c:1646 */ +#line 2097 "ripper.y" + { ifndef_ripper((yyval.val) = '+'); } +#line 7404 "ripper.c" break; case 152: -#line 2074 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '-'); } -#line 7272 "ripper.c" /* yacc.c:1646 */ +#line 2098 "ripper.y" + { ifndef_ripper((yyval.val) = '-'); } +#line 7410 "ripper.c" break; case 153: -#line 2075 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '*'); } -#line 7278 "ripper.c" /* yacc.c:1646 */ +#line 2099 "ripper.y" + { ifndef_ripper((yyval.val) = '*'); } +#line 7416 "ripper.c" break; case 154: -#line 2076 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '*'); } -#line 7284 "ripper.c" /* yacc.c:1646 */ +#line 2100 "ripper.y" + { ifndef_ripper((yyval.val) = '*'); } +#line 7422 "ripper.c" break; case 155: -#line 2077 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '/'); } -#line 7290 "ripper.c" /* yacc.c:1646 */ +#line 2101 "ripper.y" + { ifndef_ripper((yyval.val) = '/'); } +#line 7428 "ripper.c" break; case 156: -#line 2078 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '%'); } -#line 7296 "ripper.c" /* yacc.c:1646 */ +#line 2102 "ripper.y" + { ifndef_ripper((yyval.val) = '%'); } +#line 7434 "ripper.c" break; case 157: -#line 2079 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tPOW); } -#line 7302 "ripper.c" /* yacc.c:1646 */ +#line 2103 "ripper.y" + { ifndef_ripper((yyval.val) = tPOW); } +#line 7440 "ripper.c" break; case 158: -#line 2080 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tDSTAR); } -#line 7308 "ripper.c" /* yacc.c:1646 */ +#line 2104 "ripper.y" + { ifndef_ripper((yyval.val) = tDSTAR); } +#line 7446 "ripper.c" break; case 159: -#line 2081 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '!'); } -#line 7314 "ripper.c" /* yacc.c:1646 */ +#line 2105 "ripper.y" + { ifndef_ripper((yyval.val) = '!'); } +#line 7452 "ripper.c" break; case 160: -#line 2082 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '~'); } -#line 7320 "ripper.c" /* yacc.c:1646 */ +#line 2106 "ripper.y" + { ifndef_ripper((yyval.val) = '~'); } +#line 7458 "ripper.c" break; case 161: -#line 2083 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tUPLUS); } -#line 7326 "ripper.c" /* yacc.c:1646 */ +#line 2107 "ripper.y" + { ifndef_ripper((yyval.val) = tUPLUS); } +#line 7464 "ripper.c" break; case 162: -#line 2084 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tUMINUS); } -#line 7332 "ripper.c" /* yacc.c:1646 */ +#line 2108 "ripper.y" + { ifndef_ripper((yyval.val) = tUMINUS); } +#line 7470 "ripper.c" break; case 163: -#line 2085 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tAREF); } -#line 7338 "ripper.c" /* yacc.c:1646 */ +#line 2109 "ripper.y" + { ifndef_ripper((yyval.val) = tAREF); } +#line 7476 "ripper.c" break; case 164: -#line 2086 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = tASET); } -#line 7344 "ripper.c" /* yacc.c:1646 */ +#line 2110 "ripper.y" + { ifndef_ripper((yyval.val) = tASET); } +#line 7482 "ripper.c" break; case 165: -#line 2087 "ripper.y" /* yacc.c:1646 */ - { ifndef_ripper((yyval.val) = '`'); } -#line 7350 "ripper.c" /* yacc.c:1646 */ +#line 2111 "ripper.y" + { ifndef_ripper((yyval.val) = '`'); } +#line 7488 "ripper.c" break; case 207: -#line 2105 "ripper.y" /* yacc.c:1646 */ - { +#line 2129 "ripper.y" + { #if 0 (yyval.val) = node_assign(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(assign,v1,v2);(yyval.val)=v3;} } -#line 7361 "ripper.c" /* yacc.c:1646 */ +#line 7499 "ripper.c" break; case 208: -#line 2112 "ripper.y" /* yacc.c:1646 */ - { +#line 2136 "ripper.y" + { #if 0 (yyval.val) = new_op_assign(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(opassign,v1,v2,v3);(yyval.val)=v4;} } -#line 7372 "ripper.c" /* yacc.c:1646 */ +#line 7510 "ripper.c" break; case 209: -#line 2119 "ripper.y" /* yacc.c:1646 */ - { +#line 2143 "ripper.y" + { #if 0 value_expr((yyvsp[0].val)); (yyval.val) = new_ary_op_assign(p, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-3]), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-5].val);v2=escape_Qundef((yyvsp[-3].val));v3=dispatch2(aref_field,v1,v2);v4=v3;v5=(yyvsp[-1].val);v6=(yyvsp[0].val);v7=dispatch3(opassign,v4,v5,v6);(yyval.val)=v7;} } -#line 7384 "ripper.c" /* yacc.c:1646 */ +#line 7522 "ripper.c" break; case 210: -#line 2127 "ripper.y" /* yacc.c:1646 */ - { +#line 2151 "ripper.y" + { #if 0 value_expr((yyvsp[0].val)); (yyval.val) = new_attr_op_assign(p, (yyvsp[-4].val), (yyvsp[-3].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=dispatch3(field,v1,v2,v3);v5=v4;v6=(yyvsp[-1].val);v7=(yyvsp[0].val);v8=dispatch3(opassign,v5,v6,v7);(yyval.val)=v8;} } -#line 7396 "ripper.c" /* yacc.c:1646 */ +#line 7534 "ripper.c" break; case 211: -#line 2135 "ripper.y" /* yacc.c:1646 */ - { +#line 2159 "ripper.y" + { #if 0 value_expr((yyvsp[0].val)); (yyval.val) = new_attr_op_assign(p, (yyvsp[-4].val), (yyvsp[-3].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=dispatch3(field,v1,v2,v3);v5=v4;v6=(yyvsp[-1].val);v7=(yyvsp[0].val);v8=dispatch3(opassign,v5,v6,v7);(yyval.val)=v8;} } -#line 7408 "ripper.c" /* yacc.c:1646 */ +#line 7546 "ripper.c" break; case 212: -#line 2143 "ripper.y" /* yacc.c:1646 */ - { +#line 2167 "ripper.y" + { #if 0 value_expr((yyvsp[0].val)); (yyval.val) = new_attr_op_assign(p, (yyvsp[-4].val), ID2VAL(idCOLON2), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[-2].val);v4=dispatch3(field,v1,v2,v3);v5=v4;v6=(yyvsp[-1].val);v7=(yyvsp[0].val);v8=dispatch3(opassign,v5,v6,v7);(yyval.val)=v8;} } -#line 7420 "ripper.c" /* yacc.c:1646 */ +#line 7558 "ripper.c" break; case 213: -#line 2151 "ripper.y" /* yacc.c:1646 */ - { +#line 2175 "ripper.y" + { #if 0 YYLTYPE loc = code_loc_gen(&(yylsp[-4]), &(yylsp[-2])); (yyval.val) = new_const_op_assign(p, NEW_COLON2((yyvsp[-4].val), (yyvsp[-2].val), &loc), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=dispatch2(const_path_field,v1,v2);v4=v3;v5=(yyvsp[-1].val);v6=(yyvsp[0].val);v7=dispatch3(opassign,v4,v5,v6);(yyval.val)=v7;} } -#line 7432 "ripper.c" /* yacc.c:1646 */ +#line 7570 "ripper.c" break; case 214: -#line 2159 "ripper.y" /* yacc.c:1646 */ - { +#line 2183 "ripper.y" + { #if 0 (yyval.val) = new_const_op_assign(p, NEW_COLON3((yyvsp[-2].val), &(yyloc)), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-2].val);v2=dispatch1(top_const_field,v1);v3=v2;v4=(yyvsp[-1].val);v5=(yyvsp[0].val);v6=dispatch3(opassign,v3,v4,v5);(yyval.val)=v6;} } -#line 7443 "ripper.c" /* yacc.c:1646 */ +#line 7581 "ripper.c" break; case 215: -#line 2166 "ripper.y" /* yacc.c:1646 */ - { +#line 2190 "ripper.y" + { #if 0 rb_backref_error(p, (yyvsp[-2].val)); (yyval.val) = NEW_BEGIN(0, &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6;v1=var_field(p, (yyvsp[-2].val));v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(opassign,v1,v2,v3);v5=v4;v6=dispatch1(assign_error,v5);(yyval.val)=v6;}ripper_error(p); } -#line 7455 "ripper.c" /* yacc.c:1646 */ +#line 7593 "ripper.c" break; case 216: -#line 2174 "ripper.y" /* yacc.c:1646 */ - { +#line 2198 "ripper.y" + { #if 0 value_expr((yyvsp[-2].val)); value_expr((yyvsp[0].val)); @@ -7469,12 +7607,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(dot2,v1,v2);(yyval.val)=v3;} } -#line 7468 "ripper.c" /* yacc.c:1646 */ +#line 7606 "ripper.c" break; case 217: -#line 2183 "ripper.y" /* yacc.c:1646 */ - { +#line 2207 "ripper.y" + { #if 0 value_expr((yyvsp[-2].val)); value_expr((yyvsp[0].val)); @@ -7482,12 +7620,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(dot3,v1,v2);(yyval.val)=v3;} } -#line 7481 "ripper.c" /* yacc.c:1646 */ +#line 7619 "ripper.c" break; case 218: -#line 2192 "ripper.y" /* yacc.c:1646 */ - { +#line 2216 "ripper.y" + { #if 0 YYLTYPE loc; loc.beg_pos = (yylsp[0]).end_pos; @@ -7498,12 +7636,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=Qnil;v3=dispatch2(dot2,v1,v2);(yyval.val)=v3;} } -#line 7497 "ripper.c" /* yacc.c:1646 */ +#line 7635 "ripper.c" break; case 219: -#line 2204 "ripper.y" /* yacc.c:1646 */ - { +#line 2228 "ripper.y" + { #if 0 YYLTYPE loc; loc.beg_pos = (yylsp[0]).end_pos; @@ -7514,12 +7652,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=Qnil;v3=dispatch2(dot3,v1,v2);(yyval.val)=v3;} } -#line 7513 "ripper.c" /* yacc.c:1646 */ +#line 7651 "ripper.c" break; case 220: -#line 2216 "ripper.y" /* yacc.c:1646 */ - { +#line 2240 "ripper.y" + { #if 0 YYLTYPE loc; loc.beg_pos = (yylsp[-1]).beg_pos; @@ -7530,12 +7668,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=Qnil;v2=(yyvsp[0].val);v3=dispatch2(dot2,v1,v2);(yyval.val)=v3;} } -#line 7529 "ripper.c" /* yacc.c:1646 */ +#line 7667 "ripper.c" break; case 221: -#line 2228 "ripper.y" /* yacc.c:1646 */ - { +#line 2252 "ripper.y" + { #if 0 YYLTYPE loc; loc.beg_pos = (yylsp[-1]).beg_pos; @@ -7546,219 +7684,219 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=Qnil;v2=(yyvsp[0].val);v3=dispatch2(dot3,v1,v2);(yyval.val)=v3;} } -#line 7545 "ripper.c" /* yacc.c:1646 */ +#line 7683 "ripper.c" break; case 222: -#line 2240 "ripper.y" /* yacc.c:1646 */ - { +#line 2264 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '+', (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7553 "ripper.c" /* yacc.c:1646 */ +#line 7691 "ripper.c" break; case 223: -#line 2244 "ripper.y" /* yacc.c:1646 */ - { +#line 2268 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '-', (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7561 "ripper.c" /* yacc.c:1646 */ +#line 7699 "ripper.c" break; case 224: -#line 2248 "ripper.y" /* yacc.c:1646 */ - { +#line 2272 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '*', (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7569 "ripper.c" /* yacc.c:1646 */ +#line 7707 "ripper.c" break; case 225: -#line 2252 "ripper.y" /* yacc.c:1646 */ - { +#line 2276 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '/', (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7577 "ripper.c" /* yacc.c:1646 */ +#line 7715 "ripper.c" break; case 226: -#line 2256 "ripper.y" /* yacc.c:1646 */ - { +#line 2280 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '%', (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7585 "ripper.c" /* yacc.c:1646 */ +#line 7723 "ripper.c" break; case 227: -#line 2260 "ripper.y" /* yacc.c:1646 */ - { +#line 2284 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idPow, (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7593 "ripper.c" /* yacc.c:1646 */ +#line 7731 "ripper.c" break; case 228: -#line 2264 "ripper.y" /* yacc.c:1646 */ - { +#line 2288 "ripper.y" + { (yyval.val) = call_uni_op(p, call_bin_op(p, (yyvsp[-2].val), idPow, (yyvsp[0].val), &(yylsp[-2]), &(yyloc)), idUMinus, &(yylsp[-3]), &(yyloc)); } -#line 7601 "ripper.c" /* yacc.c:1646 */ +#line 7739 "ripper.c" break; case 229: -#line 2268 "ripper.y" /* yacc.c:1646 */ - { +#line 2292 "ripper.y" + { (yyval.val) = call_uni_op(p, (yyvsp[0].val), idUPlus, &(yylsp[-1]), &(yyloc)); } -#line 7609 "ripper.c" /* yacc.c:1646 */ +#line 7747 "ripper.c" break; case 230: -#line 2272 "ripper.y" /* yacc.c:1646 */ - { +#line 2296 "ripper.y" + { (yyval.val) = call_uni_op(p, (yyvsp[0].val), idUMinus, &(yylsp[-1]), &(yyloc)); } -#line 7617 "ripper.c" /* yacc.c:1646 */ +#line 7755 "ripper.c" break; case 231: -#line 2276 "ripper.y" /* yacc.c:1646 */ - { +#line 2300 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '|', (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7625 "ripper.c" /* yacc.c:1646 */ +#line 7763 "ripper.c" break; case 232: -#line 2280 "ripper.y" /* yacc.c:1646 */ - { +#line 2304 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '^', (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7633 "ripper.c" /* yacc.c:1646 */ +#line 7771 "ripper.c" break; case 233: -#line 2284 "ripper.y" /* yacc.c:1646 */ - { +#line 2308 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '&', (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7641 "ripper.c" /* yacc.c:1646 */ +#line 7779 "ripper.c" break; case 234: -#line 2288 "ripper.y" /* yacc.c:1646 */ - { +#line 2312 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idCmp, (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7649 "ripper.c" /* yacc.c:1646 */ +#line 7787 "ripper.c" break; case 236: -#line 2293 "ripper.y" /* yacc.c:1646 */ - { +#line 2317 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idEq, (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7657 "ripper.c" /* yacc.c:1646 */ +#line 7795 "ripper.c" break; case 237: -#line 2297 "ripper.y" /* yacc.c:1646 */ - { +#line 2321 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idEqq, (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7665 "ripper.c" /* yacc.c:1646 */ +#line 7803 "ripper.c" break; case 238: -#line 2301 "ripper.y" /* yacc.c:1646 */ - { +#line 2325 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idNeq, (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7673 "ripper.c" /* yacc.c:1646 */ +#line 7811 "ripper.c" break; case 239: -#line 2305 "ripper.y" /* yacc.c:1646 */ - { +#line 2329 "ripper.y" + { (yyval.val) = match_op(p, (yyvsp[-2].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7681 "ripper.c" /* yacc.c:1646 */ +#line 7819 "ripper.c" break; case 240: -#line 2309 "ripper.y" /* yacc.c:1646 */ - { +#line 2333 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idNeqTilde, (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7689 "ripper.c" /* yacc.c:1646 */ +#line 7827 "ripper.c" break; case 241: -#line 2313 "ripper.y" /* yacc.c:1646 */ - { +#line 2337 "ripper.y" + { (yyval.val) = call_uni_op(p, method_cond(p, (yyvsp[0].val), &(yylsp[0])), '!', &(yylsp[-1]), &(yyloc)); } -#line 7697 "ripper.c" /* yacc.c:1646 */ +#line 7835 "ripper.c" break; case 242: -#line 2317 "ripper.y" /* yacc.c:1646 */ - { +#line 2341 "ripper.y" + { (yyval.val) = call_uni_op(p, (yyvsp[0].val), '~', &(yylsp[-1]), &(yyloc)); } -#line 7705 "ripper.c" /* yacc.c:1646 */ +#line 7843 "ripper.c" break; case 243: -#line 2321 "ripper.y" /* yacc.c:1646 */ - { +#line 2345 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idLTLT, (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7713 "ripper.c" /* yacc.c:1646 */ +#line 7851 "ripper.c" break; case 244: -#line 2325 "ripper.y" /* yacc.c:1646 */ - { +#line 2349 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idGTGT, (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7721 "ripper.c" /* yacc.c:1646 */ +#line 7859 "ripper.c" break; case 245: -#line 2329 "ripper.y" /* yacc.c:1646 */ - { +#line 2353 "ripper.y" + { (yyval.val) = logop(p, idANDOP, (yyvsp[-2].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7729 "ripper.c" /* yacc.c:1646 */ +#line 7867 "ripper.c" break; case 246: -#line 2333 "ripper.y" /* yacc.c:1646 */ - { +#line 2357 "ripper.y" + { (yyval.val) = logop(p, idOROP, (yyvsp[-2].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7737 "ripper.c" /* yacc.c:1646 */ +#line 7875 "ripper.c" break; case 247: -#line 2336 "ripper.y" /* yacc.c:1646 */ - {p->in_defined = 1;} -#line 7743 "ripper.c" /* yacc.c:1646 */ +#line 2360 "ripper.y" + {p->in_defined = 1;} +#line 7881 "ripper.c" break; case 248: -#line 2337 "ripper.y" /* yacc.c:1646 */ - { +#line 2361 "ripper.y" + { p->in_defined = 0; (yyval.val) = new_defined(p, (yyvsp[0].val), &(yyloc)); } -#line 7752 "ripper.c" /* yacc.c:1646 */ +#line 7890 "ripper.c" break; case 249: -#line 2342 "ripper.y" /* yacc.c:1646 */ - { +#line 2366 "ripper.y" + { #if 0 value_expr((yyvsp[-5].val)); (yyval.val) = new_if(p, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[0].val), &(yyloc)); @@ -7766,109 +7904,109 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-5].val);v2=(yyvsp[-3].val);v3=(yyvsp[0].val);v4=dispatch3(ifop,v1,v2,v3);(yyval.val)=v4;} } -#line 7765 "ripper.c" /* yacc.c:1646 */ +#line 7903 "ripper.c" break; case 250: -#line 2351 "ripper.y" /* yacc.c:1646 */ - { +#line 2375 "ripper.y" + { (yyval.val) = (yyvsp[0].val); } -#line 7773 "ripper.c" /* yacc.c:1646 */ +#line 7911 "ripper.c" break; case 251: -#line 2356 "ripper.y" /* yacc.c:1646 */ - {(yyval.val) = '>';} -#line 7779 "ripper.c" /* yacc.c:1646 */ +#line 2380 "ripper.y" + {(yyval.val) = '>';} +#line 7917 "ripper.c" break; case 252: -#line 2357 "ripper.y" /* yacc.c:1646 */ - {(yyval.val) = '<';} -#line 7785 "ripper.c" /* yacc.c:1646 */ +#line 2381 "ripper.y" + {(yyval.val) = '<';} +#line 7923 "ripper.c" break; case 253: -#line 2358 "ripper.y" /* yacc.c:1646 */ - {(yyval.val) = idGE;} -#line 7791 "ripper.c" /* yacc.c:1646 */ +#line 2382 "ripper.y" + {(yyval.val) = idGE;} +#line 7929 "ripper.c" break; case 254: -#line 2359 "ripper.y" /* yacc.c:1646 */ - {(yyval.val) = idLE;} -#line 7797 "ripper.c" /* yacc.c:1646 */ +#line 2383 "ripper.y" + {(yyval.val) = idLE;} +#line 7935 "ripper.c" break; case 255: -#line 2363 "ripper.y" /* yacc.c:1646 */ - { +#line 2387 "ripper.y" + { (yyval.val) = call_bin_op(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7805 "ripper.c" /* yacc.c:1646 */ +#line 7943 "ripper.c" break; case 256: -#line 2367 "ripper.y" /* yacc.c:1646 */ - { +#line 2391 "ripper.y" + { rb_warning1("comparison '%s' after comparison", WARN_ID((yyvsp[-1].val))); (yyval.val) = call_bin_op(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); } -#line 7814 "ripper.c" /* yacc.c:1646 */ +#line 7952 "ripper.c" break; case 257: -#line 2374 "ripper.y" /* yacc.c:1646 */ - { +#line 2398 "ripper.y" + { value_expr((yyvsp[0].val)); (yyval.val) = (yyvsp[0].val); } -#line 7823 "ripper.c" /* yacc.c:1646 */ +#line 7961 "ripper.c" break; case 259: -#line 2382 "ripper.y" /* yacc.c:1646 */ - { +#line 2406 "ripper.y" + { (yyval.val) = (yyvsp[-1].val); } -#line 7831 "ripper.c" /* yacc.c:1646 */ +#line 7969 "ripper.c" break; case 260: -#line 2386 "ripper.y" /* yacc.c:1646 */ - { +#line 2410 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val) ? arg_append(p, (yyvsp[-3].val), new_hash(p, (yyvsp[-1].val), &(yylsp[-1])), &(yyloc)) : (yyvsp[-3].val); #endif {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-1].val);v2=dispatch1(bare_assoc_hash,v1);v3=(yyvsp[-3].val);v4=v2;v5=dispatch2(args_add,v3,v4);(yyval.val)=v5;} } -#line 7842 "ripper.c" /* yacc.c:1646 */ +#line 7980 "ripper.c" break; case 261: -#line 2393 "ripper.y" /* yacc.c:1646 */ - { +#line 2417 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val) ? NEW_LIST(new_hash(p, (yyvsp[-1].val), &(yylsp[-1])), &(yyloc)) : 0; #endif {VALUE v1,v2,v3,v4,v5,v6;v1=dispatch0(args_new);v2=(yyvsp[-1].val);v3=dispatch1(bare_assoc_hash,v2);v4=v1;v5=v3;v6=dispatch2(args_add,v4,v5);(yyval.val)=v6;} } -#line 7853 "ripper.c" /* yacc.c:1646 */ +#line 7991 "ripper.c" break; case 262: -#line 2402 "ripper.y" /* yacc.c:1646 */ - { +#line 2426 "ripper.y" + { value_expr((yyvsp[0].val)); (yyval.val) = (yyvsp[0].val); } -#line 7862 "ripper.c" /* yacc.c:1646 */ +#line 8000 "ripper.c" break; case 263: -#line 2407 "ripper.y" /* yacc.c:1646 */ - { +#line 2431 "ripper.y" + { #if 0 YYLTYPE loc = code_loc_gen(&(yylsp[-1]), &(yylsp[0])); value_expr((yyvsp[-2].val)); @@ -7876,23 +8014,23 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(rescue_mod,v1,v2);(yyval.val)=v3;} } -#line 7875 "ripper.c" /* yacc.c:1646 */ +#line 8013 "ripper.c" break; case 264: -#line 2418 "ripper.y" /* yacc.c:1646 */ - { +#line 2442 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val); #endif {VALUE v1,v2;v1=escape_Qundef((yyvsp[-1].val));v2=dispatch1(arg_paren,v1);(yyval.val)=v2;} } -#line 7886 "ripper.c" /* yacc.c:1646 */ +#line 8024 "ripper.c" break; case 265: -#line 2425 "ripper.y" /* yacc.c:1646 */ - { +#line 2449 "ripper.y" + { if (!local_id(p, idFWD_REST) || #if idFWD_KWREST !local_id(p, idFWD_KWREST) || @@ -7918,95 +8056,95 @@ YYLTYPE yylloc = yyloc_default; {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(arg_paren,v1);(yyval.val)=v2;} } } -#line 7917 "ripper.c" /* yacc.c:1646 */ +#line 8055 "ripper.c" break; case 270: -#line 2460 "ripper.y" /* yacc.c:1646 */ - { +#line 2484 "ripper.y" + { (yyval.val) = (yyvsp[-1].val); } -#line 7925 "ripper.c" /* yacc.c:1646 */ +#line 8063 "ripper.c" break; case 271: -#line 2464 "ripper.y" /* yacc.c:1646 */ - { +#line 2488 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val) ? arg_append(p, (yyvsp[-3].val), new_hash(p, (yyvsp[-1].val), &(yylsp[-1])), &(yyloc)) : (yyvsp[-3].val); #endif {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-1].val);v2=dispatch1(bare_assoc_hash,v1);v3=(yyvsp[-3].val);v4=v2;v5=dispatch2(args_add,v3,v4);(yyval.val)=v5;} } -#line 7936 "ripper.c" /* yacc.c:1646 */ +#line 8074 "ripper.c" break; case 272: -#line 2471 "ripper.y" /* yacc.c:1646 */ - { +#line 2495 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val) ? NEW_LIST(new_hash(p, (yyvsp[-1].val), &(yylsp[-1])), &(yylsp[-1])) : 0; #endif {VALUE v1,v2,v3,v4,v5,v6;v1=dispatch0(args_new);v2=(yyvsp[-1].val);v3=dispatch1(bare_assoc_hash,v2);v4=v1;v5=v3;v6=dispatch2(args_add,v4,v5);(yyval.val)=v6;} } -#line 7947 "ripper.c" /* yacc.c:1646 */ +#line 8085 "ripper.c" break; case 273: -#line 2480 "ripper.y" /* yacc.c:1646 */ - { +#line 2504 "ripper.y" + { #if 0 value_expr((yyvsp[0].val)); (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add,v2,v3);(yyval.val)=v4;} } -#line 7959 "ripper.c" /* yacc.c:1646 */ +#line 8097 "ripper.c" break; case 274: -#line 2488 "ripper.y" /* yacc.c:1646 */ - { +#line 2512 "ripper.y" + { #if 0 (yyval.val) = arg_blk_pass((yyvsp[-1].val), (yyvsp[0].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(args_add_block,v1,v2);(yyval.val)=v3;} } -#line 7970 "ripper.c" /* yacc.c:1646 */ +#line 8108 "ripper.c" break; case 275: -#line 2495 "ripper.y" /* yacc.c:1646 */ - { +#line 2519 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val) ? NEW_LIST(new_hash(p, (yyvsp[-1].val), &(yylsp[-1])), &(yylsp[-1])) : 0; (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[0].val)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8,v9;v1=dispatch0(args_new);v2=(yyvsp[-1].val);v3=dispatch1(bare_assoc_hash,v2);v4=v1;v5=v3;v6=dispatch2(args_add,v4,v5);v7=v6;v8=(yyvsp[0].val);v9=dispatch2(args_add_block,v7,v8);(yyval.val)=v9;} } -#line 7982 "ripper.c" /* yacc.c:1646 */ +#line 8120 "ripper.c" break; case 276: -#line 2503 "ripper.y" /* yacc.c:1646 */ - { +#line 2527 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val) ? arg_append(p, (yyvsp[-3].val), new_hash(p, (yyvsp[-1].val), &(yylsp[-1])), &(yyloc)) : (yyvsp[-3].val); (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[0].val)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-1].val);v2=dispatch1(bare_assoc_hash,v1);v3=(yyvsp[-3].val);v4=v2;v5=dispatch2(args_add,v3,v4);v6=v5;v7=(yyvsp[0].val);v8=dispatch2(args_add_block,v6,v7);(yyval.val)=v8;} } -#line 7994 "ripper.c" /* yacc.c:1646 */ +#line 8132 "ripper.c" break; case 277: -#line 2511 "ripper.y" /* yacc.c:1646 */ - {{VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add_block,v2,v3);(yyval.val)=v4;}} -#line 8000 "ripper.c" /* yacc.c:1646 */ +#line 2535 "ripper.y" + {{VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add_block,v2,v3);(yyval.val)=v4;}} +#line 8138 "ripper.c" break; case 278: -#line 2514 "ripper.y" /* yacc.c:1646 */ - { +#line 2538 "ripper.y" + { /* If call_args starts with a open paren '(' or '[', * look-ahead reading of the letters calls CMDARG_PUSH(0), * but the push must be done after CMDARG_PUSH(1). @@ -8023,12 +8161,12 @@ YYLTYPE yylloc = yyloc_default; CMDARG_PUSH(1); if (lookahead) CMDARG_PUSH(0); } -#line 8022 "ripper.c" /* yacc.c:1646 */ +#line 8160 "ripper.c" break; case 279: -#line 2532 "ripper.y" /* yacc.c:1646 */ - { +#line 2556 "ripper.y" + { /* call_args can be followed by tLBRACE_ARG (that does CMDARG_PUSH(0) in the lexer) * but the push must be done after CMDARG_POP() in the parser. * So this code does CMDARG_POP() to pop 0 pushed by tLBRACE_ARG, @@ -8045,135 +8183,135 @@ YYLTYPE yylloc = yyloc_default; if (lookahead) CMDARG_PUSH(0); (yyval.val) = (yyvsp[0].val); } -#line 8044 "ripper.c" /* yacc.c:1646 */ +#line 8182 "ripper.c" break; case 280: -#line 2552 "ripper.y" /* yacc.c:1646 */ - { +#line 2576 "ripper.y" + { #if 0 (yyval.val) = NEW_BLOCK_PASS((yyvsp[0].val), &(yyloc)); #endif (yyval.val)=(yyvsp[0].val); } -#line 8055 "ripper.c" /* yacc.c:1646 */ +#line 8193 "ripper.c" break; case 281: -#line 2561 "ripper.y" /* yacc.c:1646 */ - { +#line 2585 "ripper.y" + { (yyval.val) = (yyvsp[0].val); } -#line 8063 "ripper.c" /* yacc.c:1646 */ +#line 8201 "ripper.c" break; case 282: -#line 2565 "ripper.y" /* yacc.c:1646 */ - { +#line 2589 "ripper.y" + { (yyval.val) = 0; } -#line 8071 "ripper.c" /* yacc.c:1646 */ +#line 8209 "ripper.c" break; case 283: -#line 2571 "ripper.y" /* yacc.c:1646 */ - { +#line 2595 "ripper.y" + { #if 0 (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add,v2,v3);(yyval.val)=v4;} } -#line 8082 "ripper.c" /* yacc.c:1646 */ +#line 8220 "ripper.c" break; case 284: -#line 2578 "ripper.y" /* yacc.c:1646 */ - { +#line 2602 "ripper.y" + { #if 0 (yyval.val) = NEW_SPLAT((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add_star,v2,v3);(yyval.val)=v4;} } -#line 8093 "ripper.c" /* yacc.c:1646 */ +#line 8231 "ripper.c" break; case 285: -#line 2585 "ripper.y" /* yacc.c:1646 */ - { +#line 2609 "ripper.y" + { #if 0 (yyval.val) = last_arg_append(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(args_add,v1,v2);(yyval.val)=v3;} } -#line 8104 "ripper.c" /* yacc.c:1646 */ +#line 8242 "ripper.c" break; case 286: -#line 2592 "ripper.y" /* yacc.c:1646 */ - { +#line 2616 "ripper.y" + { #if 0 (yyval.val) = rest_arg_append(p, (yyvsp[-3].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=(yyvsp[0].val);v3=dispatch2(args_add_star,v1,v2);(yyval.val)=v3;} } -#line 8115 "ripper.c" /* yacc.c:1646 */ +#line 8253 "ripper.c" break; case 289: -#line 2605 "ripper.y" /* yacc.c:1646 */ - { +#line 2629 "ripper.y" + { #if 0 (yyval.val) = last_arg_append(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-2].val);v2=dispatch1(mrhs_new_from_args,v1);v3=v2;v4=(yyvsp[0].val);v5=dispatch2(mrhs_add,v3,v4);(yyval.val)=v5;} } -#line 8126 "ripper.c" /* yacc.c:1646 */ +#line 8264 "ripper.c" break; case 290: -#line 2612 "ripper.y" /* yacc.c:1646 */ - { +#line 2636 "ripper.y" + { #if 0 (yyval.val) = rest_arg_append(p, (yyvsp[-3].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-3].val);v2=dispatch1(mrhs_new_from_args,v1);v3=v2;v4=(yyvsp[0].val);v5=dispatch2(mrhs_add_star,v3,v4);(yyval.val)=v5;} } -#line 8137 "ripper.c" /* yacc.c:1646 */ +#line 8275 "ripper.c" break; case 291: -#line 2619 "ripper.y" /* yacc.c:1646 */ - { +#line 2643 "ripper.y" + { #if 0 (yyval.val) = NEW_SPLAT((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(mrhs_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(mrhs_add_star,v2,v3);(yyval.val)=v4;} } -#line 8148 "ripper.c" /* yacc.c:1646 */ +#line 8286 "ripper.c" break; case 302: -#line 2638 "ripper.y" /* yacc.c:1646 */ - { +#line 2662 "ripper.y" + { #if 0 (yyval.val) = NEW_FCALL((yyvsp[0].val), 0, &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[0].val);v2=dispatch1(fcall,v1);v3=dispatch0(args_new);v4=v2;v5=v3;v6=dispatch2(method_add_arg,v4,v5);(yyval.val)=v6;} } -#line 8159 "ripper.c" /* yacc.c:1646 */ +#line 8297 "ripper.c" break; case 303: -#line 2645 "ripper.y" /* yacc.c:1646 */ - { +#line 2669 "ripper.y" + { CMDARG_PUSH(0); } -#line 8167 "ripper.c" /* yacc.c:1646 */ +#line 8305 "ripper.c" break; case 304: -#line 2650 "ripper.y" /* yacc.c:1646 */ - { +#line 2674 "ripper.y" + { CMDARG_POP(); #if 0 set_line_body((yyvsp[-1].val), (yylsp[-3]).end_pos.lineno); @@ -8182,278 +8320,278 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(begin,v1);(yyval.val)=v2;} } -#line 8181 "ripper.c" /* yacc.c:1646 */ +#line 8319 "ripper.c" break; case 305: -#line 2659 "ripper.y" /* yacc.c:1646 */ - {SET_LEX_STATE(EXPR_ENDARG);} -#line 8187 "ripper.c" /* yacc.c:1646 */ +#line 2683 "ripper.y" + {SET_LEX_STATE(EXPR_ENDARG);} +#line 8325 "ripper.c" break; case 306: -#line 2660 "ripper.y" /* yacc.c:1646 */ - { +#line 2684 "ripper.y" + { #if 0 (yyval.val) = NEW_BEGIN(0, &(yyloc)); #endif {VALUE v1,v2;v1=0;v2=dispatch1(paren,v1);(yyval.val)=v2;} } -#line 8198 "ripper.c" /* yacc.c:1646 */ +#line 8336 "ripper.c" break; case 307: -#line 2666 "ripper.y" /* yacc.c:1646 */ - {SET_LEX_STATE(EXPR_ENDARG);} -#line 8204 "ripper.c" /* yacc.c:1646 */ +#line 2690 "ripper.y" + {SET_LEX_STATE(EXPR_ENDARG);} +#line 8342 "ripper.c" break; case 308: -#line 2667 "ripper.y" /* yacc.c:1646 */ - { +#line 2691 "ripper.y" + { #if 0 if (nd_type((yyvsp[-2].val)) == NODE_SELF) (yyvsp[-2].val)->nd_state = 0; (yyval.val) = (yyvsp[-2].val); #endif {VALUE v1,v2;v1=(yyvsp[-2].val);v2=dispatch1(paren,v1);(yyval.val)=v2;} } -#line 8216 "ripper.c" /* yacc.c:1646 */ +#line 8354 "ripper.c" break; case 309: -#line 2675 "ripper.y" /* yacc.c:1646 */ - { +#line 2699 "ripper.y" + { #if 0 if (nd_type((yyvsp[-1].val)) == NODE_SELF) (yyvsp[-1].val)->nd_state = 0; (yyval.val) = (yyvsp[-1].val); #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(paren,v1);(yyval.val)=v2;} } -#line 8228 "ripper.c" /* yacc.c:1646 */ +#line 8366 "ripper.c" break; case 310: -#line 2683 "ripper.y" /* yacc.c:1646 */ - { +#line 2707 "ripper.y" + { #if 0 (yyval.val) = NEW_COLON2((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(const_path_ref,v1,v2);(yyval.val)=v3;} } -#line 8239 "ripper.c" /* yacc.c:1646 */ +#line 8377 "ripper.c" break; case 311: -#line 2690 "ripper.y" /* yacc.c:1646 */ - { +#line 2714 "ripper.y" + { #if 0 (yyval.val) = NEW_COLON3((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(top_const_ref,v1);(yyval.val)=v2;} } -#line 8250 "ripper.c" /* yacc.c:1646 */ +#line 8388 "ripper.c" break; case 312: -#line 2697 "ripper.y" /* yacc.c:1646 */ - { +#line 2721 "ripper.y" + { #if 0 (yyval.val) = make_list((yyvsp[-1].val), &(yyloc)); #endif {VALUE v1,v2;v1=escape_Qundef((yyvsp[-1].val));v2=dispatch1(array,v1);(yyval.val)=v2;} } -#line 8261 "ripper.c" /* yacc.c:1646 */ +#line 8399 "ripper.c" break; case 313: -#line 2704 "ripper.y" /* yacc.c:1646 */ - { +#line 2728 "ripper.y" + { #if 0 (yyval.val) = new_hash(p, (yyvsp[-1].val), &(yyloc)); (yyval.val)->nd_brace = TRUE; #endif {VALUE v1,v2;v1=escape_Qundef((yyvsp[-1].val));v2=dispatch1(hash,v1);(yyval.val)=v2;} } -#line 8273 "ripper.c" /* yacc.c:1646 */ +#line 8411 "ripper.c" break; case 314: -#line 2712 "ripper.y" /* yacc.c:1646 */ - { +#line 2736 "ripper.y" + { #if 0 (yyval.val) = NEW_RETURN(0, &(yyloc)); #endif {VALUE v1;v1=dispatch0(return0);(yyval.val)=v1;} } -#line 8284 "ripper.c" /* yacc.c:1646 */ +#line 8422 "ripper.c" break; case 315: -#line 2719 "ripper.y" /* yacc.c:1646 */ - { +#line 2743 "ripper.y" + { #if 0 (yyval.val) = new_yield(p, (yyvsp[-1].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-1].val);v2=dispatch1(paren,v1);v3=v2;v4=dispatch1(yield,v3);(yyval.val)=v4;} } -#line 8295 "ripper.c" /* yacc.c:1646 */ +#line 8433 "ripper.c" break; case 316: -#line 2726 "ripper.y" /* yacc.c:1646 */ - { +#line 2750 "ripper.y" + { #if 0 (yyval.val) = NEW_YIELD(0, &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5;v1=dispatch0(args_new);v2=v1;v3=dispatch1(paren,v2);v4=v3;v5=dispatch1(yield,v4);(yyval.val)=v5;} } -#line 8306 "ripper.c" /* yacc.c:1646 */ +#line 8444 "ripper.c" break; case 317: -#line 2733 "ripper.y" /* yacc.c:1646 */ - { +#line 2757 "ripper.y" + { #if 0 (yyval.val) = NEW_YIELD(0, &(yyloc)); #endif {VALUE v1;v1=dispatch0(yield0);(yyval.val)=v1;} } -#line 8317 "ripper.c" /* yacc.c:1646 */ +#line 8455 "ripper.c" break; case 318: -#line 2739 "ripper.y" /* yacc.c:1646 */ - {p->in_defined = 1;} -#line 8323 "ripper.c" /* yacc.c:1646 */ +#line 2763 "ripper.y" + {p->in_defined = 1;} +#line 8461 "ripper.c" break; case 319: -#line 2740 "ripper.y" /* yacc.c:1646 */ - { +#line 2764 "ripper.y" + { p->in_defined = 0; (yyval.val) = new_defined(p, (yyvsp[-1].val), &(yyloc)); } -#line 8332 "ripper.c" /* yacc.c:1646 */ +#line 8470 "ripper.c" break; case 320: -#line 2745 "ripper.y" /* yacc.c:1646 */ - { +#line 2769 "ripper.y" + { (yyval.val) = call_uni_op(p, method_cond(p, (yyvsp[-1].val), &(yylsp[-1])), METHOD_NOT, &(yylsp[-3]), &(yyloc)); } -#line 8340 "ripper.c" /* yacc.c:1646 */ +#line 8478 "ripper.c" break; case 321: -#line 2749 "ripper.y" /* yacc.c:1646 */ - { +#line 2773 "ripper.y" + { (yyval.val) = call_uni_op(p, method_cond(p, new_nil(&(yylsp[-1])), &(yylsp[-1])), METHOD_NOT, &(yylsp[-2]), &(yyloc)); } -#line 8348 "ripper.c" /* yacc.c:1646 */ +#line 8486 "ripper.c" break; case 322: -#line 2753 "ripper.y" /* yacc.c:1646 */ - { +#line 2777 "ripper.y" + { #if 0 (yyval.val) = method_add_block(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8,v9;v1=(yyvsp[-1].val);v2=dispatch1(fcall,v1);v3=dispatch0(args_new);v4=v2;v5=v3;v6=dispatch2(method_add_arg,v4,v5);v7=v6;v8=(yyvsp[0].val);v9=dispatch2(method_add_block,v7,v8);(yyval.val)=v9;} } -#line 8359 "ripper.c" /* yacc.c:1646 */ +#line 8497 "ripper.c" break; case 324: -#line 2761 "ripper.y" /* yacc.c:1646 */ - { +#line 2785 "ripper.y" + { #if 0 block_dup_check(p, (yyvsp[-1].val)->nd_args, (yyvsp[0].val)); (yyval.val) = method_add_block(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(method_add_block,v1,v2);(yyval.val)=v3;} } -#line 8371 "ripper.c" /* yacc.c:1646 */ +#line 8509 "ripper.c" break; case 325: -#line 2769 "ripper.y" /* yacc.c:1646 */ - { +#line 2793 "ripper.y" + { token_info_push(p, "->", &(yylsp[0])); } -#line 8379 "ripper.c" /* yacc.c:1646 */ +#line 8517 "ripper.c" break; case 326: -#line 2773 "ripper.y" /* yacc.c:1646 */ - { +#line 2797 "ripper.y" + { (yyval.val) = (yyvsp[0].val); #if 0 nd_set_first_loc((yyval.val), (yylsp[-2]).beg_pos); #endif } -#line 8390 "ripper.c" /* yacc.c:1646 */ +#line 8528 "ripper.c" break; case 327: -#line 2783 "ripper.y" /* yacc.c:1646 */ - { +#line 2807 "ripper.y" + { #if 0 (yyval.val) = new_if(p, (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val), &(yyloc)); fixpos((yyval.val), (yyvsp[-4].val)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=escape_Qundef((yyvsp[-1].val));v4=dispatch3(if,v1,v2,v3);(yyval.val)=v4;} } -#line 8402 "ripper.c" /* yacc.c:1646 */ +#line 8540 "ripper.c" break; case 328: -#line 2794 "ripper.y" /* yacc.c:1646 */ - { +#line 2818 "ripper.y" + { #if 0 (yyval.val) = new_unless(p, (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val), &(yyloc)); fixpos((yyval.val), (yyvsp[-4].val)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=escape_Qundef((yyvsp[-1].val));v4=dispatch3(unless,v1,v2,v3);(yyval.val)=v4;} } -#line 8414 "ripper.c" /* yacc.c:1646 */ +#line 8552 "ripper.c" break; case 329: -#line 2804 "ripper.y" /* yacc.c:1646 */ - { +#line 2828 "ripper.y" + { #if 0 (yyval.val) = NEW_WHILE(cond(p, (yyvsp[-2].val), &(yylsp[-2])), (yyvsp[-1].val), 1, &(yyloc)); fixpos((yyval.val), (yyvsp[-2].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(while,v1,v2);(yyval.val)=v3;} } -#line 8426 "ripper.c" /* yacc.c:1646 */ +#line 8564 "ripper.c" break; case 330: -#line 2814 "ripper.y" /* yacc.c:1646 */ - { +#line 2838 "ripper.y" + { #if 0 (yyval.val) = NEW_UNTIL(cond(p, (yyvsp[-2].val), &(yylsp[-2])), (yyvsp[-1].val), 1, &(yyloc)); fixpos((yyval.val), (yyvsp[-2].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(until,v1,v2);(yyval.val)=v3;} } -#line 8438 "ripper.c" /* yacc.c:1646 */ +#line 8576 "ripper.c" break; case 331: -#line 2822 "ripper.y" /* yacc.c:1646 */ - { +#line 2846 "ripper.y" + { (yyval.val) = p->case_labels; p->case_labels = Qnil; } -#line 8447 "ripper.c" /* yacc.c:1646 */ +#line 8585 "ripper.c" break; case 332: -#line 2828 "ripper.y" /* yacc.c:1646 */ - { +#line 2852 "ripper.y" + { if (RTEST(p->case_labels)) rb_hash_clear(p->case_labels); p->case_labels = (yyvsp[-2].val); #if 0 @@ -8462,21 +8600,21 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-4].val);v2=(yyvsp[-1].val);v3=dispatch2(case,v1,v2);(yyval.val)=v3;} } -#line 8461 "ripper.c" /* yacc.c:1646 */ +#line 8599 "ripper.c" break; case 333: -#line 2838 "ripper.y" /* yacc.c:1646 */ - { +#line 2862 "ripper.y" + { (yyval.val) = p->case_labels; p->case_labels = 0; } -#line 8470 "ripper.c" /* yacc.c:1646 */ +#line 8608 "ripper.c" break; case 334: -#line 2844 "ripper.y" /* yacc.c:1646 */ - { +#line 2868 "ripper.y" + { if (RTEST(p->case_labels)) rb_hash_clear(p->case_labels); p->case_labels = (yyvsp[-2].val); #if 0 @@ -8484,23 +8622,23 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=Qnil;v2=(yyvsp[-1].val);v3=dispatch2(case,v1,v2);(yyval.val)=v3;} } -#line 8483 "ripper.c" /* yacc.c:1646 */ +#line 8621 "ripper.c" break; case 335: -#line 2855 "ripper.y" /* yacc.c:1646 */ - { +#line 2879 "ripper.y" + { #if 0 (yyval.val) = new_case3(p, (yyvsp[-3].val), (yyvsp[-1].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=(yyvsp[-1].val);v3=dispatch2(case,v1,v2);(yyval.val)=v3;} } -#line 8494 "ripper.c" /* yacc.c:1646 */ +#line 8632 "ripper.c" break; case 336: -#line 2864 "ripper.y" /* yacc.c:1646 */ - { +#line 2888 "ripper.y" + { #if 0 /* * for a, b, c in e @@ -8544,12 +8682,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=(yyvsp[-1].val);v4=dispatch3(for,v1,v2,v3);(yyval.val)=v4;} } -#line 8543 "ripper.c" /* yacc.c:1646 */ +#line 8681 "ripper.c" break; case 337: -#line 2909 "ripper.y" /* yacc.c:1646 */ - { +#line 2933 "ripper.y" + { if (p->in_def) { YYLTYPE loc = code_loc_gen(&(yylsp[-2]), &(yylsp[-1])); yyerror1(&loc, "class definition in method body"); @@ -8558,12 +8696,12 @@ YYLTYPE yylloc = yyloc_default; p->in_class = 1; local_push(p, 0); } -#line 8557 "ripper.c" /* yacc.c:1646 */ +#line 8695 "ripper.c" break; case 338: -#line 2920 "ripper.y" /* yacc.c:1646 */ - { +#line 2944 "ripper.y" + { #if 0 (yyval.val) = NEW_CLASS((yyvsp[-4].val), (yyvsp[-1].val), (yyvsp[-3].val), &(yyloc)); nd_set_line((yyval.val)->nd_body, (yylsp[0]).end_pos.lineno); @@ -8574,23 +8712,23 @@ YYLTYPE yylloc = yyloc_default; local_pop(p); p->in_class = (yyvsp[-5].num) & 1; } -#line 8573 "ripper.c" /* yacc.c:1646 */ +#line 8711 "ripper.c" break; case 339: -#line 2932 "ripper.y" /* yacc.c:1646 */ - { +#line 2956 "ripper.y" + { (yyval.num) = (p->in_class << 1) | p->in_def; p->in_def = 0; p->in_class = 0; local_push(p, 0); } -#line 8584 "ripper.c" /* yacc.c:1646 */ +#line 8722 "ripper.c" break; case 340: -#line 2941 "ripper.y" /* yacc.c:1646 */ - { +#line 2965 "ripper.y" + { #if 0 (yyval.val) = NEW_SCLASS((yyvsp[-4].val), (yyvsp[-1].val), &(yyloc)); nd_set_line((yyval.val)->nd_body, (yylsp[0]).end_pos.lineno); @@ -8602,12 +8740,12 @@ YYLTYPE yylloc = yyloc_default; p->in_def = (yyvsp[-3].num) & 1; p->in_class = ((yyvsp[-3].num) >> 1) & 1; } -#line 8601 "ripper.c" /* yacc.c:1646 */ +#line 8739 "ripper.c" break; case 341: -#line 2954 "ripper.y" /* yacc.c:1646 */ - { +#line 2978 "ripper.y" + { if (p->in_def) { YYLTYPE loc = code_loc_gen(&(yylsp[-1]), &(yylsp[0])); yyerror1(&loc, "module definition in method body"); @@ -8616,12 +8754,12 @@ YYLTYPE yylloc = yyloc_default; p->in_class = 1; local_push(p, 0); } -#line 8615 "ripper.c" /* yacc.c:1646 */ +#line 8753 "ripper.c" break; case 342: -#line 2965 "ripper.y" /* yacc.c:1646 */ - { +#line 2989 "ripper.y" + { #if 0 (yyval.val) = NEW_MODULE((yyvsp[-3].val), (yyvsp[-1].val), &(yyloc)); nd_set_line((yyval.val)->nd_body, (yylsp[0]).end_pos.lineno); @@ -8632,32 +8770,32 @@ YYLTYPE yylloc = yyloc_default; local_pop(p); p->in_class = (yyvsp[-4].num) & 1; } -#line 8631 "ripper.c" /* yacc.c:1646 */ +#line 8769 "ripper.c" break; case 343: -#line 2977 "ripper.y" /* yacc.c:1646 */ - { +#line 3001 "ripper.y" + { numparam_name(p, get_id((yyvsp[0].val))); local_push(p, 0); (yyval.id) = p->cur_arg; p->cur_arg = 0; } -#line 8642 "ripper.c" /* yacc.c:1646 */ +#line 8780 "ripper.c" break; case 344: -#line 2983 "ripper.y" /* yacc.c:1646 */ - { +#line 3007 "ripper.y" + { (yyval.num) = p->in_def; p->in_def = 1; } -#line 8651 "ripper.c" /* yacc.c:1646 */ +#line 8789 "ripper.c" break; case 345: -#line 2990 "ripper.y" /* yacc.c:1646 */ - { +#line 3014 "ripper.y" + { #if 0 NODE *body = remove_begin((yyvsp[-1].val)); reduce_nodes(p, &body); @@ -8670,18 +8808,18 @@ YYLTYPE yylloc = yyloc_default; p->in_def = (yyvsp[-3].num) & 1; p->cur_arg = (yyvsp[-4].id); } -#line 8669 "ripper.c" /* yacc.c:1646 */ +#line 8807 "ripper.c" break; case 346: -#line 3003 "ripper.y" /* yacc.c:1646 */ - {SET_LEX_STATE(EXPR_FNAME);} -#line 8675 "ripper.c" /* yacc.c:1646 */ +#line 3027 "ripper.y" + {SET_LEX_STATE(EXPR_FNAME);} +#line 8813 "ripper.c" break; case 347: -#line 3004 "ripper.y" /* yacc.c:1646 */ - { +#line 3028 "ripper.y" + { numparam_name(p, get_id((yyvsp[0].val))); (yyvsp[-1].num) = p->in_def; p->in_def = 1; @@ -8690,12 +8828,12 @@ YYLTYPE yylloc = yyloc_default; (yyval.id) = p->cur_arg; p->cur_arg = 0; } -#line 8689 "ripper.c" /* yacc.c:1646 */ +#line 8827 "ripper.c" break; case 348: -#line 3016 "ripper.y" /* yacc.c:1646 */ - { +#line 3040 "ripper.y" + { #if 0 NODE *body = remove_begin((yyvsp[-1].val)); reduce_nodes(p, &body); @@ -8708,73 +8846,73 @@ YYLTYPE yylloc = yyloc_default; p->in_def = (yyvsp[-5].num) & 1; p->cur_arg = (yyvsp[-3].id); } -#line 8707 "ripper.c" /* yacc.c:1646 */ +#line 8845 "ripper.c" break; case 349: -#line 3030 "ripper.y" /* yacc.c:1646 */ - { +#line 3054 "ripper.y" + { #if 0 (yyval.val) = NEW_BREAK(0, &(yyloc)); #endif {VALUE v1,v2,v3;v1=dispatch0(args_new);v2=v1;v3=dispatch1(break,v2);(yyval.val)=v3;} } -#line 8718 "ripper.c" /* yacc.c:1646 */ +#line 8856 "ripper.c" break; case 350: -#line 3037 "ripper.y" /* yacc.c:1646 */ - { +#line 3061 "ripper.y" + { #if 0 (yyval.val) = NEW_NEXT(0, &(yyloc)); #endif {VALUE v1,v2,v3;v1=dispatch0(args_new);v2=v1;v3=dispatch1(next,v2);(yyval.val)=v3;} } -#line 8729 "ripper.c" /* yacc.c:1646 */ +#line 8867 "ripper.c" break; case 351: -#line 3044 "ripper.y" /* yacc.c:1646 */ - { +#line 3068 "ripper.y" + { #if 0 (yyval.val) = NEW_REDO(&(yyloc)); #endif {VALUE v1;v1=dispatch0(redo);(yyval.val)=v1;} } -#line 8740 "ripper.c" /* yacc.c:1646 */ +#line 8878 "ripper.c" break; case 352: -#line 3051 "ripper.y" /* yacc.c:1646 */ - { +#line 3075 "ripper.y" + { #if 0 (yyval.val) = NEW_RETRY(&(yyloc)); #endif {VALUE v1;v1=dispatch0(retry);(yyval.val)=v1;} } -#line 8751 "ripper.c" /* yacc.c:1646 */ +#line 8889 "ripper.c" break; case 353: -#line 3060 "ripper.y" /* yacc.c:1646 */ - { +#line 3084 "ripper.y" + { value_expr((yyvsp[0].val)); (yyval.val) = (yyvsp[0].val); } -#line 8760 "ripper.c" /* yacc.c:1646 */ +#line 8898 "ripper.c" break; case 354: -#line 3067 "ripper.y" /* yacc.c:1646 */ - { +#line 3091 "ripper.y" + { token_info_push(p, "begin", &(yyloc)); } -#line 8768 "ripper.c" /* yacc.c:1646 */ +#line 8906 "ripper.c" break; case 355: -#line 3073 "ripper.y" /* yacc.c:1646 */ - { +#line 3097 "ripper.y" + { WARN_EOL("if"); token_info_push(p, "if", &(yyloc)); if (p->token_info && p->token_info->nonspc && @@ -8788,116 +8926,116 @@ YYLTYPE yylloc = yyloc_default; } } } -#line 8787 "ripper.c" /* yacc.c:1646 */ +#line 8925 "ripper.c" break; case 356: -#line 3090 "ripper.y" /* yacc.c:1646 */ - { +#line 3114 "ripper.y" + { token_info_push(p, "unless", &(yyloc)); } -#line 8795 "ripper.c" /* yacc.c:1646 */ +#line 8933 "ripper.c" break; case 357: -#line 3096 "ripper.y" /* yacc.c:1646 */ - { +#line 3120 "ripper.y" + { token_info_push(p, "while", &(yyloc)); } -#line 8803 "ripper.c" /* yacc.c:1646 */ +#line 8941 "ripper.c" break; case 358: -#line 3102 "ripper.y" /* yacc.c:1646 */ - { +#line 3126 "ripper.y" + { token_info_push(p, "until", &(yyloc)); } -#line 8811 "ripper.c" /* yacc.c:1646 */ +#line 8949 "ripper.c" break; case 359: -#line 3108 "ripper.y" /* yacc.c:1646 */ - { +#line 3132 "ripper.y" + { token_info_push(p, "case", &(yyloc)); } -#line 8819 "ripper.c" /* yacc.c:1646 */ +#line 8957 "ripper.c" break; case 360: -#line 3114 "ripper.y" /* yacc.c:1646 */ - { +#line 3138 "ripper.y" + { token_info_push(p, "for", &(yyloc)); } -#line 8827 "ripper.c" /* yacc.c:1646 */ +#line 8965 "ripper.c" break; case 361: -#line 3120 "ripper.y" /* yacc.c:1646 */ - { +#line 3144 "ripper.y" + { token_info_push(p, "class", &(yyloc)); } -#line 8835 "ripper.c" /* yacc.c:1646 */ +#line 8973 "ripper.c" break; case 362: -#line 3126 "ripper.y" /* yacc.c:1646 */ - { +#line 3150 "ripper.y" + { token_info_push(p, "module", &(yyloc)); } -#line 8843 "ripper.c" /* yacc.c:1646 */ +#line 8981 "ripper.c" break; case 363: -#line 3132 "ripper.y" /* yacc.c:1646 */ - { +#line 3156 "ripper.y" + { token_info_push(p, "def", &(yyloc)); } -#line 8851 "ripper.c" /* yacc.c:1646 */ +#line 8989 "ripper.c" break; case 364: -#line 3138 "ripper.y" /* yacc.c:1646 */ - { +#line 3162 "ripper.y" + { token_info_push(p, "do", &(yyloc)); } -#line 8859 "ripper.c" /* yacc.c:1646 */ +#line 8997 "ripper.c" break; case 365: -#line 3144 "ripper.y" /* yacc.c:1646 */ - { +#line 3168 "ripper.y" + { token_info_push(p, "do", &(yyloc)); } -#line 8867 "ripper.c" /* yacc.c:1646 */ +#line 9005 "ripper.c" break; case 366: -#line 3150 "ripper.y" /* yacc.c:1646 */ - { +#line 3174 "ripper.y" + { token_info_warn(p, "rescue", p->token_info, 1, &(yyloc)); } -#line 8875 "ripper.c" /* yacc.c:1646 */ +#line 9013 "ripper.c" break; case 367: -#line 3156 "ripper.y" /* yacc.c:1646 */ - { +#line 3180 "ripper.y" + { token_info_warn(p, "ensure", p->token_info, 1, &(yyloc)); } -#line 8883 "ripper.c" /* yacc.c:1646 */ +#line 9021 "ripper.c" break; case 368: -#line 3162 "ripper.y" /* yacc.c:1646 */ - { +#line 3186 "ripper.y" + { token_info_warn(p, "when", p->token_info, 0, &(yyloc)); } -#line 8891 "ripper.c" /* yacc.c:1646 */ +#line 9029 "ripper.c" break; case 369: -#line 3168 "ripper.y" /* yacc.c:1646 */ - { +#line 3192 "ripper.y" + { token_info *ptinfo_beg = p->token_info; int same = ptinfo_beg && strcmp(ptinfo_beg->token, "case") != 0; token_info_warn(p, "else", p->token_info, same, &(yyloc)); @@ -8909,372 +9047,372 @@ YYLTYPE yylloc = yyloc_default; if (!e.nonspc) *ptinfo_beg = e; } } -#line 8908 "ripper.c" /* yacc.c:1646 */ +#line 9046 "ripper.c" break; case 370: -#line 3183 "ripper.y" /* yacc.c:1646 */ - { +#line 3207 "ripper.y" + { WARN_EOL("elsif"); token_info_warn(p, "elsif", p->token_info, 1, &(yyloc)); } -#line 8917 "ripper.c" /* yacc.c:1646 */ +#line 9055 "ripper.c" break; case 371: -#line 3190 "ripper.y" /* yacc.c:1646 */ - { +#line 3214 "ripper.y" + { token_info_pop(p, "end", &(yyloc)); } -#line 8925 "ripper.c" /* yacc.c:1646 */ +#line 9063 "ripper.c" break; case 372: -#line 3196 "ripper.y" /* yacc.c:1646 */ - { +#line 3220 "ripper.y" + { if (p->in_class && !p->in_def && !dyna_in_block(p)) yyerror1(&(yylsp[0]), "Invalid return in class/module body"); } -#line 8934 "ripper.c" /* yacc.c:1646 */ +#line 9072 "ripper.c" break; case 379: -#line 3215 "ripper.y" /* yacc.c:1646 */ - { +#line 3239 "ripper.y" + { #if 0 (yyval.val) = new_if(p, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); fixpos((yyval.val), (yyvsp[-3].val)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-3].val);v2=(yyvsp[-1].val);v3=escape_Qundef((yyvsp[0].val));v4=dispatch3(elsif,v1,v2,v3);(yyval.val)=v4;} } -#line 8946 "ripper.c" /* yacc.c:1646 */ +#line 9084 "ripper.c" break; case 381: -#line 3226 "ripper.y" /* yacc.c:1646 */ - { +#line 3250 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[0].val); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(else,v1);(yyval.val)=v2;} } -#line 8957 "ripper.c" /* yacc.c:1646 */ +#line 9095 "ripper.c" break; case 384: -#line 3239 "ripper.y" /* yacc.c:1646 */ - { +#line 3263 "ripper.y" + { #if 0 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc)); mark_lvar_used(p, (yyval.val)); #endif (yyval.val)=assignable(p, (yyvsp[0].val)); } -#line 8969 "ripper.c" /* yacc.c:1646 */ +#line 9107 "ripper.c" break; case 385: -#line 3247 "ripper.y" /* yacc.c:1646 */ - { +#line 3271 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val); #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(mlhs_paren,v1);(yyval.val)=v2;} } -#line 8980 "ripper.c" /* yacc.c:1646 */ +#line 9118 "ripper.c" break; case 386: -#line 3256 "ripper.y" /* yacc.c:1646 */ - { +#line 3280 "ripper.y" + { #if 0 (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(mlhs_add,v2,v3);(yyval.val)=v4;} } -#line 8991 "ripper.c" /* yacc.c:1646 */ +#line 9129 "ripper.c" break; case 387: -#line 3263 "ripper.y" /* yacc.c:1646 */ - { +#line 3287 "ripper.y" + { #if 0 (yyval.val) = list_append(p, (yyvsp[-2].val), (yyvsp[0].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(mlhs_add,v1,v2);(yyval.val)=v3;} } -#line 9002 "ripper.c" /* yacc.c:1646 */ +#line 9140 "ripper.c" break; case 388: -#line 3272 "ripper.y" /* yacc.c:1646 */ - { +#line 3296 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN((yyvsp[0].val), 0, &(yyloc)); #endif (yyval.val)=(yyvsp[0].val); } -#line 9013 "ripper.c" /* yacc.c:1646 */ +#line 9151 "ripper.c" break; case 389: -#line 3279 "ripper.y" /* yacc.c:1646 */ - { +#line 3303 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(mlhs_add_star,v1,v2);(yyval.val)=v3;} } -#line 9024 "ripper.c" /* yacc.c:1646 */ +#line 9162 "ripper.c" break; case 390: -#line 3286 "ripper.y" /* yacc.c:1646 */ - { +#line 3310 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN((yyvsp[-4].val), NEW_POSTARG((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=dispatch2(mlhs_add_star,v1,v2);v4=v3;v5=(yyvsp[0].val);v6=dispatch2(mlhs_add_post,v4,v5);(yyval.val)=v6;} } -#line 9035 "ripper.c" /* yacc.c:1646 */ +#line 9173 "ripper.c" break; case 391: -#line 3293 "ripper.y" /* yacc.c:1646 */ - { +#line 3317 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN(0, (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(mlhs_add_star,v2,v3);(yyval.val)=v4;} } -#line 9046 "ripper.c" /* yacc.c:1646 */ +#line 9184 "ripper.c" break; case 392: -#line 3300 "ripper.y" /* yacc.c:1646 */ - { +#line 3324 "ripper.y" + { #if 0 (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[-2].val);v4=dispatch2(mlhs_add_star,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(mlhs_add_post,v5,v6);(yyval.val)=v7;} } -#line 9057 "ripper.c" /* yacc.c:1646 */ +#line 9195 "ripper.c" break; case 393: -#line 3309 "ripper.y" /* yacc.c:1646 */ - { +#line 3333 "ripper.y" + { #if 0 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc)); mark_lvar_used(p, (yyval.val)); #endif (yyval.val)=assignable(p, (yyvsp[0].val)); } -#line 9069 "ripper.c" /* yacc.c:1646 */ +#line 9207 "ripper.c" break; case 394: -#line 3317 "ripper.y" /* yacc.c:1646 */ - { +#line 3341 "ripper.y" + { #if 0 (yyval.val) = NODE_SPECIAL_NO_NAME_REST; #endif (yyval.val)=Qnil; } -#line 9080 "ripper.c" /* yacc.c:1646 */ +#line 9218 "ripper.c" break; case 395: -#line 3326 "ripper.y" /* yacc.c:1646 */ - { +#line 3350 "ripper.y" + { (yyval.val) = new_args_tail(p, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1])); } -#line 9088 "ripper.c" /* yacc.c:1646 */ +#line 9226 "ripper.c" break; case 396: -#line 3330 "ripper.y" /* yacc.c:1646 */ - { +#line 3354 "ripper.y" + { (yyval.val) = new_args_tail(p, (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yylsp[-1])); } -#line 9096 "ripper.c" /* yacc.c:1646 */ +#line 9234 "ripper.c" break; case 397: -#line 3334 "ripper.y" /* yacc.c:1646 */ - { +#line 3358 "ripper.y" + { (yyval.val) = new_args_tail(p, Qnone, (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1])); } -#line 9104 "ripper.c" /* yacc.c:1646 */ +#line 9242 "ripper.c" break; case 398: -#line 3338 "ripper.y" /* yacc.c:1646 */ - { +#line 3362 "ripper.y" + { (yyval.val) = new_args_tail(p, Qnone, ID2VAL(idNil), (yyvsp[0].val), &(yylsp[-1])); } -#line 9112 "ripper.c" /* yacc.c:1646 */ +#line 9250 "ripper.c" break; case 399: -#line 3342 "ripper.y" /* yacc.c:1646 */ - { +#line 3366 "ripper.y" + { (yyval.val) = new_args_tail(p, Qnone, Qnone, (yyvsp[0].val), &(yylsp[0])); } -#line 9120 "ripper.c" /* yacc.c:1646 */ +#line 9258 "ripper.c" break; case 400: -#line 3348 "ripper.y" /* yacc.c:1646 */ - { +#line 3372 "ripper.y" + { (yyval.val) = (yyvsp[0].val); } -#line 9128 "ripper.c" /* yacc.c:1646 */ +#line 9266 "ripper.c" break; case 401: -#line 3352 "ripper.y" /* yacc.c:1646 */ - { +#line 3376 "ripper.y" + { (yyval.val) = new_args_tail(p, Qnone, Qnone, Qnone, &(yylsp[0])); } -#line 9136 "ripper.c" /* yacc.c:1646 */ +#line 9274 "ripper.c" break; case 402: -#line 3358 "ripper.y" /* yacc.c:1646 */ - { +#line 3382 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc)); } -#line 9144 "ripper.c" /* yacc.c:1646 */ +#line 9282 "ripper.c" break; case 403: -#line 3362 "ripper.y" /* yacc.c:1646 */ - { +#line 3386 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-7].val), (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 9152 "ripper.c" /* yacc.c:1646 */ +#line 9290 "ripper.c" break; case 404: -#line 3366 "ripper.y" /* yacc.c:1646 */ - { +#line 3390 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-3].val), (yyvsp[-1].val), Qnone, Qnone, (yyvsp[0].val), &(yyloc)); } -#line 9160 "ripper.c" /* yacc.c:1646 */ +#line 9298 "ripper.c" break; case 405: -#line 3370 "ripper.y" /* yacc.c:1646 */ - { +#line 3394 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-5].val), (yyvsp[-3].val), Qnone, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 9168 "ripper.c" /* yacc.c:1646 */ +#line 9306 "ripper.c" break; case 406: -#line 3374 "ripper.y" /* yacc.c:1646 */ - { +#line 3398 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-3].val), Qnone, (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc)); } -#line 9176 "ripper.c" /* yacc.c:1646 */ +#line 9314 "ripper.c" break; case 407: -#line 3378 "ripper.y" /* yacc.c:1646 */ - { +#line 3402 "ripper.y" + { #if 0 /* magic number for rest_id in iseq_set_arguments() */ (yyval.val) = new_args(p, (yyvsp[-1].val), Qnone, NODE_SPECIAL_EXCESSIVE_COMMA, Qnone, new_args_tail(p, Qnone, Qnone, Qnone, &(yylsp[-1])), &(yyloc)); #endif {VALUE v1;v1=dispatch0(excessed_comma);(yyval.val)=new_args(p, (yyvsp[-1].val), Qnone, v1, Qnone, new_args_tail(p, Qnone, Qnone, Qnone, NULL), NULL);} } -#line 9188 "ripper.c" /* yacc.c:1646 */ +#line 9326 "ripper.c" break; case 408: -#line 3386 "ripper.y" /* yacc.c:1646 */ - { +#line 3410 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-5].val), Qnone, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 9196 "ripper.c" /* yacc.c:1646 */ +#line 9334 "ripper.c" break; case 409: -#line 3390 "ripper.y" /* yacc.c:1646 */ - { +#line 3414 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-1].val), Qnone, Qnone, Qnone, (yyvsp[0].val), &(yyloc)); } -#line 9204 "ripper.c" /* yacc.c:1646 */ +#line 9342 "ripper.c" break; case 410: -#line 3394 "ripper.y" /* yacc.c:1646 */ - { +#line 3418 "ripper.y" + { (yyval.val) = new_args(p, Qnone, (yyvsp[-3].val), (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc)); } -#line 9212 "ripper.c" /* yacc.c:1646 */ +#line 9350 "ripper.c" break; case 411: -#line 3398 "ripper.y" /* yacc.c:1646 */ - { +#line 3422 "ripper.y" + { (yyval.val) = new_args(p, Qnone, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 9220 "ripper.c" /* yacc.c:1646 */ +#line 9358 "ripper.c" break; case 412: -#line 3402 "ripper.y" /* yacc.c:1646 */ - { +#line 3426 "ripper.y" + { (yyval.val) = new_args(p, Qnone, (yyvsp[-1].val), Qnone, Qnone, (yyvsp[0].val), &(yyloc)); } -#line 9228 "ripper.c" /* yacc.c:1646 */ +#line 9366 "ripper.c" break; case 413: -#line 3406 "ripper.y" /* yacc.c:1646 */ - { +#line 3430 "ripper.y" + { (yyval.val) = new_args(p, Qnone, (yyvsp[-3].val), Qnone, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 9236 "ripper.c" /* yacc.c:1646 */ +#line 9374 "ripper.c" break; case 414: -#line 3410 "ripper.y" /* yacc.c:1646 */ - { +#line 3434 "ripper.y" + { (yyval.val) = new_args(p, Qnone, Qnone, (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc)); } -#line 9244 "ripper.c" /* yacc.c:1646 */ +#line 9382 "ripper.c" break; case 415: -#line 3414 "ripper.y" /* yacc.c:1646 */ - { +#line 3438 "ripper.y" + { (yyval.val) = new_args(p, Qnone, Qnone, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 9252 "ripper.c" /* yacc.c:1646 */ +#line 9390 "ripper.c" break; case 416: -#line 3418 "ripper.y" /* yacc.c:1646 */ - { +#line 3442 "ripper.y" + { (yyval.val) = new_args(p, Qnone, Qnone, Qnone, Qnone, (yyvsp[0].val), &(yyloc)); } -#line 9260 "ripper.c" /* yacc.c:1646 */ +#line 9398 "ripper.c" break; case 418: -#line 3425 "ripper.y" /* yacc.c:1646 */ - { +#line 3449 "ripper.y" + { p->command_start = TRUE; } -#line 9268 "ripper.c" /* yacc.c:1646 */ +#line 9406 "ripper.c" break; case 419: -#line 3431 "ripper.y" /* yacc.c:1646 */ - { +#line 3455 "ripper.y" + { p->cur_arg = 0; p->max_numparam = ORDINAL_PARAM; #if 0 @@ -9282,12 +9420,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11;v1=Qnil;v2=Qnil;v3=Qnil;v4=Qnil;v5=Qnil;v6=Qnil;v7=Qnil;v8=dispatch7(params,v1,v2,v3,v4,v5,v6,v7);v9=v8;v10=escape_Qundef((yyvsp[-1].val));v11=dispatch2(block_var,v9,v10);(yyval.val)=v11;} } -#line 9281 "ripper.c" /* yacc.c:1646 */ +#line 9419 "ripper.c" break; case 420: -#line 3440 "ripper.y" /* yacc.c:1646 */ - { +#line 3464 "ripper.y" + { p->cur_arg = 0; p->max_numparam = ORDINAL_PARAM; #if 0 @@ -9295,102 +9433,102 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=escape_Qundef((yyvsp[-2].val));v2=escape_Qundef((yyvsp[-1].val));v3=dispatch2(block_var,v1,v2);(yyval.val)=v3;} } -#line 9294 "ripper.c" /* yacc.c:1646 */ +#line 9432 "ripper.c" break; case 421: -#line 3452 "ripper.y" /* yacc.c:1646 */ - { +#line 3476 "ripper.y" + { (yyval.val) = 0; } -#line 9302 "ripper.c" /* yacc.c:1646 */ +#line 9440 "ripper.c" break; case 422: -#line 3456 "ripper.y" /* yacc.c:1646 */ - { +#line 3480 "ripper.y" + { #if 0 (yyval.val) = 0; #endif (yyval.val)=(yyvsp[-1].val); } -#line 9313 "ripper.c" /* yacc.c:1646 */ +#line 9451 "ripper.c" break; case 423: -#line 3465 "ripper.y" /* yacc.c:1646 */ - {(yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));} -#line 9319 "ripper.c" /* yacc.c:1646 */ +#line 3489 "ripper.y" + {(yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));} +#line 9457 "ripper.c" break; case 424: -#line 3467 "ripper.y" /* yacc.c:1646 */ - {(yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val)));} -#line 9325 "ripper.c" /* yacc.c:1646 */ +#line 3491 "ripper.y" + {(yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val)));} +#line 9463 "ripper.c" break; case 425: -#line 3471 "ripper.y" /* yacc.c:1646 */ - { +#line 3495 "ripper.y" + { new_bv(p, get_id((yyvsp[0].val))); (yyval.val)=get_value((yyvsp[0].val)); } -#line 9334 "ripper.c" /* yacc.c:1646 */ +#line 9472 "ripper.c" break; case 426: -#line 3476 "ripper.y" /* yacc.c:1646 */ - { +#line 3500 "ripper.y" + { (yyval.val) = 0; } -#line 9342 "ripper.c" /* yacc.c:1646 */ +#line 9480 "ripper.c" break; case 427: -#line 3481 "ripper.y" /* yacc.c:1646 */ - { +#line 3505 "ripper.y" + { (yyval.vars) = dyna_push(p); } -#line 9350 "ripper.c" /* yacc.c:1646 */ +#line 9488 "ripper.c" break; case 428: -#line 3484 "ripper.y" /* yacc.c:1646 */ - { +#line 3508 "ripper.y" + { (yyval.num) = p->lex.lpar_beg; p->lex.lpar_beg = p->lex.paren_nest; } -#line 9359 "ripper.c" /* yacc.c:1646 */ +#line 9497 "ripper.c" break; case 429: -#line 3488 "ripper.y" /* yacc.c:1646 */ - { +#line 3512 "ripper.y" + { (yyval.num) = p->max_numparam; p->max_numparam = 0; } -#line 9368 "ripper.c" /* yacc.c:1646 */ +#line 9506 "ripper.c" break; case 430: -#line 3492 "ripper.y" /* yacc.c:1646 */ - { +#line 3516 "ripper.y" + { (yyval.node) = numparam_push(p); } -#line 9376 "ripper.c" /* yacc.c:1646 */ +#line 9514 "ripper.c" break; case 431: -#line 3496 "ripper.y" /* yacc.c:1646 */ - { +#line 3520 "ripper.y" + { CMDARG_PUSH(0); } -#line 9384 "ripper.c" /* yacc.c:1646 */ +#line 9522 "ripper.c" break; case 432: -#line 3500 "ripper.y" /* yacc.c:1646 */ - { +#line 3524 "ripper.y" + { int max_numparam = p->max_numparam; p->lex.lpar_beg = (yyvsp[-5].num); p->max_numparam = (yyvsp[-4].num); @@ -9408,65 +9546,65 @@ YYLTYPE yylloc = yyloc_default; numparam_pop(p, (yyvsp[-3].node)); dyna_pop(p, (yyvsp[-6].vars)); } -#line 9407 "ripper.c" /* yacc.c:1646 */ +#line 9545 "ripper.c" break; case 433: -#line 3521 "ripper.y" /* yacc.c:1646 */ - { +#line 3545 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-2].val); p->max_numparam = ORDINAL_PARAM; #endif {VALUE v1,v2;v1=(yyvsp[-2].val);v2=dispatch1(paren,v1);(yyval.val)=v2;} } -#line 9419 "ripper.c" /* yacc.c:1646 */ +#line 9557 "ripper.c" break; case 434: -#line 3529 "ripper.y" /* yacc.c:1646 */ - { +#line 3553 "ripper.y" + { #if 0 if (!args_info_empty_p((yyvsp[0].val)->nd_ainfo)) p->max_numparam = ORDINAL_PARAM; #endif (yyval.val) = (yyvsp[0].val); } -#line 9431 "ripper.c" /* yacc.c:1646 */ +#line 9569 "ripper.c" break; case 435: -#line 3539 "ripper.y" /* yacc.c:1646 */ - { +#line 3563 "ripper.y" + { token_info_pop(p, "}", &(yylsp[0])); (yyval.val) = (yyvsp[-1].val); } -#line 9440 "ripper.c" /* yacc.c:1646 */ +#line 9578 "ripper.c" break; case 436: -#line 3544 "ripper.y" /* yacc.c:1646 */ - { +#line 3568 "ripper.y" + { (yyval.val) = (yyvsp[-1].val); } -#line 9448 "ripper.c" /* yacc.c:1646 */ +#line 9586 "ripper.c" break; case 437: -#line 3550 "ripper.y" /* yacc.c:1646 */ - { +#line 3574 "ripper.y" + { (yyval.val) = (yyvsp[-1].val); #if 0 (yyval.val)->nd_body->nd_loc = code_loc_gen(&(yylsp[-2]), &(yylsp[0])); nd_set_line((yyval.val), (yylsp[-2]).end_pos.lineno); #endif } -#line 9460 "ripper.c" /* yacc.c:1646 */ +#line 9598 "ripper.c" break; case 438: -#line 3560 "ripper.y" /* yacc.c:1646 */ - { +#line 3584 "ripper.y" + { #if 0 if (nd_type((yyvsp[-1].val)) == NODE_YIELD) { compile_error(p, "block given to yield"); @@ -9479,45 +9617,45 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(method_add_block,v1,v2);(yyval.val)=v3;} } -#line 9478 "ripper.c" /* yacc.c:1646 */ +#line 9616 "ripper.c" break; case 439: -#line 3574 "ripper.y" /* yacc.c:1646 */ - { +#line 3598 "ripper.y" + { #if 0 (yyval.val) = new_qcall(p, (yyvsp[-2].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-3].val);v2=(yyvsp[-2].val);v3=(yyvsp[-1].val);v4=dispatch3(call,v1,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=v6==Qundef ? v5 : dispatch2(method_add_arg,v5,v6);(yyval.val)=v7;} } -#line 9489 "ripper.c" /* yacc.c:1646 */ +#line 9627 "ripper.c" break; case 440: -#line 3581 "ripper.y" /* yacc.c:1646 */ - { +#line 3605 "ripper.y" + { #if 0 (yyval.val) = new_command_qcall(p, (yyvsp[-3].val), (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-2]), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=(yyvsp[-1].val);v5=dispatch4(command_call,v1,v2,v3,v4);v6=v5;v7=(yyvsp[0].val);v8=v7==Qundef ? v6 : dispatch2(method_add_block,v6,v7);(yyval.val)=v8;} } -#line 9500 "ripper.c" /* yacc.c:1646 */ +#line 9638 "ripper.c" break; case 441: -#line 3588 "ripper.y" /* yacc.c:1646 */ - { +#line 3612 "ripper.y" + { #if 0 (yyval.val) = new_command_qcall(p, (yyvsp[-3].val), (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-2]), &(yyloc)); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=(yyvsp[-1].val);v5=dispatch4(command_call,v1,v2,v3,v4);v6=v5;v7=(yyvsp[0].val);v8=dispatch2(method_add_block,v6,v7);(yyval.val)=v8;} } -#line 9511 "ripper.c" /* yacc.c:1646 */ +#line 9649 "ripper.c" break; case 442: -#line 3597 "ripper.y" /* yacc.c:1646 */ - { +#line 3621 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val); (yyval.val)->nd_args = (yyvsp[0].val); @@ -9525,93 +9663,93 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-1].val);v2=dispatch1(fcall,v1);v3=v2;v4=(yyvsp[0].val);v5=dispatch2(method_add_arg,v3,v4);(yyval.val)=v5;} } -#line 9524 "ripper.c" /* yacc.c:1646 */ +#line 9662 "ripper.c" break; case 443: -#line 3606 "ripper.y" /* yacc.c:1646 */ - { +#line 3630 "ripper.y" + { #if 0 (yyval.val) = new_qcall(p, (yyvsp[-2].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); nd_set_line((yyval.val), (yylsp[-1]).end_pos.lineno); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-3].val);v2=(yyvsp[-2].val);v3=(yyvsp[-1].val);v4=dispatch3(call,v1,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=v6==Qundef ? v5 : dispatch2(method_add_arg,v5,v6);(yyval.val)=v7;} } -#line 9536 "ripper.c" /* yacc.c:1646 */ +#line 9674 "ripper.c" break; case 444: -#line 3614 "ripper.y" /* yacc.c:1646 */ - { +#line 3638 "ripper.y" + { #if 0 (yyval.val) = new_qcall(p, ID2VAL(idCOLON2), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); nd_set_line((yyval.val), (yylsp[-1]).end_pos.lineno); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-3].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[-1].val);v4=dispatch3(call,v1,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(method_add_arg,v5,v6);(yyval.val)=v7;} } -#line 9548 "ripper.c" /* yacc.c:1646 */ +#line 9686 "ripper.c" break; case 445: -#line 3622 "ripper.y" /* yacc.c:1646 */ - { +#line 3646 "ripper.y" + { #if 0 (yyval.val) = new_qcall(p, ID2VAL(idCOLON2), (yyvsp[-2].val), (yyvsp[0].val), Qnull, &(yylsp[0]), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[0].val);v4=dispatch3(call,v1,v2,v3);(yyval.val)=v4;} } -#line 9559 "ripper.c" /* yacc.c:1646 */ +#line 9697 "ripper.c" break; case 446: -#line 3629 "ripper.y" /* yacc.c:1646 */ - { +#line 3653 "ripper.y" + { #if 0 (yyval.val) = new_qcall(p, (yyvsp[-1].val), (yyvsp[-2].val), ID2VAL(idCall), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); nd_set_line((yyval.val), (yylsp[-1]).end_pos.lineno); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=ID2VAL(idCall);v4=dispatch3(call,v1,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(method_add_arg,v5,v6);(yyval.val)=v7;} } -#line 9571 "ripper.c" /* yacc.c:1646 */ +#line 9709 "ripper.c" break; case 447: -#line 3637 "ripper.y" /* yacc.c:1646 */ - { +#line 3661 "ripper.y" + { #if 0 (yyval.val) = new_qcall(p, ID2VAL(idCOLON2), (yyvsp[-2].val), ID2VAL(idCall), (yyvsp[0].val), &(yylsp[-1]), &(yyloc)); nd_set_line((yyval.val), (yylsp[-1]).end_pos.lineno); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-2].val);v2=ID2VAL(idCOLON2);v3=ID2VAL(idCall);v4=dispatch3(call,v1,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(method_add_arg,v5,v6);(yyval.val)=v7;} } -#line 9583 "ripper.c" /* yacc.c:1646 */ +#line 9721 "ripper.c" break; case 448: -#line 3645 "ripper.y" /* yacc.c:1646 */ - { +#line 3669 "ripper.y" + { #if 0 (yyval.val) = NEW_SUPER((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(super,v1);(yyval.val)=v2;} } -#line 9594 "ripper.c" /* yacc.c:1646 */ +#line 9732 "ripper.c" break; case 449: -#line 3652 "ripper.y" /* yacc.c:1646 */ - { +#line 3676 "ripper.y" + { #if 0 (yyval.val) = NEW_ZSUPER(&(yyloc)); #endif {VALUE v1;v1=dispatch0(zsuper);(yyval.val)=v1;} } -#line 9605 "ripper.c" /* yacc.c:1646 */ +#line 9743 "ripper.c" break; case 450: -#line 3659 "ripper.y" /* yacc.c:1646 */ - { +#line 3683 "ripper.y" + { #if 0 if ((yyvsp[-3].val) && nd_type((yyvsp[-3].val)) == NODE_SELF) (yyval.val) = NEW_FCALL(tAREF, (yyvsp[-1].val), &(yyloc)); @@ -9621,59 +9759,59 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=escape_Qundef((yyvsp[-1].val));v3=dispatch2(aref,v1,v2);(yyval.val)=v3;} } -#line 9620 "ripper.c" /* yacc.c:1646 */ +#line 9758 "ripper.c" break; case 451: -#line 3672 "ripper.y" /* yacc.c:1646 */ - { +#line 3696 "ripper.y" + { (yyval.val) = (yyvsp[-1].val); #if 0 (yyval.val)->nd_body->nd_loc = code_loc_gen(&(yylsp[-2]), &(yylsp[0])); nd_set_line((yyval.val), (yylsp[-2]).end_pos.lineno); #endif } -#line 9632 "ripper.c" /* yacc.c:1646 */ +#line 9770 "ripper.c" break; case 452: -#line 3680 "ripper.y" /* yacc.c:1646 */ - { +#line 3704 "ripper.y" + { (yyval.val) = (yyvsp[-1].val); #if 0 (yyval.val)->nd_body->nd_loc = code_loc_gen(&(yylsp[-2]), &(yylsp[0])); nd_set_line((yyval.val), (yylsp[-2]).end_pos.lineno); #endif } -#line 9644 "ripper.c" /* yacc.c:1646 */ +#line 9782 "ripper.c" break; case 453: -#line 3689 "ripper.y" /* yacc.c:1646 */ - {(yyval.vars) = dyna_push(p);} -#line 9650 "ripper.c" /* yacc.c:1646 */ +#line 3713 "ripper.y" + {(yyval.vars) = dyna_push(p);} +#line 9788 "ripper.c" break; case 454: -#line 3690 "ripper.y" /* yacc.c:1646 */ - { +#line 3714 "ripper.y" + { (yyval.num) = p->max_numparam; p->max_numparam = 0; } -#line 9659 "ripper.c" /* yacc.c:1646 */ +#line 9797 "ripper.c" break; case 455: -#line 3694 "ripper.y" /* yacc.c:1646 */ - { +#line 3718 "ripper.y" + { (yyval.node) = numparam_push(p); } -#line 9667 "ripper.c" /* yacc.c:1646 */ +#line 9805 "ripper.c" break; case 456: -#line 3698 "ripper.y" /* yacc.c:1646 */ - { +#line 3722 "ripper.y" + { int max_numparam = p->max_numparam; p->max_numparam = (yyvsp[-3].num); (yyvsp[-1].val) = args_with_numbered(p, (yyvsp[-1].val), max_numparam); @@ -9684,36 +9822,36 @@ YYLTYPE yylloc = yyloc_default; numparam_pop(p, (yyvsp[-2].node)); dyna_pop(p, (yyvsp[-4].vars)); } -#line 9683 "ripper.c" /* yacc.c:1646 */ +#line 9821 "ripper.c" break; case 457: -#line 3711 "ripper.y" /* yacc.c:1646 */ - {(yyval.vars) = dyna_push(p);} -#line 9689 "ripper.c" /* yacc.c:1646 */ +#line 3735 "ripper.y" + {(yyval.vars) = dyna_push(p);} +#line 9827 "ripper.c" break; case 458: -#line 3712 "ripper.y" /* yacc.c:1646 */ - { +#line 3736 "ripper.y" + { (yyval.num) = p->max_numparam; p->max_numparam = 0; } -#line 9698 "ripper.c" /* yacc.c:1646 */ +#line 9836 "ripper.c" break; case 459: -#line 3716 "ripper.y" /* yacc.c:1646 */ - { +#line 3740 "ripper.y" + { (yyval.node) = numparam_push(p); CMDARG_PUSH(0); } -#line 9707 "ripper.c" /* yacc.c:1646 */ +#line 9845 "ripper.c" break; case 460: -#line 3721 "ripper.y" /* yacc.c:1646 */ - { +#line 3745 "ripper.y" + { int max_numparam = p->max_numparam; p->max_numparam = (yyvsp[-3].num); (yyvsp[-1].val) = args_with_numbered(p, (yyvsp[-1].val), max_numparam); @@ -9725,185 +9863,185 @@ YYLTYPE yylloc = yyloc_default; numparam_pop(p, (yyvsp[-2].node)); dyna_pop(p, (yyvsp[-4].vars)); } -#line 9724 "ripper.c" /* yacc.c:1646 */ +#line 9862 "ripper.c" break; case 461: -#line 3736 "ripper.y" /* yacc.c:1646 */ - { +#line 3760 "ripper.y" + { #if 0 check_literal_when(p, (yyvsp[0].val), &(yylsp[0])); (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add,v2,v3);(yyval.val)=v4;} } -#line 9736 "ripper.c" /* yacc.c:1646 */ +#line 9874 "ripper.c" break; case 462: -#line 3744 "ripper.y" /* yacc.c:1646 */ - { +#line 3768 "ripper.y" + { #if 0 (yyval.val) = NEW_SPLAT((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add_star,v2,v3);(yyval.val)=v4;} } -#line 9747 "ripper.c" /* yacc.c:1646 */ +#line 9885 "ripper.c" break; case 463: -#line 3751 "ripper.y" /* yacc.c:1646 */ - { +#line 3775 "ripper.y" + { #if 0 check_literal_when(p, (yyvsp[0].val), &(yylsp[0])); (yyval.val) = last_arg_append(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(args_add,v1,v2);(yyval.val)=v3;} } -#line 9759 "ripper.c" /* yacc.c:1646 */ +#line 9897 "ripper.c" break; case 464: -#line 3759 "ripper.y" /* yacc.c:1646 */ - { +#line 3783 "ripper.y" + { #if 0 (yyval.val) = rest_arg_append(p, (yyvsp[-3].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=(yyvsp[0].val);v3=dispatch2(args_add_star,v1,v2);(yyval.val)=v3;} } -#line 9770 "ripper.c" /* yacc.c:1646 */ +#line 9908 "ripper.c" break; case 465: -#line 3770 "ripper.y" /* yacc.c:1646 */ - { +#line 3794 "ripper.y" + { #if 0 (yyval.val) = NEW_WHEN((yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); fixpos((yyval.val), (yyvsp[-3].val)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-3].val);v2=(yyvsp[-1].val);v3=escape_Qundef((yyvsp[0].val));v4=dispatch3(when,v1,v2,v3);(yyval.val)=v4;} } -#line 9782 "ripper.c" /* yacc.c:1646 */ +#line 9920 "ripper.c" break; case 468: -#line 3784 "ripper.y" /* yacc.c:1646 */ - { +#line 3808 "ripper.y" + { SET_LEX_STATE(EXPR_BEG|EXPR_LABEL); p->command_start = FALSE; (yyval.num) = p->in_kwarg; p->in_kwarg = 1; } -#line 9793 "ripper.c" /* yacc.c:1646 */ +#line 9931 "ripper.c" break; case 469: -#line 3790 "ripper.y" /* yacc.c:1646 */ - {(yyval.tbl) = push_pvtbl(p);} -#line 9799 "ripper.c" /* yacc.c:1646 */ +#line 3814 "ripper.y" + {(yyval.tbl) = push_pvtbl(p);} +#line 9937 "ripper.c" break; case 470: -#line 3791 "ripper.y" /* yacc.c:1646 */ - {(yyval.tbl) = push_pktbl(p);} -#line 9805 "ripper.c" /* yacc.c:1646 */ +#line 3815 "ripper.y" + {(yyval.tbl) = push_pktbl(p);} +#line 9943 "ripper.c" break; case 471: -#line 3793 "ripper.y" /* yacc.c:1646 */ - {pop_pktbl(p, (yyvsp[-2].tbl));} -#line 9811 "ripper.c" /* yacc.c:1646 */ +#line 3817 "ripper.y" + {pop_pktbl(p, (yyvsp[-2].tbl));} +#line 9949 "ripper.c" break; case 472: -#line 3794 "ripper.y" /* yacc.c:1646 */ - {pop_pvtbl(p, (yyvsp[-4].tbl));} -#line 9817 "ripper.c" /* yacc.c:1646 */ +#line 3818 "ripper.y" + {pop_pvtbl(p, (yyvsp[-4].tbl));} +#line 9955 "ripper.c" break; case 473: -#line 3795 "ripper.y" /* yacc.c:1646 */ - { +#line 3819 "ripper.y" + { p->in_kwarg = !!(yyvsp[-6].num); } -#line 9825 "ripper.c" /* yacc.c:1646 */ +#line 9963 "ripper.c" break; case 474: -#line 3800 "ripper.y" /* yacc.c:1646 */ - { +#line 3824 "ripper.y" + { #if 0 (yyval.val) = NEW_IN((yyvsp[-6].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-6].val);v2=(yyvsp[-1].val);v3=escape_Qundef((yyvsp[0].val));v4=dispatch3(in,v1,v2,v3);(yyval.val)=v4;} } -#line 9836 "ripper.c" /* yacc.c:1646 */ +#line 9974 "ripper.c" break; case 478: -#line 3814 "ripper.y" /* yacc.c:1646 */ - { +#line 3838 "ripper.y" + { #if 0 (yyval.val) = new_if(p, (yyvsp[0].val), remove_begin((yyvsp[-2].val)), 0, &(yyloc)); fixpos((yyval.val), (yyvsp[0].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[0].val);v2=(yyvsp[-2].val);v3=dispatch2(if_mod,v1,v2);(yyval.val)=v3;} } -#line 9848 "ripper.c" /* yacc.c:1646 */ +#line 9986 "ripper.c" break; case 479: -#line 3822 "ripper.y" /* yacc.c:1646 */ - { +#line 3846 "ripper.y" + { #if 0 (yyval.val) = new_unless(p, (yyvsp[0].val), remove_begin((yyvsp[-2].val)), 0, &(yyloc)); fixpos((yyval.val), (yyvsp[0].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[0].val);v2=(yyvsp[-2].val);v3=dispatch2(unless_mod,v1,v2);(yyval.val)=v3;} } -#line 9860 "ripper.c" /* yacc.c:1646 */ +#line 9998 "ripper.c" break; case 481: -#line 3833 "ripper.y" /* yacc.c:1646 */ - { +#line 3857 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, Qnone, 1, 0, Qnone, &(yyloc)); (yyval.val) = new_array_pattern(p, Qnone, get_value((yyvsp[-1].val)), (yyval.val), &(yyloc)); } -#line 9869 "ripper.c" /* yacc.c:1646 */ +#line 10007 "ripper.c" break; case 482: -#line 3838 "ripper.y" /* yacc.c:1646 */ - { +#line 3862 "ripper.y" + { (yyval.val) = new_array_pattern(p, Qnone, get_value((yyvsp[-2].val)), (yyvsp[0].val), &(yyloc)); #if 0 nd_set_first_loc((yyval.val), (yylsp[-2]).beg_pos); #endif } -#line 9881 "ripper.c" /* yacc.c:1646 */ +#line 10019 "ripper.c" break; case 483: -#line 3846 "ripper.y" /* yacc.c:1646 */ - { +#line 3870 "ripper.y" + { (yyval.val) = new_array_pattern(p, Qnone, Qnone, (yyvsp[0].val), &(yyloc)); } -#line 9889 "ripper.c" /* yacc.c:1646 */ +#line 10027 "ripper.c" break; case 484: -#line 3850 "ripper.y" /* yacc.c:1646 */ - { +#line 3874 "ripper.y" + { (yyval.val) = new_hash_pattern(p, Qnone, (yyvsp[0].val), &(yyloc)); } -#line 9897 "ripper.c" /* yacc.c:1646 */ +#line 10035 "ripper.c" break; case 486: -#line 3859 "ripper.y" /* yacc.c:1646 */ - { +#line 3883 "ripper.y" + { #if 0 NODE *n = NEW_LIST((yyvsp[-2].val), &(yyloc)); n = list_append(p, n, (yyvsp[0].val)); @@ -9911,35 +10049,35 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=STATIC_ID2SYM(id_assoc);v3=(yyvsp[0].val);v4=dispatch3(binary,v1,v2,v3);(yyval.val)=v4;} } -#line 9910 "ripper.c" /* yacc.c:1646 */ +#line 10048 "ripper.c" break; case 488: -#line 3871 "ripper.y" /* yacc.c:1646 */ - { +#line 3895 "ripper.y" + { #if 0 (yyval.val) = NEW_NODE(NODE_OR, (yyvsp[-2].val), (yyvsp[0].val), 0, &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=STATIC_ID2SYM(idOr);v3=(yyvsp[0].val);v4=dispatch3(binary,v1,v2,v3);(yyval.val)=v4;} } -#line 9921 "ripper.c" /* yacc.c:1646 */ +#line 10059 "ripper.c" break; case 490: -#line 3880 "ripper.y" /* yacc.c:1646 */ - {(yyval.tbl) = push_pktbl(p);} -#line 9927 "ripper.c" /* yacc.c:1646 */ +#line 3904 "ripper.y" + {(yyval.tbl) = push_pktbl(p);} +#line 10065 "ripper.c" break; case 491: -#line 3881 "ripper.y" /* yacc.c:1646 */ - {(yyval.tbl) = push_pktbl(p);} -#line 9933 "ripper.c" /* yacc.c:1646 */ +#line 3905 "ripper.y" + {(yyval.tbl) = push_pktbl(p);} +#line 10071 "ripper.c" break; case 493: -#line 3885 "ripper.y" /* yacc.c:1646 */ - { +#line 3909 "ripper.y" + { pop_pktbl(p, (yyvsp[-2].tbl)); (yyval.val) = new_array_pattern(p, (yyvsp[-3].val), Qnone, (yyvsp[-1].val), &(yyloc)); #if 0 @@ -9947,12 +10085,12 @@ YYLTYPE yylloc = yyloc_default; #endif } -#line 9946 "ripper.c" /* yacc.c:1646 */ +#line 10084 "ripper.c" break; case 494: -#line 3894 "ripper.y" /* yacc.c:1646 */ - { +#line 3918 "ripper.y" + { pop_pktbl(p, (yyvsp[-2].tbl)); (yyval.val) = new_hash_pattern(p, (yyvsp[-3].val), (yyvsp[-1].val), &(yyloc)); #if 0 @@ -9960,21 +10098,21 @@ YYLTYPE yylloc = yyloc_default; #endif } -#line 9959 "ripper.c" /* yacc.c:1646 */ +#line 10097 "ripper.c" break; case 495: -#line 3903 "ripper.y" /* yacc.c:1646 */ - { +#line 3927 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, Qnone, 0, 0, Qnone, &(yyloc)); (yyval.val) = new_array_pattern(p, (yyvsp[-2].val), Qnone, (yyval.val), &(yyloc)); } -#line 9968 "ripper.c" /* yacc.c:1646 */ +#line 10106 "ripper.c" break; case 496: -#line 3908 "ripper.y" /* yacc.c:1646 */ - { +#line 3932 "ripper.y" + { pop_pktbl(p, (yyvsp[-2].tbl)); (yyval.val) = new_array_pattern(p, (yyvsp[-3].val), Qnone, (yyvsp[-1].val), &(yyloc)); #if 0 @@ -9982,12 +10120,12 @@ YYLTYPE yylloc = yyloc_default; #endif } -#line 9981 "ripper.c" /* yacc.c:1646 */ +#line 10119 "ripper.c" break; case 497: -#line 3917 "ripper.y" /* yacc.c:1646 */ - { +#line 3941 "ripper.y" + { pop_pktbl(p, (yyvsp[-2].tbl)); (yyval.val) = new_hash_pattern(p, (yyvsp[-3].val), (yyvsp[-1].val), &(yyloc)); #if 0 @@ -9995,89 +10133,84 @@ YYLTYPE yylloc = yyloc_default; #endif } -#line 9994 "ripper.c" /* yacc.c:1646 */ +#line 10132 "ripper.c" break; case 498: -#line 3926 "ripper.y" /* yacc.c:1646 */ - { +#line 3950 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, Qnone, 0, 0, Qnone, &(yyloc)); (yyval.val) = new_array_pattern(p, (yyvsp[-2].val), Qnone, (yyval.val), &(yyloc)); } -#line 10003 "ripper.c" /* yacc.c:1646 */ +#line 10141 "ripper.c" break; case 499: -#line 3930 "ripper.y" /* yacc.c:1646 */ - {(yyval.tbl) = push_pktbl(p);} -#line 10009 "ripper.c" /* yacc.c:1646 */ +#line 3954 "ripper.y" + {(yyval.tbl) = push_pktbl(p);} +#line 10147 "ripper.c" break; case 500: -#line 3931 "ripper.y" /* yacc.c:1646 */ - { +#line 3955 "ripper.y" + { pop_pktbl(p, (yyvsp[-2].tbl)); (yyval.val) = new_array_pattern(p, Qnone, Qnone, (yyvsp[-1].val), &(yyloc)); } -#line 10018 "ripper.c" /* yacc.c:1646 */ +#line 10156 "ripper.c" break; case 501: -#line 3936 "ripper.y" /* yacc.c:1646 */ - { +#line 3960 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, Qnone, 0, 0, Qnone, &(yyloc)); (yyval.val) = new_array_pattern(p, Qnone, Qnone, (yyval.val), &(yyloc)); } -#line 10027 "ripper.c" /* yacc.c:1646 */ +#line 10165 "ripper.c" break; case 502: -#line 3941 "ripper.y" /* yacc.c:1646 */ - { - (yyval.tbl) = push_pktbl(p); - (yyvsp[0].num) = p->in_kwarg; - p->in_kwarg = 0; - } -#line 10037 "ripper.c" /* yacc.c:1646 */ +#line 3964 "ripper.y" + {(yyval.tbl) = push_pktbl(p);} +#line 10171 "ripper.c" break; case 503: -#line 3947 "ripper.y" /* yacc.c:1646 */ - { +#line 3965 "ripper.y" + { pop_pktbl(p, (yyvsp[-2].tbl)); - p->in_kwarg = (yyvsp[-3].num); (yyval.val) = new_hash_pattern(p, Qnone, (yyvsp[-1].val), &(yyloc)); } -#line 10047 "ripper.c" /* yacc.c:1646 */ +#line 10180 "ripper.c" break; case 504: -#line 3953 "ripper.y" /* yacc.c:1646 */ - { +#line 3970 "ripper.y" + { (yyval.val) = new_hash_pattern_tail(p, Qnone, 0, &(yyloc)); (yyval.val) = new_hash_pattern(p, Qnone, (yyval.val), &(yyloc)); } -#line 10056 "ripper.c" /* yacc.c:1646 */ +#line 10189 "ripper.c" break; case 505: -#line 3957 "ripper.y" /* yacc.c:1646 */ - {(yyval.tbl) = push_pktbl(p);} -#line 10062 "ripper.c" /* yacc.c:1646 */ +#line 3974 "ripper.y" + {(yyval.tbl) = push_pktbl(p);} +#line 10195 "ripper.c" break; case 506: -#line 3958 "ripper.y" /* yacc.c:1646 */ - { +#line 3975 "ripper.y" + { pop_pktbl(p, (yyvsp[-2].tbl)); (yyval.val) = (yyvsp[-1].val); } -#line 10071 "ripper.c" /* yacc.c:1646 */ +#line 10204 "ripper.c" break; case 507: -#line 3965 "ripper.y" /* yacc.c:1646 */ - { +#line 3982 "ripper.y" + { #if 0 NODE *pre_args = NEW_LIST((yyvsp[0].val), &(yyloc)); (yyval.val) = new_array_pattern_tail(p, pre_args, 0, 0, Qnone, &(yyloc)); @@ -10085,20 +10218,20 @@ YYLTYPE yylloc = yyloc_default; (yyval.val) = new_array_pattern_tail(p, rb_ary_new_from_args(1, get_value((yyvsp[0].val))), 0, 0, Qnone, &(yyloc)); } -#line 10084 "ripper.c" /* yacc.c:1646 */ +#line 10217 "ripper.c" break; case 508: -#line 3974 "ripper.y" /* yacc.c:1646 */ - { +#line 3991 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, (yyvsp[0].val), 1, 0, Qnone, &(yyloc)); } -#line 10092 "ripper.c" /* yacc.c:1646 */ +#line 10225 "ripper.c" break; case 509: -#line 3978 "ripper.y" /* yacc.c:1646 */ - { +#line 3995 "ripper.y" + { #if 0 (yyval.val) = new_array_pattern_tail(p, list_concat((yyvsp[-1].val), (yyvsp[0].val)), 0, 0, Qnone, &(yyloc)); #endif @@ -10106,194 +10239,186 @@ YYLTYPE yylloc = yyloc_default; (yyval.val) = new_array_pattern_tail(p, pre_args, 0, 0, Qnone, &(yyloc)); } -#line 10105 "ripper.c" /* yacc.c:1646 */ +#line 10238 "ripper.c" break; case 510: -#line 3987 "ripper.y" /* yacc.c:1646 */ - { +#line 4004 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, (yyvsp[-2].val), 1, (yyvsp[0].val), Qnone, &(yyloc)); } -#line 10113 "ripper.c" /* yacc.c:1646 */ +#line 10246 "ripper.c" break; case 511: -#line 3991 "ripper.y" /* yacc.c:1646 */ - { +#line 4008 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, (yyvsp[-4].val), 1, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); } -#line 10121 "ripper.c" /* yacc.c:1646 */ +#line 10254 "ripper.c" break; case 512: -#line 3995 "ripper.y" /* yacc.c:1646 */ - { +#line 4012 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, (yyvsp[-1].val), 1, 0, Qnone, &(yyloc)); } -#line 10129 "ripper.c" /* yacc.c:1646 */ +#line 10262 "ripper.c" break; case 513: -#line 3999 "ripper.y" /* yacc.c:1646 */ - { +#line 4016 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, (yyvsp[-3].val), 1, 0, (yyvsp[0].val), &(yyloc)); } -#line 10137 "ripper.c" /* yacc.c:1646 */ +#line 10270 "ripper.c" break; case 515: -#line 4006 "ripper.y" /* yacc.c:1646 */ - { +#line 4023 "ripper.y" + { (yyval.val) = (yyvsp[-1].val); } -#line 10145 "ripper.c" /* yacc.c:1646 */ +#line 10278 "ripper.c" break; case 516: -#line 4010 "ripper.y" /* yacc.c:1646 */ - { +#line 4027 "ripper.y" + { #if 0 (yyval.val) = list_concat((yyvsp[-2].val), (yyvsp[-1].val)); #endif (yyval.val)=rb_ary_concat((yyvsp[-2].val), get_value((yyvsp[-1].val))); } -#line 10156 "ripper.c" /* yacc.c:1646 */ +#line 10289 "ripper.c" break; case 517: -#line 4019 "ripper.y" /* yacc.c:1646 */ - { +#line 4036 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, Qnone, 1, (yyvsp[0].val), Qnone, &(yyloc)); } -#line 10164 "ripper.c" /* yacc.c:1646 */ +#line 10297 "ripper.c" break; case 518: -#line 4023 "ripper.y" /* yacc.c:1646 */ - { +#line 4040 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, Qnone, 1, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); } -#line 10172 "ripper.c" /* yacc.c:1646 */ +#line 10305 "ripper.c" break; case 519: -#line 4027 "ripper.y" /* yacc.c:1646 */ - { +#line 4044 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, Qnone, 1, 0, Qnone, &(yyloc)); } -#line 10180 "ripper.c" /* yacc.c:1646 */ +#line 10313 "ripper.c" break; case 520: -#line 4031 "ripper.y" /* yacc.c:1646 */ - { +#line 4048 "ripper.y" + { (yyval.val) = new_array_pattern_tail(p, Qnone, 1, 0, (yyvsp[0].val), &(yyloc)); } -#line 10188 "ripper.c" /* yacc.c:1646 */ +#line 10321 "ripper.c" break; case 522: -#line 4038 "ripper.y" /* yacc.c:1646 */ - { +#line 4055 "ripper.y" + { #if 0 (yyval.val) = list_concat((yyvsp[-2].val), (yyvsp[0].val)); #endif (yyval.val)=rb_ary_concat((yyvsp[-2].val), get_value((yyvsp[0].val))); } -#line 10199 "ripper.c" /* yacc.c:1646 */ +#line 10332 "ripper.c" break; case 523: -#line 4047 "ripper.y" /* yacc.c:1646 */ - { +#line 4064 "ripper.y" + { #if 0 (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc)); #endif (yyval.val)=rb_ary_new_from_args(1, get_value((yyvsp[0].val))); } -#line 10210 "ripper.c" /* yacc.c:1646 */ +#line 10343 "ripper.c" break; case 524: -#line 4056 "ripper.y" /* yacc.c:1646 */ - { +#line 4073 "ripper.y" + { (yyval.val) = new_hash_pattern_tail(p, new_unique_key_hash(p, (yyvsp[-2].val), &(yyloc)), (yyvsp[0].val), &(yyloc)); } -#line 10218 "ripper.c" /* yacc.c:1646 */ +#line 10351 "ripper.c" break; case 525: -#line 4060 "ripper.y" /* yacc.c:1646 */ - { +#line 4077 "ripper.y" + { (yyval.val) = new_hash_pattern_tail(p, new_unique_key_hash(p, (yyvsp[0].val), &(yyloc)), 0, &(yyloc)); } -#line 10226 "ripper.c" /* yacc.c:1646 */ +#line 10359 "ripper.c" break; case 526: -#line 4064 "ripper.y" /* yacc.c:1646 */ - { - (yyval.val) = new_hash_pattern_tail(p, new_unique_key_hash(p, (yyvsp[-1].val), &(yyloc)), 0, &(yyloc)); +#line 4081 "ripper.y" + { + (yyval.val) = new_hash_pattern_tail(p, new_hash(p, Qnone, &(yyloc)), (yyvsp[0].val), &(yyloc)); } -#line 10234 "ripper.c" /* yacc.c:1646 */ +#line 10367 "ripper.c" break; case 527: -#line 4068 "ripper.y" /* yacc.c:1646 */ - { - (yyval.val) = new_hash_pattern_tail(p, new_hash(p, Qnone, &(yyloc)), (yyvsp[0].val), &(yyloc)); +#line 4085 "ripper.y" + { + (yyval.val) = new_hash_pattern_tail(p, new_unique_key_hash(p, (yyvsp[-2].val), &(yyloc)), ID2VAL(idNil), &(yyloc)); } -#line 10242 "ripper.c" /* yacc.c:1646 */ +#line 10375 "ripper.c" break; case 528: -#line 4072 "ripper.y" /* yacc.c:1646 */ - { - (yyval.val) = new_hash_pattern_tail(p, new_unique_key_hash(p, (yyvsp[-2].val), &(yyloc)), ID2VAL(idNil), &(yyloc)); +#line 4089 "ripper.y" + { + (yyval.val) = new_hash_pattern_tail(p, new_hash(p, Qnone, &(yyloc)), ID2VAL(idNil), &(yyloc)); } -#line 10250 "ripper.c" /* yacc.c:1646 */ +#line 10383 "ripper.c" break; case 529: -#line 4076 "ripper.y" /* yacc.c:1646 */ - { - (yyval.val) = new_hash_pattern_tail(p, new_hash(p, Qnone, &(yyloc)), ID2VAL(idNil), &(yyloc)); - } -#line 10258 "ripper.c" /* yacc.c:1646 */ +#line 4095 "ripper.y" + {(yyval.val)=rb_ary_new_from_args(1, (yyvsp[0].val));} +#line 10389 "ripper.c" break; case 530: -#line 4082 "ripper.y" /* yacc.c:1646 */ - {(yyval.val)=rb_ary_new_from_args(1, (yyvsp[0].val));} -#line 10264 "ripper.c" /* yacc.c:1646 */ - break; - - case 531: -#line 4084 "ripper.y" /* yacc.c:1646 */ - { +#line 4097 "ripper.y" + { #if 0 (yyval.val) = list_concat((yyvsp[-2].val), (yyvsp[0].val)); #endif (yyval.val)=rb_ary_push((yyvsp[-2].val), (yyvsp[0].val)); } -#line 10275 "ripper.c" /* yacc.c:1646 */ +#line 10400 "ripper.c" break; - case 532: -#line 4093 "ripper.y" /* yacc.c:1646 */ - { + case 531: +#line 4106 "ripper.y" + { error_duplicate_pattern_key(p, get_id((yyvsp[-1].val)), &(yylsp[-1])); #if 0 (yyval.val) = list_append(p, NEW_LIST(NEW_LIT(ID2SYM((yyvsp[-1].val)), &(yyloc)), &(yyloc)), (yyvsp[0].val)); #endif (yyval.val)=rb_ary_new_from_args(2, get_value((yyvsp[-1].val)), get_value((yyvsp[0].val))); } -#line 10287 "ripper.c" /* yacc.c:1646 */ +#line 10412 "ripper.c" break; - case 533: -#line 4101 "ripper.y" /* yacc.c:1646 */ - { + case 532: +#line 4114 "ripper.y" + { error_duplicate_pattern_key(p, get_id((yyvsp[0].val)), &(yylsp[0])); if ((yyvsp[0].val) && !is_local_id(get_id((yyvsp[0].val)))) { yyerror1(&(yylsp[0]), "key must be valid as local variables"); @@ -10304,12 +10429,12 @@ YYLTYPE yylloc = yyloc_default; #endif (yyval.val)=rb_ary_new_from_args(2, get_value((yyvsp[0].val)), Qnil); } -#line 10303 "ripper.c" /* yacc.c:1646 */ +#line 10428 "ripper.c" break; - case 535: -#line 4116 "ripper.y" /* yacc.c:1646 */ - { + case 534: +#line 4129 "ripper.y" + { YYLTYPE loc = code_loc_gen(&(yylsp[-2]), &(yylsp[0])); #if 0 if (!(yyvsp[-1].val) || nd_type((yyvsp[-1].val)) == NODE_STR) { @@ -10329,36 +10454,36 @@ YYLTYPE yylloc = yyloc_default; (yyval.val) = 0; } } -#line 10328 "ripper.c" /* yacc.c:1646 */ +#line 10453 "ripper.c" break; - case 536: -#line 4139 "ripper.y" /* yacc.c:1646 */ - { + case 535: +#line 4152 "ripper.y" + { (yyval.val) = (yyvsp[0].val); } -#line 10336 "ripper.c" /* yacc.c:1646 */ +#line 10461 "ripper.c" break; - case 537: -#line 4143 "ripper.y" /* yacc.c:1646 */ - { + case 536: +#line 4156 "ripper.y" + { (yyval.val) = 0; } -#line 10344 "ripper.c" /* yacc.c:1646 */ +#line 10469 "ripper.c" break; - case 538: -#line 4149 "ripper.y" /* yacc.c:1646 */ - { + case 537: +#line 4162 "ripper.y" + { (yyval.val) = 0; } -#line 10352 "ripper.c" /* yacc.c:1646 */ +#line 10477 "ripper.c" break; - case 540: -#line 4156 "ripper.y" /* yacc.c:1646 */ - { + case 539: +#line 4169 "ripper.y" + { #if 0 value_expr((yyvsp[-2].val)); value_expr((yyvsp[0].val)); @@ -10366,12 +10491,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(dot2,v1,v2);(yyval.val)=v3;} } -#line 10365 "ripper.c" /* yacc.c:1646 */ +#line 10490 "ripper.c" break; - case 541: -#line 4165 "ripper.y" /* yacc.c:1646 */ - { + case 540: +#line 4178 "ripper.y" + { #if 0 value_expr((yyvsp[-2].val)); value_expr((yyvsp[0].val)); @@ -10379,12 +10504,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(dot3,v1,v2);(yyval.val)=v3;} } -#line 10378 "ripper.c" /* yacc.c:1646 */ +#line 10503 "ripper.c" break; - case 542: -#line 4174 "ripper.y" /* yacc.c:1646 */ - { + case 541: +#line 4187 "ripper.y" + { #if 0 YYLTYPE loc; loc.beg_pos = (yylsp[0]).end_pos; @@ -10395,12 +10520,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=Qnil;v3=dispatch2(dot2,v1,v2);(yyval.val)=v3;} } -#line 10394 "ripper.c" /* yacc.c:1646 */ +#line 10519 "ripper.c" break; - case 543: -#line 4186 "ripper.y" /* yacc.c:1646 */ - { + case 542: +#line 4199 "ripper.y" + { #if 0 YYLTYPE loc; loc.beg_pos = (yylsp[0]).end_pos; @@ -10411,12 +10536,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=Qnil;v3=dispatch2(dot3,v1,v2);(yyval.val)=v3;} } -#line 10410 "ripper.c" /* yacc.c:1646 */ +#line 10535 "ripper.c" break; - case 547: -#line 4201 "ripper.y" /* yacc.c:1646 */ - { + case 546: +#line 4214 "ripper.y" + { #if 0 YYLTYPE loc; loc.beg_pos = (yylsp[-1]).beg_pos; @@ -10427,12 +10552,12 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=Qnil;v2=(yyvsp[0].val);v3=dispatch2(dot2,v1,v2);(yyval.val)=v3;} } -#line 10426 "ripper.c" /* yacc.c:1646 */ +#line 10551 "ripper.c" break; - case 548: -#line 4213 "ripper.y" /* yacc.c:1646 */ - { + case 547: +#line 4226 "ripper.y" + { #if 0 YYLTYPE loc; loc.beg_pos = (yylsp[-1]).beg_pos; @@ -10443,54 +10568,54 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=Qnil;v2=(yyvsp[0].val);v3=dispatch2(dot3,v1,v2);(yyval.val)=v3;} } -#line 10442 "ripper.c" /* yacc.c:1646 */ +#line 10567 "ripper.c" break; - case 557: -#line 4235 "ripper.y" /* yacc.c:1646 */ - { + case 556: +#line 4248 "ripper.y" + { #if 0 if (!((yyval.val) = gettable(p, (yyvsp[0].val), &(yyloc)))) (yyval.val) = NEW_BEGIN(0, &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;} } -#line 10453 "ripper.c" /* yacc.c:1646 */ +#line 10578 "ripper.c" break; - case 558: -#line 4242 "ripper.y" /* yacc.c:1646 */ - { + case 557: +#line 4255 "ripper.y" + { token_info_push(p, "->", &(yylsp[0])); } -#line 10461 "ripper.c" /* yacc.c:1646 */ +#line 10586 "ripper.c" break; - case 559: -#line 4246 "ripper.y" /* yacc.c:1646 */ - { + case 558: +#line 4259 "ripper.y" + { (yyval.val) = (yyvsp[0].val); #if 0 nd_set_first_loc((yyval.val), (yylsp[-2]).beg_pos); #endif } -#line 10472 "ripper.c" /* yacc.c:1646 */ +#line 10597 "ripper.c" break; - case 560: -#line 4255 "ripper.y" /* yacc.c:1646 */ - { + case 559: +#line 4268 "ripper.y" + { #if 0 error_duplicate_pattern_variable(p, (yyvsp[0].val), &(yylsp[0])); (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc)); #endif (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val))); } -#line 10484 "ripper.c" /* yacc.c:1646 */ +#line 10609 "ripper.c" break; - case 561: -#line 4265 "ripper.y" /* yacc.c:1646 */ - { + case 560: +#line 4278 "ripper.y" + { #if 0 NODE *n = gettable(p, (yyvsp[0].val), &(yyloc)); if (!(nd_type(n) == NODE_LVAR || nd_type(n) == NODE_DVAR)) { @@ -10500,45 +10625,45 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;} } -#line 10499 "ripper.c" /* yacc.c:1646 */ +#line 10624 "ripper.c" break; - case 562: -#line 4278 "ripper.y" /* yacc.c:1646 */ - { + case 561: +#line 4291 "ripper.y" + { #if 0 (yyval.val) = NEW_COLON3((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(top_const_ref,v1);(yyval.val)=v2;} } -#line 10510 "ripper.c" /* yacc.c:1646 */ +#line 10635 "ripper.c" break; - case 563: -#line 4285 "ripper.y" /* yacc.c:1646 */ - { + case 562: +#line 4298 "ripper.y" + { #if 0 (yyval.val) = NEW_COLON2((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(const_path_ref,v1,v2);(yyval.val)=v3;} } -#line 10521 "ripper.c" /* yacc.c:1646 */ +#line 10646 "ripper.c" break; - case 564: -#line 4292 "ripper.y" /* yacc.c:1646 */ - { + case 563: +#line 4305 "ripper.y" + { #if 0 (yyval.val) = gettable(p, (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;} } -#line 10532 "ripper.c" /* yacc.c:1646 */ +#line 10657 "ripper.c" break; - case 565: -#line 4303 "ripper.y" /* yacc.c:1646 */ - { + case 564: +#line 4316 "ripper.y" + { #if 0 (yyval.val) = NEW_RESBODY((yyvsp[-4].val), (yyvsp[-3].val) ? block_append(p, node_assign(p, (yyvsp[-3].val), NEW_ERRINFO(&(yylsp[-3])), &(yylsp[-3])), (yyvsp[-1].val)) : (yyvsp[-1].val), @@ -10547,53 +10672,53 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3,v4,v5;v1=escape_Qundef((yyvsp[-4].val));v2=escape_Qundef((yyvsp[-3].val));v3=escape_Qundef((yyvsp[-1].val));v4=escape_Qundef((yyvsp[0].val));v5=dispatch4(rescue,v1,v2,v3,v4);(yyval.val)=v5;} } -#line 10546 "ripper.c" /* yacc.c:1646 */ +#line 10671 "ripper.c" break; - case 567: -#line 4316 "ripper.y" /* yacc.c:1646 */ - { + case 566: +#line 4329 "ripper.y" + { #if 0 (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc)); #endif (yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val))); } -#line 10557 "ripper.c" /* yacc.c:1646 */ +#line 10682 "ripper.c" break; - case 568: -#line 4323 "ripper.y" /* yacc.c:1646 */ - { + case 567: +#line 4336 "ripper.y" + { #if 0 if (!((yyval.val) = splat_array((yyvsp[0].val)))) (yyval.val) = (yyvsp[0].val); #endif (yyval.val)=(yyvsp[0].val); } -#line 10568 "ripper.c" /* yacc.c:1646 */ +#line 10693 "ripper.c" break; - case 570: -#line 4333 "ripper.y" /* yacc.c:1646 */ - { + case 569: +#line 4346 "ripper.y" + { (yyval.val) = (yyvsp[0].val); } -#line 10576 "ripper.c" /* yacc.c:1646 */ +#line 10701 "ripper.c" break; - case 572: -#line 4340 "ripper.y" /* yacc.c:1646 */ - { + case 571: +#line 4353 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[0].val); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(ensure,v1);(yyval.val)=v2;} } -#line 10587 "ripper.c" /* yacc.c:1646 */ +#line 10712 "ripper.c" break; - case 576: -#line 4354 "ripper.y" /* yacc.c:1646 */ - { + case 575: +#line 4367 "ripper.y" + { #if 0 NODE *node = (yyvsp[0].val); if (!node) { @@ -10607,203 +10732,203 @@ YYLTYPE yylloc = yyloc_default; #endif (yyval.val)=(yyvsp[0].val); } -#line 10606 "ripper.c" /* yacc.c:1646 */ +#line 10731 "ripper.c" break; - case 579: -#line 4373 "ripper.y" /* yacc.c:1646 */ - { + case 578: +#line 4386 "ripper.y" + { #if 0 (yyval.val) = literal_concat(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(string_concat,v1,v2);(yyval.val)=v3;} } -#line 10617 "ripper.c" /* yacc.c:1646 */ +#line 10742 "ripper.c" break; - case 580: -#line 4382 "ripper.y" /* yacc.c:1646 */ - { + case 579: +#line 4395 "ripper.y" + { #if 0 (yyval.val) = heredoc_dedent(p, (yyvsp[-1].val)); if ((yyval.val)) nd_set_loc((yyval.val), &(yyloc)); #endif {VALUE v1,v2;v1=heredoc_dedent(p, (yyvsp[-1].val));v2=dispatch1(string_literal,v1);(yyval.val)=v2;} } -#line 10629 "ripper.c" /* yacc.c:1646 */ +#line 10754 "ripper.c" break; - case 581: -#line 4392 "ripper.y" /* yacc.c:1646 */ - { + case 580: +#line 4405 "ripper.y" + { #if 0 (yyval.val) = new_xstring(p, heredoc_dedent(p, (yyvsp[-1].val)), &(yyloc)); #endif {VALUE v1,v2;v1=heredoc_dedent(p, (yyvsp[-1].val));v2=dispatch1(xstring_literal,v1);(yyval.val)=v2;} } -#line 10640 "ripper.c" /* yacc.c:1646 */ +#line 10765 "ripper.c" break; - case 582: -#line 4401 "ripper.y" /* yacc.c:1646 */ - { + case 581: +#line 4414 "ripper.y" + { (yyval.val) = new_regexp(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 10648 "ripper.c" /* yacc.c:1646 */ +#line 10773 "ripper.c" break; - case 583: -#line 4407 "ripper.y" /* yacc.c:1646 */ - { + case 582: +#line 4420 "ripper.y" + { #if 0 (yyval.val) = make_list((yyvsp[-1].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(array,v1);(yyval.val)=v2;} } -#line 10659 "ripper.c" /* yacc.c:1646 */ +#line 10784 "ripper.c" break; - case 584: -#line 4416 "ripper.y" /* yacc.c:1646 */ - { + case 583: +#line 4429 "ripper.y" + { #if 0 (yyval.val) = 0; #endif {VALUE v1;v1=dispatch0(words_new);(yyval.val)=v1;} } -#line 10670 "ripper.c" /* yacc.c:1646 */ +#line 10795 "ripper.c" break; - case 585: -#line 4423 "ripper.y" /* yacc.c:1646 */ - { + case 584: +#line 4436 "ripper.y" + { #if 0 (yyval.val) = list_append(p, (yyvsp[-2].val), evstr2dstr(p, (yyvsp[-1].val))); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(words_add,v1,v2);(yyval.val)=v3;} } -#line 10681 "ripper.c" /* yacc.c:1646 */ +#line 10806 "ripper.c" break; - case 586: -#line 4432 "ripper.y" /* yacc.c:1646 */ - {{VALUE v1,v2,v3,v4;v1=dispatch0(word_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(word_add,v2,v3);(yyval.val)=v4;}} -#line 10687 "ripper.c" /* yacc.c:1646 */ + case 585: +#line 4445 "ripper.y" + {{VALUE v1,v2,v3,v4;v1=dispatch0(word_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(word_add,v2,v3);(yyval.val)=v4;}} +#line 10812 "ripper.c" break; - case 587: -#line 4434 "ripper.y" /* yacc.c:1646 */ - { + case 586: +#line 4447 "ripper.y" + { #if 0 (yyval.val) = literal_concat(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(word_add,v1,v2);(yyval.val)=v3;} } -#line 10698 "ripper.c" /* yacc.c:1646 */ +#line 10823 "ripper.c" break; - case 588: -#line 4443 "ripper.y" /* yacc.c:1646 */ - { + case 587: +#line 4456 "ripper.y" + { #if 0 (yyval.val) = make_list((yyvsp[-1].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(array,v1);(yyval.val)=v2;} } -#line 10709 "ripper.c" /* yacc.c:1646 */ +#line 10834 "ripper.c" break; - case 589: -#line 4452 "ripper.y" /* yacc.c:1646 */ - { + case 588: +#line 4465 "ripper.y" + { #if 0 (yyval.val) = 0; #endif {VALUE v1;v1=dispatch0(symbols_new);(yyval.val)=v1;} } -#line 10720 "ripper.c" /* yacc.c:1646 */ +#line 10845 "ripper.c" break; - case 590: -#line 4459 "ripper.y" /* yacc.c:1646 */ - { + case 589: +#line 4472 "ripper.y" + { #if 0 (yyval.val) = symbol_append(p, (yyvsp[-2].val), evstr2dstr(p, (yyvsp[-1].val))); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(symbols_add,v1,v2);(yyval.val)=v3;} } -#line 10731 "ripper.c" /* yacc.c:1646 */ +#line 10856 "ripper.c" break; - case 591: -#line 4468 "ripper.y" /* yacc.c:1646 */ - { + case 590: +#line 4481 "ripper.y" + { #if 0 (yyval.val) = make_list((yyvsp[-1].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(array,v1);(yyval.val)=v2;} } -#line 10742 "ripper.c" /* yacc.c:1646 */ +#line 10867 "ripper.c" break; - case 592: -#line 4477 "ripper.y" /* yacc.c:1646 */ - { + case 591: +#line 4490 "ripper.y" + { #if 0 (yyval.val) = make_list((yyvsp[-1].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(array,v1);(yyval.val)=v2;} } -#line 10753 "ripper.c" /* yacc.c:1646 */ +#line 10878 "ripper.c" break; - case 593: -#line 4486 "ripper.y" /* yacc.c:1646 */ - { + case 592: +#line 4499 "ripper.y" + { #if 0 (yyval.val) = 0; #endif {VALUE v1;v1=dispatch0(qwords_new);(yyval.val)=v1;} } -#line 10764 "ripper.c" /* yacc.c:1646 */ +#line 10889 "ripper.c" break; - case 594: -#line 4493 "ripper.y" /* yacc.c:1646 */ - { + case 593: +#line 4506 "ripper.y" + { #if 0 (yyval.val) = list_append(p, (yyvsp[-2].val), (yyvsp[-1].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(qwords_add,v1,v2);(yyval.val)=v3;} } -#line 10775 "ripper.c" /* yacc.c:1646 */ +#line 10900 "ripper.c" break; - case 595: -#line 4502 "ripper.y" /* yacc.c:1646 */ - { + case 594: +#line 4515 "ripper.y" + { #if 0 (yyval.val) = 0; #endif {VALUE v1;v1=dispatch0(qsymbols_new);(yyval.val)=v1;} } -#line 10786 "ripper.c" /* yacc.c:1646 */ +#line 10911 "ripper.c" break; - case 596: -#line 4509 "ripper.y" /* yacc.c:1646 */ - { + case 595: +#line 4522 "ripper.y" + { #if 0 (yyval.val) = symbol_append(p, (yyvsp[-2].val), (yyvsp[-1].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(qsymbols_add,v1,v2);(yyval.val)=v3;} } -#line 10797 "ripper.c" /* yacc.c:1646 */ +#line 10922 "ripper.c" break; - case 597: -#line 4518 "ripper.y" /* yacc.c:1646 */ - { + case 596: +#line 4531 "ripper.y" + { #if 0 (yyval.val) = 0; #endif @@ -10813,12 +10938,12 @@ YYLTYPE yylloc = yyloc_default; (yyval.val) = ripper_new_yylval(p, 0, (yyval.val), 0); } -#line 10812 "ripper.c" /* yacc.c:1646 */ +#line 10937 "ripper.c" break; - case 598: -#line 4529 "ripper.y" /* yacc.c:1646 */ - { + case 597: +#line 4542 "ripper.y" + { #if 0 (yyval.val) = literal_concat(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif @@ -10833,34 +10958,34 @@ YYLTYPE yylloc = yyloc_default; } } -#line 10832 "ripper.c" /* yacc.c:1646 */ +#line 10957 "ripper.c" break; - case 599: -#line 4547 "ripper.y" /* yacc.c:1646 */ - { + case 598: +#line 4560 "ripper.y" + { #if 0 (yyval.val) = 0; #endif {VALUE v1;v1=dispatch0(xstring_new);(yyval.val)=v1;} } -#line 10843 "ripper.c" /* yacc.c:1646 */ +#line 10968 "ripper.c" break; - case 600: -#line 4554 "ripper.y" /* yacc.c:1646 */ - { + case 599: +#line 4567 "ripper.y" + { #if 0 (yyval.val) = literal_concat(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(xstring_add,v1,v2);(yyval.val)=v3;} } -#line 10854 "ripper.c" /* yacc.c:1646 */ +#line 10979 "ripper.c" break; - case 601: -#line 4563 "ripper.y" /* yacc.c:1646 */ - { + case 600: +#line 4576 "ripper.y" + { #if 0 (yyval.val) = 0; #endif @@ -10870,12 +10995,12 @@ YYLTYPE yylloc = yyloc_default; (yyval.val) = ripper_new_yylval(p, 0, (yyval.val), 0); } -#line 10869 "ripper.c" /* yacc.c:1646 */ +#line 10994 "ripper.c" break; - case 602: -#line 4574 "ripper.y" /* yacc.c:1646 */ - { + case 601: +#line 4587 "ripper.y" + { #if 0 NODE *head = (yyvsp[-1].val), *tail = (yyvsp[0].val); if (!head) { @@ -10913,29 +11038,29 @@ YYLTYPE yylloc = yyloc_default; } } -#line 10912 "ripper.c" /* yacc.c:1646 */ +#line 11037 "ripper.c" break; - case 603: -#line 4615 "ripper.y" /* yacc.c:1646 */ - {(yyval.val)=ripper_new_yylval(p, 0, get_value((yyvsp[0].val)), (yyvsp[0].val));} -#line 10918 "ripper.c" /* yacc.c:1646 */ + case 602: +#line 4628 "ripper.y" + {(yyval.val)=ripper_new_yylval(p, 0, get_value((yyvsp[0].val)), (yyvsp[0].val));} +#line 11043 "ripper.c" break; - case 604: -#line 4617 "ripper.y" /* yacc.c:1646 */ - { + case 603: +#line 4630 "ripper.y" + { /* need to backup p->lex.strterm so that a string literal `%&foo,#$&,bar&` can be parsed */ (yyval.strterm) = p->lex.strterm; p->lex.strterm = 0; SET_LEX_STATE(EXPR_BEG); } -#line 10929 "ripper.c" /* yacc.c:1646 */ +#line 11054 "ripper.c" break; - case 605: -#line 4624 "ripper.y" /* yacc.c:1646 */ - { + case 604: +#line 4637 "ripper.y" + { p->lex.strterm = (yyvsp[-1].strterm); #if 0 (yyval.val) = NEW_EVSTR((yyvsp[0].val), &(yyloc)); @@ -10943,58 +11068,58 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(string_dvar,v1);(yyval.val)=v2;} } -#line 10942 "ripper.c" /* yacc.c:1646 */ +#line 11067 "ripper.c" break; - case 606: -#line 4633 "ripper.y" /* yacc.c:1646 */ - { + case 605: +#line 4646 "ripper.y" + { CMDARG_PUSH(0); COND_PUSH(0); } -#line 10951 "ripper.c" /* yacc.c:1646 */ +#line 11076 "ripper.c" break; - case 607: -#line 4637 "ripper.y" /* yacc.c:1646 */ - { + case 606: +#line 4650 "ripper.y" + { /* need to backup p->lex.strterm so that a string literal `%!foo,#{ !0 },bar!` can be parsed */ (yyval.strterm) = p->lex.strterm; p->lex.strterm = 0; } -#line 10961 "ripper.c" /* yacc.c:1646 */ +#line 11086 "ripper.c" break; - case 608: -#line 4642 "ripper.y" /* yacc.c:1646 */ - { + case 607: +#line 4655 "ripper.y" + { (yyval.num) = p->lex.state; SET_LEX_STATE(EXPR_BEG); } -#line 10970 "ripper.c" /* yacc.c:1646 */ +#line 11095 "ripper.c" break; - case 609: -#line 4646 "ripper.y" /* yacc.c:1646 */ - { + case 608: +#line 4659 "ripper.y" + { (yyval.num) = p->lex.brace_nest; p->lex.brace_nest = 0; } -#line 10979 "ripper.c" /* yacc.c:1646 */ +#line 11104 "ripper.c" break; - case 610: -#line 4650 "ripper.y" /* yacc.c:1646 */ - { + case 609: +#line 4663 "ripper.y" + { (yyval.num) = p->heredoc_indent; p->heredoc_indent = 0; } -#line 10988 "ripper.c" /* yacc.c:1646 */ +#line 11113 "ripper.c" break; - case 611: -#line 4655 "ripper.y" /* yacc.c:1646 */ - { + case 610: +#line 4668 "ripper.y" + { COND_POP(); CMDARG_POP(); p->lex.strterm = (yyvsp[-5].strterm); @@ -11008,123 +11133,123 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(string_embexpr,v1);(yyval.val)=v2;} } -#line 11007 "ripper.c" /* yacc.c:1646 */ +#line 11132 "ripper.c" break; - case 612: -#line 4672 "ripper.y" /* yacc.c:1646 */ - { + case 611: +#line 4685 "ripper.y" + { #if 0 (yyval.val) = NEW_GVAR((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;} } -#line 11018 "ripper.c" /* yacc.c:1646 */ +#line 11143 "ripper.c" break; - case 613: -#line 4679 "ripper.y" /* yacc.c:1646 */ - { + case 612: +#line 4692 "ripper.y" + { #if 0 (yyval.val) = NEW_IVAR((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;} } -#line 11029 "ripper.c" /* yacc.c:1646 */ +#line 11154 "ripper.c" break; - case 614: -#line 4686 "ripper.y" /* yacc.c:1646 */ - { + case 613: +#line 4699 "ripper.y" + { #if 0 (yyval.val) = NEW_CVAR((yyvsp[0].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;} } -#line 11040 "ripper.c" /* yacc.c:1646 */ +#line 11165 "ripper.c" break; - case 618: -#line 4700 "ripper.y" /* yacc.c:1646 */ - { + case 617: +#line 4713 "ripper.y" + { SET_LEX_STATE(EXPR_END); #if 0 (yyval.val) = NEW_LIT(ID2SYM((yyvsp[0].val)), &(yyloc)); #endif {VALUE v1,v2,v3,v4;v1=(yyvsp[0].val);v2=dispatch1(symbol,v1);v3=v2;v4=dispatch1(symbol_literal,v3);(yyval.val)=v4;} } -#line 11052 "ripper.c" /* yacc.c:1646 */ +#line 11177 "ripper.c" break; - case 623: -#line 4716 "ripper.y" /* yacc.c:1646 */ - { + case 622: +#line 4729 "ripper.y" + { SET_LEX_STATE(EXPR_END); #if 0 (yyval.val) = dsym_node(p, (yyvsp[-1].val), &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(dyna_symbol,v1);(yyval.val)=v2;} } -#line 11064 "ripper.c" /* yacc.c:1646 */ +#line 11189 "ripper.c" break; - case 625: -#line 4727 "ripper.y" /* yacc.c:1646 */ - { + case 624: +#line 4740 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[0].val); RB_OBJ_WRITE(p->ast, &(yyval.val)->nd_lit, negate_lit(p, (yyval.val)->nd_lit)); #endif {VALUE v1,v2,v3;v1=ID2VAL(idUMinus);v2=(yyvsp[0].val);v3=dispatch2(unary,v1,v2);(yyval.val)=v3;} } -#line 11076 "ripper.c" /* yacc.c:1646 */ +#line 11201 "ripper.c" + break; + + case 634: +#line 4762 "ripper.y" + {(yyval.val) = KWD2EID(nil, (yyvsp[0].val));} +#line 11207 "ripper.c" break; case 635: -#line 4749 "ripper.y" /* yacc.c:1646 */ - {(yyval.val) = KWD2EID(nil, (yyvsp[0].val));} -#line 11082 "ripper.c" /* yacc.c:1646 */ +#line 4763 "ripper.y" + {(yyval.val) = KWD2EID(self, (yyvsp[0].val));} +#line 11213 "ripper.c" break; case 636: -#line 4750 "ripper.y" /* yacc.c:1646 */ - {(yyval.val) = KWD2EID(self, (yyvsp[0].val));} -#line 11088 "ripper.c" /* yacc.c:1646 */ +#line 4764 "ripper.y" + {(yyval.val) = KWD2EID(true, (yyvsp[0].val));} +#line 11219 "ripper.c" break; case 637: -#line 4751 "ripper.y" /* yacc.c:1646 */ - {(yyval.val) = KWD2EID(true, (yyvsp[0].val));} -#line 11094 "ripper.c" /* yacc.c:1646 */ +#line 4765 "ripper.y" + {(yyval.val) = KWD2EID(false, (yyvsp[0].val));} +#line 11225 "ripper.c" break; case 638: -#line 4752 "ripper.y" /* yacc.c:1646 */ - {(yyval.val) = KWD2EID(false, (yyvsp[0].val));} -#line 11100 "ripper.c" /* yacc.c:1646 */ +#line 4766 "ripper.y" + {(yyval.val) = KWD2EID(_FILE__, (yyvsp[0].val));} +#line 11231 "ripper.c" break; case 639: -#line 4753 "ripper.y" /* yacc.c:1646 */ - {(yyval.val) = KWD2EID(_FILE__, (yyvsp[0].val));} -#line 11106 "ripper.c" /* yacc.c:1646 */ +#line 4767 "ripper.y" + {(yyval.val) = KWD2EID(_LINE__, (yyvsp[0].val));} +#line 11237 "ripper.c" break; case 640: -#line 4754 "ripper.y" /* yacc.c:1646 */ - {(yyval.val) = KWD2EID(_LINE__, (yyvsp[0].val));} -#line 11112 "ripper.c" /* yacc.c:1646 */ +#line 4768 "ripper.y" + {(yyval.val) = KWD2EID(_ENCODING__, (yyvsp[0].val));} +#line 11243 "ripper.c" break; case 641: -#line 4755 "ripper.y" /* yacc.c:1646 */ - {(yyval.val) = KWD2EID(_ENCODING__, (yyvsp[0].val));} -#line 11118 "ripper.c" /* yacc.c:1646 */ - break; - - case 642: -#line 4759 "ripper.y" /* yacc.c:1646 */ - { +#line 4772 "ripper.y" + { #if 0 if (!((yyval.val) = gettable(p, (yyvsp[0].val), &(yyloc)))) (yyval.val) = NEW_BEGIN(0, &(yyloc)); #endif @@ -11136,73 +11261,73 @@ YYLTYPE yylloc = yyloc_default; } } -#line 11135 "ripper.c" /* yacc.c:1646 */ +#line 11260 "ripper.c" break; - case 643: -#line 4772 "ripper.y" /* yacc.c:1646 */ - { + case 642: +#line 4785 "ripper.y" + { #if 0 if (!((yyval.val) = gettable(p, (yyvsp[0].val), &(yyloc)))) (yyval.val) = NEW_BEGIN(0, &(yyloc)); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;} } -#line 11146 "ripper.c" /* yacc.c:1646 */ +#line 11271 "ripper.c" break; - case 644: -#line 4781 "ripper.y" /* yacc.c:1646 */ - { + case 643: +#line 4794 "ripper.y" + { #if 0 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc)); #endif (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val))); } -#line 11157 "ripper.c" /* yacc.c:1646 */ +#line 11282 "ripper.c" break; - case 645: -#line 4788 "ripper.y" /* yacc.c:1646 */ - { + case 644: +#line 4801 "ripper.y" + { #if 0 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc)); #endif (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val))); } -#line 11168 "ripper.c" /* yacc.c:1646 */ +#line 11293 "ripper.c" break; - case 648: -#line 4801 "ripper.y" /* yacc.c:1646 */ - { + case 647: +#line 4814 "ripper.y" + { SET_LEX_STATE(EXPR_BEG); p->command_start = TRUE; } -#line 11177 "ripper.c" /* yacc.c:1646 */ +#line 11302 "ripper.c" break; - case 649: -#line 4806 "ripper.y" /* yacc.c:1646 */ - { + case 648: +#line 4819 "ripper.y" + { (yyval.val) = (yyvsp[-1].val); } -#line 11185 "ripper.c" /* yacc.c:1646 */ +#line 11310 "ripper.c" break; - case 650: -#line 4810 "ripper.y" /* yacc.c:1646 */ - { + case 649: +#line 4823 "ripper.y" + { #if 0 (yyval.val) = 0; #endif (yyval.val)=Qnil; } -#line 11196 "ripper.c" /* yacc.c:1646 */ +#line 11321 "ripper.c" break; - case 651: -#line 4819 "ripper.y" /* yacc.c:1646 */ - { + case 650: +#line 4832 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val); #endif @@ -11210,12 +11335,12 @@ YYLTYPE yylloc = yyloc_default; SET_LEX_STATE(EXPR_BEG); p->command_start = TRUE; } -#line 11209 "ripper.c" /* yacc.c:1646 */ +#line 11334 "ripper.c" break; - case 652: -#line 4828 "ripper.y" /* yacc.c:1646 */ - { + case 651: +#line 4841 "ripper.y" + { arg_var(p, idFWD_REST); #if idFWD_KWREST arg_var(p, idFWD_KWREST); @@ -11229,302 +11354,302 @@ YYLTYPE yylloc = yyloc_default; SET_LEX_STATE(EXPR_BEG); p->command_start = TRUE; } -#line 11228 "ripper.c" /* yacc.c:1646 */ +#line 11353 "ripper.c" break; - case 653: -#line 4842 "ripper.y" /* yacc.c:1646 */ - { + case 652: +#line 4855 "ripper.y" + { (yyval.num) = p->in_kwarg; p->in_kwarg = 1; SET_LEX_STATE(p->lex.state|EXPR_LABEL); /* force for args */ } -#line 11238 "ripper.c" /* yacc.c:1646 */ +#line 11363 "ripper.c" break; - case 654: -#line 4848 "ripper.y" /* yacc.c:1646 */ - { + case 653: +#line 4861 "ripper.y" + { p->in_kwarg = !!(yyvsp[-2].num); (yyval.val) = (yyvsp[-1].val); SET_LEX_STATE(EXPR_BEG); p->command_start = TRUE; } -#line 11249 "ripper.c" /* yacc.c:1646 */ +#line 11374 "ripper.c" break; - case 655: -#line 4857 "ripper.y" /* yacc.c:1646 */ - { + case 654: +#line 4870 "ripper.y" + { (yyval.val) = new_args_tail(p, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1])); } -#line 11257 "ripper.c" /* yacc.c:1646 */ +#line 11382 "ripper.c" break; - case 656: -#line 4861 "ripper.y" /* yacc.c:1646 */ - { + case 655: +#line 4874 "ripper.y" + { (yyval.val) = new_args_tail(p, (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yylsp[-1])); } -#line 11265 "ripper.c" /* yacc.c:1646 */ +#line 11390 "ripper.c" break; - case 657: -#line 4865 "ripper.y" /* yacc.c:1646 */ - { + case 656: +#line 4878 "ripper.y" + { (yyval.val) = new_args_tail(p, Qnone, (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1])); } -#line 11273 "ripper.c" /* yacc.c:1646 */ +#line 11398 "ripper.c" break; - case 658: -#line 4869 "ripper.y" /* yacc.c:1646 */ - { + case 657: +#line 4882 "ripper.y" + { (yyval.val) = new_args_tail(p, Qnone, ID2VAL(idNil), (yyvsp[0].val), &(yylsp[-1])); } -#line 11281 "ripper.c" /* yacc.c:1646 */ +#line 11406 "ripper.c" break; - case 659: -#line 4873 "ripper.y" /* yacc.c:1646 */ - { + case 658: +#line 4886 "ripper.y" + { (yyval.val) = new_args_tail(p, Qnone, Qnone, (yyvsp[0].val), &(yylsp[0])); } -#line 11289 "ripper.c" /* yacc.c:1646 */ +#line 11414 "ripper.c" break; - case 660: -#line 4879 "ripper.y" /* yacc.c:1646 */ - { + case 659: +#line 4892 "ripper.y" + { (yyval.val) = (yyvsp[0].val); } -#line 11297 "ripper.c" /* yacc.c:1646 */ +#line 11422 "ripper.c" break; - case 661: -#line 4883 "ripper.y" /* yacc.c:1646 */ - { + case 660: +#line 4896 "ripper.y" + { (yyval.val) = new_args_tail(p, Qnone, Qnone, Qnone, &(yylsp[0])); } -#line 11305 "ripper.c" /* yacc.c:1646 */ +#line 11430 "ripper.c" break; - case 662: -#line 4889 "ripper.y" /* yacc.c:1646 */ - { + case 661: +#line 4902 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc)); } -#line 11313 "ripper.c" /* yacc.c:1646 */ +#line 11438 "ripper.c" break; - case 663: -#line 4893 "ripper.y" /* yacc.c:1646 */ - { + case 662: +#line 4906 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-7].val), (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 11321 "ripper.c" /* yacc.c:1646 */ +#line 11446 "ripper.c" break; - case 664: -#line 4897 "ripper.y" /* yacc.c:1646 */ - { + case 663: +#line 4910 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-3].val), (yyvsp[-1].val), Qnone, Qnone, (yyvsp[0].val), &(yyloc)); } -#line 11329 "ripper.c" /* yacc.c:1646 */ +#line 11454 "ripper.c" break; - case 665: -#line 4901 "ripper.y" /* yacc.c:1646 */ - { + case 664: +#line 4914 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-5].val), (yyvsp[-3].val), Qnone, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 11337 "ripper.c" /* yacc.c:1646 */ +#line 11462 "ripper.c" break; - case 666: -#line 4905 "ripper.y" /* yacc.c:1646 */ - { + case 665: +#line 4918 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-3].val), Qnone, (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc)); } -#line 11345 "ripper.c" /* yacc.c:1646 */ +#line 11470 "ripper.c" break; - case 667: -#line 4909 "ripper.y" /* yacc.c:1646 */ - { + case 666: +#line 4922 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-5].val), Qnone, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 11353 "ripper.c" /* yacc.c:1646 */ +#line 11478 "ripper.c" break; - case 668: -#line 4913 "ripper.y" /* yacc.c:1646 */ - { + case 667: +#line 4926 "ripper.y" + { (yyval.val) = new_args(p, (yyvsp[-1].val), Qnone, Qnone, Qnone, (yyvsp[0].val), &(yyloc)); } -#line 11361 "ripper.c" /* yacc.c:1646 */ +#line 11486 "ripper.c" break; - case 669: -#line 4917 "ripper.y" /* yacc.c:1646 */ - { + case 668: +#line 4930 "ripper.y" + { (yyval.val) = new_args(p, Qnone, (yyvsp[-3].val), (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc)); } -#line 11369 "ripper.c" /* yacc.c:1646 */ +#line 11494 "ripper.c" break; - case 670: -#line 4921 "ripper.y" /* yacc.c:1646 */ - { + case 669: +#line 4934 "ripper.y" + { (yyval.val) = new_args(p, Qnone, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 11377 "ripper.c" /* yacc.c:1646 */ +#line 11502 "ripper.c" break; - case 671: -#line 4925 "ripper.y" /* yacc.c:1646 */ - { + case 670: +#line 4938 "ripper.y" + { (yyval.val) = new_args(p, Qnone, (yyvsp[-1].val), Qnone, Qnone, (yyvsp[0].val), &(yyloc)); } -#line 11385 "ripper.c" /* yacc.c:1646 */ +#line 11510 "ripper.c" break; - case 672: -#line 4929 "ripper.y" /* yacc.c:1646 */ - { + case 671: +#line 4942 "ripper.y" + { (yyval.val) = new_args(p, Qnone, (yyvsp[-3].val), Qnone, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 11393 "ripper.c" /* yacc.c:1646 */ +#line 11518 "ripper.c" break; - case 673: -#line 4933 "ripper.y" /* yacc.c:1646 */ - { + case 672: +#line 4946 "ripper.y" + { (yyval.val) = new_args(p, Qnone, Qnone, (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc)); } -#line 11401 "ripper.c" /* yacc.c:1646 */ +#line 11526 "ripper.c" break; - case 674: -#line 4937 "ripper.y" /* yacc.c:1646 */ - { + case 673: +#line 4950 "ripper.y" + { (yyval.val) = new_args(p, Qnone, Qnone, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)); } -#line 11409 "ripper.c" /* yacc.c:1646 */ +#line 11534 "ripper.c" break; - case 675: -#line 4941 "ripper.y" /* yacc.c:1646 */ - { + case 674: +#line 4954 "ripper.y" + { (yyval.val) = new_args(p, Qnone, Qnone, Qnone, Qnone, (yyvsp[0].val), &(yyloc)); } -#line 11417 "ripper.c" /* yacc.c:1646 */ +#line 11542 "ripper.c" break; - case 676: -#line 4945 "ripper.y" /* yacc.c:1646 */ - { + case 675: +#line 4958 "ripper.y" + { (yyval.val) = new_args_tail(p, Qnone, Qnone, Qnone, &(yylsp[0])); (yyval.val) = new_args(p, Qnone, Qnone, Qnone, Qnone, (yyval.val), &(yylsp[0])); } -#line 11426 "ripper.c" /* yacc.c:1646 */ +#line 11551 "ripper.c" break; - case 677: -#line 4952 "ripper.y" /* yacc.c:1646 */ - { + case 676: +#line 4965 "ripper.y" + { #if 0 (yyval.val) = idDot3; #endif {VALUE v1;v1=dispatch0(args_forward);(yyval.val)=v1;} } -#line 11437 "ripper.c" /* yacc.c:1646 */ +#line 11562 "ripper.c" break; - case 678: -#line 4961 "ripper.y" /* yacc.c:1646 */ - { + case 677: +#line 4974 "ripper.y" + { #if 0 yyerror1(&(yylsp[0]), "formal argument cannot be a constant"); (yyval.val) = 0; #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(param_error,v1);(yyval.val)=v2;}ripper_error(p); } -#line 11449 "ripper.c" /* yacc.c:1646 */ +#line 11574 "ripper.c" break; - case 679: -#line 4969 "ripper.y" /* yacc.c:1646 */ - { + case 678: +#line 4982 "ripper.y" + { #if 0 yyerror1(&(yylsp[0]), "formal argument cannot be an instance variable"); (yyval.val) = 0; #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(param_error,v1);(yyval.val)=v2;}ripper_error(p); } -#line 11461 "ripper.c" /* yacc.c:1646 */ +#line 11586 "ripper.c" break; - case 680: -#line 4977 "ripper.y" /* yacc.c:1646 */ - { + case 679: +#line 4990 "ripper.y" + { #if 0 yyerror1(&(yylsp[0]), "formal argument cannot be a global variable"); (yyval.val) = 0; #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(param_error,v1);(yyval.val)=v2;}ripper_error(p); } -#line 11473 "ripper.c" /* yacc.c:1646 */ +#line 11598 "ripper.c" break; - case 681: -#line 4985 "ripper.y" /* yacc.c:1646 */ - { + case 680: +#line 4998 "ripper.y" + { #if 0 yyerror1(&(yylsp[0]), "formal argument cannot be a class variable"); (yyval.val) = 0; #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(param_error,v1);(yyval.val)=v2;}ripper_error(p); } -#line 11485 "ripper.c" /* yacc.c:1646 */ +#line 11610 "ripper.c" break; - case 683: -#line 4996 "ripper.y" /* yacc.c:1646 */ - { + case 682: +#line 5009 "ripper.y" + { formal_argument(p, get_id((yyvsp[0].val))); p->max_numparam = ORDINAL_PARAM; (yyval.val) = (yyvsp[0].val); } -#line 11495 "ripper.c" /* yacc.c:1646 */ +#line 11620 "ripper.c" break; - case 684: -#line 5004 "ripper.y" /* yacc.c:1646 */ - { + case 683: +#line 5017 "ripper.y" + { ID id = get_id((yyvsp[0].val)); arg_var(p, id); p->cur_arg = id; (yyval.val) = (yyvsp[0].val); } -#line 11506 "ripper.c" /* yacc.c:1646 */ +#line 11631 "ripper.c" break; - case 685: -#line 5013 "ripper.y" /* yacc.c:1646 */ - { + case 684: +#line 5026 "ripper.y" + { p->cur_arg = 0; #if 0 (yyval.val) = NEW_ARGS_AUX((yyvsp[0].val), 1, &NULL_LOC); #endif (yyval.val)=get_value((yyvsp[0].val)); } -#line 11518 "ripper.c" /* yacc.c:1646 */ +#line 11643 "ripper.c" break; - case 686: -#line 5021 "ripper.y" /* yacc.c:1646 */ - { + case 685: +#line 5034 "ripper.y" + { #if 0 ID tid = internal_id(p); YYLTYPE loc; @@ -11542,18 +11667,18 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(mlhs_paren,v1);(yyval.val)=v2;} } -#line 11541 "ripper.c" /* yacc.c:1646 */ +#line 11666 "ripper.c" break; - case 687: -#line 5042 "ripper.y" /* yacc.c:1646 */ - {(yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));} -#line 11547 "ripper.c" /* yacc.c:1646 */ + case 686: +#line 5055 "ripper.y" + {(yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));} +#line 11672 "ripper.c" break; - case 688: -#line 5044 "ripper.y" /* yacc.c:1646 */ - { + case 687: +#line 5057 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-2].val); (yyval.val)->nd_plen++; @@ -11562,283 +11687,283 @@ YYLTYPE yylloc = yyloc_default; #endif (yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val))); } -#line 11561 "ripper.c" /* yacc.c:1646 */ +#line 11686 "ripper.c" break; - case 689: -#line 5057 "ripper.y" /* yacc.c:1646 */ - { + case 688: +#line 5070 "ripper.y" + { ID id = get_id((yyvsp[0].val)); arg_var(p, formal_argument(p, id)); p->cur_arg = id; p->max_numparam = ORDINAL_PARAM; (yyval.val) = (yyvsp[0].val); } -#line 11573 "ripper.c" /* yacc.c:1646 */ +#line 11698 "ripper.c" break; - case 690: -#line 5067 "ripper.y" /* yacc.c:1646 */ - { + case 689: +#line 5080 "ripper.y" + { p->cur_arg = 0; #if 0 (yyval.val) = new_kw_arg(p, assignable(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)), &(yyloc)); #endif (yyval.val)=rb_assoc_new(get_value(assignable(p, (yyvsp[-1].val))), get_value((yyvsp[0].val))); } -#line 11585 "ripper.c" /* yacc.c:1646 */ +#line 11710 "ripper.c" break; - case 691: -#line 5075 "ripper.y" /* yacc.c:1646 */ - { + case 690: +#line 5088 "ripper.y" + { p->cur_arg = 0; #if 0 (yyval.val) = new_kw_arg(p, assignable(p, (yyvsp[0].val), NODE_SPECIAL_REQUIRED_KEYWORD, &(yyloc)), &(yyloc)); #endif (yyval.val)=rb_assoc_new(get_value(assignable(p, (yyvsp[0].val))), 0); } -#line 11597 "ripper.c" /* yacc.c:1646 */ +#line 11722 "ripper.c" break; - case 692: -#line 5085 "ripper.y" /* yacc.c:1646 */ - { + case 691: +#line 5098 "ripper.y" + { #if 0 (yyval.val) = new_kw_arg(p, assignable(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)), &(yyloc)); #endif (yyval.val)=rb_assoc_new(get_value(assignable(p, (yyvsp[-1].val))), get_value((yyvsp[0].val))); } -#line 11608 "ripper.c" /* yacc.c:1646 */ +#line 11733 "ripper.c" break; - case 693: -#line 5092 "ripper.y" /* yacc.c:1646 */ - { + case 692: +#line 5105 "ripper.y" + { #if 0 (yyval.val) = new_kw_arg(p, assignable(p, (yyvsp[0].val), NODE_SPECIAL_REQUIRED_KEYWORD, &(yyloc)), &(yyloc)); #endif (yyval.val)=rb_assoc_new(get_value(assignable(p, (yyvsp[0].val))), 0); } -#line 11619 "ripper.c" /* yacc.c:1646 */ +#line 11744 "ripper.c" break; - case 694: -#line 5101 "ripper.y" /* yacc.c:1646 */ - { + case 693: +#line 5114 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[0].val); #endif (yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val))); } -#line 11630 "ripper.c" /* yacc.c:1646 */ +#line 11755 "ripper.c" break; - case 695: -#line 5108 "ripper.y" /* yacc.c:1646 */ - { + case 694: +#line 5121 "ripper.y" + { #if 0 (yyval.val) = kwd_append((yyvsp[-2].val), (yyvsp[0].val)); #endif (yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val))); } -#line 11641 "ripper.c" /* yacc.c:1646 */ +#line 11766 "ripper.c" break; - case 696: -#line 5118 "ripper.y" /* yacc.c:1646 */ - { + case 695: +#line 5131 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[0].val); #endif (yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val))); } -#line 11652 "ripper.c" /* yacc.c:1646 */ +#line 11777 "ripper.c" break; - case 697: -#line 5125 "ripper.y" /* yacc.c:1646 */ - { + case 696: +#line 5138 "ripper.y" + { #if 0 (yyval.val) = kwd_append((yyvsp[-2].val), (yyvsp[0].val)); #endif (yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val))); } -#line 11663 "ripper.c" /* yacc.c:1646 */ +#line 11788 "ripper.c" break; - case 700: -#line 5138 "ripper.y" /* yacc.c:1646 */ - { + case 699: +#line 5151 "ripper.y" + { #if 0 #endif {VALUE v1,v2;v1=Qnil;v2=dispatch1(nokw_param,v1);(yyval.val)=v2;} } -#line 11673 "ripper.c" /* yacc.c:1646 */ +#line 11798 "ripper.c" break; - case 701: -#line 5146 "ripper.y" /* yacc.c:1646 */ - { + case 700: +#line 5159 "ripper.y" + { arg_var(p, shadowing_lvar(p, get_id((yyvsp[0].val)))); #if 0 (yyval.val) = (yyvsp[0].val); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(kwrest_param,v1);(yyval.val)=v2;} } -#line 11685 "ripper.c" /* yacc.c:1646 */ +#line 11810 "ripper.c" break; - case 702: -#line 5154 "ripper.y" /* yacc.c:1646 */ - { + case 701: +#line 5167 "ripper.y" + { #if 0 (yyval.val) = internal_id(p); arg_var(p, (yyval.val)); #endif {VALUE v1,v2;v1=Qnil;v2=dispatch1(kwrest_param,v1);(yyval.val)=v2;} } -#line 11697 "ripper.c" /* yacc.c:1646 */ +#line 11822 "ripper.c" break; - case 703: -#line 5164 "ripper.y" /* yacc.c:1646 */ - { + case 702: +#line 5177 "ripper.y" + { p->cur_arg = 0; #if 0 (yyval.val) = NEW_OPT_ARG(0, assignable(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)), &(yyloc)); #endif (yyval.val)=rb_assoc_new(get_value(assignable(p, (yyvsp[-2].val))), get_value((yyvsp[0].val))); } -#line 11709 "ripper.c" /* yacc.c:1646 */ +#line 11834 "ripper.c" break; - case 704: -#line 5174 "ripper.y" /* yacc.c:1646 */ - { + case 703: +#line 5187 "ripper.y" + { p->cur_arg = 0; #if 0 (yyval.val) = NEW_OPT_ARG(0, assignable(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)), &(yyloc)); #endif (yyval.val)=rb_assoc_new(get_value(assignable(p, (yyvsp[-2].val))), get_value((yyvsp[0].val))); } -#line 11721 "ripper.c" /* yacc.c:1646 */ +#line 11846 "ripper.c" break; - case 705: -#line 5184 "ripper.y" /* yacc.c:1646 */ - { + case 704: +#line 5197 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[0].val); #endif (yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val))); } -#line 11732 "ripper.c" /* yacc.c:1646 */ +#line 11857 "ripper.c" break; - case 706: -#line 5191 "ripper.y" /* yacc.c:1646 */ - { + case 705: +#line 5204 "ripper.y" + { #if 0 (yyval.val) = opt_arg_append((yyvsp[-2].val), (yyvsp[0].val)); #endif (yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val))); } -#line 11743 "ripper.c" /* yacc.c:1646 */ +#line 11868 "ripper.c" break; - case 707: -#line 5200 "ripper.y" /* yacc.c:1646 */ - { + case 706: +#line 5213 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[0].val); #endif (yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val))); } -#line 11754 "ripper.c" /* yacc.c:1646 */ +#line 11879 "ripper.c" break; - case 708: -#line 5207 "ripper.y" /* yacc.c:1646 */ - { + case 707: +#line 5220 "ripper.y" + { #if 0 (yyval.val) = opt_arg_append((yyvsp[-2].val), (yyvsp[0].val)); #endif (yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val))); } -#line 11765 "ripper.c" /* yacc.c:1646 */ +#line 11890 "ripper.c" break; - case 711: -#line 5220 "ripper.y" /* yacc.c:1646 */ - { + case 710: +#line 5233 "ripper.y" + { arg_var(p, shadowing_lvar(p, get_id((yyvsp[0].val)))); #if 0 (yyval.val) = (yyvsp[0].val); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(rest_param,v1);(yyval.val)=v2;} } -#line 11777 "ripper.c" /* yacc.c:1646 */ +#line 11902 "ripper.c" break; - case 712: -#line 5228 "ripper.y" /* yacc.c:1646 */ - { + case 711: +#line 5241 "ripper.y" + { #if 0 (yyval.val) = internal_id(p); arg_var(p, (yyval.val)); #endif {VALUE v1,v2;v1=Qnil;v2=dispatch1(rest_param,v1);(yyval.val)=v2;} } -#line 11789 "ripper.c" /* yacc.c:1646 */ +#line 11914 "ripper.c" break; - case 715: -#line 5242 "ripper.y" /* yacc.c:1646 */ - { + case 714: +#line 5255 "ripper.y" + { arg_var(p, shadowing_lvar(p, get_id((yyvsp[0].val)))); #if 0 (yyval.val) = (yyvsp[0].val); #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(blockarg,v1);(yyval.val)=v2;} } -#line 11801 "ripper.c" /* yacc.c:1646 */ +#line 11926 "ripper.c" break; - case 716: -#line 5252 "ripper.y" /* yacc.c:1646 */ - { + case 715: +#line 5265 "ripper.y" + { (yyval.val) = (yyvsp[0].val); } -#line 11809 "ripper.c" /* yacc.c:1646 */ +#line 11934 "ripper.c" break; - case 717: -#line 5256 "ripper.y" /* yacc.c:1646 */ - { + case 716: +#line 5269 "ripper.y" + { (yyval.val) = Qnull; } -#line 11817 "ripper.c" /* yacc.c:1646 */ +#line 11942 "ripper.c" break; - case 718: -#line 5262 "ripper.y" /* yacc.c:1646 */ - { + case 717: +#line 5275 "ripper.y" + { value_expr((yyvsp[0].val)); (yyval.val) = (yyvsp[0].val); } -#line 11826 "ripper.c" /* yacc.c:1646 */ +#line 11951 "ripper.c" break; - case 719: -#line 5266 "ripper.y" /* yacc.c:1646 */ - {SET_LEX_STATE(EXPR_BEG);} -#line 11832 "ripper.c" /* yacc.c:1646 */ + case 718: +#line 5279 "ripper.y" + {SET_LEX_STATE(EXPR_BEG);} +#line 11957 "ripper.c" break; - case 720: -#line 5267 "ripper.y" /* yacc.c:1646 */ - { + case 719: +#line 5280 "ripper.y" + { #if 0 switch (nd_type((yyvsp[-1].val))) { case NODE_STR: @@ -11859,29 +11984,29 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(paren,v1);(yyval.val)=v2;} } -#line 11858 "ripper.c" /* yacc.c:1646 */ +#line 11983 "ripper.c" break; - case 722: -#line 5292 "ripper.y" /* yacc.c:1646 */ - { + case 721: +#line 5305 "ripper.y" + { #if 0 (yyval.val) = (yyvsp[-1].val); #endif {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(assoclist_from_args,v1);(yyval.val)=v2;} } -#line 11869 "ripper.c" /* yacc.c:1646 */ +#line 11994 "ripper.c" break; - case 723: -#line 5301 "ripper.y" /* yacc.c:1646 */ - {(yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));} -#line 11875 "ripper.c" /* yacc.c:1646 */ + case 722: +#line 5314 "ripper.y" + {(yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));} +#line 12000 "ripper.c" break; - case 724: -#line 5303 "ripper.y" /* yacc.c:1646 */ - { + case 723: +#line 5316 "ripper.y" + { #if 0 NODE *assocs = (yyvsp[-2].val); NODE *tail = (yyvsp[0].val); @@ -11901,12 +12026,12 @@ YYLTYPE yylloc = yyloc_default; #endif (yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val))); } -#line 11900 "ripper.c" /* yacc.c:1646 */ +#line 12025 "ripper.c" break; - case 725: -#line 5326 "ripper.y" /* yacc.c:1646 */ - { + case 724: +#line 5339 "ripper.y" + { #if 0 if (nd_type((yyvsp[-2].val)) == NODE_STR) { nd_set_type((yyvsp[-2].val), NODE_LIT); @@ -11916,35 +12041,35 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(assoc_new,v1,v2);(yyval.val)=v3;} } -#line 11915 "ripper.c" /* yacc.c:1646 */ +#line 12040 "ripper.c" break; - case 726: -#line 5337 "ripper.y" /* yacc.c:1646 */ - { + case 725: +#line 5350 "ripper.y" + { #if 0 (yyval.val) = list_append(p, NEW_LIST(NEW_LIT(ID2SYM((yyvsp[-1].val)), &(yylsp[-1])), &(yyloc)), (yyvsp[0].val)); #endif {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(assoc_new,v1,v2);(yyval.val)=v3;} } -#line 11926 "ripper.c" /* yacc.c:1646 */ +#line 12051 "ripper.c" break; - case 727: -#line 5344 "ripper.y" /* yacc.c:1646 */ - { + case 726: +#line 5357 "ripper.y" + { #if 0 YYLTYPE loc = code_loc_gen(&(yylsp[-3]), &(yylsp[-1])); (yyval.val) = list_append(p, NEW_LIST(dsym_node(p, (yyvsp[-2].val), &loc), &loc), (yyvsp[0].val)); #endif {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-2].val);v2=dispatch1(dyna_symbol,v1);v3=v2;v4=(yyvsp[0].val);v5=dispatch2(assoc_new,v3,v4);(yyval.val)=v5;} } -#line 11938 "ripper.c" /* yacc.c:1646 */ +#line 12063 "ripper.c" break; - case 728: -#line 5352 "ripper.y" /* yacc.c:1646 */ - { + case 727: +#line 5365 "ripper.y" + { #if 0 if (nd_type((yyvsp[0].val)) == NODE_HASH && !((yyvsp[0].val)->nd_head && (yyvsp[0].val)->nd_head->nd_alen)) { @@ -11960,37 +12085,38 @@ YYLTYPE yylloc = yyloc_default; #endif {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(assoc_splat,v1);(yyval.val)=v2;} } -#line 11959 "ripper.c" /* yacc.c:1646 */ +#line 12084 "ripper.c" break; - case 755: -#line 5420 "ripper.y" /* yacc.c:1646 */ - {yyerrok;token_flush(p);} -#line 11965 "ripper.c" /* yacc.c:1646 */ + case 753: +#line 5430 "ripper.y" + {yyerrok;token_flush(p);} +#line 12090 "ripper.c" break; - case 756: -#line 5421 "ripper.y" /* yacc.c:1646 */ - {token_flush(p);} -#line 11971 "ripper.c" /* yacc.c:1646 */ + case 754: +#line 5431 "ripper.y" + {token_flush(p);} +#line 12096 "ripper.c" break; - case 758: -#line 5425 "ripper.y" /* yacc.c:1646 */ - {yyerrok;} -#line 11977 "ripper.c" /* yacc.c:1646 */ + case 756: +#line 5435 "ripper.y" + {yyerrok;} +#line 12102 "ripper.c" break; - case 759: -#line 5429 "ripper.y" /* yacc.c:1646 */ - { + case 757: +#line 5439 "ripper.y" + { (yyval.val) = Qnull; } -#line 11985 "ripper.c" /* yacc.c:1646 */ +#line 12110 "ripper.c" break; -#line 11989 "ripper.c" /* yacc.c:1646 */ +#line 12114 "ripper.c" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -12016,14 +12142,13 @@ YYLTYPE yylloc = yyloc_default; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; @@ -12055,7 +12180,7 @@ YYLTYPE yylloc = yyloc_default; { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; @@ -12106,14 +12231,11 @@ YYLTYPE yylloc = yyloc_default; | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; - - yyerror_range[1] = yylsp[1-yylen]; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); @@ -12179,6 +12301,7 @@ YYLTYPE yylloc = yyloc_default; yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -12186,6 +12309,7 @@ YYLTYPE yylloc = yyloc_default; yyresult = 1; goto yyreturn; + #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -12196,6 +12320,10 @@ YYLTYPE yylloc = yyloc_default; /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -12225,7 +12353,7 @@ YYLTYPE yylloc = yyloc_default; #endif return yyresult; } -#line 5433 "ripper.y" /* yacc.c:1906 */ +#line 5443 "ripper.y" # undef p # undef yylex @@ -12335,9 +12463,6 @@ ripper_dispatch_delayed_token(struct parser_params *p, enum yytokentype t) #define has_delayed_token(p) (!NIL_P(p->delayed.token)) #endif /* RIPPER */ -#include "ruby/regex.h" -#include "ruby/util.h" - static inline int is_identchar(const char *ptr, const char *MAYBE_UNUSED(ptr_end), rb_encoding *enc) { @@ -12643,7 +12768,7 @@ vtable_free_gen(struct parser_params *p, int line, const char *name, if (tbl->tbl) { ruby_sized_xfree(tbl->tbl, tbl->capa * sizeof(ID)); } - ruby_sized_xfree(tbl, sizeof(tbl)); + ruby_sized_xfree(tbl, sizeof(*tbl)); } } #define vtable_free(tbl) vtable_free_gen(p, __LINE__, #tbl, tbl) @@ -16705,19 +16830,6 @@ past_dvar_p(struct parser_params *p, ID id) } # endif -/* As Ripper#warn does not have arguments for the location, so the - * following messages cannot be separated */ -#define WARN_LOCATION(type) do { \ - if (p->warn_location) { \ - int line; \ - VALUE file = rb_source_location(&line); \ - rb_warn3(type" in eval may not return location in binding;" \ - " use Binding#source_location instead\n" \ - "%"PRIsWARN":%d: warning: in `%"PRIsWARN"'", \ - file, WARN_I(line), rb_id2str(rb_frame_this_func())); \ - } \ -} while (0) - static int numparam_nested_p(struct parser_params *p) { @@ -16751,7 +16863,6 @@ gettable(struct parser_params *p, ID id, const YYLTYPE *loc) case keyword_false: return NEW_FALSE(loc); case keyword__FILE__: - WARN_LOCATION("__FILE__"); { VALUE file = p->ruby_sourcefile_string; if (NIL_P(file)) @@ -16763,7 +16874,6 @@ gettable(struct parser_params *p, ID id, const YYLTYPE *loc) } return node; case keyword__LINE__: - WARN_LOCATION("__LINE__"); return NEW_LIT(INT2FIX(p->tokline), loc); case keyword__ENCODING__: node = NEW_LIT(rb_enc_from_encoding(p->enc), loc); @@ -18044,7 +18154,7 @@ negate_lit(struct parser_params *p, VALUE lit) lit = rb_big_norm(lit); break; case T_RATIONAL: - RRATIONAL_SET_NUM(lit, negate_lit(p, RRATIONAL(lit)->num)); + RATIONAL_SET_NUM(lit, negate_lit(p, RRATIONAL(lit)->num)); break; case T_COMPLEX: RCOMPLEX_SET_REAL(lit, negate_lit(p, RCOMPLEX(lit)->real)); @@ -18845,7 +18955,7 @@ dvar_defined_ref(struct parser_params *p, ID id, ID **vidrefp) if (used) used = used->prev; } - if (vars == DVARS_INHERIT) { + if (vars == DVARS_INHERIT && !NUMPARAM_ID_P(id)) { return rb_dvar_defined(id, p->parent_iseq); } @@ -19040,14 +19150,6 @@ rb_parser_set_options(VALUE vparser, int print, int loop, int chomp, int split) p->do_split = split; } -void -rb_parser_warn_location(VALUE vparser, int warn) -{ - struct parser_params *p; - TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p); - p->warn_location = warn; -} - static NODE * parser_append_options(struct parser_params *p, NODE *node) { diff --git a/ruby/ext/ripper/ripper.y b/ruby/ext/ripper/ripper.y index 7e1d1feac..5d98d45a5 100644 --- a/ruby/ext/ripper/ripper.y +++ b/ruby/ext/ripper/ripper.y @@ -20,18 +20,37 @@ #define YYLTYPE rb_code_location_t #define YYLTYPE_IS_DECLARED 1 -#include "ruby/ruby.h" -#include "ruby/st.h" -#include "ruby/encoding.h" +#include "ruby/config.h" + +#include +#include +#include + #include "internal.h" +#include "internal/compile.h" +#include "internal/complex.h" +#include "internal/error.h" +#include "internal/hash.h" +#include "internal/imemo.h" +#include "internal/io.h" +#include "internal/numeric.h" +#include "internal/parse.h" +#include "internal/rational.h" +#include "internal/re.h" +#include "internal/symbol.h" +#include "internal/thread.h" +#include "internal/util.h" +#include "internal/variable.h" #include "node.h" #include "parse.h" -#include "symbol.h" -#include "regenc.h" -#include -#include -#include #include "probes.h" +#include "regenc.h" +#include "ruby/encoding.h" +#include "ruby/regex.h" +#include "ruby/ruby.h" +#include "ruby/st.h" +#include "ruby/util.h" +#include "symbol.h" #ifndef WARN_PAST_SCOPE # define WARN_PAST_SCOPE 0 @@ -296,7 +315,6 @@ struct parser_params { unsigned int do_loop: 1; unsigned int do_chomp: 1; unsigned int do_split: 1; - unsigned int warn_location: 1; NODE *eval_tree_begin; NODE *eval_tree; @@ -1461,6 +1479,7 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem command_asgn : lhs '=' command_rhs { #if 0 + value_expr($3); $$ = node_assign(p, $1, $3, &@$); #endif {VALUE v1,v2,v3;v1=$1;v2=$3;v3=dispatch2(assign,v1,v2);$$=v3;} @@ -1468,6 +1487,7 @@ command_asgn : lhs '=' command_rhs | var_lhs tOP_ASGN command_rhs { #if 0 + value_expr($3); $$ = new_op_assign(p, $1, $2, $3, &@$); #endif {VALUE v1,v2,v3,v4;v1=$1;v2=$2;v3=$3;v4=dispatch3(opassign,v1,v2,v3);$$=v4;} @@ -1475,6 +1495,7 @@ command_asgn : lhs '=' command_rhs | primary_value '[' opt_call_args rbracket tOP_ASGN command_rhs { #if 0 + value_expr($6); $$ = new_ary_op_assign(p, $1, $3, $5, $6, &@3, &@$); #endif {VALUE v1,v2,v3,v4,v5,v6,v7;v1=$1;v2=escape_Qundef($3);v3=dispatch2(aref_field,v1,v2);v4=v3;v5=$5;v6=$6;v7=dispatch3(opassign,v4,v5,v6);$$=v7;} @@ -1483,6 +1504,7 @@ command_asgn : lhs '=' command_rhs | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { #if 0 + value_expr($5); $$ = new_attr_op_assign(p, $1, $2, $3, $4, $5, &@$); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=$1;v2=$2;v3=$3;v4=dispatch3(field,v1,v2,v3);v5=v4;v6=$4;v7=$5;v8=dispatch3(opassign,v5,v6,v7);$$=v8;} @@ -1490,6 +1512,7 @@ command_asgn : lhs '=' command_rhs | primary_value call_op tCONSTANT tOP_ASGN command_rhs { #if 0 + value_expr($5); $$ = new_attr_op_assign(p, $1, $2, $3, $4, $5, &@$); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=$1;v2=$2;v3=$3;v4=dispatch3(field,v1,v2,v3);v5=v4;v6=$4;v7=$5;v8=dispatch3(opassign,v5,v6,v7);$$=v8;} @@ -1505,6 +1528,7 @@ command_asgn : lhs '=' command_rhs | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs { #if 0 + value_expr($5); $$ = new_attr_op_assign(p, $1, ID2VAL(idCOLON2), $3, $4, $5, &@$); #endif {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=$1;v2=ID2VAL(idCOLON2);v3=$3;v4=dispatch3(field,v1,v2,v3);v5=v4;v6=$4;v7=$5;v8=dispatch3(opassign,v5,v6,v7);$$=v8;} @@ -3937,19 +3961,12 @@ p_expr_basic : p_value $$ = new_array_pattern_tail(p, Qnone, 0, 0, Qnone, &@$); $$ = new_array_pattern(p, Qnone, Qnone, $$, &@$); } - | tLBRACE - { - $$ = push_pktbl(p); - $1 = p->in_kwarg; - p->in_kwarg = 0; - } - p_kwargs rbrace + | tLBRACE {$$ = push_pktbl(p);} p_kwargs '}' { pop_pktbl(p, $2); - p->in_kwarg = $1; $$ = new_hash_pattern(p, Qnone, $3, &@$); } - | tLBRACE rbrace + | tLBRACE '}' { $$ = new_hash_pattern_tail(p, Qnone, 0, &@$); $$ = new_hash_pattern(p, Qnone, $$, &@$); @@ -4060,10 +4077,6 @@ p_kwargs : p_kwarg ',' p_kwrest { $$ = new_hash_pattern_tail(p, new_unique_key_hash(p, $1, &@$), 0, &@$); } - | p_kwarg ',' - { - $$ = new_hash_pattern_tail(p, new_unique_key_hash(p, $1, &@$), 0, &@$); - } | p_kwrest { $$ = new_hash_pattern_tail(p, new_hash(p, Qnone, &@$), $1, &@$); @@ -5409,9 +5422,6 @@ rparen : opt_nl ')' rbracket : opt_nl ']' ; -rbrace : opt_nl '}' - ; - trailer : /* none */ | '\n' | ',' @@ -5539,9 +5549,6 @@ ripper_dispatch_delayed_token(struct parser_params *p, enum yytokentype t) #define has_delayed_token(p) (!NIL_P(p->delayed.token)) #endif /* RIPPER */ -#include "ruby/regex.h" -#include "ruby/util.h" - static inline int is_identchar(const char *ptr, const char *MAYBE_UNUSED(ptr_end), rb_encoding *enc) { @@ -5847,7 +5854,7 @@ vtable_free_gen(struct parser_params *p, int line, const char *name, if (tbl->tbl) { ruby_sized_xfree(tbl->tbl, tbl->capa * sizeof(ID)); } - ruby_sized_xfree(tbl, sizeof(tbl)); + ruby_sized_xfree(tbl, sizeof(*tbl)); } } #define vtable_free(tbl) vtable_free_gen(p, __LINE__, #tbl, tbl) @@ -9909,19 +9916,6 @@ past_dvar_p(struct parser_params *p, ID id) } # endif -/* As Ripper#warn does not have arguments for the location, so the - * following messages cannot be separated */ -#define WARN_LOCATION(type) do { \ - if (p->warn_location) { \ - int line; \ - VALUE file = rb_source_location(&line); \ - rb_warn3(type" in eval may not return location in binding;" \ - " use Binding#source_location instead\n" \ - "%"PRIsWARN":%d: warning: in `%"PRIsWARN"'", \ - file, WARN_I(line), rb_id2str(rb_frame_this_func())); \ - } \ -} while (0) - static int numparam_nested_p(struct parser_params *p) { @@ -9955,7 +9949,6 @@ gettable(struct parser_params *p, ID id, const YYLTYPE *loc) case keyword_false: return NEW_FALSE(loc); case keyword__FILE__: - WARN_LOCATION("__FILE__"); { VALUE file = p->ruby_sourcefile_string; if (NIL_P(file)) @@ -9967,7 +9960,6 @@ gettable(struct parser_params *p, ID id, const YYLTYPE *loc) } return node; case keyword__LINE__: - WARN_LOCATION("__LINE__"); return NEW_LIT(INT2FIX(p->tokline), loc); case keyword__ENCODING__: node = NEW_LIT(rb_enc_from_encoding(p->enc), loc); @@ -11248,7 +11240,7 @@ negate_lit(struct parser_params *p, VALUE lit) lit = rb_big_norm(lit); break; case T_RATIONAL: - RRATIONAL_SET_NUM(lit, negate_lit(p, RRATIONAL(lit)->num)); + RATIONAL_SET_NUM(lit, negate_lit(p, RRATIONAL(lit)->num)); break; case T_COMPLEX: RCOMPLEX_SET_REAL(lit, negate_lit(p, RCOMPLEX(lit)->real)); @@ -12049,7 +12041,7 @@ dvar_defined_ref(struct parser_params *p, ID id, ID **vidrefp) if (used) used = used->prev; } - if (vars == DVARS_INHERIT) { + if (vars == DVARS_INHERIT && !NUMPARAM_ID_P(id)) { return rb_dvar_defined(id, p->parent_iseq); } @@ -12244,14 +12236,6 @@ rb_parser_set_options(VALUE vparser, int print, int loop, int chomp, int split) p->do_split = split; } -void -rb_parser_warn_location(VALUE vparser, int warn) -{ - struct parser_params *p; - TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p); - p->warn_location = warn; -} - static NODE * parser_append_options(struct parser_params *p, NODE *node) { diff --git a/ruby/ext/ripper/tools/dsl.rb b/ruby/ext/ripper/tools/dsl.rb index d2b9715a7..49ff51711 100644 --- a/ruby/ext/ripper/tools/dsl.rb +++ b/ruby/ext/ripper/tools/dsl.rb @@ -7,6 +7,9 @@ # v2 = dispatch0(void_stmt); # $$ = dispatch2(stmts_add, v1, v2); +$dollar = "$$" +alias $$ $dollar + class DSL def initialize(code, options) @events = {} diff --git a/ruby/ext/ripper/tools/preproc.rb b/ruby/ext/ripper/tools/preproc.rb index 7639a901d..b838a78db 100644 --- a/ruby/ext/ripper/tools/preproc.rb +++ b/ruby/ext/ripper/tools/preproc.rb @@ -45,7 +45,7 @@ def prelude(f, out) while line = f.gets case line when /\A%%/ - out << '%%' << $/ + out << "%%\n" return when /\A%token/ out << line.sub(/<\w+>/, '') @@ -79,15 +79,15 @@ def grammar(f, out) while line = f.gets case line when %r - out << DSL.new($2, ($1 || "").split(",")).generate << $/ + out << DSL.new($2, ($1 || "").split(",")).generate << "\n" when %r - out << '#if 0' << $/ + out << "#if 0\n" when %r - out << '#endif' << $/ + out << "#endif\n" when %r<%\*/> - out << $/ + out << "\n" when /\A%%/ - out << '%%' << $/ + out << "%%\n" return else out << line diff --git a/ruby/ext/sdbm/_sdbm.c b/ruby/ext/sdbm/_sdbm.c deleted file mode 100644 index 3a42b0e56..000000000 --- a/ruby/ext/sdbm/_sdbm.c +++ /dev/null @@ -1,952 +0,0 @@ -/* - * sdbm - ndbm work-alike hashed database library - * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978). - * author: oz@nexus.yorku.ca - * status: public domain. - * - * core routines - */ - -#include "ruby/ruby.h" - -#ifdef HAVE_UNISTD_H -#include -#endif - -#include "sdbm.h" - -/* - * sdbm - ndbm work-alike hashed database library - * tuning and portability constructs [not nearly enough] - * author: oz@nexus.yorku.ca - */ - -#define BYTESIZ 8 - -#ifdef BSD42 -#define SEEK_SET L_SET -#define memset(s,c,n) bzero((s), (n)) /* only when c is zero */ -#define memcpy(s1,s2,n) bcopy((s2), (s1), (n)) -#define memcmp(s1,s2,n) bcmp((s1),(s2),(n)) -#endif - -/* - * important tuning parms (hah) - */ - -#ifndef SEEDUPS -#define SEEDUPS 1 /* always detect duplicates */ -#endif -#ifndef BADMESS -#define BADMESS 1 /* generate a message for worst case: - cannot make room after SPLTMAX splits */ -#endif - -/* - * misc - */ -#ifdef DEBUG -#define debug(x) printf x -#else -#define debug(x) -#endif - -#ifdef BIG_E -#define GET_SHORT(p, i) (((unsigned)((unsigned char *)(p))[(i)*2] << 8) + (((unsigned char *)(p))[(i)*2 + 1])) -#define PUT_SHORT(p, i, s) (((unsigned char *)(p))[(i)*2] = (unsigned char)((s) >> 8), ((unsigned char *)(p))[(i)*2 + 1] = (unsigned char)(s)) -#else -#define GET_SHORT(p, i) ((p)[(i)]) -#define PUT_SHORT(p, i, s) ((p)[(i)] = (s)) -#endif - -/*#include "pair.h"*/ -static int fitpair proto((char *, int)); -static void putpair proto((char *, datum, datum)); -static datum getpair proto((char *, datum)); -static int delpair proto((char *, datum)); -static int chkpage proto((char *)); -static datum getnkey proto((char *, int)); -static void splpage proto((char *, char *, long)); -#if SEEDUPS -static int duppair proto((char *, datum)); -#endif - -#include -#include -#ifdef DOSISH -#include -#endif -#include -#include -#ifdef BSD42 -#include -#else -#include -/*#include */ -#endif -#ifndef O_BINARY -#define O_BINARY 0 -#endif - -#include -#ifndef EPERM -#define EPERM EACCES -#endif -#include - -#ifdef __STDC__ -#include -#endif - -#ifndef NULL -#define NULL 0 -#endif - -/* - * externals - */ -#if !defined(__sun) && !defined(_WIN32) && !defined(__CYGWIN__) && !defined(errno) -extern int errno; -#endif - -/* - * forward - */ -static int getdbit proto((DBM *, long)); -static int setdbit proto((DBM *, long)); -static int getpage proto((DBM *, long)); -static datum getnext proto((DBM *)); -static int makroom proto((DBM *, long, int)); - -/* - * useful macros - */ -#define bad(x) ((x).dptr == NULL || (x).dsize < 0) -#define exhash(item) sdbm_hash((item).dptr, (item).dsize) -#define ioerr(db) ((db)->flags |= DBM_IOERR) - -#define OFF_PAG(off) (long) (off) * PBLKSIZ -#define OFF_DIR(off) (long) (off) * DBLKSIZ - -static long masks[] = { - 000000000000L, 000000000001L, 000000000003L, - 000000000007L, 000000000017L, 000000000037L, - 000000000077L, 000000000177L, 000000000377L, - 000000000777L, 000000001777L, 000000003777L, - 000000007777L, 000000017777L, 000000037777L, - 000000077777L, 000000177777L, 000000377777L, - 000000777777L, 000001777777L, 000003777777L, - 000007777777L, 000017777777L, 000037777777L, - 000077777777L, 000177777777L, 000377777777L, - 000777777777L, 001777777777L, 003777777777L, - 007777777777L, 017777777777L -}; - -datum nullitem = {NULL, 0}; - -DBM * -sdbm_open(register char *file, register int flags, register int mode) -{ - register DBM *db; - register char *dirname; - register char *pagname; - register size_t n; - - if (file == NULL || !*file) - return errno = EINVAL, (DBM *) NULL; -/* - * need space for two separate filenames - */ - n = strlen(file) * 2 + strlen(DIRFEXT) + strlen(PAGFEXT) + 2; - - if ((dirname = malloc(n)) == NULL) - return errno = ENOMEM, (DBM *) NULL; -/* - * build the file names - */ - dirname = strcat(strcpy(dirname, file), DIRFEXT); - pagname = strcpy(dirname + strlen(dirname) + 1, file); - pagname = strcat(pagname, PAGFEXT); - - db = sdbm_prep(dirname, pagname, flags, mode); - free((char *) dirname); - return db; -} - -static int -fd_set_cloexec(int fd) -{ - /* MinGW don't have F_GETFD and FD_CLOEXEC. [ruby-core:40281] */ -#ifdef F_GETFD - int flags, ret; - flags = fcntl(fd, F_GETFD); /* should not fail except EBADF. */ - if (flags == -1) { - return -1; - } - if (2 < fd) { - if (!(flags & FD_CLOEXEC)) { - flags |= FD_CLOEXEC; - ret = fcntl(fd, F_SETFD, flags); - if (ret == -1) { - return -1; - } - } - } -#endif - return 0; -} - -DBM * -sdbm_prep(char *dirname, char *pagname, int flags, int mode) -{ - register DBM *db; - struct stat dstat; - - if ((db = (DBM *) malloc(sizeof(DBM))) == NULL) - return errno = ENOMEM, (DBM *) NULL; - - db->pagf = -1; - db->dirf = -1; - db->flags = 0; - db->hmask = 0; - db->blkptr = 0; - db->keyptr = 0; -/* - * adjust user flags so that WRONLY becomes RDWR, - * as required by this package. Also set our internal - * flag for RDONLY. - */ - if (flags & O_WRONLY) - flags = (flags & ~O_WRONLY) | O_RDWR; - if (flags & O_RDONLY) - db->flags = DBM_RDONLY; -/* - * open the files in sequence, and stat the dirfile. - * If we fail anywhere, undo everything, return NULL. - */ - flags |= O_BINARY; -#ifdef O_CLOEXEC - flags |= O_CLOEXEC; -#endif - - if ((db->pagf = open(pagname, flags, mode)) == -1) goto err; - if (fd_set_cloexec(db->pagf) == -1) goto err; - if ((db->dirf = open(dirname, flags, mode)) == -1) goto err; - if (fd_set_cloexec(db->dirf) == -1) goto err; -/* - * need the dirfile size to establish max bit number. - */ - if (fstat(db->dirf, &dstat) == -1) goto err; -/* - * zero size: either a fresh database, or one with a single, - * unsplit data page: dirpage is all zeros. - */ - db->dirbno = (!dstat.st_size) ? 0 : -1; - db->pagbno = -1; - db->maxbno = dstat.st_size * (long) BYTESIZ; - - (void) memset(db->pagbuf, 0, PBLKSIZ); - (void) memset(db->dirbuf, 0, DBLKSIZ); -/* - * success - */ - return db; - - err: - if (db->pagf != -1) - (void) close(db->pagf); - if (db->dirf != -1) - (void) close(db->dirf); - free((char *) db); - return (DBM *) NULL; -} - -void -sdbm_close(register DBM *db) -{ - if (db == NULL) - errno = EINVAL; - else { - (void) close(db->dirf); - (void) close(db->pagf); - free((char *) db); - } -} - -datum -sdbm_fetch(register DBM *db, datum key) -{ - if (db == NULL || bad(key)) - return errno = EINVAL, nullitem; - - if (getpage(db, exhash(key))) - return getpair(db->pagbuf, key); - - return ioerr(db), nullitem; -} - -int -sdbm_delete(register DBM *db, datum key) -{ - if (db == NULL || bad(key)) - return errno = EINVAL, -1; - if (sdbm_rdonly(db)) - return errno = EPERM, -1; - - if (getpage(db, exhash(key))) { - if (!delpair(db->pagbuf, key)) - return -1; -/* - * update the page file - */ - if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0 - || write(db->pagf, db->pagbuf, PBLKSIZ) < 0) - return ioerr(db), -1; - - return 0; - } - - return ioerr(db), -1; -} - -int -sdbm_store(register DBM *db, datum key, datum val, int flags) -{ - int need; - register long hash; - - if (db == NULL || bad(key)) - return errno = EINVAL, -1; - if (sdbm_rdonly(db)) - return errno = EPERM, -1; - - need = key.dsize + val.dsize; -/* - * is the pair too big (or too small) for this database ?? - */ - if (need < 0 || need > PAIRMAX) - return errno = EINVAL, -1; - - if (getpage(db, (hash = exhash(key)))) { -/* - * if we need to replace, delete the key/data pair - * first. If it is not there, ignore. - */ - if (flags == DBM_REPLACE) - (void) delpair(db->pagbuf, key); -#if SEEDUPS - else if (duppair(db->pagbuf, key)) - return 1; -#endif -/* - * if we do not have enough room, we have to split. - */ - if (!fitpair(db->pagbuf, need)) - if (!makroom(db, hash, need)) - return ioerr(db), -1; -/* - * we have enough room or split is successful. insert the key, - * and update the page file. - */ - (void) putpair(db->pagbuf, key, val); - - if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0 - || write(db->pagf, db->pagbuf, PBLKSIZ) < 0) - return ioerr(db), -1; - /* - * success - */ - return 0; - } - - return ioerr(db), -1; -} - -/* - * makroom - make room by splitting the overfull page - * this routine will attempt to make room for SPLTMAX times before - * giving up. - */ -static int -makroom(register DBM *db, long int hash, int need) -{ - long newp; - char twin[PBLKSIZ]; -#if defined _WIN32 - char zer[PBLKSIZ]; - long oldtail; -#endif - char *pag = db->pagbuf; - char *new = twin; - register int smax = SPLTMAX; - - do { -/* - * split the current page - */ - (void) splpage(pag, new, db->hmask + 1); -/* - * address of the new page - */ - newp = (hash & db->hmask) | (db->hmask + 1); - debug(("newp: %ld\n", newp)); -/* - * write delay, read avoidance/cache shuffle: - * select the page for incoming pair: if key is to go to the new page, - * write out the previous one, and copy the new one over, thus making - * it the current page. If not, simply write the new page, and we are - * still looking at the page of interest. current page is not updated - * here, as sdbm_store will do so, after it inserts the incoming pair. - */ - -#if defined _WIN32 - /* - * Fill hole with 0 if made it. - * (hole is NOT read as 0) - */ - oldtail = lseek(db->pagf, 0L, SEEK_END); - memset(zer, 0, PBLKSIZ); - while (OFF_PAG(newp) > oldtail) { - if (lseek(db->pagf, 0L, SEEK_END) < 0 || - write(db->pagf, zer, PBLKSIZ) < 0) { - - return 0; - } - oldtail += PBLKSIZ; - } -#endif - - if (hash & (db->hmask + 1)) { - if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0 - || write(db->pagf, db->pagbuf, PBLKSIZ) < 0) - return 0; - db->pagbno = newp; - (void) memcpy(pag, new, PBLKSIZ); - } - else if (lseek(db->pagf, OFF_PAG(newp), SEEK_SET) < 0 - || write(db->pagf, new, PBLKSIZ) < 0) - return 0; - - if (!setdbit(db, db->curbit)) - return 0; -/* - * see if we have enough room now - */ - if (fitpair(pag, need)) - return 1; -/* - * try again... update curbit and hmask as getpage would have - * done. because of our update of the current page, we do not - * need to read in anything. BUT we have to write the current - * [deferred] page out, as the window of failure is too great. - */ - db->curbit = 2 * db->curbit + - ((hash & (db->hmask + 1)) ? 2 : 1); - db->hmask |= (db->hmask + 1); - - if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0 - || write(db->pagf, db->pagbuf, PBLKSIZ) < 0) - return 0; - - } while (--smax); -/* - * if we are here, this is real bad news. After SPLTMAX splits, - * we still cannot fit the key. say goodnight. - */ -#if BADMESS - (void) (write(2, "sdbm: cannot insert after SPLTMAX attempts.\n", 44) < 0); -#endif - return 0; - -} - -/* - * the following two routines will break if - * deletions aren't taken into account. (ndbm bug) - */ -datum -sdbm_firstkey(register DBM *db) -{ - if (db == NULL) - return errno = EINVAL, nullitem; -/* - * start at page 0 - */ - (void) memset(db->pagbuf, 0, PBLKSIZ); - if (lseek(db->pagf, OFF_PAG(0), SEEK_SET) < 0 - || read(db->pagf, db->pagbuf, PBLKSIZ) < 0) - return ioerr(db), nullitem; - db->pagbno = 0; - db->blkptr = 0; - db->keyptr = 0; - - return getnext(db); -} - -datum -sdbm_nextkey(register DBM *db) -{ - if (db == NULL) - return errno = EINVAL, nullitem; - return getnext(db); -} - -/* - * all important binary trie traversal - */ -static int -getpage(register DBM *db, register long int hash) -{ - register int hbit; - register long dbit; - register long pagb; - - dbit = 0; - hbit = 0; - while (dbit < db->maxbno && getdbit(db, dbit)) - dbit = 2 * dbit + ((hash & ((long) 1 << hbit++)) ? 2 : 1); - - debug(("dbit: %ld...", dbit)); - - db->curbit = dbit; - db->hmask = masks[hbit]; - - pagb = hash & db->hmask; -/* - * see if the block we need is already in memory. - * note: this lookaside cache has about 10% hit rate. - */ - if (pagb != db->pagbno) { -/* - * note: here, we assume a "hole" is read as 0s. - * if not, must zero pagbuf first. - */ - (void) memset(db->pagbuf, 0, PBLKSIZ); - - if (lseek(db->pagf, OFF_PAG(pagb), SEEK_SET) < 0 - || read(db->pagf, db->pagbuf, PBLKSIZ) < 0) - return 0; - if (!chkpage(db->pagbuf)) { - return 0; - } - db->pagbno = pagb; - - debug(("pag read: %ld\n", pagb)); - } - return 1; -} - -static int -getdbit(register DBM *db, register long int dbit) -{ - register long c; - register long dirb; - - c = dbit / BYTESIZ; - dirb = c / DBLKSIZ; - - if (dirb != db->dirbno) { - if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0 - || read(db->dirf, db->dirbuf, DBLKSIZ) < 0) - return 0; - db->dirbno = dirb; - - debug(("dir read: %ld\n", dirb)); - } - - return db->dirbuf[c % DBLKSIZ] & (1 << (dbit % BYTESIZ)); -} - -static int -setdbit(register DBM *db, register long int dbit) -{ - register long c; - register long dirb; - - c = dbit / BYTESIZ; - dirb = c / DBLKSIZ; - - if (dirb != db->dirbno) { - if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0 - || read(db->dirf, db->dirbuf, DBLKSIZ) < 0) - return 0; - db->dirbno = dirb; - - debug(("dir read: %ld\n", dirb)); - } - - db->dirbuf[c % DBLKSIZ] |= (1 << (dbit % BYTESIZ)); - - if (dbit >= db->maxbno) - db->maxbno += (long) DBLKSIZ * BYTESIZ; - - if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0 - || write(db->dirf, db->dirbuf, DBLKSIZ) < 0) - return 0; - - return 1; -} - -/* - * getnext - get the next key in the page, and if done with - * the page, try the next page in sequence - */ -static datum -getnext(register DBM *db) -{ - datum key; - - for (;;) { - db->keyptr++; - key = getnkey(db->pagbuf, db->keyptr); - if (key.dptr != NULL) - return key; -/* - * we either run out, or there is nothing on this page.. - * try the next one... If we lost our position on the - * file, we will have to seek. - */ - db->keyptr = 0; - if (db->pagbno != db->blkptr++) - if (lseek(db->pagf, OFF_PAG(db->blkptr), SEEK_SET) < 0) - break; - db->pagbno = db->blkptr; - if (read(db->pagf, db->pagbuf, PBLKSIZ) <= 0) - break; - if (!chkpage(db->pagbuf)) { - break; - } - } - - return ioerr(db), nullitem; -} - -/* pair.c */ -/* - * sdbm - ndbm work-alike hashed database library - * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978). - * author: oz@nexus.yorku.ca - * status: public domain. - * - * page-level routines - */ - -#ifndef BSD42 -/*#include */ -#endif - -#define exhash(item) sdbm_hash((item).dptr, (item).dsize) - -/* - * forward - */ -static int seepair proto((char *, int, char *, int)); - -/* - * page format: - * +------------------------------+ - * ino | n | keyoff | datoff | keyoff | - * +------------+--------+--------+ - * | datoff | - - - ----> | - * +--------+---------------------+ - * | F R E E A R E A | - * +--------------+---------------+ - * | <---- - - - | data | - * +--------+-----+----+----------+ - * | key | data | key | - * +--------+----------+----------+ - * - * calculating the offsets for free area: if the number - * of entries (ino[0]) is zero, the offset to the END of - * the free area is the block size. Otherwise, it is the - * nth (ino[ino[0]]) entry's offset. - */ - -static int -fitpair(char *pag, int need) -{ - register int n; - register int off; - register int free; - register short *ino = (short *) pag; - - off = ((n = GET_SHORT(ino,0)) > 0) ? GET_SHORT(ino,n) : PBLKSIZ; - free = off - (n + 1) * (int)sizeof(short); - need += 2 * (int)sizeof(short); - - debug(("free %d need %d\n", free, need)); - - return need <= free; -} - -static void -putpair(char *pag, datum key, datum val) -{ - register int n; - register int off; - register short *ino = (short *) pag; - - off = ((n = GET_SHORT(ino,0)) > 0) ? GET_SHORT(ino,n) : PBLKSIZ; -/* - * enter the key first - */ - off -= key.dsize; - if (key.dsize) - (void) memcpy(pag + off, key.dptr, key.dsize); - PUT_SHORT(ino,n + 1,off); -/* - * now the data - */ - off -= val.dsize; - if (val.dsize) - (void) memcpy(pag + off, val.dptr, val.dsize); - PUT_SHORT(ino,n + 2,off); -/* - * adjust item count - */ - PUT_SHORT(ino,0,GET_SHORT(ino,0) + 2); -} - -static datum -getpair(char *pag, datum key) -{ - register int i; - register int n; - datum val; - register short *ino = (short *) pag; - - if ((n = GET_SHORT(ino,0)) == 0) - return nullitem; - - if ((i = seepair(pag, n, key.dptr, key.dsize)) == 0) - return nullitem; - - val.dptr = pag + GET_SHORT(ino,i + 1); - val.dsize = GET_SHORT(ino,i) - GET_SHORT(ino,i + 1); - return val; -} - -#if SEEDUPS -static int -duppair(char *pag, datum key) -{ - register short *ino = (short *) pag; - return GET_SHORT(ino,0) > 0 && - seepair(pag, GET_SHORT(ino,0), key.dptr, key.dsize) > 0; -} -#endif - -static datum -getnkey(char *pag, int num) -{ - datum key; - register int off; - register short *ino = (short *) pag; - - num = num * 2 - 1; - if (GET_SHORT(ino,0) == 0 || num > GET_SHORT(ino,0)) - return nullitem; - - off = (num > 1) ? GET_SHORT(ino,num - 1) : PBLKSIZ; - - key.dptr = pag + GET_SHORT(ino,num); - key.dsize = off - GET_SHORT(ino,num); - - return key; -} - -static int -delpair(char *pag, datum key) -{ - register int n; - register int i; - register short *ino = (short *) pag; - - if ((n = GET_SHORT(ino,0)) == 0) - return 0; - - if ((i = seepair(pag, n, key.dptr, key.dsize)) == 0) - return 0; -/* - * found the key. if it is the last entry - * [i.e. i == n - 1] we just adjust the entry count. - * hard case: move all data down onto the deleted pair, - * shift offsets onto deleted offsets, and adjust them. - * [note: 0 < i < n] - */ - if (i < n - 1) { - register int m; - register char *dst = pag + (i == 1 ? PBLKSIZ : GET_SHORT(ino,i - 1)); - register char *src = pag + GET_SHORT(ino,i + 1); - register ptrdiff_t zoo = dst - src; - - debug(("free-up %"PRIdPTRDIFF" ", zoo)); -/* - * shift data/keys down - */ - m = GET_SHORT(ino,i + 1) - GET_SHORT(ino,n); -#ifdef DUFF -#define MOVB *--dst = *--src - - if (m > 0) { - register int loop = (m + 8 - 1) >> 3; - - switch (m & (8 - 1)) { - case 0: do { - MOVB; case 7: MOVB; - case 6: MOVB; case 5: MOVB; - case 4: MOVB; case 3: MOVB; - case 2: MOVB; case 1: MOVB; - } while (--loop); - } - } -#else -#ifdef MEMMOVE - memmove(dst-m, src-m, m); -#else - while (m--) - *--dst = *--src; -#endif -#endif -/* - * adjust offset index up - */ - while (i < n - 1) { - PUT_SHORT(ino,i, GET_SHORT(ino,i + 2) + zoo); - i++; - } - } - PUT_SHORT(ino, 0, GET_SHORT(ino, 0) - 2); - return 1; -} - -/* - * search for the key in the page. - * return offset index in the range 0 < i < n. - * return 0 if not found. - */ -static int -seepair(char *pag, register int n, register char *key, register int siz) -{ - register int i; - register int off = PBLKSIZ; - register short *ino = (short *) pag; - - for (i = 1; i < n; i += 2) { - if (siz == off - GET_SHORT(ino,i) && - memcmp(key, pag + GET_SHORT(ino,i), siz) == 0) - return i; - off = GET_SHORT(ino,i + 1); - } - return 0; -} - -static void -splpage(char *pag, char *new, long int sbit) -{ - datum key; - datum val; - - register int n; - register int off = PBLKSIZ; - char cur[PBLKSIZ]; - register short *ino = (short *) cur; - - (void) memcpy(cur, pag, PBLKSIZ); - (void) memset(pag, 0, PBLKSIZ); - (void) memset(new, 0, PBLKSIZ); - - n = GET_SHORT(ino,0); - for (ino++; n > 0; ino += 2) { - key.dptr = cur + GET_SHORT(ino,0); - key.dsize = off - GET_SHORT(ino,0); - val.dptr = cur + GET_SHORT(ino,1); - val.dsize = GET_SHORT(ino,0) - GET_SHORT(ino,1); -/* - * select the page pointer (by looking at sbit) and insert - */ - (void) putpair((exhash(key) & sbit) ? new : pag, key, val); - - off = GET_SHORT(ino,1); - n -= 2; - } - - debug(("%d split %d/%d\n", ((short *) cur)[0] / 2, - ((short *) new)[0] / 2, - ((short *) pag)[0] / 2)); -} - -/* - * check page sanity: - * number of entries should be something - * reasonable, and all offsets in the index should be in order. - * this could be made more rigorous. - */ -static int -chkpage(char *pag) -{ - register int n; - register int off; - register short *ino = (short *) pag; - - if ((n = GET_SHORT(ino,0)) < 0 || n > PBLKSIZ / (int)sizeof(short)) - return 0; - - if (n > 0) { - off = PBLKSIZ; - for (ino++; n > 0; ino += 2) { - if (GET_SHORT(ino,0) > off || GET_SHORT(ino,1) > off || - GET_SHORT(ino,1) > GET_SHORT(ino,0)) - return 0; - off = GET_SHORT(ino,1); - n -= 2; - } - } - return 1; -} - -/* hash.c */ -/* - * sdbm - ndbm work-alike hashed database library - * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978). - * author: oz@nexus.yorku.ca - * status: public domain. keep it that way. - * - * hashing routine - */ - -/* - * polynomial conversion ignoring overflows - * [this seems to work remarkably well, in fact better - * then the ndbm hash function. Replace at your own risk] - * use: 65599 nice. - * 65587 even better. - */ -long -sdbm_hash(register char *str, register int len) -{ - register unsigned long n = 0; - -#ifdef DUFF - -#define HASHC n = *str++ + 65599 * n - - if (len > 0) { - register int loop = (len + 8 - 1) >> 3; - - switch(len & (8 - 1)) { - case 0: do { - HASHC; case 7: HASHC; - case 6: HASHC; case 5: HASHC; - case 4: HASHC; case 3: HASHC; - case 2: HASHC; case 1: HASHC; - } while (--loop); - } - - } -#else - while (len--) - n = ((*str++) & 255) + 65587L * n; -#endif - return n; -} diff --git a/ruby/ext/sdbm/depend b/ruby/ext/sdbm/depend deleted file mode 100644 index d475eccce..000000000 --- a/ruby/ext/sdbm/depend +++ /dev/null @@ -1,27 +0,0 @@ -# AUTOGENERATED DEPENDENCIES START -_sdbm.o: $(RUBY_EXTCONF_H) -_sdbm.o: $(arch_hdrdir)/ruby/config.h -_sdbm.o: $(hdrdir)/ruby/assert.h -_sdbm.o: $(hdrdir)/ruby/backward.h -_sdbm.o: $(hdrdir)/ruby/defines.h -_sdbm.o: $(hdrdir)/ruby/intern.h -_sdbm.o: $(hdrdir)/ruby/missing.h -_sdbm.o: $(hdrdir)/ruby/ruby.h -_sdbm.o: $(hdrdir)/ruby/st.h -_sdbm.o: $(hdrdir)/ruby/subst.h -_sdbm.o: _sdbm.c -_sdbm.o: sdbm.h -init.o: $(RUBY_EXTCONF_H) -init.o: $(arch_hdrdir)/ruby/config.h -init.o: $(hdrdir)/ruby.h -init.o: $(hdrdir)/ruby/assert.h -init.o: $(hdrdir)/ruby/backward.h -init.o: $(hdrdir)/ruby/defines.h -init.o: $(hdrdir)/ruby/intern.h -init.o: $(hdrdir)/ruby/missing.h -init.o: $(hdrdir)/ruby/ruby.h -init.o: $(hdrdir)/ruby/st.h -init.o: $(hdrdir)/ruby/subst.h -init.o: init.c -init.o: sdbm.h -# AUTOGENERATED DEPENDENCIES END diff --git a/ruby/ext/sdbm/extconf.rb b/ruby/ext/sdbm/extconf.rb deleted file mode 100644 index bdf3e299e..000000000 --- a/ruby/ext/sdbm/extconf.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: false -require 'mkmf' - -$defs << "-D""BADMESS=0" -create_makefile("sdbm") diff --git a/ruby/ext/sdbm/init.c b/ruby/ext/sdbm/init.c deleted file mode 100644 index 42292b99c..000000000 --- a/ruby/ext/sdbm/init.c +++ /dev/null @@ -1,1067 +0,0 @@ -/************************************************ - - sdbminit.c - - - $Author$ - created at: Fri May 7 08:34:24 JST 1999 - - Copyright (C) 1995-2001 Yukihiro Matsumoto - -************************************************/ - -#include "ruby.h" - -#include "sdbm.h" -#include -#include - -/* - * Document-class: SDBM - * - * SDBM provides a simple file-based key-value store, which can only store - * String keys and values. - * - * Note that Ruby comes with the source code for SDBM, while the DBM and GDBM - * standard libraries rely on external libraries and headers. - * - * === Examples - * - * Insert values: - * - * require 'sdbm' - * - * SDBM.open 'my_database' do |db| - * db['apple'] = 'fruit' - * db['pear'] = 'fruit' - * db['carrot'] = 'vegetable' - * db['tomato'] = 'vegetable' - * end - * - * Bulk update: - * - * require 'sdbm' - * - * SDBM.open 'my_database' do |db| - * db.update('peach' => 'fruit', 'tomato' => 'fruit') - * end - * - * Retrieve values: - * - * require 'sdbm' - * - * SDBM.open 'my_database' do |db| - * db.each do |key, value| - * puts "Key: #{key}, Value: #{value}" - * end - * end - * - * Outputs: - * - * Key: apple, Value: fruit - * Key: pear, Value: fruit - * Key: carrot, Value: vegetable - * Key: peach, Value: fruit - * Key: tomato, Value: fruit - */ - -static VALUE rb_cDBM, rb_eDBMError; - -struct dbmdata { - int di_size; - DBM *di_dbm; -}; - -NORETURN(static void closed_sdbm(void)); - -static void -closed_sdbm(void) -{ - rb_raise(rb_eDBMError, "closed SDBM file"); -} - -#define GetDBM(obj, dbmp) do {\ - TypedData_Get_Struct((obj), struct dbmdata, &sdbm_type, (dbmp));\ - if ((dbmp)->di_dbm == 0) closed_sdbm();\ -} while (0) - -#define GetDBM2(obj, dbmp, dbm) do {\ - GetDBM((obj), (dbmp));\ - (dbm) = (dbmp)->di_dbm;\ -} while (0) - -static void -free_sdbm(void *ptr) -{ - struct dbmdata *dbmp = ptr; - - if (dbmp->di_dbm) sdbm_close(dbmp->di_dbm); - ruby_xfree(dbmp); -} - -static size_t -memsize_dbm(const void *ptr) -{ - const struct dbmdata *dbmp = ptr; - size_t size = sizeof(*dbmp); - if (dbmp->di_dbm) - size += sizeof(DBM); - return size; -} - -static const rb_data_type_t sdbm_type = { - "sdbm", - {0, free_sdbm, memsize_dbm,}, - 0, 0, - RUBY_TYPED_FREE_IMMEDIATELY, -}; - -/* - * call-seq: - * sdbm.close -> nil - * - * Closes the database file. - * - * Raises SDBMError if the database is already closed. - */ -static VALUE -fsdbm_close(VALUE obj) -{ - struct dbmdata *dbmp; - - GetDBM(obj, dbmp); - sdbm_close(dbmp->di_dbm); - dbmp->di_dbm = 0; - - return Qnil; -} - -/* - * call-seq: - * sdbm.closed? -> true or false - * - * Returns +true+ if the database is closed. - */ -static VALUE -fsdbm_closed(VALUE obj) -{ - struct dbmdata *dbmp; - - TypedData_Get_Struct(obj, struct dbmdata, &sdbm_type, dbmp); - if (dbmp->di_dbm == 0) - return Qtrue; - - return Qfalse; -} - -static VALUE -fsdbm_alloc(VALUE klass) -{ - struct dbmdata *dbmp; - - return TypedData_Make_Struct(klass, struct dbmdata, &sdbm_type, dbmp); -} -/* - * call-seq: - * SDBM.new(filename, mode = 0666) - * - * Creates a new database handle by opening the given +filename+. SDBM actually - * uses two physical files, with extensions '.dir' and '.pag'. These extensions - * will automatically be appended to the +filename+. - * - * If the file does not exist, a new file will be created using the given - * +mode+, unless +mode+ is explicitly set to nil. In the latter case, no - * database will be created. - * - * If the file exists, it will be opened in read/write mode. If this fails, it - * will be opened in read-only mode. - */ -static VALUE -fsdbm_initialize(int argc, VALUE *argv, VALUE obj) -{ - VALUE file, vmode; - DBM *dbm; - struct dbmdata *dbmp; - int mode; - - TypedData_Get_Struct(obj, struct dbmdata, &sdbm_type, dbmp); - if (rb_scan_args(argc, argv, "11", &file, &vmode) == 1) { - mode = 0666; /* default value */ - } - else if (NIL_P(vmode)) { - mode = -1; /* return nil if DB not exist */ - } - else { - mode = NUM2INT(vmode); - } - FilePathValue(file); - - dbm = 0; - if (mode >= 0) - dbm = sdbm_open(RSTRING_PTR(file), O_RDWR|O_CREAT, mode); - if (!dbm) - dbm = sdbm_open(RSTRING_PTR(file), O_RDWR, 0); - if (!dbm) - dbm = sdbm_open(RSTRING_PTR(file), O_RDONLY, 0); - - if (!dbm) { - if (mode == -1) return Qnil; - rb_sys_fail_str(file); - } - - if (dbmp->di_dbm) - sdbm_close(dbmp->di_dbm); - dbmp->di_dbm = dbm; - dbmp->di_size = -1; - - return obj; -} - -/* - * call-seq: - * SDBM.open(filename, mode = 0666) - * SDBM.open(filename, mode = 0666) { |sdbm| ... } - * - * If called without a block, this is the same as SDBM.new. - * - * If a block is given, the new database will be passed to the block and - * will be safely closed after the block has executed. - * - * Example: - * - * require 'sdbm' - * - * SDBM.open('my_database') do |db| - * db['hello'] = 'world' - * end - */ -static VALUE -fsdbm_s_open(int argc, VALUE *argv, VALUE klass) -{ - VALUE obj = fsdbm_alloc(klass); - - if (NIL_P(fsdbm_initialize(argc, argv, obj))) { - return Qnil; - } - - if (rb_block_given_p()) { - return rb_ensure(rb_yield, obj, fsdbm_close, obj); - } - - return obj; -} - -static VALUE -fsdbm_fetch(VALUE obj, VALUE keystr, VALUE ifnone) -{ - datum key, value; - struct dbmdata *dbmp; - DBM *dbm; - - ExportStringValue(keystr); - key.dptr = RSTRING_PTR(keystr); - key.dsize = RSTRING_LENINT(keystr); - - GetDBM2(obj, dbmp, dbm); - value = sdbm_fetch(dbm, key); - if (value.dptr == 0) { - if (ifnone == Qnil && rb_block_given_p()) - return rb_yield(rb_external_str_new(key.dptr, key.dsize)); - return ifnone; - } - return rb_external_str_new(value.dptr, value.dsize); -} - -/* - * call-seq: - * sdbm[key] -> value or nil - * - * Returns the +value+ in the database associated with the given +key+ string. - * - * If no value is found, returns +nil+. - */ -static VALUE -fsdbm_aref(VALUE obj, VALUE keystr) -{ - return fsdbm_fetch(obj, keystr, Qnil); -} - -/* - * call-seq: - * sdbm.fetch(key) -> value or nil - * sdbm.fetch(key) { |key| ... } - * - * Returns the +value+ in the database associated with the given +key+ string. - * - * If a block is provided, the block will be called when there is no - * +value+ associated with the given +key+. The +key+ will be passed in as an - * argument to the block. - * - * If no block is provided and no value is associated with the given +key+, - * then an IndexError will be raised. - */ -static VALUE -fsdbm_fetch_m(int argc, VALUE *argv, VALUE obj) -{ - VALUE keystr, valstr, ifnone; - - rb_scan_args(argc, argv, "11", &keystr, &ifnone); - valstr = fsdbm_fetch(obj, keystr, ifnone); - if (argc == 1 && !rb_block_given_p() && NIL_P(valstr)) - rb_raise(rb_eIndexError, "key not found"); - - return valstr; -} - -/* - * call-seq: - * sdbm.key(value) -> key - * - * Returns the +key+ associated with the given +value+. If more than one - * +key+ corresponds to the given +value+, then the first key to be found - * will be returned. If no keys are found, +nil+ will be returned. - */ -static VALUE -fsdbm_key(VALUE obj, VALUE valstr) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - - ExportStringValue(valstr); - val.dptr = RSTRING_PTR(valstr); - val.dsize = RSTRING_LENINT(valstr); - - GetDBM2(obj, dbmp, dbm); - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - val = sdbm_fetch(dbm, key); - if (val.dsize == RSTRING_LEN(valstr) && - memcmp(val.dptr, RSTRING_PTR(valstr), val.dsize) == 0) - return rb_external_str_new(key.dptr, key.dsize); - } - return Qnil; -} - -/* - * :nodoc: - */ -static VALUE -fsdbm_index(VALUE hash, VALUE value) -{ - rb_warn("SDBM#index is deprecated; use SDBM#key"); - return fsdbm_key(hash, value); -} - -/* call-seq: - * sdbm.select { |key, value| ... } -> Array - * - * Returns a new Array of key-value pairs for which the block returns +true+. - * - * Example: - * - * require 'sdbm' - * - * SDBM.open 'my_database' do |db| - * db['apple'] = 'fruit' - * db['pear'] = 'fruit' - * db['spinach'] = 'vegetable' - * - * veggies = db.select do |key, value| - * value == 'vegetable' - * end #=> [["apple", "fruit"], ["pear", "fruit"]] - * end - */ -static VALUE -fsdbm_select(VALUE obj) -{ - VALUE new = rb_ary_new(); - datum key, val; - DBM *dbm; - struct dbmdata *dbmp; - - GetDBM2(obj, dbmp, dbm); - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - VALUE assoc, v; - val = sdbm_fetch(dbm, key); - assoc = rb_assoc_new(rb_external_str_new(key.dptr, key.dsize), - rb_external_str_new(val.dptr, val.dsize)); - v = rb_yield(assoc); - if (RTEST(v)) { - rb_ary_push(new, assoc); - } - GetDBM2(obj, dbmp, dbm); - } - - return new; -} - -/* call-seq: - * sdbm.values_at(key, ...) -> Array - * - * Returns an Array of values corresponding to the given keys. - */ -static VALUE -fsdbm_values_at(int argc, VALUE *argv, VALUE obj) -{ - VALUE new = rb_ary_new2(argc); - int i; - - for (i=0; i value or nil - * sdbm.delete(key) { |key, value| ... } - * - * Deletes the key-value pair corresponding to the given +key+. If the - * +key+ exists, the deleted value will be returned, otherwise +nil+. - * - * If a block is provided, the deleted +key+ and +value+ will be passed to - * the block as arguments. If the +key+ does not exist in the database, the - * value will be +nil+. - */ -static VALUE -fsdbm_delete(VALUE obj, VALUE keystr) -{ - datum key, value; - struct dbmdata *dbmp; - DBM *dbm; - VALUE valstr; - - fdbm_modify(obj); - ExportStringValue(keystr); - key.dptr = RSTRING_PTR(keystr); - key.dsize = RSTRING_LENINT(keystr); - - GetDBM2(obj, dbmp, dbm); - dbmp->di_size = -1; - - value = sdbm_fetch(dbm, key); - if (value.dptr == 0) { - if (rb_block_given_p()) return rb_yield(keystr); - return Qnil; - } - - /* need to save value before sdbm_delete() */ - valstr = rb_external_str_new(value.dptr, value.dsize); - - if (sdbm_delete(dbm, key)) { - dbmp->di_size = -1; - rb_raise(rb_eDBMError, "dbm_delete failed"); - } - else if (dbmp->di_size >= 0) { - dbmp->di_size--; - } - return valstr; -} - -/* - * call-seq: - * sdbm.shift -> Array or nil - * - * Removes a key-value pair from the database and returns them as an - * Array. If the database is empty, returns +nil+. - */ -static VALUE -fsdbm_shift(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - VALUE keystr, valstr; - - fdbm_modify(obj); - GetDBM2(obj, dbmp, dbm); - key = sdbm_firstkey(dbm); - if (!key.dptr) return Qnil; - val = sdbm_fetch(dbm, key); - keystr = rb_external_str_new(key.dptr, key.dsize); - valstr = rb_external_str_new(val.dptr, val.dsize); - sdbm_delete(dbm, key); - if (dbmp->di_size >= 0) { - dbmp->di_size--; - } - - return rb_assoc_new(keystr, valstr); -} - -/* - * call-seq: - * sdbm.delete_if { |key, value| ... } -> self - * sdbm.reject! { |key, value| ... } -> self - * - * Iterates over the key-value pairs in the database, deleting those for - * which the block returns +true+. - */ -static VALUE -fsdbm_delete_if(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - VALUE keystr, valstr; - VALUE ret, ary = rb_ary_new(); - long i; - int status = 0, n; - - fdbm_modify(obj); - GetDBM2(obj, dbmp, dbm); - n = dbmp->di_size; - dbmp->di_size = -1; - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - val = sdbm_fetch(dbm, key); - keystr = rb_external_str_new(key.dptr, key.dsize); - valstr = rb_external_str_new(val.dptr, val.dsize); - ret = rb_protect(rb_yield, rb_assoc_new(rb_str_dup(keystr), valstr), &status); - if (status != 0) break; - if (RTEST(ret)) rb_ary_push(ary, keystr); - GetDBM2(obj, dbmp, dbm); - } - - for (i = 0; i < RARRAY_LEN(ary); i++) { - keystr = RARRAY_AREF(ary, i); - ExportStringValue(keystr); - key.dptr = RSTRING_PTR(keystr); - key.dsize = RSTRING_LENINT(keystr); - if (sdbm_delete(dbm, key)) { - rb_raise(rb_eDBMError, "sdbm_delete failed"); - } - } - if (status) rb_jump_tag(status); - if (n > 0) dbmp->di_size = n - RARRAY_LENINT(ary); - - return obj; -} - -/* - * call-seq: - * sdbm.clear -> self - * - * Deletes all data from the database. - */ -static VALUE -fsdbm_clear(VALUE obj) -{ - datum key; - struct dbmdata *dbmp; - DBM *dbm; - - fdbm_modify(obj); - GetDBM2(obj, dbmp, dbm); - dbmp->di_size = -1; - while (key = sdbm_firstkey(dbm), key.dptr) { - if (sdbm_delete(dbm, key)) { - rb_raise(rb_eDBMError, "sdbm_delete failed"); - } - } - dbmp->di_size = 0; - - return obj; -} - -/* - * call-seq: - * sdbm.invert -> Hash - * - * Returns a Hash in which the key-value pairs have been inverted. - * - * Example: - * - * require 'sdbm' - * - * SDBM.open 'my_database' do |db| - * db.update('apple' => 'fruit', 'spinach' => 'vegetable') - * - * db.invert #=> {"fruit" => "apple", "vegetable" => "spinach"} - * end - */ -static VALUE -fsdbm_invert(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - VALUE keystr, valstr; - VALUE hash = rb_hash_new(); - - GetDBM2(obj, dbmp, dbm); - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - val = sdbm_fetch(dbm, key); - keystr = rb_external_str_new(key.dptr, key.dsize); - valstr = rb_external_str_new(val.dptr, val.dsize); - rb_hash_aset(hash, valstr, keystr); - } - return hash; -} - -/* - * call-seq: - * sdbm[key] = value -> value - * sdbm.store(key, value) -> value - * - * Stores a new +value+ in the database with the given +key+ as an index. - * - * If the +key+ already exists, this will update the +value+ associated with - * the +key+. - * - * Returns the given +value+. - */ -static VALUE -fsdbm_store(VALUE obj, VALUE keystr, VALUE valstr) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - - if (valstr == Qnil) { - fsdbm_delete(obj, keystr); - return Qnil; - } - - fdbm_modify(obj); - ExportStringValue(keystr); - ExportStringValue(valstr); - - key.dptr = RSTRING_PTR(keystr); - key.dsize = RSTRING_LENINT(keystr); - - val.dptr = RSTRING_PTR(valstr); - val.dsize = RSTRING_LENINT(valstr); - - GetDBM2(obj, dbmp, dbm); - dbmp->di_size = -1; - if (sdbm_store(dbm, key, val, DBM_REPLACE)) { -#ifdef HAVE_DBM_CLAERERR - sdbm_clearerr(dbm); -#endif - if (errno == EPERM) rb_sys_fail(0); - rb_raise(rb_eDBMError, "sdbm_store failed"); - } - - return valstr; -} - -static VALUE -update_i(RB_BLOCK_CALL_FUNC_ARGLIST(pair, dbm)) -{ - const VALUE *ptr; - Check_Type(pair, T_ARRAY); - if (RARRAY_LEN(pair) < 2) { - rb_raise(rb_eArgError, "pair must be [key, value]"); - } - ptr = RARRAY_CONST_PTR(pair); - fsdbm_store(dbm, ptr[0], ptr[1]); - return Qnil; -} - -/* - * call-seq: - * sdbm.update(pairs) -> self - * - * Insert or update key-value pairs. - * - * This method will work with any object which implements an each_pair - * method, such as a Hash. - */ -static VALUE -fsdbm_update(VALUE obj, VALUE other) -{ - rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); - return obj; -} - -/* - * call-seq: - * sdbm.replace(pairs) -> self - * - * Empties the database, then inserts the given key-value pairs. - * - * This method will work with any object which implements an each_pair - * method, such as a Hash. - */ -static VALUE -fsdbm_replace(VALUE obj, VALUE other) -{ - fsdbm_clear(obj); - rb_block_call(other, rb_intern("each_pair"), 0, 0, update_i, obj); - return obj; -} - -/* - * call-seq: - * sdbm.length -> integer - * sdbm.size -> integer - * - * Returns the number of keys in the database. - */ -static VALUE -fsdbm_length(VALUE obj) -{ - datum key; - struct dbmdata *dbmp; - DBM *dbm; - int i = 0; - - GetDBM2(obj, dbmp, dbm); - if (dbmp->di_size > 0) return INT2FIX(dbmp->di_size); - - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - i++; - } - dbmp->di_size = i; - - return INT2FIX(i); -} - -/* - * call-seq: - * sdbm.empty? -> true or false - * - * Returns +true+ if the database is empty. - */ -static VALUE -fsdbm_empty_p(VALUE obj) -{ - datum key; - struct dbmdata *dbmp; - DBM *dbm; - - GetDBM(obj, dbmp); - if (dbmp->di_size < 0) { - dbm = dbmp->di_dbm; - - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - return Qfalse; - } - } - else { - if (dbmp->di_size) - return Qfalse; - } - return Qtrue; -} - -/* - * call-seq: - * sdbm.each_value - * sdbm.each_value { |value| ... } - * - * Iterates over each +value+ in the database. - * - * If no block is given, returns an Enumerator. - */ -static VALUE -fsdbm_each_value(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - - RETURN_ENUMERATOR(obj, 0, 0); - - GetDBM2(obj, dbmp, dbm); - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - val = sdbm_fetch(dbm, key); - rb_yield(rb_external_str_new(val.dptr, val.dsize)); - GetDBM2(obj, dbmp, dbm); - } - return obj; -} - -/* - * call-seq: - * sdbm.each_key - * sdbm.each_key { |key| ... } - * - * Iterates over each +key+ in the database. - * - * If no block is given, returns an Enumerator. - */ -static VALUE -fsdbm_each_key(VALUE obj) -{ - datum key; - struct dbmdata *dbmp; - DBM *dbm; - - RETURN_ENUMERATOR(obj, 0, 0); - - GetDBM2(obj, dbmp, dbm); - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - rb_yield(rb_external_str_new(key.dptr, key.dsize)); - GetDBM2(obj, dbmp, dbm); - } - return obj; -} - -/* - * call-seq: - * sdbm.each - * sdbm.each { |key, value| ... } - * sdbm.each_pair - * sdbm.each_pair { |key, value| ... } - * - * Iterates over each key-value pair in the database. - * - * If no block is given, returns an Enumerator. - */ -static VALUE -fsdbm_each_pair(VALUE obj) -{ - datum key, val; - DBM *dbm; - struct dbmdata *dbmp; - VALUE keystr, valstr; - - RETURN_ENUMERATOR(obj, 0, 0); - - GetDBM2(obj, dbmp, dbm); - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - val = sdbm_fetch(dbm, key); - keystr = rb_external_str_new(key.dptr, key.dsize); - valstr = rb_external_str_new(val.dptr, val.dsize); - rb_yield(rb_assoc_new(keystr, valstr)); - GetDBM2(obj, dbmp, dbm); - } - - return obj; -} - -/* - * call-seq: - * sdbm.keys -> Array - * - * Returns a new Array containing the keys in the database. - */ -static VALUE -fsdbm_keys(VALUE obj) -{ - datum key; - struct dbmdata *dbmp; - DBM *dbm; - VALUE ary; - - GetDBM2(obj, dbmp, dbm); - ary = rb_ary_new(); - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - rb_ary_push(ary, rb_external_str_new(key.dptr, key.dsize)); - } - - return ary; -} - -/* - * call-seq: - * sdbm.values -> Array - * - * Returns a new Array containing the values in the database. - */ -static VALUE -fsdbm_values(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - VALUE ary; - - GetDBM2(obj, dbmp, dbm); - ary = rb_ary_new(); - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - val = sdbm_fetch(dbm, key); - rb_ary_push(ary, rb_external_str_new(val.dptr, val.dsize)); - } - - return ary; -} - -/* - * call-seq: - * sdbm.include?(key) -> true or false - * sdbm.key?(key) -> true or false - * sdbm.member?(key) -> true or false - * sdbm.has_key?(key) -> true or false - * - * Returns +true+ if the database contains the given +key+. - */ -static VALUE -fsdbm_has_key(VALUE obj, VALUE keystr) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - - ExportStringValue(keystr); - key.dptr = RSTRING_PTR(keystr); - key.dsize = RSTRING_LENINT(keystr); - - GetDBM2(obj, dbmp, dbm); - val = sdbm_fetch(dbm, key); - if (val.dptr) return Qtrue; - return Qfalse; -} - -/* - * call-seq: - * sdbm.value?(key) -> true or false - * sdbm.has_value?(key) -> true or false - * - * Returns +true+ if the database contains the given +value+. - */ -static VALUE -fsdbm_has_value(VALUE obj, VALUE valstr) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - - ExportStringValue(valstr); - val.dptr = RSTRING_PTR(valstr); - val.dsize = RSTRING_LENINT(valstr); - - GetDBM2(obj, dbmp, dbm); - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - val = sdbm_fetch(dbm, key); - if (val.dsize == RSTRING_LENINT(valstr) && - memcmp(val.dptr, RSTRING_PTR(valstr), val.dsize) == 0) - return Qtrue; - } - return Qfalse; -} - -/* - * call-seq: - * sdbm.to_a -> Array - * - * Returns a new Array containing each key-value pair in the database. - * - * Example: - * - * require 'sdbm' - * - * SDBM.open 'my_database' do |db| - * db.update('apple' => 'fruit', 'spinach' => 'vegetable') - * - * db.to_a #=> [["apple", "fruit"], ["spinach", "vegetable"]] - * end - */ -static VALUE -fsdbm_to_a(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - VALUE ary; - - GetDBM2(obj, dbmp, dbm); - ary = rb_ary_new(); - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - val = sdbm_fetch(dbm, key); - rb_ary_push(ary, rb_assoc_new(rb_external_str_new(key.dptr, key.dsize), - rb_external_str_new(val.dptr, val.dsize))); - } - - return ary; -} - -/* - * call-seq: - * sdbm.to_hash -> Hash - * - * Returns a new Hash containing each key-value pair in the database. - */ -static VALUE -fsdbm_to_hash(VALUE obj) -{ - datum key, val; - struct dbmdata *dbmp; - DBM *dbm; - VALUE hash; - - GetDBM2(obj, dbmp, dbm); - hash = rb_hash_new(); - for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { - val = sdbm_fetch(dbm, key); - rb_hash_aset(hash, rb_external_str_new(key.dptr, key.dsize), - rb_external_str_new(val.dptr, val.dsize)); - } - - return hash; -} - -/* - * call-seq: - * sdbm.reject { |key, value| ... } -> Hash - * - * Creates a new Hash using the key-value pairs from the database, then - * calls Hash#reject with the given block, which returns a Hash with - * only the key-value pairs for which the block returns +false+. - */ -static VALUE -fsdbm_reject(VALUE obj) -{ - return rb_hash_delete_if(fsdbm_to_hash(obj)); -} - -void -Init_sdbm(void) -{ - rb_cDBM = rb_define_class("SDBM", rb_cObject); - rb_eDBMError = rb_define_class("SDBMError", rb_eStandardError); - /* Document-class: SDBMError - * Exception class used to return errors from the sdbm library. - */ - rb_include_module(rb_cDBM, rb_mEnumerable); - - rb_define_alloc_func(rb_cDBM, fsdbm_alloc); - rb_define_singleton_method(rb_cDBM, "open", fsdbm_s_open, -1); - - rb_define_method(rb_cDBM, "initialize", fsdbm_initialize, -1); - rb_define_method(rb_cDBM, "close", fsdbm_close, 0); - rb_define_method(rb_cDBM, "closed?", fsdbm_closed, 0); - rb_define_method(rb_cDBM, "[]", fsdbm_aref, 1); - rb_define_method(rb_cDBM, "fetch", fsdbm_fetch_m, -1); - rb_define_method(rb_cDBM, "[]=", fsdbm_store, 2); - rb_define_method(rb_cDBM, "store", fsdbm_store, 2); - rb_define_method(rb_cDBM, "index", fsdbm_index, 1); - rb_define_method(rb_cDBM, "key", fsdbm_key, 1); - rb_define_method(rb_cDBM, "select", fsdbm_select, 0); - rb_define_method(rb_cDBM, "values_at", fsdbm_values_at, -1); - rb_define_method(rb_cDBM, "length", fsdbm_length, 0); - rb_define_method(rb_cDBM, "size", fsdbm_length, 0); - rb_define_method(rb_cDBM, "empty?", fsdbm_empty_p, 0); - rb_define_method(rb_cDBM, "each", fsdbm_each_pair, 0); - rb_define_method(rb_cDBM, "each_value", fsdbm_each_value, 0); - rb_define_method(rb_cDBM, "each_key", fsdbm_each_key, 0); - rb_define_method(rb_cDBM, "each_pair", fsdbm_each_pair, 0); - rb_define_method(rb_cDBM, "keys", fsdbm_keys, 0); - rb_define_method(rb_cDBM, "values", fsdbm_values, 0); - rb_define_method(rb_cDBM, "shift", fsdbm_shift, 0); - rb_define_method(rb_cDBM, "delete", fsdbm_delete, 1); - rb_define_method(rb_cDBM, "delete_if", fsdbm_delete_if, 0); - rb_define_method(rb_cDBM, "reject!", fsdbm_delete_if, 0); - rb_define_method(rb_cDBM, "reject", fsdbm_reject, 0); - rb_define_method(rb_cDBM, "clear", fsdbm_clear, 0); - rb_define_method(rb_cDBM,"invert", fsdbm_invert, 0); - rb_define_method(rb_cDBM,"update", fsdbm_update, 1); - rb_define_method(rb_cDBM,"replace", fsdbm_replace, 1); - - rb_define_method(rb_cDBM, "has_key?", fsdbm_has_key, 1); - rb_define_method(rb_cDBM, "include?", fsdbm_has_key, 1); - rb_define_method(rb_cDBM, "key?", fsdbm_has_key, 1); - rb_define_method(rb_cDBM, "member?", fsdbm_has_key, 1); - rb_define_method(rb_cDBM, "has_value?", fsdbm_has_value, 1); - rb_define_method(rb_cDBM, "value?", fsdbm_has_value, 1); - - rb_define_method(rb_cDBM, "to_a", fsdbm_to_a, 0); - rb_define_method(rb_cDBM, "to_hash", fsdbm_to_hash, 0); -} diff --git a/ruby/ext/sdbm/sdbm.gemspec b/ruby/ext/sdbm/sdbm.gemspec deleted file mode 100644 index 6cf000b45..000000000 --- a/ruby/ext/sdbm/sdbm.gemspec +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -Gem::Specification.new do |s| - s.name = "sdbm" - s.version = '1.0.0' - s.summary = "Provides a simple file-based key-value store with String keys and values." - s.description = "Provides a simple file-based key-value store with String keys and values." - - s.require_path = %w{lib} - s.files = %w{ext/sdbm/_sdbm.c ext/sdbm/extconf.rb ext/sdbm/init.c ext/sdbm/sdbm.h} - s.extensions = ["ext/sdbm/extconf.rb"] - s.required_ruby_version = ">= 2.3.0" - - s.authors = ["Yukihiro Matsumoto"] - s.email = ["matz@ruby-lang.org"] - s.homepage = "https://github.com/ruby/sdbm" - s.license = "BSD-2-Clause" - - s.add_development_dependency "test-unit" - s.add_development_dependency "rake-compiler" -end diff --git a/ruby/ext/sdbm/sdbm.h b/ruby/ext/sdbm/sdbm.h deleted file mode 100644 index c3b53c4a8..000000000 --- a/ruby/ext/sdbm/sdbm.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * sdbm - ndbm work-alike hashed database library - * based on Per-Ake Larson's Dynamic Hashing algorithms. BIT 18 (1978). - * author: oz@nexus.yorku.ca - * status: public domain. - */ -#ifndef _SDBM_H_ -#define _SDBM_H_ - -#include - -#define DBLKSIZ 4096 -#define PBLKSIZ 1024 -#define PAIRMAX 1008 /* arbitrary on PBLKSIZ-N */ -#define SPLTMAX 10 /* maximum allowed splits */ - /* for a single insertion */ -#define DIRFEXT ".dir" -#define PAGFEXT ".pag" - -typedef struct { - int dirf; /* directory file descriptor */ - int pagf; /* page file descriptor */ - int flags; /* status/error flags, see below */ - int keyptr; /* current key for nextkey */ - off_t maxbno; /* size of dirfile in bits */ - long curbit; /* current bit number */ - long hmask; /* current hash mask */ - long blkptr; /* current block for nextkey */ - long blkno; /* current page to read/write */ - long pagbno; /* current page in pagbuf */ - char pagbuf[PBLKSIZ]; /* page file block buffer */ - long dirbno; /* current block in dirbuf */ - char dirbuf[DBLKSIZ]; /* directory file block buffer */ -} DBM; - -#define DBM_RDONLY 0x1 /* data base open read-only */ -#define DBM_IOERR 0x2 /* data base I/O error */ - -/* - * utility macros - */ -#define sdbm_rdonly(db) ((db)->flags & DBM_RDONLY) -#define sdbm_error(db) ((db)->flags & DBM_IOERR) - -#define sdbm_clearerr(db) ((db)->flags &= ~DBM_IOERR) /* ouch */ - -#define sdbm_dirfno(db) ((db)->dirf) -#define sdbm_pagfno(db) ((db)->pagf) - -typedef struct { - char *dptr; - int dsize; -} datum; - -extern datum nullitem; - -#if defined(__STDC__) -#define proto(p) p -#else -#define proto(p) () -#endif - -/* - * flags to sdbm_store - */ -#define DBM_INSERT 0 -#define DBM_REPLACE 1 - -/* - * ndbm interface - */ -extern DBM *sdbm_open proto((char *, int, int)); -extern void sdbm_close proto((DBM *)); -extern datum sdbm_fetch proto((DBM *, datum)); -extern int sdbm_delete proto((DBM *, datum)); -extern int sdbm_store proto((DBM *, datum, datum, int)); -extern datum sdbm_firstkey proto((DBM *)); -extern datum sdbm_nextkey proto((DBM *)); - -/* - * other - */ -extern DBM *sdbm_prep proto((char *, char *, int, int)); -extern long sdbm_hash proto((char *, int)); - -#endif /* _SDBM_H_ */ diff --git a/ruby/ext/socket/ancdata.c b/ruby/ext/socket/ancdata.c index 84463af06..aa62cab0e 100644 --- a/ruby/ext/socket/ancdata.c +++ b/ruby/ext/socket/ancdata.c @@ -2,7 +2,6 @@ #include -int rsock_cmsg_cloexec_state = -1; /* <0: unknown, 0: ignored, >0: working */ static VALUE sym_wait_readable, sym_wait_writable; #if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL) @@ -89,9 +88,9 @@ ancillary_initialize(VALUE self, VALUE vfamily, VALUE vlevel, VALUE vtype, VALUE static VALUE ancdata_new(int family, int level, int type, VALUE data) { - NEWOBJ_OF(obj, struct RObject, rb_cAncillaryData, T_OBJECT); + VALUE obj = rb_obj_alloc(rb_cAncillaryData); StringValue(data); - ancillary_initialize((VALUE)obj, INT2NUM(family), INT2NUM(level), INT2NUM(type), data); + ancillary_initialize(obj, INT2NUM(family), INT2NUM(level), INT2NUM(type), data); return (VALUE)obj; } @@ -852,6 +851,12 @@ anc_inspect_ipv6_pktinfo(int level, int type, VALUE data, VALUE ret) } #endif +#ifdef HAVE_GMTIME_R +# define LOCALTIME(time, tm) localtime_r(&(time), &(tm)) +#else +# define LOCALTIME(time, tm) ((tm) = *localtime(&(time))) +#endif + #if defined(SCM_TIMESTAMP) /* GNU/Linux, FreeBSD, NetBSD, OpenBSD, MacOS X, Solaris */ static int inspect_timeval_as_abstime(int level, int optname, VALUE data, VALUE ret) @@ -863,7 +868,7 @@ inspect_timeval_as_abstime(int level, int optname, VALUE data, VALUE ret) char buf[32]; memcpy((char*)&tv, RSTRING_PTR(data), sizeof(tv)); time = tv.tv_sec; - tm = *localtime(&time); + LOCALTIME(time, tm); strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &tm); rb_str_catf(ret, " %s.%06ld", buf, (long)tv.tv_usec); return 1; @@ -883,7 +888,7 @@ inspect_timespec_as_abstime(int level, int optname, VALUE data, VALUE ret) struct tm tm; char buf[32]; memcpy((char*)&ts, RSTRING_PTR(data), sizeof(ts)); - tm = *localtime(&ts.tv_sec); + LOCALTIME(ts.tv_sec, tm); strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &tm); rb_str_catf(ret, " %s.%09ld", buf, (long)ts.tv_nsec); return 1; @@ -907,7 +912,7 @@ inspect_bintime_as_abstime(int level, int optname, VALUE data, VALUE ret) uint64_t res_h, res_l; char buf[32]; memcpy((char*)&bt, RSTRING_PTR(data), sizeof(bt)); - tm = *localtime(&bt.sec); + LOCALTIME(bt.sec, tm); strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &tm); /* res_h = frac * 10**19 / 2**64 */ @@ -1280,7 +1285,7 @@ bsock_sendmsg_internal(VALUE sock, VALUE data, VALUE vflags, if (ss == -1) { int e; - if (!nonblock && rb_io_wait_writable(fptr->fd)) { + if (!nonblock && rb_io_maybe_wait_writable(errno, fptr->self, Qnil)) { rb_io_check_closed(fptr); goto retry; } @@ -1429,10 +1434,7 @@ make_io_for_unix_rights(VALUE ctl, struct cmsghdr *cmh, char *msg_end) if (fstat(fd, &stbuf) == -1) rb_raise(rb_eSocket, "invalid fd in SCM_RIGHTS"); rb_update_max_fd(fd); - if (rsock_cmsg_cloexec_state < 0) - rsock_cmsg_cloexec_state = rsock_detect_cloexec(fd); - if (rsock_cmsg_cloexec_state == 0 || fd <= 2) - rb_maygvl_fd_fix_cloexec(fd); + rb_maygvl_fd_fix_cloexec(fd); if (S_ISSOCK(stbuf.st_mode)) io = rsock_init_sock(rb_obj_alloc(rb_cSocket), fd); else @@ -1555,7 +1557,7 @@ bsock_recvmsg_internal(VALUE sock, if (ss == -1) { int e; - if (!nonblock && rb_io_wait_readable(fptr->fd)) { + if (!nonblock && rb_io_maybe_wait_readable(errno, fptr->self, Qnil)) { rb_io_check_closed(fptr); goto retry; } diff --git a/ruby/ext/socket/basicsocket.c b/ruby/ext/socket/basicsocket.c index fb5beed81..44fb7a4eb 100644 --- a/ruby/ext/socket/basicsocket.c +++ b/ruby/ext/socket/basicsocket.c @@ -10,6 +10,28 @@ #include "rubysocket.h" +#ifdef _WIN32 +#define is_socket(fd) rb_w32_is_socket(fd) +#else +static int +is_socket(int fd) +{ + struct stat sbuf; + + if (fstat(fd, &sbuf) < 0) + rb_sys_fail("fstat(2)"); + return S_ISSOCK(sbuf.st_mode); +} +#endif + +static void +rsock_validate_descriptor(int descriptor) +{ + if (!is_socket(descriptor) || rb_reserved_fd_p(descriptor)) { + rb_syserr_fail(EBADF, "not a socket file descriptor"); + } +} + /* * call-seq: * BasicSocket.for_fd(fd) => basicsocket @@ -22,10 +44,14 @@ * */ static VALUE -bsock_s_for_fd(VALUE klass, VALUE fd) +bsock_s_for_fd(VALUE klass, VALUE _descriptor) { rb_io_t *fptr; - VALUE sock = rsock_init_sock(rb_obj_alloc(klass), NUM2INT(fd)); + + int descriptor = RB_NUM2INT(_descriptor); + rsock_validate_descriptor(descriptor); + + VALUE sock = rsock_init_sock(rb_obj_alloc(klass), descriptor); GetOpenFile(sock, fptr); @@ -280,7 +306,7 @@ bsock_setsockopt(int argc, VALUE *argv, VALUE sock) * ipttl = sock.getsockopt(:IP, :TTL).int * * optval = sock.getsockopt(Socket::IPPROTO_IP, Socket::IP_TTL) - * ipttl = optval.unpack("i")[0] + * ipttl = optval.unpack1("i") * * Option values may be structs. Decoding them can be complex as it involves * examining your system headers to determine the correct definition. An @@ -537,12 +563,11 @@ bsock_remote_address(VALUE sock) * } */ VALUE -rsock_bsock_send(int argc, VALUE *argv, VALUE sock) +rsock_bsock_send(int argc, VALUE *argv, VALUE socket) { struct rsock_send_arg arg; VALUE flags, to; rb_io_t *fptr; - ssize_t n; rb_blocking_function_t *func; const char *funcname; @@ -550,28 +575,38 @@ rsock_bsock_send(int argc, VALUE *argv, VALUE sock) StringValue(arg.mesg); if (!NIL_P(to)) { - SockAddrStringValue(to); - to = rb_str_new4(to); - arg.to = (struct sockaddr *)RSTRING_PTR(to); - arg.tolen = RSTRING_SOCKLEN(to); - func = rsock_sendto_blocking; - funcname = "sendto(2)"; + SockAddrStringValue(to); + to = rb_str_new4(to); + arg.to = (struct sockaddr *)RSTRING_PTR(to); + arg.tolen = RSTRING_SOCKLEN(to); + func = rsock_sendto_blocking; + funcname = "sendto(2)"; } else { - func = rsock_send_blocking; - funcname = "send(2)"; + func = rsock_send_blocking; + funcname = "send(2)"; } - GetOpenFile(sock, fptr); + + RB_IO_POINTER(socket, fptr); + arg.fd = fptr->fd; arg.flags = NUM2INT(flags); - while (rsock_maybe_fd_writable(arg.fd), - (n = (ssize_t)BLOCKING_REGION_FD(func, &arg)) < 0) { - if (rb_io_wait_writable(arg.fd)) { - continue; - } - rb_sys_fail(funcname); + + while (true) { +#ifdef RSOCK_WAIT_BEFORE_BLOCKING + rb_io_wait(socket, RB_INT2NUM(RUBY_IO_WRITABLE), Qnil); +#endif + + ssize_t n = (ssize_t)BLOCKING_REGION_FD(func, &arg); + + if (n >= 0) return SSIZET2NUM(n); + + if (rb_io_maybe_wait_writable(errno, socket, Qnil)) { + continue; + } + + rb_sys_fail(funcname); } - return SSIZET2NUM(n); } /* diff --git a/ruby/ext/socket/depend b/ruby/ext/socket/depend index e958b3dc5..99617e253 100644 --- a/ruby/ext/socket/depend +++ b/ruby/ext/socket/depend @@ -12,12 +12,169 @@ constdefs.c: constdefs.h # AUTOGENERATED DEPENDENCIES START ancdata.o: $(RUBY_EXTCONF_H) ancdata.o: $(arch_hdrdir)/ruby/config.h -ancdata.o: $(hdrdir)/ruby.h ancdata.o: $(hdrdir)/ruby/assert.h ancdata.o: $(hdrdir)/ruby/backward.h +ancdata.o: $(hdrdir)/ruby/backward/2/assume.h +ancdata.o: $(hdrdir)/ruby/backward/2/attributes.h +ancdata.o: $(hdrdir)/ruby/backward/2/bool.h +ancdata.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +ancdata.o: $(hdrdir)/ruby/backward/2/inttypes.h +ancdata.o: $(hdrdir)/ruby/backward/2/limits.h +ancdata.o: $(hdrdir)/ruby/backward/2/long_long.h +ancdata.o: $(hdrdir)/ruby/backward/2/stdalign.h +ancdata.o: $(hdrdir)/ruby/backward/2/stdarg.h ancdata.o: $(hdrdir)/ruby/defines.h ancdata.o: $(hdrdir)/ruby/encoding.h +ancdata.o: $(hdrdir)/ruby/fiber/scheduler.h ancdata.o: $(hdrdir)/ruby/intern.h +ancdata.o: $(hdrdir)/ruby/internal/anyargs.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ancdata.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ancdata.o: $(hdrdir)/ruby/internal/assume.h +ancdata.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ancdata.o: $(hdrdir)/ruby/internal/attr/artificial.h +ancdata.o: $(hdrdir)/ruby/internal/attr/cold.h +ancdata.o: $(hdrdir)/ruby/internal/attr/const.h +ancdata.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ancdata.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ancdata.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ancdata.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ancdata.o: $(hdrdir)/ruby/internal/attr/error.h +ancdata.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ancdata.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ancdata.o: $(hdrdir)/ruby/internal/attr/format.h +ancdata.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ancdata.o: $(hdrdir)/ruby/internal/attr/noalias.h +ancdata.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ancdata.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ancdata.o: $(hdrdir)/ruby/internal/attr/noinline.h +ancdata.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ancdata.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ancdata.o: $(hdrdir)/ruby/internal/attr/pure.h +ancdata.o: $(hdrdir)/ruby/internal/attr/restrict.h +ancdata.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ancdata.o: $(hdrdir)/ruby/internal/attr/warning.h +ancdata.o: $(hdrdir)/ruby/internal/attr/weakref.h +ancdata.o: $(hdrdir)/ruby/internal/cast.h +ancdata.o: $(hdrdir)/ruby/internal/compiler_is.h +ancdata.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ancdata.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ancdata.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ancdata.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ancdata.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ancdata.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ancdata.o: $(hdrdir)/ruby/internal/compiler_since.h +ancdata.o: $(hdrdir)/ruby/internal/config.h +ancdata.o: $(hdrdir)/ruby/internal/constant_p.h +ancdata.o: $(hdrdir)/ruby/internal/core.h +ancdata.o: $(hdrdir)/ruby/internal/core/rarray.h +ancdata.o: $(hdrdir)/ruby/internal/core/rbasic.h +ancdata.o: $(hdrdir)/ruby/internal/core/rbignum.h +ancdata.o: $(hdrdir)/ruby/internal/core/rclass.h +ancdata.o: $(hdrdir)/ruby/internal/core/rdata.h +ancdata.o: $(hdrdir)/ruby/internal/core/rfile.h +ancdata.o: $(hdrdir)/ruby/internal/core/rhash.h +ancdata.o: $(hdrdir)/ruby/internal/core/robject.h +ancdata.o: $(hdrdir)/ruby/internal/core/rregexp.h +ancdata.o: $(hdrdir)/ruby/internal/core/rstring.h +ancdata.o: $(hdrdir)/ruby/internal/core/rstruct.h +ancdata.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ancdata.o: $(hdrdir)/ruby/internal/ctype.h +ancdata.o: $(hdrdir)/ruby/internal/dllexport.h +ancdata.o: $(hdrdir)/ruby/internal/dosish.h +ancdata.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ancdata.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ancdata.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ancdata.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ancdata.o: $(hdrdir)/ruby/internal/encoding/re.h +ancdata.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ancdata.o: $(hdrdir)/ruby/internal/encoding/string.h +ancdata.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ancdata.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ancdata.o: $(hdrdir)/ruby/internal/error.h +ancdata.o: $(hdrdir)/ruby/internal/eval.h +ancdata.o: $(hdrdir)/ruby/internal/event.h +ancdata.o: $(hdrdir)/ruby/internal/fl_type.h +ancdata.o: $(hdrdir)/ruby/internal/gc.h +ancdata.o: $(hdrdir)/ruby/internal/glob.h +ancdata.o: $(hdrdir)/ruby/internal/globals.h +ancdata.o: $(hdrdir)/ruby/internal/has/attribute.h +ancdata.o: $(hdrdir)/ruby/internal/has/builtin.h +ancdata.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ancdata.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ancdata.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ancdata.o: $(hdrdir)/ruby/internal/has/extension.h +ancdata.o: $(hdrdir)/ruby/internal/has/feature.h +ancdata.o: $(hdrdir)/ruby/internal/has/warning.h +ancdata.o: $(hdrdir)/ruby/internal/intern/array.h +ancdata.o: $(hdrdir)/ruby/internal/intern/bignum.h +ancdata.o: $(hdrdir)/ruby/internal/intern/class.h +ancdata.o: $(hdrdir)/ruby/internal/intern/compar.h +ancdata.o: $(hdrdir)/ruby/internal/intern/complex.h +ancdata.o: $(hdrdir)/ruby/internal/intern/cont.h +ancdata.o: $(hdrdir)/ruby/internal/intern/dir.h +ancdata.o: $(hdrdir)/ruby/internal/intern/enum.h +ancdata.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ancdata.o: $(hdrdir)/ruby/internal/intern/error.h +ancdata.o: $(hdrdir)/ruby/internal/intern/eval.h +ancdata.o: $(hdrdir)/ruby/internal/intern/file.h +ancdata.o: $(hdrdir)/ruby/internal/intern/gc.h +ancdata.o: $(hdrdir)/ruby/internal/intern/hash.h +ancdata.o: $(hdrdir)/ruby/internal/intern/io.h +ancdata.o: $(hdrdir)/ruby/internal/intern/load.h +ancdata.o: $(hdrdir)/ruby/internal/intern/marshal.h +ancdata.o: $(hdrdir)/ruby/internal/intern/numeric.h +ancdata.o: $(hdrdir)/ruby/internal/intern/object.h +ancdata.o: $(hdrdir)/ruby/internal/intern/parse.h +ancdata.o: $(hdrdir)/ruby/internal/intern/proc.h +ancdata.o: $(hdrdir)/ruby/internal/intern/process.h +ancdata.o: $(hdrdir)/ruby/internal/intern/random.h +ancdata.o: $(hdrdir)/ruby/internal/intern/range.h +ancdata.o: $(hdrdir)/ruby/internal/intern/rational.h +ancdata.o: $(hdrdir)/ruby/internal/intern/re.h +ancdata.o: $(hdrdir)/ruby/internal/intern/ruby.h +ancdata.o: $(hdrdir)/ruby/internal/intern/select.h +ancdata.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ancdata.o: $(hdrdir)/ruby/internal/intern/signal.h +ancdata.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ancdata.o: $(hdrdir)/ruby/internal/intern/string.h +ancdata.o: $(hdrdir)/ruby/internal/intern/struct.h +ancdata.o: $(hdrdir)/ruby/internal/intern/thread.h +ancdata.o: $(hdrdir)/ruby/internal/intern/time.h +ancdata.o: $(hdrdir)/ruby/internal/intern/variable.h +ancdata.o: $(hdrdir)/ruby/internal/intern/vm.h +ancdata.o: $(hdrdir)/ruby/internal/interpreter.h +ancdata.o: $(hdrdir)/ruby/internal/iterator.h +ancdata.o: $(hdrdir)/ruby/internal/memory.h +ancdata.o: $(hdrdir)/ruby/internal/method.h +ancdata.o: $(hdrdir)/ruby/internal/module.h +ancdata.o: $(hdrdir)/ruby/internal/newobj.h +ancdata.o: $(hdrdir)/ruby/internal/rgengc.h +ancdata.o: $(hdrdir)/ruby/internal/scan_args.h +ancdata.o: $(hdrdir)/ruby/internal/special_consts.h +ancdata.o: $(hdrdir)/ruby/internal/static_assert.h +ancdata.o: $(hdrdir)/ruby/internal/stdalign.h +ancdata.o: $(hdrdir)/ruby/internal/stdbool.h +ancdata.o: $(hdrdir)/ruby/internal/symbol.h +ancdata.o: $(hdrdir)/ruby/internal/value.h +ancdata.o: $(hdrdir)/ruby/internal/value_type.h +ancdata.o: $(hdrdir)/ruby/internal/variable.h +ancdata.o: $(hdrdir)/ruby/internal/warning_push.h +ancdata.o: $(hdrdir)/ruby/internal/xmalloc.h ancdata.o: $(hdrdir)/ruby/io.h ancdata.o: $(hdrdir)/ruby/missing.h ancdata.o: $(hdrdir)/ruby/onigmo.h @@ -28,18 +185,186 @@ ancdata.o: $(hdrdir)/ruby/subst.h ancdata.o: $(hdrdir)/ruby/thread.h ancdata.o: $(hdrdir)/ruby/util.h ancdata.o: $(top_srcdir)/internal.h +ancdata.o: $(top_srcdir)/internal/array.h +ancdata.o: $(top_srcdir)/internal/compilers.h +ancdata.o: $(top_srcdir)/internal/error.h +ancdata.o: $(top_srcdir)/internal/gc.h +ancdata.o: $(top_srcdir)/internal/io.h +ancdata.o: $(top_srcdir)/internal/serial.h +ancdata.o: $(top_srcdir)/internal/static_assert.h +ancdata.o: $(top_srcdir)/internal/string.h +ancdata.o: $(top_srcdir)/internal/thread.h +ancdata.o: $(top_srcdir)/internal/vm.h +ancdata.o: $(top_srcdir)/internal/warnings.h ancdata.o: ancdata.c ancdata.o: constdefs.h ancdata.o: rubysocket.h ancdata.o: sockport.h basicsocket.o: $(RUBY_EXTCONF_H) basicsocket.o: $(arch_hdrdir)/ruby/config.h -basicsocket.o: $(hdrdir)/ruby.h basicsocket.o: $(hdrdir)/ruby/assert.h basicsocket.o: $(hdrdir)/ruby/backward.h +basicsocket.o: $(hdrdir)/ruby/backward/2/assume.h +basicsocket.o: $(hdrdir)/ruby/backward/2/attributes.h +basicsocket.o: $(hdrdir)/ruby/backward/2/bool.h +basicsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +basicsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h +basicsocket.o: $(hdrdir)/ruby/backward/2/limits.h +basicsocket.o: $(hdrdir)/ruby/backward/2/long_long.h +basicsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h +basicsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h basicsocket.o: $(hdrdir)/ruby/defines.h basicsocket.o: $(hdrdir)/ruby/encoding.h +basicsocket.o: $(hdrdir)/ruby/fiber/scheduler.h basicsocket.o: $(hdrdir)/ruby/intern.h +basicsocket.o: $(hdrdir)/ruby/internal/anyargs.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/char.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/double.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/int.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/long.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/short.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +basicsocket.o: $(hdrdir)/ruby/internal/assume.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/artificial.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/cold.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/const.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/constexpr.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/deprecated.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/error.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/forceinline.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/format.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/noalias.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/noexcept.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/noinline.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/nonnull.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/noreturn.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/pure.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/restrict.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/warning.h +basicsocket.o: $(hdrdir)/ruby/internal/attr/weakref.h +basicsocket.o: $(hdrdir)/ruby/internal/cast.h +basicsocket.o: $(hdrdir)/ruby/internal/compiler_is.h +basicsocket.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +basicsocket.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +basicsocket.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +basicsocket.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +basicsocket.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +basicsocket.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +basicsocket.o: $(hdrdir)/ruby/internal/compiler_since.h +basicsocket.o: $(hdrdir)/ruby/internal/config.h +basicsocket.o: $(hdrdir)/ruby/internal/constant_p.h +basicsocket.o: $(hdrdir)/ruby/internal/core.h +basicsocket.o: $(hdrdir)/ruby/internal/core/rarray.h +basicsocket.o: $(hdrdir)/ruby/internal/core/rbasic.h +basicsocket.o: $(hdrdir)/ruby/internal/core/rbignum.h +basicsocket.o: $(hdrdir)/ruby/internal/core/rclass.h +basicsocket.o: $(hdrdir)/ruby/internal/core/rdata.h +basicsocket.o: $(hdrdir)/ruby/internal/core/rfile.h +basicsocket.o: $(hdrdir)/ruby/internal/core/rhash.h +basicsocket.o: $(hdrdir)/ruby/internal/core/robject.h +basicsocket.o: $(hdrdir)/ruby/internal/core/rregexp.h +basicsocket.o: $(hdrdir)/ruby/internal/core/rstring.h +basicsocket.o: $(hdrdir)/ruby/internal/core/rstruct.h +basicsocket.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +basicsocket.o: $(hdrdir)/ruby/internal/ctype.h +basicsocket.o: $(hdrdir)/ruby/internal/dllexport.h +basicsocket.o: $(hdrdir)/ruby/internal/dosish.h +basicsocket.o: $(hdrdir)/ruby/internal/encoding/coderange.h +basicsocket.o: $(hdrdir)/ruby/internal/encoding/ctype.h +basicsocket.o: $(hdrdir)/ruby/internal/encoding/encoding.h +basicsocket.o: $(hdrdir)/ruby/internal/encoding/pathname.h +basicsocket.o: $(hdrdir)/ruby/internal/encoding/re.h +basicsocket.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +basicsocket.o: $(hdrdir)/ruby/internal/encoding/string.h +basicsocket.o: $(hdrdir)/ruby/internal/encoding/symbol.h +basicsocket.o: $(hdrdir)/ruby/internal/encoding/transcode.h +basicsocket.o: $(hdrdir)/ruby/internal/error.h +basicsocket.o: $(hdrdir)/ruby/internal/eval.h +basicsocket.o: $(hdrdir)/ruby/internal/event.h +basicsocket.o: $(hdrdir)/ruby/internal/fl_type.h +basicsocket.o: $(hdrdir)/ruby/internal/gc.h +basicsocket.o: $(hdrdir)/ruby/internal/glob.h +basicsocket.o: $(hdrdir)/ruby/internal/globals.h +basicsocket.o: $(hdrdir)/ruby/internal/has/attribute.h +basicsocket.o: $(hdrdir)/ruby/internal/has/builtin.h +basicsocket.o: $(hdrdir)/ruby/internal/has/c_attribute.h +basicsocket.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +basicsocket.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +basicsocket.o: $(hdrdir)/ruby/internal/has/extension.h +basicsocket.o: $(hdrdir)/ruby/internal/has/feature.h +basicsocket.o: $(hdrdir)/ruby/internal/has/warning.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/array.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/bignum.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/class.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/compar.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/complex.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/cont.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/dir.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/enum.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/enumerator.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/error.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/eval.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/file.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/gc.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/hash.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/io.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/load.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/marshal.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/numeric.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/object.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/parse.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/proc.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/process.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/random.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/range.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/rational.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/re.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/ruby.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/select.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/signal.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/sprintf.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/string.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/struct.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/thread.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/time.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/variable.h +basicsocket.o: $(hdrdir)/ruby/internal/intern/vm.h +basicsocket.o: $(hdrdir)/ruby/internal/interpreter.h +basicsocket.o: $(hdrdir)/ruby/internal/iterator.h +basicsocket.o: $(hdrdir)/ruby/internal/memory.h +basicsocket.o: $(hdrdir)/ruby/internal/method.h +basicsocket.o: $(hdrdir)/ruby/internal/module.h +basicsocket.o: $(hdrdir)/ruby/internal/newobj.h +basicsocket.o: $(hdrdir)/ruby/internal/rgengc.h +basicsocket.o: $(hdrdir)/ruby/internal/scan_args.h +basicsocket.o: $(hdrdir)/ruby/internal/special_consts.h +basicsocket.o: $(hdrdir)/ruby/internal/static_assert.h +basicsocket.o: $(hdrdir)/ruby/internal/stdalign.h +basicsocket.o: $(hdrdir)/ruby/internal/stdbool.h +basicsocket.o: $(hdrdir)/ruby/internal/symbol.h +basicsocket.o: $(hdrdir)/ruby/internal/value.h +basicsocket.o: $(hdrdir)/ruby/internal/value_type.h +basicsocket.o: $(hdrdir)/ruby/internal/variable.h +basicsocket.o: $(hdrdir)/ruby/internal/warning_push.h +basicsocket.o: $(hdrdir)/ruby/internal/xmalloc.h basicsocket.o: $(hdrdir)/ruby/io.h basicsocket.o: $(hdrdir)/ruby/missing.h basicsocket.o: $(hdrdir)/ruby/onigmo.h @@ -50,18 +375,186 @@ basicsocket.o: $(hdrdir)/ruby/subst.h basicsocket.o: $(hdrdir)/ruby/thread.h basicsocket.o: $(hdrdir)/ruby/util.h basicsocket.o: $(top_srcdir)/internal.h +basicsocket.o: $(top_srcdir)/internal/array.h +basicsocket.o: $(top_srcdir)/internal/compilers.h +basicsocket.o: $(top_srcdir)/internal/error.h +basicsocket.o: $(top_srcdir)/internal/gc.h +basicsocket.o: $(top_srcdir)/internal/io.h +basicsocket.o: $(top_srcdir)/internal/serial.h +basicsocket.o: $(top_srcdir)/internal/static_assert.h +basicsocket.o: $(top_srcdir)/internal/string.h +basicsocket.o: $(top_srcdir)/internal/thread.h +basicsocket.o: $(top_srcdir)/internal/vm.h +basicsocket.o: $(top_srcdir)/internal/warnings.h basicsocket.o: basicsocket.c basicsocket.o: constdefs.h basicsocket.o: rubysocket.h basicsocket.o: sockport.h constants.o: $(RUBY_EXTCONF_H) constants.o: $(arch_hdrdir)/ruby/config.h -constants.o: $(hdrdir)/ruby.h constants.o: $(hdrdir)/ruby/assert.h constants.o: $(hdrdir)/ruby/backward.h +constants.o: $(hdrdir)/ruby/backward/2/assume.h +constants.o: $(hdrdir)/ruby/backward/2/attributes.h +constants.o: $(hdrdir)/ruby/backward/2/bool.h +constants.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +constants.o: $(hdrdir)/ruby/backward/2/inttypes.h +constants.o: $(hdrdir)/ruby/backward/2/limits.h +constants.o: $(hdrdir)/ruby/backward/2/long_long.h +constants.o: $(hdrdir)/ruby/backward/2/stdalign.h +constants.o: $(hdrdir)/ruby/backward/2/stdarg.h constants.o: $(hdrdir)/ruby/defines.h constants.o: $(hdrdir)/ruby/encoding.h +constants.o: $(hdrdir)/ruby/fiber/scheduler.h constants.o: $(hdrdir)/ruby/intern.h +constants.o: $(hdrdir)/ruby/internal/anyargs.h +constants.o: $(hdrdir)/ruby/internal/arithmetic.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/char.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/double.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/int.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/long.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/short.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +constants.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +constants.o: $(hdrdir)/ruby/internal/assume.h +constants.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +constants.o: $(hdrdir)/ruby/internal/attr/artificial.h +constants.o: $(hdrdir)/ruby/internal/attr/cold.h +constants.o: $(hdrdir)/ruby/internal/attr/const.h +constants.o: $(hdrdir)/ruby/internal/attr/constexpr.h +constants.o: $(hdrdir)/ruby/internal/attr/deprecated.h +constants.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +constants.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +constants.o: $(hdrdir)/ruby/internal/attr/error.h +constants.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +constants.o: $(hdrdir)/ruby/internal/attr/forceinline.h +constants.o: $(hdrdir)/ruby/internal/attr/format.h +constants.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +constants.o: $(hdrdir)/ruby/internal/attr/noalias.h +constants.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +constants.o: $(hdrdir)/ruby/internal/attr/noexcept.h +constants.o: $(hdrdir)/ruby/internal/attr/noinline.h +constants.o: $(hdrdir)/ruby/internal/attr/nonnull.h +constants.o: $(hdrdir)/ruby/internal/attr/noreturn.h +constants.o: $(hdrdir)/ruby/internal/attr/pure.h +constants.o: $(hdrdir)/ruby/internal/attr/restrict.h +constants.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +constants.o: $(hdrdir)/ruby/internal/attr/warning.h +constants.o: $(hdrdir)/ruby/internal/attr/weakref.h +constants.o: $(hdrdir)/ruby/internal/cast.h +constants.o: $(hdrdir)/ruby/internal/compiler_is.h +constants.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +constants.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +constants.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +constants.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +constants.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +constants.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +constants.o: $(hdrdir)/ruby/internal/compiler_since.h +constants.o: $(hdrdir)/ruby/internal/config.h +constants.o: $(hdrdir)/ruby/internal/constant_p.h +constants.o: $(hdrdir)/ruby/internal/core.h +constants.o: $(hdrdir)/ruby/internal/core/rarray.h +constants.o: $(hdrdir)/ruby/internal/core/rbasic.h +constants.o: $(hdrdir)/ruby/internal/core/rbignum.h +constants.o: $(hdrdir)/ruby/internal/core/rclass.h +constants.o: $(hdrdir)/ruby/internal/core/rdata.h +constants.o: $(hdrdir)/ruby/internal/core/rfile.h +constants.o: $(hdrdir)/ruby/internal/core/rhash.h +constants.o: $(hdrdir)/ruby/internal/core/robject.h +constants.o: $(hdrdir)/ruby/internal/core/rregexp.h +constants.o: $(hdrdir)/ruby/internal/core/rstring.h +constants.o: $(hdrdir)/ruby/internal/core/rstruct.h +constants.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +constants.o: $(hdrdir)/ruby/internal/ctype.h +constants.o: $(hdrdir)/ruby/internal/dllexport.h +constants.o: $(hdrdir)/ruby/internal/dosish.h +constants.o: $(hdrdir)/ruby/internal/encoding/coderange.h +constants.o: $(hdrdir)/ruby/internal/encoding/ctype.h +constants.o: $(hdrdir)/ruby/internal/encoding/encoding.h +constants.o: $(hdrdir)/ruby/internal/encoding/pathname.h +constants.o: $(hdrdir)/ruby/internal/encoding/re.h +constants.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +constants.o: $(hdrdir)/ruby/internal/encoding/string.h +constants.o: $(hdrdir)/ruby/internal/encoding/symbol.h +constants.o: $(hdrdir)/ruby/internal/encoding/transcode.h +constants.o: $(hdrdir)/ruby/internal/error.h +constants.o: $(hdrdir)/ruby/internal/eval.h +constants.o: $(hdrdir)/ruby/internal/event.h +constants.o: $(hdrdir)/ruby/internal/fl_type.h +constants.o: $(hdrdir)/ruby/internal/gc.h +constants.o: $(hdrdir)/ruby/internal/glob.h +constants.o: $(hdrdir)/ruby/internal/globals.h +constants.o: $(hdrdir)/ruby/internal/has/attribute.h +constants.o: $(hdrdir)/ruby/internal/has/builtin.h +constants.o: $(hdrdir)/ruby/internal/has/c_attribute.h +constants.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +constants.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +constants.o: $(hdrdir)/ruby/internal/has/extension.h +constants.o: $(hdrdir)/ruby/internal/has/feature.h +constants.o: $(hdrdir)/ruby/internal/has/warning.h +constants.o: $(hdrdir)/ruby/internal/intern/array.h +constants.o: $(hdrdir)/ruby/internal/intern/bignum.h +constants.o: $(hdrdir)/ruby/internal/intern/class.h +constants.o: $(hdrdir)/ruby/internal/intern/compar.h +constants.o: $(hdrdir)/ruby/internal/intern/complex.h +constants.o: $(hdrdir)/ruby/internal/intern/cont.h +constants.o: $(hdrdir)/ruby/internal/intern/dir.h +constants.o: $(hdrdir)/ruby/internal/intern/enum.h +constants.o: $(hdrdir)/ruby/internal/intern/enumerator.h +constants.o: $(hdrdir)/ruby/internal/intern/error.h +constants.o: $(hdrdir)/ruby/internal/intern/eval.h +constants.o: $(hdrdir)/ruby/internal/intern/file.h +constants.o: $(hdrdir)/ruby/internal/intern/gc.h +constants.o: $(hdrdir)/ruby/internal/intern/hash.h +constants.o: $(hdrdir)/ruby/internal/intern/io.h +constants.o: $(hdrdir)/ruby/internal/intern/load.h +constants.o: $(hdrdir)/ruby/internal/intern/marshal.h +constants.o: $(hdrdir)/ruby/internal/intern/numeric.h +constants.o: $(hdrdir)/ruby/internal/intern/object.h +constants.o: $(hdrdir)/ruby/internal/intern/parse.h +constants.o: $(hdrdir)/ruby/internal/intern/proc.h +constants.o: $(hdrdir)/ruby/internal/intern/process.h +constants.o: $(hdrdir)/ruby/internal/intern/random.h +constants.o: $(hdrdir)/ruby/internal/intern/range.h +constants.o: $(hdrdir)/ruby/internal/intern/rational.h +constants.o: $(hdrdir)/ruby/internal/intern/re.h +constants.o: $(hdrdir)/ruby/internal/intern/ruby.h +constants.o: $(hdrdir)/ruby/internal/intern/select.h +constants.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +constants.o: $(hdrdir)/ruby/internal/intern/signal.h +constants.o: $(hdrdir)/ruby/internal/intern/sprintf.h +constants.o: $(hdrdir)/ruby/internal/intern/string.h +constants.o: $(hdrdir)/ruby/internal/intern/struct.h +constants.o: $(hdrdir)/ruby/internal/intern/thread.h +constants.o: $(hdrdir)/ruby/internal/intern/time.h +constants.o: $(hdrdir)/ruby/internal/intern/variable.h +constants.o: $(hdrdir)/ruby/internal/intern/vm.h +constants.o: $(hdrdir)/ruby/internal/interpreter.h +constants.o: $(hdrdir)/ruby/internal/iterator.h +constants.o: $(hdrdir)/ruby/internal/memory.h +constants.o: $(hdrdir)/ruby/internal/method.h +constants.o: $(hdrdir)/ruby/internal/module.h +constants.o: $(hdrdir)/ruby/internal/newobj.h +constants.o: $(hdrdir)/ruby/internal/rgengc.h +constants.o: $(hdrdir)/ruby/internal/scan_args.h +constants.o: $(hdrdir)/ruby/internal/special_consts.h +constants.o: $(hdrdir)/ruby/internal/static_assert.h +constants.o: $(hdrdir)/ruby/internal/stdalign.h +constants.o: $(hdrdir)/ruby/internal/stdbool.h +constants.o: $(hdrdir)/ruby/internal/symbol.h +constants.o: $(hdrdir)/ruby/internal/value.h +constants.o: $(hdrdir)/ruby/internal/value_type.h +constants.o: $(hdrdir)/ruby/internal/variable.h +constants.o: $(hdrdir)/ruby/internal/warning_push.h +constants.o: $(hdrdir)/ruby/internal/xmalloc.h constants.o: $(hdrdir)/ruby/io.h constants.o: $(hdrdir)/ruby/missing.h constants.o: $(hdrdir)/ruby/onigmo.h @@ -72,6 +565,17 @@ constants.o: $(hdrdir)/ruby/subst.h constants.o: $(hdrdir)/ruby/thread.h constants.o: $(hdrdir)/ruby/util.h constants.o: $(top_srcdir)/internal.h +constants.o: $(top_srcdir)/internal/array.h +constants.o: $(top_srcdir)/internal/compilers.h +constants.o: $(top_srcdir)/internal/error.h +constants.o: $(top_srcdir)/internal/gc.h +constants.o: $(top_srcdir)/internal/io.h +constants.o: $(top_srcdir)/internal/serial.h +constants.o: $(top_srcdir)/internal/static_assert.h +constants.o: $(top_srcdir)/internal/string.h +constants.o: $(top_srcdir)/internal/thread.h +constants.o: $(top_srcdir)/internal/vm.h +constants.o: $(top_srcdir)/internal/warnings.h constants.o: constants.c constants.o: constdefs.c constants.o: constdefs.h @@ -79,12 +583,169 @@ constants.o: rubysocket.h constants.o: sockport.h ifaddr.o: $(RUBY_EXTCONF_H) ifaddr.o: $(arch_hdrdir)/ruby/config.h -ifaddr.o: $(hdrdir)/ruby.h ifaddr.o: $(hdrdir)/ruby/assert.h ifaddr.o: $(hdrdir)/ruby/backward.h +ifaddr.o: $(hdrdir)/ruby/backward/2/assume.h +ifaddr.o: $(hdrdir)/ruby/backward/2/attributes.h +ifaddr.o: $(hdrdir)/ruby/backward/2/bool.h +ifaddr.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +ifaddr.o: $(hdrdir)/ruby/backward/2/inttypes.h +ifaddr.o: $(hdrdir)/ruby/backward/2/limits.h +ifaddr.o: $(hdrdir)/ruby/backward/2/long_long.h +ifaddr.o: $(hdrdir)/ruby/backward/2/stdalign.h +ifaddr.o: $(hdrdir)/ruby/backward/2/stdarg.h ifaddr.o: $(hdrdir)/ruby/defines.h ifaddr.o: $(hdrdir)/ruby/encoding.h +ifaddr.o: $(hdrdir)/ruby/fiber/scheduler.h ifaddr.o: $(hdrdir)/ruby/intern.h +ifaddr.o: $(hdrdir)/ruby/internal/anyargs.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ifaddr.o: $(hdrdir)/ruby/internal/assume.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/artificial.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/cold.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/const.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/error.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/format.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/noalias.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/noinline.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/pure.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/restrict.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/warning.h +ifaddr.o: $(hdrdir)/ruby/internal/attr/weakref.h +ifaddr.o: $(hdrdir)/ruby/internal/cast.h +ifaddr.o: $(hdrdir)/ruby/internal/compiler_is.h +ifaddr.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ifaddr.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ifaddr.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ifaddr.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ifaddr.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ifaddr.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ifaddr.o: $(hdrdir)/ruby/internal/compiler_since.h +ifaddr.o: $(hdrdir)/ruby/internal/config.h +ifaddr.o: $(hdrdir)/ruby/internal/constant_p.h +ifaddr.o: $(hdrdir)/ruby/internal/core.h +ifaddr.o: $(hdrdir)/ruby/internal/core/rarray.h +ifaddr.o: $(hdrdir)/ruby/internal/core/rbasic.h +ifaddr.o: $(hdrdir)/ruby/internal/core/rbignum.h +ifaddr.o: $(hdrdir)/ruby/internal/core/rclass.h +ifaddr.o: $(hdrdir)/ruby/internal/core/rdata.h +ifaddr.o: $(hdrdir)/ruby/internal/core/rfile.h +ifaddr.o: $(hdrdir)/ruby/internal/core/rhash.h +ifaddr.o: $(hdrdir)/ruby/internal/core/robject.h +ifaddr.o: $(hdrdir)/ruby/internal/core/rregexp.h +ifaddr.o: $(hdrdir)/ruby/internal/core/rstring.h +ifaddr.o: $(hdrdir)/ruby/internal/core/rstruct.h +ifaddr.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ifaddr.o: $(hdrdir)/ruby/internal/ctype.h +ifaddr.o: $(hdrdir)/ruby/internal/dllexport.h +ifaddr.o: $(hdrdir)/ruby/internal/dosish.h +ifaddr.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ifaddr.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ifaddr.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ifaddr.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ifaddr.o: $(hdrdir)/ruby/internal/encoding/re.h +ifaddr.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ifaddr.o: $(hdrdir)/ruby/internal/encoding/string.h +ifaddr.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ifaddr.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ifaddr.o: $(hdrdir)/ruby/internal/error.h +ifaddr.o: $(hdrdir)/ruby/internal/eval.h +ifaddr.o: $(hdrdir)/ruby/internal/event.h +ifaddr.o: $(hdrdir)/ruby/internal/fl_type.h +ifaddr.o: $(hdrdir)/ruby/internal/gc.h +ifaddr.o: $(hdrdir)/ruby/internal/glob.h +ifaddr.o: $(hdrdir)/ruby/internal/globals.h +ifaddr.o: $(hdrdir)/ruby/internal/has/attribute.h +ifaddr.o: $(hdrdir)/ruby/internal/has/builtin.h +ifaddr.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ifaddr.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ifaddr.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ifaddr.o: $(hdrdir)/ruby/internal/has/extension.h +ifaddr.o: $(hdrdir)/ruby/internal/has/feature.h +ifaddr.o: $(hdrdir)/ruby/internal/has/warning.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/array.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/bignum.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/class.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/compar.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/complex.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/cont.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/dir.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/enum.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/error.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/eval.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/file.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/gc.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/hash.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/io.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/load.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/marshal.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/numeric.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/object.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/parse.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/proc.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/process.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/random.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/range.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/rational.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/re.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/ruby.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/select.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/signal.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/string.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/struct.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/thread.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/time.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/variable.h +ifaddr.o: $(hdrdir)/ruby/internal/intern/vm.h +ifaddr.o: $(hdrdir)/ruby/internal/interpreter.h +ifaddr.o: $(hdrdir)/ruby/internal/iterator.h +ifaddr.o: $(hdrdir)/ruby/internal/memory.h +ifaddr.o: $(hdrdir)/ruby/internal/method.h +ifaddr.o: $(hdrdir)/ruby/internal/module.h +ifaddr.o: $(hdrdir)/ruby/internal/newobj.h +ifaddr.o: $(hdrdir)/ruby/internal/rgengc.h +ifaddr.o: $(hdrdir)/ruby/internal/scan_args.h +ifaddr.o: $(hdrdir)/ruby/internal/special_consts.h +ifaddr.o: $(hdrdir)/ruby/internal/static_assert.h +ifaddr.o: $(hdrdir)/ruby/internal/stdalign.h +ifaddr.o: $(hdrdir)/ruby/internal/stdbool.h +ifaddr.o: $(hdrdir)/ruby/internal/symbol.h +ifaddr.o: $(hdrdir)/ruby/internal/value.h +ifaddr.o: $(hdrdir)/ruby/internal/value_type.h +ifaddr.o: $(hdrdir)/ruby/internal/variable.h +ifaddr.o: $(hdrdir)/ruby/internal/warning_push.h +ifaddr.o: $(hdrdir)/ruby/internal/xmalloc.h ifaddr.o: $(hdrdir)/ruby/io.h ifaddr.o: $(hdrdir)/ruby/missing.h ifaddr.o: $(hdrdir)/ruby/onigmo.h @@ -95,18 +756,186 @@ ifaddr.o: $(hdrdir)/ruby/subst.h ifaddr.o: $(hdrdir)/ruby/thread.h ifaddr.o: $(hdrdir)/ruby/util.h ifaddr.o: $(top_srcdir)/internal.h +ifaddr.o: $(top_srcdir)/internal/array.h +ifaddr.o: $(top_srcdir)/internal/compilers.h +ifaddr.o: $(top_srcdir)/internal/error.h +ifaddr.o: $(top_srcdir)/internal/gc.h +ifaddr.o: $(top_srcdir)/internal/io.h +ifaddr.o: $(top_srcdir)/internal/serial.h +ifaddr.o: $(top_srcdir)/internal/static_assert.h +ifaddr.o: $(top_srcdir)/internal/string.h +ifaddr.o: $(top_srcdir)/internal/thread.h +ifaddr.o: $(top_srcdir)/internal/vm.h +ifaddr.o: $(top_srcdir)/internal/warnings.h ifaddr.o: constdefs.h ifaddr.o: ifaddr.c ifaddr.o: rubysocket.h ifaddr.o: sockport.h init.o: $(RUBY_EXTCONF_H) init.o: $(arch_hdrdir)/ruby/config.h -init.o: $(hdrdir)/ruby.h init.o: $(hdrdir)/ruby/assert.h init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h init.o: $(hdrdir)/ruby/defines.h init.o: $(hdrdir)/ruby/encoding.h +init.o: $(hdrdir)/ruby/fiber/scheduler.h init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/encoding/coderange.h +init.o: $(hdrdir)/ruby/internal/encoding/ctype.h +init.o: $(hdrdir)/ruby/internal/encoding/encoding.h +init.o: $(hdrdir)/ruby/internal/encoding/pathname.h +init.o: $(hdrdir)/ruby/internal/encoding/re.h +init.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +init.o: $(hdrdir)/ruby/internal/encoding/string.h +init.o: $(hdrdir)/ruby/internal/encoding/symbol.h +init.o: $(hdrdir)/ruby/internal/encoding/transcode.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/gc.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/rgengc.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h init.o: $(hdrdir)/ruby/io.h init.o: $(hdrdir)/ruby/missing.h init.o: $(hdrdir)/ruby/onigmo.h @@ -117,18 +946,186 @@ init.o: $(hdrdir)/ruby/subst.h init.o: $(hdrdir)/ruby/thread.h init.o: $(hdrdir)/ruby/util.h init.o: $(top_srcdir)/internal.h +init.o: $(top_srcdir)/internal/array.h +init.o: $(top_srcdir)/internal/compilers.h +init.o: $(top_srcdir)/internal/error.h +init.o: $(top_srcdir)/internal/gc.h +init.o: $(top_srcdir)/internal/io.h +init.o: $(top_srcdir)/internal/serial.h +init.o: $(top_srcdir)/internal/static_assert.h +init.o: $(top_srcdir)/internal/string.h +init.o: $(top_srcdir)/internal/thread.h +init.o: $(top_srcdir)/internal/vm.h +init.o: $(top_srcdir)/internal/warnings.h init.o: constdefs.h init.o: init.c init.o: rubysocket.h init.o: sockport.h ipsocket.o: $(RUBY_EXTCONF_H) ipsocket.o: $(arch_hdrdir)/ruby/config.h -ipsocket.o: $(hdrdir)/ruby.h ipsocket.o: $(hdrdir)/ruby/assert.h ipsocket.o: $(hdrdir)/ruby/backward.h +ipsocket.o: $(hdrdir)/ruby/backward/2/assume.h +ipsocket.o: $(hdrdir)/ruby/backward/2/attributes.h +ipsocket.o: $(hdrdir)/ruby/backward/2/bool.h +ipsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +ipsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h +ipsocket.o: $(hdrdir)/ruby/backward/2/limits.h +ipsocket.o: $(hdrdir)/ruby/backward/2/long_long.h +ipsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h +ipsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h ipsocket.o: $(hdrdir)/ruby/defines.h ipsocket.o: $(hdrdir)/ruby/encoding.h +ipsocket.o: $(hdrdir)/ruby/fiber/scheduler.h ipsocket.o: $(hdrdir)/ruby/intern.h +ipsocket.o: $(hdrdir)/ruby/internal/anyargs.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ipsocket.o: $(hdrdir)/ruby/internal/assume.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/artificial.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/cold.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/const.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/error.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/format.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/noalias.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/noinline.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/pure.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/restrict.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/warning.h +ipsocket.o: $(hdrdir)/ruby/internal/attr/weakref.h +ipsocket.o: $(hdrdir)/ruby/internal/cast.h +ipsocket.o: $(hdrdir)/ruby/internal/compiler_is.h +ipsocket.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ipsocket.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ipsocket.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ipsocket.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ipsocket.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ipsocket.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ipsocket.o: $(hdrdir)/ruby/internal/compiler_since.h +ipsocket.o: $(hdrdir)/ruby/internal/config.h +ipsocket.o: $(hdrdir)/ruby/internal/constant_p.h +ipsocket.o: $(hdrdir)/ruby/internal/core.h +ipsocket.o: $(hdrdir)/ruby/internal/core/rarray.h +ipsocket.o: $(hdrdir)/ruby/internal/core/rbasic.h +ipsocket.o: $(hdrdir)/ruby/internal/core/rbignum.h +ipsocket.o: $(hdrdir)/ruby/internal/core/rclass.h +ipsocket.o: $(hdrdir)/ruby/internal/core/rdata.h +ipsocket.o: $(hdrdir)/ruby/internal/core/rfile.h +ipsocket.o: $(hdrdir)/ruby/internal/core/rhash.h +ipsocket.o: $(hdrdir)/ruby/internal/core/robject.h +ipsocket.o: $(hdrdir)/ruby/internal/core/rregexp.h +ipsocket.o: $(hdrdir)/ruby/internal/core/rstring.h +ipsocket.o: $(hdrdir)/ruby/internal/core/rstruct.h +ipsocket.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ipsocket.o: $(hdrdir)/ruby/internal/ctype.h +ipsocket.o: $(hdrdir)/ruby/internal/dllexport.h +ipsocket.o: $(hdrdir)/ruby/internal/dosish.h +ipsocket.o: $(hdrdir)/ruby/internal/encoding/coderange.h +ipsocket.o: $(hdrdir)/ruby/internal/encoding/ctype.h +ipsocket.o: $(hdrdir)/ruby/internal/encoding/encoding.h +ipsocket.o: $(hdrdir)/ruby/internal/encoding/pathname.h +ipsocket.o: $(hdrdir)/ruby/internal/encoding/re.h +ipsocket.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +ipsocket.o: $(hdrdir)/ruby/internal/encoding/string.h +ipsocket.o: $(hdrdir)/ruby/internal/encoding/symbol.h +ipsocket.o: $(hdrdir)/ruby/internal/encoding/transcode.h +ipsocket.o: $(hdrdir)/ruby/internal/error.h +ipsocket.o: $(hdrdir)/ruby/internal/eval.h +ipsocket.o: $(hdrdir)/ruby/internal/event.h +ipsocket.o: $(hdrdir)/ruby/internal/fl_type.h +ipsocket.o: $(hdrdir)/ruby/internal/gc.h +ipsocket.o: $(hdrdir)/ruby/internal/glob.h +ipsocket.o: $(hdrdir)/ruby/internal/globals.h +ipsocket.o: $(hdrdir)/ruby/internal/has/attribute.h +ipsocket.o: $(hdrdir)/ruby/internal/has/builtin.h +ipsocket.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ipsocket.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ipsocket.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ipsocket.o: $(hdrdir)/ruby/internal/has/extension.h +ipsocket.o: $(hdrdir)/ruby/internal/has/feature.h +ipsocket.o: $(hdrdir)/ruby/internal/has/warning.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/array.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/bignum.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/class.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/compar.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/complex.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/cont.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/dir.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/enum.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/error.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/eval.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/file.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/gc.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/hash.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/io.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/load.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/marshal.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/numeric.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/object.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/parse.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/proc.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/process.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/random.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/range.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/rational.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/re.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/ruby.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/select.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/signal.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/string.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/struct.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/thread.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/time.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/variable.h +ipsocket.o: $(hdrdir)/ruby/internal/intern/vm.h +ipsocket.o: $(hdrdir)/ruby/internal/interpreter.h +ipsocket.o: $(hdrdir)/ruby/internal/iterator.h +ipsocket.o: $(hdrdir)/ruby/internal/memory.h +ipsocket.o: $(hdrdir)/ruby/internal/method.h +ipsocket.o: $(hdrdir)/ruby/internal/module.h +ipsocket.o: $(hdrdir)/ruby/internal/newobj.h +ipsocket.o: $(hdrdir)/ruby/internal/rgengc.h +ipsocket.o: $(hdrdir)/ruby/internal/scan_args.h +ipsocket.o: $(hdrdir)/ruby/internal/special_consts.h +ipsocket.o: $(hdrdir)/ruby/internal/static_assert.h +ipsocket.o: $(hdrdir)/ruby/internal/stdalign.h +ipsocket.o: $(hdrdir)/ruby/internal/stdbool.h +ipsocket.o: $(hdrdir)/ruby/internal/symbol.h +ipsocket.o: $(hdrdir)/ruby/internal/value.h +ipsocket.o: $(hdrdir)/ruby/internal/value_type.h +ipsocket.o: $(hdrdir)/ruby/internal/variable.h +ipsocket.o: $(hdrdir)/ruby/internal/warning_push.h +ipsocket.o: $(hdrdir)/ruby/internal/xmalloc.h ipsocket.o: $(hdrdir)/ruby/io.h ipsocket.o: $(hdrdir)/ruby/missing.h ipsocket.o: $(hdrdir)/ruby/onigmo.h @@ -139,18 +1136,186 @@ ipsocket.o: $(hdrdir)/ruby/subst.h ipsocket.o: $(hdrdir)/ruby/thread.h ipsocket.o: $(hdrdir)/ruby/util.h ipsocket.o: $(top_srcdir)/internal.h +ipsocket.o: $(top_srcdir)/internal/array.h +ipsocket.o: $(top_srcdir)/internal/compilers.h +ipsocket.o: $(top_srcdir)/internal/error.h +ipsocket.o: $(top_srcdir)/internal/gc.h +ipsocket.o: $(top_srcdir)/internal/io.h +ipsocket.o: $(top_srcdir)/internal/serial.h +ipsocket.o: $(top_srcdir)/internal/static_assert.h +ipsocket.o: $(top_srcdir)/internal/string.h +ipsocket.o: $(top_srcdir)/internal/thread.h +ipsocket.o: $(top_srcdir)/internal/vm.h +ipsocket.o: $(top_srcdir)/internal/warnings.h ipsocket.o: constdefs.h ipsocket.o: ipsocket.c ipsocket.o: rubysocket.h ipsocket.o: sockport.h option.o: $(RUBY_EXTCONF_H) option.o: $(arch_hdrdir)/ruby/config.h -option.o: $(hdrdir)/ruby.h option.o: $(hdrdir)/ruby/assert.h option.o: $(hdrdir)/ruby/backward.h +option.o: $(hdrdir)/ruby/backward/2/assume.h +option.o: $(hdrdir)/ruby/backward/2/attributes.h +option.o: $(hdrdir)/ruby/backward/2/bool.h +option.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +option.o: $(hdrdir)/ruby/backward/2/inttypes.h +option.o: $(hdrdir)/ruby/backward/2/limits.h +option.o: $(hdrdir)/ruby/backward/2/long_long.h +option.o: $(hdrdir)/ruby/backward/2/stdalign.h +option.o: $(hdrdir)/ruby/backward/2/stdarg.h option.o: $(hdrdir)/ruby/defines.h option.o: $(hdrdir)/ruby/encoding.h +option.o: $(hdrdir)/ruby/fiber/scheduler.h option.o: $(hdrdir)/ruby/intern.h +option.o: $(hdrdir)/ruby/internal/anyargs.h +option.o: $(hdrdir)/ruby/internal/arithmetic.h +option.o: $(hdrdir)/ruby/internal/arithmetic/char.h +option.o: $(hdrdir)/ruby/internal/arithmetic/double.h +option.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +option.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +option.o: $(hdrdir)/ruby/internal/arithmetic/int.h +option.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +option.o: $(hdrdir)/ruby/internal/arithmetic/long.h +option.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +option.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +option.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +option.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +option.o: $(hdrdir)/ruby/internal/arithmetic/short.h +option.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +option.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +option.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +option.o: $(hdrdir)/ruby/internal/assume.h +option.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +option.o: $(hdrdir)/ruby/internal/attr/artificial.h +option.o: $(hdrdir)/ruby/internal/attr/cold.h +option.o: $(hdrdir)/ruby/internal/attr/const.h +option.o: $(hdrdir)/ruby/internal/attr/constexpr.h +option.o: $(hdrdir)/ruby/internal/attr/deprecated.h +option.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +option.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +option.o: $(hdrdir)/ruby/internal/attr/error.h +option.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +option.o: $(hdrdir)/ruby/internal/attr/forceinline.h +option.o: $(hdrdir)/ruby/internal/attr/format.h +option.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +option.o: $(hdrdir)/ruby/internal/attr/noalias.h +option.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +option.o: $(hdrdir)/ruby/internal/attr/noexcept.h +option.o: $(hdrdir)/ruby/internal/attr/noinline.h +option.o: $(hdrdir)/ruby/internal/attr/nonnull.h +option.o: $(hdrdir)/ruby/internal/attr/noreturn.h +option.o: $(hdrdir)/ruby/internal/attr/pure.h +option.o: $(hdrdir)/ruby/internal/attr/restrict.h +option.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +option.o: $(hdrdir)/ruby/internal/attr/warning.h +option.o: $(hdrdir)/ruby/internal/attr/weakref.h +option.o: $(hdrdir)/ruby/internal/cast.h +option.o: $(hdrdir)/ruby/internal/compiler_is.h +option.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +option.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +option.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +option.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +option.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +option.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +option.o: $(hdrdir)/ruby/internal/compiler_since.h +option.o: $(hdrdir)/ruby/internal/config.h +option.o: $(hdrdir)/ruby/internal/constant_p.h +option.o: $(hdrdir)/ruby/internal/core.h +option.o: $(hdrdir)/ruby/internal/core/rarray.h +option.o: $(hdrdir)/ruby/internal/core/rbasic.h +option.o: $(hdrdir)/ruby/internal/core/rbignum.h +option.o: $(hdrdir)/ruby/internal/core/rclass.h +option.o: $(hdrdir)/ruby/internal/core/rdata.h +option.o: $(hdrdir)/ruby/internal/core/rfile.h +option.o: $(hdrdir)/ruby/internal/core/rhash.h +option.o: $(hdrdir)/ruby/internal/core/robject.h +option.o: $(hdrdir)/ruby/internal/core/rregexp.h +option.o: $(hdrdir)/ruby/internal/core/rstring.h +option.o: $(hdrdir)/ruby/internal/core/rstruct.h +option.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +option.o: $(hdrdir)/ruby/internal/ctype.h +option.o: $(hdrdir)/ruby/internal/dllexport.h +option.o: $(hdrdir)/ruby/internal/dosish.h +option.o: $(hdrdir)/ruby/internal/encoding/coderange.h +option.o: $(hdrdir)/ruby/internal/encoding/ctype.h +option.o: $(hdrdir)/ruby/internal/encoding/encoding.h +option.o: $(hdrdir)/ruby/internal/encoding/pathname.h +option.o: $(hdrdir)/ruby/internal/encoding/re.h +option.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +option.o: $(hdrdir)/ruby/internal/encoding/string.h +option.o: $(hdrdir)/ruby/internal/encoding/symbol.h +option.o: $(hdrdir)/ruby/internal/encoding/transcode.h +option.o: $(hdrdir)/ruby/internal/error.h +option.o: $(hdrdir)/ruby/internal/eval.h +option.o: $(hdrdir)/ruby/internal/event.h +option.o: $(hdrdir)/ruby/internal/fl_type.h +option.o: $(hdrdir)/ruby/internal/gc.h +option.o: $(hdrdir)/ruby/internal/glob.h +option.o: $(hdrdir)/ruby/internal/globals.h +option.o: $(hdrdir)/ruby/internal/has/attribute.h +option.o: $(hdrdir)/ruby/internal/has/builtin.h +option.o: $(hdrdir)/ruby/internal/has/c_attribute.h +option.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +option.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +option.o: $(hdrdir)/ruby/internal/has/extension.h +option.o: $(hdrdir)/ruby/internal/has/feature.h +option.o: $(hdrdir)/ruby/internal/has/warning.h +option.o: $(hdrdir)/ruby/internal/intern/array.h +option.o: $(hdrdir)/ruby/internal/intern/bignum.h +option.o: $(hdrdir)/ruby/internal/intern/class.h +option.o: $(hdrdir)/ruby/internal/intern/compar.h +option.o: $(hdrdir)/ruby/internal/intern/complex.h +option.o: $(hdrdir)/ruby/internal/intern/cont.h +option.o: $(hdrdir)/ruby/internal/intern/dir.h +option.o: $(hdrdir)/ruby/internal/intern/enum.h +option.o: $(hdrdir)/ruby/internal/intern/enumerator.h +option.o: $(hdrdir)/ruby/internal/intern/error.h +option.o: $(hdrdir)/ruby/internal/intern/eval.h +option.o: $(hdrdir)/ruby/internal/intern/file.h +option.o: $(hdrdir)/ruby/internal/intern/gc.h +option.o: $(hdrdir)/ruby/internal/intern/hash.h +option.o: $(hdrdir)/ruby/internal/intern/io.h +option.o: $(hdrdir)/ruby/internal/intern/load.h +option.o: $(hdrdir)/ruby/internal/intern/marshal.h +option.o: $(hdrdir)/ruby/internal/intern/numeric.h +option.o: $(hdrdir)/ruby/internal/intern/object.h +option.o: $(hdrdir)/ruby/internal/intern/parse.h +option.o: $(hdrdir)/ruby/internal/intern/proc.h +option.o: $(hdrdir)/ruby/internal/intern/process.h +option.o: $(hdrdir)/ruby/internal/intern/random.h +option.o: $(hdrdir)/ruby/internal/intern/range.h +option.o: $(hdrdir)/ruby/internal/intern/rational.h +option.o: $(hdrdir)/ruby/internal/intern/re.h +option.o: $(hdrdir)/ruby/internal/intern/ruby.h +option.o: $(hdrdir)/ruby/internal/intern/select.h +option.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +option.o: $(hdrdir)/ruby/internal/intern/signal.h +option.o: $(hdrdir)/ruby/internal/intern/sprintf.h +option.o: $(hdrdir)/ruby/internal/intern/string.h +option.o: $(hdrdir)/ruby/internal/intern/struct.h +option.o: $(hdrdir)/ruby/internal/intern/thread.h +option.o: $(hdrdir)/ruby/internal/intern/time.h +option.o: $(hdrdir)/ruby/internal/intern/variable.h +option.o: $(hdrdir)/ruby/internal/intern/vm.h +option.o: $(hdrdir)/ruby/internal/interpreter.h +option.o: $(hdrdir)/ruby/internal/iterator.h +option.o: $(hdrdir)/ruby/internal/memory.h +option.o: $(hdrdir)/ruby/internal/method.h +option.o: $(hdrdir)/ruby/internal/module.h +option.o: $(hdrdir)/ruby/internal/newobj.h +option.o: $(hdrdir)/ruby/internal/rgengc.h +option.o: $(hdrdir)/ruby/internal/scan_args.h +option.o: $(hdrdir)/ruby/internal/special_consts.h +option.o: $(hdrdir)/ruby/internal/static_assert.h +option.o: $(hdrdir)/ruby/internal/stdalign.h +option.o: $(hdrdir)/ruby/internal/stdbool.h +option.o: $(hdrdir)/ruby/internal/symbol.h +option.o: $(hdrdir)/ruby/internal/value.h +option.o: $(hdrdir)/ruby/internal/value_type.h +option.o: $(hdrdir)/ruby/internal/variable.h +option.o: $(hdrdir)/ruby/internal/warning_push.h +option.o: $(hdrdir)/ruby/internal/xmalloc.h option.o: $(hdrdir)/ruby/io.h option.o: $(hdrdir)/ruby/missing.h option.o: $(hdrdir)/ruby/onigmo.h @@ -161,18 +1326,186 @@ option.o: $(hdrdir)/ruby/subst.h option.o: $(hdrdir)/ruby/thread.h option.o: $(hdrdir)/ruby/util.h option.o: $(top_srcdir)/internal.h +option.o: $(top_srcdir)/internal/array.h +option.o: $(top_srcdir)/internal/compilers.h +option.o: $(top_srcdir)/internal/error.h +option.o: $(top_srcdir)/internal/gc.h +option.o: $(top_srcdir)/internal/io.h +option.o: $(top_srcdir)/internal/serial.h +option.o: $(top_srcdir)/internal/static_assert.h +option.o: $(top_srcdir)/internal/string.h +option.o: $(top_srcdir)/internal/thread.h +option.o: $(top_srcdir)/internal/vm.h +option.o: $(top_srcdir)/internal/warnings.h option.o: constdefs.h option.o: option.c option.o: rubysocket.h option.o: sockport.h raddrinfo.o: $(RUBY_EXTCONF_H) raddrinfo.o: $(arch_hdrdir)/ruby/config.h -raddrinfo.o: $(hdrdir)/ruby.h raddrinfo.o: $(hdrdir)/ruby/assert.h raddrinfo.o: $(hdrdir)/ruby/backward.h +raddrinfo.o: $(hdrdir)/ruby/backward/2/assume.h +raddrinfo.o: $(hdrdir)/ruby/backward/2/attributes.h +raddrinfo.o: $(hdrdir)/ruby/backward/2/bool.h +raddrinfo.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +raddrinfo.o: $(hdrdir)/ruby/backward/2/inttypes.h +raddrinfo.o: $(hdrdir)/ruby/backward/2/limits.h +raddrinfo.o: $(hdrdir)/ruby/backward/2/long_long.h +raddrinfo.o: $(hdrdir)/ruby/backward/2/stdalign.h +raddrinfo.o: $(hdrdir)/ruby/backward/2/stdarg.h raddrinfo.o: $(hdrdir)/ruby/defines.h raddrinfo.o: $(hdrdir)/ruby/encoding.h +raddrinfo.o: $(hdrdir)/ruby/fiber/scheduler.h raddrinfo.o: $(hdrdir)/ruby/intern.h +raddrinfo.o: $(hdrdir)/ruby/internal/anyargs.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/char.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/double.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/int.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/long.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/short.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +raddrinfo.o: $(hdrdir)/ruby/internal/assume.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/artificial.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/cold.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/const.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/constexpr.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/deprecated.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/error.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/forceinline.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/format.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/noalias.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/noexcept.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/noinline.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/nonnull.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/noreturn.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/pure.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/restrict.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/warning.h +raddrinfo.o: $(hdrdir)/ruby/internal/attr/weakref.h +raddrinfo.o: $(hdrdir)/ruby/internal/cast.h +raddrinfo.o: $(hdrdir)/ruby/internal/compiler_is.h +raddrinfo.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +raddrinfo.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +raddrinfo.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +raddrinfo.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +raddrinfo.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +raddrinfo.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +raddrinfo.o: $(hdrdir)/ruby/internal/compiler_since.h +raddrinfo.o: $(hdrdir)/ruby/internal/config.h +raddrinfo.o: $(hdrdir)/ruby/internal/constant_p.h +raddrinfo.o: $(hdrdir)/ruby/internal/core.h +raddrinfo.o: $(hdrdir)/ruby/internal/core/rarray.h +raddrinfo.o: $(hdrdir)/ruby/internal/core/rbasic.h +raddrinfo.o: $(hdrdir)/ruby/internal/core/rbignum.h +raddrinfo.o: $(hdrdir)/ruby/internal/core/rclass.h +raddrinfo.o: $(hdrdir)/ruby/internal/core/rdata.h +raddrinfo.o: $(hdrdir)/ruby/internal/core/rfile.h +raddrinfo.o: $(hdrdir)/ruby/internal/core/rhash.h +raddrinfo.o: $(hdrdir)/ruby/internal/core/robject.h +raddrinfo.o: $(hdrdir)/ruby/internal/core/rregexp.h +raddrinfo.o: $(hdrdir)/ruby/internal/core/rstring.h +raddrinfo.o: $(hdrdir)/ruby/internal/core/rstruct.h +raddrinfo.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +raddrinfo.o: $(hdrdir)/ruby/internal/ctype.h +raddrinfo.o: $(hdrdir)/ruby/internal/dllexport.h +raddrinfo.o: $(hdrdir)/ruby/internal/dosish.h +raddrinfo.o: $(hdrdir)/ruby/internal/encoding/coderange.h +raddrinfo.o: $(hdrdir)/ruby/internal/encoding/ctype.h +raddrinfo.o: $(hdrdir)/ruby/internal/encoding/encoding.h +raddrinfo.o: $(hdrdir)/ruby/internal/encoding/pathname.h +raddrinfo.o: $(hdrdir)/ruby/internal/encoding/re.h +raddrinfo.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +raddrinfo.o: $(hdrdir)/ruby/internal/encoding/string.h +raddrinfo.o: $(hdrdir)/ruby/internal/encoding/symbol.h +raddrinfo.o: $(hdrdir)/ruby/internal/encoding/transcode.h +raddrinfo.o: $(hdrdir)/ruby/internal/error.h +raddrinfo.o: $(hdrdir)/ruby/internal/eval.h +raddrinfo.o: $(hdrdir)/ruby/internal/event.h +raddrinfo.o: $(hdrdir)/ruby/internal/fl_type.h +raddrinfo.o: $(hdrdir)/ruby/internal/gc.h +raddrinfo.o: $(hdrdir)/ruby/internal/glob.h +raddrinfo.o: $(hdrdir)/ruby/internal/globals.h +raddrinfo.o: $(hdrdir)/ruby/internal/has/attribute.h +raddrinfo.o: $(hdrdir)/ruby/internal/has/builtin.h +raddrinfo.o: $(hdrdir)/ruby/internal/has/c_attribute.h +raddrinfo.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +raddrinfo.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +raddrinfo.o: $(hdrdir)/ruby/internal/has/extension.h +raddrinfo.o: $(hdrdir)/ruby/internal/has/feature.h +raddrinfo.o: $(hdrdir)/ruby/internal/has/warning.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/array.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/bignum.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/class.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/compar.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/complex.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/cont.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/dir.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/enum.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/enumerator.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/error.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/eval.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/file.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/gc.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/hash.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/io.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/load.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/marshal.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/numeric.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/object.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/parse.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/proc.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/process.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/random.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/range.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/rational.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/re.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/ruby.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/select.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/signal.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/sprintf.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/string.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/struct.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/thread.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/time.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/variable.h +raddrinfo.o: $(hdrdir)/ruby/internal/intern/vm.h +raddrinfo.o: $(hdrdir)/ruby/internal/interpreter.h +raddrinfo.o: $(hdrdir)/ruby/internal/iterator.h +raddrinfo.o: $(hdrdir)/ruby/internal/memory.h +raddrinfo.o: $(hdrdir)/ruby/internal/method.h +raddrinfo.o: $(hdrdir)/ruby/internal/module.h +raddrinfo.o: $(hdrdir)/ruby/internal/newobj.h +raddrinfo.o: $(hdrdir)/ruby/internal/rgengc.h +raddrinfo.o: $(hdrdir)/ruby/internal/scan_args.h +raddrinfo.o: $(hdrdir)/ruby/internal/special_consts.h +raddrinfo.o: $(hdrdir)/ruby/internal/static_assert.h +raddrinfo.o: $(hdrdir)/ruby/internal/stdalign.h +raddrinfo.o: $(hdrdir)/ruby/internal/stdbool.h +raddrinfo.o: $(hdrdir)/ruby/internal/symbol.h +raddrinfo.o: $(hdrdir)/ruby/internal/value.h +raddrinfo.o: $(hdrdir)/ruby/internal/value_type.h +raddrinfo.o: $(hdrdir)/ruby/internal/variable.h +raddrinfo.o: $(hdrdir)/ruby/internal/warning_push.h +raddrinfo.o: $(hdrdir)/ruby/internal/xmalloc.h raddrinfo.o: $(hdrdir)/ruby/io.h raddrinfo.o: $(hdrdir)/ruby/missing.h raddrinfo.o: $(hdrdir)/ruby/onigmo.h @@ -183,18 +1516,186 @@ raddrinfo.o: $(hdrdir)/ruby/subst.h raddrinfo.o: $(hdrdir)/ruby/thread.h raddrinfo.o: $(hdrdir)/ruby/util.h raddrinfo.o: $(top_srcdir)/internal.h +raddrinfo.o: $(top_srcdir)/internal/array.h +raddrinfo.o: $(top_srcdir)/internal/compilers.h +raddrinfo.o: $(top_srcdir)/internal/error.h +raddrinfo.o: $(top_srcdir)/internal/gc.h +raddrinfo.o: $(top_srcdir)/internal/io.h +raddrinfo.o: $(top_srcdir)/internal/serial.h +raddrinfo.o: $(top_srcdir)/internal/static_assert.h +raddrinfo.o: $(top_srcdir)/internal/string.h +raddrinfo.o: $(top_srcdir)/internal/thread.h +raddrinfo.o: $(top_srcdir)/internal/vm.h +raddrinfo.o: $(top_srcdir)/internal/warnings.h raddrinfo.o: constdefs.h raddrinfo.o: raddrinfo.c raddrinfo.o: rubysocket.h raddrinfo.o: sockport.h socket.o: $(RUBY_EXTCONF_H) socket.o: $(arch_hdrdir)/ruby/config.h -socket.o: $(hdrdir)/ruby.h socket.o: $(hdrdir)/ruby/assert.h socket.o: $(hdrdir)/ruby/backward.h +socket.o: $(hdrdir)/ruby/backward/2/assume.h +socket.o: $(hdrdir)/ruby/backward/2/attributes.h +socket.o: $(hdrdir)/ruby/backward/2/bool.h +socket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +socket.o: $(hdrdir)/ruby/backward/2/inttypes.h +socket.o: $(hdrdir)/ruby/backward/2/limits.h +socket.o: $(hdrdir)/ruby/backward/2/long_long.h +socket.o: $(hdrdir)/ruby/backward/2/stdalign.h +socket.o: $(hdrdir)/ruby/backward/2/stdarg.h socket.o: $(hdrdir)/ruby/defines.h socket.o: $(hdrdir)/ruby/encoding.h +socket.o: $(hdrdir)/ruby/fiber/scheduler.h socket.o: $(hdrdir)/ruby/intern.h +socket.o: $(hdrdir)/ruby/internal/anyargs.h +socket.o: $(hdrdir)/ruby/internal/arithmetic.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/char.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/double.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/int.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/long.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/short.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +socket.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +socket.o: $(hdrdir)/ruby/internal/assume.h +socket.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +socket.o: $(hdrdir)/ruby/internal/attr/artificial.h +socket.o: $(hdrdir)/ruby/internal/attr/cold.h +socket.o: $(hdrdir)/ruby/internal/attr/const.h +socket.o: $(hdrdir)/ruby/internal/attr/constexpr.h +socket.o: $(hdrdir)/ruby/internal/attr/deprecated.h +socket.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +socket.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +socket.o: $(hdrdir)/ruby/internal/attr/error.h +socket.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +socket.o: $(hdrdir)/ruby/internal/attr/forceinline.h +socket.o: $(hdrdir)/ruby/internal/attr/format.h +socket.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +socket.o: $(hdrdir)/ruby/internal/attr/noalias.h +socket.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +socket.o: $(hdrdir)/ruby/internal/attr/noexcept.h +socket.o: $(hdrdir)/ruby/internal/attr/noinline.h +socket.o: $(hdrdir)/ruby/internal/attr/nonnull.h +socket.o: $(hdrdir)/ruby/internal/attr/noreturn.h +socket.o: $(hdrdir)/ruby/internal/attr/pure.h +socket.o: $(hdrdir)/ruby/internal/attr/restrict.h +socket.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +socket.o: $(hdrdir)/ruby/internal/attr/warning.h +socket.o: $(hdrdir)/ruby/internal/attr/weakref.h +socket.o: $(hdrdir)/ruby/internal/cast.h +socket.o: $(hdrdir)/ruby/internal/compiler_is.h +socket.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +socket.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +socket.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +socket.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +socket.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +socket.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +socket.o: $(hdrdir)/ruby/internal/compiler_since.h +socket.o: $(hdrdir)/ruby/internal/config.h +socket.o: $(hdrdir)/ruby/internal/constant_p.h +socket.o: $(hdrdir)/ruby/internal/core.h +socket.o: $(hdrdir)/ruby/internal/core/rarray.h +socket.o: $(hdrdir)/ruby/internal/core/rbasic.h +socket.o: $(hdrdir)/ruby/internal/core/rbignum.h +socket.o: $(hdrdir)/ruby/internal/core/rclass.h +socket.o: $(hdrdir)/ruby/internal/core/rdata.h +socket.o: $(hdrdir)/ruby/internal/core/rfile.h +socket.o: $(hdrdir)/ruby/internal/core/rhash.h +socket.o: $(hdrdir)/ruby/internal/core/robject.h +socket.o: $(hdrdir)/ruby/internal/core/rregexp.h +socket.o: $(hdrdir)/ruby/internal/core/rstring.h +socket.o: $(hdrdir)/ruby/internal/core/rstruct.h +socket.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +socket.o: $(hdrdir)/ruby/internal/ctype.h +socket.o: $(hdrdir)/ruby/internal/dllexport.h +socket.o: $(hdrdir)/ruby/internal/dosish.h +socket.o: $(hdrdir)/ruby/internal/encoding/coderange.h +socket.o: $(hdrdir)/ruby/internal/encoding/ctype.h +socket.o: $(hdrdir)/ruby/internal/encoding/encoding.h +socket.o: $(hdrdir)/ruby/internal/encoding/pathname.h +socket.o: $(hdrdir)/ruby/internal/encoding/re.h +socket.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +socket.o: $(hdrdir)/ruby/internal/encoding/string.h +socket.o: $(hdrdir)/ruby/internal/encoding/symbol.h +socket.o: $(hdrdir)/ruby/internal/encoding/transcode.h +socket.o: $(hdrdir)/ruby/internal/error.h +socket.o: $(hdrdir)/ruby/internal/eval.h +socket.o: $(hdrdir)/ruby/internal/event.h +socket.o: $(hdrdir)/ruby/internal/fl_type.h +socket.o: $(hdrdir)/ruby/internal/gc.h +socket.o: $(hdrdir)/ruby/internal/glob.h +socket.o: $(hdrdir)/ruby/internal/globals.h +socket.o: $(hdrdir)/ruby/internal/has/attribute.h +socket.o: $(hdrdir)/ruby/internal/has/builtin.h +socket.o: $(hdrdir)/ruby/internal/has/c_attribute.h +socket.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +socket.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +socket.o: $(hdrdir)/ruby/internal/has/extension.h +socket.o: $(hdrdir)/ruby/internal/has/feature.h +socket.o: $(hdrdir)/ruby/internal/has/warning.h +socket.o: $(hdrdir)/ruby/internal/intern/array.h +socket.o: $(hdrdir)/ruby/internal/intern/bignum.h +socket.o: $(hdrdir)/ruby/internal/intern/class.h +socket.o: $(hdrdir)/ruby/internal/intern/compar.h +socket.o: $(hdrdir)/ruby/internal/intern/complex.h +socket.o: $(hdrdir)/ruby/internal/intern/cont.h +socket.o: $(hdrdir)/ruby/internal/intern/dir.h +socket.o: $(hdrdir)/ruby/internal/intern/enum.h +socket.o: $(hdrdir)/ruby/internal/intern/enumerator.h +socket.o: $(hdrdir)/ruby/internal/intern/error.h +socket.o: $(hdrdir)/ruby/internal/intern/eval.h +socket.o: $(hdrdir)/ruby/internal/intern/file.h +socket.o: $(hdrdir)/ruby/internal/intern/gc.h +socket.o: $(hdrdir)/ruby/internal/intern/hash.h +socket.o: $(hdrdir)/ruby/internal/intern/io.h +socket.o: $(hdrdir)/ruby/internal/intern/load.h +socket.o: $(hdrdir)/ruby/internal/intern/marshal.h +socket.o: $(hdrdir)/ruby/internal/intern/numeric.h +socket.o: $(hdrdir)/ruby/internal/intern/object.h +socket.o: $(hdrdir)/ruby/internal/intern/parse.h +socket.o: $(hdrdir)/ruby/internal/intern/proc.h +socket.o: $(hdrdir)/ruby/internal/intern/process.h +socket.o: $(hdrdir)/ruby/internal/intern/random.h +socket.o: $(hdrdir)/ruby/internal/intern/range.h +socket.o: $(hdrdir)/ruby/internal/intern/rational.h +socket.o: $(hdrdir)/ruby/internal/intern/re.h +socket.o: $(hdrdir)/ruby/internal/intern/ruby.h +socket.o: $(hdrdir)/ruby/internal/intern/select.h +socket.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +socket.o: $(hdrdir)/ruby/internal/intern/signal.h +socket.o: $(hdrdir)/ruby/internal/intern/sprintf.h +socket.o: $(hdrdir)/ruby/internal/intern/string.h +socket.o: $(hdrdir)/ruby/internal/intern/struct.h +socket.o: $(hdrdir)/ruby/internal/intern/thread.h +socket.o: $(hdrdir)/ruby/internal/intern/time.h +socket.o: $(hdrdir)/ruby/internal/intern/variable.h +socket.o: $(hdrdir)/ruby/internal/intern/vm.h +socket.o: $(hdrdir)/ruby/internal/interpreter.h +socket.o: $(hdrdir)/ruby/internal/iterator.h +socket.o: $(hdrdir)/ruby/internal/memory.h +socket.o: $(hdrdir)/ruby/internal/method.h +socket.o: $(hdrdir)/ruby/internal/module.h +socket.o: $(hdrdir)/ruby/internal/newobj.h +socket.o: $(hdrdir)/ruby/internal/rgengc.h +socket.o: $(hdrdir)/ruby/internal/scan_args.h +socket.o: $(hdrdir)/ruby/internal/special_consts.h +socket.o: $(hdrdir)/ruby/internal/static_assert.h +socket.o: $(hdrdir)/ruby/internal/stdalign.h +socket.o: $(hdrdir)/ruby/internal/stdbool.h +socket.o: $(hdrdir)/ruby/internal/symbol.h +socket.o: $(hdrdir)/ruby/internal/value.h +socket.o: $(hdrdir)/ruby/internal/value_type.h +socket.o: $(hdrdir)/ruby/internal/variable.h +socket.o: $(hdrdir)/ruby/internal/warning_push.h +socket.o: $(hdrdir)/ruby/internal/xmalloc.h socket.o: $(hdrdir)/ruby/io.h socket.o: $(hdrdir)/ruby/missing.h socket.o: $(hdrdir)/ruby/onigmo.h @@ -205,18 +1706,186 @@ socket.o: $(hdrdir)/ruby/subst.h socket.o: $(hdrdir)/ruby/thread.h socket.o: $(hdrdir)/ruby/util.h socket.o: $(top_srcdir)/internal.h +socket.o: $(top_srcdir)/internal/array.h +socket.o: $(top_srcdir)/internal/compilers.h +socket.o: $(top_srcdir)/internal/error.h +socket.o: $(top_srcdir)/internal/gc.h +socket.o: $(top_srcdir)/internal/io.h +socket.o: $(top_srcdir)/internal/serial.h +socket.o: $(top_srcdir)/internal/static_assert.h +socket.o: $(top_srcdir)/internal/string.h +socket.o: $(top_srcdir)/internal/thread.h +socket.o: $(top_srcdir)/internal/vm.h +socket.o: $(top_srcdir)/internal/warnings.h socket.o: constdefs.h socket.o: rubysocket.h socket.o: socket.c socket.o: sockport.h sockssocket.o: $(RUBY_EXTCONF_H) sockssocket.o: $(arch_hdrdir)/ruby/config.h -sockssocket.o: $(hdrdir)/ruby.h sockssocket.o: $(hdrdir)/ruby/assert.h sockssocket.o: $(hdrdir)/ruby/backward.h +sockssocket.o: $(hdrdir)/ruby/backward/2/assume.h +sockssocket.o: $(hdrdir)/ruby/backward/2/attributes.h +sockssocket.o: $(hdrdir)/ruby/backward/2/bool.h +sockssocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +sockssocket.o: $(hdrdir)/ruby/backward/2/inttypes.h +sockssocket.o: $(hdrdir)/ruby/backward/2/limits.h +sockssocket.o: $(hdrdir)/ruby/backward/2/long_long.h +sockssocket.o: $(hdrdir)/ruby/backward/2/stdalign.h +sockssocket.o: $(hdrdir)/ruby/backward/2/stdarg.h sockssocket.o: $(hdrdir)/ruby/defines.h sockssocket.o: $(hdrdir)/ruby/encoding.h +sockssocket.o: $(hdrdir)/ruby/fiber/scheduler.h sockssocket.o: $(hdrdir)/ruby/intern.h +sockssocket.o: $(hdrdir)/ruby/internal/anyargs.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/char.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/double.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/int.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/long.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/short.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +sockssocket.o: $(hdrdir)/ruby/internal/assume.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/artificial.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/cold.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/const.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/constexpr.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/deprecated.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/error.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/forceinline.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/format.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/noalias.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/noexcept.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/noinline.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/nonnull.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/noreturn.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/pure.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/restrict.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/warning.h +sockssocket.o: $(hdrdir)/ruby/internal/attr/weakref.h +sockssocket.o: $(hdrdir)/ruby/internal/cast.h +sockssocket.o: $(hdrdir)/ruby/internal/compiler_is.h +sockssocket.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +sockssocket.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +sockssocket.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +sockssocket.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +sockssocket.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +sockssocket.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +sockssocket.o: $(hdrdir)/ruby/internal/compiler_since.h +sockssocket.o: $(hdrdir)/ruby/internal/config.h +sockssocket.o: $(hdrdir)/ruby/internal/constant_p.h +sockssocket.o: $(hdrdir)/ruby/internal/core.h +sockssocket.o: $(hdrdir)/ruby/internal/core/rarray.h +sockssocket.o: $(hdrdir)/ruby/internal/core/rbasic.h +sockssocket.o: $(hdrdir)/ruby/internal/core/rbignum.h +sockssocket.o: $(hdrdir)/ruby/internal/core/rclass.h +sockssocket.o: $(hdrdir)/ruby/internal/core/rdata.h +sockssocket.o: $(hdrdir)/ruby/internal/core/rfile.h +sockssocket.o: $(hdrdir)/ruby/internal/core/rhash.h +sockssocket.o: $(hdrdir)/ruby/internal/core/robject.h +sockssocket.o: $(hdrdir)/ruby/internal/core/rregexp.h +sockssocket.o: $(hdrdir)/ruby/internal/core/rstring.h +sockssocket.o: $(hdrdir)/ruby/internal/core/rstruct.h +sockssocket.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +sockssocket.o: $(hdrdir)/ruby/internal/ctype.h +sockssocket.o: $(hdrdir)/ruby/internal/dllexport.h +sockssocket.o: $(hdrdir)/ruby/internal/dosish.h +sockssocket.o: $(hdrdir)/ruby/internal/encoding/coderange.h +sockssocket.o: $(hdrdir)/ruby/internal/encoding/ctype.h +sockssocket.o: $(hdrdir)/ruby/internal/encoding/encoding.h +sockssocket.o: $(hdrdir)/ruby/internal/encoding/pathname.h +sockssocket.o: $(hdrdir)/ruby/internal/encoding/re.h +sockssocket.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +sockssocket.o: $(hdrdir)/ruby/internal/encoding/string.h +sockssocket.o: $(hdrdir)/ruby/internal/encoding/symbol.h +sockssocket.o: $(hdrdir)/ruby/internal/encoding/transcode.h +sockssocket.o: $(hdrdir)/ruby/internal/error.h +sockssocket.o: $(hdrdir)/ruby/internal/eval.h +sockssocket.o: $(hdrdir)/ruby/internal/event.h +sockssocket.o: $(hdrdir)/ruby/internal/fl_type.h +sockssocket.o: $(hdrdir)/ruby/internal/gc.h +sockssocket.o: $(hdrdir)/ruby/internal/glob.h +sockssocket.o: $(hdrdir)/ruby/internal/globals.h +sockssocket.o: $(hdrdir)/ruby/internal/has/attribute.h +sockssocket.o: $(hdrdir)/ruby/internal/has/builtin.h +sockssocket.o: $(hdrdir)/ruby/internal/has/c_attribute.h +sockssocket.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +sockssocket.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +sockssocket.o: $(hdrdir)/ruby/internal/has/extension.h +sockssocket.o: $(hdrdir)/ruby/internal/has/feature.h +sockssocket.o: $(hdrdir)/ruby/internal/has/warning.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/array.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/bignum.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/class.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/compar.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/complex.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/cont.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/dir.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/enum.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/enumerator.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/error.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/eval.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/file.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/gc.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/hash.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/io.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/load.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/marshal.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/numeric.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/object.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/parse.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/proc.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/process.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/random.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/range.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/rational.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/re.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/ruby.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/select.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/signal.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/sprintf.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/string.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/struct.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/thread.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/time.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/variable.h +sockssocket.o: $(hdrdir)/ruby/internal/intern/vm.h +sockssocket.o: $(hdrdir)/ruby/internal/interpreter.h +sockssocket.o: $(hdrdir)/ruby/internal/iterator.h +sockssocket.o: $(hdrdir)/ruby/internal/memory.h +sockssocket.o: $(hdrdir)/ruby/internal/method.h +sockssocket.o: $(hdrdir)/ruby/internal/module.h +sockssocket.o: $(hdrdir)/ruby/internal/newobj.h +sockssocket.o: $(hdrdir)/ruby/internal/rgengc.h +sockssocket.o: $(hdrdir)/ruby/internal/scan_args.h +sockssocket.o: $(hdrdir)/ruby/internal/special_consts.h +sockssocket.o: $(hdrdir)/ruby/internal/static_assert.h +sockssocket.o: $(hdrdir)/ruby/internal/stdalign.h +sockssocket.o: $(hdrdir)/ruby/internal/stdbool.h +sockssocket.o: $(hdrdir)/ruby/internal/symbol.h +sockssocket.o: $(hdrdir)/ruby/internal/value.h +sockssocket.o: $(hdrdir)/ruby/internal/value_type.h +sockssocket.o: $(hdrdir)/ruby/internal/variable.h +sockssocket.o: $(hdrdir)/ruby/internal/warning_push.h +sockssocket.o: $(hdrdir)/ruby/internal/xmalloc.h sockssocket.o: $(hdrdir)/ruby/io.h sockssocket.o: $(hdrdir)/ruby/missing.h sockssocket.o: $(hdrdir)/ruby/onigmo.h @@ -227,18 +1896,186 @@ sockssocket.o: $(hdrdir)/ruby/subst.h sockssocket.o: $(hdrdir)/ruby/thread.h sockssocket.o: $(hdrdir)/ruby/util.h sockssocket.o: $(top_srcdir)/internal.h +sockssocket.o: $(top_srcdir)/internal/array.h +sockssocket.o: $(top_srcdir)/internal/compilers.h +sockssocket.o: $(top_srcdir)/internal/error.h +sockssocket.o: $(top_srcdir)/internal/gc.h +sockssocket.o: $(top_srcdir)/internal/io.h +sockssocket.o: $(top_srcdir)/internal/serial.h +sockssocket.o: $(top_srcdir)/internal/static_assert.h +sockssocket.o: $(top_srcdir)/internal/string.h +sockssocket.o: $(top_srcdir)/internal/thread.h +sockssocket.o: $(top_srcdir)/internal/vm.h +sockssocket.o: $(top_srcdir)/internal/warnings.h sockssocket.o: constdefs.h sockssocket.o: rubysocket.h sockssocket.o: sockport.h sockssocket.o: sockssocket.c tcpserver.o: $(RUBY_EXTCONF_H) tcpserver.o: $(arch_hdrdir)/ruby/config.h -tcpserver.o: $(hdrdir)/ruby.h tcpserver.o: $(hdrdir)/ruby/assert.h tcpserver.o: $(hdrdir)/ruby/backward.h +tcpserver.o: $(hdrdir)/ruby/backward/2/assume.h +tcpserver.o: $(hdrdir)/ruby/backward/2/attributes.h +tcpserver.o: $(hdrdir)/ruby/backward/2/bool.h +tcpserver.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +tcpserver.o: $(hdrdir)/ruby/backward/2/inttypes.h +tcpserver.o: $(hdrdir)/ruby/backward/2/limits.h +tcpserver.o: $(hdrdir)/ruby/backward/2/long_long.h +tcpserver.o: $(hdrdir)/ruby/backward/2/stdalign.h +tcpserver.o: $(hdrdir)/ruby/backward/2/stdarg.h tcpserver.o: $(hdrdir)/ruby/defines.h tcpserver.o: $(hdrdir)/ruby/encoding.h +tcpserver.o: $(hdrdir)/ruby/fiber/scheduler.h tcpserver.o: $(hdrdir)/ruby/intern.h +tcpserver.o: $(hdrdir)/ruby/internal/anyargs.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/char.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/double.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/int.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/long.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/short.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +tcpserver.o: $(hdrdir)/ruby/internal/assume.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/artificial.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/cold.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/const.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/constexpr.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/deprecated.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/error.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/forceinline.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/format.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/noalias.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/noexcept.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/noinline.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/nonnull.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/noreturn.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/pure.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/restrict.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/warning.h +tcpserver.o: $(hdrdir)/ruby/internal/attr/weakref.h +tcpserver.o: $(hdrdir)/ruby/internal/cast.h +tcpserver.o: $(hdrdir)/ruby/internal/compiler_is.h +tcpserver.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +tcpserver.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +tcpserver.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +tcpserver.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +tcpserver.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +tcpserver.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +tcpserver.o: $(hdrdir)/ruby/internal/compiler_since.h +tcpserver.o: $(hdrdir)/ruby/internal/config.h +tcpserver.o: $(hdrdir)/ruby/internal/constant_p.h +tcpserver.o: $(hdrdir)/ruby/internal/core.h +tcpserver.o: $(hdrdir)/ruby/internal/core/rarray.h +tcpserver.o: $(hdrdir)/ruby/internal/core/rbasic.h +tcpserver.o: $(hdrdir)/ruby/internal/core/rbignum.h +tcpserver.o: $(hdrdir)/ruby/internal/core/rclass.h +tcpserver.o: $(hdrdir)/ruby/internal/core/rdata.h +tcpserver.o: $(hdrdir)/ruby/internal/core/rfile.h +tcpserver.o: $(hdrdir)/ruby/internal/core/rhash.h +tcpserver.o: $(hdrdir)/ruby/internal/core/robject.h +tcpserver.o: $(hdrdir)/ruby/internal/core/rregexp.h +tcpserver.o: $(hdrdir)/ruby/internal/core/rstring.h +tcpserver.o: $(hdrdir)/ruby/internal/core/rstruct.h +tcpserver.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +tcpserver.o: $(hdrdir)/ruby/internal/ctype.h +tcpserver.o: $(hdrdir)/ruby/internal/dllexport.h +tcpserver.o: $(hdrdir)/ruby/internal/dosish.h +tcpserver.o: $(hdrdir)/ruby/internal/encoding/coderange.h +tcpserver.o: $(hdrdir)/ruby/internal/encoding/ctype.h +tcpserver.o: $(hdrdir)/ruby/internal/encoding/encoding.h +tcpserver.o: $(hdrdir)/ruby/internal/encoding/pathname.h +tcpserver.o: $(hdrdir)/ruby/internal/encoding/re.h +tcpserver.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +tcpserver.o: $(hdrdir)/ruby/internal/encoding/string.h +tcpserver.o: $(hdrdir)/ruby/internal/encoding/symbol.h +tcpserver.o: $(hdrdir)/ruby/internal/encoding/transcode.h +tcpserver.o: $(hdrdir)/ruby/internal/error.h +tcpserver.o: $(hdrdir)/ruby/internal/eval.h +tcpserver.o: $(hdrdir)/ruby/internal/event.h +tcpserver.o: $(hdrdir)/ruby/internal/fl_type.h +tcpserver.o: $(hdrdir)/ruby/internal/gc.h +tcpserver.o: $(hdrdir)/ruby/internal/glob.h +tcpserver.o: $(hdrdir)/ruby/internal/globals.h +tcpserver.o: $(hdrdir)/ruby/internal/has/attribute.h +tcpserver.o: $(hdrdir)/ruby/internal/has/builtin.h +tcpserver.o: $(hdrdir)/ruby/internal/has/c_attribute.h +tcpserver.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +tcpserver.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +tcpserver.o: $(hdrdir)/ruby/internal/has/extension.h +tcpserver.o: $(hdrdir)/ruby/internal/has/feature.h +tcpserver.o: $(hdrdir)/ruby/internal/has/warning.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/array.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/bignum.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/class.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/compar.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/complex.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/cont.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/dir.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/enum.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/enumerator.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/error.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/eval.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/file.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/gc.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/hash.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/io.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/load.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/marshal.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/numeric.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/object.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/parse.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/proc.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/process.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/random.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/range.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/rational.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/re.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/ruby.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/select.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/signal.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/sprintf.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/string.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/struct.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/thread.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/time.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/variable.h +tcpserver.o: $(hdrdir)/ruby/internal/intern/vm.h +tcpserver.o: $(hdrdir)/ruby/internal/interpreter.h +tcpserver.o: $(hdrdir)/ruby/internal/iterator.h +tcpserver.o: $(hdrdir)/ruby/internal/memory.h +tcpserver.o: $(hdrdir)/ruby/internal/method.h +tcpserver.o: $(hdrdir)/ruby/internal/module.h +tcpserver.o: $(hdrdir)/ruby/internal/newobj.h +tcpserver.o: $(hdrdir)/ruby/internal/rgengc.h +tcpserver.o: $(hdrdir)/ruby/internal/scan_args.h +tcpserver.o: $(hdrdir)/ruby/internal/special_consts.h +tcpserver.o: $(hdrdir)/ruby/internal/static_assert.h +tcpserver.o: $(hdrdir)/ruby/internal/stdalign.h +tcpserver.o: $(hdrdir)/ruby/internal/stdbool.h +tcpserver.o: $(hdrdir)/ruby/internal/symbol.h +tcpserver.o: $(hdrdir)/ruby/internal/value.h +tcpserver.o: $(hdrdir)/ruby/internal/value_type.h +tcpserver.o: $(hdrdir)/ruby/internal/variable.h +tcpserver.o: $(hdrdir)/ruby/internal/warning_push.h +tcpserver.o: $(hdrdir)/ruby/internal/xmalloc.h tcpserver.o: $(hdrdir)/ruby/io.h tcpserver.o: $(hdrdir)/ruby/missing.h tcpserver.o: $(hdrdir)/ruby/onigmo.h @@ -249,18 +2086,186 @@ tcpserver.o: $(hdrdir)/ruby/subst.h tcpserver.o: $(hdrdir)/ruby/thread.h tcpserver.o: $(hdrdir)/ruby/util.h tcpserver.o: $(top_srcdir)/internal.h +tcpserver.o: $(top_srcdir)/internal/array.h +tcpserver.o: $(top_srcdir)/internal/compilers.h +tcpserver.o: $(top_srcdir)/internal/error.h +tcpserver.o: $(top_srcdir)/internal/gc.h +tcpserver.o: $(top_srcdir)/internal/io.h +tcpserver.o: $(top_srcdir)/internal/serial.h +tcpserver.o: $(top_srcdir)/internal/static_assert.h +tcpserver.o: $(top_srcdir)/internal/string.h +tcpserver.o: $(top_srcdir)/internal/thread.h +tcpserver.o: $(top_srcdir)/internal/vm.h +tcpserver.o: $(top_srcdir)/internal/warnings.h tcpserver.o: constdefs.h tcpserver.o: rubysocket.h tcpserver.o: sockport.h tcpserver.o: tcpserver.c tcpsocket.o: $(RUBY_EXTCONF_H) tcpsocket.o: $(arch_hdrdir)/ruby/config.h -tcpsocket.o: $(hdrdir)/ruby.h tcpsocket.o: $(hdrdir)/ruby/assert.h tcpsocket.o: $(hdrdir)/ruby/backward.h +tcpsocket.o: $(hdrdir)/ruby/backward/2/assume.h +tcpsocket.o: $(hdrdir)/ruby/backward/2/attributes.h +tcpsocket.o: $(hdrdir)/ruby/backward/2/bool.h +tcpsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +tcpsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h +tcpsocket.o: $(hdrdir)/ruby/backward/2/limits.h +tcpsocket.o: $(hdrdir)/ruby/backward/2/long_long.h +tcpsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h +tcpsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h tcpsocket.o: $(hdrdir)/ruby/defines.h tcpsocket.o: $(hdrdir)/ruby/encoding.h +tcpsocket.o: $(hdrdir)/ruby/fiber/scheduler.h tcpsocket.o: $(hdrdir)/ruby/intern.h +tcpsocket.o: $(hdrdir)/ruby/internal/anyargs.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/char.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/double.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/int.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/long.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/short.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +tcpsocket.o: $(hdrdir)/ruby/internal/assume.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/artificial.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/cold.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/const.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/constexpr.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/deprecated.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/error.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/forceinline.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/format.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/noalias.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/noexcept.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/noinline.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/nonnull.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/noreturn.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/pure.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/restrict.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/warning.h +tcpsocket.o: $(hdrdir)/ruby/internal/attr/weakref.h +tcpsocket.o: $(hdrdir)/ruby/internal/cast.h +tcpsocket.o: $(hdrdir)/ruby/internal/compiler_is.h +tcpsocket.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +tcpsocket.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +tcpsocket.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +tcpsocket.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +tcpsocket.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +tcpsocket.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +tcpsocket.o: $(hdrdir)/ruby/internal/compiler_since.h +tcpsocket.o: $(hdrdir)/ruby/internal/config.h +tcpsocket.o: $(hdrdir)/ruby/internal/constant_p.h +tcpsocket.o: $(hdrdir)/ruby/internal/core.h +tcpsocket.o: $(hdrdir)/ruby/internal/core/rarray.h +tcpsocket.o: $(hdrdir)/ruby/internal/core/rbasic.h +tcpsocket.o: $(hdrdir)/ruby/internal/core/rbignum.h +tcpsocket.o: $(hdrdir)/ruby/internal/core/rclass.h +tcpsocket.o: $(hdrdir)/ruby/internal/core/rdata.h +tcpsocket.o: $(hdrdir)/ruby/internal/core/rfile.h +tcpsocket.o: $(hdrdir)/ruby/internal/core/rhash.h +tcpsocket.o: $(hdrdir)/ruby/internal/core/robject.h +tcpsocket.o: $(hdrdir)/ruby/internal/core/rregexp.h +tcpsocket.o: $(hdrdir)/ruby/internal/core/rstring.h +tcpsocket.o: $(hdrdir)/ruby/internal/core/rstruct.h +tcpsocket.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +tcpsocket.o: $(hdrdir)/ruby/internal/ctype.h +tcpsocket.o: $(hdrdir)/ruby/internal/dllexport.h +tcpsocket.o: $(hdrdir)/ruby/internal/dosish.h +tcpsocket.o: $(hdrdir)/ruby/internal/encoding/coderange.h +tcpsocket.o: $(hdrdir)/ruby/internal/encoding/ctype.h +tcpsocket.o: $(hdrdir)/ruby/internal/encoding/encoding.h +tcpsocket.o: $(hdrdir)/ruby/internal/encoding/pathname.h +tcpsocket.o: $(hdrdir)/ruby/internal/encoding/re.h +tcpsocket.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +tcpsocket.o: $(hdrdir)/ruby/internal/encoding/string.h +tcpsocket.o: $(hdrdir)/ruby/internal/encoding/symbol.h +tcpsocket.o: $(hdrdir)/ruby/internal/encoding/transcode.h +tcpsocket.o: $(hdrdir)/ruby/internal/error.h +tcpsocket.o: $(hdrdir)/ruby/internal/eval.h +tcpsocket.o: $(hdrdir)/ruby/internal/event.h +tcpsocket.o: $(hdrdir)/ruby/internal/fl_type.h +tcpsocket.o: $(hdrdir)/ruby/internal/gc.h +tcpsocket.o: $(hdrdir)/ruby/internal/glob.h +tcpsocket.o: $(hdrdir)/ruby/internal/globals.h +tcpsocket.o: $(hdrdir)/ruby/internal/has/attribute.h +tcpsocket.o: $(hdrdir)/ruby/internal/has/builtin.h +tcpsocket.o: $(hdrdir)/ruby/internal/has/c_attribute.h +tcpsocket.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +tcpsocket.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +tcpsocket.o: $(hdrdir)/ruby/internal/has/extension.h +tcpsocket.o: $(hdrdir)/ruby/internal/has/feature.h +tcpsocket.o: $(hdrdir)/ruby/internal/has/warning.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/array.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/bignum.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/class.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/compar.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/complex.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/cont.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/dir.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/enum.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/enumerator.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/error.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/eval.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/file.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/gc.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/hash.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/io.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/load.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/marshal.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/numeric.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/object.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/parse.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/proc.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/process.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/random.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/range.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/rational.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/re.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/ruby.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/select.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/signal.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/sprintf.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/string.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/struct.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/thread.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/time.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/variable.h +tcpsocket.o: $(hdrdir)/ruby/internal/intern/vm.h +tcpsocket.o: $(hdrdir)/ruby/internal/interpreter.h +tcpsocket.o: $(hdrdir)/ruby/internal/iterator.h +tcpsocket.o: $(hdrdir)/ruby/internal/memory.h +tcpsocket.o: $(hdrdir)/ruby/internal/method.h +tcpsocket.o: $(hdrdir)/ruby/internal/module.h +tcpsocket.o: $(hdrdir)/ruby/internal/newobj.h +tcpsocket.o: $(hdrdir)/ruby/internal/rgengc.h +tcpsocket.o: $(hdrdir)/ruby/internal/scan_args.h +tcpsocket.o: $(hdrdir)/ruby/internal/special_consts.h +tcpsocket.o: $(hdrdir)/ruby/internal/static_assert.h +tcpsocket.o: $(hdrdir)/ruby/internal/stdalign.h +tcpsocket.o: $(hdrdir)/ruby/internal/stdbool.h +tcpsocket.o: $(hdrdir)/ruby/internal/symbol.h +tcpsocket.o: $(hdrdir)/ruby/internal/value.h +tcpsocket.o: $(hdrdir)/ruby/internal/value_type.h +tcpsocket.o: $(hdrdir)/ruby/internal/variable.h +tcpsocket.o: $(hdrdir)/ruby/internal/warning_push.h +tcpsocket.o: $(hdrdir)/ruby/internal/xmalloc.h tcpsocket.o: $(hdrdir)/ruby/io.h tcpsocket.o: $(hdrdir)/ruby/missing.h tcpsocket.o: $(hdrdir)/ruby/onigmo.h @@ -271,18 +2276,186 @@ tcpsocket.o: $(hdrdir)/ruby/subst.h tcpsocket.o: $(hdrdir)/ruby/thread.h tcpsocket.o: $(hdrdir)/ruby/util.h tcpsocket.o: $(top_srcdir)/internal.h +tcpsocket.o: $(top_srcdir)/internal/array.h +tcpsocket.o: $(top_srcdir)/internal/compilers.h +tcpsocket.o: $(top_srcdir)/internal/error.h +tcpsocket.o: $(top_srcdir)/internal/gc.h +tcpsocket.o: $(top_srcdir)/internal/io.h +tcpsocket.o: $(top_srcdir)/internal/serial.h +tcpsocket.o: $(top_srcdir)/internal/static_assert.h +tcpsocket.o: $(top_srcdir)/internal/string.h +tcpsocket.o: $(top_srcdir)/internal/thread.h +tcpsocket.o: $(top_srcdir)/internal/vm.h +tcpsocket.o: $(top_srcdir)/internal/warnings.h tcpsocket.o: constdefs.h tcpsocket.o: rubysocket.h tcpsocket.o: sockport.h tcpsocket.o: tcpsocket.c udpsocket.o: $(RUBY_EXTCONF_H) udpsocket.o: $(arch_hdrdir)/ruby/config.h -udpsocket.o: $(hdrdir)/ruby.h udpsocket.o: $(hdrdir)/ruby/assert.h udpsocket.o: $(hdrdir)/ruby/backward.h +udpsocket.o: $(hdrdir)/ruby/backward/2/assume.h +udpsocket.o: $(hdrdir)/ruby/backward/2/attributes.h +udpsocket.o: $(hdrdir)/ruby/backward/2/bool.h +udpsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +udpsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h +udpsocket.o: $(hdrdir)/ruby/backward/2/limits.h +udpsocket.o: $(hdrdir)/ruby/backward/2/long_long.h +udpsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h +udpsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h udpsocket.o: $(hdrdir)/ruby/defines.h udpsocket.o: $(hdrdir)/ruby/encoding.h +udpsocket.o: $(hdrdir)/ruby/fiber/scheduler.h udpsocket.o: $(hdrdir)/ruby/intern.h +udpsocket.o: $(hdrdir)/ruby/internal/anyargs.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/char.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/double.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/int.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/long.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/short.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +udpsocket.o: $(hdrdir)/ruby/internal/assume.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/artificial.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/cold.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/const.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/constexpr.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/deprecated.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/error.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/forceinline.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/format.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/noalias.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/noexcept.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/noinline.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/nonnull.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/noreturn.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/pure.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/restrict.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/warning.h +udpsocket.o: $(hdrdir)/ruby/internal/attr/weakref.h +udpsocket.o: $(hdrdir)/ruby/internal/cast.h +udpsocket.o: $(hdrdir)/ruby/internal/compiler_is.h +udpsocket.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +udpsocket.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +udpsocket.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +udpsocket.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +udpsocket.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +udpsocket.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +udpsocket.o: $(hdrdir)/ruby/internal/compiler_since.h +udpsocket.o: $(hdrdir)/ruby/internal/config.h +udpsocket.o: $(hdrdir)/ruby/internal/constant_p.h +udpsocket.o: $(hdrdir)/ruby/internal/core.h +udpsocket.o: $(hdrdir)/ruby/internal/core/rarray.h +udpsocket.o: $(hdrdir)/ruby/internal/core/rbasic.h +udpsocket.o: $(hdrdir)/ruby/internal/core/rbignum.h +udpsocket.o: $(hdrdir)/ruby/internal/core/rclass.h +udpsocket.o: $(hdrdir)/ruby/internal/core/rdata.h +udpsocket.o: $(hdrdir)/ruby/internal/core/rfile.h +udpsocket.o: $(hdrdir)/ruby/internal/core/rhash.h +udpsocket.o: $(hdrdir)/ruby/internal/core/robject.h +udpsocket.o: $(hdrdir)/ruby/internal/core/rregexp.h +udpsocket.o: $(hdrdir)/ruby/internal/core/rstring.h +udpsocket.o: $(hdrdir)/ruby/internal/core/rstruct.h +udpsocket.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +udpsocket.o: $(hdrdir)/ruby/internal/ctype.h +udpsocket.o: $(hdrdir)/ruby/internal/dllexport.h +udpsocket.o: $(hdrdir)/ruby/internal/dosish.h +udpsocket.o: $(hdrdir)/ruby/internal/encoding/coderange.h +udpsocket.o: $(hdrdir)/ruby/internal/encoding/ctype.h +udpsocket.o: $(hdrdir)/ruby/internal/encoding/encoding.h +udpsocket.o: $(hdrdir)/ruby/internal/encoding/pathname.h +udpsocket.o: $(hdrdir)/ruby/internal/encoding/re.h +udpsocket.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +udpsocket.o: $(hdrdir)/ruby/internal/encoding/string.h +udpsocket.o: $(hdrdir)/ruby/internal/encoding/symbol.h +udpsocket.o: $(hdrdir)/ruby/internal/encoding/transcode.h +udpsocket.o: $(hdrdir)/ruby/internal/error.h +udpsocket.o: $(hdrdir)/ruby/internal/eval.h +udpsocket.o: $(hdrdir)/ruby/internal/event.h +udpsocket.o: $(hdrdir)/ruby/internal/fl_type.h +udpsocket.o: $(hdrdir)/ruby/internal/gc.h +udpsocket.o: $(hdrdir)/ruby/internal/glob.h +udpsocket.o: $(hdrdir)/ruby/internal/globals.h +udpsocket.o: $(hdrdir)/ruby/internal/has/attribute.h +udpsocket.o: $(hdrdir)/ruby/internal/has/builtin.h +udpsocket.o: $(hdrdir)/ruby/internal/has/c_attribute.h +udpsocket.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +udpsocket.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +udpsocket.o: $(hdrdir)/ruby/internal/has/extension.h +udpsocket.o: $(hdrdir)/ruby/internal/has/feature.h +udpsocket.o: $(hdrdir)/ruby/internal/has/warning.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/array.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/bignum.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/class.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/compar.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/complex.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/cont.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/dir.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/enum.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/enumerator.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/error.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/eval.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/file.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/gc.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/hash.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/io.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/load.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/marshal.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/numeric.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/object.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/parse.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/proc.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/process.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/random.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/range.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/rational.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/re.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/ruby.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/select.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/signal.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/sprintf.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/string.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/struct.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/thread.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/time.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/variable.h +udpsocket.o: $(hdrdir)/ruby/internal/intern/vm.h +udpsocket.o: $(hdrdir)/ruby/internal/interpreter.h +udpsocket.o: $(hdrdir)/ruby/internal/iterator.h +udpsocket.o: $(hdrdir)/ruby/internal/memory.h +udpsocket.o: $(hdrdir)/ruby/internal/method.h +udpsocket.o: $(hdrdir)/ruby/internal/module.h +udpsocket.o: $(hdrdir)/ruby/internal/newobj.h +udpsocket.o: $(hdrdir)/ruby/internal/rgengc.h +udpsocket.o: $(hdrdir)/ruby/internal/scan_args.h +udpsocket.o: $(hdrdir)/ruby/internal/special_consts.h +udpsocket.o: $(hdrdir)/ruby/internal/static_assert.h +udpsocket.o: $(hdrdir)/ruby/internal/stdalign.h +udpsocket.o: $(hdrdir)/ruby/internal/stdbool.h +udpsocket.o: $(hdrdir)/ruby/internal/symbol.h +udpsocket.o: $(hdrdir)/ruby/internal/value.h +udpsocket.o: $(hdrdir)/ruby/internal/value_type.h +udpsocket.o: $(hdrdir)/ruby/internal/variable.h +udpsocket.o: $(hdrdir)/ruby/internal/warning_push.h +udpsocket.o: $(hdrdir)/ruby/internal/xmalloc.h udpsocket.o: $(hdrdir)/ruby/io.h udpsocket.o: $(hdrdir)/ruby/missing.h udpsocket.o: $(hdrdir)/ruby/onigmo.h @@ -293,18 +2466,186 @@ udpsocket.o: $(hdrdir)/ruby/subst.h udpsocket.o: $(hdrdir)/ruby/thread.h udpsocket.o: $(hdrdir)/ruby/util.h udpsocket.o: $(top_srcdir)/internal.h +udpsocket.o: $(top_srcdir)/internal/array.h +udpsocket.o: $(top_srcdir)/internal/compilers.h +udpsocket.o: $(top_srcdir)/internal/error.h +udpsocket.o: $(top_srcdir)/internal/gc.h +udpsocket.o: $(top_srcdir)/internal/io.h +udpsocket.o: $(top_srcdir)/internal/serial.h +udpsocket.o: $(top_srcdir)/internal/static_assert.h +udpsocket.o: $(top_srcdir)/internal/string.h +udpsocket.o: $(top_srcdir)/internal/thread.h +udpsocket.o: $(top_srcdir)/internal/vm.h +udpsocket.o: $(top_srcdir)/internal/warnings.h udpsocket.o: constdefs.h udpsocket.o: rubysocket.h udpsocket.o: sockport.h udpsocket.o: udpsocket.c unixserver.o: $(RUBY_EXTCONF_H) unixserver.o: $(arch_hdrdir)/ruby/config.h -unixserver.o: $(hdrdir)/ruby.h unixserver.o: $(hdrdir)/ruby/assert.h unixserver.o: $(hdrdir)/ruby/backward.h +unixserver.o: $(hdrdir)/ruby/backward/2/assume.h +unixserver.o: $(hdrdir)/ruby/backward/2/attributes.h +unixserver.o: $(hdrdir)/ruby/backward/2/bool.h +unixserver.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +unixserver.o: $(hdrdir)/ruby/backward/2/inttypes.h +unixserver.o: $(hdrdir)/ruby/backward/2/limits.h +unixserver.o: $(hdrdir)/ruby/backward/2/long_long.h +unixserver.o: $(hdrdir)/ruby/backward/2/stdalign.h +unixserver.o: $(hdrdir)/ruby/backward/2/stdarg.h unixserver.o: $(hdrdir)/ruby/defines.h unixserver.o: $(hdrdir)/ruby/encoding.h +unixserver.o: $(hdrdir)/ruby/fiber/scheduler.h unixserver.o: $(hdrdir)/ruby/intern.h +unixserver.o: $(hdrdir)/ruby/internal/anyargs.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/char.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/double.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/int.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/long.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/short.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +unixserver.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +unixserver.o: $(hdrdir)/ruby/internal/assume.h +unixserver.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +unixserver.o: $(hdrdir)/ruby/internal/attr/artificial.h +unixserver.o: $(hdrdir)/ruby/internal/attr/cold.h +unixserver.o: $(hdrdir)/ruby/internal/attr/const.h +unixserver.o: $(hdrdir)/ruby/internal/attr/constexpr.h +unixserver.o: $(hdrdir)/ruby/internal/attr/deprecated.h +unixserver.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +unixserver.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +unixserver.o: $(hdrdir)/ruby/internal/attr/error.h +unixserver.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +unixserver.o: $(hdrdir)/ruby/internal/attr/forceinline.h +unixserver.o: $(hdrdir)/ruby/internal/attr/format.h +unixserver.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +unixserver.o: $(hdrdir)/ruby/internal/attr/noalias.h +unixserver.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +unixserver.o: $(hdrdir)/ruby/internal/attr/noexcept.h +unixserver.o: $(hdrdir)/ruby/internal/attr/noinline.h +unixserver.o: $(hdrdir)/ruby/internal/attr/nonnull.h +unixserver.o: $(hdrdir)/ruby/internal/attr/noreturn.h +unixserver.o: $(hdrdir)/ruby/internal/attr/pure.h +unixserver.o: $(hdrdir)/ruby/internal/attr/restrict.h +unixserver.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +unixserver.o: $(hdrdir)/ruby/internal/attr/warning.h +unixserver.o: $(hdrdir)/ruby/internal/attr/weakref.h +unixserver.o: $(hdrdir)/ruby/internal/cast.h +unixserver.o: $(hdrdir)/ruby/internal/compiler_is.h +unixserver.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +unixserver.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +unixserver.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +unixserver.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +unixserver.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +unixserver.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +unixserver.o: $(hdrdir)/ruby/internal/compiler_since.h +unixserver.o: $(hdrdir)/ruby/internal/config.h +unixserver.o: $(hdrdir)/ruby/internal/constant_p.h +unixserver.o: $(hdrdir)/ruby/internal/core.h +unixserver.o: $(hdrdir)/ruby/internal/core/rarray.h +unixserver.o: $(hdrdir)/ruby/internal/core/rbasic.h +unixserver.o: $(hdrdir)/ruby/internal/core/rbignum.h +unixserver.o: $(hdrdir)/ruby/internal/core/rclass.h +unixserver.o: $(hdrdir)/ruby/internal/core/rdata.h +unixserver.o: $(hdrdir)/ruby/internal/core/rfile.h +unixserver.o: $(hdrdir)/ruby/internal/core/rhash.h +unixserver.o: $(hdrdir)/ruby/internal/core/robject.h +unixserver.o: $(hdrdir)/ruby/internal/core/rregexp.h +unixserver.o: $(hdrdir)/ruby/internal/core/rstring.h +unixserver.o: $(hdrdir)/ruby/internal/core/rstruct.h +unixserver.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +unixserver.o: $(hdrdir)/ruby/internal/ctype.h +unixserver.o: $(hdrdir)/ruby/internal/dllexport.h +unixserver.o: $(hdrdir)/ruby/internal/dosish.h +unixserver.o: $(hdrdir)/ruby/internal/encoding/coderange.h +unixserver.o: $(hdrdir)/ruby/internal/encoding/ctype.h +unixserver.o: $(hdrdir)/ruby/internal/encoding/encoding.h +unixserver.o: $(hdrdir)/ruby/internal/encoding/pathname.h +unixserver.o: $(hdrdir)/ruby/internal/encoding/re.h +unixserver.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +unixserver.o: $(hdrdir)/ruby/internal/encoding/string.h +unixserver.o: $(hdrdir)/ruby/internal/encoding/symbol.h +unixserver.o: $(hdrdir)/ruby/internal/encoding/transcode.h +unixserver.o: $(hdrdir)/ruby/internal/error.h +unixserver.o: $(hdrdir)/ruby/internal/eval.h +unixserver.o: $(hdrdir)/ruby/internal/event.h +unixserver.o: $(hdrdir)/ruby/internal/fl_type.h +unixserver.o: $(hdrdir)/ruby/internal/gc.h +unixserver.o: $(hdrdir)/ruby/internal/glob.h +unixserver.o: $(hdrdir)/ruby/internal/globals.h +unixserver.o: $(hdrdir)/ruby/internal/has/attribute.h +unixserver.o: $(hdrdir)/ruby/internal/has/builtin.h +unixserver.o: $(hdrdir)/ruby/internal/has/c_attribute.h +unixserver.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +unixserver.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +unixserver.o: $(hdrdir)/ruby/internal/has/extension.h +unixserver.o: $(hdrdir)/ruby/internal/has/feature.h +unixserver.o: $(hdrdir)/ruby/internal/has/warning.h +unixserver.o: $(hdrdir)/ruby/internal/intern/array.h +unixserver.o: $(hdrdir)/ruby/internal/intern/bignum.h +unixserver.o: $(hdrdir)/ruby/internal/intern/class.h +unixserver.o: $(hdrdir)/ruby/internal/intern/compar.h +unixserver.o: $(hdrdir)/ruby/internal/intern/complex.h +unixserver.o: $(hdrdir)/ruby/internal/intern/cont.h +unixserver.o: $(hdrdir)/ruby/internal/intern/dir.h +unixserver.o: $(hdrdir)/ruby/internal/intern/enum.h +unixserver.o: $(hdrdir)/ruby/internal/intern/enumerator.h +unixserver.o: $(hdrdir)/ruby/internal/intern/error.h +unixserver.o: $(hdrdir)/ruby/internal/intern/eval.h +unixserver.o: $(hdrdir)/ruby/internal/intern/file.h +unixserver.o: $(hdrdir)/ruby/internal/intern/gc.h +unixserver.o: $(hdrdir)/ruby/internal/intern/hash.h +unixserver.o: $(hdrdir)/ruby/internal/intern/io.h +unixserver.o: $(hdrdir)/ruby/internal/intern/load.h +unixserver.o: $(hdrdir)/ruby/internal/intern/marshal.h +unixserver.o: $(hdrdir)/ruby/internal/intern/numeric.h +unixserver.o: $(hdrdir)/ruby/internal/intern/object.h +unixserver.o: $(hdrdir)/ruby/internal/intern/parse.h +unixserver.o: $(hdrdir)/ruby/internal/intern/proc.h +unixserver.o: $(hdrdir)/ruby/internal/intern/process.h +unixserver.o: $(hdrdir)/ruby/internal/intern/random.h +unixserver.o: $(hdrdir)/ruby/internal/intern/range.h +unixserver.o: $(hdrdir)/ruby/internal/intern/rational.h +unixserver.o: $(hdrdir)/ruby/internal/intern/re.h +unixserver.o: $(hdrdir)/ruby/internal/intern/ruby.h +unixserver.o: $(hdrdir)/ruby/internal/intern/select.h +unixserver.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +unixserver.o: $(hdrdir)/ruby/internal/intern/signal.h +unixserver.o: $(hdrdir)/ruby/internal/intern/sprintf.h +unixserver.o: $(hdrdir)/ruby/internal/intern/string.h +unixserver.o: $(hdrdir)/ruby/internal/intern/struct.h +unixserver.o: $(hdrdir)/ruby/internal/intern/thread.h +unixserver.o: $(hdrdir)/ruby/internal/intern/time.h +unixserver.o: $(hdrdir)/ruby/internal/intern/variable.h +unixserver.o: $(hdrdir)/ruby/internal/intern/vm.h +unixserver.o: $(hdrdir)/ruby/internal/interpreter.h +unixserver.o: $(hdrdir)/ruby/internal/iterator.h +unixserver.o: $(hdrdir)/ruby/internal/memory.h +unixserver.o: $(hdrdir)/ruby/internal/method.h +unixserver.o: $(hdrdir)/ruby/internal/module.h +unixserver.o: $(hdrdir)/ruby/internal/newobj.h +unixserver.o: $(hdrdir)/ruby/internal/rgengc.h +unixserver.o: $(hdrdir)/ruby/internal/scan_args.h +unixserver.o: $(hdrdir)/ruby/internal/special_consts.h +unixserver.o: $(hdrdir)/ruby/internal/static_assert.h +unixserver.o: $(hdrdir)/ruby/internal/stdalign.h +unixserver.o: $(hdrdir)/ruby/internal/stdbool.h +unixserver.o: $(hdrdir)/ruby/internal/symbol.h +unixserver.o: $(hdrdir)/ruby/internal/value.h +unixserver.o: $(hdrdir)/ruby/internal/value_type.h +unixserver.o: $(hdrdir)/ruby/internal/variable.h +unixserver.o: $(hdrdir)/ruby/internal/warning_push.h +unixserver.o: $(hdrdir)/ruby/internal/xmalloc.h unixserver.o: $(hdrdir)/ruby/io.h unixserver.o: $(hdrdir)/ruby/missing.h unixserver.o: $(hdrdir)/ruby/onigmo.h @@ -315,18 +2656,186 @@ unixserver.o: $(hdrdir)/ruby/subst.h unixserver.o: $(hdrdir)/ruby/thread.h unixserver.o: $(hdrdir)/ruby/util.h unixserver.o: $(top_srcdir)/internal.h +unixserver.o: $(top_srcdir)/internal/array.h +unixserver.o: $(top_srcdir)/internal/compilers.h +unixserver.o: $(top_srcdir)/internal/error.h +unixserver.o: $(top_srcdir)/internal/gc.h +unixserver.o: $(top_srcdir)/internal/io.h +unixserver.o: $(top_srcdir)/internal/serial.h +unixserver.o: $(top_srcdir)/internal/static_assert.h +unixserver.o: $(top_srcdir)/internal/string.h +unixserver.o: $(top_srcdir)/internal/thread.h +unixserver.o: $(top_srcdir)/internal/vm.h +unixserver.o: $(top_srcdir)/internal/warnings.h unixserver.o: constdefs.h unixserver.o: rubysocket.h unixserver.o: sockport.h unixserver.o: unixserver.c unixsocket.o: $(RUBY_EXTCONF_H) unixsocket.o: $(arch_hdrdir)/ruby/config.h -unixsocket.o: $(hdrdir)/ruby.h unixsocket.o: $(hdrdir)/ruby/assert.h unixsocket.o: $(hdrdir)/ruby/backward.h +unixsocket.o: $(hdrdir)/ruby/backward/2/assume.h +unixsocket.o: $(hdrdir)/ruby/backward/2/attributes.h +unixsocket.o: $(hdrdir)/ruby/backward/2/bool.h +unixsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +unixsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h +unixsocket.o: $(hdrdir)/ruby/backward/2/limits.h +unixsocket.o: $(hdrdir)/ruby/backward/2/long_long.h +unixsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h +unixsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h unixsocket.o: $(hdrdir)/ruby/defines.h unixsocket.o: $(hdrdir)/ruby/encoding.h +unixsocket.o: $(hdrdir)/ruby/fiber/scheduler.h unixsocket.o: $(hdrdir)/ruby/intern.h +unixsocket.o: $(hdrdir)/ruby/internal/anyargs.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/char.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/double.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/int.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/long.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/short.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +unixsocket.o: $(hdrdir)/ruby/internal/assume.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/artificial.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/cold.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/const.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/constexpr.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/deprecated.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/error.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/forceinline.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/format.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/noalias.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/noexcept.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/noinline.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/nonnull.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/noreturn.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/pure.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/restrict.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/warning.h +unixsocket.o: $(hdrdir)/ruby/internal/attr/weakref.h +unixsocket.o: $(hdrdir)/ruby/internal/cast.h +unixsocket.o: $(hdrdir)/ruby/internal/compiler_is.h +unixsocket.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +unixsocket.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +unixsocket.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +unixsocket.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +unixsocket.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +unixsocket.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +unixsocket.o: $(hdrdir)/ruby/internal/compiler_since.h +unixsocket.o: $(hdrdir)/ruby/internal/config.h +unixsocket.o: $(hdrdir)/ruby/internal/constant_p.h +unixsocket.o: $(hdrdir)/ruby/internal/core.h +unixsocket.o: $(hdrdir)/ruby/internal/core/rarray.h +unixsocket.o: $(hdrdir)/ruby/internal/core/rbasic.h +unixsocket.o: $(hdrdir)/ruby/internal/core/rbignum.h +unixsocket.o: $(hdrdir)/ruby/internal/core/rclass.h +unixsocket.o: $(hdrdir)/ruby/internal/core/rdata.h +unixsocket.o: $(hdrdir)/ruby/internal/core/rfile.h +unixsocket.o: $(hdrdir)/ruby/internal/core/rhash.h +unixsocket.o: $(hdrdir)/ruby/internal/core/robject.h +unixsocket.o: $(hdrdir)/ruby/internal/core/rregexp.h +unixsocket.o: $(hdrdir)/ruby/internal/core/rstring.h +unixsocket.o: $(hdrdir)/ruby/internal/core/rstruct.h +unixsocket.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +unixsocket.o: $(hdrdir)/ruby/internal/ctype.h +unixsocket.o: $(hdrdir)/ruby/internal/dllexport.h +unixsocket.o: $(hdrdir)/ruby/internal/dosish.h +unixsocket.o: $(hdrdir)/ruby/internal/encoding/coderange.h +unixsocket.o: $(hdrdir)/ruby/internal/encoding/ctype.h +unixsocket.o: $(hdrdir)/ruby/internal/encoding/encoding.h +unixsocket.o: $(hdrdir)/ruby/internal/encoding/pathname.h +unixsocket.o: $(hdrdir)/ruby/internal/encoding/re.h +unixsocket.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +unixsocket.o: $(hdrdir)/ruby/internal/encoding/string.h +unixsocket.o: $(hdrdir)/ruby/internal/encoding/symbol.h +unixsocket.o: $(hdrdir)/ruby/internal/encoding/transcode.h +unixsocket.o: $(hdrdir)/ruby/internal/error.h +unixsocket.o: $(hdrdir)/ruby/internal/eval.h +unixsocket.o: $(hdrdir)/ruby/internal/event.h +unixsocket.o: $(hdrdir)/ruby/internal/fl_type.h +unixsocket.o: $(hdrdir)/ruby/internal/gc.h +unixsocket.o: $(hdrdir)/ruby/internal/glob.h +unixsocket.o: $(hdrdir)/ruby/internal/globals.h +unixsocket.o: $(hdrdir)/ruby/internal/has/attribute.h +unixsocket.o: $(hdrdir)/ruby/internal/has/builtin.h +unixsocket.o: $(hdrdir)/ruby/internal/has/c_attribute.h +unixsocket.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +unixsocket.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +unixsocket.o: $(hdrdir)/ruby/internal/has/extension.h +unixsocket.o: $(hdrdir)/ruby/internal/has/feature.h +unixsocket.o: $(hdrdir)/ruby/internal/has/warning.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/array.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/bignum.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/class.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/compar.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/complex.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/cont.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/dir.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/enum.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/enumerator.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/error.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/eval.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/file.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/gc.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/hash.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/io.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/load.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/marshal.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/numeric.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/object.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/parse.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/proc.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/process.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/random.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/range.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/rational.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/re.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/ruby.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/select.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/signal.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/sprintf.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/string.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/struct.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/thread.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/time.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/variable.h +unixsocket.o: $(hdrdir)/ruby/internal/intern/vm.h +unixsocket.o: $(hdrdir)/ruby/internal/interpreter.h +unixsocket.o: $(hdrdir)/ruby/internal/iterator.h +unixsocket.o: $(hdrdir)/ruby/internal/memory.h +unixsocket.o: $(hdrdir)/ruby/internal/method.h +unixsocket.o: $(hdrdir)/ruby/internal/module.h +unixsocket.o: $(hdrdir)/ruby/internal/newobj.h +unixsocket.o: $(hdrdir)/ruby/internal/rgengc.h +unixsocket.o: $(hdrdir)/ruby/internal/scan_args.h +unixsocket.o: $(hdrdir)/ruby/internal/special_consts.h +unixsocket.o: $(hdrdir)/ruby/internal/static_assert.h +unixsocket.o: $(hdrdir)/ruby/internal/stdalign.h +unixsocket.o: $(hdrdir)/ruby/internal/stdbool.h +unixsocket.o: $(hdrdir)/ruby/internal/symbol.h +unixsocket.o: $(hdrdir)/ruby/internal/value.h +unixsocket.o: $(hdrdir)/ruby/internal/value_type.h +unixsocket.o: $(hdrdir)/ruby/internal/variable.h +unixsocket.o: $(hdrdir)/ruby/internal/warning_push.h +unixsocket.o: $(hdrdir)/ruby/internal/xmalloc.h unixsocket.o: $(hdrdir)/ruby/io.h unixsocket.o: $(hdrdir)/ruby/missing.h unixsocket.o: $(hdrdir)/ruby/onigmo.h @@ -337,6 +2846,17 @@ unixsocket.o: $(hdrdir)/ruby/subst.h unixsocket.o: $(hdrdir)/ruby/thread.h unixsocket.o: $(hdrdir)/ruby/util.h unixsocket.o: $(top_srcdir)/internal.h +unixsocket.o: $(top_srcdir)/internal/array.h +unixsocket.o: $(top_srcdir)/internal/compilers.h +unixsocket.o: $(top_srcdir)/internal/error.h +unixsocket.o: $(top_srcdir)/internal/gc.h +unixsocket.o: $(top_srcdir)/internal/io.h +unixsocket.o: $(top_srcdir)/internal/serial.h +unixsocket.o: $(top_srcdir)/internal/static_assert.h +unixsocket.o: $(top_srcdir)/internal/string.h +unixsocket.o: $(top_srcdir)/internal/thread.h +unixsocket.o: $(top_srcdir)/internal/vm.h +unixsocket.o: $(top_srcdir)/internal/warnings.h unixsocket.o: constdefs.h unixsocket.o: rubysocket.h unixsocket.o: sockport.h diff --git a/ruby/ext/socket/extconf.rb b/ruby/ext/socket/extconf.rb index 1a67e0013..b70a86241 100644 --- a/ruby/ext/socket/extconf.rb +++ b/ruby/ext/socket/extconf.rb @@ -444,7 +444,6 @@ def test_recvmsg_with_msg_peek_creates_fds(headers) test_func = "socket(0,0,0)" have_library("nsl", 't_open("", 0, (struct t_info *)NULL)', headers) # SunOS have_library("socket", "socket(0,0,0)", headers) # SunOS - have_library("anl", 'getaddrinfo_a', headers) end if have_func(test_func, headers) @@ -485,6 +484,9 @@ def test_recvmsg_with_msg_peek_creates_fds(headers) have_func("getpeerucred(0, (ucred_t **)NULL)", headers) # SunOS have_func_decl = proc do |name, headers| + # check if there is a declaration of by trying to declare + # both "int (void)" and "void (void)" + # (at least one attempt should fail if there is a declaration) if !checking_for("declaration of #{name}()") {!%w[int void].all? {|ret| try_compile(<fd = fd; @@ -166,7 +148,7 @@ recvfrom_locktmp(VALUE v) } VALUE -rsock_s_recvfrom(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from) +rsock_s_recvfrom(VALUE socket, int argc, VALUE *argv, enum sock_recv_type from) { rb_io_t *fptr; VALUE str; @@ -177,27 +159,38 @@ rsock_s_recvfrom(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from) rb_scan_args(argc, argv, "12", &len, &flg, &str); - if (flg == Qnil) arg.flags = 0; - else arg.flags = NUM2INT(flg); + if (flg == Qnil) + arg.flags = 0; + else + arg.flags = NUM2INT(flg); + buflen = NUM2INT(len); str = rsock_strbuf(str, buflen); - GetOpenFile(sock, fptr); + RB_IO_POINTER(socket, fptr); + if (rb_io_read_pending(fptr)) { - rb_raise(rb_eIOError, "recv for buffered IO"); + rb_raise(rb_eIOError, "recv for buffered IO"); } + arg.fd = fptr->fd; arg.alen = (socklen_t)sizeof(arg.buf); arg.str = str; arg.length = buflen; - while (rb_io_check_closed(fptr), - rsock_maybe_wait_fd(arg.fd), - (slen = (long)rb_str_locktmp_ensure(str, recvfrom_locktmp, - (VALUE)&arg)) < 0) { - if (!rb_io_wait_readable(fptr->fd)) { + while (true) { + rb_io_check_closed(fptr); + +#ifdef RSOCK_WAIT_BEFORE_BLOCKING + rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_READABLE), Qnil); +#endif + + slen = (long)rb_str_locktmp_ensure(str, recvfrom_locktmp, (VALUE)&arg); + + if (slen >= 0) break; + + if (!rb_io_maybe_wait_readable(errno, socket, Qnil)) rb_sys_fail("recvfrom(2)"); - } } /* Resize the string to the amount of data received */ @@ -221,7 +214,7 @@ rsock_s_recvfrom(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from) return rb_assoc_new(str, rsock_unixaddr(&arg.buf.un, arg.alen)); #endif case RECV_SOCKET: - return rb_assoc_new(str, rsock_io_socket_addrinfo(sock, &arg.buf.addr, arg.alen)); + return rb_assoc_new(str, rsock_io_socket_addrinfo(socket, &arg.buf.addr, arg.alen)); default: rb_bug("rsock_s_recvfrom called with bad value"); } @@ -408,84 +401,30 @@ rsock_write_nonblock(VALUE sock, VALUE str, VALUE ex) } #endif /* MSG_DONTWAIT_RELIABLE */ -/* returns true if SOCK_CLOEXEC is supported */ -int rsock_detect_cloexec(int fd) +static int +rsock_socket0(int domain, int type, int proto) { #ifdef SOCK_CLOEXEC - int flags = fcntl(fd, F_GETFD); - - if (flags == -1) - rb_bug("rsock_detect_cloexec: fcntl(%d, F_GETFD) failed: %s", fd, strerror(errno)); + type |= SOCK_CLOEXEC; +#endif - if (flags & FD_CLOEXEC) - return 1; +#ifdef SOCK_NONBLOCK + type |= SOCK_NONBLOCK; #endif - return 0; -} -#ifdef SOCK_CLOEXEC -static int -rsock_socket0(int domain, int type, int proto) -{ - int ret; - static int cloexec_state = -1; /* <0: unknown, 0: ignored, >0: working */ - - if (cloexec_state > 0) { /* common path, if SOCK_CLOEXEC is defined */ - ret = socket(domain, type|SOCK_CLOEXEC|RSOCK_NONBLOCK_DEFAULT, proto); - if (ret >= 0) { - if (ret <= 2) - goto fix_cloexec; - goto update_max_fd; - } - } - else if (cloexec_state < 0) { /* usually runs once only for detection */ - ret = socket(domain, type|SOCK_CLOEXEC|RSOCK_NONBLOCK_DEFAULT, proto); - if (ret >= 0) { - cloexec_state = rsock_detect_cloexec(ret); - if (cloexec_state == 0 || ret <= 2) - goto fix_cloexec; - goto update_max_fd; - } - else if (ret == -1 && errno == EINVAL) { - /* SOCK_CLOEXEC is available since Linux 2.6.27. Linux 2.6.18 fails with EINVAL */ - ret = socket(domain, type, proto); - if (ret != -1) { - cloexec_state = 0; - /* fall through to fix_cloexec */ - } - } - } - else { /* cloexec_state == 0 */ - ret = socket(domain, type, proto); - } - if (ret == -1) + int result = socket(domain, type, proto); + + if (result == -1) return -1; -fix_cloexec: - rb_maygvl_fd_fix_cloexec(ret); - if (RSOCK_NONBLOCK_DEFAULT) { - rsock_make_fd_nonblock(ret); - } -update_max_fd: - rb_update_max_fd(ret); - return ret; -} -#else /* !SOCK_CLOEXEC */ -static int -rsock_socket0(int domain, int type, int proto) -{ - int ret = socket(domain, type, proto); + rb_fd_fix_cloexec(result); - if (ret == -1) - return -1; - rb_fd_fix_cloexec(ret); - if (RSOCK_NONBLOCK_DEFAULT) { - rsock_make_fd_nonblock(ret); - } +#ifndef SOCK_NONBLOCK + rsock_make_fd_nonblock(result); +#endif - return ret; + return result; } -#endif /* !SOCK_CLOEXEC */ int rsock_socket(int domain, int type, int proto) @@ -505,7 +444,7 @@ rsock_socket(int domain, int type, int proto) /* emulate blocking connect behavior on EINTR or non-blocking socket */ static int -wait_connectable(int fd) +wait_connectable(int fd, struct timeval *timeout) { int sockerr, revents; socklen_t sockerrlen; @@ -542,7 +481,7 @@ wait_connectable(int fd) * * Note: rb_wait_for_single_fd already retries on EINTR/ERESTART */ - revents = rb_wait_for_single_fd(fd, RB_WAITFD_IN|RB_WAITFD_OUT, NULL); + revents = rb_wait_for_single_fd(fd, RB_WAITFD_IN|RB_WAITFD_OUT, timeout); if (revents < 0) return -1; @@ -557,6 +496,12 @@ wait_connectable(int fd) * be defensive in case some platforms set SO_ERROR on the original, * interrupted connect() */ + + /* when the connection timed out, no errno is set and revents is 0. */ + if (timeout && revents == 0) { + errno = ETIMEDOUT; + return -1; + } case EINTR: #ifdef ERESTART case ERESTART: @@ -604,7 +549,7 @@ socks_connect_blocking(void *data) #endif int -rsock_connect(int fd, const struct sockaddr *sockaddr, int len, int socks) +rsock_connect(int fd, const struct sockaddr *sockaddr, int len, int socks, struct timeval *timeout) { int status; rb_blocking_function_t *func = connect_blocking; @@ -628,7 +573,7 @@ rsock_connect(int fd, const struct sockaddr *sockaddr, int len, int socks) #ifdef EINPROGRESS case EINPROGRESS: #endif - return wait_connectable(fd); + return wait_connectable(fd, timeout); } } return status; @@ -637,6 +582,10 @@ rsock_connect(int fd, const struct sockaddr *sockaddr, int len, int socks) void rsock_make_fd_nonblock(int fd) { +#ifdef _WIN32 + return; +#endif + int flags; #ifdef F_GETFL flags = fcntl(fd, F_GETFL); @@ -653,56 +602,34 @@ rsock_make_fd_nonblock(int fd) } static int -cloexec_accept(int socket, struct sockaddr *address, socklen_t *address_len, - int nonblock) +cloexec_accept(int socket, struct sockaddr *address, socklen_t *address_len) { - int ret; socklen_t len0 = 0; -#ifdef HAVE_ACCEPT4 - static int try_accept4 = 1; -#endif - if (RSOCK_NONBLOCK_DEFAULT) { - nonblock = 1; - } if (address_len) len0 = *address_len; + #ifdef HAVE_ACCEPT4 - if (try_accept4) { - int flags = 0; -#ifdef SOCK_CLOEXEC - flags |= SOCK_CLOEXEC; -#endif + int flags = SOCK_CLOEXEC; + #ifdef SOCK_NONBLOCK - if (nonblock) { - flags |= SOCK_NONBLOCK; - } + flags |= SOCK_NONBLOCK; #endif - ret = accept4(socket, address, address_len, flags); - /* accept4 is available since Linux 2.6.28, glibc 2.10. */ - if (ret != -1) { - if (ret <= 2) - rb_maygvl_fd_fix_cloexec(ret); + + int result = accept4(socket, address, address_len, flags); + if (result == -1) return -1; + #ifndef SOCK_NONBLOCK - if (nonblock) { - rsock_make_fd_nonblock(ret); - } + rsock_make_fd_nonblock(result); #endif - if (address_len && len0 < *address_len) *address_len = len0; - return ret; - } - if (errno != ENOSYS) { - return -1; - } - try_accept4 = 0; - } +#else + int result = accept(socket, address, address_len); + if (result == -1) return -1; + + rb_maygvl_fd_fix_cloexec(result); + rsock_make_fd_nonblock(result); #endif - ret = accept(socket, address, address_len); - if (ret == -1) return -1; + if (address_len && len0 < *address_len) *address_len = len0; - rb_maygvl_fd_fix_cloexec(ret); - if (nonblock) { - rsock_make_fd_nonblock(ret); - } - return ret; + return result; } VALUE @@ -712,7 +639,7 @@ rsock_s_accept_nonblock(VALUE klass, VALUE ex, rb_io_t *fptr, int fd2; rb_io_set_nonblock(fptr); - fd2 = cloexec_accept(fptr->fd, (struct sockaddr*)sockaddr, len, 1); + fd2 = cloexec_accept(fptr->fd, (struct sockaddr*)sockaddr, len); if (fd2 < 0) { int e = errno; switch (e) { @@ -744,42 +671,53 @@ static VALUE accept_blocking(void *data) { struct accept_arg *arg = data; - return (VALUE)cloexec_accept(arg->fd, arg->sockaddr, arg->len, 0); + return (VALUE)cloexec_accept(arg->fd, arg->sockaddr, arg->len); } VALUE -rsock_s_accept(VALUE klass, int fd, struct sockaddr *sockaddr, socklen_t *len) +rsock_s_accept(VALUE klass, VALUE io, struct sockaddr *sockaddr, socklen_t *len) { - int fd2; - int retry = 0; - struct accept_arg arg; + rb_io_t *fptr = NULL; + RB_IO_POINTER(io, fptr); + + struct accept_arg accept_arg = { + .fd = fptr->fd, + .sockaddr = sockaddr, + .len = len + }; + + int retry = 0, peer; - arg.fd = fd; - arg.sockaddr = sockaddr; - arg.len = len; retry: - rsock_maybe_wait_fd(fd); - fd2 = (int)BLOCKING_REGION_FD(accept_blocking, &arg); - if (fd2 < 0) { - int e = errno; - switch (e) { - case EMFILE: - case ENFILE: - case ENOMEM: - if (retry) break; - rb_gc(); - retry = 1; - goto retry; - default: - if (!rb_io_wait_readable(fd)) break; - retry = 0; - goto retry; - } - rb_syserr_fail(e, "accept(2)"); +#ifdef RSOCK_WAIT_BEFORE_BLOCKING + rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_READABLE), Qnil); +#endif + peer = (int)BLOCKING_REGION_FD(accept_blocking, &accept_arg); + if (peer < 0) { + int error = errno; + + switch (error) { + case EMFILE: + case ENFILE: + case ENOMEM: + if (retry) break; + rb_gc(); + retry = 1; + goto retry; + default: + if (!rb_io_maybe_wait_readable(error, io, Qnil)) break; + retry = 0; + goto retry; + } + + rb_syserr_fail(error, "accept(2)"); } - rb_update_max_fd(fd2); - if (!klass) return INT2NUM(fd2); - return rsock_init_sock(rb_obj_alloc(klass), fd2); + + rb_update_max_fd(peer); + + if (!klass) return INT2NUM(peer); + + return rsock_init_sock(rb_obj_alloc(klass), peer); } int diff --git a/ruby/ext/socket/ipsocket.c b/ruby/ext/socket/ipsocket.c index a2cb6e0e1..b5cdc6008 100644 --- a/ruby/ext/socket/ipsocket.c +++ b/ruby/ext/socket/ipsocket.c @@ -19,6 +19,8 @@ struct inetsock_arg } remote, local; int type; int fd; + VALUE resolv_timeout; + VALUE connect_timeout; }; static VALUE @@ -49,10 +51,20 @@ init_inetsock_internal(VALUE v) int fd, status = 0, local = 0; int family = AF_UNSPEC; const char *syscall = 0; + VALUE connect_timeout = arg->connect_timeout; + struct timeval tv_storage; + struct timeval *tv = NULL; + + if (!NIL_P(connect_timeout)) { + tv_storage = rb_time_interval(connect_timeout); + tv = &tv_storage; + } arg->remote.res = rsock_addrinfo(arg->remote.host, arg->remote.serv, family, SOCK_STREAM, (type == INET_SERVER) ? AI_PASSIVE : 0); + + /* * Maybe also accept a local address */ @@ -113,7 +125,7 @@ init_inetsock_internal(VALUE v) if (status >= 0) { status = rsock_connect(fd, res->ai_addr, res->ai_addrlen, - (type == INET_SOCKS)); + (type == INET_SOCKS), tv); syscall = "connect(2)"; } } @@ -157,7 +169,8 @@ init_inetsock_internal(VALUE v) VALUE rsock_init_inetsock(VALUE sock, VALUE remote_host, VALUE remote_serv, - VALUE local_host, VALUE local_serv, int type) + VALUE local_host, VALUE local_serv, int type, + VALUE resolv_timeout, VALUE connect_timeout) { struct inetsock_arg arg; arg.sock = sock; @@ -169,6 +182,8 @@ rsock_init_inetsock(VALUE sock, VALUE remote_host, VALUE remote_serv, arg.local.res = 0; arg.type = type; arg.fd = -1; + arg.resolv_timeout = resolv_timeout; + arg.connect_timeout = connect_timeout; return rb_ensure(init_inetsock_internal, (VALUE)&arg, inetsock_cleanup, (VALUE)&arg); } @@ -243,7 +258,7 @@ ip_inspect(VALUE sock) * If +reverse_lookup+ is +true+ or +:hostname+, * hostname is obtained from numeric_address using reverse lookup. * Or if it is +false+, or +:numeric+, - * hostname is same as numeric_address. + * hostname is the same as numeric_address. * Or if it is +nil+ or omitted, obeys to +ipsocket.do_not_reverse_lookup+. * See +Socket.getaddrinfo+ also. * @@ -284,7 +299,7 @@ ip_addr(int argc, VALUE *argv, VALUE sock) * If +reverse_lookup+ is +true+ or +:hostname+, * hostname is obtained from numeric_address using reverse lookup. * Or if it is +false+, or +:numeric+, - * hostname is same as numeric_address. + * hostname is the same as numeric_address. * Or if it is +nil+ or omitted, obeys to +ipsocket.do_not_reverse_lookup+. * See +Socket.getaddrinfo+ also. * @@ -326,7 +341,7 @@ ip_peeraddr(int argc, VALUE *argv, VALUE sock) * * _flags_ should be a bitwise OR of Socket::MSG_* constants. * - * ipaddr is same as IPSocket#{peeraddr,addr}. + * ipaddr is the same as IPSocket#{peeraddr,addr}. * * u1 = UDPSocket.new * u1.bind("127.0.0.1", 4913) diff --git a/ruby/ext/socket/mkconstants.rb b/ruby/ext/socket/mkconstants.rb index 620a5f60f..577958a35 100644 --- a/ruby/ext/socket/mkconstants.rb +++ b/ruby/ext/socket/mkconstants.rb @@ -358,6 +358,8 @@ def def_intern(func_name, pat, prefix_optional=nil) SOCK_RDM nil A reliable datagram socket provides reliable delivery of messages SOCK_SEQPACKET nil A sequential packet socket provides sequenced, reliable two-way connection for datagrams SOCK_PACKET nil Device-level packet access +SOCK_NONBLOCK nil Set the O_NONBLOCK file status flag on the open file description (see open(2)) referred to by the new file descriptor. +SOCK_CLOEXEC nil Set the close-on-exec (FD_CLOEXEC) flag on the new file descriptor. AF_UNSPEC nil Unspecified protocol, any supported address family PF_UNSPEC nil Unspecified protocol, any supported address family @@ -397,6 +399,8 @@ def def_intern(func_name, pat, prefix_optional=nil) PF_SNA nil IBM SNA protocol AF_DEC nil DECnet protocol PF_DEC nil DECnet protocol +AF_DECnet nil DECnet protocol +PF_DECnet nil DECnet protocol AF_DLI nil DEC Direct Data Link Interface protocol PF_DLI nil DEC Direct Data Link Interface protocol AF_LAT nil Local Area Transport protocol @@ -438,7 +442,34 @@ def def_intern(func_name, pat, prefix_optional=nil) PF_XTP nil eXpress Transfer Protocol PF_RTIP PF_PIP -PF_KEY +AF_KEY nil Key management protocol, originally developed for usage with IPsec +PF_KEY nil Key management protocol, originally developed for usage with IPsec +AF_NETLINK nil Kernel user interface device +PF_NETLINK nil Kernel user interface device +AF_RDS nil Reliable Datagram Sockets (RDS) protocol +PF_RDS nil Reliable Datagram Sockets (RDS) protocol +AF_PPPOX nil Generic PPP transport layer, for setting up L2 tunnels (L2TP and PPPoE) +PF_PPPOX nil Generic PPP transport layer, for setting up L2 tunnels (L2TP and PPPoE) +AF_LLC nil Logical link control (IEEE 802.2 LLC) protocol +PF_LLC nil Logical link control (IEEE 802.2 LLC) protocol +AF_IB nil InfiniBand native addressing +PF_IB nil InfiniBand native addressing +AF_MPLS nil Multiprotocol Label Switching +PF_MPLS nil Multiprotocol Label Switching +AF_CAN nil Controller Area Network automotive bus protocol +PF_CAN nil Controller Area Network automotive bus protocol +AF_TIPC nil TIPC, "cluster domain sockets" protocol +PF_TIPC nil TIPC, "cluster domain sockets" protocol +AF_BLUETOOTH nil Bluetooth low-level socket protocol +PF_BLUETOOTH nil Bluetooth low-level socket protocol +AF_ALG nil Interface to kernel crypto API +PF_ALG nil Interface to kernel crypto API +AF_VSOCK nil VSOCK (originally "VMWare VSockets") protocol for hypervisor-guest communication +PF_VSOCK nil VSOCK (originally "VMWare VSockets") protocol for hypervisor-guest communication +AF_KCM nil KCM (kernel connection multiplexor) interface +PF_KCM nil KCM (kernel connection multiplexor) interface +AF_XDP nil XDP (express data path) interface +PF_XDP nil XDP (express data path) interface MSG_OOB nil Process out-of-band data MSG_PEEK nil Peek at incoming message diff --git a/ruby/ext/socket/option.c b/ruby/ext/socket/option.c index 5ad44cdcd..4b33b3f1d 100644 --- a/ruby/ext/socket/option.c +++ b/ruby/ext/socket/option.c @@ -106,9 +106,9 @@ sockopt_initialize(VALUE self, VALUE vfamily, VALUE vlevel, VALUE voptname, VALU VALUE rsock_sockopt_new(int family, int level, int optname, VALUE data) { - NEWOBJ_OF(obj, struct RObject, rb_cSockOpt, T_OBJECT); + VALUE obj = rb_obj_alloc(rb_cSockOpt); StringValue(data); - sockopt_initialize((VALUE)obj, INT2NUM(family), INT2NUM(level), INT2NUM(optname), data); + sockopt_initialize(obj, INT2NUM(family), INT2NUM(level), INT2NUM(optname), data); return (VALUE)obj; } diff --git a/ruby/ext/socket/raddrinfo.c b/ruby/ext/socket/raddrinfo.c index 9ec2fdc32..d94e96a2b 100644 --- a/ruby/ext/socket/raddrinfo.c +++ b/ruby/ext/socket/raddrinfo.c @@ -199,27 +199,6 @@ nogvl_getaddrinfo(void *arg) } #endif -#ifdef HAVE_GETADDRINFO_A -struct gai_suspend_arg -{ - struct gaicb *req; - struct timespec *timeout; -}; - -static void * -nogvl_gai_suspend(void *arg) -{ - int ret; - struct gai_suspend_arg *ptr = arg; - struct gaicb const *wait_reqs[1]; - - wait_reqs[0] = ptr->req; - ret = gai_suspend(wait_reqs, 1, ptr->timeout); - - return (void *)(VALUE)ret; -} -#endif - static int numeric_getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, @@ -305,93 +284,6 @@ numeric_getaddrinfo(const char *node, const char *service, return EAI_FAIL; } -int -rb_getaddrinfo(const char *node, const char *service, - const struct addrinfo *hints, - struct rb_addrinfo **res) -{ - struct addrinfo *ai; - int ret; - int allocated_by_malloc = 0; - - ret = numeric_getaddrinfo(node, service, hints, &ai); - if (ret == 0) - allocated_by_malloc = 1; - else { -#ifdef GETADDRINFO_EMU - ret = getaddrinfo(node, service, hints, &ai); -#else - struct getaddrinfo_arg arg; - MEMZERO(&arg, struct getaddrinfo_arg, 1); - arg.node = node; - arg.service = service; - arg.hints = hints; - arg.res = &ai; - ret = (int)(VALUE)rb_thread_call_without_gvl(nogvl_getaddrinfo, &arg, RUBY_UBF_IO, 0); -#endif - } - - if (ret == 0) { - *res = (struct rb_addrinfo *)xmalloc(sizeof(struct rb_addrinfo)); - (*res)->allocated_by_malloc = allocated_by_malloc; - (*res)->ai = ai; - } - return ret; -} - -#ifdef HAVE_GETADDRINFO_A -int -rb_getaddrinfo_a(const char *node, const char *service, - const struct addrinfo *hints, - struct rb_addrinfo **res, struct timespec *timeout) -{ - struct addrinfo *ai; - int ret; - int allocated_by_malloc = 0; - - ret = numeric_getaddrinfo(node, service, hints, &ai); - if (ret == 0) - allocated_by_malloc = 1; - else { - struct gai_suspend_arg arg; - struct gaicb *reqs[1]; - struct gaicb req; - - req.ar_name = node; - req.ar_service = service; - req.ar_request = hints; - - reqs[0] = &req; - ret = getaddrinfo_a(GAI_NOWAIT, reqs, 1, NULL); - if (ret) return ret; - - arg.req = &req; - arg.timeout = timeout; - - ret = (int)(VALUE)rb_thread_call_without_gvl(nogvl_gai_suspend, &arg, RUBY_UBF_IO, 0); - - if (ret) { - /* on Ubuntu 18.04 (or other systems), gai_suspend(3) returns EAI_SYSTEM/ENOENT on timeout */ - if (ret == EAI_SYSTEM && errno == ENOENT) { - return EAI_AGAIN; - } else { - return ret; - } - } - - ret = gai_error(reqs[0]); - ai = reqs[0]->ar_result; - } - - if (ret == 0) { - *res = (struct rb_addrinfo *)xmalloc(sizeof(struct rb_addrinfo)); - (*res)->allocated_by_malloc = allocated_by_malloc; - (*res)->ai = ai; - } - return ret; -} -#endif - void rb_freeaddrinfo(struct rb_addrinfo *ai) { @@ -572,41 +464,63 @@ port_str(VALUE port, char *pbuf, size_t pbuflen, int *flags_ptr) } } -struct rb_addrinfo* -rsock_getaddrinfo(VALUE host, VALUE port, struct addrinfo *hints, int socktype_hack) -{ - struct rb_addrinfo* res = NULL; - char *hostp, *portp; - int error; - char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV]; - int additional_flags = 0; - - hostp = host_str(host, hbuf, sizeof(hbuf), &additional_flags); - portp = port_str(port, pbuf, sizeof(pbuf), &additional_flags); - - if (socktype_hack && hints->ai_socktype == 0 && str_is_number(portp)) { - hints->ai_socktype = SOCK_DGRAM; - } - hints->ai_flags |= additional_flags; - - error = rb_getaddrinfo(hostp, portp, hints, &res); - if (error) { - if (hostp && hostp[strlen(hostp)-1] == '\n') { - rb_raise(rb_eSocket, "newline at the end of hostname"); +static int +rb_scheduler_getaddrinfo(VALUE scheduler, VALUE host, const char *service, + const struct addrinfo *hints, struct rb_addrinfo **res) +{ + int error, res_allocated = 0, _additional_flags = 0; + long i, len; + struct addrinfo *ai, *ai_tail = NULL; + char *hostp; + char _hbuf[NI_MAXHOST]; + VALUE ip_addresses_array, ip_address; + + ip_addresses_array = rb_fiber_scheduler_address_resolve(scheduler, host); + + if (ip_addresses_array == Qundef) { + // Returns EAI_FAIL if the scheduler hook is not implemented: + return EAI_FAIL; + } else if (ip_addresses_array == Qnil) { + len = 0; + } else { + len = RARRAY_LEN(ip_addresses_array); + } + + for(i=0; iallocated_by_malloc = 1; + (*res)->ai = ai; + ai_tail = ai; + } else { + while (ai_tail->ai_next) { + ai_tail = ai_tail->ai_next; + } + ai_tail->ai_next = ai; + ai_tail = ai; + } } - rsock_raise_socket_error("getaddrinfo", error); } - return res; + if (res_allocated) { // At least one valid result. + return 0; + } else { + return EAI_NONAME; + } } -#ifdef HAVE_GETADDRINFO_A -static struct rb_addrinfo* -rsock_getaddrinfo_a(VALUE host, VALUE port, struct addrinfo *hints, int socktype_hack, VALUE timeout) +struct rb_addrinfo* +rsock_getaddrinfo(VALUE host, VALUE port, struct addrinfo *hints, int socktype_hack) { struct rb_addrinfo* res = NULL; + struct addrinfo *ai; char *hostp, *portp; - int error; + int error = 0; char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV]; int additional_flags = 0; @@ -614,27 +528,56 @@ rsock_getaddrinfo_a(VALUE host, VALUE port, struct addrinfo *hints, int socktype portp = port_str(port, pbuf, sizeof(pbuf), &additional_flags); if (socktype_hack && hints->ai_socktype == 0 && str_is_number(portp)) { - hints->ai_socktype = SOCK_DGRAM; + hints->ai_socktype = SOCK_DGRAM; } hints->ai_flags |= additional_flags; - if (NIL_P(timeout)) { - error = rb_getaddrinfo(hostp, portp, hints, &res); + error = numeric_getaddrinfo(hostp, portp, hints, &ai); + if (error == 0) { + res = (struct rb_addrinfo *)xmalloc(sizeof(struct rb_addrinfo)); + res->allocated_by_malloc = 1; + res->ai = ai; } else { - struct timespec _timeout = rb_time_timespec_interval(timeout); - error = rb_getaddrinfo_a(hostp, portp, hints, &res, &_timeout); + VALUE scheduler = rb_fiber_scheduler_current(); + int resolved = 0; + + if (scheduler != Qnil && hostp && !(hints->ai_flags & AI_NUMERICHOST)) { + error = rb_scheduler_getaddrinfo(scheduler, host, portp, hints, &res); + + if (error != EAI_FAIL) { + resolved = 1; + } + } + + if (!resolved) { +#ifdef GETADDRINFO_EMU + error = getaddrinfo(hostp, portp, hints, &ai); +#else + struct getaddrinfo_arg arg; + MEMZERO(&arg, struct getaddrinfo_arg, 1); + arg.node = hostp; + arg.service = portp; + arg.hints = hints; + arg.res = &ai; + error = (int)(VALUE)rb_thread_call_without_gvl(nogvl_getaddrinfo, &arg, RUBY_UBF_IO, 0); +#endif + if (error == 0) { + res = (struct rb_addrinfo *)xmalloc(sizeof(struct rb_addrinfo)); + res->allocated_by_malloc = 0; + res->ai = ai; + } + } } if (error) { if (hostp && hostp[strlen(hostp)-1] == '\n') { rb_raise(rb_eSocket, "newline at the end of hostname"); } - rsock_raise_socket_error("getaddrinfo_a", error); + rsock_raise_socket_error("getaddrinfo", error); } return res; } -#endif int rsock_fd_family(int fd) @@ -941,15 +884,7 @@ call_getaddrinfo(VALUE node, VALUE service, hints.ai_flags = NUM2INT(flags); } -#ifdef HAVE_GETADDRINFO_A - if (NIL_P(timeout)) { - res = rsock_getaddrinfo(node, service, &hints, socktype_hack); - } else { - res = rsock_getaddrinfo_a(node, service, &hints, socktype_hack, timeout); - } -#else res = rsock_getaddrinfo(node, service, &hints, socktype_hack); -#endif if (res == NULL) rb_raise(rb_eSocket, "host not found"); @@ -1913,7 +1848,7 @@ addrinfo_to_sockaddr(VALUE self) * call-seq: * addrinfo.canonname => string or nil * - * returns the canonical name as an string. + * returns the canonical name as a string. * * nil is returned if no canonical name. * @@ -2686,7 +2621,7 @@ rsock_init_addrinfo(void) */ id_timeout = rb_intern("timeout"); - rb_cAddrinfo = rb_define_class("Addrinfo", rb_cData); + rb_cAddrinfo = rb_define_class("Addrinfo", rb_cObject); rb_define_alloc_func(rb_cAddrinfo, addrinfo_s_allocate); rb_define_method(rb_cAddrinfo, "initialize", addrinfo_initialize, -1); rb_define_method(rb_cAddrinfo, "inspect", addrinfo_inspect, 0); diff --git a/ruby/ext/socket/rubysocket.h b/ruby/ext/socket/rubysocket.h index 0ce77a5f6..c0d40addc 100644 --- a/ruby/ext/socket/rubysocket.h +++ b/ruby/ext/socket/rubysocket.h @@ -1,12 +1,22 @@ #ifndef RUBY_SOCKET_H #define RUBY_SOCKET_H 1 -#include "ruby/ruby.h" -#include "ruby/io.h" -#include "ruby/thread.h" -#include "ruby/util.h" -#include "internal.h" +#include "ruby/config.h" +#include RUBY_EXTCONF_H + +#if defined(__sun) || defined(_AIX) +/* (Recent?) Solaris' have conflicting definition of T_DATA. Let + * us honour system definition by undefining ours. + * + * See also [ruby-core:4261] + */ +# include "ruby/ruby.h" +# undef T_DATA +#endif + +#include #include + #include #include @@ -26,13 +36,7 @@ # if defined(_MSC_VER) # undef HAVE_TYPE_STRUCT_SOCKADDR_DL # endif -/* - * FIXME: failures if we make nonblocking the default - * [ruby-core:89973] [ruby-core:89976] [ruby-core:89977] [Bug #14968] - */ -# define RSOCK_NONBLOCK_DEFAULT (0) #else -# define RSOCK_NONBLOCK_DEFAULT (0) # include # include # ifdef HAVE_NETINET_IN_SYSTM_H @@ -56,12 +60,11 @@ #ifdef HAVE_NETPACKET_PACKET_H # include #endif + #ifdef HAVE_NET_ETHERNET_H # include #endif -#include - #ifdef HAVE_SYS_UN_H # include #endif @@ -87,12 +90,15 @@ # endif # include #endif + #ifdef HAVE_SYS_IOCTL_H # include #endif + #ifdef HAVE_SYS_SOCKIO_H # include #endif + #ifdef HAVE_NET_IF_H # include #endif @@ -100,16 +106,41 @@ #ifdef HAVE_SYS_PARAM_H # include #endif + #ifdef HAVE_SYS_UCRED_H # include #endif + #ifdef HAVE_UCRED_H # include #endif + #ifdef HAVE_NET_IF_DL_H # include #endif +#ifdef SOCKS5 +# include +#endif + +#ifndef HAVE_GETADDRINFO +# include "addrinfo.h" +#endif + +#include "internal.h" +#include "internal/array.h" +#include "internal/error.h" +#include "internal/gc.h" +#include "internal/io.h" +#include "internal/thread.h" +#include "internal/vm.h" +#include "ruby/io.h" +#include "ruby/ruby.h" +#include "ruby/thread.h" +#include "ruby/util.h" +#include "sockport.h" +#include "ruby/fiber/scheduler.h" + #ifndef HAVE_TYPE_SOCKLEN_T typedef int socklen_t; #endif @@ -143,11 +174,6 @@ unsigned int if_nametoindex(const char *); */ #define pseudo_AF_FTIP pseudo_AF_RTIP -#ifndef HAVE_GETADDRINFO -# include "addrinfo.h" -#endif - -#include "sockport.h" #ifndef NI_MAXHOST # define NI_MAXHOST 1025 @@ -229,7 +255,6 @@ typedef union { #define INET_SOCKS 2 extern int rsock_do_not_reverse_lookup; -extern int rsock_cmsg_cloexec_state; #define FMODE_NOREVLOOKUP 0x100 /* common socket families only */ @@ -255,9 +280,7 @@ extern VALUE rb_eSocket; #ifdef SOCKS extern VALUE rb_cSOCKSSocket; -# ifdef SOCKS5 -# include -# else +# ifndef SOCKS5 void SOCKSinit(); int Rconnect(); # endif @@ -291,13 +314,13 @@ struct rb_addrinfo { struct addrinfo *ai; int allocated_by_malloc; }; -int rb_getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct rb_addrinfo **res); void rb_freeaddrinfo(struct rb_addrinfo *ai); VALUE rsock_freeaddrinfo(VALUE arg); int rb_getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags); int rsock_fd_family(int fd); struct rb_addrinfo *rsock_addrinfo(VALUE host, VALUE port, int family, int socktype, int flags); struct rb_addrinfo *rsock_getaddrinfo(VALUE host, VALUE port, struct addrinfo *hints, int socktype_hack); + VALUE rsock_fd_socket_addrinfo(int fd, struct sockaddr *addr, socklen_t len); VALUE rsock_io_socket_addrinfo(VALUE io, struct sockaddr *addr, socklen_t len); @@ -323,7 +346,7 @@ int rsock_socket(int domain, int type, int proto); int rsock_detect_cloexec(int fd); VALUE rsock_init_sock(VALUE sock, int fd); VALUE rsock_sock_s_socketpair(int argc, VALUE *argv, VALUE klass); -VALUE rsock_init_inetsock(VALUE sock, VALUE remote_host, VALUE remote_serv, VALUE local_host, VALUE local_serv, int type); +VALUE rsock_init_inetsock(VALUE sock, VALUE remote_host, VALUE remote_serv, VALUE local_host, VALUE local_serv, int type, VALUE resolv_timeout, VALUE connect_timeout); VALUE rsock_init_unixsock(VALUE sock, VALUE path, int server); struct rsock_send_arg { @@ -348,9 +371,9 @@ VALUE rsock_s_recvfrom_nonblock(VALUE sock, VALUE len, VALUE flg, VALUE str, VALUE ex, enum sock_recv_type from); VALUE rsock_s_recvfrom(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from); -int rsock_connect(int fd, const struct sockaddr *sockaddr, int len, int socks); +int rsock_connect(int fd, const struct sockaddr *sockaddr, int len, int socks, struct timeval *timeout); -VALUE rsock_s_accept(VALUE klass, int fd, struct sockaddr *sockaddr, socklen_t *len); +VALUE rsock_s_accept(VALUE klass, VALUE io, struct sockaddr *sockaddr, socklen_t *len); VALUE rsock_s_accept_nonblock(VALUE klass, VALUE ex, rb_io_t *fptr, struct sockaddr *sockaddr, socklen_t *len); VALUE rsock_sock_listen(VALUE sock, VALUE log); @@ -409,30 +432,17 @@ NORETURN(void rsock_sys_fail_sockaddr(const char *, struct sockaddr *addr, sockl NORETURN(void rsock_sys_fail_raddrinfo(const char *, VALUE rai)); NORETURN(void rsock_sys_fail_raddrinfo_or_sockaddr(const char *, VALUE addr, VALUE rai)); -/* - * It is safe on Linux to attempt using a socket without waiting on it in - * all cases. For some syscalls (e.g. accept/accept4), blocking on the - * syscall instead of relying on select/poll allows the kernel to use - * "wake-one" behavior and avoid the thundering herd problem. - * This is likely safe on all other *nix-like systems, so this safe list - * can be expanded by interested parties. - */ -#if defined(__linux__) -static inline int rsock_maybe_fd_writable(int fd) { return 1; } -static inline void rsock_maybe_wait_fd(int fd) { } -# ifdef MSG_DONTWAIT -# define MSG_DONTWAIT_RELIABLE 1 -# endif -#else /* some systems (mswin/mingw) need these. ref: r36946 */ -# define rsock_maybe_fd_writable(fd) rb_thread_fd_writable((fd)) -# define rsock_maybe_wait_fd(fd) rb_thread_wait_fd((fd)) +#if defined(__MINGW32__) || defined(_WIN32) +#define RSOCK_WAIT_BEFORE_BLOCKING #endif /* * some OSes may support MSG_DONTWAIT inconsistently depending on socket * type, we only expect Linux to support it consistently for all socket types. */ -#ifndef MSG_DONTWAIT_RELIABLE +#if defined(MSG_DONTWAIT) && defined(__linux__) +# define MSG_DONTWAIT_RELIABLE 1 +#else # define MSG_DONTWAIT_RELIABLE 0 #endif diff --git a/ruby/ext/socket/socket.c b/ruby/ext/socket/socket.c index bfeb30340..ccf990d11 100644 --- a/ruby/ext/socket/socket.c +++ b/ruby/ext/socket/socket.c @@ -168,93 +168,47 @@ pair_yield(VALUE pair) #endif #if defined HAVE_SOCKETPAIR - -#ifdef SOCK_CLOEXEC static int -rsock_socketpair0(int domain, int type, int protocol, int sv[2]) +rsock_socketpair0(int domain, int type, int protocol, int descriptors[2]) { - int ret; - static int cloexec_state = -1; /* <0: unknown, 0: ignored, >0: working */ - static const int default_flags = SOCK_CLOEXEC|RSOCK_NONBLOCK_DEFAULT; +#ifdef SOCK_CLOEXEC + type |= SOCK_CLOEXEC; +#endif - if (cloexec_state > 0) { /* common path, if SOCK_CLOEXEC is defined */ - ret = socketpair(domain, type|default_flags, protocol, sv); - if (ret == 0 && (sv[0] <= 2 || sv[1] <= 2)) { - goto fix_cloexec; /* highly unlikely */ - } - goto update_max_fd; - } - else if (cloexec_state < 0) { /* usually runs once only for detection */ - ret = socketpair(domain, type|default_flags, protocol, sv); - if (ret == 0) { - cloexec_state = rsock_detect_cloexec(sv[0]); - if ((cloexec_state == 0) || (sv[0] <= 2 || sv[1] <= 2)) - goto fix_cloexec; - goto update_max_fd; - } - else if (ret == -1 && errno == EINVAL) { - /* SOCK_CLOEXEC is available since Linux 2.6.27. Linux 2.6.18 fails with EINVAL */ - ret = socketpair(domain, type, protocol, sv); - if (ret != -1) { - /* The reason of EINVAL may be other than SOCK_CLOEXEC. - * So disable SOCK_CLOEXEC only if socketpair() succeeds without SOCK_CLOEXEC. - * Ex. Socket.pair(:UNIX, 0xff) fails with EINVAL. - */ - cloexec_state = 0; - } - } - } - else { /* cloexec_state == 0 */ - ret = socketpair(domain, type, protocol, sv); - } - if (ret == -1) { - return -1; - } +#ifdef SOCK_NONBLOCK + type |= SOCK_NONBLOCK; +#endif -fix_cloexec: - rb_maygvl_fd_fix_cloexec(sv[0]); - rb_maygvl_fd_fix_cloexec(sv[1]); - if (RSOCK_NONBLOCK_DEFAULT) { - rsock_make_fd_nonblock(sv[0]); - rsock_make_fd_nonblock(sv[1]); - } + int result = socketpair(domain, type, protocol, descriptors); -update_max_fd: - rb_update_max_fd(sv[0]); - rb_update_max_fd(sv[1]); + if (result == -1) + return -1; - return ret; -} -#else /* !SOCK_CLOEXEC */ -static int -rsock_socketpair0(int domain, int type, int protocol, int sv[2]) -{ - int ret = socketpair(domain, type, protocol, sv); +#ifndef SOCK_CLOEXEC + rb_fd_fix_cloexec(descriptors[0]); + rb_fd_fix_cloexec(descriptors[1]); +#endif - if (ret == -1) - return -1; +#ifndef SOCK_NONBLOCK + rsock_make_fd_nonblock(descriptors[0]); + rsock_make_fd_nonblock(descriptors[1]); +#endif - rb_fd_fix_cloexec(sv[0]); - rb_fd_fix_cloexec(sv[1]); - if (RSOCK_NONBLOCK_DEFAULT) { - rsock_make_fd_nonblock(sv[0]); - rsock_make_fd_nonblock(sv[1]); - } - return ret; + return result; } -#endif /* !SOCK_CLOEXEC */ static int -rsock_socketpair(int domain, int type, int protocol, int sv[2]) +rsock_socketpair(int domain, int type, int protocol, int descriptors[2]) { - int ret; + int result; + + result = rsock_socketpair0(domain, type, protocol, descriptors); - ret = rsock_socketpair0(domain, type, protocol, sv); - if (ret < 0 && rb_gc_for_fd(errno)) { - ret = rsock_socketpair0(domain, type, protocol, sv); + if (result < 0 && rb_gc_for_fd(errno)) { + result = rsock_socketpair0(domain, type, protocol, descriptors); } - return ret; + return result; } /* @@ -376,7 +330,7 @@ rsock_sock_s_socketpair(int argc, VALUE *argv, VALUE klass) * * Errno::EOPNOTSUPP - the calling +socket+ is listening and cannot be connected * * Errno::EPROTOTYPE - the _sockaddr_ has a different type than the socket * bound to the specified peer address - * * Errno::ETIMEDOUT - the attempt to connect time out before a connection + * * Errno::ETIMEDOUT - the attempt to connect timed out before a connection * was made. * * On unix-based systems if the address family of the calling +socket+ is @@ -417,7 +371,7 @@ rsock_sock_s_socketpair(int argc, VALUE *argv, VALUE klass) * * Errno::EHOSTUNREACH - no route to the network is present * * Errno::ENOBUFS - no buffer space is available * * Errno::ENOTSOCK - the +socket+ argument does not refer to a socket - * * Errno::ETIMEDOUT - the attempt to connect time out before a connection + * * Errno::ETIMEDOUT - the attempt to connect timed out before a connection * was made. * * Errno::EWOULDBLOCK - the socket is marked as nonblocking and the * connection cannot be completed immediately @@ -439,7 +393,7 @@ sock_connect(VALUE sock, VALUE addr) addr = rb_str_new4(addr); GetOpenFile(sock, fptr); fd = fptr->fd; - n = rsock_connect(fd, (struct sockaddr*)RSTRING_PTR(addr), RSTRING_SOCKLEN(addr), 0); + n = rsock_connect(fd, (struct sockaddr*)RSTRING_PTR(addr), RSTRING_SOCKLEN(addr), 0, NULL); if (n < 0) { rsock_sys_fail_raddrinfo_or_sockaddr("connect(2)", addr, rai); } @@ -796,17 +750,14 @@ sock_recvfrom_nonblock(VALUE sock, VALUE len, VALUE flg, VALUE str, VALUE ex) * */ static VALUE -sock_accept(VALUE sock) +sock_accept(VALUE server) { - rb_io_t *fptr; - VALUE sock2; - union_sockaddr buf; - socklen_t len = (socklen_t)sizeof buf; + union_sockaddr buffer; + socklen_t length = (socklen_t)sizeof(buffer); - GetOpenFile(sock, fptr); - sock2 = rsock_s_accept(rb_cSocket,fptr->fd,&buf.addr,&len); + VALUE peer = rsock_s_accept(rb_cSocket, server, &buffer.addr, &length); - return rb_assoc_new(sock2, rsock_io_socket_addrinfo(sock2, &buf.addr, len)); + return rb_assoc_new(peer, rsock_io_socket_addrinfo(peer, &buffer.addr, length)); } /* :nodoc: */ @@ -866,17 +817,14 @@ sock_accept_nonblock(VALUE sock, VALUE ex) * * Socket#accept */ static VALUE -sock_sysaccept(VALUE sock) +sock_sysaccept(VALUE server) { - rb_io_t *fptr; - VALUE sock2; - union_sockaddr buf; - socklen_t len = (socklen_t)sizeof buf; + union_sockaddr buffer; + socklen_t length = (socklen_t)sizeof(buffer); - GetOpenFile(sock, fptr); - sock2 = rsock_s_accept(0,fptr->fd,&buf.addr,&len); + VALUE peer = rsock_s_accept(0, server, &buffer.addr, &length); - return rb_assoc_new(sock2, rsock_io_socket_addrinfo(sock2, &buf.addr, len)); + return rb_assoc_new(peer, rsock_io_socket_addrinfo(peer, &buffer.addr, length)); } #ifdef HAVE_GETHOSTNAME @@ -1011,6 +959,7 @@ sock_sockaddr(struct sockaddr *addr, socklen_t len) static VALUE sock_s_gethostbyname(VALUE obj, VALUE host) { + rb_warn("Socket.gethostbyname is deprecated; use Addrinfo.getaddrinfo instead."); struct rb_addrinfo *res = rsock_addrinfo(host, Qnil, AF_UNSPEC, SOCK_STREAM, AI_CANONNAME); return rsock_make_hostent(host, res, sock_sockaddr); @@ -1050,6 +999,8 @@ sock_s_gethostbyaddr(int argc, VALUE *argv, VALUE _) VALUE ary, names; int t = AF_INET; + rb_warn("Socket.gethostbyaddr is deprecated; use Addrinfo#getnameinfo instead."); + rb_scan_args(argc, argv, "11", &addr, &family); StringValue(addr); if (!NIL_P(family)) { @@ -1197,7 +1148,7 @@ sock_s_getservbyport(int argc, VALUE *argv, VALUE _) * be one of below. If _reverse_lookup_ is omitted, the default value is +nil+. * * +true+, +:hostname+: hostname is obtained from numeric address using reverse lookup, which may take a time. - * +false+, +:numeric+: hostname is same as numeric address. + * +false+, +:numeric+: hostname is the same as numeric address. * +nil+: obey to the current +do_not_reverse_lookup+ flag. * * If Addrinfo object is preferred, use Addrinfo.getaddrinfo. @@ -1227,6 +1178,7 @@ sock_s_getaddrinfo(int argc, VALUE *argv, VALUE _) if (NIL_P(revlookup) || !rsock_revlookup_flag(revlookup, &norevlookup)) { norevlookup = rsock_do_not_reverse_lookup; } + res = rsock_getaddrinfo(host, port, &hints, 0); ret = make_addrinfo(res, norevlookup); @@ -1260,7 +1212,6 @@ static VALUE sock_s_getnameinfo(int argc, VALUE *argv, VALUE _) { VALUE sa, af = Qnil, host = Qnil, port = Qnil, flags, tmp; - char *hptr, *pptr; char hbuf[1024], pbuf[1024]; int fl; struct rb_addrinfo *res = NULL; @@ -1321,34 +1272,10 @@ sock_s_getnameinfo(int argc, VALUE *argv, VALUE _) rb_raise(rb_eArgError, "array size should be 3 or 4, %ld given", RARRAY_LEN(sa)); } - /* host */ - if (NIL_P(host)) { - hptr = NULL; - } - else { - strncpy(hbuf, StringValueCStr(host), sizeof(hbuf)); - hbuf[sizeof(hbuf) - 1] = '\0'; - hptr = hbuf; - } - /* port */ - if (NIL_P(port)) { - strcpy(pbuf, "0"); - pptr = NULL; - } - else if (FIXNUM_P(port)) { - snprintf(pbuf, sizeof(pbuf), "%ld", NUM2LONG(port)); - pptr = pbuf; - } - else { - strncpy(pbuf, StringValueCStr(port), sizeof(pbuf)); - pbuf[sizeof(pbuf) - 1] = '\0'; - pptr = pbuf; - } hints.ai_socktype = (fl & NI_DGRAM) ? SOCK_DGRAM : SOCK_STREAM; /* af */ hints.ai_family = NIL_P(af) ? PF_UNSPEC : rsock_family_arg(af); - error = rb_getaddrinfo(hptr, pptr, &hints, &res); - if (error) goto error_exit_addr; + res = rsock_getaddrinfo(host, port, &hints, 0); sap = res->ai->ai_addr; salen = res->ai->ai_addrlen; } @@ -1378,12 +1305,6 @@ sock_s_getnameinfo(int argc, VALUE *argv, VALUE _) } return rb_assoc_new(rb_str_new2(hbuf), rb_str_new2(pbuf)); - error_exit_addr: - saved_errno = errno; - if (res) rb_freeaddrinfo(res); - errno = saved_errno; - rsock_raise_socket_error("getaddrinfo", error); - error_exit_name: saved_errno = errno; if (res) rb_freeaddrinfo(res); @@ -1936,6 +1857,8 @@ socket_s_ip_address_list(VALUE self) void Init_socket(void) { + rb_ext_ractor_safe(true); + rsock_init_basicsocket(); /* diff --git a/ruby/ext/socket/sockssocket.c b/ruby/ext/socket/sockssocket.c index 82789eeaa..b8b7e1299 100644 --- a/ruby/ext/socket/sockssocket.c +++ b/ruby/ext/socket/sockssocket.c @@ -34,7 +34,7 @@ socks_init(VALUE sock, VALUE host, VALUE port) init = 1; } - return rsock_init_inetsock(sock, host, port, Qnil, Qnil, INET_SOCKS); + return rsock_init_inetsock(sock, host, port, Qnil, Qnil, INET_SOCKS, Qnil, Qnil); } #ifdef SOCKS5 diff --git a/ruby/ext/socket/tcpserver.c b/ruby/ext/socket/tcpserver.c index 1bbb31adc..675733c6f 100644 --- a/ruby/ext/socket/tcpserver.c +++ b/ruby/ext/socket/tcpserver.c @@ -36,7 +36,7 @@ tcp_svr_init(int argc, VALUE *argv, VALUE sock) VALUE hostname, port; rb_scan_args(argc, argv, "011", &hostname, &port); - return rsock_init_inetsock(sock, hostname, port, Qnil, Qnil, INET_SERVER); + return rsock_init_inetsock(sock, hostname, port, Qnil, Qnil, INET_SERVER, Qnil, Qnil); } /* @@ -53,15 +53,12 @@ tcp_svr_init(int argc, VALUE *argv, VALUE sock) * */ static VALUE -tcp_accept(VALUE sock) +tcp_accept(VALUE server) { - rb_io_t *fptr; - union_sockaddr from; - socklen_t fromlen; + union_sockaddr buffer; + socklen_t length = sizeof(buffer); - GetOpenFile(sock, fptr); - fromlen = (socklen_t)sizeof(from); - return rsock_s_accept(rb_cTCPSocket, fptr->fd, &from.addr, &fromlen); + return rsock_s_accept(rb_cTCPSocket, server, &buffer.addr, &length); } /* :nodoc: */ @@ -91,15 +88,12 @@ tcp_accept_nonblock(VALUE sock, VALUE ex) * */ static VALUE -tcp_sysaccept(VALUE sock) +tcp_sysaccept(VALUE server) { - rb_io_t *fptr; - union_sockaddr from; - socklen_t fromlen; + union_sockaddr buffer; + socklen_t length = sizeof(buffer); - GetOpenFile(sock, fptr); - fromlen = (socklen_t)sizeof(from); - return rsock_s_accept(0, fptr->fd, &from.addr, &fromlen); + return rsock_s_accept(0, server, &buffer.addr, &length); } void diff --git a/ruby/ext/socket/tcpsocket.c b/ruby/ext/socket/tcpsocket.c index 29a3eda45..51e77a0de 100644 --- a/ruby/ext/socket/tcpsocket.c +++ b/ruby/ext/socket/tcpsocket.c @@ -12,23 +12,42 @@ /* * call-seq: - * TCPSocket.new(remote_host, remote_port, local_host=nil, local_port=nil) + * TCPSocket.new(remote_host, remote_port, local_host=nil, local_port=nil, connect_timeout: nil) * * Opens a TCP connection to +remote_host+ on +remote_port+. If +local_host+ * and +local_port+ are specified, then those parameters are used on the local * end to establish the connection. + * + * [:connect_timeout] specify the timeout in seconds. */ static VALUE tcp_init(int argc, VALUE *argv, VALUE sock) { VALUE remote_host, remote_serv; VALUE local_host, local_serv; + VALUE opt; + static ID keyword_ids[2]; + VALUE kwargs[2]; + VALUE resolv_timeout = Qnil; + VALUE connect_timeout = Qnil; + + if (!keyword_ids[0]) { + CONST_ID(keyword_ids[0], "resolv_timeout"); + CONST_ID(keyword_ids[1], "connect_timeout"); + } + + rb_scan_args(argc, argv, "22:", &remote_host, &remote_serv, + &local_host, &local_serv, &opt); - rb_scan_args(argc, argv, "22", &remote_host, &remote_serv, - &local_host, &local_serv); + if (!NIL_P(opt)) { + rb_get_kwargs(opt, keyword_ids, 0, 2, kwargs); + if (kwargs[0] != Qundef) { resolv_timeout = kwargs[0]; } + if (kwargs[1] != Qundef) { connect_timeout = kwargs[1]; } + } return rsock_init_inetsock(sock, remote_host, remote_serv, - local_host, local_serv, INET_CLIENT); + local_host, local_serv, INET_CLIENT, + resolv_timeout, connect_timeout); } static VALUE @@ -59,6 +78,7 @@ tcp_sockaddr(struct sockaddr *addr, socklen_t len) static VALUE tcp_s_gethostbyname(VALUE obj, VALUE host) { + rb_warn("TCPSocket.gethostbyname is deprecated; use Addrinfo.getaddrinfo instead."); struct rb_addrinfo *res = rsock_addrinfo(host, Qnil, AF_UNSPEC, SOCK_STREAM, AI_CANONNAME); return rsock_make_hostent(host, res, tcp_sockaddr); diff --git a/ruby/ext/socket/udpsocket.c b/ruby/ext/socket/udpsocket.c index 6ef8242a1..2bfd7c856 100644 --- a/ruby/ext/socket/udpsocket.c +++ b/ruby/ext/socket/udpsocket.c @@ -60,7 +60,7 @@ udp_connect_internal(VALUE v) rb_io_check_closed(fptr = arg->fptr); fd = fptr->fd; for (res = arg->res->ai; res; res = res->ai_next) { - if (rsock_connect(fd, res->ai_addr, res->ai_addrlen, 0) >= 0) { + if (rsock_connect(fd, res->ai_addr, res->ai_addrlen, 0, NULL) >= 0) { return Qtrue; } } @@ -153,23 +153,26 @@ udp_send_internal(VALUE v) { struct udp_send_arg *arg = (void *)v; rb_io_t *fptr; - int n; struct addrinfo *res; rb_io_check_closed(fptr = arg->fptr); for (res = arg->res->ai; res; res = res->ai_next) { retry: - arg->sarg.fd = fptr->fd; - arg->sarg.to = res->ai_addr; - arg->sarg.tolen = res->ai_addrlen; - rsock_maybe_fd_writable(arg->sarg.fd); - n = (int)BLOCKING_REGION_FD(rsock_sendto_blocking, &arg->sarg); - if (n >= 0) { - return INT2FIX(n); - } - if (rb_io_wait_writable(fptr->fd)) { - goto retry; - } + arg->sarg.fd = fptr->fd; + arg->sarg.to = res->ai_addr; + arg->sarg.tolen = res->ai_addrlen; + +#ifdef RSOCK_WAIT_BEFORE_BLOCKING + rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_WRITABLE), Qnil); +#endif + + ssize_t n = (ssize_t)BLOCKING_REGION_FD(rsock_sendto_blocking, &arg->sarg); + + if (n >= 0) return RB_SSIZE2NUM(n); + + if (rb_io_maybe_wait_writable(errno, fptr->self, Qnil)) { + goto retry; + } } return Qfalse; } diff --git a/ruby/ext/socket/unixserver.c b/ruby/ext/socket/unixserver.c index b1f2a3854..890f9d3fa 100644 --- a/ruby/ext/socket/unixserver.c +++ b/ruby/ext/socket/unixserver.c @@ -47,16 +47,12 @@ unix_svr_init(VALUE sock, VALUE path) * */ static VALUE -unix_accept(VALUE sock) +unix_accept(VALUE server) { - rb_io_t *fptr; - struct sockaddr_un from; - socklen_t fromlen; + struct sockaddr_un buffer; + socklen_t length = sizeof(buffer); - GetOpenFile(sock, fptr); - fromlen = (socklen_t)sizeof(struct sockaddr_un); - return rsock_s_accept(rb_cUNIXSocket, fptr->fd, - (struct sockaddr*)&from, &fromlen); + return rsock_s_accept(rb_cUNIXSocket, server, (struct sockaddr*)&buffer, &length); } /* :nodoc: */ @@ -92,15 +88,12 @@ unix_accept_nonblock(VALUE sock, VALUE ex) * */ static VALUE -unix_sysaccept(VALUE sock) +unix_sysaccept(VALUE server) { - rb_io_t *fptr; - struct sockaddr_un from; - socklen_t fromlen; + struct sockaddr_un buffer; + socklen_t length = sizeof(buffer); - GetOpenFile(sock, fptr); - fromlen = (socklen_t)sizeof(struct sockaddr_un); - return rsock_s_accept(0, fptr->fd, (struct sockaddr*)&from, &fromlen); + return rsock_s_accept(0, server, (struct sockaddr*)&buffer, &length); } #endif diff --git a/ruby/ext/socket/unixsocket.c b/ruby/ext/socket/unixsocket.c index 0c3a01d21..857cfa600 100644 --- a/ruby/ext/socket/unixsocket.c +++ b/ruby/ext/socket/unixsocket.c @@ -22,7 +22,7 @@ unixsock_connect_internal(VALUE a) { struct unixsock_arg *arg = (struct unixsock_arg *)a; return (VALUE)rsock_connect(arg->fd, (struct sockaddr*)arg->sockaddr, - arg->sockaddrlen, 0); + arg->sockaddrlen, 0, NULL); } static VALUE @@ -455,11 +455,7 @@ unix_recv_io(int argc, VALUE *argv, VALUE sock) #endif rb_update_max_fd(fd); - - if (rsock_cmsg_cloexec_state < 0) - rsock_cmsg_cloexec_state = rsock_detect_cloexec(fd); - if (rsock_cmsg_cloexec_state == 0 || fd <= 2) - rb_maygvl_fd_fix_cloexec(fd); + rb_maygvl_fd_fix_cloexec(fd); if (klass == Qnil) return INT2FIX(fd); diff --git a/ruby/ext/stringio/depend b/ruby/ext/stringio/depend index 02d468b30..7b70a77d2 100644 --- a/ruby/ext/stringio/depend +++ b/ruby/ext/stringio/depend @@ -4,9 +4,165 @@ stringio.o: $(arch_hdrdir)/ruby/config.h stringio.o: $(hdrdir)/ruby.h stringio.o: $(hdrdir)/ruby/assert.h stringio.o: $(hdrdir)/ruby/backward.h +stringio.o: $(hdrdir)/ruby/backward/2/assume.h +stringio.o: $(hdrdir)/ruby/backward/2/attributes.h +stringio.o: $(hdrdir)/ruby/backward/2/bool.h +stringio.o: $(hdrdir)/ruby/backward/2/inttypes.h +stringio.o: $(hdrdir)/ruby/backward/2/limits.h +stringio.o: $(hdrdir)/ruby/backward/2/long_long.h +stringio.o: $(hdrdir)/ruby/backward/2/stdalign.h +stringio.o: $(hdrdir)/ruby/backward/2/stdarg.h stringio.o: $(hdrdir)/ruby/defines.h stringio.o: $(hdrdir)/ruby/encoding.h stringio.o: $(hdrdir)/ruby/intern.h +stringio.o: $(hdrdir)/ruby/internal/anyargs.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/char.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/double.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/int.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/long.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/short.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +stringio.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +stringio.o: $(hdrdir)/ruby/internal/assume.h +stringio.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +stringio.o: $(hdrdir)/ruby/internal/attr/artificial.h +stringio.o: $(hdrdir)/ruby/internal/attr/cold.h +stringio.o: $(hdrdir)/ruby/internal/attr/const.h +stringio.o: $(hdrdir)/ruby/internal/attr/constexpr.h +stringio.o: $(hdrdir)/ruby/internal/attr/deprecated.h +stringio.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +stringio.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +stringio.o: $(hdrdir)/ruby/internal/attr/error.h +stringio.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +stringio.o: $(hdrdir)/ruby/internal/attr/forceinline.h +stringio.o: $(hdrdir)/ruby/internal/attr/format.h +stringio.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +stringio.o: $(hdrdir)/ruby/internal/attr/noalias.h +stringio.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +stringio.o: $(hdrdir)/ruby/internal/attr/noexcept.h +stringio.o: $(hdrdir)/ruby/internal/attr/noinline.h +stringio.o: $(hdrdir)/ruby/internal/attr/nonnull.h +stringio.o: $(hdrdir)/ruby/internal/attr/noreturn.h +stringio.o: $(hdrdir)/ruby/internal/attr/pure.h +stringio.o: $(hdrdir)/ruby/internal/attr/restrict.h +stringio.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +stringio.o: $(hdrdir)/ruby/internal/attr/warning.h +stringio.o: $(hdrdir)/ruby/internal/attr/weakref.h +stringio.o: $(hdrdir)/ruby/internal/cast.h +stringio.o: $(hdrdir)/ruby/internal/compiler_is.h +stringio.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +stringio.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +stringio.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +stringio.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +stringio.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +stringio.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +stringio.o: $(hdrdir)/ruby/internal/compiler_since.h +stringio.o: $(hdrdir)/ruby/internal/config.h +stringio.o: $(hdrdir)/ruby/internal/constant_p.h +stringio.o: $(hdrdir)/ruby/internal/core.h +stringio.o: $(hdrdir)/ruby/internal/core/rarray.h +stringio.o: $(hdrdir)/ruby/internal/core/rbasic.h +stringio.o: $(hdrdir)/ruby/internal/core/rbignum.h +stringio.o: $(hdrdir)/ruby/internal/core/rclass.h +stringio.o: $(hdrdir)/ruby/internal/core/rdata.h +stringio.o: $(hdrdir)/ruby/internal/core/rfile.h +stringio.o: $(hdrdir)/ruby/internal/core/rhash.h +stringio.o: $(hdrdir)/ruby/internal/core/robject.h +stringio.o: $(hdrdir)/ruby/internal/core/rregexp.h +stringio.o: $(hdrdir)/ruby/internal/core/rstring.h +stringio.o: $(hdrdir)/ruby/internal/core/rstruct.h +stringio.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +stringio.o: $(hdrdir)/ruby/internal/ctype.h +stringio.o: $(hdrdir)/ruby/internal/dllexport.h +stringio.o: $(hdrdir)/ruby/internal/dosish.h +stringio.o: $(hdrdir)/ruby/internal/encoding/coderange.h +stringio.o: $(hdrdir)/ruby/internal/encoding/ctype.h +stringio.o: $(hdrdir)/ruby/internal/encoding/encoding.h +stringio.o: $(hdrdir)/ruby/internal/encoding/pathname.h +stringio.o: $(hdrdir)/ruby/internal/encoding/re.h +stringio.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +stringio.o: $(hdrdir)/ruby/internal/encoding/string.h +stringio.o: $(hdrdir)/ruby/internal/encoding/symbol.h +stringio.o: $(hdrdir)/ruby/internal/encoding/transcode.h +stringio.o: $(hdrdir)/ruby/internal/error.h +stringio.o: $(hdrdir)/ruby/internal/eval.h +stringio.o: $(hdrdir)/ruby/internal/event.h +stringio.o: $(hdrdir)/ruby/internal/fl_type.h +stringio.o: $(hdrdir)/ruby/internal/gc.h +stringio.o: $(hdrdir)/ruby/internal/glob.h +stringio.o: $(hdrdir)/ruby/internal/globals.h +stringio.o: $(hdrdir)/ruby/internal/has/attribute.h +stringio.o: $(hdrdir)/ruby/internal/has/builtin.h +stringio.o: $(hdrdir)/ruby/internal/has/c_attribute.h +stringio.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +stringio.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +stringio.o: $(hdrdir)/ruby/internal/has/extension.h +stringio.o: $(hdrdir)/ruby/internal/has/feature.h +stringio.o: $(hdrdir)/ruby/internal/has/warning.h +stringio.o: $(hdrdir)/ruby/internal/intern/array.h +stringio.o: $(hdrdir)/ruby/internal/intern/bignum.h +stringio.o: $(hdrdir)/ruby/internal/intern/class.h +stringio.o: $(hdrdir)/ruby/internal/intern/compar.h +stringio.o: $(hdrdir)/ruby/internal/intern/complex.h +stringio.o: $(hdrdir)/ruby/internal/intern/cont.h +stringio.o: $(hdrdir)/ruby/internal/intern/dir.h +stringio.o: $(hdrdir)/ruby/internal/intern/enum.h +stringio.o: $(hdrdir)/ruby/internal/intern/enumerator.h +stringio.o: $(hdrdir)/ruby/internal/intern/error.h +stringio.o: $(hdrdir)/ruby/internal/intern/eval.h +stringio.o: $(hdrdir)/ruby/internal/intern/file.h +stringio.o: $(hdrdir)/ruby/internal/intern/gc.h +stringio.o: $(hdrdir)/ruby/internal/intern/hash.h +stringio.o: $(hdrdir)/ruby/internal/intern/io.h +stringio.o: $(hdrdir)/ruby/internal/intern/load.h +stringio.o: $(hdrdir)/ruby/internal/intern/marshal.h +stringio.o: $(hdrdir)/ruby/internal/intern/numeric.h +stringio.o: $(hdrdir)/ruby/internal/intern/object.h +stringio.o: $(hdrdir)/ruby/internal/intern/parse.h +stringio.o: $(hdrdir)/ruby/internal/intern/proc.h +stringio.o: $(hdrdir)/ruby/internal/intern/process.h +stringio.o: $(hdrdir)/ruby/internal/intern/random.h +stringio.o: $(hdrdir)/ruby/internal/intern/range.h +stringio.o: $(hdrdir)/ruby/internal/intern/rational.h +stringio.o: $(hdrdir)/ruby/internal/intern/re.h +stringio.o: $(hdrdir)/ruby/internal/intern/ruby.h +stringio.o: $(hdrdir)/ruby/internal/intern/select.h +stringio.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +stringio.o: $(hdrdir)/ruby/internal/intern/signal.h +stringio.o: $(hdrdir)/ruby/internal/intern/sprintf.h +stringio.o: $(hdrdir)/ruby/internal/intern/string.h +stringio.o: $(hdrdir)/ruby/internal/intern/struct.h +stringio.o: $(hdrdir)/ruby/internal/intern/thread.h +stringio.o: $(hdrdir)/ruby/internal/intern/time.h +stringio.o: $(hdrdir)/ruby/internal/intern/variable.h +stringio.o: $(hdrdir)/ruby/internal/intern/vm.h +stringio.o: $(hdrdir)/ruby/internal/interpreter.h +stringio.o: $(hdrdir)/ruby/internal/iterator.h +stringio.o: $(hdrdir)/ruby/internal/memory.h +stringio.o: $(hdrdir)/ruby/internal/method.h +stringio.o: $(hdrdir)/ruby/internal/module.h +stringio.o: $(hdrdir)/ruby/internal/newobj.h +stringio.o: $(hdrdir)/ruby/internal/rgengc.h +stringio.o: $(hdrdir)/ruby/internal/scan_args.h +stringio.o: $(hdrdir)/ruby/internal/special_consts.h +stringio.o: $(hdrdir)/ruby/internal/static_assert.h +stringio.o: $(hdrdir)/ruby/internal/stdalign.h +stringio.o: $(hdrdir)/ruby/internal/stdbool.h +stringio.o: $(hdrdir)/ruby/internal/symbol.h +stringio.o: $(hdrdir)/ruby/internal/value.h +stringio.o: $(hdrdir)/ruby/internal/value_type.h +stringio.o: $(hdrdir)/ruby/internal/variable.h +stringio.o: $(hdrdir)/ruby/internal/warning_push.h +stringio.o: $(hdrdir)/ruby/internal/xmalloc.h stringio.o: $(hdrdir)/ruby/io.h stringio.o: $(hdrdir)/ruby/missing.h stringio.o: $(hdrdir)/ruby/onigmo.h diff --git a/ruby/ext/stringio/stringio.c b/ruby/ext/stringio/stringio.c index b31e801b2..8df07e80f 100644 --- a/ruby/ext/stringio/stringio.c +++ b/ruby/ext/stringio/stringio.c @@ -1,3 +1,4 @@ +/* -*- mode: c; indent-tabs-mode: t -*- */ /********************************************************************** stringio.c - @@ -11,7 +12,7 @@ **********************************************************************/ -#define STRINGIO_VERSION "0.1.0" +#define STRINGIO_VERSION "3.0.1" #include "ruby.h" #include "ruby/io.h" @@ -64,7 +65,7 @@ strio_extract_modeenc(VALUE *vmode_p, VALUE *vperm_p, VALUE opthash, n = strchr(n, '|'); } e = strchr(++n, ':'); - len = e ? e - n : strlen(n); + len = e ? e - n : (long)strlen(n); if (len > 0 && len <= ENCODING_MAXNAMELEN) { if (e) { memcpy(encname, n, len); @@ -599,6 +600,14 @@ strio_closed_write(VALUE self) return Qtrue; } +static struct StringIO * +strio_to_read(VALUE self) +{ + struct StringIO *ptr = readable(self); + if (ptr->pos < RSTRING_LEN(ptr->string)) return ptr; + return NULL; +} + /* * call-seq: * strio.eof -> true or false @@ -610,8 +619,7 @@ strio_closed_write(VALUE self) static VALUE strio_eof(VALUE self) { - struct StringIO *ptr = readable(self); - if (ptr->pos < RSTRING_LEN(ptr->string)) return Qfalse; + if (strio_to_read(self)) return Qfalse; return Qtrue; } @@ -821,29 +829,17 @@ strio_get_sync(VALUE self) static VALUE strio_each_byte(VALUE self) { - struct StringIO *ptr = readable(self); + struct StringIO *ptr; RETURN_ENUMERATOR(self, 0, 0); - while (ptr->pos < RSTRING_LEN(ptr->string)) { + while ((ptr = strio_to_read(self)) != NULL) { char c = RSTRING_PTR(ptr->string)[ptr->pos++]; rb_yield(CHR2FIX(c)); } return self; } -/* - * This is a deprecated alias for #each_byte. - */ -static VALUE -strio_bytes(VALUE self) -{ - rb_warn("StringIO#bytes is deprecated; use #each_byte instead"); - if (!rb_block_given_p()) - return rb_enumeratorize(self, ID2SYM(rb_intern("each_byte")), 0, 0); - return strio_each_byte(self); -} - /* * call-seq: * strio.getc -> string or nil @@ -1057,18 +1053,6 @@ strio_each_char(VALUE self) return self; } -/* - * This is a deprecated alias for #each_char. - */ -static VALUE -strio_chars(VALUE self) -{ - rb_warn("StringIO#chars is deprecated; use #each_char instead"); - if (!rb_block_given_p()) - return rb_enumeratorize(self, ID2SYM(rb_intern("each_char")), 0, 0); - return strio_each_char(self); -} - /* * call-seq: * strio.each_codepoint {|c| block } -> strio @@ -1088,31 +1072,15 @@ strio_each_codepoint(VALUE self) ptr = readable(self); enc = get_enc(ptr); - for (;;) { - if (ptr->pos >= RSTRING_LEN(ptr->string)) { - return self; - } - + while ((ptr = strio_to_read(self)) != NULL) { c = rb_enc_codepoint_len(RSTRING_PTR(ptr->string)+ptr->pos, RSTRING_END(ptr->string), &n, enc); - rb_yield(UINT2NUM(c)); ptr->pos += n; + rb_yield(UINT2NUM(c)); } return self; } -/* - * This is a deprecated alias for #each_codepoint. - */ -static VALUE -strio_codepoints(VALUE self) -{ - rb_warn("StringIO#codepoints is deprecated; use #each_codepoint instead"); - if (!rb_block_given_p()) - return rb_enumeratorize(self, ID2SYM(rb_intern("each_codepoint")), 0, 0); - return strio_each_codepoint(self); -} - /* Boyer-Moore search: copied from regex.c */ static void bm_init_skip(long *skip, const char *pat, long m) @@ -1363,18 +1331,6 @@ strio_each(int argc, VALUE *argv, VALUE self) return self; } -/* - * This is a deprecated alias for #each_line. - */ -static VALUE -strio_lines(int argc, VALUE *argv, VALUE self) -{ - rb_warn("StringIO#lines is deprecated; use #each_line instead"); - if (!rb_block_given_p()) - return rb_enumeratorize(self, ID2SYM(rb_intern("each_line")), argc, argv); - return strio_each(argc, argv, self); -} - /* * call-seq: * strio.readlines(sep=$/, chomp: false) -> array @@ -1429,13 +1385,18 @@ strio_write(VALUE self, VALUE str) long len, olen; rb_encoding *enc, *enc2; rb_encoding *const ascii8bit = rb_ascii8bit_encoding(); + rb_encoding *usascii = 0; if (!RB_TYPE_P(str, T_STRING)) str = rb_obj_as_string(str); enc = get_enc(ptr); enc2 = rb_enc_get(str); - if (enc != enc2 && enc != ascii8bit) { - str = rb_str_conv_enc(str, enc2, enc); + if (enc != enc2 && enc != ascii8bit && enc != (usascii = rb_usascii_encoding())) { + VALUE converted = rb_str_conv_enc(str, enc2, enc); + if (converted == str && enc2 != ascii8bit && enc2 != usascii) { /* conversion failed */ + rb_enc_check(rb_enc_from_encoding(enc), str); + } + str = converted; } len = RSTRING_LEN(str); if (len == 0) return 0; @@ -1532,7 +1493,6 @@ strio_read(int argc, VALUE *argv, VALUE self) long len; int binary = 0; - rb_check_arity(argc, 0, 2); switch (argc) { case 2: str = argv[1]; @@ -1572,6 +1532,8 @@ strio_read(int argc, VALUE *argv, VALUE self) len -= ptr->pos; } break; + default: + rb_error_arity(argc, 0, 2); } if (NIL_P(str)) { rb_encoding *enc = binary ? rb_ascii8bit_encoding() : get_enc(ptr); @@ -1792,7 +1754,12 @@ void Init_stringio(void) { #undef rb_intern - VALUE StringIO = rb_define_class("StringIO", rb_cData); + +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + + VALUE StringIO = rb_define_class("StringIO", rb_cObject); rb_define_const(StringIO, "VERSION", rb_str_new_cstr(STRINGIO_VERSION)); @@ -1837,13 +1804,9 @@ Init_stringio(void) rb_define_method(StringIO, "each", strio_each, -1); rb_define_method(StringIO, "each_line", strio_each, -1); - rb_define_method(StringIO, "lines", strio_lines, -1); rb_define_method(StringIO, "each_byte", strio_each_byte, 0); - rb_define_method(StringIO, "bytes", strio_bytes, 0); rb_define_method(StringIO, "each_char", strio_each_char, 0); - rb_define_method(StringIO, "chars", strio_chars, 0); rb_define_method(StringIO, "each_codepoint", strio_each_codepoint, 0); - rb_define_method(StringIO, "codepoints", strio_codepoints, 0); rb_define_method(StringIO, "getc", strio_getc, 0); rb_define_method(StringIO, "ungetc", strio_ungetc, 1); rb_define_method(StringIO, "ungetbyte", strio_ungetbyte, 1); diff --git a/ruby/ext/stringio/stringio.gemspec b/ruby/ext/stringio/stringio.gemspec index a16c75753..524d976cf 100644 --- a/ruby/ext/stringio/stringio.gemspec +++ b/ruby/ext/stringio/stringio.gemspec @@ -22,13 +22,10 @@ Gem::Specification.new do |s| s.extensions = ["ext/stringio/extconf.rb"] s.files = ["README.md", "ext/stringio/extconf.rb", "ext/stringio/stringio.c"] s.homepage = "https://github.com/ruby/stringio" - s.licenses = ["BSD-2-Clause"] + s.licenses = ["Ruby", "BSD-2-Clause"] s.required_ruby_version = ">= 2.5" - s.rubygems_version = "2.6.11" s.summary = "Pseudo IO on String" # s.cert_chain = %w[certs/nobu.pem] # s.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/ - - s.add_development_dependency 'rake-compiler' end diff --git a/ruby/ext/strscan/depend b/ruby/ext/strscan/depend index 212d386f8..7024f8bfa 100644 --- a/ruby/ext/strscan/depend +++ b/ruby/ext/strscan/depend @@ -3,9 +3,166 @@ strscan.o: $(RUBY_EXTCONF_H) strscan.o: $(arch_hdrdir)/ruby/config.h strscan.o: $(hdrdir)/ruby/assert.h strscan.o: $(hdrdir)/ruby/backward.h +strscan.o: $(hdrdir)/ruby/backward/2/assume.h +strscan.o: $(hdrdir)/ruby/backward/2/attributes.h +strscan.o: $(hdrdir)/ruby/backward/2/bool.h +strscan.o: $(hdrdir)/ruby/backward/2/inttypes.h +strscan.o: $(hdrdir)/ruby/backward/2/limits.h +strscan.o: $(hdrdir)/ruby/backward/2/long_long.h +strscan.o: $(hdrdir)/ruby/backward/2/stdalign.h +strscan.o: $(hdrdir)/ruby/backward/2/stdarg.h strscan.o: $(hdrdir)/ruby/defines.h strscan.o: $(hdrdir)/ruby/encoding.h strscan.o: $(hdrdir)/ruby/intern.h +strscan.o: $(hdrdir)/ruby/internal/anyargs.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/char.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/double.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/int.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/long.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/short.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +strscan.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +strscan.o: $(hdrdir)/ruby/internal/assume.h +strscan.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +strscan.o: $(hdrdir)/ruby/internal/attr/artificial.h +strscan.o: $(hdrdir)/ruby/internal/attr/cold.h +strscan.o: $(hdrdir)/ruby/internal/attr/const.h +strscan.o: $(hdrdir)/ruby/internal/attr/constexpr.h +strscan.o: $(hdrdir)/ruby/internal/attr/deprecated.h +strscan.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +strscan.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +strscan.o: $(hdrdir)/ruby/internal/attr/error.h +strscan.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +strscan.o: $(hdrdir)/ruby/internal/attr/forceinline.h +strscan.o: $(hdrdir)/ruby/internal/attr/format.h +strscan.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +strscan.o: $(hdrdir)/ruby/internal/attr/noalias.h +strscan.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +strscan.o: $(hdrdir)/ruby/internal/attr/noexcept.h +strscan.o: $(hdrdir)/ruby/internal/attr/noinline.h +strscan.o: $(hdrdir)/ruby/internal/attr/nonnull.h +strscan.o: $(hdrdir)/ruby/internal/attr/noreturn.h +strscan.o: $(hdrdir)/ruby/internal/attr/pure.h +strscan.o: $(hdrdir)/ruby/internal/attr/restrict.h +strscan.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +strscan.o: $(hdrdir)/ruby/internal/attr/warning.h +strscan.o: $(hdrdir)/ruby/internal/attr/weakref.h +strscan.o: $(hdrdir)/ruby/internal/cast.h +strscan.o: $(hdrdir)/ruby/internal/compiler_is.h +strscan.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +strscan.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +strscan.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +strscan.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +strscan.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +strscan.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +strscan.o: $(hdrdir)/ruby/internal/compiler_since.h +strscan.o: $(hdrdir)/ruby/internal/config.h +strscan.o: $(hdrdir)/ruby/internal/constant_p.h +strscan.o: $(hdrdir)/ruby/internal/core.h +strscan.o: $(hdrdir)/ruby/internal/core/rarray.h +strscan.o: $(hdrdir)/ruby/internal/core/rbasic.h +strscan.o: $(hdrdir)/ruby/internal/core/rbignum.h +strscan.o: $(hdrdir)/ruby/internal/core/rclass.h +strscan.o: $(hdrdir)/ruby/internal/core/rdata.h +strscan.o: $(hdrdir)/ruby/internal/core/rfile.h +strscan.o: $(hdrdir)/ruby/internal/core/rhash.h +strscan.o: $(hdrdir)/ruby/internal/core/rmatch.h +strscan.o: $(hdrdir)/ruby/internal/core/robject.h +strscan.o: $(hdrdir)/ruby/internal/core/rregexp.h +strscan.o: $(hdrdir)/ruby/internal/core/rstring.h +strscan.o: $(hdrdir)/ruby/internal/core/rstruct.h +strscan.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +strscan.o: $(hdrdir)/ruby/internal/ctype.h +strscan.o: $(hdrdir)/ruby/internal/dllexport.h +strscan.o: $(hdrdir)/ruby/internal/dosish.h +strscan.o: $(hdrdir)/ruby/internal/encoding/coderange.h +strscan.o: $(hdrdir)/ruby/internal/encoding/ctype.h +strscan.o: $(hdrdir)/ruby/internal/encoding/encoding.h +strscan.o: $(hdrdir)/ruby/internal/encoding/pathname.h +strscan.o: $(hdrdir)/ruby/internal/encoding/re.h +strscan.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +strscan.o: $(hdrdir)/ruby/internal/encoding/string.h +strscan.o: $(hdrdir)/ruby/internal/encoding/symbol.h +strscan.o: $(hdrdir)/ruby/internal/encoding/transcode.h +strscan.o: $(hdrdir)/ruby/internal/error.h +strscan.o: $(hdrdir)/ruby/internal/eval.h +strscan.o: $(hdrdir)/ruby/internal/event.h +strscan.o: $(hdrdir)/ruby/internal/fl_type.h +strscan.o: $(hdrdir)/ruby/internal/gc.h +strscan.o: $(hdrdir)/ruby/internal/glob.h +strscan.o: $(hdrdir)/ruby/internal/globals.h +strscan.o: $(hdrdir)/ruby/internal/has/attribute.h +strscan.o: $(hdrdir)/ruby/internal/has/builtin.h +strscan.o: $(hdrdir)/ruby/internal/has/c_attribute.h +strscan.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +strscan.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +strscan.o: $(hdrdir)/ruby/internal/has/extension.h +strscan.o: $(hdrdir)/ruby/internal/has/feature.h +strscan.o: $(hdrdir)/ruby/internal/has/warning.h +strscan.o: $(hdrdir)/ruby/internal/intern/array.h +strscan.o: $(hdrdir)/ruby/internal/intern/bignum.h +strscan.o: $(hdrdir)/ruby/internal/intern/class.h +strscan.o: $(hdrdir)/ruby/internal/intern/compar.h +strscan.o: $(hdrdir)/ruby/internal/intern/complex.h +strscan.o: $(hdrdir)/ruby/internal/intern/cont.h +strscan.o: $(hdrdir)/ruby/internal/intern/dir.h +strscan.o: $(hdrdir)/ruby/internal/intern/enum.h +strscan.o: $(hdrdir)/ruby/internal/intern/enumerator.h +strscan.o: $(hdrdir)/ruby/internal/intern/error.h +strscan.o: $(hdrdir)/ruby/internal/intern/eval.h +strscan.o: $(hdrdir)/ruby/internal/intern/file.h +strscan.o: $(hdrdir)/ruby/internal/intern/gc.h +strscan.o: $(hdrdir)/ruby/internal/intern/hash.h +strscan.o: $(hdrdir)/ruby/internal/intern/io.h +strscan.o: $(hdrdir)/ruby/internal/intern/load.h +strscan.o: $(hdrdir)/ruby/internal/intern/marshal.h +strscan.o: $(hdrdir)/ruby/internal/intern/numeric.h +strscan.o: $(hdrdir)/ruby/internal/intern/object.h +strscan.o: $(hdrdir)/ruby/internal/intern/parse.h +strscan.o: $(hdrdir)/ruby/internal/intern/proc.h +strscan.o: $(hdrdir)/ruby/internal/intern/process.h +strscan.o: $(hdrdir)/ruby/internal/intern/random.h +strscan.o: $(hdrdir)/ruby/internal/intern/range.h +strscan.o: $(hdrdir)/ruby/internal/intern/rational.h +strscan.o: $(hdrdir)/ruby/internal/intern/re.h +strscan.o: $(hdrdir)/ruby/internal/intern/ruby.h +strscan.o: $(hdrdir)/ruby/internal/intern/select.h +strscan.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +strscan.o: $(hdrdir)/ruby/internal/intern/signal.h +strscan.o: $(hdrdir)/ruby/internal/intern/sprintf.h +strscan.o: $(hdrdir)/ruby/internal/intern/string.h +strscan.o: $(hdrdir)/ruby/internal/intern/struct.h +strscan.o: $(hdrdir)/ruby/internal/intern/thread.h +strscan.o: $(hdrdir)/ruby/internal/intern/time.h +strscan.o: $(hdrdir)/ruby/internal/intern/variable.h +strscan.o: $(hdrdir)/ruby/internal/intern/vm.h +strscan.o: $(hdrdir)/ruby/internal/interpreter.h +strscan.o: $(hdrdir)/ruby/internal/iterator.h +strscan.o: $(hdrdir)/ruby/internal/memory.h +strscan.o: $(hdrdir)/ruby/internal/method.h +strscan.o: $(hdrdir)/ruby/internal/module.h +strscan.o: $(hdrdir)/ruby/internal/newobj.h +strscan.o: $(hdrdir)/ruby/internal/rgengc.h +strscan.o: $(hdrdir)/ruby/internal/scan_args.h +strscan.o: $(hdrdir)/ruby/internal/special_consts.h +strscan.o: $(hdrdir)/ruby/internal/static_assert.h +strscan.o: $(hdrdir)/ruby/internal/stdalign.h +strscan.o: $(hdrdir)/ruby/internal/stdbool.h +strscan.o: $(hdrdir)/ruby/internal/symbol.h +strscan.o: $(hdrdir)/ruby/internal/value.h +strscan.o: $(hdrdir)/ruby/internal/value_type.h +strscan.o: $(hdrdir)/ruby/internal/variable.h +strscan.o: $(hdrdir)/ruby/internal/warning_push.h +strscan.o: $(hdrdir)/ruby/internal/xmalloc.h strscan.o: $(hdrdir)/ruby/missing.h strscan.o: $(hdrdir)/ruby/onigmo.h strscan.o: $(hdrdir)/ruby/oniguruma.h diff --git a/ruby/ext/strscan/strscan.c b/ruby/ext/strscan/strscan.c index b6d17992c..e1426380b 100644 --- a/ruby/ext/strscan/strscan.c +++ b/ruby/ext/strscan/strscan.c @@ -4,8 +4,8 @@ Copyright (c) 1999-2006 Minero Aoki This program is free software. - You can distribute/modify this program under the terms of - the Ruby License. For details, see the file COPYING. + You can redistribute this program under the terms of the Ruby's or 2-clause + BSD License. For details, see the COPYING and LICENSE.txt files. */ #include "ruby/ruby.h" @@ -22,7 +22,7 @@ extern size_t onig_region_memsize(const struct re_registers *regs); #include -#define STRSCAN_VERSION "1.0.3" +#define STRSCAN_VERSION "3.0.1" /* ======================================================================= Data Type Definitions @@ -176,6 +176,7 @@ strscan_mark(void *ptr) { struct strscanner *p = ptr; rb_gc_mark(p->str); + rb_gc_mark(p->regex); } static void @@ -212,6 +213,7 @@ strscan_s_allocate(VALUE klass) CLEAR_MATCH_STATUS(p); onig_region_init(&(p->regs)); p->str = Qnil; + p->regex = Qnil; return obj; } @@ -443,13 +445,10 @@ static VALUE strscan_get_charpos(VALUE self) { struct strscanner *p; - VALUE substr; GET_SCANNER(self, p); - substr = rb_funcall(p->str, id_byteslice, 2, INT2FIX(0), INT2NUM(p->curr)); - - return rb_str_length(substr); + return LONG2NUM(rb_enc_strlen(S_PBEG(p), CURPTR(p), rb_enc_get(p->str))); } /* @@ -473,7 +472,7 @@ strscan_set_pos(VALUE self, VALUE v) if (i < 0) rb_raise(rb_eRangeError, "index out of range"); if (i > S_LEN(p)) rb_raise(rb_eRangeError, "index out of range"); p->curr = i; - return INT2NUM(i); + return LONG2NUM(i); } static inline UChar * @@ -848,9 +847,8 @@ adjust_registers_to_matched(struct strscanner *p) * s.getch # => "b" * s.getch # => nil * - * $KCODE = 'EUC' - * s = StringScanner.new("\244\242") - * s.getch # => "\244\242" # Japanese hira-kana "A" in EUC-JP + * s = StringScanner.new("\244\242".force_encoding("euc-jp")) + * s.getch # => "\x{A4A2}" # Japanese hira-kana "A" in EUC-JP * s.getch # => nil */ static VALUE @@ -885,10 +883,9 @@ strscan_getch(VALUE self) * s.get_byte # => "b" * s.get_byte # => nil * - * $KCODE = 'EUC' - * s = StringScanner.new("\244\242") - * s.get_byte # => "\244" - * s.get_byte # => "\242" + * s = StringScanner.new("\244\242".force_encoding("euc-jp")) + * s.get_byte # => "\xA4" + * s.get_byte # => "\xA2" * s.get_byte # => nil */ static VALUE @@ -984,7 +981,7 @@ strscan_unscan(VALUE self) } /* - * Returns +true+ iff the scan pointer is at the beginning of the line. + * Returns +true+ if and only if the scan pointer is at the beginning of the line. * * s = StringScanner.new("test\ntest\n") * s.bol? # => true @@ -1037,7 +1034,7 @@ strscan_empty_p(VALUE self) } /* - * Returns true iff there is more data in the string. See #eos?. + * Returns true if and only if there is more data in the string. See #eos?. * This method is obsolete; use #eos? instead. * * s = StringScanner.new('test string') @@ -1054,7 +1051,7 @@ strscan_rest_p(VALUE self) } /* - * Returns +true+ iff the last match was successful. + * Returns +true+ if and only if the last match was successful. * * s = StringScanner.new('test string') * s.match?(/\w+/) # => 4 @@ -1091,8 +1088,9 @@ strscan_matched(VALUE self) } /* - * Returns the size of the most recent match (see #matched), or +nil+ if there - * was no recent match. + * Returns the size of the most recent match in bytes, or +nil+ if there + * was no recent match. This is different than matched.size, + * which will return the size in characters. * * s = StringScanner.new('test string') * s.check /\w+/ # -> "test" @@ -1107,7 +1105,7 @@ strscan_matched_size(VALUE self) GET_SCANNER(self, p); if (! MATCHED_P(p)) return Qnil; - return INT2NUM(p->regs.end[0] - p->regs.beg[0]); + return LONG2NUM(p->regs.end[0] - p->regs.beg[0]); } static int @@ -1169,7 +1167,7 @@ strscan_aref(VALUE self, VALUE idx) idx = rb_sym2str(idx); /* fall through */ case T_STRING: - if (!p->regex) return Qnil; + if (!RTEST(p->regex)) return Qnil; RSTRING_GETMEM(idx, name, i); i = name_to_backref_number(&(p->regs), p->regex, name, name + i, rb_enc_get(idx)); break; @@ -1536,7 +1534,7 @@ strscan_fixed_anchor_p(VALUE self) * * === Finding Where we Are * - * - #beginning_of_line? (#bol?) + * - #beginning_of_line? (#bol?) * - #eos? * - #rest? * - #rest_size @@ -1553,13 +1551,13 @@ strscan_fixed_anchor_p(VALUE self) * - #matched * - #matched? * - #matched_size - * - [] + * - #[] * - #pre_match * - #post_match * * === Miscellaneous * - * - << + * - << * - #concat * - #string * - #string= @@ -1570,6 +1568,10 @@ strscan_fixed_anchor_p(VALUE self) void Init_strscan(void) { +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + #undef rb_intern ID id_scanerr = rb_intern("ScanError"); VALUE tmp; diff --git a/ruby/ext/strscan/strscan.gemspec b/ruby/ext/strscan/strscan.gemspec index 4759c6c86..5d8119ea4 100644 --- a/ruby/ext/strscan/strscan.gemspec +++ b/ruby/ext/strscan/strscan.gemspec @@ -1,7 +1,18 @@ # frozen_string_literal: true +# +source_version = ["", "ext/strscan/"].find do |dir| + begin + break File.open(File.join(__dir__, "#{dir}strscan.c")) {|f| + f.gets("\n#define STRSCAN_VERSION ") + f.gets[/\s*"(.+)"/, 1] + } + rescue Errno::ENOENT + end +end + Gem::Specification.new do |s| s.name = "strscan" - s.version = '1.0.3' + s.version = source_version s.summary = "Provides lexical scanning operations on a String." s.description = "Provides lexical scanning operations on a String." @@ -13,8 +24,5 @@ Gem::Specification.new do |s| s.authors = ["Minero Aoki", "Sutou Kouhei"] s.email = [nil, "kou@cozmixng.org"] s.homepage = "https://github.com/ruby/strscan" - s.license = "BSD-2-Clause" - - s.add_development_dependency "rake-compiler" - s.add_development_dependency "benchmark-driver" + s.licenses = ["Ruby", "BSD-2-Clause"] end diff --git a/ruby/ext/syslog/depend b/ruby/ext/syslog/depend index a3f7db837..0752bed04 100644 --- a/ruby/ext/syslog/depend +++ b/ruby/ext/syslog/depend @@ -3,8 +3,155 @@ syslog.o: $(RUBY_EXTCONF_H) syslog.o: $(arch_hdrdir)/ruby/config.h syslog.o: $(hdrdir)/ruby/assert.h syslog.o: $(hdrdir)/ruby/backward.h +syslog.o: $(hdrdir)/ruby/backward/2/assume.h +syslog.o: $(hdrdir)/ruby/backward/2/attributes.h +syslog.o: $(hdrdir)/ruby/backward/2/bool.h +syslog.o: $(hdrdir)/ruby/backward/2/inttypes.h +syslog.o: $(hdrdir)/ruby/backward/2/limits.h +syslog.o: $(hdrdir)/ruby/backward/2/long_long.h +syslog.o: $(hdrdir)/ruby/backward/2/stdalign.h +syslog.o: $(hdrdir)/ruby/backward/2/stdarg.h syslog.o: $(hdrdir)/ruby/defines.h syslog.o: $(hdrdir)/ruby/intern.h +syslog.o: $(hdrdir)/ruby/internal/anyargs.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/char.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/double.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/int.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/long.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/short.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +syslog.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +syslog.o: $(hdrdir)/ruby/internal/assume.h +syslog.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +syslog.o: $(hdrdir)/ruby/internal/attr/artificial.h +syslog.o: $(hdrdir)/ruby/internal/attr/cold.h +syslog.o: $(hdrdir)/ruby/internal/attr/const.h +syslog.o: $(hdrdir)/ruby/internal/attr/constexpr.h +syslog.o: $(hdrdir)/ruby/internal/attr/deprecated.h +syslog.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +syslog.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +syslog.o: $(hdrdir)/ruby/internal/attr/error.h +syslog.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +syslog.o: $(hdrdir)/ruby/internal/attr/forceinline.h +syslog.o: $(hdrdir)/ruby/internal/attr/format.h +syslog.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +syslog.o: $(hdrdir)/ruby/internal/attr/noalias.h +syslog.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +syslog.o: $(hdrdir)/ruby/internal/attr/noexcept.h +syslog.o: $(hdrdir)/ruby/internal/attr/noinline.h +syslog.o: $(hdrdir)/ruby/internal/attr/nonnull.h +syslog.o: $(hdrdir)/ruby/internal/attr/noreturn.h +syslog.o: $(hdrdir)/ruby/internal/attr/pure.h +syslog.o: $(hdrdir)/ruby/internal/attr/restrict.h +syslog.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +syslog.o: $(hdrdir)/ruby/internal/attr/warning.h +syslog.o: $(hdrdir)/ruby/internal/attr/weakref.h +syslog.o: $(hdrdir)/ruby/internal/cast.h +syslog.o: $(hdrdir)/ruby/internal/compiler_is.h +syslog.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +syslog.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +syslog.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +syslog.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +syslog.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +syslog.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +syslog.o: $(hdrdir)/ruby/internal/compiler_since.h +syslog.o: $(hdrdir)/ruby/internal/config.h +syslog.o: $(hdrdir)/ruby/internal/constant_p.h +syslog.o: $(hdrdir)/ruby/internal/core.h +syslog.o: $(hdrdir)/ruby/internal/core/rarray.h +syslog.o: $(hdrdir)/ruby/internal/core/rbasic.h +syslog.o: $(hdrdir)/ruby/internal/core/rbignum.h +syslog.o: $(hdrdir)/ruby/internal/core/rclass.h +syslog.o: $(hdrdir)/ruby/internal/core/rdata.h +syslog.o: $(hdrdir)/ruby/internal/core/rfile.h +syslog.o: $(hdrdir)/ruby/internal/core/rhash.h +syslog.o: $(hdrdir)/ruby/internal/core/robject.h +syslog.o: $(hdrdir)/ruby/internal/core/rregexp.h +syslog.o: $(hdrdir)/ruby/internal/core/rstring.h +syslog.o: $(hdrdir)/ruby/internal/core/rstruct.h +syslog.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +syslog.o: $(hdrdir)/ruby/internal/ctype.h +syslog.o: $(hdrdir)/ruby/internal/dllexport.h +syslog.o: $(hdrdir)/ruby/internal/dosish.h +syslog.o: $(hdrdir)/ruby/internal/error.h +syslog.o: $(hdrdir)/ruby/internal/eval.h +syslog.o: $(hdrdir)/ruby/internal/event.h +syslog.o: $(hdrdir)/ruby/internal/fl_type.h +syslog.o: $(hdrdir)/ruby/internal/gc.h +syslog.o: $(hdrdir)/ruby/internal/glob.h +syslog.o: $(hdrdir)/ruby/internal/globals.h +syslog.o: $(hdrdir)/ruby/internal/has/attribute.h +syslog.o: $(hdrdir)/ruby/internal/has/builtin.h +syslog.o: $(hdrdir)/ruby/internal/has/c_attribute.h +syslog.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +syslog.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +syslog.o: $(hdrdir)/ruby/internal/has/extension.h +syslog.o: $(hdrdir)/ruby/internal/has/feature.h +syslog.o: $(hdrdir)/ruby/internal/has/warning.h +syslog.o: $(hdrdir)/ruby/internal/intern/array.h +syslog.o: $(hdrdir)/ruby/internal/intern/bignum.h +syslog.o: $(hdrdir)/ruby/internal/intern/class.h +syslog.o: $(hdrdir)/ruby/internal/intern/compar.h +syslog.o: $(hdrdir)/ruby/internal/intern/complex.h +syslog.o: $(hdrdir)/ruby/internal/intern/cont.h +syslog.o: $(hdrdir)/ruby/internal/intern/dir.h +syslog.o: $(hdrdir)/ruby/internal/intern/enum.h +syslog.o: $(hdrdir)/ruby/internal/intern/enumerator.h +syslog.o: $(hdrdir)/ruby/internal/intern/error.h +syslog.o: $(hdrdir)/ruby/internal/intern/eval.h +syslog.o: $(hdrdir)/ruby/internal/intern/file.h +syslog.o: $(hdrdir)/ruby/internal/intern/gc.h +syslog.o: $(hdrdir)/ruby/internal/intern/hash.h +syslog.o: $(hdrdir)/ruby/internal/intern/io.h +syslog.o: $(hdrdir)/ruby/internal/intern/load.h +syslog.o: $(hdrdir)/ruby/internal/intern/marshal.h +syslog.o: $(hdrdir)/ruby/internal/intern/numeric.h +syslog.o: $(hdrdir)/ruby/internal/intern/object.h +syslog.o: $(hdrdir)/ruby/internal/intern/parse.h +syslog.o: $(hdrdir)/ruby/internal/intern/proc.h +syslog.o: $(hdrdir)/ruby/internal/intern/process.h +syslog.o: $(hdrdir)/ruby/internal/intern/random.h +syslog.o: $(hdrdir)/ruby/internal/intern/range.h +syslog.o: $(hdrdir)/ruby/internal/intern/rational.h +syslog.o: $(hdrdir)/ruby/internal/intern/re.h +syslog.o: $(hdrdir)/ruby/internal/intern/ruby.h +syslog.o: $(hdrdir)/ruby/internal/intern/select.h +syslog.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +syslog.o: $(hdrdir)/ruby/internal/intern/signal.h +syslog.o: $(hdrdir)/ruby/internal/intern/sprintf.h +syslog.o: $(hdrdir)/ruby/internal/intern/string.h +syslog.o: $(hdrdir)/ruby/internal/intern/struct.h +syslog.o: $(hdrdir)/ruby/internal/intern/thread.h +syslog.o: $(hdrdir)/ruby/internal/intern/time.h +syslog.o: $(hdrdir)/ruby/internal/intern/variable.h +syslog.o: $(hdrdir)/ruby/internal/intern/vm.h +syslog.o: $(hdrdir)/ruby/internal/interpreter.h +syslog.o: $(hdrdir)/ruby/internal/iterator.h +syslog.o: $(hdrdir)/ruby/internal/memory.h +syslog.o: $(hdrdir)/ruby/internal/method.h +syslog.o: $(hdrdir)/ruby/internal/module.h +syslog.o: $(hdrdir)/ruby/internal/newobj.h +syslog.o: $(hdrdir)/ruby/internal/rgengc.h +syslog.o: $(hdrdir)/ruby/internal/scan_args.h +syslog.o: $(hdrdir)/ruby/internal/special_consts.h +syslog.o: $(hdrdir)/ruby/internal/static_assert.h +syslog.o: $(hdrdir)/ruby/internal/stdalign.h +syslog.o: $(hdrdir)/ruby/internal/stdbool.h +syslog.o: $(hdrdir)/ruby/internal/symbol.h +syslog.o: $(hdrdir)/ruby/internal/value.h +syslog.o: $(hdrdir)/ruby/internal/value_type.h +syslog.o: $(hdrdir)/ruby/internal/variable.h +syslog.o: $(hdrdir)/ruby/internal/warning_push.h +syslog.o: $(hdrdir)/ruby/internal/xmalloc.h syslog.o: $(hdrdir)/ruby/missing.h syslog.o: $(hdrdir)/ruby/ruby.h syslog.o: $(hdrdir)/ruby/st.h diff --git a/ruby/ext/syslog/syslog.gemspec b/ruby/ext/syslog/syslog.gemspec new file mode 100644 index 000000000..8f73f5ad0 --- /dev/null +++ b/ruby/ext/syslog/syslog.gemspec @@ -0,0 +1,23 @@ +Gem::Specification.new do |spec| + spec.name = "syslog" + spec.version = "0.1.0" + spec.authors = ["Akinori MUSHA"] + spec.email = ["knu@idaemons.org"] + + spec.summary = %q{Ruby interface for the POSIX system logging facility.} + spec.description = %q{Ruby interface for the POSIX system logging facility.} + spec.homepage = "https://github.com/ruby/syslog" + spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0") + spec.licenses = ["Ruby", "BSD-2-Clause"] + + spec.metadata["homepage_uri"] = spec.homepage + spec.metadata["source_code_uri"] = spec.homepage + + spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do + `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } + end + spec.extensions = ["ext/syslog/extconf.rb"] + spec.bindir = "exe" + spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.require_paths = ["lib"] +end diff --git a/ruby/ext/win32/lib/Win32API.rb b/ruby/ext/win32/lib/Win32API.rb deleted file mode 100644 index 97b29fbf7..000000000 --- a/ruby/ext/win32/lib/Win32API.rb +++ /dev/null @@ -1,47 +0,0 @@ -# -*- ruby -*- -# frozen_string_literal: true - -# for backward compatibility -warn "Win32API is deprecated after Ruby 1.9.1; use fiddle directly instead", uplevel: 2 - -require 'fiddle/import' - -class Win32API - DLL = {} - TYPEMAP = {"0" => Fiddle::TYPE_VOID, "S" => Fiddle::TYPE_VOIDP, "I" => Fiddle::TYPE_LONG} - POINTER_TYPE = Fiddle::SIZEOF_VOIDP == Fiddle::SIZEOF_LONG_LONG ? 'q*' : 'l!*' - - WIN32_TYPES = "VPpNnLlIi" - DL_TYPES = "0SSI" - - def initialize(dllname, func, import, export = "0", calltype = :stdcall) - @proto = [import].join.tr(WIN32_TYPES, DL_TYPES).sub(/^(.)0*$/, '\1') - import = @proto.chars.map {|win_type| TYPEMAP[win_type.tr(WIN32_TYPES, DL_TYPES)]} - export = TYPEMAP[export.tr(WIN32_TYPES, DL_TYPES)] - calltype = Fiddle::Importer.const_get(:CALL_TYPE_TO_ABI)[calltype] - - handle = DLL[dllname] ||= - begin - Fiddle.dlopen(dllname) - rescue Fiddle::DLError - raise unless File.extname(dllname).empty? - Fiddle.dlopen(dllname + ".dll") - end - - @func = Fiddle::Function.new(handle[func], import, export, calltype) - rescue Fiddle::DLError => e - raise LoadError, e.message, e.backtrace - end - - def call(*args) - import = @proto.split("") - args.each_with_index do |x, i| - args[i], = [x == 0 ? nil : x].pack("p").unpack(POINTER_TYPE) if import[i] == "S" - args[i], = [x].pack("I").unpack("i") if import[i] == "I" - end - ret, = @func.call(*args) - return ret || 0 - end - - alias Call call -end diff --git a/ruby/ext/win32/lib/win32/importer.rb b/ruby/ext/win32/lib/win32/importer.rb deleted file mode 100644 index 2bef016c2..000000000 --- a/ruby/ext/win32/lib/win32/importer.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: false -require 'fiddle/import' - -module Win32 -end - -Win32.module_eval do - Importer = Fiddle::Importer -end diff --git a/ruby/ext/win32/lib/win32/registry.rb b/ruby/ext/win32/lib/win32/registry.rb index 451499b16..b5b99ff68 100644 --- a/ruby/ext/win32/lib/win32/registry.rb +++ b/ruby/ext/win32/lib/win32/registry.rb @@ -1,5 +1,5 @@ # frozen_string_literal: false -require 'win32/importer' +require 'fiddle/import' module Win32 @@ -169,7 +169,7 @@ module Constants # class Error < ::StandardError module Kernel32 - extend Importer + extend Fiddle::Importer dlload "kernel32.dll" end FormatMessageW = Kernel32.extern "int FormatMessageW(int, void *, int, int, void *, int, void *)", :stdcall @@ -225,7 +225,7 @@ def class # module API include Constants - extend Importer + extend Fiddle::Importer dlload "advapi32.dll" [ "long RegOpenKeyExW(void *, void *, long, long, void *)", @@ -667,14 +667,14 @@ def read(name, *rtype) # # Read a registry value named name and return its value data. - # The class of value is same as #read method returns. + # The class of the value is the same as the #read method returns. # # If the value type is REG_EXPAND_SZ, returns value data whose environment # variables are replaced. # If the value type is neither REG_SZ, REG_MULTI_SZ, REG_DWORD, # REG_DWORD_BIG_ENDIAN, nor REG_QWORD, TypeError is raised. # - # The meaning of rtype is same as #read method. + # The meaning of rtype is the same as for the #read method. # def [](name, *rtype) type, data = read(name, *rtype) diff --git a/ruby/ext/win32/lib/win32/resolv.rb b/ruby/ext/win32/lib/win32/resolv.rb index 1eb70d5dc..d06658f0a 100644 --- a/ruby/ext/win32/lib/win32/resolv.rb +++ b/ruby/ext/win32/lib/win32/resolv.rb @@ -42,19 +42,6 @@ def self.get_resolv_info rescue LoadError end -if [nil].pack("p").size <= 4 # 32bit env - begin - f = Fiddle - osid = f::Handle.new["rb_w32_osid"] - rescue f::DLError # not ix86, cannot be Windows 9x - else - if f::Function.new(osid, [], f::TYPE_INT).call < 2 # VER_PLATFORM_WIN32_NT - require_relative 'resolv9x' - return - end - end -end - module Win32 #==================================================================== # Windows NT diff --git a/ruby/ext/win32/lib/win32/resolv9x.rb b/ruby/ext/win32/lib/win32/resolv9x.rb deleted file mode 100644 index a409d59c0..000000000 --- a/ruby/ext/win32/lib/win32/resolv9x.rb +++ /dev/null @@ -1,253 +0,0 @@ -#==================================================================== -# Windows 9x -#==================================================================== -module Win32 - module Resolv - TCPIP_9X = 'SYSTEM\CurrentControlSet\Services\VxD\MSTCP' - DHCP_9X = 'SYSTEM\CurrentControlSet\Services\VxD\DHCP' - WINDOWS = 'Software\Microsoft\Windows\CurrentVersion' - - class << self - # private - - def get_hosts_dir - Registry::HKEY_LOCAL_MACHINE.open(WINDOWS) do |reg| - reg.read_s_expand('SystemRoot') - end - end - - def get_info - search = [] - nameserver = [] - begin - Registry::HKEY_LOCAL_MACHINE.open(TCPIP_9X) do |reg| - if reg.read_s("EnableDNS") == "1" - domain = reg.read_s("Domain") - ns = reg.read_s("NameServer") - slist = reg.read_s("SearchList") - search << domain unless domain.empty? - search.concat(slist.split(/,\s*/)) - nameserver.concat(ns.split(/[,\s]\s*/)) - end - end - rescue Registry::Error - end - - dhcpinfo = get_dhcpinfo - search.concat(dhcpinfo[0]) - nameserver.concat(dhcpinfo[1]) - [ search, nameserver ] - end - - def get_dhcpinfo - macaddrs = {} - ipaddrs = {} - WsControl.get_iflist.each do |index, macaddr, *ipaddr| - macaddrs[macaddr] = 1 - ipaddr.each { |ipaddr| ipaddrs[ipaddr] = 1 } - end - iflist = [ macaddrs, ipaddrs ] - - search = [] - nameserver = [] - version = -1 - Registry::HKEY_LOCAL_MACHINE.open(DHCP_9X) do |reg| - begin - version = API.unpackdw(reg.read_bin("Version")) - rescue Registry::Error - end - - reg.each_key do |key, | - catch(:not_used) do - reg.open(key) do |regdi| - dom, ns = get_dhcpinfo_key(version, regdi, iflist) - search << dom if dom - nameserver.concat(ns) if ns - end - end - end - end - [ search, nameserver ] - end - - def get_dhcpinfo_95(reg) - dhcp = reg.read_bin("DhcpInfo") - [ - API.unpackdw(dhcp[4..7]), - API.unpackdw(dhcp[8..11]), - 1, - dhcp[45..50], - reg.read_bin("OptionInfo"), - ] - end - - def get_dhcpinfo_98(reg) - [ - API.unpackdw(reg.read_bin("DhcpIPAddress")), - API.unpackdw(reg.read_bin("DhcpSubnetMask")), - API.unpackdw(reg.read_bin("HardwareType")), - reg.read_bin("HardwareAddress"), - reg.read_bin("OptionInfo"), - ] - end - - def get_dhcpinfo_key(version, reg, iflist) - info = case version - when 1 - get_dhcpinfo_95(reg) - when 2 - get_dhcpinfo_98(reg) - else - begin - get_dhcpinfo_98(reg) - rescue Registry::Error - get_dhcpinfo_95(reg) - end - end - ipaddr, netmask, hwtype, macaddr, opt = info - throw :not_used unless - ipaddr and ipaddr != 0 and - netmask and netmask != 0 and - macaddr and macaddr.size == 6 and - hwtype == 1 and - iflist[0][macaddr] and iflist[1][ipaddr] - - size = opt.size - idx = 0 - while idx <= size - opttype = opt[idx] - optsize = opt[idx + 1] - optval = opt[idx + 2, optsize] - case opttype - when 0xFF ## term - break - when 0x0F ## domain - domain = optval.chomp("\0") - when 0x06 ## dns - nameserver = optval.scan(/..../).collect { |addr| - "%d.%d.%d.%d" % addr.unpack('C4') - } - end - idx += optsize + 2 - end - [ domain, nameserver ] - rescue Registry::Error - throw :not_used - end - end - - module WsControl - module WSock32 - extend Importer - dlload "wsock32.dll" - end - WsControl = WSock32.extern "int WsControl(int, int, void *, void *, void *, void *)", :stdcall - WSAGetLastError = WSock32.extern "int WSAGetLastError(void)", :stdcall - - MAX_TDI_ENTITIES = 512 - IPPROTO_TCP = 6 - WSCTL_TCP_QUERY_INFORMATION = 0 - INFO_CLASS_GENERIC = 0x100 - INFO_CLASS_PROTOCOL = 0x200 - INFO_TYPE_PROVIDER = 0x100 - ENTITY_LIST_ID = 0 - GENERIC_ENTITY = 0 - CL_NL_ENTITY = 0x301 - IF_ENTITY = 0x200 - ENTITY_TYPE_ID = 1 - CL_NL_IP = 0x303 - IF_MIB = 0x202 - IF_MIB_STATS_ID = 1 - IP_MIB_ADDRTABLE_ENTRY_ID = 0x102 - - def self.wsctl(tei_entity, tei_instance, - toi_class, toi_type, toi_id, - buffsize) - reqinfo = [ - ## TDIEntityID - tei_entity, tei_instance, - ## TDIObjectID - toi_class, toi_type, toi_id, - ## TCP_REQUEST_INFORMATION_EX - "" - ].pack('VVVVVa16') - reqsize = API.packdw(reqinfo.size) - buff = "\0" * buffsize - buffsize = API.packdw(buffsize) - result = WsControl.call( - IPPROTO_TCP, - WSCTL_TCP_QUERY_INFORMATION, - reqinfo, reqsize, - buff, buffsize) - if result != 0 - raise RuntimeError, "WsControl failed.(#{result})" - end - [ buff, API.unpackdw(buffsize) ] - end - private_class_method :wsctl - - def self.get_iflist - # Get TDI Entity List - entities, size = - wsctl(GENERIC_ENTITY, 0, - INFO_CLASS_GENERIC, - INFO_TYPE_PROVIDER, - ENTITY_LIST_ID, - MAX_TDI_ENTITIES * 8) # sizeof(TDIEntityID) - entities = entities[0, size]. - scan(/.{8}/). - collect { |e| e.unpack('VV') } - - # Get MIB Interface List - iflist = [] - ifcount = 0 - entities.each do |entity, instance| - if( (entity & IF_ENTITY)>0 ) - ifcount += 1 - etype, = wsctl(entity, instance, - INFO_CLASS_GENERIC, - INFO_TYPE_PROVIDER, - ENTITY_TYPE_ID, - 4) - if( (API.unpackdw(etype) & IF_MIB)==IF_MIB ) - ifentry, = wsctl(entity, instance, - INFO_CLASS_PROTOCOL, - INFO_TYPE_PROVIDER, - IF_MIB_STATS_ID, - 21 * 4 + 8 + 130) # sizeof(IFEntry) - iflist << [ - API.unpackdw(ifentry[0,4]), - ifentry[20, 6] - ] - end - end - end - - # Get IP Addresses - entities.each do |entity, instance| - if entity == CL_NL_ENTITY - etype, = wsctl(entity, instance, - INFO_CLASS_GENERIC, - INFO_TYPE_PROVIDER, - ENTITY_TYPE_ID, - 4) - if API.unpackdw(etype) == CL_NL_IP - ipentries, = wsctl(entity, instance, - INFO_CLASS_PROTOCOL, - INFO_TYPE_PROVIDER, - IP_MIB_ADDRTABLE_ENTRY_ID, - 24 * (ifcount+1)) # sizeof(IPAddrEntry) - ipentries.scan(/.{24}/) do |ipentry| - ipaddr, index = ipentry.unpack('VV') - if ifitem = iflist.assoc(index) - ifitem << ipaddr - end - end - end - end - end - iflist - end - end - end -end diff --git a/ruby/ext/win32/lib/win32/sspi.rb b/ruby/ext/win32/lib/win32/sspi.rb index 8103893d7..20205fd4d 100644 --- a/ruby/ext/win32/lib/win32/sspi.rb +++ b/ruby/ext/win32/lib/win32/sspi.rb @@ -11,321 +11,328 @@ # Ruby Distribution License or GNU General Public License. # -require 'Win32API' +require 'fiddle/import' # Implements bindings to Win32 SSPI functions, focused on authentication to a proxy server over HTTP. module Win32 - module SSPI - # Specifies how credential structure requested will be used. Only SECPKG_CRED_OUTBOUND is used - # here. - SECPKG_CRED_INBOUND = 0x00000001 - SECPKG_CRED_OUTBOUND = 0x00000002 - SECPKG_CRED_BOTH = 0x00000003 - - # Format of token. NETWORK format is used here. - SECURITY_NATIVE_DREP = 0x00000010 - SECURITY_NETWORK_DREP = 0x00000000 - - # InitializeSecurityContext Requirement flags - ISC_REQ_REPLAY_DETECT = 0x00000004 - ISC_REQ_SEQUENCE_DETECT = 0x00000008 - ISC_REQ_CONFIDENTIALITY = 0x00000010 - ISC_REQ_USE_SESSION_KEY = 0x00000020 - ISC_REQ_PROMPT_FOR_CREDS = 0x00000040 - ISC_REQ_CONNECTION = 0x00000800 - - # Win32 API Functions. Uses Win32API to bind methods to constants contained in class. - module API - # Can be called with AcquireCredentialsHandle.call() - AcquireCredentialsHandle = Win32API.new("secur32", "AcquireCredentialsHandle", 'ppLpppppp', 'L') - # Can be called with InitializeSecurityContext.call() - InitializeSecurityContext = Win32API.new("secur32", "InitializeSecurityContext", 'pppLLLpLpppp', 'L') - # Can be called with DeleteSecurityContext.call() - DeleteSecurityContext = Win32API.new("secur32", "DeleteSecurityContext", 'P', 'L') - # Can be called with FreeCredentialsHandle.call() - FreeCredentialsHandle = Win32API.new("secur32", "FreeCredentialsHandle", 'P', 'L') - end - - # SecHandle struct - class SecurityHandle - def upper - @struct.unpack("LL")[1] - end - - def lower - @struct.unpack("LL")[0] - end - - def to_p - @struct ||= "\0" * 8 - end - end - - # Some familiar aliases for the SecHandle structure - CredHandle = CtxtHandle = SecurityHandle - - # TimeStamp struct - class TimeStamp - attr_reader :struct - - def to_p - @struct ||= "\0" * 8 - end - end - - # Creates binary representations of a SecBufferDesc structure, - # including the SecBuffer contained inside. - class SecurityBuffer - - SECBUFFER_TOKEN = 2 # Security token - - TOKENBUFSIZE = 12288 - SECBUFFER_VERSION = 0 - - def initialize(buffer = nil) - @buffer = buffer || "\0" * TOKENBUFSIZE - @bufferSize = @buffer.length - @type = SECBUFFER_TOKEN - end - - def bufferSize - unpack - @bufferSize - end - - def bufferType - unpack - @type - end - - def token - unpack - @buffer - end - - def to_p - # Assumption is that when to_p is called we are going to get a packed structure. Therefore, - # set @unpacked back to nil so we know to unpack when accessors are next accessed. - @unpacked = nil - # Assignment of inner structure to variable is very important here. Without it, - # will not be able to unpack changes to the structure. Alternative, nested unpacks, - # does not work (i.e. @struct.unpack("LLP12")[2].unpack("LLP12") results in "no associated pointer") - @sec_buffer ||= [@bufferSize, @type, @buffer].pack("LLP") - @struct ||= [SECBUFFER_VERSION, 1, @sec_buffer].pack("LLP") - end - - private - - # Unpacks the SecurityBufferDesc structure into member variables. We - # only want to do this once per struct, so the struct is deleted - # after unpacking. - def unpack - if ! @unpacked && @sec_buffer && @struct - @bufferSize, @type = @sec_buffer.unpack("LL") - @buffer = @sec_buffer.unpack("LLP#{@bufferSize}")[2] - @struct = nil - @sec_buffer = nil - @unpacked = true - end - end - end - - # SEC_WINNT_AUTH_IDENTITY structure - class Identity - SEC_WINNT_AUTH_IDENTITY_ANSI = 0x1 - - attr_accessor :user, :domain, :password - - def initialize(user = nil, domain = nil, password = nil) - @user = user - @domain = domain - @password = password - @flags = SEC_WINNT_AUTH_IDENTITY_ANSI - end - - def to_p - [@user, @user ? @user.length : 0, - @domain, @domain ? @domain.length : 0, - @password, @password ? @password.length : 0, - @flags].pack("PLPLPLL") - end - end - - # Takes a return result from an SSPI function and interprets the value. - class SSPIResult - # Good results - SEC_E_OK = 0x00000000 - SEC_I_CONTINUE_NEEDED = 0x00090312 - - # These are generally returned by InitializeSecurityContext - SEC_E_INSUFFICIENT_MEMORY = 0x80090300 - SEC_E_INTERNAL_ERROR = 0x80090304 - SEC_E_INVALID_HANDLE = 0x80090301 - SEC_E_INVALID_TOKEN = 0x80090308 - SEC_E_LOGON_DENIED = 0x8009030C - SEC_E_NO_AUTHENTICATING_AUTHORITY = 0x80090311 - SEC_E_NO_CREDENTIALS = 0x8009030E - SEC_E_TARGET_UNKNOWN = 0x80090303 - SEC_E_UNSUPPORTED_FUNCTION = 0x80090302 - SEC_E_WRONG_PRINCIPAL = 0x80090322 - - # These are generally returned by AcquireCredentialsHandle - SEC_E_NOT_OWNER = 0x80090306 - SEC_E_SECPKG_NOT_FOUND = 0x80090305 - SEC_E_UNKNOWN_CREDENTIALS = 0x8009030D - - @@map = {} - constants.each { |v| @@map[self.const_get(v.to_s)] = v } - - attr_reader :value - - def initialize(value) - # convert to unsigned long - value = [value].pack("L").unpack("L").first - raise "#{value.to_s(16)} is not a recognized result" unless @@map.has_key? value - @value = value - end - - def to_s - @@map[@value].to_s - end - - def ok? - @value == SEC_I_CONTINUE_NEEDED || @value == SEC_E_OK - end - - def ==(other) - if other.is_a?(SSPIResult) - @value == other.value - elsif other.is_a?(Fixnum) - @value == @@map[other] - else - false - end - end - end - - # Handles "Negotiate" type authentication. Geared towards authenticating with a proxy server over HTTP - class NegotiateAuth - attr_accessor :credentials, :context, :contextAttributes, :user, :domain - - # Default request flags for SSPI functions - REQUEST_FLAGS = ISC_REQ_CONFIDENTIALITY | ISC_REQ_REPLAY_DETECT | ISC_REQ_CONNECTION - - # NTLM tokens start with this header always. Encoding alone adds "==" and newline, so remove those + module SSPI + # Specifies how credential structure requested will be used. Only SECPKG_CRED_OUTBOUND is used + # here. + SECPKG_CRED_INBOUND = 0x00000001 + SECPKG_CRED_OUTBOUND = 0x00000002 + SECPKG_CRED_BOTH = 0x00000003 + + # Format of token. NETWORK format is used here. + SECURITY_NATIVE_DREP = 0x00000010 + SECURITY_NETWORK_DREP = 0x00000000 + + # InitializeSecurityContext Requirement flags + ISC_REQ_REPLAY_DETECT = 0x00000004 + ISC_REQ_SEQUENCE_DETECT = 0x00000008 + ISC_REQ_CONFIDENTIALITY = 0x00000010 + ISC_REQ_USE_SESSION_KEY = 0x00000020 + ISC_REQ_PROMPT_FOR_CREDS = 0x00000040 + ISC_REQ_CONNECTION = 0x00000800 + + # Win32 API Functions. Uses Win32API to bind methods to constants contained in class. + module API + extend Fiddle::Importer + dlload "secur32.dll" + [ + # Can be called with AcquireCredentialsHandleA.call() + "unsigned long AcquireCredentialsHandleA(void *, void *, unsigned long, void *, void *, void *, void *, void *, void *)", + # Can be called with InitializeSecurityContextA.call() + "unsigned long InitializeSecurityContextA(void *, void *, void *, unsigned long, unsigned long, unsigned long, void *, unsigned long, void *, void *, void *, void *)", + # Can be called with DeleteSecurityContext.call() + "unsigned long DeleteSecurityContext(void *)", + # Can be called with FreeCredentialsHandle.call() + "unsigned long FreeCredentialsHandle(void *)" + ].each do |fn| + cfunc = extern fn, :stdcall + const_set cfunc.name.intern, cfunc + end + end + + # SecHandle struct + class SecurityHandle + def upper + @struct.unpack("LL")[1] + end + + def lower + @struct.unpack("LL")[0] + end + + def to_p + @struct ||= "\0" * 8 + end + end + + # Some familiar aliases for the SecHandle structure + CredHandle = CtxtHandle = SecurityHandle + + # TimeStamp struct + class TimeStamp + attr_reader :struct + + def to_p + @struct ||= "\0" * 8 + end + end + + # Creates binary representations of a SecBufferDesc structure, + # including the SecBuffer contained inside. + class SecurityBuffer + + SECBUFFER_TOKEN = 2 # Security token + + TOKENBUFSIZE = 12288 + SECBUFFER_VERSION = 0 + + def initialize(buffer = nil) + @buffer = buffer || "\0" * TOKENBUFSIZE + @bufferSize = @buffer.length + @type = SECBUFFER_TOKEN + end + + def bufferSize + unpack + @bufferSize + end + + def bufferType + unpack + @type + end + + def token + unpack + @buffer + end + + def to_p + # Assumption is that when to_p is called we are going to get a packed structure. Therefore, + # set @unpacked back to nil so we know to unpack when accessors are next accessed. + @unpacked = nil + # Assignment of inner structure to variable is very important here. Without it, + # will not be able to unpack changes to the structure. Alternative, nested unpacks, + # does not work (i.e. @struct.unpack("LLP12")[2].unpack("LLP12") results in "no associated pointer") + @sec_buffer ||= [@bufferSize, @type, @buffer].pack("LLP") + @struct ||= [SECBUFFER_VERSION, 1, @sec_buffer].pack("LLP") + end + + private + + # Unpacks the SecurityBufferDesc structure into member variables. We + # only want to do this once per struct, so the struct is deleted + # after unpacking. + def unpack + if ! @unpacked && @sec_buffer && @struct + @bufferSize, @type = @sec_buffer.unpack("LL") + @buffer = @sec_buffer.unpack("LLP#{@bufferSize}")[2] + @struct = nil + @sec_buffer = nil + @unpacked = true + end + end + end + + # SEC_WINNT_AUTH_IDENTITY structure + class Identity + SEC_WINNT_AUTH_IDENTITY_ANSI = 0x1 + + attr_accessor :user, :domain, :password + + def initialize(user = nil, domain = nil, password = nil) + @user = user + @domain = domain + @password = password + @flags = SEC_WINNT_AUTH_IDENTITY_ANSI + end + + def to_p + [@user, @user ? @user.length : 0, + @domain, @domain ? @domain.length : 0, + @password, @password ? @password.length : 0, + @flags].pack("PLPLPLL") + end + end + + # Takes a return result from an SSPI function and interprets the value. + class SSPIResult + # Good results + SEC_E_OK = 0x00000000 + SEC_I_CONTINUE_NEEDED = 0x00090312 + + # These are generally returned by InitializeSecurityContext + SEC_E_INSUFFICIENT_MEMORY = 0x80090300 + SEC_E_INTERNAL_ERROR = 0x80090304 + SEC_E_INVALID_HANDLE = 0x80090301 + SEC_E_INVALID_TOKEN = 0x80090308 + SEC_E_LOGON_DENIED = 0x8009030C + SEC_E_NO_AUTHENTICATING_AUTHORITY = 0x80090311 + SEC_E_NO_CREDENTIALS = 0x8009030E + SEC_E_TARGET_UNKNOWN = 0x80090303 + SEC_E_UNSUPPORTED_FUNCTION = 0x80090302 + SEC_E_WRONG_PRINCIPAL = 0x80090322 + + # These are generally returned by AcquireCredentialsHandle + SEC_E_NOT_OWNER = 0x80090306 + SEC_E_SECPKG_NOT_FOUND = 0x80090305 + SEC_E_UNKNOWN_CREDENTIALS = 0x8009030D + + @@map = {} + constants.each { |v| @@map[self.const_get(v.to_s)] = v } + + attr_reader :value + + def initialize(value) + # convert to unsigned long + value = [value].pack("L").unpack("L").first + raise "#{value.to_s(16)} is not a recognized result" unless @@map.has_key? value + @value = value + end + + def to_s + @@map[@value].to_s + end + + def ok? + @value == SEC_I_CONTINUE_NEEDED || @value == SEC_E_OK + end + + def ==(other) + if other.is_a?(SSPIResult) + @value == other.value + elsif other.is_a?(Fixnum) + @value == @@map[other] + else + false + end + end + end + + # Handles "Negotiate" type authentication. Geared towards authenticating with a proxy server over HTTP + class NegotiateAuth + attr_accessor :credentials, :context, :contextAttributes, :user, :domain + + # Default request flags for SSPI functions + REQUEST_FLAGS = ISC_REQ_CONFIDENTIALITY | ISC_REQ_REPLAY_DETECT | ISC_REQ_CONNECTION + + # NTLM tokens start with this header always. Encoding alone adds "==" and newline, so remove those B64_TOKEN_PREFIX = ["NTLMSSP"].pack("m").delete("=\n") - # Given a connection and a request path, performs authentication as the current user and returns - # the response from a GET request. The connnection should be a Net::HTTP object, and it should - # have been constructed using the Net::HTTP.Proxy method, but anything that responds to "get" will work. - # If a user and domain are given, will authenticate as the given user. - # Returns the response received from the get method (usually Net::HTTPResponse) - def NegotiateAuth.proxy_auth_get(http, path, user = nil, domain = nil) - raise "http must respond to :get" unless http.respond_to?(:get) - nego_auth = self.new user, domain - - resp = http.get path, { "Proxy-Authorization" => "Negotiate " + nego_auth.get_initial_token } - if resp["Proxy-Authenticate"] - resp = http.get path, { "Proxy-Authorization" => "Negotiate " + nego_auth.complete_authentication(resp["Proxy-Authenticate"].split(" ").last.strip) } - end - - resp - end - - # Creates a new instance ready for authentication as the given user in the given domain. - # Defaults to current user and domain as defined by ENV["USERDOMAIN"] and ENV["USERNAME"] if - # no arguments are supplied. - def initialize(user = nil, domain = nil) - if user.nil? && domain.nil? && ENV["USERNAME"].nil? && ENV["USERDOMAIN"].nil? - raise "A username or domain must be supplied since they cannot be retrieved from the environment" - end - - @user = user || ENV["USERNAME"] - @domain = domain || ENV["USERDOMAIN"] - end - - # Gets the initial Negotiate token. Returns it as a base64 encoded string suitable for use in HTTP. Can - # be easily decoded, however. - def get_initial_token - raise "This object is no longer usable because its resources have been freed." if @cleaned_up - get_credentials - - outputBuffer = SecurityBuffer.new - @context = CtxtHandle.new - @contextAttributes = "\0" * 4 - - result = SSPIResult.new(API::InitializeSecurityContext.call(@credentials.to_p, nil, nil, - REQUEST_FLAGS,0, SECURITY_NETWORK_DREP, nil, 0, @context.to_p, outputBuffer.to_p, @contextAttributes, TimeStamp.new.to_p)) - - if result.ok? then - return encode_token(outputBuffer.token) - else - raise "Error: #{result.to_s}" - end - end - - # Takes a token and gets the next token in the Negotiate authentication chain. Token can be Base64 encoded or not. - # The token can include the "Negotiate" header and it will be stripped. - # Does not indicate if SEC_I_CONTINUE or SEC_E_OK was returned. - # Token returned is Base64 encoded w/ all new lines removed. - def complete_authentication(token) - raise "This object is no longer usable because its resources have been freed." if @cleaned_up - - # Nil token OK, just set it to empty string - token = "" if token.nil? - - if token.include? "Negotiate" - # If the Negotiate prefix is passed in, assume we are seeing "Negotiate " and get the token. - token = token.split(" ").last - end - - if token.include? B64_TOKEN_PREFIX - # indicates base64 encoded token + # Given a connection and a request path, performs authentication as the current user and returns + # the response from a GET request. The connection should be a Net::HTTP object, and it should + # have been constructed using the Net::HTTP.Proxy method, but anything that responds to "get" will work. + # If a user and domain are given, will authenticate as the given user. + # Returns the response received from the get method (usually Net::HTTPResponse) + def NegotiateAuth.proxy_auth_get(http, path, user = nil, domain = nil) + raise "http must respond to :get" unless http.respond_to?(:get) + nego_auth = self.new user, domain + + resp = http.get path, { "Proxy-Authorization" => "Negotiate " + nego_auth.get_initial_token } + if resp["Proxy-Authenticate"] + resp = http.get path, { "Proxy-Authorization" => "Negotiate " + nego_auth.complete_authentication(resp["Proxy-Authenticate"].split(" ").last.strip) } + end + + resp + end + + # Creates a new instance ready for authentication as the given user in the given domain. + # Defaults to current user and domain as defined by ENV["USERDOMAIN"] and ENV["USERNAME"] if + # no arguments are supplied. + def initialize(user = nil, domain = nil) + if user.nil? && domain.nil? && ENV["USERNAME"].nil? && ENV["USERDOMAIN"].nil? + raise "A username or domain must be supplied since they cannot be retrieved from the environment" + end + + @user = user || ENV["USERNAME"] + @domain = domain || ENV["USERDOMAIN"] + end + + # Gets the initial Negotiate token. Returns it as a base64 encoded string suitable for use in HTTP. Can + # be easily decoded, however. + def get_initial_token + raise "This object is no longer usable because its resources have been freed." if @cleaned_up + get_credentials + + outputBuffer = SecurityBuffer.new + @context = CtxtHandle.new + @contextAttributes = "\0" * 4 + + result = SSPIResult.new(API::InitializeSecurityContextA.call(@credentials.to_p, nil, nil, + REQUEST_FLAGS,0, SECURITY_NETWORK_DREP, nil, 0, @context.to_p, outputBuffer.to_p, @contextAttributes, TimeStamp.new.to_p)) + + if result.ok? then + return encode_token(outputBuffer.token) + else + raise "Error: #{result.to_s}" + end + end + + # Takes a token and gets the next token in the Negotiate authentication chain. Token can be Base64 encoded or not. + # The token can include the "Negotiate" header and it will be stripped. + # Does not indicate if SEC_I_CONTINUE or SEC_E_OK was returned. + # Token returned is Base64 encoded w/ all new lines removed. + def complete_authentication(token) + raise "This object is no longer usable because its resources have been freed." if @cleaned_up + + # Nil token OK, just set it to empty string + token = "" if token.nil? + + if token.include? "Negotiate" + # If the Negotiate prefix is passed in, assume we are seeing "Negotiate " and get the token. + token = token.split(" ").last + end + + if token.include? B64_TOKEN_PREFIX + # indicates base64 encoded token token = token.strip.unpack("m")[0] - end - - outputBuffer = SecurityBuffer.new - result = SSPIResult.new(API::InitializeSecurityContext.call(@credentials.to_p, @context.to_p, nil, - REQUEST_FLAGS, 0, SECURITY_NETWORK_DREP, SecurityBuffer.new(token).to_p, 0, - @context.to_p, - outputBuffer.to_p, @contextAttributes, TimeStamp.new.to_p)) - - if result.ok? then - return encode_token(outputBuffer.token) - else - raise "Error: #{result.to_s}" - end - ensure - # need to make sure we don't clean up if we've already cleaned up. - clean_up unless @cleaned_up - end - - private - - def clean_up - # free structures allocated - @cleaned_up = true - API::FreeCredentialsHandle.call(@credentials.to_p) - API::DeleteSecurityContext.call(@context.to_p) - @context = nil - @credentials = nil - @contextAttributes = nil - end - - # Gets credentials based on user, domain or both. If both are nil, an error occurs - def get_credentials - @credentials = CredHandle.new - ts = TimeStamp.new - @identity = Identity.new @user, @domain - result = SSPIResult.new(API::AcquireCredentialsHandle.call(nil, "Negotiate", SECPKG_CRED_OUTBOUND, nil, @identity.to_p, - nil, nil, @credentials.to_p, ts.to_p)) - raise "Error acquire credentials: #{result}" unless result.ok? - end - - def encode_token(t) - # encode64 will add newlines every 60 characters so we need to remove those. + end + + outputBuffer = SecurityBuffer.new + result = SSPIResult.new(API::InitializeSecurityContext.call(@credentials.to_p, @context.to_p, nil, + REQUEST_FLAGS, 0, SECURITY_NETWORK_DREP, SecurityBuffer.new(token).to_p, 0, + @context.to_p, + outputBuffer.to_p, @contextAttributes, TimeStamp.new.to_p)) + + if result.ok? then + return encode_token(outputBuffer.token) + else + raise "Error: #{result.to_s}" + end + ensure + # need to make sure we don't clean up if we've already cleaned up. + clean_up unless @cleaned_up + end + + private + + def clean_up + # free structures allocated + @cleaned_up = true + API::FreeCredentialsHandle.call(@credentials.to_p) + API::DeleteSecurityContext.call(@context.to_p) + @context = nil + @credentials = nil + @contextAttributes = nil + end + + # Gets credentials based on user, domain or both. If both are nil, an error occurs + def get_credentials + @credentials = CredHandle.new + ts = TimeStamp.new + @identity = Identity.new @user, @domain + result = SSPIResult.new(API::AcquireCredentialsHandleA.call(nil, "Negotiate", SECPKG_CRED_OUTBOUND, nil, @identity.to_p, + nil, nil, @credentials.to_p, ts.to_p)) + raise "Error acquire credentials: #{result}" unless result.ok? + end + + def encode_token(t) + # encode64 will add newlines every 60 characters so we need to remove those. [t].pack("m").delete("\n") - end - end - end + end + end + end end diff --git a/ruby/ext/win32ole/sample/xml.rb b/ruby/ext/win32ole/sample/xml.rb index 36c3db32e..5a239c933 100644 --- a/ruby/ext/win32ole/sample/xml.rb +++ b/ruby/ext/win32ole/sample/xml.rb @@ -1032,8 +1032,8 @@ def loadXML(arg0) end # VOID save - # save the document to a specified desination - # VARIANT arg0 --- desination [IN] + # save the document to a specified destination + # VARIANT arg0 --- destination [IN] def save(arg0) ret = _invoke(64, [arg0], [VT_VARIANT]) @lastargs = WIN32OLE::ARGV @@ -6224,8 +6224,8 @@ def loadXML(arg0) end # VOID save - # save the document to a specified desination - # VARIANT arg0 --- desination [IN] + # save the document to a specified destination + # VARIANT arg0 --- destination [IN] def save(arg0) ret = @dispatch._invoke(64, [arg0], [VT_VARIANT]) @lastargs = WIN32OLE::ARGV @@ -6831,8 +6831,8 @@ def loadXML(arg0) end # VOID save - # save the document to a specified desination - # VARIANT arg0 --- desination [IN] + # save the document to a specified destination + # VARIANT arg0 --- destination [IN] def save(arg0) ret = @dispatch._invoke(64, [arg0], [VT_VARIANT]) @lastargs = WIN32OLE::ARGV diff --git a/ruby/ext/win32ole/win32ole.c b/ruby/ext/win32ole/win32ole.c index f20bfc84f..5ad6a80eb 100644 --- a/ruby/ext/win32ole/win32ole.c +++ b/ruby/ext/win32ole/win32ole.c @@ -507,6 +507,7 @@ static UINT ole_encoding2cp(rb_encoding *enc) ENC_MACHING_CP(enc, "GB2312", 20936); ENC_MACHING_CP(enc, "GBK", 936); ENC_MACHING_CP(enc, "IBM437", 437); + ENC_MACHING_CP(enc, "IBM720", 720); ENC_MACHING_CP(enc, "IBM737", 737); ENC_MACHING_CP(enc, "IBM775", 775); ENC_MACHING_CP(enc, "IBM852", 852); @@ -994,7 +995,7 @@ ole_val2variant_ex(VALUE val, VARIANT *var, VARTYPE vt) } return; } -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) switch(vt & ~VT_BYREF) { case VT_I8: V_VT(var) = VT_I8; @@ -1008,7 +1009,7 @@ ole_val2variant_ex(VALUE val, VARIANT *var, VARTYPE vt) ole_val2variant2(val, var); break; } -#else /* (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) */ +#else /* (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) */ ole_val2variant2(val, var); #endif } @@ -1062,7 +1063,7 @@ get_ptr_of_variant(VARIANT *pvar) case VT_R8: return &V_R8(pvar); break; -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) case VT_I8: return &V_I8(pvar); break; @@ -1549,10 +1550,10 @@ ole_variant2val(VARIANT *pvar) obj = RB_INT2NUM((long)V_UINT(pvar)); break; -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) case VT_I8: if(V_ISBYREF(pvar)) -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) #ifdef V_I8REF obj = I8_2_NUM(*V_I8REF(pvar)); #endif @@ -1564,7 +1565,7 @@ ole_variant2val(VARIANT *pvar) break; case VT_UI8: if(V_ISBYREF(pvar)) -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) #ifdef V_UI8REF obj = UI8_2_NUM(*V_UI8REF(pvar)); #endif @@ -1574,7 +1575,7 @@ ole_variant2val(VARIANT *pvar) else obj = UI8_2_NUM(V_UI8(pvar)); break; -#endif /* (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) */ +#endif /* (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) */ case VT_R4: if(V_ISBYREF(pvar)) @@ -2651,7 +2652,7 @@ ole_invoke(int argc, VALUE *argv, VALUE self, USHORT wFlags, BOOL is_bracket) /*------------------------------------------ hash object ==> named dispatch parameters --------------------------------------------*/ - cNamedArgs = rb_long2int(RHASH_SIZE(param)); + cNamedArgs = rb_long2int((long)RHASH_SIZE(param)); op.dp.cArgs = cNamedArgs + argc - 2; op.pNamedArgs = ALLOCA_N(OLECHAR*, cNamedArgs + 1); op.dp.rgvarg = ALLOCA_N(VARIANTARG, op.dp.cArgs); @@ -3752,7 +3753,7 @@ ole_typedesc2val(ITypeInfo *pTypeInfo, TYPEDESC *pTypeDesc, VALUE typedetails) case VT_UI4: typestr = rb_str_new2("UI4"); break; -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) case VT_I8: typestr = rb_str_new2("I8"); break; @@ -3962,6 +3963,7 @@ check_nano_server(void) } } +LCID cWIN32OLE_lcid; void Init_win32ole(void) diff --git a/ruby/ext/win32ole/win32ole.gemspec b/ruby/ext/win32ole/win32ole.gemspec new file mode 100644 index 000000000..977555c98 --- /dev/null +++ b/ruby/ext/win32ole/win32ole.gemspec @@ -0,0 +1,22 @@ +Gem::Specification.new do |spec| + spec.name = "win32ole" + spec.version = "1.8.8" + spec.authors = ["Masaki Suketa"] + spec.email = ["suke@ruby-lang.org"] + + spec.summary = %q{Provides an interface for OLE Automation in Ruby} + spec.description = spec.summary + spec.homepage = "https://github.com/ruby/win32ole" + spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0") + spec.licenses = ["Ruby", "BSD-2-Clause"] + + spec.metadata["homepage_uri"] = spec.homepage + spec.metadata["source_code_uri"] = spec.homepage + + spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do + `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } + end + spec.bindir = "exe" + spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.require_paths = ["lib"] +end diff --git a/ruby/ext/win32ole/win32ole.h b/ruby/ext/win32ole/win32ole.h index c01993039..cd627ef76 100644 --- a/ruby/ext/win32ole/win32ole.h +++ b/ruby/ext/win32ole/win32ole.h @@ -112,8 +112,8 @@ struct oledata { IDispatch *pDispatch; }; -VALUE cWIN32OLE; -LCID cWIN32OLE_lcid; +extern VALUE cWIN32OLE; +extern LCID cWIN32OLE_lcid; struct oledata *oledata_get_struct(VALUE obj); LPWSTR ole_vstr2wc(VALUE vstr); diff --git a/ruby/ext/win32ole/win32ole_error.c b/ruby/ext/win32ole/win32ole_error.c index 022527617..2bb515626 100644 --- a/ruby/ext/win32ole/win32ole_error.c +++ b/ruby/ext/win32ole/win32ole_error.c @@ -60,6 +60,9 @@ ole_raise(HRESULT hr, VALUE ecs, const char *fmt, ...) rb_exc_raise(rb_exc_new_str(ecs, msg)); } +VALUE eWIN32OLERuntimeError; +VALUE eWIN32OLEQueryInterfaceError; + void Init_win32ole_error(void) { diff --git a/ruby/ext/win32ole/win32ole_error.h b/ruby/ext/win32ole/win32ole_error.h index 296eb101a..a2f329856 100644 --- a/ruby/ext/win32ole/win32ole_error.h +++ b/ruby/ext/win32ole/win32ole_error.h @@ -1,8 +1,8 @@ #ifndef WIN32OLE_ERROR_H #define WIN32OLE_ERROR_H 1 -VALUE eWIN32OLERuntimeError; -VALUE eWIN32OLEQueryInterfaceError; +extern VALUE eWIN32OLERuntimeError; +extern VALUE eWIN32OLEQueryInterfaceError; NORETURN(PRINTF_ARGS(void ole_raise(HRESULT hr, VALUE ecs, const char *fmt, ...), 3, 4)); void Init_win32ole_error(void); diff --git a/ruby/ext/win32ole/win32ole_method.c b/ruby/ext/win32ole/win32ole_method.c index ffa932465..6ed5def6d 100644 --- a/ruby/ext/win32ole/win32ole_method.c +++ b/ruby/ext/win32ole/win32ole_method.c @@ -437,7 +437,7 @@ ole_method_invoke_kind(ITypeInfo *pTypeInfo, UINT method_index) /* * call-seq: - * WIN32OLE_MTHOD#invkind + * WIN32OLE_METHOD#invkind * * Returns the method invoke kind. * tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbooks') @@ -923,6 +923,8 @@ folemethod_inspect(VALUE self) return default_inspect(self, "WIN32OLE_METHOD"); } +VALUE cWIN32OLE_METHOD; + void Init_win32ole_method(void) { cWIN32OLE_METHOD = rb_define_class("WIN32OLE_METHOD", rb_cObject); diff --git a/ruby/ext/win32ole/win32ole_method.h b/ruby/ext/win32ole/win32ole_method.h index ff2898ebe..ef907d2fa 100644 --- a/ruby/ext/win32ole/win32ole_method.h +++ b/ruby/ext/win32ole/win32ole_method.h @@ -7,7 +7,7 @@ struct olemethoddata { UINT index; }; -VALUE cWIN32OLE_METHOD; +extern VALUE cWIN32OLE_METHOD; VALUE folemethod_s_allocate(VALUE klass); VALUE ole_methods_from_typeinfo(ITypeInfo *pTypeInfo, int mask); VALUE create_win32ole_method(ITypeInfo *pTypeInfo, VALUE name); diff --git a/ruby/ext/win32ole/win32ole_record.c b/ruby/ext/win32ole/win32ole_record.c index e8838832a..03523bc47 100644 --- a/ruby/ext/win32ole/win32ole_record.c +++ b/ruby/ext/win32ole/win32ole_record.c @@ -589,6 +589,8 @@ folerecord_inspect(VALUE self) field); } +VALUE cWIN32OLE_RECORD; + void Init_win32ole_record(void) { diff --git a/ruby/ext/win32ole/win32ole_record.h b/ruby/ext/win32ole/win32ole_record.h index ea431e91f..ab1df0ee7 100644 --- a/ruby/ext/win32ole/win32ole_record.h +++ b/ruby/ext/win32ole/win32ole_record.h @@ -1,7 +1,7 @@ #ifndef WIN32OLE_RECORD_H #define WIN32OLE_RECORD_H 1 -VALUE cWIN32OLE_RECORD; +extern VALUE cWIN32OLE_RECORD; void ole_rec2variant(VALUE rec, VARIANT *var); void olerecord_set_ivar(VALUE obj, IRecordInfo *pri, void *prec); VALUE create_win32ole_record(IRecordInfo *pri, void *prec); diff --git a/ruby/ext/win32ole/win32ole_type.c b/ruby/ext/win32ole/win32ole_type.c index e6ac402ec..48dbc9dbd 100644 --- a/ruby/ext/win32ole/win32ole_type.c +++ b/ruby/ext/win32ole/win32ole_type.c @@ -56,7 +56,7 @@ static const rb_data_type_t oletype_datatype = { /* * Document-class: WIN32OLE_TYPE * - * WIN32OLE_TYPE objects represent OLE type libarary information. + * WIN32OLE_TYPE objects represent OLE type library information. */ static void @@ -883,6 +883,8 @@ foletype_inspect(VALUE self) return default_inspect(self, "WIN32OLE_TYPE"); } +VALUE cWIN32OLE_TYPE; + void Init_win32ole_type(void) { cWIN32OLE_TYPE = rb_define_class("WIN32OLE_TYPE", rb_cObject); diff --git a/ruby/ext/win32ole/win32ole_type.h b/ruby/ext/win32ole/win32ole_type.h index a26bf3e04..87b551e50 100644 --- a/ruby/ext/win32ole/win32ole_type.h +++ b/ruby/ext/win32ole/win32ole_type.h @@ -1,6 +1,6 @@ #ifndef WIN32OLE_TYPE_H #define WIN32OLE_TYPE_H 1 -VALUE cWIN32OLE_TYPE; +extern VALUE cWIN32OLE_TYPE; VALUE create_win32ole_type(ITypeInfo *pTypeInfo, VALUE name); ITypeInfo *itypeinfo(VALUE self); VALUE ole_type_from_itypeinfo(ITypeInfo *pTypeInfo); diff --git a/ruby/ext/win32ole/win32ole_typelib.c b/ruby/ext/win32ole/win32ole_typelib.c index 35376c644..d89f181e0 100644 --- a/ruby/ext/win32ole/win32ole_typelib.c +++ b/ruby/ext/win32ole/win32ole_typelib.c @@ -822,6 +822,8 @@ foletypelib_inspect(VALUE self) return default_inspect(self, "WIN32OLE_TYPELIB"); } +VALUE cWIN32OLE_TYPELIB; + void Init_win32ole_typelib(void) { diff --git a/ruby/ext/win32ole/win32ole_typelib.h b/ruby/ext/win32ole/win32ole_typelib.h index 9fc117fcb..2c2730bb5 100644 --- a/ruby/ext/win32ole/win32ole_typelib.h +++ b/ruby/ext/win32ole/win32ole_typelib.h @@ -1,7 +1,7 @@ #ifndef WIN32OLE_TYPELIB_H #define WIN32OLE_TYPELIB_H 1 -VALUE cWIN32OLE_TYPELIB; +extern VALUE cWIN32OLE_TYPELIB; void Init_win32ole_typelib(void); ITypeLib * itypelib(VALUE self); diff --git a/ruby/ext/win32ole/win32ole_variable.c b/ruby/ext/win32ole/win32ole_variable.c index 3dc9972ee..803083156 100644 --- a/ruby/ext/win32ole/win32ole_variable.c +++ b/ruby/ext/win32ole/win32ole_variable.c @@ -365,6 +365,8 @@ folevariable_inspect(VALUE self) return make_inspect("WIN32OLE_VARIABLE", detail); } +VALUE cWIN32OLE_VARIABLE; + void Init_win32ole_variable(void) { cWIN32OLE_VARIABLE = rb_define_class("WIN32OLE_VARIABLE", rb_cObject); diff --git a/ruby/ext/win32ole/win32ole_variable.h b/ruby/ext/win32ole/win32ole_variable.h index 704dc1350..209613fd4 100644 --- a/ruby/ext/win32ole/win32ole_variable.h +++ b/ruby/ext/win32ole/win32ole_variable.h @@ -1,7 +1,7 @@ #ifndef WIN32OLE_VARIABLE_H #define WIN32OLE_VARIABLE_H 1 -VALUE cWIN32OLE_VARIABLE; +extern VALUE cWIN32OLE_VARIABLE; VALUE create_win32ole_variable(ITypeInfo *pTypeInfo, UINT index, VALUE name); void Init_win32ole_variable(void); diff --git a/ruby/ext/win32ole/win32ole_variant.c b/ruby/ext/win32ole/win32ole_variant.c index 3ff8f4ffb..0953fc324 100644 --- a/ruby/ext/win32ole/win32ole_variant.c +++ b/ruby/ext/win32ole/win32ole_variant.c @@ -94,7 +94,7 @@ ole_val2olevariantdata(VALUE val, VARTYPE vt, struct olevariantdata *pvar) } } } -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) } else if ( (vt & ~VT_BYREF) == VT_I8 || (vt & ~VT_BYREF) == VT_UI8) { ole_val2variant_ex(val, &(pvar->realvar), (vt & ~VT_BYREF)); ole_val2variant_ex(val, &(pvar->var), (vt & ~VT_BYREF)); @@ -202,7 +202,7 @@ ole_set_byref(VARIANT *realvar, VARIANT *var, VARTYPE vt) V_R8REF(var) = &V_R8(realvar); break; -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) #ifdef V_I8REF case VT_I8: V_I8REF(var) = &V_I8(realvar); @@ -371,7 +371,7 @@ check_type_val2variant(VALUE val) * Win32OLE converts Ruby object into OLE variant automatically when * invoking OLE methods. If OLE method requires the argument which is * different from the variant by automatic conversion of Win32OLE, you - * can convert the specfied variant type by using WIN32OLE_VARIANT class. + * can convert the specified variant type by using WIN32OLE_VARIANT class. * * param = WIN32OLE_VARIANT.new(10, WIN32OLE::VARIANT::VT_R4) * oleobj.method(param) @@ -689,6 +689,8 @@ ole_variant2variant(VALUE val, VARIANT *var) VariantCopy(var, &(pvar->var)); } +VALUE cWIN32OLE_VARIANT; + void Init_win32ole_variant(void) { diff --git a/ruby/ext/win32ole/win32ole_variant.h b/ruby/ext/win32ole/win32ole_variant.h index efe7ea8be..4bd3b0aee 100644 --- a/ruby/ext/win32ole/win32ole_variant.h +++ b/ruby/ext/win32ole/win32ole_variant.h @@ -1,7 +1,7 @@ #ifndef WIN32OLE_VARIANT_H #define WIN32OLE_VARIANT_H 1 -VALUE cWIN32OLE_VARIANT; +extern VALUE cWIN32OLE_VARIANT; void ole_variant2variant(VALUE val, VARIANT *var); void Init_win32ole_variant(void); diff --git a/ruby/ext/win32ole/win32ole_variant_m.c b/ruby/ext/win32ole/win32ole_variant_m.c index 4d76fdc79..c285a0017 100644 --- a/ruby/ext/win32ole/win32ole_variant_m.c +++ b/ruby/ext/win32ole/win32ole_variant_m.c @@ -1,5 +1,7 @@ #include "win32ole.h" +VALUE mWIN32OLE_VARIANT; + void Init_win32ole_variant_m(void) { /* @@ -114,7 +116,7 @@ void Init_win32ole_variant_m(void) */ rb_define_const(mWIN32OLE_VARIANT, "VT_UI4", RB_INT2FIX(VT_UI4)); -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) /* * represents VT_I8 type constant. */ diff --git a/ruby/ext/win32ole/win32ole_variant_m.h b/ruby/ext/win32ole/win32ole_variant_m.h index afbef3021..6272a6578 100644 --- a/ruby/ext/win32ole/win32ole_variant_m.h +++ b/ruby/ext/win32ole/win32ole_variant_m.h @@ -1,7 +1,7 @@ #ifndef WIN32OLE_VARIANT_M_H #define WIN32OLE_VARIANT_M_H 1 -VALUE mWIN32OLE_VARIANT; +extern VALUE mWIN32OLE_VARIANT; void Init_win32ole_variant_m(void); #endif diff --git a/ruby/ext/zlib/depend b/ruby/ext/zlib/depend index 5ab5684fb..68c1efde0 100644 --- a/ruby/ext/zlib/depend +++ b/ruby/ext/zlib/depend @@ -4,9 +4,165 @@ zlib.o: $(arch_hdrdir)/ruby/config.h zlib.o: $(hdrdir)/ruby.h zlib.o: $(hdrdir)/ruby/assert.h zlib.o: $(hdrdir)/ruby/backward.h +zlib.o: $(hdrdir)/ruby/backward/2/assume.h +zlib.o: $(hdrdir)/ruby/backward/2/attributes.h +zlib.o: $(hdrdir)/ruby/backward/2/bool.h +zlib.o: $(hdrdir)/ruby/backward/2/inttypes.h +zlib.o: $(hdrdir)/ruby/backward/2/limits.h +zlib.o: $(hdrdir)/ruby/backward/2/long_long.h +zlib.o: $(hdrdir)/ruby/backward/2/stdalign.h +zlib.o: $(hdrdir)/ruby/backward/2/stdarg.h zlib.o: $(hdrdir)/ruby/defines.h zlib.o: $(hdrdir)/ruby/encoding.h zlib.o: $(hdrdir)/ruby/intern.h +zlib.o: $(hdrdir)/ruby/internal/anyargs.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/char.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/double.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/int.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/long.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/short.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +zlib.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +zlib.o: $(hdrdir)/ruby/internal/assume.h +zlib.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +zlib.o: $(hdrdir)/ruby/internal/attr/artificial.h +zlib.o: $(hdrdir)/ruby/internal/attr/cold.h +zlib.o: $(hdrdir)/ruby/internal/attr/const.h +zlib.o: $(hdrdir)/ruby/internal/attr/constexpr.h +zlib.o: $(hdrdir)/ruby/internal/attr/deprecated.h +zlib.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +zlib.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +zlib.o: $(hdrdir)/ruby/internal/attr/error.h +zlib.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +zlib.o: $(hdrdir)/ruby/internal/attr/forceinline.h +zlib.o: $(hdrdir)/ruby/internal/attr/format.h +zlib.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +zlib.o: $(hdrdir)/ruby/internal/attr/noalias.h +zlib.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +zlib.o: $(hdrdir)/ruby/internal/attr/noexcept.h +zlib.o: $(hdrdir)/ruby/internal/attr/noinline.h +zlib.o: $(hdrdir)/ruby/internal/attr/nonnull.h +zlib.o: $(hdrdir)/ruby/internal/attr/noreturn.h +zlib.o: $(hdrdir)/ruby/internal/attr/pure.h +zlib.o: $(hdrdir)/ruby/internal/attr/restrict.h +zlib.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +zlib.o: $(hdrdir)/ruby/internal/attr/warning.h +zlib.o: $(hdrdir)/ruby/internal/attr/weakref.h +zlib.o: $(hdrdir)/ruby/internal/cast.h +zlib.o: $(hdrdir)/ruby/internal/compiler_is.h +zlib.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +zlib.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +zlib.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +zlib.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +zlib.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +zlib.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +zlib.o: $(hdrdir)/ruby/internal/compiler_since.h +zlib.o: $(hdrdir)/ruby/internal/config.h +zlib.o: $(hdrdir)/ruby/internal/constant_p.h +zlib.o: $(hdrdir)/ruby/internal/core.h +zlib.o: $(hdrdir)/ruby/internal/core/rarray.h +zlib.o: $(hdrdir)/ruby/internal/core/rbasic.h +zlib.o: $(hdrdir)/ruby/internal/core/rbignum.h +zlib.o: $(hdrdir)/ruby/internal/core/rclass.h +zlib.o: $(hdrdir)/ruby/internal/core/rdata.h +zlib.o: $(hdrdir)/ruby/internal/core/rfile.h +zlib.o: $(hdrdir)/ruby/internal/core/rhash.h +zlib.o: $(hdrdir)/ruby/internal/core/robject.h +zlib.o: $(hdrdir)/ruby/internal/core/rregexp.h +zlib.o: $(hdrdir)/ruby/internal/core/rstring.h +zlib.o: $(hdrdir)/ruby/internal/core/rstruct.h +zlib.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +zlib.o: $(hdrdir)/ruby/internal/ctype.h +zlib.o: $(hdrdir)/ruby/internal/dllexport.h +zlib.o: $(hdrdir)/ruby/internal/dosish.h +zlib.o: $(hdrdir)/ruby/internal/encoding/coderange.h +zlib.o: $(hdrdir)/ruby/internal/encoding/ctype.h +zlib.o: $(hdrdir)/ruby/internal/encoding/encoding.h +zlib.o: $(hdrdir)/ruby/internal/encoding/pathname.h +zlib.o: $(hdrdir)/ruby/internal/encoding/re.h +zlib.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +zlib.o: $(hdrdir)/ruby/internal/encoding/string.h +zlib.o: $(hdrdir)/ruby/internal/encoding/symbol.h +zlib.o: $(hdrdir)/ruby/internal/encoding/transcode.h +zlib.o: $(hdrdir)/ruby/internal/error.h +zlib.o: $(hdrdir)/ruby/internal/eval.h +zlib.o: $(hdrdir)/ruby/internal/event.h +zlib.o: $(hdrdir)/ruby/internal/fl_type.h +zlib.o: $(hdrdir)/ruby/internal/gc.h +zlib.o: $(hdrdir)/ruby/internal/glob.h +zlib.o: $(hdrdir)/ruby/internal/globals.h +zlib.o: $(hdrdir)/ruby/internal/has/attribute.h +zlib.o: $(hdrdir)/ruby/internal/has/builtin.h +zlib.o: $(hdrdir)/ruby/internal/has/c_attribute.h +zlib.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +zlib.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +zlib.o: $(hdrdir)/ruby/internal/has/extension.h +zlib.o: $(hdrdir)/ruby/internal/has/feature.h +zlib.o: $(hdrdir)/ruby/internal/has/warning.h +zlib.o: $(hdrdir)/ruby/internal/intern/array.h +zlib.o: $(hdrdir)/ruby/internal/intern/bignum.h +zlib.o: $(hdrdir)/ruby/internal/intern/class.h +zlib.o: $(hdrdir)/ruby/internal/intern/compar.h +zlib.o: $(hdrdir)/ruby/internal/intern/complex.h +zlib.o: $(hdrdir)/ruby/internal/intern/cont.h +zlib.o: $(hdrdir)/ruby/internal/intern/dir.h +zlib.o: $(hdrdir)/ruby/internal/intern/enum.h +zlib.o: $(hdrdir)/ruby/internal/intern/enumerator.h +zlib.o: $(hdrdir)/ruby/internal/intern/error.h +zlib.o: $(hdrdir)/ruby/internal/intern/eval.h +zlib.o: $(hdrdir)/ruby/internal/intern/file.h +zlib.o: $(hdrdir)/ruby/internal/intern/gc.h +zlib.o: $(hdrdir)/ruby/internal/intern/hash.h +zlib.o: $(hdrdir)/ruby/internal/intern/io.h +zlib.o: $(hdrdir)/ruby/internal/intern/load.h +zlib.o: $(hdrdir)/ruby/internal/intern/marshal.h +zlib.o: $(hdrdir)/ruby/internal/intern/numeric.h +zlib.o: $(hdrdir)/ruby/internal/intern/object.h +zlib.o: $(hdrdir)/ruby/internal/intern/parse.h +zlib.o: $(hdrdir)/ruby/internal/intern/proc.h +zlib.o: $(hdrdir)/ruby/internal/intern/process.h +zlib.o: $(hdrdir)/ruby/internal/intern/random.h +zlib.o: $(hdrdir)/ruby/internal/intern/range.h +zlib.o: $(hdrdir)/ruby/internal/intern/rational.h +zlib.o: $(hdrdir)/ruby/internal/intern/re.h +zlib.o: $(hdrdir)/ruby/internal/intern/ruby.h +zlib.o: $(hdrdir)/ruby/internal/intern/select.h +zlib.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +zlib.o: $(hdrdir)/ruby/internal/intern/signal.h +zlib.o: $(hdrdir)/ruby/internal/intern/sprintf.h +zlib.o: $(hdrdir)/ruby/internal/intern/string.h +zlib.o: $(hdrdir)/ruby/internal/intern/struct.h +zlib.o: $(hdrdir)/ruby/internal/intern/thread.h +zlib.o: $(hdrdir)/ruby/internal/intern/time.h +zlib.o: $(hdrdir)/ruby/internal/intern/variable.h +zlib.o: $(hdrdir)/ruby/internal/intern/vm.h +zlib.o: $(hdrdir)/ruby/internal/interpreter.h +zlib.o: $(hdrdir)/ruby/internal/iterator.h +zlib.o: $(hdrdir)/ruby/internal/memory.h +zlib.o: $(hdrdir)/ruby/internal/method.h +zlib.o: $(hdrdir)/ruby/internal/module.h +zlib.o: $(hdrdir)/ruby/internal/newobj.h +zlib.o: $(hdrdir)/ruby/internal/rgengc.h +zlib.o: $(hdrdir)/ruby/internal/scan_args.h +zlib.o: $(hdrdir)/ruby/internal/special_consts.h +zlib.o: $(hdrdir)/ruby/internal/static_assert.h +zlib.o: $(hdrdir)/ruby/internal/stdalign.h +zlib.o: $(hdrdir)/ruby/internal/stdbool.h +zlib.o: $(hdrdir)/ruby/internal/symbol.h +zlib.o: $(hdrdir)/ruby/internal/value.h +zlib.o: $(hdrdir)/ruby/internal/value_type.h +zlib.o: $(hdrdir)/ruby/internal/variable.h +zlib.o: $(hdrdir)/ruby/internal/warning_push.h +zlib.o: $(hdrdir)/ruby/internal/xmalloc.h zlib.o: $(hdrdir)/ruby/io.h zlib.o: $(hdrdir)/ruby/missing.h zlib.o: $(hdrdir)/ruby/onigmo.h diff --git a/ruby/ext/zlib/extconf.rb b/ruby/ext/zlib/extconf.rb index fd2f16852..d674544f2 100644 --- a/ruby/ext/zlib/extconf.rb +++ b/ruby/ext/zlib/extconf.rb @@ -10,11 +10,12 @@ dir_config 'zlib' - +libs = $libs if %w'z libz zlib1 zlib zdll zlibwapi'.find {|z| have_library(z, 'deflateReset')} and have_header('zlib.h') then have_zlib = true else + $libs = libs unless File.directory?(zsrc = "#{$srcdir}/zlib") dirs = Dir.open($srcdir) {|z| z.grep(/\Azlib-\d+[.\d]*\z/) {|x|"#{$srcdir}/#{x}"}} dirs.delete_if {|x| !File.directory?(x)} @@ -31,9 +32,12 @@ $extso << dll $cleanfiles << "$(topdir)/#{dll}" << "$(ZIMPLIB)" zmk = "\t$(MAKE) -f $(ZMKFILE) TOP=$(ZSRC)" + zopts = [] if $nmake zmkfile = "$(ZSRC)/win32/Makefile.msc" m = "#{zsrc}/win32/Makefile.msc" + # zopts << "USE_ASM=1" + zopts << "ARCH=#{RbConfig::CONFIG['target_cpu']}" else zmkfile = "$(ZSRC)/win32/Makefile.gcc" m = "#{zsrc}/win32/Makefile.gcc" @@ -43,7 +47,7 @@ end m = File.read(m) zimplib = m[/^IMPLIB[ \t]*=[ \t]*(\S+)/, 1] - $LOCAL_LIBS << " " << zimplib + ($LOCAL_LIBS << " ./" << zimplib).strip! unless $nmake or /^TOP[ \t]/ =~ m m.gsub!(/win32\/zlib\.def/, '$(TOP)/\&') m.gsub!(/^(\t.*[ \t])(\S+\.rc)/, '\1-I$( len) +- n = len; ++ n = (unsigned)len; + + /* first just try copying data from the output buffer */ + if (state->x.have) { +@@ -397,7 +397,7 @@ + } + + /* read len or fewer bytes to buf */ +- len = gz_read(state, buf, len); ++ len = (unsigned)gz_read(state, buf, len); + + /* check for an error */ + if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR) +@@ -469,7 +469,7 @@ + } + + /* nothing there -- try gz_read() */ +- ret = gz_read(state, buf, 1); ++ ret = (int)gz_read(state, buf, 1); + return ret < 1 ? -1 : buf[0]; + } + +diff -ru zlib-1.2.11/gzwrite.c zlib-1.2.11/gzwrite.c +--- zlib-1.2.11/gzwrite.c 2017-01-15 09:29:40.000000000 +0900 ++++ zlib-1.2.11/gzwrite.c 2020-11-23 19:35:41.530494030 +0900 +@@ -209,7 +209,7 @@ + state->in); + copy = state->size - have; + if (copy > len) +- copy = len; ++ copy = (unsigned)len; + memcpy(state->in + have, buf, copy); + state->strm.avail_in += copy; + state->x.pos += copy; +@@ -229,7 +229,7 @@ + do { + unsigned n = (unsigned)-1; + if (n > len) +- n = len; ++ n = (unsigned)len; + state->strm.avail_in = n; + state->x.pos += n; + if (gz_comp(state, Z_NO_FLUSH) == -1) +@@ -368,7 +368,7 @@ + + /* write string */ + len = strlen(str); +- ret = gz_write(state, str, len); ++ ret = (int)gz_write(state, str, len); + return ret == 0 && len != 0 ? -1 : ret; + } + +diff -ru zlib-1.2.11/win32/Makefile.msc zlib-1.2.11/win32/Makefile.msc +--- zlib-1.2.11/win32/Makefile.msc 2017-01-15 09:07:08.000000000 +0900 ++++ zlib-1.2.11/win32/Makefile.msc 2020-11-23 22:37:19.746500208 +0900 +@@ -37,6 +37,22 @@ + gzwrite.obj infback.obj inflate.obj inftrees.obj inffast.obj trees.obj uncompr.obj zutil.obj + OBJA = + ++!ifdef USE_ASM ++LOC = -DASMV -DASMINF ++!if "$(ARCH)" == "i386" ++OBJA = inffas32.obj match686.obj ++!else if "$(ARCH)" == "x64" ++AS = ml64 ++LOC = $(LOC) -I. ++OBJA = inffasx64.obj gvmat64.obj inffas8664.obj ++!endif ++!endif ++ ++!if "$(ARCH)" == "x64" ++ZBASE = 0x5A4C000000 ++!else ++ZBASE = 0x5A4C0000 ++!endif + + # targets + all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \ +@@ -49,7 +65,7 @@ + + $(SHAREDLIB): $(TOP)/win32/zlib.def $(OBJS) $(OBJA) zlib1.res + $(LD) $(LDFLAGS) -def:$(TOP)/win32/zlib.def -dll -implib:$(IMPLIB) \ +- -out:$@ -base:0x5A4C0000 $(OBJS) $(OBJA) zlib1.res ++ -out:$@ -base:$(ZBASE) $(OBJS) $(OBJA) zlib1.res + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;2 + diff --git a/ruby/ext/zlib/zlib.c b/ruby/ext/zlib/zlib.c index 5c8aab24a..be5f148bc 100644 --- a/ruby/ext/zlib/zlib.c +++ b/ruby/ext/zlib/zlib.c @@ -25,7 +25,7 @@ # define VALGRIND_MAKE_MEM_UNDEFINED(p, n) 0 #endif -#define RUBY_ZLIB_VERSION "1.1.0" +#define RUBY_ZLIB_VERSION "2.1.1" #ifndef RB_PASS_CALLED_KEYWORDS # define rb_class_new_instance_kw(argc, argv, klass, kw_splat) rb_class_new_instance(argc, argv, klass) @@ -56,7 +56,10 @@ max_uint(long n) #define MAX_UINT(n) (uInt)(n) #endif -static ID id_dictionaries; +#define OPTHASH_GIVEN_P(opts) \ + (argc > 0 && !NIL_P((opts) = rb_check_hash_type(argv[argc-1])) && (--argc, 1)) + +static ID id_dictionaries, id_read, id_buffer; /*--------- Prototypes --------*/ @@ -130,7 +133,7 @@ static VALUE rb_inflate_s_allocate(VALUE); static VALUE rb_inflate_initialize(int, VALUE*, VALUE); static VALUE rb_inflate_s_inflate(VALUE, VALUE); static void do_inflate(struct zstream*, VALUE); -static VALUE rb_inflate_inflate(VALUE, VALUE); +static VALUE rb_inflate_inflate(int, VALUE*, VALUE); static VALUE rb_inflate_addstr(VALUE, VALUE); static VALUE rb_inflate_sync(VALUE, VALUE); static VALUE rb_inflate_sync_point_p(VALUE); @@ -285,6 +288,7 @@ static VALUE rb_gzreader_readlines(int, VALUE*, VALUE); * - Zlib::MemError * - Zlib::BufError * - Zlib::VersionError + * - Zlib::InProgressError * * (if you have GZIP_SUPPORT) * - Zlib::GzipReader @@ -301,7 +305,7 @@ void Init_zlib(void); /*--------- Exceptions --------*/ static VALUE cZError, cStreamEnd, cNeedDict; -static VALUE cStreamError, cDataError, cMemError, cBufError, cVersionError; +static VALUE cStreamError, cDataError, cMemError, cBufError, cVersionError, cInProgressError; static void raise_zlib_error(int err, const char *msg) @@ -351,7 +355,9 @@ raise_zlib_error(int err, const char *msg) static void finalizer_warn(const char *msg) { +#if 0 fprintf(stderr, "zlib(finalizer): %s\n", msg); +#endif } @@ -407,6 +413,15 @@ do_checksum(int argc, VALUE *argv, uLong (*func)(uLong, const Bytef*, uInt)) if (NIL_P(str)) { sum = func(sum, Z_NULL, 0); } + else if (rb_obj_is_kind_of(str, rb_cIO)) { + VALUE buf; + VALUE buflen = INT2NUM(8192); + + while (!NIL_P(buf = rb_funcall(str, id_read, 1, buflen))) { + StringValue(buf); + sum = checksum_long(func, sum, (Bytef*)RSTRING_PTR(buf), RSTRING_LEN(buf)); + } + } else { StringValue(str); sum = checksum_long(func, sum, (Bytef*)RSTRING_PTR(str), RSTRING_LEN(str)); @@ -422,6 +437,8 @@ do_checksum(int argc, VALUE *argv, uLong (*func)(uLong, const Bytef*, uInt)) * Calculates Adler-32 checksum for +string+, and returns updated value of * +adler+. If +string+ is omitted, it returns the Adler-32 initial value. If * +adler+ is omitted, it assumes that the initial value is given to +adler+. + * If +string+ is an IO instance, reads from the IO until the IO returns nil + * and returns Adler-32 of all read data. * * Example usage: * @@ -466,7 +483,9 @@ rb_zlib_adler32_combine(VALUE klass, VALUE adler1, VALUE adler2, VALUE len2) * * Calculates CRC checksum for +string+, and returns updated value of +crc+. If * +string+ is omitted, it returns the CRC initial value. If +crc+ is omitted, it - * assumes that the initial value is given to +crc+. + * assumes that the initial value is given to +crc+. If +string+ is an IO instance, + * reads from the IO until the IO returns nil and returns CRC checksum of all read + * data. * * FIXME: expression. */ @@ -530,6 +549,7 @@ struct zstream { unsigned long flags; VALUE buf; VALUE input; + VALUE mutex; z_stream stream; const struct zstream_funcs { int (*reset)(z_streamp); @@ -538,13 +558,15 @@ struct zstream { } *func; }; -#define ZSTREAM_FLAG_READY 0x1 -#define ZSTREAM_FLAG_IN_STREAM 0x2 -#define ZSTREAM_FLAG_FINISHED 0x4 -#define ZSTREAM_FLAG_CLOSING 0x8 -#define ZSTREAM_FLAG_GZFILE 0x10 /* disallows yield from expand_buffer for +#define ZSTREAM_FLAG_READY (1 << 0) +#define ZSTREAM_FLAG_IN_STREAM (1 << 1) +#define ZSTREAM_FLAG_FINISHED (1 << 2) +#define ZSTREAM_FLAG_CLOSING (1 << 3) +#define ZSTREAM_FLAG_GZFILE (1 << 4) /* disallows yield from expand_buffer for gzip*/ -#define ZSTREAM_FLAG_UNUSED 0x20 +#define ZSTREAM_REUSE_BUFFER (1 << 5) +#define ZSTREAM_IN_PROGRESS (1 << 6) +#define ZSTREAM_FLAG_UNUSED (1 << 7) #define ZSTREAM_READY(z) ((z)->flags |= ZSTREAM_FLAG_READY) #define ZSTREAM_IS_READY(z) ((z)->flags & ZSTREAM_FLAG_READY) @@ -553,6 +575,8 @@ struct zstream { #define ZSTREAM_IS_GZFILE(z) ((z)->flags & ZSTREAM_FLAG_GZFILE) #define ZSTREAM_BUF_FILLED(z) (NIL_P((z)->buf) ? 0 : RSTRING_LEN((z)->buf)) +#define ZSTREAM_REUSE_BUFFER_P(z) ((z)->flags & ZSTREAM_REUSE_BUFFER) + #define ZSTREAM_EXPAND_BUFFER_OK 0 /* I think that more better value should be found, @@ -571,7 +595,9 @@ static const struct zstream_funcs inflate_funcs = { }; struct zstream_run_args { - struct zstream * z; + struct zstream *const z; + Bytef *src; + long len; int flush; /* stream flush value for inflate() or deflate() */ int interrupt; /* stop processing the stream and return to ruby */ int jump_state; /* for buffer expansion block break or exception */ @@ -602,6 +628,7 @@ zstream_init(struct zstream *z, const struct zstream_funcs *func) z->flags = 0; z->buf = Qnil; z->input = Qnil; + z->mutex = rb_mutex_new(); z->stream.zalloc = zlib_mem_alloc; z->stream.zfree = zlib_mem_free; z->stream.opaque = Z_NULL; @@ -629,11 +656,21 @@ zstream_expand_buffer(struct zstream *z) if (buf_filled >= ZSTREAM_AVAIL_OUT_STEP_MAX) { int state = 0; - rb_obj_reveal(z->buf, rb_cString); + if (!ZSTREAM_REUSE_BUFFER_P(z)) { + rb_obj_reveal(z->buf, rb_cString); + } + rb_mutex_unlock(z->mutex); rb_protect(rb_yield, z->buf, &state); - - z->buf = Qnil; + rb_mutex_lock(z->mutex); + + if (ZSTREAM_REUSE_BUFFER_P(z)) { + rb_str_modify(z->buf); + rb_str_set_len(z->buf, 0); + } + else { + z->buf = Qnil; + } zstream_expand_buffer_into(z, ZSTREAM_AVAIL_OUT_STEP_MAX); if (state) @@ -751,7 +788,9 @@ zstream_detach_buffer(struct zstream *z) } else { dst = z->buf; - rb_obj_reveal(dst, rb_cString); + if (!ZSTREAM_REUSE_BUFFER_P(z)) { + rb_obj_reveal(dst, rb_cString); + } } z->buf = Qnil; @@ -859,7 +898,6 @@ zstream_discard_input(struct zstream *z, long len) } rb_str_resize(z->input, newlen); if (newlen == 0) { - rb_gc_force_recycle(z->input); z->input = Qnil; } else { @@ -1024,19 +1062,18 @@ zstream_unblock_func(void *ptr) args->interrupt = 1; } -static void -zstream_run(struct zstream *z, Bytef *src, long len, int flush) +static VALUE +zstream_run_try(VALUE value_arg) { - struct zstream_run_args args; + struct zstream_run_args *args = (struct zstream_run_args *)value_arg; + struct zstream *z = args->z; + Bytef *src = args->src; + long len = args->len; + int flush = args->flush; + int err; VALUE old_input = Qnil; - args.z = z; - args.flush = flush; - args.interrupt = 0; - args.jump_state = 0; - args.stream_output = !ZSTREAM_IS_GZFILE(z) && rb_block_given_p(); - if (NIL_P(z->input) && len == 0) { z->stream.next_in = (Bytef*)""; z->stream.avail_in = 0; @@ -1058,14 +1095,20 @@ zstream_run(struct zstream *z, Bytef *src, long len, int flush) loop: #ifndef RB_NOGVL_UBF_ASYNC_SAFE - err = (int)(VALUE)rb_thread_call_without_gvl(zstream_run_func, (void *)&args, - zstream_unblock_func, (void *)&args); + err = (int)(VALUE)rb_thread_call_without_gvl(zstream_run_func, (void *)args, + zstream_unblock_func, (void *)args); #else - err = (int)(VALUE)rb_nogvl(zstream_run_func, (void *)&args, - zstream_unblock_func, (void *)&args, + err = (int)(VALUE)rb_nogvl(zstream_run_func, (void *)args, + zstream_unblock_func, (void *)args, RB_NOGVL_UBF_ASYNC_SAFE); #endif + /* retry if no exception is thrown */ + if (err == Z_OK && args->interrupt) { + args->interrupt = 0; + goto loop; + } + if (flush != Z_FINISH && err == Z_BUF_ERROR && z->stream.avail_out > 0) { z->flags |= ZSTREAM_FLAG_IN_STREAM; @@ -1096,11 +1139,54 @@ zstream_run(struct zstream *z, Bytef *src, long len, int flush) } if (!NIL_P(old_input)) { rb_str_resize(old_input, 0); - rb_gc_force_recycle(old_input); } - if (args.jump_state) - rb_jump_tag(args.jump_state); + if (args->jump_state) + rb_jump_tag(args->jump_state); + + return Qnil; +} + +static VALUE +zstream_run_ensure(VALUE value_arg) +{ + struct zstream_run_args *args = (struct zstream_run_args *)value_arg; + + /* Remove ZSTREAM_IN_PROGRESS flag to signal that this zstream is not in use. */ + args->z->flags &= ~ZSTREAM_IN_PROGRESS; + + return Qnil; +} + +static VALUE +zstream_run_synchronized(VALUE value_arg) +{ + struct zstream_run_args *args = (struct zstream_run_args *)value_arg; + + /* Cannot start zstream while it is in progress. */ + if (args->z->flags & ZSTREAM_IN_PROGRESS) { + rb_raise(cInProgressError, "zlib stream is in progress"); + } + args->z->flags |= ZSTREAM_IN_PROGRESS; + + rb_ensure(zstream_run_try, value_arg, zstream_run_ensure, value_arg); + + return Qnil; +} + +static void +zstream_run(struct zstream *z, Bytef *src, long len, int flush) +{ + struct zstream_run_args args = { + .z = z, + .src = src, + .len = len, + .flush = flush, + .interrupt = 0, + .jump_state = 0, + .stream_output = !ZSTREAM_IS_GZFILE(z) && rb_block_given_p(), + }; + rb_mutex_synchronize(z->mutex, zstream_run_synchronized, (VALUE)&args); } static VALUE @@ -1148,6 +1234,7 @@ zstream_mark(void *p) struct zstream *z = p; rb_gc_mark(z->buf); rb_gc_mark(z->input); + rb_gc_mark(z->mutex); } static void @@ -2000,8 +2087,8 @@ rb_inflate_add_dictionary(VALUE obj, VALUE dictionary) * Document-method: Zlib::Inflate#inflate * * call-seq: - * inflate(deflate_string) -> String - * inflate(deflate_string) { |chunk| ... } -> nil + * inflate(deflate_string, buffer: nil) -> String + * inflate(deflate_string, buffer: nil) { |chunk| ... } -> nil * * Inputs +deflate_string+ into the inflate stream and returns the output from * the stream. Calling this method, both the input and the output buffer of @@ -2011,6 +2098,15 @@ rb_inflate_add_dictionary(VALUE obj, VALUE dictionary) * If a block is given consecutive inflated chunks from the +deflate_string+ * are yielded to the block and +nil+ is returned. * + * If a :buffer keyword argument is given and not nil: + * + * * The :buffer keyword should be a String, and will used as the output buffer. + * Using this option can reuse the memory required during inflation. + * * When not passing a block, the return value will be the same object as the + * :buffer keyword argument. + * * When passing a block, the yielded chunks will be the same value as the + * :buffer keyword argument. + * * Raises a Zlib::NeedDict exception if a preset dictionary is needed to * decompress. Set the dictionary by Zlib::Inflate#set_dictionary and then * call this method again with an empty string to flush the stream: @@ -2034,10 +2130,37 @@ rb_inflate_add_dictionary(VALUE obj, VALUE dictionary) * See also Zlib::Inflate.new */ static VALUE -rb_inflate_inflate(VALUE obj, VALUE src) +rb_inflate_inflate(int argc, VALUE* argv, VALUE obj) { struct zstream *z = get_zstream(obj); - VALUE dst; + VALUE dst, src, opts, buffer = Qnil; + + if (OPTHASH_GIVEN_P(opts)) { + VALUE buf; + rb_get_kwargs(opts, &id_buffer, 0, 1, &buf); + if (buf != Qundef && buf != Qnil) { + buffer = StringValue(buf); + } + } + if (buffer != Qnil) { + if (!(ZSTREAM_REUSE_BUFFER_P(z) && z->buf == buffer)) { + long len = RSTRING_LEN(buffer); + if (len >= ZSTREAM_AVAIL_OUT_STEP_MAX) { + rb_str_modify(buffer); + } + else { + len = ZSTREAM_AVAIL_OUT_STEP_MAX - len; + rb_str_modify_expand(buffer, len); + } + rb_str_set_len(buffer, 0); + z->flags |= ZSTREAM_REUSE_BUFFER; + z->buf = buffer; + } + } else if (ZSTREAM_REUSE_BUFFER_P(z)) { + z->flags &= ~ZSTREAM_REUSE_BUFFER; + z->buf = Qnil; + } + rb_scan_args(argc, argv, "10", &src); if (ZSTREAM_IS_FINISHED(z)) { if (NIL_P(src)) { @@ -2046,7 +2169,11 @@ rb_inflate_inflate(VALUE obj, VALUE src) else { StringValue(src); zstream_append_buffer2(z, src); - dst = rb_str_new(0, 0); + if (ZSTREAM_REUSE_BUFFER_P(z)) { + dst = rb_str_resize(buffer, 0); + } else { + dst = rb_str_new(0, 0); + } } } else { @@ -2198,7 +2325,7 @@ rb_inflate_set_dictionary(VALUE obj, VALUE dic) #define OS_CODE OS_UNIX #endif -static ID id_write, id_read, id_readpartial, id_flush, id_seek, id_close, id_path, id_input; +static ID id_write, id_readpartial, id_flush, id_seek, id_close, id_path, id_input; static VALUE cGzError, cNoFooter, cCRCError, cLengthError; @@ -2798,8 +2925,6 @@ gzfile_readpartial(struct gzfile *gz, long len, VALUE outbuf) if (!NIL_P(outbuf)) { rb_str_resize(outbuf, RSTRING_LEN(dst)); memcpy(RSTRING_PTR(outbuf), RSTRING_PTR(dst), RSTRING_LEN(dst)); - rb_str_resize(dst, 0); - rb_gc_force_recycle(dst); dst = outbuf; } return dst; @@ -3445,6 +3570,16 @@ rb_gzfile_path(VALUE obj) return gz->path; } +static VALUE +gzfile_initialize_path_partial(VALUE obj) +{ + struct gzfile* gz; + TypedData_Get_Struct(obj, struct gzfile, &gzfile_data_type, gz); + gz->path = rb_funcall(gz->io, id_path, 0); + rb_define_singleton_method(obj, "path", rb_gzfile_path, 0); + return Qnil; +} + static void rb_gzfile_ecopts(struct gzfile *gz, VALUE opts) { @@ -3553,8 +3688,8 @@ rb_gzwriter_initialize(int argc, VALUE *argv, VALUE obj) rb_gzfile_ecopts(gz, opt); if (rb_respond_to(io, id_path)) { - gz->path = rb_funcall(gz->io, id_path, 0); - rb_define_singleton_method(obj, "path", rb_gzfile_path, 0); + /* File#path may raise IOError in case when a path is unavailable */ + rb_rescue2(gzfile_initialize_path_partial, obj, NULL, Qnil, rb_eIOError, (VALUE)0); } return obj; @@ -3723,6 +3858,60 @@ rb_gzreader_s_open(int argc, VALUE *argv, VALUE klass) return gzfile_s_open(argc, argv, klass, "rb"); } +/* + * Document-method: Zlib::GzipReader.zcat + * + * call-seq: + * Zlib::GzipReader.zcat(io, options = {}, &block) => nil + * Zlib::GzipReader.zcat(io, options = {}) => string + * + * Decompresses all gzip data in the +io+, handling multiple gzip + * streams until the end of the +io+. There should not be any non-gzip + * data after the gzip streams. + * + * If a block is given, it is yielded strings of uncompressed data, + * and the method returns +nil+. + * If a block is not given, the method returns the concatenation of + * all uncompressed data in all gzip streams. + */ +static VALUE +rb_gzreader_s_zcat(int argc, VALUE *argv, VALUE klass) +{ + VALUE io, unused, obj, buf=0, tmpbuf; + long pos; + + rb_check_arity(argc, 1, 2); + io = argv[0]; + + do { + obj = rb_funcallv(klass, rb_intern("new"), argc, argv); + if (rb_block_given_p()) { + rb_gzreader_each(0, 0, obj); + } + else { + if (!buf) { + buf = rb_str_new(0, 0); + } + tmpbuf = gzfile_read_all(get_gzfile(obj)); + rb_str_cat(buf, RSTRING_PTR(tmpbuf), RSTRING_LEN(tmpbuf)); + } + + rb_gzreader_read(0, 0, obj); + pos = NUM2LONG(rb_funcall(io, rb_intern("pos"), 0)); + unused = rb_gzreader_unused(obj); + rb_gzfile_finish(obj); + if (!NIL_P(unused)) { + pos -= NUM2LONG(rb_funcall(unused, rb_intern("length"), 0)); + rb_funcall(io, rb_intern("pos="), 1, LONG2NUM(pos)); + } + } while (pos < NUM2LONG(rb_funcall(io, rb_intern("size"), 0))); + + if (rb_block_given_p()) { + return Qnil; + } + return buf; +} + /* * Document-method: Zlib::GzipReader.new * @@ -3761,8 +3950,8 @@ rb_gzreader_initialize(int argc, VALUE *argv, VALUE obj) rb_gzfile_ecopts(gz, opt); if (rb_respond_to(io, id_path)) { - gz->path = rb_funcall(gz->io, id_path, 0); - rb_define_singleton_method(obj, "path", rb_gzfile_path, 0); + /* File#path may raise IOError in case when a path is unavailable */ + rb_rescue2(gzfile_initialize_path_partial, obj, NULL, Qnil, rb_eIOError, (VALUE)0); } return obj; @@ -3949,20 +4138,6 @@ rb_gzreader_each_byte(VALUE obj) return Qnil; } -/* - * Document-method: Zlib::GzipReader#bytes - * - * This is a deprecated alias for each_byte. - */ -static VALUE -rb_gzreader_bytes(VALUE obj) -{ - rb_warn("Zlib::GzipReader#bytes is deprecated; use #each_byte instead"); - if (!rb_block_given_p()) - return rb_enumeratorize(obj, ID2SYM(rb_intern("each_byte")), 0, 0); - return rb_gzreader_each_byte(obj); -} - /* * Document-method: Zlib::GzipReader#ungetc * @@ -4041,17 +4216,17 @@ gzreader_charboundary(struct gzfile *gz, long n) { char *s = RSTRING_PTR(gz->z.buf); char *e = s + ZSTREAM_BUF_FILLED(&gz->z); - char *p = rb_enc_left_char_head(s, s + n, e, gz->enc); + char *p = rb_enc_left_char_head(s, s + n - 1, e, gz->enc); long l = p - s; if (l < n) { - n = rb_enc_precise_mbclen(p, e, gz->enc); - if (MBCLEN_NEEDMORE_P(n)) { - if ((l = gzfile_fill(gz, l + MBCLEN_NEEDMORE_LEN(n))) > 0) { + int n_bytes = rb_enc_precise_mbclen(p, e, gz->enc); + if (MBCLEN_NEEDMORE_P(n_bytes)) { + if ((l = gzfile_fill(gz, n + MBCLEN_NEEDMORE_LEN(n_bytes))) > 0) { return l; } } - else if (MBCLEN_CHARFOUND_P(n)) { - return l + MBCLEN_CHARFOUND_LEN(n); + else if (MBCLEN_CHARFOUND_P(n_bytes)) { + return l + MBCLEN_CHARFOUND_LEN(n_bytes); } } return n; @@ -4189,6 +4364,8 @@ gzreader_gets(int argc, VALUE *argv, VALUE obj) * Document-method: Zlib::GzipReader#gets * * See Zlib::GzipReader documentation for a description. + * However, note that this method can return +nil+ even if + * #eof? returns false, unlike the behavior of File#gets. */ static VALUE rb_gzreader_gets(int argc, VALUE *argv, VALUE obj) @@ -4235,20 +4412,6 @@ rb_gzreader_each(int argc, VALUE *argv, VALUE obj) return obj; } -/* - * Document-method: Zlib::GzipReader#lines - * - * This is a deprecated alias for each_line. - */ -static VALUE -rb_gzreader_lines(int argc, VALUE *argv, VALUE obj) -{ - rb_warn("Zlib::GzipReader#lines is deprecated; use #each_line instead"); - if (!rb_block_given_p()) - return rb_enumeratorize(obj, ID2SYM(rb_intern("each_line")), argc, argv); - return rb_gzreader_each(argc, argv, obj); -} - /* * Document-method: Zlib::GzipReader#readlines * @@ -4299,8 +4462,6 @@ zlib_gzip_end(struct gzfile *gz) zstream_end(&gz->z); } -#define OPTHASH_GIVEN_P(opts) \ - (argc > 0 && !NIL_P((opts) = rb_check_hash_type(argv[argc-1])) && (--argc, 1)) static ID id_level, id_strategy; static VALUE zlib_gzip_run(VALUE arg); @@ -4453,6 +4614,10 @@ zlib_gunzip_run(VALUE arg) void Init_zlib(void) { +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + #undef rb_intern VALUE mZlib, cZStream, cDeflate, cInflate; #if GZIP_SUPPORT @@ -4471,6 +4636,7 @@ Init_zlib(void) cMemError = rb_define_class_under(mZlib, "MemError", cZError); cBufError = rb_define_class_under(mZlib, "BufError", cZError); cVersionError = rb_define_class_under(mZlib, "VersionError", cZError); + cInProgressError = rb_define_class_under(mZlib, "InProgressError", cZError); rb_define_module_function(mZlib, "zlib_version", rb_zlib_version, 0); rb_define_module_function(mZlib, "adler32", rb_zlib_adler32, -1); @@ -4547,7 +4713,7 @@ Init_zlib(void) rb_define_alloc_func(cInflate, rb_inflate_s_allocate); rb_define_method(cInflate, "initialize", rb_inflate_initialize, -1); rb_define_method(cInflate, "add_dictionary", rb_inflate_add_dictionary, 1); - rb_define_method(cInflate, "inflate", rb_inflate_inflate, 1); + rb_define_method(cInflate, "inflate", rb_inflate_inflate, -1); rb_define_method(cInflate, "<<", rb_inflate_addstr, 1); rb_define_method(cInflate, "sync", rb_inflate_sync, 1); rb_define_method(cInflate, "sync_point?", rb_inflate_sync_point_p, 0); @@ -4696,6 +4862,7 @@ Init_zlib(void) rb_define_method(cGzipWriter, "puts", rb_gzwriter_puts, -1); rb_define_singleton_method(cGzipReader, "open", rb_gzreader_s_open,-1); + rb_define_singleton_method(cGzipReader, "zcat", rb_gzreader_s_zcat, -1); rb_define_alloc_func(cGzipReader, rb_gzreader_s_allocate); rb_define_method(cGzipReader, "initialize", rb_gzreader_initialize, -1); rb_define_method(cGzipReader, "rewind", rb_gzreader_rewind, 0); @@ -4708,14 +4875,12 @@ Init_zlib(void) rb_define_method(cGzipReader, "readbyte", rb_gzreader_readbyte, 0); rb_define_method(cGzipReader, "each_byte", rb_gzreader_each_byte, 0); rb_define_method(cGzipReader, "each_char", rb_gzreader_each_char, 0); - rb_define_method(cGzipReader, "bytes", rb_gzreader_bytes, 0); rb_define_method(cGzipReader, "ungetc", rb_gzreader_ungetc, 1); rb_define_method(cGzipReader, "ungetbyte", rb_gzreader_ungetbyte, 1); rb_define_method(cGzipReader, "gets", rb_gzreader_gets, -1); rb_define_method(cGzipReader, "readline", rb_gzreader_readline, -1); rb_define_method(cGzipReader, "each", rb_gzreader_each, -1); rb_define_method(cGzipReader, "each_line", rb_gzreader_each, -1); - rb_define_method(cGzipReader, "lines", rb_gzreader_lines, -1); rb_define_method(cGzipReader, "readlines", rb_gzreader_readlines, -1); rb_define_method(cGzipReader, "external_encoding", rb_gzreader_external_encoding, 0); @@ -4757,6 +4922,7 @@ Init_zlib(void) id_level = rb_intern("level"); id_strategy = rb_intern("strategy"); + id_buffer = rb_intern("buffer"); #endif /* GZIP_SUPPORT */ } @@ -4778,6 +4944,7 @@ Init_zlib(void) * - Zlib::MemError * - Zlib::BufError * - Zlib::VersionError + * - Zlib::InProgressError * */ @@ -4852,6 +5019,20 @@ Init_zlib(void) * */ +/* + * Document-class: Zlib::InProgressError + * + * Subclass of Zlib::Error. This error is raised when the zlib + * stream is currently in progress. + * + * For example: + * + * inflater = Zlib::Inflate.new + * inflater.inflate(compressed) do + * inflater.inflate(compressed) # Raises Zlib::InProgressError + * end + */ + /* * Document-class: Zlib::GzipFile::Error * diff --git a/ruby/ext/zlib/zlib.gemspec b/ruby/ext/zlib/zlib.gemspec index 4a77ae325..4a5f8f2ee 100644 --- a/ruby/ext/zlib/zlib.gemspec +++ b/ruby/ext/zlib/zlib.gemspec @@ -20,16 +20,12 @@ Gem::Specification.new do |spec| spec.summary = %q{Ruby interface for the zlib compression/decompression library} spec.description = %q{Ruby interface for the zlib compression/decompression library} spec.homepage = "https://github.com/ruby/zlib" - spec.license = "BSD-2-Clause" + spec.licenses = ["Ruby", "BSD-2-Clause"] - spec.files = [".gitignore", ".travis.yml", "Gemfile", "LICENSE.txt", "README.md", "Rakefile", "bin/console", "bin/setup", "ext/zlib/extconf.rb", "ext/zlib/zlib.c", "zlib.gemspec"] + spec.files = ["LICENSE.txt", "README.md", "ext/zlib/extconf.rb", "ext/zlib/zlib.c", "zlib.gemspec"] spec.bindir = "exe" - spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.executables = [] spec.require_paths = ["lib"] spec.extensions = "ext/zlib/extconf.rb" spec.required_ruby_version = ">= 2.3.0" - - spec.add_development_dependency "bundler" - spec.add_development_dependency "rake" - spec.add_development_dependency "rake-compiler" end diff --git a/ruby/file.c b/ruby/file.c index 94a22ac72..2d0f32340 100644 --- a/ruby/file.c +++ b/ruby/file.c @@ -11,14 +11,22 @@ **********************************************************************/ +#include "ruby/internal/config.h" + #ifdef _WIN32 -#include "missing/file.h" +# include "missing/file.h" +# include "ruby.h" #endif + +#include +#include + #ifdef __CYGWIN__ -#include -#include -#include +# include +# include +# include #endif + #ifdef __APPLE__ # if !(defined(__has_feature) && defined(__has_attribute)) /* Maybe a bug in SDK of Xcode 10.2.1 */ @@ -28,21 +36,13 @@ # define API_AVAILABLE(...) # define API_DEPRECATED(...) # endif -#include +# include #endif -#include "id.h" -#include "ruby/encoding.h" -#include "ruby/io.h" -#include "ruby/util.h" -#include "ruby/thread.h" -#include "internal.h" -#include "dln.h" -#include "encindex.h" - #ifdef HAVE_UNISTD_H -#include +# include #endif + #ifdef HAVE_SYS_TIME_H # include #endif @@ -60,81 +60,73 @@ int flock(int, int); # define MAXPATHLEN 1024 #endif -#include - -#include - #ifdef HAVE_UTIME_H -#include +# include #elif defined HAVE_SYS_UTIME_H -#include +# include #endif #ifdef HAVE_PWD_H -#include +# include #endif #ifdef HAVE_SYS_SYSMACROS_H -#include +# include #endif #include #include #ifdef HAVE_SYS_MKDEV_H -#include +# include #endif #if defined(HAVE_FCNTL_H) -#include +# include #endif #if defined(HAVE_SYS_TIME_H) -#include +# include #endif #if !defined HAVE_LSTAT && !defined lstat -#define lstat stat +# define lstat stat #endif -// --------- [Enclose.IO Hack start] --------- -#include "enclose_io.h" -// --------- [Enclose.IO Hack end] --------- - /* define system APIs */ #ifdef _WIN32 -#include "win32/file.h" -#define STAT(p, s) rb_w32_ustati128((p), (s)) -#undef lstat -#define lstat(p, s) rb_w32_ulstati128((p), (s)) -#undef access -#define access(p, m) rb_w32_uaccess((p), (m)) -#undef truncate -#define truncate(p, n) rb_w32_utruncate((p), (n)) -#undef chmod -#define chmod(p, m) rb_w32_uchmod((p), (m)) -#undef chown -#define chown(p, o, g) rb_w32_uchown((p), (o), (g)) -#undef lchown -#define lchown(p, o, g) rb_w32_ulchown((p), (o), (g)) -#undef utimensat -#define utimensat(s, p, t, f) rb_w32_uutimensat((s), (p), (t), (f)) -#undef link -#define link(f, t) rb_w32_ulink((f), (t)) -#undef unlink -#define unlink(p) rb_w32_uunlink(p) -#undef rename -#define rename(f, t) rb_w32_urename((f), (t)) -#undef symlink -#define symlink(s, l) rb_w32_usymlink((s), (l)) - -#ifdef HAVE_REALPATH +# include "win32/file.h" +# define STAT(p, s) rb_w32_ustati128((p), (s)) +# undef lstat +# define lstat(p, s) rb_w32_ulstati128((p), (s)) +# undef access +# define access(p, m) rb_w32_uaccess((p), (m)) +# undef truncate +# define truncate(p, n) rb_w32_utruncate((p), (n)) +# undef chmod +# define chmod(p, m) rb_w32_uchmod((p), (m)) +# undef chown +# define chown(p, o, g) rb_w32_uchown((p), (o), (g)) +# undef lchown +# define lchown(p, o, g) rb_w32_ulchown((p), (o), (g)) +# undef utimensat +# define utimensat(s, p, t, f) rb_w32_uutimensat((s), (p), (t), (f)) +# undef link +# define link(f, t) rb_w32_ulink((f), (t)) +# undef unlink +# define unlink(p) rb_w32_uunlink(p) +# undef rename +# define rename(f, t) rb_w32_urename((f), (t)) +# undef symlink +# define symlink(s, l) rb_w32_usymlink((s), (l)) + +# ifdef HAVE_REALPATH /* Don't use native realpath(3) on Windows, as the check for absolute paths does not work for drive letters. */ -#undef HAVE_REALPATH -#endif +# undef HAVE_REALPATH +# endif #else -#define STAT(p, s) stat((p), (s)) +# define STAT(p, s) stat((p), (s)) #endif #if defined _WIN32 || defined __APPLE__ @@ -147,7 +139,7 @@ int flock(int, int); /* utime may fail if time is out-of-range for the FS [ruby-dev:38277] */ #if defined DOSISH || defined __CYGWIN__ -# define UTIME_EINVAL +# define UTIME_EINVAL #endif /* Solaris 10 realpath(3) doesn't support File.realpath */ @@ -156,10 +148,29 @@ int flock(int, int); #endif #ifdef HAVE_REALPATH -#include -#include +# include +# include #endif +#include "dln.h" +#include "encindex.h" +#include "id.h" +#include "internal.h" +#include "internal/compilers.h" +#include "internal/dir.h" +#include "internal/error.h" +#include "internal/file.h" +#include "internal/io.h" +#include "internal/load.h" +#include "internal/object.h" +#include "internal/process.h" +#include "internal/thread.h" +#include "internal/vm.h" +#include "ruby/encoding.h" +#include "ruby/io.h" +#include "ruby/thread.h" +#include "ruby/util.h" + VALUE rb_cFile; VALUE rb_mFileTest; VALUE rb_cStat; @@ -566,7 +577,13 @@ rb_stat_cmp(VALUE self, VALUE other) static VALUE rb_stat_dev(VALUE self) { +#if SIZEOF_STRUCT_STAT_ST_DEV <= SIZEOF_DEV_T return DEVT2NUM(get_stat(self)->st_dev); +#elif SIZEOF_STRUCT_STAT_ST_DEV <= SIZEOF_LONG + return ULONG2NUM(get_stat(self)->st_dev); +#else + return ULL2NUM(get_stat(self)->st_dev); +#endif } /* @@ -671,7 +688,21 @@ rb_stat_mode(VALUE self) static VALUE rb_stat_nlink(VALUE self) { - return UINT2NUM(get_stat(self)->st_nlink); + /* struct stat::st_nlink is nlink_t in POSIX. Not the case for Windows. */ + const struct stat *ptr = get_stat(self); + + if (sizeof(ptr->st_nlink) <= sizeof(int)) { + return UINT2NUM((unsigned)ptr->st_nlink); + } + else if (sizeof(ptr->st_nlink) == sizeof(long)) { + return ULONG2NUM((unsigned long)ptr->st_nlink); + } + else if (sizeof(ptr->st_nlink) == sizeof(LONG_LONG)) { + return ULL2NUM((unsigned LONG_LONG)ptr->st_nlink); + } + else { + rb_bug(":FIXME: don't know what to do"); + } } /* @@ -722,7 +753,13 @@ static VALUE rb_stat_rdev(VALUE self) { #ifdef HAVE_STRUCT_STAT_ST_RDEV +# if SIZEOF_STRUCT_STAT_ST_RDEV <= SIZEOF_DEV_T return DEVT2NUM(get_stat(self)->st_rdev); +# elif SIZEOF_STRUCT_STAT_ST_RDEV <= SIZEOF_LONG + return ULONG2NUM(get_stat(self)->st_rdev); +# else + return ULL2NUM(get_stat(self)->st_rdev); +# endif #else return Qnil; #endif @@ -849,12 +886,17 @@ stat_atimespec(const struct stat *st) } static VALUE -stat_atime(const struct stat *st) +stat_time(const struct timespec ts) { - struct timespec ts = stat_atimespec(st); return rb_time_nano_new(ts.tv_sec, ts.tv_nsec); } +static VALUE +stat_atime(const struct stat *st) +{ + return stat_time(stat_atimespec(st)); +} + static struct timespec stat_mtimespec(const struct stat *st) { @@ -875,8 +917,7 @@ stat_mtimespec(const struct stat *st) static VALUE stat_mtime(const struct stat *st) { - struct timespec ts = stat_mtimespec(st); - return rb_time_nano_new(ts.tv_sec, ts.tv_nsec); + return stat_time(stat_mtimespec(st)); } static struct timespec @@ -899,8 +940,7 @@ stat_ctimespec(const struct stat *st) static VALUE stat_ctime(const struct stat *st) { - struct timespec ts = stat_ctimespec(st); - return rb_time_nano_new(ts.tv_sec, ts.tv_nsec); + return stat_time(stat_ctimespec(st)); } #define HAVE_STAT_BIRTHTIME @@ -1228,7 +1268,7 @@ statx_birthtime(const struct statx *stx, VALUE fname) /* birthtime is not supported on the filesystem */ statx_notimplement("birthtime"); } - return rb_time_nano_new(stx->stx_btime.tv_sec, stx->stx_btime.tv_nsec); + return rb_time_nano_new((time_t)stx->stx_btime.tv_sec, stx->stx_btime.tv_nsec); } typedef struct statx statx_data; @@ -1411,7 +1451,7 @@ rb_group_member(GETGROUPS_T gid) return FALSE; #else int rv = FALSE; - int groups = 16; + int groups; VALUE v = 0; GETGROUPS_T *gary; int anum = -1; @@ -1419,25 +1459,9 @@ rb_group_member(GETGROUPS_T gid) if (getgid() == gid || getegid() == gid) return TRUE; - /* - * On Mac OS X (Mountain Lion), NGROUPS is 16. But libc and kernel - * accept more larger value. - * So we don't trunk NGROUPS anymore. - */ - while (groups <= RB_MAX_GROUPS) { - gary = ALLOCV_N(GETGROUPS_T, v, groups); - anum = getgroups(groups, gary); - if (anum != -1 && anum != groups) - break; - groups *= 2; - if (v) { - ALLOCV_END(v); - v = 0; - } - } - if (anum == -1) - return FALSE; - + groups = getgroups(0, NULL); + gary = ALLOCV_N(GETGROUPS_T, v, groups); + anum = getgroups(groups, gary); while (--anum >= 0) { if (gary[anum] == gid) { rv = TRUE; @@ -1762,25 +1786,20 @@ rb_file_exist_p(VALUE obj, VALUE fname) return Qtrue; } -/* - * call-seq: - * File.exists?(file_name) -> true or false - * - * Deprecated method. Don't use. - */ +/* :nodoc: */ static VALUE rb_file_exists_p(VALUE obj, VALUE fname) { - const char *s = "FileTest#"; + const char *s = "FileTest#exist?"; if (obj == rb_mFileTest) { - s = "FileTest."; + s = "FileTest.exist?"; } else if (obj == rb_cFile || (RB_TYPE_P(obj, T_CLASS) && RTEST(rb_class_inherited_p(obj, rb_cFile)))) { - s = "File."; + s = "File.exist?"; } - rb_warning("%sexists? is a deprecated name, use %sexist? instead", s, s); + rb_warn_deprecated("%.*ss?", s, (int)(strlen(s)-1), s); return rb_file_exist_p(obj, fname); } @@ -1798,8 +1817,7 @@ rb_file_exists_p(VALUE obj, VALUE fname) static VALUE rb_file_readable_p(VALUE obj, VALUE fname) { - if (rb_eaccess(fname, R_OK) < 0) return Qfalse; - return Qtrue; + return RBOOL(rb_eaccess(fname, R_OK) >= 0); } /* @@ -1816,8 +1834,7 @@ rb_file_readable_p(VALUE obj, VALUE fname) static VALUE rb_file_readable_real_p(VALUE obj, VALUE fname) { - if (rb_access(fname, R_OK) < 0) return Qfalse; - return Qtrue; + return RBOOL(rb_access(fname, R_OK) >= 0); } #ifndef S_IRUGO @@ -1872,8 +1889,7 @@ rb_file_world_readable_p(VALUE obj, VALUE fname) static VALUE rb_file_writable_p(VALUE obj, VALUE fname) { - if (rb_eaccess(fname, W_OK) < 0) return Qfalse; - return Qtrue; + return RBOOL(rb_eaccess(fname, W_OK) >= 0); } /* @@ -1890,8 +1906,7 @@ rb_file_writable_p(VALUE obj, VALUE fname) static VALUE rb_file_writable_real_p(VALUE obj, VALUE fname) { - if (rb_access(fname, W_OK) < 0) return Qfalse; - return Qtrue; + return RBOOL(rb_access(fname, W_OK) >= 0); } /* @@ -1942,8 +1957,7 @@ rb_file_world_writable_p(VALUE obj, VALUE fname) static VALUE rb_file_executable_p(VALUE obj, VALUE fname) { - if (rb_eaccess(fname, X_OK) < 0) return Qfalse; - return Qtrue; + return RBOOL(rb_eaccess(fname, X_OK) >= 0); } /* @@ -1964,8 +1978,7 @@ rb_file_executable_p(VALUE obj, VALUE fname) static VALUE rb_file_executable_real_p(VALUE obj, VALUE fname) { - if (rb_access(fname, X_OK) < 0) return Qfalse; - return Qtrue; + return RBOOL(rb_access(fname, X_OK) >= 0); } #ifndef S_ISREG @@ -1990,8 +2003,7 @@ rb_file_file_p(VALUE obj, VALUE fname) struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; - if (S_ISREG(st.st_mode)) return Qtrue; - return Qfalse; + return RBOOL(S_ISREG(st.st_mode)); } /* @@ -2010,8 +2022,7 @@ rb_file_zero_p(VALUE obj, VALUE fname) struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; - if (st.st_size == 0) return Qtrue; - return Qfalse; + return RBOOL(st.st_size == 0); } /* @@ -2051,8 +2062,7 @@ rb_file_owned_p(VALUE obj, VALUE fname) struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; - if (st.st_uid == geteuid()) return Qtrue; - return Qfalse; + return RBOOL(st.st_uid == geteuid()); } static VALUE @@ -2061,8 +2071,7 @@ rb_file_rowned_p(VALUE obj, VALUE fname) struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; - if (st.st_uid == getuid()) return Qtrue; - return Qfalse; + return RBOOL(st.st_uid == getuid()); } /* @@ -2095,8 +2104,7 @@ check3rdbyte(VALUE fname, int mode) struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; - if (st.st_mode & mode) return Qtrue; - return Qfalse; + return RBOOL(st.st_mode & mode); } #endif @@ -2507,20 +2515,33 @@ rb_file_birthtime(VALUE obj) * */ -static VALUE -rb_file_size(VALUE obj) +off_t +rb_file_size(VALUE file) { - rb_io_t *fptr; - struct stat st; + if (RB_TYPE_P(file, T_FILE)) { + rb_io_t *fptr; + struct stat st; - GetOpenFile(obj, fptr); - if (fptr->mode & FMODE_WRITABLE) { - rb_io_flush_raw(obj, 0); + RB_IO_POINTER(file, fptr); + if (fptr->mode & FMODE_WRITABLE) { + rb_io_flush_raw(file, 0); + } + + if (fstat(fptr->fd, &st) == -1) { + rb_sys_fail_path(fptr->pathv); + } + + return st.st_size; } - if (fstat(fptr->fd, &st) == -1) { - rb_sys_fail_path(fptr->pathv); + else { + return NUM2OFFT(rb_funcall(file, idSize, 0)); } - return OFFT2NUM(st.st_size); +} + +static VALUE +file_size(VALUE self) +{ + return OFFT2NUM(rb_file_size(self)); } static int @@ -3331,7 +3352,6 @@ getcwdofdrv(int drv) } return drvcwd; } -#endif static inline int not_same_drive(VALUE path, int drive) @@ -3346,6 +3366,7 @@ not_same_drive(VALUE path, int drive) } } #endif +#endif static inline char * skiproot(const char *path, const char *end, rb_encoding *enc) @@ -3447,6 +3468,20 @@ rb_enc_path_end(const char *path, const char *end, rb_encoding *enc) return chompdirsep(path, end, enc); } +static rb_encoding * +fs_enc_check(VALUE path1, VALUE path2) +{ + rb_encoding *enc = rb_enc_check(path1, path2); + int encidx = rb_enc_to_index(enc); + if (encidx == ENCINDEX_US_ASCII) { + encidx = rb_enc_get_index(path1); + if (encidx == ENCINDEX_US_ASCII) + encidx = rb_enc_get_index(path2); + enc = rb_enc_from_index(encidx); + } + return enc; +} + #if USE_NTFS static char * ntfs_tail(const char *path, const char *end, rb_encoding *enc) @@ -3583,21 +3618,42 @@ rb_default_home_dir(VALUE result) #if defined HAVE_PWD_H if (!dir) { - const char *login = getlogin(); - if (login) { - struct passwd *pw = getpwnam(login); - if (pw) { - copy_home_path(result, pw->pw_dir); - endpwent(); - return result; - } - endpwent(); - rb_raise(rb_eArgError, "couldn't find HOME for login `%s' -- expanding `~'", - login); - } - else { - rb_raise(rb_eArgError, "couldn't find login name -- expanding `~'"); - } + /* We'll look up the user's default home dir in the password db by + * login name, if possible, and failing that will fall back to looking + * the information up by uid (as would be needed for processes that + * are not a descendant of login(1) or a work-alike). + * + * While the lookup by uid is more likely to succeed (since we always + * have a uid, but may or may not have a login name), we prefer first + * looking up by name to accommodate the possibility of multiple login + * names (each with its own record in the password database, so each + * with a potentially different home directory) being mapped to the + * same uid (as explicitly allowed for by POSIX; see getlogin(3posix)). + */ + VALUE login_name = rb_getlogin(); + +# if !defined(HAVE_GETPWUID_R) && !defined(HAVE_GETPWUID) + /* This is a corner case, but for backward compatibility reasons we + * want to emit this error if neither the lookup by login name nor + * lookup by getuid() has a chance of succeeding. + */ + if (NIL_P(login_name)) { + rb_raise(rb_eArgError, "couldn't find login name -- expanding `~'"); + } +# endif + + VALUE pw_dir = rb_getpwdirnam_for_login(login_name); + if (NIL_P(pw_dir)) { + pw_dir = rb_getpwdiruid(); + if (NIL_P(pw_dir)) { + rb_raise(rb_eArgError, "couldn't find home for uid `%ld'", (long)getuid()); + } + } + + /* found it */ + copy_home_path(result, RSTRING_PTR(pw_dir)); + rb_str_resize(pw_dir, 0); + return result; } #endif if (!dir) { @@ -3626,7 +3682,7 @@ append_fspath(VALUE result, VALUE fname, char *dir, rb_encoding **enc, rb_encodi size_t dirlen = strlen(dir), buflen = rb_str_capacity(result); if (NORMALIZE_UTF8PATH || *enc != fsenc) { - rb_encoding *direnc = rb_enc_check(fname, dirname = ospath_new(dir, dirlen, fsenc)); + rb_encoding *direnc = fs_enc_check(fname, dirname = ospath_new(dir, dirlen, fsenc)); if (direnc != fsenc) { dirname = rb_str_conv_enc(dirname, fsenc, direnc); RSTRING_GETMEM(dirname, cwdp, dirlen); @@ -3722,7 +3778,7 @@ rb_file_expand_path_internal(VALUE fname, VALUE dname, int abs_mode, int long_na p = e; } else { - rb_enc_associate(result, enc = rb_enc_check(result, fname)); + rb_enc_associate(result, enc = fs_enc_check(result, fname)); p = pend; } p = chompdirsep(skiproot(buf, p, enc), p, enc); @@ -3733,7 +3789,7 @@ rb_file_expand_path_internal(VALUE fname, VALUE dname, int abs_mode, int long_na else if (!rb_is_absolute_path(s)) { if (!NIL_P(dname)) { rb_file_expand_path_internal(dname, Qnil, abs_mode, long_name, result); - rb_enc_associate(result, rb_enc_check(result, fname)); + rb_enc_associate(result, fs_enc_check(result, fname)); BUFINIT(); p = pend; } @@ -3761,7 +3817,7 @@ rb_file_expand_path_internal(VALUE fname, VALUE dname, int abs_mode, int long_na BUFCHECK(bdiff >= buflen); memset(buf, '/', len); rb_str_set_len(result, len); - rb_enc_associate(result, rb_enc_check(result, fname)); + rb_enc_associate(result, fs_enc_check(result, fname)); } if (p > buf && p[-1] == '/') --p; @@ -4222,7 +4278,7 @@ realpath_rec(long *prefixlenp, VALUE *resolvedp, const char *unresolved, VALUE f rb_encoding *tmpenc, *linkenc = rb_enc_get(link); link_orig = link; link = rb_str_subseq(link, 0, link_prefixlen); - tmpenc = rb_enc_check(*resolvedp, link); + tmpenc = fs_enc_check(*resolvedp, link); if (tmpenc != linkenc) link = rb_str_conv_enc(link, linkenc, tmpenc); *resolvedp = link; *prefixlenp = link_prefixlen; @@ -4341,6 +4397,21 @@ rb_check_realpath_emulate(VALUE basedir, VALUE path, rb_encoding *origenc, enum static VALUE rb_file_join(VALUE ary); +#ifndef HAVE_REALPATH +static VALUE +rb_check_realpath_emulate_try(VALUE arg) +{ + VALUE *args = (VALUE *)arg; + return rb_check_realpath_emulate(args[0], args[1], (rb_encoding *)args[2], RB_REALPATH_CHECK); +} + +static VALUE +rb_check_realpath_emulate_rescue(VALUE arg, VALUE exc) +{ + return Qnil; +} +#endif /* HAVE_REALPATH */ + static VALUE rb_check_realpath_internal(VALUE basedir, VALUE path, rb_encoding *origenc, enum rb_realpath_mode mode) { @@ -4348,7 +4419,6 @@ rb_check_realpath_internal(VALUE basedir, VALUE path, rb_encoding *origenc, enum VALUE unresolved_path; char *resolved_ptr = NULL; VALUE resolved; - struct stat st; if (mode == RB_REALPATH_DIR) { return rb_check_realpath_emulate(basedir, path, origenc, mode); @@ -4379,14 +4449,17 @@ rb_check_realpath_internal(VALUE basedir, VALUE path, rb_encoding *origenc, enum resolved = ospath_new(resolved_ptr, strlen(resolved_ptr), rb_filesystem_encoding()); free(resolved_ptr); +# if !defined(__LINUX__) && !defined(__APPLE__) /* As `resolved` is a String in the filesystem encoding, no * conversion is needed */ + struct stat st; if (stat_without_gvl(RSTRING_PTR(resolved), &st) < 0) { if (mode == RB_REALPATH_CHECK) { return Qnil; } rb_sys_fail_path(unresolved_path); } +# endif if (origenc && origenc != rb_enc_get(resolved)) { if (!rb_enc_str_asciionly_p(resolved)) { @@ -4405,7 +4478,18 @@ rb_check_realpath_internal(VALUE basedir, VALUE path, rb_encoding *origenc, enum RB_GC_GUARD(unresolved_path); return resolved; #else - return rb_check_realpath_emulate(basedir, path, origenc, mode); + if (mode == RB_REALPATH_CHECK) { + VALUE arg[3]; + arg[0] = basedir; + arg[1] = path; + arg[2] = (VALUE)origenc; + + return rb_rescue(rb_check_realpath_emulate_try, (VALUE)arg, + rb_check_realpath_emulate_rescue, Qnil); + } + else { + return rb_check_realpath_emulate(basedir, path, origenc, mode); + } #endif /* HAVE_REALPATH */ } @@ -4626,9 +4710,11 @@ rb_file_s_basename(int argc, VALUE *argv, VALUE _) return basename; } +static VALUE rb_file_dirname_n(VALUE fname, int n); + /* * call-seq: - * File.dirname(file_name) -> dir_name + * File.dirname(file_name, level = 1) -> dir_name * * Returns all components of the filename given in file_name * except the last one (after first stripping trailing separators). @@ -4637,21 +4723,40 @@ rb_file_s_basename(int argc, VALUE *argv, VALUE _) * not nil. * * File.dirname("/home/gumby/work/ruby.rb") #=> "/home/gumby/work" + * + * If +level+ is given, removes the last +level+ components, not only + * one. + * + * File.dirname("/home/gumby/work/ruby.rb", 2) #=> "/home/gumby" + * File.dirname("/home/gumby/work/ruby.rb", 4) #=> "/" */ static VALUE -rb_file_s_dirname(VALUE klass, VALUE fname) +rb_file_s_dirname(int argc, VALUE *argv, VALUE klass) { - return rb_file_dirname(fname); + int n = 1; + if ((argc = rb_check_arity(argc, 1, 2)) > 1) { + n = NUM2INT(argv[1]); + } + return rb_file_dirname_n(argv[0], n); } VALUE rb_file_dirname(VALUE fname) +{ + return rb_file_dirname_n(fname, 1); +} + +static VALUE +rb_file_dirname_n(VALUE fname, int n) { const char *name, *root, *p, *end; VALUE dirname; rb_encoding *enc; + VALUE sepsv = 0; + const char **seps; + if (n < 0) rb_raise(rb_eArgError, "negative level: %d", n); FilePathStringValue(fname); name = StringValueCStr(fname); end = name + RSTRING_LEN(fname); @@ -4664,10 +4769,39 @@ rb_file_dirname(VALUE fname) if (root > name + 1) name = root - 1; #endif - p = strrdirsep(root, end, enc); - if (!p) { + if (n > (end - root + 1) / 2) { p = root; } + else { + int i; + switch (n) { + case 0: + p = end; + break; + case 1: + if (!(p = strrdirsep(root, end, enc))) p = root; + break; + default: + seps = ALLOCV_N(const char *, sepsv, n); + for (i = 0; i < n; ++i) seps[i] = root; + i = 0; + for (p = root; p < end; ) { + if (isdirsep(*p)) { + const char *tmp = p++; + while (p < end && isdirsep(*p)) p++; + if (p >= end) break; + seps[i++] = tmp; + if (i == n) i = 0; + } + else { + Inc(p, end, enc); + } + } + p = seps[i]; + ALLOCV_END(sepsv); + break; + } + } if (p == name) return rb_usascii_str_new2("."); #ifdef DOSISH_DRIVE_LETTER @@ -4894,7 +5028,7 @@ rb_file_join(VALUE ary) rb_str_cat(result, "/", 1); } } - enc = rb_enc_check(result, tmp); + enc = fs_enc_check(result, tmp); rb_str_buf_append(result, tmp); rb_enc_associate(result, enc); } @@ -5258,14 +5392,7 @@ rb_f_test(int argc, VALUE *argv, VALUE _) if (argc == 0) rb_check_arity(argc, 2, 3); cmd = NUM2CHR(argv[0]); if (cmd == 0) { - unknown: - /* unknown command */ - if (ISPRINT(cmd)) { - rb_raise(rb_eArgError, "unknown command '%s%c'", cmd == '\'' || cmd == '\\' ? "\\" : "", cmd); - } - else { - rb_raise(rb_eArgError, "unknown command \"\\x%02X\"", cmd); - } + goto unknown; } if (strchr("bcdefgGkloOprRsSuwWxXz", cmd)) { CHECK(1); @@ -5391,7 +5518,15 @@ rb_f_test(int argc, VALUE *argv, VALUE _) return Qfalse; } } - goto unknown; + unknown: + /* unknown command */ + if (ISPRINT(cmd)) { + rb_raise(rb_eArgError, "unknown command '%s%c'", cmd == '\'' || cmd == '\\' ? "\\" : "", cmd); + } + else { + rb_raise(rb_eArgError, "unknown command \"\\x%02X\"", cmd); + } + UNREACHABLE_RETURN(Qundef); } @@ -5677,11 +5812,11 @@ rb_stat_r(VALUE obj) #endif #ifdef S_IRUSR if (rb_stat_owned(obj)) - return st->st_mode & S_IRUSR ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IRUSR); #endif #ifdef S_IRGRP if (rb_stat_grpowned(obj)) - return st->st_mode & S_IRGRP ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IRGRP); #endif #ifdef S_IROTH if (!(st->st_mode & S_IROTH)) return Qfalse; @@ -5710,11 +5845,11 @@ rb_stat_R(VALUE obj) #endif #ifdef S_IRUSR if (rb_stat_rowned(obj)) - return st->st_mode & S_IRUSR ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IRUSR); #endif #ifdef S_IRGRP if (rb_group_member(get_stat(obj)->st_gid)) - return st->st_mode & S_IRGRP ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IRGRP); #endif #ifdef S_IROTH if (!(st->st_mode & S_IROTH)) return Qfalse; @@ -5770,11 +5905,11 @@ rb_stat_w(VALUE obj) #endif #ifdef S_IWUSR if (rb_stat_owned(obj)) - return st->st_mode & S_IWUSR ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IWUSR); #endif #ifdef S_IWGRP if (rb_stat_grpowned(obj)) - return st->st_mode & S_IWGRP ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IWGRP); #endif #ifdef S_IWOTH if (!(st->st_mode & S_IWOTH)) return Qfalse; @@ -5803,11 +5938,11 @@ rb_stat_W(VALUE obj) #endif #ifdef S_IWUSR if (rb_stat_rowned(obj)) - return st->st_mode & S_IWUSR ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IWUSR); #endif #ifdef S_IWGRP if (rb_group_member(get_stat(obj)->st_gid)) - return st->st_mode & S_IWGRP ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IWGRP); #endif #ifdef S_IWOTH if (!(st->st_mode & S_IWOTH)) return Qfalse; @@ -5862,16 +5997,16 @@ rb_stat_x(VALUE obj) #ifdef USE_GETEUID if (geteuid() == 0) { - return st->st_mode & S_IXUGO ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IXUGO); } #endif #ifdef S_IXUSR if (rb_stat_owned(obj)) - return st->st_mode & S_IXUSR ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IXUSR); #endif #ifdef S_IXGRP if (rb_stat_grpowned(obj)) - return st->st_mode & S_IXGRP ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IXGRP); #endif #ifdef S_IXOTH if (!(st->st_mode & S_IXOTH)) return Qfalse; @@ -5894,16 +6029,16 @@ rb_stat_X(VALUE obj) #ifdef USE_GETEUID if (getuid() == 0) { - return st->st_mode & S_IXUGO ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IXUGO); } #endif #ifdef S_IXUSR if (rb_stat_rowned(obj)) - return st->st_mode & S_IXUSR ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IXUSR); #endif #ifdef S_IXGRP if (rb_group_member(get_stat(obj)->st_gid)) - return st->st_mode & S_IXGRP ? Qtrue : Qfalse; + return RBOOL(st->st_mode & S_IXGRP); #endif #ifdef S_IXOTH if (!(st->st_mode & S_IXOTH)) return Qfalse; @@ -5949,11 +6084,13 @@ rb_stat_z(VALUE obj) /* * call-seq: - * state.size -> integer + * stat.size? -> Integer or nil * - * Returns the size of stat in bytes. + * Returns +nil+ if stat is a zero-length file, the size of + * the file otherwise. * - * File.stat("testfile").size #=> 66 + * File.stat("testfile").size? #=> 66 + * File.stat("/dev/null").size? #=> nil * */ @@ -6114,7 +6251,7 @@ rb_is_absolute_path(const char *path) #if ENABLE_PATH_CHECK static int -path_check_0(VALUE path, int execpath) +path_check_0(VALUE path) { struct stat st; const char *p0 = StringValueCStr(path); @@ -6142,12 +6279,16 @@ path_check_0(VALUE path, int execpath) #endif if (STAT(p0, &st) == 0 && S_ISDIR(st.st_mode) && (st.st_mode & S_IWOTH) #ifdef S_ISVTX - && !(p && execpath && (st.st_mode & S_ISVTX)) + && !(p && (st.st_mode & S_ISVTX)) #endif && !access(p0, W_OK)) { - rb_enc_warn(enc, "Insecure world writable dir %s in %sPATH, mode 0%" + rb_enc_warn(enc, "Insecure world writable dir %s in PATH, mode 0%" +#if SIZEOF_DEV_T > SIZEOF_INT PRI_MODET_PREFIX"o", - p0, (execpath ? "" : "LOAD_"), st.st_mode); +#else + "o", +#endif + p0, st.st_mode); if (p) *p = '/'; RB_GC_GUARD(path); return 0; @@ -6162,12 +6303,6 @@ path_check_0(VALUE path, int execpath) } #endif -#if ENABLE_PATH_CHECK -#define fpath_check(path) path_check_0((path), FALSE) -#else -#define fpath_check(path) 1 -#endif - int rb_path_check(const char *path) { @@ -6183,7 +6318,7 @@ rb_path_check(const char *path) if (!p) p = pend; for (;;) { - if (!path_check_0(rb_str_new(p0, p - p0), TRUE)) { + if (!path_check_0(rb_str_new(p0, p - p0))) { return 0; /* not safe */ } p0 = p + 1; @@ -6257,19 +6392,16 @@ is_explicit_relative(const char *path) static VALUE copy_path_class(VALUE path, VALUE orig) { + int encidx = rb_enc_get_index(orig); + if (encidx == ENCINDEX_ASCII || encidx == ENCINDEX_US_ASCII) + encidx = rb_filesystem_encindex(); + rb_enc_associate_index(path, encidx); str_shrink(path); RBASIC_SET_CLASS(path, rb_obj_class(orig)); OBJ_FREEZE(path); return path; } -int -rb_find_file_ext_safe(VALUE *filep, const char *const *ext, int _level) -{ - rb_warn("rb_find_file_ext_safe will be removed in Ruby 3.0"); - return rb_find_file_ext(filep, ext); -} - int rb_find_file_ext(VALUE *filep, const char *const *ext) { @@ -6329,13 +6461,6 @@ rb_find_file_ext(VALUE *filep, const char *const *ext) return 0; } -VALUE -rb_find_file_safe(VALUE path, int _level) -{ - rb_warn("rb_find_file_safe will be removed in Ruby 3.0"); - return rb_find_file(path); -} - VALUE rb_find_file(VALUE path) { @@ -6433,6 +6558,139 @@ const char ruby_null_device[] = * read-only, which is reported as 0444. * * Various constants for the methods in File can be found in File::Constants. + * + * == What's Here + * + * First, what's elsewhere. \Class \File: + * + * - Inherits from {class IO}[IO.html#class-IO-label-What-27s+Here], + * in particular, methods for creating, reading, and writing files + * - Includes {module FileTest}[FileTest.html#module-FileTest-label-What-27s+Here]. + * which provides dozens of additional methods. + * + * Here, class \File provides methods that are useful for: + * + * - {Creating}[#class-File-label-Creating] + * - {Querying}[#class-File-label-Querying] + * - {Settings}[#class-File-label-Settings] + * - {Other}[#class-File-label-Other] + * + * === Creating + * + * - ::new:: Opens the file at the given path; returns the file. + * - ::open:: Same as ::new, but when given a block will yield the file to the block, + * and close the file upon exiting the block. + * - ::link:: Creates a new name for an existing file using a hard link. + * - ::mkfifo:: Returns the FIFO file created at the given path. + * - ::symlink:: Creates a symbolic link for the given file path. + * + * === Querying + * + * _Paths_ + * + * - ::absolute_path:: Returns the absolute file path for the given path. + * - ::absolute_path?:: Returns whether the given path is the absolute file path. + * - ::basename:: Returns the last component of the given file path. + * - ::dirname:: Returns all but the last component of the given file path. + * - ::expand_path:: Returns the absolute file path for the given path, + * expanding ~ for a home directory. + * - ::extname:: Returns the file extension for the given file path. + * - ::fnmatch? (aliased as ::fnmatch):: Returns whether the given file path + * matches the given pattern. + * - ::join:: Joins path components into a single path string. + * - ::path:: Returns the string representation of the given path. + * - ::readlink:: Returns the path to the file at the given symbolic link. + * - ::realdirpath:: Returns the real path for the given file path, + * where the last component need not exist. + * - ::realpath:: Returns the real path for the given file path, + * where all components must exist. + * - ::split:: Returns an array of two strings: the directory name and basename + * of the file at the given path. + * - #path (aliased as #to_path):: Returns the string representation of the given path. + * + * _Times_ + * + * - ::atime:: Returns a \Time for the most recent access to the given file. + * - ::birthtime:: Returns a \Time for the creation of the given file. + * - ::ctime:: Returns a \Time for the metadata change of the given file. + * - ::mtime:: Returns a \Time for the most recent data modification to + * the content of the given file. + * - #atime:: Returns a \Time for the most recent access to +self+. + * - #birthtime:: Returns a \Time the creation for +self+. + * - #ctime:: Returns a \Time for the metadata change of +self+. + * - #mtime:: Returns a \Time for the most recent data modification + * to the content of +self+. + * + * _Types_ + * + * - ::blockdev?:: Returns whether the file at the given path is a block device. + * - ::chardev?:: Returns whether the file at the given path is a character device. + * - ::directory?:: Returns whether the file at the given path is a diretory. + * - ::executable?:: Returns whether the file at the given path is executable + * by the effective user and group of the current process. + * - ::executable_real?:: Returns whether the file at the given path is executable + * by the real user and group of the current process. + * - ::exist?:: Returns whether the file at the given path exists. + * - ::file?:: Returns whether the file at the given path is a regular file. + * - ::ftype:: Returns a string giving the type of the file at the given path. + * - ::grpowned?:: Returns whether the effective group of the current process + * owns the file at the given path. + * - ::identical?:: Returns whether the files at two given paths are identical. + * - ::lstat:: Returns the File::Stat object for the last symbolic link + * in the given path. + * - ::owned?:: Returns whether the effective user of the current process + * owns the file at the given path. + * - ::pipe?:: Returns whether the file at the given path is a pipe. + * - ::readable?:: Returns whether the file at the given path is readable + * by the effective user and group of the current process. + * - ::readable_real?:: Returns whether the file at the given path is readable + * by the real user and group of the current process. + * - ::setgid?:: Returns whether the setgid bit is set for the file at the given path. + * - ::setuid?:: Returns whether the setuid bit is set for the file at the given path. + * - ::socket?:: Returns whether the file at the given path is a socket. + * - ::stat:: Returns the File::Stat object for the file at the given path. + * - ::sticky?:: Returns whether the file at the given path has its sticky bit set. + * - ::symlink?:: Returns whether the file at the given path is a symbolic link. + * - ::umask:: Returns the umask value for the current process. + * - ::world_readable?:: Returns whether the file at the given path is readable + * by others. + * - ::world_writable?:: Returns whether the file at the given path is writable + * by others. + * - ::writable?:: Returns whether the file at the given path is writable + * by the effective user and group of the current process. + * - ::writable_real?:: Returns whether the file at the given path is writable + * by the real user and group of the current process. + * - #lstat:: Returns the File::Stat object for the last symbolic link + * in the path for +self+. + * + * _Contents_ + * + * - ::empty? (aliased as ::zero?):: Returns whether the file at the given path + * exists and is empty. + * - ::size:: Returns the size (bytes) of the file at the given path. + * - ::size?:: Returns +nil+ if there is no file at the given path, + * or if that file is empty; otherwise returns the file size (bytes). + * - #size:: Returns the size (bytes) of +self+. + * + * === Settings + * + * - ::chmod:: Changes permissions of the file at the given path. + * - ::chown:: Change ownership of the file at the given path. + * - ::lchmod:: Changes permissions of the last symbolic link in the given path. + * - ::lchown:: Change ownership of the last symbolic in the given path. + * - ::lutime:: For each given file path, sets the access time and modification time + * of the last symbolic link in the path. + * - ::rename:: Moves the file at one given path to another given path. + * - ::utime:: Sets the access time and modification time of each file + * at the given paths. + * - #flock:: Locks or unlocks +self+. + * + * === Other + * + * - ::truncate:: Truncates the file at the given file path to the given size. + * - ::unlink (aliased as ::delete):: Deletes the file for each given file path. + * - #truncate:: Truncates +self+ to the given size. + * */ void @@ -6507,7 +6765,7 @@ Init_File(void) rb_define_singleton_method(rb_cFile, "realpath", rb_file_s_realpath, -1); rb_define_singleton_method(rb_cFile, "realdirpath", rb_file_s_realdirpath, -1); rb_define_singleton_method(rb_cFile, "basename", rb_file_s_basename, -1); - rb_define_singleton_method(rb_cFile, "dirname", rb_file_s_dirname, 1); + rb_define_singleton_method(rb_cFile, "dirname", rb_file_s_dirname, -1); rb_define_singleton_method(rb_cFile, "extname", rb_file_s_extname, 1); rb_define_singleton_method(rb_cFile, "path", rb_file_s_path, 1); @@ -6535,7 +6793,7 @@ Init_File(void) rb_define_method(rb_cFile, "mtime", rb_file_mtime, 0); rb_define_method(rb_cFile, "ctime", rb_file_ctime, 0); rb_define_method(rb_cFile, "birthtime", rb_file_birthtime, 0); - rb_define_method(rb_cFile, "size", rb_file_size, 0); + rb_define_method(rb_cFile, "size", file_size, 0); rb_define_method(rb_cFile, "chmod", rb_file_chmod, 1); rb_define_method(rb_cFile, "chown", rb_file_chown, 2); diff --git a/ruby/gc.c b/ruby/gc.c index 0c007dffe..ef9327df1 100644 --- a/ruby/gc.c +++ b/ruby/gc.c @@ -14,47 +14,39 @@ #define rb_data_object_alloc rb_data_object_alloc #define rb_data_typed_object_alloc rb_data_typed_object_alloc -#include "ruby/encoding.h" -#include "ruby/io.h" -#include "ruby/st.h" -#include "ruby/re.h" -#include "ruby/thread.h" -#include "ruby/util.h" -#include "ruby/debug.h" -#include "internal.h" -#include "eval_intern.h" -#include "vm_core.h" -#include "builtin.h" -#include "gc.h" -#include "constant.h" -#include "ruby_atomic.h" -#include "probes.h" -#include "id_table.h" -#include "symbol.h" -#include -#include -#include -#include -#include "ruby_assert.h" -#include "debug_counter.h" -#include "transient_heap.h" -#include "mjit.h" +#include "ruby/internal/config.h" +#ifdef _WIN32 +# include "ruby/ruby.h" +#endif -#undef rb_data_object_wrap +#include + +#define sighandler_t ruby_sighandler_t + +#ifndef _WIN32 +#include +#include +#endif + +#include +#include +#include +/* MALLOC_HEADERS_BEGIN */ #ifndef HAVE_MALLOC_USABLE_SIZE # ifdef _WIN32 -# define HAVE_MALLOC_USABLE_SIZE -# define malloc_usable_size(a) _msize(a) +# define HAVE_MALLOC_USABLE_SIZE +# define malloc_usable_size(a) _msize(a) # elif defined HAVE_MALLOC_SIZE -# define HAVE_MALLOC_USABLE_SIZE -# define malloc_usable_size(a) malloc_size(a) +# define HAVE_MALLOC_USABLE_SIZE +# define malloc_usable_size(a) malloc_size(a) # endif #endif + #ifdef HAVE_MALLOC_USABLE_SIZE # ifdef RUBY_ALTERNATIVE_MALLOC_HEADER -# include RUBY_ALTERNATIVE_MALLOC_HEADER -# elif HAVE_MALLOC_H +/* Alternative malloc header is included in ruby/missing.h */ +# elif defined(HAVE_MALLOC_H) # include # elif defined(HAVE_MALLOC_NP_H) # include @@ -63,75 +55,96 @@ # endif #endif +#if !defined(PAGE_SIZE) && defined(HAVE_SYS_USER_H) +/* LIST_HEAD conflicts with sys/queue.h on macOS */ +# include +#endif +/* MALLOC_HEADERS_END */ + #ifdef HAVE_SYS_TIME_H -#include +# include #endif #ifdef HAVE_SYS_RESOURCE_H -#include +# include #endif #if defined _WIN32 || defined __CYGWIN__ -#include +# include #elif defined(HAVE_POSIX_MEMALIGN) #elif defined(HAVE_MEMALIGN) -#include +# include #endif -#define rb_setjmp(env) RUBY_SETJMP(env) -#define rb_jmp_buf rb_jmpbuf_t +#include -#if defined(_MSC_VER) && defined(_WIN64) -#include -#pragma intrinsic(_umul128) +#ifdef __EMSCRIPTEN__ +#include #endif -/* Expecting this struct to be eliminated by function inlinings */ -struct optional { - bool left; - size_t right; -}; - -static inline struct optional -size_mul_overflow(size_t x, size_t y) -{ - bool p; - size_t z; -#if 0 - -#elif defined(HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW) - p = __builtin_mul_overflow(x, y, &z); +#undef LIST_HEAD /* ccan/list conflicts with BSD-origin sys/queue.h. */ -#elif defined(DSIZE_T) - RB_GNUC_EXTENSION DSIZE_T dx = x; - RB_GNUC_EXTENSION DSIZE_T dy = y; - RB_GNUC_EXTENSION DSIZE_T dz = dx * dy; - p = dz > SIZE_MAX; - z = (size_t)dz; +#include "constant.h" +#include "debug_counter.h" +#include "eval_intern.h" +#include "gc.h" +#include "id_table.h" +#include "internal.h" +#include "internal/class.h" +#include "internal/complex.h" +#include "internal/cont.h" +#include "internal/error.h" +#include "internal/eval.h" +#include "internal/gc.h" +#include "internal/hash.h" +#include "internal/imemo.h" +#include "internal/io.h" +#include "internal/numeric.h" +#include "internal/object.h" +#include "internal/proc.h" +#include "internal/rational.h" +#include "internal/sanitizers.h" +#include "internal/struct.h" +#include "internal/symbol.h" +#include "internal/thread.h" +#include "internal/variable.h" +#include "internal/warnings.h" +#include "mjit.h" +#include "probes.h" +#include "regint.h" +#include "ruby/debug.h" +#include "ruby/io.h" +#include "ruby/re.h" +#include "ruby/st.h" +#include "ruby/thread.h" +#include "ruby/util.h" +#include "ruby_assert.h" +#include "ruby_atomic.h" +#include "symbol.h" +#include "transient_heap.h" +#include "vm_core.h" +#include "vm_sync.h" +#include "vm_callinfo.h" +#include "ractor_core.h" -#elif defined(_MSC_VER) && defined(_WIN64) - unsigned __int64 dp; - unsigned __int64 dz = _umul128(x, y, &dp); - p = (bool)dp; - z = (size_t)dz; +#include "builtin.h" -#else - /* https://wiki.sei.cmu.edu/confluence/display/c/INT30-C.+Ensure+that+unsigned+integer+operations+do+not+wrap */ - p = (y != 0) && (x > SIZE_MAX / y); - z = x * y; +#define rb_setjmp(env) RUBY_SETJMP(env) +#define rb_jmp_buf rb_jmpbuf_t +#undef rb_data_object_wrap +#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) +#define MAP_ANONYMOUS MAP_ANON #endif - return (struct optional) { p, z, }; -} -static inline struct optional +static inline struct rbimpl_size_mul_overflow_tag size_add_overflow(size_t x, size_t y) { size_t z; bool p; #if 0 -#elif defined(HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW) +#elif __has_builtin(__builtin_add_overflow) p = __builtin_add_overflow(x, y, &z); #elif defined(DSIZE_T) @@ -146,24 +159,24 @@ size_add_overflow(size_t x, size_t y) p = z < y; #endif - return (struct optional) { p, z, }; + return (struct rbimpl_size_mul_overflow_tag) { p, z, }; } -static inline struct optional +static inline struct rbimpl_size_mul_overflow_tag size_mul_add_overflow(size_t x, size_t y, size_t z) /* x * y + z */ { - struct optional t = size_mul_overflow(x, y); - struct optional u = size_add_overflow(t.right, z); - return (struct optional) { t.left || u.left, u.right }; + struct rbimpl_size_mul_overflow_tag t = rbimpl_size_mul_overflow(x, y); + struct rbimpl_size_mul_overflow_tag u = size_add_overflow(t.right, z); + return (struct rbimpl_size_mul_overflow_tag) { t.left || u.left, u.right }; } -static inline struct optional +static inline struct rbimpl_size_mul_overflow_tag size_mul_add_mul_overflow(size_t x, size_t y, size_t z, size_t w) /* x * y + z * w */ { - struct optional t = size_mul_overflow(x, y); - struct optional u = size_mul_overflow(z, w); - struct optional v = size_add_overflow(t.right, u.right); - return (struct optional) { t.left || u.left || v.left, v.right }; + struct rbimpl_size_mul_overflow_tag t = rbimpl_size_mul_overflow(x, y); + struct rbimpl_size_mul_overflow_tag u = rbimpl_size_mul_overflow(z, w); + struct rbimpl_size_mul_overflow_tag v = size_add_overflow(t.right, u.right); + return (struct rbimpl_size_mul_overflow_tag) { t.left || u.left || v.left, v.right }; } PRINTF_ARGS(NORETURN(static void gc_raise(VALUE, const char*, ...)), 2, 3); @@ -171,7 +184,7 @@ PRINTF_ARGS(NORETURN(static void gc_raise(VALUE, const char*, ...)), 2, 3); static inline size_t size_mul_or_raise(size_t x, size_t y, VALUE exc) { - struct optional t = size_mul_overflow(x, y); + struct rbimpl_size_mul_overflow_tag t = rbimpl_size_mul_overflow(x, y); if (LIKELY(!t.left)) { return t.right; } @@ -184,7 +197,7 @@ size_mul_or_raise(size_t x, size_t y, VALUE exc) "integer overflow: %"PRIuSIZE " * %"PRIuSIZE " > %"PRIuSIZE, - x, y, SIZE_MAX); + x, y, (size_t)SIZE_MAX); } } @@ -197,7 +210,7 @@ rb_size_mul_or_raise(size_t x, size_t y, VALUE exc) static inline size_t size_mul_add_or_raise(size_t x, size_t y, size_t z, VALUE exc) { - struct optional t = size_mul_add_overflow(x, y, z); + struct rbimpl_size_mul_overflow_tag t = size_mul_add_overflow(x, y, z); if (LIKELY(!t.left)) { return t.right; } @@ -211,7 +224,7 @@ size_mul_add_or_raise(size_t x, size_t y, size_t z, VALUE exc) " * %"PRIuSIZE " + %"PRIuSIZE " > %"PRIuSIZE, - x, y, z, SIZE_MAX); + x, y, z, (size_t)SIZE_MAX); } } @@ -224,7 +237,7 @@ rb_size_mul_add_or_raise(size_t x, size_t y, size_t z, VALUE exc) static inline size_t size_mul_add_mul_or_raise(size_t x, size_t y, size_t z, size_t w, VALUE exc) { - struct optional t = size_mul_add_mul_overflow(x, y, z, w); + struct rbimpl_size_mul_overflow_tag t = size_mul_add_mul_overflow(x, y, z, w); if (LIKELY(!t.left)) { return t.right; } @@ -239,7 +252,7 @@ size_mul_add_mul_or_raise(size_t x, size_t y, size_t z, size_t w, VALUE exc) " + %"PRIdSIZE " * %"PRIdSIZE " > %"PRIdSIZE, - x, y, z, w, SIZE_MAX); + x, y, z, w, (size_t)SIZE_MAX); } } @@ -365,7 +378,6 @@ static ruby_gc_params_t gc_params = { #define GC_DEBUG 0 #endif -#if USE_RGENGC /* RGENGC_DEBUG: * 1: basic information * 2: remember set operation @@ -382,8 +394,10 @@ static ruby_gc_params_t gc_params = { #endif #if RGENGC_DEBUG < 0 && !defined(_MSC_VER) # define RGENGC_DEBUG_ENABLED(level) (-(RGENGC_DEBUG) >= (level) && ruby_rgengc_debug >= (level)) -#else +#elif defined(HAVE_VA_ARGS_MACRO) # define RGENGC_DEBUG_ENABLED(level) ((RGENGC_DEBUG) >= (level)) +#else +# define RGENGC_DEBUG_ENABLED(level) 0 #endif int ruby_rgengc_debug; @@ -438,22 +452,6 @@ int ruby_rgengc_debug; #define RGENGC_FORCE_MAJOR_GC 0 #endif -#else /* USE_RGENGC */ - -#ifdef RGENGC_DEBUG -#undef RGENGC_DEBUG -#endif -#define RGENGC_DEBUG 0 -#ifdef RGENGC_CHECK_MODE -#undef RGENGC_CHECK_MODE -#endif -#define RGENGC_CHECK_MODE 0 -#define RGENGC_PROFILE 0 -#define RGENGC_ESTIMATE_OLDMALLOC 0 -#define RGENGC_FORCE_MAJOR_GC 0 - -#endif /* USE_RGENGC */ - #ifndef GC_PROFILE_MORE_DETAIL #define GC_PROFILE_MORE_DETAIL 0 #endif @@ -512,6 +510,7 @@ typedef enum { GPR_FLAG_HAVE_FINALIZE = 0x4000, GPR_FLAG_IMMEDIATE_MARK = 0x8000, GPR_FLAG_FULL_MARK = 0x10000, + GPR_FLAG_COMPACT = 0x20000, GPR_DEFAULT_REASON = (GPR_FLAG_FULL_MARK | GPR_FLAG_IMMEDIATE_MARK | @@ -519,7 +518,7 @@ typedef enum { } gc_profile_record_flag; typedef struct gc_profile_record { - int flags; + unsigned int flags; double gc_time; double gc_invoke_time; @@ -527,6 +526,7 @@ typedef struct gc_profile_record { size_t heap_total_objects; size_t heap_use_size; size_t heap_total_size; + size_t moved_objects; #if GC_PROFILE_MORE_DETAIL double gc_mark_time; @@ -559,9 +559,15 @@ typedef struct gc_profile_record { #endif } gc_profile_record; -#if defined(_MSC_VER) || defined(__CYGWIN__) -#pragma pack(push, 1) /* magic for reducing sizeof(RVALUE): 24 -> 20 */ -#endif +#define FL_FROM_FREELIST FL_USER0 + +struct RMoved { + VALUE flags; + VALUE dummy; + VALUE destination; +}; + +#define RMOVED(obj) ((struct RMoved *)(obj)) typedef struct RVALUE { union { @@ -586,6 +592,7 @@ typedef struct RVALUE { struct RMatch match; struct RRational rational; struct RComplex complex; + struct RSymbol symbol; union { rb_cref_t cref; struct vm_svar svar; @@ -611,9 +618,12 @@ typedef struct RVALUE { #endif } RVALUE; -#if defined(_MSC_VER) || defined(__CYGWIN__) -#pragma pack(pop) +#if GC_DEBUG +STATIC_ASSERT(sizeof_rvalue, offsetof(RVALUE, file) == SIZEOF_VALUE * 5); +#else +STATIC_ASSERT(sizeof_rvalue, sizeof(RVALUE) == SIZEOF_VALUE * 5); #endif +STATIC_ASSERT(alignof_rvalue, RUBY_ALIGNOF(RVALUE) == SIZEOF_VALUE); typedef uintptr_t bits_t; enum { @@ -653,13 +663,15 @@ typedef struct mark_stack { size_t unused_cache_size; } mark_stack_t; -typedef struct rb_heap_struct { - RVALUE *freelist; +#define SIZE_POOL_EDEN_HEAP(size_pool) (&(size_pool)->eden_heap) +#define SIZE_POOL_TOMB_HEAP(size_pool) (&(size_pool)->tomb_heap) +typedef struct rb_heap_struct { struct heap_page *free_pages; - struct heap_page *using_page; struct list_head pages; struct heap_page *sweeping_page; /* iterator for .pages */ + struct heap_page *compact_cursor; + RVALUE * compact_cursor_index; #if GC_ENABLE_INCREMENTAL_MARK struct heap_page *pooled_pages; #endif @@ -667,6 +679,24 @@ typedef struct rb_heap_struct { size_t total_slots; /* total slot count (about total_pages * HEAP_PAGE_OBJ_LIMIT) */ } rb_heap_t; +typedef struct rb_size_pool_struct { + short slot_size; + + size_t allocatable_pages; + +#if USE_RVARGC + /* Sweeping statistics */ + size_t freed_slots; + size_t empty_slots; + + /* Global statistics */ + size_t force_major_gc_count; +#endif + + rb_heap_t eden_heap; + rb_heap_t tomb_heap; +} rb_size_pool_t; + enum gc_mode { gc_mode_none, gc_mode_marking, @@ -692,30 +722,23 @@ typedef struct rb_objspace { unsigned int during_compacting : 1; unsigned int gc_stressful: 1; unsigned int has_hook: 1; -#if USE_RGENGC unsigned int during_minor_gc : 1; -#endif #if GC_ENABLE_INCREMENTAL_MARK unsigned int during_incremental_marking : 1; #endif + unsigned int measure_gc : 1; } flags; rb_event_flag_t hook_events; size_t total_allocated_objects; VALUE next_object_id; - rb_heap_t eden_heap; - rb_heap_t tomb_heap; /* heap for zombies and ghosts */ + rb_size_pool_t size_pools[SIZE_POOL_COUNT]; struct { rb_atomic_t finalizing; } atomic_flags; - struct mark_func_data_struct { - void *data; - void (*mark_func)(VALUE v, void *data); - } *mark_func_data; - mark_stack_t mark_stack; size_t marked_slots; @@ -736,7 +759,7 @@ typedef struct rb_objspace { struct { int run; - int latest_gc_info; + unsigned int latest_gc_info; gc_profile_record *records; gc_profile_record *current_record; size_t next_index; @@ -747,10 +770,10 @@ typedef struct rb_objspace { #endif double invoke_time; -#if USE_RGENGC size_t minor_gc_count; size_t major_gc_count; size_t compact_count; + size_t read_barrier_faults; #if RGENGC_PROFILE > 0 size_t total_generated_normal_object_count; size_t total_generated_shady_object_count; @@ -768,7 +791,6 @@ typedef struct rb_objspace { size_t remembered_shady_object_count_types[RUBY_T_MASK]; #endif #endif /* RGENGC_PROFILE */ -#endif /* USE_RGENGC */ /* temporary profiling space */ double gc_sweep_start_time; @@ -780,12 +802,13 @@ typedef struct rb_objspace { size_t total_freed_objects; size_t total_allocated_pages; size_t total_freed_pages; + uint64_t total_time_ns; + struct timespec start_time; } profile; struct gc_list *global_list; VALUE gc_stress_mode; -#if USE_RGENGC struct { VALUE parent_object; int need_major_gc; @@ -809,6 +832,7 @@ typedef struct rb_objspace { struct { size_t considered_count_table[T_MASK]; size_t moved_count_table[T_MASK]; + size_t total_moved; } rcompactor; #if GC_ENABLE_INCREMENTAL_MARK @@ -817,7 +841,6 @@ typedef struct rb_objspace { size_t step_slots; } rincgc; #endif -#endif /* USE_RGENGC */ st_table *id_to_obj_tbl; st_table *obj_to_id_tbl; @@ -834,15 +857,33 @@ typedef struct rb_objspace { enum { HEAP_PAGE_ALIGN = (1UL << HEAP_PAGE_ALIGN_LOG), HEAP_PAGE_ALIGN_MASK = (~(~0UL << HEAP_PAGE_ALIGN_LOG)), - REQUIRED_SIZE_BY_MALLOC = (sizeof(size_t) * 5), - HEAP_PAGE_SIZE = (HEAP_PAGE_ALIGN - REQUIRED_SIZE_BY_MALLOC), + HEAP_PAGE_SIZE = HEAP_PAGE_ALIGN, HEAP_PAGE_OBJ_LIMIT = (unsigned int)((HEAP_PAGE_SIZE - sizeof(struct heap_page_header))/sizeof(struct RVALUE)), HEAP_PAGE_BITMAP_LIMIT = CEILDIV(CEILDIV(HEAP_PAGE_SIZE, sizeof(struct RVALUE)), BITS_BITLENGTH), HEAP_PAGE_BITMAP_SIZE = (BITS_SIZE * HEAP_PAGE_BITMAP_LIMIT), - HEAP_PAGE_BITMAP_PLANES = USE_RGENGC ? 4 : 1 /* RGENGC: mark, unprotected, uncollectible, marking */ }; +#define HEAP_PAGE_ALIGN (1 << HEAP_PAGE_ALIGN_LOG) +#define HEAP_PAGE_SIZE HEAP_PAGE_ALIGN + +#ifdef HAVE_MMAP +# if HAVE_CONST_PAGE_SIZE +/* If we have the HEAP_PAGE and it is a constant, then we can directly use it. */ +static const bool USE_MMAP_ALIGNED_ALLOC = (PAGE_SIZE <= HEAP_PAGE_SIZE); +# elif defined(PAGE_MAX_SIZE) && (PAGE_MAX_SIZE <= HEAP_PAGE_SIZE) +/* PAGE_SIZE <= HEAP_PAGE_SIZE */ +static const bool USE_MMAP_ALIGNED_ALLOC = true; +# else +/* Otherwise, fall back to determining if we can use mmap during runtime. */ +# define USE_MMAP_ALIGNED_ALLOC (use_mmap_aligned_alloc != false) + +static bool use_mmap_aligned_alloc; +# endif +#elif !defined(__MINGW32__) && !defined(_WIN32) +static const bool USE_MMAP_ALIGNED_ALLOC = false; +#endif struct heap_page { + short slot_size; short total_slots; short free_slots; short pinned_slots; @@ -854,20 +895,18 @@ struct heap_page { unsigned int in_tomb : 1; } flags; + rb_size_pool_t *size_pool; + struct heap_page *free_next; RVALUE *start; RVALUE *freelist; struct list_node page_node; -#if USE_RGENGC bits_t wb_unprotected_bits[HEAP_PAGE_BITMAP_LIMIT]; -#endif /* the following three bitmaps are cleared at the beginning of full GC */ bits_t mark_bits[HEAP_PAGE_BITMAP_LIMIT]; -#if USE_RGENGC bits_t uncollectible_bits[HEAP_PAGE_BITMAP_LIMIT]; bits_t marking_bits[HEAP_PAGE_BITMAP_LIMIT]; -#endif /* If set, the object is not movable */ bits_t pinned_bits[HEAP_PAGE_BITMAP_LIMIT]; @@ -890,11 +929,9 @@ struct heap_page { /* getting bitmap */ #define GET_HEAP_MARK_BITS(x) (&GET_HEAP_PAGE(x)->mark_bits[0]) #define GET_HEAP_PINNED_BITS(x) (&GET_HEAP_PAGE(x)->pinned_bits[0]) -#if USE_RGENGC #define GET_HEAP_UNCOLLECTIBLE_BITS(x) (&GET_HEAP_PAGE(x)->uncollectible_bits[0]) #define GET_HEAP_WB_UNPROTECTED_BITS(x) (&GET_HEAP_PAGE(x)->wb_unprotected_bits[0]) #define GET_HEAP_MARKING_BITS(x) (&GET_HEAP_PAGE(x)->marking_bits[0]) -#endif /* Aliases */ #define rb_objspace (*rb_objspace_of(GET_VM())) @@ -912,13 +949,10 @@ VALUE *ruby_initial_gc_stress_ptr = &ruby_initial_gc_stress; #define heap_pages_sorted_length objspace->heap_pages.sorted_length #define heap_pages_lomem objspace->heap_pages.range[0] #define heap_pages_himem objspace->heap_pages.range[1] -#define heap_allocatable_pages objspace->heap_pages.allocatable_pages #define heap_pages_freeable_pages objspace->heap_pages.freeable_pages #define heap_pages_final_slots objspace->heap_pages.final_slots #define heap_pages_deferred_final objspace->heap_pages.deferred_final -#define heap_eden (&objspace->eden_heap) -#define heap_tomb (&objspace->tomb_heap) -#define dont_gc objspace->flags.dont_gc +#define size_pools objspace->size_pools #define during_gc objspace->flags.during_gc #define finalizing objspace->atomic_flags.finalizing #define finalizer_table objspace->finalizer_table @@ -931,6 +965,18 @@ VALUE *ruby_initial_gc_stress_ptr = &ruby_initial_gc_stress; #define stress_to_class 0 #endif +#if 0 +#define dont_gc_on() (fprintf(stderr, "dont_gc_on@%s:%d\n", __FILE__, __LINE__), objspace->flags.dont_gc = 1) +#define dont_gc_off() (fprintf(stderr, "dont_gc_off@%s:%d\n", __FILE__, __LINE__), objspace->flags.dont_gc = 0) +#define dont_gc_set(b) (fprintf(stderr, "dont_gc_set(%d)@%s:%d\n", __FILE__, __LINE__), (int)b), objspace->flags.dont_gc = (b)) +#define dont_gc_val() (objspace->flags.dont_gc) +#else +#define dont_gc_on() (objspace->flags.dont_gc = 1) +#define dont_gc_off() (objspace->flags.dont_gc = 0) +#define dont_gc_set(b) (((int)b), objspace->flags.dont_gc = (b)) +#define dont_gc_val() (objspace->flags.dont_gc) +#endif + static inline enum gc_mode gc_mode_verify(enum gc_mode mode) { @@ -947,16 +993,75 @@ gc_mode_verify(enum gc_mode mode) return mode; } +static inline bool +has_sweeping_pages(rb_objspace_t *objspace) +{ + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + if (SIZE_POOL_EDEN_HEAP(&size_pools[i])->sweeping_page) { + return TRUE; + } + } + return FALSE; +} + +static inline size_t +heap_eden_total_pages(rb_objspace_t *objspace) +{ + size_t count = 0; + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + count += SIZE_POOL_EDEN_HEAP(&size_pools[i])->total_pages; + } + return count; +} + +static inline size_t +heap_eden_total_slots(rb_objspace_t *objspace) +{ + size_t count = 0; + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + count += SIZE_POOL_EDEN_HEAP(&size_pools[i])->total_slots; + } + return count; +} + +static inline size_t +heap_tomb_total_pages(rb_objspace_t *objspace) +{ + size_t count = 0; + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + count += SIZE_POOL_TOMB_HEAP(&size_pools[i])->total_pages; + } + return count; +} + +static inline size_t +heap_allocatable_pages(rb_objspace_t *objspace) +{ + size_t count = 0; + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + count += size_pools[i].allocatable_pages; + } + return count; +} + +static inline size_t +heap_allocatable_slots(rb_objspace_t *objspace) +{ + size_t count = 0; + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + int slot_size_multiple = size_pool->slot_size / sizeof(RVALUE); + count += size_pool->allocatable_pages * HEAP_PAGE_OBJ_LIMIT / slot_size_multiple; + } + return count; +} + #define gc_mode(objspace) gc_mode_verify((enum gc_mode)(objspace)->flags.mode) #define gc_mode_set(objspace, mode) ((objspace)->flags.mode = (unsigned int)gc_mode_verify(mode)) #define is_marking(objspace) (gc_mode(objspace) == gc_mode_marking) #define is_sweeping(objspace) (gc_mode(objspace) == gc_mode_sweeping) -#if USE_RGENGC #define is_full_marking(objspace) ((objspace)->flags.during_minor_gc == FALSE) -#else -#define is_full_marking(objspace) TRUE -#endif #if GC_ENABLE_INCREMENTAL_MARK #define is_incremental_marking(objspace) ((objspace)->flags.during_incremental_marking != FALSE) #else @@ -967,8 +1072,7 @@ gc_mode_verify(enum gc_mode mode) #else #define will_be_incremental_marking(objspace) FALSE #endif -#define has_sweeping_pages(heap) ((heap)->sweeping_page != 0) -#define is_lazy_sweeping(heap) (GC_ENABLE_LAZY_SWEEP && has_sweeping_pages(heap)) +#define is_lazy_sweeping(objspace) (GC_ENABLE_LAZY_SWEEP && has_sweeping_pages(objspace)) #if SIZEOF_LONG == SIZEOF_VOIDP # define nonspecial_obj_id(obj) (VALUE)((SIGNED_VALUE)(obj)|FIXNUM_FLAG) @@ -999,6 +1103,7 @@ int ruby_gc_debug_indent = 0; #endif VALUE rb_mGC; int ruby_disable_gc = 0; +int ruby_enable_autocompact = 0; void rb_iseq_mark(const rb_iseq_t *iseq); void rb_iseq_update_references(rb_iseq_t *iseq); @@ -1010,32 +1115,43 @@ void rb_gcdebug_print_obj_condition(VALUE obj); static VALUE define_final0(VALUE obj, VALUE block); +NORETURN(static void *gc_vraise(void *ptr)); +NORETURN(static void gc_raise(VALUE exc, const char *fmt, ...)); NORETURN(static void negative_size_allocation_error(const char *)); static void init_mark_stack(mark_stack_t *stack); static int ready_to_gc(rb_objspace_t *objspace); -static int garbage_collect(rb_objspace_t *, int reason); +static int garbage_collect(rb_objspace_t *, unsigned int reason); -static int gc_start(rb_objspace_t *objspace, int reason); +static int gc_start(rb_objspace_t *objspace, unsigned int reason); static void gc_rest(rb_objspace_t *objspace); -static inline void gc_enter(rb_objspace_t *objspace, const char *event); -static inline void gc_exit(rb_objspace_t *objspace, const char *event); + +enum gc_enter_event { + gc_enter_event_start, + gc_enter_event_mark_continue, + gc_enter_event_sweep_continue, + gc_enter_event_rest, + gc_enter_event_finalizer, + gc_enter_event_rb_memerror, +}; + +static inline void gc_enter(rb_objspace_t *objspace, enum gc_enter_event event, unsigned int *lock_lev); +static inline void gc_exit(rb_objspace_t *objspace, enum gc_enter_event event, unsigned int *lock_lev); static void gc_marks(rb_objspace_t *objspace, int full_mark); static void gc_marks_start(rb_objspace_t *objspace, int full); static int gc_marks_finish(rb_objspace_t *objspace); static void gc_marks_rest(rb_objspace_t *objspace); -static void gc_marks_step(rb_objspace_t *objspace, int slots); -static void gc_marks_continue(rb_objspace_t *objspace, rb_heap_t *heap); +static void gc_marks_continue(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap); static void gc_sweep(rb_objspace_t *objspace); static void gc_sweep_start(rb_objspace_t *objspace); static void gc_sweep_finish(rb_objspace_t *objspace); -static int gc_sweep_step(rb_objspace_t *objspace, rb_heap_t *heap); +static int gc_sweep_step(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap); static void gc_sweep_rest(rb_objspace_t *objspace); -static void gc_sweep_continue(rb_objspace_t *objspace, rb_heap_t *heap); +static void gc_sweep_continue(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap); static inline void gc_mark(rb_objspace_t *objspace, VALUE ptr); static inline void gc_pin(rb_objspace_t *objspace, VALUE ptr); @@ -1065,7 +1181,7 @@ static void gc_stress_set(rb_objspace_t *objspace, VALUE flag); static VALUE gc_disable_no_rest(rb_objspace_t *); static double getrusage_time(void); -static inline void gc_prof_setup_new_record(rb_objspace_t *objspace, int reason); +static inline void gc_prof_setup_new_record(rb_objspace_t *objspace, unsigned int reason); static inline void gc_prof_timer_start(rb_objspace_t *); static inline void gc_prof_timer_stop(rb_objspace_t *); static inline void gc_prof_mark_timer_start(rb_objspace_t *); @@ -1094,12 +1210,7 @@ static inline void gc_prof_set_heap_info(rb_objspace_t *); #endif PRINTF_ARGS(static void gc_report_body(int level, rb_objspace_t *objspace, const char *fmt, ...), 3, 4); static const char *obj_info(VALUE obj); - -#define PUSH_MARK_FUNC_DATA(v) do { \ - struct mark_func_data_struct *prev_mark_func_data = objspace->mark_func_data; \ - objspace->mark_func_data = (v); - -#define POP_MARK_FUNC_DATA() objspace->mark_func_data = prev_mark_func_data;} while (0) +static const char *obj_type_name(VALUE obj); /* * 1 - TSC (H/W Time Stamp Counter) @@ -1153,6 +1264,19 @@ tick(void) return val; } +#elif defined(__aarch64__) && defined(__GNUC__) +typedef unsigned long tick_t; +#define PRItick "lu" + +static __inline__ tick_t +tick(void) +{ + unsigned long val; + __asm__ __volatile__ ("mrs %0, cntvct_el0" : "=r" (val)); + return val; +} + + #elif defined(_WIN32) && defined(_MSC_VER) #include typedef unsigned __int64 tick_t; @@ -1200,6 +1324,14 @@ tick(void) #define MEASURE_LINE(expr) expr #endif /* USE_TICK_T */ +static inline void * +asan_unpoison_object_temporary(VALUE obj) +{ + void *ptr = asan_poisoned_object_p(obj); + asan_unpoison_object(obj, false); + return ptr; +} + #define FL_CHECK2(name, x, pred) \ ((RGENGC_CHECK_MODE && SPECIAL_CONST_P(x)) ? \ (rb_bug(name": SPECIAL_CONST (%p)", (void *)(x)), 0) : (pred)) @@ -1211,7 +1343,6 @@ tick(void) #define RVALUE_PIN_BITMAP(obj) MARKED_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), (obj)) #define RVALUE_PAGE_MARKED(page, obj) MARKED_IN_BITMAP((page)->mark_bits, (obj)) -#if USE_RGENGC #define RVALUE_WB_UNPROTECTED_BITMAP(obj) MARKED_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS(obj), (obj)) #define RVALUE_UNCOLLECTIBLE_BITMAP(obj) MARKED_IN_BITMAP(GET_HEAP_UNCOLLECTIBLE_BITS(obj), (obj)) #define RVALUE_MARKING_BITMAP(obj) MARKED_IN_BITMAP(GET_HEAP_MARKING_BITS(obj), (obj)) @@ -1235,103 +1366,108 @@ RVALUE_FLAGS_AGE(VALUE flags) return (int)((flags & (FL_PROMOTED0 | FL_PROMOTED1)) >> RVALUE_AGE_SHIFT); } -#endif /* USE_RGENGC */ - static int check_rvalue_consistency_force(const VALUE obj, int terminate) { - rb_objspace_t *objspace = &rb_objspace; int err = 0; + rb_objspace_t *objspace = &rb_objspace; - if (SPECIAL_CONST_P(obj)) { - fprintf(stderr, "check_rvalue_consistency: %p is a special const.\n", (void *)obj); - err++; - } - else if (!is_pointer_to_heap(objspace, (void *)obj)) { - /* check if it is in tomb_pages */ - struct heap_page *page = NULL; - list_for_each(&heap_tomb->pages, page, page_node) { - if (&page->start[0] <= (RVALUE *)obj && - (RVALUE *)obj < &page->start[page->total_slots]) { - fprintf(stderr, "check_rvalue_consistency: %p is in a tomb_heap (%p).\n", - (void *)obj, (void *)page); - err++; - goto skip; - } - } - fprintf(stderr, "check_rvalue_consistency: %p is not a Ruby object.\n", (void *)obj); - err++; - skip: - ; - } - else { - const int wb_unprotected_bit = RVALUE_WB_UNPROTECTED_BITMAP(obj) != 0; - const int uncollectible_bit = RVALUE_UNCOLLECTIBLE_BITMAP(obj) != 0; - const int mark_bit = RVALUE_MARK_BITMAP(obj) != 0; - const int marking_bit = RVALUE_MARKING_BITMAP(obj) != 0, remembered_bit = marking_bit; - const int age = RVALUE_FLAGS_AGE(RBASIC(obj)->flags); - - if (GET_HEAP_PAGE(obj)->flags.in_tomb) { - fprintf(stderr, "check_rvalue_consistency: %s is in tomb page.\n", obj_info(obj)); - err++; - } - if (BUILTIN_TYPE(obj) == T_NONE) { - fprintf(stderr, "check_rvalue_consistency: %s is T_NONE.\n", obj_info(obj)); - err++; - } - if (BUILTIN_TYPE(obj) == T_ZOMBIE) { - fprintf(stderr, "check_rvalue_consistency: %s is T_ZOMBIE.\n", obj_info(obj)); + RB_VM_LOCK_ENTER_NO_BARRIER(); + { + if (SPECIAL_CONST_P(obj)) { + fprintf(stderr, "check_rvalue_consistency: %p is a special const.\n", (void *)obj); err++; } - - obj_memsize_of((VALUE)obj, FALSE); - - /* check generation - * - * OLD == age == 3 && old-bitmap && mark-bit (except incremental marking) - */ - if (age > 0 && wb_unprotected_bit) { - fprintf(stderr, "check_rvalue_consistency: %s is not WB protected, but age is %d > 0.\n", obj_info(obj), age); + else if (!is_pointer_to_heap(objspace, (void *)obj)) { + /* check if it is in tomb_pages */ + struct heap_page *page = NULL; + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + list_for_each(&size_pool->tomb_heap.pages, page, page_node) { + if (&page->start[0] <= (RVALUE *)obj && + (uintptr_t)obj < ((uintptr_t)page->start + (page->total_slots * size_pool->slot_size))) { + fprintf(stderr, "check_rvalue_consistency: %p is in a tomb_heap (%p).\n", + (void *)obj, (void *)page); + err++; + goto skip; + } + } + } + bp(); + fprintf(stderr, "check_rvalue_consistency: %p is not a Ruby object.\n", (void *)obj); err++; + skip: + ; } + else { + const int wb_unprotected_bit = RVALUE_WB_UNPROTECTED_BITMAP(obj) != 0; + const int uncollectible_bit = RVALUE_UNCOLLECTIBLE_BITMAP(obj) != 0; + const int mark_bit = RVALUE_MARK_BITMAP(obj) != 0; + const int marking_bit = RVALUE_MARKING_BITMAP(obj) != 0, remembered_bit = marking_bit; + const int age = RVALUE_FLAGS_AGE(RBASIC(obj)->flags); + + if (GET_HEAP_PAGE(obj)->flags.in_tomb) { + fprintf(stderr, "check_rvalue_consistency: %s is in tomb page.\n", obj_info(obj)); + err++; + } + if (BUILTIN_TYPE(obj) == T_NONE) { + fprintf(stderr, "check_rvalue_consistency: %s is T_NONE.\n", obj_info(obj)); + err++; + } + if (BUILTIN_TYPE(obj) == T_ZOMBIE) { + fprintf(stderr, "check_rvalue_consistency: %s is T_ZOMBIE.\n", obj_info(obj)); + err++; + } - if (!is_marking(objspace) && uncollectible_bit && !mark_bit) { - fprintf(stderr, "check_rvalue_consistency: %s is uncollectible, but is not marked while !gc.\n", obj_info(obj)); - err++; - } + obj_memsize_of((VALUE)obj, FALSE); - if (!is_full_marking(objspace)) { - if (uncollectible_bit && age != RVALUE_OLD_AGE && !wb_unprotected_bit) { - fprintf(stderr, "check_rvalue_consistency: %s is uncollectible, but not old (age: %d) and not WB unprotected.\n", - obj_info(obj), age); + /* check generation + * + * OLD == age == 3 && old-bitmap && mark-bit (except incremental marking) + */ + if (age > 0 && wb_unprotected_bit) { + fprintf(stderr, "check_rvalue_consistency: %s is not WB protected, but age is %d > 0.\n", obj_info(obj), age); err++; } - if (remembered_bit && age != RVALUE_OLD_AGE) { - fprintf(stderr, "check_rvalue_consistency: %s is remembered, but not old (age: %d).\n", - obj_info(obj), age); + + if (!is_marking(objspace) && uncollectible_bit && !mark_bit) { + fprintf(stderr, "check_rvalue_consistency: %s is uncollectible, but is not marked while !gc.\n", obj_info(obj)); err++; } - } - /* - * check coloring - * - * marking:false marking:true - * marked:false white *invalid* - * marked:true black grey - */ - if (is_incremental_marking(objspace) && marking_bit) { - if (!is_marking(objspace) && !mark_bit) { - fprintf(stderr, "check_rvalue_consistency: %s is marking, but not marked.\n", obj_info(obj)); - err++; + if (!is_full_marking(objspace)) { + if (uncollectible_bit && age != RVALUE_OLD_AGE && !wb_unprotected_bit) { + fprintf(stderr, "check_rvalue_consistency: %s is uncollectible, but not old (age: %d) and not WB unprotected.\n", + obj_info(obj), age); + err++; + } + if (remembered_bit && age != RVALUE_OLD_AGE) { + fprintf(stderr, "check_rvalue_consistency: %s is remembered, but not old (age: %d).\n", + obj_info(obj), age); + err++; + } + } + + /* + * check coloring + * + * marking:false marking:true + * marked:false white *invalid* + * marked:true black grey + */ + if (is_incremental_marking(objspace) && marking_bit) { + if (!is_marking(objspace) && !mark_bit) { + fprintf(stderr, "check_rvalue_consistency: %s is marking, but not marked.\n", obj_info(obj)); + err++; + } } } } + RB_VM_LOCK_LEAVE_NO_BARRIER(); if (err > 0 && terminate) { rb_bug("check_rvalue_consistency_force: there is %d errors.", err); } - return err; } @@ -1384,7 +1520,6 @@ RVALUE_PINNED(VALUE obj) return RVALUE_PIN_BITMAP(obj) != 0; } -#if USE_RGENGC static inline int RVALUE_WB_UNPROTECTED(VALUE obj) { @@ -1571,8 +1706,6 @@ RVALUE_WHITE_P(VALUE obj) return RVALUE_MARKED(obj) == FALSE; } -#endif /* USE_RGENGC */ - /* --------------------------- ObjectSpace ----------------------------- */ @@ -1587,10 +1720,19 @@ rb_objspace_t * rb_objspace_alloc(void) { rb_objspace_t *objspace = calloc1(sizeof(rb_objspace_t)); + objspace->flags.measure_gc = 1; malloc_limit = gc_params.malloc_limit_min; - list_head_init(&objspace->eden_heap.pages); - list_head_init(&objspace->tomb_heap.pages); - dont_gc = TRUE; + + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + + size_pool->slot_size = sizeof(RVALUE) * (1 << i); + + list_head_init(&SIZE_POOL_EDEN_HEAP(size_pool)->pages); + list_head_init(&SIZE_POOL_TOMB_HEAP(size_pool)->pages); + } + + dont_gc_on(); return objspace; } @@ -1601,7 +1743,7 @@ static void heap_page_free(rb_objspace_t *objspace, struct heap_page *page); void rb_objspace_free(rb_objspace_t *objspace) { - if (is_lazy_sweeping(heap_eden)) + if (is_lazy_sweeping(objspace)) rb_bug("lazy sweeping underway when freeing object space"); if (objspace->profile.records) { @@ -1627,8 +1769,11 @@ rb_objspace_free(rb_objspace_t *objspace) heap_pages_lomem = 0; heap_pages_himem = 0; - objspace->eden_heap.total_pages = 0; - objspace->eden_heap.total_slots = 0; + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + SIZE_POOL_EDEN_HEAP(size_pool)->total_pages = 0; + SIZE_POOL_EDEN_HEAP(size_pool)->total_slots = 0; + } } st_free_table(objspace->id_to_obj_tbl); st_free_table(objspace->obj_to_id_tbl); @@ -1642,7 +1787,8 @@ heap_pages_expand_sorted_to(rb_objspace_t *objspace, size_t next_length) struct heap_page **sorted; size_t size = size_mul_or_raise(next_length, sizeof(struct heap_page *), rb_eRuntimeError); - gc_report(3, objspace, "heap_pages_expand_sorted: next_length: %d, size: %d\n", (int)next_length, (int)size); + gc_report(3, objspace, "heap_pages_expand_sorted: next_length: %"PRIdSIZE", size: %"PRIdSIZE"\n", + next_length, size); if (heap_pages_sorted_length > 0) { sorted = (struct heap_page **)realloc(heap_pages_sorted, size); @@ -1667,30 +1813,37 @@ heap_pages_expand_sorted(rb_objspace_t *objspace) * however, if there are pages which do not have empty slots, then try to create new pages * so that the additional allocatable_pages counts (heap_tomb->total_pages) are added. */ - size_t next_length = heap_allocatable_pages; - next_length += heap_eden->total_pages; - next_length += heap_tomb->total_pages; + size_t next_length = heap_allocatable_pages(objspace); + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + next_length += SIZE_POOL_EDEN_HEAP(size_pool)->total_pages; + next_length += SIZE_POOL_TOMB_HEAP(size_pool)->total_pages; + } if (next_length > heap_pages_sorted_length) { heap_pages_expand_sorted_to(objspace, next_length); } - GC_ASSERT(heap_allocatable_pages + heap_eden->total_pages <= heap_pages_sorted_length); + GC_ASSERT(heap_allocatable_pages(objspace) + heap_eden_total_pages(objspace) <= heap_pages_sorted_length); GC_ASSERT(heap_allocated_pages <= heap_pages_sorted_length); } static void -heap_allocatable_pages_set(rb_objspace_t *objspace, size_t s) +size_pool_allocatable_pages_set(rb_objspace_t *objspace, rb_size_pool_t *size_pool, size_t s) { - heap_allocatable_pages = s; + size_pool->allocatable_pages = s; heap_pages_expand_sorted(objspace); } - static inline void heap_page_add_freeobj(rb_objspace_t *objspace, struct heap_page *page, VALUE obj) { + ASSERT_vm_locking(); + RVALUE *p = (RVALUE *)obj; + + asan_unpoison_object(obj, false); + asan_unpoison_memory_region(&page->freelist, sizeof(RVALUE*), false); p->as.free.flags = 0; @@ -1701,13 +1854,12 @@ heap_page_add_freeobj(rb_objspace_t *objspace, struct heap_page *page, VALUE obj if (RGENGC_CHECK_MODE && /* obj should belong to page */ !(&page->start[0] <= (RVALUE *)obj && - (RVALUE *)obj < &page->start[page->total_slots] && + (uintptr_t)obj < ((uintptr_t)page->start + (page->total_slots * page->slot_size)) && obj % sizeof(RVALUE) == 0)) { rb_bug("heap_page_add_freeobj: %p is not rvalue.", (void *)p); } asan_poison_object(obj); - gc_report(3, objspace, "heap_page_add_freeobj: add %p to freelist\n", (void *)obj); } @@ -1716,31 +1868,29 @@ heap_add_freepage(rb_heap_t *heap, struct heap_page *page) { asan_unpoison_memory_region(&page->freelist, sizeof(RVALUE*), false); GC_ASSERT(page->free_slots != 0); - if (page->freelist) { - page->free_next = heap->free_pages; - heap->free_pages = page; - } + GC_ASSERT(page->freelist != NULL); + + page->free_next = heap->free_pages; + heap->free_pages = page; + + RUBY_DEBUG_LOG("page:%p freelist:%p", (void *)page, (void *)page->freelist); + asan_poison_memory_region(&page->freelist, sizeof(RVALUE*)); } #if GC_ENABLE_INCREMENTAL_MARK -static inline int +static inline void heap_add_poolpage(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *page) { asan_unpoison_memory_region(&page->freelist, sizeof(RVALUE*), false); - if (page->freelist) { - page->free_next = heap->pooled_pages; - heap->pooled_pages = page; - objspace->rincgc.pooled_slots += page->free_slots; - asan_poison_memory_region(&page->freelist, sizeof(RVALUE*)); + GC_ASSERT(page->free_slots != 0); + GC_ASSERT(page->freelist != NULL); - return TRUE; - } - else { - asan_poison_memory_region(&page->freelist, sizeof(RVALUE*)); + page->free_next = heap->pooled_pages; + heap->pooled_pages = page; + objspace->rincgc.pooled_slots += page->free_slots; - return FALSE; - } + asan_poison_memory_region(&page->freelist, sizeof(RVALUE*)); } #endif @@ -1752,14 +1902,14 @@ heap_unlink_page(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *pag heap->total_slots -= page->total_slots; } -static void rb_aligned_free(void *ptr); +static void rb_aligned_free(void *ptr, size_t size); static void heap_page_free(rb_objspace_t *objspace, struct heap_page *page) { heap_allocated_pages--; objspace->profile.total_freed_pages++; - rb_aligned_free(GET_PAGE_BODY(page->start)); + rb_aligned_free(GET_PAGE_BODY(page->start), HEAP_PAGE_SIZE); free(page); } @@ -1768,33 +1918,48 @@ heap_pages_free_unused_pages(rb_objspace_t *objspace) { size_t i, j; - if (!list_empty(&heap_tomb->pages)) { - for (i = j = 1; j < heap_allocated_pages; i++) { - struct heap_page *page = heap_pages_sorted[i]; + bool has_pages_in_tomb_heap = FALSE; + for (i = 0; i < SIZE_POOL_COUNT; i++) { + if (!list_empty(&SIZE_POOL_TOMB_HEAP(&size_pools[i])->pages)) { + has_pages_in_tomb_heap = TRUE; + break; + } + } + + if (has_pages_in_tomb_heap) { + for (i = j = 1; j < heap_allocated_pages; i++) { + struct heap_page *page = heap_pages_sorted[i]; + + if (page->flags.in_tomb && page->free_slots == page->total_slots) { + heap_unlink_page(objspace, SIZE_POOL_TOMB_HEAP(page->size_pool), page); + heap_page_free(objspace, page); + } + else { + if (i != j) { + heap_pages_sorted[j] = page; + } + j++; + } + } + + struct heap_page *hipage = heap_pages_sorted[heap_allocated_pages - 1]; + uintptr_t himem = (uintptr_t)hipage->start + (hipage->total_slots * hipage->slot_size); + GC_ASSERT(himem <= (uintptr_t)heap_pages_himem); + heap_pages_himem = (RVALUE *)himem; - if (page->flags.in_tomb && page->free_slots == page->total_slots) { - heap_unlink_page(objspace, heap_tomb, page); - heap_page_free(objspace, page); - } - else { - if (i != j) { - heap_pages_sorted[j] = page; - } - j++; - } - } GC_ASSERT(j == heap_allocated_pages); } } static struct heap_page * -heap_page_allocate(rb_objspace_t *objspace) +heap_page_allocate(rb_objspace_t *objspace, rb_size_pool_t *size_pool) { - RVALUE *start, *end, *p; + uintptr_t start, end, p; struct heap_page *page; struct heap_page_body *page_body = 0; - size_t hi, lo, mid; - int limit = HEAP_PAGE_OBJ_LIMIT; + uintptr_t hi, lo, mid; + size_t stride = size_pool->slot_size; + unsigned int limit = (unsigned int)((HEAP_PAGE_SIZE - sizeof(struct heap_page_header)))/(int)stride; /* assign heap_page body (contains heap_page_header and RVALUEs) */ page_body = (struct heap_page_body *)rb_aligned_malloc(HEAP_PAGE_ALIGN, HEAP_PAGE_SIZE); @@ -1805,31 +1970,44 @@ heap_page_allocate(rb_objspace_t *objspace) /* assign heap_page entry */ page = calloc1(sizeof(struct heap_page)); if (page == 0) { - rb_aligned_free(page_body); + rb_aligned_free(page_body, HEAP_PAGE_SIZE); rb_memerror(); } /* adjust obj_limit (object number available in this page) */ - start = (RVALUE*)((VALUE)page_body + sizeof(struct heap_page_header)); + start = (uintptr_t)((VALUE)page_body + sizeof(struct heap_page_header)); + if ((VALUE)start % sizeof(RVALUE) != 0) { - int delta = (int)(sizeof(RVALUE) - ((VALUE)start % sizeof(RVALUE))); - start = (RVALUE*)((VALUE)start + delta); - limit = (HEAP_PAGE_SIZE - (int)((VALUE)start - (VALUE)page_body))/(int)sizeof(RVALUE); + int delta = (int)sizeof(RVALUE) - (start % (int)sizeof(RVALUE)); + start = start + delta; + GC_ASSERT(NUM_IN_PAGE(start) == 0 || NUM_IN_PAGE(start) == 1); + + /* Find a num in page that is evenly divisible by `stride`. + * This is to ensure that objects are aligned with bit planes. + * In other words, ensure there are an even number of objects + * per bit plane. */ + if (NUM_IN_PAGE(start) == 1) { + start += stride - sizeof(RVALUE); + } + + GC_ASSERT(NUM_IN_PAGE(start) * sizeof(RVALUE) % stride == 0); + + limit = (HEAP_PAGE_SIZE - (int)(start - (uintptr_t)page_body))/(int)stride; } - end = start + limit; + end = start + (limit * (int)stride); /* setup heap_pages_sorted */ lo = 0; - hi = heap_allocated_pages; + hi = (uintptr_t)heap_allocated_pages; while (lo < hi) { struct heap_page *mid_page; mid = (lo + hi) / 2; mid_page = heap_pages_sorted[mid]; - if (mid_page->start < start) { + if ((uintptr_t)mid_page->start < start) { lo = mid + 1; } - else if (mid_page->start > start) { + else if ((uintptr_t)mid_page->start > start) { hi = mid; } else { @@ -1837,7 +2015,7 @@ heap_page_allocate(rb_objspace_t *objspace) } } - if (hi < heap_allocated_pages) { + if (hi < (uintptr_t)heap_allocated_pages) { MEMMOVE(&heap_pages_sorted[hi+1], &heap_pages_sorted[hi], struct heap_page_header*, heap_allocated_pages - hi); } @@ -1845,8 +2023,8 @@ heap_page_allocate(rb_objspace_t *objspace) heap_allocated_pages++; - GC_ASSERT(heap_eden->total_pages + heap_allocatable_pages <= heap_pages_sorted_length); - GC_ASSERT(heap_eden->total_pages + heap_tomb->total_pages == heap_allocated_pages - 1); + GC_ASSERT(heap_eden_total_pages(objspace) + heap_allocatable_pages(objspace) <= heap_pages_sorted_length); + GC_ASSERT(heap_eden_total_pages(objspace) + heap_tomb_total_pages(objspace) == heap_allocated_pages - 1); GC_ASSERT(heap_allocated_pages <= heap_pages_sorted_length); objspace->profile.total_allocated_pages++; @@ -1856,14 +2034,16 @@ heap_page_allocate(rb_objspace_t *objspace) heap_allocated_pages, heap_pages_sorted_length); } - if (heap_pages_lomem == 0 || heap_pages_lomem > start) heap_pages_lomem = start; - if (heap_pages_himem < end) heap_pages_himem = end; + if (heap_pages_lomem == 0 || (uintptr_t)heap_pages_lomem > start) heap_pages_lomem = (RVALUE *)start; + if ((uintptr_t)heap_pages_himem < end) heap_pages_himem = (RVALUE *)end; - page->start = start; + page->start = (RVALUE *)start; page->total_slots = limit; + page->slot_size = size_pool->slot_size; + page->size_pool = size_pool; page_body->header.page = page; - for (p = start; p != end; p++) { + for (p = start; p != end; p += stride) { gc_report(3, objspace, "assign_heap_page: %p is added to freelist\n", (void *)p); heap_page_add_freeobj(objspace, page, (VALUE)p); } @@ -1874,14 +2054,14 @@ heap_page_allocate(rb_objspace_t *objspace) } static struct heap_page * -heap_page_resurrect(rb_objspace_t *objspace) +heap_page_resurrect(rb_objspace_t *objspace, rb_size_pool_t *size_pool) { struct heap_page *page = 0, *next; - list_for_each_safe(&heap_tomb->pages, page, next, page_node) { + list_for_each_safe(&SIZE_POOL_TOMB_HEAP(size_pool)->pages, page, next, page_node) { asan_unpoison_memory_region(&page->freelist, sizeof(RVALUE*), false); if (page->freelist != NULL) { - heap_unlink_page(objspace, heap_tomb, page); + heap_unlink_page(objspace, &size_pool->tomb_heap, page); asan_poison_memory_region(&page->freelist, sizeof(RVALUE*)); return page; } @@ -1891,60 +2071,64 @@ heap_page_resurrect(rb_objspace_t *objspace) } static struct heap_page * -heap_page_create(rb_objspace_t *objspace) +heap_page_create(rb_objspace_t *objspace, rb_size_pool_t *size_pool) { struct heap_page *page; const char *method = "recycle"; - heap_allocatable_pages--; + size_pool->allocatable_pages--; - page = heap_page_resurrect(objspace); + page = heap_page_resurrect(objspace, size_pool); if (page == NULL) { - page = heap_page_allocate(objspace); + page = heap_page_allocate(objspace, size_pool); method = "allocate"; } - if (0) fprintf(stderr, "heap_page_create: %s - %p, heap_allocated_pages: %d, heap_allocated_pages: %d, tomb->total_pages: %d\n", - method, (void *)page, (int)heap_pages_sorted_length, (int)heap_allocated_pages, (int)heap_tomb->total_pages); + if (0) fprintf(stderr, "heap_page_create: %s - %p, " + "heap_allocated_pages: %"PRIdSIZE", " + "heap_allocated_pages: %"PRIdSIZE", " + "tomb->total_pages: %"PRIdSIZE"\n", + method, (void *)page, heap_pages_sorted_length, heap_allocated_pages, SIZE_POOL_TOMB_HEAP(size_pool)->total_pages); return page; } static void -heap_add_page(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *page) +heap_add_page(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap, struct heap_page *page) { - page->flags.in_tomb = (heap == heap_tomb); - list_add(&heap->pages, &page->page_node); + /* Adding to eden heap during incremental sweeping is forbidden */ + GC_ASSERT(!(heap == SIZE_POOL_EDEN_HEAP(size_pool) && heap->sweeping_page)); + page->flags.in_tomb = (heap == SIZE_POOL_TOMB_HEAP(size_pool)); + list_add_tail(&heap->pages, &page->page_node); heap->total_pages++; heap->total_slots += page->total_slots; } static void -heap_assign_page(rb_objspace_t *objspace, rb_heap_t *heap) +heap_assign_page(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) { - struct heap_page *page = heap_page_create(objspace); - heap_add_page(objspace, heap, page); + struct heap_page *page = heap_page_create(objspace, size_pool); + heap_add_page(objspace, size_pool, heap, page); heap_add_freepage(heap, page); } static void -heap_add_pages(rb_objspace_t *objspace, rb_heap_t *heap, size_t add) +heap_add_pages(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap, size_t add) { size_t i; - heap_allocatable_pages_set(objspace, add); + size_pool_allocatable_pages_set(objspace, size_pool, add); for (i = 0; i < add; i++) { - heap_assign_page(objspace, heap); + heap_assign_page(objspace, size_pool, heap); } - GC_ASSERT(heap_allocatable_pages == 0); + GC_ASSERT(size_pool->allocatable_pages == 0); } static size_t -heap_extend_pages(rb_objspace_t *objspace, size_t free_slots, size_t total_slots) +heap_extend_pages(rb_objspace_t *objspace, size_t free_slots, size_t total_slots, size_t used) { double goal_ratio = gc_params.heap_free_slots_goal_ratio; - size_t used = heap_allocated_pages + heap_allocatable_pages; size_t next_used; if (goal_ratio == 0.0) { @@ -1976,108 +2160,49 @@ heap_extend_pages(rb_objspace_t *objspace, size_t free_slots, size_t total_slots if (next_used > max_used) next_used = max_used; } - return next_used - used; -} - -static void -heap_set_increment(rb_objspace_t *objspace, size_t additional_pages) -{ - size_t used = heap_eden->total_pages; - size_t next_used_limit = used + additional_pages; - - if (next_used_limit == heap_allocated_pages) next_used_limit++; - - heap_allocatable_pages_set(objspace, next_used_limit - used); + size_t extend_page_count = next_used - used; + /* Extend by at least 1 page. */ + if (extend_page_count == 0) extend_page_count = 1; - gc_report(1, objspace, "heap_set_increment: heap_allocatable_pages is %d\n", (int)heap_allocatable_pages); + return extend_page_count; } static int -heap_increment(rb_objspace_t *objspace, rb_heap_t *heap) +heap_increment(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) { - if (heap_allocatable_pages > 0) { - gc_report(1, objspace, "heap_increment: heap_pages_sorted_length: %d, heap_pages_inc: %d, heap->total_pages: %d\n", - (int)heap_pages_sorted_length, (int)heap_allocatable_pages, (int)heap->total_pages); + if (size_pool->allocatable_pages > 0) { + gc_report(1, objspace, "heap_increment: heap_pages_sorted_length: %"PRIdSIZE", " + "heap_pages_inc: %"PRIdSIZE", heap->total_pages: %"PRIdSIZE"\n", + heap_pages_sorted_length, size_pool->allocatable_pages, heap->total_pages); - GC_ASSERT(heap_allocatable_pages + heap_eden->total_pages <= heap_pages_sorted_length); + GC_ASSERT(heap_allocatable_pages(objspace) + heap_eden_total_pages(objspace) <= heap_pages_sorted_length); GC_ASSERT(heap_allocated_pages <= heap_pages_sorted_length); - heap_assign_page(objspace, heap); + heap_assign_page(objspace, size_pool, heap); return TRUE; } return FALSE; } static void -heap_prepare(rb_objspace_t *objspace, rb_heap_t *heap) +heap_prepare(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) { GC_ASSERT(heap->free_pages == NULL); - if (is_lazy_sweeping(heap)) { - gc_sweep_continue(objspace, heap); + if (is_lazy_sweeping(objspace)) { + gc_sweep_continue(objspace, size_pool, heap); } else if (is_incremental_marking(objspace)) { - gc_marks_continue(objspace, heap); + gc_marks_continue(objspace, size_pool, heap); } if (heap->free_pages == NULL && - (will_be_incremental_marking(objspace) || heap_increment(objspace, heap) == FALSE) && + (will_be_incremental_marking(objspace) || heap_increment(objspace, size_pool, heap) == FALSE) && gc_start(objspace, GPR_FLAG_NEWOBJ) == FALSE) { rb_memerror(); } } -static RVALUE * -heap_get_freeobj_from_next_freepage(rb_objspace_t *objspace, rb_heap_t *heap) -{ - struct heap_page *page; - RVALUE *p; - - while (heap->free_pages == NULL) { - heap_prepare(objspace, heap); - } - page = heap->free_pages; - heap->free_pages = page->free_next; - heap->using_page = page; - - GC_ASSERT(page->free_slots != 0); - asan_unpoison_memory_region(&page->freelist, sizeof(RVALUE*), false); - p = page->freelist; - page->freelist = NULL; - asan_poison_memory_region(&page->freelist, sizeof(RVALUE*)); - page->free_slots = 0; - asan_unpoison_object((VALUE)p, true); - return p; -} - -static inline VALUE -heap_get_freeobj_head(rb_objspace_t *objspace, rb_heap_t *heap) -{ - RVALUE *p = heap->freelist; - if (LIKELY(p != NULL)) { - heap->freelist = p->as.free.next; - } - asan_unpoison_object((VALUE)p, true); - return (VALUE)p; -} - -static inline VALUE -heap_get_freeobj(rb_objspace_t *objspace, rb_heap_t *heap) -{ - RVALUE *p = heap->freelist; - - while (1) { - if (LIKELY(p != NULL)) { - asan_unpoison_object((VALUE)p, true); - heap->freelist = p->as.free.next; - return (VALUE)p; - } - else { - p = heap_get_freeobj_from_next_freepage(objspace, heap); - } - } -} - void rb_objspace_set_event_hook(const rb_event_flag_t event) { @@ -2101,68 +2226,72 @@ gc_event_hook_body(rb_execution_context_t *ec, rb_objspace_t *objspace, const rb #define gc_event_hook_available_p(objspace) ((objspace)->flags.has_hook) #define gc_event_hook_needed_p(objspace, event) ((objspace)->hook_events & (event)) -#define gc_event_hook(objspace, event, data) do { \ +#define gc_event_hook_prep(objspace, event, data, prep) do { \ if (UNLIKELY(gc_event_hook_needed_p(objspace, event))) { \ + prep; \ gc_event_hook_body(GET_EC(), (objspace), (event), (data)); \ } \ } while (0) +#define gc_event_hook(objspace, event, data) gc_event_hook_prep(objspace, event, data, (void)0) + static inline VALUE -newobj_init(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, int wb_protected, rb_objspace_t *objspace, VALUE obj) +newobj_init(VALUE klass, VALUE flags, int wb_protected, rb_objspace_t *objspace, VALUE obj) { #if !__has_feature(memory_sanitizer) GC_ASSERT(BUILTIN_TYPE(obj) == T_NONE); GC_ASSERT((flags & FL_WB_PROTECTED) == 0); #endif + RVALUE *p = RANY(obj); + p->as.basic.flags = flags; + *((VALUE *)&p->as.basic.klass) = klass; - /* OBJSETUP */ - struct RVALUE buf = { - .as = { - .values = { - .basic = { - .flags = flags, - .klass = klass, - }, - .v1 = v1, - .v2 = v2, - .v3 = v3, - }, - }, - }; - MEMCPY(RANY(obj), &buf, RVALUE, 1); +#if RACTOR_CHECK_MODE + rb_ractor_setup_belonging(obj); +#endif #if RGENGC_CHECK_MODE - GC_ASSERT(RVALUE_MARKED(obj) == FALSE); - GC_ASSERT(RVALUE_MARKING(obj) == FALSE); - GC_ASSERT(RVALUE_OLD_P(obj) == FALSE); - GC_ASSERT(RVALUE_WB_UNPROTECTED(obj) == FALSE); + p->as.values.v1 = p->as.values.v2 = p->as.values.v3 = 0; - if (flags & FL_PROMOTED1) { - if (RVALUE_AGE(obj) != 2) rb_bug("newobj: %s of age (%d) != 2.", obj_info(obj), RVALUE_AGE(obj)); - } - else { - if (RVALUE_AGE(obj) > 0) rb_bug("newobj: %s of age (%d) > 0.", obj_info(obj), RVALUE_AGE(obj)); + RB_VM_LOCK_ENTER_NO_BARRIER(); + { + check_rvalue_consistency(obj); + + GC_ASSERT(RVALUE_MARKED(obj) == FALSE); + GC_ASSERT(RVALUE_MARKING(obj) == FALSE); + GC_ASSERT(RVALUE_OLD_P(obj) == FALSE); + GC_ASSERT(RVALUE_WB_UNPROTECTED(obj) == FALSE); + + if (flags & FL_PROMOTED1) { + if (RVALUE_AGE(obj) != 2) rb_bug("newobj: %s of age (%d) != 2.", obj_info(obj), RVALUE_AGE(obj)); + } + else { + if (RVALUE_AGE(obj) > 0) rb_bug("newobj: %s of age (%d) > 0.", obj_info(obj), RVALUE_AGE(obj)); + } + if (rgengc_remembered(objspace, (VALUE)obj)) rb_bug("newobj: %s is remembered.", obj_info(obj)); } - if (rgengc_remembered(objspace, (VALUE)obj)) rb_bug("newobj: %s is remembered.", obj_info(obj)); + RB_VM_LOCK_LEAVE_NO_BARRIER(); #endif -#if USE_RGENGC if (UNLIKELY(wb_protected == FALSE)) { - MARK_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS(obj), obj); + ASSERT_vm_locking(); + MARK_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS(obj), obj); } -#endif + + // TODO: make it atomic, or ractor local + objspace->total_allocated_objects++; #if RGENGC_PROFILE if (wb_protected) { - objspace->profile.total_generated_normal_object_count++; + objspace->profile.total_generated_normal_object_count++; #if RGENGC_PROFILE >= 2 - objspace->profile.generated_normal_object_count_types[BUILTIN_TYPE(obj)]++; + objspace->profile.generated_normal_object_count_types[BUILTIN_TYPE(obj)]++; #endif } else { - objspace->profile.total_generated_shady_object_count++; + objspace->profile.total_generated_shady_object_count++; #if RGENGC_PROFILE >= 2 - objspace->profile.generated_shady_object_count_types[BUILTIN_TYPE(obj)]++; + objspace->profile.generated_shady_object_count_types[BUILTIN_TYPE(obj)]++; #endif } #endif @@ -2172,77 +2301,220 @@ newobj_init(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, int wb_prote GC_ASSERT(!SPECIAL_CONST_P(obj)); /* check alignment */ #endif - objspace->total_allocated_objects++; - gc_report(5, objspace, "newobj: %s\n", obj_info(obj)); #if RGENGC_OLD_NEWOBJ_CHECK > 0 { - static int newobj_cnt = RGENGC_OLD_NEWOBJ_CHECK; + static int newobj_cnt = RGENGC_OLD_NEWOBJ_CHECK; - if (!is_incremental_marking(objspace) && - flags & FL_WB_PROTECTED && /* do not promote WB unprotected objects */ - ! RB_TYPE_P(obj, T_ARRAY)) { /* array.c assumes that allocated objects are new */ - if (--newobj_cnt == 0) { - newobj_cnt = RGENGC_OLD_NEWOBJ_CHECK; + if (!is_incremental_marking(objspace) && + flags & FL_WB_PROTECTED && /* do not promote WB unprotected objects */ + ! RB_TYPE_P(obj, T_ARRAY)) { /* array.c assumes that allocated objects are new */ + if (--newobj_cnt == 0) { + newobj_cnt = RGENGC_OLD_NEWOBJ_CHECK; - gc_mark_set(objspace, obj); - RVALUE_AGE_SET_OLD(objspace, obj); + gc_mark_set(objspace, obj); + RVALUE_AGE_SET_OLD(objspace, obj); - rb_gc_writebarrier_remember(obj); - } - } + rb_gc_writebarrier_remember(obj); + } + } } #endif - check_rvalue_consistency(obj); + // RUBY_DEBUG_LOG("obj:%p (%s)", (void *)obj, obj_type_name(obj)); return obj; } +static inline void heap_add_freepage(rb_heap_t *heap, struct heap_page *page); +static struct heap_page *heap_next_freepage(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap); +static inline void ractor_set_cache(rb_ractor_t *cr, struct heap_page *page, size_t size_pool_idx); + +size_t +rb_gc_obj_slot_size(VALUE obj) +{ + return GET_HEAP_PAGE(obj)->slot_size; +} + +static inline size_t +size_pool_slot_size(unsigned char pool_id) +{ + GC_ASSERT(pool_id < SIZE_POOL_COUNT); + + size_t slot_size = (1 << pool_id) * sizeof(RVALUE); + +#if RGENGC_CHECK_MODE + rb_objspace_t *objspace = &rb_objspace; + GC_ASSERT(size_pools[pool_id].slot_size == (short)slot_size); +#endif + + return slot_size; +} + +bool +rb_gc_size_allocatable_p(size_t size) +{ + return size <= size_pool_slot_size(SIZE_POOL_COUNT - 1); +} + static inline VALUE -newobj_slowpath(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, rb_objspace_t *objspace, int wb_protected) +ractor_cached_free_region(rb_objspace_t *objspace, rb_ractor_t *cr, size_t size_pool_idx) +{ + rb_ractor_newobj_size_pool_cache_t *cache = &cr->newobj_cache.size_pool_caches[size_pool_idx]; + RVALUE *p = cache->freelist; + + if (p) { + VALUE obj = (VALUE)p; + cache->freelist = p->as.free.next; + asan_unpoison_object(obj, true); +#if RGENGC_CHECK_MODE + // zero clear + MEMZERO((char *)obj, char, size_pool_slot_size(size_pool_idx)); +#endif + return obj; + } + else { + return Qfalse; + } +} + +static struct heap_page * +heap_next_freepage(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) +{ + ASSERT_vm_locking(); + + struct heap_page *page; + + while (heap->free_pages == NULL) { + heap_prepare(objspace, size_pool, heap); + } + page = heap->free_pages; + heap->free_pages = page->free_next; + + GC_ASSERT(page->free_slots != 0); + RUBY_DEBUG_LOG("page:%p freelist:%p cnt:%d", (void *)page, (void *)page->freelist, page->free_slots); + + asan_unpoison_memory_region(&page->freelist, sizeof(RVALUE*), false); + + return page; +} + +static inline void +ractor_set_cache(rb_ractor_t *cr, struct heap_page *page, size_t size_pool_idx) +{ + gc_report(3, &rb_objspace, "ractor_set_cache: Using page %p\n", (void *)GET_PAGE_BODY(page->start)); + + rb_ractor_newobj_size_pool_cache_t *cache = &cr->newobj_cache.size_pool_caches[size_pool_idx]; + + cache->using_page = page; + cache->freelist = page->freelist; + page->free_slots = 0; + page->freelist = NULL; + + asan_unpoison_object((VALUE)cache->freelist, false); + GC_ASSERT(RB_TYPE_P((VALUE)cache->freelist, T_NONE)); + asan_poison_object((VALUE)cache->freelist); +} + +static inline void +ractor_cache_slots(rb_objspace_t *objspace, rb_ractor_t *cr, size_t size_pool_idx) +{ + ASSERT_vm_locking(); + + rb_size_pool_t *size_pool = &size_pools[size_pool_idx]; + struct heap_page *page = heap_next_freepage(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool)); + + ractor_set_cache(cr, page, size_pool_idx); +} + +static inline VALUE +newobj_fill(VALUE obj, VALUE v1, VALUE v2, VALUE v3) +{ + RVALUE *p = (RVALUE *)obj; + p->as.values.v1 = v1; + p->as.values.v2 = v2; + p->as.values.v3 = v3; + return obj; +} + +static inline size_t +size_pool_idx_for_size(size_t size) +{ +#if USE_RVARGC + size_t slot_count = CEILDIV(size, sizeof(RVALUE)); + + /* size_pool_idx is ceil(log2(slot_count)) */ + size_t size_pool_idx = 64 - nlz_int64(slot_count - 1); + if (size_pool_idx >= SIZE_POOL_COUNT) { + rb_bug("size_pool_idx_for_size: allocation size too large"); + } + + return size_pool_idx; +#else + GC_ASSERT(size <= sizeof(RVALUE)); + return 0; +#endif +} + +ALWAYS_INLINE(static VALUE newobj_slowpath(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_t *cr, int wb_protected, size_t size_pool_idx)); + +static inline VALUE +newobj_slowpath(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_t *cr, int wb_protected, size_t size_pool_idx) { VALUE obj; + unsigned int lev; - if (UNLIKELY(during_gc || ruby_gc_stressful)) { - if (during_gc) { - dont_gc = 1; - during_gc = 0; - rb_bug("object allocation during garbage collection phase"); - } + RB_VM_LOCK_ENTER_CR_LEV(cr, &lev); + { + if (UNLIKELY(during_gc || ruby_gc_stressful)) { + if (during_gc) { + dont_gc_on(); + during_gc = 0; + rb_bug("object allocation during garbage collection phase"); + } - if (ruby_gc_stressful) { - if (!garbage_collect(objspace, GPR_FLAG_NEWOBJ)) { - rb_memerror(); - } - } + if (ruby_gc_stressful) { + if (!garbage_collect(objspace, GPR_FLAG_NEWOBJ)) { + rb_memerror(); + } + } + } + + // allocate new slot + while ((obj = ractor_cached_free_region(objspace, cr, size_pool_idx)) == Qfalse) { + ractor_cache_slots(objspace, cr, size_pool_idx); + } + GC_ASSERT(obj != 0); + newobj_init(klass, flags, wb_protected, objspace, obj); + + gc_event_hook_prep(objspace, RUBY_INTERNAL_EVENT_NEWOBJ, obj, newobj_fill(obj, 0, 0, 0)); } + RB_VM_LOCK_LEAVE_CR_LEV(cr, &lev); - obj = heap_get_freeobj(objspace, heap_eden); - newobj_init(klass, flags, v1, v2, v3, wb_protected, objspace, obj); - gc_event_hook(objspace, RUBY_INTERNAL_EVENT_NEWOBJ, obj); return obj; } -NOINLINE(static VALUE newobj_slowpath_wb_protected(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, rb_objspace_t *objspace)); -NOINLINE(static VALUE newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, rb_objspace_t *objspace)); +NOINLINE(static VALUE newobj_slowpath_wb_protected(VALUE klass, VALUE flags, + rb_objspace_t *objspace, rb_ractor_t *cr, size_t size_pool_idx)); +NOINLINE(static VALUE newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags, + rb_objspace_t *objspace, rb_ractor_t *cr, size_t size_pool_idx)); static VALUE -newobj_slowpath_wb_protected(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, rb_objspace_t *objspace) +newobj_slowpath_wb_protected(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_t *cr, size_t size_pool_idx) { - return newobj_slowpath(klass, flags, v1, v2, v3, objspace, TRUE); + return newobj_slowpath(klass, flags, objspace, cr, TRUE, size_pool_idx); } static VALUE -newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, rb_objspace_t *objspace) +newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_t *cr, size_t size_pool_idx) { - return newobj_slowpath(klass, flags, v1, v2, v3, objspace, FALSE); + return newobj_slowpath(klass, flags, objspace, cr, FALSE, size_pool_idx); } static inline VALUE -newobj_of(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, int wb_protected) +newobj_of0(VALUE klass, VALUE flags, int wb_protected, rb_ractor_t *cr, size_t alloc_size) { - rb_objspace_t *objspace = &rb_objspace; VALUE obj; + rb_objspace_t *objspace = &rb_objspace; RB_DEBUG_COUNTER_INC(obj_newobj); (void)RB_DEBUG_COUNTER_INC_IF(obj_newobj_wb_unprotected, !wb_protected); @@ -2255,33 +2527,61 @@ newobj_of(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, int wb_protect } } #endif - if (!(during_gc || - ruby_gc_stressful || - gc_event_hook_available_p(objspace)) && - (obj = heap_get_freeobj_head(objspace, heap_eden)) != Qfalse) { - return newobj_init(klass, flags, v1, v2, v3, wb_protected, objspace, obj); + + size_t size_pool_idx = size_pool_idx_for_size(alloc_size); + + if ((!UNLIKELY(during_gc || + ruby_gc_stressful || + gc_event_hook_available_p(objspace)) && + wb_protected && + (obj = ractor_cached_free_region(objspace, cr, size_pool_idx)) != Qfalse)) { + + newobj_init(klass, flags, wb_protected, objspace, obj); } else { RB_DEBUG_COUNTER_INC(obj_newobj_slowpath); - return wb_protected ? - newobj_slowpath_wb_protected(klass, flags, v1, v2, v3, objspace) : - newobj_slowpath_wb_unprotected(klass, flags, v1, v2, v3, objspace); + obj = wb_protected ? + newobj_slowpath_wb_protected(klass, flags, objspace, cr, size_pool_idx) : + newobj_slowpath_wb_unprotected(klass, flags, objspace, cr, size_pool_idx); } + + return obj; +} + +static inline VALUE +newobj_of(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, int wb_protected, size_t alloc_size) +{ + VALUE obj = newobj_of0(klass, flags, wb_protected, GET_RACTOR(), alloc_size); + return newobj_fill(obj, v1, v2, v3); +} + +static inline VALUE +newobj_of_cr(rb_ractor_t *cr, VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, int wb_protected, size_t alloc_size) +{ + VALUE obj = newobj_of0(klass, flags, wb_protected, cr, alloc_size); + return newobj_fill(obj, v1, v2, v3); +} + +VALUE +rb_wb_unprotected_newobj_of(VALUE klass, VALUE flags, size_t size) +{ + GC_ASSERT((flags & FL_WB_PROTECTED) == 0); + return newobj_of(klass, flags, 0, 0, 0, FALSE, size); } VALUE -rb_wb_unprotected_newobj_of(VALUE klass, VALUE flags) +rb_wb_protected_newobj_of(VALUE klass, VALUE flags, size_t size) { GC_ASSERT((flags & FL_WB_PROTECTED) == 0); - return newobj_of(klass, flags, 0, 0, 0, FALSE); + return newobj_of(klass, flags, 0, 0, 0, TRUE, size); } VALUE -rb_wb_protected_newobj_of(VALUE klass, VALUE flags) +rb_ec_wb_protected_newobj_of(rb_execution_context_t *ec, VALUE klass, VALUE flags, size_t size) { GC_ASSERT((flags & FL_WB_PROTECTED) == 0); - return newobj_of(klass, flags, 0, 0, 0, TRUE); + return newobj_of_cr(rb_ec_ractor_ptr(ec), klass, flags, 0, 0, 0, TRUE, size); } /* for compatibility */ @@ -2289,33 +2589,72 @@ rb_wb_protected_newobj_of(VALUE klass, VALUE flags) VALUE rb_newobj(void) { - return newobj_of(0, T_NONE, 0, 0, 0, FALSE); + return newobj_of(0, T_NONE, 0, 0, 0, FALSE, sizeof(RVALUE)); } VALUE rb_newobj_of(VALUE klass, VALUE flags) { - return newobj_of(klass, flags & ~FL_WB_PROTECTED, 0, 0, 0, flags & FL_WB_PROTECTED); + if ((flags & RUBY_T_MASK) == T_OBJECT) { + st_table *index_tbl = RCLASS_IV_INDEX_TBL(klass); + + VALUE obj = newobj_of(klass, (flags | ROBJECT_EMBED) & ~FL_WB_PROTECTED , Qundef, Qundef, Qundef, flags & FL_WB_PROTECTED, sizeof(RVALUE)); + + if (index_tbl && index_tbl->num_entries > ROBJECT_EMBED_LEN_MAX) { + rb_init_iv_list(obj); + } + return obj; + } + else { + return newobj_of(klass, flags & ~FL_WB_PROTECTED, 0, 0, 0, flags & FL_WB_PROTECTED, sizeof(RVALUE)); + } } #define UNEXPECTED_NODE(func) \ rb_bug(#func"(): GC does not handle T_NODE 0x%x(%p) 0x%"PRIxVALUE, \ BUILTIN_TYPE(obj), (void*)(obj), RBASIC(obj)->flags) +const char * +rb_imemo_name(enum imemo_type type) +{ + // put no default case to get a warning if an imemo type is missing + switch (type) { +#define IMEMO_NAME(x) case imemo_##x: return #x; + IMEMO_NAME(env); + IMEMO_NAME(cref); + IMEMO_NAME(svar); + IMEMO_NAME(throw_data); + IMEMO_NAME(ifunc); + IMEMO_NAME(memo); + IMEMO_NAME(ment); + IMEMO_NAME(iseq); + IMEMO_NAME(tmpbuf); + IMEMO_NAME(ast); + IMEMO_NAME(parser_strterm); + IMEMO_NAME(callinfo); + IMEMO_NAME(callcache); + IMEMO_NAME(constcache); +#undef IMEMO_NAME + } + return "unknown"; +} + #undef rb_imemo_new VALUE rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0) { + size_t size = sizeof(RVALUE); VALUE flags = T_IMEMO | (type << FL_USHIFT); - return newobj_of(v0, flags, v1, v2, v3, TRUE); + return newobj_of(v0, flags, v1, v2, v3, TRUE, size); } static VALUE rb_imemo_tmpbuf_new(VALUE v1, VALUE v2, VALUE v3, VALUE v0) { + size_t size = sizeof(RVALUE); VALUE flags = T_IMEMO | (imemo_tmpbuf << FL_USHIFT); - return newobj_of(v0, flags, v1, v2, v3, FALSE); + return newobj_of(v0, flags, v1, v2, v3, FALSE, size); } static VALUE @@ -2375,17 +2714,40 @@ rb_imemo_new_debug(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0, #endif VALUE -rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree) +rb_class_allocate_instance(VALUE klass) { - if (klass) Check_Type(klass, T_CLASS); - return newobj_of(klass, T_DATA, (VALUE)dmark, (VALUE)dfree, (VALUE)datap, FALSE); + st_table *index_tbl = RCLASS_IV_INDEX_TBL(klass); + + VALUE flags = T_OBJECT | ROBJECT_EMBED; + + VALUE obj = newobj_of(klass, flags, Qundef, Qundef, Qundef, RGENGC_WB_PROTECTED_OBJECT, sizeof(RVALUE)); + + if (index_tbl && index_tbl->num_entries > ROBJECT_EMBED_LEN_MAX) { + rb_init_iv_list(obj); + } + + return obj; } -#undef rb_data_object_alloc -RUBY_ALIAS_FUNCTION(rb_data_object_alloc(VALUE klass, void *datap, - RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree), - rb_data_object_wrap, (klass, datap, dmark, dfree)) +static inline void +rb_data_object_check(VALUE klass) +{ + if (klass != rb_cObject && (rb_get_alloc_func(klass) == rb_class_allocate_instance)) { + rb_undef_alloc_func(klass); +#if RUBY_VERSION_SINCE(3, 2) + RBIMPL_TODO("enable the warning at this release"); + rb_warn("undefining the allocator of T_DATA class %"PRIsVALUE, klass); +#endif + } +} +VALUE +rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree) +{ + RUBY_ASSERT_ALWAYS(dfree != (RUBY_DATA_FUNC)1); + if (klass) rb_data_object_check(klass); + return newobj_of(klass, T_DATA, (VALUE)dmark, (VALUE)dfree, (VALUE)datap, FALSE, sizeof(RVALUE)); +} VALUE rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree) @@ -2398,15 +2760,11 @@ rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_ VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type) { - if (klass) Check_Type(klass, T_CLASS); - return newobj_of(klass, T_DATA, (VALUE)type, (VALUE)1, (VALUE)datap, type->flags & RUBY_FL_WB_PROTECTED); + RBIMPL_NONNULL_ARG(type); + if (klass) rb_data_object_check(klass); + return newobj_of(klass, T_DATA, (VALUE)type, (VALUE)1, (VALUE)datap, type->flags & RUBY_FL_WB_PROTECTED, sizeof(RVALUE)); } -#undef rb_data_typed_object_alloc -RUBY_ALIAS_FUNCTION(rb_data_typed_object_alloc(VALUE klass, void *datap, - const rb_data_type_t *type), - rb_data_typed_object_wrap, (klass, datap, type)) - VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type) { @@ -2462,13 +2820,15 @@ is_pointer_to_heap(rb_objspace_t *objspace, void *ptr) mid = (lo + hi) / 2; page = heap_pages_sorted[mid]; if (page->start <= p) { - if (p < page->start + page->total_slots) { + if ((uintptr_t)p < ((uintptr_t)page->start + (page->total_slots * page->slot_size))) { RB_DEBUG_COUNTER_INC(gc_isptr_maybe); if (page->flags.in_tomb) { return FALSE; } else { + if ((NUM_IN_PAGE(p) * sizeof(RVALUE)) % page->slot_size != 0) return FALSE; + return TRUE; } } @@ -2496,6 +2856,145 @@ rb_free_const_table(struct rb_id_table *tbl) rb_id_table_free(tbl); } +static int +free_iv_index_tbl_free_i(st_data_t key, st_data_t value, st_data_t data) +{ + xfree((void *)value); + return ST_CONTINUE; +} + +static void +iv_index_tbl_free(struct st_table *tbl) +{ + st_foreach(tbl, free_iv_index_tbl_free_i, 0); + st_free_table(tbl); +} + +// alive: if false, target pointers can be freed already. +// To check it, we need objspace parameter. +static void +vm_ccs_free(struct rb_class_cc_entries *ccs, int alive, rb_objspace_t *objspace, VALUE klass) +{ + if (ccs->entries) { + for (int i=0; ilen; i++) { + const struct rb_callcache *cc = ccs->entries[i].cc; + if (!alive) { + void *ptr = asan_poisoned_object_p((VALUE)cc); + asan_unpoison_object((VALUE)cc, false); + // ccs can be free'ed. + if (is_pointer_to_heap(objspace, (void *)cc) && + IMEMO_TYPE_P(cc, imemo_callcache) && + cc->klass == klass) { + // OK. maybe target cc. + } + else { + if (ptr) { + asan_poison_object((VALUE)cc); + } + continue; + } + if (ptr) { + asan_poison_object((VALUE)cc); + } + } + vm_cc_invalidate(cc); + } + ruby_xfree(ccs->entries); + } + ruby_xfree(ccs); +} + +void +rb_vm_ccs_free(struct rb_class_cc_entries *ccs) +{ + RB_DEBUG_COUNTER_INC(ccs_free); + vm_ccs_free(ccs, TRUE, NULL, Qundef); +} + +struct cc_tbl_i_data { + rb_objspace_t *objspace; + VALUE klass; + bool alive; +}; + +static enum rb_id_table_iterator_result +cc_table_mark_i(ID id, VALUE ccs_ptr, void *data_ptr) +{ + struct cc_tbl_i_data *data = data_ptr; + struct rb_class_cc_entries *ccs = (struct rb_class_cc_entries *)ccs_ptr; + VM_ASSERT(vm_ccs_p(ccs)); + VM_ASSERT(id == ccs->cme->called_id); + + if (METHOD_ENTRY_INVALIDATED(ccs->cme)) { + rb_vm_ccs_free(ccs); + return ID_TABLE_DELETE; + } + else { + gc_mark(data->objspace, (VALUE)ccs->cme); + + for (int i=0; ilen; i++) { + VM_ASSERT(data->klass == ccs->entries[i].cc->klass); + VM_ASSERT(vm_cc_check_cme(ccs->entries[i].cc, ccs->cme)); + + gc_mark(data->objspace, (VALUE)ccs->entries[i].ci); + gc_mark(data->objspace, (VALUE)ccs->entries[i].cc); + } + return ID_TABLE_CONTINUE; + } +} + +static void +cc_table_mark(rb_objspace_t *objspace, VALUE klass) +{ + struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); + if (cc_tbl) { + struct cc_tbl_i_data data = { + .objspace = objspace, + .klass = klass, + }; + rb_id_table_foreach(cc_tbl, cc_table_mark_i, &data); + } +} + +static enum rb_id_table_iterator_result +cc_table_free_i(VALUE ccs_ptr, void *data_ptr) +{ + struct cc_tbl_i_data *data = data_ptr; + struct rb_class_cc_entries *ccs = (struct rb_class_cc_entries *)ccs_ptr; + VM_ASSERT(vm_ccs_p(ccs)); + vm_ccs_free(ccs, data->alive, data->objspace, data->klass); + return ID_TABLE_CONTINUE; +} + +static void +cc_table_free(rb_objspace_t *objspace, VALUE klass, bool alive) +{ + struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); + + if (cc_tbl) { + struct cc_tbl_i_data data = { + .objspace = objspace, + .klass = klass, + .alive = alive, + }; + rb_id_table_foreach_values(cc_tbl, cc_table_free_i, &data); + rb_id_table_free(cc_tbl); + } +} + +static enum rb_id_table_iterator_result +cvar_table_free_i(VALUE value, void * ctx) +{ + xfree((void *) value); + return ID_TABLE_CONTINUE; +} + +void +rb_cc_table_free(VALUE klass) +{ + cc_table_free(&rb_objspace, klass, TRUE); +} + static inline void make_zombie(rb_objspace_t *objspace, VALUE obj, void (*dfree)(void *), void *data) { @@ -2505,26 +3004,31 @@ make_zombie(rb_objspace_t *objspace, VALUE obj, void (*dfree)(void *), void *dat zombie->data = data; zombie->next = heap_pages_deferred_final; heap_pages_deferred_final = (VALUE)zombie; + + struct heap_page *page = GET_HEAP_PAGE(obj); + page->final_slots++; + heap_pages_final_slots++; } static inline void make_io_zombie(rb_objspace_t *objspace, VALUE obj) { rb_io_t *fptr = RANY(obj)->as.file.fptr; - make_zombie(objspace, obj, (void (*)(void*))rb_io_fptr_finalize, fptr); + make_zombie(objspace, obj, rb_io_fptr_finalize_internal, fptr); } static void obj_free_object_id(rb_objspace_t *objspace, VALUE obj) { - VALUE id; + ASSERT_vm_locking(); + st_data_t o = (st_data_t)obj, id; GC_ASSERT(FL_TEST(obj, FL_SEEN_OBJ_ID)); FL_UNSET(obj, FL_SEEN_OBJ_ID); - if (st_delete(objspace->obj_to_id_tbl, (st_data_t *)&obj, &id)) { + if (st_delete(objspace->obj_to_id_tbl, &o, &id)) { GC_ASSERT(id); - st_delete(objspace->id_to_obj_tbl, (st_data_t *)&id, NULL); + st_delete(objspace->id_to_obj_tbl, &id, NULL); } else { rb_bug("Object ID seen, but not in mapping table: %s\n", obj_info(obj)); @@ -2535,6 +3039,7 @@ static int obj_free(rb_objspace_t *objspace, VALUE obj) { RB_DEBUG_COUNTER_INC(obj_free); + // RUBY_DEBUG_LOG("obj:%p (%s)", (void *)obj, obj_type_name(obj)); gc_event_hook(objspace, RUBY_INTERNAL_EVENT_FREEOBJ, obj); @@ -2545,6 +3050,8 @@ obj_free(rb_objspace_t *objspace, VALUE obj) case T_FALSE: rb_bug("obj_free() called for broken object"); break; + default: + break; } if (FL_TEST(obj, FL_EXIVAR)) { @@ -2556,7 +3063,6 @@ obj_free(rb_objspace_t *objspace, VALUE obj) obj_free_object_id(objspace, obj); } -#if USE_RGENGC if (RVALUE_WB_UNPROTECTED(obj)) CLEAR_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS(obj), obj); #if RGENGC_CHECK_MODE @@ -2566,13 +3072,11 @@ obj_free(rb_objspace_t *objspace, VALUE obj) CHECK(RVALUE_MARKING); CHECK(RVALUE_UNCOLLECTIBLE); #undef CHECK -#endif #endif switch (BUILTIN_TYPE(obj)) { case T_OBJECT: - if ((RANY(obj)->as.basic.flags & ROBJECT_EMBED) || - RANY(obj)->as.object.as.heap.ivptr == NULL) { + if (RANY(obj)->as.basic.flags & ROBJECT_EMBED) { RB_DEBUG_COUNTER_INC(obj_obj_embed); } else if (ROBJ_TRANSIENT_P(obj)) { @@ -2585,8 +3089,8 @@ obj_free(rb_objspace_t *objspace, VALUE obj) break; case T_MODULE: case T_CLASS: - mjit_remove_class_serial(RCLASS_SERIAL(obj)); rb_id_table_free(RCLASS_M_TBL(obj)); + cc_table_free(objspace, obj, FALSE); if (RCLASS_IV_TBL(obj)) { st_free_table(RCLASS_IV_TBL(obj)); } @@ -2594,22 +3098,19 @@ obj_free(rb_objspace_t *objspace, VALUE obj) rb_free_const_table(RCLASS_CONST_TBL(obj)); } if (RCLASS_IV_INDEX_TBL(obj)) { - st_free_table(RCLASS_IV_INDEX_TBL(obj)); + iv_index_tbl_free(RCLASS_IV_INDEX_TBL(obj)); } - if (RCLASS_EXT(obj)->subclasses) { - if (BUILTIN_TYPE(obj) == T_MODULE) { - rb_class_detach_module_subclasses(obj); - } - else { - rb_class_detach_subclasses(obj); - } - RCLASS_EXT(obj)->subclasses = NULL; + if (RCLASS_CVC_TBL(obj)) { + rb_id_table_foreach_values(RCLASS_CVC_TBL(obj), cvar_table_free_i, NULL); + rb_id_table_free(RCLASS_CVC_TBL(obj)); } + rb_class_remove_subclass_head(obj); rb_class_remove_from_module_subclasses(obj); rb_class_remove_from_super_subclasses(obj); - if (RANY(obj)->as.klass.ptr) - xfree(RANY(obj)->as.klass.ptr); - RANY(obj)->as.klass.ptr = NULL; +#if !USE_RVARGC + if (RCLASS_EXT(obj)) + xfree(RCLASS_EXT(obj)); +#endif (void)RB_DEBUG_COUNTER_INC_IF(obj_module_ptr, BUILTIN_TYPE(obj) == T_MODULE); (void)RB_DEBUG_COUNTER_INC_IF(obj_class_ptr, BUILTIN_TYPE(obj) == T_CLASS); @@ -2622,7 +3123,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj) break; case T_HASH: #if USE_DEBUG_COUNTER - switch RHASH_SIZE(obj) { + switch (RHASH_SIZE(obj)) { case 0: RB_DEBUG_COUNTER_INC(obj_hash_empty); break; @@ -2714,7 +3215,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj) else { make_zombie(objspace, obj, dfree, data); RB_DEBUG_COUNTER_INC(obj_data_zombie); - return 1; + return FALSE; } } else { @@ -2748,7 +3249,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj) if (RANY(obj)->as.file.fptr) { make_io_zombie(objspace, obj); RB_DEBUG_COUNTER_INC(obj_file_ptr); - return 1; + return FALSE; } break; case T_RATIONAL: @@ -2761,20 +3262,20 @@ obj_free(rb_objspace_t *objspace, VALUE obj) break; case T_ICLASS: /* Basically , T_ICLASS shares table with the module */ - if (FL_TEST(obj, RICLASS_IS_ORIGIN)) { - rb_id_table_free(RCLASS_M_TBL(obj)); - } + if (RICLASS_OWNS_M_TBL_P(obj)) { + /* Method table is not shared for origin iclasses of classes */ + rb_id_table_free(RCLASS_M_TBL(obj)); + } if (RCLASS_CALLABLE_M_TBL(obj) != NULL) { rb_id_table_free(RCLASS_CALLABLE_M_TBL(obj)); } - if (RCLASS_EXT(obj)->subclasses) { - rb_class_detach_subclasses(obj); - RCLASS_EXT(obj)->subclasses = NULL; - } + rb_class_remove_subclass_head(obj); + cc_table_free(objspace, obj, FALSE); rb_class_remove_from_module_subclasses(obj); rb_class_remove_from_super_subclasses(obj); - xfree(RANY(obj)->as.klass.ptr); - RANY(obj)->as.klass.ptr = NULL; +#if !USE_RVARGC + xfree(RCLASS_EXT(obj)); +#endif RB_DEBUG_COUNTER_INC(obj_iclass_ptr); break; @@ -2784,7 +3285,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj) break; case T_BIGNUM: - if (!(RBASIC(obj)->flags & BIGNUM_EMBED_FLAG) && BIGNUM_DIGITS(obj)) { + if (!BIGNUM_EMBED_P(obj) && BIGNUM_DIGITS(obj)) { xfree(BIGNUM_DIGITS(obj)); RB_DEBUG_COUNTER_INC(obj_bignum_ptr); } @@ -2859,11 +3360,17 @@ obj_free(rb_objspace_t *objspace, VALUE obj) case imemo_parser_strterm: RB_DEBUG_COUNTER_INC(obj_imemo_parser_strterm); break; - default: - /* unreachable */ - break; + case imemo_callinfo: + RB_DEBUG_COUNTER_INC(obj_imemo_callinfo); + break; + case imemo_callcache: + RB_DEBUG_COUNTER_INC(obj_imemo_callcache); + break; + case imemo_constcache: + RB_DEBUG_COUNTER_INC(obj_imemo_constcache); + break; } - return 0; + return TRUE; default: rb_bug("gc_sweep(): unknown data type 0x%x(%p) 0x%"PRIxVALUE, @@ -2872,10 +3379,10 @@ obj_free(rb_objspace_t *objspace, VALUE obj) if (FL_TEST(obj, FL_FINALIZE)) { make_zombie(objspace, obj, 0, 0); - return 1; + return FALSE; } else { - return 0; + return TRUE; } } @@ -2886,9 +3393,10 @@ obj_free(rb_objspace_t *objspace, VALUE obj) static int object_id_cmp(st_data_t x, st_data_t y) { - if (RB_TYPE_P(x, T_BIGNUM)) { + if (RB_BIGNUM_TYPE_P(x)) { return !rb_big_eql(x, y); - } else { + } + else { return x != y; } } @@ -2896,9 +3404,10 @@ object_id_cmp(st_data_t x, st_data_t y) static st_index_t object_id_hash(st_data_t n) { - if (RB_TYPE_P(n, T_BIGNUM)) { + if (RB_BIGNUM_TYPE_P(n)) { return FIX2LONG(rb_big_hash(n)); - } else { + } + else { return st_numhash(n); } } @@ -2912,6 +3421,20 @@ Init_heap(void) { rb_objspace_t *objspace = &rb_objspace; +#if defined(HAVE_MMAP) && !HAVE_CONST_PAGE_SIZE && !defined(PAGE_MAX_SIZE) + /* Need to determine if we can use mmap at runtime. */ +# ifdef PAGE_SIZE + /* If the PAGE_SIZE macro can be used. */ + use_mmap_aligned_alloc = PAGE_SIZE <= HEAP_PAGE_SIZE; +# elif defined(HAVE_SYSCONF) && defined(_SC_PAGE_SIZE) + /* If we can use sysconf to determine the page size. */ + use_mmap_aligned_alloc = sysconf(_SC_PAGE_SIZE) <= HEAP_PAGE_SIZE; +# else + /* Otherwise we can't determine the system page size, so don't use mmap. */ + use_mmap_aligned_alloc = FALSE; +# endif +#endif + objspace->next_object_id = INT2FIX(OBJ_ID_INITIAL); objspace->id_to_obj_tbl = st_init_table(&object_id_hash_type); objspace->obj_to_id_tbl = st_init_numtable(); @@ -2920,7 +3443,16 @@ Init_heap(void) objspace->rgengc.oldmalloc_increase_limit = gc_params.oldmalloc_limit_min; #endif - heap_add_pages(objspace, heap_eden, gc_params.heap_init_slots / HEAP_PAGE_OBJ_LIMIT); + heap_add_pages(objspace, &size_pools[0], SIZE_POOL_EDEN_HEAP(&size_pools[0]), gc_params.heap_init_slots / HEAP_PAGE_OBJ_LIMIT); + + /* Give other size pools allocatable pages. */ + for (int i = 1; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + int multiple = size_pool->slot_size / sizeof(RVALUE); + size_pool->allocatable_pages = gc_params.heap_init_slots * multiple / HEAP_PAGE_OBJ_LIMIT; + } + heap_pages_expand_sorted(objspace); + init_mark_stack(&objspace->mark_stack); objspace->profile.invoke_time = getrusage_time(); @@ -2937,53 +3469,99 @@ Init_gc_stress(void) typedef int each_obj_callback(void *, void *, size_t, void *); -static void objspace_each_objects(rb_objspace_t *objspace, each_obj_callback *callback, void *data); +static void objspace_each_objects(rb_objspace_t *objspace, each_obj_callback *callback, void *data, bool protected); static void objspace_reachable_objects_from_root(rb_objspace_t *, void (func)(const char *, VALUE, void *), void *); -struct each_obj_args { +struct each_obj_data { rb_objspace_t *objspace; + bool reenable_incremental; + each_obj_callback *callback; void *data; + + struct heap_page **pages[SIZE_POOL_COUNT]; + size_t pages_counts[SIZE_POOL_COUNT]; }; -static void -objspace_each_objects_without_setup(rb_objspace_t *objspace, each_obj_callback *callback, void *data) +static VALUE +objspace_each_objects_ensure(VALUE arg) { - size_t i; - struct heap_page *page; - RVALUE *pstart = NULL, *pend; - - i = 0; - while (i < heap_allocated_pages) { - while (0 < i && pstart < heap_pages_sorted[i-1]->start) i--; - while (i < heap_allocated_pages && heap_pages_sorted[i]->start <= pstart) i++; - if (heap_allocated_pages <= i) break; - - page = heap_pages_sorted[i]; + struct each_obj_data *data = (struct each_obj_data *)arg; + rb_objspace_t *objspace = data->objspace; - pstart = page->start; - pend = pstart + page->total_slots; + /* Reenable incremental GC */ + if (data->reenable_incremental) { + objspace->flags.dont_incremental = FALSE; + } - if ((*callback)(pstart, pend, sizeof(RVALUE), data)) { - break; - } + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + struct heap_page **pages = data->pages[i]; + /* pages could be NULL if an error was raised during setup (e.g. + * malloc failed due to out of memory). */ + if (pages) { + free(pages); + } } -} -static VALUE -objspace_each_objects_protected(VALUE arg) -{ - struct each_obj_args *args = (struct each_obj_args *)arg; - objspace_each_objects_without_setup(args->objspace, args->callback, args->data); return Qnil; } static VALUE -incremental_enable(VALUE _) +objspace_each_objects_try(VALUE arg) { - rb_objspace_t *objspace = &rb_objspace; + struct each_obj_data *data = (struct each_obj_data *)arg; + rb_objspace_t *objspace = data->objspace; + + /* Copy pages from all size_pools to their respective buffers. */ + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + size_t size = size_mul_or_raise(SIZE_POOL_EDEN_HEAP(size_pool)->total_pages, sizeof(struct heap_page *), rb_eRuntimeError); + + struct heap_page **pages = malloc(size); + if (!pages) rb_memerror(); + + /* Set up pages buffer by iterating over all pages in the current eden + * heap. This will be a snapshot of the state of the heap before we + * call the callback over each page that exists in this buffer. Thus it + * is safe for the callback to allocate objects without possibly entering + * an infinite loop. */ + struct heap_page *page = 0; + size_t pages_count = 0; + list_for_each(&SIZE_POOL_EDEN_HEAP(size_pool)->pages, page, page_node) { + pages[pages_count] = page; + pages_count++; + } + data->pages[i] = pages; + data->pages_counts[i] = pages_count; + GC_ASSERT(pages_count == SIZE_POOL_EDEN_HEAP(size_pool)->total_pages); + } + + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + size_t pages_count = data->pages_counts[i]; + struct heap_page **pages = data->pages[i]; + + struct heap_page *page = list_top(&SIZE_POOL_EDEN_HEAP(size_pool)->pages, struct heap_page, page_node); + for (size_t i = 0; i < pages_count; i++) { + /* If we have reached the end of the linked list then there are no + * more pages, so break. */ + if (page == NULL) break; + + /* If this page does not match the one in the buffer, then move to + * the next page in the buffer. */ + if (pages[i] != page) continue; + + uintptr_t pstart = (uintptr_t)page->start; + uintptr_t pend = pstart + (page->total_slots * size_pool->slot_size); + + if ((*data->callback)((void *)pstart, (void *)pend, size_pool->slot_size, data->data)) { + break; + } + + page = list_next(&SIZE_POOL_EDEN_HEAP(size_pool)->pages, page, page_node); + } + } - objspace->flags.dont_incremental = FALSE; return Qnil; } @@ -3018,7 +3596,7 @@ incremental_enable(VALUE _) * This means that you can not walk through all Ruby object page * including freed object page. * - * Note: On this implementation, 'stride' is same as sizeof(RVALUE). + * Note: On this implementation, 'stride' is the same as sizeof(RVALUE). * However, there are possibilities to pass variable values with * 'stride' with some reasons. You must use stride instead of * use some constant value in the iteration. @@ -3026,30 +3604,39 @@ incremental_enable(VALUE _) void rb_objspace_each_objects(each_obj_callback *callback, void *data) { - objspace_each_objects(&rb_objspace, callback, data); + objspace_each_objects(&rb_objspace, callback, data, TRUE); } static void -objspace_each_objects(rb_objspace_t *objspace, each_obj_callback *callback, void *data) +objspace_each_objects(rb_objspace_t *objspace, each_obj_callback *callback, void *data, bool protected) { - int prev_dont_incremental = objspace->flags.dont_incremental; - - gc_rest(objspace); - objspace->flags.dont_incremental = TRUE; + /* Disable incremental GC */ + bool reenable_incremental = FALSE; + if (protected) { + reenable_incremental = !objspace->flags.dont_incremental; - if (prev_dont_incremental) { - objspace_each_objects_without_setup(objspace, callback, data); - } - else { - struct each_obj_args args = {objspace, callback, data}; - rb_ensure(objspace_each_objects_protected, (VALUE)&args, incremental_enable, Qnil); + gc_rest(objspace); + objspace->flags.dont_incremental = TRUE; } + + struct each_obj_data each_obj_data = { + .objspace = objspace, + .reenable_incremental = reenable_incremental, + + .callback = callback, + .data = data, + + .pages = {NULL}, + .pages_counts = {0}, + }; + rb_ensure(objspace_each_objects_try, (VALUE)&each_obj_data, + objspace_each_objects_ensure, (VALUE)&each_obj_data); } void rb_objspace_each_objects_without_setup(each_obj_callback *callback, void *data) { - objspace_each_objects_without_setup(&rb_objspace, callback, data); + objspace_each_objects(&rb_objspace, callback, data, FALSE); } struct os_each_struct { @@ -3066,7 +3653,7 @@ internal_object_p(VALUE obj) bool used_p = p->as.basic.flags; if (used_p) { - switch (BUILTIN_TYPE(p)) { + switch (BUILTIN_TYPE(obj)) { case T_NODE: UNEXPECTED_NODE(internal_object_p); break; @@ -3103,14 +3690,15 @@ static int os_obj_of_i(void *vstart, void *vend, size_t stride, void *data) { struct os_each_struct *oes = (struct os_each_struct *)data; - RVALUE *p = (RVALUE *)vstart, *pend = (RVALUE *)vend; - for (; p != pend; p++) { - volatile VALUE v = (VALUE)p; + VALUE v = (VALUE)vstart; + for (; v != (VALUE)vend; v += stride) { if (!internal_object_p(v)) { if (!oes->of || rb_obj_is_kind_of(v, oes->of)) { - rb_yield(v); - oes->num++; + if (!rb_multi_ractor_p() || rb_ractor_shareable_p(v)) { + rb_yield(v); + oes->num++; + } } } } @@ -3228,6 +3816,57 @@ should_be_finalizable(VALUE obj) * as an argument to aProc. If aProc is a lambda or * method, make sure it can be called with a single argument. * + * The return value is an array [0, aProc]. + * + * The two recommended patterns are to either create the finaliser proc + * in a non-instance method where it can safely capture the needed state, + * or to use a custom callable object that stores the needed state + * explicitly as instance variables. + * + * class Foo + * def initialize(data_needed_for_finalization) + * ObjectSpace.define_finalizer(self, self.class.create_finalizer(data_needed_for_finalization)) + * end + * + * def self.create_finalizer(data_needed_for_finalization) + * proc { + * puts "finalizing #{data_needed_for_finalization}" + * } + * end + * end + * + * class Bar + * class Remover + * def initialize(data_needed_for_finalization) + * @data_needed_for_finalization = data_needed_for_finalization + * end + * + * def call(id) + * puts "finalizing #{@data_needed_for_finalization}" + * end + * end + * + * def initialize(data_needed_for_finalization) + * ObjectSpace.define_finalizer(self, Remover.new(data_needed_for_finalization)) + * end + * end + * + * Note that if your finalizer references the object to be + * finalized it will never be run on GC, although it will still be + * run at exit. You will get a warning if you capture the object + * to be finalized as the receiver of the finalizer. + * + * class CapturesSelf + * def initialize(name) + * ObjectSpace.define_finalizer(self, proc { + * # this finalizer will only be run on exit + * puts "finalizing #{name}" + * }) + * end + * end + * + * Also note that finalization can be unpredictable and is never guaranteed + * to be run except on exit. */ static VALUE @@ -3244,6 +3883,10 @@ define_final(int argc, VALUE *argv, VALUE os) should_be_callable(block); } + if (rb_callable_receiver(block) == obj) { + rb_warn("finalizer references object to be finalized"); + } + return define_final0(obj, block); } @@ -3256,9 +3899,6 @@ define_final0(VALUE obj, VALUE block) RBASIC(obj)->flags |= FL_FINALIZE; - block = rb_ary_new3(2, INT2FIX(0), block); - OBJ_FREEZE(block); - if (st_lookup(finalizer_table, obj, &data)) { table = (VALUE)data; @@ -3269,8 +3909,9 @@ define_final0(VALUE obj, VALUE block) for (i = 0; i < len; i++) { VALUE recv = RARRAY_AREF(table, i); - if (rb_funcall(recv, idEq, 1, block)) { - return recv; + if (rb_equal(recv, block)) { + block = recv; + goto end; } } } @@ -3282,6 +3923,9 @@ define_final0(VALUE obj, VALUE block) RBASIC_CLEAR_CLASS(table); st_add_direct(finalizer_table, obj, table); } + end: + block = rb_ary_new3(2, INT2FIX(0), block); + OBJ_FREEZE(block); return block; } @@ -3309,12 +3953,21 @@ rb_gc_copy_finalizer(VALUE dest, VALUE obj) } static VALUE -run_single_final(VALUE final, VALUE objid) +run_single_final(VALUE cmd, VALUE objid) { - const VALUE cmd = RARRAY_AREF(final, 1); return rb_check_funcall(cmd, idCall, 1, &objid); } +static void +warn_exception_in_finalizer(rb_execution_context_t *ec, VALUE final) +{ + if (final != Qundef && !NIL_P(ruby_verbose)) { + VALUE errinfo = ec->errinfo; + rb_warn("Exception in finalizer %+"PRIsVALUE, final); + rb_ec_error_print(ec, errinfo); + } +} + static void run_finalizer(rb_objspace_t *objspace, VALUE obj, VALUE table) { @@ -3323,28 +3976,31 @@ run_finalizer(rb_objspace_t *objspace, VALUE obj, VALUE table) volatile struct { VALUE errinfo; VALUE objid; + VALUE final; rb_control_frame_t *cfp; long finished; } saved; rb_execution_context_t * volatile ec = GET_EC(); #define RESTORE_FINALIZER() (\ ec->cfp = saved.cfp, \ - rb_set_errinfo(saved.errinfo)) + ec->errinfo = saved.errinfo) - saved.errinfo = rb_errinfo(); + saved.errinfo = ec->errinfo; saved.objid = rb_obj_id(obj); saved.cfp = ec->cfp; saved.finished = 0; + saved.final = Qundef; EC_PUSH_TAG(ec); state = EC_EXEC_TAG(); if (state != TAG_NONE) { ++saved.finished; /* skip failed finalizer */ + warn_exception_in_finalizer(ec, ATOMIC_VALUE_EXCHANGE(saved.final, Qundef)); } for (i = saved.finished; RESTORE_FINALIZER(), ibasic.flags = 0; - if (LIKELY(heap_pages_final_slots)) heap_pages_final_slots--; - page->final_slots--; - page->free_slots++; - heap_page_add_freeobj(objspace, GET_HEAP_PAGE(zombie), zombie); + GC_ASSERT(heap_pages_final_slots > 0); + GC_ASSERT(page->final_slots > 0); - objspace->profile.total_freed_objects++; + heap_pages_final_slots--; + page->final_slots--; + page->free_slots++; + heap_page_add_freeobj(objspace, page, zombie); + objspace->profile.total_freed_objects++; + } + RB_VM_LOCK_LEAVE(); - zombie = next_zombie; + zombie = next_zombie; } } @@ -3398,10 +4059,14 @@ static void finalize_deferred(rb_objspace_t *objspace) { VALUE zombie; + rb_execution_context_t *ec = GET_EC(); + ec->interrupt_mask |= PENDING_INTERRUPT_MASK; while ((zombie = ATOMIC_VALUE_EXCHANGE(heap_pages_deferred_final, 0)) != 0) { finalize_list(objspace, zombie); } + + ec->interrupt_mask &= ~PENDING_INTERRUPT_MASK; } static void @@ -3409,6 +4074,7 @@ gc_finalize_deferred(void *dmy) { rb_objspace_t *objspace = dmy; if (ATOMIC_EXCHANGE(finalizing, 1)) return; + finalize_deferred(objspace); ATOMIC_SET(finalizing, 0); } @@ -3439,10 +4105,11 @@ force_chain_object(st_data_t key, st_data_t val, st_data_t arg) return ST_CONTINUE; } +bool rb_obj_is_main_ractor(VALUE gv); + void rb_objspace_call_finalizer(rb_objspace_t *objspace) { - RVALUE *p, *pend; size_t i; #if RGENGC_CHECK_MODE >= 2 @@ -3475,49 +4142,57 @@ rb_objspace_call_finalizer(rb_objspace_t *objspace) } /* prohibit GC because force T_DATA finalizers can break an object graph consistency */ - dont_gc = 1; + dont_gc_on(); /* running data/file finalizers are part of garbage collection */ - gc_enter(objspace, "rb_objspace_call_finalizer"); + unsigned int lock_lev; + gc_enter(objspace, gc_enter_event_finalizer, &lock_lev); /* run data/file object's finalizers */ for (i = 0; i < heap_allocated_pages; i++) { - p = heap_pages_sorted[i]->start; pend = p + heap_pages_sorted[i]->total_slots; - while (p < pend) { - void *poisoned = asan_poisoned_object_p((VALUE)p); - asan_unpoison_object((VALUE)p, false); - switch (BUILTIN_TYPE(p)) { + struct heap_page *page = heap_pages_sorted[i]; + short stride = page->slot_size; + + uintptr_t p = (uintptr_t)page->start; + uintptr_t pend = p + page->total_slots * stride; + for (; p < pend; p += stride) { + VALUE vp = (VALUE)p; + void *poisoned = asan_poisoned_object_p(vp); + asan_unpoison_object(vp, false); + switch (BUILTIN_TYPE(vp)) { case T_DATA: if (!DATA_PTR(p) || !RANY(p)->as.data.dfree) break; - if (rb_obj_is_thread((VALUE)p)) break; - if (rb_obj_is_mutex((VALUE)p)) break; - if (rb_obj_is_fiber((VALUE)p)) break; - p->as.free.flags = 0; - if (RTYPEDDATA_P(p)) { + if (rb_obj_is_thread(vp)) break; + if (rb_obj_is_mutex(vp)) break; + if (rb_obj_is_fiber(vp)) break; + if (rb_obj_is_main_ractor(vp)) break; + if (RTYPEDDATA_P(vp)) { RDATA(p)->dfree = RANY(p)->as.typeddata.type->function.dfree; } + RANY(p)->as.free.flags = 0; if (RANY(p)->as.data.dfree == RUBY_DEFAULT_FREE) { xfree(DATA_PTR(p)); } else if (RANY(p)->as.data.dfree) { - make_zombie(objspace, (VALUE)p, RANY(p)->as.data.dfree, RANY(p)->as.data.data); + make_zombie(objspace, vp, RANY(p)->as.data.dfree, RANY(p)->as.data.data); } break; case T_FILE: if (RANY(p)->as.file.fptr) { - make_io_zombie(objspace, (VALUE)p); + make_io_zombie(objspace, vp); } break; + default: + break; } if (poisoned) { - GC_ASSERT(BUILTIN_TYPE(p) == T_NONE); - asan_poison_object((VALUE)p); + GC_ASSERT(BUILTIN_TYPE(vp) == T_NONE); + asan_poison_object(vp); } - p++; } } - gc_exit(objspace, "rb_objspace_call_finalizer"); + gc_exit(objspace, gc_enter_event_finalizer, &lock_lev); if (heap_pages_deferred_final) { finalize_list(objspace, heap_pages_deferred_final); @@ -3528,39 +4203,18 @@ rb_objspace_call_finalizer(rb_objspace_t *objspace) ATOMIC_SET(finalizing, 0); } -PUREFUNC(static inline int is_id_value(rb_objspace_t *objspace, VALUE ptr)); -static inline int -is_id_value(rb_objspace_t *objspace, VALUE ptr) -{ - if (!is_pointer_to_heap(objspace, (void *)ptr)) return FALSE; - if (BUILTIN_TYPE(ptr) > T_FIXNUM) return FALSE; - if (BUILTIN_TYPE(ptr) == T_ICLASS) return FALSE; - return TRUE; -} - static inline int -heap_is_swept_object(rb_objspace_t *objspace, rb_heap_t *heap, VALUE ptr) +is_swept_object(rb_objspace_t *objspace, VALUE ptr) { struct heap_page *page = GET_HEAP_PAGE(ptr); return page->flags.before_sweep ? FALSE : TRUE; } -static inline int -is_swept_object(rb_objspace_t *objspace, VALUE ptr) -{ - if (heap_is_swept_object(objspace, heap_eden, ptr)) { - return TRUE; - } - else { - return FALSE; - } -} - /* garbage objects will be collected soon. */ static inline int is_garbage_object(rb_objspace_t *objspace, VALUE ptr) { - if (!is_lazy_sweeping(heap_eden) || + if (!is_lazy_sweeping(objspace) || is_swept_object(objspace, ptr) || MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(ptr), ptr)) { @@ -3576,8 +4230,11 @@ is_live_object(rb_objspace_t *objspace, VALUE ptr) { switch (BUILTIN_TYPE(ptr)) { case T_NONE: + case T_MOVED: case T_ZOMBIE: return FALSE; + default: + break; } if (!is_garbage_object(objspace, ptr)) { @@ -3633,6 +4290,8 @@ id2ref_obj_tbl(rb_objspace_t *objspace, VALUE objid) * r = ObjectSpace._id2ref(s.object_id) #=> "I am a string" * r == s #=> true * + * On multi-ractor mode, if the object is not shareable, it raises + * RangeError. */ static VALUE @@ -3648,11 +4307,12 @@ id2ref(VALUE objid) VALUE orig; void *p0; + objid = rb_to_int(objid); if (FIXNUM_P(objid) || rb_big_size(objid) <= SIZEOF_VOIDP) { ptr = NUM2PTR(objid); if (ptr == Qtrue) return Qtrue; if (ptr == Qfalse) return Qfalse; - if (ptr == Qnil) return Qnil; + if (NIL_P(ptr)) return Qnil; if (FIXNUM_P(ptr)) return (VALUE)ptr; if (FLONUM_P(ptr)) return (VALUE)ptr; @@ -3668,12 +4328,19 @@ id2ref(VALUE objid) if ((orig = id2ref_obj_tbl(objspace, objid)) != Qundef && is_live_object(objspace, orig)) { - return orig; + + if (!rb_multi_ractor_p() || rb_ractor_shareable_p(orig)) { + return orig; + } + else { + rb_raise(rb_eRangeError, "%+"PRIsVALUE" is id of the unshareable object on multi-ractor", rb_int2str(objid, 10)); + } } if (rb_int_ge(objid, objspace->next_object_id)) { rb_raise(rb_eRangeError, "%+"PRIsVALUE" is not id value", rb_int2str(objid, 10)); - } else { + } + else { rb_raise(rb_eRangeError, "%+"PRIsVALUE" is recycled object", rb_int2str(objid, 10)); } } @@ -3710,9 +4377,9 @@ cached_object_id(VALUE obj) VALUE id; rb_objspace_t *objspace = &rb_objspace; + RB_VM_LOCK_ENTER(); if (st_lookup(objspace->obj_to_id_tbl, (st_data_t)obj, &id)) { GC_ASSERT(FL_TEST(obj, FL_SEEN_OBJ_ID)); - return id; } else { GC_ASSERT(!FL_TEST(obj, FL_SEEN_OBJ_ID)); @@ -3720,12 +4387,15 @@ cached_object_id(VALUE obj) id = objspace->next_object_id; objspace->next_object_id = rb_int_plus(id, INT2FIX(OBJ_ID_INCREMENT)); + VALUE already_disabled = rb_gc_disable_no_rest(); st_insert(objspace->obj_to_id_tbl, (st_data_t)obj, (st_data_t)id); st_insert(objspace->id_to_obj_tbl, (st_data_t)id, (st_data_t)obj); + if (already_disabled == Qfalse) rb_objspace_gc_enable(objspace); FL_SET(obj, FL_SEEN_OBJ_ID); - - return id; } + RB_VM_LOCK_LEAVE(); + + return id; } static VALUE @@ -3803,7 +4473,23 @@ rb_obj_id(VALUE obj) return rb_find_object_id(obj, cached_object_id); } -#include "regint.h" +static enum rb_id_table_iterator_result +cc_table_memsize_i(VALUE ccs_ptr, void *data_ptr) +{ + size_t *total_size = data_ptr; + struct rb_class_cc_entries *ccs = (struct rb_class_cc_entries *)ccs_ptr; + *total_size += sizeof(*ccs); + *total_size += sizeof(ccs->entries[0]) * ccs->capa; + return ID_TABLE_CONTINUE; +} + +static size_t +cc_table_memsize(struct rb_id_table *cc_table) +{ + size_t total = rb_id_table_memsize(cc_table); + rb_id_table_foreach_values(cc_table, cc_table_memsize_i, &total); + return total; +} static size_t obj_memsize_of(VALUE obj, int use_all_types) @@ -3820,9 +4506,8 @@ obj_memsize_of(VALUE obj, int use_all_types) switch (BUILTIN_TYPE(obj)) { case T_OBJECT: - if (!(RBASIC(obj)->flags & ROBJECT_EMBED) && - ROBJECT(obj)->as.heap.ivptr) { - size += ROBJECT(obj)->as.heap.numiv * sizeof(VALUE); + if (!(RBASIC(obj)->flags & ROBJECT_EMBED)) { + size += ROBJECT_NUMIV(obj) * sizeof(VALUE); } break; case T_MODULE: @@ -3834,24 +4519,36 @@ obj_memsize_of(VALUE obj, int use_all_types) if (RCLASS_IV_TBL(obj)) { size += st_memsize(RCLASS_IV_TBL(obj)); } + if (RCLASS_CVC_TBL(obj)) { + size += rb_id_table_memsize(RCLASS_CVC_TBL(obj)); + } if (RCLASS_IV_INDEX_TBL(obj)) { + // TODO: more correct value size += st_memsize(RCLASS_IV_INDEX_TBL(obj)); } - if (RCLASS(obj)->ptr->iv_tbl) { - size += st_memsize(RCLASS(obj)->ptr->iv_tbl); + if (RCLASS_EXT(obj)->iv_tbl) { + size += st_memsize(RCLASS_EXT(obj)->iv_tbl); } - if (RCLASS(obj)->ptr->const_tbl) { - size += rb_id_table_memsize(RCLASS(obj)->ptr->const_tbl); + if (RCLASS_EXT(obj)->const_tbl) { + size += rb_id_table_memsize(RCLASS_EXT(obj)->const_tbl); } + if (RCLASS_CC_TBL(obj)) { + size += cc_table_memsize(RCLASS_CC_TBL(obj)); + } +#if !USE_RVARGC size += sizeof(rb_classext_t); +#endif } break; case T_ICLASS: - if (FL_TEST(obj, RICLASS_IS_ORIGIN)) { + if (RICLASS_OWNS_M_TBL_P(obj)) { if (RCLASS_M_TBL(obj)) { size += rb_id_table_memsize(RCLASS_M_TBL(obj)); } } + if (RCLASS_EXT(obj) && RCLASS_CC_TBL(obj)) { + size += cc_table_memsize(RCLASS_CC_TBL(obj)); + } break; case T_STRING: size += rb_str_memsize(obj); @@ -3862,7 +4559,7 @@ obj_memsize_of(VALUE obj, int use_all_types) case T_HASH: if (RHASH_AR_TABLE_P(obj)) { if (RHASH_AR_TABLE(obj) != NULL) { - size_t rb_hash_ar_table_size(); + size_t rb_hash_ar_table_size(void); size += rb_hash_ar_table_size(); } } @@ -3929,7 +4626,7 @@ obj_memsize_of(VALUE obj, int use_all_types) BUILTIN_TYPE(obj), (void*)obj); } - return size + sizeof(RVALUE); + return size + GET_HEAP_PAGE(obj)->slot_size; } size_t @@ -3980,7 +4677,7 @@ type_sym(size_t type) COUNT_TYPE(T_ZOMBIE); COUNT_TYPE(T_MOVED); #undef COUNT_TYPE - default: return INT2NUM(type); break; + default: return SIZET2NUM(type); break; } } @@ -4041,27 +4738,31 @@ count_objects(int argc, VALUE *argv, VALUE os) for (i = 0; i < heap_allocated_pages; i++) { struct heap_page *page = heap_pages_sorted[i]; - RVALUE *p, *pend; - - p = page->start; pend = p + page->total_slots; - for (;p < pend; p++) { - void *poisoned = asan_poisoned_object_p((VALUE)p); - asan_unpoison_object((VALUE)p, false); - if (p->as.basic.flags) { - counts[BUILTIN_TYPE(p)]++; + short stride = page->slot_size; + + uintptr_t p = (uintptr_t)page->start; + uintptr_t pend = p + page->total_slots * stride; + for (;p < pend; p += stride) { + VALUE vp = (VALUE)p; + GC_ASSERT((NUM_IN_PAGE(vp) * sizeof(RVALUE)) % page->slot_size == 0); + + void *poisoned = asan_poisoned_object_p(vp); + asan_unpoison_object(vp, false); + if (RANY(p)->as.basic.flags) { + counts[BUILTIN_TYPE(vp)]++; } else { freed++; } if (poisoned) { - GC_ASSERT(BUILTIN_TYPE((VALUE)p) == T_NONE); - asan_poison_object((VALUE)p); + GC_ASSERT(BUILTIN_TYPE(vp) == T_NONE); + asan_poison_object(vp); } } total += page->total_slots; } - if (hash == Qnil) { + if (NIL_P(hash)) { hash = rb_hash_new(); } else if (!RHASH_EMPTY_P(hash)) { @@ -4079,124 +4780,641 @@ count_objects(int argc, VALUE *argv, VALUE os) return hash; } -/* - ------------------------ Garbage Collection ------------------------ -*/ +/* + ------------------------ Garbage Collection ------------------------ +*/ + +/* Sweeping */ + +static size_t +objspace_available_slots(rb_objspace_t *objspace) +{ + size_t total_slots = 0; + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + total_slots += SIZE_POOL_EDEN_HEAP(size_pool)->total_slots; + total_slots += SIZE_POOL_TOMB_HEAP(size_pool)->total_slots; + } + return total_slots; +} + +static size_t +objspace_live_slots(rb_objspace_t *objspace) +{ + return (objspace->total_allocated_objects - objspace->profile.total_freed_objects) - heap_pages_final_slots; +} + +static size_t +objspace_free_slots(rb_objspace_t *objspace) +{ + return objspace_available_slots(objspace) - objspace_live_slots(objspace) - heap_pages_final_slots; +} + +static void +gc_setup_mark_bits(struct heap_page *page) +{ + /* copy oldgen bitmap to mark bitmap */ + memcpy(&page->mark_bits[0], &page->uncollectible_bits[0], HEAP_PAGE_BITMAP_SIZE); +} + +static int gc_is_moveable_obj(rb_objspace_t *objspace, VALUE obj); +static VALUE gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size); + +static void +lock_page_body(rb_objspace_t *objspace, struct heap_page_body *body) +{ +#if defined(_WIN32) + DWORD old_protect; + + if (!VirtualProtect(body, HEAP_PAGE_SIZE, PAGE_NOACCESS, &old_protect)) { +#else + if (mprotect(body, HEAP_PAGE_SIZE, PROT_NONE)) { +#endif + rb_bug("Couldn't protect page %p, errno: %s", (void *)body, strerror(errno)); + } + else { + gc_report(5, objspace, "Protecting page in move %p\n", (void *)body); + } +} + +static void +unlock_page_body(rb_objspace_t *objspace, struct heap_page_body *body) +{ +#if defined(_WIN32) + DWORD old_protect; + + if (!VirtualProtect(body, HEAP_PAGE_SIZE, PAGE_READWRITE, &old_protect)) { +#else + if (mprotect(body, HEAP_PAGE_SIZE, PROT_READ | PROT_WRITE)) { +#endif + rb_bug("Couldn't unprotect page %p, errno: %s", (void *)body, strerror(errno)); + } + else { + gc_report(5, objspace, "Unprotecting page in move %p\n", (void *)body); + } +} + +static inline bool +try_move_plane(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *page, uintptr_t p, bits_t bits, VALUE dest) +{ + if (bits) { + do { + if (bits & 1) { + /* We're trying to move "p" */ + objspace->rcompactor.considered_count_table[BUILTIN_TYPE((VALUE)p)]++; + + if (gc_is_moveable_obj(objspace, (VALUE)p)) { + /* We were able to move "p" */ + objspace->rcompactor.moved_count_table[BUILTIN_TYPE((VALUE)p)]++; + objspace->rcompactor.total_moved++; + + bool from_freelist = false; + + if (BUILTIN_TYPE(dest) == T_NONE) { + from_freelist = true; + } + + gc_move(objspace, (VALUE)p, dest, page->slot_size); + gc_pin(objspace, (VALUE)p); + heap->compact_cursor_index = (RVALUE *)p; + if (from_freelist) { + FL_SET((VALUE)p, FL_FROM_FREELIST); + } + + return true; + } + } + p += sizeof(RVALUE); + bits >>= 1; + } while (bits); + } + + return false; +} + +static short +try_move(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *sweep_page, VALUE dest) +{ + struct heap_page * cursor = heap->compact_cursor; + + GC_ASSERT(!MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(dest), dest)); + + /* T_NONE objects came from the free list. If the object is *not* a + * T_NONE, it is an object that just got freed but hasn't been + * added to the freelist yet */ + + while (1) { + size_t index; + + bits_t *mark_bits = cursor->mark_bits; + bits_t *pin_bits = cursor->pinned_bits; + RVALUE * p; + + if (heap->compact_cursor_index) { + index = BITMAP_INDEX(heap->compact_cursor_index); + p = heap->compact_cursor_index; + GC_ASSERT(cursor == GET_HEAP_PAGE(p)); + } + else { + index = 0; + p = cursor->start; + } + + bits_t bits = mark_bits[index] & ~pin_bits[index]; + + bits >>= NUM_IN_PAGE(p); + if (try_move_plane(objspace, heap, sweep_page, (uintptr_t)p, bits, dest)) return 1; + + if (index == 0) { + p = cursor->start + (BITS_BITLENGTH - NUM_IN_PAGE(cursor->start)); + } + else { + p = cursor->start + (BITS_BITLENGTH - NUM_IN_PAGE(cursor->start)) + (BITS_BITLENGTH * index); + } + + /* Find an object to move and move it. Movable objects must be + * marked, so we iterate using the marking bitmap */ + for (size_t i = index + 1; i < HEAP_PAGE_BITMAP_LIMIT; i++) { + bits_t bits = mark_bits[i] & ~pin_bits[i]; + if (try_move_plane(objspace, heap, sweep_page, (uintptr_t)p, bits, dest)) return 1; + p += BITS_BITLENGTH; + } + + /* We couldn't find a movable object on the compact cursor, so lets + * move to the next page (previous page since we are traveling in the + * opposite direction of the sweep cursor) and look there. */ + + struct heap_page * next; + + next = list_prev(&heap->pages, cursor, page_node); + + /* Protect the current cursor since it probably has T_MOVED slots. */ + lock_page_body(objspace, GET_PAGE_BODY(cursor->start)); + + heap->compact_cursor = next; + heap->compact_cursor_index = 0; + cursor = next; + + // Cursors have met, lets quit. We set `heap->compact_cursor` equal + // to `heap->sweeping_page` so we know how far to iterate through + // the heap when unprotecting pages. + if (next == sweep_page) { + break; + } + } + + return 0; +} + +static void +gc_unprotect_pages(rb_objspace_t *objspace, rb_heap_t *heap) +{ + struct heap_page *cursor = heap->compact_cursor; + + while (cursor) { + unlock_page_body(objspace, GET_PAGE_BODY(cursor->start)); + cursor = list_next(&heap->pages, cursor, page_node); + } +} + +static void gc_update_references(rb_objspace_t * objspace); +static void invalidate_moved_page(rb_objspace_t *objspace, struct heap_page *page); + +static void +read_barrier_handler(uintptr_t address) +{ + VALUE obj; + rb_objspace_t * objspace = &rb_objspace; + + address -= address % sizeof(RVALUE); + + obj = (VALUE)address; + + RB_VM_LOCK_ENTER(); + { + unlock_page_body(objspace, GET_PAGE_BODY(obj)); + + objspace->profile.read_barrier_faults++; + + invalidate_moved_page(objspace, GET_HEAP_PAGE(obj)); + } + RB_VM_LOCK_LEAVE(); +} + +#if defined(_WIN32) +static LPTOP_LEVEL_EXCEPTION_FILTER old_handler; +typedef void (*signal_handler)(int); +static signal_handler old_sigsegv_handler; + +static LONG WINAPI +read_barrier_signal(EXCEPTION_POINTERS * info) +{ + /* EXCEPTION_ACCESS_VIOLATION is what's raised by access to protected pages */ + if (info->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION) { + /* > The second array element specifies the virtual address of the inaccessible data. + * https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-exception_record + * + * Use this address to invalidate the page */ + read_barrier_handler((uintptr_t)info->ExceptionRecord->ExceptionInformation[1]); + return EXCEPTION_CONTINUE_EXECUTION; + } + else { + return EXCEPTION_CONTINUE_SEARCH; + } +} + +static void +uninstall_handlers(void) +{ + signal(SIGSEGV, old_sigsegv_handler); + SetUnhandledExceptionFilter(old_handler); +} + +static void +install_handlers(void) +{ + /* Remove SEGV handler so that the Unhandled Exception Filter handles it */ + old_sigsegv_handler = signal(SIGSEGV, NULL); + /* Unhandled Exception Filter has access to the violation address similar + * to si_addr from sigaction */ + old_handler = SetUnhandledExceptionFilter(read_barrier_signal); +} +#else +static struct sigaction old_sigbus_handler; +static struct sigaction old_sigsegv_handler; + +static void +read_barrier_signal(int sig, siginfo_t * info, void * data) +{ + // setup SEGV/BUS handlers for errors + struct sigaction prev_sigbus, prev_sigsegv; + sigaction(SIGBUS, &old_sigbus_handler, &prev_sigbus); + sigaction(SIGSEGV, &old_sigsegv_handler, &prev_sigsegv); + + // enable SIGBUS/SEGV + sigset_t set, prev_set; + sigemptyset(&set); + sigaddset(&set, SIGBUS); + sigaddset(&set, SIGSEGV); + sigprocmask(SIG_UNBLOCK, &set, &prev_set); + + // run handler + read_barrier_handler((uintptr_t)info->si_addr); + + // reset SEGV/BUS handlers + sigaction(SIGBUS, &prev_sigbus, NULL); + sigaction(SIGSEGV, &prev_sigsegv, NULL); + sigprocmask(SIG_SETMASK, &prev_set, NULL); +} + +static void +uninstall_handlers(void) +{ + sigaction(SIGBUS, &old_sigbus_handler, NULL); + sigaction(SIGSEGV, &old_sigsegv_handler, NULL); +} + +static void +install_handlers(void) +{ + struct sigaction action; + memset(&action, 0, sizeof(struct sigaction)); + sigemptyset(&action.sa_mask); + action.sa_sigaction = read_barrier_signal; + action.sa_flags = SA_SIGINFO | SA_ONSTACK; + + sigaction(SIGBUS, &action, &old_sigbus_handler); + sigaction(SIGSEGV, &action, &old_sigsegv_handler); +} +#endif + +static void +revert_stack_objects(VALUE stack_obj, void *ctx) +{ + rb_objspace_t * objspace = (rb_objspace_t*)ctx; + + if (BUILTIN_TYPE(stack_obj) == T_MOVED) { + /* For now we'll revert the whole page if the object made it to the + * stack. I think we can change this to move just the one object + * back though */ + invalidate_moved_page(objspace, GET_HEAP_PAGE(stack_obj)); + } +} + +static void +revert_machine_stack_references(rb_objspace_t *objspace, VALUE v) +{ + if (is_pointer_to_heap(objspace, (void *)v)) { + if (BUILTIN_TYPE(v) == T_MOVED) { + /* For now we'll revert the whole page if the object made it to the + * stack. I think we can change this to move just the one object + * back though */ + invalidate_moved_page(objspace, GET_HEAP_PAGE(v)); + } + } +} + +static void each_machine_stack_value(const rb_execution_context_t *ec, void (*cb)(rb_objspace_t *, VALUE)); + +static void +check_stack_for_moved(rb_objspace_t *objspace) +{ + rb_execution_context_t *ec = GET_EC(); + rb_vm_t *vm = rb_ec_vm_ptr(ec); + rb_vm_each_stack_value(vm, revert_stack_objects, (void*)objspace); + each_machine_stack_value(ec, revert_machine_stack_references); +} + +static void +gc_compact_finish(rb_objspace_t *objspace, rb_size_pool_t *pool, rb_heap_t *heap) +{ + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + gc_unprotect_pages(objspace, heap); + } + + uninstall_handlers(); + + /* The mutator is allowed to run during incremental sweeping. T_MOVED + * objects can get pushed on the stack and when the compaction process + * finishes up, it may remove the read barrier before anything has a + * chance to read from the T_MOVED address. To fix this, we scan the stack + * then revert any moved objects that made it to the stack. */ + check_stack_for_moved(objspace); + + gc_update_references(objspace); + objspace->profile.compact_count++; + + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + heap->compact_cursor = NULL; + heap->compact_cursor_index = 0; + } + + if (gc_prof_enabled(objspace)) { + gc_profile_record *record = gc_prof_record(objspace); + record->moved_objects = objspace->rcompactor.total_moved - record->moved_objects; + } + objspace->flags.during_compacting = FALSE; +} + +struct gc_sweep_context { + struct heap_page *page; + int final_slots; + int freed_slots; + int empty_slots; +}; + +static inline void +gc_fill_swept_plane(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bitset, bool *finished_compacting, struct gc_sweep_context *ctx) +{ + struct heap_page * sweep_page = ctx->page; + + if (bitset) { + short slot_size = sweep_page->slot_size; + short slot_bits = slot_size / sizeof(RVALUE); + + do { + if (bitset & 1) { + VALUE dest = (VALUE)p; + + GC_ASSERT(MARKED_IN_BITMAP(GET_HEAP_PINNED_BITS(dest), dest)); + GC_ASSERT(!MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(dest), dest)); + + CLEAR_IN_BITMAP(GET_HEAP_PINNED_BITS(dest), dest); + + if (*finished_compacting) { + if (BUILTIN_TYPE(dest) == T_NONE) { + ctx->empty_slots++; + } + else { + ctx->freed_slots++; + } + (void)VALGRIND_MAKE_MEM_UNDEFINED((void*)dest, sizeof(RVALUE)); + heap_page_add_freeobj(objspace, sweep_page, dest); + } + else { + /* Zombie slots don't get marked, but we can't reuse + * their memory until they have their finalizers run.*/ + if (BUILTIN_TYPE(dest) != T_ZOMBIE) { + if (!try_move(objspace, heap, sweep_page, dest)) { + *finished_compacting = true; + (void)VALGRIND_MAKE_MEM_UNDEFINED((void*)p, sizeof(RVALUE)); + gc_report(5, objspace, "Quit compacting, couldn't find an object to move\n"); + if (BUILTIN_TYPE(dest) == T_NONE) { + ctx->empty_slots++; + } + else { + ctx->freed_slots++; + } + heap_page_add_freeobj(objspace, sweep_page, dest); + gc_report(3, objspace, "page_sweep: %s is added to freelist\n", obj_info(dest)); + } + else { + //moved_slots++; + } + } + } + } + p += slot_size; + bitset >>= slot_bits; + } while (bitset); + } +} + +static bool +gc_fill_swept_page(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *sweep_page, struct gc_sweep_context *ctx) +{ + /* Find any pinned but not marked objects and try to fill those slots */ + bool finished_compacting = false; + bits_t *mark_bits, *pin_bits; + bits_t bitset; + uintptr_t p; + + mark_bits = sweep_page->mark_bits; + pin_bits = sweep_page->pinned_bits; + + p = (uintptr_t)sweep_page->start; + + struct heap_page * cursor = heap->compact_cursor; + + unlock_page_body(objspace, GET_PAGE_BODY(cursor->start)); + + /* *Want to move* objects are pinned but not marked. */ + bitset = pin_bits[0] & ~mark_bits[0]; + bitset >>= NUM_IN_PAGE(p); // Skip header / dead space bits + gc_fill_swept_plane(objspace, heap, (uintptr_t)p, bitset, &finished_compacting, ctx); + p += ((BITS_BITLENGTH - NUM_IN_PAGE(p)) * sizeof(RVALUE)); + + for (int i = 1; i < HEAP_PAGE_BITMAP_LIMIT; i++) { + /* *Want to move* objects are pinned but not marked. */ + bitset = pin_bits[i] & ~mark_bits[i]; + gc_fill_swept_plane(objspace, heap, (uintptr_t)p, bitset, &finished_compacting, ctx); + p += ((BITS_BITLENGTH) * sizeof(RVALUE)); + } -/* Sweeping */ + lock_page_body(objspace, GET_PAGE_BODY(heap->compact_cursor->start)); -static size_t -objspace_available_slots(rb_objspace_t *objspace) -{ - return heap_eden->total_slots + heap_tomb->total_slots; + return finished_compacting; } -static size_t -objspace_live_slots(rb_objspace_t *objspace) +static inline void +gc_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bitset, struct gc_sweep_context *ctx) { - return (objspace->total_allocated_objects - objspace->profile.total_freed_objects) - heap_pages_final_slots; -} + struct heap_page * sweep_page = ctx->page; + short slot_size = sweep_page->slot_size; + short slot_bits = slot_size / sizeof(RVALUE); + GC_ASSERT(slot_bits > 0); -static size_t -objspace_free_slots(rb_objspace_t *objspace) -{ - return objspace_available_slots(objspace) - objspace_live_slots(objspace) - heap_pages_final_slots; + do { + VALUE vp = (VALUE)p; + GC_ASSERT(vp % sizeof(RVALUE) == 0); + + asan_unpoison_object(vp, false); + if (bitset & 1) { + switch (BUILTIN_TYPE(vp)) { + default: /* majority case */ + gc_report(2, objspace, "page_sweep: free %p\n", (void *)p); +#if RGENGC_CHECK_MODE + if (!is_full_marking(objspace)) { + if (RVALUE_OLD_P(vp)) rb_bug("page_sweep: %p - old while minor GC.", (void *)p); + if (rgengc_remembered_sweep(objspace, vp)) rb_bug("page_sweep: %p - remembered.", (void *)p); + } +#endif + if (obj_free(objspace, vp)) { + if (heap->compact_cursor) { + /* We *want* to fill this slot */ + MARK_IN_BITMAP(GET_HEAP_PINNED_BITS(vp), vp); + } + else { + (void)VALGRIND_MAKE_MEM_UNDEFINED((void*)p, sizeof(RVALUE)); + heap_page_add_freeobj(objspace, sweep_page, vp); + gc_report(3, objspace, "page_sweep: %s is added to freelist\n", obj_info(vp)); + ctx->freed_slots++; + } + } + else { + ctx->final_slots++; + } + break; + + case T_MOVED: + if (objspace->flags.during_compacting) { + /* The sweep cursor shouldn't have made it to any + * T_MOVED slots while the compact flag is enabled. + * The sweep cursor and compact cursor move in + * opposite directions, and when they meet references will + * get updated and "during_compacting" should get disabled */ + rb_bug("T_MOVED shouldn't be seen until compaction is finished\n"); + } + gc_report(3, objspace, "page_sweep: %s is added to freelist\n", obj_info(vp)); + if (FL_TEST(vp, FL_FROM_FREELIST)) { + ctx->empty_slots++; + } + else { + ctx->freed_slots++; + } + heap_page_add_freeobj(objspace, sweep_page, vp); + break; + case T_ZOMBIE: + /* already counted */ + break; + case T_NONE: + if (heap->compact_cursor) { + /* We *want* to fill this slot */ + MARK_IN_BITMAP(GET_HEAP_PINNED_BITS(vp), vp); + } + else { + ctx->empty_slots++; /* already freed */ + } + break; + } + } + p += slot_size; + bitset >>= slot_bits; + } while (bitset); } -static void -gc_setup_mark_bits(struct heap_page *page) +static inline void +gc_sweep_page(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap, struct gc_sweep_context *ctx) { -#if USE_RGENGC - /* copy oldgen bitmap to mark bitmap */ - memcpy(&page->mark_bits[0], &page->uncollectible_bits[0], HEAP_PAGE_BITMAP_SIZE); -#else - /* clear mark bitmap */ - memset(&page->mark_bits[0], 0, HEAP_PAGE_BITMAP_SIZE); -#endif -} + struct heap_page *sweep_page = ctx->page; -static inline int -gc_page_sweep(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *sweep_page) -{ int i; - int empty_slots = 0, freed_slots = 0, final_slots = 0; - RVALUE *p, *pend,*offset; + + RVALUE *p; bits_t *bits, bitset; gc_report(2, objspace, "page_sweep: start.\n"); + if (heap->compact_cursor) { + if (sweep_page == heap->compact_cursor) { + /* The compaction cursor and sweep page met, so we need to quit compacting */ + gc_report(5, objspace, "Quit compacting, mark and compact cursor met\n"); + gc_compact_finish(objspace, size_pool, heap); + } + else { + /* We anticipate filling the page, so NULL out the freelist. */ + asan_unpoison_memory_region(&sweep_page->freelist, sizeof(RVALUE*), false); + sweep_page->freelist = NULL; + asan_poison_memory_region(&sweep_page->freelist, sizeof(RVALUE*)); + } + } + sweep_page->flags.before_sweep = FALSE; + sweep_page->free_slots = 0; - p = sweep_page->start; pend = p + sweep_page->total_slots; - offset = p - NUM_IN_PAGE(p); + p = sweep_page->start; bits = sweep_page->mark_bits; - /* create guard : fill 1 out-of-range */ - bits[BITMAP_INDEX(p)] |= BITMAP_BIT(p)-1; - bits[BITMAP_INDEX(pend)] |= ~(BITMAP_BIT(pend) - 1); + int page_rvalue_count = sweep_page->total_slots * (size_pool->slot_size / sizeof(RVALUE)); + int out_of_range_bits = (NUM_IN_PAGE(p) + page_rvalue_count) % BITS_BITLENGTH; + if (out_of_range_bits != 0) { // sizeof(RVALUE) == 64 + bits[BITMAP_INDEX(p) + page_rvalue_count / BITS_BITLENGTH] |= ~(((bits_t)1 << out_of_range_bits) - 1); + } - for (i=0; i < HEAP_PAGE_BITMAP_LIMIT; i++) { - bitset = ~bits[i]; - if (bitset) { - p = offset + i * BITS_BITLENGTH; - do { - asan_unpoison_object((VALUE)p, false); - if (bitset & 1) { - switch (BUILTIN_TYPE(p)) { - default: { /* majority case */ - gc_report(2, objspace, "page_sweep: free %p\n", (void *)p); -#if USE_RGENGC && RGENGC_CHECK_MODE - if (!is_full_marking(objspace)) { - if (RVALUE_OLD_P((VALUE)p)) rb_bug("page_sweep: %p - old while minor GC.", (void *)p); - if (rgengc_remembered_sweep(objspace, (VALUE)p)) rb_bug("page_sweep: %p - remembered.", (void *)p); - } -#endif - if (obj_free(objspace, (VALUE)p)) { - final_slots++; - } - else { - (void)VALGRIND_MAKE_MEM_UNDEFINED((void*)p, sizeof(RVALUE)); - heap_page_add_freeobj(objspace, sweep_page, (VALUE)p); - gc_report(3, objspace, "page_sweep: %s is added to freelist\n", obj_info((VALUE)p)); - freed_slots++; - asan_poison_object((VALUE)p); - } - break; - } - - /* minor cases */ - case T_ZOMBIE: - /* already counted */ - break; - case T_NONE: - empty_slots++; /* already freed */ - break; - } - } - p++; - bitset >>= 1; - } while (bitset); - } + // Skip out of range slots at the head of the page + bitset = ~bits[0]; + bitset >>= NUM_IN_PAGE(p); + if (bitset) { + gc_sweep_plane(objspace, heap, (uintptr_t)p, bitset, ctx); + } + p += (BITS_BITLENGTH - NUM_IN_PAGE(p)); + + for (i=1; i < HEAP_PAGE_BITMAP_LIMIT; i++) { + bitset = ~bits[i]; + if (bitset) { + gc_sweep_plane(objspace, heap, (uintptr_t)p, bitset, ctx); + } + p += BITS_BITLENGTH; + } + + if (heap->compact_cursor) { + if (gc_fill_swept_page(objspace, heap, sweep_page, ctx)) { + gc_compact_finish(objspace, size_pool, heap); + } } - gc_setup_mark_bits(sweep_page); + if (!heap->compact_cursor) { + gc_setup_mark_bits(sweep_page); + } #if GC_PROFILE_MORE_DETAIL if (gc_prof_enabled(objspace)) { gc_profile_record *record = gc_prof_record(objspace); - record->removing_objects += final_slots + freed_slots; - record->empty_objects += empty_slots; + record->removing_objects += ctx->final_slots + ctx->freed_slots; + record->empty_objects += ctx->empty_slots; } #endif - if (0) fprintf(stderr, "gc_page_sweep(%d): total_slots: %d, freed_slots: %d, empty_slots: %d, final_slots: %d\n", - (int)rb_gc_count(), - (int)sweep_page->total_slots, - freed_slots, empty_slots, final_slots); + if (0) fprintf(stderr, "gc_sweep_page(%"PRIdSIZE"): total_slots: %d, freed_slots: %d, empty_slots: %d, final_slots: %d\n", + rb_gc_count(), + sweep_page->total_slots, + ctx->freed_slots, ctx->empty_slots, ctx->final_slots); - sweep_page->free_slots = freed_slots + empty_slots; - objspace->profile.total_freed_objects += freed_slots; - heap_pages_final_slots += final_slots; - sweep_page->final_slots += final_slots; + sweep_page->free_slots += ctx->freed_slots + ctx->empty_slots; + objspace->profile.total_freed_objects += ctx->freed_slots; if (heap_pages_deferred_final && !finalizing) { rb_thread_t *th = GET_THREAD(); @@ -4205,23 +5423,37 @@ gc_page_sweep(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *sweep_ } } - gc_report(2, objspace, "page_sweep: end.\n"); +#if RGENGC_CHECK_MODE + short freelist_len = 0; + RVALUE *ptr = sweep_page->freelist; + while (ptr) { + freelist_len++; + ptr = ptr->as.free.next; + } + if (freelist_len != sweep_page->free_slots) { + rb_bug("inconsistent freelist length: expected %d but was %d", sweep_page->free_slots, freelist_len); + } +#endif - return freed_slots + empty_slots; + gc_report(2, objspace, "page_sweep: end.\n"); } +#if !USE_RVARGC /* allocate additional minimum page to work */ static void -gc_heap_prepare_minimum_pages(rb_objspace_t *objspace, rb_heap_t *heap) +gc_heap_prepare_minimum_pages(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) { - if (!heap->free_pages && heap_increment(objspace, heap) == FALSE) { - /* there is no free after page_sweep() */ - heap_set_increment(objspace, 1); - if (!heap_increment(objspace, heap)) { /* can't allocate additional free objects */ - rb_memerror(); - } + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + if (!heap->free_pages && heap_increment(objspace, size_pool, heap) == FALSE) { + /* there is no free after page_sweep() */ + size_pool_allocatable_pages_set(objspace, size_pool, 1); + if (!heap_increment(objspace, size_pool, heap)) { /* can't allocate additional free objects */ + rb_memerror(); + } + } } } +#endif static const char * gc_mode_name(enum gc_mode mode) @@ -4249,6 +5481,30 @@ gc_mode_transition(rb_objspace_t *objspace, enum gc_mode mode) gc_mode_set(objspace, mode); } +static void +heap_page_freelist_append(struct heap_page *page, RVALUE *freelist) +{ + if (freelist) { + asan_unpoison_memory_region(&page->freelist, sizeof(RVALUE*), false); + if (page->freelist) { + RVALUE *p = page->freelist; + asan_unpoison_object((VALUE)p, false); + while (p->as.free.next) { + RVALUE *prev = p; + p = p->as.free.next; + asan_poison_object((VALUE)prev); + asan_unpoison_object((VALUE)p, false); + } + p->as.free.next = freelist; + asan_poison_object((VALUE)p); + } + else { + page->freelist = freelist; + } + asan_poison_memory_region(&page->freelist, sizeof(RVALUE*)); + } +} + static void gc_sweep_start_heap(rb_objspace_t *objspace, rb_heap_t *heap) { @@ -4256,21 +5512,7 @@ gc_sweep_start_heap(rb_objspace_t *objspace, rb_heap_t *heap) heap->free_pages = NULL; #if GC_ENABLE_INCREMENTAL_MARK heap->pooled_pages = NULL; - objspace->rincgc.pooled_slots = 0; #endif - if (heap->using_page) { - struct heap_page *page = heap->using_page; - asan_unpoison_memory_region(&page->freelist, sizeof(RVALUE*), false); - - RVALUE **p = &page->freelist; - while (*p) { - p = &(*p)->as.free.next; - } - *p = heap->freelist; - asan_poison_memory_region(&page->freelist, sizeof(RVALUE*)); - heap->using_page = NULL; - } - heap->freelist = NULL; } #if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ == 4 @@ -4280,8 +5522,63 @@ static void gc_sweep_start(rb_objspace_t *objspace) { gc_mode_transition(objspace, gc_mode_sweeping); - gc_sweep_start_heap(objspace, heap_eden); + +#if GC_ENABLE_INCREMENTAL_MARK + objspace->rincgc.pooled_slots = 0; +#endif + + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + + gc_sweep_start_heap(objspace, SIZE_POOL_EDEN_HEAP(size_pool)); + } + + rb_ractor_t *r = NULL; + list_for_each(&GET_VM()->ractor.set, r, vmlr_node) { + rb_gc_ractor_newobj_cache_clear(&r->newobj_cache); + } +} + +#if USE_RVARGC +static void +gc_sweep_finish_size_pool(rb_objspace_t *objspace, rb_size_pool_t *size_pool) +{ + rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + size_t total_slots = heap->total_slots + SIZE_POOL_TOMB_HEAP(size_pool)->total_slots; + size_t total_pages = heap->total_pages + SIZE_POOL_TOMB_HEAP(size_pool)->total_pages; + size_t swept_slots = size_pool->freed_slots + size_pool->empty_slots; + + size_t min_free_slots = (size_t)(total_slots * gc_params.heap_free_slots_min_ratio); + + if (swept_slots < min_free_slots) { + bool grow_heap = is_full_marking(objspace); + + if (!is_full_marking(objspace)) { + /* The heap is a growth heap if it freed more slots than had empty slots. */ + bool is_growth_heap = size_pool->empty_slots == 0 || + size_pool->freed_slots > size_pool->empty_slots; + + if (objspace->profile.count - objspace->rgengc.last_major_gc < RVALUE_OLD_AGE) { + grow_heap = TRUE; + } + else if (is_growth_heap) { /* Only growth heaps are allowed to start a major GC. */ + objspace->rgengc.need_major_gc |= GPR_FLAG_MAJOR_BY_NOFREE; + size_pool->force_major_gc_count++; + } + } + + if (grow_heap) { + size_t extend_page_count = heap_extend_pages(objspace, swept_slots, total_slots, total_pages); + + if (extend_page_count > size_pool->allocatable_pages) { + size_pool_allocatable_pages_set(objspace, size_pool, extend_page_count); + } + + heap_increment(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool)); + } + } } +#endif static void gc_sweep_finish(rb_objspace_t *objspace) @@ -4291,10 +5588,37 @@ gc_sweep_finish(rb_objspace_t *objspace) gc_prof_set_heap_info(objspace); heap_pages_free_unused_pages(objspace); - /* if heap_pages has unused pages, then assign them to increment */ - if (heap_allocatable_pages < heap_tomb->total_pages) { - heap_allocatable_pages_set(objspace, heap_tomb->total_pages); + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + + /* if heap_pages has unused pages, then assign them to increment */ + size_t tomb_pages = SIZE_POOL_TOMB_HEAP(size_pool)->total_pages; + if (size_pool->allocatable_pages < tomb_pages) { + size_pool->allocatable_pages = tomb_pages; + } + +#if USE_RVARGC + size_pool->freed_slots = 0; + size_pool->empty_slots = 0; + +#if GC_ENABLE_INCREMENTAL_MARK + if (!will_be_incremental_marking(objspace)) { + rb_heap_t *eden_heap = SIZE_POOL_EDEN_HEAP(size_pool); + struct heap_page *end_page = eden_heap->free_pages; + if (end_page) { + while (end_page->free_next) end_page = end_page->free_next; + end_page->free_next = eden_heap->pooled_pages; + } + else { + eden_heap->free_pages = eden_heap->pooled_pages; + } + eden_heap->pooled_pages = NULL; + objspace->rincgc.pooled_slots = 0; + } +#endif +#endif } + heap_pages_expand_sorted(objspace); gc_event_hook(objspace, RUBY_INTERNAL_EVENT_GC_END_SWEEP, 0); gc_mode_transition(objspace, gc_mode_none); @@ -4305,12 +5629,18 @@ gc_sweep_finish(rb_objspace_t *objspace) } static int -gc_sweep_step(rb_objspace_t *objspace, rb_heap_t *heap) +gc_sweep_step(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) { struct heap_page *sweep_page = heap->sweeping_page; int unlink_limit = 3; + #if GC_ENABLE_INCREMENTAL_MARK + int swept_slots = 0; +#if USE_RVARGC + bool need_pool = TRUE; +#else int need_pool = will_be_incremental_marking(objspace) ? TRUE : FALSE; +#endif gc_report(2, objspace, "gc_sweep_step (need_pool: %d)\n", need_pool); #else @@ -4324,8 +5654,18 @@ gc_sweep_step(rb_objspace_t *objspace, rb_heap_t *heap) #endif do { - int free_slots = gc_page_sweep(objspace, heap, sweep_page); - heap->sweeping_page = list_next(&heap->pages, sweep_page, page_node); + RUBY_DEBUG_LOG("sweep_page:%p", (void *)sweep_page); + + struct gc_sweep_context ctx = { + .page = sweep_page, + .final_slots = 0, + .freed_slots = 0, + .empty_slots = 0, + }; + gc_sweep_page(objspace, size_pool, heap, &ctx); + int free_slots = ctx.freed_slots + ctx.empty_slots; + + heap->sweeping_page = list_next(&heap->pages, sweep_page, page_node); if (sweep_page->final_slots + free_slots == sweep_page->total_slots && heap_pages_freeable_pages > 0 && @@ -4334,22 +5674,29 @@ gc_sweep_step(rb_objspace_t *objspace, rb_heap_t *heap) unlink_limit--; /* there are no living objects -> move this page to tomb heap */ heap_unlink_page(objspace, heap, sweep_page); - heap_add_page(objspace, heap_tomb, sweep_page); + heap_add_page(objspace, size_pool, SIZE_POOL_TOMB_HEAP(size_pool), sweep_page); } else if (free_slots > 0) { +#if USE_RVARGC + size_pool->freed_slots += ctx.freed_slots; + size_pool->empty_slots += ctx.empty_slots; +#endif + #if GC_ENABLE_INCREMENTAL_MARK if (need_pool) { - if (heap_add_poolpage(objspace, heap, sweep_page)) { - need_pool = FALSE; - } + heap_add_poolpage(objspace, heap, sweep_page); + need_pool = FALSE; } else { - heap_add_freepage(heap, sweep_page); - break; + heap_add_freepage(heap, sweep_page); + swept_slots += free_slots; + if (swept_slots > 2048) { + break; + } } #else - heap_add_freepage(heap, sweep_page); - break; + heap_add_freepage(heap, sweep_page); + break; #endif } else { @@ -4358,7 +5705,13 @@ gc_sweep_step(rb_objspace_t *objspace, rb_heap_t *heap) } while ((sweep_page = heap->sweeping_page)); if (!heap->sweeping_page) { - gc_sweep_finish(objspace); +#if USE_RVARGC + gc_sweep_finish_size_pool(objspace, size_pool); +#endif + + if (!has_sweeping_pages(objspace)) { + gc_sweep_finish(objspace); + } } #if GC_ENABLE_LAZY_SWEEP @@ -4371,27 +5724,139 @@ gc_sweep_step(rb_objspace_t *objspace, rb_heap_t *heap) static void gc_sweep_rest(rb_objspace_t *objspace) { - rb_heap_t *heap = heap_eden; /* lazy sweep only for eden */ + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; - while (has_sweeping_pages(heap)) { - gc_sweep_step(objspace, heap); + while (SIZE_POOL_EDEN_HEAP(size_pool)->sweeping_page) { + gc_sweep_step(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool)); + } } } static void -gc_sweep_continue(rb_objspace_t *objspace, rb_heap_t *heap) +gc_sweep_continue(rb_objspace_t *objspace, rb_size_pool_t *sweep_size_pool, rb_heap_t *heap) { - GC_ASSERT(dont_gc == FALSE); + GC_ASSERT(dont_gc_val() == FALSE); if (!GC_ENABLE_LAZY_SWEEP) return; - gc_enter(objspace, "sweep_continue"); -#if USE_RGENGC - if (objspace->rgengc.need_major_gc == GPR_FLAG_NONE && heap_increment(objspace, heap)) { - gc_report(3, objspace, "gc_sweep_continue: success heap_increment().\n"); - } + unsigned int lock_lev; + gc_enter(objspace, gc_enter_event_sweep_continue, &lock_lev); + + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + if (!gc_sweep_step(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool))) { +#if USE_RVARGC + /* sweep_size_pool requires a free slot but sweeping did not yield any. */ + if (size_pool == sweep_size_pool) { + if (size_pool->allocatable_pages > 0) { + heap_increment(objspace, size_pool, heap); + } + else { + /* Not allowed to create a new page so finish sweeping. */ + gc_sweep_rest(objspace); + break; + } + } #endif - gc_sweep_step(objspace, heap); - gc_exit(objspace, "sweep_continue"); + } + } + + gc_exit(objspace, gc_enter_event_sweep_continue, &lock_lev); +} + +static void +invalidate_moved_plane(rb_objspace_t *objspace, struct heap_page *page, uintptr_t p, bits_t bitset) +{ + if (bitset) { + do { + if (bitset & 1) { + VALUE forwarding_object = (VALUE)p; + VALUE object; + + if (BUILTIN_TYPE(forwarding_object) == T_MOVED) { + GC_ASSERT(MARKED_IN_BITMAP(GET_HEAP_PINNED_BITS(forwarding_object), forwarding_object)); + GC_ASSERT(!MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(forwarding_object), forwarding_object)); + + CLEAR_IN_BITMAP(GET_HEAP_PINNED_BITS(forwarding_object), forwarding_object); + + bool from_freelist = FL_TEST_RAW(forwarding_object, FL_FROM_FREELIST); + object = rb_gc_location(forwarding_object); + + gc_move(objspace, object, forwarding_object, page->slot_size); + /* forwarding_object is now our actual object, and "object" + * is the free slot for the original page */ + struct heap_page *orig_page = GET_HEAP_PAGE(object); + orig_page->free_slots++; + if (!from_freelist) { + objspace->profile.total_freed_objects++; + } + heap_page_add_freeobj(objspace, orig_page, object); + + GC_ASSERT(MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(forwarding_object), forwarding_object)); + GC_ASSERT(BUILTIN_TYPE(forwarding_object) != T_MOVED); + GC_ASSERT(BUILTIN_TYPE(forwarding_object) != T_NONE); + } + } + p += sizeof(RVALUE); + bitset >>= 1; + } while (bitset); + } +} + +static void +invalidate_moved_page(rb_objspace_t *objspace, struct heap_page *page) +{ + int i; + bits_t *mark_bits, *pin_bits; + bits_t bitset; + RVALUE *p; + + mark_bits = page->mark_bits; + pin_bits = page->pinned_bits; + + p = page->start; + + // Skip out of range slots at the head of the page + bitset = pin_bits[0] & ~mark_bits[0]; + bitset >>= NUM_IN_PAGE(p); + invalidate_moved_plane(objspace, page, (uintptr_t)p, bitset); + p += (BITS_BITLENGTH - NUM_IN_PAGE(p)); + + for (i=1; i < HEAP_PAGE_BITMAP_LIMIT; i++) { + /* Moved objects are pinned but never marked. We reuse the pin bits + * to indicate there is a moved object in this slot. */ + bitset = pin_bits[i] & ~mark_bits[i]; + + invalidate_moved_plane(objspace, page, (uintptr_t)p, bitset); + p += BITS_BITLENGTH; + } +} + +static void +gc_compact_start(rb_objspace_t *objspace) +{ + struct heap_page *page = NULL; + + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(&size_pools[i]); + list_for_each(&heap->pages, page, page_node) { + page->flags.before_sweep = TRUE; + } + + heap->compact_cursor = list_tail(&heap->pages, struct heap_page, page_node); + heap->compact_cursor_index = 0; + } + + if (gc_prof_enabled(objspace)) { + gc_profile_record *record = gc_prof_record(objspace); + record->moved_objects = objspace->rcompactor.total_moved; + } + + memset(objspace->rcompactor.considered_count_table, 0, T_MASK * sizeof(size_t)); + memset(objspace->rcompactor.moved_count_table, 0, T_MASK * sizeof(size_t)); + + /* Set up read barrier for pages containing MOVED objects */ + install_handlers(); } static void @@ -4406,6 +5871,10 @@ gc_sweep(rb_objspace_t *objspace) gc_prof_sweep_timer_start(objspace); #endif gc_sweep_start(objspace); + if (objspace->flags.during_compacting) { + gc_compact_start(objspace); + } + gc_sweep_rest(objspace); #if !GC_ENABLE_LAZY_SWEEP gc_prof_sweep_timer_stop(objspace); @@ -4415,13 +5884,27 @@ gc_sweep(rb_objspace_t *objspace) struct heap_page *page = NULL; gc_sweep_start(objspace); - list_for_each(&heap_eden->pages, page, page_node) { - page->flags.before_sweep = TRUE; + if (ruby_enable_autocompact && is_full_marking(objspace)) { + gc_compact_start(objspace); + } + + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + list_for_each(&(SIZE_POOL_EDEN_HEAP(&size_pools[i])->pages), page, page_node) { + page->flags.before_sweep = TRUE; + } + } + + /* Sweep every size pool. */ + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + gc_sweep_step(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool)); } - gc_sweep_step(objspace, heap_eden); } - gc_heap_prepare_minimum_pages(objspace, heap_eden); +#if !USE_RVARGC + rb_size_pool_t *size_pool = &size_pools[0]; + gc_heap_prepare_minimum_pages(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool)); +#endif } /* Marking - Marking stack */ @@ -4529,10 +6012,52 @@ free_stack_chunks(mark_stack_t *stack) static void push_mark_stack(mark_stack_t *stack, VALUE data) { - if (stack->index == stack->limit) { - push_mark_stack_chunk(stack); + VALUE obj = data; + switch (BUILTIN_TYPE(obj)) { + case T_OBJECT: + case T_CLASS: + case T_MODULE: + case T_FLOAT: + case T_STRING: + case T_REGEXP: + case T_ARRAY: + case T_HASH: + case T_STRUCT: + case T_BIGNUM: + case T_FILE: + case T_DATA: + case T_MATCH: + case T_COMPLEX: + case T_RATIONAL: + case T_TRUE: + case T_FALSE: + case T_SYMBOL: + case T_IMEMO: + case T_ICLASS: + if (stack->index == stack->limit) { + push_mark_stack_chunk(stack); + } + stack->chunk->data[stack->index++] = data; + return; + + case T_NONE: + case T_NIL: + case T_FIXNUM: + case T_MOVED: + case T_ZOMBIE: + case T_UNDEF: + case T_MASK: + rb_bug("push_mark_stack() called for broken object"); + break; + + case T_NODE: + UNEXPECTED_NODE(push_mark_stack); + break; } - stack->chunk->data[stack->index++] = data; + + rb_bug("rb_gc_mark(): unknown data type 0x%x(%p) %s", + BUILTIN_TYPE(obj), (void *)data, + is_pointer_to_heap(&rb_objspace, (void *)data) ? "corrupted object" : "non object"); } static int @@ -4551,35 +6076,6 @@ pop_mark_stack(mark_stack_t *stack, VALUE *data) return TRUE; } -#if GC_ENABLE_INCREMENTAL_MARK -static int -invalidate_mark_stack_chunk(stack_chunk_t *chunk, int limit, VALUE obj) -{ - int i; - for (i=0; idata[i] == obj) { - chunk->data[i] = Qundef; - return TRUE; - } - } - return FALSE; -} - -static void -invalidate_mark_stack(mark_stack_t *stack, VALUE obj) -{ - stack_chunk_t *chunk = stack->chunk; - int limit = stack->index; - - while (chunk) { - if (invalidate_mark_stack_chunk(chunk, limit, obj)) return; - chunk = chunk->next; - limit = stack->limit; - } - rb_bug("invalid_mark_stack: unreachable"); -} -#endif - static void init_mark_stack(mark_stack_t *stack) { @@ -4587,7 +6083,6 @@ init_mark_stack(mark_stack_t *stack) MEMZERO(stack, mark_stack_t, 1); stack->index = stack->limit = STACK_CHUNK_SIZE; - stack->cache_size = 0; for (i=0; i < 4; i++) { add_stack_chunk_cache(stack, stack_chunk_alloc()); @@ -4603,11 +6098,6 @@ init_mark_stack(mark_stack_t *stack) #define STACK_END (ec->machine.stack_end) #define STACK_LEVEL_MAX (ec->machine.stack_maxsize/sizeof(VALUE)) -#ifdef __EMSCRIPTEN__ -#undef STACK_GROW_DIRECTION -#define STACK_GROW_DIRECTION 1 -#endif - #if STACK_GROW_DIRECTION < 0 # define STACK_LENGTH (size_t)(STACK_START - STACK_END) #elif STACK_GROW_DIRECTION > 0 @@ -4646,7 +6136,7 @@ ruby_stack_length(VALUE **p) # define PREVENT_STACK_OVERFLOW 0 #endif #endif -#if PREVENT_STACK_OVERFLOW +#if PREVENT_STACK_OVERFLOW && !defined(__EMSCRIPTEN__) static int stack_check(rb_execution_context_t *ec, int water_mark) { @@ -4675,32 +6165,32 @@ ruby_stack_check(void) return stack_check(GET_EC(), STACKFRAME_FOR_CALL_CFUNC); } -ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(static void mark_locations_array(rb_objspace_t *objspace, register const VALUE *x, register long n)); +ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(static void each_location(rb_objspace_t *objspace, register const VALUE *x, register long n, void (*cb)(rb_objspace_t *, VALUE))); static void -mark_locations_array(rb_objspace_t *objspace, register const VALUE *x, register long n) +each_location(rb_objspace_t *objspace, register const VALUE *x, register long n, void (*cb)(rb_objspace_t *, VALUE)) { VALUE v; while (n--) { v = *x; - gc_mark_maybe(objspace, v); + cb(objspace, v); x++; } } static void -gc_mark_locations(rb_objspace_t *objspace, const VALUE *start, const VALUE *end) +gc_mark_locations(rb_objspace_t *objspace, const VALUE *start, const VALUE *end, void (*cb)(rb_objspace_t *, VALUE)) { long n; if (end <= start) return; n = end - start; - mark_locations_array(objspace, start, n); + each_location(objspace, start, n, cb); } void rb_gc_mark_locations(const VALUE *start, const VALUE *end) { - gc_mark_locations(&rb_objspace, start, end); + gc_mark_locations(&rb_objspace, start, end, gc_mark_maybe); } static void @@ -4725,13 +6215,12 @@ rb_gc_mark_values(long n, const VALUE *values) } static void -gc_mark_and_pin_stack_values(rb_objspace_t *objspace, long n, const VALUE *values) +gc_mark_stack_values(rb_objspace_t *objspace, long n, const VALUE *values) { long i; for (i=0; imark_func_data == NULL && RHASH_TRANSIENT_P(hash)) { + if (LIKELY(during_gc) && RHASH_TRANSIENT_P(hash)) { rb_transient_heap_mark(hash, RHASH_AR_TABLE(hash)); } } @@ -4876,10 +6373,16 @@ mark_method_entry(rb_objspace_t *objspace, const rb_method_entry_t *me) if (def) { switch (def->type) { - case VM_METHOD_TYPE_ISEQ: - if (def->body.iseq.iseqptr) gc_mark(objspace, (VALUE)def->body.iseq.iseqptr); - gc_mark(objspace, (VALUE)def->body.iseq.cref); - break; + case VM_METHOD_TYPE_ISEQ: + if (def->body.iseq.iseqptr) gc_mark(objspace, (VALUE)def->body.iseq.iseqptr); + gc_mark(objspace, (VALUE)def->body.iseq.cref); + + if (def->iseq_overload && me->defined_class) { + // it can be a key of "overloaded_cme" table + // so it should be pinned. + gc_mark_and_pin(objspace, (VALUE)me); + } + break; case VM_METHOD_TYPE_ATTRSET: case VM_METHOD_TYPE_IVAR: gc_mark(objspace, def->body.attr.location); @@ -4951,15 +6454,16 @@ mark_const_tbl(rb_objspace_t *objspace, struct rb_id_table *tbl) ((start) = STACK_END, (end) = STACK_START) : ((start) = STACK_START, (end) = STACK_END+(appendix))) #endif -static void mark_stack_locations(rb_objspace_t *objspace, const rb_execution_context_t *ec, - const VALUE *stack_start, const VALUE *stack_end); +static void each_stack_location(rb_objspace_t *objspace, const rb_execution_context_t *ec, + const VALUE *stack_start, const VALUE *stack_end, void (*cb)(rb_objspace_t *, VALUE)); +#ifndef __EMSCRIPTEN__ static void mark_current_machine_context(rb_objspace_t *objspace, rb_execution_context_t *ec) { union { rb_jmp_buf j; - VALUE v[sizeof(rb_jmp_buf) / sizeof(VALUE)]; + VALUE v[sizeof(rb_jmp_buf) / (sizeof(VALUE))]; } save_regs_gc_mark; VALUE *stack_start, *stack_end; @@ -4974,32 +6478,59 @@ mark_current_machine_context(rb_objspace_t *objspace, rb_execution_context_t *ec SET_STACK_END; GET_STACK_BOUNDS(stack_start, stack_end, 1); - mark_locations_array(objspace, save_regs_gc_mark.v, numberof(save_regs_gc_mark.v)); + each_location(objspace, save_regs_gc_mark.v, numberof(save_regs_gc_mark.v), gc_mark_maybe); - mark_stack_locations(objspace, ec, stack_start, stack_end); + each_stack_location(objspace, ec, stack_start, stack_end, gc_mark_maybe); } +#else -void -rb_gc_mark_machine_stack(const rb_execution_context_t *ec) +static VALUE *rb_emscripten_stack_range_tmp[2]; + +static void +rb_emscripten_mark_locations(void *begin, void *end) +{ + rb_emscripten_stack_range_tmp[0] = begin; + rb_emscripten_stack_range_tmp[1] = end; +} + +static void +mark_current_machine_context(rb_objspace_t *objspace, rb_execution_context_t *ec) +{ + emscripten_scan_stack(rb_emscripten_mark_locations); + each_stack_location(objspace, ec, rb_emscripten_stack_range_tmp[0], rb_emscripten_stack_range_tmp[1], gc_mark_maybe); + + emscripten_scan_registers(rb_emscripten_mark_locations); + each_stack_location(objspace, ec, rb_emscripten_stack_range_tmp[0], rb_emscripten_stack_range_tmp[1], gc_mark_maybe); +} +#endif + +static void +each_machine_stack_value(const rb_execution_context_t *ec, void (*cb)(rb_objspace_t *, VALUE)) { rb_objspace_t *objspace = &rb_objspace; VALUE *stack_start, *stack_end; GET_STACK_BOUNDS(stack_start, stack_end, 0); - mark_stack_locations(objspace, ec, stack_start, stack_end); + each_stack_location(objspace, ec, stack_start, stack_end, cb); +} + +void +rb_gc_mark_machine_stack(const rb_execution_context_t *ec) +{ + each_machine_stack_value(ec, gc_mark_maybe); } static void -mark_stack_locations(rb_objspace_t *objspace, const rb_execution_context_t *ec, - const VALUE *stack_start, const VALUE *stack_end) +each_stack_location(rb_objspace_t *objspace, const rb_execution_context_t *ec, + const VALUE *stack_start, const VALUE *stack_end, void (*cb)(rb_objspace_t *, VALUE)) { - gc_mark_locations(objspace, stack_start, stack_end); + gc_mark_locations(objspace, stack_start, stack_end, cb); #if defined(__mc68000__) gc_mark_locations(objspace, (VALUE*)((char*)stack_start + 2), - (VALUE*)((char*)stack_end - 2)); + (VALUE*)((char*)stack_end - 2), cb); #endif } @@ -5026,7 +6557,6 @@ gc_mark_maybe(rb_objspace_t *objspace, VALUE obj) /* Garbage can live on the stack, so do not mark or pin */ switch (BUILTIN_TYPE(obj)) { - case T_MOVED: case T_ZOMBIE: case T_NONE: break; @@ -5051,12 +6581,12 @@ rb_gc_mark_maybe(VALUE obj) static inline int gc_mark_set(rb_objspace_t *objspace, VALUE obj) { + ASSERT_vm_locking(); if (RVALUE_MARKED(obj)) return 0; MARK_IN_BITMAP(GET_HEAP_MARK_BITS(obj), obj); return 1; } -#if USE_RGENGC static int gc_remember_unprotected(rb_objspace_t *objspace, VALUE obj) { @@ -5080,12 +6610,10 @@ gc_remember_unprotected(rb_objspace_t *objspace, VALUE obj) return FALSE; } } -#endif static void rgengc_check_relation(rb_objspace_t *objspace, VALUE obj) { -#if USE_RGENGC const VALUE old_parent = objspace->rgengc.parent_object; if (old_parent) { /* parent object is old */ @@ -5118,7 +6646,6 @@ rgengc_check_relation(rb_objspace_t *objspace, VALUE obj) } GC_ASSERT(old_parent == objspace->rgengc.parent_object); -#endif } static void @@ -5141,7 +6668,6 @@ gc_grey(rb_objspace_t *objspace, VALUE obj) static void gc_aging(rb_objspace_t *objspace, VALUE obj) { -#if USE_RGENGC struct heap_page *page = GET_HEAP_PAGE(obj); GC_ASSERT(RVALUE_MARKING(obj) == FALSE); @@ -5158,25 +6684,40 @@ gc_aging(rb_objspace_t *objspace, VALUE obj) } } check_rvalue_consistency(obj); -#endif /* USE_RGENGC */ objspace->marked_slots++; } NOINLINE(static void gc_mark_ptr(rb_objspace_t *objspace, VALUE obj)); +static void reachable_objects_from_callback(VALUE obj); static void gc_mark_ptr(rb_objspace_t *objspace, VALUE obj) { - if (LIKELY(objspace->mark_func_data == NULL)) { + if (LIKELY(during_gc)) { rgengc_check_relation(objspace, obj); if (!gc_mark_set(objspace, obj)) return; /* already marked */ - if (RB_TYPE_P(obj, T_NONE)) rb_bug("try to mark T_NONE object"); /* check here will help debugging */ + + if (0) { // for debug GC marking miss + if (objspace->rgengc.parent_object) { + RUBY_DEBUG_LOG("%p (%s) parent:%p (%s)", + (void *)obj, obj_type_name(obj), + (void *)objspace->rgengc.parent_object, obj_type_name(objspace->rgengc.parent_object)); + } + else { + RUBY_DEBUG_LOG("%p (%s)", (void *)obj, obj_type_name(obj)); + } + } + + if (UNLIKELY(RB_TYPE_P(obj, T_NONE))) { + rp(obj); + rb_bug("try to mark T_NONE object"); /* check here will help debugging */ + } gc_aging(objspace, obj); gc_grey(objspace, obj); } else { - objspace->mark_func_data->mark_func(obj, objspace->mark_func_data->data); + reachable_objects_from_callback(obj); } } @@ -5185,7 +6726,9 @@ gc_pin(rb_objspace_t *objspace, VALUE obj) { GC_ASSERT(is_markable_object(objspace, obj)); if (UNLIKELY(objspace->flags.during_compacting)) { - MARK_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), obj); + if (LIKELY(during_gc)) { + MARK_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), obj); + } } } @@ -5229,14 +6772,12 @@ rb_objspace_marked_object_p(VALUE obj) static inline void gc_mark_set_parent(rb_objspace_t *objspace, VALUE obj) { -#if USE_RGENGC if (RVALUE_OLD_P(obj)) { objspace->rgengc.parent_object = obj; } else { objspace->rgengc.parent_object = Qfalse; } -#endif } static void @@ -5246,15 +6787,20 @@ gc_mark_imemo(rb_objspace_t *objspace, VALUE obj) case imemo_env: { const rb_env_t *env = (const rb_env_t *)obj; - GC_ASSERT(VM_ENV_ESCAPED_P(env->ep)); - gc_mark_values(objspace, (long)env->env_size, env->env); - VM_ENV_FLAGS_SET(env->ep, VM_ENV_FLAG_WB_REQUIRED); - gc_mark(objspace, (VALUE)rb_vm_env_prev_env(env)); - gc_mark(objspace, (VALUE)env->iseq); + + if (LIKELY(env->ep)) { + // just after newobj() can be NULL here. + GC_ASSERT(env->ep[VM_ENV_DATA_INDEX_ENV] == obj); + GC_ASSERT(VM_ENV_ESCAPED_P(env->ep)); + gc_mark_values(objspace, (long)env->env_size, env->env); + VM_ENV_FLAGS_SET(env->ep, VM_ENV_FLAG_WB_REQUIRED); + gc_mark(objspace, (VALUE)rb_vm_env_prev_env(env)); + gc_mark(objspace, (VALUE)env->iseq); + } } return; case imemo_cref: - gc_mark(objspace, RANY(obj)->as.imemo.cref.klass); + gc_mark(objspace, RANY(obj)->as.imemo.cref.klass_or_self); gc_mark(objspace, (VALUE)RANY(obj)->as.imemo.cref.next); gc_mark(objspace, RANY(obj)->as.imemo.cref.refinements); return; @@ -5295,6 +6841,21 @@ gc_mark_imemo(rb_objspace_t *objspace, VALUE obj) case imemo_parser_strterm: rb_strterm_mark(obj); return; + case imemo_callinfo: + return; + case imemo_callcache: + { + const struct rb_callcache *cc = (const struct rb_callcache *)obj; + // should not mark klass here + gc_mark(objspace, (VALUE)vm_cc_cme(cc)); + } + return; + case imemo_constcache: + { + const struct iseq_inline_constant_cache_entry *ice = (struct iseq_inline_constant_cache_entry *)obj; + gc_mark(objspace, ice->value); + } + return; #if VM_CHECK_MODE > 0 default: VM_UNREACHABLE(gc_mark_imemo); @@ -5332,6 +6893,9 @@ gc_mark_children(rb_objspace_t *objspace, VALUE obj) case T_IMEMO: gc_mark_imemo(objspace, obj); return; + + default: + break; } gc_mark(objspace, any->as.basic.klass); @@ -5343,13 +6907,15 @@ gc_mark_children(rb_objspace_t *objspace, VALUE obj) gc_mark(objspace, RCLASS_SUPER(obj)); } if (!RCLASS_EXT(obj)) break; + mark_m_tbl(objspace, RCLASS_M_TBL(obj)); + cc_table_mark(objspace, obj); mark_tbl_no_pin(objspace, RCLASS_IV_TBL(obj)); mark_const_tbl(objspace, RCLASS_CONST_TBL(obj)); break; case T_ICLASS: - if (FL_TEST(obj, RICLASS_IS_ORIGIN)) { + if (RICLASS_OWNS_M_TBL_P(obj)) { mark_m_tbl(objspace, RCLASS_M_TBL(obj)); } if (RCLASS_SUPER(obj)) { @@ -5357,6 +6923,7 @@ gc_mark_children(rb_objspace_t *objspace, VALUE obj) } if (!RCLASS_EXT(obj)) break; mark_m_tbl(objspace, RCLASS_CALLABLE_M_TBL(obj)); + cc_table_mark(objspace, obj); break; case T_ARRAY: @@ -5371,7 +6938,7 @@ gc_mark_children(rb_objspace_t *objspace, VALUE obj) gc_mark(objspace, ptr[i]); } - if (objspace->mark_func_data == NULL) { + if (LIKELY(during_gc)) { if (!FL_TEST_RAW(obj, RARRAY_EMBED_FLAG) && RARRAY_TRANSIENT_P(obj)) { rb_transient_heap_mark(obj, ptr); @@ -5406,22 +6973,21 @@ gc_mark_children(rb_objspace_t *objspace, VALUE obj) { const VALUE * const ptr = ROBJECT_IVPTR(obj); - if (ptr) { - uint32_t i, len = ROBJECT_NUMIV(obj); - for (i = 0; i < len; i++) { - gc_mark(objspace, ptr[i]); - } + uint32_t i, len = ROBJECT_NUMIV(obj); + for (i = 0; i < len; i++) { + gc_mark(objspace, ptr[i]); + } - if (objspace->mark_func_data == NULL && + if (LIKELY(during_gc) && ROBJ_TRANSIENT_P(obj)) { - rb_transient_heap_mark(obj, ptr); - } + rb_transient_heap_mark(obj, ptr); } } break; case T_FILE: if (any->as.file.fptr) { + gc_mark(objspace, any->as.file.fptr->self); gc_mark(objspace, any->as.file.fptr->pathv); gc_mark(objspace, any->as.file.fptr->tied_io_for_writing); gc_mark(objspace, any->as.file.fptr->writeconv_asciicompat); @@ -5462,7 +7028,7 @@ gc_mark_children(rb_objspace_t *objspace, VALUE obj) gc_mark(objspace, ptr[i]); } - if (objspace->mark_func_data == NULL && + if (LIKELY(during_gc) && RSTRUCT_TRANSIENT_P(obj)) { rb_transient_heap_mark(obj, ptr); } @@ -5587,9 +7153,7 @@ gc_mark_roots(rb_objspace_t *objspace, const char **categoryp) if (categoryp) *categoryp = "xxx"; -#if USE_RGENGC objspace->rgengc.parent_object = Qfalse; -#endif #if PRINT_ROOT_TICKS #define MARK_CHECKPOINT_PRINT_TICK(category) do { \ @@ -5731,8 +7295,10 @@ static int allrefs_add(struct allrefs *data, VALUE obj) { struct reflist *refs; + st_data_t r; - if (st_lookup(data->references, obj, (st_data_t *)&refs)) { + if (st_lookup(data->references, obj, &r)) { + refs = (struct reflist *)r; reflist_add(refs, data->root_obj); return 0; } @@ -5764,15 +7330,20 @@ allrefs_roots_i(VALUE obj, void *ptr) push_mark_stack(&data->mark_stack, obj); } } +#define PUSH_MARK_FUNC_DATA(v) do { \ + struct gc_mark_func_data_struct *prev_mark_func_data = GET_RACTOR()->mfd; \ + GET_RACTOR()->mfd = (v); + +#define POP_MARK_FUNC_DATA() GET_RACTOR()->mfd = prev_mark_func_data;} while (0) static st_table * objspace_allrefs(rb_objspace_t *objspace) { struct allrefs data; - struct mark_func_data_struct mfd; + struct gc_mark_func_data_struct mfd; VALUE obj; - int prev_dont_gc = dont_gc; - dont_gc = TRUE; + int prev_dont_gc = dont_gc_val(); + dont_gc_on(); data.objspace = objspace; data.references = st_init_numtable(); @@ -5783,7 +7354,7 @@ objspace_allrefs(rb_objspace_t *objspace) /* traverse root objects */ PUSH_MARK_FUNC_DATA(&mfd); - objspace->mark_func_data = &mfd; + GET_RACTOR()->mfd = &mfd; gc_mark_roots(objspace, &data.category); POP_MARK_FUNC_DATA(); @@ -5793,12 +7364,12 @@ objspace_allrefs(rb_objspace_t *objspace) } free_stack_chunks(&data.mark_stack); - dont_gc = prev_dont_gc; + dont_gc_set(prev_dont_gc); return data.references; } static int -objspace_allrefs_destruct_i(st_data_t key, st_data_t value, void *ptr) +objspace_allrefs_destruct_i(st_data_t key, st_data_t value, st_data_t ptr) { struct reflist *refs = (struct reflist *)value; reflist_destruct(refs); @@ -5827,13 +7398,14 @@ allrefs_dump_i(st_data_t k, st_data_t v, st_data_t ptr) static void allrefs_dump(rb_objspace_t *objspace) { - fprintf(stderr, "[all refs] (size: %d)\n", (int)objspace->rgengc.allrefs_table->num_entries); + VALUE size = objspace->rgengc.allrefs_table->num_entries; + fprintf(stderr, "[all refs] (size: %"PRIuVALUE")\n", size); st_foreach(objspace->rgengc.allrefs_table, allrefs_dump_i, 0); } #endif static int -gc_check_after_marks_i(st_data_t k, st_data_t v, void *ptr) +gc_check_after_marks_i(st_data_t k, st_data_t v, st_data_t ptr) { VALUE obj = k; struct reflist *refs = (struct reflist *)v; @@ -5896,14 +7468,11 @@ struct verify_internal_consistency_struct { size_t live_object_count; size_t zombie_object_count; -#if USE_RGENGC VALUE parent; size_t old_object_count; size_t remembered_shady_count; -#endif }; -#if USE_RGENGC static void check_generation_i(const VALUE child, void *ptr) { @@ -5934,7 +7503,6 @@ check_color_i(const VALUE child, void *ptr) data->err_count++; } } -#endif static void check_children_i(const VALUE child, void *ptr) @@ -5950,9 +7518,9 @@ check_children_i(const VALUE child, void *ptr) } static int -verify_internal_consistency_i(void *page_start, void *page_end, size_t stride, void *ptr) +verify_internal_consistency_i(void *page_start, void *page_end, size_t stride, + struct verify_internal_consistency_struct *data) { - struct verify_internal_consistency_struct *data = (struct verify_internal_consistency_struct *)ptr; VALUE obj; rb_objspace_t *objspace = data->objspace; @@ -5972,7 +7540,6 @@ verify_internal_consistency_i(void *page_start, void *page_end, size_t stride, v rb_objspace_reachable_objects_from(obj, check_children_i, (void *)data); } -#if USE_RGENGC /* check health of children */ if (RVALUE_OLD_P(obj)) data->old_object_count++; if (RVALUE_WB_UNPROTECTED(obj) && RVALUE_UNCOLLECTIBLE(obj)) data->remembered_shady_count++; @@ -5990,7 +7557,6 @@ verify_internal_consistency_i(void *page_start, void *page_end, size_t stride, v rb_objspace_reachable_objects_from(obj, check_color_i, (void *)data); } } -#endif } else { if (BUILTIN_TYPE(obj) == T_ZOMBIE) { @@ -6010,15 +7576,15 @@ verify_internal_consistency_i(void *page_start, void *page_end, size_t stride, v static int gc_verify_heap_page(rb_objspace_t *objspace, struct heap_page *page, VALUE obj) { -#if USE_RGENGC int i; unsigned int has_remembered_shady = FALSE; unsigned int has_remembered_old = FALSE; int remembered_old_objects = 0; int free_objects = 0; int zombie_objects = 0; + int stride = page->slot_size / sizeof(RVALUE); - for (i=0; itotal_slots; i++) { + for (i=0; itotal_slots; i+=stride) { VALUE val = (VALUE)&page->start[i]; void *poisoned = asan_poisoned_object_p(val); asan_unpoison_object(val, false); @@ -6060,17 +7626,14 @@ gc_verify_heap_page(rb_objspace_t *objspace, struct heap_page *page, VALUE obj) if (0) { /* free_slots may not equal to free_objects */ if (page->free_slots != free_objects) { - rb_bug("page %p's free_slots should be %d, but %d\n", (void *)page, (int)page->free_slots, free_objects); + rb_bug("page %p's free_slots should be %d, but %d\n", (void *)page, page->free_slots, free_objects); } } if (page->final_slots != zombie_objects) { - rb_bug("page %p's final_slots should be %d, but %d\n", (void *)page, (int)page->final_slots, zombie_objects); + rb_bug("page %p's final_slots should be %d, but %d\n", (void *)page, page->final_slots, zombie_objects); } return remembered_old_objects; -#else - return 0; -#endif } static int @@ -6083,13 +7646,14 @@ gc_verify_heap_pages_(rb_objspace_t *objspace, struct list_head *head) asan_unpoison_memory_region(&page->freelist, sizeof(RVALUE*), false); RVALUE *p = page->freelist; while (p) { - RVALUE *prev = p; - asan_unpoison_object((VALUE)p, false); - if (BUILTIN_TYPE(p) != T_NONE) { - fprintf(stderr, "freelist slot expected to be T_NONE but was: %s\n", obj_info((VALUE)p)); + VALUE vp = (VALUE)p; + VALUE prev = vp; + asan_unpoison_object(vp, false); + if (BUILTIN_TYPE(vp) != T_NONE) { + fprintf(stderr, "freelist slot expected to be T_NONE but was: %s\n", obj_info(vp)); } p = p->as.free.next; - asan_poison_object((VALUE)prev); + asan_poison_object(prev); } asan_poison_memory_region(&page->freelist, sizeof(RVALUE*)); @@ -6105,8 +7669,10 @@ static int gc_verify_heap_pages(rb_objspace_t *objspace) { int remembered_old_objects = 0; - remembered_old_objects += gc_verify_heap_pages_(objspace, &heap_eden->pages); - remembered_old_objects += gc_verify_heap_pages_(objspace, &heap_tomb->pages); + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + remembered_old_objects += gc_verify_heap_pages_(objspace, &(SIZE_POOL_EDEN_HEAP(&size_pools[i])->pages)); + remembered_old_objects += gc_verify_heap_pages_(objspace, &(SIZE_POOL_TOMB_HEAP(&size_pools[i])->pages)); + } return remembered_old_objects; } @@ -6124,12 +7690,11 @@ static VALUE gc_verify_internal_consistency_m(VALUE dummy) { gc_verify_internal_consistency(&rb_objspace); - return Qnil; } static void -gc_verify_internal_consistency(rb_objspace_t *objspace) +gc_verify_internal_consistency_(rb_objspace_t *objspace) { struct verify_internal_consistency_struct data = {0}; @@ -6137,8 +7702,15 @@ gc_verify_internal_consistency(rb_objspace_t *objspace) gc_report(5, objspace, "gc_verify_internal_consistency: start\n"); /* check relations */ + for (size_t i = 0; i < heap_allocated_pages; i++) { + struct heap_page *page = heap_pages_sorted[i]; + short slot_size = page->slot_size; - objspace_each_objects_without_setup(objspace, verify_internal_consistency_i, &data); + uintptr_t start = (uintptr_t)page->start; + uintptr_t end = start + page->total_slots * slot_size; + + verify_internal_consistency_i((void *)start, (void *)end, slot_size, &data); + } if (data.err_count != 0) { #if RGENGC_CHECK_MODE >= 5 @@ -6154,24 +7726,28 @@ gc_verify_internal_consistency(rb_objspace_t *objspace) /* check counters */ - if (!is_lazy_sweeping(heap_eden) && !finalizing) { + if (!is_lazy_sweeping(objspace) && + !finalizing && + ruby_single_main_ractor != NULL) { if (objspace_live_slots(objspace) != data.live_object_count) { - fprintf(stderr, "heap_pages_final_slots: %d, objspace->profile.total_freed_objects: %d\n", - (int)heap_pages_final_slots, (int)objspace->profile.total_freed_objects); - rb_bug("inconsistent live slot number: expect %"PRIuSIZE", but %"PRIuSIZE".", objspace_live_slots(objspace), data.live_object_count); + fprintf(stderr, "heap_pages_final_slots: %"PRIdSIZE", " + "objspace->profile.total_freed_objects: %"PRIdSIZE"\n", + heap_pages_final_slots, objspace->profile.total_freed_objects); + rb_bug("inconsistent live slot number: expect %"PRIuSIZE", but %"PRIuSIZE".", + objspace_live_slots(objspace), data.live_object_count); } } -#if USE_RGENGC if (!is_marking(objspace)) { if (objspace->rgengc.old_objects != data.old_object_count) { - rb_bug("inconsistent old slot number: expect %"PRIuSIZE", but %"PRIuSIZE".", objspace->rgengc.old_objects, data.old_object_count); + rb_bug("inconsistent old slot number: expect %"PRIuSIZE", but %"PRIuSIZE".", + objspace->rgengc.old_objects, data.old_object_count); } if (objspace->rgengc.uncollectible_wb_unprotected_objects != data.remembered_shady_count) { - rb_bug("inconsistent old slot number: expect %"PRIuSIZE", but %"PRIuSIZE".", objspace->rgengc.uncollectible_wb_unprotected_objects, data.remembered_shady_count); + rb_bug("inconsistent number of wb unprotected objects: expect %"PRIuSIZE", but %"PRIuSIZE".", + objspace->rgengc.uncollectible_wb_unprotected_objects, data.remembered_shady_count); } } -#endif if (!finalizing) { size_t list_count = 0; @@ -6187,19 +7763,36 @@ gc_verify_internal_consistency(rb_objspace_t *objspace) if (heap_pages_final_slots != data.zombie_object_count || heap_pages_final_slots != list_count) { - rb_bug("inconsistent finalizing object count:\n" - " expect %"PRIuSIZE"\n" - " but %"PRIuSIZE" zombies\n" - " heap_pages_deferred_final list has %"PRIuSIZE" items.", - heap_pages_final_slots, - data.zombie_object_count, - list_count); + rb_bug("inconsistent finalizing object count:\n" + " expect %"PRIuSIZE"\n" + " but %"PRIuSIZE" zombies\n" + " heap_pages_deferred_final list has %"PRIuSIZE" items.", + heap_pages_final_slots, + data.zombie_object_count, + list_count); } } gc_report(5, objspace, "gc_verify_internal_consistency: OK\n"); } +static void +gc_verify_internal_consistency(rb_objspace_t *objspace) +{ + RB_VM_LOCK_ENTER(); + { + rb_vm_barrier(); // stop other ractors + + unsigned int prev_during_gc = during_gc; + during_gc = FALSE; // stop gc here + { + gc_verify_internal_consistency_(objspace); + } + during_gc = prev_during_gc; + } + RB_VM_LOCK_LEAVE(); +} + void rb_gc_verify_internal_consistency(void) { @@ -6222,66 +7815,85 @@ gc_marks_start(rb_objspace_t *objspace, int full_mark) gc_report(1, objspace, "gc_marks_start: (%s)\n", full_mark ? "full" : "minor"); gc_mode_transition(objspace, gc_mode_marking); -#if USE_RGENGC if (full_mark) { #if GC_ENABLE_INCREMENTAL_MARK objspace->rincgc.step_slots = (objspace->marked_slots * 2) / ((objspace->rincgc.pooled_slots / HEAP_PAGE_OBJ_LIMIT) + 1); - if (0) fprintf(stderr, "objspace->marked_slots: %d, objspace->rincgc.pooled_page_num: %d, objspace->rincgc.step_slots: %d, \n", - (int)objspace->marked_slots, (int)objspace->rincgc.pooled_slots, (int)objspace->rincgc.step_slots); + if (0) fprintf(stderr, "objspace->marked_slots: %"PRIdSIZE", " + "objspace->rincgc.pooled_page_num: %"PRIdSIZE", " + "objspace->rincgc.step_slots: %"PRIdSIZE", \n", + objspace->marked_slots, objspace->rincgc.pooled_slots, objspace->rincgc.step_slots); #endif objspace->flags.during_minor_gc = FALSE; + if (ruby_enable_autocompact) { + objspace->flags.during_compacting |= TRUE; + } objspace->profile.major_gc_count++; objspace->rgengc.uncollectible_wb_unprotected_objects = 0; objspace->rgengc.old_objects = 0; objspace->rgengc.last_major_gc = objspace->profile.count; objspace->marked_slots = 0; - rgengc_mark_and_rememberset_clear(objspace, heap_eden); + + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rgengc_mark_and_rememberset_clear(objspace, SIZE_POOL_EDEN_HEAP(&size_pools[i])); + } } else { objspace->flags.during_minor_gc = TRUE; objspace->marked_slots = objspace->rgengc.old_objects + objspace->rgengc.uncollectible_wb_unprotected_objects; /* uncollectible objects are marked already */ objspace->profile.minor_gc_count++; - rgengc_rememberset_mark(objspace, heap_eden); + + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rgengc_rememberset_mark(objspace, SIZE_POOL_EDEN_HEAP(&size_pools[i])); + } } -#endif gc_mark_roots(objspace, NULL); - gc_report(1, objspace, "gc_marks_start: (%s) end, stack in %d\n", full_mark ? "full" : "minor", (int)mark_stack_size(&objspace->mark_stack)); + gc_report(1, objspace, "gc_marks_start: (%s) end, stack in %"PRIdSIZE"\n", + full_mark ? "full" : "minor", mark_stack_size(&objspace->mark_stack)); } #if GC_ENABLE_INCREMENTAL_MARK +static inline void +gc_marks_wb_unprotected_objects_plane(rb_objspace_t *objspace, uintptr_t p, bits_t bits) +{ + if (bits) { + do { + if (bits & 1) { + gc_report(2, objspace, "gc_marks_wb_unprotected_objects: marked shady: %s\n", obj_info((VALUE)p)); + GC_ASSERT(RVALUE_WB_UNPROTECTED((VALUE)p)); + GC_ASSERT(RVALUE_MARKED((VALUE)p)); + gc_mark_children(objspace, (VALUE)p); + } + p += sizeof(RVALUE); + bits >>= 1; + } while (bits); + } +} + static void -gc_marks_wb_unprotected_objects(rb_objspace_t *objspace) +gc_marks_wb_unprotected_objects(rb_objspace_t *objspace, rb_heap_t *heap) { struct heap_page *page = 0; - list_for_each(&heap_eden->pages, page, page_node) { + list_for_each(&heap->pages, page, page_node) { bits_t *mark_bits = page->mark_bits; bits_t *wbun_bits = page->wb_unprotected_bits; RVALUE *p = page->start; - RVALUE *offset = p - NUM_IN_PAGE(p); size_t j; - for (j=0; j>= NUM_IN_PAGE(p); + gc_marks_wb_unprotected_objects_plane(objspace, (uintptr_t)p, bits); + p += (BITS_BITLENGTH - NUM_IN_PAGE(p)); - if (bits) { - p = offset + j * BITS_BITLENGTH; + for (j=1; j>= 1; - } while (bits); - } + gc_marks_wb_unprotected_objects_plane(objspace, (uintptr_t)p, bits); + p += BITS_BITLENGTH; } } @@ -6308,20 +7920,25 @@ gc_marks_finish(rb_objspace_t *objspace) #if GC_ENABLE_INCREMENTAL_MARK /* finish incremental GC */ if (is_incremental_marking(objspace)) { - if (heap_eden->pooled_pages) { - heap_move_pooled_pages_to_free_pages(heap_eden); - gc_report(1, objspace, "gc_marks_finish: pooled pages are exists. retry.\n"); - return FALSE; /* continue marking phase */ - } + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(&size_pools[i]); + if (heap->pooled_pages) { + heap_move_pooled_pages_to_free_pages(heap); + gc_report(1, objspace, "gc_marks_finish: pooled pages are exists. retry.\n"); + return FALSE; /* continue marking phase */ + } + } if (RGENGC_CHECK_MODE && is_mark_stack_empty(&objspace->mark_stack) == 0) { - rb_bug("gc_marks_finish: mark stack is not empty (%d).", (int)mark_stack_size(&objspace->mark_stack)); + rb_bug("gc_marks_finish: mark stack is not empty (%"PRIdSIZE").", + mark_stack_size(&objspace->mark_stack)); } gc_mark_roots(objspace, 0); if (is_mark_stack_empty(&objspace->mark_stack) == FALSE) { - gc_report(1, objspace, "gc_marks_finish: not empty (%d). retry.\n", (int)mark_stack_size(&objspace->mark_stack)); + gc_report(1, objspace, "gc_marks_finish: not empty (%"PRIdSIZE"). retry.\n", + mark_stack_size(&objspace->mark_stack)); return FALSE; } @@ -6333,7 +7950,9 @@ gc_marks_finish(rb_objspace_t *objspace) objspace->flags.during_incremental_marking = FALSE; /* check children of all marked wb-unprotected objects */ - gc_marks_wb_unprotected_objects(objspace); + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + gc_marks_wb_unprotected_objects(objspace, SIZE_POOL_EDEN_HEAP(&size_pools[i])); + } } #endif /* GC_ENABLE_INCREMENTAL_MARK */ @@ -6341,32 +7960,35 @@ gc_marks_finish(rb_objspace_t *objspace) gc_verify_internal_consistency(objspace); #endif -#if USE_RGENGC if (is_full_marking(objspace)) { /* See the comment about RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR */ const double r = gc_params.oldobject_limit_factor; objspace->rgengc.uncollectible_wb_unprotected_objects_limit = (size_t)(objspace->rgengc.uncollectible_wb_unprotected_objects * r); objspace->rgengc.old_objects_limit = (size_t)(objspace->rgengc.old_objects * r); } -#endif #if RGENGC_CHECK_MODE >= 4 + during_gc = FALSE; gc_marks_check(objspace, gc_check_after_marks_i, "after_marks"); + during_gc = TRUE; #endif { /* decide full GC is needed or not */ - rb_heap_t *heap = heap_eden; - size_t total_slots = heap_allocatable_pages * HEAP_PAGE_OBJ_LIMIT + heap->total_slots; + size_t total_slots = heap_allocatable_slots(objspace) + heap_eden_total_slots(objspace); size_t sweep_slots = total_slots - objspace->marked_slots; /* will be swept slots */ size_t max_free_slots = (size_t)(total_slots * gc_params.heap_free_slots_max_ratio); size_t min_free_slots = (size_t)(total_slots * gc_params.heap_free_slots_min_ratio); int full_marking = is_full_marking(objspace); + const int r_cnt = GET_VM()->ractor.cnt; + const int r_mul = r_cnt > 8 ? 8 : r_cnt; // upto 8 - GC_ASSERT(heap->total_slots >= objspace->marked_slots); + GC_ASSERT(heap_eden_total_slots(objspace) >= objspace->marked_slots); /* setup free-able page counts */ - if (max_free_slots < gc_params.heap_init_slots) max_free_slots = gc_params.heap_init_slots; + if (max_free_slots < gc_params.heap_init_slots * r_mul) { + max_free_slots = gc_params.heap_init_slots * r_mul; + } if (sweep_slots > max_free_slots) { heap_pages_freeable_pages = (sweep_slots - max_free_slots) / HEAP_PAGE_OBJ_LIMIT; @@ -6375,28 +7997,34 @@ gc_marks_finish(rb_objspace_t *objspace) heap_pages_freeable_pages = 0; } - /* check free_min */ - if (min_free_slots < gc_params.heap_free_slots) min_free_slots = gc_params.heap_free_slots; + /* check free_min */ + if (min_free_slots < gc_params.heap_free_slots * r_mul) { + min_free_slots = gc_params.heap_free_slots * r_mul; + } -#if USE_RGENGC if (sweep_slots < min_free_slots) { if (!full_marking) { if (objspace->profile.count - objspace->rgengc.last_major_gc < RVALUE_OLD_AGE) { full_marking = TRUE; /* do not update last_major_gc, because full marking is not done. */ - goto increment; + /* goto increment; */ } else { gc_report(1, objspace, "gc_marks_finish: next is full GC!!)\n"); objspace->rgengc.need_major_gc |= GPR_FLAG_MAJOR_BY_NOFREE; } } - else { - increment: + +#if !USE_RVARGC + if (full_marking) { + /* increment: */ gc_report(1, objspace, "gc_marks_finish: heap_set_increment!!\n"); - heap_set_increment(objspace, heap_extend_pages(objspace, sweep_slots, total_slots)); - heap_increment(objspace, heap); + rb_size_pool_t *size_pool = &size_pools[0]; + size_pool_allocatable_pages_set(objspace, size_pool, heap_extend_pages(objspace, sweep_slots, total_slots, heap_allocated_pages + heap_allocatable_pages(objspace))); + + heap_increment(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool)); } +#endif } if (full_marking) { @@ -6416,29 +8044,25 @@ gc_marks_finish(rb_objspace_t *objspace) objspace->rgengc.need_major_gc = GPR_FLAG_MAJOR_BY_FORCE; } - gc_report(1, objspace, "gc_marks_finish (marks %d objects, old %d objects, total %d slots, sweep %d slots, increment: %d, next GC: %s)\n", - (int)objspace->marked_slots, (int)objspace->rgengc.old_objects, (int)heap->total_slots, (int)sweep_slots, (int)heap_allocatable_pages, + gc_report(1, objspace, "gc_marks_finish (marks %"PRIdSIZE" objects, " + "old %"PRIdSIZE" objects, total %"PRIdSIZE" slots, " + "sweep %"PRIdSIZE" slots, increment: %"PRIdSIZE", next GC: %s)\n", + objspace->marked_slots, objspace->rgengc.old_objects, heap_eden_total_slots(objspace), sweep_slots, heap_allocatable_pages(objspace), objspace->rgengc.need_major_gc ? "major" : "minor"); -#else /* USE_RGENGC */ - if (sweep_slots < min_free_slots) { - gc_report(1, objspace, "gc_marks_finish: heap_set_increment!!\n"); - heap_set_increment(objspace, heap_extend_pages(objspace, sweep_slot, total_slot)); - heap_increment(objspace, heap); - } -#endif } rb_transient_heap_finish_marking(); + rb_ractor_finish_marking(); gc_event_hook(objspace, RUBY_INTERNAL_EVENT_GC_END_MARK, 0); return TRUE; } +#if GC_ENABLE_INCREMENTAL_MARK static void -gc_marks_step(rb_objspace_t *objspace, int slots) +gc_marks_step(rb_objspace_t *objspace, size_t slots) { -#if GC_ENABLE_INCREMENTAL_MARK GC_ASSERT(is_marking(objspace)); if (gc_mark_stacked_objects_incremental(objspace, slots)) { @@ -6447,9 +8071,9 @@ gc_marks_step(rb_objspace_t *objspace, int slots) gc_sweep(objspace); } } - if (0) fprintf(stderr, "objspace->marked_slots: %d\n", (int)objspace->marked_slots); -#endif + if (0) fprintf(stderr, "objspace->marked_slots: %"PRIdSIZE"\n", objspace->marked_slots); } +#endif static void gc_marks_rest(rb_objspace_t *objspace) @@ -6457,7 +8081,9 @@ gc_marks_rest(rb_objspace_t *objspace) gc_report(1, objspace, "gc_marks_rest\n"); #if GC_ENABLE_INCREMENTAL_MARK - heap_eden->pooled_pages = NULL; + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + SIZE_POOL_EDEN_HEAP(&size_pools[i])->pooled_pages = NULL; + } #endif if (is_incremental_marking(objspace)) { @@ -6475,42 +8101,41 @@ gc_marks_rest(rb_objspace_t *objspace) } static void -gc_marks_continue(rb_objspace_t *objspace, rb_heap_t *heap) +gc_marks_continue(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) { - GC_ASSERT(dont_gc == FALSE); + GC_ASSERT(dont_gc_val() == FALSE); #if GC_ENABLE_INCREMENTAL_MARK - gc_enter(objspace, "marks_continue"); + unsigned int lock_lev; + gc_enter(objspace, gc_enter_event_mark_continue, &lock_lev); - PUSH_MARK_FUNC_DATA(NULL); - { - int slots = 0; - const char *from; + int slots = 0; + const char *from; - if (heap->pooled_pages) { - while (heap->pooled_pages && slots < HEAP_PAGE_OBJ_LIMIT) { - struct heap_page *page = heap_move_pooled_pages_to_free_pages(heap); - slots += page->free_slots; - } - from = "pooled-pages"; - } - else if (heap_increment(objspace, heap)) { - slots = heap->free_pages->free_slots; - from = "incremented-pages"; - } + if (heap->pooled_pages) { + while (heap->pooled_pages && slots < HEAP_PAGE_OBJ_LIMIT) { + struct heap_page *page = heap_move_pooled_pages_to_free_pages(heap); + slots += page->free_slots; + } + from = "pooled-pages"; + } + else if (heap_increment(objspace, size_pool, heap)) { + slots = heap->free_pages->free_slots; + from = "incremented-pages"; + } - if (slots > 0) { - gc_report(2, objspace, "gc_marks_continue: provide %d slots from %s.\n", slots, from); - gc_marks_step(objspace, (int)objspace->rincgc.step_slots); - } - else { - gc_report(2, objspace, "gc_marks_continue: no more pooled pages (stack depth: %d).\n", (int)mark_stack_size(&objspace->mark_stack)); - gc_marks_rest(objspace); - } + if (slots > 0) { + gc_report(2, objspace, "gc_marks_continue: provide %d slots from %s.\n", + slots, from); + gc_marks_step(objspace, objspace->rincgc.step_slots); + } + else { + gc_report(2, objspace, "gc_marks_continue: no more pooled pages (stack depth: %"PRIdSIZE").\n", + mark_stack_size(&objspace->mark_stack)); + gc_marks_rest(objspace); } - POP_MARK_FUNC_DATA(); - gc_exit(objspace, "marks_continue"); + gc_exit(objspace, gc_enter_event_mark_continue, &lock_lev); #endif } @@ -6519,29 +8144,19 @@ gc_marks(rb_objspace_t *objspace, int full_mark) { gc_prof_mark_timer_start(objspace); - PUSH_MARK_FUNC_DATA(NULL); - { - /* setup marking */ + /* setup marking */ -#if USE_RGENGC - gc_marks_start(objspace, full_mark); - if (!is_incremental_marking(objspace)) { - gc_marks_rest(objspace); - } + gc_marks_start(objspace, full_mark); + if (!is_incremental_marking(objspace)) { + gc_marks_rest(objspace); + } #if RGENGC_PROFILE > 0 - if (gc_prof_record(objspace)) { - gc_profile_record *record = gc_prof_record(objspace); - record->old_objects = objspace->rgengc.old_objects; - } -#endif - -#else /* USE_RGENGC */ - gc_marks_start(objspace, TRUE); - gc_marks_rest(objspace); -#endif + if (gc_prof_record(objspace)) { + gc_profile_record *record = gc_prof_record(objspace); + record->old_objects = objspace->rgengc.old_objects; } - POP_MARK_FUNC_DATA(); +#endif gc_prof_mark_timer_stop(objspace); } @@ -6556,19 +8171,17 @@ gc_report_body(int level, rb_objspace_t *objspace, const char *fmt, ...) va_list args; const char *status = " "; -#if USE_RGENGC if (during_gc) { status = is_full_marking(objspace) ? "+" : "-"; } else { - if (is_lazy_sweeping(heap_eden)) { + if (is_lazy_sweeping(objspace)) { status = "S"; } if (is_incremental_marking(objspace)) { status = "M"; } } -#endif va_start(args, fmt); vsnprintf(buf, 1024, fmt, args); @@ -6579,8 +8192,6 @@ gc_report_body(int level, rb_objspace_t *objspace, const char *fmt, ...) } } -#if USE_RGENGC - /* bit operations */ static int @@ -6655,6 +8266,25 @@ rgengc_remembered(rb_objspace_t *objspace, VALUE obj) #define PROFILE_REMEMBERSET_MARK 0 #endif +static inline void +rgengc_rememberset_mark_plane(rb_objspace_t *objspace, uintptr_t p, bits_t bitset) +{ + if (bitset) { + do { + if (bitset & 1) { + VALUE obj = (VALUE)p; + gc_report(2, objspace, "rgengc_rememberset_mark: mark %s\n", obj_info(obj)); + GC_ASSERT(RVALUE_UNCOLLECTIBLE(obj)); + GC_ASSERT(RVALUE_OLD_P(obj) || RVALUE_WB_UNPROTECTED(obj)); + + gc_mark_children(objspace, obj); + } + p += sizeof(RVALUE); + bitset >>= 1; + } while (bitset); + } +} + static void rgengc_rememberset_mark(rb_objspace_t *objspace, rb_heap_t *heap) { @@ -6668,7 +8298,6 @@ rgengc_rememberset_mark(rb_objspace_t *objspace, rb_heap_t *heap) list_for_each(&heap->pages, page, page_node) { if (page->flags.has_remembered_objects | page->flags.has_uncollectible_shady_objects) { RVALUE *p = page->start; - RVALUE *offset = p - NUM_IN_PAGE(p); bits_t bitset, bits[HEAP_PAGE_BITMAP_LIMIT]; bits_t *marking_bits = page->marking_bits; bits_t *uncollectible_bits = page->uncollectible_bits; @@ -6684,25 +8313,15 @@ rgengc_rememberset_mark(rb_objspace_t *objspace, rb_heap_t *heap) } page->flags.has_remembered_objects = FALSE; - for (j=0; j < HEAP_PAGE_BITMAP_LIMIT; j++) { - bitset = bits[j]; - - if (bitset) { - p = offset + j * BITS_BITLENGTH; - - do { - if (bitset & 1) { - VALUE obj = (VALUE)p; - gc_report(2, objspace, "rgengc_rememberset_mark: mark %s\n", obj_info(obj)); - GC_ASSERT(RVALUE_UNCOLLECTIBLE(obj)); - GC_ASSERT(RVALUE_OLD_P(obj) || RVALUE_WB_UNPROTECTED(obj)); + bitset = bits[0]; + bitset >>= NUM_IN_PAGE(p); + rgengc_rememberset_mark_plane(objspace, (uintptr_t)p, bitset); + p += (BITS_BITLENGTH - NUM_IN_PAGE(p)); - gc_mark_children(objspace, obj); - } - p++; - bitset >>= 1; - } while (bitset); - } + for (j=1; j < HEAP_PAGE_BITMAP_LIMIT; j++) { + bitset = bits[j]; + rgengc_rememberset_mark_plane(objspace, (uintptr_t)p, bitset); + p += BITS_BITLENGTH; } } #if PROFILE_REMEMBERSET_MARK @@ -6749,7 +8368,11 @@ gc_writebarrier_generational(VALUE a, VALUE b, rb_objspace_t *objspace) #if 1 /* mark `a' and remember (default behavior) */ if (!rgengc_remembered(objspace, a)) { - rgengc_remember(objspace, a); + RB_VM_LOCK_ENTER_NO_BARRIER(); + { + rgengc_remember(objspace, a); + } + RB_VM_LOCK_LEAVE_NO_BARRIER(); gc_report(1, objspace, "gc_writebarrier_generational: %s (remembered) -> %s\n", obj_info(a), obj_info(b)); } #else @@ -6809,6 +8432,10 @@ gc_writebarrier_incremental(VALUE a, VALUE b, rb_objspace_t *objspace) gc_remember_unprotected(objspace, b); } } + + if (UNLIKELY(objspace->flags.during_compacting)) { + MARK_IN_BITMAP(GET_HEAP_PINNED_BITS(b), b); + } } } #else @@ -6823,17 +8450,32 @@ rb_gc_writebarrier(VALUE a, VALUE b) if (RGENGC_CHECK_MODE && SPECIAL_CONST_P(a)) rb_bug("rb_gc_writebarrier: a is special const"); if (RGENGC_CHECK_MODE && SPECIAL_CONST_P(b)) rb_bug("rb_gc_writebarrier: b is special const"); + retry: if (!is_incremental_marking(objspace)) { - if (!RVALUE_OLD_P(a) || RVALUE_OLD_P(b)) { - return; - } - else { - gc_writebarrier_generational(a, b, objspace); - } + if (!RVALUE_OLD_P(a) || RVALUE_OLD_P(b)) { + // do nothing + } + else { + gc_writebarrier_generational(a, b, objspace); + } } - else { /* slow path */ - gc_writebarrier_incremental(a, b, objspace); + else { + bool retry = false; + /* slow path */ + RB_VM_LOCK_ENTER_NO_BARRIER(); + { + if (is_incremental_marking(objspace)) { + gc_writebarrier_incremental(a, b, objspace); + } + else { + retry = true; + } + } + RB_VM_LOCK_LEAVE_NO_BARRIER(); + + if (retry) goto retry; } + return; } void @@ -6897,7 +8539,7 @@ static st_table *rgengc_unprotect_logging_table; static int rgengc_unprotect_logging_exit_func_i(st_data_t key, st_data_t val, st_data_t arg) { - fprintf(stderr, "%s\t%d\n", (char *)key, (int)val); + fprintf(stderr, "%s\t%"PRIuVALUE"\n", (char *)key, (VALUE)val); return ST_CONTINUE; } @@ -6934,12 +8576,10 @@ rb_gc_unprotect_logging(void *objptr, const char *filename, int line) st_insert(rgengc_unprotect_logging_table, (st_data_t)ptr, cnt); } } -#endif /* USE_RGENGC */ void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj) { -#if USE_RGENGC rb_objspace_t *objspace = &rb_objspace; if (RVALUE_WB_UNPROTECTED(obj) && !RVALUE_WB_UNPROTECTED(dest)) { @@ -6953,7 +8593,6 @@ rb_copy_wb_protected_attribute(VALUE dest, VALUE obj) } check_rvalue_consistency(dest); -#endif } /* RGENGC analysis information */ @@ -6961,17 +8600,13 @@ rb_copy_wb_protected_attribute(VALUE dest, VALUE obj) VALUE rb_obj_rgengc_writebarrier_protected_p(VALUE obj) { -#if USE_RGENGC return RVALUE_WB_UNPROTECTED(obj) ? Qfalse : Qtrue; -#else - return Qfalse; -#endif } VALUE rb_obj_rgengc_promoted_p(VALUE obj) { - return OBJ_PROMOTED(obj) ? Qtrue : Qfalse; + return RBOOL(OBJ_PROMOTED(obj)); } size_t @@ -6979,29 +8614,23 @@ rb_obj_gc_flags(VALUE obj, ID* flags, size_t max) { size_t n = 0; static ID ID_marked; -#if USE_RGENGC static ID ID_wb_protected, ID_old, ID_marking, ID_uncollectible, ID_pinned; -#endif if (!ID_marked) { #define I(s) ID_##s = rb_intern(#s); I(marked); -#if USE_RGENGC I(wb_protected); I(old); I(marking); I(uncollectible); I(pinned); -#endif #undef I } -#if USE_RGENGC if (RVALUE_WB_UNPROTECTED(obj) == 0 && nsize_pool_caches[size_pool_idx]; - gc_report(2, objspace, "rb_gc_force_recycle: %s\n", obj_info(obj)); + struct heap_page *page = cache->using_page; + RVALUE *freelist = cache->freelist; + RUBY_DEBUG_LOG("ractor using_page:%p freelist:%p", (void *)page, (void *)freelist); - if (is_old) { - if (RVALUE_MARKED(obj)) { - objspace->rgengc.old_objects--; - } - } - CLEAR_IN_BITMAP(GET_HEAP_UNCOLLECTIBLE_BITS(obj), obj); - CLEAR_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS(obj), obj); + heap_page_freelist_append(page, freelist); -#if GC_ENABLE_INCREMENTAL_MARK - if (is_incremental_marking(objspace)) { - if (MARKED_IN_BITMAP(GET_HEAP_MARKING_BITS(obj), obj)) { - invalidate_mark_stack(&objspace->mark_stack, obj); - CLEAR_IN_BITMAP(GET_HEAP_MARKING_BITS(obj), obj); - } - CLEAR_IN_BITMAP(GET_HEAP_MARK_BITS(obj), obj); - } - else { -#endif - if (is_old || !GET_HEAP_PAGE(obj)->flags.before_sweep) { - CLEAR_IN_BITMAP(GET_HEAP_MARK_BITS(obj), obj); - } - CLEAR_IN_BITMAP(GET_HEAP_MARKING_BITS(obj), obj); -#if GC_ENABLE_INCREMENTAL_MARK + cache->using_page = NULL; + cache->freelist = NULL; } -#endif -#endif - - objspace->profile.total_freed_objects++; - - heap_page_add_freeobj(objspace, GET_HEAP_PAGE(obj), obj); +} - /* Disable counting swept_slots because there are no meaning. - * if (!MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(p), p)) { - * objspace->heap.swept_slots++; - * } - */ +void +rb_gc_force_recycle(VALUE obj) +{ + /* no-op */ } #ifndef MARK_OBJECT_ARY_BUCKET_SIZE @@ -7064,15 +8668,22 @@ rb_gc_force_recycle(VALUE obj) void rb_gc_register_mark_object(VALUE obj) { - VALUE ary_ary = GET_VM()->mark_object_ary; - VALUE ary = rb_ary_last(0, 0, ary_ary); + if (!is_pointer_to_heap(&rb_objspace, (void *)obj)) + return; - if (ary == Qnil || RARRAY_LEN(ary) >= MARK_OBJECT_ARY_BUCKET_SIZE) { - ary = rb_ary_tmp_new(MARK_OBJECT_ARY_BUCKET_SIZE); - rb_ary_push(ary_ary, ary); - } + RB_VM_LOCK_ENTER(); + { + VALUE ary_ary = GET_VM()->mark_object_ary; + VALUE ary = rb_ary_last(0, 0, ary_ary); + + if (NIL_P(ary) || RARRAY_LEN(ary) >= MARK_OBJECT_ARY_BUCKET_SIZE) { + ary = rb_ary_tmp_new(MARK_OBJECT_ARY_BUCKET_SIZE); + rb_ary_push(ary_ary, ary); + } - rb_ary_push(ary, obj); + rb_ary_push(ary, obj); + } + RB_VM_LOCK_LEAVE(); } void @@ -7129,22 +8740,25 @@ enum { (FIXNUM_P(ruby_gc_stress_mode) && (FIX2LONG(ruby_gc_stress_mode) & (1<freelist && !heap->free_pages) { - if (!heap_increment(objspace, heap)) { - heap_set_increment(objspace, 1); - heap_increment(objspace, heap); - } + if (!heap->free_pages) { + if (!heap_increment(objspace, size_pool, heap)) { + size_pool_allocatable_pages_set(objspace, size_pool, 1); + heap_increment(objspace, size_pool, heap); + } } } static int ready_to_gc(rb_objspace_t *objspace) { - if (dont_gc || during_gc || ruby_disable_gc) { - heap_ready_to_gc(objspace, heap_eden); - return FALSE; + if (dont_gc_val() || during_gc || ruby_disable_gc) { + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + heap_ready_to_gc(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool)); + } + return FALSE; } else { return TRUE; @@ -7152,7 +8766,7 @@ ready_to_gc(rb_objspace_t *objspace) } static void -gc_reset_malloc_info(rb_objspace_t *objspace) +gc_reset_malloc_info(rb_objspace_t *objspace, bool full_mark) { gc_prof_set_malloc_info(objspace); { @@ -7186,7 +8800,7 @@ gc_reset_malloc_info(rb_objspace_t *objspace) /* reset oldmalloc info */ #if RGENGC_ESTIMATE_OLDMALLOC - if (!is_full_marking(objspace)) { + if (!full_mark) { if (objspace->rgengc.oldmalloc_increase > objspace->rgengc.oldmalloc_increase_limit) { objspace->rgengc.need_major_gc |= GPR_FLAG_MAJOR_BY_OLDMALLOC; objspace->rgengc.oldmalloc_increase_limit = @@ -7197,12 +8811,12 @@ gc_reset_malloc_info(rb_objspace_t *objspace) } } - if (0) fprintf(stderr, "%d\t%d\t%u\t%u\t%d\n", - (int)rb_gc_count(), - (int)objspace->rgengc.need_major_gc, - (unsigned int)objspace->rgengc.oldmalloc_increase, - (unsigned int)objspace->rgengc.oldmalloc_increase_limit, - (unsigned int)gc_params.oldmalloc_limit_max); + if (0) fprintf(stderr, "%"PRIdSIZE"\t%d\t%"PRIuSIZE"\t%"PRIuSIZE"\t%"PRIdSIZE"\n", + rb_gc_count(), + objspace->rgengc.need_major_gc, + objspace->rgengc.oldmalloc_increase, + objspace->rgengc.oldmalloc_increase_limit, + gc_params.oldmalloc_limit_max); } else { /* major GC */ @@ -7220,42 +8834,57 @@ gc_reset_malloc_info(rb_objspace_t *objspace) } static int -garbage_collect(rb_objspace_t *objspace, int reason) +garbage_collect(rb_objspace_t *objspace, unsigned int reason) { + int ret; + + RB_VM_LOCK_ENTER(); + { #if GC_PROFILE_MORE_DETAIL - objspace->profile.prepare_time = getrusage_time(); + objspace->profile.prepare_time = getrusage_time(); #endif - gc_rest(objspace); + gc_rest(objspace); #if GC_PROFILE_MORE_DETAIL - objspace->profile.prepare_time = getrusage_time() - objspace->profile.prepare_time; + objspace->profile.prepare_time = getrusage_time() - objspace->profile.prepare_time; #endif - return gc_start(objspace, reason); + ret = gc_start(objspace, reason); + } + RB_VM_LOCK_LEAVE(); + + return ret; } static int -gc_start(rb_objspace_t *objspace, int reason) +gc_start(rb_objspace_t *objspace, unsigned int reason) { - unsigned int do_full_mark = !!((unsigned)reason & GPR_FLAG_FULL_MARK); - unsigned int immediate_mark = (unsigned)reason & GPR_FLAG_IMMEDIATE_MARK; + unsigned int do_full_mark = !!(reason & GPR_FLAG_FULL_MARK); +#if GC_ENABLE_INCREMENTAL_MARK + unsigned int immediate_mark = reason & GPR_FLAG_IMMEDIATE_MARK; +#endif /* reason may be clobbered, later, so keep set immediate_sweep here */ - objspace->flags.immediate_sweep = !!((unsigned)reason & GPR_FLAG_IMMEDIATE_SWEEP); + objspace->flags.immediate_sweep = !!(reason & GPR_FLAG_IMMEDIATE_SWEEP); + + /* Explicitly enable compaction (GC.compact) */ + objspace->flags.during_compacting = !!(reason & GPR_FLAG_COMPACT); if (!heap_allocated_pages) return FALSE; /* heap is not ready */ if (!(reason & GPR_FLAG_METHOD) && !ready_to_gc(objspace)) return TRUE; /* GC is not allowed */ GC_ASSERT(gc_mode(objspace) == gc_mode_none); - GC_ASSERT(!is_lazy_sweeping(heap_eden)); + GC_ASSERT(!is_lazy_sweeping(objspace)); GC_ASSERT(!is_incremental_marking(objspace)); + + unsigned int lock_lev; + gc_enter(objspace, gc_enter_event_start, &lock_lev); + #if RGENGC_CHECK_MODE >= 2 gc_verify_internal_consistency(objspace); #endif - gc_enter(objspace, "gc_start"); - if (ruby_gc_stressful) { int flag = FIXNUM_P(ruby_gc_stress_mode) ? FIX2INT(ruby_gc_stress_mode) : 0; @@ -7266,7 +8895,6 @@ gc_start(rb_objspace_t *objspace, int reason) objspace->flags.immediate_sweep = !(flag & (1<rgengc.need_major_gc) { reason |= objspace->rgengc.need_major_gc; do_full_mark = TRUE; @@ -7277,7 +8905,6 @@ gc_start(rb_objspace_t *objspace, int reason) } objspace->rgengc.need_major_gc = GPR_FLAG_NONE; -#endif } if (do_full_mark && (reason & GPR_FLAG_MAJOR_MASK) == 0) { @@ -7299,7 +8926,7 @@ gc_start(rb_objspace_t *objspace, int reason) if (objspace->flags.immediate_sweep) reason |= GPR_FLAG_IMMEDIATE_SWEEP; - gc_report(1, objspace, "gc_start(reason: %d) => %u, %d, %d\n", + gc_report(1, objspace, "gc_start(reason: %x) => %u, %d, %d\n", reason, do_full_mark, !is_incremental_marking(objspace), objspace->flags.immediate_sweep); @@ -7329,7 +8956,7 @@ gc_start(rb_objspace_t *objspace, int reason) objspace->profile.total_allocated_objects_at_gc_start = objspace->total_allocated_objects; objspace->profile.heap_used_at_gc_start = heap_allocated_pages; gc_prof_setup_new_record(objspace, reason); - gc_reset_malloc_info(objspace); + gc_reset_malloc_info(objspace, do_full_mark); rb_transient_heap_start_marking(do_full_mark); gc_event_hook(objspace, RUBY_INTERNAL_EVENT_GC_START, 0 /* TODO: pass minor/immediate flag? */); @@ -7341,7 +8968,7 @@ gc_start(rb_objspace_t *objspace, int reason) } gc_prof_timer_stop(objspace); - gc_exit(objspace, "gc_start"); + gc_exit(objspace, gc_enter_event_start, &lock_lev); return TRUE; } @@ -7349,28 +8976,27 @@ static void gc_rest(rb_objspace_t *objspace) { int marking = is_incremental_marking(objspace); - int sweeping = is_lazy_sweeping(heap_eden); + int sweeping = is_lazy_sweeping(objspace); if (marking || sweeping) { - gc_enter(objspace, "gc_rest"); + unsigned int lock_lev; + gc_enter(objspace, gc_enter_event_rest, &lock_lev); if (RGENGC_CHECK_MODE >= 2) gc_verify_internal_consistency(objspace); if (is_incremental_marking(objspace)) { - PUSH_MARK_FUNC_DATA(NULL); - gc_marks_rest(objspace); - POP_MARK_FUNC_DATA(); - } - if (is_lazy_sweeping(heap_eden)) { + gc_marks_rest(objspace); + } + if (is_lazy_sweeping(objspace)) { gc_sweep_rest(objspace); } - gc_exit(objspace, "gc_rest"); + gc_exit(objspace, gc_enter_event_rest, &lock_lev); } } struct objspace_and_reason { rb_objspace_t *objspace; - int reason; + unsigned int reason; }; static void @@ -7379,16 +9005,14 @@ gc_current_status_fill(rb_objspace_t *objspace, char *buff) int i = 0; if (is_marking(objspace)) { buff[i++] = 'M'; -#if USE_RGENGC if (is_full_marking(objspace)) buff[i++] = 'F'; #if GC_ENABLE_INCREMENTAL_MARK if (is_incremental_marking(objspace)) buff[i++] = 'I'; -#endif #endif } else if (is_sweeping(objspace)) { buff[i++] = 'S'; - if (is_lazy_sweeping(heap_eden)) buff[i++] = 'L'; + if (is_lazy_sweeping(objspace)) buff[i++] = 'L'; } else { buff[i++] = 'N'; @@ -7443,39 +9067,147 @@ gc_record(rb_objspace_t *objspace, int direction, const char *event) #endif } } -#else /* PRINT_ENTER_EXIT_TICK */ -static inline void -gc_record(rb_objspace_t *objspace, int direction, const char *event) +#else /* PRINT_ENTER_EXIT_TICK */ +static inline void +gc_record(rb_objspace_t *objspace, int direction, const char *event) +{ + /* null */ +} +#endif /* PRINT_ENTER_EXIT_TICK */ + +static const char * +gc_enter_event_cstr(enum gc_enter_event event) +{ + switch (event) { + case gc_enter_event_start: return "start"; + case gc_enter_event_mark_continue: return "mark_continue"; + case gc_enter_event_sweep_continue: return "sweep_continue"; + case gc_enter_event_rest: return "rest"; + case gc_enter_event_finalizer: return "finalizer"; + case gc_enter_event_rb_memerror: return "rb_memerror"; + } + return NULL; +} + +static void +gc_enter_count(enum gc_enter_event event) +{ + switch (event) { + case gc_enter_event_start: RB_DEBUG_COUNTER_INC(gc_enter_start); break; + case gc_enter_event_mark_continue: RB_DEBUG_COUNTER_INC(gc_enter_mark_continue); break; + case gc_enter_event_sweep_continue: RB_DEBUG_COUNTER_INC(gc_enter_sweep_continue); break; + case gc_enter_event_rest: RB_DEBUG_COUNTER_INC(gc_enter_rest); break; + case gc_enter_event_finalizer: RB_DEBUG_COUNTER_INC(gc_enter_finalizer); break; + case gc_enter_event_rb_memerror: /* nothing */ break; + } +} + +#ifndef MEASURE_GC +#define MEASURE_GC (objspace->flags.measure_gc) +#endif + +static bool +gc_enter_event_measure_p(rb_objspace_t *objspace, enum gc_enter_event event) +{ + if (!MEASURE_GC) return false; + + switch (event) { + case gc_enter_event_start: + case gc_enter_event_mark_continue: + case gc_enter_event_sweep_continue: + case gc_enter_event_rest: + return true; + + default: + // case gc_enter_event_finalizer: + // case gc_enter_event_rb_memerror: + return false; + } +} + +static bool current_process_time(struct timespec *ts); + +static void +gc_enter_clock(rb_objspace_t *objspace, enum gc_enter_event event) { - /* null */ + if (gc_enter_event_measure_p(objspace, event)) { + if (!current_process_time(&objspace->profile.start_time)) { + objspace->profile.start_time.tv_sec = 0; + objspace->profile.start_time.tv_nsec = 0; + } + } +} + +static void +gc_exit_clock(rb_objspace_t *objspace, enum gc_enter_event event) +{ + if (gc_enter_event_measure_p(objspace, event)) { + struct timespec end_time; + + if ((objspace->profile.start_time.tv_sec > 0 || + objspace->profile.start_time.tv_nsec > 0) && + current_process_time(&end_time)) { + + if (end_time.tv_sec < objspace->profile.start_time.tv_sec) { + return; // ignore + } + else { + uint64_t ns = + (uint64_t)(end_time.tv_sec - objspace->profile.start_time.tv_sec) * (1000 * 1000 * 1000) + + (end_time.tv_nsec - objspace->profile.start_time.tv_nsec); + objspace->profile.total_time_ns += ns; + } + } + } } -#endif /* PRINT_ENTER_EXIT_TICK */ static inline void -gc_enter(rb_objspace_t *objspace, const char *event) +gc_enter(rb_objspace_t *objspace, enum gc_enter_event event, unsigned int *lock_lev) { - GC_ASSERT(during_gc == 0); + RB_VM_LOCK_ENTER_LEV(lock_lev); + + gc_enter_clock(objspace, event); + + switch (event) { + case gc_enter_event_rest: + if (!is_marking(objspace)) break; + // fall through + case gc_enter_event_start: + case gc_enter_event_mark_continue: + // stop other ractors + rb_vm_barrier(); + break; + default: + break; + } + + gc_enter_count(event); + if (UNLIKELY(during_gc != 0)) rb_bug("during_gc != 0"); if (RGENGC_CHECK_MODE >= 3) gc_verify_internal_consistency(objspace); mjit_gc_start_hook(); during_gc = TRUE; - gc_report(1, objspace, "gc_enter: %s [%s]\n", event, gc_current_status(objspace)); - gc_record(objspace, 0, event); + RUBY_DEBUG_LOG("%s (%s)",gc_enter_event_cstr(event), gc_current_status(objspace)); + gc_report(1, objspace, "gc_enter: %s [%s]\n", gc_enter_event_cstr(event), gc_current_status(objspace)); + gc_record(objspace, 0, gc_enter_event_cstr(event)); gc_event_hook(objspace, RUBY_INTERNAL_EVENT_GC_ENTER, 0); /* TODO: which parameter should be passed? */ } static inline void -gc_exit(rb_objspace_t *objspace, const char *event) +gc_exit(rb_objspace_t *objspace, enum gc_enter_event event, unsigned int *lock_lev) { GC_ASSERT(during_gc != 0); gc_event_hook(objspace, RUBY_INTERNAL_EVENT_GC_EXIT, 0); /* TODO: which parameter should be passsed? */ - gc_record(objspace, 1, event); - gc_report(1, objspace, "gc_exit: %s [%s]\n", event, gc_current_status(objspace)); + gc_record(objspace, 1, gc_enter_event_cstr(event)); + RUBY_DEBUG_LOG("%s (%s)", gc_enter_event_cstr(event), gc_current_status(objspace)); + gc_report(1, objspace, "gc_exit: %s [%s]\n", gc_enter_event_cstr(event), gc_current_status(objspace)); during_gc = FALSE; mjit_gc_exit_hook(); + gc_exit_clock(objspace, event); + RB_VM_LOCK_LEAVE_LEV(lock_lev); } static void * @@ -7486,9 +9218,9 @@ gc_with_gvl(void *ptr) } static int -garbage_collect_with_gvl(rb_objspace_t *objspace, int reason) +garbage_collect_with_gvl(rb_objspace_t *objspace, unsigned int reason) { - if (dont_gc) return TRUE; + if (dont_gc_val()) return TRUE; if (ruby_thread_has_gvl_p()) { return garbage_collect(objspace, reason); } @@ -7508,17 +9240,31 @@ garbage_collect_with_gvl(rb_objspace_t *objspace, int reason) } static VALUE -gc_start_internal(rb_execution_context_t *ec, VALUE self, VALUE full_mark, VALUE immediate_mark, VALUE immediate_sweep) +gc_start_internal(rb_execution_context_t *ec, VALUE self, VALUE full_mark, VALUE immediate_mark, VALUE immediate_sweep, VALUE compact) { rb_objspace_t *objspace = &rb_objspace; - int reason = GPR_FLAG_FULL_MARK | - GPR_FLAG_IMMEDIATE_MARK | - GPR_FLAG_IMMEDIATE_SWEEP | - GPR_FLAG_METHOD; + unsigned int reason = (GPR_FLAG_FULL_MARK | + GPR_FLAG_IMMEDIATE_MARK | + GPR_FLAG_IMMEDIATE_SWEEP | + GPR_FLAG_METHOD); + + /* For now, compact implies full mark / sweep, so ignore other flags */ + if (RTEST(compact)) { + /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for + * the read barrier, so we must disable compaction. */ +#if !defined(__MINGW32__) && !defined(_WIN32) + if (!USE_MMAP_ALIGNED_ALLOC) { + rb_raise(rb_eNotImpError, "Compaction isn't available on this platform"); + } +#endif - if (!RTEST(full_mark)) reason &= ~GPR_FLAG_FULL_MARK; - if (!RTEST(immediate_mark)) reason &= ~GPR_FLAG_IMMEDIATE_MARK; - if (!RTEST(immediate_sweep)) reason &= ~GPR_FLAG_IMMEDIATE_SWEEP; + reason |= GPR_FLAG_COMPACT; + } + else { + if (!RTEST(full_mark)) reason &= ~GPR_FLAG_FULL_MARK; + if (!RTEST(immediate_mark)) reason &= ~GPR_FLAG_IMMEDIATE_MARK; + if (!RTEST(immediate_sweep)) reason &= ~GPR_FLAG_IMMEDIATE_SWEEP; + } garbage_collect(objspace, reason); gc_finalize_deferred(objspace); @@ -7529,9 +9275,7 @@ gc_start_internal(rb_execution_context_t *ec, VALUE self, VALUE full_mark, VALUE static int gc_is_moveable_obj(rb_objspace_t *objspace, VALUE obj) { - if (SPECIAL_CONST_P(obj)) { - return FALSE; - } + GC_ASSERT(!SPECIAL_CONST_P(obj)); switch (BUILTIN_TYPE(obj)) { case T_NONE: @@ -7539,7 +9283,6 @@ gc_is_moveable_obj(rb_objspace_t *objspace, VALUE obj) case T_MOVED: case T_ZOMBIE: return FALSE; - break; case T_SYMBOL: if (DYNAMIC_SYM_P(obj) && (RSYMBOL(obj)->id & ~ID_SCOPE_MASK)) { return FALSE; @@ -7564,12 +9307,19 @@ gc_is_moveable_obj(rb_objspace_t *objspace, VALUE obj) case T_NODE: case T_CLASS: if (FL_TEST(obj, FL_FINALIZE)) { + /* The finalizer table is a numtable. It looks up objects by address. + * We can't mark the keys in the finalizer table because that would + * prevent the objects from being collected. This check prevents + * objects that are keys in the finalizer table from being moved + * without directly pinning them. */ if (st_is_member(finalizer_table, obj)) { return FALSE; } } - return !RVALUE_PINNED(obj); - break; + GC_ASSERT(RVALUE_MARKED(obj)); + GC_ASSERT(!RVALUE_PINNED(obj)); + + return TRUE; default: rb_bug("gc_is_moveable_obj: unreachable (%d)", (int)BUILTIN_TYPE(obj)); @@ -7580,7 +9330,7 @@ gc_is_moveable_obj(rb_objspace_t *objspace, VALUE obj) } static VALUE -gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, VALUE moved_list) +gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) { int marked; int wb_unprotected; @@ -7592,7 +9342,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, VALUE moved_list) gc_report(4, objspace, "Moving object: %p -> %p\n", (void*)scan, (void *)free); GC_ASSERT(BUILTIN_TYPE(scan) != T_NONE); - GC_ASSERT(BUILTIN_TYPE(free) == T_NONE); + GC_ASSERT(!MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(free), free)); /* Save off bits for current object. */ marked = rb_objspace_marked_object_p((VALUE)src); @@ -7600,31 +9350,38 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, VALUE moved_list) uncollectible = RVALUE_UNCOLLECTIBLE((VALUE)src); marking = RVALUE_MARKING((VALUE)src); - objspace->total_allocated_objects++; - /* Clear bits for eventual T_MOVED */ CLEAR_IN_BITMAP(GET_HEAP_MARK_BITS((VALUE)src), (VALUE)src); CLEAR_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS((VALUE)src), (VALUE)src); CLEAR_IN_BITMAP(GET_HEAP_UNCOLLECTIBLE_BITS((VALUE)src), (VALUE)src); CLEAR_IN_BITMAP(GET_HEAP_MARKING_BITS((VALUE)src), (VALUE)src); - if (FL_TEST(src, FL_EXIVAR)) { + if (FL_TEST((VALUE)src, FL_EXIVAR)) { + /* Same deal as below. Generic ivars are held in st tables. + * Resizing the table could cause a GC to happen and we can't allow it */ + VALUE already_disabled = rb_gc_disable_no_rest(); rb_mv_generic_ivar((VALUE)src, (VALUE)dest); + if (already_disabled == Qfalse) rb_objspace_gc_enable(objspace); } - VALUE id; + st_data_t srcid = (st_data_t)src, id; /* If the source object's object_id has been seen, we need to update * the object to object id mapping. */ - if (st_lookup(objspace->obj_to_id_tbl, (VALUE)src, &id)) { + if (st_lookup(objspace->obj_to_id_tbl, srcid, &id)) { gc_report(4, objspace, "Moving object with seen id: %p -> %p\n", (void *)src, (void *)dest); - st_delete(objspace->obj_to_id_tbl, (st_data_t *)&src, 0); - st_insert(objspace->obj_to_id_tbl, (VALUE)dest, id); + /* inserting in the st table can cause the GC to run. We need to + * prevent re-entry in to the GC since `gc_move` is running in the GC, + * so temporarily disable the GC around the st table mutation */ + VALUE already_disabled = rb_gc_disable_no_rest(); + st_delete(objspace->obj_to_id_tbl, &srcid, 0); + st_insert(objspace->obj_to_id_tbl, (st_data_t)dest, id); + if (already_disabled == Qfalse) rb_objspace_gc_enable(objspace); } /* Move the object */ - memcpy(dest, src, sizeof(RVALUE)); - memset(src, 0, sizeof(RVALUE)); + memcpy(dest, src, slot_size); + memset(src, 0, slot_size); /* Set bits for object in new location */ if (marking) { @@ -7657,102 +9414,13 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, VALUE moved_list) /* Assign forwarding address */ src->as.moved.flags = T_MOVED; + src->as.moved.dummy = Qundef; src->as.moved.destination = (VALUE)dest; - src->as.moved.next = moved_list; GC_ASSERT(BUILTIN_TYPE((VALUE)dest) != T_NONE); return (VALUE)src; } -struct heap_cursor { - RVALUE *slot; - size_t index; - struct heap_page *page; - rb_objspace_t * objspace; -}; - -static void -advance_cursor(struct heap_cursor *free, struct heap_page **page_list) -{ - if (free->slot == free->page->start + free->page->total_slots - 1) { - free->index++; - free->page = page_list[free->index]; - free->slot = free->page->start; - } - else { - free->slot++; - } -} - -static void -retreat_cursor(struct heap_cursor *scan, struct heap_page **page_list) -{ - if (scan->slot == scan->page->start) { - scan->index--; - scan->page = page_list[scan->index]; - scan->slot = scan->page->start + scan->page->total_slots - 1; - } - else { - scan->slot--; - } -} - -static int -not_met(struct heap_cursor *free, struct heap_cursor *scan) -{ - if (free->index < scan->index) - return 1; - - if (free->index > scan->index) - return 0; - - return free->slot < scan->slot; -} - -static void -init_cursors(rb_objspace_t *objspace, struct heap_cursor *free, struct heap_cursor *scan, struct heap_page **page_list) -{ - struct heap_page *page; - size_t total_pages = heap_eden->total_pages; - page = page_list[0]; - - free->index = 0; - free->page = page; - free->slot = page->start; - free->objspace = objspace; - - page = page_list[total_pages - 1]; - scan->index = total_pages - 1; - scan->page = page; - scan->slot = page->start + page->total_slots - 1; - scan->objspace = objspace; -} - -static int -count_pinned(struct heap_page *page) -{ - int pinned = 0; - int i; - - for (i = 0; i < HEAP_PAGE_BITMAP_LIMIT; i++) { - pinned += popcount_bits(page->pinned_bits[i]); - } - - return pinned; -} - -static int -compare_pinned(const void *left, const void *right, void *dummy) -{ - struct heap_page *left_page; - struct heap_page *right_page; - - left_page = *(struct heap_page * const *)left; - right_page = *(struct heap_page * const *)right; - - return right_page->pinned_slots - left_page->pinned_slots; -} - static int compare_free_slots(const void *left, const void *right, void *dummy) { @@ -7762,114 +9430,43 @@ compare_free_slots(const void *left, const void *right, void *dummy) left_page = *(struct heap_page * const *)left; right_page = *(struct heap_page * const *)right; - return right_page->free_slots - left_page->free_slots; -} - -typedef int page_compare_func_t(const void *, const void *, void *); - -static struct heap_page ** -allocate_page_list(rb_objspace_t *objspace, page_compare_func_t *comparator) -{ - size_t total_pages = heap_eden->total_pages; - size_t size = size_mul_or_raise(total_pages, sizeof(struct heap_page *), rb_eRuntimeError); - struct heap_page *page = 0, **page_list = malloc(size); - int i = 0; - - list_for_each(&heap_eden->pages, page, page_node) { - page_list[i++] = page; - page->pinned_slots = count_pinned(page); - GC_ASSERT(page != NULL); - } - GC_ASSERT(total_pages > 0); - GC_ASSERT((size_t)i == total_pages); - - ruby_qsort(page_list, total_pages, sizeof(struct heap_page *), comparator, NULL); - - return page_list; + return left_page->free_slots - right_page->free_slots; } -static VALUE -gc_compact_heap(rb_objspace_t *objspace, page_compare_func_t *comparator) +static void +gc_sort_heap_by_empty_slots(rb_objspace_t *objspace) { - struct heap_cursor free_cursor; - struct heap_cursor scan_cursor; - struct heap_page **page_list; - VALUE moved_list; + for (int j = 0; j < SIZE_POOL_COUNT; j++) { + rb_size_pool_t *size_pool = &size_pools[j]; - moved_list = Qfalse; - memset(objspace->rcompactor.considered_count_table, 0, T_MASK * sizeof(size_t)); - memset(objspace->rcompactor.moved_count_table, 0, T_MASK * sizeof(size_t)); - - page_list = allocate_page_list(objspace, comparator); - - init_cursors(objspace, &free_cursor, &scan_cursor, page_list); - - /* Two finger algorithm */ - while (not_met(&free_cursor, &scan_cursor)) { - /* Free cursor movement */ - - /* Unpoison free_cursor slot */ - void *free_slot_poison = asan_poisoned_object_p((VALUE)free_cursor.slot); - asan_unpoison_object((VALUE)free_cursor.slot, false); - - while (BUILTIN_TYPE(free_cursor.slot) != T_NONE && not_met(&free_cursor, &scan_cursor)) { - /* Re-poison slot if it's not the one we want */ - if (free_slot_poison) { - GC_ASSERT(BUILTIN_TYPE(free_cursor.slot) == T_NONE); - asan_poison_object((VALUE)free_cursor.slot); - } + size_t total_pages = SIZE_POOL_EDEN_HEAP(size_pool)->total_pages; + size_t size = size_mul_or_raise(total_pages, sizeof(struct heap_page *), rb_eRuntimeError); + struct heap_page *page = 0, **page_list = malloc(size); + size_t i = 0; - advance_cursor(&free_cursor, page_list); - - /* Unpoison free_cursor slot */ - free_slot_poison = asan_poisoned_object_p((VALUE)free_cursor.slot); - asan_unpoison_object((VALUE)free_cursor.slot, false); + list_for_each(&SIZE_POOL_EDEN_HEAP(size_pool)->pages, page, page_node) { + page_list[i++] = page; + GC_ASSERT(page); } - /* Unpoison scan_cursor slot */ - void *scan_slot_poison = asan_poisoned_object_p((VALUE)scan_cursor.slot); - asan_unpoison_object((VALUE)scan_cursor.slot, false); + GC_ASSERT((size_t)i == total_pages); - /* Scan cursor movement */ - objspace->rcompactor.considered_count_table[BUILTIN_TYPE((VALUE)scan_cursor.slot)]++; + /* Sort the heap so "filled pages" are first. `heap_add_page` adds to the + * head of the list, so empty pages will end up at the start of the heap */ + ruby_qsort(page_list, total_pages, sizeof(struct heap_page *), compare_free_slots, NULL); - while (!gc_is_moveable_obj(objspace, (VALUE)scan_cursor.slot) && not_met(&free_cursor, &scan_cursor)) { + /* Reset the eden heap */ + list_head_init(&SIZE_POOL_EDEN_HEAP(size_pool)->pages); - /* Re-poison slot if it's not the one we want */ - if (scan_slot_poison) { - GC_ASSERT(BUILTIN_TYPE(scan_cursor.slot) == T_NONE); - asan_poison_object((VALUE)scan_cursor.slot); + for (i = 0; i < total_pages; i++) { + list_add(&SIZE_POOL_EDEN_HEAP(size_pool)->pages, &page_list[i]->page_node); + if (page_list[i]->free_slots != 0) { + heap_add_freepage(SIZE_POOL_EDEN_HEAP(size_pool), page_list[i]); } - - retreat_cursor(&scan_cursor, page_list); - - /* Unpoison scan_cursor slot */ - scan_slot_poison = asan_poisoned_object_p((VALUE)scan_cursor.slot); - asan_unpoison_object((VALUE)scan_cursor.slot, false); - - objspace->rcompactor.considered_count_table[BUILTIN_TYPE((VALUE)scan_cursor.slot)]++; } - if (not_met(&free_cursor, &scan_cursor)) { - objspace->rcompactor.moved_count_table[BUILTIN_TYPE((VALUE)scan_cursor.slot)]++; - - GC_ASSERT(BUILTIN_TYPE(free_cursor.slot) == T_NONE); - GC_ASSERT(BUILTIN_TYPE(scan_cursor.slot) != T_NONE); - GC_ASSERT(BUILTIN_TYPE(scan_cursor.slot) != T_MOVED); - - moved_list = gc_move(objspace, (VALUE)scan_cursor.slot, (VALUE)free_cursor.slot, moved_list); - - GC_ASSERT(BUILTIN_TYPE(free_cursor.slot) != T_MOVED); - GC_ASSERT(BUILTIN_TYPE(free_cursor.slot) != T_NONE); - GC_ASSERT(BUILTIN_TYPE(scan_cursor.slot) == T_MOVED); - - advance_cursor(&free_cursor, page_list); - retreat_cursor(&scan_cursor, page_list); - } + free(page_list); } - free(page_list); - - return moved_list; } static void @@ -7894,11 +9491,9 @@ gc_ref_update_object(rb_objspace_t * objspace, VALUE v) { VALUE *ptr = ROBJECT_IVPTR(v); - if (ptr) { - uint32_t i, len = ROBJECT_NUMIV(v); - for (i = 0; i < len; i++) { - UPDATE_IF_MOVED(objspace, ptr[i]); - } + uint32_t i, len = ROBJECT_NUMIV(v); + for (i = 0; i < len; i++) { + UPDATE_IF_MOVED(objspace, ptr[i]); } } @@ -8052,13 +9647,16 @@ gc_ref_update_imemo(rb_objspace_t *objspace, VALUE obj) case imemo_env: { rb_env_t *env = (rb_env_t *)obj; - TYPED_UPDATE_IF_MOVED(objspace, rb_iseq_t *, env->iseq); - UPDATE_IF_MOVED(objspace, env->ep[VM_ENV_DATA_INDEX_ENV]); - gc_update_values(objspace, (long)env->env_size, (VALUE *)env->env); + if (LIKELY(env->ep)) { + // just after newobj() can be NULL here. + TYPED_UPDATE_IF_MOVED(objspace, rb_iseq_t *, env->iseq); + UPDATE_IF_MOVED(objspace, env->ep[VM_ENV_DATA_INDEX_ENV]); + gc_update_values(objspace, (long)env->env_size, (VALUE *)env->env); + } } break; case imemo_cref: - UPDATE_IF_MOVED(objspace, RANY(obj)->as.imemo.cref.klass); + UPDATE_IF_MOVED(objspace, RANY(obj)->as.imemo.cref.klass_or_self); TYPED_UPDATE_IF_MOVED(objspace, struct rb_cref_struct *, RANY(obj)->as.imemo.cref.next); UPDATE_IF_MOVED(objspace, RANY(obj)->as.imemo.cref.refinements); break; @@ -8086,8 +9684,33 @@ gc_ref_update_imemo(rb_objspace_t *objspace, VALUE obj) case imemo_ast: rb_ast_update_references((rb_ast_t *)obj); break; + case imemo_callcache: + { + const struct rb_callcache *cc = (const struct rb_callcache *)obj; + if (cc->klass) { + UPDATE_IF_MOVED(objspace, cc->klass); + if (!is_live_object(objspace, cc->klass)) { + *((VALUE *)(&cc->klass)) = (VALUE)0; + } + } + + if (cc->cme_) { + TYPED_UPDATE_IF_MOVED(objspace, struct rb_callable_method_entry_struct *, cc->cme_); + if (!is_live_object(objspace, (VALUE)cc->cme_)) { + *((struct rb_callable_method_entry_struct **)(&cc->cme_)) = (struct rb_callable_method_entry_struct *)0; + } + } + } + break; + case imemo_constcache: + { + const struct iseq_inline_constant_cache_entry *ice = (struct iseq_inline_constant_cache_entry *)obj; + UPDATE_IF_MOVED(objspace, ice->value); + } + break; case imemo_parser_strterm: case imemo_tmpbuf: + case imemo_callinfo: break; default: rb_bug("not reachable %d", imemo_type(obj)); @@ -8115,7 +9738,7 @@ rb_gc_location(VALUE value) VALUE destination; - if (!SPECIAL_CONST_P((void *)value)) { + if (!SPECIAL_CONST_P(value)) { void *poisoned = asan_poisoned_object_p(value); asan_unpoison_object(value, false); @@ -8160,6 +9783,60 @@ update_m_tbl(rb_objspace_t *objspace, struct rb_id_table *tbl) } } +static enum rb_id_table_iterator_result +update_cc_tbl_i(ID id, VALUE ccs_ptr, void *data) +{ + rb_objspace_t *objspace = (rb_objspace_t *)data; + struct rb_class_cc_entries *ccs = (struct rb_class_cc_entries *)ccs_ptr; + VM_ASSERT(vm_ccs_p(ccs)); + + if (gc_object_moved_p(objspace, (VALUE)ccs->cme)) { + ccs->cme = (const rb_callable_method_entry_t *)rb_gc_location((VALUE)ccs->cme); + } + + for (int i=0; ilen; i++) { + if (gc_object_moved_p(objspace, (VALUE)ccs->entries[i].ci)) { + ccs->entries[i].ci = (struct rb_callinfo *)rb_gc_location((VALUE)ccs->entries[i].ci); + } + if (gc_object_moved_p(objspace, (VALUE)ccs->entries[i].cc)) { + ccs->entries[i].cc = (struct rb_callcache *)rb_gc_location((VALUE)ccs->entries[i].cc); + } + } + + // do not replace + return ID_TABLE_CONTINUE; +} + +static void +update_cc_tbl(rb_objspace_t *objspace, VALUE klass) +{ + struct rb_id_table *tbl = RCLASS_CC_TBL(klass); + if (tbl) { + rb_id_table_foreach_with_replace(tbl, update_cc_tbl_i, 0, objspace); + } +} + +static enum rb_id_table_iterator_result +update_cvc_tbl_i(ID id, VALUE cvc_entry, void *data) +{ + struct rb_cvar_class_tbl_entry *entry; + + entry = (struct rb_cvar_class_tbl_entry *)cvc_entry; + + entry->class_value = rb_gc_location(entry->class_value); + + return ID_TABLE_CONTINUE; +} + +static void +update_cvc_tbl(rb_objspace_t *objspace, VALUE klass) +{ + struct rb_id_table *tbl = RCLASS_CVC_TBL(klass); + if (tbl) { + rb_id_table_foreach_with_replace(tbl, update_cvc_tbl_i, 0, objspace); + } +} + static enum rb_id_table_iterator_result update_const_table(VALUE value, void *data) { @@ -8193,12 +9870,26 @@ update_subclass_entries(rb_objspace_t *objspace, rb_subclass_entry_t *entry) } } +static int +update_iv_index_tbl_i(st_data_t key, st_data_t value, st_data_t arg) +{ + rb_objspace_t *objspace = (rb_objspace_t *)arg; + struct rb_iv_index_tbl_entry *ent = (struct rb_iv_index_tbl_entry *)value; + UPDATE_IF_MOVED(objspace, ent->class_value); + return ST_CONTINUE; +} + static void update_class_ext(rb_objspace_t *objspace, rb_classext_t *ext) { UPDATE_IF_MOVED(objspace, ext->origin_); UPDATE_IF_MOVED(objspace, ext->refined_class); update_subclass_entries(objspace, ext->subclasses); + + // ext->iv_index_tbl + if (ext->iv_index_tbl) { + st_foreach(ext->iv_index_tbl, update_iv_index_tbl_i, (st_data_t)objspace); + } } static void @@ -8206,7 +9897,7 @@ gc_update_object_references(rb_objspace_t *objspace, VALUE obj) { RVALUE *any = RANY(obj); - gc_report(4, objspace, "update-refs: %p ->", (void *)obj); + gc_report(4, objspace, "update-refs: %p ->\n", (void *)obj); switch (BUILTIN_TYPE(obj)) { case T_CLASS: @@ -8216,13 +9907,18 @@ gc_update_object_references(rb_objspace_t *objspace, VALUE obj) } if (!RCLASS_EXT(obj)) break; update_m_tbl(objspace, RCLASS_M_TBL(obj)); + update_cc_tbl(objspace, obj); + update_cvc_tbl(objspace, obj); + gc_update_tbl_refs(objspace, RCLASS_IV_TBL(obj)); + update_class_ext(objspace, RCLASS_EXT(obj)); update_const_tbl(objspace, RCLASS_CONST_TBL(obj)); break; case T_ICLASS: - if (FL_TEST(obj, RICLASS_IS_ORIGIN)) { + if (FL_TEST(obj, RICLASS_IS_ORIGIN) && + !FL_TEST(obj, RICLASS_ORIGIN_SHARED_MTBL)) { update_m_tbl(objspace, RCLASS_M_TBL(obj)); } if (RCLASS_SUPER((VALUE)obj)) { @@ -8234,6 +9930,7 @@ gc_update_object_references(rb_objspace_t *objspace, VALUE obj) } update_class_ext(objspace, RCLASS_EXT(obj)); update_m_tbl(objspace, RCLASS_CALLABLE_M_TBL(obj)); + update_cc_tbl(objspace, obj); break; case T_IMEMO: @@ -8264,7 +9961,19 @@ gc_update_object_references(rb_objspace_t *objspace, VALUE obj) case T_STRING: if (STR_SHARED_P(obj)) { +#if USE_RVARGC + VALUE orig_shared = any->as.string.as.heap.aux.shared; +#endif UPDATE_IF_MOVED(objspace, any->as.string.as.heap.aux.shared); +#if USE_RVARGC + VALUE shared = any->as.string.as.heap.aux.shared; + if (STR_EMBED_P(shared)) { + size_t offset = (size_t)any->as.string.as.heap.ptr - (size_t)RSTRING(orig_shared)->as.embed.ary; + GC_ASSERT(any->as.string.as.heap.ptr >= RSTRING(orig_shared)->as.embed.ary); + GC_ASSERT(offset <= (size_t)RSTRING(shared)->as.embed.len); + any->as.string.as.heap.ptr = RSTRING(shared)->as.embed.ary + offset; + } +#endif } break; @@ -8287,6 +9996,7 @@ gc_update_object_references(rb_objspace_t *objspace, VALUE obj) case T_FILE: if (any->as.file.fptr) { + UPDATE_IF_MOVED(objspace, any->as.file.fptr->self); UPDATE_IF_MOVED(objspace, any->as.file.fptr->pathv); UPDATE_IF_MOVED(objspace, any->as.file.fptr->tied_io_for_writing); UPDATE_IF_MOVED(objspace, any->as.file.fptr->writeconv_asciicompat); @@ -8350,58 +10060,50 @@ gc_update_object_references(rb_objspace_t *objspace, VALUE obj) UPDATE_IF_MOVED(objspace, RBASIC(obj)->klass); - gc_report(4, objspace, "update-refs: %p <-", (void *)obj); + gc_report(4, objspace, "update-refs: %p <-\n", (void *)obj); } static int -gc_ref_update(void *vstart, void *vend, size_t stride, void * data) +gc_ref_update(void *vstart, void *vend, size_t stride, rb_objspace_t * objspace, struct heap_page *page) { - rb_objspace_t * objspace; - struct heap_page *page; - short free_slots = 0; - VALUE v = (VALUE)vstart; - objspace = (rb_objspace_t *)data; - page = GET_HEAP_PAGE(v); asan_unpoison_memory_region(&page->freelist, sizeof(RVALUE*), false); - page->freelist = NULL; asan_poison_memory_region(&page->freelist, sizeof(RVALUE*)); page->flags.has_uncollectible_shady_objects = FALSE; page->flags.has_remembered_objects = FALSE; /* For each object on the page */ for (; v != (VALUE)vend; v += stride) { - if (!SPECIAL_CONST_P(v)) { - void *poisoned = asan_poisoned_object_p(v); - asan_unpoison_object(v, false); + void *poisoned = asan_poisoned_object_p(v); + asan_unpoison_object(v, false); - switch (BUILTIN_TYPE(v)) { - case T_NONE: - heap_page_add_freeobj(objspace, page, v); - free_slots++; - break; - case T_MOVED: - break; - case T_ZOMBIE: - break; - default: - if (RVALUE_WB_UNPROTECTED(v)) { - page->flags.has_uncollectible_shady_objects = TRUE; - } - if (RVALUE_PAGE_MARKING(page, v)) { - page->flags.has_remembered_objects = TRUE; + switch (BUILTIN_TYPE(v)) { + case T_NONE: + case T_MOVED: + case T_ZOMBIE: + break; + default: + if (RVALUE_WB_UNPROTECTED(v)) { + page->flags.has_uncollectible_shady_objects = TRUE; + } + if (RVALUE_PAGE_MARKING(page, v)) { + page->flags.has_remembered_objects = TRUE; + } + if (page->flags.before_sweep) { + if (RVALUE_MARKED(v)) { + gc_update_object_references(objspace, v); } + } + else { gc_update_object_references(objspace, v); } + } - if (poisoned) { - GC_ASSERT(BUILTIN_TYPE(v) == T_NONE); - asan_poison_object(v); - } + if (poisoned) { + asan_poison_object(v); } } - page->free_slots = free_slots; return 0; } @@ -8409,14 +10111,34 @@ extern rb_symbols_t ruby_global_symbols; #define global_symbols ruby_global_symbols static void -gc_update_references(rb_objspace_t * objspace) +gc_update_references(rb_objspace_t *objspace) { rb_execution_context_t *ec = GET_EC(); rb_vm_t *vm = rb_ec_vm_ptr(ec); - objspace_each_objects_without_setup(objspace, gc_ref_update, objspace); + struct heap_page *page = NULL; + + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + bool should_set_mark_bits = TRUE; + rb_size_pool_t *size_pool = &size_pools[i]; + rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + + list_for_each(&heap->pages, page, page_node) { + uintptr_t start = (uintptr_t)page->start; + uintptr_t end = start + (page->total_slots * size_pool->slot_size); + + gc_ref_update((void *)start, (void *)end, size_pool->slot_size, objspace, page); + if (page == heap->sweeping_page) { + should_set_mark_bits = FALSE; + } + if (should_set_mark_bits) { + gc_setup_mark_bits(page); + } + } + } rb_vm_update_references(vm); rb_transient_heap_update_references(); + rb_gc_update_global_tbl(); global_symbols.ids = rb_gc_location(global_symbols.ids); global_symbols.dsymbol_fstr_hash = rb_gc_location(global_symbols.dsymbol_fstr_hash); gc_update_tbl_refs(objspace, objspace->obj_to_id_tbl); @@ -8425,54 +10147,29 @@ gc_update_references(rb_objspace_t * objspace) gc_update_table_refs(objspace, finalizer_table); } -static VALUE type_sym(size_t type); - -static VALUE -gc_compact_stats(rb_objspace_t *objspace) -{ - size_t i; - VALUE h = rb_hash_new(); - VALUE considered = rb_hash_new(); - VALUE moved = rb_hash_new(); - - for (i=0; ircompactor.considered_count_table[i])); - } - - for (i=0; ircompactor.moved_count_table[i])); - } - - rb_hash_aset(h, ID2SYM(rb_intern("considered")), considered); - rb_hash_aset(h, ID2SYM(rb_intern("moved")), moved); - - return h; -} - -static void gc_compact_after_gc(rb_objspace_t *objspace, int use_toward_empty, int use_double_pages, int use_verifier); - -static void -gc_compact(rb_objspace_t *objspace, int use_toward_empty, int use_double_pages, int use_verifier) -{ - - objspace->flags.during_compacting = TRUE; - { - /* pin objects referenced by maybe pointers */ - garbage_collect(objspace, GPR_DEFAULT_REASON); - /* compact */ - gc_compact_after_gc(objspace, use_toward_empty, use_double_pages, use_verifier); - } - objspace->flags.during_compacting = FALSE; -} - static VALUE -rb_gc_compact(rb_execution_context_t *ec, VALUE self) +gc_compact_stats(rb_execution_context_t *ec, VALUE self) { + size_t i; rb_objspace_t *objspace = &rb_objspace; - if (dont_gc) return Qnil; + VALUE h = rb_hash_new(); + VALUE considered = rb_hash_new(); + VALUE moved = rb_hash_new(); + + for (i=0; ircompactor.considered_count_table[i]) { + rb_hash_aset(considered, type_sym(i), SIZET2NUM(objspace->rcompactor.considered_count_table[i])); + } + + if (objspace->rcompactor.moved_count_table[i]) { + rb_hash_aset(moved, type_sym(i), SIZET2NUM(objspace->rcompactor.moved_count_table[i])); + } + } + + rb_hash_aset(h, ID2SYM(rb_intern("considered")), considered); + rb_hash_aset(h, ID2SYM(rb_intern("moved")), moved); - gc_compact(objspace, FALSE, FALSE, FALSE); - return gc_compact_stats(objspace); + return h; } static void @@ -8509,7 +10206,9 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) case T_ZOMBIE: break; default: - rb_objspace_reachable_objects_from(v, reachable_object_check_moved_i, (void *)v); + if (!rb_objspace_garbage_object_p(v)) { + rb_objspace_reachable_objects_from(v, reachable_object_check_moved_i, (void *)v); + } } if (poisoned) { @@ -8523,151 +10222,46 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) } static VALUE -gc_check_references_for_moved(rb_objspace_t *objspace) -{ - objspace_reachable_objects_from_root(objspace, root_obj_check_moved_i, NULL); - objspace_each_objects(objspace, heap_check_moved_i, NULL); - return Qnil; -} - -static void -gc_compact_after_gc(rb_objspace_t *objspace, int use_toward_empty, int use_double_pages, int use_verifier) +gc_compact(rb_execution_context_t *ec, VALUE self) { - if (0) fprintf(stderr, "gc_compact_after_gc: %d,%d,%d\n", use_toward_empty, use_double_pages, use_verifier); - - mjit_gc_start_hook(); // prevent MJIT from running while moving pointers related to ISeq - - objspace->profile.compact_count++; - - if (use_verifier) { - gc_verify_internal_consistency(objspace); - } - - if (use_double_pages) { - /* Double heap size */ - heap_add_pages(objspace, heap_eden, heap_allocated_pages); - } - - VALUE moved_list_head; - VALUE disabled = rb_objspace_gc_disable(objspace); - - if (use_toward_empty) { - moved_list_head = gc_compact_heap(objspace, compare_free_slots); - } - else { - moved_list_head = gc_compact_heap(objspace, compare_pinned); - } - heap_eden->freelist = NULL; - - gc_update_references(objspace); - if (!RTEST(disabled)) rb_objspace_gc_enable(objspace); - - if (use_verifier) { - gc_check_references_for_moved(objspace); - } - - rb_clear_method_cache_by_class(rb_cObject); - rb_clear_constant_cache(); - heap_eden->free_pages = NULL; - heap_eden->using_page = NULL; - - /* For each moved slot */ - while (moved_list_head) { - VALUE next_moved; - struct heap_page *page; - - page = GET_HEAP_PAGE(moved_list_head); - next_moved = RMOVED(moved_list_head)->next; - - /* clear the memory for that moved slot */ - RMOVED(moved_list_head)->flags = 0; - RMOVED(moved_list_head)->destination = 0; - RMOVED(moved_list_head)->next = 0; - page->free_slots++; - heap_page_add_freeobj(objspace, page, moved_list_head); - - if (page->free_slots == page->total_slots && heap_pages_freeable_pages > 0) { - heap_pages_freeable_pages--; - heap_unlink_page(objspace, heap_eden, page); - heap_add_page(objspace, heap_tomb, page); - } - objspace->profile.total_freed_objects++; - moved_list_head = next_moved; - } - - /* Add any eden pages with free slots back to the free pages list */ - struct heap_page *page = NULL; - list_for_each(&heap_eden->pages, page, page_node) { - if (page->free_slots > 0) { - heap_add_freepage(heap_eden, page); - } else { - page->free_next = NULL; - } - } - - /* Set up "using_page" if we have any pages with free slots */ - if (heap_eden->free_pages) { - heap_eden->using_page = heap_eden->free_pages; - heap_eden->free_pages = heap_eden->free_pages->free_next; - } - - if (use_verifier) { - gc_verify_internal_consistency(objspace); - } + /* Run GC with compaction enabled */ + gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qtrue); - mjit_gc_exit_hook(); // unlock MJIT here, because `rb_gc()` calls `mjit_gc_start_hook()` again. + return gc_compact_stats(ec, self); } -/* - * call-seq: - * GC.verify_compaction_references(toward: nil, double_heap: nil) -> nil - * - * Verify compaction reference consistency. - * - * This method is implementation specific. During compaction, objects that - * were moved are replaced with T_MOVED objects. No object should have a - * reference to a T_MOVED object after compaction. - * - * This function doubles the heap to ensure room to move all objects, - * compacts the heap to make sure everything moves, updates all references, - * then performs a full GC. If any object contains a reference to a T_MOVED - * object, that object should be pushed on the mark stack, and will - * make a SEGV. - */ static VALUE -gc_verify_compaction_references(int argc, VALUE *argv, VALUE mod) +gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE double_heap, VALUE toward_empty) { rb_objspace_t *objspace = &rb_objspace; - int use_toward_empty = FALSE; - int use_double_pages = FALSE; - - if (dont_gc) return Qnil; - VALUE opt = Qnil; - static ID keyword_ids[2]; - VALUE kwvals[2]; + /* Clear the heap. */ + gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qfalse); - kwvals[1] = Qtrue; - - rb_scan_args(argc, argv, "0:", &opt); + RB_VM_LOCK_ENTER(); + { + gc_rest(objspace); - if (!NIL_P(opt)) { - if (!keyword_ids[0]) { - keyword_ids[0] = rb_intern("toward"); - keyword_ids[1] = rb_intern("double_heap"); + if (RTEST(double_heap)) { + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + heap_add_pages(objspace, size_pool, heap, heap->total_pages); + } } - rb_get_kwargs(opt, keyword_ids, 0, 2, kwvals); - if (kwvals[0] != Qundef && rb_intern("empty") == rb_sym2id(kwvals[0])) { - use_toward_empty = TRUE; - } - if (kwvals[1] != Qundef && RTEST(kwvals[1])) { - use_double_pages = TRUE; + if (RTEST(toward_empty)) { + gc_sort_heap_by_empty_slots(objspace); } } + RB_VM_LOCK_LEAVE(); - gc_compact(objspace, use_toward_empty, use_double_pages, TRUE); - return gc_compact_stats(objspace); + gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qtrue); + + objspace_reachable_objects_from_root(objspace, root_obj_check_moved_i, NULL); + objspace_each_objects(objspace, heap_check_moved_i, NULL, TRUE); + + return gc_compact_stats(ec, self); } VALUE @@ -8681,7 +10275,7 @@ void rb_gc(void) { rb_objspace_t *objspace = &rb_objspace; - int reason = GPR_DEFAULT_REASON; + unsigned int reason = GPR_DEFAULT_REASON; garbage_collect(objspace, reason); } @@ -8722,7 +10316,7 @@ gc_count(rb_execution_context_t *ec, VALUE self) } static VALUE -gc_info_decode(rb_objspace_t *objspace, const VALUE hash_or_key, const int orig_flags) +gc_info_decode(rb_objspace_t *objspace, const VALUE hash_or_key, const unsigned int orig_flags) { static VALUE sym_major_by = Qnil, sym_gc_by, sym_immediate_sweep, sym_have_finalizer, sym_state; static VALUE sym_nofree, sym_oldgen, sym_shady, sym_force, sym_stress; @@ -8733,7 +10327,7 @@ gc_info_decode(rb_objspace_t *objspace, const VALUE hash_or_key, const int orig_ static VALUE sym_none, sym_marking, sym_sweeping; VALUE hash = Qnil, key = Qnil; VALUE major_by; - VALUE flags = orig_flags ? orig_flags : objspace->profile.latest_gc_info; + unsigned int flags = orig_flags ? orig_flags : objspace->profile.latest_gc_info; if (SYMBOL_P(hash_or_key)) { key = hash_or_key; @@ -8745,7 +10339,7 @@ gc_info_decode(rb_objspace_t *objspace, const VALUE hash_or_key, const int orig_ rb_raise(rb_eTypeError, "non-hash or symbol given"); } - if (sym_major_by == Qnil) { + if (NIL_P(sym_major_by)) { #define S(s) sym_##s = ID2SYM(rb_intern_const(#s)) S(major_by); S(gc_by); @@ -8798,8 +10392,8 @@ gc_info_decode(rb_objspace_t *objspace, const VALUE hash_or_key, const int orig_ Qnil ); - SET(have_finalizer, (flags & GPR_FLAG_HAVE_FINALIZE) ? Qtrue : Qfalse); - SET(immediate_sweep, (flags & GPR_FLAG_IMMEDIATE_SWEEP) ? Qtrue : Qfalse); + SET(have_finalizer, RBOOL(flags & GPR_FLAG_HAVE_FINALIZE)); + SET(immediate_sweep, RBOOL(flags & GPR_FLAG_IMMEDIATE_SWEEP)); if (orig_flags == 0) { SET(state, gc_mode(objspace) == gc_mode_none ? sym_none : @@ -8838,6 +10432,7 @@ gc_latest_gc_info(rb_execution_context_t *ec, VALUE self, VALUE arg) enum gc_stat_sym { gc_stat_sym_count, + gc_stat_sym_time, gc_stat_sym_heap_allocated_pages, gc_stat_sym_heap_sorted_length, gc_stat_sym_heap_allocatable_pages, @@ -8854,10 +10449,11 @@ enum gc_stat_sym { gc_stat_sym_total_freed_objects, gc_stat_sym_malloc_increase_bytes, gc_stat_sym_malloc_increase_bytes_limit, -#if USE_RGENGC gc_stat_sym_minor_gc_count, gc_stat_sym_major_gc_count, gc_stat_sym_compact_count, + gc_stat_sym_read_barrier_faults, + gc_stat_sym_total_moved_objects, gc_stat_sym_remembered_wb_unprotected_objects, gc_stat_sym_remembered_wb_unprotected_objects_limit, gc_stat_sym_old_objects, @@ -8873,41 +10469,11 @@ enum gc_stat_sym { gc_stat_sym_total_promoted_count, gc_stat_sym_total_remembered_normal_object_count, gc_stat_sym_total_remembered_shady_object_count, -#endif #endif gc_stat_sym_last }; -enum gc_stat_compat_sym { - gc_stat_compat_sym_gc_stat_heap_used, - gc_stat_compat_sym_heap_eden_page_length, - gc_stat_compat_sym_heap_tomb_page_length, - gc_stat_compat_sym_heap_increment, - gc_stat_compat_sym_heap_length, - gc_stat_compat_sym_heap_live_slot, - gc_stat_compat_sym_heap_free_slot, - gc_stat_compat_sym_heap_final_slot, - gc_stat_compat_sym_heap_swept_slot, -#if USE_RGENGC - gc_stat_compat_sym_remembered_shady_object, - gc_stat_compat_sym_remembered_shady_object_limit, - gc_stat_compat_sym_old_object, - gc_stat_compat_sym_old_object_limit, -#endif - gc_stat_compat_sym_total_allocated_object, - gc_stat_compat_sym_total_freed_object, - gc_stat_compat_sym_malloc_increase, - gc_stat_compat_sym_malloc_limit, -#if RGENGC_ESTIMATE_OLDMALLOC - gc_stat_compat_sym_oldmalloc_increase, - gc_stat_compat_sym_oldmalloc_limit, -#endif - gc_stat_compat_sym_last -}; - static VALUE gc_stat_symbols[gc_stat_sym_last]; -static VALUE gc_stat_compat_symbols[gc_stat_compat_sym_last]; -static VALUE gc_stat_compat_table; static void setup_gc_stat_symbols(void) @@ -8915,6 +10481,7 @@ setup_gc_stat_symbols(void) if (gc_stat_symbols[0] == 0) { #define S(s) gc_stat_symbols[gc_stat_sym_##s] = ID2SYM(rb_intern_const(#s)) S(count); + S(time); S(heap_allocated_pages); S(heap_sorted_length); S(heap_allocatable_pages); @@ -8931,10 +10498,11 @@ setup_gc_stat_symbols(void) S(total_freed_objects); S(malloc_increase_bytes); S(malloc_increase_bytes_limit); -#if USE_RGENGC S(minor_gc_count); S(major_gc_count); S(compact_count); + S(read_barrier_faults); + S(total_moved_objects); S(remembered_wb_unprotected_objects); S(remembered_wb_unprotected_objects_limit); S(old_objects); @@ -8951,106 +10519,10 @@ setup_gc_stat_symbols(void) S(total_remembered_normal_object_count); S(total_remembered_shady_object_count); #endif /* RGENGC_PROFILE */ -#endif /* USE_RGENGC */ #undef S -#define S(s) gc_stat_compat_symbols[gc_stat_compat_sym_##s] = ID2SYM(rb_intern_const(#s)) - S(gc_stat_heap_used); - S(heap_eden_page_length); - S(heap_tomb_page_length); - S(heap_increment); - S(heap_length); - S(heap_live_slot); - S(heap_free_slot); - S(heap_final_slot); - S(heap_swept_slot); -#if USE_RGEGC - S(remembered_shady_object); - S(remembered_shady_object_limit); - S(old_object); - S(old_object_limit); -#endif - S(total_allocated_object); - S(total_freed_object); - S(malloc_increase); - S(malloc_limit); -#if RGENGC_ESTIMATE_OLDMALLOC - S(oldmalloc_increase); - S(oldmalloc_limit); -#endif -#undef S - - { - VALUE table = gc_stat_compat_table = rb_hash_new(); - rb_obj_hide(table); - rb_gc_register_mark_object(table); - - /* compatibility layer for Ruby 2.1 */ -#define OLD_SYM(s) gc_stat_compat_symbols[gc_stat_compat_sym_##s] -#define NEW_SYM(s) gc_stat_symbols[gc_stat_sym_##s] - rb_hash_aset(table, OLD_SYM(gc_stat_heap_used), NEW_SYM(heap_allocated_pages)); - rb_hash_aset(table, OLD_SYM(heap_eden_page_length), NEW_SYM(heap_eden_pages)); - rb_hash_aset(table, OLD_SYM(heap_tomb_page_length), NEW_SYM(heap_tomb_pages)); - rb_hash_aset(table, OLD_SYM(heap_increment), NEW_SYM(heap_allocatable_pages)); - rb_hash_aset(table, OLD_SYM(heap_length), NEW_SYM(heap_sorted_length)); - rb_hash_aset(table, OLD_SYM(heap_live_slot), NEW_SYM(heap_live_slots)); - rb_hash_aset(table, OLD_SYM(heap_free_slot), NEW_SYM(heap_free_slots)); - rb_hash_aset(table, OLD_SYM(heap_final_slot), NEW_SYM(heap_final_slots)); -#if USE_RGEGC - rb_hash_aset(table, OLD_SYM(remembered_shady_object), NEW_SYM(remembered_wb_unprotected_objects)); - rb_hash_aset(table, OLD_SYM(remembered_shady_object_limit), NEW_SYM(remembered_wb_unprotected_objects_limit)); - rb_hash_aset(table, OLD_SYM(old_object), NEW_SYM(old_objects)); - rb_hash_aset(table, OLD_SYM(old_object_limit), NEW_SYM(old_objects_limit)); -#endif - rb_hash_aset(table, OLD_SYM(total_allocated_object), NEW_SYM(total_allocated_objects)); - rb_hash_aset(table, OLD_SYM(total_freed_object), NEW_SYM(total_freed_objects)); - rb_hash_aset(table, OLD_SYM(malloc_increase), NEW_SYM(malloc_increase_bytes)); - rb_hash_aset(table, OLD_SYM(malloc_limit), NEW_SYM(malloc_increase_bytes_limit)); -#if RGENGC_ESTIMATE_OLDMALLOC - rb_hash_aset(table, OLD_SYM(oldmalloc_increase), NEW_SYM(oldmalloc_increase_bytes)); - rb_hash_aset(table, OLD_SYM(oldmalloc_limit), NEW_SYM(oldmalloc_increase_bytes_limit)); -#endif -#undef OLD_SYM -#undef NEW_SYM - rb_obj_freeze(table); - } } } -static VALUE -compat_key(VALUE key) -{ - VALUE new_key = rb_hash_lookup(gc_stat_compat_table, key); - - if (!NIL_P(new_key)) { - static int warned = 0; - if (warned == 0) { - rb_warn("GC.stat keys were changed from Ruby 2.1. " - "In this case, you refer to obsolete `%"PRIsVALUE"' (new key is `%"PRIsVALUE"'). " - "Please check for more information.", - key, new_key); - warned = 1; - } - } - - return new_key; -} - -static VALUE -default_proc_for_compat_func(RB_BLOCK_CALL_FUNC_ARGLIST(hash, _)) -{ - VALUE key, new_key; - - Check_Type(hash, T_HASH); - rb_check_arity(argc, 2, 2); - key = argv[1]; - - if ((new_key = compat_key(key)) != Qnil) { - return rb_hash_lookup(hash, new_key); - } - - return Qnil; -} - static size_t gc_stat_internal(VALUE hash_or_sym) { @@ -9061,15 +10533,6 @@ gc_stat_internal(VALUE hash_or_sym) if (RB_TYPE_P(hash_or_sym, T_HASH)) { hash = hash_or_sym; - - if (NIL_P(RHASH_IFNONE(hash))) { - static VALUE default_proc_for_compat = 0; - if (default_proc_for_compat == 0) { /* TODO: it should be */ - default_proc_for_compat = rb_proc_new(default_proc_for_compat_func, Qnil); - rb_gc_register_mark_object(default_proc_for_compat); - } - rb_hash_set_default_proc(hash, default_proc_for_compat); - } } else if (SYMBOL_P(hash_or_sym)) { key = hash_or_sym; @@ -9084,30 +10547,31 @@ gc_stat_internal(VALUE hash_or_sym) else if (hash != Qnil) \ rb_hash_aset(hash, gc_stat_symbols[gc_stat_sym_##name], SIZET2NUM(attr)); - again: SET(count, objspace->profile.count); + SET(time, (size_t) (objspace->profile.total_time_ns / (1000 * 1000) /* ns -> ms */)); // TODO: UINT64T2NUM /* implementation dependent counters */ SET(heap_allocated_pages, heap_allocated_pages); SET(heap_sorted_length, heap_pages_sorted_length); - SET(heap_allocatable_pages, heap_allocatable_pages); + SET(heap_allocatable_pages, heap_allocatable_pages(objspace)); SET(heap_available_slots, objspace_available_slots(objspace)); SET(heap_live_slots, objspace_live_slots(objspace)); SET(heap_free_slots, objspace_free_slots(objspace)); SET(heap_final_slots, heap_pages_final_slots); SET(heap_marked_slots, objspace->marked_slots); - SET(heap_eden_pages, heap_eden->total_pages); - SET(heap_tomb_pages, heap_tomb->total_pages); + SET(heap_eden_pages, heap_eden_total_pages(objspace)); + SET(heap_tomb_pages, heap_tomb_total_pages(objspace)); SET(total_allocated_pages, objspace->profile.total_allocated_pages); SET(total_freed_pages, objspace->profile.total_freed_pages); SET(total_allocated_objects, objspace->total_allocated_objects); SET(total_freed_objects, objspace->profile.total_freed_objects); SET(malloc_increase_bytes, malloc_increase); SET(malloc_increase_bytes_limit, malloc_limit); -#if USE_RGENGC SET(minor_gc_count, objspace->profile.minor_gc_count); SET(major_gc_count, objspace->profile.major_gc_count); SET(compact_count, objspace->profile.compact_count); + SET(read_barrier_faults, objspace->profile.read_barrier_faults); + SET(total_moved_objects, objspace->rcompactor.total_moved); SET(remembered_wb_unprotected_objects, objspace->rgengc.uncollectible_wb_unprotected_objects); SET(remembered_wb_unprotected_objects_limit, objspace->rgengc.uncollectible_wb_unprotected_objects_limit); SET(old_objects, objspace->rgengc.old_objects); @@ -9125,15 +10589,9 @@ gc_stat_internal(VALUE hash_or_sym) SET(total_remembered_normal_object_count, objspace->profile.total_remembered_normal_object_count); SET(total_remembered_shady_object_count, objspace->profile.total_remembered_shady_object_count); #endif /* RGENGC_PROFILE */ -#endif /* USE_RGENGC */ #undef SET if (!NIL_P(key)) { /* matched key should return above */ - VALUE new_key; - if ((new_key = compat_key(key)) != Qnil) { - key = new_key; - goto again; - } rb_raise(rb_eArgError, "unknown key: %"PRIsVALUE, rb_sym2str(key)); } @@ -9217,10 +10675,10 @@ rb_gc_enable(void) VALUE rb_objspace_gc_enable(rb_objspace_t *objspace) { - int old = dont_gc; + int old = dont_gc_val(); - dont_gc = FALSE; - return old ? Qtrue : Qfalse; + dont_gc_off(); + return RBOOL(old); } static VALUE @@ -9239,9 +10697,9 @@ rb_gc_disable_no_rest(void) static VALUE gc_disable_no_rest(rb_objspace_t *objspace) { - int old = dont_gc; - dont_gc = TRUE; - return old ? Qtrue : Qfalse; + int old = dont_gc_val(); + dont_gc_on(); + return RBOOL(old); } VALUE @@ -9264,10 +10722,31 @@ gc_disable(rb_execution_context_t *ec, VALUE _) return rb_gc_disable(); } +static VALUE +gc_set_auto_compact(rb_execution_context_t *ec, VALUE _, VALUE v) +{ + /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for + * the read barrier, so we must disable automatic compaction. */ +#if !defined(__MINGW32__) && !defined(_WIN32) + if (!USE_MMAP_ALIGNED_ALLOC) { + rb_raise(rb_eNotImpError, "Automatic compaction isn't available on this platform"); + } +#endif + + ruby_enable_autocompact = RTEST(v); + return v; +} + +static VALUE +gc_get_auto_compact(rb_execution_context_t *ec, VALUE _) +{ + return RBOOL(ruby_enable_autocompact); +} + static int get_envparam_size(const char *name, size_t *default_value, size_t lower_bound) { - char *ptr = getenv(name); + const char *ptr = getenv(name); ssize_t val; if (ptr != NULL && *ptr) { @@ -9325,7 +10804,7 @@ get_envparam_size(const char *name, size_t *default_value, size_t lower_bound) static int get_envparam_double(const char *name, double *default_value, double lower_bound, double upper_bound, int accept_zero) { - char *ptr = getenv(name); + const char *ptr = getenv(name); double val; if (ptr != NULL && *ptr) { @@ -9353,13 +10832,15 @@ get_envparam_double(const char *name, double *default_value, double lower_bound, } } else { - accept: - if (RTEST(ruby_verbose)) fprintf(stderr, "%s=%f (default value: %f)\n", name, val, *default_value); - *default_value = val; - return 1; + goto accept; } } return 0; + + accept: + if (RTEST(ruby_verbose)) fprintf(stderr, "%s=%f (default value: %f)\n", name, val, *default_value); + *default_value = val; + return 1; } static void @@ -9368,10 +10849,19 @@ gc_set_initial_pages(void) size_t min_pages; rb_objspace_t *objspace = &rb_objspace; + gc_rest(objspace); + min_pages = gc_params.heap_init_slots / HEAP_PAGE_OBJ_LIMIT; - if (min_pages > heap_eden->total_pages) { - heap_add_pages(objspace, heap_eden, min_pages - heap_eden->total_pages); + + size_t pages_per_class = (min_pages - heap_eden_total_pages(objspace)) / SIZE_POOL_COUNT; + + for (int i = 0; i < SIZE_POOL_COUNT; i++) { + rb_size_pool_t *size_pool = &size_pools[i]; + + heap_add_pages(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool), pages_per_class); } + + heap_add_pages(objspace, &size_pools[0], SIZE_POOL_EDEN_HEAP(&size_pools[0]), min_pages - heap_eden_total_pages(objspace)); } /* @@ -9423,18 +10913,11 @@ ruby_gc_set_params(void) if (get_envparam_size("RUBY_GC_HEAP_FREE_SLOTS", &gc_params.heap_free_slots, 0)) { /* ok */ } - else if (get_envparam_size("RUBY_FREE_MIN", &gc_params.heap_free_slots, 0)) { - rb_warn("RUBY_FREE_MIN is obsolete. Use RUBY_GC_HEAP_FREE_SLOTS instead."); - } /* RUBY_GC_HEAP_INIT_SLOTS */ if (get_envparam_size("RUBY_GC_HEAP_INIT_SLOTS", &gc_params.heap_init_slots, 0)) { gc_set_initial_pages(); } - else if (get_envparam_size("RUBY_HEAP_MIN_SLOTS", &gc_params.heap_init_slots, 0)) { - rb_warn("RUBY_HEAP_MIN_SLOTS is obsolete. Use RUBY_GC_HEAP_INIT_SLOTS instead."); - gc_set_initial_pages(); - } get_envparam_double("RUBY_GC_HEAP_GROWTH_FACTOR", &gc_params.growth_factor, 1.0, 0.0, FALSE); get_envparam_size ("RUBY_GC_HEAP_GROWTH_MAX_SLOTS", &gc_params.growth_max_slots, 0); @@ -9463,18 +10946,30 @@ ruby_gc_set_params(void) #endif } +static void +reachable_objects_from_callback(VALUE obj) +{ + rb_ractor_t *cr = GET_RACTOR(); + cr->mfd->mark_func(obj, cr->mfd->data); +} + void rb_objspace_reachable_objects_from(VALUE obj, void (func)(VALUE, void *), void *data) { rb_objspace_t *objspace = &rb_objspace; + if (during_gc) rb_bug("rb_objspace_reachable_objects_from() is not supported while during_gc == true"); + if (is_markable_object(objspace, obj)) { - struct mark_func_data_struct mfd; - mfd.mark_func = func; - mfd.data = data; - PUSH_MARK_FUNC_DATA(&mfd); + rb_ractor_t *cr = GET_RACTOR(); + struct gc_mark_func_data_struct mfd = { + .mark_func = func, + .data = data, + }, *prev_mfd = cr->mfd; + + cr->mfd = &mfd; gc_mark_children(objspace, obj); - POP_MARK_FUNC_DATA(); + cr->mfd = prev_mfd; } } @@ -9501,18 +10996,21 @@ rb_objspace_reachable_objects_from_root(void (func)(const char *category, VALUE, static void objspace_reachable_objects_from_root(rb_objspace_t *objspace, void (func)(const char *category, VALUE, void *), void *passing_data) { - struct root_objects_data data; - struct mark_func_data_struct mfd; + if (during_gc) rb_bug("objspace_reachable_objects_from_root() is not supported while during_gc == true"); - data.func = func; - data.data = passing_data; - - mfd.mark_func = root_objects_from; - mfd.data = &data; + rb_ractor_t *cr = GET_RACTOR(); + struct root_objects_data data = { + .func = func, + .data = passing_data, + }; + struct gc_mark_func_data_struct mfd = { + .mark_func = root_objects_from, + .data = &data, + }, *prev_mfd = cr->mfd; - PUSH_MARK_FUNC_DATA(&mfd); + cr->mfd = &mfd; gc_mark_roots(objspace, &data.category); - POP_MARK_FUNC_DATA(); + cr->mfd = prev_mfd; } /* @@ -9554,10 +11052,10 @@ gc_raise(VALUE exc, const char *fmt, ...) /* Not in a ruby thread */ fprintf(stderr, "%s", "[FATAL] "); vfprintf(stderr, fmt, ap); - abort(); } va_end(ap); + abort(); } static void objspace_xfree(rb_objspace_t *objspace, void *ptr, size_t size); @@ -9575,6 +11073,8 @@ ruby_memerror_body(void *dummy) return 0; } +NORETURN(static void ruby_memerror(void)); +RBIMPL_ATTR_MAYBE_UNUSED() static void ruby_memerror(void) { @@ -9588,9 +11088,9 @@ ruby_memerror(void) else { /* no ruby thread */ fprintf(stderr, "[FATAL] failed to allocate memory\n"); - exit(EXIT_FAILURE); } } + exit(EXIT_FAILURE); } void @@ -9606,7 +11106,10 @@ rb_memerror(void) sleep(60); } - if (during_gc) gc_exit(objspace, "rb_memerror"); + if (during_gc) { + // TODO: OMG!! How to implement it? + gc_exit(objspace, gc_enter_event_rb_memerror, NULL); + } exc = nomem_error; if (!exc || @@ -9635,22 +11138,54 @@ rb_aligned_malloc(size_t alignment, size_t size) #elif defined _WIN32 void *_aligned_malloc(size_t, size_t); res = _aligned_malloc(size, alignment); -#elif defined(HAVE_POSIX_MEMALIGN) - if (posix_memalign(&res, alignment, size) == 0) { - return res; +#else + if (USE_MMAP_ALIGNED_ALLOC) { + GC_ASSERT(alignment % sysconf(_SC_PAGE_SIZE) == 0); + + char *ptr = mmap(NULL, alignment + size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (ptr == MAP_FAILED) { + return NULL; + } + + char *aligned = ptr + alignment; + aligned -= ((VALUE)aligned & (alignment - 1)); + GC_ASSERT(aligned > ptr); + GC_ASSERT(aligned <= ptr + alignment); + + size_t start_out_of_range_size = aligned - ptr; + GC_ASSERT(start_out_of_range_size % sysconf(_SC_PAGE_SIZE) == 0); + if (start_out_of_range_size > 0) { + if (munmap(ptr, start_out_of_range_size)) { + rb_bug("rb_aligned_malloc: munmap failed for start"); + } + } + + size_t end_out_of_range_size = alignment - start_out_of_range_size; + GC_ASSERT(end_out_of_range_size % sysconf(_SC_PAGE_SIZE) == 0); + if (end_out_of_range_size > 0) { + if (munmap(aligned + size, end_out_of_range_size)) { + rb_bug("rb_aligned_malloc: munmap failed for end"); + } + } + + res = (void *)aligned; } else { - return NULL; +# if defined(HAVE_POSIX_MEMALIGN) + if (posix_memalign(&res, alignment, size) != 0) { + return NULL; + } +# elif defined(HAVE_MEMALIGN) + res = memalign(alignment, size); +# else + char* aligned; + res = malloc(alignment + size + sizeof(void*)); + aligned = (char*)res + alignment + sizeof(void*); + aligned -= ((VALUE)aligned & (alignment - 1)); + ((void**)aligned)[-1] = res; + res = (void*)aligned; +# endif } -#elif defined(HAVE_MEMALIGN) - res = memalign(alignment, size); -#else - char* aligned; - res = malloc(alignment + size + sizeof(void*)); - aligned = (char*)res + alignment + sizeof(void*); - aligned -= ((VALUE)aligned & (alignment - 1)); - ((void**)aligned)[-1] = res; - res = (void*)aligned; #endif /* alignment must be a power of 2 */ @@ -9660,16 +11195,26 @@ rb_aligned_malloc(size_t alignment, size_t size) } static void -rb_aligned_free(void *ptr) +rb_aligned_free(void *ptr, size_t size) { #if defined __MINGW32__ __mingw_aligned_free(ptr); #elif defined _WIN32 _aligned_free(ptr); -#elif defined(HAVE_MEMALIGN) || defined(HAVE_POSIX_MEMALIGN) - free(ptr); #else - free(((void**)ptr)[-1]); + if (USE_MMAP_ALIGNED_ALLOC) { + GC_ASSERT(size % sysconf(_SC_PAGE_SIZE) == 0); + if (munmap(ptr, size)) { + rb_bug("rb_aligned_free: munmap failed"); + } + } + else { +# if defined(HAVE_POSIX_MEMALIGN) || defined(HAVE_MEMALIGN) + free(ptr); +# else + free(((void**)ptr)[-1]); +# endif + } #endif } @@ -9705,8 +11250,8 @@ static void objspace_malloc_gc_stress(rb_objspace_t *objspace) { if (ruby_gc_stressful && ruby_native_thread_p()) { - int reason = GPR_FLAG_IMMEDIATE_MARK | GPR_FLAG_IMMEDIATE_SWEEP | - GPR_FLAG_STRESS | GPR_FLAG_MALLOC; + unsigned int reason = (GPR_FLAG_IMMEDIATE_MARK | GPR_FLAG_IMMEDIATE_SWEEP | + GPR_FLAG_STRESS | GPR_FLAG_MALLOC); if (gc_stress_full_mark_after_malloc_p()) { reason |= GPR_FLAG_FULL_MARK; @@ -9715,8 +11260,20 @@ objspace_malloc_gc_stress(rb_objspace_t *objspace) } } -static void -objspace_malloc_increase(rb_objspace_t *objspace, void *mem, size_t new_size, size_t old_size, enum memop_type type) +static inline bool +objspace_malloc_increase_report(rb_objspace_t *objspace, void *mem, size_t new_size, size_t old_size, enum memop_type type) +{ + if (0) fprintf(stderr, "increase - ptr: %p, type: %s, new_size: %"PRIdSIZE", old_size: %"PRIdSIZE"\n", + mem, + type == MEMOP_TYPE_MALLOC ? "malloc" : + type == MEMOP_TYPE_FREE ? "free " : + type == MEMOP_TYPE_REALLOC ? "realloc": "error", + new_size, old_size); + return false; +} + +static bool +objspace_malloc_increase_body(rb_objspace_t *objspace, void *mem, size_t new_size, size_t old_size, enum memop_type type) { if (new_size > old_size) { ATOMIC_SIZE_ADD(malloc_increase, new_size - old_size); @@ -9733,8 +11290,8 @@ objspace_malloc_increase(rb_objspace_t *objspace, void *mem, size_t new_size, si if (type == MEMOP_TYPE_MALLOC) { retry: - if (malloc_increase > malloc_limit && ruby_native_thread_p() && !dont_gc) { - if (ruby_thread_has_gvl_p() && is_lazy_sweeping(heap_eden)) { + if (malloc_increase > malloc_limit && ruby_native_thread_p() && !dont_gc_val()) { + if (ruby_thread_has_gvl_p() && is_lazy_sweeping(objspace)) { gc_rest(objspace); /* gc_rest can reduce malloc_increase */ goto retry; } @@ -9758,13 +11315,6 @@ objspace_malloc_increase(rb_objspace_t *objspace, void *mem, size_t new_size, si atomic_sub_nounderflow(&objspace->malloc_params.allocated_size, dec_size); } - if (0) fprintf(stderr, "increase - ptr: %p, type: %s, new_size: %d, old_size: %d\n", - mem, - type == MEMOP_TYPE_MALLOC ? "malloc" : - type == MEMOP_TYPE_FREE ? "free " : - type == MEMOP_TYPE_REALLOC ? "realloc": "error", - (int)new_size, (int)old_size); - switch (type) { case MEMOP_TYPE_MALLOC: ATOMIC_SIZE_INC(objspace->malloc_params.allocations); @@ -9785,8 +11335,14 @@ objspace_malloc_increase(rb_objspace_t *objspace, void *mem, size_t new_size, si case MEMOP_TYPE_REALLOC: /* ignore */ break; } #endif + return true; } +#define objspace_malloc_increase(...) \ + for (bool malloc_increase_done = objspace_malloc_increase_report(__VA_ARGS__); \ + !malloc_increase_done; \ + malloc_increase_done = objspace_malloc_increase_body(__VA_ARGS__)) + struct malloc_obj_info { /* 4 words */ size_t size; #if USE_GC_MALLOC_OBJ_INFO_DETAILS @@ -9827,8 +11383,6 @@ objspace_malloc_fixup(rb_objspace_t *objspace, void *mem, size_t size) info->gen = objspace->profile.count; info->file = ruby_malloc_info_file; info->line = info->file ? ruby_malloc_info_line : 0; -#else - info->file = NULL; #endif mem = info + 1; } @@ -9837,7 +11391,37 @@ objspace_malloc_fixup(rb_objspace_t *objspace, void *mem, size_t size) return mem; } -#define TRY_WITH_GC(alloc) do { \ +#if defined(__GNUC__) && RUBY_DEBUG +#define RB_BUG_INSTEAD_OF_RB_MEMERROR +#endif + +#ifdef RB_BUG_INSTEAD_OF_RB_MEMERROR +#define TRY_WITH_GC(siz, expr) do { \ + const gc_profile_record_flag gpr = \ + GPR_FLAG_FULL_MARK | \ + GPR_FLAG_IMMEDIATE_MARK | \ + GPR_FLAG_IMMEDIATE_SWEEP | \ + GPR_FLAG_MALLOC; \ + objspace_malloc_gc_stress(objspace); \ + \ + if (LIKELY((expr))) { \ + /* Success on 1st try */ \ + } \ + else if (!garbage_collect_with_gvl(objspace, gpr)) { \ + /* @shyouhei thinks this doesn't happen */ \ + rb_bug("TRY_WITH_GC: could not GC"); \ + } \ + else if ((expr)) { \ + /* Success on 2nd try */ \ + } \ + else { \ + rb_bug("TRY_WITH_GC: could not allocate:" \ + "%"PRIdSIZE" bytes for %s", \ + siz, # expr); \ + } \ + } while (0) +#else +#define TRY_WITH_GC(siz, alloc) do { \ objspace_malloc_gc_stress(objspace); \ if (!(alloc) && \ (!garbage_collect_with_gvl(objspace, GPR_FLAG_FULL_MARK | \ @@ -9847,9 +11431,10 @@ objspace_malloc_fixup(rb_objspace_t *objspace, void *mem, size_t size) ruby_memerror(); \ } \ } while (0) +#endif /* these shouldn't be called directly. - * objspace_* functinos do not check allocation size. + * objspace_* functions do not check allocation size. */ static void * objspace_xmalloc0(rb_objspace_t *objspace, size_t size) @@ -9857,7 +11442,7 @@ objspace_xmalloc0(rb_objspace_t *objspace, size_t size) void *mem; size = objspace_malloc_prepare(objspace, size); - TRY_WITH_GC(mem = malloc(size)); + TRY_WITH_GC(size, mem = malloc(size)); RB_DEBUG_COUNTER_INC(heap_xmalloc); return objspace_malloc_fixup(objspace, mem, size); } @@ -9928,7 +11513,7 @@ objspace_xrealloc(rb_objspace_t *objspace, void *ptr, size_t new_size, size_t ol #endif old_size = objspace_malloc_size(objspace, ptr, old_size); - TRY_WITH_GC(mem = realloc(ptr, new_size)); + TRY_WITH_GC(new_size, mem = realloc(ptr, new_size)); new_size = objspace_malloc_size(objspace, mem, new_size); #if CALC_EXACT_MALLOC_SIZE @@ -9960,7 +11545,7 @@ mmalloc_info_file_i(st_data_t key, st_data_t val, st_data_t dmy) const char *file = (void *)key; const size_t *data = (void *)val; - fprintf(stderr, "%s\t%d\t%d\n", file, (int)data[0], (int)data[1]); + fprintf(stderr, "%s\t%"PRIdSIZE"\t%"PRIdSIZE"\n", file, data[0], data[1]); return ST_CONTINUE; } @@ -9974,19 +11559,19 @@ rb_malloc_info_show_results(void) fprintf(stderr, "* malloc_info gen statistics\n"); for (i=0; ifile; + st_data_t key = (st_data_t)info->file, d; size_t *data; if (malloc_info_file_table == NULL) { malloc_info_file_table = st_init_numtable_with_size(1024); } - if (st_lookup(malloc_info_file_table, key, (st_data_t *)&data)) { + if (st_lookup(malloc_info_file_table, key, &d)) { /* hit */ + data = (size_t *)d; } else { data = malloc(xmalloc2_size(2, sizeof(size_t))); @@ -10053,25 +11639,25 @@ objspace_xfree(rb_objspace_t *objspace, void *ptr, size_t old_size) data[0] ++; data[1] += info->size; }; -#if 0 /* verbose output */ - if (gen >= 2) { + if (0 && gen >= 2) { /* verbose output */ if (info->file) { - fprintf(stderr, "free - size:%d, gen:%d, pos: %s:%d\n", (int)info->size, gen, info->file, (int)info->line); + fprintf(stderr, "free - size:%"PRIdSIZE", gen:%d, pos: %s:%"PRIdSIZE"\n", + info->size, gen, info->file, info->line); } else { - fprintf(stderr, "free - size:%d, gen:%d\n", (int)info->size, gen); + fprintf(stderr, "free - size:%"PRIdSIZE", gen:%d\n", + info->size, gen); } } -#endif } #endif #endif old_size = objspace_malloc_size(objspace, ptr, old_size); - free(ptr); - RB_DEBUG_COUNTER_INC(heap_xfree); - - objspace_malloc_increase(objspace, ptr, 0, old_size, MEMOP_TYPE_FREE); + objspace_malloc_increase(objspace, ptr, 0, old_size, MEMOP_TYPE_FREE) { + free(ptr); + RB_DEBUG_COUNTER_INC(heap_xfree); + } } static void * @@ -10109,7 +11695,7 @@ objspace_xcalloc(rb_objspace_t *objspace, size_t size) void *mem; size = objspace_malloc_prepare(objspace, size); - TRY_WITH_GC(mem = calloc1(size)); + TRY_WITH_GC(size, mem = calloc1(size)); return objspace_malloc_fixup(objspace, mem, size); } @@ -10223,8 +11809,6 @@ ruby_mimmalloc(size_t size) info->gen = 0; info->file = NULL; info->line = 0; -#else - info->file = NULL; #endif mem = info + 1; } @@ -10417,7 +12001,6 @@ static const rb_data_type_t weakmap_type = { 0, 0, RUBY_TYPED_FREE_IMMEDIATELY }; -extern const struct st_hash_type rb_hashtype_ident; static VALUE wmap_finalize(RB_BLOCK_CALL_FUNC_ARGLIST(objid, self)); static VALUE @@ -10425,8 +12008,8 @@ wmap_allocate(VALUE klass) { struct weakmap *w; VALUE obj = TypedData_Make_Struct(klass, struct weakmap, &weakmap_type, w); - w->obj2wmap = st_init_table(&rb_hashtype_ident); - w->wmap2obj = st_init_table(&rb_hashtype_ident); + w->obj2wmap = rb_init_identtable(); + w->wmap2obj = rb_init_identtable(); w->final = rb_func_lambda_new(wmap_finalize, obj, 1, 1); return obj; } @@ -10434,9 +12017,20 @@ wmap_allocate(VALUE klass) static int wmap_live_p(rb_objspace_t *objspace, VALUE obj) { - if (!FL_ABLE(obj)) return TRUE; - if (!is_id_value(objspace, obj)) return FALSE; - if (!is_live_object(objspace, obj)) return FALSE; + if (SPECIAL_CONST_P(obj)) return TRUE; + if (is_pointer_to_heap(objspace, (void *)obj)) { + void *poisoned = asan_unpoison_object_temporary(obj); + + enum ruby_value_type t = BUILTIN_TYPE(obj); + int ret = (!(t == T_NONE || t >= T_FIXNUM || t == T_ICLASS) && + is_live_object(objspace, obj)); + + if (poisoned) { + asan_poison_object(obj); + } + + return ret; + } return TRUE; } @@ -10502,10 +12096,26 @@ struct wmap_iter_arg { VALUE value; }; +static VALUE +wmap_inspect_append(rb_objspace_t *objspace, VALUE str, VALUE obj) +{ + if (SPECIAL_CONST_P(obj)) { + return rb_str_append(str, rb_inspect(obj)); + } + else if (wmap_live_p(objspace, obj)) { + return rb_str_append(str, rb_any_to_s(obj)); + } + else { + return rb_str_catf(str, "#", (void*)obj); + } +} + static int wmap_inspect_i(st_data_t key, st_data_t val, st_data_t arg) { - VALUE str = (VALUE)arg; + struct wmap_iter_arg *argp = (struct wmap_iter_arg *)arg; + rb_objspace_t *objspace = argp->objspace; + VALUE str = argp->value; VALUE k = (VALUE)key, v = (VALUE)val; if (RSTRING_PTR(str)[0] == '#') { @@ -10515,11 +12125,9 @@ wmap_inspect_i(st_data_t key, st_data_t val, st_data_t arg) rb_str_cat2(str, ": "); RSTRING_PTR(str)[0] = '#'; } - k = SPECIAL_CONST_P(k) ? rb_inspect(k) : rb_any_to_s(k); - rb_str_append(str, k); + wmap_inspect_append(objspace, str, k); rb_str_cat2(str, " => "); - v = SPECIAL_CONST_P(v) ? rb_inspect(v) : rb_any_to_s(v); - rb_str_append(str, v); + wmap_inspect_append(objspace, str, v); return ST_CONTINUE; } @@ -10530,11 +12138,14 @@ wmap_inspect(VALUE self) VALUE str; VALUE c = rb_class_name(CLASS_OF(self)); struct weakmap *w; + struct wmap_iter_arg args; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); str = rb_sprintf("-<%"PRIsVALUE":%p", c, (void *)self); if (w->wmap2obj) { - st_foreach(w->wmap2obj, wmap_inspect_i, str); + args.objspace = &rb_objspace; + args.value = str; + st_foreach(w->wmap2obj, wmap_inspect_i, (st_data_t)&args); } RSTRING_PTR(str)[0] = '#'; rb_str_cat2(str, ">"); @@ -10687,26 +12298,26 @@ wmap_aset_update(st_data_t *key, st_data_t *val, st_data_t arg, int existing) /* Creates a weak reference from the given key to the given value */ static VALUE -wmap_aset(VALUE self, VALUE wmap, VALUE orig) +wmap_aset(VALUE self, VALUE key, VALUE value) { struct weakmap *w; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); - if (FL_ABLE(orig)) { - define_final0(orig, w->final); + if (FL_ABLE(value)) { + define_final0(value, w->final); } - if (FL_ABLE(wmap)) { - define_final0(wmap, w->final); + if (FL_ABLE(key)) { + define_final0(key, w->final); } - st_update(w->obj2wmap, (st_data_t)orig, wmap_aset_update, wmap); - st_insert(w->wmap2obj, (st_data_t)wmap, (st_data_t)orig); - return nonspecial_obj_id(orig); + st_update(w->obj2wmap, (st_data_t)value, wmap_aset_update, key); + st_insert(w->wmap2obj, (st_data_t)key, (st_data_t)value); + return nonspecial_obj_id(value); } /* Retrieves a weakly referenced object with the given key */ static VALUE -wmap_aref(VALUE self, VALUE wmap) +wmap_lookup(VALUE self, VALUE key) { st_data_t data; VALUE obj; @@ -10714,17 +12325,25 @@ wmap_aref(VALUE self, VALUE wmap) rb_objspace_t *objspace = &rb_objspace; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); - if (!st_lookup(w->wmap2obj, (st_data_t)wmap, &data)) return Qnil; + if (!st_lookup(w->wmap2obj, (st_data_t)key, &data)) return Qundef; obj = (VALUE)data; - if (!wmap_live_p(objspace, obj)) return Qnil; + if (!wmap_live_p(objspace, obj)) return Qundef; return obj; } +/* Retrieves a weakly referenced object with the given key */ +static VALUE +wmap_aref(VALUE self, VALUE key) +{ + VALUE obj = wmap_lookup(self, key); + return obj != Qundef ? obj : Qnil; +} + /* Returns +true+ if +key+ is registered */ static VALUE wmap_has_key(VALUE self, VALUE key) { - return NIL_P(wmap_aref(self, key)) ? Qfalse : Qtrue; + return wmap_lookup(self, key) == Qundef ? Qfalse : Qtrue; } /* Returns the number of referenced objects */ @@ -10749,16 +12368,14 @@ wmap_size(VALUE self) #define GC_PROFILE_RECORD_DEFAULT_SIZE 100 -/* return sec in user time */ -static double -getrusage_time(void) +static bool +current_process_time(struct timespec *ts) { #if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID) { static int try_clock_gettime = 1; - struct timespec ts; - if (try_clock_gettime && clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts) == 0) { - return ts.tv_sec + ts.tv_nsec * 1e-9; + if (try_clock_gettime && clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ts) == 0) { + return true; } else { try_clock_gettime = 0; @@ -10772,7 +12389,9 @@ getrusage_time(void) struct timeval time; if (getrusage(RUSAGE_SELF, &usage) == 0) { time = usage.ru_utime; - return time.tv_sec + time.tv_usec * 1e-6; + ts->tv_sec = time.tv_sec; + ts->tv_nsec = (int32_t)time.tv_usec * 1000; + return true; } } #endif @@ -10780,32 +12399,37 @@ getrusage_time(void) #ifdef _WIN32 { FILETIME creation_time, exit_time, kernel_time, user_time; - ULARGE_INTEGER ui; - LONG_LONG q; - double t; + ULARGE_INTEGER ui; - if (GetProcessTimes(GetCurrentProcess(), + if (GetProcessTimes(GetCurrentProcess(), &creation_time, &exit_time, &kernel_time, &user_time) != 0) { - memcpy(&ui, &user_time, sizeof(FILETIME)); - q = ui.QuadPart / 10L; - t = (DWORD)(q % 1000000L) * 1e-6; - q /= 1000000L; -#ifdef __GNUC__ - t += q; -#else - t += (double)(DWORD)(q >> 16) * (1 << 16); - t += (DWORD)q & ~(~0 << 16); -#endif - return t; + memcpy(&ui, &user_time, sizeof(FILETIME)); +#define PER100NSEC (uint64_t)(1000 * 1000 * 10) + ts->tv_nsec = (long)(ui.QuadPart % PER100NSEC); + ts->tv_sec = (time_t)(ui.QuadPart / PER100NSEC); + return true; } } #endif - return 0.0; + return false; +} + +static double +getrusage_time(void) +{ + struct timespec ts; + if (current_process_time(&ts)) { + return ts.tv_sec + ts.tv_nsec * 1e-9; + } + else { + return 0.0; + } } + static inline void -gc_prof_setup_new_record(rb_objspace_t *objspace, int reason) +gc_prof_setup_new_record(rb_objspace_t *objspace, unsigned int reason) { if (objspace->profile.run) { size_t index = objspace->profile.next_index; @@ -11077,6 +12701,7 @@ gc_profile_record_get(VALUE _) rb_hash_aset(prof, ID2SYM(rb_intern("HEAP_USE_SIZE")), SIZET2NUM(record->heap_use_size)); rb_hash_aset(prof, ID2SYM(rb_intern("HEAP_TOTAL_SIZE")), SIZET2NUM(record->heap_total_size)); rb_hash_aset(prof, ID2SYM(rb_intern("HEAP_TOTAL_OBJECTS")), SIZET2NUM(record->heap_total_objects)); + rb_hash_aset(prof, ID2SYM(rb_intern("MOVED_OBJECTS")), SIZET2NUM(record->moved_objects)); rb_hash_aset(prof, ID2SYM(rb_intern("GC_IS_MARKED")), Qtrue); #if GC_PROFILE_MORE_DETAIL rb_hash_aset(prof, ID2SYM(rb_intern("GC_MARK_TIME")), DBL2NUM(record->gc_mark_time)); @@ -11090,7 +12715,7 @@ gc_profile_record_get(VALUE _) rb_hash_aset(prof, ID2SYM(rb_intern("REMOVING_OBJECTS")), SIZET2NUM(record->removing_objects)); rb_hash_aset(prof, ID2SYM(rb_intern("EMPTY_OBJECTS")), SIZET2NUM(record->empty_objects)); - rb_hash_aset(prof, ID2SYM(rb_intern("HAVE_FINALIZE")), (record->flags & GPR_FLAG_HAVE_FINALIZE) ? Qtrue : Qfalse); + rb_hash_aset(prof, ID2SYM(rb_intern("HAVE_FINALIZE")), RBOOL(record->flags & GPR_FLAG_HAVE_FINALIZE)); #endif #if RGENGC_PROFILE > 0 @@ -11108,9 +12733,9 @@ gc_profile_record_get(VALUE _) #define MAJOR_REASON_MAX 0x10 static char * -gc_profile_dump_major_reason(int flags, char *buff) +gc_profile_dump_major_reason(unsigned int flags, char *buff) { - int reason = flags & GPR_FLAG_MAJOR_MASK; + unsigned int reason = flags & GPR_FLAG_MAJOR_MASK; int i = 0; if (reason == GPR_FLAG_NONE) { @@ -11160,7 +12785,7 @@ gc_profile_dump_on(VALUE out, VALUE (*append)(VALUE, VALUE)) } #if GC_PROFILE_MORE_DETAIL - append(out, rb_str_new_cstr("\n\n" \ + const char *str = "\n\n" \ "More detail.\n" \ "Prepare Time = Previously GC's rest sweep time\n" "Index Flags Allocate Inc. Allocate Limit" @@ -11174,7 +12799,8 @@ gc_profile_dump_on(VALUE out, VALUE (*append)(VALUE, VALUE)) #if GC_PROFILE_DETAIL_MEMORY " MaxRSS(KB) MinorFLT MajorFLT" #endif - "\n")); + "\n"; + append(out, rb_str_new_cstr(str)); for (i = 0; i < count; i++) { record = &objspace->profile.records[i]; @@ -11305,7 +12931,7 @@ static VALUE gc_profile_enable_get(VALUE self) { rb_objspace_t *objspace = &rb_objspace; - return objspace->profile.run ? Qtrue : Qfalse; + return RBOOL(objspace->profile.run); } /* @@ -11434,10 +13060,21 @@ rb_raw_iseq_info(char *buff, const int buff_size, const rb_iseq_t *iseq) } } +static int +str_len_no_raise(VALUE str) +{ + long len = RSTRING_LEN(str); + if (len < 0) return 0; + if (len > INT_MAX) return INT_MAX; + return (int)len; +} + const char * rb_raw_obj_info(char *buff, const int buff_size, VALUE obj) { int pos = 0; + void *poisoned = asan_poisoned_object_p(obj); + asan_unpoison_object(obj, false); #define BUFF_ARGS buff + pos, buff_size - pos #define APPENDF(f) if ((pos += snprintf f) >= buff_size) goto end @@ -11455,17 +13092,17 @@ rb_raw_obj_info(char *buff, const int buff_size, VALUE obj) #define TF(c) ((c) != 0 ? "true" : "false") #define C(c, s) ((c) != 0 ? (s) : " ") const int type = BUILTIN_TYPE(obj); -#if USE_RGENGC const int age = RVALUE_FLAGS_AGE(RBASIC(obj)->flags); if (is_pointer_to_heap(&rb_objspace, (void *)obj)) { - APPENDF((BUFF_ARGS, "%p [%d%s%s%s%s%s] %s ", + APPENDF((BUFF_ARGS, "%p [%d%s%s%s%s%s%s] %s ", (void *)obj, age, C(RVALUE_UNCOLLECTIBLE_BITMAP(obj), "L"), C(RVALUE_MARK_BITMAP(obj), "M"), C(RVALUE_PIN_BITMAP(obj), "P"), C(RVALUE_MARKING_BITMAP(obj), "R"), C(RVALUE_WB_UNPROTECTED_BITMAP(obj), "U"), + C(rb_objspace_garbage_object_p(obj), "G"), obj_type_name(obj))); } else { @@ -11474,12 +13111,6 @@ rb_raw_obj_info(char *buff, const int buff_size, VALUE obj) (void *)obj, age, obj_type_name(obj))); } -#else - APPENDF((BUFF_ARGS, "%p [%s] %s", - (void *)obj, - C(RVALUE_MARK_BITMAP(obj), "M"), - obj_type_name(obj))); -#endif if (internal_object_p(obj)) { /* ignore */ @@ -11510,34 +13141,46 @@ rb_raw_obj_info(char *buff, const int buff_size, VALUE obj) rb_obj_info(RARRAY(obj)->as.heap.aux.shared_root))); } else if (FL_TEST(obj, RARRAY_EMBED_FLAG)) { - APPENDF((BUFF_ARGS, "[%s%s] len: %d (embed)", + APPENDF((BUFF_ARGS, "[%s%s] len: %ld (embed)", C(ARY_EMBED_P(obj), "E"), C(ARY_SHARED_P(obj), "S"), - (int)RARRAY_LEN(obj))); + RARRAY_LEN(obj))); } else { - APPENDF((BUFF_ARGS, "[%s%s%s] len: %d, capa:%d ptr:%p", + APPENDF((BUFF_ARGS, "[%s%s%s] len: %ld, capa:%ld ptr:%p", C(ARY_EMBED_P(obj), "E"), C(ARY_SHARED_P(obj), "S"), C(RARRAY_TRANSIENT_P(obj), "T"), - (int)RARRAY_LEN(obj), - ARY_EMBED_P(obj) ? -1 : (int)RARRAY(obj)->as.heap.aux.capa, + RARRAY_LEN(obj), + ARY_EMBED_P(obj) ? -1L : RARRAY(obj)->as.heap.aux.capa, (void *)RARRAY_CONST_PTR_TRANSIENT(obj))); } break; case T_STRING: { - APPENDF((BUFF_ARGS, "%s", RSTRING_PTR(obj))); + if (STR_SHARED_P(obj)) APPENDF((BUFF_ARGS, " [shared] ")); + APPENDF((BUFF_ARGS, "%.*s", str_len_no_raise(obj), RSTRING_PTR(obj))); break; } + case T_SYMBOL: { + VALUE fstr = RSYMBOL(obj)->fstr; + ID id = RSYMBOL(obj)->id; + if (RB_TYPE_P(fstr, T_STRING)) { + APPENDF((BUFF_ARGS, ":%s id:%d", RSTRING_PTR(fstr), (unsigned int)id)); + } + else { + APPENDF((BUFF_ARGS, "(%p) id:%d", (void *)fstr, (unsigned int)id)); + } + break; + } case T_MOVED: { APPENDF((BUFF_ARGS, "-> %p", (void*)rb_gc_location(obj))); break; } case T_HASH: { - APPENDF((BUFF_ARGS, "[%c%c] %d", + APPENDF((BUFF_ARGS, "[%c%c] %"PRIdSIZE, RHASH_AR_TABLE_P(obj) ? 'A' : 'S', RHASH_TRANSIENT_P(obj) ? 'T' : ' ', - (int)RHASH_SIZE(obj))); + RHASH_SIZE(obj))); break; } case T_CLASS: @@ -11547,6 +13190,9 @@ rb_raw_obj_info(char *buff, const int buff_size, VALUE obj) if (!NIL_P(class_path)) { APPENDF((BUFF_ARGS, "%s", RSTRING_PTR(class_path))); } + else { + APPENDF((BUFF_ARGS, "(annon)")); + } break; } case T_ICLASS: @@ -11579,6 +13225,12 @@ rb_raw_obj_info(char *buff, const int buff_size, VALUE obj) (iseq = vm_block_iseq(block)) != NULL) { rb_raw_iseq_info(BUFF_ARGS, iseq); } + else if (rb_ractor_p(obj)) { + rb_ractor_t *r = (void *)DATA_PTR(obj); + if (r) { + APPENDF((BUFF_ARGS, "r:%d", r->pub.id)); + } + } else { const char * const type_name = rb_objspace_data_type_name(obj); if (type_name) { @@ -11588,46 +13240,66 @@ rb_raw_obj_info(char *buff, const int buff_size, VALUE obj) break; } case T_IMEMO: { - const char *imemo_name = "\0"; - switch (imemo_type(obj)) { -#define IMEMO_NAME(x) case imemo_##x: imemo_name = #x; break; - IMEMO_NAME(env); - IMEMO_NAME(cref); - IMEMO_NAME(svar); - IMEMO_NAME(throw_data); - IMEMO_NAME(ifunc); - IMEMO_NAME(memo); - IMEMO_NAME(ment); - IMEMO_NAME(iseq); - IMEMO_NAME(tmpbuf); - IMEMO_NAME(ast); - IMEMO_NAME(parser_strterm); -#undef IMEMO_NAME - default: UNREACHABLE; - } - APPENDF((BUFF_ARGS, "/%s", imemo_name)); + APPENDF((BUFF_ARGS, "<%s> ", rb_imemo_name(imemo_type(obj)))); switch (imemo_type(obj)) { - case imemo_ment: { - const rb_method_entry_t *me = &RANY(obj)->as.imemo.ment; - if (me->def) { - APPENDF((BUFF_ARGS, "(called_id: %s, type: %s, alias: %d, owner: %s, defined_class: %s)", - rb_id2name(me->called_id), - rb_method_type_name(me->def->type), - me->def->alias_count, - obj_info(me->owner), - obj_info(me->defined_class))); - } - else { - APPENDF((BUFF_ARGS, "%s", rb_id2name(me->called_id))); - } - break; - } + case imemo_ment: + { + const rb_method_entry_t *me = &RANY(obj)->as.imemo.ment; + + APPENDF((BUFF_ARGS, ":%s (%s%s%s%s) type:%s alias:%d owner:%p defined_class:%p", + rb_id2name(me->called_id), + METHOD_ENTRY_VISI(me) == METHOD_VISI_PUBLIC ? "pub" : + METHOD_ENTRY_VISI(me) == METHOD_VISI_PRIVATE ? "pri" : "pro", + METHOD_ENTRY_COMPLEMENTED(me) ? ",cmp" : "", + METHOD_ENTRY_CACHED(me) ? ",cc" : "", + METHOD_ENTRY_INVALIDATED(me) ? ",inv" : "", + me->def ? rb_method_type_name(me->def->type) : "NULL", + me->def ? me->def->alias_count : -1, + (void *)me->owner, // obj_info(me->owner), + (void *)me->defined_class)); //obj_info(me->defined_class))); + + if (me->def) { + switch (me->def->type) { + case VM_METHOD_TYPE_ISEQ: + APPENDF((BUFF_ARGS, " (iseq:%s)", obj_info((VALUE)me->def->body.iseq.iseqptr))); + break; + default: + break; + } + } + + break; + } case imemo_iseq: { const rb_iseq_t *iseq = (const rb_iseq_t *)obj; rb_raw_iseq_info(BUFF_ARGS, iseq); break; } + case imemo_callinfo: + { + const struct rb_callinfo *ci = (const struct rb_callinfo *)obj; + APPENDF((BUFF_ARGS, "(mid:%s, flag:%x argc:%d, kwarg:%s)", + rb_id2name(vm_ci_mid(ci)), + vm_ci_flag(ci), + vm_ci_argc(ci), + vm_ci_kwarg(ci) ? "available" : "NULL")); + break; + } + case imemo_callcache: + { + const struct rb_callcache *cc = (const struct rb_callcache *)obj; + VALUE class_path = cc->klass ? rb_class_path_cached(cc->klass) : Qnil; + const rb_callable_method_entry_t *cme = vm_cc_cme(cc); + + APPENDF((BUFF_ARGS, "(klass:%s cme:%s%s (%p) call:%p", + NIL_P(class_path) ? (cc->klass ? "??" : "") : RSTRING_PTR(class_path), + cme ? rb_id2name(cme->called_id) : "", + cme ? (METHOD_ENTRY_INVALIDATED(cme) ? " [inv]" : "") : "", + (void *)cme, + (void *)vm_cc_call(cc))); + break; + } default: break; } @@ -11639,6 +13311,10 @@ rb_raw_obj_info(char *buff, const int buff_size, VALUE obj) #undef C } end: + if (poisoned) { + asan_poison_object(obj); + } + return buff; #undef APPENDF #undef BUFF_ARGS @@ -11683,7 +13359,7 @@ rb_obj_info_dump(VALUE obj) fprintf(stderr, "rb_obj_info_dump: %s\n", rb_raw_obj_info(buff, 0x100, obj)); } -void +MJIT_FUNC_EXPORTED void rb_obj_info_dump_loc(VALUE obj, const char *file, int line, const char *func) { char buff[0x100]; @@ -11715,14 +13391,12 @@ rb_gcdebug_print_obj_condition(VALUE obj) fprintf(stderr, "marked? : %s\n", MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(obj), obj) ? "true" : "false"); fprintf(stderr, "pinned? : %s\n", MARKED_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), obj) ? "true" : "false"); -#if USE_RGENGC fprintf(stderr, "age? : %d\n", RVALUE_AGE(obj)); fprintf(stderr, "old? : %s\n", RVALUE_OLD_P(obj) ? "true" : "false"); fprintf(stderr, "WB-protected?: %s\n", RVALUE_WB_UNPROTECTED(obj) ? "false" : "true"); fprintf(stderr, "remembered? : %s\n", RVALUE_REMEMBERED(obj) ? "true" : "false"); -#endif - if (is_lazy_sweeping(heap_eden)) { + if (is_lazy_sweeping(objspace)) { fprintf(stderr, "lazy sweeping?: true\n"); fprintf(stderr, "swept?: %s\n", is_swept_object(objspace, obj) ? "done" : "not yet"); } @@ -11801,9 +13475,9 @@ rb_gcdebug_remove_stress_to_class(int argc, VALUE *argv, VALUE self) * * ObjectSpace also provides support for object finalizers, procs that will be * called when a specific object is about to be destroyed by garbage - * collection. - * - * require 'objspace' + * collection. See the documentation for + * ObjectSpace.define_finalizer for important information on + * how to use this method correctly. * * a = "A" * b = "B" @@ -11811,6 +13485,9 @@ rb_gcdebug_remove_stress_to_class(int argc, VALUE *argv, VALUE self) * ObjectSpace.define_finalizer(a, proc {|id| puts "Finalizer one on #{id}" }) * ObjectSpace.define_finalizer(b, proc {|id| puts "Finalizer two on #{id}" }) * + * a = nil + * b = nil + * * _produces:_ * * Finalizer two on 537763470 @@ -11856,13 +13533,15 @@ Init_GC(void) VALUE gc_constants; rb_mGC = rb_define_module("GC"); - load_gc(); gc_constants = rb_hash_new(); + rb_hash_aset(gc_constants, ID2SYM(rb_intern("DEBUG")), RBOOL(GC_DEBUG)); rb_hash_aset(gc_constants, ID2SYM(rb_intern("RVALUE_SIZE")), SIZET2NUM(sizeof(RVALUE))); rb_hash_aset(gc_constants, ID2SYM(rb_intern("HEAP_PAGE_OBJ_LIMIT")), SIZET2NUM(HEAP_PAGE_OBJ_LIMIT)); rb_hash_aset(gc_constants, ID2SYM(rb_intern("HEAP_PAGE_BITMAP_SIZE")), SIZET2NUM(HEAP_PAGE_BITMAP_SIZE)); - rb_hash_aset(gc_constants, ID2SYM(rb_intern("HEAP_PAGE_BITMAP_PLANES")), SIZET2NUM(HEAP_PAGE_BITMAP_PLANES)); + rb_hash_aset(gc_constants, ID2SYM(rb_intern("HEAP_PAGE_SIZE")), SIZET2NUM(HEAP_PAGE_SIZE)); + rb_hash_aset(gc_constants, ID2SYM(rb_intern("SIZE_POOL_COUNT")), LONG2FIX(SIZE_POOL_COUNT)); + rb_hash_aset(gc_constants, ID2SYM(rb_intern("RVARGC_MAX_ALLOCATE_SIZE")), LONG2FIX(size_pool_slot_size(SIZE_POOL_COUNT - 1))); OBJ_FREEZE(gc_constants); /* internal constants */ rb_define_const(rb_mGC, "INTERNAL_CONSTANTS", gc_constants); @@ -11915,7 +13594,6 @@ Init_GC(void) /* internal methods */ rb_define_singleton_method(rb_mGC, "verify_internal_consistency", gc_verify_internal_consistency_m, 0); - rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); rb_define_singleton_method(rb_mGC, "verify_transient_heap_internal_consistency", gc_verify_transient_heap_internal_consistency, 0); #if MALLOC_ALLOCATED_SIZE rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0); diff --git a/ruby/gc.h b/ruby/gc.h index cf794fa51..91d6e5787 100644 --- a/ruby/gc.h +++ b/ruby/gc.h @@ -1,19 +1,30 @@ - #ifndef RUBY_GC_H #define RUBY_GC_H 1 +#include "ruby/ruby.h" #if defined(__x86_64__) && !defined(_ILP32) && defined(__GNUC__) #define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movq\t%%rsp, %0" : "=r" (*(p))) #elif defined(__i386) && defined(__GNUC__) #define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movl\t%%esp, %0" : "=r" (*(p))) -#elif defined(__powerpc64__) && defined(__GNUC__) +#elif (defined(__powerpc__) || defined(__powerpc64__)) && defined(__GNUC__) && !defined(_AIX) #define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mr\t%0, %%r1" : "=r" (*(p))) +#elif (defined(__powerpc__) || defined(__powerpc64__)) && defined(__GNUC__) && defined(_AIX) +#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mr %0,1" : "=r" (*(p))) +#elif defined(__aarch64__) && defined(__GNUC__) +#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mov\t%0, sp" : "=r" (*(p))) #else NOINLINE(void rb_gc_set_stack_end(VALUE **stack_end_p)); #define SET_MACHINE_STACK_END(p) rb_gc_set_stack_end(p) #define USE_CONSERVATIVE_STACK_END #endif +#define RB_GC_SAVE_MACHINE_CONTEXT(th) \ + do { \ + FLUSH_REGISTER_WINDOWS; \ + setjmp((th)->ec->machine.regs); \ + SET_MACHINE_STACK_END(&(th)->ec->machine.stack_end); \ + } while (0) + /* for GC debug */ #ifndef RUBY_MARK_FREE_DEBUG @@ -26,7 +37,7 @@ extern int ruby_gc_debug_indent; static inline void rb_gc_debug_indent(void) { - printf("%*s", ruby_gc_debug_indent, ""); + ruby_debug_printf("%*s", ruby_gc_debug_indent, ""); } static inline void @@ -36,7 +47,7 @@ rb_gc_debug_body(const char *mode, const char *msg, int st, void *ptr) ruby_gc_debug_indent--; } rb_gc_debug_indent(); - printf("%s: %s %s (%p)\n", mode, st ? "->" : "<-", msg, ptr); + ruby_debug_printf("%s: %s %s (%p)\n", mode, st ? "->" : "<-", msg, ptr); if (st) { ruby_gc_debug_indent++; @@ -49,7 +60,7 @@ rb_gc_debug_body(const char *mode, const char *msg, int st, void *ptr) #define RUBY_MARK_LEAVE(msg) rb_gc_debug_body("mark", (msg), 0, ptr) #define RUBY_FREE_ENTER(msg) rb_gc_debug_body("free", (msg), 1, ptr) #define RUBY_FREE_LEAVE(msg) rb_gc_debug_body("free", (msg), 0, ptr) -#define RUBY_GC_INFO rb_gc_debug_indent(); printf +#define RUBY_GC_INFO rb_gc_debug_indent(), ruby_debug_printf #else #define RUBY_MARK_ENTER(msg) @@ -59,7 +70,7 @@ rb_gc_debug_body(const char *mode, const char *msg, int st, void *ptr) #define RUBY_GC_INFO if(0)printf #endif -#define RUBY_MARK_NO_PIN_UNLESS_NULL(ptr) do { \ +#define RUBY_MARK_MOVABLE_UNLESS_NULL(ptr) do { \ VALUE markobj = (ptr); \ if (RTEST(markobj)) {rb_gc_mark_movable(markobj);} \ } while (0) @@ -116,7 +127,6 @@ void rb_objspace_reachable_objects_from_root(void (func)(const char *category, V int rb_objspace_markable_object_p(VALUE obj); int rb_objspace_internal_object_p(VALUE obj); int rb_objspace_marked_object_p(VALUE obj); -int rb_objspace_garbage_object_p(VALUE obj); void rb_objspace_each_objects( int (*callback)(void *start, void *end, size_t stride, void *data), diff --git a/ruby/gc.rb b/ruby/gc.rb index fcfa48fbe..72637f379 100644 --- a/ruby/gc.rb +++ b/ruby/gc.rb @@ -31,11 +31,32 @@ module GC # are not guaranteed to be future-compatible, and may be ignored if the # underlying implementation does not support them. def self.start full_mark: true, immediate_mark: true, immediate_sweep: true - __builtin_gc_start_internal full_mark, immediate_mark, immediate_sweep + Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false end def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true - __builtin_gc_start_internal full_mark, immediate_mark, immediate_sweep + Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false + end + + # call-seq: + # GC.auto_compact -> true or false + # + # Returns whether or not automatic compaction has been enabled. + # + def self.auto_compact + Primitive.gc_get_auto_compact + end + + # call-seq: + # GC.auto_compact = flag + # + # Updates automatic compaction mode. + # + # When enabled, the compactor will execute on every major collection. + # + # Enabling compaction will degrade performance on major collections. + def self.auto_compact=(flag) + Primitive.gc_set_auto_compact(flag) end # call-seq: @@ -49,7 +70,7 @@ def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true # GC.enable #=> false # def self.enable - __builtin_gc_enable + Primitive.gc_enable end # call-seq: @@ -61,7 +82,7 @@ def self.enable # GC.disable #=> false # GC.disable #=> true def self.disable - __builtin_gc_disable + Primitive.gc_disable end # call-seq: @@ -69,7 +90,7 @@ def self.disable # # Returns current status of GC stress mode. def self.stress - __builtin_gc_stress_get + Primitive.gc_stress_get end # call-seq: @@ -87,7 +108,7 @@ def self.stress # 0x02:: no immediate sweep # 0x04:: full mark after malloc/calloc/realloc def self.stress=(flag) - __builtin_gc_stress_set_m flag + Primitive.gc_stress_set_m flag end # call-seq: @@ -97,52 +118,82 @@ def self.stress=(flag) # # It returns the number of times GC occurred since the process started. def self.count - __builtin_gc_count + Primitive.gc_count end # call-seq: # GC.stat -> Hash - # GC.stat(hash) -> hash + # GC.stat(hash) -> Hash # GC.stat(:key) -> Numeric # # Returns a Hash containing information about the GC. # + # The contents of the hash are implementation specific and may change in + # the future without notice. + # # The hash includes information about internal statistics about GC such as: # - # { - # :count=>0, - # :heap_allocated_pages=>24, - # :heap_sorted_length=>24, - # :heap_allocatable_pages=>0, - # :heap_available_slots=>9783, - # :heap_live_slots=>7713, - # :heap_free_slots=>2070, - # :heap_final_slots=>0, - # :heap_marked_slots=>0, - # :heap_eden_pages=>24, - # :heap_tomb_pages=>0, - # :total_allocated_pages=>24, - # :total_freed_pages=>0, - # :total_allocated_objects=>7796, - # :total_freed_objects=>83, - # :malloc_increase_bytes=>2389312, - # :malloc_increase_bytes_limit=>16777216, - # :minor_gc_count=>0, - # :major_gc_count=>0, - # :remembered_wb_unprotected_objects=>0, - # :remembered_wb_unprotected_objects_limit=>0, - # :old_objects=>0, - # :old_objects_limit=>0, - # :oldmalloc_increase_bytes=>2389760, - # :oldmalloc_increase_bytes_limit=>16777216 - # } - # - # The contents of the hash are implementation specific and may be changed in - # the future. - # - # This method is only expected to work on C Ruby. + # [count] + # The total number of garbage collections ran since application start + # (count includes both minor and major garbage collections) + # [heap_allocated_pages] + # The total number of `:heap_eden_pages` + `:heap_tomb_pages` + # [heap_sorted_length] + # The number of pages that can fit into the buffer that holds references to + # all pages + # [heap_allocatable_pages] + # The total number of pages the application could allocate without additional GC + # [heap_available_slots] + # The total number of slots in all `:heap_allocated_pages` + # [heap_live_slots] + # The total number of slots which contain live objects + # [heap_free_slots] + # The total number of slots which do not contain live objects + # [heap_final_slots] + # The total number of slots with pending finalizers to be run + # [heap_marked_slots] + # The total number of objects marked in the last GC + # [heap_eden_pages] + # The total number of pages which contain at least one live slot + # [heap_tomb_pages] + # The total number of pages which do not contain any live slots + # [total_allocated_pages] + # The cumulative number of pages allocated since application start + # [total_freed_pages] + # The cumulative number of pages freed since application start + # [total_allocated_objects] + # The cumulative number of objects allocated since application start + # [total_freed_objects] + # The cumulative number of objects freed since application start + # [malloc_increase_bytes] + # Amount of memory allocated on the heap for objects. Decreased by any GC + # [malloc_increase_bytes_limit] + # When `:malloc_increase_bytes` crosses this limit, GC is triggered + # [minor_gc_count] + # The total number of minor garbage collections run since process start + # [major_gc_count] + # The total number of major garbage collections run since process start + # [remembered_wb_unprotected_objects] + # The total number of objects without write barriers + # [remembered_wb_unprotected_objects_limit] + # When `:remembered_wb_unprotected_objects` crosses this limit, + # major GC is triggered + # [old_objects] + # Number of live, old objects which have survived at least 3 garbage collections + # [old_objects_limit] + # When `:old_objects` crosses this limit, major GC is triggered + # [oldmalloc_increase_bytes] + # Amount of memory allocated on the heap for objects. Decreased by major GC + # [oldmalloc_increase_bytes_limit] + # When `:old_malloc_increase_bytes` crosses this limit, major GC is triggered + # + # If the optional argument, hash, is given, + # it is overwritten and returned. + # This is intended to avoid probe effect. + # + # This method is only expected to work on CRuby. def self.stat hash_or_key = nil - __builtin_gc_stat hash_or_key + Primitive.gc_stat hash_or_key end # call-seq: @@ -151,18 +202,109 @@ def self.stat hash_or_key = nil # GC.latest_gc_info(:major_by) -> :malloc # # Returns information about the most recent garbage collection. + # + # If the optional argument, hash, is given, + # it is overwritten and returned. + # This is intended to avoid probe effect. def self.latest_gc_info hash_or_key = nil - __builtin_gc_latest_gc_info hash_or_key + Primitive.gc_latest_gc_info hash_or_key + end + + # call-seq: + # GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} + # + # Returns information about object moved in the most recent GC compaction. + # + # The returned hash has two keys :considered and :moved. The hash for + # :considered lists the number of objects that were considered for movement + # by the compactor, and the :moved hash lists the number of objects that + # were actually moved. Some objects can't be moved (maybe they were pinned) + # so these numbers can be used to calculate compaction efficiency. + def self.latest_compact_info + Primitive.gc_compact_stats end + # call-seq: + # GC.compact + # + # This function compacts objects together in Ruby's heap. It eliminates + # unused space (or fragmentation) in the heap by moving objects in to that + # unused space. This function returns a hash which contains statistics about + # which objects were moved. See `GC.latest_gc_info` for details about + # compaction statistics. + # + # This method is implementation specific and not expected to be implemented + # in any implementation besides MRI. def self.compact - __builtin_rb_gc_compact + Primitive.gc_compact + end + + # call-seq: + # GC.verify_compaction_references(toward: nil, double_heap: false) -> hash + # + # Verify compaction reference consistency. + # + # This method is implementation specific. During compaction, objects that + # were moved are replaced with T_MOVED objects. No object should have a + # reference to a T_MOVED object after compaction. + # + # This function doubles the heap to ensure room to move all objects, + # compacts the heap to make sure everything moves, updates all references, + # then performs a full GC. If any object contains a reference to a T_MOVED + # object, that object should be pushed on the mark stack, and will + # make a SEGV. + def self.verify_compaction_references(toward: nil, double_heap: false) + Primitive.gc_verify_compaction_references(double_heap, toward == :empty) + end + + # call-seq: + # GC.using_rvargc? -> true or false + # + # Returns true if using experimental feature Variable Width Allocation, false + # otherwise. + def self.using_rvargc? # :nodoc: + GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] > 1 + end + + + # call-seq: + # GC.measure_total_time = true/false + # + # Enable to measure GC time. + # You can get the result with GC.stat(:time). + # Note that GC time measurement can cause some performance overhead. + def self.measure_total_time=(flag) + Primitive.cstmt! %{ + rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE; + return flag; + } + end + + # call-seq: + # GC.measure_total_time -> true/false + # + # Return measure_total_time flag (default: +true+). + # Note that measurement can affect the application performance. + def self.measure_total_time + Primitive.cexpr! %{ + RBOOL(rb_objspace.flags.measure_gc) + } + end + + # call-seq: + # GC.total_time -> int + # + # Return measured GC total time in nano seconds. + def self.total_time + Primitive.cexpr! %{ + ULL2NUM(rb_objspace.profile.total_time_ns) + } end end module ObjectSpace def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true - __builtin_gc_start_internal full_mark, immediate_mark, immediate_sweep + Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false end module_function :garbage_collect diff --git a/ruby/gc.rbinc b/ruby/gc.rbinc index d893a077c..03df06db4 100644 --- a/ruby/gc.rbinc +++ b/ruby/gc.rbinc @@ -3,8 +3,13 @@ // auto-generated file // by ./tool/mk_builtin_loader.rb // with gc.rb +#include "internal/compilers.h" /* for MAYBE_UNUSED */ +#include "internal/warnings.h" /* for COMPILER_WARNING_PUSH */ +#include "ruby/ruby.h" /* for VALUE */ +#include "builtin.h" /* for RB_BUILTIN_FUNCTION */ +struct rb_execution_context_struct; /* in vm_core.h */ -static void load_gc(void) +void Init_builtin_gc(void) { // table definition static const struct rb_builtin_function gc_table[] = { diff --git a/ruby/gem_prelude.rb b/ruby/gem_prelude.rb index 1d0158d00..94ada316a 100644 --- a/ruby/gem_prelude.rb +++ b/ruby/gem_prelude.rb @@ -1,2 +1,19 @@ -require 'rubygems.rb' if defined?(Gem) -require 'did_you_mean' if defined?(DidYouMean) +begin + require 'rubygems' +rescue LoadError => e + raise unless e.path == 'rubygems' + + warn "`RubyGems' were not loaded." +end if defined?(Gem) + +begin + require 'error_highlight' +rescue LoadError + warn "`error_highlight' was not loaded." +end if defined?(ErrorHighlight) + +begin + require 'did_you_mean' +rescue LoadError + warn "`did_you_mean' was not loaded." +end if defined?(DidYouMean) diff --git a/ruby/gem_prelude.rbinc b/ruby/gem_prelude.rbinc deleted file mode 100644 index 20723847e..000000000 --- a/ruby/gem_prelude.rbinc +++ /dev/null @@ -1,23 +0,0 @@ -// -*- c -*- -// DO NOT MODIFY THIS FILE DIRECTLY. -// auto-generated file -// by ./tool/mk_builtin_loader.rb -// with gem_prelude.rb - -static void load_gem_prelude(void) -{ - // table definition - static const struct rb_builtin_function gem_prelude_table[] = { - RB_BUILTIN_FUNCTION(-1, NULL, NULL, 0), - }; - - // arity_check -COMPILER_WARNING_PUSH -#if GCC_VERSION_SINCE(5, 1, 0) || __clang__ -COMPILER_WARNING_ERROR(-Wincompatible-pointer-types) -#endif -COMPILER_WARNING_POP - - // load - rb_load_with_builtin_functions("gem_prelude", gem_prelude_table); -} diff --git a/ruby/gems/bundled_gems b/ruby/gems/bundled_gems index ce2dd1bdb..9e37598e9 100644 --- a/ruby/gems/bundled_gems +++ b/ruby/gems/bundled_gems @@ -1,6 +1,16 @@ -minitest 5.13.0 https://github.com/seattlerb/minitest -net-telnet 0.2.0 https://github.com/ruby/net-telnet -power_assert 1.1.7 https://github.com/k-tsj/power_assert -rake 13.0.1 https://github.com/ruby/rake -test-unit 3.3.4 https://github.com/test-unit/test-unit -xmlrpc 0.3.0 https://github.com/ruby/xmlrpc +# gem-name version-to-bundle repository-url [optional-commit-hash-to-test-or-defaults-to-v-version] +minitest 5.15.0 https://github.com/seattlerb/minitest +power_assert 2.0.1 https://github.com/ruby/power_assert +rake 13.0.6 https://github.com/ruby/rake +test-unit 3.5.3 https://github.com/test-unit/test-unit 3.5.3 +rexml 3.2.5 https://github.com/ruby/rexml +rss 0.2.9 https://github.com/ruby/rss 0.2.9 +net-ftp 0.1.3 https://github.com/ruby/net-ftp +net-imap 0.2.3 https://github.com/ruby/net-imap +net-pop 0.1.1 https://github.com/ruby/net-pop +net-smtp 0.3.1 https://github.com/ruby/net-smtp +matrix 0.4.2 https://github.com/ruby/matrix +prime 0.1.2 https://github.com/ruby/prime +rbs 2.1.0 https://github.com/ruby/rbs +typeprof 0.21.2 https://github.com/ruby/typeprof +debug 1.4.0 https://github.com/ruby/debug diff --git a/ruby/gems/minitest-5.13.0.gem b/ruby/gems/minitest-5.13.0.gem deleted file mode 100644 index eaf1c8b74db69f47955c7707c363d22906131db1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83968 zcmeEsQ;;w`v*y^gZQHhO+qP%kv29!L*tTukwz=Qgy*Ow8i`}cUsNKFvQe8=Pr;|!Q zPukYh#n8mi#gNY23*bLX82%9!78ZbiYyXjdZCROE837oXSy|bb7}y!v*#Q_BnORub z00$*C-7&`r9lDmbesm*^>{7e6TrvGog{kwDjGX4M5A$}ADfInQjE)ejt zhNbhx80z;-?b$s#xp9z2mmsO~JQxJ9*=W2}yOt6$tAv%N6`=^(`*k~Q-`eea_c)De zg#mVvp4{&7*5Wowl<1Ria(c$l6l=Xlk?5D0F%D8xO?e2XsUTq=pCv&aSaMQ2dJ9Qp zLHqr9*LuO%F<6jaXtap8sAD6na7z9`AkllJr__1zO1?}CS>Y6NuN|mv-oZIAYtF0f+EZDG2vM|gHcH{t!%9N>GcRTMQ*$o-= zxQm6mbEkM$ZQ&ADEthb9>8ea5I_<_QhvbJiOPS3jo5h^CDD_nsfMe)G3OLv&meeW|dKV_jG>G{LUDjjj83+ zIp!e0$W!83EqsC@i~tXQnVOf@6OaQYHYMA(GoFT$eY@%&o+VUM3hUS+coW!q;ne96_cHG=$ zjafC{Xg#~_DK92)!+GbbneTr)9L+Bnhu4cx zwqTQ3XH}e;;*K4CpC$kgmX8}h-ON}0Wx%W}7H!g+D^bffzxn1!eKvixc(!>t)S+1| z7dCH%J7f}f2L0^IE-iNaaAyGq6rWJD&Z^J+B+q@9H*|+9vo9K=y<2&wrBwSz6g>;a z#Hg&D)Ez$>U+w@G=9N=wvVlZC8IB|s(Y%!PStYkyOC%1gEpN&U-Ikg0u0F(^yq(%h zV)eC+2dgaOO;~d#9%2aBDB)Eblia@Rm@DDZcXRY;UoEd4o9v})GGtFvn+_D6^b<7O zs;U~WJIdWjO#PsF@@SQu0T3FUoU5kZ-ApBjxpjG4JQke5<2pKAzUWA+O*FmLs-3=F z<5grf+slyTsSGpHsyioiZHXsn=Dacsq;wXJPK-Sp%CVc>vdPvPOx;dj6BcQ#`D9bw z^s!*KUaVPtE?zojaeFO2D=8K62`<)y-*Z)ZvRtk#PuaRU@7bkval_gw1D_{fy-RjXIQ&%$Jv`T$w9CH*c2xh+5qio{Cky^gp#K zY^DS+DvzbQH7L=oO;zaFA9j`ApM)j@WrdK|Na`rYNgu8Em*t3=5Epc6iL*5C9F~;x zK)#rV@p3v1@51)$k}W6)W{2hdyT|Z{4qr`v@4S$IC$p5^AEF=9cEOzJ2|UmOm0`1N zB1Q*_x(!8$4iIsKSE0NaId6IB@p;~VpTByiS|-QvQ?LAgpEj$iQ>fs7Csn@rI&G1( z5n(-dUK%+>vgLRTxHpx~#4$9d;CTliBazR9Z9;}1usHUTMR_L*L<;C(G)c4oO$#ko zB@pfT8rkODVjK*Jkrz%sIFM*d2IecFf!o*6COtS}6{XsvxR%77g@~=%!$IvQ`vGE= zgxEN>r1sc}$WQA|>yy{QnN8ZGhYc){a%f`$m?)#z93goZEP^&1YLIpSwQNuARA)@qfNfG`e$49UaC&~av-A>)xL5P~@&NstzPr2{k!2BH!T0nnC~B*gO^LWZ!QRG3u-V+F}a+yW!F zrym~Bjz7yNBti9c6@mahWIj6Vk*pz>e6K*G4+4t z#xa~BBmLo|u(K1XnI&BcW{u6&fqoGYNk=TJ1_e70MM6Ezp zLHG?(8%~DK$KQdT4Pe46xX-P0OS{VC+uNXmQL$%!&FDfwJAA^+nLD*G%1^ zCEQ#K(!ZzgN7GW^-p`xh00!UW+h$&sC1oP%nwz$`duJ*!Dq zn9(+Tt>sS>By)l}=oRi=20|-o1;Ghyh5Qx&F znVud9!cvh|K!)6bASOR=1Wh2EmVmjTY>k2r3o88I0fn_yPd(1MT4$;u9vI$mw0p+q zAxoYKfL;o;pUqqlM~E3w()cBybwuiMQV2O#|6gz(=QH#LcdzKXD2~$Js&aRZ^;S!m zDASU!J3SHJH8-_A!HCk*A9`ar=fLwtP5E!3e9|dqYqqjQp zcqJ2|zv8lxaH$KF@uw^HtrF(u)@(@{ju_QYba&+>k$f??tXd-vW>y5H)WkNZNpc4EVZx_lx1p)!)cJJO{N5{_ddgL#mnY-IIELc<%LvP$Z)zEf zzsyGNXTY3ZnmL=5+FjHU27oT!8wfFj`Tc&UA3V=w3FUn9Emq!$?R4LBpre0&s{h72 z-{uz${P_i_WW92MM*lxGeg41RF57>{e{{~4=Km@F{2Mg-AK*U*mVYqee~1fY?X>sP+X}8d(#p3Qo3vt4=sl~8W7EEjE z3pCoE%p7(Z3rMFGbnlQF1EK4>pwIgfzD*@mT21Q-V|EtGc@U?xNf?#di+b@UQM9O z^k>g46g3l?0}{9^#2#&skxU*EA>t%K9p&E?#1a6uKt2=ez%DkJd|dTRe6%=~l=D?> zrrQR9@FF{0Z*=ECjsodeZC0!9@LPs57u6E+yzl(&$a}Ht^mTB!>umW_`Q6^!-u&IZ z`6&{Qd)<(C%i}3HeSO{N?1kRw{e<;1^F%abN#0aMiMjQ#+kRah|Av2Ghso4u39?zq zIZV@{jr!q>YNS|Wa;Z-e)hIBsURUpaGNTR$@4r9K>)q_|aD6$g#d-XSP78Hg7cfD;DQcRLp*{cbJ{~ zp0@dc`u!o8=MzCsZs^u6D=)XO^IQqeKj;4Ex8IcU@}R^A>shVa1yOdfDxArak!oO) zh~^;oJ4vthXYa4H)dNYteeD2`5IM7zy(+oAx#0>u?6pxUiJ?1AwZ)GARJ1Jrz-6%)g4ad22Z09C;czV4O_G&$@j9^LpQFM8i;<(-K$5a2A z*-j2}H*R~=@21yXr{CKf+@@Fbo8M7z`5({UUo`&NJbrk*X17=EYXfqEic3xB*6l5C zwZFcIJka4qC7AcAis?^np|wBVPF0?XuH;*jQi{doy%w#kE14 z-Jvz|geL{unnio?!6i8)%Ue9U`{9JN4pU4cVZM%=WX_we>I=o@U&r7I`?eM zW_rsrp6fDOI+v%nd9lm`6+3n!`|#S&3>r>FWg`)qlkhxQYOIM8kr9!45w04}fjcf> z&weC?KQ5V0Ui!OB{z9L2x^$tVk53Horf6I6I%yrCdV9DejeHxV8nbCPQFPBo(ZVc7 zbKoZVPzI4gl7Js8L@}M(3WKu5+okG>OA4GGV%3^+@RDGP0m53RmwuB>JeqM?z=abC zfGy!SGeg-I9;NoAmh#Dcx+q243{JtAB+d6{iF6I1@4JH3TbU<|(a?TOuD+z%!$10V z#PS}foOaWYFGM$pYt zUwBHu%bVq#Hwkl-jK-{32suMqfYv?f66NfD2A{t1eq)Dt%3Q+L;LNAe)@ASJJ(xWL zVoc2oF=e@&!*UHQG7P?rbj>um&Iws8@|`H&?N>ftd>sl|Gk-+t;lwW5anRjAsX3%1 zatUZN>_EkHIuXk>EysKj$1%}dFD@!1Jn0uy>CPu_knAq ze&JnPQMY)~WLyWn(8;~k>TfS_0rXgc{;%tR#5`|gaJ9s%CV?NLsJ&ty-bC}49L8pmNuvj=i87Vt6D(?DIWli9PEJs7}M) zBuR5HSI5O4w`iEINSxHRnl6O(KCFj3-Ib2Ku7wQuLK)?~N_=40lYE<$`H;aa5u?xY zce8N$wpem0VVStbQThOxv8_wwo`78Q8H^ciLE4LiGcepkdLm{bwZL*C&nVTnR7YCJ&10aF^5^O9@L)dsB??4;|-V3k6ckU!kime%r0 zO>ahZgB0+N4Un=x^AV30O1XDdbW*w%GKTU^xbN3Zf<*bG@{`j3p+0|;fWR@jjcU8b zH*vyC13SJ_LgXu_J&X;X-&2glCCM+cR{FH_Z`FyUvwLm(>JPrt0RHc;!@#dSXSq{v z6pHov)~Po4TB<+ZnK#Z^3*t^L%cgv$cc(kFs@j3xlIs4`I*Mh&Z|)q);W-BrbyfrQ z9}zpfx_mgI=vH+}Rmmynq{IO32vDz^yL)Pp>McX*!ajO4E) zu2=JJbMxTbQIB;5 zfxC3D&xoZlh$fy_Q4wmLQniw4OZu-*oG*f_8ZXG9gGEtEq|xw57p3vrx{E@A4(`+%OQNBg?t3QdwVRZciRFW#KCFBWx_y^b+Pw z%5o?(XD*AkTLvOs4Xp;SzeKb{!A;Af6^z0t8;}>L`(+AXkFY!rf*d3*EWsU%3CbCr z%EhBEM>3MB)e$xZ8Fx?BGZR#>D-m&GY^A!dkh1oZqiwXCozm9|R^1p0W)04~xzAw< z7|<4R9{f{~cWY))WHeJO>e{+!q}rg2bICWzSiS9d_Xmn;E-nYxE4eEC>zN3S#j8~= z=>0r7>%&$Xq2HEG*DP*XpSHa8%hLMfN1DWIYfYP88~MLH)*!_j$BynW#+se`Nsd8p zx?E^-6jiWfN0jG#l^V5O-MxUIoXm0YEeZ^D6onsZ4y=*Rg!CAN--p;dej4kXt;EZ! zkE!_L>`YyCUY+-?wHk3Hd{<>&LNJE@dyxGM3=#fDOnfSnG6o_9sN`pfOnDj=Vzl5- zo|kamH8hfp6K7_Hh%aVF#u?ycO&y~)1cMrJ4TQ|jKf$SoY&fr{8JS%pis^ea%jA|b zYNlMMn}CXHfA&KesS(%>qJ`&OY4r_SY1kW9xj354%1EIk=-5)HGS4lmEr7;tjAR36 zw*&)4@8%z(4vB~^N)S&Iu;?sTh!0Sb^1+M73BXj5;xHpUP1$hX*(WGss-o64L%;kAq@V4S8t1HW3n6=jcke8=DVF#6F3aEfQQj#ZjZh)nP@S>{cOXDNt4(<+ecTi zPe!=}-obsNbS+A`POLQ1WYs8_^B8v%i0W>lvb!_*?%KOx_ z0?r1J%<^eN4x7wLSx~GkKlqAtK6xkZ?c(`=Ty+}Dm7-S=Xq`Ke;Xzpj0qXUVBvg#dC%CXo$2@)4;{kt#FQ zq|!UqYtyx>MF;o*No%oXp&3!}@ON}|dAU2j++TOj-0SP%=IQ5TC-^DDk1~MIoTEv7 z6xZ5#`v_RRTVBrp4iUdKxf+CZTa#{0pibEdk%wv%Q;+m%;ipr?G#~Jc5xx>KK)g;w zn?+iu+usOzyb{bj6ds2b4!jWS6m`nq5W6{vK&|{S+XVe1qtOgtxR7o!nY?2#QNsI4 z8BA>F-3*A3H(y}nm?LuL!BEy(`ZQD3X{^sSxZOBtTgz}IRb<3l4dstvOrM=tBVi?j zwe;SRAxvS~PAn&AV#p@OGaGpJw8ZcwE@S(7S=C+mrv6f95C)#EUHICtK0E2DCz53R z#&Um8+Bk2FT&&D_;x!Gpke6^*A_;5**aEk{Ueb=$kDoV&&h0&5syAXDsSv&0;>Z4|qqD_S!S_}X19Qm`;1I05b zXUaVpRrsn_SA`R6EX57(>wrV)vN4U6qP-6OPZ)wBg-2CubRBU`S&M5Aj z99o`$?J)NMR2SP>XS9?pGC3bUQgunMEi93cKN}aZZkUVTEn_{#1ZM5*C~q(FE7cbw zfv#Vhv2dJ;vMhj_iZe`{Ch&OGtBGhsJ}yS31HN*-{s(>ggf7Y7Nt(26cdl+qP5NB_}_D(MTN`N<2Sg$D>3} zC~5ClN>D8s*cpZ-iTRno6ibB53@1d#Hh?F&t)8{9srR;YfoEh{;PhR)s8BuIREdLHGS3x$3q$G%fJEZ!FoBU#VBW@9SCn+I!T8f|q(eo-jng)y*;-!wrW+q^mn zA=_RZZZBjt_#jXNiV(@_9$$ZxvSFO4%R6-8D04)CKq(c}PqGmmox{5p-W6gA(2fK@Y{*bHWfF`fz-Fe}8!jPSr%IZEHZr7F+o+LNsn|q2(nO~k`gNlU-(Ue!+z}jTSJ!dXFTAx zB3^|2EseRg30y3n#~{Nl2f+0!;+npR$A!*7O5GhyUrmU^X7%~D?W8UYqnQVTsa??N z8+|KJ(Vy)&q|Dl4rAV>Y_qh+&dKK>SJko#>T`&QhxQDyog{;u+syKY>bPeCDLN0Lh zIv6A<#~~BV66y5|wQguRbl7(q>WgwB(V~meQFeQ5J$vsrGuH6s^3@oTk=sKm6*O(E zbZA%j<9?S)K&hYyM!CT^&yJo87WVMh02;8SJ=%Wxn9EGE6zV~d3;Pw_RsTy|N62(j zLE*NH`NO}H>r-s7c-gZ{jlUzi@{Uh7f=JA$0LZv>wpF`k8hDdTaWJzSv4t0_0L7f7 z2ySg*;nl_tEBlcc)^Cq;?DNLtpp;Lej6UT!Jtx4<7l(lz?1KSz>ZBFNkT-cxr1p@v z_ONq+KmBoD(p6EUdhT26g?DXa`+TjnQL8xsf1#%ix6K@31n80H{9604d=2Su&4W-6 znE1R0SGu4X&xBWzC*sTlx63N88DASJ0r(gZRum&EV?-@+M|pQb=U_`Ko55MomYdjF zUruS5C~Aa?3qa4iA$&*lKp}>Bbrtp;?fi9^gZ=^lQghSXdW7o6-(}fvegM!ByF}}iaut4D=vUX{N;XYEN1~U4Sdreh*Ss^B1*l@_#Awe%4k27*Wn&TX zXL^aT3j0P@-sY`Xo)+#0jpK&SDLx`wVw6FR_W>E1Q@WhJ)Z|>AX{vX~5kW=0yAaa8 z`m5Ld%b;1Hm8g&cZFzUe4^553fTi%@V5RU05?gSIiS7{jOiw6X=G7ura!Cput>h?>Q%N~s5~zh#M%7IZV7Npe5CWnY zus#W4NoX5gRM<`kPXN@d*`i027}hao4)jEb%nvMIW^9yo>GFWr5P*teifTRk6osZF zb%O}Oxj8QrZ2=k+yViJ6ZNE}w+illDcx3RP#uB;Ria z=V^2)tF81>ZIiD(rGE%D?CcE)uHaCycIg#fBI0UgWPxM>0Xb-6^K@b=}ER%y;*uWg?`z7^7 ze44EA!ggA{pClGBRyTHR2(T>zoYT2az)qV89$hobZ#$3I6%U(IW|Q#nom#|8sLhpi z`R72{Eygbr6K#@gp@A2_-dvsnbQwn}6b@~$R~D#6L5?FsQL>vfB)({sXN>AQz58Z-H@UqM_TVM6RDgG=Rz z5EIsM6am=45A%6$6Kwq!M5fJ-2{haoEp4#BO%>@#{;6EHaoH;p<}?^$i&V6OJ0d8i z&BUf%DIZLvCaZ_ncv@6pvD11(0IWT5d@}N>U893XiI9zPYPgN0+NRY`Yb9fp$~E+4r(L~vxf3iq3=6k!C>~Y|#0=lRTr7eg zB_eb(>aZ*E#VHzOv!s9&$8vb;!S~7At+W`+2tuO0Y{KBLgKeCwR=qAAa$sGoJxYC{ ziPv29o_rOf^R6uxPTOG#YpX&{!Mg|9v&c?!r2tL7*Jhxn=P4SxBW}qxH9mlM)q1WP z7iTW94qS_A$W14H9^K#CB4R>A);brBawHHtkS{3qNgE}K>ol~G(4m9s+)a{qx&Ui3 zp}{~IAyjxyyMRq|-insMG~mV(EF5EzjYWyiPbESZmmwx+&Jfm` z8LCes`wHbnMujzy+5QbPTPv4ymBc zF;Gt;)ySRgHA(Eq0iw&=TP_&E=|Fi4W4Va%hef~`Yh=9uIrDZB^k<)4*i!SpmKD;f z1?AICT4s<>uYsUc>}aI6yS$kOQ&hu{GRL%k7!OXkMZePOa8uWt@*Izwljv{3$mgXB z!OTsPN%d6#GTOJ}*7gMOY=NgnnRY9LCB@-Q3kHqdLQ`HTYGB?}IJKO2-Xv z_sKXZ4a^1;V>yVj)+d@ZoO{=OLabUoW!z5YC6g<_-xUZEZ;Q8rJU>&2I%Q5`N%{b31Fn9C?w>D!8ki8 zFlLyaNgpI3(TkM$KQ0Q5>N4N+gSMOB44Eu~A3Qo%fwyl&Atc$)xE08h!E)UAzTxK(#J zj5HuN0NE=Q+vPTvy1i96ErHT*q~Yx3$fdJx00*mcUmded}eLaG8>}!Y=@3q(S|8uux zpRw!v8;fm;J~*Pv7=JA=*ymX#wIZfrhh5yd&$s9$kzVrzG3wXx+`)^YKG;l5UOlilqu%kKRT-Cy*vu3$?gzv!? z6DJ1FGcuaPlxL;k9Yv9fiZ!5zP~C4`nd^MsagcGk%MIxE#o!A8pDnfT&X(@l-n{Yc zhcqCQwIt!%zQa(3_O-;@gkKdi&>vgG4Cb8}CdjFg7&L-AiwJ=y(QJUNB0#H>-<)n% z(WMonuBDeGTwKvZ^ABf&l0kMB2eOW~S>bHNp?i4l0nxuo-&0Y?m3w^n?$4eb73<{W zdY)6rrS^SOid%+N$ld{PHkoR%93J`2501FBRM5SnXZn{JMovvS-Fku|CeureSRfls zzo=0Jx$HWFC^}-la-a^ja2aTGgpx8+x(1g{pQD8;E3Le1^ccGE`A!abN}*2)PTbOp zCmtFS6KV#MGsvp}hK7qBBr6mNI(xLp)ZqY#ku%dIlX3nA=FP{Y+y*#+Xw#w7jQfl* zju1^yinr$F%|V&+{rox8s26TD=o>ssYL>BX__8U)+S92DBe~OY{wj!B^7&`82R+YB zB7%?@waA>lK{ht{4c*5a>85ipoWR$=81t3_X8JW(7uP#zF@JbOy zD8t)qki=6#vbC{T8DTw=9#Pi1vn2$QNMwow<0~vn*q{p28vbV2mk!$eAmf(o%TeB0 zC5&&{kw!m-l#0$Ir#hz^Jg+Hi`okwF?$UL@=5HMWl$1c42U4$@&m)Y*(cO%U@z4No z4f%eNzi#X_+9JDq9taU^RKINdtb|6qWu$p>LWT>=X|#Yd6GH74>k;~h0v(r)_-@?d zjsG|v#8|K5ul_V}MyR_OkZwmJGh` z?}*QorT+o_&4+$DXC_9KLUBT(<-R!?5g1!1@L7_OfUPy(ocPvAXS>TF<+is;;$;bW z{pVliEA8=6U0pn}0_ua1P9+SJItnw`Ktgo3d@1K`Z zv#$&%oGb`o00j7wXxfxR(z3@;ZB2KJy85rkUXAPmj++RFJ7Th{~~?2_qm63F$M*!}GcL@6ouSLX?aXhGdo{B(&3i|P%gc<(OoPNufwKb2BlsjoY2r|NsJ*jdH9$~>LTgp@L&6E(MT@GZ@ScAjloZIBy;C2nd zb`6XOi~g*GQlBdSROdio9yHBpBq&Gn(`@azRN+6FOomnO@~$dW&bU>1!n} zfu^DFL7(Pzk#HW7<4yCpS6-5w>c!*{YBxJ_vF4VmkRu1&czf3vg-8{4o89q^2E)$R z`D^wxtvjlwx?7U6Ztvmw)O}BBAt^N22=-H|6H7COQ!FQnvOUI#2?#b^tuds3UY&tv zfjOQ{LOfZhW0z#I#{gm#Qa7+x3IT(NC9uY=KFthcV{4q%lmFZ2Q?~pgP5Q@ zGSmFs4wEz=GxVpI0qA~rHI(gdL)hJ?X!PZx>K$%2BaE;ip==dVUfrK29jpU})B2k+ zkg5Y5o*~w`_b7@vqwXG)c=Ie<0{bh7F>bf+IKPMV_d<|e3=nQc0$_Zr5yG%qe!Z=T zF{@$uG`uM_f42oGu|J3k8mbwjtEk3-)=`XQb1_irV9_!@`0;F1{aaGesV+SG0E$&{ zt9LYVoow6d{DCxM6Cv5O?Yw=74c?6}G zu6AMF+E^{cj91&DZbHbnvvRv1!R7;QG=Z|`mZJ9!5$s0I=~E=Zy+?%mB#ofHCi_Y| z?)L`XIA*O&7$Mk0z)^wGxWtjebi4TG>}{aPHF%8g+gACeBcR`@O-cfVoKhYaX$3q?;@;c-#*QPyrh+I6FYMS7BHBjNL$rs% z2UyPn7_co746NoVe}_vzidN$`d-1s^cxTJuAHdVATD5MHF*hGA8GfPb+{AQFQ+4SY z{v~RAIcFB|mvlG?boCUE!2|xv=$0E~M>Wb8h72Nj&I32Lx5Bax&s?f;f>YY4KEX*1 z2>wFw9a2&1*xUC5ux8rrvxcO%fy9Ot|5!oolMs*w`m;5JU)dTy(D-n@L&Y6Xh(_?Q z1{JpF9taTGUp|eH*auyd1)*%0B}npDvQI;fqVSl?i^rw*U>RYoSo zlNF`Lq7~hXr-!5K@$;<4&(hUx#B++b9U`zK0_>$z&$J;WC1NE1tXrVcM$*blHQg1w&?_6rqIyKwXuUp(|sbVKu6M?Z_Ad$j>TO{u) zq3?#0U|yMro<9&hDC=f|nd^@XBA#{s{QgLU7rPnvFB)gFTy|rck(?2TEBu5&QbU6> z47n9jH(VNYukJhog%Mcvl4RvGpj0c7XUasq$0~bBvYzP>7yJRfld;6jL*-_o)jdG~ z`GCPNZwhtPdArZ6@*;jw&R0^J(KbMbL4a02ot7f7fzM$6JClXvP^TQ@i*;>SU_Z6?+%+VD!5D8Mijfz zax2VB8EgGMQqMrsmXg?_6wk(-FiOlO%An3>I4VB1W!*emtQTR#AWkYH#!w8F_1~WB zQ;it}(u>9|@7kK`L_zXElfwt;yngAe%Y7$!!~UB;t?myEHe8(z5}IF$AunTNpoaiI z4%1uM`{bbUq^m6*CK#^4mu%{Dq4-Rt_UI^a&|KWxQ67@Tar}h_0Y)~H4Pu5&ne5Om zS6|-Vv!SPdUG^%l2n|g9?RaBMai2C~KXKyxClbyuwCFlBW^hWgH;rQ)VHP6(zVeUi zv|$qPrP3WPVk0l+2WVEA#=dU@gfTt+S@ ziPvC~Q<~@o@q9!zVtMFEXL_dSPZ2Mce3z?TZSSSr5+(4Tq0G(bsuTSUJQ9Q(v)Kq^ zhu|a@N#Ccxk)DfGs0Z8|-cRW*&e=dw{!|%4ifrS&tMgjt^p$%HpKPk&%!+Xh78VRT z>Id}>5-ahL;gnkfxNH4m7aMEXdfVIHppqE_R_ym8^`k4YN&p!Eg_ZT+kwS43mTVdl z118d$SHq)eyKX-|K8~JFZXZ5Tx;feaV0ejksQO_$G*|6moF1rDc$bni6?IjoHeNar z@CN0e_J1E9YTqe?!$yrmiA#?u3^(WluH5o-!usx$%j>dL_`+g2jjm|($LI1@JDiy< zyqPtutDGL7k0i?gG687%D`&mY`WBhBE1w8Z8C4w^{z)*aj4Uh95|geFPzfD>?%(Jf zvfypj9rXe~WYcZan(afN#p-#Lc8oiHF={>%5Yba( zBh1tZMqYxkX_9*3q&nw&^oiQEK5VzOQh%x65>P2un6WRO2eU&(#gG_=-cE;QRI-qB zUCpSuI7;3<3Kmh%DfWc6#{lKPzBNfGIdG;u2Ibfn6w-nkfyj(CNkziMQRK;(DFw{| zUbgDN`TV#hU-9g@r(zy{8c?aP>Ra@Ev%f=2hOq}hc_0duAzouqbCJX_qx;vbK(}HV zks@lq0AFx}#YWAk{Lc6!$E%vDWv{$-&g)}NwPVc-eL!C`$TB610pl+upad4;EY`xY z69$I}(nC-%8+co~@jx%H?Z(1MJ36UeNDu1Dx-t<80^S_y|EUieOQY3~ve(WX#WoBi zmo{3NN|jqC(*anKYiHfriL8dLrx{b783oExl?8A-Zjh4j!#ahIn0N!AWmg;3$)1D7 zWiD{5Dj8;0t4R%>HX`a!$5MPHu?Pn_aO4@UJ#};9<_|?SQ8ZxCrr?jt{`TOwz(T=i zH@!8e;353z0zx*Da@teLW_|k|VMbgs9 zB9Nd=;R4e$9Ci9r3fe8g3zz9NOzy;h)&wtbtUGGyfck?WFJvEoQ^#v{LoeF?%K*=1 zUN(vws=}7~Wri6XVQ)KaEyEk$30_mwvYN1Ff?w-;D_tMRHL0efjN@;gW=)p9uspHM zTp=fzMg-K8xOJjNwIJONM>Wuo6|dfs;+$^qupm`yRe&?mbx?r@kD%N~Kl}Zq8|QBc z%h_&m=T2vx?yB1Z6_v=Bnf7KOt3V?e<*-8cX2Hwk`G#CQmW<)|@}>MSo>Ah~z0IlM zuqOUm!G5rSnL1|fDhgyPVc23D0ok%E6i$hXH7`P}+!pJeW?d246U%^&Zx|38oyqSj z*j}|&;2}`J(7!1Sbt=dK1xRs2SbIzy<*vjS8`XQ}sr$3dR!YhyByPwD9ss3PkJXY{ z_(e5UW6?MucV}p-!NP%JSH#h3lPW!5NuRoy8SD-f8rto-<}(dFlCoEHPLM^6X2V(j zIDS6=`MUdH?i*HopmpkEsplJTU6I|6jLxlgGUcr(bQy(^3vWL=cwdb3iooQRdfJ3^ z+h14|42u$YJOeY+m`P^2dOm^nQ##Fd!kUXn!kff%^Cy*V{+Kp`mX+Nr0I9y7N$Np% zDiOx}AtaR}MSytVqkdY}qP_ms%NTwB01i-{SV#5`ja*(wn6%wRH zWuFWija#mfFHzsh$O;#5R0P_o0JK>4yX6h`O#4K%dB+kAB7`FY_3%}Qw3$fd-zAl# zx)c!q?!YRJNN9XC_6ZWfU0SV8y39Y7JH75IRolnl6T!pa=Q$tX{jK7=eC3f$T#1Qt zL^6j{gH2^6=V$_}SMIZ_6X6FpGm@B7jVF_8`IZnd=tXt&<#b){AJV}? zDa*-)O}>UhLmV4&MH-~aD5pN&JCx1l zi9`%}XFJMcBAJvG(!+bC*Yoq`P-SxX%ZR>DUP87WNcb-9{QvS;84K97OE(qGmytP? z%B8v48L@XEa0w471%wB+H`LTc>ZWmTx*hwysMCbP_E4i|N_^-A6aaBKO$0+<$UP%@ zOHikp8Jb(NqJ?UU9L1BP_uCfLztt_rT0n~@F!o({sA%GSKQP6edB~d?*U~2Z=uoHX zw&ZO|`?|W<(a}j-5vi6EnNNjOBD`YU^lW?I-ZaYeu|;ts76vaE7E z5A!?2p2rJ~XQ~099hbsZpK1e?IHhvPFBQ_cP#$|#EfsE!fw7>yD4^NZqKz z7J5&g?=VO7TGiGu z|5JONvb~;Y1L<4|wZp5lI2uEMg$HK2<=@lUIy+u3>KLQ!mR2zI82^_u=yS2qj0~?& z1=g9E3b5$Ra-IpSWy3yA(Uj&ccSxXl>fQ4wCr?*)NE?4U-zskb2#30rjzIbWV;F&0 z!476@Fm{XeCXQS>n#@{4=sdU5gsD z0zXvite(0?8?gt$g9VJ82Lxc^A?vb9NK6YN#=LvqD#0#4i5MS0rt9tvbjiKloQt?5+ku!nx5vp*%xl~uB%;GPsMn{qVV816 zLDMh}IDp)5VFv05tn941>aFVDx5O0ihMM|DK}UoTK-FkdrPLjI@dZunOFwR9sw7(N z7OL`dUWW%7juag7qwWL0;2p7HukM&gsHL*1x^Fq6>%%{rJ8()UY3B`{3=>xCE?Lr5NKaf4Tg!{F zk;~IZS=8W*bTUa5ge0jj-I!f{)=Muy=$Lh#E~0Hq+xs4E?>6_^B`IaMIX&3FS6&uq z4g_dH=(8^19x?&w<=fowc!Q9zmAkD)4~v-UxG{CypUkejG|ve0gl$I{;B}mZk~I}^ z1%ecg6*Vs9h{ccQEama!2Bb^R{ne@q@A)iu+_psUZ{jcLPQ&FmNjv;tT%*Xgt*DCiZ$kkX_C?x>tiA~;h~$54*JywS2V?kJT& zj!g}1o&^mnoFX`C;HmSRwuC5#5F3&hSF&JKbke~K#xAxhGoK`42Ms9>@1FCxgfjZ4 zoMLQ(H&z+ZGMB65icO$M){N6VI26!cStVdF2P$gdQjK_A1z2e;pr?`~gIQ$}Qiv@2 z@*1a*tRgzlfKu5!&BbQ}=ktG;NYFF^Y!^q3GYe)Hjf8}V?*x@nJ-orPs!JLrjB2FH zP1r#&*34%J(<8kDeffQWa4YdzNI6n^*+Hv8)XQy&5nC(_j1ckbd2m?wHOLzmr&}r> zN)3E%?R205kr!k%f7UNl$HSoXH0J)*YYn(WwKzJ~0BAxMVbpz4zRk=;)jTD46hlX( zCYW2FU{DYa=C3BNOT?BC8e}O(eB&g_rFKhAZdg`fz2lL5!+fT};>+9eiac8#ps}d_ z7#lj44!N!vTATGx z{iG4Jw*!u$?#{M=jlj9f4Ac1rp)^@b)Cb2K_^8c%boabJ=Z8o_n%RAN6t%b75ExDcmx%N)m#@&2XmfLu1_$t7{`T z#4!`&xnreuF&5vdyznv}ipn*cmO9j;pYfRGBCcNfM=n!LmlV=o9vF9}NK<{IRBKx; zKbJ)EuIZ@n*w_`5PGT`(*ac!-fyPs5zOCSq6A|&Wa~9V2P&AfFGdSESVUL%SIwjU! z&W8f3+u82ev_hf-Z#UcCZmzx2oXfm#~LRHs0RaM3!!x01vEV zMCpp7VQxd~O2jEk4J|gD$j;Nc{wtYMjO(ath7n#Lu7A@H4bae6d z&vGf0q*h0#!ugHAVNkj|Os^51+#$xfbJZ-*83aaB ziYMVGm413CVrcV_{We^MM?cvHtAVg1EV(o2YS{;l2JsR?QI>Kzo-f#>Od?N7{A!sX zMFX$oVE$imUW4)vLyRtWQ@vl7=1Dd0Kd^!~E9gvLnM5A2@rHffu*U*pTQZbx( z>3+LAeJJc@X)eCeZc4m|Q$2EV(0YhiUXWF(h>ro$bk?ngFSyF7zA~a~_2{3AC|mMo zDNKbcE}?K0tqNd8F66**DD=k(7Gn$$PN?TnSCmnHLn#`?fwH8r_9P@%rDQh~IrJUR z!SCaPnrD~S0y#Y7q7fgHBtqn9n9Zxt8!eAyp^i!^E1s9~KR$3~bz~%Hj8jEa*oUWy z#<}~nwOd&pclQ!0r9&(VL|QeKgPhp!dsk@@hE6wCJ2$QQ$lV^vTuk#|Pv$$B0PA!( zKs$=Y!oZp00C1*TLxm-k%qsB=B%-)@=%?Lkw|C(s=!x-^VBsHD)d_&n?49??mh+T1#kRoi7tMy%+S=NHFK zTLhjn)WHf+&(vKKW-ns{E01(yuX45n)v#(_li{S{(2YuK3XnkB0-1SV@1{_7kC3CK zh|RQu+k({E%d3y)C$IVSjn?s-jfyvXmUL&V^!AN0Nv{_z#beMVk?nwOSLk*KN~C># zeEY5(yr+_+Kvb6Er=?~TE*h!C;=un+5PnbXjI!`*%%}CA^+k~c6#~FpB3*MX@Pt&N zxmET`hIZ|wY}gqvB!{)Wa}Gz>B1*u(=MxwrC>A7WMq!Ruj6qLe_G)Q~JYiB51aYs68YjtchFicRL!I&r zCPJ$Q<2DxLit(VSekhS_?*~K9>_kn7!2=%Xb|b(&#MnxR8nO3gN#yYFf5)=8RBRY$ z3WS0Hv~vDe;ci?$)SU7%V)$*{9~1S&no4uOy~1UoA!>0}jQZi61l8aD^XLEkpARGz z55RVdPsM*#AMM?C`{3ZvPvLrl`}p=gd;v z^^94Wf3oG@?8iIXzx(gu|Bs(MI%rq<|L&uMfAas|;^(<@ru~fnHgHZGIQR|ACVr{a zMo@$g4}(!rO!LE?ogry9vu=w-(jA*mWKVUC)YkmoPw#LHabDvHLw$+fp}+E$%T-FV zp=%#N1*_U;*n%B;f-}mR_MK=F_VVTLge3CLvLvw`H2Go3&%x{C%U2gC=YaYqG2dYu z*aRIXmP<&uhTyQVChTbxiOFb2jL+5U*NxyM{)1I!`>a6L=xR&c8??ax*S~_N%A5a1la5u3?c~@l2^ShS~@do`oqV|E7)?x$?D>i z^56?-a9=pb){c~fgImtz0Mn1cLiUYWZ%Yy1Z__OsZhDJaC+Rh3u(X2HxEGNc)ra~_ zO-VCSIu~)NMtR~Wwmi6wqG=%JLm;}-P!m|&He>?LX7Eior-qJ^w=tZ>i6f33GZ9mM zQ__-q0AT1c^eNIBjSg4ZgjVgOL|eSgK$o|$lBOIq8(=*QJPD`6w4A}TR!*Yj5joqT zuTcu@6EIFAuIeR8wkavem07XJI0`55SW^RC5`Kop1?&ybD$&$#t(-nzTaq;;XlvnZ zWYSiggOB&tOR>R9VA{2CJWRQ21=}OwU6>NHV1l6sxf~a4DYmGkX)V;Wog}*L)_Q3Z z%MLI`EiJE6O7e^(@ddUkjcnzBUZSF;h{JJ>etF={it``3^OD=AA!~07QKA}LoXiEO zm6K2bth!xOToI2PYL#^Qe1x z>IeaTDH~-XB*skRDI3AkR&aQ}gt#YBD1IUilMIyrt#!r4lpD)Stz-b?jo?u5kPrU^ zM@$Ia^T%}4v_MJIlnElAWh3!60 z*nF4A1)6!_*vWaE7FlrlQ(9cp7GKA;+AHR8x|sq9B2Q=TI2!^$#jg?*#pTzsjUV;H z332vYTEM&!Y`mnsekoCC##FxHU2g6y&;r66=(3+IfVnAtYM51n!%z-uYLRRhX#R$u zT-tCb{*us!a-vf02r)BSQM(3=cn!|e#Q##{5U2SF7qE~>XJ^ zP0x@ZY&KwuUnQJQ$AT^$yg5F)`gn1CxpRJT_VWGlhf6MOzfkC{DWFquzzU|xbR74% z8tmMZwkX%jX!))11e&yIY@x(0&``(`kpR3pMiPx&dYkur?c4m+lDC=DG##3`djsF> zFs}2G*Bpy(uIA7@UCSc@Y46x|sWo9+O=e=6J6U054{8kfWo}A$ee#_tS&ve`GC^$b zcr1d-EfG_}0gqn<-_R%uprg|3f1kzqi0EoI;k*w4ExAkw#VzN41KXcHNL{&N7&hda zND5tYIxDDO4l#0YnN%*g?90*nV|iY+s1UsWJ@AOD@`Kde0hEeuH z7*?=x_U`C}xDS4hNNBKcVeXw6In?yAefrzuOYdQQ1=i({))ZZFO-C~Y)8O; zsKh!_9_pCTIakWU zO6HL)WxnAWB-+}T2-p@!)&*R3oDRr%?mZO*o%&sSv)ytKA0@&!i*dg}@?LQM3By*Z zW>*>QEoY8Etx3|QLoDy?c8l@ad=gkPG9BL=E?URH7gnKE^m!T|-&jkOTL)h5)LYZa z@;9={8I476@psPPnWv zv&aWaDbl{S0k`P!>7T#bczJyK>fOc}DB4421APl8kpyXSLI>l&YRpL%w8Uht@)kvMwTIC#vKb!URBeOVM=?eM}Z3x`lX`_J#rQDKzE5Q*ea|RqBC!SiQkv@$8H4?K?_mLxqrIv+#$C| zOLt3@v)oJU5=olR&4tEIyVd6}K;$pS;pl(SXz)MzPrDW@p~L^h5hss#A3x#Wo;=%o z@(jN{dHVR-vwiytn@=il;U#$%FVXu?TKv);(U=XUAf3C}2S^sD@GS{coFZz|RPD*9 zT&j)ObD;qQ2$m!!@*%awJ-OhF5{^Ql0(v!0NVy%(A=$l2Z;_$)2fAwVpTZ08t-7)UUTv4)~J|_X(=~8*eWG7u%>}lHlUfMgnp7TiA#fO z1O~2WQ`c%5a>FG_q@p>HLRv)>e1=LIAxkaJ=dH> z%_NrK{z$k#L;gXrsR<6f%fyKitzSy-qh^9h$M(j_6`iG37#=su!sHR%f0>gg>G(>> zZXI{ocIDci80oVls?Zf$|NBgW%gr0AlRXd27p)?zZv=GaHaZ*I!NXwV#fIN_tHU8+ zolafe+^(LXUnRcqq#D5?jm(_k%C)cAGa+Eir!bh!IGWOowsPldk`{~&*TMx!v&>S` zZ9*S1-pdCUPC1E65`vYU?5)LN#72&?k8~iEWGZIyT=0y1SAMdk)N)uBI%w(wR?v}4 zW?AzsEY1ciLa~ZI8p;>w`;wMs1e;0uMZUTW zoNohpsigPD{E?a~YR1$DgMqONun|F1pK{eCtx=veE5tO8ZIBaPk?-h4Y~{7GbxduW z#ss2eNfdrt%QCXnB{>v&8yKt)gobwH(T+UG>!g*wo=X-8e>BCW0y>-b^Jn)6m#h7y zCgy7H>N&9y{DLRzf0$<5-j}T((^&30)z76JI$K;^7i%n^Y?Sl>Fx^Ei3?}m%abl@6 zruHOkWWq-q{@L7p*)0aX7fzA-_WKX zI-!o!k!#kf$#t$_z)9_EQtbF+9@)h%Y(@s}AVZ@BVGZ<+v}|s}mBF+}r!tWNmr~_N zcs3G5ZAsV2NZ&$Cy%Jl*NuM)+jXcXdA>?fD0Em9ZTIckXMi9kPfjW*54@W#9g_B_% zaK$>rE5A%Rn)6z$XA;(#k4VwhFi&ke*VtMa6#FVPR`2D6gcvbUc z9Cr^zbH7KV1m2|i8;{qa0f^au^7!eanrb_`K-y93AMz8_qXI>S(4vj#B*mcJ+HF7C z-EY%^?j9UGZaqC{?{od#9r|SN*`sHz_TKIj&sVgQtC@QD(IbAa5$u;9AVJ(#Bf{^J zC5PX*3Vf}0#diNtFyA1WJK#B!pV5$FNu~0A3f9|Dn{uAkY#}wI^-Dw#EY)JngEplW zSJ7d`jwSU_AO2@HQERGl19os`L+zd095wX8VEK=!+{6YSF4F4W%^QX=E{~62FTQ&T zcqvUQ!(*-Bh!%v`Axdsq!7(ujy!kv~I(H48A6etE=OS(@KkP1i}zIK+I)Fa&C8^w`*>!Ybruhrk2W*){gb7#YTiu z1daet{;5){>`*M%jlf3F*-oeERP5SIf6h6IOx9!Wd*b<>2d<$I4cR#0#h+Ix5-$n^ ziy?jkpc)~0;9Hf2;8KInev$Q63VVA{exM&?HZb9S#`9#PY&6Hzj3!kw#Is_Qy`m3U zG~qMASK8;osL(}=@gl$cQVf(EiyzZ3?o&P~OeA#I(&k6+>CX6$U)}lQ3pr6=&?(yZ zp{#rGTn~*c=lNFwkA-9fP@WI`#(23s&;3Q@PCAR@+6wuR)C_h(11J4BxE7*C{TOBwQ;JnsNhqK%W^@rwibjC$|?RHfk5I3e> zd?ib9IE)7^ovysAUDxSfVz~O3vjXAc7Omk%vpJdfVraV;96YHA6Jq?D2d_>x%C;qK z>AOR`_Jb+}tG@3L)n<5T7|~T@K3MrQ`Y%0=4^|ki?wmXpsJ<{~e$Ir5;&6YMzdB*o zU>=1MSDxT9+dSmFBjHbqCSn@(6-mxNLQo6b1d)A&tJ5nuU6i}!R-|#Q*;liV8?q!K zGJF)Q08*>%)r1|n-t^Q+>J=&5DnJC&5oc{5aX3;Q0yx1Q6Ss5^;bpjqSYWNGlz~pw z%Uv1SV(;K5FqwY&rLmGeJnH7`0>99=AKC;Wyn1wgq7XScBbn@kBnX3OL=sYsajT5A zJWOn64Nl^%Mu4DrPjsW6Klnp4u1*M)QY6_3BMCTS@0IAZY-LgCMJ`~$k02FGi>i9h za*{B0q1)Cl))}8YwsiCS_Y~)mD>GP}$5zc0;&uB2jct0w%)uTg6pH4}UpRQJ>#G~mm0Ohs!Lc$mat<)YJ1 z|M0Q4PnWHE=KOg~LeH(7ljp&AKUBX%v-HIh)>D0w_vQIAwo_s=rLid$$N*Lii?~VU zfhFyf*ck~;C#{~yO?6oqe81gd>!NAb@8oVyxT!&poEQ&k5Y5!`tl-VjzX|VpC(%{R zelD3fUPoh8Y>o04tigC*{Yng#i5*ZP5_0%PqSn4FHWCsk zU7s;yY-~#fLbIW@db#IqAfxBOLt);g^x;E=3s6FIU>&2V_RwwdLwoJ0RI6c%E=;Vv ztU3~AVGNw==_B1agB0PWDvxlpJT$(61j|S2(ROA-RrL+Gn|kK!n6_4mu@HU_ zwo8Ncxq~^5ikfzKxNZy{qw=a_7-$6#4fF-B!-!Gd8PtHuf@>&;z}pg-Rk)W>t&&!+ zEKAd?gW349m}zAbVOKN$)Hm}9hcztqE-nUFsOOW>3H$wc9WhhD2)QVh>!>sUXFB5h zec1>uh(}Ml@FYDn19@odLt^PHFB()ZS|ceQ$03wLdY*vN59c<*QG%2iS_#MpeJPlI zftbpmUQD(%d@(o~)O=Y?iN|X8D&z_@kA>xdv}ks(!9%LC*OuLdXzu9!H%H%IicXi$ zrii940nftXzy)X}j@&+08wepczy-=piqW&rWxa~qxMyHnmEssd0Q6?y5rbit&Zf4k zt))4x-WnR1VU8;!8o{I`QjV0x!;;U>r;f|xtB>b&bosTKPh?{EfB{l$?JS~}+h8Fz zulba)=^LXtrqvZ*Bxm31AM{}6%Qx&=>@CPFo@qKK*Oyu zUZ|1mIua;s_Tl)ATYk;;aDjXvD_Dxv!G?S@A}X8&Cy zClO;{ZZi+2Jv-9fw*YX4d2!z_X96`_k6Oc))nTLtDXm-7lY3zM1-yTG+Ni~zr@~l1 zj8NT>(3Tl<#tgy25(L9-qI%?(d2)-Jtr;WN+i1du6M?}X?Mw#nuoawfMVw+QH}wVJ zM?)_bn6oC8VHZbZTdS-uJbd&FRD*M|7a2v=vS&nc5&Ip}KR?pTNi^pu+DX(zc_Tz^ zCFylKjI)@26+c9sD`Q3-<2{Yw?BC|EuOs|}+}$rgtf8=*UW&RZCE!FBV{=6^j$M@Cy=ye=s2*&RNGIhhTi^0)D)D(|pQ& z3`LtQ%v?*)SFAZ#6R}1?J;Rl*70Mb~smrgXW}7-Th;?*O(gA{mU!6aF)Rur^*764f ziLRL2QrImwQwG_enFwtpAef!Q3#M^tO&OY-Xw6O3QmJN6tR5%r6R!r%{X_%aBR2=Z zD77vw=&<4&@dbirvuWc{_=ATJA8Kj>|M~UTL36jU7d+f;?9(4LWr(JmLm7a4+}yC@ z@y_?(-#*+iP_h!g`29u~T+;sM`;C^GaUb6O;)?DbE^QE&S_yjO^)MF0$S%L}!3XM# ziGnTG8qBJ;biF%fy|>)zI*1q-jiq^IBiel)T*C@#Fs_5pP}TVC{OYn6B{vQ(g~OdV z!UFra)jXaRgXYt%mU9^U`=o6=x6l2G(Z6!badx?rBh`ILZ3j-IV$>nJFy{2lCxC~j z8KcJLTxhNp5=B z0TLqJv0%U*KtKiGy*^}azASb39^TEvXZuy<`Vb~?$CkcN98dZ_VTMHPh?vp$N%Q-S zQFy=q`+kGk5sq=6|KV}tWIE!mX;f~2zph``#IG3u@iHC2qkqI^p&UcRxt)lBA9Y62 zr%s&Q#5val`_Jy;(}PEgyLbv0v9xc-p%nz_K)<6wY-%-LQ-JIH^VoPI+q0T)6?E(t{AoLb?5{Ji`8E6+^x7ykL`mpgW~@`k4B?{~xY!ISn^zxW$@ z$D;>N(TP2`IMT1?!&??jgAbSAUhV~s^JrEgpW3i@&0vLUhS2IEHSj7vz+e!{b!?EG*MT>WJY7z-)rS`A@rb34UvrjU=!(o$G(Tyt6JStAySr^ z1#gt^6SyU}J^PJ&wk#D3q<4sN(eS_|gLpX0Y#ASz1c;X@b7EFZ!hO)Z@q;&vABMAT z*&ZfDBQZ!K(K|f+eAy++t5`2B&33TY0;-_dE%YQpo8#pbMV0G6=@7J5lEmE{Z5IB!Bjkp(1=iM+1%NQv_yoZOuOU|tZNZT!{d%x1B zg9|PtXA?neCj06iXZPV(OF_-7d97;z3e*%3rEIE&*h<_cL9L(q##Kz*WJB~lq7+U* z?o3nCprl@_^`>&%uUX#ZQ|!v(+k=%KXM45#r8Of$hkYg|F+7QJU$$WaYMC|G=c;_5lstfDXjiB#J;l20YZ zk)hv>m=qi#WQ9duD7r`!UbAc!lUHBTQQZLa78Q-j4gg8?mY&Lx3u1FkGoxh*3gxw(IhqM^%LqoEks^*K5sWa3UtH6xRZA$*SA(?8_8b+%Et^n)X!E{6F zYGI=*UyHRdcSaAf$>F;uXJM}yNd?K)Yn{fm&^d38Ay{k#v%;p3>o_VNV3%TKZy@r1 zJYUzlGH`lREM!vJOYM*Baux~Q4U6`$S5$|EQk$aH$9X#D2v>Hi0K8RW>V$MGuD@%L z?z-z;pGTrW8_DMfD+u&N@RHx~nxI=GhEF(2OG{O*wNhgFUV*iBEA+}W4$W~|8oar` z%Bx}TsfAQU|2zk#Le<(+%qYvQ&rvjJngUg}&kN7gVk|QuFfpwQ*c7$Oy{6(|2`77X z;-W1~<@7Z3)HU}$Zop4P<^9(hVxiy4YO`HCi=?7T)xUq|)KyqC?ijXumGM;Uc%;Om zT^1eBHyJ9SXn;8BydXjgAZVR zJ|~`9WO0u+4>0q2rB>*Dx?MrE8l9V04k05`mT>$m*!MTs*Yl8(eG#&u#<*Qml!+d+iXpsF>`pta3vK;=7P) zXnB5|RKufJ#(qQlmYUG!y5LgsK`w8z#j`Ytphl(Tp^75gFy6q-XdNf zx*p{bpf)7Qdu92QvAxUUz2u2$RRCffaam#+(CJ$gbl>o&sle`tREL@aTwUJ1JM2LM z$g2W}yRY;vkcv=J+(>U0_1zZfbS(olk=Dr!h74A5yW#-?SLBin{+PyTHyn5TljG5k z9htu|CjHt}pU~#LHsP2qHHmq?<gu*cD7b?fb54vk6AV{N9sazs^me?kPof#7 zMLdYL_N1L5{DS1PX2s!bsT&+IX$^LzPt*~FHT+` zKL{?4zPWhdH$%ECw5dfwbDb8zzWYy7l>;XJb&K=v>ce|zXbg#DIhvk_MxenRVPLaR zOg@7fETgim(3u275Ta{`c2eB*@*97TUj^39Yi~X+i3{e!L6wq*W^gs3_siH#6=8b= zIUgXYpsrc)Nx&jC^O@-N-0X>diVDQz(B|AZhp;~F%@@|COzP2i<2!Mm9Z(9uF6GZafdUDWQ-7!1ERhOS;o$=C>SiTWSTN7RwF*UsdK6 zTMpT4ZX9>{5YK(zoKG*yL+SteAN>WY2w*GtTxzR0RiW33ruR@h?1@WA^Qp%lERTs+Hd zfJX_@URXrFFlL{u6RkJdiM#DLM1n~95-n|`GL&Aq{?n=hNGjbB1$-;=kACV^nK4_k zLLX(@EKE(yY0G}Cby6V7b5lSd3gYCxMr5x?gBnBH5^{jddX_@N|J%xurU3cE@;8U^HtlCzKACcdAcw6?l7ZzmEZzSai zr}B~_la7~ix6K8I82gwmrBib> zWxaeFU>jS%BVHiMcJ$P(fyQc<>e723tTnr6oPU)2J;IyW(O?|QV7zM>uAfgW^?E*k z9?Zq%Q@&LG1Dso0tV(H`V8`{C7(y9~Cy(Z)3?A=Ly&JAwe?aDLdp#zwlq@%Hg;EF1 zMEZ(gP;kO>Ds{-bcCa{Q)2n~W@eypoo@Jh~@DsnzOWLY*sZctuONlBlkyK??#i#vV zo>ghK&L;vHhuf_pwRO%9dl4O+d51P*yE+~LI9_smtdrM@l8zILjyO+~ezmzWV~4;j zR^e*19ONxY2KS)6ihgEG*!rC_1uRPWc~E~F!AJH&!scOPd$3&s7e$3vSc%qBVxi?J zB}^AwD^B_`5ext!mw08^88og+>2Hv6J&wX_7g23|^8$eCy+7-ANFuehq*Z4GunNhk z_EQFwE~7#X8U2+P_#XD-Du4}w_5{ABG?pgEYnRNs7>kMG&hOb2Y!^$Na%|ODCEm^w z4%m+Ri^@mHDYZ_*t?E1+=BYvB_wW(0Aw`DnVxbyAJWK==&!1mixPCh+z!j%ehYhIS#4^ft%7KPBI~V+c8uh$} z^nR$C@cGkFz4;!Wa_TM*UTV*|fUg;~7f&jUy;PuopW=6n56|CrQCn=;ja7GiS(%ZS z=uqV_+_nHHNJWF zmJXe-3-)vc@TKPJBc4}7dAuw3KV@mHF);J>V#E>A^eD}^faN)HGM0j{eGGa5bb3Ur zST}wc__B~eT=(qG+A`NgqydFqwUsZBN1df{;eQlOnx$KZJ{pXpPY{^>$A+^o>#zQx z+2_isHy*NhQ?ef>X`hoOydaaNTPXhvqkc3&!lf@*W!Sp z(EmawT)uYYxzfk8VTkVYDKu2O2sJO@nRaQ+ku^Zh&1;JY>w~bH#XVa|2QX~ZT$&7^ z;|U6zJhHR@Z13rl{dSYxL(T5Ic}+CL2IMFawDaSC`*?D3{NecYN-*(RmfmaaKSX&A zQ)VHzl@?HAVw6r5EB)m3^6KdQdydY_XMGe@otT)xz|HN96Jj;IS?daLZUjnFUr8BO zx+&ndBVwPs`1?Y_@VGtBr5ggHNx?)Cuiok+Dx?V|EG4ql_z)m;JK+G#BrR-ug-N)Q z1hzS+&x{8=HO$KPuwgSOa*pJtCpT=&VQGvo#xSBAA_kj~wXW6zSxTzfET3r&RFOqy zgF()TXtmd8!Rgu6@nLXfUy|IGQsYAxH+5FRNpa$fOqy%u&rM`e}ayJU#Sds$FM8NM)ULBua0_wkx9Q_X` zSHb(ZM_Y^Ps;|=NJY%$ndT%?pm=i_54sT)_fJ>sP)y{#Jm~*vP#^uT)T5GzzP^`8Q z46-QFqQlt`HB3^;KBDUYJh!WLziSX_rgQO^aCVB;FyL&_JWqQubA(E?LoCUnBt31J zss~%!4O^aAx4{-fFve6OTX_3bd@{bOn)#Zce$^3-kPs|Et^tG%9w%4-Ang+MK6qNw zSryYtPldI0v*mP2{M&I}R?--dufiba5P`5e&{M(C@x9_fkcW3WkAJc~~k7;B_FW(=j2zTdM`tjVjh)2j>mvr)S`ySTEiesgkp+z5^?PA;(^Z!XTL zc`PTramJ0%d#A_J3YHq9uGt--M=*01l|qz(I|~b2zi%Aiu@HE+GL{A zr<`oepKwBhCmL}UzD=kLHr%BNG_-6E6gPDI^-mGP>-r+CvgD&zMX*6^Yr{kQ?%?^( z4c!J{#vA|s6-lRi8#PYIhyD_5u;IpJ%K4hoMomBh#h}Y$`~6{SmXQ8CC@c)&qCjR~ z3m3mZOFXz~ns=rdovcp{k{pNnd+=P4aWGl9-Ovc)@j4lRzjyvx$Csb+&Gzs4pH7`o z;4rOys&XL|=jorF_* z_Gi{O<&BPXn(wUAKA(RTY<<7G)zEidJfOjBcaXuk@)f+Z!G&r<#u(qwmpgIN*$LMD zn3p9;rej|Q6#@2W=N>P6Jxa{s`j_-c^JZx|TVHh2!RI6%eIKJ6C*`RV)RpTn9KxmTCiIXL%s=dbd}j$gTBg$blZa#h{F z(D2S)%glO3AA-~UEBeqE{4>3>4+~S1zzs1=P%_hB3-?_-D6i4K8>V1DSAkC3Fr_Kk z0QnrpmUX1y=ioD>_ddrw9xQD!9{7LOR*f!i>7jU0nv3AgXF~>yv#Zwd zpZUR~pZR24|I!4}ZP&n;Ujn`k3_V)1GCqrwUXdPee+f1=H#hvhfo`Hn);>u z5DK|1I|`edKikQ8uXyiDph+i8T>W+G2@_!)ey(Zpi$U6Fl8`%xOC#klT%5rk>_F8ISAf^33c{*?jY_2SzMZsN(I z8hxL`X0u8VT~fa8H<$k&J$YP_{~qnNcmFB>{WkI+SAaWQa{+G#$0Y0Agt+OX=pO^^ zAJ#Viu|GA7xO4^SW-iqbmW{_%`_dia`l*)~&9dNz&U91o^!>7TyLV1qF}5=n{Uo6OS4^o?EfJ;C ze*LuUu3yf&D>r`AqHf(|UpEcnTiQXw!0Ns9DarNzrAJu?@asO)saB%A=Mox1TDHMC zl1TdA4sR|_Onck&w|wu;6~Et%ehneGaw$AurKEekzLb*o8o}PLr=)v6j)(uztZP$J zvG+7UXm#iO*uF*${NqOf`=tzF$ax(F;1QI_nV{M0_~oMix=g%|CaXM4C0n=Q630Z3 z5xrLU$a3~zg&`T1J$E`X_s89%DjfhF)h2O=UWimnE+$#Y0%unh*Q18@o#A=704k*H zNqS>+9Vr%Y$HZ1ozeN43h}z8mzyJOxF%rmZzAyW?mj8D54)&|^Uwi-HpYq>tBmW)d zMLO-LJdM7JY5J z9|LE1qt)7>|F>4Qesr_r)d+#1G3@t^wWdQaaSST7M-&WcNjz$r&0pZ-GKOr~cUvxU zQvTSO7=5G3pN}stPtHzT`E(o?^_}lqJKHU06ZO4q*8l1ot&MGiRy(C$qoga z`2T+;?_baVAGh0&s`~%I-jnt}`TuY6W0_q#EvBf-3L`6D<RD;nU;Emg5gS}pE5U1wE8IKR5u)#+S>Sm*26xC z-}fX4y=LlnR7Zy@rTQ6M5b`0{EVX@j>!J19v}ORt+6{ZxC}I*x<-e87VxQ{>_?FkG zO$JL%K!*i2GO6!a1BBnp3nnNE0a2z%N}P*|;Go_W5Q%jL(GK(zY3#1SnrtL*kf#iD zMq6}Ut{!Jg3*Oma#%)Zz*pqgl}!^k_&gCriCkEd~8%j_cS zkp40?R4XHJWAL609y|}+D<$sHQlCW!Zm|EKy?1R)+sYP(zx!7x(9{q>z9das8rMk^ zr{m|eNuD^JIrG{sBS1Eq0AditW@688f7WeZB>{Ha%QK7Y*GZ3ox!+1nrgN@cDUyU+ z{gOto;jK0zVfDfyc?DRl>{}|6oPB`^P@5BGRF}xas6>UM>>PnzQgu~7;=5}~)}=TP zww}(;b+R`E7nMFp-%L;-pRZhx7NdFU(YmALEZu6ub7Mw*v!oNw&?bK`_;~H7X;elW zsu9WMypJ*OxvXnzSu;2K1CySrQa39k%Yk;AYN43(V_pk=>*%*t4%51uwl=&Yj$=Q@ zDyMo?)dK~%@E-}i(_<l+9UYpAuX>sQvx4j#Fh zy5gMFhE*-sR7-$OjX9S(PTMI%KBKzSsuoSgFR7$05egc%3wP47DqG_mzg`PX9TuZr z(2Tn*c4O~xXLGF;w-E$Xn$iRL6|h|g3lOpu_4%nmQ4VsDBTTwwOxiSyYn4`OoVKJu zrLHMCW~Sf#^vjQjuZ}9Ge1H^=+EZ6@hkC?+6xtA~YA<-M5(_Fyi;|l=h2V@G%}1kX zy0FXCbe^{)J@t}c+Ew33D&TeMZsapb?wQ7_Y>`W@fT%t(qWm(cYv^DGxnm?% z$r0)h;~`Av6XjCGe1(3BE*nTj;l&+Fz6Pa9DVxS%K0{%;J3vXb=RTBVi#hyD-6Jt+ zqujS1Iz;rU{E-!Mq1qb9#tO@Z&S6@%DiR%XuLxaDV`3&g23OftkQHDZx^aVRT!FK* zAzv?QeVXKFLG&^Afh#v7qjKFMyZurAn!P>4_bK|XiasY7oD`F?HP}p@4ou2ALF!5} z*XPS_sO*HOM`VXrFII)$iuhn$sQB95sIL?$(wJWZ1BYy4tQ?>ZC7Q1~%vH|c7;>-- zubwnVV$voji^DiDL|M|6he=HlyA@50=g}-Xa{gtt|X*I zA%FmJ-B4VD^m>!Z1;kwr(Gq_5$UK9WKl%zxK!j)&_(cW>Za(uP;;?mBI!(?y(l*}> z^9jR~ooku+bEMxe3$Y^HC?j!~UHt<~a<8+`SL}jI1mGJRev0D(incjlJ$}n4r+2bJ zk}VZhb{M97YDp`FvUTr4`#*4AK|fp{k~=NDL=iS9A4oh4zHn~GdRQ^p;W8BSRE{v! zv_$R&Vie%`8Kw)tNLBIp1MxS((ZRusy)oq`spJNi@#L{C6@;IN@y-!ks1w|X(bYyS zB{SAQs&}L$Fs1YVz+J$ebW^ky4Jv=-uaa7RBKNDh>nTt)#eQ@aUiT~wdD*24yB>4b zMCHGE_U_%m+gJER1U+~-px74M7;cf@3kR~RuyJU?v{}A`eMieWj=5ur8EW@^Adm9B zGTDw-M0xkpU`hYla?|I$oV?yyj3@)8W0gwjoBwhJK^Yq*>ULRS1k-(#XuacxA0*vP2eJ{*6D zhDo0vB8rP0T;L*xW$$uGLz^GjAf!=bYtIZ#7mywHPNAiS%%&#bOzy0*FqMuuiBG98 zi%^66!S>}#_~ga`6tEzO3VwGRC6i)zh}5W8%%SR!+t@CSM|Yy{E(IwW8qjVXpJZ2G zKKcHOTK#k@*bmU4mvgkV1Mc)%ELVey(?h}a#^<)91+_tU=G|?+3|Fc^!5mEp!~=i| z`G-bhVZAGg2CHzEQ?klxlF4E-_#qzm2Ec#32QZ#e6Pk6_=~AX~Gz#Vu!$TkGI6T^! zlKd#Wpk*x2l)NT}qez%@E}$K8BFy(&q^it~guy!Gt7U<&;!UzACa0ea#g^L5=WRKg zyX|6H1Z{XMNd`n{Eh*2Nc(`FjiyKzqPrPPP)PNy!ITuX&-lns2ZD2vA<36Kmox}%( zAee32Ld_o1a2-=K2o^~^RF-L|d$vV8G?c>HK?@po&x%=dyrJye?|O_{I1~g=Up@Qz zprnB#N$@sa+7KK$yRAU|&bRlL1bP(h*F=F)F?%Ttgxa?WEHQ9ML1P*>tnO$rq(Vnm z&}&uVxKYC!y&eKRFsV)By5|w%B-Az6K%C#fr%w$#tmPECGS$gV*k$QdN;gr^Ncc@z z0E&KV1;A-aBXsLw^y(RBdNbLm5BQBNB)a7izo~LqE9O9WdW!x-e2G8XLVBLWsXBl) z3k7l%3*h_8R=8F13%(^fgoy4hcJKfS`b&Tp*smQCX;MeyeO2Q>!Tss|ty=h?zIA`Y zX)W%neMHu>P#i|`TU^tR4q2(%23~VSDhKnsQvHZcT~~ot&>6EVHAGLWIC3;nu0(F8 z`qes95bYart*F7<50;N!#O8X@t=?>zIY+}I?|mQYtE$OElLb%;rorW&p%%tUBQq6Et28S=xS#_Gu8N0gl+OE@Z1 zqC_zmZokXPFVCVLhmA*ff53ZqK(bWJ0iu}|&Wpdt?NT^$EV1_@JJ^C!z z*rym3!qR~#qST;=zzI#sKbHOw9bj|M@;;e$AYz@qZqzQ613sz~gD^?_28CBKk0M+owLU9_2iZ3jzU<$_(1vBZ! z!G{DhRk6_sIl{`8(6>^yTH^3io)=`yGL6K$v$GQkx6icG=2i#sN z4p(lkomHOt3U73{OHXdD(<69KO#2$J{2WMBoFJqNfo_2zI zK2vcp$}GXAmgw2ey2&D`9%ZA`!4eT+bQvoMQ9@Y(QS2NA7YW*jk#D@@>$cGi99ET! zj^$I#3mXv@E*MtpNfrYgmQHm|HsIWANK_xiHLs#ABrG`4b^lvETP<=S3SQb|S@1EvI;9zUW~ zmu6{!E8Rs(w-t_o{YUL;-mo=QHta zZa{sFYD0AwM+PRsyy)ZPw-Fh_-Q;2AVbqO>*X@(BTv7U>qerT+q^P<+8EYA+uxsi` z5yn#)Y7xR!ip{rLxT6(hq8l6cl`tUI>NRQxaS0-`F!(VI#`Br20(;iQq`|$}TU+p^ z(E>XW`KlH+vSld~$qvT_mz=SJ%U>SPC<7a23?VZ+t!fa8gnd8I#@*y@WTikhNH1*J zWDbDqrHCkFV!YJP3RYJ~hmle|-2=ek(n&~GD_;?T; zii9R(u{dRO=bkdQCM_dx$h>fEHnW7t)j|sAWT@LrnWyFe*h2%(t#SC89gm2!rZDn_ zcSVx=*Fy@^9rroWol-h+CWd92V5N;Ok~g5Wm^K!36j?>G&v;s^+ZZxQ75+|A`?+by zHl!>* zxV9{$=vzD^*<|C#QnV3N-K|48bIxqbkr*av$g+mY{j7RFBi`wLaQt3h{@n1XUEypv z&jw{msN8YR!IRZxxO*1pK7|e=sb1m8{rXZN&(2^8L=~lt6hov7h3Cr*1hfT`P%2Cgo465SU!eFUxMAPp9Ytn27 z5gzvciO27O7=3xjH;c+BiVKUW?_Nn{xknsa9n+*@@O<@>;iwvT*F%0G z{1a@hg>;6xrvj6o8(R1H4H1lD1kI9$Xif4KLXBtBX|!m#Eign%W=6~di3tOQb}epQ z)Q0{Tk@7cu7YYdw+$a~snX#Q>Ywl4B=PDgzRvl7xYTXhaBo$tr@)k5+0?RjRG&$`5 z10US6R zcr)X!^45UTFKdkCFE?oFVz3gR@a5f5G8-$DB=UyNhoW+vH!9gufzHK%k9ZQ>hG}}o z^6wnB*?Y%}sq{bYJ6e^%d*@umisQ^Pr|kUzY{Gu+%eG=fi%b!SRw`tao#__Y>)ntt zuok|tr>%4SjcV+vo8L!IWWMsm5lR+GTPdfbu$V~czo&fb3c(li z9RR-PK*62kMYgBc`h1$sC!Ows;_zM>X$gy3f@{BO*k^ZqPX+Bx| zUJ7u<_K+63D}zQonqwX7_B71k;FZFtso_aj^Yt9~HT6&sY!zOITC;eDK^*nbI7FC4 zcB@r#=6*cm{Dw14`;&*>+5c~t3(pg?jBdk4^)<=2%Mq6)7L#X9+O#8eBMb0--G_ru3$z`@=RACYlEwxxa;1iyveNcS}t zdTfvz<`KdhV=J(qS@(tgqQG3FaE7_@YST_t#-Md0+x82Io9I3Jf-T*tjj~42h_oZN zfc^NAqqyTM0J|%Pktdix8Q*`{uLt)tVyctIPE$sDx?%eQ<{@BBv37pF#7Oz@HF;)t zlQ958hvkFyddOc2fJ0<>e*2U%kAgOB_)kv8Cu6itqKt1!`z=1Hh$jf`X-_u}l)(5t z#2806H(uzuqyIX5)A{-6$BN#x%6(SD1Kjol+koi4zIylv-<0%~E>>5eIFn3Va8 zU~b)L%vtYjjRh+pE-f;ZNMpy!*&Cx@U@d;aZ9}mYQu=0Gg=t0NBUwQX+_4mkKv%a( zCi&`-L7@OHuV1`wOMG9WQpeQKb~4<@79uIL52v9dXSPwabqICw+e=Z`pO$Z!ZfRLc zdoHF+3U`Me)JqS!<*bMD6O%;S=m51>+LPemvKLRZJ&!i#C>%?f6$(icE^J#AiH8u` z9&lKIz2NrCt%;&+*5S%l(vCf2!cI$~Jr|w8UbGvT*@o^kj@}bNNWPUo_JlQV^NMrD zT%8T)C}sWz*zkhOAlE0 ze7xNZc1}y{Q<(ztkHMf^_x#LvRis2bbXBviR;j&&t3lhLC#Ke#!#Lurf1P1a3U2Be z<7_F$R=|_RSQ?^~!pa||Z*t@h*q5WJ!%*bDVBJPV~h$&T4w@MXl3k$f5a{EZl6PQ?Tp1ZMaHJ# zgMXvWZH5NU=o$IT4}b5x`RUoam#^RctN`Vo(TAvl(SKCIlKZZp$5C`Xj6dw#J`wc5 z?o-A0t5N3%uYNpybwGZm*6$6S18o{FJ!k9)Qgg=}vd%xqo+OD8n;No3Nu7 z9ilIwz$|(ncP<7A4CG^Qg@#yH0hwdn`;Scix}X-24;U^5KV`K@K}A*EU_o{>{j%I* z)+g7D(@q{#T*|1U!x4DfOTipBZsJ6pi%grb3d@AJv|XP=WgEyI5f}X%vS%*h z=5>^gCr`MXql3sJ7+ar1&&qNhf6kZjzd8TMmSv}Om#ILO=l}R>_wkOO|NZf!$Di|m z{7(6wl&rrU{PON)>l-@-e7Bd5&ysUHB?#O@7)G!-%|||!htMvX>awy-2f;I-%Z#8) z^Q%2%%+a7~l$|$#PDn7w4>Q4J5D@p33A(9#M*1L4_W-h8;? z;C#_uV2=J%L4%uVG`X)0_EJR2N+wpGDw=RI?oBycvTf9*MLT%+vFTvLoTNsmZ4Ssr zo+SZ5!7Z%CAl@7AMdev$7bC`+=_GQYz;E_Cx`9-jNVx@}Q)G{xxo$qcyn1o)5~%wZ zaHqefoEqdzR3M?!C3W1moG?TeK{b1H9wlQFa~53`Fw1d3zf!f>db2=zM9K3$@^6C~T{V%^PNK=_nK8sp~CKX>|yt_{4 z<>5~UosRiduNP-3*R_JyyyCqDngpfO()>A=EN(mBDiy{i(O4oKMpN+zdJn6g%_Txh zSx-0VNcEF%FwPY=wsL;Bney;$OChKL4y=G~vdJq0x^W-fcy@uA7#e^+8njl8s5fhn zozRT%4q*XK2&0{6tih#Ik?NtLI7V0IOlBkV zJ$Q_f(^%}d5ZJ~6ccU!n={V7&32tvX)>9y)bCHIQhdN@K2BD&?GfO)-oQCV!Z!ISc zmeS0_8aOHjHz5n7TJmQ{S^Hk#c2HAI)IA2Tav;)g6zPuUoe9cDCnUvv)|<_vp?MCq zuPbf>I@Pag^qpL6A=2En3csw>{g|;4+ha&w^OU_O^aHOoo|?4QwPS^Kxjio6Joj3( z*6ttGk43ra33RV9`Fx0(G4NZLzx^ZE3hIjP)wX^;Y2p8Zu(3svbz6bbC{*g@bsG3T zsncjQaCKp|D|LIYi4vHrpy@fp#rz8@CMGPJci!sB9+%|wMKQpKgd-LyFNvP^&eII1 zx}*3!geT)%TpTApj#ys~DIX3ak3{+QYuDf^u%;M~xU?nJJ00g4iqp|NI$PGe9D?Gv z9E4{hkMc^RZ7ub=GnXr#GmTe{-Gg{aAqbA)pf>Teo{G)wKw_CN?zEA^bL2~>utsg? z@eX*lmV#kCKA#OZJjVCI z!)@cin5h~Mof=$}Q}ALy3`)mBW)(H;ZWJxLvE^)|NaAe2uG)JPB0g`U7w8$qx{nls zLv@T7P0Gb!J`&`0#wg#2oJbL(iYfh_KS@0O2 ztM;LC7b|l|xyt#+R9Oq3;=Z2So(9BPyc7J2W6FK5ER5I1LfsXGWbkM!%==r|5)X2D zA+^?Os&)0kqQXj%Y2k#w{4#e^N+YFEXbE-U4(4#hw=g{(u@fqqKDvaY-G4SHbc5K2 zO9L8vC7H;#!{G0tB-BpX9CU?=n(73)n=Lw0Pnt=Lk#hbzcLUpmNN;pT3z}-y;pXmH z>Jhq5VYnuuH2zYoz=rWq)I_tgAaid3ie(zoIg51>Wg6eXkmnea%-kr@qMUsc3__Q< z4>jysr+vJ)SKg2V6NR69*cQbk*T!%AIdVHDliiBVGgm*_gSfV7*bkg6uPWb@zAEi? z<5VKY$?8XVd5y0AP?Y{=*DK;HX6peV?rV#~^&!c&3MTDF7(GfJEcOgPp95DQK%u-N zDbL*`!r(uG+ochW^@-P|Y(0bcvIR4o!`B*x_vUntoum&3m6F#dJ!YScmslqK;T^=5 zaI7_={15CvMgfH5XiVvVF!;9%zXqRLfIOQjbW2Y+l<^p;$Tv^Mo57dx2mjVOoP|zG z*P{1PAn;$;27*kH?*;enLCYZpL9A`n_MhB4Il20^4()8IqWyHoaF4BHYi{lm=aerRGM$X zvezO5lW|lw+?*5eua16-DiRLZEEx}t3aH?YZCb_5UONFA^qk2%VlYj|xRSoS$&Qn{ zd{Ggn;hGXpl3UUaJ;vjoUsstdTMAKT3;^@og5iZ!R|`h1Rg41|_hBqXxudqDAC$eN zD}|mno$QhH<$z2TebHR;j4>D>U}HRrKs$1bK$4-VzzY`ZB%HsM?FsmQN**vtGh(z{ z>cNv~6fk2Fq0Sf6HpQrjQh71MmCc#ZQFc&MVzLrsjL**(#EH;Tmz^`-!=r>V-1Me% zj6#znyHiH8MN{8dn(5LxnfiMFU3}J?F!@PHU#8!AQCC>6`pGdg* z>*Fo|YGKpY4mL$2sr+JA2p>|Ec-%oqL@Gy!7L1@DS9X0H*3$}p|)xpovY|w7MIcx^C-Q93I z*b2T5w}D~Y4!3u55Ugt%Am-nDSblpa57TISjyuuZf?f@$ePqQ<_{u z{pv>)`dtOJ>c{bQT~P9qJ$O!Iu(Ad?n3o6mJq)S<^M29>kb4ux1i`q=A5;V;wwvXP zc@UxGc#A!f~qH_OIp4c$i?Cc(@*?z8jb)u9;h~#E`T%BUOGgJ7{Fx> zCF98y1CgJFyf>Aa>tDGATduBN(;nZzO4#IF&BeQJU&{8d+DZW8!iXtiBqZ4S`U|G$ z5I;0TZnWS^UEZlf~-oPP71x=BJfW?0#DI+tj}qE@Ui?$@CDZ59I+ zOZ_G5Aj#i82xNbXo+0ecJ+Pv7UU*}hGC+u`EHDRYy z;~A`Rlu)oi@nJaGV;`rAcF?1Aa2!jL zGTqEDhg_yKNUEYVQ>m!h${r?Bp~2u1jmM?}-TinnYZ118#bAV{RS?5PJ`QJ15L~rrY&PBUJ&jBtl6uhQhXRS=MU{O6n{y6eMEYS0hwQ zO0#TYCU1E_kSK+u?xm_LBWeaZq7wcib>TbJl|riH+C3Ta)m3mwUI6q27X+Rx>TBU< z)IT>k=6jaE+3;@vH^IV(Tvt%lo~P%y>@jpt{f8G8dxw z+uVj8R$qb0*QbXNQ}eMWaUq2WAW9IKD93L=XAw}YjZ8K4#aE4^rw?L8Am}8|Gis6# zX40L{DB{Ab=VCZ!)n=rUh*V%2IE%_XQQ}0!Y(0e8tMOVHM*0@ev6XNOMfXHXxg+t{ zV8>9>pj$&{lW#4=V!!$&AjWG`dk)*3j;Klh7Uvr=7NVc((n{!DFm`kLx>0}Aw6Eg% z`K!Q4xu~v0?oi&NxkD#_{J?1S-Fr{oFT3|RG{}1Qo@9U~`A0Z`vx(Lw9@UMn&~@C{ zA)tdm4n~Q3cic_fJkRzGDq-3m&@Ja=ac1uXj^YzJ{?HZ;8oSLH0VBF_H;bgDR$K?6 z*UEZ`jO&;*&#B{dFoI@qM8=8-Ce?glwFBcuZO@Rm6R9SP$qdZ#?uZb&2IvR&1vcnf z;ZayEK%@o{C?b`JGRySpx`0l>g{CcH38w59SwZZfvd0Cs;(i6Ki=_>j^cXky(nKHy zT$eD2gzFl3=nL3aU*mzr?ud1-+5CB(BXCn^__Zo&&`TtJSkcLL9yc zZ-)L;HxT68Gw(+vFFod2qfnH^by`v049wP&)sJ~~TCjfiv!IqH{k{8rB@?CKb~r)+ z0P8KrnZnMC7mrW`%~r-#zHAL52Y}xdAY!q@0KE^iw$0!HrH$XyGg81~gU<3J zgN@a%L&gZT2kJ4lTUUpNkTNc6j$(`N92R9q6Ww>AA(#aooP#t+Hz?f&6>Ivep6d3xlvqqGRL zd!L3`AU#8AKzw$V^pbeoTS$O?@slQ@nu?Ri%%7wV(CPS?l83j%=W8h&iV{$rTr7aY z!d6Bai>5M*DEsPI#w)#B+iIoFM-AKZYB*ZqYf4#SWC zO261!IkJr$DswCi=*sfiknohbrtGklxxC8OFwv^jOw)VMbG2rEqb%-gpQNVbaZ|1& zoav2ZA2e#6hg}&30*sNJFwYptxr=x>3|AjW7xbL7$=+N+CGHKoq zt9(mlVL}as|9KT8e7? zLN~=XN_471q~kSY1P_haqF{59iy*dbG_@y|2o;PkQ{_1_;O*cE(kjf1e{a40S>%lT z-cV^w&e$bet(J~d0^hAS#^o)~s>OaRICf*Xb{n=o`ps!UzPutHfGob@q?61I`QkXJ ziK`g~mmE?8k>KCy7)D@cnv+HlgP@KNb&621)lEm;%#HD;w1NuJypQ9FvXRtrbfPJ_ z9?i$IWC)|dlsZ!$%@FYt)`$JY9B-_^Ol;Bth16`i9xR%pX1{5+mW4&4_f;WEg75h& zO|XV6bTjBL*ZPpQgxvP+es$x%)Ps$VCrOX0->bN!DiN~FBn!s*mV|H|tr5-b1UGa1 z05tkOH~!~}(p6xX4@Rg*+QdFdcFMoLw7qizU-IXgLx*r3jwZEASgDs~4<>D)pGde4y zoH-rgwlD0JweZcIZ(-J%h&D1vGS85f6qV%X?~%6N5|vob<`(WxW;ZMAy~K7_7Wocr zXZ0eN+Rd_3Y(shWEVG+6%c-nnqh`=u!)Dgs2d);~#55KsvX)t_?(26li^bji4NPMN z1a5B{Yh%|HX0dw7eoM1hf%-zz*b?}^r5&s@^HLjFne^>!VAq+bXa8C$n%xbJU2$e> z8M?~kej`IyoZ+9x*j1MErpB%|l%U5#bU8{~G%JE1R8S^Q{%u)FeF~l$MMv`Q!HA?%EOIM}#Qn7)n!FddL z2NOA=x?)z4wvjB9R46nKFA*tYOKk|6pbc2x3FwEZ1S~NQMO1;4ahn|#B1)GEK z9AODi>u^W~xt*v-!X63(f{1W}S#L1C4+#~g=}4Knl6;ZyvLju@W$JL3zI0J%u zQYu_Db~e0ak|ax++iW$1hhl3}+f}(gbS6mF7$41|VQdfS{saL`vggrGQ6FWId;X@< z4B-Z2vTOys`@zrp(x}ejXxdk4IL#{Pyt9Fcr%zB+r-h}jUJPdZ?@tl`cMdlkoa4I; z{<|{%@Ame?-LJg(zh8a*)#K0ce}9jUQaPHSzw_?mJRW6uqRvsXtDplz{*vv>kMXG8 z{wWpfp$#_0RfeP`@xv$58~mFOqx~F#=ji=^b=-l)T$wY-_K#n zZ+ZT^@whh_Mbr0pivgCO|A+AZM}GY8-JOS@&;Rf7DU0-9c3jJ2d>_rbl1oHE5&1Fz zvjt=gDLUb<3^a&QX4MexQ;PacEl?5y&GA*JXs3c?qJ&vQ{}6Pf1YWE~eHCXqv4g8v zDNc0HPbdMFmsla6rt@i0_S}MUlIa15Q&dBxWY8%an<^D8kT@T&i@LQkiiX-~#7*9i zYo3CBcT^B{zfpP4A~sCyy7enB?^b=Kc2!c9O)w|LZ37M zRvN}msWFN!8^}UW(Bg&?a5cI>Oce@&cr?&xZMPZhJVt|Rc)s_2a16g6HG^;P>8Uqu zT?td)01X*kHZiU-(vCaZYUT-PM^N_y)aLolb`74?gRQ`Nf_3V3RIVmk*mvpIiY}Mb zQa+Q=b{Jw&_-BHV&_-80q6ZIxQE-igqgyUG2G65d_Rd=CRo3SAP<+V>b1SvoZCF*z z@wly*8Gb#ar^Tzx6|IHFj_ifD=8msw_)pzTScr$8kl_D6^U>r$G6wF1--IgnDhgMR zProZ}3RiP{1!bN*3C6+ocfqub*8)V9oKaYKWFvVMwN6_jAVf50D$AqBCX~V0^5C<; zJUE}G7l4>({de%?&h~p3zIV1&8?RM-PTQ`-M3|LPovFZ9dQ@4N`Fp!-I9k`>)0C6sn_n9qiT%^p9 zR3w^mO8}pVo z5NDSOypgz2Z3`{ETP1%aDf=cBkA~;z6mGqdWm;)g2aW|>n*>*I@D^8;)bQFWsvLde zDJ=qOtE}1>b$onf6^Ba(rDwX++PH4L)i#>`RkO60X7D8fik6X#$)v@)8*PxZlGS50 zI-RW(x7fJ9@IE6-*sz;5X^}5YRM#J$heST;2eWP4zbBW7DbRYo4$>C2OBuiM5ttR% z4_eT)6_{2};beCI+wk!jiWsa>&=de;&2o_ru_l80M&RxCG0n2cbx&_{NZFN&c1d!I znxo3c7mo==s8E6PNG}#)T5MbmL`*1ziqD&J-=Mwhgd7#%rVzUaIlt=0K_`(6B}s7Y zyh>+rTgQUEh&QLPmg7@05@`<*2i!Gpf8A9viY1F_aGs{Y@IIF*VA# z;Dl$XBt?;qO(T>B6~&2|bwo^cxknBe8V1iYbY&S(5JEgvU7(v5UNDYXaz2=G-UJ=( zR#{Z#(DPt6n`G^+t&59`kg&)k>W95_v~@nml&@O=9@%K?o2}k_`XO$?_;E3|rtx_P zQY30s$hn$HBO?!LigrFLVtjKs?fT=5PoNDl}8R84OH9V zxA6H5@sR0C!vvXkeEY47mhvc-va4I?%}Vt^Rv%>dY?d{!%bKEIkhN{9x`U{~0Z}re zRqdXZIq9r{V1ILbV3R!rxZc?pk9_;=uL+)3%YOzKwI}-9gQ?xya!6eY3KYQ_7PHp2 z8f=;t>%S|k05=rTx+J|jh83&jKLf1T6aDRB#qRA+V8v?i4}+C#HjVId<%Fqs1}A@- zD^G5T-vK(fqq_kNYU}ra2|^D#Ior&HA&i)bzGM7BZT=a+f+uG|#pN=nxFtwT#IfxT zAcC4&A0XbT&`HsB8ZD5xzuZ~?znx6kszz^(fDLALfEy6Ve-7S|BdXg(RRd8SkHd@P zeKLvrNff5j^DX?f^*mJ`xwB4s)=}&NO~TF~J(H+ImkUL!EjnE|HOQDI=cA|wFG#M` zA+CB6TnAfNn8K-`=t`vo%rKeHtfX3Pfkj%}b{!>syV|k>DzfXGTk%pVqGwy}vW}H? zMX8C@V@;}W$pFe^weM0oO;K<*ANM4974C1FqQ^z?ueI)F-CbnfvP;^Yg(N1RA1b(p zqEmm}JuTlJIJ^UZi(x;!NQY?3^1TcX0+Ei(1=-^ru~YpPcJayVX;EcRvaKnrhcu-bZuuu93!+U0F~ne1{m z2#WgYa6gw;{s~hjFm+()YM(Kq3`SkXHd|NltI$~?e{!Q6h`-yY!AyxD_B~U z!|zA!vhQgczrtn#0DM=$F)Bg2!FE3$vhC+^wuW< z;c$GpTLK&!pe}tp0hNL^D!CxFz*@!NzOca^E1F6{P>uk-&vgz;X>u(duLY?V1k#{d z*bf&EY)EB@MhNZ7YkWKQ;4>$_KPY5xSrc|1mtrVyE2m4wP@Xb5k$LNr&;-N?%^*jhJi%_;?L)u^j( zy&Rz(jOQaXLr2Zq2LOjg3=bN>LQN(pDsNDHss^eYiE(PmXhdhH+{x!7ZDPwQS_?QF zUf$!KX0Y1~9-h|oS+(}Q2NJabi`)nv;*ZDWby;yc7TjX$K7#+gr5{#Qb4FD-G2l69 zLRwBb$7pBx2bJqJeo5}tez7nalPx!9BExo|cbs(t^~N`FCP({IF%s9TBBBooFJdvg zRAb_CtGjB=Uxl=ExOvpE^HP=Hb66VE2W{bUND1#iV&1eG}CE5aJ8G>b{s zFTw3DFexr}rDFVAj5o_V&X7o{#pi8fCJ-rj>jjf^xEQA+WQ?F-J+FOIa*G1l5b4`6 zxM+kajB&9C>4i!aigPJ68Xz^hcl3D8#JETqW>r5@STaeM_cuxh-J!4>cICS_&+rUd zSkvr8Eh?}jDh)v7+Kp)#tJ;m{HF2fJ7Vf&qWk8l&Dxw3wH)dIMqcF5Tc|z@dC;!4w z>sGmtj&$4Ei>BHP>U`D8KWAIK$O3y>T{wV47q>k$e^BpY^6m7i|O=_Ia%o z?M4B7R?dI`G7_{(bCuZCEx)Gh)Y_qfF)*+%mzkMkVaIA(LniAsvm_?iZTCfKJ@0I1 zv>LVY?=&5mwZ2y=-4w6jr|pXF|4#QMuN?l(ccxU!`3ak2OUWwc*xZ?xp=3|&Ztrwk z3YDQtcIK{-S(#GtQ!tt(JNg~B#_slRFNe4fmzK|HW3*Cx5VB{f~4>`~3N%{C_wzK*U*T z@6H8ix&P13qurey-~Z?9$DjTGewPnm?P_p1+swr47Maii+O3mWdc_2OtAra^^vy6v zcZP9Fj>KZ;DdMDyXu-JMh9gq7C&+h$9YGS)!0 z%_rpb!@ z8yx{={}6M6YP4MK#+Z~1rgtX6c&*IpVvmZfeKqLRNH$ytem|N30uMQCG;`ikEw9?E?!oHY^Xb5+ARs zoxk0EZOK7^&@R}EP8X)UW= zH5w*SW?r#eRm^R36)g9+8%V8QX!7!7$@JY?Yb=5eG1o3{V(l4mP`PC% zLdAjuI=EyKQeyScxid9z`3*lYlEjpAtFJw99YxI^JJRZEQS9h%?}r>Ds$>i7)>ckJ z7qvFPYhcYuNU*fB38+YJfc(mbuG&~JY$;|9*{ZnaaLEp@02i@+UKuXpS}TS}h1B45 zjWx%`VRZ_Z(0-L$I>`pSY+Mu^rfpTY1qxS+lR}&!DSLPIOHxK)ibA>;fgd$tt=e`A zMOhuoX1Z#YYJ_I0w>p!OcE=i|xTKLU8jn^5#h=61DMh3^ra1j&_|c^DSvmnKrG~G6 zX+ip$6X1k<%O@aNTCDsnMZ@MCaVtj6-KkO2uiFe-2e>Lc1a{0qinmiZT+_y?G3%0g z-1d{30}Y0tD!?gS4xt4jC`Bx$$f`kSByedL)LM6tDs$8lz`%yxV)^0ftjJ48OQr1b zss}d(4bC*ReAt|OiBk*}4V&Jt8ZvjJhD^V1FK1&Rl_YzkI^vMJ=dR8ugOZ!raz`*G<(31e8sA-S(tj9YO; zPNmz7H_svQ{L45b^LFJBg+p>{tU0b?4oS^+Jr2n)y=uS~hg4KmI3)GT<&bhCyAg+! zi=cL z3pphF<%)4JPh?fN1qv_bkaW!4PvDUJxVvRDT{TOKLy{V|I+NwJI<>lrR`&|68ni>1 zdv$L${5-9$_I(Mh?iE=zXra~pTA!7Te-8a0Mp(S-;GgTn|J-@#$N${j-u4!Km@k8y;u2J70aZ^Eh|@cR!#1-{m7m z95&ukx^is3C&3XA_5Endr&IgqE^{xqf1&bQ?(OX< zr?#O=K0?vLNQLdk4*L)d{b$NBK~>e^`;`;NygN*Kl%he~iK`)YMoEU22Kzd;s4j%5 z|LChkL(~1qBurSek@5(ckNfeNGTR?13-tW_O|qsDWf-huroa*ArrG+n)7f(E{0gd* zJ5C#GE=F~09P}C{epTp4pkGtr2hkLh9)H<2?kve!@HCb@2OV<83E#(yeXAk{7PNAv z$_rV;nl9H2bn7O*TWs>A>+q_zqH^U~Rw*DXKz|YqDU)wJjL*r7h7u3tBfHuK^mp~r zohg*~OOy>L$yeWblgpl8*8FDMiQA?r~3}-fSKXrG?-YZ4~&N(XiOAM>ej3 z)fy6WV~E)kIG`;#&2SD-T*e04$V4hiTz7~;ByHcx27H0zlS`ZTl&&FOj#?YDw7_O! zoQGj@79+D*_lkN&*um`4?$T!a0IVvnD#?$Ul;WWo9FsJc@|oa+Q@^uZ#hP0|;;HI< z5o-+~rc|d~9S=ja1534Qo2o`T7=y3Uou8j)mEg-S;Wa*Jcjx2rqSU)Z_JLdlFy)>k zu^z;Mg0=ulh;@RK(d>ZEumrgW{+jizcS ztotjxRh6g{h&!*>d?3;$%3@X%maz0M+cvHrDsw{bI)UA)D{LI1L zog>%5lP7Rnw0Z2bU@{9<`Qa0ogT8Z|Yjnu~QS&Al6)8%P9@sOA8H9=Qu-t9O#!LJ? zFZFdU*eaUr=kM+gwJn=PiJAN>n^2;aF^QHJFIAWHsIW8Sb*=gl3m?;PPF0Tc
U z?VeuOae%4>k6f40NhO{2#G)#ac>l^9Z*VQyZ(xa6I%WKoQ6XL9#9s^Ldx1v3f^(uw zUkez`Sem5j9 z&@ASclerCRS`!nmS*x(cG1c;;EG6lAXI`b8V?u4oe2nlKEB+(6KQY^Z7b!BB_a~L$ z{)Qd!;F$U?n0OXu>2%iVE`$TBpO$bAnoaD-mp<5H>!;x`9-q$!s*2qcmiO=>);Old zbaZUl9k-^lBTHd*`Q3Ma(#|alFACwh{6zIIc&`+uhJQM8k(hnoDKsD(vU8;maUlD zE2Y*8D{LPSZO$u#+ZZlHT`CIBtxt`dP~yqQV`J{SZ^(!~>6vkMB`Qh#!1mH9#}Ofd$cpGm#YS4B$&FattUV5L-g?c1 z7X?Jg$TbPkwHX^iZK!lPT-X-S_A%bb3>brS8ci2LHk)_52AZewWEk}*xDX3{R2=^P zd>SbeS>^vF@rTF(3v+v*5iss1-XU&w*(yG6a$XS1(^1t@ArqGfo5gaR%%d5k7)160 z529U`ZVPH5%34WAoqLm@Fq;_KhsM{GaducXBCImCASp_sVLCn!gXbu&&Vu=boy4Hc zf-I$a&hG}?hASf@u7`~EppP@WU1@9>|IOC569C|Lbx`{icjCc@@lgiKx`UG3X@|t@ zd%=;C8-*NLrW*K(ajo(pwYcx}7I5-Sni8DKizfeu8+W_T9?8D%Sb3uktz$b*R~2AW zH%!WUKmmlD*$RSpm{3Rf;!3BZ6jL2+q9YM!RDKYQiNZj=7nH?M5lOj=rgR<|N(`S9 zVb`@Z+_2{MZJ_%t4#*;2-6GI7H<2Y@u9tCZe$%ATFfGg4a394rmJWuc4_7YrWNk<2 z=uPs}qhH*kS2Q8+km2xL3Yx8!pk43FS}t23I>?Hb2W+R(0Q;+8>pf(()>vL%T3O_E z+BHT0;3TehrTDW@Bh91IsfbL^T`KmlP7Nk7J{m!)pg>k;XQbc zf@Bq14U-%ixiuPQpzK)#6*s`B`hfB|rc*^;O0zmj9P%r2!%ot4h~H6798Xp7Ex4Fw zvuTI?qo+Zeq#pUUbSM%v2pX1TlT4@7Ea|JTek0d~r{A+gE0`D@A5kPq`{}>t@f>fj z|BHV^75I%_(L|g?@fMYD4f+W4Sc#IxT_wIv?JQTiQI1%Sx&oFLTHM7u@*>Bv)OdKT zW1_EDj*vr2iaUK6by2dBjyu{R%1wl>M54g*2DN{t7+aGX4JYZOzTpOpBn#wbpm3*3 zZwXbPqE}YuzRVWm-e8)Jaiu?+$CGIcv~xP`yRB-muW5(KNGpvOKq%>Kq=HlZhJ%n1 zNFQ$3M)2eRx?Z~TOpN17ik6O+)82g`aS%wqQ-G#_mw?h>4u=qvlouT(%zKa}=VPI< zQ6GdI|7(sRa`m9A!9|qJOgKI$M3e!B(jB7-)`f653k;bcu!D-=l!Ex_R?@L^t}+-J z4$Kfp8iHY&&Gb-_e(l0L35S7NL+N)pEyZZ;ookt5`tMl#`kiOv7A9$jBr@*aGx>3y zGlbEi2JG-T!qm?tX;_74UIK+3r8#0Sv%p9LvBG5?jmBV^j+eFKiX@$}5P40iL945_ z>SBcv#Q$W%=kuq4{=n!PS+hsk}af7sn{-SudJE zFK}GqagWO#96d)l^+|kO+0Ypp`pmf(6o2*V1s1Pe-H zgmML>^YZ~)={W+ABrP;SPSU*9u>gi<#4^l9Fy`IaI$C72c(nCX(na;p)|+@b-1;iq z*$%h2-T}04J$rR@_#B}Ui4_`oG?!));Ls*u+|bc_y*k2nT_#;- zvW{uTg9mv?Nwsd+)?1JQB%~<+FNxug`&)HK!1Pqvv}{`sD=(w&e3;HNWOplJHW?=gJjwlQ*>p6Ecu{5B$(}k3{@~ZGAH@K;Glsd zYidQq$slUy>H^FT(-|PI2e4JO%X;Hsy{UgSb{|ZVt%u&jNBW_b)di1(L4H_M5(nE>1n)J1?n8K!jOSfScYmb8m!Pj+t*2d3|;4h8I=o7FT&xP{lIjdWXmm z?)O>rJ`SemUD|iJcHk;uVI-y3!P5d;Kc0`em}-L#PZu%y4i)1*Uva-Ha;L^WZYl%kqur%BRDzBaoZ>0t%u)y_tkgHk=JJ_ z;Qto>KckTGzq9}E?#|acyE*^gozL>WKgj=IgaFF7mP7&ebk# z?`PAf2c#|X#K6FlV^gjk{Z&MA8?Ll1%v!~TVWv!P%_qS)O)PSs7vROgo3{tgpS?SH z(GJdsX%}WBLD}u`61!JD`A9uohrusUq*F_~|E!00G4v`%9WV#tA>%l-X~tVtJ9Q zMp<04)Iq|oLbkyKZ_U6N5qU4|oGx>S#=Wx4QVVws?G|U#d2dFtu(s-=4P&s`0WxX* zuXs9+hrUUx!cba3$;Awt^FpPH0eTRqJIs=K=H?lolz8kIr&h6n31%9G@p(ZObQu}N zW|Dahh_o(!AuTu_q&PuiR1dlX4syjMh-?FBN8SXhsXR8DnPjtLLl>(AcQuMA_M-06 z?_(5=IXfYoNOtK2VijoE1RiCBh-kxp?8M4aaS|4iNzrZ5GUBXK>`-c@Pt63v5;|s` zZmXy-Kbpe^eK@K+}ChZ|ehyMd)kpz;gb(AjvCWEAhm~Wy9Flud+$j~k> zF2d=&y8twd!g0(K9JLhSW4+c4HU7XTx5(IiJZsU@Y_=H2Es=Y+(B`}ab>pms9k;N> z)>jX|dc=u^?ZFc}l+Dl2u__7k$0|)^GNRZ!RxS;6iC*N!%vmz10E+$eYm^rBQ%V)W zR`40dBm;yElNpgoEk^dBOds87MjM|_jT1SCQ46TyaQT8WXKbHzTHTV2658TkLlS;L zY}fB69LJ!;PmC9wrdnV_iE8ogHPuvy-fw94UiA8XC1}f9uYHmJ4igk{aQgv)VhCH+9Qlv89y;Ar z$&8nErP$yeMZusY2zzYEC*&M9V0I&%%rg{8WvZ4%9Mo(VK`EV1RKX2(n3c0iTkWIe zU*X~3R*Mif=Aw+JO-T{cqyPx5QFNXFoySRTb!?k^l>g-=T|Gne1n_R96|h=(3q0|o za@kriA+kJr+coYxc9Q0ty1Fz=7DrI*He@6gOPdV#jHR|MjC?%^hH3i#Uhu3ad#{*L z-3tx?VG!mS#HfP71ODPKf1$H0*FWa^^~Am7Sp=9fm_$Iw;4-r_*OYU%)56he#^i+3 z)t0MLAGWSHA1aj=O_LWtJ);cHlhzP0*ihpQA(AN&2GJJMP6Q|#F;kE3=^k*H=_vU( zAvl5zJQrC(y7+vuHX677#W4Tw?{5x{5U(6>ZTa-|>1i&lH8&}7BdAT74G)7ty3h)l zEZ0Du@bpMs7urdb#as=8bCNJlXrKr?0eI$o*xa-%+f;t5^`)m=OgU|$=^!-51F(8_ zBE^Wmmo$^;QM+rH&te_~MfvX#Or{v*clt$c0o(1jnBmurRgq5DYPhf^V4&k68{FdT z-0Xw+B(&fR&^c*U!TG=hGQHBdBQZMCd z*<6%i3kX8P`8XRSXEWf&om!_Qvd)*u`Fu*+ISq>fFp{wv#kuI9EimN)YT@piy{Y^# zj0R@oRiKu_Ewl8+<+qqKRp1!<o;Xp$Mg3wIh(04WA}26 zus)xI1LVS?kqO1tuhha;-3=&VsW-8SrCvkJqH4TQ$>cZLyKfVtG7vZ(j$t=2wYy4; zH%4mJ#NFUDa4rJlFqjPlIEvY%V!BAC`E)#72-S=+gb@X!RR}2tfdBJTryl%k4nz$m zm%!pKxlqjjvra6ffjB2Ju#=0z(iHG*s&6MRW%stayRJ@{yqX)WVfCVpgU#p+5ZwQm zMV$eqf+p?Oy3z#JUslzEv$CsJ(qH^_R@S0FnKvamPh=s%EBpa0Y=*4XWWe4%Dv}#8 zg_zEsq$4tJ@{=^|cNwP( zq;bj`*>mLLam(?7NDV2#57pM8M__RZO6)@#jy(t=;)dur=!|>q#5x9rJ-=Q>;R-@!nk&$RB#j)k%*+mSf z(n>!`T2N<>7-9*^!e8w8g3`hp?fQ%`JeoH|<8-_jrSq)f!6K6hh>j(ZO!hvR1eMx2 z6=yC6)_%QWw3knL53$m=`-oJDZltRU;o|$-kNTba842p8Ftc=l703iJ@p~cF_k^pF z3j=OYa(E{jlAx#XzgSMl7{$x?dZX~1F&p`%rA+YpG`EHI*jyUc!*%WsYZc0ZEJCN0 z2z|I{s_<+WD67{4wi1pN$}PpCoc-0r>)ZjnzYP`ySi^Xx#P~?-Lv#DVVK7L?u=>M= zoVWMm^umG;ndiW50IdDe+AI6KtJ4 zqeHnyyAlXBHZlAxB?(WYs3$+>s^!gH1gG{@@DyH*QeeybbmBf<7re0|VAb)AyuY$u z9=}Jnyznx~1x+ikw3Iy@M*m)*9C|Y|5PBYuIWlAz{2alW7*ho*-BmFvGZBnZ?p&N6 zf;Jf^r9neBwP69KJaWMjL9Q)t9Ef#kPhVz~kM2eirsv8+msD1DXThxlU>*u4HDV|N zpd7iH#{inT@LQ3lpGSxYIB0Tz zPV~=C_)YkAlL8~qReCX4xNSN%s0C{(A(++8*-mD@Kmv-Qk^x#K*)MKACi<9R7H>5*b&X*kVRm*+4_F37P83 zR4g-K=;M4aYuU7*ntTnubF7%U&hia3LO7Co7nC1fobaMtl9S_m#Cq9!BJ9q@*W zKxYU?xM@-PZk@clz$T9g_GdGuB`0ZuK}0Elj*LwYO@}${$1p|A5o3H-BR0gwfLS9z z)ct%vhqFSWkKqNYSFI?kB#De*s)Klz^mH2&yx`!V6m9B~blOg-(j?k;DT%LIRLb^g z6=*NwG?u99HRZ?Eo3=8*!d`r~xrdJPOcttRkA*qP4l{~*KUjmWZXif5wP+>+k<`U~ zlo56RnYV53{!>Ubop!4T!#LKn+#t!BH;mjBegeNoKTIc7BX3J%Q|J{p29q;Fm1C?} z37`xP$RXwDcb!+SI|u*$=HU6eXYUSQzdEX%euD9xWBWX z`eXdR6trnh%5p=RkH-|Br@%!_ITI_ePma!=mQi@SGONY?#P_YxhUL~k70XQ1Re1i|7 z4-)KLs3439hY~e1y-1q`a8spLiTa~NaU`s91jrL2(i%ZTPG-^j(7SVz4wmjf>CR|D zu|~TfU_(xbs2k{~80Bg*h?Zrs zaLvv8$=O*Zp*|8hIY_}(**l>l@v2!c2P=lp@0xKi6+?L z+1%4{B?T8uCY54VygizCCKI5k+U`1(c^=&Ws0s5)_#}M4VF+tCfKm|{7Xk2eK8!6H zq6fy&MU0fSzdU|YFBPrW$8ahxl+Fgml@cuTWHER^AFZ9}LDd zSsQflQo9xguSFiG(MUoj2qb+(4)sGkPGSR8M4SMsIVa9mGkJVtc-x)ZAsK)>{C5Y> z-oAMKw^yB?58nOd^@}4;E2TIgt=rLGNI7Jl=PzV^H0C7A5GN<%xak}abG4-#7^LZY zd+4xWYNMfa2QB70Fya1?ZU()F7;~wE3WC%&4UQ&o9AgvuD|6om4ukhyAb)sD^kZYg zw=ZJ`jJ`PnH7_htej$xG9;fI!j;7rK?(2ej!61K*YD?}0Fp~z=AMyuSA%3`a#aK%r3G|NJ*WPv#88J`@O zW0K7%HxbRZNMfUynuWT@-cURPM_S{HHavlkE!Oa?s>w!rMmde`Rl-S{gIe`KubS)J zK4Gi+VK^)8rf9g!y7my+r%YYrtXs{#WCUdku&lEcYfw5IW0m>NPK|0B(Uem;G+B7X z2dlDxe#PgGy?N-ugLy*(=qjX2A?lpjqk|=IBk|q5!=?>de~xpGLVz_8T<#DpojA|3 z0KwUK`hVEmy;FRn`MZFoz0#!EN=Um^pH1%+|BnSXclLs4psAwEmgGix%Ep%;QAA3S zW>IeC2gQ;hTbpec*YYehhKy~Y6gvIQQP+c+QS2%QCKl|HD!=Ho7bJ)x?P^@l3-0rT zX-Vdx*|zOn*`rY6NVuwHR@L`{VKnOYBbx|hH_4OnbJi-fgZo+aeiqyhchA@i#fagW zhCFQ+br-Z?Bn3%2EJ0p6?r>1mpxxFj&=mP`Q;oG)bFJvevgkW^xr7L3p2tCA{5dV6GQ^^Fvu4C{pXxjJ<*3W=~EOQVnYS{WVWd-wSkg) z%u9-1HE{7-C4EHIPdG`AWzR+}SUMYYhn$ZqWGRX#y%Uj*GQHVX7)731aYH(z?O6ln~Zh5BWjFv0lOgSSUOt2oAh@@&I(H-3(i z)0_vK&Crm=v>5w}vr66s!G#VlE(5K$VefF1+z)k56y${;H9UApF&5O$6q!1dTQA6F z=f+t+%AzsqX1o!q=fz|6OO*{#$XFD?e%bxxky@?gMoaJ37_TZPc5Lj{lKl*ytkN^Gk&gc98ceek)6mVzBFs>M`f#ZE8X=S7QZp!;7 zzcV3&SwO(dOBS9}49Q=EkB_gnnn8tbS$$Bsm6y@`7@bf0Vz7~G_36`IIv>v{)}-z7 ztn~>`&rr=v#uR8GO}5{~&gQBqE9RN^sW`*AzrBkoFIByb64&*DG=U3_qQv(yPxP52 z9DjllX2*SC-{|*uw%E|Bq!t;DrTTB#Md+DosIbD#pv}Qg;md5U){j{5Y}Svb(*XYC zpv^-}u=xc)r6=+olXS`xC3~>)aG65s&G6ag-T=+QZi*bEs58julwj{N>%t);F7V z(Z4!@mmQkpIWWLzRT8V9%i4%V7k}c!P??WL(R5*#u02)jEHkJtssCo0p2LD$_RbWf1Y^t)0nLDo z-uDElanLEH6@;nDgi!BIjj7n1n%6kF!g%4C(t@MSzRuttRIWE{DJXFa8*Ut|RVT=G zXwt`lT_n+}Lmmm-gc20DuQaue>5j~{VJ#6?bC)yMxGtndfPsVWnaIItQxQHu^lv}e z4!5@@;)zr1r!+!FF`J{eAXjr9b%)WQQnx2emkjo2WA2lFgL<@|{r7*n9ZEe|Fen|K z^iTS@Z5W2Ff|m^pkbW0d+P*w~)_NJW&bC|Mo>Euam;YVXLE{U#{8S+Ni)7qSFES?t zy<6wxxVGPhF8;r$_3zVmegF8^lhgKTqYWcHImOnFG4NR%W1gK>>V-}GT06-ab-x*D zq@9eRmCchK-3&b06nffNd-#L8^)S}!SfK>Bg&G=EnHIRZ)$yhS4&EIUlm9{|9)D1` zTt^wqTej6l|8@AL^YhV<6-I;bMqxC+z((0cSlAk0iyf7)*2!Ic zACZKLD5Q<0#C~#S?7|PEqC#ABjO1A;W?3E7P)s>)1*WLSjP$BZyA2(7zA<=@#RQd- z?`$@DAnoa4!+nckD_NySGYCmYlm&k~{OKnOUK!fWm>XNnFwv0eA8&v8;qR~CyxVIX z%x7nY zMNxRf*s&L}4^;`L? z;X*XL#&ecpFrdM#2%5EOk|c{6`ryH9bXmLrs%H>TuvB(&t^C?<*lI9inbLSh_ zfqOY{HC_QPfO21G+2KlS|LRhEe^k7^e(}0Zo{g}6hZy}}sO{1RNw#mfP#WgUtQv4- zqCzc-if=0#tvCS2@7~tIT3JR566Ls;P5A{QHw^l^>ZQ`m(9?gXBTAP*e<$fUiL-kZ zy$U@ToLo_Qv>nB}@3FiodEL>*7cpn-+VR(krqaB)8T;#PxQ-!O&Mmh#4vv&BPzQ1MFu23F| zFIpEN?B%{gqzko8UVd0u^MJ-6Ah+*Q6{!C6bMlQaq`eB~Q~>(i7Q9oO6PgfYQlq3> zwj|6DI^u8ya2}nX2u8G3S%gaqvXlov&9iX}=0JM{lD-7BMHiOA9nqeeKXMK6_64wkv zDrunFS0|P&yMc>q+Yr0qnwy&Dn$~i|Pj_p|Hcw$s)dQ5< z{Pp1N53i37SSBMsR21z}n$;?3x91;KO&69O?p=*HLWiZqAa3^gt>J?@%+87O2KYXk z6LPGS_S`W*Y;T%@?8<@KE)E>dM;+Rq4Hlu5SIi8?%l@=R&m95m;t?=*EbXYt1#Z+I z+qINT_+pTzldQ6=N3o0fXbNAi?mr$)W{Vr_G#2M*UdtNv_OHC@B|Ce(b1M5vO%`vf z8qm(^8dKHhHwU^q&HR<+RV25fn4Fe-7-EhhR&}E3G+J~9@nt6&e@L=KIr6cK(hf|N zoq_eO$}e{FFBl_LUQxmtY$s41_AnMMU0u(xx2lpasXSNK-S~H-#KsVu$~VdLuEfCc zfb!rQHHeC9jI%U~F}F(QGuzE3P7I=KP_PjL*xCUu_s8p|il;KzLDW z%yoWeZnHJKWH;Xo{06jABxwWtTA&RJLN869xe?80$q;YRT4fLoqDt@}*x7~|ko=E+ zI8j?tJXlsq^8$C;s%7NUxml(#%XD{H_QX~5U3xzV4h~Po3Zb=w9klCs)|){y?O?aE zWD8(yyO`>mI=CrD_lCK~wem@$yxq0q4RRpPojr%A)?Irsi?i=^;GXQeyvYTDM~_;l zM9jt$V929x#X8rPu>Z(9VL-ZSdd_;>Xf!ZZ;oJ(-iF(GMwG%XU;EUZt^-1*!O~o8g z{f&pecT$N?D&O1fuT`n*R>G0r=A2t6;HG=!-*!b8op;BrjZ3-CU1C#-$FT&T=5guW zpwine@i3LtUb0{%;8+ZgB>)+;P6%bL^S_gd)5{5=)OG%IE8c1mOOSgRYQNJp_uzUR zaAj@uU4kpOxC~rxvLBzY2i9Vj?190~=}riv?-<*=$mo@fgVo(`7PHxUo0K5Jf%(q| zr)1MgwxX%mv2ycW0Vo%-K{WAQE|(jH9#!y-I`*3C3W+utI-+FhtPR4j?3`* z$=Cqn$(TT}xeGuD|2%yPv=|Zz;}+ccP_T#pR&H|>VIy4(+6jMq>rW<)v(7k$rF(1s%B!5{}#@gVi-ge@vi8JtzyFmu4eV*q7hEJTYh6j z5?^2DTY+7Y3b&cUZ8vpoky{&kwRr?W^~?AK8tR(zHy$FJu5`Nd^RK_%5l1MLm;;@@ zdGPw>rV*iP0V)ZCG3GSKQ25szeq^6Q(bFOHX!^>@$=LaAw*)UOEDpomutshz-w75x z8J|?_MdXJkm6F4ajVw9b&>Ws^)&C7vIGqh7d3(PzAFFRbup`RKES$ymPz4Kr*K2%I zdFHM156Q^xF>A#{8&N^V!k!!^74$KODYuOPJ~?;CINFZq#qhXJ_BEPEIag z?u4_;*)8_#lIR!RlGo4z-d>`STX>dEG32o_8>n=XaWq{Rjb(O`ph5?3p|H!5adyIQ zgZ?y~OyW`k^|Bc(+|5=#Fsy-If9v_IY4YGt00~De+S30Gz>wQ~8sDEDMij;^LAY?& z{akX_p|Om6*HL0WT(GqF$tamG?PQr(^D9-08=|S>&sV)N?czZ30|u2V1~SZNvBNaA$RM9)U%G42{IC?Z=f> zy09zgGH8*N>dsYAqrY|0jy>56svj?}OY~#Q2F>PqYb{7T$&#TM3l!OVY;P2-mQ;eb z9qRGhZ-tmEE{3n0Qg~TwGLh|_<%PC)sMwkV`!?K>C0Q{W;|Inu@6HNTM7jd0gCvrj{)^7a9S%toBq-XxV*gN1BllIywCBhH2UQntD|uIL3?kw5jgn6&1rkSTk6uqsO`e#w5Y4KYe+;_SB{P zZKq9nZf`PUHNG3pmaMzVkCWF4m9A}_T#!5#y9o3@mHLWa_}@70V6u+cbj2CQ;PyFf z8j0Au{|vc>@6?*@|lG2>94Cnb($!$=u3hRLEI?J%) zz-^%kr5T_P&L!te9f5w?5m+&LC9AZWMDeL{Z7Hs^K0WeiS8&J}Jpu~nfE_+sL%o18 z!7$g6KVbD7H3RMMml}twp$iW3km8h67voaK~d*uG#rDA{o2CLZ8&vnB!@eEyZ@(ZuLzDBK9)D z=-6xbn$BlsP*A-6H=C5<8#E*?u|<*Zqug>Ul~6dC-Xeob;n^sYN@2&sR|RROiL=O z=dpT#6X-iZmlpr9=@+DjY?FEQ{u=GvlHBL^ODGO&EV7+uJS*nM?5ICEVN%}$21}F= zpNX!(k?z-AKyIodUXUdnd2Krmea%~TSJflr-2T2YH{aqMM!D3d<>rGAt*D)pP7A!S8P#Z3?My!BYA4On+GTVSZ6g) zHcgB6$BogzGIPi8NyPJ^a#yeD&Xr|6)lr^Ie5_AuP&gQ3{MqcJj<#eX*-y?$Y0yy? z72lJT_}g&1vaw9Up=J5YVJN;#%3#&x4YK9(@M~vn2xY(4lJ>O|tam8H-*xRyIL2z( z(e~0IRrBTNp7)NeAt?aP(|$k5dhs}#CTWwB){y6_3bF?q zQ;UY(IAK@Y`T1~BS6LMMWH*RzYOP+1X$7gsU^bhyx3;nm)tf}@Fo10pr6~`?zg*NeY(=3(fxnyecN&y$CBWA=2x`9b1Xmtn*?~V1Y4FUnL49bTT)2!xdh2+H-IMD7TAsG z21vpZH{xvU59}B0!~VeDCSqeZ<`*VB-!MP2nOXPl>Kj1H_8HR_33OLwWo2b$WmV-x z7cAKzO*v7k!VhbuSaxcGNI}|$+HAwKjTP~YE~ZvyQQp=~i)!U~o)g*}MUWwsRMRk8 zt1r5x&=w8V71+Fao4D5TSzT=BN&9P-+ia< zi`7&Dy|vmJfx^MYWQf%2%w?hPzYDFv(r;->d!xJsox!k4x4~k(IDmJ5jeLgm{&y+K zqL^Dougqwr#Vw~%<-FChfs^l1=i{)POFv~?j8UOiyoI!q=jP_3rMP8EHl-BKxufXk zq*sG;7EXz>a~2T`s8kix^~D;BVUSMaXzcOq>^eO8#&XC}39a#|OPgJ#lDz^4LrKvS z|1!B#a13KZk;+&1JC#ve3+)JE>79}#4OSMO`S}+EtkY$GtOa0e7MEjo6HyBK4v$$P zVo;m~4mA&4-V^T%cu91yZ_cf>XObjU4m@jhhq(|Zvp~U!Q{faaOKaSfr9wF5qvZ^= zBKC&x#bJ-#BGm~1fE7G;-&McClHu#QU$yTY_K*35z&Isz{pPj`oG%o{UrCH>?nKjY zA~g0|w_mLMviB*hcC*`n#y0_36mRJCKZm=#6{Nk|I$1jdj|9srNsn ztBH0ifK8?YWa!x6U>BU;SD*D|fmMjXNI^lgr)318(@0jGCj$qC`D8vTw$^b#3YAe3Iqnc#ONYH0BMU zfdvNZBxm8%D8}6u#a}mXtWEiu)hUf1b9pu;lrU0*z1*?cT|Z$lA1ULMq>J<7?l~{X>@;qYwA>PDC-cl#3DMDvjN3kxLP1qv>RFgYYO^Rn}lx!_>XQV{7uG+H#Vq!%tU zUA7&q_SOMZ&^3Vh=pdId-+-Jw9m6-@Lb1FN4iL-s#NtJx2PV**JILdxr+FN0J$(4^ z>gp=fC-Oyd>&7Hd9WHR^vG*FI-g=Y^iV9)xFrt7P#ms(k(RI$d4xUEM+(qCgUHE$* zgHD7W#{R+>vaEWKc&P>itouD;uJibUZJ@<26NPij+_2|ap{QO}qjj3JP-ilaijKVw zrs2qW4h`MOHZCib0BsxtlWJAQzMSe8vHVN64C9ohF-S%5P04C)dZI@mWj5dCVMsZf z)(wuS7w54k%OKuJbj)LI8d?Knnn;zMt%#CFd`$hJJogiZtYr|Eu>=$SU~y!{Ib-&8 z%8pW%a-NZ~YlX76#6hwGrp>jpmLFM>Tc;AQHrLJ?nD=TC#PI60OJ~hNZ=+WS*vkHc z+HwgUEAD%t5252!$u&L@DoA zmw%OW-l~SSf|$v;*4e$wEJ)@&;41hl>riJtuG{Ao{OLr0rB7XHR|_5eD!N(IlTI&P z=0;T3N^M`YmHfc6*p|Dh8Tj3vtD1BQx(!b?<|1wNRx2h%9k#d;Z?#M2t)`Hy@>t8T z+GSIZHC|u$SW}Of16gsE`U@ZeQ?u0KwWc*%nC(MvJ?FNTd9M3wRe-n=x3z5ZEJHwr z-&z)tW`1j&m|qp{wQVkZ6=cmjOJrX-t(|`9&3(2)18LsMD*BHL*uBVgqoQ{f+l1Vk z{KbDIuw~aP%_^a^x21*?6YWM$c4lMFN>;RwcWh!oD8yp5lPN6%7Ar?ZWbRTPiyCi~=!NsyXU-k0u0?pwgraQGa9tlE7t45CDw14-pj zmU!pk6<^7I*4TQMfU*?IRK+1>q4i`KQcEN~EqbXeVvSx}KrO+b<@B-yt^Os&BZR&h z0b&jEJu9bMo@mc*fMO}lw0h)X#_|n_rk29iz7Z#0E`+UeW-)ra0)tqtgS6B5z6%0U z{D|Z=DrXTd)N-y}%sbiuNE>;q36LJF{1TV|LPkuz&T2r|8$c%qWKHk&BL_`cM4_I@ ziBq!?{kt78? z*s)3TeyA8VT4%(EY@hlOM-oIT;b7LUszXHa$ zNZ}|*#^n6_eH;WQTurPvKGL)a_iO>gd)k>1hMe^ zd_MCllL3n^FE8E8cyf~XutH4Fe0LO|Zw6OB9)+Zv zZ-UbVwt_Gn_9K6?NW;`Uo1IT=C)!U%yG2LY+}9#yEbGBU&d;Mm*k$Z=od;c~w+H); z{;__6AzN@Igf{L<`k0Q+>enIK!ecN$DQs?!wYXK<8iRoiVp`+E24PeplsSg8huLUB zGr5}iY`Sery^fh;mmyo=8)reLr7E-lv5{-(KrvwxKe8Pq9rhTNdT7+wW43+F#;=sb z0$R?FIYh_EX&eO+rVsWgXoxh^JS6k;KK|OqUpx3~*WEf^Q+Z>Q_W?%zzvq1G&(2)p zANm?~GDjQGqBGE%>{5c5uCR2+?XWdpNEXv54%0;j)1Lbft0RBAI~hz5dz`->xbR^Q zOYXW4r8f*s;V>A}m6!8!PAC54$MdER_FL}5T>!uBKIrv!fa5o|+}?x!RzW`|@u{Cc zJLlnOWs2W-`ikxVxNWDn)?^ck>zLXoUWDno^T!}UQxZ;5{xI8tAHo?^9DsfgA3|Ty z$hQx@0e&5S;k5Nmb>J~Cf2~G!izNfud$_$zJ$gvv;BG(od>jAnZ9V+_xE3|o2yWTU ze~=XDQ!?|TS!TrAJ=fjsVCZ>YVYSPNk@;oAgk+yUf`Z0U>8&a(%+au7!3Vf6Q>Hwi zPkEjXBPS~5cng-mIDO*tt(_v?p-LLL*!Z8rI9|a}QwAwmU(eCZ4Urt8p)a@1F6xuc zJWvS*41j`KR-QMo?lD#+cJG&?oZ)n54{ADlJ^az8Pu6;Foq#jm|m?Dv63#5S=FOJRJLHu^Wu% zn=`ybO5kD#1!fXoiue9G+UD>&Tw|St!^BS(LTe?3 zHH=Q;QGgq-&1Z4MZ{E|*y`8<@=4-_18~+kCsG&x`U8a`w`QL5+cbB^&e7-Bx7N)o8 z!o0V;gT3oN*v3CQTYdbqON{^dHa&Z=v%M1CXpZ)J4}%SY`rzU2L#tf{R;Ft|RujH< zafj^r><{ZNDOZLqj8eRC7tBIcFq}ZZbsci)rdlq=N@*cmGjp64Ysxfv66Tl*?#jP< zM0lW`#z|;|iIC1N97DhGCEzgB?Ptb8I!eMJZgUn6+j>wJxMA9Rdh*Cgg9%=yK;tcL zM=?#}i*Oup5^#-HnzKfJfGSBZ|!V- z{@eclXWsu?Hsar6EHuj=eCj9uWD-omA8~JYM@W)1n9aFiCi0RYClC~h2$z|Av8f5c?)M3D9^toy~`QifOKXMGYDFs4-xo$>V+rd(~tMr!s|ieL|@7LksYYusjbtJK3SPY z+8yW7SAc`<;Fkrlku72nh6M`dpk zapYYlF|^8-ZERcwYD!nYG@YNr^4?{)>c^e6g20ePp`Hj9z$iJ@X<->+MkKL=Epm&k z)ag624_)Upo;h2sDlb5qYzR{2ohKZ5w29dT1vAZy4Q3cpBvj;EQ@SvC9radDI-SD{ z7@UxV{-rid;rY#>N!!aq0C{Yp+J;A++W3O-)u$tJ9Emf3Vg`#TL@tY+GvMxPAqzw> z3c?Fu1o_b73u-IXWiaIfOFNpI$a$Ee#mi&8Ma%2bwr%A(7M52Qd>%b|q_+=WOWVWu z96o%sz?1ebst$it3Rjfju=!UDe2n;`1IO>Bkf{I%i=QnpdB7o5+I7&{kJMpFWX&7o*14_dhh&0kW0W`5!MBun~iM~qiX_b0c^eZs{J1=xY2XVDsm*DX7p zoclXo$Xb>-rbDp9@p&ZId)X~^-*asDhc90Q88C`ci~*g2REfW!m1ddMTg)F8|8~1u zX(`{rmK@xva_4tyzjEPba?_u}Hh7wZpmt9ddBshM*T=NBb*hULDuH^z78Gn5W$sv@ zfil*y>WxA_q)?5>qiRHrwJ}fnm+`ms-b(tRpA<(^m`53|BBfH6h$9L%aL7oIop{G9 zg~AR`BX0^iCTTGG{)QhG73(I$63xIjm6n0e#$%XyJnUFdAK(#*Y8c<9a~CSu}NIs7GQiPN&>vd8XH7JH|IUw82aHW{N4o zY=bw6;}mAU*enZAnz~9aUPfUkL2U_?y?znRg3};5R&{b^GXdAi7JA+hEh;?P@`NCJ zrLb*)HLq$zTO4dRU7Og_l!L4J_?E3w`FhohR&S{li%&YPF>7(KnrtTguI3qlFZ>mV z=9evSFJmZ#k^A{J)xYq=3ECkzCje;R51hl}iuI0syTz)(zyQ+(o;ZN_F3*Apr-**o z(14k=eIG6i$5kbMJYF-lhP0gIp8QyUvuNp`(BY_SD0hGE?%CO+ZDSAgS)t0@GU?iw zIdUf8rW%{0BO7WRPc07l<3v0zT7H}J3==x|f&}Q#NaEzvk~p~)5_5@;F#=JdBNb^G zrlcKQ)xlr|Jj~S+eBsu$T=$%hKDLD|ZGRL#%RST&5DWBw_WS%>pT2GLZ`*ciwGqxyq6Tf13lnl+-N|r`BNx>PZcU+H!eF*6$n%& z*Gvt?1Ot8+bFtdTt;EKb?O?^5g4oSmHTeq?Vp0{thd&0XY--$)_UFfnuQ|LuCLL*b`&_50fu--N}xXso;2X`Dg&+AP@9+B>3qr~ zP@7HR@j)#6}LO z$~u=$f?%3itu;LHITgW3xb=JEY(TRZ*YA_=AcvB7;z5bsM$<4Sy(Vi~@;y+(=P0M|+Vq9*G0Z zD6lO?Fn&W!dn1}TV!EX4{b|h7cQ0>Bp_bea^y=$Z1Bc}&*-Qe=g@-WK*PYivg5J_}CGj?xr2~2n`)aBR za+C?~WB&9W^JyQ@wA4S7NR_2nv4L7f=ncL7Gx~W9l_L7ioj=I6ZUwJ#~TZyi}*cEC5*$z>bGBR?z1ZiLaoD_ zy=OMdS4?+#pBX*wd z?8L^cm$Gw8vQAdjsmw2{cKbbKfoNKhubJdhTB^`&`PE*;t1TjAG*8j|Fx7Gvn3|Jb zoAb^U;G11l&62XM(daC#F#&q1mT#|$R$jZ=4w7QmrI0)GE0XV*ngHjdS0!q{V$bVA zE@Dd}#{EL&pu*I?uW=km_m z`hI(0t`{pEjW(i?ErnTCeXp;P4C(@dQ);rV?#+d%qG@=vDTzo4&acliqP8z+gsuxs z<2&)c_V3Z?@-YYbiKM$$xqhj^g_wNn?C!h(^EWbK$f&j9)7Q_xm?Kjj)WG5QqM?=# zdHVHB*IHvk-Ev2lfy?zti$kliI%^_L*bf-lUn9iW#0(>*wjS+I-w)b^dVD@sWw5P< zql_wLvTLg14^6?m`{RJ* zmRTXTtH}SJ{d}jGYf95Jh*H^@;z?B;o!&t-5`rCRId{3(Ar6YhLV}Ncm6z7_xmPyX zyVt;reK}C(B^}a9+?03U>s`dfaFfm4kv#E0#AMTpjt*AMJ->=z&UC++0GaI}i)3E{wt!(!o_yJ!eJ*89)2hzoVE}vgtJv7|xwEArH3MwHR5KSfE(T*NAm+!+AAL{8V7-rWGF6{L?QJg z1DY_Bu5ZLc#|zwuG&gJ^!{Aa*v+Y~UY|85F^sOchPwDNgyO z$qr5a3I4uNI^+6YZiOu*ZirPw1`|;Sy32)vb?jCok2_9ji?8o0jwWk!eypo5D{Ib6 zT9z8wk2i%4@4OV02XfKXWCSB8jhH!Ha=Sb^i|LVg@xS8{SxaKk;dC6~biX)sD|mDd zLsAJVTS*^Zrw|q9@a+uelY*q#z?0W?A&OH4qW&u9!~hQ{b~023>rAouq`G}!4&H5T zHq&{z7mVE;x$8u6O#&Bs`_wp&Va!4MMr8J-q7jjD`jcxxsaz7)FcCZ7k(u;;cDmom zD2k%uNGDbOjtuHH9~J_&@X8n~ap@DrhKI!yzGOb)*Ek`iC<;GX)fNq`M&krU{Yf1c zZkCthtq0BAbR%PKZNZ%_OrPA&bj;O^|99z^Mx0WR2$Ix ziHITN=uLV&W!ii90(1J@5g?2NFNuI zJ`q8*u_&r@QN&`GqQY6HyBay4L(V*OGqt?V9U3pPYIb8n2Rl+A);f|f(jW-llfK)j zy-_AX=+$x_X_q3ay_rmzotb66P7QapgTs&UJ8oF7C5l$8s`y@}r`w{7H)3$_ZU2w- zuC3fHf5y)VhvUz@BT2udu+W723U& zHCalHmE1-{R{1$SCxXDhZ}p2F9>uK$MEXNiB!snv&peSdL}b{sJ%&!f8Lxam5By_r zg1!5;zA^gTEQ1n zlLA1Z=N*GiSAX!bBN_E}OuO#SFvrMY{V_a0`^)q(JoYi{GPpaS@c1(8<$SRn@P=6k zR{Qx~NKyZ~=QX@m`>lbRKd}kBEFtvBA1THH&vZfsgx7tiFmE0!3==x#KFc9+%Fv0+ zI;|i9xjiAoMr?L>m}p1*y6A}&kNcch3^Va;zg_JJn*~9^*i6wVlBe+SwAfXwuzaNE zFhy|AD01UMq{)%wX$(Uv>ELZ2F4Vm`GIGC=1ZP2Y`1cEr5{O`21XlOG67O$3$YPRa z8D68X4s~FI8wsU3@`gxtz82BiH>iqy9wP5c{gJL1vNp*X^o8C4SFD)rFe1P=xkN_O}}A--RQ+1Xd^|-)>8UAf{4(2zwf_ zXHAaayc!db4+(@@bt8h!mZSXuqjt+8qbUmhZ1WCv?^(zJC8xg#vGiIYmlpAvuDQq1 zwShFdQ+8#ubA#2bx}ly0;lzh5lF3z`rEBuwldUTk`MS4y&bKFlA1du#EzCIc;S3Qv zeL8X8*?R0xH{fdEnWW}UnuL3WAD&uZVFuUM&2}Ofw7142^+7!P&7g=2f0pov9YI4I z3=^2%sWG4T57YJR&yzs)pLp<6U8tq_M+1)KkGGl}l@%b$^plFCx?a1!&+bss6?x1> zQMH4ShzoyrIXX@-X4u*RZs9cWxgI?8xVtHpQS>i-x992RFi@U~}#CuhtguK|iMvqEcm{^KsUxOc)Lw<_KH40^c zg1jNgJStB}EYMIl3B!0YSy9)Q=i}x=73g5ZpPm^mR@S@V%275@nA^TOyX4UukEK0q zcx+E-Z1)-H6Z8ADeqIe#r90@1*kJaHH03)aHyMspNOfZV@P18%0n2RvcTEZ7R>4B4 zjf<0AX8gC@2MdguT2ZWyXrK{)ABJlK4BI!8W)PY6637rz9w3@k&ZMv(NT*enzoQ@^ zV6f@#bFRRht9kWZ*Lw6Q zN&Mj;~}-Lnrw#0VOZAtUC?uQ^0QHN08aK|k=~!#tmSyrkDA zdy>an-fX5RSj87k#cgBE2!O!E|gqLlZb(>$EV{28W&4?=KyhE3Hp&d@r z!wN)G5iIBCsWCh*mNwG_>F~6Y=~FCYTb1x^e-{cy8IB_k7QMq)aMJfozc=;k7#C>p z`7mlrtc+55S!>s+ZzVvon42nx86$e|O!9Wjqi_0bhu&TPSPwz%uikv4qn zowW-R>3t_qa-f!WfR2=a*GT(9#IQ2>n<=nxL7KgN2ZtWLz7y)J%d}j}jDUFt8Ulg! zKUiodm@z_Hl2+GTTAPNpQUn4$U4~A`?w}(edVFG}x{y{(E()PdBO6ceT3T+Y4R5}m zHm+30M+y)1QV40IrGn`WYH}QBZw#1XwrI&C9CA}pMcao4(6&*r4LS2S@sD7%>aV}q z)lZF|uZS5WN5o`^1#iDDAEul z1Vdb7z)#%UGGg4tJhw{1{)Rc#0i|X$E}Zz zWYQ&lsk4JNJhwt(%E1EWvi@nMd_I&0|aBh5vYsU9j zJjkwRiP}OyHstfwUq^7s@YcsAN)P?6k+3R|t&vJ(HeL7~xRxb1JXylf$G=P{9D(T& z9Ec@xZkQv^ad~z{rwk%0Px7!j#rN>}-_H$x3@lbKxlLyu!IJe_wK(^P`YD*NUWLm}$R&6PHRotkiJXf^4c~S?E5q)Rzc3C~@t=)TUbo7H4Zl#{wWM z+S^vOoHs5Y;`U$|f=Uz<+RAwza{(g9{%U^iD;GdZAa7IH(F}$BY}as1p?B+D3?1v_ zBQ)RD>>p&7c#_nR&)X$FYtgFw<^x`)3}P`3BDbmUh>Fxi3ML;+2Be;H;dId9od(Mgrh=x8H}} zGj}0#$${V_!qO~uXMv9QfuR7avuIS7^J0TV+_B6Sz$zkcp=TpP#sz3K#2^vS^)N>; zv)yACa^&WjOCRi5`?jI4at<5Dwamb$Ky`!i61V{McZH*#TySR+MFc+3Hith2ZTk#p zp_4n>(D;Uc_Pe;2(C#p1twIUNjZ@W5 z8a&~j^J}M=fK!&IE`9KqC8#4a`LPVchEmCRp{LtN;; z_V2)Ab zXY(%3*{S$0(4(l)kyXKS5YI(P_h!1JB=n6nI2y$7U96KlhGS%K4(#`#Btr<=dO;;w zyB7aehVWLT=!Y@99fuAMlltN73>@%`hP;m^Iv0}q1Z8}VKOP8NR}wHr-(-lKxfvlABBVu|=j zrrex6F?>#C(bRk@2ECY2HkI;274r3=EUjAZ`a(YvAH6XD(19l*w0BNE@p=zXg!^)u zj6#vSk)s5opRd_jzFfS%JxxKY+D0Vwto78kkg7k**<*eA`v<<( zAHpMwe2J1-X*j6UJyd9+vut_@{7H+wLD?YNqD+{M?9{Z2>Hh4W7)dV)xls%KlYolw z=0n;ZsAt38k6YPQIQ{4W3GJtXpW7%*$|`>tZ|PG;igD7r2TO49yAXc0twunmR=Ip_283}SuSjt-Dmy=}X?j^7N~&{GF%nzD2vno%j&I-U+T zJ9Mov>5)t`~kIXL{iUIzJ3$iW1=>4IL24HwH(@(JDRR4ru%2K`+$X=Npy88_d9AmH1n=ulXi z@hD;>aqNMMLY8l{a<27X!ee+__987uj$|dqkTbaW@L?i&^ zNQT%W_6>Wt@h&=zEP^y}d<2A{Svc={g1SDETF-sXyuhW46zIx*DY`B8P?vUrV{#piQJ z2v<%3#U`+KgfDvc3WDhY3*(Rif)FLv3uE7TL3OoMkKCHR%*k#oFg?x<^*6Ci@B|{4 z0<)qVvja}fGxoPu^t<+_fScu7;UmG!sT=a(a}nTZ_S6{hIv?oPp%Lei28A#tEm1 zAR3)f^QbJ~<1{ZP?_)>t^WETcLGknWD`lnU{VrhdT8Jm_ePibX*z z^FC09B)x&Ia{_(PWWD?Ns`10a9)H{4R&oNEX|v8b21unR2|W$!^og40U##+BeS5aB3xBQ0>XOch8wh(iS+!Wu1#w{P4E(mn zTk}Ha-6na}JE`d_`5#e4zm7~PG6&X+N%iVr(7F_O=!d{kSwLc8`~+-VW2>=)+f$Ej zHW_e(p+c~A;ru3;5TlhS5PKh87tZ**J#S5auP;jKh~2el(bQ|bQ#G+XbH=@~C>U%& za%#am6`}6p6vcv!O*C(k2lVTMg!?%{5tTOEKi47SC7{Cl5${A*K4^317n?ldat|hg%z$B1w=G?8I2VmV zuzp`WR}P}w2WJ?A5;`jZhe!83p}6ZF{k$^@zqbtRxxBh}_i1}`*x>6q40v69-s$#v z^gZaylKC4}-*j_PrIv|q&%lq0zcDfm3Qf%_zGuw{Xj2-`Q&b`v*rqB(ImCfnY%3Z^ zfC`Lw6sE{36fXOv-e8loB-()YLjOE=Hg#@RxqQ4uYDfDHtt~1 z>3egvd&zfw`mq6ieU9y*x->9V^iJjhT=k;wL&{0(X!{5Xpg24|<-6X%HVAm10=0u) z5&8q7@8E33b#i&HS*j7>>dw{URaM^kY8X1cfn4Ft8lSbYwXWh8AA5gIp0mp{pmfq_ zb3qby3le6ToCS5fHw;l*I6Xk;N`+b^GI!?%w&->YX+B1((!1Bs^SA?~xq1R>$vJtj zgg|6F{0TW|IN$qbO?4@146Tg8vi+Vjhl?0)n(!>wqhqZ$Uv+h_2H2WE!vyb=HRMNb z1o0%Al?P1k$M565TR}eF5ig(hDfH~{UQxfy?qTK${57O@AxH0F6lp(7;ZtWYuY;|@ z;iPi0<2yEAs}#stdz98Iw^W{JxEGpGRsrE(eHyV;@|8;IrBp2Bmq8*4{Dr515N2}Q=q0VD# ze%U8ooAUL*<*x*=xx^?iD|qoM3LLo|!itOXS*n-G<g$=_sx5;9983HAC%1dxq5A zy}4q90UQY8{|;|7eH`H}>@GjVnoURJuy?k{>!uQjrOg$9$$ zj#r1gF3gaEA%@jgIym_m zfn9!2ORDxJ0pjaOsQpjW$uhIJ;cc7Y#OSDO0G><(4v1)z){ANiJ*{y)opxeUir^Cz zwX|dRC~nEe1;18!(v&A_k2jEi;rIFdhwI;?%V-Uz+*<107g3L@k}`jyX|a#0yRhxAvdT9SCexiUNKXFUfgtoq*GUx24WT>X#3w)ygx-OI#@1>k{$Vx zNXf=xEM0fugTWUG<+^(R4Mj@gh@1Y6Um zZC`CIaWM_vZVs!sptoD0J>Y1AITu`rxd)yr&U1!MR!8Img^_r54Eslo&@B2hA~!In zP8u>?wJzYj8Kl_a1DE@~ZItHQ8iL`hhvjm98*~_wHFZ#2F8(TP&Coz}v;SL)9so)g zz-?TxBH&zY`U{h}OhV2dF~~N}{8_G*^J}XVTJQsoavA@Jr_Jve%QA_JU6NdIkQKL^ z`8<9pNkQIBKwnOt;ho$H391Q!kwzkx9;0(f0^>I`pSMaAOcjlKVDqtS|^ft-b%KxTgy|YkJ*M7 z7M;`|Ea{`h#?b6siueAmS461+gdo9Y_CJ1O%Rf#D;DX!NpmOrkoJ-oCM?ZBZRIsN^ zxj0AXEYM+}6RF!yZEcG|#YcErv{mb`_A%jK7fXam^$;0fl&OEbjL~Gaed6NjeDAOFbdV! zMV}^jH(+z!quIF*n+6eVEPI{(5YgW?FeP2XLW-^yhd(I5ieHn4@5@~k+U7&2T8ed?vg`>XX z*e{>`Ctnzy&2<;9FnTl7*1ve%ogpH01pnxT;0U6L2X9`90=&bwjG-C` z|EZ%|UZ{Y6#V((TJm<%D1Q|jYfV->~Vric$nx9$m!Q8P>v$y{5GittTZa9`gc0tn> ziJdPIJ%^hX-t_mpnvlW6Se#6%{h%lhC}gUe6M?Yjmo!j`tF%L=zcXa&PzJlDT%xM& zjIe<@&Z?THuBfroXo1fr`3`S+mWc%e=r{LtxUr$yZsF1w@sfg*^lC?QMf(X1uKX^i zUuJYM1W|P9_w@jw=nuk8u`D`tX^2i!rMN7X{vL00KW``bjmZkZx~ZL2UQClWtOY0Z>aJ0>!QO@;%3K= z;Q}0$;Yf5tTNoY*Sci8}&)i7NGB@ennl26~#|VBV2^84n@2ji=NVRc6Te{^~C|U@b zInApexBC||nH);P_)z)uc_>NzkMN|Fv<(LyV^nw!ntx^VE(&>{7G|f5CRy?E~=RkCS^7Kylq|T9XVhs1DLVBAf~Y&-Ol*@+=#V2`}4{ zRBLFq2-yY=Yd8j(vwus1rx7wPcQdTsxs7lmV;zi}63m>b7-inU6^-n4BSLDFr(9Eo z-Ix}ft36Gc%M>#*YkK0x=4)kHP5C`jFgd7|xR&$Io6}N(Yt}fp-&cp7>Zv6l+ffqX zO}Tre$4%&VVXmh^=7a*7YeF5|BTO#}UW!uMiW!Nh(VvqF8t!fv5Yj9gvWJX9QA0ey z;3goPc*CXfrVOdVZ=yqkrl*ihSSskC7G%8bJ(PHQtJoB`(w?fd3;X1z@GiG2b!WM+ zurlKHjPqlwS)uZ%uumYyE_?Gc5 z=uZKT2N9Lt=hJj@!NPzxixa{~K9UxptA;n2eN1t#8MZWqEyie@+M)jbWNjDNj}$}XkWX7IT($%((KFK6?U<8Qd4--d=2u|rKW$23 zBa`3=s}JW6))}B03p;O?8LYJ&-9CZjYdgd?312dc|gwvby4_J4V03Rl1W%=0=o zKOcnIuoQBslBNK4b;64Co^f$Dfe5m}&k!D?BjQHIZq;H5qzn}0By18t;Vdq(o;8Z^ z)O3vh7%4b29?LM==U`QMcfVJ%SYtcjD7dq?O`JrbtA4L8WB-jk_q@mNQq;L!doCu0J9uXnHWt zd{0v$_;v$M@Ja5No37;7;0P9lI-wTLY|O*R{6|D=DOHg&m%W5#A|ll1uPn-v#TN|a zCmTYqNTZFQi^37C{>JPuL2j`(vSG^AAJV+)R7jHvUP6e9-}&P;CU*cV!x$Ja-#)B9 zDxu)+=yTHd++k&$;!UI8eU&-7Ncqy42zN8#dS9G@cIBxjT!IKuYF+>psWZevzy<0I zuPe3Cf=RN?mau`|yEo=QcQo|u>CWfr?$m;Y1G46sz=!y{EEW%s6{MTzL!-Coybryz zYp8*&j8myrT27*3#B$G>2|nTCb2o}e-LE*nQx%nmXv%vmweQsoHM_k?sy~o+gQHTa zFO_usyV|0wF{)Uaf}@EM;VU5@+PgRp5I?@d8k^$&L)ww zog>dBxs6jqzorbh-Cv}w$FjinqyhnOmY#C9riWYm zIH_l0(jo-9pVfqi-LVYMiM7DD~WUh;J%Bj3c*B3)_$y^a+zQ8ywJc!XY?1#7^OG0)wPzb7+3I@h(a_wo%20Evj}x$+Pg& zF{V_sRkWSH7fngej(g=m$gYeMVRsb&-qs=cS)0I{kbu48J&T@l7iJQ z+`8f^NZwq%^8L3KdaZNEv}REmIQUGa>-x2>M($|zj)OQKR*_Juc`&V<->%Wqaz0pBB^X95?Vs{!JBw@bGvDr;&I8yJDk9 zk@o2gv@kG~G1k5qWR&08teZ7hAm8mAM7GbsB=wf9z*^HM;5M@9 zZ-ksOBAgUF^qKQDGOoKYsrRiKj)|r*vmYw1B(2as1pJ$3Whhgyr*V*<=fKy<0(2zmz@B(=p^gl$_RTK1kfUWmEi(IJdiOJjZsONU*+b5!?Fdj4>yJnh-q_lWjIy{Nm+ zTdFhCZG1I1NAbjf*R4vQPsZ2-h=j9ID1HMXrhYz_(YsQT3*sue0UUNa+fy7k)}Q@) zv~vw~xQyQZ@;8p`JXCx(H9IZvuK3;;w>}cp+WbbvK2n*gVztrMM-{G&&pya`pBpm{ zLOt(q55TJT=T8t2kk3zWklui86Oi8!U$Os3&eX`&h|$%^nbE?V(Z$N*pVA8EFUQW# z4)SmQm;28?Gy7K>3mXRqCo3}-3l|p%GYdP**W)D2|CHAJr$XIazIy-FBo9k7Gu!`^ z_aCGGRsR3(+yCj@e|-0UaM+-(-U6cyLnGrz1Cf@=@IdSSr&zK|>^)Daw~RDr>LIkc z^d_yJ+AU>%PSg&8WW)NHtqh-fNJsqaYIYoSaNq;3=#8d>IQRX#QY&ra1wLw90IE@% z|MVqUS|*Bs-2jJMKSmn77t`&+mqt;>Z5SSGI0Vlid~du&s%AQ*9}38c*l`N_0p~NJ zP44Dgg8;GQbO8|7YVjO=W`W`Tb~t^dXv|5yI!_y_*~ znhO5K|Nn%c_=h5iqhUY-klOUXz|9i)et##Vix&EINy@XfqvK7^A}KayJTuf0@<>9N%VcoB=P3Kc zX}b2$UP&=k0Gj%ACc`L+rAt3H7P_7che7{BfX_#6v!p|M(Caj?&^c0Z1y!%>Xf88r zLoCO_0-W8y!R9%;>Ob*A5AJ{8q%)kobK&7N%Hb_q1?>Ao%pF2Q4#h+)g8l>9{=Z51 z2mb#j>;nEv{{M&dpM#C-U+e#W%Qwc7Ser!xJJLtr{fiP!( zLj88W()OV^``H9-t0Cn8lwP;Elst$gwnxtP ztQr~tPb_!)V#=E_8YM^cei2$Wt0A|(%k1f=In5_ba22QNP}6eWOl2vnoV3MWCQZ^; z+rFd>XI;;S0(u-;110?WjjJ8ZEaOg+31#@}AW>calTG2rv!(O-hV?)Y{q#EltbFV0 q!wO`+NWH1V`Wa=nr|Y;0pOb_C79#(vl7CU)UljNk1^x$8;C})2UH{Ag diff --git a/ruby/gems/minitest-5.13.0/.autotest b/ruby/gems/minitest-5.13.0/.autotest deleted file mode 100644 index b6fbce536..000000000 --- a/ruby/gems/minitest-5.13.0/.autotest +++ /dev/null @@ -1,34 +0,0 @@ -# -*- ruby -*- - -require 'autotest/restart' -require 'autotest/rcov' if ENV['RCOV'] - -Autotest.add_hook :initialize do |at| - at.testlib = 'minitest/autorun' - - bench_tests = %w(TestMinitestBenchmark) - mock_tests = %w(TestMinitestMock TestMinitestStub) - spec_tests = %w(TestMinitestReporter TestMetaStatic TestMeta - TestSpecInTestCase) - unit_tests = %w(TestMinitestGuard TestMinitestRunnable - TestMinitestRunner TestMinitestTest TestMinitestUnit - TestMinitestUnitInherited TestMinitestUnitOrder - TestMinitestUnitRecording TestMinitestUnitTestCase) - - { - bench_tests => "test/minitest/test_minitest_benchmark.rb", - mock_tests => "test/minitest/test_minitest_mock.rb", - spec_tests => "test/minitest/test_minitest_reporter.rb", - unit_tests => "test/minitest/test_minitest_unit.rb", - }.each do |klasses, file| - klasses.each do |klass| - at.extra_class_map[klass] = file - end - end - - at.add_exception 'coverage.info' - at.add_exception 'coverage' -end - -# require 'autotest/rcov' -# Autotest::RCov.command = 'rcov_info' diff --git a/ruby/gems/minitest-5.13.0/History.rdoc b/ruby/gems/minitest-5.13.0/History.rdoc deleted file mode 100644 index e11ed907e..000000000 --- a/ruby/gems/minitest-5.13.0/History.rdoc +++ /dev/null @@ -1,1367 +0,0 @@ -=== 5.13.0 / 2019-10-29 - -* 9 minor enhancements: - - * Added Minitest::Guard#osx? - * Added examples to documentation for assert_raises. (lxxxvi) - * Added expectations #path_must_exist and #path_wont_exist. Not thrilled with the names. - * Added fail_after(year, month, day, msg) to allow time-bombing after a deadline. - * Added skip_until(year, month, day, msg) to allow deferring until a deadline. - * Deprecated Minitest::Guard#maglev? - * Deprecated Minitest::Guard#rubinius? - * Finally added assert_path_exists and refute_path_exists. (deivid-rodriguez) - * Refactored and pulled Assertions#things_to_diff out of #diff. (BurdetteLamar) - -* 3 bug fixes: - - * Fix autorun bug that affects fork exit status in tests. (dylanahsmith/jhawthorn) - * Improved documentation for _/value/expect, especially for blocks. (svoop) - * Support new Proc#to_s format. (ko1) - -=== 5.12.2 / 2019-09-28 - -* 1 bug fix: - - * After chatting w/ @y-yagi and others, decided to lower support to include ruby 2.2. - -=== 5.12.1 / 2019-09-28 - -* 1 minor enhancement: - - * Added documentation for Reporter classes. (sshaw) - -* 3 bug fixes: - - * Avoid using 'match?' to support older ruby versions. (y-yagi) - * Fixed broken link to reference on goodness-of-fit testing. (havenwood) - * Update requirements in readme and Rakefile/hoe spec. - -=== 5.12.0 / 2019-09-22 - -* 8 minor enhancements: - - * Added a descriptive error if assert_output or assert_raises called without a block. (okuramasafumi) - * Changed mu_pp_for_diff to make having both \n and \\n easier to debug. - * Deprecated $N for specifying number of parallel test runners. Use MT_CPU. - * Deprecated use of global expectations. To be removed from MT6. - * Extended Assertions#mu_pp to encoding validity output for strings to improve diffs. - * Extended Assertions#mu_pp to output encoding and validity if invalid to improve diffs. - * Extended Assertions#mu_pp_for_diff to make escaped newlines more obvious in diffs. - * Fail gracefully when expectation used outside of `it`. - -* 3 bug fixes: - - * Check `option[:filter]` klass before match. Fixes 2.6 warning. (y-yagi) - * Fixed Assertions#diff from recalculating if set to nil - * Fixed spec section of readme to not use deprecated global expectations. (CheezItMan) - -=== 5.11.3 / 2018-01-26 - -* 1 bug fix: - - * Pushed #error? up to Reportable module. (composerinteralia) - -=== 5.11.2 / 2018-01-25 - -* 1 minor enhancement: - - * Reversed Test < Result. Back to < Runnable and using Reportable for shared code. - -* 2 bug fixes: - - * Fixed Result#location for instances of Test. (alexisbernard) - * Fixed deprecation message for Runnable#marshal_dump. (y-yagi) - -=== 5.11.1 / 2018-01-02 - -* 1 bug fix: - - * Fixed Result (a superclass of Test) overriding Runnable's name accessors. (y-yagi, MSP-Greg) - -=== 5.11.0 / 2018-01-01 - -* 2 major enhancements: - - * Added Minitest::Result and Minitest::Result.from(runnable). - * Changed Minitest::Test to subclass Result and refactored methods up. - -* 7 minor enhancements: - - * Added --no-plugins and MT_NO_PLUGINS to bypass MT plugin autoloading. Helps with bad actors installed globally. - * Added bench_performance_{logarithmic,power} for spec-style benchmarks. (rickhull) - * Added deprecation warning for Runnable#marshal_dump. - * Minitest.run_one_method now checks for instance of Result, not exact same class. - * Minitest::Test.run returns a Result version of self, not self. - * ProgressReporter#prerecord now explicitly prints klass.name. Allows for fakers. - -* 4 bug fixes: - - * Object.stub no longer calls the passed block if stubbed with a callable. - * Object.stub now passes blocks down to the callable result. - * Pushed Minitest::Test#time & #time_it up to Runnable. - * Test nil equality directly in assert_equal. Fixes #679. (voxik) - -=== 5.11.0b1 / 2017-12-20 - -* 2 major enhancements: - - * Added Minitest::Result and Minitest::Result.from(runnable). - * Changed Minitest::Test to subclass Result and refactored methods up. - -* 6 minor enhancements: - - * Added --no-plugins and MT_NO_PLUGINS to bypass MT plugin autoloading. Helps with bad actors installed globally. - * Added bench_performance_{logarithmic,power} for spec-style benchmarks. (rickhull) - * Minitest.run_one_method now checks for instance of Result, not exact same class. - * Minitest::Test.run returns a Result version of self, not self. - * ProgressReporter#prerecord now explicitly prints klass.name. Allows for fakers. - * Removed Runnable.marshal_dump/load. - -* 4 bug fixes: - - * Object.stub no longer calls the passed block if stubbed with a callable. - * Object.stub now passes blocks down to the callable result. - * Pushed Minitest::Test#time & #time_it up to Runnable. - * Test nil equality directly in assert_equal. Fixes #679. (voxik) - -=== 5.10.3 / 2017-07-21 - -* 1 minor enhancement: - - * Extended documentation for Mock#expect for multiple calls to mock object. (insti) - -* 2 bug fixes: - - * Finished off missing doco. - * Fixed verbose output on parallelize_me! classes. (chanks) - -=== 5.10.2 / 2017-05-09 - -* 1 minor enhancement: - - * Added suggestion in minitest/hell to install minitest/proveit. - -* 7 bug fixes: - - * Expand MT6 to Minitest 6. (xaviershay) - * Fixed location of assert_send deprecation. (rab) - * Fixed location of nil assert_equal deprecation to work with expectations. (jeremyevans) - * Fixed minitest/hell to use parallelize_me! (azul) - * Made deprecation use warn so -W0 will silence it. - * Workaround for rdoc nodoc generation bug that totally f'd up minitest doco. (Paxa) - * Write aggregated_results directly to the IO object to avoid mixed encoding errors. (tenderlove) - -=== 5.10.1 / 2016-12-01 - -* 1 bug fix: - - * Added a hack/kludge to deal with missing #prerecord on reporters that aren't properly subclassing AbstractReporter (I'm looking at you minitest-reporters) - -=== 5.10.0 / 2016-11-30 - -* 1 major enhancement: - - * Deprecated ruby 1.8, 1.9, possibly 2.0, assert_send, & old MiniTest namespace. - -* 3 minor enhancements: - - * Warn if assert_equal expects a nil. This will fail in minitest 6+. (tenderlove) - * Added AbstractReporter#prerecord and extended ProgressReporter and CompositeReporter to use it. - * Minor optimization: remove runnables with no runnable methods before run. - -* 3 bug fixes: - - * Fix assert_throw rescuing any NameError and ArgumentError. (waldyr) - * Clean up (most of the) last remaining vestiges of minitest/unit. - * 2.4: removed deprecation warnings when referring to Fixnum. - -=== 5.9.1 / 2016-09-25 - -* 2 bug fixes: - - * Re-release to refresh gem certificate signing. ugh. - * Fixed hoe/minitest to not augment load path if we're actually testing minitest. - -=== 5.9.0 / 2016-05-16 - -* 8 minor enhancements: - - * Added Minitest.info_signal accessors to customize signal for test run info. (nate) - * Added assert_mock to make it more clear that you're testing w/ them. - * Added negative filter by test name. (utilum) - * Added warning to README that 1.8 and 1.9 support will be dropped in minitest 6. - * Automatically activate minitest/hell if $MT_HELL is defined. - * Improved default error messages for assert and refute. (bhenderson) - * minitest/hell now tries to require minitest/proveit - * mu_pp for strings prints out non-standard encodings to improve assert_equal diffs. - -* 1 bug fix: - - * Removed Interrupt from PASSTHROUGH_EXCEPTIONS (already handled). (waldyr) - -=== 5.8.5 / 2016-09-25 - -* 2 bug fixes: - - * Re-release to refresh gem certificate signing. ugh. - * Fixed hoe/minitest to not augment load path if we're actually testing minitest. - -=== 5.8.4 / 2016-01-21 - -* 1 bug fix: - - * Allow Minitest::Assertion to pass through assert_raises so inner failures are dealt with first. - -=== 5.8.3 / 2015-11-17 - -* 1 minor enhancement: - - * Added extra note about mocks and threads to readme. (zamith) - -* 1 bug fix: - - * Fixed bug in Mock#verify. (pithub/zamith) - -=== 5.8.2 / 2015-10-26 - -* 1 bug fix: - - * Fixed using parallelize_me! and capture_io (or any locking io). (arlt/tenderlove) - -=== 5.8.1 / 2015-09-23 - -* 1 minor enhancement: - - * Refactor assert_raises to be cleaner and to pass SystemExit and SignalException. (bhenderson) - -=== 5.8.0 / 2015-08-06 - -* 2 minor enhancements: - - * Add optional delegation mechanism to extend object with a mock. (zamith) - * Return early if there are no filtered methods. (jeremyevans) - -* 1 bug fix: - - * Don't extend io with pride if io is not a tty. (toy) - -=== 5.7.0 / 2015-05-27 - -* 1 major enhancement: - - * assert_raises now matches subclasses of the expected exception types. (jeremyevans) - -* 3 minor enhancements: - - * Added :block type for minitest/spec's #infect_an_assertion. (jeremyevans) - * Inline verification error messages in minitest/mock for GC performance. (zamith) - * assert_raises defaults to RuntimeError if not specified. (jeremyevans) - -* 4 bug fixes: - - * Added 'class' to minitest/mock's overridden_methods list. (zamith) - * Added file/line to infect_an_assertion's class_eval call. (jeremyevans) - * Cleared UnexpectedError's mesg w/ generic string. - * Fixed non-proc-oriented expectations when used on proc target. (jeremyevans) - -=== 5.6.1 / 2015-04-27 - -* 2 bug fixes: - - * Added Minitest.clock_time and switched all Time.now to it. (tenderlove) - * Moved Minitest::Expectations#_ into Minitest::Spec::DSL. - -=== 5.6.0 / 2015-04-13 - -* 4 major enhancements: - - * Added Minitest::Expectation value monad. - * Added Minitest::Expectations#_ that returns an Expectation. Aliased to value. - * All expectations are added to Minitest::Expectation. - * At some point, the methods on Object will be deprecated and then removed. - -* 4 minor enhancements: - - * Added a note about bundle exec pitfall in ruby 2.2+. (searls) - * Lazily start the parallel executor. (tenderlove) - * Make mocks more debugger-friendly (edward) - * Print out the current test run on interrupt. (riffraff) - -* 3 bug fixes: - - * Fix failing test under Windows. (kimhmadsen) - * Record mocked calls before they happen so mocks can raise exceptions easier (tho I'm not a fan). (corecode) - * Tried to clarify mocks vs stubs terminology better. (kkirsche) - -=== 5.5.1 / 2015-01-09 - -* 1 bug fix: - - * Fixed doco problems. (zzak) - -=== 5.5.0 / 2014-12-12 // mri 2.2.0 (as a real gem) - -* 1 minor enhancement: - - * Allow seed to be given via ENV for rake test loader sadness: eg rake SEED=42. - -=== 5.4.3 / 2014-11-11 - -* 2 bug fixes: - - * Clarified requirements for ruby are now 1.8.7 or better. - * Force encode error output in case mal-encoded exception is raised. (jasonrclark) - -=== 5.4.2 / 2014-09-26 - -* 2 minor enhancements: - - * Extract teardown method list. - * Thanks to minitest-gcstats got a 5-10% speedup via reduced GC! - -=== 5.4.1 / 2014-08-28 - -* 1 bug fix: - - * Fixed specs hidden by nesting/ordering bug (blowmage/apotonick) - -=== 5.4.0 / 2014-07-07 - -* 2 minor enhancements: - - * Kernel#describe extended to splat additional_desc. - * Spec#spec_type extended to take a splat of additional items, passed to matcher procs. - -* 1 bug fix: - - * minitest/spec should require minitest/test, not minitest/unit. (doudou) - -=== 5.3.5 / 2014-06-17 - -* 1 minor enhancement: - - * Spit and polish (mostly spit). - -=== 5.3.4 / 2014-05-15 - -* 1 minor enhancement: - - * Test classes are randomized before running. (judofyr) - -=== 5.3.3 / 2014-04-14 - -* 1 bug fix: - - * Fixed using expectations w/ DSL in Test class w/o describe. (blowmage+others) - -=== 5.3.2 / 2014-04-02 - -* 1 bug fix: - - * Fixed doco on Assertions.assertions. (xaviershay) - -=== 5.3.1 / 2014-03-14 - -* 1 minor enhancement: - - * Modified verbage on bad 'let' names to be more helpful. (Archytaus) - -* 1 bug fix: - - * Fixed 2 cases still using MiniTest. (mikesea) - -=== 5.3.0 / 2014-02-25 - -* 1 minor enhancement: - - * Mocked methods can take a block to verify state. Seattle.rb 12 bday present from ernie! Thanks!! - -=== 5.2.3 / 2014-02-10 - -* 1 bug fix: - - * Fixed Spec#let check to allow overriding of other lets. (mvz) - -=== 5.2.2 / 2014-01-22 - -* 1 minor enhancement: - - * Spec#let raises ArgumentError if you override _any_ instance method (except subject). (rynr) - -* 1 bug fix: - - * Fixed up benchmark spec doco and added a test to demonstrate. (bhenderson) - -=== 5.2.1 / 2014-01-07 - -* 1 bug fix: - - * Properly deal with horrible mix of runtime load errors + other at_exit handlers. (dougo/chqr) - -=== 5.2.0 / 2013-12-13 - -* 1 minor enhancement: - - * Change expectations to allow calling most on procs (but not calling the proc). (bhenderson+others) - -=== 5.1.0 / 2013-12-05 - -* 1 minor enhancement: - - * Use a Queue for scheduling parallel tests. (tenderlove) - -* 1 bug fix: - - * Fixed misspelling in doco. (amatsuda) - -=== 5.0.8 / 2013-09-20 - -* 1 bug fix: - - * Fixed siginfo handler by rearranging reporters and fixing to_s. (tenderlove) - -=== 5.0.7 / 2013-09-05 - -* 2 minor enhancements: - - * Added clarification about the use of thread local variables in expectations. (jemc) - * Added extra message about skipped tests, if any. Disable globally with $MT_NO_SKIP_MSG. - -* 2 bug fixes: - - * Only require minitest, not minitest/autorun in pride_plugin. (judofyr) - * Require rubygems in load_plugins in case you're not using minitest/autorun. - -=== 5.0.6 / 2013-06-28 - -* 3 minor enhancements: - - * Allow stub to pass args to blocks. (swindsor) - * Improved warning message about minitest/autorun to address 1.9's minitest/autorun. - * Made minitest/test require minitest as needed. For lib writers. (erikh) - -* 1 bug fix: - - * Fixed missing require in minitest/test. (erikh) - -=== 4.7.5 / 2013-06-21 // mri 2.1.1 - -* 2 bug fixes: - - * Fix Spec#describe_stack to be thread local. - * Fix multithreaded test failures by defining Time local to mock test namespace - -=== 5.0.5 / 2013-06-20 - -* 6 bug fixes: - - * DOH! Fixed the rest of the new casing on Minitest. (splattael) - * Fixed typo on minitest/mock rdoc. (mrgilman/guiceolin) - * Make Spec::DSL.describe_stack thread local to avoid failing on my own tests. - * Make a fake Time.now local to the tests so they won't interfere with real reporter timings. - * Make everything mockable by wrapping all 'special' methods in a smarter wrapper. (bestie) - * Raise ArgumentError if let name starts with 'test'. (johnmaxwell) - -=== 5.0.4 / 2013-06-07 - -* 5 minor enhancements: - - * Added AbstractReporter, defining required Reporter API to quack properly. - * Added doco for writing reporters. - * Refactored Reporter into ProgressReporter and SummaryReporter. (idea: phiggins, code:me+scotch) - * Refactored SummaryReporter pushing up to StatisticsReporter. (phiggins) - * Removed Reporter#run_and_report... cleaner, but doesn't "fit" in the API. - -=== 5.0.3 / 2013-05-29 - -* 4 minor enhancements: - - * Added Runnable.with_info_handler and Runnable.on_signal. - * Moved io.sync restore to Reporter#run_and_report. - * Refactored inner loop of Reporter#report to #to_s. Callable for status updates. - * Restored MT4's mid-run report (^t). (tenderlove). - -=== 5.0.2 / 2013-05-20 - -* 3 bug fixes: - - * Gem.find_files is smarter than I remember... cause I wrote it that way. *sigh* I'm getting old. - * Pride wasn't doing puts through its #io. (tmiller/tenderlove) - * Replaced Runnable#dup and Test#dup with marshal_dump/load. Too many problems cropping up on untested rails code. (tenderlove/rubys) - -=== 5.0.1 / 2013-05-14 - -* 2 bug fixes: - - * Documented Assertions' need for @assertions to be defined by the includer. - * Only load one plugin version per name. Tries for latest. - -=== 5.0.0 / 2013-05-10 - -Oh god... here we go... - -Minitest 5: - -* 4 deaths in the family: - - * MiniTest.runner is dead. No more manager objects. - * MiniTest::Unit#record is dead. Use a Reporter instance instead. - * MiniTest::Unit._run_* is dead. Runnable things are responsible for their own runs. - * MiniTest::Unit.output is dead. No more centralized IO. - -* 12 major (oft incompatible) changes: - - * Renamed MiniTest to Minitest. Your pinkies will thank me. (aliased to MiniTest) - * Removed MiniTest::Unit entirely. No more manager objects. - * Added Minitest::Runnable. Everything minitest can run subclasses this. - * Renamed MiniTest::Unit::TestCase to Minitest::Test (subclassing Runnable). - * Added Minitest::Benchmark. - * Your benchmarks need to move to their own subclass. - * Benchmarks using the spec DSL have to have "Bench" somewhere in their describe. - * MiniTest::Unit.after_tests moved to Minitest.after_tests - * MiniTest::Unit.autorun is now Minitest.autorun. Just require minitest/autorun pls. - * Removed ParallelEach#grep since it isn't used anywhere. - * Renamed Runnable#__name__ to Runnable#name (but uses @NAME internally). - * Runnable#run needs to return self. Allows for swapping of results as needed. - -* 8 minor moves: - - * Moved Assertions module to minitest/assertions.rb - * Moved Expectations module to minitest/expectations.rb - * Moved Test to minitest/test.rb - * Moved everything else in minitest/unit.rb to minitest.rb - * minitest/unit.rb is now just a small (user-test only) compatibility layer. - * Moved most of minitest/pride into minitest/pride_plugin. - * minitest/pride now just activates pride. - * Moved ParallelEach under Minitest. - -* 9 additions: - - * Added a plugin system that can extend command-line options. - * Added Minitest.extensions. - * Added Minitest.reporter (only available during startup). - * Added Minitest.run(args). This is the very top of any Minitest run. - * Added Minitest::Reporter. Everything minitest can report goes through here. - * Minitest.reporter is a composite so you can add your own. - * Added Minitest::CompositeReporter. Much easier to extend with your own reporters. - * Added UnexpectedError, an Assertion subclass, to wrap up errors. - * Minitest::Test#run is now freakin' beautiful. 47 -> 17 loc - -* 11 other: - - * Removed Object.infect_with_assertions (it was already dead code). - * Runnables are responsible for knowing their result_code (eg "." or "F"). - * Minitest.autorun now returns boolean, not exit code. - * Added FAQ entry for extending via modules. (phiggins) - * Implement Runnable#dup to cleanse state back to test results. Helps with serialization. pair:tenderlove - * Moved ParallelEach under Minitest. - * Runnable#run needs to return self. Allows for swapping of results as needed. - * Minitest.init_plugins passes down options. - * Minitest.load_plugins only loads once. - * Fixed minitest/pride to work with rake test loader again. (tmiller) - * Added count/size to ParallelEach to fix use w/in stdlib's test/unit. :( (btaitelb) - -* 5 voodoo: - - * Removed mutex from minitest.rb (phiggins) - * Removed mutex from test.rb (phiggins) - * Removed Minitest::Reporter.synchronize (phiggins) - * Removed Minitest::Test.synchronize (phiggins) - * Upon loading minitest/parallel_each, record, capture_io and capture_subprocess_io are doped with synchronization code. (phiggins) - -=== 4.7.4 / 2013-05-01 - -This is probably the last release of the 4.x series. It will be merged -to ruby and will be put into maintenance mode there. - -I'm not set in stone on this, but at this point further development of -minitest (5+) will be gem-only. It is just too hard to work w/in -ruby-core w/ test-unit compatibility holding minitest development -back. - -* 2 minor enhancements: - - * Added count/size to ParallelEach to fix use w/in stdlib's test/unit. :( (btaitelb) - * Allow disabling of info_signal handler in runner. (erikh) - -=== 4.7.3 / 2013-04-20 - -* 1 bug fix: - - * Reverted stubbing of module methods change. Stub the user, not the impl. (ab9/tyabe) - -=== 4.7.2 / 2013-04-18 - -* 2 bug fixes: - - * Fixed inconsistency in refute_in_delta/epsilon. I double negatived my logic. (nettsundere) - * Fixed stubbing of module methods (eg Kernel#sleep). (steveklabnik) - -=== 4.7.1 / 2013-04-09 - -* 1 minor enhancement: - - * Added FAQ section to README - -* 1 bug fix: - - * Fixed bug where guard runs tests bypassing minitest/autorun and an ivar isn't set right. (darrencauthon) - -=== 4.7.0 / 2013-03-18 - -* 1 major enhancement: - - * Refactored MiniTest::Spec into MiniTest::Spec::DSL. - -* 1 bug fix: - - * Removed $DEBUG handler that detected when test/unit and minitest were both loaded. (tenderlove) - -=== 4.6.2 / 2013-02-27 - -* 1 minor enhancement: - - * Change error output to match Class#method, making it easier to use -n filter. - -=== 4.6.1 / 2013-02-14 - -* 1 bug fix: - - * Fixed an option processing bug caused by test/unit's irresponsibly convoluted code. (floehopper) - -=== 4.6.0 / 2013-02-07 - -* 3 major enhancements: - - * Removed ::reset_setup_teardown_hooks - * Removed the long deprecated assert_block - * Removed the long deprecated lifecycle hooks: add_(setup|teardown)_hook - -* 1 minor enhancement: - - * Allow filtering tests by suite name as well as test name. (lazyatom) - -* 2 bug fixes: - - * Made hex handling (eg object_ids) in mu_pp_for_diff more specific. (maxim) - * nodoc top-level module. (zzak) - -=== 4.5.0 / 2013-01-22 - -* 1 major enhancement: - - * Rearranged minitest/unit.rb so NO parallelization code is loaded/used until you opt-in. - -* 4 minor enhancements: - - * Added TestCase#skipped? for teardown guards - * Added maglev? guard - * Document that record can be sent twice if teardown fails or errors (randycoulman) - * Errors in teardown are now recorded. (randycoulman) - -* 3 bug fixes: - - * Added hacks and skips to get clean test runs on maglev - * Modified float tests for maglev float output differences. Not sure this is right. Not sure I care. - * Test for existance of diff.exe instead of assuming they have devkit. (blowmage/Cumbayah) - -=== 4.4.0 / 2013-01-07 - -* 3 minor enhancements: - - * Added fit_logarithic and assert_performance_logarithmic. (ktheory) - * Merge processed options so others can mess with defaults. (tenderlove) - * TestCase#message can now take another proc to defer custom message cost. (ordinaryzelig/bhenderson) - -* 1 bug fix: - - * TestCase#passed? now true if test is skipped. (qanhd) - -=== 4.3.3 / 2012-12-06 - -* 1 bug fix: - - * Updated information about stubbing. (daviddavis) - -=== 4.3.2 / 2012-11-27 // mri 2.0.0 - -* 1 minor enhancement: - - * Improved assert_equals error message to point you at #== of member objects. (kcurtin) - -=== 4.3.1 / 2012-11-23 - -* 1 bug fix: - - * Moved test_children to serial testcase to prevent random failures. - -=== 4.3.0 / 2012-11-17 - -* 4 minor enhancements: - - * Allow #autorun to run even if loaded with other test libs that call exit. (sunaku) - * Do not include Expectations in Object if $MT_NO_EXPECTATIONS is set (experimental?) - * Gave some much needed love to assert_raises. - * Mock#expect can take a block to custom-validate args. (gmoothart) - -=== 4.2.0 / 2012-11-02 - -* 4 major enhancements: - - * Added minitest/hell - run all your tests through the ringer! - * Added support for :parallel test_order to run test cases in parallel. - * Removed last_error and refactored runner code to be threadsafe. - * _run_suites now runs suites in parallel if they opt-in. - -* 4 minor enhancements: - - * Added TestCase#synchronize - * Added TestCase.make_my_diffs_pretty! - * Added TestCase.parallelize_me! - * Lock on capture_io for thread safety (tenderlove) - -=== 4.1.0 / 2012-10-05 - -* 2 minor enhancements: - - * Added skip example to readme. (dissolved) - * Extracted backtrace filter to object. (tenderlove) - -* 1 bug fix: - - * OMG I'm so dumb. Fixed access to deprecated hook class methods. I hate ruby modules. (route) - -=== 4.0.0 / 2012-09-28 - -* 1 major enhancement: - - * The names of a privately-used undocumented constants are Super Importantâ„¢. - -* 1 minor enhancement: - - * Support stubbing methods that would be handled via method_missing. (jhsu) - -* 3 bug fixes: - - * Add include_private param to MiniTest::Mock#respond_to? (rf-) - * Fixed use of minitest/pride with --help. (zw963) - * Made 'No visible difference.' message more clear. (ckrailo) - -=== 3.5.0 / 2012-09-21 - -* 1 minor enhancement: - - * Added #capture_subprocess_io. (route) - -=== 3.4.0 / 2012-09-05 - -* 2 minor enhancements: - - * assert_output can now take regexps for expected values. (suggested by stomar) - * Clarified that ruby 1.9/2.0's phony gems cause serious confusion for rubygems. - -=== 3.3.0 / 2012-07-26 - -* 1 major enhancement: - - * Deprecated add_(setup|teardown)_hook in favor of (before|after)_(setup|teardown) [2013-01-01] - -* 4 minor enhancements: - - * Refactored deprecated hook system into a module. - * Refactored lifecycle hooks into a module. - * Removed after_setup/before_teardown + run_X_hooks from Spec. - * Spec#before/after now do a simple define_method and call super. DUR. - -* 2 bug fixes: - - * Fixed #passed? when used against a test that called flunk. (floehopper) - * Fixed rdoc bug preventing doco for some expectations. (stomar). - -=== 3.2.0 / 2012-06-26 - -* 1 minor enhancement: - - * Stubs now yield self. (peterhellberg) - -* 1 bug fix: - - * Fixed verbose test that only fails when run in verbose mode. mmmm irony. - -=== 3.1.0 / 2012-06-13 - -* 2 minor enhancements: - - * Removed LONG deprecated Unit.out accessor - * Removed generated method name munging from minitest/spec. (ordinaryzelig/tenderlove) - -=== 3.0.1 / 2012-05-24 - -* 1 bug fix: - - * I'm a dumbass and refactored into Mock#call. Renamed to #__call so you can mock #call. (mschuerig) - -=== 3.0.0 / 2012-05-08 - -* 3 major enhancements: - - * Added Object#stub (in minitest/mock.rb). - * Mock#expect mocks are used in the order they're given. - * Mock#verify now strictly compares against expect calls. - -* 3 minor enhancements: - - * Added caller to deprecation message. - * Mock error messages are much prettier. - * Removed String check for RHS of assert/refute_match. This lets #to_str work properly. - -* 1 bug fix: - - * Support drive letter on Windows. Patch provided from MRI by Usaku NAKAMURA. (ayumin) - -=== 2.12.1 / 2012-04-10 - -* 1 minor enhancement: - - * Added ruby releases to History.txt to make it easier to see what you're missing - -* 1 bug fix: - - * Rolled my own deprecate msg to allow MT to work with rubygems < 1.7 - -=== 2.12.0 / 2012-04-03 - -* 4 minor enhancements: - - * ::it returns test method name (wojtekmach) - * Added #record method to runner so runner subclasses can cleanly gather data. - * Added Minitest alias for MiniTest because even I forget. - * Deprecated assert_block!! Yay!!! - -* 1 bug fix: - - * Fixed warning in i_suck_and_my_tests_are_order_dependent! (phiggins) - -=== 2.11.4 / 2012-03-20 - -* 2 minor enhancements: - - * Updated known extensions - * You got your unicode in my tests! You got your tests in my unicode! (fl00r) - -* 1 bug fix: - - * Fixed MiniTest::Mock example in the readme. (conradwt) - -=== 2.11.3 / 2012-02-29 - -* 2 bug fixes: - - * Clarified that assert_raises returns the exception for further testing - * Fixed assert_in_epsilon when both args are negative. (tamc) - -=== 2.11.2 / 2012-02-14 - -* 1 minor enhancement: - - * Display failures/errors on SIGINFO. (tenderlove) - -* 1 bug fix: - - * Fixed MiniTest::Unit.after_tests for Ruby 1.9.3. (ysbaddaden) - -=== 2.11.1 / 2012-02-01 - -* 3 bug fixes: - - * Improved description for --name argument. (drd) - * Ensure Mock#expect's expected args is an Array. (mperham) - * Ensure Mock#verify verifies multiple expects of the same method. (chastell) - -=== 2.11.0 / 2012-01-25 - -* 2 minor enhancements: - - * Added before / after hooks for setup and teardown. (tenderlove) - * Pushed run_setup_hooks down to Spec. (tenderlove) - -=== 2.10.1 / 2012-01-17 - -* 1 bug fix: - - * Fixed stupid 1.9 path handling grumble grumble. (graaff) - -=== 2.10.0 / 2011-12-20 - -* 3 minor enhancements: - - * Added specs for must/wont be_empty/respond_to/be_kind_of and others. - * Added tests for assert/refute predicate. - * Split minitest/excludes.rb out to its own gem. - -* 1 bug fix: - - * Fixed must_be_empty and wont_be_empty argument handling. (mrsimo) - -=== 2.9.1 / 2011-12-13 - -* 4 minor enhancements: - - * Added a ton of tests on spec error message output. - * Cleaned up consistency of msg handling on unary expectations. - * Improved error messages on assert/refute_in_delta. - * infect_an_assertion no longer checks arity and better handles args. - -* 1 bug fix: - - * Fixed error message on specs when 2+ args and custom message provided. (chastell) - -=== 2.9.0 / 2011-12-07 - -* 4 minor enhancements: - - * Added TestCase.exclude and load_excludes for programmatic filtering of tests. - * Added guard methods so you can cleanly skip based on platform/impl - * Holy crap! 100% doco! `rdoc -C` ftw - * Switch assert_output to test stderr before stdout to possibly improve debugging - -=== 2.8.1 / 2011-11-17 - -* 1 bug fix: - - * Ugh. 1.9's test/unit violates my internals. Added const_missing. - -=== 2.8.0 / 2011-11-08 - -* 2 minor enhancements: - - * Add a method so that code can be run around a particular test case (tenderlove) - * Turn off backtrace filtering if we're running inside a ruby checkout. (drbrain) - -* 2 bug fixes: - - * Fixed 2 typos and 2 doc glitches. (splattael) - * Remove unused block arguments to avoid creating Proc objects. (k-tsj) - -=== 2.7.0 / 2011-10-25 - -* 2 minor enhancements: - - * Include failed values in the expected arg output in MockExpectationError. (nono) - * Make minitest/pride work with other 256 color capable terms. (sunaku) - -* 2 bug fixes: - - * Clarified the documentation of minitest/benchmark (eregon) - * Fixed using expectations in regular unit tests. (sunaku) - -=== 2.6.2 / 2011-10-19 - -* 1 minor enhancement: - - * Added link to vim bundle. (sunaku) - -* 2 bug fixes: - - * Force gem activation in hoe minitest plugin - * Support RUBY_VERSION='2.0.0' (nagachika) - -=== 2.6.1 / 2011-09-27 - -* 2 bug fixes: - - * Alias Spec.name from Spec.to_s so it works when @name is nil (nathany) - * Fixed assert and refute_operator where second object has a bad == method. - -=== 2.6.0 / 2011-09-13 - -* 2 minor enhancements: - - * Added specify alias for it and made desc optional. - * Spec#must_be and #wont_be can be used with predicates (metaskills) - -* 1 bug fix: - - * Fixed Mock.respond_to?(var) to work with strings. (holli) - -=== 2.5.1 / 2011-08-27 // ruby 1.9.3: p0, p125, p34579 - -* 2 minor enhancements: - - * Added gem activation for minitest in minitest/autoload to help out 1.9 users - * Extended Spec.register_spec_type to allow for procs instead of just regexps. - -=== 2.5.0 / 2011-08-18 - -* 4 minor enhancements: - - * Added 2 more arguments against rspec: let & subject in 9 loc! (emmanuel/luis) - * Added TestCase.i_suck_and_my_tests_are_order_dependent! - * Extended describe to take an optional method name (2 line change!). (emmanuel) - * Refactored and extended minitest/pride to do full 256 color support. (lolcat) - -* 1 bug fix: - - * Doc fixes. (chastell) - -=== 2.4.0 / 2011-08-09 - -* 4 minor enhancements: - - * Added simple examples for all expectations. - * Improved Mock error output when args mismatch. - * Moved all expectations from Object to MiniTest::Expectations. - * infect_with_assertions has been removed due to excessive clever - -* 4 bug fixes: - - * Fix Assertions#mu_pp to deal with immutable encoded strings. (ferrous26) - * Fix minitest/pride for MacRuby (ferrous26) - * Made error output less fancy so it is more readable - * Mock shouldn't undef === and inspect. (dgraham) - -=== 2.3.1 / 2011-06-22 - -* 1 bug fix: - - * Fixed minitest hoe plugin to be a spermy dep and not depend on itself. - -=== 2.3.0 / 2011-06-15 - -* 5 minor enhancements: - - * Add setup and teardown hooks to MiniTest::TestCase. (phiggins) - * Added nicer error messages for MiniTest::Mock. (phiggins) - * Allow for less specific expected arguments in Mock. (bhenderson/phiggins) - * Made MiniTest::Mock a blank slate. (phiggins) - * Refactored minitest/spec to use the hooks instead of define_inheritable_method. (phiggins) - -* 2 bug fixes: - - * Fixed TestCase's inherited hook. (dchelimsky/phiggins/jamis, the 'good' neighbor) - * MiniTest::Assertions#refute_empty should use mu_pp in the default message. (whatthejeff) - -=== 2.2.2 / 2011-06-01 - -* 2 bug fixes: - - * Got rid of the trailing period in message for assert_equal. (tenderlove) - * Windows needs more flushing. (Akio Tajima) - -=== 2.2.1 / 2011-05-31 - -* 1 bug fix: - - * My _ONE_ non-rubygems-using minitest user goes to Seattle.rb! - -=== 2.2.0 / 2011-05-29 - -* 6 minor enhancements: - - * assert_equal (and must_equal) now tries to diff output where it makes sense. - * Added Assertions#diff(exp, act) to be used by assert_equal. - * Added Assertions#mu_pp_for_diff - * Added Assertions.diff and diff= - * Moved minitest hoe-plugin from hoe-seattlerb. (erikh) - * Skipped tests only output details in verbose mode. (tenderlove+zenspider=xoxo) - -=== 2.1.0 / 2011-04-11 - -* 5 minor enhancements: - - * Added MiniTest::Spec.register_spec_type(matcher, klass) and spec_type(desc) - * Added ability for specs to share code via subclassing of Spec. (metaskills) - * Clarified (or tried to) bench_performance_linear's use of threshold. - * MiniTest::Unit.runner=(runner) provides an easy way of creating custom test runners for specialized needs. (justinweiss) - * Reverse order of inheritance in teardowns of specs. (deepfryed) - -* 3 bug fixes: - - * FINALLY fixed problems of inheriting specs in describe/it/describe scenario. (MGPalmer) - * Fixed a new warning in 1.9.3. - * Fixed assert_block's message handling. (nobu) - -=== 2.0.2 / 2010-12-24 - -* 1 minor enhancement: - - * Completed doco on minitest/benchmark for specs. - -* 1 bug fix: - - * Benchmarks in specs that didn't call bench_range would die. (zzak). - -=== 2.0.1 / 2010-12-15 - -* 4 minor enhancements: - - * Do not filter backtrace if $DEBUG - * Exit autorun via nested at_exit handler, in case other libs call exit - * Make options accesor lazy. - * Split printing of test name and its time. (nurse) - -* 1 bug fix: - - * Fix bug when ^T is hit before runner start - -=== 2.0.0 / 2010-11-11 - -* 3 major enhancements: - - * Added minitest/benchmark! Assert your performance! YAY! - * Refactored runner to allow for more extensibility. See minitest/benchmark. - * This makes the runner backwards incompatible in some ways! - -* 9 minor enhancements: - - * Added MiniTest::Unit.after_tests { ... } - * Improved output by adding test rates and a more sortable verbose format - * Improved readme based on feedback from others - * Added io method to TestCase. If used, it'll supplant '.EF' output. - * Refactored IO in MiniTest::Unit. - * Refactored _run_anything to _run_suite to make it easier to wrap (ngauthier) - * Spec class names are now the unmunged descriptions (btakita) - * YAY for not having redundant rdoc/readmes! - * Help output is now generated from the flags you passed straight up. - -* 4 bug fixes: - - * Fixed scoping issue on minitest/mock (srbaker/prosperity) - * Fixed some of the assertion default messages - * Fixes autorun when on windows with ruby install on different drive (larsch) - * Fixed rdoc output bug in spec.rb - -=== 1.7.2 / 2010-09-23 - -* 3 bug fixes: - - * Fixed doco for expectations and Spec. - * Fixed test_capture_io on 1.9.3+ (sora_h) - * assert_raises now lets MiniTest::Skip through. (shyouhei) - -=== 1.7.1 / 2010-09-01 - -* 1 bug fix: - - * 1.9.2 fixes for spec tests - -=== 1.7.0 / 2010-07-15 - -* 5 minor enhancements: - - * Added assert_output (mapped to must_output). - * Added assert_silent (mapped to must_be_silent). - * Added examples to readme (Mike Dalessio) - * Added options output at the top of the run, for fatal run debugging (tenderlove) - * Spec's describe method returns created class - -=== 1.6.0 / 2010-03-27 // ruby 1.9.2-p290 - -* 10 minor enhancements: - - * Added --seed argument so you can reproduce a random order for debugging. - * Added documentation for assertions - * Added more rdoc and tons of :nodoc: - * Added output to give you all the options you need to reproduce that run. - * Added proper argument parsing to minitest. - * Added unique serial # to spec names so order can be preserved (needs tests). (phrogz) - * Empty 'it' fails with default msg. (phrogz) - * Remove previous method on expect to remove 1.9 warnings - * Spec#it is now order-proof wrt subclasses/nested describes. - * assert_same error message now reports in decimal, eg: oid=123. (mattkent) - -* 2 bug fixes: - - * Fixed message on refute_same to be consistent with assert_same. - * Fixed method randomization to be stable for testing. - -=== 1.5.0 / 2010-01-06 - -* 4 minor enhancements: - - * Added ability to specify what assertions should have their args flipped. - * Don't flip arguments on *include and *respond_to assertions. - * Refactored Module.infect_an_assertion from Module.infect_with_assertions. - * before/after :all now bitches and acts like :each - -* 3 bug fixes: - - * Nested describes now map to nested test classes to avoid namespace collision. - * Using undef_method instead of remove_method to clean out inherited specs. - * assert_raises was ignoring passed in message. - -=== 1.4.2 / 2009-06-25 - -* 1 bug fix: - - * Fixed info handler for systems that don't have siginfo. - -=== 1.4.1 / 2009-06-23 - -* 1 major enhancement: - - * Handle ^C and other fatal exceptions by failing - -* 1 minor enhancement: - - * Added something to catch mixed use of test/unit and minitest if $DEBUG - -* 1 bug fix: - - * Added SIGINFO handler for finding slow tests without verbose - -=== 1.4.0 / 2009-06-18 - -* 5 minor enhancement: - - * Added clarification doco. - * Added specs and mocks to autorun. - * Changed spec test class creation to be non-destructive. - * Updated rakefile for new hoe capabilities. - * describes are nestable (via subclass). before/after/def inherits, specs don't. - -* 3 bug fixes: - - * Fixed location on must/wont. - * Switched to __name__ to avoid common ivar name. - * Fixed indentation in test file (1.9). - -=== 1.3.1 / 2009-01-20 // ruby 1.9.1-p431 - -* 1 minor enhancement: - - * Added miniunit/autorun.rb as replacement for test/unit.rb's autorun. - -* 16 bug fixes: - - * 1.9 test fixes. - * Bug fixes from nobu and akira for really odd scenarios. They run ruby funny. - * Fixed (assert|refute)_match's argument order. - * Fixed LocalJumpError in autorun if exception thrown before at_exit. - * Fixed assert_in_delta (should be >=, not >). - * Fixed assert_raises to match Modules. - * Fixed capture_io to not dup IOs. - * Fixed indentation of capture_io for ruby 1.9 warning. - * Fixed location to deal better with custom assertions and load paths. (Yuki) - * Fixed order of (must|wont)_include in MiniTest::Spec. - * Fixed skip's backtrace. - * Got arg order wrong in *_match in tests, message wrong as a result. - * Made describe private. For some reason I thought that an attribute of Kernel. - * Removed disable_autorun method, added autorun.rb instead. - * assert_match escapes if passed string for pattern. - * instance_of? is different from ===, use instance_of. - -=== 1.3.0 / 2008-10-09 - -* 2 major enhancements: - - * renamed to minitest and pulled out test/unit compatibility. - * mini/test.rb is now minitest/unit.rb, everything else maps directly. - -* 12 minor enhancements: - - * assert_match now checks that act can call =~ and converts exp to a - regexp only if needed. - * Added assert_send... seems useless to me tho. - * message now forces to string... ruby-core likes to pass classes and arrays :( - * Added -v handling and switched to @verbose from $DEBUG. - * Verbose output now includes test class name and adds a sortable running time! - * Switched message generation into procs for message deferment. - * Added skip and renamed fail to flunk. - * Improved output failure messages for assert_instance_of, assert_kind_of - * Improved output for assert_respond_to, assert_same. - * at_exit now exits false instead of errors+failures. - * Made the tests happier and more readable imhfo. - * Switched index(s) == 0 to rindex(s, 0) on nobu's suggestion. Faster. - -* 5 bug fixes: - - * 1.9: Added encoding normalization in mu_pp. - * 1.9: Fixed backtrace filtering (BTs are expanded now) - * Added back exception_details to assert_raises. DOH. - * Fixed shadowed variable in mock.rb - * Fixed stupid muscle memory message bug in assert_send. - -=== 1.2.1 / 2008-06-10 - -* 7 minor enhancements: - - * Added deprecations everywhere in test/unit. - * Added test_order to TestCase. :random on mini, :sorted on test/unit (for now). - * Big cleanup in test/unit for rails. Thanks Jeremy Kemper! - * Minor readability cleanup. - * Pushed setup/run/teardown down to testcase allowing specialized testcases. - * Removed pp. Tests run 2x faster. :/ - * Renamed deprecation methods and moved to test/unit/deprecate.rb. - -=== 1.2.0 / 2008-06-09 - -* 2 major enhancements: - - * Added Mini::Spec. - * Added Mini::Mock. Thanks Steven Baker!! - -* 23 minor enhancements: - - * Added bin/use_miniunit to make it easy to test out miniunit. - * Added -n filtering, thanks to Phil Hagelberg! - * Added args argument to #run, takes ARGV from at_exit. - * Added test name output if $DEBUG. - * Added a refute (was deny) for every assert. - * Added capture_io and a bunch of nice assertions from zentest. - * Added deprecation mechanism for assert_no/not methods to test/unit/assertions. - * Added pp output when available. - * Added tests for all assertions. Pretty much maxed out coverage. - * Added tests to verify consistency and good naming. - * Aliased and deprecated all ugly assertions. - * Cleaned out test/unit. Moved autorun there. - * Code cleanup to make extensions easier. Thanks Chad! - * Got spec args reversed in all but a couple assertions. Much more readable. - * Improved error messages across the board. Adds your message to the default. - * Moved into Mini namespace, renamed to Mini::Test and Mini::Spec. - * Pulled the assertions into their own module... - * Removed as much code as I could while still maintaining full functionality. - * Moved filter_backtrace into MiniTest. - * Removed MiniTest::Unit::run. Unnecessary. - * Removed location_of_failure. Unnecessary. - * Rewrote test/unit's filter_backtrace. Flog from 37.0 to 18.1 - * Removed assert_send. Google says it is never used. - * Renamed MiniTest::Unit.autotest to #run. - * Renamed deny to refute. - * Rewrote some ugly/confusing default assertion messages. - * assert_in_delta now defaults to 0.001 precision. Makes specs prettier. - -* 9 bug fixes: - - * Fixed assert_raises to raise outside of the inner-begin/rescue. - * Fixed for ruby 1.9 and rubinius. - * No longer exits 0 if exception in code PRE-test run causes early exit. - * Removed implementors method list from mini/test.rb - too stale. - * assert_nothing_raised takes a class as an arg. wtf? STUPID - * ".EF" output is now unbuffered. - * Bunch of changes to get working with rails... UGH. - * Added stupid hacks to deal with rails not requiring their dependencies. - * Now bitch loudly if someone defines one of my classes instead of requiring. - * Fixed infect method to work better on 1.9. - * Fixed all shadowed variable warnings in 1.9. - -=== 1.1.0 / 2007-11-08 - -* 4 major enhancements: - - * Finished writing all missing assertions. - * Output matches original test/unit. - * Documented every method needed by language implementor. - * Fully switched over to self-testing setup. - -* 2 minor enhancements: - - * Added deny (assert ! test), our favorite extension to test/unit. - * Added .autotest and fairly complete unit tests. (thanks Chad for help here) - -=== 1.0.0 / 2006-10-30 - -* 1 major enhancement - - * Birthday! - diff --git a/ruby/gems/minitest-5.13.0/Manifest.txt b/ruby/gems/minitest-5.13.0/Manifest.txt deleted file mode 100644 index 8e096ff4d..000000000 --- a/ruby/gems/minitest-5.13.0/Manifest.txt +++ /dev/null @@ -1,27 +0,0 @@ -.autotest -History.rdoc -Manifest.txt -README.rdoc -Rakefile -design_rationale.rb -lib/hoe/minitest.rb -lib/minitest.rb -lib/minitest/assertions.rb -lib/minitest/autorun.rb -lib/minitest/benchmark.rb -lib/minitest/expectations.rb -lib/minitest/hell.rb -lib/minitest/mock.rb -lib/minitest/parallel.rb -lib/minitest/pride.rb -lib/minitest/pride_plugin.rb -lib/minitest/spec.rb -lib/minitest/test.rb -lib/minitest/unit.rb -test/minitest/metametameta.rb -test/minitest/test_minitest_assertions.rb -test/minitest/test_minitest_benchmark.rb -test/minitest/test_minitest_mock.rb -test/minitest/test_minitest_reporter.rb -test/minitest/test_minitest_spec.rb -test/minitest/test_minitest_test.rb diff --git a/ruby/gems/minitest-5.13.0/README.rdoc b/ruby/gems/minitest-5.13.0/README.rdoc deleted file mode 100644 index 07feac0ee..000000000 --- a/ruby/gems/minitest-5.13.0/README.rdoc +++ /dev/null @@ -1,763 +0,0 @@ -= minitest/{test,spec,mock,benchmark} - -home :: https://github.com/seattlerb/minitest -bugs :: https://github.com/seattlerb/minitest/issues -rdoc :: http://docs.seattlerb.org/minitest -vim :: https://github.com/sunaku/vim-ruby-minitest -emacs:: https://github.com/arthurnn/minitest-emacs - -== DESCRIPTION: - -minitest provides a complete suite of testing facilities supporting -TDD, BDD, mocking, and benchmarking. - - "I had a class with Jim Weirich on testing last week and we were - allowed to choose our testing frameworks. Kirk Haines and I were - paired up and we cracked open the code for a few test - frameworks... - - I MUST say that minitest is *very* readable / understandable - compared to the 'other two' options we looked at. Nicely done and - thank you for helping us keep our mental sanity." - - -- Wayne E. Seguin - -minitest/test is a small and incredibly fast unit testing framework. -It provides a rich set of assertions to make your tests clean and -readable. - -minitest/spec is a functionally complete spec engine. It hooks onto -minitest/test and seamlessly bridges test assertions over to spec -expectations. - -minitest/benchmark is an awesome way to assert the performance of your -algorithms in a repeatable manner. Now you can assert that your newb -co-worker doesn't replace your linear algorithm with an exponential -one! - -minitest/mock by Steven Baker, is a beautifully tiny mock (and stub) -object framework. - -minitest/pride shows pride in testing and adds coloring to your test -output. I guess it is an example of how to write IO pipes too. :P - -minitest/test is meant to have a clean implementation for language -implementors that need a minimal set of methods to bootstrap a working -test suite. For example, there is no magic involved for test-case -discovery. - - "Again, I can't praise enough the idea of a testing/specing - framework that I can actually read in full in one sitting!" - - -- Piotr Szotkowski - -Comparing to rspec: - - rspec is a testing DSL. minitest is ruby. - - -- Adam Hawkins, "Bow Before MiniTest" - -minitest doesn't reinvent anything that ruby already provides, like: -classes, modules, inheritance, methods. This means you only have to -learn ruby to use minitest and all of your regular OO practices like -extract-method refactorings still apply. - -== FEATURES/PROBLEMS: - -* minitest/autorun - the easy and explicit way to run all your tests. -* minitest/test - a very fast, simple, and clean test system. -* minitest/spec - a very fast, simple, and clean spec system. -* minitest/mock - a simple and clean mock/stub system. -* minitest/benchmark - an awesome way to assert your algorithm's performance. -* minitest/pride - show your pride in testing! -* Incredibly small and fast runner, but no bells and whistles. -* Written by squishy human beings. Software can never be perfect. We will all eventually die. - -== RATIONALE: - -See design_rationale.rb to see how specs and tests work in minitest. - -== SYNOPSIS: - -Given that you'd like to test the following class: - - class Meme - def i_can_has_cheezburger? - "OHAI!" - end - - def will_it_blend? - "YES!" - end - end - -=== Unit tests - -Define your tests as methods beginning with +test_+. - - require "minitest/autorun" - - class TestMeme < Minitest::Test - def setup - @meme = Meme.new - end - - def test_that_kitty_can_eat - assert_equal "OHAI!", @meme.i_can_has_cheezburger? - end - - def test_that_it_will_not_blend - refute_match /^no/i, @meme.will_it_blend? - end - - def test_that_will_be_skipped - skip "test this later" - end - end - -=== Specs - - require "minitest/autorun" - - describe Meme do - before do - @meme = Meme.new - end - - describe "when asked about cheeseburgers" do - it "must respond positively" do - _(@meme.i_can_has_cheezburger?).must_equal "OHAI!" - end - end - - describe "when asked about blending possibilities" do - it "won't say no" do - _(@meme.will_it_blend?).wont_match /^no/i - end - end - end - -For matchers support check out: - -* https://github.com/wojtekmach/minitest-matchers -* https://github.com/rmm5t/minitest-matchers_vaccine - -=== Benchmarks - -Add benchmarks to your tests. - - # optionally run benchmarks, good for CI-only work! - require "minitest/benchmark" if ENV["BENCH"] - - class TestMeme < Minitest::Benchmark - # Override self.bench_range or default range is [1, 10, 100, 1_000, 10_000] - def bench_my_algorithm - assert_performance_linear 0.9999 do |n| # n is a range value - @obj.my_algorithm(n) - end - end - end - -Or add them to your specs. If you make benchmarks optional, you'll -need to wrap your benchmarks in a conditional since the methods won't -be defined. In minitest 5, the describe name needs to match -/Bench(mark)?$/. - - describe "Meme Benchmark" do - if ENV["BENCH"] then - bench_performance_linear "my_algorithm", 0.9999 do |n| - 100.times do - @obj.my_algorithm(n) - end - end - end - end - -outputs something like: - - # Running benchmarks: - - TestBlah 100 1000 10000 - bench_my_algorithm 0.006167 0.079279 0.786993 - bench_other_algorithm 0.061679 0.792797 7.869932 - -Output is tab-delimited to make it easy to paste into a spreadsheet. - -=== Mocks - -Mocks and stubs defined using terminology by Fowler & Meszaros at -http://www.martinfowler.com/bliki/TestDouble.html: - -"Mocks are pre-programmed with expectations which form a specification -of the calls they are expected to receive. They can throw an exception -if they receive a call they don't expect and are checked during -verification to ensure they got all the calls they were expecting." - - class MemeAsker - def initialize(meme) - @meme = meme - end - - def ask(question) - method = question.tr(" ", "_") + "?" - @meme.__send__(method) - end - end - - require "minitest/autorun" - - describe MemeAsker, :ask do - describe "when passed an unpunctuated question" do - it "should invoke the appropriate predicate method on the meme" do - @meme = Minitest::Mock.new - @meme_asker = MemeAsker.new @meme - @meme.expect :will_it_blend?, :return_value - - @meme_asker.ask "will it blend" - - @meme.verify - end - end - end - -==== Multi-threading and Mocks - -Minitest mocks do not support multi-threading. If it works, fine, if it doesn't -you can use regular ruby patterns and facilities like local variables. Here's -an example of asserting that code inside a thread is run: - - def test_called_inside_thread - called = false - pr = Proc.new { called = true } - thread = Thread.new(&pr) - thread.join - assert called, "proc not called" - end - -=== Stubs - -Mocks and stubs are defined using terminology by Fowler & Meszaros at -http://www.martinfowler.com/bliki/TestDouble.html: - -"Stubs provide canned answers to calls made during the test". - -Minitest's stub method overrides a single method for the duration of -the block. - - def test_stale_eh - obj_under_test = Something.new - - refute obj_under_test.stale? - - Time.stub :now, Time.at(0) do # stub goes away once the block is done - assert obj_under_test.stale? - end - end - -A note on stubbing: In order to stub a method, the method must -actually exist prior to stubbing. Use a singleton method to create a -new non-existing method: - - def obj_under_test.fake_method - ... - end - -=== Running Your Tests - -Ideally, you'll use a rake task to run your tests, either piecemeal or -all at once. Both rake and rails ship with rake tasks for running your -tests. BUT! You don't have to: - - % ruby -Ilib:test test/minitest/test_minitest_test.rb - Run options: --seed 37685 - - # Running: - - ...................................................................... (etc) - - Finished in 0.107130s, 1446.8403 runs/s, 2959.0217 assertions/s. - - 155 runs, 317 assertions, 0 failures, 0 errors, 0 skips - -There are runtime options available, both from minitest itself, and also -provided via plugins. To see them, simply run with +--help+: - - % ruby -Ilib:test test/minitest/test_minitest_test.rb --help - minitest options: - -h, --help Display this help. - -s, --seed SEED Sets random seed. Also via env. Eg: SEED=n rake - -v, --verbose Verbose. Show progress processing files. - -n, --name PATTERN Filter run on /regexp/ or string. - -e, --exclude PATTERN Exclude /regexp/ or string from run. - - Known extensions: pride, autotest - -p, --pride Pride. Show your testing pride! - -a, --autotest Connect to autotest server. - -You can set up a rake task to run all your tests by adding this to your Rakefile: - - require "rake/testtask" - - Rake::TestTask.new(:test) do |t| - t.libs << "test" - t.libs << "lib" - t.test_files = FileList["test/**/test_*.rb"] - end - - task :default => :test - -== Writing Extensions - -To define a plugin, add a file named minitest/XXX_plugin.rb to your -project/gem. That file must be discoverable via ruby's LOAD_PATH (via -rubygems or otherwise). Minitest will find and require that file using -Gem.find_files. It will then try to call +plugin_XXX_init+ during -startup. The option processor will also try to call +plugin_XXX_options+ -passing the OptionParser instance and the current options hash. This -lets you register your own command-line options. Here's a totally -bogus example: - - # minitest/bogus_plugin.rb: - - module Minitest - def self.plugin_bogus_options(opts, options) - opts.on "--myci", "Report results to my CI" do - options[:myci] = true - options[:myci_addr] = get_myci_addr - options[:myci_port] = get_myci_port - end - end - - def self.plugin_bogus_init(options) - self.reporter << MyCI.new(options) if options[:myci] - end - end - -=== Adding custom reporters - -Minitest uses composite reporter to output test results using multiple -reporter instances. You can add new reporters to the composite during -the init_plugins phase. As we saw in +plugin_bogus_init+ above, you -simply add your reporter instance to the composite via <<. - -+AbstractReporter+ defines the API for reporters. You may subclass it -and override any method you want to achieve your desired behavior. - -start :: Called when the run has started. -record :: Called for each result, passed or otherwise. -report :: Called at the end of the run. -passed? :: Called to see if you detected any problems. - -Using our example above, here is how we might implement MyCI: - - # minitest/bogus_plugin.rb - - module Minitest - class MyCI < AbstractReporter - attr_accessor :results, :addr, :port - - def initialize options - self.results = [] - self.addr = options[:myci_addr] - self.port = options[:myci_port] - end - - def record result - self.results << result - end - - def report - CI.connect(addr, port).send_results self.results - end - end - - # code from above... - end - -== FAQ - -=== How to test SimpleDelegates? - -The following implementation and test: - - class Worker < SimpleDelegator - def work - end - end - - describe Worker do - before do - @worker = Worker.new(Object.new) - end - - it "must respond to work" do - _(@worker).must_respond_to :work - end - end - -outputs a failure: - - 1) Failure: - Worker#test_0001_must respond to work [bug11.rb:16]: - Expected # (Object) to respond to #work. - -Worker is a SimpleDelegate which in 1.9+ is a subclass of BasicObject. -Expectations are put on Object (one level down) so the Worker -(SimpleDelegate) hits +method_missing+ and delegates down to the -+Object.new+ instance. That object doesn't respond to work so the test -fails. - -You can bypass SimpleDelegate#method_missing by extending the worker -with Minitest::Expectations. You can either do that in your setup at -the instance level, like: - - before do - @worker = Worker.new(Object.new) - @worker.extend Minitest::Expectations - end - -or you can extend the Worker class (within the test file!), like: - - class Worker - include ::Minitest::Expectations - end - -=== How to share code across test classes? - -Use a module. That's exactly what they're for: - - module UsefulStuff - def useful_method - # ... - end - end - - describe Blah do - include UsefulStuff - - def test_whatever - # useful_method available here - end - end - -Remember, +describe+ simply creates test classes. It's just ruby at -the end of the day and all your normal Good Ruby Rules (tm) apply. If -you want to extend your test using setup/teardown via a module, just -make sure you ALWAYS call super. before/after automatically call super -for you, so make sure you don't do it twice. - -=== How to run code before a group of tests? - -Use a constant with begin...end like this: - - describe Blah do - SETUP = begin - # ... this runs once when describe Blah starts - end - # ... - end - -This can be useful for expensive initializations or sharing state. -Remember, this is just ruby code, so you need to make sure this -technique and sharing state doesn't interfere with your tests. - -=== Why am I seeing uninitialized constant MiniTest::Test (NameError)? - -Are you running the test with Bundler (e.g. via bundle exec )? If so, -in order to require minitest, you must first add the gem 'minitest' -to your Gemfile and run +bundle+. Once it's installed, you should be -able to require minitest and run your tests. - -== Prominent Projects using Minitest: - -* arel -* journey -* mime-types -* nokogiri -* rails (active_support et al) -* rake -* rdoc -* ...and of course, everything from seattle.rb... - -== Developing Minitest: - -Minitest requires {Hoe}[https://rubygems.org/gems/hoe]. - -=== Minitest's own tests require UTF-8 external encoding. - -This is a common problem in Windows, where the default external Encoding is -often CP850, but can affect any platform. -Minitest can run test suites using any Encoding, but to run Minitest's -own tests you must have a default external Encoding of UTF-8. - -If your encoding is wrong, you'll see errors like: - - --- expected - +++ actual - @@ -1,2 +1,3 @@ - # encoding: UTF-8 - -"Expected /\\w+/ to not match \"blah blah blah\"." - +"Expected /\\w+/ to not match # encoding: UTF-8 - +\"blah blah blah\"." - -To check your current encoding, run: - - ruby -e 'puts Encoding.default_external' - -If your output is something other than UTF-8, you can set the RUBYOPTS -env variable to a value of '-Eutf-8'. Something like: - - RUBYOPT='-Eutf-8' ruby -e 'puts Encoding.default_external' - -Check your OS/shell documentation for the precise syntax (the above -will not work on a basic Windows CMD prompt, look for the SET command). -Once you've got it successfully outputing UTF-8, use the same setting -when running rake in Minitest. - -=== Minitest's own tests require GNU (or similar) diff. - -This is also a problem primarily affecting Windows developers. PowerShell -has a command called diff, but it is not suitable for use with Minitest. - -If you see failures like either of these, you are probably missing diff tool: - - 4) Failure: - TestMinitestUnitTestCase#test_assert_equal_different_long [D:/ruby/seattlerb/minitest/test/minitest/test_minitest_test.rb:936]: - Expected: "--- expected\n+++ actual\n@@ -1 +1 @@\n-\"hahahahahahahahahahahahahahahahahahahaha\"\n+\"blahblahblahblahblahblahblahblahblahblah\"\n" - Actual: "Expected: \"hahahahahahahahahahahahahahahahahahahaha\"\n Actual: \"blahblahblahblahblahblahblahblahblahblah\"" - - - 5) Failure: - TestMinitestUnitTestCase#test_assert_equal_different_collection_hash_hex_invisible [D:/ruby/seattlerb/minitest/test/minitest/test_minitest_test.rb:845]: - Expected: "No visible difference in the Hash#inspect output.\nYou should look at the implementation of #== on Hash or its members.\n - {1=>#}" - Actual: "Expected: {1=>#}\n Actual: {1=>#}" - - -If you use Cygwin or MSYS2 or similar there are packages that include a -GNU diff for Windows. If you don't, you can download GNU diffutils from -http://gnuwin32.sourceforge.net/packages/diffutils.htm -(make sure to add it to your PATH). - -You can make sure it's installed and path is configured properly with: - - diff.exe -v - -There are multiple lines of output, the first should be something like: - - diff (GNU diffutils) 2.8.1 - -If you are using PowerShell make sure you run diff.exe, not just diff, -which will invoke the PowerShell built in function. - -== Known Extensions: - -capybara_minitest_spec :: Bridge between Capybara RSpec matchers and - Minitest::Spec expectations (e.g. - page.must_have_content("Title")). -color_pound_spec_reporter :: Test names print Ruby Object types in color with - your Minitest Spec style tests. -minispec-metadata :: Metadata for describe/it blocks & CLI tag filter. - E.g. it "requires JS driver", js: true do & - ruby test.rb --tag js runs tests tagged :js. -minispec-rails :: Minimal support to use Spec style in Rails 5+. -mini-apivore :: for swagger based automated API testing. -minitest-around :: Around block for minitest. An alternative to - setup/teardown dance. -minitest-assert_errors :: Adds Minitest assertions to test for errors raised - or not raised by Minitest itself. -minitest-autotest :: autotest is a continuous testing facility meant to - be used during development. -minitest-bacon :: minitest-bacon extends minitest with bacon-like - functionality. -minitest-bang :: Adds support for RSpec-style let! to immediately - invoke let statements before each test. -minitest-bisect :: Helps you isolate and debug random test failures. -minitest-blink1_reporter :: Display test results with a Blink1. -minitest-capistrano :: Assertions and expectations for testing - Capistrano recipes. -minitest-capybara :: Capybara matchers support for minitest unit and - spec. -minitest-chef-handler :: Run Minitest suites as Chef report handlers -minitest-ci :: CI reporter plugin for Minitest. -minitest-context :: Defines contexts for code reuse in Minitest - specs that share common expectations. -minitest-debugger :: Wraps assert so failed assertions drop into - the ruby debugger. -minitest-display :: Patches Minitest to allow for an easily - configurable output. -minitest-documentation :: Minimal documentation format inspired by rspec's. -minitest-doc_reporter :: Detailed output inspired by rspec's documentation - format. -minitest-emoji :: Print out emoji for your test passes, fails, and - skips. -minitest-english :: Semantically symmetric aliases for assertions and - expectations. -minitest-excludes :: Clean API for excluding certain tests you - don't want to run under certain conditions. -minitest-fail-fast :: Reimplements RSpec's "fail fast" feature -minitest-filecontent :: Support unit tests with expectation results in files. - Differing results will be stored again in files. -minitest-filesystem :: Adds assertion and expectation to help testing - filesystem contents. -minitest-firemock :: Makes your Minitest mocks more resilient. -minitest-focus :: Focus on one test at a time. -minitest-gcstats :: A minitest plugin that adds a report of the top - tests by number of objects allocated. -minitest-global_expectations:: Support minitest expectation methods for all objects -minitest-great_expectations :: Generally useful additions to minitest's - assertions and expectations. -minitest-growl :: Test notifier for minitest via growl. -minitest-happy :: GLOBALLY ACTIVATE MINITEST PRIDE! RAWR! -minitest-have_tag :: Adds Minitest assertions to test for the existence of - HTML tags, including contents, within a provided string. -minitest-hooks :: Around and before_all/after_all/around_all hooks -minitest-hyper :: Pretty, single-page HTML reports for your Minitest runs -minitest-implicit-subject :: Implicit declaration of the test subject. -minitest-instrument :: Instrument ActiveSupport::Notifications when - test method is executed. -minitest-instrument-db :: Store information about speed of test execution - provided by minitest-instrument in database. -minitest-junit :: JUnit-style XML reporter for minitest. -minitest-keyword :: Use Minitest assertions with keyword arguments. -minitest-libnotify :: Test notifier for minitest via libnotify. -minitest-line :: Run test at line number. -minitest-logger :: Define assert_log and enable minitest to test log messages. - Supports Logger and Log4r::Logger. -minitest-macruby :: Provides extensions to minitest for macruby UI - testing. -minitest-matchers :: Adds support for RSpec-style matchers to - minitest. -minitest-matchers_vaccine :: Adds assertions that adhere to the matcher spec, - but without any expectation infections. -minitest-metadata :: Annotate tests with metadata (key-value). -minitest-mock_expectations :: Provides method call assertions for minitest. -minitest-mongoid :: Mongoid assertion matchers for Minitest. -minitest-must_not :: Provides must_not as an alias for wont in - Minitest. -minitest-optional_retry :: Automatically retry failed test to help with flakiness. -minitest-osx :: Reporter for the Mac OS X notification center. -minitest-parallel_fork :: Fork-based parallelization -minitest-parallel-db :: Run tests in parallel with a single database. -minitest-power_assert :: PowerAssert for Minitest. -minitest-predicates :: Adds support for .predicate? methods. -minitest-profile :: List the 10 slowest tests in your suite. -minitest-rails :: Minitest integration for Rails 3.x. -minitest-rails-capybara :: Capybara integration for Minitest::Rails. -minitest-reporters :: Create customizable Minitest output formats. -minitest-rg :: Colored red/green output for Minitest. -minitest-rspec_mocks :: Use RSpec Mocks with Minitest. -minitest-server :: minitest-server provides a client/server setup - with your minitest process, allowing your test - run to send its results directly to a handler. -minitest-sequel :: Minitest assertions to speed-up development and - testing of Ruby Sequel database setups. -minitest-shared_description :: Support for shared specs and shared spec - subclasses -minitest-should_syntax :: RSpec-style x.should == y assertions for - Minitest. -minitest-shouldify :: Adding all manner of shoulds to Minitest (bad - idea) -minitest-snail :: Print a list of tests that take too long -minitest-spec-context :: Provides rspec-ish context method to - Minitest::Spec. -minitest-spec-expect :: Expect syntax for Minitest::Spec (e.g. - expect(sequences).to_include :celery_man). -minitest-spec-magic :: Minitest::Spec extensions for Rails and beyond. -minitest-spec-rails :: Drop in Minitest::Spec superclass for - ActiveSupport::TestCase. -minitest-sprint :: Runs (Get it? It's fast!) your tests and makes - it easier to rerun individual failures. -minitest-stately :: Find leaking state between tests -minitest-stub_any_instance :: Stub any instance of a method on the given class - for the duration of a block. -minitest-stub-const :: Stub constants for the duration of a block. -minitest-tags :: Add tags for minitest. -minitest-unordered :: Adds a new assertion to minitest for checking the - contents of a collection, ignoring element order. -minitest-vcr :: Automatic cassette managment with Minitest::Spec - and VCR. -minitest_owrapper :: Get tests results as a TestResult object. -minitest_should :: Shoulda style syntax for minitest test::unit. -minitest_tu_shim :: Bridges between test/unit and minitest. -mongoid-minitest :: Minitest matchers for Mongoid. -mutant-minitest :: Minitest integration for mutant. -pry-rescue :: A pry plugin w/ minitest support. See - pry-rescue/minitest.rb. -rspec2minitest :: Easily translate any RSpec matchers to Minitest - assertions and expectations. - -== Unknown Extensions: - -Authors... Please send me a pull request with a description of your minitest extension. - -* assay-minitest -* detroit-minitest -* em-minitest-spec -* flexmock-minitest -* guard-minitest -* guard-minitest-decisiv -* minitest-activemodel -* minitest-ar-assertions -* minitest-capybara-unit -* minitest-colorer -* minitest-deluxe -* minitest-extra-assertions -* minitest-rails-shoulda -* minitest-spec -* minitest-spec-should -* minitest-sugar -* spork-minitest - -== Minitest related goods - -* minitest/pride fabric: http://www.spoonflower.com/fabric/3928730-again-by-katie_allen - -== REQUIREMENTS: - -* Ruby 2.3+. No magic is involved. I hope. - -== INSTALL: - - sudo gem install minitest - -On 1.9, you already have it. To get newer candy you can still install -the gem, and then requiring "minitest/autorun" should automatically -pull it in. If not, you'll need to do it yourself: - - gem "minitest" # ensures you"re using the gem, and not the built-in MT - require "minitest/autorun" - - # ... usual testing stuffs ... - -DO NOTE: There is a serious problem with the way that ruby 1.9/2.0 -packages their own gems. They install a gem specification file, but -don't install the gem contents in the gem path. This messes up -Gem.find_files and many other things (gem which, gem contents, etc). - -Just install minitest as a gem for real and you'll be happier. - -== LICENSE: - -(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. diff --git a/ruby/gems/minitest-5.13.0/Rakefile b/ruby/gems/minitest-5.13.0/Rakefile deleted file mode 100644 index 4971f9cb5..000000000 --- a/ruby/gems/minitest-5.13.0/Rakefile +++ /dev/null @@ -1,72 +0,0 @@ -# -*- ruby -*- - -require "rubygems" -require "hoe" - -Hoe.plugin :seattlerb -Hoe.plugin :rdoc - -Hoe.spec "minitest" do - developer "Ryan Davis", "ryand-ruby@zenspider.com" - - license "MIT" - - require_ruby_version "~> 2.2" -end - -desc "Find missing expectations" -task :specs do - $:.unshift "lib" - require "minitest/test" - require "minitest/spec" - - pos_prefix, neg_prefix = "must", "wont" - skip_re = /^(must|wont)$|wont_(throw)|must_(block|not?_|nothing|raise$)/x - dont_flip_re = /(must|wont)_(include|respond_to)/ - - map = { - /(must_throw)s/ => '\1', - /(?!not)_same/ => "_be_same_as", - /_in_/ => "_be_within_", - /_operator/ => "_be", - /_includes/ => "_include", - /(must|wont)_(.*_of|nil|silent|empty)/ => '\1_be_\2', - /must_raises/ => "must_raise", - } - - expectations = Minitest::Expectations.public_instance_methods.map(&:to_s) - assertions = Minitest::Assertions.public_instance_methods.map(&:to_s) - - assertions.sort.each do |assertion| - expectation = case assertion - when /^assert/ then - assertion.sub(/^assert/, pos_prefix.to_s) - when /^refute/ then - assertion.sub(/^refute/, neg_prefix.to_s) - end - - next unless expectation - next if expectation =~ skip_re - - regexp, replacement = map.find { |re, _| expectation =~ re } - expectation.sub! regexp, replacement if replacement - - next if expectations.include? expectation - - args = [assertion, expectation].map(&:to_sym).map(&:inspect) - args << :reverse if expectation =~ dont_flip_re - - puts - puts "##" - puts "# :method: #{expectation}" - puts "# See Minitest::Assertions##{assertion}" - puts - puts "infect_an_assertion #{args.join ", "}" - end -end - -task :bugs do - sh "for f in bug*.rb ; do echo $f; echo; #{Gem.ruby} -Ilib $f && rm $f ; done" -end - -# vim: syntax=Ruby diff --git a/ruby/gems/minitest-5.13.0/design_rationale.rb b/ruby/gems/minitest-5.13.0/design_rationale.rb deleted file mode 100644 index a3fcc378c..000000000 --- a/ruby/gems/minitest-5.13.0/design_rationale.rb +++ /dev/null @@ -1,52 +0,0 @@ -# Specs: # Equivalent Unit Tests: -############################################################################### -describe Thingy do # class TestThingy < Minitest::Test - before do # def setup - do_some_setup # super - end # do_some_setup - # end - it "should do the first thing" do # - 1.must_equal 1 # def test_first_thing - end # assert_equal 1, 1 - # end - describe SubThingy do # end - before do # - do_more_setup # class TestSubThingy < TestThingy - end # def setup - # super - it "should do the second thing" do # do_more_setup - 2.must_equal 2 # end - end # - end # def test_second_thing -end # assert_equal 2, 2 - # end - # end -############################################################################### -# runs 2 specs # runs 3 tests -############################################################################### -# The specs generate: - -class ThingySpec < Minitest::Spec - def setup - super - do_some_setup - end - - def test_should_do_the_first_thing - assert_equal 1, 1 - end -end - -class SubThingySpec < ThingySpec - def setup - super - do_more_setup - end - - # because only setup/teardown is inherited, not specs - remove_method :test_should_do_the_first_thing - - def test_should_do_the_second_thing - assert_equal 2, 2 - end -end diff --git a/ruby/gems/minitest-5.13.0/lib/hoe/minitest.rb b/ruby/gems/minitest-5.13.0/lib/hoe/minitest.rb deleted file mode 100644 index 6c045a5f4..000000000 --- a/ruby/gems/minitest-5.13.0/lib/hoe/minitest.rb +++ /dev/null @@ -1,32 +0,0 @@ -# :stopdoc: - -class Hoe -end - -module Hoe::Minitest - def minitest? - self.name == "minitest" - end - - def initialize_minitest - unless minitest? then - dir = "../../minitest/dev/lib" - Hoe.add_include_dirs dir if File.directory? dir - end - - gem "minitest" - require "minitest" - version = Minitest::VERSION.split(/\./).first(2).join(".") - - dependency "minitest", "~> #{version}", :development unless - minitest? or ENV["MT_NO_ISOLATE"] - end - - def define_minitest_tasks - self.testlib = :minitest - - # make sure we use the gemmed minitest on 1.9 - self.test_prelude = 'gem "minitest"' unless - minitest? or ENV["MT_NO_ISOLATE"] - end -end diff --git a/ruby/gems/minitest-5.13.0/lib/minitest.rb b/ruby/gems/minitest-5.13.0/lib/minitest.rb deleted file mode 100644 index 8e71f0993..000000000 --- a/ruby/gems/minitest-5.13.0/lib/minitest.rb +++ /dev/null @@ -1,1056 +0,0 @@ -require "optparse" -require "thread" -require "mutex_m" -require "minitest/parallel" -require "stringio" - -## -# :include: README.rdoc - -module Minitest - VERSION = "5.13.0" # :nodoc: - ENCS = "".respond_to? :encoding # :nodoc: - - @@installed_at_exit ||= false - @@after_run = [] - @extensions = [] - - mc = (class << self; self; end) - - ## - # Parallel test executor - - mc.send :attr_accessor, :parallel_executor - - warn "DEPRECATED: use MT_CPU instead of N for parallel test runs" if ENV["N"] - n_threads = (ENV["MT_CPU"] || ENV["N"] || 2).to_i - self.parallel_executor = Parallel::Executor.new n_threads - - ## - # Filter object for backtraces. - - mc.send :attr_accessor, :backtrace_filter - - ## - # Reporter object to be used for all runs. - # - # NOTE: This accessor is only available during setup, not during runs. - - mc.send :attr_accessor, :reporter - - ## - # Names of known extension plugins. - - mc.send :attr_accessor, :extensions - - ## - # The signal to use for dumping information to STDERR. Defaults to "INFO". - - mc.send :attr_accessor, :info_signal - self.info_signal = "INFO" - - ## - # Registers Minitest to run at process exit - - def self.autorun - at_exit { - next if $! and not ($!.kind_of? SystemExit and $!.success?) - - exit_code = nil - - pid = Process.pid - at_exit { - next if Process.pid != pid - @@after_run.reverse_each(&:call) - exit exit_code || false - } - - exit_code = Minitest.run ARGV - } unless @@installed_at_exit - @@installed_at_exit = true - end - - ## - # A simple hook allowing you to run a block of code after everything - # is done running. Eg: - # - # Minitest.after_run { p $debugging_info } - - def self.after_run &block - @@after_run << block - end - - def self.init_plugins options # :nodoc: - self.extensions.each do |name| - msg = "plugin_#{name}_init" - send msg, options if self.respond_to? msg - end - end - - def self.load_plugins # :nodoc: - return unless self.extensions.empty? - - seen = {} - - require "rubygems" unless defined? Gem - - Gem.find_files("minitest/*_plugin.rb").each do |plugin_path| - name = File.basename plugin_path, "_plugin.rb" - - next if seen[name] - seen[name] = true - - require plugin_path - self.extensions << name - end - end - - ## - # This is the top-level run method. Everything starts from here. It - # tells each Runnable sub-class to run, and each of those are - # responsible for doing whatever they do. - # - # The overall structure of a run looks like this: - # - # Minitest.autorun - # Minitest.run(args) - # Minitest.__run(reporter, options) - # Runnable.runnables.each - # runnable.run(reporter, options) - # self.runnable_methods.each - # self.run_one_method(self, runnable_method, reporter) - # Minitest.run_one_method(klass, runnable_method) - # klass.new(runnable_method).run - - def self.run args = [] - self.load_plugins unless args.delete("--no-plugins") || ENV["MT_NO_PLUGINS"] - - options = process_args args - - reporter = CompositeReporter.new - reporter << SummaryReporter.new(options[:io], options) - reporter << ProgressReporter.new(options[:io], options) - - self.reporter = reporter # this makes it available to plugins - self.init_plugins options - self.reporter = nil # runnables shouldn't depend on the reporter, ever - - self.parallel_executor.start if parallel_executor.respond_to?(:start) - reporter.start - begin - __run reporter, options - rescue Interrupt - warn "Interrupted. Exiting..." - end - self.parallel_executor.shutdown - reporter.report - - reporter.passed? - end - - ## - # Internal run method. Responsible for telling all Runnable - # sub-classes to run. - - def self.__run reporter, options - suites = Runnable.runnables.reject { |s| s.runnable_methods.empty? }.shuffle - parallel, serial = suites.partition { |s| s.test_order == :parallel } - - # If we run the parallel tests before the serial tests, the parallel tests - # could run in parallel with the serial tests. This would be bad because - # the serial tests won't lock around Reporter#record. Run the serial tests - # first, so that after they complete, the parallel tests will lock when - # recording results. - serial.map { |suite| suite.run reporter, options } + - parallel.map { |suite| suite.run reporter, options } - end - - def self.process_args args = [] # :nodoc: - options = { - :io => $stdout, - } - orig_args = args.dup - - OptionParser.new do |opts| - opts.banner = "minitest options:" - opts.version = Minitest::VERSION - - opts.on "-h", "--help", "Display this help." do - puts opts - exit - end - - opts.on "--no-plugins", "Bypass minitest plugin auto-loading (or set $MT_NO_PLUGINS)." - - desc = "Sets random seed. Also via env. Eg: SEED=n rake" - opts.on "-s", "--seed SEED", Integer, desc do |m| - options[:seed] = m.to_i - end - - opts.on "-v", "--verbose", "Verbose. Show progress processing files." do - options[:verbose] = true - end - - opts.on "-n", "--name PATTERN", "Filter run on /regexp/ or string." do |a| - options[:filter] = a - end - - opts.on "-e", "--exclude PATTERN", "Exclude /regexp/ or string from run." do |a| - options[:exclude] = a - end - - unless extensions.empty? - opts.separator "" - opts.separator "Known extensions: #{extensions.join(", ")}" - - extensions.each do |meth| - msg = "plugin_#{meth}_options" - send msg, opts, options if self.respond_to?(msg) - end - end - - begin - opts.parse! args - rescue OptionParser::InvalidOption => e - puts - puts e - puts - puts opts - exit 1 - end - - orig_args -= args - end - - unless options[:seed] then - srand - options[:seed] = (ENV["SEED"] || srand).to_i % 0xFFFF - orig_args << "--seed" << options[:seed].to_s - end - - srand options[:seed] - - options[:args] = orig_args.map { |s| - s =~ /[\s|&<>$()]/ ? s.inspect : s - }.join " " - - options - end - - def self.filter_backtrace bt # :nodoc: - backtrace_filter.filter bt - end - - ## - # Represents anything "runnable", like Test, Spec, Benchmark, or - # whatever you can dream up. - # - # Subclasses of this are automatically registered and available in - # Runnable.runnables. - - class Runnable - ## - # Number of assertions executed in this run. - - attr_accessor :assertions - - ## - # An assertion raised during the run, if any. - - attr_accessor :failures - - ## - # The time it took to run. - - attr_accessor :time - - def time_it # :nodoc: - t0 = Minitest.clock_time - - yield - ensure - self.time = Minitest.clock_time - t0 - end - - ## - # Name of the run. - - def name - @NAME - end - - ## - # Set the name of the run. - - def name= o - @NAME = o - end - - ## - # Returns all instance methods matching the pattern +re+. - - def self.methods_matching re - public_instance_methods(true).grep(re).map(&:to_s) - end - - def self.reset # :nodoc: - @@runnables = [] - end - - reset - - ## - # Responsible for running all runnable methods in a given class, - # each in its own instance. Each instance is passed to the - # reporter to record. - - def self.run reporter, options = {} - filter = options[:filter] || "/./" - filter = Regexp.new $1 if filter.is_a?(String) && filter =~ %r%/(.*)/% - - filtered_methods = self.runnable_methods.find_all { |m| - filter === m || filter === "#{self}##{m}" - } - - exclude = options[:exclude] - exclude = Regexp.new $1 if exclude =~ %r%/(.*)/% - - filtered_methods.delete_if { |m| - exclude === m || exclude === "#{self}##{m}" - } - - return if filtered_methods.empty? - - with_info_handler reporter do - filtered_methods.each do |method_name| - run_one_method self, method_name, reporter - end - end - end - - ## - # Runs a single method and has the reporter record the result. - # This was considered internal API but is factored out of run so - # that subclasses can specialize the running of an individual - # test. See Minitest::ParallelTest::ClassMethods for an example. - - def self.run_one_method klass, method_name, reporter - reporter.prerecord klass, method_name - reporter.record Minitest.run_one_method(klass, method_name) - end - - def self.with_info_handler reporter, &block # :nodoc: - handler = lambda do - unless reporter.passed? then - warn "Current results:" - warn "" - warn reporter.reporters.first - warn "" - end - end - - on_signal ::Minitest.info_signal, handler, &block - end - - SIGNALS = Signal.list # :nodoc: - - def self.on_signal name, action # :nodoc: - supported = SIGNALS[name] - - old_trap = trap name do - old_trap.call if old_trap.respond_to? :call - action.call - end if supported - - yield - ensure - trap name, old_trap if supported - end - - ## - # Each subclass of Runnable is responsible for overriding this - # method to return all runnable methods. See #methods_matching. - - def self.runnable_methods - raise NotImplementedError, "subclass responsibility" - end - - ## - # Returns all subclasses of Runnable. - - def self.runnables - @@runnables - end - - @@marshal_dump_warned = false - - def marshal_dump # :nodoc: - unless @@marshal_dump_warned then - warn ["Minitest::Runnable#marshal_dump is deprecated.", - "You might be violating internals. From", caller.first].join " " - @@marshal_dump_warned = true - end - - [self.name, self.failures, self.assertions, self.time] - end - - def marshal_load ary # :nodoc: - self.name, self.failures, self.assertions, self.time = ary - end - - def failure # :nodoc: - self.failures.first - end - - def initialize name # :nodoc: - self.name = name - self.failures = [] - self.assertions = 0 - end - - ## - # Runs a single method. Needs to return self. - - def run - raise NotImplementedError, "subclass responsibility" - end - - ## - # Did this run pass? - # - # Note: skipped runs are not considered passing, but they don't - # cause the process to exit non-zero. - - def passed? - raise NotImplementedError, "subclass responsibility" - end - - ## - # Returns a single character string to print based on the result - # of the run. One of ".", "F", - # "E" or "S". - - def result_code - raise NotImplementedError, "subclass responsibility" - end - - ## - # Was this run skipped? See #passed? for more information. - - def skipped? - raise NotImplementedError, "subclass responsibility" - end - end - - ## - # Shared code for anything that can get passed to a Reporter. See - # Minitest::Test & Minitest::Result. - - module Reportable - ## - # Did this run pass? - # - # Note: skipped runs are not considered passing, but they don't - # cause the process to exit non-zero. - - def passed? - not self.failure - end - - ## - # The location identifier of this test. Depends on a method - # existing called class_name. - - def location - loc = " [#{self.failure.location}]" unless passed? or error? - "#{self.class_name}##{self.name}#{loc}" - end - - def class_name # :nodoc: - raise NotImplementedError, "subclass responsibility" - end - - ## - # Returns ".", "F", or "E" based on the result of the run. - - def result_code - self.failure and self.failure.result_code or "." - end - - ## - # Was this run skipped? - - def skipped? - self.failure and Skip === self.failure - end - - ## - # Did this run error? - - def error? - self.failures.any? { |f| UnexpectedError === f } - end - end - - ## - # This represents a test result in a clean way that can be - # marshalled over a wire. Tests can do anything they want to the - # test instance and can create conditions that cause Marshal.dump to - # blow up. By using Result.from(a_test) you can be reasonably sure - # that the test result can be marshalled. - - class Result < Runnable - include Minitest::Reportable - - undef_method :marshal_dump - undef_method :marshal_load - - ## - # The class name of the test result. - - attr_accessor :klass - - ## - # The location of the test method. - - attr_accessor :source_location - - ## - # Create a new test result from a Runnable instance. - - def self.from runnable - o = runnable - - r = self.new o.name - r.klass = o.class.name - r.assertions = o.assertions - r.failures = o.failures.dup - r.time = o.time - - r.source_location = o.method(o.name).source_location rescue ["unknown", -1] - - r - end - - def class_name # :nodoc: - self.klass # for Minitest::Reportable - end - - def to_s # :nodoc: - return location if passed? and not skipped? - - failures.map { |failure| - "#{failure.result_label}:\n#{self.location}:\n#{failure.message}\n" - }.join "\n" - end - end - - ## - # Defines the API for Reporters. Subclass this and override whatever - # you want. Go nuts. - - class AbstractReporter - include Mutex_m - - ## - # Starts reporting on the run. - - def start - end - - ## - # About to start running a test. This allows a reporter to show - # that it is starting or that we are in the middle of a test run. - - def prerecord klass, name - end - - ## - # Output and record the result of the test. Call - # {result#result_code}[rdoc-ref:Runnable#result_code] to get the - # result character string. Stores the result of the run if the run - # did not pass. - - def record result - end - - ## - # Outputs the summary of the run. - - def report - end - - ## - # Did this run pass? - - def passed? - true - end - end - - class Reporter < AbstractReporter # :nodoc: - ## - # The IO used to report. - - attr_accessor :io - - ## - # Command-line options for this run. - - attr_accessor :options - - def initialize io = $stdout, options = {} # :nodoc: - super() - self.io = io - self.options = options - end - end - - ## - # A very simple reporter that prints the "dots" during the run. - # - # This is added to the top-level CompositeReporter at the start of - # the run. If you want to change the output of minitest via a - # plugin, pull this out of the composite and replace it with your - # own. - - class ProgressReporter < Reporter - def prerecord klass, name #:nodoc: - if options[:verbose] then - io.print "%s#%s = " % [klass.name, name] - io.flush - end - end - - def record result # :nodoc: - io.print "%.2f s = " % [result.time] if options[:verbose] - io.print result.result_code - io.puts if options[:verbose] - end - end - - ## - # A reporter that gathers statistics about a test run. Does not do - # any IO because meant to be used as a parent class for a reporter - # that does. - # - # If you want to create an entirely different type of output (eg, - # CI, HTML, etc), this is the place to start. - # - # Example: - # - # class JenkinsCIReporter < StatisticsReporter - # def report - # super # Needed to calculate some statistics - # - # print " 30 characters. - # 3. or: Strings are equal to each other (but maybe different encodings?). - # 4. and: we found a diff executable. - - def things_to_diff exp, act - expect = mu_pp_for_diff exp - butwas = mu_pp_for_diff act - - e1, e2 = expect.include?("\n"), expect.include?("\\n") - b1, b2 = butwas.include?("\n"), butwas.include?("\\n") - - need_to_diff = - (e1 ^ e2 || - b1 ^ b2 || - expect.size > 30 || - butwas.size > 30 || - expect == butwas) && - Minitest::Assertions.diff - - need_to_diff && [expect, butwas] - end - - ## - # This returns a human-readable version of +obj+. By default - # #inspect is called. You can override this to use #pretty_inspect - # if you want. - # - # See Minitest::Test.make_my_diffs_pretty! - - def mu_pp obj - s = obj.inspect - - if defined? Encoding then - s = s.encode Encoding.default_external - - if String === obj && (obj.encoding != Encoding.default_external || - !obj.valid_encoding?) then - enc = "# encoding: #{obj.encoding}" - val = "# valid: #{obj.valid_encoding?}" - s = "#{enc}\n#{val}\n#{s}" - end - end - - s - end - - ## - # This returns a diff-able more human-readable version of +obj+. - # This differs from the regular mu_pp because it expands escaped - # newlines and makes hex-values (like object_ids) generic. This - # uses mu_pp to do the first pass and then cleans it up. - - def mu_pp_for_diff obj - str = mu_pp obj - - # both '\n' & '\\n' (_after_ mu_pp (aka inspect)) - single = !!str.match(/(?exp == act printing the difference between - # the two, if possible. - # - # If there is no visible difference but the assertion fails, you - # should suspect that your #== is buggy, or your inspect output is - # missing crucial details. For nicer structural diffing, set - # Minitest::Test.make_my_diffs_pretty! - # - # For floats use assert_in_delta. - # - # See also: Minitest::Assertions.diff - - def assert_equal exp, act, msg = nil - msg = message(msg, E) { diff exp, act } - result = assert exp == act, msg - - if nil == exp then - if Minitest::VERSION =~ /^6/ then - refute_nil exp, "Use assert_nil if expecting nil." - else - where = Minitest.filter_backtrace(caller).first - where = where.split(/:in /, 2).first # clean up noise - - warn "DEPRECATED: Use assert_nil if expecting nil from #{where}. This will fail in Minitest 6." - end - end - - result - end - - ## - # For comparing Floats. Fails unless +exp+ and +act+ are within +delta+ - # of each other. - # - # assert_in_delta Math::PI, (22.0 / 7.0), 0.01 - - def assert_in_delta exp, act, delta = 0.001, msg = nil - n = (exp - act).abs - msg = message(msg) { - "Expected |#{exp} - #{act}| (#{n}) to be <= #{delta}" - } - assert delta >= n, msg - end - - ## - # For comparing Floats. Fails unless +exp+ and +act+ have a relative - # error less than +epsilon+. - - def assert_in_epsilon exp, act, epsilon = 0.001, msg = nil - assert_in_delta exp, act, [exp.abs, act.abs].min * epsilon, msg - end - - ## - # Fails unless +collection+ includes +obj+. - - def assert_includes collection, obj, msg = nil - msg = message(msg) { - "Expected #{mu_pp(collection)} to include #{mu_pp(obj)}" - } - assert_respond_to collection, :include? - assert collection.include?(obj), msg - end - - ## - # Fails unless +obj+ is an instance of +cls+. - - def assert_instance_of cls, obj, msg = nil - msg = message(msg) { - "Expected #{mu_pp(obj)} to be an instance of #{cls}, not #{obj.class}" - } - - assert obj.instance_of?(cls), msg - end - - ## - # Fails unless +obj+ is a kind of +cls+. - - def assert_kind_of cls, obj, msg = nil - msg = message(msg) { - "Expected #{mu_pp(obj)} to be a kind of #{cls}, not #{obj.class}" } - - assert obj.kind_of?(cls), msg - end - - ## - # Fails unless +matcher+ =~ +obj+. - - def assert_match matcher, obj, msg = nil - msg = message(msg) { "Expected #{mu_pp matcher} to match #{mu_pp obj}" } - assert_respond_to matcher, :"=~" - matcher = Regexp.new Regexp.escape matcher if String === matcher - assert matcher =~ obj, msg - end - - ## - # Fails unless +obj+ is nil - - def assert_nil obj, msg = nil - msg = message(msg) { "Expected #{mu_pp(obj)} to be nil" } - assert obj.nil?, msg - end - - ## - # For testing with binary operators. Eg: - # - # assert_operator 5, :<=, 4 - - def assert_operator o1, op, o2 = UNDEFINED, msg = nil - return assert_predicate o1, op, msg if UNDEFINED == o2 - msg = message(msg) { "Expected #{mu_pp(o1)} to be #{op} #{mu_pp(o2)}" } - assert o1.__send__(op, o2), msg - end - - ## - # Fails if stdout or stderr do not output the expected results. - # Pass in nil if you don't care about that streams output. Pass in - # "" if you require it to be silent. Pass in a regexp if you want - # to pattern match. - # - # assert_output(/hey/) { method_with_output } - # - # NOTE: this uses #capture_io, not #capture_subprocess_io. - # - # See also: #assert_silent - - def assert_output stdout = nil, stderr = nil - flunk "assert_output requires a block to capture output." unless - block_given? - - out, err = capture_io do - yield - end - - err_msg = Regexp === stderr ? :assert_match : :assert_equal if stderr - out_msg = Regexp === stdout ? :assert_match : :assert_equal if stdout - - y = send err_msg, stderr, err, "In stderr" if err_msg - x = send out_msg, stdout, out, "In stdout" if out_msg - - (!stdout || x) && (!stderr || y) - end - - ## - # Fails unless +path+ exists. - - def assert_path_exists path, msg = nil - msg = message(msg) { "Expected path '#{path}' to exist" } - assert File.exist?(path), msg - end - - ## - # For testing with predicates. Eg: - # - # assert_predicate str, :empty? - # - # This is really meant for specs and is front-ended by assert_operator: - # - # str.must_be :empty? - - def assert_predicate o1, op, msg = nil - msg = message(msg) { "Expected #{mu_pp(o1)} to be #{op}" } - assert o1.__send__(op), msg - end - - ## - # Fails unless the block raises one of +exp+. Returns the - # exception matched so you can check the message, attributes, etc. - # - # +exp+ takes an optional message on the end to help explain - # failures and defaults to StandardError if no exception class is - # passed. Eg: - # - # assert_raises(CustomError) { method_with_custom_error } - # - # With custom error message: - # - # assert_raises(CustomError, 'This should have raised CustomError') { method_with_custom_error } - # - # Using the returned object: - # - # error = assert_raises(CustomError) do - # raise CustomError, 'This is really bad' - # end - # - # assert_equal 'This is really bad', error.message - - def assert_raises *exp - flunk "assert_raises requires a block to capture errors." unless - block_given? - - msg = "#{exp.pop}.\n" if String === exp.last - exp << StandardError if exp.empty? - - begin - yield - rescue *exp => e - pass # count assertion - return e - rescue Minitest::Skip, Minitest::Assertion - # don't count assertion - raise - rescue SignalException, SystemExit - raise - rescue Exception => e - flunk proc { - exception_details(e, "#{msg}#{mu_pp(exp)} exception expected, not") - } - end - - exp = exp.first if exp.size == 1 - - flunk "#{msg}#{mu_pp(exp)} expected but nothing was raised." - end - - ## - # Fails unless +obj+ responds to +meth+. - - def assert_respond_to obj, meth, msg = nil - msg = message(msg) { - "Expected #{mu_pp(obj)} (#{obj.class}) to respond to ##{meth}" - } - assert obj.respond_to?(meth), msg - end - - ## - # Fails unless +exp+ and +act+ are #equal? - - def assert_same exp, act, msg = nil - msg = message(msg) { - data = [mu_pp(act), act.object_id, mu_pp(exp), exp.object_id] - "Expected %s (oid=%d) to be the same as %s (oid=%d)" % data - } - assert exp.equal?(act), msg - end - - ## - # +send_ary+ is a receiver, message and arguments. - # - # Fails unless the call returns a true value - - def assert_send send_ary, m = nil - where = Minitest.filter_backtrace(caller).first - where = where.split(/:in /, 2).first # clean up noise - warn "DEPRECATED: assert_send. From #{where}" - - recv, msg, *args = send_ary - m = message(m) { - "Expected #{mu_pp(recv)}.#{msg}(*#{mu_pp(args)}) to return true" } - assert recv.__send__(msg, *args), m - end - - ## - # Fails if the block outputs anything to stderr or stdout. - # - # See also: #assert_output - - def assert_silent - assert_output "", "" do - yield - end - end - - ## - # Fails unless the block throws +sym+ - - def assert_throws sym, msg = nil - default = "Expected #{mu_pp(sym)} to have been thrown" - caught = true - catch(sym) do - begin - yield - rescue ThreadError => e # wtf?!? 1.8 + threads == suck - default += ", not \:#{e.message[/uncaught throw \`(\w+?)\'/, 1]}" - rescue ArgumentError => e # 1.9 exception - raise e unless e.message.include?("uncaught throw") - default += ", not #{e.message.split(/ /).last}" - rescue NameError => e # 1.8 exception - raise e unless e.name == sym - default += ", not #{e.name.inspect}" - end - caught = false - end - - assert caught, message(msg) { default } - end - - ## - # Captures $stdout and $stderr into strings: - # - # out, err = capture_io do - # puts "Some info" - # warn "You did a bad thing" - # end - # - # assert_match %r%info%, out - # assert_match %r%bad%, err - # - # NOTE: For efficiency, this method uses StringIO and does not - # capture IO for subprocesses. Use #capture_subprocess_io for - # that. - - def capture_io - _synchronize do - begin - captured_stdout, captured_stderr = StringIO.new, StringIO.new - - orig_stdout, orig_stderr = $stdout, $stderr - $stdout, $stderr = captured_stdout, captured_stderr - - yield - - return captured_stdout.string, captured_stderr.string - ensure - $stdout = orig_stdout - $stderr = orig_stderr - end - end - end - - ## - # Captures $stdout and $stderr into strings, using Tempfile to - # ensure that subprocess IO is captured as well. - # - # out, err = capture_subprocess_io do - # system "echo Some info" - # system "echo You did a bad thing 1>&2" - # end - # - # assert_match %r%info%, out - # assert_match %r%bad%, err - # - # NOTE: This method is approximately 10x slower than #capture_io so - # only use it when you need to test the output of a subprocess. - - def capture_subprocess_io - _synchronize do - begin - require "tempfile" - - captured_stdout, captured_stderr = Tempfile.new("out"), Tempfile.new("err") - - orig_stdout, orig_stderr = $stdout.dup, $stderr.dup - $stdout.reopen captured_stdout - $stderr.reopen captured_stderr - - yield - - $stdout.rewind - $stderr.rewind - - return captured_stdout.read, captured_stderr.read - ensure - captured_stdout.unlink - captured_stderr.unlink - $stdout.reopen orig_stdout - $stderr.reopen orig_stderr - end - end - end - - ## - # Returns details for exception +e+ - - def exception_details e, msg - [ - "#{msg}", - "Class: <#{e.class}>", - "Message: <#{e.message.inspect}>", - "---Backtrace---", - "#{Minitest.filter_backtrace(e.backtrace).join("\n")}", - "---------------", - ].join "\n" - end - - ## - # Fails after a given date (in the local time zone). This allows - # you to put time-bombs in your tests if you need to keep - # something around until a later date lest you forget about it. - - def fail_after y,m,d,msg - flunk msg if Time.now > Time.local(y, m, d) - end - - ## - # Fails with +msg+. - - def flunk msg = nil - msg ||= "Epic Fail!" - assert false, msg - end - - ## - # Returns a proc that will output +msg+ along with the default message. - - def message msg = nil, ending = nil, &default - proc { - msg = msg.call.chomp(".") if Proc === msg - custom_message = "#{msg}.\n" unless msg.nil? or msg.to_s.empty? - "#{custom_message}#{default.call}#{ending || "."}" - } - end - - ## - # used for counting assertions - - def pass _msg = nil - assert true - end - - ## - # Fails if +test+ is truthy. - - def refute test, msg = nil - msg ||= message { "Expected #{mu_pp(test)} to not be truthy" } - not assert !test, msg - end - - ## - # Fails if +obj+ is empty. - - def refute_empty obj, msg = nil - msg = message(msg) { "Expected #{mu_pp(obj)} to not be empty" } - assert_respond_to obj, :empty? - refute obj.empty?, msg - end - - ## - # Fails if exp == act. - # - # For floats use refute_in_delta. - - def refute_equal exp, act, msg = nil - msg = message(msg) { - "Expected #{mu_pp(act)} to not be equal to #{mu_pp(exp)}" - } - refute exp == act, msg - end - - ## - # For comparing Floats. Fails if +exp+ is within +delta+ of +act+. - # - # refute_in_delta Math::PI, (22.0 / 7.0) - - def refute_in_delta exp, act, delta = 0.001, msg = nil - n = (exp - act).abs - msg = message(msg) { - "Expected |#{exp} - #{act}| (#{n}) to not be <= #{delta}" - } - refute delta >= n, msg - end - - ## - # For comparing Floats. Fails if +exp+ and +act+ have a relative error - # less than +epsilon+. - - def refute_in_epsilon a, b, epsilon = 0.001, msg = nil - refute_in_delta a, b, a * epsilon, msg - end - - ## - # Fails if +collection+ includes +obj+. - - def refute_includes collection, obj, msg = nil - msg = message(msg) { - "Expected #{mu_pp(collection)} to not include #{mu_pp(obj)}" - } - assert_respond_to collection, :include? - refute collection.include?(obj), msg - end - - ## - # Fails if +obj+ is an instance of +cls+. - - def refute_instance_of cls, obj, msg = nil - msg = message(msg) { - "Expected #{mu_pp(obj)} to not be an instance of #{cls}" - } - refute obj.instance_of?(cls), msg - end - - ## - # Fails if +obj+ is a kind of +cls+. - - def refute_kind_of cls, obj, msg = nil - msg = message(msg) { "Expected #{mu_pp(obj)} to not be a kind of #{cls}" } - refute obj.kind_of?(cls), msg - end - - ## - # Fails if +matcher+ =~ +obj+. - - def refute_match matcher, obj, msg = nil - msg = message(msg) { "Expected #{mu_pp matcher} to not match #{mu_pp obj}" } - assert_respond_to matcher, :"=~" - matcher = Regexp.new Regexp.escape matcher if String === matcher - refute matcher =~ obj, msg - end - - ## - # Fails if +obj+ is nil. - - def refute_nil obj, msg = nil - msg = message(msg) { "Expected #{mu_pp(obj)} to not be nil" } - refute obj.nil?, msg - end - - ## - # Fails if +o1+ is not +op+ +o2+. Eg: - # - # refute_operator 1, :>, 2 #=> pass - # refute_operator 1, :<, 2 #=> fail - - def refute_operator o1, op, o2 = UNDEFINED, msg = nil - return refute_predicate o1, op, msg if UNDEFINED == o2 - msg = message(msg) { "Expected #{mu_pp(o1)} to not be #{op} #{mu_pp(o2)}" } - refute o1.__send__(op, o2), msg - end - - ## - # Fails if +path+ exists. - - def refute_path_exists path, msg = nil - msg = message(msg) { "Expected path '#{path}' to not exist" } - refute File.exist?(path), msg - end - - ## - # For testing with predicates. - # - # refute_predicate str, :empty? - # - # This is really meant for specs and is front-ended by refute_operator: - # - # str.wont_be :empty? - - def refute_predicate o1, op, msg = nil - msg = message(msg) { "Expected #{mu_pp(o1)} to not be #{op}" } - refute o1.__send__(op), msg - end - - ## - # Fails if +obj+ responds to the message +meth+. - - def refute_respond_to obj, meth, msg = nil - msg = message(msg) { "Expected #{mu_pp(obj)} to not respond to #{meth}" } - - refute obj.respond_to?(meth), msg - end - - ## - # Fails if +exp+ is the same (by object identity) as +act+. - - def refute_same exp, act, msg = nil - msg = message(msg) { - data = [mu_pp(act), act.object_id, mu_pp(exp), exp.object_id] - "Expected %s (oid=%d) to not be the same as %s (oid=%d)" % data - } - refute exp.equal?(act), msg - end - - ## - # Skips the current run. If run in verbose-mode, the skipped run - # gets listed at the end of the run but doesn't cause a failure - # exit code. - - def skip msg = nil, bt = caller - msg ||= "Skipped, no message given" - @skip = true - raise Minitest::Skip, msg, bt - end - - ## - # Skips the current run until a given date (in the local time - # zone). This allows you to put some fixes on hold until a later - # date, but still holds you accountable and prevents you from - # forgetting it. - - def skip_until y,m,d,msg - skip msg if Time.now < Time.local(y, m, d) - where = caller.first.split(/:/, 3).first(2).join ":" - warn "Stale skip_until %p at %s" % [msg, where] - end - - ## - # Was this testcase skipped? Meant for #teardown. - - def skipped? - defined?(@skip) and @skip - end - end -end diff --git a/ruby/gems/minitest-5.13.0/lib/minitest/autorun.rb b/ruby/gems/minitest-5.13.0/lib/minitest/autorun.rb deleted file mode 100644 index 9409b04b2..000000000 --- a/ruby/gems/minitest-5.13.0/lib/minitest/autorun.rb +++ /dev/null @@ -1,13 +0,0 @@ -begin - require "rubygems" - gem "minitest" -rescue Gem::LoadError - # do nothing -end - -require "minitest" -require "minitest/spec" -require "minitest/mock" -require "minitest/hell" if ENV["MT_HELL"] - -Minitest.autorun diff --git a/ruby/gems/minitest-5.13.0/lib/minitest/benchmark.rb b/ruby/gems/minitest-5.13.0/lib/minitest/benchmark.rb deleted file mode 100644 index f2b2465eb..000000000 --- a/ruby/gems/minitest-5.13.0/lib/minitest/benchmark.rb +++ /dev/null @@ -1,455 +0,0 @@ -require "minitest/test" -require "minitest/spec" - -module Minitest - ## - # Subclass Benchmark to create your own benchmark runs. Methods - # starting with "bench_" get executed on a per-class. - # - # See Minitest::Assertions - - class Benchmark < Test - def self.io # :nodoc: - @io - end - - def io # :nodoc: - self.class.io - end - - def self.run reporter, options = {} # :nodoc: - @io = reporter.io - super - end - - def self.runnable_methods # :nodoc: - methods_matching(/^bench_/) - end - - ## - # Returns a set of ranges stepped exponentially from +min+ to - # +max+ by powers of +base+. Eg: - # - # bench_exp(2, 16, 2) # => [2, 4, 8, 16] - - def self.bench_exp min, max, base = 10 - min = (Math.log10(min) / Math.log10(base)).to_i - max = (Math.log10(max) / Math.log10(base)).to_i - - (min..max).map { |m| base ** m }.to_a - end - - ## - # Returns a set of ranges stepped linearly from +min+ to +max+ by - # +step+. Eg: - # - # bench_linear(20, 40, 10) # => [20, 30, 40] - - def self.bench_linear min, max, step = 10 - (min..max).step(step).to_a - rescue LocalJumpError # 1.8.6 - r = []; (min..max).step(step) { |n| r << n }; r - end - - ## - # Specifies the ranges used for benchmarking for that class. - # Defaults to exponential growth from 1 to 10k by powers of 10. - # Override if you need different ranges for your benchmarks. - # - # See also: ::bench_exp and ::bench_linear. - - def self.bench_range - bench_exp 1, 10_000 - end - - ## - # Runs the given +work+, gathering the times of each run. Range - # and times are then passed to a given +validation+ proc. Outputs - # the benchmark name and times in tab-separated format, making it - # easy to paste into a spreadsheet for graphing or further - # analysis. - # - # Ranges are specified by ::bench_range. - # - # Eg: - # - # def bench_algorithm - # validation = proc { |x, y| ... } - # assert_performance validation do |n| - # @obj.algorithm(n) - # end - # end - - def assert_performance validation, &work - range = self.class.bench_range - - io.print "#{self.name}" - - times = [] - - range.each do |x| - GC.start - t0 = Minitest.clock_time - instance_exec(x, &work) - t = Minitest.clock_time - t0 - - io.print "\t%9.6f" % t - times << t - end - io.puts - - validation[range, times] - end - - ## - # Runs the given +work+ and asserts that the times gathered fit to - # match a constant rate (eg, linear slope == 0) within a given - # +threshold+. Note: because we're testing for a slope of 0, R^2 - # is not a good determining factor for the fit, so the threshold - # is applied against the slope itself. As such, you probably want - # to tighten it from the default. - # - # See https://www.graphpad.com/guides/prism/8/curve-fitting/reg_intepretingnonlinr2.htm - # for more details. - # - # Fit is calculated by #fit_linear. - # - # Ranges are specified by ::bench_range. - # - # Eg: - # - # def bench_algorithm - # assert_performance_constant 0.9999 do |n| - # @obj.algorithm(n) - # end - # end - - def assert_performance_constant threshold = 0.99, &work - validation = proc do |range, times| - a, b, rr = fit_linear range, times - assert_in_delta 0, b, 1 - threshold - [a, b, rr] - end - - assert_performance validation, &work - end - - ## - # Runs the given +work+ and asserts that the times gathered fit to - # match a exponential curve within a given error +threshold+. - # - # Fit is calculated by #fit_exponential. - # - # Ranges are specified by ::bench_range. - # - # Eg: - # - # def bench_algorithm - # assert_performance_exponential 0.9999 do |n| - # @obj.algorithm(n) - # end - # end - - def assert_performance_exponential threshold = 0.99, &work - assert_performance validation_for_fit(:exponential, threshold), &work - end - - ## - # Runs the given +work+ and asserts that the times gathered fit to - # match a logarithmic curve within a given error +threshold+. - # - # Fit is calculated by #fit_logarithmic. - # - # Ranges are specified by ::bench_range. - # - # Eg: - # - # def bench_algorithm - # assert_performance_logarithmic 0.9999 do |n| - # @obj.algorithm(n) - # end - # end - - def assert_performance_logarithmic threshold = 0.99, &work - assert_performance validation_for_fit(:logarithmic, threshold), &work - end - - ## - # Runs the given +work+ and asserts that the times gathered fit to - # match a straight line within a given error +threshold+. - # - # Fit is calculated by #fit_linear. - # - # Ranges are specified by ::bench_range. - # - # Eg: - # - # def bench_algorithm - # assert_performance_linear 0.9999 do |n| - # @obj.algorithm(n) - # end - # end - - def assert_performance_linear threshold = 0.99, &work - assert_performance validation_for_fit(:linear, threshold), &work - end - - ## - # Runs the given +work+ and asserts that the times gathered curve - # fit to match a power curve within a given error +threshold+. - # - # Fit is calculated by #fit_power. - # - # Ranges are specified by ::bench_range. - # - # Eg: - # - # def bench_algorithm - # assert_performance_power 0.9999 do |x| - # @obj.algorithm - # end - # end - - def assert_performance_power threshold = 0.99, &work - assert_performance validation_for_fit(:power, threshold), &work - end - - ## - # Takes an array of x/y pairs and calculates the general R^2 value. - # - # See: http://en.wikipedia.org/wiki/Coefficient_of_determination - - def fit_error xys - y_bar = sigma(xys) { |_, y| y } / xys.size.to_f - ss_tot = sigma(xys) { |_, y| (y - y_bar) ** 2 } - ss_err = sigma(xys) { |x, y| (yield(x) - y) ** 2 } - - 1 - (ss_err / ss_tot) - end - - ## - # To fit a functional form: y = ae^(bx). - # - # Takes x and y values and returns [a, b, r^2]. - # - # See: http://mathworld.wolfram.com/LeastSquaresFittingExponential.html - - def fit_exponential xs, ys - n = xs.size - xys = xs.zip(ys) - sxlny = sigma(xys) { |x, y| x * Math.log(y) } - slny = sigma(xys) { |_, y| Math.log(y) } - sx2 = sigma(xys) { |x, _| x * x } - sx = sigma xs - - c = n * sx2 - sx ** 2 - a = (slny * sx2 - sx * sxlny) / c - b = ( n * sxlny - sx * slny ) / c - - return Math.exp(a), b, fit_error(xys) { |x| Math.exp(a + b * x) } - end - - ## - # To fit a functional form: y = a + b*ln(x). - # - # Takes x and y values and returns [a, b, r^2]. - # - # See: http://mathworld.wolfram.com/LeastSquaresFittingLogarithmic.html - - def fit_logarithmic xs, ys - n = xs.size - xys = xs.zip(ys) - slnx2 = sigma(xys) { |x, _| Math.log(x) ** 2 } - slnx = sigma(xys) { |x, _| Math.log(x) } - sylnx = sigma(xys) { |x, y| y * Math.log(x) } - sy = sigma(xys) { |_, y| y } - - c = n * slnx2 - slnx ** 2 - b = ( n * sylnx - sy * slnx ) / c - a = (sy - b * slnx) / n - - return a, b, fit_error(xys) { |x| a + b * Math.log(x) } - end - - ## - # Fits the functional form: a + bx. - # - # Takes x and y values and returns [a, b, r^2]. - # - # See: http://mathworld.wolfram.com/LeastSquaresFitting.html - - def fit_linear xs, ys - n = xs.size - xys = xs.zip(ys) - sx = sigma xs - sy = sigma ys - sx2 = sigma(xs) { |x| x ** 2 } - sxy = sigma(xys) { |x, y| x * y } - - c = n * sx2 - sx**2 - a = (sy * sx2 - sx * sxy) / c - b = ( n * sxy - sx * sy ) / c - - return a, b, fit_error(xys) { |x| a + b * x } - end - - ## - # To fit a functional form: y = ax^b. - # - # Takes x and y values and returns [a, b, r^2]. - # - # See: http://mathworld.wolfram.com/LeastSquaresFittingPowerLaw.html - - def fit_power xs, ys - n = xs.size - xys = xs.zip(ys) - slnxlny = sigma(xys) { |x, y| Math.log(x) * Math.log(y) } - slnx = sigma(xs) { |x | Math.log(x) } - slny = sigma(ys) { | y| Math.log(y) } - slnx2 = sigma(xs) { |x | Math.log(x) ** 2 } - - b = (n * slnxlny - slnx * slny) / (n * slnx2 - slnx ** 2) - a = (slny - b * slnx) / n - - return Math.exp(a), b, fit_error(xys) { |x| (Math.exp(a) * (x ** b)) } - end - - ## - # Enumerates over +enum+ mapping +block+ if given, returning the - # sum of the result. Eg: - # - # sigma([1, 2, 3]) # => 1 + 2 + 3 => 6 - # sigma([1, 2, 3]) { |n| n ** 2 } # => 1 + 4 + 9 => 14 - - def sigma enum, &block - enum = enum.map(&block) if block - enum.inject { |sum, n| sum + n } - end - - ## - # Returns a proc that calls the specified fit method and asserts - # that the error is within a tolerable threshold. - - def validation_for_fit msg, threshold - proc do |range, times| - a, b, rr = send "fit_#{msg}", range, times - assert_operator rr, :>=, threshold - [a, b, rr] - end - end - end -end - -module Minitest - ## - # The spec version of Minitest::Benchmark. - - class BenchSpec < Benchmark - extend Minitest::Spec::DSL - - ## - # This is used to define a new benchmark method. You usually don't - # use this directly and is intended for those needing to write new - # performance curve fits (eg: you need a specific polynomial fit). - # - # See ::bench_performance_linear for an example of how to use this. - - def self.bench name, &block - define_method "bench_#{name.gsub(/\W+/, "_")}", &block - end - - ## - # Specifies the ranges used for benchmarking for that class. - # - # bench_range do - # bench_exp(2, 16, 2) - # end - # - # See Minitest::Benchmark#bench_range for more details. - - def self.bench_range &block - return super unless block - - meta = (class << self; self; end) - meta.send :define_method, "bench_range", &block - end - - ## - # Create a benchmark that verifies that the performance is linear. - # - # describe "my class Bench" do - # bench_performance_linear "fast_algorithm", 0.9999 do |n| - # @obj.fast_algorithm(n) - # end - # end - - def self.bench_performance_linear name, threshold = 0.99, &work - bench name do - assert_performance_linear threshold, &work - end - end - - ## - # Create a benchmark that verifies that the performance is constant. - # - # describe "my class Bench" do - # bench_performance_constant "zoom_algorithm!" do |n| - # @obj.zoom_algorithm!(n) - # end - # end - - def self.bench_performance_constant name, threshold = 0.99, &work - bench name do - assert_performance_constant threshold, &work - end - end - - ## - # Create a benchmark that verifies that the performance is exponential. - # - # describe "my class Bench" do - # bench_performance_exponential "algorithm" do |n| - # @obj.algorithm(n) - # end - # end - - def self.bench_performance_exponential name, threshold = 0.99, &work - bench name do - assert_performance_exponential threshold, &work - end - end - - - ## - # Create a benchmark that verifies that the performance is logarithmic. - # - # describe "my class Bench" do - # bench_performance_logarithmic "algorithm" do |n| - # @obj.algorithm(n) - # end - # end - - def self.bench_performance_logarithmic name, threshold = 0.99, &work - bench name do - assert_performance_logarithmic threshold, &work - end - end - - ## - # Create a benchmark that verifies that the performance is power. - # - # describe "my class Bench" do - # bench_performance_power "algorithm" do |n| - # @obj.algorithm(n) - # end - # end - - def self.bench_performance_power name, threshold = 0.99, &work - bench name do - assert_performance_power threshold, &work - end - end - end - - Minitest::Spec.register_spec_type(/Bench(mark)?$/, Minitest::BenchSpec) -end diff --git a/ruby/gems/minitest-5.13.0/lib/minitest/expectations.rb b/ruby/gems/minitest-5.13.0/lib/minitest/expectations.rb deleted file mode 100644 index ede40ee81..000000000 --- a/ruby/gems/minitest-5.13.0/lib/minitest/expectations.rb +++ /dev/null @@ -1,302 +0,0 @@ -## -# It's where you hide your "assertions". -# -# Please note, because of the way that expectations are implemented, -# all expectations (eg must_equal) are dependent upon a thread local -# variable +:current_spec+. If your specs rely on mixing threads into -# the specs themselves, you're better off using assertions or the new -# _(value) wrapper. For example: -# -# it "should still work in threads" do -# my_threaded_thingy do -# (1+1).must_equal 2 # bad -# assert_equal 2, 1+1 # good -# _(1 + 1).must_equal 2 # good -# value(1 + 1).must_equal 2 # good, also #expect -# end -# end - -module Minitest::Expectations - - ## - # See Minitest::Assertions#assert_empty. - # - # collection.must_be_empty - # - # :method: must_be_empty - - infect_an_assertion :assert_empty, :must_be_empty, :unary - - ## - # See Minitest::Assertions#assert_equal - # - # a.must_equal b - # - # :method: must_equal - - infect_an_assertion :assert_equal, :must_equal - - ## - # See Minitest::Assertions#assert_in_delta - # - # n.must_be_close_to m [, delta] - # - # :method: must_be_close_to - - infect_an_assertion :assert_in_delta, :must_be_close_to - - alias :must_be_within_delta :must_be_close_to # :nodoc: - - ## - # See Minitest::Assertions#assert_in_epsilon - # - # n.must_be_within_epsilon m [, epsilon] - # - # :method: must_be_within_epsilon - - infect_an_assertion :assert_in_epsilon, :must_be_within_epsilon - - ## - # See Minitest::Assertions#assert_includes - # - # collection.must_include obj - # - # :method: must_include - - infect_an_assertion :assert_includes, :must_include, :reverse - - ## - # See Minitest::Assertions#assert_instance_of - # - # obj.must_be_instance_of klass - # - # :method: must_be_instance_of - - infect_an_assertion :assert_instance_of, :must_be_instance_of - - ## - # See Minitest::Assertions#assert_kind_of - # - # obj.must_be_kind_of mod - # - # :method: must_be_kind_of - - infect_an_assertion :assert_kind_of, :must_be_kind_of - - ## - # See Minitest::Assertions#assert_match - # - # a.must_match b - # - # :method: must_match - - infect_an_assertion :assert_match, :must_match - - ## - # See Minitest::Assertions#assert_nil - # - # obj.must_be_nil - # - # :method: must_be_nil - - infect_an_assertion :assert_nil, :must_be_nil, :unary - - ## - # See Minitest::Assertions#assert_operator - # - # n.must_be :<=, 42 - # - # This can also do predicates: - # - # str.must_be :empty? - # - # :method: must_be - - infect_an_assertion :assert_operator, :must_be, :reverse - - ## - # See Minitest::Assertions#assert_output - # - # proc { ... }.must_output out_or_nil [, err] - # - # :method: must_output - - infect_an_assertion :assert_output, :must_output, :block - - ## - # See Minitest::Assertions#assert_raises - # - # proc { ... }.must_raise exception - # - # :method: must_raise - - infect_an_assertion :assert_raises, :must_raise, :block - - ## - # See Minitest::Assertions#assert_respond_to - # - # obj.must_respond_to msg - # - # :method: must_respond_to - - infect_an_assertion :assert_respond_to, :must_respond_to, :reverse - - ## - # See Minitest::Assertions#assert_same - # - # a.must_be_same_as b - # - # :method: must_be_same_as - - infect_an_assertion :assert_same, :must_be_same_as - - ## - # See Minitest::Assertions#assert_silent - # - # proc { ... }.must_be_silent - # - # :method: must_be_silent - - infect_an_assertion :assert_silent, :must_be_silent, :block - - ## - # See Minitest::Assertions#assert_throws - # - # proc { ... }.must_throw sym - # - # :method: must_throw - - infect_an_assertion :assert_throws, :must_throw, :block - - ## - # See Minitest::Assertions#assert_path_exists - # - # _(some_path).path_must_exist - # - # :method: path_must_exist - - infect_an_assertion :assert_path_exists, :path_must_exist, :unary - - ## - # See Minitest::Assertions#refute_path_exists - # - # _(some_path).path_wont_exist - # - # :method: path_wont_exist - - infect_an_assertion :refute_path_exists, :path_wont_exist, :unary - - ## - # See Minitest::Assertions#refute_empty - # - # collection.wont_be_empty - # - # :method: wont_be_empty - - infect_an_assertion :refute_empty, :wont_be_empty, :unary - - ## - # See Minitest::Assertions#refute_equal - # - # a.wont_equal b - # - # :method: wont_equal - - infect_an_assertion :refute_equal, :wont_equal - - ## - # See Minitest::Assertions#refute_in_delta - # - # n.wont_be_close_to m [, delta] - # - # :method: wont_be_close_to - - infect_an_assertion :refute_in_delta, :wont_be_close_to - - alias :wont_be_within_delta :wont_be_close_to # :nodoc: - - ## - # See Minitest::Assertions#refute_in_epsilon - # - # n.wont_be_within_epsilon m [, epsilon] - # - # :method: wont_be_within_epsilon - - infect_an_assertion :refute_in_epsilon, :wont_be_within_epsilon - - ## - # See Minitest::Assertions#refute_includes - # - # collection.wont_include obj - # - # :method: wont_include - - infect_an_assertion :refute_includes, :wont_include, :reverse - - ## - # See Minitest::Assertions#refute_instance_of - # - # obj.wont_be_instance_of klass - # - # :method: wont_be_instance_of - - infect_an_assertion :refute_instance_of, :wont_be_instance_of - - ## - # See Minitest::Assertions#refute_kind_of - # - # obj.wont_be_kind_of mod - # - # :method: wont_be_kind_of - - infect_an_assertion :refute_kind_of, :wont_be_kind_of - - ## - # See Minitest::Assertions#refute_match - # - # a.wont_match b - # - # :method: wont_match - - infect_an_assertion :refute_match, :wont_match - - ## - # See Minitest::Assertions#refute_nil - # - # obj.wont_be_nil - # - # :method: wont_be_nil - - infect_an_assertion :refute_nil, :wont_be_nil, :unary - - ## - # See Minitest::Assertions#refute_operator - # - # n.wont_be :<=, 42 - # - # This can also do predicates: - # - # str.wont_be :empty? - # - # :method: wont_be - - infect_an_assertion :refute_operator, :wont_be, :reverse - - ## - # See Minitest::Assertions#refute_respond_to - # - # obj.wont_respond_to msg - # - # :method: wont_respond_to - - infect_an_assertion :refute_respond_to, :wont_respond_to, :reverse - - ## - # See Minitest::Assertions#refute_same - # - # a.wont_be_same_as b - # - # :method: wont_be_same_as - - infect_an_assertion :refute_same, :wont_be_same_as -end diff --git a/ruby/gems/minitest-5.13.0/lib/minitest/hell.rb b/ruby/gems/minitest-5.13.0/lib/minitest/hell.rb deleted file mode 100644 index 73c88acd7..000000000 --- a/ruby/gems/minitest-5.13.0/lib/minitest/hell.rb +++ /dev/null @@ -1,11 +0,0 @@ -require "minitest/parallel" - -class Minitest::Test - parallelize_me! -end - -begin - require "minitest/proveit" -rescue LoadError - warn "NOTE: `gem install minitest-proveit` for even more hellish tests" -end diff --git a/ruby/gems/minitest-5.13.0/lib/minitest/mock.rb b/ruby/gems/minitest-5.13.0/lib/minitest/mock.rb deleted file mode 100644 index 39cfc24e4..000000000 --- a/ruby/gems/minitest-5.13.0/lib/minitest/mock.rb +++ /dev/null @@ -1,240 +0,0 @@ -class MockExpectationError < StandardError; end # :nodoc: - -module Minitest # :nodoc: - - ## - # A simple and clean mock object framework. - # - # All mock objects are an instance of Mock - - class Mock - alias :__respond_to? :respond_to? - - overridden_methods = %w[ - === - class - inspect - instance_eval - instance_variables - object_id - public_send - respond_to_missing? - send - to_s - ] - - instance_methods.each do |m| - undef_method m unless overridden_methods.include?(m.to_s) || m =~ /^__/ - end - - overridden_methods.map(&:to_sym).each do |method_id| - define_method method_id do |*args, &b| - if @expected_calls.key? method_id then - method_missing(method_id, *args, &b) - else - super(*args, &b) - end - end - end - - def initialize delegator = nil # :nodoc: - @delegator = delegator - @expected_calls = Hash.new { |calls, name| calls[name] = [] } - @actual_calls = Hash.new { |calls, name| calls[name] = [] } - end - - ## - # Expect that method +name+ is called, optionally with +args+ or a - # +blk+, and returns +retval+. - # - # @mock.expect(:meaning_of_life, 42) - # @mock.meaning_of_life # => 42 - # - # @mock.expect(:do_something_with, true, [some_obj, true]) - # @mock.do_something_with(some_obj, true) # => true - # - # @mock.expect(:do_something_else, true) do |a1, a2| - # a1 == "buggs" && a2 == :bunny - # end - # - # +args+ is compared to the expected args using case equality (ie, the - # '===' operator), allowing for less specific expectations. - # - # @mock.expect(:uses_any_string, true, [String]) - # @mock.uses_any_string("foo") # => true - # @mock.verify # => true - # - # @mock.expect(:uses_one_string, true, ["foo"]) - # @mock.uses_one_string("bar") # => raises MockExpectationError - # - # If a method will be called multiple times, specify a new expect for each one. - # They will be used in the order you define them. - # - # @mock.expect(:ordinal_increment, 'first') - # @mock.expect(:ordinal_increment, 'second') - # - # @mock.ordinal_increment # => 'first' - # @mock.ordinal_increment # => 'second' - # @mock.ordinal_increment # => raises MockExpectationError "No more expects available for :ordinal_increment" - # - - def expect name, retval, args = [], &blk - name = name.to_sym - - if block_given? - raise ArgumentError, "args ignored when block given" unless args.empty? - @expected_calls[name] << { :retval => retval, :block => blk } - else - raise ArgumentError, "args must be an array" unless Array === args - @expected_calls[name] << { :retval => retval, :args => args } - end - self - end - - def __call name, data # :nodoc: - case data - when Hash then - "#{name}(#{data[:args].inspect[1..-2]}) => #{data[:retval].inspect}" - else - data.map { |d| __call name, d }.join ", " - end - end - - ## - # Verify that all methods were called as expected. Raises - # +MockExpectationError+ if the mock object was not called as - # expected. - - def verify - @expected_calls.each do |name, expected| - actual = @actual_calls.fetch(name, nil) - raise MockExpectationError, "expected #{__call name, expected[0]}" unless actual - raise MockExpectationError, "expected #{__call name, expected[actual.size]}, got [#{__call name, actual}]" if - actual.size < expected.size - end - true - end - - def method_missing sym, *args, &block # :nodoc: - unless @expected_calls.key?(sym) then - if @delegator && @delegator.respond_to?(sym) - return @delegator.public_send(sym, *args, &block) - else - raise NoMethodError, "unmocked method %p, expected one of %p" % - [sym, @expected_calls.keys.sort_by(&:to_s)] - end - end - - index = @actual_calls[sym].length - expected_call = @expected_calls[sym][index] - - unless expected_call then - raise MockExpectationError, "No more expects available for %p: %p" % - [sym, args] - end - - expected_args, retval, val_block = - expected_call.values_at(:args, :retval, :block) - - if val_block then - # keep "verify" happy - @actual_calls[sym] << expected_call - - raise MockExpectationError, "mocked method %p failed block w/ %p" % - [sym, args] unless val_block.call(*args, &block) - - return retval - end - - if expected_args.size != args.size then - raise ArgumentError, "mocked method %p expects %d arguments, got %d" % - [sym, expected_args.size, args.size] - end - - zipped_args = expected_args.zip(args) - fully_matched = zipped_args.all? { |mod, a| - mod === a or mod == a - } - - unless fully_matched then - raise MockExpectationError, "mocked method %p called with unexpected arguments %p" % - [sym, args] - end - - @actual_calls[sym] << { - :retval => retval, - :args => zipped_args.map! { |mod, a| mod === a ? mod : a }, - } - - retval - end - - def respond_to? sym, include_private = false # :nodoc: - return true if @expected_calls.key? sym.to_sym - return true if @delegator && @delegator.respond_to?(sym, include_private) - __respond_to?(sym, include_private) - end - end -end - -module Minitest::Assertions - ## - # Assert that the mock verifies correctly. - - def assert_mock mock - assert mock.verify - end -end - -## -# Object extensions for Minitest::Mock. - -class Object - - ## - # Add a temporary stubbed method replacing +name+ for the duration - # of the +block+. If +val_or_callable+ responds to #call, then it - # returns the result of calling it, otherwise returns the value - # as-is. If stubbed method yields a block, +block_args+ will be - # passed along. Cleans up the stub at the end of the +block+. The - # method +name+ must exist before stubbing. - # - # def test_stale_eh - # obj_under_test = Something.new - # refute obj_under_test.stale? - # - # Time.stub :now, Time.at(0) do - # assert obj_under_test.stale? - # end - # end - # - - def stub name, val_or_callable, *block_args - new_name = "__minitest_stub__#{name}" - - metaclass = class << self; self; end - - if respond_to? name and not methods.map(&:to_s).include? name.to_s then - metaclass.send :define_method, name do |*args| - super(*args) - end - end - - metaclass.send :alias_method, new_name, name - - metaclass.send :define_method, name do |*args, &blk| - if val_or_callable.respond_to? :call then - val_or_callable.call(*args, &blk) - else - blk.call(*block_args) if blk - val_or_callable - end - end - - yield self - ensure - metaclass.send :undef_method, name - metaclass.send :alias_method, name, new_name - metaclass.send :undef_method, new_name - end -end diff --git a/ruby/gems/minitest-5.13.0/lib/minitest/parallel.rb b/ruby/gems/minitest-5.13.0/lib/minitest/parallel.rb deleted file mode 100644 index 40ac709a3..000000000 --- a/ruby/gems/minitest-5.13.0/lib/minitest/parallel.rb +++ /dev/null @@ -1,70 +0,0 @@ -module Minitest - module Parallel #:nodoc: - - ## - # The engine used to run multiple tests in parallel. - - class Executor - - ## - # The size of the pool of workers. - - attr_reader :size - - ## - # Create a parallel test executor of with +size+ workers. - - def initialize size - @size = size - @queue = Queue.new - @pool = nil - end - - ## - # Start the executor - - def start - @pool = size.times.map { - Thread.new(@queue) do |queue| - Thread.current.abort_on_exception = true - while (job = queue.pop) - klass, method, reporter = job - reporter.synchronize { reporter.prerecord klass, method } - result = Minitest.run_one_method klass, method - reporter.synchronize { reporter.record result } - end - end - } - end - - ## - # Add a job to the queue - - def << work; @queue << work; end - - ## - # Shuts down the pool of workers by signalling them to quit and - # waiting for them all to finish what they're currently working - # on. - - def shutdown - size.times { @queue << nil } - @pool.each(&:join) - end - end - - module Test # :nodoc: - def _synchronize; Minitest::Test.io_lock.synchronize { yield }; end # :nodoc: - - module ClassMethods # :nodoc: - def run_one_method klass, method_name, reporter - Minitest.parallel_executor << [klass, method_name, reporter] - end - - def test_order - :parallel - end - end - end - end -end diff --git a/ruby/gems/minitest-5.13.0/lib/minitest/pride.rb b/ruby/gems/minitest-5.13.0/lib/minitest/pride.rb deleted file mode 100644 index f3b8e474f..000000000 --- a/ruby/gems/minitest-5.13.0/lib/minitest/pride.rb +++ /dev/null @@ -1,4 +0,0 @@ -require "minitest" - -Minitest.load_plugins -Minitest::PrideIO.pride! diff --git a/ruby/gems/minitest-5.13.0/lib/minitest/pride_plugin.rb b/ruby/gems/minitest-5.13.0/lib/minitest/pride_plugin.rb deleted file mode 100644 index aeef2b9c8..000000000 --- a/ruby/gems/minitest-5.13.0/lib/minitest/pride_plugin.rb +++ /dev/null @@ -1,142 +0,0 @@ -require "minitest" - -module Minitest - def self.plugin_pride_options opts, _options # :nodoc: - opts.on "-p", "--pride", "Pride. Show your testing pride!" do - PrideIO.pride! - end - end - - def self.plugin_pride_init options # :nodoc: - if PrideIO.pride? then - klass = ENV["TERM"] =~ /^xterm|-256color$/ ? PrideLOL : PrideIO - io = klass.new options[:io] - - self.reporter.reporters.grep(Minitest::Reporter).each do |rep| - rep.io = io if rep.io.tty? - end - end - end - - ## - # Show your testing pride! - - class PrideIO - ## - # Activate the pride plugin. Called from both -p option and minitest/pride - - def self.pride! - @pride = true - end - - ## - # Are we showing our testing pride? - - def self.pride? - @pride ||= false - end - - # Start an escape sequence - ESC = "\e[" - - # End the escape sequence - NND = "#{ESC}0m" - - # The IO we're going to pipe through. - attr_reader :io - - def initialize io # :nodoc: - @io = io - # stolen from /System/Library/Perl/5.10.0/Term/ANSIColor.pm - # also reference http://en.wikipedia.org/wiki/ANSI_escape_code - @colors ||= (31..36).to_a - @size = @colors.size - @index = 0 - end - - ## - # Wrap print to colorize the output. - - def print o - case o - when "." then - io.print pride o - when "E", "F" then - io.print "#{ESC}41m#{ESC}37m#{o}#{NND}" - when "S" then - io.print pride o - else - io.print o - end - end - - def puts *o # :nodoc: - o.map! { |s| - s.to_s.sub(/Finished/) { - @index = 0 - "Fabulous run".split(//).map { |c| - pride(c) - }.join - } - } - - io.puts(*o) - end - - ## - # Color a string. - - def pride string - string = "*" if string == "." - c = @colors[@index % @size] - @index += 1 - "#{ESC}#{c}m#{string}#{NND}" - end - - def method_missing msg, *args # :nodoc: - io.send(msg, *args) - end - end - - ## - # If you thought the PrideIO was colorful... - # - # (Inspired by lolcat, but with clean math) - - class PrideLOL < PrideIO - PI_3 = Math::PI / 3 # :nodoc: - - def initialize io # :nodoc: - # walk red, green, and blue around a circle separated by equal thirds. - # - # To visualize, type this into wolfram-alpha: - # - # plot (3*sin(x)+3), (3*sin(x+2*pi/3)+3), (3*sin(x+4*pi/3)+3) - - # 6 has wide pretty gradients. 3 == lolcat, about half the width - @colors = (0...(6 * 7)).map { |n| - n *= 1.0 / 6 - r = (3 * Math.sin(n ) + 3).to_i - g = (3 * Math.sin(n + 2 * PI_3) + 3).to_i - b = (3 * Math.sin(n + 4 * PI_3) + 3).to_i - - # Then we take rgb and encode them in a single number using base 6. - # For some mysterious reason, we add 16... to clear the bottom 4 bits? - # Yes... they're ugly. - - 36 * r + 6 * g + b + 16 - } - - super - end - - ## - # Make the string even more colorful. Damnit. - - def pride string - c = @colors[@index % @size] - @index += 1 - "#{ESC}38;5;#{c}m#{string}#{NND}" - end - end -end diff --git a/ruby/gems/minitest-5.13.0/lib/minitest/spec.rb b/ruby/gems/minitest-5.13.0/lib/minitest/spec.rb deleted file mode 100644 index 12f1975cf..000000000 --- a/ruby/gems/minitest-5.13.0/lib/minitest/spec.rb +++ /dev/null @@ -1,342 +0,0 @@ -require "minitest/test" - -class Module # :nodoc: - def infect_an_assertion meth, new_name, dont_flip = false # :nodoc: - block = dont_flip == :block - dont_flip = false if block - - # warn "%-22p -> %p %p" % [meth, new_name, dont_flip] - self.class_eval <<-EOM, __FILE__, __LINE__ + 1 - def #{new_name} *args - where = Minitest.filter_backtrace(caller).first - where = where.split(/:in /, 2).first # clean up noise - warn "DEPRECATED: global use of #{new_name} from #\{where}. Use _(obj).#{new_name} instead. This will fail in Minitest 6." - Minitest::Expectation.new(self, Minitest::Spec.current).#{new_name}(*args) - end - EOM - - Minitest::Expectation.class_eval <<-EOM, __FILE__, __LINE__ + 1 - def #{new_name} *args - raise "Calling ##{new_name} outside of test." unless ctx - case - when #{!!dont_flip} then - ctx.#{meth}(target, *args) - when #{block} && Proc === target then - ctx.#{meth}(*args, &target) - else - ctx.#{meth}(args.first, target, *args[1..-1]) - end - end - EOM - end -end - -Minitest::Expectation = Struct.new :target, :ctx # :nodoc: - -## -# Kernel extensions for minitest - -module Kernel - ## - # Describe a series of expectations for a given target +desc+. - # - # Defines a test class subclassing from either Minitest::Spec or - # from the surrounding describe's class. The surrounding class may - # subclass Minitest::Spec manually in order to easily share code: - # - # class MySpec < Minitest::Spec - # # ... shared code ... - # end - # - # class TestStuff < MySpec - # it "does stuff" do - # # shared code available here - # end - # describe "inner stuff" do - # it "still does stuff" do - # # ...and here - # end - # end - # end - # - # For more information on getting started with writing specs, see: - # - # http://www.rubyinside.com/a-minitestspec-tutorial-elegant-spec-style-testing-that-comes-with-ruby-5354.html - # - # For some suggestions on how to improve your specs, try: - # - # http://betterspecs.org - # - # but do note that several items there are debatable or specific to - # rspec. - # - # For more information about expectations, see Minitest::Expectations. - - def describe desc, *additional_desc, &block # :doc: - stack = Minitest::Spec.describe_stack - name = [stack.last, desc, *additional_desc].compact.join("::") - sclas = stack.last || if Class === self && kind_of?(Minitest::Spec::DSL) then - self - else - Minitest::Spec.spec_type desc, *additional_desc - end - - cls = sclas.create name, desc - - stack.push cls - cls.class_eval(&block) - stack.pop - cls - end - private :describe -end - -## -# Minitest::Spec -- The faster, better, less-magical spec framework! -# -# For a list of expectations, see Minitest::Expectations. - -class Minitest::Spec < Minitest::Test - - def self.current # :nodoc: - Thread.current[:current_spec] - end - - def initialize name # :nodoc: - super - Thread.current[:current_spec] = self - end - - ## - # Oh look! A Minitest::Spec::DSL module! Eat your heart out DHH. - - module DSL - ## - # Contains pairs of matchers and Spec classes to be used to - # calculate the superclass of a top-level describe. This allows for - # automatically customizable spec types. - # - # See: register_spec_type and spec_type - - TYPES = [[//, Minitest::Spec]] - - ## - # Register a new type of spec that matches the spec's description. - # This method can take either a Regexp and a spec class or a spec - # class and a block that takes the description and returns true if - # it matches. - # - # Eg: - # - # register_spec_type(/Controller$/, Minitest::Spec::Rails) - # - # or: - # - # register_spec_type(Minitest::Spec::RailsModel) do |desc| - # desc.superclass == ActiveRecord::Base - # end - - def register_spec_type *args, &block - if block then - matcher, klass = block, args.first - else - matcher, klass = *args - end - TYPES.unshift [matcher, klass] - end - - ## - # Figure out the spec class to use based on a spec's description. Eg: - # - # spec_type("BlahController") # => Minitest::Spec::Rails - - def spec_type desc, *additional - TYPES.find { |matcher, _klass| - if matcher.respond_to? :call then - matcher.call desc, *additional - else - matcher === desc.to_s - end - }.last - end - - def describe_stack # :nodoc: - Thread.current[:describe_stack] ||= [] - end - - def children # :nodoc: - @children ||= [] - end - - def nuke_test_methods! # :nodoc: - self.public_instance_methods.grep(/^test_/).each do |name| - self.send :undef_method, name - end - end - - ## - # Define a 'before' action. Inherits the way normal methods should. - # - # NOTE: +type+ is ignored and is only there to make porting easier. - # - # Equivalent to Minitest::Test#setup. - - def before _type = nil, &block - define_method :setup do - super() - self.instance_eval(&block) - end - end - - ## - # Define an 'after' action. Inherits the way normal methods should. - # - # NOTE: +type+ is ignored and is only there to make porting easier. - # - # Equivalent to Minitest::Test#teardown. - - def after _type = nil, &block - define_method :teardown do - self.instance_eval(&block) - super() - end - end - - ## - # Define an expectation with name +desc+. Name gets morphed to a - # proper test method name. For some freakish reason, people who - # write specs don't like class inheritance, so this goes way out of - # its way to make sure that expectations aren't inherited. - # - # This is also aliased to #specify and doesn't require a +desc+ arg. - # - # Hint: If you _do_ want inheritance, use minitest/test. You can mix - # and match between assertions and expectations as much as you want. - - def it desc = "anonymous", &block - block ||= proc { skip "(no tests defined)" } - - @specs ||= 0 - @specs += 1 - - name = "test_%04d_%s" % [ @specs, desc ] - - undef_klasses = self.children.reject { |c| c.public_method_defined? name } - - define_method name, &block - - undef_klasses.each do |undef_klass| - undef_klass.send :undef_method, name - end - - name - end - - ## - # Essentially, define an accessor for +name+ with +block+. - # - # Why use let instead of def? I honestly don't know. - - def let name, &block - name = name.to_s - pre, post = "let '#{name}' cannot ", ". Please use another name." - methods = Minitest::Spec.instance_methods.map(&:to_s) - %w[subject] - raise ArgumentError, "#{pre}begin with 'test'#{post}" if - name =~ /\Atest/ - raise ArgumentError, "#{pre}override a method in Minitest::Spec#{post}" if - methods.include? name - - define_method name do - @_memoized ||= {} - @_memoized.fetch(name) { |k| @_memoized[k] = instance_eval(&block) } - end - end - - ## - # Another lazy man's accessor generator. Made even more lazy by - # setting the name for you to +subject+. - - def subject &block - let :subject, &block - end - - def create name, desc # :nodoc: - cls = Class.new(self) do - @name = name - @desc = desc - - nuke_test_methods! - end - - children << cls - - cls - end - - def name # :nodoc: - defined?(@name) ? @name : super - end - - def to_s # :nodoc: - name # Can't alias due to 1.8.7, not sure why - end - - attr_reader :desc # :nodoc: - alias :specify :it - - ## - # Rdoc... why are you so dumb? - - module InstanceMethods - ## - # Takes a value or a block and returns a value monad that has - # all of Expectations methods available to it. - # - # _(1 + 1).must_equal 2 - # - # And for blocks: - # - # _ { 1 + "1" }.must_raise TypeError - # - # This method of expectation-based testing is preferable to - # straight-expectation methods (on Object) because it stores its - # test context, bypassing our hacky use of thread-local variables. - # - # NOTE: At some point, the methods on Object will be deprecated - # and then removed. - # - # It is also aliased to #value and #expect for your aesthetic - # pleasure: - # - # _(1 + 1).must_equal 2 - # value(1 + 1).must_equal 2 - # expect(1 + 1).must_equal 2 - - def _ value = nil, &block - Minitest::Expectation.new block || value, self - end - - alias value _ - alias expect _ - - def before_setup # :nodoc: - super - Thread.current[:current_spec] = self - end - end - - def self.extended obj # :nodoc: - obj.send :include, InstanceMethods - end - end - - extend DSL - - TYPES = DSL::TYPES # :nodoc: -end - -require "minitest/expectations" - -class Object # :nodoc: - include Minitest::Expectations unless ENV["MT_NO_EXPECTATIONS"] -end diff --git a/ruby/gems/minitest-5.13.0/lib/minitest/test.rb b/ruby/gems/minitest-5.13.0/lib/minitest/test.rb deleted file mode 100644 index 0993bc491..000000000 --- a/ruby/gems/minitest-5.13.0/lib/minitest/test.rb +++ /dev/null @@ -1,220 +0,0 @@ -require "minitest" unless defined? Minitest::Runnable - -module Minitest - ## - # Subclass Test to create your own tests. Typically you'll want a - # Test subclass per implementation class. - # - # See Minitest::Assertions - - class Test < Runnable - require "minitest/assertions" - include Minitest::Assertions - include Minitest::Reportable - - def class_name # :nodoc: - self.class.name # for Minitest::Reportable - end - - PASSTHROUGH_EXCEPTIONS = [NoMemoryError, SignalException, SystemExit] # :nodoc: - - # :stopdoc: - class << self; attr_accessor :io_lock; end - self.io_lock = Mutex.new - # :startdoc: - - ## - # Call this at the top of your tests when you absolutely - # positively need to have ordered tests. In doing so, you're - # admitting that you suck and your tests are weak. - - def self.i_suck_and_my_tests_are_order_dependent! - class << self - undef_method :test_order if method_defined? :test_order - define_method :test_order do :alpha end - end - end - - ## - # Make diffs for this Test use #pretty_inspect so that diff - # in assert_equal can have more details. NOTE: this is much slower - # than the regular inspect but much more usable for complex - # objects. - - def self.make_my_diffs_pretty! - require "pp" - - define_method :mu_pp, &:pretty_inspect - end - - ## - # Call this at the top of your tests when you want to run your - # tests in parallel. In doing so, you're admitting that you rule - # and your tests are awesome. - - def self.parallelize_me! - include Minitest::Parallel::Test - extend Minitest::Parallel::Test::ClassMethods - end - - ## - # Returns all instance methods starting with "test_". Based on - # #test_order, the methods are either sorted, randomized - # (default), or run in parallel. - - def self.runnable_methods - methods = methods_matching(/^test_/) - - case self.test_order - when :random, :parallel then - max = methods.size - methods.sort.sort_by { rand max } - when :alpha, :sorted then - methods.sort - else - raise "Unknown test_order: #{self.test_order.inspect}" - end - end - - ## - # Defines the order to run tests (:random by default). Override - # this or use a convenience method to change it for your tests. - - def self.test_order - :random - end - - TEARDOWN_METHODS = %w[ before_teardown teardown after_teardown ] # :nodoc: - - ## - # Runs a single test with setup/teardown hooks. - - def run - with_info_handler do - time_it do - capture_exceptions do - before_setup; setup; after_setup - - self.send self.name - end - - TEARDOWN_METHODS.each do |hook| - capture_exceptions do - self.send hook - end - end - end - end - - Result.from self # per contract - end - - ## - # Provides before/after hooks for setup and teardown. These are - # meant for library writers, NOT for regular test authors. See - # #before_setup for an example. - - module LifecycleHooks - - ## - # Runs before every test, before setup. This hook is meant for - # libraries to extend minitest. It is not meant to be used by - # test developers. - # - # As a simplistic example: - # - # module MyMinitestPlugin - # def before_setup - # super - # # ... stuff to do before setup is run - # end - # - # def after_setup - # # ... stuff to do after setup is run - # super - # end - # - # def before_teardown - # super - # # ... stuff to do before teardown is run - # end - # - # def after_teardown - # # ... stuff to do after teardown is run - # super - # end - # end - # - # class MiniTest::Test - # include MyMinitestPlugin - # end - - def before_setup; end - - ## - # Runs before every test. Use this to set up before each test - # run. - - def setup; end - - ## - # Runs before every test, after setup. This hook is meant for - # libraries to extend minitest. It is not meant to be used by - # test developers. - # - # See #before_setup for an example. - - def after_setup; end - - ## - # Runs after every test, before teardown. This hook is meant for - # libraries to extend minitest. It is not meant to be used by - # test developers. - # - # See #before_setup for an example. - - def before_teardown; end - - ## - # Runs after every test. Use this to clean up after each test - # run. - - def teardown; end - - ## - # Runs after every test, after teardown. This hook is meant for - # libraries to extend minitest. It is not meant to be used by - # test developers. - # - # See #before_setup for an example. - - def after_teardown; end - end # LifecycleHooks - - def capture_exceptions # :nodoc: - yield - rescue *PASSTHROUGH_EXCEPTIONS - raise - rescue Assertion => e - self.failures << e - rescue Exception => e - self.failures << UnexpectedError.new(e) - end - - def with_info_handler &block # :nodoc: - t0 = Minitest.clock_time - - handler = lambda do - warn "\nCurrent: %s#%s %.2fs" % [self.class, self.name, Minitest.clock_time - t0] - end - - self.class.on_signal ::Minitest.info_signal, handler, &block - end - - include LifecycleHooks - include Guard - extend Guard - end # Test -end - -require "minitest/unit" unless defined?(MiniTest) # compatibility layer only diff --git a/ruby/gems/minitest-5.13.0/lib/minitest/unit.rb b/ruby/gems/minitest-5.13.0/lib/minitest/unit.rb deleted file mode 100644 index 9a4eadff1..000000000 --- a/ruby/gems/minitest-5.13.0/lib/minitest/unit.rb +++ /dev/null @@ -1,45 +0,0 @@ -# :stopdoc: - -unless defined?(Minitest) then - # all of this crap is just to avoid circular requires and is only - # needed if a user requires "minitest/unit" directly instead of - # "minitest/autorun", so we also warn - - from = caller.reject { |s| s =~ /rubygems/ }.join("\n ") - warn "Warning: you should require 'minitest/autorun' instead." - warn %(Warning: or add 'gem "minitest"' before 'require "minitest/autorun"') - warn "From:\n #{from}" - - module Minitest; end - MiniTest = Minitest # prevents minitest.rb from requiring back to us - require "minitest" -end - -MiniTest = Minitest unless defined?(MiniTest) - -module Minitest - class Unit - VERSION = Minitest::VERSION - class TestCase < Minitest::Test - def self.inherited klass # :nodoc: - from = caller.first - warn "MiniTest::Unit::TestCase is now Minitest::Test. From #{from}" - super - end - end - - def self.autorun # :nodoc: - from = caller.first - warn "MiniTest::Unit.autorun is now Minitest.autorun. From #{from}" - Minitest.autorun - end - - def self.after_tests &b # :nodoc: - from = caller.first - warn "MiniTest::Unit.after_tests is now Minitest.after_run. From #{from}" - Minitest.after_run(&b) - end - end -end - -# :startdoc: diff --git a/ruby/gems/minitest-5.13.0/minitest.gemspec b/ruby/gems/minitest-5.13.0/minitest.gemspec deleted file mode 100644 index 627b96062..000000000 --- a/ruby/gems/minitest-5.13.0/minitest.gemspec +++ /dev/null @@ -1,35 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: minitest 5.13.0 ruby lib - -Gem::Specification.new do |s| - s.name = "minitest".freeze - s.version = "5.13.0" - - s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib".freeze] - s.authors = ["Ryan Davis".freeze] - s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIDPjCCAiagAwIBAgIBAzANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu\nZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB\nGRYDY29tMB4XDTE4MTIwNDIxMzAxNFoXDTE5MTIwNDIxMzAxNFowRTETMBEGA1UE\nAwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS\nJomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda\nb9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx\ntaCPaLmfYIaFcHHCSY4hYDJijRQkLxPeB3xbOfzfLoBDbjvx5JxgJxUjmGa7xhcT\noOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh\nGiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt\nqhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV\ngBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw\nHQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB\nAQCbJwLmpJR2PomLU+Zzw3KRzH/hbyUWc/ftru71AopZ1fy4iY9J/BW5QYKVYwbP\nV0FSBWtvfI/RdwfKGtuGhPKECZgmLieGuZ3XCc09qPu1bdg7i/tu1p0t0c6163ku\nnDMDIC/t/DAFK0TY9I3HswuyZGbLW7rgF0DmiuZdN/RPhHq2pOLMLXJmFclCb/im\n9yToml/06TJdUJ5p64mkBs0TzaK66DIB1Smd3PdtfZqoRV+EwaXMdx0Hb3zdR1JR\nEm82dBUFsipwMLCYj39kcyHWAxyl6Ae1Cn9r/ItVBCxoeFdrHjfavnrIEoXUt4bU\nUfBugfLD19bu3nvL+zTAGx/U\n-----END CERTIFICATE-----\n".freeze] - s.date = "2019-10-30" - s.description = "minitest provides a complete suite of testing facilities supporting\nTDD, BDD, mocking, and benchmarking.\n\n \"I had a class with Jim Weirich on testing last week and we were\n allowed to choose our testing frameworks. Kirk Haines and I were\n paired up and we cracked open the code for a few test\n frameworks...\n\n I MUST say that minitest is *very* readable / understandable\n compared to the 'other two' options we looked at. Nicely done and\n thank you for helping us keep our mental sanity.\"\n\n -- Wayne E. Seguin\n\nminitest/test is a small and incredibly fast unit testing framework.\nIt provides a rich set of assertions to make your tests clean and\nreadable.\n\nminitest/spec is a functionally complete spec engine. It hooks onto\nminitest/test and seamlessly bridges test assertions over to spec\nexpectations.\n\nminitest/benchmark is an awesome way to assert the performance of your\nalgorithms in a repeatable manner. Now you can assert that your newb\nco-worker doesn't replace your linear algorithm with an exponential\none!\n\nminitest/mock by Steven Baker, is a beautifully tiny mock (and stub)\nobject framework.\n\nminitest/pride shows pride in testing and adds coloring to your test\noutput. I guess it is an example of how to write IO pipes too. :P\n\nminitest/test is meant to have a clean implementation for language\nimplementors that need a minimal set of methods to bootstrap a working\ntest suite. For example, there is no magic involved for test-case\ndiscovery.\n\n \"Again, I can't praise enough the idea of a testing/specing\n framework that I can actually read in full in one sitting!\"\n\n -- Piotr Szotkowski\n\nComparing to rspec:\n\n rspec is a testing DSL. minitest is ruby.\n\n -- Adam Hawkins, \"Bow Before MiniTest\"\n\nminitest doesn't reinvent anything that ruby already provides, like:\nclasses, modules, inheritance, methods. This means you only have to\nlearn ruby to use minitest and all of your regular OO practices like\nextract-method refactorings still apply.".freeze - s.email = ["ryand-ruby@zenspider.com".freeze] - s.extra_rdoc_files = ["History.rdoc".freeze, "Manifest.txt".freeze, "README.rdoc".freeze] - s.files = [".autotest".freeze, "History.rdoc".freeze, "Manifest.txt".freeze, "README.rdoc".freeze, "Rakefile".freeze, "design_rationale.rb".freeze, "lib/hoe/minitest.rb".freeze, "lib/minitest.rb".freeze, "lib/minitest/assertions.rb".freeze, "lib/minitest/autorun.rb".freeze, "lib/minitest/benchmark.rb".freeze, "lib/minitest/expectations.rb".freeze, "lib/minitest/hell.rb".freeze, "lib/minitest/mock.rb".freeze, "lib/minitest/parallel.rb".freeze, "lib/minitest/pride.rb".freeze, "lib/minitest/pride_plugin.rb".freeze, "lib/minitest/spec.rb".freeze, "lib/minitest/test.rb".freeze, "lib/minitest/unit.rb".freeze, "test/minitest/metametameta.rb".freeze, "test/minitest/test_minitest_assertions.rb".freeze, "test/minitest/test_minitest_benchmark.rb".freeze, "test/minitest/test_minitest_mock.rb".freeze, "test/minitest/test_minitest_reporter.rb".freeze, "test/minitest/test_minitest_spec.rb".freeze, "test/minitest/test_minitest_test.rb".freeze] - s.homepage = "https://github.com/seattlerb/minitest".freeze - s.licenses = ["MIT".freeze] - s.rdoc_options = ["--main".freeze, "README.rdoc".freeze] - s.required_ruby_version = Gem::Requirement.new("~> 2.2".freeze) - s.rubygems_version = "3.1.2".freeze - s.summary = "minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking".freeze - - if s.respond_to? :specification_version then - s.specification_version = 4 - end - - if s.respond_to? :add_runtime_dependency then - s.add_development_dependency(%q.freeze, [">= 4.0", "< 7"]) - s.add_development_dependency(%q.freeze, ["~> 3.18"]) - else - s.add_dependency(%q.freeze, [">= 4.0", "< 7"]) - s.add_dependency(%q.freeze, ["~> 3.18"]) - end -end diff --git a/ruby/gems/minitest-5.13.0/test/minitest/metametameta.rb b/ruby/gems/minitest-5.13.0/test/minitest/metametameta.rb deleted file mode 100644 index 02418d59c..000000000 --- a/ruby/gems/minitest-5.13.0/test/minitest/metametameta.rb +++ /dev/null @@ -1,117 +0,0 @@ -require "tempfile" -require "stringio" -require "minitest/autorun" - -class Minitest::Test - def clean s - s.gsub(/^ {6}/, "") - end -end - -class FakeNamedTest < Minitest::Test - @@count = 0 - - def self.name - @fake_name ||= begin - @@count += 1 - "FakeNamedTest%02d" % @@count - end - end -end - -module MyModule; end -class AnError < StandardError; include MyModule; end - -class MetaMetaMetaTestCase < Minitest::Test - attr_accessor :reporter, :output, :tu - - def with_stderr err - old = $stderr - $stderr = err - yield - ensure - $stderr = old - end - - def run_tu_with_fresh_reporter flags = %w[--seed 42] - options = Minitest.process_args flags - - @output = StringIO.new("".encode('UTF-8')) - - self.reporter = Minitest::CompositeReporter.new - reporter << Minitest::SummaryReporter.new(@output, options) - reporter << Minitest::ProgressReporter.new(@output, options) - - with_stderr @output do - reporter.start - - yield(reporter) if block_given? - - @tus ||= [@tu] - @tus.each do |tu| - Minitest::Runnable.runnables.delete tu - - tu.run reporter, options - end - - reporter.report - end - end - - def first_reporter - reporter.reporters.first - end - - def assert_report expected, flags = %w[--seed 42], &block - header = clean <<-EOM - Run options: #{flags.map { |s| s =~ /\|/ ? s.inspect : s }.join " "} - - # Running: - - EOM - - run_tu_with_fresh_reporter flags, &block - - output = normalize_output @output.string.dup - - assert_equal header + expected, output - end - - def normalize_output output - output.sub!(/Finished in .*/, "Finished in 0.00") - output.sub!(/Loaded suite .*/, "Loaded suite blah") - - output.gsub!(/FakeNamedTest\d+/, "FakeNamedTestXX") - output.gsub!(/ = \d+.\d\d s = /, " = 0.00 s = ") - output.gsub!(/0x[A-Fa-f0-9]+/, "0xXXX") - output.gsub!(/ +$/, "") - - if windows? then - output.gsub!(/\[(?:[A-Za-z]:)?[^\]:]+:\d+\]/, "[FILE:LINE]") - output.gsub!(/^(\s+)(?:[A-Za-z]:)?[^:]+:\d+:in/, '\1FILE:LINE:in') - else - output.gsub!(/\[[^\]:]+:\d+\]/, "[FILE:LINE]") - output.gsub!(/^(\s+)[^:]+:\d+:in/, '\1FILE:LINE:in') - end - - output.gsub!(/( at )[^:]+:\d+/, '\1[FILE:LINE]') - - output - end - - def restore_env - old_value = ENV["MT_NO_SKIP_MSG"] - ENV.delete "MT_NO_SKIP_MSG" - - yield - ensure - ENV["MT_NO_SKIP_MSG"] = old_value - end - - def setup - super - srand 42 - Minitest::Test.reset - @tu = nil - end -end diff --git a/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_assertions.rb b/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_assertions.rb deleted file mode 100644 index 0d9e03926..000000000 --- a/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_assertions.rb +++ /dev/null @@ -1,1437 +0,0 @@ -# encoding: UTF-8 - -require "minitest/autorun" - -if defined? Encoding then - e = Encoding.default_external - if e != Encoding::UTF_8 then - warn "" - warn "" - warn "NOTE: External encoding #{e} is not UTF-8. Tests WILL fail." - warn " Run tests with `RUBYOPT=-Eutf-8 rake` to avoid errors." - warn "" - warn "" - end -end - -SomeError = Class.new Exception - -unless defined? MyModule then - module MyModule; end - class AnError < StandardError; include MyModule; end -end - -class TestMinitestAssertions < Minitest::Test - # do not call parallelize_me! - teardown accesses @tc._assertions - # which is not threadsafe. Nearly every method in here is an - # assertion test so it isn't worth splitting it out further. - - RUBY18 = !defined? Encoding - - class DummyTest - include Minitest::Assertions - # include Minitest::Reportable # TODO: why do I really need this? - - attr_accessor :assertions, :failure - - def initialize - self.assertions = 0 - self.failure = nil - end - end - - def setup - super - - Minitest::Test.reset - - @tc = DummyTest.new - @zomg = "zomg ponies!" # TODO: const - @assertion_count = 1 - end - - def teardown - assert_equal(@assertion_count, @tc.assertions, - "expected #{@assertion_count} assertions to be fired during the test, not #{@tc.assertions}") - end - - def assert_deprecated name - dep = /DEPRECATED: #{name}. From #{__FILE__}:\d+(?::.*)?/ - dep = "" if $-w.nil? - - assert_output nil, dep do - yield - end - end - - def assert_triggered expected, klass = Minitest::Assertion - e = assert_raises klass do - yield - end - - msg = e.message.sub(/(---Backtrace---).*/m, '\1') - msg.gsub!(/\(oid=[-0-9]+\)/, "(oid=N)") - msg.gsub!(/(\d\.\d{6})\d+/, '\1xxx') # normalize: ruby version, impl, platform - - assert_msg = Regexp === expected ? :assert_match : :assert_equal - self.send assert_msg, expected, msg - end - - def clean s - s.gsub(/^ {6,10}/, "") - end - - def non_verbose - orig_verbose = $VERBOSE - $VERBOSE = false - - yield - ensure - $VERBOSE = orig_verbose - end - - def test_assert - @assertion_count = 2 - - @tc.assert_equal true, @tc.assert(true), "returns true on success" - end - - def test_assert__triggered - assert_triggered "Expected false to be truthy." do - @tc.assert false - end - end - - def test_assert__triggered_message - assert_triggered @zomg do - @tc.assert false, @zomg - end - end - - def test_assert__triggered_lambda - assert_triggered "whoops" do - @tc.assert false, lambda { "whoops" } - end - end - - def test_assert_empty - @assertion_count = 2 - - @tc.assert_empty [] - end - - def test_assert_empty_triggered - @assertion_count = 2 - - assert_triggered "Expected [1] to be empty." do - @tc.assert_empty [1] - end - end - - def test_assert_equal - @tc.assert_equal 1, 1 - end - - def test_assert_equal_different_collection_array_hex_invisible - object1 = Object.new - object2 = Object.new - msg = "No visible difference in the Array#inspect output. - You should look at the implementation of #== on Array or its members. - [#]".gsub(/^ +/, "") - assert_triggered msg do - @tc.assert_equal [object1], [object2] - end - end - - def test_assert_equal_different_collection_hash_hex_invisible - h1, h2 = {}, {} - h1[1] = Object.new - h2[1] = Object.new - msg = "No visible difference in the Hash#inspect output. - You should look at the implementation of #== on Hash or its members. - {1=>#}".gsub(/^ +/, "") - - assert_triggered msg do - @tc.assert_equal h1, h2 - end - end - - def test_assert_equal_different_diff_deactivated - without_diff do - assert_triggered util_msg("haha" * 10, "blah" * 10) do - o1 = "haha" * 10 - o2 = "blah" * 10 - - @tc.assert_equal o1, o2 - end - end - end - - def test_assert_equal_different_message - assert_triggered "whoops.\nExpected: 1\n Actual: 2" do - @tc.assert_equal 1, 2, message { "whoops" } - end - end - - def test_assert_equal_different_lambda - assert_triggered "whoops.\nExpected: 1\n Actual: 2" do - @tc.assert_equal 1, 2, lambda { "whoops" } - end - end - - def test_assert_equal_different_hex - c = Class.new do - def initialize s; @name = s; end - end - - o1 = c.new "a" - o2 = c.new "b" - msg = clean <<-EOS - --- expected - +++ actual - @@ -1 +1 @@ - -#<#:0xXXXXXX @name=\"a\"> - +#<#:0xXXXXXX @name=\"b\"> - EOS - - assert_triggered msg do - @tc.assert_equal o1, o2 - end - end - - def test_assert_equal_different_hex_invisible - o1 = Object.new - o2 = Object.new - - msg = "No visible difference in the Object#inspect output. - You should look at the implementation of #== on Object or its members. - #".gsub(/^ +/, "") - - assert_triggered msg do - @tc.assert_equal o1, o2 - end - end - - def test_assert_equal_different_long - msg = "--- expected - +++ actual - @@ -1 +1 @@ - -\"hahahahahahahahahahahahahahahahahahahaha\" - +\"blahblahblahblahblahblahblahblahblahblah\" - ".gsub(/^ +/, "") - - assert_triggered msg do - o1 = "haha" * 10 - o2 = "blah" * 10 - - @tc.assert_equal o1, o2 - end - end - - def test_assert_equal_different_long_invisible - msg = "No visible difference in the String#inspect output. - You should look at the implementation of #== on String or its members. - \"blahblahblahblahblahblahblahblahblahblah\"".gsub(/^ +/, "") - - assert_triggered msg do - o1 = "blah" * 10 - o2 = "blah" * 10 - def o1.== _ - false - end - @tc.assert_equal o1, o2 - end - end - - def test_assert_equal_different_long_msg - msg = "message. - --- expected - +++ actual - @@ -1 +1 @@ - -\"hahahahahahahahahahahahahahahahahahahaha\" - +\"blahblahblahblahblahblahblahblahblahblah\" - ".gsub(/^ +/, "") - - assert_triggered msg do - o1 = "haha" * 10 - o2 = "blah" * 10 - @tc.assert_equal o1, o2, "message" - end - end - - def test_assert_equal_different_short - assert_triggered util_msg(1, 2) do - @tc.assert_equal 1, 2 - end - end - - def test_assert_equal_different_short_msg - assert_triggered util_msg(1, 2, "message") do - @tc.assert_equal 1, 2, "message" - end - end - - def test_assert_equal_different_short_multiline - msg = "--- expected\n+++ actual\n@@ -1,2 +1,2 @@\n \"a\n-b\"\n+c\"\n" - assert_triggered msg do - @tc.assert_equal "a\nb", "a\nc" - end - end - - def test_assert_equal_does_not_allow_lhs_nil - if Minitest::VERSION =~ /^6/ then - warn "Time to strip the MT5 test" - - @assertion_count += 1 - assert_triggered(/Use assert_nil if expecting nil/) do - @tc.assert_equal nil, nil - end - else - err_re = /Use assert_nil if expecting nil from .*test_minitest_\w+.rb/ - err_re = "" if $-w.nil? - - assert_output "", err_re do - @tc.assert_equal nil, nil - end - end - end - - def test_assert_equal_does_not_allow_lhs_nil_triggered - assert_triggered "Expected: nil\n Actual: false" do - @tc.assert_equal nil, false - end - end - - def test_assert_equal_string_bug791 - exp = <<-'EOF'.gsub(/^ {10}/, "") # note single quotes - --- expected - +++ actual - @@ -1,2 +1 @@ - -"\\n - -" - +"\\\" - EOF - - exp = "Expected: \"\\\\n\"\n Actual: \"\\\\\"" - assert_triggered exp do - @tc.assert_equal "\\n", "\\" - end - end - - def test_assert_equal_string_both_escaped_unescaped_newlines - msg = <<-EOM.gsub(/^ {10}/, "") - --- expected - +++ actual - @@ -1,2 +1 @@ - -\"A\\n - -B\" - +\"A\\n\\\\nB\" - EOM - - assert_triggered msg do - exp = "A\\nB" - act = "A\n\\nB" - - @tc.assert_equal exp, act - end - end - - def test_assert_equal_string_encodings - msg = <<-EOM.gsub(/^ {10}/, "") - --- expected - +++ actual - @@ -1,3 +1,3 @@ - -# encoding: UTF-8 - -# valid: false - +# encoding: ASCII-8BIT - +# valid: true - "bad-utf8-\\xF1.txt" - EOM - - assert_triggered msg do - x = "bad-utf8-\xF1.txt" - y = x.dup.force_encoding "binary" # TODO: switch to .b when 1.9 dropped - @tc.assert_equal x, y - end - end unless RUBY18 - - def test_assert_equal_string_encodings_both_different - msg = <<-EOM.gsub(/^ {10}/, "") - --- expected - +++ actual - @@ -1,3 +1,3 @@ - -# encoding: US-ASCII - -# valid: false - +# encoding: ASCII-8BIT - +# valid: true - "bad-utf8-\\xF1.txt" - EOM - - assert_triggered msg do - x = "bad-utf8-\xF1.txt".force_encoding "ASCII" - y = x.dup.force_encoding "binary" # TODO: switch to .b when 1.9 dropped - @tc.assert_equal x, y - end - end unless RUBY18 - - def test_assert_equal_unescape_newlines - msg = <<-'EOM'.gsub(/^ {10}/, "") # NOTE single quotes on heredoc - --- expected - +++ actual - @@ -1,2 +1,2 @@ - -"hello - +"hello\n - world" - EOM - - assert_triggered msg do - exp = "hello\nworld" - act = 'hello\nworld' # notice single quotes - - @tc.assert_equal exp, act - end - end - - def test_assert_in_delta - @tc.assert_in_delta 0.0, 1.0 / 1000, 0.1 - end - - def test_assert_in_delta_triggered - x = "1.0e-06" - assert_triggered "Expected |0.0 - 0.001| (0.001) to be <= #{x}." do - @tc.assert_in_delta 0.0, 1.0 / 1000, 0.000001 - end - end - - def test_assert_in_epsilon - @assertion_count = 10 - - @tc.assert_in_epsilon 10_000, 9991 - @tc.assert_in_epsilon 9991, 10_000 - @tc.assert_in_epsilon 1.0, 1.001 - @tc.assert_in_epsilon 1.001, 1.0 - - @tc.assert_in_epsilon 10_000, 9999.1, 0.0001 - @tc.assert_in_epsilon 9999.1, 10_000, 0.0001 - @tc.assert_in_epsilon 1.0, 1.0001, 0.0001 - @tc.assert_in_epsilon 1.0001, 1.0, 0.0001 - - @tc.assert_in_epsilon(-1, -1) - @tc.assert_in_epsilon(-10_000, -9991) - end - - def test_assert_in_epsilon_triggered - assert_triggered "Expected |10000 - 9990| (10) to be <= 9.99." do - @tc.assert_in_epsilon 10_000, 9990 - end - end - - def test_assert_in_epsilon_triggered_negative_case - x = (RUBY18 and not maglev?) ? "0.1" : "0.100000xxx" - y = "0.1" - assert_triggered "Expected |-1.1 - -1| (#{x}) to be <= #{y}." do - @tc.assert_in_epsilon(-1.1, -1, 0.1) - end - end - - def test_assert_includes - @assertion_count = 2 - - @tc.assert_includes [true], true - end - - def test_assert_includes_triggered - @assertion_count = 3 - - e = @tc.assert_raises Minitest::Assertion do - @tc.assert_includes [true], false - end - - expected = "Expected [true] to include false." - assert_equal expected, e.message - end - - def test_assert_instance_of - @tc.assert_instance_of String, "blah" - end - - def test_assert_instance_of_triggered - assert_triggered 'Expected "blah" to be an instance of Array, not String.' do - @tc.assert_instance_of Array, "blah" - end - end - - def test_assert_kind_of - @tc.assert_kind_of String, "blah" - end - - def test_assert_kind_of_triggered - assert_triggered 'Expected "blah" to be a kind of Array, not String.' do - @tc.assert_kind_of Array, "blah" - end - end - - def test_assert_match - @assertion_count = 2 - @tc.assert_match(/\w+/, "blah blah blah") - end - - def test_assert_match_matchee_to_str - @assertion_count = 2 - - obj = Object.new - def obj.to_str; "blah" end - - @tc.assert_match "blah", obj - end - - def test_assert_match_matcher_object - @assertion_count = 2 - - pattern = Object.new - def pattern.=~ _; true end - - @tc.assert_match pattern, 5 - end - - def test_assert_match_object_triggered - @assertion_count = 2 - - pattern = Object.new - def pattern.=~ _; false end - def pattern.inspect; "[Object]" end - - assert_triggered "Expected [Object] to match 5." do - @tc.assert_match pattern, 5 - end - end - - def test_assert_match_triggered - @assertion_count = 2 - assert_triggered 'Expected /\d+/ to match "blah blah blah".' do - @tc.assert_match(/\d+/, "blah blah blah") - end - end - - def test_assert_nil - @tc.assert_nil nil - end - - def test_assert_nil_triggered - assert_triggered "Expected 42 to be nil." do - @tc.assert_nil 42 - end - end - - def test_assert_operator - @tc.assert_operator 2, :>, 1 - end - - def test_assert_operator_bad_object - bad = Object.new - def bad.== _; true end - - @tc.assert_operator bad, :equal?, bad - end - - def test_assert_operator_triggered - assert_triggered "Expected 2 to be < 1." do - @tc.assert_operator 2, :<, 1 - end - end - - def test_assert_output_both - @assertion_count = 2 - - @tc.assert_output "yay", "blah" do - print "yay" - $stderr.print "blah" - end - end - - def test_assert_output_both_regexps - @assertion_count = 4 - - @tc.assert_output(/y.y/, /bl.h/) do - print "yay" - $stderr.print "blah" - end - end - - def test_assert_output_err - @tc.assert_output nil, "blah" do - $stderr.print "blah" - end - end - - def test_assert_output_neither - @assertion_count = 0 - - @tc.assert_output do - # do nothing - end - end - - def test_assert_output_out - @tc.assert_output "blah" do - print "blah" - end - end - - def test_assert_output_triggered_both - assert_triggered util_msg("blah", "blah blah", "In stderr") do - @tc.assert_output "yay", "blah" do - print "boo" - $stderr.print "blah blah" - end - end - end - - def test_assert_output_triggered_err - assert_triggered util_msg("blah", "blah blah", "In stderr") do - @tc.assert_output nil, "blah" do - $stderr.print "blah blah" - end - end - end - - def test_assert_output_triggered_out - assert_triggered util_msg("blah", "blah blah", "In stdout") do - @tc.assert_output "blah" do - print "blah blah" - end - end - end - - def test_assert_output_without_block - assert_triggered "assert_output requires a block to capture output." do - @tc.assert_output "blah" - end - end - - def test_assert_predicate - @tc.assert_predicate "", :empty? - end - - def test_assert_predicate_triggered - assert_triggered 'Expected "blah" to be empty?.' do - @tc.assert_predicate "blah", :empty? - end - end - - def test_assert_raises - @tc.assert_raises RuntimeError do - raise "blah" - end - end - - def test_assert_raises_default - @tc.assert_raises do - raise StandardError, "blah" - end - end - - def test_assert_raises_default_triggered - e = assert_raises Minitest::Assertion do - @tc.assert_raises do - raise SomeError, "blah" - end - end - - expected = clean <<-EOM.chomp - [StandardError] exception expected, not - Class: - Message: <\"blah\"> - ---Backtrace--- - FILE:LINE:in \`test_assert_raises_default_triggered\' - --------------- - EOM - - actual = e.message.gsub(/^.+:\d+/, "FILE:LINE") - actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0" - - assert_equal expected, actual - end - - def test_assert_raises_exit - @tc.assert_raises SystemExit do - exit 1 - end - end - - def test_assert_raises_module - @tc.assert_raises MyModule do - raise AnError - end - end - - def test_assert_raises_signals - @tc.assert_raises SignalException do - raise SignalException, :INT - end - end - - ## - # *sigh* This is quite an odd scenario, but it is from real (albeit - # ugly) test code in ruby-core: - - # http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29259 - - def test_assert_raises_skip - @assertion_count = 0 - - assert_triggered "skipped", Minitest::Skip do - @tc.assert_raises ArgumentError do - begin - raise "blah" - rescue - skip "skipped" - end - end - end - end - - def test_assert_raises_subclass - @tc.assert_raises StandardError do - raise AnError - end - end - - def test_assert_raises_subclass_triggered - e = assert_raises Minitest::Assertion do - @tc.assert_raises SomeError do - raise AnError, "some message" - end - end - - expected = clean <<-EOM - [SomeError] exception expected, not - Class: - Message: <\"some message\"> - ---Backtrace--- - FILE:LINE:in \`test_assert_raises_subclass_triggered\' - --------------- - EOM - - actual = e.message.gsub(/^.+:\d+/, "FILE:LINE") - actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0" - - assert_equal expected.chomp, actual - end - - def test_assert_raises_triggered_different - e = assert_raises Minitest::Assertion do - @tc.assert_raises RuntimeError do - raise SyntaxError, "icky" - end - end - - expected = clean <<-EOM.chomp - [RuntimeError] exception expected, not - Class: - Message: <\"icky\"> - ---Backtrace--- - FILE:LINE:in \`test_assert_raises_triggered_different\' - --------------- - EOM - - actual = e.message.gsub(/^.+:\d+/, "FILE:LINE") - actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0" - - assert_equal expected, actual - end - - def test_assert_raises_triggered_different_msg - e = assert_raises Minitest::Assertion do - @tc.assert_raises RuntimeError, "XXX" do - raise SyntaxError, "icky" - end - end - - expected = clean <<-EOM - XXX. - [RuntimeError] exception expected, not - Class: - Message: <\"icky\"> - ---Backtrace--- - FILE:LINE:in \`test_assert_raises_triggered_different_msg\' - --------------- - EOM - - actual = e.message.gsub(/^.+:\d+/, "FILE:LINE") - actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0" - - assert_equal expected.chomp, actual - end - - def test_assert_raises_triggered_none - e = assert_raises Minitest::Assertion do - @tc.assert_raises Minitest::Assertion do - # do nothing - end - end - - expected = "Minitest::Assertion expected but nothing was raised." - - assert_equal expected, e.message - end - - def test_assert_raises_triggered_none_msg - e = assert_raises Minitest::Assertion do - @tc.assert_raises Minitest::Assertion, "XXX" do - # do nothing - end - end - - expected = "XXX.\nMinitest::Assertion expected but nothing was raised." - - assert_equal expected, e.message - end - - def test_assert_raises_without_block - assert_triggered "assert_raises requires a block to capture errors." do - @tc.assert_raises StandardError - end - end - - def test_assert_respond_to - @tc.assert_respond_to "blah", :empty? - end - - def test_assert_respond_to_triggered - assert_triggered 'Expected "blah" (String) to respond to #rawr!.' do - @tc.assert_respond_to "blah", :rawr! - end - end - - def test_assert_same - @assertion_count = 3 - - o = "blah" - @tc.assert_same 1, 1 - @tc.assert_same :blah, :blah - @tc.assert_same o, o - end - - def test_assert_same_triggered - @assertion_count = 2 - - assert_triggered "Expected 2 (oid=N) to be the same as 1 (oid=N)." do - @tc.assert_same 1, 2 - end - - s1 = "blah" - s2 = "blah" - - assert_triggered 'Expected "blah" (oid=N) to be the same as "blah" (oid=N).' do - @tc.assert_same s1, s2 - end - end - - def test_assert_send - assert_deprecated :assert_send do - @tc.assert_send [1, :<, 2] - end - end - - def test_assert_send_bad - assert_deprecated :assert_send do - assert_triggered "Expected 1.>(*[2]) to return true." do - @tc.assert_send [1, :>, 2] - end - end - end - - def test_assert_silent - @assertion_count = 2 - - @tc.assert_silent do - # do nothing - end - end - - def test_assert_silent_triggered_err - assert_triggered util_msg("", "blah blah", "In stderr") do - @tc.assert_silent do - $stderr.print "blah blah" - end - end - end - - def test_assert_silent_triggered_out - @assertion_count = 2 - - assert_triggered util_msg("", "blah blah", "In stdout") do - @tc.assert_silent do - print "blah blah" - end - end - end - - def test_assert_throws - @tc.assert_throws :blah do - throw :blah - end - end - - def test_assert_throws_argument_exception - @tc.assert_raises ArgumentError do - @tc.assert_throws :blah do - raise ArgumentError - end - end - end - - def test_assert_throws_different - assert_triggered "Expected :blah to have been thrown, not :not_blah." do - @tc.assert_throws :blah do - throw :not_blah - end - end - end - - def test_assert_throws_name_error - @tc.assert_raises NameError do - @tc.assert_throws :blah do - raise NameError - end - end - end - - def test_assert_throws_unthrown - assert_triggered "Expected :blah to have been thrown." do - @tc.assert_throws :blah do - # do nothing - end - end - end - - def test_assert_path_exists - @tc.assert_path_exists __FILE__ - end - - def test_assert_path_exists_triggered - assert_triggered "Expected path 'blah' to exist." do - @tc.assert_path_exists "blah" - end - end - - def test_capture_io - @assertion_count = 0 - - non_verbose do - out, err = capture_io do - puts "hi" - $stderr.puts "bye!" - end - - assert_equal "hi\n", out - assert_equal "bye!\n", err - end - end - - def test_capture_subprocess_io - @assertion_count = 0 - - non_verbose do - out, err = capture_subprocess_io do - system("echo hi") - system("echo bye! 1>&2") - end - - assert_equal "hi\n", out - assert_equal "bye!", err.strip - end - end - - def test_class_asserts_match_refutes - @assertion_count = 0 - - methods = Minitest::Assertions.public_instance_methods - methods.map!(&:to_s) if Symbol === methods.first - - # These don't have corresponding refutes _on purpose_. They're - # useless and will never be added, so don't bother. - ignores = %w[assert_output assert_raises assert_send - assert_silent assert_throws assert_mock] - - # These are test/unit methods. I'm not actually sure why they're still here - ignores += %w[assert_no_match assert_not_equal assert_not_nil - assert_not_same assert_nothing_raised - assert_nothing_thrown assert_raise] - - asserts = methods.grep(/^assert/).sort - ignores - refutes = methods.grep(/^refute/).sort - ignores - - assert_empty refutes.map { |n| n.sub(/^refute/, "assert") } - asserts - assert_empty asserts.map { |n| n.sub(/^assert/, "refute") } - refutes - end - - def test_delta_consistency - @assertion_count = 2 - - @tc.assert_in_delta 0, 1, 1 - - assert_triggered "Expected |0 - 1| (1) to not be <= 1." do - @tc.refute_in_delta 0, 1, 1 - end - end - - def test_epsilon_consistency - @assertion_count = 2 - - @tc.assert_in_epsilon 1.0, 1.001 - - msg = "Expected |1.0 - 1.001| (0.000999xxx) to not be <= 0.001." - assert_triggered msg do - @tc.refute_in_epsilon 1.0, 1.001 - end - end - - def test_fail_after - t = Time.now - y, m, d = t.year, t.month, t.day - - assert_silent do - @tc.fail_after y, m, d+1, "remove the deprecations" - end - - assert_triggered "remove the deprecations" do - @tc.fail_after y, m, d, "remove the deprecations" - end - end - - def test_flunk - assert_triggered "Epic Fail!" do - @tc.flunk - end - end - - def test_flunk_message - assert_triggered @zomg do - @tc.flunk @zomg - end - end - - def test_pass - @tc.pass - end - - def test_refute - @assertion_count = 2 - - @tc.assert_equal false, @tc.refute(false), "returns false on success" - end - - def test_refute_empty - @assertion_count = 2 - - @tc.refute_empty [1] - end - - def test_refute_empty_triggered - @assertion_count = 2 - - assert_triggered "Expected [] to not be empty." do - @tc.refute_empty [] - end - end - - def test_refute_equal - @tc.refute_equal "blah", "yay" - end - - def test_refute_equal_triggered - assert_triggered 'Expected "blah" to not be equal to "blah".' do - @tc.refute_equal "blah", "blah" - end - end - - def test_refute_in_delta - @tc.refute_in_delta 0.0, 1.0 / 1000, 0.000001 - end - - def test_refute_in_delta_triggered - x = "0.1" - assert_triggered "Expected |0.0 - 0.001| (0.001) to not be <= #{x}." do - @tc.refute_in_delta 0.0, 1.0 / 1000, 0.1 - end - end - - def test_refute_in_epsilon - @tc.refute_in_epsilon 10_000, 9990-1 - end - - def test_refute_in_epsilon_triggered - assert_triggered "Expected |10000 - 9990| (10) to not be <= 10.0." do - @tc.refute_in_epsilon 10_000, 9990 - flunk - end - end - - def test_refute_includes - @assertion_count = 2 - - @tc.refute_includes [true], false - end - - def test_refute_includes_triggered - @assertion_count = 3 - - e = @tc.assert_raises Minitest::Assertion do - @tc.refute_includes [true], true - end - - expected = "Expected [true] to not include true." - assert_equal expected, e.message - end - - def test_refute_instance_of - @tc.refute_instance_of Array, "blah" - end - - def test_refute_instance_of_triggered - assert_triggered 'Expected "blah" to not be an instance of String.' do - @tc.refute_instance_of String, "blah" - end - end - - def test_refute_kind_of - @tc.refute_kind_of Array, "blah" - end - - def test_refute_kind_of_triggered - assert_triggered 'Expected "blah" to not be a kind of String.' do - @tc.refute_kind_of String, "blah" - end - end - - def test_refute_match - @assertion_count = 2 - @tc.refute_match(/\d+/, "blah blah blah") - end - - def test_refute_match_matcher_object - @assertion_count = 2 - pattern = Object.new - def pattern.=~ _; false end - @tc.refute_match pattern, 5 - end - - def test_refute_match_object_triggered - @assertion_count = 2 - - pattern = Object.new - def pattern.=~ _; true end - def pattern.inspect; "[Object]" end - - assert_triggered "Expected [Object] to not match 5." do - @tc.refute_match pattern, 5 - end - end - - def test_refute_match_triggered - @assertion_count = 2 - assert_triggered 'Expected /\w+/ to not match "blah blah blah".' do - @tc.refute_match(/\w+/, "blah blah blah") - end - end - - def test_refute_nil - @tc.refute_nil 42 - end - - def test_refute_nil_triggered - assert_triggered "Expected nil to not be nil." do - @tc.refute_nil nil - end - end - - def test_refute_operator - @tc.refute_operator 2, :<, 1 - end - - def test_refute_operator_bad_object - bad = Object.new - def bad.== _; true end - - @tc.refute_operator true, :equal?, bad - end - - def test_refute_operator_triggered - assert_triggered "Expected 2 to not be > 1." do - @tc.refute_operator 2, :>, 1 - end - end - - def test_refute_predicate - @tc.refute_predicate "42", :empty? - end - - def test_refute_predicate_triggered - assert_triggered 'Expected "" to not be empty?.' do - @tc.refute_predicate "", :empty? - end - end - - def test_refute_respond_to - @tc.refute_respond_to "blah", :rawr! - end - - def test_refute_respond_to_triggered - assert_triggered 'Expected "blah" to not respond to empty?.' do - @tc.refute_respond_to "blah", :empty? - end - end - - def test_refute_same - @tc.refute_same 1, 2 - end - - def test_refute_same_triggered - assert_triggered "Expected 1 (oid=N) to not be the same as 1 (oid=N)." do - @tc.refute_same 1, 1 - end - end - - def test_refute_path_exists - @tc.refute_path_exists "blah" - end - - def test_refute_path_exists_triggered - assert_triggered "Expected path '#{__FILE__}' to not exist." do - @tc.refute_path_exists __FILE__ - end - end - - def test_skip - @assertion_count = 0 - - assert_triggered "haha!", Minitest::Skip do - @tc.skip "haha!" - end - end - - def test_skip_until - @assertion_count = 0 - - t = Time.now - y, m, d = t.year, t.month, t.day - - assert_output "", /Stale skip_until \"not yet\" at .*?:\d+$/ do - @tc.skip_until y, m, d, "not yet" - end - - assert_triggered "not ready yet", Minitest::Skip do - @tc.skip_until y, m, d+1, "not ready yet" - end - end - - def util_msg exp, act, msg = nil - s = "Expected: #{exp.inspect}\n Actual: #{act.inspect}" - s = "#{msg}.\n#{s}" if msg - s - end - - def without_diff - old_diff = Minitest::Assertions.diff - Minitest::Assertions.diff = nil - - yield - ensure - Minitest::Assertions.diff = old_diff - end -end - -class TestMinitestAssertionHelpers < Minitest::Test - def assert_mu_pp exp, input, raw = false - act = mu_pp input - - if String === input && !raw then - assert_equal "\"#{exp}\"", act - else - assert_equal exp, act - end - end - - def assert_mu_pp_for_diff exp, input, raw = false - act = mu_pp_for_diff input - - if String === input && !raw then - assert_equal "\"#{exp}\"", act - else - assert_equal exp, act - end - end - - def test_diff_equal - msg = "No visible difference in the String#inspect output. - You should look at the implementation of #== on String or its members. - \"blahblahblahblahblahblahblahblahblahblah\"".gsub(/^ +/, "") - - o1 = "blah" * 10 - o2 = "blah" * 10 - def o1.== _ - false - end - - assert_equal msg, diff(o1, o2) - end - - def test_diff_str_mixed - msg = <<-'EOM'.gsub(/^ {10}/, "") # NOTE single quotes on heredoc - --- expected - +++ actual - @@ -1 +1 @@ - -"A\\n\nB" - +"A\n\\nB" - EOM - - exp = "A\\n\nB" - act = "A\n\\nB" - - assert_equal msg, diff(exp, act) - end - - def test_diff_str_multiline - msg = <<-'EOM'.gsub(/^ {10}/, "") # NOTE single quotes on heredoc - --- expected - +++ actual - @@ -1,2 +1,2 @@ - "A - -B" - +C" - EOM - - exp = "A\nB" - act = "A\nC" - - assert_equal msg, diff(exp, act) - end - - def test_diff_str_simple - msg = <<-'EOM'.gsub(/^ {10}/, "").chomp # NOTE single quotes on heredoc - Expected: "A" - Actual: "B" - EOM - - exp = "A" - act = "B" - - assert_equal msg, diff(exp, act) - end - - def test_message - assert_equal "blah2.", message { "blah2" }.call - assert_equal "blah2.", message("") { "blah2" }.call - assert_equal "blah1.\nblah2.", message(:blah1) { "blah2" }.call - assert_equal "blah1.\nblah2.", message("blah1") { "blah2" }.call - - message = proc { "blah1" } - assert_equal "blah1.\nblah2.", message(message) { "blah2" }.call - - message = message { "blah1" } - assert_equal "blah1.\nblah2.", message(message) { "blah2" }.call - end - - def test_message_deferred - var = nil - - msg = message { var = "blah" } - - assert_nil var - - msg.call - - assert_equal "blah", var - end - - def test_mu_pp - assert_mu_pp 42.inspect, 42 - assert_mu_pp %w[a b c].inspect, %w[a b c] - assert_mu_pp "A B", "A B" - assert_mu_pp "A\\nB", "A\nB" - assert_mu_pp "A\\\\nB", 'A\nB' # notice single quotes - end - - def test_mu_pp_for_diff - assert_mu_pp_for_diff "#", Object.new - assert_mu_pp_for_diff "A B", "A B" - assert_mu_pp_for_diff [1, 2, 3].inspect, [1, 2, 3] - assert_mu_pp_for_diff "A\nB", "A\nB" - end - - def test_mu_pp_for_diff_str_bad_encoding - str = "\666".force_encoding Encoding::UTF_8 - exp = "# encoding: UTF-8\n# valid: false\n\"\\xB6\"" - - assert_mu_pp_for_diff exp, str, :raw - end - - def test_mu_pp_for_diff_str_bad_encoding_both - str = "\666A\\n\nB".force_encoding Encoding::UTF_8 - exp = "# encoding: UTF-8\n# valid: false\n\"\\xB6A\\\\n\\nB\"" - - assert_mu_pp_for_diff exp, str, :raw - end - - def test_mu_pp_for_diff_str_encoding - str = "A\nB".b - exp = "# encoding: ASCII-8BIT\n# valid: true\n\"A\nB\"" - - assert_mu_pp_for_diff exp, str, :raw - end - - def test_mu_pp_for_diff_str_encoding_both - str = "A\\n\nB".b - exp = "# encoding: ASCII-8BIT\n# valid: true\n\"A\\\\n\\nB\"" - - assert_mu_pp_for_diff exp, str, :raw - end - - def test_mu_pp_for_diff_str_nerd - assert_mu_pp_for_diff "A\\nB\\\\nC", "A\nB\\nC" - assert_mu_pp_for_diff "\\nB\\\\nC", "\nB\\nC" - assert_mu_pp_for_diff "\\nB\\\\n", "\nB\\n" - assert_mu_pp_for_diff "\\n\\\\n", "\n\\n" - assert_mu_pp_for_diff "\\\\n\\n", "\\n\n" - assert_mu_pp_for_diff "\\\\nB\\n", "\\nB\n" - assert_mu_pp_for_diff "\\\\nB\\nC", "\\nB\nC" - assert_mu_pp_for_diff "A\\\\n\\nB", "A\\n\nB" - assert_mu_pp_for_diff "A\\n\\\\nB", "A\n\\nB" - assert_mu_pp_for_diff "\\\\n\\n", "\\n\n" - assert_mu_pp_for_diff "\\n\\\\n", "\n\\n" - end - - def test_mu_pp_for_diff_str_normal - assert_mu_pp_for_diff "", "" - assert_mu_pp_for_diff "A\\n\n", "A\\n" - assert_mu_pp_for_diff "A\\n\nB", "A\\nB" - assert_mu_pp_for_diff "A\n", "A\n" - assert_mu_pp_for_diff "A\nB", "A\nB" - assert_mu_pp_for_diff "\\n\n", "\\n" - assert_mu_pp_for_diff "\n", "\n" - assert_mu_pp_for_diff "\\n\nA", "\\nA" - assert_mu_pp_for_diff "\nA", "\nA" - end - - def test_mu_pp_str_bad_encoding - str = "\666".force_encoding Encoding::UTF_8 - exp = "# encoding: UTF-8\n# valid: false\n\"\\xB6\"" - - assert_mu_pp exp, str, :raw - end - - def test_mu_pp_str_encoding - str = "A\nB".b - exp = "# encoding: ASCII-8BIT\n# valid: true\n\"A\\nB\"" - - assert_mu_pp exp, str, :raw - end - - def test_mu_pp_str_immutable - printer = Class.new { extend Minitest::Assertions } - str = "test".freeze - assert_equal '"test"', printer.mu_pp(str) - end -end diff --git a/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_benchmark.rb b/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_benchmark.rb deleted file mode 100644 index 88abf77c1..000000000 --- a/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_benchmark.rb +++ /dev/null @@ -1,137 +0,0 @@ -require "minitest/autorun" -require "minitest/benchmark" - -## -# Used to verify data: -# http://www.wolframalpha.com/examples/RegressionAnalysis.html - -class TestMinitestBenchmark < Minitest::Test - def test_cls_bench_exp - assert_equal [2, 4, 8, 16, 32], Minitest::Benchmark.bench_exp(2, 32, 2) - end - - def test_cls_bench_linear - assert_equal [2, 4, 6, 8, 10], Minitest::Benchmark.bench_linear(2, 10, 2) - end - - def test_cls_runnable_methods - assert_equal [], Minitest::Benchmark.runnable_methods - - c = Class.new(Minitest::Benchmark) do - def bench_blah - end - end - - assert_equal ["bench_blah"], c.runnable_methods - end - - def test_cls_bench_range - assert_equal [1, 10, 100, 1_000, 10_000], Minitest::Benchmark.bench_range - end - - def test_fit_exponential_clean - x = [1.0, 2.0, 3.0, 4.0, 5.0] - y = x.map { |n| 1.1 * Math.exp(2.1 * n) } - - assert_fit :exponential, x, y, 1.0, 1.1, 2.1 - end - - def test_fit_exponential_noisy - x = [1.0, 1.9, 2.6, 3.4, 5.0] - y = [12, 10, 8.2, 6.9, 5.9] - - # verified with Numbers and R - assert_fit :exponential, x, y, 0.95, 13.81148, -0.1820 - end - - def test_fit_logarithmic_clean - x = [1.0, 2.0, 3.0, 4.0, 5.0] - y = x.map { |n| 1.1 + 2.1 * Math.log(n) } - - assert_fit :logarithmic, x, y, 1.0, 1.1, 2.1 - end - - def test_fit_logarithmic_noisy - x = [1.0, 2.0, 3.0, 4.0, 5.0] - # Generated with - # y = x.map { |n| jitter = 0.999 + 0.002 * rand; (Math.log(n) ) * jitter } - y = [0.0, 0.6935, 1.0995, 1.3873, 1.6097] - - assert_fit :logarithmic, x, y, 0.95, 0, 1 - end - - def test_fit_constant_clean - x = (1..5).to_a - y = [5.0, 5.0, 5.0, 5.0, 5.0] - - assert_fit :linear, x, y, nil, 5.0, 0 - end - - def test_fit_constant_noisy - x = (1..5).to_a - y = [1.0, 1.2, 1.0, 0.8, 1.0] - - # verified in numbers and R - assert_fit :linear, x, y, nil, 1.12, -0.04 - end - - def test_fit_linear_clean - # y = m * x + b where m = 2.2, b = 3.1 - x = (1..5).to_a - y = x.map { |n| 2.2 * n + 3.1 } - - assert_fit :linear, x, y, 1.0, 3.1, 2.2 - end - - def test_fit_linear_noisy - x = [ 60, 61, 62, 63, 65] - y = [3.1, 3.6, 3.8, 4.0, 4.1] - - # verified in numbers and R - assert_fit :linear, x, y, 0.8315, -7.9635, 0.1878 - end - - def test_fit_power_clean - # y = A x ** B, where B = b and A = e ** a - # if, A = 1, B = 2, then - - x = [1.0, 2.0, 3.0, 4.0, 5.0] - y = [1.0, 4.0, 9.0, 16.0, 25.0] - - assert_fit :power, x, y, 1.0, 1.0, 2.0 - end - - def test_fit_power_noisy - # from www.engr.uidaho.edu/thompson/courses/ME330/lecture/least_squares.html - x = [10, 12, 15, 17, 20, 22, 25, 27, 30, 32, 35] - y = [95, 105, 125, 141, 173, 200, 253, 298, 385, 459, 602] - - # verified in numbers - assert_fit :power, x, y, 0.90, 2.6217, 1.4556 - - # income to % of households below income amount - # http://library.wolfram.com/infocenter/Conferences/6461/PowerLaws.nb - x = [15_000, 25_000, 35_000, 50_000, 75_000, 100_000] - y = [0.154, 0.283, 0.402, 0.55, 0.733, 0.843] - - # verified in numbers - assert_fit :power, x, y, 0.96, 3.119e-5, 0.8959 - end - - def assert_fit msg, x, y, fit, exp_a, exp_b - bench = Minitest::Benchmark.new :blah - - a, b, rr = bench.send "fit_#{msg}", x, y - - assert_operator rr, :>=, fit if fit - assert_in_delta exp_a, a - assert_in_delta exp_b, b - end -end - -describe "my class Bench" do - klass = self - it "should provide bench methods" do - klass.must_respond_to :bench - end -end diff --git a/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_mock.rb b/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_mock.rb deleted file mode 100644 index 7128d5bf1..000000000 --- a/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_mock.rb +++ /dev/null @@ -1,872 +0,0 @@ -require "minitest/autorun" - -class TestMinitestMock < Minitest::Test - parallelize_me! - - def setup - @mock = Minitest::Mock.new.expect(:foo, nil) - @mock.expect(:meaning_of_life, 42) - end - - def test_create_stub_method - assert_nil @mock.foo - end - - def test_allow_return_value_specification - assert_equal 42, @mock.meaning_of_life - end - - def test_blow_up_if_not_called - @mock.foo - - util_verify_bad "expected meaning_of_life() => 42" - end - - def test_not_blow_up_if_everything_called - @mock.foo - @mock.meaning_of_life - - assert_mock @mock - end - - def test_allow_expectations_to_be_added_after_creation - @mock.expect(:bar, true) - assert @mock.bar - end - - def test_not_verify_if_new_expected_method_is_not_called - @mock.foo - @mock.meaning_of_life - @mock.expect(:bar, true) - - util_verify_bad "expected bar() => true" - end - - def test_blow_up_on_wrong_number_of_arguments - @mock.foo - @mock.meaning_of_life - @mock.expect(:sum, 3, [1, 2]) - - e = assert_raises ArgumentError do - @mock.sum - end - - assert_equal "mocked method :sum expects 2 arguments, got 0", e.message - end - - def test_return_mock_does_not_raise - retval = Minitest::Mock.new - mock = Minitest::Mock.new - mock.expect(:foo, retval) - mock.foo - - assert_mock mock - end - - def test_mock_args_does_not_raise - arg = Minitest::Mock.new - mock = Minitest::Mock.new - mock.expect(:foo, nil, [arg]) - mock.foo(arg) - - assert_mock mock - end - - def test_set_expectation_on_special_methods - mock = Minitest::Mock.new - - mock.expect :object_id, "received object_id" - assert_equal "received object_id", mock.object_id - - mock.expect :respond_to_missing?, "received respond_to_missing?" - assert_equal "received respond_to_missing?", mock.respond_to_missing? - - mock.expect :===, "received ===" - assert_equal "received ===", mock.=== - - mock.expect :inspect, "received inspect" - assert_equal "received inspect", mock.inspect - - mock.expect :to_s, "received to_s" - assert_equal "received to_s", mock.to_s - - mock.expect :public_send, "received public_send" - assert_equal "received public_send", mock.public_send - - mock.expect :send, "received send" - assert_equal "received send", mock.send - - assert_mock mock - end - - def test_expectations_can_be_satisfied_via_send - @mock.send :foo - @mock.send :meaning_of_life - - assert_mock @mock - end - - def test_expectations_can_be_satisfied_via_public_send - skip "Doesn't run on 1.8" if RUBY_VERSION < "1.9" - - @mock.public_send :foo - @mock.public_send :meaning_of_life - - assert_mock @mock - end - - def test_blow_up_on_wrong_arguments - @mock.foo - @mock.meaning_of_life - @mock.expect(:sum, 3, [1, 2]) - - e = assert_raises MockExpectationError do - @mock.sum(2, 4) - end - - exp = "mocked method :sum called with unexpected arguments [2, 4]" - assert_equal exp, e.message - end - - def test_expect_with_non_array_args - e = assert_raises ArgumentError do - @mock.expect :blah, 3, false - end - - assert_equal "args must be an array", e.message - end - - def test_respond_appropriately - assert @mock.respond_to?(:foo) - assert @mock.respond_to?(:foo, true) - assert @mock.respond_to?("foo") - assert !@mock.respond_to?(:bar) - end - - def test_no_method_error_on_unexpected_methods - e = assert_raises NoMethodError do - @mock.bar - end - - expected = "unmocked method :bar, expected one of [:foo, :meaning_of_life]" - - assert_equal expected, e.message - end - - def test_assign_per_mock_return_values - a = Minitest::Mock.new - b = Minitest::Mock.new - - a.expect(:foo, :a) - b.expect(:foo, :b) - - assert_equal :a, a.foo - assert_equal :b, b.foo - end - - def test_do_not_create_stub_method_on_new_mocks - a = Minitest::Mock.new - a.expect(:foo, :a) - - assert !Minitest::Mock.new.respond_to?(:foo) - end - - def test_mock_is_a_blank_slate - @mock.expect :kind_of?, true, [String] - @mock.expect :==, true, [1] - - assert @mock.kind_of?(String), "didn't mock :kind_of\?" - assert @mock == 1, "didn't mock :==" - end - - def test_verify_allows_called_args_to_be_loosely_specified - mock = Minitest::Mock.new - mock.expect :loose_expectation, true, [Integer] - mock.loose_expectation 1 - - assert_mock mock - end - - def test_verify_raises_with_strict_args - mock = Minitest::Mock.new - mock.expect :strict_expectation, true, [2] - - e = assert_raises MockExpectationError do - mock.strict_expectation 1 - end - - exp = "mocked method :strict_expectation called with unexpected arguments [1]" - assert_equal exp, e.message - end - - def test_method_missing_empty - mock = Minitest::Mock.new - - mock.expect :a, nil - - mock.a - - e = assert_raises MockExpectationError do - mock.a - end - - assert_equal "No more expects available for :a: []", e.message - end - - def test_same_method_expects_are_verified_when_all_called - mock = Minitest::Mock.new - mock.expect :foo, nil, [:bar] - mock.expect :foo, nil, [:baz] - - mock.foo :bar - mock.foo :baz - - assert_mock mock - end - - def test_same_method_expects_blow_up_when_not_all_called - mock = Minitest::Mock.new - mock.expect :foo, nil, [:bar] - mock.expect :foo, nil, [:baz] - - mock.foo :bar - - e = assert_raises(MockExpectationError) { mock.verify } - - exp = "expected foo(:baz) => nil, got [foo(:bar) => nil]" - - assert_equal exp, e.message - end - - def test_same_method_expects_with_same_args_blow_up_when_not_all_called - mock = Minitest::Mock.new - mock.expect :foo, nil, [:bar] - mock.expect :foo, nil, [:bar] - - mock.foo :bar - - e = assert_raises(MockExpectationError) { mock.verify } - - exp = "expected foo(:bar) => nil, got [foo(:bar) => nil]" - - assert_equal exp, e.message - end - - def test_verify_passes_when_mock_block_returns_true - mock = Minitest::Mock.new - mock.expect :foo, nil do - true - end - - mock.foo - - assert_mock mock - end - - def test_mock_block_is_passed_function_params - arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" } - mock = Minitest::Mock.new - mock.expect :foo, nil do |a1, a2, a3| - a1 == arg1 && a2 == arg2 && a3 == arg3 - end - - mock.foo arg1, arg2, arg3 - - assert_mock mock - end - - def test_mock_block_is_passed_function_block - mock = Minitest::Mock.new - block = proc { "bar" } - mock.expect :foo, nil do |arg, &blk| - arg == "foo" && - blk == block - end - mock.foo "foo", &block - assert_mock mock - end - - def test_verify_fails_when_mock_block_returns_false - mock = Minitest::Mock.new - mock.expect :foo, nil do - false - end - - e = assert_raises(MockExpectationError) { mock.foo } - exp = "mocked method :foo failed block w/ []" - - assert_equal exp, e.message - end - - def test_mock_block_throws_if_args_passed - mock = Minitest::Mock.new - - e = assert_raises(ArgumentError) do - mock.expect :foo, nil, [:a, :b, :c] do - true - end - end - - exp = "args ignored when block given" - - assert_equal exp, e.message - end - - def test_mock_returns_retval_when_called_with_block - mock = Minitest::Mock.new - mock.expect(:foo, 32) do - true - end - - rs = mock.foo - - assert_equal rs, 32 - end - - def util_verify_bad exp - e = assert_raises MockExpectationError do - @mock.verify - end - - assert_equal exp, e.message - end - - def test_mock_called_via_send - mock = Minitest::Mock.new - mock.expect(:foo, true) - - mock.send :foo - assert_mock mock - end - - def test_mock_called_via___send__ - mock = Minitest::Mock.new - mock.expect(:foo, true) - - mock.__send__ :foo - assert_mock mock - end - - def test_mock_called_via_send_with_args - mock = Minitest::Mock.new - mock.expect(:foo, true, [1, 2, 3]) - - mock.send(:foo, 1, 2, 3) - assert_mock mock - end - -end - -require "minitest/metametameta" - -class TestMinitestStub < Minitest::Test - # Do not parallelize since we're calling stub on class methods - - def setup - super - Minitest::Test.reset - - @tc = Minitest::Test.new "fake tc" - @assertion_count = 1 - end - - def teardown - super - assert_equal @assertion_count, @tc.assertions if self.passed? - end - - class Time - def self.now - 24 - end - end - - def assert_stub val_or_callable - @assertion_count += 1 - - t = Time.now.to_i - - Time.stub :now, val_or_callable do - @tc.assert_equal 42, Time.now - end - - @tc.assert_operator Time.now.to_i, :>=, t - end - - def test_stub_private_module_method - @assertion_count += 1 - - t0 = Time.now - - self.stub :sleep, nil do - @tc.assert_nil sleep(10) - end - - @tc.assert_operator Time.now - t0, :<=, 1 - end - - def test_stub_private_module_method_indirect - @assertion_count += 1 - - fail_clapper = Class.new do - def fail_clap - raise - :clap - end - end.new - - fail_clapper.stub :raise, nil do |safe_clapper| - @tc.assert_equal :clap, safe_clapper.fail_clap # either form works - @tc.assert_equal :clap, fail_clapper.fail_clap # yay closures - end - end - - def test_stub_public_module_method - Math.stub :log10, :stubbed do - @tc.assert_equal :stubbed, Math.log10(1000) - end - end - - def test_stub_value - assert_stub 42 - end - - def test_stub_block - assert_stub lambda { 42 } - end - - def test_stub_block_args - @assertion_count += 1 - - t = Time.now.to_i - - Time.stub :now, lambda { |n| n * 2 } do - @tc.assert_equal 42, Time.now(21) - end - - @tc.assert_operator Time.now.to_i, :>=, t - end - - def test_stub_callable - obj = Object.new - - def obj.call - 42 - end - - assert_stub obj - end - - def test_stub_yield_self - obj = "foo" - - val = obj.stub :to_s, "bar" do |s| - s.to_s - end - - @tc.assert_equal "bar", val - end - - def test_dynamic_method - @assertion_count = 2 - - dynamic = Class.new do - def self.respond_to? meth - meth == :found - end - - def self.method_missing meth, *args, &block - if meth == :found - false - else - super - end - end - end - - val = dynamic.stub(:found, true) do |s| - s.found - end - - @tc.assert_equal true, val - @tc.assert_equal false, dynamic.found - end - - def test_stub_NameError - e = @tc.assert_raises NameError do - Time.stub :nope_nope_nope, 42 do - # do nothing - end - end - - exp = /undefined method `nope_nope_nope' for( class)? `#{self.class}::Time'/ - assert_match exp, e.message - end - - def test_mock_with_yield - mock = Minitest::Mock.new - mock.expect(:write, true) do - true - end - rs = nil - - File.stub :open, true, mock do - File.open "foo.txt", "r" do |f| - rs = f.write - end - end - @tc.assert_equal true, rs - end - - alias test_stub_value__old test_stub_value # TODO: remove/rename - - ## Permutation Sets: - - # [:value, :lambda] - # [:*, :block, :block_call] - # [:**, :block_args] - # - # Where: - # - # :value = a normal value - # :lambda = callable or lambda - # :* = no block - # :block = normal block - # :block_call = :lambda invokes the block (N/A for :value) - # :** = no args - # :args = args passed to stub - - ## Permutations - - # [:call, :*, :**] =>5 callable+block FIX: CALL BOTH (bug) - # [:call, :*, :**] =>6 callable - - # [:lambda, :*, :**] => lambda result - - # [:lambda, :*, :args] => lambda result NO ARGS - - # [:lambda, :block, :**] =>5 lambda result FIX: CALL BOTH (bug) - # [:lambda, :block, :**] =>6 lambda result - - # [:lambda, :block, :args] =>5 lambda result FIX: CALL BOTH (bug) - # [:lambda, :block, :args] =>6 lambda result - # [:lambda, :block, :args] =>7 raise ArgumentError - - # [:lambda, :block_call, :**] =>5 lambda FIX: BUG!-not passed block to lambda - # [:lambda, :block_call, :**] =>6 lambda+block result - - # [:lambda, :block_call, :args] =>5 lambda FIX: BUG!-not passed block to lambda - # [:lambda, :block_call, :args] =>6 lambda+block result - - # [:value, :*, :**] => value - - # [:value, :*, :args] => value, ignore args - - # [:value, :block, :**] =>5 value, call block - # [:value, :block, :**] =>6 value - - # [:value, :block, :args] =>5 value, call block w/ args - # [:value, :block, :args] =>6 value, call block w/ args, deprecated - # [:value, :block, :args] =>7 raise ArgumentError - - # [:value, :block_call, :**] => N/A - - # [:value, :block_call, :args] => N/A - - class Bar - def call - puts "hi" - end - end - - class Foo - def self.blocking - yield - end - end - - class Thingy - def self.identity arg - arg - end - end - - def test_stub_callable_block_5 # from tenderlove - @assertion_count += 1 - Foo.stub5 :blocking, Bar.new do - @tc.assert_output "hi\n", "" do - Foo.blocking do - @tc.flunk "shouldn't ever hit this" - end - end - end - end - - def test_stub_callable_block_6 # from tenderlove - skip_stub6 - - @assertion_count += 1 - Foo.stub6 :blocking, Bar.new do - @tc.assert_output "hi\n", "" do - Foo.blocking do - @tc.flunk "shouldn't ever hit this" - end - end - end - end - - def test_stub_lambda - Thread.stub :new, lambda { 21+21 } do - @tc.assert_equal 42, Thread.new - end - end - - def test_stub_lambda_args - Thread.stub :new, lambda { 21+21 }, :wtf do - @tc.assert_equal 42, Thread.new - end - end - - def test_stub_lambda_block_5 - Thread.stub5 :new, lambda { 21+21 } do - result = Thread.new do - @tc.flunk "shouldn't ever hit this" - end - @tc.assert_equal 42, result - end - end - - def test_stub_lambda_block_6 - skip_stub6 - - Thread.stub6 :new, lambda { 21+21 } do - result = Thread.new do - @tc.flunk "shouldn't ever hit this" - end - @tc.assert_equal 42, result - end - end - - def test_stub_lambda_block_args_5 - @assertion_count += 1 - Thingy.stub5 :identity, lambda { |y| @tc.assert_equal :nope, y; 21+21 }, :WTF? do - result = Thingy.identity :nope do |x| - @tc.flunk "shouldn't reach this" - end - @tc.assert_equal 42, result - end - end - - def test_stub_lambda_block_args_6 - skip_stub6 - - @assertion_count += 1 - Thingy.stub6 :identity, lambda { |y| @tc.assert_equal :nope, y; 21+21 }, :WTF? do - result = Thingy.identity :nope do |x| - @tc.flunk "shouldn't reach this" - end - @tc.assert_equal 42, result - end - end - - def test_stub_lambda_block_args_6_2 - skip_stub6 - - @tc.assert_raises ArgumentError do - Thingy.stub6_2 :identity, lambda { |y| :__not_run__ }, :WTF? do - # doesn't matter - end - end - end - - def test_stub_lambda_block_call_5 - @assertion_count += 1 - rs = nil - io = StringIO.new "", "w" - File.stub5 :open, lambda { |p, m, &blk| blk and blk.call io } do - File.open "foo.txt", "r" do |f| - rs = f && f.write("woot") - end - end - @tc.assert_equal 4, rs - @tc.assert_equal "woot", io.string - end - - def test_stub_lambda_block_call_6 - skip_stub6 - - @assertion_count += 1 - rs = nil - io = StringIO.new "", "w" - File.stub6 :open, lambda { |p, m, &blk| blk.call io } do - File.open "foo.txt", "r" do |f| - rs = f.write("woot") - end - end - @tc.assert_equal 4, rs - @tc.assert_equal "woot", io.string - end - - def test_stub_lambda_block_call_args_5 - @assertion_count += 1 - rs = nil - io = StringIO.new "", "w" - File.stub5(:open, lambda { |p, m, &blk| blk and blk.call io }, :WTF?) do - File.open "foo.txt", "r" do |f| - rs = f.write("woot") - end - end - @tc.assert_equal 4, rs - @tc.assert_equal "woot", io.string - end - - def test_stub_lambda_block_call_args_6 - skip_stub6 - - @assertion_count += 1 - rs = nil - io = StringIO.new "", "w" - File.stub6(:open, lambda { |p, m, &blk| blk.call io }, :WTF?) do - File.open "foo.txt", "r" do |f| - rs = f.write("woot") - end - end - @tc.assert_equal 4, rs - @tc.assert_equal "woot", io.string - end - - def test_stub_lambda_block_call_args_6_2 - skip_stub6 - - @assertion_count += 2 - rs = nil - io = StringIO.new "", "w" - @tc.assert_raises ArgumentError do - File.stub6_2(:open, lambda { |p, m, &blk| blk.call io }, :WTF?) do - File.open "foo.txt", "r" do |f| - rs = f.write("woot") - end - end - end - @tc.assert_nil rs - @tc.assert_equal "", io.string - end - - def test_stub_value - Thread.stub :new, 42 do - result = Thread.new - @tc.assert_equal 42, result - end - end - - def test_stub_value_args - Thread.stub :new, 42, :WTF? do - result = Thread.new - @tc.assert_equal 42, result - end - end - - def test_stub_value_block_5 - @assertion_count += 1 - Thread.stub5 :new, 42 do - result = Thread.new do - @tc.assert true - end - @tc.assert_equal 42, result - end - end - - def test_stub_value_block_6 - skip_stub6 - - Thread.stub6 :new, 42 do - result = Thread.new do - @tc.flunk "shouldn't hit this" - end - @tc.assert_equal 42, result - end - end - - def test_stub_value_block_args_5 - @assertion_count += 2 - rs = nil - io = StringIO.new "", "w" - File.stub5 :open, :value, io do - result = File.open "foo.txt", "r" do |f| - rs = f.write("woot") - end - @tc.assert_equal :value, result - end - @tc.assert_equal 4, rs - @tc.assert_equal "woot", io.string - end - - def test_stub_value_block_args_5__break_if_not_passed - e = @tc.assert_raises NoMethodError do - File.stub5 :open, :return_value do # intentionally bad setup w/ no args - File.open "foo.txt", "r" do |f| - f.write "woot" - end - end - end - exp = "undefined method `write' for nil:NilClass" - assert_equal exp, e.message - end - - def test_stub_value_block_args_6 - skip_stub6 - - @assertion_count += 2 - rs = nil - io = StringIO.new "", "w" - assert_deprecated do - File.stub6 :open, :value, io do - result = File.open "foo.txt", "r" do |f| - rs = f.write("woot") - end - @tc.assert_equal :value, result - end - end - @tc.assert_equal 4, rs - @tc.assert_equal "woot", io.string - end - - def test_stub_value_block_args_6_2 - skip_stub6 - - @assertion_count += 2 - rs = nil - io = StringIO.new "", "w" - @tc.assert_raises ArgumentError do - File.stub6_2 :open, :value, io do - result = File.open "foo.txt", "r" do |f| - @tc.flunk "shouldn't hit this" - end - @tc.assert_equal :value, result - end - end - @tc.assert_nil rs - @tc.assert_equal "", io.string - end - - def assert_deprecated re = /deprecated/ - assert_output "", re do - yield - end - end - - def skip_stub6 - skip "not yet" unless STUB6 - end -end - -STUB6 = ENV["STUB6"] - -if STUB6 then - require "minitest/mock6" if STUB6 -else - class Object - alias stub5 stub - alias stub6 stub - end -end diff --git a/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_reporter.rb b/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_reporter.rb deleted file mode 100644 index 6619d03d4..000000000 --- a/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_reporter.rb +++ /dev/null @@ -1,299 +0,0 @@ -require "minitest/autorun" -require "minitest/metametameta" - -class Runnable - def woot - assert true - end -end - -class TestMinitestReporter < MetaMetaMetaTestCase - - attr_accessor :r, :io - - def new_composite_reporter - reporter = Minitest::CompositeReporter.new - reporter << Minitest::SummaryReporter.new(self.io) - reporter << Minitest::ProgressReporter.new(self.io) - - def reporter.first - reporters.first - end - - def reporter.results - first.results - end - - def reporter.count - first.count - end - - def reporter.assertions - first.assertions - end - - reporter - end - - def setup - self.io = StringIO.new("") - self.r = new_composite_reporter - end - - def error_test - unless defined? @et then - @et = Minitest::Test.new(:woot) - @et.failures << Minitest::UnexpectedError.new(begin - raise "no" - rescue => e - e - end) - @et = Minitest::Result.from @et - end - @et - end - - def fail_test - unless defined? @ft then - @ft = Minitest::Test.new(:woot) - @ft.failures << begin - raise Minitest::Assertion, "boo" - rescue Minitest::Assertion => e - e - end - @ft = Minitest::Result.from @ft - end - @ft - end - - def passing_test - @pt ||= Minitest::Result.from Minitest::Test.new(:woot) - end - - def skip_test - unless defined? @st then - @st = Minitest::Test.new(:woot) - @st.failures << begin - raise Minitest::Skip - rescue Minitest::Assertion => e - e - end - @st = Minitest::Result.from @st - end - @st - end - - def test_to_s - r.record passing_test - r.record fail_test - assert_match "woot", r.first.to_s - end - - def test_passed_eh_empty - assert_predicate r, :passed? - end - - def test_passed_eh_failure - r.results << fail_test - - refute_predicate r, :passed? - end - - SKIP_MSG = "\n\nYou have skipped tests. Run with --verbose for details." - - def test_passed_eh_error - r.start - - r.results << error_test - - refute_predicate r, :passed? - - r.report - - refute_match SKIP_MSG, io.string - end - - def test_passed_eh_skipped - r.start - r.results << skip_test - assert r.passed? - - restore_env do - r.report - end - - assert_match SKIP_MSG, io.string - end - - def test_passed_eh_skipped_verbose - r.first.options[:verbose] = true - - r.start - r.results << skip_test - assert r.passed? - r.report - - refute_match SKIP_MSG, io.string - end - - def test_start - r.start - - exp = "Run options: \n\n# Running:\n\n" - - assert_equal exp, io.string - end - - def test_record_pass - r.record passing_test - - assert_equal ".", io.string - assert_empty r.results - assert_equal 1, r.count - assert_equal 0, r.assertions - end - - def test_record_fail - fail_test = self.fail_test - r.record fail_test - - assert_equal "F", io.string - assert_equal [fail_test], r.results - assert_equal 1, r.count - assert_equal 0, r.assertions - end - - def test_record_error - error_test = self.error_test - r.record error_test - - assert_equal "E", io.string - assert_equal [error_test], r.results - assert_equal 1, r.count - assert_equal 0, r.assertions - end - - def test_record_skip - skip_test = self.skip_test - r.record skip_test - - assert_equal "S", io.string - assert_equal [skip_test], r.results - assert_equal 1, r.count - assert_equal 0, r.assertions - end - - def test_report_empty - r.start - r.report - - exp = clean <<-EOM - Run options: - - # Running: - - - - Finished in 0.00 - - 0 runs, 0 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_equal exp, normalize_output(io.string) - end - - def test_report_passing - r.start - r.record passing_test - r.report - - exp = clean <<-EOM - Run options: - - # Running: - - . - - Finished in 0.00 - - 1 runs, 0 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_equal exp, normalize_output(io.string) - end - - def test_report_failure - r.start - r.record fail_test - r.report - - exp = clean <<-EOM - Run options: - - # Running: - - F - - Finished in 0.00 - - 1) Failure: - Minitest::Test#woot [FILE:LINE]: - boo - - 1 runs, 0 assertions, 1 failures, 0 errors, 0 skips - EOM - - assert_equal exp, normalize_output(io.string) - end - - def test_report_error - r.start - r.record error_test - r.report - - exp = clean <<-EOM - Run options: - - # Running: - - E - - Finished in 0.00 - - 1) Error: - Minitest::Test#woot: - RuntimeError: no - FILE:LINE:in `error_test' - FILE:LINE:in `test_report_error' - - 1 runs, 0 assertions, 0 failures, 1 errors, 0 skips - EOM - - assert_equal exp, normalize_output(io.string) - end - - def test_report_skipped - r.start - r.record skip_test - - restore_env do - r.report - end - - exp = clean <<-EOM - Run options: - - # Running: - - S - - Finished in 0.00 - - 1 runs, 0 assertions, 0 failures, 0 errors, 1 skips - - You have skipped tests. Run with --verbose for details. - EOM - - assert_equal exp, normalize_output(io.string) - end -end diff --git a/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_spec.rb b/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_spec.rb deleted file mode 100644 index 5af4deef2..000000000 --- a/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_spec.rb +++ /dev/null @@ -1,1041 +0,0 @@ -# encoding: utf-8 -require "minitest/metametameta" -require "stringio" - -class MiniSpecA < Minitest::Spec; end -class MiniSpecB < Minitest::Test; extend Minitest::Spec::DSL; end -class MiniSpecC < MiniSpecB; end -class NamedExampleA < MiniSpecA; end -class NamedExampleB < MiniSpecB; end -class NamedExampleC < MiniSpecC; end -class ExampleA; end -class ExampleB < ExampleA; end - -describe Minitest::Spec do - # helps to deal with 2.4 deprecation of Fixnum for Integer - Int = 1.class - - # do not parallelize this suite... it just can"t handle it. - - def assert_triggered expected = "blah", klass = Minitest::Assertion - @assertion_count += 1 - - e = assert_raises(klass) do - yield - end - - msg = e.message.sub(/(---Backtrace---).*/m, '\1') - msg.gsub!(/\(oid=[-0-9]+\)/, "(oid=N)") - msg.gsub!(/(\d\.\d{6})\d+/, '\1xxx') # normalize: ruby version, impl, platform - msg.gsub!(/:0x[Xa-fA-F0-9]{4,}[ @].+?>/, ":0xXXXXXX@PATH>") - - if expected - @assertion_count += 1 - case expected - when String then - assert_equal expected, msg - when Regexp then - @assertion_count += 1 - assert_match expected, msg - else - flunk "Unknown: #{expected.inspect}" - end - end - end - - before do - @assertion_count = 4 - end - - after do - _(self.assertions).must_equal @assertion_count if passed? and not skipped? - end - - it "needs to be able to catch a Minitest::Assertion exception" do - @assertion_count = 1 - - assert_triggered "Expected 1 to not be equal to 1." do - _(1).wont_equal 1 - end - end - - it "needs to check for file existence" do - @assertion_count = 3 - - _(_(__FILE__).path_must_exist).must_equal true - - assert_triggered "Expected path 'blah' to exist." do - _("blah").path_must_exist - end - end - - it "needs to check for file non-existence" do - @assertion_count = 3 - - _(_("blah").path_wont_exist).must_equal false - - assert_triggered "Expected path '#{__FILE__}' to not exist." do - _(__FILE__).path_wont_exist - end - end - - it "needs to be sensible about must_include order" do - @assertion_count += 3 # must_include is 2 assertions - - _(_([1, 2, 3]).must_include(2)).must_equal true - - assert_triggered "Expected [1, 2, 3] to include 5." do - _([1, 2, 3]).must_include 5 - end - - assert_triggered "msg.\nExpected [1, 2, 3] to include 5." do - _([1, 2, 3]).must_include 5, "msg" - end - end - - it "needs to be sensible about wont_include order" do - @assertion_count += 3 # wont_include is 2 assertions - - _(_([1, 2, 3]).wont_include(5)).must_equal false - - assert_triggered "Expected [1, 2, 3] to not include 2." do - _([1, 2, 3]).wont_include 2 - end - - assert_triggered "msg.\nExpected [1, 2, 3] to not include 2." do - _([1, 2, 3]).wont_include 2, "msg" - end - end - - it "needs to catch an expected exception" do - @assertion_count = 2 - - expect { raise "blah" }.must_raise RuntimeError - expect { raise Minitest::Assertion }.must_raise Minitest::Assertion - end - - it "needs to catch an unexpected exception" do - @assertion_count -= 2 # no positive - - msg = <<-EOM.gsub(/^ {6}/, "").chomp - [RuntimeError] exception expected, not - Class: - Message: <"woot"> - ---Backtrace--- - EOM - - assert_triggered msg do - expect { raise StandardError, "woot" }.must_raise RuntimeError - end - - assert_triggered "msg.\n#{msg}" do - expect { raise StandardError, "woot" }.must_raise RuntimeError, "msg" - end - end - - it "needs to ensure silence" do - @assertion_count -= 1 # no msg - @assertion_count += 2 # assert_output is 2 assertions - - _(expect {}.must_be_silent).must_equal true - - assert_triggered "In stdout.\nExpected: \"\"\n Actual: \"xxx\"" do - expect { print "xxx" }.must_be_silent - end - end - - it "needs to have all methods named well" do - skip "N/A" if ENV["MT_NO_EXPECTATIONS"] - - @assertion_count = 2 - - methods = Minitest::Expectations.public_instance_methods.grep(/must|wont/) - methods.map!(&:to_s) if Symbol === methods.first - - musts, wonts = methods.sort.partition { |m| m =~ /must/ } - - expected_musts = %w[must_be - must_be_close_to - must_be_empty - must_be_instance_of - must_be_kind_of - must_be_nil - must_be_same_as - must_be_silent - must_be_within_delta - must_be_within_epsilon - must_equal - must_include - must_match - must_output - must_raise - must_respond_to - must_throw - path_must_exist] - - bad = %w[not raise throw send output be_silent] - - expected_wonts = expected_musts.map { |m| m.sub(/must/, "wont") }.sort - expected_wonts.reject! { |m| m =~ /wont_#{Regexp.union(*bad)}/ } - - _(musts).must_equal expected_musts - _(wonts).must_equal expected_wonts - end - - it "needs to raise if an expected exception is not raised" do - @assertion_count -= 2 # no positive test - - assert_triggered "RuntimeError expected but nothing was raised." do - expect { 42 }.must_raise RuntimeError - end - - assert_triggered "msg.\nRuntimeError expected but nothing was raised." do - expect { 42 }.must_raise RuntimeError, "msg" - end - end - - it "needs to verify binary messages" do - _(_(42).wont_be(:<, 24)).must_equal false - - assert_triggered "Expected 24 to not be < 42." do - _(24).wont_be :<, 42 - end - - assert_triggered "msg.\nExpected 24 to not be < 42." do - _(24).wont_be :<, 42, "msg" - end - end - - it "needs to verify emptyness" do - @assertion_count += 3 # empty is 2 assertions - - _(_([]).must_be_empty).must_equal true - - assert_triggered "Expected [42] to be empty." do - _([42]).must_be_empty - end - - assert_triggered "msg.\nExpected [42] to be empty." do - _([42]).must_be_empty "msg" - end - end - - it "needs to verify equality" do - @assertion_count += 1 - - _(_(6 * 7).must_equal(42)).must_equal true - - assert_triggered "Expected: 42\n Actual: 54" do - _(6 * 9).must_equal 42 - end - - assert_triggered "msg.\nExpected: 42\n Actual: 54" do - _(6 * 9).must_equal 42, "msg" - end - - assert_triggered(/^-42\n\+#\n/) do - _(proc { 42 }).must_equal 42 # proc isn't called, so expectation fails - end - end - - it "needs to warn on equality with nil" do - @assertion_count += 1 # extra test - - out, err = capture_io do - _(_(nil).must_equal(nil)).must_equal true - end - - exp = "DEPRECATED: Use assert_nil if expecting nil from #{__FILE__}:#{__LINE__-3}. " \ - "This will fail in Minitest 6.\n" - exp = "" if $-w.nil? - - assert_empty out - assert_equal exp, err - end - - it "needs to verify floats outside a delta" do - @assertion_count += 1 # extra test - - _(_(24).wont_be_close_to(42)).must_equal false - - assert_triggered "Expected |42 - 42.0| (0.0) to not be <= 0.001." do - _(6 * 7.0).wont_be_close_to 42 - end - - x = "1.0e-05" - assert_triggered "Expected |42 - 42.0| (0.0) to not be <= #{x}." do - _(6 * 7.0).wont_be_close_to 42, 0.00001 - end - - assert_triggered "msg.\nExpected |42 - 42.0| (0.0) to not be <= #{x}." do - _(6 * 7.0).wont_be_close_to 42, 0.00001, "msg" - end - end - - it "needs to verify floats outside an epsilon" do - @assertion_count += 1 # extra test - - _(_(24).wont_be_within_epsilon(42)).must_equal false - - x = "0.042" - assert_triggered "Expected |42 - 42.0| (0.0) to not be <= #{x}." do - _(6 * 7.0).wont_be_within_epsilon 42 - end - - x = "0.00042" - assert_triggered "Expected |42 - 42.0| (0.0) to not be <= #{x}." do - _(6 * 7.0).wont_be_within_epsilon 42, 0.00001 - end - - assert_triggered "msg.\nExpected |42 - 42.0| (0.0) to not be <= #{x}." do - _(6 * 7.0).wont_be_within_epsilon 42, 0.00001, "msg" - end - end - - it "needs to verify floats within a delta" do - @assertion_count += 1 # extra test - - _(_(6.0 * 7).must_be_close_to(42.0)).must_equal true - - assert_triggered "Expected |0.0 - 0.01| (0.01) to be <= 0.001." do - _(1.0 / 100).must_be_close_to 0.0 - end - - x = "1.0e-06" - assert_triggered "Expected |0.0 - 0.001| (0.001) to be <= #{x}." do - _(1.0 / 1000).must_be_close_to 0.0, 0.000001 - end - - assert_triggered "msg.\nExpected |0.0 - 0.001| (0.001) to be <= #{x}." do - _(1.0 / 1000).must_be_close_to 0.0, 0.000001, "msg" - end - end - - it "needs to verify floats within an epsilon" do - @assertion_count += 1 # extra test - - _(_(6.0 * 7).must_be_within_epsilon(42.0)).must_equal true - - assert_triggered "Expected |0.0 - 0.01| (0.01) to be <= 0.0." do - _(1.0 / 100).must_be_within_epsilon 0.0 - end - - assert_triggered "Expected |0.0 - 0.001| (0.001) to be <= 0.0." do - _(1.0 / 1000).must_be_within_epsilon 0.0, 0.000001 - end - - assert_triggered "msg.\nExpected |0.0 - 0.001| (0.001) to be <= 0.0." do - _(1.0 / 1000).must_be_within_epsilon 0.0, 0.000001, "msg" - end - end - - it "needs to verify identity" do - _(_(1).must_be_same_as(1)).must_equal true - - assert_triggered "Expected 1 (oid=N) to be the same as 2 (oid=N)." do - _(1).must_be_same_as 2 - end - - assert_triggered "msg.\nExpected 1 (oid=N) to be the same as 2 (oid=N)." do - _(1).must_be_same_as 2, "msg" - end - end - - it "needs to verify inequality" do - @assertion_count += 2 - _(_(42).wont_equal(6 * 9)).must_equal false - _(_(proc {}).wont_equal(42)).must_equal false - - assert_triggered "Expected 1 to not be equal to 1." do - _(1).wont_equal 1 - end - - assert_triggered "msg.\nExpected 1 to not be equal to 1." do - _(1).wont_equal 1, "msg" - end - end - - it "needs to verify instances of a class" do - _(_(42).wont_be_instance_of(String)).must_equal false - - assert_triggered "Expected 42 to not be a kind of #{Int.name}." do - _(42).wont_be_kind_of Int - end - - assert_triggered "msg.\nExpected 42 to not be an instance of #{Int.name}." do - _(42).wont_be_instance_of Int, "msg" - end - end - - it "needs to verify kinds of a class" do - @assertion_count += 2 - - _(_(42).wont_be_kind_of(String)).must_equal false - _(_(proc {}).wont_be_kind_of(String)).must_equal false - - assert_triggered "Expected 42 to not be a kind of #{Int.name}." do - _(42).wont_be_kind_of Int - end - - assert_triggered "msg.\nExpected 42 to not be a kind of #{Int.name}." do - _(42).wont_be_kind_of Int, "msg" - end - end - - it "needs to verify kinds of objects" do - @assertion_count += 3 # extra test - - _(_(6 * 7).must_be_kind_of(Int)).must_equal true - _(_(6 * 7).must_be_kind_of(Numeric)).must_equal true - - assert_triggered "Expected 42 to be a kind of String, not #{Int.name}." do - _(6 * 7).must_be_kind_of String - end - - assert_triggered "msg.\nExpected 42 to be a kind of String, not #{Int.name}." do - _(6 * 7).must_be_kind_of String, "msg" - end - - exp = "Expected # to be a kind of String, not Proc." - assert_triggered exp do - _(proc {}).must_be_kind_of String - end - end - - it "needs to verify mismatch" do - @assertion_count += 3 # match is 2 - - _(_("blah").wont_match(/\d+/)).must_equal false - - assert_triggered "Expected /\\w+/ to not match \"blah\"." do - _("blah").wont_match(/\w+/) - end - - assert_triggered "msg.\nExpected /\\w+/ to not match \"blah\"." do - _("blah").wont_match(/\w+/, "msg") - end - end - - it "needs to verify nil" do - _(_(nil).must_be_nil).must_equal true - - assert_triggered "Expected 42 to be nil." do - _(42).must_be_nil - end - - assert_triggered "msg.\nExpected 42 to be nil." do - _(42).must_be_nil "msg" - end - end - - it "needs to verify non-emptyness" do - @assertion_count += 3 # empty is 2 assertions - - _(_(["some item"]).wont_be_empty).must_equal false - - assert_triggered "Expected [] to not be empty." do - _([]).wont_be_empty - end - - assert_triggered "msg.\nExpected [] to not be empty." do - _([]).wont_be_empty "msg" - end - end - - it "needs to verify non-identity" do - _(_(1).wont_be_same_as(2)).must_equal false - - assert_triggered "Expected 1 (oid=N) to not be the same as 1 (oid=N)." do - _(1).wont_be_same_as 1 - end - - assert_triggered "msg.\nExpected 1 (oid=N) to not be the same as 1 (oid=N)." do - _(1).wont_be_same_as 1, "msg" - end - end - - it "needs to verify non-nil" do - _(_(42).wont_be_nil).must_equal false - - assert_triggered "Expected nil to not be nil." do - _(nil).wont_be_nil - end - - assert_triggered "msg.\nExpected nil to not be nil." do - _(nil).wont_be_nil "msg" - end - end - - it "needs to verify objects not responding to a message" do - _(_("").wont_respond_to(:woot!)).must_equal false - - assert_triggered "Expected \"\" to not respond to to_s." do - _("").wont_respond_to :to_s - end - - assert_triggered "msg.\nExpected \"\" to not respond to to_s." do - _("").wont_respond_to :to_s, "msg" - end - end - - it "needs to verify output in stderr" do - @assertion_count -= 1 # no msg - - _(expect { $stderr.print "blah" }.must_output(nil, "blah")).must_equal true - - assert_triggered "In stderr.\nExpected: \"blah\"\n Actual: \"xxx\"" do - expect { $stderr.print "xxx" }.must_output(nil, "blah") - end - end - - it "needs to verify output in stdout" do - @assertion_count -= 1 # no msg - - _(expect { print "blah" }.must_output("blah")).must_equal true - - assert_triggered "In stdout.\nExpected: \"blah\"\n Actual: \"xxx\"" do - expect { print "xxx" }.must_output("blah") - end - end - - it "needs to verify regexp matches" do - @assertion_count += 3 # must_match is 2 assertions - - _(_("blah").must_match(/\w+/)).must_equal true - - assert_triggered "Expected /\\d+/ to match \"blah\"." do - _("blah").must_match(/\d+/) - end - - assert_triggered "msg.\nExpected /\\d+/ to match \"blah\"." do - _("blah").must_match(/\d+/, "msg") - end - end - - describe "expect" do - before do - @assertion_count -= 3 - end - - it "can use expect" do - _(1 + 1).must_equal 2 - end - - it "can use expect with a lambda" do - _ { raise "blah" }.must_raise RuntimeError - end - - it "can use expect in a thread" do - Thread.new { _(1 + 1).must_equal 2 }.join - end - - it "can NOT use must_equal in a thread. It must use expect in a thread" do - skip "N/A" if ENV["MT_NO_EXPECTATIONS"] - assert_raises RuntimeError do - capture_io do - Thread.new { (1 + 1).must_equal 2 }.join - end - end - end - - it "fails gracefully when expectation used outside of `it`" do - skip "N/A" if ENV["MT_NO_EXPECTATIONS"] - - @assertion_count += 1 - - e = assert_raises RuntimeError do - capture_io do - Thread.new { # forces ctx to be nil - describe("woot") do - (1 + 1).must_equal 2 - end - }.join - end - end - - assert_equal "Calling #must_equal outside of test.", e.message - end - - it "deprecates expectation used without _" do - skip "N/A" if ENV["MT_NO_EXPECTATIONS"] - - @assertion_count += 3 - - exp = /DEPRECATED: global use of must_equal from/ - - assert_output "", exp do - (1 + 1).must_equal 2 - end - end - end - - it "needs to verify throw" do - @assertion_count += 2 # 2 extra tests - - _(expect { throw :blah }.must_throw(:blah)).must_equal true - - assert_triggered "Expected :blah to have been thrown." do - expect {}.must_throw :blah - end - - assert_triggered "Expected :blah to have been thrown, not :xxx." do - expect { throw :xxx }.must_throw :blah - end - - assert_triggered "msg.\nExpected :blah to have been thrown." do - expect {}.must_throw :blah, "msg" - end - - assert_triggered "msg.\nExpected :blah to have been thrown, not :xxx." do - expect { throw :xxx }.must_throw :blah, "msg" - end - end - - it "needs to verify types of objects" do - _(_(6 * 7).must_be_instance_of(Int)).must_equal true - - exp = "Expected 42 to be an instance of String, not #{Int.name}." - - assert_triggered exp do - _(6 * 7).must_be_instance_of String - end - - assert_triggered "msg.\n#{exp}" do - _(6 * 7).must_be_instance_of String, "msg" - end - end - - it "needs to verify using any (negative) predicate" do - @assertion_count -= 1 # doesn"t take a message - - _(_("blah").wont_be(:empty?)).must_equal false - - assert_triggered "Expected \"\" to not be empty?." do - _("").wont_be :empty? - end - end - - it "needs to verify using any binary operator" do - @assertion_count -= 1 # no msg - - _(_(41).must_be(:<, 42)).must_equal true - - assert_triggered "Expected 42 to be < 41." do - _(42).must_be(:<, 41) - end - end - - it "needs to verify using any predicate" do - @assertion_count -= 1 # no msg - - _(_("").must_be(:empty?)).must_equal true - - assert_triggered "Expected \"blah\" to be empty?." do - _("blah").must_be :empty? - end - end - - it "needs to verify using respond_to" do - _(_(42).must_respond_to(:+)).must_equal true - - assert_triggered "Expected 42 (#{Int.name}) to respond to #clear." do - _(42).must_respond_to :clear - end - - assert_triggered "msg.\nExpected 42 (#{Int.name}) to respond to #clear." do - _(42).must_respond_to :clear, "msg" - end - end -end - -describe Minitest::Spec, :let do - i_suck_and_my_tests_are_order_dependent! - - def _count - $let_count ||= 0 - end - - let :count do - $let_count += 1 - $let_count - end - - it "is evaluated once per example" do - _(_count).must_equal 0 - - _(count).must_equal 1 - _(count).must_equal 1 - - _(_count).must_equal 1 - end - - it "is REALLY evaluated once per example" do - _(_count).must_equal 1 - - _(count).must_equal 2 - _(count).must_equal 2 - - _(_count).must_equal 2 - end - - it 'raises an error if the name begins with "test"' do - expect { self.class.let(:test_value) { true } }.must_raise ArgumentError - end - - it "raises an error if the name shadows a normal instance method" do - expect { self.class.let(:message) { true } }.must_raise ArgumentError - end - - it "doesn't raise an error if it is just another let" do - v = proc do - describe :outer do - let(:bar) - describe :inner do - let(:bar) - end - end - :good - end.call - _(v).must_equal :good - end - - it "procs come after dont_flip" do - p = proc {} - assert_respond_to p, :call - _(p).must_respond_to :call - end -end - -describe Minitest::Spec, :subject do - attr_reader :subject_evaluation_count - - subject do - @subject_evaluation_count ||= 0 - @subject_evaluation_count += 1 - @subject_evaluation_count - end - - it "is evaluated once per example" do - _(subject).must_equal 1 - _(subject).must_equal 1 - _(subject_evaluation_count).must_equal 1 - end -end - -class TestMetaStatic < Minitest::Test - def test_children - Minitest::Spec.children.clear # prevents parallel run - - y = z = nil - x = describe "top-level thingy" do - y = describe "first thingy" do end - - it "top-level-it" do end - - z = describe "second thingy" do end - end - - assert_equal [x], Minitest::Spec.children - assert_equal [y, z], x.children - assert_equal [], y.children - assert_equal [], z.children - end - - def test_it_wont_remove_existing_child_test_methods - Minitest::Spec.children.clear # prevents parallel run - - inner = nil - outer = describe "outer" do - inner = describe "inner" do - it do - assert true - end - end - it do - assert true - end - end - - assert_equal 1, outer.public_instance_methods.grep(/^test_/).count - assert_equal 1, inner.public_instance_methods.grep(/^test_/).count - end - - def test_it_wont_add_test_methods_to_children - Minitest::Spec.children.clear # prevents parallel run - - inner = nil - outer = describe "outer" do - inner = describe "inner" do end - it do - assert true - end - end - - assert_equal 1, outer.public_instance_methods.grep(/^test_/).count - assert_equal 0, inner.public_instance_methods.grep(/^test_/).count - end -end - -class TestMeta < MetaMetaMetaTestCase - # do not call parallelize_me! here because specs use register_spec_type globally - - def util_structure - y = z = nil - before_list = [] - after_list = [] - x = describe "top-level thingy" do - before { before_list << 1 } - after { after_list << 1 } - - it "top-level-it" do end - - y = describe "inner thingy" do - before { before_list << 2 } - after { after_list << 2 } - it "inner-it" do end - - z = describe "very inner thingy" do - before { before_list << 3 } - after { after_list << 3 } - it "inner-it" do end - - it { } # ignore me - specify { } # anonymous it - end - end - end - - return x, y, z, before_list, after_list - end - - def test_register_spec_type - original_types = Minitest::Spec::TYPES.dup - - assert_includes Minitest::Spec::TYPES, [//, Minitest::Spec] - - Minitest::Spec.register_spec_type(/woot/, TestMeta) - - p = lambda do |_| true end - Minitest::Spec.register_spec_type TestMeta, &p - - keys = Minitest::Spec::TYPES.map(&:first) - - assert_includes keys, /woot/ - assert_includes keys, p - ensure - Minitest::Spec::TYPES.replace original_types - end - - def test_spec_type - original_types = Minitest::Spec::TYPES.dup - - Minitest::Spec.register_spec_type(/A$/, MiniSpecA) - Minitest::Spec.register_spec_type MiniSpecB do |desc| - desc.superclass == ExampleA - end - Minitest::Spec.register_spec_type MiniSpecC do |_desc, *addl| - addl.include? :woot - end - - assert_equal MiniSpecA, Minitest::Spec.spec_type(ExampleA) - assert_equal MiniSpecB, Minitest::Spec.spec_type(ExampleB) - assert_equal MiniSpecC, Minitest::Spec.spec_type(ExampleB, :woot) - ensure - Minitest::Spec::TYPES.replace original_types - end - - def test_bug_dsl_expectations - spec_class = Class.new MiniSpecB do - it "should work" do - _(0).must_equal 0 - end - end - - test_name = spec_class.instance_methods.sort.grep(/test/).first - - spec = spec_class.new test_name - - result = spec.run - - assert spec.passed? - assert result.passed? - assert_equal 1, result.assertions - end - - def test_name - spec_a = describe ExampleA do; end - spec_b = describe ExampleB, :random_method do; end - spec_c = describe ExampleB, :random_method, :addl_context do; end - - assert_equal "ExampleA", spec_a.name - assert_equal "ExampleB::random_method", spec_b.name - assert_equal "ExampleB::random_method::addl_context", spec_c.name - end - - def test_name2 - assert_equal "NamedExampleA", NamedExampleA.name - assert_equal "NamedExampleB", NamedExampleB.name - assert_equal "NamedExampleC", NamedExampleC.name - - spec_a = describe ExampleA do; end - spec_b = describe ExampleB, :random_method do; end - - assert_equal "ExampleA", spec_a.name - assert_equal "ExampleB::random_method", spec_b.name - end - - def test_structure - x, y, z, * = util_structure - - assert_equal "top-level thingy", x.to_s - assert_equal "top-level thingy::inner thingy", y.to_s - assert_equal "top-level thingy::inner thingy::very inner thingy", z.to_s - - assert_equal "top-level thingy", x.desc - assert_equal "inner thingy", y.desc - assert_equal "very inner thingy", z.desc - - top_methods = %w[setup teardown test_0001_top-level-it] - inner_methods1 = %w[setup teardown test_0001_inner-it] - inner_methods2 = inner_methods1 + - %w[test_0002_anonymous test_0003_anonymous] - - assert_equal top_methods, x.instance_methods(false).sort.map(&:to_s) - assert_equal inner_methods1, y.instance_methods(false).sort.map(&:to_s) - assert_equal inner_methods2, z.instance_methods(false).sort.map(&:to_s) - end - - def test_structure_postfix_it - z = nil - y = describe "outer" do - # NOT here, below the inner-describe! - # it "inner-it" do end - - z = describe "inner" do - it "inner-it" do end - end - - # defined AFTER inner describe means we'll try to wipe out the inner-it - it "inner-it" do end - end - - assert_equal %w[test_0001_inner-it], y.instance_methods(false).map(&:to_s) - assert_equal %w[test_0001_inner-it], z.instance_methods(false).map(&:to_s) - end - - def test_setup_teardown_behavior - _, _, z, before_list, after_list = util_structure - - @tu = z - - run_tu_with_fresh_reporter - - size = z.runnable_methods.size - assert_equal [1, 2, 3] * size, before_list - assert_equal [3, 2, 1] * size, after_list - end - - def test_describe_first_structure - x1 = x2 = y = z = nil - x = describe "top-level thingy" do - y = describe "first thingy" do end - - x1 = it "top level it" do end - x2 = it "не латинÑкие &ã„ã£ãŸ α, β, γ, δ, ε hello!!! world" do end - - z = describe "second thingy" do end - end - - test_methods = ["test_0001_top level it", - "test_0002_не латинÑкие &ã„ã£ãŸ α, β, γ, δ, ε hello!!! world", - ].sort - - assert_equal test_methods, [x1, x2] - assert_equal test_methods, x.instance_methods.grep(/^test/).map(&:to_s).sort - assert_equal [], y.instance_methods.grep(/^test/) - assert_equal [], z.instance_methods.grep(/^test/) - end - - def test_structure_subclasses - z = nil - x = Class.new Minitest::Spec do - def xyz; end - end - y = Class.new x do - z = describe("inner") { } - end - - assert_respond_to x.new(nil), "xyz" - assert_respond_to y.new(nil), "xyz" - assert_respond_to z.new(nil), "xyz" - end -end - -class TestSpecInTestCase < MetaMetaMetaTestCase - def setup - super - - Thread.current[:current_spec] = self - @tc = self - @assertion_count = 2 - end - - def assert_triggered expected, klass = Minitest::Assertion - @assertion_count += 1 - - e = assert_raises klass do - yield - end - - msg = e.message.sub(/(---Backtrace---).*/m, "\1") - msg.gsub!(/\(oid=[-0-9]+\)/, "(oid=N)") - - assert_equal expected, msg - end - - def teardown - msg = "expected #{@assertion_count} assertions, not #{@tc.assertions}" - assert_equal @assertion_count, @tc.assertions, msg - end - - def test_expectation - @tc.assert_equal true, _(1).must_equal(1) - end - - def test_expectation_triggered - assert_triggered "Expected: 2\n Actual: 1" do - _(1).must_equal 2 - end - end - - include Minitest::Spec::DSL::InstanceMethods - - def test_expectation_with_a_message - assert_triggered "woot.\nExpected: 2\n Actual: 1" do - _(1).must_equal 2, "woot" - end - end -end - -class ValueMonadTest < Minitest::Test - attr_accessor :struct - - def setup - @struct = { :_ => "a", :value => "b", :expect => "c" } - def @struct.method_missing k # think openstruct - self[k] - end - end - - def test_value_monad_method - assert_equal "a", struct._ - end - - def test_value_monad_value_alias - assert_equal "b", struct.value - end - - def test_value_monad_expect_alias - assert_equal "c", struct.expect - end -end diff --git a/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_test.rb b/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_test.rb deleted file mode 100644 index abce54e2f..000000000 --- a/ruby/gems/minitest-5.13.0/test/minitest/test_minitest_test.rb +++ /dev/null @@ -1,1080 +0,0 @@ -# encoding: UTF-8 - -require "pathname" -require "minitest/metametameta" - -if defined? Encoding then - e = Encoding.default_external - if e != Encoding::UTF_8 then - warn "" - warn "" - warn "NOTE: External encoding #{e} is not UTF-8. Tests WILL fail." - warn " Run tests with `RUBYOPT=-Eutf-8 rake` to avoid errors." - warn "" - warn "" - end -end - -class Minitest::Runnable - def whatever # faked for testing - assert true - end -end - -class TestMinitestUnit < MetaMetaMetaTestCase - parallelize_me! - - pwd = Pathname.new File.expand_path Dir.pwd - basedir = Pathname.new(File.expand_path "lib/minitest") + "mini" - basedir = basedir.relative_path_from(pwd).to_s - MINITEST_BASE_DIR = basedir[/\A\./] ? basedir : "./#{basedir}" - BT_MIDDLE = ["#{MINITEST_BASE_DIR}/test.rb:161:in `each'", - "#{MINITEST_BASE_DIR}/test.rb:158:in `each'", - "#{MINITEST_BASE_DIR}/test.rb:139:in `run'", - "#{MINITEST_BASE_DIR}/test.rb:106:in `run'"] - - def test_filter_backtrace - # this is a semi-lame mix of relative paths. - # I cheated by making the autotest parts not have ./ - bt = (["lib/autotest.rb:571:in `add_exception'", - "test/test_autotest.rb:62:in `test_add_exception'", - "#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] + - BT_MIDDLE + - ["#{MINITEST_BASE_DIR}/test.rb:29", - "test/test_autotest.rb:422"]) - bt = util_expand_bt bt - - ex = ["lib/autotest.rb:571:in `add_exception'", - "test/test_autotest.rb:62:in `test_add_exception'"] - ex = util_expand_bt ex - - fu = Minitest.filter_backtrace(bt) - - assert_equal ex, fu - end - - def test_filter_backtrace_all_unit - bt = (["#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] + - BT_MIDDLE + - ["#{MINITEST_BASE_DIR}/test.rb:29"]) - ex = bt.clone - fu = Minitest.filter_backtrace(bt) - assert_equal ex, fu - end - - def test_filter_backtrace_unit_starts - bt = (["#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] + - BT_MIDDLE + - ["#{MINITEST_BASE_DIR}/mini/test.rb:29", - "-e:1"]) - - bt = util_expand_bt bt - - ex = ["-e:1"] - fu = Minitest.filter_backtrace bt - assert_equal ex, fu - end - - # def test_default_runner_is_minitest_unit - # assert_instance_of Minitest::Unit, Minitest::Unit.runner - # end - - def test_infectious_binary_encoding - @tu = Class.new FakeNamedTest do - def test_this_is_not_ascii_assertion - assert_equal "ÐÐÐ", "Ñ‘Ñ‘Ñ‘" - end - - def test_this_is_non_ascii_failure_message - fail 'ÐÐÐ'.force_encoding('ASCII-8BIT') - end - end - - expected = clean <<-EOM - EF - - Finished in 0.00 - - 1) Error: - FakeNamedTestXX#test_this_is_non_ascii_failure_message: - RuntimeError: ÐÐÐ - FILE:LINE:in `test_this_is_non_ascii_failure_message' - - 2) Failure: - FakeNamedTestXX#test_this_is_not_ascii_assertion [FILE:LINE]: - Expected: \"ÐÐÐ\" - Actual: \"Ñ‘Ñ‘Ñ‘\" - - 2 runs, 1 assertions, 1 failures, 1 errors, 0 skips - EOM - - assert_report expected - end - - def test_passed_eh_teardown_good - test_class = Class.new FakeNamedTest do - def teardown; assert true; end - def test_omg; assert true; end - end - - test = test_class.new :test_omg - test.run - - refute_predicate test, :error? - assert_predicate test, :passed? - refute_predicate test, :skipped? - end - - def test_passed_eh_teardown_skipped - test_class = Class.new FakeNamedTest do - def teardown; assert true; end - def test_omg; skip "bork"; end - end - - test = test_class.new :test_omg - test.run - - refute_predicate test, :error? - refute_predicate test, :passed? - assert_predicate test, :skipped? - end - - def test_passed_eh_teardown_flunked - test_class = Class.new FakeNamedTest do - def teardown; flunk; end - def test_omg; assert true; end - end - - test = test_class.new :test_omg - test.run - - refute_predicate test, :error? - refute_predicate test, :passed? - refute_predicate test, :skipped? - end - - def util_expand_bt bt - if RUBY_VERSION >= "1.9.0" then - bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f } - else - bt - end - end -end - -class TestMinitestUnitInherited < MetaMetaMetaTestCase - def with_overridden_include - Class.class_eval do - def inherited_with_hacks _klass - throw :inherited_hook - end - - alias inherited_without_hacks inherited - alias inherited inherited_with_hacks - alias IGNORE_ME! inherited # 1.8 bug. god I love venture bros - end - - yield - ensure - Class.class_eval do - alias inherited inherited_without_hacks - - undef_method :inherited_with_hacks - undef_method :inherited_without_hacks - end - - refute_respond_to Class, :inherited_with_hacks - refute_respond_to Class, :inherited_without_hacks - end - - def test_inherited_hook_plays_nice_with_others - with_overridden_include do - assert_throws :inherited_hook do - Class.new FakeNamedTest - end - end - end -end - -class TestMinitestRunner < MetaMetaMetaTestCase - # do not parallelize this suite... it just can't handle it. - - def test_class_runnables - @assertion_count = 0 - - tc = Class.new(Minitest::Test) - - assert_equal 1, Minitest::Test.runnables.size - assert_equal [tc], Minitest::Test.runnables - end - - def test_run_test - @tu = - Class.new FakeNamedTest do - attr_reader :foo - - def run - @foo = "hi mom!" - r = super - @foo = "okay" - - r - end - - def test_something - assert_equal "hi mom!", foo - end - end - - expected = clean <<-EOM - . - - Finished in 0.00 - - 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_report expected - end - - def test_run_error - @tu = - Class.new FakeNamedTest do - def test_something - assert true - end - - def test_error - raise "unhandled exception" - end - end - - expected = clean <<-EOM - E. - - Finished in 0.00 - - 1) Error: - FakeNamedTestXX#test_error: - RuntimeError: unhandled exception - FILE:LINE:in \`test_error\' - - 2 runs, 1 assertions, 0 failures, 1 errors, 0 skips - EOM - - assert_report expected - end - - def test_run_error_teardown - @tu = - Class.new FakeNamedTest do - def test_something - assert true - end - - def teardown - raise "unhandled exception" - end - end - - expected = clean <<-EOM - E - - Finished in 0.00 - - 1) Error: - FakeNamedTestXX#test_something: - RuntimeError: unhandled exception - FILE:LINE:in \`teardown\' - - 1 runs, 1 assertions, 0 failures, 1 errors, 0 skips - EOM - - assert_report expected - end - - def test_run_failing - setup_basic_tu - - expected = clean <<-EOM - F. - - Finished in 0.00 - - 1) Failure: - FakeNamedTestXX#test_failure [FILE:LINE]: - Expected false to be truthy. - - 2 runs, 2 assertions, 1 failures, 0 errors, 0 skips - EOM - - assert_report expected - end - - def setup_basic_tu - @tu = - Class.new FakeNamedTest do - def test_something - assert true - end - - def test_failure - assert false - end - end - end - - def test_run_failing_filtered - setup_basic_tu - - expected = clean <<-EOM - . - - Finished in 0.00 - - 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_report expected, %w[--name /some|thing/ --seed 42] - end - - def assert_filtering filter, name, expected, a = false - args = %W[--#{filter} #{name} --seed 42] - - alpha = Class.new FakeNamedTest do - define_method :test_something do - assert a - end - end - Object.const_set(:Alpha, alpha) - - beta = Class.new FakeNamedTest do - define_method :test_something do - assert true - end - end - Object.const_set(:Beta, beta) - - @tus = [alpha, beta] - - assert_report expected, args - ensure - Object.send :remove_const, :Alpha - Object.send :remove_const, :Beta - end - - def test_run_filtered_including_suite_name - expected = clean <<-EOM - . - - Finished in 0.00 - - 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_filtering "name", "/Beta#test_something/", expected - end - - def test_run_filtered_including_suite_name_string - expected = clean <<-EOM - . - - Finished in 0.00 - - 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_filtering "name", "Beta#test_something", expected - end - - def test_run_filtered_string_method_only - expected = clean <<-EOM - .. - - Finished in 0.00 - - 2 runs, 2 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_filtering "name", "test_something", expected, :pass - end - - def test_run_failing_excluded - setup_basic_tu - - expected = clean <<-EOM - . - - Finished in 0.00 - - 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_report expected, %w[--exclude /failure/ --seed 42] - end - - def test_run_filtered_excluding_suite_name - expected = clean <<-EOM - . - - Finished in 0.00 - - 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_filtering "exclude", "/Alpha#test_something/", expected - end - - def test_run_filtered_excluding_suite_name_string - expected = clean <<-EOM - . - - Finished in 0.00 - - 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_filtering "exclude", "Alpha#test_something", expected - end - - def test_run_filtered_excluding_string_method_only - expected = clean <<-EOM - - - Finished in 0.00 - - 0 runs, 0 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_filtering "exclude", "test_something", expected, :pass - end - - def test_run_passing - @tu = - Class.new FakeNamedTest do - def test_something - assert true - end - end - - expected = clean <<-EOM - . - - Finished in 0.00 - - 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_report expected - end - - def test_run_skip - @tu = - Class.new FakeNamedTest do - def test_something - assert true - end - - def test_skip - skip "not yet" - end - end - - expected = clean <<-EOM - S. - - Finished in 0.00 - - 2 runs, 1 assertions, 0 failures, 0 errors, 1 skips - - You have skipped tests. Run with --verbose for details. - EOM - - restore_env do - assert_report expected - end - end - - def test_run_skip_verbose - @tu = - Class.new FakeNamedTest do - def test_something - assert true - end - - def test_skip - skip "not yet" - end - end - - expected = clean <<-EOM - FakeNamedTestXX#test_skip = 0.00 s = S - FakeNamedTestXX#test_something = 0.00 s = . - - Finished in 0.00 - - 1) Skipped: - FakeNamedTestXX#test_skip [FILE:LINE]: - not yet - - 2 runs, 1 assertions, 0 failures, 0 errors, 1 skips - EOM - - assert_report expected, %w[--seed 42 --verbose] - end - - def test_run_with_other_runner - @tu = - Class.new FakeNamedTest do - def self.run reporter, options = {} - @reporter = reporter - before_my_suite - super - end - - def self.name; "wacky!" end - - def self.before_my_suite - @reporter.io.puts "Running #{self.name} tests" - @@foo = 1 - end - - def test_something - assert_equal 1, @@foo - end - - def test_something_else - assert_equal 1, @@foo - end - end - - expected = clean <<-EOM - Running wacky! tests - .. - - Finished in 0.00 - - 2 runs, 2 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_report expected - end - - require "monitor" - - class Latch - def initialize count = 1 - @count = count - @lock = Monitor.new - @cv = @lock.new_cond - end - - def release - @lock.synchronize do - @count -= 1 if @count > 0 - @cv.broadcast if @count == 0 - end - end - - def await - @lock.synchronize { @cv.wait_while { @count > 0 } } - end - end - - def test_run_parallel - test_count = 2 - test_latch = Latch.new test_count - wait_latch = Latch.new test_count - main_latch = Latch.new - - thread = Thread.new { - Thread.current.abort_on_exception = true - - # This latch waits until both test latches have been released. Both - # latches can't be released unless done in separate threads because - # `main_latch` keeps the test method from finishing. - test_latch.await - main_latch.release - } - - @tu = - Class.new FakeNamedTest do - parallelize_me! - - test_count.times do |i| - define_method :"test_wait_on_main_thread_#{i}" do - test_latch.release - - # This latch blocks until the "main thread" releases it. The main - # thread can't release this latch until both test latches have - # been released. This forces the latches to be released in separate - # threads. - main_latch.await - assert true - end - end - end - - expected = clean <<-EOM - .. - - Finished in 0.00 - - 2 runs, 2 assertions, 0 failures, 0 errors, 0 skips - EOM - - assert_report(expected) do |reporter| - reporter.extend(Module.new { - define_method("record") do |result| - super(result) - wait_latch.release - end - - define_method("report") do - wait_latch.await - super() - end - }) - end - assert thread.join - end -end - -class TestMinitestUnitOrder < MetaMetaMetaTestCase - # do not parallelize this suite... it just can't handle it. - - def test_before_setup - call_order = [] - @tu = - Class.new FakeNamedTest do - define_method :setup do - super() - call_order << :setup - end - - define_method :before_setup do - call_order << :before_setup - end - - def test_omg; assert true; end - end - - run_tu_with_fresh_reporter - - expected = [:before_setup, :setup] - assert_equal expected, call_order - end - - def test_after_teardown - call_order = [] - @tu = - Class.new FakeNamedTest do - define_method :teardown do - super() - call_order << :teardown - end - - define_method :after_teardown do - call_order << :after_teardown - end - - def test_omg; assert true; end - end - - run_tu_with_fresh_reporter - - expected = [:teardown, :after_teardown] - assert_equal expected, call_order - end - - def test_all_teardowns_are_guaranteed_to_run - call_order = [] - @tu = - Class.new FakeNamedTest do - define_method :after_teardown do - super() - call_order << :after_teardown - raise - end - - define_method :teardown do - super() - call_order << :teardown - raise - end - - define_method :before_teardown do - super() - call_order << :before_teardown - raise - end - - def test_omg; assert true; end - end - - run_tu_with_fresh_reporter - - expected = [:before_teardown, :teardown, :after_teardown] - assert_equal expected, call_order - end - - def test_setup_and_teardown_survive_inheritance - call_order = [] - - @tu = Class.new FakeNamedTest do - define_method :setup do - call_order << :setup_method - end - - define_method :teardown do - call_order << :teardown_method - end - - define_method :test_something do - call_order << :test - end - end - - run_tu_with_fresh_reporter - - @tu = Class.new @tu - run_tu_with_fresh_reporter - - # Once for the parent class, once for the child - expected = [:setup_method, :test, :teardown_method] * 2 - - assert_equal expected, call_order - end -end - -class TestMinitestRunnable < Minitest::Test - def setup_marshal klass - tc = klass.new "whatever" - tc.assertions = 42 - tc.failures << "a failure" - - yield tc if block_given? - - def tc.setup - @blah = "blah" - end - tc.setup - - @tc = Minitest::Result.from tc - end - - def assert_marshal expected_ivars - new_tc = Marshal.load Marshal.dump @tc - - ivars = new_tc.instance_variables.map(&:to_s).sort - assert_equal expected_ivars, ivars - assert_equal "whatever", new_tc.name - assert_equal 42, new_tc.assertions - assert_equal ["a failure"], new_tc.failures - - yield new_tc if block_given? - end - - def test_marshal - setup_marshal Minitest::Runnable - - assert_marshal %w[@NAME @assertions @failures @klass @source_location @time] - end - - def test_spec_marshal - klass = describe("whatever") { it("passes") { assert true } } - rm = klass.runnable_methods.first - - # Run the test - @tc = klass.new(rm).run - - assert_kind_of Minitest::Result, @tc - - # Pass it over the wire - over_the_wire = Marshal.load Marshal.dump @tc - - assert_equal @tc.time, over_the_wire.time - assert_equal @tc.name, over_the_wire.name - assert_equal @tc.assertions, over_the_wire.assertions - assert_equal @tc.failures, over_the_wire.failures - assert_equal @tc.klass, over_the_wire.klass - end -end - -class TestMinitestTest < TestMinitestRunnable - def test_dup - setup_marshal Minitest::Test do |tc| - tc.time = 3.14 - end - - assert_marshal %w[@NAME @assertions @failures @klass @source_location @time] do |new_tc| - assert_in_epsilon 3.14, new_tc.time - end - end -end - -class TestMinitestUnitTestCase < Minitest::Test - # do not call parallelize_me! - teardown accesses @tc._assertions - # which is not threadsafe. Nearly every method in here is an - # assertion test so it isn't worth splitting it out further. - - RUBY18 = !defined? Encoding - - def setup - super - - Minitest::Test.reset - - @tc = Minitest::Test.new "fake tc" - @zomg = "zomg ponies!" - @assertion_count = 1 - end - - def teardown - assert_equal(@assertion_count, @tc.assertions, - "expected #{@assertion_count} assertions to be fired during the test, not #{@tc.assertions}") if @tc.passed? - end - - def non_verbose - orig_verbose = $VERBOSE - $VERBOSE = false - - yield - ensure - $VERBOSE = orig_verbose - end - - def test_runnable_methods_random - @assertion_count = 0 - - sample_test_case = Class.new FakeNamedTest do - def self.test_order; :random; end - def test_test1; assert "does not matter" end - def test_test2; assert "does not matter" end - def test_test3; assert "does not matter" end - end - - srand 42 - expected = %w[test_test2 test_test1 test_test3] - assert_equal expected, sample_test_case.runnable_methods - end - - def test_runnable_methods_sorted - @assertion_count = 0 - - sample_test_case = Class.new FakeNamedTest do - def self.test_order; :sorted end - def test_test3; assert "does not matter" end - def test_test2; assert "does not matter" end - def test_test1; assert "does not matter" end - end - - expected = %w[test_test1 test_test2 test_test3] - assert_equal expected, sample_test_case.runnable_methods - end - - def test_i_suck_and_my_tests_are_order_dependent_bang_sets_test_order_alpha - @assertion_count = 0 - - shitty_test_case = Class.new FakeNamedTest - - shitty_test_case.i_suck_and_my_tests_are_order_dependent! - - assert_equal :alpha, shitty_test_case.test_order - end - - def test_i_suck_and_my_tests_are_order_dependent_bang_does_not_warn - @assertion_count = 0 - - shitty_test_case = Class.new FakeNamedTest - - def shitty_test_case.test_order; :lol end - - assert_silent do - shitty_test_case.i_suck_and_my_tests_are_order_dependent! - end - end - - def test_autorun_does_not_affect_fork_success_status - @assertion_count = 0 - skip "windows doesn't have skip" unless Process.respond_to?(:fork) - Process.waitpid(fork {}) - assert_equal true, $?.success? - end - - def test_autorun_does_not_affect_fork_exit_status - @assertion_count = 0 - skip "windows doesn't have skip" unless Process.respond_to?(:fork) - Process.waitpid(fork { exit 42 }) - assert_equal 42, $?.exitstatus - end -end - -class TestMinitestGuard < Minitest::Test - parallelize_me! - - def test_mri_eh - assert self.class.mri? "ruby blah" - assert self.mri? "ruby blah" - end - - def test_jruby_eh - assert self.class.jruby? "java" - assert self.jruby? "java" - end - - def test_rubinius_eh - assert_output "", /DEPRECATED/ do - assert self.class.rubinius? "rbx" - end - assert_output "", /DEPRECATED/ do - assert self.rubinius? "rbx" - end - end - - def test_maglev_eh - assert_output "", /DEPRECATED/ do - assert self.class.maglev? "maglev" - end - assert_output "", /DEPRECATED/ do - assert self.maglev? "maglev" - end - end - - def test_osx_eh - assert self.class.osx? "darwin" - assert self.osx? "darwin" - end - - def test_windows_eh - assert self.class.windows? "mswin" - assert self.windows? "mswin" - end -end - -class TestMinitestUnitRecording < MetaMetaMetaTestCase - # do not parallelize this suite... it just can't handle it. - - def assert_run_record *expected, &block - @tu = Class.new FakeNamedTest, &block - - run_tu_with_fresh_reporter - - recorded = first_reporter.results.map(&:failures).flatten.map { |f| f.error.class } - - assert_equal expected, recorded - end - - def test_run_with_bogus_reporter - # https://github.com/seattlerb/minitest/issues/659 - # TODO: remove test for minitest 6 - @tu = Class.new FakeNamedTest do - def test_method - assert true - end - end - - bogus_reporter = Class.new do # doesn't subclass AbstractReporter - def start; @success = false; end - # def prerecord klass, name; end # doesn't define full API - def record result; @success = true; end - def report; end - def passed?; end - def results; end - def success?; @success; end - end.new - - self.reporter = Minitest::CompositeReporter.new - reporter << bogus_reporter - - Minitest::Runnable.runnables.delete @tu - - @tu.run reporter, {} - - assert_predicate bogus_reporter, :success? - end - - def test_record_passing - assert_run_record do - def test_method - assert true - end - end - end - - def test_record_failing - assert_run_record Minitest::Assertion do - def test_method - assert false - end - end - end - - def test_record_error - assert_run_record RuntimeError do - def test_method - raise "unhandled exception" - end - end - end - - def test_record_error_teardown - assert_run_record RuntimeError do - def test_method - assert true - end - - def teardown - raise "unhandled exception" - end - end - end - - def test_record_error_in_test_and_teardown - assert_run_record AnError, RuntimeError do - def test_method - raise AnError - end - - def teardown - raise "unhandled exception" - end - end - end - - def test_to_s_error_in_test_and_teardown - @tu = Class.new FakeNamedTest do - def test_method - raise AnError - end - - def teardown - raise "unhandled exception" - end - end - - run_tu_with_fresh_reporter - - exp = clean " - Error: - FakeNamedTestXX#test_method: - AnError: AnError - FILE:LINE:in `test_method' - - Error: - FakeNamedTestXX#test_method: - RuntimeError: unhandled exception - FILE:LINE:in `teardown' - " - - assert_equal exp.strip, normalize_output(first_reporter.results.first.to_s).strip - end - - def test_record_skip - assert_run_record Minitest::Skip do - def test_method - skip "not yet" - end - end - end -end diff --git a/ruby/gems/net-telnet-0.2.0.gem b/ruby/gems/net-telnet-0.2.0.gem deleted file mode 100644 index 2230468d05a20ef01b023558c281e294cdfae9a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 zcmeIZRd5}=vM%UlSY~E+%y!HiJ7#8PX2;CT%*-(}Q_RfF%*+%s+iU(k^KfqMhnc5y z=2qR^FOsSSt(Nqa)TPhH)Y;I)(Aki|+!O4-OPKxHnX({nzCFt@;11 zMdBzJFcUouZE%PyHEFv=CY0`X_4KX>3@W;~0tpg0-8m_Re1?56p@f4;$`W754NZ2T z54YhlzF#z$N_+E{Qn!=dIkx7SS;iH1h&duuPezO;mFZ$D+ zFlR#OeNi+}R+LvND%Bw^|QB?*bNaup{Q(N&sfw+l3@70Y*EZi zXnW8lSW3Pfb8%-N1@%UaP!kdX^)8Vte9cd58pfx@7e>jQM6(gb-JFAtBMoUXh!^{r zd&2w6+u2U4SH`58UU;evChBdTj^wg@{31MEx$(!jL&KYEqa z2S%hA;&$@-Gt8|}cl7b^Q(|MjvXNQc9NjZ6V zN1oRrhWq8cD}{;INxYdDz{O*|EU{HV6qy=kW*)ugUP>7odzNhc@Ag#l z?8u;-meb14(|rW5Vd2u0Y#rNn6df&IvZzBwNx&f+vTaECa!B0|6TBu?|pzT#;mZutL?R_FZZ%1 z=J;*;&++i^o2#)^X~flT-0?B%ocj|LpCks)w>(E)hpjWht81^E>`nc{KWcxezUS%n7fNuqtY`4v@x zghyK4Kz1gNptmQ_gI^%O2zdc(zxpvC&{*Pf4m7l7}KAOe@CjS=%JPj7UP=DVL$ z>DuTy=y*Bl3q+c$y!y94YLFy-Cv@8#twWd@PFG!|kGk7cNWJ$yHwk%r5FX-oIHJ%5 zYcRl_*=b+j&!3*(ZYR)} z{Oy{pb(=n5ZLSJl#N>FhAJmH%FgLW?5y-f5gZ{$kL-l0FrHi5Wvm{=~9wV4FB(yiK zq>r5hpPYFT(VU}K(8`DisJ@MIiYcFkb5w{!d0)oEeA#X2ZLafyWKcAKnGn z^~d2>#6b879f3Ru0q)Mq8GX)`?_wn+Ba}D@Gm^(R2dR1a(gJRl*%zBYf&l>-mD8n) z6n$>37Kjd{QJB3S5fORgQf1EN7Qn)b8y;>$?J^{}bV+1y%jxlAD9QBW&i>Xw#69g@MFPc zj=y+rYqH8OMvQw8X+OU7<$&ZxPU*%9AV1FFK2+n{Ha zm3eLqSw?YZb!#MHA%-BQa5iQwzYCa09u&O=n)PO?z6EFyX3sq*%Nv*#x79?tW`!&2ttx z&{m-U!w==J_Q^G!$OAFDp+JO$GSFj8-=%Ws#3WF!%Eaw0PR?dVwzie%@fXbr1dFWk zDwB!9`Wtb%WEw!ARJK3k$gNK4DV0Pv9u@?w5CU6k~*9hF`n&lI8l|7FU z{ChT+P_pPZS*6sV$cFYjYCd!OG=Bf+3yUguW#-7?G1MV}0LT~7#AGBKV8*i~tc3Z% zCqtvcv$$zh!{4HrcwtQHjFCA`*?8lk^nJmf6_Tdd`_FlsGY@Ih(UGJ7k zSaOTz2$zqPFd@j3g<}A@RNas3^TgXM8VREZq!Rk#&3;<;SQ4V{R=1yi;~k}ETnAHR zfu=tym=B1UHar$!5`c2uWx~DrtMrS4nU5%>k51NjHIs`qokPNR)`-LzzsU9RhmG&XCwV?38|LN(UgIb{c5<=YvqWH7&9PqDPnxpMvCnbaM9#7LOU^5W)4%0vmoA*+te7mc zU5s%`YEOwGIj7aCvxn&O_aQ za`I@EUM=_icJ<--xc>l6RS&yPgY5WTLH|H4dF+hs;P2o~mR^3S~sE}a#-O+$!?xdmD7;d~7N7SJbPJvR$p+z@@tDiy0 z7C#$sl>lwL&f;<`G5KBYU!5&}j$-sV{N`i9u?TSZr(~ud_b2|RQ&;yVr0GfE5ao|w zpI$p%H7a}hi=@H(IjZO!V zP76`$#1$*aSu7CJ0Tou(kgQ#I1fF0%wSA5wr`{2gb(}*^*XUjvaJ>MUXF`<3(JUlFq}&R)Da zJj*S?5;9oQx@sL_t^NW=`UoT$q|{`r78OgxF!BY#(pQs&_`R#iwZDOs6AAI(Wb2R( zNg^$SGQOoEF3=x9_zyimo9_=3`X5mvj@Lq&4@wo=N)(BP-i=ZslDWZcVw|PIXs|Qi z!2WGPO^Om|o-|6zW@-jb^rMIyy#u zj#h5+=$^XKO}A=v{#3OE%C|uyQ6dO#WyZW~L7dDSZ@OQ7T-c>{ccAoqv>&S@8a@63 z0~!`1cw-dEYSu)sI1ad=AWf*=DthC2gYy9nWDo|;D|ZYys*)*wT-%0wg<&K8YUg)= zCiYLH+CnF>3@?E|LqZ@MTSPyBt2Vc@9OXhjenvrAc|qe~bT1f`P2+l?(CUez(c*&@ zk{sos);vaa_^Y5@mrDAKl#Vq7dYzDZCYG@2%{>cI!7{BUMO70q7r7T%{Iu}P^tBAQ zz6!&#>~m_v*$1O*`NbrzOys%*GuVT(dq-jn4eN!FPFxegbUWmABeE<|M|uBznR@?J zA2e>#|EA`|AjijNbmWJX)7Lx0ryQ{YfLuoaOt@gQxsr`ijHZ6j+G4=TTF7VEHp1bup;+ zyFSW^o_1D}v;Q*U$RY^@V`$S@s=HnQ5RA z7JAG_0ARTr%zlL}SNfH7QO^Mymng3XO68j3*vAm#!;uPI1}~EHwGco})gF%i;iY*` z-OGEG@N=@4OoQ}>sI@Cv1vk}ZFMWC&FtE(L=ysXexM&r5--dJl zL2=VQJ;G<*(CJ;(927!uB#hNUw1Cy7skrvyx#J~1N&hH0MRn0zeXc17IO`{IDzLv3 zplUnQ1JDJ}#)kY8DD5Q}XDska-E0lLrZ2T8I{Q>ug`wPhf;wuMsWuKdRhq&CZ!uqS zGl=-Sm9RJT1H%v82Uz025;quyT@cMX{($b=ad#7WqwM{SkQ!#G|bZ{|r)NRR^`Sb=^0Ddcr}VB`vfNt5IN$ z-;k(4ah3v!(-cfFONG<&xoH)uLODM)#`S22U<__~XYPqtJ+$0UbAB#}y#6r^d=4x; zElg>G7Ud-%_$2WR;)NN^!zX$}Tj;h0r2j0ADX@lS!|&Xumun}n%=racZr|Mi2C+{x zdd|5(!Bv2IWl=e8mQ(;WTzX$Q3~c zZ(Q__HEsHOon5W-xpS;`FA4I?|JccqsP56gG~c#Hip(KfHp;zs5Z4h= z&;sw;Dew&2(!HI21%vCx+~j5z?`$3J@y+`KaIXS`2-`_WVUqYK)&UL1>Shqng#)QP0dM(!P>wCz3zZ2qU?K&^#M&4PLiZ|H3Ho|9Jd;~`;~)1# z3+7?X{my;c)%E&0v69=LNY>x+hQNyeJDXr+jRv2i9+WE)KWbaSI%%yaHPW4q z7D@LrDG3s!wu2tb2Edja0(rO|;|&Y~w7{?I4OLPR72{!*LzF}sL$T1^xGB`^tHFN+ zLUsajI5E+ciGmz+p1$H`YT*0Sm}pA5VsSGFUGL^S>g%sz0Q3%b^_C$>)WTwt$QcI} zl57RR4N82fw^QJ&!_w*d6=-#%Qll2TiKgX#ImSoMX>4IjgJ`CsFWPA0FHm_(APPDH z2m?z$YFJ7KFxrGu(KbjvbepChH;#x=V=!P#Sp~vSaTK+Vf>D_=$wD zP*p9Og31ONOpSnQkwv=ep8=9W(u@Z zEe2}?i(!4#{y>DW8wXWRQLxEn=>H&V7^@*5 z6rMaOYL#mWFPuJ7$SciT+Fq<;n`fV$l6*1va!!~t6WaIC61<`*3)lxeecE8}eK6Q7 zZ+2TpafPDU-Ayw5>*hC6h}2Z3<9K;-YpR z35QjIeqaV<07L2(@-v~AQZR>^ZX5haHF0qH9+acf-~k_VQWhp!DlI9$lWj>M4yTnU zM{B&zP&Knu0+e$DCIy-fqbV3IF3u>*Dvo84`q)GE=E_EfBOBSnz~t5>+6!N{x-k9v&m=$R<2H2R73c<%-k_E{5j=Rb^jI)${uJEBl%uGI;pMP7~Vjz6; z)t;M5Y&}s{@O1La4T0jqRUy_4O}g@tXO^q^k#Z;z`D>iNfMo>bou6S!vpvc)13bH9 zoq={i({uOy)QFI`c1NWl>Fjf~KU?N6)Dh1z7Pkvc5=$M2Vq7Adg$|d|d9bniQk}oa zPu|VAGL9pu3PZw7gM6E9yE2l@h4O!=(WtPYn40YCGoJU&jVf0v>$BFKfz=UqR zjC>S=SIa8i1NZKZW>+5{U1YOvPDdd|i84LYE0Ap9>n37fHKB|*okAMYwIvtcBGs+T zEs=J1#T%x&ljNnCflGi_tF)h+*89y4Z+&-@DzS`^yWW?nv3aSCzO5M9hmj1BO35*l zo7g$dYtv)lytA6S!<6Q5NfS^W*SHjg5=`Jb5Lj1Cf^a*L6&Y;FyD#;0=+iw_cf^Lv^#!(&bcH>AsA7V_UetEbebJeAH3r%_bNtDEixBtdJBNdRswZ zX#KSnIH$t&RYM)-0{&>4B2mZ4xL3Uh$p3|ten$w zUn_5W8Y}$XUA!~QnT`lFaoB0r`;hHIGGr;;KJ~Au>F)*rL(k&77zQU6TrY?rhmHDd zreGe5k%7I?W~-c*3Q-5mkNXSQj(g^EFNQ9dElMlCciN_CJer5(tBl-AkW_l zD`2YXwWe(?5CIyvY^CX2q((RN$Fx`9eg3({kD8Hlp(f9c`Q>;nHQg}6 zXFO&kyjn*>-F(bwZr~o2K^&nTU?Ix|K4cK9Z8yzgz(LPsN%$gd6&u>&4iSIzv77Py zeHd=RTB7w)tEQr`D#j)=2mZoP%1c*UkW5tLUnU6%0W< za1slx7byt~LQDq*Po{KNcUCB=D_g7XK<$|tV(BtgO!*#R?0`Z0K-_|&^FH)WrU23@ z5n$|UWgY+C0d*`gw;tNy=V>7P3lI2&h%pk_@HaRgI$lj)*IwM)VK-m}+oRkCqP5nm z+{Fsdx0}WO9cyz%@bnYz(5a;05WvqA36bajCECKD{eMPhBD(816=3b{e=M>2v+J<-MKG!_hJbPEI}weYU3BpzHuI;0033UqP-2XFfn-T2u%DMnW? zTbMSo^51^K0e^XHTzq=Z%O&+2?I2F!lV>e{i2il86@k-6ra{4)v9+*$=_rnqAB$$v z=)58@5zruL&(8=bQmSp*S?3>^KoOe5HL6q4HO|`usP1HakwMKcl~uZVEToE+!6xrf z&?HgR4CUcxN&;!dsllU+9WmJ(V;-}If4!@o$Z8A!(Qp-Z8jsIUAdc|yS2DIU3;$dg zmb@SlEk}%U;bdEhZ+$KA{+8E90kdt&_7pl)gP*A{(N2AJSug~A@HlxL*yXO4^)#ot za+PYZwjjbX%|D$a6nC!amYWPTwwoG~#=;|4_9d<7f*SeWlHV>4opyCV%u~8$3?=^O zZUrk#b{kP$59cNQ5@pK+PVU0yugiPu%37(@0;Kq#8%`{O{VX+Z%N)QG-!}i}YmvFK zhSMFWNx+6xD(J>l5AwM6lYxhIs(%72o$xs4qQh+EtK7@cgz-(c9;#SS4OgNuviROQ ziMR&}*++hT`(c8wgQbkVu-ps%q;-Y|&;H2=tvpk}8vB=fU4-cjslHk9lBl;)d+Wk1?5#i-8T@ zinF+#lCfis=13D*&Lz-LpPEy;azV`ENf7sLQ`djJlof9waJ9;@1h^&4oI(c%aVmPO ze#u;i74;80%DEcwha`RGfyq!B5r#$NMF)kat@xWx53I!Iel%YXNHeQRkRB?+AE5SBmh$tFP=J^kktbUZ``-O$Wu_WgL5*HDM{x%NQtB?Ma))emX-F(WTFb+XaE|3w&?##WKpF6Lu0K zQ?t5rM9`%9mcb8=Xlxt)JTdK%84<0KYCU?%&!YadwA(~!x zq5F+2*#8fwLHBjt-N+k8HxVSqm(JUFTmdDRQA^@6#^i@OyMn|ea_{U!<#1H9Y{Wi$ zR$r@{39{cIYPv!(GWmi?i8VZB@JHQy?UN@2zh>PC&<;jf#ywH<($whlmQ^%RLvQ$6 z@1yez*of&cM+u|Re;-u_=(5-^F@Fdc7c-3Cc{4lMDX1T#_SpclX{T)RkTO&1FuZ%9 z5g@t-H*f2_gDA>N^3??h*0G&sGhGDn_3fUhf&GX=>}pJlck?VI1k7_Z9@LKy9j2<= zDFF$_T`Dcu6OWhRgWzXD4>J(obx=4+?0*>4Ik310{glBTR~pAvTd?1Qz29h>(B%YsT#c{9zdsVXkT z!1&ts5?mn=Q8s@cpU09+UXlhm2HtQA5o0|;E30L!g6i=u=wD8=3}9Cx>{pqWiZH?q zz`EiX0%kHQ6;~GF)c0GA9x-X~A7S9pw>h%uHd>@;h$d?|7Y4Apg^4QM$cYtuV3-Xa zN{Xn)DQ$q!!lxj5)24fhOsjf|wVTqGPW9Tyo++IYkSK?mv>C>#dX!Zli4G-WoaB{p z4<=nps+POf45qB(#(Zl~9Y4$LB_Qt{VYm}g-|l3Cp%%A{tc+$iumX`vIIhqQWfn$r z$o(O}pO8X5H;RJ!qanO*sSytpjwx!YzE(ejwstxUO*6N{c5l1%_NvfejZfnP8nVyy z=#=1b>xtO%SDRsD#EP_+VAdG_cz-*tAZV3Yaz%YmKBdb?PgD!BK_WGK0d~g zga>-U5cO6ymui|IY0e91uMe3tYK)^bZF#qb7%`>;%I&`|b{Qycc?A3NXt#OJP zmF~_#IBH6wd6o2xya2!YYnlJgN6p6Vv&Sh`^c90QjeK!-L87IcAYyx zO6haN9rlr!gPBeNAL-qhZvTC_4)&N!j2NuiZ!u>!9WGJ4TwBzN8yc|qaxEEjp$FDq zD(cV`aLJ_#`IVh~HCn3nDmk+D%x&&RSoWk+iVM~_@ggJ5LN*#%w)98kfkJX-qQ}v6 zyh9lQBrY`pBA17~k+Q0WG%_ReuNFV&>tBAdozUKd&L1U_8^+#LN!`)hffL=1Eb`L< zVjIKH-6yW8wK3qNR&c#>!s^=FZvu1!%22+$B(!#>V#U#+z{fjHL`8+6a5-Kfoh`3y z{KT;lm2jCWqv_Gbv_SQWSv&*iG0J9=^=+{V=wj~KI+f+Yij56VER{K5yZ44H^(_3#q54WLUIryiO#86~Nn zR3Uk$ui@sT8ls($V~rWKiy^TsYG+9I*XmtR)ZkiCC;wBJ`V{icM+!k(szl1hNXNmJBV{VD{2O+u=@Y&E(*M>1)eH4Fn<9jd|!9Q2j z7muZOuy}W+#(ri(X=}2UW#?V(vy_a@H?|URy=4WRv+%nXuX2Ns*eDo7-fl3VQ?R?B zvv_a?8MuzI&qbzc5PIN8Z}UqrWIYvM5r{yqOG?ewz(q+T=hx$N*w0w+PYoiEJJ3?c5x!+wR)T% zk4!NnQEHzkUv3dQ-${0@_DiIGiSf@KEq`RRx6*OCytrkxXAl|hQ=?v{eUBC^t6bm@ z6bBr833m!8lxuSYNWpxDSlF7|?iA(0M0-x7Sgl@@E>R9W!E>{>u==n;-WADw#~6x5xK=V*k2yclTlFN{<_=^~VM!Lkc2Q|>quWG|hZ0pXtmJ$p~=-tET z+_7G2v2_Im*%j!2ILgkhA1Ezj^s_5_WNTTbdzxh*I-U^kR@9jJ%A)7S@fj5FY~AI% zlR4CkP0m}oFc9l4&Vjcfi0!D;36E1wB3lqdbOq+Tcf_&#zo9EL@+Np1jm)#|2Hmtf9N#D`qvtw-CX03YbfKCP!LGMyXaM zokb{(isG}W<~P{?{(|ECC01eld6Iavmr|A0<*adEYBYvB1eWY03JIle64VV}Qy$yO zbuNaK-9PC*ub3y_uN=O4Ukl!;%)N|lCLyu@o|4}acuq?dJ0Kn18nDtWJudvjJCUoi z5>|cKQSPm%xtDb3HOYi=3Oz+Ds39+Df6KEX#NgjD!{dOU!u}k@rCcX^=D!NpKQQau z3t9chm7+CtFi3XOhl!NM{m;7>A`v1TUm>b*1#Pj(%?@gJEMRq@0%eFQ8LqiXZCtm! zB4J1`VJq_jc0SNIpV3tN#x=~SWhB85+l!}>i)C7kp?E0h*l*WatJ4d2zzkY(@2FH& zCB!*SbK--x!l*s0`bf93Rh?P9R^rhT+L>~PrDRLCV-H&^`5mhuua&fmKI6{w8_T=u zkpNKxy{RC){@Ctb$>O34J1uA~bapN}>@N_VGjv&Gk08Mp+V>s3#HYXxYutoQ zi6&D9^0#zu0jXpDVsA8vB=)+KIAlDSkQ+DES5^bGEOoT>$f`AEuQMnnUsQ-+^qXQ#c|aPUneI- zAJ4mpAEi!#&KEh}-7k%KJAkKN^yeF7BE1p6o7$-TmMQ^cr?SU;T99eVtKYGHnTB6q zo;2}{o-ZGWs?hsZC*ODZE6Yw-x8pV_xfE)G;V(8=!mUfvUx_5r;)!M*G)Mp4Y)ZMqEcg5b1F|SMVEKRCV|j8dr=5#Rfg9O zdG}kla3PpN6?%3hTYr6?Er$5FkG>JN`?f=PWEbmjhArK*Ej*_alDifgxd_G83&i2vjd?1 ziNR+i);<6z;qn#_Q+_p+TU z&q!tobz^Xv`=#`Zx9%a8lQ#z4V>!nn|8q!D&xpi&?9{!phK|5~rb?gl{%`8UxgeTvmay7jx;-DJD0V5h{d*)_RLm zG1%4&xTtham=iSe;ffBUhhX;4G;rfFT@@XB@$cpCM<_rD)4s4-uEQdE!kg^jqQSF* z{?VGgNANQcw(5i{@-Kco#Nj2Q0;|{ygz6**=Rremy4CBtQKD_JDm}PbyH~SW7RRuV zjEC#{ex+YODd*g75fh|Z#yYrcd}5cpR8G$|&Y6|BN&*?6ifv|(q>vfH3mFyVE-{N) zRg>lGm-P(yQmsQa?a%r%H>wXSGIssVRZ6Dqdw{y;bljSK5sw;b#z`;VQ1xrDyxu$w zY*lfP4Wys93tB|uRVBBK1^%$;K)x*!28j*0U8pWT`%(4IV)B+;`YB?DkXWOyYRwf? zbO}8)9C?&eFw!o44^FHclfD(np}-<3%u$aLDoOm&FqD24i6k6YrEi2f0@+$U-2f-n z0rzQQ0>W)~j@JXp>IsPMHMUU2H3Z-Yc?{!f7Lil@y-5}nom;BtRs=K!F2ikEI@D}( zb1KGv7gv~HWk0XgNmrf5;xur~xD`}6mJ82Vl=@TO9Z@WNGsEj~gFV5{?5;BG<)Fjn zLIihHzz)X4t9`a~YrM*BXsUpGThWpX4U0(lauzpSe(gt%P6J6TJD7 zubev)bpiu}EkE3a{RW<%%CE2Bmk8Avj8x>ZT$|&Y`RhG)+G~$e?(|OUejF&baBvI0 zD$8C4XRjjb4Gfhr-;F{h>mJ*R?xvlp0}vn9`HZp=!nJj!gSkN-vz`Db-g{x5>6?Tg zzO0tHR>by$Vj|Oi=;KNH(}>=v^7-BNwv%eQ_nTt@HpwpBB-CnA)|YEdDCerMRXau< zDgOycTyGD$!>qsl2$1EZs$-Ff;#K?6wv?PXDmQ@lP(-52^{tj$d_APTlTnx+bE^Sk>s+j|GLMX?0p@86x!h)V);I5x0v&5;8(JNxjU(nfR$D zf5K}_nh!XZCMCy6bIOy`T#4T$OdUcR65!0)`n?%MX!UFRus<&4jAask{Xfr&d zH%G>WM9*64PzI0NGBtNEhJ86YZW2gWKia~i-_#4$z9sPu)pUU4z^-(hC&j47$Hppn z0rCQ#hx_2*+Aoay2HjioUx^jjcG?X@uk@o69f*Pt8=~7K>?FFFDY2tLy7Qzj*F+aj zn0zwSNn~#1%+7D5oPm(Zawa#~(poU%u_+X2v6Ln^;8*V3GKWto#j zC4_tihW7CfoR#)vN>pT+X6lk)greXZ{blY4TUMorpy^vf8Bzii#($)_&f3K*YZTq1 za07blxrQbFgzUA_**-!aF~4l{eI|ap5B$dHmdDYeLCYl{HEH!bsvHX}fhKqdPtnih zr|u9TtHR6CKhhlPX#21o ziXLshUl`F%S)N~0C~ux?J^}UQ9Q=;n`5 zf_(lR0>3){zLodt$-&CYVIAmmSj+m0U@nU6%1h_<3AJ2h2|iYd(QwkPwco5rxJd7! zMS0B~Z&f({VQOeS_-wRG0l61{ZG)((oJ2~tXs|}6$Tz%Vq&c>G7vagT7T`oa z!0zn=gV|w~g1499O9JR?$g}uCyH{p~|H!VXG)hC*5)MPBgh=44Sc>&S_{jJV&@BJQ z$cBaxorRokai1MN#+?l-EyQr-^4#MS-Hm^61zNLZ7xRpp%^Bqc1}??>k=xmjY&8`T zPWqmy{R@zzt=aoT=6Dijsj@C_uClTQra`sH(<-kZM->g(9~ZB5jcO51!&qn~XEh4y zXM&Gmv1#?#(TbhR;u9p_qJry$62MP7WN`V@6g9s_Z?viSQ06EUpi_!O*>Gn1 z-Gfw$V3i@_5)a?Bi#(rpa~DeSaeFj;*<=ykagI`z@US>I6R_l>SKsA{S>OXqtXLaf zhAH0VGdq=6<$n`v?kvr_PHL2K_vFFp%VQ~3>5Ee<_Z~?~o?;K8B{tNkGAZ9Fp2n`u zCYEKqDZSTqxYgOI{mv%PaW?h=?py8M6NSt-MfGx5YT117X{oxfKCeQa6s^=$VoV1Z zYADe(V`-<6H1in=>!ZFW=hOjEvs->^yd3E7_~!VBUS=B8QU>=*WqdNnwjSw_x_PjI zq%10QRorwSFGo5mHZYD&?bLRUErpL!=o@d=c~hASrN5z@>L~rCmiNmWL&YbJb9)?1 zT)|MG@$$Q9G4U{4nq3{+oZfvDWS|rtvcW1NTyoEvosZuW_NPqO7hd;vj_Ow?!raQh z*IzEN!ZizPJ6k@h8>)A^!umg7Rc-b4-CL{czl=JLU7ft{Gc3Ge!O34@Aq1eRSlm3t zJKl55sh+W4HGXD!;8R`)5O0*;b)g)I`E<$IW%T+4fV`d_UWsq|+zRftYvZV+nlrxWqLC z{gCoZzx%&&RF@Z-WR2c_owUd<|9qs>233Ix3<#b&1ix|u(ji&hVzGUxwf24|6>c>( zF}vqU_VB@&S%rUU0T4^KdmqVGW^wUT9}nxgzcpCg5(z~9Y8>yW{d(&rngV3Nb+^>& zREIHa{r=bQJs-3}?x7;uonT^+W*=wAJzSiQC%vGG?z;}ACz6kSY3Hn#-ShC0ME|p( z5bRqx5#HkY!EE*d%q$RaH#@ldf@Wz_I6jIe?nqVdBN7EKV^v+^&DSZytwW2nfj+Tw z74i5c)>U8in|omIXtv9-w2vSNCoOB!^|P;<`WYP|KlmuD5iuM2S{RRE=9G4eTF)0o z1?}mGO7-i(96DpB$xm(cw6km3IQqPDY1m|3xiIJN{Mch8-g*9hpIOo^378+B7GaanEqEf8 zhZbWJp(b5*0x!2@ygibQlHX>%*wdfsM9(9bXl|5~!L=CrS#*+#%C5LdJ)TUiju@a3 zLQAtx$8?{TH1aV58*@d(jAlU#hqNG7WicTjy?@_}GxS_1MOujIAo9;c9$IO|K;Q>- zRaGzdAhI6dMg)Hs-4hDy=_z. -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. - - 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 binaries 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 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. - - 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. - - 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. - - 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. - - 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/ruby/gems/net-telnet-0.2.0/README.md b/ruby/gems/net-telnet-0.2.0/README.md deleted file mode 100644 index 9e11229da..000000000 --- a/ruby/gems/net-telnet-0.2.0/README.md +++ /dev/null @@ -1,62 +0,0 @@ -# Net::Telnet - -[![Build Status](https://travis-ci.org/ruby/net-telnet.svg?branch=master)](https://travis-ci.org/ruby/net-telnet) - -Provides telnet client functionality. - -This class also has, through delegation, all the methods of a socket object (by default, a **TCPSocket**, but can be set by the **Proxy** option to ```new()```). This provides methods such as ```close()``` to end the session and ```sysread()``` to read data directly from the host, instead of via the ```waitfor()``` mechanism. Note that if you do use ```sysread()``` directly when in telnet mode, you should probably pass the output through ```preprocess()``` to extract telnet command sequences. - -## Installation - -Add this line to your application's Gemfile: - -```ruby -gem 'net-telnet' -``` - -And then execute: - - $ bundle - -Or install it yourself as: - - $ gem install net-telnet - -## Usage - -### Log in and send a command, echoing all output to stdout - -```ruby -localhost = Net::Telnet::new("Host" => "localhost", - "Timeout" => 10, - "Prompt" => /[$%#>] \z/n) -localhost.login("username", "password") { |c| print c } -localhost.cmd("command") { |c| print c } -localhost.close -``` - -### Check a POP server to see if you have mail - -```ruby -pop = Net::Telnet::new("Host" => "your_destination_host_here", - "Port" => 110, - "Telnetmode" => false, - "Prompt" => /^\+OK/n) -pop.cmd("user " + "your_username_here") { |c| print c } -pop.cmd("pass " + "your_password_here") { |c| print c } -pop.cmd("list") { |c| print c } -``` - -## Development - -After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment. - -To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). - -## Contributing - -1. Fork it ( https://github.com/ruby/net-telnet/fork ) -2. Create your feature branch (`git checkout -b my-new-feature`) -3. Commit your changes (`git commit -am 'Add some feature'`) -4. Push to the branch (`git push origin my-new-feature`) -5. Create a new Pull Request diff --git a/ruby/gems/net-telnet-0.2.0/Rakefile b/ruby/gems/net-telnet-0.2.0/Rakefile deleted file mode 100644 index 4bd5f69be..000000000 --- a/ruby/gems/net-telnet-0.2.0/Rakefile +++ /dev/null @@ -1,9 +0,0 @@ -require "bundler/gem_tasks" -require 'rake/testtask' - -Rake::TestTask.new do |t| - t.libs << "test" - t.test_files = FileList['test/test_*.rb'] -end - -task(default: :test) diff --git a/ruby/gems/net-telnet-0.2.0/bin/console b/ruby/gems/net-telnet-0.2.0/bin/console deleted file mode 100755 index 83f6eec91..000000000 --- a/ruby/gems/net-telnet-0.2.0/bin/console +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env ruby - -require "bundler/setup" -require "net/telnet" - -# You can add fixtures and/or initialization code here to make experimenting -# with your gem easier. You can also use a different console, if you like. - -# (If you use this, don't forget to add pry to your Gemfile!) -# require "pry" -# Pry.start - -require "irb" -IRB.start diff --git a/ruby/gems/net-telnet-0.2.0/bin/setup b/ruby/gems/net-telnet-0.2.0/bin/setup deleted file mode 100755 index b65ed50ff..000000000 --- a/ruby/gems/net-telnet-0.2.0/bin/setup +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -euo pipefail -IFS=$'\n\t' - -bundle install - -# Do any other automated setup that you need to do here diff --git a/ruby/gems/net-telnet-0.2.0/lib/net-telnet.rb b/ruby/gems/net-telnet-0.2.0/lib/net-telnet.rb deleted file mode 100644 index 3546d5327..000000000 --- a/ruby/gems/net-telnet-0.2.0/lib/net-telnet.rb +++ /dev/null @@ -1 +0,0 @@ -require 'net/telnet' diff --git a/ruby/gems/net-telnet-0.2.0/lib/net/telnet.rb b/ruby/gems/net-telnet-0.2.0/lib/net/telnet.rb deleted file mode 100644 index 43764f27e..000000000 --- a/ruby/gems/net-telnet-0.2.0/lib/net/telnet.rb +++ /dev/null @@ -1,763 +0,0 @@ -# = net/telnet.rb - Simple Telnet Client Library -# -# Author:: Wakou Aoyama -# Documentation:: William Webber and Wakou Aoyama -# -# This file holds the class Net::Telnet, which provides client-side -# telnet functionality. -# -# For documentation, see Net::Telnet. -# - -require "net/protocol" -require "English" - -module Net - - # - # == Net::Telnet - # - # Provides telnet client functionality. - # - # This class also has, through delegation, all the methods of a - # socket object (by default, a +TCPSocket+, but can be set by the - # +Proxy+ option to new()). This provides methods such as - # close() to end the session and sysread() to read - # data directly from the host, instead of via the waitfor() - # mechanism. Note that if you do use sysread() directly - # when in telnet mode, you should probably pass the output through - # preprocess() to extract telnet command sequences. - # - # == Overview - # - # The telnet protocol allows a client to login remotely to a user - # account on a server and execute commands via a shell. The equivalent - # is done by creating a Net::Telnet class with the +Host+ option - # set to your host, calling #login() with your user and password, - # issuing one or more #cmd() calls, and then calling #close() - # to end the session. The #waitfor(), #print(), #puts(), and - # #write() methods, which #cmd() is implemented on top of, are - # only needed if you are doing something more complicated. - # - # A Net::Telnet object can also be used to connect to non-telnet - # services, such as SMTP or HTTP. In this case, you normally - # want to provide the +Port+ option to specify the port to - # connect to, and set the +Telnetmode+ option to false to prevent - # the client from attempting to interpret telnet command sequences. - # Generally, #login() will not work with other protocols, and you - # have to handle authentication yourself. - # - # For some protocols, it will be possible to specify the +Prompt+ - # option once when you create the Telnet object and use #cmd() calls; - # for others, you will have to specify the response sequence to - # look for as the Match option to every #cmd() call, or call - # #puts() and #waitfor() directly; for yet others, you will have - # to use #sysread() instead of #waitfor() and parse server - # responses yourself. - # - # It is worth noting that when you create a new Net::Telnet object, - # you can supply a proxy IO channel via the Proxy option. This - # can be used to attach the Telnet object to other Telnet objects, - # to already open sockets, or to any read-write IO object. This - # can be useful, for instance, for setting up a test fixture for - # unit testing. - # - # == Examples - # - # === Log in and send a command, echoing all output to stdout - # - # localhost = Net::Telnet::new("Host" => "localhost", - # "Timeout" => 10, - # "Prompt" => /[$%#>] \z/n) - # localhost.login("username", "password") { |c| print c } - # localhost.cmd("command") { |c| print c } - # localhost.close - # - # - # === Check a POP server to see if you have mail - # - # pop = Net::Telnet::new("Host" => "your_destination_host_here", - # "Port" => 110, - # "Telnetmode" => false, - # "Prompt" => /^\+OK/n) - # pop.cmd("user " + "your_username_here") { |c| print c } - # pop.cmd("pass " + "your_password_here") { |c| print c } - # pop.cmd("list") { |c| print c } - # - # == References - # - # There are a large number of RFCs relevant to the Telnet protocol. - # RFCs 854-861 define the base protocol. For a complete listing - # of relevant RFCs, see - # http://www.omnifarious.org/~hopper/technical/telnet-rfc.html - # - class Telnet - - # :stopdoc: - IAC = 255.chr # "\377" # "\xff" # interpret as command - DONT = 254.chr # "\376" # "\xfe" # you are not to use option - DO = 253.chr # "\375" # "\xfd" # please, you use option - WONT = 252.chr # "\374" # "\xfc" # I won't use option - WILL = 251.chr # "\373" # "\xfb" # I will use option - SB = 250.chr # "\372" # "\xfa" # interpret as subnegotiation - GA = 249.chr # "\371" # "\xf9" # you may reverse the line - EL = 248.chr # "\370" # "\xf8" # erase the current line - EC = 247.chr # "\367" # "\xf7" # erase the current character - AYT = 246.chr # "\366" # "\xf6" # are you there - AO = 245.chr # "\365" # "\xf5" # abort output--but let prog finish - IP = 244.chr # "\364" # "\xf4" # interrupt process--permanently - BREAK = 243.chr # "\363" # "\xf3" # break - DM = 242.chr # "\362" # "\xf2" # data mark--for connect. cleaning - NOP = 241.chr # "\361" # "\xf1" # nop - SE = 240.chr # "\360" # "\xf0" # end sub negotiation - EOR = 239.chr # "\357" # "\xef" # end of record (transparent mode) - ABORT = 238.chr # "\356" # "\xee" # Abort process - SUSP = 237.chr # "\355" # "\xed" # Suspend process - EOF = 236.chr # "\354" # "\xec" # End of file - SYNCH = 242.chr # "\362" # "\xf2" # for telfunc calls - - OPT_BINARY = 0.chr # "\000" # "\x00" # Binary Transmission - OPT_ECHO = 1.chr # "\001" # "\x01" # Echo - OPT_RCP = 2.chr # "\002" # "\x02" # Reconnection - OPT_SGA = 3.chr # "\003" # "\x03" # Suppress Go Ahead - OPT_NAMS = 4.chr # "\004" # "\x04" # Approx Message Size Negotiation - OPT_STATUS = 5.chr # "\005" # "\x05" # Status - OPT_TM = 6.chr # "\006" # "\x06" # Timing Mark - OPT_RCTE = 7.chr # "\a" # "\x07" # Remote Controlled Trans and Echo - OPT_NAOL = 8.chr # "\010" # "\x08" # Output Line Width - OPT_NAOP = 9.chr # "\t" # "\x09" # Output Page Size - OPT_NAOCRD = 10.chr # "\n" # "\x0a" # Output Carriage-Return Disposition - OPT_NAOHTS = 11.chr # "\v" # "\x0b" # Output Horizontal Tab Stops - OPT_NAOHTD = 12.chr # "\f" # "\x0c" # Output Horizontal Tab Disposition - OPT_NAOFFD = 13.chr # "\r" # "\x0d" # Output Formfeed Disposition - OPT_NAOVTS = 14.chr # "\016" # "\x0e" # Output Vertical Tabstops - OPT_NAOVTD = 15.chr # "\017" # "\x0f" # Output Vertical Tab Disposition - OPT_NAOLFD = 16.chr # "\020" # "\x10" # Output Linefeed Disposition - OPT_XASCII = 17.chr # "\021" # "\x11" # Extended ASCII - OPT_LOGOUT = 18.chr # "\022" # "\x12" # Logout - OPT_BM = 19.chr # "\023" # "\x13" # Byte Macro - OPT_DET = 20.chr # "\024" # "\x14" # Data Entry Terminal - OPT_SUPDUP = 21.chr # "\025" # "\x15" # SUPDUP - OPT_SUPDUPOUTPUT = 22.chr # "\026" # "\x16" # SUPDUP Output - OPT_SNDLOC = 23.chr # "\027" # "\x17" # Send Location - OPT_TTYPE = 24.chr # "\030" # "\x18" # Terminal Type - OPT_EOR = 25.chr # "\031" # "\x19" # End of Record - OPT_TUID = 26.chr # "\032" # "\x1a" # TACACS User Identification - OPT_OUTMRK = 27.chr # "\e" # "\x1b" # Output Marking - OPT_TTYLOC = 28.chr # "\034" # "\x1c" # Terminal Location Number - OPT_3270REGIME = 29.chr # "\035" # "\x1d" # Telnet 3270 Regime - OPT_X3PAD = 30.chr # "\036" # "\x1e" # X.3 PAD - OPT_NAWS = 31.chr # "\037" # "\x1f" # Negotiate About Window Size - OPT_TSPEED = 32.chr # " " # "\x20" # Terminal Speed - OPT_LFLOW = 33.chr # "!" # "\x21" # Remote Flow Control - OPT_LINEMODE = 34.chr # "\"" # "\x22" # Linemode - OPT_XDISPLOC = 35.chr # "#" # "\x23" # X Display Location - OPT_OLD_ENVIRON = 36.chr # "$" # "\x24" # Environment Option - OPT_AUTHENTICATION = 37.chr # "%" # "\x25" # Authentication Option - OPT_ENCRYPT = 38.chr # "&" # "\x26" # Encryption Option - OPT_NEW_ENVIRON = 39.chr # "'" # "\x27" # New Environment Option - OPT_EXOPL = 255.chr # "\377" # "\xff" # Extended-Options-List - - NULL = "\000" - CR = "\015" - LF = "\012" - EOL = CR + LF - REVISION = '$Id$' - # :startdoc: - - # - # Creates a new Net::Telnet object. - # - # Attempts to connect to the host (unless the Proxy option is - # provided: see below). If a block is provided, it is yielded - # status messages on the attempt to connect to the server, of - # the form: - # - # Trying localhost... - # Connected to localhost. - # - # +options+ is a hash of options. The following example lists - # all options and their default values. - # - # host = Net::Telnet::new( - # "Host" => "localhost", # default: "localhost" - # "Port" => 23, # default: 23 - # "Binmode" => false, # default: false - # "Output_log" => "output_log", # default: nil (no output) - # "Dump_log" => "dump_log", # default: nil (no output) - # "Prompt" => /[$%#>] \z/n, # default: /[$%#>] \z/n - # "Telnetmode" => true, # default: true - # "Timeout" => 10, # default: 10 - # # if ignore timeout then set "Timeout" to false. - # "Waittime" => 0, # default: 0 - # "Proxy" => proxy # default: nil - # # proxy is Net::Telnet or IO object - # ) - # - # The options have the following meanings: - # - # Host:: the hostname or IP address of the host to connect to, as a String. - # Defaults to "localhost". - # - # Port:: the port to connect to. Defaults to 23. - # - # Binmode:: if false (the default), newline substitution is performed. - # Outgoing LF is - # converted to CRLF, and incoming CRLF is converted to LF. If - # true, this substitution is not performed. This value can - # also be set with the #binmode() method. The - # outgoing conversion only applies to the #puts() and #print() - # methods, not the #write() method. The precise nature of - # the newline conversion is also affected by the telnet options - # SGA and BIN. - # - # Output_log:: the name of the file to write connection status messages - # and all received traffic to. In the case of a proper - # Telnet session, this will include the client input as - # echoed by the host; otherwise, it only includes server - # responses. Output is appended verbatim to this file. - # By default, no output log is kept. - # - # Dump_log:: as for Output_log, except that output is written in hexdump - # format (16 bytes per line as hex pairs, followed by their - # printable equivalent), with connection status messages - # preceded by '#', sent traffic preceded by '>', and - # received traffic preceded by '<'. By default, not dump log - # is kept. - # - # Prompt:: a regular expression matching the host's command-line prompt - # sequence. This is needed by the Telnet class to determine - # when the output from a command has finished and the host is - # ready to receive a new command. By default, this regular - # expression is /[$%#>] \z/n. - # - # Telnetmode:: a boolean value, true by default. In telnet mode, - # traffic received from the host is parsed for special - # command sequences, and these sequences are escaped - # in outgoing traffic sent using #puts() or #print() - # (but not #write()). If you are using the Net::Telnet - # object to connect to a non-telnet service (such as - # SMTP or POP), this should be set to "false" to prevent - # undesired data corruption. This value can also be set - # by the #telnetmode() method. - # - # Timeout:: the number of seconds to wait before timing out both the - # initial attempt to connect to host (in this constructor), - # which raises a Net::OpenTimeout, and all attempts to read data - # from the host, which raises a Net::ReadTimeout (in #waitfor(), - # #cmd(), and #login()). The default value is 10 seconds. - # You can disable the timeout by setting this value to false. - # In this case, the connect attempt will eventually timeout - # on the underlying connect(2) socket call with an - # Errno::ETIMEDOUT error (but generally only after a few - # minutes), but other attempts to read data from the host - # will hang indefinitely if no data is forthcoming. - # - # Waittime:: the amount of time to wait after seeing what looks like a - # prompt (that is, received data that matches the Prompt - # option regular expression) to see if more data arrives. - # If more data does arrive in this time, Net::Telnet assumes - # that what it saw was not really a prompt. This is to try to - # avoid false matches, but it can also lead to missing real - # prompts (if, for instance, a background process writes to - # the terminal soon after the prompt is displayed). By - # default, set to 0, meaning not to wait for more data. - # - # Proxy:: a proxy object to used instead of opening a direct connection - # to the host. Must be either another Net::Telnet object or - # an IO object. If it is another Net::Telnet object, this - # instance will use that one's socket for communication. If an - # IO object, it is used directly for communication. Any other - # kind of object will cause an error to be raised. - # - def initialize(options) # :yield: mesg - @options = options - @options["Host"] = "localhost" unless @options.has_key?("Host") - @options["Port"] = 23 unless @options.has_key?("Port") - @options["Prompt"] = /[$%#>] \z/n unless @options.has_key?("Prompt") - @options["Timeout"] = 10 unless @options.has_key?("Timeout") - @options["Waittime"] = 0 unless @options.has_key?("Waittime") - unless @options.has_key?("Binmode") - @options["Binmode"] = false - else - unless (true == @options["Binmode"] or false == @options["Binmode"]) - raise ArgumentError, "Binmode option must be true or false" - end - end - - unless @options.has_key?("Telnetmode") - @options["Telnetmode"] = true - else - unless (true == @options["Telnetmode"] or false == @options["Telnetmode"]) - raise ArgumentError, "Telnetmode option must be true or false" - end - end - - @telnet_option = { "SGA" => false, "BINARY" => false } - - if @options.has_key?("Output_log") - @log = File.open(@options["Output_log"], 'a+') - @log.sync = true - @log.binmode - end - - if @options.has_key?("Dump_log") - @dumplog = File.open(@options["Dump_log"], 'a+') - @dumplog.sync = true - @dumplog.binmode - def @dumplog.log_dump(dir, x) # :nodoc: - len = x.length - addr = 0 - offset = 0 - while 0 < len - if len < 16 - line = x[offset, len] - else - line = x[offset, 16] - end - hexvals = line.unpack('H*')[0] - hexvals += ' ' * (32 - hexvals.length) - hexvals = format("%s %s %s %s " * 4, *hexvals.unpack('a2' * 16)) - line = line.gsub(/[\000-\037\177-\377]/n, '.') - printf "%s 0x%5.5x: %s%s\n", dir, addr, hexvals, line - addr += 16 - offset += 16 - len -= 16 - end - print "\n" - end - end - - if @options.has_key?("Proxy") - if @options["Proxy"].kind_of?(Net::Telnet) - @sock = @options["Proxy"].sock - elsif @options["Proxy"].kind_of?(IO) - @sock = @options["Proxy"] - else - raise "Error: Proxy must be an instance of Net::Telnet or IO." - end - else - message = "Trying " + @options["Host"] + "...\n" - yield(message) if block_given? - @log.write(message) if @options.has_key?("Output_log") - @dumplog.log_dump('#', message) if @options.has_key?("Dump_log") - - begin - if @options["Timeout"] == false - @sock = TCPSocket.open(@options["Host"], @options["Port"]) - else - Timeout.timeout(@options["Timeout"], Net::OpenTimeout) do - @sock = TCPSocket.open(@options["Host"], @options["Port"]) - end - end - rescue Net::OpenTimeout - raise Net::OpenTimeout, "timed out while opening a connection to the host" - rescue - @log.write($ERROR_INFO.to_s + "\n") if @options.has_key?("Output_log") - @dumplog.log_dump('#', $ERROR_INFO.to_s + "\n") if @options.has_key?("Dump_log") - raise - end - @sock.sync = true - @sock.binmode - - message = "Connected to " + @options["Host"] + ".\n" - yield(message) if block_given? - @log.write(message) if @options.has_key?("Output_log") - @dumplog.log_dump('#', message) if @options.has_key?("Dump_log") - end - - end # initialize - - # The socket the Telnet object is using. Note that this object becomes - # a delegate of the Telnet object, so normally you invoke its methods - # directly on the Telnet object. - attr_reader :sock - - # Set telnet command interpretation on (+mode+ == true) or off - # (+mode+ == false), or return the current value (+mode+ not - # provided). It should be on for true telnet sessions, off if - # using Net::Telnet to connect to a non-telnet service such - # as SMTP. - def telnetmode(mode = nil) - case mode - when nil - @options["Telnetmode"] - when true, false - @options["Telnetmode"] = mode - else - raise ArgumentError, "argument must be true or false, or missing" - end - end - - # Turn telnet command interpretation on (true) or off (false). It - # should be on for true telnet sessions, off if using Net::Telnet - # to connect to a non-telnet service such as SMTP. - def telnetmode=(mode) - if (true == mode or false == mode) - @options["Telnetmode"] = mode - else - raise ArgumentError, "argument must be true or false" - end - end - - # Turn newline conversion on (+mode+ == false) or off (+mode+ == true), - # or return the current value (+mode+ is not specified). - def binmode(mode = nil) - case mode - when nil - @options["Binmode"] - when true, false - @options["Binmode"] = mode - else - raise ArgumentError, "argument must be true or false" - end - end - - # Turn newline conversion on (false) or off (true). - def binmode=(mode) - if (true == mode or false == mode) - @options["Binmode"] = mode - else - raise ArgumentError, "argument must be true or false" - end - end - - # Preprocess received data from the host. - # - # Performs newline conversion and detects telnet command sequences. - # Called automatically by #waitfor(). You should only use this - # method yourself if you have read input directly using sysread() - # or similar, and even then only if in telnet mode. - def preprocess(string) - # combine CR+NULL into CR - string = string.gsub(/#{CR}#{NULL}/no, CR) if @options["Telnetmode"] - - # combine EOL into "\n" - string = string.gsub(/#{EOL}/no, "\n") unless @options["Binmode"] - - # remove NULL - string = string.gsub(/#{NULL}/no, '') unless @options["Binmode"] - - string.gsub(/#{IAC}( - [#{IAC}#{AO}#{AYT}#{DM}#{IP}#{NOP}]| - [#{DO}#{DONT}#{WILL}#{WONT}] - [#{OPT_BINARY}-#{OPT_NEW_ENVIRON}#{OPT_EXOPL}]| - #{SB}[^#{IAC}]*#{IAC}#{SE} - )/xno) do - if IAC == $1 # handle escaped IAC characters - IAC - elsif AYT == $1 # respond to "IAC AYT" (are you there) - self.write("nobody here but us pigeons" + EOL) - '' - elsif DO[0] == $1[0] # respond to "IAC DO x" - if OPT_BINARY[0] == $1[1] - @telnet_option["BINARY"] = true - self.write(IAC + WILL + OPT_BINARY) - else - self.write(IAC + WONT + $1[1..1]) - end - '' - elsif DONT[0] == $1[0] # respond to "IAC DON'T x" with "IAC WON'T x" - self.write(IAC + WONT + $1[1..1]) - '' - elsif WILL[0] == $1[0] # respond to "IAC WILL x" - if OPT_BINARY[0] == $1[1] - self.write(IAC + DO + OPT_BINARY) - elsif OPT_ECHO[0] == $1[1] - self.write(IAC + DO + OPT_ECHO) - elsif OPT_SGA[0] == $1[1] - @telnet_option["SGA"] = true - self.write(IAC + DO + OPT_SGA) - else - self.write(IAC + DONT + $1[1..1]) - end - '' - elsif WONT[0] == $1[0] # respond to "IAC WON'T x" - if OPT_ECHO[0] == $1[1] - self.write(IAC + DONT + OPT_ECHO) - elsif OPT_SGA[0] == $1[1] - @telnet_option["SGA"] = false - self.write(IAC + DONT + OPT_SGA) - else - self.write(IAC + DONT + $1[1..1]) - end - '' - else - '' - end - end - end # preprocess - - # Read data from the host until a certain sequence is matched. - # - # If a block is given, the received data will be yielded as it - # is read in (not necessarily all in one go), or nil if EOF - # occurs before any data is received. Whether a block is given - # or not, all data read will be returned in a single string, or again - # nil if EOF occurs before any data is received. Note that - # received data includes the matched sequence we were looking for. - # - # +options+ can be either a regular expression or a hash of options. - # If a regular expression, this specifies the data to wait for. - # If a hash, this can specify the following options: - # - # Match:: a regular expression, specifying the data to wait for. - # Prompt:: as for Match; used only if Match is not specified. - # String:: as for Match, except a string that will be converted - # into a regular expression. Used only if Match and - # Prompt are not specified. - # Timeout:: the number of seconds to wait for data from the host - # before raising a Timeout::Error. If set to false, - # no timeout will occur. If not specified, the - # Timeout option value specified when this instance - # was created will be used, or, failing that, the - # default value of 10 seconds. - # Waittime:: the number of seconds to wait after matching against - # the input data to see if more data arrives. If more - # data arrives within this time, we will judge ourselves - # not to have matched successfully, and will continue - # trying to match. If not specified, the Waittime option - # value specified when this instance was created will be - # used, or, failing that, the default value of 0 seconds, - # which means not to wait for more input. - # FailEOF:: if true, when the remote end closes the connection then an - # EOFError will be raised. Otherwise, defaults to the old - # behaviour that the function will return whatever data - # has been received already, or nil if nothing was received. - # - def waitfor(options) # :yield: recvdata - time_out = @options["Timeout"] - waittime = @options["Waittime"] - fail_eof = @options["FailEOF"] - - if options.kind_of?(Hash) - prompt = if options.has_key?("Match") - options["Match"] - elsif options.has_key?("Prompt") - options["Prompt"] - elsif options.has_key?("String") - Regexp.new( Regexp.quote(options["String"]) ) - end - time_out = options["Timeout"] if options.has_key?("Timeout") - waittime = options["Waittime"] if options.has_key?("Waittime") - fail_eof = options["FailEOF"] if options.has_key?("FailEOF") - else - prompt = options - end - - if time_out == false - time_out = nil - end - - line = '' - buf = '' - rest = '' - until(prompt === line and not @sock.wait_readable(waittime)) - unless @sock.wait_readable(time_out) - raise Net::ReadTimeout, "timed out while waiting for more data" - end - begin - c = @sock.readpartial(1024 * 1024) - @dumplog.log_dump('<', c) if @options.has_key?("Dump_log") - if @options["Telnetmode"] - c = rest + c - if Integer(c.rindex(/#{IAC}#{SE}/no) || 0) < - Integer(c.rindex(/#{IAC}#{SB}/no) || 0) - buf = preprocess(c[0 ... c.rindex(/#{IAC}#{SB}/no)]) - rest = c[c.rindex(/#{IAC}#{SB}/no) .. -1] - elsif pt = c.rindex(/#{IAC}[^#{IAC}#{AO}#{AYT}#{DM}#{IP}#{NOP}]?\z/no) || - c.rindex(/\r\z/no) - buf = preprocess(c[0 ... pt]) - rest = c[pt .. -1] - else - buf = preprocess(c) - rest = '' - end - else - # Not Telnetmode. - # - # We cannot use preprocess() on this data, because that - # method makes some Telnetmode-specific assumptions. - buf = rest + c - rest = '' - unless @options["Binmode"] - if pt = buf.rindex(/\r\z/no) - buf = buf[0 ... pt] - rest = buf[pt .. -1] - end - buf.gsub!(/#{EOL}/no, "\n") - end - end - @log.print(buf) if @options.has_key?("Output_log") - line += buf - yield buf if block_given? - rescue EOFError # End of file reached - raise if fail_eof - if line == '' - line = nil - yield nil if block_given? - end - break - end - end - line - end - - # Write +string+ to the host. - # - # Does not perform any conversions on +string+. Will log +string+ to the - # dumplog, if the Dump_log option is set. - def write(string) - length = string.length - while 0 < length - @sock.wait_writable - @dumplog.log_dump('>', string[-length..-1]) if @options.has_key?("Dump_log") - length -= @sock.syswrite(string[-length..-1]) - end - end - - # Sends a string to the host. - # - # This does _not_ automatically append a newline to the string. Embedded - # newlines may be converted and telnet command sequences escaped - # depending upon the values of telnetmode, binmode, and telnet options - # set by the host. - def print(string) - string = string.gsub(/#{IAC}/no, IAC + IAC) if @options["Telnetmode"] - - if @options["Binmode"] - self.write(string) - else - if @telnet_option["BINARY"] and @telnet_option["SGA"] - # IAC WILL SGA IAC DO BIN send EOL --> CR - self.write(string.gsub(/\n/n, CR)) - elsif @telnet_option["SGA"] - # IAC WILL SGA send EOL --> CR+NULL - self.write(string.gsub(/\n/n, CR + NULL)) - else - # NONE send EOL --> CR+LF - self.write(string.gsub(/\n/n, EOL)) - end - end - end - - # Sends a string to the host. - # - # Same as #print(), but appends a newline to the string. - def puts(string) - self.print(string + "\n") - end - - # Send a command to the host. - # - # More exactly, sends a string to the host, and reads in all received - # data until is sees the prompt or other matched sequence. - # - # If a block is given, the received data will be yielded to it as - # it is read in. Whether a block is given or not, the received data - # will be return as a string. Note that the received data includes - # the prompt and in most cases the host's echo of our command. - # - # +options+ is either a String, specified the string or command to - # send to the host; or it is a hash of options. If a hash, the - # following options can be specified: - # - # String:: the command or other string to send to the host. - # Match:: a regular expression, the sequence to look for in - # the received data before returning. If not specified, - # the Prompt option value specified when this instance - # was created will be used, or, failing that, the default - # prompt of /[$%#>] \z/n. - # Timeout:: the seconds to wait for data from the host before raising - # a Timeout error. If not specified, the Timeout option - # value specified when this instance was created will be - # used, or, failing that, the default value of 10 seconds. - # - # The command or other string will have the newline sequence appended - # to it. - def cmd(options) # :yield: recvdata - match = @options["Prompt"] - time_out = @options["Timeout"] - fail_eof = @options["FailEOF"] - - if options.kind_of?(Hash) - string = options["String"] - match = options["Match"] if options.has_key?("Match") - time_out = options["Timeout"] if options.has_key?("Timeout") - fail_eof = options["FailEOF"] if options.has_key?("FailEOF") - else - string = options - end - - self.puts(string) - if block_given? - waitfor({"Prompt" => match, "Timeout" => time_out, "FailEOF" => fail_eof}){|c| yield c } - else - waitfor({"Prompt" => match, "Timeout" => time_out, "FailEOF" => fail_eof}) - end - end - - # Login to the host with a given username and password. - # - # The username and password can either be provided as two string - # arguments in that order, or as a hash with keys "Name" and - # "Password". - # - # This method looks for the strings "login" and "Password" from the - # host to determine when to send the username and password. If the - # login sequence does not follow this pattern (for instance, you - # are connecting to a service other than telnet), you will need - # to handle login yourself. - # - # The password can be omitted, either by only - # provided one String argument, which will be used as the username, - # or by providing a has that has no "Password" key. In this case, - # the method will not look for the "Password:" prompt; if it is - # sent, it will have to be dealt with by later calls. - # - # The method returns all data received during the login process from - # the host, including the echoed username but not the password (which - # the host should not echo). If a block is passed in, this received - # data is also yielded to the block as it is received. - def login(options, password = nil) # :yield: recvdata - login_prompt = /[Ll]ogin[: ]*\z/n - password_prompt = /[Pp]ass(?:word|phrase)[: ]*\z/n - if options.kind_of?(Hash) - username = options["Name"] - password = options["Password"] - login_prompt = options["LoginPrompt"] if options["LoginPrompt"] - password_prompt = options["PasswordPrompt"] if options["PasswordPrompt"] - else - username = options - end - - if block_given? - line = waitfor(login_prompt){|c| yield c } - if password - line += cmd({"String" => username, - "Match" => password_prompt}){|c| yield c } - line += cmd(password){|c| yield c } - else - line += cmd(username){|c| yield c } - end - else - line = waitfor(login_prompt) - if password - line += cmd({"String" => username, - "Match" => password_prompt}) - line += cmd(password) - else - line += cmd(username) - end - end - line - end - - # Closes the connection - def close - @sock.close - end - - end # class Telnet -end # module Net - diff --git a/ruby/gems/net-telnet-0.2.0/lib/net/telnet/version.rb b/ruby/gems/net-telnet-0.2.0/lib/net/telnet/version.rb deleted file mode 100644 index 9f98d4418..000000000 --- a/ruby/gems/net-telnet-0.2.0/lib/net/telnet/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -module Net - class Telnet - VERSION = "0.2.0" - end -end diff --git a/ruby/gems/net-telnet-0.2.0/net-telnet.gemspec b/ruby/gems/net-telnet-0.2.0/net-telnet.gemspec deleted file mode 100644 index 1666c9e6d..000000000 --- a/ruby/gems/net-telnet-0.2.0/net-telnet.gemspec +++ /dev/null @@ -1,37 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: net-telnet 0.2.0 ruby lib - -Gem::Specification.new do |s| - s.name = "net-telnet".freeze - s.version = "0.2.0" - - s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib".freeze] - s.authors = ["SHIBATA Hiroshi".freeze] - s.bindir = "exe".freeze - s.date = "2018-07-25" - s.description = "Provides telnet client functionality.".freeze - s.email = ["hsbt@ruby-lang.org".freeze] - s.files = [".gitignore".freeze, ".travis.yml".freeze, "Gemfile".freeze, "LICENSE.txt".freeze, "README.md".freeze, "Rakefile".freeze, "bin/console".freeze, "bin/setup".freeze, "lib/net-telnet.rb".freeze, "lib/net/telnet.rb".freeze, "lib/net/telnet/version.rb".freeze, "net-telnet.gemspec".freeze] - s.homepage = "https://github.com/ruby/net-telnet".freeze - s.licenses = ["ruby".freeze] - s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze) - s.rubygems_version = "3.1.2".freeze - s.summary = "Provides telnet client functionality.".freeze - - if s.respond_to? :specification_version then - s.specification_version = 4 - end - - if s.respond_to? :add_runtime_dependency then - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - else - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - end -end diff --git a/ruby/gems/power_assert-1.1.7.gem b/ruby/gems/power_assert-1.1.7.gem deleted file mode 100644 index 55ce5fe20413f03603e84bdf21f3ccf671075593..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15872 zcmeIZRd6LulO-sYO3X|pDls!NGwX_(nVFfHnM%ye%*@PEiK)bJ=j)k=9_uyheVLw_ zUHkndGR-Z+JWgaD4^KO8YwBWXV(4N>Z|(*1UuBH{7%M9)$iI#M*nb?E*qGQsm{{0Z z*x1;a*x1-W7@1gD**HLm8UL#S`k&`@b#^gy`X?lJ3sX~@|Jm^$uK(Zs|6^_czPSJJ z`2Vf9MA0xHwnuJyVBpsp+SYhn=zeQ;ieE|Tv+J&Kp@F(tJ0XhfJqh%1T{1YVS;p~3 zu_e;DzwFNa_Y{s~xGlHSAeXRsKreM%=<{b2;~Qy@;(at~Mq4{6aH8R?q7QRPE6k*$ zepefcH>*0B+mEM{Ks+SUO+ZIPK|g=DU^30RODjD5dUHN)j$pam3M%K5b!lkeN2fjV zkBHw9z84U2uL0oMCTS@Uai1Jys7)?UV&&LHN_jAtlA=$4f8?!@2pe-}$~R6d*>ImE zODzD;lCQ&oLsm{ER?Nyux3`xCbFH{E!#%Sc$`M-Tsu1RAGBOnWDGw{T*puL{uQECC z{>A$KI8UM^eW6?LO(M4@PGDv_To7u@&1AMaqp6R_QpqsLGa-mB;a*%Yhvg7o!Ghim z1*D_lBb>iiEtA|lA>Qi+HF7K1-bkmzLpR=5P!7R09-=Dk{6ydSDTA#52UwX-2Qbe- z_|7uo9;XKLZnKjA9?eTj$_J@8#t6Hr1c{E!+!zJv?2*Yq$2h-(L?; zkm{WA%~(}akI_q0-ey9E1zVH`E<~hV2JWf_>s-|>m81InR8IPQ{Uc_!J@1m!jq#Ahd~%Wag=nliy^FDGmKBQs|#c z=BG9hxZr6 z;l-9-nk{WiZ20#J@&!yH{oneH|7UUickcg(0sqhOKQlWc6UYC9|Nlu7|Kk7uY~%hH z`Tm{%uY7&|H#uAHzP;bjaT|H|5i=4>uJ!WFl#}Mu_R6H}B+Xg{CZBMThY{9$Tcrlc zI`Y4`&LkU8u!MP*&aZ9|SP;b1;^N{;9?M84a<~&&Tzdk5=k6ai>>M2W-Ro~lWv?cE z9NF3oz~ybfhOf`J=+nouxu3vicCv;U0pH*`l9($H#g2|+pJ&Nl*W0Gp53D!V>4QOn zIgjFHY|k~``tsM;w7FliG1)BkCUeRHb^B|UAD;w1xw&n7&->awZyG9;9y2=)Sgg|i zUhkjQKGT%-b-D98v*!NmpZ>es)3dP=%k5Lw~Xy>(u$}?;<*RebPI5 z+Zg$cUUb$hPmgoe%fXk@%d35t=^71I3B9K#{meC`gIz-cU$!U5>ad$xbU=89a6PDd zP0-K$fRLs^rTy2$-_rGbqxNqRkk1(A6};r$sQ3H#U|wndT48N_JiPBcmzpfVwpRB% z^HU(^Cy*7`H*(hhm>$T|6QlXmZy@+W@XYa%K9V{#J2djk{6>JpzBu zw3Wv!I)P=(w6G0EJV!Y!&Kg<U4{K&yCFDq5EV1aIU`msxs(YulSAouOgEEBu%0Ps zyp15r!G_4Z?S86_^~4j2`LOlf?2iq2;-3K})K&_(NWbk^n{v63rWe(F{eDYW_f-<% zvg?7!>*GOEWU1kL7mwt0CDwG7f}+3d%k>8cJ@kXN<|(FkLI_>_&MsYi>#~b~lHbh% zZu4IrmRT*DKM&262V?SjUVxMp$la&+@r zyiBQQ3*XrtQ0n^Vb+%ysO;~A?o6kLVR{c`z>r&E&_^rTZ*9YF-@)FNYUI~KhzRq`v zpJPmuR1RK%R^X~?+_N+*ghj;de=CT$X-;H?YF78CkCpI4FAZ_)cFVp{YK1K&fRMAD z^Rin)w(zYd`fJzo<@2z6Xg4nh|5+NOeU0m*!h8PwOTf)#k(5ODFE^XpI={Wj2nZM@ zMBRZWuxO1O;2J;2V{VRBezucrT>SUu*qj(@e?6=yTy#0v*ou1o^aNT5w#Nr~> zBG4v~B2WK&Vx1)*)nj?oJoY`_b+7*UKtWej+boR!*7f9$(^KU_7r)y$X!|so?EwZT z!1V>fcPB9k%*EoFss7yadouw7AIE`6yFsxwSY!ZNZozj6>B9sYeIu~nk{i%%s%53Km8_s8@7J=&jde zei7ac?1%7zallo~R)I_ozB_t^W*{-i;uw2|KvN*CYJP22sB()zdGycbbOJBu<-!zz z<57qXXdsd+c*)#GHi+3+QcK+cVpBNFy!GJ7A5`4AFqufIOxaJ}lf|Qt+rL{vSRJ$X;n!7G!rp71!K->&od#6{I3DvTM$l{rcMt1d@OC`8WA=rw%}tV(LsK^f7KWHr=e`(K})t0);_*Y|eZ5@mS& zOTPO$dLButfJ5=WzJS@Uz|d(beeuLSE7o~a#2g-0p*pH`>DNDxN)^omj3O{xWsDz~ zB4`v=;M0LzF!itAoR49#w$4l2N;F}35;HSqk?JTl6_Q3>R|vJ_eh>I<(hA1E1hv#! zsyTLw<4gl_6y@mz(_)iYP)c9v9F}{mV2eOm!t|}#N_NxQdHkF}sy`E4-i-f=WCn}t zqp#zw`TOPio#-om2Ry-Gj5uaDS(0W&!$-Q5-2!~lE*&-%&5TV@uUeAt?eKeo-#qvE z;3Ezvre}eO4VZ6#V`IJs%;r(}?z4Z`Fzt080-r(@Arvj$(Oo4x^xB~+Yh*7iVw#&3 zWC6k8NhQ?t;`n)FFvgtF2gj;=@Y7*F3*&hLKgJ$u*=zpHcq@AE9TZv{p=QEvIKZ7& zm|tu9cUDAlog`PsJa1=*%OR}Y)qG7s(@&WBbCBG_GJ-G|M7j**>U88>?nN?hQZNWW zgRxNaew=M~B6wIMj%S*!G@46Yr)@p-jFo!+$MNmgQJt9RNG0vp46gO+`f363*l1N; zS4MHgF(h5<4#{6XTEn%RdmJsn^1yKZ^!jDjQZ2SBsWDjPu@egu&&58mspvsz2syZ@ znF1mPVP8{}NW@WMN<$7k2aF`FV@wZsN?i-XVOz3e7PoM%OSrX2!gokq!%uckTvh*V z)8FWJMR`!jh$ls*ARs44)ny^a9=OCe?6U_FM_~RDj^Ub_=?gxsKfM~_us3faw2j&k zkd@{o34)5^Z-q-3h76Y}r{x2{mIKyA-i~$eL9lnG#Ct&o?t@RfD5pYI`kd-;H>R0F z4w8_tmYxD?FO*&@8j3;!#D9Dnmx{#&;(G&|0uF-tpi7Yw2qOB4@##2e!82_K!4Z7} z)k-oTr~Rl^TS&cLv#(_d0FI2B#RFdaZGk~o3Gub4Il_tDVWNQ<7^Ld)JbiKM(ftqh zweClaq~Z&Qig1rkm(hL1m{S{ml|O||4~;P!HabYGM4q)^*E(MF`rkj)0kw=p@F=`C2;)Y5 znCb9RuxipU80{^RL`eCe+h+~bS5yRxWInRcTrE5$AoM83^#p0xmRNkCN&~Wke`YXF zw4@Y+b(EAwS=iwOJDv&YsQW`P}nD& z875G?h#`;yN%igbCNa7uXti`BrZ90dv>U$9EdUYG3;a<=A9QAs8T)N0N1X{G<6{( zVHZj6@(i8UK8FA!zI~JEgq>F8Xu3pN2cxePsAhsT@HSFeZLg%A3*syF>*y@LfqZp-j9vV0${el9J z#k)$H6ZBFSF~6C69q(c{%9T~;NK0HV@Y*l|mcpx2fNJ(4EDF6Rf!od9xwpiupp>PJ zn?Z@7IwwYQ7o8k*ZqQ$*Uviw_(yRr?@*r%BcnWG&bl=%U!p7w=Ucjx-<+0^yy@n(} zQ}kh2r>zT0WQ2(DyB=qeXd1O8CNSF^fORK;E(m7g->NA=exLWC4jgJ!t;nUBdkZ3} zmMGmmfkswZU9?|dH~fhs$BvjmiTK=IjJ?{DM;=y!rAnm#PRiLRc=dRARbgODfcO)E z^;e~@AeUSaH^j{%bc*ZupoTYjPijb-j|v^BR^%aSzA?jvkwWoK|5%7d>_GZu3n2G- zK&bpzgM=-uT^w!o13|t^+?-4$Br`)xG=QWHN;7I4+lbkkJON~LTk=Da2I_@jT8h{iwQiX5702gK>K zhB;s2Fa?B2qY06l(5*xks=fQGeIpUHfnHes`HG_knFOXY z=FUMs%`Wq|f?m<8LG~uKzy2W197>BTLP`Y+PCHe#`g?s>$<22OV(e19!agT7daO z{tA!4>}mhB^RGoH&9M9y8d0gQYSS(SIQc;k>NJJ}lsH!Rw z)}Da~!dDbOHCr`}W`%J%1~D=(NCbSzZo$THNx;GY4%`8{e@Lh+;eT91&$bXa!o?y#^)-b&cM65(d{>)ckfcS-_IgGndr9pe#6iF*!Sn@-|wq?`yEs&$JyB~ESi!H4i zj!Sr1n zVdj$csyzcN-`Gu%iWpW}qbf|Voh&MHu*MZIq)o~|i?&!TNYHC-bJPC`DUL1laUaU@ z3BiY`AP#UlyYD)j>Zwd?C_wP_;6vV5jnxd)v&Ot1%*?Th1#1OMfaiZPluR`51~AQt zhw`b!h8UG)e5+B~WF)y)4D9UTn}}!a+MbsN1Q*MHOmkZhbzf@k=$-Wyl;$^aD{2`8 z1koSJB?+viNUW%v-$=+57hR0Qb=%ZfgL}!h4?px-_zGh*6*M>)_;DD zxGrjhmef@G)LMZGy(fBU35^kUQ)0($&TEg$-`(jqE$xBT!?`G2Y2WaqM)Vc39apnS zu7*$)$geQ(%7!b9%S1nlZ2%5EbY-^~W|iq2K2OZdb{dAm;HXkZBQ5e0#2Jeb2}ZzX z4I-aCrZy&aN!I#D=#1ipwjNA#6tzKKU8|;thz?U+`}+8;7y7RmaFk6PPYZm;U(7V| zILIAtWq2TxM{~n}W@+im5H3nOEL-?@pwDqjP?BoJ+Tj~frCW7Esef4e&_3tGjBLHo zL^NLgo*Pjx(_ebn3re;zDRTf-`*Ic4ttl%v8%Wmt)<_2)$Gt~g3dTLAl~k9(Nt2^tA2`qqs%atB~($J;1IBnDFGht}k(b(Dv70l?YyYdK9J2}cgv*bBmLl@>59?c2LZi*!FV0{N-H}hrr9>dj;o0N z1Zmug4YT*i>D(T&Jc=8dnFuuI2(heY%FaW>L&`CU-ACMPcdsb)X4P9cZWTa7w(G7! zpq170sO4#N{h1##^Ib@A8*SfJVc4g=f?j1^^!&w@WXSRXVoa>;Qc0nzz#Q2u>mM0w zQk5y8-m^`E5yPCTf)TS_OF26>oE6#f_v%Ob1SLHs9r!q-X^S|NK^RkzkhDYceRNmr z5H5R7nzbJSmyK7jYnIZVKGps=x(Mcjr1!-0t+oka>TlM2y@GA-jpR{6w;~|^7RQLb`>|pEO=Emjwkq2Rvq}NSfJfH|SPE1FGAw#SC35gCu?B&qu)9%{&p~u&zy7Z@0`X`qpn#uMNgu zpl5w|sjmx@4b{KDNxM|eH^|4g0eZM%@2Pbr7_G1ythJE?&k>5VSsjl4`IHL!{+Hf6y)d3I%7z^(jbWah!%*KqX5=I(hN4ANdae`C5Bf_xT z7H}t(^JT4zovN@;=&V|yn{s$y*-9Vo4t%J`=kOFP4oci%$*;zmGw3T~;uooJ(MK9A z0in-_%j@N${)w@Uvgxb&?i;_n-Up@P#>k>pkFGHLl~uHh^(!n;xy`byBxhl@1I|QCmkTqTx3I_|c`#~zS2(691BQ8uN0krD zpj@eAaT_%Hpn}_MBf4;uI70?L1kCJPeP&W2dA zan<79RG{!=lEzkLQ`pHPeq@8Qz@bbO+U_T@WC<=fz3qHG@pa8UZP7a`hliv9A7I6Y zhvE&H@jc#=k%t>^BM`)iikbgJ{9Q4^P^UUwbdd#6QROxwih@asaSs}}oX>n+Wh1v2 z;K@}AhGdb&@pYmvKpgI`UhD)1(p5K1dAn`Qu_u$!ere4*F7!C*8zPBUHe%bvMM&e- zhukQYz;@pUbr6U#Hr}NhOApcU$i!$$P=?WGi4}t+X6%&9Q#}if3V&5?#hdc~gj7y? zK{Y!$TK*Hf3yNN02#xsOQSk-a96=i~AU#BW!+I0Pn-i!G1JMM=t1(qq=B3O!!AOX5 zjhe@4UiY~`hXtYNTcMc13-ZQ-5%k71H0wMQdijYYpG6`gHzVN*6GWX2QwyO7>fiPU zU;EI2dkGpA#NMH0o`KGY*TOn4HxlxVvls88kT8#DHLsmk&ON1Zni) z9A`Zv6^>>SYo!{OTbvQHCbu8Cjc!&J666fj5Po$m&8mbX_*HO;@5B$;Mq5XgLtb$z zy7ooUJvj^pWI0w^!8!S$0M{(aDR_h`;UZ9u*?8%iTjj5?W3{iToe_NWs!$nWVO5F} zT%`|=1U2{*XtqWKDx)L4_=fobZ8lhQH0&Mgxxq4@g!Ugy);miZ(_%lJ`?T;H6X)G2ri4;1Zwk zhwCwGD0VA~6v#2vGZaDQ+V!CJQj%Ilgli3SOS(gSgP|gsYgCrrUfnguPn@#eVe(rl zyy8|kx%)#t0P~*iW#nb%S75EFQ2CYc;b7v+Bv(i;HwRJ>pOo>s$&s6_nwV8Pe+D3y1_yynwp?%NhiE9Ew!!ZEdX+tHaOUv z5~P_ro55AqXx_mKHDUzID6afX5YthRnEIm--DD6mep(g1Dy*qlh?>m5f!e@GG4g_1 zAfZoDSfpxW6YhO|e9TTtc4I_)9vjB%-gqH%c&9$}n}446v2|+Ka;kH%4S8WqH-A8= zGW+C8Hm#jIQRZrZCYd&=yB_8%#Fp^xyU2{&7@eqigj3UXZMAEwJqDX`PD*Q-&P3{+ z^9j9x@-+j(v2OSLCA&UKlagJZjhQ>%r9kH;3`P?RB^>-K=2S#L*$n8szSg*WO5bSk zdt0}Ck{0q7kSb5cJA_!uCCz*08?ojs#Wr~JyGYO&UnBkJDEy4f72CbkRsr!Z!zHwX z&3?DCi+X`Yb|r{|I>N(i8I5f$L-IK1Z<*w}MVX&{i{z4ieOHU=t&mfWbv-n8O05?! zp|1Rx+WF}8fHLKe#^(D9q{>h2v_W^ZBXwu~+y(M0g}st{&X1`(W-bOrli)*P9n-gfw~hIqG_$t&hmJv^>`iJFR;y@n ztw6^dBfvTHdsk2=8iTWt+{4L{h!T-YpS7SI{kQQ-<+nWyjFvlaYu4=ad#$FX=2Yc# zOhDmNqQawX@@R_COSO3O!O5)wIPhNKyn303U;L~%pk3USa@#}+uY`|`0BAjvHKO@{f%4Ctpb)32Od?t*s`>YESH8+%lPv;Z!RX6>~{XKsk{js6T(mp zofDnOX#qayP>nj{XPmhEILQDCx?8#cXWm(mc_UR7DH^kkq{pY7gDLbb*ff&~LzEO~ z>=1mq)1bq^5LDuKe)3=u1mO;$GGyfK4iigwXSf=ZDzWdhJ!A!u>;Md1V+S0Mq`?sJ zhsJrTvYU&fdPWWY+0o6-nOg&*M=(M<|0Y4P41Z^%xJRXX8uXQMUrvNKmb1-%*9zrX zJz&gc7mh2r>PU%LYlT;~)yZN|HmdhiJ`SPOQzhU-XSYV{y_$uY4hOAo>IR0f78&-) z#>SF^sP*t}CLDOVaKZH@5V!c{g|dJ7?BC1-MEkI#_33m zK2yYe=z?35mpqlBT)a|&uH0)@-dw?AF}f7T`!vN^;lu_B%&Fs|RQsS!PL_kqY0Q<5 zMZ6*#gO}=e*r5QhrEv*vbS}w8!;O>JF3vtpz(G|N3t?r)Rl@B67ejExC3kFk@$bJcqx zsmC98#xd<+gw`?T9~7ytaV?CQ(+G|)HZr&wJ7}`3vWe7Acz+Z^{F5NqR=4pp41z5^ z#xtZWmMsM(5;A)Aed#K+E0!UOMyctz37j(XI>nUID}I&-zY9O)=9S&+L>m0$cyo$( zW5(2|;Np5?Fm~!aWeWK380Yl>uSaI1%fI&a)W4zQZtJ#u$aU^mZ#t8>&b{jxuR!_8 zjNsBVRnqaQ|6Jhd{5%d^Pl3c4CJ}5Dlc5JkzZv&3*&yzNFpGrIcccK=bzmwRkJ4!H zG@EisHwuzzaiTb&UDH=3F*XTv1N`G1g!m;wwP_(fP=_^q9AiD~Glon`*%7x_Xi%b4 z-v_6yUE>aFt+e66u!2WgS|`4|9O*lHC?9)`#vQPAkYlvFqtrvsOXsv@{z>ng+=H4) z3k(1aNG-zkV##5S&=nS37c-dUs#8jPbWz$*1?R|$JdD6R>FprnQfIK-NU9=I9BB!oojL7%S< zKt~6p3|w!bnK}9$pvTL?=d0u0eR^0e2N@2?!^_^De+V!p)f3wU*ZZZFr}rf&$i@

W^p1Mje|+m-cR zV)&mEPPOtz-|M4D4}axa_|rQQ>>z1QnUTLeVioBSz6N}-ZNP$oh!Dc^D@VakegTV_ zLe~RU_6TuQ3J{Vj97GAp7$lqFDxRZIJnqFpQ)m^FSbUA21=fNj2FRKrRT#`gXGxfr zWZ{ih_v^SulHdd+5tFUtxBgWXwy}{$nPYW(_}J&~hPZON0K~#_2{?OGSZ}|w1hpYx z)!p19T_N*0k+LJB745ccGP(Xr*?^ycud?_%9R`2`G^<(4P9xSC;n^Tz(6-yf_IOI< zdK$rekPO9PY#aj?+`dr*V^@##Bq9B+U`dBJytpnxE>Xpz_ph8YqrstxOsU#-L!+*p zp-ugbly5VZlX#Gi0?8CA%IJYFVuW9^t&za6?nSH_qMkdthcleGW<(S=JhMy;BUjOK zeKOtAEJx>fVxR_+1uyx2 zvGqO~;+EwJTI`%|wdbE%ucT7pX2!9E?IKv4^ zB5IXSH`ivD)1WmXAx%A>KGsVt@Nh4GyBcvKVT0ynatQ@qY(QXkvuO@xw?=qdX4oP! zcT=w|`ao8JzMzcZ_pL9{*0kJc0qMWprQ5tqA_sK~3dvWxgnvnrEDe8W@-;wqju@FLF6S9gw!_8v%+AvR%x!K>TMmyvOsnwcYy!t%IF!Mvct%#-r}R;OhYx=nU2&Lz?qC| z6+kKHM7f_&jSyXSFP0%V@gz##PU$mrY7V=Lf3cb~TaNzcD4rL?p9Ru+WpKIG0CsJ7 zi40?&hy|Tj)PPTALUW-qY)ym15~aK#(JNdcPhGi5GBZ6S)kD8u5tdBaKh-6{gVV@W zW>(ZIfc>bAw6A=PiavjktZ=~Izz&kL=#&q0ayiPNOa{em_U75 zagct5$5>xhyhX%x6RQ4Hr9ZN{O~@&GaYpkqr~8K_$P1trwGCqwdr!yo`U^ch@RgiVb8y15&jkb1Au52Xqx zJo?RtO1&X)eACIzZGh|EXr7-phO%(QOD;_sk)bC$VPTgJ#p23vJ0XfhW){ZyP?Lf&yGUj> zsUJthZcsPGr!hl`4h4y{k?^y>%Z<`Z&ZZRuV|%?&d%&4F7^ICdu?o~M2*B*Nj6vdp z^~=RR!ki@Y1eFcR{wKWFVjB?Tut7@`>-5mFr_==xMx!1o^fOC{&4R-=oxcdYF_?+O zn7xUTSxW&Qst6_)2CtZh#Ab+uTY_z8@*%tUSx(bq5+hGEoY}+mLg6jBLB_sWqKC zL7TS(ghCz6v%jS^33<;274pmHmd^GrAAz7CAV45ENJ!KPHpuY*B2DqXruqL40>&1m z#@5cRw$AjPhPF2UHC+Jz)*AJn^nWq3vN8P!{XZ)^GxNXn|NlGQqJP)_nM7-=Kkj$K|x6zx^eoYGw&KUAgq@(TgYA+mm|UI(qwDA#ywfBY}NQGNWr|ot;)B~32N!(sb3xc`Zb~*_L98dX>JoM zb4%~`myEl0j0ch_$@CF2Gu^7ANs5cc-wSrpKW{}03|3InE&vPfG;8hp%4Dl|S*3+w zsnHhDfC+Ic%vlDigPG%(Qt-T7xWJ02M|DX%H&YgrAI9ND-TL;hyZKSQ@9#b6(l%{m z!|zGP+>Eh(9=95K3iIa$p5ZrBBAZFl2ZTt?MnKbF5ND#k9*c+_)Z - -== Related Projects -In general, you don't need to use this library directly. -Use following test frameworks or extensions instead. - -* {test-unit}[https://github.com/test-unit/test-unit](>= 3.0.0) - * {Document}[http://test-unit.github.io/test-unit/en/Test/Unit/Assertions.html#assert-instance_method] -* {minitest-power_assert}[https://github.com/hsbt/minitest-power_assert] -* {rspec-power_assert}[https://github.com/joker1007/rspec-power_assert] -* {pry-power_assert}[https://github.com/yui-knk/pry-power_assert] -* {pry-byebug-power_assert}[https://github.com/k-tsj/pry-byebug-power_assert] -* {power_p}[https://github.com/k-tsj/power_p] - -== Requirement -* CRuby 2.0.0 or later - -== Reference -* {Power Assert in Ruby (at RubyKaigi 2014) // Speaker Deck}[https://speakerdeck.com/k_tsj/power-assert-in-ruby] - -== Known Limitations -* Expressions must be put in one line. Expressions with folded long lines produce nothing report, e.g.: - assert do - # reported - func(foo: 0123456789, bar: "abcdefg") - end - - assert do - # won't be reported - func(foo: 0123456789, - bar: "abcdefg") - end -* Expressions must have one or more method call. Expressions with no method call produce nothing report, e.g.: - val = false - assert do - # reported - val == true - end - - assert do - # won't be reported - val - end -* Returned values from accessor methods, method missing, or "super" produce nothing report, e.g: - class Foo - attr_accessor :val - end - foo = Foo.new - foo.val = false - - assert do - # reported (only the value of "foo" and the literal "true") - foo.val == true - end - - assert do - # won't be reported - foo.val - end -* Expressions should not have conditional branches. Expressions with such conditional codes may produce nothing report, e.g.: - condition = true - expected = false - actual = true - assert do - # this will fail but nothing reported - condition ? expected == actual : expected == actual - end - -== Travis Build Status {}[http://travis-ci.org/k-tsj/power_assert] diff --git a/ruby/gems/power_assert-1.1.7/Rakefile b/ruby/gems/power_assert-1.1.7/Rakefile deleted file mode 100644 index e82d34c1c..000000000 --- a/ruby/gems/power_assert-1.1.7/Rakefile +++ /dev/null @@ -1,59 +0,0 @@ -require "bundler/gem_tasks" -require "rake/testtask" - -task :default => :test -Rake::TestTask.new(:test) do |t| - # helper(simplecov) must be required before loading power_assert - helper_path = File.realpath("test/test_helper.rb") - t.ruby_opts = ["-w", "-r#{helper_path}"] - t.test_files = FileList["test/**/*_test.rb"].exclude do |i| - begin - next false unless defined?(RubyVM) - RubyVM::InstructionSequence.compile(File.read(i)) - false - rescue SyntaxError - true - end - end -end - -# ruby/ruby:test/pathname/test_pathname.rb -def has_symlink? - begin - File.symlink("", "") - rescue NotImplementedError, Errno::EACCES - return false - rescue Errno::ENOENT - end - return true -end - -SYMLINK_DIRS = ["lib", "test"] - -task :before_script do - if ENV["TEST_SYMLINK"] == "yes" and has_symlink? - SYMLINK_DIRS.each do |d| - File.rename(d, ".#{d}") - File.symlink(".#{d}", d) - end - end -end - -task :after_script do - SYMLINK_DIRS.each do |d| - if File.symlink?(d) and File.directory?(".#{d}") - File.unlink(d) - File.rename(".#{d}", d) - end - unless File.directory?(d) - raise "#{d} should be directory" - end - end -end - -desc "Run the benchmark suite" -task :benchmark do - Dir.glob("benchmark/bm_*.rb").each do |f| - load(f) - end -end diff --git a/ruby/gems/power_assert-1.1.7/bin/console b/ruby/gems/power_assert-1.1.7/bin/console deleted file mode 100755 index 30eaef0d6..000000000 --- a/ruby/gems/power_assert-1.1.7/bin/console +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env ruby - -require 'bundler/setup' -require 'power_assert' - -begin - require 'pry' - Pry -rescue LoadError - require 'irb' - IRB -end.start diff --git a/ruby/gems/power_assert-1.1.7/bin/setup b/ruby/gems/power_assert-1.1.7/bin/setup deleted file mode 100755 index cf4ad25e1..000000000 --- a/ruby/gems/power_assert-1.1.7/bin/setup +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' -set -vx - -bundle install diff --git a/ruby/gems/power_assert-1.1.7/lib/power_assert.rb b/ruby/gems/power_assert-1.1.7/lib/power_assert.rb deleted file mode 100644 index 7eaa5f923..000000000 --- a/ruby/gems/power_assert-1.1.7/lib/power_assert.rb +++ /dev/null @@ -1,98 +0,0 @@ -# power_assert.rb -# -# Copyright (C) 2014 Kazuki Tsujimoto - -begin - unless defined?(Byebug) - captured = false - TracePoint.new(:return, :c_return) do |tp| - captured = true - unless tp.binding and tp.return_value - raise '' - end - end.enable { __id__ } - raise '' unless captured - end -rescue - raise LoadError, 'Fully compatible TracePoint API required' -end - -require 'power_assert/version' -require 'power_assert/configuration' -require 'power_assert/context' - -module PowerAssert - POWER_ASSERT_LIB_DIR = File.dirname(caller_locations(1, 1).first.path) - INTERNAL_LIB_DIRS = {PowerAssert => POWER_ASSERT_LIB_DIR} - private_constant :POWER_ASSERT_LIB_DIR, :INTERNAL_LIB_DIRS - - # For backward compatibility - IGNORED_LIB_DIRS = INTERNAL_LIB_DIRS - private_constant :IGNORED_LIB_DIRS - if respond_to?(:deprecate_constant) - deprecate_constant :IGNORED_LIB_DIRS - end - - class << self - def start(assertion_proc_or_source, assertion_method: nil, source_binding: TOPLEVEL_BINDING) - if respond_to?(:clear_global_method_cache, true) - clear_global_method_cache - end - yield BlockContext.new(assertion_proc_or_source, assertion_method, source_binding) - end - - def trace(frame) - begin - raise 'Byebug is not started yet' unless Byebug.started? - rescue NameError - raise "PowerAssert.#{__method__} requires Byebug" - end - ctx = TraceContext.new(frame._binding) - ctx.enable - ctx - end - - def app_caller_locations - caller_locations.drop_while {|i| internal_file?(i.path) }.take_while {|i| ! internal_file?(i.path) } - end - - def app_context? - top_frame = caller_locations.drop_while {|i| i.path.start_with?(POWER_ASSERT_LIB_DIR) }.first - top_frame and ! internal_file?(top_frame.path) - end - - private - - def internal_file?(file) - setup_internal_lib_dir(Byebug, :attach, 2) if defined?(Byebug) - setup_internal_lib_dir(PryByebug, :start_with_pry_byebug, 2, Pry) if defined?(PryByebug) - INTERNAL_LIB_DIRS.find do |_, dir| - file.start_with?(dir) - end - end - - def setup_internal_lib_dir(lib, mid, depth, lib_obj = lib) - unless INTERNAL_LIB_DIRS.key?(lib) - INTERNAL_LIB_DIRS[lib] = lib_dir(lib_obj, mid, depth) - end - rescue NameError - end - - def lib_dir(obj, mid, depth) - File.expand_path('../' * depth, obj.method(mid).source_location[0]) - end - - if defined?(RubyVM) - CLEAR_CACHE_ISEQ = RubyVM::InstructionSequence.compile('using PowerAssert.const_get(:Empty)') - private_constant :CLEAR_CACHE_ISEQ - - def clear_global_method_cache - CLEAR_CACHE_ISEQ.eval - end - end - end - - module Empty - end - private_constant :Empty -end diff --git a/ruby/gems/power_assert-1.1.7/lib/power_assert/colorize.rb b/ruby/gems/power_assert-1.1.7/lib/power_assert/colorize.rb deleted file mode 100644 index 4c7487a97..000000000 --- a/ruby/gems/power_assert-1.1.7/lib/power_assert/colorize.rb +++ /dev/null @@ -1,9 +0,0 @@ -warn 'power_assert/colorize is experimental' - -require 'power_assert/configuration' - -PowerAssert.configure do |c| - c.lazy_inspection = true - c._colorize_message = true - c._use_pp = true -end diff --git a/ruby/gems/power_assert-1.1.7/lib/power_assert/configuration.rb b/ruby/gems/power_assert-1.1.7/lib/power_assert/configuration.rb deleted file mode 100644 index ee101362d..000000000 --- a/ruby/gems/power_assert-1.1.7/lib/power_assert/configuration.rb +++ /dev/null @@ -1,46 +0,0 @@ -module PowerAssert - class << self - def configuration - @configuration ||= Configuration[false, false, true, false, false] - end - - def configure - yield configuration - end - end - - SUPPORT_ALIAS_METHOD = TracePoint.public_method_defined?(:callee_id) - private_constant :SUPPORT_ALIAS_METHOD - - class Configuration < Struct.new(:lazy_inspection, :_trace_alias_method, :_redefinition, :_colorize_message, :_use_pp) - def _trace_alias_method=(bool) - super - if SUPPORT_ALIAS_METHOD - warn 'power_assert: _trace_alias_method option is obsolete. You no longer have to set it.' - end - end - - def _colorize_message=(bool) - if bool - require 'pry' - end - super - end - - def lazy_inspection=(bool) - unless bool - raise 'lazy_inspection option must be enabled when using pp' if _use_pp - end - super - end - - def _use_pp=(bool) - if bool - raise 'lazy_inspection option must be enabled when using pp' unless lazy_inspection - require 'pp' - end - super - end - end - private_constant :Configuration -end diff --git a/ruby/gems/power_assert-1.1.7/lib/power_assert/context.rb b/ruby/gems/power_assert-1.1.7/lib/power_assert/context.rb deleted file mode 100644 index 279295e55..000000000 --- a/ruby/gems/power_assert-1.1.7/lib/power_assert/context.rb +++ /dev/null @@ -1,238 +0,0 @@ -require 'power_assert/configuration' -require 'power_assert/enable_tracepoint_events' -require 'power_assert/inspector' -require 'power_assert/parser' - -module PowerAssert - class Context - Value = Struct.new(:name, :value, :lineno, :column, :display_offset) - - def initialize(base_caller_length) - @fired = false - @target_thread = Thread.current - method_id_set = nil - @return_values = [] - trace_alias_method = PowerAssert.configuration._trace_alias_method - @trace_return = TracePoint.new(:return, :c_return) do |tp| - begin - unless method_id_set - next unless Thread.current == @target_thread - method_id_set = @parser.method_id_set - end - method_id = SUPPORT_ALIAS_METHOD ? tp.callee_id : - trace_alias_method && tp.event == :return ? tp.binding.eval('::Kernel.__callee__') : - tp.method_id - next if ! method_id_set[method_id] - next if tp.event == :c_return and - not (@parser.lineno == tp.lineno and @parser.path == tp.path) - locs = PowerAssert.app_caller_locations - diff = locs.length - base_caller_length - if (tp.event == :c_return && diff == 1 || tp.event == :return && diff <= 2) and Thread.current == @target_thread - idx = -(base_caller_length + 1) - if @parser.path == locs[idx].path and @parser.lineno == locs[idx].lineno - val = PowerAssert.configuration.lazy_inspection ? - tp.return_value : - InspectedValue.new(SafeInspectable.new(tp.return_value).inspect) - @return_values << Value[method_id.to_s, val, locs[idx].lineno, nil] - end - end - rescue Exception => e - warn "power_assert: [BUG] Failed to trace: #{e.class}: #{e.message}" - if e.respond_to?(:full_message) - warn e.full_message.gsub(/^/, 'power_assert: ') - end - end - end - end - - def message - raise 'call #yield or #enable at first' unless fired? - @message ||= build_assertion_message(@parser, @return_values).freeze - end - - def message_proc - -> { message } - end - - private - - def fired? - @fired - end - - def build_assertion_message(parser, return_values) - if PowerAssert.configuration._colorize_message - line = Pry::Code.new(parser.line).highlighted - else - line = parser.line - end - - path = detect_path(parser, return_values) - return line unless path - - c2d = column2display_offset(parser.line) - return_values, methods_in_path = find_all_identified_calls(return_values, path) - return_values.zip(methods_in_path) do |i, j| - unless i.name == j.name - warn "power_assert: [BUG] Failed to get column: #{i.name}" - return line - end - i.display_offset = c2d[j.column] - end - refs_in_path = path.find_all {|i| i.type == :ref } - ref_values = refs_in_path.map {|i| Value[i.name, parser.binding.eval(i.name), parser.lineno, i.column, c2d[i.column]] } - vals = (return_values + ref_values).find_all(&:display_offset).sort_by(&:display_offset).reverse - return line if vals.empty? - - fmt = (0..vals[0].display_offset).map do |i| - if vals.find {|v| v.display_offset == i } - "%<#{i}>s" - else - line[i] == "\t" ? "\t" : ' ' - end - end.join - lines = [] - lines << line.chomp - lines << sprintf(fmt, vals.each_with_object({}) {|v, h| h[v.display_offset.to_s.to_sym] = '|' }).chomp - vals.each do |i| - inspected_val = SafeInspectable.new(Formatter.new(i.value, i.display_offset)).inspect - inspected_val.each_line do |l| - map_to = vals.each_with_object({}) do |j, h| - h[j.display_offset.to_s.to_sym] = [l, '|', ' '][i.display_offset <=> j.display_offset] - end - lines << encoding_safe_rstrip(sprintf(fmt, map_to)) - end - end - lines.join("\n") - end - - def detect_path(parser, return_values) - return parser.call_paths.flatten.uniq if parser.method_id_set.empty? - all_paths = parser.call_paths - return_value_names = return_values.map(&:name) - uniq_calls = uniq_calls(all_paths) - uniq_call = return_value_names.find {|i| uniq_calls.include?(i) } - detected_paths = all_paths.find_all do |path| - method_names = path.find_all {|ident| ident.type == :method }.map(&:name) - break [path] if uniq_call and method_names.include?(uniq_call) - return_value_names == method_names - end - return nil unless detected_paths.length == 1 - detected_paths[0] - end - - def uniq_calls(paths) - all_calls = enum_count_by(paths.map {|path| path.find_all {|ident| ident.type == :method }.map(&:name).uniq }.flatten) {|i| i } - all_calls.find_all {|_, call_count| call_count == 1 }.map {|name, _| name } - end - - def find_all_identified_calls(return_values, path) - return_value_num_of_calls = enum_count_by(return_values, &:name) - path_num_of_calls = enum_count_by(path.find_all {|ident| ident.type == :method }, &:name) - identified_calls = return_value_num_of_calls.find_all {|name, num| path_num_of_calls[name] == num }.map(&:first) - [ - return_values.find_all {|val| identified_calls.include?(val.name) }, - path.find_all {|ident| ident.type == :method and identified_calls.include?(ident.name) } - ] - end - - def enum_count_by(enum, &blk) - Hash[enum.group_by(&blk).map{|k, v| [k, v.length] }] - end - - def encoding_safe_rstrip(str) - str.rstrip - rescue ArgumentError, Encoding::CompatibilityError - enc = str.encoding - if enc.ascii_compatible? - str.b.rstrip.force_encoding(enc) - else - str - end - end - - def column2display_offset(str) - display_offset = 0 - str.each_char.with_object([]) do |c, r| - c.bytesize.times do - r << display_offset - end - display_offset += c.ascii_only? ? 1 : 2 # FIXME - end - end - end - private_constant :Context - - class BlockContext < Context - def initialize(assertion_proc_or_source, assertion_method, source_binding) - super(0) - if assertion_proc_or_source.respond_to?(:to_proc) - @assertion_proc = assertion_proc_or_source.to_proc - line = nil - else - @assertion_proc = source_binding.eval "Proc.new {#{assertion_proc_or_source}}" - line = assertion_proc_or_source - end - @parser = Parser::DUMMY - @trace_call = TracePoint.new(:call, :c_call) do - if PowerAssert.app_context? and Thread.current == @target_thread - @trace_call.disable - locs = PowerAssert.app_caller_locations - path = locs.last.path - lineno = locs.last.lineno - if File.exist?(path) - line ||= File.open(path) {|fp| fp.each_line.drop(lineno - 1).first } - end - if line - @parser = Parser.new(line, path, lineno, @assertion_proc.binding, assertion_method.to_s, @assertion_proc) - end - end - end - end - - def yield - @fired = true - invoke_yield(&@assertion_proc) - end - - private - - def invoke_yield - @trace_return.enable do - @trace_call.enable do - yield - end - end - end - end - private_constant :BlockContext - - class TraceContext < Context - def initialize(binding) - target_frame, *base = PowerAssert.app_caller_locations - super(base.length) - path = target_frame.path - lineno = target_frame.lineno - if File.exist?(path) - line = File.open(path) {|fp| fp.each_line.drop(lineno - 1).first } - @parser = Parser.new(line, path, lineno, binding) - else - @parser = Parser::DUMMY - end - end - - def enable - @fired = true - @trace_return.enable - end - - def disable - @trace_return.disable - end - - def enabled? - @trace_return.enabled? - end - end - private_constant :TraceContext -end diff --git a/ruby/gems/power_assert-1.1.7/lib/power_assert/enable_tracepoint_events.rb b/ruby/gems/power_assert-1.1.7/lib/power_assert/enable_tracepoint_events.rb deleted file mode 100644 index 5380e4d39..000000000 --- a/ruby/gems/power_assert-1.1.7/lib/power_assert/enable_tracepoint_events.rb +++ /dev/null @@ -1,91 +0,0 @@ -require 'power_assert/configuration' - -if defined?(RubyVM) - if PowerAssert.configuration._redefinition - if RUBY_VERSION == '2.3.2' - warn 'power_assert: It is strongly recommended that you use Ruby 2.3.3 or later which fixes regression on 2.3.2.' - warn 'power_assert: See https://www.ruby-lang.org/en/news/2016/11/21/ruby-2-3-3-released/ for more details.' - end - - verbose = $VERBOSE - begin - $VERBOSE = nil - module PowerAssert - # set redefined flag - basic_classes = [ - Fixnum, Float, String, Array, Hash, Bignum, Symbol, Time, Regexp, NilClass, TrueClass, FalseClass - ] - - basic_operators = [ - :+, :-, :*, :/, :%, :==, :===, :<, :<=, :<<, :[], :[]=, - :length, :size, :empty?, :succ, :>, :>=, :!, :!=, :=~, :freeze, :-@, :max, :min, :nil? - ] - - bug11182 = Class.new do - def fixed? - true - end - end - - refine bug11182 do - def fixed? - end - end - - _ = Class.new(bug11182) do - alias _fixed? fixed? - protected :_fixed? - end - - if (bug11182.new.fixed? rescue false) - basic_classes.each do |klass| - basic_operators.each do |bop| - if klass.public_method_defined?(bop) - refine(klass) do - define_method(bop) {} - end - end - end - end - else - # workaround for https://bugs.ruby-lang.org/issues/11182 - basic_classes.each do |klass| - basic_operators.each do |bop| - if klass.public_method_defined?(bop) - klass.ancestors.find {|i| i.instance_methods(false).index(bop) }.module_eval do - public bop - end - end - end - end - - refine Symbol do - def == - end - end - end - - # bypass check_cfunc - refine BasicObject do - def ! - end - - def == - end - end - - refine Module do - def == - end - end - end - ensure - $VERBOSE = verbose - end - end - - # disable optimization - RubyVM::InstructionSequence.compile_option = { - specialized_instruction: false - } -end diff --git a/ruby/gems/power_assert-1.1.7/lib/power_assert/inspector.rb b/ruby/gems/power_assert-1.1.7/lib/power_assert/inspector.rb deleted file mode 100644 index 6aca38937..000000000 --- a/ruby/gems/power_assert-1.1.7/lib/power_assert/inspector.rb +++ /dev/null @@ -1,61 +0,0 @@ -require 'power_assert/configuration' - -module PowerAssert - class InspectedValue - def initialize(value) - @value = value - end - - def inspect - @value - end - end - private_constant :InspectedValue - - class SafeInspectable - def initialize(value) - @value = value - end - - def inspect - inspected = @value.inspect - if Encoding.compatible?(Encoding.default_external, inspected) - inspected - else - begin - "#{inspected.encode(Encoding.default_external)}(#{inspected.encoding})" - rescue Encoding::UndefinedConversionError, Encoding::InvalidByteSequenceError - inspected.force_encoding(Encoding.default_external) - end - end - rescue => e - "InspectionFailure: #{e.class}: #{e.message.each_line.first}" - end - end - private_constant :SafeInspectable - - class Formatter - def initialize(value, indent) - @value = value - @indent = indent - end - - def inspect - if PowerAssert.configuration._colorize_message - if PowerAssert.configuration._use_pp - width = [(defined?(Pry::Terminal) ? Pry::Terminal.width! : Pry.new(output: StringIO.new).output.width) - 1 - @indent, 10].max - Pry::ColorPrinter.pp(@value, '', width) - else - Pry::Code.new(@value.inspect).highlighted - end - else - if PowerAssert.configuration._use_pp - PP.pp(@value, '') - else - @value.inspect - end - end - end - end - private_constant :Formatter -end diff --git a/ruby/gems/power_assert-1.1.7/lib/power_assert/parser.rb b/ruby/gems/power_assert-1.1.7/lib/power_assert/parser.rb deleted file mode 100644 index ff67200fe..000000000 --- a/ruby/gems/power_assert-1.1.7/lib/power_assert/parser.rb +++ /dev/null @@ -1,251 +0,0 @@ -require 'ripper' - -module PowerAssert - class Parser - Ident = Struct.new(:type, :name, :column) - - attr_reader :line, :path, :lineno, :binding - - def initialize(line, path, lineno, binding, assertion_method_name = nil, assertion_proc = nil) - @line = line - @line_for_parsing = (valid_syntax?(line) ? line : slice_expression(line)).b - @path = path - @lineno = lineno - @binding = binding - @proc_local_variables = binding.eval('local_variables').map(&:to_s) - @assertion_method_name = assertion_method_name - @assertion_proc = assertion_proc - end - - def idents - @idents ||= extract_idents(Ripper.sexp(@line_for_parsing)) - end - - def call_paths - collect_paths(idents).uniq - end - - def method_id_set - methods = idents.flatten.find_all {|i| i.type == :method } - @method_id_set ||= methods.map(&:name).map(&:to_sym).each_with_object({}) {|i, h| h[i] = true } - end - - private - - def valid_syntax?(str) - return true unless defined?(RubyVM) - begin - verbose, $VERBOSE = $VERBOSE, nil - RubyVM::InstructionSequence.compile(str) - true - rescue SyntaxError - false - ensure - $VERBOSE = verbose - end - end - - def slice_expression(str) - str = str.chomp - str.sub!(/\A\s*(?:if|unless|elsif|case|while|until) /) {|i| ' ' * i.length } - str.sub!(/\A\s*(?:\}|\]|end)?\./) {|i| ' ' * i.length } - str.sub!(/[\{\.\\]\z/, '') - str.sub!(/(?:&&|\|\|)\z/, '') - str.sub!(/ (?:do|and|or)\z/, '') - str - end - - class Branch < Array - end - - AND_OR_OPS = %i(and or && ||) - - # - # Returns idents as graph structure. - # - # +--c--b--+ - # extract_idents(Ripper.sexp('a&.b(c).d')) #=> a--+ +--d - # +--------+ - # - def extract_idents(sexp) - tag, * = sexp - case tag - when :arg_paren, :assoc_splat, :fcall, :hash, :method_add_block, :string_literal, :return - extract_idents(sexp[1]) - when :assign, :massign - extract_idents(sexp[2]) - when :opassign - _, _, (_, op_name, (_, op_column)), s0 = sexp - extract_idents(s0) + [Ident[:method, op_name.sub(/=\z/, ''), op_column]] - when :dyna_symbol - if sexp[1][0].kind_of?(Symbol) - # sexp[1] can be [:string_content, [..]] while parsing { "a": 1 } - extract_idents(sexp[1]) - else - sexp[1].flat_map {|s| extract_idents(s) } - end - when :assoclist_from_args, :bare_assoc_hash, :paren, :string_embexpr, - :regexp_literal, :xstring_literal - sexp[1].flat_map {|s| extract_idents(s) } - when :command - [sexp[2], sexp[1]].flat_map {|s| extract_idents(s) } - when :assoc_new, :dot2, :dot3, :string_content - sexp[1..-1].flat_map {|s| extract_idents(s) } - when :unary - handle_columnless_ident([], sexp[1], extract_idents(sexp[2])) - when :binary - op = sexp[2] - if AND_OR_OPS.include?(op) - extract_idents(sexp[1]) + [Branch[extract_idents(sexp[3]), []]] - else - handle_columnless_ident(extract_idents(sexp[1]), op, extract_idents(sexp[3])) - end - when :call - _, recv, (op_sym, op_name, _), method = sexp - with_safe_op = ((op_sym == :@op and op_name == '&.') or op_sym == :"&.") - if method == :call - handle_columnless_ident(extract_idents(recv), :call, [], with_safe_op) - else - extract_idents(recv) + (with_safe_op ? [Branch[extract_idents(method), []]] : extract_idents(method)) - end - when :array - sexp[1] ? sexp[1].flat_map {|s| extract_idents(s) } : [] - when :command_call - [sexp[1], sexp[4], sexp[3]].flat_map {|s| extract_idents(s) } - when :aref - handle_columnless_ident(extract_idents(sexp[1]), :[], extract_idents(sexp[2])) - when :method_add_arg - idents = extract_idents(sexp[1]) - if idents.empty? - # idents may be empty(e.g. ->{}.()) - extract_idents(sexp[2]) - else - if idents[-1].kind_of?(Branch) and idents[-1][1].empty? - # Safe navigation operator is used. See :call clause also. - idents[0..-2] + [Branch[extract_idents(sexp[2]) + idents[-1][0], []]] - else - idents[0..-2] + extract_idents(sexp[2]) + [idents[-1]] - end - end - when :args_add_block - _, (tag, ss0, *ss1), _ = sexp - if tag == :args_add_star - (ss0 + ss1).flat_map {|s| extract_idents(s) } - else - sexp[1].flat_map {|s| extract_idents(s) } - end - when :vcall - _, (tag, name, (_, column)) = sexp - if tag == :@ident - [Ident[@proc_local_variables.include?(name) ? :ref : :method, name, column]] - else - [] - end - when :program - _, ((tag0, (tag1, (tag2, (tag3, mname, _)), _), (tag4, _, ss))) = sexp - if tag0 == :method_add_block and tag1 == :method_add_arg and tag2 == :fcall and - (tag3 == :@ident or tag3 == :@const) and mname == @assertion_method_name and (tag4 == :brace_block or tag4 == :do_block) - ss.flat_map {|s| extract_idents(s) } - else - _, (s0, *) = sexp - extract_idents(s0) - end - when :ifop - _, s0, s1, s2 = sexp - [*extract_idents(s0), Branch[extract_idents(s1), extract_idents(s2)]] - when :if, :unless - _, s0, ss0, (_, ss1) = sexp - [*extract_idents(s0), Branch[ss0.flat_map {|s| extract_idents(s) }, ss1 ? ss1.flat_map {|s| extract_idents(s) } : []]] - when :if_mod, :unless_mod - _, s0, s1 = sexp - [*extract_idents(s0), Branch[extract_idents(s1), []]] - when :var_ref, :var_field - _, (tag, ref_name, (_, column)) = sexp - case tag - when :@kw - if ref_name == 'self' - [Ident[:ref, 'self', column]] - else - [] - end - when :@ident, :@const, :@cvar, :@ivar, :@gvar - [Ident[:ref, ref_name, column]] - else - [] - end - when :@ident, :@const, :@op - _, method_name, (_, column) = sexp - [Ident[:method, method_name, column]] - else - [] - end - end - - def str_indices(str, re, offset, limit) - idx = str.index(re, offset) - if idx and idx <= limit - [idx, *str_indices(str, re, idx + 1, limit)] - else - [] - end - end - - MID2SRCTXT = { - :[] => '[', - :+@ => '+', - :-@ => '-', - :call => '(' - } - - def handle_columnless_ident(left_idents, mid, right_idents, with_safe_op = false) - left_max = left_idents.flatten.max_by(&:column) - right_min = right_idents.flatten.min_by(&:column) - bg = left_max ? left_max.column + left_max.name.length : 0 - ed = right_min ? right_min.column - 1 : @line_for_parsing.length - 1 - mname = mid.to_s - srctxt = MID2SRCTXT[mid] || mname - re = / - #{'\b' if /\A\w/ =~ srctxt} - #{Regexp.escape(srctxt)} - #{'\b' if /\w\z/ =~ srctxt} - /x - indices = str_indices(@line_for_parsing, re, bg, ed) - if indices.length == 1 or !(right_idents.empty? and left_idents.empty?) - ident = Ident[:method, mname, right_idents.empty? ? indices.first : indices.last] - left_idents + right_idents + (with_safe_op ? [Branch[[ident], []]] : [ident]) - else - left_idents + right_idents - end - end - - def collect_paths(idents, prefixes = [[]], index = 0) - if index < idents.length - node = idents[index] - if node.kind_of?(Branch) - prefixes = node.flat_map {|n| collect_paths(n, prefixes, 0) } - else - prefixes = prefixes.map {|prefix| prefix + [node] } - end - collect_paths(idents, prefixes, index + 1) - else - prefixes - end - end - - class DummyParser < Parser - def initialize - super('', nil, nil, TOPLEVEL_BINDING) - end - - def idents - [] - end - - def call_paths - [] - end - end - DUMMY = DummyParser.new - end - private_constant :Parser -end diff --git a/ruby/gems/power_assert-1.1.7/lib/power_assert/version.rb b/ruby/gems/power_assert-1.1.7/lib/power_assert/version.rb deleted file mode 100644 index 700e7d445..000000000 --- a/ruby/gems/power_assert-1.1.7/lib/power_assert/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module PowerAssert - VERSION = "1.1.7" -end diff --git a/ruby/gems/power_assert-1.1.7/power_assert.gemspec b/ruby/gems/power_assert-1.1.7/power_assert.gemspec deleted file mode 100644 index 0243673f5..000000000 --- a/ruby/gems/power_assert-1.1.7/power_assert.gemspec +++ /dev/null @@ -1,44 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: power_assert 1.1.7 ruby lib - -Gem::Specification.new do |s| - s.name = "power_assert".freeze - s.version = "1.1.7" - - s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib".freeze] - s.authors = ["Kazuki Tsujimoto".freeze] - s.bindir = "exe".freeze - s.date = "2020-03-22" - s.description = "Power Assert for Ruby. Power Assert shows each value of variables and method calls in the expression. It is useful for testing, providing which value wasn't correct when the condition is not satisfied.".freeze - s.email = ["kazuki@callcc.net".freeze] - s.extra_rdoc_files = ["README.rdoc".freeze] - s.files = [".gitignore".freeze, ".travis.yml".freeze, "BSDL".freeze, "COPYING".freeze, "Gemfile".freeze, "LEGAL".freeze, "README.rdoc".freeze, "Rakefile".freeze, "bin/console".freeze, "bin/setup".freeze, "lib/power_assert.rb".freeze, "lib/power_assert/colorize.rb".freeze, "lib/power_assert/configuration.rb".freeze, "lib/power_assert/context.rb".freeze, "lib/power_assert/enable_tracepoint_events.rb".freeze, "lib/power_assert/inspector.rb".freeze, "lib/power_assert/parser.rb".freeze, "lib/power_assert/version.rb".freeze, "power_assert.gemspec".freeze] - s.homepage = "https://github.com/k-tsj/power_assert".freeze - s.licenses = ["2-clause BSDL".freeze, "Ruby's".freeze] - s.rdoc_options = ["--main".freeze, "README.rdoc".freeze] - s.rubygems_version = "3.1.2".freeze - s.summary = "Power Assert for Ruby".freeze - - if s.respond_to? :specification_version then - s.specification_version = 4 - end - - if s.respond_to? :add_runtime_dependency then - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - else - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - end -end diff --git a/ruby/gems/rake-13.0.1.gem b/ruby/gems/rake-13.0.1.gem deleted file mode 100644 index 8753712d96f41773efd08e52808de9fe0850e437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87552 zcmeFYQ;aT55H>irtuuVbwr!rVZQJ(DJGRYp#R)s_o2NjZBSPjTkJvLH?f-rvHSEjSb{~?f;Yiv1egtW(8qpW#?dFV`1ZD zW(HwmX8m8M6Epok<1xC*kQyur-Q{-QCmm1N_eR%ozVpxMXTSn>py1K!pwjLamb_$5ee$~0snpE~I8_COs? zjRpJ7kyGpXr?7v70ff}{7Q(+D7lhIQ>GIUmIrCXb!7+#8|&KYYmV|K6X>#KwY0v{jq``$J=al?nNl*&8Xm>fOfT?;;@z~ zl<5^}d=#kJZCQ=}L5yPCQnGA*mJF@kmJP0GK=7?Pmt+|b4@#V-;hr%nC^5`+JDLB7 zSKKBugZHww zQK)i>h(6YiooK^ym^F#o*!#rEwHj5JD$qRBsu7}&tz8(dx1k9E_~f>d0RH;Qb-sf( zC%7V4C92J9Ei%@5G`tLBFQa#h(+YE?u*Wr#=2$&T8M$a3RML>Fjj>^#t^F(Z(C-@m zRK-Q(hjyM7Vr&QP$0w>)P;Xm5zxU14$NxzHegZ6f1@$qeyRT?~lmFoUlcSp}z{lOq zC4BQ~{gQ}b)?3#AgsTWuu0W!_6XO=Rvt88KG8)H8=vM>3ZSRnlgKV+auSa%4uJH%s zx>{42k=4+OUW8rV`)!eOuMt$&bP)R<944uF9W-4=hn6r0)i7U--p>5~A7=HK72%bS z9LCL}WO~7jfbf`1p*K!arAJbd*C>(MV=K^7R9d_RlmdGg&PxM<8&154JMcVQ1POV+ z`ZP>}FcH^qt|n9?j+TBxv_y^XnU%W;8@8BZYuuX(!7Laio4L*nN=-lr;`DAnku5KR zg^)~9YK!?*TJ741I}pg8-z~{0(DvQRiOWcr#rN zc~6`q*mz>#5!$bcV?=20#4ms6^0?h9>BKCP|CNR!z{@?_XzSipD<&2DV~}X&o;97+ zy*j|)_D3;t$jbP*p?_~OY^grT1D+l}kkN^LZqx-+b{D0#ARrjVkzQqd1#%M>B zHTQ0OWGPsEJ-S2=1io#u;UF^CwSGM`gLIgxM1}Gy6dh%Ejd^YrzNX~Qx`&C4fXj@B zN>W|!HQ>t)Pr?I1dAT$9!;VXCLTOp2bLM_B+R0t7O1{WnJ+yKB^>^>etha~X*UrjH z{>rh%_wLij<+h+3XX}lft)1=mjr;kV&*r0N-FNx!emTtqRe7my{K2cJ&iC5OL-q&f zn{=^s7y4~3C!SUZ`X^U))cmEyq1_6tJD%`dWzro;FNCmusW|lP?P0Ey>WKLGE{2&x z0D{H6t`KsH*Zs_A7^e>_9*^ca%uU#h`o^o-=4XR=FGQ_dj;HpRO>P0rfiY#|yIE4{ zuyz2(3u9x&r#srbO1l8rq+sl1K^7DxTeN~!Kx^cr^+rEwPxr+I`YOcB6Qq01L6=lr z@2vm3bSuh1^xjQCt-MD9+EmPFKXKm3IkCcrv@Y8e*W)`=9t2Q;ReE8FFd28RLs4y`NO7VdPoguJ?6@dV}M`0+k#>sN#ka*p-!VCtNV>B)V7bGx6aw zvJ?yZKGMp2e*)j<$FucsJSc72cP|$DXm)}Y{!Cg)W-Q?Ex%0;)wh4>oQ{G%*UsSb2 zw9Ow2=@mx3TSjuHpS8cA??>0qr|9QDwbUT~a^Ib;UIF^wodG}U-yhrOKQ|&D4&;5= zV~4$=Tl5D%Zb?XIy9S9Mz8F8PCr`Z}+tWI4Hy%R)-4DMhLEZ=GAzwYpLE_``@^cCJ ze4X5HKczE}8@?TwMkQ|pOb&PWes(Y1IUVkPUS7RWa-!(`(SA3QQnN0w;88+&3M&iY zPaHN8%myn-z;MD8v7q>)LRl1R1|ZiQ>NCZLdzKn4Q+QS7%ddbeBTNQ$u~&N^mc*xr zd~?Yj?hTKV=#$I6&Ta0g#*Tm!D`b@n7L*iv7FvXg_gjfmtymK1LNr#94lzgwXM$F~ zwnw2bMJ@|N`L6O@QEqw{M{vltZfi2>A_D+@cv(4^|e6ipF zxW7bCF-);R8Dj`Jk3cLPqz7W8P}F4x77Phac@amRW*;4734?i`-TWHtq@ft`EP?E~ zXZEkrA{=yNETwym=Vo8F6`U|&mI4D-L+9e*m2sAXR*7@5Wo!!E#m%Nx2_vh*0T`vC z-hZ(dJMf!Kf`OhWPywZ^|0J#YAaE#i7E!=m%z3~a(m3C=P-+rKqB@h0`CyQuii(2j zb0d}$3h5coXNb_%A+fz;Sj+gIC}0hszf>T!2z7^)w2qw;MguAx4UACEFtJ@nnv$(l zpC$iE5dJ=pW}IP`VgH3fc948w0nsOv$GIFD2?WVF zhbH$wBk#`yKf7(K-OE1#=|s&#?1%%P!;wJDzE<<%AcJydr+lNlMAvTC$l3!Zj@&>O zgobb&ule8)Ee--53+?{a8yiQ1k9T7rl7rIlBBBc5ec2mwubca2EHCBeB<|YUFSkC zFa)Qq#-QVi ztiT#Qv;JLO@z6vve>_*p2P{2huZ-`FzO$Y$0r7YoQ-$iB7ADF046n^Qrc8T(9XjBIm)shw;h0HrAY*5$nZn#VG4-`@(%mJ^RVWI}b{6c}0?F-!pQTcWA@j*-Ki9 z5_JYnnGZmsJ7l>zch@`CN?dynT5DAr(C&LNb-(_*j@S%5qqHH#;561XH0y zFjt{3Jlok2%cVHOx8ueKDFur!3M>PYg>zF}I1U5Xl=2y)qMAW!1b-0~ESL>N9|q_O z@jk3-vkkmeYCcrl1&!jrDy~rC@BT!<`G;s0jn*;TwV@C^JU61{Kq){Q3mr;L-R}gi z+`x8o(H~O(BYyqv{mF-A7WX%~&f~xxLORsM#`;|rS`7sQM8+OxIyQKN+u7?q#VeF- z7;@&B-&Va?jAp2GO%q-sD$C>|4rFtXSiMy+3}jo2zPBmrQz2b8+$5>w9OFvub_e2EEQiB@5a~5F11VX~M;}kF=JW$( zUc`p#?W1K>whew`2!j0eg0FRp{6Sd`EjhaznrHfY-EB?F7gfF-ftAroIAHI7wZ9su zrSVqwumBPwCG(WrA&Ta}Sj?(uB8x+iQo{B-smRz{3II_<$D`N|OQuv|ZswPviCN8# z4GxDW6XAc;)4EsFx_7-If5BV3(iy~=8^>@vOe&p`PjX?!}o0-+tt2L#rylt5KKH7vnKZ?Bs~lJU;iA*;jEf zUjqkySsJquKWbT1e!T}82P!RjrJkvh?zuf&KNp!AJ#;Od)TVNhse(a&H1W#(-aFF^ z&Q~6}D+coDa_E?u){YRfW>>JeqtyGvuY`GPlxQjO;CC+kfp^JK2O^_Xx4sNm6do=# zvKVM_$;TISuHn(_7}fYV0|>e$QLts|Uq3y?GCS?_hvb2Qam*Jl{c$i$SmfgMCBErK zCGZ_J8B#d0ei>%zm^p8R<7iFPh8f0}7|fZZh4LaX*NZgW&75HKtd2(Fd_5V0YmDni zo-(Vv@cxm34NY8Wk{72^eSBGBD*I;4!1Kpr>gcPJ%HdzzCclj1U(j+;S!I_xTu?|rqt*0Gjt5jG`mvtJK_1yAj0k*_M8r6C`h^vNKXOO3^S#X&`a_Dy!TlJ+5u(R$#e#mQ$qYz91Z;jMF?k-cVdUD(>*4$R`c!2uk z1eb3}F*O6W8lpGPDxVgZT;@qFb~{M~^P%$N+@SzOCuLDjWBz;qsEAz3F4cfC!PNOD7O9FvA3UeJfcUl;JuV3*FJ%;l2`x(wImz@AIiDP z<9j1Puv~($F}wi*W69`sJ@9ZcSn}-&kpiO!Q#0JUkHVoE0C3RA@B)d<5%7e8)}~L#bQ9gTK?Xp=r;fg$TzUSchjD~Yb@w7 z0D`g?`5s|K*K%V&UW^V!R1-80q_asKN%NAW#8C4l*f*rB#<>w*Y=%=1iGj8b4}>8{ z=$;=n4TiO(c1s2u9eUcWjrC68G+h};50=CbQ&5(6j5z}%>2e0M2XtJ%I;Dg9Imn_m z68Ha-N5y<%1&6fbqlQ6;HQd2!L_T~{)J)KXM4$&&g$K03b0ydqE*9Fg4=~f1EAddu zy(Bg>g(xo;|M(r$ms-1X(wnFR0%B_hcEJKLFr1E~``Qei2UAuM;_{E%z619`d5zcm zhak`biBV!&gpI}Pmx`W($%dAUB_)AE00;kiX8!U?lGNJ-_thFmj{R^a5|jZ(X-Cp) zt+Ov038L$~e=bAVmGWLws7qA@27hdRS6%zc_ssk2%Pqh6ed%6(+>>YKp?+oj0#ddUsX-2{B#90sb%Z#BgYx$W$!_IXD7I znDZC6!S1zdt6)&h;$uuv6_U9Me{}E|1J(t=j)K;k#J06Cx_Ed9l>|}pv7Pl{s4SvS z+`|#P^fFlZ1mcOEgWfMlh<3&=LzHQfOMMd(~2)@VbkdqvURs zl*;2`4*)&Qkkmnz0UJd^>CSkv_qrxv1_n|mjpyX^;L+j-E{qwqcFyGQy5?N15G?1Y zVyOYUFmxnVHSD&}9}J`nu{$dQZ$ff#1pX@v;p?F=a+5nMbcN7TeCAHvSMhwgt{b~i z3h}9sDnYrFw!l-b18(i1hI!EuXR;oZsGE2#yRfMCoV;UY(P=lB8JS;Smj&vk9Dbdu z{l!ai_6lxnar3Pg=d_H=iiRe>*ip$C;rU$|>R*|L;s{!MkPlts1K)?)@SKem3V@g> z!92#hWhy9izEvh66p_ww)i)E{FW`OExC=|z*6R`Bxm^O?3YR41;Kk=8MlZqMYDd+* z89Y62!gOe=5!`roE)Mi&fOA@835yR-&Bbh~E4O84)ehvtMl1$AaW;|Q8&5th+UlOH zFHy}{uT`Fpu1tU4x;ntdVj-f2sG-_sNnZp)n(Q^Lr_CIyo|9M4ucO2NFs*+5bJ#Ay z$GH>jZV7v88z@d0S(W1_Vy$Zh4pB_CV1t2e+)gc0CnRVLF|9H)e=}qnT3OM6rQ?0x zCRiK~D2ME^h3{65WoWG!Iz^NGWEj$CLUnraP}vx(=!r0o2({C4w9Oln6aaULv^${g z8dZDH{ynNkK0_PfKt-B#jaRDc?!7ch<|nzrCw*TJBu(jQD1_T#T}|vOp+4V^ht`P}^tl%rL$&>3>|9 z-T=OcZl1W8AbcESWbLygzjpJi1}QcOBvI?=j>Bz90fCu`&QxL(0;!#rtN5tmvC^3&F&HdNkzpJts*f8|06fVTCk4)kzThQR==&6} z$7qS`-W8$wo6jpw4MFN9X{2Z*{XqVum!w1TxLeLq6UDgR{TIqTlLL(HH<$zkgxsNZ zp^SKFwGewYtLm{yfcE7ZdrLj^=cxQl8yKQ5daePK2x^1&?XOxKf(O~x!NR_SrC&|AYHMrjwgceQa21w zKDH8-sf0z}9;`ixZS488wIvdE#*Ze`E*j|ZX3`xbW)#!D^5;?*oXc9YCZ33Ne=u?Q zF^-1{Q_Q5-1ZOOlngqJa>>hxlSwf$}4C_>XsV_)s{`tP0@uu-Kkd^5g=6-2?vw6{W+$eQ>F-KA`-hoX-K{E#&BWL zz4w?^Pi%RNpotZ#p82L{m`Ew66f&wdr>)9zw?tjYt#|q0iGW&MDjjCDgN`yv76BmS zkELiT)0&IIN??1sb84PHbJcwIre2y&s&*55LknK;uv0?Jz+j4=(bD6hx_4zL>bG3&s;nJd;)DXtVT4Y#;OH(ldqp_3@q}j+so?3#r*uybc;&v#hNuDa;iEX_KPbwQo)j5~5 zmgW?ng@awyf^<7)r67`|AF(*3QhyJBVnCJSD!8+N3m^iB9yTE92DmN4-_U@r5IjPK zn0PFiw`GQ4^pXU2bSF(IQq}p#qb6v^pgN-=?#1~U*vD1VVpmy~7D}sjU}EN2p?q~v zSUC$c6+oxfIpLdJLXOZ3j09P3q*!;SArcec@0CxQ^*B7}a!n+t!O>iEL^T>{ryxg# zCzHkmdydFbSunC(n3)g$Sh^H&N(c9fXFlzF_FMSqGnbO;obe~$1G0V!dU9&~_6&t2 zW6IZlp%b3mCu-_xHVo)a(i&Av;FF-uhOI|#Gsa2&V-M_;EL5luf(gwZ#uL5!O9KvV zUz}9{2^mv46w7eRvrt3_Qu3!Y@2hUf`t0%N)T8fT#C5=!9?zJCKaTp>(s~Ha6Oc>Q zG)~*`IU>#`ZHNW9MLH#~*K=INP=#@ph>uGOE8ejU3y5bN2~DZXi#Nuf7cEzAxKt;v zCINy%)Q3}|c7IGkIJSh$8Y23+&5(-VTW#LAn#0b$(8103;-$cHy;T)xEIOx}z@F#U zPTXHAlrw&ut@-&jOXTC*=-YkK%#D!N@FhNJp_wXp?HiE<(bQt{FfUo={hbcTdOdEB zC;V$M=pPn)2E%25rt@a9p8OziDGpgo*Es|nq(@5lBLid+r75P%ACKDve}!{FW1qfL zn3Zb>8@j>A+Z6LYi zS46?kM4uIulhb5EPD=`BsT(?vV*X`)m#Ggm<)&aca`p@q?v zG`6l{`#rvcgioCyI?xqqg@*wrP>{xO8!SU<31t_p@ zh2!COV$=6TISZvJq5a984P3?b|9q13n2&$M_0$*-VDhtRVv5CiAuN8KYHhSTo|rI; zJNJcHTj_R*Xt7MnlG>n=^ce)cuw=<0ssW7X+YO!Co9>fkr(Ns&ySh|Q)q5*5SqPUX zk4y)SL^5}qyRW)V~a3pGi~R;?;YI~Lpbyk3I9gix&}BJsF`cuv+E#mm1iFoR{=@L zk}Ls%@bKyDDFs)5j>fg?+lo->m&-f%kB}dILCr1;wS-@T+j@~iYsvS z)2S3(!g{Z!j5Q-%nuDC(XG(DSv~8JkhW`*ph?CVZnxb$}7SA&rc%LB!cKEY5X|vfn zsoLXYx5I!uj7dj^voo<23wdiY(sAMEOMcM%IB2jBhCQ;ry1R;O@L4;a$WhKhwQOG6 z??vAv6vYN?2BNx^b!Wtu$n&GOQTTz-OIijs|*WZupDMqjIvedQ-Hmgs)w({!VB+kpQ&Yp0zzpN2Ywabxnj)w zLlA5{*1z6O9jGO?eULVfMr?Ao7_=)-BTTw7^=euSeSq`)Y=IF(4GCX zS?CWN>^aI*_>@EWAoCmP2e6tDrUt>OnQvjb_l2MY!|k3NFew@P$^nUr+wqR6n2bzedOF;@`ic@#$ zF;82u!R8(PeEpPmJ8{hS#!HT;T&GfN2*@?;k?SF=xNxPRUMM?JEilbW*$ga1%Jde~ z;$q_}zy(@zUOT4%7>WYV!WYe7iK3{*u0pMI?Qqn&$1M&Ny0OH1k7#T z6l+K7QoLhAdtAko=Y0Jc6ycfn(?GpQQVl~ZR&CsE^f}l7w0w?Fy_2SRLpN>s%RKWol%2rAiJ`GcIfr09#pr^cU&oS*Qi4J4BD_jc^s40^PR$$z91$sYd2wm*b+gT;{^2)6ge|3_VdbKP+s$raHMLbC%CXo_wIZ$G{ ziKPp+424vy;xR<K9lz5eMq zQqtH|dYv8S^5-0XPuGoC5=FFKlBU-*muXWOpI)!y$2S?oVo|L#*Qkb2MCq#Z1D(zwoi_dBA1sY(g%3$Fp&Zpy`3Xt4|%Z`4N&1Zyt zLDKJ0Vk1sCdYvf;)5h(R)$Ea2|6rxV7V}Ce<-0fPAfk>x)0yD8q2MsVuMn!*S)OjOwk-Eyd%_&JBR73F;Fh zpzLJ4g)I4>kq@i#hm9G6_>*(_-#75d_L1=Ll zAWT#v0JF2BoxoZUITaZ3)a?&dH7t(zu%*6%56I-CYQDUaJzr{XA*QcB z*n62dw97qKSim#K7RrC%vsR#h<|&Q|wUul%pio_>HOGiB<#@3b^$64wG;LQd1I4IO zLy(K2u)$TG?C>0|ckem(REj%{#!+(&I4BsIyIw=^f~D}80rMB-x34))r$YmSc;5I>8otytRRmCyYz_r_3)=;y ztqLJE#B|<>FC7gR68{y@bUjDNj+RThyMIPlhgkEDu*Vvtea5Hqlth#2I_|*4$h63V zfxcR7@b-aE%nlXdGuWK533oN6X0<2yr|APke*oBTQfnDD_u|Ay(BGSe+LC0plQ6(* zXg{<`K8x7ux_0-|?T_^+_B~mlUf|ISerGm_Khll^w5=Lj8Yq&u@V?oL1Wvhzbe{C7 zl17xk8EPP$a=yZ-H1%@pL!O+FW2!EB2o0XkaDbm(iD`6gU61f~e&od;bu)^MAtl%iIoU}Ii!D4~xFE#l#?{DnIm<})zb#$iz?GI3L%tR4n%dey zE9cbId7Kl7J#;uX7f~9ouFm@U_3cmNWirmXa>tDXX3`8tVv(~QoZ-xX{iti7;+sF> zr~RvEofwnUB*zN2+Z&wvuOT6dUt%%+6h78y(|s-xVk;`U3Z$*wA79`9@$Ce4J9gPq zG=!O*DxFnKEpySOW9lOuU#hh%t88r2?Kc2ao|)5yGY8-R_GRpY>(z52XQZK@6^Ats z?O%Oo}ASzUd(JQ}3W zp1!Pl0>)xogWle=H}m|Z^D$e^_8l*ENE0`R#LE~LfNCF-ae|AG8e$kJCs!|Auo%!Hc;HYV~fOa02|j9kBu*(nXrXkueIpOs9a-+j63Ua z-cWb#!yp}c8%+P9*1nZPy3JHK>vE9Pk6$GM z5?#ISz=IsZcado0osJB)4-`;u(oQ}wH8WFOd>W6O_u1C)lm7M9o71hYOlP&Obj`RA z=r`kYQGmiuSh6UvCg18p^rr_x9iYU$%VPvE$>=zAyCrvg4=3SV1Q@*6eZij(5@j{A z927-}h*uq>k^t3$j$Q|S|b#wPw(m}@TrGrYCP#Z$@A~4y*KGXMq zBa7};lf!hC@?TaMor-i+;Q`EZJLWz8U0Zqw|8V7NO+tqiG2)GybRL4+7IakA< zUy2yE3Ez}t@)w`Ty8YvuIc(!b264vrm7<74Rwq){!5fsDQiplmzwPG-o1`OZ3Q$W{)I+}=c#MoBV z2DG>I)VDY}{NuUqqgn=@_;$7Wv}_{j=UnF#moMxmr&GXA zXZb_B$=1eJ!VA>J#y3RM?*@~P z*gH{j1=6fw-~7M73P74R8Ra5w6AO!uyMX}%{4+v^p{NepQ>GO!4;j0@Mbo4pKS4b5 z&=i|)OI5w&aVo8^*~6{;RbsJwp)6&s zmxPbsZz=R0rqgMLV-EzlI>`BL!f%-_A7B-njbKp!fl&X!)`Hw`8NNn@@h#gt%ptR8 zui}wC`2 z1RTN=oI&i0QXiUH#&dC~3mU#`X$CXk%d&55!FA<1&6&+DS+6cv@O&qQ=6UIE8ZO7T zNNI4Pz~GLM-;sq|cVN6@A`yvR92SM6`D$2h(6t`R$h*y0|3%UT0I6P0CkECGB@8Ry z&U9=J5*-i`GCCd5nL*pK~IVOesPze|TTNwm9TgTUv!L4N)ZV zY-k(T+$**72aLO$&h3}SZ%4^5Vn=*wFSKDfR5R3)@rv{BE@i2gcLIITc%N$r@^A-e zr-gj>PlgN+2_lW#Lr&eo=_Yb@>w`hT>I5rQa)B8gDjG6eg3TcEtk{HQT6n6k-&_QT4LA7(Xc3&Y~ zd(boOr%(Zf*hqv3!)yJDM%etltG#ny8>z7iL zB-7G16~S&>`D5*+JEe1fHEM`|t@~^4qR{U`$>}k5Tm|lVSDfi1NzpB*_=-3;ka3~9 zwK2y~0UX63hCl(5}5eu5oc6W0#bo4npT1 zy%BQnb><&TIKA0lZT)S!3p3`CSg~g0YI)rLyhY-cFiji=S$W=>cUX#C^RSUMZ(aLw z1Y>+Br6_G0WnDZe=$WQyPt+?hIVN}SgwHmC_j~kpSg1@MnxW9K5BTuRfFIIJxobcU-K{QnDH-RvRV1 z+kVWU)*!~CTPizwiv7@heEd4eh~w12ZBSpdn#iqo$nHXhsIL~|`A%8-dsioER(%SM zW3A}tnCTJw-vT_TO1jGNe9mgyYQyTu?K^CcKz0A6Ka(8S{7VjKV@pXt=<*M#i*}Wl z@g5iSXpSF;o3<$}=gwA%xU|39eX>4mOpJw_rRle8b5i0p7KD2; zCyG z5D8*o|89JxdEZE72bb(F)Q3w4Us`nCyXE@&A$vb{>nPL9;%TS9Vw{c`yN zcX+tbUCFg+nA#E<>jSC^e89GAMBHl-q;)k$gyjdMZacOH9Tc!eF*cVy)VW3w!@KB+R zz;sGwBY&MIBV#EI2&UWRh~G87UUKbqysd4M-wK_Ly!tE#yrQ)7{nX`(=8-FE zdq-0+W^iuPW!qjS;4Sf|<)zeF$M_Gj(o-2NPH&=SXXuX@Z7J{`FrY+{)WX@!T`{<@ z#_e-eNV!}!c6o;^fpf9c&Rs{?T7Yh^7JbRW{!y*bz<^#NHwgmjT%P`LU6wQZ*VOL! zZj)2YJ^f}6YIs0T#XnbClsqD0cCE=aW~v!L8kei50OfXc2^D`x;4gycT)mHBQsTGc z$9*3do`N!{TEsZCPHMQNfs%n`*dyg{L6FZs)HCb=l85S4L_^g-52cT z8MdwuR@9o0`C;O;BUsStne}?_(=~*_mDOwLBRZXp6jP-pR%Jdk#gr!q&#;ITJ1-9( zZVnW*qzLhU7tY^06wzuhCOR#rbgoZjcH7zK{wh{-h*o9vajyKcO=H~}wZW*dwBn%n zU&CzH5&x&I)Ty>)|9_~=8&M3P11*1kmyrT|C;*7F*`}$N&>#1WUB}ToT?5E~`E3I< zAGh5heIS?Jn~PpVuxI8dHtHyvv~GmwvTco6J{MiXIaCDTx1$CU*M&pMcNh=rhj4o-_B2L zy&)2;eduCrcB(t;mm+7>&m3K7T#^rDgC|%I)=enNg=%{e!PzHg7)I zxqwO`ToxH-VTB9yHZw>`Ojxmwgo!pMmw)f2UBZ>}QDd%vyl-&P3+0}6kykcG8{ebI zBc=6O zZ`lt~lhT)=8Dp!Ec0=|8zmX+R+N4W^1MwsS*s+HYBdC(gH zC2S~8ck-{-J_T#DnnRQKbfPS_snqyj#>^bdevKW(Wt^!YB!M+;ARm=igU)xdziK1L z3aEUAw5mY(in=uMWXG}0Dd$!lkD%p&r7@RE}QrCY3$8Nf>4x4S%7kA-{XDAjv z3LzRer<{KTC##nzo7U3$Wq}VlKtJ6{3SKzyz?3NFzWlE7ZDWRcA0-u$(@xTTMtf~# zb$Xj(Y4DPGQ|)AYeHo63+XV2k7fu}VSwabmp2VPqy4O5vHv6xJIV5sSiNqKCcZed+ z;cA}=NKHp2xIaDC%vRj@k3i-|Z}%Ewmp@-V<-o7lQ7W!}%S!jnK6fjkWDblf;z>Jk zvRN&R$Kq-E?}#LS0b9W@6T%2NQ^;Xoi@hd^}#L;+UC%(9v&i96`tKwDiCa!K@(;w(Glu* z%p|uc;X49K_@v4UP=`MzCr@cH!O12aVIQzkR)B2nuvqcIbCu z_tM^Ny*)5|&|^OtFk5@G{+Xn0ROiGrxGg25SgXr9b&ZN!xyPWt@tAJNLc|Ug>>gUP zLlMD}Iv}9quI@}?yy|_Y#=^U4im?(A3+;{Df$=!^+C%o*ZKB}c$GpZ{IC^g-5{8<`U zpE2ARSZWDq1R{H+b19HBV1oV?cSX&Q&wMR-N;E2;ZM^RT6pw7X3WN9|^w(71$|Gi$3wT9@73SPA%S^^FE&J_ts8+6N*hE$j+>8H361BL52jKS030rDWGQe#cYs zKq8nJa%zzU*KjIs0#>^ez@y-$B zjW~SIHfP{mxQrg@KoY61je$%P`KNxG0jKzmJ31bXWyQI!f zN5QjrlxxVec2E()jYd?Rn4>*R@`2JGj`sMF)n}cB$)eu-oQaW3c_K09+6ZWhgQ%59 zi+`&6`m8}>C%l&>9z%AO07&Qay4b(;@~a>Qw)4piYr3S%q#9caboLl8}rUQ zYDqOhRSLbJe=zTUpK~Z6pi83*SmjLe5*yku8owE8=#9y43noH6O-*nduy+GYOr5WM z;q6wE+7J=rM3j47wS>7B8}s)-neJRWCrhy-)we#kT2diOS2dLyluo}{-e&31Vq{9a zA;Fes2(l!>fUZ#)p^4R^lX|f76#{?g38neIFhE&7laZd^!j-{9nZ^yLyejuEy~{GH z+y!*^#70|)JC*sHjm~KJ>g?k=KfRlz2@SDnY~x}u=l)yHTz-cR3?H!Y8u4v&zcp(y zw{~-H*h0d1K7C|)!Hiuj4(^R`4$0=h*TIjxdiku`wv*}yuN#eh@nU7waO6j)Fv9Se z$)jyiX2plCkvOJ@UE`*ULqLUFjres92Q=jjz$xG}uy3xqdK87MNRGtJ##YLCX&urS zFhg=11FnFgVwhLS)*r}{0L!*)Wi`Hk4oGlkXFjQ&U!!r9n<;sv8WQF2S_gGw+OHZ7 zha0B2t0F{{lQ@Hxd}9=yK25kbhi40N)lM5+(TST284ce&6v<;&A~(iy*Ql%A0N$Rt z3kN2#LBm$~@NcxyFmjcZYSipBs5S3u>6FYFRRj|ww-n%EDKSZX$xvv;v0*~IB$^Ih zs08c`T#|XL(Kx-hiVtuz*kNW3Nfeza!zc{kMsr{!ma)6G9phbNr#eXMfMV!`7vR*- zrn6V)Mc!}gue4<`w(?)3_BF)dME}=?*0`>mm?Dwn+OgBmE+*K)Naw=MfYc^_p{D1V^lu&Xr<-S`8EgL_2ApqZiE3X)qBjgm3Cr#){RDLmHb zfHok>j7ZWXMi%o^QZ2Zk)CKp>k)~AYCGxf7K20nTD;^C?-c?j$S*Ru*$QGAC?_MI~cz*Hrd0YiQUm8?mJ%7&iTg6P!)GVZ2`7XH@Q(QshuOLzq9= zE=XfE8ZX^MknYr>Qy)QTIIk+wOXMP9OePQJ;&mZi=iB2m?>Epyb3tz*GA zB_gdOBgiFAl#_M|HZ^o?Zg`uvJ%MGo=ljTd@kPcJ>D3t%uzEqnh{#TkxJE45X2&__%VNs4hX!Y@i_>Xuk*CRq{+9-k%Wm)p3&fSq3 z?Ln{+5;_=tg)dL|nKa(&ozT)sXQlR zq<{$ag_(O=#Yt^S)s(Nw@@vWI|7wkXt+!=`<*Hb4v6)=|V2Qfq6LsoOLw1ShFzSXPzZv}ic zRYF5Z4IHgHPo$P+kKkFd}3!4tsistaL>vQZEk{H z*8qaR^w#j)WP;*FKWH9inUuFUJK8&vVh#s?dA3hSI<%H=c;lL$K38Ug%&Bu`H$Sd? z{`uPHVcuJL9m+AS-3dQ$@o+z5^q*;|t7|Ue>T?V3q;Eh-8Zy7AK|RDZTXDw=v}Ai% zHJM5eYg^(~X@)x7gL++;nnl$a%y2BKXcl}l^MU-h89+A-IIe|;X;M6It!}gbjtv({ z%EeJ=fjfR=+Nc`2(_>lIwOIXeg}$W&tewdGk?G^~0Gn92XNqrfhV7W$l&=tkLfW|N zB#Mv*7=lz8n`xsb=hKc%rNExrv#cfq%_TUfMQ$a+7GDC{T;3CI6vN6z8o#;p7-xGp z8(G{8ZKXU?uLFh-A`7J{tAR*qu?>%1iTzwNm@3UzP@|l+-Pb%iBe z&ZI>Ii*?;lnDRJ}5$ar+&S667{bnZ`D`YKKT)Ykdj8(2OXc;_D3bxGkx&EnVzF9bf zw#YnMRM}>z(2JQ;B>%vSuFfQWR6Bp`5|~79jpWLJ1Hv)A<+n!~*D0R>(;Ta# zaMpXk9&~GYf#(dI*eZA0U3?~%79)kd5IMOvqJbbIp7PP9TD_G-oEQ3Cr^DYQ{f<+c z6#Fu-ii(F6n!lt%j%O)ui%76b6#Xku;IC@|v1>Zdxt(X_t2KViRUit2+WJkVls^eW zB_k|7C;-E}QixY%f(4^A&Dhvril)K`!%~d&VYglClon~+y*>MZ)$Ldi<)9T=zi&TW zZmK<1^N5WV(I)B|2?@gqf5;hq7ZTlbIG#}GPl-p#$2V= z3k;2lC-*AgjRRI6KfK@Wd=C zNa5!Nf4Xg|$k99I`9d7$^46;Q+SS=(2#D_p-~eQ(9#FbtZHcGix?xxxgj zSi|wJ^^&yd`9j0uDiwiP+plrbkmy4amPXQ=*)&lImcU6uj}TQYs!mju8P|Ffca>xv zakEXSL}s)EO!`8j{}y6%y>KJzHOP^7C4o=ln4OGaBk(k|h{H3YQXP=Slc4q0h%rmF zl-0Rd{NwtdGAGk*3{b|YX9nZhy^#PLzdGHSBM1x8S;nfW%dvZKv?t`CF_I>~Pl4kC zp3{t&H;04ic5Dec4|bSG+jf9AqS7W>nyD|%_D*3Y2L<~&BeomUCJO7%;rvQX-e@D7 z5%OXqPI&||K^A`Crt$sRq#|&6gS={SYUp_3KZK#1=6oH{I2l$$K(At!swKe0S=~;j*ZgZL2NK|YtfW&jY(qRl9-VO zsR|bB2N*?SJXc*k2>YfB1N9O-@IS0k5^@7;YHeGu6H#HnhVXE=Dwd|W<)9G=Ok4q< z16v&-5WACP(Tiz{QQljKW4Oz-i^Exyi`jg*qM(?K!$srLLY66FoW@hBth~!xQAK72 zR5I_a1d=mhN`S7ZoTx30r41%31z$7C)$C%ZQ?_@ctBnte@i1oLL=ZNTsCKVpY*9+Y z1$rj1{C3S^@@3qyWjAC&G?WRblW-3VY8UMyK9uI`pd9b9P#2#zvLkOo6`czO(`5NT z%s9p>!04m)JAZ7kjWF>y5e_!5PoZr}BF}FxiKh4o(i$ zcTD60H)CK;o5TK`snATWIwbdR5;4&0wOixYH$th>A)SOKFfOC1G0+COV>}v(PN1dV*9kkP>VqldtOUY z2XtsxF|KjImPoC6iH5z_=%7Y#k)D|XBk4cEwaQD{R@4?Z0Tzwnbe%~%lC*UEo+iC3 z*0Q@!74_1Or9V!+*xj%xAnX7YDYctfHyUJ99NSdVQU4F;MqV0!zE@yc%1*!lhhRgEn#i&-+WEru7^_~cw_=x* zC~ui~?Gb)siQr+LM9BNfNlMKJu1m211EQTv?a|v518ADhvt-N|9Krlp~mPG&3;4o63a81In22q`45YegjvpmJNZI+J{ zz-pbiLT$WCoc4z}zZ_*(#pP^?1T#m*3sWURsJPU7XR(>t!vdD}VpJZn0TUi+mC{bU zNfJU%vR(`Ws?{7!#LXb)A`~OUD0={^KzVb7<+k{)T@4E_fD&sal%V&eveY$@IOVHk zwi@}_sSVS1$~ylRq#;8u=iINRF%2>LOS69-X_5^p6OO+;EzV1b3Wx874b!i^_Zxov zeyu8aYhH>Kk{I`^9AcJ&uFXxAQP8$+>3cH0u{xV6f8hG9TaDQD$yznS!dp)K zM}K!$wLMW$R>B$C?7~)tBCPfMsD%Y?crpg7X9%};VzhbBHydcwmF7OQNV!f>)S8%C z;cZbc{ShZA{OfBgAr+Lz292^@L8ws9gGMc&Cwh4#=h?7HY%j>i#PFDwHd z7|?!}q)F$52<{}B5=~WcGXtZjWH|_S7t&@FO=U^Ai+Ar(mymOX3NB2D)9-Y(wF`sh1|!B(iLYrm=;aG!fHg8D?B2rM z=Mcj7=xsPlhGtTky+{_5o)UM4(^n;x3jQE>@VapCd^YPf11xm`QrTz~SFVe@lZ1Y# zP^~Zz-K7}yoY$~$5#K%Eo2N}XSolHdE@Kh(i#ysDi^ow?jN{p=zjCiJK&K<}Q_$)Z ztH#Qfo7zt;-!8PO{7Tdxf4r{WsewC04l?*OF1h*5lJ)!ySKh(%8z2c;Xkw(oim@U=NTQRW*#jLQkO+co|Wc1%e9YFZ}4pvG`K_W zz!lb|F^zpE^s_AK*hJ9OPCsISt9c&?DNy4xFtw4be*O7k2@h+W@nh?jK*E*<1a*id z@1t7(PX?iHb@?HuLtpD|*u zNq!8I7hFhL&z5DJ>5Pk@h-NlU(o2(SYSmIsG*tDLvs`eF5)WAL=&#Oeu-r9yZ+*Y6 zG=nHx-mhY0Q%rgs#mFGjTx(*Imn1=HNLfp(U zPwXlO;H9wI8e4@J<-D93yK7DXX30ZLLtb57kzQ?C&C-mZ-m%YvA9hc)zOsoX^Fx28 zrBuaPC@!oqLYx9EF}qw7F<#R4-Q-_stx8QVDows!Eo~Xnkr5&QOZ(4%_;H1nxboUi zfpFq*Ys2RFU%2C#{doP5F%S`W zPEb_wL=6_0Jn|JkN%xx0a;}w1K$58BX56P6>+4(o(QshH{$mi ziJnrq2PUL~6G-L2)b?ed-O$?k5aXJ)1WF3ztpnCN>&4&1&14J&E1eGV^;Q(8EbYs= z^SQdvnC`=}rHJQx*C8)tt&bWV63TK>6{Z#d4S{#)*%jX6ibu6s%0Lldp?gfv4mF$K zt=XuJEe@B}NbH?7Q_)~m0>GrwH9+dF9u;$m8k110Adv-V-e_1F<|f-CHa%t02X(of z@S$v6qZEW&Mrqk$BBGbDW_Ufi(WPid7jmy+&WI2}f0o23x*d-%NP-?DSxwBlV>y28 z0n3+24x*)7mE33`)>LNv(NSTIJp?ruOjQVNHdhl?VLtZwDrvMYwLD) zY$RuvW@Drf_nFKPMu}Kp3NIwq{GoxioD3Cfbp<_8)MSaS#HGzel@TZxGq!t!B_0pn z5UE(uqlqZ;rpwg#D%kNUcg~z2Y>*VBUd;St)rH58ZD9)UQK@fIi*|Dmf&GD?sWIE% z559sz|IU+6bsUYDb zu{1lMuyXGLwV8?Whj`GAzSZ#LP*U34nun9d!?EPJLbPH1*9J8B9jU#cHtW^0%mGS~ z2gI*wVKyf((pRrU##>P~;+4vBDtTX%*cOW;5`rPFL4xR~Hj~H?zt%}Z;Jp?F@&|GoI;sxbJJ3; zbUXr>wi(;f8Txw^T&WZ+00dUG3noIKG1*0VZHiTTRS4&uC@`D1V9sow>Ko0~wnXMd zCZjqqU)h*y6yT%9OI(j@=xM&@t~SOONTLGvU1&hNdB~%Y(D0M=#C- zdg5gF`PpBCqsPJS^S=h)A3Wb{H}?N>e6oLf8XTPj2hWZV5BB%k!NK!KhcEUHo<9j5 z(tFR3&Vs`OB3d-)*-?NAb*O`Vdhc=L+5X9+r}XFU!-KHO zJvlpg^x|;$BshL?a(r~UPt)%;o*z9wc>ef=X4!wX|NJbZS!t?Z{|EXbIDNW%c*s-j zzM$2g@cJGd9sl*@;K|do;OWuf-adW!aKCYQu>0_EU#6l>Jv!Vyc-9W~cAxD&+2^;8 zXq1xxkLl`OKHcY!Xue(g-=njGqvs7elSfC-&rayiHtq7{%)a{a;B>zo?4BH);y@ms z9MSMNPI}{r2ch?#@5?AS>Y#Qb^a%cbak}r;vbVo`NMoJiW&dHi%|G4#{PBNI_ILN5 z?T65S{zd%1+r7WOJ;(nyyPLQC|9AO$5S;9OzmF=FY_@*}e??;iv&xQCJ1BP6)`rAC zs~#5&;GlU3xDBpT{*i~)#GTw=kGc0O9tib?B$M$FR=(%7Aa!4|4;HHuMb?B!C$4TJ zSI5S9T1zVO^&%j#Ni=9M;t2-f7f|jjjWnZICf9Y^7cY1!957jvj2e9`35O5(d$P8>@Z#YOU-(~VvBxh7zlGLdu9 z-H~baqVeJg_F}iG>;Ulw$RO8fU}skq%@@@mCBww3_ENM`4Jrc{MLDt6m`tFf9IUA# z>8CcEoM(xTGw%>t=)q1N1}%Dc0@uj$2Vuc#Baf#LNl!&atws3w>{vp`ed$VTMM+@& zidcu?)T&i{=V1XOZfK6KHu`wZ0goj|?1y~Ar{=b7DI6(Br0{93hf8WZ^Pnig$U~}s zx|dz2Tm(;jO!!K>4=$9~Vju31or3N;p6Nvq8Kc0dvh)nN6ztWp2hyY{aPVisXKSBk6?dqwqMy@&NY?f%+ur~Y> z<~>_ViH%&=tj>huT6=&=Eq+(ZZy>`ojZuQgYc-WF5hlfnK9Z1`3XzaDr87_rH$-h= zT-{4E6c>{0PyM3|b4Z&mVZf76N=;RvGvUsC0q6a?xXm_?JC^VYS+u5h9-#D@@wwS) zU5Y2iF2mbqVx+ZJ+T1{1GlUZjV&NwwK*D%HY*E(K<={(H6Hk$pCXaLoZ+EPt1aS03RWYv6Tj@FScfngJ;pN9$hJft6YYZ5!l zN-_s5pUtMaN4jX3keW6P!6A7zbxn$blUR#y2(Cz}dsjvc0QS>~moeRe)9CL%!dJIL z>~&2)KF7zj75D)m)V;=gFA1?sL^_i}?>$2r?bBSRlXOQ!tmu?Tdag7#u=c8?9otv= z;h%=%tSE>!drz8=^hw^~v1jrX`o62hh?E&{>;&NdYLEm^@?CMcu zK4G{GZ@7&P4zk1PcRb{#8ItoLK4G*?Z?w%0lQ$k{%M5fZRgOPls4Z`(t&Ubl=E1gU zFy7;l&BOYH@wUD3wq>I(kBi5>N8>)?eh;|JN8)Vxgpt4SM!wf!S4{^1uI?Hh`#z1$ zfn<>JK4Hu+y)o~1Y@xk1MhDNzMGyrCgmp;-z9YiUa~=0WIE0DS@-*}}Pqn_W(d}+* zZf5~~JC{E#8=O=A_Eh8;}(6MCvdOj(6rB=9$)75`r*{EQm4U-?k}G5l1=d+H)bHTEYZdpqdj?$wZUQ zIH)E{hZRvkjwdj8czqp4ov1U#beQCszIZ$%)|0viqqGbo5-3Npc@h+HH!aPM-J=pF z5ca20%A1hCzxi7g=d%aLBr$S%*HZ~C(1Gx=mVK2k>PrN>AsQLty4T=|pcTR_BWc+5L-;DCPrk)A zJGdsC+t^W7jUzeB?+2`I|y;-b;mtq8Pp(z^rSvLAf)HkpLi z^2fJB+T9pLnnx9dom`fasUbU=gm7{^U?B*%$k5IFZ*oza} z>wOVd5%ug2ADTu+hfQObRT{C?LAzK-*IYZf@i^|~6?A5>uF!;!bMteg!Ou-I%B1W- z+4#w`>=5KA;4teE4moH2nR{mKbsIs^NO53COu$|UX)NA$*&IK&FXD~3*YB@K z+xNG(z8Lh0s}sxLcGLcZtWrsL7m<~g;1(UHA-LL<=y2qC96fTbclH{UIbYgG8j|(M z`mlt(pw$>|o5^|`qla|gE1YOCiMhQZJ^W8Oh>c3{TiO^u;{RP@|J}HMf9ux%`+NM{ zsg?T{^-6y_pLaz2rC%D2J08)8$lT_DH~#PT94!i3gkRq(f{oBF7~sE3L!hjydR-xB z=U1H5bVq2B26}KTqw}`bIY_XCgV6gP|KM%7?l0q{7d(&{Mk(8H4ppet48t}0s@V?C zx$W2a`D){{!=v53bJVIM#hw`ZMcJZ9R%!k*sJ8dDvZQbL`$mKN1U6is-e#}jBt6J) z=WHKpHne@&VHQcNq6V9kTq`xELL}wl@n)l5*O23+*iyABJ;9L-QHC^m5q$NP8e8}y zQybs`cgf(7TsX3x16QaNE7#|rOT#wQs%*ZVUlJ5|UCv(CmlAcMR3r|5rZ2Gyh^pKZ zA)wKlo-?VbUrN*%O~eKX&-Cl zWV$AE`QJ{ibOmjBWa+z~*FWt~&vR5`3z6j0awD&Oj>v~*=87{%>z>cIW+n8~1Phf4>j?|MOZ^?%cWMNin-QA?RWO2wLi|E~t{&jLBCxh1A(s#XY6Q9i7_r$vsGCoL{GxD!Y+qN$)fO5P&RLktByoO#tNmJHRDMB!%0wQ0{GsejYj zJ$dp&D0vS*{~R=f<|>VEYOkBqe2wKcA~nC|sq=)G`aADqo(Y{@ zcxL??j3y!_%q0IM7xmZw*Z->h9Tru;kBdq0O%y!%zv0!|+0ppyot@q1kDeZ#?C+Ta z2RA?4KY4C-&c$VG6?kpMBQ?w4mFCcRjdx(V5!iy@+j%Jd`R50Lk&NX~Yg7;bK1bl_Ba4aiN6Pr1TTnX{rx&Uu z^ml_MwU$|OH__l+*Y@Xm((B-!muv8(A=n6o!ax7&LhcIHFTYuM8t7Sj5{kq8L!rt0|7!8s=0>>QT)mMj zHNOfrnl-Wm4M+O1J}{f1N9Ch)Tiwpqct?bQ(TBLjxSEWXh%83KOE z)CVN+# z{jae=D+?lv(`MaV)%2cA5GHkS@=%nA+sN^MFZ{=C{?_*Y58!`yYhyA0YwOnj|A(~y zaMbi~YyAOVhpO0Y+$`yTR9{8c8XbpaHmkluFB{_(82)*y=W12C$cjPB3q~Vjk#a(2ht#Zo{6;&MNz5l&A8Dkh)D>&4 z`V!z0!{1FTtg%D{WNy}0uD06v&!hjpW%AEINdLFHxAgxHN&gAfZt4Fm{r?|D|KYE0 zi^uyvlKxk{te;K)b@YF8YeE0NzkN&p|B&=wVC|L#+_HfGQ7k~flDUBX`k%oFa5sD| z|2p}9z1!Vb$p7EIwg3Dp=zlLNMh$|8pc7YFFioa0{7j95$EOcITX~hfDp%y&t9OR< z87h8j^!>N|`9SLEuZsU4sQF|L<+zTffEs-{VI!jUOp%Jwzp1P1!ejN$N?} zdgAkCYq`>-c6FD`>flF{!5xO->mc~i6~xsKw6Y!l*=QWOD!DtztSZZ|zltYcL+<)& zjedE6zqr&b|H&P6B~Iy7`#3MFksH*;fZSLgh6fl_xk*T`S4u$Z@Se7U?zz_Cu92N| z@s?iprV=lN8!5cWMRscoK)GGnTc<ohKGI+N|oYnNx6l<*>ddT=hu?dN}| z^`^RBsTrz`O}w@ytt5;?sqmrQQM93x&SsV)tETTcMnj_YS3_18%yeADV#3|rxv_-g znrl&m3uzhPs=Ab>zny8|$Whb|yYJc44j~N_0)8CKzmPCKx}sr1ck)XzE`@bJ7{+cm0G7g?S*}=Rb|czy!I5l z_Vft{zCnva(OmDVXdGzd+Nz!#0#Lk3q(6y4Gy}MMsCQ1^v5JDWg6QtP8{tIjBmOK%}ufYktz5BYzHC+u@t2%#!{j~%kD~{7@ZMSF=Q4R z|EakiEq5!G#JTh;!fhAV`!?$py2i9ZCfqrOdAs^rIMJz6hC*}O-zAf363CNWwK7Zl zRh~0Oji6y`F@BU9)}9@K5LtYzot^Z#Li-1xQ>JMjR-ZvTnh+VtCa4)gAS9WbJYb3L zB8jq9^K*|9lro}S>~d(=~?w141z706&2|H+0LX?@4~jEJuRnJ8hB;)MrUX1 zBJfG_DD^r}+8Z=>uXHAI>RO*y%G*f4h-fUK+y;|Sg~?1%=ps+0RJ#K&2p&I};%5cmV6oTrPD!XJL=LD#*+)#p)mK%V3Rq@4Y& zAFR&5dT(yQ^ugj4_%Pc+dm00{V0I9?ncE zP+OtJG@rF~qZ#W>OF(xP9GK^Tx@Ckr9;Wlw5cyRt9J&mL%)4|vJXIta)k7LrVK+hV zT7wGAS`6vdy&LX0;+*H1&v+wSKaJ%CS(p~F3iNr|s-z2I3DQ|%o*mosA16Ix-Fo=8 z1O*e01EoK^gkSzwbDd?p`q8#Wgyc<%t;x+*M=hFRqBERvLNAMEQm(G>u_S1%ppL`Z zK;k59o%U5bFxn+zVoN%oJI>}>S7?s8&FxIM2RDGSUIJSO6|67pn8$PEII<_;EnEO2 zLE`)b3Cv}@P(@CMr%&S29K_%1>y7)P%yj@`FmyR_b_7$UNH5Q{Y5{Aya3Zw-h1T&~ z*7{21Ow(Z?cV+bgQ*4fC=3VpoUEb;46Z>b2*_-!$8C{x)Ryu%wjKW&+YG{DomIK%3 zA{SYey5j0WD?}SHaMza6?+SeDjV|7wUNQ?tyr=poo*;bUEkUMN%;7G7H?G5WUoZ{5 zj7T(JbE|$)H9T`4;Id8(o>gVmk!HwDG(uJ!B?%Oz&vw7xKRkH2cW^=&VJ?c+zM`Y8 zIDAmdGqQjJMXvK`sJ8h+8z`%;=XHRc+XM*bpb=JAlrOlYkOFcJ5rA)(rP zi-)k9{=6Cz2G29omK~lm;)-|DU~Y z?{C`57XAC`Q*1;tv574cDD62efeDEznF9$o3GMV3GQP4cCn~n&kz_&!GN1jf*M8{X zBy`$N&pGg$X)I|!)_$$M-YfpV!AiN+S`X}KVD~%4Rw5dc&ec~h4qgpbEZ+i43k)V(7F!zcO-z@bI+L}|u zR*#DIh2adbpCJ}0i9`(lUJ;9|5{bA%3&X(IMIzUTL+Z4b5P!E7hg3x&mh!u`7(`+q z=~ZX$WzpZs>=~#+9=};fS?!O`T7rSzmb=eyq01;cF4SavGFc z9ZilC-qAu>CS8~?cb1ugW9IsVxL8k88ww8>3*)AF21Da@h+g@5nY$tqf{wDXmvh!Q z2xk%@9Yo@$uFhhtr}3|4^3UZ{oN6ZdF|@mvNXj^jxP-()N&YN@5d4AhGCiEMAGQyz z@R)?pJb(JSYIUr z-h3!pQy|!q=mLHsew-#6ZJzusINdc@F8iPPZxiRZmf{n!ncXv{?5Dla?=0jod3}u>HL53|NQr!|Izj5fAr=2|BpNWEc5s` zod2(@{NLB#Y<`LV`foe`z!;(0OOpZLm0pbSg@*=(WEf?z1Qn#Par%eEQoH{JOZ>sl zeE#;zq#4HIhxdyp zLtPuC8pUjZYFkW%C>4{DC1LK>lAS&q_CebtjPMz#)|;GdsV9*(*c@G|jY+!E+lZ3M zhFXMimScKLtv@I5eq<9tt>Uz%+NirsQJI_@qa{?|3%FKyCj((q3d+xE)TGwNr9)<< z@7VH{)%c>a#up{a?r?SyUZU1q-sUB{sg|~ViFHy%NG1aD>5WuMDEtkW&XTR{>t1lq$1nE1UV|u-g|A=O-Xbg(wn336nKP z`zx?v8_v>Rsesr~=-i+b^%zY8V66hN%C+tr+#`*en}FurUZk;$NT>QF*`l1bis3lS z6Xg-=m=WNFnK8giG@`E>rR(#O3ScxT=wtv*v5BQ*#(?*C*$V$@V62Pv6!Hh^*=$dX z4`?6k9~=+*n1a&6Eap_WUV2u^V=AsR4qK8tfQCwg=H(o`kFra#Ql_oZf|HoXBRne@ zFuSeLftJ%2mnN*Tw_mdZ4(+I8+8C77RqqtG5s^sjlnL}I-U{s2;+QIrjdRn;xdDPN#At>7`#GG)7(V^C>f?I)?*Z_7 zwfL`(9)6+!ekc9kb+KMJPX?tT*S}wrZ}9Vj{bN+g`EUJafS3xPFy`t9sHu*^B!BC7 z@L>`rVMlFeG1@1-h-UAjA|At=9Ex-?hws$)yrbivUJjt8$B%c8j=WGIH#tscY1UVF z@85rptR%XCbtlm{Z!X{rovKZNa;bkMl4)i=l)2ix1!FmJkp2RSq=4 zjJmrkG5V=5UEx7A=Z}sdoq)qdx}&rx(m6C8Jd(0O9uZpOyh={dB3<;=CYGwzmbVME zqD#(9YvxUN7EKEQr!wOE_aC_e-%(bJ_VM^~9?{K3}Xm7bwTd$sI}LaXNQrg_K4M`4o4e!s;!xl59#v)HVN zvl%w^#*(IsNv-uFg9FR%Crv<|Zz?#{=MV6|Ti&6wA^ zv4&&+{Q0*$j>%=xQn z(0fBa3wh{b0&c2KSP}C8CD7~r(&EuI(9mA^F09=aW;U93NYjq2^sMhMIK>}pDCJu0 zTM>gDkD;b8mKGa}a3K0bc>VLsD-4_p3baNk!^ z0{ugOTmIVkJj{SiTl1ej@gCpVJ=i(^>GeQSqIz++YwvJz1kaYma;U$e-YRg_OU&i+t$&Eq{jz zz3%blBJ!1xeOo>r97^Z-oszlPvXi8G(i)xcEShckbn;*yM1`-;f#iTWrB}mcHiHTU zv@VT~^W0bDfD5(8SrjGI9yiE%NMWY+B@pgg{$IlP;Ss$oHS#mO=CVG6((9?mcTRTD zq3pynS(%Lbw@A;ED2;JGA+$Fryy z%*glg+2x+waJgwk4a0J-s91rDVj$w|UQ@xJ4Sm=Sm3mj6+htDTD+gQ@INu0k1Y{<( z?^X&Lx-uX(mA@5mrN%@7Hx1##ch&hu$O76@f%d`K0)CFf^8O7Ys@79J5?6k0BteYi z8XapWLotaMPx-eS!fkpUxry6Wb$yP0i`R91)v(9YMU z`+#P~voO!M)|u>HCjg4<$>YKxMryrO<@Q}Y!M0?$(4=(cTmA{rCsu&_<$?d?G5)F- z5{Arw@|?m0V4)|EM;V~NHP~=jL7v};v?p#~#8PhgMF09v%&#Cm2Dt@Ahs#t)bH=#UEYs_MZ30?{nBdrBX`$DH-L9?^=&TeF<=>HUG)Z4@ZxC z;gdFQfacoOUg0^r5#CpDgQKQy70i=jKAcOLwd;F;C!9?)?O52BaK1WU^jlcLCm!u! z@9w|;56GC8+eb&uXX6*{-s;(q*=*j(H*VfF`UDfZR^Gz2MM^t(#qO2CxIo@74dH>^ z{u##Kp%#D*DDD2qlf9&}@^sjbj<*kw`*A{^-rkGD!SlY^yhxGQr@ph5KX>!OgXyDb z6Y~~<@+^z+Dw~*(8-D3mj=QcjbdQJyOTGYH0*@}b#vQFSRaZEGO8GLx46Z4mA#OSw z)x+u@BvbTPJPxl0$1e_chcEYzj_rAXt|sw&pfI+4AzOW#IG`-i$=NGyvg=NUbBNr- z^+fIty?t4pC;M+rdRZ&s12cA>MGXl-WqE83xg0O&3mh!x3C<7{GmSY7V1qgVVx=`# z66HUUcp?*01Lx8nR9MdRA#t0T#ZTz0z~WE)c#2_T!aLgNZn+*-XQ<3;1gS{J*Fqz_ zMk5?j7rHYW{q7q6g@ssyW(28(Pb^4M#eoLjARsJ7xPEG0ahWDqoa)z2iBrshLBB;f z#8@r&R)ev}MJAHu9NU=#jd>}JN#{92N527xYoLR*NTNA1bI~}*uw2PF zk_FM+C9Vj8%q>dn3vcBP_ttEwHLtYAo$BTVLr7Q}8$)I3^?M9oMjVZ!Jf(1GO%rPx zlbbfFhZJK&bF_|YcQKc;TjzSJ_0hUs%2EgRUR#HIZC&4s<~}w`0+{a#QHXcMR_U=+ ziIfCTi~ic1SYJoD9M=KxgfGHM`BWF)|*7??LFT=IKEvgGUxD%g3#n^wWj(gfkaa1 z#L`z*w$wK)_4=9=Tw8DZPna{uUeu}C!rTrnj>d-bp+0FVaUtL&F12QB$~D53ae3c` zr74DIs!5S-MP81EG8mo*wsDwKf)c&cp|VRm$_%ZU>y&pFcH#DpFA)D4DQ$VPnAg0} zi}D8&{QFOur?e!ATW5HNTo0y}sJYp&^cv>dN@94@ANLkdT>7tE-b}SoMgf?Qfpx*V z$AFG^54|%0Q9!Q06JNfIoS~cdX3Lkadi#aXnETbdu~)CO$Mo^@gM(ud^O97Tp9mxt zmptyVfY*NWo*nG|1m#6OEaG5%3DxfG?eDyNvpcw>9^dJ9mFOQ)219vDSP-LU4SU!z zlr!a!|L9QKS9WGR{KWlVdAhf2NPETW%a*g(5%x!iJDSUF5OXuz%M-xz?G>W!Uq`GB z?U1&vbbc^nEVQ;NzOJ6@!C=7dIwjpZVyFG%qpR;EhFnPlSu=T} zC3H+vnvGLx%G0V^)PbX9KV{xlm9eYrg9sjYq9Cas%Mb?-jBZ#fUn}}((LGb8UdpDdCIJYF@*!kltUep|plGpF z!x!&XCrN#n&k`6wT~ECEpa1!vtRD8UP#+bdI8a}iU*;HIqwxLJPN-JnJf31OM>J?g zeh`?!`)i$hTBK{fW$6Wc+kCXvc?kc1gt9a%Dx^{v)?~|{W)uKbPb?xx;yb#ng$CjNmlv7gg#LyZw^t9PZb8^XCd@Fu9KOph`GjaE$DSahoN4kIRj=kxISgHkNd|ug3047rS_(i`U=R7u4 zR~Qxfm>2=IkGC%}a9AyP7hUGT&uN^r*429Z%E#5B59Fx#L~WXO_EYv7#QN%c+=-RK zkEyU35w4c*;p9G?l>b9}o!_3AVy9low5wL%);qC9lZpN*-|&y!HJ>J*lq|=jZH>5K z^v?1G?pdu&Yk|jV{O^XyMl&D>7;QZQJQF{RJos(O|_0L=fKjctt|&lwbfJm zp!)WA!0mYMRM8*qjd!;8QifI2xV3h4<((YW9e@w@S?hfKK(9)^!2;QkfeLIzg|OfUsjbm}8mB6j9a2Gl$Rz z*PKdQANj0$eLd~BYa_qRTjM!rm0B!|T)_kW=41=>$>JEDq4POBMU%cdx%&|cT%G!E zi`v5QmO#&MKIo_i_cy=sg584h zFTr&m9OO*NY;Fb*f(Kr3bguTdUk$uqf6kjP*vH%m?;=ikGg`*8iCPx%EG{^C6h#Wg zYDYiqAG|)=JHo2a?m|7EDLAj0O}~XN;aL*TdBJw3oIJtQ$nM~1=Wy@!@!r8cwS!t( zFZgRlAgE2XpDO~yYX&6nj!j}2pb8>%V;aXg@`D?r#^eN{6qgvJjXiHPw4YqriHVI0tNm#F1k#%nL_! zp>#!yx7{Lr+nt0MXGB{5Sz4wXi7>6naz4c0-c4CDCE_^W>AN3Wa_a7F&Oav~FH`g^BoPC8|prbh(X9+Fx+@H2np0Q(OW-u+xP#Ut0g`tlU!6o*oJG!L?P4`K zfuNIj1>PQKeZ!>Tff+2`9hkmP_e_cXyz3JENy$W}O!7;6ZbE63;?9QlGC_x=`mvsI zLalt|>G8RlrB)@qE{(12Q7TF|4^t@@w)DBHLDpHdE8X5E*><^K)$!`x{3zXU2CCnt zkJr+NBrI*1vg+mDG$E0+qPO&RMwT_+joG-R{-Ru;lXBnCN>du{I%I=N%O<7vO^ts> z0&b0r_7V(;bkoiCULcaRYTnEAObMIQm_1FZ{avb2=1YAO&1~KLy2`mmz?4(d!z7w~ zbg4Di7%LKK5;}KtX?o>Un$rAV?d{f-sSGz2VYbyd$u!o`i3z

+ + + +